From: hwg Date: Sat, 28 Feb 2015 09:06:56 +0000 (+0800) Subject: remove unused wifi driver: rda5990, mt5931, mt7601, mt6620 X-Git-Tag: firefly_0821_release~4263^2~35 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=91b464e2f9a5a85ec5594635e78866553970c560;p=firefly-linux-kernel-4.4.55.git remove unused wifi driver: rda5990, mt5931, mt7601, mt6620 --- diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/Kconfig b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/Kconfig deleted file mode 100755 index 446d5f99370f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/Kconfig +++ /dev/null @@ -1,25 +0,0 @@ -menuconfig MTK_COMBO_MT66XX - bool "MediaTek combo_mt66xx WiFi Config" - help - Config MTK combo chip mt6628&mt6620 - -if MTK_COMBO_MT66XX - -config MTK_COMBO_WIFI - tristate "MediaTek Combo Chip Wi-Fi support" - default y - #depends on MTK_COMBO_WMT - depends on MMC - depends on IPV6 - select WIRELESS_EXT - select WEXT_PRIV - help - This module adds support for wireless adapters based on - MTK MT66XX chipset. - - This driver uses the kernel's wireless extensions subsystem. - - If you choose to build a module, it'll be called dhd. Say M if - unsure. - -endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/Makefile b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/Makefile deleted file mode 100755 index 719799af0775..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -obj-$(CONFIG_MTK_COMBO_WIFI) += mt6620/ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/Makefile b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/Makefile deleted file mode 100755 index 2968515154cd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_MTK_COMBO_WIFI) += wlan/ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/Makefile b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/Makefile deleted file mode 100755 index f106d909acfe..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/Makefile +++ /dev/null @@ -1,142 +0,0 @@ -# --------------------------------------------------- -# Compile Options -# --------------------------------------------------- - -#include $(MTK_PATH_BUILD)/Makefile -ccflags-y += -DLINUX -DMT6620 - -ifeq ($(MTK_WAPI_SUPPORT), yes) - ccflags-y += -DCFG_SUPPORT_WAPI=1 -else - ccflags-y += -DCFG_SUPPORT_WAPI=0 -endif - -ifeq ($(HAVE_XLOG_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_XLOG=1 -else - ccflags-y += -DCFG_SUPPORT_XLOG=0 -endif - -ifeq ($(HAVE_AEE_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_AEE=1 -else - ccflags-y += -DCFG_SUPPORT_AEE=0 -endif - -#ifeq ($(CONFIG_MTK_COMBO_WIFI_HIF_SDIO1), y) -# ccflags-y += -D_HIF_SDIO=1 -#endif - -MODULE_NAME := wlan_mt6620 - -ccflags-y += -D_HIF_SDIO=1 - -ccflags-y += -DDBG=1 -ccflags-y += -I$(src)/os -I$(src)/os/linux/include -I$(src)/os/linux/hif/sdio/include -ccflags-y += -I$(src)/include -I$(src)/include/nic -I$(src)/include/mgmt - -obj-$(CONFIG_MTK_COMBO_WIFI) += $(MODULE_NAME).o -#obj-m += $(MODULE_NAME).o - -# --------------------------------------------------- -# Directory List -# --------------------------------------------------- -COMMON_DIR := common/ -OS_DIR := os/linux/ -HIF_DIR := os/linux/hif/sdio/ -NIC_DIR := nic/ -MGMT_DIR := mgmt/ - - -# --------------------------------------------------- -# Objects List -# --------------------------------------------------- - -COMMON_OBJS := $(COMMON_DIR)dump.o \ - $(COMMON_DIR)wlan_lib.o \ - $(COMMON_DIR)wlan_oid.o \ - $(COMMON_DIR)wlan_bow.o - -NIC_OBJS := $(NIC_DIR)nic.o \ - $(NIC_DIR)nic_tx.o \ - $(NIC_DIR)nic_rx.o \ - $(NIC_DIR)nic_pwr_mgt.o \ - $(NIC_DIR)cmd_buf.o \ - $(NIC_DIR)que_mgt.o \ - $(NIC_DIR)nic_cmd_event.o - -OS_OBJS := $(OS_DIR)gl_init.o \ - $(OS_DIR)gl_kal.o \ - $(OS_DIR)gl_bow.o \ - $(OS_DIR)gl_wext.o \ - $(OS_DIR)gl_wext_priv.o \ - $(OS_DIR)gl_rst.o \ - $(OS_DIR)gl_cfg80211.o \ - $(OS_DIR)platform.o - -MGMT_OBJS := $(MGMT_DIR)ais_fsm.o \ - $(MGMT_DIR)aaa_fsm.o \ - $(MGMT_DIR)assoc.o \ - $(MGMT_DIR)auth.o \ - $(MGMT_DIR)bss.o \ - $(MGMT_DIR)cnm.o \ - $(MGMT_DIR)cnm_timer.o \ - $(MGMT_DIR)cnm_mem.o \ - $(MGMT_DIR)hem_mbox.o \ - $(MGMT_DIR)mib.o \ - $(MGMT_DIR)privacy.o \ - $(MGMT_DIR)rate.o \ - $(MGMT_DIR)rlm.o \ - $(MGMT_DIR)rlm_domain.o \ - $(MGMT_DIR)rlm_obss.o \ - $(MGMT_DIR)rlm_protection.o \ - $(MGMT_DIR)rsn.o \ - $(MGMT_DIR)saa_fsm.o \ - $(MGMT_DIR)scan.o \ - $(MGMT_DIR)scan_fsm.o \ - $(MGMT_DIR)sec_fsm.o \ - $(MGMT_DIR)swcr.o \ - $(MGMT_DIR)roaming_fsm.o - -# --------------------------------------------------- -# P2P Objects List -# --------------------------------------------------- - -COMMON_OBJS += $(COMMON_DIR)wlan_p2p.o - -NIC_OBJS += $(NIC_DIR)p2p_nic.o - -OS_OBJS += $(OS_DIR)gl_p2p.o \ - $(OS_DIR)gl_p2p_cfg80211.o \ - $(OS_DIR)gl_p2p_init.o \ - $(OS_DIR)gl_p2p_kal.o - -MGMT_OBJS += $(MGMT_DIR)p2p_assoc.o \ - $(MGMT_DIR)p2p_bss.o \ - $(MGMT_DIR)p2p_fsm.o \ - $(MGMT_DIR)p2p_func.o \ - $(MGMT_DIR)p2p_rlm.o \ - $(MGMT_DIR)p2p_rlm_obss.o \ - $(MGMT_DIR)p2p_scan.o \ - $(MGMT_DIR)p2p_ie.o \ - $(MGMT_DIR)p2p_state.o - - -ifeq ($(MTK_WAPI_SUPPORT), yes) -MGMT_OBJS += $(MGMT_DIR)wapi.o -endif - -ifeq ($(WLAN_PROC), y) -OS_OBJS += gl_proc.o -endif - -HIF_OBJS := $(HIF_DIR)arm.o \ - $(HIF_DIR)sdio.o - -$(MODULE_NAME)-objs += $(COMMON_OBJS) -$(MODULE_NAME)-objs += $(NIC_OBJS) -$(MODULE_NAME)-objs += $(OS_OBJS) -$(MODULE_NAME)-objs += $(HIF_OBJS) -$(MODULE_NAME)-objs += $(MGMT_OBJS) - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/dump.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/dump.c deleted file mode 100755 index 95f2d7f25b76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/dump.c +++ /dev/null @@ -1,539 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/dump.c#1 $ -*/ - -/*! \file "dump.c" - \brief Provide memory dump function for debugging. - - Provide memory dump function for debugging. -*/ - - - -/* -** $Log: dump.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 19:58:51 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if DBG -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - LOG_FUNC("DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - LOG_FUNC("(%08lx) %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - LOG_FUNC("(%08lx) %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - LOG_FUNC("(%08lx) %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - LOG_FUNC("\n"); - - return; -} /* end of dumpMemory8() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in double words. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length) -{ - PUINT_8 pucAddr; - - - ASSERT(pu4StartAddr); - - LOG_FUNC("DUMP32 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pu4StartAddr, u4Length); - - if (IS_NOT_ALIGN_4((UINT_32)pu4StartAddr)) { - UINT_32 u4ProtrudeLen = sizeof(UINT_32) - ((UINT_32)pu4StartAddr % 4); - - - u4ProtrudeLen = ((u4Length < u4ProtrudeLen) ? u4Length: u4ProtrudeLen); - LOG_FUNC("pu4StartAddr is not at DW boundary.\n"); - pucAddr = (PUINT_8) &pu4StartAddr[0]; - - switch (u4ProtrudeLen) { - case 1: - LOG_FUNC("(%08lx) %02x------\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x%02x----\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - LOG_FUNC("(%08lx) %02x%02x%02x--\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - - u4Length -= u4ProtrudeLen; - pu4StartAddr = (PUINT_32)((UINT_32)pu4StartAddr + u4ProtrudeLen); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %08lx %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], pu4StartAddr[3]); - pu4StartAddr += 4; - u4Length -= 16; - } - else { - switch (u4Length) { - case 1: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ------%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 4: - LOG_FUNC("(%08lx) %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0]); - break; - case 5: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[0]); - break; - case 6: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[1], pucAddr[0]); - break; - case 7: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 8: - LOG_FUNC("(%08lx) %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1]); - break; - case 9: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[0]); - break; - case 10: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[1], pucAddr[0]); - break; - case 11: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 12: - LOG_FUNC("(%08lx) %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2]); - break; - case 13: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[0]); - break; - case 14: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[1], pucAddr[0]); - break; - case 15: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - u4Length = 0; - } - } - - return; -} /* end of dumpMemory32() */ -#elif CFG_SUPPORT_XLOG - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - if (log_level == ANDROID_LOG_ERROR) { - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_WARN) { - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_INFO) { - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_DEBUG) { - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_VERBOSE) { - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - XLOG_FUNC(log_level, "%02x\n", - pucStartAddr[ 0]); - break; - case 2: - XLOG_FUNC(log_level, "%02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - XLOG_FUNC(log_level, "%02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - XLOG_FUNC(log_level, "%02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - - return; -} /* end of dumpMemory8() */ -#endif /* DBG */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_bow.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_bow.c deleted file mode 100755 index 41b179dde04e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_bow.c +++ /dev/null @@ -1,3898 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_bow.c#1 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the 802.11 PAL commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_bow.c $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 01 09 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00110632] [Rose][LCA42][Cross Feature][Bluetooth]The "KE" pops up after the device reboots automatically.(once) - * - * Fix bow link disconnected event dereference. - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 terry.wu - * NULL - * Fix BoW KE. - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * aware more compile options. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * . - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Only reply probe response to its peer or mached SSID for BoW AP. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW SAA retry and disable disconnect event when AAA fail . - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 17 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix wrong StaRec state of BoW . - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix prAssocRspSwRfb casting. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 28 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Simplify link disconnected routine, remove link disconnected other routine. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add new feature - multiple physical link support. - * - * 02 22 2011 wh.su - * [WCXRP00000486] [MT6620 Wi-Fi][BOW] Fixed the bow send frame but not encrypted issue - * fixed the BOW packet sending without encrypted issue. - * - * 02 21 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BOW link disconnection bug. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting. - * - * 02 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW channel granted function. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW to support multiple physical link. - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix for event returnning Band. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 chinghwa.yu - * NULL - * Fix bowResponderScanDone error when prBssDesc is NULL. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * indicate correct AIS network information for PAL. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Initialize nicActivateNetwork(prAdapter as soon as bow is starting.. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * 2) command sequence number is now increased atomically - * * 3) private data could be hold and taken use for other purpose -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -#if CFG_BOW_TEST -extern UINT_32 g_arBowRevPalPacketTime[32]; -#endif - - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -static UINT_32 g_u4LinkCount = 0; -static UINT_32 g_u4Beaconing = 0; -static BOW_TABLE_T arBowTable[CFG_BOW_PHYSICAL_LINK_NUM]; - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -const BOW_CMD_T arBowCmdTable[] = { - {BOW_CMD_ID_GET_MAC_STATUS, bowCmdGetMacStatus}, - {BOW_CMD_ID_SETUP_CONNECTION, bowCmdSetupConnection}, - {BOW_CMD_ID_DESTROY_CONNECTION, bowCmdDestroyConnection}, - {BOW_CMD_ID_SET_PTK, bowCmdSetPTK}, - {BOW_CMD_ID_READ_RSSI, bowCmdReadRSSI}, - {BOW_CMD_ID_READ_LINK_QUALITY, bowCmdReadLinkQuality}, - {BOW_CMD_ID_SHORT_RANGE_MODE, bowCmdShortRangeMode}, - {BOW_CMD_ID_GET_CHANNEL_LIST, bowCmdGetChannelList}, -}; - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCID, - IN BOOLEAN fgSetQuery, - IN BOOLEAN fgNeedResp, - IN PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - IN PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - IN UINT_32 u4SetQueryInfoLen, - IN PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_BOW_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - prCmdInfo->u4PrivateData = (UINT_32) ucSeqNumber; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dispatch command coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - WLAN_STATUS retval = WLAN_STATUS_FAILURE; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < sizeof(arBowCmdTable) / sizeof(BOW_CMD_T); i++) { - if ((arBowCmdTable[i].uCmdID == prCmd->rHeader.ucCommandId) && - arBowCmdTable[i].pfCmdHandle) { - retval = arBowCmdTable[i].pfCmdHandle(prAdapter, prCmd); - break; - } - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_MAC_STATUS -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_MAC_STATUS prMacStatus; - UINT_8 idx = 0; - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eBssSCO; - UINT_8 ucNumOfChannel = 0;//MAX_BOW_NUMBER_OF_CHANNEL; - - RF_CHANNEL_INFO_T aucChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; - - ASSERT(prAdapter); - - //3 <1> If LinkCount != 0 -> OK (optional) - - eBand = BAND_2G4; - eBssSCO = CHNL_EXT_SCN; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS)), VIR_MEM_TYPE); - - prEvent->rHeader.ucEventId = BOW_EVENT_ID_MAC_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_MAC_STATUS); - - // fill event body - prMacStatus = (P_BOW_MAC_STATUS)(prEvent->aucPayload); - kalMemZero(prMacStatus, sizeof(BOW_MAC_STATUS)); - - //3 <2> Call CNM to decide if BOW available. - if (cnmBowIsPermitted(prAdapter)) - { - prMacStatus->ucAvailability = TRUE; - } - else - { - prMacStatus->ucAvailability = FALSE; - } - - memcpy(prMacStatus->aucMacAddr, prAdapter->rWifiVar.aucDeviceAddress, PARAM_MAC_ADDR_LEN); - - if (cnmPreferredChannel(prAdapter, &eBand, &ucPrimaryChannel, &eBssSCO)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get preferred channel.\n")); -#endif - - prMacStatus->ucNumOfChannel = 1; - prMacStatus->arChannelList[0].ucChannelBand = eBand; - prMacStatus->arChannelList[0].ucChannelNum = ucPrimaryChannel; - } - else - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get channel list. Current number of channel, %d.\n", ucNumOfChannel)); -#endif - - rlmDomainGetChnlList(prAdapter, BAND_2G4, MAX_BOW_NUMBER_OF_CHANNEL_2G4, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_2G4*/; idx++) - { - prMacStatus->arChannelList[idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = ucNumOfChannel; - } - - rlmDomainGetChnlList(prAdapter, BAND_5G, MAX_BOW_NUMBER_OF_CHANNEL_5G, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_5G*/; idx++) - { - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = prMacStatus->ucNumOfChannel + ucNumOfChannel; - - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("ucNumOfChannel, eBand, aucChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - ucNumOfChannel, - aucChannelList[0].eBand, - aucChannelList[0].ucChannelNum, - aucChannelList[1].ucChannelNum, - aucChannelList[2].ucChannelNum, - aucChannelList[3].ucChannelNum, - aucChannelList[4].ucChannelNum, - aucChannelList[5].ucChannelNum, - aucChannelList[6].ucChannelNum, - aucChannelList[7].ucChannelNum, - aucChannelList[8].ucChannelNum, - aucChannelList[9].ucChannelNum, - aucChannelList[10].ucChannelNum, - aucChannelList[11].ucChannelNum, - aucChannelList[12].ucChannelNum, - aucChannelList[13].ucChannelNum, - aucChannelList[14].ucChannelNum, - aucChannelList[15].ucChannelNum, - aucChannelList[16].ucChannelNum, - aucChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, eBand, prMacStatus->arChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prMacStatus->ucNumOfChannel, - prMacStatus->arChannelList[0].ucChannelBand, - prMacStatus->arChannelList[0].ucChannelNum, - prMacStatus->arChannelList[1].ucChannelNum, - prMacStatus->arChannelList[2].ucChannelNum, - prMacStatus->arChannelList[3].ucChannelNum, - prMacStatus->arChannelList[4].ucChannelNum, - prMacStatus->arChannelList[5].ucChannelNum, - prMacStatus->arChannelList[6].ucChannelNum, - prMacStatus->arChannelList[7].ucChannelNum, - prMacStatus->arChannelList[8].ucChannelNum, - prMacStatus->arChannelList[9].ucChannelNum, - prMacStatus->arChannelList[10].ucChannelNum, - prMacStatus->arChannelList[11].ucChannelNum, - prMacStatus->arChannelList[12].ucChannelNum, - prMacStatus->arChannelList[13].ucChannelNum, - prMacStatus->arChannelList[14].ucChannelNum, - prMacStatus->arChannelList[15].ucChannelNum, - prMacStatus->arChannelList[16].ucChannelNum, - prMacStatus->arChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, %x.\n", prMacStatus->ucNumOfChannel)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelBand, %x.\n", prMacStatus->arChannelList[0].ucChannelBand)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelNum, %x.\n", prMacStatus->arChannelList[0].ucChannelNum)); - DBGLOG(BOW, EVENT, ("prMacStatus->ucAvailability, %x.\n", prMacStatus->ucAvailability)); - DBGLOG(BOW, EVENT, ("prMacStatus->aucMacAddr, %x:%x:%x:%x:%x:%x.\n", - prMacStatus->aucMacAddr[0], - prMacStatus->aucMacAddr[1], - prMacStatus->aucMacAddr[2], - prMacStatus->aucMacAddr[3], - prMacStatus->aucMacAddr[4], - prMacStatus->aucMacAddr[5])); -#endif - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS))); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SETUP_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SETUP_CONNECTION prBowSetupConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - - UINT_8 ucBowTableIdx = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowSetupConnection = (P_BOW_SETUP_CONNECTION) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SETUP_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <1> If ucLinkCount >= 4 -> Fail. - if (g_u4LinkCount >= CFG_BOW_PHYSICAL_LINK_NUM) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <2> Call CNM, check if BOW is available. - if (!cnmBowIsPermitted(prAdapter)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <3> Lookup BOW Table, if Peer MAC address exist and valid -> Fail. - if (bowCheckBowTableIfVaild(prAdapter, prBowSetupConnection->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if(EQUAL_MAC_ADDR(prBowSetupConnection->aucPeerAddress, prAdapter->rWifiVar.aucDeviceAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_NOT_ACCEPTED; - } - - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = BOW_SETUP_CMD; - rCmdBtOverWifi.ucChannelNum = prBowSetupConnection->ucChannelNum; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowSetupConnection->aucPeerAddress); - rCmdBtOverWifi.u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - rCmdBtOverWifi.ucTimeoutDiscovery = prBowSetupConnection->ucTimeoutDiscovery; - rCmdBtOverWifi.ucTimeoutInactivity = prBowSetupConnection->ucTimeoutInactivity; - rCmdBtOverWifi.ucRole = prBowSetupConnection->ucRole; - rCmdBtOverWifi.PAL_Capabilities = prBowSetupConnection->ucPAL_Capabilities; - rCmdBtOverWifi.cMaxTxPower = prBowSetupConnection->cMaxTxPower; - - if (prBowSetupConnection->ucChannelNum > 14) { - rCmdBtOverWifi.ucChannelBand = BAND_5G; - } - else { - rCmdBtOverWifi.ucChannelBand = BAND_2G4; - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowSetupConnection->aucPeerAddress); - -#if CFG_BOW_PHYSICAL_LINK_NUM > 1 - /*Channel check for supporting multiple physical link*/ - if(g_u4LinkCount > 0) { - if (prBowSetupConnection->ucChannelNum != prBowFsmInfo->ucPrimaryChannel) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - } -#endif - - prBowFsmInfo->ucPrimaryChannel = prBowSetupConnection->ucChannelNum; - prBowFsmInfo->eBand = rCmdBtOverWifi.ucChannelBand; - prBowFsmInfo->u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - prBowFsmInfo->ucRole = prBowSetupConnection->ucRole; - - if (prBowSetupConnection->ucPAL_Capabilities > 0) - { - prBowFsmInfo->fgSupportQoS = TRUE; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection.\n")); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Channel Number - 0x%x.\n", rCmdBtOverWifi.ucChannelNum)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Peer address - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Beacon interval - 0x%x.\n", rCmdBtOverWifi.u2BeaconInterval)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout activity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutDiscovery)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout inactivity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutInactivity)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Role - 0x%x.\n", rCmdBtOverWifi.ucRole)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi PAL capability - 0x%x.\n", rCmdBtOverWifi.PAL_Capabilities)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Max Tx power - 0x%x.\n", rCmdBtOverWifi.cMaxTxPower)); -#endif - - //3 <4> Get a free BOW entry, mark as Valid, fill in Peer MAC address, LinkCount += 1, state == Starting. - if (!bowGetBowTableFreeEntry(prAdapter, &ucBowTableIdx)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - prBowFsmInfo->prTargetBssDesc = NULL; - - COPY_MAC_ADDR(rBowTable.aucPeerAddress, prBowSetupConnection->aucPeerAddress); - //owTable.eState = BOW_DEVICE_STATE_ACQUIRING_CHANNEL; - rBowTable.fgIsValid = TRUE; - rBowTable.ucAcquireID = prBowFsmInfo->ucSeqNumOfChReq; - //rBowTable.ucRole = prBowSetupConnection->ucRole; - //rBowTable.ucChannelNum = prBowSetupConnection->ucChannelNum; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - kalSetBowRole(prAdapter->prGlueInfo, rCmdBtOverWifi.ucRole, prBowSetupConnection->aucPeerAddress); - - GLUE_INC_REF_CNT(g_u4LinkCount); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, cnmTimerInitTimer.\n")); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->u2BeaconInterval, %d.\n", prBowFsmInfo->u2BeaconInterval)); -#endif - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rStartingBeaconTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowSendBeacon, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowChGrantedTimeout, - (UINT_32)NULL); - - //Reset Global Variable - g_u4Beaconing = 0; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("kalInitBowDevice, bow0\n")); -#endif -#if CFG_BOW_SEPARATE_DATA_PATH - kalInitBowDevice(prAdapter->prGlueInfo, BOWDEVNAME); -#endif - - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - if(rCmdBtOverWifi.ucRole == BOW_INITIATOR) { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } else { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - bowResponderScan(prAdapter); - } - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_DESTROY_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_DESTROY_CONNECTION prBowDestroyConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; -#if CFG_BOW_TEST - UINT_8 ucIdx; -#endif - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - //3 <1> If LinkCount == 0 ->Fail (Optional) - if (g_u4LinkCount == 0) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_DESTROY_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <2> Lookup BOW table, check if is not exist (Valid and Peer MAC address) -> Fail - prBowDestroyConnection = (P_BOW_DESTROY_CONNECTION) &(prCmd->aucPayload[0]); - - if (!bowCheckBowTableIfVaild(prAdapter, prBowDestroyConnection->aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, bowCheckIfVaild, not accepted.\n")); -#endif - return WLAN_STATUS_NOT_ACCEPTED; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, destroy Peer address - %x:%x:%x:%x:%x:%x.\n", prBowDestroyConnection->aucPeerAddress[0], - prBowDestroyConnection->aucPeerAddress[1], - prBowDestroyConnection->aucPeerAddress[2], - prBowDestroyConnection->aucPeerAddress[3], - prBowDestroyConnection->aucPeerAddress[4], - prBowDestroyConnection->aucPeerAddress[5])); -#endif - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = 2; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowDestroyConnection->aucPeerAddress); - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowDestroyConnection->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, rCmdBtOverWifi.rPeerAddr - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); -#endif - -#if CFG_BOW_TEST - for (ucIdx = 0; ucIdx < 11; ucIdx++) - { - DBGLOG(BOW, EVENT, ("BoW receiving PAL packet delta time vs packet number -- %d ms vs %x.\n", ucIdx, g_arBowRevPalPacketTime[ucIdx])); - } -#endif - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - sizeof(CMD_BT_OVER_WIFI), - (PUINT_8) &rCmdBtOverWifi, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SET_PTK -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SET_PTK prBowSetPTK; - CMD_802_11_KEY rCmdKey; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SET_PTK)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowSetPTK = (P_BOW_SET_PTK) &(prCmd->aucPayload[0]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucPeerAddress[0], - prBowSetPTK->aucPeerAddress[1], - prBowSetPTK->aucPeerAddress[2], - prBowSetPTK->aucPeerAddress[3], - prBowSetPTK->aucPeerAddress[4], - prBowSetPTK->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("rCmdKey.ucIsAuthenticator, %x.\n", kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress))); -#endif - - if (!bowCheckBowTableIfVaild(prAdapter, prBowSetPTK->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowSetPTK->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - // fill CMD_802_11_KEY - rCmdKey.ucAddRemove = 1; // add - rCmdKey.ucTxKey = 1; - rCmdKey.ucKeyType = 1; - rCmdKey.ucIsAuthenticator = kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress); - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prBowSetPTK->aucPeerAddress); - rCmdKey.ucNetType = NETWORK_TYPE_BOW_INDEX; // BT Over Wi-Fi - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - rCmdKey.ucKeyId = 0; - rCmdKey.ucKeyLen = 16; // AES = 128bit - kalMemCopy(rCmdKey.aucKeyMaterial, prBowSetPTK->aucTemporalKey, 16); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucTemporalKey, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucTemporalKey[0], - prBowSetPTK->aucTemporalKey[1], - prBowSetPTK->aucTemporalKey[2], - prBowSetPTK->aucTemporalKey[3], - prBowSetPTK->aucTemporalKey[4], - prBowSetPTK->aucTemporalKey[5], - prBowSetPTK->aucTemporalKey[6], - prBowSetPTK->aucTemporalKey[7], - prBowSetPTK->aucTemporalKey[8], - prBowSetPTK->aucTemporalKey[9], - prBowSetPTK->aucTemporalKey[10], - prBowSetPTK->aucTemporalKey[11], - prBowSetPTK->aucTemporalKey[12], - prBowSetPTK->aucTemporalKey[13], - prBowSetPTK->aucTemporalKey[14], - prBowSetPTK->aucTemporalKey[15])); - - DBGLOG(BOW, EVENT, ("rCmdKey.aucKeyMaterial, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - rCmdKey.aucKeyMaterial[0], - rCmdKey.aucKeyMaterial[1], - rCmdKey.aucKeyMaterial[2], - rCmdKey.aucKeyMaterial[3], - rCmdKey.aucKeyMaterial[4], - rCmdKey.aucKeyMaterial[5], - rCmdKey.aucKeyMaterial[6], - rCmdKey.aucKeyMaterial[7], - rCmdKey.aucKeyMaterial[8], - rCmdKey.aucKeyMaterial[9], - rCmdKey.aucKeyMaterial[10], - rCmdKey.aucKeyMaterial[11], - rCmdKey.aucKeyMaterial[12], - rCmdKey.aucKeyMaterial[13], - rCmdKey.aucKeyMaterial[14], - rCmdKey.aucKeyMaterial[15])); -#endif - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - wlanbowCmdEventSetCommon, - wlanbowCmdTimeoutHandler, - sizeof(CMD_802_11_KEY), - (PUINT_8) &rCmdKey, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_RSSI -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_RSSI prBowReadRSSI; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_READ_RSSI)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadRSSI = (P_BOW_READ_RSSI) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadRssi, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_LINK_QUALITY -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_LINK_QUALITY prBowReadLinkQuality; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(P_BOW_READ_LINK_QUALITY)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadLinkQuality = (P_BOW_READ_LINK_QUALITY) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadLinkQuality, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SHORT_RANGE_MODE -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SHORT_RANGE_MODE prBowShortRangeMode; - CMD_TX_PWR_T rTxPwrParam; - - ASSERT(prAdapter); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode.\n")); -#endif - - prBowShortRangeMode = (P_BOW_SHORT_RANGE_MODE) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SHORT_RANGE_MODE)) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (!bowCheckBowTableIfVaild(prAdapter, prBowShortRangeMode->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowShortRangeMode->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_NOT_ACCEPTED; - } - - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowShortRangeMode->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowShortRangeMode->aucPeerAddress[0], - prBowShortRangeMode->aucPeerAddress[1], - prBowShortRangeMode->aucPeerAddress[2], - prBowShortRangeMode->aucPeerAddress[3], - prBowShortRangeMode->aucPeerAddress[4], - prBowShortRangeMode->aucPeerAddress[5])); -#endif - - rTxPwrParam.cTxPwr2G4Cck = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GOFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GHT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - if (nicUpdateTxPower(prAdapter, &rTxPwrParam) == WLAN_STATUS_SUCCESS) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode, %x.\n", WLAN_STATUS_SUCCESS)); -#endif - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - return WLAN_STATUS_SUCCESS; - } - else - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_FAILURE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_CHANNEL_LIST -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - ASSERT(prAdapter); - - // not supported yet - return WLAN_STATUS_FAILURE; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = ucEventBuf; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkConnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkConnected, sizeof(BOW_LINK_CONNECTED)); - prBowLinkConnected->rChannel.ucChannelNum = prBssInfo->ucPrimaryChannel; - prBowLinkConnected->rChannel.ucChannelBand = prBssInfo->eBand; - COPY_MAC_ADDR(prBowLinkConnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelNum, 0x%x\n", prBowLinkConnected->rChannel.ucChannelNum)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelBand, 0x%x\n", prBowLinkConnected->rChannel.ucChannelBand)); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowLinkConnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkConnected->aucPeerAddress[0], - prBowLinkConnected->aucPeerAddress[1], - prBowLinkConnected->aucPeerAddress[2], - prBowLinkConnected->aucPeerAddress[3], - prBowLinkConnected->aucPeerAddress[4], - prBowLinkConnected->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate Event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED))); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - //bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - } - - /* set to connected status*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTED); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkDisconnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - UINT_8 ucBowTableIdx; - ENUM_BOW_DEVICE_STATE eFsmState; - BOOL fgSendDeauth = FALSE; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return; - } - /*Cancel scan*/ - else if(eFsmState == BOW_DEVICE_STATE_SCANNING && - !(prBowFsmInfo->fgIsChannelRequested)) { - bowResponderCancelScan(prAdapter, FALSE); - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_DISCONNECTING); - return; - } - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - if ((prCmdInfo->u4PrivateData)) - { - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - } - else - { - prEvent->rHeader.ucSeqNumber = 0; - } - - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkDisconnected, sizeof(BOW_LINK_DISCONNECTED)); - prBowLinkDisconnected->ucReason = 0x0; - COPY_MAC_ADDR(prBowLinkDisconnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowLinkDisconnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkDisconnected->aucPeerAddress[0], - prBowLinkDisconnected->aucPeerAddress[1], - prBowLinkDisconnected->aucPeerAddress[2], - prBowLinkDisconnected->aucPeerAddress[3], - prBowLinkDisconnected->aucPeerAddress[4], - prBowLinkDisconnected->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate BoW event to PAL*/ -#if 0 - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); -#endif - - // set to disconnected status - prBowFsmInfo->prTargetStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_BOW_INDEX, prBowLinkDisconnected->aucPeerAddress); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - //bowReleaseCh(prAdapter); - } - -#if 1 - /*Send Deauth to connected peer*/ - if (eFsmState == BOW_DEVICE_STATE_CONNECTED && - (prBowFsmInfo->prTargetStaRec->ucStaState == STA_STATE_3)) - { - fgSendDeauth = TRUE; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, bowGetBowTableState, %x.\n", bowGetBowTableState(prAdapter, prBowLinkDisconnected->aucPeerAddress))); -#endif - authSendDeauthFrame(prAdapter, - prBowFsmInfo->prTargetStaRec, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - (PFN_TX_DONE_HANDLER)bowDisconnectLink); - } -#endif - -#if 0 - //3 <3>Stop this link; flush Tx; send deAuthentication -> abort. SAA, AAA. need to check BOW table state == Connected. - if (prAdapter->prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - } - - /* flush pending security frames */ - if (prAdapter->prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prAdapter->prGlueInfo); - } -#endif - - /*Update BoW table*/ - bowGetBowTableEntryByPeerAddress(prAdapter, prBowLinkDisconnected->aucPeerAddress, &ucBowTableIdx); - rBowTable.fgIsValid = FALSE; - rBowTable.eState = BOW_DEVICE_STATE_DISCONNECTED; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); - - /*Decrease link count*/ - GLUE_DEC_REF_CNT(g_u4LinkCount); - - /*If no need to send deauth, DO disconnect now*/ - /*If need to send deauth, DO disconnect at deauth Tx done*/ - if(!fgSendDeauth){ - bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BT_OVER_WIFI prCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // restore original command for rPeerAddr - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prCmdBtOverWifi = (P_CMD_BT_OVER_WIFI)(prWifiCmd->aucBuffer); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - // set to starting status - kalSetBowState(prAdapter->prGlueInfo, - BOW_DEVICE_STATE_STARTING, - prCmdBtOverWifi->rPeerAddr); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_LINK_QUALITY -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_LINK_QUALITY prBowLinkQuality; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_QUALITY; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_QUALITY); - - // fill event body - prBowLinkQuality = (P_BOW_LINK_QUALITY)(prEvent->aucPayload); - kalMemZero(prBowLinkQuality, sizeof(BOW_LINK_QUALITY)); - prBowLinkQuality->ucLinkQuality = (UINT_8)prLinkQuality->cLinkQuality; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_RSSI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_RSSI prBowRssi; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_RSSI; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_RSSI); - - // fill event body - prBowRssi = (P_BOW_RSSI)(prEvent->aucPayload); - kalMemZero(prBowRssi, sizeof(BOW_RSSI)); - prBowRssi->cRssi = (INT_8) prLinkQuality->cRssi; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the default command timeout handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_TIMEOUT; // timeout - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - return; -} - - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBowBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStoping.\n")); - DBGLOG(BOW, EVENT, ("bowStoping, SSID %s.\n", prBowBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("bowStoping, prBowBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucBSSID[0], - prBowBssInfo->aucBSSID[1], - prBowBssInfo->aucBSSID[2], - prBowBssInfo->aucBSSID[3], - prBowBssInfo->aucBSSID[4], - prBowBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucOwnMacAddr[0], - prBowBssInfo->aucOwnMacAddr[1], - prBowBssInfo->aucOwnMacAddr[2], - prBowBssInfo->aucOwnMacAddr[3], - prBowBssInfo->aucOwnMacAddr[4], - prBowBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); - DBGLOG(BOW, EVENT, ("bowStopping, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - kalPrint("BoW Stoping,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); -#endif - - if (g_u4LinkCount == 0) - { - /*Stop beaconing*/ - GLUE_DEC_REF_CNT(g_u4Beaconing); - - /*Deactive BoW network*/ - //prBowBssInfo->fgIsNetActive = FALSE; - //prBowBssInfo->fgIsBeaconActivated = FALSE; - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - /*temp solution for FW hal_pwr_mgt.c#3037 ASSERT*/ - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_BOW_INDEX); - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - return; -} - - -VOID -bowStarting( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("BoW Starting.\n")); - DBGLOG(BOW, EVENT, ("BoW channel granted.\n")); -#endif - -#if 0 - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBssInfo->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prBssInfo->eCurrentOPMode = OP_MODE_BOW; - - //4 <1.2> Setup SSID - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - prBssInfo->ucSSIDLen = BOW_SSID_LEN; - bowAssignSsid(prBssInfo->aucSSID, prBssInfo->aucOwnMacAddr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("SSID %s.\n", prBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("prBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucBSSID[0], - prBssInfo->aucBSSID[1], - prBssInfo->aucBSSID[2], - prBssInfo->aucBSSID[3], - prBssInfo->aucBSSID[4], - prBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucOwnMacAddr[0], - prBssInfo->aucOwnMacAddr[1], - prBssInfo->aucOwnMacAddr[2], - prBssInfo->aucOwnMacAddr[3], - prBssInfo->aucOwnMacAddr[4], - prBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); -#endif - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; - if (prBowFsmInfo->eBand == BAND_2G4) - { - prBssInfo->eBand = BAND_2G4; - } - else - { - prBssInfo->eBand = BAND_5G; - } - -#if CFG_BOW_SUPPORT_11N - prBssInfo->ucPhyTypeSet = prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - -#else - if (prBssInfo->eBand == BAND_2G4) - { - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else - { - //prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - //prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11A; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - //prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - //prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_OFDM; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - - -#endif - prBssInfo->fgErpProtectMode = FALSE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = prBowFsmInfo->u2BeaconInterval; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - if (prBowFsmInfo->fgSupportQoS) - { - prAdapter->rWifiVar.fgSupportQoS = TRUE; - prBssInfo->fgIsQBSS = TRUE; - } - - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - bssInitForAP(prAdapter, prBssInfo, TRUE); - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif /* CFG_SUPPORT_AAA */ - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->fgIsBeaconActivated = TRUE; - - //3 <3> Set MAC HW - - //4 <2> Initiate BSS_INFO_T - common part - BOW_BSS_INFO_INIT(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); -#endif - - //4 <3.1> use command packets to inform firmware - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.2> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.1> Reset HW TSF Update Mode and Beacon Mode - - //4 <3.2> Setup BSSID - // TODO: rxmSetRxFilterBSSID0 -// rxmSetRxFilterBSSID0(prBssInfo->ucHwBssidId, prBssInfo->aucBSSID); - - //4 <3.3> Setup RX Filter to accept Probe Request - // TODO: f get/set RX filter. - -#if 0 - { - UINT_32 u4RxFilter; - if (halMacRxGetRxFilters(&u4RxFilter)== HAL_STATUS_SUCCESS) { - - u4RxFilter &= ~BIT(RXFILTER_DROP_PROBE_REQ); - - halMacRxSetRxFilters(u4RxFilter); - } - } -#endif - } - - /*Update BoW Table*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_STARTING); - -#if CFG_BOW_TEST - kalPrint("BoW Starting,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Start beaconing*/ - if (g_u4Beaconing < 1) - { - GLUE_INC_REF_CNT(g_u4Beaconing); - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } - -#if 0 - /*Responder: Start to scan Initiator*/ - if (prBowFsmInfo->ucRole == BOW_RESPONDER) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting responder, start scan result searching.\n")); -#endif - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - bowResponderScan(prAdapter); - } - /*Initiator: Request channel, wait for responder*/ - else { - //bowRequestCh(prAdapter); - } -#endif - return; -} - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 puOwnMacAddr - ) -{ - UINT_8 i; - UINT_8 aucSSID[]=BOW_WILDCARD_SSID; - - kalMemCopy(pucSsid, aucSSID, BOW_WILDCARD_SSID_LEN); - - for (i = 0; i < 6; i++) - { - pucSsid[(3 * i) + 3] = 0x2D; - if ((*(puOwnMacAddr + i) >> 4) < 0xA) - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x30; - } - else - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x57; - } - - if ((*(puOwnMacAddr + i) & 0x0F) < 0xA) - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x30; - } - else - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x57; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateProbeReq.\n")); -#endif - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - /*If BoW AP is beaconing*/ - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW && - g_u4Beaconing > 0) { - - /*Check the probe requset sender is our peer*/ - if(bowCheckBowTableIfVaild(prAdapter, prMgtHdr->aucSrcAddr)) { - fgReplyProbeResp = TRUE; - } - /*Check the probe request target SSID is our SSID*/ - else if ((prIeSsid) && - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - else { - fgReplyProbeResp = FALSE; - } - } - - return fgReplyProbeResp; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if ((g_u4Beaconing != 0) && (g_u4LinkCount > 0) && (g_u4LinkCount < CFG_BOW_PHYSICAL_LINK_NUM)) - { - //Send beacon - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } -#if CFG_BOW_TEST - else { - kalPrint("BoW Send Beacon,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - } -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScan.\n")); - kalPrint("BOW SCAN [REQ:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq+1); -#endif - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - - if (!prScanReqMsg) - { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - /*Fill scan message*/ - prScanReqMsg->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_BOW_INDEX; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - prScanReqMsg->ucSSIDLength = BOW_SSID_LEN; - bowAssignSsid(prScanReqMsg->aucSSID, prBowFsmInfo->aucPeerAddress); - prScanReqMsg->ucChannelListNum = 1; - - if (prBowFsmInfo->eBand == BAND_2G4) - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_2G4; - } - else - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_5G; - } - - prScanReqMsg->arChnlInfoList[0].ucChannelNum = prBowFsmInfo->ucPrimaryChannel; - prScanReqMsg->u2IELen = 0; - - /*Send scan message*/ - mboxSendMsg(prAdapter, MBOX_ID_0, (P_MSG_HDR_T) prScanReqMsg, MSG_SEND_METHOD_BUF); - - /*Change state to SCANNING*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - - //prBowFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_DESC_T prBssDesc; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_BOW_DEVICE_STATE eFsmState; - ENUM_SCAN_STATUS eScanStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - ASSERT(prScanDoneMsg->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - eScanStatus = prScanDoneMsg->eScanStatus; - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScanDone.\n")); - kalPrint("BOW SCAN [DONE:%d]\n", ucSeqNumOfCompMsg); -#endif - - if( eScanStatus == SCAN_STATUS_CANCELLED) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCELLED:%d]\n", ucSeqNumOfCompMsg); -#endif - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTING) { - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - return; - } - else if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - //bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - return; - } - else if (ucSeqNumOfCompMsg != prBowFsmInfo->ucSeqNumOfScanReq) - { - DBGLOG(BOW, EVENT, ("Sequence no. of BOW Responder scan done is not matched.\n")); - return; - } - else - { - prConnSettings->fgIsScanReqIssued = FALSE; - prBssDesc = scanSearchBssDescByBssid(prAdapter, prBowFsmInfo->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("End scan result searching.\n")); -#endif - - /*Initiator is FOUND*/ - if (prBssDesc != NULL)// (prBssDesc->aucBSSID != NULL)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Search Bow Peer address - %x:%x:%x:%x:%x:%x.\n", prBssDesc->aucBSSID[0], - prBssDesc->aucBSSID[1], - prBssDesc->aucBSSID[2], - prBssDesc->aucBSSID[3], - prBssDesc->aucBSSID[4], - prBssDesc->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("Starting to join initiator.\n")); -#endif - /*Set target BssDesc*/ - prBowFsmInfo->prTargetBssDesc = prBssDesc; - /*Request channel to do JOIN*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } - /*Initiator is NOT FOUND*/ - else - { - /*Scan again, until PAL timeout*/ - bowResponderScan(prAdapter); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for cancelling scan request. There is another option to extend channel privilige -* for another purpose. -* -* @param fgIsChannelExtention - Keep the channel previlege, but can cancel scan timer. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ) -{ - - P_MSG_SCN_SCAN_CANCEL prScanCancel = (P_MSG_SCN_SCAN_CANCEL)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo = (P_BOW_FSM_INFO_T)NULL; - - DEBUGFUNC("bowResponderCancelScan()"); - - do { - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (TRUE) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCEL:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq); -#endif - /* There is a channel privilege on hand. */ - - DBGLOG(P2P, TRACE, ("BOW Cancel Scan\n")); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancel) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancel->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_CANCEL; - prScanCancel->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prScanCancel->ucSeqNum = prBowFsmInfo->ucSeqNumOfScanReq; -#if CFG_ENABLE_WIFI_DIRECT - prScanCancel->fgIsChannelExt = fgIsChannelExtention; -#endif - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancel, - MSG_SEND_METHOD_BUF); - - } - - } while (FALSE); - -} /* bowResponderCancelScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - ASSERT(prBssDesc); - ASSERT(prAdapter); - - DBGLOG(BOW, EVENT, ("Starting bowResponderJoin.\n")); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTING); - - //4 <2> Setup corresponding STA_RECORD_T - /*Support First JOIN and retry*/ - prStaRec = bssCreateStaRecFromBssDesc( - prAdapter, - STA_TYPE_BOW_AP, - NETWORK_TYPE_BOW_INDEX, - prBssDesc); - - prBowFsmInfo->prTargetStaRec = prStaRec; - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - prStaRec->fgIsReAssoc = FALSE; - prBowFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prBowFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(BOW, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prBowFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - ASSERT(0); - } - - //4 <4.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <5> Overwrite Connection Setting for eConnectionPolicy - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prBssDesc->aucSSID)); - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prConnSettings->aucSSID)); -#endif - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_BOW_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - prBssInfo->prStaRecOfAP = prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - printk("BoW trigger SAA ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for BOW FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - P_BSS_INFO_T prBssInfo; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete.\n")); - DBGLOG(BOW, EVENT, ("bowfsmRunEventJoinComplete ptr check\n")); - DBGLOG(BOW, EVENT, ("prMsgHdr %x\n", prMsgHdr)); - DBGLOG(BOW, EVENT, ("prAdapter %x\n", prAdapter)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo %x\n", prBowFsmInfo)); - DBGLOG(BOW, EVENT, ("prStaRec %x\n", prStaRec)); -#endif - - ASSERT(prStaRec); - ASSERT(prBowFsmInfo); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prBowFsmInfo->ucSeqNumOfReqMsg) { - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - prStaRec->eStaType = STA_TYPE_BOW_AP; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; -#if CFG_BOW_RATE_LIMITATION - //4 <1.2>Update Rate Set - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } - } -#endif - - //4 <1.1> Change FW's Media State immediately. - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <1.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ -#if CFG_BOW_SUPPORT_11N - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); -#endif - - //4 <1.3> Update BSS_INFO_T - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Finish bowUpdateBssInfoForJOIN.\n")); -#endif - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowFsmRunEventJoinComplete, qmActivateStaRec.\n")); -#endif - - //4 <1.7> Set the Next State of BOW FSM - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - //4 <2> JOIN was not successful - else - { - /*Retry*/ - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete -- Join failed.\n")); - printk("BoW trigger SAA REJOIN\n"); -#endif - } - } - - cnmMemFree(prAdapter, prMsgHdr); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // NOTE(Kevin): Move following line to bowChangeMediaState() macro per CM's request. - //prBowBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prBssInfo->ucPrimaryChannel); - - switch (prBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prBssInfo->ucReasonOfDisconnect; - - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_BOW_INDEX, &rEventConnStatus); - prBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(BOW, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAATxFail , bssRemoveStaRecFromClientList.\n")); - printk("BoW AAA TxFail, target state %d\n", prStaRec->ucStaState+1); -#endif - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prStaRec); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAAComplete, cnmStaRecChangeState, STA_STATE_3.\n")); - printk("BoW AAA complete ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - /*Update BssInfo to connected*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*Update StaRec to State3*/ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - /*Connected*/ - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle RxDeauth -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if(!IS_STA_IN_BOW(prStaRec)) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - eFsmState = bowGetBowTableState(prAdapter, prStaRec->aucMacAddr); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (prStaRec->ucStaState > STA_STATE_1) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - //P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; - } - - return WLAN_STATUS_NOT_ACCEPTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handle BoW Link disconnect. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - /*Free target StaRec*/ - if(prMsduInfo) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - } - else { - prStaRec = prBowFsmInfo->prTargetStaRec; - } - - if(prStaRec) { - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - kalPrint("bowDisconnectLink\n"); - /*No one connected*/ - if (g_u4LinkCount == 0 && g_u4Beaconing != 0) - { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer); - bowStopping(prAdapter); - kalPrint("bowStopping\n"); - /*Restore TxPower from Short range mode*/ -#if CFG_SUPPORT_NVRAM && 0 - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - /*Uninit BoW Interface*/ -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prAdapter->prGlueInfo); -#endif - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAssocTime = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prAssocReqFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAssocReqFrame->aucSrcAddr[0], - prAssocReqFrame->aucSrcAddr[1], - prAssocReqFrame->aucSrcAddr[2], - prAssocReqFrame->aucSrcAddr[3], - prAssocReqFrame->aucSrcAddr[4], - prAssocReqFrame->aucSrcAddr[5])); -#endif - - /*Assoc Accept*/ - while(EQUAL_MAC_ADDR(prAssocReqFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, return wlanbowCmdEventLinkConnected.\n")); -#endif - /*Update StaRec*/ - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAssocReqFrame->aucSrcAddr); - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; - -#if CFG_BOW_RATE_LIMITATION - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } else { - /*If no avaliable rate is found, DECLINE the association*/ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - } -#endif - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - - /*Undpate BssInfo to FW*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*reply successful*/ - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAssocResp = TRUE; - break; - } - - /*Reject Assoc*/ - if(*pu2StatusCode != STATUS_CODE_SUCCESSFUL) { - /*Reply Assoc with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAssocTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAssocTime == 0 - ) { - fgReplyAssocResp = TRUE; - rLastRejectAssocTime = rCurrentTime; - } - } - - return fgReplyAssocResp; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAuthTime = 0; - - /* TODO(Kevin): Call BoW functions to check .. - 1. Check we are BoW now. - 2. Check we can accept connection from thsi peer - 3. Check Black List here. - */ - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prAuthFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAuthFrame->aucSrcAddr[0], - prAuthFrame->aucSrcAddr[1], - prAuthFrame->aucSrcAddr[2], - prAuthFrame->aucSrcAddr[3], - prAuthFrame->aucSrcAddr[4], - prAuthFrame->aucSrcAddr[5])); -#endif - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAuthFrame->aucSrcAddr); - if (!prStaRec) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecAlloc.\n")); -#endif - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - ASSERT(prStaRec); - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - prBowBssInfo->prStaRecOfAP = prStaRec; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecChangeState.\n")); -#endif - } - else - { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucIndex, %x.\n", prStaRec->ucIndex)); -#endif - bssRemoveStaRecFromClientList(prAdapter, prBowBssInfo, prStaRec); - } - - if (EQUAL_MAC_ADDR(prAuthFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { - - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucNetTypeIndex, %x.\n", prStaRec->ucNetTypeIndex)); -#endif - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->ucJoinFailureCount = 0; - *pprStaRec = prStaRec; - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAuth = TRUE; - } - else { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - /*Reply auth with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAuthTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAuthTime == 0 - ) { - fgReplyAuth = TRUE; - rLastRejectAuthTime = rCurrentTime; - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, fgReplyAuth, %x.\n", fgReplyAuth)); -#endif - return fgReplyAuth; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - prBowFsmInfo->fgIsChannelGranted = TRUE; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Entering bowRunEventChGrant.\n")); -#endif - - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*Release channel*/ - if((!prBowFsmInfo->fgIsChannelRequested) || - (prBowFsmInfo->ucSeqNumOfChReq != ucTokenID) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTED) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTING)){ -#if CFG_BOW_TEST - printk("BoW Channel [GIVE UP:%d]\n", ucTokenID); - printk("[Requested:%d][ucSeqNumOfChReq:%d][eFsmState:%d]\n", - prBowFsmInfo->fgIsChannelRequested, prBowFsmInfo->ucSeqNumOfChReq, eFsmState); -#endif - bowReleaseCh(prAdapter); - return; - } - - /* 2. channel privilege has been approved */ - prBowFsmInfo->u4ChGrantedInterval = u4GrantInterval; - -#if 0 - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - prBowFsmInfo->u4ChGrantedInterval - BOW_JOIN_CH_GRANT_THRESHOLD); -#else - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - BOW_JOIN_CH_REQUEST_INTERVAL - BOW_JOIN_CH_GRANT_THRESHOLD); -#endif - - /* 3.2 set local variable to indicate join timer is ticking */ - prBowFsmInfo->fgIsInfraChannelFinished = FALSE; - -#if CFG_BOW_TEST - printk("BoW Channel [GRANTED:%d].\n", ucTokenID); -#endif - - if(eFsmState == BOW_DEVICE_STATE_ACQUIRING_CHANNEL) { - bowStarting(prAdapter); - bowReleaseCh(prAdapter); - if(prBowFsmInfo->ucRole == BOW_RESPONDER) { - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); - } - } - else { - /*update bssinfo*/ - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM for channel privilege requesting -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_REQ_T prMsgChReq; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (prBowFsmInfo->fgIsChannelGranted == FALSE) - { - -#if CFG_BOW_TEST - printk("BoW channel [REQUEST:%d], %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq+1, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChReq->ucTokenID = ++prBowFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; -#if 0 - prMsgChReq->u4MaxInterval = BOW_JOIN_CH_REQUEST_INTERVAL; -#else - prMsgChReq->u4MaxInterval = 1; -#endif - prMsgChReq->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; //prBowFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = CHNL_EXT_SCN; //prBowFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prBowFsmInfo->eBand; //prBowFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prBowFsmInfo->aucPeerAddress); - - - prBowFsmInfo->fgIsChannelRequested = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform BOW that channel privilege is granted -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if(prBowFsmInfo->fgIsChannelGranted != FALSE || prBowFsmInfo->fgIsChannelRequested != FALSE) - { -#if CFG_BOW_TEST - printk("BoW channel [RELEASE:%d] %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - - prBowFsmInfo->fgIsChannelRequested = FALSE; - prBowFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChAbort->ucTokenID = prBowFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - printk("BoW Channel [TIMEOUT]\n"); -#endif -#if 1 - //bowReleaseCh(prAdapter); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*If connecting is not completed, request CH again*/ - if((eFsmState == BOW_DEVICE_STATE_CONNECTING) || - (eFsmState == BOW_DEVICE_STATE_STARTING)) - { - bowRequestCh(prAdapter); - } -#endif -} - - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucBowTableIdx = 0; - CMD_INFO_T rCmdInfo; - - ASSERT(prAdapter); - - kalMemZero(&rCmdInfo, sizeof(CMD_INFO_T)); - - while (ucBowTableIdx < CFG_BOW_PHYSICAL_LINK_NUM) - { - if (arBowTable[ucBowTableIdx].fgIsValid) - { - COPY_MAC_ADDR(prAdapter->rWifiVar.rBowFsmInfo.aucPeerAddress, arBowTable[ucBowTableIdx].aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", ucBowTableIdx, - arBowTable[ucBowTableIdx].aucPeerAddress[0], - arBowTable[ucBowTableIdx].aucPeerAddress[1], - arBowTable[ucBowTableIdx].aucPeerAddress[2], - arBowTable[ucBowTableIdx].aucPeerAddress[3], - arBowTable[ucBowTableIdx].aucPeerAddress[4], - arBowTable[ucBowTableIdx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].fgIsValid, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif -#if 1 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#else - wlanbowCmdEventLinkDisconnected(prAdapter, &rCmdInfo, NULL); -#endif - } - - ucBowTableIdx += 1; - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return FALSE; -} - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - if (arBowTable[ucBowTableIdx].fgIsValid) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableContent, arBowTable[idx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); - printk("GET State [%d]\n", arBowTable[ucBowTableIdx].eState); -#endif - prBowTable = &(arBowTable[ucBowTableIdx]); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - COPY_MAC_ADDR(arBowTable[ucBowTableIdx].aucPeerAddress, prBowTable->aucPeerAddress); - arBowTable[ucBowTableIdx].eState = prBowTable->eState; - arBowTable[ucBowTableIdx].fgIsValid = prBowTable->fgIsValid; - arBowTable[ucBowTableIdx].ucAcquireID = prBowTable->ucAcquireID; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, prBowTable->eState, prBowTable->aucPeerAddress); - //kalSetBowRole(prAdapter->prGlueInfo, prBowTable->ucRole, prBowTable->aucPeerAddress); - -#if CFG_BOW_TEST - printk("SET State [%d]\n", arBowTable[ucBowTableIdx].eState); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[ucBowTableIdx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif - - return TRUE; - -} - - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - *pucBowTableIdx = idx; - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if(!arBowTable[idx].fgIsValid) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableFreeEntry, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - *pucBowTableIdx = idx; - arBowTable[idx].fgIsValid = TRUE; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].eState;, %x, %x.\n", idx, arBowTable[idx].eState)); - printk("GET State [%d]\n", arBowTable[idx].eState); -#endif - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return arBowTable[idx].eState; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ) -{ - UINT_8 ucBowTableIdx; - - if(bowGetBowTableEntryByPeerAddress(prAdapter, aucPeerAddress, &ucBowTableIdx)) { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - arBowTable[ucBowTableIdx].eState = eState; -#if CFG_BOW_TEST - printk("SET State [%d]\n", eState); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, eState, aucPeerAddress); - return TRUE; - } - return FALSE; -} - - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_lib.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_lib.c deleted file mode 100755 index 6032977a10fa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_lib.c +++ /dev/null @@ -1,5574 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_lib.c#2 $ -*/ -/*! \file wlan_lib.c - \brief Internal driver stack will export the required procedures here for GLUE Layer. - - This file contains all routines which are exported from MediaTek 802.11 Wireless - LAN driver stack to GLUE Layer. -*/ - - -/* -** $Log: wlan_lib.c $ -** -** 08 15 2012 eason.tsai -** [ALPS00338170] [Need Patch] [Volunteer Patch] modify build warning -** fix build waring for codechange - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 11 2012 cp.wu - * [WCXRP00001252] [MT6620 Wi-Fi][Driver] Add debug message while encountering firmware response timeout - * output message while timeout event occurs - * - * 06 11 2012 eason.tsai - * NULL - * change from binay to hex code - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct scan result removing policy. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 14 2011 cm.chang - * [WCXRP00001104] [All Wi-Fi][FW] Show init process by HW mail-box register - * Show FW initial ID when timeout to wait for ready bit - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * when powering off, always clear pending interrupts, then wait for RDY to be de-asserted - * - * 10 14 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * shorten the packet length for firmware download if no more than 2048 bytes. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 26 2011 cm.chang - * [WCXRP00000952] [MT5931 Wi-Fi][FW] Handshake with BWCS before DPD/TX power calibration - * Fix compiling error for WinXP MT5931 driver - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS Sync ready for WinXP. - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 19 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * escape from normal path if any error is occured. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 24 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * if there is no valid address in chip, generate a new one from driver domain instead of firmware domain due to sufficient randomness - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 20 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * disable whole-chip resetting mechanism due to the need of further ECO to work as expected. - * - * 05 31 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * changed to use non-zero checking for valid bit in NVRAM content - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * correct assertion. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 05 11 2011 cm.chang - * [WCXRP00000717] [MT5931 Wi-Fi][Driver] Handle wrong NVRAM content about AP bandwidth setting - * . - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * change delay from 100ms to 120ms upon DE's suggestion. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 15 2011 cp.wu - * [WCXRP00000654] [MT6620 Wi-Fi][Driver] Add loop termination criterion for wlanAdapterStop(). - * add loop termination criteria for wlanAdapterStop(). - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 04 06 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * invoke nicReleaseAdapterMemory() as failure handling in case wlanAdapterStart() failed unexpectedly - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 25 2011 cp.wu - * [WCXRP00000496] [MT5931][Driver] Apply host-triggered chip reset before initializing firmware download procedures - * apply host-triggered chip reset mechanism before initializing firmware download procedures. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 01 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * init variable for CTIA. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 22 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Remove controling auto rate from initial setting. The initial setting is defined by FW code. - * - * 12 15 2010 cp.wu - * NULL - * sync. with ALPS code by enabling interrupt just before leaving wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * Change Param name for invitation connection. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * for MT5931, adapter initialization is done *after* firmware is downloaded. - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * correct MT5931 firmware download procedure: - * MT5931 will download firmware first then acquire LP-OWN - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) update MT5931 firmware encryption tool. (using 64-bytes unit) - * 2) update MT5931 firmware download procedure - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 15 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * bugfix: always reset pointer to IEbuf to zero when keeping scanning result for the connected AP - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 13 2010 cp.wu - * NULL - * acquire & release power control in oid handing wrapper. - * - * 09 09 2010 cp.wu - * NULL - * move IE to buffer head when the IE pointer is not pointed at head. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 13 2010 cp.wu - * NULL - * correction issue: desired phy type not initialized as ABGN mode. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 10 2010 cm.chang - * NULL - * Support EEPROM read/write in RF test mode - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Reduce unnecessary type casting - * - * 07 13 2010 cp.wu - * - * use multiple queues to keep 1x/MMPDU/CMD's strict order even when there is incoming 1x frames. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * initialize mbox & ais_fsm in wlanAdapterStart() - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable interrupt then send power control command packet. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when stopping adapter, wait til RDY bit has been cleaerd. - * 2) set TASK_OFFLOAD as driver-core OIDs - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * roll-back to rev.60. - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always set fw-own before driver is unloaded. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * 2) command sequence number is now increased atomically - * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * 2) add 2 kal API for later integration - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * 2) ready bit will be polled for limited iteration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * kalOidComplete is not necessary in linux - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use pass-in prRegInfo instead of accessing prGlueInfo directly - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding none-glue code portability - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding non-glue code portability - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve non-glue code portability - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * only send CMD_NIC_POWER_CTRL in wlanAdapterStop() when card is not removed and is not in D3 state - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when starting adapter, read local adminsitrated address from registry and send to firmware via CMD_BASIC_CONFIG. - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for QM_TEST_MODE - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct function name .. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanAdapterStart - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * 2) firmware image length is now retrieved via NdisFileOpen - * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * 4) nicRxWaitResponse() revised - * 5) another set of TQ counter default value is added for fw-download state - * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * 2. follow MSDN defined behavior when associates to another AP - * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * wlanoidSetFrequency is now implemented by RF test command. - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * QueryRssi is no longer w/o hardware access, it is now implemented by command/event handling loop - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. - * - * 01 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * allow MCR read/write OIDs in RF test mode - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * 2. block TX/ordinary OID when RF test mode is engaged - * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-12-10 16:54:36 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-12-09 20:04:59 GMT mtk02752 -** only report as connected when CFG_HIF_EMULATION_TEST is set to 1 -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-12-08 17:39:41 GMT mtk02752 -** wlanoidRftestQueryAutoTest could be executed without touching hardware -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-12-03 16:10:26 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-02 22:05:33 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-01 23:02:36 GMT mtk02752 -** remove unnecessary spinlock -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-01 22:50:38 GMT mtk02752 -** use TC4 for command, maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-27 12:45:34 GMT mtk02752 -** prCmdInfo should be freed when invoking wlanReleasePendingOid() to clear pending oid -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-24 19:55:51 GMT mtk02752 -** wlanSendPacket & wlanRetransmitOfPendingFrames is only used in old data path -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-23 17:59:55 GMT mtk02752 -** clear prPendingOID inside wlanSendCommand() when the OID didn't need to be replied. -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-23 14:45:29 GMT mtk02752 -** add another version of wlanSendCommand() for command-sending only without blocking for response -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-17 22:40:44 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 10:14:56 GMT mtk01084 -** modify place to invoke wlanIst -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-10-30 18:17:07 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-10-29 19:46:15 GMT mtk01084 -** invoke interrupt process routine -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-10-13 21:58:24 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-09-09 17:26:01 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-05-20 12:21:27 GMT mtk01461 -** Add SeqNum check when process Event Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-05-19 10:38:44 GMT mtk01461 -** Add wlanReleasePendingOid() for mpReset() if there is a pending OID and no available TX resource to send it. -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-04-29 15:41:34 GMT mtk01461 -** Add handle of EVENT of CMD Result in wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-04-22 09:11:23 GMT mtk01461 -** Fix wlanSendCommand() for Driver Domain CR -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-04-21 09:33:56 GMT mtk01461 -** Update wlanSendCommand() for Driver Domain Response and handle Event Packet, wlanQuery/SetInformation() for enqueue CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-17 20:00:08 GMT mtk01461 -** Update wlanImageSectionDownload for optimized CMD process -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-14 20:50:51 GMT mtk01426 -** Fixed compile error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-13 16:38:40 GMT mtk01084 -** add wifi start function -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-13 14:26:44 GMT mtk01084 -** modify a parameter about FW download length -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-10 21:53:42 GMT mtk01461 -** Update wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-08 16:51:04 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-01 10:32:47 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-03-23 21:44:13 GMT mtk01461 -** Refine TC assignment for WmmAssoc flag -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 16:51:57 GMT mtk01084 -** modify the input argument of caller to RECLAIM_POWER_CONTROL_TO_PM() -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:27:13 GMT mtk01461 -** Add reference code of FW Image Download -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:37 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:08 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 16:28:45 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" -#include "mgmt/ais_fsm.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* 6.1.1.2 Interpretation of priority parameter in MAC service primitives */ -/* Static convert the Priority Parameter/TID(User Priority/TS Identifier) to Traffic Class */ -const UINT_8 aucPriorityParam2TC[] = { - TC1_INDEX, - TC0_INDEX, - TC0_INDEX, - TC1_INDEX, - TC2_INDEX, - TC2_INDEX, - TC3_INDEX, - TC3_INDEX -}; - -#if QM_TEST_MODE -extern QUE_MGT_T g_rQM; -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _CODE_MAPPING_T { - UINT_32 u4RegisterValue; - INT_32 u4TxpowerOffset; -} CODE_MAPPING_T, *P_CODE_MAPPING_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -BOOLEAN fgIsBusAccessFailed = FALSE; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SIGNED_EXTEND(n, _sValue) \ - (((_sValue) & BIT((n)-1)) ? ((_sValue) | BITS(n,31)) : \ - ((_sValue) & ~BITS(n,31))) - -// TODO: Check -/* OID set handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerWOHwAccess[] = { - wlanoidSetChannel, - wlanoidSetBeaconInterval, - wlanoidSetAtimWindow, - wlanoidSetFrequency, -}; - -// TODO: Check -/* OID query handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerWOHwAccess[] = { - wlanoidQueryBssid, - wlanoidQuerySsid, - wlanoidQueryInfrastructureMode, - wlanoidQueryAuthMode, - wlanoidQueryEncryptionStatus, - wlanoidQueryPmkid, - wlanoidQueryNetworkTypeInUse, - wlanoidQueryBssidList, - wlanoidQueryAcpiDevicePowerState, - wlanoidQuerySupportedRates, - wlanoidQueryDesiredRates, - wlanoidQuery802dot11PowerSaveProfile, - wlanoidQueryBeaconInterval, - wlanoidQueryAtimWindow, - wlanoidQueryFrequency, -}; - -/* OID set handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerAllowedInRFTest[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidRftestSetAutoTest, - wlanoidSetMcrWrite, - wlanoidSetEepromWrite -}; - -/* OID query handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerAllowedInRFTest[] = { - wlanoidRftestQueryAutoTest, - wlanoidQueryMcrRead, - wlanoidQueryEepromRead -} -; - -PFN_OID_HANDLER_FUNC apfnOidWOTimeoutCheck[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidSetAcpiDevicePowerState, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is a private routine, which is used to check if HW access is needed -* for the OID query/ set handlers. -* -* \param[IN] pfnOidHandler Pointer to the OID handler. -* \param[IN] fgSetInfo It is a Set information handler. -* -* \retval TRUE This function needs HW access -* \retval FALSE This function does not need HW access -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOHwAccess; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerWOHwAccess = apfnOidSetHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidSetHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerWOHwAccess = apfnOidQueryHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidQueryHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOHwAccess[i] == pfnOidHandler) { - return FALSE; - } - } - - return TRUE; -} /* wlanIsHandlerNeedHwAccess */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set flag for later handling card -* ejected event. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -* -* \note When surprised removal happens, Glue layer should invoke this -* function to notify WPDD not to do any hw access. -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanCardEjected ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("wlanCardEjected"); - //INITLOG(("\n")); - - ASSERT(prAdapter); - - /* mark that the card is being ejected, NDIS will shut us down soon */ - nicTxRelease(prAdapter); - -} /* wlanCardEjected */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Create adapter object -* -* \param prAdapter This routine is call to allocate the driver software objects. -* If fails, return NULL. -* \retval NULL If it fails, NULL is returned. -* \retval NOT NULL If the adapter was initialized successfully. -*/ -/*----------------------------------------------------------------------------*/ -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdpater = (P_ADAPTER_T)NULL; - - DEBUGFUNC("wlanAdapterCreate"); - - do { - prAdpater = (P_ADAPTER_T) kalMemAlloc(sizeof(ADAPTER_T), VIR_MEM_TYPE); - - if (!prAdpater) { - DBGLOG(INIT, ERROR, ("Allocate ADAPTER memory ==> FAILED\n")); - break; - } - -#if QM_TEST_MODE - g_rQM.prAdapter = prAdpater; -#endif - kalMemZero(prAdpater, sizeof(ADAPTER_T)); - prAdpater->prGlueInfo = prGlueInfo; - - } while(FALSE); - - return prAdpater; -} /* wlanAdapterCreate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroy adapter object -* -* \param prAdapter This routine is call to destroy the driver software objects. -* If fails, return NULL. -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - - if (!prAdapter) { - return; - } - - kalMemFree(prAdapter, VIR_MEM_TYPE, sizeof(ADAPTER_T)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize the adapter. The sequence is -* 1. Disable interrupt -* 2. Read adapter configuration from EEPROM and registry, verify chip ID. -* 3. Create NIC Tx/Rx resource. -* 4. Initialize the chip -* 5. Initialize the protocol -* 6. Enable Interrupt -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 i, u4Value = 0; - UINT_32 u4WHISR = 0; - UINT_8 aucTxCount[8]; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwLoadAddr, u4ImgSecSize; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - PARAM_PTA_IPC_T rBwcsPta; - UINT_32 u4SetInfoLen; -#endif - - ASSERT(prAdapter); - - DEBUGFUNC("wlanAdapterStart"); - - //4 <0> Reset variables in ADAPTER_T - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - - QUEUE_INITIALIZE(&(prAdapter->rPendingCmdQueue)); - - /* Initialize rWlanInfo */ - kalMemSet(&(prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - //4 <0.1> reset fgIsBusAccessFailed - fgIsBusAccessFailed = FALSE; - - do { - if ( (u4Status = nicAllocateAdapterMemory(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicAllocateAdapterMemory Error!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - prAdapter->u4OsPacketFilter = PARAM_PACKET_FILTER_SUPPORTED; - -#if defined(MT6620) || defined(MT6628) - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - //4 <2> Initialize System Service (MGMT Memory pool and STA_REC) - nicInitSystemService(prAdapter); - - //4 <3> Initialize Tx - nicTxInitialize(prAdapter); - wlanDefTxPowerCfg(prAdapter); - - //4 <4> Initialize Rx - nicRxInitialize(prAdapter); - -#if CFG_ENABLE_FW_DOWNLOAD - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 1. disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 2. Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3. FW download here */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImageFileLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImageFileLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - prRegInfo->u4StartAddress); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", prRegInfo->u4LoadAddress)); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImageFileLength)); - - do { -#if CFG_SUPPORT_WHOLE_CHIP_RESET -#define RESET_RDY_INTERVAL (120) - - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.0.1 delay for EEIF ready */ - kalMsleep(RESET_RDY_INTERVAL); -#endif - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImageFileLength >> 6); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 5. disable interrupt */ - nicDisableInterrupt(prAdapter); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif -#endif - - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - //4 <5> check Wi-Fi FW asserts ready bit - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - UINT_32 u4MailBox0; - - nicGetMailbox(prAdapter, 0, &u4MailBox0); - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout, ID=%d\n", - (u4MailBox0 & 0x0000FFFF))); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* post initialization for MT5931 due to some CR is only accessible after driver own */ - nicRxPostInitialize(prAdapter); -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 1. reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 2. reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - wlanSetMcuOscStableTime(prAdapter, 0); -#endif - - /* 3. query for permanent address by polling */ - wlanQueryPermanentAddress(prAdapter); - -#if (CFG_SUPPORT_NIC_CAPABILITY == 1) - /* 4. query for NIC capability */ - wlanQueryNicCapability(prAdapter); -#endif - - /* 5. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6. indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* OID timeout timer initialize */ - cnmTimerInitTimer(prAdapter, - &prAdapter->rOidTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)wlanReleasePendingOid, - (UINT_32)NULL); - - /* Power state initialization */ - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - - /* Online scan option */ - if(prRegInfo->fgDisOnlineScan == 0) { - prAdapter->fgEnOnlineScan = TRUE; - } - else { - prAdapter->fgEnOnlineScan = FALSE; - } - - /* Beacon lost detection option */ - if(prRegInfo->fgDisBcnLostDetection != 0) { - prAdapter->fgDisBcnLostDetection = TRUE; - } - - /* Load compile time constant */ - prAdapter->rWlanInfo.u2BeaconPeriod = CFG_INIT_ADHOC_BEACON_INTERVAL; - prAdapter->rWlanInfo.u2AtimWindow = CFG_INIT_ADHOC_ATIM_WINDOW; - -#if 1// set PM parameters - prAdapter->fgEnArpFilter = prRegInfo->fgEnArpFilter; - prAdapter->u4PsCurrentMeasureEn = prRegInfo->u4PsCurrentMeasureEn; - - prAdapter->u4UapsdAcBmp = prRegInfo->u4UapsdAcBmp; - - prAdapter->u4MaxSpLen = prRegInfo->u4MaxSpLen; - - DBGLOG(INIT, TRACE, ("[1] fgEnArpFilter:0x%x, u4UapsdAcBmp:0x%x, u4MaxSpLen:0x%x", - prAdapter->fgEnArpFilter, - prAdapter->u4UapsdAcBmp, - prAdapter->u4MaxSpLen)); - - prAdapter->fgEnCtiaPowerMode = FALSE; - -#endif - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, prRegInfo); - - /* Enable WZC Disassociation */ - prAdapter->rWifiVar.fgSupportWZCDisassociation = TRUE; - - /* Apply Rate Setting */ - if((ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* Disable Hidden SSID Join */ - prAdapter->rWifiVar.fgEnableJoinToHiddenSSID = FALSE; - - /* Enable Short Slot Time */ - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable = TRUE; - - /* configure available PHY type set */ - nicSetAvailablePhyTypeSet(prAdapter); - -#if 1// set PM parameters - { -#if CFG_SUPPORT_PWR_MGT - prAdapter->u4PowerMode = prRegInfo->u4PowerMode; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile = ENUM_PSP_FAST_SWITCH; -#else - prAdapter->u4PowerMode = ENUM_PSP_CONTINUOUS_ACTIVE; -#endif - {/*CR:WCNAE00007101*/ - struct net_device *prDev = prAdapter->prGlueInfo->prDevHandler; - - if (prDev != NULL) { - glBusSetIrq(prDev, NULL, prAdapter->prGlueInfo ); - } - else { - printk(KERN_INFO "Skip glBusSetIrq because of the prDev\n"); - } - } - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, //FIXIT - prAdapter->u4PowerMode, - FALSE); - } - -#endif - -#if CFG_SUPPORT_NVRAM - /* load manufacture data */ - wlanLoadManufactureData(prAdapter, prRegInfo); -#endif - -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - //Enable DPD calibration. - rBwcsPta.u.aucBTPParams[0] = 0x00; - rBwcsPta.u.aucBTPParams[1] = 0x01; - rBwcsPta.u.aucBTPParams[2] = 0x00; - rBwcsPta.u.aucBTPParams[3] = 0x80; - - wlanoidSetBT(prAdapter, - (PVOID)&rBwcsPta, - sizeof(PARAM_PTA_IPC_T), - &u4SetInfoLen); -#endif - -#if 0 - /* Update Auto rate parameters in FW */ - nicRlmArUpdateParms(prAdapter, - prRegInfo->u4ArSysParam0, - prRegInfo->u4ArSysParam1, - prRegInfo->u4ArSysParam2, - prRegInfo->u4ArSysParam3); -#endif - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* clock gating workaround */ - prAdapter->fgIsClockGatingEnabled = FALSE; -#endif - - } while(FALSE); - - if(u4Status == WLAN_STATUS_SUCCESS) { - // restore to hardware default - HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter); - HAL_SET_MAILBOX_READ_CLEAR(prAdapter, FALSE); - - /* Enable interrupt */ - nicEnableInterrupt(prAdapter); - - } - else { - // release allocated memory - nicReleaseAdapterMemory(prAdapter); - } - - return u4Status; -} /* wlanAdapterStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Uninitialize the adapter -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Value = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - /* MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - if(prAdapter->rAcpiState == ACPI_STATE_D0 && -#if (CFG_CHIP_RESET_SUPPORT == 1) - kalIsResetting() == FALSE && -#endif - kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - - /* 0. Disable interrupt, this can be done without Driver own */ - nicDisableInterrupt(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* 1. Set CMD to FW to tell WIFI to stop (enter power off state) */ - if(prAdapter->fgIsFwOwn == FALSE && - wlanSendNicPowerCtrlCmd(prAdapter, 1) == WLAN_STATUS_SUCCESS) { - /* 2. Clear pending interrupt */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 3. Wait til RDY bit has been cleaerd */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if ((u4Value & WCIR_WLAN_READY) == 0) - break; - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || i >= CFG_RESPONSE_POLLING_TIMEOUT) { - break; - } - else { - i++; - kalMsleep(10); - } - } - } - - /* 4. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - -#if CFG_FORCE_RESET_UNDER_BUS_ERROR - if(HAL_TEST_FLAG(prAdapter, ADAPTER_FLAG_HW_ERR) == TRUE) { - /* force acquire firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - /* delay for 10ms */ - kalMdelay(10); - - /* force firmware reset via software interrupt */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WSICR, WSICR_H2D_SW_INT_SET); - - /* force release firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - } -#endif - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - - nicRxUninitialize(prAdapter); - - nicTxRelease(prAdapter); - - /* System Service Uninitialization */ - nicUninitSystemService(prAdapter); - - nicReleaseAdapterMemory(prAdapter); - -#if defined(_HIF_SPI) - /* Note: restore the SPI Mode Select from 32 bit to default */ - nicRestoreSpiDefMode(prAdapter); -#endif - - return u4Status; -} /* wlanAdapterStop */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by ISR (interrupt). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval TRUE: NIC's interrupt -* \retval FALSE: Not NIC's interrupt -*/ -/*----------------------------------------------------------------------------*/ -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ) -{ - ASSERT(prAdapter); - - if (fgGlobalIntrCtrl) { - nicDisableInterrupt(prAdapter); - - //wlanIST(prAdapter); - } - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by IST (task_let). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - nicProcessIST(prAdapter); - - nicEnableInterrupt(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check command queue to find out if any could be dequeued -* and/or send to HIF to MT6620 -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdQue Pointer of Command Queue (in Glue Layer) -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ) -{ - WLAN_STATUS rStatus; - QUE_T rTempCmdQue, rMergeCmdQue, rStandInCmdQue; - P_QUE_T prTempCmdQue, prMergeCmdQue, prStandInCmdQue; - P_QUE_ENTRY_T prQueueEntry; - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - ENUM_FRAME_ACTION_T eFrameAction = FRAME_ACTION_DROP_PKT; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prCmdQue); - - prTempCmdQue = &rTempCmdQue; - prMergeCmdQue = &rMergeCmdQue; - prStandInCmdQue = &rStandInCmdQue; - - QUEUE_INITIALIZE(prTempCmdQue); - QUEUE_INITIALIZE(prMergeCmdQue); - QUEUE_INITIALIZE(prStandInCmdQue); - - //4 <1> Move whole list of CMD_INFO to temp queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - //4 <2> Dequeue from head and check it is able to be sent - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while(prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - /* command packet will be always sent */ - eFrameAction = FRAME_ACTION_TX_PKT; - break; - - case COMMAND_TYPE_SECURITY_FRAME: - /* inquire with QM */ - eFrameAction = qmGetFrameAction(prAdapter, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - NULL, - FRAME_TYPE_802_1X); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - /* inquire with QM */ - prMsduInfo = (P_MSDU_INFO_T)(prCmdInfo->prPacket); - - eFrameAction = qmGetFrameAction(prAdapter, - prMsduInfo->ucNetworkType, - prMsduInfo->ucStaRecIndex, - prMsduInfo, - FRAME_TYPE_MMPDU); - break; - - default: - ASSERT(0); - break; - } - - //4 <3> handling upon dequeue result - if(eFrameAction == FRAME_ACTION_DROP_PKT) { - wlanReleaseCommand(prAdapter, prCmdInfo); - } - else if(eFrameAction == FRAME_ACTION_QUEUE_PKT) { - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - } - else if(eFrameAction == FRAME_ACTION_TX_PKT) { - //4 <4> Send the command - rStatus = wlanSendCommand(prAdapter, prCmdInfo); - - if(rStatus == WLAN_STATUS_RESOURCES) { - // no more TC4 resource for further transmission - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - break; - } - else if(rStatus == WLAN_STATUS_PENDING) { - // command packet which needs further handling upon response - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - QUEUE_INSERT_TAIL(&(prAdapter->rPendingCmdQueue), prQueueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - } - else { - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (rStatus == WLAN_STATUS_SUCCESS) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prCmdInfo->pucInfoBuffer); - } - } - else { - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, prCmdInfo->u4SetInfoLen, rStatus); - } - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - } - else { - ASSERT(0); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - //4 <3> Merge back to original queue - //4 <3.1> Merge prMergeCmdQue & prTempCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prTempCmdQue); - - //4 <3.2> Move prCmdQue to prStandInQue, due to prCmdQue might differ due to incoming 802.1X frames - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prStandInCmdQue, prCmdQue); - - //4 <3.3> concatenate prStandInQue to prMergeCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prStandInCmdQue); - - //4 <3.4> then move prMergeCmdQue to prCmdQue - QUEUE_MOVE_ALL(prCmdQue, prMergeCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanProcessCommandQueue() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will take CMD_INFO_T which carry some informations of -* incoming OID and notify the NIC_TX to send CMD. -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdInfo Pointer of P_CMD_INFO_T -* -* \retval WLAN_STATUS_SUCCESS : CMD was written to HIF and be freed(CMD Done) immediately. -* \retval WLAN_STATUS_RESOURCE : No resource for current command, need to wait for previous -* frame finishing their transmission. -* \retval WLAN_STATUS_FAILURE : Get failure while access HIF or been rejected. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_8 ucTC; /* "Traffic Class" SW(Driver) resource classification */ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - prTxCtrl = &prAdapter->rTxCtrl; - - //DbgPrint("wlanSendCommand()\n"); - // - // -#if DBG && 0 - LOG_FUNC("wlanSendCommand()\n"); - LOG_FUNC("CmdType %u NetworkType %u StaRecIndex %u Oid %u CID 0x%x SetQuery %u NeedResp %u CmdSeqNum %u\n", - prCmdInfo->eCmdType, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - prCmdInfo->fgIsOid, - prCmdInfo->ucCID, - prCmdInfo->fgSetQuery, - prCmdInfo->fgNeedResp, - prCmdInfo->ucCmdSeqNum); -#endif - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - do { - // <0> card removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - rStatus = WLAN_STATUS_FAILURE; - break; - } - - // <1> Normal case of sending CMD Packet - if (!prCmdInfo->fgDriverDomainMCR) { - // <1.1> Assign Traffic Class(TC) = TC4. - ucTC = TC4_INDEX; - - // <1.2> Check if pending packet or resource was exhausted - if ((rStatus = nicTxAcquireResource(prAdapter, ucTC)) == WLAN_STATUS_RESOURCES) { - DbgPrint("NO Resource:%d\n", ucTC); - break; - } - - // <1.3> Forward CMD_INFO_T to NIC Layer - rStatus = nicTxCmd(prAdapter, prCmdInfo, ucTC); - - // <1.4> Set Pending in response to Query Command/Need Response - if (rStatus == WLAN_STATUS_SUCCESS) { - if ((!prCmdInfo->fgSetQuery) || (prCmdInfo->fgNeedResp)) { - rStatus = WLAN_STATUS_PENDING; - } - } - } - // <2> Special case for access Driver Domain MCR - else { - P_CMD_ACCESS_REG prCmdAccessReg; - prCmdAccessReg = (P_CMD_ACCESS_REG)(prCmdInfo->pucInfoBuffer + CMD_HDR_SIZE); - - if (prCmdInfo->fgSetQuery) { - HAL_MCR_WR(prAdapter, - (prCmdAccessReg->u4Address & BITS(2,31)), //address is in DWORD unit - prCmdAccessReg->u4Data); - } - else { - P_CMD_ACCESS_REG prEventAccessReg; - UINT_32 u4Address; - - u4Address = prCmdAccessReg->u4Address; - prEventAccessReg = (P_CMD_ACCESS_REG)prCmdInfo->pucInfoBuffer; - prEventAccessReg->u4Address = u4Address; - - HAL_MCR_RD(prAdapter, - prEventAccessReg->u4Address & BITS(2,31), //address is in DWORD unit - &prEventAccessReg->u4Data); - } - } - - } - while (FALSE); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return rStatus; -} /* end of wlanSendCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function will release thd CMD_INFO upon its attribution - * - * \param prAdapter Pointer of Adapter Data Structure - * \param prCmdInfo Pointer of CMD_INFO_T - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_FAILURE); - } - break; - - case COMMAND_TYPE_SECURITY_FRAME: - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - /* invoke callbacks */ - if(prMsduInfo->pfTxDoneHandler != NULL) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - cnmMgtPktFree(prAdapter, prMsduInfo); - break; - - default: - ASSERT(0); - break; - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - -} /* end of wlanReleaseCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending OID and -* compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReleasePendingOid"); - - ASSERT(prAdapter); - - DBGLOG(INIT, ERROR, ("OID Timeout! Releasing pending OIDs ..\n")); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->fgIsOid) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - // 2: Clear pending OID in glue layer command queue - kalOidCmdClearance(prAdapter->prGlueInfo); - - // 3: Clear pending OID queued in pvOidEntry with REQ_FLAG_OID set - kalOidClearance(prAdapter->prGlueInfo); - - } while(FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending CMD/OID for specific -* NETWORK TYPE and compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingCMDbyNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - DBGLOG(P2P, TRACE, ("Pending CMD for Network Type:%d \n", prCmdInfo->eNetworkType)); - - if (prCmdInfo->eNetworkType == eNetworkType) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - - } while(FALSE); - - return; -} /* wlanReleasePendingCMDbyNetwork */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the packet buffer and reallocate one to the RFB -* -* \param prAdapter Pointer of Adapter Data Structure -* \param pvPacket Pointer of returned packet -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReturnPacket"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if (pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, pvPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT, 1); -#if CFG_NATIVE_802_11 - if (GLUE_TEST_FLAG(prAdapter->prGlueInfo, GLUE_FLAG_HALT)) { - } -#endif - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rIndicatedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (!prSwRfb){ - ASSERT(0); - return; - } - - if (nicRxSetupRFB(prAdapter, prSwRfb)){ - ASSERT(0); - return; - } - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that returns information about -* the capabilities and status of the driver and/or its network adapter. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] pfnOidQryHandler Function pointer for the OID query handler. -* \param[IN] pvInfoBuf Points to a buffer for return the query information. -* \param[IN] u4QueryBufferLen Specifies the number of bytes at pvInfoBuf. -* \param[OUT] pu4QueryInfoLen Points to the number of bytes it written or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4QryInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet */ - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidQryHandler, FALSE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - } -#endif - - return status; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that allows bound protocol drivers, -* or NDIS, to request changes in the state information that the miniport -* maintains for particular object identifiers, such as changes in multicast -* addresses. -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* \param[IN] pfnOidSetHandler Points to the OID set handlers. -* \param[IN] pvInfoBuf Points to a buffer containing the OID-specific data for the set. -* \param[IN] u4InfoBufLen Specifies the number of bytes at prSetBuffer. -* \param[OUT] pu4SetInfoLen Points to the number of bytes it read or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet - * for power state transition OIDs, handler will acquire power control by itself - */ - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidSetHandler, TRUE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - } -#endif - - return status; -} - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a used to query driver's config wapi mode or not -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* -* \retval TRUE for use wapi mode -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryWapiMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rWifiVar.rConnSettings.fgWapiMode; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to Promiscuous Mode. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnablePromiscuousMode Enable/ disable RX Promiscuous Mode. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ) -{ - ASSERT(prAdapter); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to allow to receive -* broadcast address packets. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ) -{ - ASSERT(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to send out CMD_NIC_POWER_CTRL command packet -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] ucPowerMode refer to CMD/EVENT document -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ) -{ - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - /* 1. Prepare CMD */ - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL))); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - /* 2.1 increase command sequence number */ - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - /* 2.2 Setup common CMD Info Packet */ - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_NIC_POWER_CTRL; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_NIC_POWER_CTRL); - - /* 2.3 Setup WIFI_CMD_T */ - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - kalMemZero(prWifiCmd->aucBuffer, sizeof(CMD_NIC_POWER_CTRL)); - ((P_CMD_NIC_POWER_CTRL)(prWifiCmd->aucBuffer))->ucPowerMode = ucPowerMode; - - /* 3. Issue CMD for entering specific power mode */ - ucTC = TC4_INDEX; - - while(1) { - // 3.0 Removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - status = WLAN_STATUS_FAILURE; - break; - } - - // 3.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - status = WLAN_STATUS_FAILURE; - break; - } - else { - continue; - } - } - - // 3.2 Send CMD Info Packet - if (nicTxCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to transmit CMD_NIC_POWER_CTRL command\n")); - status = WLAN_STATUS_FAILURE; - } - - break; - }; - - // 4. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - // 5. Add flag - if(ucPowerMode == 1) { - prAdapter->fgIsEnterD3ReqIssued = TRUE; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to check if it is RF test mode and -* the OID is allowed to be called or not -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerAllowedInRFTest; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerAllowedInRFTest = apfnOidSetHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidSetHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerAllowedInRFTest = apfnOidQueryHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidQueryHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerAllowedInRFTest[i] == pfnOidHandler) { - return TRUE; - } - } - - return FALSE; -} - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image in an aggregated way -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4PktCnt, u4Offset, u4Length; - UINT_32 u4TotalLength; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - - pucOutputBuf = prAdapter->rTxCtrl.pucTxCoalescingBufPtr; - - DEBUGFUNC("wlanImageSectionDownloadAggregated"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and Pre-fill Headers - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->ucEtherTypeOffset = 0; - prInitHifTxHeader->ucCSflags = 0; - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - - // 4. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - - // 5.0 reset loop control variable - u4TotalLength = 0; - u4Offset = u4PktCnt = 0; - - // 5.1 main loop for maximize transmission count per access - while(u4Offset < u4ImgSecSize) { - if(nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_SUCCESS) { - // 5.1.1 calculate u4Length - if(u4Offset + CMD_PKT_SIZE_FOR_IMAGE < u4ImgSecSize) { - u4Length = CMD_PKT_SIZE_FOR_IMAGE; - } - else { - u4Length = u4ImgSecSize - u4Offset; - } - - // 5.1.1 increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5.1.2 update HIF TX hardware header - prInitHifTxHeader->u2TxByteCount = ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4Length); - - // 5.1.3 fill command header - prInitCmdDownloadBuf->u4Address = u4DestAddr + u4Offset; - prInitCmdDownloadBuf->u4Length = u4Length; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf + u4Offset, u4Length); - - // 5.1.4.1 copy header to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, - (PVOID)prCmdInfo->pucInfoBuffer, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF)); - - // 5.1.4.2 copy payload to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength + sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF), - pucImgSecBuf + u4Offset, - u4Length); - - // 5.1.4.3 update length and other variables - u4TotalLength += ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4Length); - u4Offset += u4Length; - u4PktCnt++; - - if(u4Offset < u4ImgSecSize) { - continue; - } - } - else if(u4PktCnt == 0) { - /* no resource, so get some back */ - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - } - - if(u4PktCnt != 0) { - // start transmission - HAL_WRITE_TX_PORT(prAdapter, - 0, - u4TotalLength, - (PUINT_8)pucOutputBuf, - prAdapter->u4CoalescingBufCachedSize); - - // reset varaibles - u4PktCnt = 0; - u4TotalLength = 0; - } - } - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #else - #error "Only MT6620/MT6628 supports firmware download in an aggregated way" - - return WLAN_STATUS_FAILURE; - - #endif -} - - #endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4ImgSecSize); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4ImgSecSize; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4Address = u4DestAddr; - prInitCmdDownloadBuf->u4Length = u4ImgSecSize; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf, u4ImgSecSize); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_DOWNLOAD_ACK - | DOWNLOAD_BUF_ACK_OPTION // ACK needed - #endif - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - kalMemCopy(prInitCmdDownloadBuf->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 6. Send FW_Download command - while(1) { - // 6.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 6.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - #if CFG_ENABLE_FW_DOWNLOAD_ACK - // 7. Wait for INIT_EVENT_ID_CMD_RESULT - u4Status = wlanImageSectionDownloadStatus(prAdapter, ucCmdSeqNum); - #endif - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #elif defined(MT5931) - - UINT_32 i, u4Value; - P_HIF_HW_TX_HEADER_T prHifTxHeader; - - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - DBGLOG(INIT, TRACE, ("Destination: 0x%08X / Length: 0x%08X\n", u4DestAddr, u4ImgSecSize)); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Use TX coalescing buffer - prHifTxHeader = (P_HIF_HW_TX_HEADER_T) prAdapter->pucCoalescingBufCached; - - // 2. Setup HIF_TX_HEADER - prHifTxHeader->u2TxByteCount = (UINT_16)(ALIGN_4(sizeof(HIF_HW_TX_HEADER_T) + u4ImgSecSize)); - prHifTxHeader->ucEtherTypeOffset = 0; - prHifTxHeader->ucCSflags = 0; - - // 3. Copy payload - kalMemCopy(prHifTxHeader->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 3.1 add 4-bytes zero tail - kalMemZero(&(prHifTxHeader->aucBuffer[ALIGN_4(u4ImgSecSize)]), sizeof(HIF_HW_TX_HEADER_T)); - - // 4. Poll til FWDL_RDY = 1 - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_FWDLSR, &u4Value); - - if (u4Value & FWDLSR_FWDL_RDY) { - DBGLOG(INIT, TRACE, ("FWDL_RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for FWDL_RDY: Timeout (0x%08X)\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - // 5. Send firmware - HAL_PORT_WR(prAdapter, - MCR_FWDLDR, - prHifTxHeader->u2TxByteCount, - (PUINT_8)prHifTxHeader, - prAdapter->u4CoalescingBufCachedSize); - - return u4Status; - - #endif -} - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm previously firmware download is done without error -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR)]; - UINT_32 u4RxPktLength; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_PENDING_ERROR prEventPendingError; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanImageQueryStatus"); - - // 1. Allocate CMD Info Packet and it Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, sizeof(INIT_HIF_TX_HEADER_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T)); - prCmdInfo->u2InfoBufLen = sizeof(INIT_HIF_TX_HEADER_T); - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_QUERY_PENDING_ERROR; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Send command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - // 6. Wait for INIT_EVENT_ID_PENDING_ERROR - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("Bus error(%d)/Card removed(%d)\n", fgIsBusAccessFailed, kalIsCardRemoved(prAdapter->prGlueInfo))); - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("No RX response\n")); - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_PENDING_ERROR) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("EVENT-ID Mismatch: %d\n", prInitHifRxHeader->rInitWifiEvent.ucEID)); - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("SEQ-NUM Mismatch: %d (expected: %d)\n", prInitHifRxHeader->rInitWifiEvent.ucSeqNum, ucCmdSeqNum)); - } - else { - prEventPendingError = (P_INIT_EVENT_PENDING_ERROR) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventPendingError->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("ERROR CODE: %d\n", prEventCmdResult->ucStatus)); - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - // 7. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm the status of -* previously downloaded firmware scatter -* -* @param prAdapter Pointer to the Adapter structure. -* ucCmdSeqNum Sequence number of previous firmware scatter -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ) -{ - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT)]; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_CMD_RESULT prEventCmdResult; - UINT_32 u4RxPktLength; - WLAN_STATUS u4Status; - - ASSERT(prAdapter); - - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("Bus error(%d)/Card removed(%d)\n", fgIsBusAccessFailed, kalIsCardRemoved(prAdapter->prGlueInfo))); - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("No RX response\n")); - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_CMD_RESULT) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("EVENT-ID Mismatch: %d\n", prInitHifRxHeader->rInitWifiEvent.ucEID)); - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("SEQ-NUM Mismatch: %d\n", prInitHifRxHeader->rInitWifiEvent.ucSeqNum)); - } - else { - prEventCmdResult = (P_INIT_EVENT_CMD_RESULT) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventCmdResult->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("ERROR CODE: %d\n", prEventCmdResult->ucStatus)); - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - return u4Status; -} - - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to start FW normal operation. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_WIFI_START prInitCmdWifiStart; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanConfigWifiFunc"); - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START); - - // 2. Always use TC0 - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_WIFI_START; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - prInitCmdWifiStart = (P_INIT_CMD_WIFI_START)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdWifiStart->u4Override = (fgEnable == TRUE ? 1 : 0); - prInitCmdWifiStart->u4Address = u4StartAddress; - - // 5. Seend WIFI start command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit WIFI start command\n")); - } - - break; - }; - - // 6. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate CRC32 checksum -* -* @param buf Pointer to the data. -* @param len data length -* -* @return crc32 value -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len) -{ - UINT_32 i, crc32 = 0xFFFFFFFF; - const UINT_32 crc32_ccitt_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d }; - - for (i = 0; i < len; i++) - crc32 = crc32_ccitt_table[(crc32 ^ buf[i]) & 0xff] ^ (crc32 >> 8); - - return ( ~crc32 ); -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to process queued RX packets -* -* @param prAdapter Pointer to the Adapter structure. -* prSwRfbListHead Pointer to head of RX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - P_SW_RFB_T prSwRfb, prNextSwRfb; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(prSwRfbListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prSwRfb = prSwRfbListHead; - - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - switch(prSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prSwRfb); - break; - - default: - break; - } - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to purge queued TX packets -* by indicating failure to OS and returned to free list -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfoListHead Pointer to head of TX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - nicTxReturnMsduInfo(prAdapter, prMsduInfoListHead); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the OID handler needs timeout -* -* @param prAdapter Pointer to the Adapter structure. -* pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOTimeoutCheck; - UINT_32 i; - UINT_32 u4NumOfElem; - - apfnOidHandlerWOTimeoutCheck = apfnOidWOTimeoutCheck; - u4NumOfElem = sizeof(apfnOidWOTimeoutCheck) / sizeof(PFN_OID_HANDLER_FUNC); - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOTimeoutCheck[i] == pfnOidHandler) { - return FALSE; - } - } - - // set timer if need timeout check - //cnmTimerStartTimer(prAdapter, - // &(prAdapter->rOidTimeoutTimer), - // 1000); - cnmTimerStartTimer(prAdapter, - &(prAdapter->rOidTimeoutTimer), - 2000); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to clear any pending OID timeout check -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerStopTimer(prAdapter, &(prAdapter->rOidTimeoutTimer)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to set up the MCUSYS's OSC stable time -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ) -{ - UINT_8 ucCmdSeqNum = 0; - P_CMD_INFO_T prCmdInfo = NULL; - P_WIFI_CMD_T prWifiCmd = NULL; - P_CMD_MCU_LP_PARAM_T prMcuSetOscCmd = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_MCU_LP_PARAM_T cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_SET_OSC; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_MCU_LP_PARAM_T); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_MCU_LP_PARAM_T - prMcuSetOscCmd = (P_CMD_MCU_LP_PARAM_T)(prWifiCmd->aucBuffer); - prMcuSetOscCmd->u2OscStableTime = u2OscStableTime; - - status = wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return status; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update network address in firmware domain -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_FAILURE The request could not be processed -* WLAN_STATUS_PENDING The request has been queued for later processing -* WLAN_STATUS_SUCCESS The request has been processed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ) -{ - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - PARAM_MAC_ADDRESS rMacAddr; - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BASIC_CONFIG prCmdBasicConfig; - UINT_32 u4SysTime; - - DEBUGFUNC("wlanUpdateNetworkAddress"); - - ASSERT(prAdapter); - - if(kalRetrieveNetworkAddress(prAdapter->prGlueInfo, &rMacAddr) == FALSE - || IS_BMCAST_MAC_ADDR(rMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, rMacAddr)) { - // eFUSE has a valid address, don't do anything - if(prAdapter->fgIsEmbbededMacAddrValid == TRUE) { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, STATE, ("WIFI_CONFIG:Using eFuse MAC address\n")); -#endif - return WLAN_STATUS_SUCCESS; - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, STATE, ("WIFI_CONFIG:Using dynamically generated MAC address\n")); -#endif - // dynamic generate - u4SysTime = (UINT_32) kalGetTimeTick(); - - rMacAddr[0] = 0x00; - rMacAddr[1] = 0x08; - rMacAddr[2] = 0x22; - - kalMemCopy(&rMacAddr[3], &u4SysTime, 3); - } - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, STATE, ("WIFI_CONFIG:Using NVRAM MAC address\n")); -#endif - } - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_BASIC_CONFIG - prCmdBasicConfig = (P_CMD_BASIC_CONFIG)(prWifiCmd->aucBuffer); - kalMemCopy(&(prCmdBasicConfig->rMyMacAddr), &rMacAddr, PARAM_MAC_ADDR_LEN); - prCmdBasicConfig->ucNative80211 = 0; - prCmdBasicConfig->rCsumOffload.u2RxChecksum = 0; - prCmdBasicConfig->rCsumOffload.u2TxChecksum = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(0); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(0); -#endif - - if(wlanSendCommand(prAdapter, prCmdInfo) == WLAN_STATUS_RESOURCES) { - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryAddress; - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return WLAN_STATUS_PENDING; - } - else { - nicCmdEventQueryAddress(prAdapter, prCmdInfo, (PUINT_8)prCmdBasicConfig); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return WLAN_STATUS_SUCCESS; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the device is in RF test mode -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->fgTestMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to identify 802.1x and Bluetooth-over-Wi-Fi -* security frames, and queued into command queue for strict ordering -* due to 802.1x frames before add-key OIDs are not to be encrypted -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prPacket Pointer of native packet -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ) -{ - UINT_8 ucPriorityParam; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - P_CMD_INFO_T prCmdInfo; - - ASSERT(prAdapter); - ASSERT(prPacket); - - if (kalQoSFrameClassifierAndPacketInfo(prAdapter->prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == TRUE) { - if(fgIs1x == FALSE) { - return FALSE; - } - else { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - DBGLOG(RSN, INFO, ("T1X len=%d\n", u4PacketLen)); - - if (prCmdInfo) { - P_STA_RECORD_T prStaRec; - // fill arrival time - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_SECURITY_FRAME; - prCmdInfo->u2InfoBufLen = (UINT_16)u4PacketLen; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = prPacket; -#if 0 - prCmdInfo->ucStaRecIndex = qmGetStaRecIdx(prAdapter, - aucEthDestAddr, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType); -#endif - prStaRec = cnmGetStaRecByAddress(prAdapter, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType, - aucEthDestAddr); - if(prStaRec) { - prCmdInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prCmdInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - } - - prCmdInfo->eNetworkType = (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType; - prCmdInfo->pfCmdDoneHandler = wlanSecurityFrameTxDone; - prCmdInfo->pfCmdTimeoutHandler = wlanSecurityFrameTxTimeout; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return TRUE; - } - else { - ASSERT(0); - return FALSE; - } - } - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has been sent to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* @param pucEventBuf meaningless, only for API compatibility -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - if (prCmdInfo->eNetworkType == NETWORK_TYPE_AIS_INDEX && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure) { - P_STA_RECORD_T prSta = cnmGetStaRecByIndex(prAdapter, prCmdInfo->ucStaRecIndex); - if (prSta) { - kalMsleep(10); - secFsmEventEapolTxDone(prAdapter, prSta, TX_RESULT_SUCCESS); - } - } - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_SUCCESS); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has failed sending to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called before AIS is starting a new scan -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgKeepCurrOne = FALSE; - UINT_32 i; - - ASSERT(prAdapter); - - // clear scanning result - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - fgKeepCurrOne = TRUE; - - if(i != 0) { - // copy structure - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[0]), - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] != &(prAdapter->rWlanInfo.aucScanIEBuf[0])) { - // move IEs to head - kalMemCopy(prAdapter->rWlanInfo.aucScanIEBuf, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // modify IE pointer - prAdapter->rWlanInfo.apucScanResultIEs[0] = &(prAdapter->rWlanInfo.aucScanIEBuf[0]); - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[0] = NULL; - } - - break; - } - } - } - - if(fgKeepCurrOne == TRUE) { - prAdapter->rWlanInfo.u4ScanResultNum = 1; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = - ALIGN_4(prAdapter->rWlanInfo.arScanResult[0].u4IELength); - } - else { - prAdapter->rWlanInfo.u4ScanResultNum = 0; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when AIS received a beacon timeout event -* -* @param prAdapter Pointer of Adapter Data Structure -* @param arBSSID MAC address of the specified BSS -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ) -{ - UINT_32 i, j, u4IELength = 0, u4IEMoveLength; - PUINT_8 pucIEPtr; - - ASSERT(prAdapter); - - // clear scanning result - i = 0; - while(1) { - if(i >= prAdapter->rWlanInfo.u4ScanResultNum) { - break; - } - - if(EQUAL_MAC_ADDR(arBSSID, prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - // backup current IE length - u4IELength = ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4IELength); - pucIEPtr = prAdapter->rWlanInfo.apucScanResultIEs[i]; - - // removed from middle - for(j = i + 1 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[j-1]), - &(prAdapter->rWlanInfo.arScanResult[j]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - prAdapter->rWlanInfo.apucScanResultIEs[j-1] = - prAdapter->rWlanInfo.apucScanResultIEs[j]; - } - - prAdapter->rWlanInfo.u4ScanResultNum--; - - // remove IE buffer if needed := move rest of IE buffer - if(u4IELength > 0) { - u4IEMoveLength = prAdapter->rWlanInfo.u4ScanIEBufferUsage - - (((UINT_32)pucIEPtr) + u4IELength - ((UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])))); - - kalMemCopy(pucIEPtr, - (PUINT_8)(((UINT_32)pucIEPtr) + u4IELength), - u4IEMoveLength); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4IELength; - - // correction of pointers to IE buffer - for(j = 0 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - if(prAdapter->rWlanInfo.apucScanResultIEs[j] > pucIEPtr) { - prAdapter->rWlanInfo.apucScanResultIEs[j] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[j]) - u4IELength); - } - } - } - } - - i++; - } - - return; -} - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction ( - IN P_ADAPTER_T prAdapter - ) -{ -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(FALSE); - return; - } - - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prMsgFuncSwitch->fgIsFuncOn = TRUE; - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return; -} - -VOID -wlanEnableATGO ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_MSG_P2P_CONNECTION_REQUEST_T prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - if (!prMsgConnReq) { - ASSERT(FALSE); - return; - } - - prMsgConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - /*=====Param Modified for test=====*/ - COPY_MAC_ADDR(prMsgConnReq->aucDeviceID, aucTargetDeviceID); - prMsgConnReq->fgIsTobeGO = TRUE; - prMsgConnReq->fgIsPersistentGroup = FALSE; - - /*=====Param Modified for test=====*/ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgConnReq, - MSG_SEND_METHOD_BUF); - - return; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve permanent address from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryPermanentAddress"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_BASIC_CONFIG) { - return WLAN_STATUS_FAILURE; - } - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(prEvent->aucBuffer); - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucPermanentAddress, &(prEventBasicConfig->rMyMacAddr)); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, &(prEventBasicConfig->rMyMacAddr)); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve NIC capability from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_NIC_CAPABILITY prEventNicCapability; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryNicCapability"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_GET_NIC_CAPABILITY; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = 0; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_NIC_CAPABILITY) { - return WLAN_STATUS_FAILURE; - } - - prEventNicCapability = (P_EVENT_NIC_CAPABILITY)(prEvent->aucBuffer); - - prAdapter->rVerInfo.u2FwProductID = prEventNicCapability->u2ProductID; - prAdapter->rVerInfo.u2FwOwnVersion = prEventNicCapability->u2FwVersion; - prAdapter->rVerInfo.u2FwPeerVersion = prEventNicCapability->u2DriverVersion; - prAdapter->fgIsHw5GBandDisabled = (BOOLEAN)prEventNicCapability->ucHw5GBandDisabled; - prAdapter->fgIsEepromUsed = (BOOLEAN)prEventNicCapability->ucEepromUsed; - prAdapter->fgIsEfuseValid = (BOOLEAN)prEventNicCapability->ucEfuseValid; - prAdapter->fgIsEmbbededMacAddrValid = (BOOLEAN)prEventNicCapability->ucMacAddrValid; - - -#if CFG_ENABLE_CAL_LOG - DBGLOG(INIT, INFO, (" RF CAL FAIL = (%d),BB CAL FAIL = (%d)\n", - prEventNicCapability->ucRfCalFail ,prEventNicCapability->ucBbCalFail )); -#endif - return WLAN_STATUS_SUCCESS; -} - -#ifdef MT6628 -static INT_32 wlanChangeCodeWord(INT_32 au4Input){ - - UINT_16 i; -#if TXPWR_USE_PDSLOPE - CODE_MAPPING_T arCodeTable[] = { - {0X100, -40}, - {0X104, -35}, - {0X128, -30}, - {0X14C, -25}, - {0X170, -20}, - {0X194, -15}, - {0X1B8, -10}, - {0X1DC, - 5}, - {0 , 0}, - {0X24 , 5}, - {0X48 , 10}, - {0X6C , 15}, - {0X90 , 20}, - {0XB4 , 25}, - {0XD8 , 30}, - {0XFC , 35}, - {0XFF , 40}, - - }; -#else - CODE_MAPPING_T arCodeTable[] = { - {0X100, 0x80}, - {0X104, 0x80}, - {0X128, 0x80}, - {0X14C, 0x80}, - {0X170, 0x80}, - {0X194, 0x94}, - {0X1B8, 0XB8}, - {0X1DC, 0xDC}, - {0 , 0}, - {0X24 , 0x24}, - {0X48 , 0x48}, - {0X6C , 0x6c}, - {0X90 , 0x7F}, - {0XB4 , 0x7F}, - {0XD8 , 0x7F}, - {0XFC , 0x7F}, - {0XFF , 0x7F}, - - }; -#endif - - for (i = 0; i < sizeof(arCodeTable) / sizeof(CODE_MAPPING_T); i++) { - - if (arCodeTable[i].u4RegisterValue == au4Input){ - return arCodeTable[i] .u4TxpowerOffset; - } - } - - - return 0; -} -#endif -#if TXPWR_USE_PDSLOPE - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_CMD_ACCESS_REG prCmdMcrQuery; - ASSERT(prAdapter); - - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_ACCESS_REG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_ACCESS_REG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - kalMemCopy(prWifiCmd->aucBuffer, prMcrRdInfo, sizeof(CMD_ACCESS_REG)); - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - - if(prEvent->ucEID != EVENT_ID_ACCESS_REG) { - return WLAN_STATUS_FAILURE; - } - - prCmdMcrQuery = (P_CMD_ACCESS_REG)(prEvent->aucBuffer); - prMcrRdInfo->u4McrOffset = prCmdMcrQuery->u4Address; - prMcrRdInfo->u4McrData = prCmdMcrQuery->u4Data; - - return WLAN_STATUS_SUCCESS; -} - -static INT_32 wlanIntRound(INT_32 au4Input) -{ - - - if (au4Input >= 0){ - if((au4Input%10) == 5){ - au4Input = au4Input + 5; - return au4Input; - } - } - - if (au4Input < 0){ - if((au4Input%10) == -5){ - au4Input = au4Input - 5; - return au4Input; - } - } - - return au4Input; -} - -static INT_32 wlanCal6628EfuseForm(IN P_ADAPTER_T prAdapter,INT_32 au4Input){ - - PARAM_MCR_RW_STRUC_T rMcrRdInfo; - INT_32 au4PdSlope,au4TxPwrOffset,au4TxPwrOffset_Round; - INT_8 auTxPwrOffset_Round; - - rMcrRdInfo.u4McrOffset = 0x60205c68; - rMcrRdInfo.u4McrData = 0; - au4TxPwrOffset = au4Input; - wlanQueryPdMcr(prAdapter,&rMcrRdInfo); - - au4PdSlope = (rMcrRdInfo.u4McrData) & BITS(0,6); - au4TxPwrOffset_Round = wlanIntRound((au4TxPwrOffset*au4PdSlope))/10; - - au4TxPwrOffset_Round = -au4TxPwrOffset_Round; - - if(au4TxPwrOffset_Round < -128) { - au4TxPwrOffset_Round = 128; - } - else if (au4TxPwrOffset_Round < 0){ - au4TxPwrOffset_Round += 256; - } - else if (au4TxPwrOffset_Round > 127){ - au4TxPwrOffset_Round = 127; - } - - auTxPwrOffset_Round = (UINT8) au4TxPwrOffset_Round ; - - return au4TxPwrOffset_Round; -} - -#endif - -#ifdef MT6628 -static VOID wlanChangeNvram6620to6628(PUINT_8 pucEFUSE){ - - - #define EFUSE_CH_OFFSET1_L_MASK_6620 BITS(0,8) - #define EFUSE_CH_OFFSET1_L_SHIFT_6620 0 - #define EFUSE_CH_OFFSET1_M_MASK_6620 BITS(9,17) - #define EFUSE_CH_OFFSET1_M_SHIFT_6620 9 - #define EFUSE_CH_OFFSET1_H_MASK_6620 BITS(18,26) - #define EFUSE_CH_OFFSET1_H_SHIFT_6620 18 - #define EFUSE_CH_OFFSET1_VLD_MASK_6620 BIT(27) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_6620 27 - - #define EFUSE_CH_OFFSET1_L_MASK_5931 BITS(0,7) - #define EFUSE_CH_OFFSET1_L_SHIFT_5931 0 - #define EFUSE_CH_OFFSET1_M_MASK_5931 BITS(8,15) - #define EFUSE_CH_OFFSET1_M_SHIFT_5931 8 - #define EFUSE_CH_OFFSET1_H_MASK_5931 BITS(16,23) - #define EFUSE_CH_OFFSET1_H_SHIFT_5931 16 - #define EFUSE_CH_OFFSET1_VLD_MASK_5931 BIT(24) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_5931 24 - #define EFUSE_ALL_CH_OFFSET1_MASK_5931 BITS(25,27) - #define EFUSE_ALL_CH_OFFSET1_SHIFT_5931 25 - - - - - INT_32 au4ChOffset; - INT_16 au2ChOffsetL,au2ChOffsetM,au2ChOffsetH; - - - au4ChOffset = *(UINT_32*)(pucEFUSE + 72); - - if((au4ChOffset & EFUSE_CH_OFFSET1_VLD_MASK_6620) && ((*(UINT_32*)(pucEFUSE + 28)) == 0)) { - - - au2ChOffsetL = ((au4ChOffset & EFUSE_CH_OFFSET1_L_MASK_6620) >> - EFUSE_CH_OFFSET1_L_SHIFT_6620); - - au2ChOffsetM = ((au4ChOffset & EFUSE_CH_OFFSET1_M_MASK_6620) >> - EFUSE_CH_OFFSET1_M_SHIFT_6620); - - au2ChOffsetH = ((au4ChOffset & EFUSE_CH_OFFSET1_H_MASK_6620) >> - EFUSE_CH_OFFSET1_H_SHIFT_6620); - - au2ChOffsetL = wlanChangeCodeWord(au2ChOffsetL); - au2ChOffsetM = wlanChangeCodeWord(au2ChOffsetM); - au2ChOffsetH = wlanChangeCodeWord(au2ChOffsetH); - - au4ChOffset = 0; - au4ChOffset |= *(UINT_32*)(pucEFUSE + 72) - >> (EFUSE_CH_OFFSET1_VLD_SHIFT_6620 - EFUSE_CH_OFFSET1_VLD_SHIFT_5931 )& EFUSE_CH_OFFSET1_VLD_MASK_5931 ; - - - - au4ChOffset |= ((((UINT_32)au2ChOffsetL) << EFUSE_CH_OFFSET1_L_SHIFT_5931) & EFUSE_CH_OFFSET1_L_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetM) << EFUSE_CH_OFFSET1_M_SHIFT_5931) & EFUSE_CH_OFFSET1_M_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetH) << EFUSE_CH_OFFSET1_H_SHIFT_5931) & EFUSE_CH_OFFSET1_H_MASK_5931); - - *((INT_32 *)((pucEFUSE + 28))) = au4ChOffset ; - - - - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to load manufacture data from NVRAM -* if available and valid -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prRegInfo Pointer of REG_INFO_T -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_RDD_CH_T rRddParam; -#endif - - ASSERT(prAdapter); - - /* 1. Version Check */ - kalGetConfigurationVersion(prAdapter->prGlueInfo, - &(prAdapter->rVerInfo.u2Part1CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part1CfgPeerVersion), - &(prAdapter->rVerInfo.u2Part2CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part2CfgPeerVersion)); - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - if(CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION) { - return WLAN_STATUS_FAILURE; - } -#endif - - // MT6620 E1/E2 would be ignored directly - if(prAdapter->rVerInfo.u2Part1CfgOwnVersion == 0x0001) { - prRegInfo->ucTxPwrValid = 1; - DBGLOG(INIT, STATE, ("WIFI_CONFIG:NVRAM TX power is used \n")); - } - else { - /* 2. Load TX power gain parameters if valid */ - if(prRegInfo->ucTxPwrValid != 0) { - // send to F/W - nicUpdateTxPower(prAdapter, (P_CMD_TX_PWR_T)(&(prRegInfo->rTxPwr))); - DBGLOG(INIT, STATE, ("WIFI_CONFIG:NVRAM TX power is used \n")); - } - } - - /* 3. Check if needs to support 5GHz */ - if(prRegInfo->ucEnable5GBand) { - // check if it is disabled by hardware - if(prAdapter->fgIsHw5GBandDisabled - || prRegInfo->ucSupport5GBand == 0) { - prAdapter->fgEnable5GBand = FALSE; - DBGLOG(INIT, STATE, ("WIFI_CONFIG:5G is not enabled \n")); - } - else { - prAdapter->fgEnable5GBand = TRUE; - DBGLOG(INIT, STATE, ("WIFI_CONFIG:5G is enabled \n")); - } - } - else { - prAdapter->fgEnable5GBand = FALSE; - DBGLOG(INIT, STATE, ("WIFI_CONFIG:5G is not enabled \n")); - } - - /* 4. Send EFUSE data */ -#if defined(MT6628) - wlanChangeNvram6620to6628(prRegInfo->aucEFUSE); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PHY_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PHY_PARAM_T), - (PUINT_8)(prRegInfo->aucEFUSE), - NULL, - 0); - -#if CFG_SUPPORT_RDD_TEST_MODE - rRddParam.ucRddTestMode = (UINT_8) prRegInfo->u4RddTestMode; - rRddParam.ucRddShutCh = (UINT_8) prRegInfo->u4RddShutFreq; - rRddParam.ucRddStartCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStartFreq); - rRddParam.ucRddStopCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStopFreq); - rRddParam.ucRddDfs = (UINT_8) prRegInfo->u4RddDfs; - prAdapter->ucRddStatus = 0; - nicUpdateRddTestMode(prAdapter, (P_CMD_RDD_CH_T)(&rRddParam)); -#endif - - /* 5. Get 16-bits Country Code and Bandwidth */ - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) prRegInfo->au2CountryCode[0]) << 8) | - (((UINT_16) prRegInfo->au2CountryCode[1]) & BITS(0,7)); - -#if 0 /* Bandwidth control will be controlled by GUI. 20110930 - * So ignore the setting from registry/NVRAM - */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prRegInfo->uc2G4BwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prRegInfo->uc5GBwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; -#endif - - /* 6. Set domain and channel information to chip */ - rlmDomainSendCmd(prAdapter, FALSE); - - /* 7. set band edge tx power if available */ - if(prRegInfo->fg2G4BandEdgePwrUsed) { - CMD_EDGE_TXPWR_LIMIT_T rCmdEdgeTxPwrLimit; - - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrCCK - = prRegInfo->cBandEdgeMaxPwrCCK; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM20 - = prRegInfo->cBandEdgeMaxPwrOFDM20; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM40 - = prRegInfo->cBandEdgeMaxPwrOFDM40; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_EDGE_TXPWR_LIMIT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_EDGE_TXPWR_LIMIT_T), - (PUINT_8)&rCmdEdgeTxPwrLimit, - NULL, - 0); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check -* Media Stream Mode is set to non-default value or not, -* and clear to default value if above criteria is met -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return TRUE -* The media stream mode was non-default value and has been reset -* FALSE -* The media stream mode is default value -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode != 0) { - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - - return TRUE; - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending timer has expired -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerDoTimeOutCheck(prAdapter); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending mailbox message -* to be handled -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - for(i = 0 ; i < MBOX_ID_TOTAL_NUM ; i++) { - mboxRcvAllMsg(prAdapter , (ENUM_MBOX_ID_T)i); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to enqueue a single TX packet into CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* prNativePacket Pointer of Native Packet -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_RESOURCES -* WLAN_STATUS_INVALID_PACKET -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo == NULL) { - return WLAN_STATUS_RESOURCES; - } - else { - prMsduInfo->eSrc = TX_PACKET_OS; - - if(nicTxFillMsduInfo(prAdapter, - prMsduInfo, - prNativePacket) == FALSE) { // packet is not extractable - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_INVALID_PACKET); - - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - - return WLAN_STATUS_INVALID_PACKET; - } - else { - // enqueue to QM - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to flush pending TX packets in CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return nicTxFlush(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function sends pending MSDU_INFO_T to MT6620 -* -* @param prAdapter Pointer to the Adapter structure. -* @param pfgHwAccess Pointer for tracking LP-OWN status -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(pfgHwAccess); - - // <1> dequeue packet by txDequeuTxPackets() - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmDequeueTxPackets(prAdapter, &prTxCtrl->rTc); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - /* <2> Acquire LP-OWN if necessary */ - if(*pfgHwAccess == FALSE) { - *pfgHwAccess = TRUE; - - wlanAcquirePowerControl(prAdapter); - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - // <3> send packets - nicTxMsduInfoList(prAdapter, prMsduInfo); - - // <4> update TC by txAdjustTcQuotas() - nicTxAdjustTcq(prAdapter); - } - else { - wlanProcessQueuedMsduInfo(prAdapter, prMsduInfo); - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to acquire power control from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to release power control to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to report currently pending TX frames count -* (command packets are not included) -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return number of pending TX frames -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_32 u4Num; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - u4Num = kalGetTxPendingFrameCount(prAdapter->prGlueInfo) + (UINT_32)(prTxCtrl->i4PendingFwdFrameCount); - - return u4Num; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to report current ACPI state -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -*/ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rAcpiState; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to update current ACPI state only -* -* @param prAdapter Pointer of Adapter Data Structure -* @param ePowerState ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ) -{ - ASSERT(prAdapter); - ASSERT(ePowerState <= ACPI_STATE_D3); - - prAdapter->rAcpiState = ePowerState; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to query ECO version from HIFSYS CR -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(nicVerifyChipID(prAdapter) == TRUE) { - return (prAdapter->ucRevID + 1); - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to setting the default Tx Power configuration -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 i; - P_GLUE_INFO_T prGlueInfo = prAdapter->prGlueInfo; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prGlueInfo); - - prTxpwr = &prGlueInfo->rTxPwr; - - prTxpwr->c2GLegacyStaPwrOffset = 0; - prTxpwr->c2GHotspotPwrOffset = 0; - prTxpwr->c2GP2pPwrOffset = 0; - prTxpwr->c2GBowPwrOffset = 0; - prTxpwr->c5GLegacyStaPwrOffset = 0; - prTxpwr->c5GHotspotPwrOffset = 0; - prTxpwr->c5GP2pPwrOffset = 0; - prTxpwr->c5GBowPwrOffset = 0; - prTxpwr->ucConcurrencePolicy = 0; - for (i=0; i<3;i++) - prTxpwr->acReserved1[i] = 0; - - for (i=0; i<14;i++) - prTxpwr->acTxPwrLimit2G[i] = 63; - - for (i=0; i<4;i++) - prTxpwr->acTxPwrLimit5G[i] = 63; - - for (i=0; i<2;i++) - prTxpwr->acReserved2[i] = 0; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* set preferred band configuration corresponding to network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eBand Given band -* @param eNetTypeIndex Given Network Type -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - /* 1. set prefer band according to network type */ - prAdapter->aePreferBand[eNetTypeIndex] = eBand; - - /* 2. remove buffered BSS descriptors correspondingly */ - if(eBand == BAND_2G4) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_5G, eNetTypeIndex); - } - else if(eBand == BAND_5G) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_2G4, eNetTypeIndex); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* get channel information corresponding to specified network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eNetTypeIndex Given Network Type -* -* @return channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - return prBssInfo->ucPrimaryChannel; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* get BSS descriptor information corresponding to specified network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eNetTypeIndex Given Network Type -* -* @return pointer to BSS_DESC_T -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -wlanGetTargetBssDescByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - return prAdapter->rWifiVar.rAisFsmInfo.prTargetBssDesc; - - case NETWORK_TYPE_P2P_INDEX: - return NULL; - - case NETWORK_TYPE_BOW_INDEX: - return prAdapter->rWifiVar.rBowFsmInfo.prTargetBssDesc; - - default: - return NULL; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* check unconfigured system properties and generate related message on -* scan list to notify users -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -#if CFG_NVRAM_EXISTENCE_CHECK -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ) -{ -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) || (CFG_SW_NVRAM_VERSION_CHECK == 1) - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - const UINT_8 aucBCAddr[] = BC_MAC_ADDR; - BOOLEAN fgIsConfExist = TRUE; - BOOLEAN fgGenErrMsg = FALSE; - P_REG_INFO_T prRegInfo = NULL; - P_WLAN_BEACON_FRAME_T prBeacon = NULL; - P_IE_SSID_T prSsid = NULL; - UINT_32 u4ErrCode = 0; - UINT_8 aucErrMsg[32]; - PARAM_SSID_T rSsid; - PARAM_802_11_CONFIG_T rConfiguration; - PARAM_RATES_EX rSupportedRates; -#endif - - DEBUGFUNC("wlanCheckSystemConfiguration"); - - ASSERT(prAdapter); - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - fgIsConfExist = FALSE; - fgGenErrMsg = TRUE; - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - prRegInfo = kalGetConfiguration(prAdapter->prGlueInfo); - - if(fgIsConfExist == TRUE && - (CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION - || (prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) - || prRegInfo->ucTxPwrValid == 0)) { - fgGenErrMsg = TRUE; - } -#endif - - if(fgGenErrMsg == TRUE) { - prBeacon = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // initialization - kalMemZero(prBeacon, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // prBeacon initialization - prBeacon->u2FrameCtrl = MAC_FRAME_BEACON; - COPY_MAC_ADDR(prBeacon->aucDestAddr, aucBCAddr); - COPY_MAC_ADDR(prBeacon->aucSrcAddr, aucZeroMacAddr); - COPY_MAC_ADDR(prBeacon->aucBSSID, aucZeroMacAddr); - prBeacon->u2BeaconInterval = 100; - prBeacon->u2CapInfo = CAP_INFO_ESS; - - // prSSID initialization - prSsid = (P_IE_SSID_T)(&prBeacon->aucInfoElem[0]); - prSsid->ucId = ELEM_ID_SSID; - - // rConfiguration initialization - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = 100; - rConfiguration.u4ATIMWindow = 1; - rConfiguration.u4DSConfig = 2412; - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - // rSupportedRates initialization - kalMemZero(rSupportedRates, sizeof(PARAM_RATES_EX)); - } - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - #define NVRAM_ERR_MSG "NVRAM WARNING: Err = 0x01" - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - NVRAM_ERR_MSG, - strlen(NVRAM_ERR_MSG)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, NVRAM_ERR_MSG, strlen(NVRAM_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - #define VER_ERR_MSG "NVRAM WARNING: Err = 0x%02X" - if(fgIsConfExist == TRUE) { - if((CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION)) { - u4ErrCode |= NVRAM_ERROR_VERSION_MISMATCH; - } - - - if(prRegInfo->ucTxPwrValid == 0) { - u4ErrCode |= NVRAM_ERROR_INVALID_TXPWR; - } - - if(prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) { - u4ErrCode |= NVRAM_ERROR_INVALID_MAC_ADDR; - } - - if(u4ErrCode != 0) { - sprintf(aucErrMsg, VER_ERR_MSG, (unsigned int)u4ErrCode); - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - aucErrMsg, - strlen(aucErrMsg)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, NVRAM_ERR_MSG, strlen(NVRAM_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } - } -#endif - - if(fgGenErrMsg == TRUE) { - cnmMemFree(prAdapter, prBeacon); - } - - return WLAN_STATUS_SUCCESS; -} -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_oid.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_oid.c deleted file mode 100755 index fe683079e301..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_oid.c +++ /dev/null @@ -1,10800 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_oid.c#5 $ -*/ - -/*! \file wlanoid.c - \brief This file contains the WLAN OID processing routines of Windows driver for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_oid.c $ -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * using the wlanSendSetQueryCmd to set the tx power control cmd. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * change the set tx power cmd name. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 09 2011 george.huang - * [WCXRP00000871] [MT6620 Wi-Fi][FW] Include additional wakeup condition, which is by consequent DTIM unicast indication - * add XLOG for Set PS mode entry - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add RDD certification features. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 15 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * correct fifo full control from query to set operation for CTIA. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 17 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * add system config for CTIA. - * - * 08 15 2011 george.huang - * [MT6620 Wi-Fi][FW] handle TSF drift for connection detection - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 05 02 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Fix compile warning. - * - * 04 29 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * . - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * add more debug message - * - * 04 26 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Add rx path profiling. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 03 29 2011 puff.wen - * NULL - * Add chennel switch for stress test - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 24 2011 wh.su - * [WCXRP00000595] [MT6620 Wi-Fi][Driver] at CTIA indicate disconnect to make the ps profile can apply - * use disconnect event instead of ais abort for CTIA testing. - * - * 03 23 2011 george.huang - * [WCXRP00000586] [MT6620 Wi-Fi][FW] Modify for blocking absence request right after connected - * revise for CTIA power mode setting - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 15 2011 george.huang - * [WCXRP00000557] [MT6620 Wi-Fi] Support current consumption test mode commands - * Support current consumption measurement mode command - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 03 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the enter ctia test mode issue. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Update sigma CAPI for U-APSD setting - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 25 2011 cp.wu - * [WCXRP00000394] [MT6620 Wi-Fi][Driver] Count space needed for generating error message in scanning list into buffer size checking - * when doing size prechecking, check illegal MAC address as well - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * check if allow to switch to IBSS mode via concurrent module before setting to IBSS mode - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 04 2011 cp.wu - * [WCXRP00000342] [MT6620 Wi-Fi][Driver] show error code in scanning list when MAC address is not correctly configured in NVRAM - * show error code 0x10 when MAC address in NVRAM is not configured correctly. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 28 2010 george.huang - * [WCXRP00000232] [MT5931 Wi-Fi][FW] Modifications for updated HW power on sequence and related design - * support WMM-PS U-APSD AC assignment. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 16 2010 cp.wu - * [WCXRP00000268] [MT6620 Wi-Fi][Driver] correction for WHQL failed items - * correction for OID_802_11_NETWORK_TYPES_SUPPORTED handlers - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 21 2010 wh.su - * [WCXRP00000192] [MT6620 Wi-Fi][Driver] Fixed fail trying to build connection with Security AP while enable WAPI message check - * Not set the wapi mode while the wapi assoc info set non-wapi ie. - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 22 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * dos2unix conversion. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 yuche.tsai - * NULL - * Update SLT 5G Test Channel Set. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 06 2010 yuche.tsai - * NULL - * Update For SLT 5G Test Channel Selection Rule. - * - * 10 05 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Query buffer size needs to be enlarged due to result is filled in 4-bytes alignment boundary - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 10 04 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Extend result length to multiples of 4-bytes - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Update SLT due to API change of SCAN module. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 yuche.tsai - * NULL - * Refine SLT IO control handler. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 chinglan.wang - * NULL - * Modify the rescan condition. - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * upate params defined in CMD_SET_NETWORK_ADDRESS_LIST - * - * 08 04 2010 cp.wu - * NULL - * fix for check build WHQL testing: - * 1) do not assert query buffer if indicated buffer length is zero - * 2) sdio.c has bugs which cause freeing same pointer twice - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 08 04 2010 cp.wu - * NULL - * bypass u4FuncData for RF-Test query request as well. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 19 2010 wh.su - * - * modify the auth and encry status variable. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement SCAN-REQUEST oid as mailbox message dispatching. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for oid pmkid. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * simplify cmd packet sending for RF test and MCR access OIDs - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable radio even when STA is not associated. - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct 2 OID behaviour to meet WHQL requirement. - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct BSSID_LIST oid when radio if turned off. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable wlanoidSetNetworkAddress() temporally. - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * some OIDs should be DRIVER_CORE instead of GLUE_EXTENSION - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanoidSet802dot11PowerSaveProfile implementation. - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassocation support for wpa supplicant - * - * 05 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct return value. - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, still use parameter with current setting. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, generate a WZC-compatible invalid SSID. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * associate to illegal SSID when handling OID_802_11_DISASSOCIATE - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * 2) command sequence number is now increased atomically - * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_CONFIGURATION query for infrastructure mode. - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) remove unused spin lock declaration - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * (2) disable set Multicast address during atomic context - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve glue code portability - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * the frequency is used for adhoc connection only - * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * adding the check for pass WHQL test item. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 16 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * fixed some whql pre-test fail case. - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 24 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Don't needed to check the auth mode, WHQL testing not specific at auth wpa2. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not check SSID validity anymore. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * 2. follow MSDN defined behavior when associates to another AP - * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 02 04 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when OID_CUSTOM_OID_INTERFACE_VERSION is queried, do modify connection states - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * 2. block TX/ordinary OID when RF test mode is engaged - * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * OID_802_11_RSSI, - * OID_802_11_RSSI_TRIGGER, - * OID_802_11_STATISTICS, - * OID_802_11_DISASSOCIATE, - * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not fill ucJoinOnly currently - * - * 01 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable to connect to ad-hoc network - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .implement Set/Query BeaconInterval/AtimWindow - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .Set/Get AT Info is not blocked even when driver is not in fg test mode - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * and result is retrieved by get ATInfo instead - * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-16 22:13:36 GMT mtk02752 -** change hard-coded MAC address to match with FW (temporally) -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-10 16:49:50 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-08 17:38:49 GMT mtk02752 -** + add OID for RF test -** * MCR RD/WR are modified to match with cmd/event definition -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-12-08 11:32:20 GMT mtk02752 -** add skeleton for RF test implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-12-03 16:43:24 GMT mtk01461 -** Modify query SCAN list oid by adding prEventScanResult -** -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-03 16:39:27 GMT mtk01461 -** Sync CMD data structure in set ssid oid -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-03 16:28:22 GMT mtk01461 -** Add invalid check of set SSID oid and fix query scan list oid -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-30 17:33:08 GMT mtk02752 -** implement wlanoidSetInfrastructureMode/wlanoidQueryInfrastructureMode -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-30 10:53:49 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-30 09:22:48 GMT mtk02752 -** correct wifi cmd length mismatch -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-25 21:34:33 GMT mtk02752 -** sync EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 21:03:27 GMT mtk02752 -** implement wlanoidQueryBssidList() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-25 18:17:17 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-23 20:28:51 GMT mtk02752 -** some OID will be set to WLAN_STATUS_PENDING until it is sent via wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-23 17:56:36 GMT mtk02752 -** implement wlanoidSetBssidListScan(), wlanoidSetBssid() and wlanoidSetSsid() -** -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-13 17:20:53 GMT mtk02752 -** add Set BSSID/SSID path but disabled temporally due to FW is not ready yet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 12:28:58 GMT mtk02752 -** add wlanoidSetBssidListScan -> cmd_info path -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-09 22:48:07 GMT mtk01084 -** modify test cases entry -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-04 14:10:58 GMT mtk01084 -** add new test interfaces -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-30 18:17:10 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:46:26 GMT mtk01084 -** add test functions -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:07:56 GMT mtk01084 -** include new file -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:29 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-02 13:48:49 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-09-09 17:26:04 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-21 12:09:50 GMT mtk01461 -** Update for MCR Write OID -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:35:18 GMT mtk01461 -** Update wlanoidQueryMcrRead() for composing CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 18:09:51 GMT mtk01426 -** Remove kalIndicateStatusAndComplete() in wlanoidQueryOidInterfaceVersion() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-14 15:51:50 GMT mtk01426 -** Add MCR read/write support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:40 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:06:31 GMT mtk01426 -** Init for develop -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" -#include "mgmt/rsn.h" - -#include - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ -#if DBG -extern UINT_8 aucDebugModule[DBG_MODULE_NUM]; -extern UINT_32 u4DebugModule; -UINT_32 u4DebugModuleTemp; -#endif /* DBG */ - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ -extern int sprintf(char * buf, const char * fmt, ...); - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -#if CFG_ENABLE_STATISTICS_BUFFERING -static BOOLEAN -IsBufferedStatisticsUsable( - P_ADAPTER_T prAdapter) -{ - ASSERT(prAdapter); - - if(prAdapter->fgIsStatValid == TRUE && - (kalGetTimeTick() - prAdapter->rStatUpdateTime) <= CFG_STATISTICS_VALID_CYCLE) - return TRUE; - else - return FALSE; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the supported physical layer network -* type that can be used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 u4NumItem = 0; - ENUM_PARAM_NETWORK_TYPE_T eSupportedNetworks[PARAM_NETWORK_TYPE_NUM]; - PPARAM_NETWORK_TYPE_LIST prSupported; - - /* The array of all physical layer network subtypes that the driver supports. */ - - DEBUGFUNC("wlanoidQueryNetworkTypesSupported"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - /* Init. */ - for (u4NumItem = 0; u4NumItem < PARAM_NETWORK_TYPE_NUM ; u4NumItem++) { - eSupportedNetworks[u4NumItem] = 0; - } - - u4NumItem = 0; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_DS; - u4NumItem ++; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_OFDM24; - u4NumItem ++; - - *pu4QueryInfoLen = - (UINT_32)OFFSET_OF(PARAM_NETWORK_TYPE_LIST, eNetworkType) + - (u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSupported = (PPARAM_NETWORK_TYPE_LIST)pvQueryBuffer; - prSupported->NumberOfItems = u4NumItem; - kalMemCopy(prSupported->eNetworkType, - eSupportedNetworks, - u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - DBGLOG(REQ, TRACE, ("NDIS supported network type list: %ld\n", - prSupported->NumberOfItems)); - DBGLOG_MEM8(REQ, INFO, prSupported, *pu4QueryInfoLen); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypesSupported */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current physical layer network -* type used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T rCurrentNetworkTypeInUse = PARAM_NETWORK_TYPE_OFDM24; - - DEBUGFUNC("wlanoidQueryNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkType); - } - else { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkTypeInUse); - } - - *(P_ENUM_PARAM_NETWORK_TYPE_T)pvQueryBuffer = rCurrentNetworkTypeInUse; - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, TRACE, ("Network type in use: %d\n", rCurrentNetworkTypeInUse)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the physical layer network type used -* by the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS The given network type is supported and accepted. -* \retval WLAN_STATUS_INVALID_DATA The given network type is not in the -* supported list. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T eNewNetworkType; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - DEBUGFUNC("wlanoidSetNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_INVALID_LENGTH; - } - - eNewNetworkType = *(P_ENUM_PARAM_NETWORK_TYPE_T)pvSetBuffer; - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, - INFO, - ("New network type: %d mode\n", eNewNetworkType)); - - switch (eNewNetworkType) { - - case PARAM_NETWORK_TYPE_DS: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_DS; - break; - - case PARAM_NETWORK_TYPE_OFDM5: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM5; - break; - - case PARAM_NETWORK_TYPE_OFDM24: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM24; - break; - - case PARAM_NETWORK_TYPE_AUTOMODE: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_AUTOMODE; - break; - - case PARAM_NETWORK_TYPE_FH: - DBGLOG(REQ, INFO, ("Not support network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - - default: - DBGLOG(REQ, INFO, ("Unknown network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - /* Verify if we support the new network type. */ - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("Unknown network type: %d\n", eNewNetworkType)); - } - - return rStatus; -} /* wlanoidSetNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current BSSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryBssid"); - - ASSERT(prAdapter); - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - ASSERT(pu4QueryInfoLen); - *pu4QueryInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(u4QueryBufferLen >= MAC_ADDR_LEN); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalMemCopy(pvQueryBuffer, prAdapter->rWlanInfo.rCurrBssId.arMacAddress, MAC_ADDR_LEN); - } - else if(prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS) { - PARAM_MAC_ADDRESS aucTemp; /*!< BSSID */ - COPY_MAC_ADDR(aucTemp, prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - aucTemp[0] &= ~BIT(0); - aucTemp[1] |= BIT(1); - COPY_MAC_ADDR(pvQueryBuffer, aucTemp); - } - else { - rStatus = WLAN_STATUS_ADAPTER_NOT_READY; - } - - *pu4QueryInfoLen = MAC_ADDR_LEN; - return rStatus; -} /* wlanoidQueryBssid */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the list of all BSSIDs detected by -* the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssidList ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_32 i, u4BssidListExLen; - P_PARAM_BSSID_LIST_EX_T prList; - P_PARAM_BSSID_EX_T prBssidEx; - PUINT_8 cp; - - DEBUGFUNC("wlanoidQueryBssidList"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - - if(!pvQueryBuffer) { - return WLAN_STATUS_INVALID_DATA; - } - } - - prGlueInfo = prAdapter->prGlueInfo; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in qeury BSSID list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - u4BssidListExLen = 0; - - if(prAdapter->fgIsRadioOff == FALSE) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - u4BssidListExLen += ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4Length); - } - } - - if(u4BssidListExLen) { - u4BssidListExLen += 4; // u4NumberOfItems. - } - else { - u4BssidListExLen = sizeof(PARAM_BSSID_LIST_EX_T); - } - - *pu4QueryInfoLen = u4BssidListExLen; - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Clear the buffer */ - kalMemZero(pvQueryBuffer, u4BssidListExLen); - - prList = (P_PARAM_BSSID_LIST_EX_T) pvQueryBuffer; - cp = (PUINT_8)&prList->arBssid[0]; - - if(prAdapter->fgIsRadioOff == FALSE && prAdapter->rWlanInfo.u4ScanResultNum > 0) { - // fill up for each entry - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - prBssidEx = (P_PARAM_BSSID_EX_T)cp; - - // copy structure - kalMemCopy(prBssidEx, - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - /*For WHQL test, Rssi should be in range -10 ~ -200 dBm*/ - if(prBssidEx->rRssi > PARAM_WHQL_RSSI_MAX_DBM) { - prBssidEx->rRssi = PARAM_WHQL_RSSI_MAX_DBM; - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - // copy IEs - kalMemCopy(prBssidEx->aucIEs, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // 4-bytes alignement - prBssidEx->u4Length = ALIGN_4(prBssidEx->u4Length); - - cp += prBssidEx->u4Length; - prList->u4NumberOfItems++; - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryBssidList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScan ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SSID_T prSsid; - PARAM_SSID_T rSsid; - - DEBUGFUNC("wlanoidSetBssidListScan()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - pvSetBuffer, - u4SetBufferLen); - prSsid = &rSsid; - } - else { - prSsid = NULL; - } - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED){ - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetBssidListScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning with attaching information elements(IEs) specified from user space -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SCAN_REQUEST_EXT_T prScanRequest; - P_PARAM_SSID_T prSsid; - PUINT_8 pucIe; - UINT_32 u4IeLength; - - DEBUGFUNC("wlanoidSetBssidListScanExt()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if(u4SetBufferLen != sizeof(PARAM_SCAN_REQUEST_EXT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - prScanRequest = (P_PARAM_SCAN_REQUEST_EXT_T)pvSetBuffer; - prSsid = &(prScanRequest->rSsid); - pucIe = prScanRequest->pucIE; - u4IeLength = prScanRequest->u4IELength; - } - else { - prScanRequest = NULL; - prSsid = NULL; - pucIe = NULL; - u4IeLength = 0; - } - - P_AIS_FSM_INFO_T prAisFsmInfo; - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rScanDoneTimer, - SEC_TO_MSEC(AIS_SCN_DONE_TIMEOUT_SEC)); - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED){ - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetBssidListScanWithIE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt to associate -* with the specified BSSID. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_UINT_8 pAddr; - UINT_32 i; - INT_32 i4Idx = -1; - P_MSG_AIS_ABORT_T prAisAbortMsg; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = MAC_ADDR_LEN;; - if (u4SetBufferLen != MAC_ADDR_LEN){ - *pu4SetInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prGlueInfo = prAdapter->prGlueInfo; - pAddr = (P_UINT_8)pvSetBuffer; - - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, pAddr)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the BSSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, pAddr)) { - i4Idx = (INT_32)i; - break; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - /* Set Connection Request Issued Flag */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_BSSID; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - prAdapter->rWifiVar.rConnSettings.ucSSIDLen = 0; - prAdapter->rWifiVar.rConnSettings.aucSSID[0] = '\0'; - - COPY_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr); - prAisAbortMsg->fgDelayIndication = FALSE; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt -* to associate with the new SSID. If the previous scanning -* result is aged, we will scan the channels at first. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSsid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_PARAM_SSID_T pParamSsid; - UINT_32 i; - INT_32 i4Idx = -1, i4MaxRSSI = INT_MIN; - P_MSG_AIS_ABORT_T prAisAbortMsg; - BOOLEAN fgIsValidSsid = TRUE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* MSDN: - * Powering on the radio if the radio is powered off through a setting of OID_802_11_DISASSOCIATE - */ - if(prAdapter->fgIsRadioOff == TRUE) { - prAdapter->fgIsRadioOff = FALSE; - } - - if(u4SetBufferLen < sizeof(PARAM_SSID_T) || u4SetBufferLen > sizeof(PARAM_SSID_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - pParamSsid = (P_PARAM_SSID_T) pvSetBuffer; - - if (pParamSsid->u4SsidLen > 32) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prGlueInfo = prAdapter->prGlueInfo; - - // prepare for CMD_BUILD_CONNECTION & CMD_GET_CONNECTION_STATUS - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_SSID(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the SSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - PUINT_8 aucSsid = prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid; - UINT_8 ucSsidLength = (UINT_8) prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen; - INT_32 i4RSSI = prAdapter->rWlanInfo.arScanResult[i].rRssi; - - if(EQUAL_SSID(aucSsid, ucSsidLength, pParamSsid->aucSsid, pParamSsid->u4SsidLen) && - i4RSSI >= i4MaxRSSI) { - i4Idx = (INT_32)i; - i4MaxRSSI = i4RSSI; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - if (prAdapter->rWifiVar.fgSupportWZCDisassociation) { - if (pParamSsid->u4SsidLen == ELEM_MAX_LEN_SSID) { - fgIsValidSsid = FALSE; - - for (i = 0; i < ELEM_MAX_LEN_SSID; i++) { - if ( !((0 < pParamSsid->aucSsid[i]) && (pParamSsid->aucSsid[i] <= 0x1F)) ) { - fgIsValidSsid = TRUE; - break; - } - } - } - } - - /* Set Connection Request Issued Flag */ - if (fgIsValidSsid) { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - - if(pParamSsid->u4SsidLen) { - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - } - else { - // wildcard SSID - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_ANY; - } - } - else { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - } - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - COPY_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - (UINT_8)pParamSsid->u4SsidLen); - - prAisAbortMsg->fgDelayIndication = FALSE; - } - DBGLOG(SCN, INFO, ("SSID %s\n", prAdapter->rWifiVar.rConnSettings.aucSSID)); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidSetSsid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the currently associated SSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySsid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_SSID_T prAssociatedSsid; - - DEBUGFUNC("wlanoidQuerySsid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_SSID_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prAssociatedSsid = (P_PARAM_SSID_T)pvQueryBuffer; - - kalMemZero(prAssociatedSsid->aucSsid, sizeof(prAssociatedSsid->aucSsid)); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - prAssociatedSsid->u4SsidLen = prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen; - - if (prAssociatedSsid->u4SsidLen) { - kalMemCopy(prAssociatedSsid->aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAssociatedSsid->u4SsidLen); - } - } - else { - prAssociatedSsid->u4SsidLen = 0; - - DBGLOG(REQ, TRACE, ("Null SSID\n")); - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQuerySsid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 network type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eOPMode; - - /* - ** According to OID_802_11_INFRASTRUCTURE_MODE - ** If there is no prior OID_802_11_INFRASTRUCTURE_MODE, - ** NDIS_STATUS_ADAPTER_NOT_READY shall be returned. - */ -#if DBG - switch (*(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer) { - case NET_TYPE_IBSS: - DBGLOG(REQ, INFO, ("IBSS mode\n")); - break; - case NET_TYPE_INFRA: - DBGLOG(REQ, INFO, ("Infrastructure mode\n")); - break; - default: - DBGLOG(REQ, INFO, ("Automatic mode\n")); - } -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set mode to infrastructure or -* IBSS, or automatic switch between the two. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid -* length of the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - ENUM_PARAM_OP_MODE_T eOpMode; - - DEBUGFUNC("wlanoidSetInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - if (u4SetBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) - return WLAN_STATUS_BUFFER_TOO_SHORT; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set infrastructure mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eOpMode = *(P_ENUM_PARAM_OP_MODE_T)pvSetBuffer; - /* Verify the new infrastructure mode. */ - if (eOpMode >= NET_TYPE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid mode value %d\n", eOpMode)); - return WLAN_STATUS_INVALID_DATA; - } - - /* check if possible to switch to AdHoc mode */ - if(eOpMode == NET_TYPE_IBSS || eOpMode == NET_TYPE_DEDICATED_IBSS) { - if(cnmAisIbssIsPermitted(prAdapter) == FALSE) { - DBGLOG(REQ, TRACE, ("Mode value %d unallowed\n", eOpMode)); - return WLAN_STATUS_FAILURE; - } - } - - /* Save the new infrastructure mode setting. */ - prAdapter->rWifiVar.rConnSettings.eOPMode = eOpMode; - - /* Clean up the Tx key flag */ - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; -#if CFG_SUPPORT_WAPI - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - kalMemZero(&prAdapter->prGlueInfo->aucWapiAssocInfoIEs, 42); -#endif - -#if CFG_SUPPORT_802_11W - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled = FALSE; -#endif - -#if CFG_SUPPORT_WPS2 - kalMemZero(&prAdapter->prGlueInfo->aucWSCAssocInfoIE, 200); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; -#endif - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INFRASTRUCTURE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 authentication -* mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAuthMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAuthMode"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eAuthMode; - -#if DBG - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer) { - case AUTH_MODE_OPEN: - DBGLOG(REQ, INFO, ("Current auth mode: Open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(REQ, INFO, ("Current auth mode: Shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(REQ, INFO, ("Current auth mode: Auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(REQ, INFO, ("Current auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(REQ, INFO, ("Current auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryAuthMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 authentication mode -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAuthMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_32 i, u4AkmSuite; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("wlanoidSetAuthMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* RF Test */ - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer >= AUTH_MODE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid auth mode %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer) { - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - /* infrastructure mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_INFRA) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - case AUTH_MODE_WPA_NONE: - /* ad hoc mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_IBSS) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - default: - ; - } - - /* Save the new authentication mode. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer; - -#if DBG - switch (prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_OPEN: - DBGLOG(RSN, TRACE, ("New auth mode: open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(RSN, TRACE, ("New auth mode: shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(RSN, TRACE, ("New auth mode: auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(RSN, TRACE, ("New auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(RSN, TRACE, ("New auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(RSN, TRACE, ("New auth mode: unknown (%d)\n", - prAdapter->rWifiVar.rConnSettings.eAuthMode)); - } -#endif - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode >= AUTH_MODE_WPA) { - switch(prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_WPA: - u4AkmSuite = WPA_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA_PSK: - u4AkmSuite = WPA_AKM_SUITE_PSK; - break; - - case AUTH_MODE_WPA_NONE: - u4AkmSuite = WPA_AKM_SUITE_NONE; - break; - - case AUTH_MODE_WPA2: - u4AkmSuite = RSN_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA2_PSK: - u4AkmSuite = RSN_AKM_SUITE_PSK; - break; - - default: - u4AkmSuite = 0; - } - } - else { - u4AkmSuite = 0; - } - - /* Enable the specific AKM suite only. */ - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite) { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = FALSE; - } -#if CFG_SUPPORT_802_11W - if (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) { - if ((u4AkmSuite == RSN_AKM_SUITE_PSK) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_PSK_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_PSK_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - - } - if ((u4AkmSuite == RSN_AKM_SUITE_802_1X) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_802_1X_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_802_1X_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - } -#endif - } - - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetAuthMode */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 privacy filter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPrivacyFilter"); - - ASSERT(prAdapter); - - ASSERT(pvQueryBuffer); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer = prAdapter->rWlanInfo.ePrivacyFilter; - -#if DBG - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer) { - case PRIVACY_FILTER_ACCEPT_ALL: - DBGLOG(REQ, INFO, ("Current privacy mode: open mode\n")); - break; - - case PRIVACY_FILTER_8021xWEP: - DBGLOG(REQ, INFO, ("Current privacy mode: filtering mode\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPrivacyFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 privacy filter -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("wlanoidSetPrivacyFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer >= PRIVACY_FILTER_NUM) { - DBGLOG(REQ, TRACE, ("Invalid privacy filter %d\n", - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer) { - default: - break; - } - - /* Save the new authentication mode. */ - prAdapter->rWlanInfo.ePrivacyFilter = *(ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPrivacyFilter */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to reload the available default settings for -* the specified type field. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetReloadDefaults ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - UINT_32 u4Len; - UINT_8 ucCmdSeqNum; - - - DEBUGFUNC("wlanoidSetReloadDefaults"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = sizeof(PARAM_RELOAD_DEFAULTS); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Reload default! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - /* Verify the available reload options and reload the settings. */ - switch (*(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer) { - case ENUM_RELOAD_WEP_KEYS: - /* Reload available default WEP keys from the permanent - storage. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = AUTH_MODE_OPEN; - prAdapter->rWifiVar.rConnSettings.eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT;//ENUM_ENCRYPTION_DISABLED; - { - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_802_11_KEY prCmdKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = 0;//(UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, aucBCAddr, MAC_ADDR_LEN); - - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); - - prCmdKey->ucKeyType = 0; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; - } - - break; - - default: - DBGLOG(REQ, TRACE, ("Invalid reload option %d\n", - *(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer)); - rStatus = WLAN_STATUS_INVALID_DATA; - } - - /* OID_802_11_RELOAD_DEFAULTS requiest to reset to auto mode */ - eNetworkType = PARAM_NETWORK_TYPE_AUTOMODE; - wlanoidSetNetworkTypeInUse(prAdapter, &eNetworkType, sizeof(eNetworkType), &u4Len); - - return rStatus; -} /* wlanoidSetReloadDefaults */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a WEP key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -#ifdef LINUX -UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; -UINT_8 aucBCAddr[] = BC_MAC_ADDR; -#endif -WLAN_STATUS -wlanoidSetAddWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - #ifndef LINUX - UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - #endif - P_PARAM_WEP_T prNewWepKey; - P_PARAM_KEY_T prParamKey = (P_PARAM_KEY_T)keyBuffer; - UINT_32 u4KeyId, u4SetLen; - - DEBUGFUNC("wlanoidSetAddWep"); - - ASSERT(prAdapter); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial)) { - ASSERT(pu4SetInfoLen); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewWepKey = (P_PARAM_WEP_T)pvSetBuffer; - - /* Verify the total buffer for minimum length. */ - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial) + prNewWepKey->u4KeyLength) { - DBGLOG(REQ, WARN, ("Invalid total buffer length (%d) than minimum length (%d)\n", - (UINT_8)u4SetBufferLen, - (UINT_8)OFFSET_OF(PARAM_WEP_T, aucKeyMaterial))); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key structure length. */ - if (prNewWepKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewWepKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key material length for maximum key material length:16 */ - if (prNewWepKey->u4KeyLength > 16 /* LEGACY_KEY_MAX_LEN */) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d) greater than maximum key material length (16)\n", - (UINT_8)prNewWepKey->u4KeyLength)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = u4SetBufferLen; - - u4KeyId = prNewWepKey->u4KeyIndex & BITS(0,29) /* WEP_KEY_ID_FIELD */; - - /* Verify whether key index is valid or not, current version - driver support only 4 global WEP keys setting by this OID */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("Error, invalid WEP key ID: %d\n", (UINT_8)u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - prParamKey->u4KeyIndex = u4KeyId; - - /* Transmit key */ - if (prNewWepKey->u4KeyIndex & IS_TRANSMIT_KEY) { - prParamKey->u4KeyIndex |= IS_TRANSMIT_KEY; - } - - /* Per client key */ - if (prNewWepKey->u4KeyIndex & IS_UNICAST_KEY) { - prParamKey->u4KeyIndex |= IS_UNICAST_KEY; - } - - prParamKey->u4KeyLength = prNewWepKey->u4KeyLength; - - kalMemCopy(prParamKey->arBSSID, aucBCAddr, MAC_ADDR_LEN); - - kalMemCopy(prParamKey->aucKeyMaterial, - prNewWepKey->aucKeyMaterial, - prNewWepKey->u4KeyLength); - - prParamKey->u4Length = OFFSET_OF(PARAM_KEY_T, aucKeyMaterial) + prNewWepKey->u4KeyLength; - - wlanoidSetAddKey(prAdapter, - (PVOID)prParamKey, - prParamKey->u4Length, - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the WEP key -* at the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4KeyId, u4SetLen; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - DEBUGFUNC("wlanoidSetRemoveWep"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_KEY_INDEX); - - if (u4SetBufferLen < sizeof(PARAM_KEY_INDEX)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4KeyId = *(PUINT_32)pvSetBuffer; - - /* Dump PARAM_WEP content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_KEY_INDEX content\n")); - DBGLOG(REQ, INFO, ("Index : 0x%08lx\n", u4KeyId)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if (u4KeyId & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("Invalid WEP key index: 0x%08lx\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - u4KeyId &= BITS(0,7); - - /* Verify whether key index is valid or not. Current version - driver support only 4 global WEP keys. */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("invalid WEP key ID %lu\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - rRemoveKey.u4KeyIndex = *(PUINT_32)pvSetBuffer; - - kalMemCopy(rRemoveKey.arBSSID, aucBCAddr, MAC_ADDR_LEN); - - wlanoidSetRemoveKey(prAdapter, - (PVOID)&rRemoveKey, - sizeof(PARAM_REMOVE_KEY_T), - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer PARAM_KEY_T, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetAddKey"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Verify the key material length for key material buffer */ - if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check */ - if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - - if (!(prNewKey->u4KeyLength == WEP_40_LEN || prNewKey->u4KeyLength == WEP_104_LEN || - prNewKey->u4KeyLength == CCMP_KEY_LEN || prNewKey->u4KeyLength == TKIP_KEY_LEN)) - { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Dump PARAM_KEY content. */ - DBGLOG(REQ, TRACE, ("Set: Dump PARAM_KEY content\n")); - DBGLOG(REQ, TRACE, ("Length : 0x%08lx\n", prNewKey->u4Length)); - DBGLOG(REQ, TRACE, ("Key Index : 0x%08lx\n", prNewKey->u4KeyIndex)); - DBGLOG(REQ, TRACE, ("Key Length: 0x%08lx\n", prNewKey->u4KeyLength)); - DBGLOG(REQ, TRACE, ("BSSID:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->arBSSID, sizeof(PARAM_MAC_ADDRESS)); - DBGLOG(REQ, TRACE, ("Key RSC:\n")); - DBGLOG_MEM8(REQ, TRACE, &prNewKey->rKeyRSC, sizeof(PARAM_KEY_RSC)); - DBGLOG(REQ, TRACE, ("Key Material:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucKeyMaterial, prNewKey->u4KeyLength); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - /* Todo:: Store the legacy wep key for OID_802_11_RELOAD_DEFAULTS */ - } - - if (prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = TRUE; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, INFO, ("ucCmdSeqNum = %d\n", ucCmdSeqNum)); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - prCmdKey->ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - prCmdKey->ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - prCmdKey->ucIsAuthenticator = ((prNewKey->u4KeyIndex & IS_AUTHENTICATOR) == IS_AUTHENTICATOR) ? 1 : 0; - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->arBSSID, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - - /* Note: adjust the key length for WPA-None */ - prCmdKey->ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, prCmdKey->ucKeyLen); - - if (prNewKey->u4KeyLength == 5) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP40; - } - else if (prNewKey->u4KeyLength == 13) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP104; - } - else if (prNewKey->u4KeyLength == 16) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP128; - else { -#if CFG_SUPPORT_802_11W - if (prCmdKey->ucKeyId >= 4) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_BIP; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - prAisSpecBssInfo->fgBipKeyInstalled = TRUE; - } - else -#endif - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - } - } - else if (prNewKey->u4KeyLength == 32) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION2_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - prCmdKey->ucKeyLen = CCMP_KEY_LEN; - } - } - else { - if (rsnCheckPmkidCandicate(prAdapter)) { - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("Add key: Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the key at -* the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_REMOVE_KEY_T prRemovedKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetRemoveKey"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Dump PARAM_REMOVE_KEY content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_REMOVE_KEY content\n")); - DBGLOG(REQ, INFO, ("Length : 0x%08lx\n", prRemovedKey->u4Length)); - DBGLOG(REQ, INFO, ("Key Index : 0x%08lx\n", prRemovedKey->u4KeyIndex)); - DBGLOG(REQ, INFO, ("BSSID:\n")); - DBGLOG_MEM8(REQ, INFO, prRemovedKey->arBSSID, MAC_ADDR_LEN); - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Clean up the Tx key flag */ - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - } - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - -#if CFG_SUPPORT_802_11W - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM + 2); -#else - //ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); -#endif - - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prCmdKey->ucKeyType = 1; - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current encryption status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - BOOLEAN fgTransmitKeyAvailable = TRUE; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus = 0; - - DEBUGFUNC("wlanoidQueryEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - fgTransmitKeyAvailable = prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist; - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION3_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION3_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION2_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - break; - } - else { - eEncStatus = ENUM_ENCRYPTION2_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION_DISABLED: - eEncStatus = ENUM_ENCRYPTION_DISABLED; - break; - - default: - DBGLOG(REQ, ERROR, ("Unknown Encryption Status Setting:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } - -#if DBG - DBGLOG(REQ, INFO, - ("Encryption status: %d Return:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus, - eEncStatus)); -#endif - - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvQueryBuffer = eEncStatus; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the encryption status to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_SUPPORTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_ENCRYPTION_STATUS_T eEewEncrypt; - - DEBUGFUNC("wlanoidSetEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set encryption status! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eEewEncrypt = *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - DBGLOG(REQ, TRACE, ("ENCRYPTION_STATUS %d\n", eEewEncrypt)); - - switch (eEewEncrypt) { - case ENUM_ENCRYPTION_DISABLED: /* Disable WEP, TKIP, AES */ - DBGLOG(RSN, TRACE, ("Disable Encryption\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION1_ENABLED: /* Enable WEP. Disable TKIP, AES */ - DBGLOG(RSN, TRACE, ("Enable Encryption1\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION2_ENABLED: /* Enable WEP, TKIP. Disable AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP); - DBGLOG(RSN, TRACE, ("Enable Encryption2\n")); - break; - - case ENUM_ENCRYPTION3_ENABLED: /* Enable WEP, TKIP, AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP | - CIPHER_FLAG_CCMP); - DBGLOG(RSN, TRACE, ("Enable Encryption3\n")); - break; - - default: - DBGLOG(RSN, WARN, ("Unacceptible encryption status: %d\n", - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer)); - - rStatus = WLAN_STATUS_NOT_SUPPORTED; - } - - if (rStatus == WLAN_STATUS_SUCCESS) { - /* Save the new encryption status. */ - prAdapter->rWifiVar.rConnSettings.eEncStatus = - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - } - - return rStatus; -} /* wlanoidSetEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to test the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_802_11_TEST_T prTest; - PVOID pvTestData; - PVOID pvStatusBuffer; - UINT_32 u4StatusBufferSize; - - DEBUGFUNC("wlanoidSetTest"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - *pu4SetInfoLen = u4SetBufferLen; - - prTest = (P_PARAM_802_11_TEST_T)pvSetBuffer; - - DBGLOG(REQ, TRACE, ("Test - Type %ld\n", prTest->u4Type)); - - switch (prTest->u4Type) { - case 1: /* Type 1: generate an authentication event */ - pvTestData = (PVOID)&prTest->u.AuthenticationEvent; - pvStatusBuffer = (PVOID)prAdapter->aucIndicationEventBuffer; - u4StatusBufferSize = prTest->u4Length - 8; - break; - - case 2: /* Type 2: generate an RSSI status indication */ - pvTestData = (PVOID)&prTest->u.RssiTrigger; - pvStatusBuffer = (PVOID)&prAdapter->rWlanInfo.rCurrBssId.rRssi; - u4StatusBufferSize = sizeof(PARAM_RSSI); - break; - - default: - return WLAN_STATUS_INVALID_DATA; - } - - ASSERT(u4StatusBufferSize <= 180); - if (u4StatusBufferSize > 180) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Get the contents of the StatusBuffer from the test structure. */ - kalMemCopy(pvStatusBuffer, pvTestData, u4StatusBufferSize); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - pvStatusBuffer, - u4StatusBufferSize); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the driver's WPA2 status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCapability ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CAPABILITY_T prCap; - P_PARAM_AUTH_ENCRYPTION_T prAuthenticationEncryptionSupported; - - DEBUGFUNC("wlanoidQueryCapability"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = 4 * sizeof(UINT_32) + 14 * sizeof(PARAM_AUTH_ENCRYPTION_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prCap = (P_PARAM_CAPABILITY_T)pvQueryBuffer; - - prCap->u4Length = *pu4QueryInfoLen; - prCap->u4Version = 2; /* WPA2 */ - prCap->u4NoOfPMKIDs = CFG_MAX_PMKID_CACHE; - prCap->u4NoOfAuthEncryptPairsSupported = 14; - - prAuthenticationEncryptionSupported = - &prCap->arAuthenticationEncryptionSupported[0]; - - // fill 14 entries of supported settings - prAuthenticationEncryptionSupported[0].eAuthModeSupported = - AUTH_MODE_OPEN; - - prAuthenticationEncryptionSupported[0].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[1].eAuthModeSupported = - AUTH_MODE_OPEN; - prAuthenticationEncryptionSupported[1].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[2].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[2].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[3].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[3].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[4].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[4].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[5].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[5].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[6].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[6].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[7].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[7].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[8].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[8].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[9].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[9].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[10].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[10].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[11].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[11].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[12].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[12].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[13].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[13].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryCapability */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the PMKID in the PMK cache. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPmkid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 i; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidQueryPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - *pu4QueryInfoLen = OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo) + - prAisSpecBssInfo->u4PmkidCacheCount * sizeof(PARAM_BSSID_INFO_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prPmkid = (P_PARAM_PMKID_T)pvQueryBuffer; - - prPmkid->u4Length = *pu4QueryInfoLen; - prPmkid->u4BSSIDInfoCount = prAisSpecBssInfo->u4PmkidCacheCount; - - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - kalMemCopy(prPmkid->arBSSIDInfo[i].arBSSID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - kalMemCopy(prPmkid->arBSSIDInfo[i].arPMKID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - } - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the PMKID to the PMK cache in the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPmkid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, j; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidSetPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = u4SetBufferLen; - - /* It's possibble BSSIDInfoCount is zero, because OS wishes to clean PMKID */ - if (u4SetBufferLen < OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - prPmkid = (P_PARAM_PMKID_T)pvSetBuffer; - - if (u4SetBufferLen < - ((prPmkid->u4BSSIDInfoCount * sizeof(PARAM_BSSID_INFO_T)) + - OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo))) { - return WLAN_STATUS_INVALID_DATA; - } - - if (prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE) { - return WLAN_STATUS_INVALID_DATA; - } - - DBGLOG(REQ, INFO, ("Count %lu\n", prPmkid->u4BSSIDInfoCount)); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* This OID replace everything in the PMKID cache. */ - if (prPmkid->u4BSSIDInfoCount == 0) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - if ((prAisSpecBssInfo->u4PmkidCacheCount + prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE)) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - - /* - The driver can only clear its PMKID cache whenever it make a media disconnect - indication. Otherwise, it must change the PMKID cache only when set through this OID. - */ -#if CFG_RSN_MIGRATION - for (i = 0; i < prPmkid->u4BSSIDInfoCount; i++) { - /* Search for desired BSSID. If desired BSSID is found, - then set the PMKID */ - if (!rsnSearchPmkidEntry(prAdapter, - (PUINT_8)prPmkid->arBSSIDInfo[i].arBSSID, - &j)) { - /* No entry found for the specified BSSID, so add one entry */ - if (prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE - 1) { - j = prAisSpecBssInfo->u4PmkidCacheCount; - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prPmkid->arBSSIDInfo[i].arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - prAisSpecBssInfo->u4PmkidCacheCount++; - } - else { - j = CFG_MAX_PMKID_CACHE; - } - } - - if (j < CFG_MAX_PMKID_CACHE) { - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID, - prPmkid->arBSSIDInfo[i].arPMKID, - sizeof(PARAM_PMKID_VALUE)); - DBGLOG(RSN, TRACE, ("Add BSSID "MACSTR" idx=%d PMKID value "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID),j, MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID))); - prAisSpecBssInfo->arPmkidCache[j].fgPmkidExist = TRUE; - } - } -#endif - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the set of supported data rates that -* the radio is capable of running -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query -* \param[in] u4QueryBufferLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number -* of bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySupportedRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PARAM_RATES eRate = { - // BSSBasicRateSet for 802.11n Non-HT rates - 0x8C, // 6M - 0x92, // 9M - 0x98, // 12M - 0xA4, // 18M - 0xB0, // 24M - 0xC8, // 36M - 0xE0, // 48M - 0xEC // 54M - }; - - DEBUGFUNC("wlanoidQuerySupportedRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&eRate, - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQuerySupportedRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i; - DEBUGFUNC("wlanoidSetDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(PARAM_RATES); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy((PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - pvSetBuffer, - sizeof(PARAM_RATES)); - - prAdapter->rWlanInfo.eLinkAttr.ucDesiredRateLen = PARAM_MAX_LEN_RATES; - for (i = 0 ; i < PARAM_MAX_LEN_RATES ; i++) { - prAdapter->rWlanInfo.eLinkAttr.u2DesiredRate[i] = - (UINT_16) (prAdapter->rWlanInfo.eDesiredRates[i]); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum frame size in bytes, -* not including the header. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxFrameSize"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ - ETHERNET_HEADER_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxFrameSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum total packet length -* in bytes. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxTotalSize"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxTotalSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the vendor ID of the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryVendorId ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PUINT_8 cp; -#endif - DEBUGFUNC("wlanoidQueryVendorId"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, prAdapter->aucMacAddress, 3); - *((PUINT_8)pvQueryBuffer + 3) = 1; - *pu4QueryInfoLen = sizeof(UINT_32); - -#if DBG - cp = (PUINT_8)pvQueryBuffer; - DBGLOG(REQ, LOUD, ("Vendor ID=%02x-%02x-%02x-%02x\n", cp[0], cp[1], cp[2], cp[3])); -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryVendorId */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssi ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (prAdapter->fgIsLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* end of wlanoidQueryRssi() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI trigger value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssiTrigger ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_NONE) - return WLAN_STATUS_ADAPTER_NOT_READY; - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(PARAM_RSSI *) pvQueryBuffer = prAdapter->rWlanInfo.rRssiTriggerValue; - DBGLOG(REQ, INFO, ("RSSI trigger: %ld dBm\n", *(PARAM_RSSI *) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a trigger value of the RSSI event. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRssiTrigger ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RSSI rRssiTriggerValue; - DEBUGFUNC("wlanoidSetRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_RSSI); - rRssiTriggerValue = *(PARAM_RSSI *) pvSetBuffer; - - if(rRssiTriggerValue > PARAM_WHQL_RSSI_MAX_DBM - || rRssiTriggerValue < PARAM_WHQL_RSSI_MIN_DBM) - return - - /* Save the RSSI trigger value to the Adapter structure */ - prAdapter->rWlanInfo.rRssiTriggerValue = rRssiTriggerValue; - - /* If the RSSI trigger value is equal to the current RSSI value, the - * indication triggers immediately. We need to indicate the protocol - * that an RSSI status indication event triggers. */ - if (rRssiTriggerValue == (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &prAdapter->rWlanInfo.rRssiTriggerValue, sizeof(PARAM_RSSI)); - } - else if(rRssiTriggerValue < (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_GREATER; - else if(rRssiTriggerValue > (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_LESS; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a suggested value for the number of -* bytes of received packet data that will be indicated to the protocol -* driver. We just accept the set and ignore this value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetCurrentLookahead"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetCurrentLookahead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* receives but does not indicate to the protocols due to errors. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* cannot receive due to lack of NIC receive buffer space. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvNoBuffer"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) 0; //@FIXME - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) 0; //@FIXME - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvNoBuffer, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvNoBuffer */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* received and it is CRC error. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvCrcError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvCrcError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvCrcError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the current 802.11 statistics. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryStatistics"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(PARAM_802_11_STATISTICS_STRUCT_T)) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) pvQueryBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prAdapter->rStatStruct.rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prAdapter->rStatStruct.rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prAdapter->rStatStruct.rFailedCount; - prStatistics->rRetryCount - = prAdapter->rStatStruct.rRetryCount; - prStatistics->rMultipleRetryCount - = prAdapter->rStatStruct.rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prAdapter->rStatStruct.rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prAdapter->rStatStruct.rRTSFailureCount; - prStatistics->rACKFailureCount - = prAdapter->rStatStruct.rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prAdapter->rStatStruct.rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prAdapter->rStatStruct.rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prAdapter->rStatStruct.rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prAdapter->rStatStruct.rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryStatistics, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryStatistics */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query current media streaming status. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(P_ENUM_MEDIA_STREAM_MODE)pvQueryBuffer = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to enter media streaming mode or exit media streaming mode -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ENUM_MEDIA_STREAM_MODE eStreamMode; - - DEBUGFUNC("wlanoidSetMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_MEDIA_STREAM_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - eStreamMode = *(P_ENUM_MEDIA_STREAM_MODE)pvSetBuffer; - - if(eStreamMode == ENUM_MEDIA_STREAM_OFF) - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - else - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 1; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetMediaStreamMode, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); -} /* wlanoidSetMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the permanent MAC address of the NIC. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPermanentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - COPY_MAC_ADDR(pvQueryBuffer, prAdapter->rWifiVar.aucPermanentAddress); - *pu4QueryInfoLen = MAC_ADDR_LEN; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPermanentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the MAC address the NIC is currently using. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidQueryCurrentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryAddress, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryCurrentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query NIC link speed. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryLinkSpeed"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = 10000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else if (prAdapter->fgIsLinkRateValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - *(PUINT_32)pvQueryBuffer = prAdapter->rLinkQuality.u2LinkSpeed * 5000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkSpeed, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* end of wlanoidQueryLinkSpeed() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query MCR value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - CMD_ACCESS_REG rCmdAccessReg; - - DEBUGFUNC("wlanoidQueryMcrRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvQueryBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrRdInfo->u4McrOffset >>16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_READ, - (UINT_16) (prMcrRdInfo->u4McrOffset & BITS(0,15)), - &prMcrRdInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - /* Check if access F/W Domain MCR (due to WiFiSYS is placed from 0x6000-0000*/ - if (prMcrRdInfo->u4McrOffset & 0xFFFF0000){ - // fill command - rCmdAccessReg.u4Address = prMcrRdInfo->u4McrOffset; - rCmdAccessReg.u4Data = 0; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcrRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvQueryBuffer, - u4QueryBufferLen - ); - } - else { - HAL_MCR_RD(prAdapter, - prMcrRdInfo->u4McrOffset & BITS(2,31), //address is in DWORD unit - &prMcrRdInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Read: Offset = %#08lx, Data = %#08lx\n", - prMcrRdInfo->u4McrOffset, prMcrRdInfo->u4McrData)); - return WLAN_STATUS_SUCCESS; - } -} /* end of wlanoidQueryMcrRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write MCR and enable specific function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrWrInfo; - CMD_ACCESS_REG rCmdAccessReg; - -#if CFG_STRESS_TEST_SUPPORT - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - P_STA_RECORD_T prStaRec = prBssInfo->prStaRecOfAP; - UINT_32 u4McrOffset, u4McrData; -#endif - - DEBUGFUNC("wlanoidSetMcrWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMcrWrInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvSetBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - - // -- Puff Stress Test Begin -#if CFG_STRESS_TEST_SUPPORT - - // 0xFFFFFFFE for Control Rate - if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFE){ - if(prMcrWrInfo->u4McrData < FIXED_RATE_NUM && prMcrWrInfo->u4McrData > 0){ - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prMcrWrInfo->u4McrData); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - DEBUGFUNC("[Stress Test]Complete Rate is Changed...\n"); - DBGLOG(INIT, TRACE, ("[Stress Test] Rate is Changed to index %d...\n", prAdapter->rWifiVar.eRateSetting)); - } - - // 0xFFFFFFFD for Switch Channel - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFD){ - if(prMcrWrInfo->u4McrData <= 11 && prMcrWrInfo->u4McrData >= 1){ - prBssInfo->ucPrimaryChannel = prMcrWrInfo->u4McrData; - } - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - DBGLOG(INIT, TRACE, ("[Stress Test] Channel is switched to %d ...\n", prBssInfo->ucPrimaryChannel)); - - return WLAN_STATUS_SUCCESS; - } - - // 0xFFFFFFFFC for Control RF Band and SCO - else if(prMcrWrInfo->u4McrOffset == 0xFFFFFFFC){ - // Band - if(prMcrWrInfo->u4McrData & 0x80000000){ - //prBssInfo->eBand = BAND_5G; - //prBssInfo->ucPrimaryChannel = 52; // Bond to Channel 52 - } else { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 8; // Bond to Channel 6 - } - - // Bandwidth - if(prMcrWrInfo->u4McrData & 0x00010000){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - - if(prMcrWrInfo->u4McrData == 0x00010002){ - prBssInfo->eBssSCO = CHNL_EXT_SCB; // U20 - prBssInfo->ucPrimaryChannel += 2; - } else if (prMcrWrInfo->u4McrData == 0x00010001){ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // L20 - prBssInfo->ucPrimaryChannel -= 2; - } else { - prBssInfo->eBssSCO = CHNL_EXT_SCA; // 40 - } - } - - if(prMcrWrInfo->u4McrData & 0x00000000){ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - } - - // 0xFFFFFFFB for HT Capability - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFB){ - /* Enable HT Capability */ - if(prMcrWrInfo->u4McrData & 0x00000001){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - DEBUGFUNC("[Stress Test]Enable HT capability...\n"); - }else{ - prStaRec->u2HtCapInfo &= (~HT_CAP_INFO_HT_GF); - DEBUGFUNC("[Stress Test]Disable HT capability...\n"); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - - // 0xFFFFFFFA for Enable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFA){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF9 for Disable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF9){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF8 for Enable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF8){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF7 for Disable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF7){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - else -#endif - // -- Puff Stress Test End - - - /* Check if access F/W Domain MCR */ - if (prMcrWrInfo->u4McrOffset & 0xFFFF0000){ - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrWrInfo->u4McrOffset >> 16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) (prMcrWrInfo->u4McrOffset & BITS(0,15)), - &prMcrWrInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } -#endif - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - -#endif - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - HAL_MCR_WR(prAdapter, - (prMcrWrInfo->u4McrOffset & BITS(2,31)), //address is in DWORD unit - prMcrWrInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Write: Offset = %#08lx, Data = %#08lx\n", - prMcrWrInfo->u4McrOffset, prMcrWrInfo->u4McrData)); - - return WLAN_STATUS_SUCCESS; - } -} /* wlanoidSetMcrWrite */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query SW CTRL -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - - DEBUGFUNC("wlanoidQuerySwCtrlRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvQueryBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = 0; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_READ/* Read */, - (UINT_16) u2SubId , - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0xFFFF: - { - u4Data = 0x5AA56620; - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = 0; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - FALSE, - TRUE, - TRUE, - nicCmdEventQuerySwCtrlRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvQueryBuffer, - u4QueryBufferLen - ); - } - } /* switch(u2Id)*/ - - prSwCtrlInfo->u4Data = u4Data; - - return rWlanStatus; - -} - /* end of wlanoidQuerySwCtrlRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write SW CTRL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - DEBUGFUNC("wlanoidSetSwCtrlWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvSetBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) u2SubId, - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0x1000: - if (u2SubId == 0x8000) { - // CTIA power save mode setting (code: 0x10008000) - prAdapter->u4CtiaPowerMode = u4Data; - prAdapter->fgEnCtiaPowerMode = TRUE; - - // - { - PARAM_POWER_MODE ePowerMode; - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else { - ePowerMode = Param_PowerModeFast_PSP; - } - - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - } - break; - case 0x1001: - if(u2SubId == 0x0) { - prAdapter->fgEnOnlineScan = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x1) { - prAdapter->fgDisBcnLostDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x2) { - prAdapter->rWifiVar.fgSupportUAPSD = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x3) { - prAdapter->u4UapsdAcBmp = u4Data & BITS(0,15); - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpTriggerAC = (UINT_8)prAdapter->u4UapsdAcBmp; - } - else if(u2SubId == 0x4) { - prAdapter->fgDisStaAgingTimeoutDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x5) { - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = (UINT_8)u4Data; - } - else if(u2SubId == 0x0100) { - prAdapter->rWifiVar.u8SupportRxGf = (UINT_8)u4Data; - } - else if(u2SubId == 0x0101) { - prAdapter->rWifiVar.u8SupportRxSgi20 = (UINT_8)u4Data; - prAdapter->rWifiVar.u8SupportRxSgi40 = (UINT_8)u4Data; - } - - - break; - -#if CFG_SUPPORT_SWCR - case 0x1002: - if(u2SubId == 0x0) { - if (u4Data) { - u4Data = BIT(HIF_RX_PKT_TYPE_MANAGEMENT); - } - swCrFrameCheckEnable(prAdapter, u4Data); - } - else if(u2SubId == 0x1) { - BOOLEAN fgIsEnable; - UINT_8 ucType; - UINT_32 u4Timeout; - - fgIsEnable = (BOOLEAN)(u4Data & 0xff); - ucType = 0;//((u4Data>>4) & 0xf); - u4Timeout = ((u4Data>>8) & 0xff); - swCrDebugCheckEnable(prAdapter, fgIsEnable, ucType, u4Timeout); - } - break; -#endif - -#if CFG_SUPPORT_802_11W - case 0x2000: - DBGLOG(RSN, INFO, ("802.11w test 0x%x\n", u2SubId)); - if (u2SubId == 0x0) { - rsnStartSaQuery(prAdapter); - } - if (u2SubId == 0x1) { - rsnStopSaQuery(prAdapter); - } - if (u2SubId == 0x2) { - rsnSaQueryRequest(prAdapter, NULL); - } - if (u2SubId == 0x3) { - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - authSendDeauthFrame(prAdapter, prBssInfo->prStaRecOfAP , NULL, 7, NULL); - } - /* wext_set_mode */ - /* - if (u2SubId == 0x3) { - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_DISABLED; - } - if (u2SubId == 0x4) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_OPTIONAL; - } - if (u2SubId == 0x5) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_REQUIRED; - } - */ - break; -#endif - case 0xFFFF: - { - CMD_ACCESS_REG rCmdAccessReg; -#if 1 //CFG_MT6573_SMT_TEST - if (u2SubId == 0x0123) { - - DBGLOG(HAL, INFO, ("set smt fixed rate: %d \n", u4Data)); - - if((ENUM_REGISTRY_FIXED_RATE_T)(u4Data) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(u4Data); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* abort to re-connect */ -#if 1 - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); -#else - aisBssBeaconTimeout(prAdapter); -#endif - - return WLAN_STATUS_SUCCESS; - - } - else if (u2SubId == 0x1234) { - // 1. Disable On-Lin Scan - prAdapter->fgEnOnlineScan = FALSE; - - // 3. Disable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x904; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - 0 - ); - - // 4. Disable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - // Disalbe auto tx power - // - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - - - // 2. Keep at CAM mode - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 0; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeCAM; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - - // 5. Disable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = TRUE; - } - else if (u2SubId == 0x1235) { - - // 1. Enaable On-Lin Scan - prAdapter->fgEnOnlineScan = TRUE; - - // 3. Enable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x905; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - 0 - ); - - // 4. Enable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - // Enable auto tx power - // - - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - - // 2. Keep at Fast PS - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 2; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeFast_PSP; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - - // 5. Enable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = FALSE; - } -#endif - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - } - } /* switch(u2Id) */ - - return rWlanStatus; -} - /* wlanoidSetSwCtrlWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query EEPROM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidQueryEepromRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvQueryBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryEepromRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryEepromRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write EEPROM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidSetEepromWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - rCmdAccessEeprom.u2Data = prEepromRwInfo->u2EepromData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetEepromWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully transmitted -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully received -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* fails to transmit. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitError */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after exactly one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOneCollision"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOneCollision, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOneCollision */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after more than one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMoreCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMoreCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMoreCollisions */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames -* not transmitted due to excessive collisions. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMaxCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMaxCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMaxCollisions */ - - -#define MTK_CUSTOM_OID_INTERFACE_VERSION 0x00006620 // for WPDWifi DLL -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current the OID interface version, -* which is the interface between the application and driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen) -{ - DEBUGFUNC("wlanoidQueryOidInterfaceVersion"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *(PUINT_32) pvQueryBuffer = MTK_CUSTOM_OID_INTERFACE_VERSION ; - *pu4QueryInfoLen = sizeof(UINT_32); - - DBGLOG(REQ, WARN, ("Custom OID interface version: %#08lX\n", - *(PUINT_32) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryOidInterfaceVersion */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#ifndef LINUX - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcastAddr, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); -#else - return WLAN_STATUS_SUCCESS; -#endif -} /* end of wlanoidQueryMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ - WLAN_STATUS - wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) - { - UINT_8 ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Caller should provide this information */ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = ucNetTypeIndex; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); -} /* end of wlanoidSetMulticastList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4NewPacketFilter; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidSetCurrentPacketFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - ASSERT(pvSetBuffer); - - /* Set the new packet filter. */ - u4NewPacketFilter = *(PUINT_32) pvSetBuffer; - - DBGLOG(REQ, INFO, ("New packet filter: %#08lx\n", u4NewPacketFilter)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set current packet filter! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - do { - /* Verify the bits of the new packet filter. If any bits are set that - we don't support, leave. */ - if (u4NewPacketFilter & ~(PARAM_PACKET_FILTER_SUPPORTED)) { - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - } - -#if DBG - /* Need to enable or disable promiscuous support depending on the new - filter. */ - if (u4NewPacketFilter & PARAM_PACKET_FILTER_PROMISCUOUS) { - DBGLOG(REQ, INFO, ("Enable promiscuous mode\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable promiscuous mode\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_ALL_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable all-multicast mode\n")); - } - else if (u4NewPacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable multicast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable multicast\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_BROADCAST) { - DBGLOG(REQ, INFO, ("Enable Broadcast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable Broadcast\n")); - } -#endif - } while (FALSE); - - if(rStatus == WLAN_STATUS_SUCCESS) { - // Store the packet filter - - prAdapter->u4OsPacketFilter &= PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - return rStatus; - } -} /* wlanoidSetCurrentPacketFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current packet filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryCurrentPacketFilter"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen >= sizeof(UINT_32)) { - ASSERT(pvQueryBuffer); - *(PUINT_32) pvQueryBuffer = prAdapter->u4OsPacketFilter; - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryCurrentPacketFilter */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query ACPI device power state. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PPARAM_DEVICE_POWER_STATE prPowerState; -#endif - - DEBUGFUNC("wlanoidQueryAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - -#if DBG - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvQueryBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Query Power State: D0\n")); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Query Power State: D1\n")); - break; - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Query Power State: D2\n")); - break; - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Query Power State: D3\n")); - break; - default: - break; - } -#endif - - /* Since we will disconnect the newwork, therefore we do not - need to check queue empty */ - *(PPARAM_DEVICE_POWER_STATE) pvQueryBuffer = ParamDeviceStateD3; - //WARNLOG(("Ready to transition to D3\n")); - return WLAN_STATUS_SUCCESS; - -} /* pwrmgtQueryPower */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set ACPI device power state. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PPARAM_DEVICE_POWER_STATE prPowerState; - BOOLEAN fgRetValue = TRUE; - - DEBUGFUNC("wlanoidSetAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - - ASSERT(pvSetBuffer); - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvSetBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Set Power State: D0\n")); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD0); - fgRetValue = nicpmSetAcpiPowerD0(prAdapter); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Set Power State: D1\n")); - /* no break here */ - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Set Power State: D2\n")); - /* no break here */ - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Set Power State: D3\n")); - fgRetValue = nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - break; - default: - break; - } - - if(fgRetValue == TRUE) - return WLAN_STATUS_SUCCESS; - else - return WLAN_STATUS_FAILURE; -} /* end of wlanoidSetAcpiDevicePowerState() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current fragmentation threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFragThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidQueryFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new fragmentation threshold to the -* driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidSetFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RTS threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRtsThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - - if (u4QueryBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - *pu4QueryInfoLen = sizeof(PARAM_RTS_THRESHOLD); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *((PARAM_RTS_THRESHOLD *)pvQueryBuffer) = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryRtsThreshold */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new RTS threshold to the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RTS_THRESHOLD *prRtsThreshold; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_RTS_THRESHOLD); - if (u4SetBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRtsThreshold = (PARAM_RTS_THRESHOLD *)pvSetBuffer; - *prRtsThreshold = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetRtsThreshold */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to turn radio off. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - - DEBUGFUNC("wlanoidSetDisassociate"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set disassociate! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* prepare message to AIS */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - /* indicate for disconnection */ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetDisassociate */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQuery802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - -// *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile); - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_AIS_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - - // hack for CTIA power mode setting function - if (prAdapter->fgEnCtiaPowerMode) { - // set to non-zero value (to prevent MMI query 0, before it intends to set 0, which will skip its following state machine) - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)2; - } - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSet802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - //WARNLOG(("Invalid power mode %d\n", - //*(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - - switch (ePowerMode) { - case Param_PowerModeCAM: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to CAM (%d)\n", ePowerMode)); - break; - case Param_PowerModeMAX_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to MAX PS (%d)\n", ePowerMode)); - break; - case Param_PowerModeFast_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to FAST PS (%d)\n", ePowerMode)); - break; - default: - DBGLOG(INIT, INFO, ("invalid Wi-Fi PS mode setting (%d)\n", ePowerMode)); - break; - } - - return status; - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current status of AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query RF frequency. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].ucPrimaryChannel); - } - else { - *(PUINT_32)pvQueryBuffer = 0; - } - } - else { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum); - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set RF frequency by User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4FreqInKHz; - - DEBUGFUNC("wlanoidSetFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4FreqInKHz = (PUINT_32)pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum - = (UINT_8)nicFreq2ChannelNum(*pu4FreqInKHz); - prAdapter->rWifiVar.rConnSettings.eAdHocBand - = *pu4FreqInKHz < 5000000 ? BAND_2G4 : BAND_5G; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set 802.11 channel of the radio frequency. -* This is a proprietary function call to Lunux currently. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the Beacon Interval from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryBeaconInterval"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - else { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the Beacon Interval to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4BeaconInterval; - - DEBUGFUNC("wlanoidSetBeaconInterval"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4BeaconInterval = (PUINT_32)pvSetBuffer; - - if ((*pu4BeaconInterval < DOT11_BEACON_PERIOD_MIN) || - (*pu4BeaconInterval > DOT11_BEACON_PERIOD_MAX)) { - DBGLOG(REQ, TRACE, ("Invalid Beacon Interval = %ld\n", *pu4BeaconInterval)); - return WLAN_STATUS_INVALID_DATA; - } - - prAdapter->rWlanInfo.u2BeaconPeriod = (UINT_16)*pu4BeaconInterval; - - DBGLOG(REQ, INFO, ("Set beacon interval: %d\n", - prAdapter->rWlanInfo.u2BeaconPeriod)); - - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the ATIM window from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2AtimWindow; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryAtimWindow() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the ATIM window to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4AtimWindow; - - DEBUGFUNC("wlanoidSetAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4AtimWindow = (PUINT_32)pvSetBuffer; - - prAdapter->rWlanInfo.u2AtimWindow = (UINT_16)*pu4AtimWindow; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAtimWindow() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the MAC address which is currently used by the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetCurrentAddr() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the checksum offload function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, u4CSUMFlags; - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidSetCSUMOffload"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4CSUMFlags = *(PUINT_32)pvSetBuffer; - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - for(i = 0 ; i < 6 ; i++) { // set to broadcast address for not-specified - rCmdBasicConfig.rMyMacAddr[i] = 0xff; - } - - rCmdBasicConfig.ucNative80211 = 0; //@FIXME: for Vista - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(1); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(0); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(1); - - if(u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(0); - - prAdapter->u4CSUMFlags = u4CSUMFlags; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetNetworkAddress"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - DBGLOG(REQ, INFO, ("u4IpAddressCount (%d)\n", u4IpAddressCount)); - - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - DBGLOG(REQ, INFO, ("prNetAddrIp->in_addr:%d:%d:%d:%d\n", pucBuf[0], pucBuf[1],pucBuf[2],pucBuf[3])); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set, -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == FALSE) { - // switch to RF Test mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 1; // RF test mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventEnterRfTest, - nicOidCmdEnterRFTestTimeout, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in test mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into normal operation mode from RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == TRUE) { - // switch to normal mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 0; // normal mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventLeaveRfTest, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in normal mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief query for RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestQueryAutoTest"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4QueryBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. QueryBufferLen: %ld.\n", - u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvQueryBuffer; - rStatus = rftestQueryATInfo(prAdapter, - prRfATInfo->u4FuncIndex, - prRfATInfo->u4FuncData, - pvQueryBuffer, - u4QueryBufferLen); - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestSetAutoTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4SetBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. SetBufferLen: %ld.\n", - u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvSetBuffer; - rStatus = rftestSetATInfo(prAdapter, prRfATInfo->u4FuncIndex, prRfATInfo->u4FuncData); - - return rStatus; -} - -/* RF test OID set handler */ -WLAN_STATUS -rftestSetATInfo ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 1; // Set ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; -} - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - P_EVENT_TEST_STATUS prTestStatus; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - if(u4FuncIndex == RF_AT_FUNCID_FW_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = - (prAdapter->rVerInfo.u2FwProductID << 16) | (prAdapter->rVerInfo.u2FwOwnVersion); - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else if(u4FuncIndex == RF_AT_FUNCID_DRV_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = CFG_DRV_OWN_VERSION; - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else { - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryRfTestATInfo; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = pvQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4QueryBufferLen; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 2; // Get ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; - } -} - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ) -{ - CMD_TEST_CTRL_T rCmdTestCtrl; - - ASSERT(prAdapter); - - rCmdTestCtrl.ucAction = 5; // Set Channel Frequency - rCmdTestCtrl.u.u4ChannelFreq = u4FreqInKHz; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - DEBUGFUNC("wlanSendSetQueryCmd"); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI ui to set wapi mode, which is needed to info the the driver -* to operation at WAPI mode while driver initialize. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetWapiMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - /* Todo:: For support WAPI and Wi-Fi at same driver, use the set wapi assoc ie at the check point */ - /* The Adapter Connection setting fgUseWapi will cleat whil oid set mode (infra), */ - /* And set fgUseWapi True while set wapi assoc ie */ - /* policay selection, add key all depend on this flag, */ - /* The fgUseWapi may remove later */ - if (*(PUINT_32)pvSetBuffer) { - prAdapter->fgUseWapi = TRUE; - } - else { - prAdapter->fgUseWapi = FALSE; - } - -#if 0 - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + 4)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + 4; - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_WAPI_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - cp = (PUINT_8)(prWifiCmd->aucBuffer); - - kalMemCopy(cp, (PUINT_8)pvSetBuffer, 4); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -#else - return WLAN_STATUS_SUCCESS; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI to set the assoc info, which is needed to add to -* Association request frame while join WAPI AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_WAPI_INFO_ELEM_T prWapiInfo; - PUINT_8 cp; - UINT_16 u2AuthSuiteCount = 0; - UINT_16 u2PairSuiteCount = 0; - UINT_32 u4AuthKeyMgtSuite = 0; - UINT_32 u4PairSuite = 0; - UINT_32 u4GroupSuite = 0; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWapiAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if (u4SetBufferLen < 20 /* From EID to Group cipher */) { - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = TRUE; - - //if (prWapiInfo->ucElemId != ELEM_ID_WAPI) - // DBGLOG(SEC, TRACE, ("Not WAPI IE ?!\n")); - - //if (prWapiInfo->ucLength < 18) - // return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - prWapiInfo = (P_WAPI_INFO_ELEM_T)pvSetBuffer; - - if (prWapiInfo->ucElemId != ELEM_ID_WAPI) { - DBGLOG(SEC, TRACE, ("Not WAPI IE ?! u4SetBufferLen = %d\n", u4SetBufferLen)); - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prWapiInfo->ucLength < 18) - return WLAN_STATUS_INVALID_LENGTH; - - /* Skip Version check */ - cp = (PUINT_8)&prWapiInfo->u2AuthKeyMgtSuiteCount; - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - - if (u2AuthSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4AuthKeyMgtSuite); - - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info auth mgt suite [%d]: %02x-%02x-%02x-%02x\n", - u2AuthSuiteCount, - (UCHAR) (u4AuthKeyMgtSuite & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 8) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 16) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 24) & 0x000000FF))); - - if (u4AuthKeyMgtSuite != WAPI_AKM_SUITE_802_1X && - u4AuthKeyMgtSuite != WAPI_AKM_SUITE_PSK) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - if (u2PairSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4PairSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info pairwise cipher suite [%d]: %02x-%02x-%02x-%02x\n", - u2PairSuiteCount, - (UCHAR) (u4PairSuite & 0x000000FF), - (UCHAR) ((u4PairSuite >> 8) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 16) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 24) & 0x000000FF))); - - if (u4PairSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info group cipher suite : %02x-%02x-%02x-%02x\n", - (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (u4GroupSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite = u4AuthKeyMgtSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher = u4PairSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher = u4GroupSuite; - - kalMemCopy(prAdapter->prGlueInfo->aucWapiAssocInfoIEs, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the wpi key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer P_PARAM_WPI_KEY, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_WPI_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - PUINT_8 pc; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetWapiKey"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\r\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_WPI_KEY_T) pvSetBuffer; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)pvSetBuffer, 560); - pc = (PUINT_8)pvSetBuffer; - - *pu4SetInfoLen = u4SetBufferLen; - - /* Exception check */ - if (prNewKey->ucKeyID != 0x1 || - prNewKey->ucKeyID != 0x0) { - prNewKey->ucKeyID = prNewKey->ucKeyID & BIT(0); - //DBGLOG(SEC, INFO, ("Invalid WAPI key ID (%d)\r\n", prNewKey->ucKeyID)); - } - - /* Dump P_PARAM_WPI_KEY_T content. */ - DBGLOG(REQ, TRACE, ("Set: Dump P_PARAM_WPI_KEY_T content\r\n")); - DBGLOG(REQ, TRACE, ("TYPE : %d\r\n", prNewKey->eKeyType)); - DBGLOG(REQ, TRACE, ("Direction : %d\r\n", prNewKey->eDirection)); - DBGLOG(REQ, TRACE, ("KeyID : %d\r\n", prNewKey->ucKeyID)); - DBGLOG(REQ, TRACE, ("AddressIndex:\r\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucAddrIndex, 12); - prNewKey->u4LenWPIEK = 16; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPIEK, (UINT_8)prNewKey->u4LenWPIEK); - prNewKey->u4LenWPICK = 16; - - DBGLOG(REQ, TRACE, ("CK Key(%d):\r\n", (UINT_8)prNewKey->u4LenWPICK)); - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPICK, (UINT_8)prNewKey->u4LenWPICK); - DBGLOG(REQ, TRACE, ("PN:\r\n")); - if (prNewKey->eKeyType == 0){ - prNewKey->aucPN[0] = 0x5c; - prNewKey->aucPN[1] = 0x36; - prNewKey->aucPN[2] = 0x5c; - prNewKey->aucPN[3] = 0x36; - prNewKey->aucPN[4] = 0x5c; - prNewKey->aucPN[5] = 0x36; - prNewKey->aucPN[6] = 0x5c; - prNewKey->aucPN[7] = 0x36; - prNewKey->aucPN[8] = 0x5c; - prNewKey->aucPN[9] = 0x36; - prNewKey->aucPN[10] = 0x5c; - prNewKey->aucPN[11] = 0x36; - prNewKey->aucPN[12] = 0x5c; - prNewKey->aucPN[13] = 0x36; - prNewKey->aucPN[14] = 0x5c; - prNewKey->aucPN[15] = 0x36; - } - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucPN, 16); - - prGlueInfo = prAdapter->prGlueInfo; - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetBufferLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_ID_ADD_REMOVE_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - if (prNewKey->eKeyType == ENUM_WPI_PAIRWISE_KEY) { - prCmdKey->ucTxKey = 1; - prCmdKey->ucKeyType = 1; - } - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->aucAddrIndex, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = prNewKey->ucKeyID; - - prCmdKey->ucKeyLen = 32; - - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WPI; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucWPIEK, 16); - - kalMemCopy(prCmdKey->aucKeyMaterial+16, (PUINT_8)prNewKey->aucWPICK, 16); - - kalMemCopy(prCmdKey->aucKeyRsc, (PUINT_8)prNewKey->aucPN, 16); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ -#endif - - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WSC to set the assoc info, which is needed to add to -* Association request frame while join WPS AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWSCAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if(u4SetBufferLen == 0) - return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - kalMemCopy(prAdapter->prGlueInfo->aucWSCAssocInfoIE, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} -#endif - - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidQueryEnableWakeup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - pu4WakeupEventEnable = (PUINT_32)pvQueryBuffer; - - *pu4WakeupEventEnable = prAdapter->u4WakeupEventEnable; - - return WLAN_STATUS_SUCCESS; -} - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidSetEnableWakup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - pu4WakeupEventEnable = (PUINT_32)pvSetBuffer; - prAdapter->u4WakeupEventEnable = *pu4WakeupEventEnable; - - /* FIXME: - * Send Command Event for setting wakeup-pattern / Magic Packet to firmware - * */ - - return WLAN_STATUS_FAILURE; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure PS related settings for WMM-PS test. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T prWmmPsTestInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_SET_WMM_PS_TEST_STRUC_T rSetWmmPsTestParam; - UINT_16 u2CmdBufLen; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("wlanoidSetWiFiWmmPsTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T); - - prWmmPsTestInfo = (P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T) pvSetBuffer; - - rSetWmmPsTestParam.ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - rSetWmmPsTestParam.bmfgApsdEnAc = prWmmPsTestInfo->bmfgApsdEnAc; - rSetWmmPsTestParam.ucIsEnterPsAtOnce = prWmmPsTestInfo->ucIsEnterPsAtOnce; - rSetWmmPsTestParam.ucIsDisableUcTrigger = prWmmPsTestInfo->ucIsDisableUcTrigger; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[rSetWmmPsTestParam.ucNetTypeIndex]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - prPmProfSetupInfo->ucBmpDeliveryAC = (rSetWmmPsTestParam.bmfgApsdEnAc >> 4) & BITS(0, 3); - prPmProfSetupInfo->ucBmpTriggerAC = rSetWmmPsTestParam.bmfgApsdEnAc & BITS(0, 3); - - u2CmdBufLen = sizeof(CMD_SET_WMM_PS_TEST_STRUC_T); - -#if 0 - /* it will apply the disable trig or not immediately */ - if (prPmInfo->ucWmmPsDisableUcPoll && prPmInfo->ucWmmPsConnWithTrig) { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, TRUE); - } - else { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, FALSE); - } -#endif - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_WMM_PS_TEST_PARMS, - TRUE, - FALSE, - TRUE, - NULL, // TODO? - NULL, - u2CmdBufLen, - (PUINT_8)&rSetWmmPsTestParam, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetWiFiWmmPsTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure enable/disable TX A-MPDU feature. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_TX_AMPDU_T rTxAmpdu; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetTxAmpdu"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rTxAmpdu.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_TX_AMPDU_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TX_AMPDU, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rTxAmpdu, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetTxAmpdu */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure reject/accept ADDBA Request. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_ADDBA_REJECT_T rAddbaReject; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetAddbaReject"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rAddbaReject.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_ADDBA_REJECT_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_ADDBA_REJECT, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rAddbaReject, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetAddbaReject */ - - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - - DEBUGFUNC("wlanoidQuerySLTStatus"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)pvQueryBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_LP_SET: - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - prLpSetting->u4BcnRcvNum = prSltInfo->u4BeaconReceiveCnt; - } - break; - default: - // TBD... - break; - } - - return rWlanStatus; -} /* wlanoidQuerySLTStatus */ - -WLAN_STATUS -wlanoidUpdateSLTMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - /* 1. Action: Update or Initial Set - * 2. Role. - * 3. Target MAC address. - * 4. RF BW & Rate Settings - */ - - DEBUGFUNC("wlanoidUpdateSLTMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T) pvSetBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_INITIAL: /* Initialize */ - { - P_PARAM_MTK_SLT_INITIAL_STRUC_T prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_INITIAL_STRUC_T)); - - prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoStaRec != NULL) { - /* The driver has been initialized. */ - prSltInfo->prPseudoStaRec = NULL; - } - - - prSltInfo->prPseudoBssDesc = scanSearchExistingBssDesc(prAdapter, - BSS_TYPE_IBSS, - prMtkSltInit->aucTargetMacAddr, - prMtkSltInit->aucTargetMacAddr); - - prSltInfo->u2SiteID = prMtkSltInit->u2SiteID; - - /* Bandwidth 2.4G: Channel 1~14 - * Bandwidth 5G: *36, 40, 44, 48, 52, 56, 60, 64, - * *100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, - * 149, 153, *157, 161, - * 184, 188, 192, 196, 200, 204, 208, 212, *216 - */ - prSltInfo->ucChannel2G4 = 1 + (prSltInfo->u2SiteID % 4) * 5; - - switch (prSltInfo->ucChannel2G4) { - case 1: - prSltInfo->ucChannel5G = 36; - break; - case 6: - prSltInfo->ucChannel5G = 52; - break; - case 11: - prSltInfo->ucChannel5G = 104; - break; - case 16: - prSltInfo->ucChannel2G4 = 14; - prSltInfo->ucChannel5G = 161; - break; - default: - ASSERT(FALSE); - } - - if (prSltInfo->prPseudoBssDesc == NULL) { - do { - prSltInfo->prPseudoBssDesc = scanAllocateBssDesc(prAdapter); - - if (prSltInfo->prPseudoBssDesc == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - } while (FALSE); - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - if (prBssDesc) { - prBssDesc->eBSSType = BSS_TYPE_IBSS; - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prMtkSltInit->aucTargetMacAddr); - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - - prBssDesc->u2BeaconInterval = 100; - prBssDesc->u2ATIMWindow = 0; - prBssDesc->ucDTIMPeriod = 1; - - prBssDesc->u2IELength = 0; - - prBssDesc->fgIsERPPresent = TRUE; - prBssDesc->fgIsHTPresent = TRUE; - - prBssDesc->u2OperationalRateSet = BIT(RATE_36M_INDEX); - prBssDesc->u2BSSBasicRateSet = BIT(RATE_36M_INDEX); - prBssDesc->fgIsUnknownBssBasicRate = FALSE; - - prBssDesc->fgIsLargerTSF = TRUE; - - prBssDesc->eBand = BAND_2G4; - - prBssDesc->ucChannelNum = prSltInfo->ucChannel2G4; - - prBssDesc->ucPhyTypeSet = PHY_TYPE_SET_802_11ABGN; - - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - } - } - break; - case ENUM_MTK_SLT_FUNC_RATE_SET: /* Update RF Settings. */ - if (prSltInfo->prPseudoStaRec == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - } - else { - P_PARAM_MTK_SLT_TR_TEST_STRUC_T prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_TR_TEST_STRUC_T)); - - prStaRec = prSltInfo->prPseudoStaRec; - prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->eBand = BAND_5G; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel5G; - } - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM24) { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel2G4; - } - - if ((prTRSetting->u4FixedRate & FIXED_BW_DL40) != 0) { - /* RF 40 */ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; /* It would controls RFBW capability in WTBL. */ - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; /* This controls RF BW, RF BW would be 40 only if - * 1. PHY_TYPE_BIT_HT is TRUE. - * 2. SCO is SCA/SCB. - */ - - /* U20/L20 Control. */ - switch (prTRSetting->u4FixedRate & 0xC000) { - case FIXED_EXT_CHNL_U20: - prBssInfo->eBssSCO = CHNL_EXT_SCB; // +2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel += 2; - } - else { - if (prBssInfo->ucPrimaryChannel <5) { - prBssInfo->ucPrimaryChannel = 8; // For channel 1, testing L20 at channel 8. - } - } - break; - case FIXED_EXT_CHNL_L20: - default: /* 40M */ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // -2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel -= 2; - } - else { - if (prBssInfo->ucPrimaryChannel > 10) { - prBssInfo->ucPrimaryChannel = 3; // For channel 11 / 14. testing U20 at channel 3. - } - } - break; - } - } - else { - /* RF 20 */ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - - prStaRec->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - - switch (prTRSetting->u4FixedRate & 0xFF) { - case RATE_OFDM_54M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_54M_INDEX); - break; - case RATE_OFDM_48M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_48M_INDEX); - break; - case RATE_OFDM_36M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - case RATE_OFDM_24M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_24M_INDEX); - break; - case RATE_OFDM_6M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_6M_INDEX); - break; - case RATE_CCK_11M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_11M_INDEX); - break; - case RATE_CCK_1M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_1M_INDEX); - break; - case RATE_GF_MCS_0: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - case RATE_MM_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_HT_GF; -#if 0 // Only for Current Measurement Mode. - prStaRec->u2HtCapInfo |= (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); -#endif - break; - case RATE_GF_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - default: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - } - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - } - break; - case ENUM_MTK_SLT_FUNC_LP_SET: /* Reset LP Test Result. */ - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoBssDesc == NULL) { - /* Please initial SLT Mode first. */ - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - switch (prLpSetting->rLpTestMode) { - case ENUM_MTK_LP_TEST_NORMAL: - /* In normal mode, we would use target MAC address to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - prSltInfo->fgIsDUT = FALSE; - break; - case ENUM_MTK_LP_TEST_GOLDEN_SAMPLE: - /* 1. Lower AIFS of BCN queue. - * 2. Fixed Random Number tobe 0. - */ - prSltInfo->fgIsDUT = FALSE; - /* In LP test mode, we would use MAC address of Golden Sample to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - break; - case ENUM_MTK_LP_TEST_DUT: - /* 1. Enter Sleep Mode. - * 2. Fix random number a large value & enlarge AIFN of BCN queue. - */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssDesc->aucSrcAddr); - prSltInfo->u4BeaconReceiveCnt = 0; - prSltInfo->fgIsDUT = TRUE; - break; - } - - } - - break; - default: - break; - } - - - - - return WLAN_STATUS_FAILURE; - - - return rWlanStatus; -} /* wlanoidUpdateSLTMode */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query NVRAM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - UINT_16 u2Data; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryNvramRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvQueryBuffer; - - if(prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_READ) { - fgStatus = kalCfgDataRead16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - &u2Data); - - if(fgStatus) { - prNvramRwInfo->u2EepromData = u2Data; - DBGLOG(REQ, INFO, ("NVRAM Read: index=%#X, data=%#02X\r\n", - prNvramRwInfo->ucEepromIndex, u2Data)); - } - else{ - DBGLOG(REQ, ERROR, ("NVRAM Read Failed: index=%#x.\r\n", - prNvramRwInfo->ucEepromIndex)); - rStatus = WLAN_STATUS_FAILURE; - } - } - else if (prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_GETSIZE) { - prNvramRwInfo->u2EepromData = CFG_FILE_WIFI_REC_SIZE; - DBGLOG(REQ, INFO, ("EEPROM size =%d\r\n", prNvramRwInfo->u2EepromData)); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - return rStatus; -} /* wlanoidQueryNvramRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write NVRAM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - DEBUGFUNC("wlanoidSetNvramWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvSetBuffer; - - fgStatus = kalCfgDataWrite16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - prNvramRwInfo->u2EepromData - ); - - if(fgStatus == FALSE){ - DBGLOG(REQ, ERROR, ("NVRAM Write Failed.\r\n")); - rStatus = WLAN_STATUS_FAILURE; - } - - return rStatus; -} /* wlanoidSetNvramWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(ENUM_CFG_SRC_TYPE_T); - - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == TRUE) { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_NVRAM; - } - else { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_EEPROM; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(P_ENUM_EEPROM_TYPE_T); - -#if CFG_SUPPORT_NIC_CAPABILITY - if(prAdapter->fgIsEepromUsed == TRUE) { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_PRESENT; - } - else { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; - } -#else - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; -#endif - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_8 pucCountry; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(u4SetBufferLen == 2); - - *pu4SetInfoLen = 2; - - pucCountry = pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) pucCountry[0]) << 8) | ((UINT_16) pucCountry[1]) ; - - prAdapter->prDomainInfo = NULL; /* Force to re-search country code */ - rlmDomainSendCmd(prAdapter, TRUE); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set BT profile or BT information and the -* driver will set the built-in PTA configuration into chip. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - P_PTA_IPC_T prPtaIpc; - - DEBUGFUNC("wlanoidSetBT.\n"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PTA_IPC_T); - if (u4SetBufferLen != sizeof(PTA_IPC_T)) { - WARNLOG(("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT profile because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prPtaIpc = (P_PTA_IPC_T)pvSetBuffer; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: BWCS CMD = %02x%02x%02x%02x\n", - prPtaIpc->u.aucBTPParams[0], prPtaIpc->u.aucBTPParams[1], prPtaIpc->u.aucBTPParams[2], prPtaIpc->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3]); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BWCS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(PTA_IPC_T), - (PUINT_8)prPtaIpc, - NULL, - 0); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current BT profile and BTCR values -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -// P_PARAM_PTA_IPC_T prPtaIpc; -// UINT_32 u4QueryBuffLen; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PTA_IPC_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(PTA_IPC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); -// prPtaIpc = (P_PTA_IPC_T)pvQueryBuffer; -// prPtaIpc->ucCmd = BT_CMD_PROFILE; -// prPtaIpc->ucLen = sizeof(prPtaIpc->u); -// nicPtaGetProfile(prAdapter, (PUINT_8)&prPtaIpc->u, &u4QueryBuffLen); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4SingleAntenna; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4SingleAntenna = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgSingleAntenna) { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 1\r\n"); - *pu4SingleAntenna = 1; - } else { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 0\r\n"); - *pu4SingleAntenna = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - PUINT_32 pu4SingleAntenna; - UINT_32 u4SingleAntenna; - P_PTA_INFO_T prPtaInfo; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - prPtaInfo = &prAdapter->rPtaInfo; - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set antenna because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4SingleAntenna = (PUINT_32)pvSetBuffer; - u4SingleAntenna = *pu4SingleAntenna; - - if (u4SingleAntenna == 0) { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 0\r\n"); - prPtaInfo->fgSingleAntenna = FALSE; - } else { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 1\r\n"); - prPtaInfo->fgSingleAntenna = TRUE; - } - ptaFsmRunEventSetConfig(prAdapter, &prPtaInfo->rPtaParam); - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4Pta; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4Pta = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgEnabled) { - //printk(KERN_WARNING DRV_NAME"PTA = 1\r\n"); - *pu4Pta = 1; - } else { - //printk(KERN_WARNING DRV_NAME"PTA = 0\r\n"); - *pu4Pta = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4PtaCtrl; - UINT_32 u4PtaCtrl; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT setting because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4PtaCtrl = (PUINT_32)pvSetBuffer; - u4PtaCtrl = *pu4PtaCtrl; - - if (u4PtaCtrl == 0) { - //printk(KERN_WARNING DRV_NAME"Set Pta= 0\r\n"); - nicPtaSetFunc(prAdapter, FALSE); - } else { - //printk(KERN_WARNING DRV_NAME"Set Pta= 1\r\n"); - nicPtaSetFunc(prAdapter, TRUE); - } - - return WLAN_STATUS_SUCCESS; -} -#endif - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Tx power profile. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - //P_SET_TXPWR_CTRL_T pTxPwr = (P_SET_TXPWR_CTRL_T)pvSetBuffer; - //UINT_32 i; - WLAN_STATUS rStatus; - - DEBUGFUNC("wlanoidSetTxPower"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - -#if 0 - printk("c2GLegacyStaPwrOffset=%d\n", pTxPwr->c2GLegacyStaPwrOffset); - printk("c2GHotspotPwrOffset=%d\n", pTxPwr->c2GHotspotPwrOffset); - printk("c2GP2pPwrOffset=%d\n", pTxPwr->c2GP2pPwrOffset); - printk("c2GBowPwrOffset=%d\n", pTxPwr->c2GBowPwrOffset); - printk("c5GLegacyStaPwrOffset=%d\n", pTxPwr->c5GLegacyStaPwrOffset); - printk("c5GHotspotPwrOffset=%d\n", pTxPwr->c5GHotspotPwrOffset); - printk("c5GP2pPwrOffset=%d\n", pTxPwr->c5GP2pPwrOffset); - printk("c5GBowPwrOffset=%d\n", pTxPwr->c5GBowPwrOffset); - printk("ucConcurrencePolicy=%d\n", pTxPwr->ucConcurrencePolicy); - - for (i=0; i<14;i++) - printk("acTxPwrLimit2G[%d]=%d\n", i, pTxPwr->acTxPwrLimit2G[i]); - - for (i=0; i<4;i++) - printk("acTxPwrLimit5G[%d]=%d\n", i, pTxPwr->acTxPwrLimit5G[i]); -#endif - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_TXPWR_CTRL, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - TRUE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - u4SetBufferLen, /* u4SetQueryInfoLen */ - (PUINT_8) pvSetBuffer, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return rStatus; - -} - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_CMD_DUMP_MEM prCmdDumpMem; - CMD_DUMP_MEM rCmdDumpMem; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4MemSize = PARAM_MEM_DUMP_MAX_SIZE; - - UINT_32 u4RemainLeng = 0; - UINT_32 u4CurAddr = 0; - UINT_8 ucFragNum = 0; - - prCmdDumpMem = &rCmdDumpMem; - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - - u4RemainLeng = prMemDumpInfo->u4RemainLength; - u4CurAddr = prMemDumpInfo->u4Address + prMemDumpInfo->u4Length; - ucFragNum = prMemDumpInfo->ucFragNum + 1; - - /* Query. If request length is larger than max length, do it as ping pong. - * Send a command and wait for a event. Send next command while the event is received. - * - */ - do{ - UINT_32 u4CurLeng = 0; - - if(u4RemainLeng > u4MemSize) { - u4CurLeng = u4MemSize; - u4RemainLeng -= u4MemSize; - } else { - u4CurLeng = u4RemainLeng; - u4RemainLeng = 0; - } - - prCmdDumpMem->u4Address = u4CurAddr; - prCmdDumpMem->u4Length = u4CurLeng; - prCmdDumpMem->u4RemainLength = u4RemainLeng; - prCmdDumpMem->ucFragNum = ucFragNum; - - DBGLOG(REQ, TRACE, ("[%d] 0x%X, len %d, remain len %d\n", - ucFragNum, - prCmdDumpMem->u4Address, - prCmdDumpMem->u4Length, - prCmdDumpMem->u4RemainLength)); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_DUMP_MEM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMemDump, - nicOidCmdTimeoutCommon, - sizeof(CMD_DUMP_MEM), - (PUINT_8)prCmdDumpMem, - pvQueryBuffer, - u4QueryBufferLen - ); - - }while(FALSE); - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump memory. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - - DEBUGFUNC("wlanoidQueryMemDump"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - DBGLOG(REQ, TRACE, ("Dump 0x%X, len %d\n", prMemDumpInfo->u4Address, prMemDumpInfo->u4Length)); - - prMemDumpInfo->u4RemainLength = prMemDumpInfo->u4Length; - prMemDumpInfo->u4Length = 0; - prMemDumpInfo->ucFragNum = 0; - - return wlanSendMemDumpCmd( - prAdapter, - pvQueryBuffer, - u4QueryBufferLen); - -} /* end of wlanoidQueryMcrRead() */ - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the p2p mode. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - P_PARAM_CUSTOM_P2P_SET_STRUC_T prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T)NULL; - //P_MSG_P2P_NETDEV_REGISTER_T prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - DEBUGFUNC("wlanoidSetP2pMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T); - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T) pvSetBuffer; - - DBGLOG(P2P, INFO, ("Set P2P enable[%ld] mode[%ld]\n", prSetP2P->u4Enable, prSetP2P->u4Mode)); - - /* - * enable = 1, mode = 0 => init P2P network - * enable = 1, mode = 1 => init Soft AP network - * enable = 0 => uninit P2P/AP network - */ - - if (prSetP2P->u4Enable) { - p2pSetMode((prSetP2P->u4Mode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - - -#if 0 - prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_NETDEV_REGISTER_T))); - - if (prP2pNetdevRegMsg == NULL) { - ASSERT(FALSE); - status = WLAN_STATUS_RESOURCES; - return status; - } - - - prP2pNetdevRegMsg->rMsgHdr.eMsgId = MID_MNY_P2P_NET_DEV_REGISTER; - prP2pNetdevRegMsg->fgIsEnable = (prSetP2P->u4Enable == 1)?TRUE:FALSE; - prP2pNetdevRegMsg->ucMode = (UINT_8)prSetP2P->u4Mode; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pNetdevRegMsg, - MSG_SEND_METHOD_BUF); -#endif - - return status; - -} -#endif - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_p2p.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_p2p.c deleted file mode 100755 index b6f85a53caed..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/common/wlan_p2p.c +++ /dev/null @@ -1,1864 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/common/wlan_p2p.c#8 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the Wi-Fi Direct commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_p2p.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 23 2011 yuche.tsai - * NULL - * Fix Multicast Issue of P2P. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 wh.su - * [WCXRP00000571] [MT6620 Wi-Fi] [Driver] Not check the p2p role during set key - * Skip the p2p role for adding broadcast key issue. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * fixed compiling error while enable dbg. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix SD Request Query Length issue. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Service Discovery Request. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Wlan OID related function. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DEBUGFUNC("wlanoidSendSetQueryP2PCmd"); - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_P2P_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to Wi-Fi Direct driver -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_KEY_T prNewKey; - - DEBUGFUNC("wlanoidSetAddP2PKey"); - DBGLOG(REQ, INFO, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - /* Verify the key material length for key material buffer */ - else if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check */ - else if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - else if (!(prNewKey->u4KeyLength == CCMP_KEY_LEN) && !(prNewKey->u4KeyLength == TKIP_KEY_LEN)) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - // fill CMD_802_11_KEY - kalMemZero(&rCmdKey, sizeof(CMD_802_11_KEY)); - rCmdKey.ucAddRemove = 1; /* add */ - rCmdKey.ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - rCmdKey.ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prNewKey->arBSSID); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - if(prNewKey->u4KeyLength == CCMP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - else if(prNewKey->u4KeyLength == TKIP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_TKIP; // TKIP - rCmdKey.ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - rCmdKey.ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - kalMemCopy(rCmdKey.aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, rCmdKey.ucKeyLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request Wi-Fi Direct driver to remove keys -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_REMOVE_KEY_T prRemovedKey; - - DEBUGFUNC("wlanoidSetRemoveP2PKey"); - ASSERT(prAdapter); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* There should not be any key operation for P2P Device */ - if(kalP2PGetRole(prAdapter->prGlueInfo) == 0) { - // return WLAN_STATUS_NOT_ACCEPTED; - } - - kalMemZero((PUINT_8)&rCmdKey, sizeof(CMD_802_11_KEY)); - - rCmdKey.ucAddRemove = 0; // remove - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - kalMemCopy(rCmdKey.aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - rCmdKey.ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - - DEBUGFUNC("wlanoidSetP2pNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSetP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - WARNLOG(("Invalid power mode %d\n", - *(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_P2P_INDEX, - ePowerMode, - TRUE); - return status; -} /* end of wlanoidSetP2pPowerSaveProfile() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetP2pSetNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - printk("u4IpAddressCount (%ld) \n", (INT_32)u4IpAddressCount); - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - printk("prNetAddrIp->in_addr:%d:%d:%d:%d\n", (UINT_8)pucBuf[0], (UINT_8)pucBuf[1], (UINT_8)pucBuf[2], (UINT_8)pucBuf[3]); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} /* end of wlanoidSetP2pSetNetworkAddress() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - FALSE, // This CMD response is no need to complete the OID. Or the event would unsync. - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetP2PMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_REQUEST)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDRequest(prAdapter, (P_PARAM_P2P_SEND_SD_REQUEST)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidSendP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_RESPONSE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDResponse(prAdapter, (P_PARAM_P2P_SEND_SD_RESPONSE)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - PUINT_8 pucPacketBuffer = NULL, pucTA = NULL; -// PUINT_8 pucChannelNum = NULL; - PUINT_16 pu2PacketLength = NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - UINT_8 ucVersionNum = 0; -// UINT_8 ucChannelNum = 0, ucSeqNum = 0; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_REQUEST)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Request\n")); -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_REQUEST prP2pGetSdReq = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - - pucPacketBuffer = prP2pGetSdReq->aucPacketContent; - pu2PacketLength = &prP2pGetSdReq->u2PacketLength; - pucTA = &prP2pGetSdReq->rTransmitterAddr; - } - else { - P_PARAM_P2P_GET_SD_REQUEST_EX prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST_EX)NULL; - - prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketBuffer = prP2pGetSdReqEx->aucPacketContent; - pu2PacketLength = &prP2pGetSdReqEx->u2PacketLength; - pucTA = &prP2pGetSdReqEx->rTransmitterAddr; - pucChannelNum = &prP2pGetSdReqEx->ucChannelNum; - ucSeqNum = prP2pGetSdReqEx->ucSeqNum; - } - - - rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, - pucPacketBuffer, - (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_REQUEST)), - (PUINT_32)pu2PacketLength, - pucChannelNum, - ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketBuffer; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST) + (*pu2PacketLength)); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST_EX) + (*pu2PacketLength)); - } - - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - //UINT_8 ucSeqNum = 0, - UINT_8 ucVersionNum = 0; - PUINT_8 pucPacketContent = (PUINT_8)NULL, pucTA = (PUINT_8)NULL; - PUINT_16 pu2PacketLength = (PUINT_16)NULL; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_RESPONSE)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Response\n")); - -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_RESPONSE prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_RESPONSE)NULL; - - prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketContent = prP2pGetSdRsp->aucPacketContent; - pucTA = &prP2pGetSdRsp->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRsp->u2PacketLength; - } - else { - P_PARAM_P2P_GET_SD_RESPONSE_EX prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)NULL; - - prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)pvQueryBuffer; - pucPacketContent = prP2pGetSdRspEx->aucPacketContent; - pucTA = &prP2pGetSdRspEx->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRspEx->u2PacketLength; - ucSeqNum = prP2pGetSdRspEx->ucSeqNum; - } - - -// rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, -// pucPacketContent, -// (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_RESPONSE)), -// (PUINT_32)pu2PacketLength, -// NULL, -// ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketContent; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE) + *pu2PacketLength); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE_EX) + *pu2PacketLength); - } - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to terminate P2P Service Discovery Phase -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_P2P_TERMINATE_SD_PHASE prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)NULL; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - break; - } - - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - break; - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_TERMINATE_SD_PHASE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_TERMINATE_SD_PHASE); - rWlanStatus = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)pvSetBuffer; - - if (EQUAL_MAC_ADDR(prP2pTerminateSD->rPeerAddr, aucNullAddr)) { - DBGLOG(P2P, TRACE, ("Service Discovery Version 2.0\n")); -// p2pFuncSetVersionNumOfSD(prAdapter, 2); - } - - //rWlanStatus = p2pFsmRunEventSDAbort(prAdapter); - - } while (FALSE); - - - - - - return rWlanStatus; -} /* end of wlanoidSetP2PTerminateSDPhase() */ - - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SEC_CHECK, - FALSE, - TRUE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - u4SetBufferLen, - (PUINT_8)pvSetBuffer, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetSecCheckRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - //P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = prAdapter->prGlueInfo; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen > 256) { - u4QueryBufferLen = 256; - } - - *pu4QueryInfoLen = u4QueryBufferLen; - - #if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - #endif - kalMemCopy((PUINT_8)(pvQueryBuffer + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer)), prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - - return rWlanStatus; -} /* end of wlanoidGetSecCheckResponse() */ -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - #else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif -} - - - -WLAN_STATUS -wlanoidQueryP2pOpChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucOpChnl = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - -#if 0 - if (!p2pFuncGetCurrentOpChnl(prAdapter, pucOpChnl)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } -#else - rResult = WLAN_STATUS_INVALID_DATA; - break; -#endif - - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_SUCCESS; - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pOpChannel */ - -WLAN_STATUS -wlanoidQueryP2pVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucVersionNum = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pVersion */ - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; - UINT_8 ucVersionNum; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - *pu4SetInfoLen = sizeof(UINT_8); - - if (u4SetBufferLen < sizeof(UINT_8)) { - rResult = WLAN_STATUS_INVALID_LENGTH; - break; - } - - - ucVersionNum = *((PUINT_8)pvSetBuffer); - - - rResult = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rResult; -} /* wlanoidSetP2pSupplicantVersion */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the WPS mode. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pWPSmode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - UINT_32 u4IsWPSmode = 0; - DEBUGFUNC("wlanoidSetP2pWPSmode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if(pvSetBuffer) { - u4IsWPSmode = *(PUINT_32)pvSetBuffer; - } - else{ - u4IsWPSmode = 0; - } - - if(u4IsWPSmode){ - prAdapter->rWifiVar.prP2pFsmInfo->fgIsWPSMode = 1; - } - else{ - prAdapter->rWifiVar.prP2pFsmInfo->fgIsWPSMode = 0; - } - - status = nicUpdateBss( - prAdapter, - NETWORK_TYPE_P2P_INDEX); - - return status; -} /* end of wlanoidSetP2pWPSmode() */ - - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->fgIsP2pLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rP2pLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* wlanoidQueryP2pRssi */ -#endif - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/CFG_Wifi_File.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/CFG_Wifi_File.h deleted file mode 100755 index dd1fce8d7bf5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/CFG_Wifi_File.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/CFG_Wifi_File.h#1 $ -*/ - -/*! \file CFG_Wifi_File.h - \brief Collection of NVRAM structure used for YuSu project - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -/* -** $Log: CFG_Wifi_File.h $ - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * update NVRAM data structure definition. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * -*/ - -#ifndef _CFG_WIFI_FILE_H -#define _CFG_WIFI_FILE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -// duplicated from nic_cmd_event.h to avoid header dependency -typedef struct _TX_PWR_PARAM_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} TX_PWR_PARAM_T, *P_TX_PWR_PARAM_T; - -typedef struct _PWR_5G_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} PWR_5G_OFFSET_T, *P_PWR_5G_OFFSET_T; - -typedef struct _PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} PWR_PARAM_T, *P_PWR_PARAM_T; - -typedef struct _MT6620_CFG_PARAM_STRUCT { - /* 256 bytes of MP data */ - UINT_16 u2Part1OwnVersion; - UINT_16 u2Part1PeerVersion; - UINT_8 aucMacAddress[6]; - UINT_8 aucCountryCode[2]; - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - - UINT_8 ucRegChannelListMap; - UINT_8 ucRegChannelListIndex; - UINT_8 aucRegSubbandInfo[36]; - - UINT_8 aucReserved2[256-240]; - - /* 256 bytes of function data */ - UINT_16 u2Part2OwnVersion; - UINT_16 u2Part2PeerVersion; - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - UINT_8 aucPreTailReserved; - UINT_8 aucTailReserved[256-8]; -} MT6620_CFG_PARAM_STRUCT, *P_MT6620_CFG_PARAM_STRUCT, - WIFI_CFG_PARAM_STRUCT, *P_WIFI_CFG_PARAM_STRUCT; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -#define CFG_FILE_WIFI_REC_SIZE sizeof(WIFI_CFG_PARAM_STRUCT) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -nvramOffsetCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion) == 256); - - DATA_STRUC_INSPECTING_ASSERT( - sizeof(WIFI_CFG_PARAM_STRUCT) == 512); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) & 0x0001) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) & 0x0001) == 0); -} -#endif - -#endif /* _CFG_WIFI_FILE_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/config.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/config.h deleted file mode 100755 index 3af7c5297948..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/config.h +++ /dev/null @@ -1,1535 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/config.h#2 $ -*/ - -/*! \file "config.h" - \brief This file includes the various configurable parameters for customers - - This file ncludes the configurable parameters except the paramters indicate the turning-on/off of some features -*/ - - - -/* -** $Log: config.h $ - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 05 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined".. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 10 28 2011 cp.wu - * [MT6620 Wi-Fi][Win32 Driver] Enable 5GHz support as default - * enable 5GHz as default for DaVinci trunk and V2.1 driver release . - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * surpress compiler warning for MT6628 build - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * enable divided firmware downloading. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 08 09 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS definition for MT6620. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 24 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * increase RX buffer number to have a 2:1 ping-pong ratio - * - * 06 23 2011 eddie.chen - * [WCXRP00000810] [MT5931][DRV/FW] Adjust TxRx Buffer number and Rx buffer size - * 1. Different TX RX buffer - * 2. Enlarge RX buffer and increase the number 8->11 - * 3. Seperate the WINSZIE and RX buffer number - * 4. Fix RX maximum size in MAC - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 17 2011 terry.wu - * NULL - * . - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add compile flag for persistent group support. - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * Enable RX STBC capability - * - * 04 11 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * . - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. correction: RX aggregation is not limited to SDIO but for all host interface options - * 2. add forward declarations for DBG-only symbols - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * enable roaming feature. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 01 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Fix compile issue - * - * 02 25 2011 george.huang - * [WCXRP00000497] [MT6620 Wi-Fi][FW] Change default UAPSD AC assignment - * Assign all AC default to be U-APSD enabled. - * - * 02 14 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * Let the privacy check at hotspot mode default enable. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 02 01 2011 yarco.yang - * [WCXRP00000417] [MT6620 Driver] Chnage CFG_HANDLE_IST_IN_SDIO_CALLBACK from 1 to 0 for Interoperability - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 19 2011 wh.su - * [WCXRP00000370] [MT6620 Wi-Fi][Driver] Disable Rx RDG for workaround pre-N ccmp issue - * Not announce support Rx RDG for wokaround pre-N ccmp construct AAD issue.. - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW only for Linux. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Enable BOW and 4 physical links. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Modify CFG_SLT_SUPPORT default value. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000341] [MT6620][SLT] Create Branch for SLT SW. - * Update configure flag. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 11 23 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Enable PM function by default - * - * 11 15 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use config.mk WAPI config define. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use the config.mk define. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * enable the WAPI compiling flag as default - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * Add a define CFG_TEST_ANDROID_DIRECT_GO compiling flag - * - * 10 08 2010 cm.chang - * NULL - * Remove unused compiling flags (TX_RDG and TX_SGI) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 05 2010 yarco.yang - * [WCXRP00000082] [MT6620 Wi-Fi][Driver]High throughput performance tuning - * Change CFG_IST_LOOP_COUNT from 2 to 1 to reduce unnecessary SDIO bus access - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 20 2010 cm.chang - * NULL - * Disable RX STBC by BB HEC based on MT6620E1_PHY_BUG v05.docx - * - * 09 17 2010 chinglan.wang - * NULL - * Add performance test option - * - * 09 10 2010 chinglan.wang - * NULL - * Modify for Software Migration Phase 2.10 for E2 FPGA - * - * 09 07 2010 yuche.tsai - * NULL - * Add a CFG for max common IE buffer size. - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 chinglan.wang - * NULL - * Enable the MT6620_FPGA_BWCS value. - * - * 08 30 2010 chinglan.wang - * NULL - * Disable the FW encryption. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Disable BOW Test. - * - * 08 23 2010 jeffrey.chang - * NULL - * fix config.h typo - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 09 2010 wh.su - * NULL - * let the firmware download default enabled. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Add a configure flag for P2P unitest. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 yuche.tsai - * - * Add for SLT support. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * set default compiling flag for security disable. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add config option for cfg80211. - * - * 05 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set ATIMwindow default value to zero. - * - * 05 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add option for FPGA_BWCS & FPGA_V5 - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change firmware name to WIFI_RAM_CODE. - * - * 05 07 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * disable bt-over-wifi configuration, turn it on after firmware finished implementation - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * re-enable power management - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable TCP/IP checksum offloading by default. - * - * 04 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set CFG_ENABLE_FULL_PM to 1 as default to - * 1) acquire own before hardware access - * 2) set own back after hardware access - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 07 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * disable RX-enhanced response temporally, it seems the CQ is not resolved yet. - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * re-enable RX enhanced mode as WPD00003827 is resolved. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn off RX_ENHANCE mode by default. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * * 2) ready bit will be polled for limited iteration - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * firmware download: Linux uses different firmware path - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add options for full PM support. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn on FW-DOWNLOAD as default for release. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 05 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * change CFG_NUM_OF_QM_RX_PKT_NUM to 120 - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * . - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * increase RX buffer number to avoid RX buffer starvation. - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed the number of STA_RECs to 20 - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * and result is retrieved by get ATInfo instead - * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-16 22:12:28 GMT mtk02752 -** enable interrupt enhanced response, TX/RX Aggregation as default -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:38:43 GMT mtk02752 -** eliminate compile options which are obsolete or for emulation purpose -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 13:56:26 GMT MTK02468 -** Added RX buffer reordering configurations -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-12-04 12:09:09 GMT mtk02752 -** once enhanced intr/rx reponse is taken, RX must be access in aggregated basis -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 17:54:50 GMT mtk02752 -** correct a typo -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:47 GMT mtk01084 -** add defines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:33:37 GMT mtk02752 -** add coalescing buffer definition for SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 20:32:40 GMT mtk02752 -** add CFG_TX_MAX_PKT_NUM for limiting queued TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 13:34:44 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION define for source control -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 13:54:11 GMT mtk01084 -** enable INT enhance mode by default -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-30 18:17:14 GMT mtk01084 -** add new define -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-10-29 19:47:36 GMT mtk01084 -** not use HIF loopback mode -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-13 21:58:33 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-09-09 17:26:08 GMT mtk01084 -** add CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:02:30 GMT mtk01426 -** Update CFG_RX_COALESCING_BUFFER_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-21 09:35:51 GMT mtk01461 -** Add CFG_TX_DBG_MGT_BUF to debug MGMT Buffer depth -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:52:21 GMT mtk01426 -** Add OOB_DATA_PRE_FIXED_LEN define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-08 16:51:08 GMT mtk01084 -** update for FW download part -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:33:37 GMT mtk01461 -** Add SW pre test flag CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 00:29:18 GMT mtk01461 -** Fix CFG_COALESCING_BUFFER_SIZE if enable the CFG_TX_FRAGMENT -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-18 20:58:34 GMT mtk01426 -** Add CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-17 20:17:36 GMT mtk01426 -** Add CMD/Response related configure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:21 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:21 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _CONFIG_H -#define _CONFIG_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#ifndef MT6620 -#define MT6620 -#endif - -#ifdef MT5931 -#undef MT5931 -#endif - -#ifdef MT6628 -#undef MT6628 -#endif - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//2 Flags for OS capability - -#ifdef LINUX - #ifdef CONFIG_X86 - #define MTK_WCN_HIF_SDIO 0 - #else - #define MTK_WCN_HIF_SDIO 1 - #endif -#else - #define MTK_WCN_HIF_SDIO 0 -#endif - -#if (CFG_SUPPORT_AEE == 1) - #define CFG_ENABLE_AEE_MSG 1 -#else - #define CFG_ENABLE_AEE_MSG 0 -#endif - -//2 Flags for Driver Features -#define CFG_TX_FRAGMENT 1 /*!< 1: Enable TX fragmentation - 0: Disable */ -#define CFG_SUPPORT_PERFORMANCE_TEST 0 /*Only for performance Test*/ - -#define CFG_COUNTRY_CODE NULL //"US" - -#ifndef LINUX - #define CFG_FW_FILENAME L"WIFI_RAM_CODE" - #define CFG_FW_FILENAME_E6 L"WIFI_RAM_CODE_E6" -#else - #define CFG_FW_FILENAME "WIFI_RAM_CODE" -#endif - -#define CFG_SUPPORT_802_11D 1 /*!< 1(default): Enable 802.11d - 0: Disable */ - -#define CFG_SUPPORT_RRM 0 /* Radio Reasource Measurement (802.11k) */ -#define CFG_SUPPORT_DFS 1 /* DFS (802.11h)*/ - -#if (CFG_SUPPORT_DFS == 1) /* Add for DFS support */ -#define CFG_SUPPORT_QUIET 1 /* Quiet (802.11h) */ -#define CFG_SUPPORT_SPEC_MGMT 1 /* Spectrum Management (802.11h): TPC and DFS */ -#else -#define CFG_SUPPORT_QUIET 0 /* Quiet (802.11h) */ -#define CFG_SUPPORT_SPEC_MGMT 0 /* Spectrum Management (802.11h): TPC and DFS */ -#endif - -#define CFG_SUPPORT_RX_RDG 0 /* 11n feature. RX RDG capability */ -#define CFG_SUPPORT_MFB 0 /* 802.11n MCS Feedback responder */ -#define CFG_SUPPORT_RX_STBC 1 /* 802.11n RX STBC (1SS) */ -#define CFG_SUPPORT_RX_SGI 1 /* 802.11n RX short GI for both 20M and 40M BW */ -#define CFG_SUPPORT_RX_HT_GF 1 /* 802.11n RX HT green-field capability */ - -/*------------------------------------------------------------------------------ - * SLT Option - *------------------------------------------------------------------------------ - */ -#define CFG_SLT_SUPPORT 0 - - -#ifdef NDIS60_MINIPORT - #define CFG_NATIVE_802_11 1 - - #define CFG_TX_MAX_PKT_SIZE 2304 - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD 0 - #define CFG_WHQL_DOT11_STATISTICS 1 - #define CFG_WHQL_ADD_REMOVE_KEY 1 - #define CFG_WHQL_CUSTOM_IE 1 - #define CFG_WHQL_SAFE_MODE_ENABLED 1 - -#else - #define CFG_TCP_IP_CHKSUM_OFFLOAD 1 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 - #define CFG_TX_MAX_PKT_SIZE 1600 - #define CFG_NATIVE_802_11 0 -#endif - - -//2 Flags for Driver Parameters -/*------------------------------------------------------------------------------ - * Flags for EHPI Interface in Colibri Platform - *------------------------------------------------------------------------------ - */ -#define CFG_EHPI_FASTER_BUS_TIMING 0 /*!< 1: Do workaround for faster bus timing - 0(default): Disable */ - -/*------------------------------------------------------------------------------ - * Flags for HIFSYS Interface - *------------------------------------------------------------------------------ - */ -#ifdef _lint - #define _HIF_SDIO 1 -#endif - -#define CFG_SDIO_INTR_ENHANCE 1 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_RX_ENHANCE 0 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_TX_AGG 1 /*!< 1: Enable SDIO TX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#define CFG_SDIO_RX_AGG 1 /*!< 1: Enable SDIO RX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#if (CFG_SDIO_RX_AGG == 1) && (CFG_SDIO_INTR_ENHANCE == 0) - #error "CFG_SDIO_INTR_ENHANCE should be 1 once CFG_SDIO_RX_AGG equals to 1" -#elif (CFG_SDIO_INTR_ENHANCE == 1 || CFG_SDIO_RX_ENHANCE == 1) && (CFG_SDIO_RX_AGG == 0) - #error "CFG_SDIO_RX_AGG should be 1 once CFG_SDIO_INTR_ENHANCE and/or CFG_SDIO_RX_ENHANCE equals to 1" -#endif - -#define CFG_SDIO_MAX_RX_AGG_NUM 0 /*!< 1: Setting the maximum RX aggregation number - 0(default): no limited */ - -#ifdef WINDOWS_CE - #define CFG_SDIO_PATHRU_MODE 1 /*!< 1: Suport pass through (PATHRU) mode - 0: Disable */ -#else - #define CFG_SDIO_PATHRU_MODE 0 /*!< 0: Always disable if WINDOWS_CE is not defined */ -#endif - -#define CFG_MAX_RX_ENHANCE_LOOP_COUNT 3 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Integration - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) - #define MT6620_FPGA_BWCS 0 - #define MT6620_FPGA_V5 0 - - #if (MT6620_FPGA_BWCS == 1) && (MT6620_FPGA_V5 == 1) - #error - #endif - - #if (MTK_WCN_HIF_SDIO == 1) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #elif !defined(LINUX) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #else - #define CFG_MULTI_ECOVER_SUPPORT 0 - #endif - - #define CFG_ENABLE_CAL_LOG 0 - #define CFG_REPORT_RFBB_VERSION 0 -#elif defined(MT5931) - -#define CFG_MULTI_ECOVER_SUPPORT 0 -#define CFG_ENABLE_CAL_LOG 0 -#define CFG_REPORT_RFBB_VERSION 0 - -#elif defined(MT6628) - -#define CFG_MULTI_ECOVER_SUPPORT 0 - -#define CFG_ENABLE_CAL_LOG 1 -#define CFG_REPORT_RFBB_VERSION 1 - -#endif - -#define CFG_CHIP_RESET_SUPPORT 1 - - -/*------------------------------------------------------------------------------ - * Flags for workaround - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) && (MT6620_FPGA_BWCS == 0) && (MT6620_FPGA_V5 == 0) - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#else - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#endif - -/*------------------------------------------------------------------------------ - * Flags for driver version - *------------------------------------------------------------------------------ - */ -#define CFG_DRV_OWN_VERSION ((UINT_16)((NIC_DRIVER_MAJOR_VERSION << 8) | (NIC_DRIVER_MINOR_VERSION))) -#define CFG_DRV_PEER_VERSION ((UINT_16)0x0000) - - -/*------------------------------------------------------------------------------ - * Flags for TX path which are OS dependent - *------------------------------------------------------------------------------ - */ -/*! NOTE(Kevin): If the Network buffer is non-scatter-gather like structure(without - * NETIF_F_FRAGLIST in LINUX), then we can set CFG_TX_BUFFER_IS_SCATTER_LIST to "0" - * for zero copy TX packets. - * For scatter-gather like structure, we set "1", driver will do copy frame to - * internal coalescing buffer before write it to FIFO. - */ -#if defined(LINUX) - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 /*!< 1: Do frame copy before write to TX FIFO. - Used when Network buffer is scatter-gather. - 0(default): Do not copy frame */ -#else /* WINDOWS/WINCE */ - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 -#endif /* LINUX */ - - -#if CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE * NIC_TX_BUFF_SUM) -#else - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE) -#endif /* CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for TX path - *------------------------------------------------------------------------------ - */ - -/*! Maximum number of SW TX packet queue */ -#define CFG_TX_MAX_PKT_NUM 256 - -/*! Maximum number of SW TX CMD packet buffer */ -#define CFG_TX_MAX_CMD_PKT_NUM 32 - -/*! Maximum number of associated STAs */ -#define CFG_NUM_OF_STA_RECORD 20 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for RX path - *------------------------------------------------------------------------------ - */ - -/*! Max. descriptor number - sync. with firmware */ -#if CFG_SLT_SUPPORT -#define CFG_NUM_OF_RX0_HIF_DESC 42 -#else -#define CFG_NUM_OF_RX0_HIF_DESC 16 -#endif -#define CFG_NUM_OF_RX1_HIF_DESC 2 - -/*! Max. buffer hold by QM */ -#define CFG_NUM_OF_QM_RX_PKT_NUM 120 - -/*! Maximum number of SW RX packet buffer */ -#define CFG_RX_MAX_PKT_NUM ((CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC) * 3 \ - + CFG_NUM_OF_QM_RX_PKT_NUM) - -#define CFG_RX_REORDER_Q_THRESHOLD 8 - -#ifndef LINUX -#define CFG_RX_RETAINED_PKT_THRESHOLD (CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC + CFG_NUM_OF_QM_RX_PKT_NUM) -#else -#define CFG_RX_RETAINED_PKT_THRESHOLD 0 -#endif - -/*! Maximum RX packet size, if exceed this value, drop incoming packet */ -/* 7.2.3 Maganement frames */ -#define CFG_RX_MAX_PKT_SIZE ( 28 + 2312 + 12 /*HIF_RX_HEADER_T*/ ) //TODO: it should be 4096 under emulation mode - -/*! Minimum RX packet size, if lower than this value, drop incoming packet */ -#define CFG_RX_MIN_PKT_SIZE 10 /*!< 802.11 Control Frame is 10 bytes */ - -#if CFG_SDIO_RX_AGG - /* extra size for CS_STATUS and enhanced response */ - #define CFG_RX_COALESCING_BUFFER_SIZE ((CFG_NUM_OF_RX0_HIF_DESC + 1) \ - * CFG_RX_MAX_PKT_SIZE) -#else - #define CFG_RX_COALESCING_BUFFER_SIZE (CFG_RX_MAX_PKT_SIZE) -#endif - -/*! RX BA capability */ -#define CFG_NUM_OF_RX_BA_AGREEMENTS 8 -#define CFG_RX_BA_MAX_WINSIZE 16 -#define CFG_RX_BA_INC_SIZE 4 -#define CFG_RX_MAX_BA_TID_NUM 8 -#define CFG_RX_REORDERING_ENABLED 1 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for CMD/RESPONSE - *------------------------------------------------------------------------------ - */ -#define CFG_RESPONSE_POLLING_TIMEOUT 512 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Protocol Stack - *------------------------------------------------------------------------------ - */ -/*! Maximum number of BSS in the SCAN list */ -#define CFG_MAX_NUM_BSS_LIST 64 - -#define CFG_MAX_COMMON_IE_BUF_LEN (1500 * CFG_MAX_NUM_BSS_LIST) / 3 - -/*! Maximum size of IE buffer of each SCAN record */ -#define CFG_IE_BUFFER_SIZE 512 - -/*! Maximum number of STA records */ -#define CFG_MAX_NUM_STA_RECORD 32 - - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Power management - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FULL_PM 1 -#define CFG_ENABLE_WAKEUP_ON_LAN 0 - -#define CFG_INIT_POWER_SAVE_PROF ENUM_PSP_FAST_SWITCH - -#define CFG_INIT_ENABLE_PATTERN_FILTER_ARP 0 - -#define CFG_INIT_UAPSD_AC_BMP 0//(BIT(3) | BIT(2) | BIT(1) | BIT(0)) - -//#define CFG_SUPPORT_WAPI 0 -#define CFG_SUPPORT_WPS 1 -#define CFG_SUPPORT_WPS2 1 - -/*------------------------------------------------------------------------------ - * 802.11i RSN Pre-authentication PMKID cahce maximun number - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_PMKID_CACHE 16 /*!< max number of PMKID cache - 16(default) : The Max PMKID cache */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Ad-Hoc - *------------------------------------------------------------------------------ - */ -#define CFG_INIT_ADHOC_FREQ (2462000) -#define CFG_INIT_ADHOC_MODE AD_HOC_MODE_MIXED_11BG -#define CFG_INIT_ADHOC_BEACON_INTERVAL (100) -#define CFG_INIT_ADHOC_ATIM_WINDOW (0) - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Load Setup Default - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags for enable 802.11A Band setting - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Interrupt Process - *------------------------------------------------------------------------------ - */ -#if defined(_HIF_SDIO) && defined(WINDOWS_CE) - #define CFG_IST_LOOP_COUNT 1 -#else - #define CFG_IST_LOOP_COUNT 1 -#endif /* _HIF_SDIO */ - -#define CFG_INT_WRITE_CLEAR 0 - -#if defined(LINUX) -#define CFG_DBG_GPIO_PINS 0 /* if 1, use MT6516 GPIO pin to log TX behavior */ -#endif - -//2 Flags for Driver Debug Options -/*------------------------------------------------------------------------------ - * Flags of TX Debug Option. NOTE(Kevin): Confirm with SA before modifying following flags. - *------------------------------------------------------------------------------ - */ -#define CFG_DBG_MGT_BUF 1 /*!< 1: Debug statistics usage of MGMT Buffer - 0: Disable */ - -#define CFG_HIF_STATISTICS 0 - -#define CFG_HIF_RX_STARVATION_WARNING 0 - -#define CFG_STARTUP_DEBUG 0 - -#define CFG_RX_PKTS_DUMP 1 - -/*------------------------------------------------------------------------------ - * Flags of Firmware Download Option. - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FW_DOWNLOAD 1 - -#define CFG_ENABLE_FW_DOWNLOAD_ACK 1 -#define CFG_ENABLE_FW_ENCRYPTION 1 - -#if defined(MT6620) || defined(MT6628) - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 1 -#else - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 0 -#endif - - - -#if defined(MT6620) - #if MT6620_FPGA_BWCS - #define CFG_FW_LOAD_ADDRESS 0x10014000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10014001 - #elif MT6620_FPGA_V5 - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #else - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #endif -#elif defined(MT5931) - #define CFG_FW_LOAD_ADDRESS 0xFF900000 - #define CFG_FW_START_ADDRESS 0x00000000 -#elif defined(MT6628) - #define CFG_FW_LOAD_ADDRESS 0x00060000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x00060000 -#endif - - -/*------------------------------------------------------------------------------ - * Flags of Bluetooth-over-WiFi (BT 3.0 + HS) support - *------------------------------------------------------------------------------ - */ - -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_BT_OVER_WIFI 0 - #else - #define CFG_ENABLE_BT_OVER_WIFI 1 - #endif -#else - #define CFG_ENABLE_BT_OVER_WIFI 0 -#endif - -#define CFG_BOW_SEPARATE_DATA_PATH 1 - -#define CFG_BOW_PHYSICAL_LINK_NUM 4 - -#define CFG_BOW_TEST 0 - -#define CFG_BOW_LIMIT_AIS_CHNL 1 - -#define CFG_BOW_SUPPORT_11N 0 - -#define CFG_BOW_RATE_LIMITATION 1 - -/*------------------------------------------------------------------------------ - * Flags of Wi-Fi Direct support - *------------------------------------------------------------------------------ - */ -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 - #else - #define CFG_ENABLE_WIFI_DIRECT 1 - #define CFG_SUPPORT_802_11W 0 /*!< 0(default): Disable 802.11W */ - #endif -#else - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 /* Not support at WinXP */ -#endif - -#define CFG_SUPPORT_PERSISTENT_GROUP 0 - -#define CFG_TEST_WIFI_DIRECT_GO 0 - -#define CFG_TEST_ANDROID_DIRECT_GO 0 - -#define CFG_UNITEST_P2P 0 - -/* - * Enable cfg80211 option after Android 2.2(Froyo) is suggested, - * cfg80211 on linux 2.6.29 is not mature yet - */ -#define CFG_ENABLE_WIFI_DIRECT_CFG_80211 1 - -/*------------------------------------------------------------------------------ - * Configuration Flags (Linux Only) - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_EXT_CONFIG 0 - -/*------------------------------------------------------------------------------ - * Statistics Buffering Mechanism - *------------------------------------------------------------------------------ - */ -#if CFG_SUPPORT_PERFORMANCE_TEST -#define CFG_ENABLE_STATISTICS_BUFFERING 1 -#else -#define CFG_ENABLE_STATISTICS_BUFFERING 0 -#endif -#define CFG_STATISTICS_VALID_CYCLE 2000 -#define CFG_LINK_QUALITY_VALID_PERIOD 5000 - -/*------------------------------------------------------------------------------ - * Migration Option - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_ADHOC 1 -#define CFG_SUPPORT_AAA 1 - - -#if (defined(MT5931) && defined(LINUX)) -#define CFG_SUPPORT_BCM 1 -#define CFG_SUPPORT_BCM_BWCS 1 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 1 -#else -#define CFG_SUPPORT_BCM 0 -#define CFG_SUPPORT_BCM_BWCS 0 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 0 -#endif - -#define CFG_SUPPORT_RDD_TEST_MODE 0 - -#define CFG_SUPPORT_PWR_MGT 1 - -#define CFG_RSN_MIGRATION 1 - -#define CFG_PRIVACY_MIGRATION 1 - -#define CFG_ENABLE_HOTSPOT_PRIVACY_CHECK 1 - -#define CFG_MGMT_FRAME_HANDLING 1 - -#define CFG_MGMT_HW_ACCESS_REPLACEMENT 0 - -#if CFG_SUPPORT_PERFORMANCE_TEST - -#else - -#endif - -#define CFG_SUPPORT_AIS_5GHZ 1 -#define CFG_SUPPORT_BEACON_CHANGE_DETECTION 0 - -/*------------------------------------------------------------------------------ - * Option for NVRAM and Version Checking - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_NVRAM 1 -#define CFG_NVRAM_EXISTENCE_CHECK 0 -#define CFG_SW_NVRAM_VERSION_CHECK 0 -#define CFG_SUPPORT_NIC_CAPABILITY 1 - - -/*------------------------------------------------------------------------------ - * CONFIG_TITLE : Stress Test Option - * OWNER : Puff Wen - * Description : For stress test only. DO NOT enable it while normal operation - *------------------------------------------------------------------------------ - */ -#define CFG_STRESS_TEST_SUPPORT 0 - -/*------------------------------------------------------------------------------ - * Flags for LINT - *------------------------------------------------------------------------------ - */ -#define LINT_SAVE_AND_DISABLE /*lint -save -e* */ - -#define LINT_RESTORE /*lint -restore */ - -#define LINT_EXT_HEADER_BEGIN LINT_SAVE_AND_DISABLE - -#define LINT_EXT_HEADER_END LINT_RESTORE - -/*------------------------------------------------------------------------------ - * Flags of Features - *------------------------------------------------------------------------------ - */ - -#define CFG_SUPPORT_QOS 1 /* Enable/disable QoS TX, AMPDU */ -#define CFG_SUPPORT_AMPDU_TX 1 -#define CFG_SUPPORT_AMPDU_RX 1 -#define CFG_SUPPORT_TSPEC 0 /* Enable/disable TS-related Action frames handling */ -#define CFG_SUPPORT_UAPSD 1 -#define CFG_SUPPORT_UL_PSMP 0 - -#define CFG_SUPPORT_ROAMING 1 /* Roaming System */ -#define CFG_SUPPORT_SWCR 1 - -#define CFG_SUPPORT_ANTI_PIRACY 1 - -#define CFG_SUPPORT_OSC_SETTING 1 - -#if defined(MT5931) -#define CFG_SUPPORT_WHOLE_CHIP_RESET 1 /* for e3 chip only */ -#endif - -#define CFG_SUPPORT_P2P_RSSI_QUERY 0 - -#define CFG_SHOW_MACADDR_SOURCE 1 - -#define CFG_SUPPORT_802_11V 0 /* Support 802.11v Wireless Network Management */ -#define CFG_SUPPORT_802_11V_TIMING_MEASUREMENT 0 -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT == 1) && (CFG_SUPPORT_802_11V == 0) - #error "CFG_SUPPORT_802_11V should be 1 once CFG_SUPPORT_802_11V_TIMING_MEASUREMENT equals to 1" -#endif -#if (CFG_SUPPORT_802_11V == 0) -#define WNM_UNIT_TEST 0 -#endif - -#define CFG_DRIVER_COMPOSE_ASSOC_REQ 1 - -#define CFG_STRICT_CHECK_CAPINFO_PRIVACY 0 - -#define CFG_SUPPORT_WFD 1 - -#define CFG_SUPPORT_WFD_COMPOSE_IE 1 - -#define MTK_WLAN_ARP_OFFLOAD 0 - -#define MTK_PACKET_FILTERING_SUPPORT 0 - -/*------------------------------------------------------------------------------ - * Flags of bus error tolerance - *------------------------------------------------------------------------------ - */ -#define CFG_FORCE_RESET_UNDER_BUS_ERROR 0 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CONFIG_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/debug.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/debug.h deleted file mode 100755 index 3d5f03e16d0d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/debug.h +++ /dev/null @@ -1,517 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/debug.h#1 $ -*/ - -/*! \file debug.h - \brief Definition of SW debugging level. - - In this file, it describes the definition of various SW debugging levels and - assert functions. -*/ - - - -/* -** $Log: debug.h $ - * - * 12 16 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * fixed the Windows DDK free build compiling error. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 07 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * . - * - * 09 23 2010 cp.wu - * NULL - * add BOW index for debugging message and passing compilation - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add one more debug moduel for P2P. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add debug module index for cnm and ais. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-29 19:47:50 GMT mtk01084 -** add emu catagory -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-17 18:12:04 GMT mtk01426 -** Don't use dynamic memory allocate for debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:29 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _DEBUG_H -#define _DEBUG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#ifndef BUILD_QA_DBG -#define BUILD_QA_DBG 0 -#endif - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" -#if CFG_SUPPORT_XLOG -#include "linux/xlog.h" -#endif - -extern UINT_8 aucDebugModule[]; -extern UINT_32 u4DebugModule; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define debug category (class): - * (1) ERROR (2) WARN (3) STATE (4) EVENT (5) TRACE (6) INFO (7) LOUD (8) TEMP - */ -#define DBG_CLASS_ERROR BIT(0) -#define DBG_CLASS_WARN BIT(1) -#define DBG_CLASS_STATE BIT(2) -#define DBG_CLASS_EVENT BIT(3) -#define DBG_CLASS_TRACE BIT(4) -#define DBG_CLASS_INFO BIT(5) -#define DBG_CLASS_LOUD BIT(6) -#define DBG_CLASS_TEMP BIT(7) -#define DBG_CLASS_MASK BITS(0,7) - - -#if defined(LINUX) -#define DBG_PRINTF_64BIT_DEC "lld" - -#else //Windows -#define DBG_PRINTF_64BIT_DEC "I64d" - -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Define debug module index */ -typedef enum _ENUM_DBG_MODULE_T { - DBG_INIT_IDX = 0, /* For driver initial */ - DBG_HAL_IDX, /* For HAL(HW) Layer */ - DBG_INTR_IDX, /* For Interrupt */ - DBG_REQ_IDX, - DBG_TX_IDX, - DBG_RX_IDX, - DBG_RFTEST_IDX, /* For RF test mode*/ - DBG_EMU_IDX, /* Developer specific */ - - DBG_SW1_IDX, /* Developer specific */ - DBG_SW2_IDX, /* Developer specific */ - DBG_SW3_IDX, /* Developer specific */ - DBG_SW4_IDX, /* Developer specific */ - - DBG_HEM_IDX, /* HEM */ - DBG_AIS_IDX, /* AIS */ - DBG_RLM_IDX, /* RLM */ - DBG_MEM_IDX, /* RLM */ - DBG_CNM_IDX, /* CNM */ - DBG_RSN_IDX, /* RSN */ - DBG_BSS_IDX, /* BSS */ - DBG_SCN_IDX, /* SCN */ - DBG_SAA_IDX, /* SAA */ - DBG_AAA_IDX, /* AAA */ - DBG_P2P_IDX, /* P2P */ - DBG_QM_IDX, /* QUE_MGT */ - DBG_SEC_IDX, /* SEC */ - DBG_BOW_IDX, /* BOW */ - DBG_WAPI_IDX, /* WAPI */ - DBG_ROAMING_IDX, /* ROAMING */ - - DBG_MODULE_NUM /* Notice the XLOG check */ -} ENUM_DBG_MODULE_T; - -//XLOG -//#define XLOG_DBG_MODULE_IDX 28 /* DBG_MODULE_NUM */ -//#if (XLOG_DBG_MODULE_IDX != XLOG_DBG_MODULE_IDX) -//#error "Please modify the DBG_MODULE_NUM and make sure this include at XLOG" -//#endif - -/* Define who owns developer specific index */ -#define DBG_YARCO_IDX DBG_SW1_IDX -#define DBG_KEVIN_IDX DBG_SW2_IDX -#define DBG_CMC_IDX DBG_SW3_IDX -#define DBG_GEORGE_IDX DBG_SW4_IDX - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Debug print format string for the OS system time */ -#define OS_SYSTIME_DBG_FORMAT "0x%08x" - -/* Debug print argument for the OS system time */ -#define OS_SYSTIME_DBG_ARGUMENT(systime) (systime) - -/* Debug print format string for the MAC Address */ -#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" - -/* Debug print argument for the MAC Address */ -#define MAC2STR(a) ((PUINT_8)a)[0], ((PUINT_8)a)[1], ((PUINT_8)a)[2], \ - ((PUINT_8)a)[3], ((PUINT_8)a)[4], ((PUINT_8)a)[5] - -/* The pre-defined format to dump the value of a varaible with its name shown. */ -#define DUMPVAR(variable, format) (#variable " = " format "\n", variable) - -/* The pre-defined format to dump the MAC type value with its name shown. */ -#define DUMPMACADDR(addr) (#addr " = " MACSTR "\n", MAC2STR(addr)) - - -/* Basiclly, we just do renaming of KAL functions although they should - * be defined as "Nothing to do" if DBG=0. But in some compiler, the macro - * syntax does not support #define LOG_FUNC(x,...) - * - * A caller shall not invoke these three macros when DBG=0. - */ -#define LOG_FUNC_TIME kalPrint -#define LOG_FUNC kalPrint - -#if DBG - - #define TMP_BUF_LEN 256 - #define TMP_WBUF_LEN (TMP_BUF_LEN * 2) - - extern PINT_16 g_wbuf_p; - extern PINT_8 g_buf_p; - - /* If __FUNCTION__ is already defined by compiler, we just use it. */ - #if defined(__FUNCTION__) - #define DEBUGFUNC(_Func) - #else - #define DEBUGFUNC(_Func) static const char __FUNCTION__[] = _Func; - #endif - - /* The following macros are used for future debug message. */ - /* TODO(Kevin): We should remove INITLOG/ERRORLOG/WARNLOG macro sooner or later */ - #define INITLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_TRACE) { \ - LOG_FUNC("%s: ", __FUNCTION__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define ERRORLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_ERROR) { \ - LOG_FUNC("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define WARNLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_WARN) { \ - LOG_FUNC("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - /*lint -save -e960 Multiple use of '#/##' */ - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - if (DBG_CLASS_##_Class == DBG_CLASS_ERROR) { \ - LOG_FUNC_TIME("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_WARN) { \ - LOG_FUNC_TIME("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_EVENT) { \ - } \ - else { \ - LOG_FUNC_TIME("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - LOG_FUNC _Fmt; \ - } \ - } - - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory8((PUINT_8) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory32((PUINT_32) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - /*lint -restore */ - - /*lint -save -e961 use of '#undef' is discouraged */ - #undef ASSERT - /*lint -restore */ - - #ifdef _lint - #define ASSERT(_exp) \ - { \ - if (!(_exp)) {do {} while (1);} \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - #endif /* _lint */ - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - - #define DISP_STRING(_str) _str - -#else /* !DBG */ - - #define DEBUGFUNC(_Func) - #define INITLOG(_Fmt) - #define ERRORLOG(_Fmt) - #define WARNLOG(_Fmt) - -#if defined(LINUX) - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - _Module##_##_Class##_LOGFUNC _Fmt; \ - } -#else - #define DBGLOG(_Module, _Class, _Fmt) -#endif - -#if CFG_SUPPORT_XLOG - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - _Module##_##_Class##_LOGFUNC (__FUNCTION__);\ - _Module##_##_Class##_LOGDUMP8(_StartAddr, _Length); \ - } -#else - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) -#endif - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) - - #undef ASSERT - -#if BUILD_QA_DBG - #if defined(LINUX) /* For debugging in Linux w/o GDB */ - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - #else - #ifdef WINDOWS_CE - #define UNICODE_TEXT(_msg) TEXT(_msg) - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - #endif /* WINDOWS_CE */ - #endif /* LINUX */ -#else - #define ASSERT(_exp) - #define ASSERT_REPORT(_exp, _fmt) -#endif /* BUILD_QA_DBG */ - - #define DISP_STRING(_str) "" - -#endif /* DBG */ - -#if CFG_STARTUP_DEBUG - #if defined(LINUX) -#define DBGPRINTF kalPrint - #else -#define DBGPRINTF DbgPrint - #endif -#else -#define DBGPRINTF(...) -#endif - - -/* The following macro is used for debugging packed structures. */ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if DBG -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); - -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length - ); -#elif CFG_SUPPORT_XLOG -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); -#endif /* DBG */ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _DEBUG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/link.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/link.h deleted file mode 100755 index deefb031a2e5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/link.h +++ /dev/null @@ -1,414 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/link.h#1 $ -*/ - -/*! \file link.h - \brief Definition for simple doubly linked list operations. - - In this file we define the simple doubly linked list data structure and its - operation MACROs and INLINE functions. -*/ - - - -/* -** $Log: link.h $ - * - * 08 05 2010 yuche.tsai - * NULL - * Modify a MACRO of LINK_FOR_EACH_SAFE for compile error. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833] [MT6620 and MT5931] Driver migration - * . - * - * - * - * - * May 4 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add WIFI to BORA source control -** \main\maintrunk.MT5921\8 2008-10-16 15:57:11 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\7 2008-08-10 18:47:53 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\6 2007-12-11 00:09:00 GMT mtk01461 -** Add macro for checking valid list -** \main\maintrunk.MT5921\5 2007-11-13 14:27:01 GMT mtk01461 -** Add LINK_IS_INVALID macro -** Revision 1.1.1.1 2007/06/22 08:09:05 MTK01461 -** no message -** -*/ - -#ifndef _LINK_H -#define _LINK_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INVALID_LINK_POISON1 ((VOID *) 0x00100101) // May cause page fault & unalignment issue (data abort) -#define INVALID_LINK_POISON2 ((VOID *) 0x00100201) // Used to verify that nonbody uses non-initialized link entries. - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Simple Doubly Linked List Structures - Entry Part */ -typedef struct _LINK_ENTRY_T { - struct _LINK_ENTRY_T *prNext, *prPrev; -} LINK_ENTRY_T, *P_LINK_ENTRY_T; - -/* Simple Doubly Linked List Structures - List Part */ -typedef struct _LINK_T { - P_LINK_ENTRY_T prNext; - P_LINK_ENTRY_T prPrev; - UINT_32 u4NumElem; -} LINK_T, *P_LINK_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#if 0 // No one use it, temporarily mark it for [Lint - Info 773] -#define LINK_ADDR(rLink) { (P_LINK_ENTRY_T)(&(rLink)), (P_LINK_ENTRY_T)(&(rLink)), 0 } - -#define LINK_DECLARATION(rLink) \ - struct _LINK_T rLink = LINK_ADDR(rLink) -#endif - -#define LINK_INITIALIZE(prLink) \ - do { \ - ((P_LINK_T)(prLink))->prNext = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->prPrev = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->u4NumElem = 0; \ - } while (0) - -#define LINK_ENTRY_INITIALIZE(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)NULL; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)NULL; \ - } while (0) - -#define LINK_ENTRY_INVALID(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)INVALID_LINK_POISON1; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)INVALID_LINK_POISON2; \ - } while (0) - -#define LINK_IS_EMPTY(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)(prLink)) - -/* NOTE: We should do memory zero before any LINK been initiated, so we can check - * if it is valid before parsing the LINK. - */ -#define LINK_IS_INVALID(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)NULL) - -#define LINK_IS_VALID(prLink) (((P_LINK_T)(prLink))->prNext != (P_LINK_ENTRY_T)NULL) - - -#define LINK_ENTRY(ptr, type, member) ENTRY_OF(ptr, type, member) - -/* Insert an entry into a link list's head */ -#define LINK_INSERT_HEAD(prLink, prEntry) \ - { \ - linkAdd(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - - -/* Append an entry into a link list's tail */ -#define LINK_INSERT_TAIL(prLink, prEntry) \ - { \ - linkAddTail(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - -/* Peek head entry, but keep still in link list */ -#define LINK_PEEK_HEAD(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prNext, _type, _member) \ - ) - -/* Peek tail entry, but keep still in link list */ -#define LINK_PEEK_TAIL(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prPrev, _type, _member) \ - ) - -/* Get first entry from a link list */ -/* NOTE: We assume the link entry located at the beginning of "prEntry Type", - * so that we can cast the link entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define LINK_REMOVE_HEAD(prLink, prEntry, _P_TYPE) \ - { \ - ASSERT(prLink); \ - if (LINK_IS_EMPTY(prLink)) { \ - prEntry = (_P_TYPE)NULL; \ - } \ - else { \ - prEntry = (_P_TYPE)(((P_LINK_T)(prLink))->prNext); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } \ - } - -/* Assume the link entry located at the beginning of prEntry Type. - * And also decrease the total entry count. - */ -#define LINK_REMOVE_KNOWN_ENTRY(prLink, prEntry) \ - { \ - ASSERT(prLink); \ - ASSERT(prEntry); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } - -/* Iterate over a link list */ -#define LINK_FOR_EACH(prEntry, prLink) \ - for (prEntry = (prLink)->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prNext) - -/* Iterate over a link list backwards */ -#define LINK_FOR_EACH_PREV(prEntry, prLink) \ - for (prEntry = (prLink)->prPrev; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prPrev) - -/* Iterate over a link list safe against removal of link entry */ -#define LINK_FOR_EACH_SAFE(prEntry, prNextEntry, prLink) \ - for (prEntry = (prLink)->prNext, prNextEntry = prEntry->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = prNextEntry, prNextEntry = prEntry->prNext) - -/* Iterate over a link list of given type */ -#define LINK_FOR_EACH_ENTRY(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember)) - -/* Iterate backwards over a link list of given type */ -#define LINK_FOR_EACH_ENTRY_PREV(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prPrev, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prPrev, _TYPE, rMember)) - -/* Iterate over a link list of given type safe against removal of link entry */ -#define LINK_FOR_EACH_ENTRY_SAFE(prObj, prNextObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember), \ - prNextObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = prNextObj, \ - prNextObj = LINK_ENTRY(prNextObj->rMember.prNext, _TYPE, rMember)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prNew Pointer of new link head -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prNew; - prNew->prNext = prNext; - prNew->prPrev = prPrev; - prPrev->prNext = prNew; - - return; -} /* end of __linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry after the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, (P_LINK_ENTRY_T)prLink, prLink->prNext); - - return; -} /* end of linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry before the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAddTail ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, prLink->prPrev, (P_LINK_ENTRY_T)prLink); - - return; -} /* end of linkAddTail() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkDel ( - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prPrev; - prPrev->prNext = prNext; - - return; -} /* end of __linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list. -* NOTE: the entry is in an initial state. -* -* \param prEntry Specified link head(entry) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkDel ( - IN P_LINK_ENTRY_T prEntry - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - - LINK_ENTRY_INITIALIZE(prEntry); - - return; -} /* end of linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* after the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMove ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAdd(prEntry, prLink); - - return; -} /* end of linkMove() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* before the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMoveTail ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAddTail(prEntry, prLink); - - return; -} /* end of linkMoveTail() */ - -#endif /* _LINK_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/aa_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/aa_fsm.h deleted file mode 100755 index 1e7630c7c7ee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/aa_fsm.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/aa_fsm.h#1 $ -*/ - -/*! \file aa_fsm.h - \brief Declaration of functions and finite state machine for SAA/AAA Module. - - Declaration of functions and finite state machine for SAA/AAA Module. -*/ - - - -/* -** $Log: aa_fsm.h $ - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - - -#ifndef _AA_FSM_H -#define _AA_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Retry interval for retransmiting authentication-request MMPDU. */ -#define TX_AUTHENTICATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Retry interval for retransmiting association-request MMPDU. */ -#define TX_ASSOCIATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Wait for a response to a transmitted authentication-request MMPDU. */ -#define DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* Wait for a response to a transmitted association-request MMPDU. */ -#define DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* The maximum time to wait for JOIN process complete. */ -#define JOIN_FAILURE_TIMEOUT_BEACON_INTERVAL 20 // Beacon Interval, 20 * 100TU = 2 sec. - -/* Retry interval for next JOIN request. */ -#define JOIN_RETRY_INTERVAL_SEC 10 // Seconds - -/* Maximum Retry Count for accept a JOIN request. */ -#define JOIN_MAX_RETRY_FAILURE_COUNT 2 // Times - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AA_STATE_T { - AA_STATE_IDLE = 0, - SAA_STATE_SEND_AUTH1, - SAA_STATE_WAIT_AUTH2, - SAA_STATE_SEND_AUTH3, - SAA_STATE_WAIT_AUTH4, - SAA_STATE_SEND_ASSOC1, - SAA_STATE_WAIT_ASSOC2, - AAA_STATE_SEND_AUTH2, - AAA_STATE_SEND_AUTH4, // We may not use, because P2P GO didn't support WEP and 11r - AAA_STATE_SEND_ASSOC2, - AA_STATE_RESOURCE, // A state for debugging the case of out of msg buffer. - AA_STATE_NUM -} ENUM_AA_STATE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in saa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ); - -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in aaa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AA_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/ais_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/ais_fsm.h deleted file mode 100755 index 89f76530e6c6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/ais_fsm.h +++ /dev/null @@ -1,692 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/ais_fsm.h#1 $ -*/ - -/*! \file ais_fsm.h - \brief Declaration of functions and finite state machine for AIS Module. - - Declaration of functions and finite state machine for AIS Module. -*/ - - - -/* -** $Log: ais_fsm.h $ - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 04 25 2011 cp.wu - * [WCXRP00000676] [MT6620 Wi-Fi][Driver] AIS to reduce request channel period from 5 seconds to 2 seconds - * channel interval for joining is shortened to 2 seconds to avoid interruption of concurrent operating network. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 23 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * reduce the backgroud ssid idle time min and max value - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Media disconnect indication and related postpone functions - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventJoinComplete() - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM for aisFsmTest() - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of aisFsmInit() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _AIS_FSM_H -#define _AIS_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define AIS_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define AIS_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define AIS_IBSS_ALONE_TIMEOUT_SEC 20 // seconds - -#define AIS_BEACON_TIMEOUT_COUNT_ADHOC 30 -#define AIS_BEACON_TIMEOUT_COUNT_INFRA 10 -#define AIS_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define AIS_BEACON_MAX_TIMEOUT_TU 100 -#define AIS_BEACON_MIN_TIMEOUT_TU 5 -#define AIS_BEACON_MAX_TIMEOUT_VALID TRUE -#define AIS_BEACON_MIN_TIMEOUT_VALID TRUE - -#define AIS_BMC_MAX_TIMEOUT_TU 100 -#define AIS_BMC_MIN_TIMEOUT_TU 5 -#define AIS_BMC_MAX_TIMEOUT_VALID TRUE -#define AIS_BMC_MIN_TIMEOUT_VALID TRUE - -#define AIS_JOIN_CH_GRANT_THRESHOLD 10 -#define AIS_JOIN_CH_REQUEST_INTERVAL 2000 - -#define AIS_SCN_DONE_TIMEOUT_SEC 5 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AIS_STATE_T { - AIS_STATE_IDLE = 0, - AIS_STATE_SEARCH, - AIS_STATE_SCAN, - AIS_STATE_ONLINE_SCAN, - AIS_STATE_LOOKING_FOR, - AIS_STATE_WAIT_FOR_NEXT_SCAN, - AIS_STATE_REQ_CHANNEL_JOIN, - AIS_STATE_JOIN, - AIS_STATE_IBSS_ALONE, - AIS_STATE_IBSS_MERGE, - AIS_STATE_NORMAL_TR, - AIS_STATE_DISCONNECTING, - AIS_STATE_NUM -} ENUM_AIS_STATE_T; - - -typedef struct _MSG_AIS_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; -} MSG_AIS_ABORT_T, *P_MSG_AIS_ABORT_T; - - -typedef struct _MSG_AIS_IBSS_PEER_FOUND_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - BOOLEAN fgIsMergeIn; /* TRUE: Merge In, FALSE: Merge Out */ - P_STA_RECORD_T prStaRec; -} MSG_AIS_IBSS_PEER_FOUND_T, *P_MSG_AIS_IBSS_PEER_FOUND_T; - -typedef enum _ENUM_AIS_REQUEST_TYPE_T { - AIS_REQUEST_SCAN, - AIS_REQUEST_RECONNECT, - AIS_REQUEST_ROAMING_SEARCH, - AIS_REQUEST_ROAMING_CONNECT, - AIS_REQUEST_NUM -} ENUM_AIS_REQUEST_TYPE_T; - -typedef struct _AIS_REQ_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_AIS_REQUEST_TYPE_T eReqType; -} AIS_REQ_HDR_T, *P_AIS_REQ_HDR_T; - - -typedef struct _AIS_FSM_INFO_T { - ENUM_AIS_STATE_T ePreviousState; - ENUM_AIS_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - -#if CFG_SUPPORT_ROAMING - BOOLEAN fgIsRoamingScanPending; -#endif /* CFG_SUPPORT_ROAMING */ - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - P_STA_RECORD_T prTargetStaRec; /* For JOIN Abort */ - - UINT_32 u4SleepInterval; - - TIMER_T rBGScanTimer; - - TIMER_T rIbssAloneTimer; - - TIMER_T rIndicationOfDisconnectTimer; - - TIMER_T rJoinTimeoutTimer; - - - TIMER_T rScanDoneTimer; - - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfScanReq; - - UINT_32 u4ChGrantedInterval; - - UINT_8 ucConnTrialCount; - - UINT_8 ucScanSSIDLen; - UINT_8 aucScanSSID[ELEM_MAX_LEN_SSID]; - - UINT_32 u4ScanIELength; - UINT_8 aucScanIEBuf[MAX_IE_LENGTH]; - - /* Pending Request List */ - LINK_T rPendingReqList; - -} AIS_FSM_INFO_T, *P_AIS_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define aisChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState = (_eNewMediaState)); - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ); - -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Handling for Ad-Hoc Network */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/*----------------------------------------------------------------------------*/ -/* Handling of Incoming Mailbox Message from CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -/*----------------------------------------------------------------------------*/ -/* Generating Outgoing Mailbox Message to CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Indication */ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ); - -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -/*----------------------------------------------------------------------------*/ -/* Disconnection Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -#if CFG_SUPPORT_ROAMING -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ); - -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ); - -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); -#endif /*CFG_SUPPORT_ROAMING */ - -/*----------------------------------------------------------------------------*/ -/* Timeout Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventScanDoneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ); - -/*----------------------------------------------------------------------------*/ -/* Internal State Checking */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ); - -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ); - -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ); - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -VOID -aisTest ( - VOID - ); -#endif /* CFG_TEST_MGMT_FSM */ -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AIS_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/assoc.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/assoc.h deleted file mode 100755 index 1dbb06e73f1c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/assoc.h +++ /dev/null @@ -1,147 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/assoc.h#1 $ -*/ - -/*! \file assoc.h - \brief This file contains the ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: assoc.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add assocCheckTxReAssocRespFrame() proto type for P2P usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _ASSOC_H -#define _ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in assoc.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckTxReAssocRespFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ); - -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ASSOC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/auth.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/auth.h deleted file mode 100755 index 6a8bf18b063b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/auth.h +++ /dev/null @@ -1,175 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/auth.h#1 $ -*/ - -/*! \file auth.h - \brief This file contains the authentication REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: auth.h $ - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _AUTH_H -#define _AUTH_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in auth.c */ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ); - -#if !CFG_SUPPORT_AAA -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ); -#else -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ); -#endif /* CFG_SUPPORT_AAA */ - -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ); - -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ); - -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ); - -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AUTH_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/bow_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/bow_fsm.h deleted file mode 100755 index 2e63f9131163..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/bow_fsm.h +++ /dev/null @@ -1,190 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/bow_fsm.h#1 $ -*/ - -/*! \file bow_fsm.h - \brief Declaration of functions and finite state machine for BOW Module. - - Declaration of functions and finite state machine for BOW Module. -*/ - - - -/* -** $Log: bow_fsm.h $ - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add channel previledge into _BOW_FSM_INFO_T. - * - * 09 16 2010 chinghwa.yu - * NULL - * update bowChangeMediaState. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - */ - -#ifndef _BOW_FSM_H -#define _BOW_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOW_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define BOW_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define BOW_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define BOW_BEACON_TIMEOUT_COUNT_STARTING 10 -#define BOW_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define BOW_BEACON_MAX_TIMEOUT_TU 100 -#define BOW_BEACON_MIN_TIMEOUT_TU 5 -#define BOW_BEACON_MAX_TIMEOUT_VALID TRUE -#define BOW_BEACON_MIN_TIMEOUT_VALID TRUE - -#define BOW_BMC_MAX_TIMEOUT_TU 100 -#define BOW_BMC_MIN_TIMEOUT_TU 5 -#define BOW_BMC_MAX_TIMEOUT_VALID TRUE -#define BOW_BMC_MIN_TIMEOUT_VALID TRUE - -#define BOW_JOIN_CH_GRANT_THRESHOLD 10 -#define BOW_JOIN_CH_REQUEST_INTERVAL 2000 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_BOW_STATE_T { - BOW_STATE_IDLE = 0, - BOW_STATE_SEARCH, - BOW_STATE_SCAN, - BOW_STATE_ONLINE_SCAN, - BOW_STATE_LOOKING_FOR, - BOW_STATE_WAIT_FOR_NEXT_SCAN, - BOW_STATE_REQ_CHANNEL_JOIN, - BOW_STATE_REQ_CHANNEL_ALONE, - BOW_STATE_REQ_CHANNEL_MERGE, - BOW_STATE_JOIN, - BOW_STATE_IBSS_ALONE, - BOW_STATE_IBSS_MERGE, - BOW_STATE_NORMAL_TR, - BOW_STATE_NUM -} ENUM_BOW_STATE_T; - -typedef struct _BOW_FSM_INFO_T { - ENUM_BOW_STATE_T ePreviousState; - ENUM_BOW_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - /* Channel Privilege */ - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - BOOLEAN fgIsScanPending; - UINT_32 u4ChGrantedInterval; - - - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - UINT_16 u2BeaconInterval; - - ENUM_BOW_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - ENUM_BOW_STATE_T eForwardState; /* Step to next state if ACTION frame is TX successfully. */ - - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - UINT_8 aucPeerAddress[6]; - - UINT_8 ucRole; - - BOOLEAN fgSupportQoS; - - BOOLEAN fgIsRsponseProbe; /* Indicate if BOW can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfScnMsg; - UINT_8 ucSeqNumOfScanReq; - - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - - /* Timer */ - TIMER_T rStartingBeaconTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rStartingDiscoveryTimer; - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - TIMER_T rIndicationOfDisconnectTimer; - TIMER_T rChGrantedTimer; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - -} BOW_FSM_INFO_T, *P_BOW_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define bowChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].eConnectionState = (_eNewMediaState)); - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/bss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/bss.h deleted file mode 100755 index b7ff943c2763..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/bss.h +++ /dev/null @@ -1,353 +0,0 @@ -/* -** $Id: @(#) bss.h -*/ - -/*! \file "bss.h" - \brief In this file we define the function prototype used in BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - - - -/* -** $Log: bss.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 01 31 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * Extend TIM PVB, from 2 to 3 octets. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 12 2010 kevin.huang - * NULL - * Update bssProcessProbeRequest() and bssSendBeaconProbeResponse() declarations - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add CTRL FLAGS for Probe Response. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Remove unused typedef. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _BSS_H -#define _BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//NOTE(Kevin): change define for george -//#define MAX_LEN_TIM_PARTIAL_BMP (((MAX_ASSOC_ID + 1) + 7) / 8) /* Required bits = (MAX_ASSOC_ID + 1) */ -#define MAX_LEN_TIM_PARTIAL_BMP ((CFG_STA_REC_NUM + 7) / 8) /* reserve length greater than maximum size of STA_REC */ //obsoleted: Assume we only use AID:1~15 - -/* CTRL FLAGS for Probe Response */ -#define BSS_PROBE_RESP_USE_P2P_DEV_ADDR BIT(0) -#define BSS_PROBE_RESP_INCLUDE_P2P_IE BIT(1) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define bssAssignAssocID(_prStaRec) ((_prStaRec)->ucIndex + 1) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ); - -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ); - -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ); - -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ); - -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ); - -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ); - -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ); - - -/*link function to p2p module for txBcnIETable*/ - -/* WMM-2.2.2 WMM ACI to AC coding */ -typedef enum _ENUM_ACI_T { - ACI_BE = 0, - ACI_BK = 1, - ACI_VI = 2, - ACI_VO = 3, - ACI_NUM -} ENUM_ACI_T, *P_ENUM_ACI_T; - -typedef enum _ENUM_AC_PRIORITY_T { - AC_BK_PRIORITY = 0, - AC_BE_PRIORITY, - AC_VI_PRIORITY, - AC_VO_PRIORITY -} ENUM_AC_PRIORITY_T, *P_ENUM_AC_PRIORITY_T; - - -#endif /* _BSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm.h deleted file mode 100755 index ec41a1155427..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm.h +++ /dev/null @@ -1,323 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1 $ -*/ - -/*! \file "cnm.h" - \brief -*/ - - - -/* -** $Log: cnm.h $ - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Need bandwidth info when requesting channel privilege - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add prototype of cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_H -#define _CNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_CH_REQ_TYPE_T { - CH_REQ_TYPE_JOIN, - CH_REQ_TYPE_P2P_LISTEN, - - CH_REQ_TYPE_NUM -} ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T; - -typedef struct _MSG_CH_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} MSG_CH_REQ_T, *P_MSG_CH_REQ_T; - -typedef struct _MSG_CH_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; -} MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T; - -typedef struct _MSG_CH_GRANT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4GrantInterval; /* In unit of ms */ -} MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T; - -typedef struct _MSG_CH_REOCVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; -} MSG_CH_RECOVER_T, *P_MSG_CH_RECOVER_T; - - -typedef struct _CNM_INFO_T { - UINT_32 u4Reserved; -} CNM_INFO_T, *P_CNM_INFO_T; - -#if CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -typedef struct _DEVICE_TYPE_T { - UINT_16 u2CategoryId; /* Category ID */ - UINT_8 aucOui[4]; /* OUI */ - UINT_16 u2SubCategoryId; /* Sub Category ID */ -} __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T, *P_DEVICE_TYPE_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ); - -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ); - -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ); - -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -cnmMsgDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == - OFFSET_OF(MSG_CH_RECOVER_T,rMsgHdr)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucNetTypeIndex) == - OFFSET_OF(MSG_CH_RECOVER_T,ucNetTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucTokenID) == - OFFSET_OF(MSG_CH_RECOVER_T,ucTokenID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucPrimaryChannel) == - OFFSET_OF(MSG_CH_RECOVER_T,ucPrimaryChannel)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfSco) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfSco)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfBand) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfBand)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eReqType) == - OFFSET_OF(MSG_CH_RECOVER_T,eReqType)); - - return; -} -#endif /* _lint */ - -#endif /* _CNM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_mem.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_mem.h deleted file mode 100755 index ae08428153e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_mem.h +++ /dev/null @@ -1,1159 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm_mem.h#1 $ -*/ - -/*! \file "cnm_mem.h" - \brief In this file we define the structure of the control unit of - packet buffer and MGT/MSG Memory Buffer. -*/ - - - -/* -** $Log: cnm_mem.h $ - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add per STA flow control when STA is in PS mode - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error for P2P related defination. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related fields. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [BORA00000678] [MT6620]WiFi LP integration - * 1. add u8TimeStamp in MSDU_INFO - * 2. move fgIsRxTSFUpdated/fgIsTxTSFUpdated from static to BSS_INFO - * 3. add new member for supporting PM in STA_RECORD, which is for AP PS mode - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 19 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fixed MAC RX Desc be overwritten issue - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 10 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support Rx header translation for A-MSDU subframe - * - * 05 07 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * add more sanity check about setting timer - * - * 04 29 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * modify the compiling flag for RAM usage - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * Added per-TID SN cache in STA_REC - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 11 2010 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * . - * - * 03 05 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove Emulation definition - * - * 03 04 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * eliminate HIF_EMULATION in cnm_mem.h - * - * 03 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add cnmStaRecChangeState() declaration. - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning for some emulation flags - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 10 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Renamed MSDU_INFO.ucFixedRateIndex as MSDU_INFO.ucFixedRateCode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 02 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added SN info in MSDU_INFO_T - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) surpress debug message emitted from hal_hif.c - * 2) add two set of field for recording buffer process time - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1. move wifi task initialization from wifi_task.c(rom) to wifi_init.c (TCM) for integrating F/W download later - * * * * * 2. WIFI_Event_Dispatcher() prototype changed to return to suspend mode from normal operation mode - * * * * * 2. HIF emulation logic revised - * - * 12 29 2009 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * .Using global buffer declaring by SD1 instead of using another one. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * MQM: BA handling - * * TXM: Macros updates - * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 23 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * allocating SRAM for emulation purpose by ruducing MEM_BANK3_BUF_SZ - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove individual DATA_BUF_BLOCK_NUM definition for emulation compiling flagsu1rwduu`wvpghlqg|fh+fmdkb - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 17 2009 george.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 17 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified the DATA_BLOCK_SIZE from 1620 to 2048 - * - * Dec 16 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_SEC_EMULATION flag - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap to sta record - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the buffer for key handshake 1x and cmd key order issue - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the tx call back function proto type to typedef.h - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and modify variable in STA_RECORD_T - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the port block flag - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add variables to STA_RECORD_T for assoc/auth - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the value of STA_WAIT_QUEUE_NUM (from 7 to 5) - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed u2FrameLength from SW_RFB - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed indenting - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Updated MSDU_INFO and SW_RFB - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * update the variable for security - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove the variable to make the compiler ok - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the variable for security module - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo in define of MSG_BUF_BLOCK_SIZE - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Let typedef STA_REC_T precede typedef MSDU_INFO_T and SW_RFB_T - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified MSDU_INFO and STA_REC for TXM and MQM - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename STA_REC_T to STA_RECORD_T and add ucIndex member - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Make sure ucBufferSource the same offset in MSDU_INFO and SW_RFB - * - * Nov 6 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add draft content of MSDU_INFO_T and SW_RFB_T - * - * Oct 30 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 21 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_RX_EMULATION flag - * - * Oct 20 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 9 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added field ucTC to MSDU_INFO_T and field pucHifRxPacket to SW_RFB_T - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_MEM_H -#define _CNM_MEM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef POWER_OF_2 -#define POWER_OF_2(n) BIT(n) -#endif - -/* Size of a basic management buffer block in power of 2 */ -#define MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2 7 /* 7 to the power of 2 = 128 */ -#define MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2 5 /* 5 to the power of 2 = 32 */ - -/* Size of a basic management buffer block */ -#define MGT_BUF_BLOCK_SIZE POWER_OF_2(MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCK_SIZE POWER_OF_2(MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Total size of (n) basic management buffer blocks */ -#define MGT_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Number of management buffer block */ -#define MAX_NUM_OF_BUF_BLOCKS 32 /* Range: 1~32 */ - -/* Size of overall management frame buffer */ -#define MGT_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MGT_BUF_BLOCK_SIZE) -#define MSG_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MSG_BUF_BLOCK_SIZE) - - -/* STA_REC related definitions */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE -#define STA_WAIT_QUEUE_NUM 5 /* Number of SW queues in each STA_REC: AC0~AC4 */ -#define SC_CACHE_INDEX_NUM 5 /* Number of SC caches in each STA_REC: AC0~AC4 */ - - -/* P2P related definitions */ -#ifdef CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if ((MAX_NUM_OF_BUF_BLOCKS > 32) || (MAX_NUM_OF_BUF_BLOCKS <= 0)) - #error > #define MAX_NUM_OF_MGT_BUF_BLOCKS : Out of boundary ! -#elif MAX_NUM_OF_BUF_BLOCKS > 16 - typedef UINT_32 BUF_BITMAP; -#elif MAX_NUM_OF_BUF_BLOCKS > 8 - typedef UINT_16 BUF_BITMAP; -#else - typedef UINT_8 BUF_BITMAP; -#endif /* MAX_NUM_OF_MGT_BUF_BLOCKS */ - - -/* Control variable of TX management memory pool */ -typedef struct _BUF_INFO_T { - PUINT_8 pucBuf; - -#if CFG_DBG_MGT_BUF - UINT_32 u4AllocCount; - UINT_32 u4FreeCount; - UINT_32 u4AllocNullCount; -#endif /* CFG_DBG_MGT_BUF */ - - BUF_BITMAP rFreeBlocksBitmap; - UINT_8 aucAllocatedBlockNum[MAX_NUM_OF_BUF_BLOCKS]; -} BUF_INFO_T, *P_BUF_INFO_T; - - -/* Wi-Fi divides RAM into three types - * MSG: Mailbox message (Small size) - * BUF: HW DMA buffers (HIF/MAC) - */ -typedef enum _ENUM_RAM_TYPE_T { - RAM_TYPE_MSG = 0, - RAM_TYPE_BUF -} ENUM_RAM_TYPE_T, P_ENUM_RAM_TYPE_T; - -typedef enum _ENUM_BUFFER_SOURCE_T { - BUFFER_SOURCE_HIF_TX0 =0, - BUFFER_SOURCE_HIF_TX1, - BUFFER_SOURCE_MAC_RX, - BUFFER_SOURCE_MNG, - BUFFER_SOURCE_BCN, - BUFFER_SOURCE_NUM -} ENUM_BUFFER_SOURCE_T, *P_ENUM_BUFFER_SOURCE_T; - - -typedef enum _ENUM_SEC_STATE_T { - SEC_STATE_INIT, - SEC_STATE_INITIATOR_PORT_BLOCKED, - SEC_STATE_RESPONDER_PORT_BLOCKED, - SEC_STATE_CHECK_OK, - SEC_STATE_SEND_EAPOL, - SEC_STATE_SEND_DEAUTH, - SEC_STATE_COUNTERMEASURE, - SEC_STATE_NUM -} ENUM_SEC_STATE_T; - -typedef struct _TSPEC_ENTRY_T { - UINT_8 ucStatus; - UINT_8 ucToken; /* Dialog Token in ADDTS_REQ or ADDTS_RSP */ - UINT_16 u2MediumTime; - UINT_32 u4TsInfo; - //PARAM_QOS_TS_INFO rParamTsInfo; - /* Add other retained QoS parameters below */ -} TSPEC_ENTRY_T, *P_TSPEC_ENTRY_T, TSPEC_TABLE_ENTRY_T, *P_TSPEC_TABLE_ENTRY_T; - -typedef struct _SEC_INFO_T { - - ENUM_SEC_STATE_T ePreviousState; - ENUM_SEC_STATE_T eCurrentState; - - BOOL fg2nd1xSend; - BOOL fgKeyStored; - - UINT_8 aucStoredKey[64]; - - BOOL fgAllowOnly1x; -} SEC_INFO_T, *P_SEC_INFO_T; - -#define MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS 3 - -#define UPDATE_BSS_RSSI_INTERVAL_SEC 3 // Seconds - -/* Fragment information structure */ -typedef struct _FRAG_INFO_T { - UINT_16 u2NextFragSeqCtrl; - PUINT_8 pucNextFragStart; - P_SW_RFB_T pr1stFrag; - OS_SYSTIME rReceiveLifetimeLimit; /* The receive time of 1st fragment */ -} FRAG_INFO_T, *P_FRAG_INFO_T; - - -/* Define STA record structure */ -struct _STA_RECORD_T { - LINK_ENTRY_T rLinkEntry; - UINT_8 ucIndex; /* Not modify it except initializing */ - - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 aucMacAddr[MAC_ADDR_LEN]; /* MAC address */ - - /* SAA/AAA */ - ENUM_AA_STATE_T eAuthAssocState; /* Store STATE Value used in SAA/AAA */ - UINT_8 ucAuthAssocReqSeqNum; - - ENUM_STA_TYPE_T eStaType; /* Indicate the role of this STA in - * the network (for example, P2P GO) - */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucStaState; /* STATE_1,2,3 */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (may deduced from received BSS_DESC_T) - */ - UINT_8 ucDesiredPhyTypeSet; /* The match result by AND operation of peer's - * PhyTypeSet and ours. - */ - BOOLEAN fgHasBasicPhyType; /* A flag to indicate a Basic Phy Type which - * is used to generate some Phy Attribute IE - * (e.g. capability, MIB) during association. - */ - UINT_8 ucNonHTBasicPhyType; /* The Basic Phy Type choosen among the - * ucDesiredPhyTypeSet. - */ - - UINT_16 u2CapInfo; /* For Infra Mode, to store Capability Info. from Association Resp(SAA). - * For AP Mode, to store Capability Info. from Association Req(AAA). - */ - UINT_16 u2AssocId; /* For Infra Mode, to store AID from Association Resp(SAA). - * For AP Mode, to store the Assigned AID(AAA). - */ - - UINT_16 u2ListenInterval; /* Listen Interval from STA(AAA) */ - - UINT_16 u2DesiredNonHTRateSet; /* Our Current Desired Rate Set after - * match with STA's Operational Rate Set - */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of peer BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of peer BSS */ - - BOOLEAN fgIsMerging; /* For IBSS Mode, to indicate that Merge is ongoing */ - - BOOLEAN fgDiagnoseConnection; /* For Infra/AP Mode, to diagnose the Connection with - * this peer by sending ProbeReq/Null frame */ - - /*------------------------------------------------------------------------------------------*/ - /* 802.11n HT capabilities when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT) is true */ - /* They have the same definition with fields of information element */ - /*------------------------------------------------------------------------------------------*/ - UINT_8 ucMcsSet; /* MCS0~7 rate set of peer BSS */ - BOOLEAN fgSupMcs32; /* MCS32 is supported by peer BSS */ - UINT_16 u2HtCapInfo; /* HT cap info field by HT cap IE */ - UINT_8 ucAmpduParam; /* Field A-MPDU Parameters in HT cap IE */ - UINT_16 u2HtExtendedCap; /* HT extended cap field by HT cap IE */ - UINT_32 u4TxBeamformingCap; /* TX beamforming cap field by HT cap IE */ - UINT_8 ucAselCap; /* ASEL cap field by HT cap IE */ - - UINT_8 ucRCPI; /* RCPI of peer */ - - UINT_8 ucDTIMPeriod; /* Target BSS's DTIM Period, we use this - * value for setup Listen Interval - * TODO(Kevin): TBD - */ - UINT_8 ucAuthAlgNum; /* For Infra/AP Mode, the Auth Alogrithm Num used in Authentication(SAA/AAA) */ - BOOLEAN fgIsReAssoc; /* For Infra/AP Mode, to indicate ReAssoc Frame was in used(SAA/AAA) */ - - UINT_8 ucTxAuthAssocRetryCount;/* For Infra Mode, the Retry Count of TX Auth/Assod Frame(SAA) */ - UINT_8 ucTxAuthAssocRetryLimit;/* For Infra Mode, the Retry Limit of TX Auth/Assod Frame(SAA) */ - - UINT_16 u2StatusCode; /* Status of Auth/Assoc Req */ - UINT_16 u2ReasonCode; /* Reason that been Deauth/Disassoc */ - - - P_IE_CHALLENGE_TEXT_T prChallengeText; /* Point to an allocated buffer for storing Challenge Text for Shared Key Authentication */ - - TIMER_T rTxReqDoneOrRxRespTimer;/* For Infra Mode, a timer used to send a timeout event - * while waiting for TX request done or RX response. - */ - - /*------------------------------------------------------------------------------------------*/ - /* Power Management related fields (for STA/ AP/ P2P/ BOW power saving mode) */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgSetPwrMgtBit; /* For Infra Mode, to indicate that outgoing frame need toggle - * the Pwr Mgt Bit in its Frame Control Field. - */ - - BOOLEAN fgIsInPS; /* For AP Mode, to indicate the client PS state(PM). - * TRUE: In PS Mode; FALSE: In Active Mode. */ - - BOOLEAN fgIsInPsPollSP; /* For Infra Mode, to indicate we've sent a PS POLL to AP and start - * the PS_POLL Service Period(LP) - */ - - BOOLEAN fgIsInTriggerSP; /* For Infra Mode, to indicate we've sent a Trigger Frame to AP and start - * the Delivery Service Period(LP) - */ - - UINT_8 ucBmpDeliveryAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucBmpTriggerAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucUapsdSp; /* Max SP length */ - - /*------------------------------------------------------------------------------------------*/ - - BOOLEAN fgIsRtsEnabled; - - OS_SYSTIME rUpdateTime; /* (4) System Timestamp of Successful TX and RX */ - - OS_SYSTIME rLastJoinTime; /* (4) System Timestamp of latest JOIN process */ - - UINT_8 ucJoinFailureCount; /* Retry Count of JOIN process */ - - LINK_T arStaWaitQueue[STA_WAIT_QUEUE_NUM]; /* For TXM to defer pkt forwarding to MAC TX DMA */ - - UINT_16 au2CachedSeqCtrl[TID_NUM + 1]; /* Duplicate removal for HT STA on a per-TID basis ("+1" is for MMPDU and non-QoS) */ - -#if 0 - /* RXM */ - P_RX_BA_ENTRY_T aprRxBaTable[TID_NUM]; - - /* TXM */ - P_TX_BA_ENTRY_T aprTxBaTable[TID_NUM]; -#endif - - FRAG_INFO_T rFragInfo[MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS]; - - SEC_INFO_T rSecInfo; /* The security state machine */ - - BOOLEAN fgPortBlock; /* The 802.1x Port Control flag */ - - BOOLEAN fgTransmitKeyExist; /* Unicast key exist for this STA */ - - UINT_8 ucWTEntry; - - BOOLEAN fgTxAmpduEn; /* Enable TX AMPDU for this Peer */ - BOOLEAN fgRxAmpduEn; /* Enable RX AMPDU for this Peer */ - - PUINT_8 pucAssocReqIe; - UINT_16 u2AssocReqIeLen; - /*------------------------------------------------------------------------------------------*/ - /* WMM/QoS related fields */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgIsQoS; /* If the STA is associated as a QSTA or QAP (for TX/RX) */ - BOOLEAN fgIsWmmSupported; /* If the peer supports WMM, set to TRUE (for association)*/ - BOOLEAN fgIsUapsdSupported; /* Set according to the scan result (for association) */ - - /*------------------------------------------------------------------------------------------*/ - /* P2P related fields */ - /*------------------------------------------------------------------------------------------*/ -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 u2DevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - - UINT_16 u2ConfigMethods; - - UINT_8 ucDeviceCap; - - UINT_8 ucSecondaryDevTypeCount; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT]; -#endif /* CFG_SUPPORT_P2P */ - - - /*------------------------------------------------------------------------------------------*/ - /* QM related fields */ - /*------------------------------------------------------------------------------------------*/ - - UINT_8 ucFreeQuota; /* Per Sta flow controal. Valid when fgIsInPS is TRUE. Chnage it for per Queue flow control */ - //UINT_8 aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES]; /* used in future */ - UINT_8 ucFreeQuotaForDelivery; - UINT_8 ucFreeQuotaForNonDelivery; - -#if 1 - /*------------------------------------------------------------------------------------------*/ - /* To be removed, this is to make que_mgt compilation success only */ - /*------------------------------------------------------------------------------------------*/ - /* When this STA_REC is in use, set to TRUE. */ - BOOLEAN fgIsValid; - - /* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ - QUE_T arTxQueue[NUM_OF_PER_STA_TX_QUEUES]; - - /* When this STA is in PS Mode, set to TRUE. */ - //BOOLEAN fgIsPS; - - /* When this STA enters Power-Saving, FW will notify the driver with a Session ID */ - UINT_8 ucPsSessionID; - - BOOLEAN fgIsAp; - - /* Reorder Parameter reference table */ - P_RX_BA_ENTRY_T aprRxReorderParamRefTbl[CFG_RX_MAX_BA_TID_NUM]; -#endif - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - TIMINGMSMT_PARAM_T rWNMTimingMsmt; -#endif -}; - -#if 0 -/* use nic_tx.h instead */ -/* MSDU_INFO and SW_RFB structure */ -typedef struct _MSDU_INFO_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - /* TODO: move flags to ucControlFlag */ - - BOOLEAN fgIs1xFrame; /* Set to TRUE for 802.1x frame */ - - /* TXM: For TX Done handling, callback function & parameter (5) */ - BOOLEAN fgIsTxFailed; /* Set to TRUE if transmission failure */ - - PFN_TX_DONE_HANDLER pfTxDoneHandler; - - UINT_64 u8TimeStamp; /* record the TX timestamp */ - - /* TXM: For PS forwarding control (per-STA flow control) */ - UINT_8 ucPsForwardingType; /* Delivery-enabled, non-delivery-enabled, non-PS */ - UINT_8 ucPsSessionID; /* The Power Save session id for PS forwarding control*/ - - /* TXM: For MAC TX DMA operations */ - UINT_8 ucMacTxQueIdx; /* MAC TX queue: AC0-AC6, BCM, or BCN */ - BOOLEAN fgNoAck; /* Set to true if Ack is not requred for this packet */ - BOOLEAN fgBIP; /* Set to true if BIP is used for this packet */ - UINT_8 ucFragTotalCount; - UINT_8 ucFragFinishedCount; - UINT_16 u2FragThreshold; /* Fragmentation threshold without WLAN Header & FCS */ - BOOLEAN fgFixedRate; /* If a fixed rate is used, set to TRUE. */ - UINT_8 ucFixedRateCode; /* The rate code copied to MAC TX Desc */ - UINT_8 ucFixedRateRetryLimit; /* The retry limit when a fixed rate is used */ - BOOLEAN fgIsBmcQueueEnd; /* Set to true if this packet is the end of BMC */ - - /* TXM: For flushing ACL frames */ - UINT_16 u2PalLLH; /* 802.11 PAL LLH */ - //UINT_16 u2LLH; - UINT_16 u2ACLSeq; /* u2LLH+u2ACLSeq for AM HCI flush ACL frame */ - - /* TXM for retransmitting a flushed packet */ - BOOLEAN fgIsSnAssigned; - UINT_16 u2SequenceNumber; /* To remember the Sequence Control field of this MPDU */ - -} MSDU_INFO_T, *P_MSDU_INFO_T; -#endif - -#if 0 -/* nic_rx.h */ -typedef struct _SW_RFB_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - - /* For composing the HIF RX Header (TODO: move flags to ucControlFlag) */ - PUINT_8 pucHifRxPacket; /* Pointer to the Response packet to HIF RX0 or RX1 */ - UINT_16 u2HifRxPacketLength; - UINT_8 ucHeaderOffset; - UINT_8 ucHifRxPortIndex; - - UINT_16 u2SequenceControl; - BOOLEAN fgIsA4Frame; /* (For MAC RX packet parsing) set to TRUE if 4 addresses are present */ - BOOLEAN fgIsBAR; - BOOLEAN fgIsQoSData; - BOOLEAN fgIsAmsduSubframe; /* Set to TRUE for A-MSDU Subframe */ - - /* For HIF RX DMA Desc */ - BOOLEAN fgTUChecksumCheckRequired; - BOOLEAN fgIPChecksumCheckRequired; - UINT_8 ucEtherTypeOffset; - -} SW_RFB_T, *P_SW_RFB_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_MSDU_INFO_T -cnmMgtPktAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cnmMgtPktFree ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -cnmMemInit ( - IN P_ADAPTER_T prAdapter - ); - -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ); - -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ); - -VOID -cnmStaRecInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ); - -P_STA_RECORD_T -cnmStaRecAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex - ); - -VOID -cnmStaRecFree ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSyncToChip - ); - -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ); - -P_STA_RECORD_T -cnmGetStaRecByIndex ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucIndex - ); - -P_STA_RECORD_T -cnmGetStaRecByAddress ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex, - IN UINT_8 aucPeerMACAddress[] - ); - -VOID -cnmStaRecResetStatus ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -cnmStaRecChangeState ( - IN P_ADAPTER_T prAdapter, - IN OUT P_STA_RECORD_T prStaRec, - IN UINT_8 ucNewState - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -cnmMemDataTypeCheck ( - VOID - ) -{ -#if 0 - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == OFFSET_OF(SW_RFB_T,rLinkEntry)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucBuffer) == OFFSET_OF(SW_RFB_T,pucBuffer)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucBufferSource) == - OFFSET_OF(SW_RFB_T,ucBufferSource)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucMacHeader) == - OFFSET_OF(SW_RFB_T,pucMacHeader)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucMacHeaderLength) == - OFFSET_OF(SW_RFB_T,ucMacHeaderLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucPayload) == - OFFSET_OF(SW_RFB_T,pucPayload)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,u2PayloadLength) == - OFFSET_OF(SW_RFB_T,u2PayloadLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,prStaRec) == - OFFSET_OF(SW_RFB_T,prStaRec)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucNetworkTypeIndex) == - OFFSET_OF(SW_RFB_T,ucNetworkTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTID) == - OFFSET_OF(SW_RFB_T,ucTID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgIs802_11Frame) == - OFFSET_OF(SW_RFB_T,fgIs802_11Frame)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucControlFlag) == - OFFSET_OF(SW_RFB_T,ucControlFlag)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rArrivalTime) == - OFFSET_OF(SW_RFB_T,rArrivalTime)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTC) == - OFFSET_OF(SW_RFB_T,ucTC)); - -#if CFG_PROFILE_BUFFER_TRACING - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,eActivity[0]) == - OFFSET_OF(SW_RFB_T,eActivity[0])); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rActivityTime[0]) == - OFFSET_OF(SW_RFB_T,rActivityTime[0])); -#endif - -#if DBG && CFG_BUFFER_FREE_CHK - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgBufferInSource) == - OFFSET_OF(SW_RFB_T,fgBufferInSource)); -#endif - - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(STA_RECORD_T,rLinkEntry) == 0); - - return; -#endif -} -#endif /* _lint */ - -#endif /* _CNM_MEM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_scan.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_scan.h deleted file mode 100755 index b3d2993f801a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_scan.h +++ /dev/null @@ -1,206 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "cnm_scan.h" - \brief - -*/ - - - -/* -** $Log: cnm_scan.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of cnmScanInit() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_SCAN_H -#define _CNM_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define SCN_CHANNEL_DWELL_TIME_MIN_MSEC 12 -#define SCN_CHANNEL_DWELL_TIME_EXT_MSEC 98 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_FULL 3 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_FULL 1 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_PARTIAL 2 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_PARTIAL 1 - - -#define SCN_INTERLACED_CHANNEL_GROUPS_NUM 3 /* Used by partial scan */ - -#define SCN_PARTIAL_SCAN_NUM 3 - -#define SCN_PARTIAL_SCAN_IDLE_MSEC 100 - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* The type of Scan Source */ -typedef enum _ENUM_SCN_REQ_SOURCE_T { - SCN_REQ_SOURCE_HEM = 0, - SCN_REQ_SOURCE_NET_FSM, - SCN_REQ_SOURCE_ROAMING, /* ROAMING Module is independent of AIS FSM */ - SCN_REQ_SOURCE_OBSS, /* 2.4G OBSS scan */ - SCN_REQ_SOURCE_NUM -} ENUM_SCN_REQ_SOURCE_T, *P_ENUM_SCN_REQ_SOURCE_T; - -typedef enum _ENUM_SCAN_PROFILE_T { - SCAN_PROFILE_FULL = 0, - SCAN_PROFILE_PARTIAL, - SCAN_PROFILE_VOIP, - SCAN_PROFILE_FULL_2G4, - SCAN_PROFILE_NUM -} ENUM_SCAN_PROFILE_T, *P_ENUM_SCAN_PROFILE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -VOID -cnmScanInit ( - VOID - ); - -VOID -cnmScanRunEventScanRequest ( - IN P_MSG_HDR_T prMsgHdr - ); - -BOOLEAN -cnmScanRunEventScanAbort ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanProfileSelection ( - VOID - ); - -VOID -cnmScanProcessStart ( - VOID - ); - -VOID -cnmScanProcessStop ( - VOID - ); - -VOID -cnmScanRunEventReqAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanRunEventCancelAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanPartialScanTimeout ( - UINT_32 u4Param - ); - -VOID -cnmScanRunEventScnFsmComplete ( - IN P_MSG_HDR_T prMsgHdr - ); -#endif - - - -#endif /* _CNM_SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_timer.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_timer.h deleted file mode 100755 index b1ed2c6456ad..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/cnm_timer.h +++ /dev/null @@ -1,274 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm_timer.h#1 $ -*/ - -/*! \file cnm_timer.h - \brief Declaration of timer obj and related timer macro for setup time out - event. - - In this file we declare the timer object and provide several macro for - Protocol functional blocks to setup their own time out event. -*/ - - - -/* -** $Log: cnm_timer.h $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the copy time function - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix LINT warnning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_TIMER_H -#define _CNM_TIMER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#undef MSEC_PER_SEC -#define MSEC_PER_SEC 1000 -#undef USEC_PER_MSEC -#define USEC_PER_MSEC 1000 -#define USEC_PER_TU 1024 /* microsecond */ - -#define MSEC_PER_MIN (60 * MSEC_PER_SEC) - - -#define MGMT_MAX_TIMEOUT_INTERVAL ((UINT_32)0x7fffffff) - -#define WAKE_LOCK_MAX_TIME 5 /* Unit: sec */ - -/* If WAKE_LOCK_MAX_TIME is too large, the whole system may always keep awake - * because of periodic timer of OBSS scanning - */ -#if (WAKE_LOCK_MAX_TIME >= OBSS_SCAN_MIN_INTERVAL) - #error WAKE_LOCK_MAX_TIME is too large -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef VOID (*PFN_MGMT_TIMEOUT_FUNC)(P_ADAPTER_T, UINT_32); - -typedef struct _TIMER_T { - LINK_ENTRY_T rLinkEntry; - OS_SYSTIME rExpiredSysTime; - UINT_16 u2Minutes; - UINT_16 u2Reserved; - UINT_32 u4Data; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; -} TIMER_T, *P_TIMER_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Check if time "a" is before time "b" */ -/* In 32-bit variable, 0x00000001~0x7fffffff -> positive number, - * 0x80000000~0xffffffff -> negative number - */ -#define TIME_BEFORE_64bit(a,b) (a < b) - -#define TIME_BEFORE(a,b) ((UINT_32)((UINT_32)(a) - (UINT_32)(b)) > 0x7fffffff) - -/* #define TIME_BEFORE(a,b) ((INT_32)((INT_32)(b) - (INT_32)(a)) > 0) - * may cause UNexpect result between Free build and Check build for WinCE - */ - -#define TIME_AFTER(a,b) TIME_BEFORE(b,a) - -#define SYSTIME_TO_SEC(_systime) ((_systime) / KAL_HZ) -#define SEC_TO_SYSTIME(_sec) ((_sec) * KAL_HZ) - - -/* The macros to convert second & millisecond */ -#define MSEC_TO_SEC(_msec) ((_msec) / MSEC_PER_SEC) -#define SEC_TO_MSEC(_sec) ((UINT_32)(_sec) * MSEC_PER_SEC) - - -/* The macros to convert millisecond & microsecond */ -#define USEC_TO_MSEC(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_USEC(_msec) ((UINT_32)(_msec) * USEC_PER_MSEC) - - -/* The macros to convert TU & microsecond, TU & millisecond */ -#define TU_TO_USEC(_tu) ((_tu) * USEC_PER_TU) -#define TU_TO_MSEC(_tu) USEC_TO_MSEC( TU_TO_USEC(_tu) ) - - -/* The macros to convert TU & & OS system time, round up by 0.5 */ -#define TU_TO_SYSTIME(_tu) MSEC_TO_SYSTIME( TU_TO_MSEC(_tu) ) -#define SYSTIME_TO_TU(_systime) \ - ((SYSTIME_TO_USEC(_systime) + ((USEC_PER_TU / 2) - 1)) / USEC_PER_TU) - - -/* The macros to convert OS system time & microsecond */ -#define SYSTIME_TO_USEC(_systime) (SYSTIME_TO_MSEC(_systime) * USEC_PER_MSEC) - - -/* The macro to get the current OS system time */ -#define GET_CURRENT_SYSTIME(_systime_p) {*(_systime_p) = kalGetTimeTick();} - -/* The macro to copy the system time */ -#define COPY_SYSTIME(_destTime, _srcTime) (_destTime) = (_srcTime) - -/* The macro to get the system time difference between t1 and t2 (t1 - t2) */ -/* #define GET_SYSTIME_DIFFERENCE(_time1, _time2, _diffTime) \ - (_diffTime) = (_time1) - (_time2) */ - -/* The macro to check for the expiration, if TRUE means _currentTime >= _expirationTime */ -#define CHECK_FOR_EXPIRATION(_currentTime, _expirationTime) \ - ( ((UINT_32)(_currentTime) - (UINT_32)(_expirationTime)) <= 0x7fffffffUL) - -/* The macro to check for the timeout */ -#define CHECK_FOR_TIMEOUT(_currentTime, _timeoutStartingTime, _timeout) \ - CHECK_FOR_EXPIRATION((_currentTime), ((_timeoutStartingTime) + (_timeout))) - -/* The macro to set the expiration time with a specified timeout *//* Watch out for round up.*/ -#define SET_EXPIRATION_TIME(_expirationTime, _timeout) \ - { \ - GET_CURRENT_SYSTIME(&(_expirationTime)); \ - (_expirationTime) += (OS_SYSTIME)(_timeout); \ - } - -#define timerRenewTimer(adapter,tmr,interval) \ - timerStartTimer(adapter,tmr,interval,(tmr)->function,(tmr)->data) - -#define MGMT_INIT_TIMER(_adapter_p, _timer, _callbackFunc) \ - timerInitTimer(_adapter_p, &(_timer), (UINT_32)(_callbackFunc)) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ); - -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ); - -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ); - -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ -INT_32 -timerPendingTimer ( - IN P_TIMER_T prTimer - ) -{ - ASSERT(prTimer); - - return prTimer->rLinkEntry.prNext != NULL; -} - -#endif /* _CNM_TIMER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/hem_mbox.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/hem_mbox.h deleted file mode 100755 index c86099c810e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/hem_mbox.h +++ /dev/null @@ -1,444 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/hem_mbox.h#2 $ -*/ - -/*! \file hem_mbox.h - \brief - -*/ - - - -/* -** $Log: hem_mbox.h $ -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some message ID for P2P FSM under provisioning phase. - * - * 08 11 2010 yuche.tsai - * NULL - * Add Message Event ID for P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added MID_RXM_MQM_QOS_ACTION_FRAME for RXM to indicate QoS Action frames to MQM - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename the parameter of mboxDummy() - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove Dummy MSG ID - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add JOIN REQ related MSG ID - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add AIS ABORT MSG ID - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN MSG IDs - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _HEM_MBOX_H -#define _HEM_MBOX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Message IDs */ -typedef enum _ENUM_MSG_ID_T { - MID_MNY_CNM_CH_REQ, /* MANY notify CNM to obtain channel privilege */ - MID_MNY_CNM_CH_ABORT, /* MANY notify CNM to abort/release channel privilege */ - - MID_CNM_AIS_CH_GRANT, /* CNM notify AIS for indicating channel granted */ - MID_CNM_P2P_CH_GRANT, /* CNM notify P2P for indicating channel granted */ - MID_CNM_BOW_CH_GRANT, /* CNM notify BOW for indicating channel granted */ - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_AIS_SCN_SCAN_REQ, /* AIS notify SCN for starting scan */ - MID_AIS_SCN_SCAN_REQ_V2, /* AIS notify SCN for starting scan with multiple SSID support */ - MID_AIS_SCN_SCAN_CANCEL, /* AIS notify SCN for cancelling scan */ - MID_P2P_SCN_SCAN_REQ, /* P2P notify SCN for starting scan */ - MID_P2P_SCN_SCAN_REQ_V2, /* P2P notify SCN for starting scan with multiple SSID support */ - MID_P2P_SCN_SCAN_CANCEL, /* P2P notify SCN for cancelling scan */ - MID_BOW_SCN_SCAN_REQ, /* BOW notify SCN for starting scan */ - MID_BOW_SCN_SCAN_REQ_V2, /* BOW notify SCN for starting scan with multiple SSID support */ - MID_BOW_SCN_SCAN_CANCEL, /* BOW notify SCN for cancelling scan */ - MID_RLM_SCN_SCAN_REQ, /* RLM notify SCN for starting scan (OBSS-SCAN) */ - MID_RLM_SCN_SCAN_REQ_V2, /* RLM notify SCN for starting scan (OBSS-SCAN) with multiple SSID support */ - MID_RLM_SCN_SCAN_CANCEL, /* RLM notify SCN for cancelling scan (OBSS-SCAN)*/ - MID_SCN_AIS_SCAN_DONE, /* SCN notify AIS for scan completion */ - MID_SCN_P2P_SCAN_DONE, /* SCN notify P2P for scan completion */ - MID_SCN_BOW_SCAN_DONE, /* SCN notify BOW for scan completion */ - MID_SCN_RLM_SCAN_DONE, /* SCN notify RLM for scan completion (OBSS-SCAN) */ - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_OID_AIS_FSM_JOIN_REQ, /* OID/IOCTL notify AIS for join */ - MID_OID_AIS_FSM_ABORT, /* OID/IOCTL notify AIS for abort */ - MID_AIS_SAA_FSM_START, /* AIS notify SAA for Starting authentication/association fsm */ - MID_AIS_SAA_FSM_ABORT, /* AIS notify SAA for Aborting authentication/association fsm */ - MID_SAA_AIS_JOIN_COMPLETE, /* SAA notify AIS for indicating join complete */ - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_BOW_SAA_FSM_START, /* BOW notify SAA for Starting authentication/association fsm */ - MID_BOW_SAA_FSM_ABORT, /* BOW notify SAA for Aborting authentication/association fsm */ - MID_SAA_BOW_JOIN_COMPLETE, /* SAA notify BOW for indicating join complete */ -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*--------------------------------------------------*/ - /* P2P Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_P2P_SAA_FSM_START, /* P2P notify SAA for Starting authentication/association fsm */ - MID_P2P_SAA_FSM_ABORT, /* P2P notify SAA for Aborting authentication/association fsm */ - MID_SAA_P2P_JOIN_COMPLETE, /* SAA notify P2P for indicating join complete */ - - MID_MNY_P2P_FUN_SWITCH, /* Enable P2P FSM. */ - MID_MNY_P2P_DEVICE_DISCOVERY, /* Start device discovery. */ - MID_MNY_P2P_CONNECTION_REQ, /* Connection request. */ - MID_MNY_P2P_CONNECTION_ABORT, /* Abort connection request, P2P FSM return to IDLE. */ - MID_MNY_P2P_BEACON_UPDATE, - MID_MNY_P2P_STOP_AP, - MID_MNY_P2P_CHNL_REQ, - MID_MNY_P2P_CHNL_ABORT, - MID_MNY_P2P_MGMT_TX, - MID_MNY_P2P_GROUP_DISSOLVE, - MID_MNY_P2P_MGMT_FRAME_REGISTER, - MID_MNY_P2P_NET_DEV_REGISTER, - MID_MNY_P2P_START_AP, - MID_MNY_P2P_MGMT_FRAME_UPDATE, -#if CFG_SUPPORT_WFD - MID_MNY_P2P_WFD_CFG_UPDATE, -#endif -#endif - -#if CFG_SUPPORT_ADHOC - MID_SCN_AIS_FOUND_IBSS, /* SCN notify AIS that an IBSS Peer has been found and can merge into */ -#endif /* CFG_SUPPORT_ADHOC */ - - MID_SAA_AIS_FSM_ABORT, /* SAA notify AIS for indicating deauthentication/disassociation */ - - MID_TOTAL_NUM -} ENUM_MSG_ID_T, *P_ENUM_MSG_ID_T; - -/* Message header of inter-components */ -struct _MSG_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_MSG_ID_T eMsgId; -}; - -typedef VOID (*PFN_MSG_HNDL_FUNC)(P_ADAPTER_T, P_MSG_HDR_T); - -typedef struct _MSG_HNDL_ENTRY { - ENUM_MSG_ID_T eMsgId; - PFN_MSG_HNDL_FUNC pfMsgHndl; -} MSG_HNDL_ENTRY_T, *P_MSG_HNDL_ENTRY_T; - -typedef enum _EUNM_MSG_SEND_METHOD_T { - MSG_SEND_METHOD_BUF = 0, /* Message is put in the queue and will be - executed when mailbox is checked. */ - MSG_SEND_METHOD_UNBUF /* The handler function is called immediately - in the same context of the sender */ -} EUNM_MSG_SEND_METHOD_T, *P_EUNM_MSG_SEND_METHOD_T; - - -typedef enum _ENUM_MBOX_ID_T { - MBOX_ID_0 = 0, - MBOX_ID_TOTAL_NUM -} ENUM_MBOX_ID_T, *P_ENUM_MBOX_ID_T; - -/* Define Mailbox structure */ -typedef struct _MBOX_T { - LINK_T rLinkHead; -} MBOX_T, *P_MBOX_T; - -typedef struct _MSG_SAA_FSM_START_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_START_T, *P_MSG_SAA_FSM_START_T; - -typedef struct _MSG_SAA_FSM_COMP_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - WLAN_STATUS rJoinStatus; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prSwRfb; -} MSG_SAA_FSM_COMP_T, *P_MSG_SAA_FSM_COMP_T; - -typedef struct _MSG_SAA_FSM_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_ABORT_T, *P_MSG_SAA_FSM_ABORT_T; - -typedef struct _MSG_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; -} MSG_CONNECTION_ABORT_T, *P_MSG_CONNECTION_ABORT_T; - - - -/* specific message data types */ -typedef MSG_SAA_FSM_START_T MSG_JOIN_REQ_T, *P_MSG_JOIN_REQ_T; -typedef MSG_SAA_FSM_COMP_T MSG_JOIN_COMP_T, *P_MSG_JOIN_COMP_T; -typedef MSG_SAA_FSM_ABORT_T MSG_JOIN_ABORT_T, *P_MSG_JOIN_ABORT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - - -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ); - -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HEM_MBOX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/mib.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/mib.h deleted file mode 100755 index febcfb5fc40c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/mib.h +++ /dev/null @@ -1,157 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/mib.h#1 $ -*/ - -/*! \file mib.h - \brief This file contains the IEEE 802.11 family related MIB definition - for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: mib.h $ - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _MIB_H -#define _MIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Entry in SMT AuthenticationAlgorithms Table: dot11AuthenticationAlgorithmsEntry */ -typedef struct _DOT11_AUTHENTICATION_ALGORITHMS_ENTRY { - BOOLEAN dot11AuthenticationAlgorithmsEnable; /* dot11AuthenticationAlgorithmsEntry 3 */ -} DOT11_AUTHENTICATION_ALGORITHMS_ENTRY, *P_DOT11_AUTHENTICATION_ALGORITHMS_ENTRY; - -/* Entry in SMT dot11RSNAConfigPairwiseCiphersTalbe Table: dot11RSNAConfigPairwiseCiphersEntry */ -typedef struct _DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY -{ - UINT_32 dot11RSNAConfigPairwiseCipher; /* dot11RSNAConfigPairwiseCiphersEntry 2 */ - BOOLEAN dot11RSNAConfigPairwiseCipherEnabled; /* dot11RSNAConfigPairwiseCiphersEntry 3 */ -} DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY, *P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY; - -/* Entry in SMT dot11RSNAConfigAuthenticationSuitesTalbe Table: dot11RSNAConfigAuthenticationSuitesEntry */ -typedef struct _DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY -{ - UINT_32 dot11RSNAConfigAuthenticationSuite; /* dot11RSNAConfigAuthenticationSuitesEntry 2 */ - BOOLEAN dot11RSNAConfigAuthenticationSuiteEnabled; /* dot11RSNAConfigAuthenticationSuitesEntry 3 */ -} DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY, *P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY; - -/* ----- IEEE 802.11 MIB Major sections ----- */ -typedef struct _IEEE_802_11_MIB_T { - /* dot11PrivacyTable (dot11smt 5) */ - UINT_8 dot11WEPDefaultKeyID; /* dot11PrivacyEntry 2 */ - BOOLEAN dot11TranmitKeyAvailable; - UINT_32 dot11WEPICVErrorCount; /* dot11PrivacyEntry 5 */ - UINT_32 dot11WEPExcludedCount; /* dot11PrivacyEntry 6 */ - - /* dot11RSNAConfigTable (dot11smt 8) */ - UINT_32 dot11RSNAConfigGroupCipher; /* dot11RSNAConfigEntry 4 */ - - /* dot11RSNAConfigPairwiseCiphersTable (dot11smt 9) */ - DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY dot11RSNAConfigPairwiseCiphersTable[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - - /* dot11RSNAConfigAuthenticationSuitesTable (dot11smt 10) */ - DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY dot11RSNAConfigAuthenticationSuitesTable[MAX_NUM_SUPPORTED_AKM_SUITES]; - -#if 0 //SUPPORT_WAPI - BOOLEAN fgWapiKeyInstalled; - PARAM_WPI_KEY_T rWapiPairwiseKey[2]; - BOOLEAN fgPairwiseKeyUsed[2]; - UINT_8 ucWpiActivedPWKey; /* Must be 0 or 1, by wapi spec */ - PARAM_WPI_KEY_T rWapiGroupKey[2]; - BOOLEAN fgGroupKeyUsed[2]; -#endif -} IEEE_802_11_MIB_T, *P_IEEE_802_11_MIB_T; - -/* ------------------ IEEE 802.11 non HT PHY characteristics ---------------- */ -typedef const struct _NON_HT_PHY_ATTRIBUTE_T { - UINT_16 u2SupportedRateSet; - - BOOLEAN fgIsShortPreambleOptionImplemented; - - BOOLEAN fgIsShortSlotTimeOptionImplemented; - -} NON_HT_PHY_ATTRIBUTE_T, *P_NON_HT_PHY_ATTRIBUTE_T; - -typedef const struct _NON_HT_ADHOC_MODE_ATTRIBUTE_T { - - ENUM_PHY_TYPE_INDEX_T ePhyTypeIndex; - - UINT_16 u2BSSBasicRateSet; - -} NON_HT_ADHOC_MODE_ATTRIBUTE_T, *P_NON_HT_ADHOC_MODE_ATTRIBUTE_T; - -typedef NON_HT_ADHOC_MODE_ATTRIBUTE_T NON_HT_AP_MODE_ATTRIBUTE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[]; -extern NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[]; -extern NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[]; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_assoc.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_assoc.h deleted file mode 100755 index 270d1d63c7fb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_assoc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_assoc.h#1 $ -*/ - -/*! \file p2p_assoc.h - \brief This file contains the Wi-Fi Direct ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - - -#ifndef _P2P_ASSOC_H -#define _P2P_ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_bss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_bss.h deleted file mode 100755 index a609476fff7d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_bss.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_bss.h#2 $ -*/ - -/*! \file "p2p_bss.h" - \brief In this file we define the function prototype used in p2p BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - - - - - -#ifndef _P2P_BSS_H -#define _P2P_BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -UINT_32 -p2pGetTxProbRspIeTableSize( - VOID - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_fsm.h deleted file mode 100755 index 7ff490891d58..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_fsm.h +++ /dev/null @@ -1,2797 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_fsm.h#23 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - - - -/* -** $Log: p2p_fsm.h $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 14 2012 yuche.tsai -** NULL -** Fix compile error. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 18 2012 yuche.tsai - * NULL - * add one file. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve class 3 error issue under AP mode. - * - * data frame may TX before Assoc Response TX. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 09 2011 yuche.tsai - * [WCXRP00001093] [Need Patch][Volunteer Patch] Service Discovery 2.0 state transition issue. - * Fix SD2.0 issue which may cause KE. (Monkey test) - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 09 01 2011 yuche.tsai - * NULL - * Fix channel stay interval. - * Sync channel stay interval & channel request interval under AP mode.. - * - * 08 30 2011 yuche.tsai - * [WCXRP00000953] [Volunteer Patch][Driver] Hot Spot Channel ASSERT issue. - * Fix hot spot FW assert issue when under concurrent case. (DBG enable only) - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 yuche.tsai - * NULL - * Fix scan policy for Active LISTEN scan. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Support TX Deauth Issue. - * - * 07 26 2011 yuche.tsai - * [WCXRP00000875] [Volunteer Patch][WiFi Direct][Driver] MT6620 IOT issue with realtek test bed solution. - * Turn off persistent group support for V2.0 release. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix compile error. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix MT6620 WiFi Direct IOT Issue with BCM solution. - * - * 07 11 2011 yuche.tsai - * [WCXRP00000845] [Volunteer Patch][WiFi Direct] WiFi Direct Device Connection Robustness - * Enhance Connection Robustness. - * - * 07 08 2011 yuche.tsai - * [WCXRP00000841] [Volunteer Patch][WiFi Direct] Group Owner Setting. - * Update GO configure parameter. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Disable enhancement II for debugging. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 04 20 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove CFG_WIFI_DIRECT_MOVED. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add two function prototype. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add connection abort message event prototype. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 16 2010 yuche.tsai - * NULL - * Fix P2P Intended Interface Address Bug. - * Extend GO Nego Timeout Time. - * - * 08 16 2010 yuche.tsai - * NULL - * Extend Listen Interval default value & remove deprecated variable. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add function prototype for join complete. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function proto type for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Change P2P data structure for supporting - * 1. P2P Device discovery. - * 2. P2P Group Negotiation. - * 3. P2P JOIN - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix some P2P function prototype. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify parameter of p2pStartGO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _P2P_FSM_H -#define _P2P_FSM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#define CID52_53_54 0 - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - - - - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_P2P_STATE_T { - P2P_STATE_IDLE = 0, - P2P_STATE_SCAN, - P2P_STATE_AP_CHANNEL_DETECT, - P2P_STATE_REQING_CHANNEL, - P2P_STATE_CHNL_ON_HAND, /* Requesting Channel to Send Specific Frame. */ - P2P_STATE_GC_JOIN, /* Sending Specific Frame. May extending channel by other event. */ - P2P_STATE_NUM -} ENUM_P2P_STATE_T, *P_ENUM_P2P_STATE_T; - - -typedef enum _ENUM_CHANNEL_REQ_TYPE_T { - CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL, - CHANNEL_REQ_TYPE_GC_JOIN_REQ, - CHANNEL_REQ_TYPE_GO_START_BSS -} -ENUM_CHANNEL_REQ_TYPE_T, *P_ENUM_CHANNEL_REQ_TYPE_T; - - -typedef enum _ENUM_BUFFER_TYPE_T { - ENUM_FRAME_TYPE_EXTRA_IE_BEACON, - ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP, - ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP, - ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE, - ENUM_FRAME_TYPE_BEACON_TEMPLATE, - ENUM_FRAME_IE_NUM -} ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T; - -typedef enum _ENUM_HIDDEN_SSID_TYPE_T { - ENUM_HIDDEN_SSID_NONE, - ENUM_HIDDEN_SSID_LEN, - ENUM_HIDDEN_SSID_ZERO_CONTENT, - ENUM_HIDDEN_SSID_NUM -} -ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T; - -typedef struct _P2P_SSID_STRUCT_T { - UINT_8 aucSsid[32]; - UINT_8 ucSsidLen; -} P2P_SSID_STRUCT_T, *P_P2P_SSID_STRUCT_T; - -typedef struct _P2P_STATION_INFO_T { - UINT_32 u4InactiveTime; - UINT_32 u4RxBytes; // TODO: - UINT_32 u4TxBytes; // TODO: - UINT_32 u4RxPackets; // TODO: - UINT_32 u4TxPackets; // TODO: - // TODO: Add more for requirement. -} -P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T; - - -typedef struct _AP_CRYPTO_SETTINGS_T { - UINT_32 u4WpaVersion; - UINT_32 u4CipherGroup; - INT_32 i4NumOfCiphers; - UINT_32 aucCiphersPairwise[5]; - INT_32 i4NumOfAkmSuites; - UINT_32 aucAkmSuites[2]; - BOOLEAN fgIsControlPort; - UINT_16 u2ControlPortBE; - BOOLEAN fgIsControlPortEncrypt; -} AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T; -typedef struct _MSG_P2P_MGMT_TX_REQUEST_T { - MSG_HDR_T rMsgHdr; - P_MSDU_INFO_T prMgmtMsduInfo; - UINT_64 u8Cookie; /* For indication. */ - BOOLEAN fgNoneCckRate; - BOOLEAN fgIsWaitRsp; -} MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T; - - -/*-------------------- P2P FSM ACTION STRUCT ---------------------*/ -typedef struct _P2P_CHNL_REQ_INFO_T { - BOOLEAN fgIsChannelRequested; - UINT_8 ucSeqNumOfChReq; - UINT_64 u8Cookie; - UINT_8 ucReqChnlNum; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eChnlSco; - UINT_32 u4MaxInterval; - ENUM_CHANNEL_REQ_TYPE_T eChannelReqType; - - UINT_8 ucOriChnlNum; - ENUM_BAND_T eOriBand; - ENUM_CHNL_EXT_T eOriChnlSco; -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq; - BOOLEAN fgNeedIndSupp; -#endif -} P2P_CHNL_REQ_INFO_T, *P_P2P_CHNL_REQ_INFO_T; - -typedef struct _P2P_SCAN_REQ_INFO_T { - ENUM_SCAN_TYPE_T eScanType; - ENUM_SCAN_CHANNEL eChannelSet; - UINT_16 u2PassiveDewellTime; - UINT_8 ucSeqNumOfScnMsg; - BOOLEAN fgIsAbort; - BOOLEAN fgIsScanRequest; - UINT_8 ucNumChannelList; - RF_CHANNEL_INFO_T arScanChannelList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - P2P_SSID_STRUCT_T rSsidStruct; // Currently we can only take one SSID scan request -} -P2P_SCAN_REQ_INFO_T, *P_P2P_SCAN_REQ_INFO_T; - -typedef struct _P2P_CONNECTION_REQ_INFO_T { - - BOOLEAN fgIsConnRequest; - P2P_SSID_STRUCT_T rSsidStruct; - UINT_8 aucBssid[MAC_ADDR_LEN]; - /* For ASSOC Req. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T; - -typedef struct _P2P_MGMT_TX_REQ_INFO_T { - BOOLEAN fgIsMgmtTxRequested; - P_MSDU_INFO_T prMgmtTxMsdu; - UINT_64 u8Cookie; -} P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T; - -typedef struct _P2P_BEACON_UPDATE_INFO_T { - PUINT_8 pucBcnHdr; - UINT_32 u4BcnHdrLen; - PUINT_8 pucBcnBody; - UINT_32 u4BcnBodyLen; -} -P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T; - -typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T { - P_MSDU_INFO_T prProbeRspMsduTemplate; -} P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T; - -typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T { - PUINT_8 pucAssocRspExtIE; - UINT_16 u2AssocIELen; -} P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T; - -typedef struct _P2P_JOIN_INFO_T { - UINT_32 ucSeqNumOfReqMsg; - UINT_8 ucAvailableAuthTypes; - P_STA_RECORD_T prTargetStaRec; - P2P_SSID_STRUCT_T rSsidStruct; - BOOLEAN fgIsJoinComplete; - /* For ASSOC Rsp. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} -P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T; - -#if CFG_SUPPORT_WFD - -#define WFD_FLAGS_DEV_INFO_VALID BIT(0) /* 1. WFD_DEV_INFO, 2. WFD_CTRL_PORT, 3. WFD_MAT_TP. */ -#define WFD_FLAGS_SINK_INFO_VALID BIT(1) /* 1. WFD_SINK_STATUS, 2. WFD_SINK_MAC. */ -#define WFD_FLAGS_ASSOC_MAC_VALID BIT(2) /* 1. WFD_ASSOC_MAC. */ -#define WFD_FLAGS_EXT_CAPABILITY_VALID BIT(3) /* 1. WFD_EXTEND_CAPABILITY. */ - - - -struct _WFD_CFG_SETTINGS_T { - UINT_32 u4WfdCmdType; - UINT_8 ucWfdEnable; - UINT_8 ucWfdCoupleSinkStatus; - UINT_8 ucWfdSessionAvailable; /* 0: NA 1:Set 2:Clear */ - UINT_8 ucWfdSigmaMode; - UINT_16 u2WfdDevInfo; - UINT_16 u2WfdControlPort; - UINT_16 u2WfdMaximumTp; - UINT_16 u2WfdExtendCap; - UINT_8 aucWfdCoupleSinkAddress[MAC_ADDR_LEN]; - UINT_8 aucWfdAssociatedBssid[MAC_ADDR_LEN]; - UINT_8 aucWfdVideolp[4]; - UINT_8 aucWfdAudiolp[4]; - UINT_16 u2WfdVideoPort; - UINT_16 u2WfdAudioPort; - UINT_32 u4WfdFlag; - UINT_32 u4WfdPolicy; - UINT_32 u4WfdState; - UINT_8 aucWfdSessionInformationIE[24*8]; - UINT_16 u2WfdSessionInformationIELen; - UINT_8 aucReserved1[2]; - UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN]; - UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN]; - UINT_32 u4WfdAdvancedFlag; - /* Group 1 64 bytes */ - UINT_8 aucWfdLocalIp[4]; - UINT_16 u2WfdLifetimeAc2; /* Unit is 2 TU */ - UINT_16 u2WfdLifetimeAc3; /* Unit is 2 TU */ - UINT_8 aucReverved2[56]; - /* Group 2 64 bytes */ - UINT_8 aucReverved3[64]; - /* Group 3 64 bytes */ - UINT_8 aucReverved4[64]; - -}; - -#endif - - - -struct _P2P_FSM_INFO_T { - /* State related. */ - ENUM_P2P_STATE_T ePreviousState; - ENUM_P2P_STATE_T eCurrentState; - - /* Channel related. */ - P2P_CHNL_REQ_INFO_T rChnlReqInfo; - - /* Scan related. */ - P2P_SCAN_REQ_INFO_T rScanReqInfo; - - /* Connection related. */ - P2P_CONNECTION_REQ_INFO_T rConnReqInfo; - - /* Mgmt tx related. */ - P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo; - - /* Beacon related. */ - P2P_BEACON_UPDATE_INFO_T rBcnContentInfo; - - /* Probe Response related. */ - P2P_PROBE_RSP_UPDATE_INFO_T rProbeRspContentInfo; - - /* Assoc Rsp related. */ - P2P_ASSOC_RSP_UPDATE_INFO_T rAssocRspContentInfo; - - /* GC Join related. */ - P2P_JOIN_INFO_T rJoinInfo; - - /* FSM Timer */ - TIMER_T rP2pFsmTimeoutTimer; - - - /* GC Target BSS. */ - P_BSS_DESC_T prTargetBss; - - /* GC Connection Request. */ - BOOLEAN fgIsConnectionRequested; - - BOOLEAN fgIsApMode; - - /* Channel grant interval. */ - UINT_32 u4GrantInterval; - - /* Packet filter for P2P module. */ - UINT_32 u4P2pPacketFilter; - - //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Prepare for use vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - /* Msg event queue. */ - LINK_T rMsgEventQueue; - -#if CFG_SUPPORT_WFD - WFD_CFG_SETTINGS_T rWfdConfigureSettings; -#endif - - BOOLEAN fgIsWPSMode; -}; - - -/*---------------- Messages -------------------*/ -typedef struct _MSG_P2P_SCAN_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P_P2P_SSID_STRUCT_T prSSID; - INT_32 i4SsidNum; - UINT_32 u4NumChannel; - PUINT_8 pucIEBuf; - UINT_32 u4IELen; - BOOLEAN fgIsAbort; - RF_CHANNEL_INFO_T arChannelListInfo[1]; -} MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; - UINT_32 u4Duration; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - BOOLEAN fgNeedIndSupp; -#endif -} MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; -} MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T; - - -typedef struct _MSG_P2P_CONNECTION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P2P_SSID_STRUCT_T rSsid; - UINT_8 aucBssid[MAC_ADDR_LEN]; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; - UINT_32 u4IELen; - UINT_8 aucIEBuf[1]; - // TODO: Auth Type, OPEN, SHARED, FT, EAP... -} MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T; - - -typedef struct _MSG_P2P_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member. */ - UINT_8 aucTargetID[MAC_ADDR_LEN]; - UINT_16 u2ReasonCode; - BOOLEAN fgSendDeauth; -} MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T; -#if 0 -typedef struct _MSG_P2P_MGMT_TX_REQUEST_T { - MSG_HDR_T rMsgHdr; - P_MSDU_INFO_T prMgmtMsduInfo; - UINT_64 u8Cookie; /* For indication. */ - BOOLEAN fgNoneCckRate; - BOOLEAN fgIsWaitRsp; -} MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T; -#endif -typedef struct _MSG_P2P_START_AP_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4DtimPeriod; - UINT_32 u4BcnInterval; - UINT_8 aucSsid[32]; - UINT_16 u2SsidLen; - UINT_8 ucHiddenSsidType; - BOOLEAN fgIsPrivacy; - AP_CRYPTO_SETTINGS_T rEncryptionSettings; - INT_32 i4InactiveTimeout; -} -MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T; - - -typedef struct _MSG_P2P_BEACON_UPDATE_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4BcnHdrLen; - UINT_32 u4BcnBodyLen; - PUINT_8 pucBcnHdr; - PUINT_8 pucBcnBody; - UINT_8 aucBuffer[1]; /* Header & Body are put here. */ -} -MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T { - MSG_HDR_T rMsgHdr; - ENUM_BUFFER_TYPE_T eBufferType; - UINT_32 u4BufferLen; - UINT_8 aucBuffer[1]; -} MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T; - - -typedef struct _MSG_P2P_SWITCH_OP_MODE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - ENUM_OP_MODE_T eOpMode; -} MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_16 u2FrameType; - BOOLEAN fgIsRegister; -} -MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T; - -typedef struct _MSG_P2P_NETDEV_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsEnable; - UINT_8 ucMode; -} MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T; - -#if CFG_SUPPORT_WFD -typedef struct _MSG_WFD_CONFIG_SETTINGS_CHANGED_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P_WFD_CFG_SETTINGS_T prWfdCfgSettings; -} MSG_WFD_CONFIG_SETTINGS_CHANGED_T, *P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T; -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -p2pFsmStateTransition( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - - -VOID -p2pFsmRunEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFsmRunEventScanRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventMgmtFrameTx( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStartAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventNetDeviceRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventUpdateMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStopAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChannelRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventChannelAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventDissolve( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -VOID -p2pFsmRunEventMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -#if CFG_SUPPORT_WFD -VOID -p2pFsmRunEventWfdSettingUpdate( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); -#endif - - -#if 0 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - -//3 /* --------------- WFA P2P DEFAULT PARAMETERS --------------- */ -#define P2P_WILDCARD_SSID "DIRECT-" -#define P2P_WILDCARD_SSID_LEN 7 -#define P2P_GROUP_ID_LEN 9 - -#define P2P_DRIVER_VERSION 2 /* Update when needed. */ - -#define P2P_DEFAULT_DEV_NAME "Wireless Client" -#define P2P_DEFAULT_DEV_NAME_LEN 15 -#define P2P_DEFAULT_PRIMARY_CATEGORY_ID 10 -#define P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID 5 -#define P2P_DEFAULT_CONFIG_METHOD (WPS_ATTRI_CFG_METHOD_PUSH_BUTTON | WPS_ATTRI_CFG_METHOD_KEYPAD | WPS_ATTRI_CFG_METHOD_DISPLAY) -#define P2P_DEFAULT_LISTEN_CHANNEL 1 - -#define P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT 0 /* NOTE(Kevin): Shall <= 16 */ -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT 13 - -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE 51 /* Contains 6 sub-band. */ - -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ - -#define P2P_MAXIMUM_CLIENT_COUNT 8 -#define P2P_MAXIMUM_NOA_COUNT 8 - - -#define P2P_MAXIMUM_ATTRIBUTE_LEN 251 - -#define P2P_CTWINDOW_DEFAULT 25 /* in TU=(1024usec) */ - -#define P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE 768 - -/* P2P 3.1.2.1.3 - Find Phase */ -#define P2P_MAX_DISCOVERABLE_INTERVAL 8 //3//3 -#define P2P_MIN_DISCOVERABLE_INTERVAL 5 // 1 - -#define P2P_LISTEN_SCAN_UNIT 100 // MS - -/* FSM Time Related constrain. */ -#define P2P_SERACH_STATE_PERIOD_MS 1000 // Deprecated. - -#define P2P_GO_CHANNEL_STAY_INTERVAL 1000 - -#define P2P_GO_NEGO_TIMEOUT_MS 500 -#define P2P_CONNECTION_TIMEOUT_SEC 120 - -#define P2P_INVITAION_TIMEOUT_MS 500 /* Timeout Wait Invitation Resonse. */ -#define P2P_PROVISION_DISCOVERY_TIMEOUT_MS 500 /* Timeout Wait Provision Discovery Resonse. */ - -//3 /* --------------- WFA P2P IE --------------- */ -/* P2P 4.1.1 - P2P IE format */ -#define P2P_OUI_TYPE_LEN 4 -#define P2P_IE_OUI_HDR (ELEM_HDR_LEN + P2P_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */ - -/* P2P 4.1.1 - General P2P Attribute */ -#define P2P_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */ - -/* P2P 4.1.1 - P2P Attribute ID definitions */ -#define P2P_ATTRI_ID_STATUS 0 -#define P2P_ATTRI_ID_REASON_CODE 1 -#define P2P_ATTRI_ID_P2P_CAPABILITY 2 -#define P2P_ATTRI_ID_P2P_DEV_ID 3 -#define P2P_ATTRI_ID_GO_INTENT 4 -#define P2P_ATTRI_ID_CFG_TIMEOUT 5 -#define P2P_ATTRI_ID_LISTEN_CHANNEL 6 -#define P2P_ATTRI_ID_P2P_GROUP_BSSID 7 -#define P2P_ATTRI_ID_EXT_LISTEN_TIMING 8 -#define P2P_ATTRI_ID_INTENDED_P2P_IF_ADDR 9 -#define P2P_ATTRI_ID_P2P_MANAGEABILITY 10 -#define P2P_ATTRI_ID_CHANNEL_LIST 11 -#define P2P_ATTRI_ID_NOTICE_OF_ABSENCE 12 -#define P2P_ATTRI_ID_P2P_DEV_INFO 13 -#define P2P_ATTRI_ID_P2P_GROUP_INFO 14 -#define P2P_ATTRI_ID_P2P_GROUP_ID 15 -#define P2P_ATTRI_ID_P2P_INTERFACE 16 -#define P2P_ATTRI_ID_OPERATING_CHANNEL 17 -#define P2P_ATTRI_ID_INVITATION_FLAG 18 -#define P2P_ATTRI_ID_VENDOR_SPECIFIC 221 - -/* Maximum Length of P2P Attributes */ -#define P2P_ATTRI_MAX_LEN_STATUS 1 /* 0 */ -#define P2P_ATTRI_MAX_LEN_REASON_CODE 1 /* 1 */ -#define P2P_ATTRI_MAX_LEN_P2P_CAPABILITY 2 /* 2 */ -#define P2P_ATTRI_MAX_LEN_P2P_DEV_ID 6 /* 3 */ -#define P2P_ATTRI_MAX_LEN_GO_INTENT 1 /* 4 */ -#define P2P_ATTRI_MAX_LEN_CFG_TIMEOUT 2 /* 5 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#else - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#endif -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_BSSID 6 /* 7 */ -#define P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING 4 /* 8 */ -#define P2P_ATTRI_MAX_LEN_INTENDED_P2P_IF_ADDR 6 /* 9 */ -#define P2P_ATTRI_MAX_LEN_P2P_MANAGEABILITY 1 /* 10 */ -//#define P2P_ATTRI_MAX_LEN_CHANNEL_LIST 3 + (n* (2 + num_of_ch)) /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_LIST 3 /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_ENTRY 2 /* 11 */ - - -//#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE 2 + (n* (13)) /* 12 */ -#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE (2 + (P2P_MAXIMUM_NOA_COUNT*(13))) /* 12 */ - -#define P2P_ATTRI_MAX_LEN_P2P_DEV_INFO 17 + (8 * (8)) + 36 /* 13 */ -//#define P2P_ATTRI_MAX_LEN_P2P_GROUP_INFO n* (25 + (m* (8)) + 32) /* 14 */ -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_ID 38 /* 15 */ -#define P2P_ATTRI_MAX_LEN_P2P_INTERFACE 253 // 7 + 6* [0~41] /* 16 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#else - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#endif -#define P2P_ATTRI_MAX_LEN_INVITATION_FLAGS 1 /* 18 */ - -/* P2P 4.1.2 - P2P Status definitions */ -#define P2P_STATUS_SUCCESS 0 -#define P2P_STATUS_FAIL_INFO_IS_CURRENTLY_UNAVAILABLE 1 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 2 -#define P2P_STATUS_FAIL_LIMIT_REACHED 3 -#define P2P_STATUS_FAIL_INVALID_PARAM 4 -#define P2P_STATUS_FAIL_UNABLE_ACCOMMODATE_REQ 5 -#define P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR 6 -#define P2P_STATUS_FAIL_NO_COMMON_CHANNELS 7 -#define P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP 8 -#define P2P_STATUS_FAIL_SAME_INTENT_VALUE_15 9 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD 10 -#define P2P_STATUS_FAIL_REJECTED_BY_USER 11 - - -/* P2P 4.1.3 - P2P Minor Reason Code definitions */ -#define P2P_REASON_SUCCESS 0 -#define P2P_REASON_DISASSOCIATED_DUE_CROSS_CONNECTION 1 -#define P2P_REASON_DISASSOCIATED_DUE_UNMANAGEABLE 2 -#define P2P_REASON_DISASSOCIATED_DUE_NO_P2P_COEXIST_PARAM 3 -#define P2P_REASON_DISASSOCIATED_DUE_MANAGEABLE 4 - - -/* P2P 4.1.4 - Device Capability Bitmap definitions */ -#define P2P_DEV_CAPABILITY_SERVICE_DISCOVERY BIT(0) -#define P2P_DEV_CAPABILITY_CLIENT_DISCOVERABILITY BIT(1) -#define P2P_DEV_CAPABILITY_CONCURRENT_OPERATION BIT(2) -#define P2P_DEV_CAPABILITY_P2P_INFRA_MANAGED BIT(3) -#define P2P_DEV_CAPABILITY_P2P_DEVICE_LIMIT BIT(4) -#define P2P_DEV_CAPABILITY_P2P_INVITATION_PROCEDURE BIT(5) - - -/* P2P 4.1.4 - Group Capability Bitmap definitions */ -#define P2P_GROUP_CAPABILITY_P2P_GROUP_OWNER BIT(0) -#define P2P_GROUP_CAPABILITY_PERSISTENT_P2P_GROUP BIT(1) -#define P2P_GROUP_CAPABILITY_P2P_GROUP_LIMIT BIT(2) -#define P2P_GROUP_CAPABILITY_INTRA_BSS_DISTRIBUTION BIT(3) -#define P2P_GROUP_CAPABILITY_CROSS_CONNECTION BIT(4) -#define P2P_GROUP_CAPABILITY_PERSISTENT_RECONNECT BIT(5) -#define P2P_GROUP_CAPABILITY_GROUP_FORMATION BIT(6) - -/* P2P 4.1.6 - GO Intent field definitions */ -#define P2P_GO_INTENT_TIE_BREAKER_FIELD BIT(0) -#define P2P_GO_INTENT_VALUE_MASK BITS(1,7) -#define P2P_GO_INTENT_VALUE_OFFSET 1 - -/* P2P 4.1.12 - Manageability Bitmap definitions */ -#define P2P_DEVICE_MANAGEMENT BIT(0) - -/* P2P 4.1.14 - CTWindow and OppPS Parameters definitions */ -#define P2P_CTW_OPPPS_PARAM_OPPPS_FIELD BIT(7) -#define P2P_CTW_OPPPS_PARAM_CTWINDOW_MASK BITS(0,6) - - -#define ELEM_MAX_LEN_P2P_FOR_PROBE_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_ID) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL)) - -#define ELEM_MAX_LEN_P2P_FOR_ASSOC_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_INFO)) - - -/* P2P 4.1.16 - P2P Client Infor Descriptor */ -#define P2P_CLIENT_INFO_DESC_HDR_LEN 1 /* Length(1 octets) */ - -/* P2P 4.1.20 - P2P Invitation Flags Attribute*/ -#define P2P_INVITATION_FLAGS_INVITATION_TYPE BIT(0) -#define P2P_INVITATION_TYPE_INVITATION 0 -#define P2P_INVITATION_TYPE_REINVOKE 1 -//3 /* --------------- WPS Data Element Definitions --------------- */ -/* P2P 4.2.2 - General WSC Attribute */ -#define WSC_ATTRI_HDR_LEN 4 /* ID(2 octet) + Length(2 octets) */ -#define WSC_ATTRI_MAX_LEN_VERSION 1 -#define WSC_ATTRI_MAX_LEN_DEVICE_PASSWORD_ID 2 -#define WSC_ATTRI_LEN_CONFIG_METHOD 2 - -/* WPS 11 - Data Element Definitions */ -#define WPS_ATTRI_ID_VERSION 0x104A -#define WPS_ATTRI_ID_CONFIGURATION_METHODS 0x1008 -#define WPS_ATTRI_ID_DEVICE_PASSWORD 0x1012 -#define WPS_ATTRI_ID_DEVICE_NAME 0x1011 -#define WPS_ATTRI_ID_PRI_DEVICE_TYPE 0x1054 -#define WPS_ATTRI_ID_SEC_DEVICE_TYPE 0x1055 - -#define WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE 300 - -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ - -#define WPS_ATTRI_CFG_METHOD_USBA BIT(0) -#define WPS_ATTRI_CFG_METHOD_ETHERNET BIT(1) -#define WPS_ATTRI_CFG_METHOD_LABEL BIT(2) -#define WPS_ATTRI_CFG_METHOD_DISPLAY BIT(3) -#define WPS_ATTRI_CFG_METHOD_EXT_NFC BIT(4) -#define WPS_ATTRI_CFG_METHOD_INT_NFC BIT(5) -#define WPS_ATTRI_CFG_METHOD_NFC_IF BIT(6) -#define WPS_ATTRI_CFG_METHOD_PUSH_BUTTON BIT(7) -#define WPS_ATTRI_CFG_METHOD_KEYPAD BIT(8) - - -#define P2P_FLAGS_PROVISION_COMPLETE 0x00000001 -#define P2P_FLAGS_PROVISION_DISCOVERY_COMPLETE 0x00000002 -#define P2P_FLAGS_PROVISION_DISCOVERY_WAIT_RESPONSE 0x00000004 -#define P2P_FLAGS_PROVISION_DISCOVERY_RESPONSE_WAIT 0x00000008 -#define P2P_FLAGS_MASK_PROVISION 0x00000017 -#define P2P_FLAGS_MASK_PROVISION_COMPLETE 0x00000015 -#define P2P_FLAGS_PROVISION_DISCOVERY_INDICATED 0x00000010 -#define P2P_FLAGS_INVITATION_TOBE_GO 0x00000100 -#define P2P_FLAGS_INVITATION_TOBE_GC 0x00000200 -#define P2P_FLAGS_INVITATION_SUCCESS 0x00000400 -#define P2P_FLAGS_INVITATION_WAITING_TARGET 0x00000800 -#define P2P_FLAGS_MASK_INVITATION 0x00000F00 -#define P2P_FLAGS_FORMATION_ON_GOING 0x00010000 -#define P2P_FLAGS_FORMATION_LOCAL_PWID_RDY 0x00020000 -#define P2P_FLAGS_FORMATION_TARGET_PWID_RDY 0x00040000 -#define P2P_FLAGS_FORMATION_COMPLETE 0x00080000 -#define P2P_FLAGS_MASK_FORMATION 0x000F0000 -#define P2P_FLAGS_DEVICE_DISCOVER_REQ 0x00100000 -#define P2P_FLAGS_DEVICE_DISCOVER_DONE 0x00200000 -#define P2P_FLAGS_DEVICE_INVITATION_WAIT 0x00400000 -#define P2P_FLAGS_DEVICE_SERVICE_DISCOVER_WAIT 0x00800000 -#define P2P_FLAGS_MASK_DEVICE_DISCOVER 0x00F00000 - -#define P2P_FLAGS_DEVICE_FORMATION_REQUEST 0x01000000 - - -/* MACRO for flag operation */ -#define SET_FLAGS(_FlagsVar, _BitsToSet) \ - (_FlagsVar) = ((_FlagsVar) | (_BitsToSet)) - -#define TEST_FLAGS(_FlagsVar, _BitsToCheck) \ - (((_FlagsVar) & (_BitsToCheck)) == (_BitsToCheck)) - -#define CLEAR_FLAGS(_FlagsVar, _BitsToClear) \ - (_FlagsVar) &= ~(_BitsToClear) - - - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_I 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_II 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_III 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_IV 0 - -#define CFG_DISABLE_DELAY_PROVISION_DISCOVERY 0 - -#define CFG_CONNECTION_POLICY_2_0 0 - -/* Device Password ID */ -enum wps_dev_password_id { - DEV_PW_DEFAULT = 0x0000, - DEV_PW_USER_SPECIFIED = 0x0001, - DEV_PW_MACHINE_SPECIFIED = 0x0002, - DEV_PW_REKEY = 0x0003, - DEV_PW_PUSHBUTTON = 0x0004, - DEV_PW_REGISTRAR_SPECIFIED = 0x0005 -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -//3 /* --------------- WFA P2P IE and Attributes --------------- */ - -/* P2P 4.1.1 - P2P Information Element */ -typedef struct _IE_P2P_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 aucP2PAttributes[1]; /* P2P Attributes */ -} __KAL_ATTRIB_PACKED__ IE_P2P_T, *P_IE_P2P_T; - -/* P2P 4.1.1 - General P2P Attribute */ -typedef struct _P2P_ATTRIBUTE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRIBUTE_T, ATTRIBUTE_HDR_T, *P_P2P_ATTRIBUTE_T, *P_ATTRIBUTE_HDR_T; - - -/* P2P 4.1.2 - P2P Status Attribute */ -typedef struct _P2P_ATTRI_STATUS_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucStatusCode; /* Status Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_STATUS_T, *P_P2P_ATTRI_STATUS_T; - - -/* P2P 4.1.3 - P2P Minor Reason Code Attribute */ -typedef struct _P2P_ATTRI_REASON_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucMinorReasonCode; /* Minor Reason Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_REASON_T, *P_P2P_ATTRI_REASON_T; - - -/* P2P 4.1.4 - P2P Capability Attribute */ -typedef struct _P2P_ATTRI_CAPABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_8 ucGroupCap; /* Group Capability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CAPABILITY_T, *P_P2P_ATTRI_CAPABILITY_T; - - -/* P2P 4.1.5 - P2P Device ID Attribute */ -typedef struct _P2P_ATTRI_DEV_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_ID_T, *P_P2P_ATTRI_DEV_ID_T; - - -/* P2P 4.1.6 - Group Owner Intent Attribute */ -typedef struct _P2P_ATTRI_GO_INTENT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOIntent; /* Group Owner Intent */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GO_INTENT_T, *P_P2P_ATTRI_GO_INTENT_T; - - -/* P2P 4.1.7 - Configuration Timeout Attribute */ -typedef struct _P2P_ATTRI_CFG_TIMEOUT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOCfgTimeout; /* GO Configuration Timeout */ - UINT_8 ucClientCfgTimeout; /* Client Configuration Timeout */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CFG_TIMEOUT_T, *P_P2P_ATTRI_CFG_TIMEOUT_T; - - -/* P2P 4.1.8 - Listen Channel Attribute */ -typedef struct _P2P_ATTRI_LISTEN_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_LISTEN_CHANNEL_T, *P_P2P_ATTRI_LISTEN_CHANNEL_T; - - -/* P2P 4.1.9 - P2P Group BSSID Attribute */ -typedef struct _P2P_ATTRI_GROUP_BSSID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBssid[MAC_ADDR_LEN]; /* P2P Group BSSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_BSSID_T, *P_P2P_ATTRI_GROUP_BSSID_T; - - -/* P2P 4.1.10 - Extended Listen Timing Attribute */ -typedef struct _P2P_ATTRI_EXT_LISTEN_TIMING_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2AvailPeriod; /* Availability Period */ - UINT_16 u2AvailInterval; /* Availability Interval */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_EXT_LISTEN_TIMING_T, *P_P2P_ATTRI_EXT_LISTEN_TIMING_T; - - -/* P2P 4.1.11 - Intended P2P Interface Address Attribute */ -typedef struct _P2P_ATTRI_INTENDED_IF_ADDR_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucIfAddr[MAC_ADDR_LEN];/* P2P Interface Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTENDED_IF_ADDR_T, *P_P2P_ATTRI_INTENDED_IF_ADDR_T; - - -/* P2P 4.1.12 - P2P Manageability Attribute */ -typedef struct _P2P_ATTRI_MANAGEABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucManageability; /* P2P Manageability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_MANAGEABILITY_T, *P_P2P_ATTRI_MANAGEABILITY_T; - - -/* P2P 4.1.13 - Channel List Attribute */ -typedef struct _P2P_ATTRI_CHANNEL_LIST_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 aucChannelEntry[1]; /* Channel Entry List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CHANNEL_T, *P_P2P_ATTRI_CHANNEL_T; - -typedef struct _CHANNEL_ENTRY_FIELD_T { - UINT_8 ucRegulatoryClass; /* Regulatory Class */ - UINT_8 ucNumberOfChannels; /* Number Of Channels */ - UINT_8 aucChannelList[1]; /* Channel List */ -} __KAL_ATTRIB_PACKED__ CHANNEL_ENTRY_FIELD_T, *P_CHANNEL_ENTRY_FIELD_T; - - -/* P2P 4.1.14 - Notice of Absence Attribute */ -typedef struct _P2P_ATTRI_NOA_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucIndex; /* Index */ - UINT_8 ucCTWOppPSParam; /* CTWindow and OppPS Parameters */ - UINT_8 aucNoADesc[1]; /* NoA Descriptor */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_NOA_T, *P_P2P_ATTRI_NOA_T; - -typedef struct _NOA_DESCRIPTOR_T { - UINT_8 ucCountType; /* Count/Type */ - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} __KAL_ATTRIB_PACKED__ NOA_DESCRIPTOR_T, *P_NOA_DESCRIPTOR_T; - -typedef struct _P2P_ATTRI_DEV_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_INFO_T, *P_P2P_ATTRI_DEV_INFO_T; - -/* WPS 7.1 & 11 WPS TLV Data Format - Device Name */ -typedef struct _DEVICE_NAME_TLV_T { - UINT_16 u2Id; /* WPS Attribute Type */ - UINT_16 u2Length; /* Data Length */ - UINT_8 aucName[32]; /* Device Name */ // TODO: Fixme -} __KAL_ATTRIB_PACKED__ DEVICE_NAME_TLV_T, *P_DEVICE_NAME_TLV_T; - - -/* P2P 4.1.16 - P2P Group Info Attribute */ -typedef struct _P2P_CLIENT_INFO_DESC_T { - UINT_8 ucLength; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucIfAddr[MAC_ADDR_LEN]; /* P2P Interface Address */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_CLIENT_INFO_DESC_T, *P_P2P_CLIENT_INFO_DESC_T; - -typedef struct _P2P_ATTRI_GROUP_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - P2P_CLIENT_INFO_DESC_T arClientDesc[1]; /* P2P Client Info Descriptors */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_INFO_T, *P_P2P_ATTRI_GROUP_INFO_T; - - -/* P2P 4.1.17 - P2P Group ID Attribute */ -typedef struct _P2P_ATTRI_GROUP_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_ID_T, *P_P2P_ATTRI_GROUP_ID_T; - - -/* P2P 4.1.18 - P2P Interface Attribute */ -typedef struct _P2P_ATTRI_INTERFACE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 ucIfAddrCount; /* P2P Interface Address Count */ - UINT_8 aucIfAddrList[MAC_ADDR_LEN];/* P2P Interface Address List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTERFACE_T, *P_P2P_ATTRI_INTERFACE_T; - - -/* P2P 4.1.19 - Operating Channel Attribute */ -typedef struct _P2P_ATTRI_OPERATING_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_OPERATING_CHANNEL_T, *P_P2P_ATTRI_OPERATING_CHANNEL_T; - -/* P2P 4.1.20 - Invitation Flags Attribute */ -typedef struct _P2P_ATTRI_INVITATION_FLAG_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucInviteFlagsBitmap; /* Invitation Flags Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INVITATION_FLAG_T, *P_P2P_ATTRI_INVITATION_FLAG_T; - - - -/* P2P 4.1.1 - General WSC Attribute */ -typedef struct _WSC_ATTRIBUTE_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRIBUTE_T, *P_WSC_ATTRIBUTE_T; - -/* WSC 1.0 Table 28 */ -typedef struct _WSC_ATTRI_VERSION_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucVersion; /* Version 1.0 or 1.1 */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_VERSION_T, *P_WSC_ATTRI_VERSION_T; - -typedef struct _WSC_ATTRI_DEVICE_PASSWORD_ID_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2DevPasswordId; /* Device Password ID */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_DEVICE_PASSWORD_ID_T, *P_WSC_ATTRI_DEVICE_PASSWORD_ID_T; - - -typedef struct _WSC_ATTRI_CONFIGURATION_METHOD_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2ConfigMethods; /* Configure Methods */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_CONFIGURATION_METHOD_T, *P_WSC_ATTRI_CONFIGURATION_METHOD_T; - - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - - -//3 /* --------------- WFA P2P Attributes Handler prototype --------------- */ -typedef UINT_32 (*PFN_APPEND_ATTRI_FUNC)(P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16); - -typedef VOID (*PFN_HANDLE_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T); - -typedef VOID (*PFN_VERIFY_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T, PUINT_16); - -typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC)(P_ADAPTER_T, P_STA_RECORD_T); - - -typedef struct _APPEND_VAR_ATTRI_ENTRY_T { - UINT_16 u2EstimatedFixedAttriLen; /* For fixed length */ - PFN_CALCULATE_VAR_ATTRI_LEN_FUNC pfnCalculateVariableAttriLen; - PFN_APPEND_ATTRI_FUNC pfnAppendAttri; -} APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T; - -typedef enum _ENUM_CONFIG_METHOD_SEL { - ENUM_CONFIG_METHOD_SEL_AUTO, - ENUM_CONFIG_METHOD_SEL_USER, - ENUM_CONFIG_METHOD_SEL_NUM -} ENUM_CONFIG_METHOD_SEL, *P_ENUM_CONFIG_METHOD_SEL; - -typedef enum _ENUM_P2P_FORMATION_POLICY { - ENUM_P2P_FORMATION_POLICY_AUTO = 0, - ENUM_P2P_FORMATION_POLICY_PASSIVE, /* Device would wait GO NEGO REQ instead of sending it actively. */ - ENUM_P2P_FORMATION_POLICY_NUM -} ENUM_P2P_FORMATION_POLICY, P_ENUM_P2P_FORMATION_POLICY; - -typedef enum _ENUM_P2P_INVITATION_POLICY { - ENUM_P2P_INVITATION_POLICY_USER = 0, - ENUM_P2P_INVITATION_POLICY_ACCEPT_FIRST, - ENUM_P2P_INVITATION_POLICY_DENY_ALL, - ENUM_P2P_INVITATION_POLICY_NUM -} ENUM_P2P_INVITATION_POLICY, P_ENUM_P2P_INVITATION_POLICY; - -//3 /* --------------- Data Structure for P2P Operation --------------- */ -//3 /* Session for CONNECTION SETTINGS of P2P */ -struct _P2P_CONNECTION_SETTINGS_T { - UINT_8 ucDevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - ENUM_P2P_FORMATION_POLICY eFormationPolicy; /* Formation Policy. */ - - /*------------WSC Related Param---------------*/ - UINT_16 u2ConfigMethodsSupport; /* Prefered configure method. - * Some device may not have keypad. - */ - ENUM_CONFIG_METHOD_SEL eConfigMethodSelType; - UINT_16 u2TargetConfigMethod; /* Configure method selected by user or auto. */ - UINT_16 u2LocalConfigMethod; /* Configure method of target. */ - BOOLEAN fgIsPasswordIDRdy; - /*------------WSC Related Param---------------*/ - - UINT_8 ucClientConfigTimeout; - UINT_8 ucGoConfigTimeout; - - UINT_8 ucSecondaryDevTypeCount; -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT]; -#endif - - -#if 0 - UINT_8 ucRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ - -#endif -#else - UINT_8 ucRfChannelListSize; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - UINT_8 aucChannelEntriesField[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; -#endif -#endif - - /* Go Intent */ - UINT_8 ucTieBreaker; - UINT_8 ucGoIntent; - - /* For Device Capability */ - BOOLEAN fgSupportServiceDiscovery; - BOOLEAN fgSupportClientDiscoverability; - BOOLEAN fgSupportConcurrentOperation; - BOOLEAN fgSupportInfraManaged; - BOOLEAN fgSupportInvitationProcedure; - - /* For Group Capability */ - BOOLEAN fgSupportPersistentP2PGroup; - BOOLEAN fgSupportIntraBSSDistribution; - BOOLEAN fgSupportCrossConnection; - BOOLEAN fgSupportPersistentReconnect; - - BOOLEAN fgP2pGroupLimit; - - BOOLEAN fgSupportOppPS; - UINT_16 u2CTWindow; - - BOOLEAN fgIsScanReqIssued; - BOOLEAN fgIsServiceDiscoverIssued; - - - /*============ Target Device Connection Settings ============*/ - - /* Discover Target Device Info. */ - BOOLEAN fgIsDevId; - BOOLEAN fgIsDevType; - - /* Encryption mode of Target Device */ - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - /* SSID - * 1. AP Mode, this is the desired SSID user specified. - * 2. Client Mode, this is the target SSID to be connected to. - */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - UINT_8 ucSSIDLen; - - /* Operating channel requested. */ - UINT_8 ucOperatingChnl; - ENUM_BAND_T eBand; - - /* Linten channel requested. */ - UINT_8 ucListenChnl; - - /* For device discover address/type. */ - UINT_8 aucTargetDevAddr[MAC_ADDR_LEN]; /* P2P Device Address, for P2P Device Discovery & P2P Connection. */ - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_DEVICE_DESC_T prTargetP2pDesc; -#endif - - UINT_8 ucLastStatus; /* P2P FSM would append status attribute according to this field. */ - - -#if !CFG_DISABLE_DELAY_PROVISION_DISCOVERY - UINT_8 ucLastDialogToken; - UINT_8 aucIndicateDevAddr[MAC_ADDR_LEN]; -#endif - -#if 0 - UINT_8 ucTargetRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucTargetChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ -#endif -#endif - -}; - - -typedef struct _NOA_TIMING_T { - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} NOA_TIMING_T, *P_NOA_TIMING_T; - -typedef enum _ENUM_P2P_IOCTL_T { - P2P_IOCTL_IDLE = 0, - P2P_IOCTL_DEV_DISCOVER, - P2P_IOCTL_INVITATION_REQ, - P2P_IOCTL_SERV_DISCOVER, - P2P_IOCTL_WAITING, - P2P_IOCTL_NUM -} ENUM_P2P_IOCTL_T; - - - -/*---------------- Service Discovery Related -------------------*/ -typedef enum _ENUM_SERVICE_TX_TYPE_T { - ENUM_SERVICE_TX_TYPE_BY_DA, - ENUM_SERVICE_TX_TYPE_BY_CHNL, - ENUM_SERVICE_TX_TYPE_NUM -} ENUM_SERVICE_TX_TYPE_T; - - -typedef struct _SERVICE_DISCOVERY_FRAME_DATA_T { - QUE_ENTRY_T rQueueEntry; - P_MSDU_INFO_T prSDFrame; - ENUM_SERVICE_TX_TYPE_T eServiceType; - UINT_8 ucSeqNum; - union { - - UINT_8 ucChannelNum; - UINT_8 aucPeerAddr[MAC_ADDR_LEN]; - } uTypeData; - BOOLEAN fgIsTxDoneIndicate; -} SERVICE_DISCOVERY_FRAME_DATA_T, *P_SERVICE_DISCOVERY_FRAME_DATA_T; - - - - -struct _P2P_FSM_INFO_T_DEPRECATED { - /* P2P FSM State */ - ENUM_P2P_STATE_T eCurrentState; - - /* Channel */ - BOOLEAN fgIsChannelRequested; - - - - - - - - - - - ENUM_P2P_STATE_T ePreviousState; - - ENUM_P2P_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - - UINT_8 aucTargetIfAddr[PARAM_MAC_ADDR_LEN]; - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - - BOOLEAN fgIsRsponseProbe; /* Indicate if P2P FSM can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfReqMsg; /* Used for SAA FSM request message. */ - - /* Channel Privilege */ - UINT_8 ucSeqNumOfChReq; /* Used for Channel Request message. */ - - - UINT_8 ucSeqNumOfScnMsg; /* Used for SCAN FSM request message. */ - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - UINT_8 ucRxDialogToken; - - /* Timer */ - TIMER_T rDeviceDiscoverTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - - TIMER_T rRejoinTimer; /* A timer used for Action frame timeout usage. */ - - - /* Flag to indicate Provisioning */ - BOOLEAN fgIsConnectionRequested; - - /* Current IOCTL. */ - ENUM_P2P_IOCTL_T eP2pIOCTL; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - /*--------SERVICE DISCOVERY--------*/ - QUE_T rQueueGASRx; /* Input Request/Response. */ - QUE_T rQueueGASTx; /* Output Response. */ - P_SERVICE_DISCOVERY_FRAME_DATA_T prSDRequest; - UINT_8 ucVersionNum; /* GAS packet sequence number for...Action Frame? */ - UINT_8 ucGlobalSeqNum; /* Sequence Number of RX SD packet. */ - /*--------Service DISCOVERY--------*/ - - /*--------DEVICE DISCOVERY---------*/ - UINT_8 aucTargetGroupID[PARAM_MAC_ADDR_LEN]; - UINT_16 u2TargetGroupSsidLen; - UINT_8 aucTargetSsid[32]; - UINT_8 aucSearchingP2pDevice[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDLToken; - /*----------------------------------*/ - - /* Indicating Peer Status. */ - UINT_32 u4Flags; - - /*Indicating current running mode.*/ - BOOLEAN fgIsApMode; - - - /*------------INVITATION------------*/ - ENUM_P2P_INVITATION_POLICY eInvitationRspPolicy; - /*----------------------------------*/ - -}; - - - -struct _P2P_SPECIFIC_BSS_INFO_T { - /* For GO(AP) Mode - Compose TIM IE */ - UINT_16 u2SmallestAID; - UINT_16 u2LargestAID; - UINT_8 ucBitmapCtrl; - //UINT_8 aucPartialVirtualBitmap[MAX_LEN_TIM_PARTIAL_BMP]; - - /* For GC/GO OppPS */ - BOOLEAN fgEnableOppPS; - UINT_16 u2CTWindow; - - /* For GC/GO NOA */ - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - NOA_TIMING_T arNoATiming[P2P_MAXIMUM_NOA_COUNT]; - - BOOLEAN fgIsNoaAttrExisted; - - /* For P2P Device */ - UINT_8 ucRegClass; /* Regulatory Class for channel. */ - UINT_8 ucListenChannel; /* Linten Channel only on channels 1, 6 and 11 in the 2.4 GHz. */ - - UINT_8 ucPreferredChannel; /* Operating Channel, should be one of channel list in p2p connection settings. */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - - /* Extened Listen Timing. */ - UINT_16 u2AvailabilityPeriod; - UINT_16 u2AvailabilityInterval; - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - UINT_16 u2IELenForBCN; - UINT_8 aucBeaconIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -// UINT_16 u2IELenForProbeRsp; -// UINT_8 aucProbeRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2IELenForAssocRsp; - UINT_8 aucAssocRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -#else - UINT_16 u2AttributeLen; - UINT_8 aucAttributesCache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2WscAttributeLen; - UINT_8 aucWscAttributesCache[WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; -#endif - UINT_8 aucGroupID[MAC_ADDR_LEN]; - UINT_16 u2GroupSsidLen; - UINT_8 aucGroupSsid[ELEM_MAX_LEN_SSID]; - - PARAM_CUSTOM_NOA_PARAM_STRUC_T rNoaParam; - PARAM_CUSTOM_OPPPS_PARAM_STRUC_T rOppPsParam; - - UINT_16 u2WpaIeLen; - UINT_8 aucWpaIeBuffer[ELEM_HDR_LEN + ELEM_MAX_LEN_WPA]; - -}; - - - - - - - -typedef struct _MSG_P2P_DEVICE_DISCOVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4DevDiscoverTime; /* 0: Infinite, 1~X: in unit of MS. */ - BOOLEAN fgIsSpecificType; -#if CFG_ENABLE_WIFI_DIRECT - P2P_DEVICE_TYPE_T rTargetDeviceType; -#endif - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN]; -} MSG_P2P_DEVICE_DISCOVER_T, *P_MSG_P2P_DEVICE_DISCOVER_T; - - - -typedef struct _MSG_P2P_INVITATION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; /* Target Device ID to be invited. */ -} MSG_P2P_INVITATION_REQUEST_T, *P_MSG_P2P_INVITATION_REQUEST_T; - -typedef struct _MSG_P2P_FUNCTION_SWITCH_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsFuncOn; -} MSG_P2P_FUNCTION_SWITCH_T, *P_MSG_P2P_FUNCTION_SWITCH_T; - -typedef struct _MSG_P2P_SERVICE_DISCOVERY_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; - BOOLEAN fgNeedTxDoneIndicate; - UINT_8 ucSeqNum; -} MSG_P2P_SERVICE_DISCOVERY_REQUEST_T, *P_MSG_P2P_SERVICE_DISCOVERY_REQUEST_T; - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define p2pChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState = (_eNewMediaState)); - -#define ATTRI_ID(_fp) (((P_P2P_ATTRIBUTE_T) _fp)->ucId) -#define ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[0]) | \ - ((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[1] << 8)) - - -#define ATTRI_SIZE(_fp) (P2P_ATTRI_HDR_LEN + ATTRI_LEN(_fp)) - -#define P2P_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += ATTRI_SIZE(_pucAttriBuf)) ) - - -#define P2P_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WSC_ATTRI_ID(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[1])) - -#define WSC_ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[1])) - - -#define WSC_ATTRI_SIZE(_fp) (WSC_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp)) - -#define WSC_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WSC_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WSC_ATTRI_SIZE(_pucAttriBuf)) ) - -#define WSC_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WFD_ATTRI_ID(_fp) (((P_WFD_ATTRIBUTE_T) _fp)->ucElemID) - -#define WFD_ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[1])) - -#define WFD_ATTRI_SIZE(_fp) (WFD_ATTRI_HDR_LEN + WFD_ATTRI_LEN(_fp)) - -#define WFD_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WFD_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WFD_ATTRI_SIZE(_pucAttriBuf)) ) - - - - -#if DBG - #define ASSERT_BREAK(_exp) \ - { \ - if (!(_exp)) { \ - ASSERT(FALSE); \ - break; \ - } \ - } - -#else - #define ASSERT_BREAK(_exp) -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*======P2P State======*/ -VOID -p2pStateInit_LISTEN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prSP2pBssInfo, - IN UINT_8 ucListenChannel - ); - -VOID -p2pStateAbort_LISTEN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_SEARCH_SCAN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_GO_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_GC_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_CONFIGURATION( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecBssInfo - ); - -VOID -p2pStateAbort_CONFIGURATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_JOIN( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_JOIN( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P Functions ======*/ - - -VOID -p2pFuncInitGO( - IN P_ADAPTER_T prAdapter - ); - - - - - -VOID -p2pFuncDisconnect( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -VOID -p2pFuncSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ); - -VOID -p2pFuncRunEventProvisioningComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -p2pFuncSetGroupID( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucGroupID, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen - ); - - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityReqFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityRspFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - - -UINT_8 -p2pFuncGetVersionNumOfSD( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P FSM ======*/ -VOID -p2pFsmRunEventConnectionRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventRxGroupNegotiationReqFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationConfirmTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -WLAN_STATUS -p2pFsmRunEventInvitationRequestTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - - -VOID -p2pFsmRunEventRxDeauthentication( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxDisassociation( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventBeaconTimeout( - IN P_ADAPTER_T prAdapter - ); - - - -WLAN_STATUS -p2pFsmRunEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -#if 1 -#endif - - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmRunEventConnectionAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionTrigger( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventP2PFunctionSwitch( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChGrant( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionPause( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN UINT_8 aucTargetAddr[] - ); - -VOID -p2pUpdateBssInfoForJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmInit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmUninit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmSteps( - IN P_ADAPTER_T prAdapter, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStartGO( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pAssignSsid( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -VOID -p2pFsmRunEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventIOReqTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventSearchPeriodTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventFsmTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventRejoinTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - - - - -/*=============== P2P Function Related ================*/ - -/*=============== P2P Function Related ================*/ - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -p2pTest( - IN P_ADAPTER_T prAdapter - ); -#endif /* CFG_TEST_WIFI_DIRECT_GO */ - - - - -VOID -p2pGenerateP2P_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -VOID -p2pGenerateP2P_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - - -UINT_32 -p2pCalculateP2P_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pCalculateP2P_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pCalculateP2P_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -VOID -p2pGenerateWSC_IEForProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateWSC_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_16 -p2pCalculateWSC_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -UINT_32 -p2pCalculateWSC_IELenForProbeResp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriStatus( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_32 -p2pAppendAttriCapability( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGoIntent( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriCfgTimeout( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGroupBssid( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriDeviceIDForBeacon( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForProbeReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForDeviceDiscoveryReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriListenChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriIntendP2pIfAddr( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriChannelList( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenChannelList( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriNoA( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriGroupInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenGroupInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pAppendAttriP2pGroupID( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriOperatingChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriInvitationFlag( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -VOID -p2pGenerateWscIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -UINT_32 -p2pAppendAttriWSCConfigMethod ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCVersion ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegReqDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegRspDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -WLAN_STATUS -p2pGetWscAttriList( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -WLAN_STATUS -p2pGetAttriList ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pSendProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFsmRunEventRxProbeRequestFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ); - -WLAN_STATUS -p2pRxPublicActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationRspFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationCfmFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -#if 0 // frog -BOOLEAN -scanMatchFilterOfP2P ( - IN P_SW_RFB_T prSWRfb, - IN PP_BSS_DESC_T pprBssDesc - ); -#endif // frog - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -VOID -p2pFuncCompleteIOCTL( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rWlanStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -p2pDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(IE_P2P_T) == (2+4+1)); // all UINT_8 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRIBUTE_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_STATUS_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_REASON_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CAPABILITY_T) == (3+2)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_ID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GO_INTENT_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CFG_TIMEOUT_T) == (3+2)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#endif - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_BSSID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_EXT_LISTEN_TIMING_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTENDED_IF_ADDR_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_MANAGEABILITY_T) == (3+1)); - - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CHANNEL_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(CHANNEL_ENTRY_FIELD_T) == 3); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_NOA_T) == (3+3)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(NOA_DESCRIPTOR_T) == 13); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_TYPE_T) == 8); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_INFO_T) == (3+6+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_NAME_TLV_T) == (4+32)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_CLIENT_INFO_DESC_T) == (1+6+6+1+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_INFO_T) == (3+(1+6+6+1+2+8+1+8))); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_ID_T) == (3+38)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTERFACE_T) == (3+13)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#endif - - - return; -} -#endif /* _lint */ - -#endif /* _P2P_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_func.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_func.h deleted file mode 100755 index d7676058572a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_func.h +++ /dev/null @@ -1,350 +0,0 @@ -#ifndef _P2P_FUNC_H -#define _P2P_FUNC_H - - -VOID -p2pFuncRequestScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - -VOID -p2pFuncCancelScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - - -VOID -p2pFuncStartGO( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ); - - - -VOID -p2pFuncAcquireCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - - -VOID -p2pFuncReleaseCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -p2pFuncSetChannel( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ); - - -BOOLEAN -p2pFuncRetryJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ); - -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - - -WLAN_STATUS -p2pFuncTxMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ); - -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ); - - -BOOLEAN -p2pFuncValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -p2pFuncValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - - -VOID -p2pFuncResetStaRecStatus( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncInitConnectionSettings( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ); - - -BOOLEAN -p2pFuncParseCheckForP2PInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -BOOLEAN -p2pFuncValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -p2pFuncValidateRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFuncIsAPMode( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFuncParseBeaconContent( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ); - - -P_BSS_DESC_T -p2pFuncKeepOnConnection( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - -VOID -p2pFuncStoreAssocRspIEBuffer( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -p2pFuncMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ); - -VOID -p2pFuncUpdateMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ); - - -VOID -p2pFuncGetStationInfo( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ); - -BOOLEAN -p2pFuncGetAttriList( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ); - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateExtra_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pFuncGenerateP2p_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateWSC_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateP2p_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateWSC_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateWSC_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - - -UINT_32 -p2pFuncCalculateP2P_IELen( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -VOID -p2pFuncGenerateP2P_IE( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pFuncAppendAttriExtListenTiming( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -VOID -p2pFuncDissolve( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - - -P_IE_HDR_T -p2pFuncGetSpecIE( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ); - - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_16 u2AttriID - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_ie.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_ie.h deleted file mode 100755 index e6320542aaed..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_ie.h +++ /dev/null @@ -1,232 +0,0 @@ -#ifndef _P2P_IE_H -#define _P2P_IE_H - -#if CFG_SUPPORT_WFD - -#define ELEM_MAX_LEN_WFD 62 // TODO: Move to appropriate place - - -/*---------------- WFD Data Element Definitions ----------------*/ -/* WFD 4.1.1 - WFD IE format */ -#define WFD_OUI_TYPE_LEN 4 -#define WFD_IE_OUI_HDR (ELEM_HDR_LEN + WFD_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */ - -/* WFD 4.1.1 - General WFD Attribute */ -#define WFD_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */ - -/* WFD Attribute Code */ -#define WFD_ATTRI_ID_DEV_INFO 0 -#define WFD_ATTRI_ID_ASSOC_BSSID 1 -#define WFD_ATTRI_ID_COUPLED_SINK_INFO 6 -#define WFD_ATTRI_ID_EXT_CAPABILITY 7 -#define WFD_ATTRI_ID_SESSION_INFO 9 -#define WFD_ATTRI_ID_ALTER_MAC_ADDRESS 10 - -/* Maximum Length of WFD Attributes */ -#define WFD_ATTRI_MAX_LEN_DEV_INFO 6 /* 0 */ -#define WFD_ATTRI_MAX_LEN_ASSOC_BSSID 6 /* 1 */ -#define WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO 7 /* 6 */ -#define WFD_ATTRI_MAX_LEN_EXT_CAPABILITY 2 /* 7 */ -#define WFD_ATTRI_MAX_LEN_SESSION_INFO 0 /* 9 */ /* 24 * #Clients */ -#define WFD_ATTRI_MAX_LEN_ALTER_MAC_ADDRESS 6 /* 10 */ - - - - - -/* WFD 1.10 5.1.1 */ -typedef struct _IE_WFD_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 aucWFDAttributes[1]; /* WFD Subelement */ -} __KAL_ATTRIB_PACKED__ IE_WFD_T, *P_IE_WFD_T; - -typedef struct _WFD_ATTRIBUTE_T { - UINT_8 ucElemID; /* Subelement ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ WFD_ATTRIBUTE_T, *P_WFD_ATTRIBUTE_T; - -typedef struct _WFD_DEVICE_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_16 u2WfdDevInfo; - UINT_16 u2SessionMgmtCtrlPort; - UINT_16 u2WfdDevMaxSpeed; -} __KAL_ATTRIB_PACKED__ WFD_DEVICE_INFORMATION_IE_T, *P_WFD_DEVICE_INFORMATION_IE_T; - -typedef struct _WFD_ASSOCIATED_BSSID_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_8 aucAssocBssid[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_ASSOCIATED_BSSID_IE_T, *P_WFD_ASSOCIATED_BSSID_IE_T; - -typedef struct _WFD_COUPLE_SINK_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_8 ucCoupleSinkStatusBp; - UINT_8 aucCoupleSinkMac[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_COUPLE_SINK_INFORMATION_IE_T, *P_WFD_COUPLE_SINK_INFORMATION_IE_T; - -typedef struct _WFD_EXTENDED_CAPABILITY_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_16 u2WfdExtCapabilityBp; -} -__KAL_ATTRIB_PACKED__ WFD_EXTENDED_CAPABILITY_IE_T, *P_WFD_EXTENDED_CAPABILITY_IE_T; - -typedef struct _WFD_SESSION_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - PUINT_8 pucWfdDevInfoDesc[1]; -} __KAL_ATTRIB_PACKED__ WFD_SESSION_INFORMATION_IE_T, *P_WFD_SESSION_INFORMATION_IE_T; - -typedef struct _WFD_DEVICE_INFORMATION_DESCRIPTOR_T { - UINT_8 ucLength; - UINT_8 aucDevAddr[MAC_ADDR_LEN]; - UINT_8 aucAssocBssid[MAC_ADDR_LEN]; - UINT_16 u2WfdDevInfo; - UINT_16 u2WfdDevMaxSpeed; - UINT_8 ucCoupleSinkStatusBp; - UINT_8 aucCoupleSinkMac[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_DEVICE_INFORMATION_DESCRIPTOR_T, *P_WFD_DEVICE_INFORMATION_DESCRIPTOR_T; - - -#endif - - -UINT_32 -p2pCalculate_IEForAssocReq( - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pGenerate_IEForAssocReq( - - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#if CFG_SUPPORT_WFD - -UINT_32 -wfdFuncAppendAttriDevInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriAssocBssid( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriCoupledSinkInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriExtCapability( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncCalculateAttriLenSessionInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -wfdFuncAppendAttriSessionInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncCalculateWfdIELenForProbeResp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -wfdFuncGenerateWfdIEForProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -wfdFuncCalculateWfdIELenForAssocReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -UINT_32 -wfdFuncCalculateWfdIELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -wfdFuncCalculateWfdIELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#endif - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_rlm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_rlm.h deleted file mode 100755 index fe20ac38048f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_rlm.h +++ /dev/null @@ -1,109 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm.h#1 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - - - - -#ifndef _P2P_RLM_H -#define _P2P_RLM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -VOID -rlmFuncInitialChannelList( - IN P_ADAPTER_T prAdapter - ); - -VOID -rlmFuncCommonChannelList( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ); - -UINT_8 -rlmFuncFindOperatingClass( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ); - -BOOLEAN -rlmFuncFindAvailableChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ); - -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_rlm_obss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_rlm_obss.h deleted file mode 100755 index fa93d94decde..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_rlm_obss.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - - - -#ifndef _P2P_RLM_OBSS_H -#define _P2P_RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_scan.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_scan.h deleted file mode 100755 index 8ba3199f4b02..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_scan.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_scan.h#1 $ -*/ - -/*! \file "scan.h" - \brief - -*/ - - - - -#ifndef _P2P_SCAN_H -#define _P2P_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ); - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ); - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scnEventReturnChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ); - -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -VOID -scanRemoveAllP2pBssDesc( - P_ADAPTER_T prAdapter - ); - -VOID -scanRemoveP2pBssDesc( - P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - - -P_BSS_DESC_T -scanP2pSearchDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ); - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_state.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_state.h deleted file mode 100755 index 22bcf1798ce3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/p2p_state.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef _P2P_STATE_H -#define _P2P_STATE_H - -BOOLEAN -p2pStateInit_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ); - - -VOID -p2pStateAbort_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateAbort_REQING_CHANNEL( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateInit_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -p2pStateAbort_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/privacy.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/privacy.h deleted file mode 100755 index 8f6ffd131803..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/privacy.h +++ /dev/null @@ -1,288 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/privacy.h#1 $ -*/ - -/*! \file privacy.h - \brief This file contains the function declaration for privacy.c. -*/ - - - -/* -** $Log: privacy.h $ - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for auth mode and encryption status setting from build connection command - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for wapi - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the tx done callback handle function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for mac header privacy bit setting - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the structure for parsing the EAPoL frame - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the class error function parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection structure - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _PRIVACY_H -#define _PRIVACY_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_KEY_NUM 4 -#define WEP_40_LEN 5 -#define WEP_104_LEN 13 -#define LEGACY_KEY_MAX_LEN 16 -#define CCMP_KEY_LEN 16 -#define TKIP_KEY_LEN 32 -#define MAX_KEY_LEN 32 -#define MIC_RX_KEY_OFFSET 16 -#define MIC_TX_KEY_OFFSET 24 -#define MIC_KEY_LEN 8 - -#define WEP_KEY_ID_FIELD BITS(0,29) -#define KEY_ID_FIELD BITS(0,7) - -#define IS_TRANSMIT_KEY BIT(31) -#define IS_UNICAST_KEY BIT(30) -#define IS_AUTHENTICATOR BIT(28) - -#define CIPHER_SUITE_NONE 0 -#define CIPHER_SUITE_WEP40 1 -#define CIPHER_SUITE_TKIP 2 -#define CIPHER_SUITE_TKIP_WO_MIC 3 -#define CIPHER_SUITE_CCMP 4 -#define CIPHER_SUITE_WEP104 5 -#define CIPHER_SUITE_BIP 6 -#define CIPHER_SUITE_WEP128 7 -#define CIPHER_SUITE_WPI 8 - -#define WPA_KEY_INFO_KEY_TYPE BIT(3) /* 1 = Pairwise, 0 = Group key */ -#define WPA_KEY_INFO_MIC BIT(8) -#define WPA_KEY_INFO_SECURE BIT(9) - -#define MASK_2ND_EAPOL (WPA_KEY_INFO_KEY_TYPE | WPA_KEY_INFO_MIC) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _IEEE_802_1X_HDR { - UINT_8 ucVersion; - UINT_8 ucType; - UINT_16 u2Length; - /* followed by length octets of data */ -} IEEE_802_1X_HDR, *P_IEEE_802_1X_HDR; - -typedef struct _EAPOL_KEY { - UINT_8 ucType; - /* Note: key_info, key_length, and key_data_length are unaligned */ - UINT_8 aucKeyInfo[2]; /* big endian */ - UINT_8 aucKeyLength[2]; /* big endian */ - UINT_8 aucReplayCounter[8]; - UINT_8 aucKeyNonce[16]; - UINT_8 aucKeyIv[16]; - UINT_8 aucKeyRsc[8]; - UINT_8 aucKeyId[8]; /* Reserved in IEEE 802.11i/RSN */ - UINT_8 aucKeyMic[16]; - UINT_8 aucKeyDataLength[2]; /* big endian */ - /* followed by key_data_length bytes of key_data */ -} EAPOL_KEY, *P_EAPOL_KEY; - -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; - -#if 0 -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -secInit( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ); - -VOID -secSetPortBlocked( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPort - ); - -BOOL -secCheckClassError( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ); - -BOOL -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -secRxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -secSetCipherSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ); - -BOOL -secProcessEAPOL( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen - ); - -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T pMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ); - -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ); - -VOID -secClearPmkid( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secRsnKeyHandshakeEnabled( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secTransmitKeyExist( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secEnabledInAis( - IN P_ADAPTER_T prAdapter - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRIVACY_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rate.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rate.h deleted file mode 100755 index 74c4bb0fc440..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rate.h +++ /dev/null @@ -1,111 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rate.h#1 $ -*/ - -/*! \file rate.h - \brief This file contains the rate utility function of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: rate.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _RATE_H -#define _RATE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in rate.c */ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ); - -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ); - -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ); - -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RATE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm.h deleted file mode 100755 index 6cd5c86c8538..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm.h +++ /dev/null @@ -1,464 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm.h#2 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - - - -/* -** $Log: rlm.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cm.chang - * [WCXRP00000114] [MT6620 Wi-Fi] [Driver] Fix compiling warning in Linux about RLM network index checking - * Enum member cannot be used as compiling option decision in Linux - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX HT GF compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 17 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * MT6620 does not support L-SIG TXOP - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Move default value of HT capability to rlm.h - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Modify the prototype of rlmRecAssocRspHtInfo() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add several function prototypes for HT operation - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -#ifndef _RLM_H -#define _RLM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ELEM_EXT_CAP_DEFAULT_VAL \ - (ELEM_EXT_CAP_20_40_COEXIST_SUPPORT /*| ELEM_EXT_CAP_PSMP_CAP*/) - - -#if CFG_SUPPORT_RX_STBC - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_1_SS -#else - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_NO_SUPPORTED -#endif - -#if CFG_SUPPORT_RX_SGI - #define FIELD_HT_CAP_INFO_SGI_20M HT_CAP_INFO_SHORT_GI_20M - #define FIELD_HT_CAP_INFO_SGI_40M HT_CAP_INFO_SHORT_GI_40M -#else - #define FIELD_HT_CAP_INFO_SGI_20M 0 - #define FIELD_HT_CAP_INFO_SGI_40M 0 -#endif - -#if CFG_SUPPORT_RX_HT_GF - #define FIELD_HT_CAP_INFO_HT_GF HT_CAP_INFO_HT_GF -#else - #define FIELD_HT_CAP_INFO_HT_GF 0 -#endif - -#define HT_CAP_INFO_DEFAULT_VAL \ - (HT_CAP_INFO_SUP_CHNL_WIDTH | FIELD_HT_CAP_INFO_HT_GF | \ - FIELD_HT_CAP_INFO_SGI_20M | FIELD_HT_CAP_INFO_SGI_40M | \ - FIELD_HT_CAP_INFO_RX_STBC | HT_CAP_INFO_DSSS_CCK_IN_40M) - - - -#define AMPDU_PARAM_DEFAULT_VAL \ - (AMPDU_PARAM_MAX_AMPDU_LEN_64K | AMPDU_PARAM_MSS_NO_RESTRICIT) - - -#define SUP_MCS_TX_DEFAULT_VAL \ - SUP_MCS_TX_SET_DEFINED /* TX defined and TX/RX equal (TBD) */ - -#if CFG_SUPPORT_MFB - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_BOTH -#else - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_NO_FB -#endif - -#if CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_RDR HT_EXT_CAP_RD_RESPONDER -#else - #define FIELD_HT_EXT_CAP_RDR 0 -#endif - -#if CFG_SUPPORT_MFB || CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_HTC HT_EXT_CAP_HTC_SUPPORT -#else - #define FIELD_HT_EXT_CAP_HTC 0 -#endif - -#define HT_EXT_CAP_DEFAULT_VAL \ - (HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE | \ - FIELD_HT_EXT_CAP_MFB | FIELD_HT_EXT_CAP_HTC | \ - FIELD_HT_EXT_CAP_RDR) - -#define TX_BEAMFORMING_CAP_DEFAULT_VAL 0 -#define ASEL_CAP_DEFAULT_VAL 0 - - -/* Define bandwidth from user setting */ -#define CONFIG_BW_20_40M 0 -#define CONFIG_BW_20M 1 /* 20MHz only */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* It is used for RLM module to judge if specific network is valid - * Note: Ad-hoc mode of AIS is not included now. (TBD) - */ -#define RLM_NET_PARAM_VALID(_prBssInfo) \ - (IS_BSS_ACTIVE(_prBssInfo) && \ - ((_prBssInfo)->eConnectionState == PARAM_MEDIA_STATE_CONNECTED || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_ACCESS_POINT || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_IBSS || \ - RLM_NET_IS_BOW(_prBssInfo)) \ - ) - -#define RLM_NET_IS_11N(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11N) -#define RLM_NET_IS_11GN(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11GN) - - -/* This macro is used to sweep all 3 networks */ -#define RLM_NET_FOR_EACH(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_INDEX_NUM; \ - (_ucNetIdx)++) - -/* This macro is used to sweep all networks excluding BOW */ -#if CFG_ENABLE_BT_OVER_WIFI - /* Note: value of enum NETWORK_TYPE_BOW_INDEX is validated in - * rlmStuctureCheck(). - */ - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_BOW_INDEX; \ - (_ucNetIdx)++) - - #define RLM_NET_IS_BOW(_prBssInfo) \ - ((_prBssInfo)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) - -#else - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) RLM_NET_FOR_EACH(_ucNetIdx) - #define RLM_NET_IS_BOW(_prBssInfo) (FALSE) - -#endif /* end of CFG_ENABLE_BT_OVER_WIFI */ - - -/* The bandwidth modes are not used anymore. They represent if AP - * can use 20/40 bandwidth, not all modes. (20110411) - */ -#define RLM_AP_IS_BW_40_ALLOWED(_prAdapter, _prBssInfo) \ - (((_prBssInfo)->eBand == BAND_2G4 && \ - (_prAdapter)->rWifiVar.rConnSettings.uc2G4BandwidthMode \ - == CONFIG_BW_20_40M) || \ - ((_prBssInfo)->eBand == BAND_5G && \ - (_prAdapter)->rWifiVar.rConnSettings.uc5GBandwidthMode \ - == CONFIG_BW_20_40M)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -#if CFG_SUPPORT_DFS //add for DFS support -VOID -rlmProcessSpecMgtAction( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmProcessChannelSwitchIE( - P_ADAPTER_T prAdapter, - P_IE_CHANNEL_SWITCH_T prChannelSwitchIE - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#ifndef _lint -__KAL_INLINE__ VOID -rlmDataTypeCheck ( - VOID - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_AIS_INDEX < NETWORK_TYPE_BOW_INDEX); - - #if CFG_ENABLE_WIFI_DIRECT - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_P2P_INDEX < NETWORK_TYPE_BOW_INDEX); - #endif -#endif - - return; -} -#endif /* _lint */ - -#endif /* _RLM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_domain.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_domain.h deleted file mode 100755 index fda01372bf37..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_domain.h +++ /dev/null @@ -1,358 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_domain.h#1 $ -*/ - -/*! \file "rlm_domain.h" - \brief -*/ - - - -/* -** $Log: rlm_domain.h $ - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Declare public rDomainInfo - * -** -*/ - -#ifndef _RLM_DOMAIN_H -#define _RLM_DOMAIN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SUBBAND_NUM 6 - - -#define COUNTRY_CODE_NULL ((UINT_16)0x0) - -/* ISO/IEC 3166-1 two-character country codes */ -#define COUNTRY_CODE_AG (((UINT_16) 'A' << 8) | (UINT_16) 'G') /* Antigua/Barbuda */ -#define COUNTRY_CODE_AI (((UINT_16) 'A' << 8) | (UINT_16) 'I') /* Anguilla */ -#define COUNTRY_CODE_AR (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Argentina */ -#define COUNTRY_CODE_AT (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Austria */ -#define COUNTRY_CODE_AU (((UINT_16) 'A' << 8) | (UINT_16) 'U') /* Australia */ -#define COUNTRY_CODE_AW (((UINT_16) 'A' << 8) | (UINT_16) 'W') /* Aruba */ -#define COUNTRY_CODE_BB (((UINT_16) 'B' << 8) | (UINT_16) 'B') /* Barbados */ -#define COUNTRY_CODE_BE (((UINT_16) 'B' << 8) | (UINT_16) 'E') /* Belgium */ -#define COUNTRY_CODE_BM (((UINT_16) 'B' << 8) | (UINT_16) 'M') /* Bermuda */ -#define COUNTRY_CODE_BO (((UINT_16) 'B' << 8) | (UINT_16) 'O') /* Bolivia */ -#define COUNTRY_CODE_BR (((UINT_16) 'B' << 8) | (UINT_16) 'R') /* Brazil */ -#define COUNTRY_CODE_BS (((UINT_16) 'B' << 8) | (UINT_16) 'S') /* Bahamas */ -#define COUNTRY_CODE_BY (((UINT_16) 'B' << 8) | (UINT_16) 'Y') /* Belarus */ -#define COUNTRY_CODE_CA (((UINT_16) 'C' << 8) | (UINT_16) 'A') /* Canada */ -#define COUNTRY_CODE_CH (((UINT_16) 'C' << 8) | (UINT_16) 'H') /* Switzerland */ -#define COUNTRY_CODE_CL (((UINT_16) 'C' << 8) | (UINT_16) 'L') /* Chile */ -#define COUNTRY_CODE_CN (((UINT_16) 'C' << 8) | (UINT_16) 'N') /* China */ -#define COUNTRY_CODE_CO (((UINT_16) 'C' << 8) | (UINT_16) 'O') /* Colombia */ -#define COUNTRY_CODE_CR (((UINT_16) 'C' << 8) | (UINT_16) 'R') /* Costa Rica */ -#define COUNTRY_CODE_CU (((UINT_16) 'C' << 8) | (UINT_16) 'U') /* Cuba */ -#define COUNTRY_CODE_DE (((UINT_16) 'D' << 8) | (UINT_16) 'E') /* Germany */ -#define COUNTRY_CODE_DK (((UINT_16) 'D' << 8) | (UINT_16) 'K') /* Denmark */ -#define COUNTRY_CODE_DM (((UINT_16) 'D' << 8) | (UINT_16) 'M') /* Dominica */ -#define COUNTRY_CODE_DO (((UINT_16) 'D' << 8) | (UINT_16) 'O') /* Dominican Republic */ -#define COUNTRY_CODE_EC (((UINT_16) 'E' << 8) | (UINT_16) 'C') /* Ecuador */ -#define COUNTRY_CODE_EG (((UINT_16) 'E' << 8) | (UINT_16) 'G') /* Egypt */ -#define COUNTRY_CODE_ES (((UINT_16) 'E' << 8) | (UINT_16) 'S') /* Spain */ -#define COUNTRY_CODE_EU (((UINT_16) 'E' << 8) | (UINT_16) 'U') /* ETSI (Europe) */ -#define COUNTRY_CODE_FI (((UINT_16) 'F' << 8) | (UINT_16) 'I') /* Finland */ -#define COUNTRY_CODE_FR (((UINT_16) 'F' << 8) | (UINT_16) 'R') /* France */ -#define COUNTRY_CODE_GB (((UINT_16) 'G' << 8) | (UINT_16) 'B') /* United Kingdom */ -#define COUNTRY_CODE_GD (((UINT_16) 'G' << 8) | (UINT_16) 'D') /* Grenada */ -#define COUNTRY_CODE_GR (((UINT_16) 'G' << 8) | (UINT_16) 'R') /* Greece */ -#define COUNTRY_CODE_GY (((UINT_16) 'G' << 8) | (UINT_16) 'Y') /* Guyana */ -#define COUNTRY_CODE_HK (((UINT_16) 'H' << 8) | (UINT_16) 'K') /* Hong Kong */ -#define COUNTRY_CODE_HT (((UINT_16) 'H' << 8) | (UINT_16) 'T') /* Haiti */ -#define COUNTRY_CODE_HN (((UINT_16) 'H' << 8) | (UINT_16) 'N') /* Honduras */ -#define COUNTRY_CODE_ID (((UINT_16) 'I' << 8) | (UINT_16) 'D') /* Indonesia */ -#define COUNTRY_CODE_IE (((UINT_16) 'I' << 8) | (UINT_16) 'E') /* Ireland */ -#define COUNTRY_CODE_IL (((UINT_16) 'I' << 8) | (UINT_16) 'L') /* Israel */ -#define COUNTRY_CODE_IN (((UINT_16) 'I' << 8) | (UINT_16) 'N') /* India */ -#define COUNTRY_CODE_IR (((UINT_16) 'I' << 8) | (UINT_16) 'R') /* Iran */ -#define COUNTRY_CODE_IS (((UINT_16) 'I' << 8) | (UINT_16) 'S') /* Iceland */ -#define COUNTRY_CODE_IT (((UINT_16) 'I' << 8) | (UINT_16) 'T') /* Italy */ -#define COUNTRY_CODE_JM (((UINT_16) 'J' << 8) | (UINT_16) 'M') /* Jamaica */ -#define COUNTRY_CODE_JO (((UINT_16) 'J' << 8) | (UINT_16) 'O') /* Jordan */ -#define COUNTRY_CODE_JP (((UINT_16) 'J' << 8) | (UINT_16) 'P') /* Japan */ -#define COUNTRY_CODE_KN (((UINT_16) 'K' << 8) | (UINT_16) 'N') /* Saint Kitts and Nevis */ -#define COUNTRY_CODE_KR (((UINT_16) 'K' << 8) | (UINT_16) 'R') /* South Korea */ -#define COUNTRY_CODE_KW (((UINT_16) 'K' << 8) | (UINT_16) 'W') /* Kuwait */ -#define COUNTRY_CODE_LC (((UINT_16) 'L' << 8) | (UINT_16) 'C') /* Saint Lucia */ -#define COUNTRY_CODE_LI (((UINT_16) 'L' << 8) | (UINT_16) 'I') /* Liechtenstein */ -#define COUNTRY_CODE_LK (((UINT_16) 'L' << 8) | (UINT_16) 'K') /* Sri Lanka */ -#define COUNTRY_CODE_LU (((UINT_16) 'L' << 8) | (UINT_16) 'U') /* Luxembourg */ -#define COUNTRY_CODE_MA (((UINT_16) 'M' << 8) | (UINT_16) 'A') /* Morocco */ -#define COUNTRY_CODE_MD (((UINT_16) 'M' << 8) | (UINT_16) 'D') /* Moldova */ -#define COUNTRY_CODE_MX (((UINT_16) 'M' << 8) | (UINT_16) 'X') /* Mexico */ -#define COUNTRY_CODE_MY (((UINT_16) 'M' << 8) | (UINT_16) 'Y') /* Malaysia */ -#define COUNTRY_CODE_NI (((UINT_16) 'N' << 8) | (UINT_16) 'I') /* Nicaragua */ -#define COUNTRY_CODE_NL (((UINT_16) 'N' << 8) | (UINT_16) 'L') /* Netherlands */ -#define COUNTRY_CODE_NO (((UINT_16) 'N' << 8) | (UINT_16) 'O') /* Norway */ -#define COUNTRY_CODE_NZ (((UINT_16) 'N' << 8) | (UINT_16) 'Z') /* New Zealand */ -#define COUNTRY_CODE_OM (((UINT_16) 'O' << 8) | (UINT_16) 'M') /* Oman */ -#define COUNTRY_CODE_PE (((UINT_16) 'P' << 8) | (UINT_16) 'E') /* Peru */ -#define COUNTRY_CODE_PG (((UINT_16) 'P' << 8) | (UINT_16) 'G') /* Papua New Guinea */ -#define COUNTRY_CODE_PH (((UINT_16) 'P' << 8) | (UINT_16) 'H') /* Philippines */ -#define COUNTRY_CODE_PK (((UINT_16) 'P' << 8) | (UINT_16) 'K') /* Pakistan */ -#define COUNTRY_CODE_PR (((UINT_16) 'P' << 8) | (UINT_16) 'R') /* Puerto Rico */ -#define COUNTRY_CODE_PT (((UINT_16) 'P' << 8) | (UINT_16) 'T') /* Portugal */ -#define COUNTRY_CODE_PY (((UINT_16) 'P' << 8) | (UINT_16) 'Y') /* Paraguay */ -#define COUNTRY_CODE_PZ (((UINT_16) 'P' << 8) | (UINT_16) 'Z') /* Panama */ -#define COUNTRY_CODE_RU (((UINT_16) 'R' << 8) | (UINT_16) 'U') /* Russian */ -#define COUNTRY_CODE_SA (((UINT_16) 'S' << 8) | (UINT_16) 'A') /* Saudi Arabia */ -#define COUNTRY_CODE_SE (((UINT_16) 'S' << 8) | (UINT_16) 'E') /* Sweden */ -#define COUNTRY_CODE_SG (((UINT_16) 'S' << 8) | (UINT_16) 'G') /* Singapore */ -#define COUNTRY_CODE_SR (((UINT_16) 'S' << 8) | (UINT_16) 'R') /* Suriname */ -#define COUNTRY_CODE_TW (((UINT_16) 'T' << 8) | (UINT_16) 'W') /* Taiwan */ -#define COUNTRY_CODE_TH (((UINT_16) 'T' << 8) | (UINT_16) 'H') /* Thailand */ -#define COUNTRY_CODE_TR (((UINT_16) 'T' << 8) | (UINT_16) 'R') /* Turkey */ -#define COUNTRY_CODE_TT (((UINT_16) 'T' << 8) | (UINT_16) 'T') /* Trinidad */ -#define COUNTRY_CODE_UA (((UINT_16) 'U' << 8) | (UINT_16) 'A') /* Ukraine */ -#define COUNTRY_CODE_US (((UINT_16) 'U' << 8) | (UINT_16) 'S') /* United States */ -#define COUNTRY_CODE_UY (((UINT_16) 'U' << 8) | (UINT_16) 'Y') /* Uruguay */ -#define COUNTRY_CODE_VC (((UINT_16) 'V' << 8) | (UINT_16) 'C') /* Saint Vincent */ -#define COUNTRY_CODE_VE (((UINT_16) 'V' << 8) | (UINT_16) 'E') /* Venezuela */ -#define COUNTRY_CODE_VN (((UINT_16) 'V' << 8) | (UINT_16) 'N') /* Vietnam */ - -/* dot11RegDomainsSupportValue */ -#define MIB_REG_DOMAIN_FCC 0x10 /* FCC (US) */ -#define MIB_REG_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define MIB_REG_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define MIB_REG_DOMAIN_SPAIN 0x31 /* Spain */ -#define MIB_REG_DOMAIN_FRANCE 0x32 /* France */ -#define MIB_REG_DOMAIN_JAPAN 0x40 /* MPHPT (Japan) */ -#define MIB_REG_DOMAIN_OTHER 0x00 /* other */ - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Define channel offset in unit of 5MHz bandwidth */ -typedef enum _ENUM_CHNL_SPAN_T { - CHNL_SPAN_5 = 1, - CHNL_SPAN_10 = 2, - CHNL_SPAN_20 = 4, - CHNL_SPAN_40 = 8 -} ENUM_CHNL_SPAN_T, *P_ENUM_CHNL_SPAN_T; - -/* Define BSS operating bandwidth */ -typedef enum _ENUM_CHNL_BW_T { - CHNL_BW_20, - CHNL_BW_20_40, - CHNL_BW_10, - CHNL_BW_5 -} ENUM_CHNL_BW_T, *P_ENUM_CHNL_BW_T; - -#if 0 -/* If channel width is CHNL_BW_20_40, the first channel will be SCA and - * the second channel is SCB, then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - UINT_8 ucRegClass; - ENUM_BAND_T eBand; - ENUM_CHNL_SPAN_T eChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - ENUM_CHNL_BW_T eChannelBw; - BOOLEAN fgDfsNeeded; - BOOLEAN fgIbssProhibited; -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - UINT_16 u2CountryCode; - UINT_16 u2MibRegDomainValue; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; - -#else /* New definition 20110830 */ - -/* In all bands, the first channel will be SCA and the second channel is SCB, - * then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - /* Note1: regulation class depends on operation bandwidth and RF band. - * For example: 2.4GHz, 1~13, 20MHz ==> regulation class = 81 - * 2.4GHz, 1~13, SCA ==> regulation class = 83 - * 2.4GHz, 1~13, SCB ==> regulation class = 84 - * Note2: TX power limit is not specified here because path loss is unknown - */ - UINT_8 ucRegClass; /* Regulation class for 20MHz */ - UINT_8 ucBand; /* Type: ENUM_BAND_T */ - UINT_8 ucChannelSpan; /* Type: ENUM_CHNL_SPAN_T */ - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 ucReserved; /* Type: BOOLEAN (fgDfsNeeded) */ -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - PUINT_16 pu2CountryGroup; - UINT_32 u4CountryNum; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; -#endif - -/* The following definitions are not used yet */ -typedef enum _ENUM_CH_SET_2G4_T { - CH_SET_2G4_NA, - CH_SET_2G4_1_11, - CH_SET_2G4_1_13, - CH_SET_2G4_1_14, - CH_SET_2G4_NUM -} ENUM_CH_SET_2G4_T, *P_ENUM_CH_SET_2G4_T; - -typedef enum _ENUM_CH_SET_UNII_LOW_T { - CH_SET_UNII_LOW_NA, - CH_SET_UNII_LOW_36_48, - CH_SET_UNII_LOW_NUM -} ENUM_CH_SET_UNII_LOW_T, *P_ENUM_CH_SET_UNII_LOW_T; - -typedef enum _ENUM_CH_SET_UNII_MID_T { - CH_SET_UNII_MID_NA, - CH_SET_UNII_MID_52_64, - CH_SET_UNII_MID_NUM -} ENUM_CH_SET_UNII_MID_T, *P_ENUM_CH_SET_UNII_MID_T; - -typedef enum _ENUM_CH_SET_UNII_WW_T { - CH_SET_UNII_WW_NA, - CH_SET_UNII_WW_100_128, - CH_SET_UNII_WW_100_140, - CH_SET_UNII_WW_100_116_132_140, - CH_SET_UNII_WW_NUM -} ENUM_CH_SET_UNII_WW_T, *P_ENUM_CH_SET_UNII_WW_T; - -typedef enum _ENUM_CH_SET_UNII_UPPER_T { - CH_SET_UNII_UPPER_NA, - CH_SET_UNII_UPPER_149_161, - CH_SET_UNII_UPPER_149_165, - CH_SET_UNII_UPPER_149_173, - CH_SET_UNII_UPPER_NUM -} ENUM_CH_SET_UNII_UPPER_T, *P_ENUM_CH_SET_UNII_UPPER_T; - -typedef struct _COUNTRY_CH_SET_T { - ENUM_CH_SET_2G4_T e2G4; - ENUM_CH_SET_UNII_LOW_T eUniiLow; - ENUM_CH_SET_UNII_MID_T eUniiMid; - ENUM_CH_SET_UNII_WW_T eUniiWw; - ENUM_CH_SET_UNII_UPPER_T eUniiUpper; -} COUNTRY_CH_SET_T, *P_COUNTRY_CH_SET_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ); - -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ); - -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_DOMAIN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_obss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_obss.h deleted file mode 100755 index 20533c95762f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_obss.h +++ /dev/null @@ -1,164 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - - - -/* -** $Log: rlm_obss.h $ - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_OBSS_H -#define _RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - - -#define CHNL_LEVEL0 0 -#define CHNL_LEVEL1 1 -#define CHNL_LEVEL2 2 - -#define AFFECTED_CHNL_OFFSET 5 - -#define OBSS_SCAN_MIN_INTERVAL 10 /* In unit of sec */ - -#define PUBLIC_ACTION_MAX_LEN 200 /* In unit of byte */ - -/* P2P GO only */ -/* Define default OBSS Scan parameters (from MIB in spec.) */ -#define dot11OBSSScanPassiveDwell 20 -#define dot11OBSSScanActiveDwell 10 -#define dot11OBSSScanPassiveTotalPerChannel 200 -#define dot11OBSSScanActiveTotalPerChannel 20 -#define dot11BSSWidthTriggerScanInterval 300 /* Unit: sec */ -#define dot11BSSWidthChannelTransitionDelayFactor 5 -#define dot11OBSSScanActivityThreshold 25 - -#define OBSS_20_40M_TIMEOUT (dot11BSSWidthTriggerScanInterval + 10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Control MAC PCO function */ -typedef enum _ENUM_SYS_PCO_PHASE_T { - SYS_PCO_PHASE_DISABLED = 0, - SYS_PCO_PHASE_20M, - SYS_PCO_PHASE_40M -} ENUM_SYS_PCO_PHASE_T, *P_ENUM_SYS_PCO_PHASE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_OBSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_protection.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_protection.h deleted file mode 100755 index 6025b9044740..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rlm_protection.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_protection.h#1 $ -*/ - -/*! \file "rlm_protection.h" - \brief -*/ - - - -/* -** $Log: rlm_protection.h $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_PROTECTION_H -#define _RLM_PROTECTION_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SYS_PROTECT_MODE_T { - SYS_PROTECT_MODE_NONE = 0, /* Mode 0 */ - SYS_PROTECT_MODE_ERP, /* Mode 1 */ - SYS_PROTECT_MODE_NON_HT, /* Mode 2 */ - SYS_PROTECT_MODE_20M, /* Mode 3 */ - - SYS_PROTECT_MODE_NUM -} ENUM_SYS_PROTECT_MODE_T, *P_ENUM_SYS_PROTECT_MODE_T; - -/* This definition follows HT Protection field of HT Operation IE */ -typedef enum _ENUM_HT_PROTECT_MODE_T { - HT_PROTECT_MODE_NONE = 0, - HT_PROTECT_MODE_NON_MEMBER, - HT_PROTECT_MODE_20M, - HT_PROTECT_MODE_NON_HT, - - HT_PROTECT_MODE_NUM -} ENUM_HT_PROTECT_MODE_T, *P_ENUM_HT_PROTECT_MODE_T; - - -typedef enum _ENUM_GF_MODE_T { - GF_MODE_NORMAL = 0, - GF_MODE_PROTECT, - GF_MODE_DISALLOWED, - - GF_MODE_NUM -} ENUM_GF_MODE_T, *P_ENUM_GF_MODE_T; - -typedef enum _ENUM_RIFS_MODE_T { - RIFS_MODE_NORMAL = 0, - RIFS_MODE_DISALLOWED, - - RIFS_MODE_NUM -} ENUM_RIFS_MODE_T, *P_ENUM_RIFS_MODE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_PROTECTION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/roaming_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/roaming_fsm.h deleted file mode 100755 index 2a744f7e3c68..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/roaming_fsm.h +++ /dev/null @@ -1,209 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.h" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - - - -/* -** $Log: roaming_fsm.h $ - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -#ifndef _ROAMING_FSM_H -#define _ROAMING_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Roaming Discovery interval, SCAN result need to be updated */ -#define ROAMING_DISCOVERY_TIMEOUT_SEC 5 // Seconds. - -//#define ROAMING_NO_SWING_RCPI_STEP 5 //rcpi -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_ROAMING_FAIL_REASON_T { - ROAMING_FAIL_REASON_CONNLIMIT = 0, - ROAMING_FAIL_REASON_NOCANDIDATE, - ROAMING_FAIL_REASON_NUM -} ENUM_ROAMING_FAIL_REASON_T; - -/* events of roaming between driver and firmware */ -typedef enum _ENUM_ROAMING_EVENT_T { - ROAMING_EVENT_START = 0, - ROAMING_EVENT_DISCOVERY, - ROAMING_EVENT_ROAM, - ROAMING_EVENT_FAIL, - ROAMING_EVENT_ABORT, - ROAMING_EVENT_NUM -} ENUM_ROAMING_EVENT_T; - -typedef struct _ROAMING_PARAM_T { - UINT_16 u2Event; - UINT_16 u2Data; -} ROAMING_PARAM_T, *P_ROAMING_PARAM_T; - -/**/ -typedef enum _ENUM_ROAMING_STATE_T { - ROAMING_STATE_IDLE = 0, - ROAMING_STATE_DECISION, - ROAMING_STATE_DISCOVERY, - ROAMING_STATE_ROAM, - ROAMING_STATE_NUM -} ENUM_ROAMING_STATE_T; - -typedef struct _ROAMING_INFO_T { - BOOLEAN fgIsEnableRoaming; - - ENUM_ROAMING_STATE_T eCurrentState; - - OS_SYSTIME rRoamingDiscoveryUpdateTime; - -} ROAMING_INFO_T, *P_ROAMING_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if CFG_SUPPORT_ROAMING -#define IS_ROAMING_ACTIVE(prAdapter) \ - (prAdapter->rWifiVar.rRoamingInfo.eCurrentState == ROAMING_STATE_ROAM) -#else -#define IS_ROAMING_ACTIVE(prAdapter) FALSE -#endif /* CFG_SUPPORT_ROAMING */ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ); - -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Reason - ); - -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ROAMING_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rsn.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rsn.h deleted file mode 100755 index e18b201f14d9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/rsn.h +++ /dev/null @@ -1,386 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rsn.h#1 $ -*/ - -/*! \file rsn.h - \brief The wpa/rsn related define, macro and structure are described here. -*/ - - - -/* -** $Log: rsn.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype for generate wap/rsn ie - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function input parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some event function declaration - * - * Nov 26 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the internal data structure for pmkid to rsn.h - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the port control and class error function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the pmkid candidate - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _RSN_H -#define _RSN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* ----- Definitions for Cipher Suite Selectors ----- */ -#define RSN_CIPHER_SUITE_USE_GROUP_KEY 0x00AC0F00 -#define RSN_CIPHER_SUITE_WEP40 0x01AC0F00 -#define RSN_CIPHER_SUITE_TKIP 0x02AC0F00 -#define RSN_CIPHER_SUITE_CCMP 0x04AC0F00 -#define RSN_CIPHER_SUITE_WEP104 0x05AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_CIPHER_SUITE_AES_128_CMAC 0x06AC0F00 -#endif - -#define WPA_CIPHER_SUITE_NONE 0x00F25000 -#define WPA_CIPHER_SUITE_WEP40 0x01F25000 -#define WPA_CIPHER_SUITE_TKIP 0x02F25000 -#define WPA_CIPHER_SUITE_CCMP 0x04F25000 -#define WPA_CIPHER_SUITE_WEP104 0x05F25000 - -/* ----- Definitions for Authentication and Key Management Suite Selectors ----- */ -#define RSN_AKM_SUITE_NONE 0x00AC0F00 -#define RSN_AKM_SUITE_802_1X 0x01AC0F00 -#define RSN_AKM_SUITE_PSK 0x02AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_AKM_SUITE_802_1X_SHA256 0x05AC0F00 -#define RSN_AKM_SUITE_PSK_SHA256 0x06AC0F00 -#endif - -#define WPA_AKM_SUITE_NONE 0x00F25000 -#define WPA_AKM_SUITE_802_1X 0x01F25000 -#define WPA_AKM_SUITE_PSK 0x02F25000 - -#define ELEM_ID_RSN_LEN_FIXED 20 /* The RSN IE len for associate request */ - -#define ELEM_ID_WPA_LEN_FIXED 22 /* The RSN IE len for associate request */ - -#define MASK_RSNIE_CAP_PREAUTH BIT(0) - -#define GET_SELECTOR_TYPE(x) ((UINT_8)(((x) >> 24) & 0x000000FF)) -#define SET_SELECTOR_TYPE(x, y) x = (((x) & 0x00FFFFFF) | (((UINT_32)(y) << 24) & 0xFF000000)) - -#define AUTH_CIPHER_CCMP 0x00000008 - -/* Cihpher suite flags */ -#define CIPHER_FLAG_NONE 0x00000000 -#define CIPHER_FLAG_WEP40 0x00000001 /* BIT 1 */ -#define CIPHER_FLAG_TKIP 0x00000002 /* BIT 2 */ -#define CIPHER_FLAG_CCMP 0x00000008 /* BIT 4 */ -#define CIPHER_FLAG_WEP104 0x00000010 /* BIT 5 */ -#define CIPHER_FLAG_WEP128 0x00000020 /* BIT 6 */ - -#define WAIT_TIME_IND_PMKID_CANDICATE_SEC 6 /* seconds */ -#define TKIP_COUNTERMEASURE_SEC 60 /* seconds */ - -#if CFG_SUPPORT_802_11W -#define RSN_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define RSN_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define RSN_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Flags for PMKID Candidate list structure */ -#define EVENT_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 - - -#define CONTROL_FLAG_UC_MGMT_NO_ENC BIT(5) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RSN_IE(fp) ((P_RSN_INFO_ELEM_T) fp) -#define WPA_IE(fp) ((P_WPA_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -rsnParseRsnIE( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ); - -BOOLEAN -rsnParseWpaIE( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ); - -BOOLEAN -rsnSearchSupportedCipher( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnSearchAKMSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGenerateWpaNoneIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateWPAIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateRSNIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -rsnParseCheckForWFAInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ); - -BOOLEAN -rsnIsSuitableBSS ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_T prBssRsnInfo - ); - -#if CFG_SUPPORT_AAA -void -rsnParserCheckForRSNCCMPPSK ( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ); -#endif - -VOID -rsnTkipHandleMICFailure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ); - -VOID -rsnSelectPmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -rsnUpdatePmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -rsnSearchPmkidEntry( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ); - -BOOLEAN -rsnCheckPmkidCandicate( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnCheckPmkidCache( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGeneratePmkidIndication( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnIndicatePmkidCand( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); -#if CFG_SUPPORT_WPS2 -VOID -rsnGenerateWSCIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif - -#if CFG_SUPPORT_802_11W -UINT_32 -rsnCheckBipKeyInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_8 -rsnCheckSaQueryTimeout( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQueryTimer( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStopSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnSaQueryRequest( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -void -rsnSaQueryAction( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -rsnCheckRxMgmt( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ); -#endif -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RSN_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/scan.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/scan.h deleted file mode 100755 index 85ab71281b58..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/scan.h +++ /dev/null @@ -1,847 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "scan.h" - \brief - -*/ - - - -/* -** $Log: scan.h $ - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 12 2010 yuche.tsai - * NULL - * Add a functio prototype to find p2p descriptor of a bss descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Add function prototype for return channel. - * modify data structure for scan specific device ID or TYPE. (Move from P2P Connection Settings to Scan Param) - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add a option for channel time extention in scan abort command. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Scan status "FIND" is used for P2P FSM find state. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field in SCAN_PARAM_T. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * - * Add new HW CH macro support - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify scanBuildProbeReqFrameCommonIEs() to support P2P SCAN - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Simplify the process of Beacon during SCAN and remove redundant variable in PRE_BSS_DESC_T - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding variable for wapi ap - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove non-used secuirty variavle - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Refine data structure of BSS_DESC_T and PRE_BSS_DESC_T - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add eNetType to rScanParam and revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add ucAvailablePhyTypeSet to BSS_DESC_T - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aucSrcAddress to SCAN_PARAM_T for P2P's Device Address - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security related variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security ie filed for scan parsing - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function declarations of scan_fsm.c - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scan.h to source control -** -*/ - -#ifndef _SCAN_H -#define _SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! Maximum buffer size of SCAN list */ -#define SCN_MAX_BUFFER_SIZE (CFG_MAX_NUM_BSS_LIST * ALIGN_4(sizeof(BSS_DESC_T))) - -#define SCN_RM_POLICY_EXCLUDE_CONNECTED BIT(0) // Remove SCAN result except the connected one. -#define SCN_RM_POLICY_TIMEOUT BIT(1) // Remove the timeout one -#define SCN_RM_POLICY_OLDEST_HIDDEN BIT(2) // Remove the oldest one with hidden ssid -#define SCN_RM_POLICY_SMART_WEAKEST BIT(3) /* If there are more than half BSS which has the - * same ssid as connection setting, remove the weakest one from them - * Else remove the weakest one. - */ -#define SCN_RM_POLICY_ENTIRE BIT(4) // Remove entire SCAN result - -#define SCN_BSS_DESC_SAME_SSID_THRESHOLD 3 /* This is used by POLICY SMART WEAKEST, - * If exceed this value, remove weakest BSS_DESC_T - * with same SSID first in large network. - */ - -#define SCN_BSS_DESC_REMOVE_TIMEOUT_SEC 5 // Second. - /* This is used by POLICY TIMEOUT, - * If exceed this value, remove timeout BSS_DESC_T. - */ - - - - -#define SCN_PROBE_DELAY_MSEC 0 - -#define SCN_ADHOC_BSS_DESC_TIMEOUT_SEC 5 // Second. - -/*----------------------------------------------------------------------------*/ -/* MSG_SCN_SCAN_REQ */ -/*----------------------------------------------------------------------------*/ -#define SCAN_REQ_SSID_WILDCARD BIT(0) -#define SCAN_REQ_SSID_P2P_WILDCARD BIT(1) -#define SCAN_REQ_SSID_SPECIFIED BIT(2) - - -/*----------------------------------------------------------------------------*/ -/* Support Multiple SSID SCAN */ -/*----------------------------------------------------------------------------*/ -#define SCN_SSID_MAX_NUM 4 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SCAN_TYPE_T { - SCAN_TYPE_PASSIVE_SCAN = 0, - SCAN_TYPE_ACTIVE_SCAN, - SCAN_TYPE_NUM -} ENUM_SCAN_TYPE_T, *P_ENUM_SCAN_TYPE_T; - -typedef enum _ENUM_SCAN_STATE_T { - SCAN_STATE_IDLE = 0, - SCAN_STATE_SCANNING, - SCAN_STATE_NUM -} ENUM_SCAN_STATE_T; - -typedef enum _ENUM_SCAN_CHANNEL_T { - SCAN_CHANNEL_FULL = 0, - SCAN_CHANNEL_2G4, - SCAN_CHANNEL_5G, - SCAN_CHANNEL_P2P_SOCIAL, - SCAN_CHANNEL_SPECIFIED, - SCAN_CHANNEL_NUM -} ENUM_SCAN_CHANNEL, *P_ENUM_SCAN_CHANNEL; - -typedef struct _MSG_SCN_FSM_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4Dummy; -} MSG_SCN_FSM_T, *P_MSG_SCN_FSM_T; - - - -/*----------------------------------------------------------------------------*/ -/* BSS Descriptors */ -/*----------------------------------------------------------------------------*/ -struct _BSS_DESC_T { - LINK_ENTRY_T rLinkEntry; - - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ - - BOOLEAN fgIsConnecting; /* If we are going to connect to this BSS - * (JOIN or ROAMING to another BSS), don't - * remove this record from BSS List. - */ - BOOLEAN fgIsConnected; /* If we have connected to this BSS (NORMAL_TR), - * don't removed this record from BSS list. - */ - - BOOLEAN fgIsHiddenSSID; /* When this flag is TRUE, means the SSID - * of this BSS is not known yet. - */ - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - OS_SYSTIME rUpdateTime; - - ENUM_BSS_TYPE_T eBSSType; - - UINT_16 u2CapInfo; - - UINT_16 u2BeaconInterval; - UINT_16 u2ATIMWindow; - - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - BOOLEAN fgIsERPPresent; - BOOLEAN fgIsHTPresent; - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this BSS */ - - UINT_8 ucChannelNum; - - ENUM_CHNL_EXT_T eSco; /* Record bandwidth for association process - Some AP will send association resp by 40MHz BW */ - ENUM_BAND_T eBand; - - UINT_8 ucDTIMPeriod; - - BOOLEAN fgIsLargerTSF; /* This BSS's TimeStamp is larger than us(TCL == 1 in RX_STATUS_T) */ - - UINT_8 ucRCPI; - - UINT_8 ucWmmFlag; /* A flag to indicate this BSS's WMM capability */ - - /*! \brief The srbiter Search State will matched the scan result, - and saved the selected cipher and akm, and report the score, - for arbiter join state, join module will carry this target BSS - to rsn generate ie function, for gen wpa/rsn ie */ - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - - UINT_16 u2RsnCap; - - RSN_INFO_T rRSNInfo; - RSN_INFO_T rWPAInfo; -#if 1//CFG_SUPPORT_WAPI - WAPI_INFO_T rIEWAPI; - BOOL fgIEWAPI; -#endif - BOOL fgIERSN; - BOOL fgIEWPA; - - /*! \brief RSN parameters selected for connection */ - /*! \brief The Select score for final AP selection, - 0, no sec, 1,2,3 group cipher is WEP, TKIP, CCMP */ - UINT_8 ucEncLevel; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PPresent; - P_P2P_DEVICE_DESC_T prP2pDesc; - - UINT_8 aucIntendIfAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ -// UINT_8 ucDevCapabilityBitmap; /* Device Capability Attribute. (P2P_DEV_CAPABILITY_XXXX) */ -// UINT_8 ucGroupCapabilityBitmap; /* Group Capability Attribute. (P2P_GROUP_CAPABILITY_XXXX) */ - - LINK_T rP2pDeviceList; - -// P_LINK_T prP2pDeviceList; - - /* For - * 1. P2P Capability. - * 2. P2P Device ID. ( in aucSrcAddr[] ) - * 3. NOA (TODO:) - * 4. Extend Listen Timing. (Probe Rsp) (TODO:) - * 5. P2P Device Info. (Probe Rsp) - * 6. P2P Group Info. (Probe Rsp) - */ -#endif - - BOOLEAN fgIsIEOverflow; /* The received IE length exceed the maximum IE buffer size */ - UINT_16 u2IELength; /* The byte count of aucIEBuf[] */ - - ULARGE_INTEGER u8TimeStamp; /* Place u8TimeStamp before aucIEBuf[1] to force DW align */ - - UINT_8 aucIEBuf[CFG_IE_BUFFER_SIZE]; -}; - - -typedef struct _SCAN_PARAM_T { /* Used by SCAN FSM */ - /* Active or Passive */ - ENUM_SCAN_TYPE_T eScanType; - - /* Network Type */ - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - /* Specified SSID Type */ - UINT_8 ucSSIDType; - UINT_8 ucSSIDNum; - - /* Length of Specified SSID */ - UINT_8 ucSpecifiedSSIDLen[SCN_SSID_MAX_NUM]; - - /* Specified SSID */ - UINT_8 aucSpecifiedSSID[SCN_SSID_MAX_NUM][ELEM_MAX_LEN_SSID]; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgFindSpecificDev; /* P2P: Discovery Protocol */ - UINT_8 aucDiscoverDevAddr[MAC_ADDR_LEN]; - BOOLEAN fgIsDevType; - P2P_DEVICE_TYPE_T rDiscoverDevType; - - UINT_16 u2PassiveListenInterval; - // TODO: Find Specific Device Type. -#endif /* CFG_SUPPORT_P2P */ - - BOOLEAN fgIsObssScan; - BOOLEAN fgIsScanV2; - - /* Run time flags */ - UINT_16 u2ProbeDelayTime; - - /* channel information */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - - /* Feedback information */ - UINT_8 ucSeqNum; - - /* Information Element */ - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; - -} SCAN_PARAM_T, *P_SCAN_PARAM_T; - -typedef struct _SCAN_INFO_T { - ENUM_SCAN_STATE_T eCurrentState; /* Store the STATE variable of SCAN FSM */ - - OS_SYSTIME rLastScanCompletedTime; - - SCAN_PARAM_T rScanParam; - - UINT_32 u4NumOfBssDesc; - - UINT_8 aucScanBuffer[SCN_MAX_BUFFER_SIZE]; - - LINK_T rBSSDescList; - - LINK_T rFreeBSSDescList; - - LINK_T rPendingMsgList; - - /* Sparse Channel Detection */ - BOOLEAN fgIsSparseChannelValid; - RF_CHANNEL_INFO_T rSparseChannel; - -} SCAN_INFO_T, *P_SCAN_INFO_T; - - -/* Incoming Mailbox Messages */ -typedef struct _MSG_SCN_SCAN_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucSSID[PARAM_MAX_LEN_SSID]; -#if CFG_ENABLE_WIFI_DIRECT - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ -#endif - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ, *P_MSG_SCN_SCAN_REQ; - -typedef struct _MSG_SCN_SCAN_REQ_V2_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDNum; - P_PARAM_SSID_T prSsid; - UINT_16 u2ProbeDelay; - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ_V2, *P_MSG_SCN_SCAN_REQ_V2; - - -typedef struct _MSG_SCN_SCAN_CANCEL_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsChannelExt; -#endif -} MSG_SCN_SCAN_CANCEL, *P_MSG_SCN_SCAN_CANCEL; - -/* Outgoing Mailbox Messages */ -typedef enum _ENUM_SCAN_STATUS_T { - SCAN_STATUS_DONE = 0, - SCAN_STATUS_CANCELLED, - SCAN_STATUS_FAIL, - SCAN_STATUS_BUSY, - SCAN_STATUS_NUM -} ENUM_SCAN_STATUS, *P_ENUM_SCAN_STATUS; - -typedef struct _MSG_SCN_SCAN_DONE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_STATUS eScanStatus; -} MSG_SCN_SCAN_DONE, *P_MSG_SCN_SCAN_DONE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in scan.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Search */ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Search - Alternative */ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Allocation */ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Removal */ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ); - -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/* BSS-DESC State Change */ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -#if 0 -/* BSS-DESC Insertion */ -P_BSS_DESC_T -scanAddToInternalScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb, - IN P_BSS_DESC_T prBssDesc - ); -#endif - -/* BSS-DESC Insertion - ALTERNATIVE */ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -scanBuildProbeReqFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucDesiredSsid, - IN UINT_32 u4DesiredSsidLen, - IN UINT_16 u2SupportedRateSet - ); - -WLAN_STATUS -scanSendProbeReqFrames ( - IN P_ADAPTER_T prAdapter, - IN P_SCAN_PARAM_T prScanParam - ); - -VOID -scanUpdateBssDescForSearch ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in scan_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Command Routines */ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* RX Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ); - -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ); - -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Generation */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Query for sparse channel */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ); - - -#endif /* _SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/sec_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/sec_fsm.h deleted file mode 100755 index 17c651937abc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/sec_fsm.h +++ /dev/null @@ -1,284 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/sec_fsm.h#1 $ -*/ - -/*! \file sec_fsm.h - \brief Declaration of functions and finite state machine for SECURITY Module. - - Function declaration for privacy.c and SEC_STATE for SECURITY FSM. -*/ - - - -/* -** $Log: sec_fsm.h $ - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the deauth Tx done callback parameter - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the reference function declaration - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * delete non-used code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\14 2009-04-06 15:35:47 GMT mtk01088 -** add the variable to set the disable AP selection for privacy check, for wps open networking. -** \main\maintrunk.MT5921\13 2008-11-19 11:46:01 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\12 2008-08-28 20:37:11 GMT mtk01088 -** remove non-used code -** -** \main\maintrunk.MT5921\11 2008-03-18 09:51:52 GMT mtk01088 -** Add function declaration for timer to indicate pmkid candidate -** \main\maintrunk.MT5921\10 2008-02-29 15:12:08 GMT mtk01088 -** add variable for sw port control -** \main\maintrunk.MT5921\9 2008-02-29 12:37:30 GMT mtk01088 -** rename the security related function declaration -** \main\maintrunk.MT5921\8 2007-12-27 13:59:08 GMT mtk01088 -** adjust the wlan table and sec fsm init timing -** \main\maintrunk.MT5921\7 2007-11-20 10:39:49 GMT mtk01088 -** add function timer for wait EAPoL Error timeout -** \main\maintrunk.MT5921\6 2007-11-06 20:39:08 GMT mtk01088 -** rename the counter measure timer -** \main\maintrunk.MT5921\5 2007-11-06 20:14:31 GMT mtk01088 -** add a abort function -** Revision 1.5 2007/07/16 02:33:42 MTK01088 -** change the ENUM declaration structure prefix from r to e -** -** Revision 1.4 2007/07/09 06:23:10 MTK01088 -** update -** -** Revision 1.3 2007/07/04 10:09:04 MTK01088 -** adjust the state for security fsm -** change function name -** -** Revision 1.2 2007/07/03 08:13:22 MTK01088 -** change the sec fsm state -** add the event for sec fsm -** -** Revision 1.1 2007/06/27 06:20:35 MTK01088 -** add the sec fsm header file -** -** -*/ -#ifndef _SEC_FSM_H -#define _SEC_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* TKIP CounterMeasure interval for Rejoin to Network. */ -#define COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC 60 - -/* Timeout to wait the EAPoL Error Report frame Send out. */ -#define EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef UINT_32 SEC_STATUS, *P_SEC_STATUS; - -#if 0 -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; /* MAC address */ - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; -#endif - -typedef SEC_STATUS (*PFN_SEC_FSM_STATE_HANDLER)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SEC_STATE_TRANSITION_FLAG fgIsTransition -#define SEC_NEXT_STATE_VAR eNextState - -#define SEC_STATE_TRANSITION(prAdapter, prSta, eFromState, eToState) \ - { secFsmTrans_ ## eFromState ## _to_ ## eToState(prAdapter, prSta); \ - SEC_NEXT_STATE_VAR = SEC_STATE_ ## eToState; \ - SEC_STATE_TRANSITION_FLAG = (BOOLEAN)TRUE; \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle the sec check */ -/*--------------------------------------------------------------*/ -/***** Routines in sec_fsm.c *****/ -VOID -secFsmInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventStart( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secFsmEventPTKInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent2ndEapolTx( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent4ndEapolTxDone( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -VOID -secFsmEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventStartCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEndOfCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _SEC_FSM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/swcr.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/swcr.h deleted file mode 100755 index 4ea322d9763d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/swcr.h +++ /dev/null @@ -1,180 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/swcr.h#1 $ -*/ - -/*! \file "swcr.h" - \brief -*/ - - - -/* - * - */ - -#ifndef _SWCR_H -#define _SWCR_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define SWCR_VAR(x) ((VOID *)&x) -#define SWCR_FUNC(x) ((VOID *)x) - -#define SWCR_T_FUNC BIT(7) - -#define SWCR_L_32 3 -#define SWCR_L_16 2 -#define SWCR_L_8 1 - -#define SWCR_READ 0 -#define SWCR_WRITE 1 - -#define SWCR_MAP_NUM(x) (sizeof(x)/sizeof(x[0])) - -#define SWCR_CR_NUM 7 - -#define SWCR_GET_RW_INDEX(action,rw,index) \ - index = action & 0x7F; \ - rw = action >> 7; - - -extern UINT_32 g_au4SwCr[]; /*: 0: command other: data */ - -typedef VOID (*PFN_SWCR_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); -typedef VOID (*PFN_CMD_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); - -typedef struct _SWCR_MAP_ENTRY_T { - UINT_16 u2Type; - PVOID u4Addr; -} SWCR_MAP_ENTRY_T, *P_SWCR_MAP_ENTRY_T; - - -typedef struct _SWCR_MOD_MAP_ENTRY_T { - UINT_8 ucMapNum; - P_SWCR_MAP_ENTRY_T prSwCrMap; -} SWCR_MOD_MAP_ENTRY_T, *P_SWCR_MOD_MAP_ENTRY_T; - -typedef enum _ENUM_SWCR_DBG_TYPE_T { - SWCR_DBG_TYPE_ALL = 0, - SWCR_DBG_TYPE_TXRX, - SWCR_DBG_TYPE_RX_RATES, - SWCR_DBG_TYPE_PS, - SWCR_DBG_TYPE_NUM -} ENUM_SWCR_DBG_TYPE_T; - -typedef enum _ENUM_SWCR_DBG_ALL_T { - SWCR_DBG_ALL_TX_CNT = 0, - SWCR_DBG_ALL_TX_BCN_CNT, - SWCR_DBG_ALL_TX_FAILED_CNT, - SWCR_DBG_ALL_TX_RETRY_CNT, - SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT, - SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT, - SWCR_DBG_ALL_TX_MGNT_DROP_CNT, - SWCR_DBG_ALL_TX_ERROR_CNT, - - SWCR_DBG_ALL_RX_CNT, - SWCR_DBG_ALL_RX_DROP_CNT, - SWCR_DBG_ALL_RX_DUP_DROP_CNT, - SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_FCSERR_CNT, - SWCR_DBG_ALL_RX_FIFOFULL_CNT, - SWCR_DBG_ALL_RX_PFDROP_CNT, - - SWCR_DBG_ALL_PWR_PS_POLL_CNT, - SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT, - SWCR_DBG_ALL_PWR_BCN_IND_CNT, - SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT, - SWCR_DBG_ALL_PWR_PM_STATE0, - SWCR_DBG_ALL_PWR_PM_STATE1, - SWCR_DBG_ALL_PWR_CUR_PS_PROF0, - SWCR_DBG_ALL_PWR_CUR_PS_PROF1, - - SWCR_DBG_ALL_AR_STA0_RATE, - SWCR_DBG_ALL_AR_STA0_BWGI, - SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI, - - SWCR_DBG_ALL_ROAMING_ENABLE, - SWCR_DBG_ALL_ROAMING_ROAM_CNT, - SWCR_DBG_ALL_ROAMING_INT_CNT, - - SWCR_DBG_ALL_BB_RX_MDRDY_CNT, - SWCR_DBG_ALL_BB_RX_FCSERR_CNT, - SWCR_DBG_ALL_BB_CCK_PD_CNT, - SWCR_DBG_ALL_BB_OFDM_PD_CNT, - SWCR_DBG_ALL_BB_CCK_SFDERR_CNT, - SWCR_DBG_ALL_BB_CCK_SIGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT, - - SWCR_DBG_ALL_NUM -} ENUM_SWCR_DBG_ALL_T; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID swCrReadWriteCmd( - P_ADAPTER_T prAdapter, - UINT_8 ucRead, - UINT_16 u2Addr, - UINT_32 *pu4Data - ); - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType); -VOID swCrDebugInit(P_ADAPTER_T prAdapter); -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout); -VOID swCrDebugUninit(P_ADAPTER_T prAdapter); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wapi.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wapi.h deleted file mode 100755 index a47acae67778..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wapi.h +++ /dev/null @@ -1,120 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/wapi.h#1 $ -*/ - -/*! \file wapi.h - \brief The wapi related define, macro and structure are described here. -*/ - - - -/* -** $Log: wapi.h $ - * - * 07 20 2010 wh.su - * - * . - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the wapi function name and adding the generate wapi ie function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some wapi structure define - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\1 2009-10-09 17:06:29 GMT mtk01088 -** -*/ - -#ifndef _WAPI_H -#define _WAPI_H - -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define WAPI_CIPHER_SUITE_WPI 0x01721400 /* WPI_SMS4 */ -#define WAPI_AKM_SUITE_802_1X 0x01721400 /* WAI */ -#define WAPI_AKM_SUITE_PSK 0x02721400 /* WAI_PSK */ - -#define ELEM_ID_WAPI 68 /* WAPI IE */ - -#define WAPI_IE(fp) ((P_WAPI_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wapiGenerateWAPIIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ); - -BOOLEAN -wapiPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -//BOOLEAN -//wapiUpdateTxKeyIdx ( -// IN P_STA_RECORD_T prStaRec, -// IN UINT_8 ucWlanIdx -// ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif -#endif /* _WAPI_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wlan_typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wlan_typedef.h deleted file mode 100755 index 2680a88eb9a2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wlan_typedef.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/wlan_typedef.h#1 $ -*/ - -/*! \file wlan_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - - - -/* -** $Log: wlan_typedef.h $ -*/ - -#ifndef _WLAN_TYPEDEF_H -#define _WLAN_TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for BSS_INFO_T structure, to describe the attributes used in a - * common BSS. - */ -typedef struct _BSS_INFO_T BSS_INFO_T, *P_BSS_INFO_T; - -typedef BSS_INFO_T AIS_BSS_INFO_T, *P_AIS_BSS_INFO_T; -typedef BSS_INFO_T P2P_BSS_INFO_T, *P_P2P_BSS_INFO_T; -typedef BSS_INFO_T BOW_BSS_INFO_T, *P_BOW_BSS_INFO_T; - -typedef struct _AIS_SPECIFIC_BSS_INFO_T AIS_SPECIFIC_BSS_INFO_T, *P_AIS_SPECIFIC_BSS_INFO_T; -typedef struct _P2P_SPECIFIC_BSS_INFO_T P2P_SPECIFIC_BSS_INFO_T, *P_P2P_SPECIFIC_BSS_INFO_T; -typedef struct _BOW_SPECIFIC_BSS_INFO_T BOW_SPECIFIC_BSS_INFO_T, *P_BOW_SPECIFIC_BSS_INFO_T; -/* CFG_SUPPORT_WFD */ -typedef struct _WFD_CFG_SETTINGS_T WFD_CFG_SETTINGS_T, *P_WFD_CFG_SETTINGS_T; - - -/* BSS related structures */ -/* Type definition for BSS_DESC_T structure, to describe parameter sets of a particular BSS */ -typedef struct _BSS_DESC_T BSS_DESC_T, *P_BSS_DESC_T, **PP_BSS_DESC_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _WLAN_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wnm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wnm.h deleted file mode 100755 index ac54cbc86dfa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/mgmt/wnm.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/include/mgmt/wnm.h#1 $ -*/ - -/*! \file wnm.h - \brief This file contains the IEEE 802.11 family related 802.11v network management - for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wnm.h $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -#ifndef _WNM_H -#define _WNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _TIMINGMSMT_PARAM_T { - BOOLEAN fgInitiator; - UINT_8 ucTrigger; - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ -} TIMINGMSMT_PARAM_T, *P_TIMINGMSMT_PARAM_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ); - -#define WNM_UNIT_TEST 1 - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WNM_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/adapter.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/adapter.h deleted file mode 100755 index d80c6287d4ff..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/adapter.h +++ /dev/null @@ -1,1416 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/adapter.h#3 $ -*/ - -/*! \file adapter.h - \brief Definition of internal data structure for driver manipulation. - - In this file we define the internal data structure - ADAPTER_T which stands - for MiniPort ADAPTER(From Windows point of view) or stands for Network ADAPTER. -*/ - - - -/* -** $Log: adapter.h $ -** -** 11 15 2012 cp.wu -** [ALPS00382763] N820_JB:[WIFI]N820JB WLAN ±K???,«ÝÉó?¬y¥\¯Ó¤j -** do not try reconnecting when being disconnected by the peer -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Remove ERP member in adapter structure - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * Action frame callback for GO Device Discoverability Req. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 yuche.tsai - * [WCXRP00000533] [Volunteer Patch][MT6620][Driver] Provide a P2P function API for Legacy WiFi to query AP mode. - * Provide an API for Legacy WiFi to query the operation mode.. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Provide disconnect function for AAA module. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add CWMin CWMax for AP to generate IE. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common IE buffer in P2P INFO structure. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 yuche.tsai - * NULL - * Add an intend mode for BSS info. - * It is used to let P2P BSS Info to know which OP Mode it is going to become. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 yuche.tsai - * - * Remove BSS info which is redonedent in Wifi Var.. - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P FSM Info in adapter. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field, additional include p2p_fsm.h if p2p is enabled. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * 2) command sequence number is now increased atomically - * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * 4. correct some HAL implementation - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * and result is retrieved by get ATInfo instead - * * * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-16 18:02:03 GMT mtk02752 -** add external reference to avoid compilation error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:40:26 GMT mtk02752 -** eliminate unused member -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-08 17:36:08 GMT mtk02752 -** add RF test data members into P_ADAPTER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:45 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-28 10:29:57 GMT mtk01461 -** Add read WTSR for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:37:35 GMT mtk01461 -** Add prPendingCmdInfoOfOID for temporarily saving the CMD_INFO_T before en-queue to rCmdQueue -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:57:51 GMT mtk01461 -** Add MGMT Buffer Info -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:34:12 GMT mtk01461 -** Add SW pre test CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:41:48 GMT mtk01461 -** Add fgIsWmmAssoc flag for TC assignment -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:51 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:51:52 GMT mtk01426 -** Add #if CFG_SDIO_RX_ENHANCE related data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:17 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _ADAPTER_H -#define _ADAPTER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _ENHANCE_MODE_DATA_STRUCT_T SDIO_CTRL_T, *P_SDIO_CTRL_T; - -typedef struct _WLAN_INFO_T { - PARAM_BSSID_EX_T rCurrBssId; - - // Scan Result - PARAM_BSSID_EX_T arScanResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 apucScanResultIEs[CFG_MAX_NUM_BSS_LIST]; - UINT_32 u4ScanResultNum; - - // IE pool for Scanning Result - UINT_8 aucScanIEBuf[CFG_MAX_COMMON_IE_BUF_LEN]; - UINT_32 u4ScanIEBufferUsage; - - OS_SYSTIME u4SysTime; - - // connection parameter (for Ad-Hoc) - UINT_16 u2BeaconPeriod; - UINT_16 u2AtimWindow; - - PARAM_RATES eDesiredRates; - CMD_LINK_ATTRIB eLinkAttr; -// CMD_PS_PROFILE_T ePowerSaveMode; - CMD_PS_PROFILE_T arPowerSaveMode[NETWORK_TYPE_INDEX_NUM]; - - // trigger parameter - ENUM_RSSI_TRIGGER_TYPE eRssiTriggerType; - PARAM_RSSI rRssiTriggerValue; - - // Privacy Filter - ENUM_PARAM_PRIVACY_FILTER_T ePrivacyFilter; - - // RTS Threshold - PARAM_RTS_THRESHOLD eRtsThreshold; - - // Network Type - UINT_8 ucNetworkType; - - // Network Type In Use - UINT_8 ucNetworkTypeInUse; - -} WLAN_INFO_T, *P_WLAN_INFO_T; - -/* Session for CONNECTION SETTINGS */ -typedef struct _CONNECTION_SETTINGS_T { - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - UINT_8 ucDelayTimeOfDisconnectEvent; - - BOOLEAN fgIsConnByBssidIssued; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - - BOOLEAN fgIsConnReqIssued; - BOOLEAN fgIsDisconnectedByNonRequest; - - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - ENUM_PARAM_OP_MODE_T eOPMode; - - ENUM_PARAM_CONNECTION_POLICY_T eConnectionPolicy; - - ENUM_PARAM_AD_HOC_MODE_T eAdHocMode; - - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - - BOOLEAN fgIsScanReqIssued; - - - /* MIB attributes */ - UINT_16 u2BeaconPeriod; - - UINT_16 u2RTSThreshold; /* User desired setting */ - - UINT_16 u2DesiredNonHTRateSet; /* User desired setting */ - - UINT_8 ucAdHocChannelNum; /* For AdHoc */ - - ENUM_BAND_T eAdHocBand; /* For AdHoc */ - - UINT_32 u4FreqInKHz; /* Center frequency */ - - /* ATIM windows using for IBSS power saving function */ - UINT_16 u2AtimWindow; - - /* Features */ - BOOLEAN fgIsEnableRoaming; - - BOOLEAN fgIsAdHocQoSEnable; - - ENUM_PARAM_PHY_CONFIG_T eDesiredPhyConfig; - - /* Used for AP mode for desired channel and bandwidth */ - UINT_16 u2CountryCode; - UINT_8 uc2G4BandwidthMode; /* 20/40M or 20M only */ - UINT_8 uc5GBandwidthMode; /* 20/40M or 20M only */ - - BOOLEAN fgTxShortGIDisabled; - BOOLEAN fgRxShortGIDisabled; - -#if CFG_SUPPORT_802_11D - BOOLEAN fgMultiDomainCapabilityEnabled; -#endif /* CFG_SUPPORT_802_11D*/ - - -#if 1 //CFG_SUPPORT_WAPI - BOOL fgWapiMode; - UINT_32 u4WapiSelectedGroupCipher; - UINT_32 u4WapiSelectedPairwiseCipher; - UINT_32 u4WapiSelectedAKMSuite; -#endif - - /* CR1486, CR1640 */ - /* for WPS, disable the privacy check for AP selection policy */ - BOOLEAN fgPrivacyCheckDisable; - - /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 bmfgApsdEnAc; - - /* for RSN info store, when upper layer set rsn info */ - RSN_INFO_T rRsnInfo; - -} CONNECTION_SETTINGS_T, *P_CONNECTION_SETTINGS_T; - -struct _BSS_INFO_T { - - ENUM_PARAM_MEDIA_STATE_T eConnectionState; /* Connected Flag used in AIS_NORMAL_TR */ - ENUM_PARAM_MEDIA_STATE_T eConnectionStateIndicated; /* The Media State that report to HOST */ - - ENUM_OP_MODE_T eCurrentOPMode; /* Current Operation Mode - Infra/IBSS */ -#if CFG_ENABLE_WIFI_DIRECT - ENUM_OP_MODE_T eIntendOPMode; -#endif - - BOOLEAN fgIsNetActive; /* TRUE if this network has been activated */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucReasonOfDisconnect; /* Used by media state indication */ - - UINT_8 ucSSIDLen; /* Length of SSID */ - -#if CFG_ENABLE_WIFI_DIRECT - ENUM_HIDDEN_SSID_TYPE_T eHiddenSsidType; /* For Hidden SSID usage. */ -#endif - - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID used in this BSS */ - - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* The BSSID of the associated BSS */ - - UINT_8 aucOwnMacAddr[MAC_ADDR_LEN];/* Owned MAC Address used in this BSS */ - - P_STA_RECORD_T prStaRecOfAP; /* For Infra Mode, and valid only if - * eConnectionState == MEDIA_STATE_CONNECTED - */ - LINK_T rStaRecOfClientList; /* For IBSS/AP Mode, all known STAs in current BSS */ - - UINT_16 u2CapInfo; /* Change Detection */ - - UINT_16 u2BeaconInterval; /* The Beacon Interval of this BSS */ - - - UINT_16 u2ATIMWindow; /* For IBSS Mode */ - - UINT_16 u2AssocId; /* For Infra Mode, it is the Assoc ID assigned by AP. - */ - - - UINT_8 ucDTIMPeriod; /* For Infra/AP Mode */ - - UINT_8 ucDTIMCount; /* For AP Mode, it is the DTIM value we should carried in - * the Beacon of next TBTT. - */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (This is deduced from received BSS_DESC_T) - */ - - UINT_8 ucNonHTBasicPhyType; /* The Basic PHY Type Index, used to setup Phy Capability */ - - UINT_8 ucConfigAdHocAPMode; /* The configuration of AdHoc/AP Mode. e.g. 11g or 11b */ - - UINT_8 ucBeaconTimeoutCount; /* For Infra/AP Mode, it is a threshold of Beacon Lost Count to - confirm connection was lost */ - - BOOLEAN fgHoldSameBssidForIBSS; /* For IBSS Mode, to keep use same BSSID to extend the life cycle of an IBSS */ - - BOOLEAN fgIsBeaconActivated; /* For AP/IBSS Mode, it is used to indicate that Beacon is sending */ - - P_MSDU_INFO_T prBeacon; /* For AP/IBSS Mode - Beacon Frame */ - - BOOLEAN fgIsIBSSMaster; /* For IBSS Mode - To indicate that we can reply ProbeResp Frame. - In current TBTT interval */ - - BOOLEAN fgIsShortPreambleAllowed; /* From Capability Info. of AssocResp Frame AND of Beacon/ProbeResp Frame */ - BOOLEAN fgUseShortPreamble; /* Short Preamble is enabled in current BSS. */ - BOOLEAN fgUseShortSlotTime; /* Short Slot Time is enabled in current BSS. */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of current BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of current BSS */ - - - UINT_8 ucAllSupportedRatesLen; /* Used for composing Beacon Frame in AdHoc or AP Mode */ - UINT_8 aucAllSupportedRates[RATE_NUM]; - - UINT_8 ucAssocClientCnt; /* TODO(Kevin): Number of associated clients */ - - BOOLEAN fgIsProtection; - BOOLEAN fgIsQBSS; /* fgIsWmmBSS; */ /* For Infra/AP/IBSS Mode, it is used to indicate if we support WMM in - * current BSS. */ - BOOLEAN fgIsNetAbsent; /* TRUE: BSS is absent, FALSE: BSS is present */ - - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - UINT_16 u2RsnSelectedCapInfo; - - /*------------------------------------------------------------------------*/ - /* Power Management related information */ - /*------------------------------------------------------------------------*/ - PM_PROFILE_SETUP_INFO_T rPmProfSetupInfo; - - - /*------------------------------------------------------------------------*/ - /* WMM/QoS related information */ - /*------------------------------------------------------------------------*/ - UINT_8 ucWmmParamSetCount; /* Used to detect the change of EDCA parameters. For AP mode, the value is used in WMM IE */ - - AC_QUE_PARMS_T arACQueParms[WMM_AC_INDEX_NUM]; - - UINT_8 aucCWminLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWminLog2 */ - UINT_8 aucCWmaxLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWmaxLog2 */ - AC_QUE_PARMS_T arACQueParmsForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the value */ - - /*------------------------------------------------------------------------*/ - /* 802.11n HT operation IE when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT)*/ - /* is true. They have the same definition with fields of */ - /* information element (CM) */ - /*------------------------------------------------------------------------*/ - ENUM_BAND_T eBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucHtOpInfo1; - UINT_16 u2HtOpInfo2; - UINT_16 u2HtOpInfo3; - - /*------------------------------------------------------------------------*/ - /* Required protection modes (CM) */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgErpProtectMode; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - ENUM_RIFS_MODE_T eRifsOperationMode; - - BOOLEAN fgObssErpProtectMode; /* GO only */ - ENUM_HT_PROTECT_MODE_T eObssHtProtectMode; /* GO only */ - ENUM_GF_MODE_T eObssGfOperationMode; /* GO only */ - BOOLEAN fgObssRifsOperationMode; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* OBSS to decide if 20/40M bandwidth is permitted. */ - /* The first member indicates the following channel list length. */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgAssoc40mBwAllowed; - BOOLEAN fg40mBwAllowed; - ENUM_CHNL_EXT_T eBssSCO; /* Real setting for HW - * 20/40M AP mode will always set 40M, - * but its OP IE can be changed. - */ - UINT_8 auc2G_20mReqChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_NonHtChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_PriChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_SecChnlList[CHNL_LIST_SZ_2G + 1]; - - UINT_8 auc5G_20mReqChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_NonHtChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_PriChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_SecChnlList[CHNL_LIST_SZ_5G + 1]; - - TIMER_T rObssScanTimer; - UINT_16 u2ObssScanInterval; /* in unit of sec */ - - BOOLEAN fgObssActionForcedTo20M; /* GO only */ - BOOLEAN fgObssBeaconForcedTo20M; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* HW Related Fields (Kevin) */ - /*------------------------------------------------------------------------*/ - UINT_8 ucHwDefaultFixedRateCode; /* The default rate code copied to MAC TX Desc */ - UINT_16 u2HwLPWakeupGuardTimeUsec; - - - UINT_8 ucBssFreeQuota; /* The value is updated from FW */ -}; - - -struct _AIS_SPECIFIC_BSS_INFO_T { - UINT_8 ucRoamingAuthTypes; /* This value indicate the roaming type used in AIS_JOIN */ - - BOOLEAN fgIsIBSSActive; - - /*! \brief Global flag to let arbiter stay at standby and not connect to any network */ - BOOLEAN fgCounterMeasure; - UINT_8 ucWEPDefaultKeyID; - BOOLEAN fgTransmitKeyExist; /* Legacy wep Transmit key exist or not */ - - /* While Do CounterMeasure procedure, check the EAPoL Error report have send out */ - BOOLEAN fgCheckEAPoLTxDone; - - UINT_32 u4RsnaLastMICFailTime; - - /* Stored the current bss wpa rsn cap filed, used for roaming policy */ - //UINT_16 u2RsnCap; - TIMER_T rPreauthenticationTimer; - - /* By the flow chart of 802.11i, - wait 60 sec before associating to same AP - or roaming to a new AP - or sending data in IBSS, - keep a timer for handle the 60 sec counterMeasure */ - TIMER_T rRsnaBlockTrafficTimer; - TIMER_T rRsnaEAPoLReportTimeoutTimer; - - /* For Keep the Tx/Rx Mic key for TKIP SW Calculate Mic */ - /* This is only one for AIS/AP */ - UINT_8 aucTxMicKey[8]; - UINT_8 aucRxMicKey[8]; - - /* Buffer for WPA2 PMKID */ - /* The PMKID cache lifetime is expire by media_disconnect_indication */ - UINT_32 u4PmkidCandicateCount; - PMKID_CANDICATE_T arPmkidCandicate[CFG_MAX_PMKID_CACHE]; - UINT_32 u4PmkidCacheCount; - PMKID_ENTRY_T arPmkidCache[CFG_MAX_PMKID_CACHE]; - BOOLEAN fgIndicatePMKID; -#if CFG_SUPPORT_802_11W - BOOLEAN fgMgmtProtection; - UINT_32 u4SaQueryStart; - UINT_32 u4SaQueryCount; - UINT_8 ucSaQueryTimedOut; - PUINT_8 pucSaQueryTransId; - TIMER_T rSaQueryTimer; - BOOLEAN fgBipKeyInstalled; -#endif -}; - -struct _BOW_SPECIFIC_BSS_INFO_T { - UINT_16 u2Reserved; /* Reserved for Data Type Check */ -}; - -#if CFG_SLT_SUPPORT -typedef struct _SLT_INFO_T { - - P_BSS_DESC_T prPseudoBssDesc; - UINT_16 u2SiteID; - UINT_8 ucChannel2G4; - UINT_8 ucChannel5G; - BOOLEAN fgIsDUT; - UINT_32 u4BeaconReceiveCnt; - /////////Deprecated///////// - P_STA_RECORD_T prPseudoStaRec; -} SLT_INFO_T, *P_SLT_INFO_T; -#endif - - -/* Major member variables for WiFi FW operation. - Variables within this region will be ready for access after WIFI function is enabled. -*/ -typedef struct _WIFI_VAR_T { - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - BOOLEAN fgDebugCmdResp; - - CONNECTION_SETTINGS_T rConnSettings; - - SCAN_INFO_T rScanInfo; - -#if CFG_SUPPORT_ROAMING - ROAMING_INFO_T rRoamingInfo; -#endif /* CFG_SUPPORT_ROAMING */ - - AIS_FSM_INFO_T rAisFsmInfo; - - ENUM_PWR_STATE_T aePwrState[NETWORK_TYPE_INDEX_NUM]; - - BSS_INFO_T arBssInfo[NETWORK_TYPE_INDEX_NUM]; - - AIS_SPECIFIC_BSS_INFO_T rAisSpecificBssInfo; - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings; - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - P_P2P_FSM_INFO_T prP2pFsmInfo; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - BOW_SPECIFIC_BSS_INFO_T rBowSpecificBssInfo; - BOW_FSM_INFO_T rBowFsmInfo; -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - DEAUTH_INFO_T arDeauthInfo[MAX_DEAUTH_INFO_COUNT]; - - /* Current Wi-Fi Settings and Flags */ - UINT_8 aucPermanentAddress[MAC_ADDR_LEN]; - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - UINT_8 aucDeviceAddress[MAC_ADDR_LEN]; - UINT_8 aucInterfaceAddress[MAC_ADDR_LEN]; - - UINT_8 ucAvailablePhyTypeSet; - - ENUM_PHY_TYPE_INDEX_T eNonHTBasicPhyType2G4; /* Basic Phy Type used by SCN according - * to the set of Available PHY Types - */ - - ENUM_PARAM_PREAMBLE_TYPE_T ePreambleType; - ENUM_REGISTRY_FIXED_RATE_T eRateSetting; - - BOOLEAN fgIsShortSlotTimeOptionEnable; - /* User desired setting, but will honor the capability of AP */ - - BOOLEAN fgEnableJoinToHiddenSSID; - BOOLEAN fgSupportWZCDisassociation; - - BOOLEAN fgSupportQoS; - BOOLEAN fgSupportAmpduTx; - BOOLEAN fgSupportAmpduRx; - BOOLEAN fgSupportTspec; - BOOLEAN fgSupportUAPSD; - BOOLEAN fgSupportULPSMP; - UINT_8 u8SupportRxSgi20; /* 0: default 1: enable 2:disble */ - UINT_8 u8SupportRxSgi40; - UINT_8 u8SupportRxGf; - -#if CFG_SLT_SUPPORT - SLT_INFO_T rSltInfo; -#endif - -} WIFI_VAR_T, *P_WIFI_VAR_T;/* end of _WIFI_VAR_T */ - -/* cnm_timer module */ -typedef struct { - LINK_T rLinkHead; - OS_SYSTIME rNextExpiredSysTime; - KAL_WAKE_LOCK_T rWakeLock; - BOOLEAN fgWakeLocked; -} ROOT_TIMER, *P_ROOT_TIMER; - - -/* FW/DRV/NVRAM version information */ -typedef struct { - - /* NVRAM or Registry */ - UINT_16 u2Part1CfgOwnVersion; - UINT_16 u2Part1CfgPeerVersion; - UINT_16 u2Part2CfgOwnVersion; - UINT_16 u2Part2CfgPeerVersion; - - /* Firmware */ - UINT_16 u2FwProductID; - UINT_16 u2FwOwnVersion; - UINT_16 u2FwPeerVersion; - -} WIFI_VER_INFO_T, *P_WIFI_VER_INFO_T; - - -#if CFG_ENABLE_WIFI_DIRECT -/* -* p2p function pointer structure -*/ - -typedef struct _P2P_FUNCTION_LINKER { - P2P_REMOVE prP2pRemove; -// NIC_P2P_MEDIA_STATE_CHANGE prNicP2pMediaStateChange; -// SCAN_UPDATE_P2P_DEVICE_DESC prScanUpdateP2pDeviceDesc; -// P2P_FSM_RUN_EVENT_RX_PROBE_RESPONSE_FRAME prP2pFsmRunEventRxProbeResponseFrame; - P2P_GENERATE_P2P_IE prP2pGenerateWSC_IEForBeacon; -// P2P_CALCULATE_WSC_IE_LEN_FOR_PROBE_RSP prP2pCalculateWSC_IELenForProbeRsp; -// P2P_GENERATE_WSC_IE_FOR_PROBE_RSP prP2pGenerateWSC_IEForProbeRsp; -// SCAN_REMOVE_P2P_BSS_DESC prScanRemoveP2pBssDesc; -// P2P_HANDLE_SEC_CHECK_RSP prP2pHandleSecCheckRsp; - P2P_NET_REGISTER prP2pNetRegister; - P2P_NET_UNREGISTER prP2pNetUnregister; - P2P_CALCULATE_P2P_IE_LEN prP2pCalculateP2p_IELenForAssocReq; /* All IEs generated from supplicant. */ - P2P_GENERATE_P2P_IE prP2pGenerateP2p_IEForAssocReq; /* All IEs generated from supplicant. */ -} P2P_FUNCTION_LINKER, *P_P2P_FUNCTION_LINKER; - - -#endif - -/* - * Major ADAPTER structure - * Major data structure for driver operation - */ -struct _ADAPTER_T { - UINT_8 ucRevID; - - UINT_16 u2NicOpChnlNum; - - BOOLEAN fgIsEnableWMM; - BOOLEAN fgIsWmmAssoc; /* This flag is used to indicate that WMM is enable in current BSS */ - - UINT_32 u4OsPacketFilter; // packet filter used by OS - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_32 u4CSUMFlags; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - - ENUM_BAND_T aePreferBand[NETWORK_TYPE_INDEX_NUM]; - - /* ADAPTER flags */ - UINT_32 u4Flags; - UINT_32 u4HwFlags; - - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - ENUM_PHY_TYPE_INDEX_T eCurrentPhyType; /* Current selection basing on the set of Available PHY Types */ - -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - UINT_32 u4CoalescingBufCachedSize; - PUINT_8 pucCoalescingBufCached; -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - /* Buffer for CMD_INFO_T, Mgt packet and mailbox message */ - BUF_INFO_T rMgtBufInfo; - BUF_INFO_T rMsgBufInfo; - PUINT_8 pucMgtBufCached; - UINT_32 u4MgtBufCachedSize; - UINT_8 aucMsgBuf[MSG_BUFFER_SIZE]; -#if CFG_DBG_MGT_BUF - UINT_32 u4MemAllocDynamicCount; /* Debug only */ - UINT_32 u4MemFreeDynamicCount; /* Debug only */ -#endif - - STA_RECORD_T arStaRec[CFG_STA_REC_NUM]; - - /* Element for TX PATH */ - TX_CTRL_T rTxCtrl; - QUE_T rFreeCmdList; - CMD_INFO_T arHifCmdDesc[CFG_TX_MAX_CMD_PKT_NUM]; - - /* Element for RX PATH */ - RX_CTRL_T rRxCtrl; - - P_SDIO_CTRL_T prSDIOCtrl; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* Element for MT6620 E1 HIFSYS workaround */ - BOOLEAN fgIsClockGatingEnabled; -#endif - - /* Buffer for Authentication Event */ - /* Move to glue layer and refine the kal function */ - /* Reference to rsnGeneratePmkidIndication function at rsn.c */ - UINT_8 aucIndicationEventBuffer[(CFG_MAX_PMKID_CACHE * 20) + 8 ]; - - UINT_32 u4IntStatus; - - ENUM_ACPI_STATE_T rAcpiState; - - BOOLEAN fgIsIntEnable; - BOOLEAN fgIsIntEnableWithLPOwnSet; - - BOOLEAN fgIsFwOwn; - BOOLEAN fgWiFiInSleepyState; - - UINT_32 u4PwrCtrlBlockCnt; - - QUE_T rPendingCmdQueue; - - P_GLUE_INFO_T prGlueInfo; - - UINT_8 ucCmdSeqNum; - UINT_8 ucTxSeqNum; - -#if 1//CFG_SUPPORT_WAPI - BOOLEAN fgUseWapi; -#endif - - /* RF Test flags */ - BOOLEAN fgTestMode; - - /* WLAN Info for DRIVER_CORE OID query */ - WLAN_INFO_T rWlanInfo; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PRegistered; - ENUM_NET_REG_STATE_T rP2PNetRegState; - BOOLEAN fgIsWlanLaunched; - P_P2P_INFO_T prP2pInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - OS_SYSTIME rP2pLinkQualityUpdateTime; - BOOLEAN fgIsP2pLinkQualityValid; - EVENT_LINK_QUALITY rP2pLinkQuality; -#endif -#endif - - /* Online Scan Option */ - BOOLEAN fgEnOnlineScan; - - /* Online Scan Option */ - BOOLEAN fgDisBcnLostDetection; - - /* MAC address */ - PARAM_MAC_ADDRESS rMyMacAddr; - - /* Wake-up Event for WOL */ - UINT_32 u4WakeupEventEnable; - - /* Event Buffering */ - EVENT_STATISTICS rStatStruct; - OS_SYSTIME rStatUpdateTime; - BOOLEAN fgIsStatValid; - - EVENT_LINK_QUALITY rLinkQuality; - OS_SYSTIME rLinkQualityUpdateTime; - BOOLEAN fgIsLinkQualityValid; - OS_SYSTIME rLinkRateUpdateTime; - BOOLEAN fgIsLinkRateValid; - - /* WIFI_VAR_T */ - WIFI_VAR_T rWifiVar; - - /* MTK WLAN NIC driver IEEE 802.11 MIB */ - IEEE_802_11_MIB_T rMib; - - /* Mailboxs for inter-module communication */ - MBOX_T arMbox[MBOX_ID_TOTAL_NUM]; - - /* Timers for OID Pending Handling */ - TIMER_T rOidTimeoutTimer; - - /* Root Timer for cnm_timer module */ - ROOT_TIMER rRootTimer; - - /* RLM maintenance */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_SYS_PROTECT_MODE_T eSysProtectMode; - ENUM_GF_MODE_T eSysHtGfMode; - ENUM_RIFS_MODE_T eSysTxRifsMode; - ENUM_SYS_PCO_PHASE_T eSysPcoPhase; - - P_DOMAIN_INFO_ENTRY prDomainInfo; - - /* QM */ - QUE_MGT_T rQM; - - CNM_INFO_T rCnmInfo; - - UINT_32 u4PowerMode; - - UINT_32 u4CtiaPowerMode; - BOOLEAN fgEnCtiaPowerMode; - - UINT_32 fgEnArpFilter; - - UINT_32 u4UapsdAcBmp; - - UINT_32 u4MaxSpLen; - - UINT_32 u4PsCurrentMeasureEn; - - /* Version Information */ - WIFI_VER_INFO_T rVerInfo; - - /* 5GHz support (from F/W) */ - BOOLEAN fgIsHw5GBandDisabled; - BOOLEAN fgEnable5GBand; - BOOLEAN fgIsEepromUsed; - BOOLEAN fgIsEfuseValid; - BOOLEAN fgIsEmbbededMacAddrValid; - - /* Packet Forwarding Tracking */ - INT_32 i4PendingFwdFrameCount; - -#if CFG_SUPPORT_RDD_TEST_MODE - UINT_8 ucRddStatus; -#endif - - BOOL fgDisStaAgingTimeoutDetection; - -};/* end of _ADAPTER_T */ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros for BSS_INFO_T - Flag of Net Active */ -/*----------------------------------------------------------------------------*/ -#define IS_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive) -#define IS_BSS_ACTIVE(_prBssInfo) ((_prBssInfo)->fgIsNetActive) - -#define IS_AIS_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_AIS_INDEX) -#define IS_P2P_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_P2P_INDEX) -#define IS_BOW_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_BOW_INDEX) - -#define SET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = TRUE;} - -#define UNSET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = FALSE;} - -#define BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; \ - _prBssInfo->fgIsNetActive = FALSE; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - COPY_MAC_ADDR(_prBssInfo->aucBSSID, _aucZeroMacAddr); \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = FALSE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } - -#if CFG_ENABLE_BT_OVER_WIFI -#define BOW_BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_BOW; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = TRUE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } -#endif - -/*----------------------------------------------------------------------------*/ -/* Macros for Power State */ -/*----------------------------------------------------------------------------*/ -#define SET_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_IDLE;} - -#define SET_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_ACTIVE;} - -#define SET_NET_PWR_STATE_PS(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_PS;} - -#define IS_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_ACTIVE) - -#define IS_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_IDLE) - -#define IS_SCN_PWR_STATE_ACTIVE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_ACTIVE) - -#define IS_SCN_PWR_STATE_IDLE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_IDLE) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ADAPTER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/bow.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/bow.h deleted file mode 100755 index d0be930e2a61..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/bow.h +++ /dev/null @@ -1,323 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/bow.h#1 $ -*/ - - - -/* -** $Log: bow.h $ - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW structure. - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add Activity Report definition. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * sync. with design document for interface change. - * - * 04 02 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * Wi-Fi driver no longer needs to implement 802.11 PAL, thus replaced by wrapping command/event definitions - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * correct typo. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * update for all command/event needed to be supported by 802.11 PAL. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * -*/ - -#ifndef _BOW_H_ -#define _BOW_H_ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOWDEVNAME "bow0" - -#define MAX_BOW_NUMBER_OF_CHANNEL_2G4 14 -#define MAX_BOW_NUMBER_OF_CHANNEL_5G 4 -#define MAX_BOW_NUMBER_OF_CHANNEL 18 //(MAX_BOW_NUMBER_OF_CHANNEL_2G4 + MAX_BOW_NUMBER_OF_CHANNEL_5G) - -#define MAX_ACTIVITY_REPORT 2 -#define MAX_ACTIVITY_REPROT_TIME 660 - -#define ACTIVITY_REPORT_STATUS_SUCCESS 0 -#define ACTIVITY_REPORT_STATUS_FAILURE 1 -#define ACTIVITY_REPORT_STATUS_TIME_INVALID 2 -#define ACTIVITY_REPORT_STATUS_OTHERS 3 - -#define ACTIVITY_REPORT_SCHEDULE_UNKNOWN 0 //Does not know the schedule of the interference -#define ACTIVITY_REPORT_SCHEDULE_KNOWN 1 - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _BT_OVER_WIFI_COMMAND_HEADER_T { - UINT_8 ucCommandId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_COMMAND_HEADER_T, *P_AMPC_COMMAND_HEADER_T; - -typedef struct _BT_OVER_WIFI_COMMAND { - AMPC_COMMAND_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_COMMAND, *P_AMPC_COMMAND; - -typedef struct _BT_OVER_WIFI_EVENT_HEADER_T { - UINT_8 ucEventId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_EVENT_HEADER_T, *P_AMPC_EVENT_HEADER_T; - -typedef struct _BT_OVER_WIFI_EVENT { - AMPC_EVENT_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_EVENT, *P_AMPC_EVENT; - -typedef struct _CHANNEL_DESC_T { - UINT_8 ucChannelBand; - UINT_8 ucChannelNum; -} CHANNEL_DESC, P_CHANNEL_DESC; - -// Command Structures -typedef struct _BOW_SETUP_CONNECTION { -//Fixed to 2.4G - UINT_8 ucChannelNum; - UINT_8 ucReserved1; - UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucReserved2; - -//Pending, for future BOW 5G supporting. -/* UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucChannelListNum; - CHANNEL_DESC arChannelList[1]; -*/ -} BOW_SETUP_CONNECTION, *P_BOW_SETUP_CONNECTION; - -typedef struct _BOW_DESTROY_CONNECTION { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_DESTROY_CONNECTION, *P_BOW_DESTROY_CONNECTION; - -typedef struct _BOW_SET_PTK { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; - UINT_8 aucTemporalKey[16]; -} BOW_SET_PTK, *P_BOW_SET_PTK; - -typedef struct _BOW_READ_RSSI { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_RSSI, *P_BOW_READ_RSSI; - -typedef struct _BOW_READ_LINK_QUALITY { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_LINK_QUALITY, *P_BOW_READ_LINK_QUALITY; - -typedef struct _BOW_SHORT_RANGE_MODE { - UINT_8 aucPeerAddress[6]; - INT_8 cTxPower; - UINT_8 ucReserved; -} BOW_SHORT_RANGE_MODE, *P_BOW_SHORT_RANGE_MODE; - -// Event Structures -typedef struct _BOW_COMMAND_STATUS { - UINT_8 ucStatus; - UINT_8 ucReserved[3]; -} BOW_COMMAND_STATUS, *P_BOW_COMMAND_STATUS; - -typedef struct _BOW_MAC_STATUS { - UINT_8 aucMacAddr[6]; - UINT_8 ucAvailability; - UINT_8 ucNumOfChannel; - CHANNEL_DESC arChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; -} BOW_MAC_STATUS, *P_BOW_MAC_STATUS; - -typedef struct _BOW_LINK_CONNECTED { - CHANNEL_DESC rChannel; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_CONNECTED, *P_BOW_LINK_CONNECTED; - -typedef struct _BOW_LINK_DISCONNECTED { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_DISCONNECTED, *P_BOW_LINK_DISCONNECTED; - -typedef struct _BOW_RSSI { - INT_8 cRssi; - UINT_8 aucReserved[3]; -} BOW_RSSI, *P_BOW_RSSI; - -typedef struct _BOW_LINK_QUALITY { - UINT_8 ucLinkQuality; - UINT_8 aucReserved[3]; -} BOW_LINK_QUALITY, *P_BOW_LINK_QUALITY; - -typedef enum _ENUM_BOW_CMD_ID_T { - BOW_CMD_ID_GET_MAC_STATUS = 1, - BOW_CMD_ID_SETUP_CONNECTION, - BOW_CMD_ID_DESTROY_CONNECTION, - BOW_CMD_ID_SET_PTK, - BOW_CMD_ID_READ_RSSI, - BOW_CMD_ID_READ_LINK_QUALITY, - BOW_CMD_ID_SHORT_RANGE_MODE, - BOW_CMD_ID_GET_CHANNEL_LIST, -} ENUM_BOW_CMD_ID_T, *P_ENUM_BOW_CMD_ID_T; - -typedef enum _ENUM_BOW_EVENT_ID_T { - BOW_EVENT_ID_COMMAND_STATUS = 1, - BOW_EVENT_ID_MAC_STATUS, - BOW_EVENT_ID_LINK_CONNECTED, - BOW_EVENT_ID_LINK_DISCONNECTED, - BOW_EVENT_ID_RSSI, - BOW_EVENT_ID_LINK_QUALITY, - BOW_EVENT_ID_CHANNEL_LIST, - BOW_EVENT_ID_CHANNEL_SELECTED, -} ENUM_BOW_EVENT_ID_T, *P_ENUM_BOW_EVENT_ID_T; - -typedef enum _ENUM_BOW_DEVICE_STATE { - BOW_DEVICE_STATE_DISCONNECTED = 0, - BOW_DEVICE_STATE_DISCONNECTING, - BOW_DEVICE_STATE_ACQUIRING_CHANNEL, - BOW_DEVICE_STATE_STARTING, - BOW_DEVICE_STATE_SCANNING, - BOW_DEVICE_STATE_CONNECTING, - BOW_DEVICE_STATE_CONNECTED, - BOW_DEVICE_STATE_NUM -} ENUM_BOW_DEVICE_STATE, *P_ENUM_BOW_DEVICE_STATE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_BOW_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/cmd_buf.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/cmd_buf.h deleted file mode 100755 index 2bb10b9b1390..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/cmd_buf.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - - - -/* -** $Log: cmd_buf.h $ - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Enable change log -*/ - -#ifndef _CMD_BUF_H -#define _CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _COMMAND_TYPE { - COMMAND_TYPE_GENERAL_IOCTL, - COMMAND_TYPE_NETWORK_IOCTL, - COMMAND_TYPE_SECURITY_FRAME, - COMMAND_TYPE_MANAGEMENT_FRAME, - COMMAND_TYPE_NUM -} COMMAND_TYPE, *P_COMMAND_TYPE; - -typedef VOID (*PFN_CMD_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -typedef VOID (*PFN_CMD_TIMEOUT_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -struct _CMD_INFO_T { - QUE_ENTRY_T rQueEntry; - - COMMAND_TYPE eCmdType; - - UINT_16 u2InfoBufLen; /* This is actual CMD buffer length */ - PUINT_8 pucInfoBuffer; /* May pointer to structure in prAdapter */ - P_NATIVE_PACKET prPacket; /* only valid when it's a security frame */ - - ENUM_NETWORK_TYPE_INDEX_T eNetworkType; - UINT_8 ucStaRecIndex; /* only valid when it's a security frame */ - - PFN_CMD_DONE_HANDLER pfCmdDoneHandler; - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler; - - BOOLEAN fgIsOid; /* Used to check if we need indicate */ - - UINT_8 ucCID; - BOOLEAN fgSetQuery; - BOOLEAN fgNeedResp; - BOOLEAN fgDriverDomainMCR; /* Access Driver Domain MCR, for CMD_ID_ACCESS_REG only */ - UINT_8 ucCmdSeqNum; - UINT_32 u4SetInfoLen; /* Indicate how many byte we read for Set OID */ - - /* information indicating by OID/ioctl */ - PVOID pvInformationBuffer; - UINT_32 u4InformationBufferLength; - - /* private data */ - UINT_32 u4PrivateData; -}; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ); - -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Routines for CMDs */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hal.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hal.h deleted file mode 100755 index e67727d7653d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hal.h +++ /dev/null @@ -1,609 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hal.h#1 $ -*/ - -/*! \file "hal.h" - \brief The declaration of hal functions - - N/A -*/ - - - -/* -** $Log: hal.h $ - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-16 18:02:26 GMT mtk02752 -** include precomp.h -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:16 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 13:54:15 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-11 10:36:01 GMT mtk01084 -** modify HAL functions -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-09 22:56:28 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:50:09 GMT mtk01084 -** add new macro HAL_TX_PORT_WR -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:08:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:50 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-05-18 14:28:10 GMT mtk01084 -** fix issue in HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-11 17:26:33 GMT mtk01084 -** modify the bit definition to check driver own status -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:30:22 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:50:34 GMT mtk01461 -** Redefine HAL_PORT_RD/WR macro for SW pre test -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-24 09:46:49 GMT mtk01084 -** fix LINT error -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 16:53:38 GMT mtk01084 -** add HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:53:13 GMT mtk01426 -** Fixed lint warn -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:20 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HAL_H -#define _HAL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* Macros for flag operations for the Adapter structure */ -#define HAL_SET_FLAG(_M, _F) ((_M)->u4HwFlags |= (_F)) -#define HAL_CLEAR_FLAG(_M, _F) ((_M)->u4HwFlags &= ~(_F)) -#define HAL_TEST_FLAG(_M, _F) ((_M)->u4HwFlags & (_F)) -#define HAL_TEST_FLAGS(_M, _F) (((_M)->u4HwFlags & (_F)) == (_F)) - -#if defined(_HIF_SDIO) -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_RD access fail! 0x%x: 0x%x \n", _u4Offset, *_pu4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_RD access! 0x%x\n", _u4Offset)); \ - } \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_WR access fail! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_WR access! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_RD access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_RD access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_WR access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_BYTE_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - } \ - } \ - else { \ - DBGLOG(HAL, WARN, ("ignore HAL_BYTE_WR access! 0x%x\n", _u4Port)); \ - } \ - } - - -#define HAL_DRIVER_OWN_BY_SDIO_CMD52(_prAdapter, _pfgDriverIsOwnReady) \ - { \ - UINT_8 ucBuf = BIT(1); \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevReadAfterWriteWithSdioCmd52(_prAdapter->prGlueInfo, MCR_WHLPCR_BYTE1, &ucBuf, 1) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("kalDevReadAfterWriteWithSdioCmd52 access fail!\n")); \ - } \ - else { \ - *_pfgDriverIsOwnReady = (ucBuf & BIT(0)) ? TRUE : FALSE; \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_DRIVER_OWN_BY_SDIO_CMD52 access!\n")); \ - } \ - } - -#else /* #if defined(_HIF_SDIO) */ -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value); \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value); \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf); \ - } - -#endif /* #if defined(_HIF_SDIO) */ - - -#define HAL_READ_RX_PORT(prAdapter, u4PortId, u4Len, pvBuf, _u4ValidBufSize) \ - { \ - ASSERT(u4PortId < 2); \ - HAL_PORT_RD(prAdapter, \ - ((u4PortId == 0) ? MCR_WRDR0 : MCR_WRDR1), \ - u4Len, \ - pvBuf, \ - _u4ValidBufSize/*temp!!*//*4Kbyte*/) \ - } - -#define HAL_WRITE_TX_PORT(_prAdapter, _ucTxPortIdx, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - ASSERT(_ucTxPortIdx < 2); \ - if((_u4ValidBufSize - _u4Len) >= sizeof(UINT_32)) { \ - /* fill with single dword of zero as TX-aggregation termination */ \ - *(PUINT_32) (&((_pucBuf)[ALIGN_4(_u4Len)])) = 0; \ - } \ - HAL_PORT_WR(_prAdapter, \ - (_ucTxPortIdx == 0) ? MCR_WTDR0 : MCR_WTDR1, \ - _u4Len, \ - _pucBuf, \ - _u4ValidBufSize/*temp!!*//*4KByte*/) \ - } - -/* The macro to read the given MCR several times to check if the wait - condition come true. */ -#define HAL_MCR_RD_AND_WAIT(_pAdapter, _offset, _pReadValue, _waitCondition, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 count; \ - (_status) = FALSE; \ - for (count = 0; count < (_waitCount); count++) { \ - HAL_MCR_RD((_pAdapter), (_offset), (_pReadValue)); \ - if ((_waitCondition)) { \ - (_status) = TRUE; \ - break; \ - } \ - kalUdelay((_waitDelay)); \ - } \ - } - - -/* The macro to write 1 to a R/S bit and read it several times to check if the - command is done */ -#define HAL_MCR_WR_AND_WAIT(_pAdapter, _offset, _writeValue, _busyMask, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 u4Temp; \ - UINT_32 u4Count = _waitCount; \ - (_status) = FALSE; \ - HAL_MCR_WR((_pAdapter), (_offset), (_writeValue)); \ - do { \ - kalUdelay((_waitDelay)); \ - HAL_MCR_RD((_pAdapter), (_offset), &u4Temp); \ - if (!(u4Temp & (_busyMask))) { \ - (_status) = TRUE; \ - break; \ - } \ - u4Count--; \ - } while (u4Count); \ - } - -#define HAL_GET_CHIP_ID_VER(_prAdapter, pu2ChipId, pu2Version) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - *pu2ChipId = (UINT_16)(u4Value & WCIR_CHIP_ID); \ - *pu2Version = (UINT_16)(u4Value & WCIR_REVISION_ID) >> 16; \ - } - -#define HAL_WAIT_WIFI_FUNC_READY(_prAdapter) \ - { \ - UINT_32 u4Value; \ - UINT_32 i; \ - for (i = 0; i < 100; i++) { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - if (u4Value & WCIR_WLAN_READY) { \ - break; \ - } \ - NdisMSleep(10); \ - } \ - } - -#define HAL_INTR_DISABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_CLR) - -#define HAL_INTR_ENABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_SET) - -#define HAL_INTR_ENABLE_AND_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - (WHLPCR_INT_EN_SET | WHLPCR_FW_OWN_REQ_SET)) - -#define HAL_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_SET) - -#define HAL_LP_OWN_CLR_OK(_prAdapter, _pfgResult) \ - { \ - UINT_32 i; \ - UINT_32 u4RegValue; \ - UINT_32 u4LoopCnt = 2048 / 8; \ - *_pfgResult = TRUE; \ - /* Software get LP ownership */ \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_CLR) \ - for (i = 0; i < u4LoopCnt; i++) { \ - HAL_MCR_RD(_prAdapter, MCR_WHLPCR, &u4RegValue); \ - if (u4RegValue & WHLPCR_IS_DRIVER_OWN) { \ - break; \ - } \ - else { \ - kalUdelay(8); \ - } \ - } \ - if (i == u4LoopCnt) { \ - *_pfgResult = FALSE; \ - /*ERRORLOG(("LP cannot be own back (%ld)", u4LoopCnt));*/ \ - /* check the time of LP instructions need to perform from Sleep to On */ \ - /*ASSERT(0); */ \ - } \ - } - -#define HAL_GET_ABNORMAL_INTERRUPT_REASON_CODE(_prAdapter, pu4AbnormalReason) \ - { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WASR, \ - pu4AbnormalReason); \ - } - - -#define HAL_DISABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_ENABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_CFG_MAX_HIF_RX_LEN_NUM(_prAdapter, _ucNumOfRxLen) \ - { \ - UINT_32 u4Value, ucNum; \ - ucNum = ((_ucNumOfRxLen >= 16) ? 0 : _ucNumOfRxLen); \ - u4Value = 0; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - u4Value &= ~WHCR_MAX_HIF_RX_LEN_NUM; \ - u4Value |= ((((UINT_32)ucNum) << 4) & WHCR_MAX_HIF_RX_LEN_NUM); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value); \ - } - -#define HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = TRUE;\ - } - -#define HAL_SET_INTR_STATUS_WRITE_1_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = FALSE;\ - } - -/* Note: enhance mode structure may also carried inside the buffer, - if the length of the buffer is long enough */ -#define HAL_READ_INTR_STATUS(prAdapter, length, pvBuf) \ - HAL_PORT_RD(prAdapter, \ - MCR_WHISR, \ - length, \ - pvBuf, \ - length) - -#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, aucTxReleaseCount) \ - { \ - PUINT_32 pu4Value = (PUINT_32)aucTxReleaseCount; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR0, \ - &pu4Value[0]); \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR1, \ - &pu4Value[1]); \ - } - -#define HAL_READ_RX_LENGTH(prAdapter, pu2Rx0Len, pu2Rx1Len) \ - { \ - UINT_32 u4Value; \ - u4Value = 0; \ - HAL_MCR_RD(prAdapter, \ - MCR_WRPLR, \ - &u4Value); \ - *pu2Rx0Len = (UINT_16)u4Value; \ - *pu2Rx1Len = (UINT_16)(u4Value >> 16); \ - } - -#define HAL_GET_INTR_STATUS_FROM_ENHANCE_MODE_STRUCT(pvBuf, u2Len, pu4Status) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvBuf; \ - *pu4Status = pu4Buf[0]; \ - } - -#define HAL_GET_TX_STATUS_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4BufOut, u4LenBufOut) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT(u4LenBufOut >= 8); \ - pu4BufOut[0] = pu4Buf[1]; \ - pu4BufOut[1] = pu4Buf[2]; \ - } - -#define HAL_GET_RX_LENGTH_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu2Rx0Num, au2Rx0Len, pu2Rx1Num, au2Rx1Len) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT((sizeof(au2Rx0Len) / sizeof(UINT_16)) >= 16); \ - ASSERT((sizeof(au2Rx1Len) / sizeof(UINT_16)) >= 16); \ - *pu2Rx0Num = (UINT_16)pu4Buf[3]; \ - *pu2Rx1Num = (UINT_16)(pu4Buf[3] >> 16); \ - kalMemCopy(au2Rx0Len, &pu4Buf[4], 8); \ - kalMemCopy(au2Rx1Len, &pu4Buf[12], 8); \ - } - -#define HAL_GET_MAILBOX_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4Mailbox0, pu4Mailbox1) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - *pu4Mailbox0 = (UINT_16)pu4Buf[21]; \ - *pu4Mailbox1 = (UINT_16)pu4Buf[22]; \ - } - -#define HAL_IS_TX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_TX_DONE_INT) ? TRUE : FALSE) - -#define HAL_IS_RX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & (WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT)) ? TRUE : FALSE) - -#define HAL_IS_ABNORMAL_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_ABNORMAL_INT) ? TRUE : FALSE) - -#define HAL_IS_FW_OWNBACK_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_FW_OWN_BACK_INT) ? TRUE : FALSE) - -#define HAL_PUT_MAILBOX(prAdapter, u4MboxId, u4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_WR(prAdapter, \ - ((u4MboxId == 0) ? MCR_H2DSM0R : MCR_H2DSM1R), \ - u4Data); \ - } - -#define HAL_GET_MAILBOX(prAdapter, u4MboxId, pu4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_RD(prAdapter, \ - ((u4MboxId == 0) ? MCR_D2HRM0R : MCR_D2HRM1R), \ - pu4Data); \ - } - -#define HAL_SET_MAILBOX_READ_CLEAR(prAdapter, fgEnableReadClear) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value);\ - HAL_MCR_WR(prAdapter, MCR_WHCR, \ - (fgEnableReadClear) ? \ - (u4Value | WHCR_W_MAILBOX_RD_CLR_EN) : \ - (u4Value & ~WHCR_W_MAILBOX_RD_CLR_EN)); \ - prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear = fgEnableReadClear;\ - } - -#define HAL_GET_MAILBOX_READ_CLEAR(prAdapter) (prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hif_rx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hif_rx.h deleted file mode 100755 index 3895a7c3fc01..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hif_rx.h +++ /dev/null @@ -1,227 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hif_rx.h#1 $ -*/ - -/*! \file "hif_rx.h" - \brief Provide HIF RX Header Information between F/W and Driver - - N/A -*/ - - -/* -** $Log: hif_rx.h $ - * - * 09 01 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * follow-ups for HIF_RX_HEADER_T update: - * 1) add TCL - * 2) add RCPI - * 3) add ChannelNumber - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:44:00 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-09 13:59:20 GMT MTK02468 -** Added HIF_RX_HDR parsing macros -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 19:54:54 GMT mtk02752 -** adopt HIF_RX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-29 19:51:19 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:33:58 GMT mtk01461 -** Add define of HW_APPENED_LEN -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:51:02 GMT mtk01461 -** Rename ENUM_HIF_RX_PKT_TYPE_T -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 12:05:03 GMT mtk01426 -** Remove __KAL_ATTRIB_PACKED__ and add hifDataTypeCheck() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:18:52 GMT mtk01426 -** Add comment to HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:23 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HIF_RX_H -#define _HIF_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! HIF_RX_HEADER_T */ -// DW 0, Byte 1 -#define HIF_RX_HDR_PACKET_TYPE_MASK BITS(0,1) - -// DW 1, Byte 0 -#define HIF_RX_HDR_HEADER_LEN BITS(2,7) -#define HIF_RX_HDR_HEADER_LEN_OFFSET 2 -#define HIF_RX_HDR_HEADER_OFFSET_MASK BITS(0,1) - -// DW 1, Byte 1 -#define HIF_RX_HDR_80211_HEADER_FORMAT BIT(0) -#define HIF_RX_HDR_DO_REORDER BIT(1) -#define HIF_RX_HDR_PAL BIT(2) -#define HIF_RX_HDR_TCL BIT(3) -#define HIF_RX_HDR_NETWORK_IDX_MASK BITS(4,7) -#define HIF_RX_HDR_NETWORK_IDX_OFFSET 4 - -// DW 1, Byte 2, 3 -#define HIF_RX_HDR_SEQ_NO_MASK BITS(0,11) -#define HIF_RX_HDR_TID_MASK BITS(12,14) -#define HIF_RX_HDR_TID_OFFSET 12 -#define HIF_RX_HDR_BAR_FRAME BIT(15) - - - -#define HIF_RX_HDR_FLAG_AMP_WDS BIT(0) -#define HIF_RX_HDR_FLAG_802_11_FORMAT BIT(1) -#define HIF_RX_HDR_FLAG_BAR_FRAME BIT(2) -#define HIF_RX_HDR_FLAG_DO_REORDERING BIT(3) -#define HIF_RX_HDR_FLAG_CTRL_WARPPER_FRAME BIT(4) - -#define HIF_RX_HW_APPENDED_LEN 4 - -// For DW 2, Byte 3 - ucHwChannelNum -#define HW_CHNL_NUM_MAX_2G4 14 -#define HW_CHNL_NUM_MAX_4G_5G (255 - HW_CHNL_NUM_MAX_2G4) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _HIF_RX_HEADER_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucHerderLenOffset; - UINT_8 uc80211_Reorder_PAL_TCL; - UINT_16 u2SeqNoTid; - UINT_8 ucStaRecIdx; - UINT_8 ucRcpi; - UINT_8 ucHwChannelNum; - UINT_8 ucReserved; -} HIF_RX_HEADER_T, *P_HIF_RX_HEADER_T; - -typedef enum _ENUM_HIF_RX_PKT_TYPE_T { - HIF_RX_PKT_TYPE_DATA = 0, - HIF_RX_PKT_TYPE_EVENT, - HIF_RX_PKT_TYPE_TX_LOOPBACK, - HIF_RX_PKT_TYPE_MANAGEMENT, - HIF_RX_PKT_TYPE_NUM -} ENUM_HIF_RX_PKT_TYPE_T, *P_ENUM_HIF_RX_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define HIF_RX_HDR_SIZE sizeof(HIF_RX_HEADER_T) - -#define HIF_RX_HDR_GET_80211_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_80211_HEADER_FORMAT) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_REORDER_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_DO_REORDER) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_PAL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_PAL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_TCL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_TCL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_NETWORK_IDX(_prHifRxHdr) \ - ((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_NETWORK_IDX_MASK)\ - >> HIF_RX_HDR_NETWORK_IDX_OFFSET) - - -#define HIF_RX_HDR_GET_TID(_prHifRxHdr) \ - ((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_TID_MASK)\ - >> HIF_RX_HDR_TID_OFFSET) -#define HIF_RX_HDR_GET_SN(_prHifRxHdr) \ - (((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_SEQ_NO_MASK) -#define HIF_RX_HDR_GET_BAR_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_BAR_FRAME)? TRUE: FALSE)) - - -#define HIF_RX_HDR_GET_CHNL_NUM(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) > HW_CHNL_NUM_MAX_4G_5G ) ? \ - ( ((_prHifRxHdr)->ucHwChannelNum) - HW_CHNL_NUM_MAX_4G_5G ) : \ - ((_prHifRxHdr)->ucHwChannelNum) ) - -/* To do: support more bands other than 2.4G and 5G */ -#define HIF_RX_HDR_GET_RF_BAND(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) <= HW_CHNL_NUM_MAX_2G4 ) ? \ - BAND_2G4 : BAND_5G) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_RX_HEADER_T) == 12); - - return; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hif_tx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hif_tx.h deleted file mode 100755 index 3a04ce55d9be..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/hif_tx.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hif_tx.h#1 $ -*/ - - - -/* -** $Log: hif_tx.h $ - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * 2. follow MSDN defined behavior when associates to another AP - * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:40 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-24 19:55:11 GMT mtk02752 -** adopt HIF_TX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-23 17:54:13 GMT mtk02752 -** CMD_HDR_SIZE = (sizeof(WIFI_CMD_T)) to follow up CM's CMD/EVENT documentation -** -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-17 22:41:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-17 17:34:07 GMT mtk02752 -** remove HIF_TX_BUFF_COUNT_TC0 (move to nic_tx.h) -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-17 12:14:12 GMT mtk02752 -** add initial value for HIF_TX_BUFF_COUNT_TC5 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-13 13:54:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-04 14:11:14 GMT mtk01084 -** modify SW TX data format -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-29 19:51:53 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-20 12:22:46 GMT mtk01461 -** Add SeqNum field to CMD Header -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:40:52 GMT mtk01461 -** Update the Log Sign -*/ - -#ifndef _HIF_TX_H -#define _HIF_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Maximum buffer size for individual HIF TCQ Buffer */ -#define HIF_TX_BUFF_MAX_SIZE 1552 /* Reserved field was not included */ - -/* Maximum buffer count for individual HIF TCQ */ -#define HIF_TX_BUFF_COUNT_TC0 3 -#define HIF_TX_BUFF_COUNT_TC1 3 -#define HIF_TX_BUFF_COUNT_TC2 3 -#define HIF_TX_BUFF_COUNT_TC3 3 -#define HIF_TX_BUFF_COUNT_TC4 2 - -#define TX_HDR_SIZE sizeof(HIF_TX_HEADER_T) - -#define CMD_HDR_SIZE sizeof(WIFI_CMD_T) - -#define CMD_PKT_SIZE_FOR_IMAGE 2048 /* !< 2048 Bytes CMD payload buffer */ - - -/*! NIC_HIF_TX_HEADER_T */ -// DW 0, Byte 0,1 -#define HIF_TX_HDR_TX_BYTE_COUNT_MASK BITS(0,11) -#define HIF_TX_HDR_USER_PRIORITY_OFFSET 12 - -// DW 0, Byte 2 -#define HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK BITS(0,7) - -// DW 0, Byte 3 -#define HIF_TX_HDR_IP_CSUM BIT(0) -#define HIF_TX_HDR_TCP_CSUM BIT(1) -#define HIF_TX_HDR_RESOURCE_MASK BITS(2,5) -#define HIF_TX_HDR_RESOURCE_OFFSET 2 -#define HIF_TX_HDR_PACKET_TYPE_MASK BITS(6,7) -#define HIF_TX_HDR_PACKET_TYPE_OFFSET 6 - -// DW 1, Byte 0 -#define HIF_TX_HDR_WLAN_HEADER_LEN_MASK BITS(0,5) - -// DW 1, Byte 1 -#define HIF_TX_HDR_FORMAT_ID_MASK BITS(0,2) -#define HIF_TX_HDR_NETWORK_TYPE_MASK BITS(4,5) -#define HIF_TX_HDR_NETWORK_TYPE_OFFSET 4 -#define HIF_TX_HDR_FLAG_1X_FRAME_MASK BIT(6) -#define HIF_TX_HDR_FLAG_1X_FRAME_OFFSET 6 -#define HIF_TX_HDR_FLAG_802_11_FORMAT_MASK BIT(7) -#define HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET 7 - - -// DW2, Byte 3 -#define HIF_TX_HDR_PS_FORWARDING_TYPE_MASK BITS(0,1) -#define HIF_TX_HDR_PS_SESSION_ID_MASK BITS(2,4) -#define HIF_TX_HDR_PS_SESSION_ID_OFFSET 2 -#define HIF_TX_HDR_BURST_END_MASK BIT(5) -#define HIF_TX_HDR_BURST_END_OFFSET 5 - -// DW3, Byte 1 -#define HIF_TX_HDR_NEED_ACK BIT(0) -#define HIF_TX_HDR_BIP BIT(1) -#define HIF_TX_HDR_BASIC_RATE BIT(2) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _HIF_HW_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - UINT_8 aucBuffer[0]; -} HIF_HW_TX_HEADER_T, *P_HIF_HW_TX_HEADER_T; - -typedef struct _HIF_TX_HEADER_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucWlanHeaderLength; - UINT_8 ucPktFormtId_Flags; - UINT_16 u2LLH; /* for BOW */ - UINT_16 u2SeqNo; /* for BOW */ - UINT_8 ucStaRecIdx; - UINT_8 ucForwardingType_SessionID_Reserved; - UINT_8 ucPacketSeqNo; - UINT_8 ucAck_BIP_BasicRate; - UINT_8 aucReserved[2]; -} HIF_TX_HEADER_T, *P_HIF_TX_HEADER_T; - -typedef enum _ENUM_HIF_TX_PKT_TYPE_T { - HIF_TX_PKT_TYPE_DATA = 0, - HIF_TX_PKT_TYPE_CMD, - HIF_TX_PKT_TYPE_HIF_LOOPBACK, - HIF_TX_PKT_TYPE_MANAGEMENT, - HIF_TX_PKT_TYPE_NUM -} ENUM_HIF_TX_PKT_TYPE_T, *P_ENUM_HIF_TX_PKT_TYPE_T; - -typedef enum _ENUM_HIF_OOB_CTRL_PKT_TYPE_T { - HIF_OOB_CTRL_PKT_TYPE_LOOPBACK = 1, - HIF_OOB_CTRL_PKT_TYP_NUM -} ENUM_HIF_OOB_CTRL_PKT_TYPE_T, *P_ENUM_HIF_OOB_CTRL_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define TFCB_FRAME_PAD_TO_DW(u2Length) ALIGN_4(u2Length) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - */ -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ); - -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_TX_HEADER_T) == 16); - - return; -} - -#endif /*_HIF_TX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/mac.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/mac.h deleted file mode 100755 index 8dbe16564db4..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/mac.h +++ /dev/null @@ -1,2218 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/mac.h#1 $ -*/ - -/*! \file "mac.h" - \brief Brief description. - - Detail description. -*/ - - - -/* -** $Log: mac.h $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * Add the length check before access the ie length filed. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * adding the length check before processing next ie.. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discover ability support. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Some action frame define is not belong to P2P. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add some service discovery MAC define, phase I. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 11 01 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * revert to previous revision. (this file is not necessary to be changed) - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * 1. Add P2P MAC define. - * 2. Add scan device found event - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add WFA specific OUI. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P IE ID & Vendor OUI TYPE for P2P. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge MAC.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added OFFSET_BAR_SSC_SN -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:00:24 GMT MTK02468 -** Added offsets and masks for the BA Parameter Set filed -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:26 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _MAC_H -#define _MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//3 /* --------------- Constants for Ethernet/802.11 MAC --------------- */ -/* MAC Address */ -#define MAC_ADDR_LEN 6 - -#define MAC_ADDR_LOCAL_ADMIN BIT(1) - -#define ETH_P_IPV4 0x0800 -#define ETH_P_IPX 0x8137 // Novell IPX -#define ETH_P_AARP 0x80F3 // AppleTalk Address Resolution Protocol (AARP) -#define ETH_P_IPV6 0x86DD - -#define IP_VERSION_4 4 -#define IP_VERSION_6 6 - -#define IP_PROTOCOL_TCP 6 -#define IP_PROTOCOL_UDP 17 - -#define IPV4_HDR_IP_PROTOCOL_OFFSET 9 -#define IPV4_HDR_IP_CSUM_OFFSET 10 - -#define IPV6_HDR_IP_PROTOCOL_OFFSET 6 - -#define TCP_HDR_TCP_CSUM_OFFSET 16 -#define UDP_HDR_UDP_CSUM_OFFSET 6 - -#define LLC_LEN 8 // LLC(3) + SNAP(3) + EtherType(2) - -#define NULL_MAC_ADDR {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} -#define BC_MAC_ADDR {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} - -/* Ethernet Frame Field Size, in byte */ -#define ETHER_HEADER_LEN 14 -#define ETHER_TYPE_LEN 2 -#define ETHER_MIN_PKT_SZ 60 -#define ETHER_MAX_PKT_SZ 1514 - -/* IEEE 802.11 WLAN Frame Field Size, in byte */ -#define WLAN_MAC_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_HEADER_A4_LEN 30 /* Address 4 included */ -#define WLAN_MAC_HEADER_QOS_LEN 26 /* QoS Control included */ -#define WLAN_MAC_HEADER_QOS_HTC_LEN 30 /* QoS Control and HTC included */ -#define WLAN_MAC_HEADER_A4_QOS_LEN 32 /* Address 4 and QoS Control included */ -#define WLAN_MAC_HEADER_A4_QOS_HTC_LEN 36 /* Address 4, QoS Control and HTC included */ -#define WLAN_MAC_MGMT_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_MGMT_HEADER_HTC_LEN 28 /* HTC included */ - -#define QOS_CTRL_LEN 2 -#define HT_CTRL_LEN 4 - -#define WLAN_MAC_CTS_ACK_LEN WLAN_MAC_CTS_ACK_FRAME_HEADER_LEN + FCS_LEN - -/* 6.2.1.1.2 Semantics of the service primitive */ -#define MSDU_MAX_LENGTH 2304 - -/* 7.1.3.3.3 Broadcast BSSID */ -#define BC_BSSID BC_MAC_ADDR - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.3.1.6 Listen Interval field */ -#define DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD 2 // In unit of AP's DTIM interval, -#define DEFAULT_LISTEN_INTERVAL 10 - -/* 7.3.2.1 Broadcast(Wildcard) SSID */ -#define BC_SSID "" -#define BC_SSID_LEN 0 - -/* 7.3.2.2 Data Rate Value */ -#define RATE_1M 2 /* 1M in unit of 500kb/s */ -#define RATE_2M 4 /* 2M */ -#define RATE_5_5M 11 /* 5.5M */ -#define RATE_11M 22 /* 11M */ -#define RATE_22M 44 /* 22M */ -#define RATE_33M 66 /* 33M */ -#define RATE_6M 12 /* 6M */ -#define RATE_9M 18 /* 9M */ -#define RATE_12M 24 /* 12M */ -#define RATE_18M 36 /* 18M */ -#define RATE_24M 48 /* 24M */ -#define RATE_36M 72 /* 36M */ -#define RATE_48M 96 /* 48M */ -#define RATE_54M 108 /* 54M */ -/* 7.3.2.14 BSS membership selector */ -#define RATE_HT_PHY 127 /* BSS Selector - Clause 20. HT PHY */ -#define RATE_MASK BITS(0,6) /* mask bits for the rate */ -#define RATE_BASIC_BIT BIT(7) /* mask bit for the rate belonging to the BSSBasicRateSet */ - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 9.2.10 DIFS */ -#define DIFS 2 /* 2 x aSlotTime */ - -/* 11.3 STA Authentication and Association */ -#define STA_STATE_1 0 /* Accept Class 1 frames */ -#define STA_STATE_2 1 /* Accept Class 1 & 2 frames */ -#define STA_STATE_3 2 /* Accept Class 1,2 & 3 frames */ - -/* 15.4.8.5 802.11k RCPI-dBm mapping*/ -#define NDBM_LOW_BOUND_FOR_RCPI 110 -#define RCPI_LOW_BOUND 0 -#define RCPI_HIGH_BOUND 220 -#define RCPI_MEASUREMENT_NOT_AVAILABLE 255 - - -/* PHY characteristics */ -/* 17.4.4/18.3.3/19.8.4 Slot Time (aSlotTime) */ -#define SLOT_TIME_LONG 20 /* Long Slot Time */ -#define SLOT_TIME_SHORT 9 /* Short Slot Time */ - -#define SLOT_TIME_HR_DSSS SLOT_TIME_LONG /* 802.11b aSlotTime */ -#define SLOT_TIME_OFDM SLOT_TIME_SHORT /* 802.11a aSlotTime(20M Spacing) */ -#define SLOT_TIME_OFDM_10M_SPACING 13 /* 802.11a aSlotTime(10M Spacing) */ -#define SLOT_TIME_ERP_LONG SLOT_TIME_LONG /* 802.11g aSlotTime(Long) */ -#define SLOT_TIME_ERP_SHORT SLOT_TIME_SHORT /* 802.11g aSlotTime(Short) */ - -/* 17.4.4/18.3.3/19.8.4 Contention Window (aCWmin & aCWmax) */ -#define CWMIN_OFDM 15 /* 802.11a aCWmin */ -#define CWMAX_OFDM 1023 /* 802.11a aCWmax */ - -#define CWMIN_HR_DSSS 31 /* 802.11b aCWmin */ -#define CWMAX_HR_DSSS 1023 /* 802.11b aCWmax */ - -#define CWMIN_ERP_0 31 /* 802.11g aCWmin(0) - for only have 1/2/5/11Mbps Rates */ -#define CWMIN_ERP_1 15 /* 802.11g aCWmin(1) */ -#define CWMAX_ERP 1023 /* 802.11g aCWmax */ - -/* Short Inter-Frame Space (aSIFSTime) */ -/* 15.3.3 802.11b aSIFSTime */ -#define SIFS_TIME_HR_DSSS 10 -/* 17.4.4 802.11a aSIFSTime */ -#define SIFS_TIME_OFDM 16 -/* 19.8.4 802.11g aSIFSTime */ -#define SIFS_TIME_ERP 10 - -/* 15.4.6.2 Number of operating channels */ -#define CH_1 0x1 -#define CH_2 0x2 -#define CH_3 0x3 -#define CH_4 0x4 -#define CH_5 0x5 -#define CH_6 0x6 -#define CH_7 0x7 -#define CH_8 0x8 -#define CH_9 0x9 -#define CH_10 0xa -#define CH_11 0xb -#define CH_12 0xc -#define CH_13 0xd -#define CH_14 0xe - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - - -//3 /* --------------- IEEE 802.11 PICS --------------- */ -/* Annex D - dot11OperationEntry 2 */ -#define DOT11_RTS_THRESHOLD_MIN 0 -#define DOT11_RTS_THRESHOLD_MAX 2347 // from Windows DDK -//#define DOT11_RTS_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_RTS_THRESHOLD_DEFAULT \ - DOT11_RTS_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 5 */ -#define DOT11_FRAGMENTATION_THRESHOLD_MIN 256 -#define DOT11_FRAGMENTATION_THRESHOLD_MAX 2346 // from Windows DDK -//#define DOT11_FRAGMENTATION_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_FRAGMENTATION_THRESHOLD_DEFAULT \ - DOT11_FRAGMENTATION_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 6 */ -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MIN 1 -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_DEFAULT 4095 // 802.11 define 512 - // MT5921 only aceept N <= 4095 - -/* Annex D - dot11OperationEntry 7 */ -#define DOT11_RECEIVE_LIFETIME_TU_MIN 1 -#define DOT11_RECEIVE_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_RECEIVE_LIFETIME_TU_DEFAULT 4096 // 802.11 define 512 - -/* Annex D - dot11StationConfigEntry 12 */ -#define DOT11_BEACON_PERIOD_MIN 1 // TU. -#define DOT11_BEACON_PERIOD_MAX 0xffff // TU. -#define DOT11_BEACON_PERIOD_DEFAULT 100 // TU. - -/* Annex D - dot11StationConfigEntry 13 */ -#define DOT11_DTIM_PERIOD_MIN 1 // TU. -#define DOT11_DTIM_PERIOD_MAX 255 // TU. -#define DOT11_DTIM_PERIOD_DEFAULT 1 // TU. - -/* Annex D - dot11RegDomainsSupportValue */ -#define REGULATION_DOMAIN_FCC 0x10 /* FCC (US) */ -#define REGULATION_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define REGULATION_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define REGULATION_DOMAIN_SPAIN 0x31 /* Spain */ -#define REGULATION_DOMAIN_FRANCE 0x32 /* France */ -#define REGULATION_DOMAIN_JAPAN 0x40 /* MKK (Japan) */ -#define REGULATION_DOMAIN_CHINA 0x50 /* China */ -#define REGULATION_DOMAIN_OTHER 0x00 /* Other */ - - - -//3 /* --------------- IEEE 802.11 MAC header fields --------------- */ -/* 7.1.3.1 Masks for the subfields in the Frame Control field */ -#define MASK_FC_PROTOCOL_VER BITS(0,1) -#define MASK_FC_TYPE BITS(2,3) -#define MASK_FC_SUBTYPE BITS(4,7) -#define MASK_FC_SUBTYPE_QOS_DATA BIT(7) -#define MASK_FC_TO_DS BIT(8) -#define MASK_FC_FROM_DS BIT(9) -#define MASK_FC_MORE_FRAG BIT(10) -#define MASK_FC_RETRY BIT(11) -#define MASK_FC_PWR_MGT BIT(12) -#define MASK_FC_MORE_DATA BIT(13) -#define MASK_FC_PROTECTED_FRAME BIT(14) -#define MASK_FC_ORDER BIT(15) - -#define MASK_FRAME_TYPE (MASK_FC_TYPE | MASK_FC_SUBTYPE) -#define MASK_TO_DS_FROM_DS (MASK_FC_TO_DS | MASK_FC_FROM_DS) - -#define MAX_NUM_OF_FC_SUBTYPES 16 -#define OFFSET_OF_FC_SUBTYPE 4 - - -/* 7.1.3.1.2 MAC frame types and subtypes */ -#define MAC_FRAME_TYPE_MGT 0 -#define MAC_FRAME_TYPE_CTRL BIT(2) -#define MAC_FRAME_TYPE_DATA BIT(3) -#define MAC_FRAME_TYPE_QOS_DATA (MAC_FRAME_TYPE_DATA | MASK_FC_SUBTYPE_QOS_DATA) - -#define MAC_FRAME_ASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0000) -#define MAC_FRAME_ASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0010) -#define MAC_FRAME_REASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0020) -#define MAC_FRAME_REASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0030) -#define MAC_FRAME_PROBE_REQ (MAC_FRAME_TYPE_MGT | 0x0040) -#define MAC_FRAME_PROBE_RSP (MAC_FRAME_TYPE_MGT | 0x0050) -#define MAC_FRAME_BEACON (MAC_FRAME_TYPE_MGT | 0x0080) -#define MAC_FRAME_ATIM (MAC_FRAME_TYPE_MGT | 0x0090) -#define MAC_FRAME_DISASSOC (MAC_FRAME_TYPE_MGT | 0x00A0) -#define MAC_FRAME_AUTH (MAC_FRAME_TYPE_MGT | 0x00B0) -#define MAC_FRAME_DEAUTH (MAC_FRAME_TYPE_MGT | 0x00C0) -#define MAC_FRAME_ACTION (MAC_FRAME_TYPE_MGT | 0x00D0) -#define MAC_FRAME_ACTION_NO_ACK (MAC_FRAME_TYPE_MGT | 0x00E0) - - -#define MAC_FRAME_CONTRL_WRAPPER (MAC_FRAME_TYPE_CTRL | 0x0070) -#define MAC_FRAME_BLOCK_ACK_REQ (MAC_FRAME_TYPE_CTRL | 0x0080) -#define MAC_FRAME_BLOCK_ACK (MAC_FRAME_TYPE_CTRL | 0x0090) -#define MAC_FRAME_PS_POLL (MAC_FRAME_TYPE_CTRL | 0x00A0) -#define MAC_FRAME_RTS (MAC_FRAME_TYPE_CTRL | 0x00B0) -#define MAC_FRAME_CTS (MAC_FRAME_TYPE_CTRL | 0x00C0) -#define MAC_FRAME_ACK (MAC_FRAME_TYPE_CTRL | 0x00D0) -#define MAC_FRAME_CF_END (MAC_FRAME_TYPE_CTRL | 0x00E0) -#define MAC_FRAME_CF_END_CF_ACK (MAC_FRAME_TYPE_CTRL | 0x00F0) - -#define MAC_FRAME_DATA (MAC_FRAME_TYPE_DATA | 0x0000) -#define MAC_FRAME_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0010) -#define MAC_FRAME_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0020) -#define MAC_FRAME_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0030) -#define MAC_FRAME_NULL (MAC_FRAME_TYPE_DATA | 0x0040) -#define MAC_FRAME_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0050) -#define MAC_FRAME_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0060) -#define MAC_FRAME_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0070) -#define MAC_FRAME_QOS_DATA (MAC_FRAME_TYPE_DATA | 0x0080) -#define MAC_FRAME_QOS_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0090) -#define MAC_FRAME_QOS_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00A0) -#define MAC_FRAME_QOS_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00B0) -#define MAC_FRAME_QOS_NULL (MAC_FRAME_TYPE_DATA | 0x00C0) -#define MAC_FRAME_QOS_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00E0) -#define MAC_FRAME_QOS_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00F0) - -/* 7.1.3.2 Mask for the AID value in the Duration/ID field */ -#define MASK_DI_DURATION BITS(0,14) -#define MASK_DI_AID BITS(0,13) -#define MASK_DI_AID_MSB BITS(14,15) -#define MASK_DI_CFP_FIXED_VALUE BIT(15) - -/* 7.1.3.4 Masks for the subfields in the Sequence Control field */ -#define MASK_SC_SEQ_NUM BITS(4,15) -#define MASK_SC_SEQ_NUM_OFFSET 4 -#define MASK_SC_FRAG_NUM BITS(0,3) -#define INVALID_SEQ_CTRL_NUM 0x000F /* According to 6.2.1.1.2 - * FRAG_NUM won't equal to 15 - */ - -/* 7.1.3.5 QoS Control field */ -#define TID_NUM 16 -#define TID_MASK BITS(0,3) -#define EOSP BIT(4) -#define ACK_POLICY BITS(5,6) -#define A_MSDU_PRESENT BIT(7) - -#define MASK_QC_TID BITS(0,3) -#define MASK_QC_EOSP BIT(4) -#define MASK_QC_EOSP_OFFSET 4 -#define MASK_QC_ACK_POLICY BITS(5, 6) -#define MASK_QC_ACK_POLICY_OFFSET 5 -#define MASK_QC_A_MSDU_PRESENT BIT(7) - -/* 7.1.3.5a HT Control field */ -#define HT_CTRL_LINK_ADAPTATION_CTRL BITS(0,15) -#define HT_CTRL_CALIBRATION_POSITION BITS(16,17) -#define HT_CTRL_CALIBRATION_SEQUENCE BITS(18,19) -#define HT_CTRL_CSI_STEERING BITS(22,23) -#define HT_CTRL_NDP_ANNOUNCEMENT BIT(24) -#define HT_CTRL_AC_CONSTRAINT BIT(30) -#define HT_CTRL_RDG_MORE_PPDU BIT(31) - -#define LINK_ADAPTATION_CTRL_TRQ BIT(1) -#define LINK_ADAPTATION_CTRL_MAI_MRQ BIT(2) -#define LINK_ADAPTATION_CTRL_MAI_MSI BITS(3,5) -#define LINK_ADAPTATION_CTRL_MFSI BITS(6,8) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_CMD BITS(9,11) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_DATA BITS(12,15) - -/* 7.1.3.5.3 Ack Policy subfield*/ -#define ACK_POLICY_NORMAL_ACK_IMPLICIT_BA_REQ 0 -#define ACK_POLICY_NO_ACK 1 -#define ACK_POLICY_NO_EXPLICIT_ACK_PSMP_ACK 2 -#define ACK_POLICY_BA 3 - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -#define PSPOLL_FRAME_LEN 16 /* w/o FCS */ - -/* 7.2.7.1 BAR */ -#define OFFSET_BAR_SSC_SN 4 - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 2009.11.30 mtk02468: Moved these definitions to the right place */ -#if 0 -/* Block Ack Parameter Set field */ -#define BA_PARM_BA_POLICY BIT(1) -#define BA_PARM_TID BITS(2,5) -#define BA_PARM_BUFFER_SIZE BITS(6,15) -#endif - -#define BA_POLICY_IMMEDIATE BIT(1) - -/* Block Ack Starting Sequence Control field */ -#define BA_START_SEQ_CTL_FRAG_NUM BITS(0,3) -#define BA_START_SEQ_CTL_SSN BITS(4,15) - -/* BAR Control field */ -#define BAR_CONTROL_NO_ACK_POLICY BIT(0) -#define BAR_CONTROL_MULTI_TID BIT(1) -#define BAR_CONTROL_COMPRESSED_BA BIT(2) -#define BAR_CONTROL_TID_INFO BITS(12,15) -#define BAR_CONTROL_TID_INFO_OFFSET 12 - -/* TID Value */ -#define BAR_INFO_TID_VALUE BITS(12,15) - -#define BAR_COMPRESSED_VARIANT_FRAME_LEN (16 + 4) - -//3 /* --------------- IEEE 802.11 frame body fields --------------- */ -//3 Management frame body components (I): Fixed Fields. -/* 7.3.1.1 Authentication Algorithm Number field */ -#define AUTH_ALGORITHM_NUM_FIELD_LEN 2 - -#define AUTH_ALGORITHM_NUM_OPEN_SYSTEM 0 /* Open System */ -#define AUTH_ALGORITHM_NUM_SHARED_KEY 1 /* Shared Key */ -#define AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION 2 /* Fast BSS Transition */ - -/* 7.3.1.2 Authentication Transaction Sequence Number field */ -#define AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN 2 -#define AUTH_TRANSACTION_SEQ_1 1 -#define AUTH_TRANSACTION_SEQ_2 2 -#define AUTH_TRANSACTION_SEQ_3 3 -#define AUTH_TRANSACTION_SEQ_4 4 - -/* 7.3.1.3 Beacon Interval field */ -#define BEACON_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.4 Capability Information field */ -#define CAP_INFO_FIELD_LEN 2 -#define CAP_INFO_ESS BIT(0) -#define CAP_INFO_IBSS BIT(1) -#define CAP_INFO_BSS_TYPE (CAP_INFO_ESS | CAP_INFO_IBSS) -#define CAP_INFO_CF_POLLABLE BIT(2) -#define CAP_INFO_CF_POLL_REQ BIT(3) -#define CAP_INFO_CF (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) -#define CAP_INFO_PRIVACY BIT(4) -#define CAP_INFO_SHORT_PREAMBLE BIT(5) -#define CAP_INFO_PBCC BIT(6) -#define CAP_INFO_CH_AGILITY BIT(7) -#define CAP_INFO_SPEC_MGT BIT(8) -#define CAP_INFO_QOS BIT(9) -#define CAP_INFO_SHORT_SLOT_TIME BIT(10) -#define CAP_INFO_APSD BIT(11) -#define CAP_INFO_RESERVED BIT(12) -#define CAP_INFO_DSSS_OFDM BIT(13) -#define CAP_INFO_DELAYED_BLOCK_ACK BIT(14) -#define CAP_INFO_IMM_BLOCK_ACK BIT(15) -/* STA usage of CF-Pollable and CF-Poll Request subfields */ -/* STA: not CF-Pollable */ -#define CAP_CF_STA_NOT_POLLABLE 0x0000 -/* STA: CF-Pollable, not requesting on the CF-Polling list */ -#define CAP_CF_STA_NOT_ON_LIST CAP_INFO_CF_POLL_REQ -/* STA: CF-Pollable, requesting on the CF-Polling list */ -#define CAP_CF_STA_ON_LIST CAP_INFO_CF_POLLABLE -/* STA: CF-Pollable, requesting never to be polled */ -#define CAP_CF_STA_NEVER_POLLED (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) - -/* AP usage of CF-Pollable and CF-Poll Request subfields */ -/* AP: No point coordinator (PC) */ -#define CAP_CF_AP_NO_PC 0x0000 -/* AP: PC at AP for delivery only (no polling) */ -#define CAP_CF_AP_DELIVERY_ONLY CAP_INFO_CF_POLL_REQ -/* AP: PC at AP for delivery and polling */ -#define CAP_CF_AP_DELIVERY_POLLING CAP_INFO_CF_POLLABLE - -/* 7.3.1.5 Current AP Address field */ -#define CURR_AP_ADDR_FIELD_LEN MAC_ADDR_LEN - -/* 7.3.1.6 Listen Interval field */ -#define LISTEN_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.7 Reason Code field */ -#define REASON_CODE_FIELD_LEN 2 - -#define REASON_CODE_RESERVED 0 /* Reseved */ -#define REASON_CODE_UNSPECIFIED 1 /* Unspecified reason */ -#define REASON_CODE_PREV_AUTH_INVALID 2 /* Previous auth no longer valid */ -#define REASON_CODE_DEAUTH_LEAVING_BSS 3 /* Deauth because sending STA is leaving BSS */ -#define REASON_CODE_DISASSOC_INACTIVITY 4 /* Disassoc due to inactivity */ -#define REASON_CODE_DISASSOC_AP_OVERLOAD 5 /* Disassoc because AP is unable to handle all assoc STAs */ -#define REASON_CODE_CLASS_2_ERR 6 /* Class 2 frame rx from nonauth STA */ -#define REASON_CODE_CLASS_3_ERR 7 /* Class 3 frame rx from nonassoc STA */ -#define REASON_CODE_DISASSOC_LEAVING_BSS 8 /* Disassoc because sending STA is leaving BSS */ -#define REASON_CODE_ASSOC_BEFORE_AUTH 9 /* STA requesting (re)assoc is not auth with responding STA */ -#define REASON_CODE_DISASSOC_PWR_CAP_UNACCEPTABLE 10 /* Disassoc because the info in Power Capability is unacceptable */ -#define REASON_CODE_DISASSOC_SUP_CHS_UNACCEPTABLE 11 /* Disassoc because the info in Supported Channels is unacceptable */ -#define REASON_CODE_INVALID_INFO_ELEM 13 /* Invalid information element */ -#define REASON_CODE_MIC_FAILURE 14 /* MIC failure */ -#define REASON_CODE_4_WAY_HANDSHAKE_TIMEOUT 15 /* 4-way handshake timeout */ -#define REASON_CODE_GROUP_KEY_UPDATE_TIMEOUT 16 /* Group key update timeout */ -#define REASON_CODE_DIFFERENT_INFO_ELEM 17 /* Info element in 4-way handshake different from (Re-)associate request/Probe response/Beacon */ -#define REASON_CODE_MULTICAST_CIPHER_NOT_VALID 18 /* Multicast Cipher is not valid */ -#define REASON_CODE_UNICAST_CIPHER_NOT_VALID 19 /* Unicast Cipher is not valid */ -#define REASON_CODE_AKMP_NOT_VALID 20 /* AKMP is not valid */ -#define REASON_CODE_UNSUPPORTED_RSNE_VERSION 21 /* Unsupported RSNE version */ -#define REASON_CODE_INVALID_RSNE_CAPABILITIES 22 /* Invalid RSNE Capabilities */ -#define REASON_CODE_IEEE_802_1X_AUTH_FAILED 23 /* IEEE 802.1X Authentication failed */ -#define REASON_CODE_CIPHER_REJECT_SEC_POLICY 24 /* Cipher suite rejected because of the security policy */ -#define REASON_CODE_DISASSOC_UNSPECIFIED_QOS 32 /* Disassoc for unspecified, QoS-related reason */ -#define REASON_CODE_DISASSOC_LACK_OF_BANDWIDTH 33 /* Disassoc because QAP lacks sufficient bandwidth for this QSTA */ -#define REASON_CODE_DISASSOC_ACK_LOST_POOR_CHANNEL 34 /* Disassoc because of too many ACKs lost for AP transmissions and/or poor channel conditions */ -#define REASON_CODE_DISASSOC_TX_OUTSIDE_TXOP_LIMIT 35 /* Disassoc because QSTA is transmitting outside the limits of its TXOPs */ -#define REASON_CODE_PEER_WHILE_LEAVING 36 /* QSTA is leaving the QBSS or resetting */ -#define REASON_CODE_PEER_REFUSE_DLP 37 /* Peer does not want to use this mechanism */ -#define REASON_CODE_PEER_SETUP_REQUIRED 38 /* Frames received but a setup is reqired */ -#define REASON_CODE_PEER_TIME_OUT 39 /* Time out */ -#define REASON_CODE_PEER_CIPHER_UNSUPPORTED 45 /* Peer does not support the requested cipher suite */ - -/* 7.3.1.8 AID field */ -#define AID_FIELD_LEN 2 -#define AID_MASK BITS(0,13) -#define AID_MSB BITS(14,15) -#define AID_MIN_VALUE 1 -#define AID_MAX_VALUE 2007 - -/* 7.3.1.9 Status Code field */ -#define STATUS_CODE_FIELD_LEN 2 - -#define STATUS_CODE_RESERVED 0 /* Reserved - Used by TX Auth */ -#define STATUS_CODE_SUCCESSFUL 0 /* Successful */ -#define STATUS_CODE_UNSPECIFIED_FAILURE 1 /* Unspecified failure */ -#define STATUS_CODE_CAP_NOT_SUPPORTED 10 /* Cannot support all requested cap in the Cap Info field */ -#define STATUS_CODE_REASSOC_DENIED_WITHOUT_ASSOC 11 /* Reassoc denied due to inability to confirm that assoc exists */ -#define STATUS_CODE_ASSOC_DENIED_OUTSIDE_STANDARD 12 /* Assoc denied due to reason outside the scope of this std. */ -#define STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED 13 /* Responding STA does not support the specified auth algorithm */ -#define STATUS_CODE_AUTH_OUT_OF_SEQ 14 /* Rx an auth frame with auth transaction seq num out of expected seq */ -#define STATUS_CODE_AUTH_REJECTED_CHAL_FAIL 15 /* Auth rejected because of challenge failure */ -#define STATUS_CODE_AUTH_REJECTED_TIMEOUT 16 /* Auth rejected due to timeout waiting for next frame in sequence */ -#define STATUS_CODE_ASSOC_DENIED_AP_OVERLOAD 17 /* Assoc denied because AP is unable to handle additional assoc STAs */ -#define STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED 18 /* Assoc denied due to requesting STA not supporting all of basic rates */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_PREAMBLE 19 /* Assoc denied due to requesting STA not supporting short preamble */ -#define STATUS_CODE_ASSOC_DENIED_NO_PBCC 20 /* Assoc denied due to requesting STA not supporting PBCC */ -#define STATUS_CODE_ASSOC_DENIED_NO_CH_AGILITY 21 /* Assoc denied due to requesting STA not supporting channel agility */ -#define STATUS_CODE_ASSOC_REJECTED_NO_SPEC_MGT 22 /* Assoc rejected because Spectrum Mgt capability is required */ -#define STATUS_CODE_ASSOC_REJECTED_PWR_CAP 23 /* Assoc rejected because the info in Power Capability is unacceptable */ -#define STATUS_CODE_ASSOC_REJECTED_SUP_CHS 24 /* Assoc rejected because the info in Supported Channels is unacceptable */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25 /* Assoc denied due to requesting STA not supporting short slot time */ -#define STATUS_CODE_ASSOC_DENIED_NO_DSSS_OFDM 26 /* Assoc denied due to requesting STA not supporting DSSS-OFDM */ -#if CFG_SUPPORT_802_11W -#define STATUS_CODE_ASSOC_REJECTED_TEMPORARILY 30 /* IEEE 802.11w, Assoc denied due to the SA query */ -#define STATUS_CODE_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31 /* IEEE 802.11w, Assoc denied due to the MFP select policy */ -#endif -#define STATUS_CODE_UNSPECIFIED_QOS_FAILURE 32 /* Unspecified, QoS-related failure */ -#define STATUS_CODE_ASSOC_DENIED_BANDWIDTH 33 /* Assoc denied due to insufficient bandwidth to handle another QSTA */ -#define STATUS_CODE_ASSOC_DENIED_POOR_CHANNEL 34 /* Assoc denied due to excessive frame loss rates and/or poor channel conditions */ -#define STATUS_CODE_ASSOC_DENIED_NO_QOS_FACILITY 35 /* Assoc denied due to requesting STA not supporting QoS facility */ -#define STATUS_CODE_REQ_DECLINED 37 /* Request has been declined */ -#define STATUS_CODE_REQ_INVALID_PARAMETER_VALUE 38 /* Request has not been successful as one or more parameters have invalid values */ -#define STATUS_CODE_REQ_NOT_HONORED_TSPEC 39 /* TS not created because request cannot be honored. Suggested TSPEC provided. */ -#define STATUS_CODE_INVALID_INFO_ELEMENT 40 /* Invalid information element */ -#define STATUS_CODE_INVALID_GROUP_CIPHER 41 /* Invalid group cipher */ -#define STATUS_CODE_INVALID_PAIRWISE_CIPHER 42 /* Invalid pairwise cipher */ -#define STATUS_CODE_INVALID_AKMP 43 /* Invalid AKMP */ -#define STATUS_CODE_UNSUPPORTED_RSN_IE_VERSION 44 /* Unsupported RSN information element version */ -#define STATUS_CODE_INVALID_RSN_IE_CAP 45 /* Invalid RSN information element capabilities */ -#define STATUS_CODE_CIPHER_SUITE_REJECTED 46 /* Cipher suite rejected because of security policy */ -#define STATUS_CODE_REQ_NOT_HONORED_TS_DELAY 47 /* TS not created becasue request cannot be honored. Attempt to create a TS later. */ -#define STATUS_CODE_DIRECT_LINK_NOT_ALLOWED 48 /* Direct Link is not allowed in the BSS by policy */ -#define STATUS_CODE_DESTINATION_STA_NOT_PRESENT 49 /* Destination STA is not present within this QBSS */ -#define STATUS_CODE_DESTINATION_STA_NOT_QSTA 50 /* Destination STA is not a QSTA */ -#define STATUS_CODE_ASSOC_DENIED_LARGE_LIS_INTERVAL 51 /* Association denied because the ListenInterval is too large */ - -/* proprietary definition of reserved field of Status Code */ -#define STATUS_CODE_JOIN_FAILURE 0xFFF0 /* Join failure */ -#define STATUS_CODE_JOIN_TIMEOUT 0xFFF1 /* Join timeout */ -#define STATUS_CODE_AUTH_TIMEOUT 0xFFF2 /* Authentication timeout */ -#define STATUS_CODE_ASSOC_TIMEOUT 0xFFF3 /* (Re)Association timeout */ -#define STATUS_CODE_CCX_CCKM_REASSOC_FAILURE 0xFFF4 /* CCX CCKM reassociation failure */ - - -/* 7.3.1.10 Timestamp field */ -#define TIMESTAMP_FIELD_LEN 8 - -/* 7.3.1.11 Category of Action field */ -#define CATEGORY_SPEC_MGT 0 -#define CATEGORY_QOS_ACTION 1 /* QoS action */ -#define CATEGORY_DLS_ACTION 2 /* Direct Link Protocol (DLP) action */ -#define CATEGORY_BLOCK_ACK_ACTION 3 /* Block ack action */ -#define CATEGORY_PUBLIC_ACTION 4 /* Public action */ -#define CATEGORY_RM_ACTION 5 /* Radio measurement action */ -#define CATEGORY_HT_ACTION 7 -#if CFG_SUPPORT_802_11W -#define CATEGORY_SA_QUERT_ACTION 8 -#endif -#define CATEGORY_WNM_ACTION 10 /* 802.11v Wireless Network Management */ -#define CATEGORY_UNPROTECTED_WNM_ACTION 11 /* 802.11v Wireless Network Management */ -#define CATEGORY_WME_MGT_NOTIFICATION 17 /* WME management notification */ -#define CATEGORY_VENDOR_SPECIFIC_ACTION 127 - - -/* 7.3.1.14 Block Ack Parameter Set field */ -#define BA_PARAM_SET_ACK_POLICY_MASK BIT(1) -#define BA_PARAM_SET_ACK_POLICY_MASK_OFFSET 1 -#define BA_PARAM_SET_TID_MASK BITS(2,5) -#define BA_PARAM_SET_TID_MASK_OFFSET 2 -#define BA_PARAM_SET_BUFFER_SIZE_MASK BITS(6,15) -#define BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET 6 - -#define BA_PARAM_SET_ACK_POLICY_IMMEDIATE_BA 1 -#define BA_PARAM_SET_ACK_POLICY_DELAYED_BA 0 - - -//3 Management frame body components (II): Information Elements. -/* 7.3.2 Element IDs of information elements */ -#define ELEM_HDR_LEN 2 - -#define ELEM_ID_SSID 0 /* SSID */ -#define ELEM_ID_SUP_RATES 1 /* Supported rates */ -#define ELEM_ID_FH_PARAM_SET 2 /* FH parameter set */ -#define ELEM_ID_DS_PARAM_SET 3 /* DS parameter set */ -#define ELEM_ID_CF_PARAM_SET 4 /* CF parameter set */ -#define ELEM_ID_TIM 5 /* TIM */ -#define ELEM_ID_IBSS_PARAM_SET 6 /* IBSS parameter set */ -#define ELEM_ID_COUNTRY_INFO 7 /* Country information */ -#define ELEM_ID_HOPPING_PATTERN_PARAM 8 /* Hopping pattern parameters */ -#define ELEM_ID_HOPPING_PATTERN_TABLE 9 /* Hopping pattern table */ -#define ELEM_ID_REQUEST 10 /* Request */ -#define ELEM_ID_BSS_LOAD 11 /* BSS load */ -#define ELEM_ID_EDCA_PARAM_SET 12 /* EDCA parameter set */ -#define ELEM_ID_TSPEC 13 /* Traffic specification (TSPEC) */ -#define ELEM_ID_TCLAS 14 /* Traffic classification (TCLAS) */ -#define ELEM_ID_SCHEDULE 15 /* Schedule */ -#define ELEM_ID_CHALLENGE_TEXT 16 /* Challenge text */ - -#define ELEM_ID_PWR_CONSTRAINT 32 /* Power constraint */ -#define ELEM_ID_PWR_CAP 33 /* Power capability */ -#define ELEM_ID_TPC_REQ 34 /* TPC request */ -#define ELEM_ID_TPC_REPORT 35 /* TPC report */ -#define ELEM_ID_SUP_CHS 36 /* Supported channels */ -#define ELEM_ID_CH_SW_ANNOUNCEMENT 37 /* Channel switch announcement */ -#define ELEM_ID_MEASUREMENT_REQ 38 /* Measurement request */ -#define ELEM_ID_MEASUREMENT_REPORT 39 /* Measurement report */ -#define ELEM_ID_QUIET 40 /* Quiet */ -#define ELEM_ID_IBSS_DFS 41 /* IBSS DFS */ -#define ELEM_ID_ERP_INFO 42 /* ERP information */ -#define ELEM_ID_TS_DELAY 43 /* TS delay */ -#define ELEM_ID_TCLAS_PROCESSING 44 /* TCLAS processing */ -#define ELEM_ID_HT_CAP 45 /* HT Capabilities subelement */ -#define ELEM_ID_QOS_CAP 46 /* QoS capability */ -#define ELEM_ID_RSN 48 /* RSN IE */ -#define ELEM_ID_EXTENDED_SUP_RATES 50 /* Extended supported rates */ -#if CFG_SUPPORT_802_11W -#define ELEM_ID_TIMEOUT_INTERVAL 56 /* 802.11w SA Timeout interval */ -#endif -#define ELEM_ID_HT_OP 61 /* HT Operation */ -#define ELEM_ID_SCO 62 /* Secondary Channel Offset */ -#define ELEM_ID_RRM_ENABLED_CAP 70 /* Radio Resource Management Enabled Capabilities */ -#define ELEM_ID_20_40_BSS_COEXISTENCE 72 /* 20/40 BSS Coexistence */ -#define ELEM_ID_20_40_INTOLERANT_CHNL_REPORT 73 /* 20/40 BSS Intolerant Channel Report */ -#define ELEM_ID_OBSS_SCAN_PARAMS 74 /* Overlapping BSS Scan Parameters */ -#define ELEM_ID_EXTENDED_CAP 127 /* Extended capabilities */ - -#define ELEM_ID_VENDOR 221 /* Vendor specific IE */ -#define ELEM_ID_WPA ELEM_ID_VENDOR /* WPA IE */ -#define ELEM_ID_WMM ELEM_ID_VENDOR /* WMM IE */ -#define ELEM_ID_P2P ELEM_ID_VENDOR /* WiFi Direct */ -#define ELEM_ID_WFD ELEM_ID_VENDOR /* WiFi Direct */ -#define ELEM_ID_WSC ELEM_ID_VENDOR /* WSC IE */ - -#define ELEM_ID_RESERVED 255 /* Reserved */ - - -/* 7.3.2.1 SSID element */ -#define ELEM_MAX_LEN_SSID 32 - -/* 7.3.2.2 Supported Rates */ -#define ELEM_MAX_LEN_SUP_RATES 8 - -/* 7.3.2.4 DS Parameter Set */ -#define ELEM_MAX_LEN_DS_PARAMETER_SET 1 - -/* 7.3.2.5 CF Parameter Set */ -#define ELEM_CF_PARM_LEN 8 - -/* 7.3.2.6 TIM */ -#define ELEM_MIX_LEN_TIM 4 -#define ELEM_MAX_LEN_TIM 254 - -/* 7.3.2.7 IBSS Parameter Set element */ -#define ELEM_MAX_LEN_IBSS_PARAMETER_SET 2 - -/* 7.3.2.8 Challenge Text element */ -#define ELEM_MIN_LEN_CHALLENGE_TEXT 1 -#define ELEM_MAX_LEN_CHALLENGE_TEXT 253 - -/* 7.3.2.9 Country Information element */ -/* Country IE should contain at least 3-bytes country code string and one subband triplet. */ -#define ELEM_MIN_LEN_COUNTRY_INFO 6 - -#define ELEM_ID_COUNTRY_INFO_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_SUBBAND_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_REGULATORY_TRIPLET_LEN_FIXED 3 - - -/* 7.3.2.13 ERP Information element */ -#define ELEM_MAX_LEN_ERP 1 -/* -- bits in the ERP Information element */ -#define ERP_INFO_NON_ERP_PRESENT BIT(0) /* NonERP_Present bit */ -#define ERP_INFO_USE_PROTECTION BIT(1) /* Use_Protection bit */ -#define ERP_INFO_BARKER_PREAMBLE_MODE BIT(2) /* Barker_Preamble_Mode bit */ - - -/* 7.3.2.14 Extended Supported Rates */ -#define ELEM_MAX_LEN_EXTENDED_SUP_RATES 255 - -#if CFG_SUPPORT_DFS // Add for DFS support -/* 7.3.2.19 Supported Channels element*/ -#define ELEM_MAX_LEN_SUPPPORTED_CHANNELS 7 -#endif - -/* 7.3.2.21 Measurement Request element */ -#define ELEM_RM_TYPE_BASIC_REQ 0 -#define ELEM_RM_TYPE_CCA_REQ 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REQ 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REQ 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REQ 4 -#define ELEM_RM_TYPE_BEACON_REQ 5 -#define ELEM_RM_TYPE_FRAME_REQ 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REQ 7 -#define ELEM_RM_TYPE_LCI_REQ 8 -#define ELEM_RM_TYPE_TS_REQ 9 -#define ELEM_RM_TYPE_MEASURE_PAUSE_REQ 255 - -/* 7.3.2.22 Measurement Report element */ -#define ELEM_RM_TYPE_BASIC_REPORT 0 -#define ELEM_RM_TYPE_CCA_REPORT 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REPORT 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REPORT 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REPORT 4 -#define ELEM_RM_TYPE_BEACON_REPORT 5 -#define ELEM_RM_TYPE_FRAME_REPORT 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REPORT 7 -#define ELEM_RM_TYPE_LCI_REPORT 8 -#define ELEM_RM_TYPE_TS_REPORT 9 - - -/* 7.3.2.25 RSN information element */ -#define ELEM_MAX_LEN_WPA 34 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_RSN 38 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_WAPI 38 /* one pairwise, one AKM suite, one BKID */ -#define ELEM_MAX_LEN_WSC 200/* one pairwise, one AKM suite, one BKID */ - -#if CFG_SUPPORT_802_11W -#define ELEM_WPA_CAP_MFPR BIT(6) -#define ELEM_WPA_CAP_MFPC BIT(7) -#endif - -/* 7.3.2.27 Extended Capabilities information element */ -#define ELEM_EXT_CAP_20_40_COEXIST_SUPPORT BIT(0) -#define ELEM_EXT_CAP_PSMP_CAP BIT(4) -#define ELEM_EXT_CAP_SERVICE_INTERVAL_GRANULARITY BIT(5) -#define ELEM_EXT_CAP_SCHEDULE_PSMP BIT(6) - -#define ELEM_MAX_LEN_EXT_CAP (3 - ELEM_HDR_LEN) - -/* 7.3.2.30 TSPEC element */ -#define TS_INFO_TRAFFIC_TYPE_MASK BIT(0) //WMM: 0 (Asynchronous TS of low-duty cycles) -#define TS_INFO_TID_OFFSET 1 -#define TS_INFO_TID_MASK BITS(1,4) -#define TS_INFO_DIRECTION_OFFSET 5 -#define TS_INFO_DIRECTION_MASK BITS(5,6) -#define TS_INFO_ACCESS_POLICY_OFFSET 7 -#define TS_INFO_ACCESS_POLICY_MASK BITS(7,8) //WMM: Bit(7,8) = (1,0) = EDCA -#define TS_INFO_AGGREGATION_MASK BIT(9) //WMM: 0 -#define TS_INFO_APSD_MASK BIT(10) -#define TS_INFO_UP_OFFSET 11 -#define TS_INFO_UP_MASK BITS(11,13) -#define TS_INFO_ACK_POLICY_OFFSET 14 -#define TS_INFO_ACK_POLICY_MASK BITS(14,15) -#define TS_INFO_SCHEDULE_MASK 16 - -/* 7.3.2.56 HT capabilities element */ -#define ELEM_MAX_LEN_HT_CAP (28 - ELEM_HDR_LEN) /* sizeof(IE_HT_CAP_T)-2 */ - -/* 7.3.2.56.2 HT capabilities Info field */ -#define HT_CAP_INFO_LDPC_CAP BIT(0) -#define HT_CAP_INFO_SUP_CHNL_WIDTH BIT(1) -#define HT_CAP_INFO_SM_POWER_SAVE BITS(2,3) -#define HT_CAP_INFO_HT_GF BIT(4) -#define HT_CAP_INFO_SHORT_GI_20M BIT(5) -#define HT_CAP_INFO_SHORT_GI_40M BIT(6) -#define HT_CAP_INFO_TX_STBC BIT(7) -#define HT_CAP_INFO_RX_STBC BITS(8,9) -#define HT_CAP_INFO_HT_DELAYED_BA BIT(10) -#define HT_CAP_INFO_MAX_AMSDU_LEN BIT(11) -#define HT_CAP_INFO_DSSS_CCK_IN_40M BIT(12) -#define HT_CAP_INFO_40M_INTOLERANT BIT(14) -#define HT_CAP_INFO_LSIG_TXOP_SUPPORT BIT(15) - -#define HT_CAP_INFO_RX_STBC_NO_SUPPORTED 0 -#define HT_CAP_INFO_RX_STBC_1_SS BIT(8) -#define HT_CAP_INFO_RX_STBC_2_SS BIT(9) -#define HT_CAP_INFO_RX_STBC_3_SS HT_CAP_INFO_RX_STBC - -/* 7.3.2.56.3 A-MPDU Parameters field */ -#define AMPDU_PARAM_MAX_AMPDU_LEN_EXP BITS(0,1) -#define AMPDU_PARAM_MIN_START_SPACING BITS(2,4) - -#define AMPDU_PARAM_MAX_AMPDU_LEN_8K 0 -#define AMPDU_PARAM_MAX_AMPDU_LEN_16K BIT(0) -#define AMPDU_PARAM_MAX_AMPDU_LEN_32K BIT(1) -#define AMPDU_PARAM_MAX_AMPDU_LEN_64K BITS(0,1) - -#define AMPDU_PARAM_MSS_NO_RESTRICIT 0 -#define AMPDU_PARAM_MSS_1_4_US BIT(2) -#define AMPDU_PARAM_MSS_1_2_US BIT(3) -#define AMPDU_PARAM_MSS_1_US BITS(2,3) -#define AMPDU_PARAM_MSS_2_US BIT(4) -#define AMPDU_PARAM_MSS_4_US (BIT(4) | BIT(2)) -#define AMPDU_PARAM_MSS_8_US (BIT(4) | BIT(3)) -#define AMPDU_PARAM_MSS_16_US BITS(2,4) - -/* 7.3.2.56.4 Supported MCS Set field (TX rate: octects 12~15) */ -#define SUP_MCS_TX_SET_DEFINED BIT(0) -#define SUP_MCS_TX_RX_SET_NOT_EQUAL BIT(1) -#define SUP_MCS_TX_MAX_NUM_SS BITS(2,3) -#define SUP_MCS_TX_UNEQUAL_MODULATION BIT(4) - -#define SUP_MCS_TX_MAX_NUM_1_SS 0 -#define SUP_MCS_TX_MAX_NUM_2_SS BIT(2) -#define SUP_MCS_TX_MAX_NUM_3_SS BIT(3) -#define SUP_MCS_TX_MAX_NUM_4_SS BITS(2,3) - -#define SUP_MCS_RX_BITMASK_OCTET_NUM 10 -#define SUP_MCS_RX_DEFAULT_HIGHEST_RATE 0 /* Not specify */ - -/* 7.3.2.56.5 HT Extended Capabilities field */ -#define HT_EXT_CAP_PCO BIT(0) -#define HT_EXT_CAP_PCO_TRANSITION_TIME BITS(1,2) -#define HT_EXT_CAP_MCS_FEEDBACK BITS(8,9) -#define HT_EXT_CAP_HTC_SUPPORT BIT(10) -#define HT_EXT_CAP_RD_RESPONDER BIT(11) - -#define HT_EXT_CAP_PCO_TRANS_TIME_NONE 0 -#define HT_EXT_CAP_PCO_TRANS_TIME_400US BIT(1) -#define HT_EXT_CAP_PCO_TRANS_TIME_1_5MS BIT(2) -#define HT_EXT_CAP_PCO_TRANS_TIME_5MS BITS(1,2) - -#define HT_EXT_CAP_MCS_FEEDBACK_NO_FB 0 -#define HT_EXT_CAP_MCS_FEEDBACK_UNSOLICITED BIT(9) -#define HT_EXT_CAP_MCS_FEEDBACK_BOTH BITS(8,9) - -/* 7.3.2.56.6 Transmit Beamforming Capabilities field */ - -/* 7.3.2.56.7 Antenna Selection Capability field */ -#define ASEL_CAP_CAPABLE BIT(0) -#define ASEL_CAP_CSI_FB_BY_TX_ASEL_CAPABLE BIT(1) -#define ASEL_CAP_ANT_INDICES_FB_BY_TX_ASEL_CAPABLE BIT(2) -#define ASEL_CAP_EXPLICIT_CSI_FB_CAPABLE BIT(3) -#define ASEL_CAP_ANT_INDICES_CAPABLE BIT(4) -#define ASEL_CAP_RX_ASEL_CAPABLE BIT(5) -#define ASEL_CAP_TX_SOUNDING_CAPABLE BIT(6) - -/* 7.3.2.57 HT Operation element */ -#define ELEM_MAX_LEN_HT_OP (24 - ELEM_HDR_LEN) /* sizeof(IE_HT_OP_T)-2 */ - -#define HT_OP_INFO1_SCO BITS(0,1) -#define HT_OP_INFO1_STA_CHNL_WIDTH BIT(2) -#define HT_OP_INFO1_RIFS_MODE BIT(3) - -#define HT_OP_INFO2_HT_PROTECTION BITS(0,1) -#define HT_OP_INFO2_NON_GF_HT_STA_PRESENT BIT(2) -#define HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT BIT(4) - -#define HT_OP_INFO3_DUAL_BEACON BIT(6) -#define HT_OP_INFO3_DUAL_CTS_PROTECTION BIT(7) -#define HT_OP_INFO3_STBC_BEACON BIT(8) -#define HT_OP_INFO3_LSIG_TXOP_FULL_SUPPORT BIT(9) -#define HT_OP_INFO3_PCO_ACTIVE BIT(10) -#define HT_OP_INFO3_PCO_PHASE BIT(11) - -/* 7.3.2.59 OBSS Scan Parameter element */ -#define ELEM_MAX_LEN_OBSS_SCAN (16 - ELEM_HDR_LEN) - -/* 7.3.2.60 20/40 BSS Coexistence element */ -#define ELEM_MAX_LEN_20_40_BSS_COEXIST (3 - ELEM_HDR_LEN) - -#define BSS_COEXIST_INFO_REQ BIT(0) -#define BSS_COEXIST_40M_INTOLERANT BIT(1) -#define BSS_COEXIST_20M_REQ BIT(2) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ BIT(3) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_GRANT BIT(4) - - -//3 Management frame body components (III): 7.4 Action frame format details. -/* 7.4.1 Spectrum Measurement Action frame details */ -#define ACTION_MEASUREMENT_REQ 0 /* Spectrum measurement request */ -#define ACTION_MEASUREMENT_REPORT 1 /* Spectrum measurement report */ -#define ACTION_TPC_REQ 2 /* TPC request */ -#define ACTION_TPC_REPORT 3 /* TPC report */ -#define ACTION_CHNL_SWITCH 4 /* Channel Switch Announcement */ - -/* 7.4.2 QoS Action frame details */ -#define ACTION_ADDTS_REQ 0 /* ADDTS request */ -#define ACTION_ADDTS_RSP 1 /* ADDTS response */ -#define ACTION_DELTS 2 /* DELTS */ -#define ACTION_SCHEDULE 3 /* Schedule */ - -#define ACTION_ADDTS_REQ_FRAME_LEN (24+3+63) /* WMM TSPEC IE: 63 */ -#define ACTION_ADDTS_RSP_FRAME_LEN (24+4+63) /* WMM Status Code: 1; WMM TSPEC IE: 63*/ - -/* 7.4.3 DLS Action frame details */ -#define ACTION_DLS_REQ 0 /* DLS request */ -#define ACTION_DLS_RSP 1 /* DLS response */ -#define ACTION_DLS_TEARDOWN 2 /* DLS teardown */ - -/* 7.4.4 Block ack Action frame details */ -#define ACTION_ADDBA_REQ 0 /* ADDBA request */ -#define ACTION_ADDBA_RSP 1 /* ADDBA response */ -#define ACTION_DELBA 2 /* DELBA */ - -#define ACTION_ADDBA_REQ_FRAME_LEN (24+9) -#define ACTION_ADDBA_RSP_FRAME_LEN (24+9) - -#define ACTION_DELBA_INITIATOR_MASK BIT(11) -#define ACTION_DELBA_TID_MASK BITS(12,15) -#define ACTION_DELBA_TID_OFFSET 12 -#define ACTION_DELBA_FRAME_LEN (24+6) - -/* 7.4.6 Radio Measurement Action frame details */ -#define ACTION_RM_REQ 0 /* Radio measurement request */ -#define ACTION_RM_REPORT 1 /* Radio measurement report */ -#define ACTION_LM_REQ 2 /* Link measurement request */ -#define ACTION_LM_REPORT 3 /* Link measurement report */ -#define ACTION_NEIGHBOR_REPORT_REQ 4 /* Neighbor report request */ -#define ACTION_NEIGHBOR_REPORT_RSP 5 /* Neighbor report response */ - -/* 7.4.7 Public Action frame details */ -#define ACTION_PUBLIC_20_40_COEXIST 0 /* 20/40 BSS coexistence */ - -#if CFG_SUPPORT_802_11W -/* SA Query Action frame (IEEE 802.11w/D8.0, 7.4.9) */ -#define ACTION_SA_QUERY_REQUEST 0 -#define ACTION_SA_QUERY_RESPONSE 1 - -#define ACTION_SA_QUERY_TR_ID_LEN 2 - -/* Timeout Interval Type */ -#define ACTION_SA_TIMEOUT_REASSOC_DEADLINE 1 -#define ACTION_SA_TIMEOUT_KEY_LIFETIME 2 -#define ACTION_SA_TIMEOUT_ASSOC_COMEBACK 3 -#endif - -/* 7.4.10.1 HT action frame details */ -#define ACTION_HT_NOTIFY_CHANNEL_WIDTH 0 /* Notify Channel Width */ -#define ACTION_HT_SM_POWER_SAVE 1 /* SM Power Save */ -#define ACTION_HT_PSMP 2 /* PSMP */ -#define ACTION_HT_SET_PCO_PHASE 3 /* Set PCO Phase */ -#define ACTION_HT_CSI 4 /* CSI */ -#define ACTION_HT_NON_COMPRESSED_BEAMFORM 5 /* Non-compressed Beamforming */ -#define ACTION_HT_COMPRESSED_BEAMFORM 6 /* Compressed Beamforming */ -#define ACTION_HT_ANT_SEL_INDICES_FB 7 /* Antenna Selection Indices Feedback */ - -/* 802.11v Wireless Network Management */ -#define ACTION_WNM_TIMING_MEASUREMENT_REQUEST 27 - -#define ACTION_UNPROTECTED_WNM_TIM 0 -#define ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT 1 - -#define ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN 12 - -//3 /* --------------- WFA frame body fields --------------- */ -#define VENDOR_OUI_WFA { 0x00, 0x50, 0xF2 } -#define VENDOR_OUI_WFA_SPECIFIC { 0x50, 0x6F, 0x9A } -#define VENDOR_OUI_TYPE_WPA 1 -#define VENDOR_OUI_TYPE_WMM 2 -#define VENDOR_OUI_TYPE_WPS 4 -#define VENDOR_OUI_TYPE_P2P 9 -#define VENDOR_OUI_TYPE_WFD 10 - -#define VENDOR_OUI_TYPE_LEN 4 /* Length of OUI and Type */ - -/* VERSION(2 octets for WPA) / SUBTYPE(1 octet)-VERSION(1 octet) fields for WMM in WFA IE */ -#define VERSION_WPA 0x0001 /* Little Endian Format */ -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_INFO 0x0100 -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_PARAM 0x0101 - -/* SUBTYPE(1 octet) for WMM */ -#define VENDOR_OUI_SUBTYPE_WMM_INFO 0x00 /* WMM Spec version 1.1 */ -#define VENDOR_OUI_SUBTYPE_WMM_PARAM 0x01 -#define VENDOR_OUI_SUBTYPE_WMM_TSPEC 0x02 - -/* VERSION(1 octet) for WMM */ -#define VERSION_WMM 0x01 /* WMM Spec version 1.1 */ - -/* WMM-2.1.6 QoS Control Field */ -#define WMM_QC_UP_MASK BITS(0,2) -#define WMM_QC_EOSP BIT(4) -#define WMM_QC_ACK_POLICY_MASK BITS(5, 6) -#define WMM_QC_ACK_POLICY_OFFSET 5 -#define WMM_QC_ACK_POLICY_ACKNOWLEDGE 0 -#define WMM_QC_ACK_POLICY_NOT_ACKNOWLEDGE (1 << WMM_QC_ACK_POLICY_OFFSET) - - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE 6 - - -//3 Control frame body -/* 7.2.1.7 BlockAckReq */ -#define CTRL_BAR_BAR_CONTROL_OFFSET 16 -#define CTRL_BAR_BAR_INFORMATION_OFFSET 18 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -typedef struct _LLC_SNAP_HEADER_T { - UINT_8 ucDSAP; - UINT_8 ucSSAP; - UINT_8 ucControl; - UINT_8 aucCode[3]; - UINT_16 u2Type; -} __KAL_ATTRIB_PACKED__ LLC_SNAP_HEADER_T, *P_LLC_SNAP_HEADER_T; - -//3 MAC Header. -/* Ethernet Frame Header */ -typedef struct _ETH_FRAME_HEADER_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_HEADER_T, *P_ETH_FRAME_HEADER_T; - -/* Ethernet Frame Structure */ -typedef struct _ETH_FRAME_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; - UINT_8 aucData[1]; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_T, *P_ETH_FRAME_T; - - -/* IEEE 802.11 WLAN Frame Structure */ -/* WLAN MAC Header (without Address 4 and QoS Control fields) */ -typedef struct _WLAN_MAC_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_T, *P_WLAN_MAC_HEADER_T; - - -/* WLAN MAC Header (QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_QOS_T, *P_WLAN_MAC_HEADER_QOS_T; - - -/* WLAN MAC Header (HT Control fields included) */ -typedef struct _WLAN_MAC_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_HT_T, *P_WLAN_MAC_HEADER_HT_T; - - -/* WLAN MAC Header (Address 4 included) */ -typedef struct _WLAN_MAC_HEADER_A4_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_T, *P_WLAN_MAC_HEADER_A4_T; - - -/* WLAN MAC Header (Address 4 and QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_A4_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_QOS_T, *P_WLAN_MAC_HEADER_A4_QOS_T; - - -typedef struct _WLAN_MAC_HEADER_A4_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_HT_T, *P_WLAN_MAC_HEADER_A4_HT_T; - - -/* 7.2.3 WLAN MAC Header for Management Frame - MMPDU */ -typedef struct _WLAN_MAC_MGMT_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2Duration; - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_T, *P_WLAN_MAC_MGMT_HEADER_T; - - -/* WLAN MAC Header for Management Frame (HT Control fields included) */ -typedef struct _WLAN_MAC_MGMT_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_HT_T, *P_WLAN_MAC_MGMT_HEADER_HT_T; - -//3 WLAN CONTROL Frame -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -typedef struct _CTRL_PSPOLL_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2AID; /* AID */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_8 aucTA[MAC_ADDR_LEN]; /* TA */ -} __KAL_ATTRIB_PACKED__ CTRL_PSPOLL_FRAME_T, *P_CTRL_PSPOLL_FRAME_T; - - -/* BAR */ -typedef struct _CTRL_BAR_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* RA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* TA */ - UINT_16 u2BarControl; - UINT_8 aucBarInfo[2]; /* Variable size */ -} __KAL_ATTRIB_PACKED__ CTRL_BAR_FRAME_T, *P_CTRL_BAR_FRAME_T; - -//3 WLAN Management Frame. -/* 7.2.3.1 WLAN Management Frame - Beacon Frame */ -typedef struct _WLAN_BEACON_FRAME_T { - /* Beacon header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_T, *P_WLAN_BEACON_FRAME_T; - -typedef struct _WLAN_BEACON_FRAME_BODY_T { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_BODY_T, *P_WLAN_BEACON_FRAME_BODY_T; - - -/* 7.2.3.3 WLAN Management Frame - Disassociation Frame */ -typedef struct _WLAN_DISASSOC_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Disassociation frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DISASSOC_FRAME_T, *P_WLAN_DISASSOC_FRAME_T; - - -/* 7.2.3.4 WLAN Management Frame - Association Request frame */ -typedef struct _WLAN_ASSOC_REQ_FRAME_T { - /* Association Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_REQ_FRAME_T, *P_WLAN_ASSOC_REQ_FRAME_T; - - -/* 7.2.3.5 WLAN Management Frame - Association Response frame */ -typedef struct _WLAN_ASSOC_RSP_FRAME_T { - /* Association Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Response frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2StatusCode; /* Status code */ - UINT_16 u2AssocId; /* Association ID */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - supported rates, and etc. */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_RSP_FRAME_T, *P_WLAN_ASSOC_RSP_FRAME_T; - - -/* 7.2.3.6 WLAN Management Frame - Reassociation Request frame */ -typedef struct _WLAN_REASSOC_REQ_FRAME_T { - /* Reassociation Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Reassociation Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucCurrentAPAddr[MAC_ADDR_LEN]; /* Current AP address */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_REASSOC_REQ_FRAME_T, *P_WLAN_REASSOC_REQ_FRAME_T; - - -/* 7.2.3.7 WLAN Management Frame - Reassociation Response frame - (the same as Association Response frame) */ -typedef WLAN_ASSOC_RSP_FRAME_T WLAN_REASSOC_RSP_FRAME_T, *P_WLAN_REASSOC_RSP_FRAME_T; - -/* 7.2.3.9 WLAN Management Frame - Probe Response Frame */ -typedef WLAN_BEACON_FRAME_T WLAN_PROBE_RSP_FRAME_T, *P_WLAN_PROBE_RSP_FRAME_T; - -/* 7.2.3.10 WLAN Management Frame - Authentication Frame */ -typedef struct _WLAN_AUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Authentication frame body */ - UINT_16 u2AuthAlgNum; /* Authentication algorithm number */ - UINT_16 u2AuthTransSeqNo; /* Authentication transaction sequence number */ - UINT_16 u2StatusCode; /* Status code */ - UINT_8 aucInfoElem[1]; /* Various IEs for Fast BSS Transition */ -} __KAL_ATTRIB_PACKED__ WLAN_AUTH_FRAME_T, *P_WLAN_AUTH_FRAME_T; - - -/* 7.2.3.11 WLAN Management Frame - Deauthentication Frame */ -typedef struct _WLAN_DEAUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Deauthentication frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DEAUTH_FRAME_T, *P_WLAN_DEAUTH_FRAME_T; - - - -//3 Information Elements. -/* 7.3.2 Generic element format */ -typedef struct _IE_HDR_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucInfo[1]; -} __KAL_ATTRIB_PACKED__ IE_HDR_T, *P_IE_HDR_T; - -/* 7.3.2.1 SSID element */ -typedef struct _IE_SSID_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; -} __KAL_ATTRIB_PACKED__ IE_SSID_T, *P_IE_SSID_T; - -/* 7.3.2.2 Supported Rates element */ -typedef struct _IE_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSupportedRates[ELEM_MAX_LEN_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_SUPPORTED_RATE_T, *P_IE_SUPPORTED_RATE_T; - -/* 7.3.2.4 DS Parameter Set element */ -typedef struct _IE_DS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCurrChnl; -} __KAL_ATTRIB_PACKED__ IE_DS_PARAM_SET_T, *P_IE_DS_PARAM_SET_T; - - -/* 7.3.2.5 CF Parameter Set element */ -typedef struct _IE_CF_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCFPCount; - UINT_8 ucCFPPeriod; - UINT_16 u2CFPMaxDur; - UINT_16 u2DurRemaining; -} __KAL_ATTRIB_PACKED__ IE_CF_PARAM_SET_T, *P_IE_CF_PARAM_SET_T; - - -/* 7.3.2.6 TIM */ -typedef struct _IE_TIM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucDTIMCount; - UINT_8 ucDTIMPeriod; - UINT_8 ucBitmapControl; - UINT_8 aucPartialVirtualMap[1]; -} __KAL_ATTRIB_PACKED__ IE_TIM_T, *P_IE_TIM_T; - -/* 7.3.2.7 IBSS Parameter Set element */ -typedef struct _IE_IBSS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ATIMWindow; -} __KAL_ATTRIB_PACKED__ IE_IBSS_PARAM_SET_T, *P_IE_IBSS_PARAM_SET_T; - -/* 7.3.2.8 Challenge Text element */ -typedef struct _IE_CHALLENGE_TEXT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucChallengeText[ELEM_MAX_LEN_CHALLENGE_TEXT]; -} __KAL_ATTRIB_PACKED__ IE_CHALLENGE_TEXT_T, *P_IE_CHALLENGE_TEXT_T; - -/* 7.3.2.9 Country information element */ -#if CFG_SUPPORT_802_11D -/*! \brief COUNTRY_INFO_TRIPLET is defined for the COUNTRY_INFO_ELEM structure. */ -typedef struct _COUNTRY_INFO_TRIPLET_T { - UINT_8 ucParam1; /*!< If param1 >= 201, this triplet is referred to as - Regulatory Triplet in 802_11J. */ - UINT_8 ucParam2; - UINT_8 ucParam3; -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_TRIPLET_T, *P_COUNTRY_INFO_TRIPLET_T; - -typedef struct _COUNTRY_INFO_SUBBAND_TRIPLET_T { - UINT_8 ucFirstChnlNum; /*!< First Channel Number */ - UINT_8 ucNumOfChnl; /*!< Number of Channels */ - INT_8 cMaxTxPwrLv; /*!< Maximum Transmit Power Level */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_SUBBAND_TRIPLET_T, *P_COUNTRY_INFO_SUBBAND_TRIPLET_T; - -typedef struct _COUNTRY_INFO_REGULATORY_TRIPLET_T { - UINT_8 ucRegExtId; /*!< Regulatory Extension Identifier, should - be greater than or equal to 201 */ - UINT_8 ucRegClass; /*!< Regulatory Class */ - UINT_8 ucCoverageClass; /*!< Coverage Class, unsigned 1-octet value 0~31 - , 32~255 reserved */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_REGULATORY_TRIPLET_T, *P_COUNTRY_INFO_REGULATORY_TRIPLET_T; - -typedef struct _IE_COUNTRY_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCountryStr[3]; - COUNTRY_INFO_SUBBAND_TRIPLET_T arCountryStr[1]; -} __KAL_ATTRIB_PACKED__ IE_COUNTRY_T, *P_IE_COUNTRY_T; -#endif /* CFG_SUPPORT_802_11D */ - -/* 7.3.2.13 ERP element */ -typedef struct _IE_ERP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucERP; -} __KAL_ATTRIB_PACKED__ IE_ERP_T, *P_IE_ERP_T; - -/* 7.3.2.14 Extended Supported Rates element */ -typedef struct _IE_EXT_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucExtSupportedRates[ELEM_MAX_LEN_EXTENDED_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_EXT_SUPPORTED_RATE_T, *P_IE_EXT_SUPPORTED_RATE_T; - -/* 7.3.2.15 Power Constraint element */ -typedef struct _IE_POWER_CONSTRAINT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucLocalPowerConstraint; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CONSTRAINT_T, *P_IE_POWER_CONSTRAINT_T; - -/* 7.3.2.16 Power Capability element */ -typedef struct _IE_POWER_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cMinTxPowerCap; /* Unit: dBm */ - INT_8 cMaxTxPowerCap; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CAP_T, *P_IE_POWER_CAP_T; - -/* 7.3.2.17 TPC request element */ -typedef struct _IE_TPC_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; -} __KAL_ATTRIB_PACKED__ IE_TPC_REQ_T, *P_IE_TPC_REQ_T; - -/* 7.3.2.18 TPC report element */ -typedef struct _IE_TPC_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cTxPower; /* Unit: dBm */ - INT_8 cLinkMargin; /* Unit: dB */ -} __KAL_ATTRIB_PACKED__ IE_TPC_REPORT_T, *P_IE_TPC_REPORT_T; - -#if CFG_SUPPORT_DFS // Add for DFS support -/* 7.3.2.19 Supported Channels element*/ -typedef struct _IE_SUPPORTED_CHANNELS_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucChannelNum[ELEM_MAX_LEN_SUPPPORTED_CHANNELS*2]; -} __KAL_ATTRIB_PACKED__ IE_SUPPORTED_CHANNELS_T, *P_IE_SUPPORTED_CHANNELS_T; - -/* 7.3.2.20 Channel Switch Announcement element*/ -typedef struct _IE_CHANNEL_SWITCH_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucChannelSwitchMode; - UINT_8 ucNewChannelNum; - UINT_8 ucChannelSwitchCount; -} __KAL_ATTRIB_PACKED__ IE_CHANNEL_SWITCH_T, *P_IE_CHANNEL_SWITCH_T; -#endif - -/* 7.3.2.21 Measurement Request element */ -typedef struct _IE_MEASUREMENT_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucRequestMode; - UINT_8 ucMeasurementType; - UINT_8 aucRequestFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REQ_T, *P_IE_MEASUREMENT_REQ_T; - -typedef struct _SM_BASIC_REQ_T { - UINT_8 ucChannel; - UINT_32 au4StartTime[2]; - UINT_16 u2Duration; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REQ_T, *P_SM_BASIC_REQ_T; - -/* SM_COMMON_REQ_T is not specified in Spec. Use it as common structure of SM */ -typedef SM_BASIC_REQ_T SM_REQ_COMMON_T, *P_SM_REQ_COMMON_T; -typedef SM_BASIC_REQ_T SM_CCA_REQ_T, *P_SM_CCA_REQ_T; -typedef SM_BASIC_REQ_T SM_RPI_HISTOGRAM_REQ_T, *P_SM_RPI_HISTOGRAM_REQ_T; - -typedef struct _RM_CHNL_LOAD_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REQ_T, *P_RM_CHNL_LOAD_REQ_T; - -typedef RM_CHNL_LOAD_REQ_T \ - RM_NOISE_HISTOGRAM_REQ_T, *P_RM_NOISE_HISTOGRAM_REQ_T; - -typedef struct _RM_BCN_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucMeasurementMode; - UINT_8 aucBssid[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_BCN_REQ_T, *P_RM_BCN_REQ_T; - -typedef struct _RM_FRAME_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucFrameReqType; - UINT_8 aucMacAddr[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_FRAME_REQ_T, *P_RM_FRAME_REQ_T; - -typedef struct _RM_STA_STATS_REQ_T { - UINT_8 aucPeerMacAddr[6]; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucGroupID; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_STA_STATS_REQ_T, *P_RM_STA_STATS_REQ_T; - -typedef struct _RM_LCI_REQ_T { - UINT_8 ucLocationSubject; - UINT_8 ucLatitudeResolution; - UINT_8 ucLongitudeResolution; - UINT_8 ucAltitudeResolution; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_LCI_REQ_T, *P_RM_LCI_REQ_T; - -typedef struct _RM_TS_MEASURE_REQ_T { - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucPeerStaAddr[6]; - UINT_8 ucTrafficID; - UINT_8 ucBin0Range; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_TS_MEASURE_REQ_T, *P_RM_TS_MEASURE_REQ_T; - -typedef struct _RM_MEASURE_PAUSE_REQ_T { - UINT_16 u2PauseTime; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_MEASURE_PAUSE_REQ_T, *P_RM_MEASURE_PAUSE_REQ_T; - -/* 7.3.2.22 Measurement Report element */ -typedef struct _IE_MEASUREMENT_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucReportMode; - UINT_8 ucMeasurementType; - UINT_8 aucReportFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REPORT_T, *P_IE_MEASUREMENT_REPORT_T; - -typedef struct _SM_BASIC_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucMap; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REPORT_T, *P_SM_BASIC_REPORT_T; - -typedef struct _SM_CCA_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucCcaBusyFraction; -} __KAL_ATTRIB_PACKED__ SM_CCA_REPORT_T, *P_SM_CCA_REPORT_T; - -typedef struct _SM_RPI_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 aucRPI[8]; -} __KAL_ATTRIB_PACKED__ SM_RPI_REPORT_T, *P_SM_RPI_REPORT_T; - -typedef struct _RM_CHNL_LOAD_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucChnlLoad; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REPORT_T, *P_RM_CHNL_LOAD_REPORT_T; - -typedef struct _RM_IPI_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucAntennaId; - INT_8 cANPI; - UINT_8 aucIPI[11]; -} __KAL_ATTRIB_PACKED__ RM_IPI_REPORT_T, *P_RM_IPI_REPORT_T; - -/* 7.3.2.23 Quiet element */ -typedef struct _IE_QUIET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCount; - UINT_8 ucPeriod; - UINT_16 u2Duration; - UINT_16 u2Offset; -} __KAL_ATTRIB_PACKED__ IE_QUIET_T, *P_IE_QUIET_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_EXT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCapabilities[1]; -} __KAL_ATTRIB_PACKED__ IE_EXT_CAP_T, *P_EXT_CAP_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_RRM_ENABLED_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCap[5]; -} __KAL_ATTRIB_PACKED__ IE_RRM_ENABLED_CAP_T, *P_IE_RRM_ENABLED_CAP_T; - -/* 7.3.2.56 HT Capabilities element */ -typedef struct _SUP_MCS_SET_FIELD { - UINT_8 aucRxMcsBitmask[SUP_MCS_RX_BITMASK_OCTET_NUM]; - UINT_16 u2RxHighestSupportedRate; - UINT_32 u4TxRateInfo; -} __KAL_ATTRIB_PACKED__ SUP_MCS_SET_FIELD, *P_SUP_MCS_SET_FIELD; - -typedef struct _IE_HT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2HtCapInfo; - UINT_8 ucAmpduParam; - SUP_MCS_SET_FIELD rSupMcsSet; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; -} __KAL_ATTRIB_PACKED__ IE_HT_CAP_T, *P_IE_HT_CAP_T; - -/* 7.3.2.57 HT Operation element */ -typedef struct _IE_HT_OP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucPrimaryChannel; - UINT_8 ucInfo1; - UINT_16 u2Info2; - UINT_16 u2Info3; - UINT_8 aucBasicMcsSet[16]; -} __KAL_ATTRIB_PACKED__ IE_HT_OP_T, *P_IE_HT_OP_T; - -/* 7.3.2.25 RSN Information element format */ -typedef struct _RSN_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ RSN_INFO_ELEM_T, *P_RSN_INFO_ELEM_T; - -/* 7.3.2.26 WPA Information element format */ -typedef struct _WPA_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UCHAR aucOui[3]; - UCHAR ucOuiType; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ WPA_INFO_ELEM_T, *P_WPA_INFO_ELEM_T; - -/* 7.3.2.58 20/40 BSS Intolerant Channel Report element */ -typedef struct _IE_INTOLERANT_CHNL_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucRegulatoryClass; - UINT_8 aucChannelList[1]; -} __KAL_ATTRIB_PACKED__ IE_INTOLERANT_CHNL_REPORT_T, *P_IE_INTOLERANT_CHNL_REPORT_T; - -/* 7.3.2.59 OBSS Scan Parameters element */ -typedef struct _IE_OBSS_SCAN_PARAM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ScanPassiveDwell; - UINT_16 u2ScanActiveDwell; - UINT_16 u2TriggerScanInterval; - UINT_16 u2ScanPassiveTotalPerChnl; - UINT_16 u2ScanActiveTotalPerChnl; - UINT_16 u2WidthTransDelayFactor; - UINT_16 u2ScanActivityThres; -} __KAL_ATTRIB_PACKED__ IE_OBSS_SCAN_PARAM_T, *P_IE_OBSS_SCAN_PARAM_T; - -/* 7.3.2.60 20/40 BSS Coexistence element */ -typedef struct _IE_20_40_COEXIST_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucData; -} __KAL_ATTRIB_PACKED__ IE_20_40_COEXIST_T, *P_IE_20_40_COEXIST_T; - - -//3 7.4 Action Frame. -/* 7.4 Action frame format */ -typedef struct _WLAN_ACTION_FRAME { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucActionDetails[1]; /* Action details */ -} __KAL_ATTRIB_PACKED__ WLAN_ACTION_FRAME, *P_WLAN_ACTION_FRAME; - -/* 7.4.1.1 Spectrum Measurement Request frame format */ -typedef struct _ACTION_SM_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements */ -} __KAL_ATTRIB_PACKED__ ACTION_SM_REQ_FRAME, *P_ACTION_SM_REQ_FRAME; - -/* 7.4.1.2 Spectrum Measurement Report frame format */ -typedef ACTION_SM_REQ_FRAME ACTION_SM_REPORT_FRAME, *P_ACTION_SM_REPORT_FRAME; - -/* 7.4.1.5 Channel Switch Announcement frame format */ -typedef struct _ACTION_CHANNEL_SWITCH_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 aucInfoElem[5]; /* Information elements */ -} __KAL_ATTRIB_PACKED__ _ACTION_CHANNEL_SWITCH_FRAME, *P_ACTION_CHANNEL_SWITCH_FRAME; - -/* 7.4.2.1 ADDTS Request frame format */ -typedef struct _ACTION_ADDTS_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_REQ_FRAME, *P_ACTION_ADDTS_REQ_FRAME; - - -/* 7.4.2.2 ADDTS Response frame format */ -typedef struct _ACTION_ADDTS_RSP_FRAME { - /* ADDTS Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Response frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucStatusCode; /* WMM Status Code is of one byte */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_RSP_FRAME, *P_ACTION_ADDTS_RSP_FRAME; - - -/* 7.4.2.3 DELTS frame format */ -typedef struct _ACTION_DELTS_FRAME { - /* DELTS MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* DELTS frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 aucTsInfo[3]; /* TS Info */ -} __KAL_ATTRIB_PACKED__ ACTION_DELTS_FRAME, *P_ACTION_DELTS_FRAME; - - -/* 7.4.4.1 ADDBA Request frame format */ -typedef struct _ACTION_ADDBA_REQ_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; - UINT_8 aucBAStartSeqCtrl[2]; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_FRAME_T, *P_ACTION_ADDBA_REQ_FRAME_T; - -typedef struct _ACTION_ADDBA_REQ_BODY_T{ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_BODY_T, *P_ACTION_ADDBA_REQ_BODY_T; - -/* 7.4.4.2 ADDBA Response frame format */ -typedef struct _ACTION_ADDBA_RSP_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucStatusCode[2]; - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_FRAME_T, *P_ACTION_ADDBA_RSP_FRAME_T; - -typedef struct _ACTION_ADDBA_RSP_BODY_T { - UINT_16 u2StatusCode; - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_BODY_T, *P_ACTION_ADDBA_RSP_BODY_T; - -/* 7.4.4.3 DELBA frame format */ -typedef struct _ACTION_DELBA_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_16 u2DelBaParameterSet; /* Bit 11 Initiator, Bits 12-15 TID */ - UINT_16 u2ReasonCode; /* 7.3.1.7 */ -} __KAL_ATTRIB_PACKED__ ACTION_DELBA_FRAME_T, *P_ACTION_DELBA_FRAME_T; - -/* 7.4.6.1 Radio Measurement Request frame format */ -typedef struct _ACTION_RM_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_16 u2Repetitions; /* Number of repetitions */ - UINT_8 aucInfoElem[1]; /* Measurement Request elements, such as - channel load request, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REQ_FRAME, *P_ACTION_RM_REQ_FRAME; - -/* 7.4.6.2 Radio Measurement Report frame format */ -typedef struct _ACTION_RM_REPORT_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Report frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Measurement Report elements, such as - channel load report, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REPORT_FRAME, *P_ACTION_RM_REPORT_FRAME; - -/* 7.4.7.1a 20/40 BSS Coexistence Management frame format */ -typedef struct _ACTION_20_40_COEXIST_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - IE_20_40_COEXIST_T rBssCoexist;/* 20/40 BSS coexistence element */ - IE_INTOLERANT_CHNL_REPORT_T rChnlReport;/* Intolerant channel report */ - -} __KAL_ATTRIB_PACKED__ ACTION_20_40_COEXIST_FRAME, *P_ACTION_20_40_COEXIST_FRAME; - - -#if CFG_SUPPORT_802_11W -/* 7.4.9 SA Query Management frame format */ -typedef struct _ACTION_SA_QUERY_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; /* Transaction id */ - -} __KAL_ATTRIB_PACKED__ ACTION_SA_QUERY_FRAME, *P_ACTION_SA_QUERY_FRAME; -#endif - -/* 7.4.10 Notify Channel Width Management frame format */ -typedef struct _ACTION_NOTIFY_CHNL_WIDTH_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucChannelWidth; /* Channel Width */ -} __KAL_ATTRIB_PACKED__ ACTION_NOTIFY_CHNL_WIDTH_FRAME, *P_ACTION_NOTIFY_CHNL_WIDTH_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement Request */ -typedef struct _ACTION_WNM_TIMING_MEAS_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Request Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucTrigger; /* Trigger */ -} __KAL_ATTRIB_PACKED__ ACTION_WNM_TIMING_MEAS_REQ_FRAME, *P_ACTION_WNM_TIMING_MEAS_REQ_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement */ -typedef struct _ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ - UINT_8 ucMaxToDErr; /* Maximum of ToD Error [10ns] */ - UINT_8 ucMaxToAErr; /* Maximum of ToA Error [10ns] */ -} __KAL_ATTRIB_PACKED__ ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME, *P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME; - -//3 Information Elements from WFA. -typedef struct _IE_WFA_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucOui[3]; - UINT_8 ucOuiType; - UINT_8 aucOuiSubTypeVersion[2]; - /*!< Please be noted. WPA defines a 16 bit field version - instead of one subtype field and one version field*/ -} __KAL_ATTRIB_PACKED__ IE_WFA_T, *P_IE_WFA_T; - -/* WAPI Information element format */ -typedef struct _WAPI_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_16 u2AuthKeyMgtSuiteCount; - UCHAR aucAuthKeyMgtSuite1[4]; -} __KAL_ATTRIB_PACKED__ WAPI_INFO_ELEM_T, *P_WAPI_INFO_ELEM_T; - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Convert the ECWmin(max) to CWmin(max) */ -#define ECW_TO_CW(_ECW) ((1 << (_ECW)) - 1) - -/* Convert the RCPI to dBm */ -#define RCPI_TO_dBm(_rcpi) \ - ((PARAM_RSSI)(((_rcpi) > RCPI_HIGH_BOUND ? RCPI_HIGH_BOUND : (_rcpi)) >> 1) - NDBM_LOW_BOUND_FOR_RCPI) - -/* Convert the dBm to RCPI */ -#define dBm_TO_RCPI(_dbm) \ - (RCPI)( ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) > RCPI_HIGH_BOUND) ? RCPI_HIGH_BOUND : \ - ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) < RCPI_LOW_BOUND ? RCPI_LOW_BOUND : \ - (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) ) ) - -/* Convert an unsigned char pointer to an information element pointer */ -#define IE_ID(fp) (((P_IE_HDR_T) fp)->ucId) -#define IE_LEN(fp) (((P_IE_HDR_T) fp)->ucLength) -#define IE_SIZE(fp) (ELEM_HDR_LEN + IE_LEN(fp)) - -#define SSID_IE(fp) ((P_IE_SSID_T) fp) - -#define SUP_RATES_IE(fp) ((P_IE_SUPPORTED_RATE_T) fp) - -#define DS_PARAM_IE(fp) ((P_IE_DS_PARAM_SET_T) fp) - -#define TIM_IE(fp) ((P_IE_TIM_T) fp) - -#define IBSS_PARAM_IE(fp) ((P_IE_IBSS_PARAM_SET_T) fp) - -#define ERP_INFO_IE(fp) ((P_IE_ERP_T) fp) - -#define EXT_SUP_RATES_IE(fp) ((P_IE_EXT_SUPPORTED_RATE_T) fp) - -#define WFA_IE(fp) ((P_IE_WFA_T) fp) - -#if CFG_SUPPORT_802_11D -#define COUNTRY_IE(fp) ((P_IE_COUNTRY_T) fp) -#endif - -#define EXT_CAP_IE(fp) ((P_EXT_CAP_T) fp) - -#define HT_CAP_IE(fp) ((P_IE_HT_CAP_T) fp) - -#define HT_OP_IE(fp) ((P_IE_HT_OP_T) fp) - -#define OBSS_SCAN_PARAM_IE(fp) ((P_IE_OBSS_SCAN_PARAM_T) fp) - -#define BSS_20_40_COEXIST_IE(fp) ((P_IE_20_40_COEXIST_T) fp) - -#define QUIET_IE(fp) ((P_IE_QUIET_T) fp) - -#if CFG_SUPPORT_DFS // Add for DFS support -#define SUPPORTED_CHANNELS_IE(fp) ((P_IE_SUPPORTED_CHANNELS_T)fp) -#endif - - - -/* The macro to check if the MAC address is B/MCAST Address */ -#define IS_BMCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) ( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to check if the MAC address is UCAST Address */ -#define IS_UCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) !( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to copy the MAC address */ -#define COPY_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - kalMemCopy(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN) - -/* The macro to check if two MAC addresses are equal */ -#define EQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (!kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - -/* The macro to check if two MAC addresses are not equal */ -#define UNEQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - - -/* The macro to check whether two SSIDs are equal */ -#define EQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 <= ELEM_MAX_LEN_SSID) && \ - (ucSsidLen2 <= ELEM_MAX_LEN_SSID) && \ - ((ucSsidLen1) == (ucSsidLen2)) && \ - !kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to check whether two SSIDs are equal */ -#define UNEQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 > ELEM_MAX_LEN_SSID) || \ - (ucSsidLen2 > ELEM_MAX_LEN_SSID) || \ - ((ucSsidLen1) != (ucSsidLen2)) || \ - kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to copy the SSID, the length of pucDestSsid should have at least 32 bytes */ -#define COPY_SSID(pucDestSsid, ucDestSsidLen, pucSrcSsid, ucSrcSsidLen) \ - do { \ - ucDestSsidLen = ucSrcSsidLen; \ - if (ucSrcSsidLen) { \ - ASSERT(ucSrcSsidLen <= ELEM_MAX_LEN_SSID); \ - kalMemCopy(pucDestSsid, pucSrcSsid, ((ucSrcSsidLen > ELEM_MAX_LEN_SSID) ? ELEM_MAX_LEN_SSID : ucSrcSsidLen)); \ - } \ - } while (FALSE) - -/* The macro to copy the IE */ -#define COPY_IE(pucDestIE, pucSrcIE) \ - do { \ - kalMemCopy((PUINT_8)pucDestIE, \ - (PUINT_8)pucSrcIE,\ - IE_SIZE(pucSrcIE)); \ - } while (FALSE) - -#define IE_FOR_EACH(_pucIEsBuf, _u2IEsBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((((_u2Offset) + 2) <= (_u2IEsBufLen)) && (((_u2Offset) + IE_SIZE(_pucIEsBuf)) <= (_u2IEsBufLen))) ; \ - (_u2Offset) += IE_SIZE(_pucIEsBuf), (_pucIEsBuf) += IE_SIZE(_pucIEsBuf)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MAC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/mt6620_reg.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/mt6620_reg.h deleted file mode 100755 index 3f2eacd3a1a2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/mt6620_reg.h +++ /dev/null @@ -1,286 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/mt6620_reg.h#1 $ -*/ - -/*! \file "mt6620_reg.h" - \brief The common register definition of mt6620 - - N/A -*/ - - - -/* -** $Log: mt6620_reg.h $ - * - * 01 31 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Print firmware ASSERT info at Android kernel log, driver side - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-12-10 16:44:18 GMT mtk02752 -** remove 5921 definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-09 22:56:32 GMT mtk01084 -** modify HW register definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-04 14:11:04 GMT mtk01084 -** modify default IER bits -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:52:32 GMT mtk01084 -** modify data struture -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:08:20 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:53 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-09-09 17:26:11 GMT mtk01084 -** add CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-18 20:59:57 GMT mtk01426 -** Update WHIER_DEFAULT value -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-07 16:57:36 GMT mtk01426 -** Update CHIP ID to 0x6620, and WHLPCR bit definition -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:34:57 GMT mtk01461 -** Add read WTSR and fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-24 09:46:52 GMT mtk01084 -** fix LINT error -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:32:24 GMT mtk01461 -** Define constants for TX PATH -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:54:10 GMT mtk01426 -** Add WHCR_MAX_HIF_RX_AGG_LEN_OFFSET definition -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:29 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _MT6620_REG_H -#define _MT6620_REG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -//1 MT6620 MCR Definition - -//2 Host Interface - -//4 CHIP ID Register -#define MCR_WCIR 0x0000 - -//4 HIF Low Power Control Register -#define MCR_WHLPCR 0x0004 -//#define MCR_WHLPCR_BYTE1 0x0005 - - -//4 Control Status Register -#define MCR_WSDIOCSR 0x0008 -#define MCR_WSPICSR 0x0008 - -//4 HIF Control Register -#define MCR_WHCR 0x000C - -//4 HIF Interrupt Status Register -#define MCR_WHISR 0x0010 - -//4 HIF Interrupt Enable Register -#define MCR_WHIER 0x0014 - -//4 Abnormal Status Register -#define MCR_WASR 0x0018 - -//4 WLAN Software Interrupt Control Register -#define MCR_WSICR 0x001C - -//4 WLAN TX Status Register -#define MCR_WTSR0 0x0020 - -//4 WLAN TX Status Register -#define MCR_WTSR1 0x0024 - -//4 WLAN TX Data Register 0 -#define MCR_WTDR0 0x0028 - -//4 WLAN TX Data Register 1 -#define MCR_WTDR1 0x002C - -//4 WLAN RX Data Register 0 -#define MCR_WRDR0 0x0030 - -//4 WLAN RX Data Register 1 -#define MCR_WRDR1 0x0034 - -//4 Host to Device Send Mailbox 0 Register -#define MCR_H2DSM0R 0x0038 - -//4 Host to Device Send Mailbox 1 Register -#define MCR_H2DSM1R 0x003c - -//4 Device to Host Receive Mailbox 0 Register -#define MCR_D2HRM0R 0x0040 - -//4 Device to Host Receive Mailbox 1 Register -#define MCR_D2HRM1R 0x0044 - -//4 WLAN RX Packet Length Register -#define MCR_WRPLR 0x0048 - - - - -//temp //#if CFG_SDIO_INTR_ENHANCE -typedef struct _ENHANCE_MODE_DATA_STRUCT_T { - UINT_32 u4WHISR; - union { - struct { - UINT_8 ucTQ0Cnt; - UINT_8 ucTQ1Cnt; - UINT_8 ucTQ2Cnt; - UINT_8 ucTQ3Cnt; - UINT_8 ucTQ4Cnt; - UINT_8 ucTQ5Cnt; - UINT_16 u2Rsrv; - } u; - UINT_32 au4WTSR[2]; - } rTxInfo; - union { - struct { - UINT_16 u2NumValidRx0Len; - UINT_16 u2NumValidRx1Len; - UINT_16 au2Rx0Len[16]; - UINT_16 au2Rx1Len[16]; - } u; - UINT_32 au4RxStatusRaw[17]; - } rRxInfo; - UINT_32 u4RcvMailbox0; - UINT_32 u4RcvMailbox1; -} ENHANCE_MODE_DATA_STRUCT_T, *P_ENHANCE_MODE_DATA_STRUCT_T; -// #endif /* ENHANCE_MODE_DATA_STRUCT_T */ - - -//2 Definition in each register -//3 WCIR 0x0000 -#define WCIR_WLAN_READY BIT(21) -#define WCIR_POR_INDICATOR BIT(20) -#define WCIR_REVISION_ID BITS(16,19) -#define WCIR_CHIP_ID BITS(0,15) - -#define MTK_CHIP_REV 0x00006620 -#define MTK_CHIP_MP_REVERSION_ID 0x0 - -//3 WHLPCR 0x0004 -#define WHLPCR_FW_OWN_REQ_CLR BIT(9) -#define WHLPCR_FW_OWN_REQ_SET BIT(8) -#define WHLPCR_IS_DRIVER_OWN BIT(8) -#define WHLPCR_INT_EN_CLR BIT(1) -#define WHLPCR_INT_EN_SET BIT(0) - -//3 WSDIOCSR 0x0008 -#define WSDIOCSR_SDIO_RE_INIT_EN BIT(0) - -//3 WSPICSR 0x0008 -#define WCSR_SPI_MODE_SEL BITS(3,4) -#define WCSR_SPI_ENDIAN_BIG BIT(2) -#define WCSR_SPI_INT_OUT_MODE BIT(1) -#define WCSR_SPI_DATA_OUT_MODE BIT(0) - -//3 WHCR 0x000C -#define WHCR_RX_ENHANCE_MODE_EN BIT(16) -#define WHCR_MAX_HIF_RX_LEN_NUM BITS(4,7) -#define WHCR_W_MAILBOX_RD_CLR_EN BIT(2) -#define WHCR_W_INT_CLR_CTRL BIT(1) -#define WHCR_MCU_DBG_EN BIT(0) -#define WHCR_OFFSET_MAX_HIF_RX_LEN_NUM 4 - -//3 WHISR 0x0010 -#define WHISR_D2H_SW_INT BITS(8,31) -#define WHISR_D2H_SW_ASSERT_INFO_INT BIT(31) -#define WHISR_FW_INT_INDICATOR BIT(7) -#define WHISR_FW_OWN_BACK_INT BIT(4) -#define WHISR_ABNORMAL_INT BIT(3) -#define WHISR_RX1_DONE_INT BIT(2) -#define WHISR_RX0_DONE_INT BIT(1) -#define WHISR_TX_DONE_INT BIT(0) - - -//3 WHIER 0x0014 -#define WHIER_D2H_SW_INT BITS(8,31) -#define WHIER_FW_INT_INDICATOR_EN BIT(7) -#define WHIER_FW_OWN_BACK_INT_EN BIT(4) -#define WHIER_ABNORMAL_INT_EN BIT(3) -#define WHIER_RX1_DONE_INT_EN BIT(2) -#define WHIER_RX0_DONE_INT_EN BIT(1) -#define WHIER_TX_DONE_INT_EN BIT(0) -#define WHIER_DEFAULT (WHIER_RX0_DONE_INT_EN | \ - WHIER_RX1_DONE_INT_EN | \ - WHIER_TX_DONE_INT_EN | \ - WHIER_ABNORMAL_INT_EN | \ - WHIER_D2H_SW_INT \ - ) - - -//3 WASR 0x0018 -#define WASR_FW_OWN_INVALID_ACCESS BIT(4) -#define WASR_RX1_UNDER_FLOW BIT(3) -#define WASR_RX0_UNDER_FLOW BIT(2) -#define WASR_TX1_OVER_FLOW BIT(1) -#define WASR_TX0_OVER_FLOW BIT(0) - - -//3 WSICR 0x001C -#define WSICR_H2D_SW_INT_SET BITS(16,31) - - -//3 WTSR0 0x0044 -#define WRPLR_RX1_PACKET_LENGTH BITS(16,31) -#define WRPLR_RX0_PACKET_LENGTH BITS(0,15) - -#endif /* _MT6620_REG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic.h deleted file mode 100755 index 64631384d9dc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic.h +++ /dev/null @@ -1,724 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic.h#1 $ -*/ - -/*! \file "nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - - - -/* -** $Log: nic.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-10-13 21:58:58 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-24 21:12:55 GMT mtk01104 -** Add function prototype nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:54 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:32 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_H -#define _NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -struct _REG_ENTRY_T { - UINT_32 u4Offset; - UINT_32 u4Value; -}; - -struct _TABLE_ENTRY_T { - P_REG_ENTRY_T pu4TablePtr; - UINT_16 u2Size; -}; - -/*! INT status to event map */ -typedef struct _INT_EVENT_MAP_T { - UINT_32 u4Int; - UINT_32 u4Event; -} INT_EVENT_MAP_T, *P_INT_EVENT_MAP_T; - - -enum ENUM_INT_EVENT_T { - INT_EVENT_ABNORMAL, - INT_EVENT_SW_INT, - INT_EVENT_TX, - INT_EVENT_RX, - INT_EVENT_NUM -}; - -typedef enum _ENUM_IE_UPD_METHOD_T { - IE_UPD_METHOD_UPDATE_RANDOM, - IE_UPD_METHOD_UPDATE_ALL, - IE_UPD_METHOD_DELETE_ALL, -} ENUM_IE_UPD_METHOD_T, *P_ENUM_IE_UPD_METHOD_T; - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in nic.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ); - -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ); - - -#if CFG_SDIO_INTR_ENHANCE -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ); -#endif - -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ); - -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(_HIF_SPI) -void -nicRestoreSpiDefMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data); - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data); - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ); - -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingStaMMPDU( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ); - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -/* Media State Change */ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -/* Utility function for channel number conversion */ -UINT_32 -nicChannelNum2Freq ( - IN UINT_32 u4ChannelNum - ); - -UINT_32 -nicFreq2ChannelNum ( - IN UINT_32 u4FreqInKHz - ); - -/* firmware command wrapper */ - /* NETWORK (WIFISYS) */ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - - /* BSS-INFO */ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* BSS-INFO Indication (PM) */ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* Beacon Template Update */ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ); - -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ); - -/*----------------------------------------------------------------------------*/ -/* Calibration Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ); - -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ); - -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ); - - -/*----------------------------------------------------------------------------*/ -/* PHY configuration */ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* MGMT and System Service Control */ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ); - -/*----------------------------------------------------------------------------*/ -/* Scan Result Processing */ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ); - -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/* Workaround Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Fixed Rate Hacking */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 u2HtCapInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Write registers */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ); - -/*----------------------------------------------------------------------------*/ -/* Update auto rate */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ); - -/*----------------------------------------------------------------------------*/ -/* Enable/Disable Roaming */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ); - - -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* Link Quality Updating */ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ); - -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ); - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ); -#endif - -#endif /* _NIC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic_rx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic_rx.h deleted file mode 100755 index 49ca2991abab..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic_rx.h +++ /dev/null @@ -1,529 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_rx.h#1 $ -*/ - -/*! \file "nic_rx.h" - \brief The declaration of the nic rx functions - -*/ - - - -/* -** $Log: nic_rx.h $ - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Change prototype of API of adding P2P device to scan result. - * Additional IE buffer is saved. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 08 03 2010 cp.wu - * NULL - * newly added P2P API should be declared in header file. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * 2) firmware image length is now retrieved via NdisFileOpen - * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * 4) nicRxWaitResponse() revised - * * 5) another set of TQ counter default value is added for fw-download state - * * 6) Wi-Fi load address is now retrieved from registry too - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * and result is retrieved by get ATInfo instead - * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:49:09 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 14:02:37 GMT MTK02468 -** Added ucStaRecIdx in SW_RFB_T and HALF_SEQ_NO_COUNT definition (to replace HALF_SEQ_NO_CNOUT) -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-27 11:07:54 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 18:18:09 GMT mtk02752 -** modify nicRxAddScanResult() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-24 22:42:22 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-24 19:57:06 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 21:43:04 GMT mtk02752 -** correct ENUM_RX_PKT_DESTINATION_T definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 15:28:25 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packet are queued by RX reordering buffer/forwarding path -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 15:05:01 GMT mtk02752 -** add eTC for SW_RFB_T and structure RX_MAILBOX -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 21:16:57 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-13 16:59:30 GMT mtk02752 -** add handler for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-13 13:45:50 GMT mtk02752 -** add port param for nicRxEnhanceReadBuffer() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-11 10:12:31 GMT mtk02752 -** nicSDIOReadIntStatus() always read sizeof(ENHANCE_MODE_DATA_STRUCT_T) for int response, thus the number should be set to 0(:=16) instead of 10 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-29 19:53:32 GMT mtk01084 -** modify structure naming -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-23 16:08:23 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:01 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-20 12:23:33 GMT mtk01461 -** Add u4MaxEventBufferLen parameter to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-18 21:00:48 GMT mtk01426 -** Update SDIO_MAXIMUM_RX_STATUS value -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:36:15 GMT mtk01461 -** Remove unused define - SDIO_MAXIMUM_TX_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:17 GMT mtk01461 -** Add function for HIF_LOOPBACK_PRE_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:56:19 GMT mtk01426 -** Add to support CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:19:56 GMT mtk01426 -** Add nicRxWaitResponse function proto type -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:35 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_RX_H -#define _NIC_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SEQ_NO 4095 -#define MAX_SEQ_NO_COUNT 4096 -#define HALF_SEQ_NO_CNOUT 2048 - -#define HALF_SEQ_NO_COUNT 2048 - -#define MT6620_FIXED_WIN_SIZE 64 -#define CFG_RX_MAX_BA_ENTRY 4 -#define CFG_RX_MAX_BA_TID_NUM 8 - -#define RX_STATUS_FLAG_MORE_PACKET BIT(30) -#define RX_STATUS_CHKSUM_MASK BITS(0,10) - -#define RX_RFB_LEN_FIELD_LEN 4 -#define RX_HEADER_OFFSET 2 - - -#if defined(_HIF_SDIO) && defined (WINDOWS_DDK) -/*! On XP, maximum Tx+Rx Statue <= 64-4(HISR)*/ - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#else - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_RX_STATISTIC_COUNTER_T { - RX_MPDU_TOTAL_COUNT = 0, - RX_SIZE_ERR_DROP_COUNT, - - RX_DATA_INDICATION_COUNT, - RX_DATA_RETURNED_COUNT, - RX_DATA_RETAINED_COUNT, - - RX_DROP_TOTAL_COUNT, - RX_TYPE_ERR_DROP_COUNT, - RX_CLASS_ERR_DROP_COUNT, - RX_DST_NULL_DROP_COUNT, - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - RX_CSUM_TCP_FAILED_COUNT, - RX_CSUM_UDP_FAILED_COUNT, - RX_CSUM_IP_FAILED_COUNT, - RX_CSUM_TCP_SUCCESS_COUNT, - RX_CSUM_UDP_SUCCESS_COUNT, - RX_CSUM_IP_SUCCESS_COUNT, - RX_CSUM_UNKNOWN_L4_PKT_COUNT, - RX_CSUM_UNKNOWN_L3_PKT_COUNT, - RX_IP_V6_PKT_CCOUNT, -#endif - RX_STATISTIC_COUNTER_NUM -} ENUM_RX_STATISTIC_COUNTER_T; - -typedef enum _ENUM_RX_PKT_DESTINATION_T { - RX_PKT_DESTINATION_HOST, /* to OS */ - RX_PKT_DESTINATION_FORWARD, /* to TX queue for forward, AP mode */ - RX_PKT_DESTINATION_HOST_WITH_FORWARD, /* to both TX and OS, AP mode broadcast packet */ - RX_PKT_DESTINATION_NULL, /* packet to be freed */ - RX_PKT_DESTINATION_NUM -} ENUM_RX_PKT_DESTINATION_T; - -struct _SW_RFB_T { - QUE_ENTRY_T rQueEntry; - PVOID pvPacket; /*!< ptr to rx Packet Descriptor */ - PUINT_8 pucRecvBuff; /*!< ptr to receive data buffer */ - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4HifRxHdrFlag; - PVOID pvHeader; - UINT_16 u2PacketLen; - UINT_16 u2HeaderLen; - UINT_16 u2SSN; - UINT_8 ucTid; - UINT_8 ucWlanIdx; - UINT_8 ucPacketType; - UINT_8 ucStaRecIdx; - - ENUM_CSUM_RESULT_T aeCSUM[CSUM_TYPE_NUM]; - ENUM_RX_PKT_DESTINATION_T eDst; - ENUM_TRAFFIC_CLASS_INDEX_T eTC; /* only valid when eDst == FORWARD */ -}; - -/*! RX configuration type structure */ -typedef struct _RX_CTRL_T { - UINT_32 u4RxCachedSize; - PUINT_8 pucRxCached; - QUE_T rFreeSwRfbList; - QUE_T rReceivedRfbList; - QUE_T rIndicatedRfbList; - -#if CFG_SDIO_RX_AGG - PUINT_8 pucRxCoalescingBufPtr; -#endif - - PVOID apvIndPacket[CFG_RX_MAX_PKT_NUM]; - PVOID apvRetainedPacket[CFG_RX_MAX_PKT_NUM]; - - UINT_8 ucNumIndPacket; - UINT_8 ucNumRetainedPacket; - UINT_64 au8Statistics[RX_STATISTIC_COUNTER_NUM]; /*!< RX Counters */ - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalRxAccessNum; - UINT_32 u4TotalRxPacketNum; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - UINT_32 u4QueuedCnt; - UINT_32 u4DequeuedCnt; -#endif - -#if CFG_RX_PKTS_DUMP - UINT_32 u4RxPktsDumpTypeMask; -#endif - -} RX_CTRL_T, *P_RX_CTRL_T; - -typedef struct _RX_MAILBOX_T { - UINT_32 u4RxMailbox[2]; /* for Device-to-Host Mailbox */ -} RX_MAILBOX_T, *P_RX_MAILBOX_T; - -typedef WLAN_STATUS (*PROCESS_RX_MGT_FUNCTION)(P_ADAPTER_T, P_SW_RFB_T); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RX_INC_CNT(prRxCtrl, eCounter) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]++;} - -#define RX_ADD_CNT(prRxCtrl, eCounter, u8Amount) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter] += (UINT_64)u8Amount;} - -#define RX_GET_CNT(prRxCtrl, eCounter) \ - (((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]) - -#define RX_RESET_ALL_CNTS(prRxCtrl) \ - {kalMemZero(&prRxCtrl->au8Statistics[0], sizeof(prRxCtrl->au8Statistics));} - -#define RX_STATUS_TEST_MORE_FLAG(flag) \ - ((BOOL)((flag & RX_STATUS_FLAG_MORE_PACKET) ? TRUE : FALSE)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(MT5931) -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ); - -#if !CFG_SDIO_INTR_ENHANCE -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#else -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - -#if CFG_SDIO_RX_AGG -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus - ); - -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ); - -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -#endif /* _NIC_RX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic_tx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic_tx.h deleted file mode 100755 index 4837da4877ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/nic_tx.h +++ /dev/null @@ -1,646 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_tx.h#1 $ -*/ - -/*! \file nic_tx.h - \brief Functions that provide TX operation in NIC's point of view. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. - -*/ - - - -/* -** $Log: nic_tx.h $ - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 11 16 2010 yarco.yang - * [WCXRP00000177] [MT5931 F/W] Performance tuning for 1st connection - * Update TX buffer count - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 07 26 2010 cp.wu - * - * change TC4 initial value from 2 to 4. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Redistributed the initial TC resources for normal operation - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * 4) nicRxWaitResponse() revised - * * * 5) another set of TQ counter default value is added for fw-download state - * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * and result is retrieved by get ATInfo instead - * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:53:28 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-27 11:08:00 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-24 19:56:49 GMT mtk02752 -** remove redundant eTC -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 22:01:08 GMT mtk02468 -** Added MSDU_INFO fields for composing HIF TX header -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:51 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:35:05 GMT mtk02752 -** + nicTxMsduInfoList() for sending MsduInfoList -** + NIC_TX_BUFF_COUNT_TC[0~5] -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-17 11:07:00 GMT mtk02752 -** add nicTxAdjustTcq() API -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 22:28:30 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 21:44:50 GMT mtk02752 -** + nicTxReturnMsduInfo() -** + nicTxFillMsduInfo() -** + rFreeMsduInfoList field in TX_CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-16 18:00:43 GMT mtk02752 -** use P_PACKET_INFO_T for prPacket to avoid inventing another new structure for packet -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-16 15:28:49 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packets are queued by per STA/AC queue -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-16 10:52:01 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-14 23:39:24 GMT mtk02752 -** interface structure redefine -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-13 21:17:03 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-29 19:53:10 GMT mtk01084 -** remove strange code by Frog -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:04 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-02 13:53:03 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:36:50 GMT mtk01461 -** Add declaration of nicTxReleaseResource() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:58:39 GMT mtk01461 -** Move CMD_INFO_T related define and function to cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:53 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:33:27 GMT mtk01461 -** Define constants for TX PATH and add nicTxPollingResource -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:32 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_TX_H -#define _NIC_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NIC_TX_RESOURCE_POLLING_TIMEOUT 256 -#define NIC_TX_RESOURCE_POLLING_DELAY_MSEC 50 - -/* Maximum buffer count for individual HIF TCQ */ - -#if defined(MT6620) -#if CFG_SLT_SUPPORT - /* 20101215 mtk01725 Redistributed the initial TC resources for SLT operation */ - #define NIC_TX_BUFF_COUNT_TC0 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 16 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 0 // First connection: 0 -#else - /* 20100302 mtk02468 Redistributed the initial TC resources for normal operation */ - #define NIC_TX_BUFF_COUNT_TC0 6 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 8 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 2 // First connection: 0 -#endif -#elif defined(MT5931) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 14 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 -#elif defined(MT6628) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 20 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 - -#endif - -#define NIC_TX_BUFF_SUM (NIC_TX_BUFF_COUNT_TC0 + \ - NIC_TX_BUFF_COUNT_TC1 + \ - NIC_TX_BUFF_COUNT_TC2 + \ - NIC_TX_BUFF_COUNT_TC3 + \ - NIC_TX_BUFF_COUNT_TC4 + \ - NIC_TX_BUFF_COUNT_TC5) -#if CFG_ENABLE_FW_DOWNLOAD - - #define NIC_TX_INIT_BUFF_COUNT_TC0 8 - #define NIC_TX_INIT_BUFF_COUNT_TC1 0 - #define NIC_TX_INIT_BUFF_COUNT_TC2 0 - #define NIC_TX_INIT_BUFF_COUNT_TC3 0 - #define NIC_TX_INIT_BUFF_COUNT_TC4 0 - #define NIC_TX_INIT_BUFF_COUNT_TC5 0 - - #define NIC_TX_INIT_BUFF_SUM (NIC_TX_INIT_BUFF_COUNT_TC0 + \ - NIC_TX_INIT_BUFF_COUNT_TC1 + \ - NIC_TX_INIT_BUFF_COUNT_TC2 + \ - NIC_TX_INIT_BUFF_COUNT_TC3 + \ - NIC_TX_INIT_BUFF_COUNT_TC4 + \ - NIC_TX_INIT_BUFF_COUNT_TC5) - -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -//3 /* Session for TX QUEUES */ -/* The definition in this ENUM is used to categorize packet's Traffic Class according - * to the their TID(User Priority). - * In order to achieve QoS goal, a particular TC should not block the process of - * another packet with different TC. - * In current design we will have 5 categories(TCs) of SW resource. - */ -typedef enum _ENUM_TRAFFIC_CLASS_INDEX_T { - TC0_INDEX = 0, /* HIF TX0: AC0 packets */ - TC1_INDEX, /* HIF TX0: AC1 packets & non-QoS packets */ - TC2_INDEX, /* HIF TX0: AC2 packets */ - TC3_INDEX, /* HIF TX0: AC3 packets */ - TC4_INDEX, /* HIF TX1: Command packets or 802.1x packets */ - TC5_INDEX, /* HIF TX0: BMCAST packets */ - TC_NUM /* Maximum number of Traffic Classes. */ -} ENUM_TRAFFIC_CLASS_INDEX_T; - -typedef enum _ENUM_TX_STATISTIC_COUNTER_T { - TX_MPDU_TOTAL_COUNT = 0, - TX_INACTIVE_BSS_DROP, - TX_INACTIVE_STA_DROP, - TX_FORWARD_OVERFLOW_DROP, - TX_AP_BORADCAST_DROP, - TX_STATISTIC_COUNTER_NUM -} ENUM_TX_STATISTIC_COUNTER_T; - - -typedef struct _TX_TCQ_STATUS_T { - UINT_8 aucFreeBufferCount[TC_NUM]; - UINT_8 aucMaxNumOfBuffer[TC_NUM]; -} TX_TCQ_STATUS_T, *P_TX_TCQ_STATUS_T; - -typedef struct _TX_TCQ_ADJUST_T { - INT_8 acVariation[TC_NUM]; -} TX_TCQ_ADJUST_T, *P_TX_TCQ_ADJUST_T; - -typedef struct _TX_CTRL_T { - UINT_32 u4TxCachedSize; - PUINT_8 pucTxCached; - -/* Elements below is classified according to TC (Traffic Class) value. */ - - TX_TCQ_STATUS_T rTc; - - PUINT_8 pucTxCoalescingBufPtr; - - QUE_T rFreeMsduInfoList; - - /* Management Frame Tracking */ - /* number of management frames to be sent */ - INT_32 i4TxMgmtPendingNum; - - /* to tracking management frames need TX done callback */ - QUE_T rTxMgmtTxingQueue; - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalTxAccessNum; - UINT_32 u4TotalTxPacketNum; -#endif - UINT_32 au4Statistics[TX_STATISTIC_COUNTER_NUM]; - - /* Number to track forwarding frames */ - INT_32 i4PendingFwdFrameCount; - -} TX_CTRL_T, *P_TX_CTRL_T; - -typedef enum _ENUM_TX_PACKET_SRC_T { - TX_PACKET_OS, - TX_PACKET_OS_OID, - TX_PACKET_FORWARDING, - TX_PACKET_MGMT, - TX_PACKET_NUM -} ENUM_TX_PACKET_SRC_T; - -typedef enum _ENUM_HIF_TX_PACKET_TYPE_T { - HIF_TX_PACKET_TYPE_DATA = 0, - HIF_TX_PACKET_TYPE_COMMAND, - HIF_TX_PACKET_TYPE_HIF_LB, - HIF_TX_PACKET_TYPE_MGMT -} ENUM_HIF_TX_PACKET_TYPE_T, *P_ENUM_HIF_TX_PACKET_TYPE_T; - -typedef enum _ENUM_TX_RESULT_CODE_T { - TX_RESULT_SUCCESS = 0, - TX_RESULT_LIFE_TIMEOUT, - TX_RESULT_RTS_ERROR, - TX_RESULT_MPDU_ERROR, - TX_RESULT_AGING_TIMEOUT, - TX_RESULT_FLUSHED, - TX_RESULT_DROPPED_IN_DRIVER = 32, - TX_RESULT_NUM -} ENUM_TX_RESULT_CODE_T, *P_ENUM_TX_RESULT_CODE_T; - -/* TX Call Back Function */ -typedef WLAN_STATUS (*PFN_TX_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -/* TX transactions could be divided into 4 kinds: - * - * 1) 802.1X / Bluetooth-over-Wi-Fi Security Frames - * [CMD_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - * - * 2) MMPDU - * [CMD_INFO_T] - [prPacket] - [MSDU_INFO_T] - [prPacket] - direct buffer for frame body - * - * 3) Command Packets - * [CMD_INFO_T] - [pucInfoBuffer] - direct buffer for content of command packet - * - * 4) Normal data frame - * [MSDU_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - */ - - -/* PS_FORWARDING_TYPE_NON_PS means that the receiving STA is in Active Mode -* from the perspective of host driver (maybe not synchronized with FW --> SN is needed) -*/ - -struct _MSDU_INFO_T { - QUE_ENTRY_T rQueEntry; - P_NATIVE_PACKET prPacket; - - ENUM_TX_PACKET_SRC_T eSrc; /* specify OS/FORWARD packet */ - UINT_8 ucUserPriority; - - /* For composing HIF TX header */ - UINT_8 ucTC; /* Traffic Class: 0~4 (HIF TX0), 5 (HIF TX1) */ - UINT_8 ucPacketType; /* 0: Data, 1: Command, 2: HIF Loopback 3: Management Frame */ - UINT_8 ucStaRecIndex; - UINT_8 ucNetworkType; /* See ENUM_NETWORK_TYPE_T */ - UINT_8 ucFormatID; /* 0: MAUI, Linux, Windows NDIS 5.1 */ - BOOLEAN fgIs802_1x; /* TRUE: 802.1x frame */ - BOOLEAN fgIs802_11; /* TRUE: 802.11 header is present */ - UINT_16 u2PalLLH; /* PAL Logical Link Header (for BOW network) */ - UINT_16 u2AclSN; /* ACL Sequence Number (for BOW network) */ - UINT_8 ucPsForwardingType; /* See ENUM_PS_FORWARDING_TYPE_T */ - UINT_8 ucPsSessionID; /* PS Session ID specified by the FW for the STA */ - BOOLEAN fgIsBurstEnd; /* TRUE means this is the last packet of the burst for (STA, TID) */ - BOOLEAN fgIsBIP; /* Management Frame Protection */ - BOOLEAN fgIsBasicRate; /* Force Basic Rate Transmission */ - - /* flattened from PACKET_INFO_T */ - UINT_8 ucMacHeaderLength; - UINT_8 ucLlcLength; /* w/o EtherType */ - UINT_16 u2FrameLength; - UINT_8 aucEthDestAddr[MAC_ADDR_LEN]; /* Ethernet Destination Address */ - - /* for TX done tracking */ - UINT_8 ucTxSeqNum; - PFN_TX_DONE_HANDLER pfTxDoneHandler; -}; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define TX_INC_CNT(prTxCtrl, eCounter) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]++;} - -#define TX_ADD_CNT(prTxCtrl, eCounter, u8Amount) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter] += (UINT_32)u8Amount;} - -#define TX_GET_CNT(prTxCtrl, eCounter) \ - (((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]) - -#define TX_RESET_ALL_CNTS(prTxCtrl) \ - {kalMemZero(&prTxCtrl->au4Statistics[0], sizeof(prTxCtrl->au4Statistics));} - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ); - -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ); - -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessTxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prNdisPacket - ); - -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_ENABLE_FW_DOWNLOAD -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_TX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p.h deleted file mode 100755 index 30bae79019e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p.h +++ /dev/null @@ -1,195 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p.h#3 $ -*/ - - - -/* -** $Log: p2p.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add parameter to control: - * 1) auto group owner - * 2) P2P-PS parameter (CTWindow, NoA descriptors) - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * correct WPS Device Password ID definition. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * -*/ - -#ifndef _P2P_H -#define _P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// refer to 'Config Methods' in WPS -#define WPS_CONFIG_USBA 0x0001 -#define WPS_CONFIG_ETHERNET 0x0002 -#define WPS_CONFIG_LABEL 0x0004 -#define WPS_CONFIG_DISPLAY 0x0008 -#define WPS_CONFIG_EXT_NFC 0x0010 -#define WPS_CONFIG_INT_NFC 0x0020 -#define WPS_CONFIG_NFC 0x0040 -#define WPS_CONFIG_PBC 0x0080 -#define WPS_CONFIG_KEYPAD 0x0100 - -// refer to 'Device Password ID' in WPS -#define WPS_DEV_PASSWORD_ID_PIN 0x0000 -#define WPS_DEV_PASSWORD_ID_USER 0x0001 -#define WPS_DEV_PASSWORD_ID_MACHINE 0x0002 -#define WPS_DEV_PASSWORD_ID_REKEY 0x0003 -#define WPS_DEV_PASSWORD_ID_PUSHBUTTON 0x0004 -#define WPS_DEV_PASSWORD_ID_REGISTRAR 0x0005 - - -#define P2P_DEVICE_TYPE_NUM 2 -#define P2P_DEVICE_NAME_LENGTH 32 -#define P2P_NETWORK_NUM 8 -#define P2P_MEMBER_NUM 8 - -#define P2P_WILDCARD_SSID "DIRECT-" - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -struct _P2P_INFO_T { - UINT_32 u4DeviceNum; - EVENT_P2P_DEV_DISCOVER_RESULT_T arP2pDiscoverResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 pucCurrIePtr; - UINT_8 aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]; /* A common pool for IE of all scan results. */ -}; - -typedef enum { - ENUM_P2P_PEER_GROUP, - ENUM_P2P_PEER_DEVICE, - ENUM_P2P_PEER_NUM -} ENUM_P2P_PEER_TYPE, *P_ENUM_P2P_PEER_TYPE; - -typedef struct _P2P_DEVICE_INFO { - UINT_8 aucDevAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 aucIfAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDevCapabilityBitmap; - INT_32 i4ConfigMethod; - UINT_8 aucPrimaryDeviceType[8]; - UINT_8 aucSecondaryDeviceType[8]; - UINT_8 aucDeviceName[P2P_DEVICE_NAME_LENGTH]; -} P2P_DEVICE_INFO, *P_P2P_DEVICE_INFO; - -typedef struct _P2P_GROUP_INFO { - PARAM_SSID_T rGroupID; - P2P_DEVICE_INFO rGroupOwnerInfo; - UINT_8 ucMemberNum; - P2P_DEVICE_INFO arMemberInfo[P2P_MEMBER_NUM]; -} P2P_GROUP_INFO, *P_P2P_GROUP_INFO; - -typedef struct _P2P_NETWORK_INFO { - ENUM_P2P_PEER_TYPE eNodeType; - - union { - P2P_GROUP_INFO rGroupInfo; - P2P_DEVICE_INFO rDeviceInfo; - } node; - -} P2P_NETWORK_INFO, *P_P2P_NETWORK_INFO; - -typedef struct _P2P_NETWORK_LIST { - UINT_8 ucNetworkNum; - P2P_NETWORK_INFO rP2PNetworkInfo[P2P_NETWORK_NUM]; -} P2P_NETWORK_LIST, *P_P2P_NETWORK_LIST; - -typedef struct _P2P_DISCONNECT_INFO { - UINT_8 ucRole; - UINT_8 ucRsv[3]; -} P2P_DISCONNECT_INFO, *P_P2P_DISCONNECT_INFO; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_cmd_buf.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_cmd_buf.h deleted file mode 100755 index c59c60678d44..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_cmd_buf.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "p2p_cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - - - -/* -** $Log: p2p_cmd_buf.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks -*/ - -#ifndef _P2P_CMD_BUF_H -#define _P2P_CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - - - -#endif /* _P2P_CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_mac.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_mac.h deleted file mode 100755 index 9c022b0193b8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_mac.h +++ /dev/null @@ -1,223 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_mac.h#2 $ -*/ - -/*! \file "p2p_mac.h" - \brief Brief description. - - Detail description. -*/ - - - - - -#ifndef _P2P_MAC_H -#define _P2P_MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define ACTION_PUBLIC_WIFI_DIRECT 9 -#define ACTION_GAS_INITIAL_REQUEST 10 -#define ACTION_GAS_INITIAL_RESPONSE 11 -#define ACTION_GAS_COMEBACK_REQUEST 12 -#define ACTION_GAS_COMEBACK_RESPONSE 13 - - -/* P2P 4.2.8.1 - P2P Public Action Frame Type. */ -#define P2P_PUBLIC_ACTION_GO_NEGO_REQ 0 -#define P2P_PUBLIC_ACTION_GO_NEGO_RSP 1 -#define P2P_PUBLIC_ACTION_GO_NEGO_CFM 2 -#define P2P_PUBLIC_ACTION_INVITATION_REQ 3 -#define P2P_PUBLIC_ACTION_INVITATION_RSP 4 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_REQ 5 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_RSP 6 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_REQ 7 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_RSP 8 - -/* P2P 4.2.9.1 - P2P Action Frame Type */ -#define P2P_ACTION_NOTICE_OF_ABSENCE 0 -#define P2P_ACTION_P2P_PRESENCE_REQ 1 -#define P2P_ACTION_P2P_PRESENCE_RSP 2 -#define P2P_ACTION_GO_DISCOVER_REQ 3 - -#define P2P_PUBLIC_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+8) -#define P2P_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+7) - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/* P2P 4.2.8.2 P2P Public Action Frame Format */ -typedef struct _P2P_PUBLIC_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 aucOui[3]; /* 0x50, 0x6F, 0x9A */ - UINT_8 ucOuiType; /* 0x09 */ - UINT_8 ucOuiSubtype; /* GO Nego Req/Rsp/Cfm, P2P Invittion Req/Rsp, Device Discoverability Req/Rsp */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* P2P IE, WSC IE. */ -} __KAL_ATTRIB_PACKED__ P2P_PUBLIC_ACTION_FRAME_T, *P_P2P_PUBLIC_ACTION_FRAME_T; - - -/* P2P 4.2.9.1 - General Action Frame Format. */ -typedef struct _P2P_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Action Frame Body */ - UINT_8 ucCategory; // 0x7F - UINT_8 aucOui[3]; // 0x50, 0x6F, 0x9A - UINT_8 ucOuiType; // 0x09 - UINT_8 ucOuiSubtype; // - UINT_8 ucDialogToken; - UINT_8 aucInfoElem[1]; -} __KAL_ATTRIB_PACKED__ P2P_ACTION_FRAME_T, *P_P2P_ACTION_FRAME_T; - -/* P2P C.1 GAS Public Action Initial Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T; - -/* P2P C.2 GAS Public Action Initial Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Initial Response. */ - UINT_16 u2ComebackDelay; /* Initial Response. */ /* In unit of TU. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T; - - -/* P2P C.3-1 GAS Public Action Comeback Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T; - -/* P2P C.3-2 GAS Public Action Comeback Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Comeback Response. */ - UINT_8 ucFragmentID; /*Comeback Response. */ - UINT_16 u2ComebackDelay; /* Comeback Response. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T; - - - - -typedef struct _P2P_SD_VENDER_SPECIFIC_CONTENT_T { - /* Service Discovery Vendor-specific Content. */ - UINT_8 ucOuiSubtype; // 0x09 - UINT_16 u2ServiceUpdateIndicator; - UINT_8 aucServiceTLV[1]; -} __KAL_ATTRIB_PACKED__ P2P_SD_VENDER_SPECIFIC_CONTENT_T, *P_P2P_SD_VENDER_SPECIFIC_CONTENT_T; - - -typedef struct _P2P_SERVICE_REQUEST_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 aucQueryData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_REQUEST_TLV_T, *P_P2P_SERVICE_REQUEST_TLV_T; - - - -typedef struct _P2P_SERVICE_RESPONSE_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 ucStatusCode; - UINT_8 aucResponseData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_RESPONSE_TLV_T, *P_P2P_SERVICE_RESPONSE_TLV_T; - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_nic.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_nic.h deleted file mode 100755 index 3f1363f77d1a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_nic.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic.h#1 $ -*/ - -/*! \file "p2p_nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - - - - - -#ifndef _P2P_NIC_H -#define _P2P_NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -nicP2pMediaStateChange( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -VOID -nicRxAddP2pDevice( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_nic_cmd_event.h deleted file mode 100755 index fb056fff3598..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/p2p_nic_cmd_event.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic_cmd_event.h#1 $ -*/ - -/*! \file p2p_nic_cmd_event.h - \brief -*/ - - - -#ifndef _P2P_NIC_CMD_EVENT_H -#define _P2P_NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -typedef struct _EVENT_P2P_DEV_DISCOVER_RESULT_T { -// UINT_8 aucCommunicateAddr[MAC_ADDR_LEN]; // Deprecated. - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[2]; - UINT_16 u2NameLength; - UINT_8 aucName[32]; - PUINT_8 pucIeBuf; - UINT_16 u2IELength; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - // TODO: Service Information or PasswordID valid? -} EVENT_P2P_DEV_DISCOVER_RESULT_T, *P_EVENT_P2P_DEV_DISCOVER_RESULT_T; - -#endif \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/que_mgt.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/que_mgt.h deleted file mode 100755 index fd31ecd66f73..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/que_mgt.h +++ /dev/null @@ -1,1150 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/que_mgt.h#1 $ -*/ - -/*! \file "que_mgt.h" - \brief TX/RX queues management header file - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - - - -/* -** $Log: que_mgt.h $ - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 06 14 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Change the parameter for WMM pass. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 19 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * By default enabling dynamic STA_REC activation and decactivation - * - * 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:04:53 GMT MTK02468 -** Added RX buffer reordering function prototypes -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-02 22:08:44 GMT MTK02468 -** Added macro QM_INIT_STA_REC for initialize a STA_REC -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 21:58:43 GMT mtk02468 -** Initial version -** -*/ - -#ifndef _QUE_MGT_H -#define _QUE_MGT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* Queue Manager Features */ -#define QM_BURST_END_INFO_ENABLED 1 /* 1: Indicate the last TX packet to the FW for each burst */ -#define QM_FORWARDING_FAIRNESS 1 /* 1: To fairly share TX resource among active STAs */ -#define QM_ADAPTIVE_TC_RESOURCE_CTRL 1 /* 1: To adaptively adjust resource for each TC */ -#define QM_PRINT_TC_RESOURCE_CTRL 0 /* 1: To print TC resource adjustment results */ -#define QM_RX_WIN_SSN_AUTO_ADVANCING 1 /* 1: If pkt with SSN is missing, auto advance the RX reordering window */ -#define QM_RX_INIT_FALL_BEHIND_PASS 1 /* 1: Indicate the packets falling behind to OS before the frame with SSN is received */ -/* Parameters */ -#define QM_INIT_TIME_TO_UPDATE_QUE_LEN 60 /* p: Update queue lengths when p TX packets are enqueued */ -#define QM_INIT_TIME_TO_ADJUST_TC_RSC 3 /* s: Adjust the TC resource every s updates of queue lengths */ -#define QM_QUE_LEN_MOVING_AVE_FACTOR 3 /* Factor for Que Len averaging */ - -#define QM_MIN_RESERVED_TC0_RESOURCE 1 -#define QM_MIN_RESERVED_TC1_RESOURCE 1 -#define QM_MIN_RESERVED_TC2_RESOURCE 1 -#define QM_MIN_RESERVED_TC3_RESOURCE 1 -#define QM_MIN_RESERVED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_MIN_RESERVED_TC5_RESOURCE 1 - -#if defined(MT6620) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 9 -#define QM_GUARANTEED_TC3_RESOURCE 11 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - -#elif defined(MT5931) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 4 -#define QM_GUARANTEED_TC3_RESOURCE 4 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 2 - -#elif defined(MT6628) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 6 -#define QM_GUARANTEED_TC3_RESOURCE 6 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - - -#else -#error -#endif - - - -#define QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY 0 - -#define QM_TOTAL_TC_RESOURCE (\ - NIC_TX_BUFF_COUNT_TC0 + NIC_TX_BUFF_COUNT_TC1 +\ - NIC_TX_BUFF_COUNT_TC2 + NIC_TX_BUFF_COUNT_TC3 +\ - NIC_TX_BUFF_COUNT_TC5) -#define QM_AVERAGE_TC_RESOURCE 6 - -/* Note: QM_INITIAL_RESIDUAL_TC_RESOURCE shall not be less than 0 */ -#define QM_INITIAL_RESIDUAL_TC_RESOURCE (QM_TOTAL_TC_RESOURCE - \ - (QM_GUARANTEED_TC0_RESOURCE +\ - QM_GUARANTEED_TC1_RESOURCE +\ - QM_GUARANTEED_TC2_RESOURCE +\ - QM_GUARANTEED_TC3_RESOURCE +\ - QM_GUARANTEED_TC5_RESOURCE \ - )) - -/* Hard-coded network type for Phase 3: NETWORK_TYPE_AIS/P2P/BOW */ -#define QM_OPERATING_NETWORK_TYPE NETWORK_TYPE_AIS - -#define QM_TEST_MODE 0 -#define QM_TEST_TRIGGER_TX_COUNT 50 -#define QM_TEST_STA_REC_DETERMINATION 0 -#define QM_TEST_STA_REC_DEACTIVATION 0 -#define QM_TEST_FAIR_FORWARDING 0 - -#define QM_DEBUG_COUNTER 0 - -/* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ -/* Per-Type Queues: [0] BMCAST */ -#define NUM_OF_PER_STA_TX_QUEUES 5 -#define NUM_OF_PER_TYPE_TX_QUEUES 1 - -/* These two constants are also used for FW to verify the STA_REC index */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE - -/* TX Queue Index */ -#define TX_QUEUE_INDEX_BMCAST 0 -#define TX_QUEUE_INDEX_NO_STA_REC 0 -#define TX_QUEUE_INDEX_AC0 0 -#define TX_QUEUE_INDEX_AC1 1 -#define TX_QUEUE_INDEX_AC2 2 -#define TX_QUEUE_INDEX_AC3 3 -#define TX_QUEUE_INDEX_802_1X 4 -#define TX_QUEUE_INDEX_NON_QOS 1 - - -//1 WMM-related -/* WMM FLAGS */ -#define WMM_FLAG_SUPPORT_WMM BIT(0) -#define WMM_FLAG_SUPPORT_WMMSA BIT(1) -#define WMM_FLAG_AC_PARAM_PRESENT BIT(2) -#define WMM_FLAG_SUPPORT_UAPSD BIT(3) - -/* WMM Admission Control Mandatory FLAGS */ -#define ACM_FLAG_ADM_NOT_REQUIRED 0 -#define ACM_FLAG_ADM_GRANTED BIT(0) -#define ACM_FLAG_ADM_REQUIRED BIT(1) - -/* WMM Power Saving FLAGS */ -#define AC_FLAG_TRIGGER_ENABLED BIT(1) -#define AC_FLAG_DELIVERY_ENABLED BIT(2) - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/* WMM-2.2.2 WMM Parameter Element */ -#define ELEM_MAX_LEN_WMM_PARAM 24 - -/* WMM-2.2.1 WMM QoS Info field */ -#define WMM_QOS_INFO_PARAM_SET_CNT BITS(0,3) /* Sent by AP */ -#define WMM_QOS_INFO_UAPSD BIT(7) - -#define WMM_QOS_INFO_VO_UAPSD BIT(0) /* Sent by non-AP STA */ -#define WMM_QOS_INFO_VI_UAPSD BIT(1) -#define WMM_QOS_INFO_BK_UAPSD BIT(2) -#define WMM_QOS_INFO_BE_UAPSD BIT(3) -#define WMM_QOS_INFO_MAX_SP_LEN_MASK BITS(5,6) -#define WMM_QOS_INFO_MAX_SP_ALL 0 -#define WMM_QOS_INFO_MAX_SP_2 BIT(5) -#define WMM_QOS_INFO_MAX_SP_4 BIT(6) -#define WMM_QOS_INFO_MAX_SP_6 BITS(5,6) - -/* -- definitions for Max SP length field */ -#define WMM_MAX_SP_LENGTH_ALL 0 -#define WMM_MAX_SP_LENGTH_2 2 -#define WMM_MAX_SP_LENGTH_4 4 -#define WMM_MAX_SP_LENGTH_6 6 - - -/* WMM-2.2.2 WMM ACI/AIFSN field */ -/* -- subfields in the ACI/AIFSN field */ -#define WMM_ACIAIFSN_AIFSN BITS(0,3) -#define WMM_ACIAIFSN_ACM BIT(4) -#define WMM_ACIAIFSN_ACI BITS(5,6) -#define WMM_ACIAIFSN_ACI_OFFSET 5 - -/* -- definitions for ACI field */ -#define WMM_ACI_AC_BE 0 -#define WMM_ACI_AC_BK BIT(5) -#define WMM_ACI_AC_VI BIT(6) -#define WMM_ACI_AC_VO BITS(5,6) - -#define WMM_ACI(_AC) (_AC << WMM_ACIAIFSN_ACI_OFFSET) - -/* -- definitions for ECWmin/ECWmax field */ -#define WMM_ECW_WMIN_MASK BITS(0,3) -#define WMM_ECW_WMAX_MASK BITS(4,7) -#define WMM_ECW_WMAX_OFFSET 4 - -#define TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME 0 /* Unit: 64 us */ - -#define QM_RX_BA_ENTRY_MISS_TIMEOUT_MS (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -enum { - QM_DBG_CNT_00=0, - QM_DBG_CNT_01, - QM_DBG_CNT_02, - QM_DBG_CNT_03, - QM_DBG_CNT_04, - QM_DBG_CNT_05, - QM_DBG_CNT_06, - QM_DBG_CNT_07, - QM_DBG_CNT_08, - QM_DBG_CNT_09, - QM_DBG_CNT_10, - QM_DBG_CNT_11, - QM_DBG_CNT_12, - QM_DBG_CNT_13, - QM_DBG_CNT_14, - QM_DBG_CNT_15, - QM_DBG_CNT_16, - QM_DBG_CNT_17, - QM_DBG_CNT_18, - QM_DBG_CNT_19, - QM_DBG_CNT_20, - QM_DBG_CNT_21, - QM_DBG_CNT_22, - QM_DBG_CNT_23, - QM_DBG_CNT_24, - QM_DBG_CNT_25, - QM_DBG_CNT_26, - QM_DBG_CNT_27, - QM_DBG_CNT_28, - QM_DBG_CNT_29, - QM_DBG_CNT_30, - QM_DBG_CNT_31, - QM_DBG_CNT_NUM -}; - - - - -/* Used for MAC TX */ -typedef enum _ENUM_MAC_TX_QUEUE_INDEX_T { - MAC_TX_QUEUE_AC0_INDEX = 0, - MAC_TX_QUEUE_AC1_INDEX, - MAC_TX_QUEUE_AC2_INDEX, - MAC_TX_QUEUE_AC3_INDEX, - MAC_TX_QUEUE_AC4_INDEX, - MAC_TX_QUEUE_AC5_INDEX, - MAC_TX_QUEUE_AC6_INDEX, - MAC_TX_QUEUE_BCN_INDEX, - MAC_TX_QUEUE_BMC_INDEX, - MAC_TX_QUEUE_NUM -} ENUM_MAC_TX_QUEUE_INDEX_T; - -typedef struct _RX_BA_ENTRY_T { - BOOLEAN fgIsValid; - QUE_T rReOrderQue; - UINT_16 u2WinStart; - UINT_16 u2WinEnd; - UINT_16 u2WinSize; - - /* For identifying the RX BA agreement */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; - - BOOLEAN fgIsWaitingForPktWithSsn; - - //UINT_8 ucTxBufferSize; - //BOOL fgIsAcConstrain; - //BOOL fgIsBaEnabled; -} RX_BA_ENTRY_T, *P_RX_BA_ENTRY_T; - -/* The mailbox message (could be used for Host-To-Device or Device-To-Host Mailbox) */ -typedef struct _MAILBOX_MSG_T{ - UINT_32 u4Msg[2]; /* [0]: D2HRM0R or H2DRM0R, [1]: D2HRM1R or H2DRM1R */ -} MAILBOX_MSG_T, *P_MAILBOX_MSG_T; - - -/* Used for adaptively adjusting TC resources */ -typedef struct _TC_RESOURCE_CTRL_T { - /* TC0, TC1, TC2, TC3, TC5 */ - UINT_32 au4AverageQueLen[TC_NUM - 1]; -} TC_RESOURCE_CTRL_T, *P_TC_RESOURCE_CTRL_T; - -typedef struct _QUE_MGT_T{ /* Queue Management Control Info */ - - /* Per-Type Queues: [0] BMCAST or UNKNOWN-STA packets */ - QUE_T arTxQueue[NUM_OF_PER_TYPE_TX_QUEUES]; - -#if 0 - /* For TX Scheduling */ - UINT_8 arRemainingTxOppt[NUM_OF_PER_STA_TX_QUEUES]; - UINT_8 arCurrentTxStaIndex[NUM_OF_PER_STA_TX_QUEUES]; - -#endif - - /* Reordering Queue Parameters */ - RX_BA_ENTRY_T arRxBaTable[CFG_NUM_OF_RX_BA_AGREEMENTS]; - - /* Current number of activated RX BA agreements <= CFG_NUM_OF_RX_BA_AGREEMENTS */ - UINT_8 ucRxBaCount; - -#if QM_TEST_MODE - UINT_32 u4PktCount; - P_ADAPTER_T prAdapter; - -#if QM_TEST_FAIR_FORWARDING - UINT_32 u4CurrentStaRecIndexToEnqueue; -#endif - -#endif - - -#if QM_FORWARDING_FAIRNESS - /* The current TX count for a STA with respect to a TC index */ - UINT_32 au4ForwardCount[NUM_OF_PER_STA_TX_QUEUES]; - - /* The current serving STA with respect to a TC index */ - UINT_32 au4HeadStaRecIndex [NUM_OF_PER_STA_TX_QUEUES]; -#endif - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 au4AverageQueLen[TC_NUM]; - UINT_32 au4CurrentTcResource[TC_NUM]; - UINT_32 au4MinReservedTcResource[TC_NUM]; /* The minimum amount of resource no matter busy or idle */ - UINT_32 au4GuaranteedTcResource[TC_NUM]; /* The minimum amount of resource when extremely busy */ - - UINT_32 u4TimeToAdjustTcResource; - UINT_32 u4TimeToUpdateQueLen; - - /* Set to TRUE if the last TC adjustment has not been completely applied (i.e., waiting more TX-Done events - to align the TC quotas to the TC resource assignment) */ - BOOLEAN fgTcResourcePostAnnealing; - -#endif - -#if QM_DEBUG_COUNTER - UINT_32 au4QmDebugCounters[QM_DBG_CNT_NUM]; -#endif - - - - -} QUE_MGT_T, *P_QUE_MGT_T; - - - -typedef struct _EVENT_RX_ADDBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - - /* Fields that are present in the received ADDBA_REQ */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ - -} EVENT_RX_ADDBA_T, *P_EVENT_RX_ADDBA_T; - -typedef struct _EVENT_RX_DELBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; -} EVENT_RX_DELBA_T, *P_EVENT_RX_DELBA_T; - - -typedef struct _EVENT_BSS_ABSENCE_PRESENCE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucNetTypeIdx; - BOOLEAN fgIsAbsent; - UINT_8 ucBssFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_BSS_ABSENCE_PRESENCE_T, *P_EVENT_BSS_ABSENCE_PRESENCE_T; - - -typedef struct _EVENT_STA_CHANGE_PS_MODE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - BOOLEAN fgIsInPs; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; -} EVENT_STA_CHANGE_PS_MODE_T, *P_EVENT_STA_CHANGE_PS_MODE_T; - -/* The free quota is used by PS only now */ -/* The event may be used by per STA flow conttrol in general */ -typedef struct _EVENT_STA_UPDATE_FREE_QUOTA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_STA_UPDATE_FREE_QUOTA_T, *P_EVENT_STA_UPDATE_FREE_QUOTA_T; - - - - -/* WMM-2.2.1 WMM Information Element */ -typedef struct _IE_WMM_INFO_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucDummy[3]; /* Dummy for pack */ -} IE_WMM_INFO_T, *P_IE_WMM_INFO_T; - -/* WMM-2.2.2 WMM Parameter Element */ -typedef struct _IE_WMM_PARAM_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - - /* IE Body */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - - /* WMM IE Body */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucReserved; - - /* AC Parameters */ - UINT_8 ucAciAifsn_BE; - UINT_8 ucEcw_BE; - UINT_8 aucTxopLimit_BE[2]; - - UINT_8 ucAciAifsn_BG; - UINT_8 ucEcw_BG; - UINT_8 aucTxopLimit_BG[2]; - - UINT_8 ucAciAifsn_VI; - UINT_8 ucEcw_VI; - UINT_8 aucTxopLimit_VI[2]; - - UINT_8 ucAciAifsn_VO; - UINT_8 ucEcw_VO; - UINT_8 aucTxopLimit_VO[2]; - -} IE_WMM_PARAM_T, *P_IE_WMM_PARAM_T; - -typedef struct _IE_WMM_TSPEC_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - /* WMM TSPEC body */ - UINT_8 aucTsInfo[3]; /* TS Info */ - UINT_8 aucTspecBodyPart[1]; /* Note: Utilize PARAM_QOS_TSPEC to fill (memory copy) */ -} IE_WMM_TSPEC_T, *P_IE_WMM_TSPEC_T; - -typedef struct _IE_WMM_HDR_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 aucBody[1]; /* IE body */ -} IE_WMM_HDR_T, *P_IE_WMM_HDR_T; - - -typedef struct _AC_QUE_PARMS_T{ - UINT_16 u2CWmin; /*!< CWmin */ - UINT_16 u2CWmax; /*!< CWmax */ - UINT_16 u2TxopLimit; /*!< TXOP limit */ - UINT_16 u2Aifsn; /*!< AIFSN */ - UINT_8 ucGuradTime; /*!< GuardTime for STOP/FLUSH. */ - BOOLEAN fgIsACMSet; -} AC_QUE_PARMS_T, *P_AC_QUE_PARMS_T; - -/* WMM ACI (AC index) */ -typedef enum _ENUM_WMM_ACI_T { - WMM_AC_BE_INDEX = 0, - WMM_AC_BK_INDEX, - WMM_AC_VI_INDEX, - WMM_AC_VO_INDEX, - WMM_AC_INDEX_NUM -} ENUM_WMM_ACI_T, *P_ENUM_WMM_ACI_T; - - -/* Used for CMD Queue Operation */ -typedef enum _ENUM_FRAME_ACTION_T { - FRAME_ACTION_DROP_PKT = 0, - FRAME_ACTION_QUEUE_PKT, - FRAME_ACTION_TX_PKT, - FRAME_ACTION_NUM -} ENUM_FRAME_ACTION_T; - - -typedef enum _ENUM_FRAME_TYPE_IN_CMD_Q_T { - FRAME_TYPE_802_1X = 0, - FRAME_TYPE_MMPDU, - FRAME_TYEP_NUM -} ENUM_FRAME_TYPE_IN_CMD_Q_T; - -typedef enum _ENUM_FREE_QUOTA_MODET_T { - FREE_QUOTA_UPDATE_MODE_INIT = 0, - FREE_QUOTA_UPDATE_MODE_OVERWRITE, - FREE_QUOTA_UPDATE_MODE_INCREASE, - FREE_QUOTA_UPDATE_MODE_DECREASE -} ENUM_FREE_QUOTA_MODET_T, *P_ENUM_FREE_QUOTA_MODET_T; - - - -typedef struct _CMD_UPDATE_WMM_PARMS_T { - AC_QUE_PARMS_T arACQueParms[AC_NUM]; - UINT_8 ucNetTypeIndex; - UINT_8 fgIsQBSS; - UINT_8 aucReserved[2]; -} CMD_UPDATE_WMM_PARMS_T, *P_CMD_UPDATE_WMM_PARMS_T; - - -typedef struct _CMD_TX_AMPDU_T { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_TX_AMPDU_T, *P_CMD_TX_AMPDU_T; - - -typedef struct _CMD_ADDBA_REJECT { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_ADDBA_REJECT_T, *P_CMD_ADDBA_REJECT_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define QM_TX_SET_NEXT_MSDU_INFO(_prMsduInfoPreceding, _prMsduInfoNext) \ - ((((_prMsduInfoPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prMsduInfoNext)) - -#define QM_TX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - - -#define QM_TX_GET_NEXT_MSDU_INFO(_prMsduInfo) \ - ((P_MSDU_INFO_T)(((_prMsduInfo)->rQueEntry).prNext)) - -#define QM_RX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - -#define QM_RX_GET_NEXT_SW_RFB(_prSwRfb) \ - ((P_SW_RFB_T)(((_prSwRfb)->rQueEntry).prNext)) - -#if 0 -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - ((((_ucIndex) != STA_REC_INDEX_BMCAST) && ((_ucIndex)!= STA_REC_INDEX_NOT_FOUND)) ?\ - &(_prAdapter->arStaRec[_ucIndex]): NULL) -#endif - -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - cnmGetStaRecByIndex(_prAdapter,_ucIndex) - - -#define QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET(\ - _prMsduInfo,\ - _ucTC,\ - _ucPacketType,\ - _ucFormatID,\ - _fgIs802_1x,\ - _fgIs802_11,\ - _u2PalLLH,\ - _u2AclSN,\ - _ucPsForwardingType,\ - _ucPsSessionID\ - ) \ -{\ - ASSERT(_prMsduInfo);\ - (_prMsduInfo)->ucTC = (_ucTC);\ - (_prMsduInfo)->ucPacketType = (_ucPacketType);\ - (_prMsduInfo)->ucFormatID = (_ucFormatID);\ - (_prMsduInfo)->fgIs802_1x = (_fgIs802_1x);\ - (_prMsduInfo)->fgIs802_11 = (_fgIs802_11);\ - (_prMsduInfo)->u2PalLLH = (_u2PalLLH);\ - (_prMsduInfo)->u2AclSN = (_u2AclSN);\ - (_prMsduInfo)->ucPsForwardingType = (_ucPsForwardingType);\ - (_prMsduInfo)->ucPsSessionID = (_ucPsSessionID);\ - (_prMsduInfo)->fgIsBurstEnd = (FALSE);\ -} - -#define QM_INIT_STA_REC(\ - _prStaRec,\ - _fgIsValid,\ - _fgIsQoS,\ - _pucMacAddr\ - )\ -{\ - ASSERT(_prStaRec);\ - (_prStaRec)->fgIsValid = (_fgIsValid);\ - (_prStaRec)->fgIsQoS = (_fgIsQoS);\ - (_prStaRec)->fgIsInPS = FALSE; \ - (_prStaRec)->ucPsSessionID = 0xFF;\ - COPY_MAC_ADDR((_prStaRec)->aucMacAddr,(_pucMacAddr));\ -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -#define QM_GET_TX_QUEUE_LEN(_prAdapter, _u4QueIdx) ((_prAdapter->rQM.au4AverageQueLen[(_u4QueIdx)] >> QM_QUE_LEN_MOVING_AVE_FACTOR)) -#endif - - -#define WMM_IE_OUI_TYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiType) -#define WMM_IE_OUI_SUBTYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiSubtype) -#define WMM_IE_OUI(fp) (((P_IE_WMM_HDR_T)(fp))->aucOui) - -#if QM_DEBUG_COUNTER -#define QM_DBG_CNT_INC(_prQM, _index) { (_prQM)->au4QmDebugCounters[(_index)]++; } -#else -#define QM_DBG_CNT_INC(_prQM, _index) {} -#endif - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Queue Management and STA_REC Initialization */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ); - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - - -/*----------------------------------------------------------------------------*/ -/* TX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ); - -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - - -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ); - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ); - -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid - ); - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ); - - -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ); - - -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ); - -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ); - -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ); - - -/* Utility function: for deciding STA-REC index */ -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -); - -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - - -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ); - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUE_MGT_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/wlan_def.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/wlan_def.h deleted file mode 100755 index c9a7f184dea8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic/wlan_def.h +++ /dev/null @@ -1,1012 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/wlan_def.h#1 $ -*/ - -/*! \file "wlan_def.h" - \brief This file includes the basic definition of WLAN - -*/ - - - -/* -** $Log: wlan_def.h $ - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add new station type MACRO. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 11 2010 kevin.huang - * [WCXRP00000068] [MT6620 Wi-Fi][Driver][FW] Fix STA RECORD sync issue and remove unused code - * Update ENUM_STA_ROLE_INDEX_T by using a fixed base value - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 14 2010 chinghwa.yu - * NULL - * Update OP_MODE_BOW and include bow_fsm.h. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Change P2P Descriptor List to a pointer and allocate it dynamically to avoid structure corrupt by BssDescriptor free. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add a pointer in BSS Descriptor for P2P Descriptor. - * - * 08 11 2010 yuche.tsai - * NULL - * Add an Interface in BSS Descriptor. - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 07 26 2010 yuche.tsai - * - * Add an operation mode for P2P device. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P present boolean flag in BSS & Pre-BSS descriptor. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * move bss related data types to wlan_def.h to avoid recursive dependency. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:40 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_DEF_H -#define _WLAN_DEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* disconnect reason */ -#define DISCONNECT_REASON_CODE_RESERVED 0 -#define DISCONNECT_REASON_CODE_RADIO_LOST 1 -#define DISCONNECT_REASON_CODE_DEAUTHENTICATED 2 -#define DISCONNECT_REASON_CODE_DISASSOCIATED 3 -#define DISCONNECT_REASON_CODE_NEW_CONNECTION 4 - -/* The rate definitions */ -#define TX_MODE_CCK 0x00 -#define TX_MODE_OFDM 0x40 -#define TX_MODE_HT_MM 0x80 -#define TX_MODE_HT_GF 0xC0 - -#define RATE_CCK_SHORT_PREAMBLE 0x10 -#define RATE_OFDM 0x20 - -#define PHY_RATE_1M 0x0 -#define PHY_RATE_2M 0x1 -#define PHY_RATE_5_5M 0x2 -#define PHY_RATE_11M 0x3 -#define PHY_RATE_6M 0xB -#define PHY_RATE_9M 0xF -#define PHY_RATE_12M 0xA -#define PHY_RATE_18M 0xE -#define PHY_RATE_24M 0x9 -#define PHY_RATE_36M 0xD -#define PHY_RATE_48M 0x8 -#define PHY_RATE_54M 0xC -#define PHY_RATE_MCS0 0x0 -#define PHY_RATE_MCS1 0x1 -#define PHY_RATE_MCS2 0x2 -#define PHY_RATE_MCS3 0x3 -#define PHY_RATE_MCS4 0x4 -#define PHY_RATE_MCS5 0x5 -#define PHY_RATE_MCS6 0x6 -#define PHY_RATE_MCS7 0x7 -#define PHY_RATE_MCS32 0x20 - -#define RATE_CCK_1M_LONG (TX_MODE_CCK | PHY_RATE_1M) -#define RATE_CCK_2M_LONG (TX_MODE_CCK | PHY_RATE_2M) -#define RATE_CCK_5_5M_LONG (TX_MODE_CCK | PHY_RATE_5_5M) -#define RATE_CCK_11M_LONG (TX_MODE_CCK | PHY_RATE_11M) -#define RATE_CCK_2M_SHORT (TX_MODE_CCK | PHY_RATE_2M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_5_5M_SHORT (TX_MODE_CCK | PHY_RATE_5_5M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_11M_SHORT (TX_MODE_CCK | PHY_RATE_11M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_OFDM_6M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_6M) -#define RATE_OFDM_9M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_9M) -#define RATE_OFDM_12M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_12M) -#define RATE_OFDM_18M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_18M) -#define RATE_OFDM_24M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_24M) -#define RATE_OFDM_36M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_36M) -#define RATE_OFDM_48M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_48M) -#define RATE_OFDM_54M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_54M) - -#define RATE_MM_MCS_0 (TX_MODE_HT_MM | PHY_RATE_MCS0) -#define RATE_MM_MCS_1 (TX_MODE_HT_MM | PHY_RATE_MCS1) -#define RATE_MM_MCS_2 (TX_MODE_HT_MM | PHY_RATE_MCS2) -#define RATE_MM_MCS_3 (TX_MODE_HT_MM | PHY_RATE_MCS3) -#define RATE_MM_MCS_4 (TX_MODE_HT_MM | PHY_RATE_MCS4) -#define RATE_MM_MCS_5 (TX_MODE_HT_MM | PHY_RATE_MCS5) -#define RATE_MM_MCS_6 (TX_MODE_HT_MM | PHY_RATE_MCS6) -#define RATE_MM_MCS_7 (TX_MODE_HT_MM | PHY_RATE_MCS7) -#define RATE_MM_MCS_32 (TX_MODE_HT_MM | PHY_RATE_MCS32) - -#define RATE_GF_MCS_0 (TX_MODE_HT_GF | PHY_RATE_MCS0) -#define RATE_GF_MCS_1 (TX_MODE_HT_GF | PHY_RATE_MCS1) -#define RATE_GF_MCS_2 (TX_MODE_HT_GF | PHY_RATE_MCS2) -#define RATE_GF_MCS_3 (TX_MODE_HT_GF | PHY_RATE_MCS3) -#define RATE_GF_MCS_4 (TX_MODE_HT_GF | PHY_RATE_MCS4) -#define RATE_GF_MCS_5 (TX_MODE_HT_GF | PHY_RATE_MCS5) -#define RATE_GF_MCS_6 (TX_MODE_HT_GF | PHY_RATE_MCS6) -#define RATE_GF_MCS_7 (TX_MODE_HT_GF | PHY_RATE_MCS7) -#define RATE_GF_MCS_32 (TX_MODE_HT_GF | PHY_RATE_MCS32) - -#define RATE_TX_MODE_MASK BITS(6,7) -#define RATE_TX_MODE_OFFSET 6 -#define RATE_CODE_GET_TX_MODE(_ucRateCode) ((_ucRateCode & RATE_TX_MODE_MASK) >> RATE_TX_MODE_OFFSET) -#define RATE_PHY_RATE_MASK BITS(0,5) -#define RATE_PHY_RATE_OFFSET 0 -#define RATE_CODE_GET_PHY_RATE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_MASK) >> RATE_PHY_RATE_OFFSET) -#define RATE_PHY_RATE_SHORT_PREAMBLE BIT(4) -#define RATE_CODE_IS_SHORT_PREAMBLE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_SHORT_PREAMBLE)?TRUE:FALSE) - - -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - -/*! CNM(STA_RECORD_T) related definition */ -#define CFG_STA_REC_NUM 20 - -/* PHY TYPE bit definitions */ -#define PHY_TYPE_BIT_HR_DSSS BIT(PHY_TYPE_HR_DSSS_INDEX) /* HR/DSSS PHY (clause 18) */ -#define PHY_TYPE_BIT_ERP BIT(PHY_TYPE_ERP_INDEX) /* ERP PHY (clause 19) */ -#define PHY_TYPE_BIT_OFDM BIT(PHY_TYPE_OFDM_INDEX) /* OFDM 5 GHz PHY (clause 17) */ -#define PHY_TYPE_BIT_HT BIT(PHY_TYPE_HT_INDEX) /* HT PHY (clause 20) */ - - -/* PHY TYPE set definitions */ -#define PHY_TYPE_SET_802_11ABGN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11BGN (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11GN (PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11AN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11ABG (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11BG (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11A (PHY_TYPE_BIT_OFDM) - -#define PHY_TYPE_SET_802_11G (PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11B (PHY_TYPE_BIT_HR_DSSS) - -#define PHY_TYPE_SET_802_11N (PHY_TYPE_BIT_HT) - - -/* Rate set bit definitions */ -#define RATE_SET_BIT_1M BIT(RATE_1M_INDEX) /* Bit 0: 1M */ -#define RATE_SET_BIT_2M BIT(RATE_2M_INDEX) /* Bit 1: 2M */ -#define RATE_SET_BIT_5_5M BIT(RATE_5_5M_INDEX) /* Bit 2: 5.5M */ -#define RATE_SET_BIT_11M BIT(RATE_11M_INDEX) /* Bit 3: 11M */ -#define RATE_SET_BIT_22M BIT(RATE_22M_INDEX) /* Bit 4: 22M */ -#define RATE_SET_BIT_33M BIT(RATE_33M_INDEX) /* Bit 5: 33M */ -#define RATE_SET_BIT_6M BIT(RATE_6M_INDEX) /* Bit 6: 6M */ -#define RATE_SET_BIT_9M BIT(RATE_9M_INDEX) /* Bit 7: 9M */ -#define RATE_SET_BIT_12M BIT(RATE_12M_INDEX) /* Bit 8: 12M */ -#define RATE_SET_BIT_18M BIT(RATE_18M_INDEX) /* Bit 9: 18M */ -#define RATE_SET_BIT_24M BIT(RATE_24M_INDEX) /* Bit 10: 24M */ -#define RATE_SET_BIT_36M BIT(RATE_36M_INDEX) /* Bit 11: 36M */ -#define RATE_SET_BIT_48M BIT(RATE_48M_INDEX) /* Bit 12: 48M */ -#define RATE_SET_BIT_54M BIT(RATE_54M_INDEX) /* Bit 13: 54M */ -#define RATE_SET_BIT_HT_PHY BIT(RATE_HT_PHY_INDEX) /* Bit 14: BSS Selector */ - - -/* Rate set definitions */ -#define RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_HT (RATE_SET_ERP) -//#define RATE_SET_HT (RATE_SET_ERP | RATE_SET_BIT_HT_PHY) /* NOTE(Kevin): TBD */ - - -#define RATE_SET_ALL_ABG RATE_SET_ERP - -#define BASIC_RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M) - -#define BASIC_RATE_SET_HR_DSSS_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define BASIC_RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_100 RATE_SET_ALL_ABG - -#define INITIAL_RATE_SET_RCPI_80 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_60 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M) - -#define INITIAL_RATE_SET(_rcpi) (INITIAL_RATE_SET_ ## _rcpi) - -#define RCPI_100 100 /* -60 dBm */ -#define RCPI_80 80 /* -70 dBm */ -#define RCPI_60 60 /* -80 dBm */ - - -/* The number of RCPI records used to calculate their average value */ -#define MAX_NUM_RCPI_RECORDS 10 - -/* The number of RCPI records used to calculate their average value */ -#define NO_RCPI_RECORDS -128 -#define MAX_RCPI_DBM 0 -#define MIN_RCPI_DBM -100 - - -#define MAC_TX_RESERVED_FIELD 0 /* NOTE(Kevin): Should defined in tx.h */ - -#define MAX_ASSOC_ID (CFG_STA_REC_NUM) /* Available AID: 1 ~ 20(STA_REC_NUM) */ - - -#define MAX_DEAUTH_INFO_COUNT 4 /* NOTE(Kevin): Used in auth.c */ -#define MIN_DEAUTH_INTERVAL_MSEC 500 /* The minimum interval if continuously send Deauth Frame */ - -/* Authentication Type */ -#define AUTH_TYPE_OPEN_SYSTEM BIT(AUTH_ALGORITHM_NUM_OPEN_SYSTEM) -#define AUTH_TYPE_SHARED_KEY BIT(AUTH_ALGORITHM_NUM_SHARED_KEY) -#define AUTH_TYPE_FAST_BSS_TRANSITION BIT(AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION) - -/* Authentication Retry Limit */ -#define TX_AUTH_ASSOCI_RETRY_LIMIT 6 -#define TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING 1 - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_16 PHY_TYPE, *P_PHY_TYPE; -typedef UINT_8 RCPI, *P_RCPI; -typedef UINT_8 ALC_VAL, *P_ALC_VAL; - -typedef enum _ENUM_HW_BSSID_T { - BSSID_0 = 0, - BSSID_1, - BSSID_NUM -} ENUM_HW_BSSID_T; - -typedef enum _ENUM_HW_MAC_ADDR_T { - MAC_ADDR_0 = 0, - MAC_ADDR_1, - MAC_ADDR_NUM -} ENUM_HW_MAC_ADDR_T; - -typedef enum _ENUM_HW_OP_MODE_T { - HW_OP_MODE_STA = 0, - HW_OP_MODE_AP, - HW_OP_MODE_ADHOC, - HW_OP_MODE_NUM -} ENUM_HW_OP_MODE_T; - -typedef enum _ENUM_TSF_T { - ENUM_LOCAL_TSF_0, - ENUM_LOCAL_TSF_1, - ENUM_LOCAL_TSF_NUM -} ENUM_LOCAL_TSF_T, *P_ENUM_LOCAL_TSF_T; - -typedef enum _HAL_TS_HW_UPDATE_MODE { - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME, - HAL_TSF_HW_UPDATE_BY_TICK_ONLY, - HAL_TSF_HW_UPDATE_BY_RECEIVED_FRAME_ONLY, - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME_AD_HOC -} HAL_TSF_HW_UPDATE_MODE; - - -typedef enum _ENUM_AC_T { - AC0 = 0, - AC1, - AC2, - AC3, - AC_NUM -} ENUM_AC_T, *P_ENUM_AC_T; - - -/* The Type of Network been activated */ -typedef enum _ENUM_NETWORK_TYPE_INDEX_T { - NETWORK_TYPE_AIS_INDEX = 0, - NETWORK_TYPE_P2P_INDEX, - NETWORK_TYPE_BOW_INDEX, - NETWORK_TYPE_INDEX_NUM -} ENUM_NETWORK_TYPE_INDEX_T; - - -/* The Type of STA Type. */ -typedef enum _ENUM_STA_TYPE_INDEX_T { - STA_TYPE_LEGACY_INDEX = 0, - STA_TYPE_P2P_INDEX, - STA_TYPE_BOW_INDEX, - STA_TYPE_INDEX_NUM -} -ENUM_STA_TYPE_INDEX_T; - -#define STA_ROLE_BASE_INDEX 4 - -typedef enum _ENUM_STA_ROLE_INDEX_T { - STA_ROLE_ADHOC_INDEX = STA_ROLE_BASE_INDEX, //4 - STA_ROLE_CLIENT_INDEX, - STA_ROLE_AP_INDEX, - STA_ROLE_DLS_INDEX -} ENUM_STA_ROLE_INDEX_T; - -/* The Power State of a specific Network */ -typedef enum _ENUM_PWR_STATE_T { - PWR_STATE_IDLE = 0, - PWR_STATE_ACTIVE, - PWR_STATE_PS, - PWR_STATE_NUM -} ENUM_PWR_STATE_T; - -typedef enum _ENUM_PHY_TYPE_INDEX_T { - //PHY_TYPE_DSSS_INDEX, /* DSSS PHY (clause 15) -- Not used anymore */ - PHY_TYPE_HR_DSSS_INDEX = 0, /* HR/DSSS PHY (clause 18) */ - PHY_TYPE_ERP_INDEX, /* ERP PHY (clause 19) */ - PHY_TYPE_ERP_P2P_INDEX, /* ERP PHY (clause 19) w/o HR/DSSS */ - PHY_TYPE_OFDM_INDEX, /* OFDM 5 GHz PHY (clause 17) */ - PHY_TYPE_HT_INDEX, /* HT PHY (clause 20) */ - PHY_TYPE_INDEX_NUM // 5 -} ENUM_PHY_TYPE_INDEX_T, *P_ENUM_PHY_TYPE_INDEX_T; - -typedef enum _ENUM_ACPI_STATE_T { - ACPI_STATE_D0 = 0, - ACPI_STATE_D1, - ACPI_STATE_D2, - ACPI_STATE_D3 -} ENUM_ACPI_STATE_T; - -/* The operation mode of a specific Network */ -typedef enum _ENUM_OP_MODE_T { - OP_MODE_INFRASTRUCTURE = 0, /* Infrastructure/GC */ - OP_MODE_IBSS, /* AdHoc */ - OP_MODE_ACCESS_POINT, /* For GO */ - OP_MODE_P2P_DEVICE, /* P2P Device */ - OP_MODE_BOW, - OP_MODE_NUM -} ENUM_OP_MODE_T, *P_ENUM_OP_MODE_T; - -typedef enum _ENUM_CHNL_EXT_T { - CHNL_EXT_SCN = 0, - CHNL_EXT_SCA = 1, - CHNL_EXT_RES = 2, - CHNL_EXT_SCB = 3 -} ENUM_CHNL_EXT_T, *P_ENUM_CHNL_EXT_T; - -/* This starting freq of the band is unit of kHz */ -typedef enum _ENUM_BAND_T { - BAND_NULL, - BAND_2G4, - BAND_5G, - BAND_NUM -} ENUM_BAND_T, *P_ENUM_BAND_T; - -/* Provide supported channel list to other components in array format */ -typedef struct _RF_CHANNEL_INFO_T { - ENUM_BAND_T eBand; - UINT_8 ucChannelNum; -} RF_CHANNEL_INFO_T, *P_RF_CHANNEL_INFO_T; - -typedef enum _ENUM_RATE_INDEX_T { - RATE_1M_INDEX = 0, /* 1M */ - RATE_2M_INDEX, /* 2M */ - RATE_5_5M_INDEX, /* 5.5M */ - RATE_11M_INDEX, /* 11M */ - RATE_22M_INDEX, /* 22M */ - RATE_33M_INDEX, /* 33M */ - RATE_6M_INDEX, /* 6M */ - RATE_9M_INDEX, /* 9M */ - RATE_12M_INDEX, /* 12M */ - RATE_18M_INDEX, /* 18M */ - RATE_24M_INDEX, /* 24M */ - RATE_36M_INDEX, /* 36M */ - RATE_48M_INDEX, /* 48M */ - RATE_54M_INDEX, /* 54M */ - RATE_HT_PHY_INDEX, /* BSS Selector - HT PHY */ - RATE_NUM // 15 -} ENUM_RATE_INDEX_T, *P_ENUM_RATE_INDEX_T; - -typedef enum _ENUM_HT_RATE_INDEX_T { - HT_RATE_MCS0_INDEX = 0, - HT_RATE_MCS1_INDEX, - HT_RATE_MCS2_INDEX, - HT_RATE_MCS3_INDEX, - HT_RATE_MCS4_INDEX, - HT_RATE_MCS5_INDEX, - HT_RATE_MCS6_INDEX, - HT_RATE_MCS7_INDEX, - HT_RATE_MCS32_INDEX, - HT_RATE_NUM // 9 -} ENUM_HT_RATE_INDEX_T, *P_ENUM_HT_RATE_INDEX_T; - -typedef enum _ENUM_PREMABLE_OPTION_T { - PREAMBLE_DEFAULT_LONG_NONE = 0, /* LONG for PHY_TYPE_HR_DSSS, NONE for PHY_TYPE_OFDM */ - PREAMBLE_OPTION_SHORT, /* SHORT mandatory for PHY_TYPE_ERP, SHORT option for PHY_TYPE_HR_DSSS */ - PREAMBLE_HT_MIXED_MODE, - PREAMBLE_HT_GREEN_FIELD, - PREAMBLE_OPTION_NUM -} ENUM_PREMABLE_OPTION_T, *P_ENUM_PREMABLE_OPTION_T; - -typedef enum _ENUM_MODULATION_SYSTEM_T { - MODULATION_SYSTEM_CCK = 0, - MODULATION_SYSTEM_OFDM, - MODULATION_SYSTEM_HT20, - MODULATION_SYSTEM_HT40, - MODULATION_SYSTEM_NUM -} ENUM_MODULATION_SYSTEM_T, *P_ENUM_MODULATION_SYSTEM_T; - -typedef enum _ENUM_MODULATION_TYPE_T { - MODULATION_TYPE_CCK_BPSK = 0, - MODULATION_TYPE_QPSK, - MODULATION_TYPE_16QAM, - MODULATION_TYPE_64QAM, - MODULATION_TYPE_NUM -} ENUM_MODULATION_TYPE_T, *P_ENUM_MODULATION_TYPE_T; - -typedef enum _ENUM_PS_FORWARDING_TYPE_T { - PS_FORWARDING_TYPE_NON_PS = 0, - PS_FORWARDING_TYPE_DELIVERY_ENABLED, - PS_FORWARDING_TYPE_NON_DELIVERY_ENABLED, - PS_FORWARDING_MORE_DATA_ENABLED, - PS_FORWARDING_TYPE_NUM -} ENUM_PS_FORWARDING_TYPE_T, *P_ENUM_PS_FORWARDING_TYPE_T; - -typedef struct _DEAUTH_INFO_T { - UINT_8 aucRxAddr[MAC_ADDR_LEN]; - OS_SYSTIME rLastSendTime; -} DEAUTH_INFO_T, *P_DEAUTH_INFO_T; - -/*----------------------------------------------------------------------------*/ -/* Information Element (IE) handlers */ -/*----------------------------------------------------------------------------*/ -typedef VOID (*PFN_APPEND_IE_FUNC)(P_ADAPTER_T, P_MSDU_INFO_T); -typedef VOID (*PFN_HANDLE_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T); -typedef VOID (*PFN_VERIFY_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T, PUINT_16); -typedef UINT_32 (*PFN_CALCULATE_VAR_IE_LEN_FUNC)(P_ADAPTER_T, ENUM_NETWORK_TYPE_INDEX_T, P_STA_RECORD_T); - -typedef struct _APPEND_IE_ENTRY_T { - UINT_16 u2EstimatedIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_IE_ENTRY_T, *P_APPEND_IE_ENTRY_T; - -typedef struct _APPEND_VAR_IE_ENTRY_T { - UINT_16 u2EstimatedFixedIELen; /* For Fixed Length */ - PFN_CALCULATE_VAR_IE_LEN_FUNC pfnCalculateVariableIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_VAR_IE_ENTRY_T, *P_APPEND_VAR_IE_ENTRY_T; - -typedef struct _HANDLE_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_HANDLE_IE_FUNC pfnHandleIE; -} HANDLE_IE_ENTRY_T, *P_HANDLE_IE_ENTRY_T; - -typedef struct _VERIFY_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_VERIFY_IE_FUNC pfnVarifyIE; -} VERIFY_IE_ENTRY_T, *P_VERIFY_IE_ENTRY_T; - -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration */ -/*----------------------------------------------------------------------------*/ -typedef enum _ENUM_PARAM_CONNECTION_POLICY_T { - CONNECT_BY_SSID_BEST_RSSI = 0, - CONNECT_BY_SSID_GOOD_RSSI_MIN_CH_LOAD, - CONNECT_BY_SSID_ANY, /* NOTE(Kevin): Needed by WHQL */ - CONNECT_BY_BSSID, - CONNECT_BY_CUSTOMIZED_RULE /* NOTE(Kevin): TBD */ -} ENUM_PARAM_CONNECTION_POLICY_T, *P_ENUM_PARAM_CONNECTION_POLICY_T; - -typedef enum _ENUM_PARAM_PREAMBLE_TYPE_T { - PREAMBLE_TYPE_LONG = 0, - PREAMBLE_TYPE_SHORT, - PREAMBLE_TYPE_AUTO /*!< Try preamble short first, if fail tray preamble long. */ -} ENUM_PARAM_PREAMBLE_TYPE_T, *P_ENUM_PARAM_PREAMBLE_TYPE_T; - -/* This is enum defined for user to select a phy config listed in combo box */ -typedef enum _ENUM_PARAM_PHY_CONFIG_T { - PHY_CONFIG_802_11ABG = 0, /*!< Can associated with 802.11abg AP but without n capability, Scan dual band. */ - PHY_CONFIG_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11ABGN, /*!< Can associated with 802.11abgn AP, Scan dual band. */ - PHY_CONFIG_802_11BGN, /*!< Can associated with 802_11bgn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11AN, /*!< Can associated with 802_11an AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11GN, /*!< Can associated with 802_11gn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_NUM // 9 -} ENUM_PARAM_PHY_CONFIG_T, *P_ENUM_PARAM_PHY_CONFIG_T; - -/* This is enum defined for user to select an AP Mode */ -typedef enum _ENUM_PARAM_AP_MODE_T { - AP_MODE_11B = 0, /*!< Create 11b BSS if we support 802.11abg/802.11bg. */ - AP_MODE_MIXED_11BG, /*!< Create 11bg mixed BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G, /*!< Create 11g only BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G_P2P, /*!< Create 11g only BSS for P2P if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11A, /*!< Create 11a only BSS if we support 802.11abg. */ - AP_MODE_NUM // 4 -} ENUM_PARAM_AP_MODE_T, *P_ENUM_PARAM_AP_MODE_T; - - -/* Masks for determining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define NETWORK_TYPE_AIS_MASK BIT(NETWORK_TYPE_AIS_INDEX) -#define NETWORK_TYPE_P2P_MASK BIT(NETWORK_TYPE_P2P_INDEX) -#define NETWORK_TYPE_BOW_MASK BIT(NETWORK_TYPE_BOW_INDEX) -#define STA_TYPE_LEGACY_MASK BIT(STA_TYPE_LEGACY_INDEX) -#define STA_TYPE_P2P_MASK BIT(STA_TYPE_P2P_INDEX) -#define STA_TYPE_BOW_MASK BIT(STA_TYPE_BOW_INDEX) -#define STA_TYPE_ADHOC_MASK BIT(STA_ROLE_ADHOC_INDEX) -#define STA_TYPE_CLIENT_MASK BIT(STA_ROLE_CLIENT_INDEX) -#define STA_TYPE_AP_MASK BIT(STA_ROLE_AP_INDEX) -#define STA_TYPE_DLS_MASK BIT(STA_ROLE_DLS_INDEX) - -/* Macros for obtaining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define IS_STA_IN_AIS(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) -#define IS_STA_IN_P2P(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) -#define IS_STA_IN_BOW(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) -#define IS_STA_LEGACY_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_LEGACY_MASK) -#define IS_STA_P2P_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_P2P_MASK) -#define IS_STA_BOW_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_BOW_MASK) -#define IS_ADHOC_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_ADHOC_MASK) -#define IS_CLIENT_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_CLIENT_MASK) -#define IS_AP_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_AP_MASK) -#define IS_DLS_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_DLS_MASK) - -/* The ENUM_STA_TYPE_T accounts for ENUM_NETWORK_TYPE_T and ENUM_STA_ROLE_INDEX_T. - * * It is a merged version of Network Type and STA Role. - * */ -typedef enum _ENUM_STA_TYPE_T { - STA_TYPE_LEGACY_AP = (STA_TYPE_LEGACY_MASK | STA_TYPE_AP_MASK), - STA_TYPE_LEGACY_CLIENT = (STA_TYPE_LEGACY_MASK | STA_TYPE_CLIENT_MASK), - STA_TYPE_ADHOC_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_ADHOC_MASK), -#if CFG_ENABLE_WIFI_DIRECT - STA_TYPE_P2P_GO = (STA_TYPE_P2P_MASK | STA_TYPE_AP_MASK), - STA_TYPE_P2P_GC = (STA_TYPE_P2P_MASK | STA_TYPE_CLIENT_MASK), -#endif -#if CFG_ENABLE_BT_OVER_WIFI - STA_TYPE_BOW_AP = (STA_TYPE_BOW_MASK | STA_TYPE_AP_MASK), - STA_TYPE_BOW_CLIENT = (STA_TYPE_BOW_MASK | STA_TYPE_CLIENT_MASK), -#endif - STA_TYPE_DLS_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_DLS_MASK) -} ENUM_STA_TYPE_T, *P_ENUM_STA_TYPE_T; - -/* The type of BSS we discovered */ -typedef enum _ENUM_BSS_TYPE_T { - BSS_TYPE_INFRASTRUCTURE = 1, - BSS_TYPE_IBSS, - BSS_TYPE_P2P_DEVICE, - BSS_TYPE_BOW_DEVICE, - BSS_TYPE_NUM -} ENUM_BSS_TYPE_T, *P_ENUM_BSS_TYPE_T; - -/*----------------------------------------------------------------------------*/ -/* RSN structures */ -/*----------------------------------------------------------------------------*/ -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack(1) -//#endif - -#define MAX_NUM_SUPPORTED_CIPHER_SUITES 8 /* max number of supported cipher suites */ -#if CFG_SUPPORT_802_11W -#define MAX_NUM_SUPPORTED_AKM_SUITES 8 /* max number of supported AKM suites */ -#else -#define MAX_NUM_SUPPORTED_AKM_SUITES 6 /* max number of supported AKM suites */ -#endif - -/* Structure of RSN Information */ -typedef struct _RSN_INFO_T { - UINT_8 ucElemId; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_AKM_SUITES]; - UINT_16 u2RsnCap; - BOOLEAN fgRsnCapPresent; -} /*__KAL_ATTRIB_PACKED__*/ RSN_INFO_T, *P_RSN_INFO_T; - -#define MAX_NUM_SUPPORTED_WAPI_AKM_SUITES 1 /* max number of supported AKM suites */ -#define MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES 1 /* max number of supported cipher suites */ - -/* Structure of WAPI Information */ -typedef struct _WAPI_INFO_T { - UINT_8 ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_WAPI_AKM_SUITES]; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES]; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2WapiCap; - UINT_16 u2Bkid; - UINT_8 aucBkid[1][16]; -} /* __KAL_ATTRIB_PACKED__*/ WAPI_INFO_T, *P_WAPI_INFO_T; - -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack() -//#endif - - -#if CFG_ENABLE_WIFI_DIRECT - -typedef struct _P2P_DEVICE_TYPE_T { - UINT_16 u2CategoryID; - UINT_16 u2SubCategoryID; -} P2P_DEVICE_TYPE_T, *P_P2P_DEVICE_TYPE_T; - -typedef struct _P2P_DEVICE_DESC_T { - LINK_ENTRY_T rLinkEntry; - BOOLEAN fgDevInfoValid; - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Interface Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method support. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[8]; // Reference to P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT - UINT_16 u2NameLength; - UINT_8 aucName[32]; // Reference to WPS_ATTRI_MAX_LEN_DEVICE_NAME - // TODO: Service Information or PasswordID valid? -} P2P_DEVICE_DESC_T, *P_P2P_DEVICE_DESC_T; - -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static const UINT_8 aucRateIndex2RateCode[PREAMBLE_OPTION_NUM][RATE_NUM] = { - { /* Long Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_LONG, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_LONG, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_LONG, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Short Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_SHORT, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_SHORT, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_SHORT, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Mixed Mode(Option) */ - RATE_MM_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_MM_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_MM_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_MM_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_MM_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_MM_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_MM_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_MM_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_MM_MCS_32 /* RATE_MCS32_INDEX, */ - }, - { /* Green Field(Option) */ - RATE_GF_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_GF_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_GF_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_GF_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_GF_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_GF_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_GF_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_GF_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_GF_MCS_32 /* RATE_MCS32_INDEX, */ - } -}; - -static const UINT_8 aucRateTableSize[PREAMBLE_OPTION_NUM] = { - RATE_HT_PHY_INDEX, - RATE_HT_PHY_INDEX, - HT_RATE_NUM, - HT_RATE_NUM -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros to get and set the wireless LAN frame fields those are 16/32 bits in - length. */ -#define WLAN_GET_FIELD_16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0]) | ((UINT_16) __cp[1] << 8); \ - } - -#define WLAN_GET_FIELD_BE16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0] << 8) | ((UINT_16) __cp[1]); \ - } - -#define WLAN_GET_FIELD_32(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_32)(_value_p) = ((UINT_32) __cp[0]) | ((UINT_32) __cp[1] << 8) | \ - ((UINT_32) __cp[2] << 16) | ((UINT_32) __cp[3] << 24); \ - } - -#define WLAN_GET_FIELD_64(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_64)(_value_p) = \ - ((UINT_64) __cp[0]) | ((UINT_64) __cp[1] << 8) | \ - ((UINT_64) __cp[2] << 16) | ((UINT_64) __cp[3] << 24) | \ - ((UINT_64) __cp[4] << 32) | ((UINT_64) __cp[5] << 40) | \ - ((UINT_64) __cp[6] << 48) | ((UINT_64) __cp[7] << 56); \ - } - -#define WLAN_SET_FIELD_16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - } - -#define WLAN_SET_FIELD_BE16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) ((_value) >> 8); \ - __cp[1] = (UINT_8) (_value); \ - } - -#define WLAN_SET_FIELD_32(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - __cp[2] = (UINT_8) ((_value) >> 16); \ - __cp[3] = (UINT_8) ((_value) >> 24); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_DEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic_cmd_event.h deleted file mode 100755 index 406b55ac10cb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic_cmd_event.h +++ /dev/null @@ -1,1897 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic_cmd_event.h#1 $ -*/ - -/*! \file "nic_cmd_event.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: nic_cmd_event.h $ -** -** 07 29 2013 yuche.tsai -** [ALPS00818788] [PreRC1][Mobile HotSpot]DUT should support hidden SSID broadcast for Mobile HotSpot -** Support hidden SSID for MT6630. -** FW Label: 20130729_ALPS_WIFI_FW_MT6620_V1_12 - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * redefine the CMD_ID_SET_TXPWR_CTRL value. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 30 2011 cm.chang - * [WCXRP00001128] [MT5931 Wi-Fi][FW] Update BB/RF setting based on RF doc v0.7 for LGE spec - * 1. Add a new CMD for driver to set device mode - * 2. Update calibration parameters - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 26 2011 cp.wu - * [WCXRP00001065] [MT6620 Wi-Fi][MT5931][FW][DRV] Adding parameter for controlling minimum channel dwell time for scanning - * add interface for control minimum channel dwell time for scanning. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * add osc stable time command structure - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update cmd format of BSS INFO, always sync OwnMac to FW no matter P2P is enabled or not.. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Sync HT operation element information from host to FW - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 15 2010 cm.chang - * NULL - * Add new CMD for TX power, 5G power offset and power parameters - * - * 09 07 2010 yuche.tsai - * NULL - * Add a pointer in P2P SCAN RESULT structure. This pointer - * is pointed to a IE buffer for this P2p device. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 george.huang - * NULL - * add new CMD ID definition - * - * 08 16 2010 yuche.tsai - * NULL - * Add a field in BSS INFO cmd to change interface address for P2P. (switching between Device Addr & Interface Addr) - * - * 08 12 2010 yuche.tsai - * NULL - * Add interface address indication when indicate connection status. - * It is requested by supplicant to do 4 way handshake. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Change data structure for P2P Device scan result, all channel time for scan command. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 26 2010 yuche.tsai - * - * Add P2P Device Found Event. - * Channel extention option in scan abort command. - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 george.huang - * - * DWORD align for the CMD data structure - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 cp.wu - * - * reorder members of CMD_SET_BSS_INFO. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add BSS/STA_REC commands for integration. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * the frequency is used for adhoc connection only - * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * OID_802_11_RSSI, - * * * OID_802_11_RSSI_TRIGGER, - * * * OID_802_11_STATISTICS, - * * * OID_802_11_DISASSOCIATE, - * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * and result is retrieved by get ATInfo instead - * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-12-11 18:35:07 GMT mtk02752 -** add CMD added in CMD/EVEN document v0.8 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-12-10 16:39:37 GMT mtk02752 -** eliminate unused definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-12-10 09:55:11 GMT mtk02752 -** command ID/event ID revised -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-09 13:57:37 GMT MTK02468 -** Added event ids (EVENT_ID_RX_ADDBA and EVENT_ID_RX_DELBA) -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-08 17:35:39 GMT mtk02752 -** + add event ID for EVENT_ID_TEST_STATUS (rf test) -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-12-07 23:01:09 GMT mtk02752 -** add data structure for RF_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-12-03 16:22:56 GMT mtk01461 -** Modify the element - i4RSSI in EVENT of SCAN RESULT -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-30 10:54:44 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T, while 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-26 10:16:58 GMT mtk02752 -** resync EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-25 21:34:01 GMT mtk02752 -** sync. EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-25 21:03:48 GMT mtk02752 -** refine MGMT_FRAME -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-25 18:17:47 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result and presume max. ie length = 600 bytes -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 22:41:20 GMT mtk02752 -** add EVENT_SCAN_RESULT_T definition -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-11-23 20:29:16 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-11-23 14:46:01 GMT mtk02752 -** add new command/event structure upon CM@SD1's documentation -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-13 15:13:40 GMT mtk02752 -** add command definition for CMD_BUILD_CONNECTION and EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-20 12:22:22 GMT mtk01461 -** Add SeqNum field to Event Header -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:11 GMT mtk01461 -** Update structure of HIF_EVENT_HEADER_T and EVENT_HDR_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 12:10:36 GMT mtk01461 -** Add Common Set CMD Callback for MCR Write and other Set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:17 GMT mtk01461 -** Command Done Handler -*/ -#ifndef _NIC_CMD_EVENT_H -#define _NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CMD_STATUS_SUCCESS 0 -#define CMD_STATUS_REJECTED 1 -#define CMD_STATUS_UNKNOWN 2 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -#define MAX_IE_LENGTH (600) -#define MAX_WSC_IE_LENGTH (400) - -/* Action field in structure CMD_CH_PRIVILEGE_T */ -#define CMD_CH_ACTION_REQ 0 -#define CMD_CH_ACTION_ABORT 1 - -/* Status field in structure EVENT_CH_PRIVILEGE_T */ -#define EVENT_CH_STATUS_GRANT 0 - - -typedef enum _ENUM_CMD_ID_T { - CMD_ID_TEST_MODE = 1, /* 0x01 (Set) */ - CMD_ID_RESET_REQUEST, /* 0x02 (Set) */ - CMD_ID_BUILD_CONNECTION, /* 0x03 (Set) */ - CMD_ID_SCAN_REQ_V2, /* 0x04 (Set) */ - CMD_ID_NIC_POWER_CTRL, /* 0x05 (Set) */ - CMD_ID_POWER_SAVE_MODE, /* 0x06 (Set) */ - CMD_ID_LINK_ATTRIB, /* 0x07 (Set) */ - CMD_ID_ADD_REMOVE_KEY, /* 0x08 (Set) */ - CMD_ID_DEFAULT_KEY_ID, /* 0x09 (Set) */ - CMD_ID_INFRASTRUCTURE, /* 0x0a (Set) */ - CMD_ID_SET_RX_FILTER, /* 0x0b (Set) */ - CMD_ID_DOWNLOAD_BUF, /* 0x0c (Set) */ - CMD_ID_WIFI_START, /* 0x0d (Set) */ - CMD_ID_CMD_BT_OVER_WIFI, /* 0x0e (Set) */ - CMD_ID_SET_MEDIA_CHANGE_DELAY_TIME, /* 0x0f (Set) */ - CMD_ID_SEND_ADDBA_RSP, /* 0x10 (Set) */ - CMD_ID_WAPI_MODE, /* 0x11 (Set) (obsolete) */ - CMD_ID_WAPI_ASSOC_INFO, /* 0x12 (Set) (obsolete) */ - CMD_ID_SET_DOMAIN_INFO, /* 0x13 (Set) */ - CMD_ID_SET_IP_ADDRESS, /* 0x14 (Set) */ - CMD_ID_BSS_ACTIVATE_CTRL, /* 0x15 (Set) */ - CMD_ID_SET_BSS_INFO, /* 0x16 (Set) */ - CMD_ID_UPDATE_STA_RECORD, /* 0x17 (Set) */ - CMD_ID_REMOVE_STA_RECORD, /* 0x18 (Set) */ - CMD_ID_INDICATE_PM_BSS_CREATED, /* 0x19 (Set) */ - CMD_ID_INDICATE_PM_BSS_CONNECTED, /* 0x1a (Set) */ - CMD_ID_INDICATE_PM_BSS_ABORT, /* 0x1b (Set) */ - CMD_ID_UPDATE_BEACON_CONTENT, /* 0x1c (Set) */ - CMD_ID_SET_BSS_RLM_PARAM, /* 0x1d (Set) */ - CMD_ID_SCAN_REQ, /* 0x1e (Set) */ - CMD_ID_SCAN_CANCEL, /* 0x1f (Set) */ - CMD_ID_CH_PRIVILEGE, /* 0x20 (Set) */ - CMD_ID_UPDATE_WMM_PARMS, /* 0x21 (Set) */ - CMD_ID_SET_WMM_PS_TEST_PARMS, /* 0x22 (Set) */ - CMD_ID_TX_AMPDU, /* 0x23 (Set) */ - CMD_ID_ADDBA_REJECT, /* 0x24 (Set) */ - CMD_ID_SET_PS_PROFILE_ADV, /* 0x25 (Set) */ - CMD_ID_SET_RAW_PATTERN, /* 0x26 (Set) */ - CMD_ID_CONFIG_PATTERN_FUNC, /* 0x27 (Set) */ - CMD_ID_SET_TX_PWR, /* 0x28 (Set) */ - CMD_ID_SET_5G_PWR_OFFSET, /* 0x29 (Set) */ - CMD_ID_SET_PWR_PARAM, /* 0x2A (Set) */ - CMD_ID_P2P_ABORT, /* 0x2B (Set) */ -#if CFG_STRESS_TEST_SUPPORT - CMD_ID_RANDOM_RX_RESET_EN = 0x2C, /* 0x2C (Set ) */ - CMD_ID_RANDOM_RX_RESET_DE = 0x2D, /* 0x2D (Set ) */ - CMD_ID_SAPP_EN = 0x2E, /* 0x2E (Set ) */ - CMD_ID_SAPP_DE = 0x2F, /* 0x2F (Set ) */ -#endif - CMD_ID_ROAMING_TRANSIT = 0x30, /* 0x30 (Set) */ - CMD_ID_SET_PHY_PARAM, /* 0x31 (Set) */ - CMD_ID_SET_NOA_PARAM, /* 0x32 (Set) */ - CMD_ID_SET_OPPPS_PARAM, /* 0x33 (Set) */ - CMD_ID_SET_UAPSD_PARAM, /* 0x34 (Set) */ - CMD_ID_SET_SIGMA_STA_SLEEP, /* 0x35 (Set) */ - CMD_ID_SET_EDGE_TXPWR_LIMIT, /* 0x36 (Set) */ - CMD_ID_SET_DEVICE_MODE, /* 0x37 (Set) */ - CMD_ID_SET_TXPWR_CTRL, /* 0x38 (Set) */ - CMD_ID_SET_AUTOPWR_CTRL, /* 0x39 (Set) */ - CMD_ID_SET_WFD_CTRL = 0x3A, /* 0x3A (Set) */ - - CMD_ID_GET_NIC_CAPABILITY = 0x80, /* 0x80 (Query) */ - CMD_ID_GET_LINK_QUALITY, /* 0x81 (Query) */ - CMD_ID_GET_STATISTICS, /* 0x82 (Query) */ - CMD_ID_GET_CONNECTION_STATUS, /* 0x83 (Query) */ - CMD_ID_GET_ASSOC_INFO, /* 0x84 (Query) (obsolete) */ - CMD_ID_GET_STA_STATISTICS = 0x85, /* 0x85 (Query) */ - - CMD_ID_BASIC_CONFIG = 0xc1, /* 0xc1 (Set / Query) */ - CMD_ID_ACCESS_REG, /* 0xc2 (Set / Query) */ - CMD_ID_MAC_MCAST_ADDR, /* 0xc3 (Set / Query) */ - CMD_ID_802_11_PMKID, /* 0xc4 (Set / Query) */ - CMD_ID_ACCESS_EEPROM, /* 0xc5 (Set / Query) */ - CMD_ID_SW_DBG_CTRL, /* 0xc6 (Set / Query) */ -#if 1/* CFG_SUPPORT_ANTI_PIRACY */ - CMD_ID_SEC_CHECK, /* 0xc7 (Set / Query) */ -#endif - CMD_ID_DUMP_MEM, /* 0xc8 (Query) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_ID_SET_RDD_CH = 0xE1, -#endif - - CMD_ID_SET_BWCS = 0xF1, -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - CMD_ID_SET_OSC = 0xf2, -#endif - -} ENUM_CMD_ID_T, *P_ENUM_CMD_ID_T; - -typedef enum _ENUM_EVENT_ID_T { - EVENT_ID_CMD_RESULT = 1, /* 0x01 (Query) */ - EVENT_ID_NIC_CAPABILITY, /* 0x02 (Query) */ - EVENT_ID_CONNECTION_STATUS, /* 0x03 (Query / Unsolicited) (obsolete) */ - EVENT_ID_SCAN_RESULT, /* 0x04 (Query / Unsolicited) (obselete) */ - EVENT_ID_LINK_QUALITY, /* 0x05 (Query / Unsolicited) */ - EVENT_ID_STATISTICS, /* 0x06 (Query) */ - EVENT_ID_MIC_ERR_INFO, /* 0x07 (Unsolicited) */ - EVENT_ID_ASSOC_INFO, /* 0x08 (Query - CMD_ID_GET_ASSOC_INFO) */ - EVENT_ID_BASIC_CONFIG, /* 0x09 (Query - CMD_ID_BASIC_CONFIG) */ - EVENT_ID_ACCESS_REG, /* 0x0a (Query - CMD_ID_ACCESS_REG) */ - EVENT_ID_MAC_MCAST_ADDR, /* 0x0b (Query - CMD_ID_MAC_MCAST_ADDR) */ - EVENT_ID_802_11_PMKID, /* 0x0c (Query - CMD_ID_802_11_PMKID) */ - EVENT_ID_ACCESS_EEPROM, /* 0x0d (Query - CMD_ID_ACCESS_EEPROM) */ - EVENT_ID_SLEEPY_NOTIFY, /* 0x0e (Query) */ - EVENT_ID_BT_OVER_WIFI, /* 0x0f (Unsolicited) */ - EVENT_ID_TEST_STATUS, /* 0x10 (Query - CMD_ID_TEST_MODE) */ - EVENT_ID_RX_ADDBA, /* 0x11 (Unsolicited) (obsolete) */ - EVENT_ID_RX_DELBA, /* 0x12 (Unsolicited) (obsolete) */ - EVENT_ID_ACTIVATE_STA_REC_T, /* 0x13 (Unsolicited) */ - EVENT_ID_DEACTIVATE_STA_REC_T, /* 0x14 (Unsolicited) */ - EVENT_ID_SCAN_DONE, /* 0x15 (Unsoiicited) */ - EVENT_ID_RX_FLUSH, /* 0x16 (Unsolicited) */ - EVENT_ID_TX_DONE, /* 0x17 (Unsolicited) */ - EVENT_ID_CH_PRIVILEGE, /* 0x18 (Unsolicited) */ - EVENT_ID_BSS_ABSENCE_PRESENCE = 0x19, /* 0x19 (Unsolicited) */ - EVENT_ID_STA_CHANGE_PS_MODE, /* 0x1A (Unsolicited) */ - EVENT_ID_BSS_BEACON_TIMEOUT, /* 0x1B (Unsolicited) */ - EVENT_ID_UPDATE_NOA_PARAMS, /* 0x1C (Unsolicited) */ - EVENT_ID_AP_OBSS_STATUS, /* 0x1D (Unsolicited) */ - EVENT_ID_STA_UPDATE_FREE_QUOTA, /* 0x1E (Unsolicited) */ - EVENT_ID_SW_DBG_CTRL, /* 0x1F (Query - CMD_ID_SW_DBG_CTRL) */ - EVENT_ID_ROAMING_STATUS, /* 0x20 (Unsolicited) */ - EVENT_ID_STA_AGING_TIMEOUT, /* 0x21 (Unsolicited) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - EVENT_ID_SEC_CHECK_RSP, /* 0x22 (Unsolicited) */ -#endif - EVENT_ID_SEND_DEAUTH, /* 0x23 (Unsolicited) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - EVENT_ID_UPDATE_RDD_STATUS, /* 0x24 (Unsolicited) */ -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - EVENT_ID_UPDATE_BWCS_STATUS = 0x25, /* 0x25 (Unsolicited) */ - EVENT_ID_UPDATE_BCM_DEBUG, /* 0x26 (Unsolicited) */ -#endif - EVENT_ID_RX_ERR, - EVENT_ID_DUMP_MEM, - EVENT_ID_STA_STATISTICS= 0x29, /* 0x29 (Query ) */ - EVENT_ID_STA_STATISTICS_UPDATE /* 0x2A (Unsolicited) */ -} ENUM_EVENT_ID_T, *P_ENUM_EVENT_ID_T; - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#ifndef LINUX -typedef UINT_8 CMD_STATUS; -#endif -/* for Event Packet (via HIF-RX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_CMD_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucCID; - UINT_8 ucSetQuery; - UINT_8 ucSeqNum; - UINT_8 aucReserved2; - - UINT_8 aucBuffer[0]; -} WIFI_CMD_T, *P_WIFI_CMD_T; - -/* for Command Packet (via HIF-TX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_EVENT_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - UINT_8 aucBuffer[0]; -} WIFI_EVENT_T, *P_WIFI_EVENT_T; - -// CMD_ID_TEST_MODE -typedef struct _CMD_TEST_CTRL_T { - UINT_8 ucAction; - UINT_8 aucReserved[3]; - union { - UINT_32 u4OpMode; - UINT_32 u4ChannelFreq; - PARAM_MTK_WIFI_TEST_STRUC_T rRfATInfo; - } u; -} CMD_TEST_CTRL_T, *P_CMD_TEST_CTRL_T; - -// EVENT_TEST_STATUS -typedef struct _PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T { - UINT_32 u4PktSentStatus; - UINT_32 u4PktSentCount; - UINT_16 u2AvgAlc; - UINT_8 ucCckGainControl; - UINT_8 ucOfdmGainControl; -} PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T; - -typedef struct _PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T { - UINT_32 u4IntRxOk; /*!< number of packets that Rx ok from interrupt */ - UINT_32 u4IntCrcErr; /*!< number of packets that CRC error from interrupt */ - UINT_32 u4IntShort; /*!< number of packets that is short preamble from interrupt */ - UINT_32 u4IntLong; /*!< number of packets that is long preamble from interrupt */ - UINT_32 u4PauRxPktCount; /*!< number of packets that Rx ok from PAU */ - UINT_32 u4PauCrcErrCount; /*!< number of packets that CRC error from PAU */ - UINT_32 u4PauRxFifoFullCount; /*!< number of packets that is short preamble from PAU */ - UINT_32 u4PauCCACount; /*!< CCA rising edge count */ -} PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T; - -typedef union _EVENT_TEST_STATUS { - PARAM_MTK_WIFI_TEST_STRUC_T rATInfo; -// PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T rTxStatus; -// PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T rRxStatus; -} EVENT_TEST_STATUS, *P_EVENT_TEST_STATUS; - -// CMD_BUILD_CONNECTION -typedef struct _CMD_BUILD_CONNECTION { - UINT_8 ucInfraMode; - UINT_8 ucAuthMode; - UINT_8 ucEncryptStatus; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - - /* Ad-hoc mode */ - UINT_16 u2BeaconPeriod; - UINT_16 u2ATIMWindow; - UINT_8 ucJoinOnly; - UINT_8 ucReserved; - UINT_32 u4FreqInKHz; - - /* for faster connection */ - UINT_8 aucScanResult[0]; -} CMD_BUILD_CONNECTION, *P_CMD_BUILD_CONNECTION; - -//CMD_ADD_REMOVE_KEY -typedef struct _CMD_802_11_KEY { - UINT_8 ucAddRemove; - UINT_8 ucTxKey; - UINT_8 ucKeyType; - UINT_8 ucIsAuthenticator; - UINT_8 aucPeerAddr[6]; - UINT_8 ucNetType; - UINT_8 ucAlgorithmId; - UINT_8 ucKeyId; - UINT_8 ucKeyLen; - UINT_8 aucReverved[2]; - UINT_8 aucKeyMaterial[32]; - UINT_8 aucKeyRsc[16]; -} CMD_802_11_KEY, *P_CMD_802_11_KEY; - -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; - -typedef struct _CMD_802_11_PMKID -{ - ULONG u4BSSIDInfoCount; - P_PMKID_ENTRY_T arPMKIDInfo[1]; -} CMD_802_11_PMKID, *P_CMD_802_11_PMKID; - -// CMD_BASIC_CONFIG -typedef struct _CMD_CSUM_OFFLOAD { - UINT_16 u2RxChecksum; // bit0: IP, bit1: UDP, bit2: TCP - UINT_16 u2TxChecksum; // bit0: IP, bit1: UDP, bit2: TCP -} CMD_CSUM_OFFLOAD, *P_CMD_CSUM_OFFLOAD; - -typedef struct _CMD_BASIC_CONFIG { - PARAM_MAC_ADDRESS rMyMacAddr; - UINT_8 ucNative80211; - UINT_8 aucReserved[1]; - - CMD_CSUM_OFFLOAD rCsumOffload; -} CMD_BASIC_CONFIG, *P_CMD_BASIC_CONFIG, EVENT_BASIC_CONFIG, *P_EVENT_BASIC_CONFIG; - -// CMD_MAC_MCAST_ADDR -typedef struct _CMD_MAC_MCAST_ADDR { - UINT_32 u4NumOfGroupAddr; - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; - PARAM_MAC_ADDRESS arAddress[MAX_NUM_GROUP_ADDR]; -} CMD_MAC_MCAST_ADDR, *P_CMD_MAC_MCAST_ADDR, EVENT_MAC_MCAST_ADDR, *P_EVENT_MAC_MCAST_ADDR; - -// CMD_ACCESS_EEPROM -typedef struct _CMD_ACCESS_EEPROM { - UINT_16 u2Offset; - UINT_16 u2Data; -} CMD_ACCESS_EEPROM, *P_CMD_ACCESS_EEPROM, EVENT_ACCESS_EEPROM, *P_EVENT_ACCESS_EEPROM; - -typedef struct _CMD_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} CMD_CUSTOM_NOA_PARAM_STRUC_T, *P_CMD_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} CMD_CUSTOM_OPPPS_PARAM_STRUC_T, *P_CMD_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} CMD_CUSTOM_UAPSD_PARAM_STRUC_T, *P_CMD_CUSTOM_UAPSD_PARAM_STRUC_T; - -// EVENT_CONNECTION_STATUS -typedef struct _EVENT_CONNECTION_STATUS { - UINT_8 ucMediaStatus; - UINT_8 ucReasonOfDisconnect; - - UINT_8 ucInfraMode; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - UINT_8 ucAuthenMode; - UINT_8 ucEncryptStatus; - UINT_16 u2BeaconPeriod; - UINT_16 u2AID; - UINT_16 u2ATIMWindow; - UINT_8 ucNetworkType; - UINT_8 aucReserved[1]; - UINT_32 u4FreqInKHz; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucInterfaceAddr[PARAM_MAC_ADDR_LEN]; -#endif - -} EVENT_CONNECTION_STATUS, *P_EVENT_CONNECTION_STATUS; - -// EVENT_NIC_CAPABILITY -typedef struct _EVENT_NIC_CAPABILITY { - UINT_16 u2ProductID; - UINT_16 u2FwVersion; - UINT_16 u2DriverVersion; - UINT_8 ucHw5GBandDisabled; - UINT_8 ucEepromUsed; - UINT_8 ucEfuseValid; - UINT_8 ucMacAddrValid; -#if CFG_REPORT_RFBB_VERSION - UINT_8 ucRfVersion; - UINT_8 ucPhyVersion; -#endif -#if CFG_ENABLE_CAL_LOG - UINT_8 ucRfCalFail; - UINT_8 ucBbCalFail; -#endif - UINT_8 aucReserved[2]; -} EVENT_NIC_CAPABILITY, *P_EVENT_NIC_CAPABILITY; - -// modified version of WLAN_BEACON_FRAME_BODY_T for simplier buffering -typedef struct _WLAN_BEACON_FRAME_BODY_T_LOCAL { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[MAX_IE_LENGTH]; /* Various IEs, start from SSID */ - UINT_16 u2IELength; /* This field is *NOT* carried by F/W but caculated by nic_rx */ -} WLAN_BEACON_FRAME_BODY_T_LOCAL, *P_WLAN_BEACON_FRAME_BODY_T_LOCAL; - -// EVENT_SCAN_RESULT -typedef struct _EVENT_SCAN_RESULT_T { - INT_32 i4RSSI; - UINT_32 u4LinkQuality; - UINT_32 u4DSConfig; /* Center frequency */ - UINT_32 u4DomainInfo; /* Require CM opinion */ - UINT_32 u4Reserved; - UINT_8 ucNetworkType; - UINT_8 ucOpMode; - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - WLAN_BEACON_FRAME_BODY_T_LOCAL rBeaconFrameBody; -} EVENT_SCAN_RESULT_T, *P_EVENT_SCAN_RESULT_T; - -/* event of tkip mic error */ -typedef struct _EVENT_MIC_ERR_INFO -{ - UINT_32 u4Flags; -} EVENT_MIC_ERR_INFO, *P_EVENT_MIC_ERR_INFO; - -typedef struct _EVENT_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} EVENT_PMKID_CANDIDATE_LIST_T, *P_EVENT_PMKID_CANDIDATE_LIST_T; - - -typedef struct _EVENT_CMD_RESULT { - UINT_8 ucCmdID; - UINT_8 ucStatus; - UINT_8 aucReserved[2]; -} EVENT_CMD_RESULT, *P_EVENT_CMD_RESULT; - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -typedef struct _CMD_MCU_LP_PARAM_T { - UINT_16 u2OscStableTime; - UINT_8 ucReserved[6]; -} CMD_MCU_LP_PARAM_T, *P_CMD_MCU_LP_PARAM_T; -#endif - - -// CMD_ID_ACCESS_REG & EVENT_ID_ACCESS_REG -typedef struct _CMD_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} CMD_ACCESS_REG, *P_CMD_ACCESS_REG; - -// CMD_DUMP_MEMORY -typedef struct _CMD_DUMP_MEM { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} CMD_DUMP_MEM, *P_CMD_DUMP_MEM; - -typedef struct _EVENT_DUMP_MEM_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; - UINT_8 aucBuffer[1]; -} EVENT_DUMP_MEM_T, *P_EVENT_DUMP_MEM_T; - -typedef struct _CMD_SW_DBG_CTRL_T { - UINT_32 u4Id; - UINT_32 u4Data; - /* Debug Support */ - UINT_32 u4DebugCnt[64]; -} CMD_SW_DBG_CTRL_T, *P_CMD_SW_DBG_CTRL_T; - - -// CMD_ID_LINK_ATTRIB -typedef struct _CMD_LINK_ATTRIB { - INT_8 cRssiTrigger; - UINT_8 ucDesiredRateLen; - UINT_16 u2DesiredRate[32]; - UINT_8 ucMediaStreamMode; - UINT_8 aucReserved[1]; -} CMD_LINK_ATTRIB, *P_CMD_LINK_ATTRIB; - -// CMD_ID_NIC_POWER_CTRL -typedef struct _CMD_NIC_POWER_CTRL { - UINT_8 ucPowerMode; - UINT_8 aucReserved[3]; -} CMD_NIC_POWER_CTRL, *P_CMD_NIC_POWER_CTRL; - -// CMD_ID_POWER_SAVE_MODE -typedef struct _CMD_PS_PROFILE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucPsProfile; - UINT_8 aucReserved[2]; -} CMD_PS_PROFILE_T, *P_CMD_PS_PROFILE_T; - - -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; -} EVENT_LINK_QUALITY, *P_EVENT_LINK_QUALITY; - -#if CFG_SUPPORT_P2P_RSSI_QUERY -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY_EX { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; - UINT_8 ucIsLQ0Rdy; - INT_8 cRssiP2P; /* For P2P Network. */ - INT_8 cLinkQualityP2P; - UINT_16 u2LinkSpeedP2P; - UINT_8 ucMediumBusyPercentageP2P; - UINT_8 ucIsLQ1Rdy; -} EVENT_LINK_QUALITY_EX, *P_EVENT_LINK_QUALITY_EX; -#endif - -// EVENT_ID_STATISTICS -typedef struct _EVENT_STATISTICS { - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; -} EVENT_STATISTICS, *P_EVENT_STATISTICS; - -// EVENT_ID_FW_SLEEPY_NOTIFY -typedef struct _EVENT_SLEEPY_NOTIFY { - UINT_8 ucSleepyState; - UINT_8 aucReserved[3]; -} EVENT_SLEEPY_NOTIFY, *P_EVENT_SLEEPY_NOTIFY; - -typedef struct _EVENT_ACTIVATE_STA_REC_T { - UINT_8 aucMacAddr[6]; - UINT_8 ucStaRecIdx; - UINT_8 ucNetworkTypeIndex; - BOOLEAN fgIsQoS; - BOOLEAN fgIsAP; - UINT_8 aucReserved[2]; -} EVENT_ACTIVATE_STA_REC_T, *P_EVENT_ACTIVATE_STA_REC_T; - -typedef struct _EVENT_DEACTIVATE_STA_REC_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_DEACTIVATE_STA_REC_T, *P_EVENT_DEACTIVATE_STA_REC_T; - -// CMD_BT_OVER_WIFI -typedef struct _CMD_BT_OVER_WIFI { - UINT_8 ucAction; /* 0: query, 1: setup, 2: destroy */ - UINT_8 ucChannelNum; - PARAM_MAC_ADDRESS rPeerAddr; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 PAL_Capabilities; - UINT_8 cMaxTxPower; - UINT_8 ucChannelBand; - UINT_8 ucReserved[1]; -} CMD_BT_OVER_WIFI, *P_CMD_BT_OVER_WIFI; - -// EVENT_BT_OVER_WIFI -typedef struct _EVENT_BT_OVER_WIFI { - UINT_8 ucLinkStatus; - UINT_8 ucSelectedChannel; - INT_8 cRSSI; - UINT_8 ucReserved[1]; -} EVENT_BT_OVER_WIFI, *P_EVENT_BT_OVER_WIFI; - -// Same with DOMAIN_SUBBAND_INFO -typedef struct _CMD_SUBBAND_INFO { - UINT_8 ucRegClass; - UINT_8 ucBand; - UINT_8 ucChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 aucReserved[3]; -} CMD_SUBBAND_INFO, *P_CMD_SUBBAND_INFO; - -// CMD_SET_DOMAIN_INFO -typedef struct _CMD_SET_DOMAIN_INFO_T { - UINT_16 u2CountryCode; - UINT_16 u2Reserved; - CMD_SUBBAND_INFO rSubBand[6]; - - UINT_8 uc2G4Bandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 uc5GBandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 aucReserved[2]; -} CMD_SET_DOMAIN_INFO_T, *P_CMD_SET_DOMAIN_INFO_T; - -// CMD_SET_IP_ADDRESS -typedef struct _IPV4_NETWORK_ADDRESS { - UINT_8 aucIpAddr[4]; -} IPV4_NETWORK_ADDRESS, *P_IPV4_NETWORK_ADDRESS; - -typedef struct _CMD_SET_NETWORK_ADDRESS_LIST { - UINT_8 ucNetTypeIndex; - UINT_8 ucAddressCount; - UINT_8 ucReserved[2]; - IPV4_NETWORK_ADDRESS arNetAddress[1]; -} CMD_SET_NETWORK_ADDRESS_LIST, *P_CMD_SET_NETWORK_ADDRESS_LIST; - -typedef struct _PATTERN_DESCRIPTION { - UINT_8 fgCheckBcA1; - UINT_8 fgCheckMcA1; - UINT_8 ePatternHeader; - UINT_8 fgAndOp; - UINT_8 fgNotOp; - UINT_8 ucPatternMask; - UINT_16 ucPatternOffset; - UINT_8 aucPattern[8]; -} PATTERN_DESCRIPTION, *P_PATTERN_DESCRIPTION; - -typedef struct _CMD_RAW_PATTERN_CONFIGURATION_T { - PATTERN_DESCRIPTION arPatternDesc[4]; -} CMD_RAW_PATTERN_CONFIGURATION_T, *P_CMD_RAW_PATTERN_CONFIGURATION_T; - -typedef struct _CMD_PATTERN_FUNC_CONFIG { - BOOLEAN fgBcA1En; - BOOLEAN fgMcA1En; - BOOLEAN fgBcA1MatchDrop; - BOOLEAN fgMcA1MatchDrop; -} CMD_PATTERN_FUNC_CONFIG, *P_CMD_PATTERN_FUNC_CONFIG; - - -typedef struct _EVENT_TX_DONE_T { - UINT_8 ucPacketSeq; - UINT_8 ucStatus; - UINT_16 u2SequenceNumber; - UINT_32 au4Reserved1; - UINT_32 au4Reserved2; - UINT_32 au4Reserved3; -} EVENT_TX_DONE_T, *P_EVENT_TX_DONE_T; - -typedef struct _CMD_BSS_ACTIVATE_CTRL { - UINT_8 ucNetTypeIndex; - UINT_8 ucActive; - UINT_8 aucReserved[2]; -} CMD_BSS_ACTIVATE_CTRL, *P_CMD_BSS_ACTIVATE_CTRL; - -typedef struct _CMD_SET_BSS_RLM_PARAM_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucRfBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucErpProtectMode; - UINT_8 ucHtProtectMode; - UINT_8 ucGfOperationMode; - UINT_8 ucTxRifsMode; - UINT_16 u2HtOpInfo3; - UINT_16 u2HtOpInfo2; - UINT_8 ucHtOpInfo1; - UINT_8 ucUseShortPreamble; - UINT_8 ucUseShortSlotTime; - UINT_8 ucCheckId; /* Fixed value: 0x72 */ -} CMD_SET_BSS_RLM_PARAM_T, *P_CMD_SET_BSS_RLM_PARAM_T; - -typedef struct _CMD_SET_BSS_INFO { - UINT_8 ucNetTypeIndex; - UINT_8 ucConnectionState; - UINT_8 ucCurrentOPMode; - UINT_8 ucSSIDLen; - UINT_8 aucSSID[32]; - UINT_8 aucBSSID[6]; - UINT_8 ucIsQBSS; - UINT_8 ucReserved1; - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucStaRecIdxOfAP; - UINT_8 ucReserved2; - UINT_8 ucReserved3; - UINT_8 ucNonHTBasicPhyType; /* For Slot Time and CWmin */ - UINT_8 ucAuthMode; - UINT_8 ucEncStatus; - UINT_8 ucPhyTypeSet; - UINT_8 aucOwnMac[6]; - UINT_8 fgWapiMode; - UINT_8 fgIsApMode; - UINT_8 fgHiddenSsidMode; - CMD_SET_BSS_RLM_PARAM_T rBssRlmParam; -} CMD_SET_BSS_INFO, *P_CMD_SET_BSS_INFO; - -typedef struct _CMD_UPDATE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucStaType; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - UINT_16 u2AssocId; - UINT_16 u2ListenInterval; - UINT_8 ucNetTypeIndex; - UINT_8 ucDesiredPhyTypeSet; - UINT_16 u2DesiredNonHTRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucIsQoS; - UINT_8 ucIsUapsdSupported; - UINT_8 ucStaState; - UINT_8 ucMcsSet; - UINT_8 ucSupMcs32; - UINT_8 ucAmpduParam; - UINT_16 u2HtCapInfo; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; - UINT_8 ucRCPI; - UINT_8 ucNeedResp; - UINT_8 ucUapsdAc; /* b0~3: Trigger enabled, b4~7: Delivery enabled */ - UINT_8 ucUapsdSp; /* 0: all, 1: max 2, 2: max 4, 3: max 6 */ - UINT_8 aucReserved[3]; - /* TBD */ -} CMD_UPDATE_STA_RECORD_T, *P_CMD_UPDATE_STA_RECORD_T; - -typedef struct _CMD_REMOVE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucReserved; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; -} CMD_REMOVE_STA_RECORD_T, *P_CMD_REMOVE_STA_RECORD_T; - -typedef struct _CMD_INDICATE_PM_BSS_CREATED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 aucReserved[2]; -} CMD_INDICATE_PM_BSS_CREATED, *P_CMD_INDICATE_PM_BSS_CREATED; - -typedef struct _CMD_INDICATE_PM_BSS_CONNECTED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2AssocId; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 fgIsUapsdConnection; - UINT_8 ucBmpDeliveryAC; - UINT_8 ucBmpTriggerAC; - UINT_8 aucReserved[1]; -} CMD_INDICATE_PM_BSS_CONNECTED, *P_CMD_INDICATE_PM_BSS_CONNECTED; - -typedef struct _CMD_INDICATE_PM_BSS_ABORT { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} CMD_INDICATE_PM_BSS_ABORT, *P_CMD_INDICATE_PM_BSS_ABORT; - -typedef struct _CMD_BEACON_TEMPLATE_UPDATE { - UINT_8 ucUpdateMethod; // 0: update randomly, 1: update all, 2: delete all (1 and 2 will update directly without search) - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_16 u2Capability; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_BEACON_TEMPLATE_UPDATE, *P_CMD_BEACON_TEMPLATE_UPDATE; - -typedef struct _CMD_SET_WMM_PS_TEST_STRUC_T { - UINT_8 ucNetTypeIndex; - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ -} CMD_SET_WMM_PS_TEST_STRUC_T, *P_CMD_SET_WMM_PS_TEST_STRUC_T; - - -/* Definition for CHANNEL_INFO.ucBand: - * 0: Reserved - * 1: BAND_2G4 - * 2: BAND_5G - * Others: Reserved - */ -typedef struct _CHANNEL_INFO_T { - UINT_8 ucBand; - UINT_8 ucChannelNum; -} CHANNEL_INFO_T, *P_CHANNEL_INFO_T; - -typedef struct _CMD_SCAN_REQ_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucReserved[1]; - UINT_16 u2ChannelMinDwellTime; - UINT_8 aucSSID[32]; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ, *P_CMD_SCAN_REQ; - -typedef struct _CMD_SCAN_REQ_V2_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; - PARAM_SSID_T arSSID[4]; - UINT_16 u2ProbeDelayTime; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ_V2, *P_CMD_SCAN_REQ_V2; - -typedef struct _CMD_SCAN_CANCEL_T { - UINT_8 ucSeqNum; - UINT_8 ucIsExtChannel; /* For P2P channel extention. */ - UINT_8 aucReserved[2]; -} CMD_SCAN_CANCEL, *P_CMD_SCAN_CANCEL; - -typedef struct _EVENT_SCAN_DONE_T { - UINT_8 ucSeqNum; - UINT_8 ucSparseChannelValid; - CHANNEL_INFO_T rSparseChannel; -} EVENT_SCAN_DONE, *P_EVENT_SCAN_DONE; - -typedef struct _CMD_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucAction; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} CMD_CH_PRIVILEGE_T, *P_CMD_CH_PRIVILEGE_T; - -typedef struct _CMD_TX_PWR_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} CMD_TX_PWR_T, *P_CMD_TX_PWR_T; - -typedef struct _CMD_5G_PWR_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} CMD_5G_PWR_OFFSET_T, *P_CMD_5G_PWR_OFFSET_T; - -typedef struct _CMD_PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} CMD_PWR_PARAM_T, *P_CMD_PWR_PARAM_T; - - -typedef struct _CMD_PHY_PARAM_T { - UINT_8 aucData[144]; /* eFuse content */ -} CMD_PHY_PARAM_T, *P_CMD_PHY_PARAM_T; - -typedef struct _CMD_AUTO_POWER_PARAM_T { - UINT_8 ucType; /* 0: Disable 1: Enalbe 0x10: Change paramters */ - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 aucLevelRcpiTh[3]; - UINT_8 aucReserved2[1]; - INT_8 aicLevelPowerOffset[3]; /* signed, in unit of 0.5dBm */ - UINT_8 aucReserved3[1]; - UINT_8 aucReserved4[8]; -} CMD_AUTO_POWER_PARAM_T, *P_CMD_AUTO_POWER_PARAM_T; - - -typedef struct _EVENT_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucStatus; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4GrantInterval; /* In unit of ms */ -} EVENT_CH_PRIVILEGE_T, *P_EVENT_CH_PRIVILEGE_T; - -typedef struct _EVENT_BSS_BEACON_TIMEOUT_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} EVENT_BSS_BEACON_TIMEOUT_T, *P_EVENT_BSS_BEACON_TIMEOUT_T; - -typedef struct _EVENT_STA_AGING_TIMEOUT_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_STA_AGING_TIMEOUT_T, *P_EVENT_STA_AGING_TIMEOUT_T; - -typedef struct _EVENT_NOA_TIMING_T { - UINT_8 fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} EVENT_NOA_TIMING_T, *P_EVENT_NOA_TIMING_T; - -typedef struct _EVENT_UPDATE_NOA_PARAMS_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 fgEnableOppPS; - UINT_16 u2CTWindow; - - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - EVENT_NOA_TIMING_T arEventNoaTiming[8/*P2P_MAXIMUM_NOA_COUNT*/]; -} EVENT_UPDATE_NOA_PARAMS_T, *P_EVENT_UPDATE_NOA_PARAMS_T; - -typedef struct _EVENT_AP_OBSS_STATUS_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucObssErpProtectMode; - UINT_8 ucObssHtProtectMode; - UINT_8 ucObssGfOperationMode; - UINT_8 ucObssRifsOperationMode; - UINT_8 ucObssBeaconForcedTo20M; - UINT_8 aucReserved[2]; -} EVENT_AP_OBSS_STATUS_T, *P_EVENT_AP_OBSS_STATUS_T; - -typedef struct _CMD_EDGE_TXPWR_LIMIT_T { - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - INT_8 cReserved; -} CMD_EDGE_TXPWR_LIMIT_T, *P_CMD_EDGE_TXPWR_LIMIT_T; - -typedef struct _CMD_SET_DEVICE_MODE_T { - UINT_16 u2ChipID; - UINT_16 u2Mode; -} CMD_SET_DEVICE_MODE_T, *P_CMD_SET_DEVICE_MODE_T; - - -#if CFG_SUPPORT_RDD_TEST_MODE -typedef struct _CMD_RDD_CH_T { - UINT_8 ucRddTestMode; - UINT_8 ucRddShutCh; - UINT_8 ucRddStartCh; - UINT_8 ucRddStopCh; - UINT_8 ucRddDfs; - UINT_8 ucReserved; - UINT_8 ucReserved1; - UINT_8 ucReserved2; -} CMD_RDD_CH_T, *P_CMD_RDD_CH_T; - -typedef struct _EVENT_RDD_STATUS_T { - UINT_8 ucRddStatus; - UINT_8 aucReserved[3]; -} EVENT_RDD_STATUS_T, *P_EVENT_RDD_STATUS_T; -#endif - -typedef struct _CMD_SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} CMD_SET_TXPWR_CTRL_T, *P_CMD_SET_TXPWR_CTRL_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - - - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* for timeout check */ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic_init_cmd_event.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic_init_cmd_event.h deleted file mode 100755 index 33886c98045a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/nic_init_cmd_event.h +++ /dev/null @@ -1,180 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic_init_cmd_event.h#1 $ -*/ - -/*! \file "nic_init_cmd_event.h" - \brief This file contains the declairation file of the WLAN initialization routines - for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: nic_init_cmd_event.h $ - * - * 09 26 2011 cp.wu - * [WCXRP00001011] [MT6628 Wi-Fi] Firmware Download Agent: make CRC validation as an optional feature - * add definition for disabling CRC32 validation (for MT6628 only) - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * -*/ -#ifndef _NIC_INIT_CMD_EVENT_H -#define _NIC_INIT_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INIT_CMD_STATUS_SUCCESS 0 -#define INIT_CMD_STATUS_REJECTED_INVALID_PARAMS 1 -#define INIT_CMD_STATUS_REJECTED_CRC_ERROR 2 -#define INIT_CMD_STATUS_REJECTED_DECRYPT_FAIL 3 -#define INIT_CMD_STATUS_UNKNOWN 4 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -typedef enum _ENUM_INIT_CMD_ID { - INIT_CMD_ID_DOWNLOAD_BUF = 1, - INIT_CMD_ID_WIFI_START, - INIT_CMD_ID_ACCESS_REG, - INIT_CMD_ID_QUERY_PENDING_ERROR -} ENUM_INIT_CMD_ID, *P_ENUM_INIT_CMD_ID; - -typedef enum _ENUM_INIT_EVENT_ID { - INIT_EVENT_ID_CMD_RESULT = 1, - INIT_EVENT_ID_ACCESS_REG, - INIT_EVENT_ID_PENDING_ERROR -} ENUM_INIT_EVENT_ID, *P_ENUM_INIT_EVENT_ID; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_8 CMD_STATUS; - -// commands -typedef struct _INIT_WIFI_CMD_T { - UINT_8 ucCID; - UINT_8 ucSeqNum; - UINT_16 u2Reserved; - UINT_8 aucBuffer[0]; -} INIT_WIFI_CMD_T, *P_INIT_WIFI_CMD_T; - -typedef struct _INIT_HIF_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - INIT_WIFI_CMD_T rInitWifiCmd; -} INIT_HIF_TX_HEADER_T, *P_INIT_HIF_TX_HEADER_T; - -#define DOWNLOAD_BUF_ENCRYPTION_MODE BIT(0) -#define DOWNLOAD_BUF_NO_CRC_CHECKING BIT(30) -#define DOWNLOAD_BUF_ACK_OPTION BIT(31) -typedef struct _INIT_CMD_DOWNLOAD_BUF { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4CRC32; - UINT_32 u4DataMode; - UINT_8 aucBuffer[0]; -} INIT_CMD_DOWNLOAD_BUF, *P_INIT_CMD_DOWNLOAD_BUF; - -typedef struct _INIT_CMD_WIFI_START { - UINT_32 u4Override; - UINT_32 u4Address; -} INIT_CMD_WIFI_START, *P_INIT_CMD_WIFI_START; - -typedef struct _INIT_CMD_ACCESS_REG { - UINT_8 ucSetQuery; - UINT_8 aucReserved[3]; - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_CMD_ACCESS_REG, *P_INIT_CMD_ACCESS_REG; - -// Events -typedef struct _INIT_WIFI_EVENT_T { - UINT_16 u2RxByteCount; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucBuffer[0]; -} INIT_WIFI_EVENT_T, *P_INIT_WIFI_EVENT_T; - -typedef struct _INIT_HIF_RX_HEADER_T { - INIT_WIFI_EVENT_T rInitWifiEvent; -} INIT_HIF_RX_HEADER_T, *P_INIT_HIF_RX_HEADER_T; - -typedef struct _INIT_EVENT_CMD_RESULT { - UINT_8 ucStatus; // 0: success - // 1: rejected by invalid param - // 2: rejected by incorrect CRC - // 3: rejected by decryption failure - // 4: unknown CMD - UINT_8 aucReserved[3]; -} INIT_EVENT_CMD_RESULT, *P_INIT_EVENT_CMD_RESULT, INIT_EVENT_PENDING_ERROR, *P_INIT_EVENT_PENDING_ERROR; - -typedef struct _INIT_EVENT_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_EVENT_ACCESS_REG, *P_INIT_EVENT_ACCESS_REG; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_INIT_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/p2p_precomp.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/p2p_precomp.h deleted file mode 100755 index 892b5b714baf..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/p2p_precomp.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/p2p_precomp.h#1 $ -*/ - -/*! \file p2p_precomp.h - \brief Collection of most compiler flags for p2p driver are described here. - - In this file we collect all compiler flags and detail the p2p driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -#ifndef _P2P_PRECOMP_H -#define _P2P_PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#include "gl_p2p_os.h" - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#include "roaming_fsm.h" - - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#include "wlan_p2p.h" - - - - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" - - -#include "aa_fsm.h" - -#include "cnm_timer.h" - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -/* Dependency: cnm_timer.h (TIMER_T) */ -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" - - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#include "gl_p2p_kal.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_PRECOMP_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/p2p_typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/p2p_typedef.h deleted file mode 100755 index c8aa47fb6297..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/p2p_typedef.h +++ /dev/null @@ -1,278 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/p2p_typedef.h#1 $ -*/ - -/*! \file p2p_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - - - - -#ifndef _P2P_TYPEDEF_H -#define _P2P_TYPEDEF_H - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* -* type definition of pointer to p2p structure -*/ -//typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; -typedef struct _P2P_INFO_T P2P_INFO_T, *P_P2P_INFO_T; - -typedef struct _P2P_FSM_INFO_T P2P_FSM_INFO_T, *P_P2P_FSM_INFO_T; - -typedef struct _P2P_CONNECTION_SETTINGS_T P2P_CONNECTION_SETTINGS_T, *P_P2P_CONNECTION_SETTINGS_T; - - -/* Type definition for function pointer to p2p function*/ -typedef BOOLEAN (*P2P_LAUNCH)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*P2P_REMOVE)( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsWlanLaunched - ); - -typedef BOOLEAN (*KAL_P2P_GET_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_TKIP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_CCMP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_WSC_MODE)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef struct net_device* (*KAL_P2P_GET_DEV_HDLR)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_SET_MULTICAST_WORK_ITEM) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_REGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_UNREGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_UPDATE_ASSOC_INFO)( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -typedef BOOLEAN (*P2P_VALIDATE_AUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -typedef BOOLEAN (*P2P_VALIDATE_ASSOC_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu4ControlFlags - ); - -typedef VOID (*P2P_RUN_EVENT_AAA_TX_FAIL) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef BOOLEAN (*P2P_PARSE_CHECK_FOR_P2P_INFO_ELEM)( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -typedef WLAN_STATUS (*P2P_RUN_EVENT_AAA_COMPLETE) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef VOID (*P2P_PROCESS_EVENT_UPDATE_NOA_PARAM) ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -typedef VOID (*SCAN_P2P_PROCESS_BEACON_AND_PROBE_RESP) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -typedef VOID (*P2P_RX_PUBLIC_ACTION_FRAME) ( - P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_RSP_GENERATE_OBSS_SCAN_IE) ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -typedef VOID (*RLM_UPDATE_BW_BY_CH_LIST_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef VOID (*RLM_PROCESS_PUBLIC_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_PROCESS_HT_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_UPDATE_PARAMS_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -typedef VOID (*RLM_HANDLE_OBSS_STATUS_EVENT_PKT) ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - - -typedef BOOLEAN (*P2P_FUNC_VALIDATE_PROBE_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -typedef VOID (*RLM_BSS_INIT_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef UINT_32 (*P2P_GET_PROB_RSP_IE_TABLE_SIZE)( - VOID - ); - -typedef PUINT_8 (*P2P_BUILD_REASSOC_REQ_FRAME_COMMON_IES) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -typedef VOID (*P2P_FUNC_DISCONNECT) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DEAUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DISASSOC) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef BOOLEAN (*P2P_FUN_IS_AP_MODE) ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_BEACON_TIMEOUT) ( - IN P_ADAPTER_T prAdapter - ); - - -typedef VOID (*P2P_FUNC_STORE_ASSOC_RSP_IE_BUFFER) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -typedef VOID (*P2P_GENERATE_P2P_IE) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -typedef UINT_32 (*P2P_CALCULATE_P2P_IE_LEN) ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /*CFG_ENABLE_WIFI_DIRECT*/ - -#endif /* _P2P_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/precomp.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/precomp.h deleted file mode 100755 index 0e5a8e372076..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/precomp.h +++ /dev/null @@ -1,380 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/precomp.h#2 $ -*/ - -/*! \file precomp.h - \brief Collection of most compiler flags are described here. - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -/* -** $Log: precomp.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Isolate P2P related function for Hardware Software Bundle - * - * 09 14 2010 chinghwa.yu - * NULL - * Fix BOW_FSM_INFO_T dependence. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 11:30:58 GMT mtk02752 -** add rftest.h for implementing RF test mode in driver land -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-23 22:02:00 GMT mtk02468 -** Added que_mgt.h -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-13 21:58:36 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:40:11 GMT mtk01461 -** Add nic_cmd_event.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 20:00:26 GMT mtk01461 -** Add cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:44 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:25 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _PRECOMP_H -#define _PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#if CFG_SUPPORT_SWCR -#include "swcr.h" -#endif - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "wlan_p2p.h" -#endif - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" -#if CFG_SUPPORT_802_11V -#include "wnm.h" -#endif - -#include "aa_fsm.h" - -#include "cnm_timer.h" - - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" -#endif - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - -#if CFG_SUPPORT_ROAMING -#include "roaming_fsm.h" -#endif /* CFG_SUPPORT_ROAMING */ - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_kal.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRECOMP_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/pwr_mgt.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/pwr_mgt.h deleted file mode 100755 index 4819de0fd9bb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/pwr_mgt.h +++ /dev/null @@ -1,147 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/pwr_mgt.h#1 $ -*/ - -/*! \file "pwr_mgt.h" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - - - -/* -** $Log: pwr_mgt.h $ - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * * due to the different configurations on FPGA and ASIC -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-10 16:39:10 GMT mtk02752 -** disable PM macros temporally -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-29 19:48:37 GMT mtk01084 -** temp remove power management macro -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-08 16:51:11 GMT mtk01084 -** update for power management control macro -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-03 14:59:58 GMT mtk01426 -** Add #if CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:53:10 GMT mtk01084 -** modify ACQUIRE_POWER_CONTROL_FROM_PM() and RECLAIM_POWER_CONTROL_TO_PM() macro -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:32:47 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:20 GMT mtk01084 -** Initial version -** -*/ - -#ifndef _PWR_MGT_H -#define _PWR_MGT_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PM_UAPSD_AC0 (BIT(0)) -#define PM_UAPSD_AC1 (BIT(1)) -#define PM_UAPSD_AC2 (BIT(2)) -#define PM_UAPSD_AC3 (BIT(3)) - -#define PM_UAPSD_ALL (PM_UAPSD_AC0 | PM_UAPSD_AC1 | PM_UAPSD_AC2 | PM_UAPSD_AC3) -#define PM_UAPSD_NONE 0 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PM_PROFILE_SETUP_INFO_T { - /* Profile setup */ - UINT_8 ucBmpDeliveryAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - UINT_8 ucBmpTriggerAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - - UINT_8 ucUapsdSp; /* Number of triggered packets in UAPSD */ - -} PM_PROFILE_SETUP_INFO_T, *P_PM_PROFILE_SETUP_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if !CFG_ENABLE_FULL_PM - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) -#else - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) \ - { \ - if (_prAdapter->fgIsFwOwn) { \ - nicpmSetDriverOwn(_prAdapter); \ - } \ - /* Increase Block to Enter Low Power Semaphore count */ \ - GLUE_INC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - } - - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) \ - { \ - ASSERT(_prAdapter->u4PwrCtrlBlockCnt != 0); \ - /* Decrease Block to Enter Low Power Semaphore count */ \ - GLUE_DEC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - if (_prAdapter->fgWiFiInSleepyState && (_prAdapter->u4PwrCtrlBlockCnt == 0)) { \ - nicpmSetFWOwn(_prAdapter, _fgEnableGINT_in_IST); \ - } \ - } -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PWR_MGT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/queue.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/queue.h deleted file mode 100755 index a7773e9d592d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/queue.h +++ /dev/null @@ -1,189 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/queue.h#1 $ -*/ - -/*! \file queue.h - \brief Definition for singly queue operations. - - In this file we define the singly queue data structure and its - queue operation MACROs. -*/ - - - -/* -** $Log: queue.h $ - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:46 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _QUEUE_H -#define _QUEUE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Singly Queue Structures - Entry Part */ -typedef struct _QUE_ENTRY_T { - struct _QUE_ENTRY_T *prNext; - struct _QUE_ENTRY_T *prPrev; /* For Rx buffer reordering used only */ -} QUE_ENTRY_T, *P_QUE_ENTRY_T; - -/* Singly Queue Structures - Queue Part */ -typedef struct _QUE_T { - P_QUE_ENTRY_T prHead; - P_QUE_ENTRY_T prTail; - UINT_32 u4NumElem; -} QUE_T, *P_QUE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define QUEUE_INITIALIZE(prQueue) \ - { \ - (prQueue)->prHead = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->u4NumElem = 0; \ - } - -#define QUEUE_IS_EMPTY(prQueue) (((P_QUE_T)(prQueue))->prHead == (P_QUE_ENTRY_T)NULL) - -#define QUEUE_IS_NOT_EMPTY(prQueue) ((prQueue)->u4NumElem > 0) - -#define QUEUE_GET_HEAD(prQueue) ((prQueue)->prHead) - -#define QUEUE_GET_TAIL(prQueue) ((prQueue)->prTail) - -#define QUEUE_GET_NEXT_ENTRY(prQueueEntry) ((prQueueEntry)->prNext) - -#define QUEUE_INSERT_HEAD(prQueue, prQueueEntry) \ - { \ - ASSERT(prQueue); \ - ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (prQueue)->prHead; \ - (prQueue)->prHead = (prQueueEntry); \ - if ((prQueue)->prTail == (P_QUE_ENTRY_T)NULL) { \ - (prQueue)->prTail = (prQueueEntry); \ - } \ - ((prQueue)->u4NumElem)++; \ - } - -#define QUEUE_INSERT_TAIL(prQueue, prQueueEntry) \ - { \ - ASSERT(prQueue); \ - ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (P_QUE_ENTRY_T)NULL; \ - if ((prQueue)->prTail) { \ - ((prQueue)->prTail)->prNext = (prQueueEntry); \ - } else { \ - (prQueue)->prHead = (prQueueEntry); \ - } \ - (prQueue)->prTail = (prQueueEntry); \ - ((prQueue)->u4NumElem)++; \ - } - -/* NOTE: We assume the queue entry located at the beginning of "prQueueEntry Type", - * so that we can cast the queue entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define QUEUE_REMOVE_HEAD(prQueue, prQueueEntry, _P_TYPE) \ - { \ - ASSERT(prQueue); \ - prQueueEntry = (_P_TYPE)((prQueue)->prHead); \ - if (prQueueEntry) { \ - (prQueue)->prHead = ((P_QUE_ENTRY_T)(prQueueEntry))->prNext; \ - if ((prQueue)->prHead == (P_QUE_ENTRY_T)NULL){ \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - } \ - ((P_QUE_ENTRY_T)(prQueueEntry))->prNext = (P_QUE_ENTRY_T)NULL; \ - ((prQueue)->u4NumElem)--; \ - } \ - } - -#define QUEUE_MOVE_ALL(prDestQueue, prSrcQueue) \ - { \ - ASSERT(prDestQueue); \ - ASSERT(prSrcQueue); \ - *(P_QUE_T)prDestQueue = *(P_QUE_T)prSrcQueue; \ - QUEUE_INITIALIZE(prSrcQueue); \ - } - -#define QUEUE_CONCATENATE_QUEUES(prDestQueue, prSrcQueue) \ - { \ - ASSERT(prDestQueue); \ - ASSERT(prSrcQueue); \ - if (prSrcQueue->u4NumElem > 0) { \ - if ((prDestQueue)->prTail) { \ - ((prDestQueue)->prTail)->prNext = (prSrcQueue)->prHead; \ - } else { \ - (prDestQueue)->prHead = (prSrcQueue)->prHead; \ - } \ - (prDestQueue)->prTail = (prSrcQueue)->prTail; \ - ((prDestQueue)->u4NumElem) += ((prSrcQueue)->u4NumElem); \ - QUEUE_INITIALIZE(prSrcQueue); \ - } \ - } - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUEUE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/rftest.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/rftest.h deleted file mode 100755 index ae6541dc2e92..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/rftest.h +++ /dev/null @@ -1,317 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/rftest.h#1 $ -*/ - -/*! \file "rftest.h" - \brief definitions for RF Productino test - -*/ - - - -/* -** $Log: rftest.h $ - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-08 17:35:11 GMT mtk02752 -** * comment out RF test which is not supported on MT6620 -** + API decalre for rftest -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-12-08 11:29:07 GMT mtk02752 -** definitions for RF test mode -** -*/ -#ifndef _RFTEST_H -#define _RFTEST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -// Table Version -#define RF_AUTO_TEST_FUNCTION_TABLE_VERSION 0x01000001 - -// Power -#define RF_AT_PARAM_POWER_MASK BITS(0,7) -#define RF_AT_PARAM_POWER_MAX RF_AT_PARAM_POWER_MASK - -// Rate -#define RF_AT_PARAM_RATE_MCS_MASK BIT(31) -#define RF_AT_PARAM_RATE_MASK BITS(0,7) -#define RF_AT_PARAM_RATE_CCK_MAX 3 -#define RF_AT_PARAM_RATE_1M 0 -#define RF_AT_PARAM_RATE_2M 1 -#define RF_AT_PARAM_RATE_5_5M 2 -#define RF_AT_PARAM_RATE_11M 3 -#define RF_AT_PARAM_RATE_6M 4 -#define RF_AT_PARAM_RATE_9M 5 -#define RF_AT_PARAM_RATE_12M 6 -#define RF_AT_PARAM_RATE_18M 7 -#define RF_AT_PARAM_RATE_24M 8 -#define RF_AT_PARAM_RATE_36M 9 -#define RF_AT_PARAM_RATE_48M 10 -#define RF_AT_PARAM_RATE_54M 11 - -// Antenna -#define RF_AT_PARAM_ANTENNA_ID_MASK BITS(0,7) -#define RF_AT_PARAM_ANTENNA_ID_MAX 1 - -// Packet Length -#define RF_AT_PARAM_TX_80211HDR_BYTE_MAX (32) -#define RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX (2048) - -#define RF_AT_PARAM_TX_PKTLEN_BYTE_DEFAULT 1024 -#define RF_AT_PARAM_TX_PKTLEN_BYTE_MAX \ - ((UINT_16)(RF_AT_PARAM_TX_80211HDR_BYTE_MAX + RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX )) - -// Packet Count -#define RF_AT_PARAM_TX_PKTCNT_DEFAULT 1000 -#define RF_AT_PARAM_TX_PKTCNT_UNLIMITED 0 - -// Packet Interval -#define RF_AT_PARAM_TX_PKT_INTERVAL_US_DEFAULT 50 - -// ALC -#define RF_AT_PARAM_ALC_DISABLE 0 -#define RF_AT_PARAM_ALC_ENABLE 1 - -// TXOP -#define RF_AT_PARAM_TXOP_DEFAULT 0 -#define RF_AT_PARAM_TXOPQUE_QMASK BITS(16,31) -#define RF_AT_PARAM_TXOPQUE_TMASK BITS(0,15) -#define RF_AT_PARAM_TXOPQUE_AC0 (0<<16) -#define RF_AT_PARAM_TXOPQUE_AC1 (1<<16) -#define RF_AT_PARAM_TXOPQUE_AC2 (2<<16) -#define RF_AT_PARAM_TXOPQUE_AC3 (3<<16) -#define RF_AT_PARAM_TXOPQUE_AC4 (4<<16) -#define RF_AT_PARAM_TXOPQUE_QOFFSET 16 - -// Retry Limit -#define RF_AT_PARAM_TX_RETRY_DEFAULT 0 -#define RF_AT_PARAM_TX_RETRY_MAX 6 - -// QoS Queue -#define RF_AT_PARAM_QOSQUE_AC0 0 -#define RF_AT_PARAM_QOSQUE_AC1 1 -#define RF_AT_PARAM_QOSQUE_AC2 2 -#define RF_AT_PARAM_QOSQUE_AC3 3 -#define RF_AT_PARAM_QOSQUE_AC4 4 -#define RF_AT_PARAM_QOSQUE_DEFAULT RF_AT_PARAM_QOSQUE_AC0 - -// Bandwidth -#define RF_AT_PARAM_BANDWIDTH_20MHZ 0 -#define RF_AT_PARAM_BANDWIDTH_40MHZ 1 -#define RF_AT_PARAM_BANDWIDTH_U20_IN_40MHZ 2 -#define RF_AT_PARAM_BANDWIDTH_D20_IN_40MHZ 3 -#define RF_AT_PARAM_BANDWIDTH_DEFAULT RF_AT_PARAM_BANDWIDTH_20MHZ - -// GI (Guard Interval) -#define RF_AT_PARAM_GI_800NS 0 -#define RF_AT_PARAM_GI_400NS 1 -#define RF_AT_PARAM_GI_DEFAULT RF_AT_PARAM_GI_800NS - -// STBC -#define RF_AT_PARAM_STBC_DISABLE 0 -#define RF_AT_PARAM_STBC_ENABLE 1 - -// RIFS -#define RF_AT_PARAM_RIFS_DISABLE 0 -#define RF_AT_PARAM_RIFS_ENABLE 1 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -// Function ID List -typedef enum _ENUM_RF_AT_FUNCID_T { - RF_AT_FUNCID_VERSION = 0, - RF_AT_FUNCID_COMMAND, - RF_AT_FUNCID_POWER, - RF_AT_FUNCID_RATE, - RF_AT_FUNCID_PREAMBLE, - RF_AT_FUNCID_ANTENNA, - RF_AT_FUNCID_PKTLEN, - RF_AT_FUNCID_PKTCNT, - RF_AT_FUNCID_PKTINTERVAL, - RF_AT_FUNCID_TEMP_COMPEN, - RF_AT_FUNCID_TXOPLIMIT, - RF_AT_FUNCID_ACKPOLICY, - RF_AT_FUNCID_PKTCONTENT, - RF_AT_FUNCID_RETRYLIMIT, - RF_AT_FUNCID_QUEUE, - RF_AT_FUNCID_BANDWIDTH, - RF_AT_FUNCID_GI, - RF_AT_FUNCID_STBC, - RF_AT_FUNCID_CHNL_FREQ, - RF_AT_FUNCID_RIFS, - RF_AT_FUNCID_TRSW_TYPE, - RF_AT_FUNCID_RF_SX_SHUTDOWN, - RF_AT_FUNCID_PLL_SHUTDOWN, - RF_AT_FUNCID_SLOW_CLK_MODE, - RF_AT_FUNCID_ADC_CLK_MODE, - RF_AT_FUNCID_MEASURE_MODE, - RF_AT_FUNCID_VOLT_COMPEN, - RF_AT_FUNCID_DPD_TX_GAIN, - RF_AT_FUNCID_DPD_MODE, - RF_AT_FUNCID_TSSI_MODE, - RF_AT_FUNCID_TX_GAIN_CODE, - RF_AT_FUNCID_TX_PWR_MODE, - - /* Query command */ - RF_AT_FUNCID_TXED_COUNT = 32, - RF_AT_FUNCID_TXOK_COUNT, - RF_AT_FUNCID_RXOK_COUNT, - RF_AT_FUNCID_RXERROR_COUNT, - RF_AT_FUNCID_RESULT_INFO, - RF_AT_FUNCID_TRX_IQ_RESULT, - RF_AT_FUNCID_TSSI_RESULT, - RF_AT_FUNCID_DPD_RESULT, - RF_AT_FUNCID_RXV_DUMP, - RF_AT_FUNCID_RX_PHY_STATIS, - RF_AT_FUNCID_MEASURE_RESULT, - RF_AT_FUNCID_TEMP_SENSOR, - RF_AT_FUNCID_VOLT_SENSOR, - RF_AT_FUNCID_READ_EFUSE, - RF_AT_FUNCID_RX_RSSI, - RF_AT_FUNCID_FW_INFO, - RF_AT_FUNCID_DRV_INFO, - - /* Set command */ - RF_AT_FUNCID_SET_DPD_RESULT = 64, - RF_AT_FUNCID_SET_CW_MODE, - RF_AT_FUNCID_SET_JAPAN_CH14_FILTER, - RF_AT_FUNCID_WRITE_EFUSE, - RF_AT_FUNCID_SET_MAC_ADDRESS - -} ENUM_RF_AT_FUNCID_T; - -// Command -typedef enum _ENUM_RF_AT_COMMAND_T { - RF_AT_COMMAND_STOPTEST = 0, - RF_AT_COMMAND_STARTTX, - RF_AT_COMMAND_STARTRX, - RF_AT_COMMAND_RESET, - RF_AT_COMMAND_OUTPUT_POWER, /* Payload */ - RF_AT_COMMAND_LO_LEAKAGE, /* Local freq is renamed to Local leakage */ - RF_AT_COMMAND_CARRIER_SUPPR, /* OFDM (LTF/STF), CCK (PI,PI/2) */ - RF_AT_COMMAND_TRX_IQ_CAL, - RF_AT_COMMAND_TSSI_CAL, - RF_AT_COMMAND_DPD_CAL, - RF_AT_COMMAND_CW, - RF_AT_COMMAND_NUM -} ENUM_RF_AT_COMMAND_T; - -// Preamble -typedef enum _ENUM_RF_AT_PREAMBLE_T { - RF_AT_PREAMBLE_NORMAL = 0, - RF_AT_PREAMBLE_CCK_SHORT, - RF_AT_PREAMBLE_11N_MM, - RF_AT_PREAMBLE_11N_GF, - RF_AT_PREAMBLE_NUM -} ENUM_RF_AT_PREAMBLE_T; - -// Ack Policy -typedef enum _ENUM_RF_AT_ACK_POLICY_T { - RF_AT_ACK_POLICY_NORMAL = 0, - RF_AT_ACK_POLICY_NOACK, - RF_AT_ACK_POLICY_NOEXPLICTACK, - RF_AT_ACK_POLICY_BLOCKACK, - RF_AT_ACK_POLICY_NUM -} ENUM_RF_AT_ACK_POLICY_T; - -typedef enum _ENUM_RF_AUTOTEST_STATE_T { - RF_AUTOTEST_STATE_STANDBY = 0, - RF_AUTOTEST_STATE_TX, - RF_AUTOTEST_STATE_RX, - RF_AUTOTEST_STATE_RESET, - RF_AUTOTEST_STATE_OUTPUT_POWER, - RF_AUTOTEST_STATE_LOCA_FREQUENCY, - RF_AUTOTEST_STATE_CARRIER_SUPRRESION, - RF_AUTOTEST_STATE_NUM -} ENUM_RF_AUTOTEST_STATE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -rftestSetATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ); - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ); - -#endif /* _RFTEST_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/typedef.h deleted file mode 100755 index 5db05c055bb0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/typedef.h +++ /dev/null @@ -1,239 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/typedef.h#1 $ -*/ - -/*! \file typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to the GLUE Layer. -*/ - - - -/* -** $Log: typedef.h $ - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:41:37 GMT mtk01461 -** Update PACKET_INFO_INIT for TX Path -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:30:17 GMT mtk01461 -** Add parameter in PACKET_INFO_T for HIF Loopback -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:22 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:28 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:54 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _TYPEDEF_H -#define _TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* ieee80211.h of linux has duplicated definitions */ -#if defined(WLAN_STATUS_SUCCESS) -#undef WLAN_STATUS_SUCCESS -#endif - -#define WLAN_STATUS_SUCCESS ((WLAN_STATUS) 0x00000000L) -#define WLAN_STATUS_PENDING ((WLAN_STATUS) 0x00000103L) -#define WLAN_STATUS_NOT_ACCEPTED ((WLAN_STATUS) 0x00010003L) - -#define WLAN_STATUS_MEDIA_CONNECT ((WLAN_STATUS) 0x4001000BL) -#define WLAN_STATUS_MEDIA_DISCONNECT ((WLAN_STATUS) 0x4001000CL) -#define WLAN_STATUS_MEDIA_SPECIFIC_INDICATION ((WLAN_STATUS) 0x40010012L) - -#define WLAN_STATUS_SCAN_COMPLETE ((WLAN_STATUS) 0x60010001L) -#define WLAN_STATUS_MSDU_OK ((WLAN_STATUS) 0x60010002L) - -/* TODO(Kevin): double check if 0x60010001 & 0x60010002 is proprietary */ -#define WLAN_STATUS_ROAM_OUT_FIND_BEST ((WLAN_STATUS) 0x60010101L) -#define WLAN_STATUS_ROAM_DISCOVERY ((WLAN_STATUS) 0x60010102L) - -#define WLAN_STATUS_FAILURE ((WLAN_STATUS) 0xC0000001L) -#define WLAN_STATUS_RESOURCES ((WLAN_STATUS) 0xC000009AL) -#define WLAN_STATUS_NOT_SUPPORTED ((WLAN_STATUS) 0xC00000BBL) - -#define WLAN_STATUS_MULTICAST_FULL ((WLAN_STATUS) 0xC0010009L) -#define WLAN_STATUS_INVALID_PACKET ((WLAN_STATUS) 0xC001000FL) -#define WLAN_STATUS_ADAPTER_NOT_READY ((WLAN_STATUS) 0xC0010011L) -#define WLAN_STATUS_NOT_INDICATING ((WLAN_STATUS) 0xC0010013L) -#define WLAN_STATUS_INVALID_LENGTH ((WLAN_STATUS) 0xC0010014L) -#define WLAN_STATUS_INVALID_DATA ((WLAN_STATUS) 0xC0010015L) -#define WLAN_STATUS_BUFFER_TOO_SHORT ((WLAN_STATUS) 0xC0010016L) - -#define WLAN_STATUS_BWCS_UPDATE ((WLAN_STATUS) 0xC0010017L) - -#define WLAN_STATUS_CONNECT_INDICATION ((WLAN_STATUS) 0xC0010018L) - - -/* NIC status flags */ -#define ADAPTER_FLAG_HW_ERR 0x00400000 - -/* Type Length */ -#define TL_IPV4 0x0008 -#define TL_IPV6 0xDD86 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for GLUE_INFO structure */ -typedef struct _GLUE_INFO_T GLUE_INFO_T, *P_GLUE_INFO_T; - -/* Type definition for WLAN STATUS */ -typedef UINT_32 WLAN_STATUS, *P_WLAN_STATUS; - -/* Type definition for ADAPTER structure */ -typedef struct _ADAPTER_T ADAPTER_T, *P_ADAPTER_T; - -/* Type definition for MESSAGE HEADER structure */ -typedef struct _MSG_HDR_T MSG_HDR_T, *P_MSG_HDR_T; - -/* Type definition for Pointer to OS Native Packet */ -typedef void *P_NATIVE_PACKET; - -/* Type definition for STA_RECORD_T structure to handle the connectivity and packet reception - * for a particular STA. - */ -typedef struct _STA_RECORD_T STA_RECORD_T, *P_STA_RECORD_T, **PP_STA_RECORD_T; - -/* CMD_INFO_T is used by Glue Layer to send a cluster of Command(OID) information to - * the TX Path to reduce the parameters of a function call. - */ -typedef struct _CMD_INFO_T CMD_INFO_T, *P_CMD_INFO_T; - -/* Following typedef should be removed later, because Glue Layer should not - * be aware of following data type. - */ -typedef struct _SW_RFB_T SW_RFB_T, *P_SW_RFB_T, **PP_SW_RFB_T; - -typedef struct _MSDU_INFO_T MSDU_INFO_T, *P_MSDU_INFO_T; - -typedef struct _REG_ENTRY_T REG_ENTRY_T, *P_REG_ENTRY_T; - -/* IST handler definition */ -typedef VOID (*IST_EVENT_FUNCTION)(P_ADAPTER_T); - -/* Type definition for function pointer of timer handler */ -typedef VOID (*PFN_TIMER_CALLBACK)(IN P_GLUE_INFO_T); - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_bow.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_bow.h deleted file mode 100755 index a3c4d3849a05..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_bow.h +++ /dev/null @@ -1,547 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_bow.h#1 $ -*/ - -/*! \file "wlan_bow.h" - \brief This file contains the declairations of 802.11 PAL - command processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_bow.h $ - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -#ifndef _WLAN_BOW_H -#define _WLAN_BOW_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "nic/bow.h" -#include "nic/cmd_buf.h" - -#if CFG_ENABLE_BT_OVER_WIFI -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define BOWCMD_STATUS_SUCCESS 0 -#define BOWCMD_STATUS_FAILURE 1 -#define BOWCMD_STATUS_UNACCEPTED 2 -#define BOWCMD_STATUS_INVALID 3 -#define BOWCMD_STATUS_TIMEOUT 4 - -#define BOW_WILDCARD_SSID "AMP" -#define BOW_WILDCARD_SSID_LEN 3 -#define BOW_SSID_LEN 21 - - /* 0: query, 1: setup, 2: destroy */ -#define BOW_QUERY_CMD 0 -#define BOW_SETUP_CMD 1 -#define BOW_DESTROY_CMD 2 - -#define BOW_INITIATOR 0 -#define BOW_RESPONDER 1 - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -typedef struct _BOW_TABLE_T { - UINT_8 ucAcquireID; - BOOLEAN fgIsValid; - ENUM_BOW_DEVICE_STATE eState; - UINT_8 aucPeerAddress[6]; - //UINT_8 ucRole; - //UINT_8 ucChannelNum; - UINT_16 u2Reserved; -} BOW_TABLE_T, *P_BOW_TABLE_T; - -typedef WLAN_STATUS (*PFN_BOW_CMD_HANDLE)(P_ADAPTER_T, P_AMPC_COMMAND); - -typedef struct _BOW_CMD_T { - UINT_8 uCmdID; - PFN_BOW_CMD_HANDLE pfCmdHandle; -} BOW_CMD_T, *P_BOW_CMD_T; - -typedef struct _BOW_EVENT_ACTIVITY_REPORT_T { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_EVENT_ACTIVITY_REPORT_T, *P_BOW_EVENT_ACTIVITY_REPORT_T; - -/* -ucReason: 0: success - 1: general failure - 2: too much time (> 2/3 second totally) requested for scheduling. - Others: reserved. -*/ - -typedef struct _BOW_EVENT_SYNC_TSF_T { - UINT_64 u4TsfTime; - UINT_32 u4TsfSysTime; - UINT_32 u4ScoTime; - UINT_32 u4ScoSysTime; - } BOW_EVENT_SYNC_TSF_T, *P_BOW_EVENT_SYNC_TSF_T; - -typedef struct _BOW_ACTIVITY_REPORT_BODY_T { - UINT_32 u4StartTime; - UINT_32 u4Duration; - UINT_32 u4Periodicity; - } BOW_ACTIVITY_REPORT_BODY_T, *P_BOW_ACTIVITY_REPORT_BODY_T; - -typedef struct _BOW_ACTIVITY_REPORT_T { - UINT_8 aucPeerAddress[6]; - UINT_8 ucScheduleKnown; - UINT_8 ucNumReports; - BOW_ACTIVITY_REPORT_BODY_T arBowActivityReportBody[MAX_ACTIVITY_REPORT]; - } BOW_ACTIVITY_REPORT_T, *P_BOW_ACTIVITY_REPORT_T; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ); - - -/*--------------------------------------------------------------*/ -/* Command Dispatcher */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ); - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkConnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkDisconnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter); - -VOID -bowStarting ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -BOOLEAN -bowValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ); - -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -bowRunEventAAATxFail( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventAAAComplete( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -BOOLEAN -bowValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -bowValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ); - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ); - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ); - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ); - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_BOW_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_lib.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_lib.h deleted file mode 100755 index 5141726b1fec..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_lib.h +++ /dev/null @@ -1,1042 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_lib.h#1 $ -*/ - -/*! \file "wlan_lib.h" - \brief The declaration of the functions of the wlanAdpater objects - - Detail description. -*/ - - - -/* -** $Log: wlan_lib.h $ - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * eliminate win32 native data types. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * . - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add extra 64 adjustable parameters for CoEX scenario. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * 2) add 2 kal API for later integration - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * 4) nicRxWaitResponse() revised - * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:39:55 GMT mtk02752 -** eliminate unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:58:41 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-19 10:43:06 GMT mtk01461 -** Add wlanReleasePendingOid() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-13 16:38:44 GMT mtk01084 -** add WIFI start function -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-08 16:51:14 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:57:38 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:31:02 GMT mtk01461 -** Add declaration of FW Image download reference code -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:31 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:04 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_LIB_H -#define _WLAN_LIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "CFG_Wifi_File.h" -#include "rlm_domain.h" -#include "wlan_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define MAX_NUM_GROUP_ADDR 32 /* max number of group addresses */ - - - -#define TX_CS_TCP_UDP_GEN BIT(1) -#define TX_CS_IP_GEN BIT(0) - - -#define CSUM_OFFLOAD_EN_TX_TCP BIT(0) -#define CSUM_OFFLOAD_EN_TX_UDP BIT(1) -#define CSUM_OFFLOAD_EN_TX_IP BIT(2) -#define CSUM_OFFLOAD_EN_RX_TCP BIT(3) -#define CSUM_OFFLOAD_EN_RX_UDP BIT(4) -#define CSUM_OFFLOAD_EN_RX_IPv4 BIT(5) -#define CSUM_OFFLOAD_EN_RX_IPv6 BIT(6) -#define CSUM_OFFLOAD_EN_TX_MASK BITS(0,2) -#define CSUM_OFFLOAD_EN_ALL BITS(0,6) - -/* TCP, UDP, IP Checksum */ -#define RX_CS_TYPE_UDP BIT(7) -#define RX_CS_TYPE_TCP BIT(6) -#define RX_CS_TYPE_IPv6 BIT(5) -#define RX_CS_TYPE_IPv4 BIT(4) - -#define RX_CS_STATUS_UDP BIT(3) -#define RX_CS_STATUS_TCP BIT(2) -#define RX_CS_STATUS_IP BIT(0) - -#define CSUM_NOT_SUPPORTED 0x0 - -#define TXPWR_USE_PDSLOPE 0 - -/* NVRAM error code definitions */ -#define NVRAM_ERROR_VERSION_MISMATCH BIT(1) -#define NVRAM_ERROR_INVALID_TXPWR BIT(2) -#define NVRAM_ERROR_INVALID_DPD BIT(3) -#define NVRAM_ERROR_INVALID_MAC_ADDR BIT(4) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC) ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_CSUM_TYPE_T { - CSUM_TYPE_IPV4, - CSUM_TYPE_IPV6, - CSUM_TYPE_TCP, - CSUM_TYPE_UDP, - CSUM_TYPE_NUM -} ENUM_CSUM_TYPE_T, *P_ENUM_CSUM_TYPE_T; - -typedef enum _ENUM_CSUM_RESULT_T { - CSUM_RES_NONE, - CSUM_RES_SUCCESS, - CSUM_RES_FAILED, - CSUM_RES_NUM -} ENUM_CSUM_RESULT_T, *P_ENUM_CSUM_RESULT_T; - -typedef enum _ENUM_PHY_MODE_T { - ENUM_PHY_2G4_CCK, - ENUM_PHY_2G4_OFDM_BPSK, - ENUM_PHY_2G4_OFDM_QPSK, - ENUM_PHY_2G4_OFDM_16QAM, - ENUM_PHY_2G4_OFDM_48M, - ENUM_PHY_2G4_OFDM_54M, - ENUM_PHY_2G4_HT20_BPSK, - ENUM_PHY_2G4_HT20_QPSK, - ENUM_PHY_2G4_HT20_16QAM, - ENUM_PHY_2G4_HT20_MCS5, - ENUM_PHY_2G4_HT20_MCS6, - ENUM_PHY_2G4_HT20_MCS7, - ENUM_PHY_2G4_HT40_BPSK, - ENUM_PHY_2G4_HT40_QPSK, - ENUM_PHY_2G4_HT40_16QAM, - ENUM_PHY_2G4_HT40_MCS5, - ENUM_PHY_2G4_HT40_MCS6, - ENUM_PHY_2G4_HT40_MCS7, - ENUM_PHY_5G_OFDM_BPSK, - ENUM_PHY_5G_OFDM_QPSK, - ENUM_PHY_5G_OFDM_16QAM, - ENUM_PHY_5G_OFDM_48M, - ENUM_PHY_5G_OFDM_54M, - ENUM_PHY_5G_HT20_BPSK, - ENUM_PHY_5G_HT20_QPSK, - ENUM_PHY_5G_HT20_16QAM, - ENUM_PHY_5G_HT20_MCS5, - ENUM_PHY_5G_HT20_MCS6, - ENUM_PHY_5G_HT20_MCS7, - ENUM_PHY_5G_HT40_BPSK, - ENUM_PHY_5G_HT40_QPSK, - ENUM_PHY_5G_HT40_16QAM, - ENUM_PHY_5G_HT40_MCS5, - ENUM_PHY_5G_HT40_MCS6, - ENUM_PHY_5G_HT40_MCS7, - ENUM_PHY_MODE_NUM -} ENUM_PHY_MODE_T, *P_ENUM_PHY_MODE_T; - -typedef enum _ENUM_POWER_SAVE_POLL_MODE_T { - ENUM_POWER_SAVE_POLL_DISABLE, - ENUM_POWER_SAVE_POLL_LEGACY_NULL, - ENUM_POWER_SAVE_POLL_QOS_NULL, - ENUM_POWER_SAVE_POLL_NUM -} ENUM_POWER_SAVE_POLL_MODE_T, *P_ENUM_POWER_SAVE_POLL_MODE_T; - -typedef enum _ENUM_AC_TYPE_T { - ENUM_AC_TYPE_AC0, - ENUM_AC_TYPE_AC1, - ENUM_AC_TYPE_AC2, - ENUM_AC_TYPE_AC3, - ENUM_AC_TYPE_AC4, - ENUM_AC_TYPE_AC5, - ENUM_AC_TYPE_AC6, - ENUM_AC_TYPE_BMC, - ENUM_AC_TYPE_NUM -} ENUM_AC_TYPE_T, *P_ENUM_AC_TYPE_T; - -typedef enum _ENUM_ADV_AC_TYPE_T { - ENUM_ADV_AC_TYPE_RX_NSW, - ENUM_ADV_AC_TYPE_RX_PTA, - ENUM_ADV_AC_TYPE_RX_SP, - ENUM_ADV_AC_TYPE_TX_PTA, - ENUM_ADV_AC_TYPE_TX_RSP, - ENUM_ADV_AC_TYPE_NUM -} ENUM_ADV_AC_TYPE_T, *P_ENUM_ADV_AC_TYPE_T; - -typedef enum _ENUM_REG_CH_MAP_T { - REG_CH_MAP_COUNTRY_CODE, - REG_CH_MAP_TBL_IDX, - REG_CH_MAP_CUSTOMIZED, - REG_CH_MAP_NUM -} ENUM_REG_CH_MAP_T, *P_ENUM_REG_CH_MAP_T; - -typedef struct _SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} SET_TXPWR_CTRL_T, *P_SET_TXPWR_CTRL_T; - -/* For storing driver initialization value from glue layer */ -typedef struct _REG_INFO_T { - UINT_32 u4SdBlockSize; /* SDIO block size */ - UINT_32 u4SdBusWidth; /* SDIO bus width. 1 or 4 */ - UINT_32 u4SdClockRate; /* SDIO clock rate. (in unit of HZ) */ - UINT_32 u4StartAddress; /* Starting address of Wi-Fi Firmware */ - UINT_32 u4LoadAddress; /* Load address of Wi-Fi Firmware */ - UINT_16 aucFwImgFilename[65]; /* Firmware filename */ - UINT_16 aucFwImgFilenameE6[65]; /* Firmware filename for E6 */ - UINT_32 u4StartFreq; /* Start Frequency for Ad-Hoc network : in unit of KHz */ - UINT_32 u4AdhocMode; /* Default mode for Ad-Hoc network : ENUM_PARAM_AD_HOC_MODE_T */ - UINT_32 u4RddStartFreq; - UINT_32 u4RddStopFreq; - UINT_32 u4RddTestMode; - UINT_32 u4RddShutFreq; - UINT_32 u4RddDfs; - INT_32 i4HighRssiThreshold; - INT_32 i4MediumRssiThreshold; - INT_32 i4LowRssiThreshold; - INT_32 au4TxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4RxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4AdvPriorityTag[ENUM_ADV_AC_TYPE_NUM]; - UINT_32 u4FastPSPoll; - UINT_32 u4PTA; /* 0: disable, 1: enable */ - UINT_32 u4TXLimit; /* 0: disable, 1: enable */ - UINT_32 u4SilenceWindow; /* range: 100 - 625, unit: us */ - UINT_32 u4TXLimitThreshold; /* range: 250 - 1250, unit: us */ - UINT_32 u4PowerMode; - UINT_32 fgEnArpFilter; - UINT_32 u4PsCurrentMeasureEn; - UINT_32 u4UapsdAcBmp; - UINT_32 u4MaxSpLen; - UINT_32 fgDisOnlineScan; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 fgDisBcnLostDetection; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 u4FixedRate; /* 0: automatic, non-zero: fixed rate */ - UINT_32 u4ArSysParam0; - UINT_32 u4ArSysParam1; - UINT_32 u4ArSysParam2; - UINT_32 u4ArSysParam3; - UINT_32 fgDisRoaming; /* 0:enable roaming 1:disable */ - - // NVRAM - MP Data -START- - UINT_8 aucMacAddr[6]; - UINT_16 au2CountryCode[4]; /* Country code (in ISO 3166-1 expression, ex: "US", "TW") */ - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - ENUM_REG_CH_MAP_T eRegChannelListMap; - UINT_8 ucRegChannelListIndex; - DOMAIN_INFO_ENTRY rDomainInfo; - // NVRAM - MP Data -END- - - // NVRAM - Functional Data -START- - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - // NVRAM - Functional Data -END- - -} REG_INFO_T, *P_REG_INFO_T; - -/* for divided firmware loading */ -typedef struct _FWDL_SECTION_INFO_T -{ - UINT_32 u4Offset; - UINT_32 u4Reserved; - UINT_32 u4Length; - UINT_32 u4DestAddr; -} FWDL_SECTION_INFO_T, *P_FWDL_SECTION_INFO_T; - -typedef struct _FIRMWARE_DIVIDED_DOWNLOAD_T -{ - UINT_32 u4Signature; - UINT_32 u4CRC; /* CRC calculated without first 8 bytes included */ - UINT_32 u4NumOfEntries; - UINT_32 u4Reserved; - FWDL_SECTION_INFO_T arSection[]; -} FIRMWARE_DIVIDED_DOWNLOAD_T, *P_FIRMWARE_DIVIDED_DOWNLOAD_T; - -typedef struct _PARAM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_MCR_RW_STRUC_T, *P_PARAM_MCR_RW_STRUC_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define BUILD_SIGN(ch0, ch1, ch2, ch3) \ - ((UINT_32)(UINT_8)(ch0) | ((UINT_32)(UINT_8)(ch1) << 8) | \ - ((UINT_32)(UINT_8)(ch2) << 16) | ((UINT_32)(UINT_8)(ch3) << 24 )) - -#define MTK_WIFI_SIGNATURE BUILD_SIGN('M', 'T', 'K', 'W') - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanCardEjected( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ); - -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ); - -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ); - -VOID -wlanReleasePendingCMDbyNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ); - -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ); - -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ); - -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_SUPPORT_WAPI -BOOLEAN -wlanQueryWapiMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -wlanReturnRxPacket ( - IN PVOID pvAdapter, - IN PVOID pvPacket - ); - -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ); - -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ); - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - #endif - -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ); -#else -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ); -#endif - -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ); - -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len - ); - -#endif - -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ); - -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ); - -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ); - -/* Security Frame Handling */ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ); - -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ); - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanEnableATGO( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Address Retreive by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* NIC Capability Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* PD MCR Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ); -/*----------------------------------------------------------------------------*/ -/* Loading Manufacture Data */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media Stream Mode */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Timer Timeout Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* TX Pending Packets Handling (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ); - -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ); - - -/*----------------------------------------------------------------------------*/ -/* Low Power Acquire/Release (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Pending Packets Number Reporting (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* ACPI state inquiry (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ); -#endif - -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* get ECO version from Revision ID register (for Win32) */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* set preferred band configuration corresponding to network type */ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get currently operating channel information */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get BSS Descriptor information */ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -wlanGetTargetBssDescByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* check for system configuration to generate message on scan list */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ); - - -#endif /* _WLAN_LIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_oid.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_oid.h deleted file mode 100755 index ea28d126b9f1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_oid.h +++ /dev/null @@ -1,2061 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_oid.h#2 $ -*/ - -/*! \file "wlan_oid.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_oid.h $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * OID_802_11_RSSI, - * * * * OID_802_11_RSSI_TRIGGER, - * * * * OID_802_11_STATISTICS, - * * * * OID_802_11_DISASSOCIATE, - * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-08 11:38:11 GMT mtk02752 -** add declares for RF test related APIs -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-24 22:41:53 GMT mtk02752 -** remove u4SysTime, MSDN 10-second will be implemented in FW side -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 20:30:13 GMT mtk02752 -** add u4SysTime field in PARAM_BSSID_EX_T -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-12 19:48:35 GMT mtk02752 -** allow upper layer to set a packet filter with PROMISCUOUS mode -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:12 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_OID_H -#define _WLAN_OID_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define PARAM_MAX_LEN_SSID 32 - -#define PARAM_MAC_ADDR_LEN 6 - -#define ETHERNET_HEADER_SZ 14 -#define ETHERNET_MIN_PKT_SZ 60 -#define ETHERNET_MAX_PKT_SZ 1514 - -#define PARAM_MAX_LEN_RATES 8 -#define PARAM_MAX_LEN_RATES_EX 16 - -#define PARAM_AUTH_REQUEST_REAUTH 0x01 -#define PARAM_AUTH_REQUEST_KEYUPDATE 0x02 -#define PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 -#define PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E - -#define PARAM_EEPROM_READ_METHOD_READ 1 -#define PARAM_EEPROM_READ_METHOD_GETSIZE 0 - -#define PARAM_WHQL_RSSI_MAX_DBM (-10) -#define PARAM_WHQL_RSSI_MIN_DBM (-200) - -#define PARAM_DEVICE_WAKE_UP_ENABLE 0x00000001 -#define PARAM_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002 -#define PARAM_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004 - -#define PARAM_WAKE_UP_MAGIC_PACKET 0x00000001 -#define PARAM_WAKE_UP_PATTERN_MATCH 0x00000002 -#define PARAM_WAKE_UP_LINK_CHANGE 0x00000004 - - -/* Packet filter bit definitioin (UINT_32 bit-wise definition) */ -#define PARAM_PACKET_FILTER_DIRECTED 0x00000001 -#define PARAM_PACKET_FILTER_MULTICAST 0x00000002 -#define PARAM_PACKET_FILTER_ALL_MULTICAST 0x00000004 -#define PARAM_PACKET_FILTER_BROADCAST 0x00000008 -#define PARAM_PACKET_FILTER_PROMISCUOUS 0x00000020 -#define PARAM_PACKET_FILTER_ALL_LOCAL 0x00000080 -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#define PARAM_PACKET_FILTER_P2P_MASK 0xC0000000 -#define PARAM_PACKET_FILTER_PROBE_REQ 0x80000000 -#define PARAM_PACKET_FILTER_ACTION_FRAME 0x40000000 -#endif - -#if CFG_SLT_SUPPORT -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST | \ - PARAM_PACKET_FILTER_ALL_MULTICAST) -#else -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST) -#endif - -#define PARAM_MEM_DUMP_MAX_SIZE 2048 - -#define BT_PROFILE_PARAM_LEN 8 -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration which match to NDIS5.1 */ -/*----------------------------------------------------------------------------*/ -/* NDIS_802_11_AUTHENTICATION_MODE */ -typedef enum _ENUM_PARAM_AUTH_MODE_T -{ - AUTH_MODE_OPEN, /*!< Open system */ - AUTH_MODE_SHARED, /*!< Shared key */ - AUTH_MODE_AUTO_SWITCH, /*!< Either open system or shared key */ - AUTH_MODE_WPA, - AUTH_MODE_WPA_PSK, - AUTH_MODE_WPA_NONE, /*!< For Ad hoc */ - AUTH_MODE_WPA2, - AUTH_MODE_WPA2_PSK, - AUTH_MODE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_AUTH_MODE_T, *P_ENUM_PARAM_AUTH_MODE_T; - -/* NDIS_802_11_ENCRYPTION_STATUS *//* Encryption types */ -typedef enum _ENUM_WEP_STATUS_T -{ - ENUM_WEP_ENABLED, - ENUM_ENCRYPTION1_ENABLED = ENUM_WEP_ENABLED, - ENUM_WEP_DISABLED, - ENUM_ENCRYPTION_DISABLED = ENUM_WEP_DISABLED, - ENUM_WEP_KEY_ABSENT, - ENUM_ENCRYPTION1_KEY_ABSENT = ENUM_WEP_KEY_ABSENT, - ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION_NOT_SUPPORTED = ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION2_ENABLED, - ENUM_ENCRYPTION2_KEY_ABSENT, - ENUM_ENCRYPTION3_ENABLED, - ENUM_ENCRYPTION3_KEY_ABSENT -} ENUM_PARAM_ENCRYPTION_STATUS_T, *P_ENUM_PARAM_ENCRYPTION_STATUS_T; - - - -typedef UINT_8 PARAM_MAC_ADDRESS[PARAM_MAC_ADDR_LEN]; - -typedef UINT_32 PARAM_KEY_INDEX; -typedef UINT_64 PARAM_KEY_RSC; -typedef INT_32 PARAM_RSSI; - -typedef UINT_32 PARAM_FRAGMENTATION_THRESHOLD; -typedef UINT_32 PARAM_RTS_THRESHOLD; - -typedef UINT_8 PARAM_RATES[PARAM_MAX_LEN_RATES]; -typedef UINT_8 PARAM_RATES_EX[PARAM_MAX_LEN_RATES_EX]; - -typedef enum _ENUM_PARAM_PHY_TYPE_T { - PHY_TYPE_802_11ABG = 0, /*!< Can associated with 802.11abg AP, Scan dual band. */ - PHY_TYPE_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 802_11a BSSs. */ - PHY_TYPE_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 802_11ab BSSs. */ - PHY_TYPE_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 802_11bg BSSs. */ - PHY_TYPE_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 802_11ag BSSs. */ - PHY_TYPE_NUM // 5 -} ENUM_PARAM_PHY_TYPE_T, *P_ENUM_PARAM_PHY_TYPE_T; - -typedef enum _ENUM_PARAM_OP_MODE_T { - NET_TYPE_IBSS = 0, /*!< Try to merge/establish an AdHoc, do periodic SCAN for merging. */ - NET_TYPE_INFRA, /*!< Try to join an Infrastructure, do periodic SCAN for joining. */ - NET_TYPE_AUTO_SWITCH, /*!< Try to join an Infrastructure, if fail then try to merge or - establish an AdHoc, do periodic SCAN for joining or merging. */ - NET_TYPE_DEDICATED_IBSS, /*!< Try to merge an AdHoc first, if fail then establish AdHoc permanently, no more SCAN. */ - NET_TYPE_NUM // 4 -} ENUM_PARAM_OP_MODE_T, *P_ENUM_PARAM_OP_MODE_T; - -typedef struct _PARAM_SSID_T { - UINT_32 u4SsidLen; /*!< SSID length in bytes. Zero length is broadcast(any) SSID */ - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; -} PARAM_SSID_T, *P_PARAM_SSID_T; - -/* This is enum defined for user to select an AdHoc Mode */ -typedef enum _ENUM_PARAM_AD_HOC_MODE_T { - AD_HOC_MODE_11B = 0, /*!< Create 11b IBSS if we support 802.11abg/802.11bg. */ - AD_HOC_MODE_MIXED_11BG, /*!< Create 11bg mixed IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11G, /*!< Create 11g only IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11A, /*!< Create 11a only IBSS if we support 802.11abg. */ - AD_HOC_MODE_NUM // 4 -} ENUM_PARAM_AD_HOC_MODE_T, *P_ENUM_PARAM_AD_HOC_MODE_T; - - -typedef enum _ENUM_PARAM_MEDIA_STATE_T { - PARAM_MEDIA_STATE_CONNECTED, - PARAM_MEDIA_STATE_DISCONNECTED, - PARAM_MEDIA_STATE_TO_BE_INDICATED // for following MSDN re-association behavior -} ENUM_PARAM_MEDIA_STATE_T, *P_ENUM_PARAM_MEDIA_STATE_T; - - -typedef enum _ENUM_PARAM_NETWORK_TYPE_T { - PARAM_NETWORK_TYPE_FH, - PARAM_NETWORK_TYPE_DS, - PARAM_NETWORK_TYPE_OFDM5, - PARAM_NETWORK_TYPE_OFDM24, - PARAM_NETWORK_TYPE_AUTOMODE, - PARAM_NETWORK_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_NETWORK_TYPE_T, *P_ENUM_PARAM_NETWORK_TYPE_T; - - -typedef struct _PARAM_NETWORK_TYPE_LIST { - UINT_32 NumberOfItems; /*!< At least 1 */ - ENUM_PARAM_NETWORK_TYPE_T eNetworkType [1]; -} PARAM_NETWORK_TYPE_LIST, *PPARAM_NETWORK_TYPE_LIST; - -typedef enum _ENUM_PARAM_PRIVACY_FILTER_T -{ - PRIVACY_FILTER_ACCEPT_ALL, - PRIVACY_FILTER_8021xWEP, - PRIVACY_FILTER_NUM -} ENUM_PARAM_PRIVACY_FILTER_T, *P_ENUM_PARAM_PRIVACY_FILTER_T; - -typedef enum _ENUM_RELOAD_DEFAULTS -{ - ENUM_RELOAD_WEP_KEYS -} PARAM_RELOAD_DEFAULTS, *P_PARAM_RELOAD_DEFAULTS; - -typedef struct _PARAM_PM_PACKET_PATTERN -{ - UINT_32 Priority; // Importance of the given pattern. - UINT_32 Reserved; // Context information for transports. - UINT_32 MaskSize; // Size in bytes of the pattern mask. - UINT_32 PatternOffset; // Offset from beginning of this - // structure to the pattern bytes. - UINT_32 PatternSize; // Size in bytes of the pattern. - UINT_32 PatternFlags; // Flags (TBD). -} PARAM_PM_PACKET_PATTERN, *P_PARAM_PM_PACKET_PATTERN; - -/*--------------------------------------------------------------*/ -/*! \brief Struct definition to indicate specific event. */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_STATUS_TYPE_T -{ - ENUM_STATUS_TYPE_AUTHENTICATION, - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE, - ENUM_STATUS_TYPE_CANDIDATE_LIST, - ENUM_STATUS_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_STATUS_TYPE_T, *P_ENUM_STATUS_TYPE_T; - - -typedef struct _PARAM_802_11_CONFIG_FH_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4HopPattern; /*!< Defined as 802.11 */ - UINT_32 u4HopSet; /*!< to one if non-802.11 */ - UINT_32 u4DwellTime; /*!< In unit of Kusec */ -} PARAM_802_11_CONFIG_FH_T, *P_PARAM_802_11_CONFIG_FH_T; - -typedef struct _PARAM_802_11_CONFIG_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4BeaconPeriod; /*!< In unit of Kusec */ - UINT_32 u4ATIMWindow; /*!< In unit of Kusec */ - UINT_32 u4DSConfig; /*!< Channel frequency in unit of kHz */ - PARAM_802_11_CONFIG_FH_T rFHConfig; -} PARAM_802_11_CONFIG_T, *P_PARAM_802_11_CONFIG_T; - -typedef struct _PARAM_STATUS_INDICATION_T -{ - ENUM_STATUS_TYPE_T eStatusType; -} PARAM_STATUS_INDICATION_T, *P_PARAM_STATUS_INDICATION_T; - -typedef struct _PARAM_AUTH_REQUEST_T -{ - UINT_32 u4Length; /*!< Length of this struct */ - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4Flags; /*!< Definitions are as follows */ -} PARAM_AUTH_REQUEST_T, *P_PARAM_AUTH_REQUEST_T; - -typedef struct _PARAM_AUTH_EVENT_T -{ - PARAM_STATUS_INDICATION_T rStatus; - PARAM_AUTH_REQUEST_T arRequest[1]; -} PARAM_AUTH_EVENT_T, *P_PARAM_AUTH_EVENT_T; - -/*! \brief Capabilities, privacy, rssi and IEs of each BSSID */ -typedef struct _PARAM_BSSID_EX_T { - UINT_32 u4Length; /*!< Length of structure */ - PARAM_MAC_ADDRESS arMacAddress; /*!< BSSID */ - UINT_8 Reserved[2]; - PARAM_SSID_T rSsid; /*!< SSID */ - UINT_32 u4Privacy; /*!< Need WEP encryption */ - PARAM_RSSI rRssi; /*!< in dBm */ - ENUM_PARAM_NETWORK_TYPE_T eNetworkTypeInUse; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - PARAM_RATES_EX rSupportedRates; - UINT_32 u4IELength; - UINT_8 aucIEs[1]; -} PARAM_BSSID_EX_T, *P_PARAM_BSSID_EX_T; - -typedef struct _PARAM_BSSID_LIST_EX { - UINT_32 u4NumberOfItems; /*!< at least 1 */ - PARAM_BSSID_EX_T arBssid[1]; -} PARAM_BSSID_LIST_EX_T, *P_PARAM_BSSID_LIST_EX_T; - - -typedef struct _PARAM_WEP_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< 0: pairwise key, others group keys */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_WEP_T, *P_PARAM_WEP_T; - -/*! \brief Key mapping of BSSID */ -typedef struct _PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_KEY_T, *P_PARAM_KEY_T; - -typedef struct _PARAM_REMOVE_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ -} PARAM_REMOVE_KEY_T, *P_PARAM_REMOVE_KEY_T; - -#if CFG_SUPPORT_WAPI -typedef enum _ENUM_KEY_TYPE { - ENUM_WPI_PAIRWISE_KEY = 0, - ENUM_WPI_GROUP_KEY -} ENUM_KEY_TYPE; - -typedef enum _ENUM_WPI_PROTECT_TYPE -{ - ENUM_WPI_NONE, - ENUM_WPI_RX, - ENUM_WPI_TX, - ENUM_WPI_RX_TX -} ENUM_WPI_PROTECT_TYPE; - -typedef struct _PARAM_WPI_KEY_T { - ENUM_KEY_TYPE eKeyType; - ENUM_WPI_PROTECT_TYPE eDirection; - UINT_8 ucKeyID; - UINT_8 aucRsv[3]; - UINT_8 aucAddrIndex[12]; - UINT_32 u4LenWPIEK; - UINT_8 aucWPIEK[256]; - UINT_32 u4LenWPICK; - UINT_8 aucWPICK[256]; - UINT_8 aucPN[16]; -} PARAM_WPI_KEY_T, *P_PARAM_WPI_KEY_T; -#endif - - -typedef enum _PARAM_POWER_MODE -{ - Param_PowerModeCAM, - Param_PowerModeMAX_PSP, - Param_PowerModeFast_PSP, - Param_PowerModeMax /* Upper bound, not real case */ -} PARAM_POWER_MODE, *PPARAM_POWER_MODE; - -typedef enum _PARAM_DEVICE_POWER_STATE -{ - ParamDeviceStateUnspecified = 0, - ParamDeviceStateD0, - ParamDeviceStateD1, - ParamDeviceStateD2, - ParamDeviceStateD3, - ParamDeviceStateMaximum -} PARAM_DEVICE_POWER_STATE, *PPARAM_DEVICE_POWER_STATE; - -#if CFG_SUPPORT_802_11D - -/*! \brief The enumeration definitions for OID_IPN_MULTI_DOMAIN_CAPABILITY */ -typedef enum _PARAM_MULTI_DOMAIN_CAPABILITY { - ParamMultiDomainCapDisabled, - ParamMultiDomainCapEnabled -} PARAM_MULTI_DOMAIN_CAPABILITY, *P_PARAM_MULTI_DOMAIN_CAPABILITY; -#endif - -typedef struct _COUNTRY_STRING_ENTRY { - UINT_8 aucCountryCode[2]; - UINT_8 aucEnvironmentCode[2]; -} COUNTRY_STRING_ENTRY, *P_COUNTRY_STRING_ENTRY; - -/* Power management related definition and enumerations */ -#define UAPSD_NONE 0 -#define UAPSD_AC0 (BIT(0) | BIT(4)) -#define UAPSD_AC1 (BIT(1) | BIT(5)) -#define UAPSD_AC2 (BIT(2) | BIT(6)) -#define UAPSD_AC3 (BIT(3) | BIT(7)) -#define UAPSD_ALL (UAPSD_AC0 | UAPSD_AC1 | UAPSD_AC2 | UAPSD_AC3) - -typedef enum _ENUM_POWER_SAVE_PROFILE_T -{ - ENUM_PSP_CONTINUOUS_ACTIVE = 0, - ENUM_PSP_CONTINUOUS_POWER_SAVE, - ENUM_PSP_FAST_SWITCH, - ENUM_PSP_NUM -} ENUM_POWER_SAVE_PROFILE_T, *PENUM_POWER_SAVE_PROFILE_T; - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query testing type. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_802_11_TEST_T -{ - UINT_32 u4Length; - UINT_32 u4Type; - union - { - PARAM_AUTH_EVENT_T AuthenticationEvent; - PARAM_RSSI RssiTrigger; - } u; -} PARAM_802_11_TEST_T, *P_PARAM_802_11_TEST_T; - - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query authentication and encryption capability. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_AUTH_ENCRYPTION_T -{ - ENUM_PARAM_AUTH_MODE_T eAuthModeSupported; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncryptStatusSupported; -} PARAM_AUTH_ENCRYPTION_T, *P_PARAM_AUTH_ENCRYPTION_T; - -typedef struct _PARAM_CAPABILITY_T -{ - UINT_32 u4Length; - UINT_32 u4Version; - UINT_32 u4NoOfPMKIDs; - UINT_32 u4NoOfAuthEncryptPairsSupported; - PARAM_AUTH_ENCRYPTION_T arAuthenticationEncryptionSupported[1]; -} PARAM_CAPABILITY_T, *P_PARAM_CAPABILITY_T; - -typedef UINT_8 PARAM_PMKID_VALUE[16]; - -typedef struct _PARAM_BSSID_INFO_T -{ - PARAM_MAC_ADDRESS arBSSID; - PARAM_PMKID_VALUE arPMKID; -} PARAM_BSSID_INFO_T, *P_PARAM_BSSID_INFO_T; - -typedef struct _PARAM_PMKID_T -{ - UINT_32 u4Length; - UINT_32 u4BSSIDInfoCount; - PARAM_BSSID_INFO_T arBSSIDInfo[1]; -} PARAM_PMKID_T, *P_PARAM_PMKID_T; - -/*! \brief PMKID candidate lists. */ -typedef struct _PARAM_PMKID_CANDIDATE_T { - PARAM_MAC_ADDRESS arBSSID; - UINT_32 u4Flags; -} PARAM_PMKID_CANDIDATE_T, *P_PARAM_PMKID_CANDIDATE_T; - -//#ifdef LINUX -typedef struct _PARAM_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} PARAM_PMKID_CANDIDATE_LIST_T, *P_PARAM_PMKID_CANDIDATE_LIST_T; -//#endif - -typedef struct _PARAM_CUSTOM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_CUSTOM_MCR_RW_STRUC_T, *P_PARAM_CUSTOM_MCR_RW_STRUC_T; - -typedef struct _PARAM_CUSTOM_MEM_DUMP_STRUC_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} PARAM_CUSTOM_MEM_DUMP_STRUC_T, *P_PARAM_CUSTOM_MEM_DUMP_STRUC_T; - - -typedef struct _PARAM_CUSTOM_SW_CTRL_STRUC_T { - UINT_32 u4Id; - UINT_32 u4Data; -} PARAM_CUSTOM_SW_CTRL_STRUC_T, *P_PARAM_CUSTOM_SW_CTRL_STRUC_T; - - -typedef struct _PARAM_CUSTOM_EEPROM_RW_STRUC_T { - UINT_8 ucEepromMethod; /* For read only read: 1, query size: 0*/ - UINT_8 ucEepromIndex; - UINT_8 reserved; - UINT_16 u2EepromData; -} PARAM_CUSTOM_EEPROM_RW_STRUC_T, *P_PARAM_CUSTOM_EEPROM_RW_STRUC_T, - PARAM_CUSTOM_NVRAM_RW_STRUCT_T, *P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T; - -typedef struct _PARAM_CUSTOM_WMM_PS_TEST_STRUC_T { - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ - UINT_8 reserved; -} PARAM_CUSTOM_WMM_PS_TEST_STRUC_T, *P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T; - -typedef struct _PARAM_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} PARAM_CUSTOM_NOA_PARAM_STRUC_T, *P_PARAM_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} PARAM_CUSTOM_OPPPS_PARAM_STRUC_T, *P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} PARAM_CUSTOM_UAPSD_PARAM_STRUC_T, *P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_P2P_SET_STRUC_T { - UINT_32 u4Enable; - UINT_32 u4Mode; -} PARAM_CUSTOM_P2P_SET_STRUC_T, *P_PARAM_CUSTOM_P2P_SET_STRUC_T; - -typedef enum _ENUM_CFG_SRC_TYPE_T { - CFG_SRC_TYPE_EEPROM, - CFG_SRC_TYPE_NVRAM, - CFG_SRC_TYPE_UNKNOWN, - CFG_SRC_TYPE_NUM -} ENUM_CFG_SRC_TYPE_T, *P_ENUM_CFG_SRC_TYPE_T; - -typedef enum _ENUM_EEPROM_TYPE_T { - EEPROM_TYPE_NO, - EEPROM_TYPE_PRESENT, - EEPROM_TYPE_NUM -} ENUM_EEPROM_TYPE_T, *P_ENUM_EEPROM_TYPE_T; - -typedef struct _PARAM_QOS_TSINFO { - UINT_8 ucTrafficType; /* Traffic Type: 1 for isochronous 0 for asynchronous */ - UINT_8 ucTid; /* TSID: must be between 8 ~ 15 */ - UINT_8 ucDirection; /* direction */ - UINT_8 ucAccessPolicy; /* access policy */ - UINT_8 ucAggregation; /* aggregation */ - UINT_8 ucApsd; /* APSD */ - UINT_8 ucuserPriority; /* user priority */ - UINT_8 ucTsInfoAckPolicy; /* TSINFO ACK policy */ - UINT_8 ucSchedule; /* Schedule */ -} PARAM_QOS_TSINFO, *P_PARAM_QOS_TSINFO; - -typedef struct _PARAM_QOS_TSPEC { - PARAM_QOS_TSINFO rTsInfo; /* TS info field */ - UINT_16 u2NominalMSDUSize; /* nominal MSDU size */ - UINT_16 u2MaxMSDUsize; /* maximum MSDU size */ - UINT_32 u4MinSvcIntv; /* minimum service interval */ - UINT_32 u4MaxSvcIntv; /* maximum service interval */ - UINT_32 u4InactIntv; /* inactivity interval */ - UINT_32 u4SpsIntv; /* suspension interval */ - UINT_32 u4SvcStartTime; /* service start time */ - UINT_32 u4MinDataRate; /* minimum Data rate */ - UINT_32 u4MeanDataRate; /* mean data rate */ - UINT_32 u4PeakDataRate; /* peak data rate */ - UINT_32 u4MaxBurstSize; /* maximum burst size */ - UINT_32 u4DelayBound; /* delay bound */ - UINT_32 u4MinPHYRate; /* minimum PHY rate */ - UINT_16 u2Sba; /* surplus bandwidth allowance */ - UINT_16 u2MediumTime; /* medium time */ -} PARAM_QOS_TSPEC, *P_PARAM_QOS_TSPEC; - -typedef struct _PARAM_QOS_ADDTS_REQ_INFO { - PARAM_QOS_TSPEC rTspec; -} PARAM_QOS_ADDTS_REQ_INFO, *P_PARAM_QOS_ADDTS_REQ_INFO; - -typedef struct _PARAM_VOIP_CONFIG { - UINT_32 u4VoipTrafficInterval; /* 0: disable VOIP configuration */ -} PARAM_VOIP_CONFIG, *P_PARAM_VOIP_CONFIG; - -/*802.11 Statistics Struct*/ -typedef struct _PARAM_802_11_STATISTICS_STRUCT_T { - UINT_32 u4Length; // Length of structure - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; - LARGE_INTEGER rTKIPLocalMICFailures; - LARGE_INTEGER rTKIPICVErrors; - LARGE_INTEGER rTKIPCounterMeasuresInvoked; - LARGE_INTEGER rTKIPReplays; - LARGE_INTEGER rCCMPFormatErrors; - LARGE_INTEGER rCCMPReplays; - LARGE_INTEGER rCCMPDecryptErrors; - LARGE_INTEGER rFourWayHandshakeFailures; - LARGE_INTEGER rWEPUndecryptableCount; - LARGE_INTEGER rWEPICVErrorCount; - LARGE_INTEGER rDecryptSuccessCount; - LARGE_INTEGER rDecryptFailureCount; -} PARAM_802_11_STATISTICS_STRUCT_T, *P_PARAM_802_11_STATISTICS_STRUCT_T; - -/* Linux Network Device Statistics Struct */ -typedef struct _PARAM_LINUX_NETDEV_STATISTICS_T { - UINT_32 u4RxPackets; - UINT_32 u4TxPackets; - UINT_32 u4RxBytes; - UINT_32 u4TxBytes; - UINT_32 u4RxErrors; - UINT_32 u4TxErrors; - UINT_32 u4Multicast; -} PARAM_LINUX_NETDEV_STATISTICS_T, *P_PARAM_LINUX_NETDEV_STATISTICS_T; - - -typedef struct _PARAM_MTK_WIFI_TEST_STRUC_T { - UINT_32 u4FuncIndex; - UINT_32 u4FuncData; -} PARAM_MTK_WIFI_TEST_STRUC_T, *P_PARAM_MTK_WIFI_TEST_STRUC_T; - - -/* 802.11 Media stream constraints */ -typedef enum _ENUM_MEDIA_STREAM_MODE { - ENUM_MEDIA_STREAM_OFF, - ENUM_MEDIA_STREAM_ON -} ENUM_MEDIA_STREAM_MODE, *P_ENUM_MEDIA_STREAM_MODE; - -/* for NDIS 5.1 Media Streaming Change */ -typedef struct _PARAM_MEDIA_STREAMING_INDICATION { - PARAM_STATUS_INDICATION_T rStatus; - ENUM_MEDIA_STREAM_MODE eMediaStreamMode; -} PARAM_MEDIA_STREAMING_INDICATION, *P_PARAM_MEDIA_STREAMING_INDICATION; - - -#define PARAM_PROTOCOL_ID_DEFAULT 0x00 -#define PARAM_PROTOCOL_ID_TCP_IP 0x02 -#define PARAM_PROTOCOL_ID_IPX 0x06 -#define PARAM_PROTOCOL_ID_NBF 0x07 -#define PARAM_PROTOCOL_ID_MAX 0x0F -#define PARAM_PROTOCOL_ID_MASK 0x0F - -/* for NDIS OID_GEN_NETWORK_LAYER_ADDRESSES */ -typedef struct _PARAM_NETWORK_ADDRESS_IP -{ - UINT_16 sin_port; - UINT_32 in_addr; - UINT_8 sin_zero[8]; -} PARAM_NETWORK_ADDRESS_IP, *P_PARAM_NETWORK_ADDRESS_IP; - -typedef struct _PARAM_NETWORK_ADDRESS { - UINT_16 u2AddressLength; // length in bytes of Address[] in this - UINT_16 u2AddressType; // type of this address (PARAM_PROTOCOL_ID_XXX above) - UINT_8 aucAddress[1]; // actually AddressLength bytes long -} PARAM_NETWORK_ADDRESS, *P_PARAM_NETWORK_ADDRESS; - -// The following is used with OID_GEN_NETWORK_LAYER_ADDRESSES to set network layer addresses on an interface - -typedef struct _PARAM_NETWORK_ADDRESS_LIST -{ - UINT_32 u4AddressCount; // number of addresses following - UINT_16 u2AddressType; // type of this address (NDIS_PROTOCOL_ID_XXX above) - PARAM_NETWORK_ADDRESS arAddress[1]; // actually AddressCount elements long -} PARAM_NETWORK_ADDRESS_LIST, *P_PARAM_NETWORK_ADDRESS_LIST; - -#if CFG_SLT_SUPPORT - -#define FIXED_BW_LG20 0x0000 -#define FIXED_BW_UL20 0x2000 -#define FIXED_BW_DL40 0x3000 - -#define FIXED_EXT_CHNL_U20 0x4000 // For AGG register. -#define FIXED_EXT_CHNL_L20 0xC000 // For AGG regsiter. - -typedef enum _ENUM_MTK_LP_TEST_MODE_T { - ENUM_MTK_LP_TEST_NORMAL, - ENUM_MTK_LP_TEST_GOLDEN_SAMPLE, - ENUM_MTK_LP_TEST_DUT, - ENUM_MTK_LP_TEST_MODE_NUM -} ENUM_MTK_LP_TEST_MODE_T, *P_ENUM_MTK_LP_TEST_MODE_T; - -typedef enum _ENUM_MTK_SLT_FUNC_IDX_T { - ENUM_MTK_SLT_FUNC_DO_NOTHING, - ENUM_MTK_SLT_FUNC_INITIAL, - ENUM_MTK_SLT_FUNC_RATE_SET, - ENUM_MTK_SLT_FUNC_LP_SET, - ENUM_MTK_SLT_FUNC_NUM -} ENUM_MTK_SLT_FUNC_IDX_T, *P_ENUM_MTK_SLT_FUNC_IDX_T; - -typedef struct _PARAM_MTK_SLT_LP_TEST_STRUC_T { - ENUM_MTK_LP_TEST_MODE_T rLpTestMode; - UINT_32 u4BcnRcvNum; -} PARAM_MTK_SLT_LP_TEST_STRUC_T, *P_PARAM_MTK_SLT_LP_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TR_TEST_STRUC_T { - ENUM_PARAM_NETWORK_TYPE_T rNetworkType; // Network Type OFDM5G or OFDM2.4G - UINT_32 u4FixedRate; // Fixed Rate including BW -} PARAM_MTK_SLT_TR_TEST_STRUC_T, *P_PARAM_MTK_SLT_TR_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_INITIAL_STRUC_T { - UINT_8 aucTargetMacAddr[PARAM_MAC_ADDR_LEN]; - UINT_16 u2SiteID; -} PARAM_MTK_SLT_INITIAL_STRUC_T, *P_PARAM_MTK_SLT_INITIAL_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TEST_STRUC_T { - ENUM_MTK_SLT_FUNC_IDX_T rSltFuncIdx; - UINT_32 u4Length; /* Length of structure, - including myself */ - UINT_32 u4FuncInfoLen; /* Include following content - field and myself */ - union { - PARAM_MTK_SLT_INITIAL_STRUC_T rMtkInitTest; - PARAM_MTK_SLT_LP_TEST_STRUC_T rMtkLpTest; - PARAM_MTK_SLT_TR_TEST_STRUC_T rMtkTRTest; - } unFuncInfoContent; - -} PARAM_MTK_SLT_TEST_STRUC_T, *P_PARAM_MTK_SLT_TEST_STRUC_T; - -#endif - -/*--------------------------------------------------------------*/ -/*! \brief For Fixed Rate Configuration (Registry) */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_REGISTRY_FIXED_RATE_T { - FIXED_RATE_NONE, - FIXED_RATE_1M, - FIXED_RATE_2M, - FIXED_RATE_5_5M, - FIXED_RATE_11M, - FIXED_RATE_6M, - FIXED_RATE_9M, - FIXED_RATE_12M, - FIXED_RATE_18M, - FIXED_RATE_24M, - FIXED_RATE_36M, - FIXED_RATE_48M, - FIXED_RATE_54M, - FIXED_RATE_MCS0_20M_800NS, - FIXED_RATE_MCS1_20M_800NS, - FIXED_RATE_MCS2_20M_800NS, - FIXED_RATE_MCS3_20M_800NS, - FIXED_RATE_MCS4_20M_800NS, - FIXED_RATE_MCS5_20M_800NS, - FIXED_RATE_MCS6_20M_800NS, - FIXED_RATE_MCS7_20M_800NS, - FIXED_RATE_MCS0_20M_400NS, - FIXED_RATE_MCS1_20M_400NS, - FIXED_RATE_MCS2_20M_400NS, - FIXED_RATE_MCS3_20M_400NS, - FIXED_RATE_MCS4_20M_400NS, - FIXED_RATE_MCS5_20M_400NS, - FIXED_RATE_MCS6_20M_400NS, - FIXED_RATE_MCS7_20M_400NS, - FIXED_RATE_MCS0_40M_800NS, - FIXED_RATE_MCS1_40M_800NS, - FIXED_RATE_MCS2_40M_800NS, - FIXED_RATE_MCS3_40M_800NS, - FIXED_RATE_MCS4_40M_800NS, - FIXED_RATE_MCS5_40M_800NS, - FIXED_RATE_MCS6_40M_800NS, - FIXED_RATE_MCS7_40M_800NS, - FIXED_RATE_MCS32_800NS, - FIXED_RATE_MCS0_40M_400NS, - FIXED_RATE_MCS1_40M_400NS, - FIXED_RATE_MCS2_40M_400NS, - FIXED_RATE_MCS3_40M_400NS, - FIXED_RATE_MCS4_40M_400NS, - FIXED_RATE_MCS5_40M_400NS, - FIXED_RATE_MCS6_40M_400NS, - FIXED_RATE_MCS7_40M_400NS, - FIXED_RATE_MCS32_400NS, - FIXED_RATE_NUM -} ENUM_REGISTRY_FIXED_RATE_T, *P_ENUM_REGISTRY_FIXED_RATE_T; - -typedef enum _ENUM_BT_CMD_T { - BT_CMD_PROFILE = 0, - BT_CMD_UPDATE, - BT_CMD_NUM -} ENUM_BT_CMD_T; - -typedef enum _ENUM_BT_PROFILE_T { - BT_PROFILE_CUSTOM = 0, - BT_PROFILE_SCO, - BT_PROFILE_ACL, - BT_PROFILE_MIXED, - BT_PROFILE_NO_CONNECTION, - BT_PROFILE_NUM -} ENUM_BT_PROFILE_T; - -typedef struct _PTA_PROFILE_T { - ENUM_BT_PROFILE_T eBtProfile; - union { - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - /* 0: sco reserved slot time, - 1: sco idle slot time, - 2: acl throughput, - 3: bt tx power, - 4: bt rssi - 5: VoIP interval - 6: BIT(0) Use this field, BIT(1) 0 apply single/ 1 dual PTA setting. - */ - UINT_32 au4Btcr[4]; - } u; -} PTA_PROFILE_T, *P_PTA_PROFILE_T; - -typedef struct _PTA_IPC_T { - UINT_8 ucCmd; - UINT_8 ucLen; - union { - PTA_PROFILE_T rProfile; - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - } u; -} PARAM_PTA_IPC_T, *P_PARAM_PTA_IPC_T, PTA_IPC_T, *P_PTA_IPC_T; - -/*--------------------------------------------------------------*/ -/*! \brief CFG80211 Scan Request Container */ -/*--------------------------------------------------------------*/ - -typedef struct _PARAM_SCAN_REQUEST_EXT_T { - PARAM_SSID_T rSsid; - UINT_32 u4IELength; - PUINT_8 pucIE; -} PARAM_SCAN_REQUEST_EXT_T, *P_PARAM_SCAN_REQUEST_EXT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Routines to set parameters or query information. */ -/*--------------------------------------------------------------*/ -/***** Routines in wlan_oid.c *****/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryNetworkTypeInUse( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScan( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssidList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetSsid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySsid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryInfrastructureMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetInfrastructureMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAuthMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAuthMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if 0 -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAddWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetAddKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetReloadDefaults( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCapability( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssi( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssiTrigger( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRssiTrigger( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID prSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPmkid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetPmkid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySupportedRates( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestRxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestTxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryVendorId( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#ifdef LINUX - -WLAN_STATUS -wlanoidQueryStatisticsForLinux ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#endif - -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetCurrentPacketFilter( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen -); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -WLAN_STATUS -wlanoidSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/* RF Test related APIs */ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_WAPI -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_SUPPORT_WPS2 -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 u4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidUpdateSLTMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#endif - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/* -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -*/ - -#if CFG_ENABLE_WIFI_DIRECT -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_OID_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_p2p.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_p2p.h deleted file mode 100755 index f2380f6df626..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/include/wlan_p2p.h +++ /dev/null @@ -1,469 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/wlan_p2p.h#3 $ -*/ - -/*! \file "wlan_p2p.h" - \brief This file contains the declairations of Wi-Fi Direct command - processing routines for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_p2p.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * -** -*/ - -#ifndef _WLAN_P2P_H -#define _WLAN_P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* Service Discovery */ -typedef struct _PARAM_P2P_SEND_SD_RESPONSE { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucChannelNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_RESPONSE, *P_PARAM_P2P_SEND_SD_RESPONSE; - -typedef struct _PARAM_P2P_GET_SD_REQUEST { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST, *P_PARAM_P2P_GET_SD_REQUEST; - -typedef struct _PARAM_P2P_GET_SD_REQUEST_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucChannelNum; /* Channel Number Where SD Request is received. */ - UINT_8 ucSeqNum; /* Get SD Request by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST_EX, *P_PARAM_P2P_GET_SD_REQUEST_EX; - -typedef struct _PARAM_P2P_SEND_SD_REQUEST { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucVersionNum; /* Indicate the Service Discovery Supplicant Version. */ - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_REQUEST, *P_PARAM_P2P_SEND_SD_REQUEST; - -/* Service Discovery 1.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE, *P_PARAM_P2P_GET_SD_RESPONSE; - -/* Service Discovery 2.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucSeqNum; /* Get SD Response by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE_EX, *P_PARAM_P2P_GET_SD_RESPONSE_EX; - - -typedef struct _PARAM_P2P_TERMINATE_SD_PHASE { - PARAM_MAC_ADDRESS rPeerAddr; -} PARAM_P2P_TERMINATE_SD_PHASE, *P_PARAM_P2P_TERMINATE_SD_PHASE; - - -/*! \brief Key mapping of BSSID */ -typedef struct _P2P_PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} P2P_PARAM_KEY_T, *P_P2P_PARAM_KEY_T; - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_PRE_PARAMS { - UINT_16 idx_mode; - UINT_16 idx; - UINT_32 value; -} NL80211_DRIVER_TEST_PRE_PARAMS, *P_NL80211_DRIVER_TEST_PRE_PARAMS; - - -typedef struct _NL80211_DRIVER_TEST_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_PARAMS, *P_NL80211_DRIVER_TEST_PARAMS; - - -/* P2P Sigma*/ -typedef struct _NL80211_DRIVER_P2P_SIGMA_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_32 idx; - UINT_32 value; -}NL80211_DRIVER_P2P_SIGMA_PARAMS, *P_NL80211_DRIVER_P2P_SIGMA_PARAMS; - - -/* Hotspot Client Management */ -typedef struct _NL80211_DRIVER_hotspot_block_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_8 ucblocked; - UINT_8 aucBssid[MAC_ADDR_LEN]; -}NL80211_DRIVER_hotspot_block_PARAMS, *P_NL80211_DRIVER_hotspot_block_PARAMS; - - -#if CFG_SUPPORT_WFD -typedef struct _NL80211_DRIVER_WFD_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_32 WfdCmdType; - UINT_8 WfdEnable; - UINT_8 WfdCoupleSinkStatus; - UINT_8 WfdSessionAvailable; - UINT_8 WfdSigmaMode; - UINT_16 WfdDevInfo; - UINT_16 WfdControlPort; - UINT_16 WfdMaximumTp; - UINT_16 WfdExtendCap; - UINT_8 WfdCoupleSinkAddress[MAC_ADDR_LEN]; - UINT_8 WfdAssociatedBssid[MAC_ADDR_LEN]; - UINT_8 WfdVideoIp[4]; - UINT_8 WfdAudioIp[4]; - UINT_16 WfdVideoPort; - UINT_16 WfdAudioPort; - UINT_32 WfdFlag; - UINT_32 WfdPolicy; - UINT_32 WfdState; - UINT_8 WfdSessionInformationIE[24*8]; // Include Subelement ID, length - UINT_16 WfdSessionInformationIELen; - UINT_8 aucReserved1[2]; - UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN]; - UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN]; - UINT_32 WfdAdvanceFlag; - UINT_8 aucWfdLocalIp[4]; - UINT_8 aucReserved2[64]; - UINT_8 aucReserved3[64]; - UINT_8 aucReserved4[64]; -}NL80211_DRIVER_WFD_PARAMS, *P_NL80211_DRIVER_WFD_PARAMS; -#endif - - - -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/*--------------------------------------------------------------*/ -/* Service Discovery Subroutines */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 puQueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#if CFG_SUPPORT_ANTI_PIRACY -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pOpChannel( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pWPSmode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_P2P_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/aaa_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/aaa_fsm.c deleted file mode 100755 index e7a5b5cccbce..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/aaa_fsm.c +++ /dev/null @@ -1,1491 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/aaa_fsm.c#2 $ -*/ - -/*! \file "aaa_fsm.c" - \brief This file defines the FSM for AAA MODULE. - - This file defines the FSM for AAA MODULE. -*/ - - - -/* -** $Log: aaa_fsm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 22 2012 yuche.tsai - * NULL - * Solve sigma test 5.1.3 issue, assoc response should have P2P IE. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 02 2011 eddie.chen - * [WCXRP00000759] [MT6620 Wi-Fi][DRV] Update RCPI in AAA - * Update RCPI when receiving Assoc request. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 09 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * Skip to call p2pRunEventAAAComplete to avoid indicate STA connect twice. - * - * 03 04 2011 terry.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * Remove unused variable. - * - * 02 16 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Add more check after RX assoc frame under Hot-Spot mode. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 15 2011 puff.wen - * NULL - * [On behalf of Frog] Add CFG_ENABLE_WIFI_DIRECT to p2pRunEventAAAComplete - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Fix Compile warning, type cast from UINT_32 to UINT_16. - * - * 08 26 2010 yuche.tsai - * NULL - * In P2P AT GO test mode under WinXP, we would not indicate connected event to host. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 17 2010 yuche.tsai - * NULL - * Fix bug while enabling P2P GO. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * modify due to P2P functino call prototype change. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 02 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify CFG flags - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmSendEventJoinComplete ( - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ) -{ - P_MSG_SAA_JOIN_COMP_T prJoinCompMsg; - - - ASSERT(prStaRec); - - prJoinCompMsg = cnmMemAlloc(RAM_TYPE_TCM, sizeof(MSG_SAA_JOIN_COMP_T)); - if (!prJoinCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - if (IS_STA_IN_AIS(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - } - else if (IS_STA_IN_P2P(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - } - else if (IS_STA_IN_BOW(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - } - else { - ASSERT(0); - } - - prJoinCompMsg->rJoinStatus = rJoinStatus; - prJoinCompMsg->prStaRec = prStaRec; - prJoinCompMsg->prSwRfb = prSwRfb; - - mboxSendMsg(MBOX_ID_0, - (P_MSG_HDR_T)prJoinCompMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmSendEventJoinComplete() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to AAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventStart ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_JOIN_REQ_T prJoinReqMsg; - P_STA_RECORD_T prStaRec; - P_AIS_BSS_INFO_T prAisBssInfo; - - - ASSERT(prMsgHdr); - - prJoinReqMsg = (P_MSG_SAA_JOIN_REQ_T)prMsgHdr; - prStaRec = prJoinReqMsg->prStaRec; - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM\n")); - - cnmMemFree(prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec->eStaType)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(&prStaRec->rTxReqDoneOrRxRespTimer); - - prStaRec->ucStaState = STA_STATE_1; - - /* Trigger SAA MODULE */ - saaFsmSteps(prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ -#endif - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode; - BOOLEAN fgReplyAuth = FALSE; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - - ASSERT(prAdapter); - - do { - - - //4 <1> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <1.1> Validate Auth Frame by Auth Algorithm/Transation Seq - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <1.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = p2pFuncValidateAuth( - prAdapter, - prSwRfb, - &prStaRec, - &u2StatusCode); - } - else { - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <2> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)) { - - //4 <2.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <2.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = bowValidateAuth(prAdapter, prSwRfb, &prStaRec, &u2StatusCode); - - } - else { - - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return; - } while (FALSE); - - if(prStaRec) { - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - //4 <3> Update STA_RECORD_T and reply Auth_2(Response to Auth_1) Frame - if (fgReplyAuth) { - - if (prStaRec) { - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != IDLE.\n", - prStaRec->eAuthAssocState)); - } - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - } - else { - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - prStaRec->ucAuthAlgNum = AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - /* NOTE(Kevin): We should have STA_RECORD_T if the status code was successful */ - ASSERT(!(u2StatusCode == STATUS_CODE_SUCCESSFUL)); - } - - /* NOTE: Ignore the return status for AAA */ - //4 <4> Reply Auth - authSendAuthFrame(prAdapter, - prStaRec, - eNetTypeIndex, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - u2StatusCode); - - } - - return; -} /* end of aaaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode = STATUS_CODE_RESERVED; - BOOLEAN fgReplyAssocResp = FALSE; - - - ASSERT(prAdapter); - - do { - - //4 <1> Check if we have the STA_RECORD_T for incoming Assoc Req - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - //ASSERT(0); // Only for debug phase - return WLAN_STATUS_FAILURE; - break; - } - - if (!IS_CLIENT_STA(prStaRec)) { - break; - } - - if (prStaRec->ucStaState == STA_STATE_3) { - /* Do Reassocation */ - } - else if ((prStaRec->ucStaState == STA_STATE_2) && - (prStaRec->eAuthAssocState == AAA_STATE_SEND_AUTH2)) { - /* Normal case */ - } - else { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != SEND_AUTH2.\n", - prStaRec->eAuthAssocState)); - break; - } - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - //4 <2> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <2.1> Validate Assoc Req Frame and get Status Code - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <2.2> Validate Assoc Req Frame for Network Specific Conditions - fgReplyAssocResp = p2pFuncValidateAssocReq( - prAdapter, - prSwRfb, - (PUINT_16)&u2StatusCode); - } - else { - fgReplyAssocResp = TRUE; - } - - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <3> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)){ - - //4 <3.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <3.2> Validate Auth Frame for Network Specific Conditions - fgReplyAssocResp = bowValidateAssocReq(prAdapter, prSwRfb, &u2StatusCode); - - } - else { - - fgReplyAssocResp = TRUE; - } - - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return WLAN_STATUS_SUCCESS; // To release the SW_RFB_T - } while (FALSE); - - - //4 <4> Update STA_RECORD_T and reply Assoc Resp Frame - if (fgReplyAssocResp) { - UINT_16 u2IELength; - PUINT_8 pucIE; - - if ((((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->u2FrameCtrl & MASK_FRAME_TYPE) == - MAC_FRAME_REASSOC_REQ) { - - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - - rlmProcessAssocReq(prAdapter, prSwRfb, pucIE, u2IELength); - - //4 <4.1> Assign Association ID - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - if (p2pRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - //prStaRec->eAuthAssocState = AA_STATE_IDLE; - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if ((IS_STA_IN_BOW(prStaRec))) { - -// if (bowRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } -#if 0 - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif -#endif - } - else { - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - /* NOTE: Ignore the return status for AAA */ - //4 <4.2> Reply Assoc Resp - assocSendReAssocRespFrame(prAdapter, prStaRec); - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth2/AssocReq) Event of AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(AAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - switch (prStaRec->eAuthAssocState) { - case AAA_STATE_SEND_AUTH2: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_2) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - /* NOTE(Kevin): Change to STATE_2 at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - else { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - } - - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - - } - break; - - case AAA_STATE_SEND_ASSOC2: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocRespFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_3 at TX Done */ -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAASuccess(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - - if (IS_STA_IN_BOW(prStaRec)) - { - bowRunEventAAAComplete(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - else { - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Change to STATE_2 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventTxDone() */ -#endif /* CFG_SUPPORT_AAA */ - - -#if 0 /* TODO(Kevin): for abort event, just reset the STA_RECORD_T. */ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send ABORT Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventAbort"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: ABORT\n")); - - - /* NOTE(Kevin): when reach here, the ARB_STATE should be in ARB_STATE_JOIN. */ - ASSERT(prJoinInfo->prBssDesc); - - //4 <1> Update Flags and Elements of JOIN Module. - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel all JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rJoinTimer); - - //4 <2> Update the associated STA_RECORD_T during JOIN. - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - if (prStaRec) { - - /* Update Station Record - Class 1 Flag */ - prStaRec->ucStaState = STA_STATE_1; - } -#if DBG - else { - ASSERT(0); /* Shouldn't happened, because we already add this STA_RECORD_T at JOIN_STATE_INIT */ - } -#endif /* DBG */ - - //4 <3> Pull back to IDLE. - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - //4 <4> If we are in Roaming, recover the settings of previous BSS. - /* NOTE: JOIN FAIL - - * Restore original setting from current BSS_INFO_T. - */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - return; -} /* end of joinFsmRunEventAbort() */ -#endif - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/ais_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/ais_fsm.c deleted file mode 100755 index 2f18a6fff646..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/ais_fsm.c +++ /dev/null @@ -1,4705 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/ais_fsm.c#1 $ -*/ - -/*! \file "aa_fsm.c" - \brief This file defines the FSM for SAA and AAA MODULE. - - This file defines the FSM for SAA and AAA MODULE. -*/ - - - -/* -** $Log: ais_fsm.c $ -** -** 11 15 2012 cp.wu -** [ALPS00382763] N820_JB:[WIFI]N820JB WLAN ±K???,«ÝÉó?¬y¥\¯Ó¤j -** do not try reconnecting when being disconnected by the peer - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * correct reference to BSSID field in Association-Response frame. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 26 2011 tsaiyuan.hsu - * [WCXRP00001064] [MT6620 Wi-Fi][DRV]] add code with roaming awareness when disconnecting AIS network - * be aware roaming when disconnecting AIS network. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * STA_REC shall be NULL for Beacon's MSDU - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 08 2011 tsaiyuan.hsu - * [WCXRP00000972] [MT6620 Wi-Fi][DRV]] check if roaming occurs after join failure to avoid state incosistence. - * check if roaming occurs after join failure to avoid deactivation of network. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * EnableRoaming in registry is deprecated. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * use registry to enable or disable roaming. - * - * 07 07 2011 cp.wu - * [WCXRP00000840] [MT6620 Wi-Fi][Driver][AIS] Stop timer for joining when channel is released due to join failure count exceeding limit - * stop timer when joining operation is failed due to try count exceeds limitation - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not handle SCAN request immediately after connected to increase the probability of receiving 1st beacon frame. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * ensure DEAUTH is always sent before establish a new connection - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * typo fix: a right brace is missed. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * When RECONNECT request is identified as disconnected, it is necessary to check for pending scan request. - * - * 06 16 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * mark fgIsTransition as TRUE for state rolling. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always check for pending scan after switched into NORMAL_TR state. - * - * 06 14 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always treat connection request at higher priority over scanning request - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 18 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * change SCAN handling behavior when followed by a CONNECT/DISCONNECT requests by pending instead of dropping. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 13 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * remove assert - * - * 03 18 2011 cp.wu - * [WCXRP00000575] [MT6620 Wi-Fi][Driver][AIS] reduce memory usage when generating mailbox message for scan request - * when there is no IE needed for probe request, then request a smaller memory for mailbox message - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 03 09 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * avoid clearing fgIsScanReqIssued so as to add scan results. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * reset retry conter of attemp to connect to ap after completion of join. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 23 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * when handling reconnect request, set fgTryScan as TRUE - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 02 09 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * Check if prRegInfo is null or not before initializing roaming parameters. - * - * 02 01 2011 cp.wu - * [WCXRP00000416] [MT6620 Wi-Fi][Driver] treat "unable to find BSS" as connection trial to prevent infinite reconnection trials - * treat "unable to find BSS" as connection trial to prevent infinite reconnection trials. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 01 11 2011 cp.wu - * [WCXRP00000307] [MT6620 Wi-Fi][SQA]WHQL test .2c_wlan_adhoc case fail. - * [IBSS] when merged in, the bss state should be updated to firmware to pass WHQL adhoc failed item - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 03 2011 cp.wu - * [WCXRP00000337] [MT6620 Wi-FI][Driver] AIS-FSM not to invoke cnmStaRecResetStatus directly 'cause it frees all belonging STA-RECs - * do not invoke cnmStaRecResetStatus() directly, nicUpdateBss will do the things after bss is disconnected - * - * 12 30 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * do not need to manipulate prStaRec after indicating BSS disconnection to firmware, 'cause all STA-RECs belongs to BSS has been freed already - * - * 12 27 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * add DEBUGFUNC() macro invoking for more detailed debugging information - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 14 2010 wh.su - * [WCXRP00000097] [MT6620 Wi-Fi] [Driver] Fixed the P2P not setting the fgIsChannelExt value make scan not abort - * initial the fgIsChannelExt value. - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000049] [MT6620 Wi-Fi][Driver] Adhoc cannot be created successfully. - * keep IBSS-ALONE state retrying until further instruction is received - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 09 2010 yuche.tsai - * NULL - * Fix NULL IE Beacon issue. Sync Beacon Content to FW before enable beacon. - * Both in IBSS Create & IBSS Merge - * - * 09 09 2010 cp.wu - * NULL - * frequency is in unit of KHz thus no need to divide 1000 once more. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 12 2010 cp.wu - * NULL - * check-in missed files. - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 09 2010 cp.wu - * NULL - * reset fgIsScanReqIssued when abort request is received right after join completion. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 29 2010 cp.wu - * NULL - * allocate on MGMT packet for IBSS beaconing. - * - * 07 29 2010 cp.wu - * NULL - * [AIS-FSM] fix: when join failed, release channel privilege as well - * - * 07 28 2010 cp.wu - * NULL - * reuse join-abort sub-procedure to reduce code size. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 23 2010 cp.wu - * - * indicate scan done for linux wireless extension - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 cp.wu - * - * 1) init AIS_BSS_INFO as channel number = 1 with band = 2.4GHz - * 2) correct typo - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * for AIS scanning, driver specifies no extra IE for probe request - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 yarco.yang - * - * Remove CFG_MQM_MIGRATION - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * once STA-REC is allocated and updated, invoke cnmStaRecChangeState() to sync. with firmware. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 01 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add conditionial compiling flag to choose default available bandwidth - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile error if CFG_CMD_EVENT_VER_009 == 0 for prEventConnStatus->ucNetworkType. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 17 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Call pmAbort() and add ucNetworkType field in EVENT_CONNECTION_STATUS - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - define of MQM_WMM_PARSING was removed - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * Fix typo - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 07 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add TX Power Control RCPI function. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 25 2010 wh.su - * [BORA00000676][MT6620] Support the frequency setting and query at build connection / connection event - * modify the build connection and status event structure bu CMD_EVENT doc 0.09 draft, default is disable. - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 24 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Set / Unset POWER STATE in AIS Network - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add PHY_CONFIG to change Phy Type - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Use bcmWiFiNotify to replace wifi_send_msg to pass infomation to BCM module. - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Remove wmt_task definition and add PTA function. - * - * 03 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Init TXM and MQM testing procedures in aisFsmRunEventJoinComplete() - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Modified aisUpdateBssInfo() to call TXM's functions for setting WTBL TX parameters - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * clear the pmkid cache while indicate media disconnect. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * . - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Enabled MQM parsing WMM IEs for non-AP mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 23 2010 wh.su - * [BORA00000621][MT6620 Wi-Fi] Add the RSSI indicate to avoid XP stalled for query rssi value - * Adding the RSSI event support, using the HAL function to get the rcpi value and tranlsate to RSSI and indicate to driver - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Set max AMDPU size supported by the peer to 64 KB, removed mqmInit() and mqmTxSendAddBaReq() function calls in aisUpdateBssInfo() - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 15 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Configured the AMPDU factor to 3 for the APu1rwduu`wvpghlqg|q`mpdkb+ilp - * - * 01 14 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add WiFi BCM module for the 1st time. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Refine JOIN Complete and seperate the function of Media State indication - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sample code to update the wlan table rate, - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Different function prototype of wifi_send_msg() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlm related function to process HT info when join complete - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * default the acquired wlan table entry code off - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to acquired the wlan table entry, and a sample code to update the BA bit at table - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix the problem of prSwRfb overwrited by event packet in aisFsmRunEventJoinComplete() - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to integrate the security related code - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove redundant declaration - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add code for JOIN init and JOIN complete - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise ENUM_MEDIA_STATE to ENUM_PARAM_MEDIA_STATE - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add fgIsScanReqIssued to CONNECTION_SETTINGS_T - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise Virtual CMD handler due to structure changed - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM flag for aisFsmTest() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_ROAMING_CONNECTION_TRIAL_LIMIT 2 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAisState[AIS_STATE_NUM] = { - (PUINT_8)DISP_STRING("AIS_STATE_IDLE"), - (PUINT_8)DISP_STRING("AIS_STATE_SEARCH"), - (PUINT_8)DISP_STRING("AIS_STATE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_ONLINE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_LOOKING_FOR"), - (PUINT_8)DISP_STRING("AIS_STATE_WAIT_FOR_NEXT_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_REQ_CHANNEL_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_ALONE"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_MERGE"), - (PUINT_8)DISP_STRING("AIS_STATE_NORMAL_TR"), - (PUINT_8)DISP_STRING("AIS_STATE_DISCONNECTING") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value of the connection settings for -* AIS network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucAnyBSSID[] = BC_BSSID; - UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - int i = 0; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Setup default values for operation */ - COPY_MAC_ADDR(prConnSettings->aucMacAddress, aucZeroMacAddr); - - prConnSettings->ucDelayTimeOfDisconnectEvent = AIS_DELAY_TIME_OF_DISCONNECT_SEC; - - COPY_MAC_ADDR(prConnSettings->aucBSSID, aucAnyBSSID); - prConnSettings->fgIsConnByBssidIssued = FALSE; - - prConnSettings->fgIsConnReqIssued = FALSE; - prConnSettings->fgIsDisconnectedByNonRequest = FALSE; - - prConnSettings->ucSSIDLen = 0; - - prConnSettings->eOPMode = NET_TYPE_INFRA; - - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - - if(prRegInfo) { - prConnSettings->ucAdHocChannelNum = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4StartFreq); - prConnSettings->eAdHocBand = prRegInfo->u4StartFreq < 5000000 ? BAND_2G4 : BAND_5G; - prConnSettings->eAdHocMode = (ENUM_PARAM_AD_HOC_MODE_T) (prRegInfo->u4AdhocMode); - } - - prConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prConnSettings->eEncStatus = ENUM_ENCRYPTION_DISABLED; - - prConnSettings->fgIsScanReqIssued = FALSE; - - /* MIB attributes */ - prConnSettings->u2BeaconPeriod = DOT11_BEACON_PERIOD_DEFAULT; - - prConnSettings->u2RTSThreshold = DOT11_RTS_THRESHOLD_DEFAULT; - - prConnSettings->u2DesiredNonHTRateSet = RATE_SET_ALL_ABG; - - //prConnSettings->u4FreqInKHz; /* Center frequency */ - - - /* Set U-APSD AC */ - prConnSettings->bmfgApsdEnAc = PM_UAPSD_NONE; - - secInit(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Features */ - prConnSettings->fgIsEnableRoaming = FALSE; -#if CFG_SUPPORT_ROAMING - if(prRegInfo) { - prConnSettings->fgIsEnableRoaming = ((prRegInfo->fgDisRoaming > 0)?(FALSE):(TRUE)); - } -#endif /* CFG_SUPPORT_ROAMING */ - - prConnSettings->fgIsAdHocQoSEnable = FALSE; - - prConnSettings->eDesiredPhyConfig = PHY_CONFIG_802_11ABGN; - - /* Set default bandwidth modes */ - prConnSettings->uc2G4BandwidthMode = CONFIG_BW_20M; - prConnSettings->uc5GBandwidthMode = CONFIG_BW_20_40M; - - prConnSettings->rRsnInfo.ucElemId = 0x30; - prConnSettings->rRsnInfo.u2Version = 0x0001; - prConnSettings->rRsnInfo.u4GroupKeyCipherSuite = 0; - prConnSettings->rRsnInfo.u4PairwiseKeyCipherSuiteCount = 0; - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) - prConnSettings->rRsnInfo.au4PairwiseKeyCipherSuite[i] = 0; - prConnSettings->rRsnInfo.u4AuthKeyMgtSuiteCount = 0; - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) - prConnSettings->rRsnInfo.au4AuthKeyMgtSuite[i] = 0; - prConnSettings->rRsnInfo.u2RsnCap = 0; - prConnSettings->rRsnInfo.fgRsnCapPresent = FALSE; - - return; -} /* end of aisFsmInitializeConnectionSettings() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmInit()"); - DBGLOG(SW1, INFO, ("->aisFsmInit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Initiate FSM - prAisFsmInfo->ePreviousState = AIS_STATE_IDLE; - prAisFsmInfo->eCurrentState = AIS_STATE_IDLE; - - prAisFsmInfo->ucAvailableAuthTypes = 0; - - prAisFsmInfo->prTargetBssDesc = (P_BSS_DESC_T)NULL; - - prAisFsmInfo->ucSeqNumOfReqMsg = 0; - prAisFsmInfo->ucSeqNumOfChReq = 0; - prAisFsmInfo->ucSeqNumOfScanReq = 0; - - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - //4 <1.1> Initiate FSM - Timer INIT - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventBGSleepTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventIbssAloneTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisPostponedEventOfDisconnTimeout, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventJoinTimeout, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rScanDoneTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventScanDoneTimeOut, - (UINT_32)NULL); - - //4 <1.2> Initiate PWR STATE - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_AIS_INDEX); - COPY_MAC_ADDR(prAisBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prAisBssInfo->eBand = BAND_2G4; - prAisBssInfo->ucPrimaryChannel = 1; - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - //4 <4> Allocate MSDU_INFO_T for Beacon - prAisBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prAisBssInfo->prBeacon) { - prAisBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prAisBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - } - else { - ASSERT(0); - } - -#if 0 - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - if (prAdapter->u4UapsdAcBmp == 0) { - prAdapter->u4UapsdAcBmp = CFG_INIT_UAPSD_AC_BMP; - //ASSERT(prAdapter->u4UapsdAcBmp); - } - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - - /* request list initialization */ - LINK_INITIALIZE(&prAisFsmInfo->rPendingReqList); - - //DBGPRINTF("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - //prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - //prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - //prAisBssInfo->rPmProfSetupInfo.ucUapsdSp); - - return; -} /* end of aisFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to uninitialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmUninit()"); - DBGLOG(SW1, INFO, ("->aisFsmUninit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Stop all timers - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rScanDoneTimer); //Add by Enlai - - //4 <2> flush pending request - aisFsmFlushRequest(prAdapter); - - //4 <3> Reset driver-domain BSS-INFO - if(prAisBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prAisBssInfo->prBeacon); - prAisBssInfo->prBeacon = NULL; - } - -#if CFG_SUPPORT_802_11W - rsnStopSaQuery(prAdapter); -#endif - - return; -} /* end of aisFsmUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_JOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - ASSERT(prBssDesc); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_LEGACY_AP, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - prStaRec->fgIsReAssoc = FALSE; - - switch (prConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - - - case AUTH_MODE_SHARED: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(AIS, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - - default: - ASSERT(!(prConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(AIS, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - - /* TODO(tyhsu): Assume that Roaming Auth Type is equal to ConnSettings eAuthMode */ - prAisSpecificBssInfo->ucRoamingAuthTypes = prAisFsmInfo->ucAvailableAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - } - else { - ASSERT(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE); - ASSERT(!prBssDesc->fgIsConnected); - - DBGLOG(AIS, LOUD, ("JOIN INIT: AUTH TYPE = %d for Roaming\n", - prAisSpecificBssInfo->ucRoamingAuthTypes)); - - - prStaRec->fgIsReAssoc = TRUE; /* We do roaming while the medium is connected */ - - /* TODO(Kevin): We may call a sub function to acquire the Roaming Auth Type */ - prAisFsmInfo->ucAvailableAuthTypes = prAisSpecificBssInfo->ucRoamingAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING; - } - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prConnSettings->eConnectionPolicy == CONNECT_BY_SSID_ANY) { - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - if (1) { - int j; - P_FRAG_INFO_T prFragInfo; - for (j = 0; j < MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS; j++) { - prFragInfo = &prStaRec->rFragInfo[j]; - - if (prFragInfo->pr1stFrag) { - //nicRxReturnRFB(prAdapter, prFragInfo->pr1stFrag); - prFragInfo->pr1stFrag = (P_SW_RFB_T)NULL; - } - } - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} /* end of aisFsmInit_JOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_RetryJOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Retry other AuthType if possible */ - if (!prAisFsmInfo->ucAvailableAuthTypes) { - return FALSE; - } - - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(AIS, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - } - - prAisFsmInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return FALSE; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return TRUE; - -}/* end of aisFsmRetryJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_ALONE -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Check if IBSS was created before ? - if (prAisBssInfo->fgIsBeaconActivated) { - - //4 <2> Start IBSS Alone Timer for periodic SCAN and then SEARCH -#if !CFG_SLT_SUPPORT - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); -#endif - } - - aisFsmCreateIBSS(prAdapter); - - return; -} /* end of aisFsmStateInit_IBSS_ALONE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_MERGE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the IBSS we will try to merge with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - - ASSERT(prBssDesc); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prStaRec->fgIsMerging = TRUE; - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> IBSS-Merge - aisFsmMergeIBSS(prAdapter, prStaRec); - - return; -} /* end of aisFsmStateInit_IBSS_MERGE() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_ABORT_T prJoinAbortMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* 1. Abort JOIN process */ - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - - ASSERT(0); // Can't abort SAA FSM - return; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_CONNECT_INDICATION, - NULL, - 0); - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prAisFsmInfo->prTargetStaRec; - - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisFsmInfo->prTargetStaRec->aucMacAddr); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - /* 2. Return channel privilege */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - return; -} /* end of aisFsmAbortJOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of SCAN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - - ASSERT(0); // Can't abort SCN FSM - return; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfScanReq; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - prScanCancelMsg->fgIsChannelExt = FALSE; - } -#endif - - /* unbuffered message to guarantee scan is cancelled in sequence */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_UNBUF); - - return; -} /* end of aisFsmAbortSCAN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* TODO(Kevin): Do abort other MGMT func */ - - /* 1. Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* 2.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 2.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - return; -} /* end of aisFsmAbortNORMAL_TR() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_DESC_T prBssDesc; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // reset BSS-DESC - if (prAisFsmInfo->prTargetStaRec) { - prBssDesc = scanSearchBssDescByTA(prAdapter, - prAisFsmInfo->prTargetStaRec->aucMacAddr); - - if (prBssDesc) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - } - } - - // release channel privilege - aisFsmReleaseCh(prAdapter); - - return; -} -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of AIS(Ad-hoc, Infra STA) -* -* @param[in] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - P_MSG_CH_REQ_T prMsgChReq; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_AIS_REQ_HDR_T prAisReq; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - UINT_16 u2ScanIELen; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("aisFsmSteps()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - - /* Do entering Next State */ - prAisFsmInfo->ePreviousState = prAisFsmInfo->eCurrentState; - -#if DBG - DBGLOG(AIS, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAisState[prAisFsmInfo->eCurrentState], - apucDebugAisState[eNextState])); -#else - DBGLOG(AIS, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prAisFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prAisFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case AIS_STATE_IDLE: - - prAisReq = aisFsmGetNextRequest(prAdapter); - - if(prAisReq == NULL || prAisReq->eReqType == AIS_REQUEST_RECONNECT) { - if (prConnSettings->fgIsConnReqIssued == TRUE && - prConnSettings->fgIsDisconnectedByNonRequest == FALSE) { - - prAisFsmInfo->fgTryScan = TRUE; - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // reset trial count - prAisFsmInfo->ucConnTrialCount = 0; - - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - else { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // check for other pending request - if(prAisReq) { - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_SCAN; - - fgIsTransition = TRUE; - } - } - } - - if(prAisReq) { - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - } - else if(prAisReq->eReqType == AIS_REQUEST_SCAN) { -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - wlanClearScanningResult(prAdapter); - - eNextState = AIS_STATE_SCAN; - fgIsTransition = TRUE; - - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - else if(prAisReq->eReqType == AIS_REQUEST_ROAMING_CONNECT || prAisReq->eReqType == AIS_REQUEST_ROAMING_SEARCH) { - /* ignore */ - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - - prAisFsmInfo->u4SleepInterval = AIS_BG_SCAN_INTERVAL_MIN_SEC; - - break; - - case AIS_STATE_SEARCH: - //4 <1> Search for a matched candidate and save it to prTargetBssDesc. -#if CFG_SLT_SUPPORT - prBssDesc = prAdapter->rWifiVar.rSltInfo.prPseudoBssDesc; -#else - prBssDesc = scanSearchBssDescByPolicy(prAdapter, NETWORK_TYPE_AIS_INDEX); -#endif - - // we are under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(prAisFsmInfo->ucConnTrialCount > AIS_ROAMING_CONNECTION_TRIAL_LIMIT) { -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_CONNLIMIT); -#endif /* CFG_SUPPORT_ROAMING */ - // reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // abort connection trial - prConnSettings->fgIsConnReqIssued = FALSE; - - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - - break; - } - } - - //4 <2> We are not under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - //4 <2.a> If we have the matched one - if (prBssDesc) { - - //4 Stored the Selected BSS security cipher. For later asoc req compose IE - prAisBssInfo->u4RsnSelectedGroupCipher = - prBssDesc->u4RsnSelectedGroupCipher; - prAisBssInfo->u4RsnSelectedPairwiseCipher = - prBssDesc->u4RsnSelectedPairwiseCipher; - prAisBssInfo->u4RsnSelectedAKMSuite = - prBssDesc->u4RsnSelectedAKMSuite; - - //4 Do STATE transition and update current Operation Mode. - if (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - - // increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - } -#if CFG_SUPPORT_ADHOC - else if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - eNextState = AIS_STATE_IBSS_MERGE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - //4 <2.b> If we don't have the matched one - else { - - // increase connection trial count for infrastructure connection - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - prAisFsmInfo->ucConnTrialCount++; - } - - //4 Try to SCAN - if (prAisFsmInfo->fgTryScan) { - eNextState = AIS_STATE_LOOKING_FOR; - - fgIsTransition = TRUE; - } - //4 We've do SCAN already, now wait in some STATE. - else { - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - - /* issue reconnect request, and retreat to idle state for scheduling */ - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - eNextState = AIS_STATE_IDLE; - fgIsTransition = TRUE; - } -#if CFG_SUPPORT_ADHOC - else if ((prConnSettings->eOPMode == NET_TYPE_IBSS) - || (prConnSettings->eOPMode == NET_TYPE_AUTO_SWITCH) - || (prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS)) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - prAisFsmInfo->prTargetBssDesc = NULL; - - eNextState = AIS_STATE_IBSS_ALONE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - } - } - //4 <3> We are under Roaming Condition. - else { // prAdapter->eConnectionState == MEDIA_STATE_CONNECTED. - - //4 <3.a> This BSS_DESC_T is our AP. - /* NOTE(Kevin 2008/05/16): Following cases will go back to NORMAL_TR. - * CASE I: During Roaming, APP(WZC/NDISTEST) change the connection - * settings. That make we can NOT match the original AP, so the - * prBssDesc is NULL. - * CASE II: The same reason as CASE I. Because APP change the - * eOPMode to other network type in connection setting - * (e.g. NET_TYPE_IBSS), so the BssDesc become the IBSS node. - * (For CASE I/II, before WZC/NDISTEST set the OID_SSID, it will change - * other parameters in connection setting first. So if we do roaming - * at the same time, it will hit these cases.) - * - * CASE III: Normal case, we can't find other candidate to roam - * out, so only the current AP will be matched. - * - * CASE VI: Timestamp of the current AP might be reset - */ - if ((!prBssDesc) || /* CASE I */ - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) || /* CASE II */ - (prBssDesc->fgIsConnected) || /* CASE III */ - (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)) /* CASE VI */) { -#if DBG - if ((prBssDesc) && - (prBssDesc->fgIsConnected)) { - ASSERT(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); - } -#endif /* DBG */ - /* We already associated with it, go back to NORMAL_TR */ - /* TODO(Kevin): Roaming Fail */ -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_NOCANDIDATE); -#endif /* CFG_SUPPORT_ROAMING */ - - /* Retreat to NORMAL_TR state */ - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - } - //4 <3.b> Try to roam out for JOIN this BSS_DESC_T. - else { -#if DBG - ASSERT(UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); -#endif /* DBG */ - - //4 Record the target BSS_DESC_T for next STATE. - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - // tyhsu: increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - - DBGLOG(AIS, LOUD, ("SCAN: Idle Begin - Current Time = %ld\n", kalGetTimeTick())); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - SEC_TO_MSEC(prAisFsmInfo->u4SleepInterval)); - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (prAisFsmInfo->u4SleepInterval < AIS_BG_SCAN_INTERVAL_MAX_SEC) { - prAisFsmInfo->u4SleepInterval <<= 1; - } - break; - - case AIS_STATE_SCAN: - case AIS_STATE_ONLINE_SCAN: - case AIS_STATE_LOOKING_FOR: - - if(!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) { - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - - /* IE length decision */ - if(prAisFsmInfo->u4ScanIELength > 0) { - u2ScanIELen = (UINT_16)prAisFsmInfo->u4ScanIELength; - } - else { -#if CFG_SUPPORT_WPS2 - u2ScanIELen = prAdapter->prGlueInfo->u2WSCIELen; -#else - u2ScanIELen = 0; -#endif - } - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - OFFSET_OF(MSG_SCN_SCAN_REQ, aucIE) + u2ScanIELen); - if (!prScanReqMsg) { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prScanReqMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - -#if CFG_SUPPORT_RDD_TEST_MODE - prScanReqMsg->eScanType = SCAN_TYPE_PASSIVE_SCAN; -#else - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; -#endif - - if(prAisFsmInfo->eCurrentState == AIS_STATE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - if(prAisFsmInfo->ucScanSSIDLen == 0) { - /* Scan for all available SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - } - else { - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen); - } - } - else { - /* Scan for determined SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - } - - /* check if tethering is running and need to fix on specific channel */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->ucChannelListNum = 1; - prScanReqMsg->arChnlInfoList[0].eBand - = eBand;; - prScanReqMsg->arChnlInfoList[0].ucChannelNum - = ucChannel; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_NULL) { - if(prAdapter->fgEnable5GBand == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_2G4) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_5G) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - ASSERT(0); - } - - if(prAisFsmInfo->u4ScanIELength > 0) { - kalMemCopy(prScanReqMsg->aucIE, prAisFsmInfo->aucScanIEBuf, prAisFsmInfo->u4ScanIELength); - } - else { -#if CFG_SUPPORT_WPS2 - if(prAdapter->prGlueInfo->u2WSCIELen > 0) { - kalMemCopy(prScanReqMsg->aucIE, &prAdapter->prGlueInfo->aucWSCIE, prAdapter->prGlueInfo->u2WSCIELen); - } - } -#endif - - prScanReqMsg->u2IELen = u2ScanIELen; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChReq->ucTokenID = ++prAisFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prMsgChReq->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = prAisFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prAisFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prAisFsmInfo->prTargetBssDesc->aucBSSID); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgIsChannelRequested = TRUE; - break; - - case AIS_STATE_JOIN: - aisFsmStateInit_JOIN(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - aisFsmStateInit_IBSS_ALONE(prAdapter); - break; - - case AIS_STATE_IBSS_MERGE: - aisFsmStateInit_IBSS_MERGE(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_NORMAL_TR: - if(prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - /* Don't do anything when rJoinTimeoutTimer is still ticking */ - } - else { - /* 1. Process for pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - fgIsTransition = TRUE; - } - /* 2. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE) == TRUE) { - eNextState = AIS_STATE_LOOKING_FOR; - fgIsTransition = TRUE; - } - /* 3. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE) == TRUE) { - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_DISCONNECTING: - /* send for deauth frame for disconnection */ - authSendDeauthFrame(prAdapter, - prAisBssInfo->prStaRecOfAP, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - aisDeauthXmitComplete); - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - - } - } - while (fgIsTransition); - - return; - -} /* end of aisFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("aisFsmRunEventScanDone()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - DBGLOG(AIS, LOUD, ("EVENT-SCAN DONE: Current Time = %ld\n", kalGetTimeTick())); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - ASSERT(prScanDoneMsg->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - cnmMemFree(prAdapter, prMsgHdr); - - eNextState = prAisFsmInfo->eCurrentState; - - if (ucSeqNumOfCompMsg != prAisFsmInfo->ucSeqNumOfScanReq) { - DBGLOG(AIS, WARN, ("SEQ NO of AIS SCN DONE MSG is not matched.\n")); - } - else { - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); - eNextState = AIS_STATE_IDLE; - - break; - - case AIS_STATE_ONLINE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_NORMAL_TR; -#endif /* CFG_SUPPORT_ROAMING */ - - break; - - case AIS_STATE_LOOKING_FOR: -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_SEARCH; -#endif /* CFG_SUPPORT_ROAMING */ - break; - - default: - break; - - } - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventScanDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("aisFsmRunEventAbort()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Extract information of Abort Message and then free memory. - prAisAbortMsg = (P_MSG_AIS_ABORT_T)prMsgHdr; - ucReasonOfDisconnect = prAisAbortMsg->ucReasonOfDisconnect; - fgDelayIndication = prAisAbortMsg->fgDelayIndication; - - cnmMemFree(prAdapter, prMsgHdr); - -#if DBG - DBGLOG(AIS, LOUD, ("EVENT-ABORT: Current State %s\n", - apucDebugAisState[prAisFsmInfo->eCurrentState])); -#else - DBGLOG(AIS, LOUD, ("[%d] EVENT-ABORT: Current State [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState)); -#endif - - //4 <2> clear previous pending connection request and insert new one - if(ucReasonOfDisconnect == DISCONNECT_REASON_CODE_DEAUTHENTICATED - || ucReasonOfDisconnect == DISCONNECT_REASON_CODE_DISASSOCIATED) { - prConnSettings->fgIsDisconnectedByNonRequest = TRUE; - } - else { - prConnSettings->fgIsDisconnectedByNonRequest = FALSE; - } - - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - if(prAisFsmInfo->eCurrentState != AIS_STATE_DISCONNECTING) { - //4 <3> invoke abort handler - aisFsmStateAbort(prAdapter, ucReasonOfDisconnect, fgDelayIndication); - } - - return; -} /* end of aisFsmRunEventAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handles AIS-FSM abort event/command -* -* \param[in] prAdapter Pointer of ADAPTER_T -* ucReasonOfDisconnect Reason for disonnection -* fgDelayIndication Option to delay disconnection indication -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - BOOLEAN fgIsCheckConnected; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - fgIsCheckConnected = FALSE; - - //4 <1> Save information of Abort Message and then free memory. - prAisBssInfo->ucReasonOfDisconnect = ucReasonOfDisconnect; - - //4 <2> Abort current job. - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IDLE: - case AIS_STATE_SEARCH: - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - /* Do cancel timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - break; - - case AIS_STATE_LOOKING_FOR: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_JOIN: - /* Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - case AIS_STATE_IBSS_MERGE: - aisFsmStateAbort_IBSS(prAdapter); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_ONLINE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_NORMAL_TR: - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_DISCONNECTING: - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - - break; - - default: - break; - } - - if (fgIsCheckConnected && - (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState)) { - - /* switch into DISCONNECTING state for sending DEAUTH if necessary */ - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_NEW_CONNECTION && - prAisBssInfo->prStaRecOfAP && - prAisBssInfo->prStaRecOfAP->fgIsInUse) { - aisFsmSteps(prAdapter, AIS_STATE_DISCONNECTING); - - return; - } - else { - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - } - } - - aisFsmDisconnect(prAdapter, fgDelayIndication); - - return; - -} /* end of aisFsmStateAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for AIS FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - - DEBUGFUNC("aisFsmRunEventJoinComplete()"); - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - - eNextState = prAisFsmInfo->eCurrentState; - - // Check State and SEQ NUM - if (prAisFsmInfo->eCurrentState == AIS_STATE_JOIN) { - P_BSS_INFO_T prAisBssInfo; - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prAisFsmInfo->ucSeqNumOfReqMsg) { - - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //1. Reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // Completion of roaming - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - -#if CFG_SUPPORT_ROAMING - //2. Deactivate previous BSS - aisFsmRoamingDisconnectPrevAP(prAdapter, prStaRec); - - //3. Update bss based on roaming staRec - aisUpdateBssInfoForRoamingAP(prAdapter, prStaRec, prAssocRspSwRfb); -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_AIS_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventStart(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <1.7> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - } - //4 <2> JOIN was not successful - else { - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (aisFsmStateInit_RetryJOIN(prAdapter, prStaRec) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* 1. Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* 2. release channel */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - prBssDesc = scanSearchBssDescByBssid(prAdapter, prStaRec->aucMacAddr); - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - } - - /* 3.3 Free STA-REC */ - if(prStaRec != prAisBssInfo->prStaRecOfAP) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { -#if CFG_SUPPORT_ROAMING - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - // abort connection trial - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_CONNECT_INDICATION, - NULL, - 0); - - eNextState = AIS_STATE_IDLE; - } - } - } - } -#if DBG - else { - DBGLOG(AIS, WARN, ("SEQ NO of AIS JOIN COMP MSG is not matched.\n")); - } -#endif /* DBG */ - - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of aisFsmRunEventJoinComplete() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Create which was sent by -* CNM to indicate that channel was changed for creating IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - do { - // Check State - if (prAisFsmInfo->eCurrentState == AIS_STATE_IBSS_ALONE) { - aisUpdateBssInfoForCreateIBSS(prAdapter); - } - } - while (FALSE); - - return; -} /* end of aisFsmCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Merge which was sent by -* CNM to indicate that channel was changed for merging IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* @param[in] prStaRec Pointer of STA_RECORD_T for merge -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - do { - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_MERGE: - { - P_BSS_DESC_T prBssDesc; - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous Peers' STA_RECORD_T in Driver if have. - bssClearClientList(prAdapter, prAisBssInfo); - - //4 <1.3> Unmark connection flag of previous BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = FALSE; - } - - //4 <1.4> Update BSS_INFO_T - aisUpdateBssInfoForMergeIBSS(prAdapter, prStaRec); - - //4 <1.5> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - - //4 <1.6> Activate current Peer's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.7> Enable other features - - //4 <1.8> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - -#if CFG_SLT_SUPPORT - prAdapter->rWifiVar.rSltInfo.prPseudoStaRec = prStaRec; -#endif - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - } - while (FALSE); - - return; -} /* end of aisFsmMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Notification of existing IBSS was found -* from SCN. -* -* @param[in] prMsgHdr Message of Notification of an IBSS was present. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - BOOLEAN fgIsMergeIn; - - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T)prMsgHdr; - - ASSERT(prAisIbssPeerFoundMsg->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX); - - prStaRec = prAisIbssPeerFoundMsg->prStaRec; - ASSERT(prStaRec); - - fgIsMergeIn = prAisIbssPeerFoundMsg->fgIsMergeIn; - - cnmMemFree(prAdapter, prMsgHdr); - - - eNextState = prAisFsmInfo->eCurrentState; - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - { - //4 <1> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ - -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.6> sync. to firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.7> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.8> indicate PM for connected - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - } - //4 <2> We need 'merge out' to this IBSS - else { - - //4 <2.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <2.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - } - } - break; - - case AIS_STATE_NORMAL_TR: - { - - //4 <3> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <3.1> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - } - //4 <4> We need 'merge out' to this IBSS - else { - - //4 <4.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <4.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - - } - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventFoundIBSSPeer() */ -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisIndicationOfMediaStateToHost()"); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // NOTE(Kevin): Move following line to aisChangeMediaState() macro per CM's request. - //prAisBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prAisBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prAisBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prAisBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prAisBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prAisBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prAisBssInfo->ucPrimaryChannel); - - switch (prAisBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - /* Deactivate previous Peers' STA_RECORD_T in Driver if have. */ - bssClearClientList(prAdapter, prAisBssInfo); - - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prAisBssInfo->ucReasonOfDisconnect; - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_AIS_INDEX, &rEventConnStatus); - prAisBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(AIS, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} /* end of aisIndicationOfMediaStateToHost() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Deactivate previous AP's STA_RECORD_T in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - - //4 <2> Remove pending connection request - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - prConnSettings->fgIsDisconnectedByNonRequest = TRUE; - - //4 <3> Indicate Disconnected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, FALSE); - - return; -} /* end of aisPostponedEventOfDisconnTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_BSS_DESC_T prBssDesc; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("aisUpdateBssInfoForJOIN()"); - - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - - DBGLOG(AIS, INFO, ("Update AIS_BSS_INFO_T and apply settings to MAC\n")); - - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prAisBssInfo->eBand = prAisFsmInfo->prTargetBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = prStaRec; - prAisBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prAisBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAssocRspFrame->aucBSSID); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - } - else { - // should never happen - ASSERT(0); - } - - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of aisUpdateBssInfoForJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create an Ad-Hoc network and start sending Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prAisBssInfo->fgIsBeaconActivated) { - return; - } - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prAisBssInfo->ucPrimaryChannel = prConnSettings->ucAdHocChannelNum; - prAisBssInfo->eBand = prConnSettings->eAdHocBand; - - if (prAisBssInfo->eBand == BAND_2G4) { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - //4 <1.5> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prConnSettings->u2BeaconPeriod; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = prConnSettings->u2AtimWindow; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - -#if CFG_PRIVACY_MIGRATION - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION1_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION2_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prAisBssInfo->fgIsProtection = TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } -#else - prAisBssInfo->fgIsProtection = FALSE; -#endif - - //3 <2> Update BSS_INFO_T common part - ibssInitForAdHoc(prAdapter, prAisBssInfo); - - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <3.2> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.3> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.4> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <4> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - //3 <5> Start IBSS Alone Timer - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); - - return; - -} /* end of aisCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the existing IBSS was found. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - //UINT_16 u2IELength; - //PUINT_8 pucIE; - - - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - - if (!prAisBssInfo->fgIsBeaconActivated) { - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - } - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use Peer's Cap Info as IBSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - prAisBssInfo->fgUseShortPreamble = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - prAisBssInfo->fgUseShortPreamble = FALSE; - } - - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prAisBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - prAisBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - - if (prAisBssInfo->u2CapInfo & CAP_INFO_PRIVACY) { - prAisBssInfo->fgIsProtection= TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } - - //4 <2.2> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - rateGetDataRatesFromRateSet(prAisBssInfo->u2OperationalRateSet, - prAisBssInfo->u2BSSBasicRateSet, - prAisBssInfo->aucAllSupportedRates, - &prAisBssInfo->ucAllSupportedRatesLen); - - //3 <3> X Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prBssDesc->aucBSSID); - - //4 <4.2> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prAisBssInfo->eBand = prBssDesc->eBand; - - //4 <4.3> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; /* TBD(Kevin) */ - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - } - else { - // should never happen - ASSERT(0); - } - - - //3 <5> Set MAC HW - //4 <5.1> Find Lowest Basic Rate Index for default TX Rate of MMPDU - { - UINT_8 ucLowestBasicRateIndex; - - if (!rateGetLowestRateIndexFromRateSet(prAisBssInfo->u2BSSBasicRateSet, - &ucLowestBasicRateIndex)) { - - if (prAisBssInfo->ucPhyTypeSet & PHY_TYPE_BIT_OFDM) { - ucLowestBasicRateIndex = RATE_6M_INDEX; - } - else { - ucLowestBasicRateIndex = RATE_1M_INDEX; - } - } - - prAisBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[prAisBssInfo->fgUseShortPreamble][ucLowestBasicRateIndex]; - } - - //4 <5.2> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <5.3> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.4> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.5> Update AdHoc PM parameter - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <6> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - return; -} /* end of aisUpdateBssInfoForMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, /* CURRENT SSID */ - prIeSsid->aucSSID, prIeSsid->ucLength)) ) { - fgReplyProbeResp = TRUE; - } - } - - return fgReplyProbeResp; - -} /* end of aisValidateProbeReq() */ - -#endif /* CFG_SUPPORT_ADHOC */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection handling -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ) -{ - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - -#if CFG_SUPPORT_ADHOC - if (prAisBssInfo->fgIsBeaconActivated) { - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_DELETE_ALL, - NETWORK_TYPE_AIS_INDEX, - 0, - NULL, - 0); - - prAisBssInfo->fgIsBeaconActivated = FALSE; - } -#endif - - rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - - if (prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_RADIO_LOST) { - scanRemoveBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - - /* remove from scanning results as well */ - wlanClearBssInScanningResult(prAdapter, prAisBssInfo->aucBSSID); - - /* trials for re-association */ - if (fgDelayIndication) { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - } - } - else { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - if (fgDelayIndication) { - if (OP_MODE_IBSS != prAisBssInfo->eCurrentOPMode) { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (!fgDelayIndication) { - //4 <5> Deactivate previous AP's STA_RECORD_T or all Clients in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventAbort(prAdapter); - - /* clear pending roaming connection request */ - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <6> Indicate Disconnected Event to Host - aisIndicationOfMediaStateToHost(prAdapter, - PARAM_MEDIA_STATE_DISCONNECTED, - fgDelayIndication); - - - //4 <7> Trigger AIS FSM - aisFsmSteps(prAdapter, AIS_STATE_IDLE); - - return; -} /* end of aisFsmDisconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of Scan done Time-Out to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDoneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - DEBUGFUNC("aisFsmRunEventScanDoneTimeOut()"); - - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - DBGLOG(AIS, STATE, ("aisFsmRunEventScanDoneTimeOut Current[%d]\n",prAisFsmInfo->eCurrentState)); - - prConnSettings->fgIsScanReqIssued = FALSE; - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_SCAN: - prAisFsmInfo->u4ScanIELength = 0; - eNextState = AIS_STATE_IDLE; - break; - case AIS_STATE_ONLINE_SCAN: - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_NORMAL_TR; -#endif /* CFG_SUPPORT_ROAMING */ - break; - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmBGSleepTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Background Scan Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventBGSleepTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - DBGLOG(AIS, LOUD, ("EVENT - SCAN TIMER: Idle End - Current Time = %ld\n", kalGetTimeTick())); - - eNextState = AIS_STATE_LOOKING_FOR; - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - break; - - default: - break; - } - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmBGSleepTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "IBSS ALONE Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventIbssAloneTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - - /* There is no one participate in our AdHoc during this TIMEOUT Interval - * so go back to search for a valid IBSS again. - */ - - DBGLOG(AIS, LOUD, ("EVENT-IBSS ALONE TIMER: Start pairing\n")); - - prAisFsmInfo->fgTryScan = TRUE; - - /* abort timer */ - aisFsmReleaseCh(prAdapter); - - /* Pull back to SEARCH to find candidate again */ - eNextState = AIS_STATE_SEARCH; - - break; - - default: - break; - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisIbssAloneTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Join Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventJoinTimeout()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_JOIN: - DBGLOG(AIS, LOUD, ("EVENT- JOIN TIMEOUT\n")); - - /* 1. Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* 2. Increase Join Failure Count */ - prAisFsmInfo->prTargetStaRec->ucJoinFailureCount++; -// For JB nl802.11 -#if 0 - if(prAisFsmInfo->prTargetStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) { - /* 3.1 Retreat to AIS_STATE_SEARCH state for next try */ - eNextState = AIS_STATE_SEARCH; - } - else { - /* 3.2 Retreat to AIS_STATE_WAIT_FOR_NEXT_SCAN state for next try */ - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - } -#endif - eNextState = AIS_STATE_IDLE; - break; - - case AIS_STATE_NORMAL_TR: - /* 1. release channel */ - aisFsmReleaseCh(prAdapter); - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - /* 2. process if there is pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - } - - break; - - default: - /* release channel */ - aisFsmReleaseCh(prAdapter); - break; - - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventJoinTimeout() */ - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisTest ( - VOID - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucSSID[]="pci-11n"; - UINT_8 ucSSIDLen=7; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Set Connection Request Issued Flag */ - prConnSettings->fgIsConnReqIssued = TRUE; - prConnSettings->ucSSIDLen = ucSSIDLen; - kalMemCopy(prConnSettings->aucSSID, aucSSID, ucSSIDLen); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_HEM_AIS_FSM_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - wifi_send_msg(INDX_WIFI, MSG_ID_WIFI_IST, 0); - - return; -} -#endif /* CFG_TEST_MGMT_FSM */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle OID_802_11_BSSID_LIST_SCAN -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prSsid Pointer of SSID_T if specified -* \param[in] pucIe Pointer to buffer of extra information elements to be attached -* \param[in] u4IeLength Length of information elements -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisFsmScanRequest()"); - - ASSERT(prAdapter); - ASSERT(u4IeLength <= MAX_IE_LENGTH); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (!prConnSettings->fgIsScanReqIssued) { - prConnSettings->fgIsScanReqIssued = TRUE; - - if(prSsid == NULL) { - prAisFsmInfo->ucScanSSIDLen = 0; - } - else { - COPY_SSID(prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen, - prSsid->aucSsid, - (UINT_8)prSsid->u4SsidLen); - } - - if(u4IeLength > 0 && u4IeLength <= MAX_IE_LENGTH ) { - prAisFsmInfo->u4ScanIELength = u4IeLength; - kalMemCopy(prAisFsmInfo->aucScanIEBuf, pucIe, u4IeLength); - } - else { - prAisFsmInfo->u4ScanIELength = 0; - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR) { - if(prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE - && prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - // 802.1x might not finished yet, pend it for later handling .. - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - else { - if(prAisFsmInfo->fgIsChannelGranted == TRUE) { - DBGLOG(AIS, WARN, ("Scan Request with channel granted for join operation: %d, %d", - prAisFsmInfo->fgIsChannelGranted, - prAisFsmInfo->fgIsChannelRequested)); - } - - /* start online scan */ - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN); - } - } - else if(prAisFsmInfo->eCurrentState == AIS_STATE_IDLE) { - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_SCAN); - } - else { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - } - else { - DBGLOG(AIS, WARN, ("Scan Request dropped. (state: %d)\n", prAisFsmInfo->eCurrentState)); - } - - return; -} /* end of aisFsmScanRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_REQ_CHANNEL_JOIN && - prAisFsmInfo->ucSeqNumOfChReq == ucTokenID) { - /* 2. channel privilege has been approved */ - prAisFsmInfo->u4ChGrantedInterval = u4GrantInterval; - - /* 3. state transition to join/ibss-alone/ibss-merge */ - /* 3.1 set timeout timer in cases join could not be completed */ - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - prAisFsmInfo->u4ChGrantedInterval - AIS_JOIN_CH_GRANT_THRESHOLD); - /* 3.2 set local variable to indicate join timer is ticking */ - prAisFsmInfo->fgIsInfraChannelFinished = FALSE; - - /* 3.3 switch to join state */ - aisFsmSteps(prAdapter, AIS_STATE_JOIN); - - prAisFsmInfo->fgIsChannelGranted = TRUE; - } - else { /* mismatched grant */ - /* 2. return channel privilege to CNM immediately */ - aisFsmReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->fgIsChannelGranted == TRUE - || prAisFsmInfo->fgIsChannelRequested == TRUE) { - - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChAbort->ucTokenID = prAisFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that corresponding beacon has not -* been received for a while and probing is not successful -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prAisBssInfo; - BOOLEAN fgDoAbortIndication = FALSE; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Diagnose Connection for Beacon Timeout Event - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - if (OP_MODE_INFRASTRUCTURE == prAisBssInfo->eCurrentOPMode) { - P_STA_RECORD_T prStaRec = prAisBssInfo->prStaRecOfAP; - - if (prStaRec) { - fgDoAbortIndication = TRUE; - } - } - else if (OP_MODE_IBSS == prAisBssInfo->eCurrentOPMode) { - fgDoAbortIndication = TRUE; - } - } - - //4 <2> invoke abort handler - if (fgDoAbortIndication) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_RADIO_LOST, TRUE); - } - - return; -} /* end of aisBssBeaconTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that DEAUTH frame has been -* sent and thus state machine could go ahead -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prMsduInfo Pointer of MSDU_INFO_T for DEAUTH frame -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_DISCONNECTING) { - if(rTxDoneStatus != TX_RESULT_DROPPED_IN_DRIVER) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_NEW_CONNECTION, FALSE); - } - } - else { - DBGLOG(AIS, WARN, ("DEAUTH frame transmitted without further handling")); - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aisDeauthXmitComplete() */ - -#if CFG_SUPPORT_ROAMING -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Looking for a candidate due to weak signal" to AIS FSM. -* -* @param[in] u4ReqScan Requesting Scan or not -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_AIS_REQUEST_TYPE_T eAisRequest; - - DBGLOG(AIS, LOUD, ("aisFsmRunEventRoamingDiscovery()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* search candidates by best rssi */ - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - - /* results are still new */ - if (!u4ReqScan) { - roamingFsmRunEventRoam(prAdapter); - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - if(prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - eAisRequest = AIS_REQUEST_ROAMING_SEARCH; - } - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR && prAisFsmInfo->fgIsInfraChannelFinished == TRUE) { - if(eAisRequest == AIS_REQUEST_ROAMING_SEARCH) { - aisFsmSteps(prAdapter, AIS_STATE_LOOKING_FOR); - } - else { - aisFsmSteps(prAdapter, AIS_STATE_SEARCH); - } - } - else { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); - - aisFsmInsertRequest(prAdapter, eAisRequest); - } - - return; -} /* end of aisFsmRunEventRoamingDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the time of ScanDone for roaming and transit to Roam state. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DBGLOG(AIS, LOUD, ("->aisFsmRoamingScanResultsUpdate()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - roamingFsmScanResultsUpdate(prAdapter); - - eNextState = prAisFsmInfo->eCurrentState; - if (prRoamingFsmInfo->eCurrentState == ROAMING_STATE_DISCOVERY) { - roamingFsmRunEventRoam(prAdapter); - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - eNextState = AIS_STATE_NORMAL_TR; - } - - return eNextState; -} /* end of aisFsmRoamingScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection of last AP before switching to roaming bss. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prTargetStaRec Target of StaRec of roaming -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisFsmRoamingDisconnectPrevAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Not invoke rlmBssAborted() here to avoid prAisBssInfo->fg40mBwAllowed - * to be reset. RLM related parameters will be reset again when handling - * association response in rlmProcessAssocRsp(). 20110413 - */ - //rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - prTargetStaRec->ucNetTypeIndex = 0xff; /* Virtial NetType */ - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - prTargetStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Virtial NetType */ - - return; -} /* end of aisFsmRoamingDisconnectPrevAP() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the roaming was completed. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prStaRec StaRec of roaming AP -* prAssocRspSwRfb -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisUpdateBssInfoForRoamingAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - return; -} /* end of aisFsmRoamingUpdateBss() */ - -#endif /* CFG_SUPPORT_ROAMING */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Check if there is any pending request and remove it (optional) -* -* @param prAdapter -* eReqType -* bRemove -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr, prPendingReqHdrNext; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* traverse through pending request list */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingReqHdr, - prPendingReqHdrNext, - &(prAisFsmInfo->rPendingReqList), - rLinkEntry, - AIS_REQ_HDR_T) { - /* check for specified type */ - if(prPendingReqHdr->eReqType == eReqType) { - /* check if need to remove */ - if(bRemove == TRUE) { - LINK_REMOVE_KNOWN_ENTRY(&(prAisFsmInfo->rPendingReqList), &(prPendingReqHdr->rLinkEntry)); - - cnmMemFree(prAdapter, prPendingReqHdr); - } - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get next pending request -* -* @param prAdapter -* -* @return P_AIS_REQ_HDR_T -*/ -/*----------------------------------------------------------------------------*/ -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - LINK_REMOVE_HEAD(&(prAisFsmInfo->rPendingReqList), prPendingReqHdr, P_AIS_REQ_HDR_T); - - return prPendingReqHdr; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Insert a new request -* -* @param prAdapter -* eReqType -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ) -{ - P_AIS_REQ_HDR_T prAisReq; - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - prAisReq = (P_AIS_REQ_HDR_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(AIS_REQ_HDR_T)); - - if(!prAisReq) { - ASSERT(0); // Can't generate new message - return FALSE; - } - - prAisReq->eReqType = eReqType; - - /* attach request into pending request list */ - LINK_INSERT_TAIL(&prAisFsmInfo->rPendingReqList, &prAisReq->rLinkEntry); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Flush all pending requests -* -* @param prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_REQ_HDR_T prAisReq; - - ASSERT(prAdapter); - - while((prAisReq = aisFsmGetNextRequest(prAdapter)) != NULL) { - cnmMemFree(prAdapter, prAisReq); - } - - return; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/assoc.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/assoc.c deleted file mode 100755 index ebf8e3fe101b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/assoc.c +++ /dev/null @@ -1,2094 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/assoc.c#3 $ -*/ - -/*! \file "assoc.c" - \brief This file includes the association-related functions. - - This file includes the association-related functions. -*/ - - - -/*\ -** $Log: assoc.c $ -** -** 07 27 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Fix wifi direct connection issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 08 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * add a pair of brace for compilation success. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 03 09 2012 terry.wu - * NULL - * Fix build error. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 yuche.tsai - * NULL - * Update Driver for wifi driect gc join IE update issue. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Fix PhyTypeSet in STA_REC in AP mode - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 19 2011 yuche.tsai - * NULL - * Fix KE when enable hot-spot & any one client connect to this hot-spot. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Update workaround for Kingnet AP. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Workaround for Kingnet 710 AP wrong AID assignment. - * - * 05 02 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning[WCXRP00000672] [MT6620 Wi-Fi][FW] Fix the PS event allocation - * Check STA when rx assoc. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 14 2011 wh.su - * [WCXRP00000545] [MT6620 Wi-Fi] [Driver] Fixed the p2p not enable, received a assoc rsp cause the rx assoc execute a null function - * Modify file for avoid assert at BOW recieve a assoc response frame but no p2p fucntion. - * - * 03 08 2011 terry.wu - * [WCXRP00000524] [MT6620 Wi-Fi][Driver] Fix p2p assoc request containing wrong IE format - * Fix p2p assoc request containing wrong IE format. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix RX disassoc issue under Hot-spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Desired Non-HT Rate Set. - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Recover the code that was coverwritted.. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 yuche.tsai - * NULL - * Add SSID IE in assoc req frame which is sent by P2P GC. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RSN IE generation by CFG_RSN_MIGRATION compilation flag. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * revised. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update assocProcessRxAssocReqFrame() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - macro > 10 line, initial value of an array - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 28 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning.u1rwduu`wvpghlqg|rm+vp - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update Assoc ID for PS - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Use new constant definition ELEM_MAX_LEN_EXT_CAP - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify assoc req IE talbe for HT cap IE - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * update the assocComposeReAssocReqFrameHeader() and fix the u2EstimatedFrameLen in assocSendReAssocReqFrame() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove some space line - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sending disassoc frame function - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the txassocReq IE table, adding for WPA/RSN - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eNetType not init in send AssocReq function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate the send Assoc with TXM - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to indicate the assoc request and assoc response (now disable) - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove unused variables - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_VAR_IE_ENTRY_T txAssocReqIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmReqGenerateHtCapIE },/* 45 */ -#if CFG_SUPPORT_WPS2 - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WSC), NULL, rsnGenerateWSCIE }, /* 221 */ -#endif -#if CFG_SUPPORT_WAPI - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WAPI), NULL, wapiGenerateWAPIIE }, /* 68 */ -#endif -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE }, /* 221 */ -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmReqGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO), NULL, mqmGenerateWmmInfoIE }, /* 221 */ -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE }, /* 48 */ -#endif -}; - -#if CFG_SUPPORT_AAA -VERIFY_IE_ENTRY_T rxAssocReqIETable[] = { - { ELEM_ID_RESERVED, NULL } /* 255 */ -}; - - -APPEND_VAR_IE_ENTRY_T txAssocRespIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE }, /* 42 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE }, /* 45 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE }, /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - { (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE }, /* 74 */ - { (0), p2pFuncCalculateP2p_IELenForAssocRsp, p2pFuncGenerateP2p_IEForAssocRsp }, /* 221 */ -#if CFG_SUPPORT_WFD - { (0), wfdFuncCalculateWfdIELenForAssocRsp, wfdFuncGenerateWfdIEForAssocRsp }, /* 221 */ -#endif -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE }, /* 221 */ - - { (0), p2pFuncCalculateWSC_IELenForAssocRsp, p2pFuncGenerateWSC_IEForAssocRsp } /* 221 */ - -}; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose the Capability Info Field. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval Capability Info Field -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ UINT_16 -assocBuildCapabilityInfo ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - UINT_32 u4NonHTPhyType; - UINT_16 u2CapInfo; - - - ASSERT(prStaRec); - - - /* Set up our requested capabilities. */ - u2CapInfo = CAP_INFO_ESS; - u2CapInfo |= CAP_CF_STA_NOT_POLLABLE; - - if (prStaRec->u2CapInfo & CAP_INFO_PRIVACY) { - u2CapInfo |= CAP_INFO_PRIVACY; - } - - - /* 7.3.1.4 */ - if (prStaRec->fgHasBasicPhyType) { - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - if ( (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortPreambleOptionImplemented) && - ( (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO) && - (prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) ) ) { - - /* Case I: Implemented == TRUE and Short Preamble Option Enable == TRUE. - * Case II: Implemented == TRUE and Short Preamble == AUTO (depends on - * BSS_DESC_T's capability) - */ - u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - -#if CFG_SUPPORT_SPEC_MGMT /*Add for DFS support*/ - /* Support 802.11h */ - if(prAdapter->fgEnable5GBand == TRUE) { - u2CapInfo |= CAP_INFO_SPEC_MGT; - } -#endif - - if (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortSlotTimeOptionImplemented && - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable) { - u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - } - - DBGLOG(SAA, LOUD, ("ASSOC REQ: Compose Capability = 0x%04x for Target BSS ["MACSTR"].\n", - u2CapInfo, MAC2STR(prStaRec->aucMacAddr))); - - - return u2CapInfo; - -} /* end of assocBuildCapabilityInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - PUINT_8 pucBuffer; - UINT_16 u2SupportedRateSet; - UINT_8 aucAllSupportedRates[RATE_NUM] = {0}; - UINT_8 ucAllSupportedRatesLen; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (IS_STA_IN_AIS(prStaRec)) { - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - pucBuffer = p2pBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo, pucBuffer); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } -#endif - - else { - /* TODO(Kevin): For other network */ - } - - /* NOTE(Kevin 2008/12/19): 16.3.6.3 MLME-ASSOCIATE.indication - - * SupportedRates - The set of data rates that are supported by the STA - * that is requesting association. - * Original(Portable Driver): Only send the Rates that we'll support. - * New: Send the Phy Rates if the result of following & operation == NULL. - */ - //rateGetDataRatesFromRateSet((prBssDesc->u2OperationalRateSet & - // rPhyAttributes[prBssDesc->ePhyType].u2SupportedRateSet), - - if (prStaRec->fgHasBasicPhyType) { - UINT_32 u4NonHTPhyType; - - - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - u2SupportedRateSet = (prStaRec->u2OperationalRateSet & - rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet); - - ASSERT(u2SupportedRateSet); - - if (!u2SupportedRateSet) { - u2SupportedRateSet = rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet; - } - - /* TODO(Kevin): For P2P, we shouldn't send support rate set which contains 11b rate */ - - rateGetDataRatesFromRateSet(u2SupportedRateSet, - 0, - aucAllSupportedRates, - &ucAllSupportedRatesLen); - - ucSupRatesLen = ((ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) ? - ELEM_MAX_LEN_SUP_RATES : ucAllSupportedRatesLen); - - ucExtSupRatesLen = ucAllSupportedRatesLen - ucSupRatesLen; - - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - /* 7.3.2.19 Supported Channels element*/ -#if CFG_SUPPORT_DFS // Add for DFS support - if(prAdapter->fgEnable5GBand == TRUE) { - SUPPORTED_CHANNELS_IE(pucBuffer)->ucId = ELEM_ID_SUP_CHS; - SUPPORTED_CHANNELS_IE(pucBuffer)->ucLength = 8; - - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[0] = 36; - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[1] = 4; - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[2] = 52; - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[3] = 4; -// Not China --- Start - //SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[4] = 100; - //SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[5] = 11; -// Not China --- End - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[4] = 149; - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[5] = 4; - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[6] = 165; - SUPPORTED_CHANNELS_IE(pucBuffer)->ucChannelNum[7] = 1; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } -#endif - } - - return; -} /* end of assocBuildReAssocReqFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Request frame header and -* its fixed fields -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocReqFrameHeaderAndFF ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - UINT_16 u2CapInfo; - UINT_16 u2ListenInterval; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - ASSERT(pu2PayloadLen); - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_REQ; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_REQ; - } - WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - u2CapInfo = assocBuildCapabilityInfo(prAdapter, prStaRec); - - /* Fill the Capability Information field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - - - /* Calculate the listen interval for the maximum power mode. Currently, we - set it to the value 2 times DTIM period. */ - if (prStaRec->ucDTIMPeriod) { - u2ListenInterval = prStaRec->ucDTIMPeriod * DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD; - } - else { - DBGLOG(SAA, TRACE, ("Use default listen interval\n")); - u2ListenInterval = DEFAULT_LISTEN_INTERVAL; - } - prStaRec->u2ListenInterval = u2ListenInterval; - - /* Fill the Listen Interval field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2ListenInterval, u2ListenInterval); - - - //4 <3> Compose the Current AP Address field for ReAssociation Request frame. - /* Fill the Current AP Address field. */ - if (prStaRec->fgIsReAssoc) { - if (IS_STA_IN_AIS(prStaRec)) { - - P_AIS_BSS_INFO_T prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - P_WLAN_REASSOC_REQ_FRAME_T prReAssocFrame = - (P_WLAN_REASSOC_REQ_FRAME_T)prAssocFrame; - - COPY_MAC_ADDR(prReAssocFrame->aucCurrentAPAddr, prAisBssInfo->aucBSSID); - } - else { - ASSERT(0); /* We don't support ReAssociation for other network */ - } - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN + - CURR_AP_ADDR_FIELD_LEN); - } - else { - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN); - } - - return; -} /* end of assocComposeReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Request frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - if (fgIsReAssoc) { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - CURR_AP_ADDR_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - else { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - u2EstimatedExtraIELen = p2pCalculate_IEForAssocReq(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } - } -#else - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } -#endif - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - - /* Compose Header and Fixed Field */ - assocComposeReAssocReqFrameHeaderAndFF(prAdapter, - prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucOwnMacAddr, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - p2pGenerate_IEForAssocReq(prAdapter, prMsduInfo); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - } -#else - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } -#endif - - //4 <6> Update the (Re)association request information - if (IS_STA_IN_AIS(prStaRec)) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - -#if CFG_RSN_MIGRATION - kalUpdateReAssocReqInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); -#endif - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - - kalP2PUpdateAssocInfo( - prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); - } -#endif - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Request frame for -* SAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocReqFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Response frame for -* AAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocRspFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocRespFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming (Re)Association Frame and take out -* the status code. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - UINT_16 u2RxFrameCtrl; - UINT_16 u2RxCapInfo; - UINT_16 u2RxStatusCode; - UINT_16 u2RxAssocId; - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - DBGLOG(SAA, LOUD, ("prSwRfb->u2PayloadLength = %d\n", prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the (Re)Assocation Resp Frame. - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of (Re)Assocation Resp Frame. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2RxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2RxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Parse the Fixed Fields of (Re)Assocation Resp Frame Body. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2CapInfo, &u2RxCapInfo); - u2RxCapInfo = prAssocRspFrame->u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2StatusCode, &u2RxStatusCode); - u2RxStatusCode = prAssocRspFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //4 <4> Check CAP_INFO - /* NOTE(Kevin): CM suggest to add MGMT workaround for those APs didn't check - * the CAP Privacy Bit to overcome a corner case that the Privacy Bit - * of our SCAN result didn't consist with AP's Association Resp. - */ - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - /* WAPI AP allow the customer use WZC to join mode, the privacy bit is 0 */ - /* even at WAI & WAPI_PSK mode, but the assoc respose set the privacy bit set 1 */ - DBGLOG(SEC, TRACE, ("Workaround the WAPI AP allow the customer to use WZC to join\n")); - } - else -#endif -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && 1) { - /* Todo:: Fixed this */ - } - else -#endif - { - } - -#if CFG_STRICT_CHECK_CAPINFO_PRIVACY - if ((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) ^ (u2RxCapInfo & CAP_INFO_PRIVACY)) { - u2RxStatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - } -#endif - } - - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_RSN_MIGRATION - /* Update the information in the structure used to query and set - OID_802_11_ASSOCIATION_INFORMATION. */ - kalUpdateReAssocRspInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocRspFrame->u2CapInfo, - (UINT_32)(prSwRfb->u2PacketLen)); -#endif - } - - //4 <5> Update CAP_INFO and ASSOC_ID - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { - prStaRec->u2CapInfo = u2RxCapInfo; - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2AssocId, &u2RxAssocId); - u2RxAssocId = prAssocRspFrame->u2AssocId; // NOTE(Kevin): Optimized for ARM - - /* 20110715 Workaround for Kingnet 710 AP (Realtek 8186) - * This AP raises the bit 6&7 not bit 14&15 in AID field. - * It cause wrong AID assignment. - * For AID = 2 - * Normal case: 0xC002(1100 0000 0000 0010) => 2 - * Kingnet 710: 0x00C2(0000 0000 1100 0010) => 194 - * workaround: mask bit 6&7 for this AP - */ - if((u2RxAssocId & BIT(6)) && - (u2RxAssocId & BIT(7)) && - !(u2RxAssocId & BITS(8, 15))) { - prStaRec->u2AssocId = u2RxAssocId & ~BITS(6,7); - } else { - prStaRec->u2AssocId = u2RxAssocId & ~AID_MSB; -#if CFG_SUPPORT_802_11W - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prBssSpecInfo->ucSaQueryTimedOut = 0; - } -#endif - } - } - -#if CFG_SUPPORT_802_11W - if (u2RxStatusCode == STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED){ - DBGLOG(SAA, INFO, ("AP rejected due the authentication algorithm not support\n")); - } - else if (u2RxStatusCode == STATUS_CODE_ASSOC_REJECTED_TEMPORARILY) { - PUINT_8 pucIE, pucTime; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_TIMEOUT_INTERVAL == IE_ID(pucIE) && IE_LEN(pucIE) == 5) { - pucTime = ((P_IE_HDR_T)pucIE)->aucInfo; - if (pucTime[0] == ACTION_SA_TIMEOUT_ASSOC_COMEBACK) { - UINT_32 tu; - WLAN_GET_FIELD_32(pucTime + 1, &tu); - DBGLOG(SAA, INFO, ("AP rejected association temporarily; comeback duration %u TU " - "(%u ms)\n", tu, TU_TO_MSEC(tu))); - if (tu > TX_ASSOCIATION_RETRY_TIMEOUT_TU) { - DBGLOG(SAA, INFO, ("Update timer based on comeback duration\n")); - //ieee80211_reschedule_timer(wpa_s, ms); - } - } - break; - } - } /* end of IE_FOR_EACH */ - } -#endif - *pu2StatusCode = u2RxStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckRxReAssocRspFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will compose the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2ReasonCode The reason code of disassociation -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeDisassocFrame ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisAssocFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - - prDisAssocFrame = (P_WLAN_DISASSOC_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the DisAssociation frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DISASSOC; - - WLAN_SET_FIELD_16(&prDisAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDisAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDisAssocFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Disassociation frame. - /* Fill the Reason Code field. */ - WLAN_SET_FIELD_16(&prDisAssocFrame->u2ReasonCode, u2ReasonCode); - - return; -} /* end of assocComposeDisassocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2ReasonCode The reason code of disassociation -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ) -{ - PUINT_8 pucMacAddress; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - //UINT_32 u4Status = WLAN_STATUS_SUCCESS; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Disassociation Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - REASON_CODE_FIELD_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending DisAssoc.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Disassociation frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - pucMacAddress = prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].aucOwnMacAddr; - - /* Compose Header and Fixed Field */ - assocComposeDisassocFrame(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucMacAddress, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - - prDisassocFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDisassocFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("assocSendDisAssocFrame with protection\n")); - } -#endif - - u2PayloadLen = REASON_CODE_FIELD_LEN; - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendDisAssocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Disassociation frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Disassociation Frame. - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Disassociation Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDisassocFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Disassoc Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDisassocFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDisassocFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxDisassocFrame() */ - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Association Req frame -* and return a Status Code. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code for carried in Association Response. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_RSN_INFO_ELEM_T prIeRsn = (P_RSN_INFO_ELEM_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE, pucIEStart; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_16 u2StatusCode = STATUS_CODE_SUCCESSFUL; - UINT_16 u2RxFrameCtrl; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - UINT_32 i; - - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - return WLAN_STATUS_FAILURE; - } - - //4 <1> locate the Association Req Frame. - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Association Req Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < - (CAP_INFO_FIELD_LEN + LISTEN_INTERVAL_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prAssocReqFrame->aucBSSID, prBssInfo->aucBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (MAC_FRAME_REASSOC_REQ == u2RxFrameCtrl) { - prStaRec->fgIsReAssoc = TRUE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - prStaRec->fgIsReAssoc = FALSE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = prAssocReqFrame->aucInfoElem; - } - - - //4 <3> Parse the Fixed Fields of Assoc Req Frame Body. - prStaRec->u2CapInfo = prAssocReqFrame->u2CapInfo; - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) && - !kalP2PGetCipher(prAdapter->prGlueInfo))) { - u2StatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - DBGLOG(RSN, TRACE, ("STA Assoc req privacy bit check fail\n")); - return WLAN_STATUS_SUCCESS; - } - } -#endif - - prStaRec->u2ListenInterval = prAssocReqFrame->u2ListenInterval; - prStaRec->ucPhyTypeSet = 0; - - /* Might be legacy client or p2p gc. */ - prStaRec->eStaType = STA_TYPE_LEGACY_CLIENT; - - //4 <4> Parse the IE of Assoc Req Frame Body. - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): Get SSID once */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - case ELEM_ID_HT_CAP: - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - kalMemCopy(&prStaRec->u2HtCapInfo, &(HT_CAP_IE(pucIE)->u2HtCapInfo), 2); - break; - case ELEM_ID_RSN: - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - prIeRsn = RSN_IE(pucIE); - rsnParserCheckForRSNCCMPPSK(prAdapter, prIeRsn, &u2StatusCode); - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - #endif - break; - case ELEM_ID_VENDOR: - #if CFG_ENABLE_WIFI_DIRECT - { - if ((prAdapter->fgIsP2PRegistered)) { - UINT_8 ucOuiType = 0; - - p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType); - - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - DBGLOG(P2P, TRACE, ("Target Client is a P2P group client\n")); - prStaRec->eStaType = STA_TYPE_P2P_GC; - } - } - } - #endif - break; - default: - for (i = 0; i < (sizeof(rxAssocReqIETable) / sizeof(VERIFY_IE_ENTRY_T)); i++) { - - if ((IE_ID(pucIE)) == rxAssocReqIETable[i].ucElemID) { - rxAssocReqIETable[i].pfnVarifyIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIE, &u2StatusCode); - - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - } - - break; - } - } /* end of IE_FOR_EACH */ - - // parsing for WMM related information (2010/12/21) - mqmProcessAssocReq( - prAdapter, - prSwRfb, - pucIEStart, - u2IELength); - - do { - if (prIeSsid) { - if (UNEQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - } - else { - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - - prStaRec->u2OperationalRateSet = 0; - prStaRec->u2BSSBasicRateSet = 0; - - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prStaRec->u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if ((prBssInfo->u2BSSBasicRateSet & prStaRec->u2OperationalRateSet) != - prBssInfo->u2BSSBasicRateSet) { - - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - - /* Accpet the Sta, update BSSBasicRateSet from Bss */ - - prStaRec->u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = (prStaRec->u2OperationalRateSet & RATE_SET_ALL_ABG); - - if (BAND_2G4 == HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr)) { - #if 0 /* Marked by CMC 20111024 */ - /* check if support 11n */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - - if (!(u2BSSBasicRateSet & RATE_SET_OFDM)) { - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - - } - - } - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - #endif - } - else { /* (BAND_5G == prBssDesc->eBande) */ - #if 0 /* Marked by CMC 20111024 */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - ASSERT((prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) == 0); - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - #endif - } - - } - else { - ASSERT(0); - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (prIeRsn) { - if (!kalP2PGetCipher(prAdapter->prGlueInfo)) { - u2StatusCode = STATUS_CODE_CIPHER_SUITE_REJECTED; - break; - } - } - else { - prStaRec->rSecInfo.fgAllowOnly1x = FALSE; - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - //Only Allow 1x - prStaRec->rSecInfo.fgAllowOnly1x = TRUE; - break; - } - } - } -#endif - - } while (FALSE); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - #if 1 /* ICS */ - { - PUINT_8 cp = (PUINT_8)&prAssocReqFrame->u2CapInfo; - P_UINT_8 prNewAssocReqIe = NULL; - - if (u2IELength) { - prNewAssocReqIe= kalMemAlloc(u2IELength, VIR_MEM_TYPE); - if (NULL == prNewAssocReqIe) { - DBGLOG(AIS, WARN, ("allocate memory for (Re)assocReqIe fail,IELength=%d!\n",u2IELength)); - u2StatusCode = STATUS_CODE_INVALID_INFO_ELEMENT; - return WLAN_STATUS_FAILURE; - /*note: if return WLAN_STATUS_FAILURE, we wouldn't reply the GC!so he need wait util timeout - should we change to WLAN_STATUS_SUCCESS? but memory allocate fail may also cause reply fail*/ - } - } - if (prStaRec->fgIsReAssoc) - cp += 10; - else - cp += 4; - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - } - prStaRec->u2AssocReqIeLen = u2IELength; - if (u2IELength) { - prStaRec->pucAssocReqIe = prNewAssocReqIe; - kalMemCopy(prStaRec->pucAssocReqIe, cp, u2IELength); - } - } - #endif - kalP2PUpdateAssocInfo(prAdapter->prGlueInfo, (PUINT_8)&prAssocReqFrame->u2CapInfo, u2IELength + (prStaRec->fgIsReAssoc ? 10 : 4), prStaRec->fgIsReAssoc); - } -#endif - - *pu2StatusCode = u2StatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocRespFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo - ) -{ - PUINT_8 pucBuffer; - P_STA_RECORD_T prStaRec; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - ucExtSupRatesLen = 0; - } - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of assocBuildReAssocRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Response frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucBssid Given BSSID. -* @param[in] u2CapInfo Capability Field of current BSS. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocRespFrameHeaderAndFF ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucBSSID[], - IN UINT_16 u2CapInfo, - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucBSSID); - ASSERT(pu2PayloadLen); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_RSP; - } - //WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - prAssocRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target MAC Address. */ - COPY_MAC_ADDR(prAssocRspFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucSrcAddr, aucBSSID); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucBSSID, aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - prAssocRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2StatusCode, prStaRec->u2StatusCode); - prAssocRspFrame->u2StatusCode = prStaRec->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2AssocId, ((prStaRec->u2AssocId & AID_MASK) | AID_MSB)); - prAssocRspFrame->u2AssocId = - ((prStaRec->u2AssocId & AID_MASK) | AID_MSB); // NOTE(Kevin): Optimized for ARM - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - return; -} /* end of assocComposeReAssocRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Resp frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - STATUS_CODE_FIELD_LEN + \ - AID_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocRespIETable[i].u2EstimatedFixedIELen; - } - else if (txAssocRespIETable[i].pfnCalculateVariableIELen != NULL) { - u2EstimatedExtraIELen += (UINT_16)txAssocRespIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(AAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Response.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex != NETWORK_TYPE_AIS_INDEX); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and Fixed Field */ - assocComposeReAssocRespFrameHeaderAndFF(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucBSSID, - prBssInfo->u2CapInfo, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = aaaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocRespFrameCommonIEs(prAdapter, prMsduInfo, prBssInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].pfnAppendIE) { - txAssocRespIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of assocSendReAssocRespFrame() */ -#endif /* CFG_SUPPORT_AAA */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/auth.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/auth.c deleted file mode 100755 index 9938ebc09823..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/auth.c +++ /dev/null @@ -1,1350 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/auth.c#1 $ -*/ - -/*! \file "auth.c" - \brief This file includes the authentication-related functions. - - This file includes the authentication-related functions. -*/ - - - -/* -** $Log: auth.c $ - * - * 02 13 2012 cp.wu - * NULL - * show error message only instead of raise assertion when - * received authentication frame is carrying illegal parameters. - * - * 11 09 2011 yuche.tsai - * NULL - * Fix a network index & station record index issue when TX deauth frame. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 yuche.tsai - * NULL - * Fix coding error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000796] [Volunteer Patch][MT6620][Driver] Add BC deauth frame TX feature. - * BC deauth support. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 21 2011 terry.wu - * [WCXRP00000381] [MT6620 Wi-Fi][Driver] Kernel panic when replying unaccept Auth in AP mode - * In AP mode, use STA_REC_INDEX_NOT_FOUND(0xFE) instead of StaRec index when replying an unaccept Auth frame. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update authSendDeauthFrame() for correct the value of eNetTypeIndex in MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Check Net is active before sending Deauth frame. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix compile warning - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add debug message for abnormal authentication frame from AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Fix the Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the authComposeAuthFrameHeader() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the send deauth frame function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate send Auth with TXM - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_IE_ENTRY_T txAuthIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_CHALLENGE_TEXT), authAddIEChallengeText } -}; - -HANDLE_IE_ENTRY_T rxAuthIETable[] = { - { ELEM_ID_CHALLENGE_TEXT, authHandleIEChallengeText } -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Authentication frame header and fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2AuthAlgNum Authentication Algorithm Number -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[in] u2StatusCode Status Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeAuthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_16 u2AuthAlgNum, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Authentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_AUTH; - - /* If this frame is the third frame in the shared key authentication - * sequence, it shall be encrypted. - */ - if ((u2AuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3)) { - - u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; /* HW will also detect this bit for applying encryption */ - } - - //WLAN_SET_FIELD_16(&prAuthFrame->u2FrameCtrl, u2FrameCtrl); - prAuthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAuthFrame->aucSrcAddr, aucMACAddress); - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucPeerMACAddress); - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - - /* Fill the BSSID field with Current BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucMACAddress); - break; - - default: - ASSERT(0); - } - - /* Clear the SEQ/FRAG_NO field. */ - prAuthFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Authentication Algorithm Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthAlgNum, u2AuthAlgNum); - prAuthFrame->u2AuthAlgNum = u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Authentication Transaction Sequence Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, u2TransactionSeqNum); - prAuthFrame->u2AuthTransSeqNo = u2TransactionSeqNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2StatusCode, u2StatusCode); - prAuthFrame->u2StatusCode = u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeAuthFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will append Challenge Text IE to the Authentication frame -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return; - } - - ASSERT(prStaRec); - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prMsduInfo->prPacket; - - WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - - /* Only consider SEQ_3 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (prStaRec->prChallengeText != NULL)) { - - COPY_IE(((UINT_32)(prMsduInfo->prPacket) + prMsduInfo->u2FrameLength), - (prStaRec->prChallengeText)); - - prMsduInfo->u2FrameLength += IE_SIZE(prStaRec->prChallengeText); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -#if !CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame\n")); - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec->aucMacAddr, - prBssInfo->aucOwnMacAddr, - prStaRec->ucAuthAlgNum, - u2TransactionSeqNum, - STATUS_CODE_RESERVED); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#else - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - /*get from input parameter*/ - //ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - PFN_TX_DONE_HANDLER pfTxDoneHandler = (PFN_TX_DONE_HANDLER)NULL; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_16 ucAuthAlgNum; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame %d, Status Code = %d\n", - u2TransactionSeqNum, u2StatusCode)); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - if (prStaRec) { - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucReceiveAddr = prStaRec->aucMacAddr; - - ucAuthAlgNum = prStaRec->ucAuthAlgNum; - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - pfTxDoneHandler = saaFsmRunEventTxDone; - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - pfTxDoneHandler = aaaFsmRunEventTxDone; - break; - } - - } - else { /* For Error Status Code */ - P_WLAN_AUTH_FRAME_T prFalseAuthFrame; - - - ASSERT(prFalseAuthSwRfb); - prFalseAuthFrame = (P_WLAN_AUTH_FRAME_T)prFalseAuthSwRfb->pvHeader; - - ASSERT(u2StatusCode != STATUS_CODE_SUCCESSFUL); - - pucTransmitAddr = prFalseAuthFrame->aucDestAddr; - - pucReceiveAddr = prFalseAuthFrame->aucSrcAddr; - - ucAuthAlgNum = prFalseAuthFrame->u2AuthAlgNum; - - u2TransactionSeqNum = (prFalseAuthFrame->u2AuthTransSeqNo + 1); - } - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF((PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - ucAuthAlgNum, - u2TransactionSeqNum, - u2StatusCode); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - if(prStaRec) { - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; //false Auth frame - } - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#endif /* CFG_SUPPORT_AAA */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX Authentication frame for SAA/AAA event -* handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - UINT_16 u2TxAuthAlgNum; - UINT_16 u2TxTransactionSeqNum; - - - ASSERT(prMsduInfo); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAuthFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAuthFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (u2TxFrameCtrl != MAC_FRAME_AUTH) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2TxAuthAlgNum) - u2TxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2TxAuthAlgNum != (UINT_16)(prStaRec->ucAuthAlgNum)) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TxTransactionSeqNum) - u2TxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2TxTransactionSeqNum != u2TransactionSeqNum) { - return WLAN_STATUS_FAILURE; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckTxAuthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Auth Frame's Transaction Sequence -* Number before delivering it to the corresponding SAA or AAA Module. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain authentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxTransactionSeqNum; - - - ASSERT(prSwRfb); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Authentication Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_SUCCESS; - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - switch (u2RxTransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - saaFsmRunEventRxAuth(prAdapter, prSwRfb); - break; - - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: -#if CFG_SUPPORT_AAA - aaaFsmRunEventRxAuth(prAdapter, prSwRfb); -#endif /* CFG_SUPPORT_AAA */ - break; - - default: - DBGLOG(SAA, WARN, ("Strange Authentication Packet: Auth Trans Seq No = %d, Error Status Code = %d\n", - u2RxTransactionSeqNum, prAuthFrame->u2StatusCode)); - break; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameTransSeq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming Authentication Frame and take -* the status code out. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxAuthAlgNum; - UINT_16 u2RxTransactionSeqNum; - //UINT_16 u2RxStatusCode; // NOTE(Kevin): Optimized for ARM - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2RxAuthAlgNum); - u2RxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2RxAuthAlgNum != (UINT_16)prStaRec->ucAuthAlgNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with auth type = %d, current = %d\n", - u2RxAuthAlgNum, prStaRec->ucAuthAlgNum)); - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2RxTransactionSeqNum != u2TransactionSeqNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with Transaction Seq No = %d\n", - u2RxTransactionSeqNum)); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Get the Status code - //WLAN_GET_FIELD_16(&prAuthFrame->u2StatusCode, &u2RxStatusCode); - //*pu2StatusCode = u2RxStatusCode; - *pu2StatusCode = prAuthFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Challenge Text IE from the Authentication frame -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] prIEHdr Pointer to start address of IE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prSwRfb); - ASSERT(prIEHdr); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - u2TransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - /* Only consider SEQ_2 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_2) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY)) { - - /* Free previous allocated TCM memory */ - if (prStaRec->prChallengeText) { - ASSERT(0); - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - if ( ( prStaRec->prChallengeText = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, IE_SIZE(prIEHdr)) ) == NULL) { - return; - } - - /* Save the Challenge Text from Auth Seq 2 Frame, before sending Auth Seq 3 Frame */ - COPY_IE(prStaRec->prChallengeText, prIEHdr); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - PUINT_8 pucIEsBuffer; - UINT_16 u2IEsLen; - UINT_16 u2Offset; - UINT_8 ucIEID; - UINT_32 i; - - - ASSERT(prSwRfb); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - pucIEsBuffer = &prAuthFrame->aucInfoElem[0]; - u2IEsLen = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - IE_FOR_EACH(pucIEsBuffer, u2IEsLen, u2Offset) { - ucIEID = IE_ID(pucIEsBuffer); - - for (i = 0; i < (sizeof(rxAuthIETable) / sizeof(HANDLE_IE_ENTRY_T)); i++) { - - if (ucIEID == rxAuthIETable[i].ucElemID) { - rxAuthIETable[i].pfnHandleIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIEsBuffer); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth2_Auth4Frame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Deauthentication frame -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2StatusCode Status Code -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeDeauthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_8 aucBssid[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - ASSERT(aucBssid); - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Deauthentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DEAUTH; - - //WLAN_SET_FIELD_16(&prDeauthFrame->u2FrameCtrl, u2FrameCtrl); - prDeauthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDeauthFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucBSSID, aucBssid); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDeauthFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prDeauthFrame->u2ReasonCode, u2ReasonCode); - prDeauthFrame->u2ReasonCode = u2ReasonCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeDeauthFrameHeaderAndFF() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Deauthenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prClassErrSwRfb Pointer to the SW_RFB_T which is Class Error. -* @param[in] u2ReasonCode A reason code to indicate why to leave BSS. -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -* @retval WLAN_STATUS_FAILURE Didn't send Deauth frame for various reasons. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_WLAN_MAC_HEADER_A4_T prWlanMacHeader = NULL; - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - PUINT_8 pucBssid = NULL; - - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2RxFrameCtrl; - P_BSS_INFO_T prBssInfo; - - P_DEAUTH_INFO_T prDeauthInfo; - OS_SYSTIME rCurrentTime; - INT_32 i4NewEntryIndex, i; - UINT_8 ucStaRecIdx = STA_REC_INDEX_NOT_FOUND; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucBMC[] = BC_MAC_ADDR; -#endif - - /* NOTE(Kevin): The best way to reply the Deauth is according to the incoming data - * frame - */ - //4 <1> Find the Receiver Address first. - if (prClassErrSwRfb) { - BOOLEAN fgIsAbleToSendDeauth = FALSE; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_A4_T) prClassErrSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prWlanMacHeader->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prWlanMacHeader->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* TODO(Kevin): Currently we won't send Deauth for IBSS node. How about DLS ? */ - if ((prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) == 0) { - return WLAN_STATUS_FAILURE; - } - - /* Check if corresponding BSS is able to send Deauth */ - for (i = NETWORK_TYPE_AIS_INDEX; i < NETWORK_TYPE_INDEX_NUM; i++) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[i]); - - if (IS_NET_ACTIVE(prAdapter, i) && - (EQUAL_MAC_ADDR(prWlanMacHeader->aucAddr1, prBssInfo->aucOwnMacAddr))) { - { - fgIsAbleToSendDeauth = TRUE; - eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)i; - break; - } - } - } - - if (!fgIsAbleToSendDeauth) { - return WLAN_STATUS_FAILURE; - } - - pucReceiveAddr = prWlanMacHeader->aucAddr2; - - } - else if (prStaRec) { - - pucReceiveAddr = prStaRec->aucMacAddr; - } - else { -#if CFG_ENABLE_WIFI_DIRECT - pucReceiveAddr = aucBMC; -#else - return WLAN_STATUS_FAILURE; -#endif - } - - //4 <2> Check if already send a Deauth frame in MIN_DEAUTH_INTERVAL_MSEC - GET_CURRENT_SYSTIME(&rCurrentTime); - - i4NewEntryIndex = -1; - for (i = 0; i < MAX_DEAUTH_INFO_COUNT; i++) { - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i]); - - - /* For continuously sending Deauth frame, the minimum interval is - * MIN_DEAUTH_INTERVAL_MSEC. - */ - if (CHECK_FOR_TIMEOUT(rCurrentTime, - prDeauthInfo->rLastSendTime, - MSEC_TO_SYSTIME(MIN_DEAUTH_INTERVAL_MSEC))) { - - i4NewEntryIndex = i; - } - else if (EQUAL_MAC_ADDR(pucReceiveAddr, prDeauthInfo->aucRxAddr) && - (!pfTxDoneHandler)) { - - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Update information. - if (i4NewEntryIndex > 0) { - - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i4NewEntryIndex]); - - COPY_MAC_ADDR(prDeauthInfo->aucRxAddr, pucReceiveAddr); - prDeauthInfo->rLastSendTime = rCurrentTime; - } - else { - /* NOTE(Kevin): for the case of AP mode, we may encounter this case - * if deauth all the associated clients. - */ - DBGLOG(SAA, WARN, ("No unused DEAUTH_INFO_T !\n")); - } - - //4 <4> Allocate a PKT_INFO_T for Deauthentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - REASON_CODE_FIELD_LEN); - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Deauth Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <5> Find the Transmitter Address and BSSID. - if (prClassErrSwRfb) { - - /* The TA of Deauth is the A1 of RX frame */ - pucTransmitAddr = prWlanMacHeader->aucAddr1; - - switch (prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) { - - case MASK_FC_FROM_DS: - /* The BSSID of Deauth is the A2 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - case MASK_FC_TO_DS: - /* The BSSID of Deauth is the A1 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr1; - break; - - case MASK_TO_DS_FROM_DS: - /* TODO(Kevin): Consider BOW, now we set the BSSID of Deauth - * to the A2 of RX frame for temporary solution. - */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - /* No Default */ - } - - } - else if (prStaRec) { - eNetTypeIndex = prStaRec->ucNetTypeIndex; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - } -#if CFG_ENABLE_WIFI_DIRECT - else { - if (prAdapter->fgIsP2PRegistered) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ucStaRecIdx = STA_REC_INDEX_BMCAST; - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - } - else { - return WLAN_STATUS_FAILURE; - } - } - -#endif - - //4 <6> compose Deauthentication frame header and some fixed fields */ - authComposeDeauthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - pucBssid, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDeauthFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("authSendDeauthFrame with protection\n")); - } -#endif - - //4 <7> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = ((prStaRec == NULL)?ucStaRecIdx:prStaRec->ucIndex); - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + REASON_CODE_FIELD_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <8> Inform TXM to send this Deauthentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendDeauthFrame() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Deauthentication frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Deauthentication Frame. - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Deauthentication Frame. -#if 0 // Kevin: Seems redundant - WLAN_GET_FIELD_16(&prDeauthFrame->u2FrameCtrl, &u2RxFrameCtrl) - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (u2RxFrameCtrl != MAC_FRAME_DEAUTH) { - return WLAN_STATUS_FAILURE; - } -#endif - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Deauth Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDeauthFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Deauth Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDeauthFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDeauthFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxDeauthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucExpectedBSSID Given Expected BSSID. -* @param[in] u2ExpectedAuthAlgNum Given Expected Authentication Algorithm Number -* @param[in] u2ExpectedTransSeqNum Given Expected Transaction Sequence Number. -* @param[out] pu2ReturnStatusCode Return Status Code. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -* @retval WLAN_STATUS_FAILURE The frame we will ignore. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2ReturnStatusCode = STATUS_CODE_SUCCESSFUL; - - - ASSERT(prSwRfb); - ASSERT(aucExpectedBSSID); - ASSERT(pu2ReturnStatusCode); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Check the BSSID - if (UNEQUAL_MAC_ADDR(prAuthFrame->aucBSSID, aucExpectedBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - if (prAuthFrame->u2AuthAlgNum != u2ExpectedAuthAlgNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED; - } - - if (prAuthFrame->u2AuthTransSeqNo != u2ExpectedTransSeqNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_OUT_OF_SEQ; - } - - *pu2ReturnStatusCode = u2ReturnStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth1Frame() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/bss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/bss.c deleted file mode 100755 index f70a98e5b29b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/bss.c +++ /dev/null @@ -1,2816 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/bss.c#3 $ -*/ - -/*! \file "bss.c" - \brief This file contains the functions for creating BSS(AP)/IBSS(AdHoc). - - This file contains the functions for BSS(AP)/IBSS(AdHoc). We may create a BSS/IBSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - - - -/* -** $Log: bss.c $ -** -** 07 29 2013 yuche.tsai -** [ALPS00818788] [PreRC1][Mobile HotSpot]DUT should support hidden SSID broadcast for Mobile HotSpot -** Support hidden SSID for MT6630. -** FW Label: 20130729_ALPS_WIFI_FW_MT6620_V1_12 -** -** 08 29 2012 chinglan.wang -** [ALPS00349664] [6577JB][WIFI] Phone can not connect to AP secured with AES via WPS in 802.11n Only -** . -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 14 2012 chinglan.wang - * NULL - * Fix the losing of the HT IE in assoc request.. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 08 2012 yuche.tsai - * NULL - * Fix FW assert when start Hot-Spot. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 20 2012 chinglan.wang - * 03 02 2012 terry.wu - * NULL - * Fix the WPA-PSK TKIP and WPA2-PSK AES security mode bug. - * - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 15 2012 yuche.tsai - * NULL - * Fix wrong basic rate issue. - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Always set short slot time to TRUE initially in AP mode - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 29 2011 eddie.chen - * [WCXRP00000608] [MT6620 Wi-Fi][DRV] Change wmm parameters in beacon - * Change wmm parameters in beacon. - * - * 03 29 2011 yuche.tsai - * [WCXRP00000607] [Volunteer Patch][MT6620][Driver] Coding Style Fix for klocwork scan. - * Fix klocwork issue. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * modify to handle if beacon MSDU been released when BSS deactivated - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * bss should create station record type according to callers input. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * In p2p link function, check networktype before calling p2p function. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Modify p2p link function to avoid assert. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Fix the compile error in windows. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * .Fix typo and missing entry - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Fix prBssInfo->aucCWminLog to prBssInfo->aucCWminLogForBcast - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 16 2010 yuche.tsai - * NULL - * Before composing Beacon IE, assign network type index for msdu info, - * this information is needed by RLM module while composing some RLM related IE field. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Fix undefined pucDestAddr in bssUpdateBeaconContent() - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 26 2010 yuche.tsai - * - * Add support to RX probe response for P2P. - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fix compilation error when WIFI_DIRECT is turned on - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update bssProcessProbeRequest() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Use TX MGMT Frame API for sending PS NULL frame to avoid the TX Burst Mechanism in TX FW Frame API - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Seperate Beacon and ProbeResp IE array - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 20 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Fix restart Beacon Timeout Func after connection diagnosis - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename the CFG flags - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing beacon's TX data rate - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to define - BAND_24G and specific BSS_INFO_T was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -APPEND_VAR_IE_ENTRY_T txBcnIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - ,{ 0, p2pFuncCalculateExtra_IELenForBeacon, p2pFuncGenerateExtra_IEForBeacon } /* 221 */ -#else - ,{ 0, p2pFuncCalculateP2p_IELenForBeacon, p2pFuncGenerateP2p_IEForBeacon } /* 221 */ - ,{ 0, p2pFuncCalculateWSC_IELenForBeacon, p2pFuncGenerateWSC_IEForBeacon } /* 221 */ -#endif -#endif /* CFG_ENABLE_WIFI_DIRECT */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create or reset a STA_RECORD_T by given BSS_DESC_T for -* Infrastructure or AdHoc Mode. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eStaType Assign STA Type for this STA_RECORD_T -* @param[in] eNetTypeIndex Assign Net Type Index for this STA_RECORD_T -* @param[in] prBssDesc Received Beacon/ProbeResp from this STA -* -* @retval Pointer to STA_RECORD_T -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_STA_RECORD_T prStaRec; - UINT_8 ucNonHTPhyTypeSet; - - - ASSERT(prBssDesc); - - //4 <1> Get a valid STA_RECORD_T - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - if (!prStaRec) { - - prStaRec = cnmStaRecAlloc(prAdapter, (UINT_8) eNetTypeIndex); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - - if(!prStaRec) { - ASSERT(FALSE); - return NULL; - } - - ASSERT(prStaRec); - - prStaRec->ucJoinFailureCount = 0; - /* TODO(Kevin): If this is an old entry, we may also reset the ucJoinFailureCount to 0. - */ - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prBssDesc->aucSrcAddr); - } - - - //4 <2> Setup STA TYPE and NETWORK - prStaRec->eStaType = eStaType; - - prStaRec->ucNetTypeIndex = eNetTypeIndex; - - - //4 <3> Update information from BSS_DESC_T to current P_STA_RECORD_T - prStaRec->u2CapInfo = prBssDesc->u2CapInfo; - - prStaRec->u2OperationalRateSet = prBssDesc->u2OperationalRateSet; - prStaRec->u2BSSBasicRateSet = prBssDesc->u2BSSBasicRateSet; - - prStaRec->ucPhyTypeSet = prBssDesc->ucPhyTypeSet; - - if (!((prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_KEY_ABSENT) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION_DISABLED) || - (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) || - (prAdapter->prGlueInfo->u2WapiAssocInfoIESz))) { - DBGLOG(BSS, INFO, ("Ignore the HT Bit for TKIP as pairwise cipher configed!\n")); - prStaRec->ucPhyTypeSet &= ~PHY_TYPE_BIT_HT; - } - - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prAdapter->rWifiVar.ucAvailablePhyTypeSet; - - ucNonHTPhyTypeSet = prStaRec->ucDesiredPhyTypeSet & PHY_TYPE_SET_802_11ABG; - - /* Check for Target BSS's non HT Phy Types */ - if (ucNonHTPhyTypeSet) { - - if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_ERP) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_OFDM) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = TRUE; - } - else { - /* Use mandatory for 11N only BSS */ - ASSERT(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N); - - { - /* TODO(Kevin): which value should we set for 11n ? ERP ? */ - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = FALSE; - } - - /* Update non HT Desired Rate Set */ - { - P_CONNECTION_SETTINGS_T prConnSettings; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prStaRec->u2DesiredNonHTRateSet = - (prStaRec->u2OperationalRateSet & prConnSettings->u2DesiredNonHTRateSet); - } - - //4 <4> Update information from BSS_DESC_T to current P_STA_RECORD_T - if (IS_AP_STA(prStaRec)) { - /* do not need to parse IE for DTIM, - * which have been parsed before inserting into BSS_DESC_T - */ - if (prBssDesc->ucDTIMPeriod) { - prStaRec->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - } - else { - prStaRec->ucDTIMPeriod = 0; // Means that TIM was not parsed. - } - } - - - //4 <5> Update default value - prStaRec->fgDiagnoseConnection = FALSE; - - - //4 <6> Update default value for other Modules - /* Determine fgIsWmmSupported and fgIsUapsdSupported in STA_REC */ - mqmProcessScanResult(prAdapter, prBssDesc, prStaRec); - - return prStaRec; - -} /* end of bssCreateStaRecFromBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ) -{ - P_WLAN_MAC_HEADER_T prNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prNullFrame = (P_WLAN_MAC_HEADER_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prNullFrame->u2FrameCtrl, u2FrameCtrl); - prNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prNullFrame->u2SeqCtrl = 0; - - return; - -} /* end of bssComposeNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the QoS Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* @param[in] ucUP User Priority. -* @param[in] fgSetEOSP Set the EOSP bit. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ) -{ - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - UINT_16 u2QosControl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_QOS_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send QoS Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the QoS Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2FrameCtrl, u2FrameCtrl); - prQoSNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prQoSNullFrame->u2SeqCtrl = 0; - - u2QosControl = (UINT_16)(ucUP & WMM_QC_UP_MASK); - - if (fgSetEOSP) { - u2QosControl |= WMM_QC_EOSP; - } - - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2QosCtrl, u2QosControl); - prQoSNullFrame->u2QosCtrl = u2QosControl; // NOTE(Kevin): Optimized for ARM - - return; - -} /* end of bssComposeQoSNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Succe]ss. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeNullFrame(prAdapter, - (PUINT_8)((UINT_32)prMsduInfo->prPacket + MAC_TX_RESERVED_FIELD), - prStaRec); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ BSS_DEFAULT_CONN_TEST_NULL_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendNullFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the QoS Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - FALSE); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_QOS_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_QOS_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ TXM_DEFAULT_DATA_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendQoSNullFrame() */ - - -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate Information Elements of Extended -* Support Rate -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - PUINT_8 pucBuffer; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucExtSupRatesLen = 0; - } - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ELEM_MAX_LEN_SUP_RATES], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of bssGenerateExtSuppRate_IE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Beacon -* or Probe Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ) -{ - PUINT_8 pucBuffer; - UINT_8 ucSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - /* Compose the frame body of the Probe Response frame. */ - //4 <1> Fill the SSID element. -#if 1 - if (prBssInfo->eHiddenSsidType == ENUM_HIDDEN_SSID_LEN) { - if ((!pucDestAddr) && // For Beacon only. - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - SSID_IE(pucBuffer)->ucLength = 0; - } else { // probe response - SSID_IE(pucBuffer)->ucLength = prBssInfo->ucSSIDLen; - if (prBssInfo->ucSSIDLen) { - kalMemCopy(SSID_IE(pucBuffer)->aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - } - } - } - else { - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - SSID_IE(pucBuffer)->ucLength = prBssInfo->ucSSIDLen; - if (prBssInfo->ucSSIDLen) { - kalMemCopy(SSID_IE(pucBuffer)->aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - } - } -#else - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - SSID_IE(pucBuffer)->ucLength = prBssInfo->ucSSIDLen; - if (prBssInfo->ucSSIDLen) { - kalMemCopy(SSID_IE(pucBuffer)->aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - } -#endif - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - - //4 <2> Fill the Supported Rates element. - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - } - - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <3> Fill the DS Parameter Set element. - if (prBssInfo->eBand == BAND_2G4) { - DS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_DS_PARAM_SET; - DS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_DS_PARAMETER_SET; - DS_PARAM_IE(pucBuffer)->ucCurrChnl = prBssInfo->ucPrimaryChannel; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <4> IBSS Parameter Set element, ID: 6 - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - IBSS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_IBSS_PARAM_SET; - IBSS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_IBSS_PARAMETER_SET; - WLAN_SET_FIELD_16(&(IBSS_PARAM_IE(pucBuffer)->u2ATIMWindow), prBssInfo->u2ATIMWindow); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <5> TIM element, ID: 5 - if ((!pucDestAddr) && // For Beacon only. - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - -#if CFG_ENABLE_WIFI_DIRECT - /*no fgIsP2PRegistered protect*/ - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { -#if 0 - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_8 ucBitmapControl = 0; - UINT_32 u4N1, u4N2; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - // Clear existing value. - prP2pSpecificBssInfo->ucBitmapCtrl = 0; - kalMemZero(prP2pSpecificBssInfo->aucPartialVirtualBitmap, - sizeof(prP2pSpecificBssInfo->aucPartialVirtualBitmap)); - - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucDTIMCount = prBssInfo->ucDTIMCount; - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount == 0) { - //3 *** pmQueryBufferedBCAST(); - } - - //3 *** pmQueryBufferedPSNode(); - /* TODO(Kevin): Call PM Module here to loop all STA_RECORD_Ts and it - * will call bssSetTIMBitmap to toggle the Bitmap. - */ - - // Set Virtual Bitmap for UCAST - u4N1 = (prP2pSpecificBssInfo->u2SmallestAID >> 4) << 1; // Find the largest even number. - u4N2 = prP2pSpecificBssInfo->u2LargestAID >> 3; // Find the smallest number. - - ASSERT(u4N2 >= u4N1); - - kalMemCopy(TIM_IE(pucBuffer)->aucPartialVirtualMap, - &prP2pSpecificBssInfo->aucPartialVirtualBitmap[u4N1], - ((u4N2 - u4N1) + 1)); - - // Set Virtual Bitmap for BMCAST - // BMC bit only indicated when DTIM count == 0. - if (prBssInfo->ucDTIMCount == 0) { - ucBitmapControl = prP2pSpecificBssInfo->ucBitmapCtrl; - } - TIM_IE(pucBuffer)->ucBitmapControl = ucBitmapControl | (UINT_8)u4N1; - - TIM_IE(pucBuffer)->ucLength = ((u4N2 - u4N1) + 4); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); -#else - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -#endif - - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - /* NOTE(Kevin): 1. AIS - Didn't Support AP Mode. - * 2. BOW - Didn't Support BCAST and PS. - */ - } - - - - } - - return; -} /* end of bssBuildBeaconProbeRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Beacon/Probe Response frame header and -* its fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* @param[in] pucOwnMACAddress Given Our MAC Address. -* @param[in] pucBSSID Given BSSID of the BSS. -* @param[in] u2BeaconInterval Given Beacon Interval. -* @param[in] u2CapInfo Given Capability Info. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ) -{ - P_WLAN_BEACON_FRAME_T prBcnProbRspFrame; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - UINT_16 u2FrameCtrl; - - DEBUGFUNC("bssComposeBeaconProbeRespFrameHeaderAndFF"); - //DBGLOG(INIT, LOUD, ("\n")); - - - ASSERT(pucBuffer); - ASSERT(pucOwnMACAddress); - ASSERT(pucBSSID); - - prBcnProbRspFrame = (P_WLAN_BEACON_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Beacon /ProbeResp frame. - /* Fill the Frame Control field. */ - if (pucDestAddr) { - u2FrameCtrl = MAC_FRAME_PROBE_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_BEACON; - pucDestAddr = aucBCAddr; - } - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2FrameCtrl, u2FrameCtrl); - prBcnProbRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with BCAST MAC ADDR or TA of ProbeReq. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucDestAddr, pucDestAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucSrcAddr, pucOwnMACAddress); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucBSSID, pucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prBcnProbRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the Beacon /ProbeResp frame. - /* MAC will update TimeStamp field */ - - /* Fill the Beacon Interval field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2BeaconInterval, u2BeaconInterval); - prBcnProbRspFrame->u2BeaconInterval = u2BeaconInterval; // NOTE(Kevin): Optimized for ARM - - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2CapInfo, u2CapInfo); - prBcnProbRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of bssComposeBeaconProbeRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the Beacon Frame Template to FW for AIS AdHoc and P2P GO. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_WLAN_BEACON_FRAME_T prBcnFrame; - UINT_32 i; - - DEBUGFUNC("bssUpdateBeaconContent"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - //4 <1> Allocate a PKT_INFO_T for Beacon Frame - /* Allocate a MSDU_INFO_T */ - // For Beacon - prMsduInfo = prBssInfo->prBeacon; - - // beacon prMsduInfo will be NULLify once BSS deactivated, so skip if it is - if (prMsduInfo == NULL) { - return WLAN_STATUS_SUCCESS; - } - - //4 <2> Compose header - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - NULL, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - - - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - prMsduInfo->ucNetworkType = eNetTypeIndex; - - //4 <3> Compose the frame body's Common IEs of the Beacon frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, NULL); - - - //4 <4> Compose IEs in MSDU_INFO_T - - /* Append IE for Beacon */ - for (i = 0; i < sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txBcnIETable[i].pfnAppendIE) { - txBcnIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - eNetTypeIndex, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - -} /* end of bssUpdateBeaconContent() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Beacon Frame(for BOW) or Probe Response Frame according to the given -* Destination Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* @param[in] pucDestAddr Pointer to the Destination Address to reply -* @param[in] u4ControlFlags Control flags for information on Probe Response. -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedFixedIELen; - UINT_16 u2EstimatedExtraIELen; - P_APPEND_VAR_IE_ENTRY_T prIeArray = NULL; - UINT_32 u4IeArraySize = 0; - UINT_32 i; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - - if (!pucDestAddr) { // For Beacon - prIeArray = &txBcnIETable[0]; - u4IeArraySize = sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - else { - prIeArray = &txProbRspIETable[0]; - u4IeArraySize = sizeof(txProbRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - - - //4 <1> Allocate a PKT_INFO_T for Beacon /Probe Response Frame - /* Allocate a MSDU_INFO_T */ - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Fields */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_IBSS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + (3 + MAX_LEN_TIM_PARTIAL_BMP)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < u4IeArraySize; i++) { - u2EstimatedFixedIELen = prIeArray[i].u2EstimatedFixedIELen; - - if (u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += u2EstimatedFixedIELen; - } - else { - ASSERT(prIeArray[i].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16) - prIeArray[i].pfnCalculateVariableIELen(prAdapter, eNetTypeIndex, NULL); - } - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending %s.\n", - ((!pucDestAddr)?"Beacon":"Probe Response"))); - return WLAN_STATUS_RESOURCES; - } - - - //4 <2> Compose Beacon/Probe Response frame header and fixed fields in MSDU_INfO_T. - /* Compose Header and Fixed Field */ -#if CFG_ENABLE_WIFI_DIRECT - if (u4ControlFlags & BSS_PROBE_RESP_USE_P2P_DEV_ADDR) { - if(prAdapter->fgIsP2PRegistered) { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prAdapter->rWifiVar.aucDeviceAddress, - prAdapter->rWifiVar.aucDeviceAddress, - DOT11_BEACON_PERIOD_DEFAULT, - (prBssInfo->u2CapInfo & ~(CAP_INFO_ESS | CAP_INFO_IBSS))); - } - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - } - - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - - //4 <4> Compose the frame body's Common IEs of the Beacon/ProbeResp frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, pucDestAddr); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < u4IeArraySize; i++) { - if (prIeArray[i].pfnAppendIE) { - prIeArray[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Beacon /Probe Response frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendBeaconProbeResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - UINT_8 aucBCBSSID[] = BC_BSSID; - BOOLEAN fgIsBcBssid; - BOOLEAN fgReplyProbeResp; - UINT_32 u4CtrlFlagsForProbeResp = 0; - ENUM_BAND_T eBand; - UINT_8 ucHwChannelNum; - - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get BSSID - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - if (EQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID)) { - fgIsBcBssid = TRUE; - } - else { - fgIsBcBssid = FALSE; - } - - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if ((!fgIsBcBssid) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - continue; - } - - eBand = HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr); - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - - if(prBssInfo->eBand != eBand) { - continue; - } - - if(prBssInfo->ucPrimaryChannel != ucHwChannelNum) { - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - -#if CFG_SUPPORT_ADHOC - fgReplyProbeResp = aisValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); -#endif - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex)) { - - fgReplyProbeResp = p2pFuncValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - fgReplyProbeResp = bowValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif - - if (fgReplyProbeResp) { - if(nicTxGetFreeCmdCount(prAdapter) > (CFG_TX_MAX_CMD_PKT_NUM/2) ){ - /* Resource margin is enough */ - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr, u4CtrlFlagsForProbeResp); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ - - -#if 0 // NOTE(Kevin): condition check should move to P2P_FSM.c -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_8 aucBCBSSID[] = BC_BSSID; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - BOOLEAN fgReplyProbeResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgP2PTargetDeviceFound; - UINT_8 aucP2PWildcardSSID[] = P2P_WILDCARD_SSID; -#endif - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get SSID IE ptr - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - prIeSsid = (P_IE_SSID_T)NULL; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - // if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SUP_RATES) { - if (IE_LEN(pucIE) <= RATE_NUM) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - -#if CFG_ENABLE_WIFI_DIRECT - // TODO: P2P IE & WCS IE parsing for P2P. - case ELEM_ID_P2P: - - break; -#endif - - /* no default */ - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (UNEQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - /* BSSID not Wildcard BSSID. */ - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - /* TODO(Kevin): Check if we are IBSS Master. */ - if (TRUE) { - - if (prIeSsid) { - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } - } - } -#if CFG_ENABLE_WIFI_DIRECT - else if (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex) { - - // TODO(Kevin): Move following lines to p2p_fsm.c - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || - (EQUAL_SSID(aucP2PWildcardSSID, - P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, - prIeSsid->ucLength)))) { -// if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prMgtHdr->aucSrcAddr, pucIE, u2IELength)) { - if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prSwRfb)) { - /* Extand channel request time & cancel scan request. */ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - // TODO: RX probe request may not caused by LISTEN state. - // TODO: It can be GO. - /* Generally speaking, cancel a non-exist scan request is fine. - * We can check P2P FSM here for only LISTEN state. - */ - - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - ASSERT(0); // Can't abort SCN FSM - continue; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prP2pFsmInfo->ucSeqNumOfScnMsg; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->fgIsChannelExt = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - /* 1. Probe Request without SSID. - * 2. Probe Request with SSID not Wildcard SSID & not P2P Wildcard SSID. - */ - continue; - } - -#if 0 // Frog - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_LISTEN) { - // P2P 2.4.1 - P2P Devices shall not respond to Probe Request frames which only contain 11b rates only. - if (prIeSupportedRate || prIeExtSupportedRate) { - UINT_16 u2OperationalRateSet, u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if (u2OperationalRateSet & ~RATE_SET_HR_DSSS) { - continue; - } - } - } - - // TODO: Check channel time before first check point to: - /* If Target device is selected: - * 1. Send XXXX request frame. - * else - * 1. Send Probe Response frame. - */ - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): During PROVISION state, can we reply Probe Response ? */ - - /* TODO(Kevin): - * If we are GO, accept legacy client --> accept Wildcard SSID - * If we are in Listen State, accept only P2P Device --> check P2P IE and WPS IE - */ - if (TRUE /* We are GO */) { - if (prIeSsid) { - UINT_8 aucSSID[]=P2P_WILDCARD_SSID; - - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength) || - EQUAL_SSID(aucSSID, P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } -// else if (FALSE /* We are in Listen State */) { -// } - - /* TODO(Kevin): Check P2P IE and WPS IE */ - } -#endif - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): TBD */ - } - } -#endif - else { - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - } - - if (fgReplyProbeResp) { - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr); - } - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to clear the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prPeerStaRec; - - LINK_FOR_EACH_ENTRY(prPeerStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - cnmStaRecChangeState(prAdapter, prPeerStaRec, STA_STATE_1); - } - - LINK_INITIALIZE(prStaRecOfClientList); - } - - return; -} /* end of bssClearClientList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Add a STA_RECORD_T to the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - DBGLOG(BSS, WARN, ("Current Client List already contains that STA_RECORD_T["MACSTR"]\n", - MAC2STR(prStaRec->aucMacAddr))); - return; - } - } - } - - LINK_INSERT_TAIL(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; -} /* end of bssAddStaRecToClientList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Remove a STA_RECORD_T from the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - -#if 0 - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; - } - } - } -#endif - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prStaRec->rLinkEntry); - return; - } - } - } - - - DBGLOG(BSS, INFO, ("Current Client List didn't contain that STA_RECORD_T["MACSTR"] before removing.\n", - MAC2STR(prStaRec->aucMacAddr))); - - return; -} /* end of bssRemoveStaRecFromClientList() */ -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to process Beacons from current Ad-Hoc network peers. -* We also process Beacons from other Ad-Hoc network during SCAN. If it has -* the same SSID and we'll decide to merge into it if it has a larger TSF. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ) -{ - P_STA_RECORD_T prStaRec = NULL; - - BOOLEAN fgIsCheckCapability = FALSE; - BOOLEAN fgIsCheckTSF = FALSE; - BOOLEAN fgIsGoingMerging = FALSE; - BOOLEAN fgIsSameBSSID; - - - ASSERT(prBssInfo); - ASSERT(prBssDesc); - - //4 <1> Process IBSS Beacon only after we create or merge with other IBSS. - if (!prBssInfo->fgIsBeaconActivated) { - return; - } - - //4 <2> Get the STA_RECORD_T of TA. - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prBssDesc->aucSrcAddr); - - fgIsSameBSSID = UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID) ? FALSE : TRUE; - - - //4 <3> IBSS Merge Decision Flow for Processing Beacon. - if (fgIsSameBSSID) { - - /* Same BSSID: - * Case I. This is a new TA and it has decide to merged with us. - * a) If fgIsMerging == FALSE - we will send msg to notify AIS. - * b) If fgIsMerging == TRUE - already notify AIS. - * Case II. This is an old TA and we've already merged together. - */ - if (!prStaRec) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - - } - else { - - ASSERT((prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) && - IS_ADHOC_STA(prStaRec)); - - if (prStaRec->ucStaState != STA_STATE_3) { - - if (!prStaRec->fgIsMerging) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - - } - } - else { - - /* Unequal BSSID: - * Case III. This is a new TA and we need to compare the TSF and get the winner. - * Case IV. This is an old TA and it merge into a new IBSS before we do the same thing. - * We need to compare the TSF to get the winner. - * Case V. This is an old TA and it restart a new IBSS. We also need to - * compare the TSF to get the winner. - */ - - /* For Case III, IV & V - We'll always check this new IBSS's capability first - * before merging into new IBSS. - */ - fgIsCheckCapability = TRUE; - - /* If check is passed, we need to perform TSF check to decide the major BSSID */ - fgIsCheckTSF = TRUE; - - /* For Case IV & V - We won't update rExpirationTime of Sta Record */ - } - - - //4 <7> Check this BSS_DESC_T's capability. - if (fgIsCheckCapability) { - BOOLEAN fgIsCapabilityMatched = FALSE; - - do { - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unsupported Phy.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unknown Basic Rate.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - fgIsCapabilityMatched = TRUE; - } - while (FALSE); - - if (!fgIsCapabilityMatched) { - - if (prStaRec) { - /* For Case II - We merge this STA_RECORD in RX Path. - * Case IV & V - They change their BSSID after we merge with them. - */ - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - return; - } - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Peer MAC: "MACSTR" - Check capability was passed.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - - if (fgIsCheckTSF) { -#if CFG_SLT_SUPPORT - fgIsGoingMerging = TRUE; -#else - if (prBssDesc->fgIsLargerTSF) { - fgIsGoingMerging = TRUE; - } - else { - return; - } -#endif - } - - - if (fgIsGoingMerging) { - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = TRUE; - prBssDesc->fgIsConnected = FALSE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - if(!prStaRec) { - // no memory ? - return; - } - - prStaRec->fgIsMerging = TRUE; - - /* update RCPI */ - prStaRec->ucRCPI = ucRCPI; - - //4 <3> Send Merge Msg to CNM to obtain the channel privilege. - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_IBSS_PEER_FOUND_T)); - - if (!prAisIbssPeerFoundMsg) { - - ASSERT(0); // Can't send Merge Msg - return; - } - - prAisIbssPeerFoundMsg->rMsgHdr.eMsgId = MID_SCN_AIS_FOUND_IBSS; - prAisIbssPeerFoundMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - prAisIbssPeerFoundMsg->prStaRec = prStaRec; - - /* Inform AIS to do STATE TRANSITION - * For Case I - If AIS in IBSS_ALONE, let it jump to NORMAL_TR after we know the new member. - * For Case III, IV - Now this new BSSID wins the TSF, follow it. - */ - if (fgIsSameBSSID) { - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; - } - else { -#if CFG_SLT_SUPPORT - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; -#else - prAisIbssPeerFoundMsg->fgIsMergeIn = (prBssDesc->fgIsLargerTSF) ? FALSE: TRUE; -#endif - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisIbssPeerFoundMsg, - MSG_SEND_METHOD_BUF); - - } - - return; -} /* end of ibssProcessMatchedBeacon() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the Capability for Ad-Hoc to decide if we are -* able to merge with(same capability). -* -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @retval WLAN_STATUS_FAILURE Can't pass the check of Capability. -* @retval WLAN_STATUS_SUCCESS Pass the check of Capability. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - - - ASSERT(prBssDesc); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - //4 <1> Check the BSS Basic Rate Set for current AdHoc Mode - if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11B) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_HR_DSSS)) { - break; - } - else if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11A) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_OFDM)) { - break; - } - - //4 <2> Check the Short Slot Time. -#if 0 // Do not check ShortSlotTime until Wi-Fi define such policy - if (prConnSettings->eAdHocMode == AD_HOC_MODE_11G) { - if (((prConnSettings->fgIsShortSlotTimeOptionEnable) && - !(prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) || - (!(prConnSettings->fgIsShortSlotTimeOptionEnable) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME))) { - break; - } - } -#endif - - //4 <3> Check the ATIM window setting. - if (prBssDesc->u2ATIMWindow) { - DBGLOG(BSS, INFO, ("AdHoc PS was not supported(ATIM Window: %d)\n", - prBssDesc->u2ATIMWindow)); - break; - } - -#if CFG_RSN_MIGRATION - //4 <4> Check the Security setting. - if (!rsnPerformPolicySelection(prAdapter, prBssDesc)) { - break; - } -#endif - - rStatus = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - return rStatus; - -} /* end of ibssCheckCapabilityForAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for IBSS Mode. -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLowestBasicRateIndex; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - PUINT_16 pu2BSSID = (PUINT_16)&aucBSSID[0]; - UINT_32 i; - - - ASSERT(prBssInfo); - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_IBSS); - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - - //4 <2> Setup BSSID - if (!prBssInfo->fgHoldSameBssidForIBSS) { - - for (i = 0; i < sizeof(aucBSSID)/sizeof(UINT_16); i++) { - pu2BSSID[i] = (UINT_16)(kalRandomNumber() & 0xFFFF); - } - - aucBSSID[0] &= ~0x01; // 7.1.3.3.3 - The individual/group bit of the address is set to 0. - aucBSSID[0] |= 0x02; // 7.1.3.3.3 - The universal/local bit of the address is set to 1. - - COPY_MAC_ADDR(prBssInfo->aucBSSID, aucBSSID); - } - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_IBSS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - return; -} /* end of ibssInitForAdHoc() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -#if CFG_SUPPORT_AAA - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for AP Mode. -* -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ) -{ - UINT_8 ucLowestBasicRateIndex; - - P_AC_QUE_PARMS_T prACQueParms; - - ENUM_WMM_ACI_T eAci; - - UINT_8 auCWminLog2ForBcast[WMM_AC_INDEX_NUM] = { 4/*BE*/, 4 /*BK*/, 3/*VO*/, 2/*VI*/}; - UINT_8 auCWmaxLog2ForBcast[WMM_AC_INDEX_NUM] = { 10, 10, 4, 3}; - UINT_8 auAifsForBcast[WMM_AC_INDEX_NUM] = { 3, 7, 2, 2 }; - UINT_8 auTxopForBcast[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - UINT_8 auCWminLog2[WMM_AC_INDEX_NUM] = { 4 /*BE*/, 4 /*BK*/, 3 /*VO*/, 2 /*VI*/}; - UINT_8 auCWmaxLog2[WMM_AC_INDEX_NUM] = { 7, 10, 4, 3}; - UINT_8 auAifs[WMM_AC_INDEX_NUM] = { 3, 7, 1, 1 }; - UINT_8 auTxop[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - DEBUGFUNC("bssInitForAP"); - DBGLOG(BSS, LOUD,("\n")); - - ASSERT(prBssInfo); - ASSERT((prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || (prBssInfo->eCurrentOPMode == OP_MODE_BOW)); - -#if 0 - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = CONFIG_BW_20M; -#endif - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (fgIsRateUpdate) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <2> Setup BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssInfo->aucOwnMacAddr); - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - prBssInfo->fgUseShortSlotTime = TRUE; - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_ESS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - - //4 <7> Fill the EDCA - - prACQueParms = prBssInfo->arACQueParmsForBcast; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifsForBcast[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxopForBcast[eAci]; - - prBssInfo->aucCWminLog2ForBcast[eAci] = auCWminLog2ForBcast[eAci] ; /* used to send WMM IE */ - prBssInfo->aucCWmaxLog2ForBcast[eAci] = auCWmaxLog2ForBcast[eAci] ; - - DBGLOG(BSS, INFO, ("Bcast: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - - } - - prACQueParms = prBssInfo->arACQueParms; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifs[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxop[eAci]; - - DBGLOG(BSS, INFO, ("eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - } - - /* Note: Caller should update the EDCA setting to HW by nicQmUpdateWmmParms() it there is no AIS network */ - /* Note: In E2, only 4 HW queues. The the Edca parameters should be folow by AIS network */ - /* Note: In E3, 8 HW queues. the Wmm parameters should be updated to right queues according to BSS */ - - - return; -} /* end of bssInitForAP() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update DTIM Count -* -* @param[in] eNetTypeIndex Specify which network to update -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount > 0) { - prBssInfo->ucDTIMCount--; - } - else { - - ASSERT(prBssInfo->ucDTIMPeriod > 0); - - prBssInfo->ucDTIMCount = prBssInfo->ucDTIMPeriod - 1; - } - } - - return; -} /* end of bssUpdateDTIMIE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to set the Virtual Bitmap in TIM Information Elements -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] u2AssocId The association id to set in Virtual Bitmap. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ) -{ - - ASSERT(prBssInfo); - - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - /* Use Association ID == 0 for BMCAST indication */ - if (u2AssocId == 0) { - - prP2pSpecificBssInfo->ucBitmapCtrl |= (UINT_8)BIT(0); - } - else { - PUINT_8 pucPartialVirtualBitmap; - UINT_8 ucBitmapToSet; - - - pucPartialVirtualBitmap = &prP2pSpecificBssInfo->aucPartialVirtualBitmap[(u2AssocId >> 3)]; // (u2AssocId / 8) - ucBitmapToSet = (UINT_8) BIT((u2AssocId % 8)); - - if (*pucPartialVirtualBitmap & ucBitmapToSet) { - /* The virtual bitmap has been set */ - return; - } - - *pucPartialVirtualBitmap |= ucBitmapToSet; - - // Update u2SmallestAID and u2LargestAID - if ((u2AssocId < prP2pSpecificBssInfo->u2SmallestAID) || - (prP2pSpecificBssInfo->u2SmallestAID == 0)) { - prP2pSpecificBssInfo->u2SmallestAID = u2AssocId; - } - - if ((u2AssocId > prP2pSpecificBssInfo->u2LargestAID) || - (prP2pSpecificBssInfo->u2LargestAID == 0)) { - prP2pSpecificBssInfo->u2LargestAID = u2AssocId; - } - } - } - - return; -} /* end of bssSetTIMBitmap() */ -#endif - -#endif /* CFG_SUPPORT_AAA */ - - -VOID -bssCreateStaRecFromAuth ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - -VOID -bssUpdateStaRecFromAssocReq ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm.c deleted file mode 100755 index 1af871d96310..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm.c +++ /dev/null @@ -1,775 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm.c#2 $ -*/ - -/*! \file "cnm.c" - \brief Module of Concurrent Network Management - - Module of Concurrent Network Management -*/ - - - -/* -** $Log: cnm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Fix possible wrong message when P2P is unregistered - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 01 2011 cm.chang - * [WCXRP00001077] [All Wi-Fi][Driver] Fix wrong preferred channel for AP and BOW - * Only check AIS channel for P2P and BOW - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Extension channel of some 5G AP will not follow regulation requirement - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 01 2011 cm.chang - * [WCXRP00000937] [MT6620 Wi-Fi][Driver][FW] cnm.c line #848 assert when doing monkey test - * Print message only in Linux platform for monkey testing - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Check if P2P network index is Tethering AP - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 02 17 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * When P2P registried, invoke BOW deactivate function - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix wrong message ID for channel grant to requester - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set 20/40M bandwidth of AP HT OP before association process - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 21 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support TCP/UDP/IP Checksum offload feature - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 04 27 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * BMC mac address shall be ignored in basic config command - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support change of MAC address by host command - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix bug for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove conditional compiling FPGA_V5 - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before handle the message from other module, it need to obtain -* the Channel privilege from Channel Manager -* -* @param[in] prMsgHdr The message need to be handled. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_REQ_T prMsgChReq; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChReq = (P_MSG_CH_REQ_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChReq: fail to get buf (net=%d, token=%d)\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(CNM, INFO, ("ChReq net=%d token=%d b=%d c=%d s=%d\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID, - prMsgChReq->eRfBand, prMsgChReq->ucPrimaryChannel, - prMsgChReq->eRfSco)); - - prCmdBody->ucNetTypeIndex = prMsgChReq->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChReq->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_REQ; /* Request */ - prCmdBody->ucPrimaryChannel = prMsgChReq->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prMsgChReq->eRfSco; - prCmdBody->ucRfBand = (UINT_8) prMsgChReq->eRfBand; - prCmdBody->ucReqType = (UINT_8) prMsgChReq->eReqType; - prCmdBody->ucReserved = 0; - prCmdBody->u4MaxInterval= prMsgChReq->u4MaxInterval; - COPY_MAC_ADDR(prCmdBody->aucBSSID, prMsgChReq->aucBSSID); - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChReq with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrRequestPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before deliver the message to other module, it need to release -* the Channel privilege to Channel Manager. -* -* @param[in] prMsgHdr The message need to be delivered -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_ABORT_T prMsgChAbort; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChAbort = (P_MSG_CH_ABORT_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChAbort: fail to get buf (net=%d, token=%d)\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(CNM, INFO, ("ChAbort net=%d token=%d\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); - - prCmdBody->ucNetTypeIndex = prMsgChAbort->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChAbort->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_ABORT; /* Abort */ - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChAbort with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrAbortPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_CH_PRIVILEGE_T prEventBody; - P_MSG_CH_GRANT_T prChResp; - - ASSERT(prAdapter); - ASSERT(prEvent); - - prEventBody = (P_EVENT_CH_PRIVILEGE_T) (prEvent->aucBuffer); - prChResp = (P_MSG_CH_GRANT_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_GRANT_T)); - ASSERT(prChResp); - - /* To do: exception handle */ - if (!prChResp) { - DBGLOG(CNM, ERROR, ("ChGrant: fail to get buf (net=%d, token=%d)\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID)); - - return; - } - - DBGLOG(CNM, INFO, ("ChGrant net=%d token=%d ch=%d sco=%d\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID, - prEventBody->ucPrimaryChannel, prEventBody->ucRfSco)); - - ASSERT(prEventBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventBody->ucStatus == EVENT_CH_STATUS_GRANT); - - /* Decide message ID based on network and response status */ - if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_AIS_CH_GRANT; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (prEventBody->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - prChResp->rMsgHdr.eMsgId = MID_CNM_P2P_CH_GRANT; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_BOW_CH_GRANT; - } -#endif - else { - cnmMemFree(prAdapter, prChResp); - return; - } - - prChResp->ucNetTypeIndex = prEventBody->ucNetTypeIndex; - prChResp->ucTokenID = prEventBody->ucTokenID; - prChResp->ucPrimaryChannel = prEventBody->ucPrimaryChannel; - prChResp->eRfSco = (ENUM_CHNL_EXT_T) prEventBody->ucRfSco; - prChResp->eRfBand = (ENUM_BAND_T) prEventBody->ucRfBand; - prChResp->eReqType = (ENUM_CH_REQ_TYPE_T) prEventBody->ucReqType; - prChResp->u4GrantInterval = prEventBody->u4GrantInterval; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prChResp, - MSG_SEND_METHOD_BUF); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked for P2P or BOW networks -* -* @param (none) -* -* @return TRUE: suggest to adopt the returned preferred channel -* FALSE: No suggestion. Caller should adopt its preference -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prBand); - ASSERT(pucPrimaryChannel); - ASSERT(prBssSCO); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - *prBssSCO = prBssInfo->eBssSCO; - - return TRUE; - } - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: available channel is limited to return value -* FALSE: no limited -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ) -{ -#if CFG_ENABLE_WIFI_DIRECT ||(CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL) - P_BSS_INFO_T prBssInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - ASSERT(prAdapter->fgIsP2PRegistered); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - P_BSS_INFO_T prAisBssInfo, prBowBssInfo; - - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prBowBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - if (RLM_NET_PARAM_VALID(prAisBssInfo) && RLM_NET_PARAM_VALID(prBowBssInfo)){ - if (prAisBssInfo->eBand != prBowBssInfo->eBand || - prAisBssInfo->ucPrimaryChannel != prBowBssInfo->ucPrimaryChannel) { - - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 i; - - /* Note: To support real-time decision instead of current activated-time, - * the STA roaming case shall be considered about synchronization - * problem. Another variable fgAssoc40mBwAllowed is added to - * represent HT capability when association - */ - for (i = 0; i < NETWORK_TYPE_INDEX_NUM; i++) { - if (i != (UINT_8) eNetTypeIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[i]; - - if (IS_BSS_ACTIVE(prBssInfo) && (prBssInfo->fg40mBwAllowed || - prBssInfo->fgAssoc40mBwAllowed)) { - return FALSE; - } - } - } - - return TRUE; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm_mem.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm_mem.c deleted file mode 100755 index 3988128ed69d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm_mem.c +++ /dev/null @@ -1,1297 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm_mem.c#2 $ -*/ - -/*! \file "cnm_mem.c" - \brief This file contain the management function of packet buffers and - generic memory alloc/free functioin for mailbox message. - - A data packet has a fixed size of buffer, but a management - packet can be equipped with a variable size of buffer. -*/ - - - -/* -** $Log: cnm_mem.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * initialize fgNeedResp. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 05 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix correct structure size in cnmStaSendDeactivateCmd() - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * spin lock target revised - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change inner loop index from i to k. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Notify MQM, TXM, and RXM upon disconnection . - * - * 04 26 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Call mqm, txm, rxm functions upon disconnection - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * * * and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * * Added per-TID SN cache in STA_REC - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 03 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Initialize StaRec->arStaWaitQueue - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add debug message when no available pkt buffer - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Fixed STA_REC initialization bug: prStaRec->au2CachedSeqCtrl[k] - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * * * * * * * * * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * * * * * * * * * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * MQM: BA handling - * * * * * * * TXM: Macros updates - * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * Dec 9 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed DBGPRINT - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix warning of null pointer - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and add fgIsInUse flag in STA_RECORD_T - * - * Nov 23 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Assign ucBufferSource in function cnmMgtPktAlloc() - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added packet redispatch function calls - * - * Nov 13 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * enable packet re-usable in current emulation driver - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * 1. Add new function cnmGetStaRecByIndex() - * 2. Rename STA_REC_T to STA_RECORD_T - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call cnmDataPktDispatch() in cnmPktFree() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove definition of pragma section code - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Oct 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ); - -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ); - -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -cnmMgtPktAlloc ( - P_ADAPTER_T prAdapter, - UINT_32 u4Length - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - /* Get a free MSDU_INFO_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(prQueList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if (prMsduInfo) { - prMsduInfo->prPacket = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - prMsduInfo->eSrc = TX_PACKET_MGMT; - - if (prMsduInfo->prPacket == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = NULL; - } - } - -#if DBG - if (prMsduInfo == NULL) { - DBGLOG(MEM, WARN, ("\n")); - DBGLOG(MEM, WARN, ("MgtDesc#=%ld\n", prQueList->u4NumElem)); - -#if CFG_DBG_MGT_BUF - DBGLOG(MEM, WARN, ("rMgtBufInfo: alloc#=%ld, free#=%ld, null#=%ld\n", - prAdapter->rMgtBufInfo.u4AllocCount, - prAdapter->rMgtBufInfo.u4FreeCount, - prAdapter->rMgtBufInfo.u4AllocNullCount)); -#endif - - DBGLOG(MEM, WARN, ("\n")); - } -#endif - - return prMsduInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMgtPktFree ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - ASSERT(prMsduInfo->prPacket); - if (prMsduInfo->prPacket) { - cnmMemFree(prAdapter, prMsduInfo->prPacket); - prMsduInfo->prPacket = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry) - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to initial the MGMT/MSG memory pool. -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BUF_INFO_T prBufInfo; - - /* Initialize Management buffer pool */ - prBufInfo = &prAdapter->rMgtBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMgtBufInfo)); - prBufInfo->pucBuf = prAdapter->pucMgtBufCached; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - - /* Initialize Message buffer pool */ - prBufInfo = &prAdapter->rMsgBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMsgBufInfo)); - prBufInfo->pucBuf = &prAdapter->aucMsgBuf[0]; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - return; - -} /* end of cnmMemInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate MGMT/MSG memory pool. -* -* \param[in] eRamType Target RAM type. -* TCM blk_sz= 16bytes, BUF blk_sz= 256bytes -* \param[in] u4Length Length of the buffer to allocate. -* -* \retval !NULL Pointer to the start address of allocated memory. -* \retval NULL Fail to allocat memory -*/ -/*----------------------------------------------------------------------------*/ -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ) -{ - P_BUF_INFO_T prBufInfo; - BUF_BITMAP rRequiredBitmap; - UINT_32 u4BlockNum; - UINT_32 i, u4BlkSzInPower; - PVOID pvMemory; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(u4Length); - - if (eRamType == RAM_TYPE_MSG && u4Length <= 256) { - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlkSzInPower = MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MSG_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - else { - eRamType = RAM_TYPE_BUF; - - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlkSzInPower = MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MGT_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocCount++; -#endif - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - if ((u4BlockNum > 0) && (u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS)) { - - /* Convert number of block into bit cluster */ - rRequiredBitmap = BITS(0, u4BlockNum-1); - - for (i = 0; i <= (MAX_NUM_OF_BUF_BLOCKS - u4BlockNum); i++) { - - /* Have available memory blocks */ - if ((prBufInfo->rFreeBlocksBitmap & rRequiredBitmap) - == rRequiredBitmap) { - - /* Clear corresponding bits of allocated memory blocks */ - prBufInfo->rFreeBlocksBitmap &= ~rRequiredBitmap; - - /* Store how many blocks be allocated */ - prBufInfo->aucAllocatedBlockNum[i] = (UINT_8) u4BlockNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? - SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - /* Return the start address of allocated memory */ - return (PVOID)(prBufInfo->pucBuf + (i << u4BlkSzInPower)); - - } - - rRequiredBitmap <<= 1; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#ifdef LINUX - pvMemory = (PVOID)kalMemAlloc(u4Length, VIR_MEM_TYPE); -#else - pvMemory = (PVOID)NULL; -#endif - -KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocNullCount++; - - if (pvMemory) { - prAdapter->u4MemAllocDynamicCount++; - } -#endif -KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return pvMemory; - -} /* end of cnmMemAlloc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release memory to MGT/MSG memory pool. -* -* \param pucMemory Start address of previous allocated memory -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ) -{ - P_BUF_INFO_T prBufInfo; - UINT_32 u4BlockIndex; - BUF_BITMAP rAllocatedBlocksBitmap; - ENUM_RAM_TYPE_T eRamType; - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(pvMemory); - if (!pvMemory) { - return; - } - - /* Judge it belongs to which RAM type */ - if ( ((UINT_32)pvMemory >= (UINT_32)&prAdapter->aucMsgBuf[0]) && - ((UINT_32)pvMemory <= (UINT_32)&prAdapter->aucMsgBuf[MSG_BUFFER_SIZE-1])) { - - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_MSG; - } - else if ( ((UINT_32)pvMemory >= (UINT_32)prAdapter->pucMgtBufCached) && - ((UINT_32)pvMemory <= ((UINT_32)prAdapter->pucMgtBufCached + MGT_BUFFER_SIZE -1))) { - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_BUF; - } - else { - #ifdef LINUX - /* For Linux, it is supported because size is not needed */ - kalMemFree(pvMemory, VIR_MEM_TYPE, 0); - #else - /* For Windows, it is not supported because of no size argument */ - ASSERT(0); - #endif - - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount++; - #endif - return; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#if CFG_DBG_MGT_BUF - prBufInfo->u4FreeCount++; -#endif - - /* Convert number of block into bit cluster */ - ASSERT(prBufInfo->aucAllocatedBlockNum[u4BlockIndex] > 0); - - rAllocatedBlocksBitmap = - BITS(0, prBufInfo->aucAllocatedBlockNum[u4BlockIndex] - 1); - rAllocatedBlocksBitmap <<= u4BlockIndex; - - /* Clear saved block count for this memory segment */ - prBufInfo->aucAllocatedBlockNum[u4BlockIndex] = 0; - - /* Set corresponding bit of released memory block */ - prBufInfo->rFreeBlocksBitmap |= rAllocatedBlocksBitmap; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return; - -} /* end of cnmMemFree() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecInit ( - P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - prStaRec->ucIndex = (UINT_8) i; - prStaRec->fgIsInUse = FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmStaRecAlloc ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i, k; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (!prStaRec->fgIsInUse) { - /*---- Initialize STA_REC_T here ----*/ - kalMemZero(prStaRec, sizeof(STA_RECORD_T)); - prStaRec->ucIndex = (UINT_8) i; - prStaRec->ucNetTypeIndex = ucNetTypeIndex; - prStaRec->fgIsInUse = TRUE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - /* Initialize the SN caches for duplicate detection */ - for (k = 0; k < TID_NUM + 1; k++) { - prStaRec->au2CachedSeqCtrl[k] = 0xFFFF; - } - - /* Initialize SW TX queues in STA_REC */ - for (k = 0; k < STA_WAIT_QUEUE_NUM; k++) { - LINK_INITIALIZE(&prStaRec->arStaWaitQueue[k]); - } - - /* Default enable TX/RX AMPDU */ - prStaRec->fgTxAmpduEn = TRUE; - prStaRec->fgRxAmpduEn = TRUE; - - for (k = 0; k < NUM_OF_PER_STA_TX_QUEUES; k++) { - QUEUE_INITIALIZE(&prStaRec->arTxQueue[k]); - } - - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecFree ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgSyncToChip - ) -{ - ASSERT(prAdapter); - ASSERT(prStaRec); - - /* To do: free related resources, e.g. timers, buffers, etc */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - prStaRec->fgTransmitKeyExist = FALSE; - prStaRec->fgSetPwrMgtBit = FALSE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - - if (fgSyncToChip) { - cnmStaSendRemoveCmd(prAdapter, prStaRec); - } - - prStaRec->fgIsInUse = FALSE; - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = (P_STA_RECORD_T) &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == (UINT_8) eNetTypeIndex) { - - cnmStaRecFree(prAdapter, prStaRec, fgSyncToChip); - } - } /* end of for loop */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByIndex ( - P_ADAPTER_T prAdapter, - UINT_8 ucIndex - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prStaRec = (ucIndex < CFG_STA_REC_NUM) ? - &prAdapter->arStaRec[ucIndex] : NULL; - - if (prStaRec && prStaRec->fgIsInUse == FALSE) { - prStaRec = NULL; - } - - return prStaRec; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get STA_RECORD_T by Peer MAC Address(Usually TA). -* -* @param[in] pucPeerMacAddr Given Peer MAC Address. -* -* @retval Pointer to STA_RECORD_T, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByAddress ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - PUINT_8 pucPeerMacAddr - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(pucPeerMacAddr); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == ucNetTypeIndex && - EQUAL_MAC_ADDR(prStaRec->aucMacAddr, pucPeerMacAddr)) { - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Reset the Status and Reason Code Field to 0 of all Station Records for -* the specified Network Type -* -* @param[in] eNetType Specify Network Type -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecResetStatus ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - cnmStaFreeAllStaByNetType(prAdapter, eNetTypeIndex, FALSE); - -#if 0 - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - if ((NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) && - IS_STA_IN_AIS(prStaRec->eStaType)) { - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - } - - /* TODO(Kevin): For P2P and BOW */ - } - } - - return; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will change the ucStaState of STA_RECORD_T and also do -* event indication to HOST to sync the STA_RECORD_T in driver. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u4NewState New STATE to change. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecChangeState ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - UINT_8 ucNewState - ) -{ - BOOLEAN fgNeedResp; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* Do nothing when following state transitions happen, - * other 6 conditions should be sync to FW, including 1-->1, 3-->3 - */ - if ((ucNewState == STA_STATE_2 && prStaRec->ucStaState != STA_STATE_3) || - (ucNewState == STA_STATE_1 && prStaRec->ucStaState == STA_STATE_2)) { - prStaRec->ucStaState = ucNewState; - return; - } - - fgNeedResp = FALSE; - if (ucNewState == STA_STATE_3) { - secFsmEventStart(prAdapter, prStaRec); - if (ucNewState != prStaRec->ucStaState) { - fgNeedResp = TRUE; - } - } - else { - if (ucNewState != prStaRec->ucStaState && - prStaRec->ucStaState == STA_STATE_3) { - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - } - fgNeedResp = FALSE; - } - prStaRec->ucStaState = ucNewState; - - cnmStaSendUpdateCmd(prAdapter, prStaRec, fgNeedResp); - -#if CFG_ENABLE_WIFI_DIRECT - /* To do: Confirm if it is invoked here or other location, but it should - * be invoked after state sync of STA_REC - * Update system operation parameters for AP mode - */ - if (prAdapter->fgIsP2PRegistered && (IS_STA_IN_P2P(prStaRec))) { - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - } - } -#endif - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ) -{ - P_EVENT_ACTIVATE_STA_REC_T prEventContent; - P_STA_RECORD_T prStaRec; - - prEventContent = (P_EVENT_ACTIVATE_STA_REC_T) pucEventBuf; - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventContent->ucStaRecIdx); - - if (prStaRec && prStaRec->ucStaState == STA_STATE_3 && - !kalMemCmp(&prStaRec->aucMacAddr[0], &prEventContent->aucMacAddr[0], - MAC_ADDR_LEN)) { - - qmActivateStaRec(prAdapter, prStaRec); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ) -{ - P_CMD_UPDATE_STA_RECORD_T prCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* To do: come out a mechanism to limit one STA_REC sync once for AP mode - * to avoid buffer empty case when many STAs are associated - * simultaneously. - */ - - /* To do: how to avoid 2 times of allocated memory. Use Stack? - * One is here, the other is in wlanSendQueryCmd() - */ - prCmdContent = cnmMemAlloc(prAdapter, - RAM_TYPE_BUF, sizeof(CMD_UPDATE_STA_RECORD_T)); - ASSERT(prCmdContent); - - /* To do: exception handle */ - if (!prCmdContent) { - return; - } - - prCmdContent->ucIndex = prStaRec->ucIndex; - prCmdContent->ucStaType = (UINT_8) prStaRec->eStaType; - kalMemCopy(&prCmdContent->aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - prCmdContent->u2AssocId = prStaRec->u2AssocId; - prCmdContent->u2ListenInterval = prStaRec->u2ListenInterval; - prCmdContent->ucNetTypeIndex = prStaRec->ucNetTypeIndex; - - prCmdContent->ucDesiredPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - prCmdContent->u2DesiredNonHTRateSet = prStaRec->u2DesiredNonHTRateSet; - prCmdContent->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - prCmdContent->ucMcsSet = prStaRec->ucMcsSet; - prCmdContent->ucSupMcs32 = (UINT_8) prStaRec->fgSupMcs32; - prCmdContent->u2HtCapInfo = prStaRec->u2HtCapInfo; - prCmdContent->ucNeedResp = (UINT_8) fgNeedResp; - -#if !CFG_SLT_SUPPORT - if(prAdapter->rWifiVar.eRateSetting != FIXED_RATE_NONE) { - /* override rate configuration */ - nicUpdateRateParams(prAdapter, - prAdapter->rWifiVar.eRateSetting, - &(prCmdContent->ucDesiredPhyTypeSet), - &(prCmdContent->u2DesiredNonHTRateSet), - &(prCmdContent->u2BSSBasicRateSet), - &(prCmdContent->ucMcsSet), - &(prCmdContent->ucSupMcs32), - &(prCmdContent->u2HtCapInfo)); - } -#endif - - prCmdContent->ucIsQoS = prStaRec->fgIsQoS; - prCmdContent->ucIsUapsdSupported = prStaRec->fgIsUapsdSupported; - prCmdContent->ucStaState = prStaRec->ucStaState; - - prCmdContent->ucAmpduParam = prStaRec->ucAmpduParam; - prCmdContent->u2HtExtendedCap = prStaRec->u2HtExtendedCap; - prCmdContent->u4TxBeamformingCap = prStaRec->u4TxBeamformingCap; - prCmdContent->ucAselCap = prStaRec->ucAselCap; - prCmdContent->ucRCPI = prStaRec->ucRCPI; - - prCmdContent->ucUapsdAc = prStaRec->ucBmpTriggerAC | (prStaRec->ucBmpDeliveryAC << 4); - prCmdContent->ucUapsdSp = prStaRec->ucUapsdSp; - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_UPDATE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - fgNeedResp, /* fgNeedResp */ - FALSE, /* fgIsOid */ - fgNeedResp? cnmStaRecHandleEventPkt : NULL, - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_UPDATE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdContent); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - CMD_REMOVE_STA_RECORD_T rCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - rCmdContent.ucIndex = prStaRec->ucIndex; - kalMemCopy(&rCmdContent.aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_REMOVE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_REMOVE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) &rCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm_timer.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm_timer.c deleted file mode 100755 index 2e8a8d7fa1b8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/cnm_timer.c +++ /dev/null @@ -1,531 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm_timer.c#1 $ -*/ - -/*! \file "cnm_timer.c" - \brief - -*/ - - - -/* -** $Log: cnm_timer.c $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support sleep notification to host - * - * 05 19 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some checking assertions - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 11 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Place rRootTimer.rNextExpiredSysTime = rExpiredSysTime; before set timer - * - * Oct 30 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * In cnmTimerInitialize(), just stop timer if it was already created. - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Move the external reference for Lint to precomp.h - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] rTimeout Time out interval from current time. -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -cnmTimerSetTimer ( - IN P_ADAPTER_T prAdapter, - IN OS_SYSTIME rTimeout - ) -{ - P_ROOT_TIMER prRootTimer; - BOOLEAN fgNeedWakeLock; - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - kalSetTimer(prAdapter->prGlueInfo, rTimeout); - - if (rTimeout <= SEC_TO_SYSTIME(WAKE_LOCK_MAX_TIME)) { - fgNeedWakeLock = TRUE; - - if (!prRootTimer->fgWakeLocked) { - KAL_WAKE_LOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = TRUE; - } - } - else { - fgNeedWakeLock = FALSE; - } - - return fgNeedWakeLock; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a root timer. -* -* \param[in] prAdapter -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - /* Note: glue layer have configured timer */ - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - KAL_WAKE_LOCK_INIT(prAdapter, &prRootTimer->rWakeLock, "WLAN Timer"); - prRootTimer->fgWakeLocked = FALSE; - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to destroy a root timer. -* When WIFI is off, the token shall be returned back to system. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - if (prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - KAL_WAKE_LOCK_DESTROY(prAdapter, &prRootTimer->rWakeLock); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - /* Note: glue layer will be responsible for timer destruction */ - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] pfnFunc Pointer to the call back function. -* \param[in] u4Data Parameter for call back function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ) -{ - ASSERT(prAdapter); - - ASSERT(prTimer); - -#if DBG - /* Note: NULL function pointer is permitted for HEM POWER */ - if (pfFunc == NULL) { - DBGLOG(CNM, WARN, ("Init timer with NULL callback function!\n")); - } -#endif - -#if DBG - ASSERT(prAdapter->rRootTimer.rLinkHead.prNext); - { - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prPendingTimer; - - prTimerList = &(prAdapter->rRootTimer.rLinkHead); - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prPendingTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prPendingTimer); - ASSERT(prPendingTimer != prTimer); - } - } -#endif - - LINK_ENTRY_INITIALIZE(&prTimer->rLinkEntry); - - prTimer->pfMgmtTimeOutFunc = pfFunc; - prTimer->u4Data = u4Data; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmTimerStopTimer_impl ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN BOOLEAN fgAcquireSpinlock - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - prRootTimer = &prAdapter->rRootTimer; - - if (fgAcquireSpinlock) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - if (timerPendingTimer(prTimer)) { - LINK_REMOVE_KNOWN_ENTRY(&prRootTimer->rLinkHead, - &prTimer->rLinkEntry); - - /* Reduce dummy timeout for power saving, especially HIF activity. - * If two or more timers exist and being removed timer is smallest, - * this dummy timeout will still happen, but it is OK. - */ - if (LINK_IS_EMPTY(&prRootTimer->rLinkHead)) { - kalCancelTimer(prAdapter->prGlueInfo); - - if (fgAcquireSpinlock && prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - } - } - - if (fgAcquireSpinlock) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ) -{ - ASSERT(prAdapter); - ASSERT(prTimer); - - cnmTimerStopTimer_impl(prAdapter, prTimer, TRUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to start a timer with wake_lock. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] u4TimeoutMs Timeout to issue the timer and call back function -* (unit: ms). -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - OS_SYSTIME rExpiredSysTime, rTimeoutSystime; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - /* If timeout interval is larger than 1 minute, the mod value is set - * to the timeout value first, then per minutue. - */ - if (u4TimeoutMs > MSEC_PER_MIN) { - ASSERT(u4TimeoutMs <= ((UINT_32)0xFFFF * MSEC_PER_MIN)); - - prTimer->u2Minutes = (UINT_16)(u4TimeoutMs / MSEC_PER_MIN); - u4TimeoutMs -= (prTimer->u2Minutes * MSEC_PER_MIN); - if (u4TimeoutMs == 0) { - u4TimeoutMs = MSEC_PER_MIN; - prTimer->u2Minutes--; - } - } - else { - prTimer->u2Minutes = 0; - } - - /* The assertion check if MSEC_TO_SYSTIME() may be overflow. */ - ASSERT(u4TimeoutMs < (((UINT_32)0x80000000 - MSEC_PER_SEC) / KAL_HZ)); - rTimeoutSystime = MSEC_TO_SYSTIME(u4TimeoutMs); - rExpiredSysTime = kalGetTimeTick() + rTimeoutSystime; - - /* If no timer pending or the fast time interval is used. */ - if (LINK_IS_EMPTY(prTimerList) || - TIME_BEFORE(rExpiredSysTime, prRootTimer->rNextExpiredSysTime)) { - - prRootTimer->rNextExpiredSysTime = rExpiredSysTime; - cnmTimerSetTimer(prAdapter, rTimeoutSystime); - } - - /* Add this timer to checking list */ - prTimer->rExpiredSysTime = rExpiredSysTime; - - if (!timerPendingTimer(prTimer)) { - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to check the timer list. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prTimer; - OS_SYSTIME rCurSysTime; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; - UINT_32 u4TimeoutData; - BOOLEAN fgNeedWakeLock; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - /* acquire spin lock */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - rCurSysTime = kalGetTimeTick(); - - /* Set the permitted max timeout value for new one */ - prRootTimer->rNextExpiredSysTime = rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prTimer); - - /* Check if this entry is timeout. */ - if (!TIME_BEFORE(rCurSysTime, prTimer->rExpiredSysTime)) { - cnmTimerStopTimer_impl(prAdapter, prTimer, FALSE); - - pfMgmtTimeOutFunc = prTimer->pfMgmtTimeOutFunc; - u4TimeoutData = prTimer->u4Data; - - if (prTimer->u2Minutes > 0) { - prTimer->u2Minutes--; - prTimer->rExpiredSysTime = - rCurSysTime + MSEC_TO_SYSTIME(MSEC_PER_MIN); - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - else if (pfMgmtTimeOutFunc) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - (pfMgmtTimeOutFunc)(prAdapter, u4TimeoutData); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - /* Search entire list again because of nest del and add timers - * and current MGMT_TIMER could be volatile after stopped - */ - prLinkEntry = (P_LINK_ENTRY_T)prTimerList; - - prRootTimer->rNextExpiredSysTime = - rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - } - else if (TIME_BEFORE(prTimer->rExpiredSysTime, - prRootTimer->rNextExpiredSysTime)) { - prRootTimer->rNextExpiredSysTime = prTimer->rExpiredSysTime; - } - } /* end of for loop */ - - /* Setup the prNext timeout event. It is possible the timer was already - * set in the above timeout callback function. - */ - fgNeedWakeLock = FALSE; - if (!LINK_IS_EMPTY(prTimerList)) { - ASSERT(TIME_AFTER(prRootTimer->rNextExpiredSysTime, rCurSysTime)); - - fgNeedWakeLock = cnmTimerSetTimer(prAdapter, (OS_SYSTIME) - ((INT_32)prRootTimer->rNextExpiredSysTime - (INT_32)rCurSysTime)); - } - - if (prRootTimer->fgWakeLocked && !fgNeedWakeLock) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - - /* release spin lock */ - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/hem_mbox.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/hem_mbox.c deleted file mode 100755 index 278e5d7627a1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/hem_mbox.c +++ /dev/null @@ -1,831 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/hem_mbox.c#3 $ -*/ - -/*! \file "hem_mbox.c" - \brief - -*/ - - - -/* -** $Log: hem_mbox.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 03 2012 cp.wu - * [WCXRP00001231] [MT6620 Wi-Fi][MT5931][Driver] Correct SCAN_V2 related debugging facilities within hem_mbox.c - * correct for debug message string table by adding missed scan_v2 related definitions. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 17 2012 yuche.tsai - * NULL - * Update mgmt frame filter setting. - * Please also update FW 2.1 - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 15 2011 cm.chang - * NULL - * Add exception handle for NULL function pointer of mailbox message - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 yarco.yang - * NULL - * Fixed Driver ASSERT at mboxInitMsgMap() - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Add debug message for newly add P2P message. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function entry for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some events to P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Add message box event for P2P device switch on & device discovery. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 yuche.tsai - * - * Add wifi direct scan done callback. - * - * 07 09 2010 cp.wu - * - * change handler of MID_MNY_CNM_CONNECTION_ABORT from NULL to mboxDummy. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable currently migrated message call-backs. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Updated arMsgMapTable for MID_RXM_MQM_QOS_ACTION_FRAME - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 9 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add hemRunEventScanDone() to arMsgMapTable[] - * - * Dec 4 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix mboxDummy() didn't free prMsgHdr - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add saaAisJoinComplete event handler - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the handler function name in arMsgMapTable for MID_RXM_MQM_BA_ACTION_FRAME - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME to MsgMapTable - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MSG Handler (remove dummy and add for SAA) - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventAbort() event handler - * - * Nov 11 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 10 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add more MSG_HNDL_ENTRY_T to avoid ASSERT() in mboxInitMsgMap() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN message and function entry to arMsgMapTable[] - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix sorting algorithm in mboxInitMsgMap() - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugMsg[] = { - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_ABORT"), - (PUINT_8)DISP_STRING("MID_CNM_AIS_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_P2P_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_BOW_CH_GRANT"), - - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_P2P_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_BOW_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_RLM_SCAN_DONE"), - - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_JOIN_REQ"), - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_AIS_JOIN_COMPLETE"), - -#if CFG_ENABLE_BT_OVER_WIFI - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_BOW_JOIN_COMPLETE"), -#endif - -#if CFG_ENABLE_WIFI_DIRECT - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_P2P_JOIN_COMPLETE"), - - (PUINT_8)DISP_STRING("MID_MNY_P2P_FUN_SWITCH"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_DEVICE_DISCOVERY"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_BEACON_UPDATE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_STOP_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_TX"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_GROUP_DISSOLVE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_FRAME_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_NET_DEV_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_START_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_UPDATE_IE_BUF"), - #endif - -#if CFG_SUPPORT_ADHOC - //(PUINT_8)DISP_STRING("MID_AIS_CNM_CREATE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_CREATE_IBSS_GRANT"), - //(PUINT_8)DISP_STRING("MID_AIS_CNM_MERGE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_MERGE_IBSS_GRANT"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_FOUND_IBSS"), -#endif /* CFG_SUPPORT_ADHOC */ - - (PUINT_8)DISP_STRING("MID_SAA_AIS_FSM_ABORT") -}; -/*lint -restore */ -#endif /* DBG */ - -/* This message entry will be re-ordered based on the message ID order - * by invoking mboxInitMsgMap() - */ -static MSG_HNDL_ENTRY_T arMsgMapTable[] = { - { MID_MNY_CNM_CH_REQ, cnmChMngrRequestPrivilege }, - { MID_MNY_CNM_CH_ABORT, cnmChMngrAbortPrivilege }, - { MID_CNM_AIS_CH_GRANT, aisFsmRunEventChGrant }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_CNM_P2P_CH_GRANT, p2pFsmRunEventChGrant }, /*set in gl_p2p_init.c*/ -#else - { MID_CNM_P2P_CH_GRANT, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_CNM_BOW_CH_GRANT, bowRunEventChGrant }, -#else - { MID_CNM_BOW_CH_GRANT, mboxDummy }, -#endif - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_AIS_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_P2P_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_BOW_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_RLM_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_SCN_AIS_SCAN_DONE, aisFsmRunEventScanDone }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_SCN_P2P_SCAN_DONE, p2pFsmRunEventScanDone }, /*set in gl_p2p_init.c*/ -#else - { MID_SCN_P2P_SCAN_DONE, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_SCN_BOW_SCAN_DONE, bowResponderScanDone }, -#else - { MID_SCN_BOW_SCAN_DONE, mboxDummy }, -#endif - { MID_SCN_RLM_SCAN_DONE, rlmObssScanDone }, - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_OID_AIS_FSM_JOIN_REQ, aisFsmRunEventAbort }, - { MID_OID_AIS_FSM_ABORT, aisFsmRunEventAbort }, - { MID_AIS_SAA_FSM_START, saaFsmRunEventStart }, - { MID_AIS_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_AIS_JOIN_COMPLETE, aisFsmRunEventJoinComplete }, - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_BOW_SAA_FSM_START, saaFsmRunEventStart }, - { MID_BOW_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_BOW_JOIN_COMPLETE, bowFsmRunEventJoinComplete }, -#endif - -#if CFG_ENABLE_WIFI_DIRECT /*set in gl_p2p_init.c*/ - { MID_P2P_SAA_FSM_START, saaFsmRunEventStart }, - { MID_P2P_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_P2P_JOIN_COMPLETE, p2pFsmRunEventJoinComplete },// TODO: p2pFsmRunEventJoinComplete - - { MID_MNY_P2P_FUN_SWITCH, p2pFsmRunEventSwitchOPMode }, - { MID_MNY_P2P_DEVICE_DISCOVERY, p2pFsmRunEventScanRequest }, - { MID_MNY_P2P_CONNECTION_REQ, p2pFsmRunEventConnectionRequest }, - { MID_MNY_P2P_CONNECTION_ABORT, p2pFsmRunEventConnectionAbort }, - { MID_MNY_P2P_BEACON_UPDATE, p2pFsmRunEventBeaconUpdate }, - { MID_MNY_P2P_STOP_AP, p2pFsmRunEventStopAP }, - { MID_MNY_P2P_CHNL_REQ, p2pFsmRunEventChannelRequest }, - { MID_MNY_P2P_CHNL_ABORT, p2pFsmRunEventChannelAbort }, - { MID_MNY_P2P_MGMT_TX, p2pFsmRunEventMgmtFrameTx }, - { MID_MNY_P2P_GROUP_DISSOLVE, p2pFsmRunEventDissolve }, - { MID_MNY_P2P_MGMT_FRAME_REGISTER, p2pFsmRunEventMgmtFrameRegister }, - { MID_MNY_P2P_NET_DEV_REGISTER, p2pFsmRunEventNetDeviceRegister }, - { MID_MNY_P2P_START_AP, p2pFsmRunEventStartAP }, - { MID_MNY_P2P_MGMT_FRAME_UPDATE, p2pFsmRunEventUpdateMgmtFrame }, -#if CFG_SUPPORT_WFD - { MID_MNY_P2P_WFD_CFG_UPDATE, p2pFsmRunEventWfdSettingUpdate }, -#endif - -#endif - -#if CFG_SUPPORT_ADHOC - { MID_SCN_AIS_FOUND_IBSS, aisFsmRunEventFoundIBSSPeer }, -#endif /* CFG_SUPPORT_ADHOC */ - - { MID_SAA_AIS_FSM_ABORT, aisFsmRunEventAbort } -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if DBG -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d: %s]\n", prMsg->eMsgId, apucDebugMsg[prMsg->eMsgId])); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#else -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d]\n", prMsg->eMsgId)); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#endif -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitMsgMap ( - VOID - ) -{ - UINT_32 i, idx; - MSG_HNDL_ENTRY_T rTempEntry; - - ASSERT((sizeof(arMsgMapTable) / sizeof(MSG_HNDL_ENTRY_T)) == MID_TOTAL_NUM); - - for (i = 0; i < MID_TOTAL_NUM; i++) { - if (arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i) { - continue; - } - for (idx = i + 1; idx < MID_TOTAL_NUM; idx++) { - if (arMsgMapTable[idx].eMsgId == (ENUM_MSG_ID_T) i) { - break; - } - } - ASSERT(idx < MID_TOTAL_NUM); - if (idx >= MID_TOTAL_NUM) { - continue; - } - - /* Swap target entry and current entry */ - rTempEntry.eMsgId = arMsgMapTable[idx].eMsgId; - rTempEntry.pfMsgHndl= arMsgMapTable[idx].pfMsgHndl; - - arMsgMapTable[idx].eMsgId = arMsgMapTable[i].eMsgId; - arMsgMapTable[idx].pfMsgHndl = arMsgMapTable[i].pfMsgHndl; - - arMsgMapTable[i].eMsgId = rTempEntry.eMsgId; - arMsgMapTable[i].pfMsgHndl = rTempEntry.pfMsgHndl; - } - - /* Verify the correctness of final message map */ - for (i = 0; i < MID_TOTAL_NUM; i++) { - ASSERT(arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i); - while (arMsgMapTable[i].eMsgId != (ENUM_MSG_ID_T) i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INITIALIZE(&prMbox->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prMsg); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - switch (eMethod) { - case MSG_SEND_METHOD_BUF: - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INSERT_TAIL(&prMbox->rLinkHead, &prMsg->rLinkEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - // to wake up main service thread - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - break; - - case MSG_SEND_METHOD_UNBUF: - MBOX_HNDL_MSG(prAdapter, prMsg); - break; - - default: - ASSERT(0); - break; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - MBOX_HNDL_MSG(prAdapter, prMsg); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* Initialize Mailbox */ - mboxInitMsgMap(); - - /* Setup/initialize each mailbox */ - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - mboxSetup(prAdapter, i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - UINT_8 i; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - prMbox = &(prAdapter->arMbox[i]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - cnmMemFree(prAdapter, prMsg); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is dummy function to prevent empty arMsgMapTable[] for compiling. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - ASSERT(prAdapter); - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/mib.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/mib.c deleted file mode 100755 index 270bdf97a71e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/mib.c +++ /dev/null @@ -1,102 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/mib.c#1 $ -*/ - -/*! \file "mib.c" - \brief This file includes the mib default vale and functions. -*/ - - - -/* -** $Log: mib.c $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add mib.c. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[] = { - {RATE_SET_HR_DSSS, TRUE, FALSE }, /* For PHY_TYPE_HR_DSSS_INDEX(0) */ - {RATE_SET_ERP, TRUE, TRUE }, /* For PHY_TYPE_ERP_INDEX(1) */ - {RATE_SET_ERP_P2P, TRUE, TRUE }, /* For PHY_TYPE_ERP_P2P_INDEX(2) */ - {RATE_SET_OFDM, FALSE, FALSE }, /* For PHY_TYPE_OFDM_INDEX(3) */ -}; - -NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[AD_HOC_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AD_HOC_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AD_HOC_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AD_HOC_MODE_11G(2) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AD_HOC_MODE_11A(3) */ -}; - -NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[AP_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AP_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AP_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AP_MODE_11G(2) */ - {PHY_TYPE_ERP_P2P_INDEX, BASIC_RATE_SET_ERP_P2P}, /* For AP_MODE_11G_P2P(3) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AP_MODE_11A(4) */ -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_assoc.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_assoc.c deleted file mode 100755 index d03d8338a261..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_assoc.c +++ /dev/null @@ -1,99 +0,0 @@ -/* -** $Id: @(#) p2p_assoc.c@@ -*/ - -/*! \file "p2p_assoc.c" - \brief This file includes the Wi-Fi Direct association-related functions. - - This file includes the association-related functions. -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for P2P Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - return pucBuffer; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_bss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_bss.c deleted file mode 100755 index d9aa1a130034..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_bss.c +++ /dev/null @@ -1,66 +0,0 @@ -/* -** $Id: @(#) p2p_bss.c@@ -*/ - -/*! \file "p2p_bss.c" - \brief This file contains the functions for creating p2p BSS(AP). - - This file contains the functions for BSS(AP). We may create a BSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_fsm.c deleted file mode 100755 index 055443d9a16a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_fsm.c +++ /dev/null @@ -1,3446 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/mgmt/p2p_fsm.c#61 $ -*/ - -/*! \file "p2p_fsm.c" - \brief This file defines the FSM for P2P Module. - - This file defines the FSM for P2P Module. -*/ - - - -/* -** $Log: p2p_fsm.c $ -** -** 07 29 2013 yuche.tsai -** [ALPS00818788] [PreRC1][Mobile HotSpot]DUT should support hidden SSID broadcast for Mobile HotSpot -** Support hidden SSID for MT6630. -** FW Label: 20130729_ALPS_WIFI_FW_MT6620_V1_12 -** -** 12 20 2012 yuche.tsai -** [ALPS00410124] [Rose][Free Test][KE][rlmUpdateParamsForAP]The device reboot automaticly and then "Fatal/Kernel" pops up during use data service.(Once) -** Fix possible NULL station record cause KE under AP mode. -** May due to variable uninitial. -** Review: http://mtksap20:8080/go?page=NewReview&reviewid=49970 -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 08 21 2012 yuche.tsai -** NULL -** fix disconnect indication. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** Fix p2p bug find on ALPS.JB trunk. -** -** 07 27 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update for driver unload KE issue. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Fix the compile flag of enhancement. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000808] [Volunteer Patch][MT6620][Driver/FW] Device discoverability issue fix - * Change device discoverability methodology. From driver SCAN to FW lock channel. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000833] [Volunteer Patch][WiFi Direct][Driver] Service Discovery Frame RX Indicate Issue - * Fix Service Discovery Race Condition Issue. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix an issue of accepting connection of GO. - * - * 06 21 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability - * Drop GAS frame when SD is not enabled. - * - * 06 20 2011 yuche.tsai - * NULL - * Fix compile error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 20 2011 yuche.tsai - * [WCXRP00000795] [Volunteer Patch][MT6620][Driver] GO can not connect second device issue - * Solve P2P GO can not formation with second device issue. - * - * 06 14 2011 yuche.tsai - * NULL - * Change disconnect feature. - * - * 06 10 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability[WCXRP00000776] [Need Patch][MT6620][Driver] MT6620 response probe request of P2P device with P2P IE under Hot Spot mode. - * 1. Dynamic enable SD capability after P2P supplicant ready. - * 2. Avoid response probe respone with p2p IE when under hot spot mode. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 26 2011 yuche.tsai - * [WCXRP00000745] Support accepting connection after one Group Connection Lost. - -After Group Formation & lost connection, if MT6620 behave as: - -1. GO: It would keep under GO state until been dissolved by supplicant. - - At this time, other P2P device can use join method to join this group. - - -2. GC: It would keep on searching target GO or target device until been dissolved by supplicant. - -At this time, it would ignore other P2P device formation request. - - --- - -Modification: Make driver to accept GO NEGO REQ at this time, to let user decide to accept new connection or not. - - * [Volunteer Patch][MT6620][Driver] - * Driver would indicate connection request, if password ID is not ready but connection request is issued. - * - * 05 18 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * A solution for both connection request & IO control. - * - * 05 16 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * Fix SD request can not send out issue. - * - * 05 09 2011 terry.wu - * [WCXRP00000711] [MT6620 Wi-Fi][Driver] Set Initial value of StaType in StaRec for Hotspot Client - * Set initial value of StaType in StaRec for hotspot client. - * - * 05 04 2011 yuche.tsai - * [WCXRP00000697] [Volunteer Patch][MT6620][Driver] - * Bug fix for p2p descriptor is NULL if BSS descriptor is found first. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 20 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Fix side effect while starting ATGO. - * - * 04 20 2011 yuche.tsai - * NULL - * Fix ASSERT issue in FW, side effect of last change. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Workaround for multiple device connection, before invitation ready. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000665] [Wifi Direct][MT6620 E4] When use Ralink's dongle to establish wifi direct connection with PBC. But 6573 always not pop accept option to establish connection. - * Support connection indication when GO NEGO REQ doesn't have configure method, instead it has PasswordID. - * - * 04 18 2011 yuche.tsai - * NULL - * Fix error. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix a connection issue. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix the channel issue of AP mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix Device discoverability related issue. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix bug for Device Discoverability. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix compile error. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 28 2011 yuche.tsai - * NULL - * Fix a possible issue for retry join when media status connected. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 24 2011 yuche.tsai - * NULL - * Assign AID before change STA_REC state to state 3. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix Response Rate Issue when TX Auth Rsp Frame under P2P Mode. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix issue of connection to one GC. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix ASSERT issue when starting Hot-spot. - * - * 03 22 2011 yuche.tsai - * NULL - * When Target Information is not available, change to passive mode. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix one connection issue while using Keypad to connect a GO. - * - * 03 22 2011 yuche.tsai - * NULL - * 1. Fix two issues that may cause kernel panic. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix GC connect to other device issue. - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 21 2011 yuche.tsai - * NULL - * Solve Listen State doesn't response probe response issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Indicate the correct Group SSID when join on Group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Support the third P2P device to join GO/GC group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000578] [Volunteer Patch][MT6620][Driver] Separate Connection Request from general IOCTL - * Separate connection request from general IOCTL. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 17 2011 yuche.tsai - * NULL - * When AIS is connect to an AP, Hot Spot would be enabled under fixed same channel. - * - * 03 17 2011 yuche.tsai - * NULL - * Solve the Group Info IE in Probe Response incorrect issue. - * - * 03 17 2011 yuche.tsai - * NULL - * Release Channel after Join Complete. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix local configure method issue. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 14 2011 yuche.tsai - * NULL - * . - * - * 03 14 2011 yuche.tsai - * NULL - * Fix password ID issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 04 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the p2p action frame type check for device request indication. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Service Discovery RX packet buffer pointer. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 21 2011 yuche.tsai - * [WCXRP00000481] [Volunteer Patch][MT6620][FW] Scan hang under concurrent case. - * Fix all BE issue of WSC or P2P IE. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the wsc config method mapping to driver used config method issue. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000479] [Volunteer Patch][MT6620][Driver] Probe Response of P2P using 11b rate. - * Update basic rate to FW, after P2P is initialed. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Use P2P Wildcard SSID when scan type of P2P_WILDCARD_SSID is set. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 16 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * If two station connected to the Hot-Spot and one disconnect, FW would get into an infinite loop - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix re-connection issue after RX deauthentication. - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix conneciton issue after disconnect with AP. - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * P2P Create Station Type according to Target BSS capability. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Disconnect every station client when disolve on P2P group. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Workaround of disable P2P network. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * 1. Fixed SSID wrong length issue. - * 2. Under Hot Spot configuration, there won't be any P2P IE. - * 3. Under Hot Spot configuration, P2P FSM won't get into LISTEN state first. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Modify Start GO flow. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix desire phy type set issue. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Add desire phy type set phase I. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix P2P Disconnect Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type Definition. - * - * 01 19 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Add P2P QoS Support. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 01 13 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Resolve Channel ZERO issue. (Uninitialized default channel) - * - * 01 13 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update P2P State Debug Message. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Fix bug when allocating message buffer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Bug of reference to NULL pointer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix bug of wrong pointer check. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Compile Error. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Add station record into client list before change it state from STATE_2 to STATE_3. - * - * 01 05 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Specify SSID Type when issue a scan request. - * - * 01 05 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * correct typo - * - * 01 05 2011 george.huang - * [WCXRP00000343] [MT6620 Wi-Fi] Add TSF reset path for concurrent operation - * modify NOA update path for preventing assertion false alarm. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 01 03 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * let the p2p ap mode acept a legacy device join. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * The order of invoking nicUpdateBss() and rlm functions - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 30 2010 yuche.tsai - * NULL - * Update RCIP value when RX assoc request frame. - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 05 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * fixed the p2p role code error. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * fixed the ASSERT check error - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 19 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine[WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * fixed the compiling error. - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * adding a code to support Direct GO with a compiling flag . - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * fixed the compiling error. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 yuche.tsai - * NULL - * Reset Common IE Buffer of P2P INFO when scan request is issued. - * If an action frame other than public action frame is received, return direcly. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 yuche.tsai - * NULL - * 1. Fix Interface Address from GO Nego Req/Rsp is not correct. - * 2. Fix GO mode does not change media state after station connected. - * 3. Fix STA don't response probe request when there is a connection request. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 20 2010 yuche.tsai - * NULL - * Add Glue Layer indication. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix compile warning under Linux. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Add random Interface Address Generation support. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Update P2P FSM code for GO Nego. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Join complete indication. - * - * 08 11 2010 yuche.tsai - * NULL - * Add two boolean in connection request. - * Based on these two boolean value, P2P FSM should - * decide to do invitation or group formation or start a GO directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Update P2P FSM, currently P2P Device Discovery is verified. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P FSM for group formation. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 03 2010 cp.wu - * NULL - * limit build always needs spin-lock declaration. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add P2P FSM code check in. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM. - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add code to test P2P GO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to BAND_24G define was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugP2pState[P2P_STATE_NUM] = { - (PUINT_8)DISP_STRING("P2P_STATE_IDLE"), - (PUINT_8)DISP_STRING("P2P_STATE_SCAN"), - (PUINT_8)DISP_STRING("P2P_STATE_AP_CHANNEL_DETECT"), - (PUINT_8)DISP_STRING("P2P_STATE_REQING_CHANNEL"), - (PUINT_8)DISP_STRING("P2P_STATE_CHNL_ON_HAND"), - (PUINT_8)DISP_STRING("P2P_STATE_GC_JOIN") -}; -/*lint -restore */ -#endif /* DBG */ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* p2pStateXXX : Processing P2P FSM related action. - * p2pFSMXXX : Control P2P FSM flow. - * p2pFuncXXX : Function for doing one thing. - */ -VOID -p2pFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ASSERT_BREAK(prP2pFsmInfo != NULL); - - LINK_INITIALIZE(&(prP2pFsmInfo->rMsgEventQueue)); - LINK_INITIALIZE(&(prP2pBssInfo->rStaRecOfClientList)); - - - prP2pFsmInfo->eCurrentState = prP2pFsmInfo->ePreviousState = P2P_STATE_IDLE; - prP2pFsmInfo->prTargetBss = NULL; - prP2pFsmInfo->fgIsWPSMode = 0; - - cnmTimerInitTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (PFN_MGMT_TIMEOUT_FUNC)p2pFsmRunEventFsmTimeout, - (UINT_32)prP2pFsmInfo); - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - //4 <2.1> Initiate BSS_INFO_T - Setup HW ID - prP2pBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; - prP2pBssInfo->ucHwDefaultFixedRateCode = RATE_OFDM_6M; - - - prP2pBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prP2pBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prP2pBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prP2pBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prP2pBssInfo->u2OperationalRateSet, - prP2pBssInfo->u2BSSBasicRateSet, - prP2pBssInfo->aucAllSupportedRates, - &prP2pBssInfo->ucAllSupportedRatesLen); - - prP2pBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prP2pBssInfo->prBeacon) { - prP2pBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prP2pBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - prP2pBssInfo->prBeacon->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else { - /* Out of memory. */ - ASSERT(FALSE); - } - - prP2pBssInfo->eCurrentOPMode = OP_MODE_NUM; - - prP2pBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; - prP2pBssInfo->ucPrimaryChannel = P2P_DEFAULT_LISTEN_CHANNEL; - prP2pBssInfo->eBand = BAND_2G4; - prP2pBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (prAdapter->rWifiVar.fgSupportQoS) { - prP2pBssInfo->fgIsQBSS = TRUE; - } - else { - prP2pBssInfo->fgIsQBSS = FALSE; - } - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - return; -} /* p2pFsmInit */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to uninitialize the value in P2P_FSM_INFO_T for -* P2P FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DEBUGFUNC("p2pFsmUninit()"); - DBGLOG(P2P, INFO, ("->p2pFsmUninit()\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - p2pFuncSwitchOPMode(prAdapter, prP2pBssInfo, OP_MODE_P2P_DEVICE, TRUE); - - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - p2pStateAbort_IDLE(prAdapter, prP2pFsmInfo, P2P_STATE_NUM); - - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - wlanAcquirePowerControl(prAdapter); - - /* Release all pending CMD queue. */ - DBGLOG(P2P, TRACE, ("p2pFsmUninit: wlanProcessCommandQueue, num of element:%d\n", prAdapter->prGlueInfo->rCmdQueue.u4NumElem)); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - - wlanReleasePowerControl(prAdapter); - - /* Release pending mgmt frame, - * mgmt frame may be pending by CMD without resource. - */ - kalClearMgmtFramesByNetType(prAdapter->prGlueInfo, NETWORK_TYPE_P2P_INDEX); - - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - if (prP2pBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prP2pBssInfo->prBeacon); - prP2pBssInfo->prBeacon = NULL; - } - - } while (FALSE); - - return; - -} /* end of p2pFsmUninit() */ - -VOID -p2pFsmStateTransition ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - BOOLEAN fgIsTransOut = (BOOLEAN)FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (!IS_BSS_ACTIVE(prP2pBssInfo)) { - if (!cnmP2PIsPermitted(prAdapter)) { - return; - } - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - fgIsTransOut = fgIsTransOut?FALSE:TRUE; - - if (!fgIsTransOut) { - DBGLOG(P2P, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugP2pState[prP2pFsmInfo->eCurrentState], - apucDebugP2pState[eNextState])); - - /* Transition into current state. */ - prP2pFsmInfo->ePreviousState = prP2pFsmInfo->eCurrentState; - prP2pFsmInfo->eCurrentState = eNextState; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - if (fgIsTransOut) { - - p2pStateAbort_IDLE(prAdapter, - prP2pFsmInfo, - eNextState); - } - else { - fgIsTransOut = p2pStateInit_IDLE(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &eNextState); - } - - break; - case P2P_STATE_SCAN: - if (fgIsTransOut) { - - // Scan done / scan canceled. - p2pStateAbort_SCAN(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial scan request. - p2pStateInit_SCAN(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_AP_CHANNEL_DETECT: - if (fgIsTransOut) { - // Scan done - // Get sparse channel result. - p2pStateAbort_AP_CHANNEL_DETECT(prAdapter, - prP2pFsmInfo, - prP2pSpecificBssInfo, - eNextState); - } - - else { - // Initial passive scan request. - p2pStateInit_AP_CHANNEL_DETECT(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_REQING_CHANNEL: - if (fgIsTransOut) { - - // Channel on hand / Channel canceled. - p2pStateAbort_REQING_CHANNEL(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial channel request. - p2pFuncAcquireCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - break; - case P2P_STATE_CHNL_ON_HAND: - if (fgIsTransOut) { - p2pStateAbort_CHNL_ON_HAND(prAdapter, prP2pFsmInfo, prP2pBssInfo, eNextState); - } - else { - // Initial channel ready. - // Send channel ready event. - // Start a FSM timer. - p2pStateInit_CHNL_ON_HAND(prAdapter, prP2pBssInfo, prP2pFsmInfo); - } - - break; - case P2P_STATE_GC_JOIN: - if (fgIsTransOut) { - - // Join complete / join canceled. - p2pStateAbort_GC_JOIN(prAdapter, - prP2pFsmInfo, - &(prP2pFsmInfo->rJoinInfo), - eNextState); - } - else { - ASSERT(prP2pFsmInfo->prTargetBss != NULL); - - // Send request to SAA module. - p2pStateInit_GC_JOIN(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &(prP2pFsmInfo->rJoinInfo), - prP2pFsmInfo->prTargetBss); - } - - break; - default: - break; - } - - } while (fgIsTransOut); - -} /* p2pFsmStateTransition */ - - -VOID -p2pFsmRunEventSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchOpMode = (P_MSG_P2P_SWITCH_OP_MODE_T)prMsgHdr; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwitchOpMode != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventSwitchOPMode\n")); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prSwitchOpMode->eOpMode >= OP_MODE_NUM) { - ASSERT(FALSE); - break; - } - - /* P2P Device / GC. */ - p2pFuncSwitchOPMode(prAdapter, - prP2pBssInfo, - prSwitchOpMode->eOpMode, - TRUE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventSwitchOPMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle scan done event during Device Discovery. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - P_MSG_SCN_SCAN_DONE prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - - /* This scan done event is either for "SCAN" phase or "SEARCH" state or "LISTEN" state. - * The scan done for SCAN phase & SEARCH state doesn't imply Device - * Discovery over. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Done Event\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - - if (prScanDoneMsg->ucSeqNum != prScanReqInfo->ucSeqNumOfScnMsg) { - /* Scan Done message sequence number mismatch. - * Ignore this event. (P2P FSM issue two scan events.) - */ - /* The scan request has been cancelled. - * Ignore this message. It is possible. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Don SeqNum:%d <-> P2P Fsm SCAN Msg:%d\n", - prScanDoneMsg->ucSeqNum, - prScanReqInfo->ucSeqNumOfScnMsg)); - - break; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_SCAN: - { - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - prScanReqInfo->fgIsAbort = FALSE; - - if (prConnReqInfo->fgIsConnRequest) { - - if ((prP2pFsmInfo->prTargetBss = p2pFuncKeepOnConnection(prAdapter, - &prP2pFsmInfo->rConnReqInfo, - &prP2pFsmInfo->rChnlReqInfo, - &prP2pFsmInfo->rScanReqInfo)) == NULL) { - eNextState = P2P_STATE_SCAN; - } - else { - eNextState = P2P_STATE_REQING_CHANNEL; - } - - } - else { - eNextState = P2P_STATE_IDLE; - } - - } - break; - case P2P_STATE_AP_CHANNEL_DETECT: - eNextState = P2P_STATE_REQING_CHANNEL; - break; - default: - /* Unexpected channel scan done event without being chanceled. */ - ASSERT(FALSE); - break; - } - - prScanReqInfo->fgIsScanRequest = FALSE; - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanDone */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when channel is granted by CNM module from FW. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_CH_GRANT_T prMsgChGrant = (P_MSG_CH_GRANT_T)NULL; - UINT_8 ucTokenID = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Run Event Channel Grant\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - prP2pFsmInfo->u4GrantInterval = prMsgChGrant->u4GrantInterval; - - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (ucTokenID == prChnlReqInfo->ucSeqNumOfChReq) { - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_REQING_CHANNEL: - switch (prChnlReqInfo->eChannelReqType) { - case CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL: - eNextState = P2P_STATE_CHNL_ON_HAND; - break; - case CHANNEL_REQ_TYPE_GC_JOIN_REQ: - eNextState = P2P_STATE_GC_JOIN; - break; - case CHANNEL_REQ_TYPE_GO_START_BSS: - eNextState = P2P_STATE_IDLE; - break; - default: - break; - } - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - break; - default: - /* Channel is granted under unexpected state. - * Driver should cancel channel privileagea before leaving the states. - */ - ASSERT(FALSE); - break; - } - - } - else { - /* Channel requsted, but released. */ - //ASSERT(!prChnlReqInfo->fgIsChannelRequested); - DBGLOG(P2P, TRACE, ("Channel requsted, but released\n")); - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventChGrant */ - - -VOID -p2pFsmRunEventChannelRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelRequest\n")); - - /* Special case of time renewing for same frequency. */ - if ((prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND) && - (prChnlReqInfo->ucReqChnlNum == prP2pChnlReqMsg->rChannelInfo.ucChannelNum) && - (prChnlReqInfo->eBand == prP2pChnlReqMsg->rChannelInfo.eBand) && - (prChnlReqInfo->eChnlSco == prP2pChnlReqMsg->eChnlSco)) { - - ASSERT(prChnlReqInfo->fgIsChannelRequested == TRUE); - ASSERT(prChnlReqInfo->eChannelReqType == CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - prChnlReqInfo->fgNeedIndSupp = prP2pChnlReqMsg->fgNeedIndSupp; -#endif - - /* Re-enter the state. */ - eNextState = P2P_STATE_CHNL_ON_HAND; - } - else { - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; /* Cookie can only be assign after abort.(for indication) */ - prChnlReqInfo->ucReqChnlNum = prP2pChnlReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prP2pChnlReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prP2pChnlReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL; -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - prChnlReqInfo->fgNeedIndSupp = prP2pChnlReqMsg->fgNeedIndSupp; -#endif - eNextState = P2P_STATE_REQING_CHANNEL; - } - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, eNextState); - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelRequest */ - - -VOID -p2pFsmRunEventChannelAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelAbort\n")); - - if ((prChnlAbortMsg->u8Cookie == prChnlReqInfo->u8Cookie) && - (prChnlReqInfo->fgIsChannelRequested)) { - - ASSERT((prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL || - (prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND))); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelAbort */ - - - -VOID -p2pFsmRunEventScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - UINT_32 u4ChnlListSize = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)prMsgHdr; - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanRequest\n")); - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - ASSERT(prScanReqInfo->fgIsScanRequest == FALSE); - - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - - // Channel List - prScanReqInfo->ucNumChannelList = prP2pScanReqMsg->u4NumChannel; - DBGLOG(P2P, TRACE, ("Scan Request Channel List Number: %d\n", prScanReqInfo->ucNumChannelList)); - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - DBGLOG(P2P, TRACE, ("Channel List Number Overloaded: %d, change to: %d\n", - prScanReqInfo->ucNumChannelList, - MAXIMUM_OPERATION_CHANNEL_LIST)); - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - u4ChnlListSize = sizeof(RF_CHANNEL_INFO_T) * prScanReqInfo->ucNumChannelList; - kalMemCopy(prScanReqInfo->arScanChannelList, prP2pScanReqMsg->arChannelListInfo, u4ChnlListSize); - - // TODO: I only take the first SSID. Multiple SSID may be needed in the future. - // SSID - if (prP2pScanReqMsg->i4SsidNum >= 1) { - - kalMemCopy(&(prScanReqInfo->rSsidStruct), - prP2pScanReqMsg->prSSID, - sizeof(P2P_SSID_STRUCT_T)); - } - else { - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - } - - // IE Buffer - kalMemCopy(prScanReqInfo->aucIEBuf, - prP2pScanReqMsg->pucIEBuf, - prP2pScanReqMsg->u4IELen); - - prScanReqInfo->u4BufLength = prP2pScanReqMsg->u4IELen; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventScanRequest */ - - -VOID -p2pFsmRunEventScanAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanAbort\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanAbort */ - - - - - -VOID -p2pFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventAbort\n")); - - if (prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - } - else if (prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL) { - /* 2012/08/06: frog - * Prevent Start GO. - */ - prP2pBssInfo->eIntendOPMode = OP_MODE_NUM; - } - - // For other state, is there any special action that should be take before leaving? - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - else { - /* P2P State IDLE. */ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventAbort */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle FSM Timeout. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventFsmTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)u4Param; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - DBGLOG(P2P, TRACE, ("P2P FSM Timeout Event\n")); - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - else if (IS_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - break; - -// case P2P_STATE_SCAN: -// break; -// case P2P_STATE_AP_CHANNEL_DETECT: -// break; -// case P2P_STATE_REQING_CHANNEL: -// break; - case P2P_STATE_CHNL_ON_HAND: - { - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - break; -// case P2P_STATE_GC_JOIN: -// break; - default: - break; - } - - } while (FALSE); - - return; -} /* p2pFsmRunEventFsmTimeout */ - -VOID -p2pFsmRunEventMgmtFrameTx ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventMgmtFrameTx\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)prMsgHdr; - - p2pFuncTxMgmtFrame(prAdapter, - &prP2pFsmInfo->rMgmtTxInfo, - prMgmtTxMsg->prMgmtMsduInfo, - prMgmtTxMsg->u8Cookie); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtTx */ - - -VOID -p2pFsmRunEventStartAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStartAP\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)prMsgHdr; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - - if (prP2pStartAPMsg->u4BcnInterval) { - DBGLOG(P2P, TRACE, ("Beacon interval updated to :%ld \n", prP2pStartAPMsg->u4BcnInterval)); - prP2pBssInfo->u2BeaconInterval = (UINT_16)prP2pStartAPMsg->u4BcnInterval; - } - else if (prP2pBssInfo->u2BeaconInterval == 0) { - prP2pBssInfo->u2BeaconInterval = DOT11_BEACON_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u4DtimPeriod) { - DBGLOG(P2P, TRACE, ("DTIM interval updated to :%ld \n", prP2pStartAPMsg->u4DtimPeriod)); - prP2pBssInfo->ucDTIMPeriod = (UINT_8)prP2pStartAPMsg->u4DtimPeriod; - } - else if (prP2pBssInfo->ucDTIMPeriod == 0) { - prP2pBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u2SsidLen != 0) { - kalMemCopy(prP2pBssInfo->aucSSID, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - kalMemCopy(prP2pSpecificBssInfo->aucGroupSsid, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - prP2pBssInfo->ucSSIDLen = prP2pSpecificBssInfo->u2GroupSsidLen = prP2pStartAPMsg->u2SsidLen; - } - - - prP2pBssInfo->eHiddenSsidType = prP2pStartAPMsg->ucHiddenSsidType; - - - // TODO: JB - /* Privacy & inactive timeout. */ - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eIntendOPMode != OP_MODE_NUM)) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - ENUM_P2P_STATE_T eNextState = P2P_STATE_SCAN; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - - if(prP2pFsmInfo->eCurrentState != P2P_STATE_SCAN && - prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - } - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Leave IDLE state. */ - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - // sync with firmware - //DBGLOG(P2P, INFO, ("Activate P2P Network. \n")); - //nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - /* Key to trigger P2P FSM to allocate channel for AP mode. */ - prP2pBssInfo->eIntendOPMode = OP_MODE_ACCESS_POINT; - - /* Sparse Channel to decide which channel to use. */ - if ((cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) && (prP2pConnSettings->ucOperatingChnl == 0)) { - // Sparse Channel Detection using passive mode. - eNextState = P2P_STATE_AP_CHANNEL_DETECT; - } - else { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - -#if 1 - /* 2012-01-27: frog - Channel set from upper layer is the first priority. */ - /* Becuase the channel & beacon is decided by p2p_supplicant. */ - if (prP2pConnSettings->ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - - else { - ASSERT(ucPreferedChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } -#else - if (ucPreferedChnl) { - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } - else { - ASSERT(prP2pConnSettings->ucOperatingChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - -#endif - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - } - - /* If channel is specified, use active scan to shorten the scan time. */ - p2pFsmStateTransition(prAdapter, - prAdapter->rWifiVar.prP2pFsmInfo, - eNextState); - } - - - - } while (FALSE); - - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventStartAP */ - -VOID -p2pFsmRunEventNetDeviceRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_NETDEV_REGISTER_T prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventNetDeviceRegister\n")); - - prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)prMsgHdr; - - if (prNetDevRegisterMsg->fgIsEnable) { - p2pSetMode((prNetDevRegisterMsg->ucMode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventNetDeviceRegister */ - - -VOID -p2pFsmRunEventUpdateMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_UPDATE_T prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventUpdateMgmtFrame\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)prMsgHdr; - - switch (prP2pMgmtFrameUpdateMsg->eBufferType) { - case ENUM_FRAME_TYPE_EXTRA_IE_BEACON: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP: - break; - case ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE: - break; - case ENUM_FRAME_TYPE_BEACON_TEMPLATE: - break; - default: - break; - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventUpdateMgmtFrame */ - - -VOID -p2pFsmRunEventBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_BEACON_UPDATE_T prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconUpdate\n")); - - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)prMsgHdr; - - - p2pFuncBeaconUpdate(prAdapter, - prP2pBssInfo, - &prP2pFsmInfo->rBcnContentInfo, - prBcnUpdateMsg->pucBcnHdr, - prBcnUpdateMsg->u4BcnHdrLen, - prBcnUpdateMsg->pucBcnBody, - prBcnUpdateMsg->u4BcnBodyLen); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) && - (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - //nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - -} /* p2pFsmRunEventBeaconUpdate */ - - -VOID -p2pFsmRunEventStopAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStopAP\n")); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) - && (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); - - DBGLOG(P2P, TRACE, ("Stop Beaconing\n")); - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Enter IDLE state. */ - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - DBGLOG(P2P, INFO, ("Re activate P2P Network. \n")); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - -#if CFG_SUPPORT_WFD - p2pFsmRunEventWfdSettingUpdate(prAdapter, NULL); -#endif - - p2pFsmRunEventAbort(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo); -// p2pFsmStateTransition(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - -} /* p2pFsmRunEventStopAP */ - -VOID -p2pFsmRunEventConnectionRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)prMsgHdr; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventConnectionRequest\n")); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - // Update connection request information. - prConnReqInfo->fgIsConnRequest = TRUE; - COPY_MAC_ADDR(prConnReqInfo->aucBssid, prConnReqMsg->aucBssid); - kalMemCopy(&(prConnReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - kalMemCopy(prConnReqInfo->aucIEBuf, prConnReqMsg->aucIEBuf, prConnReqMsg->u4IELen); - prConnReqInfo->u4BufLength = prConnReqMsg->u4IELen; - - /* Find BSS Descriptor first. */ - prP2pFsmInfo->prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prP2pFsmInfo->prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - prScanReqInfo->arScanChannelList[0].ucChannelNum = prConnReqMsg->rChannelInfo.ucChannelNum; - kalMemCopy(&(prScanReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prConnReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prConnReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prConnReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_REQING_CHANNEL); - } - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventConnectionRequest */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle Connection Request from Supplicant. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventConnectionAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - //P_STA_RECORD_T prTargetStaRec = (P_STA_RECORD_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, STATE, ("p2pFsmRunEventConnectionAbort: Connection Abort.\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)prMsgHdr; - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - { - UINT_8 aucBCBSSID[] = BC_BSSID; - - if (!prP2pBssInfo->prStaRecOfAP) { - DBGLOG(P2P, TRACE, ("GO's StaRec is NULL\n")); - break; - } - if (UNEQUAL_MAC_ADDR(prP2pBssInfo->prStaRecOfAP->aucMacAddr, prDisconnMsg->aucTargetID) && - UNEQUAL_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCBSSID)) { - DBGLOG(P2P, TRACE, ("Unequal MAC ADDR ["MACSTR":"MACSTR"]\n", - MAC2STR(prP2pBssInfo->prStaRecOfAP->aucMacAddr), - MAC2STR(prDisconnMsg->aucTargetID))); - break; - } - - - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, NULL, NULL, 0, 0); - - /* Stop rejoin timer if it is started. */ - // TODO: If it has. - - p2pFuncDisconnect(prAdapter, prP2pBssInfo->prStaRecOfAP, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prP2pBssInfo->prStaRecOfAP; - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } - break; - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - /* Search specific client device, and disconnect. */ - /* 1. Send deauthentication frame. */ - /* 2. Indication: Device disconnect. */ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - DBGLOG(P2P, TRACE, ("Disconnecting with Target ID: "MACSTR"\n", MAC2STR(prDisconnMsg->aucTargetID))); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prDisconnMsg->aucTargetID)) { - - DBGLOG(P2P, TRACE, ("Disconnecting: "MACSTR"\n", MAC2STR(prCurrStaRec->aucMacAddr))); - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Glue layer indication. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - /* Send deauth & do indication. */ - p2pFuncDisconnect(prAdapter, prCurrStaRec, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prCurrStaRec; - - break; - } - } - - } - break; - case OP_MODE_P2P_DEVICE: - default: - //ASSERT(FALSE); - break; - } - - } while (FALSE); - - //20120830 moved into p2pFuncDisconnect() - //if ((!prDisconnMsg->fgSendDeauth) && (prTargetStaRec)) { - // cnmStaRecFree(prAdapter, prTargetStaRec, TRUE); - //} - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventConnectionAbort */ - - -VOID -p2pFsmRunEventDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - // TODO: - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventDissolve\n")); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} -WLAN_STATUS -p2pFsmRunEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prMsduInfo != NULL)); - - DBGLOG(P2P, TRACE, ("Deauth TX Done\n")); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Station Record NULL, Index:%d\n", prMsduInfo->ucStaRecIndex)); - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - - /**/ - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - /* Because the eConnectionState is changed before Deauth TxDone. Dont Check eConnectionState */ - //if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - //} - - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; -} /* p2pFsmRunEventDeauthTxDone */ - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo = (P_P2P_MGMT_TX_REQ_INFO_T)NULL; - BOOLEAN fgIsSuccess = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prMgmtTxReqInfo = &(prP2pFsmInfo->rMgmtTxInfo); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Fail, Status:%d.\n", rTxDoneStatus)); - - } - else { - fgIsSuccess = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Done.\n")); - } - - - if (prMgmtTxReqInfo->prMgmtTxMsdu == prMsduInfo) { - - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - fgIsSuccess, - prMsduInfo->prPacket, - (UINT_32)prMsduInfo->u2FrameLength); - - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* p2pFsmRunEventMgmtFrameTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when JOIN complete message event is received from SAA. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_MSG_JOIN_COMP_T prJoinCompMsg = (P_MSG_JOIN_COMP_T)NULL; - P_SW_RFB_T prAssocRspSwRfb = (P_SW_RFB_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Join Complete\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - prStaRec = prJoinCompMsg->prStaRec; - - /* Check SEQ NUM */ - if (prJoinCompMsg->ucSeqNum == prJoinInfo->ucSeqNumOfReqMsg) { - ASSERT(prStaRec == prJoinInfo->prTargetStaRec); - prJoinInfo->fgIsJoinComplete = TRUE; - - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //4 <1.1> Change FW's Media State immediately. - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prP2pBssInfo->prStaRecOfAP) && - (prP2pBssInfo->prStaRecOfAP != prStaRec)) { - cnmStaRecChangeState(prAdapter, prP2pBssInfo->prStaRecOfAP, STA_STATE_1); - - cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - prP2pBssInfo->prStaRecOfAP = NULL; - } - - //4 <1.3> Update BSS_INFO_T - p2pFuncUpdateBssInfoForJOIN(prAdapter, prP2pFsmInfo->prTargetBss, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_SUPPORT_P2P_RSSI_QUERY - //<1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); -#endif - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, prStaRec->aucMacAddr); - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - - } - else { - /* Join Fail*/ - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (p2pFuncRetryJOIN(prAdapter, prStaRec, prJoinInfo) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - prBssDesc = prP2pFsmInfo->prTargetBss; - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - prBssDesc->fgIsConnecting = FALSE; - - if( prStaRec->ucJoinFailureCount >=3) { - - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - } - else { - /* Sometime the GO is not ready to response auth. Connect it again*/ - prP2pFsmInfo->prTargetBss = NULL; - } - - - } - - } - } - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_GC_JOIN) { - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* Return to IDLE state. */ - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - else { - //p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - /* one more scan */ - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - } - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventJoinComplete */ - - - -VOID -p2pFsmRunEventMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)prMsgHdr; - - p2pFuncMgmtFrameRegister(prAdapter, - prMgmtFrameRegister->u2FrameType, - prMgmtFrameRegister->fgIsRegister, - &prP2pFsmInfo->u4P2pPacketFilter); - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtFrameRegister */ - - - - -#if 0 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDeauthentication ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - if (!prStaRec) { - break; - } - - - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - if (prStaRec->ucStaState == STA_STATE_1) { - break; - } - - DBGLOG(P2P, TRACE, ("RX Deauth\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - prStaRec->u2ReasonCode = u2ReasonCode; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDeauthFrame->aucInfoElem, - u2IELength, - u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (authProcessRxDeauthFrame(prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - /* Findout why someone sent deauthentication frame to us. */ - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("Deauth Reason:%d\n", u2ReasonCode)); - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDeauthentication */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDisassociation ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prStaRec->ucStaState == STA_STATE_1) { - - break; - } - - DBGLOG(P2P, TRACE, ("RX Disassoc\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDisassocFrame->aucInfoElem, - u2IELength, - prStaRec->u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, prStaRec->u2ReasonCode); - - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - ASSERT(FALSE); - break; - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDisassociation */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when a probe request frame is received. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is accepted & need cancel scan request. -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxProbeResponseFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL) && (prBssDesc != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - /* There is a connection request. */ - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxProbeResponseFrame */ - - - - - - -VOID -p2pFsmRunEventBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconTimeout: Beacon Timeout\n")); - - /* Only client mode would have beacon lost event. */ - ASSERT(prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE); - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DISASSOC_INACTIVITY); - - if (prP2pBssInfo->prStaRecOfAP != NULL) { - P_STA_RECORD_T prStaRec = prP2pBssInfo->prStaRecOfAP; - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_DISASSOC_LEAVING_BSS); - - //20120830 moved into p2pFuncDisconnect() - //cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - - } - } - } while (FALSE); - - return; -} /* p2pFsmRunEventBeaconTimeout */ - - - - -#if CFG_SUPPORT_WFD -VOID -p2pFsmRunEventWfdSettingUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgSettings = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - WLAN_STATUS rStatus; - - - DBGLOG(P2P, INFO,("p2pFsmRunEventWfdSettingUpdate\n")); - - do { - ASSERT_BREAK((prAdapter != NULL)); - - if (prMsgHdr != NULL) { - prMsgWfdCfgSettings = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)prMsgHdr; - prWfdCfgSettings = prMsgWfdCfgSettings->prWfdCfgSettings; - } - else { - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - } - - DBGLOG(P2P, INFO,("WFD Enalbe %x info %x state %x flag %x adv %x\n", - prWfdCfgSettings->ucWfdEnable, - prWfdCfgSettings->u2WfdDevInfo, - prWfdCfgSettings->u4WfdState, - prWfdCfgSettings->u4WfdFlag, - prWfdCfgSettings->u4WfdAdvancedFlag)); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_WFD_CTRL, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, - NULL, /* pfCmdTimeoutHandler */ - sizeof(WFD_CFG_SETTINGS_T), /* u4SetQueryInfoLen */ - (PUINT_8)prWfdCfgSettings, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - } while (FALSE); - - return; - -} -/* p2pFsmRunEventWfdSettingUpdate */ - -#endif - - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - // TODO: - } - - } while (FALSE); - - return; - -} /* end of p2pGenerateP2P_IEForAssocReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Probe Request frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - ASSERT(prAdapter); - ASSERT(pucBuf); - - // TODO: - - return; - -} /* end of p2pGenerateP2P_IEForProbReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pCalculateP2P_IELenForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - // TODO: - - return 0; - -} /* end of p2pCalculateP2P_IELenForProbeReq() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_UNSPECIFIED); - - - //20120830 moved into p2puUncDisconnect. - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - - return; -} /* p2pRunEventAAATxFail */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaState; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - eOriMediaState = prP2pBssInfo->eConnectionState; - - if (prStaRec != NULL) { - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - } - else{ - break; - } - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem >= P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - rStatus = WLAN_STATUS_RESOURCES; - break; - } - - bssAddStaRecToClientList(prAdapter, prP2pBssInfo, prStaRec); - - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - /* Update Connected state to FW. */ - if (eOriMediaState != prP2pBssInfo->eConnectionState) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAAComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - /* Glue layer indication. */ - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, TRUE); - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAASuccess */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRxPublicActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_PUBLIC_ACTION_FRAME_T prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - ASSERT(prSwRfb); - ASSERT(prAdapter); - - - - prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)prSwRfb->pvHeader; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - DBGLOG(P2P, TRACE, ("RX Public Action Frame Token:%d.\n", prPublicActionFrame->ucDialogToken)); - - if (prPublicActionFrame->ucCategory != CATEGORY_PUBLIC_ACTION) { - return rWlanStatus; - } - - switch (prPublicActionFrame->ucAction) { - case ACTION_PUBLIC_WIFI_DIRECT: - break; - case ACTION_GAS_INITIAL_REQUEST: - case ACTION_GAS_INITIAL_RESPONSE: - case ACTION_GAS_COMEBACK_REQUEST: - case ACTION_GAS_COMEBACK_RESPONSE: - break; - default: - break; - } - - return rWlanStatus; -} /* p2pRxPublicActionFrame */ - - - -WLAN_STATUS -p2pRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_ACTION_FRAME_T prP2pActionFrame = (P_P2P_ACTION_FRAME_T)NULL; - UINT_8 aucOui[3] = VENDOR_OUI_WFA_SPECIFIC; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pActionFrame = (P_P2P_ACTION_FRAME_T)prSwRfb->pvHeader; - - if (prP2pActionFrame->ucCategory != CATEGORY_VENDOR_SPECIFIC_ACTION) { - DBGLOG(P2P, TRACE, ("RX Action Frame but not vendor specific.\n")); - break; - } - - - if ((prP2pActionFrame->ucOuiType != VENDOR_OUI_TYPE_P2P) || - (prP2pActionFrame->aucOui[0] != aucOui[0]) || - (prP2pActionFrame->aucOui[1] != aucOui[1]) || - (prP2pActionFrame->aucOui[2] != aucOui[2])) { - DBGLOG(P2P, TRACE, ("RX Vendor Specific Action Frame but not P2P Type or not WFA OUI.\n")); - break; - } - - } while (FALSE); - - return rWlanStatus; -} /* p2pRxActionFrame */ - - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ) -{ - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_32 i; - BOOLEAN fgNoaAttrExisted = FALSE; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - prP2pSpecificBssInfo->fgEnableOppPS = prEventUpdateNoaParam->fgEnableOppPS; - prP2pSpecificBssInfo->u2CTWindow = prEventUpdateNoaParam->u2CTWindow; - prP2pSpecificBssInfo->ucNoAIndex = prEventUpdateNoaParam->ucNoAIndex; - prP2pSpecificBssInfo->ucNoATimingCount = prEventUpdateNoaParam->ucNoATimingCount; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->fgEnableOppPS; - - - ASSERT(prP2pSpecificBssInfo->ucNoATimingCount <= P2P_MAXIMUM_NOA_COUNT); - - for (i = 0; i < prP2pSpecificBssInfo->ucNoATimingCount; i++) { - // in used - prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse = - prEventUpdateNoaParam->arEventNoaTiming[i].fgIsInUse; - // count - prP2pSpecificBssInfo->arNoATiming[i].ucCount = - prEventUpdateNoaParam->arEventNoaTiming[i].ucCount; - // duration - prP2pSpecificBssInfo->arNoATiming[i].u4Duration = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Duration; - // interval - prP2pSpecificBssInfo->arNoATiming[i].u4Interval = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Interval; - // start time - prP2pSpecificBssInfo->arNoATiming[i].u4StartTime = - prEventUpdateNoaParam->arEventNoaTiming[i].u4StartTime; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse; - } - - prP2pSpecificBssInfo->fgIsNoaAttrExisted = fgNoaAttrExisted; - - // update beacon content by the change - bssUpdateBeaconContent(prAdapter, ucNetTypeIndex); -} - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_func.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_func.c deleted file mode 100755 index dddf73c3f20e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_func.c +++ /dev/null @@ -1,3861 +0,0 @@ -#include "precomp.h" - -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif - - -APPEND_VAR_ATTRI_ENTRY_T txAssocRspAttributesTable[] = { - { (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS) , NULL, p2pFuncAppendAttriStatusForAssocRsp } /* 0 */ // Status - ,{ (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING), NULL, p2pFuncAppendAttriExtListenTiming } /* 8 */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbeRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for requesting scan. There is an option to do ACTIVE or PASSIVE scan. -* -* @param eScanType - Specify the scan type of the scan request. It can be an ACTIVE/PASSIVE -* Scan. -* eChannelSet - Specify the prefered channel set. -* A FULL scan would request a legacy full channel normal scan.(usually ACTIVE). -* A P2P_SOCIAL scan would scan 1+6+11 channels.(usually ACTIVE) -* A SPECIFIC scan would only 1/6/11 channels scan. (Passive Listen/Specific Search) -* ucChannelNum - A specific channel number. (Only when channel is specified) -* eBand - A specific band. (Only when channel is specified) -* -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncRequestScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - - P_MSG_SCN_SCAN_REQ prScanReq = (P_MSG_SCN_SCAN_REQ)NULL; - - DEBUGFUNC("p2pFuncRequestScan()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prScanReqInfo != NULL)); - - if (prScanReqInfo->eChannelSet == SCAN_CHANNEL_SPECIFIED) { - ASSERT_BREAK(prScanReqInfo->ucNumChannelList > 0); - DBGLOG(P2P, LOUD, ("P2P Scan Request Channel:%d\n", prScanReqInfo->arScanChannelList[0].ucChannelNum)); - } - - prScanReq = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - if (!prScanReq) { - ASSERT(0); // Can't trigger SCAN FSM - break; - } - - prScanReq->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_REQ; - prScanReq->ucSeqNum = ++prScanReqInfo->ucSeqNumOfScnMsg; - prScanReq->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanReq->eScanType = prScanReqInfo->eScanType; - prScanReq->eScanChannel = prScanReqInfo->eChannelSet; - prScanReq->u2IELen = 0; - - /* Copy IE for Probe Request. */ - kalMemCopy(prScanReq->aucIE, prScanReqInfo->aucIEBuf, prScanReqInfo->u4BufLength); - prScanReq->u2IELen = (UINT_16)prScanReqInfo->u4BufLength; - - prScanReq->u2ChannelDwellTime = prScanReqInfo->u2PassiveDewellTime; - - switch (prScanReqInfo->eChannelSet) { - case SCAN_CHANNEL_SPECIFIED: - { - UINT_32 u4Idx = 0; - P_RF_CHANNEL_INFO_T prDomainInfo = (P_RF_CHANNEL_INFO_T)prScanReqInfo->arScanChannelList; - - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - - for (u4Idx = 0; u4Idx < prScanReqInfo->ucNumChannelList; u4Idx++) { - prScanReq->arChnlInfoList[u4Idx].ucChannelNum = prDomainInfo->ucChannelNum; - prScanReq->arChnlInfoList[u4Idx].eBand = prDomainInfo->eBand; - prDomainInfo++; - } - - prScanReq->ucChannelListNum = prScanReqInfo->ucNumChannelList; - } - case SCAN_CHANNEL_FULL: - case SCAN_CHANNEL_2G4: - case SCAN_CHANNEL_P2P_SOCIAL: - { - UINT_8 aucP2pSsid[] = P2P_WILDCARD_SSID; - - COPY_SSID(prScanReq->aucSSID, - prScanReq->ucSSIDLength, - prScanReqInfo->rSsidStruct.aucSsid, - prScanReqInfo->rSsidStruct.ucSsidLen); - - /* For compatible. */ - if (EQUAL_SSID(aucP2pSsid, P2P_WILDCARD_SSID_LEN, prScanReq->aucSSID, prScanReq->ucSSIDLength)) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_P2P_WILDCARD; - } - else if (prScanReq->ucSSIDLength != 0) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - } - } - break; - default: - /* Currently there is no other scan channel set. */ - ASSERT(FALSE); - break; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanReq, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncRequestScan */ - -VOID -p2pFuncCancelScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanInfo - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prScanInfo != NULL)); - - if (!prScanInfo->fgIsScanRequest) { - break; - } - - - if (prScanInfo->ucSeqNumOfScnMsg) { - /* There is a channel privilege on hand. */ - DBGLOG(P2P, TRACE, ("P2P Cancel Scan\n")); - - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->ucSeqNum = prScanInfo->ucSeqNumOfScnMsg++; - prScanCancelMsg->fgIsChannelExt = FALSE; - prScanInfo->fgIsScanRequest = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancelMsg, - MSG_SEND_METHOD_BUF); - - - } - - - } while (FALSE); - - return; -} /* p2pFuncCancelScan */ - - -VOID -p2pFuncSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (eOpMode < OP_MODE_NUM)); - - if (prP2pBssInfo->eCurrentOPMode != eOpMode) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to from %d, to %d.\n", prP2pBssInfo->eCurrentOPMode, eOpMode)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); - - p2pFsmRunEventStopAP(prAdapter, NULL); - break; - default: - break; - } - - - prP2pBssInfo->eIntendOPMode = eOpMode; - prP2pBssInfo->eCurrentOPMode = eOpMode; - switch (eOpMode) { - case OP_MODE_INFRASTRUCTURE: - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to Client.\n")); - case OP_MODE_ACCESS_POINT: -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - /* Change interface address. */ - if (eOpMode == OP_MODE_ACCESS_POINT) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to AP.\n")); - prP2pBssInfo->ucSSIDLen = 0; - } - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucInterfaceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucInterfaceAddress); - - - break; - case OP_MODE_P2P_DEVICE: - { - /* Change device address. */ - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch back to P2P Device.\n")); - -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - - - } - break; - default: -// if (IS_BSS_ACTIVE(prP2pBssInfo)) { -// UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - -// nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - ASSERT(FALSE); - break; - } - - if (1) { - P2P_DISCONNECT_INFO rP2PDisInfo; - - rP2PDisInfo.ucRole = 2; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_P2P_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(P2P_DISCONNECT_INFO), - (PUINT_8)&rP2PDisInfo, - NULL, - 0); - } - - - DBGLOG(P2P, TRACE, ("The device address is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucOwnMacAddr))); - DBGLOG(P2P, TRACE, ("The BSSID is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucBSSID))); - - /* Update BSS INFO to FW. */ - if ((fgSyncToFW) && (eOpMode != OP_MODE_ACCESS_POINT)) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - } - - } while (FALSE); - - return; -} /* p2pFuncSwitchOPMode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will start a P2P Group Owner and send Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncStartGO ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && (prBssInfo != NULL)); - - //ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - DBGLOG(P2P, TRACE, ("p2pFuncStartGO:\n")); - - /* AP mode started. */ - p2pFuncSwitchOPMode(prAdapter, prBssInfo, prBssInfo->eIntendOPMode, FALSE); - - prBssInfo->eIntendOPMode = OP_MODE_NUM; - - //4 <1.1> Assign SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - pucSsidBuf, - ucSsidLen); - - DBGLOG(P2P, TRACE, ("GO SSID:%s \n", prBssInfo->aucSSID)); - - //4 <1.2> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - - //4 <1.3> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = ucChannelNum; - prBssInfo->eBand = eBand; - prBssInfo->eBssSCO = eSco; - - DBGLOG(P2P, TRACE, ("GO Channel:%d \n", ucChannelNum)); - - - if (prBssInfo->eBand == BAND_5G) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else if (fgIsPureAP) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11GN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (prBssInfo->ucAllSupportedRatesLen == 0) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - if (!fgIsPureAP) { - prBssInfo->fgIsProtection = TRUE; /* Always enable protection at P2P GO */ - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - } - else { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) - prBssInfo->fgIsProtection = TRUE; - } - - // 20120106 frog: I want separate OP_Mode & Beacon TX Function. - //p2pFuncSwitchOPMode(prAdapter, prBssInfo, OP_MODE_ACCESS_POINT, FALSE); - - bssInitForAP(prAdapter, prBssInfo, FALSE); - - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif /* CFG_SUPPORT_AAA */ - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - - //4 <3.2> Reset HW TSF Update Mode and Beacon Mode - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.3> Update Beacon again for network phy type confirmed. - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.4> Setup BSSID - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - - } while (FALSE); - - return; -} /* p2pFuncStartGO() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncReleaseCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_ABORT_T prMsgChRelease = (P_MSG_CH_ABORT_T)NULL; - - DEBUGFUNC("p2pFuncReleaseCh()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - if (!prChnlReqInfo->fgIsChannelRequested) { - break; - } - else { - DBGLOG(P2P, TRACE, ("P2P Release Channel\n")); - prChnlReqInfo->fgIsChannelRequested = FALSE; - } - - /* 1. return channel privilege to CNM immediately */ - prMsgChRelease = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChRelease) { - ASSERT(0); // Can't release Channel to CNM - break; - } - - prMsgChRelease->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChRelease->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChRelease->ucTokenID = prChnlReqInfo->ucSeqNumOfChReq++; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChRelease, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncReleaseCh */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of CHANNEL_REQ_JOIN Initial. Enter CHANNEL_REQ_JOIN State. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncAcquireCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_REQ_T prMsgChReq = (P_MSG_CH_REQ_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - break; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChReq->ucTokenID = ++prChnlReqInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = prChnlReqInfo->u4MaxInterval; - - prMsgChReq->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prMsgChReq->eRfSco = prChnlReqInfo->eChnlSco; - prMsgChReq->eRfBand = prChnlReqInfo->eBand; - -// dump_stack(); - - kalMemZero(prMsgChReq->aucBSSID, MAC_ADDR_LEN); - - /* Channel request join BSSID. */ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prChnlReqInfo->fgIsChannelRequested = TRUE; - - } while (FALSE); - - return; -} /* p2pFuncAcquireCh */ - -#if 0 -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnHdr, - IN UINT_32 u4HdrLen, - IN PUINT_8 pucBcnBody, - IN UINT_32 u4BodyLen, - IN UINT_32 u4DtimPeriod, - IN UINT_32 u4BcnInterval) -{ - WLAN_STATUS rResultStatus = WLAN_STATUS_INVALID_DATA; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucTIMBody = (PUINT_8)NULL; - UINT_16 u2FrameLength = 0, UINT_16 u2OldBodyLen = 0; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnMsduInfo = prP2pBssInfo->prBeacon - - ASSERT_BREAK(prBcnMsduInfo != NULL); - - /* TODO: Find TIM IE pointer. */ - prBcnFrame = prBcnMsduInfo->prPacket; - - ASSERT_BREAK(prBcnFrame != NULL); - - do { - /* Ori header. */ - UINT_16 u2IELength = 0, u2Offset = 0; - PUINT_8 pucIEBuf = prBcnFrame->aucInfoElem; - - u2IELength = prBcnMsduInfo->u2FrameLength - prBcnMsduInfo->ucMacHeaderLength; - - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - if ((IE_ID(pucIEBuf) == ELEM_ID_TIM) || - ((IE_ID(pucIEBuf) > ELEM_ID_IBSS_PARAM_SET)) { - pucTIMBody = pucIEBuf; - break - } - u2FrameLength += IE_SIZE(pucIEBuf); - } - - if (pucTIMBody == NULL) { - pucTIMBody = pucIEBuf; - } - - /* Body not change. */ - u2OldBodyLen = (UINT_16)((UINT_32)pucTIMBody - (UINT_32)prBcnFrame->aucInfoElem); - - // Move body. - kalMemCmp(aucIEBuf, pucTIMBody, u2OldBodyLen); - } while (FALSE); - - - if (pucBcnHdr) { - kalMemCopy(prBcnMsduInfo->prPacket, pucBcnHdr, u4HdrLen); - - pucTIMBody = (PUINT_8)((UINT_32)prBcnMsduInfo->prPacket + u4HdrLen); - - prBcnMsduInfo->ucMacHeaderLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - u2FrameLength = u4HdrLen; /* Header + Partial Body. */ - - } - else { - /* Header not change. */ - u2FrameLength += prBcnMsduInfo->ucMacHeaderLength; - } - - - if (pucBcnBody) { - kalMemCopy(pucTIMBody, pucBcnBody, u4BodyLen); - u2FrameLength += (UINT_16)u4BodyLen; - } - else { - kalMemCopy(pucTIMBody, aucIEBuf, u2OldBodyLen); - u2FrameLength += u2OldBodyLen; - } - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = u2FrameLength; - - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - prP2pBssInfo->u2BeaconInterval = (UINT_16)u4BcnInterval; - prP2pBssInfo->ucDTIMPeriod = (UINT_8)u4DtimPeriod; - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - prBcnMsduInfo->ucPacketType = 3; - - rResultStatus = nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prP2pBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* AP is created, Beacon Update. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rResultStatus; -} /* p2pFuncBeaconUpdate */ - -#else -WLAN_STATUS -p2pFuncBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (prBcnUpdateInfo != NULL)); - - prBcnMsduInfo = prP2pBssInfo->prBeacon; - -#if DBG - if (prBcnUpdateInfo->pucBcnHdr != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnHdr == ((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD)); - } - - if (prBcnUpdateInfo->pucBcnBody != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnBody == ((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen)); - } -#endif - prBcnFrame = (P_WLAN_BEACON_FRAME_T)((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD); - - if (!pucNewBcnBody) { - /* Old body. */ - pucNewBcnBody = prBcnUpdateInfo->pucBcnBody; - ASSERT(u4NewBodyLen == 0); - u4NewBodyLen = prBcnUpdateInfo->u4BcnBodyLen; - } - else { - prBcnUpdateInfo->u4BcnBodyLen = u4NewBodyLen; - } - - /* Temp buffer body part. */ - kalMemCopy(aucIEBuf, pucNewBcnBody, u4NewBodyLen); - - if (pucNewBcnHdr) { - kalMemCopy(prBcnFrame, pucNewBcnHdr, u4NewHdrLen); - prBcnUpdateInfo->pucBcnHdr = (PUINT_8)prBcnFrame; - prBcnUpdateInfo->u4BcnHdrLen = u4NewHdrLen; - } - - pucIEBuf = (PUINT_8)((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen); - kalMemCopy(pucIEBuf, aucIEBuf, u4NewBodyLen); - prBcnUpdateInfo->pucBcnBody = pucIEBuf; - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = (UINT_16)(prBcnUpdateInfo->u4BcnHdrLen + prBcnUpdateInfo->u4BcnBodyLen); - - prBcnMsduInfo->ucPacketType = 3; - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - - /* Update BSS INFO related information. */ - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prBcnFrame->aucSrcAddr); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prBcnFrame->aucBSSID); - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - - p2pFuncParseBeaconContent(prAdapter, - prP2pBssInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); - -#if 1 - //bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); -#else - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBcnFrame->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); -#endif - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncBeaconUpdate */ - -#endif - -// TODO: We do not apply IE in deauth frame set from upper layer now. -WLAN_STATUS -p2pFuncDeauth ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDeauth - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDeauth, u2ReasonCode); - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDeauth */ - -// TODO: We do not apply IE in disassoc frame set from upper layer now. -WLAN_STATUS -p2pFuncDisassoc ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDisassoc - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - //20120830 moved into p2pFuncDisconnect(). - //cnmStaRecFree(prAdapter, prCliStaRec, TRUE); - - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDisassoc */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - DEBUGFUNC("p2pFuncDissolve()"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pBssInfo != NULL)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - /* Reset station record status. */ - if (prP2pBssInfo->prStaRecOfAP) { - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DEAUTH_LEAVING_BSS); - - // 2012/02/14 frog: After formation before join group, prStaRecOfAP is NULL. - p2pFuncDisconnect(prAdapter, - prP2pBssInfo->prStaRecOfAP, - fgSendDeauth, - u2ReasonCode); - } - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - break; - case OP_MODE_ACCESS_POINT: - /* Under AP mode, we would net send deauthentication frame to each STA. - * We only stop the Beacon & let all stations timeout. - */ - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - NULL, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)NULL); - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - while (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_REMOVE_HEAD(prStaRecOfClientList, prCurrStaRec, P_STA_RECORD_T); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - p2pFuncDisconnect(prAdapter, prCurrStaRec, TRUE, u2ReasonCode); - - } - - } - - break; - default: - return; // 20110420 -- alreay in Device Mode. - } - - /* Make the deauth frame send to FW ASAP. */ - wlanAcquirePowerControl(prAdapter); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - wlanReleasePowerControl(prAdapter); - - kalMdelay(100); - - /* Change Connection Status. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - } while (FALSE); - - return; -} /* p2pFuncDissolve */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDisconnect ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - DBGLOG(P2P, TRACE, ("p2pFuncDisconnect()")); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - /* Indicate disconnect. */ - // TODO: -// kalP2PGOStationUpdate -// kalP2PGCIndicateConnectionStatus - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, prStaRec->aucMacAddr); - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - } - - if (fgSendDeauth) { - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - prStaRec, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)p2pFsmRunEventDeauthTxDone); - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - - } - else { - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* GO: It would stop Beacon TX. GC: Stop all BSS related PS function. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - } while (FALSE); - - return; - -} /* p2pFuncDisconnect */ - - - - - - -WLAN_STATUS -p2pFuncTxMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prTxMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxReqInfo != NULL)); - - if (prMgmtTxReqInfo->fgIsMgmtTxRequested) { - - // 1. prMgmtTxReqInfo->prMgmtTxMsdu != NULL - /* Packet on driver, not done yet, drop it. */ - if ((prTxMsduInfo = prMgmtTxReqInfo->prMgmtTxMsdu) != NULL) { - - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - FALSE, - prTxMsduInfo->prPacket, - (UINT_32)prTxMsduInfo->u2FrameLength); - - // Leave it to TX Done handler. - //cnmMgtPktFree(prAdapter, prTxMsduInfo); - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - // 2. prMgmtTxReqInfo->prMgmtTxMsdu == NULL - /* Packet transmitted, wait tx done. (cookie issue) */ - // 20120105 frog - use another u8cookie to store this value. - - } - - ASSERT(prMgmtTxReqInfo->prMgmtTxMsdu == NULL); - - - - prWlanHdr = (P_WLAN_MAC_HEADER_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - prStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_P2P_INDEX, prWlanHdr->aucAddr1); - prMgmtTxMsdu->ucNetworkType = (UINT_8)NETWORK_TYPE_P2P_INDEX; - - switch (prWlanHdr->u2FrameCtrl & MASK_FRAME_TYPE) { - case MAC_FRAME_PROBE_RSP: - DBGLOG(P2P, TRACE, ("p2pFuncTxMgmtFrame: TX MAC_FRAME_PROBE_RSP\n")); - prMgmtTxMsdu = p2pFuncProcessP2pProbeRsp(prAdapter, prMgmtTxMsdu); - break; - default: - break; - } - - - prMgmtTxReqInfo->u8Cookie = u8Cookie; - prMgmtTxReqInfo->prMgmtTxMsdu = prMgmtTxMsdu; - prMgmtTxReqInfo->fgIsMgmtTxRequested = TRUE; - - prMgmtTxMsdu->eSrc = TX_PACKET_MGMT; - prMgmtTxMsdu->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMgmtTxMsdu->ucStaRecIndex = (prStaRec != NULL)?(prStaRec->ucIndex):(0xFF); - if (prStaRec != NULL) { - DBGLOG(P2P, TRACE, ("Mgmt with station record: "MACSTR" .\n", MAC2STR(prStaRec->aucMacAddr))); - } - - prMgmtTxMsdu->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; // TODO: undcertain. - prMgmtTxMsdu->fgIs802_1x = FALSE; - prMgmtTxMsdu->fgIs802_11 = TRUE; - prMgmtTxMsdu->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMgmtTxMsdu->pfTxDoneHandler = p2pFsmRunEventMgmtFrameTxDone; - prMgmtTxMsdu->fgIsBasicRate = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt seq NO. %d .\n", prMgmtTxMsdu->ucTxSeqNum)); - - nicTxEnqueueMsdu(prAdapter, prMgmtTxMsdu); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncTxMgmtFrame */ - - - -VOID -p2pFuncSetChannel ( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prRfChannelInfo != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnSettings->ucOperatingChnl = prRfChannelInfo->ucChannelNum; - prP2pConnSettings->eBand = prRfChannelInfo->eBand; - - - } while (FALSE); - - return; -} -/* p2pFuncSetChannel */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncRetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - BOOLEAN fgRetValue = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prStaRec != NULL) && - (prJoinInfo != NULL)); - - /* Retry other AuthType if possible */ - if (!prJoinInfo->ucAvailableAuthTypes) { - break; - } - - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(P2P, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - break; - } - - prJoinInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - ASSERT(0); // Can't trigger SAA FSM - break; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - fgRetValue = TRUE; - } while (FALSE); - - return fgRetValue; - - - -}/* end of p2pFuncRetryJOIN() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("p2pUpdateBssInfoForJOIN()"); - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - DBGLOG(P2P, INFO, ("Update P2P_BSS_INFO_T and apply settings to MAC\n")); - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prP2pBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - if (prBssDesc == NULL) { - /* Target BSS NULL. */ - DBGLOG(P2P, TRACE,("Target BSS NULL\n")); - return; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAssocRspFrame->aucBSSID)) { - ASSERT(FALSE); - } - - //4 <1.3> Setup Channel, Band - prP2pBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prP2pBssInfo->eBand = prBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prP2pBssInfo->prStaRecOfAP = prStaRec; - prP2pBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prP2pBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prP2pBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prP2pBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prP2pBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prP2pBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prP2pBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prP2pBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prP2pBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prP2pBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - ASSERT(prBssDesc); - - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prP2pBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prP2pBssInfo->ucDTIMPeriod = 0; - prP2pBssInfo->u2ATIMWindow = 0; - - prP2pBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of p2pUpdateBssInfoForJOIN() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = TRUE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - - DBGLOG(P2P, TRACE, ("p2pValidate Authentication Frame\n")) - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pprStaRec != NULL) && - (pu2StatusCode != NULL)); - - /* P2P 3.2.8 */ - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* We are not under AP Mode yet. */ - fgReplyAuth = FALSE; - DBGLOG(P2P, WARN, ("Current OP mode is not under AP mode. (%d)\n", prP2pBssInfo->eCurrentOPMode)); - break; - } - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX, - prAuthFrame->aucSrcAddr); - - if (!prStaRec) { - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - /* Sent a message event to clean un-used STA_RECORD_T. */ - ASSERT(prStaRec); - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - prStaRec->u2BSSBasicRateSet = prP2pBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = RATE_SET_ERP_P2P; - - prStaRec->u2OperationalRateSet = RATE_SET_ERP_P2P; - prStaRec->ucPhyTypeSet = PHY_TYPE_SET_802_11GN; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - else { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - if ((prStaRec->ucStaState > STA_STATE_1) && (IS_STA_IN_P2P(prStaRec))) { - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - } - - } - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem >= P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - /* GROUP limit full. */ - /* P2P 3.2.8 */ - DBGLOG(P2P, WARN, ("Group Limit Full. (%d)\n", (INT_16)prP2pBssInfo->rStaRecOfClientList.u4NumElem)); - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - - cnmStaRecFree(prAdapter, prStaRec, FALSE); - break; - } - else { - /* Hotspot Blacklist */ - if(prAuthFrame->aucSrcAddr) { - if(kalP2PCmpBlackList(prAdapter->prGlueInfo, prAuthFrame->aucSrcAddr)) { - fgReplyAuth = FALSE; - return fgReplyAuth; - } - } - } - - //prStaRec->eStaType = STA_TYPE_INFRA_CLIENT; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - prStaRec->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - prStaRec->ucJoinFailureCount = 0; - - *pprStaRec = prStaRec; - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - - - return fgReplyAuth; - -} /* p2pFuncValidateAuth */ - - - - -VOID -p2pFuncResetStaRecStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - do { - if ((prAdapter == NULL) || (prStaRec == NULL)) { - ASSERT(FALSE); - break; - } - - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - - } while (FALSE); - - return; -} /* p2pFuncResetStaRecStatus */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to initialize the value of the connection settings for -* P2P network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncInitConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ) -{ - P_DEVICE_TYPE_T prDevType; - UINT_8 aucDefaultDevName[] = P2P_DEFAULT_DEV_NAME; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - ASSERT(prP2PConnSettings); - - /* Setup Default Device Name */ - prP2PConnSettings->ucDevNameLen = P2P_DEFAULT_DEV_NAME_LEN; - kalMemCopy(prP2PConnSettings->aucDevName, aucDefaultDevName, sizeof(aucDefaultDevName)); - - /* Setup Primary Device Type (Big-Endian) */ - prDevType = &prP2PConnSettings->rPrimaryDevTypeBE; - - prDevType->u2CategoryId = HTONS(P2P_DEFAULT_PRIMARY_CATEGORY_ID); - prDevType->u2SubCategoryId = HTONS(P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID); - - prDevType->aucOui[0] = aucWfaOui[0]; - prDevType->aucOui[1] = aucWfaOui[1]; - prDevType->aucOui[2] = aucWfaOui[2]; - prDevType->aucOui[3] = VENDOR_OUI_TYPE_WPS; - - /* Setup Secondary Device Type */ - prP2PConnSettings->ucSecondaryDevTypeCount = 0; - - /* Setup Default Config Method */ - prP2PConnSettings->eConfigMethodSelType = ENUM_CONFIG_METHOD_SEL_AUTO; - prP2PConnSettings->u2ConfigMethodsSupport = P2P_DEFAULT_CONFIG_METHOD; - prP2PConnSettings->u2TargetConfigMethod = 0; - prP2PConnSettings->u2LocalConfigMethod = 0; - prP2PConnSettings->fgIsPasswordIDRdy = FALSE; - - /* For Device Capability */ - prP2PConnSettings->fgSupportServiceDiscovery = FALSE; - prP2PConnSettings->fgSupportClientDiscoverability = TRUE; - prP2PConnSettings->fgSupportConcurrentOperation = TRUE; - prP2PConnSettings->fgSupportInfraManaged = FALSE; - prP2PConnSettings->fgSupportInvitationProcedure = FALSE; - - /* For Group Capability */ -#if CFG_SUPPORT_PERSISTENT_GROUP - prP2PConnSettings->fgSupportPersistentP2PGroup = TRUE; -#else - prP2PConnSettings->fgSupportPersistentP2PGroup = FALSE; -#endif - prP2PConnSettings->fgSupportIntraBSSDistribution = TRUE; - prP2PConnSettings->fgSupportCrossConnection = TRUE; - prP2PConnSettings->fgSupportPersistentReconnect = FALSE; - - prP2PConnSettings->fgSupportOppPS = FALSE; - prP2PConnSettings->u2CTWindow = P2P_CTWINDOW_DEFAULT; - - /* For Connection Settings. */ - prP2PConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prP2PConnSettings->prTargetP2pDesc = NULL; - prP2PConnSettings->ucSSIDLen = 0; - - /* Misc */ - prP2PConnSettings->fgIsScanReqIssued = FALSE; - prP2PConnSettings->fgIsServiceDiscoverIssued = FALSE; - prP2PConnSettings->fgP2pGroupLimit = FALSE; - prP2PConnSettings->ucOperatingChnl = 0; - prP2PConnSettings->ucListenChnl = 0; - prP2PConnSettings->ucTieBreaker = (UINT_8)(kalRandomNumber() & 0x1); - - prP2PConnSettings->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - return; -} /* p2pFuncInitConnectionSettings */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = TRUE; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; -#if CFG_SUPPORT_WFD - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_WFD_ATTRIBUTE_T prWfdAttribute = (P_WFD_ATTRIBUTE_T)NULL; - BOOLEAN fgNeedFree = FALSE; -#endif - - - /* TODO(Kevin): Call P2P functions to check .. - 2. Check we can accept connection from thsi peer - a. If we are in PROVISION state, only accept the peer we do the GO formation previously. - b. If we are in OPERATION state, only accept the other peer when P2P_GROUP_LIMIT is 0. - 3. Check Black List here. - */ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pu2StatusCode != NULL)); - - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)prSwRfb->pvHeader; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - /* Station record should be ready while RX AUTH frame. */ - fgReplyAssocResp = FALSE; - ASSERT(FALSE); - break; - } - else { - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - prStaRec->u2DesiredNonHTRateSet &= prP2pBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prP2pBssInfo->ucPhyTypeSet; - - if (prStaRec->ucDesiredPhyTypeSet == 0) { - /* The station only support 11B rate. */ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - -#if CFG_SUPPORT_WFD && 1 - //LOG_FUNC("Skip check WFD IE becasue some API is not ready\n"); /* Eddie */ - if (!prAdapter->rWifiVar.prP2pFsmInfo) { - fgReplyAssocResp = FALSE; - ASSERT(FALSE); - break; - } - - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - DBGLOG(P2P, INFO,("Current WfdCfgSettings wfd_en %u wfd_info 0x%x wfd_policy 0x%x wfd_flag 0x%x\n", - prWfdCfgSettings->ucWfdEnable, prWfdCfgSettings->u2WfdDevInfo, - prWfdCfgSettings->u4WfdPolicy, prWfdCfgSettings->u4WfdFlag)); /* Eddie */ - if (prWfdCfgSettings->ucWfdEnable) { - if (prWfdCfgSettings->u4WfdPolicy & BIT(6)) { - /* Rejected all. */ - break; - } - else { - - //UINT_16 u2AttriListLen = 0; - UINT_16 u2WfdDevInfo = 0; - P_WFD_DEVICE_INFORMATION_IE_T prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)NULL; - - //fgNeedFree = p2pFuncGetAttriList(prAdapter, - // VENDOR_OUI_TYPE_WFD, - // (PUINT_8)prAssocReqFrame->aucInfoElem, - // (prSwRfb->u2PacketLen - OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem)), - // (PPUINT_8)&prWfdAttribute, - // &u2AttriListLen); - - prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T) - p2pFuncGetSpecAttri(prAdapter, - VENDOR_OUI_TYPE_WFD, - (PUINT_8)prAssocReqFrame->aucInfoElem, - (prSwRfb->u2PacketLen - OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem)), - WFD_ATTRI_ID_DEV_INFO); - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(5)) && (prAttriWfdDevInfo != NULL)) { - /* Rejected with WFD IE. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(0)) && (prAttriWfdDevInfo == NULL)) { - /* Rejected without WFD IE. */ - break; - } - - if (prAttriWfdDevInfo != NULL) { - - //prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)p2pFuncGetSpecAttri(prAdapter, - // VENDOR_OUI_TYPE_WFD, - // (PUINT_8)prWfdAttribute, - // u2AttriListLen, - // WFD_ATTRI_ID_DEV_INFO); - //if (prAttriWfdDevInfo == NULL) { - // /* No such attribute. */ - // break; - //} - - WLAN_GET_FIELD_BE16(&prAttriWfdDevInfo->u2WfdDevInfo, &u2WfdDevInfo); - DBGLOG(P2P, INFO,("RX Assoc Req WFD Info:0x%x.\n", u2WfdDevInfo)); - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(1)) && ((u2WfdDevInfo & 0x3) == 0x0)) { - /* Rejected because of SOURCE. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(2)) && ((u2WfdDevInfo & 0x3) == 0x1)) { - /* Rejected because of Primary Sink. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(3)) && ((u2WfdDevInfo & 0x3) == 0x2)) { - /* Rejected because of Secondary Sink. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(4)) && ((u2WfdDevInfo & 0x3) == 0x3)) { - /* Rejected because of Source & Primary Sink. */ - break; - } - - /* Check role */ - - if(prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) { - - if((prWfdCfgSettings->u2WfdDevInfo & BITS(0,1)) == 0x3) { - //P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgUpdate = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - UINT_16 u2DevInfo = prWfdCfgSettings->u2WfdDevInfo; - - /* We may change role here if we are dual role */ - - if((u2WfdDevInfo & BITS(0,1)) == 0x00 /* Peer is Source*/) { - DBGLOG(P2P, INFO,("WFD: Switch role to primary sink\n")); - - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - prWfdCfgSettings->u2WfdDevInfo |= 0x1; - - /* event to annonce the role is chanaged to P-Sink */ - - } - else if((u2WfdDevInfo & BITS(0,1)) == 0x01 /* Peer is P-Sink */) { - - DBGLOG(P2P, INFO,("WFD: Switch role to source\n")); - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - /* event to annonce the role is chanaged to Source */ - } - else { - - DBGLOG(P2P, INFO,("WFD: Peer role is wrong type(dev 0x%x)\n", (u2DevInfo))); - DBGLOG(P2P, INFO,("WFD: Switch role to source\n")); - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - /* event to annonce the role is chanaged to Source */ - } - - p2pFsmRunEventWfdSettingUpdate (prAdapter,NULL); - - } /* Dual role p2p->wfd_params->WfdDevInfo */ - } /* WFD_FLAG_DEV_INFO_VALID */ - - - } - else { - /* Without WFD IE. - * Do nothing. Accept the connection request. - */ - } - } - - } /* ucWfdEnable */ - -#endif - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - -#if CFG_SUPPORT_WFD - if ((prWfdAttribute) && (fgNeedFree)) { - kalMemFree(prWfdAttribute, VIR_MEM_TYPE, WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE); - } -#endif - - return fgReplyAssocResp; - -} /* p2pFuncValidateAssocReq */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to check the P2P IE -* -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncParseCheckForP2PInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - P_IE_WFA_T prWfaIE = (P_IE_WFA_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pucOuiType != NULL)); - - prWfaIE = (P_IE_WFA_T)pucBuf; - - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - - return TRUE; - } while (FALSE); - - return FALSE; -} /* p2pFuncParseCheckForP2PInfoElem */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - BOOLEAN fgIsReplyProbeRsp = FALSE; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - DBGLOG(P2P, TRACE, ("p2pFuncValidateProbeReq\n")); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_PROBE_REQ) { - - - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return fgIsReplyProbeRsp; - -} /* end of p2pFuncValidateProbeReq() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncValidateRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_ACTION_FRAME) { - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return; - -} /* p2pFuncValidateRxMgmtFrame */ - - - -BOOLEAN -p2pFuncIsAPMode ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - if (prP2pFsmInfo) { - if(prP2pFsmInfo->fgIsWPSMode == 1){ - return FALSE; - } - return prP2pFsmInfo->fgIsApMode; - } - else { - return FALSE; - } -} -/* p2pFuncIsAPMode */ - - - -VOID -p2pFuncParseBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ) -{ - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - BOOL ucNewSecMode = FALSE; - BOOL ucOldSecMode = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL)); - - if (u4IELen == 0) { - break; - } - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pSpecificBssInfo->u2AttributeLen = 0; - - ASSERT_BREAK(pucIEInfo != NULL); - - pucIE = pucIEInfo; - - ucOldSecMode = kalP2PGetCipher(prAdapter->prGlueInfo); - - IE_FOR_EACH(pucIE, u4IELen, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: /* 0 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("SSID update\n")); - - /* Update when starting GO. */ - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - COPY_SSID(prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - } - break; - case ELEM_ID_SUP_RATES: /* 1 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("Support Rate IE\n")); - kalMemCopy(prP2pBssInfo->aucAllSupportedRates, - SUP_RATES_IE(pucIE)->aucSupportedRates, - SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen = SUP_RATES_IE(pucIE)->ucLength; - - DBGLOG_MEM8(P2P, TRACE, SUP_RATES_IE(pucIE)->aucSupportedRates, SUP_RATES_IE(pucIE)->ucLength); - } - break; - case ELEM_ID_DS_PARAM_SET: /* 3 */ /* V */ /* Done */ - { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("DS PARAM IE\n")); - - ASSERT(prP2pConnSettings->ucOperatingChnl == DS_PARAM_IE(pucIE)->ucCurrChnl); - - if (prP2pConnSettings->eBand != BAND_2G4) { - ASSERT(FALSE); - break; - } - - //prP2pBssInfo->ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - - //prP2pBssInfo->eBand = BAND_2G4; - } - break; - case ELEM_ID_TIM: /* 5 */ /* V */ - DBGLOG(P2P, TRACE, ("TIM IE\n")); - TIM_IE(pucIE)->ucDTIMPeriod = prP2pBssInfo->ucDTIMPeriod; - break; - case ELEM_ID_ERP_INFO: /* 42 */ /* V */ - { -#if 1 - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE will be over write by driver\n")); - DBGLOG(P2P, TRACE, (" ucERP: %x. \n", ERP_INFO_IE(pucIE)->ucERP)); - -#else - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE.\n")); - - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11GN; - - ASSERT(prP2pBssInfo->eBand == BAND_2G4); - - prP2pBssInfo->fgObssErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & ERP_INFO_USE_PROTECTION)? TRUE : FALSE); - - prP2pBssInfo->fgErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & (ERP_INFO_USE_PROTECTION | ERP_INFO_NON_ERP_PRESENT))? TRUE : FALSE); -#endif - - } - break; - case ELEM_ID_HT_CAP: /* 45 */ /* V */ - { -#if 1 - DBGLOG(P2P, TRACE, ("HT CAP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, ("HT Cap Info:%x, AMPDU Param:%x\n", HT_CAP_IE(pucIE)->u2HtCapInfo, HT_CAP_IE(pucIE)->ucAmpduParam)); - - DBGLOG(P2P, TRACE, ("HT Extended Cap Info:%x, TX Beamforming Cap Info:%lx, Ant Selection Cap Info%x \n", - HT_CAP_IE(pucIE)->u2HtExtendedCap, - HT_CAP_IE(pucIE)->u4TxBeamformingCap, - HT_CAP_IE(pucIE)->ucAselCap)); -#else - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - /* u2HtCapInfo */ - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SUP_CHNL_WIDTH | HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M)) == 0) { - prP2pBssInfo->fgAssoc40mBwAllowed = FALSE; - } - else { - prP2pBssInfo->fgAssoc40mBwAllowed = TRUE; - } - - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M)) == 0) { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - } - else { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = FALSE; - } - - /* ucAmpduParam */ - DBGLOG(P2P, TRACE, ("AMPDU setting from supplicant:0x%x, & default value:0x%x\n", (UINT_8)HT_CAP_IE(pucIE)->ucAmpduParam, (UINT_8)AMPDU_PARAM_DEFAULT_VAL)); - - /* rSupMcsSet */ - /* Can do nothing. the field is default value from other configuration. */ - //HT_CAP_IE(pucIE)->rSupMcsSet; - - /* u2HtExtendedCap */ - ASSERT(HT_CAP_IE(pucIE)->u2HtExtendedCap == (HT_EXT_CAP_DEFAULT_VAL & ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE))); - - /* u4TxBeamformingCap */ - ASSERT(HT_CAP_IE(pucIE)->u4TxBeamformingCap == TX_BEAMFORMING_CAP_DEFAULT_VAL); - - /* ucAselCap */ - ASSERT(HT_CAP_IE(pucIE)->ucAselCap == ASEL_CAP_DEFAULT_VAL); -#endif - } - break; - case ELEM_ID_RSN: /* 48 */ /* V */ - { - RSN_INFO_T rRsnIe; - - DBGLOG(P2P, TRACE, ("RSN IE\n")); - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - ucNewSecMode = TRUE; - - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &rRsnIe)) { - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - prP2pBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; - prP2pBssInfo->u2RsnSelectedCapInfo = rRsnIe.u2RsnCap; - } - } - break; - case ELEM_ID_EXTENDED_SUP_RATES: /* 50 */ /* V */ - /* Be attention, ELEM_ID_SUP_RATES should be placed before ELEM_ID_EXTENDED_SUP_RATES. */ - DBGLOG(P2P, TRACE, ("Ex Support Rate IE\n")); - kalMemCopy(&(prP2pBssInfo->aucAllSupportedRates[prP2pBssInfo->ucAllSupportedRatesLen]), - EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, - EXT_SUP_RATES_IE(pucIE)->ucLength); - - DBGLOG_MEM8(P2P, TRACE, EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, EXT_SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen += EXT_SUP_RATES_IE(pucIE)->ucLength; - break; - case ELEM_ID_HT_OP: /* 61 */ /* V */ // TODO: - { -#if 1 - DBGLOG(P2P, TRACE, ("HT OP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, (" Primary Channel: %x, Info1: %x, Info2: %x, Info3: %x\n", - HT_OP_IE(pucIE)->ucPrimaryChannel, - HT_OP_IE(pucIE)->ucInfo1, - HT_OP_IE(pucIE)->u2Info2, - HT_OP_IE(pucIE)->u2Info3)); -#else - UINT_16 u2Info2 = 0; - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - DBGLOG(P2P, TRACE, ("HT OP IE\n")); - - /* ucPrimaryChannel. */ - ASSERT(HT_OP_IE(pucIE)->ucPrimaryChannel == prP2pBssInfo->ucPrimaryChannel); - - /* ucInfo1 */ - prP2pBssInfo->ucHtOpInfo1 = HT_OP_IE(pucIE)->ucInfo1; - - /* u2Info2 */ - u2Info2 = HT_OP_IE(pucIE)->u2Info2; - - if (u2Info2 & HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - ASSERT(prP2pBssInfo->eGfOperationMode != GF_MODE_NORMAL); - u2Info2 &= ~HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (u2Info2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) { - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - u2Info2 &= ~HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - switch (u2Info2 & HT_OP_INFO2_HT_PROTECTION) { - case HT_PROTECT_MODE_NON_HT: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NON_HT; - break; - case HT_PROTECT_MODE_NON_MEMBER: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - break; - default: - prP2pBssInfo->eHtProtectMode = HT_OP_IE(pucIE)->u2Info2; - break; - } - - /* u2Info3 */ - prP2pBssInfo->u2HtOpInfo3 = HT_OP_IE(pucIE)->u2Info3; - - /* aucBasicMcsSet */ - DBGLOG_MEM8(P2P, TRACE, HT_OP_IE(pucIE)->aucBasicMcsSet, 16); -#endif - } - break; - case ELEM_ID_OBSS_SCAN_PARAMS: /* 74 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_OBSS_SCAN_PARAMS IE would be replaced by driver\n")); - } - break; - case ELEM_ID_EXTENDED_CAP: /* 127 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_EXTENDED_CAP IE would be replaced by driver\n")); - } - break; - case ELEM_ID_VENDOR: /* 221 */ /* V */ - DBGLOG(P2P, TRACE, ("Vender Specific IE\n")); - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_TKIP); - ucNewSecMode = TRUE; - kalMemCopy(prP2pSpecificBssInfo->aucWpaIeBuffer,pucIE, - IE_SIZE(pucIE)); - prP2pSpecificBssInfo->u2WpaIeLen=IE_SIZE(pucIE); - } - else if ((ucOuiType == VENDOR_OUI_TYPE_WPS)) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 0, pucIE, IE_SIZE(pucIE)); - } - - // WMM here. - } - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - // TODO Store the whole P2P IE & generate later. - // Be aware that there may be one or more P2P IE. - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - } - else if(ucOuiType == VENDOR_OUI_TYPE_WFD) { - - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - } - } - else { - - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - DBGLOG(P2P, TRACE, ("Driver unprocessed Vender Specific IE\n")); - ASSERT(FALSE); - } - - // TODO: Store other Vender IE except for WMM Param. - } - break; - default: - DBGLOG(P2P, TRACE, ("Unprocessed element ID:%d \n", IE_ID(pucIE))); - break; - } - } - - if (!ucNewSecMode && ucOldSecMode) - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_NONE); - - } while (FALSE); - - return; -} /* p2pFuncParseBeaconContent */ - - - - -P_BSS_DESC_T -p2pFuncKeepOnConnection ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - P_BSS_DESC_T prTargetBss = (P_BSS_DESC_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prConnReqInfo != NULL) && - (prChnlReqInfo != NULL) && - (prScanReqInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - // Update connection request information. - ASSERT(prConnReqInfo->fgIsConnRequest == TRUE); - - /* Find BSS Descriptor first. */ - prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_FULL; - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prTargetBss->ucChannelNum; - prChnlReqInfo->eBand = prTargetBss->eBand; - prChnlReqInfo->eChnlSco = prTargetBss->eSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - } - - } while (FALSE); - - return prTargetBss; -} /* p2pFuncKeepOnConnection */ - -/* Currently Only for ASSOC Response Frame. */ -VOID -p2pFuncStoreAssocRspIEBuffer ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - INT_16 i2IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)prSwRfb->pvHeader; - - if (prAssocRspFrame->u2FrameCtrl != MAC_FRAME_ASSOC_RSP) { - break; - } - - i2IELen = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + - CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - - if (i2IELen <= 0) { - break; - } - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinInfo->u4BufLength = (UINT_32)i2IELen; - - kalMemCopy(prJoinInfo->aucIEBuf, prAssocRspFrame->aucInfoElem, prJoinInfo->u4BufLength); - - } while (FALSE); - - - return; -} /* p2pFuncStoreAssocRspIEBuffer */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ) -{ - UINT_32 u4NewPacketFilter = 0; - - DEBUGFUNC("p2pFuncMgmtFrameRegister"); - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (pu4P2pPacketFilter) { - u4NewPacketFilter = *pu4P2pPacketFilter; - } - - switch (u2FrameType) { - case MAC_FRAME_PROBE_REQ: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, TRACE, ("Ask frog to add code for mgmt:%x\n", u2FrameType)); - break; - } - - if (pu4P2pPacketFilter) { - *pu4P2pPacketFilter = u4NewPacketFilter; - } - -// u4NewPacketFilter |= prAdapter->u4OsPacketFilter; - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4NewPacketFilter, - sizeof(u4NewPacketFilter) - ); - - } while (FALSE); - - return; -} /* p2pFuncMgmtFrameRegister */ - - -VOID -p2pFuncUpdateMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ) -{ - - do { - - prAdapter->rWifiVar.prP2pFsmInfo->u4P2pPacketFilter = u4OsFilter; - - if ((prAdapter->u4OsPacketFilter & PARAM_PACKET_FILTER_P2P_MASK) ^ u4OsFilter) { - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - - prAdapter->u4OsPacketFilter |= (u4OsFilter & PARAM_PACKET_FILTER_P2P_MASK); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4OsFilter, - sizeof(u4OsFilter) - ); - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - } - - } while (FALSE); - - - - - return; -} /* p2pFuncUpdateMgmtFrameRegister */ - - -VOID -p2pFuncGetStationInfo ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ) -{ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (pucMacAddr != NULL) && - (prStaInfo != NULL)); - - prStaInfo->u4InactiveTime = 0; - prStaInfo->u4RxBytes = 0; - prStaInfo->u4TxBytes = 0; - prStaInfo->u4RxPackets = 0; - prStaInfo->u4TxPackets = 0; - // TODO: - - } while (FALSE); - - return; -} /* p2pFuncGetStationInfo */ - - -BOOLEAN -p2pFuncGetAttriList ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ) -{ - BOOLEAN fgIsAllocMem = FALSE; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_16 u2Offset = 0; - P_IE_P2P_T prIe = (P_IE_P2P_T)NULL; - PUINT_8 pucAttriListStart = (PUINT_8)NULL; - UINT_16 u2AttriListLen = 0, u2BufferSize = 0; - BOOLEAN fgBackupAttributes = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (pucIE != NULL) && - (u2IELength != 0) && - (ppucAttriList != NULL) && - (pu2AttriListLen != NULL)); - - if(ppucAttriList) { - *ppucAttriList = NULL; - } - if(pu2AttriListLen) { - *pu2AttriListLen = 0; - } - - if (ucOuiType == VENDOR_OUI_TYPE_WPS){ - aucWfaOui[0] = 0x00; - aucWfaOui[1] = 0x50; - aucWfaOui[2] = 0xF2; - } - else if ((ucOuiType != VENDOR_OUI_TYPE_P2P) -#if CFG_SUPPORT_WFD - && (ucOuiType != VENDOR_OUI_TYPE_WFD) -#endif - ) { - DBGLOG(P2P, INFO, ("Not supported OUI Type to parsing 0x%x\n", ucOuiType)); - break; - } - - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_VENDOR == IE_ID(pucIE)) { - prIe = (P_IE_P2P_T)pucIE; - - if (prIe->ucLength <= P2P_OUI_TYPE_LEN) { - continue; - - } - - if ((prIe->aucOui[0] == aucWfaOui[0]) && - (prIe->aucOui[1] == aucWfaOui[1]) && - (prIe->aucOui[2] == aucWfaOui[2]) && - (ucOuiType == prIe->ucOuiType)) { - - if (!pucAttriListStart) { - pucAttriListStart = &prIe->aucP2PAttributes[0]; - if (prIe->ucLength > P2P_OUI_TYPE_LEN) { - u2AttriListLen = (UINT_16)(prIe->ucLength - P2P_OUI_TYPE_LEN); - } - else { - ASSERT(FALSE); - } - } - else { -/* More than 2 attributes. */ - UINT_16 u2CopyLen; - - if (FALSE == fgBackupAttributes) { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo;; - - fgBackupAttributes = TRUE; - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[0], - pucAttriListStart, - u2AttriListLen); - - pucAttriListStart = &prP2pSpecificBssInfo->aucAttributesCache[0]; - - u2BufferSize = P2P_MAXIMUM_ATTRIBUTE_LEN; - } - else if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - kalMemCopy(&prP2pSpecificBssInfo->aucWscAttributesCache[0], - pucAttriListStart, - u2AttriListLen); - pucAttriListStart = &prP2pSpecificBssInfo->aucWscAttributesCache[0]; - - u2BufferSize = WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE; - } -#if CFG_SUPPORT_WFD - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - PUINT_8 pucTmpBuf = (PUINT_8)NULL; - pucTmpBuf = (PUINT_8)kalMemAlloc(WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE, VIR_MEM_TYPE); - - if (pucTmpBuf != NULL) { - fgIsAllocMem = TRUE; - } - else { - /* Can't alloca memory for WFD IE relocate. */ - ASSERT(FALSE); - break; - } - - kalMemCopy(pucTmpBuf, - pucAttriListStart, - u2AttriListLen); - - pucAttriListStart = pucTmpBuf; - - u2BufferSize = WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE; - } -#endif - else { - fgBackupAttributes = FALSE; - } - } - - u2CopyLen = (UINT_16)(prIe->ucLength - P2P_OUI_TYPE_LEN); - - if ((u2AttriListLen + u2CopyLen) > u2BufferSize) { - - u2CopyLen = u2BufferSize - u2AttriListLen; - - DBGLOG(P2P, WARN, ("Length of received P2P attributes > maximum cache size.\n")); - - } - - if (u2CopyLen) { - kalMemCopy((PUINT_8)((UINT_32)pucAttriListStart + (UINT_32)u2AttriListLen), - &prIe->aucP2PAttributes[0], - u2CopyLen); - - u2AttriListLen += u2CopyLen; - } - - - } - } /* prIe->aucOui */ - } /* ELEM_ID_VENDOR */ - } /* IE_FOR_EACH */ - - - } while (FALSE); - - if (pucAttriListStart) { - PUINT_8 pucAttribute = pucAttriListStart; - DBGLOG(P2P, LOUD, ("Checking Attribute Length.\n")); - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - P2P_ATTRI_FOR_EACH(pucAttribute, u2AttriListLen, u2Offset); - } - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - } - else if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - /* Big Endian: WSC, WFD. */ - WSC_ATTRI_FOR_EACH(pucAttribute, u2AttriListLen, u2Offset) { - DBGLOG(P2P, LOUD, ("Attribute ID:%d, Length:%d.\n", - WSC_ATTRI_ID(pucAttribute), - WSC_ATTRI_LEN(pucAttribute))); - } - } - else { - } - - ASSERT(u2Offset == u2AttriListLen); - - *ppucAttriList = pucAttriListStart; - *pu2AttriListLen = u2AttriListLen; - - } - else { - *ppucAttriList = (PUINT_8)NULL; - *pu2AttriListLen = 0; - } - - return fgIsAllocMem; -} /* p2pFuncGetAttriList */ - - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ) -{ - P_MSDU_INFO_T prRetMsduInfo = prMgmtTxMsdu; - P_WLAN_PROBE_RSP_FRAME_T prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_16 u2Offset = 0, u2IELength = 0, u2ProbeRspHdrLen = 0; - BOOLEAN fgIsP2PIE = FALSE, fgIsWSCIE = FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2EstimateSize = 0, u2EstimatedExtraIELen = 0; - UINT_32 u4IeArraySize = 0, u4Idx = 0; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxMsdu != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - //3 Make sure this is probe response frame. - prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - ASSERT_BREAK((prProbeRspFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_PROBE_RSP); - - //3 Get the importent P2P IE. - u2ProbeRspHdrLen = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - pucIEBuf = prProbeRspFrame->aucInfoElem; - u2IELength = prMgmtTxMsdu->u2FrameLength - u2ProbeRspHdrLen; - -#if CFG_SUPPORT_WFD - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen = 0; -#endif - - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - switch (IE_ID(pucIEBuf)) { - case ELEM_ID_SSID: - { - - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIEBuf)->aucSSID, - SSID_IE(pucIEBuf)->ucLength); - } - break; - case ELEM_ID_VENDOR: - { - UINT_8 ucOuiType = 0; - UINT_16 u2SubTypeVersion = 0; -#if! CFG_SUPPORT_WFD - - - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIEBuf, &ucOuiType, &u2SubTypeVersion)) { - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 2, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsWSCIE = TRUE; - } - - } - - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIEBuf, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - //2 Note(frog): I use WSC IE buffer for Probe Request to store the P2P IE for Probe Response. - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 1, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsP2PIE = TRUE; - } - - } - - - - else { - if((prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen+IE_SIZE(pucIEBuf))<512) { - kalMemCopy(prAdapter->prGlueInfo->prP2PInfo->aucVenderIE, pucIEBuf, IE_SIZE(pucIEBuf)); - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen += IE_SIZE(pucIEBuf); - } - } -#else - /* Eddie May be WFD */ - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIEBuf, &ucOuiType, &u2SubTypeVersion)) { - if(ucOuiType == VENDOR_OUI_TYPE_WMM) { - break; - } - - } - if((prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen+IE_SIZE(pucIEBuf))<1024) { - kalMemCopy(prAdapter->prGlueInfo->prP2PInfo->aucVenderIE + prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen - , pucIEBuf, IE_SIZE(pucIEBuf)); - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen += IE_SIZE(pucIEBuf); - } -#endif - - - } - break; - default: - break; - } - - } - - - //3 Check the total size & current frame. - u2EstimateSize = WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET); - - u2EstimatedExtraIELen = 0; - - u4IeArraySize = sizeof(txProbeRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += txProbeRspIETable[u4Idx].u2EstimatedFixedIELen; - } - - else { - ASSERT(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16)(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen(prAdapter, - NETWORK_TYPE_P2P_INDEX, - NULL)); - } - - } - - - if (fgIsWSCIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - -#if CFG_SUPPORT_WFD - u2EstimatedExtraIELen += prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen; -#endif - - - - if ((u2EstimateSize += u2EstimatedExtraIELen) > (prRetMsduInfo->u2FrameLength)) { - prRetMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimateSize); - - if (prRetMsduInfo == NULL) { - DBGLOG(P2P, WARN, ("No packet for sending new probe response, use original one\n")); - prRetMsduInfo = prMgmtTxMsdu; - break; - } - - - prRetMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - - - //3 Compose / Re-compose probe response frame. - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prRetMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prProbeRspFrame->aucDestAddr, - prProbeRspFrame->aucSrcAddr, - prProbeRspFrame->aucBSSID, - prProbeRspFrame->u2BeaconInterval, - prProbeRspFrame->u2CapInfo); - - prRetMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - - bssBuildBeaconProbeRespFrameCommonIEs(prRetMsduInfo, - prP2pBssInfo, - prProbeRspFrame->aucDestAddr); - - - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].pfnAppendIE) { - txProbeRspIETable[u4Idx].pfnAppendIE(prAdapter, prRetMsduInfo); - } - - } - - - if (fgIsWSCIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 2, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 1, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - -#if CFG_SUPPORT_WFD - if(prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen>0) { - kalMemCopy((PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength), - prAdapter->prGlueInfo->prP2PInfo->aucVenderIE, prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen); - prRetMsduInfo->u2FrameLength += (UINT_16) prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen; - } -#endif - - - } while (FALSE); - - if (prRetMsduInfo != prMgmtTxMsdu) { - cnmMgtPktFree(prAdapter, prMgmtTxMsdu); - } - - - return prRetMsduInfo; -} /* p2pFuncProcessP2pProbeRsp */ - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - -VOID -p2pFuncGenerateExtra_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucBeaconIECache, prP2pSpeBssInfo->u2IELenForBCN); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return; -} /* p2pFuncGenerateExtra_IEForBeacon */ - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateP2p_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucAttributesCache, prP2pSpeBssInfo->u2AttributeLen); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - - - - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateWSC_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - UINT_16 u2IELen = 0; - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_P2P_INDEX) { - return; - } - - u2IELen = (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - // TODO: Check P2P FSM State. - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 0, - pucBuffer); - - prMsduInfo->u2FrameLength += u2IELen; - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return p2pFuncCalculateP2P_IELen(prAdapter, - eNetTypeIndex, - prStaRec, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - -} /* p2pFuncCalculateP2p_IELenForAssocRsp */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncGenerateP2p_IEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - DBGLOG(P2P, TRACE, ("Generate NULL P2P IE for Assoc Rsp.\n")); - - p2pFuncGenerateP2P_IE(prAdapter, - TRUE, - &prMsduInfo->u2FrameLength, - prMsduInfo->prPacket, - 1500, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - } - else { - - DBGLOG(P2P, TRACE, ("Legacy device, no P2P IE.\n")); - } - - } while (FALSE); - - return; - -} /* p2pFuncGenerateP2p_IEForAssocRsp */ - - -UINT_32 -p2pFuncCalculateWSC_IELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - DBGLOG(P2P, TRACE, ("p2pFuncCalculateWSC_IELenForAssocRsp\n")); - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); -} /* p2pFuncCalculateP2p_IELenForAssocRsp */ - - -VOID -p2pFuncGenerateWSC_IEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - UINT_16 u2IELen = 0; - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_P2P_INDEX) { - return; - } - DBGLOG(P2P, TRACE, ("p2pFuncGenerateWSC_IEForAssocRsp\n")); - - u2IELen = (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - // TODO: Check P2P FSM State. - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 0, - pucBuffer); - - prMsduInfo->u2FrameLength += u2IELen; - - return; -} -/* p2pFuncGenerateP2p_IEForAssocRsp */ - - - - -UINT_32 -p2pFuncCalculateP2P_IELen ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - - UINT_32 u4OverallAttriLen, u4Dummy; - UINT_16 u2EstimatedFixedAttriLen; - UINT_32 i; - - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - for (i = 0; i < u4AttriTableSize; i++) { - u2EstimatedFixedAttriLen = arAppendAttriTable[i].u2EstimatedFixedAttriLen; - - if (u2EstimatedFixedAttriLen) { - u4OverallAttriLen += u2EstimatedFixedAttriLen; - } - else { - ASSERT(arAppendAttriTable[i].pfnCalculateVariableAttriLen); - - u4OverallAttriLen += - arAppendAttriTable[i].pfnCalculateVariableAttriLen(prAdapter, prStaRec); - } - } - - u4Dummy = u4OverallAttriLen; - u4OverallAttriLen += P2P_IE_OUI_HDR; - - for (;(u4Dummy > P2P_MAXIMUM_ATTRIBUTE_LEN);) { - u4OverallAttriLen += P2P_IE_OUI_HDR; - u4Dummy -= P2P_MAXIMUM_ATTRIBUTE_LEN; - } - - return u4OverallAttriLen; -} /* p2pFuncCalculateP2P_IELen */ - - -VOID -p2pFuncGenerateP2P_IE ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_P2P_T prIeP2P = (P_IE_P2P_T)NULL; - UINT_32 u4OverallAttriLen; - UINT_32 u4AttriLen; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN]; - UINT_32 i; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - /* Check buffer length is still enough. */ - ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= P2P_IE_OUI_HDR); - - prIeP2P = (P_IE_P2P_T)pucBuffer; - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - (*pu2Offset) += P2P_IE_OUI_HDR; - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - - for (i = 0; i < u4AttriTableSize; i++) { - - if (arAppendAttriTable[i].pfnAppendAttri) { - u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize); - - u4OverallAttriLen += u4AttriLen; - - if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) { - u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN; - - prIeP2P->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN); - - pucBuffer = (PUINT_8)((UINT_32)prIeP2P + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - prIeP2P = (P_IE_P2P_T)((UINT_32)prIeP2P + - (ELEM_HDR_LEN + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN))); - - kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen); - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - kalMemCopy(prIeP2P->aucP2PAttributes, aucTempBuffer, u4OverallAttriLen); - (*pu2Offset) += P2P_IE_OUI_HDR; - } - - } - - } - - prIeP2P->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen); - - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2P_IE */ - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - PUINT_8 pucBuffer; - P_P2P_ATTRI_STATUS_T prAttriStatus; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 u4AttriLen = 0; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For assoc request P2P IE check in driver & return status in P2P IE. - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - prAttriStatus = (P_P2P_ATTRI_STATUS_T)pucBuffer; - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - - - - prAttriStatus->ucId = P2P_ATTRI_ID_STATUS; - WLAN_SET_FIELD_16(&prAttriStatus->u2Length, P2P_ATTRI_MAX_LEN_STATUS); - - prAttriStatus->ucStatusCode = P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriStatusForAssocRsp */ - -UINT_32 -p2pFuncAppendAttriExtListenTiming ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - P_P2P_ATTRI_EXT_LISTEN_TIMING_T prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucBuffer = NULL; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For extend listen timing. - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - - prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)pucBuffer; - - prP2pExtListenTiming->ucId = P2P_ATTRI_ID_EXT_LISTEN_TIMING; - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2Length, P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailInterval, prP2pSpecificBssInfo->u2AvailabilityInterval); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailPeriod, prP2pSpecificBssInfo->u2AvailabilityPeriod); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriExtListenTiming */ - - -P_IE_HDR_T -p2pFuncGetSpecIE ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ) -{ - P_IE_HDR_T prTargetIE = (P_IE_HDR_T)NULL; - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - - if (pfgIsMore) { - *pfgIsMore = FALSE; - } - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - pucIE = pucIEBuf; - - IE_FOR_EACH(pucIE, u2BufferLen, u2Offset) { - if (IE_ID(pucIE) == ucElemID) { - if ((prTargetIE) && (pfgIsMore)) { - - *pfgIsMore = TRUE; - break; - } - else { - prTargetIE = (P_IE_HDR_T)pucIE; - - if (pfgIsMore == NULL) { - break; - } - - } - - } - } - - } while (FALSE); - - return prTargetIE; -} /* p2pFuncGetSpecIE */ - - - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_16 u2AttriID - ) -{ - P_IE_P2P_T prP2pIE = (P_IE_P2P_T)NULL; - P_ATTRIBUTE_HDR_T prTargetAttri = (P_ATTRIBUTE_HDR_T)NULL; - BOOLEAN fgIsMore = FALSE; - PUINT_8 pucIE = (PUINT_8)NULL, pucAttri = (PUINT_8)NULL; - UINT_16 u2OffsetAttri = 0; - UINT_16 u2BufferLenLeft = 0; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - - - DBGLOG(P2P, INFO, ("Check AssocReq Oui type %u attri %u for len %u\n",ucOuiType, u2AttriID, u2BufferLen)); - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - u2BufferLenLeft = u2BufferLen; - pucIE = pucIEBuf; - do { - fgIsMore = FALSE; - prP2pIE = (P_IE_P2P_T)p2pFuncGetSpecIE(prAdapter, - pucIE, - u2BufferLenLeft, - ELEM_ID_VENDOR, - &fgIsMore); - - if (prP2pIE) { - - ASSERT(prP2pIE>pucIE); - - u2BufferLenLeft = u2BufferLen - (UINT_16)( ((UINT_32)prP2pIE) - ((UINT_32)pucIEBuf)); - - DBGLOG(P2P, INFO, ("Find vendor id %u len %u oui %u more %u LeftLen %u\n", - IE_ID(prP2pIE), IE_LEN(prP2pIE), prP2pIE->ucOuiType, fgIsMore, u2BufferLenLeft)); - - if(IE_LEN(prP2pIE) > P2P_OUI_TYPE_LEN) { - - if (prP2pIE->ucOuiType == ucOuiType) { - switch (ucOuiType) { - case VENDOR_OUI_TYPE_WPS: - aucWfaOui[0] = 0x00; - aucWfaOui[1] = 0x50; - aucWfaOui[2] = 0xF2; - break; - case VENDOR_OUI_TYPE_P2P: - break; - case VENDOR_OUI_TYPE_WPA: - case VENDOR_OUI_TYPE_WMM: - case VENDOR_OUI_TYPE_WFD: - default: - break; - } - - - if ((prP2pIE->aucOui[0] == aucWfaOui[0]) - && (prP2pIE->aucOui[1] == aucWfaOui[1]) - && (prP2pIE->aucOui[2] == aucWfaOui[2]) - ) { - - u2OffsetAttri = 0; - pucAttri = prP2pIE->aucP2PAttributes; - - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - WSC_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //LOG_FUNC("WSC: attri id=%u len=%u\n",WSC_ATTRI_ID(pucAttri), WSC_ATTRI_LEN(pucAttri)); - if (WSC_ATTRI_ID(pucAttri) == u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - - } - - else if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - P2P_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //LOG_FUNC("P2P: attri id=%u len=%u\n",ATTRI_ID(pucAttri), ATTRI_LEN(pucAttri)); - if (ATTRI_ID(pucAttri) == (UINT_8)u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - - } - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - WFD_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //DBGLOG(P2P, INFO, ("WFD: attri id=%u len=%u\n",WFD_ATTRI_ID(pucAttri), WFD_ATTRI_LEN(pucAttri))); - if (ATTRI_ID(pucAttri) == (UINT_8)u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - } - else { - // Possible or else. - } - - } - } /* ucOuiType */ - } /* P2P_OUI_TYPE_LEN */ - - pucIE = (PUINT_8)(((UINT_32)prP2pIE) + IE_SIZE(prP2pIE)); - - } /* prP2pIE */ - - } while (prP2pIE && fgIsMore && u2BufferLenLeft); - - } while (FALSE); - - return prTargetAttri; -} -/* p2pFuncGetSpecAttri */ - - -WLAN_STATUS -p2pFuncGenerateBeaconProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_MSDU_INFO_T prMsduInfo, - IN BOOLEAN fgIsProbeRsp - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; -// P_APPEND_VAR_IE_ENTRY_T prAppendIeTable = (P_APPEND_VAR_IE_ENTRY_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prBssInfo != NULL) && - (prMsduInfo != NULL)); - - -// txBcnIETable - -// txProbeRspIETable - - - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncGenerateBeaconProbeRsp */ - - -WLAN_STATUS -p2pFuncComposeBeaconProbeRspTemplate ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnBuffer, - IN UINT_32 u4BcnBufLen, - IN BOOLEAN fgIsProbeRsp, - IN P_P2P_PROBE_RSP_UPDATE_INFO_T prP2pProbeRspInfo, - IN BOOLEAN fgSynToFW - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - PUINT_8 pucBuffer = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBcnBuffer != NULL)); - - prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)pucBcnBuffer; - - if ((prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_BEACON) && (!fgIsProbeRsp)) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - else if (prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_PROBE_RSP) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - - - if (fgIsProbeRsp) { - ASSERT_BREAK(prP2pProbeRspInfo != NULL); - - if (!prP2pProbeRspInfo->prProbeRspMsduTemplate) { - cnmMgtPktFree(prAdapter, prP2pProbeRspInfo->prProbeRspMsduTemplate); - } - - prP2pProbeRspInfo->prProbeRspMsduTemplate = cnmMgtPktAlloc(prAdapter, u4BcnBufLen); - - prMsduInfo = prP2pProbeRspInfo->prProbeRspMsduTemplate; - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - } - else { - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prMsduInfo = prP2pBssInfo->prBeacon; - - if (prMsduInfo == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - - if (u4BcnBufLen > (OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH)) { - /* Unexpected error, buffer overflow. */ - ASSERT(FALSE); - break; - } - - } - - - pucBuffer = (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucBuffer, pucBcnBuffer, u4BcnBufLen); - - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (UINT_16)u4BcnBufLen; - - if (fgSynToFW) { - rWlanStatus = p2pFuncGenerateBeaconProbeRsp(prAdapter, prP2pBssInfo, prMsduInfo, fgIsProbeRsp); - } - - } while (FALSE); - - return rWlanStatus; - -} /* p2pFuncComposeBeaconTemplate */ - - - - - - - - - - - - - - - - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_ie.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_ie.c deleted file mode 100755 index 33cafca9ca04..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_ie.c +++ /dev/null @@ -1,582 +0,0 @@ -#include "p2p_precomp.h" - -#if CFG_SUPPORT_WFD -#if CFG_SUPPORT_WFD_COMPOSE_IE -#if 0 -APPEND_VAR_ATTRI_ENTRY_T txProbeRspWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_EXT_CAPABILITY), NULL, wfdFuncAppendAttriExtCapability } /* 7 */ - ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */ -}; - -APPEND_VAR_ATTRI_ENTRY_T txBeaconWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ -}; - -APPEND_VAR_ATTRI_ENTRY_T txAssocReqWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ -}; -#endif - -APPEND_VAR_ATTRI_ENTRY_T txAssocRspWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ - ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */ - -}; - -#endif - - - - -UINT_32 -p2pCalculate_IEForAssocReq ( - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - UINT_32 u4RetValue = 0; - - do { - ASSERT_BREAK((eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) && (prAdapter != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - u4RetValue = prConnReqInfo->u4BufLength; - - // ADD HT Capability - u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP); - - // ADD WMM Information Element - u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO); - - } while (FALSE); - - return u4RetValue; -} /* p2pCalculate_IEForAssocReq */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerate_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prConnReqInfo->aucIEBuf, prConnReqInfo->u4BufLength); - - prMsduInfo->u2FrameLength += prConnReqInfo->u4BufLength; - - rlmReqGenerateHtCapIE (prAdapter,prMsduInfo); - mqmGenerateWmmInfoIE (prAdapter,prMsduInfo); - - - } while (FALSE); - - return; - -} /* p2pGenerate_IEForAssocReq */ - - - -UINT_32 -wfdFuncAppendAttriDevInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_DEVICE_INFORMATION_IE_T prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)pucBuffer; - - prWfdDevInfo->ucElemID = WFD_ATTRI_ID_DEV_INFO; - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevInfo, prWfdCfgSettings->u2WfdDevInfo); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2SessionMgmtCtrlPort, prWfdCfgSettings->u2WfdControlPort); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevMaxSpeed, prWfdCfgSettings->u2WfdMaximumTp); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2Length, WFD_ATTRI_MAX_LEN_DEV_INFO); - - u4AttriLen = WFD_ATTRI_MAX_LEN_DEV_INFO + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriDevInfo */ - -UINT_32 -wfdFuncAppendAttriAssocBssid ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_ASSOCIATED_BSSID_IE_T prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_BSS_INFO_T prAisBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - - /* AIS network. */ - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if ((!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) || - (prAisBssInfo->eConnectionState != PARAM_MEDIA_STATE_CONNECTED)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)pucBuffer; - - prWfdAssocBssid->ucElemID = WFD_ATTRI_ID_ASSOC_BSSID; - - WLAN_SET_FIELD_BE16(&prWfdAssocBssid->u2Length, WFD_ATTRI_MAX_LEN_ASSOC_BSSID); - - COPY_MAC_ADDR(prWfdAssocBssid->aucAssocBssid, prAisBssInfo->aucBSSID); - - u4AttriLen = WFD_ATTRI_MAX_LEN_ASSOC_BSSID + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriAssocBssid */ - -UINT_32 -wfdFuncAppendAttriCoupledSinkInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_COUPLE_SINK_INFORMATION_IE_T prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_SINK_INFO_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)pucBuffer; - - prWfdCoupleSinkInfo->ucElemID = WFD_ATTRI_ID_COUPLED_SINK_INFO; - - WLAN_SET_FIELD_BE16(&prWfdCoupleSinkInfo->u2Length, WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO); - - COPY_MAC_ADDR(prWfdCoupleSinkInfo->aucCoupleSinkMac, prWfdCfgSettings->aucWfdCoupleSinkAddress); - - prWfdCoupleSinkInfo->ucCoupleSinkStatusBp = prWfdCfgSettings->ucWfdCoupleSinkStatus; - - u4AttriLen = WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriCoupledSinkInfo */ - -UINT_32 -wfdFuncAppendAttriExtCapability ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_EXTENDED_CAPABILITY_IE_T prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_EXT_CAPABILITY_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)pucBuffer; - - prWfdExtCapability->ucElemID = WFD_ATTRI_ID_EXT_CAPABILITY; - - WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2Length, WFD_ATTRI_MAX_LEN_EXT_CAPABILITY); - - WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2WfdExtCapabilityBp, prWfdCfgSettings->u2WfdExtendCap); - - u4AttriLen = WFD_ATTRI_MAX_LEN_EXT_CAPABILITY + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriExtCapability */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate length of Channel List Attribute -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of Attribute added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -wfdFuncCalculateAttriLenSessionInfo ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - UINT_16 u2AttriLen = 0; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - - u2AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - - return (UINT_32)u2AttriLen; - -} /* wfdFuncCalculateAttriLenSessionInfo */ - - -UINT_32 -wfdFuncAppendAttriSessionInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_SESSION_INFORMATION_IE_T prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || (prWfdCfgSettings->u2WfdSessionInformationIELen == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)pucBuffer; - - prWfdSessionInfo->ucElemID = WFD_ATTRI_ID_SESSION_INFO; - - // TODO: Check endian issue? - kalMemCopy(prWfdSessionInfo->pucWfdDevInfoDesc, prWfdCfgSettings->aucWfdSessionInformationIE, prWfdCfgSettings->u2WfdSessionInformationIELen); - - WLAN_SET_FIELD_16(&prWfdSessionInfo->u2Length, prWfdCfgSettings->u2WfdSessionInformationIELen); - - u4AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN; - - } -while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriSessionInfo */ - - - -#if CFG_SUPPORT_WFD_COMPOSE_IE -VOID -wfdFuncGenerateWfd_IE ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - - - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_WFD_T prIeWFD = (P_IE_WFD_T)NULL; - UINT_32 u4OverallAttriLen; - UINT_32 u4AttriLen; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN]; - UINT_32 i; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - /* Check buffer length is still enough. */ - ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= WFD_IE_OUI_HDR); - - prIeWFD = (P_IE_WFD_T)pucBuffer; - - prIeWFD->ucId = ELEM_ID_WFD; - - prIeWFD->aucOui[0] = aucWfaOui[0]; - prIeWFD->aucOui[1] = aucWfaOui[1]; - prIeWFD->aucOui[2] = aucWfaOui[2]; - prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD; - - (*pu2Offset) += WFD_IE_OUI_HDR; - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - for (i = 0; i < u4AttriTableSize; i++) { - - if (arAppendAttriTable[i].pfnAppendAttri) { - u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize); - - u4OverallAttriLen += u4AttriLen; - - if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) { - u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN; - - prIeWFD->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN); - - pucBuffer = (PUINT_8)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - prIeWFD = (P_IE_WFD_T)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen); - - prIeWFD->ucId = ELEM_ID_WFD; - - prIeWFD->aucOui[0] = aucWfaOui[0]; - prIeWFD->aucOui[1] = aucWfaOui[1]; - prIeWFD->aucOui[2] = aucWfaOui[2]; - prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD; - - kalMemCopy(prIeWFD->aucWFDAttributes, aucTempBuffer, u4OverallAttriLen); - (*pu2Offset) += WFD_IE_OUI_HDR; - } - - } - - } - - prIeWFD->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen); - - - } while (FALSE); - - return; -} /* wfdFuncGenerateWfd_IE */ - -#endif /* CFG_SUPPORT_WFD_COMPOSE_IE */ - - - - -UINT_32 -wfdFuncCalculateWfdIELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - -#if CFG_SUPPORT_WFD_COMPOSE_IE - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - if ( - !IS_STA_P2P_TYPE(prStaRec) || - (prWfdCfgSettings->ucWfdEnable == 0)) { - return 0; - } - - return p2pFuncCalculateP2P_IELen(prAdapter, - eNetTypeIndex, - prStaRec, - txAssocRspWFDAttributesTable, - sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - -#else - return 0; -#endif -} /* wfdFuncCalculateWfdIELenForAssocRsp */ - - - -VOID -wfdFuncGenerateWfdIEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - -#if CFG_SUPPORT_WFD_COMPOSE_IE - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_STA_RECORD_T prStaRec; - - do { - ASSERT_BREAK((prMsduInfo != NULL) && (prAdapter != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - if((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0) { - break; - } - - wfdFuncGenerateWfd_IE(prAdapter, - FALSE, - &prMsduInfo->u2FrameLength, - prMsduInfo->prPacket, - 1500, - txAssocRspWFDAttributesTable, - sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - } - } while (FALSE); - - return; -#else - - return; -#endif -} /* wfdFuncGenerateWfdIEForAssocRsp */ - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_rlm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_rlm.c deleted file mode 100755 index e8b021881d4e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_rlm.c +++ /dev/null @@ -1,1019 +0,0 @@ -/* -** $Id: @(#) p2p_rlm.c@@ -*/ - -/*! \file "p2p_rlm.c" - \brief - -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -extern VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init AP Bss -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ENUM_BAND_T eBand; - UINT_8 ucChannel; - ENUM_CHNL_EXT_T eSCO; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - /* Operation band, channel shall be ready before invoking this function. - * Bandwidth may be ready if other network is connected - */ - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (RLM_AP_IS_BW_40_ALLOWED(prAdapter, prBssInfo)) { - /* In this case, the first BSS's SCO is 40MHz and known, so AP can - * apply 40MHz bandwidth, but the first BSS's SCO may be changed - * later if its Beacon lost timeout occurs - */ - if (cnmPreferredChannel(prAdapter, &eBand, &ucChannel, &eSCO) && - eSCO != CHNL_EXT_SCN && ucChannel == prBssInfo->ucPrimaryChannel && - eBand == prBssInfo->eBand) { - prBssInfo->eBssSCO = eSCO; - } - else if (cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex)) { - prBssInfo->eBssSCO = rlmDecideScoForAP(prAdapter, prBssInfo); - } - - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - prBssInfo->fg40mBwAllowed = TRUE; - prBssInfo->fgAssoc40mBwAllowed = TRUE; - - prBssInfo->ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - - rlmUpdateBwByChListForAP(prAdapter, prBssInfo); - } - } - - DBGLOG(RLM, INFO, ("WLAN AP SCO=%d\n", prBssInfo->eBssSCO)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_IE_OBSS_SCAN_PARAM_T prObssScanIe; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && !RLM_NET_IS_BOW(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) && - prBssInfo->eBand == BAND_2G4 && - prBssInfo->eBssSCO != CHNL_EXT_SCN) { - - prObssScanIe = (P_IE_OBSS_SCAN_PARAM_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add 20/40 BSS coexistence IE */ - prObssScanIe->ucId = ELEM_ID_OBSS_SCAN_PARAMS; - prObssScanIe->ucLength = sizeof(IE_OBSS_SCAN_PARAM_T) - ELEM_HDR_LEN; - - prObssScanIe->u2ScanPassiveDwell = - dot11OBSSScanPassiveDwell; - prObssScanIe->u2ScanActiveDwell = - dot11OBSSScanActiveDwell; - prObssScanIe->u2TriggerScanInterval = - dot11BSSWidthTriggerScanInterval; - prObssScanIe->u2ScanPassiveTotalPerChnl = - dot11OBSSScanPassiveTotalPerChannel; - prObssScanIe->u2ScanActiveTotalPerChnl = - dot11OBSSScanActiveTotalPerChannel; - prObssScanIe->u2WidthTransDelayFactor = - dot11BSSWidthChannelTransitionDelayFactor; - prObssScanIe->u2ScanActivityThres = - dot11OBSSScanActivityThreshold; - - ASSERT(IE_SIZE(prObssScanIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_OBSS_SCAN)); - - prMsduInfo->u2FrameLength += IE_SIZE(prObssScanIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P GO. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLevel; - BOOLEAN fgBwChange; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - fgBwChange = FALSE; - - if (prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return fgBwChange; - } - - ucLevel = rlmObssChnlLevel(prBssInfo, prBssInfo->eBand, - prBssInfo->ucPrimaryChannel, prBssInfo->eBssSCO); - - if (ucLevel == CHNL_LEVEL0) { - /* Forced to 20MHz, so extended channel is SCN and STA width is zero */ - prBssInfo->fgObssActionForcedTo20M = TRUE; - - if (prBssInfo->ucHtOpInfo1 != (UINT_8) CHNL_EXT_SCN) { - prBssInfo->ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - fgBwChange = TRUE; - } - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - OBSS_20_40M_TIMEOUT * MSEC_PER_SEC); - } - - /* Clear up all channel lists */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - return fgBwChange; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_20_40_COEXIST_FRAME prRxFrame; - P_IE_20_40_COEXIST_T prCoexist; - P_IE_INTOLERANT_CHNL_REPORT_T prChnlReport; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - PUINT_8 pucIE; - UINT_16 u2IELength, u2Offset; - UINT_8 i, j; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_PUBLIC_20_40_COEXIST || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < (WLAN_MAC_MGMT_HEADER_LEN + 5) || - HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr) != - NETWORK_TYPE_P2P_INDEX) { - return; - } - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT || - prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return; - } - - prCoexist = &prRxFrame->rBssCoexist; - if (prCoexist->ucData & (BSS_COEXIST_40M_INTOLERANT|BSS_COEXIST_20M_REQ)) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == - prBssInfo->ucPrimaryChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = prBssInfo->ucPrimaryChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - - /* Process intolerant channel report IE */ - pucIE = (PUINT_8) &prRxFrame->rChnlReport; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_MGMT_HEADER_LEN + 5); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_20_40_INTOLERANT_CHNL_REPORT: - prChnlReport = (P_IE_INTOLERANT_CHNL_REPORT_T) pucIE; - - if (prChnlReport->ucLength <= 1) { - break; - } - - /* To do: process regulatory class. Now we assume 2.4G band */ - - for (j = 0; j < prChnlReport->ucLength - 1; j++) { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == - prChnlReport->aucChannelList[j]) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = - prChnlReport->aucChannelList[j]; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - } - break; - - default: - break; - } - } /* end of IE_FOR_EACH */ - - if (rlmUpdateBwByChListForAP(prAdapter, prBssInfo)) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - rlmSyncOperationParams(prAdapter, prBssInfo); - } - - /* Check if OBSS scan exemption response should be sent */ - if (prCoexist->ucData & BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ) { - rlmObssScanExemptionRsp(prAdapter, prBssInfo, prSwRfb); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_NOTIFY_CHNL_WIDTH_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_NOTIFY_CHNL_WIDTH_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_HT_NOTIFY_CHANNEL_WIDTH || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < sizeof(ACTION_NOTIFY_CHNL_WIDTH_FRAME)) { - return; - } - - /* To do: depending regulation class 13 and 14 based on spec - * Note: (ucChannelWidth==1) shall restored back to original capability, - * not current setting to 40MHz BW here - */ - if (prRxFrame->ucChannelWidth == 0) { - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - } - else if (prRxFrame->ucChannelWidth == 1) { - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prObssStatus); - ASSERT(prObssStatus->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prObssStatus->ucNetTypeIndex]; - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - prBssInfo->fgObssErpProtectMode = - (BOOLEAN) prObssStatus->ucObssErpProtectMode; - prBssInfo->eObssHtProtectMode = - (ENUM_HT_PROTECT_MODE_T) prObssStatus->ucObssHtProtectMode; - prBssInfo->eObssGfOperationMode = - (ENUM_GF_MODE_T) prObssStatus->ucObssGfOperationMode; - prBssInfo->fgObssRifsOperationMode = - (BOOLEAN) prObssStatus->ucObssRifsOperationMode; - prBssInfo->fgObssBeaconForcedTo20M = - (BOOLEAN) prObssStatus->ucObssBeaconForcedTo20M; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, TRUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is only for AP mode in NETWORK_TYPE_P2P_INDEX. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ) -{ - P_LINK_T prStaList; - P_STA_RECORD_T prStaRec; - BOOLEAN fgErpProtectMode, fgSta40mIntolerant; - BOOLEAN fgUseShortPreamble, fgUseShortSlotTime; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - UINT_8 ucHtOpInfo1; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - fgErpProtectMode = FALSE; - eHtProtectMode = HT_PROTECT_MODE_NONE; - eGfOperationMode = GF_MODE_NORMAL; - fgSta40mIntolerant = FALSE; - fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - fgUseShortSlotTime = TRUE; - ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - - prStaList = &prBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH_ENTRY(prStaRec, prStaList, rLinkEntry, STA_RECORD_T) { - //ASSERT(prStaRec); - if(!prStaRec){ - DBGLOG(P2P, TRACE, ("prStaRec is NULL in rlmUpdateParamsForAP() \n")); - break; - } - if (prStaRec->fgIsInUse && prStaRec->ucStaState == STA_STATE_3 && - prStaRec->ucNetTypeIndex == prBssInfo->ucNetTypeIndex) { - if (!(prStaRec->ucPhyTypeSet & - (PHY_TYPE_SET_802_11GN | PHY_TYPE_SET_802_11A))) { - /* B-only mode, so mode 1 (ERP protection) */ - fgErpProtectMode = TRUE; - } - - if (!(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - /* BG-only or A-only */ - eHtProtectMode = HT_PROTECT_MODE_NON_HT; - } - else if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - /* 20MHz-only */ - if (eHtProtectMode == HT_PROTECT_MODE_NONE && - prBssInfo->fgAssoc40mBwAllowed) { - eHtProtectMode = HT_PROTECT_MODE_20M; - } - } - - if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_HT_GF)) { - eGfOperationMode = GF_MODE_PROTECT; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) { - fgUseShortPreamble = FALSE; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) { - fgUseShortSlotTime = FALSE; - } - - if (prStaRec->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fgSta40mIntolerant = TRUE; - } - } - } /* end of LINK_FOR_EACH_ENTRY */ - - /* Check if HT operation IE about 20/40M bandwidth shall be updated */ - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - if (/*!LINK_IS_EMPTY(prStaList) && */ !fgSta40mIntolerant && - !prBssInfo->fgObssActionForcedTo20M && - !prBssInfo->fgObssBeaconForcedTo20M) { - - ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - } - } - - /* Check if any new parameter may be updated */ - if (prBssInfo->fgErpProtectMode != fgErpProtectMode || - prBssInfo->eHtProtectMode != eHtProtectMode || - prBssInfo->eGfOperationMode != eGfOperationMode || - prBssInfo->ucHtOpInfo1 != ucHtOpInfo1 || - prBssInfo->fgUseShortPreamble != fgUseShortPreamble || - prBssInfo->fgUseShortSlotTime != fgUseShortSlotTime) { - - prBssInfo->fgErpProtectMode = fgErpProtectMode; - prBssInfo->eHtProtectMode = eHtProtectMode; - prBssInfo->eGfOperationMode = eGfOperationMode; - prBssInfo->ucHtOpInfo1 = ucHtOpInfo1; - prBssInfo->fgUseShortPreamble = fgUseShortPreamble; - prBssInfo->fgUseShortSlotTime = fgUseShortSlotTime; - - if (fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - else { - prBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - } - - rlmSyncOperationParams(prAdapter, prBssInfo); - fgUpdateBeacon = TRUE; - } - - /* Update Beacon content if related IE content is changed */ - if (fgUpdateBeacon) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initial the channel list from the domain information. -* This function is called after P2P initial and Domain information changed. -* Make sure the device is disconnected while changing domain information. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncInitialChannelList ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_DOMAIN_INFO_ENTRY prDomainInfoEntry = (P_DOMAIN_INFO_ENTRY)NULL; - P_DOMAIN_SUBBAND_INFO prDomainSubBand = (P_DOMAIN_SUBBAND_INFO)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0, u4IdxII = 0; - UINT_8 ucBufferSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE; -#if 0 - UINT_8 ucSocialChnlSupport = 0, ucAutoChnl = 0; -#endif - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; -#if 0 - ucAutoChnl = prP2pConnSetting->ucOperatingChnl; -#endif - - prDomainInfoEntry = rlmDomainGetDomainInfo(prAdapter); - - ASSERT_BREAK((prDomainInfoEntry != NULL) && (prP2pConnSetting != NULL)); - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - for (u4Idx = 0; u4Idx < MAX_SUBBAND_NUM; u4Idx++) { - prDomainSubBand = &prDomainInfoEntry->rSubBand[u4Idx]; - - - if (((prDomainSubBand->ucBand == BAND_5G) && (!prAdapter->fgEnable5GBand)) || - (prDomainSubBand->ucBand == BAND_NULL)) { - continue; - } - - - if (ucBufferSize < (P2P_ATTRI_LEN_CHANNEL_ENTRY + prDomainSubBand->ucNumChannels)) { - /* Buffer is not enough to include all supported channels. */ - break; // for - } - - prChannelEntryField->ucRegulatoryClass = prDomainSubBand->ucRegClass; - prChannelEntryField->ucNumberOfChannels = prDomainSubBand->ucNumChannels; - - for (u4IdxII = 0; u4IdxII < prDomainSubBand->ucNumChannels; u4IdxII++) { - prChannelEntryField->aucChannelList[u4IdxII] = prDomainSubBand->ucFirstChannelNum + - (u4IdxII * prDomainSubBand->ucChannelSpan); - -#if 0 - switch (prChannelEntryField->aucChannelList[u4IdxII]) { - case 1: - ucSocialChnlSupport = 1; - break; - case 6: - ucSocialChnlSupport = 6; - break; - case 11: - ucSocialChnlSupport = 11; - break; - default: - break; - } - -#endif - } - - if (ucBufferSize >= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels)) { - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - else { - break; - } - - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - } - -#if 0 - if (prP2pConnSetting->ucListenChnl == 0) { - prP2pConnSetting->ucListenChnl = P2P_DEFAULT_LISTEN_CHANNEL; - - if (ucSocialChnlSupport != 0) { - /* 1. User Not Set LISTEN channel. - * 2. Social channel is not empty. - */ - prP2pConnSetting->ucListenChnl = ucSocialChnlSupport; - } - } - -#endif - - // TODO: 20110921 frog - - /* If LISTEN channel is not set, - * a random supported channel would be set. - * If no social channel is supported, DEFAULT channel would be set. - */ - - prP2pConnSetting->ucRfChannelListSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - ucBufferSize; - -#if 0 - if (prP2pConnSetting->ucOperatingChnl == 0) { /* User not set OPERATE channel. */ - - if (scnQuerySparseChannel(prAdapter, NULL, &ucAutoChnl)) { - break; // while - } - - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - if (prChannelEntryField->ucNumberOfChannels != 0) { - ucAutoChnl = prChannelEntryField->aucChannelList[0]; - break; // while - } - - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - - } - -#endif - /* We assume user would not set a channel not in the channel list. - * If so, the operating channel still depends on target deivce supporting capability. - */ - - // TODO: 20110921 frog - - /* If the Operating channel is not set, a channel from supported channel list is set automatically. - * If there is no supported channel in channel list, a DEFAULT channel is set. - */ - - } while (FALSE); - -#if 0 - prP2pConnSetting->ucOperatingChnl = ucAutoChnl; -#endif - return; -} /* rlmFuncInitialChannelList */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find a common channel list from the local channel list info & target channel list info. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncCommonChannelList ( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)NULL, prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_8 aucCommonChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; - UINT_8 ucOriChnlSize = 0, ucNewChnlSize = 0; - - - do { - - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)aucCommonChannelList; - - while (ucChannelListSize > 0) { - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - ucOriChnlSize = prP2pConnSetting->ucRfChannelListSize; - - while (ucOriChnlSize > 0) { - if (prChannelEntryI->ucRegulatoryClass == prChannelEntryII->ucRegulatoryClass) { - prChannelEntryIII->ucRegulatoryClass = prChannelEntryI->ucRegulatoryClass; - // TODO: Currently we assume that the regulatory class the same, the channels are the same. - kalMemCopy(prChannelEntryIII->aucChannelList, prChannelEntryII->aucChannelList, prChannelEntryII->ucNumberOfChannels); - prChannelEntryIII->ucNumberOfChannels = prChannelEntryII->ucNumberOfChannels; - - ucNewChnlSize += P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryIII->ucNumberOfChannels; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryIII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryIII->ucNumberOfChannels); - } - - ucOriChnlSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryI->ucNumberOfChannels); - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryI + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryI->ucNumberOfChannels); - - - } - - - ucChannelListSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryII->ucNumberOfChannels); - - prChannelEntryII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryII->ucNumberOfChannels); - - - } - - - kalMemCopy(prP2pConnSetting->aucChannelEntriesField, aucCommonChannelList, ucNewChnlSize); - prP2pConnSetting->ucRfChannelListSize = ucNewChnlSize; - - } while (FALSE); - - return; -} /* rlmFuncCommonChannelList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmFuncFindOperatingClass ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ) -{ - UINT_8 ucRegulatoryClass = 0, ucBufferSize = 0; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - - for (u4Idx = 0; u4Idx < prChannelEntryField->ucNumberOfChannels; u4Idx++) { - if (prChannelEntryField->aucChannelList[u4Idx] == ucChannelNum) { - ucRegulatoryClass = prChannelEntryField->ucRegulatoryClass; - break; - } - - } - - - if (ucRegulatoryClass != 0) { - break; //while - } - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - } while (FALSE); - - return ucRegulatoryClass; -} /* rlmFuncFindOperatingClass */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmFuncFindAvailableChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ) -{ - BOOLEAN fgIsResultAvailable = FALSE; - P_CHANNEL_ENTRY_FIELD_T prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_8 ucBufferSize = 0, ucIdx = 0, ucChannelSelected = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (fgIsDefaultChannel) { - ucChannelSelected = P2P_DEFAULT_LISTEN_CHANNEL; - } - - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while ((ucBufferSize != 0) && (!fgIsResultAvailable)) { - - for (ucIdx = 0; ucIdx < prChannelEntry->ucNumberOfChannels; ucIdx++) { - if ((!fgIsSocialChannel) || - (prChannelEntry->aucChannelList[ucIdx] == 1) || - (prChannelEntry->aucChannelList[ucIdx] == 6) || - (prChannelEntry->aucChannelList[ucIdx] == 11)) { - - if (prChannelEntry->aucChannelList[ucIdx] <= 11) { - /* 2.4G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - else if ((prChannelEntry->aucChannelList[ucIdx] < 52) && - (prChannelEntry->aucChannelList[ucIdx] > 14)) { - /* 2.4G + 5G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - - if (ucChannelSelected == ucCheckChnl) { - fgIsResultAvailable = TRUE; - break; - } - } - - } - - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntry->ucNumberOfChannels); - - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntry + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntry->ucNumberOfChannels); - - } - - - - if ((!fgIsResultAvailable) && (pucSuggestChannel != NULL)) { - DBGLOG(P2P, TRACE, ("The request channel %d is not available, sugguested channel:%d\n", ucCheckChnl, ucChannelSelected)); - // Given a suggested channel. - *pucSuggestChannel = ucChannelSelected; - } - - - } while (FALSE); - - return fgIsResultAvailable; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - UINT_8 ucSecondChannel, i, j; - ENUM_CHNL_EXT_T eSCO; - - eSCO = CHNL_EXT_SCN; - - if (prBssInfo->eBand == BAND_2G4) { - if (prBssInfo->ucPrimaryChannel != 14) { - eSCO = (prBssInfo->ucPrimaryChannel > 7) ? - CHNL_EXT_SCB : CHNL_EXT_SCA; - } - } - else { - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - if (prSubband->ucBand == prBssInfo->eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == prBssInfo->ucPrimaryChannel) { - eSCO = (j & 1) ? CHNL_EXT_SCB : CHNL_EXT_SCA; - break; - } - } - - if (j < prSubband->ucNumChannels) { - break; /* Found */ - } - } - } - } - - /* Check if it is boundary channel and 40MHz BW is permitted */ - if (eSCO != CHNL_EXT_SCN) { - ucSecondChannel = (eSCO == CHNL_EXT_SCA) ? - (prBssInfo->ucPrimaryChannel+ 4) : (prBssInfo->ucPrimaryChannel- 4); - - if (!rlmDomainIsLegalChannel(prAdapter, prBssInfo->eBand, ucSecondChannel)){ - eSCO = CHNL_EXT_SCN; - } - } - - return eSCO; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_rlm_obss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_rlm_obss.c deleted file mode 100755 index f9045373157b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_rlm_obss.c +++ /dev/null @@ -1,374 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#include "precomp.h" - - -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Different concurrent network has itself channel lists, and -* concurrent networks should have been recorded in channel lists. -* If role of active P2P is GO, assume associated AP of AIS will -* record our Beacon for P2P GO because of same channel. -* -* Note: If we have scenario of different channel in the future, -* the internal FW communication channel shall be established. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 ucChannelLevel; - - ASSERT(prBssInfo); - - if (eBand == BAND_2G4) { - ucChannelLevel = rlmObssChnlLevelIn2G4(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else if (eBand == BAND_5G) { - ucChannelLevel = rlmObssChnlLevelIn5G(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else { - ucChannelLevel = CHNL_LEVEL0; - } - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel, ucCenterChannel; - UINT_8 ucAffectedChnl_L, ucAffectedChnl_H; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucCenterChannel = ucPriChannel + 2; - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucCenterChannel = ucPriChannel - 2; - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucCenterChannel >= 1 && ucCenterChannel <= 14); - - /* Calculated low/upper channels in affected freq range */ - ucAffectedChnl_L = (ucCenterChannel <= AFFECTED_CHNL_OFFSET) ? - 1 : (ucCenterChannel - AFFECTED_CHNL_OFFSET); - - ucAffectedChnl_H = (ucCenterChannel >= (14 - AFFECTED_CHNL_OFFSET)) ? - 14 : (ucCenterChannel + AFFECTED_CHNL_OFFSET); - - - /* Check intolerant (Non-HT) channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_NonHtChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_NonHtChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_NonHtChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 20M BW request channel list */ - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_20mReqChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_20mReqChnlList[i] <= ucAffectedChnl_H)) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G primary channel list */ - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_PriChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_PriChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_PriChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G secondary channel list */ - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_SecChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_SecChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_SecChnlList[i] != ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - -L_2G4_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucSecChannel >= 36); - - /* Check 5G primary channel list */ - ASSERT(prBssInfo->auc5G_PriChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_PriChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_PriChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_PriChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check non-HT channel list */ - ASSERT(prBssInfo->auc5G_NonHtChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_NonHtChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_NonHtChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check secondary channel list */ - ASSERT(prBssInfo->auc5G_SecChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_SecChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_SecChnlList[i] == ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - } - -L_5G_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - - /* To do: need an algorithm to do judgement. Now always reject request */ - - prMsduInfo = (P_MSDU_INFO_T) - cnmMgtPktAlloc(prAdapter, PUBLIC_ACTION_MAX_LEN); - if (prMsduInfo == NULL) { - return; - } - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence rsp frame!\n")); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) prMsduInfo->prPacket; - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, - ((P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader)->aucSrcAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = 0; - - ASSERT((WLAN_MAC_HEADER_LEN + 5) <= PUBLIC_ACTION_MAX_LEN); - - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex =prSwRfb->ucStaRecIdx; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_HTC_LEN + 5; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - /* Send them to HW queue */ - nicTxEnqueueMsdu(prAdapter, prMsduInfo); -} - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_scan.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_scan.c deleted file mode 100755 index b8e898e2b997..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_scan.c +++ /dev/null @@ -1,837 +0,0 @@ -/* -** $Id: @(#) p2p_scan.c@@ -*/ - -/*! \file "p2p_scan.c" - \brief This file defines the p2p scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_SCAN_INFO_T prScanInfo = (P_SCAN_INFO_T)NULL; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucDeviceID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* Loop for each prBssDesc */ - prTargetP2pDesc = scanFindP2pDeviceDesc(prAdapter, - prBssDesc, - aucDeviceID, - TRUE, - FALSE); - - if (prTargetP2pDesc != NULL) { - break; - } - } - - if ((pprBssDesc) && (prTargetP2pDesc != NULL)) { - /* Only valid if prTargetP2pDesc is not NULL. */ - *pprBssDesc = prBssDesc; - } - - return prTargetP2pDesc; -} /* scanSearchTargetP2pDesc */ - - - - -VOID -scanInvalidAllP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (prTargetDesc->fgDevInfoValid) { - prTargetDesc->fgDevInfoValid = FALSE; - } - } - - return; -} /* scanRenewP2pClientDevice */ - -VOID -scanRemoveInvalidP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL, prNexEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - LINK_FOR_EACH_SAFE(prLinkEntry, prNexEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (!prTargetDesc->fgDevInfoValid) { - LINK_REMOVE_KNOWN_ENTRY(&prBssDesc->rP2pDeviceList, prLinkEntry); - if ((prP2pConnSettings) && - (prP2pConnSettings->prTargetP2pDesc == prTargetDesc)) { - prP2pConnSettings->prTargetP2pDesc = NULL; - } - kalMemFree(prTargetDesc, VIR_MEM_TYPE, sizeof(P2P_DEVICE_DESC_T)); - } - } - - return; -} /* scanRenewP2pClientDevice */ - - - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prBssDesc != NULL) && - (aucMacAddr != NULL)); - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (fgIsDeviceAddr) { - if (EQUAL_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr)) { - break; - } - } - else { - if (EQUAL_MAC_ADDR(prTargetDesc->aucInterfaceAddr, aucMacAddr)) { - break; - } - } - - prTargetDesc = NULL; - } - - if ((fgAddIfNoFound) && (prTargetDesc == NULL)) { - /* Target Not Found. */ - // TODO: Use memory pool in the future. - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - } - else { - ASSERT(FALSE); - } - } - - } while (FALSE); - - return prTargetDesc; -} /* scanFindP2pDeviceDesc */ - - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - ASSERT(prAdapter); - ASSERT(prBssDesc); - - if (prBssDesc->prP2pDesc == NULL) { - - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - prBssDesc->prP2pDesc = prTargetDesc; - /* We are not sure the SrcAddr is Device Address or Interface Address. */ - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, prBssDesc->aucSrcAddr); - COPY_MAC_ADDR(prTargetDesc->aucInterfaceAddr, prBssDesc->aucSrcAddr); - } - else { - - ASSERT(FALSE); - } - } - else { - prTargetDesc = prBssDesc->prP2pDesc; - } - - - return prTargetDesc; - -} /* scanFindP2pDeviceDesc */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_DEVICE_DESC_T prP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - BOOLEAN fgUpdateDevInfo = FALSE; - - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - - ASSERT(prAdapter); - - prP2pDesc = scanGetP2pDeviceDesc(prAdapter, prBssDesc); - - if (!prP2pDesc) { - ASSERT(FALSE); - return fgUpdateDevInfo; - } - - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: /* Beacon, Probe Response */ - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - - prP2pDesc->ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - prP2pDesc->ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: /* Beacon */ - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == P2P_ATTRI_MAX_LEN_P2P_DEV_ID); - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: /* Probe Response */ - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - UINT_16 u2NameLen = 0, u2Id = 0; - - fgUpdateDevInfo = TRUE; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &prP2pDesc->rPriDevType; - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); // TODO: Fixme if secondary device type is more than 2. - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)((PUINT_8)prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &u2NameLen); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Id, &u2Id); - ASSERT(u2Id == WPS_ATTRI_ID_DEVICE_NAME); - if (u2NameLen > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - u2NameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - prP2pDesc->u2NameLength = u2NameLen; - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: /* Probe Response */ - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - case P2P_ATTRI_ID_NOTICE_OF_ABSENCE: - break; - case P2P_ATTRI_ID_EXT_LISTEN_TIMING: - // TODO: Not implement yet. - //ASSERT(FALSE); - break; - default: - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - scanInvalidAllP2pClientDevice(prAdapter, prBssDesc); - - /* GO/Device itself. */ - prP2pDesc->fgDevInfoValid = TRUE; - - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - - while (u2AttributeLen > 0) { - prP2pDesc = scanFindP2pDeviceDesc(prAdapter, prBssDesc, prClientInfoDesc->aucDevAddr, TRUE, TRUE); - - if (!prP2pDesc) { - ASSERT(FALSE); - break; /* while */ - } - - prP2pDesc->fgDevInfoValid = TRUE; - - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - if (u2AttributeLen < 25) { - DBGLOG(P2P, WARN, ("Length incorrect warning.\n")); - break; - } - COPY_MAC_ADDR(prP2pDesc->aucInterfaceAddr, prClientInfoDesc->aucIfAddr); - - prP2pDesc->ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - - WLAN_GET_FIELD_BE16(&prClientInfoDesc->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &(prP2pDesc->rPriDevType); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &prP2pDesc->u2NameLength); - if (prP2pDesc->u2NameLength > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prP2pDesc->u2NameLength = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - - u2AttributeLen -= (prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)((UINT_32)prClientInfoDesc + (UINT_32)prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - } - - scanRemoveInvalidP2pClientDevice(prAdapter, prBssDesc); - } - - return fgUpdateDevInfo; -} /* end of scanAddP2pDeviceInfo() */ - -#endif - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - EVENT_P2P_DEV_DISCOVER_RESULT_T rEventDevInfo; -#if 1 - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - COPY_MAC_ADDR(rEventDevInfo.aucDeviceAddr, prTargetDesc->aucDeviceAddr); - COPY_MAC_ADDR(rEventDevInfo.aucInterfaceAddr, prTargetDesc->aucInterfaceAddr); - - rEventDevInfo.ucDeviceCapabilityBitmap = prTargetDesc->ucDeviceCapabilityBitmap; - rEventDevInfo.ucGroupCapabilityBitmap = prTargetDesc->ucGroupCapabilityBitmap; - rEventDevInfo.u2ConfigMethod = prTargetDesc->u2ConfigMethod; - - kalMemCopy(&rEventDevInfo.rPriDevType, - &prTargetDesc->rPriDevType, - sizeof(P2P_DEVICE_TYPE_T)); - - kalMemCopy(rEventDevInfo.arSecDevType, - prTargetDesc->arSecDevType, - (prTargetDesc->ucSecDevTypeNum * sizeof(P2P_DEVICE_TYPE_T))); - - rEventDevInfo.ucSecDevTypeNum = prTargetDesc->ucSecDevTypeNum; - - rEventDevInfo.u2NameLength = prTargetDesc->u2NameLength; - kalMemCopy(rEventDevInfo.aucName, - prTargetDesc->aucName, - prTargetDesc->u2NameLength); - - COPY_MAC_ADDR(rEventDevInfo.aucBSSID, prBssDesc->aucBSSID); - - if (prTargetDesc == prBssDesc->prP2pDesc) { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - prBssDesc->aucIEBuf, - prBssDesc->u2IELength); - } - else { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - NULL, - 0); - } - } - - kalP2PIndicateFound(prAdapter->prGlueInfo); - -#else - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - - ASSERT(prAdapter); - - prP2pSpecificBssInfo = &prAdapter->rWifiVar.rP2pSpecificBssInfo; - -#if 1 - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); -#else - prP2pAttribute = (P_P2P_ATTRIBUTE_T)&prP2pSpecificBssInfo->aucAttributesCache[0]; - u2AttributeLen = prP2pSpecificBssInfo->u2AttributeLen; -#endif - rEventDevInfo.fgDevInfoValid = FALSE; - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - rEventDevInfo.ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - rEventDevInfo.ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == 6); - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - rEventDevInfo.u2ConfigMethod = prP2pAttriDevInfo->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prClientInfoDesc = prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - while (u2AttributeLen > 0) { - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prClientInfoDesc->aucIfAddr, MAC_ADDR_LEN); - rEventDevInfo.ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - rEventDevInfo.u2ConfigMethod = prClientInfoDesc->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(&rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - u2AttributeLen -= prP2pAttriGroupInfo->u2Length; - prP2pAttriGroupInfo = prP2pAttriGroupInfo + prP2pAttriGroupInfo->u2Length + 1; - } - - } -#endif - return WLAN_STATUS_SUCCESS; -} /* scanSendDeviceDiscoverEvent */ - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->fgIsP2PPresent) { - - if ((!prP2pBssInfo->ucDTIMPeriod) && // First time. - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && // P2P GC - (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && // Connected - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON) && // TX Beacon - EQUAL_SSID(prBssDesc->aucSSID, // SSID Match - prBssDesc->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen)) { - - - prP2pBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - do { - RF_CHANNEL_INFO_T rChannelInfo; - - ASSERT_BREAK((prSwRfb != NULL) && (prBssDesc != NULL)); - - if (((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) != MAC_FRAME_PROBE_RSP)) { - // Only report Probe Response frame to supplicant. - /* Probe response collect much more information. */ - break; - } - - rChannelInfo.ucChannelNum = prBssDesc->ucChannelNum; - rChannelInfo.eBand = prBssDesc->eBand; - - kalP2PIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - &rChannelInfo, - RCPI_TO_dBm(prBssDesc->ucRCPI)); - - - } while (FALSE); - } -} - -VOID -scnEventReturnChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ) -{ - - CMD_SCAN_CANCEL rCmdScanCancel; - - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = ucScnSeqNum; - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - return; -} /* scnEventReturnChannel */ - -VOID -scanRemoveAllP2pBssDesc( - IN P_ADAPTER_T prAdapter - ) -{ - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prBSSDescNext; - - ASSERT(prAdapter); - - prBSSDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - scanRemoveP2pBssDesc(prAdapter, prBssDesc); - } -} /* scanRemoveAllP2pBssDesc */ - -VOID -scanRemoveP2pBssDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - return; -} /* scanRemoveP2pBssDesc */ - - -P_BSS_DESC_T -scanP2pSearchDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ) -{ - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL, prBssDesc = (P_BSS_DESC_T)NULL; - P_LINK_T prBssDescList = (P_LINK_T)NULL; - - do { - if ((prAdapter == NULL) || - (prP2pBssInfo == NULL) || - (prConnReqInfo == NULL)) { - break; - } - - - prBssDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - DBGLOG(P2P, LOUD, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, LOUD, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - - LINK_FOR_EACH_ENTRY(prBssDesc, prBssDescList, rLinkEntry, BSS_DESC_T) { - DBGLOG(P2P, LOUD, ("Checking BSS: "MACSTR"\n", MAC2STR(prBssDesc->aucBSSID))); - - if (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSS type.\n")); - continue; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnReqInfo->aucBssid)) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSSID.\n")); - continue; - } - - - /* SSID should be the same? SSID is vary for each connection. so... */ - if (UNEQUAL_SSID(prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)) { - - DBGLOG(P2P, TRACE, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, TRACE, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - DBGLOG(P2P, TRACE, ("Checking SSID:%s, length:%d\n", - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)); - DBGLOG(P2P, TRACE, ("Ignore mismatch SSID, (But BSSID match).\n")); - ASSERT(FALSE); - continue; - } - - if (!prBssDesc->fgIsP2PPresent) { - DBGLOG(P2P, ERROR, ("SSID, BSSID, BSSTYPE match, but no P2P IE present.\n")); - continue; - } - - - /* Final decision. */ - prCandidateBssDesc = prBssDesc; - break; - } - - - - } while (FALSE); - - return prCandidateBssDesc; -} /* scanP2pSearchDesc */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_state.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_state.c deleted file mode 100755 index 64b9ae62aaf9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/p2p_state.c +++ /dev/null @@ -1,577 +0,0 @@ -#include "p2p_precomp.h" - - -BOOLEAN -p2pStateInit_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ) -{ - BOOLEAN fgIsTransOut = FALSE; -// P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (peNextState != NULL)); - - if ((prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) && IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - fgIsTransOut = TRUE; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - *peNextState = P2P_STATE_REQING_CHANNEL; - - } - else { -#if 0 - else if (IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - - ASSERT((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Start a timer for return channel. */ - DBGLOG(P2P, TRACE, ("start a GO channel timer.\n")); - } - - } - -#endif - cnmTimerStartTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer), 5000); - } - - } while (FALSE); - - return fgIsTransOut; -} /* p2pStateInit_IDLE */ - - -VOID -p2pStateAbort_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Release channel before timeout. */ - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - - /* Stop timer for leaving this state. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - } while (FALSE); - - return; -} /* p2pStateAbort_IDLE */ - - - -VOID -p2pStateInit_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Store the original channel info. */ - prChnlReqInfo->ucOriChnlNum = prP2pBssInfo->ucPrimaryChannel; - prChnlReqInfo->eOriBand = prP2pBssInfo->eBand; - prChnlReqInfo->eOriChnlSco = prP2pBssInfo->eBssSCO; - - /* RX Probe Request would check primary channel.*/ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eChnlSco; - - - DBGLOG(P2P, TRACE, ("start a channel on hand timer.\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - prChnlReqInfo->u4MaxInterval); - - kalP2PIndicateChannelReady(prAdapter->prGlueInfo, - prChnlReqInfo->u8Cookie, - prChnlReqInfo->ucReqChnlNum, - prChnlReqInfo->eBand, - prChnlReqInfo->eChnlSco, - prChnlReqInfo->u4MaxInterval); - - } while (FALSE); - - return; -} /* p2pStateInit_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Restore the original channel info. */ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucOriChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eOriBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eOriChnlSco; - - if (eNextState != P2P_STATE_CHNL_ON_HAND) { - /* Indicate channel return. */ - kalP2PIndicateChannelExpired(prAdapter->prGlueInfo, &prP2pFsmInfo->rChnlReqInfo); - - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } while (FALSE); - return; -} /* p2pStateAbort_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_REQING_CHANNEL ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (eNextState < P2P_STATE_NUM)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (eNextState == P2P_STATE_IDLE) { - if (prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) { - /* Intend to be AP. */ - /* Setup for AP mode. */ - p2pFuncStartGO(prAdapter, - prP2pBssInfo, - prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - prP2pSpecificBssInfo->ucPreferredChannel, - prP2pSpecificBssInfo->eRfBand, - prP2pSpecificBssInfo->eRfSco, - prP2pFsmInfo->fgIsApMode); - - } - else { - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } - - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->eScanType = SCAN_TYPE_PASSIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_2G4; - prScanReqInfo->u2PassiveDewellTime = 50; // 50ms for passive channel load detection - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->fgIsScanRequest = TRUE; - prScanReqInfo->ucNumChannelList = 0; - prScanReqInfo->u4BufLength = 0; - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - - -VOID -p2pStateAbort_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - - if (eNextState == P2P_STATE_REQING_CHANNEL) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Determine the channel for AP. */ - if (cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) { - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if ((ucPreferedChnl = prP2pConnSettings->ucOperatingChnl) == 0) { - - if (scnQuerySparseChannel(prAdapter, &eBand, &ucPreferedChnl) == FALSE) { - - // What to do? - ASSERT(FALSE); - // TODO: Pick up a valid channel from channel list. - ucPreferedChnl = 1; - eBand = BAND_2G4; - } - } - } - - - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand = eBand; - prChnlReqInfo->eChnlSco = prP2pSpecificBssInfo->eRfSco = eSco; - } - else { - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - } - - - } while (FALSE); - - return; -} /* p2pStateAbort_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_SCAN ( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &prP2pFsmInfo->rScanReqInfo; - - prScanReqInfo->fgIsScanRequest = TRUE; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - return; -} /* p2pStateInit_SCAN */ - - -VOID -p2pStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - do { - ASSERT_BREAK(prAdapter != NULL); - - // 1. Scan cancel. (Make sure the scan request is invalid. - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - - // Scan done indication. - kalP2PIndicateScanDone(prAdapter->prGlueInfo, prP2pFsmInfo->rScanReqInfo.fgIsAbort); - } while (FALSE); - - return; -} /* p2pStateAbort_SCAN */ - - -VOID -p2pStateInit_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (prJoinInfo != NULL) && - (prBssDesc != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - - // Setup a join timer. - DBGLOG(P2P, TRACE, ("Start a join init timer\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (prP2pFsmInfo->u4GrantInterval - AIS_JOIN_CH_GRANT_THRESHOLD)); - - //2 <1> We are goin to connect to this BSS - prBssDesc->fgIsConnecting = TRUE; - - //2 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - (prBssDesc->fgIsP2PPresent?(STA_TYPE_P2P_GO):(STA_TYPE_LEGACY_AP)), - NETWORK_TYPE_P2P_INDEX, - prBssDesc); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Create station record fail\n")); - break; - } - - - prJoinInfo->prTargetStaRec = prStaRec; - prJoinInfo->fgIsJoinComplete = FALSE; - prJoinInfo->u4BufLength = 0; - - //2 <2.1> Sync. to FW domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prStaRec->fgIsReAssoc = FALSE; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - switch (prP2pConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - case AUTH_MODE_SHARED: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(P2P, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prJoinInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - default: - ASSERT(!(prP2pConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(P2P, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prP2pConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - } - else { - ASSERT(FALSE); - // TODO: Shall we considering ROAMIN case for P2P Device?. - } - - - //2 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes. - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prJoinInfo->rSsidStruct.aucSsid, - prJoinInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - //2 <5> Backup desired channel. - - //2 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - - if (!prJoinReqMsg) { - DBGLOG(P2P, TRACE, ("Allocation Join Message Fail\n")); - ASSERT(FALSE); - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - // TODO: Consider fragmentation info in station record. - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - - - } while (FALSE); - - return; -} /* p2pStateInit_GC_JOIN */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort. Leave JOIN State & Abort JOIN. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pStateAbort_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_MSG_JOIN_ABORT_T prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL) && (prJoinInfo != NULL)); - - if (prJoinInfo->fgIsJoinComplete == FALSE) { - - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - DBGLOG(P2P, TRACE, ("Fail to allocate join abort message buffer\n")); - ASSERT(FALSE); - return; - } - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prJoinInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prJoinInfo->prTargetStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - } - - /* Stop Join Timer. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Release channel requested. */ - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - - } while (FALSE); - - return; - -} /* p2pStateAbort_GC_JOIN */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/privacy.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/privacy.c deleted file mode 100755 index 66b33a631b71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/privacy.c +++ /dev/null @@ -1,1024 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/privacy.c#1 $ -*/ - -/*! \file "privacy.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from rsn.c and nic_privacy.c - -*/ - - - -/* -** $Log: privacy.c $ - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2011 terry.wu - * NULL - * Fix Hotspot deauth send failed. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 28 2011 tsaiyuan.hsu - * [WCXRP00000819] [MT6620 Wi-Fi][Driver] check if staRec is NULL or not in secCheckClassError - * check if staRec is NULL or not in secCheckClassError. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for migration. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 22 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the wpi same key id rx issue and fixed the remove wep key issue. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * remove the assert code for allow ad-hoc pkt. - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * change the waning message shown level, and clear the global transmit flag for CMD INFRASTRUCTURE. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * * * MQM: BA handling - * * * * * * * * * TXM: Macros updates - * * * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * modify the cmd with result return - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the value not initialize issue - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to update the auth mode and encryption status for cmd build connection - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some code for wapi mode - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the call to check the 4th and eapol error report frame - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function name - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for parsing the EAPoL frame, and do some code refine - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the class error check - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the cmd_802_11_pmkid code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * doing some function rename, and adding the code for cmd CMD_ADD_REMOVE_KEY - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the clear pmkid function - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eStaType check for AIS - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection related code - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_PRIVACY_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the privacy-related -* parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] ucNetTypeIdx Pointer to netowrk type index -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secInit ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ) -{ - UINT_8 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secInit"); - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prBssInfo->u4RsnSelectedGroupCipher = 0; - prBssInfo->u4RsnSelectedPairwiseCipher = 0; - prBssInfo->u4RsnSelectedAKMSuite = 0; - -#if CFG_ENABLE_WIFI_DIRECT - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[0].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[1].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[2].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[3].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP104; - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[4].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[5].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[6].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[7].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP104; - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[0].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[1].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[2].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_PSK; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[3].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[4].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[5].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK; - -#if CFG_SUPPORT_802_11W - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[6].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X_SHA256; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[7].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK_SHA256; -#endif - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i].dot11RSNAConfigAuthenticationSuiteEnabled = - FALSE; - } - - secClearPmkid(prAdapter); - - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rPreauthenticationTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnIndicatePmkidCand, - (UINT_32)NULL); - -#if CFG_SUPPORT_802_11W - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rSaQueryTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnStartSaQueryTimer, - (UINT_32)NULL); -#endif - - prAisSpecBssInfo->fgCounterMeasure = FALSE; - prAisSpecBssInfo->ucWEPDefaultKeyID = 0; - - - #if 0 - for (i=0;iarWtbl[i].fgUsed = FALSE; - g_prWifiVar->arWtbl[i].prSta = NULL; - g_prWifiVar->arWtbl[i].ucNetTypeIdx = NETWORK_TYPE_INDEX_NUM; - - } - nicPrivacyInitialize((UINT_8)NETWORK_TYPE_INDEX_NUM); - #endif -} /* secInit */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Rx Class Error" to SEC_FSM for -* JOIN Module. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSwRfb Pointer to the SW RFB. -* -* \return FALSE Class Error -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secCheckClassError ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prSwRfb); - //ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prSwRfb->ucStaRecIdx]); - - if ((prStaRec) && 1 /* RXM_IS_DATA_FRAME(prSwRfb) */) { - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = prStaRec->ucNetTypeIndex; - - if (IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - P_BSS_INFO_T prBssInfo; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]; - - if ((STA_STATE_3 != prStaRec->ucStaState) && - IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->fgIsNetAbsent == FALSE) { - /*(IS_AP_STA(prStaRec) || IS_CLIENT_STA(prStaRec))) {*/ - - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - prStaRec, - NULL, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - - DBGLOG(RSN, INFO, ("Send Deauth to MAC:["MACSTR"] for Rx Class 3 Error.\n", - MAC2STR(prStaRec->aucMacAddr))); - } - - return FALSE; - } - - return secRxPortControlCheck(prAdapter, prSwRfb); - } - } - - return FALSE; -} /* end of secCheckClassError() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to setting the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[in] fgPortBlock The port status -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetPortBlocked ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPortBlock - ) -{ - if (prSta == NULL) - return ; - - prSta->fgPortBlock = fgPortBlock; - - DBGLOG(RSN, TRACE, ("The STA "MACSTR" port %s\n", MAC2STR(prSta->aucMacAddr), fgPortBlock == TRUE ? "BLOCK" :" OPEN")); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to report the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[out] fgPortBlock The port status -* -* \return TRUE sta exist, FALSE sta not exist -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secGetPortStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - OUT PBOOLEAN pfgPortStatus - ) -{ - if (prSta == NULL) - return FALSE; - - *pfgPortStatus = prSta->fgPortBlock; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle Peer device Tx Security process MSDU. -* -* \param[in] prMsduInfo pointer to the packet info pointer -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port blocked -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL /* ENUM_PORT_CONTROL_RESULT */ -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - if (prStaRec) { - - /* Todo:: */ - if (prMsduInfo->fgIs802_1x) - return TRUE; - - if (prStaRec->fgPortBlock == TRUE) { - DBGLOG(INIT, TRACE, ("Drop Tx packet due Port Control!\n")); - return FALSE; - } - -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - return TRUE; - } -#endif - if (IS_STA_IN_AIS(prStaRec)) { - if (!prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist && - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED)){ - DBGLOG(INIT, TRACE, ("Drop Tx packet due the key is removed!!!\n")); - return FALSE; - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The Rx Security process MSDU. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSWRfb SW rfb pinter -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRxPortControlCheck ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ) -{ - ASSERT(prSWRfb); - -#if 0 - /* whsu:Todo: Process MGMT and DATA */ - if (prSWRfb->prStaRec) { - if (prSWRfb->prStaRec->fgPortBlock == TRUE) { - if (1 /* prSWRfb->fgIsDataFrame and not 1x*/ && - (g_prWifiVar->rConnSettings.eAuthMode >= AUTH_MODE_WPA)){ - //DBGLOG(SEC, WARN, ("Drop Rx data due port control !\r\n")); - return TRUE; /* Todo: whsu FALSE; */ - } - //if (!RX_STATUS_IS_PROTECT(prSWRfb->prRxStatus)) { - // DBGLOG(RSN, WARN, ("Drop rcv non-encrypted data frame!\n")); - // return FALSE; - //} - } - } - else { - } -#endif - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will enable/disable the cipher suite -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4CipherSuitesFlags flag for cipher suite -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetCipherSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ) -{ - UINT_32 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - P_IEEE_802_11_MIB_T prMib; - - ASSERT(prAdapter); - - prMib = &prAdapter->rMib; - - ASSERT(prMib); - - if (u4CipherSuitesFlags == CIPHER_FLAG_NONE) { - /* Disable all the pairwise cipher suites. */ - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prMib->dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - /* Update the group cipher suite. */ - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - - return; - } - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prMib->dot11RSNAConfigPairwiseCiphersTable[i]; - - switch (prEntry->dot11RSNAConfigPairwiseCipher) { - case WPA_CIPHER_SUITE_WEP40: - case RSN_CIPHER_SUITE_WEP40: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP40) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (u4CipherSuitesFlags & CIPHER_FLAG_TKIP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (u4CipherSuitesFlags & CIPHER_FLAG_CCMP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_WEP104: - case RSN_CIPHER_SUITE_WEP104: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP104) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - default: - break; - } - } - - /* Update the group cipher suite. */ - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP40; - } - else { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - } - -} /* secSetCipherSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The 2nd Tx EAPoL Frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsduInfo pointer to the packet info pointer -* \param[in] pucPayload pointer to the 1x hdr -* \param[in] u2PayloadLen the 1x payload length -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secProcessEAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen -) -{ - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - P_IEEE_802_1X_HDR pr1xHdr; - UINT_16 u2KeyInfo; - - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prMsduInfo->ucStaRecIndex]); - ASSERT(prStaRec); - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)pucPayload; - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)((PUINT_32)(pucPayload + 4)); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (u2KeyInfo & WPA_KEY_INFO_SECURE) { - /* 4th EAPoL check at secHandleTxDoneCallback() */ - //DBGLOG(RSN, TRACE, ("Tx 4th EAPoL frame\r\n")); - } - else if (u2PayloadLen == 123 /* Not include LLC */) { - DBGLOG(RSN, INFO, ("Tx 2nd EAPoL frame\r\n")); - secFsmEvent2ndEapolTx(prAdapter, prStaRec); - } - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will handle the 4th EAPoL Tx done and mic Error Report frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ) -{ - PUINT_8 pucPayload; - P_IEEE_802_1X_HDR pr1xHdr = (P_IEEE_802_1X_HDR)NULL; - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - UINT_16 u2KeyInfo; - UINT_16 u2PayloadLen; - - DEBUGFUNC("secHandleTxDoneCallback"); - - ASSERT(prMsduInfo); - //Todo:: Notice if using the TX free immediate after send to firmware, the payload may not correcttly!!!! - - ASSERT(prStaRec); - - //Todo:: This call back may not need because the order of set key and send 4th 1x can be make sure - //Todo:: Notice the LLC offset - #if 1 - pucPayload = (PUINT_8)prMsduInfo->prPacket; - ASSERT(pucPayload); - - u2PayloadLen = prMsduInfo->u2FrameLength; - - if (0 /* prMsduInfo->fgIs1xFrame */) { - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)(PUINT_32)(pucPayload + 8); - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)(PUINT_32)(pucPayload + 12); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (prStaRec->rSecInfo.fg2nd1xSend == TRUE && u2PayloadLen == 107 /* include LLC *//* u2KeyInfo & WPA_KEY_INFO_SECURE */) { - DBGLOG(RSN, INFO, ("Tx 4th EAPoL frame\r\n")); - secFsmEvent4ndEapolTxDone(prAdapter, prStaRec); - } - else if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone){ - DBGLOG(RSN, INFO, ("Tx EAPoL Error report frame\r\n")); - //secFsmEventEapolTxDone(prAdapter, (UINT_32)prMsduInfo->prStaRec); - } - } - } - } - - } - #endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the pmkid parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secClearPmkid ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secClearPmkid"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("secClearPmkid\n")); - prAisSpecBssInfo->u4PmkidCandicateCount = 0; - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCandicate, sizeof(PMKID_CANDICATE_T) * CFG_MAX_PMKID_CACHE); - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether WPA, or WPA2 but not WPA-None is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRsnKeyHandshakeEnabled ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - - ASSERT(prConnSettings); - - ASSERT(prConnSettings->eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION_DISABLED) { - return FALSE; - } - - ASSERT(prConnSettings->eAuthMode < AUTH_MODE_NUM); - if ((prConnSettings->eAuthMode >= AUTH_MODE_WPA) && - (prConnSettings->eAuthMode != AUTH_MODE_WPA_NONE)) { - return TRUE; - } - - return FALSE; -} /* secRsnKeyHandshakeEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return whether the transmit key alread installed. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer the sta record -* -* \retval TRUE Default key or Transmit key installed -* FALSE Default key or Transmit key not installed -* -* \note: -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secTransmitKeyExist ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prSta); - - if (prSta->fgTransmitKeyExist){ - return TRUE; - } - else { - return FALSE; - } -} /* secTransmitKeyExist */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether 802.11 privacy is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secEnabledInAis ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("secEnabled"); - - ASSERT(prAdapter->rWifiVar.rConnSettings.eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION_DISABLED: - return FALSE; - case ENUM_ENCRYPTION1_ENABLED: - case ENUM_ENCRYPTION2_ENABLED: - case ENUM_ENCRYPTION3_ENABLED: - return TRUE; - default: - DBGLOG(RSN, TRACE, ("Unknown encryption setting %d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - break; - } - return FALSE; -} /* secEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the privacy bit at mac header for TxM -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsdu the msdu for known the sta record -* -* \return TRUE the privacy need to set -* FALSE the privacy no need to set -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - - ASSERT(prMsdu); - - ASSERT(prStaRec); - //prStaRec = &(g_arStaRec[prMsdu->ucStaRecIndex]); - - if (prStaRec == NULL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist) - return TRUE; - return FALSE; /* No privacy bit */ - } - - /* Todo:: */ - if (0 /* prMsdu->fgIs1xFrame */){ - if (IS_STA_IN_AIS(prStaRec) && - prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - DBGLOG(RSN, LOUD, ("For AIS Legacy 1x, always not encryped\n")); - return FALSE; - } - else if (!prStaRec->fgTransmitKeyExist) { - DBGLOG(RSN, LOUD, ("1x Not Protected.\n")); - return FALSE; - } - else if (prStaRec->rSecInfo.fgKeyStored) { - DBGLOG(RSN, LOUD, ("1x not Protected due key stored!\n")); - return FALSE; - } - else { - DBGLOG(RSN, LOUD, ("1x Protected.\n")); - return TRUE; - } - } - else { - if (!prStaRec->fgTransmitKeyExist) { - /* whsu , check for AIS only */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist){ - DBGLOG(RSN, LOUD, ("Protected\n")); - return TRUE; - } - } - else { - DBGLOG(RSN, LOUD, ("Protected.\n")); - return TRUE; - } - } - - /* No sec or key is removed!!! */ - return FALSE; -} -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rate.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rate.c deleted file mode 100755 index c63fe7b7d641..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rate.c +++ /dev/null @@ -1,547 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rate.c#1 $ -*/ - -/*! \file "rate.c" - \brief This file contains the transmission rate handling routines. - - This file contains the transmission rate handling routines for setting up - ACK/CTS Rate, Highest Tx Rate, Lowest Tx Rate, Initial Tx Rate and do - conversion between Rate Set and Data Rates. -*/ - - - -/* -** $Log: rate.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add rate.c. - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comments - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix DBGLOG - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** \main\maintrunk.MT5921\12 2008-12-19 17:19:32 GMT mtk01461 -** Fix the problem that do not ASSERT the length of Supported Rate IE == 8 -** \main\maintrunk.MT5921\11 2008-12-01 18:17:42 GMT mtk01088 -** fixed the lint "possible using null pointer" warning -** \main\maintrunk.MT5921\10 2008-08-20 00:16:36 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\9 2008-04-13 21:17:13 GMT mtk01461 -** Revise GEN Link Speed OID -** \main\maintrunk.MT5921\8 2008-03-28 10:40:13 GMT mtk01461 -** Add rateGetRateSetFromDataRates() for set desired rate OID -** \main\maintrunk.MT5921\7 2008-03-26 09:16:20 GMT mtk01461 -** Add adopt operational rate as ACK rate if BasicRateSet was not found -** Add comments -** \main\maintrunk.MT5921\6 2008-02-21 15:01:39 GMT mtk01461 -** Add initial rate according rx signal quality support -** \main\maintrunk.MT5921\5 2008-01-07 15:06:44 GMT mtk01461 -** Fix typo of rate adaptation of CtrlResp Frame -** \main\maintrunk.MT5921\4 2007-10-25 18:05:12 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* The list of valid data rates. */ -const UINT_8 aucDataRate[] = { - RATE_1M, /* RATE_1M_INDEX = 0 */ - RATE_2M, /* RATE_2M_INDEX */ - RATE_5_5M, /* RATE_5_5M_INDEX */ - RATE_11M, /* RATE_11M_INDEX */ - RATE_22M, /* RATE_22M_INDEX */ - RATE_33M, /* RATE_33M_INDEX */ - RATE_6M, /* RATE_6M_INDEX */ - RATE_9M, /* RATE_9M_INDEX */ - RATE_12M, /* RATE_12M_INDEX */ - RATE_18M, /* RATE_18M_INDEX */ - RATE_24M, /* RATE_24M_INDEX */ - RATE_36M, /* RATE_36M_INDEX */ - RATE_48M, /* RATE_48M_INDEX */ - RATE_54M, /* RATE_54M_INDEX */ - RATE_HT_PHY /* RATE_HT_PHY_INDEX */ -}; - -static const UINT_8 aucDefaultAckCtsRateIndex[RATE_NUM] = { - RATE_1M_INDEX, /* RATE_1M_INDEX = 0 */ - RATE_2M_INDEX, /* RATE_2M_INDEX */ - RATE_5_5M_INDEX, /* RATE_5_5M_INDEX */ - RATE_11M_INDEX, /* RATE_11M_INDEX */ - RATE_1M_INDEX, /* RATE_22M_INDEX - Not supported */ - RATE_1M_INDEX, /* RATE_33M_INDEX - Not supported */ - RATE_6M_INDEX, /* RATE_6M_INDEX */ - RATE_6M_INDEX, /* RATE_9M_INDEX */ - RATE_12M_INDEX, /* RATE_12M_INDEX */ - RATE_12M_INDEX, /* RATE_18M_INDEX */ - RATE_24M_INDEX, /* RATE_24M_INDEX */ - RATE_24M_INDEX, /* RATE_36M_INDEX */ - RATE_24M_INDEX, /* RATE_48M_INDEX */ - RATE_24M_INDEX /* RATE_54M_INDEX */ -}; - -const BOOLEAN afgIsOFDMRate[RATE_NUM] = { - FALSE, /* RATE_1M_INDEX = 0 */ - FALSE, /* RATE_2M_INDEX */ - FALSE, /* RATE_5_5M_INDEX */ - FALSE, /* RATE_11M_INDEX */ - FALSE, /* RATE_22M_INDEX - Not supported */ - FALSE, /* RATE_33M_INDEX - Not supported */ - TRUE, /* RATE_6M_INDEX */ - TRUE, /* RATE_9M_INDEX */ - TRUE, /* RATE_12M_INDEX */ - TRUE, /* RATE_18M_INDEX */ - TRUE, /* RATE_24M_INDEX */ - TRUE, /* RATE_36M_INDEX */ - TRUE, /* RATE_48M_INDEX */ - TRUE /* RATE_54M_INDEX */ -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Supported Rate & Extended Supported Rate IE to the -* Operational Rate Set and Basic Rate Set, and also check if any Basic -* Rate Code is unknown by driver. -* -* @param[in] prIeSupportedRate Pointer to the Supported Rate IE -* @param[in] prIeExtSupportedRate Pointer to the Ext Supported Rate IE -* @param[out] pu2OperationalRateSet Pointer to the Operational Rate Set -* @param[out] pu2BSSBasicRateSet Pointer to the Basic Rate Set -* @param[out] pfgIsUnknownBSSBasicRate Pointer to a Flag to indicate that Basic -* Rate Set has unknown Rate Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ) -{ - UINT_16 u2OperationalRateSet = 0; - UINT_16 u2BSSBasicRateSet = 0; - BOOLEAN fgIsUnknownBSSBasicRate = FALSE; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pu2OperationalRateSet); - ASSERT(pu2BSSBasicRateSet); - ASSERT(pfgIsUnknownBSSBasicRate); - - if (prIeSupportedRate) { - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - //ASSERT(prIeSupportedRate->ucLength <= ELEM_MAX_LEN_SUP_RATES); - ASSERT(prIeSupportedRate->ucLength <= RATE_NUM); - - for (i = 0; i < prIeSupportedRate->ucLength; i++) { - ucRate = prIeSupportedRate->aucSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - - if (prIeExtSupportedRate) { - //ASSERT(prIeExtSupportedRate->ucLength <= ELEM_MAX_LEN_EXTENDED_SUP_RATES); - - for (i = 0; i < prIeExtSupportedRate->ucLength; i++) { - ucRate = prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - *pu2OperationalRateSet = u2OperationalRateSet; - *pu2BSSBasicRateSet = u2BSSBasicRateSet; - *pfgIsUnknownBSSBasicRate = fgIsUnknownBSSBasicRate; - - return; - -} /* end of rateGetRateSetFromIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Operational Rate Set & Basic Rate Set to the Rate Code -* Format for used in (Ext)Supportec Rate IE. -* -* @param[in] u2OperationalRateSet Operational Rate Set -* @param[in] u2BSSBasicRateSet Basic Rate Set -* @param[out] pucDataRates Pointer to the Data Rate Buffer -* @param[out] pucDataRatesLen Pointer to the Data Rate Buffer Length -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ) -{ - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pucDataRatesLen); - - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - for (i = RATE_1M_INDEX, j = 0; i < RATE_NUM; i++) { - if (u2OperationalRateSet & BIT(i)) { - - *(pucDataRates + j) = aucDataRate[i]; - - if (u2BSSBasicRateSet & BIT(i)) { - *(pucDataRates + j) |= RATE_BASIC_BIT; - } - - j++; - } - } - - *pucDataRatesLen = (UINT_8)j; - - return; - -} /* end of rateGetDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the highest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucHighestRateIndex Pointer to buffer of the Highest Rate Index -* -* \retval TRUE Highest Rate Index was found -* \retval FALSE Highest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ) -{ - INT_32 i; - - - ASSERT(pucHighestRateIndex); - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucHighestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetHighestRateIndexFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the lowest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucLowestRateIndex Pointer to buffer of the Lowest Rate Index -* -* \retval TRUE Lowest Rate Index was found -* \retval FALSE Lowest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ) -{ - UINT_32 i; - - ASSERT(pucLowestRateIndex); - - for (i = RATE_1M_INDEX; i <= RATE_54M_INDEX; i++) { - if (u2RateSet & BIT(i)) { - *pucLowestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetLowestRateIndexFromRateSet() */ - - -#if 0 // NOTE(Kevin): For reference -/*----------------------------------------------------------------------------*/ -/*! -* \brief Convert the given Data Rates to the Rate Set. -* -* \param[in] pucDataRates Pointer to the Data Rates -* \param[in] ucDataRatesLen Length of given Data Rates -* \param[out] pu2RateSet Pointer to the Rate Set -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromDataRates ( - IN PUINT_8 pucDataRates, - IN UINT_8 ucDataRatesLen, - OUT PUINT_16 pu2RateSet - ) -{ - UINT_16 u2RateSet = 0; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pu2RateSet); - - if (pucDataRates) { - for (i = 0; i < ucDataRatesLen; i++) { - ucRate = pucDataRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2RateSet |= BIT(j); - break; - } - } - } - } - - *pu2RateSet = u2RateSet; - - return; - -} /* end of rateGetRateSetFromDataRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the Operational Rate Set and Basic Rate Set to get the corresponding -* ACK/CTS(Respnose) TX Rates. -* -* \param[in] u2OperationalRateSet Operational Rate Set -* \param[in] u2BSSBasicRateSet Basic Rate Set -* \param[out] aucAckCtsRateIndex Pointer to the Ack/Cts Data Rate Buffer -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateSetAckCtsDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - IN OUT UINT_8 aucAckCtsRateIndex[] - ) -{ - INT_32 i,j; - - - ASSERT(aucAckCtsRateIndex); - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - /* Setup default ACK/CTS response rate */ - kalMemCopy(aucAckCtsRateIndex, (PVOID)aucDefaultAckCtsRateIndex, sizeof(aucDefaultAckCtsRateIndex)); - - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2OperationalRateSet & BIT(i)) { - for (j = i; j >= RATE_1M_INDEX; j--) { - if (u2BSSBasicRateSet & BIT(j)) { - if ((afgIsOFDMRate[i] && afgIsOFDMRate[j]) || (!afgIsOFDMRate[i] && !afgIsOFDMRate[j])) // Reply ACK Frame at the same Modulation Scheme. - aucAckCtsRateIndex[i] = (UINT_8)j; - break; - } - } - - /* NOTE(Kevin 2008/03/25): Following code is used for those AP which has - * NULL BasicRateSet. - * e.g. If input Operational Rate Set = [18M 12M 9M], Basic Rate Set = NULL. - * Originally we'll get Ack Rate for [18M 12M 9M] is [12M 12M "6M"]. - * Now we'll get Ack Rate for [18M 12M 9M] is [12M 12M 9M], - * The Ack Rate for Tx Rates which are not list in Operational Rate Set is still - * use highest mandatory rate as default. - */ - if (j < RATE_1M_INDEX) { /* The ACK/CTS rate was not found in BasicRateSet */ - if (!(BIT(aucAckCtsRateIndex[i]) & u2OperationalRateSet)) { - aucAckCtsRateIndex[i] = (UINT_8)i; - } - } - } - } - - return; - -} /* end of rateSetAckCtsDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the proper initial rate from Rate Set according to given RCPI value -* -* \param[in] u2RateSet Rate Set -* \param[in] rRcpi RCPI value from AP or Peer STA -* \param[out] pucInitialRateIndex Pointer to buffer of the initial Rate Index -* -* \retval TRUE Initial Rate Index was found -* \retval FALSE Initial Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetBestInitialRateIndex ( - IN UINT_16 u2RateSet, - IN RCPI rRcpi, - OUT PUINT_8 pucInitialRateIndex - ) -{ - UINT_16 u2InitRateSet; - INT_32 i; - - - ASSERT(pucInitialRateIndex); - - DBGLOG(MGT, TRACE, ("rRcpi = %d\n", rRcpi)); - - if (rRcpi >= RCPI_100) { /* Best Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_100); - } - else if (rRcpi >= RCPI_80) { /* Better Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_80); - } - else if (rRcpi >= RCPI_60) { /* Good Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_60); - } - else { /* Worse Signal */ - /* NOTE(Kevin): If return FALSE, we should assign the BSS Basic Rate Index - * (prBssInfo->ucBasicRateIndex) to the initial rate. It was determined in - * function - bssUpdateTxRateForControlFrame(). - */ - return FALSE; - } - - u2RateSet &= u2InitRateSet; - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucInitialRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetBestInitialRateIndex() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm.c deleted file mode 100755 index a78924ae20c0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm.c +++ /dev/null @@ -1,1829 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm.c#2 $ -*/ - -/*! \file "rlm.c" - \brief - -*/ - - - -/* -** $Log: rlm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Check length HT cap IE about RX associate request frame - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Fix preamble type of STA mode - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Not send ERP IE if peer STA is 802.11b-only - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 28 2011 cm.chang - * NULL - * Add length check to reduce possibility to adopt wrong IE - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 01 2011 cm.chang - * [WCXRP00000971] [MT6620 Wi-Fi][Driver][FW] Not set Beacon timeout interval when CPTT - * Final channel number only adopts the field from assoc response - * - * 06 10 2011 cm.chang - * [WCXRP00000773] [MT6620 Wi-Fi][Driver] Workaround some AP fill primary channel field with its secondary channel - * If DS IE exists, ignore the primary channel field in HT OP IE - * - * 05 03 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Fix compiling error - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 15 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when no mgmt buffer in free build - * - * 10 08 2010 cm.chang - * NULL - * When 20M only setting, ignore OBSS IE - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Temporary add rlmUpdateParamByStaForBow() and rlmBssInitForBow(). - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix channel ID definition in RFB status to primary channel instead of center channel - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add TX short GI compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Utilize status of swRfb to know channel number and band - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 04 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process Beacon only ready for infra STA now - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 15 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide draft measurement and quiet functions - * - * 03 09 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * If bss is not 11n network, zero WTBL HT parameters - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Generate HT IE only depending on own phyTypeSet - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not fill HT related IE if BssInfo does not include 11n phySet - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RDG RX, but disable RDG TX for IOT and LongNAV - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Modify the parameter of rlmRecAssocRspHtInfo function - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix prBssInfo->ucPrimaryChannel handle for assoc resp - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add some function to process HT operation - * - * Nov 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlmStatisticsInit() to handle MIB counters - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Note: assume TIMER_T structures are reset to zero or stopped - * before invoking this function. - */ - - /* Initialize OBSS FSM */ - rlmObssInit(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - /* Note: all RLM timers will also be stopped. - * Now only one OBSS scan timer. - */ - rlmBssReset(prAdapter, prBssInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtOpIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_IE_ERP_T prErpIe; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11GN(prBssInfo) && prBssInfo->eBand == BAND_2G4 && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11GN))) { - prErpIe = (P_IE_ERP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add ERP IE */ - prErpIe->ucId = ELEM_ID_ERP_INFO; - prErpIe->ucLength = 1; - - prErpIe->ucERP = prBssInfo->fgObssErpProtectMode ? - ERP_INFO_USE_PROTECTION : 0; - - if (prBssInfo->fgErpProtectMode) { - prErpIe->ucERP |= - (ERP_INFO_NON_ERP_PRESENT | ERP_INFO_USE_PROTECTION); - } - - /* Handle barker preamble */ - if (!prBssInfo->fgUseShortPreamble) { - prErpIe->ucERP |= ERP_INFO_BARKER_PREAMBLE_MODE; - } - - ASSERT(IE_SIZE(prErpIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_ERP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prErpIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_CAP_T prHtCap; - P_SUP_MCS_SET_FIELD prSupMcsSet; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - -#if 1 - if(prMsduInfo->ucNetworkType==NETWORK_TYPE_P2P_INDEX) - { - DBGLOG(AIS, WARN,("Assoc:Force P2P BW to 20\n")); - prBssInfo->fgAssoc40mBwAllowed=FALSE; - } -#endif - - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - prHtCap = (P_IE_HT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT capabilities IE */ - prHtCap->ucId = ELEM_ID_HT_CAP; - prHtCap->ucLength = sizeof(IE_HT_CAP_T) - ELEM_HDR_LEN; - - prHtCap->u2HtCapInfo = HT_CAP_INFO_DEFAULT_VAL; - if (!fg40mAllowed) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH | - HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M); - } - if (prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled) { - prHtCap->u2HtCapInfo &= - ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - } - - if(prAdapter->rWifiVar.u8SupportRxSgi20 == 2) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_20M); - } - if(prAdapter->rWifiVar.u8SupportRxSgi40 == 2) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_40M); - } - if(prAdapter->rWifiVar.u8SupportRxGf == 2) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_HT_GF); - } - - prHtCap->ucAmpduParam = AMPDU_PARAM_DEFAULT_VAL; - - prSupMcsSet = &prHtCap->rSupMcsSet; - kalMemZero((PVOID)&prSupMcsSet->aucRxMcsBitmask[0], - SUP_MCS_RX_BITMASK_OCTET_NUM); - - prSupMcsSet->aucRxMcsBitmask[0] = BITS(0, 7); - - if (fg40mAllowed) { - prSupMcsSet->aucRxMcsBitmask[32/8] = BIT(0); /* MCS32 */ - } - prSupMcsSet->u2RxHighestSupportedRate = SUP_MCS_RX_DEFAULT_HIGHEST_RATE; - prSupMcsSet->u4TxRateInfo = SUP_MCS_TX_DEFAULT_VAL; - - prHtCap->u2HtExtendedCap = HT_EXT_CAP_DEFAULT_VAL; - if (!fg40mAllowed || prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prHtCap->u2HtExtendedCap &= - ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE); - } - - prHtCap->u4TxBeamformingCap = TX_BEAMFORMING_CAP_DEFAULT_VAL; - - prHtCap->ucAselCap = ASEL_CAP_DEFAULT_VAL; - - - ASSERT(IE_SIZE(prHtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_EXT_CAP_T prExtCap; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - /* Add Extended Capabilities IE */ - prExtCap = (P_EXT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - prExtCap->ucId = ELEM_ID_EXTENDED_CAP; - prExtCap->ucLength = 1; - prExtCap->aucCapabilities[0] = ELEM_EXT_CAP_DEFAULT_VAL; - - if (!fg40mAllowed) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_20_40_COEXIST_SUPPORT; - } - - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_PSMP_CAP; - } - - ASSERT(IE_SIZE(prExtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prExtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_OP_T prHtOp; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - - prHtOp = (P_IE_HT_OP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT operation IE */ - prHtOp->ucId = ELEM_ID_HT_OP; - prHtOp->ucLength = sizeof(IE_HT_OP_T) - ELEM_HDR_LEN; - - /* RIFS and 20/40 bandwidth operations are included */ - prHtOp->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prHtOp->ucInfo1 = prBssInfo->ucHtOpInfo1; - - /* Decide HT protection mode field */ - if (prBssInfo->eHtProtectMode == HT_PROTECT_MODE_NON_HT) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_HT; - } - else if (prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_MEMBER; - } - else { - /* It may be SYS_PROTECT_MODE_NONE or SYS_PROTECT_MODE_20M */ - prHtOp->u2Info2 = (UINT_8) prBssInfo->eHtProtectMode; - } - - if (prBssInfo->eGfOperationMode != GF_MODE_NORMAL) { - /* It may be GF_MODE_PROTECT or GF_MODE_DISALLOWED - * Note: it will also be set in ad-hoc network - */ - prHtOp->u2Info2 |= HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (0 /* Regulatory class 16 */ && - prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - /* (TBD) It is HT_PROTECT_MODE_NON_MEMBER, so require protection - * although it is possible to have no protection by spec. - */ - prHtOp->u2Info2 |= HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - prHtOp->u2Info3 = prBssInfo->u2HtOpInfo3; /* To do: handle L-SIG TXOP */ - - /* No basic MCSx are needed temporarily */ - for (i = 0; i < 16; i++) { - prHtOp->aucBasicMcsSet[i] = 0; - } - - ASSERT(IE_SIZE(prHtOp) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtOp); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked to update parameters of associated AP. -* (Association response and Beacon) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset; - P_STA_RECORD_T prStaRec; - P_IE_HT_CAP_T prHtCap; - P_IE_HT_OP_T prHtOp; - P_IE_OBSS_SCAN_PARAM_T prObssScnParam; - UINT_8 ucERP, ucPrimaryChannel; -#if CFG_SUPPORT_QUIET && 0 - BOOLEAN fgHasQuietIE = FALSE; -#endif - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(pucIE); - - prStaRec = prBssInfo->prStaRecOfAP; - ASSERT(prStaRec); - if (!prStaRec) { - return 0; - } - - prBssInfo->fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - ucPrimaryChannel = 0; - prObssScnParam = NULL; - - /* Note: HT-related members in staRec may not be zero before, so - * if following IE does not exist, they are still not zero. - * These HT-related parameters are vaild only when the corresponding - * BssInfo supports 802.11n, i.e., RLM_NET_IS_11N() - */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - case ELEM_ID_HT_OP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPrimaryChannel == 0) { - ucPrimaryChannel = prHtOp->ucPrimaryChannel; - } - prBssInfo->ucHtOpInfo1 = prHtOp->ucInfo1; - prBssInfo->u2HtOpInfo2 = prHtOp->u2Info2; - prBssInfo->u2HtOpInfo3 = prHtOp->u2Info3; - - if (!prBssInfo->fg40mBwAllowed) { - prBssInfo->ucHtOpInfo1 &= - ~(HT_OP_INFO1_SCO | HT_OP_INFO1_STA_CHNL_WIDTH); - } - - if ((prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssInfo->eBssSCO = (ENUM_CHNL_EXT_T) - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO); - } - - prBssInfo->eHtProtectMode = (ENUM_HT_PROTECT_MODE_T) - (prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_HT_PROTECTION); - - /* To do: process regulatory class 16 */ - if ((prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) - && 0 /* && regulatory class is 16 */) { - prBssInfo->eGfOperationMode = GF_MODE_DISALLOWED; - } - else if (prBssInfo->u2HtOpInfo2&HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - prBssInfo->eGfOperationMode = GF_MODE_PROTECT; - } - else { - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - } - - prBssInfo->eRifsOperationMode = - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_RIFS_MODE) ? - RIFS_MODE_NORMAL : RIFS_MODE_DISALLOWED; - - break; - - case ELEM_ID_20_40_BSS_COEXISTENCE: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store if scanning exemption grant to BssInfo */ - break; - - case ELEM_ID_OBSS_SCAN_PARAMS: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_OBSS_SCAN_PARAM_T) - 2)) { - break; - } - /* Store OBSS parameters to BssInfo */ - prObssScnParam = (P_IE_OBSS_SCAN_PARAM_T) pucIE; - break; - - case ELEM_ID_EXTENDED_CAP: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store extended capability (PSMP, coexist) to BssInfo */ - break; - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) != (sizeof(IE_ERP_T) - 2) || - prBssInfo->eBand != BAND_2G4) { - break; - } - ucERP = ERP_INFO_IE(pucIE)->ucERP; - prBssInfo->fgErpProtectMode = - (ucERP & ERP_INFO_USE_PROTECTION) ? TRUE : FALSE; - - if (ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - -#if CFG_SUPPORT_DFS // Add for DFS support - case ELEM_ID_CH_SW_ANNOUNCEMENT: - { - rlmProcessChannelSwitchIE(prAdapter, (P_IE_CHANNEL_SWITCH_T)pucIE); - } - break; - - #if CFG_SUPPORT_QUIET && 0 - /* Note: RRM code should be moved to independent RRM function by - * component design rule. But we attach it to RLM temporarily - */ - case ELEM_ID_QUIET: - rrmQuietHandleQuietIE(prBssInfo, (P_IE_QUIET_T) pucIE); - fgHasQuietIE = TRUE; - break; - #endif -#endif - - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ - - /* Some AP will have wrong channel number (255) when running time. - * Check if correct channel number information. 20110501 - */ - if ((prBssInfo->eBand == BAND_2G4 && ucPrimaryChannel > 14) || - (prBssInfo->eBand != BAND_2G4 && (ucPrimaryChannel >= 200 || - ucPrimaryChannel <= 14))) { - ucPrimaryChannel = 0; - } - -#if CFG_SUPPORT_QUIET && 0 - if (!fgHasQuietIE) { - rrmQuietIeNotExist(prAdapter, prBssInfo); - } -#endif - - /* Check if OBSS scan process will launch */ - if (!prAdapter->fgEnOnlineScan || !prObssScnParam || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH) || - prBssInfo->eBand != BAND_2G4 || !prBssInfo->fg40mBwAllowed) { - - /* Note: it is ok not to stop rObssScanTimer() here */ - prBssInfo->u2ObssScanInterval = 0; - } - else { - if (prObssScnParam->u2TriggerScanInterval < OBSS_SCAN_MIN_INTERVAL) { - prObssScnParam->u2TriggerScanInterval = OBSS_SCAN_MIN_INTERVAL; - } - if (prBssInfo->u2ObssScanInterval != - prObssScnParam->u2TriggerScanInterval) { - - prBssInfo->u2ObssScanInterval = - prObssScnParam->u2TriggerScanInterval; - - /* Start timer to trigger OBSS scanning */ - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } - } - - return ucPrimaryChannel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset, i; - UINT_8 ucPriChannel, ucSecChannel; - ENUM_CHNL_EXT_T eSCO; - BOOLEAN fgHtBss, fg20mReq; - - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - - /* Record it to channel list to change 20/40 bandwidth */ - ucPriChannel = 0; - eSCO = CHNL_EXT_SCN; - - fgHtBss = FALSE; - fg20mReq = FALSE; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - { - P_IE_HT_CAP_T prHtCap; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - - prHtCap = (P_IE_HT_CAP_T) pucIE; - if (prHtCap->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fg20mReq = TRUE; - } - fgHtBss = TRUE; - break; - } - case ELEM_ID_HT_OP: - { - P_IE_HT_OP_T prHtOp; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPriChannel == 0) { - ucPriChannel = prHtOp->ucPrimaryChannel; - } - - if ((prHtOp->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - eSCO = (ENUM_CHNL_EXT_T) (prHtOp->ucInfo1 & HT_OP_INFO1_SCO); - } - break; - } - case ELEM_ID_20_40_BSS_COEXISTENCE: - { - P_IE_20_40_COEXIST_T prCoexist; - - if (IE_LEN(pucIE) != (sizeof(IE_20_40_COEXIST_T) - 2)) { - break; - } - - prCoexist = (P_IE_20_40_COEXIST_T) pucIE; - if (prCoexist->ucData & BSS_COEXIST_40M_INTOLERANT) { - fg20mReq = TRUE; - } - break; - } - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) != (sizeof(IE_DS_PARAM_SET_T) - 2)) { - break; - } - ucPriChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - break; - - default: - break; - } - } - - - /* To do: Update channel list and 5G band. All channel lists have the same - * update procedure. We should give it the entry pointer of desired - * channel list. - */ - if (HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr) != BAND_2G4) { - return FALSE; - } - - if (ucPriChannel == 0 || ucPriChannel > 14) { - ucPriChannel = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - } - - if (fgHtBss) { - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_PriChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_PriChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_PriChnlList[i] = ucPriChannel; - prBssInfo->auc2G_PriChnlList[0]++; - } - - /* Update secondary channel */ - if (eSCO != CHNL_EXT_SCN) { - ucSecChannel = (eSCO == CHNL_EXT_SCA) ? - (ucPriChannel + 4) : (ucPriChannel - 4); - - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_SecChnlList[i] == ucSecChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_SecChnlList[0])&& (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_SecChnlList[i] = ucSecChannel; - prBssInfo->auc2G_SecChnlList[0]++; - } - } - - /* Update 20M bandwidth request channels */ - if (fg20mReq) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = ucPriChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - } - else { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = ucPriChannel; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - -#if 0 /* SW migration 2010/8/20 */ - /* Note: we shall not update parameters when scanning, otherwise - * channel and bandwidth will not be correct or asserted failure - * during scanning. - * Note: remove channel checking. All received Beacons should be processed - * if measurement or other actions are executed in adjacent channels - * and Beacon content checking mechanism is not disabled. - */ - if (IS_SCAN_ACTIVE() - /* || prBssInfo->ucPrimaryChannel != CHNL_NUM_BY_SWRFB(prSwRfb) */) { - return FALSE; - } -#endif - - /* Handle change of slot time */ - prBssInfo->u2CapInfo = - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->u2CapInfo; - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength); - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgNewParameter; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - fgNewParameter = FALSE; - - /* When concurrent networks exist, GO shall have the same handle as - * the other BSS, so the Beacon shall be procesed for bandwidth and - * protection mechanism. - * Note1: we do not have 2 AP (GO) cases simultaneously now. - * Note2: If we are GO, concurrent AIS AP should detect it and reflect - * action in its Beacon, so AIS STA just follows Beacon from AP. - */ - RLM_NET_FOR_EACH_NO_BOW(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - if (IS_BSS_ACTIVE(prBssInfo)) { - if (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* P2P client or AIS infra STA */ - if (EQUAL_MAC_ADDR(prBssInfo->aucBSSID, - ((P_WLAN_MAC_MGMT_HEADER_T) - (prSwRfb->pvHeader))->aucBSSID)) { - - fgNewParameter = rlmRecBcnInfoForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - else { - fgNewParameter = rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - } - #if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT || - prBssInfo->eCurrentOPMode == OP_MODE_P2P_DEVICE)) { - /* AP scan to check if 20/40M bandwidth is permitted */ - rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - #endif - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - /* To do: Ad-hoc */ - } - - /* Appy new parameters if necessary */ - if (fgNewParameter) { - rlmSyncOperationParams(prAdapter, prBssInfo); - fgNewParameter = FALSE; - } - } /* end of IS_BSS_ACTIVE() */ - } /* end of RLM_NET_FOR_EACH_NO_BOW */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_8 ucPriChannel; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prStaRec == prBssInfo->prStaRecOfAP); - - /* To do: the invoked function is used to clear all members. It may be - * done by center mechanism in invoker. - */ - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - if ((ucPriChannel = - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength)) > 0) { - prBssInfo->ucPrimaryChannel = ucPriChannel; - } - - if (!RLM_NET_IS_11N(prBssInfo) || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - prBssInfo->fg40mBwAllowed = FALSE; - } - - /* Note: Update its capabilities to WTBL by cnmStaRecChangeState(), which - * shall be invoked afterwards. - * Update channel, bandwidth and protection mode by nicUpdateBss() - */ -#if 1 - if(prStaRec->ucNetTypeIndex==NETWORK_TYPE_P2P_INDEX) - { - - DBGLOG(AIS, WARN, ("Force P2P BW to 20\n")); - prBssInfo->fgAssoc40mBwAllowed=FALSE; - } -#endif - - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prCmdBody && prBssInfo); - if (!prCmdBody || !prBssInfo) { - return; - } - - prCmdBody->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prCmdBody->ucRfBand = (UINT_8) prBssInfo->eBand; - prCmdBody->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prBssInfo->eBssSCO; - prCmdBody->ucErpProtectMode = (UINT_8) prBssInfo->fgErpProtectMode; - prCmdBody->ucHtProtectMode = (UINT_8) prBssInfo->eHtProtectMode; - prCmdBody->ucGfOperationMode = (UINT_8) prBssInfo->eGfOperationMode; - prCmdBody->ucTxRifsMode = (UINT_8) prBssInfo->eRifsOperationMode; - prCmdBody->u2HtOpInfo3 = prBssInfo->u2HtOpInfo3; - prCmdBody->u2HtOpInfo2 = prBssInfo->u2HtOpInfo2; - prCmdBody->ucHtOpInfo1 = prBssInfo->ucHtOpInfo1; - prCmdBody->ucUseShortPreamble = prBssInfo->fgUseShortPreamble; - prCmdBody->ucUseShortSlotTime = prBssInfo->fgUseShortSlotTime; - prCmdBody->ucCheckId = 0x72; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - DBGLOG(RLM, INFO, ("N=%d b=%d c=%d s=%d e=%d h=%d I=0x%02x l=%d p=%d\n", - prCmdBody->ucNetTypeIndex, prCmdBody->ucRfBand, - prCmdBody->ucPrimaryChannel, prCmdBody->ucRfSco, - prCmdBody->ucErpProtectMode, prCmdBody->ucHtProtectMode, - prCmdBody->ucHtOpInfo1, prCmdBody->ucUseShortSlotTime, - prCmdBody->ucUseShortPreamble)); - } - else { - DBGLOG(RLM, INFO, ("N=%d closed\n", prCmdBody->ucNetTypeIndex)); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will operation parameters based on situations of -* concurrent networks. Channel, bandwidth, protection mode, supported -* rate will be modified. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - prCmdBody = (P_CMD_SET_BSS_RLM_PARAM_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_BSS_RLM_PARAM_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(RLM, WARN, ("No buf for sync RLM params (Net=%d)\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmFillSyncCmdParam(prCmdBody, prBssInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_BSS_RLM_PARAM, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_BSS_RLM_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); -} - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - P_IE_HT_CAP_T prHtCap; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ -} -#endif /* CFG_SUPPORT_AAA */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - rlmBssInitForAP(prAdapter, prBssInfo); - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - - /* Assume FW state is updated by CMD_ID_SET_BSS_INFO, so - * the sync CMD is not needed here. - */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief All RLM timers will also be stopped. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - /* HT related parameters */ - prBssInfo->ucHtOpInfo1 = 0; /* RIFS disabled. 20MHz */ - prBssInfo->u2HtOpInfo2 = 0; - prBssInfo->u2HtOpInfo3 = 0; - - prBssInfo->eBssSCO = 0; - prBssInfo->fgErpProtectMode = 0; - prBssInfo->eHtProtectMode = 0; - prBssInfo->eGfOperationMode = 0; - prBssInfo->eRifsOperationMode = 0; - - /* OBSS related parameters */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - /* All RLM timers will also be stopped */ - cnmTimerStopTimer(prAdapter, &prBssInfo->rObssScanTimer); - prBssInfo->u2ObssScanInterval = 0; - - prBssInfo->fgObssErpProtectMode = 0; /* GO only */ - prBssInfo->eObssHtProtectMode = 0; /* GO only */ - prBssInfo->eObssGfOperationMode = 0; /* GO only */ - prBssInfo->fgObssRifsOperationMode = 0; /* GO only */ - prBssInfo->fgObssActionForcedTo20M = 0; /* GO only */ - prBssInfo->fgObssBeaconForcedTo20M = 0; /* GO only */ -} - -#if CFG_SUPPORT_DFS // Add for DFS support -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handle spectrum management action frame -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessSpecMgtAction( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_CHANNEL_SWITCH_FRAME prRxFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - printk("[5G DFS]rlmProcessSpecMgtAction \r\n"); - - prRxFrame = (P_ACTION_CHANNEL_SWITCH_FRAME) prSwRfb->pvHeader; - printk("[5G DFS]prRxFrame->ucAction[%d] \r\n", prRxFrame->ucAction); - if (prRxFrame->ucAction == ACTION_CHNL_SWITCH) { - rlmProcessChannelSwitchIE(prAdapter, prRxFrame->aucInfoElem); - } - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function process Channel Switch IE -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessChannelSwitchIE( - P_ADAPTER_T prAdapter, - P_IE_CHANNEL_SWITCH_T prChannelSwitchIE - ) -{ - - ASSERT(prAdapter); - ASSERT(prChannelSwitchIE); - P_BSS_INFO_T prAisBssInfo; - - printk("[5G DFS] rlmProcessChannelSwitchIE \r\n"); - printk("[5G DFS] ucChannelSwitchMode[%d], ucChannelSwitchCount[%d], ucNewChannelNum[%d] \r\n", \ - prChannelSwitchIE->ucChannelSwitchMode, \ - prChannelSwitchIE->ucChannelSwitchCount, \ - prChannelSwitchIE->ucNewChannelNum); - if(prChannelSwitchIE->ucChannelSwitchMode == 1){ - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - printk("[5G DFS] switch channel [%d]->[%d] \r\n", prAisBssInfo->ucPrimaryChannel, prChannelSwitchIE->ucNewChannelNum); - prAisBssInfo->ucPrimaryChannel = prChannelSwitchIE->ucNewChannelNum; - nicUpdateBss(prAdapter, prAisBssInfo->ucNetTypeIndex); - } - - return; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_domain.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_domain.c deleted file mode 100755 index b5f34388469b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_domain.c +++ /dev/null @@ -1,681 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_domain.c#1 $ -*/ - -/*! \file "rlm_domain.c" - \brief - -*/ - - - -/* -** $Log: rlm_domain.c $ - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 23 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Let channel number to zero if band is illegal - * - * 09 22 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Exclude channel list with illegal band - * - * 09 15 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use defined country group to have a change to add new group - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 02 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export rlmDomainGetDomainInfo for p2p driver. - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Filter out not supported RF freq when reporting available chnl list - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* The following country or domain shall be set from host driver. - * And host driver should pass specified DOMAIN_INFO_ENTRY to MT6620 as - * the channel list of being a STA to do scanning/searching AP or being an - * AP to choose an adequate channel if auto-channel is set. - */ - -/* Define mapping tables between country code and its channel set - */ -static const UINT_16 g_u2CountryGroup0[] = -{ - COUNTRY_CODE_US, COUNTRY_CODE_BS, COUNTRY_CODE_BB, COUNTRY_CODE_BO, COUNTRY_CODE_DM, - COUNTRY_CODE_DO, COUNTRY_CODE_HT, COUNTRY_CODE_PR, COUNTRY_CODE_TH, COUNTRY_CODE_TW, - COUNTRY_CODE_AI, COUNTRY_CODE_AG, COUNTRY_CODE_AW, COUNTRY_CODE_BM, COUNTRY_CODE_CU, - COUNTRY_CODE_GD, COUNTRY_CODE_GY, COUNTRY_CODE_JM, COUNTRY_CODE_KN, COUNTRY_CODE_LC, - COUNTRY_CODE_VC, COUNTRY_CODE_TT, COUNTRY_CODE_SR -}; -static const UINT_16 g_u2CountryGroup1[] = -{ - COUNTRY_CODE_BR, COUNTRY_CODE_EC, COUNTRY_CODE_HK, COUNTRY_CODE_MX, COUNTRY_CODE_PE, - COUNTRY_CODE_CR, COUNTRY_CODE_MD, COUNTRY_CODE_NI, COUNTRY_CODE_PZ -}; -static const UINT_16 g_u2CountryGroup2[] = {COUNTRY_CODE_CO, COUNTRY_CODE_PY}; -static const UINT_16 g_u2CountryGroup3[] = {COUNTRY_CODE_JP}; -static const UINT_16 g_u2CountryGroup4[] = -{ - COUNTRY_CODE_CN, COUNTRY_CODE_UY, COUNTRY_CODE_MA -}; -static const UINT_16 g_u2CountryGroup5[] = {COUNTRY_CODE_AR}; -static const UINT_16 g_u2CountryGroup6[] = {COUNTRY_CODE_AU, COUNTRY_CODE_NZ}; -static const UINT_16 g_u2CountryGroup7[] = {COUNTRY_CODE_RU}; -static const UINT_16 g_u2CountryGroup8[] = -{ - COUNTRY_CODE_ID, COUNTRY_CODE_HN, COUNTRY_CODE_PG, COUNTRY_CODE_PK -}; -static const UINT_16 g_u2CountryGroup9[] = {COUNTRY_CODE_CA}; -static const UINT_16 g_u2CountryGroup10[] = -{ - COUNTRY_CODE_CL, COUNTRY_CODE_IN, COUNTRY_CODE_SA, COUNTRY_CODE_SG, COUNTRY_CODE_VE, - COUNTRY_CODE_MY, COUNTRY_CODE_VN, COUNTRY_CODE_EG -}; -static const UINT_16 g_u2CountryGroup11[] = {COUNTRY_CODE_IL, COUNTRY_CODE_UA}; -static const UINT_16 g_u2CountryGroup12[] = {COUNTRY_CODE_JO, COUNTRY_CODE_KW}; -static const UINT_16 g_u2CountryGroup13[] = {COUNTRY_CODE_KR, COUNTRY_CODE_OM}; -static const UINT_16 g_u2CountryGroup14[] = -{ - COUNTRY_CODE_EU - /* When country code is not found, this domain info will be used. - * So mark all country codes to reduce search time. 20110908 - */ - /*, COUNTRY_CODE_PH, COUNTRY_CODE_TR, COUNTRY_CODE_IR, COUNTRY_CODE_BY, - COUNTRY_CODE_LK */ -}; - - -DOMAIN_INFO_ENTRY arSupportedRegDomains[] = { - { - (PUINT_16) g_u2CountryGroup0, sizeof(g_u2CountryGroup0) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup1, sizeof(g_u2CountryGroup1) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup2, sizeof(g_u2CountryGroup2) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup3, sizeof(g_u2CountryGroup3) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_14 */ - { 82, BAND_2G4, CHNL_SPAN_5, 14, 1, FALSE }, - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE } /* CH_SET_UNII_UPPER_NA */ - } - }, - { - (PUINT_16) g_u2CountryGroup4, sizeof(g_u2CountryGroup4) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup5, sizeof(g_u2CountryGroup5) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup6, sizeof(g_u2CountryGroup6) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup7, sizeof(g_u2CountryGroup7) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup8, sizeof(g_u2CountryGroup8) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup9, sizeof(g_u2CountryGroup9) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 5, FALSE }, /* CH_SET_UNII_WW_100_116_132_140 */ - { 121, BAND_5G, CHNL_SPAN_20, 132, 5, FALSE }, - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - } - }, - { - (PUINT_16) g_u2CountryGroup10, sizeof(g_u2CountryGroup10) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup11, sizeof(g_u2CountryGroup11) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup12, sizeof(g_u2CountryGroup12) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup13, sizeof(g_u2CountryGroup13) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 8, FALSE }, /* CH_SET_UNII_WW_100_128 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - /* Note: The final one is for Europe union now. */ - (PUINT_16) g_u2CountryGroup14, sizeof(g_u2CountryGroup14) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 7, FALSE }, /* CH_SET_UNII_UPPER_149_173 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - } -}; - -#if 0 -COUNTRY_CH_SET_T arCountryChSets[] = { - /* idx=0: US, Bahamas, Barbados, Bolivia(Voluntary), Dominica (the Commonwealth of Dominica), - The Dominican Republic, Haiti */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=1: Brazil, Ecuador, Hong Kong, Mexico, Peru */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=2: JP1, Colombia(Voluntary), Paraguay */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=3: JP2 */ - {CH_SET_2G4_1_14, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=4: CN, Uruguay, Morocco */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=5: Argentina */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=6: Australia, New Zealand */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=7: Russia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=8: Indonesia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_161}, - /* idx=9: Canada */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_116_132_140, CH_SET_UNII_UPPER_149_165}, - /* idx=10: Chile, India, Saudi Arabia, Singapore */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=11: Israel, Ukraine */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=12: Jordan, Kuwait */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=13: South Korea */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_128, CH_SET_UNII_UPPER_149_165}, - /* idx=14: Taiwan */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=15: EU all countries */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_173} -}; -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ) -{ -#define REG_DOMAIN_DEF_IDX 14 /* EU (Europe Union) */ -#define REG_DOMAIN_GROUP_NUM \ - (sizeof(arSupportedRegDomains) / sizeof(DOMAIN_INFO_ENTRY)) - - UINT_16 i, j; - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_REG_INFO_T prRegInfo; - UINT_16 u2TargetCountryCode; - - ASSERT(prAdapter); - - if (prAdapter->prDomainInfo) { - return prAdapter->prDomainInfo; - } - - prRegInfo = &prAdapter->prGlueInfo->rRegInfo; - - DBGLOG(RLM, INFO, ("Domain: map=%d, idx=%d, code=0x%04x\n", - prRegInfo->eRegChannelListMap, prRegInfo->ucRegChannelListIndex, - prAdapter->rWifiVar.rConnSettings.u2CountryCode)); - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_TBL_IDX && - prRegInfo->ucRegChannelListIndex < REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[prRegInfo->ucRegChannelListIndex]; - goto L_set_domain_info; - } - else if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - prDomainInfo = &prRegInfo->rDomainInfo; - goto L_set_domain_info; - } - - u2TargetCountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - - /* If no matched country code, the final one will be used - * The final one is for Europe union now. - */ - for (i = 0; i < REG_DOMAIN_GROUP_NUM; i++) { - prDomainInfo = &arSupportedRegDomains[i]; - - ASSERT((prDomainInfo->u4CountryNum && prDomainInfo->pu2CountryGroup) || - prDomainInfo->u4CountryNum == 0); - - for (j = 0; j < prDomainInfo->u4CountryNum; j++) { - if (prDomainInfo->pu2CountryGroup[j] == u2TargetCountryCode) { - break; - } - } - if (j < prDomainInfo->u4CountryNum) { - break; /* Found */ - } - } - - DATA_STRUC_INSPECTING_ASSERT(REG_DOMAIN_DEF_IDX < REG_DOMAIN_GROUP_NUM); - - if (i >= REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[REG_DOMAIN_DEF_IDX]; - } - -L_set_domain_info: - - prAdapter->prDomainInfo = prDomainInfo; - return prDomainInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] The input variable pointed by pucNumOfChannel is the max -* arrary size. The return value indciates meaning list size. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - UINT_8 i, j, ucNum; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - ASSERT(prAdapter); - ASSERT(paucChannelList); - ASSERT(pucNumOfChannel); - - /* If no matched country code, the final one will be used */ - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - ucNum = 0; - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_NULL || prSubband->ucBand >= BAND_NUM || - (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand)) { - continue; - } - - if (eSpecificBand == BAND_NULL || prSubband->ucBand == eSpecificBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if (ucNum >= ucMaxChannelNum) { - break; - } - paucChannelList[ucNum].eBand = prSubband->ucBand; - paucChannelList[ucNum].ucChannelNum = - prSubband->ucFirstChannelNum + j * prSubband->ucChannelSpan; - ucNum++; - } - } - } - - *pucNumOfChannel = ucNum; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ) -{ - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_CMD_SET_DOMAIN_INFO_T prCmd; - WLAN_STATUS rStatus; - UINT_8 i; - P_DOMAIN_SUBBAND_INFO prSubBand; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_DOMAIN_INFO_T)); - ASSERT(prCmd); - - /* To do: exception handle */ - if (!prCmd) { - DBGLOG(RLM, ERROR, ("Domain: no buf to send cmd\n")); - return; - } - kalMemZero(prCmd, sizeof(CMD_SET_DOMAIN_INFO_T)); - - prCmd->u2CountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - prCmd->u2Reserved = 0; - prCmd->uc2G4Bandwidth = - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode; - prCmd->uc5GBandwidth = - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode; - - for (i = 0; i < 6; i++) { - prSubBand = &prDomainInfo->rSubBand[i]; - - prCmd->rSubBand[i].ucRegClass = prSubBand->ucRegClass; - prCmd->rSubBand[i].ucBand = prSubBand->ucBand; - - if (prSubBand->ucBand != BAND_NULL && prSubBand->ucBand < BAND_NUM) { - prCmd->rSubBand[i].ucChannelSpan = prSubBand->ucChannelSpan; - prCmd->rSubBand[i].ucFirstChannelNum = prSubBand->ucFirstChannelNum; - prCmd->rSubBand[i].ucNumChannels = prSubBand->ucNumChannels; - } - } - - /* Update domain info to chip */ - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_DOMAIN_INFO, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - fgIsOid, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_DOMAIN_INFO_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmd, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmd); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return TRUE Legal channel -* FALSE Illegal channel for current regulatory domain -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ) -{ - UINT_8 i, j; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand) { - continue; - } - - if (prSubband->ucBand == eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == ucChannel) { - return TRUE; - } - } - } - } - - return FALSE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_obss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_obss.c deleted file mode 100755 index 143d72104a24..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_obss.c +++ /dev/null @@ -1,461 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_obss.c#2 $ -*/ - -/*! \file "rlm_obss.c" - \brief - -*/ - - - -/* -** $Log: rlm_obss.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Avoid possible OBSS scan when BSS is switched - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Regulation class is changed to 81 in 20_40_coexistence action frame - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add more ASSERT to check exception - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - cnmTimerInitTimer(prAdapter, &prBssInfo->rObssScanTimer, - rlmObssScanTimeout, (UINT_32) prBssInfo); - } /* end of RLM_NET_FOR_EACH */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmObssUpdateChnlLists ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - UINT_16 i, u2PayloadLen; - - ASSERT(prMsgHdr); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prScanDoneMsg->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(RLM, INFO, ("OBSS Scan Done (NetIdx=%d, Mode=%d)\n", - prScanDoneMsg->ucNetTypeIndex, prBssInfo->eCurrentOPMode)); - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_ENABLE_WIFI_DIRECT - /* AP mode */ - if ((prAdapter->fgIsP2PRegistered) && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex)) && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - return; - } -#endif - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan Done (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - /* To do: check 2.4G channel list to decide if obss mgmt should be - * sent to associated AP. Note: how to handle concurrent network? - * To do: invoke rlmObssChnlLevel() to decide if 20/40 BSS coexistence - * management frame is needed. - */ - if ((prBssInfo->auc2G_20mReqChnlList[0] > 0 || - prBssInfo->auc2G_NonHtChnlList[0] > 0) && - (prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN)) != NULL) { - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence mgmt(20mReq=%d, NonHt=%d)\n", - prBssInfo->auc2G_20mReqChnlList[0], - prBssInfo->auc2G_NonHtChnlList[0])); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = - (prBssInfo->auc2G_20mReqChnlList[0] > 0) ? BSS_COEXIST_20M_REQ : 0; - - u2PayloadLen = 2 + 3; - - if (prBssInfo->auc2G_NonHtChnlList[0] > 0) { - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - - prTxFrame->rChnlReport.ucId = ELEM_ID_20_40_INTOLERANT_CHNL_REPORT; - prTxFrame->rChnlReport.ucLength = - prBssInfo->auc2G_NonHtChnlList[0] + 1; - prTxFrame->rChnlReport.ucRegulatoryClass = 81; /* 2.4GHz, ch1~13 */ - for (i = 0; i < prBssInfo->auc2G_NonHtChnlList[0] && - i < CHNL_LIST_SZ_2G; i++) { - prTxFrame->rChnlReport.aucChannelList[i] = - prBssInfo->auc2G_NonHtChnlList[i+1]; - } - - u2PayloadLen += IE_SIZE(&prTxFrame->rChnlReport); - } - ASSERT((WLAN_MAC_HEADER_LEN + u2PayloadLen) <= PUBLIC_ACTION_MAX_LEN); - - /* Clear up channel lists in 2.4G band */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - } /* end of prMsduInfo != NULL */ - - if (prBssInfo->u2ObssScanInterval > 0) { - DBGLOG(RLM, INFO, ("Set OBSS timer (NetIdx=%d, %d sec)\n", - prBssInfo->ucNetTypeIndex, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = (P_BSS_INFO_T) u4Data; - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - /* AP mode */ - if (prAdapter->fgIsP2PRegistered && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex)) && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - - prBssInfo->fgObssActionForcedTo20M = FALSE; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - - return; - } -#endif /* end of CFG_ENABLE_WIFI_DIRECT */ - - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan timeout (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmObssTriggerScan(prAdapter, prBssInfo); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_MSG_SCN_SCAN_REQ prScanReqMsg; - - ASSERT(prBssInfo); - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - ASSERT(prScanReqMsg); - - if (!prScanReqMsg) { - DBGLOG(RLM, WARN, ("No buf for OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - return; - } - - /* It is ok that ucSeqNum is set to fixed value because the same network - * OBSS scan interval is limited to OBSS_SCAN_MIN_INTERVAL (min 10 sec) - * and scan module don't care seqNum of OBSS scanning - */ - prScanReqMsg->rMsgHdr.eMsgId = MID_RLM_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = 0x33; - prScanReqMsg->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - prScanReqMsg->ucSSIDLength = 0; - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - prScanReqMsg->u2IELen = 0; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - DBGLOG(RLM, INFO, ("Timeout to trigger OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_protection.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_protection.c deleted file mode 100755 index 27ffda023bf8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rlm_protection.c +++ /dev/null @@ -1,108 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_protection.c#1 $ -*/ - -/*! \file "rlm_protection.c" - \brief - -*/ - - - -/* -** $Log: rlm_protection.c $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 03 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RTS threshold temporarily for AMPDU - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/roaming_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/roaming_fsm.c deleted file mode 100755 index c941873eb8f3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/roaming_fsm.c +++ /dev/null @@ -1,583 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.c" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - - - -/* -** $Log: roaming_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_ROAMING -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugRoamingState[ROAMING_STATE_NUM] = { - (PUINT_8)DISP_STRING("ROAMING_STATE_IDLE"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DECISION"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DISCOVERY"), - (PUINT_8)DISP_STRING("ROAMING_STATE_ROAM") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define ROAMING_ENABLE_CHECK(_roam) \ - { \ - if (!(_roam->fgIsEnableRoaming)) {return;} \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the value in ROAMING_FSM_INFO_T for ROAMING FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmInit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Initiate FSM - prRoamingFsmInfo->fgIsEnableRoaming = prConnSettings->fgIsEnableRoaming; - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - prRoamingFsmInfo->rRoamingDiscoveryUpdateTime = 0; - - return; -} /* end of roamingFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the value in AIS_FSM_INFO_T for AIS FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmUninit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - - return; -} /* end of roamingFsmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send commands to firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - WLAN_STATUS rStatus; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmSendCmd(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_ROAMING_TRANSIT, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(ROAMING_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prParam, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} /* end of roamingFsmSendCmd() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the recent time when ScanDone occurred -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, LOUD, ("->roamingFsmScanResultsUpdate(): Current Time = %ld\n", kalGetTimeTick())); - - GET_CURRENT_SYSTIME(&prRoamingFsmInfo->rRoamingDiscoveryUpdateTime); - - return; -} /* end of roamingFsmScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of ROAMING for AIS Infra. -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN ENUM_ROAMING_STATE_T] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T ePreviousState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - do { - - /* Do entering Next State */ -#if DBG - DBGLOG(ROAMING, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugRoamingState[prRoamingFsmInfo->eCurrentState], - apucDebugRoamingState[eNextState])); -#else - DBGLOG(ROAMING, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_ROAMING_IDX, - prRoamingFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - ePreviousState = prRoamingFsmInfo->eCurrentState; - prRoamingFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prRoamingFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case ROAMING_STATE_IDLE: - case ROAMING_STATE_DECISION: - break; - - case ROAMING_STATE_DISCOVERY: - { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prRoamingFsmInfo->rRoamingDiscoveryUpdateTime, - SEC_TO_SYSTIME(ROAMING_DISCOVERY_TIMEOUT_SEC))) { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Timeout")); - aisFsmRunEventRoamingDiscovery(prAdapter, TRUE); - } - else { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Updated")); - aisFsmRunEventRoamingDiscovery(prAdapter, FALSE); - } - } - break; - - case ROAMING_STATE_ROAM: - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - } - } - while (fgIsTransition); - - return; - -} /* end of roamingFsmSteps() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state after join completion -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - if (prAisBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - return; - } - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING START: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as DECISION, DISCOVERY -> DECISION */ - if (!(prRoamingFsmInfo->eCurrentState == ROAMING_STATE_IDLE - || prRoamingFsmInfo->eCurrentState == ROAMING_STATE_ROAM)) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_START; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventStart() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Discovery state when deciding to find a candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING DISCOVERY: Current Time = %ld\n", kalGetTimeTick())); - - /* DECISION -> DISCOVERY */ - /* Errors as IDLE, DISCOVERY, ROAM -> DISCOVERY */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DECISION) { - return; - } - - eNextState = ROAMING_STATE_DISCOVERY; - /* DECISION -> DISCOVERY */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - - // sync. rcpi with firmware - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - if (prBssDesc) { - prBssDesc->ucRCPI = (UINT_8)(u4Param&0xff); - } - - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Roam state after Scan Done -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ROAM: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, ROAM -> ROAM */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DISCOVERY) { - return; - } - - eNextState = ROAMING_STATE_ROAM; - /* DISCOVERY -> ROAM */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ROAM; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventRoam() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state as being failed to find out any candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING FAIL: reason %x Current Time = %ld\n", u4Param, kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, DISCOVERY -> DECISION */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_ROAM) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - /* ROAM -> DECISION */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_FAIL; - rParam.u2Data = (UINT_16)(u4Param&0xffff); - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventFail() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Idle state as beging aborted by other moduels, AIS -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ABORT: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = ROAMING_STATE_IDLE; - /* IDLE, DECISION, DISCOVERY, ROAM -> IDLE */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ABORT; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventAbort() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process events from firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - DBGLOG(ROAMING, LOUD, ("ROAMING Process Events: Current Time = %ld\n", kalGetTimeTick())); - - if (ROAMING_EVENT_DISCOVERY == prParam->u2Event) { - roamingFsmRunEventDiscovery(prAdapter, prParam->u2Data); - } - - return WLAN_STATUS_SUCCESS; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rsn.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rsn.c deleted file mode 100755 index 738e007f0225..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/rsn.c +++ /dev/null @@ -1,2682 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rsn.c#2 $ -*/ - -/*! \file "rsn.c" - \brief This file including the 802.11i, wpa and wpa2(rsn) related function. - - This file provided the macros and functions library support the wpa/rsn ie parsing, - cipher and AKM check to help the AP seleced deciding, tkip mic error handler and rsn PMKID support. -*/ - - - -/* -** $Log: rsn.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 09 2012 chinglan.wang - * NULL - * Fix the condition error. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 12 24 2010 chinglan.wang - * NULL - * [MT6620][Wi-Fi] Modify the key management in the driver for WPS function. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 yuche.tsai - * NULL - * Fix compile error, remove unused pointer in rsnGenerateRSNIE(). - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * [WPD00003840] [MT6620 5931] Security migration - * migration from firmware. - * - * 05 27 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * not indiate pmkid candidate while no new one scaned. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the name - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * using the Rx0 port to indicate event - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code for generate the WPA/RSN IE for assoc req - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust code for pmkid event - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for event (mic error and pmkid indicate) and do some function rename - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security feature, including pmkid - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -//extern PHY_ATTRIBUTE_T rPhyAttributes[]; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse RSN IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** RSN information from the given RSN IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseRsnIE ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ) -{ - UINT_32 i; - INT_32 u4RemainRsnIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = RSN_CIPHER_SUITE_CCMP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUINT_8 pucPairSuite = NULL; - PUINT_8 pucAuthSuite = NULL; - PUINT_8 cp; - - DEBUGFUNC("rsnParseRsnIE"); - - ASSERT(prInfoElem); - ASSERT(prRsnInfo); - - /* Verify the length of the RSN IE. */ - if (prInfoElem->ucLength < 2) { - DBGLOG(RSN, TRACE, ("RSN IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check RSN version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE,("Unsupported RSN IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainRsnIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainRsnIeLen < 4) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainRsnIeLen -= 4; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the RSN u2Capabilities field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in RSN capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - } while (FALSE); - - /* Save the RSN information for the BSS. */ - prRsnInfo->ucElemId = ELEM_ID_RSN; - - prRsnInfo->u2Version = u2Version; - - prRsnInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("RSN: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prRsnInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prRsnInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for RSN: CCMP. */ - prRsnInfo->u4PairwiseKeyCipherSuiteCount = 1; - prRsnInfo->au4PairwiseKeyCipherSuite[0] = RSN_CIPHER_SUITE_CCMP; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prRsnInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prRsnInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for RSN. */ - prRsnInfo->u4AuthKeyMgtSuiteCount = 1; - prRsnInfo->au4AuthKeyMgtSuite[0] = RSN_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prRsnInfo->u2RsnCap = u2Cap; -#if CFG_SUPPORT_802_11W - prRsnInfo->fgRsnCapPresent = TRUE; -#endif - DBGLOG(RSN, LOUD, ("RSN cap: 0x%04x\n", prRsnInfo->u2RsnCap)); - - return TRUE; -} /* rsnParseRsnIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WPA IE. -* -* \param[in] prInfoElem Pointer to the WPA IE. -* \param[out] prWpaInfo Pointer to the BSSDescription structure to store the -* WPA information from the given WPA IE. -* -* \retval TRUE Succeeded. -* \retval FALSE Failed. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseWpaIE ( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWpaIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WPA_CIPHER_SUITE_TKIP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - BOOLEAN fgCapPresent = FALSE; - - DEBUGFUNC("rsnParseWpaIE"); - - ASSERT(prInfoElem); - ASSERT(prWpaInfo); - - /* Verify the length of the WPA IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(RSN, TRACE,("WPA IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WPA version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE, ("Unsupported WPA IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainWpaIeLen = (INT_32) prInfoElem->ucLength - 6; - - do { - if (u4RemainWpaIeLen == 0) { - break; - } - - /* WPA_OUI : 4 - Version : 2 - GroupSuite : 4 - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - Cap : 2 */ - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWpaIeLen < 4) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWpaIeLen -= 4; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the WPA u2Capabilities field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in WPA capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - fgCapPresent = TRUE; - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWpaIeLen -= 2; - } while (FALSE); - - /* Save the WPA information for the BSS. */ - - prWpaInfo->ucElemId = ELEM_ID_WPA; - - prWpaInfo->u2Version = u2Version; - - prWpaInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("WPA: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prWpaInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWpaInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WPA: TKIP. */ - prWpaInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWpaInfo->au4PairwiseKeyCipherSuite[0] = WPA_CIPHER_SUITE_TKIP; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prWpaInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWpaInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WPA. */ - prWpaInfo->u4AuthKeyMgtSuiteCount = 1; - prWpaInfo->au4AuthKeyMgtSuite[0] = WPA_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - if (fgCapPresent) { - prWpaInfo->fgRsnCapPresent = TRUE; - prWpaInfo->u2RsnCap = u2Cap; - DBGLOG(RSN, LOUD, ("WPA: RSN cap: 0x%04x\n", prWpaInfo->u2RsnCap)); - } - else { - prWpaInfo->fgRsnCapPresent = FALSE; - prWpaInfo->u2RsnCap = 0; - } - - return TRUE; -} /* rsnParseWpaIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired pairwise -* cipher suite from the MIB Pairwise Cipher Suite -* configuration table. -* -* \param[in] u4Cipher The desired pairwise cipher suite to be searched -* \param[out] pu4Index Pointer to the index of the desired pairwise cipher in -* the table -* -* \retval TRUE - The desired pairwise cipher suite is found in the table. -* \retval FALSE - The desired pairwise cipher suite is not found in the -* table. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchSupportedCipher ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - - DEBUGFUNC("rsnSearchSupportedCipher"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i]; - if (prEntry->dot11RSNAConfigPairwiseCipher == u4Cipher && - prEntry->dot11RSNAConfigPairwiseCipherEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchSupportedCipher */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether BSS RSN is matched from upper layer set. -* -* \param[in] prAdapter Pointer to the Adapter structure, BSS RSN Information -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnIsSuitableBSS ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_T prBssRsnInfo - ) -{ - UINT_8 i = 0; - - DEBUGFUNC("rsnIsSuitableBSS"); - - do{ - - if((prAdapter->rWifiVar.rConnSettings.rRsnInfo.u4GroupKeyCipherSuite & 0x000000FF) != \ - GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite)){ - DBGLOG(RSN, TRACE, ("Break by GroupKeyCipherSuite\n")); - break; - } - for(i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++){ - if(((prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4PairwiseKeyCipherSuite[0] & 0x000000FF) != \ - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i])) - && (i == prBssRsnInfo->u4PairwiseKeyCipherSuiteCount - 1) ){ - DBGLOG(RSN, TRACE, ("Break by PairwiseKeyCipherSuite\n")); - break; - } - } - for(i = 0; i < prBssRsnInfo->u4AuthKeyMgtSuiteCount; i++){ - if(((prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4AuthKeyMgtSuite[0] & 0x000000FF) != \ - GET_SELECTOR_TYPE(prBssRsnInfo->au4AuthKeyMgtSuite[0])) - && (i == prBssRsnInfo->u4AuthKeyMgtSuiteCount - 1)){ - DBGLOG(RSN, TRACE, ("Break by AuthKeyMgtSuite \n")); - break; - } - } - return TRUE; - }while(FALSE); - return FALSE; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to search the desired -* authentication and key management (AKM) suite from the -* MIB Authentication and Key Management Suites table. -* -* \param[in] u4AkmSuite The desired AKM suite to be searched -* \param[out] pu4Index Pointer to the index of the desired AKM suite in the -* table -* -* \retval TRUE The desired AKM suite is found in the table. -* \retval FALSE The desired AKM suite is not found in the table. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchAKMSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("rsnSearchAKMSuite"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite && - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchAKMSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform RSNA or TSN policy -* selection for a given BSS. -* -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The RSNA/TSN policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The RSNA/TSN policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ -#if CFG_SUPPORT_802_11W - INT_32 i; - UINT_32 j; -#else - UINT_32 i, j; -#endif - BOOLEAN fgSuiteSupported; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_RSN_INFO_T prBssRsnInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetwotkType; - BOOLEAN fgIsWpsActive = (BOOLEAN)FALSE; - - DEBUGFUNC("rsnPerformPolicySelection"); - - ASSERT(prBss); - - DBGLOG(RSN, TRACE, ("rsnPerformPolicySelection\n")); - //Todo:: - eNetwotkType = NETWORK_TYPE_AIS_INDEX; - - prBss->u4RsnSelectedPairwiseCipher = 0; - prBss->u4RsnSelectedGroupCipher = 0; - prBss->u4RsnSelectedAKMSuite = 0; - prBss->ucEncLevel = 0; - -#if CFG_SUPPORT_WPS - fgIsWpsActive = kalWSCGetActiveState(prAdapter->prGlueInfo); - - /* CR1640, disable the AP select privacy check */ - if ( fgIsWpsActive && - (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) && - (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA)) { - DBGLOG(RSN, TRACE,("-- Skip the Protected BSS check\n")); - return TRUE; - } -#endif - - /* Protection is not required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) == 0 ) { - - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - /* Protection is required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) != 0) { - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - - if (prBss->fgIEWPA) { - prBssRsnInfo = &prBss->rWPAInfo; - } - else { - DBGLOG(RSN, TRACE, ("WPA Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2 || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK) { - - if (prBss->fgIERSN) { - prBssRsnInfo = &prBss->rRSNInfo; - } - else { - DBGLOG(RSN, TRACE, ("RSN Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus != ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, ignore this BSS. */ - DBGLOG(RSN, TRACE, ("-- Not WEP-only legacy BSS\n")); - return FALSE; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, use this BSS. */ - DBGLOG(RSN, TRACE, ("-- WEP-only legacy BSS\n")); - return TRUE; - } - - if(!rsnIsSuitableBSS(prAdapter, prBssRsnInfo)) - { - DBGLOG(RSN, TRACE, ("RSN info check no matched\n")); - return FALSE; - } - - if (prBssRsnInfo->u4PairwiseKeyCipherSuiteCount == 1 && - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[0]) == - CIPHER_SUITE_NONE) { - /* Since the pairwise cipher use the same cipher suite as the group - cipher in the BSS, we check the group cipher suite against the - current encryption status. */ - fgSuiteSupported = FALSE; - - switch (prBssRsnInfo->u4GroupKeyCipherSuite) { - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION3_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION2_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_WEP40: - case WPA_CIPHER_SUITE_WEP104: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION1_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - } - - if (fgSuiteSupported) { - u4PairwiseCipher = WPA_CIPHER_SUITE_NONE; - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } -#if DBG - else { - DBGLOG(RSN, TRACE, ("Inproper encryption status %d for group-key-only BSS\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } -#endif - } - else { - fgSuiteSupported = FALSE; - - DBGLOG(RSN, TRACE, ("eEncStatus %d %d 0x%x\n", prAdapter->rWifiVar.rConnSettings.eEncStatus, - prBssRsnInfo->u4PairwiseKeyCipherSuiteCount, - prBssRsnInfo->au4PairwiseKeyCipherSuite[0])); - /* Select pairwise/group ciphers */ - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) - { - case ENUM_ENCRYPTION3_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_CCMP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - break; - - case ENUM_ENCRYPTION2_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_TKIP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP104) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP || - GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_TKIP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP/TKIP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - default: - break; - } - } - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (eNetwotkType == NETWORK_TYPE_P2P_INDEX)) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for P2P network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (eNetwotkType == NETWORK_TYPE_BOW_INDEX) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - } - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for BT over Wi-Fi network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } -#endif - - - /* Verify if selected pairwisse cipher is supported */ - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4PairwiseCipher, &i); - - /* Verify if selected group cipher is supported */ - if (fgSuiteSupported) { - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4GroupCipher, &i); - } - - if (!fgSuiteSupported) { - DBGLOG(RSN, TRACE, ("Failed to support selected pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ -#if CFG_SUPPORT_802_11W - if (i != 0) - for (i = (prBssRsnInfo->u4AuthKeyMgtSuiteCount - 1); i >= 0; i--) -#else - for (i = 0; i < prBssRsnInfo->u4AuthKeyMgtSuiteCount; i++) -#endif - { - if (rsnSearchAKMSuite(prAdapter, - prBssRsnInfo->au4AuthKeyMgtSuite[i], - &j)) { - u4AkmSuite = prBssRsnInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(RSN, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(RSN, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(RSN, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - -#if CFG_SUPPORT_802_11W - DBGLOG(RSN, TRACE, ("MFP setting = %d\n ", kalGetMfpSetting(prAdapter->prGlueInfo))); - - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - if (!prBssRsnInfo->fgRsnCapPresent) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability.\n")); - return FALSE; - } - else if (!(prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - if (prBssRsnInfo->u2RsnCap && ((prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR) || - (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC))) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - } - else { - if (prBssRsnInfo->fgRsnCapPresent && (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - DBGLOG(RSN, TRACE, ("fgMgmtProtection = %d\n ", prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection)); -#endif - - if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_CCMP){ - prBss->ucEncLevel = 3; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_TKIP){ - prBss->ucEncLevel = 2; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP104) { - prBss->ucEncLevel = 1; - } - else { - ASSERT(FALSE); - } - prBss->u4RsnSelectedPairwiseCipher = u4PairwiseCipher; - prBss->u4RsnSelectedGroupCipher = u4GroupCipher; - prBss->u4RsnSelectedAKMSuite = u4AkmSuite; - - return TRUE; - -} /* rsnPerformPolicySelection */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate WPA IE for beacon frame. -* -* \param[in] pucIeStartAddr Pointer to put the generated WPA IE. -* -* \return The append WPA-None IE length -* \note -* Called by: JOIN module, compose beacon IE -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWpaNoneIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - P_WPA_INFO_ELEM_T prWpaIE; - UINT_32 u4Suite; - UINT_16 u2SuiteCount; - PUINT_8 cp, cp2; - UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWpaNoneIE"); - - ASSERT(prMsduInfo); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode != AUTH_MODE_WPA_NONE) { - return; - } - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - prWpaIE = (P_WPA_INFO_ELEM_T)(pucBuffer); - - /* Start to construct a WPA IE. */ - /* Fill the Element ID field. */ - prWpaIE->ucElemId = ELEM_ID_WPA; - - /* Fill the OUI and OUI Type fields. */ - prWpaIE->aucOui[0] = 0x00; - prWpaIE->aucOui[1] = 0x50; - prWpaIE->aucOui[2] = 0xF2; - prWpaIE->ucOuiType = VENDOR_OUI_TYPE_WPA; - - /* Fill the Version field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2Version, 1); /* version 1 */ - ucExpendedLen = 6; - - /* Fill the Pairwise Key Cipher Suite List field. */ - u2SuiteCount = 0; - cp = (PUINT_8)&prWpaIE->aucPairwiseKeyCipherSuite1[0]; - - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - u4Suite = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP40; - } - else { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Group Key Cipher Suite field as the same in pair-wise key. */ - WLAN_SET_FIELD_32(&prWpaIE->u4GroupKeyCipherSuite, u4Suite); - ucExpendedLen += 4; - - /* Fill the Pairwise Key Cipher Suite Count field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2PairwiseKeyCipherSuiteCount, u2SuiteCount); - ucExpendedLen += 2; - - cp2 = cp; - - /* Fill the Authentication and Key Management Suite List field. */ - u2SuiteCount = 0; - cp += 2; - - if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_802_1X, &i)) { - u4Suite = WPA_AKM_SUITE_802_1X; - } - else if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_PSK, &i)) { - u4Suite = WPA_AKM_SUITE_PSK; - } - else { - u4Suite = WPA_AKM_SUITE_NONE; - } - - /* This shall be the only avaiable value for current implementation */ - ASSERT(u4Suite == WPA_AKM_SUITE_NONE); - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Authentication and Key Management Suite Count field. */ - WLAN_SET_FIELD_16(cp2, u2SuiteCount); - ucExpendedLen += 2; - - /* Fill the Length field. */ - prWpaIE->ucLength = (UINT_8)ucExpendedLen; - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -} /* rsnGenerateWpaNoneIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWPAIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUCHAR cp; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWPAIE"); - - ASSERT(prMsduInfo); - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - //if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - // return; - -#if CFG_ENABLE_WIFI_DIRECT - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetTkipCipher(prAdapter->prGlueInfo)))) || - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK))) -#else - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK)))) -#endif - { - if (prP2pSpecificBssInfo->u2WpaIeLen!=0) - { - kalMemCopy(pucBuffer,prP2pSpecificBssInfo->aucWpaIeBuffer, - prP2pSpecificBssInfo->u2WpaIeLen); - prMsduInfo->u2FrameLength += prP2pSpecificBssInfo->u2WpaIeLen; - return; - - } - /* Construct a WPA IE for association request frame. */ - WPA_IE(pucBuffer)->ucElemId = ELEM_ID_WPA; - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - WPA_IE(pucBuffer)->aucOui[0] = 0x00; - WPA_IE(pucBuffer)->aucOui[1] = 0x50; - WPA_IE(pucBuffer)->aucOui[2] = 0xF2; - WPA_IE(pucBuffer)->ucOuiType = VENDOR_OUI_TYPE_WPA; - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2Version, 1); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedGroupCipher); - - cp = (PUCHAR) &WPA_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedPairwiseCipher); - cp += 4; - - WLAN_SET_FIELD_16(cp, 1); - cp += 2; -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_AKM_SUITE_PSK); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedAKMSuite); - cp += 4; - - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateWPAIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate RSN IE for -* associate request frame. -* -* \param[in] prMsduInfo The Selected BSS description -* -* \retval The append RSN IE length -* -* \note -* Called by: AIS module, P2P module, BOW module Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateRSNIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 u4Entry; - PUCHAR cp; - //UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("rsnGenerateRSNIE"); - - ASSERT(prMsduInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - /* Todo:: network id */ - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if ( -#if CFG_ENABLE_WIFI_DIRECT - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetCcmpCipher(prAdapter->prGlueInfo))) || -#endif -#if CFG_ENABLE_BT_OVER_WIFI - (eNetworkId == NETWORK_TYPE_BOW_INDEX) || -#endif - (eNetworkId == NETWORK_TYPE_AIS_INDEX /* prCurrentBss->fgIERSN */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK)))) - { - /* Construct a RSN IE for association request frame. */ - RSN_IE(pucBuffer)->ucElemId = ELEM_ID_RSN; - RSN_IE(pucBuffer)->ucLength = ELEM_ID_RSN_LEN_FIXED; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2Version, 1); // Version - WLAN_SET_FIELD_32(&RSN_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedGroupCipher); // Group key suite - cp = (PUCHAR) &RSN_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedPairwiseCipher); - cp += 4; - WLAN_SET_FIELD_16(cp, 1); // AKM suite count - cp += 2; - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedAKMSuite); // AKM suite - cp += 4; - WLAN_SET_FIELD_16(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u2RsnSelectedCapInfo); // Capabilities -#if CFG_SUPPORT_802_11W - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection) { - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC | ELEM_WPA_CAP_MFPR); // Capabilities - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC); // Capabilities - } - } -#endif - cp += 2; - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX) - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && - rsnSearchPmkidEntry(prAdapter, prStaRec->aucMacAddr, &u4Entry)) { - //DBGLOG(RSN, TRACE, ("Add Pmk at assoc req\n")); - //DBGLOG(RSN, TRACE, ("addr " MACSTR" PMKID "MACSTR"\n", - // MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arBSSID), MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - if (prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].fgPmkidExist) { - RSN_IE(pucBuffer)->ucLength = 38; - WLAN_SET_FIELD_16(cp, 1); // PMKID count - cp += 2; - DBGLOG(RSN, TRACE, ("BSSID "MACSTR" ind=%d\n", MAC2STR(prStaRec->aucMacAddr), u4Entry)); - DBGLOG(RSN, TRACE, ("use PMKID "MACSTR"\n", MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - kalMemCopy(cp, (PVOID)prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - //ucExpendedLen = 40; - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - -#if CFG_SUPPORT_802_11W - if ((eNetworkId == NETWORK_TYPE_AIS_INDEX) && (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) /* (mgmt_group_cipher == WPA_CIPHER_AES_128_CMAC) */ ) { - WLAN_SET_FIELD_32(cp, RSN_CIPHER_SUITE_AES_128_CMAC); - cp += 4; - RSN_IE(pucBuffer)->ucLength += 4; - } -#endif - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateRSNIE */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is WFA IE and return Type and -* SubType for further process. -* -* \param[in] pucBuf Pointer to the buffer of WFA Information Element. -* \param[out] pucOuiType Pointer to the storage of OUI Type. -* \param[out] pu2SubTypeVersion Pointer to the storage of OUI SubType and Version. - -* \retval TRUE Parse IE ok -* \retval FALSE Parse IE fail -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseCheckForWFAInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WFA_T prWfaIE; - - ASSERT(pucBuf); - ASSERT(pucOuiType); - ASSERT(pu2SubTypeVersion); - prWfaIE = (P_IE_WFA_T)pucBuf; - - do { - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - WLAN_GET_FIELD_16(&prWfaIE->aucOuiSubTypeVersion[0], pu2SubTypeVersion); - - return TRUE; - } - while (FALSE); - - return FALSE; - -} /* end of rsnParseCheckForWFAInfoElem() */ - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is RSN IE with CCMP PSK -* -* \param[in] prAdapter Pointer to Adapter -* \param[in] prSwRfb Pointer to the rx buffer -* \param[in] pIE Pointer rthe buffer of Information Element. -* \param[out] prStatusCode Pointer to the return status code. - -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -rsnParserCheckForRSNCCMPPSK( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ) -{ - - RSN_INFO_T rRsnIe; - - ASSERT(prAdapter); - ASSERT(prIe); - ASSERT(pu2StatusCode); - - *pu2StatusCode = STATUS_CODE_INVALID_INFO_ELEMENT; - - if (rsnParseRsnIE(prAdapter, prIe, &rRsnIe)) { - if ((rRsnIe.u4PairwiseKeyCipherSuiteCount != 1) || (rRsnIe.au4PairwiseKeyCipherSuite[0] != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_PAIRWISE_CIPHER; - return; - } - if ((rRsnIe.u4GroupKeyCipherSuite != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_GROUP_CIPHER; - return; - } - if ((rRsnIe.u4AuthKeyMgtSuiteCount != 1) || (rRsnIe.au4AuthKeyMgtSuite[0] != RSN_AKM_SUITE_PSK)) { - *pu2StatusCode = STATUS_CODE_INVALID_AKMP; - return; - } - - DBGLOG(RSN, TRACE, ("RSN with CCMP-PSK\n" )); - *pu2StatusCode = WLAN_STATUS_SUCCESS; - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an authentication event to NDIS. -* -* \param[in] u4Flags Authentication event: \n -* PARAM_AUTH_REQUEST_REAUTH 0x01 \n -* PARAM_AUTH_REQUEST_KEYUPDATE 0x02 \n -* PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 \n -* PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E \n -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenMicErrorEvent ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgFlags - ) -{ - P_PARAM_AUTH_EVENT_T prAuthEvent; - - DEBUGFUNC("rsnGenMicErrorEvent"); - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, (PVOID)prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucBSSID, MAC_ADDR_LEN); - - if (fgFlags == TRUE) - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - else - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); - -} /* rsnGenMicErrorEvent */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle TKIP MIC failures. -* -* \param[in] adapter_p Pointer to the adapter object data area. -* \param[in] prSta Pointer to the STA which occur MIC Error -* \param[in] fgErrorKeyType type of error key -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnTkipHandleMICFailure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ) -{ - //UINT_32 u4RsnaCurrentMICFailTime; - //P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnTkipHandleMICFailure"); - - ASSERT(prAdapter); -#if 1 - rsnGenMicErrorEvent(prAdapter,/* prSta,*/ fgErrorKeyType); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); -#else - ASSERT(prSta); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Record the MIC error occur time. */ - GET_CURRENT_SYSTIME(&u4RsnaCurrentMICFailTime); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); - - /* If less than 60 seconds have passed since a previous TKIP MIC failure, - disassociate from the AP and wait for 60 seconds before (re)associating - with the same AP. */ - if (prAisSpecBssInfo->u4RsnaLastMICFailTime != 0 && - !CHECK_FOR_TIMEOUT(u4RsnaCurrentMICFailTime, - prAisSpecBssInfo->u4RsnaLastMICFailTime, - SEC_TO_SYSTIME(TKIP_COUNTERMEASURE_SEC))) { - /* If less than 60 seconds expired since last MIC error, we have to - block traffic. */ - - DBGLOG(RSN, INFO, ("Start blocking traffic!\n")); - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - - secFsmEventStartCounterMeasure(prAdapter, prSta); - } - else { - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - DBGLOG(RSN, INFO, ("First TKIP MIC error!\n")); - } - - COPY_SYSTIME(prAisSpecBssInfo->u4RsnaLastMICFailTime, u4RsnaCurrentMICFailTime); -#endif -} /* rsnTkipHandleMICFailure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS Desc at scan result list -* \param[out] pu4CandidateCount Pointer to the number of selected candidates. -* It is set to zero if no BSSID matches our requirement. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnSelectPmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("rsnSelectPmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - /* Search a BSS with the same SSID from the given BSS description set. */ - //DBGLOG(RSN, TRACE, ("Check scan result ["MACSTR"]\n", - // MAC2STR(prBssDesc->aucBSSID))); - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - -#if 0 - if ((prBssDesc->u2BSSBasicRateSet & - ~(rPhyAttributes[prAisBssInfo->ePhyType].u2SupportedRateSet)) || - prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(RSN, TRACE, ("-- Rate set not matched\n")); - return; - } - - if (/* prBssDesc->u4RsnSelectedPairwiseCipher != prAisBssInfo->u4RsnSelectedPairwiseCipher ||*/ - prBssDesc->u4RsnSelectedGroupCipher != prAisBssInfo->u4RsnSelectedGroupCipher /*|| - prBssDesc->u4RsnSelectedAKMSuite != prAisBssInfo->u4RsnSelectedAKMSuite */) { - DBGLOG(RSN, TRACE, ("-- Encrypt status not matched for PMKID \n")); - return; - } -#endif - - rsnUpdatePmkidCandidateList(prAdapter, prBssDesc); - -} /* rsnSelectPmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS DESC at scan result list -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnUpdatePmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - UINT_32 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnUpdatePmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - - for (i = 0; i < CFG_MAX_PMKID_CACHE; i++) { - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisSpecBssInfo->arPmkidCandicate[i].aucBssid)) - return; - } - - /* If the number of selected BSSID exceed MAX_NUM_PMKID_CACHE(16), - then we only store MAX_NUM_PMKID_CACHE(16) in PMKID cache */ - if ((prAisSpecBssInfo->u4PmkidCandicateCount + 1) > CFG_MAX_PMKID_CACHE) { - prAisSpecBssInfo->u4PmkidCandicateCount --; - } - - i = prAisSpecBssInfo->u4PmkidCandicateCount; - - COPY_MAC_ADDR((PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - (PVOID)prBssDesc->aucBSSID); - - if (prBssDesc->u2RsnCap & MASK_RSNIE_CAP_PREAUTH) { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 1; - DBGLOG(RSN, TRACE, ("Add " MACSTR " with pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - else { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 0; - DBGLOG(RSN, TRACE, ("Add " MACSTR " without pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - - prAisSpecBssInfo->u4PmkidCandicateCount ++; - -} /* rsnUpdatePmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired entry in -* PMKID cache according to the BSSID -* -* \param[in] pucBssid Pointer to the BSSID -* \param[out] pu4EntryIndex Pointer to place the found entry index -* -* \retval TRUE, if found one entry for specified BSSID -* \retval FALSE, if not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchPmkidEntry ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ) -{ - UINT_32 i; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnSearchPmkidEntry"); - - ASSERT(pucBssid); - ASSERT(pu4EntryIndex); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (prAisSpecBssInfo->u4PmkidCacheCount > CFG_MAX_PMKID_CACHE) { - return FALSE; - } - - ASSERT(prAisSpecBssInfo->u4PmkidCacheCount <= CFG_MAX_PMKID_CACHE); - - /* Search for desired BSSID */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, pucBssid, - MAC_ADDR_LEN)) { - break; - } - } - - /* If desired BSSID is found, then set the PMKID */ - if (i < prAisSpecBssInfo->u4PmkidCacheCount) { - *pu4EntryIndex = i; - - return TRUE; - } - - return FALSE; -} /* rsnSearchPmkidEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check if there is difference -* between PMKID candicate list and PMKID cache. If there -* is new candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \retval TRUE, if new member in the PMKID candicate list -* \retval FALSe, if no new member in the PMKID candicate list -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckPmkidCandicate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - UINT_32 i; // Index for PMKID candicate - UINT_32 j; // Indix for PMKID cache - BOOLEAN status = FALSE; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Check for each candicate */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecBssInfo->u4PmkidCacheCount; j++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN)) { - //DBGLOG(RSN, TRACE, (MACSTR" at PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - break; - } - } - - /* No entry found in PMKID cache for the candicate, add new one */ - if (j == prAisSpecBssInfo->u4PmkidCacheCount && prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE) { - DBGLOG(RSN, TRACE, ("Add "MACSTR" to PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - kalMemCopy((PVOID)prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.arBSSID, - (PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN); - prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].fgPmkidExist = FALSE; - prAisSpecBssInfo->u4PmkidCacheCount++; - - status = TRUE; - } - } - - return status; -} /* rsnCheckPmkidCandicate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to wait a duration to indicate the pre-auth AP candicate -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnIndicatePmkidCand ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - DBGLOG(RSN, EVENT, ("Security - Time to indicate the PMKID cand.\n")); - - /* If the authentication mode is WPA2 and indication PMKID flag - is available, then we indicate the PMKID candidate list to NDIS and - clear the flag, indicatePMKID */ - - if (prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnGeneratePmkidIndication(prAdapter); - } - - return; -} /* end of rsnIndicatePmkidCand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check the BSS Desc at scan result -* with pre-auth cap at wpa2 mode. If there -* is candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \param[in] prBss The BSS Desc at scan result -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnCheckPmkidCache ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - P_AIS_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - ASSERT(prBss); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if ((prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && - (prConnSettings->eAuthMode == AUTH_MODE_WPA2)) { - rsnSelectPmkidCandidateList(prAdapter, prBss); - - /* Set indication flag of PMKID to TRUE, and then connHandleNetworkConnection() - will indicate this later */ - if (rsnCheckPmkidCandicate(prAdapter)) { - DBGLOG(RSN, TRACE, ("Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an PMKID candidate list -* indication to NDIS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4Flags PMKID candidate list event: -* PARAM_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGeneratePmkidIndication ( - IN P_ADAPTER_T prAdapter - ) -{ - P_PARAM_STATUS_INDICATION_T prStatusEvent; - P_PARAM_PMKID_CANDIDATE_LIST_T prPmkidEvent; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - UINT_8 i, j = 0, count = 0; - UINT_32 u4LenOfUsedBuffer; - - DEBUGFUNC("rsnGeneratePmkidIndication"); - - ASSERT(prAdapter); - - prStatusEvent = - (P_PARAM_STATUS_INDICATION_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: PMKID Candidatelist Event */ - prStatusEvent->eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - ASSERT(prStatusEvent); - - prPmkidEvent = (P_PARAM_PMKID_CANDIDATE_LIST_T)(&prStatusEvent->eStatusType + 1); - ASSERT(prPmkidEvent); - - prAisSpecificBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prAisSpecificBssInfo); - - for (i = 0; i < prAisSpecificBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecificBssInfo->u4PmkidCacheCount; j++) { - if (EQUAL_MAC_ADDR( prAisSpecificBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid) && - (prAisSpecificBssInfo->arPmkidCache[j].fgPmkidExist == TRUE)){ - break; - } - } - if (count >= CFG_MAX_PMKID_CACHE) { - break; - } - - if (j == prAisSpecificBssInfo->u4PmkidCacheCount) { - kalMemCopy((PVOID)prPmkidEvent->arCandidateList[count].arBSSID, - (PVOID)prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid, - PARAM_MAC_ADDR_LEN); - prPmkidEvent->arCandidateList[count].u4Flags = - prAisSpecificBssInfo->arPmkidCandicate[i].u4PreAuthFlags; - DBGLOG(RSN, TRACE, (MACSTR" %d\n", MAC2STR(prPmkidEvent->arCandidateList[count].arBSSID), - prPmkidEvent->arCandidateList[count].u4Flags)); - count++; - } - } - - /* PMKID Candidate List */ - prPmkidEvent->u4Version = 1; - prPmkidEvent->u4NumCandidates = count; - DBGLOG(RSN, TRACE, ("rsnGeneratePmkidIndication #%d\n", prPmkidEvent->u4NumCandidates)); - u4LenOfUsedBuffer = sizeof(ENUM_STATUS_TYPE_T) + (2 * sizeof(UINT_32)) + - (count * sizeof(PARAM_PMKID_CANDIDATE_T)); - //dumpMemory8((PUINT_8)prAdapter->aucIndicationEventBuffer, u4LenOfUsedBuffer); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) prAdapter->aucIndicationEventBuffer, - u4LenOfUsedBuffer); - -} /* rsnGeneratePmkidIndication */ -#endif - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WSC IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WSC IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWSCIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 221 :0xDD */ - if (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWSCAssocInfoIE, prAdapter->prGlueInfo->u2WSCAssocInfoIELen); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WSCAssocInfoIELen; - } - -} -#endif - - -#if CFG_SUPPORT_802_11W - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the Bip Key installed or not -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -rsnCheckBipKeyInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - if (prStaRec && prStaRec->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX) - return prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled; - else - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to check the Sa query timeout. -* -* -* \note -* Called by: AIS module, Handle by Sa Quert timeout -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rsnCheckSaQueryTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - UINT_32 now; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - GET_CURRENT_SYSTIME(&now); - - if (CHECK_FOR_TIMEOUT(now, - prBssSpecInfo->u4SaQueryStart, - TU_TO_MSEC(1000))) { - LOG_FUNC("association SA Query timed out\n"); - - prBssSpecInfo->ucSaQueryTimedOut = 1; - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - /* Re-connect */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - return 1; - } - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query timer. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQueryTimer ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prTxFrame; - UINT_16 u2PayloadLen; - PUINT_8 pucTmp = NULL; - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - LOG_FUNC("MFP: Start Sa Query\n"); - - if (prBssSpecInfo->u4SaQueryCount > 0 && - rsnCheckSaQueryTimeout(prAdapter)) { - LOG_FUNC("MFP: u4SaQueryCount count =%d\n", prBssSpecInfo->u4SaQueryCount); - return; - } - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_REQUEST; - - if (prBssSpecInfo->u4SaQueryCount == 0) { - GET_CURRENT_SYSTIME(&prBssSpecInfo->u4SaQueryStart); - } - - if (prBssSpecInfo->u4SaQueryCount) { - pucTmp = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!pucTmp) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc tmp buffer for backup sa query id\n")); - return; - } - kalMemCopy(pucTmp, prBssSpecInfo->pucSaQueryTransId, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - } - - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - - ucTransId[0] = (UINT_8)(kalRandomNumber() & 0xFF); - ucTransId[1] = (UINT_8)(kalRandomNumber() & 0xFF); - - kalMemCopy(prTxFrame->ucTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - - prBssSpecInfo->u4SaQueryCount++; - - prBssSpecInfo->pucSaQueryTransId = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!prBssSpecInfo->pucSaQueryTransId) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc buffer for sa query id list\n")); - return; - } - - if (pucTmp) { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, pucTmp, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - kalMemCopy(&prBssSpecInfo->pucSaQueryTransId[(prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN], - ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - kalMemFree(pucTmp, VIR_MEM_TYPE, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - } - else { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - } - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - DBGLOG(RSN, TRACE, ("Set SA Query timer %d (%d sec)\n", prBssSpecInfo->u4SaQueryCount, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer, - TU_TO_MSEC(201)); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - rsnStartSaQueryTimer(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to stop the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStopSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame = NULL; - UINT_16 u2PayloadLen; - P_STA_RECORD_T prStaRec; - P_ACTION_SA_QUERY_FRAME prTxFrame; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Ignore SA Query Request " - "from unassociated STA " MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - return; - } - DBGLOG(RSN, TRACE, ("IEEE 802.11: Sending SA Query Response to " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - /* SA Query always with protected */ - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_RESPONSE; - - kalMemCopy(prTxFrame->ucTransId, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - UINT_32 i; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prSwRfb->u2PacketLen < ACTION_SA_QUERY_TR_ID_LEN) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Too short SA Query Action " - "frame (len=%lu)\n", (unsigned long) prSwRfb->u2PacketLen)); - return; - } - - if (prRxFrame->ucAction == ACTION_SA_QUERY_REQUEST) { - rsnSaQueryRequest(prAdapter, prSwRfb); - return; - } - - if (prRxFrame->ucAction != ACTION_SA_QUERY_RESPONSE) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Unexpected SA Query " - "Action %d\n", prRxFrame->ucAction)); - return; - } - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Response from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - /* MLME-SAQuery.confirm */ - - for (i = 0; i < prBssSpecInfo->u4SaQueryCount; i++) { - if (kalMemCmp(prBssSpecInfo->pucSaQueryTransId + - i * ACTION_SA_QUERY_TR_ID_LEN, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN) == 0) - break; - } - - if (i >= prBssSpecInfo->u4SaQueryCount) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: No matching SA Query " - "transaction identifier found\n")); - return; - } - - DBGLOG(RSN, TRACE, ("Reply to pending SA Query received\n")); - - rsnStopSaQuery(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w mgmt frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckRxMgmt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - BOOLEAN fgUnicast = TRUE; - BOOLEAN fgRobustAction = FALSE; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */) { - - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - if (prAssocReqFrame->aucDestAddr[0] & BIT(0)) - fgUnicast = FALSE; - - LOG_FUNC("QM RX MGT: rsnCheckRxMgmt = %d 0x%x %d ucSubtype=%x\n", fgUnicast, prHifRxHdr->ucReserved, (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC), ucSubtype); - - if (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC) { - /* "Dropped unprotected Robust Action frame from an MFP STA" */ - /* exclude Public Action */ - if (ucSubtype == 13 /* 0x1011: MAC_FRAME_ACTION */) - { - UINT_8 ucAction = *prSwRfb->pucRecvBuff; - if (ucAction != CATEGORY_PUBLIC_ACTION && ucAction != CATEGORY_HT_ACTION) { -#if DBG && CFG_RX_PKTS_DUMP - LOG_FUNC("QM RX MGT: UnProtected Robust Action frame = %d\n", ucAction); -#endif - fgRobustAction = TRUE; - return TRUE; - } - } - if (fgUnicast && ((ucSubtype == 10 /* 0x1010: MAC_FRAME_DISASSOC */) || (ucSubtype == 12 /* 0x1100: MAC_FRAME_DEAUTH */))) { - LOG_FUNC("QM RX MGT: rsnStartSaQuery\n"); - /* MFP test plan 5.3.3.5 */ - rsnStartSaQuery(prAdapter); - return TRUE; - } - } -#if 0 - else { - if (fgUnicast && ((ucSubtype == MAC_FRAME_DISASSOC) || (ucSubtype == MAC_FRAME_DEAUTH))) { - /* This done by function handler */ - //kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - // WLAN_STATUS_MEDIA_DISCONNECT, - // NULL, - // 0); - } - } -#endif - } - return FALSE; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/saa_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/saa_fsm.c deleted file mode 100755 index 6bef93239716..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/saa_fsm.c +++ /dev/null @@ -1,2022 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/saa_fsm.c#2 $ -*/ - -/*! \file "saa_fsm.c" - \brief This file defines the FSM for SAA MODULE. - - This file defines the FSM for SAA MODULE. -*/ - - - -/* -** $Log: saa_fsm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * Add debug message about 40MHz bandwidth allowed - * - * 05 12 2011 cp.wu - * [WCXRP00000720] [MT6620 Wi-Fi][Driver] Do not do any further operation in case STA-REC has been invalidated before SAA-FSM starts to roll - * check for valid STA-REC before SAA-FSM starts to roll. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error of after Station Type Macro modification. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * Add support for P2P join event start. - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with main branch for reseting to state 1 when associating with another AP - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable WiFi Direct function. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * * * Add Connection Policy - Any and Rx Burst Deauth Support for WHQL - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 12 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix compile warning due to declared but not used - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Refine Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAAState[AA_STATE_NUM] = { - (PUINT_8)DISP_STRING("AA_STATE_IDLE"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH2"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH3"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH4"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_ASSOC1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_ASSOC2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH4"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_ASSOC2"), - (PUINT_8)DISP_STRING("AA_STATE_RESOURCE") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of SAA Module. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] eNextState The value of Next State -* @param[in] prRetainedSwRfb Pointer to the retained SW_RFB_T for JOIN Success -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ) -{ - ENUM_AA_STATE_T ePreviousState; - BOOLEAN fgIsTransition; - - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - do { - -#if DBG - DBGLOG(SAA, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAAState[prStaRec->eAuthAssocState], - apucDebugAAState[eNextState])); -#else - DBGLOG(SAA, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SAA_IDX, - prStaRec->eAuthAssocState, - eNextState)); -#endif - ePreviousState = prStaRec->eAuthAssocState; - - /* NOTE(Kevin): This is the only place to change the eAuthAssocState(except initial) */ - prStaRec->eAuthAssocState = eNextState; - - - fgIsTransition = (BOOLEAN)FALSE; - switch (prStaRec->eAuthAssocState) { - case AA_STATE_IDLE: - { - if (ePreviousState != prStaRec->eAuthAssocState) { /* Only trigger this event once */ - - if (prRetainedSwRfb) { - - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_SUCCESS, - prStaRec, - prRetainedSwRfb) == WLAN_STATUS_SUCCESS) { - } - else { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - else { - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_FAILURE, - prStaRec, - NULL) == WLAN_STATUS_RESOURCES) { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - - } - - /* Free allocated TCM memory */ - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - } - break; - - case SAA_STATE_SEND_AUTH1: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - /* Update Station Record - Class 1 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame( - prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_1, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH2: - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame(prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_3, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH4: - break; - - case SAA_STATE_SEND_ASSOC1: - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - if (assocSendReAssocReqFrame(prAdapter, prStaRec) != WLAN_STATUS_SUCCESS) { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_ASSOCIATION_RETRY_TIMEOUT_TU)); - } - } - - break; - - case SAA_STATE_WAIT_ASSOC2: - break; - - case AA_STATE_RESOURCE: - /* TODO(Kevin) Can setup a timer and send message later */ - break; - - default: - DBGLOG(SAA, ERROR, ("Unknown AA STATE\n")); - ASSERT(0); - break; - } - - } - while (fgIsTransition); - - return; - -} /* end of saaFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rJoinStatus, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prStaRec); - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - /* Store limitation about 40Mhz bandwidth capability during association */ - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (rJoinStatus == WLAN_STATUS_SUCCESS) { - prBssInfo->fg40mBwAllowed = prBssInfo->fgAssoc40mBwAllowed; - } - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //@TODO: BOW handler - - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - -} /* end of saaFsmSendEventJoinComplete() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_START_T prSaaFsmStartMsg; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prSaaFsmStartMsg = (P_MSG_SAA_FSM_START_T)prMsgHdr; - prStaRec = prSaaFsmStartMsg->prStaRec; - - if((!prStaRec) || (prStaRec->fgIsInUse == FALSE)) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM.\n")); - - /* record sequence number of request message */ - prStaRec->ucAuthAssocReqSeqNum = prSaaFsmStartMsg->ucSeqNum; - - cnmMemFree(prAdapter, prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(prAdapter, WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - -#if CFG_PRIVACY_MIGRATION - //4 <4> Init the sec fsm - secFsmInit(prAdapter, prStaRec); -#endif - - //4 <5> Reset the STA STATE - /* Update Station Record - Class 1 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for Reconnect issue - - * We won't deactivate the same STA_RECORD_T and then activate it again for the - * case of reconnection. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_1); - - //4 <6> Decide if this BSS 20/40M bandwidth is allowed - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) - && (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - prBssInfo->fgAssoc40mBwAllowed = - cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex); - } - else { - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - DBGLOG(RLM, INFO, ("STA 40mAllowed=%d\n", prBssInfo->fgAssoc40mBwAllowed)); - } - - //4 <7> Trigger SAA FSM - saaFsmSteps(prAdapter, prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth1/Auth3/AssocReq) Event of SAA FSM. -* -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH2; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Strictly check the outgoing frame is matched with current JOIN STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH4; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_ASSOC1: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocReqFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_ASSOC2; - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &(prStaRec->rTxReqDoneOrRxRespTimer), - TU_TO_MSEC(DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventTxDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Tx Request Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: TX REQ TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_SEND_ASSOC1: - saaFsmSteps(prAdapter, prStaRec, prStaRec->eAuthAssocState, (P_SW_RFB_T)NULL); - break; - - default: - return; - } - - return; -} /* end of saaFsmRunEventTxReqTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Rx Response Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ENUM_AA_STATE_T eNextState; - - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: RX RESP TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_WAIT_AUTH2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH1; - break; - - case SAA_STATE_WAIT_AUTH4: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH3; - break; - - case SAA_STATE_WAIT_ASSOC2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_ASSOC1; - break; - - default: - break; /* Ignore other cases */ - } - - - if (eNextState != prStaRec->eAuthAssocState) { - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - - return; -} /* end of saaFsmRunEventRxRespTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - //ASSERT(0); - return; - } - - if (!IS_AP_STA(prStaRec)) { - return; - } - - switch(prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_WAIT_AUTH2: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); - - if (prStaRec->ucAuthAlgNum == - (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY) { - - eNextState = SAA_STATE_SEND_AUTH3; - } - else { - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_WAIT_AUTH4: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_4, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); /* Add for 802.11r handling */ - - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - return; -} /* end of saaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if the status code was not success -* @retval WLAN_STATUS_BUFFER_RETAINED if the status code was success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - P_SW_RFB_T prRetainedSwRfb = (P_SW_RFB_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - //ASSERT(0); - return rStatus; - } - - if (!IS_AP_STA(prStaRec)) { - return rStatus; - } - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_ASSOC1: - case SAA_STATE_WAIT_ASSOC2: - /* TRUE if the incoming frame is what we are waiting for */ - if (assocCheckRxReAssocRspFrameStatus(prAdapter, - prSwRfb, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - /* Update Station Record - Class 3 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for roaming issue - - * We should deactivate the STA_RECORD_T of previous AP before - * activate new one in Driver. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_3); - - prStaRec->ucJoinFailureCount = 0; // Clear history. - - prRetainedSwRfb = prSwRfb; - rStatus = WLAN_STATUS_PENDING; - } - else { - DBGLOG(SAA, INFO, ("Assoc Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - eNextState = AA_STATE_IDLE; - - saaFsmSteps(prAdapter, prStaRec, eNextState, prRetainedSwRfb); - } - break; - - default: - break; /* Ignore other cases */ - } - - return rStatus; - -} /* end of saaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Deauth Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain deauthentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Deauth frame from BSSID=["MACSTR"].\n", - MAC2STR(prDeauthFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DEAUTHENTICATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDeauthentication(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventRxDeAuth(prAdapter, prStaRec, prSwRfb); - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDeauth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Disassociation Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain disassociation frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Disassoc frame from BSSID=["MACSTR"].\n", - MAC2STR(prDisassocFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DISASSOCIATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDisassociation(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - /* TODO(Kevin) */ - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDisassoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Abort Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Abort Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_ABORT_T prSaaFsmAbortMsg; - P_STA_RECORD_T prStaRec; - - - ASSERT(prMsgHdr); - - prSaaFsmAbortMsg = (P_MSG_SAA_FSM_ABORT_T)prMsgHdr; - prStaRec = prSaaFsmAbortMsg->prStaRec; - - ASSERT(prStaRec); - if(!prStaRec) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Stop SAA FSM.\n")); - - cnmMemFree(prAdapter, prMsgHdr); - - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* Cancel JOIN relative Timer */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { -#if DBG - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %s.\n", - apucDebugAAState[prStaRec->eAuthAssocState])); -#else - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %d.\n", - prStaRec->eAuthAssocState)); -#endif - } - -#if 0 - /* For the Auth/Assoc State to IDLE */ - prStaRec->eAuthAssocState = AA_STATE_IDLE; -#else - /* Free this StaRec */ - cnmStaRecFree(prAdapter, prStaRec, FALSE); -#endif - - return; -} /* end of saaFsmRunEventAbort() */ - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/scan.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/scan.c deleted file mode 100755 index efa267eccd4c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/scan.c +++ /dev/null @@ -1,2960 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/scan.c#3 $ -*/ - -/*! \file "scan.c" - \brief This file defines the scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - - - -/* -** $Log: scan.c $ -** -** 01 30 2013 yuche.tsai -** [ALPS00451578] [JB2][WFD][Case Fail][JE][MR1]?????????[Java (JE),660,-1361051648,99,/data/core/,0,system_server_crash,system_server]JE happens when try to connect WFD.(4/5) -** Fix possible old scan result indicate to supplicant after formation. -** -** 01 16 2013 yuche.tsai -** [ALPS00431980] [WFD]Aupus one ?play game 10 minitues?wfd connection automaticlly disconnect -** Fix possible FW assert issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 25 2012 cp.wu - * [WCXRP00001258] [MT6620][MT5931][MT6628][Driver] Do not use stale scan result for deciding connection target - * drop off scan result which is older than 5 seconds when choosing which BSS to join - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct typo. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 04 2011 cp.wu - * [WCXRP00001085] [MT6628 Wi-Fi][Driver] deprecate old BSS-DESC if timestamp is reset with received beacon/probe response frames - * deprecate old BSS-DESC when timestamp in received beacon/probe response frames showed a smaller value than before - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 30 2011 cp.wu - * [WCXRP00001021] [MT5931][Driver] Correct scan result generation for conversion between BSS type and operation mode - * correct type casting issue. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 10 2011 cp.wu - * [WCXRP00000922] [MT6620 Wi-Fi][Driver] traverse whole BSS-DESC list for removing - * traverse whole BSS-DESC list because BSSID is not unique anymore. - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * for multiple BSS descriptior detecting issue: - * 1) check BSSID for infrastructure network - * 2) check SSID for AdHoc network - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * check for BSSID for beacons used to update DTIM - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not check BSS descriptor for connected flag due to linksys's hidden SSID will use another BSS descriptor and never connected - * - * 07 11 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * just pass beacons with the same BSSID. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * Do not check for SSID as beacon content change due to the existence of single BSSID with multiple SSID AP configuration - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * remove unused temporal variable reference. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 06 02 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * filter out BSS in disallowed channel by - * 1. do not add to scan result array if BSS is at disallowed channel - * 2. do not allow to search for BSS-DESC in disallowed channels - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Take parsed result for channel information instead of hardware channel number passed from firmware domain - * take parsed result for generating scanning result with channel information. - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 25 2011 yuche.tsai - * NULL - * Always update Bss Type, for Bss Type for P2P Network is changing every time. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix concurrent issue when AIS scan result would overwrite p2p scan result. - * - * 03 14 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * filtering out other BSS coming from adjacent channels - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * implement beacon change detection by checking SSID and supported rate. - * - * 02 22 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC big endian issue. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 21 2011 cp.wu - * [WCXRP00000380] [MT6620 Wi-Fi][Driver] SSID information should come from buffered BSS_DESC_T rather than using beacon-carried information - * SSID should come from buffered prBssDesc rather than beacon-carried information - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Memfree for P2P Descriptor & P2P Descriptor List. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Free P2P Descriptor List & Descriptor under BSS Descriptor. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 21 2010 cp.wu - * [WCXRP00000280] [MT6620 Wi-Fi][Driver] Enable BSS selection with best RCPI policy in SCN module - * SCN: enable BEST RSSI selection policy support - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 12 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * trust HT IE if available for 5GHz band - * - * 10 11 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * add timing and strenght constraint for filtering out beacons with same SSID/TA but received on different channels - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 01 2010 yuche.tsai - * NULL - * [MT6620 P2P] Fix Big Endian Issue when parse P2P device name TLV. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * When indicate scan result, append IE buffer information in the scan result. - * - * 09 03 2010 yuche.tsai - * NULL - * 1. Update Beacon RX count when running SLT. - * 2. Ignore Beacon when running SLT, would not update information from Beacon. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * 1. Fix P2P Descriptor List to be a link list, to avoid link corrupt after Bss Descriptor Free. - * 2.. Fix P2P Device Name Length BE issue. - * - * 08 23 2010 yuche.tsai - * NULL - * Add P2P Device Found Indication to supplicant - * - * 08 20 2010 cp.wu - * NULL - * reset BSS_DESC_T variables before parsing IE due to peer might have been reconfigured. - * - * 08 20 2010 yuche.tsai - * NULL - * Workaround for P2P Descriptor Infinite loop issue. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 yuche.tsai - * NULL - * Modify code of processing Probe Resonse frame for P2P. - * - * 08 12 2010 yuche.tsai - * NULL - * Add function to get P2P descriptor of BSS descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Modify Scan result processing for P2P module. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P Device Discovery result add function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add support for Probe Request & Response parsing. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 21 2010 yuche.tsai - * - * Fix compile error for SCAN module while disabling P2P feature. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct BSS_DESC_T initialization after allocated. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * if beacon/probe-resp is received in 2.4GHz bands and there is ELEM_ID_DS_PARAM_SET IE available, - * trust IE instead of RMAC information - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable P2P function. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the TKIP disallow join a HT AP code. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add more chance of JOIN retry for BG_SCAN - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * let the rsn wapi IE always parsing. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Solve the compile warning for 'return non-void' function - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix No PKT_INFO_T issue - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing ProbeRequest Frame's TX data rate - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Refine Beacon processing, add read RF channel from RX Status - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify u2EstimatedExtraIELen for probe request - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap IE to probe request - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the process of SCAN Result by adding more Phy Attributes - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function and code for meet the new define - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Report event of scan result to host - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix SCAN Record update - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status and Integrate with TXM - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add (Ext)Support Rate Set IE to ProbeReq - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed the use of SW_RFB->u2FrameLength - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix uninitial aucMacAddress[] for ProbeReq - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Send Probe Request Frame - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define REPLICATED_BEACON_TIME_THRESHOLD (3000) -#define REPLICATED_BEACON_FRESH_PERIOD (10000) -#define REPLICATED_BEACON_STRENGTH_THRESHOLD (32) - -#define ROAMING_NO_SWING_RCPI_STEP (10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to initialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBSSDesc; - PUINT_8 pucBSSBuff; - UINT_32 i; - - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - pucBSSBuff = &prScanInfo->aucScanBuffer[0]; - - - DBGLOG(SCN, INFO, ("->scnInit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - LINK_INITIALIZE(&prScanInfo->rPendingMsgList); - - - //4 <2> Reset link list of BSS_DESC_T - kalMemZero((PVOID) pucBSSBuff, SCN_MAX_BUFFER_SIZE); - - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - for (i = 0; i < CFG_MAX_NUM_BSS_LIST; i++) { - - prBSSDesc = (P_BSS_DESC_T)pucBSSBuff; - - LINK_INSERT_TAIL(&prScanInfo->rFreeBSSDescList, &prBSSDesc->rLinkEntry); - - pucBSSBuff += ALIGN_4(sizeof(BSS_DESC_T)); - } - /* Check if the memory allocation consist with this initialization function */ - ASSERT(((UINT_32)pucBSSBuff - (UINT_32)&prScanInfo->aucScanBuffer[0]) == SCN_MAX_BUFFER_SIZE); - - /* reset freest channel information */ - prScanInfo->fgIsSparseChannelValid = FALSE; - - return; -} /* end of scnInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to uninitialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - DBGLOG(SCN, INFO, ("->scnUninit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - /* NOTE(Kevin): Check rPendingMsgList ? */ - - //4 <2> Reset link list of BSS_DESC_T - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - return; -} /* end of scnUninit() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - return scanSearchBssDescByBssidAndSsid(prAdapter, - aucBSSID, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - else { - /* 20120206 frog: Equal BSSID but not SSID, SSID not hidden, SSID must be updated. */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - return prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchBssDescByTAAndSsid(prAdapter, - aucSrcAddr, - FALSE, - NULL); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucSrcAddr, aucSrcAddr)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByTA() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - aucBSSID, - aucSrcAddr, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBssDesc, prIBSSBssDesc; - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - - switch (eBSSType) { - case BSS_TYPE_P2P_DEVICE: - fgCheckSsid = FALSE; - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_BOW_DEVICE: - { - prBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - - /* if (eBSSType == prBssDesc->eBSSType) */ - - return prBssDesc; - } - - case BSS_TYPE_IBSS: - { - prIBSSBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - prBssDesc = scanSearchBssDescByTAAndSsid(prAdapter, aucSrcAddr, fgCheckSsid, prSsid); - - /* NOTE(Kevin): - * Rules to maintain the SCAN Result: - * For AdHoc - - * CASE I We have TA1(BSSID1), but it change its BSSID to BSSID2 - * -> Update TA1 entry's BSSID. - * CASE II We have TA1(BSSID1), and get TA1(BSSID1) again - * -> Update TA1 entry's contain. - * CASE III We have a SCAN result TA1(BSSID1), and TA2(BSSID2). Sooner or - * later, TA2 merge into TA1, we get TA2(BSSID1) - * -> Remove TA2 first and then replace TA1 entry's TA with TA2, Still have only one entry of BSSID. - * CASE IV We have a SCAN result TA1(BSSID1), and another TA2 also merge into BSSID1. - * -> Replace TA1 entry's TA with TA2, Still have only one entry. - * CASE V New IBSS - * -> Add this one to SCAN result. - */ - if (prBssDesc) { - if ((!prIBSSBssDesc) || // CASE I - (prBssDesc == prIBSSBssDesc)) { // CASE II - - return prBssDesc; - } - else { // CASE III - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - - - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - return prIBSSBssDesc; - } - } - - if (prIBSSBssDesc) { // CASE IV - - return prIBSSBssDesc; - } - - // CASE V - break; // Return NULL; - } - - default: - break; - } - - - return (P_BSS_DESC_T)NULL; - -} /* end of scanSearchExistingBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given Remove Policy. -* -* @param[in] u4RemovePolicy Remove Policy. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - //DBGLOG(SCN, TRACE, ("Before Remove - Number Of SCAN Result = %ld\n", - //prBSSDescList->u4NumElem)); - - if (u4RemovePolicy & SCN_RM_POLICY_TIMEOUT) { - P_BSS_DESC_T prBSSDescNext; - OS_SYSTIME rCurrentTime; - - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - //DBGLOG(SCN, TRACE, ("Remove TIMEOUT BSS DESC(%#x): MAC: "MACSTR", Current Time = %08lx, Update Time = %08lx\n", - //prBssDesc, MAC2STR(prBssDesc->aucBSSID), rCurrentTime, prBssDesc->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_OLDEST_HIDDEN) { - P_BSS_DESC_T prBssDescOldest = (P_BSS_DESC_T)NULL; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (!prBssDesc->fgIsHiddenSSID) { - continue; - } - - if (!prBssDescOldest) { /* 1st element */ - prBssDescOldest = prBssDesc; - continue; - } - - if (TIME_BEFORE(prBssDesc->rUpdateTime, prBssDescOldest->rUpdateTime)) { - prBssDescOldest = prBssDesc; - } - } - - if (prBssDescOldest) { - - //DBGLOG(SCN, TRACE, ("Remove OLDEST HIDDEN BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescOldest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescOldest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_SMART_WEAKEST) { - P_BSS_DESC_T prBssDescWeakest = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBssDescWeakestSameSSID = (P_BSS_DESC_T)NULL; - UINT_32 u4SameSSIDCount = 0; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if ((!prBssDesc->fgIsHiddenSSID) && - (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen))) { - - u4SameSSIDCount++; - - if (!prBssDescWeakestSameSSID) { - prBssDescWeakestSameSSID = prBssDesc; - } - else if (prBssDesc->ucRCPI < prBssDescWeakestSameSSID->ucRCPI) { - prBssDescWeakestSameSSID = prBssDesc; - } - } - - if (!prBssDescWeakest) { /* 1st element */ - prBssDescWeakest = prBssDesc; - continue; - } - - if (prBssDesc->ucRCPI < prBssDescWeakest->ucRCPI) { - prBssDescWeakest = prBssDesc; - } - - } - - if ((u4SameSSIDCount >= SCN_BSS_DESC_SAME_SSID_THRESHOLD) && - (prBssDescWeakestSameSSID)) { - prBssDescWeakest = prBssDescWeakestSameSSID; - } - - if (prBssDescWeakest) { - - //DBGLOG(SCN, TRACE, ("Remove WEAKEST BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescWeakest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescWeakest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_ENTIRE) { - P_BSS_DESC_T prBSSDescNext; - - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - - } - - return; - -} /* end of scanRemoveBssDescsByPolicy() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given BSSID. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; -} /* end of scanRemoveBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given band configuration -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBand Given band -* @param[in] eNetTypeIndex AIS - Remove IBSS/Infrastructure BSS -* BOW - Remove BOW BSS -* P2P - Remove P2P BSS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - BOOLEAN fgToRemove; - - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - - if(eBand == BAND_NULL) { - return; /* no need to do anything, keep all scan result */ - } - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - fgToRemove = FALSE; - - if(prBssDesc->eBand == eBand) { - switch (eNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - if((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS)) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_P2P_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_BOW_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_BOW_DEVICE) { - fgToRemove = TRUE; - } - break; - - default: - ASSERT(0); - break; - } - } - - if(fgToRemove == TRUE) { - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - - return; -} /* end of scanRemoveBssDescByBand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear the CONNECTION FLAG of a specified BSS Descriptor. -* -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; - -} /* end of scanRemoveConnectionFlagOfBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate new BSS_DESC_T -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @return Pointer to BSS Descriptor, if has free space. NULL, if has no space. -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - LINK_REMOVE_HEAD(prFreeBSSDescList, prBssDesc, P_BSS_DESC_T); - - if (prBssDesc) { - P_LINK_T prBSSDescList; - - kalMemZero(prBssDesc, sizeof(BSS_DESC_T)); - -#if CFG_ENABLE_WIFI_DIRECT - LINK_INITIALIZE(&(prBssDesc->rP2pDeviceList)); - prBssDesc->fgIsP2PPresent = FALSE; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* NOTE(Kevin): In current design, this new empty BSS_DESC_T will be - * inserted to BSSDescList immediately. - */ - LINK_INSERT_TAIL(prBSSDescList, &prBssDesc->rLinkEntry); - } - - return prBssDesc; - -} /* end of scanAllocateBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This API parses Beacon/ProbeResp frame and insert extracted BSS_DESC_T -* with IEs into prAdapter->rWifiVar.rScanInfo.aucScanBuffer -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the receiving frame buffer. -* -* @return Pointer to BSS Descriptor -* NULL if the Beacon/ProbeResp frame is invalid -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_DESC_T prBssDesc = NULL; - UINT_16 u2CapInfo; - ENUM_BSS_TYPE_T eBSSType = BSS_TYPE_INFRASTRUCTURE; - - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_8 ucHwChannelNum = 0; - UINT_8 ucIeDsChannelNum = 0; - UINT_8 ucIeHtChannelNum = 0; - BOOLEAN fgIsValidSsid = FALSE, fgEscape = FALSE; - PARAM_SSID_T rSsid; - UINT_64 u8Timestamp; - BOOLEAN fgIsNewBssDesc = FALSE; - - UINT_32 i; - UINT_8 ucSSIDChar; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2CapInfo, &u2CapInfo); - WLAN_GET_FIELD_64(&prWlanBeaconFrame->au4Timestamp[0], &u8Timestamp); - - // decide BSS type - switch (u2CapInfo & CAP_INFO_BSS_TYPE) { - case CAP_INFO_ESS: - /* It can also be Group Owner of P2P Group. */ - eBSSType = BSS_TYPE_INFRASTRUCTURE; - break; - - case CAP_INFO_IBSS: - eBSSType = BSS_TYPE_IBSS; - break; - case 0: - /* The P2P Device shall set the ESS bit of the Capabilities field in the Probe Response fame to 0 and IBSS bit to 0. (3.1.2.1.1) */ - eBSSType = BSS_TYPE_P2P_DEVICE; - break; - -#if CFG_ENABLE_BT_OVER_WIFI - // @TODO: add rule to identify BOW beacons -#endif - - default: - return NULL; - } - - //4 <1.1> Pre-parse SSID IE - pucIE = prWlanBeaconFrame->aucInfoElem; - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - } - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID) { - ucSSIDChar = '\0'; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsValidSsid = FALSE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (ucSSIDChar) { - fgIsValidSsid = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (fgIsValidSsid == TRUE) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - } - fgEscape = TRUE; - break; - default: - break; - } - - if(fgEscape == TRUE) { - break; - } - } - - - //4 <1.2> Replace existing BSS_DESC_T or allocate a new one - prBssDesc = scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - (PUINT_8)prWlanBeaconFrame->aucBSSID, - (PUINT_8)prWlanBeaconFrame->aucSrcAddr, - fgIsValidSsid, - fgIsValidSsid == TRUE ? &rSsid : NULL); - - if (prBssDesc == (P_BSS_DESC_T)NULL) { - fgIsNewBssDesc = TRUE; - - do { - //4 <1.2.1> First trial of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.2> Hidden is useless, remove the oldest hidden ssid. (for passive scan) - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_OLDEST_HIDDEN)); - - //4 <1.2.3> Second tail of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.4> Remove the weakest one - /* If there are more than half of BSS which has the same ssid as connection - * setting, remove the weakest one from them. - * Else remove the weakest one. - */ - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_SMART_WEAKEST)); - - //4 <1.2.5> reallocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.6> no space, should not happen - //ASSERT(0); // still no space available ? - return NULL; - - } - while(FALSE); - - } - else { - OS_SYSTIME rCurrentTime; - - // WCXRP00000091 - // if the received strength is much weaker than the original one, - // ignore it due to it might be received on the folding frequency - - GET_CURRENT_SYSTIME(&rCurrentTime); - - if (prBssDesc->eBSSType != eBSSType) { - prBssDesc->eBSSType = eBSSType; - } - else if(HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr) != prBssDesc->ucChannelNum && - prBssDesc->ucRCPI > prSwRfb->prHifRxHdr->ucRcpi) { - - // for signal strength is too much weaker and previous beacon is not stale - if((prBssDesc->ucRCPI - prSwRfb->prHifRxHdr->ucRcpi) >= REPLICATED_BEACON_STRENGTH_THRESHOLD && - rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_FRESH_PERIOD) { - return prBssDesc; - } - // for received beacons too close in time domain - else if(rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_TIME_THRESHOLD) { - return prBssDesc; - } - } - - /* if Timestamp has been reset, re-generate BSS DESC 'cause AP should have reset itself */ - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && u8Timestamp < prBssDesc->u8TimeStamp.QuadPart) { - BOOLEAN fgIsConnected, fgIsConnecting; - - /* set flag for indicating this is a new BSS-DESC */ - fgIsNewBssDesc = TRUE; - - /* backup 2 flags for APs which reset timestamp unexpectedly */ - fgIsConnected = prBssDesc->fgIsConnected; - fgIsConnecting = prBssDesc->fgIsConnecting; - scanRemoveBssDescByBssid(prAdapter, prBssDesc->aucBSSID); - - prBssDesc = scanAllocateBssDesc(prAdapter); - if (!prBssDesc) { - return NULL; - } - - /* restore */ - prBssDesc->fgIsConnected = fgIsConnected; - prBssDesc->fgIsConnecting = fgIsConnecting; - } - } - - /* NOTE: Keep consistency of Scan Record during JOIN process */ - if ((fgIsNewBssDesc == FALSE) && prBssDesc->fgIsConnecting) { - return prBssDesc; - } - - //4 <2> Get information from Fixed Fields - prBssDesc->eBSSType = eBSSType; /* Update the latest BSS type information. */ - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prWlanBeaconFrame->aucSrcAddr); - - COPY_MAC_ADDR(prBssDesc->aucBSSID, prWlanBeaconFrame->aucBSSID); - - prBssDesc->u8TimeStamp.QuadPart = u8Timestamp; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2BeaconInterval, &prBssDesc->u2BeaconInterval); - - prBssDesc->u2CapInfo = u2CapInfo; - - - //4 <2.1> Retrieve IEs for later parsing - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - prBssDesc->fgIsIEOverflow = TRUE; - } - else { - prBssDesc->fgIsIEOverflow = FALSE; - } - prBssDesc->u2IELength = u2IELength; - - kalMemCopy(prBssDesc->aucIEBuf, prWlanBeaconFrame->aucInfoElem, u2IELength); - - //4 <2.2> reset prBssDesc variables in case that AP has been reconfigured - prBssDesc->fgIsERPPresent = FALSE; - prBssDesc->fgIsHTPresent = FALSE; - prBssDesc->eSco = CHNL_EXT_SCN; - prBssDesc->fgIEWAPI = FALSE; -#if CFG_RSN_MIGRATION - prBssDesc->fgIERSN = FALSE; -#endif -#if CFG_PRIVACY_MIGRATION - prBssDesc->fgIEWPA = FALSE; -#endif - - - //4 <3.1> Full IE parsing on SW_RFB_T - pucIE = prWlanBeaconFrame->aucInfoElem; - - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): for Atheros IOT #1 */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - BOOLEAN fgIsHiddenSSID = FALSE; - ucSSIDChar = '\0'; - - - prIeSsid = (P_IE_SSID_T)pucIE; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsHiddenSSID = TRUE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (!ucSSIDChar) { - fgIsHiddenSSID = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (!fgIsHiddenSSID) { - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - /* TP-LINK will set extra and incorrect ie with ELEM_ID_SUP_RATES */ - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucIeDsChannelNum = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - - case ELEM_ID_TIM: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_TIM) { - prBssDesc->ucDTIMPeriod = TIM_IE(pucIE)->ucDTIMPeriod; - } - break; - - case ELEM_ID_IBSS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_IBSS_PARAMETER_SET){ - prBssDesc->u2ATIMWindow = IBSS_PARAM_IE(pucIE)->u2ATIMWindow; - } - break; - -#if 0 //CFG_SUPPORT_802_11D - case ELEM_ID_COUNTRY_INFO: - prBssDesc->prIECountry = (P_IE_COUNTRY_T)pucIE; - break; -#endif - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_ERP) { - prBssDesc->fgIsERPPresent = TRUE; - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) { - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - } - break; - -#if CFG_RSN_MIGRATION - case ELEM_ID_RSN: - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &prBssDesc->rRSNInfo)) { - prBssDesc->fgIERSN = TRUE; - prBssDesc->u2RsnCap = prBssDesc->rRSNInfo.u2RsnCap; - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnCheckPmkidCache(prAdapter, prBssDesc); - } - } - break; -#endif - - case ELEM_ID_HT_CAP: - prBssDesc->fgIsHTPresent = TRUE; - break; - - case ELEM_ID_HT_OP: - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - if ((((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssDesc->eSco = (ENUM_CHNL_EXT_T) - (((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO); - } - ucIeHtChannelNum = ((P_IE_HT_OP_T) pucIE)->ucPrimaryChannel; - - break; - -#if CFG_SUPPORT_WAPI - case ELEM_ID_WAPI: - if (wapiParseWapiIE(WAPI_IE(pucIE), &prBssDesc->rIEWAPI)) { - prBssDesc->fgIEWAPI = TRUE; - } - break; -#endif - - case ELEM_ID_VENDOR: // ELEM_ID_P2P, ELEM_ID_WMM - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; -#if CFG_PRIVACY_MIGRATION - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - - if (rsnParseWpaIE(prAdapter, WPA_IE(pucIE), &prBssDesc->rWPAInfo)) { - prBssDesc->fgIEWPA = TRUE; - } - } - } -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - prBssDesc->fgIsP2PPresent = TRUE; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } - break; - - /* no default */ - } - } - - - //4 <3.2> Save information from IEs - SSID - /* Update Flag of Hidden SSID for used in SEARCH STATE. */ - - /* NOTE(Kevin): in current driver, the ucSSIDLen == 0 represent - * all cases of hidden SSID. - * If the fgIsHiddenSSID == TRUE, it means we didn't get the ProbeResp with - * valid SSID. - */ - if (prBssDesc->ucSSIDLen == 0) { - prBssDesc->fgIsHiddenSSID = TRUE; - } - else { - prBssDesc->fgIsHiddenSSID = FALSE; - } - - - //4 <3.3> Check rate information in related IEs. - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prBssDesc->u2OperationalRateSet, - &prBssDesc->u2BSSBasicRateSet, - &prBssDesc->fgIsUnknownBssBasicRate); - } - - - //4 <4> Update information from HIF RX Header - { - prHifRxHdr = prSwRfb->prHifRxHdr; - - ASSERT(prHifRxHdr); - - //4 <4.1> Get TSF comparison result - prBssDesc->fgIsLargerTSF = HIF_RX_HDR_GET_TCL_FLAG(prHifRxHdr); - - //4 <4.2> Get Band information - prBssDesc->eBand = HIF_RX_HDR_GET_RF_BAND(prHifRxHdr); - - //4 <4.2> Get channel and RCPI information - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prHifRxHdr); - - if (BAND_2G4 == prBssDesc->eBand) { - - /* Update RCPI if in right channel */ - if (ucIeDsChannelNum >= 1 && ucIeDsChannelNum <= 14) { - - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeDsChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeDsChannelNum; - } - else if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum <= 14) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - // 5G Band - else { - if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum < 200) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - /* Always update RCPI */ - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - } - - - //4 <5> PHY type setting - prBssDesc->ucPhyTypeSet = 0; - - if (BAND_2G4 == prBssDesc->eBand) { - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* check if support 11g */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) || - prBssDesc->fgIsERPPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - /* if not 11g only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_OFDM)) { - /* check if support 11b */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - } - } - } - else { /* (BAND_5G == prBssDesc->eBande) */ - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* Support 11a definitely */ - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - - ASSERT(!(prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)); - } - } - - - //4 <6> Update BSS_DESC_T's Last Update TimeStamp. - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - - return prBssDesc; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to scan result for query -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SCAN_INFO_T prScanInfo; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame; - PARAM_MAC_ADDRESS rMacAddr; - PARAM_SSID_T rSsid; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_8 ucRateLen = 0; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if (prBssDesc->eBand == BAND_2G4) { - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) - || prBssDesc->fgIsERPPresent) { - eNetworkType = PARAM_NETWORK_TYPE_OFDM24; - } - else { - eNetworkType = PARAM_NETWORK_TYPE_DS; - } - } - else { - ASSERT(prBssDesc->eBand == BAND_5G); - eNetworkType = PARAM_NETWORK_TYPE_OFDM5; - } - - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - /* NOTE(Kevin): Not supported by WZC(TBD) */ - return WLAN_STATUS_FAILURE; - } - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - COPY_MAC_ADDR(rMacAddr, prWlanBeaconFrame->aucBSSID); - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = (UINT_32) prWlanBeaconFrame->u2BeaconInterval; - rConfiguration.u4ATIMWindow = prBssDesc->u2ATIMWindow; - rConfiguration.u4DSConfig = nicChannelNum2Freq(prBssDesc->ucChannelNum); - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - rateGetDataRatesFromRateSet(prBssDesc->u2OperationalRateSet, - 0, - aucRatesEx, - &ucRateLen); - - /* NOTE(Kevin): Set unused entries, if any, at the end of the array to 0. - * from OID_802_11_BSSID_LIST - */ - for (i = ucRateLen; i < sizeof(aucRatesEx) / sizeof(aucRatesEx[0]) ; i++) { - aucRatesEx[i] = 0; - } - - switch(prBssDesc->eBSSType) { - case BSS_TYPE_IBSS: - eOpMode = NET_TYPE_IBSS; - break; - - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_P2P_DEVICE: - case BSS_TYPE_BOW_DEVICE: - default: - eOpMode = NET_TYPE_INFRA; - break; - } - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - prBssDesc->ucChannelNum, - RCPI_TO_dBm(prBssDesc->ucRCPI)); - - nicAddScanResult(prAdapter, - rMacAddr, - &rSsid, - prWlanBeaconFrame->u2CapInfo & CAP_INFO_PRIVACY ? 1 : 0, - RCPI_TO_dBm(prBssDesc->ucRCPI), - eNetworkType, - &rConfiguration, - eOpMode, - aucRatesEx, - prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen, - (PUINT_8)((UINT_32)(prSwRfb->pvHeader) + WLAN_MAC_MGMT_HEADER_LEN)); - - return WLAN_STATUS_SUCCESS; - -} /* end of scanAddScanResult() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Parse the content of given Beacon or ProbeResp Frame. -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if not report this SW_RFB_T to host -* @retval WLAN_STATUS_PENDING if report this SW_RFB_T to host as scan result -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prAisBssInfo; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; -#if CFG_SLT_SUPPORT - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; -#endif - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - //4 <0> Ignore invalid Beacon Frame - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)) { -#ifndef _lint - ASSERT(0); -#endif /* _lint */ - return rStatus; - } - -#if CFG_SLT_SUPPORT - prSltInfo = &prAdapter->rWifiVar.rSltInfo; - - if (prSltInfo->fgIsDUT) { - DBGLOG(P2P, INFO, ("\n\rBCN: RX\n")); - prSltInfo->u4BeaconReceiveCnt++; - return WLAN_STATUS_SUCCESS; - } - else { - return WLAN_STATUS_SUCCESS; - } -#endif - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - //4 <1> Parse and add into BSS_DESC_T - prBssDesc = scanAddToBssDesc(prAdapter, prSwRfb); - - if (prBssDesc) { - - //4 <1.1> Beacon Change Detection for Connected BSS - if(prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA)) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - EQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, prAisBssInfo->aucSSID, prAisBssInfo->ucSSIDLen)) { - BOOLEAN fgNeedDisconnect = FALSE; - -#if CFG_SUPPORT_BEACON_CHANGE_DETECTION - // <1.1.2> check if supported rate differs - if(prAisBssInfo->u2OperationalRateSet != prBssDesc->u2OperationalRateSet) { - fgNeedDisconnect = TRUE; - } -#endif - - // <1.1.3> beacon content change detected, disconnect immediately - if(fgNeedDisconnect == TRUE) { - aisBssBeaconTimeout(prAdapter); - } - } - - //4 <1.1> Update AIS_BSS_INFO - if(((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA))) { - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - - /* *not* checking prBssDesc->fgIsConnected anymore, - * due to Linksys AP uses " " as hidden SSID, and would have different BSS descriptor */ - if ((!prAisBssInfo->ucDTIMPeriod) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON)) { - - prAisBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - - /* sync with firmware for beacon information */ - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - } - -#if CFG_SUPPORT_ADHOC - if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen) && - (prBssDesc->eBSSType == BSS_TYPE_IBSS) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS)) { - - ibssProcessMatchedBeacon(prAdapter, prAisBssInfo, prBssDesc, prSwRfb->prHifRxHdr->ucRcpi); - } -#endif /* CFG_SUPPORT_ADHOC */ - } - - rlmProcessBcn(prAdapter, - prSwRfb, - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem, - (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]))); - - //4 <3> Send SW_RFB_T to HIF when we perform SCAN for HOST - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE - || prBssDesc->eBSSType == BSS_TYPE_IBSS) { - /* for AIS, send to host */ - if (prConnSettings->fgIsScanReqIssued && - rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == TRUE) { - ENUM_BAND_T eBand; - UINT_8 ucChannel; - BOOLEAN fgAddToScanResult; - - /* check ucChannelNum/eBand for adjacement channel filtering */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE && - (eBand != prBssDesc->eBand || ucChannel != prBssDesc->ucChannelNum)) { - fgAddToScanResult = FALSE; - } - else { - fgAddToScanResult = TRUE; - } - - if(fgAddToScanResult == TRUE) { - rStatus = scanAddScanResult(prAdapter, prBssDesc, prSwRfb); - } - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - scanP2pProcessBeaconAndProbeResp( - prAdapter, - prSwRfb, - &rStatus, - prBssDesc, - prWlanBeaconFrame); - } -#endif - } - - return rStatus; - -} /* end of scanProcessBeaconAndProbeResp() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Search the Candidate of BSS Descriptor for JOIN(Infrastructure) or -* MERGE(AdHoc) according to current Connection Policy. -* -* \return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_SCAN_INFO_T prScanInfo; - - P_LINK_T prBSSDescList; - - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL; - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_STA_RECORD_T prPrimaryStaRec; - P_STA_RECORD_T prCandidateStaRec = (P_STA_RECORD_T)NULL; - - OS_SYSTIME rCurrentTime; - - /* The first one reach the check point will be our candidate */ - BOOLEAN fgIsFindFirst = (BOOLEAN)FALSE; - - BOOLEAN fgIsFindBestRSSI = (BOOLEAN)FALSE; - BOOLEAN fgIsFindBestEncryptionLevel = (BOOLEAN)FALSE; - //BOOLEAN fgIsFindMinChannelLoad = (BOOLEAN)FALSE; - - /* TODO(Kevin): Support Min Channel Load */ - //UINT_8 aucChannelLoad[CHANNEL_NUM] = {0}; - - BOOLEAN fgIsFixedChannel; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - prAisSpecBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* check for fixed channel operation */ - if(eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - fgIsFixedChannel = cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel); - } - else { - fgIsFixedChannel = FALSE; - } - -#if DBG - if (prConnSettings->ucSSIDLen < ELEM_MAX_LEN_SSID) { - prConnSettings->aucSSID[prConnSettings->ucSSIDLen] = '\0'; - } -#endif - - DBGLOG(SCN, INFO, ("SEARCH: Num Of BSS_DESC_T = %d, Look for SSID: %s\n", - prBSSDescList->u4NumElem, prConnSettings->aucSSID)); - - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* TODO(Kevin): Update Minimum Channel Load Information here */ - - DBGLOG(SCN, INFO, ("SEARCH: ["MACSTR"], SSID:%s\n", - MAC2STR(prBssDesc->aucBSSID), prBssDesc->aucSSID)); - - - //4 <2> Check PHY Type and attributes - //4 <2.1> Check Unsupported BSS PHY Type - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore unsupported ucPhyTypeSet = %x\n", - prBssDesc->ucPhyTypeSet)); - continue; - } - - //4 <2.2> Check if has unknown NonHT BSS Basic Rate Set. - if (prBssDesc->fgIsUnknownBssBasicRate) { - - continue; - } - - //4 <2.3> Check if fixed operation cases should be aware - if (fgIsFixedChannel == TRUE && - (prBssDesc->eBand != eBand || prBssDesc->ucChannelNum != ucChannel)) { - continue; - } - - //4 <2.4> Check if the channel is legal under regulatory domain - if(rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == FALSE) { - continue; - } - - //4 <2.5> Check if this BSS_DESC_T is stale - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - continue; - } - - //4 <3> Check if reach the excessive join retry limit - /* NOTE(Kevin): STA_RECORD_T is recorded by TA. */ - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - - if (prStaRec) { - /* NOTE(Kevin): - * The Status Code is the result of a Previous Connection Request, we use this as SCORE for choosing a proper - * candidate (Also used for compare see <6>) - * The Reason Code is an indication of the reason why AP reject us, we use this Code for "Reject" - * a SCAN result to become our candidate(Like a blacklist). - */ -#if 0 /* TODO(Kevin): */ - if (prStaRec->u2ReasonCode != REASON_CODE_RESERVED) { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS with previous Reason Code = %d\n", - prStaRec->u2ReasonCode)); - continue; - } - else -#endif - if (prStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - /* NOTE(Kevin): greedy association - after timeout, we'll still - * try to associate to the AP whose STATUS of conection attempt - * was not success. - * We may also use (ucJoinFailureCount x JOIN_RETRY_INTERVAL_SEC) for - * time bound. - */ - if ((prStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) || - (CHECK_FOR_TIMEOUT(rCurrentTime, - prStaRec->rLastJoinTime, - SEC_TO_SYSTIME(JOIN_RETRY_INTERVAL_SEC)))) { - - /* NOTE(Kevin): Every JOIN_RETRY_INTERVAL_SEC interval, we can retry - * JOIN_MAX_RETRY_FAILURE_COUNT times. - */ - if (prStaRec->ucJoinFailureCount >= JOIN_MAX_RETRY_FAILURE_COUNT) { - prStaRec->ucJoinFailureCount = 0; - } - DBGLOG(SCN, INFO, ("SEARCH: Try to join BSS again which has Status Code = %d (Curr = %ld/Last Join = %ld)\n", - prStaRec->u2StatusCode, rCurrentTime, prStaRec->rLastJoinTime)); - } - else { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS which reach maximum Join Retry Count = %d \n", - JOIN_MAX_RETRY_FAILURE_COUNT)); - continue; - } - - } - } - - - //4 <4> Check for various NETWORK conditions - if (eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - - //4 <4.1> Check BSS Type for the corresponding Operation Mode in Connection Setting - /* NOTE(Kevin): For NET_TYPE_AUTO_SWITCH, we will always pass following check. */ - if (((prConnSettings->eOPMode == NET_TYPE_INFRA) && - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE)) || - ((prConnSettings->eOPMode == NET_TYPE_IBSS || prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS) && - (prBssDesc->eBSSType != BSS_TYPE_IBSS))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore eBSSType = %s\n", - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) ? - "INFRASTRUCTURE" : "IBSS"))); - continue; - } - - //4 <4.2> Check AP's BSSID if OID_802_11_BSSID has been set. - if ((prConnSettings->fgIsConnByBssidIssued) && - (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE)) { - - if (UNEQUAL_MAC_ADDR(prConnSettings->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore due to BSSID was not matched!\n")); - continue; - } - } - -#if CFG_SUPPORT_ADHOC - //4 <4.3> Check for AdHoc Mode - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - //4 <4.3.1> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS - e.g. IPN2220, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_ADHOC_BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCN, LOUD, ("SEARCH: Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - - //4 <4.3.2> Check Peer's capability - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4.3.3> Compare TSF - if (prBssInfo->fgIsBeaconActivated && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, LOUD, - ("SEARCH: prBssDesc->fgIsLargerTSF = %d\n", - prBssDesc->fgIsLargerTSF)); - - if (!prBssDesc->fgIsLargerTSF) { - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: ["MACSTR"], Smaller TSF\n", MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - } -#endif /* CFG_SUPPORT_ADHOC */ - - } - - - - -#if 0 /* TODO(Kevin): For IBSS */ - //4 <2.c> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - if ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) && - (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED)) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - - //4 <4B> Check for IBSS AdHoc Mode. - /* Skip if one or more BSS Basic Rate are not supported by current AdHocMode */ - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_IBSS) { - //4 <4B.1> Check if match the Capability of current IBSS AdHoc Mode. - if (ibssCheckCapabilityForAdHocMode(prAdapter, prPrimaryBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4B.2> IBSS Merge Decision Flow for SEARCH STATE. - if (prAdapter->fgIsIBSSActive && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prPrimaryBssDesc->aucBSSID)) { - - if (!fgIsLocalTSFRead) { - NIC_GET_CURRENT_TSF(prAdapter, &rCurrentTsf); - - DBGLOG(SCAN, TRACE, - ("\n\nCurrent TSF : %08lx-%08lx\n\n", - rCurrentTsf.u.HighPart, rCurrentTsf.u.LowPart)); - } - - if (rCurrentTsf.QuadPart > prPrimaryBssDesc->u8TimeStamp.QuadPart) { - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: ["MACSTR"], Current BSSID: ["MACSTR"].\n", - MAC2STR(prPrimaryBssDesc->aucBSSID), MAC2STR(prBssInfo->aucBSSID))); - - DBGLOG(SCAN, TRACE, - ("\n\nBSS's TSF : %08lx-%08lx\n\n", - prPrimaryBssDesc->u8TimeStamp.u.HighPart, prPrimaryBssDesc->u8TimeStamp.u.LowPart)); - - prPrimaryBssDesc->fgIsLargerTSF = FALSE; - continue; - } - else { - prPrimaryBssDesc->fgIsLargerTSF = TRUE; - } - - } - } - - //4 <5> Check the Encryption Status. - if (rsnPerformPolicySelection(prPrimaryBssDesc)) { - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - - /* For RSN Pre-authentication, update the PMKID canidate list for - same SSID and encrypt status */ - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAdapter->rWifiVar.rAisBssInfo.u4PmkidCandicateCount) { - prAdapter->rWifiVar.rAisBssInfo.fgIndicatePMKID = rsnCheckPmkidCandicate(); - } - } - -#endif - - - prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - - //4 <6> Check current Connection Policy. - switch (prConnSettings->eConnectionPolicy) { - case CONNECT_BY_SSID_BEST_RSSI: - /* Choose Hidden SSID to join only if the `fgIsEnableJoin...` is TRUE */ - if (prAdapter->rWifiVar.fgEnableJoinToHiddenSSID && prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): following if () statement means that - * If Target is hidden, then we won't connect when user specify SSID_ANY policy. - */ - if (prConnSettings->ucSSIDLen) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - - } - else if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen)) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - break; - - case CONNECT_BY_SSID_ANY: - /* NOTE(Kevin): In this policy, we don't know the desired - * SSID from user, so we should exclude the Hidden SSID from scan list. - * And because we refuse to connect to Hidden SSID node at the beginning, so - * when the JOIN Module deal with a BSS_DESC_T which has fgIsHiddenSSID == TRUE, - * then the Connection Settings must be valid without doubt. - */ - if (!prBssDesc->fgIsHiddenSSID) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindFirst = TRUE; - } - break; - - case CONNECT_BY_BSSID: - if(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnSettings->aucBSSID)) { - prPrimaryBssDesc = prBssDesc; - } - break; - - default: - break; - } - - - /* Primary Candidate was not found */ - if (prPrimaryBssDesc == NULL) { - continue; - } - - //4 <7> Check the Encryption Status. - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - if (wapiPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - fgIsFindFirst = TRUE; - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - } - else -#endif -#if CFG_RSN_MIGRATION - if (rsnPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - if (prAisSpecBssInfo->fgCounterMeasure) { - DBGLOG(RSN, INFO, ("Skip while at counter measure period!!!\n")); - continue; - } - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - -#if 0 - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAisSpecBssInfo->u4PmkidCandicateCount) { - if (rsnCheckPmkidCandicate()) { - DBGLOG(RSN, WARN, ("Prepare a timer to indicate candidate "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.aucBssid))); - cnmTimerStopTimer(&prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(&prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } - } -#endif - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } -#endif - } - else { - /* Todo:: P2P and BOW Policy Selection */ - } - - prPrimaryStaRec = prStaRec; - - //4 <8> Compare the Candidate and the Primary Scan Record. - if (!prCandidateBssDesc) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - - //4 <8.1> Condition - Get the first matched one. - if (fgIsFindFirst) { - break; - } - } - else { -#if 0 /* TODO(Kevin): For security(TBD) */ - //4 <6B> Condition - Choose the one with best Encryption Score. - if (fgIsFindBestEncryptionLevel) { - if (prCandidateBssDesc->ucEncLevel < - prPrimaryBssDesc->ucEncLevel) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - - /* If reach here, that means they have the same Encryption Score. - */ - - //4 <6C> Condition - Give opportunity to the one we didn't connect before. - // For roaming, only compare the candidates other than current associated BSSID. - if (!prCandidateBssDesc->fgIsConnected && !prPrimaryBssDesc->fgIsConnected) { - if ((prCandidateStaRec != (P_STA_RECORD_T)NULL) && - (prCandidateStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - - DBGLOG(SCAN, TRACE, ("So far -BSS DESC MAC: "MACSTR" has nonzero Status Code = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateStaRec->u2StatusCode)); - - if (prPrimaryStaRec != (P_STA_RECORD_T)NULL) { - if (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - - /* Give opportunity to the one with smaller rLastJoinTime */ - if (TIME_BEFORE(prCandidateStaRec->rLastJoinTime, - prPrimaryStaRec->rLastJoinTime)) { - continue; - } - /* We've connect to CANDIDATE recently, let us try PRIMARY now */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY's u2StatusCode = 0 */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY has no StaRec - We didn't connet to PRIMARY before */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if ((prPrimaryStaRec != (P_STA_RECORD_T)NULL) && - (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - continue; - } - } - } -#endif - - - //4 <6D> Condition - Visible SSID win Hidden SSID. - if (prCandidateBssDesc->fgIsHiddenSSID) { - if (!prPrimaryBssDesc->fgIsHiddenSSID) { - prCandidateBssDesc = prPrimaryBssDesc; /* The non Hidden SSID win. */ - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if (prPrimaryBssDesc->fgIsHiddenSSID) { - continue; - } - } - - - //4 <6E> Condition - Choose the one with better RCPI(RSSI). - if (fgIsFindBestRSSI) { - /* TODO(Kevin): We shouldn't compare the actual value, we should - * allow some acceptable tolerance of some RSSI percentage here. - */ - DBGLOG(SCN, TRACE, ("Candidate ["MACSTR"]: RCPI = %d, Primary ["MACSTR"]: RCPI = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateBssDesc->ucRCPI, - MAC2STR(prPrimaryBssDesc->aucBSSID), prPrimaryBssDesc->ucRCPI)); - - ASSERT(!(prCandidateBssDesc->fgIsConnected && - prPrimaryBssDesc->fgIsConnected)); - - /* NOTE: To prevent SWING, we do roaming only if target AP has at least 5dBm larger than us. */ - if (prCandidateBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP <= prPrimaryBssDesc->ucRCPI) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prPrimaryBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - -#if 0 - /* If reach here, that means they have the same Encryption Score, and - * both RSSI value are close too. - */ - //4 <6F> Seek the minimum Channel Load for less interference. - if (fgIsFindMinChannelLoad) { - - /* TODO(Kevin): Check which one has minimum channel load in its channel */ - } -#endif - } - } - - return prCandidateBssDesc; - -} /* end of scanSearchBssDescByPolicy() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/scan_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/scan_fsm.c deleted file mode 100755 index 2fc9b8bac204..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/scan_fsm.c +++ /dev/null @@ -1,1109 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/scan_fsm.c#1 $ -*/ - -/*! \file "scan_fsm.c" - \brief This file defines the state transition function for SCAN FSM. - - The SCAN FSM is part of SCAN MODULE and responsible for performing basic SCAN - behavior as metioned in IEEE 802.11 2007 11.1.3.1 & 11.1.3.2 . -*/ - - - -/* -** $Log: scan_fsm.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001095] [Volunteer Patch][Driver] Always Scan before enable Hot-Spot. - * Fix bug when unregister P2P network.. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * free mailbox message afte parsing is completed. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Take P2P wildcard SSID into consideration. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix bug for processing queued scan request. - * - * 08 11 2010 yuche.tsai - * NULL - * Add a function for returning channel. - * - * 08 05 2010 yuche.tsai - * NULL - * Update SCAN FSM for support P2P Device discovery scan. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add option of channel extension while cancelling scan request. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 cp.wu - * - * due to FW/DRV won't be sync. precisely, some strict assertions should be eased. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * when returning to SCAN_IDLE state, send a correct message to source FSM. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine the order of Stop TX Queue and Switch Channel - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update pause/resume/flush API to new Bitmap API - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Ignore the PROBE_DELAY state if the value of Probe Delay == 0 - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add set RX Filter to receive BCN from different BSSID during SCAN - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove flag of CFG_TEST_MGMT_FSM - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Change parameter of scanSendProbeReqFrames() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update scnFsmSteps() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugScanState[SCAN_STATE_NUM] = { - (PUINT_8)DISP_STRING("SCAN_STATE_IDLE"), - (PUINT_8)DISP_STRING("SCAN_STATE_SCANNING"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prMsgHdr; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - do { - -#if DBG - DBGLOG(SCN, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugScanState[prScanInfo->eCurrentState], - apucDebugScanState[eNextState])); -#else - DBGLOG(SCN, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SCN_IDX, - prScanInfo->eCurrentState, - eNextState)); -#endif - - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prScanInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - switch (prScanInfo->eCurrentState) { - case SCAN_STATE_IDLE: - /* check for pending scanning requests */ - if(!LINK_IS_EMPTY(&(prScanInfo->rPendingMsgList))) { - // load next message from pending list as scan parameters - LINK_REMOVE_HEAD(&(prScanInfo->rPendingMsgList), prMsgHdr, P_MSG_HDR_T); - - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - - /* switch to next state */ - eNextState = SCAN_STATE_SCANNING; - fgIsTransition = TRUE; - - cnmMemFree(prAdapter, prMsgHdr); - } - break; - - case SCAN_STATE_SCANNING: - if(prScanParam->fgIsScanV2 == FALSE) { - scnSendScanReq(prAdapter); - } - else { - scnSendScanReqV2(prAdapter); - } - break; - - default: - ASSERT(0); - break; - - } - } - while (fgIsTransition); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - if(prScanParam->ucSSIDNum == 1) { - COPY_SSID(rCmdScanReq.aucSSID, - rCmdScanReq.ucSSIDLength, - prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0]); - } - - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif - - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ_V2 command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ_V2 rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ_V2)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - for (i = 0 ; i < prScanParam->ucSSIDNum; i++) { - COPY_SSID(rCmdScanReq.arSSID[i].aucSsid, - rCmdScanReq.arSSID[i].u4SsidLen, - prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i]); - } - - rCmdScanReq.u2ProbeDelayTime = (UINT_8)prScanParam->u2ProbeDelayTime; - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif - - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ_V2, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ_V2, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - ASSERT(prMsgHdr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - - if (prScanInfo->eCurrentState == SCAN_STATE_IDLE) { - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - else { - // should not deliver to this function - ASSERT(0); - } - - cnmMemFree(prAdapter, prMsgHdr); - scnFsmSteps(prAdapter, SCAN_STATE_SCANNING); - } - else { - LINK_INSERT_TAIL(&prScanInfo->rPendingMsgList, &prMsgHdr->rLinkEntry); - } - - return; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancel; - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_CANCEL rCmdScanCancel; - - ASSERT(prMsgHdr); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)prMsgHdr; - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - if (prScanInfo->eCurrentState != SCAN_STATE_IDLE) { - if(prScanCancel->ucSeqNum == prScanParam->ucSeqNum && - prScanCancel->ucNetTypeIndex == (UINT_8)prScanParam->eNetTypeIndex) { - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = prScanParam->ucSeqNum; - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanCancel.ucIsExtChannel = (UINT_8) prScanCancel->fgIsChannelExt; - } - else { - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - } -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - scnFsmRemovePendingMsg(prAdapter, prScanCancel->ucSeqNum, prScanCancel->ucNetTypeIndex); - } - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing (Legacy) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - if (prScanParam->ucSSIDType & (SCAN_REQ_SSID_SPECIFIED | SCAN_REQ_SSID_P2P_WILDCARD)) { - prScanParam->ucSSIDNum = 1; - - COPY_SSID(prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0], - prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength); - - // reset SSID length to zero for rest array entries - for(i = 1 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - else { - prScanParam->ucSSIDNum = 0; - - for(i = 0 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - - prScanParam->u2ProbeDelayTime = 0; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = FALSE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing - V2 with multiple SSID support -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - ASSERT(prScanReqMsg->ucSSIDNum <= SCN_SSID_MAX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - prScanParam->ucSSIDNum = prScanReqMsg->ucSSIDNum; - - for(i = 0 ; i < prScanReqMsg->ucSSIDNum ; i++) { - COPY_SSID(prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i], - prScanReqMsg->prSsid[i].aucSsid, - (UINT_8)prScanReqMsg->prSsid[i].u4SsidLen); - } - - prScanParam->u2ProbeDelayTime = prScanReqMsg->u2ProbeDelay; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = TRUE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Remove pending scan request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prPendingMsgHdr, prPendingMsgHdrNext, prRemoveMsgHdr = NULL; - P_LINK_ENTRY_T prRemoveLinkEntry = NULL; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - /* traverse through rPendingMsgList for removal */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingMsgHdr, - prPendingMsgHdrNext, - &(prScanInfo->rPendingMsgList), - rLinkEntry, - MSG_HDR_T) { - if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - P_MSG_SCN_SCAN_REQ prScanReqMsg = (P_MSG_SCN_SCAN_REQ)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsg->ucSeqNum && - ucNetTypeIndex == prScanReqMsg->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsg->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - else if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - P_MSG_SCN_SCAN_REQ_V2 prScanReqMsgV2 = (P_MSG_SCN_SCAN_REQ_V2)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsgV2->ucSeqNum && - ucNetTypeIndex == prScanReqMsgV2->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsgV2->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - - if(prRemoveLinkEntry) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - ucSeqNum, - ucNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* remove from pending list */ - LINK_REMOVE_KNOWN_ENTRY(&(prScanInfo->rPendingMsgList), prRemoveLinkEntry); - cnmMemFree(prAdapter, prRemoveMsgHdr); - - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // buffer empty channel information - if(prScanParam->eScanChannel == SCAN_CHANNEL_FULL - || prScanParam->eScanChannel == SCAN_CHANNEL_2G4) { - if(prScanDone->ucSparseChannelValid) { - prScanInfo->fgIsSparseChannelValid = TRUE; - prScanInfo->rSparseChannel.eBand = (ENUM_BAND_T)prScanDone->rSparseChannel.ucBand; - prScanInfo->rSparseChannel.ucChannelNum = prScanDone->rSparseChannel.ucChannelNum; - } - else { - prScanInfo->fgIsSparseChannelValid = FALSE; - } - } - - if(prScanInfo->eCurrentState == SCAN_STATE_SCANNING && - prScanDone->ucSeqNum == prScanParam->ucSeqNum) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_DONE); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - DBGLOG(SCN, LOUD, ("Unexpected SCAN-DONE event: SeqNum = %d, Current State = %d\n", - prScanDone->ucSeqNum, - prScanInfo->eCurrentState)); - } - - return; -} /* end of scnEventScanDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_DONE)); - if (!prScanDoneMsg) { - ASSERT(0); // Can't indicate SCAN FSM Complete - return; - } - - if(prScanParam->fgIsObssScan == TRUE) { - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_RLM_SCAN_DONE; - } - else { - switch((ENUM_NETWORK_TYPE_INDEX_T)ucNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_AIS_SCAN_DONE; - break; - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_P2P_SCAN_DONE; - break; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_BOW_SCAN_DONE; - break; -#endif - - default: - DBGLOG(SCN, LOUD, ("Unexpected Network Type: %d\n", ucNetTypeIndex)); - ASSERT(0); - break; - } - } - - prScanDoneMsg->ucSeqNum = ucSeqNum; - prScanDoneMsg->ucNetTypeIndex = ucNetTypeIndex; - prScanDoneMsg->eScanStatus = eScanStatus; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanDoneMsg, - MSG_SEND_METHOD_BUF); - -} /* end of scnFsmGenerateScanDoneMsg() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Query for most sparse channel -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ) -{ - P_SCAN_INFO_T prScanInfo; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if(prScanInfo->fgIsSparseChannelValid == TRUE) { - if(prSparseBand) { - *prSparseBand = prScanInfo->rSparseChannel.eBand; - } - - if(pucSparseChannel) { - *pucSparseChannel = prScanInfo->rSparseChannel.ucChannelNum; - } - - return TRUE; - } - else { - return FALSE; - } -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/sec_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/sec_fsm.c deleted file mode 100755 index 862b9fa64661..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/sec_fsm.c +++ /dev/null @@ -1,1255 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/sec_fsm.c#1 $ -*/ - -/*! \file "sec_fsm.c" - \brief This is the file implement security check state machine. - - In security module, do the port control check after success join to an AP, - and the path to NORMAL TR, the state machine handle these state transition. -*/ - - - -/* -** $Log: sec_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 19 2010 wh.su - * - * fixed the compilng error at debug mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 13 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine some code - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * code refine - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function name - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the state machine, to meet the firmware security design v1.1 - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugSecState[SEC_STATE_NUM] = { - (PUINT_8)DISP_STRING("SEC_STATE_INIT"), - (PUINT_8)DISP_STRING("SEC_STATE_INITIATOR_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_RESPONDER_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_CHECK_OK"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_EAPOL"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_DEAUTH"), - (PUINT_8)DISP_STRING("SEC_STATE_COUNTERMEASURE"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - #if 1 /* MT6620 */ - //At MT5921, is ok, but at MT6620, firmware base ASIC, the firmware - //will lost these data, thus, driver have to keep the wep material and - //setting to firmware while awake from D3. - #endif - - prSecInfo->eCurrentState = SEC_STATE_INIT; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - if (IS_STA_IN_AIS(prSta)) { - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prAisSpecBssInfo->u4RsnaLastMICFailTime = 0; - prAisSpecBssInfo->fgCheckEAPoLTxDone = FALSE; - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEapolTxTimeout, - (UINT_32)prSta); - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEndOfCounterMeasure, - (UINT_32)prSta); - - } - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do uninitialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID /* whsu:Todo: */ -secFsmUnInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - //nicPrivacyRemoveWlanTable(prSta->ucWTEntry); - - if (IS_STA_IN_AIS(prSta)) { - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer); - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* STANDBY to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to INITIATOR_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_INITIATOR_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to RESPONDER_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_RESPONDER_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INITIATOR_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INITIATOR_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* RESPONDER_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_RESPONDER_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* CHECK_OK to SEND_EAPOL -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_CHECK_OK_to_SEND_EAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - ASSERT(prSta); - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo->fgCheckEAPoLTxDone = TRUE; - - //cnmTimerStartTimer(prAdapter, - // &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer, - // SEC_TO_MSEC(EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_EAPOL to SEND_DEAUTH. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_EAPOL_to_SEND_DEAUTH ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - /* Compose deauth frame to AP, a call back function for tx done */ - if (authSendDeauthFrame(prAdapter, - prSta, - (P_SW_RFB_T)NULL, - REASON_CODE_MIC_FAILURE, - (PFN_TX_DONE_HANDLER)secFsmEventDeauthTxDone) != WLAN_STATUS_SUCCESS) { - ASSERT(FALSE); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_DEAUTH_to_COUNTERMEASURE ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prAdapter); - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - //Start the 60 sec timer - cnmTimerStartTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - SEC_TO_MSEC(COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_COUNTERMEASURE_to_INIT ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - //Clear the counter measure flag - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The Core FSM engine of security module. -* -* \param[in] prSta Pointer to the Sta record -* \param[in] eNextState Enum value of next sec STATE -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN ENUM_SEC_STATE_T eNextState - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - ASSERT(prSecInfo); - - DEBUGFUNC("secFsmSteps"); - do { - /* Do entering Next State */ - prSecInfo->ePreviousState = prSecInfo->eCurrentState; - - /* Do entering Next State */ -#if DBG - DBGLOG(RSN, STATE, ("\n"MACSTR" TRANSITION: [%s] -> [%s]\n\n", - MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState], - apucDebugSecState[eNextState])); -#else - DBGLOG(RSN, STATE, ("\n"MACSTR" [%d] TRANSITION: [%d] -> [%d]\n\n", - MAC2STR(prSta->aucMacAddr), - DBG_RSN_IDX, - prSecInfo->eCurrentState, - eNextState)); -#endif - prSecInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; -#if 0 - /* Do tasks of the State that we just entered */ - switch (prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - break; - case SEC_STATE_INITIATOR_PORT_BLOCKED: - break; - case SEC_STATE_RESPONDER_PORT_BLOCKED: - break; - case SEC_STATE_CHECK_OK: - break; - case SEC_STATE_SEND_EAPOL: - break; - case SEC_STATE_SEND_DEAUTH: - break; - case SEC_STATE_COUNTERMEASURE: - break; - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - } -#endif - } - while (fgIsTransition); - - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - ENUM_SEC_STATE_T eNextState; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart\n")); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - //prSta->fgTransmitKeyExist = FALSE; - //whsu:: nicPrivacySetStaDefaultWTIdx(prSta); - -#if 1 /* Since the 1x and key can set to firmware in order, always enter the check ok state */ - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); -#else - if (IS_STA_IN_AIS(prSta->eStaType)) { - if (secRsnKeyHandshakeEnabled(prAdapter) == TRUE -#if CFG_SUPPORT_WAPI - || (prAdapter->rWifiVar.rConnSettings.fgWapiMode) -#endif - ) { - prSta->fgTransmitKeyExist = FALSE; - //nicPrivacyInitialize(prSta->ucNetTypeIndex); - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); - } - } -#if CFG_ENABLE_WIFI_DIRECT || CFG_ENABLE_BT_OVER_WIFI - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_BT_OVER_WIFI - else if ((prSta->eStaType == STA_TYPE_BOW_CLIENT) || - (prSta->eStaType == STA_TYPE_P2P_GC)) - #elif CFG_ENABLE_WIFI_DIRECT - else if (prSta->eStaType == STA_TYPE_P2P_GC) - #elif CFG_ENABLE_BT_OVER_WIFI - else if (prSta->eStaType == STA_TYPE_BOW_CLIENT) - #endif - { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, RESPONDER_PORT_BLOCKED); - } -#endif - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } -#endif - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -} /* secFsmRunEventStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function called by reset procedure to force the sec fsm enter -* idle state -* -* \param[in] ucNetTypeIdx The Specific Network type index -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - DBGLOG(RSN, TRACE, ("secFsmEventAbort for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - prSta->fgTransmitKeyExist = FALSE; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - if (prSecInfo == NULL) - return; - - if (IS_STA_IN_AIS(prSta)) { - - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - if (prSecInfo->eCurrentState == SEC_STATE_SEND_EAPOL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone == FALSE) { - DBGLOG(RSN, TRACE, ("EAPOL STATE not match the flag\n")); - //cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - } - } - } - prSecInfo->eCurrentState = SEC_STATE_INIT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "2nd EAPoL Tx is sending" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent2ndEapolTx ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - //BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEvent2ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR" Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR" Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = TRUE; - break; - default: -#if DBG - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent2ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "4th EAPoL Tx is Tx done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent4ndEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_CMD_802_11_KEY prStoredKey; - - DEBUGFUNC("secFsmRunEvent4ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = FALSE; - if (prSecInfo->fgKeyStored) { - prStoredKey = (P_CMD_802_11_KEY)prSecInfo->aucStoredKey; - - //prSta = rxmLookupStaRecIndexFromTA(prStoredKey->aucPeerAddr); - //if (nicPrivacySetKeyEntry(prStoredKey, prSta->ucWTEntry) == FALSE) - // DBGLOG(RSN, WARN, ("nicPrivacySetKeyEntry() fail,..\n")); - - //key update - prSecInfo->fgKeyStored = FALSE; - prSta->fgTransmitKeyExist = TRUE; - } - if (prSecInfo->eCurrentState == SEC_STATE_INITIATOR_PORT_BLOCKED) { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - default: - -#if DBG - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent4ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Pairwise key installed" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \retval TRUE The key can be installed to HW -* \retval FALSE The kay conflict with the current key, abort it -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secFsmEventPTKInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgStatus = TRUE; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - if (prSecInfo == NULL) - return TRUE; /* Not PTK */ - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - eNextState = prSecInfo->eCurrentState; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - /* Legacy wep, wpa-none */ - break; - - case SEC_STATE_INITIATOR_PORT_BLOCKED: - if (prSecInfo->fg2nd1xSend) { - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - - case SEC_STATE_RESPONDER_PORT_BLOCKED: - SEC_STATE_TRANSITION(prAdapter, prSta, RESPONDER_PORT_BLOCKED, CHECK_OK); - break; - - - case SEC_STATE_CHECK_OK: - break; - - default: - fgStatus = FALSE; - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return fgStatus; - -} /* end of secFsmRunEventPTKInstalled() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Counter Measure" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStartCounterMeasure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventStartCounterMeasure"); - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - prAdapter->rWifiVar.rAisSpecificBssInfo.u4RsnaLastMICFailTime = 0; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_CHECK_OK: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = TRUE; - - // dls port control - SEC_STATE_TRANSITION(prAdapter, prSta, CHECK_OK, SEND_EAPOL); - } - break; - - default: - break; - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -} /* secFsmRunEventStartCounterMeasure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "802.1x EAPoL Tx Done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("secFsmRunEventEapolTxDone"); - - ASSERT(prStaRec); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(RSN, INFO, ("Error EAPoL fram fail to send!!\n")); - //ASSERT(0); - return; - } - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - prSecInfo = &prStaRec->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_EAPOL: - if (prAisBssInfo->fgCheckEAPoLTxDone == FALSE) { - ASSERT(0); - } - - prAisBssInfo->fgCheckEAPoLTxDone = FALSE; - //cnmTimerStopTimer(prAdapter, &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_EAPOL, SEND_DEAUTH); - break; - default: - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prStaRec, eNextState); - } - - return; - -}/* secFsmRunEventEapolTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Deauth frame Tx Done" to Sec FSM. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventDeauthTxDone"); - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - - if (!prStaRec) - return; - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = (P_SEC_INFO_T)&prStaRec->rSecInfo; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - - DBGLOG(RSN, TRACE, ("Set timer %d\n", COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_DEAUTH, COUNTERMEASURE); - - break; - - default: - ASSERT(0); - break; - } - - return; -}/* secFsmRunEventDeauthTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check the eapol error frame fail to send issue. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("secFsmRunEventEapolTxTimeout"); - - prStaRec = (P_STA_RECORD_T)u4Parm; - - ASSERT(prStaRec); - - /* Todo:: How to handle the Eapol Error fail to send case? */ - ASSERT(0); - - return; - -}/* secFsmEventEapolTxTimeout */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will stop the counterMeasure duration. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEndOfCounterMeasure ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prSta; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventEndOfCounterMeasure"); - - prSta = (P_STA_RECORD_T)u4Parm; - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = FALSE; - - SEC_STATE_TRANSITION(prAdapter, prSta, COUNTERMEASURE, INIT); - } - break; - - default: - ASSERT(0); - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -}/* end of secFsmRunEventEndOfCounterMeasure */ -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/swcr.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/swcr.c deleted file mode 100755 index e874511b848a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/swcr.c +++ /dev/null @@ -1,1264 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/swcr.c#1 $ -*/ - -/*! \file "swcr.c" - \brief - -*/ - - - -/* -** $Log: swcr.c $ - * - * 06 04 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined". - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * fix debug counters of rx in driver. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add swcr for test. - * -* -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_SWCR - -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if 0 -extern SWCR_MAP_ENTRY_T g_arRlmArSwCrMap[]; -SWCR_MOD_MAP_ENTRY_T g_arSwCrAllMaps[] = { - { SWCR_MAP_NUM(g_arRlmArSwCrMap), g_arRlmArSwCrMap}, /* 0x00nn */ - {0,NULL} -}; -#endif - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -void testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); - -/* Support Debug */ -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl); -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param); -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo); - -UINT_32 g_au4SwCr[SWCR_CR_NUM]; /*: 0: command other: data */ - -/* JB mDNS Filter*/ -UINT_32 g_u4mDNSRXFilter = 0; /* [31] 0: stop 1: start, [3] IPv6 [2] IPv4*/ - -static TIMER_T g_rSwcrDebugTimer; -static BOOLEAN g_fgSwcrDebugTimer = FALSE; -static UINT_32 g_u4SwcrDebugCheckTimeout = 0; -static ENUM_SWCR_DBG_TYPE_T g_ucSwcrDebugCheckType = 0; -static UINT_32 g_u4SwcrDebugFrameDumpType = 0; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#define TEST_PS 1 - -const static PFN_CMD_RW_T g_arSwCtrlCmd[] ={ - swCtrlCmdCategory0, - swCtrlCmdCategory1 -#if TEST_PS - , testPsCmdCategory0 - , testPsCmdCategory1 -#endif -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) - , testWNMCmdCategory0 -#endif -#endif -}; - - -const PFN_SWCR_RW_T g_arSwCrModHandle[] = { - swCtrlSwCr, - NULL -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -enum { - SWCTRL_MAGIC, - SWCTRL_DEBUG, - SWCTRL_WIFI_VAR, - SWCTRL_ENABLE_INT, - SWCTRL_DISABLE_INT, - SWCTRL_TXM_INFO, - SWCTRL_RXM_INFO, - SWCTRL_DUMP_BSS, - SWCTRL_QM_INFO, - SWCTRL_DUMP_ALL_QUEUE_LEN, - SWCTRL_DUMP_MEM, - SWCTRL_TX_CTRL_INFO, - SWCTRL_DUMP_QUEUE, - SWCTRL_DUMP_QM_DBG_CNT, - SWCTRL_QM_DBG_CNT, - SWCTRL_RX_PKTS_DUMP, - SWCTRL_RX_MDNS_FILTER, - SWCTRL_CATA0_INDEX_NUM -}; - -enum { - SWCTRL_STA_INFO, - SWCTRL_DUMP_STA, - SWCTRL_STA_QUE_INFO, - SWCTRL_CATA1_INDEX_NUM -}; - -/* JB mDNS Filter*/ -#define RX_MDNS_FILTER_START (1<<31) -#define RX_MDNS_FILTER_IPV4 (1<<2) -#define RX_MDNS_FILTER_IPV6 (1<<3) -typedef enum _ENUM_SWCR_RX_MDNS_FILTER_CMD_T { - SWCR_RX_MDNS_FILTER_CMD_STOP = 0, - SWCR_RX_MDNS_FILTER_CMD_START, - SWCR_RX_MDNS_FILTER_CMD_ADD, - SWCR_RX_MDNS_FILTER_CMD_REMOVE, - SWCR_RX_MDNS_FILTER_NUM -} ENUM_SWCR_RX_MDNS_FILTER_CMD_T; - -#if TEST_PS -enum { - TEST_PS_MAGIC, - TEST_PS_SETUP_BSS, - TEST_PS_ENABLE_BEACON, - TEST_PS_TRIGGER_BMC, - TEST_PS_SEND_NULL, - TEST_PS_BUFFER_BMC, - TEST_PS_UPDATE_BEACON, - TEST_PS_CATA0_INDEX_NUM -}; - -enum { - TEST_PS_STA_PS, - TEST_PS_STA_ENTER_PS, - TEST_PS_STA_EXIT_PS, - TEST_PS_STA_TRIGGER_PSPOLL, - TEST_PS_STA_TRIGGER_FRAME, - TEST_PS_CATA1_INDEX_NUM -}; -#endif - -#if CFG_SUPPORT_802_11V -#if WNM_UNIT_TEST -enum { - TEST_WNM_TIMING_MEAS, - TEST_WNM_CATA0_INDEX_NUM -}; -#endif -#endif - - -#define _SWCTRL_MAGIC 0x66201642 - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -void dumpQueue(P_ADAPTER_T prAdapter) -{ - - P_TX_CTRL_T prTxCtrl; - P_QUE_MGT_T prQM; - P_GLUE_INFO_T prGlueInfo; - UINT_32 i; - UINT_32 j; - - - DEBUGFUNC("dumpQueue"); - - prTxCtrl = &prAdapter->rTxCtrl; - prQM = &prAdapter->rQM; - prGlueInfo = prAdapter->prGlueInfo; - - for(i = TC0_INDEX; i<=TC5_INDEX; i++) { - DBGLOG(SW4, INFO,( "TC %u\n",i)); - DBGLOG(SW4, INFO,( "Max %u Free %u\n", - prTxCtrl->rTc.aucMaxNumOfBuffer[i], prTxCtrl->rTc.aucFreeBufferCount[i])); - - DBGLOG(SW4, INFO,("Average %u minReserved %u CurrentTcResource %u GuaranteedTcResource %u\n", - QM_GET_TX_QUEUE_LEN(prAdapter, i), - prQM->au4MinReservedTcResource[i], - prQM->au4CurrentTcResource[i], - prQM->au4GuaranteedTcResource[i])); - - } - - - for(i = 0; iau4HeadStaRecIndex[i],prQM->au4ForwardCount[i])); - } - - DBGLOG(SW4, INFO,( "BMC or unknown TxQueue Len %u\n",prQM->arTxQueue[0].u4NumElem)); - DBGLOG(SW4, INFO,( "Pending %d\n",prGlueInfo->i4TxPendingFrameNum)); - DBGLOG(SW4, INFO,( "Pending Security %d\n",prGlueInfo->i4TxPendingSecurityFrameNum)); -#if defined(LINUX) - for(i=0;i<4;i++){ - for(j=0;jai4TxPendingFrameNumPerQueue[i][j])); - } - } -#endif - - DBGLOG(SW4, INFO,( " rFreeSwRfbList %u\n", prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rReceivedRfbList %u\n", prAdapter->rRxCtrl.rReceivedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rIndicatedRfbList %u\n", prAdapter->rRxCtrl.rIndicatedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " ucNumIndPacket %u\n", prAdapter->rRxCtrl.ucNumIndPacket)); - DBGLOG(SW4, INFO,( " ucNumRetainedPacket %u\n", prAdapter->rRxCtrl.ucNumRetainedPacket)); - - -} - - -void dumpSTA(P_ADAPTER_T prAdapter, P_STA_RECORD_T prStaRec) -{ - UINT_8 ucWTEntry; - UINT_32 i; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("dumpSTA"); - - ASSERT(prStaRec); - ucWTEntry = prStaRec->ucWTEntry; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(SW4, INFO,("Mac address: " MACSTR " Rcpi %u" "\n", MAC2STR(prStaRec->aucMacAddr),prStaRec->ucRCPI)); - - DBGLOG(SW4, INFO,("Idx %u Wtbl %u Used %u State %u Bss Phy 0x%x Sta DesiredPhy 0x%x\n", - prStaRec->ucIndex, ucWTEntry, - prStaRec->fgIsInUse,prStaRec->ucStaState, - prBssInfo->ucPhyTypeSet, - prStaRec->ucDesiredPhyTypeSet)); - - DBGLOG(SW4, INFO,("Sta Operation 0x%x DesiredNontHtRateSet 0x%x Mcs 0x%x u2HtCapInfo 0x%x\n", - prStaRec->u2OperationalRateSet,prStaRec->u2DesiredNonHTRateSet,prStaRec->ucMcsSet, prStaRec->u2HtCapInfo)); - - - for(i = 0; iarTxQueue[i].u4NumElem)); - } - - DBGLOG(SW4, INFO, ("BmpDeliveryAC %x\n",prStaRec->ucBmpDeliveryAC)); - DBGLOG(SW4, INFO, ("BmpTriggerAC %x\n",prStaRec->ucBmpTriggerAC)); - DBGLOG(SW4, INFO, ("UapsdSpSupproted %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("IsQoS %u\n",prStaRec->fgIsQoS)); - DBGLOG(SW4, INFO, ("AssocId %u\n",prStaRec->u2AssocId)); - - DBGLOG(SW4, INFO, ("fgIsInPS %u\n",prStaRec->fgIsInPS)); - DBGLOG(SW4, INFO, ("ucFreeQuota %u\n",prStaRec->ucFreeQuota)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForDelivery %u\n",prStaRec->ucFreeQuotaForDelivery)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForNonDelivery %u\n",prStaRec->ucFreeQuotaForNonDelivery)); - - -#if 0 - DBGLOG(SW4, INFO, ("IsQmmSup %u\n",prStaRec->fgIsWmmSupported)); - DBGLOG(SW4, INFO, ("IsUapsdSup %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("AvailabaleDeliverPkts %u\n",prStaRec->ucAvailableDeliverPkts)); - DBGLOG(SW4, INFO, ("BmpDeliverPktsAC %u\n",prStaRec->u4BmpDeliverPktsAC)); - DBGLOG(SW4, INFO, ("BmpBufferAC %u\n",prStaRec->u4BmpBufferAC)); - DBGLOG(SW4, INFO, ("BmpNonDeliverPktsAC %u\n",prStaRec->u4BmpNonDeliverPktsAC)); -#endif - - for(i=0;iaprRxReorderParamRefTbl[i]){ - DBGLOG(SW4, INFO,("RxReorder fgIsValid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->fgIsValid)); - DBGLOG(SW4, INFO,("RxReorder Tid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->ucTid)); - DBGLOG(SW4, INFO,("RxReorder rReOrderQue Len: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->rReOrderQue.u4NumElem)); - DBGLOG(SW4, INFO,("RxReorder WinStart: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinStart)); - DBGLOG(SW4, INFO,("RxReorder WinEnd: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinEnd)); - DBGLOG(SW4, INFO,("RxReorder WinSize: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinSize)); - } - } - -} - - -VOID dumpBss(P_ADAPTER_T prAdapter, P_BSS_INFO_T prBssInfo) -{ - - DBGLOG(SW4, INFO, ("SSID %s\n",prBssInfo->aucSSID)); - DBGLOG(SW4, INFO, ("OWN " MACSTR"\n",MAC2STR(prBssInfo->aucOwnMacAddr))); - DBGLOG(SW4, INFO, ("BSSID " MACSTR"\n",MAC2STR(prBssInfo->aucBSSID))); - DBGLOG(SW4, INFO, ("ucNetTypeIndex %u\n",prBssInfo->ucNetTypeIndex)); - DBGLOG(SW4, INFO, ("eConnectionState %u\n",prBssInfo->eConnectionState)); - DBGLOG(SW4, INFO, ("eCurrentOPMode %u\n",prBssInfo->eCurrentOPMode)); - DBGLOG(SW4, INFO, ("fgIsQBSS %u\n",prBssInfo->fgIsQBSS)); - DBGLOG(SW4, INFO, ("fgIsShortPreambleAllowed %u\n",prBssInfo->fgIsShortPreambleAllowed)); - DBGLOG(SW4, INFO, ("fgUseShortPreamble %u\n",prBssInfo->fgUseShortPreamble)); - DBGLOG(SW4, INFO, ("fgUseShortSlotTime %u\n",prBssInfo->fgUseShortSlotTime)); - DBGLOG(SW4, INFO, ("ucNonHTBasicPhyType %x\n",prBssInfo->ucNonHTBasicPhyType)); - DBGLOG(SW4, INFO, ("u2OperationalRateSet %x\n",prBssInfo->u2OperationalRateSet)); - DBGLOG(SW4, INFO, ("u2BSSBasicRateSet %x\n",prBssInfo->u2BSSBasicRateSet)); - DBGLOG(SW4, INFO, ("ucPhyTypeSet %x\n",prBssInfo->ucPhyTypeSet)); - DBGLOG(SW4, INFO, ("rStaRecOfClientList %d\n",prBssInfo->rStaRecOfClientList.u4NumElem)); - DBGLOG(SW4, INFO, ("u2CapInfo %x\n",prBssInfo->u2CapInfo)); - DBGLOG(SW4, INFO, ("u2ATIMWindow %x\n",prBssInfo->u2ATIMWindow)); - DBGLOG(SW4, INFO, ("u2AssocId %x\n",prBssInfo->u2AssocId)); - DBGLOG(SW4, INFO, ("ucDTIMPeriod %x\n",prBssInfo->ucDTIMPeriod)); - DBGLOG(SW4, INFO, ("ucDTIMCount %x\n",prBssInfo->ucDTIMCount)); - DBGLOG(SW4, INFO, ("fgIsNetAbsent %x\n", prBssInfo->fgIsNetAbsent)); - DBGLOG(SW4, INFO, ("eBand %d\n", prBssInfo->eBand)); - DBGLOG(SW4, INFO, ("ucPrimaryChannel %d\n", prBssInfo->ucPrimaryChannel)); - DBGLOG(SW4, INFO, ("ucHtOpInfo1 %d\n", prBssInfo->ucHtOpInfo1)); - DBGLOG(SW4, INFO, ("ucHtOpInfo2 %d\n", prBssInfo->u2HtOpInfo2)); - DBGLOG(SW4, INFO, ("ucHtOpInfo3 %d\n", prBssInfo->u2HtOpInfo3)); - DBGLOG(SW4, INFO, ("fgErpProtectMode %d\n", prBssInfo->fgErpProtectMode)); - DBGLOG(SW4, INFO, ("eHtProtectMode %d\n", prBssInfo->eHtProtectMode)); - DBGLOG(SW4, INFO, ("eGfOperationMode %d\n", prBssInfo->eGfOperationMode)); - DBGLOG(SW4, INFO, ("eRifsOperationMode %d\n", prBssInfo->eRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgObssErpProtectMode %d\n", prBssInfo->fgObssErpProtectMode)); - DBGLOG(SW4, INFO, ("eObssHtProtectMode %d\n", prBssInfo->eObssHtProtectMode)); - DBGLOG(SW4, INFO, ("eObssGfProtectMode %d\n", prBssInfo->eObssGfOperationMode)); - DBGLOG(SW4, INFO, ("fgObssRifsOperationMode %d\n", prBssInfo->fgObssRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgAssoc40mBwAllowed %d\n", prBssInfo->fgAssoc40mBwAllowed)); - DBGLOG(SW4, INFO, ("fg40mBwAllowed %d\n", prBssInfo->fg40mBwAllowed)); - DBGLOG(SW4, INFO, ("eBssSCO %d\n", prBssInfo->eBssSCO)); - - -} - - - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_32 i; - - DEBUGFUNC("swCtrlCmdCategory0"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - i=0; - - if(ucIndex>=SWCTRL_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case SWCTRL_DEBUG: -#if DBG - aucDebugModule[ucOpt0] = (UINT_8)g_au4SwCr[1]; -#endif - break; - case SWCTRL_WIFI_VAR: - break; - -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i] = 0; - } - break; - case SWCTRL_QM_DBG_CNT: - prAdapter->rQM.au4QmDebugCounters[ucOpt0] = g_au4SwCr[1]; - - break; -#endif -#if CFG_RX_PKTS_DUMP - case SWCTRL_RX_PKTS_DUMP: - //DBGLOG(SW4, INFO,("SWCTRL_RX_PKTS_DUMP: mask %x\n", g_au4SwCr[1])); - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = g_au4SwCr[1]; - break; -#endif - case SWCTRL_RX_MDNS_FILTER: - { - UINT_32 u4rxfilter; - BOOLEAN fgUpdate = FALSE; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_STOP) { - g_u4mDNSRXFilter &= ~(RX_MDNS_FILTER_START); - - u4rxfilter = prAdapter->u4OsPacketFilter; - fgUpdate = TRUE; - } - else if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_START) { - g_u4mDNSRXFilter |= (RX_MDNS_FILTER_START); - - u4rxfilter = prAdapter->u4OsPacketFilter; - if ((g_u4mDNSRXFilter & RX_MDNS_FILTER_IPV4) || - (g_u4mDNSRXFilter & RX_MDNS_FILTER_IPV6)) { - u4rxfilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - fgUpdate = TRUE; - } - else if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_ADD) { - if (ucOpt1 < 31) { - g_u4mDNSRXFilter |= (1<rQM; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = (QM_GET_TX_QUEUE_LEN(prAdapter, ucOpt1)) ; - g_au4SwCr[2] = prQM->au4MinReservedTcResource[ucOpt1] ; - g_au4SwCr[3] = prQM->au4CurrentTcResource[ucOpt1]; - g_au4SwCr[4] = prQM->au4GuaranteedTcResource[ucOpt1]; - break; - - case 1: - g_au4SwCr[1] = prQM->au4ForwardCount[ucOpt1]; - g_au4SwCr[2] = prQM->au4HeadStaRecIndex[ucOpt1]; - break; - - case 2: - g_au4SwCr[1] = prQM->arTxQueue[ucOpt1].u4NumElem; /* only one */ - - - break; - } - - } - case SWCTRL_TX_CTRL_INFO: - { - P_TX_CTRL_T prTxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = prAdapter->rTxCtrl.rTc.aucFreeBufferCount[ucOpt1]; - g_au4SwCr[2] = prAdapter->rTxCtrl.rTc.aucMaxNumOfBuffer[ucOpt1]; - break; - } - - } - break; - case SWCTRL_DUMP_QUEUE: - dumpQueue(prAdapter); - - break; -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i])); - } - break; - - case SWCTRL_QM_DBG_CNT: - g_au4SwCr[1] = prAdapter->rQM.au4QmDebugCounters[ucOpt0]; - break; -#endif - case SWCTRL_DUMP_BSS: - { - dumpBss(prAdapter, &(prAdapter->rWifiVar.arBssInfo[ucOpt0])) ; - } - break; - - default: - break; - } - - } -} - - -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("swCtrlCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - //prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - prStaRec = &prAdapter->arStaRec[ucOpt0]; - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - } - else { - /* Read */ - switch(ucIndex) { - case SWCTRL_STA_QUE_INFO: - { - g_au4SwCr[1] = prStaRec->arTxQueue[ucOpt1].u4NumElem; - } - break; - case SWCTRL_STA_INFO: - switch(ucOpt1) { - case 0: - g_au4SwCr[1] = prStaRec->fgIsInPS; - break; - } - - break; - - case SWCTRL_DUMP_STA: - { - dumpSTA(prAdapter, prStaRec); - } - break; - - default: - - break; - } - } - - -} - -#if TEST_PS - -VOID -testPsSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN UINT_8 ucNetTypeIndex, - IN BOOLEAN fgBMC, - IN BOOLEAN fgIsBurstEnd, - IN BOOLEAN ucPacketType, - IN BOOLEAN ucPsSessionID, - IN BOOLEAN fgSetEOSP - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - - - DEBUGFUNC("testPsSendQoSNullFrame"); - DBGLOG(SW4, LOUD, ("\n")); - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SW4, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return ; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - fgSetEOSP); - - - prMsduInfo->eSrc = TX_PACKET_MGMT; - //prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucPacketType = ucPacketType; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - prMsduInfo->fgIsBurstEnd = fgIsBurstEnd; - prMsduInfo->ucUserPriority = ucUP; - prMsduInfo->ucPsSessionID = ucPsSessionID /* 0~7 Test 7 means NOACK*/; - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)( (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD) ); - - if(fgBMC) { - prQoSNullFrame->aucAddr1[0] = 0xfd; - } - else { - prQoSNullFrame->aucAddr1[5] = 0xdd; - } - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - - -VOID -testPsSetupBss( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetworkTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; - - DEBUGFUNC("testPsSetupBss()"); - DBGLOG(SW4, INFO, ("index %d\n", ucNetworkTypeIndex)); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetworkTypeIndex]); - - //4 <1.2> Initiate PWR STATE - //SET_NET_PWR_STATE_IDLE(prAdapter, ucNetworkTypeIndex); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, ucNetworkTypeIndex); - - prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eCurrentOPMode = OP_MODE_ACCESS_POINT; - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->ucNetTypeIndex = (ucNetworkTypeIndex); - prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->u2BSSBasicRateSet = RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->fgIsQBSS = TRUE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = 100; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - - prBssInfo->ucBeaconTimeoutCount = 0; - - - bssInitForAP (prAdapter,prBssInfo, TRUE); - - COPY_MAC_ADDR(prBssInfo->aucBSSID, _aucZeroMacAddr); - LINK_INITIALIZE(&prBssInfo->rStaRecOfClientList); - prBssInfo->fgIsBeaconActivated = TRUE; - prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; - - - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 1; - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - - //prBssInfo->fgErpProtectMode = eErpProectMode; - //prBssInfo->eHtProtectMode = eHtProtectMode; - //prBssInfo->eGfOperationMode = eGfOperationMode; - - - //4 <4> Allocate MSDU_INFO_T for Beacon - prBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prBssInfo->prBeacon) { - prBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prBssInfo->prBeacon->ucNetworkType = ucNetworkTypeIndex; - } - else { - DBGLOG(SW4, INFO, ("prBeacon allocation fail\n")); - } - -#if 0 - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - -#if 0 - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prBssInfo->arACQueParms[eAci].fgIsACMSet = FALSE; - prBssInfo->arACQueParms[eAci].u2Aifsn = (UINT_16) eAci; - prBssInfo->arACQueParms[eAci].u2CWmin = 7; - prBssInfo->arACQueParms[eAci].u2CWmax = 31; - prBssInfo->arACQueParms[eAci].u2TxopLimit = eAci+1; - DBGLOG(SW4, INFO, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prBssInfo->arACQueParms[eAci].fgIsACMSet , - prBssInfo->arACQueParms[eAci].u2Aifsn, - prBssInfo->arACQueParms[eAci].u2CWmin, - prBssInfo->arACQueParms[eAci].u2CWmax, - prBssInfo->arACQueParms[eAci].u2TxopLimit)); - - } -#endif - - - DBGLOG(SW4, INFO, ("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - prBssInfo->rPmProfSetupInfo.ucUapsdSp)); - - return; -} - - - - -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, LOUD, ("Read %u Index %u\n",ucRead,ucIndex)); - - prStaRec = cnmGetStaRecByIndex (prAdapter, 0); - - if(ucIndex>=TEST_PS_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_PS_SETUP_BSS: - testPsSetupBss(prAdapter, ucOpt0) ; - break; - - case TEST_PS_ENABLE_BEACON: - break; - - case TEST_PS_TRIGGER_BMC: - //txmForwardQueuedBmcPkts (ucOpt0); - break; - case TEST_PS_SEND_NULL: - { - - testPsSendQoSNullFrame (prAdapter,prStaRec, - (UINT_8)(g_au4SwCr[1] & 0xFF), /* UP */ - ucOpt0, - (BOOLEAN)((g_au4SwCr[1] >>8)& 0xFF), /* BMC*/ - (BOOLEAN)((g_au4SwCr[1] >>16)& 0xFF), /* BurstEnd*/ - (BOOLEAN)((g_au4SwCr[1] >>24)& 0xFF), /* Packet type*/ - (UINT_8)((g_au4SwCr[2] )& 0xFF), /* PS sesson ID 7: NOACK */ - FALSE /* EOSP */ - ); - } - break; - case TEST_PS_BUFFER_BMC: - //g_aprBssInfo[ucOpt0]->fgApToBufferBMC = (g_au4SwCr[1] & 0xFF); - break; - case TEST_PS_UPDATE_BEACON: - bssUpdateBeaconContent(prAdapter, ucOpt0 /*networktype*/ ); - break; - - default: - break; - } - } - else { - switch(ucIndex) { - - case TEST_PS_MAGIC: - g_au4SwCr[1] = 0x88660011 ; - break; - - } - } -} - -#endif //TEST_PS - -#if TEST_PS - -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - - switch(ucIndex) { - case TEST_PS_STA_PS: - prStaRec->fgIsInPS = (BOOLEAN) (g_au4SwCr[1] & 0x1); - prStaRec->fgIsQoS = (BOOLEAN) (g_au4SwCr[1] >>8 & 0xFF); - prStaRec->fgIsUapsdSupported = (BOOLEAN) (g_au4SwCr[1] >>16 & 0xFF); - prStaRec->ucBmpDeliveryAC = (BOOLEAN) (g_au4SwCr[1] >>24 & 0xFF); - break; - - } - - } - else { - /* Read */ - switch(ucIndex) { - default: - break; - } - } - - -} - -#endif //TEST_PS - -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) -VOID testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testWNMCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, INFO, ("Read %u Index %u\n",ucRead,ucIndex)); - - if(ucIndex>=TEST_WNM_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_WNM_TIMING_MEAS: - wnmTimingMeasUnitTest1(prAdapter, ucOpt0) ; - break; - - default: - break; - } - } -} -#endif //TEST_WNM -#endif //CFG_SUPPORT_802_11V - -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - /* According other register STAIDX */ - UINT_8 ucOffset; - ucOffset = (u2Addr>>2) & 0x3F; - - if(ucOffset>= SWCR_CR_NUM) return; - - if(ucRead==SWCR_WRITE) { - g_au4SwCr[ucOffset] = *pu4Data; - if(ucOffset==0x0) { - /* Commmand [31:24]: Category */ - /* Commmand [23:23]: 1(W) 0(R) */ - /* Commmand [22:16]: Index */ - /* Commmand [15:08]: Option0 */ - /* Commmand [07:00]: Option1 */ - UINT_8 ucCate; - UINT_32 u4Cmd; - u4Cmd = g_au4SwCr[0]; - ucCate = (UINT_8)(u4Cmd >> 24) ; - if(ucCate < sizeof(g_arSwCtrlCmd)/sizeof(g_arSwCtrlCmd[0])) { - if(g_arSwCtrlCmd[ucCate]!=NULL) { - g_arSwCtrlCmd[ucCate](prAdapter, ucCate, (UINT_8)(u4Cmd>>16 & 0xFF),(UINT_8)((u4Cmd>>8) & 0xFF), (UINT_8)(u4Cmd&0xFF)); - } - } - } - } - else { - *pu4Data = g_au4SwCr[ucOffset]; - } -} - -VOID swCrReadWriteCmd(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - UINT_8 ucMod; - - ucMod = u2Addr >>8; - /* Address [15:8] MOD ID */ - /* Address [7:0] OFFSET */ - - DEBUGFUNC("swCrReadWriteCmd"); - DBGLOG(SW4, INFO, ("%u addr 0x%x data 0x%x\n",ucRead,u2Addr,*pu4Data)); - - if(ucMod < (sizeof(g_arSwCrModHandle)/sizeof(g_arSwCrModHandle[0])) ) { - - if(g_arSwCrModHandle[ucMod]!=NULL) { - g_arSwCrModHandle[ucMod](prAdapter, ucRead, u2Addr, pu4Data); - } - } /* ucMod */ -} - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType) -{ - g_u4SwcrDebugFrameDumpType = u4DumpType; - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = u4DumpType; -} - -VOID swCrDebugInit(P_ADAPTER_T prAdapter) -{ - // frame dump - if (g_u4SwcrDebugFrameDumpType) { - swCrFrameCheckEnable(prAdapter, g_u4SwcrDebugFrameDumpType); - } - - // debug counter - g_fgSwcrDebugTimer = FALSE; - - cnmTimerInitTimer(prAdapter, - &g_rSwcrDebugTimer, - (PFN_MGMT_TIMEOUT_FUNC)swCrDebugCheckTimeout, - (UINT_32) NULL); - - if (g_u4SwcrDebugCheckTimeout) { - swCrDebugCheckEnable(prAdapter, TRUE, g_ucSwcrDebugCheckType, g_u4SwcrDebugCheckTimeout); - } -} - -VOID swCrDebugUninit(P_ADAPTER_T prAdapter) -{ - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - - g_fgSwcrDebugTimer = FALSE; -} - -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout) -{ - if (fgIsEnable) { - g_ucSwcrDebugCheckType = ucType; - g_u4SwcrDebugCheckTimeout = u4Timeout; - if (g_fgSwcrDebugTimer == FALSE) { - swCrDebugCheckTimeout(prAdapter, 0); - } - } - else { - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - g_u4SwcrDebugCheckTimeout = 0; - } - - g_fgSwcrDebugTimer = fgIsEnable; -} - -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - // dump counters - if (prCmdSwCtrl) { - if (prCmdSwCtrl->u4Data == SWCR_DBG_TYPE_ALL) { - - // TX Counter from fw - DBGLOG(SW4, INFO, ("TX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_BCN_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_FAILED_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_RETRY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_MGNT_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_ERROR_CNT])); -#if 1 - // TX Counter from drv - DBGLOG(SW4, INFO, ("TX1\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_BSS_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_STA_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_FORWARD_OVERFLOW_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_AP_BORADCAST_DROP))); -#endif - - // RX Counter - DBGLOG(SW4, INFO, ("RX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DUP_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FIFOFULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_PFDROP_CNT])); - - DBGLOG(SW4, INFO, ("RX1\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)RX_GET_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT))); - - DBGLOG(SW4, INFO, ("PWR\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PS_POLL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_IND_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE1], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF1])); - - DBGLOG(SW4, INFO, ("ARM\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RATE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_BWGI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ENABLE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ROAM_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_INT_CNT])); - - DBGLOG(SW4, INFO, ("BB\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_MDRDY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SFDERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SIGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT])); - - } - } - - // start the next check - if (g_u4SwcrDebugCheckTimeout) { - cnmTimerStartTimer(prAdapter, &g_rSwcrDebugTimer, g_u4SwcrDebugCheckTimeout * MSEC_PER_SEC); - } -} - -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param) -{ - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rStatus; - - rCmdSwCtrl.u4Id = (0xb000<<16) + g_ucSwcrDebugCheckType; - rCmdSwCtrl.u4Data = 0; - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SW_DBG_CTRL, /* ucCID */ - FALSE, /* fgSetQuery */ - TRUE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - swCrDebugQuery, /* pfCmdDoneHandler */ - swCrDebugQueryTimeout, /* pfCmdTimeoutHandler */ - sizeof(CMD_SW_DBG_CTRL_T), /* u4SetQueryInfoLen */ - (PUINT_8)&rCmdSwCtrl, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} - -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, (P_CMD_SW_DBG_CTRL_T)(pucEventBuf)); -} - -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, NULL); -} - -#endif /* CFG_SUPPORT_SWCR */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/wapi.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/wapi.c deleted file mode 100755 index 4d2337851489..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/wapi.c +++ /dev/null @@ -1,522 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/wapi.c#1 $ -*/ - -/*! \file "wapi.c" - \brief This file including the WAPI related function. - - This file provided the macros and functions library support the wapi ie parsing, - cipher and AKM check to help the AP seleced deciding. -*/ - - - -/* -** $Log: wapi.c $ -** -** 10 24 2012 wh.su -** [ALPS00376392] [klocwork 9.1] in wapi.c, line 344 -** Use MAX_NUM_SUPPORTED_WAPI_AKM_SUITESfor avoid Klocwork warning. -** -** 10 24 2012 wh.su -** [ALPS00376391] [klocwork 9.1] in wapi.c, line 311 -** Use the MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES for avoid Klccwork waring. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * fixed the network type - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 20 2010 wh.su - * - * . - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to check and update the default wapi tx - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the generate wapi ie function, and replace the tabe by space - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wapiGenerateWAPIIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 68 :0x44 */ - if (/* prWlanInfo->fgWapiMode && */ prAdapter->prGlueInfo->u2WapiAssocInfoIESz) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWapiAssocInfoIEs, prAdapter->prGlueInfo->u2WapiAssocInfoIESz); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WapiAssocInfoIESz; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WAPI IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** WAPI information from the given WAPI IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWapiIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WAPI_CIPHER_SUITE_WPI; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - - DEBUGFUNC("wapiParseWapiIE"); - - ASSERT(prInfoElem); - ASSERT(prWapiInfo); - - /* Verify the length of the WAPI IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(SEC, TRACE, ("WAPI IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WAPI version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(SEC, TRACE, ("Unsupported WAPI IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u2AuthKeyMgtSuiteCount; - u4RemainWapiIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainWapiIeLen == 0) { - break; - } - - /* - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - GroupSuite : 4 - Cap : 2 */ - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - if (u4RemainWapiIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWapiIeLen < 4) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWapiIeLen -= 4; - - /* Parse the WAPI u2Capabilities field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in WAPI capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWapiIeLen -= 2; - - /* Todo:: BKID support */ - } while (FALSE); - - /* Save the WAPI information for the BSS. */ - - prWapiInfo->ucElemId = ELEM_ID_WAPI; - - prWapiInfo->u2Version = u2Version; - - prWapiInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(SEC, LOUD, ("WAPI: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES; - } - - prWapiInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWapiInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(SEC, LOUD,("WAPI: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WAPI: WPI. */ - prWapiInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWapiInfo->au4PairwiseKeyCipherSuite[0] = WAPI_CIPHER_SUITE_WPI; - - DBGLOG(SEC, LOUD, ("WAPI: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_WAPI_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_WAPI_AKM_SUITES; - } - - prWapiInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWapiInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WAPI. */ - prWapiInfo->u4AuthKeyMgtSuiteCount = 1; - prWapiInfo->au4AuthKeyMgtSuite[0] = WAPI_AKM_SUITE_802_1X; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prWapiInfo->u2WapiCap = u2Cap; - DBGLOG(SEC, LOUD, ("WAPI: cap: 0x%04x\n", prWapiInfo->u2WapiCap)); - - return TRUE; -} /* wapiParseWapiIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform WAPI policy selection for a given BSS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The WAPI policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The WAPI policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - UINT_32 i; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_WAPI_INFO_T prBssWapiInfo; - P_WLAN_INFO_T prWlanInfo; - - DEBUGFUNC("wapiPerformPolicySelection"); - - ASSERT(prBss); - - /* Notice!!!! WAPI AP not set the privacy bit for WAI and WAI-PSK at WZC configuration mode */ - prWlanInfo = &prAdapter->rWlanInfo; - - if (prBss->fgIEWAPI) { - prBssWapiInfo = &prBss->rIEWAPI; - } - else { - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode == FALSE) { - DBGLOG(SEC, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(SEC, TRACE, ("WAPI Information Element does not exist.\n")); - return FALSE; - } - } - - /* Select pairwise/group ciphers */ - for (i = 0; i < prBssWapiInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (prBssWapiInfo->au4PairwiseKeyCipherSuite[i] == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher) { - u4PairwiseCipher = prBssWapiInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (prBssWapiInfo->u4GroupKeyCipherSuite == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher) - u4GroupCipher = prBssWapiInfo->u4GroupKeyCipherSuite; - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(SEC, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ - for (i = 0; i < prBssWapiInfo->u4AuthKeyMgtSuiteCount; i++) { - if (prBssWapiInfo->au4AuthKeyMgtSuite[i] == prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite) { - u4AkmSuite = prBssWapiInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(SEC, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(SEC, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(SEC, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - - return TRUE; -} /* wapiPerformPolicySelection */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is use for wapi mode, to update the current wpi tx idx ? 0 :1 . -* -* \param[in] prStaRec Pointer to the Sta record -* \param[out] ucWlanIdx The Rx status->wlanidx field -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiUpdateTxKeyIdx ( - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucWlanIdx - ) -{ - UINT_8 ucKeyId; - - if ((ucWlanIdx & BITS(0, 3)) == CIPHER_SUITE_WPI) { - - ucKeyId = ((ucWlanIdx & BITS(4, 5)) >> 4); - - if (ucKeyId != g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey) { - DBGLOG(RSN, STATE, ("Change wapi key index from %d->%d\n", g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey, ucKeyId)); - g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey = ucKeyId; - - prStaRec->ucWTEntry = - (ucKeyId == WTBL_AIS_BSSID_WAPI_IDX_0) ? WTBL_AIS_BSSID_WAPI_IDX_0 : WTBL_AIS_BSSID_WAPI_IDX_1; - } - } -} -#endif -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/wnm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/wnm.c deleted file mode 100755 index c6871df87ce7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/mgmt/wnm.c +++ /dev/null @@ -1,349 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/mgmt/wnm.c#1 $ -*/ - -/*! \file "wnm.c" - \brief This file includes the 802.11v default vale and functions. -*/ - - - -/* -** $Log: wnm.c $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_802_11V - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define WNM_MAX_TOD_ERROR 0 -#define WNM_MAX_TOA_ERROR 0 -#define MICRO_TO_10NANO(x) ((x)*100) -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -static UINT_8 ucTimingMeasToken = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v wnm category action frame. -* -* -* \note -* Called by: Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prRxFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - if (prRxFrame->ucAction == ACTION_WNM_TIMING_MEASUREMENT_REQUEST) { - wnmTimingMeasRequest(prAdapter, prSwRfb); - return; - } -#endif - - DBGLOG(WNM, TRACE, ("Unsupport WNM action frame: %d\n", prRxFrame->ucAction)); -} - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to report timing measurement data. -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("wnmReportTimingMeas: u4ToD %x u4ToA %x", u4ToD, u4ToA)); - - if (!prStaRec->rWNMTimingMsmt.ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.u4ToD = MICRO_TO_10NANO(u4ToD); - prStaRec->rWNMTimingMsmt.u4ToA = MICRO_TO_10NANO(u4ToA); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(TimingMeasurement) Event. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Timing Measurement frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(WNM, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - DBGLOG(WNM, TRACE, ("wnmRunEventTimgingMeasTxDone: ucDialog %d ucFollowUp %d u4ToD %x u4ToA %x", - prStaRec->rWNMTimingMsmt.ucDialogToken, - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken, - prStaRec->rWNMTimingMsmt.u4ToD, - prStaRec->rWNMTimingMsmt.u4ToA)); - - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, NULL); - - return WLAN_STATUS_SUCCESS; - -} /* end of wnmRunEventTimgingMeasTxDone() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Timing Measurement frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME prTxFrame; - UINT_16 u2PayloadLen; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prStaRec->aucMacAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_UNPROTECTED_WNM_ACTION; - prTxFrame->ucAction = ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT; - - //3 Compose the frame body's frame. - prTxFrame->ucDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prTxFrame->ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken; - prTxFrame->u4ToD = prStaRec->rWNMTimingMsmt.u4ToD; - prTxFrame->u4ToA = prStaRec->rWNMTimingMsmt.u4ToA; - prTxFrame->ucMaxToDErr = WNM_MAX_TOD_ERROR; - prTxFrame->ucMaxToAErr = WNM_MAX_TOA_ERROR; - - u2PayloadLen = 2 + ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - DBGLOG(WNM, TRACE, ("wnmComposeTimingMeasFrame: ucDialogToken %d ucFollowUpDialogToken %d u4ToD %x u4ToA %x\n", - prTxFrame->ucDialogToken, prTxFrame->ucFollowUpDialogToken, - prTxFrame->u4ToD, prTxFrame->u4ToA)); - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return; - -} /* end of wnmComposeTimingMeasFrame() */ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v timing measurement request. -* -* -* \note -* Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_WNM_TIMING_MEAS_REQ_FRAME prRxFrame = NULL; - P_STA_RECORD_T prStaRec; - - prRxFrame = (P_ACTION_WNM_TIMING_MEAS_REQ_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("IEEE 802.11: Received Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - // reset timing msmt - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = prRxFrame->ucTrigger; - if (!prRxFrame->ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, INFO, ("IEEE 802.11v: Test Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = 1; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} -#endif - -#endif /* CFG_SUPPORT_802_11V_TIMING_MEASUREMENT */ - -#endif /* CFG_SUPPORT_802_11V */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/cmd_buf.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/cmd_buf.c deleted file mode 100755 index 62653abf608a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/cmd_buf.c +++ /dev/null @@ -1,218 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/cmd_buf.c#1 $ -*/ - -/*! \file "cmd_buf.c" - \brief This file contain the management function of internal Command Buffer - for CMD_INFO_T. - - We'll convert the OID into Command Packet and then send to FW. Thus we need - to copy the OID information to Command Buffer for following reasons. - 1. The data structure of OID information may not equal to the data structure of - Command, we cannot use the OID buffer directly. - 2. If the Command was not generated by driver we also need a place to store the - information. - 3. Because the CMD is NOT FIFO when doing memory allocation (CMD will be generated - from OID or interrupt handler), thus we'll use the Block style of Memory Allocation - here. -*/ - - - -/* -** $Log: cmd_buf.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-13 21:59:08 GMT mtk01084 -** remove un-neceasary spaces -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-05-20 12:24:26 GMT mtk01461 -** Increase CMD Buffer - HIF_RX_HW_APPENDED_LEN when doing CMD_INFO_T allocation -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 09:41:08 GMT mtk01461 -** Add init of Driver Domain MCR flag and fix lint MTK WARN -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-17 19:51:45 GMT mtk01461 -** allocation function of CMD_INFO_T -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initial the MGMT memory pool for CMD Packet. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - UINT_32 i; - - ASSERT(prAdapter); - - QUEUE_INITIALIZE(&prAdapter->rFreeCmdList); - - for (i = 0; i < CFG_TX_MAX_CMD_PKT_NUM; i++) { - prCmdInfo = &prAdapter->arHifCmdDesc[i]; - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - } - -} /* end of cmdBufInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate CMD_INFO_T from a free list and MGMT memory pool. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] u4Length Length of the frame buffer to allocate. -* -* @retval NULL Pointer to the valid CMD Packet handler -* @retval !NULL Fail to allocat CMD Packet -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ) -{ - P_CMD_INFO_T prCmdInfo; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufAllocateCmdInfo"); - - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - /* Setup initial value in CMD_INFO_T */ - /* Start address of allocated memory */ - prCmdInfo->pucInfoBuffer = - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - - if (prCmdInfo->pucInfoBuffer == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - prCmdInfo = NULL; - } - else { - prCmdInfo->u2InfoBufLen = 0; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - } - } - - return prCmdInfo; - -} /* end of cmdBufAllocateCmdInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to free the CMD Packet to the MGMT memory pool. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo CMD Packet handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufFreeCmdInfo"); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo) { - if (prCmdInfo->pucInfoBuffer) { - cnmMemFree(prAdapter, prCmdInfo->pucInfoBuffer); - prCmdInfo->pucInfoBuffer = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - } - - return; - -} /* end of cmdBufFreeCmdPacket() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic.c deleted file mode 100755 index a4337ef402b1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic.c +++ /dev/null @@ -1,4429 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic.c#2 $ -*/ - -/*! \file nic.c - \brief Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - - - -/* -** $Log: nic.c $ -** -** 07 29 2013 yuche.tsai -** [ALPS00818788] [PreRC1][Mobile HotSpot]DUT should support hidden SSID broadcast for Mobile HotSpot -** Support hidden SSID for MT6630. -** FW Label: 20130729_ALPS_WIFI_FW_MT6620_V1_12 - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 02 2012 terry.wu - * NULL - * Set the default value of AP StaRec index to "STA_REC_INDEX_NOT_FOUND" in update firmware bss command. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 04 2011 cp.wu - * [WCXRP00001079] [MT5931][Driver] Release pending MMPDU only when BSS is being deactivated - * pre-check for NULL before calling MMPDU free function - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 11 2011 terry.wu - * NULL - * Rewrite Assert Dump Function for Portability. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 05 12 2011 puff.wen - * NULL - * FW Assert information dump to driver - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 cp.wu - * [WCXRP00000651] [MT6620 Wi-Fi][Driver] Refine RSSI buffering mechanism - * ROLLBACK due to the special design is to workaround incorrect initial RCPI value coming from firmware domain. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 12 2011 wh.su - * NULL - * enable the p2p check the cipher to set the bssInfo auth mode. - * - * 04 12 2011 wh.su - * NULL - * prepare the code for sync the auth mode and encryption status for P2P and BOW. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 10 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * Fix compiler issue. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * . - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * implementation of internal error handling of nicAllocateAdapterMemory. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 08 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Use kalPrint to print firmware assert info. - * - * 02 01 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * . - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 31 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Print firmware ASSERT info at Android kernel log, driver side - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000372] [MT6620 Wi-Fi][Driver] Check bus access failure inside nicProcessIST() - * check bus error and/or card removal when retrieving interrupt status from HAL - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 02 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add more control value but dont use it now. - * - * 11 30 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add auto rate check window in registry - * - * 11 10 2010 eddie.chen - * [WCXRP00000156] [MT6620][FW] Change Auto rate window to 64 and add throughput swcr - * Use autorate parameter 1 as phy rate mask. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 18 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * reset ptrs when IEs are going to be dropped - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 26 2010 yuche.tsai - * NULL - * Fix someones coding error while enable WIFI_DIRECT. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 yuche.tsai - * NULL - * Add state change indication. - * - * 08 16 2010 yuche.tsai - * NULL - * Add support for P2P BSS update info. - * - * 08 12 2010 cp.wu - * NULL - * [removing debugging] not to dump beacon content. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * FIX: structure of CMD_SET_BSS_INFO has been changed but no follow-ups are done. - * - * 07 22 2010 george.huang - * - * . - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill fgIsUapsdConnection when indicating BSS-CREATE with AIS-STA mode. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * correct nicProcessIST_impl() for interrupt status brought up by RX enhanced response - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-16 18:03:43 GMT mtk02752 -** handling enhanced response which fields are fetched at different moments -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-15 17:00:29 GMT mtk02752 -** if RX enhanced response is used, D2H interrupt status should be coming from buffered result as well -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-15 12:01:55 GMT mtk02752 -** if TX_DONE bit is not set but WTSR0/WTSR1 is non-zero, then set TX_DONE bit due to time latency of interrupt status enhanced response -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:52:52 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-24 20:51:01 GMT mtk02752 -** integrate with SD1 by invoking qmHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-16 17:32:33 GMT mtk02752 -** prepare code for invoking rxHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:08 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-09 22:56:41 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:20 GMT mtk01084 -** prevent warning -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:54:57 GMT mtk01084 -** init HIF -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:30 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:12 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-09-09 17:26:15 GMT mtk01084 -** modify for CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-19 10:55:22 GMT mtk01461 -** Unmask the unused HISR -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-18 15:59:13 GMT mtk01084 -** remove debug purpose code -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 14:05:02 GMT mtk01084 -** update for WIFI ownback part on initial -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-04 21:32:57 GMT mtk01084 -** add temporarily code to set driver own on adapter initialization -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:35:41 GMT mtk01461 -** Add init of TX aggregation and fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-24 21:12:10 GMT mtk01104 -** Add function nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:43:31 GMT mtk01461 -** Revise for MTK coding style - nicInitializeAdapter() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:52:47 GMT mtk01461 -** Update allocate Adapter Memory for MGMT Memory pool -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:57:08 GMT mtk01461 -** Refine the order of release memory from pucRxCoalescingBufCached -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-19 18:32:57 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:00:14 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:27 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:25:59 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const UINT_8 aucPhyCfg2PhyTypeSet[PHY_CONFIG_NUM] = -{ - PHY_TYPE_SET_802_11ABG, /* PHY_CONFIG_802_11ABG */ - PHY_TYPE_SET_802_11BG, /* PHY_CONFIG_802_11BG */ - PHY_TYPE_SET_802_11G, /* PHY_CONFIG_802_11G */ - PHY_TYPE_SET_802_11A, /* PHY_CONFIG_802_11A */ - PHY_TYPE_SET_802_11B, /* PHY_CONFIG_802_11B */ - PHY_TYPE_SET_802_11ABGN, /* PHY_CONFIG_802_11ABGN */ - PHY_TYPE_SET_802_11BGN, /* PHY_CONFIG_802_11BGN */ - PHY_TYPE_SET_802_11AN, /* PHY_CONFIG_802_11AN */ - PHY_TYPE_SET_802_11GN /* PHY_CONFIG_802_11GN */ -}; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - #define REQ_GATING_ENABLE_H2D_INT BIT(31) - #define REQ_GATING_DISABLE_H2D_INT BIT(30) - #define ACK_GATING_ENABLE_D2H_INT BIT(31) - #define ACK_GATING_DISABLE_D2H_INT BIT(30) - - #define GATING_CONTROL_POLL_LIMIT 64 -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -static INT_EVENT_MAP_T arIntEventMapTable[] = { - {WHISR_ABNORMAL_INT, INT_EVENT_ABNORMAL}, - {WHISR_D2H_SW_INT, INT_EVENT_SW_INT}, - {WHISR_TX_DONE_INT, INT_EVENT_TX}, - {(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT), INT_EVENT_RX} -}; - -static const UINT_8 ucIntEventMapSize = (sizeof(arIntEventMapTable) / sizeof(INT_EVENT_MAP_T)); - -static IST_EVENT_FUNCTION apfnEventFuncTable[] = { - nicProcessAbnormalInterrupt, /*!< INT_EVENT_ABNORMAL */ - nicProcessSoftwareInterrupt, /*!< INT_EVENT_SW_INT */ - nicProcessTxInterrupt, /*!< INT_EVENT_TX */ - nicProcessRxInterrupt, /*!< INT_EVENT_RX */ -}; -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*! This macro is used to reduce coding errors inside nicAllocateAdapterMemory() - * and also enhance the readability. - */ -#define LOCAL_NIC_ALLOCATE_MEMORY(pucMem, u4Size, eMemType, pucComment) \ - { \ - DBGLOG(INIT, INFO, ("Allocating %ld bytes for %s.\n", u4Size, pucComment)); \ - if ((pucMem = (PUINT_8)kalMemAlloc(u4Size, eMemType)) == (PUINT_8)NULL) { \ - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for %s.\n", u4Size, pucComment)); \ - break; \ - } \ - ASSERT(((UINT_32)pucMem % 4) == 0); \ - DBGLOG(INIT, INFO, ("Virtual Address = %08lx for %s.\n", (UINT_32)pucMem, pucComment)); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for the allocation of the data structures -* inside the Adapter structure, include: -* 1. SW_RFB_Ts -* 2. Common coalescing buffer for TX PATH. -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @retval WLAN_STATUS_SUCCESS - Has enough memory. -* @retval WLAN_STATUS_RESOURCES - Memory is not enough. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS status = WLAN_STATUS_RESOURCES; - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicAllocateAdapterMemory"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - - do { - //4 <0> Reset all Memory Handler - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount = 0; - prAdapter->u4MemAllocDynamicCount = 0; - #endif - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - prRxCtrl->pucRxCached = (PUINT_8)NULL; - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - - - //4 <1> Memory for Management Memory Pool and CMD_INFO_T - /* Allocate memory for the CMD_INFO_T and its MGMT memory pool. */ - prAdapter->u4MgtBufCachedSize = MGT_BUFFER_SIZE; - - LOCAL_NIC_ALLOCATE_MEMORY(prAdapter->pucMgtBufCached, - prAdapter->u4MgtBufCachedSize, - VIR_MEM_TYPE, - "COMMON MGMT MEMORY POOL"); - - //4 <2> Memory for RX Descriptor - /* Initialize the number of rx buffers we will have in our queue. */ - /* We may setup ucRxPacketDescriptors by GLUE Layer, and using - * this variable directly. - */ - /* Allocate memory for the SW receive structures. */ - prRxCtrl->u4RxCachedSize = CFG_RX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(SW_RFB_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prRxCtrl->pucRxCached, - prRxCtrl->u4RxCachedSize, - VIR_MEM_TYPE, - "SW_RFB_T"); - - //4 <3> Memory for TX DEscriptor - prTxCtrl->u4TxCachedSize = CFG_TX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(MSDU_INFO_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prTxCtrl->pucTxCached, - prTxCtrl->u4TxCachedSize, - VIR_MEM_TYPE, - "MSDU_INFO_T"); - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - - /* Allocate memory for the common coalescing buffer. */ - prAdapter->u4CoalescingBufCachedSize = CFG_COALESCING_BUFFER_SIZE > CFG_RX_COALESCING_BUFFER_SIZE ? - CFG_COALESCING_BUFFER_SIZE : CFG_RX_COALESCING_BUFFER_SIZE; - - prAdapter->pucCoalescingBufCached = - kalAllocateIOBuffer(prAdapter->u4CoalescingBufCachedSize); - - if(prAdapter->pucCoalescingBufCached == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for coalescing buffer.\n", prAdapter->u4CoalescingBufCachedSize)); - break; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <5> Memory for enhanced interrupt response - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T) - kalAllocateIOBuffer(sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(prAdapter->prSDIOCtrl == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for interrupt response.\n", sizeof(ENHANCE_MODE_DATA_STRUCT_T))); - break; - } - - status = WLAN_STATUS_SUCCESS; - - } - while(FALSE); - - if(status != WLAN_STATUS_SUCCESS) { - nicReleaseAdapterMemory(prAdapter); - } - - return status; - -} /* end of nicAllocateAdapterMemory() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for releasing the allocated memory by -* nicAllocatedAdapterMemory(). -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <5> Memory for enhanced interrupt response - if (prAdapter->prSDIOCtrl) { - kalReleaseIOBuffer((PVOID)prAdapter->prSDIOCtrl, sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - } - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - if (prAdapter->pucCoalescingBufCached) { - kalReleaseIOBuffer((PVOID)prAdapter->pucCoalescingBufCached, prAdapter->u4CoalescingBufCachedSize); - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <3> Memory for TX Descriptor - if (prTxCtrl->pucTxCached) { - kalMemFree((PVOID)prTxCtrl->pucTxCached, - VIR_MEM_TYPE, - prTxCtrl->u4TxCachedSize); - prTxCtrl->pucTxCached = (PUINT_8)NULL; - } - - //4 <2> Memory for RX Descriptor - if (prRxCtrl->pucRxCached) { - kalMemFree((PVOID)prRxCtrl->pucRxCached, - VIR_MEM_TYPE, - prRxCtrl->u4RxCachedSize); - prRxCtrl->pucRxCached = (PUINT_8)NULL; - } - - //4 <1> Memory for Management Memory Pool - if (prAdapter->pucMgtBufCached) { - kalMemFree((PVOID)prAdapter->pucMgtBufCached, - VIR_MEM_TYPE, - prAdapter->u4MgtBufCachedSize); - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - } - -#if CFG_DBG_MGT_BUF - /* Check if all allocated memories are free */ - ASSERT(prAdapter->u4MemFreeDynamicCount == - prAdapter->u4MemAllocDynamicCount); -#endif - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief disable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - prAdapter->fgIsIntEnable = FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief enable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgIsIntEnableCache; - - - ASSERT(prAdapter); - fgIsIntEnableCache = prAdapter->fgIsIntEnable; - - prAdapter->fgIsIntEnable = TRUE; // NOTE(Kevin): It must be placed before MCR GINT write. - - /* If need enable INT and also set LPOwn at the same time. */ - if (prAdapter->fgIsIntEnableWithLPOwnSet) { - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; /* NOTE(Kevin): It's better to place it - * before MCR GINT write. - */ - /* If INT was enabled, only set LPOwn */ - if (fgIsIntEnableCache) { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - prAdapter->fgIsFwOwn = TRUE; - } - /* If INT was not enabled, enable it and also set LPOwn now */ - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET | - WHLPCR_INT_EN_SET); - prAdapter->fgIsFwOwn = TRUE; - } - } - /* If INT was not enabled, enable it now */ - else if (!fgIsIntEnableCache) { - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_SET); - } - - return; -} /* end of nicEnableInterrupt() */ - - -#if CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief For SDIO enhance mode, set the max rx len and tx status -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value = 0; - - ASSERT(prAdapter); - - //4 <1> Check STATUS Buffer is DW alignment. - ASSERT( IS_ALIGN_4( (UINT_32)&prAdapter->prSDIOCtrl->u4WHISR ) ); - - //4 <2> Setup STATUS count. - { - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value); - - //4 <2.1> Setup the number of maximum RX length to be report - u4Value &= ~(WHCR_MAX_HIF_RX_LEN_NUM); - u4Value |= ((SDIO_MAXIMUM_RX_LEN_NUM << WHCR_OFFSET_MAX_HIF_RX_LEN_NUM)); - - //4 <2.2> Setup RX enhancement mode -#if CFG_SDIO_RX_ENHANCE - u4Value |= WHCR_RX_ENHANCE_MODE_EN; -#else - u4Value &= ~WHCR_RX_ENHANCE_MODE_EN; -#endif /* CFG_SDIO_RX_AGG */ - - HAL_MCR_WR(prAdapter, MCR_WHCR, u4Value); - } - - return; - -} /* end of nicSDIOInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read interrupt status from hardware -* -* @param prAdapter pointer to the Adapter handler -* @param the interrupts -* -* @return N/A -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - - DEBUGFUNC("nicSDIOReadIntStatus"); - - ASSERT(prAdapter); - ASSERT(pu4IntStatus); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - HAL_PORT_RD(prAdapter, - MCR_WHISR, - sizeof(ENHANCE_MODE_DATA_STRUCT_T), - (PUINT_8)prSDIOCtrl, - sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - *pu4IntStatus = 0; - return; - } - - /* workaround */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - *pu4IntStatus = prSDIOCtrl->u4WHISR; - - return; -} /* end of nicSDIOReadIntStatus() */ -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to read interrupt status and then invoking -* dispatching procedure for the appropriate functions -* corresponding to specific interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4IntStatus = 0; - UINT_32 i; - - DEBUGFUNC("nicProcessIST"); - //DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set nicProcessIST! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - for (i = 0; i < CFG_IST_LOOP_COUNT; i++) { - -#if CFG_SDIO_INTR_ENHANCE - nicSDIOReadIntStatus(prAdapter, &u4IntStatus); -#else - HAL_MCR_RD(prAdapter, MCR_WHISR, &u4IntStatus); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - //DBGLOG(INIT, TRACE, ("u4IntStatus: 0x%x\n", u4IntStatus)); - - if (u4IntStatus & ~(WHIER_DEFAULT | WHIER_FW_OWN_BACK_INT_EN)) { - DBGLOG(INTR, WARN, ("Un-handled HISR %#x, HISR = %#x (HIER:0x%x)\n", - (u4IntStatus & ~WHIER_DEFAULT), u4IntStatus, WHIER_DEFAULT)); - u4IntStatus &= WHIER_DEFAULT; - } - - nicProcessIST_impl(prAdapter, u4IntStatus); - - if(u4IntStatus == 0) { - if(i == 0) { - u4Status = WLAN_STATUS_NOT_INDICATING; - } - break; - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return u4Status; -} /* end of nicProcessIST() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to dispatch the appropriate functions for specific -* interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* u4IntStatus interrupt status bits -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ) -{ - UINT_32 u4IntCount = 0; - P_INT_EVENT_MAP_T prIntEventMap = NULL; - - ASSERT(prAdapter); - - prAdapter->u4IntStatus = u4IntStatus; - - /* Process each of the interrupt status consequently */ - prIntEventMap = &arIntEventMapTable[0]; - for (u4IntCount = 0; u4IntCount < ucIntEventMapSize; prIntEventMap++, u4IntCount++) { - if (prIntEventMap->u4Int & prAdapter->u4IntStatus) { - if(prIntEventMap->u4Event == INT_EVENT_RX && - prAdapter->fgIsEnterD3ReqIssued == TRUE) { - // ignore - } - else if (apfnEventFuncTable[prIntEventMap->u4Event] != NULL) { - apfnEventFuncTable[prIntEventMap->u4Event](prAdapter); - } - else { - DBGLOG(INTR , WARN, - ("Empty INTR handler! ISAR bit#: %ld, event:%d, func: 0x%x\n", - prIntEventMap->u4Int, prIntEventMap->u4Event, apfnEventFuncTable[prIntEventMap->u4Event])); - - ASSERT(0); // to trap any NULL interrupt handler - } - prAdapter->u4IntStatus &= ~prIntEventMap->u4Int; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of nicProcessIST_impl() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Verify the CHIP ID -* -* @param prAdapter a pointer to adapter private data structure. -* -* -* @retval TRUE CHIP ID is the same as the setting compiled -* @retval FALSE CHIP ID is different from the setting compiled -*/ -/*----------------------------------------------------------------------------*/ -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4CIR = 0; - - ASSERT(prAdapter); - - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4CIR ); - - DBGLOG(INIT, TRACE,("Chip ID: 0x%x\n", u4CIR & WCIR_CHIP_ID)); - DBGLOG(INIT, TRACE,("Revision ID: 0x%x\n", ((u4CIR & WCIR_REVISION_ID) >> 16))); - - if ((u4CIR & WCIR_CHIP_ID) != MTK_CHIP_REV) { - return FALSE; - } - - prAdapter->ucRevID = (UINT_8)(((u4CIR & WCIR_REVISION_ID) >> 16) & 0xF) ; - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the MCR to the appropriate init value, and verify the init -* value -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); - - //4 <0> Initial value -} - -VOID -nicHifInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); -#if 0 - /* reset event */ - nicPutMailbox(prAdapter, 0, 0x52455345); // RESE - nicPutMailbox(prAdapter, 1, 0x545F5746); // T_WF - nicSetSwIntr(prAdapter, BIT(16)); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the Adapter soft variable -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; - - do { - if (!nicVerifyChipID(prAdapter)) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> MCR init - nicMCRInit(prAdapter); - - #if CFG_SDIO_INTR_ENHANCE - nicSDIOInit(prAdapter); - #endif /* CFG_SDIO_INTR_ENHANCE */ - - HAL_MCR_WR(prAdapter, MCR_WHIER, WHIER_DEFAULT); - - - //4 <2> init FW HIF - nicHifInit(prAdapter); - } - while (FALSE); - - - return u4Status; -} - - -#if defined(_HIF_SPI) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Restore the SPI Mode Select to default mode, -* this is important while driver is unload, and this must be last mcr -* since the operation will let the hif use 8bit mode access -* -* \param[in] prAdapter a pointer to adapter private data structure. -* \param[in] eGPIO2_Mode GPIO2 operation mode -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -void -nicRestoreSpiDefMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_MCR_WR(prAdapter, MCR_WCSR, SPICSR_8BIT_MODE_DATA); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value; - - HAL_MCR_RD(prAdapter, MCR_WASR, &u4Value); - DBGLOG(REQ, WARN, ("MCR_WASR: 0x%x \n", u4Value)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessFwOwnBackInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - - return; -} /* end of nicProcessFwOwnBackInterrupt() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4IntrBits; - - ASSERT(prAdapter); - - u4IntrBits = prAdapter->u4IntStatus & BITS(8, 31); - - if((u4IntrBits & WHISR_D2H_SW_ASSERT_INFO_INT) != 0) { - nicPrintFirmwareAssertInfo(prAdapter); -#if CFG_CHIP_RESET_SUPPORT - glSendResetRequest(); -#endif - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - ASSERT((u4IntrBits & (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)) - != (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)); - - if(u4IntrBits & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - } - - if(u4IntrBits & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - - // Indicate Service Thread for TX - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } -#endif - - DBGLOG(REQ, WARN, ("u4IntrBits: 0x%x \n", u4IntrBits)); - - return; -} /* end of nicProcessSoftwareInterrupt() */ - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_WR(prAdapter, MCR_H2DSM0R, u4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_WR(prAdapter, MCR_H2DSM1R, u4Data); - } else { - ASSERT(0); - } -} - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_RD(prAdapter, MCR_D2HRM0R, pu4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_RD(prAdapter, MCR_D2HRM1R, pu4Data); - } else { - ASSERT(0); - } -} - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ) -{ - /* NOTE: - * SW interrup in HW bit 16 is mapping to SW bit 0 (shift 16bit in HW transparancy) - * SW interrupt valid from b0~b15 - */ - ASSERT((u4SwIntrBitmap & BITS(0, 15)) == 0); -// DBGLOG(INIT, TRACE, ("u4SwIntrBitmap: 0x%08x\n", u4SwIntrBitmap)); - - HAL_MCR_WR(prAdapter, MCR_WSICR, u4SwIntrBitmap); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rPendingCmdQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_CMD_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if(prCmdInfo->ucCmdSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - - prCmdInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - return prCmdInfo; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rTxCtrl.rTxMgmtTxingQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_MSDU_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if(prMsduInfo->ucTxSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - return prMsduInfo; -} - -P_MSDU_INFO_T -nicGetPendingStaMMPDU ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ) -{ - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_QUE_T prTxingQue = (P_QUE_T)NULL; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - do { - if (prAdapter == NULL) { - - ASSERT(FALSE); - break; - } - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if ((prMsduInfo->ucStaRecIndex == ucStaRecIdx) && (prMsduInfo->pfTxDoneHandler != NULL)) { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfo, - prMsduInfoListHead); - prMsduInfoListHead = prMsduInfo; - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - - } while (FALSE); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - - return prMsduInfoListHead; -} /* nicGetPendingStaMMPDU */ - - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfoListTail = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if((ENUM_NETWORK_TYPE_INDEX_T)(prMsduInfo->ucNetworkType) == eNetworkType) { - if(prMsduInfoListHead == NULL) { - prMsduInfoListHead = prMsduInfoListTail = prMsduInfo; - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, prMsduInfo); - prMsduInfoListTail = prMsduInfo; - } - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - /* free */ - if(prMsduInfoListHead) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - } - - return; - -} /* end of nicFreePendingTxMsduInfoByNetwork() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a CMD sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - prAdapter->ucCmdSeqNum++; - ucRetval = prAdapter->ucCmdSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - return ucRetval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a TX sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - prAdapter->ucTxSeqNum++; - ucRetval = prAdapter->ucTxSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - return ucRetval; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to handle -* media state change event -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ) -{ - P_GLUE_INFO_T prGlueInfo; - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - switch(eNetworkType) { - case NETWORK_TYPE_AIS_INDEX: - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - - /* reset buffered link quality information */ - prAdapter->fgIsLinkQualityValid = FALSE; - prAdapter->fgIsLinkRateValid = FALSE; - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - prAdapter->rWlanInfo.rCurrBssId.eOpMode - = (ENUM_PARAM_OP_MODE_T) prConnectionStatus->ucInfraMode; - - // always indicate to OS according to MSDN (re-association/roaming) - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - else { - /* connected -> connected : roaming ? */ - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_ROAM_OUT_FIND_BEST, - NULL, - 0); - } - } - break; - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - break; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - break; -#endif - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} /* nicMediaStateChange */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4ChannelNum -* -* @retval - Frequency in unit of KHz, 0 for invalid channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicChannelNum2Freq ( - UINT_32 u4ChannelNum - ) -{ - UINT_32 u4ChannelInMHz; - - if(u4ChannelNum >= 1 && u4ChannelNum <= 13) { - u4ChannelInMHz = 2412 + (u4ChannelNum - 1) * 5; - } - else if(u4ChannelNum == 14) { - u4ChannelInMHz = 2484; - } - else if(u4ChannelNum == 133) { - u4ChannelInMHz = 3665; // 802.11y - } - else if(u4ChannelNum == 137) { - u4ChannelInMHz = 3685; // 802.11y - } - else if(u4ChannelNum >= 34 && u4ChannelNum <= 165) { - u4ChannelInMHz = 5000 + u4ChannelNum * 5; - } - else if(u4ChannelNum >= 183 && u4ChannelNum <= 196) { - u4ChannelInMHz = 4000 + u4ChannelNum * 5; - } - else { - u4ChannelInMHz = 0; - } - - return 1000 * u4ChannelInMHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4FreqInKHz -* -* @retval - Frequency Number, 0 for invalid freqency -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicFreq2ChannelNum ( - UINT_32 u4FreqInKHz - ) -{ - switch(u4FreqInKHz) { - case 2412000: - return 1; - case 2417000: - return 2; - case 2422000: - return 3; - case 2427000: - return 4; - case 2432000: - return 5; - case 2437000: - return 6; - case 2442000: - return 7; - case 2447000: - return 8; - case 2452000: - return 9; - case 2457000: - return 10; - case 2462000: - return 11; - case 2467000: - return 12; - case 2472000: - return 13; - case 2484000: - return 14; - case 3665000: - return 133; // 802.11y - case 3685000: - return 137; // 802.11y - case 4915000: - return 183; - case 4920000: - return 184; - case 4925000: - return 185; - case 4930000: - return 186; - case 4935000: - return 187; - case 4940000: - return 188; - case 4945000: - return 189; - case 4960000: - return 192; - case 4980000: - return 196; - case 5170000: - return 34; - case 5180000: - return 36; - case 5190000: - return 38; - case 5200000: - return 40; - case 5210000: - return 42; - case 5220000: - return 44; - case 5230000: - return 46; - case 5240000: - return 48; - case 5250000: - return 50; - case 5260000: - return 52; - case 5270000: - return 54; - case 5280000: - return 56; - case 5290000: - return 58; - case 5300000: - return 60; - case 5320000: - return 64; - case 5500000: - return 100; - case 5520000: - return 104; - case 5540000: - return 108; - case 5560000: - return 112; - case 5580000: - return 116; - case 5600000: - return 120; - case 5620000: - return 124; - case 5640000: - return 128; - case 5660000: - return 132; - case 5680000: - return 136; - case 5700000: - return 140; - case 5745000: - return 149; - case 5765000: - return 153; - case 5785000: - return 157; - case 5805000: - return 161; - case 5825000: - return 165; - default: - return 0; - } -} - - -/* firmware command wrapper */ -/* NETWORK (WIFISYS) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to activate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 1; - - if (((UINT_8) eNetworkTypeIdx) < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]; - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to deactivate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 0; - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - nicFreePendingTxMsduInfoByNetwork(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - - return u4Status; -} - - -/* BSS-INFO */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to sync bss info with firmware -* when a new BSS has been connected or disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - P_BSS_INFO_T prBssInfo; - CMD_SET_BSS_INFO rCmdSetBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - kalMemZero(&rCmdSetBssInfo, sizeof(CMD_SET_BSS_INFO)); - - rCmdSetBssInfo.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdSetBssInfo.ucConnectionState = (UINT_8)prBssInfo->eConnectionState; - rCmdSetBssInfo.ucCurrentOPMode = (UINT_8)prBssInfo->eCurrentOPMode; - rCmdSetBssInfo.ucSSIDLen = (UINT_8)prBssInfo->ucSSIDLen; - kalMemCopy(rCmdSetBssInfo.aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - COPY_MAC_ADDR(rCmdSetBssInfo.aucBSSID, prBssInfo->aucBSSID); - rCmdSetBssInfo.ucIsQBSS = (UINT_8)prBssInfo->fgIsQBSS; - rCmdSetBssInfo.ucNonHTBasicPhyType = prBssInfo->ucNonHTBasicPhyType; - rCmdSetBssInfo.u2OperationalRateSet = prBssInfo->u2OperationalRateSet; - rCmdSetBssInfo.u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - rCmdSetBssInfo.ucPhyTypeSet = prBssInfo->ucPhyTypeSet; - rCmdSetBssInfo.fgHiddenSsidMode = prBssInfo->eHiddenSsidType; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(rCmdSetBssInfo.aucOwnMac, prBssInfo->aucOwnMacAddr); - } -#endif - - rlmFillSyncCmdParam(&rCmdSetBssInfo.rBssRlmParam, prBssInfo); - - rCmdSetBssInfo.fgWapiMode = (UINT_8)FALSE; - - if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - rCmdSetBssInfo.ucAuthMode = (UINT_8)prConnSettings->eAuthMode; - rCmdSetBssInfo.ucEncStatus = (UINT_8)prConnSettings->eEncStatus; - rCmdSetBssInfo.fgWapiMode = (UINT_8)prConnSettings->fgWapiMode; - } -#if CFG_ENABLE_BT_OVER_WIFI - else if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } -#endif - else { -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } - else { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_OPEN; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION_DISABLED; - } - /* Need the probe response to detect the PBC overlap */ - rCmdSetBssInfo.fgIsApMode = p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo); - } -#else - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; -#endif - } - - if(eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - - cnmAisInfraConnectNotify(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && - (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - (prBssInfo->prStaRecOfAP != NULL)) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - else if (eNetworkTypeIdx == NETWORK_TYPE_BOW_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_BOW && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - else { - rCmdSetBssInfo.ucStaRecIdxOfAP = STA_REC_INDEX_NOT_FOUND; - } - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BSS_INFO, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SET_BSS_INFO), - (PUINT_8)&rCmdSetBssInfo, - NULL, - 0); - - /* if BSS-INFO is going to be disconnected state, free all correlated station records */ - if(prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - /* clear client list */ - bssClearClientList(prAdapter, prBssInfo); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - } - - return u4Status; -} - - -/* BSS-INFO Indication (PM) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been created. (for AdHoc / P2P-GO) -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CREATED rCmdIndicatePmBssCreated; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssCreated.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssCreated.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssCreated.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssCreated.u2AtimWindow = prBssInfo->u2ATIMWindow; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CREATED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CREATED), - (PUINT_8)&rCmdIndicatePmBssCreated, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been connected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CONNECTED rCmdIndicatePmBssConnected; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssConnected.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssConnected.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssConnected.u2AssocId = prBssInfo->u2AssocId; - rCmdIndicatePmBssConnected.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssConnected.u2AtimWindow = prBssInfo->u2ATIMWindow; - - rCmdIndicatePmBssConnected.ucBmpDeliveryAC = prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC; - rCmdIndicatePmBssConnected.ucBmpTriggerAC = prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC; - - //DBGPRINTF("nicPmIndicateBssConnected: ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x", - //rCmdIndicatePmBssConnected.ucBmpDeliveryAC, - //rCmdIndicatePmBssConnected.ucBmpTriggerAC); - - if ((eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX) -#if CFG_ENABLE_WIFI_DIRECT - || ((eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && (prAdapter->fgIsP2PRegistered)) -#endif - ) { - if(prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = (UINT_8)prBssInfo->prStaRecOfAP->fgIsUapsdSupported; - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; //@FIXME - } - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CONNECTED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CONNECTED), - (PUINT_8)&rCmdIndicatePmBssConnected, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_INDICATE_PM_BSS_ABORT rCmdIndicatePmBssAbort; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdIndicatePmBssAbort.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_ABORT), - (PUINT_8)&rCmdIndicatePmBssAbort, - NULL, - 0); -} - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ) -{ - DEBUGFUNC("nicConfigPowerSaveProfile"); - DBGLOG(INIT, TRACE, ("eNetTypeIndex:%d, ePwrMode:%d, fgEnCmdEvent:%d\n", - eNetTypeIndex, ePwrMode, fgEnCmdEvent)); - - ASSERT(prAdapter); - - if (eNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - ASSERT(0); - return WLAN_STATUS_NOT_SUPPORTED; - } - -// prAdapter->rWlanInfo.ePowerSaveMode.ucNetTypeIndex = eNetTypeIndex; -// prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile = (UINT_8)ePwrMode; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucNetTypeIndex = eNetTypeIndex; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucPsProfile = (UINT_8)ePwrMode; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_POWER_SAVE_MODE, - TRUE, - FALSE, - TRUE, - (fgEnCmdEvent ? nicCmdEventSetCommon : NULL), - (fgEnCmdEvent ? nicOidCmdTimeoutCommon : NULL), - sizeof(CMD_PS_PROFILE_T), - (PUINT_8)&(prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex]), - NULL, - sizeof(PARAM_POWER_MODE) - ); - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate firmware domain -* for beacon generation parameters -* -* @param prAdapter Pointer of ADAPTER_T -* eIeUpdMethod, Update Method -* eNetTypeIndex Index of Network -* u2Capability Capability -* aucIe Pointer to buffer of IEs -* u2IELen Length of IEs -* -* @retval - WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* WLAN_STATUS_PENDING -* WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ) -{ - P_CMD_BEACON_TEMPLATE_UPDATE prCmdBcnUpdate; - UINT_16 u2CmdBufLen = 0; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanUpdateBeaconIETemplate"); - DBGLOG(INIT, LOUD, ("\n")); - - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - if (u2IELen > MAX_IE_LENGTH) { - return WLAN_STATUS_INVALID_DATA; - } - - if (eIeUpdMethod == IE_UPD_METHOD_UPDATE_RANDOM - || eIeUpdMethod == IE_UPD_METHOD_UPDATE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, aucIE) + u2IELen; - } - else if (eIeUpdMethod == IE_UPD_METHOD_DELETE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, u2IELen); - } - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - // prepare command info - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u2CmdBufLen)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = eNetTypeIndex; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u2CmdBufLen); - prCmdInfo->pfCmdDoneHandler = NULL; //@FIXME - prCmdInfo->pfCmdTimeoutHandler = NULL; //@FIXME - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_UPDATE_BEACON_CONTENT; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u2CmdBufLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdBcnUpdate = (P_CMD_BEACON_TEMPLATE_UPDATE)(prWifiCmd->aucBuffer); - - // fill beacon updating command - prCmdBcnUpdate->ucUpdateMethod = (UINT_8) eIeUpdMethod; - prCmdBcnUpdate->ucNetTypeIndex = (UINT_8) eNetTypeIndex; - prCmdBcnUpdate->u2Capability = u2Capability; - prCmdBcnUpdate->u2IELen = u2IELen; - if(u2IELen > 0 ) { - kalMemCopy(prCmdBcnUpdate->aucIE, aucIe, u2IELen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to initialization PHY related -* varaibles -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prConnSettings->eDesiredPhyConfig >= PHY_CONFIG_NUM) { - ASSERT(0); - return; - } - - prAdapter->rWifiVar.ucAvailablePhyTypeSet = - aucPhyCfg2PhyTypeSet[prConnSettings->eDesiredPhyConfig]; - - if (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_BIT_ERP) { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_ERP_INDEX; - } - /* NOTE(Kevin): Because we don't have N only mode, TBD */ - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_HR_DSSS_INDEX; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_UPDATE_WMM_PARMS_T rCmdUpdateWmmParms; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - DBGLOG(QM, EVENT, ("sizeof(AC_QUE_PARMS_T): %d \n", sizeof(AC_QUE_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(CMD_UPDATE_WMM_PARMS): %d \n", sizeof(CMD_UPDATE_WMM_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(WIFI_CMD_T): %d \n", sizeof(WIFI_CMD_T))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - rCmdUpdateWmmParms.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - kalMemCopy(&rCmdUpdateWmmParms.arACQueParms[0], &prBssInfo->arACQueParms[0], - (sizeof(AC_QUE_PARMS_T)*AC_NUM)); - - rCmdUpdateWmmParms.fgIsQBSS = prBssInfo->fgIsQBSS; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_UPDATE_WMM_PARMS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_UPDATE_WMM_PARMS_T), - (PUINT_8)&rCmdUpdateWmmParms, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to set auto tx power parameter -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of Auto TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ) -{ - DEBUGFUNC("nicSetAutoTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_AUTOPWR_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_AUTO_POWER_PARAM_T), - (PUINT_8)prAutoPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPowerControl( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update power offset around 5GHz band -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of 5GHz power offset parameter -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ) -{ - DEBUGFUNC("nicUpdate5GOffset"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_5G_PWR_OFFSET, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_5G_PWR_OFFSET_T), - (PUINT_8)pr5GPwrOffset, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update DPD calibration result -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of parameter for DPD calibration result -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ) -{ - DEBUGFUNC("nicUpdateDPD"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PWR_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PWR_PARAM_T), - (PUINT_8)prDpdCalResult, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function starts system service such as timer and -* memory pools -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - // <1> Initialize MGMT Memory pool and STA_REC - cnmMemInit(prAdapter); - cnmStaRecInit(prAdapter); - cmdBufInitialize(prAdapter); - - // <2> Mailbox Initialization - mboxInitialize(prAdapter); - - // <3> Timer Initialization - cnmTimerInitialize(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function reset some specific system service, -* such as STA-REC -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Timer Destruction */ - cnmTimerDestroy(prAdapter); - - /* Mailbox Destruction */ - mboxDestroy(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - ASSERT(prAdapter); - - /* CNM Module - initialization */ - cnmInit(prAdapter); - - /* RLM Module - initialization */ - rlmFsmEventInit(prAdapter); - - /* SCN Module - initialization */ - scnInit(prAdapter); - - /* AIS Module - intiailization */ - aisInitializeConnectionSettings(prAdapter, prRegInfo); - aisFsmInit(prAdapter); - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - intiailization */ - roamingFsmInit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - -#if CFG_SUPPORT_SWCR - swCrDebugInit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SUPPORT_SWCR - swCrDebugUninit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - unintiailization */ - roamingFsmUninit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - /* AIS Module - unintiailization */ - aisFsmUninit(prAdapter); - - /* SCN Module - unintiailization */ - scnUninit(prAdapter); - - /* RLM Module - uninitialization */ - rlmFsmEventUninit(prAdapter); - - /* CNM Module - uninitialization */ - cnmUninit(prAdapter); - - return; -} - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to enable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_ENABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to disable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_DISABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param rMacAddr BSSID -* @param prSsid Pointer to SSID -* @param u4Privacy Privacy settings (0: Open / 1: WEP/WPA/WPA2 enabled) -* @param rRssi Received Strength (-10 ~ -200 dBm) -* @param eNetworkType Network Type (a/b/g) -* @param prConfiguration Network Parameter -* @param eOpMode Infra/Ad-Hoc -* @param rSupportedRates Supported basic rates -* @param u2IELength IE Length -* @param pucIEBuf Pointer to Information Elements(IEs) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ) -{ - BOOLEAN bReplace; - UINT_32 i; - UINT_32 u4IdxWeakest = 0; - PARAM_RSSI rWeakestRssi; - UINT_32 u4BufferSize; - - ASSERT(prAdapter); - - rWeakestRssi = (PARAM_RSSI)INT_MAX; - u4BufferSize = sizeof(prAdapter->rWlanInfo.aucScanIEBuf) / sizeof(prAdapter->rWlanInfo.aucScanIEBuf[0]); - - bReplace = FALSE; - - // decide to replace or add - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - // find weakest entry && not connected one - if(UNEQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, prAdapter->rWlanInfo.rCurrBssId.arMacAddress) - && prAdapter->rWlanInfo.arScanResult[i].rRssi < rWeakestRssi) { - u4IdxWeakest = i; - rWeakestRssi = prAdapter->rWlanInfo.arScanResult[i].rRssi; - } - - if(prAdapter->rWlanInfo.arScanResult[i].eOpMode == eOpMode && - EQUAL_MAC_ADDR(&(prAdapter->rWlanInfo.arScanResult[i].arMacAddress), rMacAddr) && - (EQUAL_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen) - || prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen == 0)) { - // replace entry - bReplace = TRUE; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - break; - } - } - - if (bReplace == FALSE) { - if (prAdapter->rWlanInfo.u4ScanResultNum < (CFG_MAX_NUM_BSS_LIST - 1)) { - i = prAdapter->rWlanInfo.u4ScanResultNum; - - // zero - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - prAdapter->rWlanInfo.u4ScanResultNum++; - } - else if(rWeakestRssi != (PARAM_RSSI)INT_MAX) { - // replace weakest one - i = u4IdxWeakest; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - if(u2IELength > 0) { - // IE - allocate buffer and update pointer - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to free IE buffer for dedicated scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4Idx Index of Scan Result -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ) -{ - UINT_32 i; - PUINT_8 pucPivot, pucMovePivot; - UINT_32 u4MoveSize, u4FreeSize, u4ReserveSize; - - ASSERT(prAdapter); - ASSERT(u4Idx < CFG_MAX_NUM_BSS_LIST); - - if(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength == 0 - || prAdapter->rWlanInfo.apucScanResultIEs[u4Idx] == NULL) { - return; - } - - u4FreeSize = ALIGN_4(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength); - - pucPivot = prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]; - pucMovePivot = (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]) + u4FreeSize); - - u4ReserveSize = ((UINT_32)pucPivot) - (UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])); - u4MoveSize = prAdapter->rWlanInfo.u4ScanIEBufferUsage - u4ReserveSize - u4FreeSize; - - // 1. rest of buffer to move forward - kalMemCopy(pucPivot, pucMovePivot, u4MoveSize); - - // 1.1 modify pointers - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(i != u4Idx) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] >= pucMovePivot) { - prAdapter->rWlanInfo.apucScanResultIEs[i] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[i]) - u4FreeSize); - } - } - } - - // 1.2 reset the freed one - prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - - // 2. reduce IE buffer usage - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4FreeSize; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to hack parameters for WLAN TABLE for -* fixed rate settings -* -* @param prAdapter Pointer to the Adapter structure. -* @param eRateSetting -* @param pu2DesiredNonHTRateSet, -* @param pu2BSSBasicRateSet, -* @param pucMcsSet -* @param pucSupMcs32 -* @param pu2HtCapInfo -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 pu2HtCapInfo - ) -{ - ASSERT(prAdapter); - ASSERT(eRateSetting > FIXED_RATE_NONE && eRateSetting < FIXED_RATE_NUM); - - switch(prAdapter->rWifiVar.eRateSetting) { - case FIXED_RATE_1M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_1M; - *pu2BSSBasicRateSet = RATE_SET_BIT_1M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_2M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_2M; - *pu2BSSBasicRateSet = RATE_SET_BIT_2M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_5_5M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_5_5M; - *pu2BSSBasicRateSet = RATE_SET_BIT_5_5M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_11M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_11M; - *pu2BSSBasicRateSet = RATE_SET_BIT_11M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_6M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_6M; - *pu2BSSBasicRateSet = RATE_SET_BIT_6M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_9M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_9M; - *pu2BSSBasicRateSet = RATE_SET_BIT_9M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_12M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_12M; - *pu2BSSBasicRateSet = RATE_SET_BIT_12M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_18M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_18M; - *pu2BSSBasicRateSet = RATE_SET_BIT_18M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_24M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_24M; - *pu2BSSBasicRateSet = RATE_SET_BIT_24M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_36M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_36M; - *pu2BSSBasicRateSet = RATE_SET_BIT_36M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_48M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_48M; - *pu2BSSBasicRateSet = RATE_SET_BIT_48M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_54M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_54M; - *pu2BSSBasicRateSet = RATE_SET_BIT_54M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_MCS0_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS1_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS2_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS3_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS4_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS5_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS6_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS7_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS0_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS1_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS2_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS3_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS4_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS5_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS6_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS7_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS0_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS1_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS2_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS3_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS4_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS5_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS6_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS7_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS32_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS0_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS1_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS2_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS3_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS4_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS5_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS6_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS7_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS32_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to write the register -* -* @param u4Address Register address -* u4Value the value to be written -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ) -{ - CMD_ACCESS_REG rCmdAccessReg; - - rCmdAccessReg.u4Address = u4Address; - rCmdAccessReg.u4Data = u4Value; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - NULL, - 0 - ); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to modify the auto rate parameters -* -* @param u4ArSysParam0 see description below -* u4ArSysParam1 -* u4ArSysParam2 -* u4ArSysParam3 -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* ArSysParam0[0:3] -> auto rate version (0:disable 1:version1 2:version2) -* ArSysParam0[4:5]-> auto bw version (0:disable 1:version1 2:version2) -* ArSysParam0[6:7]-> auto gi version (0:disable 1:version1 2:version2) -* ArSysParam0[8:15]-> HT rate clear mask -* ArSysParam0[16:31]-> Legacy rate clear mask -* ArSysParam1[0:7]-> Auto Rate check weighting window -* ArSysParam1[8:15]-> Auto Rate v1 Force Rate down -* ArSysParam1[16:23]-> Auto Rate v1 PerH -* ArSysParam1[24:31]-> Auto Rate v1 PerL -* -* Examples -* ArSysParam0 = 1, -* Enable auto rate version 1 -* -* ArSysParam0 = 983041, -* Enable auto rate version 1 -* Remove CCK 1M, 2M, 5.5M, 11M -* -* ArSysParam0 = 786433 -* Enable auto rate version 1 -* Remove CCK 5.5M 11M -*/ -/*----------------------------------------------------------------------------*/ - - -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ) -{ - UINT_8 ucArVer,ucAbwVer,ucAgiVer; - UINT_16 u2HtClrMask; - UINT_16 u2LegacyClrMask; - UINT_8 ucArCheckWindow; - UINT_8 ucArPerL; - UINT_8 ucArPerH; - UINT_8 ucArPerForceRateDownPer; - - ucArVer = (UINT_8)(u4ArSysParam0 & BITS(0,3)); - ucAbwVer = (UINT_8)((u4ArSysParam0 & BITS(4,5)) >>4); - ucAgiVer = (UINT_8)((u4ArSysParam0 & BITS(6,7)) >>6); - u2HtClrMask = (UINT_16) ((u4ArSysParam0 & BITS(8,15)) >> 8); - u2LegacyClrMask = (UINT_16) ((u4ArSysParam0 & BITS(16,31)) >> 16); - -#if 0 - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) ((u4ArSysParam1 & BITS(8,15)>>8)); - ucArPerH = (UINT_8) ((u4ArSysParam1 & BITS(16,23)) >>16); - ucArPerL = (UINT_8) ((u4ArSysParam1 & BITS(24,31)) >>24); -#endif - - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) (((u4ArSysParam1>>8) & BITS(0,7))); - ucArPerH = (UINT_8) (((u4ArSysParam1>>16) & BITS(0,7))); - ucArPerL = (UINT_8) (((u4ArSysParam1>>24) & BITS(0,7))); - - - DBGLOG(INIT, INFO, ("ArParam %u %u %u %u\n", u4ArSysParam0, u4ArSysParam1, u4ArSysParam2, u4ArSysParam3)); - DBGLOG(INIT, INFO, ("ArVer %u AbwVer %u AgiVer %u\n", ucArVer, ucAbwVer, ucAgiVer)); - DBGLOG(INIT, INFO, ("HtMask %x LegacyMask %x\n", u2HtClrMask, u2LegacyClrMask)); - DBGLOG(INIT, INFO, ("CheckWin %u RateDownPer %u PerH %u PerL %u\n", ucArCheckWindow, ucArPerForceRateDownPer, ucArPerH, ucArPerL)); - -#define SWCR_DATA_ADDR(MOD,ADDR) (0x90000000+(MOD<<8)+(ADDR)) -#define SWCR_DATA_CMD(CATE,WRITE,INDEX,OPT0,OPT1) ( (CATE<<24) | (WRITE<<23) | (INDEX<<16) | (OPT0 <<8) | OPT1 ) -#define SWCR_DATA0 0x0 -#define SWCR_DATA1 0x4 -#define SWCR_DATA2 0x8 -#define SWCR_DATA3 0xC -#define SWCR_DATA4 0x10 -#define SWCR_WRITE 1 -#define SWCR_READ 0 - - if(ucArVer > 0) { - /* dummy = WiFi.WriteMCR(&h90000104, &h00000001) */ - /* dummy = WiFi.WriteMCR(&h90000100, &h00850000)*/ - - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),1); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)); - } - else { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),0); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)) ; - } - - /* ucArVer 0: none 1:PER 2:Rcpi */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArVer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,7,0,0)); - - /* Candidate rate Ht mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2HtClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1c,0,0)); - - /* Candidate rate legacy mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2LegacyClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1d,0,0)); - -#if 0 - if(ucArCheckWindow!=0) { - /* TX DONE MCS INDEX CHECK STA RATE DOWN TH */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x14,0,0)); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0xc,0,0)); - } - - if(ucArPerForceRateDownPer !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerForceRateDownPer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x18,0,0)); - } - if(ucArPerH !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerH); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1,0,0)); - } - if(ucArPerL !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerL); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x2,0,0)); - } -#endif - - - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to enable roaming -* -* @param u4EnableRoaming -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* u4EnableRoaming -> Enable Romaing -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prConnSettings->fgIsEnableRoaming = ((u4EnableRoaming>0)?(TRUE):(FALSE)); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief dump firmware Assert message -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4MailBox0, u4MailBox1; - UINT_32 line = 0; - UINT_8 aucAssertFile[7]; - UINT_32 u4ChipId; - -#if CFG_SDIO_INTR_ENHANCE - u4MailBox0 = prAdapter->prSDIOCtrl->u4RcvMailbox0; - u4MailBox1 = prAdapter->prSDIOCtrl->u4RcvMailbox1; -#else - nicGetMailbox(prAdapter, 0, &u4MailBox0); - nicGetMailbox(prAdapter, 1, &u4MailBox1); -#endif - - line = u4MailBox0 & 0x0000FFFF; - - u4MailBox0 = ((u4MailBox0 >> 16) & 0x0000FFFF); - - kalMemCopy(&aucAssertFile[0], &u4MailBox0, 2); - kalMemCopy(&aucAssertFile[2], &u4MailBox1, 4); - - aucAssertFile[6] = '\0'; - -#if defined(MT6620) - u4ChipId = 6620; -#elif defined(MT5931) - u4ChipId = 5931; -#elif defined(MT6628) - u4ChipId = 6628; -#endif - - kalPrint("\n[MT%ld][wifi][Firmware] Assert at \"%s\" #%ld\n\n", - u4ChipId, - aucAssertFile, - line); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventLinkQuality); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* check is to prevent RSSI to be updated by incorrect initial RSSI from hardware */ - /* buffer statistics for further query */ - if(prAdapter->fgIsLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateRSSI(prAdapter, eNetTypeIdx, prEventLinkQuality->cRssi, prEventLinkQuality->cLinkQuality); - } - - if(prAdapter->fgIsLinkRateValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateLinkSpeed(prAdapter, eNetTypeIdx, prEventLinkQuality->u2LinkSpeed); - } - } - break; -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - if (prAdapter->fgIsP2pLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - P_EVENT_LINK_QUALITY_EX prEventLQEx = (P_EVENT_LINK_QUALITY_EX)prEventLinkQuality; - - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, prEventLQEx->cRssiP2P, prEventLQEx->cLinkQualityP2P); - } - break; -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update RSSI and Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - prAdapter->fgIsLinkQualityValid = TRUE; - prAdapter->rLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.cRssi = cRssi; - prAdapter->rLinkQuality.cLinkQuality = cLinkQuality; - - /* indicate to glue layer */ - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_AIS_INDEX, - prAdapter->rLinkQuality.cRssi, - prAdapter->rLinkQuality.cLinkQuality); - } - - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - prAdapter->fgIsP2pLinkQualityValid = TRUE; - prAdapter->rP2pLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rP2pLinkQuality.cRssi= cRssi; - prAdapter->rP2pLinkQuality.cLinkQuality= cLinkQuality; - - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_P2P_INDEX, - cRssi, - cLinkQuality); - break; -#endif -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* buffer statistics for further query */ - prAdapter->fgIsLinkRateValid = TRUE; - prAdapter->rLinkRateUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.u2LinkSpeed = u2LinkSpeed; - } - break; - - default: - break; - - } - - return; -} - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ) -{ - DEBUGFUNC("nicUpdateRddTestMode.\n"); - - ASSERT(prAdapter); - -// aisFsmScanRequest(prAdapter, NULL); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RDD_CH, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_RDD_CH_T), - (PUINT_8)prRddChParam, - NULL, - 0); -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_cmd_event.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_cmd_event.c deleted file mode 100755 index c9743946d88c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_cmd_event.c +++ /dev/null @@ -1,1651 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_cmd_event.c#1 $ -*/ - -/*! \file nic_cmd_event.c - \brief Callback functions for Command packets. - - Various Event packet handlers which will be setup in the callback function of - a command packet. -*/ - - - -/* -** $Log: nic_cmd_event.c $ - * - * 04 10 2012 yuche.tsai - * NULL - * Update address for wifi direct connection issue. - * - * 06 15 2011 cm.chang - * [WCXRP00000785] [MT6620 Wi-Fi][Driver][FW] P2P/BOW MAC address is XOR with AIS MAC address - * P2P/BOW mac address XOR with local bit instead of OR - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 24 2011 cp.wu - * [WCXRP00000493] [MT6620 Wi-Fi][Driver] Do not indicate redundant disconnection to host when entering into RF test mode - * only indicate DISCONNECTION to host when entering RF test if necessary (connected -> disconnected cases) - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 01 2010 cp.wu - * [WCXRP00000223] MT6620 Wi-Fi][Driver][FW] Adopt NVRAM parameters when enter/exit RF test mode - * reload NVRAM settings before entering RF test mode and leaving from RF test mode. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 15 2010 yuche.tsai - * NULL - * Start to test AT GO only when P2P state is not IDLE. - * - * 09 09 2010 yuche.tsai - * NULL - * Add AT GO Test mode after MAC address available. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 yuche.tsai - * NULL - * Add support for P2P Device Address query from FW. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 08 02 2010 cp.wu - * NULL - * reset FSMs before entering RF test mode. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change upon request: indicate as disconnected in driver domain when leaving from RF test mode - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not clear scanning list array after disassociation - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glude code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * limit RSSI return value to microsoft defined range. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * block until firmware finished RF test enter/leave then indicate completion to upper layer - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when entering RF test mode and leaving from RF test mode, wait for W_FUNC_RDY bit to be asserted forever until it is set or card is removed. - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * OID_802_11_RSSI, - * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * OID_802_11_STATISTICS, - * * * * * OID_802_11_DISASSOCIATE, - * * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:47:47 GMT mtk02752 -** only handle MCR read when accessing FW domain register -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 17:37:28 GMT mtk02752 -** * refine nicCmdEventQueryMcrRead -** + add TxStatus/RxStatus for RF test QueryInformation OIDs -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 22:05:45 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-01 23:02:57 GMT mtk02752 -** remove unnecessary spin locks -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-01 22:51:18 GMT mtk02752 -** maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-30 10:55:03 GMT mtk02752 -** modify for compatibility -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 14:46:32 GMT mtk02752 -** add another version of command-done handler upon new event structure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:33 GMT mtk01461 -** Add comment -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 19:32:42 GMT mtk01461 -** Add nicCmdEventSetCommon() for general set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:35 GMT mtk01461 -** Command Done Handler -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_ACCESS_REG prCmdAccessReg; - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdAccessReg = (P_CMD_ACCESS_REG)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prMcrRdInfo->u4McrOffset = prCmdAccessReg->u4Address; - prMcrRdInfo->u4McrData = prCmdAccessReg->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_SW_DBG_CTRL_T prCmdSwCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdSwCtrl = (P_CMD_SW_DBG_CTRL_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T) prCmdInfo->pvInformationBuffer; - prSwCtrlInfo->u4Id = prCmdSwCtrl->u4Id; - prSwCtrlInfo->u4Data = prCmdSwCtrl->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4InformationBufferLength, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_SUCCESS); - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return; -} - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4Count; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - u4Count = (prCmdInfo->u4SetInfoLen - OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress)) - / sizeof(IPV4_NETWORK_ADDRESS) ; - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress) + u4Count * - (OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP)), - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_TEST_STATUS prTestStatus, prQueryBuffer; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTestStatus = (P_EVENT_TEST_STATUS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prQueryBuffer = (P_EVENT_TEST_STATUS) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prQueryBuffer, prTestStatus, sizeof(EVENT_TEST_STATUS)); - - u4QueryInfoLen = sizeof(EVENT_TEST_STATUS); - - /* Update Query Infomation Length */ - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_RSSI rRssi, *prRssi; - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - rRssi = (PARAM_RSSI)prLinkQuality->cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - else { - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prRssi = (PARAM_RSSI *) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prRssi, &rRssi, sizeof(PARAM_RSSI)); - u4QueryInfoLen = sizeof(PARAM_RSSI); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is in response of OID_GEN_LINK_SPEED query request -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the pending command info -* @param pucEventBuf -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4LinkSpeed; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - pu4LinkSpeed = (PUINT_32)(prCmdInfo->pvInformationBuffer); - - if(prLinkQuality->u2LinkSpeed == 0) { - *pu4LinkSpeed = 10000; /* 10K * 100bps = 1Mbps */ - } - else { - *pu4LinkSpeed = prLinkQuality->u2LinkSpeed * 5000; - } - - u4QueryInfoLen = sizeof(UINT_32); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - u4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) prCmdInfo->pvInformationBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prEventStatistics->rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prEventStatistics->rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prEventStatistics->rFailedCount; - prStatistics->rRetryCount - = prEventStatistics->rRetryCount; - prStatistics->rMultipleRetryCount - = prEventStatistics->rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prEventStatistics->rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prEventStatistics->rRTSFailureCount; - prStatistics->rACKFailureCount - = prEventStatistics->rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prEventStatistics->rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prEventStatistics->rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prEventStatistics->rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prEventStatistics->rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // [driver-land] - prAdapter->fgTestMode = TRUE; - - // 0. always indicate disconnection - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - // 1. Remove pending TX - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. Reset driver-domain FSMs - nicUninitMGMT(prAdapter); - - nicResetSystemService(prAdapter); - nicInitMGMT(prAdapter, NULL); - - // 3. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 4. Block til firmware completed entering into RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else - kalMsleep(10); - } - - // 5. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 6. Reset TX Counter - nicTxResetResource(prAdapter); - - // 7. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 8. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - -#if CFG_SUPPORT_NVRAM - // 9. load manufacture data - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - return; -} - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // 1. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 2. Block til firmware completed leaving from RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else { - kalMsleep(10); - } - } - - // 3. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 4. Reset TX Counter - nicTxResetResource(prAdapter); - - // 5. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 6. set driver-land variable - prAdapter->fgTestMode = FALSE; - - // 7. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - /* 8. Indicate as disconnected */ - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - -#if CFG_SUPPORT_NVRAM - /* 9. load manufacture data */ - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - /* 10. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - return; -} - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(pucEventBuf); - - // copy to adapter - kalMemCopy(&(prAdapter->rMyMacAddr), &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - kalMemCopy(prCmdInfo->pvInformationBuffer, &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - u4QueryInfoLen = MAC_ADDR_LEN; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - //4 <3> Update new MAC address and all 3 networks - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, prAdapter->rMyMacAddr); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucDeviceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucDeviceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucInterfaceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucInterfaceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucOwnMacAddr, - prAdapter->rMyMacAddr); - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); -#endif - -#if CFG_TEST_WIFI_DIRECT_GO - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_IDLE) { - wlanEnableP2pFunction(prAdapter); - - wlanEnableATGO(prAdapter); - } -#endif - - kalUpdateMACAddress(prAdapter->prGlueInfo, prAdapter->rWifiVar.aucMacAddress); - - return; -} - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_MAC_MCAST_ADDR prEventMacMcastAddr; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventMacMcastAddr = (P_EVENT_MAC_MCAST_ADDR)(pucEventBuf); - - u4QueryInfoLen = prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN; - - // buffer length check - if (prCmdInfo->u4InformationBufferLength < u4QueryInfoLen) { - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_BUFFER_TOO_SHORT); - } - else { - kalMemCopy(prCmdInfo->pvInformationBuffer, - prEventMacMcastAddr->arAddress, - prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN); - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - } -} - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_ACCESS_EEPROM prEventAccessEeprom; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventAccessEeprom = (P_EVENT_ACCESS_EEPROM)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - prEepromRdInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prEepromRdInfo->ucEepromIndex = (UINT_8)(prEventAccessEeprom->u2Offset); - prEepromRdInfo->u2EepromData = prEventAccessEeprom->u2Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_MEDIA_STREAMING_INDICATION rParamMediaStreamIndication; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - rParamMediaStreamIndication.rStatus.eStatusType = - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE; - rParamMediaStreamIndication.eMediaStreamMode = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)&rParamMediaStreamIndication, - sizeof(PARAM_MEDIA_STREAMING_INDICATION)); -} - - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rReceivedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rReceivedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = 0; // @FIXME? - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME? - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) 0; //@FIXME - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rMultipleRetryCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rMultipleRetryCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command by OID/ioctl has been timeout -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a generic command timeout handler -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for entering RF test has -* failed sending due to timeout (highly possibly by firmware crash) -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - // 1. Remove pending TX frames - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. indiate for OID failure - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for memory dump has -* replied a event. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* @param pucEventBuf Pointer to event buffer -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_DUMP_MEM_T prEventDumpMem; - static UINT_8 aucPath[256]; - static UINT_32 u4CurTimeTick; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventDumpMem = (P_EVENT_DUMP_MEM_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(P_PARAM_CUSTOM_MEM_DUMP_STRUC_T); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T) prCmdInfo->pvInformationBuffer; - prMemDumpInfo->u4Address = prEventDumpMem->u4Address; - prMemDumpInfo->u4Length = prEventDumpMem->u4Length; - prMemDumpInfo->u4RemainLength = prEventDumpMem->u4RemainLength; - prMemDumpInfo->ucFragNum = prEventDumpMem->ucFragNum; - -#if 0 - do{ - UINT_32 i = 0; - printk("Rx dump address 0x%X, Length %d, FragNum %d, remain %d\n", - prEventDumpMem->u4Address, - prEventDumpMem->u4Length, - prEventDumpMem->ucFragNum, - prEventDumpMem->u4RemainLength); -#if 0 - for(i = 0; i < prEventDumpMem->u4Length; i++) { - printk("%02X ", prEventDumpMem->aucBuffer[i]); - if(i % 32 == 31) { - printk("\n"); - } - } -#endif - }while(FALSE); -#endif - - if(prEventDumpMem->ucFragNum == 1) { - /* Store memory dump into sdcard, - * path /sdcard/dump___.hex - */ - u4CurTimeTick = kalGetTimeTick(); - sprintf(aucPath, "/sdcard/dump_%ld_0x%08lX_%ld.hex", - u4CurTimeTick, - prEventDumpMem->u4Address, - prEventDumpMem->u4Length + prEventDumpMem->u4RemainLength); - kalWriteToFile(aucPath, FALSE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - else { - /* Append current memory dump to the hex file */ - kalWriteToFile(aucPath, TRUE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - - if(prEventDumpMem->u4RemainLength == 0 || - prEventDumpMem->u4Address == 0xFFFFFFFF) { - /* The request is finished or firmware response a error */ - /* Reply time tick to iwpriv */ - *((PUINT_32)prCmdInfo->pvInformationBuffer) = u4CurTimeTick; - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - else { - /* The memory dump request is not finished, Send next command*/ - wlanSendMemDumpCmd( - prAdapter, - prCmdInfo->pvInformationBuffer, - prCmdInfo->u4InformationBufferLength); - } - } - - return; - -} - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_pwr_mgt.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_pwr_mgt.c deleted file mode 100755 index f469057da479..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_pwr_mgt.c +++ /dev/null @@ -1,802 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_pwr_mgt.c#1 $ -*/ - -/*! \file "nic_pwr_mgt.c" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - - - -/* -** $Log: nic_pwr_mgt.c $ - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 29 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * fix for compilation error when applied with FW_DOWNLOAD = 0 - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * refine for MT5931/MT6620 logic separation. - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * bugfix: firmware download procedure for ACPI state transition is not complete. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * check success or failure for setting fw-own - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 30 2010 cp.wu - * NULL - * reset ACPI power state before waking up MT6620 Wi-Fi firmware. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sleepy notify is only used for sleepy state, - * while wake-up state is automatically set when host needs to access device - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct hibernation problem. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * are now handled in glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct typo. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-13 21:59:15 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-09-09 17:26:36 GMT mtk01084 -** remove CMD52 access -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-18 14:50:29 GMT mtk01084 -** modify lines in nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:55:37 GMT mtk01084 -** modify nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:33:00 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:32 GMT mtk01084 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/extern BOOLEAN fgIsResetting; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER ON procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ) -{ - UINT_32 u4RegValue; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == TRUE) { - return; - } - else { - if(nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - // pending interrupts - return; - } - } - - if (fgEnableGlobalInt) { - prAdapter->fgIsIntEnableWithLPOwnSet = TRUE; - } - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - if(u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - // if set firmware own not successful (possibly pending interrupts), - // indicate an own clear event - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - return; - } - - prAdapter->fgIsFwOwn = TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER OFF procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ) -{ -#define LP_OWN_BACK_TOTAL_DELAY_MS 8192 //exponential of 2 -#define LP_OWN_BACK_LOOP_DELAY_MS 1 //exponential of 2 -#define LP_OWN_BACK_CLR_OWN_ITERATION 256 //exponential of 2 - - BOOLEAN fgStatus = TRUE; - UINT_32 i, u4CurrTick, u4RegValue = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == FALSE) - return fgStatus; - - u4CurrTick = kalGetTimeTick(); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - - if (u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - prAdapter->fgIsFwOwn = FALSE; - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (kalGetTimeTick() - u4CurrTick) > LP_OWN_BACK_TOTAL_DELAY_MS - ||fgIsResetting ==TRUE) { - //ERRORLOG(("LP cannot be own back (for %ld ms)", kalGetTimeTick() - u4CurrTick)); - fgStatus = FALSE; - break; - } - else { - if((i & (LP_OWN_BACK_CLR_OWN_ITERATION - 1)) == 0) { - /* Software get LP ownership - per 256 iterations */ - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - } - - /* Delay for LP engine to complete its operation. */ - kalMsleep(LP_OWN_BACK_LOOP_DELAY_MS); - i++; - } - } - - return fgStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set ACPI power mode to D0. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4Value = 0, u4WHISR = 0; - UINT_8 aucTxCount[8]; - UINT_32 i; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwImgLength, u4FwLoadAddr, u4ImgSecSize; - PVOID prFwMappingHandle; - PVOID pvFwImageMapFile = NULL; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif - - DEBUGFUNC("nicpmSetAcpiPowerD0"); - - ASSERT(prAdapter); - - do { - /* 0. Reset variables in ADAPTER_T */ - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - -#if defined(MT6620) || defined(MT6628) - /* 1. Request Ownership to enter F/W download state */ - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - #if CFG_ENABLE_FW_DOWNLOAD - prFwMappingHandle = kalFirmwareImageMapping(prAdapter->prGlueInfo, &pvFwImageMapFile, &u4FwImgLength); - if(!prFwMappingHandle) { - DBGLOG(INIT, ERROR,("Fail to load FW image from file!\n")); - pvFwImageMapFile = NULL; - } - - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 3.1 disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 3.2 Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3.3 FW download here */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImgLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImgLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanImageSectionDownload failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - } - else { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - kalGetFwStartAddress(prAdapter->prGlueInfo)); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", kalGetFwLoadAddress(prAdapter->prGlueInfo))); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImgLength)); - - do { - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImgLength >> 6); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - #endif - #endif - - /* 5. check Wi-Fi FW asserts ready bit */ - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 6.1 reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 6.2 reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - - /* 6.3 Enable interrupt */ - nicEnableInterrupt(prAdapter); - - /* 6.4 Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6.5 indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, NULL); - - } while(FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - return FALSE; - } - else { - return TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is used to set ACPI power mode to D3. -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* 1. MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - /* 2. Disable Interrupt */ - nicDisableInterrupt(prAdapter); - - /* 3. emit CMD_NIC_POWER_CTRL command packet */ - wlanSendNicPowerCtrlCmd(prAdapter, 1); - - /* 4. Clear Interrupt Status */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 5. Remove pending TX */ - nicTxRelease(prAdapter); - - // 5.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 5.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - /* 6. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - - /* 7. Set variables */ - prAdapter->rAcpiState = ACPI_STATE_D3; - - return TRUE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_rx.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_rx.c deleted file mode 100755 index 208f2f7f14f7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_rx.c +++ /dev/null @@ -1,3538 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_rx.c#3 $ -*/ - -/*! \file nic_rx.c - \brief Functions that provide many rx-related functions - - This file includes the functions used to process RFB and dispatch RFBs to - the appropriate related rx functions for protocols. -*/ - - - -/* -** $Log: nic_rx.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 14 2012 cp.wu - * NULL - * remove another assertion by error message dump - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 08 26 2011 cp.wu - * [WCXRP00000958] [MT6620 Wi-Fi][Driver] Extend polling timeout from 25ms to 1sec due to RF calibration might took up to 600ms - * extend polling RX response timeout period from 25ms to 1000ms. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * correct comment. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * take use of QUE_MGT exported function to estimate currently RX buffer usage count. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support for GO. - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Remove Station Record after Aging timeout. - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add MLME deauthentication support for Hot-Spot mode. - * - * 02 09 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Adjust variable order. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update beacon for NoA - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 20 2010 wh.su - * NULL - * add a cmd to reset the p2p key - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed compilier error. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * release RX packet to packet pool when in RF test mode - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common buffer, store the IE of a P2P device in this common buffer. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 yuche.tsai - * NULL - * When enable WiFi Direct function, check each packet to tell which interface to indicate. - * - * 08 05 2010 yuche.tsai - * NULL - * Add P2P Device Discovery Function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * Add support API for RX public action frame. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 yuche.tsai - * - * Update Device Capability Bitmap & Group Capability Bitmap from 16 bits to 8 bits. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill ucStaRecIdx into SW_RFB_T. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync with MT6620 driver for scan result replacement policy - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 04 29 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * fixing the PMKID candicate indicate code. - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * nicRxProcessEvent packet doesn't access spin-lock directly from now on. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * do not need to release the spin lock due to it is done inside nicGetPendingCmdInfo() - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * 2) add KAPI for handling association info - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve Linux supplicant compliance - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * the frequency is used for adhoc connection only - * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct fgSetQuery/fgNeedResp check - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Updated API interfaces for qmHandleEventRxAddBa() and qmHandleEventRxDelBa() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * 4) nicRxWaitResponse() revised - * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * * OID_802_11_RSSI, - * * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * * OID_802_11_STATISTICS, - * * * * * * OID_802_11_DISASSOCIATE, - * * * * * * OID_802_11_POWER_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * 2) add 4 counter for recording aggregation statistics - * - * 12 23 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a precheck: if free sw rfb is not enough, do not invoke read transactionu1rwduu`wvpghlqg|fu+rp - * - * 12 22 2009 cp.wu - * [WPD00003809][Bug] Host driver will crash when processing reordered MSDUs - * The root cause is pointer accessing by mistake. After dequeued from reordering-buffer, handling logic should access returned pointer instead of pointer which has been passed in before. -** \main\maintrunk.MT6620WiFiDriver_Prj\58 2009-12-17 13:40:33 GMT mtk02752 -** always update prAdapter->rSDIOCtrl when enhanced response is read by RX -** \main\maintrunk.MT6620WiFiDriver_Prj\57 2009-12-16 18:01:38 GMT mtk02752 -** if interrupt enhanced response is fetched by RX enhanced response, RX needs to invoke interrupt handlers too -** \main\maintrunk.MT6620WiFiDriver_Prj\56 2009-12-16 14:16:52 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\55 2009-12-15 20:03:12 GMT mtk02752 -** ASSERT when RX FreeSwRfb is not enough -** \main\maintrunk.MT6620WiFiDriver_Prj\54 2009-12-15 17:01:29 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is enabled, after enhanced response is read, rx procedure should process 1) TX_DONE_INT 2) D2H INT as well -** \main\maintrunk.MT6620WiFiDriver_Prj\53 2009-12-14 20:45:28 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is set, TC counter must be updated each time RX enhance response is read -** -** \main\maintrunk.MT6620WiFiDriver_Prj\52 2009-12-14 11:34:16 GMT mtk02752 -** correct a trivial logic issue -** \main\maintrunk.MT6620WiFiDriver_Prj\51 2009-12-14 10:28:25 GMT mtk02752 -** add a protection to avoid out-of-boundary access -** \main\maintrunk.MT6620WiFiDriver_Prj\50 2009-12-10 16:55:18 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\49 2009-12-09 14:06:47 GMT MTK02468 -** Added parsing event packets with EVENT_ID_RX_ADDBA or EVENT_ID_RX_DELBA -** \main\maintrunk.MT6620WiFiDriver_Prj\48 2009-12-08 17:37:51 GMT mtk02752 -** handle EVENT_ID_TEST_STATUS as well -** \main\maintrunk.MT6620WiFiDriver_Prj\47 2009-12-04 17:59:11 GMT mtk02752 -** to pass free-build compilation check -** \main\maintrunk.MT6620WiFiDriver_Prj\46 2009-12-04 12:09:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\45 2009-12-04 11:53:37 GMT mtk02752 -** all API should be compilable under SD1_SD3_DATAPATH_INTEGRATION == 0 -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-03 16:19:48 GMT mtk01461 -** Fix the Connected Event -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-11-30 10:56:18 GMT mtk02752 -** 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-11-30 10:11:27 GMT mtk02752 -** implement replacement for bss scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-11-27 11:08:05 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-11-26 09:38:59 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-11-26 09:29:40 GMT mtk02752 -** enable packet forwarding path (for AP mode) -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-11-25 21:37:00 GMT mtk02752 -** sync. with EVENT_SCAN_RESULT_T change, and add an assert for checking event size -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-25 20:17:41 GMT mtk02752 -** fill HIF_TX_HEADER_T.u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-25 18:18:57 GMT mtk02752 -** buffer scan result to prGlueInfo->rWlanInfo.arScanResult directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-24 22:42:45 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event (not implemented yet) -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-24 20:51:41 GMT mtk02752 -** integrate with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-24 19:56:17 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T in new path -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-23 20:31:21 GMT mtk02752 -** payload to send into pfCmdDoneHandler() will not include WIFI_EVENT_T -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-23 17:51:34 GMT mtk02752 -** when event packet corresponding to some pendingOID is received, pendingOID should be cleared -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 14:46:54 GMT mtk02752 -** implement nicRxProcessEventPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-17 22:40:54 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-16 21:48:22 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-16 15:41:18 GMT mtk01084 -** modify the length to be read in emu mode -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-13 17:00:12 GMT mtk02752 -** add blank function for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-13 13:54:24 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 14:41:51 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-11 14:33:46 GMT mtk02752 -** add protection when there is no packet avilable -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 12:33:36 GMT mtk02752 -** add RX1 read path for aggregated/enhanced/normal packet read procedures -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-04 14:11:08 GMT mtk01084 -** modify lines in RX aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:23 GMT mtk01084 -** modify RX aggregation handling -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:56:12 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:34 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:20 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-02 13:59:08 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-21 23:39:05 GMT mtk01461 -** Fix the paste error of RX STATUS in OOB of HIF Loopback CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-20 12:25:32 GMT mtk01461 -** Fix process of Read Done, and add u4MaxEventBufferLen to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 21:13:18 GMT mtk01426 -** Fixed compiler error -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:05:29 GMT mtk01426 -** Fixed nicRxSDIOAggReceiveRFBs() ASSERT issue -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:38:43 GMT mtk01461 -** Fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode and refine nicRxSDIOAggeceiveRFBs() for RX Aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-22 09:12:17 GMT mtk01461 -** Fix nicRxProcessHIFLoopbackPacket(), the size of HIF CTRL LENTH field is 1 byte -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-14 15:51:26 GMT mtk01426 -** Update RX OOB Setting -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-03 14:58:58 GMT mtk01426 -** Fixed logical error -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:58:31 GMT mtk01461 -** Rename the HIF_PKT_TYPE_DATA -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:51:18 GMT mtk01461 -** Fix u4HeaderOffset in nicRxProcessHIFLoopbackPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:02:58 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE and CFG_HIF_LOOPBACK support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:20:59 GMT mtk01426 -** Add nicRxWaitResponse function -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:01 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#ifndef LINUX -#include -#else -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define RX_RESPONSE_TIMEOUT (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_MGMT_FRAME_HANDLING -static PROCESS_RX_MGT_FUNCTION apfnProcessRxMgtFrame[MAX_NUM_OF_FC_SUBTYPES] = { - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0000: Association request */ - #else - NULL, /* subtype 0000: Association request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0001: Association response */ - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0010: Reassociation request */ - #else - NULL, /* subtype 0010: Reassociation request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0011: Reassociation response */ - #if CFG_SUPPORT_ADHOC - bssProcessProbeRequest, /* subtype 0100: Probe request */ - #else - NULL, /* subtype 0100: Probe request */ - #endif /* CFG_SUPPORT_ADHOC */ - scanProcessBeaconAndProbeResp, /* subtype 0101: Probe response */ - NULL, /* subtype 0110: reserved */ - NULL, /* subtype 0111: reserved */ - scanProcessBeaconAndProbeResp, /* subtype 1000: Beacon */ - NULL, /* subtype 1001: ATIM */ - saaFsmRunEventRxDisassoc, /* subtype 1010: Disassociation */ - authCheckRxAuthFrameTransSeq, /* subtype 1011: Authentication */ - saaFsmRunEventRxDeauth, /* subtype 1100: Deauthentication */ - nicRxProcessActionFrame, /* subtype 1101: Action */ - NULL, /* subtype 1110: reserved */ - NULL /* subtype 1111: reserved */ -}; -#endif - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucMemHandle; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i; - - DEBUGFUNC("nicRxInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <0> Clear allocated memory. - kalMemZero((PVOID) prRxCtrl->pucRxCached, prRxCtrl->u4RxCachedSize); - - //4 <1> Initialize the RFB lists - QUEUE_INITIALIZE(&prRxCtrl->rFreeSwRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rReceivedRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rIndicatedRfbList); - - pucMemHandle = prRxCtrl->pucRxCached; - for (i = CFG_RX_MAX_PKT_NUM; i != 0; i--) { - prSwRfb = (P_SW_RFB_T)pucMemHandle; - - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - - pucMemHandle += ALIGN_4(sizeof(SW_RFB_T)); - } - - ASSERT(prRxCtrl->rFreeSwRfbList.u4NumElem == CFG_RX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prRxCtrl->pucRxCached) == prRxCtrl->u4RxCachedSize); - - //4 <2> Clear all RX counters - RX_RESET_ALL_CNTS(prRxCtrl); - -#if CFG_SDIO_RX_AGG - prRxCtrl->pucRxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); - #endif -#else - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); - #endif -#endif - -#if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum = 0; - prRxCtrl->u4TotalRxPacketNum = 0; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt = 0; - prRxCtrl->u4DequeuedCnt = 0; -#endif - - return; -} /* end of nicRxInitialize() */ - - -#if defined(MT5931) -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize HIF RX control registers explicitly -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - DEBUGFUNC("nicRxPostInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - -#if CFG_SDIO_RX_AGG - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); -#else - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); -#endif - -} /* end of nicRxPostInitialize() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - nicRxFlush(prAdapter); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - return; -} /* end of nicRxUninitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb specify the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4PktLen = 0; - UINT_32 u4MacHeaderLen; - UINT_32 u4HeaderOffset; - - DEBUGFUNC("nicRxFillRFB"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - u4PktLen= prHifRxHdr->u2PacketLen; - - u4HeaderOffset = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_OFFSET_MASK); - u4MacHeaderLen = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_LEN) - >> HIF_RX_HDR_HEADER_LEN_OFFSET; - - //DBGLOG(RX, TRACE, ("u4HeaderOffset = %d, u4MacHeaderLen = %d\n", - // u4HeaderOffset, u4MacHeaderLen)); - - prSwRfb->u2HeaderLen = (UINT_16)u4MacHeaderLen; - prSwRfb->pvHeader = (PUINT_8)prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset; - prSwRfb->u2PacketLen = (UINT_16)(u4PktLen - (HIF_RX_HDR_SIZE + u4HeaderOffset)); - - //DBGLOG(RX, TRACE, ("Dump Rx packet, u2PacketLen = %d\n", prSwRfb->u2PacketLen)); - //DBGLOG_MEM8(RX, TRACE, prSwRfb->pvHeader, prSwRfb->u2PacketLen); - -#if 0 - if (prHifRxHdr->ucReorder & HIF_RX_HDR_80211_HEADER_FORMAT){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_802_11_FORMAT; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_802_11_FORMAT\n")); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_DO_REORDER){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_DO_REORDERING; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_DO_REORDERING\n")); - - /* Get Seq. No and TID, Wlan Index info */ - if (prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_BAR_FRAME){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_BAR_FRAME; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_BAR_FRAME\n")); - } - - prSwRfb->u2SSN = prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_SEQ_NO_MASK; - prSwRfb->ucTid = (UINT_8)((prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_TID_MASK) - >> HIF_RX_HDR_TID_OFFSET); - DBGLOG(RX, TRACE, ("u2SSN = %d, ucTid = %d\n", - prSwRfb->u2SSN, prSwRfb->ucTid)); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_WDS){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_AMP_WDS; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_AMP_WDS\n")); - } -#endif -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill checksum status in RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* @param u4TcpUdpIpCksStatus specify the Checksum status -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus -) -{ - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prAdapter->u4CSUMFlags != CSUM_NOT_SUPPORTED){ - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv4) { // IPv4 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_IP) { //IP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_SUCCESS; - } - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv6) {//IPv6 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_SUCCESS; - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - } - } - -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process packet doesn't need to do buffer reordering -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - BOOL fgIsRetained = FALSE; - UINT_32 u4CurrentRxBufferCount; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - DEBUGFUNC("nicRxProcessPktWithoutReorder"); - //DBGLOG(RX, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - u4CurrentRxBufferCount = prRxCtrl->rFreeSwRfbList.u4NumElem; - /* QM USED = $A, AVAILABLE COUNT = $B, INDICATED TO OS = $C - * TOTAL = $A + $B + $C - * - * Case #1 (Retain) - * ------------------------------------------------------- - * $A + $B < THRESHOLD := $A + $B + $C < THRESHOLD + $C := $TOTAL - THRESHOLD < $C - * => $C used too much, retain - * - * Case #2 (Non-Retain) - * ------------------------------------------------------- - * $A + $B > THRESHOLD := $A + $B + $C > THRESHOLD + $C := $TOTAL - THRESHOLD > $C - * => still availble for $C to use - * - */ - fgIsRetained = (((u4CurrentRxBufferCount + - qmGetRxReorderQueuedBufferCount(prAdapter) + - prTxCtrl->i4PendingFwdFrameCount) < CFG_RX_RETAINED_PKT_THRESHOLD) ? - TRUE : FALSE); - - //DBGLOG(RX, INFO, ("fgIsRetained = %d\n", fgIsRetained)); - - if (kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - fgIsRetained, - prSwRfb->aeCSUM) != WLAN_STATUS_SUCCESS) { - DBGLOG(RX, ERROR, ("kalProcessRxPacket return value != WLAN_STATUS_SUCCESS\n")); - ASSERT(0); - - nicRxReturnRFB(prAdapter, prSwRfb); - return; - } - else { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec) { -#if CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX && - prAdapter->fgIsP2PRegistered == TRUE) { - GLUE_SET_PKT_FLAG_P2P(prSwRfb->pvPacket); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - GLUE_SET_PKT_FLAG_PAL(prSwRfb->pvPacket); - } -#endif - } - prRxCtrl->apvIndPacket[prRxCtrl->ucNumIndPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumIndPacket++; - } - - if (fgIsRetained) { - prRxCtrl->apvRetainedPacket[prRxCtrl->ucNumRetainedPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumRetainedPacket++; - /* TODO : error handling of nicRxSetupRFB */ - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - } - else{ - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process forwarding data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo, prRetMsduInfoList; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessForwardPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo && kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - prRxCtrl->rFreeSwRfbList.u4NumElem < CFG_RX_RETAINED_PKT_THRESHOLD ? TRUE : FALSE, - prSwRfb->aeCSUM) == WLAN_STATUS_SUCCESS) { - - prMsduInfo->eSrc = TX_PACKET_FORWARDING; - // pack into MSDU_INFO_T - nicTxFillMsduInfo(prAdapter, prMsduInfo, (P_NATIVE_PACKET)(prSwRfb->pvPacket)); - // Overwrite the ucNetworkType - prMsduInfo->ucNetworkType = HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr); - - // release RX buffer (to rIndicatedRfbList) - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - - // increase forward frame counter - GLUE_INC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - - // send into TX queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfoList = qmEnqueueTxPackets(prAdapter, prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prRetMsduInfoList != NULL) { // TX queue refuses queuing the packet - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfoList); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfoList); - } - /* indicate service thread for sending */ - if(prTxCtrl->i4PendingFwdFrameCount > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } - else { // no TX resource - nicRxReturnRFB(prAdapter, prSwRfb); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process broadcast data packet for both host and forwarding -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SW_RFB_T prSwRfbDuplicated; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - P_HIF_RX_HEADER_T prHifRxHdr; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessGOBroadcastPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - ASSERT(CFG_NUM_OF_QM_RX_PKT_NUM >= 16); - - if( prRxCtrl->rFreeSwRfbList.u4NumElem - >= (CFG_RX_MAX_PKT_NUM - (CFG_NUM_OF_QM_RX_PKT_NUM - 16 /* Reserved for others */) ) ) { - - /* 1. Duplicate SW_RFB_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfbDuplicated, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if(prSwRfbDuplicated){ - kalMemCopy(prSwRfbDuplicated->pucRecvBuff, - prSwRfb->pucRecvBuff, - ALIGN_4(prHifRxHdr->u2PacketLen + HIF_RX_HW_APPENDED_LEN)); - - prSwRfbDuplicated->ucPacketType = HIF_RX_PKT_TYPE_DATA; - prSwRfbDuplicated->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - nicRxFillRFB(prAdapter, prSwRfbDuplicated); - - /* 2. Modify eDst */ - prSwRfbDuplicated->eDst = RX_PKT_DESTINATION_FORWARD; - - /* 4. Forward */ - nicRxProcessForwardPkt(prAdapter, prSwRfbDuplicated); - } - } - else { - DBGLOG(RX, WARN, ("Stop to forward BMC packet due to less free Sw Rfb %u\n", prRxCtrl->rFreeSwRfbList.u4NumElem)); - } - - /* 3. Indicate to host */ - prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prRetSwRfb, prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("nicRxProcessDataPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prRxCtrl = &prAdapter->rRxCtrl; - - nicRxFillRFB(prAdapter, prSwRfb); - -#if 1 /* Check 1x Pkt */ - if (prSwRfb->u2PacketLen > 14) { - PUINT_8 pc = (PUINT_8)prSwRfb->pvHeader; - UINT_16 u2Etype = 0; - - u2Etype = (pc[ETH_TYPE_LEN_OFFSET] << 8) | (pc[ETH_TYPE_LEN_OFFSET + 1]); - -#if CFG_SUPPORT_WAPI - if (u2Etype == ETH_P_1X || u2Etype == ETH_WPI_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#else - if (u2Etype == ETH_P_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#endif - else if (u2Etype == ETH_P_PRE_1X) { - DBGLOG(RSN, INFO, ("Pre R1X len=%d\n", prSwRfb->u2PacketLen)); - } - } -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - { - UINT_32 u4TcpUdpIpCksStatus; - - u4TcpUdpIpCksStatus = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - nicRxFillChksumStatus(prAdapter, prSwRfb, u4TcpUdpIpCksStatus); - - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - prStaRec = cnmGetStaRecByIndex(prAdapter, prHifRxHdr->ucStaRecIdx); - if(secCheckClassError(prAdapter, prSwRfb, prStaRec) == TRUE && - prAdapter->fgTestMode == FALSE) { -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt++; -#endif - - if((prRetSwRfb = qmHandleRxPackets(prAdapter, prSwRfb)) != NULL) { - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prRetSwRfb); - - switch(prRetSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prRetSwRfb); - RX_INC_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - break; - - default: - break; - } -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prRetSwRfb = prNextSwRfb; - } while(prRetSwRfb); - } - } - else { - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF event packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - P_WIFI_EVENT_T prEvent; - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("nicRxProcessEventPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prEvent = (P_WIFI_EVENT_T) prSwRfb->pucRecvBuff; - prGlueInfo = prAdapter->prGlueInfo; - - // Event Handling - switch(prEvent->ucEID) { - case EVENT_ID_CMD_RESULT: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - P_EVENT_CMD_RESULT prCmdResult; - prCmdResult = (P_EVENT_CMD_RESULT) ((PUINT_8)prEvent + EVENT_HDR_SIZE); - - /* CMD_RESULT should be only in response to Set commands */ - ASSERT(prCmdInfo->fgSetQuery == FALSE || prCmdInfo->fgNeedResp == TRUE); - - if(prCmdResult->ucStatus == 0) { // success - if(prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid == TRUE) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - } - else if(prCmdResult->ucStatus == 1) { // reject - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_FAILURE); - } - else if(prCmdResult->ucStatus == 2) { // unknown CMD - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_NOT_SUPPORTED); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - -#if 0 - case EVENT_ID_CONNECTION_STATUS: - /* OBSELETE */ - { - P_EVENT_CONNECTION_STATUS prConnectionStatus; - prConnectionStatus = (P_EVENT_CONNECTION_STATUS) (prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_CONNECTION_STATUS = %d\n", prConnectionStatus->ucMediaStatus); - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - - switch(prConnectionStatus->ucInfraMode) { - case 0: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_IBSS; - break; - case 1: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_INFRA; - break; - case 2: - default: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_AUTO_SWITCH; - break; - } - // always indicate to OS according to MSDN (re-association/roaming) - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - } - break; - - case EVENT_ID_SCAN_RESULT: - /* OBSELETE */ - break; -#endif - - case EVENT_ID_RX_ADDBA: - /* The FW indicates that an RX BA agreement will be established */ - qmHandleEventRxAddBa(prAdapter, prEvent); - break; - - case EVENT_ID_RX_DELBA: - /* The FW indicates that an RX BA agreement has been deleted */ - qmHandleEventRxDelBa(prAdapter, prEvent); - break; - - case EVENT_ID_LINK_QUALITY: -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - if (prEvent->u2PacketLen == EVENT_HDR_SIZE + sizeof(EVENT_LINK_QUALITY_EX)) { - P_EVENT_LINK_QUALITY_EX prLqEx = (P_EVENT_LINK_QUALITY_EX)(prEvent->aucBuffer); - - if (prLqEx->ucIsLQ0Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - if (prLqEx->ucIsLQ1Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_P2P_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - } - else { - /* For old FW, P2P may invoke link quality query, and make driver flag becone TRUE. */ - DBGLOG(P2P, WARN, ("Old FW version, not support P2P RSSI query.\n")); - - /* Must not use NETWORK_TYPE_P2P_INDEX, cause the structure is mismatch. */ - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); - } -#else - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); -#endif - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - #ifndef LINUX - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_GREATER && - prAdapter->rWlanInfo.rRssiTriggerValue >= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - else if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_LESS && - prAdapter->rWlanInfo.rRssiTriggerValue <= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - #endif - - break; - - case EVENT_ID_MIC_ERR_INFO: - { - P_EVENT_MIC_ERR_INFO prMicError; - //P_PARAM_AUTH_EVENT_T prAuthEvent; - P_STA_RECORD_T prStaRec; - - DBGLOG(RSN, EVENT, ("EVENT_ID_MIC_ERR_INFO\n")); - - prMicError = (P_EVENT_MIC_ERR_INFO)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - ASSERT(prStaRec); - - if (prStaRec) { - rsnTkipHandleMICFailure(prAdapter, prStaRec, (BOOLEAN)prMicError->u4Flags); - } - else { - DBGLOG(RSN, INFO, ("No STA rec!!\n")); - } -#if 0 - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, - (PVOID)prAdapter->rWlanInfo.rCurrBssId.arMacAddress, /* whsu:Todo? */ - PARAM_MAC_ADDR_LEN); - - if (prMicError->u4Flags != 0) { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - } - else { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); -#endif - } - break; - - case EVENT_ID_ASSOC_INFO: - { - P_EVENT_ASSOC_INFO prAssocInfo; - prAssocInfo = (P_EVENT_ASSOC_INFO)(prEvent->aucBuffer); - - kalHandleAssocInfo(prAdapter->prGlueInfo, prAssocInfo); - } - break; - - case EVENT_ID_802_11_PMKID: - { - P_PARAM_AUTH_EVENT_T prAuthEvent; - PUINT_8 cp; - UINT_32 u4LenOfUsedBuffer; - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - - u4LenOfUsedBuffer = (UINT_32)(prEvent->u2PacketLen - 8); - - prAuthEvent->arRequest[0].u4Length = u4LenOfUsedBuffer; - - cp = (PUINT_8)&prAuthEvent->arRequest[0]; - - /* Status type: PMKID Candidatelist Event */ - kalMemCopy(cp, (P_EVENT_PMKID_CANDIDATE_LIST_T)(prEvent->aucBuffer), prEvent->u2PacketLen - 8); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + u4LenOfUsedBuffer); - } - break; - -#if 0 - case EVENT_ID_ACTIVATE_STA_REC_T: - { - P_EVENT_ACTIVATE_STA_REC_T prActivateStaRec; - prActivateStaRec = (P_EVENT_ACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_ACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prActivateStaRec->ucStaRecIdx, - MAC2STR(prActivateStaRec->aucMacAddr)); - - qmActivateStaRec(prAdapter, - (UINT_32)prActivateStaRec->ucStaRecIdx, - ((prActivateStaRec->fgIsQoS) ? TRUE: FALSE), - prActivateStaRec->ucNetworkTypeIndex, - ((prActivateStaRec->fgIsAP) ? TRUE: FALSE), - prActivateStaRec->aucMacAddr); - - } - break; - - case EVENT_ID_DEACTIVATE_STA_REC_T: - { - P_EVENT_DEACTIVATE_STA_REC_T prDeactivateStaRec; - prDeactivateStaRec = (P_EVENT_DEACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_DEACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prDeactivateStaRec->ucStaRecIdx); - - qmDeactivateStaRec(prAdapter, - prDeactivateStaRec->ucStaRecIdx); - } - break; -#endif - - case EVENT_ID_SCAN_DONE: - scnEventScanDone(prAdapter, (P_EVENT_SCAN_DONE)(prEvent->aucBuffer)); - break; - - case EVENT_ID_TX_DONE: - { - P_EVENT_TX_DONE_T prTxDone; - prTxDone = (P_EVENT_TX_DONE_T)(prEvent->aucBuffer); - - DBGLOG(INIT, TRACE,("EVENT_ID_TX_DONE PacketSeq:%u ucStatus: %u SN: %u\n", - prTxDone->ucPacketSeq, prTxDone->ucStatus, prTxDone->u2SequenceNumber)); - - /* call related TX Done Handler */ - prMsduInfo = nicGetPendingTxMsduInfo(prAdapter, prTxDone->ucPacketSeq); - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - DBGLOG(INIT, TRACE, ("EVENT_ID_TX_DONE u4TimeStamp = %x u2AirDelay = %x\n", - prTxDone->au4Reserved1, prTxDone->au4Reserved2)); - - wnmReportTimingMeas(prAdapter, prMsduInfo->ucStaRecIndex, - prTxDone->au4Reserved1, prTxDone->au4Reserved1 + prTxDone->au4Reserved2); -#endif - - if(prMsduInfo) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, (ENUM_TX_RESULT_CODE_T)(prTxDone->ucStatus)); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - } - break; - - case EVENT_ID_SLEEPY_NOTIFY: - { - P_EVENT_SLEEPY_NOTIFY prEventSleepyNotify; - prEventSleepyNotify = (P_EVENT_SLEEPY_NOTIFY)(prEvent->aucBuffer); - - //DBGLOG(RX, INFO, ("ucSleepyState = %d\n", prEventSleepyNotify->ucSleepyState)); - - prAdapter->fgWiFiInSleepyState = (BOOLEAN)(prEventSleepyNotify->ucSleepyState); - } - break; - case EVENT_ID_BT_OVER_WIFI: -#if CFG_ENABLE_BT_OVER_WIFI - { - UINT_8 aucTmp[sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)]; - P_EVENT_BT_OVER_WIFI prEventBtOverWifi; - P_AMPC_EVENT prBowEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - - prEventBtOverWifi = (P_EVENT_BT_OVER_WIFI)(prEvent->aucBuffer); - - // construct event header - prBowEvent = (P_AMPC_EVENT)aucTmp; - - if(prEventBtOverWifi->ucLinkStatus == 0) { - // Connection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prBowEvent->aucPayload); - prBowLinkConnected->rChannel.ucChannelNum = prEventBtOverWifi->ucSelectedChannel; - kalMemZero(prBowLinkConnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - else { - // Disconnection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prBowEvent->aucPayload); - prBowLinkDisconnected->ucReason = 0; //@FIXME - kalMemZero(prBowLinkDisconnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - } - break; -#endif - case EVENT_ID_STATISTICS: - /* buffer statistics for further query */ - prAdapter->fgIsStatValid = TRUE; - prAdapter->rStatUpdateTime = kalGetTimeTick(); - kalMemCopy(&prAdapter->rStatStruct, prEvent->aucBuffer, sizeof(EVENT_STATISTICS)); - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - - case EVENT_ID_CH_PRIVILEGE: - cnmChMngrHandleChEvent(prAdapter, prEvent); - break; - - case EVENT_ID_BSS_ABSENCE_PRESENCE: - qmHandleEventBssAbsencePresence(prAdapter, prEvent); - break; - - case EVENT_ID_STA_CHANGE_PS_MODE: - qmHandleEventStaChangePsMode(prAdapter, prEvent); - break; -#if CFG_ENABLE_WIFI_DIRECT - case EVENT_ID_STA_UPDATE_FREE_QUOTA: - qmHandleEventStaUpdateFreeQuota(prAdapter, prEvent); - break; -#endif - case EVENT_ID_BSS_BEACON_TIMEOUT: - DBGLOG(RX, ERROR,("EVENT_ID_BSS_BEACON_TIMEOUT\n")); - - if (prAdapter->fgDisBcnLostDetection == FALSE) { - P_EVENT_BSS_BEACON_TIMEOUT_T prEventBssBeaconTimeout; - prEventBssBeaconTimeout = (P_EVENT_BSS_BEACON_TIMEOUT_T)(prEvent->aucBuffer); - - if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - aisBssBeaconTimeout(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - - p2pFsmRunEventBeaconTimeout(prAdapter); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - } -#endif - else { - DBGLOG(RX, ERROR, ("EVENT_ID_BSS_BEACON_TIMEOUT: (ucNetTypeIdx = %d)\n", - prEventBssBeaconTimeout->ucNetTypeIndex)); - } - } - - break; - case EVENT_ID_UPDATE_NOA_PARAMS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam; - prEventUpdateNoaParam = (P_EVENT_UPDATE_NOA_PARAMS_T)(prEvent->aucBuffer); - - if (prEventUpdateNoaParam->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - p2pProcessEvent_UpdateNOAParam(prAdapter, - prEventUpdateNoaParam->ucNetTypeIndex, - prEventUpdateNoaParam); - } else { - ASSERT(0); - } - } -#else - ASSERT(0); -#endif - break; - - case EVENT_ID_STA_AGING_TIMEOUT: -#if CFG_ENABLE_WIFI_DIRECT - { - if (prAdapter->fgDisStaAgingTimeoutDetection == FALSE) { - P_EVENT_STA_AGING_TIMEOUT_T prEventStaAgingTimeout; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - prEventStaAgingTimeout = (P_EVENT_STA_AGING_TIMEOUT_T)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventStaAgingTimeout->ucStaRecIdx); - if (prStaRec == NULL) { - break; - } - - DBGLOG(INIT, INFO,("EVENT_ID_STA_AGING_TIMEOUT %u " MACSTR "\n", - prEventStaAgingTimeout->ucStaRecIdx, MAC2STR(prStaRec->aucMacAddr))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - /* Call False Auth */ - if (prAdapter->fgIsP2PRegistered) { - p2pFuncDisconnect(prAdapter, prStaRec, TRUE, REASON_CODE_DISASSOC_INACTIVITY); - } - - - } /* gDisStaAgingTimeoutDetection */ - - } -#endif - break; - - case EVENT_ID_AP_OBSS_STATUS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - rlmHandleObssStatusEventPkt(prAdapter, (P_EVENT_AP_OBSS_STATUS_T) prEvent->aucBuffer); - } -#endif - break; - - case EVENT_ID_ROAMING_STATUS: -#if CFG_SUPPORT_ROAMING - { - P_ROAMING_PARAM_T prParam; - - prParam = (P_ROAMING_PARAM_T)(prEvent->aucBuffer); - roamingFsmProcessEvent(prAdapter, prParam); - } -#endif /* CFG_SUPPORT_ROAMING */ - break; - case EVENT_ID_SEND_DEAUTH: -#if DBG - { - P_WLAN_MAC_HEADER_T prWlanMacHeader; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - DBGLOG(RX, INFO, ("nicRx: aucAddr1: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr1))); - DBGLOG(RX, INFO, ("nicRx: aucAddr2: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr2))); - } -#endif - /* receive packets without StaRec */ - prSwRfb->pvHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - NULL, - prSwRfb, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - DBGLOG(RX, INFO, ("Send Deauth Error\n")); - } - break; - -#if CFG_SUPPORT_RDD_TEST_MODE - case EVENT_ID_UPDATE_RDD_STATUS: - { - P_EVENT_RDD_STATUS_T prEventRddStatus; - - prEventRddStatus = (P_EVENT_RDD_STATUS_T) (prEvent->aucBuffer); - - prAdapter->ucRddStatus = prEventRddStatus->ucRddStatus; - } - - break; -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case EVENT_ID_UPDATE_BWCS_STATUS: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS Event: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS Event: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_BWCS_UPDATE, - (PVOID) prEventBwcsStatus, - sizeof(PTA_IPC_T)); - } - - break; - - case EVENT_ID_UPDATE_BCM_DEBUG: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM FW status: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM FW status: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - } - - break; -#endif - - case EVENT_ID_ACCESS_REG: - case EVENT_ID_NIC_CAPABILITY: - case EVENT_ID_BASIC_CONFIG: - case EVENT_ID_MAC_MCAST_ADDR: - case EVENT_ID_ACCESS_EEPROM: - case EVENT_ID_TEST_STATUS: - default: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicRxProcessMgmtPacket is used to dispatch management frames -* to corresponding modules -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - UINT_8 ucSubtype; -#if CFG_SUPPORT_802_11W - BOOL fgMfgDrop = FALSE; -#endif - ASSERT(prAdapter); - ASSERT(prSwRfb); - - nicRxFillRFB(prAdapter, prSwRfb); - - ucSubtype = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FC_SUBTYPE )>> OFFSET_OF_FC_SUBTYPE; - -#if CFG_RX_PKTS_DUMP - { - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_16 u2TxFrameCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - u2TxFrameCtrl = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FRAME_TYPE); - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_MANAGEMENT)) { - if (u2TxFrameCtrl == MAC_FRAME_BEACON || - u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - - DBGLOG(SW4, INFO, ("QM RX MGT: net %u sta idx %u wlan idx %u ssn %u ptype %u subtype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - prSwRfb->ucPacketType, - ucSubtype, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prSwRfb->pvHeader, prSwRfb->u2PacketLen); - } - } - } -#endif - - if(prAdapter->fgTestMode == FALSE) { -#if CFG_MGMT_FRAME_HANDLING -#if CFG_SUPPORT_802_11W - fgMfgDrop = rsnCheckRxMgmt(prAdapter, prSwRfb, ucSubtype); - if (fgMfgDrop) { - #if DBG - LOG_FUNC("QM RX MGT: Drop Unprotected Mgmt frame!!!\n"); - #endif - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - return; - } - else -#endif - if(apfnProcessRxMgtFrame[ucSubtype]) { - switch(apfnProcessRxMgtFrame[ucSubtype](prAdapter, prSwRfb)){ - case WLAN_STATUS_PENDING: - return; - case WLAN_STATUS_SUCCESS: - case WLAN_STATUS_FAILURE: - break; - - default: - DBGLOG(RX, WARN, ("Unexpected MMPDU(0x%02X) returned with abnormal status\n", ucSubtype)); - break; - } - } -#endif - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicProcessRFBs is used to process RFBs in the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prRxCtrl->ucNumIndPacket = 0; - prRxCtrl->ucNumRetainedPacket = 0; - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb){ - switch(prSwRfb->ucPacketType){ - case HIF_RX_PKT_TYPE_DATA: - nicRxProcessDataPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_EVENT: - nicRxProcessEventPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_TX_LOOPBACK: - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - - case HIF_RX_PKT_TYPE_MANAGEMENT: - nicRxProcessMgmtPacket(prAdapter, prSwRfb); - break; - - default: - RX_INC_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - } - } - else { - break; - } - }while(TRUE); - - if (prRxCtrl->ucNumIndPacket > 0) { - RX_ADD_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT, prRxCtrl->ucNumIndPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT, prRxCtrl->ucNumRetainedPacket); - - //DBGLOG(RX, INFO, ("%d packets indicated, Retained cnt = %d\n", - // prRxCtrl->ucNumIndPacket, prRxCtrl->ucNumRetainedPacket)); - #if CFG_NATIVE_802_11 - kalRxIndicatePkts(prAdapter->prGlueInfo, (UINT_32)prRxCtrl->ucNumIndPacket, (UINT_32)prRxCtrl->ucNumRetainedPacket); - #else - kalRxIndicatePkts(prAdapter->prGlueInfo, prRxCtrl->apvIndPacket, (UINT_32)prRxCtrl->ucNumIndPacket); - #endif - } - -} /* end of nicRxProcessRFBs() */ - - -#if !CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the rx data from data port and setup RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @retval WLAN_STATUS_SUCCESS: SUCCESS -* @retval WLAN_STATUS_FAILURE: FAILURE -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0, u4ReadBytes; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4RegValue; - UINT_32 rxNum; - - DEBUGFUNC("nicRxReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(pucBuf); - DBGLOG(RX, TRACE, ("pucBuf= 0x%x, prHifRxHdr= 0x%x\n", pucBuf, prHifRxHdr)); - - do { - /* Read the RFB DW length and packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4RegValue); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - return WLAN_STATUS_FAILURE; - } - - //20091021 move the line to get the HIF RX header (for RX0/1) - if(u4RegValue == 0) { - DBGLOG(RX, ERROR, ("No RX packet\n")); - return WLAN_STATUS_FAILURE; - } - - u4PktLen = u4RegValue & BITS(0, 15); - if(u4PktLen != 0) { - rxNum = 0; - } - else { - rxNum = 1; - u4PktLen = (u4RegValue & BITS(16, 31)) >> 16; - } - - DBGLOG(RX, TRACE, ("RX%d: u4PktLen = %d\n", rxNum, u4PktLen)); - - //4 <4> Read Entire RFB and packet, include HW appended DW (Checksum Status) - u4ReadBytes = ALIGN_4(u4PktLen) + 4; - HAL_READ_RX_PORT(prAdapter, rxNum, u4ReadBytes, pucBuf, CFG_RX_MAX_PKT_SIZE); - - //20091021 move the line to get the HIF RX header - //u4PktLen = (UINT_32)prHifRxHdr->u2PacketLen; - if (u4PktLen != (UINT_32)prHifRxHdr->u2PacketLen) { - DBGLOG(RX, ERROR, ("Read u4PktLen = %d, prHifRxHdr->u2PacketLen: %d\n", - u4PktLen, prHifRxHdr->u2PacketLen)); - #if DBG - dumpMemory8((PUINT_8)prHifRxHdr, (prHifRxHdr->u2PacketLen > 4096) ? 4096 : prHifRxHdr->u2PacketLen); - #endif - ASSERT(0); - } - /* u4PktLen is byte unit, not inlude HW appended DW */ - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - return WLAN_STATUS_FAILURE; - } - - DBGLOG(RX, TRACE, ("Dump RX buffer, length = 0x%x\n", u4ReadBytes)); - DBGLOG_MEM8(RX, TRACE, pucBuf, u4ReadBytes); - }while(FALSE); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4HwAppendDW; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxReceiveRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - - // need to consider - if (nicRxReadBuffer(prAdapter, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("halRxFillRFB failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - prHifRxHdr = prSwRfb->prHifRxHdr; - u4HwAppendDW = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - DBGLOG(RX, TRACE, ("u4HwAppendDW = 0x%x\n", u4HwAppendDW)); - DBGLOG(RX, TRACE, ("u2PacketLen = 0x%x\n", prHifRxHdr->u2PacketLen)); - } -// while (RX_STATUS_TEST_MORE_FLAG(u4HwAppendDW)); - while (FALSE); - - return; - -} /* end of nicReceiveRFBs() */ - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4DataPort Specify which port to read -* @param u2RxLength Specify to the the rx packet length in Byte. -* @param prSwRfb the RFB to receive rx data. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - BOOL fgResult = TRUE; - - DEBUGFUNC("nicRxEnhanceReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - ASSERT(pucBuf); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - //DBGLOG(RX, TRACE, ("u2RxLength = %d\n", u2RxLength)); - - do { - //4 <1> Read RFB frame from MCR_WRDR0, include HW appended DW - HAL_READ_RX_PORT(prAdapter, - u4DataPort, - ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN), - pucBuf, - CFG_RX_MAX_PKT_SIZE); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - break; - } - - u4PktLen = (UINT_32)(prHifRxHdr->u2PacketLen); - //DBGLOG(RX, TRACE, ("u4PktLen = %d\n", u4PktLen)); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - //4 <2> if the RFB dw size or packet size is zero - if (u4PktLen == 0) { - DBGLOG(RX, ERROR, ("Packet Length = %d\n", u4PktLen)); - ASSERT(0); - break; - } - - //4 <3> if the packet is too large or too small - if (u4PktLen > CFG_RX_MAX_PKT_SIZE) { - DBGLOG(RX, TRACE, ("Read RX Packet Lentgh Error (%d)\n", u4PktLen)); - ASSERT(0); - break; - } - - u4Status = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - DBGLOG_MEM8(RX, TRACE, pucBuf, ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN)); - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i, rxNum; - UINT_16 u2RxPktNum, u2RxLength = 0, u2Tmp = 0; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOReceiveRFBs"); - - ASSERT(prAdapter); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - for (rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len : prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len); - - if(u2RxPktNum == 0) { - continue; - } - - for (i = 0; i < u2RxPktNum; i++) { - if(rxNum == 0) { - HAL_READ_RX_LENGTH(prAdapter, &u2RxLength, &u2Tmp); - } - else if(rxNum == 1) { - HAL_READ_RX_LENGTH(prAdapter, &u2Tmp, &u2RxLength); - } - - if (!u2RxLength) { - break; - } - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - ASSERT(prSwRfb); - - if (nicRxEnhanceReadBuffer(prAdapter, rxNum, u2RxLength, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("nicRxEnhanceRxReadBuffer failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - //prSDIOCtrl->au4RxLength[i] = 0; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - } - } - - prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len = 0; - prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len = 0; - - return; -}/* end of nicRxSDIOReceiveRFBs() */ - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - - -#if CFG_SDIO_RX_AGG -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO with Rx aggregation enabled -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ENHANCE_MODE_DATA_STRUCT_T prEnhDataStr; - P_RX_CTRL_T prRxCtrl; - P_SDIO_CTRL_T prSDIOCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 u4RxLength; - UINT_32 i, rxNum; - UINT_32 u4RxAggCount = 0, u4RxAggLength = 0; - UINT_32 u4RxAvailAggLen, u4CurrAvailFreeRfbCnt; - PUINT_8 pucSrcAddr; - P_HIF_RX_HEADER_T prHifRxHdr; - BOOL fgResult = TRUE; - BOOLEAN fgIsRxEnhanceMode; - UINT_16 u2RxPktNum; -#if CFG_SDIO_RX_ENHANCE - UINT_32 u4MaxLoopCount = CFG_MAX_RX_ENHANCE_LOOP_COUNT; -#endif - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOAggReceiveRFBs"); - - ASSERT(prAdapter); - prEnhDataStr = prAdapter->prSDIOCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - prSDIOCtrl = prAdapter->prSDIOCtrl; - -#if CFG_SDIO_RX_ENHANCE - fgIsRxEnhanceMode = TRUE; -#else - fgIsRxEnhanceMode = FALSE; -#endif - - do { -#if CFG_SDIO_RX_ENHANCE - /* to limit maximum loop for RX */ - u4MaxLoopCount--; - if (u4MaxLoopCount == 0) { - break; - } -#endif - - if(prEnhDataStr->rRxInfo.u.u2NumValidRx0Len == 0 && - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len == 0) { - break; - } - - for(rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prEnhDataStr->rRxInfo.u.u2NumValidRx0Len : prEnhDataStr->rRxInfo.u.u2NumValidRx1Len); - //DBGLOG(RX, TRACE, ("RxPktNum %d in rxPort %d\n", u2RxPktNum, rxNum)); - // if this assertion happened, it is most likely a F/W bug - ASSERT(u2RxPktNum <= 16); - - if (u2RxPktNum > 16) - continue; - - if(u2RxPktNum == 0) - continue; - - #if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum++; - prRxCtrl->u4TotalRxPacketNum += u2RxPktNum; - #endif - - u4CurrAvailFreeRfbCnt = prRxCtrl->rFreeSwRfbList.u4NumElem; - - // if SwRfb is not enough, abort reading this time - if(u4CurrAvailFreeRfbCnt < u2RxPktNum) { - #if CFG_HIF_RX_STARVATION_WARNING - DbgPrint("FreeRfb is not enough: %d available, need %d\n", u4CurrAvailFreeRfbCnt, u2RxPktNum); - DbgPrint("Queued Count: %d / Dequeud Count: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt); - #endif - continue; - } - -#if CFG_SDIO_RX_ENHANCE - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE - (sizeof(ENHANCE_MODE_DATA_STRUCT_T) + 4/* extra HW padding */); -#else - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE; -#endif - u4RxAggCount = 0; - - for (i = 0; i < u2RxPktNum ; i++) { - u4RxLength = (rxNum == 0 ? - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - if (!u4RxLength) { - ASSERT(0); - break; - } - - if (ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN) < u4RxAvailAggLen) { - if (u4RxAggCount < u4CurrAvailFreeRfbCnt) { - u4RxAvailAggLen -= ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN); - u4RxAggCount++; - } - else { - // no FreeSwRfb for rx packet - ASSERT(0); - break; - } - } - else { - // CFG_RX_COALESCING_BUFFER_SIZE is not large enough - ASSERT(0); - break; - } - } - - u4RxAggLength = (CFG_RX_COALESCING_BUFFER_SIZE - u4RxAvailAggLen); - //DBGLOG(RX, INFO, ("u4RxAggCount = %d, u4RxAggLength = %d\n", - // u4RxAggCount, u4RxAggLength)); - - HAL_READ_RX_PORT(prAdapter, - rxNum, - u4RxAggLength, - prRxCtrl->pucRxCoalescingBufPtr, - CFG_RX_COALESCING_BUFFER_SIZE); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Agg Packet Error\n")); - continue; - } - - pucSrcAddr = prRxCtrl->pucRxCoalescingBufPtr; - for (i = 0; i < u4RxAggCount; i++) { - UINT_16 u2PktLength; - - u2PktLength = (rxNum == 0 ? - prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - ASSERT(prSwRfb); - kalMemCopy(prSwRfb->pucRecvBuff, pucSrcAddr, - ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN)); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - pucSrcAddr += ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN); - //prEnhDataStr->au4RxLength[i] = 0; - } - -#if CFG_SDIO_RX_ENHANCE - kalMemCopy(prAdapter->prSDIOCtrl, (pucSrcAddr + 4), sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - /* do the same thing what nicSDIOReadIntStatus() does */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - /* dispatch to interrupt handler with RX bits masked */ - nicProcessIST_impl(prAdapter, prSDIOCtrl->u4WHISR & (~(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT))); -#endif - } - -#if !CFG_SDIO_RX_ENHANCE - prEnhDataStr->rRxInfo.u.u2NumValidRx0Len = 0; - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len = 0; -#endif - } - while ((prEnhDataStr->rRxInfo.u.u2NumValidRx0Len - || prEnhDataStr->rRxInfo.u.u2NumValidRx1Len) - && fgIsRxEnhanceMode); - - return; -} -#endif /* CFG_SDIO_RX_AGG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Setup a RFB and allocate the os packet to the RFB -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_RESOURCES -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - PVOID pvPacket; - PUINT_8 pucRecvBuff; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (!prSwRfb->pvPacket) { - kalMemZero(prSwRfb, sizeof(SW_RFB_T)); - pvPacket = kalPacketAlloc(prAdapter->prGlueInfo, CFG_RX_MAX_PKT_SIZE, - &pucRecvBuff); - if (pvPacket == NULL) { - return WLAN_STATUS_RESOURCES; - } - - prSwRfb->pvPacket = pvPacket; - prSwRfb->pucRecvBuff= (PVOID)pucRecvBuff; - } - else { - kalMemZero(((PUINT_8)prSwRfb + OFFSET_OF(SW_RFB_T, prHifRxHdr)), - (sizeof(SW_RFB_T)-OFFSET_OF(SW_RFB_T, prHifRxHdr))); - } - - prSwRfb->prHifRxHdr = (P_HIF_RX_HEADER_T)(prSwRfb->pucRecvBuff); - - return WLAN_STATUS_SUCCESS; - -} /* end of nicRxSetupRFB() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to put a RFB back onto the "RFB with Buffer" list -* or "RFB without buffer" list according to pvPacket. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_QUE_ENTRY_T prQueEntry; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - prRxCtrl = &prAdapter->rRxCtrl; - prQueEntry = &prSwRfb->rQueEntry; - - ASSERT(prQueEntry); - - /* The processing on this RFB is done, so put it back on the tail of - our list */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb->pvPacket) { - QUEUE_INSERT_TAIL(&prRxCtrl->rFreeSwRfbList, prQueEntry); - } - else { - QUEUE_INSERT_TAIL(&prRxCtrl->rIndicatedRfbList, prQueEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - return; -} /* end of nicRxReturnRFB() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SDIO_INTR_ENHANCE - #if CFG_SDIO_RX_AGG - nicRxSDIOAggReceiveRFBs(prAdapter); - #else - nicRxSDIOReceiveRFBs(prAdapter); - #endif -#else - nicRxReceiveRFBs(prAdapter); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicRxProcessRFBs(prAdapter); - - return; - -} /* end of nicProcessRxInterrupt() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* @brief Used to update IP/TCP/UDP checksum statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param aeCSUM The array of checksum result. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(aeCSUM); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_SUCCESS_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_FAILED)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L3_PKT_COUNT); - } - else { - ASSERT(0); - } - - if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_FAILED_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L4_PKT_COUNT); - } - else { - ASSERT(0); - } - - return; -} /* end of nicRxUpdateCSUMStatistics() */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current status of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - - SPRINTF(pucCurrBuf, ("\n\nRX CTRL STATUS:")); - SPRINTF(pucCurrBuf, ("\n===============")); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/i BUF LIST :%9ld", prRxCtrl->rFreeSwRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/o BUF LIST :%9ld", prRxCtrl->rIndicatedRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nRECEIVED RFB LIST :%9ld", prRxCtrl->rReceivedRfbList.u4NumElem)); - - SPRINTF(pucCurrBuf, ("\n\n")); - - //*pu4Count = (UINT_32)((UINT_32)pucCurrBuf - (UINT_32)pucBuffer); - - return; -} /* end of nicRxQueryStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear RX related counters -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return - (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - RX_RESET_ALL_CNTS(prRxCtrl); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - -#define SPRINTF_RX_COUNTER(eCounter) \ - SPRINTF(pucCurrBuf, ("%-30s : %ld\n", #eCounter, (UINT_32)prRxCtrl->au8Statistics[eCounter])) - - SPRINTF_RX_COUNTER(RX_MPDU_TOTAL_COUNT); - SPRINTF_RX_COUNTER(RX_SIZE_ERR_DROP_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_INDICATION_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETURNED_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETAINED_COUNT); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - SPRINTF_RX_COUNTER(RX_CSUM_TCP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_TCP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L4_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L3_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_IP_V6_PKT_CCOUNT); -#endif - - //*pu4Count = (UINT_32)(pucCurrBuf - pucBuffer); - - nicRxClearStatistics(prAdapter); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the Response data from data port -* -* @param prAdapter pointer to the Adapter handler -* @param pucRspBuffer pointer to the Response buffer -* -* @retval WLAN_STATUS_SUCCESS: Response packet has been read -* @retval WLAN_STATUS_FAILURE: Read Response packet timeout or error occurred -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ) -{ - UINT_32 u4Value = 0, u4PktLen = 0, i = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4Time, u4Current; - - DEBUGFUNC("nicRxWaitResponse"); - - ASSERT(prAdapter); - ASSERT(pucRspBuffer); - ASSERT(ucPortIdx < 2); - - u4Time = (UINT_32)kalGetTimeTick(); - - do { - /* Read the packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4Value); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - if(ucPortIdx == 0) { - u4PktLen = u4Value & 0xFFFF; - } - else { - u4PktLen = (u4Value >> 16) & 0xFFFF; - } - - //DBGLOG(RX, TRACE, ("i = %d, u4PktLen = %d\n", i, u4PktLen)); - - if (u4PktLen == 0) { - /* timeout exceeding check */ - u4Current = (UINT_32)kalGetTimeTick(); - - if((u4Current > u4Time) && ((u4Current - u4Time) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - else if(u4Current < u4Time && ((u4Current + (0xFFFFFFFF - u4Time)) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - - /* Response packet is not ready */ - kalUdelay(50); - - i++; - } - else if (u4PktLen > u4MaxRespBufferLen) { - DBGLOG(RX, WARN, ("Not enough Event Buffer: required length = 0x%x, available buffer length = %d\n", - u4PktLen, u4MaxRespBufferLen)); - - return WLAN_STATUS_FAILURE; - } - else { - HAL_PORT_RD(prAdapter, - ucPortIdx == 0 ? MCR_WRDR0 : MCR_WRDR1, - u4PktLen, - pucRspBuffer, - u4MaxRespBufferLen); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - //DBGLOG(RX, TRACE, ("Dump Response buffer, length = 0x%x\n", - // u4PktLen)); - //DBGLOG_MEM8(RX, TRACE, pucRspBuffer, u4PktLen); - - *pu4Length = u4PktLen; - break; - } - } while(TRUE); - - return u4Status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to enable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxEnablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to disable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxDisablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in reordering module -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SW_RFB_T prSwRfb; - - ASSERT(prAdapter); - - if((prSwRfb = qmFlushRxQueues(prAdapter)) != NULL) { - do { - P_SW_RFB_T prNextSwRfb; - - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - // free - nicRxReturnRFB(prAdapter, prSwRfb); - - prSwRfb = prNextSwRfb; - } while(prSwRfb); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prActFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prSwRfb->u2PacketLen < sizeof(WLAN_ACTION_FRAME) - 1) { - return WLAN_STATUS_INVALID_PACKET; - } - prActFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - - switch (prActFrame->ucCategory) { - case CATEGORY_PUBLIC_ACTION: - - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessPublicAction(prAdapter, prSwRfb); - - p2pFuncValidateRxActionFrame( - prAdapter, prSwRfb); - - } - #endif - break; - - case CATEGORY_HT_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessHtAction(prAdapter, prSwRfb); - } - #endif - break; - case CATEGORY_VENDOR_SPECIFIC_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - p2pFuncValidateRxActionFrame(prAdapter, prSwRfb); - } - #endif - break; -#if CFG_SUPPORT_802_11W - case CATEGORY_SA_QUERT_ACTION: - { - P_HIF_RX_HEADER_T prHifRxHdr; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */ - ) { - if (!(prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC)) { - /* MFP test plan 5.3.3.4 */ - rsnSaQueryAction(prAdapter, prSwRfb); - } - else { - DBGLOG(RSN, TRACE, ("Un-Protected SA Query, do nothing\n")); - } - } - } - break; -#endif -#if CFG_SUPPORT_802_11V - case CATEGORY_WNM_ACTION: - { - wnmWNMAction(prAdapter, prSwRfb); - } - break; -#endif - -#if CFG_SUPPORT_DFS // Add for DFS support -case CATEGORY_SPEC_MGT: - { - if(prAdapter->fgEnable5GBand == TRUE) - rlmProcessSpecMgtAction(prAdapter, prSwRfb); - } - break; -#endif - - default: - break; - } /* end of switch case */ - - return WLAN_STATUS_SUCCESS; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_tx.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_tx.c deleted file mode 100755 index 8638c58ca8e2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/nic_tx.c +++ /dev/null @@ -1,1977 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_tx.c#1 $ -*/ - -/*! \file nic_tx.c - \brief Functions that provide TX operation in NIC Layer. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. -*/ - - - -/* -** $Log: nic_tx.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * remove unused variables. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 27 2010 wh.su - * NULL - * since the u2TxByteCount_UserPriority will or another setting, keep the overall buffer for avoid error - * - * 09 24 2010 wh.su - * NULL - * [WCXRP000000058][MT6620 Wi-Fi][Driver] Fail to handshake with WAPI AP due the 802.1x frame send to fw with extra bytes padding. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 05 2010 yuche.tsai - * NULL - * . - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add checking for TX descriptor poll. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * * - * -* 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * avoid refering to NDIS-specific data structure directly from non-glue layer. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * * 4) nicRxWaitResponse() revised - * * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-10 16:52:15 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-12-07 22:44:24 GMT mtk02752 -** correct assertion criterion -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-12-07 21:15:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-12-04 15:47:21 GMT mtk02752 -** + always append a dword of zero on TX path to avoid TX aggregation to triggered on uninitialized data -** + add more assertion for packet size check -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-12-04 14:51:55 GMT mtk02752 -** nicTxMsduInfo(): save ptr for next entry before attaching to qDataPort -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-12-04 11:54:54 GMT mtk02752 -** add 2 assertion for size check -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-12-03 16:20:35 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-30 10:57:10 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-30 09:20:43 GMT mtk02752 -** use TC4 instead of TC5 for command packet -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-27 11:08:11 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-26 20:31:22 GMT mtk02752 -** fill prMsduInfo->ucUserPriority -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-25 21:04:33 GMT mtk02752 -** fill u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-24 20:52:12 GMT mtk02752 -** integration with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-24 19:54:25 GMT mtk02752 -** nicTxRetransmitOfOsSendQue & nicTxData but changed to use nicTxMsduInfoList -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 17:53:18 GMT mtk02752 -** add nicTxCmd() for SD1_SD3_DATAPATH_INTEGRATION, which will append only HIF_TX_HEADER. seqNum, WIFI_CMD_T will be created inside oid handler -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-20 15:10:24 GMT mtk02752 -** use TxAccquireResource instead of accessing TCQ directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-17 22:40:57 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-17 17:35:40 GMT mtk02752 -** add nicTxMsduInfoList () implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-17 11:07:10 GMT mtk02752 -** add nicTxAdjustTcq() implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-16 22:28:38 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-16 21:45:32 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-13 13:29:56 GMT mtk01084 -** modify TX hdr format, fix tx retransmission issue -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 10:36:21 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-04 14:11:11 GMT mtk01084 -** modify TX SW data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-10-29 19:56:17 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-13 21:59:23 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-02 14:00:18 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-05-20 12:26:06 GMT mtk01461 -** Assign SeqNum to CMD Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-05-19 10:54:04 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-05-12 09:41:55 GMT mtk01461 -** Fix Query Command need resp issue -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-29 15:44:38 GMT mtk01461 -** Move OS dependent code to kalQueryTxOOBData() -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-28 10:40:03 GMT mtk01461 -** Add nicTxReleaseResource() for SDIO_STATUS_ENHANCE, and also fix the TX aggregation issue for 1x packet to TX1 port -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-21 09:50:47 GMT mtk01461 -** Update nicTxCmd() for moving wait RESP function call to wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-17 19:56:32 GMT mtk01461 -** Move the CMD_INFO_T related function to cmd_buf.c -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-17 18:14:40 GMT mtk01426 -** Update OOB query for TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:51:32 GMT mtk01426 -** Support PKGUIO -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-02 17:26:40 GMT mtk01461 -** Add virtual OOB for HIF LOOPBACK SW PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:54:43 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:53:47 GMT mtk01461 -** Add code for retransmit of rOsSendQueue, mpSendPacket(), and add code for TX Checksum offload, Loopback Test. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:33:51 GMT mtk01461 -** Add code for TX Data & Cmd Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:40 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:30 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:04 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial all variables in regard to SW TX Queues and -* all free lists of MSDU_INFO_T and SW_TFCB_T. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - PUINT_8 pucMemHandle; - P_MSDU_INFO_T prMsduInfo; - UINT_32 i; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxInitialize"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - //4 <1> Initialization of Traffic Class Queue Parameters - nicTxResetResource(prAdapter); - -#if CFG_SDIO_TX_AGG - prTxCtrl->pucTxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; -#endif /* CFG_SDIO_TX_AGG */ - - // allocate MSDU_INFO_T and link it into rFreeMsduInfoList - QUEUE_INITIALIZE(&prTxCtrl->rFreeMsduInfoList); - - pucMemHandle = prTxCtrl->pucTxCached; - for (i = 0 ; i < CFG_TX_MAX_PKT_NUM ; i++) { - prMsduInfo = (P_MSDU_INFO_T)pucMemHandle; - kalMemZero(prMsduInfo, sizeof(MSDU_INFO_T)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - pucMemHandle += ALIGN_4(sizeof(MSDU_INFO_T)); - } - - ASSERT(prTxCtrl->rFreeMsduInfoList.u4NumElem == CFG_TX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prTxCtrl->pucTxCached) == prTxCtrl->u4TxCachedSize); - - QUEUE_INITIALIZE(&prTxCtrl->rTxMgmtTxingQueue); - prTxCtrl->i4TxMgmtPendingNum = 0; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum = 0; - prTxCtrl->u4TotalTxPacketNum = 0; -#endif - - prTxCtrl->i4PendingFwdFrameCount = 0; - - qmInit(prAdapter); - - TX_RESET_ALL_CNTS(prTxCtrl); - - return; -} /* end of nicTxInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will check if has enough TC Buffer for incoming -* packet and then update the value after promise to provide the resources. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucTC Specify the resource of TC -* -* \retval WLAN_STATUS_SUCCESS Resource is available and been assigned. -* \retval WLAN_STATUS_RESOURCES Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_RESOURCES; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - -// DbgPrint("nicTxAcquireResource prTxCtrl->rTc.aucFreeBufferCount[%d]=%d\n", ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC]); - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC]) { - - prTxCtrl->rTc.aucFreeBufferCount[ucTC]--; - - DBGLOG(TX, EVENT, ("Acquire: TC = %d aucFreeBufferCount = %d\n", - ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC])); - - u4Status = WLAN_STATUS_SUCCESS; - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return u4Status; - -}/* end of nicTxAcquireResourceAndTFCBs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will do polling if FW has return the resource. -* Used when driver start up before enable interrupt. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Resource is available. -* @retval WLAN_STATUS_FAILURE Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - INT_32 i = NIC_TX_RESOURCE_POLLING_TIMEOUT; - UINT_32 au4WTSR[2]; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - if (ucTC >= TC_NUM) { - return WLAN_STATUS_FAILURE; - } - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - return WLAN_STATUS_SUCCESS; - } - - while (i-- > 0) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, au4WTSR); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if (nicTxReleaseResource(prAdapter, (PUINT_8)au4WTSR)) { - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - u4Status = WLAN_STATUS_SUCCESS; - break; - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - -#if DBG - { - INT_32 i4Times = NIC_TX_RESOURCE_POLLING_TIMEOUT - (i+1); - - if (i4Times) { - DBGLOG(TX, TRACE, ("Polling MCR_WTSR delay %d times, %d msec\n", - i4Times, (i4Times * NIC_TX_RESOURCE_POLLING_DELAY_MSEC))); - } - } -#endif /* DBG */ - - return u4Status; - -} /* end of nicTxPollingResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will release TC Buffer count according to -* the given TX_STATUS COUNTER after TX Done. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] u4TxStatusCnt Value of TX STATUS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ) -{ - PUINT_32 pu4Tmp = (PUINT_32)aucTxRlsCnt; - P_TX_CTRL_T prTxCtrl; - BOOLEAN bStatus = FALSE; - UINT_32 i; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - if (pu4Tmp[0] | pu4Tmp[1]) { - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - for (i = 0; i < TC_NUM; i++) { - prTxCtrl->rTc.aucFreeBufferCount[i] += aucTxRlsCnt[i]; - - if ((i==1) || (i==5)){ - DBGLOG(TX, EVENT, ("Release: i = %d aucFreeBufferCount = %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i])); - } - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); -#if 0 - for (i = 0; i < TC_NUM; i++) { - DBGLOG(INIT, TRACE, ("aucFreeBufferCount[%d]: %d, aucMaxNumOfBuffer[%d]: %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i], i, prTxCtrl->rTc.aucMaxNumOfBuffer[i])); - } - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[0]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[0]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[1]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[1]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[2]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[2]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[3]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[3]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[4]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[4]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[5]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[5]); -#endif - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX]); - bStatus = TRUE; - } - - return bStatus; -} /* end of nicTxReleaseResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reset TC Buffer Count to initialized value -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will return the value for other component -* which needs this information for making decisions -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval UINT_8 The number of corresponding TC number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(prTxCtrl); - - if (ucTC >= TC_NUM) { - return 0; - } - else { - return prTxCtrl->rTc.aucFreeBufferCount[ucTC]; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll aggregate frame(PACKET_INFO_T) -* corresponding to HIF TX port -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoListHead a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - QUE_T qDataPort0, qDataPort1; - WLAN_STATUS status; - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prMsduInfo = prMsduInfoListHead; - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - // Separate MSDU_INFO_T lists into 2 categories: for Port#0 & Port#1 - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); -#if DBG && 0 - LOG_FUNC("nicTxMsduInfoList Acquire TC %d net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prMsduInfo->ucTC, - prMsduInfo->ucNetworkType, - prMsduInfo->ucMacHeaderLength, - prMsduInfo->u2FrameLength, - prMsduInfo->ucPacketType, - prMsduInfo->fgIs802_1x, - prMsduInfo->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prMsduInfo->aucEthDestAddr)); -#endif - - switch(prMsduInfo->ucTC) { - case TC0_INDEX: - case TC1_INDEX: - case TC2_INDEX: - case TC3_INDEX: - case TC5_INDEX: // Broadcast/multicast data packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - case TC4_INDEX: // Command or 802.1x packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - default: - ASSERT(0); - break; - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 0, &qDataPort0); - } - - if(qDataPort1.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 1, &qDataPort1); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll write frame(PACKET_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucPortIdx Port Number -* @param prQue a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_16 u2OverallBufferLength; - UINT_8 ucEtherTypeOffsetInWord; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4TxHdrSize; - UINT_32 u4ValidBufSize; - UINT_32 u4TotalLength; - P_TX_CTRL_T prTxCtrl; - QUE_T rFreeQueue; -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_8 ucChksumFlag; -#endif - - ASSERT(prAdapter); - ASSERT(ucPortIdx < 2); - ASSERT(prQue); - - prTxCtrl = &prAdapter->rTxCtrl; - u4ValidBufSize = prAdapter->u4CoalescingBufCachedSize; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum++; - prTxCtrl->u4TotalTxPacketNum += prQue->u4NumElem; -#endif - - QUEUE_INITIALIZE(&rFreeQueue); - - if(prQue->u4NumElem > 0) { - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_HEAD(prQue); - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - u4TotalLength = 0; - - while(prMsduInfo) { - - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prMsduInfo->prPacket; - - ASSERT(prNativePacket); - - u4TxHdrSize = TX_HDR_SIZE; - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - if (prMsduInfo->fgIs802_11) { - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - } - else { - ucEtherTypeOffsetInWord = - ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - } - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - if (prAdapter->u4CSUMFlags & - (CSUM_OFFLOAD_EN_TX_TCP | - CSUM_OFFLOAD_EN_TX_UDP | - CSUM_OFFLOAD_EN_TX_IP)) { - kalQueryTxChksumOffloadParam(prNativePacket, &ucChksumFlag); - - if (ucChksumFlag & TX_CS_IP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_IP_CSUM; - } - - if (ucChksumFlag & TX_CS_TCP_UDP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_TCP_CSUM; - } - } - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - -#if CFG_SDIO_TX_AGG - // attach to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, &rHwTxHeader, u4TxHdrSize); - u4TotalLength += u4TxHdrSize; - - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TotalLength); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TotalLength, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - u4TotalLength += ALIGN_4(prMsduInfo->u2FrameLength); - -#else - kalMemCopy(pucOutputBuf, &rHwTxHeader, u4TxHdrSize); - - /* Copy Frame Body */ - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TxHdrSize); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TxHdrSize, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - ASSERT(u2OverallBufferLength <= u4ValidBufSize); - - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); - - // send immediately -#endif - prNextMsduInfo = (P_MSDU_INFO_T) - QUEUE_GET_NEXT_ENTRY(&prMsduInfo->rQueEntry); - - if (prMsduInfo->eSrc == TX_PACKET_MGMT) { - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - KAL_SPIN_LOCK_DECLARATION(); - DBGLOG(INIT, TRACE,("Wait TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - /* only free MSDU when it is not a MGMT frame */ - QUEUE_INSERT_TAIL(&rFreeQueue, (P_QUE_ENTRY_T)prMsduInfo); - - if (prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_SUCCESS); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - } - - prMsduInfo = prNextMsduInfo; - } - -#if CFG_SDIO_TX_AGG - ASSERT(u4TotalLength <= u4ValidBufSize); - - #if CFG_DBG_GPIO_PINS - { - /* Start port write */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_HIGH); - } - #endif - - // send coalescing buffer - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - u4TotalLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); -#endif - - // return - nicTxReturnMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_WIFI_CMD_T prWifiCmd; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_8 ucPortIdx; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_8 ucEtherTypeOffsetInWord; - P_MSDU_INFO_T prMsduInfo; - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - - // <1> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { - // Broadcast/multicast data frames, 1x frames, command packets, MMPDU - ucPortIdx = 1; - } - - if(prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prCmdInfo->prPacket; - - ASSERT(prNativePacket); - - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = ((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - ucEtherTypeOffsetInWord = ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET); - - rHwTxHeader.ucStaRecIdx = prCmdInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = HIF_TX_HDR_BURST_END_MASK; - - rHwTxHeader.ucWlanHeaderLength = (ETH_HLEN & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (((UINT_8)(prCmdInfo->eNetworkType) << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((1 << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK); - - rHwTxHeader.u2SeqNo = 0; - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body Copy - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + TX_HDR_SIZE); - } - else if(prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - ASSERT(prMsduInfo->fgIs802_11 == TRUE); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body - kalMemCopy(pucOutputBuf + TX_HDR_SIZE, - prMsduInfo->prPacket, - prMsduInfo->u2FrameLength); - - // <4> Management Frame Post-Processing - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - - DBGLOG(INIT, TRACE,("Wait Cmd TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - prWifiCmd = (P_WIFI_CMD_T)prCmdInfo->pucInfoBuffer; - - // <2> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prWifiCmd->u2TxByteCount_UserPriority = u2OverallBufferLength; - prWifiCmd->ucEtherTypeOffset = 0; - prWifiCmd->ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET) - | (UINT_8)((HIF_TX_PKT_TYPE_CMD << HIF_TX_HDR_PACKET_TYPE_OFFSET) & (HIF_TX_HDR_PACKET_TYPE_MASK)); - - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - } - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} /* end of nicTxCmd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will clean up all the pending frames in internal SW Queues -* by return the pending TX packet to the system. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - nicTxFlush(prAdapter); - - // free MSDU_INFO_T from rTxMgmtMsduInfoList - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rTxMgmtTxingQueue, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - if(prMsduInfo) { - // the packet must be mgmt frame with tx done callback - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - ASSERT(prMsduInfo->pfTxDoneHandler != NULL); - - // invoke done handler - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_LIFE_TIMEOUT); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - break; - } - } while(TRUE); - - return; -} /* end of nicTxRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process the TX Done interrupt and pull in more pending frames in SW -* Queues for transmission. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessTxInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; -#if CFG_SDIO_INTR_ENHANCE - P_SDIO_CTRL_T prSDIOCtrl; -#else - UINT_32 au4TxCount[2]; -#endif /* CFG_SDIO_INTR_ENHANCE */ - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - /* Get the TX STATUS */ -#if CFG_SDIO_INTR_ENHANCE - - prSDIOCtrl = prAdapter->prSDIOCtrl; - #if DBG - //dumpMemory8((PUINT_8)prSDIOCtrl, sizeof(SDIO_CTRL_T)); - #endif - - nicTxReleaseResource(prAdapter, (PUINT_8)&prSDIOCtrl->rTxInfo); - kalMemZero(&prSDIOCtrl->rTxInfo, sizeof(prSDIOCtrl->rTxInfo)); - -#else - - HAL_MCR_RD(prAdapter, MCR_WTSR0, &au4TxCount[0]); - HAL_MCR_RD(prAdapter, MCR_WTSR1, &au4TxCount[1]); - DBGLOG(EMU, TRACE, ("MCR_WTSR0: 0x%x, MCR_WTSR1: 0x%x\n", au4TxCount[0], au4TxCount[1])); - - nicTxReleaseResource(prAdapter, (PUINT_8)au4TxCount); - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicTxAdjustTcq(prAdapter); - - // Indicate Service Thread - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return; -} /* end of nicProcessTxInterrupt() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function frees packet of P_MSDU_INFO_T linked-list -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_NATIVE_PACKET prNativePacket; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead; - P_TX_CTRL_T prTxCtrl; - - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - - while(prMsduInfo) { - prNativePacket = prMsduInfo->prPacket; - - if(prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_FAILURE); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - if (prMsduInfo->pfTxDoneHandler) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - cnmMemFree(prAdapter, prNativePacket); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function returns P_MSDU_INFO_T of MsduInfoList to TxCtrl->rfreeMsduInfoList -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead, prNextMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - switch(prMsduInfo->eSrc) { - case TX_PACKET_FORWARDING: - wlanReturnPacket(prAdapter, prMsduInfo->prPacket); - break; - case TX_PACKET_OS: - case TX_PACKET_OS_OID: - case TX_PACKET_MGMT: - default: - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = prNextMsduInfo; - }; - - return; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function fills packet information to P_MSDU_INFO_T -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfo P_MSDU_INFO_T -* @param prPacket P_NATIVE_PACKET -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_8 ucPriorityParam; - UINT_8 ucMacHeaderLen; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - if (kalQoSFrameClassifierAndPacketInfo(prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == FALSE) { - return FALSE; - } - - /* Save the value of Priority Parameter */ - GLUE_SET_PKT_TID(prPacket, ucPriorityParam); - - if (fgIs1x) { - GLUE_SET_PKT_FLAG_1X(prPacket); - } - - if (fgIsPAL) { - GLUE_SET_PKT_FLAG_PAL(prPacket); - } - - ucMacHeaderLen = ETH_HLEN; - - /* Save the value of Header Length */ - GLUE_SET_PKT_HEADER_LEN(prPacket, ucMacHeaderLen); - - /* Save the value of Frame Length */ - GLUE_SET_PKT_FRAME_LEN(prPacket, (UINT_16)u4PacketLen); - - /* Save the value of Arrival Time*/ - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - prMsduInfo->prPacket = prPacket; - prMsduInfo->fgIs802_1x = fgIs1x; - prMsduInfo->fgIs802_11 = FALSE; - prMsduInfo->ucNetworkType = ucNetworkType; - prMsduInfo->ucUserPriority = ucPriorityParam; - prMsduInfo->ucMacHeaderLength = ucMacHeaderLen; - prMsduInfo->u2FrameLength = (UINT_16)u4PacketLen; - COPY_MAC_ADDR(prMsduInfo->aucEthDestAddr, aucEthDestAddr); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function update TCQ values by passing current status to txAdjustTcQuotas -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Updated successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Num; - TX_TCQ_ADJUST_T rTcqAdjust; - P_TX_CTRL_T prTxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - qmAdjustTcQuotas(prAdapter, &rTcqAdjust, &prTxCtrl->rTc); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - for (u4Num = 0 ; u4Num < TC_NUM ; u4Num++) { - prTxCtrl->rTc.aucFreeBufferCount[u4Num] += rTcqAdjust.acVariation[u4Num]; - prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] += rTcqAdjust.acVariation[u4Num]; - - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[u4Num] >= 0); - ASSERT(prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] >= 0); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in STA/AC queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MSDU_INFO_T prMsduInfo; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - // ask Per STA/AC queue to be fllushed and return all queued packets - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmFlushTxQueues(prAdapter); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfo); - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - } - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_ENABLE_FW_DOWNLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* However this function is used for INIT_CMD. -* -* In order to avoid further maintainance issues, these 2 functions are separated -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_INIT_HIF_TX_HEADER_T prInitTxHeader; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 ucPortIdx; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(ucTC == TC0_INDEX); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - prInitTxHeader = (P_INIT_HIF_TX_HEADER_T)prCmdInfo->pucInfoBuffer; - - // <1> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prInitTxHeader->u2TxByteCount = u2OverallBufferLength; - prInitTxHeader->ucEtherTypeOffset = 0; - prInitTxHeader->ucCSflags = 0; - - // <2> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { // Broadcast/multicast data packets - ucPortIdx = 1; - } - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll reset TX resource counter to initial value used -* in F/W download state -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicTxInitResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - - return WLAN_STATUS_SUCCESS; - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function enqueues MSDU_INFO_T into queue management, -* or command queue -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfo Pointer to MSDU -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prNextMsduInfo, prRetMsduInfo, prMsduInfoHead; - QUE_T qDataPort0, qDataPort1; - P_CMD_INFO_T prCmdInfo; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - /* check how many management frame are being queued */ - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - - if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - // MMPDU: force stick to TC4 - prMsduInfo->ucTC = TC4_INDEX; - - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem) { - /* send to QM */ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfo = qmEnqueueTxPackets(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort0)); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - /* post-process for dropped packets */ - if(prRetMsduInfo != NULL) { // unable to enqueue - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfo); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfo); - } - } - - if(qDataPort1.u4NumElem) { - prMsduInfoHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort1); - - if(qDataPort1.u4NumElem > nicTxGetFreeCmdCount(prAdapter)) { - // not enough descriptors for sending - u4Status = WLAN_STATUS_FAILURE; - - // free all MSDUs - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - if (prMsduInfoHead->pfTxDoneHandler != NULL) { - prMsduInfoHead->pfTxDoneHandler(prAdapter, prMsduInfoHead, TX_RESULT_DROPPED_IN_DRIVER); - } - - - cnmMgtPktFree(prAdapter, prMsduInfoHead); - - prMsduInfoHead = prNextMsduInfo; - } - } - else { - /* send to command queue */ - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - GLUE_INC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_MANAGEMENT_FRAME; - prCmdInfo->u2InfoBufLen = prMsduInfoHead->u2FrameLength; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = (P_NATIVE_PACKET)prMsduInfoHead; - prCmdInfo->ucStaRecIndex = prMsduInfoHead->ucStaRecIndex; - prCmdInfo->eNetworkType = prMsduInfoHead->ucNetworkType; - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - } - else { - /* Cmd free count is larger than expected, but allocation fail. */ - ASSERT(0); - - u4Status = WLAN_STATUS_FAILURE; - cnmMgtPktFree(prAdapter, prMsduInfoHead); - } - - prMsduInfoHead = prNextMsduInfo; - } - } - } - - /* indicate service thread for sending */ - if(prTxCtrl->i4TxMgmtPendingNum > 0 - || kalGetTxPendingFrameCount(prAdapter->prGlueInfo) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function returns available count in command queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rFreeCmdList.u4NumElem; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/p2p_nic.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/p2p_nic.c deleted file mode 100755 index 592318b00454..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/p2p_nic.c +++ /dev/null @@ -1,203 +0,0 @@ -/* -** $Id: @(#) p2p_nic.c@@ -*/ - -/*! \file p2p_nic.c - \brief Wi-Fi Direct Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief When Probe Rsp & Beacon frame is received and decide a P2P device, -* this function will be invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param prEventScanResult Pointer of EVENT_SCAN_RESULT_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxAddP2pDevice ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ) -{ - P_P2P_INFO_T prP2pInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - UINT_32 u4Idx = 0; - BOOLEAN bUpdate = FALSE; - - PUINT_8 pucIeBuf = (PUINT_8)NULL; - UINT_16 u2IELength = 0; - UINT_8 zeroMac[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - - ASSERT(prAdapter); - - prP2pInfo = prAdapter->prP2pInfo; - - for (u4Idx = 0; u4Idx < prP2pInfo->u4DeviceNum; u4Idx++) { - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - if (EQUAL_MAC_ADDR(prTargetResult->aucDeviceAddr, prP2pResult->aucDeviceAddr)) { - bUpdate = TRUE; - - /* Backup OLD buffer result. */ - pucIeBuf = prTargetResult->pucIeBuf; - u2IELength = prTargetResult->u2IELength; - - /* Update Device Info. */ - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - /* See if new IE length is longer or not. */ - if ((u2RxIELength > u2IELength) && (u2IELength != 0)) { - /* Buffer is not enough. */ - u2RxIELength = u2IELength; - } - else if ((u2IELength == 0) && (u2RxIELength != 0)) { - /* RX new IE buf. */ - ASSERT(pucIeBuf == NULL); - pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2RxIELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - - /* Step to next buffer address. */ - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength); - } - - /* Restore buffer pointer. */ - prTargetResult->pucIeBuf = pucIeBuf; - - if (pucRxIEBuf) { - /* If new received IE is availabe. - * Replace the old one & update new IE length. - */ - kalMemCopy(pucIeBuf, pucRxIEBuf, u2RxIELength); - prTargetResult->u2IELength = u2RxIELength; - } - else { - /* There is no new IE information, keep the old one. */ - prTargetResult->u2IELength = u2IELength; - } - } - } - - if (!bUpdate) { - /* We would flush the whole scan result after each scan request is issued. - * If P2P device is too many, it may over the scan list. - */ - if ((u4Idx < CFG_MAX_NUM_BSS_LIST) && (UNEQUAL_MAC_ADDR(zeroMac, prP2pResult->aucDeviceAddr))) { /* whsu:XXX */ - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - //printk("DVC FND %d " MACSTR", " MACSTR "\n", prP2pInfo->u4DeviceNum, MAC2STR(prP2pResult->aucDeviceAddr), MAC2STR(prTargetResult->aucDeviceAddr)); - - if (u2RxIELength) { - prTargetResult->pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2IELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - else { - u2IELength = u2RxIELength; - } - - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2IELength); - - kalMemCopy((PVOID)prTargetResult->pucIeBuf, (PVOID)pucRxIEBuf, (UINT_32)u2IELength); - prTargetResult->u2IELength = u2IELength; - } - else { - prTargetResult->pucIeBuf = NULL; - prTargetResult->u2IELength = 0; - } - - prP2pInfo->u4DeviceNum++; - - } - else { - // TODO: Fixme to replace an old one. (?) - ASSERT(FALSE); - } - } -} /* nicRxAddP2pDevice */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/que_mgt.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/que_mgt.c deleted file mode 100755 index c6a07c157f92..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/nic/que_mgt.c +++ /dev/null @@ -1,4827 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/que_mgt.c#1 $ -*/ - -/*! \file "que_mgt.c" - \brief TX/RX queues management - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - - - -/* -** $Log: que_mgt.c $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 23 2012 eddie.chen - * [WCXRP00001194] [MT6620][DRV/FW] follow admission control bit to change the enqueue rule - * Change the enqueue policy when ACM = 1. - * - * 11 22 2011 yuche.tsai - * NULL - * Code refine, remove one #if 0 code. - * - * 11 19 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for tx - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Fix xlog format to hex format - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug msg for xlog. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Use short name for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 chinglan.wang - * NULL - * [WiFi WPS]Can't switch to new AP via WPS PBC when there existing a connection to another AP. - * - * 11 09 2011 chinglan.wang - * NULL - * [WiFi direct]Can't make P2P connect via PBC. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 25 2011 wh.su - * [WCXRP00001059] [MT6620 Wi-Fi][Driver][P2P] Fixed sometimes data (1x) will not indicate to upper layer due ba check un-expect - * let the Rx BA accept even the sta not valid. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 09 01 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * set rx window size as twice buffer size. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 03 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * force window size at least 16. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 07 07 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Add setEvent when free quota is updated. - * - * 07 05 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Send 1x when peer STA is in PS. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 yuche.tsai - * [WCXRP00000712] [Volunteer Patch][MT6620][Driver] Sending deauth issue when Hot spot is disabled. (GO is dissolved) - * Deauthentication frame is not bound to network active status. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 14 2011 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out[WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * Allow 802.1x can be send even the net is not active due the drver / fw sync issue. - * - * 01 13 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix typo and compile error. - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix WMM parameter condition for STA - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 01 12 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Update MQM for WMM IE generation method - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add per STA flow control when STA is in PS mode - * - * 01 03 2011 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update prStaRec->fgIsUapsdSupported flag. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * use the #14 and modify the add code for check MMPDU. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * only MMPDU not check the netActive flag. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * not check the netActive flag for mgmt . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 30 2010 yarco.yang - * NULL - * Fixed klockwork error message - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 10 2010 yarco.yang - * NULL - * Code refine - * - * 08 06 2010 yarco.yang - * NULL - * Update qmGetFrameAction() to allow P2P MGMT frame w/o STA_Record still can perform TX action - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 20 2010 yarco.yang - * - * Add to SetEvent when BSS is from Absent to Present or STA from PS to Awake - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * . - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Use fgInUse instead of fgIsValid for De-queue judgement - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * For MMPDU, STA_REC will be decided by caller module - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined the debug msg - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * comment out one assertion which refer to undefined data member. - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * -* 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * For TX packets with STA_REC index = STA_REC_INDEX_NOT_FOUND, use TC5 - * - * 03 01 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed STA_REC index determination bug (fgIsValid shall be checked) - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined function qmDetermineStaRecIndex() for BMCAST packets - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the 802.1x path - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-14 15:01:37 GMT MTK02468 -** Fixed casting for qmAddRxBaEntry() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:51:03 GMT mtk02752 -** remove SD1_SD3.. flag -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-09 14:07:25 GMT MTK02468 -** Added RX buffer reordering functions -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-04 13:34:16 GMT MTK02468 -** Modified Flush Queue function to let queues be reinitialized -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-04 13:18:25 GMT MTK02468 -** Added flushing per-Type queues code -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 23:39:49 GMT MTK02468 -** Added Debug msgs and fixed incorrect assert -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-26 23:50:27 GMT MTK02468 -** Bug fixing (qmDequeueTxPackets local variable initialization) -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-26 09:39:25 GMT mtk02752 -** correct and surpress PREfast warning -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-11-23 22:10:55 GMT mtk02468 -** Used SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 22:02:30 GMT mtk02468 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -OS_SYSTIME g_arMissTimeout[CFG_STA_REC_NUM][CFG_RX_MAX_BA_TID_NUM]; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentAvailableQuota, - IN UINT_8 ucTotalQuota - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for TX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4QueArrayIdx; - UINT_32 i; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmInit()\n"); -#if CFG_SUPPORT_QOS - prAdapter->rWifiVar.fgSupportQoS = TRUE; -#else - prAdapter->rWifiVar.fgSupportQoS = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_RX - prAdapter->rWifiVar.fgSupportAmpduRx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduRx = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_TX - prAdapter->rWifiVar.fgSupportAmpduTx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduTx = FALSE; -#endif - -#if CFG_SUPPORT_TSPEC - prAdapter->rWifiVar.fgSupportTspec = TRUE; -#else - prAdapter->rWifiVar.fgSupportTspec = FALSE; -#endif - -#if CFG_SUPPORT_UAPSD - prAdapter->rWifiVar.fgSupportUAPSD= TRUE; -#else - prAdapter->rWifiVar.fgSupportUAPSD = FALSE; -#endif - -#if CFG_SUPPORT_UL_PSMP - prAdapter->rWifiVar.fgSupportULPSMP = TRUE; -#else - prAdapter->rWifiVar.fgSupportULPSMP = FALSE; -#endif - -#if CFG_SUPPORT_RX_SGI - prAdapter->rWifiVar.u8SupportRxSgi20 = 0; - prAdapter->rWifiVar.u8SupportRxSgi40 = 0; -#else - prAdapter->rWifiVar.u8SupportRxSgi20 = 2; - prAdapter->rWifiVar.u8SupportRxSgi40 = 2; -#endif - -#if CFG_SUPPORT_RX_HT_GF - prAdapter->rWifiVar.u8SupportRxGf = 0; -#else - prAdapter->rWifiVar.u8SupportRxGf = 2; -#endif - - - //4 <2> Initialize other TX queues (queues not in STA_RECs) - for(u4QueArrayIdx = 0; u4QueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; u4QueArrayIdx++){ - QUEUE_INITIALIZE(&(prQM->arTxQueue[u4QueArrayIdx])); - } - - //4 <3> Initialize the RX BA table and RX queues - /* Initialize the RX Reordering Parameters and Queues */ - for(u4QueArrayIdx = 0; u4QueArrayIdx < CFG_NUM_OF_RX_BA_AGREEMENTS; u4QueArrayIdx++){ - prQM->arRxBaTable[u4QueArrayIdx].fgIsValid = FALSE; - QUEUE_INITIALIZE(&(prQM->arRxBaTable[u4QueArrayIdx].rReOrderQue)); - prQM->arRxBaTable[u4QueArrayIdx].u2WinStart = 0xFFFF; - prQM->arRxBaTable[u4QueArrayIdx].u2WinEnd = 0xFFFF; - - prQM->arRxBaTable[u4QueArrayIdx].fgIsWaitingForPktWithSsn = FALSE; - - } - prQM->ucRxBaCount = 0; - - kalMemSet(&g_arMissTimeout, 0, sizeof(g_arMissTimeout)); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - //4 <4> Initialize TC resource control variables - for(i = 0; i < TC_NUM; i++){ - prQM->au4AverageQueLen[i] = 0; - } - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - -// ASSERT(prQM->u4TimeToAdjust && prQM->u4TimeToUpdateQueLen); - - prQM->au4CurrentTcResource[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prQM->au4CurrentTcResource[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prQM->au4CurrentTcResource[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prQM->au4CurrentTcResource[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prQM->au4CurrentTcResource[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; /* Not adjustable (TX port 1)*/ - prQM->au4CurrentTcResource[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - prQM->au4MinReservedTcResource[TC0_INDEX] = QM_MIN_RESERVED_TC0_RESOURCE; - prQM->au4MinReservedTcResource[TC1_INDEX] = QM_MIN_RESERVED_TC1_RESOURCE; - prQM->au4MinReservedTcResource[TC2_INDEX] = QM_MIN_RESERVED_TC2_RESOURCE; - prQM->au4MinReservedTcResource[TC3_INDEX] = QM_MIN_RESERVED_TC3_RESOURCE; - prQM->au4MinReservedTcResource[TC4_INDEX] = QM_MIN_RESERVED_TC4_RESOURCE; /* Not adjustable (TX port 1)*/ - prQM->au4MinReservedTcResource[TC5_INDEX] = QM_MIN_RESERVED_TC5_RESOURCE; - - - prQM->au4GuaranteedTcResource[TC0_INDEX] = QM_GUARANTEED_TC0_RESOURCE; - prQM->au4GuaranteedTcResource[TC1_INDEX] = QM_GUARANTEED_TC1_RESOURCE; - prQM->au4GuaranteedTcResource[TC2_INDEX] = QM_GUARANTEED_TC2_RESOURCE; - prQM->au4GuaranteedTcResource[TC3_INDEX] = QM_GUARANTEED_TC3_RESOURCE; - prQM->au4GuaranteedTcResource[TC4_INDEX] = QM_GUARANTEED_TC4_RESOURCE; - prQM->au4GuaranteedTcResource[TC5_INDEX] = QM_GUARANTEED_TC5_RESOURCE; - - prQM->fgTcResourcePostAnnealing = FALSE; - - ASSERT(QM_INITIAL_RESIDUAL_TC_RESOURCE < 64); -#endif - -#if QM_TEST_MODE - prQM->u4PktCount = 0; - -#if QM_TEST_FAIR_FORWARDING - - prQM->u4CurrentStaRecIndexToEnqueue = 0; - { - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - P_STA_RECORD_T prStaRec; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - prStaRec = &prAdapter->arStaRec[1]; - ASSERT(prStaRec); - - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prStaRec->fgIsAp = TRUE; - COPY_MAC_ADDR((prStaRec)->aucMacAddr,aucMacAddr); - - } - -#endif - -#endif - -#if QM_FORWARDING_FAIRNESS -{ - UINT_32 i; - for (i=0; i < NUM_OF_PER_STA_TX_QUEUES; i++){ - prQM->au4ForwardCount[i] = 0; - prQM->au4HeadStaRecIndex[i] = 0; - } -} -#endif - -} - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ) -{ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DbgPrint("QM: ** TEST MODE **\n"); - - if(QM_TEST_STA_REC_DETERMINATION){ - if(prAdapter->arStaRec[0].fgIsValid){ - prAdapter->arStaRec[0].fgIsValid = FALSE; - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - } - else{ - prAdapter->arStaRec[0].fgIsValid = TRUE; - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - } - } - - if(QM_TEST_STA_REC_DEACTIVATION){ - /* Note that QM_STA_REC_HARD_CODING shall be set to 1 for this test */ - - if(prAdapter->arStaRec[0].fgIsValid){ - - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - qmDeactivateStaRec(prAdapter,0); - } - else{ - - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - qmActivateStaRec( - prAdapter, /* Adapter pointer */ - 0, /* STA_REC index from FW */ - TRUE, /* fgIsQoS */ - NETWORK_TYPE_AIS_INDEX, /* Network type */ - TRUE, /* fgIsAp */ - aucMacAddr /* MAC address */ - ); - } - } - - if(QM_TEST_FAIR_FORWARDING){ - if(prAdapter->arStaRec[1].fgIsValid){ - prQM->u4CurrentStaRecIndexToEnqueue ++; - prQM->u4CurrentStaRecIndexToEnqueue %= 2; - DbgPrint("QM: (Test) Switch to STA_REC[%ld]\n", prQM->u4CurrentStaRecIndexToEnqueue); - } - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Activate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* \param[in] fgIsQoS Set to TRUE if this is a QoS STA -* \param[in] pucMacAddr The MAC address of the STA -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - - //4 <1> Deactivate first - ASSERT(prStaRec); - - if(prStaRec->fgIsValid){ /* The STA_REC has been activated */ - DBGLOG(QM, WARN, ("QM: (WARNING) Activating a STA_REC which has been activated \n")); - DBGLOG(QM, WARN, ("QM: (WARNING) Deactivating a STA_REC before re-activating \n")); - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); // To flush TX/RX queues and del RX BA agreements - } - - //4 <2> Activate the STA_REC - /* Init the STA_REC */ - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->fgIsAp = (IS_AP_STA(prStaRec)) ? TRUE : FALSE;; - - /* Done in qmInit() or qmDeactivateStaRec() */ -#if 0 - /* At the beginning, no RX BA agreements have been established */ - for(i =0; iaprRxReorderParamRefTbl)[i] = NULL; - } -#endif - - DBGLOG(QM, INFO, ("QM: +STA[%ld]\n", prStaRec->ucIndex)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - P_STA_RECORD_T prStaRec; - UINT_32 i; - P_MSDU_INFO_T prFlushedTxPacketList = NULL; - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - //4<1> Flush TX queues - prFlushedTxPacketList = qmFlushStaTxQueues(prAdapter, u4StaRecIdx); - - if(prFlushedTxPacketList){ - wlanProcessQueuedMsduInfo(prAdapter, prFlushedTxPacketList); - } - - //4 <2> Flush RX queues and delete RX BA agreements - for(i =0; i < CFG_RX_MAX_BA_TID_NUM; i++){ - /* Delete the RX BA entry with TID = i */ - qmDelRxBaEntry(prAdapter, (UINT_8)u4StaRecIdx, (UINT_8)i, FALSE); - } - - //4 <3> Deactivate the STA_REC - prStaRec->fgIsValid = FALSE; - prStaRec->fgIsInPS = FALSE; - - DBGLOG(QM, INFO, ("QM: -STA[%ld]\n", u4StaRecIdx)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the network -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - - P_QUE_MGT_T prQM; - P_QUE_T prQue; - QUE_T rNeedToFreeQue; - QUE_T rTempQue; - P_QUE_T prNeedToFreeQue; - P_QUE_T prTempQue; - P_MSDU_INFO_T prMsduInfo; - - - prQM = &prAdapter->rQM; - prQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - - QUEUE_INITIALIZE(&rNeedToFreeQue); - QUEUE_INITIALIZE(&rTempQue); - - prNeedToFreeQue = &rNeedToFreeQue; - prTempQue = &rTempQue; - - QUEUE_MOVE_ALL(prTempQue, prQue); - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - while (prMsduInfo) { - - if(prMsduInfo->ucNetworkType == eNetworkTypeIdx) { - QUEUE_INSERT_TAIL(prNeedToFreeQue, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(prQue, (P_QUE_ENTRY_T)prMsduInfo); - } - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - } - if(QUEUE_IS_NOT_EMPTY(prNeedToFreeQue)) { - wlanProcessQueuedMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(prNeedToFreeQue)); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush all TX queues -* -* \param[in] (none) -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucStaArrayIdx; - UINT_8 ucQueArrayIdx; - - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushTxQueues()\n")); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - /* Concatenate all MSDU_INFOs in per-STA queues */ - for(ucStaArrayIdx = 0; ucStaArrayIdx < CFG_NUM_OF_STA_RECORD; ucStaArrayIdx++){ - - /* Always check each STA_REC when flushing packets no matter it is inactive or active */ - #if 0 - if(!prAdapter->arStaRec[ucStaArrayIdx].fgIsValid){ - continue; /* Continue to check the next STA_REC */ - } - #endif - - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - } - - /* Flush per-Type queues */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; ucQueArrayIdx++){ - - if(QUEUE_IS_EMPTY(&(prQM->arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prQM->arTxQueue[ucQueArrayIdx]); - - } - - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, NULL); - } - - return prMsduInfoListHead; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush TX packets for a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - UINT_8 ucQueArrayIdx; - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaTxQueues(%ld)\n", u4StaRecIdx)); - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Concatenate all MSDU_INFOs in TX queues of this STA_REC */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prStaRec->arTxQueue[ucQueArrayIdx]))){ - continue; - } - - if(!prMsduInfoListHead){ - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = - (P_MSDU_INFO_T)QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prStaRec->arTxQueue[ucQueArrayIdx]); - - } - -#if 0 - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx)); - } - else { - prMsduInfoListHead = nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx); - } -#endif - - return prMsduInfoListHead; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets -* -* \param[in] (none) -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - prSwRfbListHead = prSwRfbListTail = NULL; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushRxQueues()\n")); - - for(i =0; iarRxBaTable[i].rReOrderQue))){ - if(!prSwRfbListHead){ - - /* The first MSDU_INFO is found */ - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prSwRfbListTail, - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue))); - - prSwRfbListTail = (P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - - QUEUE_INITIALIZE(&(prQM->arRxBaTable[i].rReOrderQue)); - - } - else{ - continue; - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets with respect to a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* \param[in] u4Tid TID -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushStaRxQueue( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx, - IN UINT_32 u4Tid - ) -{ - //UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_RX_BA_ENTRY_T prReorderQueParm; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaRxQueues(%ld)\n", u4StaRecIdx)); - - prSwRfbListHead = prSwRfbListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Obtain the RX BA Entry pointer */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[u4Tid]); - - /* Note: For each queued packet, prCurrSwRfb->eDst equals RX_PKT_DESTINATION_HOST */ - if(prReorderQueParm){ - - if(QUEUE_IS_NOT_EMPTY(&(prReorderQueParm->rReOrderQue))){ - - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prReorderQueParm->rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prReorderQueParm->rReOrderQue)); - - - QUEUE_INITIALIZE(&(prReorderQueParm->rReOrderQue)); - - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enqueue TX packets -* -* \param[in] prMsduInfoListHead Pointer to the list of TX packets -* -* \return The freed packets, which are not enqueued -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfoReleaseList; - P_MSDU_INFO_T prCurrentMsduInfo; - P_MSDU_INFO_T prNextMsduInfo; - - P_STA_RECORD_T prStaRec; - P_QUE_T prTxQue; - QUE_T rNotEnqueuedQue; - - - UINT_8 ucPacketType; - UINT_8 ucTC; - P_QUE_MGT_T prQM = &prAdapter->rQM; - UINT_8 aucNextUP[WMM_AC_INDEX_NUM] = { 1 /* BEtoBK*/, 1 /*na*/, 0/*VItoBE*/ , 4 /*VOtoVI*/}; - - DBGLOG(QM, LOUD, ("Enter qmEnqueueTxPackets\n")); - - ASSERT(prMsduInfoListHead); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - { - //UINT_32 i; - //4 <0> Update TC resource control related variables - /* Keep track of the queue length */ - if (--prQM->u4TimeToUpdateQueLen == 0){ - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - qmUpdateAverageTxQueLen(prAdapter); - } - } -#endif - - /* Push TX packets into STA_REC (for UNICAST) or prAdapter->rQM (for BMCAST) */ - prStaRec = NULL; - prMsduInfoReleaseList = NULL; - prCurrentMsduInfo = NULL; - QUEUE_INITIALIZE(&rNotEnqueuedQue); - prNextMsduInfo = prMsduInfoListHead; - - do{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgCheckACMAgain; - ENUM_WMM_ACI_T eAci = WMM_AC_BE_INDEX; - prCurrentMsduInfo = prNextMsduInfo; - prNextMsduInfo = QM_TX_GET_NEXT_MSDU_INFO(prCurrentMsduInfo); - ucTC = TC1_INDEX; - - //4 <1> Lookup the STA_REC index - /* The ucStaRecIndex will be set in this function */ - qmDetermineStaRecIndex(prAdapter, prCurrentMsduInfo); - ucPacketType = HIF_TX_PACKET_TYPE_DATA; - - DBGLOG(QM, LOUD , ("***** ucStaRecIndex = %d *****\n", - prCurrentMsduInfo->ucStaRecIndex)); - - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prCurrentMsduInfo->ucNetworkType]); - - if(IS_NET_ACTIVE(prAdapter, prCurrentMsduInfo->ucNetworkType)) { - - switch (prCurrentMsduInfo->ucStaRecIndex){ - case STA_REC_INDEX_BMCAST: - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucTC = TC5_INDEX; -#if 0 - if(prCurrentMsduInfo->ucNetworkType == NETWORK_TYPE_P2P_INDEX - && prCurrentMsduInfo->eSrc != TX_PACKET_MGMT - ) { - if(LINK_IS_EMPTY(&prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].rStaRecOfClientList)) { - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_AP_BORADCAST_DROP); - } - } -#endif - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_23); - break; - - case STA_REC_INDEX_NOT_FOUND: - ucTC = TC5_INDEX; - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - - /* if the packet is the forward type. the packet should be freed */ - DBGLOG(QM, TRACE, ("Forwarding packet but Sta is STA_REC_INDEX_NOT_FOUND\n")); - //prTxQue = &rNotEnqueuedQue; - } - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_NO_STA_REC]; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_24); - - break; - - default: - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prCurrentMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsValid); - - if(prCurrentMsduInfo->ucUserPriority < 8) { - QM_DBG_CNT_INC(prQM, prCurrentMsduInfo->ucUserPriority + 15); - /* QM_DBG_CNT_15 */ /* QM_DBG_CNT_16 */ /* QM_DBG_CNT_17 */ /* QM_DBG_CNT_18 */ - /* QM_DBG_CNT_19 */ /* QM_DBG_CNT_20 */ /* QM_DBG_CNT_21 */ /* QM_DBG_CNT_22 */ - } - - eAci = WMM_AC_BE_INDEX; - do { - fgCheckACMAgain = FALSE; - if (prStaRec->fgIsQoS){ - switch(prCurrentMsduInfo->ucUserPriority){ - case 1: - case 2: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC0]; - ucTC = TC0_INDEX; - eAci = WMM_AC_BK_INDEX; - break; - case 0: - case 3: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - break; - case 4: - case 5: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC2]; - ucTC = TC2_INDEX; - eAci = WMM_AC_VI_INDEX; - break; - case 6: - case 7: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC3]; - ucTC = TC3_INDEX; - eAci = WMM_AC_VO_INDEX; - break; - default: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - ASSERT(0); - break; - } - if(prBssInfo->arACQueParms[eAci].fgIsACMSet && eAci != WMM_AC_BK_INDEX) { - prCurrentMsduInfo->ucUserPriority = aucNextUP[eAci]; - fgCheckACMAgain = TRUE; - } - } - else{ - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - } - } - while(fgCheckACMAgain); - - //LOG_FUNC ("QoS %u UP %u TC %u",prStaRec->fgIsQoS,prCurrentMsduInfo->ucUserPriority, ucTC); - - break; /*default */ - } /* switch (prCurrentMsduInfo->ucStaRecIndex) */ - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - if(prTxQue->u4NumElem > 32) { - DBGLOG(QM, INFO, ("Drop the Packet for full Tx queue (forwarding) Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_FORWARD_OVERFLOW_DROP); - } - } - - } - else { - - DBGLOG(QM, INFO, ("Drop the Packet for inactive Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_31); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_INACTIVE_BSS_DROP); - } - - //4 <3> Fill the MSDU_INFO for constructing HIF TX header - - /* TODO: Fill MSDU_INFO according to the network type, - * EtherType, and STA status (for PS forwarding control). - */ - - /* Note that the Network Type Index and STA_REC index are determined in - * qmDetermineStaRecIndex(prCurrentMsduInfo). - */ - QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET( - prCurrentMsduInfo, /* MSDU_INFO ptr */ - ucTC, /* TC tag */ - ucPacketType, /* Packet Type */ - 0, /* Format ID */ - prCurrentMsduInfo->fgIs802_1x, /* Flag 802.1x */ - prCurrentMsduInfo->fgIs802_11, /* Flag 802.11 */ - 0, /* PAL LLH */ - 0, /* ACL SN */ - PS_FORWARDING_TYPE_NON_PS, /* PS Forwarding Type */ - 0 /* PS Session ID */ - ); - - //4 <4> Enqueue the packet - QUEUE_INSERT_TAIL(prTxQue, (P_QUE_ENTRY_T)prCurrentMsduInfo); - - -#if QM_TEST_MODE - if (++prQM->u4PktCount == QM_TEST_TRIGGER_TX_COUNT){ - prQM->u4PktCount = 0; - qmTestCases(prAdapter); - } - -#endif - - DBGLOG(QM, LOUD, ("Current queue length = %u\n", prTxQue->u4NumElem)); - }while(prNextMsduInfo); - - if( QUEUE_IS_NOT_EMPTY(&rNotEnqueuedQue) ) { - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rNotEnqueuedQue), NULL); - prMsduInfoReleaseList = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rNotEnqueuedQue); - } - - - return prMsduInfoReleaseList; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Determine the STA_REC index for a packet -* -* \param[in] prMsduInfo Pointer to the packet -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - - P_STA_RECORD_T prTempStaRec; - //P_QUE_MGT_T prQM = &prAdapter->rQM; - - prTempStaRec = NULL; - - ASSERT(prMsduInfo); - - //4 <1> DA = BMCAST - if (IS_BMCAST_MAC_ADDR(prMsduInfo->aucEthDestAddr)){ - /* For intrastructure mode and P2P (playing as a GC), BMCAST frames shall be sent to the AP. - * FW shall take care of this. The host driver is not able to distinguish these cases. */ - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_BMCAST; - DBGLOG(QM, LOUD, ("TX with DA = BMCAST\n")); - return; - } - - - //4 <2> Check if an AP STA is present - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - - if((prTempStaRec->ucNetTypeIndex == prMsduInfo->ucNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - - - - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if (prTempStaRec->fgIsValid){ - if (EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, prMsduInfo->aucEthDestAddr)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - DBGLOG(QM, LOUD, ("QM: TX with STA_REC_INDEX_NOT_FOUND\n")); - - -#if (QM_TEST_MODE && QM_TEST_FAIR_FORWARDING) - prMsduInfo->ucStaRecIndex = (UINT_8)prQM->u4CurrentStaRecIndexToEnqueue; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a STA_REC for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (TC0_INDEX to TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentQuota, - IN UINT_8 ucTotalQuota - ) -{ - -#if QM_FORWARDING_FAIRNESS - UINT_32 i; /* Loop for */ - - PUINT_32 pu4HeadStaRecIndex; /* The Head STA index */ - PUINT_32 pu4HeadStaRecForwardCount; /* The total forwarded packets for the head STA */ - - P_STA_RECORD_T prStaRec; /* The current focused STA */ - P_BSS_INFO_T prBssInfo; /* The Bss for current focused STA */ - P_QUE_T prCurrQueue; /* The current TX queue to dequeue */ - P_MSDU_INFO_T prDequeuedPkt; /* The dequeued packet */ - - UINT_32 u4ForwardCount; /* To remember the total forwarded packets for a STA */ - UINT_32 u4MaxForwardCount; /* The maximum number of packets a STA can forward */ - UINT_32 u4Resource; /* The TX resource amount */ - - BOOLEAN fgChangeHeadSta; /* Whether a new head STA shall be determined at the end of the function */ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - PUINT_8 pucFreeQuota; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - - if(!ucCurrentQuota){ - DBGLOG(TX, LOUD, ("@@@@@ TC = %u ucCurrentQuota = %u @@@@@\n", - ucTC, ucCurrentQuota)); - return; - } - - u4Resource = ucCurrentQuota; - - //4 <1> Determine the head STA - /* The head STA shall be an active STA */ - - pu4HeadStaRecIndex = &(prQM->au4HeadStaRecIndex[ucTC]); - pu4HeadStaRecForwardCount = &(prQM->au4ForwardCount[ucTC]); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Init Head STA = %u Resource = %u\n", - ucTC, *pu4HeadStaRecIndex, u4Resource)); - - - /* From STA[x] to STA[x+1] to STA[x+2] to ... to STA[x] */ - for (i=0; i < CFG_NUM_OF_STA_RECORD + 1; i++){ - prStaRec = &prAdapter->arStaRec[(*pu4HeadStaRecIndex)]; - ASSERT(prStaRec); - - /* Only Data frame (1x was not included) will be queued in */ - if (prStaRec->fgIsValid){ - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - /* Determine how many packets the head STA is allowed to send in a round */ - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_25); - u4MaxForwardCount = ucTotalQuota; -#if CFG_ENABLE_WIFI_DIRECT - - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } /* fgIsInPS */ -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - /* Determine whether the head STA can continue to forward packets in this round */ - if((*pu4HeadStaRecForwardCount) < u4MaxForwardCount){ - break; - } - - } /* prStaRec->fgIsValid */ - else{ - /* The current Head STA has been deactivated, so search for a new head STA */ - prStaRec = NULL; - prBssInfo = NULL; - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - - /* Reset the forwarding count before searching (since this is for a new selected STA) */ - (*pu4HeadStaRecForwardCount) = 0; - } - } /* i < CFG_NUM_OF_STA_RECORD + 1 */ - - /* All STA_RECs are inactive, so exit */ - if (!prStaRec){ - /* Under concurrent, it is possible that there is no candidcated STA.*/ - //DBGLOG(TX, EVENT, ("All STA_RECs are inactive\n")); - return; - } - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Round Head STA = %lu\n", - ucTC, *pu4HeadStaRecIndex)); - - //4 <2> Dequeue packets from the head STA - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - prDequeuedPkt = NULL; - fgChangeHeadSta = FALSE; - - while(prCurrQueue){ - - -#if QM_DEBUG_COUNTER - - if(ucTC <= TC4_INDEX) { - if(QUEUE_IS_EMPTY(prCurrQueue)) { - QM_DBG_CNT_INC(prQM, ucTC); - /* QM_DBG_CNT_00 */ /* QM_DBG_CNT_01 */ /* QM_DBG_CNT_02 */ /* QM_DBG_CNT_03 */ /* QM_DBG_CNT_04 */ - } - if(u4Resource == 0) { - QM_DBG_CNT_INC(prQM, ucTC + 5); - /* QM_DBG_CNT_05 */ /* QM_DBG_CNT_06 */ /* QM_DBG_CNT_07 */ /* QM_DBG_CNT_08 */ /* QM_DBG_CNT_09 */ - } - if(((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)) { - QM_DBG_CNT_INC(prQM, ucTC + 10); - /* QM_DBG_CNT_10 */ /* QM_DBG_CNT_11 */ /* QM_DBG_CNT_12 */ /* QM_DBG_CNT_13 */ /* QM_DBG_CNT_14 */ - } - } -#endif - - - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if (QUEUE_IS_EMPTY(prCurrQueue) || ((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)){ - fgChangeHeadSta = TRUE; - break; - } - else if (u4Resource == 0){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); -#if DBG && 0 - LOG_FUNC("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - /* XXX: check all queues for STA */ - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - (*pu4HeadStaRecForwardCount) ++; - - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - - if (*pu4HeadStaRecForwardCount){ - DBGLOG(QM, LOUD, ("TC = %u Round Head STA = %lu, u4HeadStaRecForwardCount = %lu\n", ucTC, *pu4HeadStaRecIndex, (*pu4HeadStaRecForwardCount))); - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - - - //4 <3> Dequeue from the other STAs if there is residual TX resource - - /* Check all of the STAs to continue forwarding packets (including the head STA) */ - for (i= 0; i< CFG_NUM_OF_STA_RECORD; i++){ - /* Break in case no reasource is available */ - if (u4Resource == 0){ - break; - } - - /* The current head STA will be examined when i = CFG_NUM_OF_STA_RECORD-1 */ - prStaRec = &prAdapter->arStaRec[((*pu4HeadStaRecIndex) + i + 1) % CFG_NUM_OF_STA_RECORD]; - ASSERT(prStaRec); - - if (prStaRec->fgIsValid) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Sharing STA = %u Resource = %lu\n", - ucTC, prStaRec->ucIndex, u4Resource)); - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - u4ForwardCount = 0; - u4MaxForwardCount = ucTotalQuota; - -#if CFG_ENABLE_WIFI_DIRECT - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } /* prStaRec->fgIsValid */ - else{ - prBssInfo = NULL; - /* Invalid STA, so check the next STA */ - continue; - } - - while(prCurrQueue){ - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if ((u4Resource == 0) || QUEUE_IS_EMPTY(prCurrQueue) || (u4ForwardCount >= u4MaxForwardCount)){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - -#if DBG && 0 - DBGLOG(QM, LOUD, ("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 )); - - DBGLOG(QM, LOUD,("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr))); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - u4ForwardCount ++; - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - -#if CFG_ENABLE_WIFI_DIRECT - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (u4ForwardCount){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - } - - - if (fgChangeHeadSta){ - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - (*pu4HeadStaRecForwardCount) = 0; - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Scheduled Head STA = %lu Left Resource = %lu\n", - ucTC, (*pu4HeadStaRecIndex), u4Resource)); - } - - -/***************************************************************************************/ -#else - UINT_8 ucStaRecIndex; - P_STA_RECORD_T prStaRec; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - if (ucCurrentQuota == 0){ - return; - } - - //4 <1> Determine the queue index and the head STA - - /* The head STA */ - ucStaRecIndex = 0; /* TODO: Get the current head STA */ - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - /* The queue to pull out packets */ - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - - ucPktCount = ucCurrentQuota; - prDequeuedPkt = NULL; - - //4 <2> Dequeue packets for the head STA - while(TRUE){ - if (!(prStaRec->fgIsValid) || ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - //DbgPrint("QM: Remove Queue Head, TC= %d\n", prDequeuedPkt->ucTC); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - ucPktCount--; - } - } - - //DbgPrint("QM: Remaining number of queued packets = %d\n", prCurrQueue->u4NumElem); - -#if QM_BURST_END_INFO_ENABLED - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } - -#endif - - //4 <3> Update scheduling info - /* TODO */ - - //4 <4> Utilize the remainaing TX opportunities for non-head STAs - /* TODO */ -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a per-Type-based Queue for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (Shall always be TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ) -{ - //UINT_8 ucQueIndex; - //UINT_8 ucStaRecIndex; - P_BSS_INFO_T prBssInfo; - P_BSS_INFO_T parBssInfo; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - P_MSDU_INFO_T prBurstEndPkt; - QUE_T rMergeQue; - P_QUE_T prMergeQue; - P_QUE_MGT_T prQM; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerTypeQueues (TC = %d, Max = %d)\n", ucTC, ucMaxNum)); - - /* TC5: Broadcast/Multicast data packets */ - ASSERT(ucTC == TC5_INDEX); - - if (ucMaxNum == 0){ - return; - } - - prQM = &prAdapter->rQM; - //4 <1> Determine the queue - - prCurrQueue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucPktCount = ucMaxNum; - prDequeuedPkt = NULL; - prBurstEndPkt = NULL; - - parBssInfo = prAdapter->rWifiVar.arBssInfo; - - QUEUE_INITIALIZE(&rMergeQue); - prMergeQue = &rMergeQue; - - //4 <2> Dequeue packets - while(TRUE){ - if(ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - } - else{ - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - ASSERT(prDequeuedPkt->ucNetworkType < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &parBssInfo[prDequeuedPkt->ucNetworkType]; - - if(IS_BSS_ACTIVE(prBssInfo)) { - if( !prBssInfo->fgIsNetAbsent){ - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - prBurstEndPkt = prDequeuedPkt; - ucPktCount--; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_26); -#if DBG && 0 - LOG_FUNC("DeqType TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - } - else { - QUEUE_INSERT_TAIL(prMergeQue,(P_QUE_ENTRY_T)prDequeuedPkt); - } - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prDequeuedPkt, NULL); - wlanProcessQueuedMsduInfo(prAdapter,prDequeuedPkt); - } - } - } - - if(QUEUE_IS_NOT_EMPTY(prMergeQue)) { - QUEUE_CONCATENATE_QUEUES(prMergeQue, prCurrQueue); - QUEUE_MOVE_ALL(prCurrQueue, prMergeQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(prCurrQueue), NULL); - } - -#if QM_BURST_END_INFO_ENABLED - if (prBurstEndPkt){ - prBurstEndPkt->fgIsBurstEnd = TRUE; - } -#endif -} /* qmDequeueTxPacketsFromPerTypeQueues */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets to send to HIF TX -* -* \param[in] prTcqStatus Info about the maximum amount of dequeued packets -* -* \return The list of dequeued TX packets -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ - - INT_32 i; - P_MSDU_INFO_T prReturnedPacketListHead; - QUE_T rReturnedQue; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPackets\n")); - - QUEUE_INITIALIZE(&rReturnedQue); - - prReturnedPacketListHead = NULL; - - /* TC0 to TC4: AC0~AC3, 802.1x (commands packets are not handled by QM) */ - for(i = TC4_INDEX; i >= TC0_INDEX; i--){ - DBGLOG(QM, LOUD, ("Dequeue packets from Per-STA queue[%u]\n", i)); - - qmDequeueTxPacketsFromPerStaQueues( - prAdapter, - &rReturnedQue, - (UINT_8)i, - prTcqStatus->aucFreeBufferCount[i], - prTcqStatus->aucMaxNumOfBuffer[i] - ); - - /* The aggregate number of dequeued packets */ - DBGLOG(QM, LOUD, ("DQA)[%u](%lu)\n", i, rReturnedQue.u4NumElem)); - } - - - /* TC5 (BMCAST or STA-NOT-FOUND packets) */ - qmDequeueTxPacketsFromPerTypeQueues( - prAdapter, - &rReturnedQue, - TC5_INDEX, - prTcqStatus->aucFreeBufferCount[TC5_INDEX] - ); - - DBGLOG(QM, LOUD, ("Current total number of dequeued packets = %u\n", rReturnedQue.u4NumElem)); - - if (QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - prReturnedPacketListHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rReturnedQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return prReturnedPacketListHead; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Adjust the TC quotas according to traffic demands -* -* \param[out] prTcqAdjust The resulting adjustment -* \param[in] prTcqStatus Info about the current TC quotas and counters -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Must initialize */ - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - - //4 <1> If TC resource is not just adjusted, exit directly - if (!prQM->fgTcResourcePostAnnealing){ - return; - } - - //4 <2> Adjust TcqStatus according to the updated prQM->au4CurrentTcResource - else{ - INT_32 i4TotalExtraQuota = 0; - INT_32 ai4ExtraQuota[TC_NUM]; - BOOLEAN fgResourceRedistributed = TRUE; - - /* Obtain the free-to-distribute resource */ - for (i = 0; i < TC_NUM; i++){ - ai4ExtraQuota[i] = (INT_32)prTcqStatus->aucMaxNumOfBuffer[i] - (INT_32)prQM->au4CurrentTcResource[i]; - - if (ai4ExtraQuota[i] > 0){ /* The resource shall be reallocated to other TCs */ - if (ai4ExtraQuota[i] > prTcqStatus->aucFreeBufferCount[i]){ - ai4ExtraQuota[i] = prTcqStatus->aucFreeBufferCount[i]; - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* Distribute quotas to TCs which need extra resource according to prQM->au4CurrentTcResource */ - for (i = 0; i < TC_NUM; i++){ - if (ai4ExtraQuota[i] < 0){ - if ((-ai4ExtraQuota[i]) > i4TotalExtraQuota){ - ai4ExtraQuota[i] = (-i4TotalExtraQuota); - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* In case some TC is waiting for TX Done, continue to adjust TC quotas upon TX Done */ - prQM->fgTcResourcePostAnnealing = (!fgResourceRedistributed); - -#if QM_PRINT_TC_RESOURCE_CTRL - DBGLOG(QM, LOUD, ("QM: Curr Quota [0]=%u [1]=%u [2]=%u [3]=%u [4]=%u [5]=%u\n", - prTcqStatus->aucFreeBufferCount[0], - prTcqStatus->aucFreeBufferCount[1], - prTcqStatus->aucFreeBufferCount[2], - prTcqStatus->aucFreeBufferCount[3], - prTcqStatus->aucFreeBufferCount[4], - prTcqStatus->aucFreeBufferCount[5] - )); -#endif - } - -#else - UINT_32 i; - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - -#endif -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update the average TX queue length for the TC resource control mechanism -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 u4CurrQueLen, i, k; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //4 <1> Update the queue lengths for TC0 to TC3 (skip TC4) and TC5 */ - for (i = 0; i < NUM_OF_PER_STA_TX_QUEUES - 1; i++){ - u4CurrQueLen = 0; - - for (k = 0; k < CFG_NUM_OF_STA_RECORD; k++){ - prStaRec = &prAdapter->arStaRec[k]; - ASSERT(prStaRec); - - /* If the STA is activated, get the queue length */ - if (prStaRec->fgIsValid && - (!prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].fgIsNetAbsent) - ) - { - - u4CurrQueLen += (prStaRec->arTxQueue[i].u4NumElem); - } - } - - if (prQM->au4AverageQueLen[i] == 0){ - prQM->au4AverageQueLen[i] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[i] -= (prQM->au4AverageQueLen[i] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[i] += (u4CurrQueLen); - } - - } - - /* Update the queue length for TC5 (BMCAST) */ - u4CurrQueLen = prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST].u4NumElem; - - if (prQM->au4AverageQueLen[TC_NUM-1] == 0){ - prQM->au4AverageQueLen[TC_NUM-1] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[TC_NUM-1] -= (prQM->au4AverageQueLen[TC_NUM-1] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[TC_NUM-1] += (u4CurrQueLen); - } - - - //4 <2> Adjust TC resource assignment - /* Check whether it is time to adjust the TC resource assignment */ - if (--prQM->u4TimeToAdjustTcResource == 0){ - /* The last assignment has not been completely applied */ - if (prQM->fgTcResourcePostAnnealing){ - /* Upon the next qmUpdateAverageTxQueLen function call, do this check again */ - prQM->u4TimeToAdjustTcResource = 1; - } - - /* The last assignment has been applied */ - else{ - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - qmReassignTcResource(prAdapter); - } - } - - /* Debug */ -#if QM_PRINT_TC_RESOURCE_CTRL - for (i=0; i= 100){ - DBGLOG(QM, LOUD, ("QM: QueLen [%ld %ld %ld %ld %ld %ld]\n", - QM_GET_TX_QUEUE_LEN(prAdapter, 0), - QM_GET_TX_QUEUE_LEN(prAdapter, 1), - QM_GET_TX_QUEUE_LEN(prAdapter, 2), - QM_GET_TX_QUEUE_LEN(prAdapter, 3), - QM_GET_TX_QUEUE_LEN(prAdapter, 4), - QM_GET_TX_QUEUE_LEN(prAdapter, 5) - )); - break; - } - } -#endif - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Assign TX resource for each TC according to TX queue length and current assignment -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 i4TotalResourceDemand = 0; - UINT_32 u4ResidualResource = 0; - UINT_32 i; - INT_32 ai4PerTcResourceDemand[TC_NUM]; - UINT_32 u4ShareCount = 0; - UINT_32 u4Share = 0 ; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Note: After the new assignment is obtained, set prQM->fgTcResourcePostAnnealing to TRUE to - * start the TC-quota adjusting procedure, which will be invoked upon every TX Done - */ - - //4 <1> Determine the demands - /* Determine the amount of extra resource to fulfill all of the demands */ - for (i=0; iau4MinReservedTcResource[i] - prQM->au4CurrentTcResource[i]); - - /* If there are queued packets, allocate extra resource for the TC (for TCP consideration) */ - if (QM_GET_TX_QUEUE_LEN(prAdapter, i)){ - ai4PerTcResourceDemand[i] += QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY; - } - - i4TotalResourceDemand += ai4PerTcResourceDemand[i]; - } - - //4 <2> Case 1: Demand <= Total Resource - if (i4TotalResourceDemand <= 0){ - //4 <2.1> Satisfy every TC - for (i = 0; i < TC_NUM; i++){ - /* Skip TC4 (not adjustable) */ - if (i == TC4_INDEX) { - continue; - } - - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - } - - //4 <2.2> Share the residual resource evenly - u4ShareCount= (TC_NUM - 1); /* excluding TC4 */ - u4ResidualResource = (UINT_32)(-i4TotalResourceDemand); - u4Share = (u4ResidualResource/u4ShareCount); - - for (i=0; iau4CurrentTcResource[i] += u4Share; - - /* Every TC is fully satisfied */ - ai4PerTcResourceDemand[i] = 0; - - /* The left resource will be allocated to TC3 */ - u4ResidualResource -= u4Share; - } - - //4 <2.3> Allocate the left resource to TC3 (VO) - prQM->au4CurrentTcResource[TC3_INDEX] += (u4ResidualResource); - - } - - //4 <3> Case 2: Demand > Total Resource --> Guarantee a minimum amount of resource for each TC - else{ - u4ResidualResource = QM_INITIAL_RESIDUAL_TC_RESOURCE; - - //4 <3.1> Allocated resouce amount = minimum of (guaranteed, total demand) - for (i=0; iau4CurrentTcResource[i] + ai4PerTcResourceDemand[i] < prQM->au4GuaranteedTcResource[i]){ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource += (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - ai4PerTcResourceDemand[i] = 0; - } - - /* The demand can not be fulfilled with the guaranteed resource amount */ - else{ - ai4PerTcResourceDemand[i] -= (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - prQM->au4CurrentTcResource[i] = prQM->au4GuaranteedTcResource[i]; - u4ShareCount++; - } - } - - //4 <3.2> Allocate the residual resource - do{ - /* If there is no resource left, exit directly */ - if (u4ResidualResource == 0){ - break; - } - - /* This shall not happen */ - if (u4ShareCount == 0){ - prQM->au4CurrentTcResource[TC1_INDEX] += u4ResidualResource; - DBGLOG(QM, ERROR, ("QM: (Error) u4ShareCount = 0\n")); - break; - } - - /* Share the residual resource evenly */ - u4Share = (u4ResidualResource / u4ShareCount); - if(u4Share){ - for (i=0; iau4CurrentTcResource[i] += u4Share; - u4ResidualResource -= u4Share; - ai4PerTcResourceDemand[i] -= u4Share; - } - else{ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource -= ai4PerTcResourceDemand[i]; - ai4PerTcResourceDemand[i] = 0; - } - } - } - } - - /* By priority, allocate the left resource that is not divisible by u4Share */ - if (u4ResidualResource == 0){ - break; - } - - if (ai4PerTcResourceDemand[TC3_INDEX]){ /* VO */ - prQM->au4CurrentTcResource[TC3_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC2_INDEX]){ /* VI */ - prQM->au4CurrentTcResource[TC2_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC5_INDEX]){ /* BMCAST */ - prQM->au4CurrentTcResource[TC5_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC1_INDEX]){ /* BE */ - prQM->au4CurrentTcResource[TC1_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC0_INDEX]){ /* BK */ - prQM->au4CurrentTcResource[TC0_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - /* Allocate the left resource */ - prQM->au4CurrentTcResource[TC3_INDEX] += u4ResidualResource; - - }while(FALSE); - } - - prQM->fgTcResourcePostAnnealing = TRUE; - -#if QM_PRINT_TC_RESOURCE_CTRL - /* Debug print */ - DBGLOG(QM, LOUD, ("QM: TC Rsc %ld %ld %ld %ld %ld %ld\n", - prQM->au4CurrentTcResource[0], - prQM->au4CurrentTcResource[1], - prQM->au4CurrentTcResource[2], - prQM->au4CurrentTcResource[3], - prQM->au4CurrentTcResource[4], - prQM->au4CurrentTcResource[5] - )); -#endif - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for RX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - //DbgPrint("QM: Enter qmInitRxQueues()\n"); - /* TODO */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle RX packets (buffer reordering) -* -* \param[in] prSwRfbListHead The list of RX packets -* -* \return The list of packets which are not buffered for reordering -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - -#if CFG_RX_REORDERING_ENABLED - //UINT_32 i; - P_SW_RFB_T prCurrSwRfb; - P_SW_RFB_T prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - QUE_T rReturnedQue; - PUINT_8 pucEthDestAddr; - BOOLEAN fgIsBMC; - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - - DEBUGFUNC("qmHandleRxPackets"); - - ASSERT(prSwRfbListHead); - - QUEUE_INITIALIZE(&rReturnedQue); - prNextSwRfb = prSwRfbListHead; - - do{ - prCurrSwRfb = prNextSwRfb; - prNextSwRfb = QM_RX_GET_NEXT_SW_RFB(prCurrSwRfb); - - prHifRxHdr = prCurrSwRfb->prHifRxHdr; // TODO: (Tehuang) Use macro to obtain the pointer - - /* TODO: (Tehuang) Check if relaying */ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Decide the Destination */ -#if CFG_RX_PKTS_DUMP - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_DATA)) { - DBGLOG(SW4, INFO, ("QM RX DATA: net %u sta idx %u wlan idx %u ssn %u tid %u ptype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prCurrSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - HIF_RX_HDR_GET_TID(prHifRxHdr), - prCurrSwRfb->ucPacketType, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prCurrSwRfb->pvHeader, prCurrSwRfb->u2PacketLen); - } -#endif - - fgIsBMC = FALSE; - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - //DBGLOG_MEM8(QM, TRACE,prCurrSwRfb->pvHeader, 16); - // - - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr) && (OP_MODE_ACCESS_POINT != prBssInfo->eCurrentOPMode)) { - fgIsBMC = TRUE; - } - - if( prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem - > (CFG_RX_MAX_PKT_NUM - CFG_NUM_OF_QM_RX_PKT_NUM) ) { - - if(IS_BSS_ACTIVE(prBssInfo)) { - if(OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode) { - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - else if(UNEQUAL_MAC_ADDR(prBssInfo->aucOwnMacAddr,pucEthDestAddr)) { - prCurrSwRfb->eDst = RX_PKT_DESTINATION_FORWARD; - /* TODO : need to check the dst mac is valid */ - /* If src mac is invalid, the packet will be freed in fw */ - } - } /* OP_MODE_ACCESS_POINT */ - } - else { - DBGLOG(QM, TRACE, ("Mark NULL the Packet for inactive Bss %u\n",ucNetTypeIdx)); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - else { - /* Dont not occupy other SW RFB */ - DBGLOG(QM, TRACE, ("Mark NULL the Packet for less Free Sw Rfb\n")); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - - /* BAR frame */ - if(HIF_RX_HDR_GET_BAR_FLAG(prHifRxHdr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - qmProcessBarFrame(prAdapter, prCurrSwRfb, &rReturnedQue); - } - /* Reordering is not required for this packet, return it without buffering */ - else if(!HIF_RX_HDR_GET_REORDER_FLAG(prHifRxHdr) || fgIsBMC){ -#if 0 - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr) && (OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - } -#endif - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - } - /* Reordering is required for this packet */ - else{ - /* If this packet should dropped or indicated to the host immediately, - * it should be enqueued into the rReturnedQue with specific flags. If - * this packet should be buffered for reordering, it should be enqueued - * into the reordering queue in the STA_REC rather than into the - * rReturnedQue. - */ - qmProcessPktWithReordering(prAdapter, prCurrSwRfb, &rReturnedQue); - - } - }while(prNextSwRfb); - - - /* The returned list of SW_RFBs must end with a NULL pointer */ - if(QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - QM_TX_SET_NEXT_MSDU_INFO((P_SW_RFB_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return (P_SW_RFB_T)QUEUE_GET_HEAD(&rReturnedQue); - -#else - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - return prSwRfbListHead; - -#endif - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reorder the received packet -* -* \param[in] prSwRfb The RX packet to process -* \param[out] prReturnedQue The queue for indicating packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SeqNo; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - DEBUGFUNC("qmProcessPktWithReordering"); - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SN of the frame */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - //prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN, ("Reordering for an invalid STA_REC \n")); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - - /* Start to reorder packets */ - u4SeqNo = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - /* Debug */ - //DbgPrint("QM:(R)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - - /* Case 1: Fall within */ - if /* 0 - start - sn - end - 4095 */ - (((u4WinStart <= u4SeqNo) && (u4SeqNo <= u4WinEnd)) - /* 0 - end - start - sn - 4095 */ - || ((u4WinEnd < u4WinStart) && (u4WinStart <= u4SeqNo)) - /* 0 - sn - end - start - 4095 */ - || ((u4SeqNo <= u4WinEnd) && (u4WinEnd < u4WinStart))){ - - qmInsertFallWithinReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - /* Let the first received packet pass the reorder check */ - DBGLOG(QM, LOUD, ("QM:(A)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd)); - - prReorderQueParm->u2WinStart = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - - qmPopOutDueToFallWithin(prReorderQueParm, prReturnedQue); - } - /* Case 2: Fall ahead */ - else if - /* 0 - start - end - sn - (start+2048) - 4095 */ - (((u4WinStart < u4WinEnd) - && (u4WinEnd < u4SeqNo) - && (u4SeqNo < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - sn - (start+2048) - start - end - 4095 */ - || ((u4SeqNo < u4WinStart) - && (u4WinStart < u4WinEnd) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - end - sn - (start+2048) - start - 4095 */ - || ((u4WinEnd < u4SeqNo) - && (u4SeqNo < u4WinStart) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT)))){ - - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - qmInsertFallAheadReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - - /* Advance the window after inserting a new tail */ - prReorderQueParm->u2WinEnd = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinStart = - (((prReorderQueParm->u2WinEnd) - (prReorderQueParm->u2WinSize) + MAX_SEQ_NO_COUNT + 1) - % MAX_SEQ_NO_COUNT); - - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - - } - /* Case 3: Fall behind */ - else{ - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - #if QM_RX_INIT_FALL_BEHIND_PASS - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - //?? prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(P)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - #endif -#endif - - /* An erroneous packet */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(D)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - - return; - -} - - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SSN; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SSN */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - DbgPrint("QM: (Warning) BAR for an invalid STA_REC \n"); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - u4SSN = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - if(qmCompareSnIsLessThan(u4WinStart,u4SSN)){ - prReorderQueParm->u2WinStart = (UINT_16)u4SSN; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - DBGLOG(QM, TRACE, ("QM:(BAR)[%d](%ld){%d,%d}\n", prSwRfb->ucTid, u4SSN, prReorderQueParm->u2WinStart, prReorderQueParm->u2WinEnd)); - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - } - else{ - DBGLOG(QM, TRACE, ("QM:(BAR)(%d)(%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SSN, u4WinStart, u4WinEnd)); - } -} - - - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prExaminedQueuedSwRfb; - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - prExaminedQueuedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - - /* There are no packets queued in the Reorder Queue */ - if(prExaminedQueuedSwRfb == NULL){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - } - - /* Determine the insert position */ - else{ - do{ - /* Case 1: Terminate. A duplicate packet */ - if(((prExaminedQueuedSwRfb->u2SSN) == (prSwRfb->u2SSN))){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - return; - } - - /* Case 2: Terminate. The insert point is found */ - else if(qmCompareSnIsLessThan( - (prSwRfb->u2SSN),(prExaminedQueuedSwRfb->u2SSN))){ - break; - } - - /* Case 3: Insert point not found. Check the next SW_RFB in the Reorder Queue */ - else{ - prExaminedQueuedSwRfb = - (P_SW_RFB_T)(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prNext); - } - }while(prExaminedQueuedSwRfb); - - /* Update the Reorder Queue Parameters according to the found insert position */ - if(prExaminedQueuedSwRfb == NULL){ - /* The received packet shall be placed at the tail */ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - prReorderQue->prTail = (P_QUE_ENTRY_T)(prSwRfb); - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = (P_QUE_ENTRY_T)prExaminedQueuedSwRfb; - if(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb) == (prReorderQue->prHead)){ - /* The received packet will become the head */ - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - (((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev)->prNext = (P_QUE_ENTRY_T)prSwRfb; - } - ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev = (P_QUE_ENTRY_T)prSwRfb; - } - - prReorderQue->u4NumElem ++; - - } - -} - - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* There are no packets queued in the Reorder Queue */ - if(QUEUE_IS_EMPTY(prReorderQue)){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - } - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - -} - - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead, fgMissing; - OS_SYSTIME rCurrentTime, *prMissTimeout; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - fgMissing = FALSE; - rCurrentTime = 0; - prMissTimeout = &(g_arMissTimeout[prReorderQueParm->ucStaRecIdx][prReorderQueParm->ucTid]); - if ((*prMissTimeout)){ - fgMissing = TRUE; - GET_CURRENT_SYSTIME(&rCurrentTime); - } - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - /* SN > WinStart, break to update WinEnd */ - else{ - if ((fgMissing == TRUE) && - CHECK_FOR_TIMEOUT(rCurrentTime, (*prMissTimeout), - MSEC_TO_SYSTIME(QM_RX_BA_ENTRY_MISS_TIMEOUT_MS))) { - DBGLOG(QM, TRACE, ("QM:RX BA Timout Next Tid %d SSN %d\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2SSN)); - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - - fgMissing = FALSE; - } - else break; - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - if (QUEUE_IS_EMPTY(prReorderQue)){ - *prMissTimeout = 0; - } - else { - if (fgMissing == FALSE) { - GET_CURRENT_SYSTIME(prMissTimeout); - } - } - - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1 )% MAX_SEQ_NO_COUNT); - -} - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - - /* SN < WinStart, so the head packet shall be indicated (do not advance the window) */ - else if(qmCompareSnIsLessThan( - (UINT_32)(prReorderedSwRfb->u2SSN), - (UINT_32)(prReorderQueParm->u2WinStart))){ - - fgDequeuHead = TRUE; - - } - - /* SN > WinStart, break to update WinEnd */ - else{ - break; - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1)% MAX_SEQ_NO_COUNT); - -} - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ) -{ - /* 0 <---> SnLess <--(gap>2048)--> SnGreater : SnLess > SnGreater */ - if((u4SnLess + HALF_SEQ_NO_COUNT) <= u4SnGreater){ /* Shall be <= */ - return FALSE; - } - - /* 0 <---> SnGreater <--(gap>2048)--> SnLess : SnLess < SnGreater */ - else if((u4SnGreater + HALF_SEQ_NO_COUNT) < u4SnLess){ - return TRUE; - } - - /* 0 <---> SnGreater <--(gap<2048)--> SnLess : SnLess > SnGreater */ - /* 0 <---> SnLess <--(gap<2048)--> SnGreater : SnLess < SnGreater */ - else{ - return (u4SnLess < u4SnGreater); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle Mailbox RX messages -* -* \param[in] prMailboxRxMsg The received Mailbox message from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ) -{ - //DbgPrint("QM: Enter qmHandleMailboxRxMessage()\n"); - /* TODO */ -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle ADD RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_ADDBA_T prEventRxAddBa; - P_STA_RECORD_T prStaRec; - UINT_32 u4Tid; - UINT_32 u4WinSize; - - DBGLOG(QM, INFO, ("QM:Event +RxBa\n")); - - prEventRxAddBa = (P_EVENT_RX_ADDBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxAddBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - DBGLOG(QM, INFO, ("QM: (Warning) RX ADDBA Event for a NULL STA_REC\n")); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - DBGLOG(QM, WARN, ("QM: (Warning) RX ADDBA Event for an invalid STA_REC\n")); - //ASSERT(0); - //return; - } -#endif - - u4Tid = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_TID_MASK) - >> BA_PARAM_SET_TID_MASK_OFFSET); - - u4WinSize = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_BUFFER_SIZE_MASK) - >> BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET); - - if(!qmAddRxBaEntry( - prAdapter, - prStaRec->ucIndex, - (UINT_8)u4Tid, - (prEventRxAddBa->u2BAStartSeqCtrl >> OFFSET_BAR_SSC_SN), - (UINT_16)u4WinSize)){ - - /* FW shall ensure the availabiilty of the free-to-use BA entry */ - DBGLOG(QM, ERROR, ("QM: (Error) qmAddRxBaEntry() failure\n")); - ASSERT(0); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle DEL RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_DELBA_T prEventRxDelBa; - P_STA_RECORD_T prStaRec; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventRxDelBa = (P_EVENT_RX_DELBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxDelBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - //ASSERT(0); - return; - } -#endif - - qmDelRxBaEntry(prAdapter, prStaRec->ucIndex, prEventRxDelBa->ucTid, TRUE); - -} - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - UINT_8 ucStaRecIdx, - UINT_8 ucTid - ) -{ - int i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmLookupRxBaEntry()\n"); - - for(i=0; iarRxBaTable[i].fgIsValid){ - if((prQM->arRxBaTable[i].ucStaRecIdx == ucStaRecIdx) && - (prQM->arRxBaTable[i].ucTid == ucTid)){ - return &prQM->arRxBaTable[i]; - } - } - } - return NULL; -} - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ) -{ - int i; - P_RX_BA_ENTRY_T prRxBaEntry = NULL; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - if(ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - /* Invalid STA_REC index, discard the event packet */ - DBGLOG(QM, WARN, ("QM: (WARNING) RX ADDBA Event for a invalid ucStaRecIdx = %d\n", ucStaRecIdx)); - return FALSE; - } - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - - //if(!(prStaRec->fgIsValid)){ - // DbgPrint("QM: (WARNING) Invalid STA when adding an RX BA \n"); - // return FALSE; - //} - - //4 <1> Delete before adding - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - if(qmLookupRxBaEntry(prAdapter, ucStaRecIdx,ucTid)){ - qmDelRxBaEntry(prAdapter, ucStaRecIdx, ucTid, TRUE); /* prQM->ucRxBaCount-- */ - } - - //4 <2> Add a new BA entry - /* No available entry to store the BA agreement info. Retrun FALSE. */ - if(prQM->ucRxBaCount >= CFG_NUM_OF_RX_BA_AGREEMENTS){ - DBGLOG(QM, ERROR, ("QM: **failure** (limited resource, ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - else{ - /* Find the free-to-use BA entry */ - for(i=0; iarRxBaTable[i].fgIsValid){ - prRxBaEntry = &(prQM->arRxBaTable[i]); - prQM->ucRxBaCount++; - DBGLOG(QM, LOUD, ("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount)); - break; - } - } - - /* If a free-to-use entry is found, configure it and associate it with the STA_REC */ - u2WinSize += CFG_RX_BA_INC_SIZE; - if(prRxBaEntry){ - prRxBaEntry->ucStaRecIdx = ucStaRecIdx; - prRxBaEntry->ucTid = ucTid; - prRxBaEntry->u2WinStart = u2WinStart; - prRxBaEntry->u2WinSize= u2WinSize; - prRxBaEntry->u2WinEnd = ((u2WinStart + u2WinSize - 1) % MAX_SEQ_NO_COUNT); - prRxBaEntry->fgIsValid = TRUE; - prRxBaEntry->fgIsWaitingForPktWithSsn = TRUE; - - g_arMissTimeout[ucStaRecIdx][ucTid] = 0; - - DBGLOG(QM, INFO, ("QM: +RxBA(STA=%d TID=%d WinStart=%d WinEnd=%d WinSize=%d)\n", - ucStaRecIdx, ucTid, - prRxBaEntry->u2WinStart, prRxBaEntry->u2WinEnd, prRxBaEntry->u2WinSize)); - - /* Update the BA entry reference table for per-packet lookup */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = prRxBaEntry; - } - else{ - /* This shall not happen because FW should keep track of the usage of RX BA entries */ - DBGLOG(QM, ERROR, ("QM: **AddBA Error** (ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - } - - return TRUE; -} -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ) -{ - P_RX_BA_ENTRY_T prRxBaEntry; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prFlushedPacketList = NULL; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - DbgPrint("QM: (WARNING) Invalid STA when deleting an RX BA \n"); - return; - } -#endif - - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - prRxBaEntry = prStaRec->aprRxReorderParamRefTbl[ucTid]; - - if(prRxBaEntry){ - - prFlushedPacketList = qmFlushStaRxQueue(prAdapter, ucStaRecIdx, ucTid); - - if(prFlushedPacketList){ - - if(fgFlushToHost) { - wlanProcessQueuedSwRfb(prAdapter, prFlushedPacketList); - } - else { - - P_SW_RFB_T prSwRfb; - P_SW_RFB_T prNextSwRfb; - prSwRfb = prFlushedPacketList; - - do { - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - } - - - } -#if ((QM_TEST_MODE == 0) && (QM_TEST_STA_REC_DEACTIVATION == 0)) - /* Update RX BA entry state. Note that RX queue flush is not done here */ - prRxBaEntry->fgIsValid = FALSE; - prQM->ucRxBaCount--; - - /* Debug */ - #if 0 - DbgPrint("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount); - #endif - - /* Update STA RX BA table */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = NULL; -#endif - - DBGLOG(QM, INFO, ("QM: -RxBA(STA=%d,TID=%d)\n", ucStaRecIdx, ucTid)); - - } - - - /* Debug */ - #if CFG_HIF_RX_STARVATION_WARNING - { - P_RX_CTRL_T prRxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - DBGLOG(QM, TRACE, ("QM: (RX DEBUG) Enqueued: %d / Dequeued: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt)); - } - #endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WMM_INFO_T prIeWmmInfo; - - DEBUGFUNC("mqmProcessAssocReq"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - pucIEStart = pucIE; - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - if (!prAdapter->rWifiVar.fgSupportQoS) { - return; - } - - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_INFO: - { - - UINT_8 ucQosInfo; - UINT_8 ucQosInfoAC; - UINT_8 ucBmpAC; - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsWmmSupported = TRUE; - - prIeWmmInfo = (P_IE_WMM_INFO_T)pucIE; - ucQosInfo = prIeWmmInfo->ucQosInfo; - ucQosInfoAC = ucQosInfo & BITS(0, 3); - - prStaRec->fgIsUapsdSupported = ((ucQosInfoAC)? TRUE: FALSE) & - prAdapter->rWifiVar.fgSupportUAPSD; - - ucBmpAC = 0; - - if( ucQosInfoAC & WMM_QOS_INFO_VO_UAPSD) { - ucBmpAC |= BIT(ACI_VO); - } - if( ucQosInfoAC & WMM_QOS_INFO_VI_UAPSD) { - ucBmpAC |= BIT(ACI_VI); - } - if( ucQosInfoAC & WMM_QOS_INFO_BE_UAPSD) { - ucBmpAC |= BIT(ACI_BE); - } - if( ucQosInfoAC & WMM_QOS_INFO_BK_UAPSD) { - ucBmpAC |= BIT(ACI_BK); - } - - prStaRec->ucBmpTriggerAC = prStaRec->ucBmpDeliveryAC = ucBmpAC; - - prStaRec->ucUapsdSp = (ucQosInfo & WMM_QOS_INFO_MAX_SP_LEN_MASK) >> 5; - - } - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - - break; - - case ELEM_ID_HT_CAP: - /* Some client won't put the WMM IE if client is 802.11n */ - if (IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Req Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessAssocRsp"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - - pucIEStart = pucIE; - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgSupportQoS=%d)\n", - prStaRec->fgIsWmmSupported, prAdapter->rWifiVar.fgSupportQoS)); - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - //if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported)) - if((!prAdapter->rWifiVar.fgSupportQoS)) - { - return; - } - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - break; - - case ELEM_ID_HT_CAP: - /* Some AP won't put the WMM IE if client is 802.11n */ - if ( IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - /* Parse AC parameters and write to HW CRs */ - if((prStaRec->fgIsQoS) && (prStaRec->eStaType == STA_TYPE_LEGACY_AP)){ - mqmParseEdcaParameters(prAdapter, prSwRfb, pucIEStart, u2IELength, TRUE); - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Rsp Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - if(prStaRec->fgIsWmmSupported) { - nicQmUpdateWmmParms(prAdapter, prStaRec->ucNetTypeIndex); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM Parameter IE (in BCN or Assoc_Rsp) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* \param[in] fgForceOverride TRUE: If EDCA parameters are found, always set to HW CRs. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("mqmParseEdcaParameters"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgIsQoS=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsQoS)); - - if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported) || (!prStaRec->fgIsQoS)){ - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Goal: Obtain the EDCA parameters */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - P_AC_QUE_PARMS_T prAcQueParams; - P_IE_WMM_PARAM_T prIeWmmParam; - ENUM_WMM_ACI_T eAci; - PUINT_8 pucWmmParamSetCount; - //int i; - - pucWmmParamSetCount = &(prBssInfo->ucWmmParamSetCount); - - prIeWmmParam = (P_IE_WMM_PARAM_T)pucIE; - - /* Check the Parameter Set Count to determine whether EDCA parameters have been changed */ - if(!fgForceOverride){ - if(*pucWmmParamSetCount == (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT)){ - break; /* Ignore the IE without updating HW CRs */ - } - } - - /* Update Parameter Set Count */ - *pucWmmParamSetCount = (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT); - - /* Update EDCA parameters */ - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prAcQueParams = &prBssInfo->arACQueParms[eAci]; - mqmFillAcQueParam(prIeWmmParam, eAci, prAcQueParams); - - prAcQueParams->fgIsACMSet = - (prAcQueParams->u2Aifsn & WMM_ACIAIFSN_ACM) ? TRUE : FALSE; - prAcQueParams->u2Aifsn &= WMM_ACIAIFSN_AIFSN; - - DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci, prAcQueParams->fgIsACMSet, - prAcQueParams->u2Aifsn, prAcQueParams->u2CWmin, - prAcQueParams->u2CWmax, prAcQueParams->u2TxopLimit)); - } - } - break; - - default: - /* Other WMM QoS IEs. Ignore */ - break; - } - - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - break; - default: - break; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used for parsing EDCA parameters specified in the WMM Parameter IE -* -* \param[in] prAdapter Adapter pointer -* \param[in] prIeWmmParam The pointer to the WMM Parameter IE -* \param[in] u4AcOffset The offset specifying the AC queue for parsing -* \param[in] prHwAcParams The parameter structure used to configure the HW CRs -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ) -{ - prAcQueParams->u2Aifsn = *((PUINT_8)(&(prIeWmmParam->ucAciAifsn_BE)) + (u4AcOffset * 4)); - - prAcQueParams->u2CWmax = - BIT(((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMAX_MASK) - >> WMM_ECW_WMAX_OFFSET)-1; - - prAcQueParams->u2CWmin = - BIT((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMIN_MASK)-1; - - WLAN_GET_FIELD_16(((PUINT_8)(&(prIeWmmParam->aucTxopLimit_BE)) + (u4AcOffset * 4)),&(prAcQueParams->u2TxopLimit)); - - prAcQueParams->ucGuradTime = TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM/11n related IEs in scan results (only for AP peers) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prScanResult The scan result which shall be parsed to obtain needed info -* \param[out] prStaRec The obtained info is stored in the STA_REC -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ) -{ - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessScanResult"); - - ASSERT(prScanResult); - ASSERT(prStaRec); - - /* Reset the flag before parsing */ - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - if (!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - u2IELength = prScanResult->u2IELength; - pucIE = prScanResult->aucIEBuf; - - /* Goal: Determine whether the peer supports WMM/QoS and UAPSDU */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_PARAM_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_INFO_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - default: - /* A WMM QoS IE that doesn't matter. Ignore it. */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - - break; - - default: - /* A WMM IE that doesn't matter. Ignore it. */ - break; - } - } - DBGLOG(QM, LOUD, ("MQM: Scan Result Parsing (WMM=%d, UAPSD=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsUapsdSupported)); - -} - -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - UINT_32 i; - P_STA_RECORD_T prTempStaRec; - - prTempStaRec = NULL; - - ASSERT(prAdapter); - - //4 <1> DA = BMCAST - if(IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - return STA_REC_INDEX_BMCAST; - } - - - //4 <2> Check if an AP STA is present - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if((prTempStaRec->ucNetTypeIndex == eNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - return prTempStaRec->ucIndex; - } - } - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if(prTempStaRec->fgIsValid){ - if(EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, pucEthDestAddr)){ - return prTempStaRec->ucIndex; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - return STA_REC_INDEX_NOT_FOUND; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Info IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_INFO_T prIeWmmInfo; - UINT_32 ucUapsd[] = { - WMM_QOS_INFO_BE_UAPSD, - WMM_QOS_INFO_BK_UAPSD, - WMM_QOS_INFO_VI_UAPSD, - WMM_QOS_INFO_VO_UAPSD - }; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("mqmGenerateWmmInfoIE"); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - if(!prStaRec->fgIsWmmSupported) { - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prIeWmmInfo = (P_IE_WMM_INFO_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmInfo->ucId = ELEM_ID_WMM; - prIeWmmInfo->ucLength = ELEM_MAX_LEN_WMM_INFO; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmInfo->aucOui[0] = aucWfaOui[0]; - prIeWmmInfo->aucOui[1] = aucWfaOui[1]; - prIeWmmInfo->aucOui[2] = aucWfaOui[2]; - prIeWmmInfo->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmInfo->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_INFO; - - prIeWmmInfo->ucVersion = VERSION_WMM; - prIeWmmInfo->ucQosInfo = 0; - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ -// if(prAdapter->rWifiVar.fgSupportUAPSD){ - if(prAdapter->rWifiVar.fgSupportUAPSD && prStaRec->fgIsUapsdSupported){ - - UINT_8 ucQosInfo = 0; - UINT_8 i; - - - /* Static U-APSD setting */ - for(i = ACI_BE; i <= ACI_VO; i++){ - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC & BIT(i)){ - ucQosInfo |= (UINT_8)ucUapsd[i]; - } - } - - - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC) { - switch (prPmProfSetupInfo->ucUapsdSp) { - case WMM_MAX_SP_LENGTH_ALL: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_ALL; - break; - - case WMM_MAX_SP_LENGTH_2: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - - case WMM_MAX_SP_LENGTH_4: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_4; - break; - - case WMM_MAX_SP_LENGTH_6: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_6; - break; - - default: - DBGLOG(QM, INFO, ("MQM: Incorrect SP length \n")); - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - } - } - prIeWmmInfo->ucQosInfo = ucQosInfo; - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmInfo); - -} - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief log2 calculation for CW -* -* @param[in] val value -* -* @return log2(val) -*/ -/*----------------------------------------------------------------------------*/ - -UINT_32 cwlog2(UINT_32 val) { - - UINT_32 n; - n=0; - - while (val >= 512) { n+= 9; val = val >> 9; } - while (val >= 16) { n+= 4; val >>= 4; } - while (val >= 2) { n+= 1; val >>= 1; } - return n; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Param IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_PARAM_T prIeWmmParam; - - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - UINT_8 aucACI[] = { - WMM_ACI_AC_BE, - WMM_ACI_AC_BK, - WMM_ACI_AC_VI, - WMM_ACI_AC_VO - }; - - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - ENUM_WMM_ACI_T eAci; - - DEBUGFUNC("mqmGenerateWmmParamIE"); - DBGLOG(QM, LOUD,("\n")); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(prStaRec) { - if(!prStaRec->fgIsQoS) { - return; - } - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - - if(!prBssInfo->fgIsQBSS) { return; } - -#if 0 // 20120220 frog: update beacon content & change OP mode is a separate event for P2P network. - if( prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT && - prBssInfo->eCurrentOPMode != OP_MODE_BOW) - { - return; - } -#endif - - prIeWmmParam = (P_IE_WMM_PARAM_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmParam->ucId = ELEM_ID_WMM; - prIeWmmParam->ucLength = ELEM_MAX_LEN_WMM_PARAM; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmParam->aucOui[0] = aucWfaOui[0]; - prIeWmmParam->aucOui[1] = aucWfaOui[1]; - prIeWmmParam->aucOui[2] = aucWfaOui[2]; - prIeWmmParam->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmParam->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_PARAM; - - prIeWmmParam->ucVersion = VERSION_WMM; - prIeWmmParam->ucQosInfo = (prBssInfo->ucWmmParamSetCount & WMM_QOS_INFO_PARAM_SET_CNT); - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ - if(prAdapter->rWifiVar.fgSupportUAPSD){ - - prIeWmmParam->ucQosInfo |= WMM_QOS_INFO_UAPSD; - - } - - /* EDCA parameter */ - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - //DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - // eAci,prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet , - // prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmin, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmax, - // prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit)); - - *( ((PUINT_8)(&prIeWmmParam->ucAciAifsn_BE)) + (eAci <<2) ) = (UINT_8) (aucACI[eAci] - | (prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet ? WMM_ACIAIFSN_ACM:0 ) - | (prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn & (WMM_ACIAIFSN_AIFSN))); -#if 1 - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (((prBssInfo->aucCWminLog2ForBcast[eAci] )) & WMM_ECW_WMIN_MASK) - | ((((prBssInfo->aucCWmaxLog2ForBcast[eAci] )) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#else - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmin + 1)) & WMM_ECW_WMIN_MASK) - | ((cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmax + 1)) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#endif - - WLAN_SET_FIELD_16( ((PUINT_8)(prIeWmmParam->aucTxopLimit_BE)) + (eAci<<2) - , prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit); - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmParam); - -} - - - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_WLAN_MAC_HEADER_T prWlanFrame; - UINT_16 u2TxFrameCtrl; - - DEBUGFUNC("qmGetFrameAction"); - -#if (NIC_TX_BUFF_COUNT_TC4 > 2) -#define QM_MGMT_QUUEUD_THRESHOLD 2 -#else -#define QM_MGMT_QUUEUD_THRESHOLD 1 -#endif - - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD <= (NIC_TX_BUFF_COUNT_TC4)); - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD > 0); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkType]); - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIdx); - - /* XXX Check BOW P2P AIS time ot set active */ - if (!IS_BSS_ACTIVE(prBssInfo)) { - if (eFrameType == FRAME_TYPE_MMPDU) { - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - if ((u2TxFrameCtrl == MAC_FRAME_DEAUTH) && (prMsduInfo->pfTxDoneHandler == NULL)) { - return FRAME_ACTION_TX_PKT; - } - - } - - DBGLOG(QM, INFO, ("Drop packets Action (Inactive %u).\n",prBssInfo->ucNetTypeIndex)); - TX_INC_CNT(&prAdapter->rTxCtrl, TX_INACTIVE_BSS_DROP); - return FRAME_ACTION_DROP_PKT; - } - - /* TODO Handle disconnect issue */ - - /* P2P probe Request frame */ - do { - if(eFrameType == FRAME_TYPE_MMPDU) { - ASSERT(prMsduInfo!=NULL); - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - - if (u2TxFrameCtrl == MAC_FRAME_BEACON ) { - if( prBssInfo->fgIsNetAbsent) { - return FRAME_ACTION_DROP_PKT; - } - } - else if (u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - if( prBssInfo->fgIsNetAbsent) { - break; - } - } - else if (u2TxFrameCtrl == MAC_FRAME_DEAUTH) { - if( prBssInfo->fgIsNetAbsent) { - break; - } - DBGLOG(P2P, LOUD, ("Sending DEAUTH Frame\n")); - return FRAME_ACTION_TX_PKT; - } - /* MMPDU with prStaRec && fgIsInUse not check fgIsNetActive */ - else if(u2TxFrameCtrl == MAC_FRAME_ASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_AUTH - || u2TxFrameCtrl == MAC_FRAME_REASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_PROBE_REQ - || u2TxFrameCtrl == MAC_FRAME_ACTION) { - - if(prStaRec){ - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - return FRAME_ACTION_TX_PKT; - } - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - } - - } /* FRAME_TYPE_MMPDU */ - else if ((eFrameType == FRAME_TYPE_802_1X)){ - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - - } /* FRAME_TYPE_802_1X */ - else if ((!IS_BSS_ACTIVE(prBssInfo)) - || (!prStaRec) - || (!prStaRec->fgIsInUse)){ - return FRAME_ACTION_DROP_PKT; - } - }while(0); - - if (prBssInfo->fgIsNetAbsent){ - DBGLOG(QM, LOUD, ("Queue packets (Absent %u).\n",prBssInfo->ucNetTypeIndex)); - return FRAME_ACTION_QUEUE_PKT; - } - - if (prStaRec && prStaRec->fgIsInPS){ - DBGLOG(QM, LOUD, ("Queue packets (PS %u).\n",prStaRec->fgIsInPS)); - return FRAME_ACTION_QUEUE_PKT; - } - else { - switch (eFrameType){ - case FRAME_TYPE_802_1X: - if (!prStaRec->fgIsValid){ - return FRAME_ACTION_QUEUE_PKT; - } - break; - - case FRAME_TYPE_MMPDU: - break; - - default: - ASSERT(0); - } - } - - return FRAME_ACTION_TX_PKT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle BSS change operation Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_BSS_ABSENCE_PRESENCE_T prEventBssStatus; - P_BSS_INFO_T prBssInfo; - BOOLEAN fgIsNetAbsentOld; - - prEventBssStatus = (P_EVENT_BSS_ABSENCE_PRESENCE_T)prEvent; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prEventBssStatus->ucNetTypeIdx]); - fgIsNetAbsentOld = prBssInfo->fgIsNetAbsent; - prBssInfo->fgIsNetAbsent = prEventBssStatus->fgIsAbsent; - prBssInfo->ucBssFreeQuota = prEventBssStatus->ucBssFreeQuota; - - //DBGLOG(QM, TRACE, ("qmHandleEventBssAbsencePresence (ucNetTypeIdx=%d, fgIsAbsent=%d, FreeQuota=%d)\n", - // prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); - - DBGLOG(QM, TRACE, ("NAF=%d,%d,%d\n", - prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); - - if(!prBssInfo->fgIsNetAbsent) { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_27); - } - else { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_28); - } - /* From Absent to Present */ - if ((fgIsNetAbsentOld) && (!prBssInfo->fgIsNetAbsent)){ - kalSetEvent(prAdapter->prGlueInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle STA change PS mode Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_CHANGE_PS_MODE_T prEventStaChangePsMode; - P_STA_RECORD_T prStaRec; - BOOLEAN fgIsInPSOld; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventStaChangePsMode = (P_EVENT_STA_CHANGE_PS_MODE_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaChangePsMode->ucStaRecIdx); - //ASSERT(prStaRec); - if(prStaRec == NULL) { - printk("Warning: driver & firmware don't sync"); - return; - } - - if(prStaRec) { - - fgIsInPSOld = prStaRec->fgIsInPS; - prStaRec->fgIsInPS = prEventStaChangePsMode->fgIsInPs; - - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaChangePsMode->ucUpdateMode, - prEventStaChangePsMode->ucFreeQuota); - - //DBGLOG(QM, TRACE, ("qmHandleEventStaChangePsMode (ucStaRecIdx=%d, fgIsInPs=%d)\n", - // prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - - DBGLOG(QM, TRACE, ("PS=%d,%d\n", - prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - /* From PS to Awake */ - if ((fgIsInPSOld) && (!prStaRec->fgIsInPS)){ - kalSetEvent(prAdapter->prGlueInfo); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota Event from FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_UPDATE_FREE_QUOTA_T prEventStaUpdateFreeQuota; - P_STA_RECORD_T prStaRec; - - - prEventStaUpdateFreeQuota = (P_EVENT_STA_UPDATE_FREE_QUOTA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaUpdateFreeQuota->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec) { - if(prStaRec->fgIsInPS) { - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota); - - kalSetEvent(prAdapter->prGlueInfo); - } -#if 0 - DBGLOG(QM, TRACE, ("qmHandleEventStaUpdateFreeQuota (ucStaRecIdx=%d, ucUpdateMode=%d, ucFreeQuota=%d)\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); -#endif - - DBGLOG(QM, TRACE, ("UFQ=%d,%d,%d\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); - - - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota -* -* \param[in] prStaRec the STA -* \param[in] ucUpdateMode the method to update free quota -* \param[in] ucFreeQuota the value for update -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ) -{ - - UINT_8 ucFreeQuotaForNonDelivery; - UINT_8 ucFreeQuotaForDelivery; - - ASSERT(prStaRec); - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota orig ucFreeQuota=%d Mode %u New %u\n", - prStaRec->ucFreeQuota, ucUpdateMode, ucFreeQuota )); - - if(!prStaRec->fgIsInPS)return; - - switch (ucUpdateMode) { - case FREE_QUOTA_UPDATE_MODE_INIT: - case FREE_QUOTA_UPDATE_MODE_OVERWRITE: - prStaRec->ucFreeQuota = ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_INCREASE: - prStaRec->ucFreeQuota += ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_DECREASE: - prStaRec->ucFreeQuota -= ucFreeQuota; - break; - default: - ASSERT(0); - } - - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota new ucFreeQuota=%d)\n", - prStaRec->ucFreeQuota )); - - ucFreeQuota = prStaRec->ucFreeQuota; - - ucFreeQuotaForNonDelivery = 0; - ucFreeQuotaForDelivery = 0; - - if(ucFreeQuota > 0) { - if( prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - /* XXX We should assign quota to aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES] */ - - if(prStaRec->ucFreeQuotaForNonDelivery > 0 && prStaRec->ucFreeQuotaForDelivery > 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery == 0 && prStaRec->ucFreeQuotaForDelivery == 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery > 0) { - /* NonDelivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForNonDelivery = 2; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery ; - } - else { - ucFreeQuotaForDelivery = ucFreeQuota; - ucFreeQuotaForNonDelivery = 0; - } - } - else if(prStaRec->ucFreeQuotaForDelivery > 0) { - /* Delivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForDelivery = 2; - ucFreeQuotaForNonDelivery = ucFreeQuota - ucFreeQuotaForDelivery; - } - else { - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } - - } - else { - /* !prStaRec->fgIsUapsdSupported */ - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } /* ucFreeQuota > 0 */ - - prStaRec->ucFreeQuotaForDelivery = ucFreeQuotaForDelivery; - prStaRec->ucFreeQuotaForNonDelivery = ucFreeQuotaForNonDelivery; - - DBGLOG(QM, LOUD, ("new QuotaForDelivery = %d QuotaForNonDelivery = %d\n", - prStaRec->ucFreeQuotaForDelivery, prStaRec->ucFreeQuotaForNonDelivery )); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the reorder queued RX packets -* -* \param[in] (none) -* -* \return The number of queued RX packets -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Total; - P_QUE_MGT_T prQM = &prAdapter->rQM; - u4Total = 0; - /* XXX The summation may impact the performance */ - for(i =0; iarRxBaTable[i].rReOrderQue.u4NumElem; -#if DBG && 0 - if(QUEUE_IS_EMPTY(&(prQM->arRxBaTable[i].rReOrderQue))){ - ASSERT(prQM->arRxBaTable[i].rReOrderQue == 0); - } -#endif - } - ASSERT(u4Total <=( CFG_NUM_OF_QM_RX_PKT_NUM*2)); - return u4Total; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_bow.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_bow.c deleted file mode 100755 index bdd30aa9ee72..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_bow.c +++ /dev/null @@ -1,1369 +0,0 @@ -/* -** $Id: @(#) gl_bow.c@@ -*/ - -/*! \file gl_bow.c - \brief Main routines of Linux driver interface for 802.11 PAL (BT 3.0 + HS) - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_bow.c $ - * - * 02 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00235223] [Rose][ICS][Cross Feature][AEE-IPANIC]The device reboot automatically and then the "KE" pops up after you turn on the "Airplane mode".(once) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered or when wlan GLUE_FLAG_HALT is set. - * - * This is a workaround for BOW driver robustness, happens only in ICS. - * - * Root cause should be fixed by CR [ALPS00231570] - * - * 02 03 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00118114] [Rose][ICS][Free Test][Bluetooth]The "KE" pops up after you turn on the airplane mode.(5/5) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered. - * - * Happens only in ICS. - * - * Notified PAL owener to reivew MTKBT/PAL closing BOW char dev procedure. - * - * [Side Effect] - * None. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 25 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Modify ampc0 char device for major number 151 for all MT6575 projects. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * unlocked_ioctl returns as long instead of int. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * migrate to unlocked ioctl interface - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * replace alloc_netdev to alloc_netdev_mq for BoW - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update net register and BOW for concurrent features. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * correct typo: POLLOUT instead of POLL_OUT - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * multiple BoW interfaces need to compare with peer address - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * fix kalIndicateBOWEvent. - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include "bss.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* @FIXME if there is command/event with payload length > 28 */ -#define MAX_BUFFER_SIZE (64) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_BOW_TEST - UINT_32 g_u4PrevSysTime = 0; - UINT_32 g_u4CurrentSysTime = 0; - UINT_32 g_arBowRevPalPacketTime[11]; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -// forward declarations -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg); - -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait); - -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp); - -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp); - - -// character file operations -static const struct file_operations mt6620_ampc_fops = { - //.owner = THIS_MODULE, - .read = mt6620_ampc_read, - .write = mt6620_ampc_write, - .unlocked_ioctl = mt6620_ampc_ioctl, - .poll = mt6620_ampc_poll, - .open = mt6620_ampc_open, - .release = mt6620_ampc_release, -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for character device to communicate with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == TRUE) { - return FALSE; - } - else { -#if 0 - // 1. allocate major number dynamically - - if(alloc_chrdev_region(&(prGlueInfo->rBowInfo.u4DeviceNumber), - 0, // first minor number - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - -#if 1 - -#if defined (CONFIG_AMPC_CDEV_NUM) - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(CONFIG_AMPC_CDEV_NUM, 0); -#else - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(226, 0); -#endif - - if(register_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - - // 2. spin-lock initialization - // spin_lock_init(&(prGlueInfo->rBowInfo.rSpinLock)); - - // 3. initialize kfifo -/* prGlueInfo->rBowInfo.prKfifo = kfifo_alloc(GLUE_BOW_KFIFO_DEPTH, - GFP_KERNEL, - &(prGlueInfo->rBowInfo.rSpinLock));*/ - if ((kfifo_alloc((struct kfifo *) &(prGlueInfo->rBowInfo.rKfifo), GLUE_BOW_KFIFO_DEPTH, GFP_KERNEL))) - goto fail_kfifo_alloc; - -// if(prGlueInfo->rBowInfo.prKfifo == NULL) - if(&(prGlueInfo->rBowInfo.rKfifo) == NULL) - goto fail_kfifo_alloc; - - // 4. initialize cdev - cdev_init(&(prGlueInfo->rBowInfo.cdev), &mt6620_ampc_fops); - // prGlueInfo->rBowInfo.cdev.owner = THIS_MODULE; - prGlueInfo->rBowInfo.cdev.ops = &mt6620_ampc_fops; - - // 5. add character device - if(cdev_add(&(prGlueInfo->rBowInfo.cdev), - prGlueInfo->rBowInfo.u4DeviceNumber, - 1)) - goto fail_cdev_add; - - - // 6. in queue initialization - init_waitqueue_head(&(prGlueInfo->rBowInfo.outq)); - - // 7. finish - prGlueInfo->rBowInfo.fgIsRegistered = TRUE; - return TRUE; - -fail_cdev_add: - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); -fail_kfifo_alloc: - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - return FALSE; - } -} /* end of glRegisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister character device for communicating with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == FALSE) { - return FALSE; - } - else { - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - - // 1. free netdev if necessary -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prGlueInfo); -#endif - - // 2. removal of character device - cdev_del(&(prGlueInfo->rBowInfo.cdev)); - - // 3. free kfifo -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// prGlueInfo->rBowInfo.prKfifo = NULL; -// prGlueInfo->rBowInfo.rKfifo = NULL; - - // 4. free device number - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - - return TRUE; - } -} /* end of glUnregisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief read handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - ssize_t retval; - - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // size check -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) >= size) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) >= size) - retval = size; - else - retval = kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); -// retval = kfifo_len(prGlueInfo->rBowInfo.prKfifo); - -// kfifo_get(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); -// kfifo_out(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); - if (!(kfifo_out(&(prGlueInfo->rBowInfo.rKfifo), aucBuffer, retval))) - retval = -EIO; - - if(copy_to_user(buf, aucBuffer, retval)) - retval = -EIO; - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief write handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ -#if CFG_BOW_TEST - UINT_8 i; -#endif - - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - P_AMPC_COMMAND prCmd; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - if(size > MAX_BUFFER_SIZE) - return -EINVAL; - else if(copy_from_user(aucBuffer, buf, size)) - return -EIO; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP driver CMD buffer size : %d.\n", size)); - - for(i = 0; i < MAX_BUFFER_SIZE; i++) - { - DBGLOG(BOW, EVENT, ("AMP write content : 0x%x.\n", aucBuffer[i])); - } - - DBGLOG(BOW, EVENT, ("BoW CMD write.\n")); -#endif - - prCmd = (P_AMPC_COMMAND) aucBuffer; - - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP write content payload length : %d.\n", prCmd->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("AMP write content header length : %d.\n", sizeof(AMPC_COMMAND_HEADER_T))); - #endif - - // size check - if(prCmd->rHeader.u2PayloadLength + sizeof(AMPC_COMMAND_HEADER_T) != size) - { - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Wrong CMD total length.\n")); - #endif - - return -EINVAL; - } - - if(wlanbowHandleCommand(prGlueInfo->prAdapter, prCmd) == WLAN_STATUS_SUCCESS) - return size; - else - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg) -{ - int err = 0; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // permission check - if(_IOC_DIR(cmd) & _IOC_READ) - err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd)); - else if (_IOC_DIR(cmd) & _IOC_WRITE) - err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd)); - if (err) - return -EFAULT; - - // no ioctl is implemented yet - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait) -{ - unsigned int retval; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - poll_wait(filp, &prGlueInfo->rBowInfo.outq, wait); - - retval = (POLLOUT | POLLWRNORM); // always accepts incoming command packets - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLOUT | POLLWRNORM, %x\n", retval)); - -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) > 0) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) > 0) - { - retval |= (POLLIN | POLLRDNORM); - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLIN | POLLRDNORM, %x\n", retval)); - - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief open handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - P_GL_BOW_INFO prBowInfo; - - prBowInfo = container_of(inodep->i_cdev, GL_BOW_INFO, cdev); - ASSERT(prBowInfo); - - prGlueInfo = container_of(prBowInfo, GLUE_INFO_T, rBowInfo); - ASSERT(prGlueInfo); - - // set-up private data - filp->private_data = prGlueInfo; - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief close handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to indicate event for Bluetooth over Wi-Fi -* -* \param[in] -* prGlueInfo -* prEvent -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ) -{ - size_t u4AvailSize, u4EventSize; - - ASSERT(prGlueInfo); - ASSERT(prEvent); - - // check device - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return; - } - -/* u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(prGlueInfo->rBowInfo.prKfifo);*/ - - u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); - - - u4EventSize = - prEvent->rHeader.u2PayloadLength + sizeof(AMPC_EVENT_HEADER_T); - - // check kfifo availability - if(u4AvailSize < u4EventSize) { - DBGLOG(BOW, EVENT, ("[bow] no space for event: %d/%d\n", - u4EventSize, - u4AvailSize)); - return; - } - - // queue into kfifo -// kfifo_put(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); -// kfifo_in(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); - kfifo_in(&(prGlueInfo->rBowInfo.rKfifo), (PUINT_8)prEvent, u4EventSize); - wake_up_interruptible(&(prGlueInfo->rBowInfo.outq)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState.\n")); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalGetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); - -#endif - - return prGlueInfo->rBowInfo.aeState[i]; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState.\n")); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.arPeerAddr, %x:%x:%x:%x:%x:%x.\n", - prGlueInfo->rBowInfo.arPeerAddr[0], - prGlueInfo->rBowInfo.arPeerAddr[1], - prGlueInfo->rBowInfo.arPeerAddr[2], - prGlueInfo->rBowInfo.arPeerAddr[3], - prGlueInfo->rBowInfo.arPeerAddr[4], - prGlueInfo->rBowInfo.arPeerAddr[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - prGlueInfo->rBowInfo.aeState[i] = eBowState; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); -#endif - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi global state -* -* \param[in] -* prGlueInfo -* -* \return -* BOW_DEVICE_STATE_DISCONNECTED -* in case there is no BoW connection or -* BoW connection under initialization -* -* BOW_DEVICE_STATE_STARTING -* in case there is no BoW connection but -* some BoW connection under initialization -* -* BOW_DEVICE_STATE_CONNECTED -* in case there is any BoW connection available -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - -//Henry, can reduce this logic to indentify state change - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_CONNECTED) { - return BOW_DEVICE_STATE_CONNECTED; - } - } - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_STARTING) { - return BOW_DEVICE_STATE_STARTING; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rBowInfo.u4FreqInKHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: Responder -* 1: Initiator -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - return prGlueInfo->rBowInfo.aucRole[i]; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* ucRole -* 0: Responder -* 1: Initiator -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 1); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - prGlueInfo->rBowInfo.aucRole[i] = ucRole; //Henry, 0 : Responder, 1 : Initiator - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get available Bluetooth-over-Wi-Fi physical link number -* -* \param[in] -* prGlueInfo -* \return -* UINT_32 -* how many physical links are aviailable -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i; - UINT_8 ucLinkCount = 0; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_DISCONNECTED) { - ucLinkCount++; - } - } - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowAvailablePhysicalLinkCount, ucLinkCount, %c.\n", ucLinkCount)); -#endif - - return ucLinkCount; -} - -#if CFG_BOW_SEPARATE_DATA_PATH - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowOpen( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); - - /* 2. turn of carrier */ - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -}; - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is TX entry point of NET DEVICE. - * - * \param[in] prSkb Pointer of the sk_buff to be sent - * \param[in] prDev Pointer to struct net_device - * - * \retval NETDEV_TX_OK - on success. - * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - */ -/*----------------------------------------------------------------------------*/ -static int -bowHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - PUINT_8 aucLookAheadBuf = NULL; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - aucLookAheadBuf = prSkb->data; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if (!(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) || (prSkb->len > 1514)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Invalid BOW packet, skip tx\n")); -#endif - - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(BOW, TRACE, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Tx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n"); -#endif - -#if CFG_BOW_TEST -// g_u4CurrentSysTime = (OS_SYSTIME)kalGetTimeTick(); - - g_u4CurrentSysTime = (OS_SYSTIME) jiffies_to_usecs(jiffies); - - i = g_u4CurrentSysTime - g_u4PrevSysTime; - - if ( (i >> 10) > 0) - { - i = 10; - } - else - { - i = i >> 7; - } - - g_arBowRevPalPacketTime[i]++; - - g_u4PrevSysTime = g_u4CurrentSysTime; - -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} - - -// callbacks for netdevice -static const struct net_device_ops bow_netdev_ops = { - .ndo_open = bowOpen, - .ndo_stop = bowStop, - .ndo_start_xmit = bowHardStartXmit, -}; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief initialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* prDevName -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ) -{ - P_ADAPTER_T prAdapter; - P_GL_HIF_INFO_T prHif; - PARAM_MAC_ADDRESS rMacAddr; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == FALSE) { - prGlueInfo->rBowInfo.prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - - if (!prGlueInfo->rBowInfo.prDevHandler) { - return FALSE; - } - else { - /* 1. setup netdev */ - /* 1.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->rBowInfo.prDevHandler)) = prGlueInfo; - - /* 1.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] |= 0x2; // change to local administrated address - memcpy(prGlueInfo->rBowInfo.prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->rBowInfo.prDevHandler->perm_addr, prGlueInfo->rBowInfo.prDevHandler->dev_addr, ETH_ALEN); - - /* 1.3 register callback functions */ - prGlueInfo->rBowInfo.prDevHandler->netdev_ops = &bow_netdev_ops; - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->rBowInfo.prDevHandler, &(prHif->func->dev)); -#endif - - register_netdev(prGlueInfo->rBowInfo.prDevHandler); - - /* 2. net device initialize */ - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* 3. finish */ - prGlueInfo->rBowInfo.fgIsNetRegistered = TRUE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief uninitialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - //ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == TRUE) { - - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - - if(netif_carrier_ok(prGlueInfo->rBowInfo.prDevHandler)) { - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->rBowInfo.prDevHandler); - free_netdev(prGlueInfo->rBowInfo.prDevHandler); - prGlueInfo->rBowInfo.prDevHandler = NULL; - - return TRUE; - - } - else { - return FALSE; - } -} - -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_cfg80211.c deleted file mode 100755 index 85e52c2adfb6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_cfg80211.c +++ /dev/null @@ -1,1580 +0,0 @@ -/* -** $Id: @(#) gl_cfg80211.c@@ -*/ - -/*! \file gl_cfg80211.c - \brief Main routines for supporintg MT6620 cfg80211 control interface - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_cfg80211.c $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 11 23 2012 yuche.tsai -** [ALPS00398671] [Acer-Tablet] Remove Wi-Fi Direct completely -** Fix bug of WiFi may reboot under user load, when WiFi Direct is removed.. -** -** 08 29 2012 chinglan.wang -** [ALPS00349655] [Need Patch] [Volunteer Patch] [ALPS.JB] Daily build warning on [mt6575_phone_mhl-eng] -** . - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_SUPPORT_WAPI - extern UINT_8 keyStructBuf[1024]; /* add/remove key shared buffer */ -#else - extern UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for change STA type between - * 1. Infrastructure Client (Non-AP STA) - * 2. Ad-Hoc IBSS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(type == NL80211_IFTYPE_STATION) { - eOpMode = NET_TYPE_INFRA; - } - else if(type == NL80211_IFTYPE_ADHOC) { - eOpMode = NET_TYPE_IBSS; - } - else { - return -EINVAL; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set infrastructure mode error:%lx\n", rStatus)); - } - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for adding key - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - PARAM_KEY_T rKey; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - INT_32 i4Rslt = -EINVAL; - UINT_32 u4BufLen = 0; - UINT_8 tmp1[8]; - UINT_8 tmp2[8]; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rKey, sizeof(PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - - if(mac_addr) { - COPY_MAC_ADDR(rKey.arBSSID, mac_addr); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - //rKey.u4KeyIndex |= BIT(31); //Enable BIT 31 will make tx use bc key id, should use pairwise key id 0 - } - - if(params->key) { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - if (params->key_len == 32) { - kalMemCopy(tmp1, ¶ms->key[16], 8); - kalMemCopy(tmp2, ¶ms->key[24], 8); - kalMemCopy(&rKey.aucKeyMaterial[16], tmp2, 8); - kalMemCopy(&rKey.aucKeyMaterial[24], tmp1, 8); - } - } - - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for removing key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_32 u4BufLen = 0; - INT_32 i4Rslt = -EINVAL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - COPY_MAC_ADDR(rRemoveKey.arBSSID, mac_addr); - rRemoveKey.u4KeyIndex = key_index; - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - &rRemoveKey, - rRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("remove key error:%lx\n", rStatus)); - } - else { - i4Rslt = 0; - } - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for setting default key on an interface - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - - -/* for wpa_supplicant 2.0 need to set default key, return 0. - // not implemented - return -EINVAL; -*/ - return 0; - -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting station information such as RSSI - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4BufLen, u4Rate; - INT_32 i4Rssi; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(arBssid, MAC_ADDR_LEN); - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &u4BufLen); - - /* 1. check BSSID */ - if(UNEQUAL_MAC_ADDR(arBssid, mac)) { - /* wrong MAC address */ - DBGLOG(REQ, WARN, ("incorrect BSSID: ["MACSTR"] currently connected BSSID["MACSTR"]\n", - MAC2STR(mac), MAC2STR(arBssid))); - return -ENOENT; - } - - /* 2. fill TX rate */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - sinfo->filled |= STATION_INFO_TX_BITRATE; - sinfo->txrate.legacy = u4Rate / 1000; /* convert from 100bps to 100kbps */ - } - - if(prGlueInfo->eParamMediaStateIndicated != PARAM_MEDIA_STATE_CONNECTED) { - /* not connected */ - DBGLOG(REQ, WARN, ("not yet connected\n")); - } - else { - /* 3. fill RSSI */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - sinfo->filled |= STATION_INFO_SIGNAL; - //in the cfg80211 layer, the signal is a signed char variable. - if(i4Rssi < -128) - sinfo->signal = -128; - else - sinfo->signal = i4Rssi; /* dBm */ - } - } - - sinfo->rx_packets = prGlueInfo->rNetDevStats.rx_packets; - sinfo->filled |= STATION_INFO_TX_PACKETS; - sinfo->tx_packets = prGlueInfo->rNetDevStats.tx_packets; - sinfo->filled |= STATION_INFO_TX_FAILED; - -#if 1 - { - WLAN_STATUS rStatus; - UINT_32 u4XmitError = 0; -// UINT_32 u4XmitOk = 0; -// UINT_32 u4RecvError = 0; -// UINT_32 u4RecvOk = 0; -// UINT_32 u4BufLen; - - /* @FIX ME: need a more clear way to do this */ - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitError, - &u4XmitError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - - prGlueInfo->rNetDevStats.tx_errors = u4XmitError; - - } -#else - prGlueInfo->rNetDevStats.tx_errors = 0; -#endif - - sinfo->tx_failed = prGlueInfo->rNetDevStats.tx_errors; - - return 0; -} - -static PARAM_SCAN_REQUEST_EXT_T rScanRequest; -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to do a scan - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; -// PARAM_SCAN_REQUEST_EXT_T rScanRequest; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rScanRequest, sizeof(PARAM_SCAN_REQUEST_EXT_T)); - - /* check if there is any pending scan not yet finished */ - if(prGlueInfo->prScanRequest != NULL) { - return -EBUSY; - } - - if(request->n_ssids == 0) { - rScanRequest.rSsid.u4SsidLen = 0; - } - else if(request->n_ssids == 1) { - COPY_SSID(rScanRequest.rSsid.aucSsid, rScanRequest.rSsid.u4SsidLen, request->ssids[0].ssid, request->ssids[0].ssid_len); - } - else { - return -EINVAL; - } - - if(request->ie_len > 0) { - rScanRequest.u4IELength = request->ie_len; - rScanRequest.pucIE = (PUINT_8)(request->ie); - } - else { - rScanRequest.u4IELength = 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScanExt, - &rScanRequest, - sizeof(PARAM_SCAN_REQUEST_EXT_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("scan error:%lx\n", rStatus)); - return -EINVAL; - } - - prGlueInfo->prScanRequest = request; - - return 0; -} - -static UINT_8 wepBuf[48]; - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to connect to - * the ESS with the specified parameters - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - UINT_32 cipher; - PARAM_SSID_T rNewSsid; - BOOLEAN fgCarryWPSIE = FALSE; - ENUM_PARAM_OP_MODE_T eOpMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if (prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode > NET_TYPE_AUTO_SWITCH) - eOpMode = NET_TYPE_AUTO_SWITCH; - else - eOpMode = prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetInfrastructureMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_1) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA; - else if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_2) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA2; - else - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - - switch (sme->auth_type) { - case NL80211_AUTHTYPE_OPEN_SYSTEM: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - break; - case NL80211_AUTHTYPE_SHARED_KEY: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY; - break; - default: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM | IW_AUTH_ALG_SHARED_KEY; - break; - } - - if (sme->crypto.n_ciphers_pairwise) { - prGlueInfo->prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4PairwiseKeyCipherSuite[0] = sme->crypto.ciphers_pairwise[0]; - switch (sme->crypto.ciphers_pairwise[0]) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher pairwise (%d)\n", - sme->crypto.ciphers_pairwise[0])); - return -EINVAL; - } - } - - if (sme->crypto.cipher_group) { - prGlueInfo->prAdapter->rWifiVar.rConnSettings.rRsnInfo.u4GroupKeyCipherSuite = sme->crypto.cipher_group; - switch (sme->crypto.cipher_group) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - - if (sme->crypto.n_akm_suites) { - prGlueInfo->prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4AuthKeyMgtSuite[0] = sme->crypto.akm_suites[0]; - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } else if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA2; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - } - - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - } - - prGlueInfo->rWpaInfo.fgPrivacyInvoke = sme->privacy; - - //prGlueInfo->prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - prGlueInfo->fgWpsActive = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; - - if (sme->ie && sme->ie_len > 0) { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PUINT_8 prDesiredIE = NULL; - -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - sme->ie, - sme->ie_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("[wapi] set wapi assoc info error:%lx\n", rStatus)); - } -#endif -#if CFG_SUPPORT_WPS2 - if (wextSrchDesiredWPSIE(sme->ie, - sme->ie_len, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - prGlueInfo->fgWpsActive = TRUE; - fgCarryWPSIE = TRUE; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("WSC] set WSC assoc info error:%lx\n", rStatus)); - } - } -#endif - } - - /* clear WSC Assoc IE buffer in case WPS IE is not detected */ - if(fgCarryWPSIE == FALSE) { - kalMemZero(&prGlueInfo->aucWSCAssocInfoIE, 200); - prGlueInfo->u2WSCAssocInfoIELen = 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set auth mode error:%lx\n", rStatus)); - } - - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | prGlueInfo->rWpaInfo.u4CipherPairwise; - - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) { - if (cipher & IW_AUTH_CIPHER_CCMP) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set encryption mode error:%lx\n", rStatus)); - } - - if (sme->key_len != 0 && prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - kalMemSet(prWepKey, 0, sizeof(prWepKey)); - prWepKey->u4Length = 12 + sme->key_len; - prWepKey->u4KeyLength = (UINT_32) sme->key_len; - prWepKey->u4KeyIndex = (UINT_32) sme->key_idx; - prWepKey->u4KeyIndex |= BIT(31); - if (prWepKey->u4KeyLength > 32) { - DBGLOG(REQ, WARN, ("Too long key length (%u)\n", prWepKey->u4KeyLength)); - return -EINVAL; - } - kalMemCopy(prWepKey->aucKeyMaterial, sme->key, prWepKey->u4KeyLength); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - } - - if(sme->ssid_len > 0) { - /* connect by SSID */ - COPY_SSID(rNewSsid.aucSsid, rNewSsid.u4SsidLen, sme->ssid, sme->ssid_len); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EINVAL; - } - } - else { - /* connect by BSSID */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssid, - (PVOID) sme->bssid, - sizeof(MAC_ADDR_LEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set BSSID:%lx\n", rStatus)); - return -EINVAL; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to disconnect from - * currently connected ESS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to join an IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ) -{ - PARAM_SSID_T rNewSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - UINT_32 u4BufLen = 0; - WLAN_STATUS rStatus; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - /* set channel */ - if(params->channel) { - u4ChnlFreq = nicChannelNum2Freq(params->channel->hw_value); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - } - - /* set SSID */ - kalMemCopy(rNewSsid.aucSsid, params->ssid, params->ssid_len); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; - - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to leave from IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to configure - * WLAN power managemenet - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PARAM_POWER_MODE ePowerMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(enabled) { - if(timeout == -1) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - ePowerMode = Param_PowerModeMAX_PSP; - } - } - else { - ePowerMode = Param_PowerModeCAM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set_power_mgmt error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cache - * a PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, pmksa->bssid, 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, pmksa->pmkid, IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to remove - * a cached PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to flush - * all cached PMKID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to stay on a - * specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel staying - * on a specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to send a management frame - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel the wait time - * from transmitting a management frame on another channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - - /* not implemented */ - - return -EINVAL; -} - - -#if CONFIG_NL80211_TESTMODE - -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SET_KEY_EXTS prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)NULL; - struct iw_encode_exts *prIWEncExt = (struct iw_encode_exts *)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4BufLen = 0; - - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - - - if(data && len) { - prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)data; - } - - if(prParams) { - prIWEncExt = (struct iw_encode_exts *) &prParams->ext; - } - - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - /* KeyID */ - prWpiKey->ucKeyID = prParams->key_index; - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - -//#if CFG_SUPPORT_WAPI - //handle_sec_msg_final(prIWEncExt->key, 32, prIWEncExt->key, NULL); -//#endif - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rstatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rstatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - fgIsValid = -EFAULT; - } - - } - return fgIsValid; -} -#endif - - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SW_CMD_PARAMS prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4SetInfoLen = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - - - - if(data && len) - prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)data; - - if(prParams) { - if(prParams->set == 1){ - rstatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)wlanoidSetSwCtrlWrite, - &prParams->adr, - (UINT_32)8, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - } - - if (WLAN_STATUS_SUCCESS != rstatus) { - fgIsValid = -EFAULT; - } - - return fgIsValid; -} - -int mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_MODE_PARAMS prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)NULL; - BOOLEAN fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - - - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)data; - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* SW cmd */ - if(mtk_cfg80211_testmode_sw_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - case 2: /* WAPI */ -#if CFG_SUPPORT_WAPI - if(mtk_cfg80211_testmode_set_key_ext(wiphy, data, len)) - fgIsValid = TRUE; -#endif - break; - default: - fgIsValid = TRUE; - break; - } - } - - return fgIsValid; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_init.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_init.c deleted file mode 100755 index 7e5b7f3daabd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_init.c +++ /dev/null @@ -1,3319 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_init.c#7 $ -*/ - -/*! \file gl_init.c - \brief Main routines of Linux driver - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_init.c $ -** -** 11 15 2012 cp.wu -** [ALPS00382763] N820_JB:[WIFI]N820JB WLAN ±K???,«ÝÉó?¬y¥\¯Ó¤j -** do not try reconnecting when being disconnected by the peer - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 25 2012 yuche.tsai - * NULL - * Fix reset KE issue. - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 02 2012 terry.wu - * NULL - * EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem);. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 12 22 2011 george.huang - * [WCXRP00000905] [MT6628 Wi-Fi][FW] Code refinement for ROM/ RAM module dependency - * using global variable instead of stack for setting wlanoidSetNetworkAddress(), due to buffer may be released before TX thread handling - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 06 2011 eddie.chen - * [WCXRP00001027] [MT6628 Wi-Fi][Firmware/Driver] Tx fragmentation - * Add rlmDomainGetChnlList symbol. - * - * 09 22 2011 cm.chang - * NULL - * Safer writng stype to avoid unitialized regitry structure - * - * 09 21 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Avoid possible structure alignment problem - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * expose scnQuerySparseChannel() for P2P-FSM. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 07 2011 wh.su - * [WCXRP00000839] [MT6620 Wi-Fi][Driver] Add the dumpMemory8 and dumpMemory32 EXPORT_SYMBOL - * Add the dumpMemory8 symbol export for debug mode. - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Export one symbol for enhancement. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Modify some driver connection flow or behavior to pass Sigma test more easier.. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 11 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * export wlan functions to p2p - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * glBusFreeIrq() should use the same pvCookie as glBusSetIrq() or request_irq()/free_irq() won't work as a pair. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * fix typo. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * reverse order to prevent probing racing. - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine the queue_select function - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export nicQmUpdateWmmParms. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 24 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Support ARP filter during suspended - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 17 2011 terry.wu - * [WCXRP00000459] [MT6620 Wi-Fi][Driver] Fix deference null pointer problem in wlanRemove - * Fix deference a null pointer problem in wlanRemove. - * - * 02 16 2011 jeffrey.chang - * NULL - * fix compilig error - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add one more export symbol. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * Export Deactivation Network. - * - * 02 01 2011 jeffrey.chang - * [WCXRP00000414] KAL Timer is not unregistered when driver not loaded - * Unregister the KAL timer during driver unloading - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 15 2010 cp.wu - * [WCXRP00000265] [MT6620 Wi-Fi][Driver] Remove set_mac_address routine from legacy Wi-Fi Android driver - * remove set MAC address. MAC address is always loaded from NVRAM instead. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 21 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * . - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000106] [MT6620 Wi-Fi][Driver] Enable setting multicast callback in Android - * . - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 yarco.yang - * NULL - * Support Linux x86 - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 jeffrey.chang - * NULL - * fix memory leak for module unloading - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Query statistics from firmware - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify tcp/ip checksum offload flags - * - * 04 16 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix tcp/ip checksum offload bug - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * * (2) disable set Multicast address during atomic context - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding debug module - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix f/w download start and load address by using config.h - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download support - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\52 2009-10-27 22:49:59 GMT mtk01090 -** Fix compile error for Linux EHPI driver -** \main\maintrunk.MT5921\51 2009-10-20 17:38:22 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\50 2009-10-08 10:33:11 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\49 2009-09-28 20:19:05 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\48 2009-09-03 13:58:46 GMT mtk01088 -** remove non-used code -** \main\maintrunk.MT5921\47 2009-09-03 11:40:25 GMT mtk01088 -** adding the module parameter for wapi -** \main\maintrunk.MT5921\46 2009-08-18 22:56:41 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\45 2009-07-06 20:53:00 GMT mtk01088 -** adding the code to check the wapi 1x frame -** \main\maintrunk.MT5921\44 2009-06-23 23:18:55 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\43 2009-02-16 23:46:51 GMT mtk01461 -** Revise the order of increasing u4TxPendingFrameNum because of CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\42 2009-01-22 13:11:59 GMT mtk01088 -** set the tid and 1x value at same packet reserved field -** \main\maintrunk.MT5921\41 2008-10-20 22:43:53 GMT mtk01104 -** Fix wrong variable name "prDev" in wlanStop() -** \main\maintrunk.MT5921\40 2008-10-16 15:37:10 GMT mtk01461 -** add handle WLAN_STATUS_SUCCESS in wlanHardStartXmit() for CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\39 2008-09-25 15:56:21 GMT mtk01461 -** Update driver for Code review -** \main\maintrunk.MT5921\38 2008-09-05 17:25:07 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\37 2008-09-02 10:57:06 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\36 2008-08-05 01:53:28 GMT mtk01461 -** Add support for linux statistics -** \main\maintrunk.MT5921\35 2008-08-04 16:52:58 GMT mtk01461 -** Fix ASSERT if removing module in BG_SSID_SCAN state -** \main\maintrunk.MT5921\34 2008-06-13 22:52:24 GMT mtk01461 -** Revise status code handling in wlanHardStartXmit() for WLAN_STATUS_SUCCESS -** \main\maintrunk.MT5921\33 2008-05-30 18:56:53 GMT mtk01461 -** Not use wlanoidSetCurrentAddrForLinux() -** \main\maintrunk.MT5921\32 2008-05-30 14:39:40 GMT mtk01461 -** Remove WMM Assoc Flag -** \main\maintrunk.MT5921\31 2008-05-23 10:26:40 GMT mtk01084 -** modify wlanISR interface -** \main\maintrunk.MT5921\30 2008-05-03 18:52:36 GMT mtk01461 -** Fix Unset Broadcast filter when setMulticast -** \main\maintrunk.MT5921\29 2008-05-03 15:17:26 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\28 2008-04-24 22:48:21 GMT mtk01461 -** Revise set multicast function by using windows oid style for LP own back -** \main\maintrunk.MT5921\27 2008-04-24 12:00:08 GMT mtk01461 -** Fix multicast setting in Linux and add comment -** \main\maintrunk.MT5921\26 2008-03-28 10:40:22 GMT mtk01461 -** Fix set mac address func in Linux -** \main\maintrunk.MT5921\25 2008-03-26 15:37:26 GMT mtk01461 -** Add set MAC Address -** \main\maintrunk.MT5921\24 2008-03-26 14:24:53 GMT mtk01461 -** For Linux, set net_device has feature with checksum offload by default -** \main\maintrunk.MT5921\23 2008-03-11 14:50:52 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT5921\22 2008-02-29 15:35:20 GMT mtk01088 -** add 1x decide code for sw port control -** \main\maintrunk.MT5921\21 2008-02-21 15:01:54 GMT mtk01461 -** Rearrange the set off place of GLUE spin lock in HardStartXmit -** \main\maintrunk.MT5921\20 2008-02-12 23:26:50 GMT mtk01461 -** Add debug option - Packet Order for Linux and add debug level - Event -** \main\maintrunk.MT5921\19 2007-12-11 00:11:12 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\18 2007-11-30 17:02:25 GMT mtk01425 -** 1. Set Rx multicast packets mode before setting the address list -** \main\maintrunk.MT5921\17 2007-11-26 19:44:24 GMT mtk01461 -** Add OS_TIMESTAMP to packet -** \main\maintrunk.MT5921\16 2007-11-21 15:47:20 GMT mtk01088 -** fixed the unload module issue -** \main\maintrunk.MT5921\15 2007-11-07 18:37:38 GMT mtk01461 -** Fix compile warnning -** \main\maintrunk.MT5921\14 2007-11-02 01:03:19 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\13 2007-10-30 10:42:33 GMT mtk01425 -** 1. Refine for multicast list -** \main\maintrunk.MT5921\12 2007-10-25 18:08:13 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "gl_cfg80211.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define MAX_IOREQ_NUM 10 - -atomic_t fgIsUnderEarlierSuspend = {.counter=0}; - -struct semaphore g_halt_sem; -int g_u4HaltFlag = 0; - -#if defined(MTK_PACKET_FILTERING_SUPPORT) -UINT_8 g_packet_switch = 0; -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Tasklet mechanism is like buttom-half in Linux. We just want to - * send a signal to OS for interrupt defer processing. All resources - * are NOT allowed reentry, so txPacket, ISR-DPC and ioctl must avoid preempty. - */ -typedef struct _WLANDEV_INFO_T { - struct net_device *prDev; -} WLANDEV_INFO_T, *P_WLANDEV_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -MODULE_AUTHOR(NIC_AUTHOR); -MODULE_DESCRIPTION(NIC_DESC); -MODULE_SUPPORTED_DEVICE(NIC_NAME); - -#if 0 - MODULE_LICENSE("MTK Propietary"); -#else - MODULE_LICENSE("GPL"); -#endif - -#define NIC_INF_NAME "wlan%d" /* interface name */ -#define LEGACY_IN_AP_MODE "legacy_wlan%d" /*interface name in AP mode*/ -extern volatile int PowerOnIFname; - - -#if DBG - UINT_8 aucDebugModule[DBG_MODULE_NUM]; - UINT_32 u4DebugModule = 0; -#endif /* DBG */ - -//4 2007/06/26, mikewu, now we don't use this, we just fix the number of wlan device to 1 -static WLANDEV_INFO_T arWlanDevInfo[CFG_MAX_WLAN_DEVICES] = {{0}}; -static UINT_32 u4WlanDevNum = 0; /* How many NICs coexist now */ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if CFG_ENABLE_WIFI_DIRECT -static SUB_MODULE_HANDLER rSubModHandler[SUB_MODULE_NUM] = {{NULL}}; -#endif - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_5ghz_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 mtk_cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_wlan_ops = { - .change_virtual_intf = mtk_cfg80211_change_iface, - .add_key = mtk_cfg80211_add_key, - .get_key = mtk_cfg80211_get_key, - .del_key = mtk_cfg80211_del_key, - .set_default_key = mtk_cfg80211_set_default_key, - .get_station = mtk_cfg80211_get_station, - .scan = mtk_cfg80211_scan, - .connect = mtk_cfg80211_connect, - .disconnect = mtk_cfg80211_disconnect, - .join_ibss = mtk_cfg80211_join_ibss, - .leave_ibss = mtk_cfg80211_leave_ibss, - .set_power_mgmt = mtk_cfg80211_set_power_mgmt, - .set_pmksa = mtk_cfg80211_set_pmksa, - .del_pmksa = mtk_cfg80211_del_pmksa, - .flush_pmksa = mtk_cfg80211_flush_pmksa, - - /* Action Frame TX/RX */ - .remain_on_channel = mtk_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_cfg80211_mgmt_tx, - .mgmt_tx_cancel_wait = mtk_cfg80211_mgmt_tx_cancel_wait, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_cfg80211_testmode_cmd, - #endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -unsigned int _cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -wlanSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Load NVRAM data and translate it into REG_INFO_T -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* \param[out] prRegInfo Pointer to struct REG_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -glLoadNvram ( - IN P_GLUE_INFO_T prGlueInfo, - OUT P_REG_INFO_T prRegInfo - ) -{ - UINT_32 i, j; - UINT_8 aucTmp[2]; - PUINT_8 pucDest; - - ASSERT(prGlueInfo); - ASSERT(prRegInfo); - - if((!prGlueInfo) || (!prRegInfo)) { - return; - } - - if(kalCfgDataRead16(prGlueInfo, - sizeof(WIFI_CFG_PARAM_STRUCT) - sizeof(UINT_16), - (PUINT_16)aucTmp) == TRUE) { - prGlueInfo->fgNvramAvailable = TRUE; - DBGLOG(INIT, STATE, ("WIFI_CONFIG:NVRAM is available\n")); - // load MAC Address - for (i = 0 ; i < sizeof(PARAM_MAC_ADDR_LEN) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prRegInfo->aucMacAddr) + i)); - } - - // load country code - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucCountryCode[0]), - (PUINT_16)aucTmp); - - // cast to wide characters - prRegInfo->au2CountryCode[0] = (UINT_16) aucTmp[0]; - prRegInfo->au2CountryCode[1] = (UINT_16) aucTmp[1]; - - // load default normal TX power - for (i = 0 ; i < sizeof(TX_PWR_PARAM_T) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, rTxPwr) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->rTxPwr)) + i)); - } - - // load feature flags - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucTxPwrValid), - (PUINT_16)aucTmp); - prRegInfo->ucTxPwrValid = aucTmp[0]; - prRegInfo->ucSupport5GBand = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, uc2G4BwFixed20M), - (PUINT_16)aucTmp); - prRegInfo->uc2G4BwFixed20M = aucTmp[0]; - prRegInfo->uc5GBwFixed20M = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucEnable5GBand), - (PUINT_16)aucTmp); - prRegInfo->ucEnable5GBand = aucTmp[0]; - - /* load EFUSE overriding part */ - for (i = 0 ; i < sizeof(prRegInfo->aucEFUSE) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->aucEFUSE)) + i)); - } - - /* load band edge tx power control */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, fg2G4BandEdgePwrUsed), - (PUINT_16)aucTmp); - prRegInfo->fg2G4BandEdgePwrUsed = (BOOLEAN)aucTmp[0]; - if (aucTmp[0]) { - prRegInfo->cBandEdgeMaxPwrCCK = (INT_8)aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, cBandEdgeMaxPwrOFDM20), - (PUINT_16)aucTmp); - prRegInfo->cBandEdgeMaxPwrOFDM20 = (INT_8)aucTmp[0]; - prRegInfo->cBandEdgeMaxPwrOFDM40 = (INT_8)aucTmp[1]; - } - - /* load regulation subbands */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucRegChannelListMap), - (PUINT_16)aucTmp); - prRegInfo->eRegChannelListMap = (ENUM_REG_CH_MAP_T) aucTmp[0]; - prRegInfo->ucRegChannelListIndex = aucTmp[1]; - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - for (i = 0 ; i < MAX_SUBBAND_NUM; i++) { - pucDest = (PUINT_8) &prRegInfo->rDomainInfo.rSubBand[i]; - for (j = 0; j < 6; j += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) - + (i * 6 + j), - (PUINT_16)aucTmp); - - *pucDest++ = aucTmp[0]; - *pucDest++ = aucTmp[1]; - } - } - } - } - else { - prGlueInfo->fgNvramAvailable = FALSE; - DBGLOG(INIT, STATE, ("WIFI_CONFIG:NVRAM is inavailable\n")); - } - - return; -} - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module init function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == FALSE) { - rSubModHandler[P2P_MODULE].subModInit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = TRUE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module exit function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == TRUE) { - rSubModHandler[P2P_MODULE].subModExit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = FALSE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module init flag, force TxThread to run sub modle init -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_INIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module INIT*/ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetRegister(prGlueInfo); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module exit flag, force TxThread to run sub modle exit -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ) -{ -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo); - } -#endif - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_EXIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module EXIT */ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set by sub module, indicate sub module is already inserted -* -* \param[in] rSubModInit, function pointer point to sub module init function -* \param[in] rSubModExit, function pointer point to sub module exit function -* \param[in] eSubModIdx, sub module index -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ) -{ - rSubModHandler[eSubModIdx].subModInit = rSubModInit; - rSubModHandler[eSubModIdx].subModExit = rSubModExit; - rSubModHandler[eSubModIdx].fgIsInited = FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief check wlan is launched or not -* -* \param[in] (none) -* -* \return TRUE, wlan is already started -* FALSE, wlan is not started yet -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsLaunched( - VOID - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - - ASSERT(prDev); - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - return FALSE; - } - - return prGlueInfo->prAdapter->fgIsWlanLaunched; -} - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Export wlan GLUE_INFO_T pointer to p2p module -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return TRUE: get GlueInfo pointer successfully -* FALSE: wlan is not started yet -*/ -/*---------------------------------------------------------------------------*/ -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (NULL == prGlueInfo) { - return FALSE; - } - - if(FALSE == prGlueInfo->prAdapter->fgIsWlanLaunched) { - return FALSE; - } - - *prGlueInfoExpAddr = prGlueInfo; - return TRUE; -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release prDev from wlandev_array and free tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanClearDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == prDev) { - arWlanDevInfo[i].prDev = NULL; - u4WlanDevNum--; - } - } - - return; -} /* end of wlanClearDevIdx() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate an unique interface index, net_device::ifindex member for this -* wlan device. Store the net_device in wlandev_array, and initialize -* tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \retval >= 0 The device number. -* \retval -1 Fail to get index. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanGetDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == (struct net_device *) NULL) { - /* Reserve 2 bytes space to store one digit of - * device number and NULL terminator. - */ - arWlanDevInfo[i].prDev = prDev; - u4WlanDevNum++; - return i; - } - } - - return -1; -} /* end of wlanGetDevIdx() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, a primary SOCKET interface to configure -* the interface lively. Handle an ioctl call on one of our devices. -* Everything Linux ioctl specific is done here. Then we pass the contents -* of the ifr->data to the request message handler. -* -* \param[in] prDev Linux kernel netdevice -* -* \param[in] prIFReq Our private ioctl request structure, typed for the generic -* struct ifreq so we can use ptr to function -* -* \param[in] cmd Command ID -* -* \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. -* \retval OTHER The execution of IOCTL command is failed. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - - /* Verify input parameters for the following functions */ - ASSERT(prDev && prIFReq); - if (!prDev || !prIFReq) { - DBGLOG(INIT, WARN, ("%s Invalid input data\n", __FUNCTION__)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("%s No glue info\n", __FUNCTION__)); - return -EFAULT; - } - - if (prGlueInfo->u4ReadyFlag == 0) { - return -EINVAL; - } - - //printk ("ioctl %x\n", i4Cmd); - - if (i4Cmd == SIOCGIWPRIV) { - /* 0x8B0D, get private ioctl table */ - ret = wext_get_priv(prDev, prIFReq); - } - else if ((i4Cmd >= SIOCIWFIRST) && (i4Cmd < SIOCIWFIRSTPRIV)) { - /* 0x8B00 ~ 0x8BDF, wireless extension region */ - ret = wext_support_ioctl(prDev, prIFReq, i4Cmd); - } - else if ((i4Cmd >= SIOCIWFIRSTPRIV) && (i4Cmd < SIOCIWLASTPRIV)) { - /* 0x8BE0 ~ 0x8BFF, private ioctl region */ - ret = priv_support_ioctl(prDev, prIFReq, i4Cmd); - } - else { - DBGLOG(INIT, WARN, ("Unexpected ioctl command: 0x%04x\n", i4Cmd)); - /* return 0 for safe? */ - } - - return ret; -} /* end of wlanDoIOCTL() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to set multicast list and set rx mode. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -static struct delayed_work workq; -static struct net_device *gPrDev; - -static void -wlanSetMulticastList (struct net_device *prDev) -{ - gPrDev = prDev; - schedule_delayed_work(&workq, 0); -} - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -static void -wlanSetMulticastListWorkQueue (struct work_struct *work) { - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4PacketFilter = 0; - UINT_32 u4SetInfoLen; - struct net_device *prDev = gPrDev; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", - prDev, prGlueInfo)); - up(&g_halt_sem); - return; - } - - if (prDev->flags & IFF_PROMISC) { - u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - - u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - up(&g_halt_sem); - - if (kalIoctl(prGlueInfo, - wlanoidSetCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen) != WLAN_STATUS_SUCCESS) { - return; - } - - - if (u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - PUINT_8 prMCAddrList = NULL; - UINT_32 i = 0; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prMCAddrList = kalMemAlloc(MAX_NUM_GROUP_ADDR * ETH_ALEN, VIR_MEM_TYPE); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - memcpy((prMCAddrList + i * ETH_ALEN), ha->addr, ETH_ALEN); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - memcpy((prMCAddrList + i * ETH_ALEN), prMcList->dmi_addr, ETH_ALEN); - } -#endif - - up(&g_halt_sem); - - kalIoctl(prGlueInfo, - wlanoidSetMulticastList, - prMCAddrList, - (i * ETH_ALEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - kalMemFree(prMCAddrList, VIR_MEM_TYPE, MAX_NUM_GROUP_ADDR * ETH_ALEN); - } - - return; -} /* end of wlanSetMulticastList() */ - - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -void -p2pSetMulticastListWorkQueueWrapper (P_GLUE_INFO_T prGlueInfo) { - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prGlueInfo(0x%p)\n", - prGlueInfo)); - return; - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - mtk_p2p_wext_set_Multicastlist(prGlueInfo); - } -#endif - - return; -} /* end of p2pSetMulticastListWorkQueueWrapper() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is TX entry point of NET DEVICE. -* -* \param[in] prSkb Pointer of the sk_buff to be sent -* \param[in] prDev Pointer to struct net_device -* -* \retval NETDEV_TX_OK - on success. -* \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanHardStartXmit( - struct sk_buff *prSkb, - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n")); -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - #if CFG_DBG_GPIO_PINS - { - /* TX request from OS */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_HIGH); - } - #endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); -#endif - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx]); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum >= CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_stop_queue(prDev); - } -#endif - } else { - //printk("is security frame\n"); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - DBGLOG(TX, EVENT, ("\n+++++ pending frame %d len = %d +++++\n", prGlueInfo->i4TxPendingFrameNum, prSkb->len)); - prGlueInfo->rNetDevStats.tx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.tx_packets++; - - //pr->u4Flag |= GLUE_FLAG_TXREQ; - //wake_up_interruptible(&prGlueInfo->waitq); - kalSetEvent(prGlueInfo); - - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} /* end of wlanHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] prDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -*/ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -wlanGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - #if 0 - WLAN_STATUS rStatus; - UINT_32 u4XmitError = 0; - UINT_32 u4XmitOk = 0; - UINT_32 u4RecvError = 0; - UINT_32 u4RecvOk = 0; - UINT_32 u4BufLen; - - ASSERT(prDev); - - /* @FIX ME: need a more clear way to do this */ - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitError, - &u4XmitError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitOk, - &u4XmitOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvOk, - &u4RecvOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvError, - &u4RecvError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - prGlueInfo->rNetDevStats.rx_packets = u4RecvOk; - prGlueInfo->rNetDevStats.tx_packets = u4XmitOk; - prGlueInfo->rNetDevStats.tx_errors = u4XmitError; - prGlueInfo->rNetDevStats.rx_errors = u4RecvError; - //prGlueInfo->rNetDevStats.rx_bytes = rCustomNetDevStats.u4RxBytes; - //prGlueInfo->rNetDevStats.tx_bytes = rCustomNetDevStats.u4TxBytes; - //prGlueInfo->rNetDevStats.rx_errors = rCustomNetDevStats.u4RxErrors; - //prGlueInfo->rNetDevStats.multicast = rCustomNetDevStats.u4Multicast; - #endif - //prGlueInfo->rNetDevStats.rx_packets = 0; - //prGlueInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - //prGlueInfo->rNetDevStats.rx_bytes = 0; - //prGlueInfo->rNetDevStats.tx_bytes = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->rNetDevStats; - -} /* end of wlanGetStats() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanInit( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - if (!prDev) { - return -ENXIO; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue); -#else - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue, NULL); -#endif - - return 0; /* success */ -} /* end of wlanInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanUninit( - struct net_device *prDev - ) -{ - return; -} /* end of wlanUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->open -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanOpen succeeds. -* \retval < 0 The execution of wlanOpen failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanOpen( - struct net_device *prDev - ) -{ - ASSERT(prDev); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_start_all_queues(prDev); -#else - netif_start_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->stop -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanStop succeeds. -* \retval < 0 The execution of wlanStop failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanStop( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* CFG80211 down */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(prScanRequest) { - cfg80211_scan_done(prScanRequest, TRUE); - } - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_stop_all_queues(prDev); -#else - netif_stop_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code - * - * \param[in] prGlueInfo Pointer to glue info - * - * \return none - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanUpdateChannelTable( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, j; - UINT_8 ucNumOfChannel; - RF_CHANNEL_INFO_T aucChannelList[ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels)]; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_channels); i++) { - mtk_5ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, - BAND_NULL, - ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels), - &ucNumOfChannel, - aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - for(j = 0 ; j < ARRAY_SIZE(mtk_2ghz_channels) ; j++) { - if(mtk_2ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_2ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - case BAND_5G: - for(j = 0 ; j < ARRAY_SIZE(mtk_5ghz_channels) ; j++) { - if(mtk_5ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_5ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - default: - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register the device to the kernel and return the index. -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanNetRegister succeeds. -* \retval < 0 The execution of wlanNetRegister failed. -*/ -/*----------------------------------------------------------------------------*/ -static INT_32 -wlanNetRegister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - INT_32 i4DevIdx = -1; - - ASSERT(prWdev); - - - do { - if (!prWdev) { - break; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - if ((i4DevIdx = wlanGetDevIdx(prWdev->netdev)) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device number exceeds.\n")); - break; - } - - /* adjust channel support status */ - wlanUpdateChannelTable((P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy)); - - if (wiphy_register(prWdev->wiphy) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: wiphy context is not registered.\n")); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(register_netdev(prWdev->netdev) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device context is not registered.\n")); - - wiphy_unregister(prWdev->wiphy); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(i4DevIdx != -1) { - prGlueInfo->fgIsRegistered = TRUE; - } - } - while(FALSE); - - return i4DevIdx; /* success */ -} /* end of wlanNetRegister() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister the device from the kernel -* -* \param[in] prWdev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetUnregister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetUnregister: The device context is NULL\n")); - return; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - wlanClearDevIdx(prWdev->netdev); - unregister_netdev(prWdev->netdev); - wiphy_unregister(prWdev->wiphy); - - prGlueInfo->fgIsRegistered = FALSE; - - DBGLOG(INIT, INFO, ("unregister wireless_dev(0x%p)\n", prWdev)); - - return; -} /* end of wlanNetUnregister() */ - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops wlan_netdev_ops = { - .ndo_open = wlanOpen, - .ndo_stop = wlanStop, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = wlanSetMulticastList, -#else - .ndo_set_multicast_list = wlanSetMulticastList, -#endif - .ndo_get_stats = wlanGetStats, - .ndo_do_ioctl = wlanDoIOCTL, - .ndo_start_xmit = wlanHardStartXmit, - .ndo_init = wlanInit, - .ndo_uninit = wlanUninit, - .ndo_select_queue = wlanSelectQueue, -}; -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method for creating Linux NET4 struct net_device object and the -* private data(prGlueInfo and prAdapter). Setup the IO address to the HIF. -* Assign the function pointer to the net_device object -* -* \param[in] pvData Memory address for the device -* -* \retval Not null The wireless_dev object. -* \retval NULL Fail to create wireless_dev object -*/ -/*----------------------------------------------------------------------------*/ -static struct lock_class_key rSpinKey[SPIN_LOCK_NUM]; -static struct wireless_dev * -wlanNetCreate( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - UINT_32 i; - struct device *prDev; - - //4 <1.1> Create wireless_dev - prWdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL); - DBGLOG(INIT, INFO, ("wireless_dev prWdev(0x%p) allocated\n", prWdev)); - if (!prWdev) { - DBGLOG(INIT, ERROR, ("Allocating memory to wireless_dev context failed\n")); - return NULL; - } - - //4 <1.2> Create wiphy - prWdev->wiphy = wiphy_new(&mtk_wlan_ops, sizeof(GLUE_INFO_T)); - DBGLOG(INIT, INFO, ("wiphy (0x%p) allocated\n", prWdev->wiphy)); - if (!prWdev->wiphy) { - DBGLOG(INIT, ERROR, ("Allocating memory to wiphy device failed\n")); - kfree(prWdev); - return NULL; - } - - //4 <1.3> co-relate wiphy & prDev -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(*((MTK_WCN_HIF_SDIO_CLTCTX *)pvData), &prDev); -#else - prDev = ((struct sdio_func *) pvData)->dev; -#endif - if (!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for wlan\n"); - } - set_wiphy_dev(prWdev->wiphy, prDev); - - //4 <1.4> configure wireless_dev & wiphy - prWdev->iftype = NL80211_IFTYPE_STATION; - prWdev->wiphy->max_scan_ssids = 1; /* FIXME: for combo scan */ - prWdev->wiphy->max_scan_ie_len = 512; - prWdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); - prWdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - //for the WPS probe request suband issue - //prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = NULL; - prWdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; - prWdev->wiphy->cipher_suites = (const u32 *)mtk_cipher_suites; - prWdev->wiphy->n_cipher_suites = ARRAY_SIZE(mtk_cipher_suites); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_SUPPORTS_FW_ROAM; - #else - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY; - #endif - - //4 <2> Create Glue structure - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - if (!prGlueInfo) { - DBGLOG(INIT, ERROR, ("Allocating memory to glue layer failed\n")); - goto netcreate_err; - } - - //4 <3> Initial Glue structure - //4 <3.1> create net device - if (PowerOnIFname==0){ - prGlueInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), NIC_INF_NAME, ether_setup, CFG_MAX_TXQ_NUM); - } - else { - prGlueInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), LEGACY_IN_AP_MODE, ether_setup, CFG_MAX_TXQ_NUM); - } - DBGLOG(INIT, INFO, ("net_device prDev(0x%p) allocated\n", prGlueInfo->prDevHandler)); - if (!prGlueInfo->prDevHandler) { - DBGLOG(INIT, ERROR, ("Allocating memory to net_device context failed\n")); - goto netcreate_err; - } - - //4 <3.1.1> initialize net device varaiables - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prDevHandler)) = prGlueInfo; - - prGlueInfo->prDevHandler->netdev_ops = &wlan_netdev_ops; -#ifdef CONFIG_WIRELESS_EXT - prGlueInfo->prDevHandler->wireless_handlers = &wext_handler_def; -#endif - netif_carrier_off(prGlueInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prDevHandler); - - //4 <3.1.2> co-relate with wiphy bi-directionally - prGlueInfo->prDevHandler->ieee80211_ptr = prWdev; -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prGlueInfo->prDevHandler->features = NETIF_F_HW_CSUM; -#endif - prWdev->netdev = prGlueInfo->prDevHandler; - - //4 <3.1.3> co-relate net device & prDev - SET_NETDEV_DEV(prGlueInfo->prDevHandler, wiphy_dev(prWdev->wiphy)); - - //4 <3.2> initiali glue variables - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prGlueInfo->ePowerState = ParamDeviceStateD0; - prGlueInfo->fgIsMacAddrOverride = FALSE; - prGlueInfo->fgIsRegistered = FALSE; - prGlueInfo->prScanRequest = NULL; - - init_completion(&prGlueInfo->rScanComp); - init_completion(&prGlueInfo->rHaltComp); - init_completion(&prGlueInfo->rPendComp); -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - init_completion(&prGlueInfo->rMgmtTxComp); - atomic_set(&prGlueInfo->rMgmtTxAto, 0); -#endif -#if CFG_ENABLE_WIFI_DIRECT - init_completion(&prGlueInfo->rSubModComp); -#endif - - /* initialize timer for OID timeout checker */ - kalOsTimerInitialize(prGlueInfo, kalTimeoutHandler); - - for (i = 0; i < SPIN_LOCK_NUM; i++) { - spin_lock_init(&prGlueInfo->rSpinLock[i]); - lockdep_set_class(&prGlueInfo->rSpinLock[i], &rSpinKey[i]); - } - - /* initialize semaphore for ioctl */ - sema_init(&prGlueInfo->ioctl_sem, 1); - - /* initialize semaphore for ioctl */ - sema_init(&g_halt_sem, 1); - g_u4HaltFlag = 0; - - //4 <4> Create Adapter structure - prAdapter = (P_ADAPTER_T) wlanAdapterCreate(prGlueInfo); - - if (!prAdapter) { - DBGLOG(INIT, ERROR, ("Allocating memory to adapter failed\n")); - goto netcreate_err; - } - - prGlueInfo->prAdapter = prAdapter; - -#ifdef CONFIG_CFG80211_WEXT - //4 <5> Use wireless extension to replace IOCTL - prWdev->wiphy->wext = &wext_handler_def; -#endif - - goto netcreate_done; - -netcreate_err: - if (NULL != prAdapter) { - wlanAdapterDestroy(prAdapter); - prAdapter = NULL; - } - - if (NULL != prGlueInfo->prDevHandler) { - free_netdev(prGlueInfo->prDevHandler); - prGlueInfo->prDevHandler = NULL; - } - - if (NULL != prWdev->wiphy) { - wiphy_free(prWdev->wiphy); - prWdev->wiphy = NULL; - } - - if (NULL != prWdev) { - /* Free net_device and private data, which are allocated by - * alloc_netdev(). - */ - kfree(prWdev); - prWdev = NULL; - } - -netcreate_done: - - return prWdev; -} /* end of wlanNetCreate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroying the struct net_device object and the private data. -* -* \param[in] prWdev Pointer to struct wireless_dev. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetDestroy( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prWdev); - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetDestroy: The device context is NULL\n")); - return; - } - - /* prGlueInfo is allocated with net_device */ - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - ASSERT(prGlueInfo); - - /* destroy kal OS timer */ - kalCancelTimer(prGlueInfo); - - glClearHifInfo(prGlueInfo); - - wlanAdapterDestroy(prGlueInfo->prAdapter); - prGlueInfo->prAdapter = NULL; - - /* Free net_device and private data, which are allocated by alloc_netdev(). - */ - free_netdev(prWdev->netdev); - wiphy_free(prWdev->wiphy); - - kfree(prWdev); - - return; -} /* end of wlanNetDestroy() */ - -#ifndef CONFIG_X86 -UINT_8 g_aucBufIpAddr[32] = {0}; - -static void wlanEarlySuspend(void) -{ - struct in_device *in_dev; - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - UINT_32 u4NumIPv6 = 0; - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - -#if defined(MTK_PACKET_FILTERING_SUPPORT) - UINT_32 u4PacketFilter = 0, u4SetInfoLen = 0, u4QueryInfoLen = 0; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; -#endif - DBGLOG(INIT, STATE, ("*********wlanEarlySuspend************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if(u4WlanDevNum == 0){ - DBGLOG(INIT, ERROR, ("wlanEarlySuspend u4WlanDevNum==0 invalid!!\n")); - return; - } - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - ASSERT(prDev); - - // <2> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - atomic_set(&fgIsUnderEarlierSuspend, 1); - - // <3> get the IPv4 address - in_dev = in_dev_get(prDev); - if (!in_dev) - return; - - rtnl_lock(); - if(!in_dev->ifa_list ||!in_dev->ifa_list->ifa_local){ - in_dev_put(in_dev); - rtnl_unlock(); - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - // <4> copy the IPv4 address - kalMemCopy(ip, &(in_dev->ifa_list->ifa_local), sizeof(ip)); - rtnl_unlock(); - in_dev_put(in_dev); - - DBGLOG(INIT, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - // <5> set the rx filter -#if defined(MTK_PACKET_FILTERING_SUPPORT) - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4QueryInfoLen); - - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidQueryCurrentPacketFilter fail 0x%lx\n", rStatus)); - } - else{ - DBGLOG(INIT, INFO, ("wlanoidQueryCurrentPacketFilter 0x%lx\n", u4PacketFilter)); - } - -// u4PacketFilter &= ~PARAM_PACKET_FILTER_BROADCAST; It will filter all the broadcast packet. - u4PacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - u4PacketFilter &= ~PARAM_PACKET_FILTER_MULTICAST; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetCurrentPacketFilter fail 0x%lx\n", rStatus)); - }else - DBGLOG(INIT, INFO, ("wlanoidSetCurrentPacketFilter 0x%lx\n", u4PacketFilter)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidQueryCurrentPacketFilter fail 0x%lx\n", rStatus)); - }else{ - DBGLOG(INIT, INFO, ("wlanoidQueryCurrentPacketFilter 0x%lx\n", u4PacketFilter)); - } - - g_packet_switch = 1; -#endif - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#if defined(CONFIG_IPV6) && defined(ENABLE_IPV6_WLAN) - - { - struct inet6_dev *in6_dev = NULL; - - in6_dev = in6_dev_get(prDev); - if (!in6_dev) - return; - - rtnl_lock(); - if(!in6_dev->ac_list ||!in6_dev->ac_list->acl_addr){ - in6_dev_put(in6_dev); - rtnl_unlock(); - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - // <4> copy the IPv6 address - kalMemCopy(ip6, &(in6_dev->ac_list->acl_local), sizeof(ip6)); - rtnl_unlock(); - in_dev_put(in6_dev); - DBGLOG(INIT, INFO, ("ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - )); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - u4NumIPv6++; - } - - } -#endif - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -#if defined( CONFIG_IPV6 ) && defined(ENABLE_IPV6_WLAN) - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -static void wlanLateResume(void) -{ - struct in_device *in_dev; - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif -#if defined(MTK_PACKET_FILTERING_SUPPORT) - UINT_32 u4PacketFilter = 0, u4SetInfoLen = 0, u4QueryInfoLen = 0; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; -#endif - DBGLOG(INIT, STATE, ("*********wlanLateResume************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if(u4WlanDevNum == 0){ - DBGLOG(INIT, ERROR, ("wlanLateResume u4WlanDevNum==0 invalid!!\n")); - return; - } - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - if(NULL == prDev) - return; - ASSERT(prDev); - - // <2> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - atomic_set(&fgIsUnderEarlierSuspend, 0); - - // <3> get the IPv4 address - in_dev = in_dev_get(prDev); - if (!in_dev) - return; - - rtnl_lock(); - if(!in_dev->ifa_list ||!in_dev->ifa_list->ifa_local) { - in_dev_put(in_dev); - rtnl_unlock(); - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - in_dev_put(in_dev); - rtnl_unlock(); -#if defined(CONFIG_IPV6) && defined(ENABLE_IPV6_WLAN) - { - struct inet6_dev *in6_dev = NULL; - - in6_dev = in6_dev_get(prDev); - if (!in6_dev) - return; - - rtnl_lock(); - if(!in6_dev->ac_list ||!in6_dev->ac_list->acl_addr){ - in6_dev_put(in6_dev); - rtnl_unlock(); - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - - rtnl_unlock(); - } -#endif - // <4> clear the Rx filter -#if defined(MTK_PACKET_FILTERING_SUPPORT) - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4QueryInfoLen); - -// u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST|PARAM_PACKET_FILTER_MULTICAST; - u4PacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; //only enable multicast filter. - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidQueryCurrentPacketFilter fail 0x%lx\n", rStatus)); - }else{ - DBGLOG(INIT, INFO, ("wlanoidQueryCurrentPacketFilter 0x%lx\n", u4PacketFilter)); - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetCurrentPacketFilter fail 0x%lx\n", rStatus)); - } else { - DBGLOG(INIT, INFO, ("wlanoidSetCurrentPacketFilter 0x%lx\n", u4PacketFilter)); - } - - g_packet_switch = 0; -#endif - // <5> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void wlan_early_suspend(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_early_suspend************\n")); - wlanEarlySuspend(); -} - -static void wlan_late_resume(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_late_resume************\n")); - wlanLateResume(); -} -#endif //defined(CONFIG_HAS_EARLYSUSPEND) -#endif //! CONFIG_X86 - -/*mtk80707 rollback aosp hal*/ - -extern void wlanRegisterNotifier(void); -extern void wlanUnregisterNotifier(void); -/*mtk80707 rollback to aosp hal*/ -typedef int (*set_p2p_mode)(struct net_device *netdev, PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode); -extern void register_set_p2p_mode_handler(set_p2p_mode handler); - -int set_p2p_mode_handler(struct net_device *netdev, PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode) { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(netdev)); - PARAM_CUSTOM_P2P_SET_STRUC_T rSetP2P; - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - rSetP2P.u4Enable = p2pmode.u4Enable; - rSetP2P.u4Mode = p2pmode.u4Mode; - - if(!rSetP2P.u4Enable) { - p2pNetUnregister(prGlueInfo, FALSE); - } - - rWlanStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pMode, - (PVOID)&rSetP2P, - sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - printk("set_p2p_mode_handler ret = %d\n", rWlanStatus); - if(rSetP2P.u4Enable) { - p2pNetRegister(prGlueInfo, TRUE); - } - //return ((rWlanStatus == WLAN_STATUS_SUCCESS) ? 0 : -1); - return 0; -} -/*endof mtk80707*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Wlan probe function. This function probes and initializes the device. -* -* \param[in] pvData data passed by bus driver init function -* _HIF_EHPI: NULL -* _HIF_SDIO: sdio bus driver handle -* -* \retval 0 Success -* \retval negative value Failed -*/ -/*----------------------------------------------------------------------------*/ -static INT_32 -wlanProbe( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - INT_32 i4DevIdx = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - INT_32 i4Status = 0; - BOOL bRet = FALSE; - - printk("WLAN driver version is JB4.4/NO.1\n"); - do { -#if DBG - int i; - /* Initialize DEBUG CLASS of each module */ - for (i = 0; i < DBG_MODULE_NUM; i++) { - aucDebugModule[i] = DBG_CLASS_ERROR | - // DBG_CLASS_WARN | - DBG_CLASS_STATE ; - // DBG_CLASS_TRACE - // DBG_CLASS_EVENT - //aucDebugModule[i] = 0; - } -#if 0 - aucDebugModule[DBG_INIT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_ARB_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_JOIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_RX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_TX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_NIC_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_HAL_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_KEVIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO | DBG_CLASS_TEMP; - aucDebugModule[DBG_SCAN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_REQ_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_MGT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_RSN_IDX] |= DBG_CLASS_TRACE; - aucDebugModule[DBG_ROAMING_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; -#endif -#endif /* DBG */ - - //4 <1> Initialize the IO port of the interface - /* GeorgeKuo: pData has different meaning for _HIF_XXX: - * _HIF_EHPI: pointer to memory base variable, which will be - * initialized by glBusInit(). - * _HIF_SDIO: bus driver handle - */ - - bRet = glBusInit(pvData); - - /* Cannot get IO address from interface */ - if (FALSE == bRet) { - DBGLOG(INIT, ERROR, (KERN_ALERT "wlanProbe: glBusInit() fail\n")); - i4Status = -EIO; - break; - } - register_set_p2p_mode_handler(set_p2p_mode_handler); - - //4 <2> Create network device, Adapter, KalInfo, prDevHandler(netdev) - if ((prWdev = wlanNetCreate(pvData)) == NULL) { - DBGLOG(INIT, ERROR, ("wlanProbe: No memory for dev and its private\n")); - i4Status = -ENOMEM; - break; - } - - //4 <2.5> Set the ioaddr to HIF Info - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - gPrDev = prGlueInfo->prDevHandler; - glSetHifInfo(prGlueInfo, (UINT_32) pvData); - - - /* main thread is created in this function */ - init_waitqueue_head(&prGlueInfo->waitq); - // - - QUEUE_INITIALIZE(&prGlueInfo->rCmdQueue); - QUEUE_INITIALIZE(&prGlueInfo->rTxQueue); - - - - //prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - //4 <4> Setup IRQ - prWlandevInfo = &arWlanDevInfo[i4DevIdx]; - - //i4Status = glBusSetIrq(prWdev->netdev, NULL, *((P_GLUE_INFO_T *) netdev_priv(prWdev->netdev))); - - if (i4Status != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanProbe: Set IRQ error\n")); - break; - } - - prGlueInfo->i4DevIdx = i4DevIdx; - - prAdapter = prGlueInfo->prAdapter; - - prGlueInfo->u4ReadyFlag = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prAdapter->u4CSUMFlags = (CSUM_OFFLOAD_EN_TX_TCP | CSUM_OFFLOAD_EN_TX_UDP | CSUM_OFFLOAD_EN_TX_IP); -#endif - - //4 <5> Start Device - // -#if CFG_ENABLE_FW_DOWNLOAD - /* before start adapter, we need to open and load firmware */ - { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(prRegInfo, 0, sizeof(REG_INFO_T)); - prRegInfo->u4StartAddress = CFG_FW_START_ADDRESS; - prRegInfo->u4LoadAddress = CFG_FW_LOAD_ADDRESS; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - //kalMemCopy(&prGlueInfo->rRegInfo, prRegInfo, sizeof(REG_INFO_T)); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - prRegInfo->fgEnArpFilter = TRUE; - - if (kalFirmwareImageMapping(prGlueInfo, &prFwBuffer, &u4FwSize) == NULL) { - i4Status = -EIO; - goto bailout; - } else { - if (wlanAdapterStart(prAdapter, prRegInfo, prFwBuffer, u4FwSize) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - } - } - - kalFirmwareImageUnmapping(prGlueInfo, NULL, prFwBuffer); - -bailout: - //kfree(prRegInfo); - - if (i4Status < 0) { - break; - } - } -#else - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(&prGlueInfo->rRegInfo, 0, sizeof(REG_INFO_T)); - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - - if (wlanAdapterStart(prAdapter, prRegInfo, NULL, 0) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - break; - } -#endif - if(TRUE == prAdapter->fgEnable5GBand) - prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - - prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - /* set MAC address */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - struct sockaddr MacAddr; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryCurrentAddr, - &MacAddr.sa_data, - PARAM_MAC_ADDR_LEN, - TRUE, - TRUE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set MAC addr fail 0x%lx\n", rStatus)); - prGlueInfo->u4ReadyFlag = 0; - } else { - memcpy(prGlueInfo->prDevHandler->dev_addr, &MacAddr.sa_data, ETH_ALEN); - memcpy(prGlueInfo->prDevHandler->perm_addr, prGlueInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* card is ready */ - prGlueInfo->u4ReadyFlag = 1; -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, STATE, ("MAC address: "MACSTR, MAC2STR(&MacAddr.sa_data))); -#endif - } - } - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - /* set HW checksum offload */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set HW checksum offload fail 0x%lx\n", rStatus)); - } - } -#endif - - //4 <3> Register the card - if ((i4DevIdx = wlanNetRegister(prWdev)) < 0){ - i4Status = -ENXIO; - DBGLOG(INIT, ERROR, ("wlanProbe: Cannot register the net_device context to the kernel\n")); - break; - } -#if defined(CONFIG_HAS_EARLYSUSPEND) - glRegisterEarlySuspend(&mt6620_early_suspend_desc, wlan_early_suspend, wlan_late_resume); - wlanRegisterNotifier(); -#endif - - //4 <6> Initialize /proc filesystem -#ifdef WLAN_INCLUDE_PROC - if ( (i4Status = procInitProcfs(prDev, NIC_DEVICE_ID_LOW)) < 0) { - DBGLOG(INIT, ERROR, ("wlanProbe: init procfs failed\n")); - break; - } -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - glRegisterAmpc(prGlueInfo); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*wlan is launched*/ - prGlueInfo->prAdapter->fgIsWlanLaunched = TRUE; - /*if p2p module is inserted, notify tx_thread to init p2p network*/ - if(rSubModHandler[P2P_MODULE].subModInit) { - wlanSubModInit(prGlueInfo); - } -#endif - } - while (FALSE); - - return i4Status; -} /* end of wlanProbe() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method to stop driver operation and release all resources. Following -* this call, no frame should go up or down through this interface. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanRemove( - VOID - ) -{ - struct net_device *prDev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - DBGLOG(INIT, INFO, ("Remove wlan!\n")); - printk("wlanremove!!\n"); - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - DBGLOG(INIT, INFO, ("0 == u4WlanDevNum\n")); - return; - } - - /*mtk80707 rollback aosp hal*/ - register_set_p2p_mode_handler(NULL); - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - prWlandevInfo = &arWlanDevInfo[u4WlanDevNum-1]; - - ASSERT(prDev); - if (NULL == prDev) { - DBGLOG(INIT, INFO, ("NULL == prDev\n")); - return; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - DBGLOG(INIT, INFO, ("NULL == prGlueInfo\n")); - free_netdev(prDev); - return; - } - - -#if CFG_ENABLE_WIFI_DIRECT - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo, TRUE); - p2pRemove(prGlueInfo); - } - -#if 0 - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - //if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - if (prGlueInfo->prP2PInfo) { - //p2pRemove(prGlueInfo); - if (prGlueInfo->prP2PInfo->prDevHandler) { - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - - } - - - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return; - } - } -#endif -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsNetRegistered) { - bowNotifyAllLinkDisconnected(prGlueInfo->prAdapter); - /*wait 300ms for BoW module to send deauth*/ - kalMsleep(300); - } -#endif - - //4 <1> Stopping handling interrupt and free IRQ - - kalMemSet(&(prGlueInfo->prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - flush_delayed_work_sync(&workq); - - down(&g_halt_sem); - g_u4HaltFlag = 1; - - //4 <2> Mark HALT, notify main thread to stop, and clean up queued requests - prGlueInfo->u4Flag |= GLUE_FLAG_HALT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread stops */ - wait_for_completion_interruptible(&prGlueInfo->rHaltComp); - - DBGLOG(INIT, INFO, ("mtk_sdiod stopped\n")); - - //prGlueInfo->rHifInfo.main_thread = NULL; - prGlueInfo->main_thread = NULL; - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsRegistered) { - glUnregisterAmpc(prGlueInfo); - } -#endif - - - //4 <3> Remove /proc filesystem. -#ifdef WLAN_INCLUDE_PROC - procRemoveProcfs(prDev, NIC_DEVICE_ID_LOW); -#endif /* WLAN_INCLUDE_PROC */ - - //4 <4> wlanAdapterStop - prAdapter = prGlueInfo->prAdapter; - wlanAdapterStop(prAdapter); - DBGLOG(INIT, STATE, ("Number of Stalled Packets = %ld\n", prGlueInfo->i4TxPendingFrameNum)); - - //4 <5> Release the Bus - glBusRelease(prDev); - - up(&g_halt_sem); - - //4 <6> Unregister the card - wlanNetUnregister(prDev->ieee80211_ptr); - - //4 <7> Destroy the device - wlanNetDestroy(prDev->ieee80211_ptr); - prDev = NULL; - -#if defined(CONFIG_HAS_EARLYSUSPEND) - glUnregisterEarlySuspend(&mt6620_early_suspend_desc); -#endif - wlanUnregisterNotifier(); - - return; -} /* end of wlanRemove() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Entry Point -static int __init initWlan(void) -{ - int ret = 0; - - DBGLOG(INIT, INFO, ("initWlan\n")); - - /* memory pre-allocation */ - kalInitIOBuffer(); - - //return ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - ret = ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - - if (ret == -EIO) { - kalUninitIOBuffer(); - return ret; - } - -#if (CFG_CHIP_RESET_SUPPORT) - glResetInit(); -#endif - - return ret; -} /* end of initWlan() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -static VOID __exit exitWlan(void) -{ - //printk("remove %p\n", wlanRemove); -#if CFG_CHIP_RESET_SUPPORT - glResetUninit(); -#endif - - glUnregisterBus(wlanRemove); - - /* free pre-allocated memory */ - kalUninitIOBuffer(); - - DBGLOG(INIT, INFO, ("exitWlan\n")); - - return; -} /* end of exitWlan() */ - -module_init(initWlan); -module_exit(exitWlan); -#if 0 -/* export necessary symbol for p2p driver using */ -#if CFG_ENABLE_WIFI_DIRECT -EXPORT_SYMBOL(wlanSubModRegisterInitExit); -EXPORT_SYMBOL(wlanSubModExit); -EXPORT_SYMBOL(wlanSubModInit); - -EXPORT_SYMBOL(nicPmIndicateBssCreated); -EXPORT_SYMBOL(rlmProcessAssocRsp); -EXPORT_SYMBOL(kalSetEvent); -EXPORT_SYMBOL(rlmBssInitForAPandIbss); -EXPORT_SYMBOL(kalEnqueueCommand); -EXPORT_SYMBOL(nicIncreaseTxSeqNum); -EXPORT_SYMBOL(nicCmdEventQueryAddress); -EXPORT_SYMBOL(bssCreateStaRecFromBssDesc); -EXPORT_SYMBOL(rlmBssAborted); -EXPORT_SYMBOL(cnmStaRecResetStatus); -EXPORT_SYMBOL(mqmProcessAssocRsp); -EXPORT_SYMBOL(nicTxReturnMsduInfo); -EXPORT_SYMBOL(nicTxEnqueueMsdu); -EXPORT_SYMBOL(wlanProcessSecurityFrame); -EXPORT_SYMBOL(nicChannelNum2Freq); -EXPORT_SYMBOL(nicUpdateBss); -EXPORT_SYMBOL(wlanSendSetQueryCmd); -EXPORT_SYMBOL(cnmStaRecAlloc); -EXPORT_SYMBOL(cnmTimerInitTimer); -EXPORT_SYMBOL(rateGetRateSetFromIEs); -EXPORT_SYMBOL(nicOidCmdTimeoutCommon); -EXPORT_SYMBOL(cnmStaRecChangeState); -EXPORT_SYMBOL(rateGetDataRatesFromRateSet); -EXPORT_SYMBOL(cnmMgtPktAlloc); -EXPORT_SYMBOL(cnmMgtPktFree); -EXPORT_SYMBOL(wextSrchDesiredWPAIE); -EXPORT_SYMBOL(nicRxReturnRFB); -EXPORT_SYMBOL(cnmTimerStartTimer); -EXPORT_SYMBOL(cmdBufAllocateCmdInfo); -EXPORT_SYMBOL(cnmGetStaRecByAddress); -EXPORT_SYMBOL(nicMediaStateChange); -EXPORT_SYMBOL(bssUpdateBeaconContent); -EXPORT_SYMBOL(kalIoctl); -EXPORT_SYMBOL(nicActivateNetwork); -EXPORT_SYMBOL(nicDeactivateNetwork); -EXPORT_SYMBOL(kalRandomNumber); -EXPORT_SYMBOL(nicCmdEventSetCommon); -EXPORT_SYMBOL(cnmTimerStopTimer); -EXPORT_SYMBOL(nicIncreaseCmdSeqNum); -EXPORT_SYMBOL(authSendDeauthFrame); -EXPORT_SYMBOL(cnmMemAlloc); -EXPORT_SYMBOL(nicPmIndicateBssAbort); -EXPORT_SYMBOL(nicCmdEventSetIpAddress); -EXPORT_SYMBOL(mboxSendMsg); -EXPORT_SYMBOL(scanSearchBssDescByBssid); -EXPORT_SYMBOL(bssRemoveStaRecFromClientList); -EXPORT_SYMBOL(assocProcessRxDisassocFrame); -EXPORT_SYMBOL(authProcessRxDeauthFrame); -EXPORT_SYMBOL(cnmStaRecFree); -EXPORT_SYMBOL(rNonHTPhyAttributes); -EXPORT_SYMBOL(rNonHTApModeAttributes); -EXPORT_SYMBOL(cnmMemFree); -EXPORT_SYMBOL(wlanExportGlueInfo); -EXPORT_SYMBOL(bssInitForAP); -EXPORT_SYMBOL(nicPmIndicateBssConnected); -EXPORT_SYMBOL(rlmRspGenerateHtOpIE); -EXPORT_SYMBOL(bssGenerateExtSuppRate_IE); -EXPORT_SYMBOL(rlmRspGenerateErpIE); -EXPORT_SYMBOL(rlmRspGenerateHtCapIE); -EXPORT_SYMBOL(cnmGetStaRecByIndex); -EXPORT_SYMBOL(rsnGenerateWpaNoneIE); -EXPORT_SYMBOL(rlmRspGenerateExtCapIE); -EXPORT_SYMBOL(rsnGenerateRSNIE); -EXPORT_SYMBOL(rsnParseRsnIE); -#if CFG_SUPPORT_WPS -EXPORT_SYMBOL(wextSrchDesiredWPSIE); -#endif -EXPORT_SYMBOL(mboxDummy); -EXPORT_SYMBOL(saaFsmRunEventStart); -EXPORT_SYMBOL(saaFsmRunEventAbort); -EXPORT_SYMBOL(cnmP2PIsPermitted); -EXPORT_SYMBOL(cnmBss40mBwPermitted); -EXPORT_SYMBOL(mqmGenerateWmmParamIE); -EXPORT_SYMBOL(cnmPreferredChannel); -EXPORT_SYMBOL(bssAddStaRecToClientList); -EXPORT_SYMBOL(nicQmUpdateWmmParms); -EXPORT_SYMBOL(qmFreeAllByNetType); -EXPORT_SYMBOL(wlanQueryInformation); -EXPORT_SYMBOL(nicConfigPowerSaveProfile); -EXPORT_SYMBOL(scanSearchExistingBssDesc); -EXPORT_SYMBOL(scanAllocateBssDesc); -EXPORT_SYMBOL(wlanProcessCommandQueue); -EXPORT_SYMBOL(wlanAcquirePowerControl); -EXPORT_SYMBOL(wlanReleasePowerControl); -EXPORT_SYMBOL(wlanReleasePendingCMDbyNetwork); -#if DBG -EXPORT_SYMBOL(aucDebugModule); -EXPORT_SYMBOL(fgIsBusAccessFailed); -EXPORT_SYMBOL(allocatedMemSize); -EXPORT_SYMBOL(dumpMemory8); -EXPORT_SYMBOL(dumpMemory32); -#endif -EXPORT_SYMBOL(rlmDomainIsLegalChannel); -EXPORT_SYMBOL(scnQuerySparseChannel); -EXPORT_SYMBOL(rlmDomainGetChnlList); -EXPORT_SYMBOL(p2pSetMulticastListWorkQueueWrapper); -EXPORT_SYMBOL(nicUpdateRSSI); -EXPORT_SYMBOL(nicCmdEventQueryLinkQuality); -EXPORT_SYMBOL(kalGetMediaStateIndicated); -EXPORT_SYMBOL(nicFreq2ChannelNum); -EXPORT_SYMBOL(assocSendDisAssocFrame); -EXPORT_SYMBOL(nicUpdateBeaconIETemplate); -EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem); -EXPORT_SYMBOL(kalClearMgmtFramesByNetType); -EXPORT_SYMBOL(kalClearSecurityFramesByNetType); -EXPORT_SYMBOL(nicFreePendingTxMsduInfoByNetwork); -EXPORT_SYMBOL(bssComposeBeaconProbeRespFrameHeaderAndFF); -EXPORT_SYMBOL(bssBuildBeaconProbeRespFrameCommonIEs); -EXPORT_SYMBOL(wlanoidSetWapiAssocInfo); -EXPORT_SYMBOL(wlanoidSetWSCAssocInfo); -#endif -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_kal.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_kal.c deleted file mode 100755 index 06ea9285e8a5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_kal.c +++ /dev/null @@ -1,3990 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_kal.c#3 $ -*/ - -/*! \file gl_kal.c - \brief GLUE Layer will export the required procedures here for internal driver stack. - - This file contains all routines which are exported from GLUE Layer to internal - driver stack. -*/ - - - -/* -** $Log: gl_kal.c $ -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 31 2012 terry.wu - * NULL - * . - * - * 03 26 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * invoke put_cred() after get_current_cred() calls. - * - * 03 07 2012 yuche.tsai - * NULL - * Fix compile error when WiFi Direct is off. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 20 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * do not need to invoke free() while firmware image file doesn't exist - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 yuche.tsai - * [WCXRP00000998] [Volunteer Patch][WiFi Direct][FW] P2P Social Channel & country domain issue - * Regulation domain feature check in. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * correct i4TxPendingFrameNum decreasing. - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * refix ... - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * correct compiling warning/error. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * add more robust fault tolerance design when pre-allocation failed. (rarely happen) - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 14 2011 jeffrey.chang - * [WCXRP00000546] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] fix kernel build warning message - * fix kernel build warning message - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 11 02 2010 jeffrey.chang - * [WCXRP00000145] [MT6620 Wi-Fi][Driver] fix issue of byte endian in packet classifier which discards BoW packets - * . - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant code which cause mismatch of power control release - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant GLUE_HALT condfition to avoid unmatched release of power control - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * if there is NVRAM, then use MAC address on NVRAM as default MAC address. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 20 2010 yuche.tsai - * NULL - * Support second interface indicate when enabling P2P. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 jeffrey.chang - * NULL - * remove redundant code which cause kernel panic - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add spinlock for pending security frame count - * - * 07 19 2010 jeffrey.chang - * - * adjust the timer unit to microsecond - * - * 07 19 2010 jeffrey.chang - * - * timer should return value greater than zero - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove unused files. - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * workaround for fixing request_firmware() failure on android 2.1 - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix kernel panic when debug mode enabled - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Disable network interface after disassociation - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * flush pending TX packets while unloading driver - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set driver own before handling cmd queue - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * 2) fix ioctl - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add spinlock for i4TxPendingFrameNum access - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. free cmdinfo after command is emiited. - * 2. for BoW frames, user priority is extracted from sk_buff directly. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * (2) fix spin lock - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * 2) add 2 kal API for later integration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * raising the priority of processing interrupt - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Bug fix: the tx thread will cause starvation of MMC thread, and the interrupt will never come in - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding secondary command queue for improving non-glue code portability - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download kal api - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\50 2009-09-28 20:19:08 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\49 2009-08-18 22:56:44 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\48 2009-06-23 23:18:58 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\47 2008-11-19 11:55:43 GMT mtk01088 -** fixed some lint warning, and rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\46 2008-09-02 21:07:42 GMT mtk01461 -** Remove ASSERT(pvBuf) in kalIndicateStatusAndComplete(), this parameter can be NULL -** \main\maintrunk.MT5921\45 2008-08-29 16:03:21 GMT mtk01088 -** remove non-used code for code review, add assert check -** \main\maintrunk.MT5921\44 2008-08-21 00:32:49 GMT mtk01461 -** \main\maintrunk.MT5921\43 2008-05-30 20:27:02 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\42 2008-05-30 15:47:29 GMT mtk01461 -** \main\maintrunk.MT5921\41 2008-05-30 15:13:04 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\40 2008-05-29 14:15:14 GMT mtk01084 -** remove un-used KAL function -** \main\maintrunk.MT5921\39 2008-05-03 15:17:30 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\38 2008-04-24 11:59:44 GMT mtk01461 -** change awake queue threshold and remove code which mark #if 0 -** \main\maintrunk.MT5921\37 2008-04-17 23:06:35 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\36 2008-04-08 15:38:56 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\35 2008-04-01 23:53:13 GMT mtk01461 -** Add comment -** \main\maintrunk.MT5921\34 2008-03-26 15:36:48 GMT mtk01461 -** Add update MAC Address for Linux -** \main\maintrunk.MT5921\33 2008-03-18 11:49:34 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\32 2008-03-18 10:25:22 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\31 2008-03-06 23:43:08 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\30 2008-02-26 09:47:57 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\29 2008-02-12 23:26:53 GMT mtk01461 -** Add debug option - Packet Order for Linux -** \main\maintrunk.MT5921\28 2008-01-09 17:54:43 GMT mtk01084 -** modify the argument of kalQueryPacketInfo() -** \main\maintrunk.MT5921\27 2007-12-24 16:02:03 GMT mtk01425 -** 1. Revise csum offload -** \main\maintrunk.MT5921\26 2007-11-30 17:03:36 GMT mtk01425 -** 1. Fix bugs -** -** \main\maintrunk.MT5921\25 2007-11-29 01:57:17 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\24 2007-11-20 11:24:07 GMT mtk01088 -** CR90, not doing the netif_carrier_off to let supplicant 1x pkt can be rcv at hardstattXmit -** \main\maintrunk.MT5921\23 2007-11-09 16:36:44 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\22 2007-11-07 18:37:39 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\21 2007-11-06 19:34:06 GMT mtk01088 -** add the WPS code, indicate the mgmt frame to upper layer -** \main\maintrunk.MT5921\20 2007-11-02 01:03:21 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\19 2007-10-30 11:59:38 GMT MTK01425 -** 1. Update wlanQueryInformation -** \main\maintrunk.MT5921\18 2007-10-30 10:44:57 GMT mtk01425 -** 1. Refine multicast list code -** 2. Refine TCP/IP csum offload code -** -** Revision 1.5 2007/07/17 13:01:18 MTK01088 -** add associate req and rsp function -** -** Revision 1.4 2007/07/13 05:19:19 MTK01084 -** provide timer set functions -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if DBG -int allocatedMemSize = 0; -#endif - -extern struct semaphore g_halt_sem; -extern int g_u4HaltFlag; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static PVOID pvIoBuffer = NULL; -static UINT_32 pvIoBufferSize = 0; -static UINT_32 pvIoBufferUsage = 0; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(MT6620) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_WMTHWVER_TYPE_T{ - WMTHWVER_MT6620_E1 = 0x0, - WMTHWVER_MT6620_E2 = 0x1, - WMTHWVER_MT6620_E3 = 0x2, - WMTHWVER_MT6620_E4 = 0x3, - WMTHWVER_MT6620_E5 = 0x4, - WMTHWVER_MT6620_E6 = 0x5, - WMTHWVER_MT6620_MAX, - WMTHWVER_INVALID = 0xff -} ENUM_WMTHWVER_TYPE_T, *P_ENUM_WMTHWVER_TYPE_T; - -extern ENUM_WMTHWVER_TYPE_T -mtk_wcn_wmt_hwver_get( - VOID - ); -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_HWVER_TYPE_T{ - HWVER_MT5931_E1 = 0x1, - HWVER_MT5931_E2 = 0x2, - HWVER_MT5931_E3 = 0x3, - HWVER_MT5931_MAX, - HWVER_INVALID = 0xff -} ENUM_HWVER_TYPE_T, *P_ENUM_HWVER_TYPE_T; -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_ENABLE_FW_DOWNLOAD - -static struct file *filp = NULL; -static uid_t orgfsuid; -static gid_t orgfsgid; -static mm_segment_t orgfs; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* open firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareOpen ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - /* FIX ME: since we don't have hotplug script in the filesystem - * , so the request_firmware() KAPI can not work properly - */ - - /* save uid and gid used for filesystem access. - * set user and group to 0(root) */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - orgfsuid = current->fsuid; - orgfsgid = current->fsgid; - current->fsuid = current->fsgid = 0; -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#else - struct cred *cred = get_task_cred(current); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#endif - - ASSERT(prGlueInfo); - - - orgfs = get_fs(); - set_fs(get_ds()); - - - /* open the fw file */ -#if defined(MT6620) & CFG_MULTI_ECOVER_SUPPORT - switch(mtk_wcn_wmt_hwver_get()) { - case WMTHWVER_MT6620_E1: - case WMTHWVER_MT6620_E2: - case WMTHWVER_MT6620_E3: - case WMTHWVER_MT6620_E4: - case WMTHWVER_MT6620_E5: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - - case WMTHWVER_MT6620_E6: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E6", O_RDONLY, 0); - break; - } -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT - switch (wlanGetEcoVersion(prGlueInfo->prAdapter)) { - case HWVER_MT5931_E1: - case HWVER_MT5931_E2: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E2", O_RDONLY, 0); - break; - case HWVER_MT5931_E3: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - } -#elif defined(MT6628) - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_MT6628", O_RDONLY, 0); -#else - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); -#endif - if (IS_ERR(filp)) { - DBGLOG(INIT, INFO, ("Open FW image: %s failed\n", CFG_FW_FILENAME)); - goto error_open; - } - DBGLOG(INIT, INFO, ("Open FW image: %s done\n", CFG_FW_FILENAME)); - return WLAN_STATUS_SUCCESS; - -error_open: - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif -#endif - return WLAN_STATUS_FAILURE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* release firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareClose ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if ((filp != NULL) && !IS_ERR(filp)) { - /* close firmware file */ - filp_close(filp, NULL); - - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - { -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); -#else - struct cred *cred = get_task_cred(current); -#endif - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif - } -#endif - filp = NULL; - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* load firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareLoad ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID prBuf, - IN UINT_32 u4Offset, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - ASSERT(prBuf); - - //l = filp->f_path.dentry->d_inode->i_size; - - /* the object must have a read method */ - if ((filp == NULL) || IS_ERR(filp) || (filp->f_op == NULL) || (filp->f_op->read == NULL)) { - goto error_read; - } else { - filp->f_pos = u4Offset; - *pu4Size = filp->f_op->read(filp, prBuf, *pu4Size, &filp->f_pos); - } - - return WLAN_STATUS_SUCCESS; - -error_read: - return WLAN_STATUS_FAILURE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* query firmware image size in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -kalFirmwareSize ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - *pu4Size = filp->f_path.dentry->d_inode->i_size; -#else - *pu4Size = filp->f_dentry->d_inode->i_size; -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - /* <1> Open firmware */ - if (kalFirmwareOpen(prGlueInfo) != WLAN_STATUS_SUCCESS) { - break; - } else { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - /* <2> Query firmare size */ - kalFirmwareSize(prGlueInfo, &u4FwSize); - /* <3> Use vmalloc for allocating large memory trunk */ - prFwBuffer = vmalloc(ALIGN_4(u4FwSize)); - /* <4> Load image binary into buffer */ - if (kalFirmwareLoad(prGlueInfo, prFwBuffer, 0, &u4FwSize) != WLAN_STATUS_SUCCESS) { - vfree(prFwBuffer); - kalFirmwareClose(prGlueInfo); - break; - } - /* <5> write back info */ - *pu4FileLength = u4FwSize; - *ppvMapFileBuf = prFwBuffer; - - return prFwBuffer; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - - /* pvMapFileBuf might be NULL when file doesn't exist */ - if(pvMapFileBuf) { - vfree(pvMapFileBuf); - } - - kalFirmwareClose(prGlueInfo); -} - -#endif - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - INT_32 i4Ret = 0; - - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - GL_HIF_INFO_T *prHifInfo = &prGlueInfo->rHifInfo; - prGlueInfo->prFw = NULL; - - /* <1> Open firmware */ - i4Ret = request_firmware(&prGlueInfo->prFw, CFG_FW_FILENAME, &prHifInfo->func->dev); - - if (i4Ret) { - printk (KERN_INFO DRV_NAME"fw %s:request failed %d\n", CFG_FW_FILENAME, i4Ret); - break; - } else { - *pu4FileLength = prGlueInfo->prFw->size; - *ppvMapFileBuf = prGlueInfo->prFw->data; - return prGlueInfo->prFw->data; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - ASSERT(pvMapFileBuf); - - release_firmware(prGlueInfo->prFw); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to acquire -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[out] pu4Flags Pointer of a variable for saving IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ) -{ - UINT_32 u4Flags = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Flags); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_lock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_lock_irqsave(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - *pu4Flags = u4Flags; - } - - return; -} /* end of kalAcquireSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to release -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[in] u4Flags Saved IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ) -{ - ASSERT(prGlueInfo); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_unlock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_unlock_irqrestore(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - } - - return; -} /* end of kalReleaseSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to update -* current MAC address. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pucMacAddr Pointer of current MAC address -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateMACAddress ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ) -{ - ASSERT(prGlueInfo); - ASSERT(pucMacAddr); - - if(UNEQUAL_MAC_ADDR(prGlueInfo->prDevHandler->dev_addr, pucMacAddr)) { - memcpy(prGlueInfo->prDevHandler->dev_addr, pucMacAddr, PARAM_MAC_ADDR_LEN); - } - - return; -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief To query the packet information for offload related parameters. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryTxChksumOffloadParam ( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag - ) -{ - struct sk_buff *skb = (struct sk_buff *) pvPacket; - UINT_8 ucFlag = 0; - - ASSERT(pvPacket); - ASSERT(pucFlag); - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) - if (skb->ip_summed == CHECKSUM_HW) -#else - if (skb->ip_summed == CHECKSUM_PARTIAL) -#endif - { - -#if DBG - /* Kevin: do double check, we can remove this part in Normal Driver. - * Because we register NIC feature with NETIF_F_IP_CSUM for MT5912B MAC, so - * we'll process IP packet only. - */ - if (skb->protocol != __constant_htons(ETH_P_IP)) { - //printk("Wrong skb->protocol( = %08x) for TX Checksum Offload.\n", skb->protocol); - } - else -#endif - ucFlag |= (TX_CS_IP_GEN | TX_CS_TCP_UDP_GEN); - } - - *pucFlag = ucFlag; - - return; -} /* kalQueryChksumOffloadParam */ - - -//4 2007/10/8, mikewu, this is rewritten by Mike -/*----------------------------------------------------------------------------*/ -/*! -* \brief To update the checksum offload status to the packet to be indicated to OS. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRxCSUMOffloadParam ( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - ASSERT(pvPacket); - - if ( (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS || aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)&& - ( (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) || (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS)) ) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - } - else { - skb->ip_summed = CHECKSUM_NONE; -#if DBG - if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE && aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE) { - DBGLOG(RX, TRACE, ("RX: \"non-IPv4/IPv6\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad IP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad TCP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad UDP Checksum\" Packet\n")); - } - else { - - } -#endif - } - -} /* kalUpdateRxCSUMOffloadParam */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to free packet allocated from kalPacketAlloc. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of the packet descriptor -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - dev_kfree_skb((struct sk_buff *) pvPacket); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Only handles driver own creating packet (coalescing buffer). -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param u4Size Pointer of Packet Handle -* \param ppucData Status Code for OS upper layer -* -* \return NULL: Failed to allocate skb, Not NULL get skb -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalPacketAlloc ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ) -{ - struct sk_buff *prSkb = dev_alloc_skb(u4Size); - - if (prSkb) { - *ppucData = (PUINT_8) (prSkb->data); - } -#if DBG -{ - PUINT_32 pu4Head = (PUINT_32)&prSkb->cb[0]; - *pu4Head = (UINT_32)prSkb->head; - DBGLOG(RX, TRACE, ("prSkb->head = %#lx, prSkb->cb = %#lx\n", (UINT_32)prSkb->head, *pu4Head)); -} -#endif - return (PVOID) prSkb; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Process the received packet for indicating to OS. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] pvPacket Pointer of the packet descriptor -* \param[in] pucPacketStart The starting address of the buffer of Rx packet. -* \param[in] u4PacketLen The packet length. -* \param[in] pfgIsRetain Is the packet to be retained. -* \param[in] aerCSUM The result of TCP/ IP checksum offload. -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalProcessRxPacket ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aerCSUM[] - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - - skb->data = (unsigned char *)pucPacketStart; - skb->tail = (unsigned char *) ((UINT_32) (pucPacketStart + u4PacketLen)); - skb->len = (unsigned int)u4PacketLen; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - kalUpdateRxCSUMOffloadParam(skb, aerCSUM); -#endif - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate an array of received packets is available for higher -* level protocol uses. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] apvPkts The packet array to be indicated -* \param[in] ucPktNum The number of packets to be indicated -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalRxIndicatePkts ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ) -{ - UINT_8 ucIdx = 0; - struct net_device *prNetDev = prGlueInfo->prDevHandler; - struct sk_buff *prSkb = NULL; - - ASSERT(prGlueInfo); - ASSERT(apvPkts); - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - for(ucIdx = 0; ucIdx < ucPktNum; ucIdx++) { - prSkb = apvPkts[ucIdx]; -#if DBG - do { - PUINT_8 pu4Head = (PUINT_8)&prSkb->cb[0]; - UINT_32 u4HeadValue = 0; - kalMemCopy(&u4HeadValue, pu4Head, sizeof(u4HeadValue)); - DBGLOG(RX, TRACE, ("prSkb->head = 0x%p, prSkb->cb = 0x%lx\n", pu4Head, u4HeadValue)); - } while (0); -#endif - - if (GLUE_GET_PKT_IS_P2P(prSkb)) { - /* P2P */ -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - prNetDev = kalP2PGetDevHdlr(prGlueInfo); - } - - //prNetDev->stats.rx_bytes += prSkb->len; - //prNetDev->stats.rx_packets++; - prGlueInfo->prP2PInfo->rNetDevStats.rx_bytes += prSkb->len; - prGlueInfo->prP2PInfo->rNetDevStats.rx_packets++; - -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else if (GLUE_GET_PKT_IS_PAL(prSkb)) { - /* BOW */ -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_SEPARATE_DATA_PATH - if (prGlueInfo->rBowInfo.fgIsNetRegistered) { - prNetDev = prGlueInfo->rBowInfo.prDevHandler; - } -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else { - /* AIS */ - prNetDev = prGlueInfo->prDevHandler; - prGlueInfo->rNetDevStats.rx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.rx_packets++; - - } - - prNetDev->last_rx = jiffies; - prSkb->protocol = eth_type_trans(prSkb, prNetDev); - prSkb->dev = prNetDev; - //DBGLOG_MEM32(RX, TRACE, (PUINT_32)prSkb->data, prSkb->len); - DBGLOG(RX, EVENT, ("kalRxIndicatePkts len = %d\n", prSkb->len)); - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Rx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n")); -#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) - if(!in_interrupt()){ - netif_rx_ni(prSkb); /* only in non-interrupt context */ - } - else { - netif_rx(prSkb); - } -#else - netif_rx(prSkb); -#endif - - wlanReturnPacket(prGlueInfo->prAdapter, NULL); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Called by driver to indicate event to upper layer, for example, the wpa -* supplicant or wireless tools. -* -* \param[in] pvAdapter Pointer to the adapter descriptor. -* \param[in] eStatus Indicated status. -* \param[in] pvBuf Indicated message buffer. -* \param[in] u4BufLen Indicated message buffer size. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateStatusAndComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ) -{ - UINT_32 bufLen; - P_PARAM_STATUS_INDICATION_T pStatus = (P_PARAM_STATUS_INDICATION_T) pvBuf; - P_PARAM_AUTH_EVENT_T pAuth = (P_PARAM_AUTH_EVENT_T) pStatus; - P_PARAM_PMKID_CANDIDATE_LIST_T pPmkid = - (P_PARAM_PMKID_CANDIDATE_LIST_T) (pStatus + 1); - PARAM_MAC_ADDRESS arBssid; - struct cfg80211_scan_request *prScanRequest = NULL; - PARAM_SSID_T ssid; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_bss *bss; - UINT_8 ucChannelNum; - P_BSS_DESC_T prBssDesc = NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - kalMemZero(arBssid, MAC_ADDR_LEN); - - ASSERT(prGlueInfo); - - switch (eStatus) { - case WLAN_STATUS_ROAM_OUT_FIND_BEST: - case WLAN_STATUS_MEDIA_CONNECT: - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_CONNECTED; - - /* indicate assoc event */ - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &bufLen); - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, arBssid, bufLen); - - /* switch netif on */ - netif_carrier_on(prGlueInfo->prDevHandler); - - do { - /* print message on console */ - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuerySsid, - &ssid, - sizeof(ssid), - &bufLen); - - ssid.aucSsid[(ssid.u4SsidLen >= PARAM_MAX_LEN_SSID) ? - (PARAM_MAX_LEN_SSID - 1) : ssid.u4SsidLen ] = '\0'; - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_on [ssid:%s " MACSTR "]\n", - prGlueInfo->prDevHandler->name, - ssid.aucSsid, - MAC2STR(arBssid))); - } while(0); - - if(prGlueInfo->fgIsRegistered == TRUE) { - /* retrieve channel */ - ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - /* ensure BSS exists */ - bss = cfg80211_get_bss(priv_to_wiphy(prGlueInfo), prChannel, arBssid, - ssid.aucSsid, ssid.u4SsidLen, - WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); - - if(bss == NULL) { - /* create BSS on-the-fly */ - prBssDesc = wlanGetTargetBssDescByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - - if(prBssDesc != NULL) { - bss = cfg80211_inform_bss(priv_to_wiphy(prGlueInfo), - prChannel, - arBssid, - 0, /* TSF */ - WLAN_CAPABILITY_ESS, - prBssDesc->u2BeaconInterval, /* beacon interval */ - prBssDesc->aucIEBuf, /* IE */ - prBssDesc->u2IELength, /* IE Length */ - RCPI_TO_dBm(prBssDesc->ucRCPI) * 100, /* MBM */ - GFP_KERNEL); - } - } - - /* CFG80211 Indication */ - if(eStatus == WLAN_STATUS_MEDIA_CONNECT - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTING) { - cfg80211_connect_result(prGlueInfo->prDevHandler, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - WLAN_STATUS_SUCCESS, - GFP_KERNEL); - } - else if(eStatus == WLAN_STATUS_ROAM_OUT_FIND_BEST - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { - #if LINUX_VERSION_CODE > KERNEL_VERSION(3, 3, 0) - cfg80211_roamed_bss(prGlueInfo->prDevHandler, - bss, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - GFP_KERNEL); - #else - struct ieee80211_channel *prChannel = NULL; - UINT_8 ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - cfg80211_roamed(prGlueInfo->prDevHandler, - prChannel, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - GFP_KERNEL); - #endif - } - } - break; - - case WLAN_STATUS_MEDIA_DISCONNECT: - /* indicate disassoc event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, NULL, 0); - /* For CR 90 and CR99, While supplicant do reassociate, driver will do netif_carrier_off first, - after associated success, at joinComplete(), do netif_carier_on, - but for unknown reason, the supplicant 1x pkt will not called the driver - hardStartXmit, for template workaround these bugs, add this compiling flag - */ - /* switch netif off */ - -#if 1 /* CONSOLE_MESSAGE */ - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_off\n", prGlueInfo->prDevHandler->name)); -#endif - - netif_carrier_off(prGlueInfo->prDevHandler); - - if(prGlueInfo->fgIsRegistered == TRUE - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { - /* CFG80211 Indication */ - cfg80211_disconnected(prGlueInfo->prDevHandler, 0, NULL, 0, GFP_KERNEL); - } - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - - break; - - case WLAN_STATUS_SCAN_COMPLETE: - /* indicate scan complete event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWSCAN, NULL, 0); - - /* 1. reset first for newly incoming request */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - /* 2. then CFG80211 Indication */ - if(prScanRequest != NULL) { - cfg80211_scan_done(prScanRequest, FALSE); - } - break; - case WLAN_STATUS_CONNECT_INDICATION: - /* indicate AIS Jion fail event */ - if(prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTING) { - cfg80211_connect_result(prGlueInfo->prDevHandler, - prGlueInfo->prAdapter->rWifiVar.rAisFsmInfo.prTargetBssDesc->aucBSSID, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - REASON_CODE_UNSPECIFIED, - GFP_KERNEL); - } - break; - - #if 0 - case WLAN_STATUS_MSDU_OK: - if (netif_running(prGlueInfo->prDevHandler)) { - netif_wake_queue(prGlueInfo->prDevHandler); - } - break; - #endif - - case WLAN_STATUS_MEDIA_SPECIFIC_INDICATION: - if (pStatus) { - switch (pStatus->eStatusType) { - case ENUM_STATUS_TYPE_AUTHENTICATION: - /* - printk(KERN_NOTICE "ENUM_STATUS_TYPE_AUTHENTICATION: L(%ld) [" MACSTR "] F:%lx\n", - pAuth->Request[0].Length, - MAC2STR(pAuth->Request[0].Bssid), - pAuth->Request[0].Flags); - */ - /* indicate (UC/GC) MIC ERROR event only */ - if ((pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_PAIRWISE_ERROR) || - (pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_GROUP_ERROR)) { - cfg80211_michael_mic_failure(prGlueInfo->prDevHandler, NULL, - (pAuth->arRequest[0].u4Flags == PARAM_AUTH_REQUEST_PAIRWISE_ERROR) ? NL80211_KEYTYPE_PAIRWISE : NL80211_KEYTYPE_GROUP, - 0, NULL, GFP_KERNEL); - wext_indicate_wext_event(prGlueInfo, - IWEVMICHAELMICFAILURE, - (unsigned char *)&pAuth->arRequest[0], - pAuth->arRequest[0].u4Length); - } - break; - - case ENUM_STATUS_TYPE_CANDIDATE_LIST: - /* - printk(KERN_NOTICE "Param_StatusType_PMKID_CandidateList: Ver(%ld) Num(%ld)\n", - pPmkid->u2Version, - pPmkid->u4NumCandidates); - if (pPmkid->u4NumCandidates > 0) { - printk(KERN_NOTICE "candidate[" MACSTR "] preAuth Flag:%lx\n", - MAC2STR(pPmkid->arCandidateList[0].rBSSID), - pPmkid->arCandidateList[0].fgFlags); - } - */ - { - UINT_32 i = 0; - - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)&pPmkid->arCandidateList[0]; - - for (i=0; iu4NumCandidates; i++) { - wext_indicate_wext_event(prGlueInfo, - IWEVPMKIDCAND, - (unsigned char *)&pPmkid->arCandidateList[i], - pPmkid->u4NumCandidates); - prPmkidCand += sizeof(PARAM_PMKID_CANDIDATE_T); - } - } - break; - - default: - /* case ENUM_STATUS_TYPE_MEDIA_STREAM_MODE */ - /* - printk(KERN_NOTICE "unknown media specific indication type:%x\n", - pStatus->StatusType); - */ - break; - } - } - else { - /* - printk(KERN_WARNING "media specific indication buffer NULL\n"); - */ - } - break; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case WLAN_STATUS_BWCS_UPDATE: - { - wext_indicate_wext_event(prGlueInfo, IWEVCUSTOM, pvBuf, sizeof(PTA_IPC_T)); - } - - break; - -#endif - - default: - /* - printk(KERN_WARNING "unknown indication:%lx\n", eStatus); - */ - break; - } -} /* kalIndicateStatusAndComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to update the (re)association request -* information to the structure used to query and set -* OID_802_11_ASSOCIATION_INFORMATION. -* -* \param[in] prGlueInfo Pointer to the Glue structure. -* \param[in] pucFrameBody Pointer to the frame body of the last (Re)Association -* Request frame from the AP. -* \param[in] u4FrameBodyLen The length of the frame body of the last -* (Re)Association Request frame. -* \param[in] fgReassocRequest TRUE, if it is a Reassociation Request frame. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocReqInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - PUINT_8 cp; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4ReqIeLength = 0; - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - wext_indicate_wext_event(prGlueInfo, IWEVASSOCREQIE, cp, u4FrameBodyLen); - - if(u4FrameBodyLen <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4ReqIeLength = u4FrameBodyLen; - kalMemCopy(prGlueInfo->aucReqIe, cp, u4FrameBodyLen); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to update the (re)association -* response information to the structure used to reply with -* cfg80211_connect_result -* -* @param prGlueInfo Pointer to adapter descriptor -* @param pucFrameBody Pointer to the frame body of the last (Re)Association -* Response frame from the AP -* @param u4FrameBodyLen The length of the frame body of the last -* (Re)Association Response frame -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ) -{ - UINT_32 u4IEOffset = 6; /* cap_info, status_code & assoc_id */ - UINT_32 u4IELength = u4FrameBodyLen - u4IEOffset; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4RspIeLength = 0; - - if(u4IELength <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4RspIeLength = u4IELength; - kalMemCopy(prGlueInfo->aucRspIe, pucFrameBody + u4IEOffset, u4IELength); - } - -} /* kalUpdateReAssocRspInfo */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSendCompleteAndAwakeQueue ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - - struct net_device *prDev = NULL; - struct sk_buff *prSkb = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucNetworkType = 0; - BOOLEAN fgIsValidDevice = TRUE; - - - ASSERT(pvPacket); - ASSERT(prGlueInfo->i4TxPendingFrameNum); - - prSkb = (struct sk_buff *) pvPacket; -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); -#endif - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (GLUE_GET_PKT_IS_PAL(prSkb)) { - ucNetworkType = NETWORK_TYPE_BOW_INDEX; - } else if (GLUE_GET_PKT_IS_P2P(prSkb)) { - ucNetworkType = NETWORK_TYPE_P2P_INDEX; - -#if CFG_ENABLE_WIFI_DIRECT - /* in case packet was sent after P2P device is unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - fgIsValidDevice = FALSE; - } -#endif - } else { - ucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_DEC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx]); - prDev = prSkb->dev; - - ASSERT(prDev); - - if(fgIsValidDevice == TRUE) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (netif_subqueue_stopped(prDev, prSkb) && - prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx] <= CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD) { - netif_wake_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum < CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_wake_queue(prGlueInfo->prDevHandler); - } -#endif - } - - - dev_kfree_skb((struct sk_buff *) pvPacket); - - DBGLOG(TX, EVENT, ("----- pending frame %d -----\n", prGlueInfo->i4TxPendingFrameNum)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Copy Mac Address setting from registry. It's All Zeros in Linux. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \param[out] paucMacAddr Pointer to the Mac Address buffer -* -* \retval WLAN_STATUS_SUCCESS -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryRegistryMacAddr ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_8 paucMacAddr - ) -{ - UINT_8 aucZeroMac[MAC_ADDR_LEN] = {0,0,0,0,0,0} - DEBUGFUNC("kalQueryRegistryMacAddr"); - - ASSERT(prGlueInfo); - ASSERT(paucMacAddr); - - kalMemCopy((PVOID) paucMacAddr, (PVOID)aucZeroMac, MAC_ADDR_LEN); - - return; -} /* end of kalQueryRegistryMacAddr() */ - -#if CFG_SUPPORT_EXT_CONFIG -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read external configuration, ex. NVRAM or file -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - /* External data is given from user space by ioctl or /proc, not read by - driver. - */ - if (0 != prGlueInfo->u4ExtCfgLength) { - DBGLOG(INIT, TRACE, ("Read external configuration data -- OK\n")); - } - else { - DBGLOG(INIT, TRACE, ("Read external configuration data -- fail\n")); - } - - return prGlueInfo->u4ExtCfgLength; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This inline function is to extract some packet information, including -* user priority, packet length, destination address, 802.1x and BT over Wi-Fi -* or not. -* -* @param prGlueInfo Pointer to the glue structure -* @param prNdisPacket Packet descriptor -* @param pucPriorityParam User priority -* @param pu4PacketLen Packet length -* @param pucEthDestAddr Destination address -* @param pfgIs1X 802.1x packet or not -* @param pfgIsPAL BT over Wi-Fi packet or not -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType - ) -{ - - UINT_32 u4PacketLen; - - - UINT_8 ucUserPriority = USER_PRIORITY_DEFAULT; /* Default */ - UINT_16 u2EtherTypeLen; - struct sk_buff *prSkb = (struct sk_buff *) prPacket; - PUINT_8 aucLookAheadBuf = NULL; - - DEBUGFUNC("kalQoSFrameClassifierAndPacketInfo"); - - u4PacketLen = prSkb->len; - - if (u4PacketLen < ETH_HLEN) { - DBGLOG(INIT, WARN, ("Invalid Ether packet length: %d\n", u4PacketLen)); - return FALSE; - } - - aucLookAheadBuf = prSkb->data; - - *pfgIs1X = FALSE; - *pfgIsPAL = FALSE; - //4 <3> Obtain the User Priority for WMM - u2EtherTypeLen = (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET] << 8) | (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET + 1]); - - if ((u2EtherTypeLen == ETH_P_IP) && - (u4PacketLen >= LOOK_AHEAD_LEN)) { - PUINT_8 pucIpHdr = &aucLookAheadBuf[ETH_HLEN]; - UINT_8 ucIpVersion; - - ucIpVersion = (pucIpHdr[0] & IPVH_VERSION_MASK) >> IPVH_VERSION_OFFSET; - //printk ("ip version %x\n", ucIpVersion); - if (ucIpVersion == IPVERSION) { - UINT_8 ucIpTos; - /* Get the DSCP value from the header of IP packet. */ - ucIpTos = pucIpHdr[1]; - ucUserPriority = ((ucIpTos & IPTOS_PREC_MASK) >> IPTOS_PREC_OFFSET); - } - - /* TODO(Kevin): Add TSPEC classifier here */ - } - else if (u2EtherTypeLen == ETH_P_1X) { /* For Port Control */ - //DBGLOG(REQ, TRACE, ("Tx 1x\n")); - *pfgIs1X = TRUE; - } - else if (u2EtherTypeLen == ETH_P_PRE_1X) { /* For Pre 1x pkt */ - //DBGLOG(REQ, TRACE, ("Tx Pre-1x\n")); - *pfgIs1X = TRUE; - } -#if CFG_SUPPORT_WAPI - else if (u2EtherTypeLen == ETH_WPI_1X) { - *pfgIs1X = TRUE; - } -#endif - else if (u2EtherTypeLen <= 1500) { /* 802.3 Frame */ - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) { - - UINT_16 tmp = ((aucLookAheadBuf[ETH_SNAP_OFFSET + 3] << 8) | aucLookAheadBuf[ETH_SNAP_OFFSET + 4]); - - *pfgIsPAL = TRUE; - ucUserPriority = (UINT_8)prSkb->priority; - - if (tmp == BOW_PROTOCOL_ID_SECURITY_FRAME) { - *pfgIs1X = TRUE; - } - } - } - - //4 <4> Return the value of Priority Parameter. - *pucPriorityParam = ucUserPriority; - - //4 <5> Retrieve Packet Information - DA - /* Packet Length/ Destination Address */ - *pu4PacketLen = u4PacketLen; - - kalMemCopy(pucEthDestAddr, aucLookAheadBuf, PARAM_MAC_ADDR_LEN); - - - //<6> Network type -#if CFG_ENABLE_BT_OVER_WIFI - if(*pfgIsPAL == TRUE) { - *pucNetworkType = NETWORK_TYPE_BOW_INDEX; - } - else -#endif - { -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered && GLUE_GET_PKT_IS_P2P(prPacket)) { - *pucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else -#endif - { - *pucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - } - return TRUE; -} /* end of kalQoSFrameClassifier() */ - -VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ) -{ - - ASSERT(prGlueInfo); - /* remove timeout check timer */ - wlanoidClearTimeoutCheck(prGlueInfo->prAdapter); - - //if (prGlueInfo->u4TimeoutFlag != 1) { - prGlueInfo->rPendStatus = rOidStatus; - complete(&prGlueInfo->rPendComp); - prGlueInfo->u4OidCompleteFlag = 1; - //} - /* else let it timeout on kalIoctl entry */ -} - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - //if (prGlueInfo->u4TimeoutFlag != 1) { - //clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - if (prGlueInfo->u4OidCompleteFlag != 1) { - complete(&prGlueInfo->rPendComp); - } - //} -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to transfer linux ioctl to OID, and we -* need to specify the behavior of the OID by ourself -* -* @param prGlueInfo Pointer to the glue structure -* @param pvInfoBuf Data buffer -* @param u4InfoBufLen Data buffer length -* @param fgRead Is this a read OID -* @param fgWaitResp does this OID need to wait for values -* @param fgCmd does this OID compose command packet -* @param pu4QryInfoLen The data length of the return values -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -// todo: enqueue the i/o requests for multiple processes access -// -// currently, return -1 -// - -//static GL_IO_REQ_T OidEntry; - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ) -{ - P_GL_IO_REQ_T prIoReq = NULL; - WLAN_STATUS ret = WLAN_STATUS_SUCCESS; - - - //GLUE_SPIN_LOCK_DECLARATION(); - ASSERT(prGlueInfo); - - - - /* <1> Check if driver is halt */ - - //if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - // return WLAN_STATUS_ADAPTER_NOT_READY; - //} - - if (down_interruptible(&g_halt_sem)) { - return WLAN_STATUS_FAILURE; - } - - - if (g_u4HaltFlag) { - up(&g_halt_sem); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if(down_interruptible(&prGlueInfo->ioctl_sem)) { - up(&g_halt_sem); - return WLAN_STATUS_FAILURE; - } - - /* <2> TODO: thread-safe */ - - /* <3> point to the OidEntry of Glue layer */ - - prIoReq = &(prGlueInfo->OidEntry); - - ASSERT(prIoReq); - - /* <4> Compose the I/O request */ - prIoReq->prAdapter = prGlueInfo->prAdapter; - prIoReq->pfnOidHandler = pfnOidHandler; - prIoReq->pvInfoBuf = pvInfoBuf; - prIoReq->u4InfoBufLen = u4InfoBufLen; - prIoReq->pu4QryInfoLen = pu4QryInfoLen; - prIoReq->fgRead = fgRead; - prIoReq->fgWaitResp= fgWaitResp; - prIoReq->rStatus = WLAN_STATUS_FAILURE; -#if CFG_ENABLE_WIFI_DIRECT - prIoReq->fgIsP2pOid = fgIsP2pOid; -#endif - - /* <5> Reset the status of pending OID */ - prGlueInfo->rPendStatus = WLAN_STATUS_FAILURE; - //prGlueInfo->u4TimeoutFlag = 0; - //prGlueInfo->u4OidCompleteFlag = 0; - - /* <6> Check if we use the command queue */ - prIoReq->u4Flag = fgCmd; - - /* <7> schedule the OID bit */ - set_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - - /* <8> Wake up tx thread to handle kick start the I/O request */ - wake_up_interruptible(&prGlueInfo->waitq); - - /* <9> Block and wait for event or timeout, current the timeout is 5 secs */ - //if (wait_for_completion_interruptible_timeout(&prGlueInfo->rPendComp, 5 * KAL_HZ)) { - //if (!wait_for_completion_interruptible(&prGlueInfo->rPendComp)) { - wait_for_completion(&prGlueInfo->rPendComp); { - /* Case 1: No timeout. */ - /* if return WLAN_STATUS_PENDING, the status of cmd is stored in prGlueInfo */ - if (prIoReq->rStatus == WLAN_STATUS_PENDING) { - ret = prGlueInfo->rPendStatus; - } else { - ret = prIoReq->rStatus; - } - } - #if 0 - else { - /* Case 2: timeout */ - /* clear pending OID's cmd in CMD queue */ - if (fgCmd) { - prGlueInfo->u4TimeoutFlag = 1; - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - } - ret = WLAN_STATUS_FAILURE; - } - #endif - - up(&prGlueInfo->ioctl_sem); - up(&g_halt_sem); - - - - return ret; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending security frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending security frames -* belongs to dedicated network type -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param eNetworkTypeIdx Network Type Index -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* belongs to dedicated network type -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFramesByNetType ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} /* kalClearMgmtFramesByNetType */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a kernel thread function for handling command packets -* Tx requests and interrupt events -* -* @param data data pointer to private data of tx_thread -* -* @retval If the function succeeds, the return value is 0. -* Otherwise, an error code is returned. -* -*/ -/*----------------------------------------------------------------------------*/ - -int tx_thread(void *data) -{ - struct net_device *dev = data; - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(dev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_GL_IO_REQ_T prIoReq = NULL; - P_QUE_T prTxQueue = NULL; - P_QUE_T prCmdQue = NULL; - - int ret = 0; - - BOOLEAN fgNeedHwAccess = FALSE; - - struct sk_buff *prSkb = NULL; - - /* for spin lock acquire and release */ - GLUE_SPIN_LOCK_DECLARATION(); - - prTxQueue = &prGlueInfo->rTxQueue; - prCmdQue = &prGlueInfo->rCmdQueue; - - current->flags |= PF_NOFREEZE; - - DBGLOG(INIT, STATE, ("tx_thread starts running... \n")); - - while (TRUE) { - -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } -#endif - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("tx_thread should stop now...\n")); - break; - } - - /* - * sleep on waitqueue if no events occurred. Event contain (1) GLUE_FLAG_INT - * (2) GLUE_FLAG_OID (3) GLUE_FLAG_TXREQ (4) GLUE_FLAG_HALT - * - */ - - ret = wait_event_interruptible(prGlueInfo->waitq, - (prGlueInfo->u4Flag != 0)); - -#if CFG_DBG_GPIO_PINS - /* TX thread Wake up */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_LOW); -#endif -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } - - if (test_and_clear_bit(GLUE_FLAG_FRAME_FILTER_BIT, &prGlueInfo->u4Flag)) { - p2pFuncUpdateMgmtFrameRegister(prGlueInfo->prAdapter, prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter); - } - - -#endif - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("<1>tx_thread should stop now...\n")); - break; - } - - fgNeedHwAccess = FALSE; - - /* Handle Interrupt */ - if (test_and_clear_bit(GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag)) { - - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - - /* the Wi-Fi interrupt is already disabled in mmc thread, - so we set the flag only to enable the interrupt later */ - prGlueInfo->prAdapter->fgIsIntEnable = FALSE; - //wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - DBGLOG(INIT, INFO, ("ignore pending interrupt\n")); - } - else { - - wlanIST(prGlueInfo->prAdapter); - } - } - - /* transfer ioctl to OID request */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<2>tx_thread should stop now...\n"); - break; - } - #endif - - do { - if (test_and_clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag)) { - /* get current prIoReq */ - prGlueInfo->u4OidCompleteFlag = 0; - prIoReq = &(prGlueInfo->OidEntry); -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE - && prIoReq->fgIsP2pOid == TRUE) { - /* if this Oid belongs to p2p and p2p module is removed - * do nothing, - */ - } - else -#endif - { - if (FALSE == prIoReq->fgRead) { - prIoReq->rStatus = wlanSetInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } else { - prIoReq->rStatus = wlanQueryInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } - - if (prIoReq->rStatus != WLAN_STATUS_PENDING) { - complete(&prGlueInfo->rPendComp); - } - else { - wlanoidTimeoutCheck(prGlueInfo->prAdapter, prIoReq->pfnOidHandler); - } - } - } - - } while (FALSE); - - - /* - * - * if TX request, clear the TXREQ flag. TXREQ set by kalSetEvent/GlueSetEvent - * indicates the following requests occur - * - */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<3>tx_thread should stop now...\n"); - break; - } - #endif - - if (test_and_clear_bit(GLUE_FLAG_TXREQ_BIT, &prGlueInfo->u4Flag)) - { - - /* Process Mailbox Messages */ - wlanProcessMboxMessage(prGlueInfo->prAdapter); - - /* Process CMD request */ - do { - if (prCmdQue->u4NumElem > 0) { - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - wlanProcessCommandQueue(prGlueInfo->prAdapter, prCmdQue); - } - } while (FALSE); - - /* Handle Packet Tx */ - { - while (QUEUE_IS_NOT_EMPTY(prTxQueue)) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQueue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - ASSERT(prQueueEntry); - if (NULL == prQueueEntry) { - break; - } - - prSkb = (struct sk_buff *) GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - ASSERT(prSkb); - if (NULL == prSkb) { - DBGLOG(INIT, WARN, ("prSkb == NULL in tx\n")); - continue; - } - - if(wlanEnqueueTxPacket(prGlueInfo->prAdapter, - (P_NATIVE_PACKET)prSkb) == WLAN_STATUS_RESOURCES) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_HEAD(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - break; - } - } - - if (wlanGetTxPendingFrameCount(prGlueInfo->prAdapter) > 0) { - wlanTxPendingPackets(prGlueInfo->prAdapter, &fgNeedHwAccess); - } - } - - } - - /* Process RX, In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't do reset */ - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - - /* handle cnmTimer time out */ - if (test_and_clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag)) { - wlanTimerTimeoutCheck(prGlueInfo->prAdapter); - } - - #if CFG_DBG_GPIO_PINS - /* TX thread go to sleep */ - if (!prGlueInfo->u4Flag){ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_HIGH); - } - #endif - } - - #if 0 - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - #endif - - nicDisableInterrupt(prGlueInfo->prAdapter); - glBusFreeIrq(dev, *((P_GLUE_INFO_T *) netdev_priv(dev))); - - /* flush the pending TX packets */ - if (prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prGlueInfo); - } - - /* flush pending security frames */ - if (prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prGlueInfo); - } - - /* remove pending oid */ - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - - - /* In linux, we don't need to free sk_buff by ourself */ - - DBGLOG(INIT, INFO, ("mtk_sdiod stops\n")); - complete(&prGlueInfo->rHaltComp); - - return 0; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to check if card is removed -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval TRUE: card is removed -* FALSE: card is still attached -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return FALSE; - // Linux MMC doesn't have removal notification yet -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This routine is used to send command to firmware for overriding netweork address - * - * \param pvGlueInfo Pointer of GLUE Data Structure - - * \retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->fgIsMacAddrOverride == FALSE) { - #if !defined(CONFIG_X86) - UINT_32 i; - BOOLEAN fgIsReadError = FALSE; - - for(i = 0 ; i < MAC_ADDR_LEN ; i+=2) { - if(kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prMacAddr) + i)) == FALSE) { - fgIsReadError = TRUE; - break; - } - } - - if(fgIsReadError == TRUE) { - return FALSE; - } - else { - return TRUE; - } - #else - /* x86 Linux doesn't need to override network address so far */ - return FALSE; - #endif - } - else { - COPY_MAC_ADDR(prMacAddr, prGlueInfo->rMacAddrOverride); - - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to flush pending TX packets in glue layer -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prTxQue; - P_QUE_ENTRY_T prQueueEntry; - PVOID prPacket; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prTxQue = &(prGlueInfo->rTxQueue); - - if (prGlueInfo->i4TxPendingFrameNum) { - while (TRUE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - if (prQueueEntry == NULL) { - break; - } - - prPacket = GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - - kalSendComplete(prGlueInfo, - prPacket, - WLAN_STATUS_NOT_ACCEPTED); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is get indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->eParamMediaStateIndicated; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ) -{ - ASSERT(prGlueInfo); - - prGlueInfo->eParamMediaStateIndicated = eParamMediaStateIndicate; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending OID staying in command queue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - - if (((P_CMD_INFO_T)prQueueEntry)->fgIsOid) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - break; - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - - if (prCmdInfo) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - } - else { - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_NOT_ACCEPTED); - } - - prGlueInfo->u4OidCompleteFlag = 1; - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to insert command into prCmdQueue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* prQueueEntry Pointer of queue entry to be inserted -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ) -{ - P_QUE_T prCmdQue; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prQueueEntry); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Handle EVENT_ID_ASSOC_INFO event packet by indicating to OS with -* proper information -* -* @param pvGlueInfo Pointer of GLUE Data Structure -* @param prAssocInfo Pointer of EVENT_ID_ASSOC_INFO Packet -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ) -{ - // to do -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware load address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4LoadAddress; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware start address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4StartAddress; -} - -/*----------------------------------------------------------------------------*/ -/*! - * * @brief Notify OS with SendComplete event of the specific packet. Linux should - * * free packets here. - * * - * * @param pvGlueInfo Pointer of GLUE Data Structure - * * @param pvPacket Pointer of Packet Handle - * * @param status Status Code for OS upper layer - * * - * * @return none - * */ -/*----------------------------------------------------------------------------*/ - -/// Todo -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ) -{ - ASSERT(pvPacket); - - dev_kfree_skb((struct sk_buff *) pvPacket); - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); -} - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (UINT_32)(prGlueInfo->i4TxPendingFrameNum); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to retrieve the number of pending commands -* (including MMPDU, 802.1X and command packets) -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - - ASSERT(prGlueInfo); - prCmdQue = &prGlueInfo->rCmdQueue; - - return prCmdQue->u4NumElem; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Timer Initialization Procedure -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] prTimerHandler Pointer to timer handling function, whose only -* argument is "prAdapter" -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ - -//static struct timer_list tickfn; - -VOID -kalOsTimerInitialize ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ) -{ - - ASSERT(prGlueInfo); - - init_timer(&(prGlueInfo->tickfn)); - prGlueInfo->tickfn.function = prTimerHandler; - prGlueInfo->tickfn.data = (unsigned long) prGlueInfo; -} - -// Todo -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] rInterval Time out interval from current time. -* -* \retval TRUE Success. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ) -{ - ASSERT(prGlueInfo); - del_timer_sync(&(prGlueInfo->tickfn)); - - prGlueInfo->tickfn.expires = jiffies + u4Interval * HZ / MSEC_PER_SEC; - add_timer(&(prGlueInfo->tickfn)); - - return TRUE; /* success */ -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to cancel -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval TRUE : Timer has been canceled -* FALAE : Timer doens't exist -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - - if (del_timer_sync(&(prGlueInfo->tickfn)) >=0) { - return TRUE; - } else { - return FALSE; - } -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is a callback function for scanning done -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ) -{ - ASSERT(prGlueInfo); - - P_AIS_FSM_INFO_T prAisFsmInfo; - prAisFsmInfo = &(prGlueInfo->prAdapter->rWifiVar.rAisFsmInfo); - - cnmTimerStopTimer(prGlueInfo->prAdapter, &prAisFsmInfo->rScanDoneTimer); -#if CFG_NVRAM_EXISTENCE_CHECK - /* check for system configuration for generating error message on scan list */ - wlanCheckSystemConfiguration(prGlueInfo->prAdapter); -#endif - kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to generate a random number -* -* \param none -* -* \retval UINT_32 -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalRandomNumber( - VOID - ) -{ - UINT_32 number = 0; - - get_random_bytes(&number, 4); - - return number; -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief command timeout call-back function - * - * \param[in] prGlueInfo Pointer to the GLUE data structure. - * - * \retval (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -kalTimeoutHandler (unsigned long arg) -{ - - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T) arg; - - ASSERT(prGlueInfo); - - /* Notify tx thread for timeout event */ - set_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - wake_up_interruptible(&prGlueInfo->waitq); - - return; -} - - -VOID -kalSetEvent (P_GLUE_INFO_T pr) { - set_bit(GLUE_FLAG_TXREQ_BIT, &pr->u4Flag); - wake_up_interruptible(&pr->waitq); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if configuration file (NVRAM/Registry) exists -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if !defined(CONFIG_X86) - ASSERT(prGlueInfo); - - return prGlueInfo->fgNvramAvailable; -#else - /* there is no configuration data for x86-linux */ - return FALSE; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Registry information -* -* \param[in] -* prGlueInfo -* -* \return -* Pointer of REG_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return &(prGlueInfo->rRegInfo); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve version information of corresponding configuration file -* -* \param[in] -* prGlueInfo -* -* \param[out] -* pu2Part1CfgOwnVersion -* pu2Part1CfgPeerVersion -* pu2Part2CfgOwnVersion -* pu2Part2CfgPeerVersion -* -* \return -* NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ) -{ - ASSERT(prGlueInfo); - - ASSERT(pu2Part1CfgOwnVersion); - ASSERT(pu2Part1CfgPeerVersion); - ASSERT(pu2Part2CfgOwnVersion); - ASSERT(pu2Part2CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1OwnVersion), - pu2Part1CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1PeerVersion), - pu2Part1CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion), - pu2Part2CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2PeerVersion), - pu2Part2CfgPeerVersion); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the WPS is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->fgWpsActive); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief update RSSI and LinkQuality to GLUE layer -* -* \param[in] -* prGlueInfo -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* \return -* None -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - struct iw_statistics *pStats = (struct iw_statistics *)NULL; - - ASSERT(prGlueInfo); - - switch(eNetTypeIdx) { - case KAL_NETWORK_TYPE_AIS_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case KAL_NETWORK_TYPE_P2P_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - break; -#endif -#endif - default: - break; - - } - - if (pStats) { - pStats->qual.qual = cLinkQuality; - pStats->qual.noise = 0; - pStats->qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_NOISE_UPDATED; - pStats->qual.level = 0x100 + cRssi; - pStats->qual.updated |= IW_QUAL_LEVEL_UPDATED; - } - - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Pre-allocate I/O buffer -* -* \param[in] -* none -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ) -{ - UINT_32 u4Size; - - if(CFG_COALESCING_BUFFER_SIZE >= CFG_RX_COALESCING_BUFFER_SIZE) { - u4Size = CFG_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - else { - u4Size = CFG_RX_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - - pvIoBuffer = kmalloc(u4Size, GFP_KERNEL); - if(pvIoBuffer) { - pvIoBufferSize = u4Size; - pvIoBufferUsage = 0; - - return TRUE; - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free pre-allocated I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUninitIOBuffer( - VOID - ) -{ - if(pvIoBuffer) { - kfree(pvIoBuffer); - - pvIoBuffer = (PVOID) NULL; - pvIoBufferSize = 0; - pvIoBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatch pre-allocated I/O buffer -* -* \param[in] -* u4AllocSize -* -* \return -* PVOID for pointer of pre-allocated I/O buffer -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ) -{ - PVOID ret = (PVOID)NULL; - - if(pvIoBuffer) { - if(u4AllocSize <= (pvIoBufferSize - pvIoBufferUsage)) { - ret = (PVOID)&(((PUINT_8)(pvIoBuffer))[pvIoBufferUsage]); - pvIoBufferUsage += u4AllocSize; - } - } - else { - /* fault tolerance */ - ret = (PVOID) kalMemAlloc(u4AllocSize, PHY_MEM_TYPE); - } - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release all dispatched I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ) -{ - if(pvIoBuffer) { - pvIoBufferUsage -= u4Size; - } - else { - /* fault tolerance */ - kalMemFree(pvAddr, PHY_MEM_TYPE, u4Size); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo)) - return TRUE; -#endif - - return FALSE; -} - - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the MFP is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->rWpaInfo.u4Mfp); -} -#endif - -struct file* -kalFileOpen( - const char* path, - int flags, - int rights) -{ - struct file* filp = NULL; - mm_segment_t oldfs; - int err = 0; - - oldfs = get_fs(); - set_fs(get_ds()); - filp = filp_open(path, flags, rights); - set_fs(oldfs); - if(IS_ERR(filp)) { - err = PTR_ERR(filp); - return NULL; - } - return filp; -} - -VOID -kalFileClose( - struct file* file) -{ - filp_close(file, NULL); -} - -UINT_32 -kalFileRead( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_read(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalFileWrite( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_write(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size) -{ - struct file* file = NULL; - UINT_32 ret; - UINT_32 u4Flags = 0; - - if(fgDoAppend) { - u4Flags = O_APPEND; - } - - file = kalFileOpen(pucPath, O_WRONLY | O_CREAT | u4Flags, S_IRWXU); - ret = kalFileWrite(file, 0, pucData, u4Size); - kalFileClose(file); - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate BSS-INFO to NL80211 as scanning result -* -* \param[in] -* prGlueInfo -* pucBeaconProbeResp -* u4FrameLen -* -* -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucBeaconProbeResp, - IN UINT_32 u4FrameLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ) -{ - struct wiphy *wiphy; - struct ieee80211_channel *prChannel = NULL; - - ASSERT(prGlueInfo); - wiphy = priv_to_wiphy(prGlueInfo); - - /* search through channel entries */ - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - if(prChannel != NULL && prGlueInfo->prScanRequest != NULL) { - struct cfg80211_bss *bss; - - /* indicate to NL80211 subsystem */ - bss = cfg80211_inform_bss_frame(wiphy, - prChannel, - (struct ieee80211_mgmt *)pucBeaconProbeResp, - u4FrameLen, - i4SignalStrength * 100, - GFP_KERNEL); - - if(!bss) { - DBGLOG(REQ, WARN, ("cfg80211_inform_bss_frame() returned with NULL\n")); - } - else { - cfg80211_put_bss(bss); - } - } - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p.c deleted file mode 100755 index 9960be55478a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p.c +++ /dev/null @@ -1,5481 +0,0 @@ -/* -** $Id: @(#) gl_p2p.c@@ -*/ - -/*! \file gl_p2p.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_p2p.c $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** FPB from ALPS.JB to phase 2 release. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 09 2012 terry.wu - * [WCXRP00001166] [Wi-Fi] [Driver] cfg80211 integration for p2p newtork - * cfg80211 integration for p2p network. - * - * 12 19 2011 terry.wu - * [WCXRP00001142] [Wi-Fi] [P2P Driver] XOR local admin bit to generate p2p net device MAC - * XOR local administrated bit to generate net device MAC of p2p network. - * - * 12 02 2011 yuche.tsai - * NULL - * Fix possible KE when unload p2p. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 16 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Avoid using work thread in set p2p multicast address callback. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 11 07 2011 yuche.tsai - * NULL - * [ALPS 00087243] KE in worker thread. - * The multicast address list is scheduled in worker thread. - * Before the worker thread is excuted, if P2P is unloaded, a KE may occur. - * - * 10 26 2011 terry.wu - * [WCXRP00001066] [MT6620 Wi-Fi] [P2P Driver] Fix P2P Oid Issue - * Fix some P2P OID functions didn't raise its flag "fgIsP2pOid" issue. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 26 2011 yuche.tsai - * NULL - * Fix bug of parsing secondary device list type issue. - * - * 08 24 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Abort. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue of P2P. - * - * 08 22 2011 chinglan.wang - * NULL - * Fix invitation indication bug.. - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 05 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Add Password ID check for quick connection. - * Also modify some connection policy. - * - * 07 18 2011 chinglan.wang - * NULL - * Add IOC_P2P_GO_WSC_IE (p2p capability). - * - * 06 14 2011 yuche.tsai - * NULL - * Add compile flag to disable persistent group support. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 21 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * 1. Revise P2P power mode setting. - * 2. Revise fast-PS for concurrent - * - * 04 19 2011 wh.su - * NULL - * Adding length check before doing WPA RSN IE parsing for scan results indicate. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 07 2011 terry.wu - * [WCXRP00000619] [MT6620 Wi-Fi][Driver] fix kernel panic may occur when removing wlan - * Fix kernel panic may occur when removing wlan driver. - * - * 03 31 2011 wh.su - * [WCXRP00000614] [MT6620 Wi-Fi][Driver] P2P: Update beacon content while setting WSC IE - * Update the wsc ie to beacon content. - * - * 03 25 2011 wh.su - * NULL - * add the sample code for set power mode and get power mode. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Modify formation policy. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 wh.su - * [WCXRP00000563] [MT6620 Wi-Fi] [P2P] Set local config method while set password Id ready - * set lccal config method method while set password Id ready. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine queue_select function - * - * 03 13 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * add code for avoid compiling warning. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * support the power save related p2p setting. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify P2P's netdevice functions to support multiple H/W queues - * - * 03 03 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * for get request, the buffer length to be copied is header + payload. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * add a missed break. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 02 25 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * add the Operation channel setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the set int ioctl set index and value map to driver issue. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * modify the structure pointer for set WSC IE. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 09 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * fix typo - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 20 2010 cp.wu - * NULL - * correct typo. - * - * 08 20 2010 yuche.tsai - * NULL - * Invert Connection request provision status parameter. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 18 2010 cp.wu - * NULL - * modify pwp ioctls attribution by removing FIXED_SIZE. - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 17 2010 cp.wu - * NULL - * correct p2p net device registration with NULL pointer access issue. - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * add basic support for ioctl of getting scan result. (only address and SSID are reporterd though) - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement private io controls for Wi-Fi Direct - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include - -#include -//#include -#include "gl_p2p_ioctl.h" - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ARGV_MAX_NUM (4) - -/*For CFG80211 - wiphy parameters*/ -#define MAX_SCAN_LIST_NUM (1) -#define MAX_SCAN_IE_LEN (512) -#define LEGACY_IN_AP_MODE "legacy_wlan%d" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -/* for cfg80211 - frequency table */ -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -static struct ieee80211_channel mtk_5ghz_a_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - /* MCS1~7*/ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#if 0 -/*Bandwidth 20Mhz Only*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#else -/*Bandwidth 20/40Mhz*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#endif - -static struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_a_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_a_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_p2p_config_ops = { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) - /* Froyo */ - .change_virtual_intf = mtk_p2p_cfg80211_change_iface, // 1 st - .change_bss = mtk_p2p_cfg80211_change_bss, - .scan = mtk_p2p_cfg80211_scan, - .remain_on_channel = mtk_p2p_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_p2p_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_p2p_cfg80211_mgmt_tx, - //[AOSP] - .mgmt_tx_cancel_wait = mtk_p2p_cfg80211_mgmt_tx_cancel_wait, - .connect = mtk_p2p_cfg80211_connect, - .disconnect = mtk_p2p_cfg80211_disconnect, - .deauth = mtk_p2p_cfg80211_deauth, - .disassoc = mtk_p2p_cfg80211_disassoc, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .start_ap = mtk_p2p_cfg80211_start_ap, - .change_beacon = mtk_p2p_cfg80211_change_beacon, - .stop_ap = mtk_p2p_cfg80211_stop_ap, -#else - .add_beacon = mtk_p2p_cfg80211_add_set_beacon, - .set_beacon = mtk_p2p_cfg80211_add_set_beacon, - .del_beacon = mtk_p2p_cfg80211_stop_ap, -#endif - .set_wiphy_params = mtk_p2p_cfg80211_set_wiphy_params, - .del_station = mtk_p2p_cfg80211_del_station, - .set_channel = mtk_p2p_cfg80211_set_channel, - .set_bitrate_mask = mtk_p2p_cfg80211_set_bitrate_mask, - .mgmt_frame_register = mtk_p2p_cfg80211_mgmt_frame_register, - .get_station = mtk_p2p_cfg80211_get_station, - // ================ - .add_key = mtk_p2p_cfg80211_add_key, - .get_key = mtk_p2p_cfg80211_get_key, - .del_key = mtk_p2p_cfg80211_del_key, - .set_default_key = mtk_p2p_cfg80211_set_default_key, - .join_ibss = mtk_p2p_cfg80211_join_ibss, - .leave_ibss = mtk_p2p_cfg80211_leave_ibss, - .set_tx_power = mtk_p2p_cfg80211_set_txpower, - .get_tx_power = mtk_p2p_cfg80211_get_txpower, - .set_power_mgmt = mtk_p2p_cfg80211_set_power_mgmt, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_p2p_cfg80211_testmode_cmd, - #endif -#endif -}; - - - -/* There isn't a lot of sense in it, but you can transmit anything you like */ -static const struct ieee80211_txrx_stypes -mtk_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = { - [NL80211_IFTYPE_ADHOC] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_STATION] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_AP] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_AP_VLAN] = { - /* copy AP */ - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_DISASSOC >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_P2P_CLIENT] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_P2P_GO] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - } -}; - - - -#endif - -/* the legacy wireless extension stuff */ -static const iw_handler rP2PIwStandardHandler[] = { - [SIOCGIWPRIV - SIOCIWFIRST] = mtk_p2p_wext_get_priv, - [SIOCGIWSCAN - SIOCIWFIRST] = mtk_p2p_wext_discovery_results, - [SIOCSIWESSID - SIOCIWFIRST] = mtk_p2p_wext_reconnect, - [SIOCSIWAUTH - SIOCIWFIRST] = mtk_p2p_wext_set_auth, - [SIOCSIWENCODEEXT - SIOCIWFIRST] = mtk_p2p_wext_set_key, - [SIOCSIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_set_powermode, - [SIOCGIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_get_powermode, - [SIOCSIWTXPOW - SIOCIWFIRST] = mtk_p2p_wext_set_txpow, -#if CFG_SUPPORT_P2P_RSSI_QUERY - [SIOCGIWSTATS - SIOCIWFIRST] = mtk_p2p_wext_get_rssi, -#endif - [SIOCSIWMLME - SIOCIWFIRST] = mtk_p2p_wext_mlme_handler, -}; - -static const iw_handler rP2PIwPrivHandler[] = { - [IOC_P2P_CFG_DEVICE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_local_dev_info, - [IOC_P2P_PROVISION_COMPLETE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_provision_complete, - [IOC_P2P_START_STOP_DISCOVERY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_start_stop_discovery, - [IOC_P2P_DISCOVERY_RESULTS - SIOCIWFIRSTPRIV] = mtk_p2p_wext_discovery_results, - [IOC_P2P_WSC_BEACON_PROBE_RSP_IE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_wsc_ie, - [IOC_P2P_CONNECT_DISCONNECT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_connect_disconnect, - [IOC_P2P_PASSWORD_READY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_password_ready, -// [IOC_P2P_SET_PWR_MGMT_PARAM - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_pm_param, - [IOC_P2P_SET_INT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_int, - [IOC_P2P_GET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_get_struct, - [IOC_P2P_SET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_struct, - [IOC_P2P_GET_REQ_DEVICE_INFO - SIOCIWFIRSTPRIV] = mtk_p2p_wext_request_dev_info, -}; - - -static const struct iw_priv_args rP2PIwPrivTable[] = { - { - .cmd = IOC_P2P_CFG_DEVICE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CFG_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CFG_DEVICE" - }, - { - .cmd = IOC_P2P_START_STOP_DISCOVERY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_REQ_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_DISCOVERY" - }, - { - .cmd = IOC_P2P_DISCOVERY_RESULTS, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_RESULT" - }, - { - .cmd = IOC_P2P_WSC_BEACON_PROBE_RSP_IE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_HOSTAPD_PARAM), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_WSC_IE" - }, - { - .cmd = IOC_P2P_CONNECT_DISCONNECT, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CONNECT_DEVICE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CONNECT" - }, - { - .cmd = IOC_P2P_PASSWORD_READY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_PASSWORD_READY), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_PASSWD_RDY" - }, - { - .cmd = IOC_P2P_GET_STRUCT, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "P2P_GET_STRUCT" - }, - { - .cmd = IOC_P2P_SET_STRUCT, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_SET_STRUCT" - }, - { - .cmd = IOC_P2P_GET_REQ_DEVICE_INFO, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_DEVICE_REQ), - .name = "P2P_GET_REQDEV" - }, - { - /* SET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "set_oid" - }, - { - /* GET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "get_oid" - } -}; - -const struct iw_handler_def mtk_p2p_wext_handler_def = { - .num_standard = (__u16)sizeof(rP2PIwStandardHandler)/sizeof(iw_handler), - .num_private = (__u16)sizeof(rP2PIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args), - .standard = rP2PIwStandardHandler, - .private = rP2PIwPrivHandler, - .private_args = rP2PIwPrivTable, -#if CFG_SUPPORT_P2P_RSSI_QUERY - .get_wireless_stats = mtk_p2p_wext_get_wireless_stats, -#else - .get_wireless_stats = NULL, -#endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* for IE Searching */ -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/* Net Device Hooks */ -static int -p2pOpen( - IN struct net_device *prDev - ); - -static int -p2pStop( - IN struct net_device *prDev - ); - -static struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ); - -static void -p2pSetMulticastList( - IN struct net_device *prDev - ); - -static int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ); - -static int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ); - -static int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -unsigned int _p2p_cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -p2pSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _p2p_cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} - -static struct net_device *g_P2pPrDev; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -p2pInit( - struct net_device *prDev - ) -{ - if (!prDev) { - return -ENXIO; - } - - return 0; /* success */ -} /* end of p2pInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -p2pUninit ( - IN struct net_device *prDev - ) -{ - - - return; -} /* end of p2pUninit() */ - - - - - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops p2p_netdev_ops = { - .ndo_open = p2pOpen, - .ndo_stop = p2pStop, - .ndo_set_mac_address = p2pSetMACAddress, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = p2pSetMulticastList, -#else - .ndo_set_multicast_list = p2pSetMulticastList, -#endif - .ndo_get_stats = p2pGetStats, - .ndo_do_ioctl = p2pDoIOCTL, - .ndo_start_xmit = p2pHardStartXmit, - .ndo_select_queue = p2pSelectQueue, - .ndo_init = p2pInit, - .ndo_uninit = p2pUninit, -}; - - -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PAllocInfo ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_WIFI_VAR_T prWifiVar = NULL; - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - prWifiVar = &(prAdapter->rWifiVar); - - ASSERT(prAdapter); - ASSERT(prWifiVar); - - do { - if (prGlueInfo == NULL) { - break; - } - - if (prGlueInfo->prP2PInfo == NULL) { - /*alloc memory for p2p info */ - prGlueInfo->prP2PInfo = - kalMemAlloc(sizeof(GL_P2P_INFO_T), VIR_MEM_TYPE); - prAdapter->prP2pInfo = - kalMemAlloc(sizeof(P2P_INFO_T), VIR_MEM_TYPE); - prWifiVar->prP2PConnSettings = - kalMemAlloc(sizeof(P2P_CONNECTION_SETTINGS_T),VIR_MEM_TYPE); - prWifiVar->prP2pFsmInfo = - kalMemAlloc(sizeof(P2P_FSM_INFO_T),VIR_MEM_TYPE); - prWifiVar->prP2pSpecificBssInfo = - kalMemAlloc(sizeof(P2P_SPECIFIC_BSS_INFO_T),VIR_MEM_TYPE); - } - else { - ASSERT(prAdapter->prP2pInfo != NULL); - ASSERT(prWifiVar->prP2PConnSettings != NULL); - ASSERT(prWifiVar->prP2pFsmInfo != NULL); - ASSERT(prWifiVar->prP2pSpecificBssInfo != NULL); - } - /*MUST set memory to 0 */ - kalMemZero(prGlueInfo->prP2PInfo, sizeof(GL_P2P_INFO_T)); - kalMemZero(prAdapter->prP2pInfo, sizeof(P2P_INFO_T)); - kalMemZero(prWifiVar->prP2PConnSettings, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemZero(prWifiVar->prP2pFsmInfo, sizeof(P2P_FSM_INFO_T)); - kalMemZero(prWifiVar->prP2pSpecificBssInfo, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - } while (FALSE); - - - /* chk if alloc successful or not*/ - if (prGlueInfo->prP2PInfo && - prAdapter->prP2pInfo && - prWifiVar->prP2PConnSettings && - prWifiVar->prP2pFsmInfo && - prWifiVar->prP2pSpecificBssInfo) { - return TRUE; - } - else { - - if (prWifiVar->prP2pSpecificBssInfo) { - kalMemFree(prWifiVar->prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - prWifiVar->prP2pSpecificBssInfo = NULL; - } - if (prWifiVar->prP2pFsmInfo) { - kalMemFree(prWifiVar->prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - - prWifiVar->prP2pFsmInfo = NULL; - } - if (prWifiVar->prP2PConnSettings) { - kalMemFree(prWifiVar->prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - - prWifiVar->prP2PConnSettings = NULL; - } - if (prGlueInfo->prP2PInfo) { - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - - prGlueInfo->prP2PInfo = NULL; - } - if (prAdapter->prP2pInfo) { - kalMemFree(prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - - prAdapter->prP2pInfo = NULL; - } - return FALSE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ) -{ - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - /* free memory after p2p module is ALREADY unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - - kalMemFree(prGlueInfo->prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - /*Reomve p2p bss scan list*/ - scanRemoveAllP2pBssDesc(prGlueInfo->prAdapter); - - /*reset all pointer to NULL */ - prGlueInfo->prP2PInfo = NULL; - prGlueInfo->prAdapter->prP2pInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo = NULL; - - return TRUE; - } - else { - return FALSE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enable Channel for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pEnableChannel( - PUINT_8 pucChIdx, - UINT_8 ucChannelNum, - struct ieee80211_channel *mtk_channels, - UINT_8 mtk_channel_sz -) -{ - UINT_8 ucCurChIdx = *pucChIdx; - - while(TRUE) { - (*pucChIdx)++; - (*pucChIdx) %= mtk_channel_sz; - - if(ucChannelNum == mtk_channels[*pucChIdx].hw_value) { - mtk_channels[*pucChIdx].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - - if(*pucChIdx == ucCurChIdx) { - printk(KERN_ALERT DRV_NAME "Orphan channel [%d]\n", ucChannelNum); - break; - } - } -} - - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoRegister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - BOOLEAN ret; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_UNREGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERING; - fgDoRegister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoRegister) { - return TRUE; - } - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - - /* Here are functions which need rtnl_lock */ - wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy); - - /* net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - ret = FALSE; - } - else { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERED; - ret = TRUE; - } - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - return ret; -} - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoUnregister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_REGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERING; - fgDoUnregister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoUnregister) { - return TRUE; - } - - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - /* Here are functions which need rtnl_lock */ - - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pUpdateChannelTableByDomain( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, uc2gChIdx, uc5gChIdx; - UINT_8 ucMaxChannelNum = ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_a_channels); - UINT_8 ucNumOfChannel = ucMaxChannelNum; - RF_CHANNEL_INFO_T aucChannelList[ucMaxChannelNum]; - - uc2gChIdx = uc5gChIdx = 0; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_a_channels); i++) { - mtk_5ghz_a_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, BAND_NULL, ucMaxChannelNum, &ucNumOfChannel, aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - p2pEnableChannel(&uc2gChIdx, aucChannelList[i].ucChannelNum, mtk_2ghz_channels, ARRAY_SIZE(mtk_2ghz_channels)); - break; - - case BAND_5G: - p2pEnableChannel(&uc5gChIdx, aucChannelList[i].ucChannelNum, mtk_5ghz_a_channels, ARRAY_SIZE(mtk_5ghz_a_channels)); - break; - - default: - printk(KERN_ALERT DRV_NAME "Unknow band.\n"); - break; - - } - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for cfg80211 for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GL_HIF_INFO_T prHif = NULL; - PARAM_MAC_ADDRESS rMacAddr; -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - struct device *prDev; -#endif - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - printk("glRegisterP2P\n"); - - /*0. allocate p2pinfo */ - if(!p2PAllocInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Allocate memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* 1. allocate WIPHY */ - prGlueInfo->prP2PInfo->wdev.wiphy = wiphy_new(&mtk_p2p_config_ops, sizeof(P_GLUE_INFO_T)); - if (!prGlueInfo->prP2PInfo->wdev.wiphy) { - printk(KERN_ALERT DRV_NAME "unable to allocate wiphy for p2p\n"); - - goto err_alloc_wiphy; - } - - /* 1.1 fill wiphy parameters */ -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(prHif->cltCtx, &prDev); - if(!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for p2p\n"); - } -#else - prDev = &(prHif->func->dev); -#endif - set_wiphy_dev(prGlueInfo->prP2PInfo->wdev.wiphy, prDev); - - prGlueInfo->prP2PInfo->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_AP) - | BIT(NL80211_IFTYPE_P2P_CLIENT) - | BIT(NL80211_IFTYPE_P2P_GO) - | BIT(NL80211_IFTYPE_STATION); - - p2pUpdateChannelTableByDomain(prGlueInfo); - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - if(prAdapter->fgEnable5GBand) { - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - } - - prGlueInfo->prP2PInfo->wdev.wiphy->mgmt_stypes = mtk_cfg80211_default_mgmt_stypes; - prGlueInfo->prP2PInfo->wdev.wiphy->max_remain_on_channel_duration = 5000; - prGlueInfo->prP2PInfo->wdev.wiphy->n_cipher_suites = 5; - prGlueInfo->prP2PInfo->wdev.wiphy->cipher_suites = (const u32*)cipher_suites; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; -#else - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_HAVE_AP_SME; -#endif - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ssids = MAX_SCAN_LIST_NUM; - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ie_len = MAX_SCAN_IE_LEN; - prGlueInfo->prP2PInfo->wdev.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; -#endif - -#if 0 - /* 2. Register WIPHY */ - if(wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy) < 0) { - printk(KERN_ALERT DRV_NAME "Couldn't register wiphy device for p2p\n"); - - goto err_reg_wiphy; - } -#endif - - /* 2.1 set priv as pointer to glue structure */ - *((P_GLUE_INFO_T *) wiphy_priv(prGlueInfo->prP2PInfo->wdev.wiphy)) = prGlueInfo; - - /* 2.2 wdev initialization */ - if(fgIsApMode) { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_AP; - } else { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_P2P_CLIENT; - } - -#endif /* CFG_ENABLE_WIFI_DIRECT_CFG_80211 */ - - /* 3. allocate netdev */ - prGlueInfo->prP2PInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - if (!prGlueInfo->prP2PInfo->prDevHandler) { - printk(KERN_ALERT DRV_NAME "unable to allocate netdevice for p2p\n"); - - printk("unable to allocate netdevice for p2p\n"); - - goto err_alloc_netdev; - } - - /* 4. setup netdev */ - /* 4.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prP2PInfo->prDevHandler)) = prGlueInfo; - - /* 4.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] ^= 0x2; // change to local administrated address - memcpy(prGlueInfo->prP2PInfo->prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->prP2PInfo->prDevHandler->perm_addr, prGlueInfo->prP2PInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* 4.3 register callback functions */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) - prGlueInfo->prP2PInfo->prDevHandler->netdev_ops = &p2p_netdev_ops; -#else - prGlueInfo->prP2PInfo->prDevHandler->open = p2pOpen; - prGlueInfo->prP2PInfo->prDevHandler->stop = p2pStop; - prGlueInfo->prP2PInfo->prDevHandler->get_stats = p2pGetStats; - prGlueInfo->prP2PInfo->prDevHandler->set_multicast_list = p2pSetMulticastList; - prGlueInfo->prP2PInfo->prDevHandler->hard_start_xmit = p2pHardStartXmit; - prGlueInfo->prP2PInfo->prDevHandler->do_ioctl = p2pDoIOCTL; - prGlueInfo->prP2PInfo->prDevHandler->set_mac_address = p2pSetMACAddress; -#endif -// prGlueInfo->prP2PInfo->prDevHandler->wireless_handlers = &mtk_p2p_wext_handler_def; - - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->prP2PInfo->prDevHandler, &(prHif->func->dev)); -#endif - - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - prGlueInfo->prP2PInfo->prDevHandler->ieee80211_ptr = &(prGlueInfo->prP2PInfo->wdev); - prGlueInfo->prP2PInfo->wdev.netdev = prGlueInfo->prP2PInfo->prDevHandler; -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prGlueInfo->prP2PInfo->prDevHandler->features = NETIF_F_IP_CSUM; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#if 0 - /* 7. net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* 8. register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - goto err_reg_netdev; - } -#endif - - /* 8. set p2p net device register state */ - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - /* 9. setup running mode*/ - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo->fgIsApMode = fgIsApMode; - - /* 10. finish */ - p2pFsmInit(prAdapter); - - p2pFuncInitConnectionSettings(prAdapter, prAdapter->rWifiVar.prP2PConnSettings); - - /* Active network too early would cause HW not able to sleep. - * Defer the network active time. - */ -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - return TRUE; -#if 0 -err_reg_netdev: - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif -err_alloc_netdev: -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -// wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - -//err_reg_wiphy: - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; - -err_alloc_wiphy: -#endif - - return FALSE; -} /* end of glRegisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister Net Device for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - p2pFsmUninit(prGlueInfo->prAdapter); - - nicDeactivateNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - -#if 0 - /* Release command, mgmt and security frame belong to P2P network in - * prGlueInfo->prCmdQue - * prAdapter->rPendingCmdQueue - * prAdapter->rTxCtrl.rTxMgmtTxingQueue - * To ensure there is no pending CmdDone/TxDone handler to be executed after p2p module is removed. - */ - - /* Clear CmdQue*/ - kalClearMgmtFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - kalClearSecurityFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingTxMsdu */ - nicFreePendingTxMsduInfoByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif - -#if 0 - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#if 0 - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); -#endif - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; -#endif - - /* Free p2p memory */ -#if 1 - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#endif - return TRUE; - -} /* end of glUnregisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for stop p2p fsm immediate - * - * \param[in] prGlueInfo Pointer to struct P_GLUE_INFO_T. - * - * \retval TRUE The execution succeeds. - * \retval FALSE The execution failed. - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ) -{ -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prGlueInfo); - -// prAdapter = prGlueInfo->prAdapter; -// ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - -#if 0 - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - printk(KERN_ALERT DRV_NAME "Allocate for p2p mesasage FAILED\n"); - //return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_UNBUF); - -#endif - - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - return TRUE; -} /* end of p2pStop() */ - - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pOpen( - IN struct net_device *prDev - ) -{ -// P_GLUE_INFO_T prGlueInfo = NULL; -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prDev); - -#if 0 // Move after device name set. (mtk_p2p_set_local_dev_info) - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} /* end of p2pOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - // P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - ASSERT(prGlueP2pInfo); - - /* CFG80211 down */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueP2pInfo->prScanRequest != NULL) { - prScanRequest = prGlueP2pInfo->prScanRequest; - prGlueP2pInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(prScanRequest) { - cfg80211_scan_done(prScanRequest, TRUE); - } - -#if 0 - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); - - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - netif_tx_stop_all_queues(prDev); - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -} /* end of p2pStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, to get the network interface statistical - * information. - * - * Whenever an application needs to get statistics for the interface, this method - * is called. This happens, for example, when ifconfig or netstat -i is run. - * - * \param[in] prDev Pointer to struct net_device. - * - * \return net_device_stats buffer pointer. - */ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - -#if 0 // frog temp fix - //@FIXME - //prDev->stats.rx_packets = 0; - //prDev->stats.tx_packets = 0; - prDev->stats.tx_errors = 0; - prDev->stats.rx_errors = 0; - //prDev->stats.rx_bytes = 0; - //prDev->stats.tx_bytes = 0; - prDev->stats.multicast = 0; - - return &prDev->stats; - -#else - //prGlueInfo->prP2PInfo->rNetDevStats.rx_packets = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.rx_bytes = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.tx_bytes = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->prP2PInfo->rNetDevStats; -#endif -} /* end of p2pGetStats() */ - - - - -static void -p2pSetMulticastList ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - g_P2pPrDev = prDev; - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_MULTICAST; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - -} /* p2pSetMulticastList */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is to set multicast list and set rx mode. - * - * \param[in] prDev Pointer to struct net_device - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -void -mtk_p2p_wext_set_Multicastlist ( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 u4SetInfoLen = 0; - struct net_device *prDev = g_P2pPrDev; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - if (prDev->flags & IFF_PROMISC) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - if (prGlueInfo->prP2PInfo->u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - UINT_32 i = 0; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), ha->addr); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), prMcList->dmi_addr); - } -#endif - - DBGLOG(P2P, TRACE, ("SEt Multicast Address List\n")); - - if (i >= MAX_NUM_GROUP_ADDR) { - return; - } - wlanoidSetP2PMulticastList(prGlueInfo->prAdapter, - &(prGlueInfo->prP2PInfo->aucMCAddrList[0]), - (i * ETH_ALEN), - &u4SetInfoLen); - - } - - return; -} /* end of p2pSetMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * * \brief This function is TX entry point of NET DEVICE. - * * - * * \param[in] prSkb Pointer of the sk_buff to be sent - * * \param[in] prDev Pointer to struct net_device - * * - * * \retval NETDEV_TX_OK - on success. - * * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - * */ -/*----------------------------------------------------------------------------*/ -int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_16 u2QueueIdx = 0; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip tx\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - // mark as P2P packets - GLUE_SET_PKT_FLAG_P2P(prSkb); - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (u2QueueIdx >= CFG_MAX_TXQ_NUM) { - printk(KERN_INFO DRV_NAME"Incorrect queue index, skip this frame\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* Statistic usage. */ - prGlueInfo->prP2PInfo->rNetDevStats.tx_bytes += prSkb->len; - prGlueInfo->prP2PInfo->rNetDevStats.tx_packets++; - //prDev->stats.tx_packets++; - - return NETDEV_TX_OK; -} /* end of p2pHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, a primary SOCKET interface to configure - * the interface lively. Handle an ioctl call on one of our devices. - * Everything Linux ioctl specific is done here. Then we pass the contents - * of the ifr->data to the request message handler. - * - * \param[in] prDev Linux kernel netdevice - * - * \param[in] prIFReq Our private ioctl request structure, typed for the generic - * struct ifreq so we can use ptr to function - * - * \param[in] cmd Command ID - * - * \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. - * \retval OTHER The execution of IOCTL command is failed. - */ -/*----------------------------------------------------------------------------*/ -int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - struct iwreq *prIwReq = (struct iwreq *)prIFReq; - struct iw_request_info rIwReqInfo; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4ReadyFlag == 0) { - // adapter not ready yet - return -EINVAL; - } - - // fill rIwReqInfo - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch(i4Cmd) { - case SIOCSIWENCODEEXT: - /* Set Encryption Material after 4-way handshaking is done */ - if (prIwReq->u.encoding.pointer) { - u4ExtraSize = prIwReq->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - prIwReq->u.encoding.pointer, - prIwReq->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (prIwReq->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if(ret == 0) { - ret = mtk_p2p_wext_set_key(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - break; - - case SIOCSIWMLME: - /* IW_MLME_DISASSOC used for disconnection*/ - if (prIwReq->u.data.length != sizeof(struct iw_mlme)) { - printk(KERN_INFO "MLME buffer strange:%d\n", prIwReq->u.data.length); - ret = -EINVAL; - break; - } - - if (!prIwReq->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, prIwReq->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = mtk_p2p_wext_mlme_handler(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - case SIOCGIWPRIV: - /* This ioctl is used to list all IW privilege ioctls */ - ret = mtk_p2p_wext_get_priv(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCGIWSCAN: - ret = mtk_p2p_wext_discovery_results(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCSIWAUTH: - ret = mtk_p2p_wext_set_auth(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case IOC_P2P_CFG_DEVICE: - case IOC_P2P_PROVISION_COMPLETE: - case IOC_P2P_START_STOP_DISCOVERY: - case IOC_P2P_DISCOVERY_RESULTS: - case IOC_P2P_WSC_BEACON_PROBE_RSP_IE: - case IOC_P2P_CONNECT_DISCONNECT: - case IOC_P2P_PASSWORD_READY: - case IOC_P2P_GET_STRUCT: - case IOC_P2P_SET_STRUCT: - case IOC_P2P_GET_REQ_DEVICE_INFO: - ret = rP2PIwPrivHandler[i4Cmd - SIOCIWFIRSTPRIV](prDev, &rIwReqInfo, &(prIwReq->u), (char *)&(prIwReq->u)); - break; -#if CFG_SUPPORT_P2P_RSSI_QUERY - case SIOCGIWSTATS: - ret = mtk_p2p_wext_get_rssi(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; -#endif - default: - ret = -ENOTTY; - } - - return ret; -} /* end of p2pDoIOCTL() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To report the private supported IOCTLs table to user space. - * - * \param[in] prDev Net device requested. - * \param[out] prIfReq Pointer to ifreq structure, content is copied back to - * user space buffer in gl_iwpriv_table. - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - - ASSERT(prDev); - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rP2PIwPrivTable, sizeof(rP2PIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* end of mtk_p2p_wext_get_priv() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To indicate P2P-FSM for re-associate to the connecting device - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 For success. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_reconnect: P2P Reconnect\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_reconnect() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief MLME command handler -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_mlme *mlme = (struct iw_mlme *)extra; - P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_mlme_handler:\n")); - - switch (mlme->cmd) { - case IW_MLME_DISASSOC: - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, mlme->addr.sa_data); - - prMsgP2PConnAbt->u2ReasonCode = mlme->reason_code; - - - if (EQUAL_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prP2pBssInfo->aucOwnMacAddr)) { - DBGLOG(P2P, TRACE, ("P2P Connection Abort:\n")); - - /* 1.2 fill message */ - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - } - else { - DBGLOG(P2P, TRACE, ("P2P Connection Pause:\n")); - - /* 1.2 fill message */ - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); - - break; - - default: - return -EOPNOTSUPP; - } -#endif - return 0; -} /* end of mtk_p2p_wext_mlme_handler() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PROVISION_COMPLETE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - switch(prData->flags) { - case P2P_PROVISIONING_SUCCESS: - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - prGlueInfo->prP2PInfo->u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - - break; - - case P2P_PROVISIONING_FAIL: - - break; - - default: - return -EOPNOTSUPP; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_set_provision_complete() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_START_STOP_DISCOVERY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_IW_P2P_REQ_DEVICE_TYPE prReqDeviceType = (P_IW_P2P_REQ_DEVICE_TYPE) extra; - UINT_8 au4IeBuf[MAX_IE_LENGTH]; - P_MSG_HDR_T prMsgHdr; - P_MSG_P2P_DEVICE_DISCOVER_T prDiscoverMsg; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if(prData->flags == P2P_STOP_DISCOVERY) { - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_HDR_T)); - - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - } - else if(prData->flags == P2P_START_DISCOVERY) { - - /* retrieve IE for Probe Response */ - if(prReqDeviceType->probe_rsp_len > 0) { - if(prReqDeviceType->probe_rsp_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prReqDeviceType->probe_rsp_ie, prReqDeviceType->probe_rsp_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prReqDeviceType->probe_rsp_len; - } - else { - return -E2BIG; - } - } - - /* retrieve IE for Probe Request */ - if(prReqDeviceType->probe_req_len > 0) { - if(prReqDeviceType->probe_req_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prReqDeviceType->probe_req_ie, prReqDeviceType->probe_req_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prReqDeviceType->probe_req_len; - } - else { - return -E2BIG; - } - } - /* update IE for Probe Request */ - - if(prReqDeviceType->scan_type == P2P_LISTEN) { - /* update listening parameter */ - - /* @TODO: update prConnSettings for Probe Response IE */ - } - else { - // indicate P2P-FSM with MID_MNY_P2P_DEVICE_DISCOVERY - prDiscoverMsg = (P_MSG_P2P_DEVICE_DISCOVER_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_DEVICE_DISCOVER_T)); - - if (!prDiscoverMsg) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - prDiscoverMsg->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - prDiscoverMsg->u4DevDiscoverTime = 0; // unlimited - prDiscoverMsg->fgIsSpecificType = TRUE; - prDiscoverMsg->rTargetDeviceType.u2CategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[0])); - prDiscoverMsg->rTargetDeviceType.u2SubCategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[6]));; - COPY_MAC_ADDR(prDiscoverMsg->aucTargetDeviceID, aucNullAddr); - - /* @FIXME: parameter to be refined, where to pass IE buffer ? */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prDiscoverMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - return -EINVAL; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_start_stop_discovery() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_INVITATION_STRUCT prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - if (prIoctlInvitation->ucReinvoke == 1) { - // TODO: Set Group ID - p2pFuncSetGroupID(prAdapter, prIoctlInvitation->aucGroupID, prIoctlInvitation->aucSsid, prIoctlInvitation->u4SsidLen); - } - - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - // TODO: Do Invitation. - prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - if (!prMsgP2PInvitationReq) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationReq->aucDeviceID, prIoctlInvitation->aucDeviceID, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationReq, - MSG_SEND_METHOD_BUF); - - } - - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_request */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_abort ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_ABORT_INVITATION prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)NULL; - - UINT_8 bssid[MAC_ADDR_LEN]; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - - if (!prMsgP2PInvitationAbort) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationAbort->aucDeviceID, prIoctlInvitationAbort->dev_addr, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationAbort, - MSG_SEND_METHOD_BUF); - - } - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_abort */ - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To override p2p interface address - * - * \param[in] prDev Net device requested. - * \param[in] addr Pointer to address - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@FIXME - return eth_mac_addr(prDev, addr); -} - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher suite -* -* \param[in] prDev Net device requested. -* \param[out] -* -* \retval 0 Success. -* \retval -EINVAL Invalid parameter -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_param *prAuth = (struct iw_param *)wrqu; - - ASSERT(prDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prDev, prAuth)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: - break; - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->prP2PInfo->u4CipherPairwise = prAuth->value; - break; - case IW_AUTH_CIPHER_GROUP: - case IW_AUTH_KEY_MGMT: - case IW_AUTH_TKIP_COUNTERMEASURES: - case IW_AUTH_DROP_UNENCRYPTED: - case IW_AUTH_80211_AUTH_ALG: - case IW_AUTH_WPA_ENABLED: - case IW_AUTH_RX_UNENCRYPTED_EAPOL: - case IW_AUTH_ROAMING_CONTROL: - case IW_AUTH_PRIVACY_INVOKED: - default: - //@TODO - break; - } - - return 0; -} /* end of mtk_p2p_wext_set_auth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_key( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int ret = 0; - struct iw_encode_ext *prIWEncExt; - struct iw_point *prEnc; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - UINT_8 keyStructBuf[100]; - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - do { - if (wrqu->encoding.pointer) { - u4ExtraSize = wrqu->encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - wrqu->encoding.pointer, - wrqu->encoding.length)) { - ret = -EFAULT; - break; - } - } - else if (wrqu->encoding.length != 0) { - ret = -EINVAL; - break; - } - - prEnc = &wrqu->encoding; - prIWEncExt = (struct iw_encode_ext *) prExtraBuf; - - if (GLUE_CHK_PR3(prDev, prEnc, prExtraBuf) == TRUE) { - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - if ((prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { // Key Removal - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if(rStatus != WLAN_STATUS_SUCCESS) - ret = -EFAULT; - } - else { - if(prIWEncExt->alg == IW_ENCODE_ALG_CCMP) { - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - ((prEnc->flags & IW_ENCODE_INDEX) - 1) : 0; - if (prKey->u4KeyIndex <= 3) { - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - ret = -EFAULT; - } - } - else { - ret = -EINVAL; - } - } - else { - ret = -EINVAL; - } - } - } - else - ret = -EINVAL; - - } while(FALSE); - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - - return ret; -} /* end of mtk_p2p_wext_set_key() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("set_powermode = %d, value = %d\n", wrqu->power.disabled, wrqu->power.value); - struct iw_param *prPower = (struct iw_param*)&wrqu->power; -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - printk(KERN_DEBUG "%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief get the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("mtk_p2p_wext_get_powermode\n"); - //wrqu->power.disabled = 0; - //wrqu->power.value = 1; - - struct iw_param *prPower = (struct iw_param*)&wrqu->power; - PARAM_POWER_MODE ePowerMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - - -#if 1 - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CFG_DEVICE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_CFG_DEVICE_TYPE prDeviceCfg = (P_IW_P2P_CFG_DEVICE_TYPE) extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - //P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - // update connection settings for P2P-FSM - // 1. update SSID - if(prDeviceCfg->ssid_len > ELEM_MAX_LEN_SSID) { - prConnSettings->ucSSIDLen = ELEM_MAX_LEN_SSID; - } - else { - prConnSettings->ucSSIDLen = prDeviceCfg->ssid_len; - } - - if(copy_from_user(prConnSettings->aucSSID, prDeviceCfg->ssid, prConnSettings->ucSSIDLen)) { - return -EFAULT; - } - - // 2. update device type (WPS IE) - kalMemCopy(&(prConnSettings->rPrimaryDevTypeBE), &(prDeviceCfg->pri_device_type), sizeof(DEVICE_TYPE_T)); -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - kalMemCopy(&(prConnSettings->arSecondaryDevTypeBE[0]), &(prDeviceCfg->snd_device_type), sizeof(DEVICE_TYPE_T)); -#endif - - // 3. update device name - if(prDeviceCfg->device_name_len > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prConnSettings->ucDevNameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - else { - prConnSettings->ucDevNameLen = prDeviceCfg->device_name_len; - } - if(copy_from_user(prConnSettings->aucDevName, prDeviceCfg->device_name, prConnSettings->ucDevNameLen)) { - return -EFAULT; - } - - // 4. update GO intent - prConnSettings->ucGoIntent = prDeviceCfg->intend; - - - /* Preferred channel bandwidth */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - -#if 0 - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_set_local_dev_info() */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief I/O Control handler for both - * IOC_P2P_START_STOP_DISCOVERY & SIOCGIWSCAN - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 Success. - * \retval -EFAULT Setting parameters to driver fail. - * \retval -EOPNOTSUPP Key size not supported. - * - * \note - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_event iwe; - char *current_ev = extra; - UINT_32 i; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - P_P2P_INFO_T prP2PInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2PInfo = prAdapter->prP2pInfo; - - for(i = 0 ; i < prP2PInfo->u4DeviceNum ; i++) { - prTargetResult = &prP2PInfo->arP2pDiscoverResult[i]; - - /* SIOCGIWAP */ - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, - prTargetResult->aucInterfaceAddr, - 6); - - current_ev = iwe_stream_add_event(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, IW_EV_ADDR_LEN); - - - /* SIOCGIWESSID */ - iwe.cmd = SIOCGIWESSID; - iwe.u.data.flags = 1; - iwe.u.data.length = prTargetResult->u2NameLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, prTargetResult->aucName); - - /* IWEVGENIE for WPA IE */ - if(prTargetResult->u2IELength <= 600 && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#if CFG_SUPPORT_WPS - - /* IWEVGENIE for WPS IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPSIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#endif - - /* IWEVGENIE for RSN IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - - /* IOC_P2P_GO_WSC_IE */ -#if 1 - /* device capability */ - if (1) { - UINT_8 data[40]; - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 8 + sizeof("p2p_cap="); - - snprintf(data, iwe.u.data.length, "p2p_cap=%02x%02x%02x%02x%c", - prTargetResult->ucDeviceCapabilityBitmap, prTargetResult->ucGroupCapabilityBitmap, - (UINT_8)prTargetResult->u2ConfigMethod, (UINT_8)(prTargetResult->u2ConfigMethod >> 8), '\0' ); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - - //printk("%s\n", data); - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 12 + sizeof("p2p_dev_type="); - - snprintf(data, iwe.u.data.length, "p2p_dev_type=%02x%02x%02x%02x%02x%02x%c", - (UINT_8)prTargetResult->rPriDevType.u2CategoryID,(UINT_8)prTargetResult->rPriDevType.u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[0].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[0].u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[1].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[1].u2SubCategoryID, - '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 17 + sizeof("p2p_grp_bssid="); - - snprintf(data, iwe.u.data.length, "p2p_grp_bssid="MACSTR"%c", - MAC2STR(prTargetResult->aucBSSID), '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - } -#endif - } - - /* Length of data */ - wrqu->data.length = (current_ev - extra); - wrqu->data.flags = 0; - - return 0; -} /* end of mtk_p2p_wext_discovery_results() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_WSC_BEACON_PROBE_RSP_IE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_HOSTAPD_PARAM prHostapdParam = (P_IW_P2P_HOSTAPD_PARAM)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (prHostapdParam->len > 0) { - if (prHostapdParam->len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[0], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[0] = prHostapdParam->len; - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prHostapdParam->len; - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //@TODO: send message to P2P-FSM - - return 0; -} /* end of mtk_p2p_wext_wsc_ie() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CONNECT_DISCONNECT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; -// P_IW_P2P_CONNECT_DEVICE prConnectDevice = (P_IW_P2P_CONNECT_DEVICE)extra; -// P_MSG_HDR_T prMsgHdr; -// P_MSG_P2P_CONNECTION_REQUEST_T prMsgP2PConnReq; -// P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt; -// UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - if (prData->flags == P2P_CONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_REQ - prMsgP2PConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (!prMsgP2PConnReq) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnReq, - MSG_SEND_METHOD_BUF); -#endif - } - else if(prData->flags == P2P_DISCONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_ABORT - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prConnectDevice->sta_addr); - - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); -#endif - } - else { - return -EINVAL; - } - - return 0; -} /* end of mtk_p2p_wext_connect_disconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PASSWORD_READY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_PASSWORD_READY prPasswordReady = (P_IW_P2P_PASSWORD_READY)extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* retrieve IE for Probe Request */ - if (prPasswordReady->probe_req_len > 0) { - if (prPasswordReady->probe_req_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prPasswordReady->probe_req_ie, prPasswordReady->probe_req_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prPasswordReady->probe_req_len; - - /* retrieve IE for Probe Response */ - if (prPasswordReady->probe_rsp_len > 0) { - if (prPasswordReady->probe_rsp_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prPasswordReady->probe_rsp_ie, prPasswordReady->probe_rsp_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prPasswordReady->probe_rsp_len; - - switch (prPasswordReady->active_config_method) { - case 1: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_PUSH_BUTTON; - break; - case 2: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_KEYPAD; - break; - case 3: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_DISPLAY; - break; - default: - break; - } - - prConnSettings->fgIsPasswordIDRdy = TRUE; - return 0; -} /* end of mtk_p2p_wext_password_ready() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_REQ_DEVICE_INFO) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_DEVICE_REQ prDeviceReq = (P_IW_P2P_DEVICE_REQ)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_DEVICE_REQ); - - // copy to upper-layer supplied buffer - kalMemCopy(prDeviceReq->name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - prDeviceReq->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prDeviceReq->name[prDeviceReq->name_len]='\0'; - COPY_MAC_ADDR(prDeviceReq->device_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prDeviceReq->device_type = prGlueInfo->prP2PInfo->ucConnReqDevType; - prDeviceReq->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prDeviceReq->active_config_method = prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod; - - return 0; -} /* end of mtk_p2p_wext_request_dev_info() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_INDICATE prInvIndicate = (P_IW_P2P_IOCTL_INVITATION_INDICATE)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_INDICATE); - - // copy to upper-layer supplied buffer - kalMemCopy(prInvIndicate->dev_name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - kalMemCopy(prInvIndicate->group_bssid, prGlueInfo->prP2PInfo->rConnReqGroupAddr, MAC_ADDR_LEN); - prInvIndicate->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prInvIndicate->dev_name[prInvIndicate->name_len]='\0'; - COPY_MAC_ADDR(prInvIndicate->dev_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prInvIndicate->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prInvIndicate->operating_channel = prGlueInfo->prP2PInfo->ucOperatingChnl; - prInvIndicate->invitation_type = prGlueInfo->prP2PInfo->ucInvitationType; - - return 0; -} /* end of mtk_p2p_wext_invitation_indicate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_STATUS prInvStatus = (P_IW_P2P_IOCTL_INVITATION_STATUS)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_STATUS); - - // copy to upper-layer supplied buffer - prInvStatus->status_code = prGlueInfo->prP2PInfo->u4InvStatus; - - return 0; -} /* end of mtk_p2p_wext_invitation_status() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device found -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval TRUE Success. -* \retval FALSE Failure -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_FND"); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PDVCFND event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return FALSE; -} /* end of kalP2PIndicateFound() */ - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pNetworkAddress, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_formation ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; -// struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_START_FORMATION prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - } while (FALSE); - - return i4Status; - -} -/* mtk_p2p_wext_start_formation */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 index; - INT_32 value; - PUINT_32 pu4IntBuf; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - UINT_32 u4Leng; - - ASSERT(prDev); - ASSERT(wrqu); - - //printk("mtk_p2p_wext_set_int\n"); - pu4IntBuf = (PUINT_32) extra; - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - - u4SubCmd = (UINT_32) wrqu->mode; - index = pu4IntBuf[1]; - value = pu4IntBuf[2]; - - printk("set parameter, u4SubCmd=%d idx=%d value=%lu\n", (INT_16)u4SubCmd, (INT_16)index, value); - - switch (u4SubCmd) { - case PRIV_CMD_INT_P2P_SET: - switch (index) { - case 0: /* Listen CH */ - { - UINT_8 ucSuggestChnl = 0; - - prP2pConnSettings->ucListenChnl = value; - - // 20110920 - frog: User configurations are placed in ConnSettings. - if (rlmFuncFindAvailableChannel(prGlueInfo->prAdapter, value, &ucSuggestChnl, TRUE, TRUE)) { - prP2pSpecificBssInfo->ucListenChannel = value; - } - else { - prP2pSpecificBssInfo->ucListenChannel = ucSuggestChnl; - } - - - break; - } - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - //prP2pConnSettings->u2LocalConfigMethod; - break; - case 102: /* Sigma P2p reset */ - kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - - default: - break; - } - break; - default: - break; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&prGlueInfo->prP2PInfo->aucOidBuf[0], - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEND_SD_RESPONSE: - status = mtk_p2p_wext_send_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_SEND_SD_REQUEST: - status = mtk_p2p_wext_send_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_TERMINATE_SD_PHASE: - status = mtk_p2p_wext_terminate_service_discovery_phase(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_INVITATION_STRUCT)) { -// status = mtk_p2p_wext_invitation_request(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_INVITATION_ABORT: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_ABORT_INVITATION)) { -// status = mtk_p2p_wext_invitation_abort(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_START_FORMATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_START_FORMATION)) { - status = mtk_p2p_wext_start_formation(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_set_sec_check_request(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_set_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - break; - default: - status = -EOPNOTSUPP; - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (!prDev || !wrqu) { - printk(KERN_INFO DRV_NAME "%s(): invalid param(0x%p, 0x%p)\n", - __func__, - prDev, - wrqu); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_GET_SD_REQUEST: - status = mtk_p2p_wext_get_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_GET_SD_RESPONSE: - status = mtk_p2p_wext_get_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION_INDICATE: - { - status = mtk_p2p_wext_invitation_indicate(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_INVITATION_STATUS: - { - status = mtk_p2p_wext_invitation_status(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - UINT_8 ucMaxChannelNum = 50; - PUINT_8 pucChnlList = (PUINT_8)prP2PReq->aucBuffer; - - kalGetChnlList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - prP2PReq->outBufferLength = NumOfChannel; - - for (i=0; iaucBuffer[i] = aucChannelList[i].ucChannelNum; -#else - *pucChnlList = aucChannelList[i].ucChannelNum; - pucChnlList++; -#endif - } - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - NumOfChannel + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - - case P2P_CMD_ID_GET_OP_CH: - { - prP2PReq->inBufferLength = 4; - - status = wlanoidQueryP2pOpChannel(prGlueInfo->prAdapter, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - &prP2PReq->outBufferLength); - - if (status == 0) { // WLAN_STATUS_SUCCESS - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - else { - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - break; - } - - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_get_sec_check_response(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_get_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - - - /* Copy queried data to user. */ - if (status == 0) { // WLAN_STATUS_SUCCESS - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - else { - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - break; - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery request frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery response frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery request frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery response frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSecCheckRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetSecCheckResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - prP2PReq->aucBuffer, - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* terminating service discovery phase -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2PTerminateSDPhase, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - //P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNoaParam, - prNoaParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T),//prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; -// P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetOppPsParam, - prOppPsParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T), //prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -int -mtk_p2p_wext_set_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - UINT_32 u4SetInfoLen; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSupplicantVersion, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} -/* mtk_p2p_wext_set_p2p_version */ - -int -mtk_p2p_wext_get_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pVersion, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} /* mtk_p2p_wext_get_p2p_version */ - -#if CFG_SUPPORT_P2P_RSSI_QUERY - -int -mtk_p2p_wext_get_rssi ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rssi; - struct iw_statistics *pStats = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - rStatus = WLAN_STATUS_FAILURE; - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &u4QueryInfoLen); - - u2BufferSize = prData->length; - - if (u2BufferSize < sizeof(struct iw_statistics)) { - return -E2BIG; - } - - - if (copy_to_user(prData->pointer, pStats, sizeof(struct iw_statistics))) { - rStatus = WLAN_STATUS_FAILURE; - } - - -stat_out: - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - -} /* mtk_p2p_wext_get_rssi */ - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &bufLen); - -stat_out: - return pStats; -} /* mtk_p2p_wext_get_wireless_stats */ - - -#endif /* CFG_SUPPORT_P2P_RSSI_QUERY */ - - -int -mtk_p2p_wext_set_txpow ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; -#endif - int i4Ret = 0; - - ASSERT(prDev); - ASSERT(prTxPow); - - do { - if ((!prDev) || (!prTxPow)) { - i4Ret = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - - if (!prGlueInfo) { - i4Ret = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; -#if 0 - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(0); - return -ENOMEM; - } - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - if (prTxPow->disabled) { - /* Dissolve. */ - prMsgFuncSwitch->fgIsFuncOn = FALSE; - } - else { - - /* Re-enable function. */ - prMsgFuncSwitch->fgIsFuncOn = TRUE; - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - } while (FALSE); - - return i4Ret; -} /* mtk_p2p_wext_set_txpow */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_cfg80211.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_cfg80211.c deleted file mode 100755 index f22f6b505e8d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_cfg80211.c +++ /dev/null @@ -1,2544 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_p2p_cfg80211.c $ -** -** 01 30 2013 yuche.tsai -** [ALPS00455459] [GN_WIFI]??wifi direct??????????? -** Fix possible race condition under GO mode. -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 09 05 2012 wh.su -** [ALPS00351547] [6577JB][WiFi direct]The 3rd device fail to establish p2p connection with GO sometimes -** sync with the ICS code. -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 08 21 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** Fix p2p bug find on ALPS.JB trunk. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#include -#include -#include - -#include "precomp.h" -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - P2P_PARAM_KEY_T rKey; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rKey, sizeof(P2P_PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - if(mac_addr) { - memcpy(rKey.arBSSID, mac_addr, ETH_ALEN); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - else { - rKey.u4KeyIndex |= BIT(31); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - rKey.u4KeyIndex |= BIT(31); //???? - } - if(params->key) - { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - } - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - PARAM_REMOVE_KEY_T prRemoveKey; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&prRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - memcpy(prRemoveKey.arBSSID, mac_addr, PARAM_MAC_ADDR_LEN); - prRemoveKey.u4KeyIndex = key_index; - prRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - &prRemoveKey, - prRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int -mtk_p2p_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet -/* for AOSP wpa_supplicant2.0 return 0 - return -EINVAL; -*/ - return 0; -} - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - INT_32 i4RetRslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P2P_STATION_INFO_T rP2pStaInfo; - - ASSERT(wiphy); - - do { - if ((wiphy == NULL) || - (ndev == NULL) || - (sinfo == NULL) || - (mac == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_get_station\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - sinfo->filled = 0; - - /* Get station information. */ - /* 1. Inactive time? */ - p2pFuncGetStationInfo(prGlueInfo->prAdapter, - mac, - &rP2pStaInfo); - - /* Inactive time. */ - sinfo->filled |= STATION_INFO_INACTIVE_TIME; - sinfo->inactive_time = rP2pStaInfo.u4InactiveTime; - sinfo->generation = prP2pGlueInfo->i4Generation; - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} - -int -mtk_p2p_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prMsgScanRequest = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - UINT_32 u4MsgSize = 0, u4Idx = 0; - INT_32 i4RetRslt = -EINVAL; - P_RF_CHANNEL_INFO_T prRfChannelInfo = (P_RF_CHANNEL_INFO_T)NULL; - P_P2P_SSID_STRUCT_T prSsidStruct = (P_P2P_SSID_STRUCT_T)NULL; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_ssid *prSsid = NULL; - - /* [---------Channel---------] [---------SSID---------][---------IE---------] */ - - - do { - if ((wiphy == NULL) || (request == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (prP2pGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_scan.\n")); - - - if (prP2pGlueInfo->prScanRequest != NULL) { - /* There have been a scan request on-going processing. */ - DBGLOG(P2P, TRACE, ("There have been a scan request on-going processing.\n")); - break; - } - - prP2pGlueInfo->prScanRequest = request; - - /* Should find out why the n_channels so many? */ - if (request->n_channels > MAXIMUM_OPERATION_CHANNEL_LIST) { - request->n_channels = MAXIMUM_OPERATION_CHANNEL_LIST; - DBGLOG(P2P, TRACE, ("Channel list exceed the maximun support.\n")); - } - - u4MsgSize = sizeof(MSG_P2P_SCAN_REQUEST_T) + - (request->n_channels * sizeof(RF_CHANNEL_INFO_T)) + - (request->n_ssids * sizeof(PARAM_SSID_T)) + - request->ie_len; - - prMsgScanRequest = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, u4MsgSize); - - if (prMsgScanRequest == NULL) { - ASSERT(FALSE); - i4RetRslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("Generating scan request message.\n")); - - prMsgScanRequest->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - - - - DBGLOG(P2P, TRACE, ("Requesting channel number:%d.\n", request->n_channels)); - - for (u4Idx = 0; u4Idx < request->n_channels; u4Idx++) { - /* Translate Freq from MHz to channel number. */ - prRfChannelInfo = &(prMsgScanRequest->arChannelListInfo[u4Idx]); - prChannel = request->channels[u4Idx]; - - prRfChannelInfo->ucChannelNum = nicFreq2ChannelNum(prChannel->center_freq * 1000); - DBGLOG(P2P, TRACE, ("Scanning Channel:%d, freq: %d\n", - prRfChannelInfo->ucChannelNum, - prChannel->center_freq)); - switch (prChannel->band) { - case IEEE80211_BAND_2GHZ: - prRfChannelInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChannelInfo->eBand = BAND_5G; - break; - default: - DBGLOG(P2P, TRACE, ("UNKNOWN Band info from supplicant\n")); - prRfChannelInfo->eBand = BAND_NULL; - break; - } - - /* Iteration. */ - prRfChannelInfo++; - } - prMsgScanRequest->u4NumChannel = request->n_channels; - - DBGLOG(P2P, TRACE, ("Finish channel list.\n")); - - /* SSID */ - prSsid = request->ssids; - prSsidStruct = (P_P2P_SSID_STRUCT_T)prRfChannelInfo; - if (request->n_ssids) { - ASSERT(prSsidStruct == &(prMsgScanRequest->arChannelListInfo[u4Idx])); - prMsgScanRequest->prSSID = prSsidStruct; - } - - for (u4Idx = 0; u4Idx < request->n_ssids; u4Idx++) { - COPY_SSID(prSsidStruct->aucSsid, - prSsidStruct->ucSsidLen, - request->ssids->ssid, - request->ssids->ssid_len); - - prSsidStruct++; - prSsid++; - } - - prMsgScanRequest->i4SsidNum = request->n_ssids; - - DBGLOG(P2P, TRACE, ("Finish SSID list:%d.\n", request->n_ssids)); - - /* IE BUFFERS */ - prMsgScanRequest->pucIEBuf = (PUINT_8)prSsidStruct; - if (request->ie_len) { - kalMemCopy(prMsgScanRequest->pucIEBuf, request->ie, request->ie_len); - prMsgScanRequest->u4IELen = request->ie_len; - } - - DBGLOG(P2P, TRACE, ("Finish IE Buffer.\n")); - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgScanRequest, - MSG_SEND_METHOD_BUF); - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} /* mtk_p2p_cfg80211_scan */ - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - - - do { - if (wiphy == NULL) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_wiphy_params\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if (changed & WIPHY_PARAM_RETRY_SHORT) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY short param is changed.\n")); - } - - if (changed & WIPHY_PARAM_RETRY_LONG) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY long param is changed.\n")); - } - - - if (changed & WIPHY_PARAM_FRAG_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY fragmentation threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_RTS_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY RTS threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_COVERAGE_CLASS) { - // TODO: - DBGLOG(P2P, TRACE, ("The coverage class is changed???\n")); - } - - i4Rslt = 0; - } while (FALSE); - - - - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_wiphy_params */ - - - -int -mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - // TODO: for JB. - - return -EINVAL; -} - -//&&&&&&&&&&&&&&&&&&&&&&&&&& Add for ICS Wi-Fi Direct Support. &&&&&&&&&&&&&&&&&&&&&&& -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -int -mtk_p2p_cfg80211_start_ap ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; -// P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - - do { - if ((wiphy == NULL) || (settings == NULL)) { - break; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_start_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + settings->beacon.head_len + settings->beacon.tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (settings->beacon.head_len != 0) { - kalMemCopy(pucBuffer, settings->beacon.head, settings->beacon.head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = settings->beacon.head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)settings->beacon.head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (settings->beacon.tail_len != 0) { - UINT_8 ucLen = settings->beacon.tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, settings->beacon.tail, settings->beacon.tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - - prP2pStartAPMsg->fgIsPrivacy = settings->privacy; - - prP2pStartAPMsg->u4BcnInterval = settings->beacon_interval; - - prP2pStartAPMsg->u4DtimPeriod = settings->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = settings->hidden_ssid; - - COPY_SSID(prP2pStartAPMsg->aucSsid, - prP2pStartAPMsg->u2SsidLen, - settings->ssid, - settings->ssid_len); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; - - -///////////////////////// - /** - * struct cfg80211_ap_settings - AP configuration - * - * Used to configure an AP interface. - * - * @beacon: beacon data - * @beacon_interval: beacon interval - * @dtim_period: DTIM period - * @ssid: SSID to be used in the BSS (note: may be %NULL if not provided from - * user space) - * @ssid_len: length of @ssid - * @hidden_ssid: whether to hide the SSID in Beacon/Probe Response frames - * @crypto: crypto settings - * @privacy: the BSS uses privacy - * @auth_type: Authentication type (algorithm) - * @inactivity_timeout: time in seconds to determine station's inactivity. - */ -// struct cfg80211_ap_settings { -// struct cfg80211_beacon_data beacon; -// -// int beacon_interval, dtim_period; -// const u8 *ssid; -// size_t ssid_len; -// enum nl80211_hidden_ssid hidden_ssid; -// struct cfg80211_crypto_settings crypto; -// bool privacy; -// enum nl80211_auth_type auth_type; -// int inactivity_timeout; -// }; -//////////////////// - - return i4Rslt; -} /* mtk_p2p_cfg80211_start_ap */ - - -int -mtk_p2p_cfg80211_change_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_change_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - -//////////////////////////// -/** - * struct cfg80211_beacon_data - beacon data - * @head: head portion of beacon (before TIM IE) - * or %NULL if not changed - * @tail: tail portion of beacon (after TIM IE) - * or %NULL if not changed - * @head_len: length of @head - * @tail_len: length of @tail - * @beacon_ies: extra information element(s) to add into Beacon frames or %NULL - * @beacon_ies_len: length of beacon_ies in octets - * @proberesp_ies: extra information element(s) to add into Probe Response - * frames or %NULL - * @proberesp_ies_len: length of proberesp_ies in octets - * @assocresp_ies: extra information element(s) to add into (Re)Association - * Response frames or %NULL - * @assocresp_ies_len: length of assocresp_ies in octets - * @probe_resp_len: length of probe response template (@probe_resp) - * @probe_resp: probe response template (AP mode only) - */ -//struct cfg80211_beacon_data { -// const u8 *head, *tail; -// const u8 *beacon_ies; -// const u8 *proberesp_ies; -// const u8 *assocresp_ies; -// const u8 *probe_resp; - -// size_t head_len, tail_len; -// size_t beacon_ies_len; -// size_t proberesp_ies_len; -// size_t assocresp_ies_len; -// size_t probe_resp_len; -//}; - -//////////////////////////// - - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_beacon */ - -#else -int -mtk_p2p_cfg80211_add_set_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_add_set_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - kalMemZero(prP2pBcnUpdateMsg, (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - /* the len of ssid may be random value and will cause memcopy error if we don't call kalMemZero.*/ - kalMemZero(prP2pStartAPMsg, sizeof(MSG_P2P_START_AP_T)); - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - - prP2pStartAPMsg->fgIsPrivacy = FALSE; - - prP2pStartAPMsg->u4BcnInterval = info->interval; - - prP2pStartAPMsg->u4DtimPeriod = info->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = ENUM_HIDDEN_SSID_NONE; - -#if 0 - if (info->head_len > OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)) { - P_WLAN_BEACON_FRAME_T prWlanBcnFrame = info->head; - - prSsidIE = (P_IE_HDR_T)p2pFuncGetSpecIE(prGlueInfo->prAdapter, - (PUINT_8)prWlanBcnFrame->aucInfoElem, - (info->head_len - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)), - ELEM_ID_SSID, - NULL); - - kalMemCopy(prP2pStartAPMsg->aucSsid, SSID_IE(prSsidIE)->aucSSID, IE_LEN(prSsidIE)); - - } -#endif - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; -} -/* mtk_p2p_cfg80211_add_set_beacon */ -#endif - -int -mtk_p2p_cfg80211_stop_ap ( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prP2pSwitchMode = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if (wiphy == NULL) { - break; - } - - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_stop_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // Switch OP MOde. - prP2pSwitchMode = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prP2pSwitchMode == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pSwitchMode->rMsgHdr.eMsgId = MID_MNY_P2P_STOP_AP; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pSwitchMode, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} /* mtk_p2p_cfg80211_stop_ap */ - -// TODO: -int -mtk_p2p_cfg80211_deauth ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_deauth_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_deauth.\n")); - - return -EINVAL; -} /* mtk_p2p_cfg80211_deauth */ - - -// TODO: -int -mtk_p2p_cfg80211_disassoc ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_disassoc_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_disassoc.\n")); - - // not implemented yet - - return -EINVAL; -} /* mtk_p2p_cfg80211_disassoc */ - -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) -int -mtk_p2p_cfg80211_remain_on_channel2 ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie, - bool fgNeedIndSupp - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prMsgChnlReq = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL) || - (cookie == NULL)) { - break; - } - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - //*cookie = prGlueP2pInfo->u8Cookie++; - - prMsgChnlReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_REQUEST_T)); - - if (prMsgChnlReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - //DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_remain_on_channel\n")); - - prMsgChnlReq->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_REQ; - prMsgChnlReq->u8Cookie = *cookie; - prMsgChnlReq->u4Duration = duration; - prMsgChnlReq->fgNeedIndSupp = fgNeedIndSupp; - - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &prMsgChnlReq->rChannelInfo, - &prMsgChnlReq->eChnlSco); - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} -/* mtk_p2p_cfg80211_remain_on_channel */ - -int -mtk_p2p_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - int ret = -1, atom; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - *cookie = prGlueP2pInfo->u8Cookie++; - - if(atomic_read(&prGlueInfo->rMgmtTxAto) == 1) { - ret = wait_for_completion_timeout(&prGlueInfo->rMgmtTxComp, 500*HZ/1000); - } - - ret = mtk_p2p_cfg80211_remain_on_channel2(wiphy, dev, chan, channel_type, duration, cookie, true); - - return ret; -} -#else -int -mtk_p2p_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prMsgChnlReq = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL) || - (cookie == NULL)) { - break; - } - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - prMsgChnlReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_REQUEST_T)); - - if (prMsgChnlReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_remain_on_channel\n")); - - prMsgChnlReq->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_REQ; - prMsgChnlReq->u8Cookie = *cookie; - prMsgChnlReq->u4Duration = duration; - - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &prMsgChnlReq->rChannelInfo, - &prMsgChnlReq->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} -/* mtk_p2p_cfg80211_remain_on_channel */ -#endif - -int -mtk_p2p_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - u64 cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prMsgChnlAbort = (P_MSG_P2P_CHNL_ABORT_T)NULL; - - do { - if ((wiphy == NULL) || (dev == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prMsgChnlAbort = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_ABORT_T)); - - if (prMsgChnlAbort == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_cancel_remain_on_channel\n")); - - prMsgChnlAbort->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_ABORT; - prMsgChnlAbort->u8Cookie = cookie; - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlAbort, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_cancel_remain_on_channel */ - -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) -int -mtk_p2p_cfg80211_mgmt_tx ( - struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, - size_t len, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - bool no_cck, - bool dont_wait_for_ack, -#endif - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - INT_32 channel_time= 0; - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - P_MSDU_INFO_T prMgmtFrame = (P_MSDU_INFO_T)NULL; - PUINT_8 pucFrameBuf = (PUINT_8)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - RF_CHANNEL_INFO_T ChnlInfo; - ENUM_CHNL_EXT_T ChnlSco; - do { - if ((wiphy == NULL) || - (buf == NULL) || - (len == 0) || - (dev == NULL) || - (cookie == NULL)) { - break; - } - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &ChnlInfo, - &ChnlSco); - if (prChnlReqInfo->prMsgTxReq!=NULL){ - i4Rslt = -ENOMEM; - break; - } - channel_time=wait; - //buffer mgmt frame into driver - *cookie = prGlueP2pInfo->u8Cookie++; - - /* Channel & Channel Type & Wait time are ignored. */ - prMsgTxReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_MGMT_TX_REQUEST_T)); - - if (prMsgTxReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->fgNoneCckRate = FALSE; - prMsgTxReq->fgIsWaitRsp = TRUE; - - prMgmtFrame = cnmMgtPktAlloc(prGlueInfo->prAdapter, (UINT_32)(len + MAC_TX_RESERVED_FIELD)); - - if ((prMsgTxReq->prMgmtMsduInfo = prMgmtFrame) == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->u8Cookie = *cookie; - prMsgTxReq->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_TX; - - pucFrameBuf = (PUINT_8)((UINT_32)prMgmtFrame->prPacket + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucFrameBuf, buf, len); - - prMgmtFrame->u2FrameLength = len; - - if (wait==0&&prChnlReqInfo->ucReqChnlNum==ChnlInfo.ucChannelNum&& - prChnlReqInfo->eBand==ChnlInfo.eBand&& - prChnlReqInfo->eChnlSco==ChnlSco){ - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_BUF); - i4Rslt=0; - break; - } - - prChnlReqInfo->prMsgTxReq=prMsgTxReq; - - atomic_set(&prGlueInfo->rMgmtTxAto, 1); - i4Rslt=mtk_p2p_cfg80211_remain_on_channel2(wiphy,dev,chan,channel_type,channel_time, cookie, false); - } while (FALSE); - channel_time=0; - return i4Rslt; -} /* mtk_p2p_cfg80211_mgmt_tx */ -#else -int -mtk_p2p_cfg80211_mgmt_tx ( - struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, - size_t len, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - bool no_cck, - bool dont_wait_for_ack, -#endif - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - P_MSDU_INFO_T prMgmtFrame = (P_MSDU_INFO_T)NULL; - PUINT_8 pucFrameBuf = (PUINT_8)NULL; - - do { - if ((wiphy == NULL) || - (buf == NULL) || - (len == 0) || - (dev == NULL) || - (cookie == NULL)) { - break; - } - - //DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_mgmt_tx\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - /* Channel & Channel Type & Wait time are ignored. */ - prMsgTxReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_MGMT_TX_REQUEST_T)); - - if (prMsgTxReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->fgNoneCckRate = FALSE; - prMsgTxReq->fgIsWaitRsp = TRUE; - - prMgmtFrame = cnmMgtPktAlloc(prGlueInfo->prAdapter, (UINT_32)(len + MAC_TX_RESERVED_FIELD)); - - if ((prMsgTxReq->prMgmtMsduInfo = prMgmtFrame) == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->u8Cookie = *cookie; - prMsgTxReq->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_TX; - - pucFrameBuf = (PUINT_8)((UINT_32)prMgmtFrame->prPacket + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucFrameBuf, buf, len); - - prMgmtFrame->u2FrameLength = len; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - if ((i4Rslt != 0) && (prMsgTxReq != NULL)) { - if (prMsgTxReq->prMgmtMsduInfo != NULL) { - cnmMgtPktFree(prGlueInfo->prAdapter, prMsgTxReq->prMgmtMsduInfo); - } - - cnmMemFree(prGlueInfo->prAdapter, prMsgTxReq); - } - - return i4Rslt; -} /* mtk_p2p_cfg80211_mgmt_tx */ -#endif - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel the wait time - * from transmitting a management frame on another channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - return 0; -// return -EINVAL; -} - - -int -mtk_p2p_cfg80211_change_bss ( - struct wiphy *wiphy, - struct net_device *dev, - struct bss_parameters *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - switch (params->use_cts_prot) { - case -1: - DBGLOG(P2P, TRACE, ("CTS protection no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("CTS protection disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("CTS protection enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("CTS protection unknown\n")); - break; - } - - - - switch (params->use_short_preamble) { - case -1: - DBGLOG(P2P, TRACE, ("Short prreamble no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("Short prreamble disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("Short prreamble enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("Short prreamble unknown\n")); - break; - } - - - -#if 0 - // not implemented yet - p2pFuncChangeBssParam(prGlueInfo->prAdapter, - prBssInfo->fgIsProtection, - prBssInfo->fgIsShortPreambleAllowed, - prBssInfo->fgUseShortSlotTime, - // Basic rates - // basic rates len - // ap isolate - // ht opmode. - ); -#else - i4Rslt = 0; -#endif - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_bss */ - - - -int -mtk_p2p_cfg80211_del_station ( - struct wiphy *wiphy, - struct net_device *dev, - u8 *mac - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBcMac[] = BC_MAC_ADDR; - - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - if (mac == NULL) { - mac = aucBcMac; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_del_station.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - //prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnectMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnectMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - COPY_MAC_ADDR(prDisconnectMsg->aucTargetID, mac); - prDisconnectMsg->u2ReasonCode = REASON_CODE_UNSPECIFIED; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnectMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_del_station */ - - -int -mtk_p2p_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (sme == NULL)) { - break; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_connect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, (sizeof(MSG_P2P_CONNECTION_REQUEST_T) + sme->ie_len)); - - if (prConnReqMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prConnReqMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - COPY_SSID(prConnReqMsg->rSsid.aucSsid, - prConnReqMsg->rSsid.ucSsidLen, - sme->ssid, - sme->ssid_len); - - COPY_MAC_ADDR(prConnReqMsg->aucBssid, sme->bssid); - - DBGLOG(P2P, TRACE, ("Assoc Req IE Buffer Length:%d\n", sme->ie_len)); - kalMemCopy(prConnReqMsg->aucIEBuf, sme->ie, sme->ie_len); - prConnReqMsg->u4IELen = sme->ie_len; - - mtk_p2p_cfg80211func_channel_format_switch(sme->channel, - NL80211_CHAN_NO_HT, - &prConnReqMsg->rChannelInfo, - &prConnReqMsg->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prConnReqMsg, - MSG_SEND_METHOD_BUF); - - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_connect */ - -int -mtk_p2p_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_disconnect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - -// prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(P_MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - prDisconnMsg->u2ReasonCode = reason_code; - prDisconnMsg->fgSendDeauth = TRUE; - COPY_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCAddr); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_disconnect */ - - -int -mtk_p2p_cfg80211_change_iface ( - IN struct wiphy *wiphy, - IN struct net_device *ndev, - IN enum nl80211_iftype type, - IN u32 *flags, - IN struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if ((wiphy == NULL) || - (ndev == NULL)) { - break; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_change_iface.\n")); - - if (ndev->ieee80211_ptr) { - ndev->ieee80211_ptr->iftype = type; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - // Switch OP MOde. - prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prSwitchModeMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prSwitchModeMsg->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - switch (type) { - case NL80211_IFTYPE_P2P_CLIENT: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_CLIENT.\n")); - case NL80211_IFTYPE_STATION: - if (type == NL80211_IFTYPE_STATION) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_STATION.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_INFRASTRUCTURE; - break; - case NL80211_IFTYPE_AP: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_AP.\n")); - case NL80211_IFTYPE_P2P_GO: - if (type == NL80211_IFTYPE_P2P_GO) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_GO not AP.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_ACCESS_POINT; - break; - default: - DBGLOG(P2P, TRACE, ("Other type :%d .\n", type)); - prSwitchModeMsg->eOpMode = OP_MODE_P2P_DEVICE; - break; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSwitchModeMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_change_iface */ - - -int -mtk_p2p_cfg80211_set_channel ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN struct ieee80211_channel *chan, - IN enum nl80211_channel_type channel_type) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - RF_CHANNEL_INFO_T rRfChnlInfo; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL)) { - break; - } - - DBGLOG(P2P, STATE, ("mtk_p2p_cfg80211_set_channel.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &rRfChnlInfo, - NULL); - - p2pFuncSetChannel(prGlueInfo->prAdapter, &rRfChnlInfo); - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; - -} -/* mtk_p2p_cfg80211_set_channel */ - -int -mtk_p2p_cfg80211_set_bitrate_mask ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (mask == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_bitrate_mask\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // TODO: Set bitrate mask of the peer? - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_bitrate_mask */ - - -void -mtk_p2p_cfg80211_mgmt_frame_register ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ) -{ -#if 0 - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; -#endif - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - switch (frame_type) { - case MAC_FRAME_PROBE_REQ: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, ERROR, ("Ask frog to add code for mgmt:%x\n", frame_type)); - break; - } - - - - if((prGlueInfo->prAdapter != NULL) && (prGlueInfo->prAdapter->fgIsP2PRegistered == TRUE)){ - - prGlueInfo->u4Flag |= GLUE_FLAG_FRAME_FILTER; - - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - - if (in_interrupt()) { - DBGLOG(P2P, TRACE, ("It is in interrupt level\n")); - } - } - - -#if 0 - - - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_MGMT_FRAME_REGISTER_T)); - - if (prMgmtFrameRegister == NULL) { - ASSERT(FALSE); - break; - } - - prMgmtFrameRegister->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_FRAME_REGISTER; - - prMgmtFrameRegister->u2FrameType = frame_type; - prMgmtFrameRegister->fgIsRegister = reg; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMgmtFrameRegister, - MSG_SEND_METHOD_BUF); - -#endif - - } while (FALSE); - - - return; -} /* mtk_p2p_cfg80211_mgmt_frame_register */ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch ( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel == NULL) { - break; - } - - if (prRfChnlInfo) { - prRfChnlInfo->ucChannelNum = nicFreq2ChannelNum(channel->center_freq * 1000); - - switch (channel->band) { - case IEEE80211_BAND_2GHZ: - prRfChnlInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChnlInfo->eBand = BAND_5G; - break; - default: - prRfChnlInfo->eBand = BAND_2G4; - break; - } - - } - - - if (prChnlSco) { - - switch (channel_type) { - case NL80211_CHAN_NO_HT: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT20: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT40MINUS: - *prChnlSco = CHNL_EXT_SCA; - break; - case NL80211_CHAN_HT40PLUS: - *prChnlSco = CHNL_EXT_SCB; - break; - default: - ASSERT(FALSE); - *prChnlSco = CHNL_EXT_SCN; - break; - } - } - - fgIsValid = TRUE; - } -while (FALSE); - - return fgIsValid; -} -/* mtk_p2p_cfg80211func_channel_format_switch */ - - -#if CONFIG_NL80211_TESTMODE -int mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_PARAMS prParams = (P_NL80211_DRIVER_TEST_PARAMS)NULL; - BOOLEAN fgIsValid = FALSE; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_cmd\n")); - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_PARAMS)data; - - if(prParams->index >> 24 == 0x01) { - /* New version */ - prParams->index = prParams->index & ~ BITS(24,31); - } - else { - /* Old version*/ - mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd(wiphy, data, len); - fgIsValid = TRUE; - return fgIsValid; - } - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* P2P Simga */ - if(mtk_p2p_cfg80211_testmode_p2p_sigma_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; -#if CFG_SUPPORT_WFD - case 2: /* WFD */ - if(mtk_p2p_cfg80211_testmode_wfd_update_cmd(wiphy, data, len)) - fgIsValid= TRUE; - break; -#endif - case 3: /* Hotspot Client Management */ - if(mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - default: - fgIsValid = TRUE; - break; - } - } - - return fgIsValid; - -} - - -int mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - NL80211_DRIVER_TEST_PRE_PARAMS rParams; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index_mode; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rParams, sizeof(NL80211_DRIVER_TEST_PRE_PARAMS)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd\n")); - - if(data && len) - memcpy(&rParams, data, len); - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA,idx_mode=%d idx=%d value=%lu\n", - (INT_16)rParams.idx_mode, (INT_16)rParams.idx, rParams.value)); - - index_mode = rParams.idx_mode; - index = rParams.idx; - value = rParams.value; - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - p2pFsmUninit(prGlueInfo->prAdapter); - p2pFsmInit(prGlueInfo->prAdapter); - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - default: - break; - } - - return status; - -} - - -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_P2P_SIGMA_PARAMS prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_p2p_sigma_cmd\n")); - - if(data && len) - prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)data; - - index = (INT_32)prParams->idx; - value = (INT_32)prParams->value; - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA, idx=%lu value=%lu\n", - (INT_32)prParams->idx, (INT_32)prParams->value)); - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - case 109: /* Max Clients*/ - kalP2PSetMaxClients(prGlueInfo, value); - break; - case 110: /* Hotspot WPS mode */ - kalIoctl(prGlueInfo, - wlanoidSetP2pWPSmode, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - default: - break; - } - - return status; - -} - -#if CFG_SUPPORT_WFD -int -mtk_p2p_cfg80211_testmode_wfd_update_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_WFD_PARAMS prParams = (P_NL80211_DRIVER_WFD_PARAMS)NULL; - int status = 0; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgUpdate = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prParams = (P_NL80211_DRIVER_WFD_PARAMS)data; - - - DBGLOG(P2P, INFO, ("mtk_p2p_cfg80211_testmode_wfd_update_cmd\n")); - -#if 1 - - DBGLOG(P2P, INFO,("WFD Enable:%x\n", prParams->WfdEnable)); - DBGLOG(P2P, INFO,("WFD Session Available:%x\n", prParams->WfdSessionAvailable)); - DBGLOG(P2P, INFO,("WFD Couple Sink Status:%x\n", prParams->WfdCoupleSinkStatus)); - //aucReserved0[2] - DBGLOG(P2P, INFO,("WFD Device Info:%x\n", prParams->WfdDevInfo)); - DBGLOG(P2P, INFO,("WFD Control Port:%x\n", prParams->WfdControlPort)); - DBGLOG(P2P, INFO,("WFD Maximum Throughput:%x\n", prParams->WfdMaximumTp)); - DBGLOG(P2P, INFO,("WFD Extend Capability:%x\n", prParams->WfdExtendCap)); - DBGLOG(P2P, INFO,("WFD Couple Sink Addr "MACSTR" \n", MAC2STR(prParams->WfdCoupleSinkAddress))); - DBGLOG(P2P, INFO,("WFD Associated BSSID "MACSTR" \n", MAC2STR(prParams->WfdAssociatedBssid))); - //UINT_8 aucVideolp[4]; - //UINT_8 aucAudiolp[4]; - DBGLOG(P2P, INFO,("WFD Video Port:%x\n", prParams->WfdVideoPort)); - DBGLOG(P2P, INFO,("WFD Audio Port:%x\n", prParams->WfdAudioPort)); - DBGLOG(P2P, INFO,("WFD Flag:%x\n", prParams->WfdFlag)); - DBGLOG(P2P, INFO,("WFD Policy:%x\n", prParams->WfdPolicy)); - DBGLOG(P2P, INFO,("WFD State:%x\n", prParams->WfdState)); - //UINT_8 aucWfdSessionInformationIE[24*8]; - DBGLOG(P2P, INFO,("WFD Session Info Length:%x\n", prParams->WfdSessionInformationIELen)); - //UINT_8 aucReserved1[2]; - DBGLOG(P2P, INFO,("WFD Primary Sink Addr "MACSTR" \n", MAC2STR(prParams->aucWfdPrimarySinkMac))); - DBGLOG(P2P, INFO,("WFD Secondary Sink Addr "MACSTR" \n", MAC2STR(prParams->aucWfdSecondarySinkMac))); - DBGLOG(P2P, INFO,("WFD Advanced Flag:%x\n", prParams->WfdAdvanceFlag)); - DBGLOG(P2P, INFO,("WFD Sigma mode:%x\n", prParams->WfdSigmaMode)); - //UINT_8 aucReserved2[64]; - //UINT_8 aucReserved3[64]; - //UINT_8 aucReserved4[64]; - -#endif - - prWfdCfgSettings = &(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - kalMemCopy(&prWfdCfgSettings->u4WfdCmdType, &prParams->WfdCmdType, sizeof(WFD_CFG_SETTINGS_T)); - - prMsgWfdCfgUpdate = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_WFD_CONFIG_SETTINGS_CHANGED_T)); - - if (prMsgWfdCfgUpdate == NULL) { - ASSERT(FALSE); - return status; - } - - prMsgWfdCfgUpdate->rMsgHdr.eMsgId = MID_MNY_P2P_WFD_CFG_UPDATE; - prMsgWfdCfgUpdate->prWfdCfgSettings = prWfdCfgSettings; - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgWfdCfgUpdate, - MSG_SEND_METHOD_BUF); -#if 0 // Test Only -// prWfdCfgSettings->ucWfdEnable = 1; -// prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_DEV_INFO_VALID; - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_DEV_INFO_VALID; - prWfdCfgSettings->u2WfdDevInfo = 123; - prWfdCfgSettings->u2WfdControlPort = 456; - prWfdCfgSettings->u2WfdMaximumTp = 789; - - - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_SINK_INFO_VALID; - prWfdCfgSettings->ucWfdCoupleSinkStatus = 0xAB; - { - UINT_8 aucTestAddr[MAC_ADDR_LEN] = {0x77, 0x66, 0x55, 0x44, 0x33, 0x22}; - COPY_MAC_ADDR(prWfdCfgSettings->aucWfdCoupleSinkAddress, aucTestAddr); - } - - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_EXT_CAPABILITY_VALID; - prWfdCfgSettings->u2WfdExtendCap = 0xCDE; - -#endif - - return status; - -} -#endif /* CFG_SUPPORT_WFD */ - - - -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_hotspot_block_PARAMS prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)NULL; - int fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if(data && len) - prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)data; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd\n")); - - fgIsValid = kalP2PSetBlackList(prGlueInfo, prParams->aucBssid, prParams->ucblocked); - - return fgIsValid; - -} - -#endif - - -#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - -#endif // CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_init.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_init.c deleted file mode 100755 index c2d23b7ce5c2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_init.c +++ /dev/null @@ -1,537 +0,0 @@ -/* -** $Id: @(#) gl_p2p_init.c@@ -*/ - -/*! \file gl_p2p_init.c - \brief init and exit routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define P2P_MODE_INF_NAME "p2p%d"; -#define AP_MODE_INF_NAME "wlan%d"; - -//#define MAX_INF_NAME_LEN 15 -//#define MIN_INF_NAME_LEN 1 - -#define RUNNING_P2P_MODE 0 -#define RUNNING_AP_MODE 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/* Get interface name and running mode from module insertion parameter -* Usage: insmod p2p.ko mode=1 -* default: interface name is p2p%d -* running mode is P2P -*/ -static PUCHAR ifname = P2P_MODE_INF_NAME; -static UINT_16 mode = RUNNING_P2P_MODE; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief check interface name parameter is valid or not -* if invalid, set ifname to P2P_MODE_INF_NAME -* -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pCheckInterfaceName( - VOID - ) -{ - - if(mode) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } -#if 0 - UINT_32 ifLen = 0; - - if(ifname) { - ifLen = strlen(ifname); - - if(ifLen > MAX_INF_NAME_LEN) { - ifname[MAX_INF_NAME_LEN] = '\0'; - } - else if( ifLen < MIN_INF_NAME_LEN ) { - ifname = P2P_MODE_INF_NAME; - } - } else { - ifname = P2P_MODE_INF_NAME; - } -#endif -} - - -extern UINT_8 g_aucBufIpAddr[32]; - - -static void wlanP2PEarlySuspend(void) -{ - struct in_device *in_dev; - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#if defined(CONFIG_IPV6) && defined(ENABLE_IPV6_WLAN) - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - UINT_32 u4NumIPv6 = 0; - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - - printk(KERN_INFO "*********p2pEarlySuspend************\n"); - - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pEarlySuspend ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - in_dev = in_dev_get(prDev); - if (!in_dev) - return; - - rtnl_lock(); - if(!in_dev->ifa_list ||!in_dev->ifa_list->ifa_local) { - rtnl_unlock(); - in_dev_put(in_dev); - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - // <4> copy the IPv4 address - kalMemCopy(ip, &(in_dev->ifa_list->ifa_local), sizeof(ip)); - rtnl_unlock(); - in_dev_put(in_dev); - - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#if defined(CONFIG_IPV6) && defined( ENABLE_IPV6_WLAN) - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - // todo: traverse between list to find whole sets of IPv6 addresses - - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - u4NumIPv6++; - } - -#endif - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); // TODO: frog. The pointer is not right. - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP); -#endif - } -#if defined(CONFIG_IPV6) && defined(ENABLE_IPV6_WLAN) - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - - -static void wlanP2PLateResume(void) -{ - struct in_device *in_dev; - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; -#if defined(CONFIG_IPV6) && defined(ENABLE_IPV6_WLAN) - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - - printk(KERN_INFO "*********wlanP2PLateResume************\n"); - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pLateResume ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - in_dev = in_dev_get(prDev); - if (!in_dev) - return; - - rtnl_lock(); - if(!in_dev->ifa_list ||!in_dev->ifa_list->ifa_local) { - rtnl_unlock(); - in_dev_put(in_dev); - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - // <4> copy the IPv4 address - kalMemCopy(ip, &(in_dev->ifa_list->ifa_local), sizeof(ip)); - rtnl_unlock(); - in_dev_put(in_dev); - - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - -#if defined(CONFIG_IPV6) && defined(ENABLE_IPV6_WLAN) - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); -#endif - // <7> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_p2p_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void p2p_early_suspend(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_early_suspend************\n"); - wlanP2PEarlySuspend(); -} - -static void p2p_late_resume(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_late_resume************\n"); - wlanP2PLateResume(); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p init procedure, include register pointer to wlan -* glue register p2p -* set p2p registered flag -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ) -{ - - printk("p2p Launch\n"); - - if(prGlueInfo->prAdapter->fgIsP2PRegistered == TRUE) { - printk("p2p already registered\n"); - return FALSE; - } - else if(glRegisterP2P(prGlueInfo, ifname, (BOOLEAN)mode)) { - prGlueInfo->prAdapter->fgIsP2PRegistered = TRUE; - - printk("Launch success, fgIsP2PRegistered TRUE.\n"); - -#if defined(CONFIG_HAS_EARLYSUSPEND) - /* Here, we register the early suspend and resume callback */ - glRegisterEarlySuspend(&mt6620_p2p_early_suspend_desc, p2p_early_suspend, p2p_late_resume); -#endif - - return TRUE; - } - else { - printk("Launch Fail\n"); - } - - return FALSE; -} - - -VOID -p2pSetMode ( - IN BOOLEAN fgIsAPMOde - ) -{ - if (fgIsAPMOde) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } - else { - mode = RUNNING_P2P_MODE; - ifname = P2P_MODE_INF_NAME; - } - - return; -} /* p2pSetMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p exit procedure, include unregister pointer to wlan -* glue unregister p2p -* set p2p registered flag - -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ) -{ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - printk("p2p is not Registered.\n"); - return FALSE; - } - else { - -#if defined(CONFIG_HAS_EARLYSUSPEND) - glUnregisterEarlySuspend(&mt6620_p2p_early_suspend_desc); -#endif - /*Check p2p fsm is stop or not. If not then stop now*/ - if(IS_P2P_ACTIVE(prGlueInfo->prAdapter)) { - p2pStopImmediate(prGlueInfo); - } - prGlueInfo->prAdapter->fgIsP2PRegistered = FALSE; - glUnregisterP2P(prGlueInfo); - /*p2p is removed successfully*/ - return TRUE; - } - return FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -static int initP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - /*check interface name validation*/ - p2pCheckInterfaceName(); - - printk( KERN_INFO DRV_NAME "InitP2P, Ifname: %s, Mode: %s\n", ifname, mode ? "AP":"P2P"); - - /*register p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(p2pLaunch, p2pRemove, P2P_MODULE); - - /*if wlan is not start yet, do nothing - * p2pLaunch will be called by txthread while wlan start - */ - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModInit(prGlueInfo); - return ( prGlueInfo->prAdapter->fgIsP2PRegistered? 0: -EIO); - } - - return 0; -} /* end of initP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -static VOID __exit exitP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - printk( KERN_INFO DRV_NAME "ExitP2P\n"); - - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModExit(prGlueInfo); - } - /*UNregister p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(NULL, NULL, P2P_MODULE); -} /* end of exitP2P() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_kal.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_kal.c deleted file mode 100755 index c3a467b406df..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_p2p_kal.c +++ /dev/null @@ -1,1651 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_kal.c - \brief - -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "net/cfg80211.h" -#include "precomp.h" - -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ); - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->eState; -} /* end of kalP2PGetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to update the assoc req to p2p -* -* \param[in] -* prGlueInfo -* pucFrameBody -* u4FrameBodyLen -* fgReassocRequest -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PUpdateAssocInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; - unsigned char *pucDesiredIE = NULL; -// unsigned char aucExtraInfoBuf[200]; - PUINT_8 cp; - - memset(&wrqu, 0, sizeof(wrqu)); - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPSIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPSIE!!\n"); - /* WPS IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0x30, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* RSN IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* WPA IE found */ - } - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVASSOCREQIE, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - if(eState == PARAM_MEDIA_STATE_CONNECTED) { - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_CONNECTED; - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_CONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - } - else if(eState == PARAM_MEDIA_STATE_DISCONNECTED) { - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_DISCONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - } - else { - ASSERT(0); - } - - return; -} /* end of kalP2PSetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->u4FreqInKHz; -} /* end of kalP2PGetFreqInKHz() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->ucRole; -} /* end of kalP2PGetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct role -* -* \param[in] -* prGlueInfo -* ucResult -* 0: successful -* 1: error -* ucRole -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 2); - - memset(&evt, 0, sizeof(evt)); - - if(ucResult == 0) { - prGlueInfo->prP2PInfo->ucRole = ucRole; - } - - if (pucSSID) - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, pucSSID[7], pucSSID[8]); - else - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, '0', '0'); - - evt.data.length = strlen(aucBuffer); - - //if (pucSSID) - // printk("P2P GO SSID DIRECT-%c%c\n", pucSSID[7], pucSSID[8]); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PSetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the cipher for p2p -* -* \param[in] -* prGlueInfo -* u4Cipher -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->u4CipherPairwise = u4Cipher; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the cipher, return for cipher is ccmp -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE: cipher is ccmp -* FALSE: cipher is none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PGetCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -BOOLEAN -kalP2PGetCcmpCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return FALSE; - - return FALSE; -} - - -BOOLEAN -kalP2PGetTkipCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return FALSE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->ucWSCRunning = ucWscMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetWscMode ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - return (prGlueInfo->prP2PInfo->ucWSCRunning); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the wsc ie length -* -* \param[in] -* prGlueInfo -* ucType : 0 for beacon, 1 for probe req, 2 for probe resp -* -* \return -* The WSC IE length -*/ -/*----------------------------------------------------------------------------*/ -UINT_16 -kalP2PCalWSC_IELen ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ) -{ - ASSERT(prGlueInfo); - - ASSERT(ucType < 3); - - return prGlueInfo->prP2PInfo->u2WSCIELen[ucType]; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to copy the wsc ie setting from p2p supplicant -* -* \param[in] -* prGlueInfo -* -* \return -* The WPS IE length -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PGenWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - (pucBuffer == NULL)) { - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(pucBuffer, prGlP2pInfo->aucWSCIE[ucType], prGlP2pInfo->u2WSCIELen[ucType]); - - } while (FALSE); - - return; -} - - -VOID -kalP2PUpdateWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - ((u2BufferLength > 0) && (pucBuffer == NULL))) { - break; - } - - - if (u2BufferLength > 400) { - DBGLOG(P2P, ERROR, ("Buffer length is not enough, GLUE only 400 bytes but %d received\n", u2BufferLength)); - ASSERT(FALSE); - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(prGlP2pInfo->aucWSCIE[ucType], pucBuffer, u2BufferLength); - - prGlP2pInfo->u2WSCIELen[ucType] = u2BufferLength; - - - } while (FALSE); - - return; -} /* kalP2PUpdateWSC_IE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device connection request -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_REQ_DEVICE_INFO access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = u4NameLength > 32 ? 32 : u4NameLength; - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - pucDevName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, rPeerAddr); - prGlueInfo->prP2PInfo->ucConnReqDevType = ucDevType; - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = i4ConfigMethod; - prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod = i4ActiveConfigMethod; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_REQ"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateConnReq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for device connection request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] pucGroupBssid Only valid when invitation Type equals to 0. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationIndication ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ) -{ -#if 1 - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = (UINT_32)((prP2pDevDesc->u2NameLength > 32)? 32 : prP2pDevDesc->u2NameLength); - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - prP2pDevDesc->aucName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, prP2pDevDesc->aucDeviceAddr); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqGroupAddr, pucGroupBssid); - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = (INT_32)(prP2pDevDesc->u2ConfigMethod); - prGlueInfo->prP2PInfo->ucOperatingChnl = ucOperatingChnl; - prGlueInfo->prP2PInfo->ucInvitationType = ucInvitationType; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_INDICATE"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; - -#else - P_MSG_P2P_CONNECTION_REQUEST_T prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prGlueInfo != NULL) && (prP2pDevDesc != NULL)); - - - // Not a real solution - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (prP2pConnReq == NULL) { - break; - } - - - kalMemZero(prP2pConnReq, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - prP2pConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - prP2pConnReq->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - COPY_MAC_ADDR(prP2pConnReq->aucDeviceID, prP2pDevDesc->aucDeviceAddr); - - prP2pConnReq->u2ConfigMethod = prP2pDevDesc->u2ConfigMethod; - - if (ucInvitationType == P2P_INVITATION_TYPE_INVITATION) { - prP2pConnReq->fgIsPersistentGroup = FALSE; - prP2pConnReq->fgIsTobeGO = FALSE; - - } - - else if (ucInvitationType == P2P_INVITATION_TYPE_REINVOKE) { - DBGLOG(P2P, TRACE, ("Re-invoke Persistent Group\n")); - prP2pConnReq->fgIsPersistentGroup = TRUE; - prP2pConnReq->fgIsTobeGO = (prGlueInfo->prP2PInfo->ucRole == 2)?TRUE:FALSE; - - } - - - p2pFsmRunEventDeviceDiscoveryAbort(prGlueInfo->prAdapter, NULL); - - if (ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = ucOperatingChnl; - } - - if ((ucSsidLen < 32) && (pucSsid != NULL)) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - pucSsid, - ucSsidLen); - } - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pConnReq, - MSG_SEND_METHOD_BUF); - - - - } while (FALSE); - - // frog add. - // TODO: Invitation Indication - - return; -#endif - -} /* kalP2PInvitationIndication */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an status to supplicant for device invitation status. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4InvStatus = u4InvStatus; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_STATUS"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* kalP2PInvitationStatus */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_REQ %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery response -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_RESP %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery TX Done -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] ucSeqNum Sequence number of the frame -* \param[in] ucStatus Status code for TX -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_XMITTED: %d %d", ucSeqNum, ucStatus); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - return prGlueInfo->prP2PInfo->prDevHandler; -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSecCheckRsp ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SEC_CHECK_RSP="); - - kalMemCopy(prGlueInfo->prP2PInfo->aucSecCheckRsp, pucRsp, u2RspLen); - evt.data.length = strlen(aucBuffer); - -#if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u2RspLen); -#endif - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; -} /* p2pFsmRunEventRxDisassociation */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} /* kalGetChnlList */ - -//////////////////////////////////////ICS SUPPORT////////////////////////////////////// - -VOID -kalP2PIndicateChannelReady ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ) -{ - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - RF_CHANNEL_INFO_T rChannelInfo; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); -#endif - do { - if (prGlueInfo == NULL) { - break; - } -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - if (prChnlReqInfo->fgNeedIndSupp) -#endif -{ - kalMemZero(&rChannelInfo, sizeof(RF_CHANNEL_INFO_T)); - - rChannelInfo.ucChannelNum = u4ChannelNum; - rChannelInfo.eBand = eBand; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueInfo->prP2PInfo, &rChannelInfo); - - kalP2pFuncGetChannelType(eSco, &eChnlType); - - cfg80211_ready_on_channel(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - u8SeqNum, //u64 cookie, - prIEEE80211ChnlStruct, //struct ieee80211_channel * chan, - eChnlType, //enum nl80211_channel_type channel_type, - u4Duration, //unsigned int duration, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - } -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - if (prChnlReqInfo->prMsgTxReq!=NULL) { - prMsgTxReq = prChnlReqInfo->prMsgTxReq; - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_UNBUF); - i4Rslt = 0; - prChnlReqInfo->prMsgTxReq=NULL; - atomic_set(&prGlueInfo->rMgmtTxAto, 0); - complete(&prGlueInfo->rMgmtTxComp); - init_completion(&prGlueInfo->rMgmtTxComp); - } -#endif - } while (FALSE); - -} /* kalP2PIndicateChannelReady */ - -VOID -kalP2PIndicateChannelExpired ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; - RF_CHANNEL_INFO_T rRfChannelInfo; - - do { - if ((prGlueInfo == NULL) || (prChnlReqInfo == NULL)) { - - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - DBGLOG(P2P, TRACE, ("kalP2PIndicateChannelExpired\n")); - - rRfChannelInfo.eBand = prChnlReqInfo->eBand; - rRfChannelInfo.ucChannelNum = prChnlReqInfo->ucReqChnlNum; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueP2pInfo, &rRfChannelInfo); - - - kalP2pFuncGetChannelType(prChnlReqInfo->eChnlSco, - &eChnlType); - - - cfg80211_remain_on_channel_expired(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prChnlReqInfo->u8Cookie, - prIEEE80211ChnlStruct, - eChnlType, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateChannelExpired */ - -VOID -kalP2PIndicateScanDone ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if (prGlueInfo == NULL) { - - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - if (prGlueP2pInfo->prScanRequest) { - cfg80211_scan_done(prGlueP2pInfo->prScanRequest, - fgIsAbort); - - prGlueP2pInfo->prScanRequest = NULL; - } - - } while (FALSE); - - -} /* kalP2PIndicateScanDone */ - -VOID -kalP2PIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prChannelEntry = (struct ieee80211_channel *)NULL; - struct ieee80211_mgmt *prBcnProbeRspFrame = (struct ieee80211_mgmt *)pucFrameBuf; - struct cfg80211_bss *prCfg80211Bss = (struct cfg80211_bss *)NULL; - - do { - if ((prGlueInfo == NULL) || (pucFrameBuf == NULL) || (prChannelInfo == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prChannelEntry = kalP2pFuncGetChannelEntry(prGlueP2pInfo, prChannelInfo); - - if (prChannelEntry == NULL) { - DBGLOG(P2P, TRACE, ("Unknown channel info\n")); - break; - } - - - //rChannelInfo.center_freq = nicChannelNum2Freq((UINT_32)prChannelInfo->ucChannelNum) / 1000; - - prCfg80211Bss = cfg80211_inform_bss_frame(prGlueP2pInfo->wdev.wiphy, //struct wiphy * wiphy, - prChannelEntry, - prBcnProbeRspFrame, - u4BufLen, - i4SignalStrength, - GFP_KERNEL); - - - /* Return this structure. */ - cfg80211_put_bss(prCfg80211Bss); - - } while (FALSE); - - return; - -} /* kalP2PIndicateBssInfo */ - -VOID -kalP2PIndicateMgmtTxStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (pucFrameBuf == NULL) || - (u4FrameLen == 0)) { - DBGLOG(P2P, TRACE, ("Unexpected pointer PARAM. 0x%lx, 0x%lx, %ld.", prGlueInfo, pucFrameBuf, u4FrameLen)); - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - cfg80211_mgmt_tx_status(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u8Cookie, - pucFrameBuf, - u4FrameLen, - fgIsAck, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateMgmtTxStatus */ - -VOID -kalP2PIndicateRxMgmtFrame ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ) -{ -#define DBG_P2P_MGMT_FRAME_INDICATION 0 - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Freq = 0; - UINT_8 ucChnlNum = 0; -#if DBG_P2P_MGMT_FRAME_INDICATION - P_WLAN_MAC_HEADER_T prWlanHeader = (P_WLAN_MAC_HEADER_T)NULL; -#endif - - - do { - if ((prGlueInfo == NULL) || (prSwRfb == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - ucChnlNum = prSwRfb->prHifRxHdr->ucHwChannelNum; - -#if DBG_P2P_MGMT_FRAME_INDICATION - - prWlanHeader = (P_WLAN_MAC_HEADER_T)prSwRfb->pvHeader; - - switch (prWlanHeader->u2FrameCtrl) { - case MAC_FRAME_PROBE_REQ: - DBGLOG(P2P, TRACE, ("RX Probe Req at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_PROBE_RSP: - DBGLOG(P2P, TRACE, ("RX Probe Rsp at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_ACTION: - DBGLOG(P2P, TRACE, ("RX Action frame at channel %d ", ucChnlNum)); - break; - default: - DBGLOG(P2P, TRACE, ("RX Packet:%d at channel %d ", prWlanHeader->u2FrameCtrl, ucChnlNum)); - break; - } - - DBGLOG(P2P, TRACE, ("from: "MACSTR"\n", MAC2STR(prWlanHeader->aucAddr2))); -#endif - i4Freq = nicChannelNum2Freq(ucChnlNum) / 1000; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - RCPI_TO_dBm(prSwRfb->prHifRxHdr->ucRcpi), - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_KERNEL); -#else - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_KERNEL); -#endif - - } while (FALSE); - -} /* kalP2PIndicateRxMgmtFrame */ - -VOID -kalP2PGCIndicateConnectionStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if (prGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prP2pConnInfo) { - cfg80211_connect_result(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prP2pConnInfo->aucBssid, - prP2pConnInfo->aucIEBuf, - prP2pConnInfo->u4BufLength, - pucRxIEBuf, - u2RxIELen, - u2StatusReason, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - prP2pConnInfo->fgIsConnRequest = FALSE; - } - else { - /* Disconnect, what if u2StatusReason == 0? */ - cfg80211_disconnected(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u2StatusReason, - pucRxIEBuf, - u2RxIELen, - GFP_KERNEL); - } - - - - } while (FALSE); - - -} /* kalP2PGCIndicateConnectionStatus */ - - -VOID -kalP2PGOStationUpdate ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ) -{ - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - struct station_info rStationInfo; - - do { - if ((prGlueInfo == NULL) || (prCliStaRec == NULL)) { - break; - } - - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (fgIsNew) { - rStationInfo.filled = STATION_INFO_ASSOC_REQ_IES; - rStationInfo.generation = ++prP2pGlueInfo->i4Generation; - - rStationInfo.assoc_req_ies = prCliStaRec->pucAssocReqIe; - rStationInfo.assoc_req_ies_len = prCliStaRec->u2AssocReqIeLen; -// rStationInfo.filled |= STATION_INFO_ASSOC_REQ_IES; - - cfg80211_new_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - &rStationInfo, - GFP_KERNEL); - } - else { - ++prP2pGlueInfo->i4Generation; - - cfg80211_del_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - GFP_KERNEL); - } - - - } while (FALSE); - - return; - -} /* kalP2PGOStationUpdate */ - - - - -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel_type) { - - switch (rChnlSco) { - case CHNL_EXT_SCN: - *channel_type = NL80211_CHAN_NO_HT; - break; - case CHNL_EXT_SCA: - *channel_type = NL80211_CHAN_HT40MINUS; - break; - case CHNL_EXT_SCB: - *channel_type = NL80211_CHAN_HT40PLUS; - break; - default: - ASSERT(FALSE); - *channel_type = NL80211_CHAN_NO_HT; - break; - } - - } - - fgIsValid = TRUE; - } while (FALSE); - - return fgIsValid; -} /* kalP2pFuncGetChannelType */ - - - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry ( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ) -{ - struct ieee80211_channel *prTargetChannelEntry = (struct ieee80211_channel *)NULL; - UINT_32 u4TblSize = 0, u4Idx = 0; - - do { - if ((prP2pInfo == NULL) || (prChannelInfo == NULL)) { - break; - } - - - switch (prChannelInfo->eBand) { - case BAND_2G4: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->n_channels; - break; - case BAND_5G: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels; - break; - default: - break; - } - - - if (prTargetChannelEntry == NULL) { - break; - } - - - - for (u4Idx = 0; u4Idx < u4TblSize; u4Idx++, prTargetChannelEntry++) { - if (prTargetChannelEntry->hw_value == prChannelInfo->ucChannelNum) { - break; - } - - } - - - if (u4Idx == u4TblSize) { - prTargetChannelEntry = NULL; - break; - } - - - } while (FALSE); - - return prTargetChannelEntry; -} /* kalP2pFuncGetChannelEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the block list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsValid = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(fgIsblock) { - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)) { - if(UNEQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - if(EQUAL_MAC_ADDR (&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - } - } - else { - for(i = 0; i < 8; i++) { - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - - return fgIsValid; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to compare the black list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsExsit = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)){ - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - fgIsExsit = TRUE; - return fgIsExsit; - } - } - } - - return fgIsExsit; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(u4MaxClient == 0 || prGlueInfo->prP2PInfo->ucMaxClients >= P2P_MAXIMUM_CLIENT_COUNT) - prGlueInfo->prP2PInfo->ucMaxClients = P2P_MAXIMUM_CLIENT_COUNT; - else - prGlueInfo->prP2PInfo->ucMaxClients = u4MaxClient; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(prGlueInfo->prP2PInfo->ucMaxClients) { - if((UINT_8)u4NumClient > prGlueInfo->prP2PInfo->ucMaxClients) - return TRUE; - else - return FALSE; - } - - return FALSE; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_proc.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_proc.c deleted file mode 100755 index 3e53176c8991..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_proc.c +++ /dev/null @@ -1,811 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_proc.c#1 $ -*/ - -/*! \file "gl_proc.c" - \brief This file defines the interface which can interact with users in /proc fs. - - Detail description. -*/ - - - -/* -** $Log: gl_proc.c $ - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support -** \main\maintrunk.MT5921\19 2008-09-02 21:08:37 GMT mtk01461 -** Fix the compile error of SPRINTF() -** \main\maintrunk.MT5921\18 2008-08-10 18:48:28 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\17 2008-08-04 16:52:01 GMT mtk01461 -** Add proc dbg print message of DOMAIN_INDEX level -** \main\maintrunk.MT5921\16 2008-07-10 00:45:16 GMT mtk01461 -** Remove the check of MCR offset, we may use the MCR address which is not align to DW boundary or proprietary usage. -** \main\maintrunk.MT5921\15 2008-06-03 20:49:44 GMT mtk01461 -** \main\maintrunk.MT5921\14 2008-06-02 22:56:00 GMT mtk01461 -** Rename some functions for linux proc -** \main\maintrunk.MT5921\13 2008-06-02 20:23:18 GMT mtk01461 -** Revise PROC mcr read / write for supporting TELNET -** \main\maintrunk.MT5921\12 2008-03-28 10:40:25 GMT mtk01461 -** Remove temporary set desired rate in linux proc -** \main\maintrunk.MT5921\11 2008-01-07 15:07:29 GMT mtk01461 -** Add User Update Desired Rate Set for QA in Linux -** \main\maintrunk.MT5921\10 2007-12-11 00:11:14 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\9 2007-12-04 18:07:57 GMT mtk01461 -** Add additional debug category to proc -** \main\maintrunk.MT5921\8 2007-11-02 01:03:23 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\7 2007-10-25 18:08:14 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.3 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.2 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_kal.h" - -#include "wlan_lib.h" -#include "debug.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PROC_MCR_ACCESS "mcr" -#define PROC_DRV_STATUS "status" -#define PROC_RX_STATISTICS "rx_statistics" -#define PROC_TX_STATISTICS "tx_statistics" -#define PROC_DBG_LEVEL "dbg_level" - -#define PROC_MCR_ACCESS_MAX_USER_INPUT_LEN 20 -#define PROC_RX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_TX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_DBG_LEVEL_MAX_USER_INPUT_LEN 20 -#define PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN 30 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 u4McrOffset = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading MCR register to User Space, the offset of -* the MCR is specified in u4McrOffset. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - char *p = page; - UINT_32 u4Count; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - rMcrInfo.u4McrOffset = u4McrOffset; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryMcrRead, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - - - SPRINTF(p, ("MCR (0x%08lxh): 0x%08lx\n", - rMcrInfo.u4McrOffset, rMcrInfo.u4McrData)); - - u4Count = (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procMCRRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for writing MCR register to HW or update u4McrOffset -* for reading MCR later. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - char acBuf[PROC_MCR_ACCESS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - int i4CopySize; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - i4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - if (copy_from_user(acBuf, buffer, i4CopySize)) { - return 0; - } - acBuf[i4CopySize] = '\0'; - - switch (sscanf(acBuf, "0x%lx 0x%lx", - &rMcrInfo.u4McrOffset, &rMcrInfo.u4McrData)) { - case 2: - /* NOTE: Sometimes we want to test if bus will still be ok, after accessing - * the MCR which is not align to DW boundary. - */ - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - u4McrOffset = rMcrInfo.u4McrOffset; - - //printk("Write 0x%lx to MCR 0x%04lx\n", - //rMcrInfo.u4McrOffset, rMcrInfo.u4McrData); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetMcrWrite, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - } - break; - - case 1: - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - u4McrOffset = rMcrInfo.u4McrOffset; - } - break; - - default: - break; - } - - return count; - -} /* end of procMCRWrite() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver Status to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDrvStatusRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("GLUE LAYER STATUS:")); - SPRINTF(p, ("\n==================")); - - SPRINTF(p, ("\n* Number of Pending Frames: %ld\n", - prGlueInfo->u4TxPendingFrameNum)); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryDrvStatusForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procDrvStatusRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver RX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("RX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryRxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procRxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver RX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetRxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procRxStatisticsWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver TX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("TX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryTxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procTxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver TX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetTxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procTxStatisticsWrite() */ -#endif - - -#if DBG -static UINT_8 aucDbModuleName[][PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN] = { - "DBG_INIT_IDX", - "DBG_HAL_IDX", - "DBG_INTR_IDX", - "DBG_REQ_IDX", - "DBG_TX_IDX", - "DBG_RX_IDX", - "DBG_RFTEST_IDX", - "DBG_EMU_IDX", - "DBG_SW1_IDX", - "DBG_SW2_IDX", - "DBG_SW3_IDX", - "DBG_SW4_IDX", - "DBG_HEM_IDX", - "DBG_AIS_IDX", - "DBG_RLM_IDX", - "DBG_MEM_IDX", - "DBG_CNM_IDX", - "DBG_RSN_IDX", - "DBG_BSS_IDX", - "DBG_SCN_IDX", - "DBG_SAA_IDX", - "DBG_AAA_IDX", - "DBG_P2P_IDX", - "DBG_QM_IDX", - "DBG_SEC_IDX", - "DBG_BOW_IDX" - }; - -extern UINT_8 aucDebugModule[]; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for displaying current Debug Level. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - char *p = page; - int i; - - - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - for (i = 0; i < (sizeof(aucDbModuleName)/PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN); i++) { - SPRINTF(p, ("%c %-15s(0x%02x): %02x\n", - ((i == u4DebugModule) ? '*' : ' '), - &aucDbModuleName[i][0], - i, - aucDebugModule[i])); - } - - *eof = 1; - return (int)(p - page); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for adjusting Debug Level to turn on/off debugging message. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - char acBuf[PROC_DBG_LEVEL_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4NewDbgModule, u4NewDbgLevel; - - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "0x%lx 0x%lx", &u4NewDbgModule, &u4NewDbgLevel) == 2) { - if (u4NewDbgModule < DBG_MODULE_NUM) { - u4DebugModule = u4NewDbgModule; - u4NewDbgLevel &= DBG_CLASS_MASK; - aucDebugModule[u4DebugModule] = (UINT_8)u4NewDbgLevel; - } - } - - return count; -} -#endif /* DBG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function create a PROC fs in linux /proc/net subdirectory. -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo; - struct proc_dir_entry *prEntry; - - - ASSERT(prDev); - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, INFO, ("init proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("The OS context is NULL\n")); - return -ENOENT; - } - - - /* - /proc/net/wlan0 - |-- mcr (PROC_MCR_ACCESS) - |-- status (PROC_DRV_STATUS) - |-- rx_statistics (PROC_RX_STATISTICS) - |-- tx_statistics (PROC_TX_STATISTICS) - |-- dbg_level (PROC_DBG_LEVEL) - |-- (end) - */ - - /* - * Directory: Root (/proc/net/wlan0) - */ - - prGlueInfo->pProcRoot = proc_mkdir(pucDevName, init_net.proc_net); - if (prGlueInfo->pProcRoot == NULL) { - return -ENOENT; - } - - /* File Root/mcr (RW) */ - prEntry = create_proc_entry(PROC_MCR_ACCESS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procMCRRead; - prEntry->write_proc = procMCRWrite; - prEntry->data = (void *)prDev; - } - -#if 0 - /* File Root/status (RW) */ - prEntry = create_proc_read_entry(PROC_DRV_STATUS, 0, prGlueInfo->pProcRoot, - procDrvStatusRead, prDev); - - /* File Root/rx_statistics (RW) */ - prEntry = create_proc_entry(PROC_RX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procRxStatisticsRead; - prEntry->write_proc = procRxStatisticsWrite; - prEntry->data = (void *)prDev; - } - - /* File Root/tx_statistics (RW) */ - prEntry = create_proc_entry(PROC_TX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procTxStatisticsRead; - prEntry->write_proc = procTxStatisticsWrite; - prEntry->data = (void *)prDev; - } - -#if DBG - /* File Root/dbg_level (RW) */ - prEntry = create_proc_entry(PROC_DBG_LEVEL, 0644, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procDbgLevelRead; - prEntry->write_proc = procDbgLevelWrite; - } -#endif /* DBG */ -#endif - return 0; - -} /* end of procInitProcfs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clean up a PROC fs created by procInitProcfs(). -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - - ASSERT(prDev); - - if (!prDev) { - return -ENOENT; - } - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, WARN, ("remove proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (!prGlueInfo->pProcRoot) { - DBGLOG(INIT, WARN, ("The procfs root is NULL\n")); - return -ENOENT; - } -#if 0 -#if DBG - remove_proc_entry(PROC_DBG_LEVEL, prGlueInfo->pProcRoot); -#endif /* DBG */ - remove_proc_entry(PROC_TX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_RX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_DRV_STATUS, prGlueInfo->pProcRoot); -#endif - remove_proc_entry(PROC_MCR_ACCESS, prGlueInfo->pProcRoot); - - /* remove root directory (proc/net/wlan0) */ - remove_proc_entry(pucDevName, init_net.proc_net); - - return 0; - -} /* end of procRemoveProcfs() */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_rst.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_rst.c deleted file mode 100755 index 92b47c168c04..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_rst.c +++ /dev/null @@ -1,522 +0,0 @@ -/* -** $Id: @(#) gl_rst.c@@ -*/ - -/*! \file gl_rst.c - \brief Main routines for supporintg MT6620 whole-chip reset mechanism - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_rst.c $ - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 03 30 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * use netlink unicast instead of broadcast - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include -#include - - - -#if CFG_CHIP_RESET_SUPPORT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_BIND_PROCESS (4) - -#define MTK_WIFI_FAMILY_NAME "MTK_WIFI" -#define MTK_WIFI_RESET_START_NAME "RESET_START" -#define MTK_WIFI_RESET_END_NAME "RESET_END" -#define MTK_WIFI_RESET_TEST_NAME "GENETLINK_START" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -enum { - __MTK_WIFI_ATTR_INVALID, - MTK_WIFI_ATTR_MSG, - __MTK_WIFI_ATTR_MAX, -}; -#define MTK_WIFI_ATTR_MAX (__MTK_WIFI_ATTR_MAX - 1) - - -enum { - __MTK_WIFI_COMMAND_INVALID, - MTK_WIFI_COMMAND_BIND, - MTK_WIFI_COMMAND_RESET, - __MTK_WIFI_COMMAND_MAX, -}; -#define MTK_WIFI_COMMAND_MAX (__MTK_WIFI_COMMAND_MAX - 1) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/BOOLEAN fgIsResetting = FALSE; -extern volatile int wlan_mode; -extern volatile set_p2p_mode pf_set_p2p_mode; -extern volatile int power_state; -extern MTK_WCN_BOOL -mtk_wcn_wmt_func_on ( - ENUM_WMTDRV_TYPE_T type - ); - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 mtk_wifi_seqnum = 0; -static int num_bind_process = 0; -static pid_t bind_pid[MAX_BIND_PROCESS]; -static struct delayed_work work_rst; -static set_p2p_mode pf_set_p2p_mode_rst; - - -/* attribute policy */ -static struct nla_policy mtk_wifi_genl_policy[MTK_WIFI_ATTR_MAX + 1] = { - [MTK_WIFI_ATTR_MSG] = { .type = NLA_NUL_STRING }, -}; - -/* family definition */ -static struct genl_family mtk_wifi_gnl_family = { - .id = GENL_ID_GENERATE, - .hdrsize = 0, - .name = MTK_WIFI_FAMILY_NAME, - .version = 1, - .maxattr = MTK_WIFI_ATTR_MAX, -}; - -/* forward declaration */ -static int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ); - -static int mtk_wifi_reset( - void - ); - -/* operation definition */ -static struct genl_ops mtk_wifi_gnl_ops_bind = { - .cmd = MTK_WIFI_COMMAND_BIND, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_bind, - .dumpit = NULL, -}; - -static struct genl_ops mtk_wifi_gnl_ops_reset = { - .cmd = MTK_WIFI_COMMAND_RESET, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_reset, - .dumpit = NULL, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -extern int -mtk_wcn_wmt_msgcb_reg( - ENUM_WMTDRV_TYPE_T eType, - PF_WMT_CB pCb); - -extern int -mtk_wcn_wmt_msgcb_unreg( - ENUM_WMTDRV_TYPE_T eType - ); - -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ); - -static BOOLEAN -glResetSendMessage ( - char *aucMsg, - u8 cmd - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. registering for reset callbacks - * 2. initialize netlink socket - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ) -{ - /* 1. register for reset callback */ - mtk_wcn_wmt_msgcb_reg(WMTDRV_TYPE_WIFI, (PF_WMT_CB)glResetCallback); - - /* 2.1 registration for NETLINK_GENERIC family */ - if(genl_register_family(&mtk_wifi_gnl_family) != 0) { - DBGLOG(INIT, WARN, ("%s(): GE_NELINK family registration fail\n", __func__)); - } - else { - /* 2.2 operation registration */ - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_bind) != 0) { - DBGLOG(INIT, WARN, ("%s(): BIND operation registration fail\n", __func__)); - } - - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_reset) != 0) { - DBGLOG(INIT, WARN, ("%s(): RESET operation registration fail\n", __func__)); - } - } - INIT_DELAYED_WORK(&work_rst, mtk_wifi_reset); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. uninitialize netlink socket - * 2. deregistering for reset callbacks - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetUninit( - VOID - ) -{ - /* 1. release NETLINK_GENERIC family */ - genl_unregister_family(&mtk_wifi_gnl_family); - - /* 2. deregister for reset callback */ - mtk_wcn_wmt_msgcb_unreg(WMTDRV_TYPE_WIFI); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is invoked when there is reset messages indicated - * - * @param eSrcType - * eDstType - * eMsgType - * prMsgBody - * u4MsgLength - * - * @retval - */ -/*----------------------------------------------------------------------------*/ -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ) -{ - PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode; - struct net_device *netdev = NULL; - switch(eMsgType) { - case WMTMSG_TYPE_RESET: - if(u4MsgLength == sizeof(ENUM_WMTRSTMSG_TYPE_T)) { - P_ENUM_WMTRSTMSG_TYPE_T prRstMsg = (P_ENUM_WMTRSTMSG_TYPE_T) prMsgBody; - - switch(*prRstMsg) { - case WMTRSTMSG_RESET_START: - fgIsResetting = TRUE; - printk("WLAN driver:whole chip reset start!\n"); - //pf_set_p2p_mode_rst=pf_set_p2p_mode; - if (pf_set_p2p_mode){ - netdev = dev_get_by_name(&init_net,"wlan0"); - p2pmode.u4Enable = 0; - p2pmode.u4Mode = 0; - pf_set_p2p_mode(netdev, p2pmode); - msleep(300); - dev_put(netdev); - netdev = NULL; - } - break; - - case WMTRSTMSG_RESET_END: - printk("WLAN driver:whole chip reset end\n"); - fgIsResetting = FALSE; - if (power_state==0) - { - break; - } - else - { - schedule_delayed_work(&work_rst, 200); - break; - } - default: - break; - } - } - default: - break; - } - return NULL; - } - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine send out message via netlink socket - * - * @param aucMsg - * u4MsgLength - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -glResetSendMessage( - char * aucMsg, - u8 cmd - ) -{ - struct sk_buff *skb = NULL; - void *msg_head = NULL; - int rc = -1; - int i; - - if(num_bind_process == 0) { - /* no listening process */ - return FALSE; - } - - for(i = 0 ; i < num_bind_process ; i++) { - skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); - - if(skb) { - msg_head = genlmsg_put(skb, 0, mtk_wifi_seqnum++, &mtk_wifi_gnl_family, 0, cmd); - - if(msg_head == NULL) { - nlmsg_free(skb); - return FALSE; - } - - rc = nla_put_string(skb, MTK_WIFI_ATTR_MSG, aucMsg); - if(rc != 0) { - nlmsg_free(skb); - return FALSE; - } - - /* finalize the message */ - genlmsg_end(skb, msg_head); - - /* sending message */ - rc = genlmsg_unicast(&init_net, skb, bind_pid[i]); - if(rc != 0) { - return FALSE; - } - } - else { - return FALSE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called to identify PID for process binding - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ) -{ - struct nlattr *na; - char * mydata; - - if (info == NULL) { - goto out; - } - - /*for each attribute there is an index in info->attrs which points to a nlattr structure - *in this structure the data is given - */ - - na = info->attrs[MTK_WIFI_ATTR_MSG]; - if (na) { - mydata = (char *)nla_data(na); - - /* no need to parse mydata */ - } - - /* collect PID */ - if(num_bind_process < MAX_BIND_PROCESS) { - bind_pid[num_bind_process] = info->snd_pid; - num_bind_process++; - } - else { - DBGLOG(INIT, WARN, ("%s(): exceeding binding limit %d\n", __func__, MAX_BIND_PROCESS)); - } - -out: - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for reset, shout not happen - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_reset(void) -{ - PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode; - struct net_device *netdev = NULL; - DBGLOG(INIT, STATE, ("%s(): begin to reset WIFI\n", __func__)); - if (wlan_mode==1) //AP mode - { - printk("Whole-chip reset:indicate power-off in AP mode\n"); - power_state=0; - } - else if (wlan_mode==2)//P2P mode - { - if (MTK_WCN_BOOL_FALSE == mtk_wcn_wmt_func_on(WMTDRV_TYPE_WIFI)) { - printk("Whole-chip reset:WMT turn on WIFI fail!\n"); - } - else { - printk("Whole-chip reset:WMT turn on WIFI OK!\n"); - msleep(300); - printk("Whole-chip reset:begin to turn on P2P mode\n"); - netdev = dev_get_by_name(&init_net,"wlan0"); - p2pmode.u4Enable = 1; - p2pmode.u4Mode = 0; - pf_set_p2p_mode(netdev, p2pmode); - printk("Whole-chip reset:turn on P2P mode\n"); - dev_put(netdev); - netdev = NULL; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for generating reset request to WMT - * - * @param None - * - * @retval None - */ -/*----------------------------------------------------------------------------*/ -VOID -glSendResetRequest( - VOID - ) -{ - // WMT thread would trigger whole chip resetting itself - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for checking if MT6620 is resetting - * - * @param None - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsResetting( - VOID - ) -{ - return fgIsResetting; -} - - -#endif // CFG_CHIP_RESET_SUPPORT diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_wext.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_wext.c deleted file mode 100755 index f8176947aa4a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_wext.c +++ /dev/null @@ -1,4527 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_wext.c#3 $ -*/ - -/*! \file gl_wext.c - \brief ioctl() (mostly Linux Wireless Extensions) routines for STA driver. -*/ - - - -/* -** $Log: gl_wext.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 tsaiyuan.hsu - * [WCXRP00000979] [MT6620 Wi-Fi][DRV]] stop attempting to connect to config AP after D3 state - * avoid entering D3 state after deep sleep. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 wh.su - * [WCXRP00000877] [MT6620 Wi-Fi][Driver] Remove the netif_carry_ok check for avoid the wpa_supplicant fail to query the ap address - * Remove the netif check while query bssid and ssid - * - * 07 26 2011 chinglan.wang - * NULL - * [MT6620][WiFi Driver] Do not include the WSC IE in the association info packet when not do the wps connection.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 17 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Initilize the vairlabes. - * - * 05 11 2011 jeffrey.chang - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * modify set_tx_pow ioctl - * - * 03 29 2011 terry.wu - * [WCXRP00000610] [MT 6620 Wi-Fi][Driver] Fix klocwork waring - * [MT6620 Wi-Fi][Driver] Fix klocwork warning. Add Null pointer check on wext_get_essid. Limit the upper bound of essid storage array. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 21 2011 wh.su - * [WCXRP00000483] [MT6620 Wi-Fi][Driver] Check the kalIoctl return value before doing the memory copy at linux get essid - * fixed the potential error to do a larget memory copy while wlanoid get essid not actually running. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 01 29 2011 wh.su - * [WCXRP00000408] [MT6620 Wi-Fi][Driver] Not doing memory alloc while ioctl set ie with length 0 - * not doing mem alloc. while set ie length already 0 - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Remove debug text. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous types - * to ease slab system pressure - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Allow change PS profile function (throught wext_set_power()). - * - * 12 14 2010 jeffrey.chang - * [WCXRP00000262] [MT6620 Wi-Fi][Driver] modify the scan request ioctl to handle hidden SSID - * handle hidden SSID - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * Fix compiling error - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000121] [MT6620 Wi-Fi][Driver] Temporarily disable set power mode ioctl which may cause 6620 to enter power saving - * Temporarily disable set power mode ioctl which may cause MT6620 to enter power saving - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 01 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * add the scan result with wapi ie. - * - * 09 30 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed the wapi ie assigned issue. - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 02 2010 jeffrey.chang - * NULL - * enable remove key ioctl - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) enable encyption ioctls - * 2) temporarily disable remove keys ioctl to prevent TX1 busy - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove unused macro and debug messages - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassoication support for wpa supplicant - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * * 2) fix ioctl - * - * 04 12 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug messages for pre-release - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * are done in adapter layer. - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl type - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * enable pmksa cache operation - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\38 2009-10-08 10:33:22 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\37 2009-09-29 16:49:48 GMT mtk01090 -** Remove unused variables -** \main\maintrunk.MT5921\36 2009-09-28 20:19:11 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\35 2009-09-03 11:42:30 GMT mtk01088 -** adding the wapi ioctl support -** \main\maintrunk.MT5921\34 2009-08-18 22:56:50 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\33 2009-05-14 22:43:47 GMT mtk01089 -** fix compiling warning -** \main\maintrunk.MT5921\32 2009-05-07 22:26:18 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\31 2009-02-07 15:11:14 GMT mtk01088 -** fixed the compiling error -** \main\maintrunk.MT5921\30 2009-02-07 14:46:51 GMT mtk01088 -** add the privacy setting from linux supplicant ap selection -** \main\maintrunk.MT5921\29 2008-11-19 15:18:50 GMT mtk01088 -** fixed the compling error -** \main\maintrunk.MT5921\28 2008-11-19 11:56:18 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\27 2008-08-29 16:59:43 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\26 2008-08-29 14:55:53 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\25 2008-06-02 11:15:19 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\24 2008-05-30 15:13:12 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\23 2008-03-28 10:40:28 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\22 2008-03-18 10:31:24 GMT mtk01088 -** add pmkid ioctl and indicate -** \main\maintrunk.MT5921\21 2008-03-11 15:21:24 GMT mtk01461 -** \main\maintrunk.MT5921\20 2008-03-11 14:50:55 GMT mtk01461 -** Refine WPS related priv ioctl for unified interface -** -** \main\maintrunk.MT5921\19 2008-03-06 16:30:41 GMT mtk01088 -** move the configuration code from set essid function, -** remove the non-used code -** \main\maintrunk.MT5921\18 2008-02-21 15:47:09 GMT mtk01461 -** Fix CR[489] -** \main\maintrunk.MT5921\17 2008-02-12 23:38:31 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\16 2008-01-24 12:07:34 GMT mtk01461 -** \main\maintrunk.MT5921\15 2008-01-24 12:00:10 GMT mtk01461 -** Modify the wext_essid for set up correct information for IBSS, and fix the wrong input ptr for prAdapter -** \main\maintrunk.MT5921\14 2007-12-06 09:30:12 GMT mtk01425 -** 1. Branch Test -** \main\maintrunk.MT5921\13 2007-12-04 18:07:59 GMT mtk01461 -** fix typo -** \main\maintrunk.MT5921\12 2007-11-30 17:10:21 GMT mtk01425 -** 1. Fix compiling erros -** -** \main\maintrunk.MT5921\11 2007-11-27 10:43:22 GMT mtk01425 -** 1. Add WMM-PS setting -** \main\maintrunk.MT5921\10 2007-11-06 20:33:32 GMT mtk01088 -** fixed the compiler error -** \main\maintrunk.MT5921\9 2007-11-06 19:33:15 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\8 2007-10-30 12:00:44 GMT MTK01425 -** 1. Update wlanQueryInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#include "config.h" -#include "wlan_oid.h" - -#include "gl_wext.h" -#include "gl_wext_priv.h" - -#include "precomp.h" - -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif - -/* compatibility to wireless extensions */ -#ifdef WIRELESS_EXT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const long channel_freq[] = { - 2412, 2417, 2422, 2427, 2432, 2437, 2442, - 2447, 2452, 2457, 2462, 2467, 2472, 2484 -}; - -#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \ - switch (ch) \ - { \ - case 1: khz = 2412000; break; \ - case 2: khz = 2417000; break; \ - case 3: khz = 2422000; break; \ - case 4: khz = 2427000; break; \ - case 5: khz = 2432000; break; \ - case 6: khz = 2437000; break; \ - case 7: khz = 2442000; break; \ - case 8: khz = 2447000; break; \ - case 9: khz = 2452000; break; \ - case 10: khz = 2457000; break; \ - case 11: khz = 2462000; break; \ - case 12: khz = 2467000; break; \ - case 13: khz = 2472000; break; \ - case 14: khz = 2484000; break; \ - case 36: /* UNII */ khz = 5180000; break; \ - case 40: /* UNII */ khz = 5200000; break; \ - case 44: /* UNII */ khz = 5220000; break; \ - case 48: /* UNII */ khz = 5240000; break; \ - case 52: /* UNII */ khz = 5260000; break; \ - case 56: /* UNII */ khz = 5280000; break; \ - case 60: /* UNII */ khz = 5300000; break; \ - case 64: /* UNII */ khz = 5320000; break; \ - case 149: /* UNII */ khz = 5745000; break; \ - case 153: /* UNII */ khz = 5765000; break; \ - case 157: /* UNII */ khz = 5785000; break; \ - case 161: /* UNII */ khz = 5805000; break; \ - case 165: /* UNII */ khz = 5825000; break; \ - case 100: /* HiperLAN2 */ khz = 5500000; break; \ - case 104: /* HiperLAN2 */ khz = 5520000; break; \ - case 108: /* HiperLAN2 */ khz = 5540000; break; \ - case 112: /* HiperLAN2 */ khz = 5560000; break; \ - case 116: /* HiperLAN2 */ khz = 5580000; break; \ - case 120: /* HiperLAN2 */ khz = 5600000; break; \ - case 124: /* HiperLAN2 */ khz = 5620000; break; \ - case 128: /* HiperLAN2 */ khz = 5640000; break; \ - case 132: /* HiperLAN2 */ khz = 5660000; break; \ - case 136: /* HiperLAN2 */ khz = 5680000; break; \ - case 140: /* HiperLAN2 */ khz = 5700000; break; \ - case 34: /* Japan MMAC */ khz = 5170000; break; \ - case 38: /* Japan MMAC */ khz = 5190000; break; \ - case 42: /* Japan MMAC */ khz = 5210000; break; \ - case 46: /* Japan MMAC */ khz = 5230000; break; \ - case 184: /* Japan */ khz = 4920000; break; \ - case 188: /* Japan */ khz = 4940000; break; \ - case 192: /* Japan */ khz = 4960000; break; \ - case 196: /* Japan */ khz = 4980000; break; \ - case 208: /* Japan, means J08 */ khz = 5040000; break; \ - case 212: /* Japan, means J12 */ khz = 5060000; break; \ - case 216: /* Japan, means J16 */ khz = 5080000; break; \ - default: khz = 2412000; break; \ - } \ - } - - -#define NUM_CHANNELS (sizeof(channel_freq) / sizeof(channel_freq[0])) - -#define MAX_SSID_LEN 32 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -/* NOTE: name in iwpriv_args only have 16 bytes */ -static const struct iw_priv_args rIwPrivTable[] = { - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, ""}, - - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - - {IOCTL_SET_INTS, IW_PRIV_TYPE_INT | 4, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | 50, ""}, - - /* added for set_oid and get_oid */ - {IOCTL_SET_STRUCT, 256, 0, ""}, - {IOCTL_GET_STRUCT, 0, 256, ""}, - - /* sub-ioctl definitions */ -#if 0 - {PRIV_CMD_REG_DOMAIN, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_reg_domain" }, - {PRIV_CMD_REG_DOMAIN, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_reg_domain" }, -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - {PRIV_CMD_CSUM_OFFLOAD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_tcp_csum" }, -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - {PRIV_CMD_POWER_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_power_mode" }, - {PRIV_CMD_POWER_MODE, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_power_mode" }, - - {PRIV_CMD_WMM_PS, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "set_wmm_ps" }, - - {PRIV_CMD_TEST_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_test_mode" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_test_cmd" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_test_result" }, -#if CFG_SUPPORT_PRIV_MCR_RW - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_mcr" }, - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mcr" }, -#endif - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_sw_ctrl" }, - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_sw_ctrl" }, - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_bwcs"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_bwcs"}, -#endif - - /* SET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 256, 0, "set_oid"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 0, 256, "get_oid"}, - - {PRIV_CMD_BAND_CONFIG, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_band" }, - {PRIV_CMD_BAND_CONFIG, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_band" }, - - {PRIV_CMD_SET_TX_POWER, IW_PRIV_TYPE_INT | 4, 0, "set_txpower" }, - {PRIV_CMD_GET_CH_LIST, 0, IW_PRIV_TYPE_INT | 50, "get_ch_list" }, - {PRIV_CMD_DUMP_MEM, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mem" }, - -#if CFG_ENABLE_WIFI_DIRECT - {PRIV_CMD_P2P_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_p2p_mode" }, -#endif -}; - -static const iw_handler rIwPrivHandler[] = { - [IOCTL_SET_INT - SIOCIWFIRSTPRIV] = priv_set_int, - [IOCTL_GET_INT - SIOCIWFIRSTPRIV] = priv_get_int, - [IOCTL_SET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STRUCT - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_GET_STRUCT - SIOCIWFIRSTPRIV] = priv_get_struct, - [IOCTL_SET_STRUCT_FOR_EM - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_SET_INTS - SIOCIWFIRSTPRIV] = priv_set_ints, - [IOCTL_GET_INTS - SIOCIWFIRSTPRIV] = priv_get_ints, -}; - -const struct iw_handler_def wext_handler_def = { - .num_standard = 0, - .num_private = (__u16)sizeof(rIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args), - .standard = (iw_handler *) NULL, - .private = rIwPrivHandler, - .private_args = rIwPrivTable, - .get_wireless_stats = wext_get_wireless_stats, -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPA/RSN Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPA IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x01", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPA IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPAIE */ - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WAPI Information Element . -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWAPIIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ELEM_ID_WAPI && i4InfoElemLen <= i4TotalIeLen) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* wextSrchDesiredWAPIIE */ -#endif - - -#if CFG_SUPPORT_WPS -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPS Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPS IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x04", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPS IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPSIE */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the name of the protocol used on the air. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] pcName Buffer to store protocol name string -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note If netif_carrier_ok, protocol name is returned; -* otherwise, "disconnected" is returned. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_name ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT char *pcName, - IN char *pcExtra - ) -{ - ENUM_PARAM_NETWORK_TYPE_T eNetWorkType; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcName); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcName)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (netif_carrier_ok(prNetDev)) { - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryNetworkTypeInUse, - &eNetWorkType, - sizeof(eNetWorkType), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - switch(eNetWorkType) { - case PARAM_NETWORK_TYPE_DS: - strcpy(pcName, "IEEE 802.11b"); - break; - case PARAM_NETWORK_TYPE_OFDM24: - strcpy(pcName, "IEEE 802.11bgn"); - break; - case PARAM_NETWORK_TYPE_AUTOMODE: - case PARAM_NETWORK_TYPE_OFDM5: - strcpy(pcName, "IEEE 802.11abgn"); - break; - case PARAM_NETWORK_TYPE_FH: - default: - strcpy(pcName, "IEEE 802.11"); - break; - } - } - else { - strcpy(pcName, "Disconnected"); - } - - return 0; -} /* wext_get_name */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL -* \param[in] prFreq Buffer to store frequency information -* \param[in] pcExtra NULL -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If infrastructure mode is not NET NET_TYPE_IBSS. -* \retval -EINVAL Invalid channel frequency. -* -* \note If infrastructure mode is IBSS, new channel frequency is set to device. -* The range of channel number depends on different regulatory domain. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - -#if 0 - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("set m:%d, e:%d, i:%d, flags:%d\n", - prIwFreq->m, prIwFreq->e, prIwFreq->i, prIwFreq->flags); - */ - - /* If setting by frequency, convert to a channel */ - if ((prIwFreq->e == 1) && - (prIwFreq->m >= (int) 2.412e8) && - (prIwFreq->m <= (int) 2.484e8)) { - - /* Change to KHz format */ - u4ChnlFreq = (UINT_32)(prIwFreq->m / (KILO / 10)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - /* Setting by channel number */ - else if ((prIwFreq->m > KILO) || (prIwFreq->e > 0)) { - return -EOPNOTSUPP; - } - else { - /* Change to channel number format */ - u4ChnlFreq = (UINT_32)prIwFreq->m; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetChannel, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - -#endif - - return 0; - -} /* wext_set_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFreq Buffer to store frequency information. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise -* -* \note If netif_carrier_ok, channel frequency information is stored in pFreq. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - UINT_32 u4Channel = 0; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: TODO skip checking in IBSS mode */ - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryFrequency, - &u4Channel, - sizeof(u4Channel), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - prIwFreq->m = (int) u4Channel; /* freq in KHz */ - prIwFreq->e = 3; - - return 0; - -} /* wext_get_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set operating mode. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - switch (*pu4Mode) { - case IW_MODE_AUTO: - eOpMode = NET_TYPE_AUTO_SWITCH; - break; - - case IW_MODE_ADHOC: - eOpMode = NET_TYPE_IBSS; - break; - - case IW_MODE_INFRA: - eOpMode = NET_TYPE_INFRA; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Set UNSUPPORTED Mode = %d.\n", __FUNCTION__, *pu4Mode)); - return -EOPNOTSUPP; - } - - //printk("%s(): Set Mode = %d\n", __FUNCTION__, *pu4Mode); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} /* wext_set_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get operating mode. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo NULL. -* \param[out] pu4Mode Buffer to store operating mode information. -* \param[in] pcExtra NULL. -* -* \retval 0 If data is valid. -* \retval -EINVAL Otherwise. -* -* \note If netif_carrier_ok, operating mode information is stored in pu4Mode. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - OUT unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch (eOpMode){ - case NET_TYPE_IBSS: - *pu4Mode = IW_MODE_ADHOC; - break; - - case NET_TYPE_INFRA: - *pu4Mode = IW_MODE_INFRA; - break; - - case NET_TYPE_AUTO_SWITCH: - *pu4Mode = IW_MODE_AUTO; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Get UNKNOWN Mode.\n", __FUNCTION__)); - return -EINVAL; - } - - return 0; -} /* wext_get_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the valid range for each configurable STA setting value. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer to iw_point structure, not used. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 If data is valid. -* -* \note The extra buffer (pcExtra) is filled with information from driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_range ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - OUT char *pcExtra - ) -{ - struct iw_range *prRange = NULL; - PARAM_RATES_EX aucSuppRate = {0}; /* data buffers */ - int i = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prRange = (struct iw_range *) pcExtra; - - memset(prRange, 0, sizeof(*prRange)); - prRange->throughput = 20000000; /* 20Mbps */ - prRange->min_nwid = 0; /* not used */ - prRange->max_nwid = 0; /* not used */ - - /* scan_capa not implemented */ - - /* event_capa[6]: kernel + driver capabilities */ - prRange->event_capa[0] = (IW_EVENT_CAPA_K_0 - | IW_EVENT_CAPA_MASK(SIOCGIWAP) - | IW_EVENT_CAPA_MASK(SIOCGIWSCAN) - /* can't display meaningful string in iwlist - | IW_EVENT_CAPA_MASK(SIOCGIWTXPOW) - | IW_EVENT_CAPA_MASK(IWEVMICHAELMICFAILURE) - | IW_EVENT_CAPA_MASK(IWEVASSOCREQIE) - | IW_EVENT_CAPA_MASK(IWEVPMKIDCAND) - */ - ); - prRange->event_capa[1] = IW_EVENT_CAPA_K_1; - - /* report 2.4G channel and frequency only */ - prRange->num_channels = (__u16) NUM_CHANNELS; - prRange->num_frequency = (__u8) NUM_CHANNELS; - for (i = 0; i < NUM_CHANNELS; i++) { - /* iwlib takes this number as channel number */ - prRange->freq[i].i = i + 1; - prRange->freq[i].m = channel_freq[i]; - prRange->freq[i].e = 6; /* Values in table in MHz */ - } - - rStatus = kalIoctl( - prGlueInfo, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - for (i = 0; i < IW_MAX_BITRATES && i < PARAM_MAX_LEN_RATES_EX ; i++) { - if (aucSuppRate[i] == 0) { - break; - } - prRange->bitrate[i] = (aucSuppRate[i] & 0x7F) * 500000; /* 0.5Mbps */ - } - prRange->num_bitrates = i; - - prRange->min_rts = 0; - prRange->max_rts = 2347; - prRange->min_frag = 256; - prRange->max_frag = 2346; - - prRange->min_pmp = 0; /* power management by driver */ - prRange->max_pmp = 0; /* power management by driver */ - prRange->min_pmt = 0; /* power management by driver */ - prRange->max_pmt = 0; /* power management by driver */ - prRange->pmp_flags = IW_POWER_RELATIVE; /* pm default flag */ - prRange->pmt_flags = IW_POWER_ON; /* pm timeout flag */ - prRange->pm_capa = IW_POWER_ON; /* power management by driver */ - - prRange->encoding_size[0] = 5; /* wep40 */ - prRange->encoding_size[1] = 16; /* tkip */ - prRange->encoding_size[2] = 16; /* ckip */ - prRange->encoding_size[3] = 16; /* ccmp */ - prRange->encoding_size[4] = 13; /* wep104 */ - prRange->encoding_size[5] = 16; /* wep128 */ - prRange->num_encoding_sizes = 6; - prRange->max_encoding_tokens = 6; /* token? */ - -#if WIRELESS_EXT < 17 - prRange->txpower_capa = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prRange->txpower_capa = IW_TXPOW_RELATIVE; -#endif - prRange->num_txpower = 5; - prRange->txpower[0] = 0; /* minimum */ - prRange->txpower[1] = 25; /* 25% */ - prRange->txpower[2] = 50; /* 50% */ - prRange->txpower[3] = 100; /* 100% */ - - prRange->we_version_compiled = WIRELESS_EXT; - prRange->we_version_source = WIRELESS_EXT; - - prRange->retry_capa = IW_RETRY_LIMIT; - prRange->retry_flags = IW_RETRY_LIMIT; - prRange->min_retry = 7; - prRange->max_retry = 7; - prRange->r_time_flags = IW_RETRY_ON; - prRange->min_r_time = 0; - prRange->max_r_time = 0; - - /* signal strength and link quality */ - /* Just define range here, reporting value moved to wext_get_stats() */ - prRange->sensitivity = -83; /* fixed value */ - prRange->max_qual.qual = 100; /* max 100% */ - prRange->max_qual.level = (__u8)(0x100 - 0); /* max 0 dbm */ - prRange->max_qual.noise = (__u8)(0x100 - 0); /* max 0 dbm */ - - /* enc_capa */ -#if WIRELESS_EXT > 17 - prRange->enc_capa = IW_ENC_CAPA_WPA | - IW_ENC_CAPA_WPA2 | - IW_ENC_CAPA_CIPHER_TKIP | - IW_ENC_CAPA_CIPHER_CCMP; -#endif - - /* min_pms; Minimal PM saving */ - /* max_pms; Maximal PM saving */ - /* pms_flags; How to decode max/min PM saving */ - - /* modul_capa; IW_MODUL_* bit field */ - /* bitrate_capa; Types of bitrates supported */ - - return 0; -} /* wext_get_range */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set BSSID of AP to connect. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prAddr Pointer to struct sockaddr structure containing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note Desired AP's BSSID is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_ap ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - return 0; -} /* wext_set_ap */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get AP MAC address. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prAddr Pointer to struct sockaddr structure storing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, AP's mac address is stored in pAddr->sa_data. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_ap ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prAddr); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAddr)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - if(prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_DISCONNECTED){ - memset(prAddr, 0, 6); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssid, - prAddr->sa_data, - ETH_ALEN, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; -} /* wext_get_ap */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set mlme operation request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer of iw_point header. -* \param[in] pcExtra Pointer to iw_mlme structure mlme request information. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP unsupported IW_MLME_ command. -* \retval -EINVAL Set MLME Fail, different bssid. -* -* \note Driver will start mlme operation if valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mlme ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - IN char *pcExtra - ) -{ - struct iw_mlme *prMlme = NULL; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prMlme = (struct iw_mlme *)pcExtra; - if (prMlme->cmd == IW_MLME_DEAUTH || prMlme->cmd == IW_MLME_DISASSOC) { - if (!netif_carrier_ok(prNetDev)) { - DBGLOG(INIT, INFO, ("[wifi] Set MLME Deauth/Disassoc, but netif_carrier_off\n")); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - return 0; - } - else { - DBGLOG(INIT, INFO, ("[wifi] unsupported IW_MLME_ command :%d\n", prMlme->cmd)); - return -EOPNOTSUPP; - } -} /* wext_set_mlme */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To issue scan request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData NULL. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EFAULT Tx power is off. -* -* \note Device will start scanning. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN union iwreq_data *prData, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - int essid_len = 0; - - ASSERT(prNetDev); - if (FALSE == GLUE_CHK_DEV(prNetDev)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if WIRELESS_EXT > 17 - /* retrieve SSID */ - if(prData) { - essid_len = ((struct iw_scan_req *)(((struct iw_point*)prData)->pointer))->essid_len; - } -#endif - - init_completion(&prGlueInfo->rScanComp); - - // TODO: parse flags and issue different scan requests? - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScan, - pcExtra, - essid_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 2 * KAL_HZ); - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - - - return 0; -} /* wext_set_scan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To write the ie to buffer -* -*/ -/*----------------------------------------------------------------------------*/ -static inline int snprintf_hex(char *buf, size_t buf_size, const u8 *data, - size_t len) -{ - size_t i; - char *pos = buf, *end = buf + buf_size; - int ret; - - if (buf_size == 0) - return 0; - - for (i = 0; i < len; i++) { - ret = snprintf(pos, end - pos, "%02x", - data[i]); - if (ret < 0 || ret >= end - pos) { - end[-1] = '\0'; - return pos - buf; - } - pos += ret; - } - end[-1] = '\0'; - return pos - buf; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get scan results, transform results from driver's format to WE's. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prData Pointer to iw_point structure, pData->length is the size of -* pcExtra buffer before used, and is updated after filling scan -* results. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 For success. -* \retval -ENOMEM If dynamic memory allocation fail. -* \retval -E2BIG Invalid length. -* -* \note Scan results is filled into pcExtra buffer, data size is updated in -* pData->length. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN OUT struct iw_point *prData, - IN char *pcExtra - ) -{ - UINT_32 i = 0; - UINT_32 j = 0; - P_PARAM_BSSID_LIST_EX_T prList = NULL; - P_PARAM_BSSID_EX_T prBss = NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - struct iw_event iwEvent; /* local iw_event buffer */ - - /* write pointer of extra buffer */ - char *pcCur = NULL; - /* pointer to the end of last full entry in extra buffer */ - char *pcValidEntryEnd = NULL; - char *pcEnd = NULL; /* end of extra buffer */ - - UINT_32 u4AllocBufLen = 0; - - /* arrange rate information */ - UINT_32 u4HighestRate = 0; - char aucRatesBuf[64]; - UINT_32 u4BufIndex; - - /* return value */ - int ret = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Initialize local variables */ - pcCur = pcExtra; - pcValidEntryEnd = pcExtra; - pcEnd = pcExtra + prData->length; /* end of extra buffer */ - - /* Allocate another query buffer with the same size of extra buffer */ - u4AllocBufLen = prData->length; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for scan list:%d\n", prData->length)); - ret = -ENOMEM; - goto error; - } - prList->u4NumberOfItems = 0; - - /* wait scan done */ - //printk ("wait for scan results\n"); - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 4 * KAL_HZ); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - /* Buffer length is not large enough. */ - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - -#if WIRELESS_EXT >= 17 - /* This feature is supported in WE-17 or above, limited by iwlist. - ** Return -E2BIG and iwlist will request again with a larger buffer. - */ - ret = -E2BIG; - /* Update length to give application a hint on result length */ - prData->length = (__u16)u4BufLen; - goto error; -#else - /* Realloc a larger query buffer here, but don't write too much to extra - ** buffer when filling it later. - */ - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - - u4AllocBufLen = u4BufLen; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for larger scan list :%ld\n", u4BufLen)); - ret = -ENOMEM; - goto error; - } - prList->NumberOfItems = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - DBGLOG(INIT, INFO, ("[wifi] larger buf:%d result:%ld\n", u4AllocBufLen, u4BufLen)); - ret = -E2BIG; - prData->length = (__u16)u4BufLen; - goto error; - } -#endif /* WIRELESS_EXT >= 17 */ - - } - - - if (prList->u4NumberOfItems > CFG_MAX_NUM_BSS_LIST) { - DBGLOG(INIT, INFO, ("[wifi] strange scan result count:%ld\n", - prList->u4NumberOfItems)); - goto error; - } - - /* Copy required data from pList to pcExtra */ - prBss = &prList->arBssid[0]; /* set to the first entry */ - for (i = 0; i < prList->u4NumberOfItems; ++i) { - /* BSSID */ - iwEvent.cmd = SIOCGIWAP; - iwEvent.len = IW_EV_ADDR_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwEvent.u.ap_addr.sa_data, prBss->arMacAddress, ETH_ALEN); - memcpy(pcCur, &iwEvent, IW_EV_ADDR_LEN); - pcCur += IW_EV_ADDR_LEN; - - /* SSID */ - iwEvent.cmd = SIOCGIWESSID; - /* Modification to user space pointer(essid.pointer) is not needed. */ - iwEvent.u.essid.length = (__u16)prBss->rSsid.u4SsidLen; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.essid.length; - - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.essid.flags = 1; - iwEvent.u.essid.pointer = NULL; - -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, iwEvent.len); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prBss->rSsid.aucSsid, iwEvent.u.essid.length); - pcCur += iwEvent.len; - /* Frequency */ - iwEvent.cmd = SIOCGIWFREQ; - iwEvent.len = IW_EV_FREQ_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.freq.m = prBss->rConfiguration.u4DSConfig; - iwEvent.u.freq.e = 3; /* (in KHz) */ - iwEvent.u.freq.i = 0; - memcpy(pcCur, &iwEvent, IW_EV_FREQ_LEN); - pcCur += IW_EV_FREQ_LEN; - - /* Operation Mode */ - iwEvent.cmd = SIOCGIWMODE; - iwEvent.len = IW_EV_UINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - if (prBss->eOpMode == NET_TYPE_IBSS) { - iwEvent.u.mode = IW_MODE_ADHOC; - } - else if (prBss->eOpMode == NET_TYPE_INFRA) { - iwEvent.u.mode = IW_MODE_INFRA; - } - else { - iwEvent.u.mode = IW_MODE_AUTO; - } - memcpy(pcCur, &iwEvent, IW_EV_UINT_LEN); - pcCur += IW_EV_UINT_LEN; - - /* Quality */ - iwEvent.cmd = IWEVQUAL; - iwEvent.len = IW_EV_QUAL_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.qual.qual = 0; /* Quality not available now */ - /* -100 < Rssi < -10, normalized by adding 0x100 */ - iwEvent.u.qual.level = 0x100 + prBss->rRssi; - iwEvent.u.qual.noise = 0; /* Noise not available now */ - iwEvent.u.qual.updated = IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_UPDATED \ - | IW_QUAL_NOISE_INVALID; - memcpy(pcCur, &iwEvent, IW_EV_QUAL_LEN); - pcCur += IW_EV_QUAL_LEN; - - /* Security Mode*/ - iwEvent.cmd = SIOCGIWENCODE; - iwEvent.len = IW_EV_POINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.pointer = NULL; - iwEvent.u.data.flags = 0; - iwEvent.u.data.length = 0; - if(!prBss->u4Privacy) { - iwEvent.u.data.flags |= IW_ENCODE_DISABLED; - } -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - pcCur += IW_EV_POINT_LEN; - - /* rearrange rate information */ - u4BufIndex = sprintf(aucRatesBuf, "Rates (Mb/s):"); - u4HighestRate = 0; - for (j = 0; j < PARAM_MAX_LEN_RATES_EX; ++j) { - UINT_8 curRate = prBss->rSupportedRates[j] & 0x7F; - if (curRate == 0) { - break; - } - - if (curRate > u4HighestRate) { - u4HighestRate = curRate; - } - - if (curRate == RATE_5_5M) { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " 5.5"); - } - else { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " %d", curRate / 2); - } - #if DBG - if (u4BufIndex > sizeof(aucRatesBuf)) { - //printk("rate info too long\n"); - break; - } - #endif - } - /* Report Highest Rates */ - iwEvent.cmd = SIOCGIWRATE; - iwEvent.len = IW_EV_PARAM_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.bitrate.value = u4HighestRate * 500000; - iwEvent.u.bitrate.fixed = 0; - iwEvent.u.bitrate.disabled = 0; - iwEvent.u.bitrate.flags = 0; - memcpy(pcCur, &iwEvent, iwEvent.len); - pcCur += iwEvent.len; - - #if WIRELESS_EXT >= 15 /* IWEVCUSTOM is available in WE-15 or above */ - /* Report Residual Rates */ - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = u4BufIndex; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 0; - #if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); - #else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - #endif - memcpy(pcCur + IW_EV_POINT_LEN, aucRatesBuf, u4BufIndex); - pcCur += iwEvent.len; - #endif /* WIRELESS_EXT >= 15 */ - - - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WPS /* search WPS IE (0xDD, 221, OUI: 0x0050f204 ) */ - if (wextSrchDesiredWPSIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } -#endif - - - /* Search RSN IE (0x30, 48). pBss->IEs starts from timestamp. */ - /* pBss->IEs starts from timestamp */ - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WAPI /* Android+ */ - if (wextSrchDesiredWAPIIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - (PUINT_8 *)&prDesiredIE)) { - -#if 0 - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; -#else - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = (2 + prDesiredIE->ucLength) * 2 + 8 /* wapi_ie= */; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 1; - - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - - pcCur += (IW_EV_POINT_LEN); - - pcCur += sprintf(pcCur, "wapi_ie="); - - snprintf_hex(pcCur, pcEnd - pcCur, (UINT_8 *)prDesiredIE, prDesiredIE->ucLength + 2); - - pcCur += (2 + prDesiredIE->ucLength) * 2 /* iwEvent.len */; -#endif - } -#endif - /* Complete an entry. Update end of valid entry */ - pcValidEntryEnd = pcCur; - /* Extract next bss */ - prBss = (P_PARAM_BSSID_EX_T)((char *)prBss + prBss->u4Length); - } - - /* Update valid data length for caller function and upper layer - * applications. - */ - prData->length = (pcValidEntryEnd - pcExtra); - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - -error: - /* free local query buffer */ - if (prList) { - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - } - - return ret; -} /* wext_get_scan */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set desired network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer of iw_point header. -* \param[in] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -E2BIG Essid string length is too big. -* \retval -EINVAL pcExtra is null pointer. -* \retval -EFAULT Driver fail to set new essid. -* -* \note If string lengh is ok, device will try connecting to the new network. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - IN char *pcExtra - ) -{ - PARAM_SSID_T rNewSsid; - UINT_32 cipher; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prEssid->length > IW_ESSID_MAX_SIZE) { - return -E2BIG; - } - - - /* set auth mode */ - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - //printk(KERN_INFO "IW_AUTH_WPA_VERSION_DISABLED->Param_AuthMode%s\n", - // (eAuthMode == AUTH_MODE_OPEN) ? "Open" : "Shared"); - } - else { - /* set auth mode */ - switch(prGlueInfo->rWpaInfo.u4KeyMgmt) { - case IW_AUTH_KEY_MGMT_802_1X: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA : AUTH_MODE_WPA2; - //printk("IW_AUTH_KEY_MGMT_802_1X->AUTH_MODE_WPA%s\n", - // (eAuthMode == AUTH_MODE_WPA) ? "" : "2"); - break; - case IW_AUTH_KEY_MGMT_PSK: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA_PSK: AUTH_MODE_WPA2_PSK; - //printk("IW_AUTH_KEY_MGMT_PSK->AUTH_MODE_WPA%sPSK\n", - // (eAuthMode == AUTH_MODE_WPA_PSK) ? "" : "2"); - break; -#if CFG_SUPPORT_WAPI /* Android+ */ - case IW_AUTH_KEY_MGMT_WAPI_PSK: - break; - case IW_AUTH_KEY_MGMT_WAPI_CERT: - break; -#endif - -//#if defined (IW_AUTH_KEY_MGMT_WPA_NONE) -// case IW_AUTH_KEY_MGMT_WPA_NONE: -// eAuthMode = AUTH_MODE_WPA_NONE; -// //printk("IW_AUTH_KEY_MGMT_WPA_NONE->AUTH_MODE_WPA_NONE\n"); -// break; -//#endif -#if CFG_SUPPORT_802_11W - case IW_AUTH_KEY_MGMT_802_1X_SHA256: - eAuthMode = AUTH_MODE_WPA2; - break; - case IW_AUTH_KEY_MGMT_PSK_SHA256: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; -#endif - default: - //printk(KERN_INFO DRV_NAME"strange IW_AUTH_KEY_MGMT : %ld set auto switch\n", - // prGlueInfo->rWpaInfo.u4KeyMgmt); - eAuthMode = AUTH_MODE_AUTO_SWITCH; - break; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - /* set encryption status */ - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | - prGlueInfo->rWpaInfo.u4CipherPairwise; - if (cipher & IW_AUTH_CIPHER_CCMP) { - //printk("IW_AUTH_CIPHER_CCMP->ENUM_ENCRYPTION3_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - //printk("IW_AUTH_CIPHER_TKIP->ENUM_ENCRYPTION2_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - //printk("IW_AUTH_CIPHER_WEPx->ENUM_ENCRYPTION1_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - //printk("IW_AUTH_CIPHER_NONE->ENUM_ENCRYPTION_DISABLED\n"); - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - //printk("unknown IW_AUTH_CIPHER->Param_EncryptionDisabled\n"); - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - -#if WIRELESS_EXT < 21 - /* GeorgeKuo: a length error bug exists in (WE < 21) cases, kernel before - ** 2.6.19. Cut the trailing '\0'. - */ - rNewSsid.u4SsidLen = (prEssid->length) ? prEssid->length - 1 : 0; -#else - rNewSsid.u4SsidLen = prEssid->length; -#endif - kalMemCopy(rNewSsid.aucSsid, pcExtra, rNewSsid.u4SsidLen); - - /* - rNewSsid.aucSsid[rNewSsid.u4SsidLen] = '\0'; - printk("set ssid(%lu): %s\n", rNewSsid.u4SsidLen, rNewSsid.aucSsid); - */ - - if (kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING "Fail to set ssid\n"); - return -EFAULT; - } - - - return 0; -} /* wext_set_essid */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer to iw_point structure containing essid information. -* \param[out] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, network essid is stored in pcExtra. -*/ -/*----------------------------------------------------------------------------*/ -//static PARAM_SSID_T ssid; -static int -wext_get_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - OUT char *pcExtra - ) -{ - //PARAM_SSID_T ssid; - - P_PARAM_SSID_T prSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - prSsid = kalMemAlloc(sizeof(PARAM_SSID_T), VIR_MEM_TYPE); - - if(!prSsid) { - return -ENOMEM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQuerySsid, - prSsid, - sizeof(PARAM_SSID_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if ((rStatus == WLAN_STATUS_SUCCESS) && (prSsid->u4SsidLen <= MAX_SSID_LEN)) { - kalMemCopy(pcExtra, prSsid->aucSsid, prSsid->u4SsidLen); - prEssid->length = prSsid->u4SsidLen; - prEssid->flags = 1; - } - - kalMemFree(prSsid, VIR_MEM_TYPE, sizeof(PARAM_SSID_T)); - - return 0; -} /* wext_get_essid */ - - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set tx desired bit rate. Three cases here -* iwconfig wlan0 auto -> Set to origianl supported rate set. -* iwconfig wlan0 18M -> Imply "fixed" case, set to 18Mbps as desired rate. -* iwconfig wlan0 18M auto -> Set to auto rate lower and equal to 18Mbps -* -* \param[in] prNetDev Pointer to the net_device handler. -* \param[in] prIwReqInfo Pointer to the Request Info. -* \param[in] prRate Pointer to the Rate Parameter. -* \param[in] pcExtra Pointer to the extra buffer. -* -* \retval 0 Update desired rate. -* \retval -EINVAL Wrong parameter -*/ -/*----------------------------------------------------------------------------*/ -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ) -{ - PARAM_RATES_EX aucSuppRate = {0}; - PARAM_RATES_EX aucNewRate = {0}; - UINT_32 u4NewRateLen = 0; - UINT_32 i; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("value = %d, fixed = %d, disable = %d, flags = %d\n", - prRate->value, prRate->fixed, prRate->disabled, prRate->flags); - */ - - rStatus = wlanQueryInformation( - prGlueInfo->prAdapter, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - - /* Case: AUTO */ - if (prRate->value < 0) { - if (prRate->fixed == 0) { - /* iwconfig wlan0 rate auto */ - - /* set full supported rate to device */ - /* printk("wlanoidQuerySupportedRates():u4BufLen = %ld\n", u4BufLen); */ - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - return 0; - } - else { - /* iwconfig wlan0 rate fixed */ - - /* fix rate to what? DO NOTHING */ - return -EINVAL; - } - } - - - aucNewRate[0] = prRate->value / 500000; /* In unit of 500k */ - - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; i++) { - /* check the given value is supported */ - if (aucSuppRate[i] == 0) { - break; - } - - if (aucNewRate[0] == aucSuppRate[i]) { - u4NewRateLen = 1; - break; - } - } - - if (u4NewRateLen == 0) { - /* the given value is not supported */ - /* return error or use given rate as upper bound? */ - return -EINVAL; - } - - if (prRate->fixed == 0) { - /* add all rates lower than desired rate */ - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; ++i) { - if (aucSuppRate[i] == 0) { - break; - } - - if (aucSuppRate[i] < aucNewRate[0]) { - aucNewRate[u4NewRateLen++] = aucSuppRate[i]; - } - } - } - - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucNewRate, - sizeof(aucNewRate), - &u4BufLen); - return 0; -} /* wext_set_rate */ - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current tx bit rate. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRate Pointer to iw_param structure to store current tx rate. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, current tx rate is stored in pRate. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRate, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - UINT_32 u4Rate = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prRate->value = u4Rate * 100; /* u4Rate is in unit of 100bps */ - prRate->fixed = 0; - - return 0; -} /* wext_get_rate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EINVAL Given value is out of range. -* -* \note If given value is valid, device will follow the new setting. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prRts->disabled == 1) { - u4RtsThresh = 2347; - } - else if (prRts->value < 0 || prRts->value > 2347) { - return -EINVAL; - } - else { - u4RtsThresh = (PARAM_RTS_THRESHOLD)prRts->value; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_set_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pRts. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347 || prRts->value < 0) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_get_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get fragmentation threshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFrag Pointer to iw_param structure containing frag threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pFrag. Fragmentation is disabled. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_frag ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prFrag, - IN char *pcExtra - ) -{ - ASSERT(prFrag); - - prFrag->value = 2346; - prFrag->fixed = 1; - prFrag->disabled = 1; - return 0; -} /* wext_get_frag */ - -#if 1 -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set TX power, or enable/disable the radio. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. iwconfig wlan0 txpow on/off are used -* to enable/disable the radio. -*/ -/*----------------------------------------------------------------------------*/ - -static int -wext_set_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - int ret = 0; - //PARAM_DEVICE_POWER_STATE ePowerState; - ENUM_ACPI_STATE_T ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if(prTxPow->disabled){ - /* <1> disconnect */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("######set disassoc failed\n")); - } else { - DBGLOG(INIT, INFO, ("######set assoc ok\n")); - } - - /* <2> mark to power state flag*/ - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d3(0)\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - - } - else { - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d0\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - } - - prGlueInfo->ePowerState = ePowerState; - - return ret; -} /* wext_set_txpow */ - - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get TX power. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - //PARAM_DEVICE_POWER_STATE ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: wlanoidQueryAcpiDevicePowerState() reports capability, not - * current state. Use GLUE_INFO_T to store state. - */ - //ePowerState = prGlueInfo->ePowerState; - - /* TxPow parameters: Fixed at relative 100% */ -#if WIRELESS_EXT < 17 - prTxPow->flags = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prTxPow->flags = IW_TXPOW_RELATIVE; -#endif - prTxPow->value = 100; - prTxPow->fixed = 1; - //prTxPow->disabled = (ePowerState != ParamDeviceStateD3) ? FALSE : TRUE; - prTxPow->disabled = TRUE; - - return 0; -} /* wext_get_txpow */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Buffer to store key content. -* -* \retval 0 Success. -* -* \note Securiry information is stored in pEnc except key content. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - //ENUM_ENCRYPTION_STATUS_T eEncMode; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR2(prNetDev, prEnc)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryEncryptionStatus, - &eEncMode, - sizeof(eEncMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch(eEncMode) { - case ENUM_WEP_DISABLED: - prEnc->flags = IW_ENCODE_DISABLED; - break; - case ENUM_WEP_ENABLED: - prEnc->flags = IW_ENCODE_ENABLED; - break; - case ENUM_WEP_KEY_ABSENT: - prEnc->flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - break; - default: - prEnc->flags = IW_ENCODE_ENABLED; - break; - } - - /* Cipher, Key Content, Key ID can't be queried */ - prEnc->flags |= IW_ENCODE_NOKEY; -#endif - return 0; -} /* wext_get_encode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 wepBuf[48]; - -static int -wext_set_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //UINT_8 wepBuf[48]; - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* reset to default mode */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - /* iwconfig wlan0 key off */ - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED ) { - eAuthMode = AUTH_MODE_OPEN; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - eEncStatus = ENUM_ENCRYPTION_DISABLED; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; - } - - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prEnc->length == 5 || prEnc->length == 13 || prEnc->length == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prEnc->length; - prWepKey->u4KeyLength = prEnc->length; - kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prEnc->length); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetAuthMode fail 0x%lx\n", rStatus); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus); - return -EFAULT; - } - - return 0; - } -#endif - return -EOPNOTSUPP; -} /* wext_set_encode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note New Power Management Mode is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prPower, - IN char *pcExtra - ) -{ -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - DBGLOG(INIT, INFO, ("%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value)); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - return 0; -} /* wext_set_power */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Power management mode is stored in pTxPow->value. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prPower, - IN char *pcExtra - ) -{ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - PARAM_POWER_MODE ePowerMode = Param_PowerModeCAM; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if 0 -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - //printk(KERN_INFO "wext_get_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - return 0; -} /* wext_get_power */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set authentication parameters. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] rpAuth Pointer to iw_param structure containing authentication information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_auth ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prAuth, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAuth)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: -#if CFG_SUPPORT_WAPI - if (wlanQueryWapiMode(prGlueInfo->prAdapter)){ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - } - else { - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; - } -#else - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; -#endif - break; - - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->rWpaInfo.u4CipherPairwise = prAuth->value; - break; - - case IW_AUTH_CIPHER_GROUP: - prGlueInfo->rWpaInfo.u4CipherGroup = prAuth->value; - break; - - case IW_AUTH_KEY_MGMT: - prGlueInfo->rWpaInfo.u4KeyMgmt = prAuth->value; -#if CFG_SUPPORT_WAPI - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_PSK || - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_CERT) { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - } -#endif - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WPS) - prGlueInfo->fgWpsActive = TRUE; - else - prGlueInfo->fgWpsActive = FALSE; - break; - - case IW_AUTH_80211_AUTH_ALG: - prGlueInfo->rWpaInfo.u4AuthAlg = prAuth->value; - break; - - case IW_AUTH_PRIVACY_INVOKED: - prGlueInfo->rWpaInfo.fgPrivacyInvoke = prAuth->value; - break; -#if CFG_SUPPORT_802_11W - case IW_AUTH_MFP: - //printk("wext_set_auth IW_AUTH_MFP=%d\n", prAuth->value); - prGlueInfo->rWpaInfo.u4Mfp = prAuth->value; - break; -#endif -#if CFG_SUPPORT_WAPI - case IW_AUTH_WAPI_ENABLED: - { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - break; -#endif - default: - /* - printk(KERN_INFO "[wifi] unsupported IW_AUTH_INDEX :%d\n", prAuth->flags); - */ - break; - } - return 0; -} /* wext_set_auth */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -#if CFG_SUPPORT_WAPI - UINT_8 keyStructBuf[320]; /* add/remove key shared buffer */ -#else - UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -static int -wext_set_encode_ext ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - - - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - struct iw_encode_ext *prIWEncExt = (struct iw_encode_ext *) pcExtra; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //ENUM_PARAM_OP_MODE_T eOpMode = NET_TYPE_AUTO_SWITCH; - -#if CFG_SUPPORT_WAPI - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; -#endif - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - -#if CFG_SUPPORT_WAPI - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - if (prEnc->flags & IW_ENCODE_DISABLED) { - //printk(KERN_INFO "[wapi] IW_ENCODE_DISABLED\n"); - return 0; - } - /* KeyID */ - prWpiKey->ucKeyID = (prEnc->flags & IW_ENCODE_INDEX); - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr.sa_data, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - } - - } - else -#endif - { - - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - /* - printk("IW_ENCODE_DISABLED: ID:%d, Addr:[" MACSTR "]\n", - prRemoveKey->KeyIndex, MAC2STR(prRemoveKey->BSSID)); - */ - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("remove key error:%lx\n", rStatus)); - } - return 0; - } - - //return 0; - //printk ("alg %x\n", prIWEncExt->alg); - - switch (prIWEncExt->alg) { - case IW_ENCODE_ALG_NONE: - break; - case IW_ENCODE_ALG_WEP: - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prIWEncExt->key_len == 5 || prIWEncExt->key_len == 13 || prIWEncExt->key_len == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prIWEncExt->key_len; - prWepKey->u4KeyLength = prIWEncExt->key_len; - //kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prIWEncExt->key_len); - kalMemCopy(prWepKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAuthMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - } else { - DBGLOG(INIT, INFO, ("key length %x\n", prIWEncExt->key_len)); - DBGLOG(INIT, INFO, ("key error\n")); - } - - break; - case IW_ENCODE_ALG_TKIP: - case IW_ENCODE_ALG_CCMP: -#if CFG_SUPPORT_802_11W - case IW_ENCODE_ALG_AES_CMAC: -#endif - { - - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1: 0; -#if CFG_SUPPORT_802_11W - if (prKey->u4KeyIndex > 5) -#else - if (prKey->u4KeyIndex > 3) -#endif - { - DBGLOG(INIT, INFO, ("key index error:0x%lx\n", prKey->u4KeyIndex)); - /* key id is out of range */ - return -EINVAL; - } - - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - } - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - /* switch tx/rx MIC key for sta */ - if (prIWEncExt->alg == IW_ENCODE_ALG_TKIP && prIWEncExt->key_len == 32) { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, 16); - memcpy(((PUINT_8)prKey->aucKeyMaterial) + 16, prIWEncExt->key + 24, 8); - memcpy((prKey->aucKeyMaterial) + 24, prIWEncExt->key + 16, 8); - } - else { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - } - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add key error:%lx\n", rStatus)); - return -EFAULT; - } - break; - } - } - - return 0; -} /* wext_set_encode_ext */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set country code -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_country ( - IN struct net_device *prNetDev, - IN struct iwreq *iwr - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - UINT_8 aucCountry[2]; - - ASSERT(prNetDev); - - /* iwr->u.data.pointer should be like "COUNTRY US", "COUNTRY EU" - * and "COUNTRY JP" - */ - if (FALSE == GLUE_CHK_PR2(prNetDev, iwr) || - !iwr->u.data.pointer || iwr->u.data.length < 10) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - aucCountry[0] = *((PUINT_8)iwr->u.data.pointer + 8); - aucCountry[1] = *((PUINT_8)iwr->u.data.pointer + 9); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCountryCode, - &aucCountry[0], - 2, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl() (Linux Wireless Extensions) routines -* -* \param[in] prDev Net device requested. -* \param[in] ifr The ifreq structure for seeting the wireless extension. -* \param[in] i4Cmd The wireless extension ioctl command. -* -* \retval zero On success. -* \retval -EOPNOTSUPP If the cmd is not supported. -* \retval -EFAULT If copy_to_user goes wrong. -* \retval -EINVAL If any value's out of range. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -wext_support_ioctl ( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *iwr = (struct iwreq*)prIfReq; - struct iw_request_info rIwReqInfo; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - //printk("%d CMD:0x%x\n", jiffies_to_msecs(jiffies), i4Cmd); - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case SIOCGIWNAME: /* 0x8B01, get wireless protocol name */ - ret = wext_get_name(prDev, &rIwReqInfo, (char *)&iwr->u.name, NULL); - break; - - /* case SIOCSIWNWID: 0x8B02, deprecated */ - /* case SIOCGIWNWID: 0x8B03, deprecated */ - - case SIOCSIWFREQ: /* 0x8B04, set channel */ - ret = wext_set_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCGIWFREQ: /* 0x8B05, get channel */ - ret = wext_get_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCSIWMODE: /* 0x8B06, set operation mode */ - ret = wext_set_mode(prDev, NULL, &iwr->u.mode, NULL); - //ret = 0; - break; - - case SIOCGIWMODE: /* 0x8B07, get operation mode */ - ret = wext_get_mode(prDev, NULL, &iwr->u.mode, NULL); - break; - - /* case SIOCSIWSENS: 0x8B08, unsupported */ - /* case SIOCGIWSENS: 0x8B09, unsupported */ - - /* case SIOCSIWRANGE: 0x8B0A, unused */ - case SIOCGIWRANGE: /* 0x8B0B, get range of parameters */ - if (iwr->u.data.pointer != NULL) { - /* Buffer size shoule be large enough */ - if (iwr->u.data.length < sizeof(struct iw_range)) { - ret = -E2BIG; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_range), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* reset all fields */ - memset(prExtraBuf, 0, sizeof(struct iw_range)); - iwr->u.data.length = sizeof(struct iw_range); - - ret = wext_get_range(prDev, NULL, &iwr->u.data, prExtraBuf); - /* Push up to the caller */ - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_range)); - prExtraBuf = NULL; - } - else { - ret = -EINVAL; - } - break; - - case SIOCSIWPRIV: /* 0x8B0C, Country */ - ret = wext_set_country(prDev, iwr); - break; - - /* case SIOCGIWPRIV: 0x8B0D, handled in wlan_do_ioctl() */ - /* caes SIOCSIWSTATS: 0x8B0E, unused */ - /* case SIOCGIWSTATS: - get statistics, intercepted by wireless_process_ioctl() in wireless.c, - redirected to dev_iwstats(), dev->get_wireless_stats(). - */ - /* case SIOCSIWSPY: 0x8B10, unsupported */ - /* case SIOCGIWSPY: 0x8B11, unsupported*/ - /* case SIOCSIWTHRSPY: 0x8B12, unsupported */ - /* case SIOCGIWTHRSPY: 0x8B13, unsupported*/ - - case SIOCSIWAP: /* 0x8B14, set access point MAC addresses (BSSID) */ - if (iwr->u.ap_addr.sa_data[0] == 0 && - iwr->u.ap_addr.sa_data[1] == 0 && - iwr->u.ap_addr.sa_data[2] == 0 && - iwr->u.ap_addr.sa_data[3] == 0 && - iwr->u.ap_addr.sa_data[4] == 0 && - iwr->u.ap_addr.sa_data[5] == 0) { - /* WPA Supplicant will set 000000000000 in - ** wpa_driver_wext_deinit(), do nothing here or disassoc again? - */ - ret = 0; - break; - } - else { - ret = wext_set_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - } - break; - - case SIOCGIWAP: /* 0x8B15, get access point MAC addresses (BSSID) */ - ret = wext_get_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - break; - - case SIOCSIWMLME: /* 0x8B16, request MLME operation */ - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_mlme)) { - DBGLOG(INIT, INFO, ("MLME buffer strange:%d\n", iwr->u.data.length)); - ret = -EINVAL; - break; - } - - if (!iwr->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, iwr->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = wext_set_mlme(prDev, NULL, &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - /* case SIOCGIWAPLIST: 0x8B17, deprecated */ - case SIOCSIWSCAN: /* 0x8B18, scan request */ - if (iwr->u.data.pointer == NULL) { - ret = wext_set_scan(prDev, NULL, NULL, NULL); - } -#if WIRELESS_EXT > 17 - else if (iwr->u.data.length == sizeof(struct iw_scan_req)) { - prExtraBuf = kalMemAlloc(MAX_SSID_LEN, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, ((struct iw_scan_req *) (iwr->u.data.pointer))->essid, - ((struct iw_scan_req *) (iwr->u.data.pointer))->essid_len)) { - ret = -EFAULT; - } else { - ret = wext_set_scan(prDev, NULL, (union iwreq_data *) &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, MAX_SSID_LEN); - prExtraBuf = NULL; - } -#endif - else { - ret = -EINVAL; - } - break; -#if 1 - case SIOCGIWSCAN: /* 0x8B19, get scan results */ - if (!iwr->u.data.pointer|| !iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - u4ExtraSize = iwr->u.data.length; - /* allocate the same size of kernel buffer to store scan results. */ - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* iwr->u.data.length may be updated by wext_get_scan() */ - ret = wext_get_scan(prDev, NULL, &iwr->u.data, prExtraBuf); - if (ret != 0) { - if (ret == -E2BIG) { - DBGLOG(INIT, INFO, ("[wifi] wext_get_scan -E2BIG\n")); - } - } - else { - /* check updated length is valid */ - ASSERT(iwr->u.data.length <= u4ExtraSize); - if (iwr->u.data.length > u4ExtraSize) { - DBGLOG(INIT, INFO, ("Updated result length is larger than allocated (%d > %ld)\n", - iwr->u.data.length, u4ExtraSize)); - iwr->u.data.length = u4ExtraSize; - } - - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - - break; - -#endif - -#if 1 - case SIOCSIWESSID: /* 0x8B1A, set SSID (network name) */ - if (iwr->u.essid.length > IW_ESSID_MAX_SIZE) { - ret = -E2BIG; - break; - } - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE + 4, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.essid.pointer, - iwr->u.essid.length)) { - ret = -EFAULT; - } - else { - /* Add trailing '\0' for printk */ - //prExtraBuf[iwr->u.essid.length] = 0; - //printk(KERN_INFO "wext_set_essid: %s (%d)\n", prExtraBuf, iwr->u.essid.length); - ret = wext_set_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - //printk ("set essid %d\n", ret); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE + 4); - prExtraBuf = NULL; - break; - -#endif - - case SIOCGIWESSID: /* 0x8B1B, get SSID */ - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - if (iwr->u.essid.length < IW_ESSID_MAX_SIZE) { - DBGLOG(INIT, INFO, ("[wifi] iwr->u.essid.length:%d too small\n", - iwr->u.essid.length)); - ret = -E2BIG; /* let caller try larger buffer */ - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - /* iwr->u.essid.length is updated by wext_get_essid() */ - - ret = wext_get_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - if (ret == 0) { - if (copy_to_user(iwr->u.essid.pointer, prExtraBuf, iwr->u.essid.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE); - prExtraBuf = NULL; - - break; - - /* case SIOCSIWNICKN: 0x8B1C, not supported */ - /* case SIOCGIWNICKN: 0x8B1D, not supported */ - - case SIOCSIWRATE: /* 0x8B20, set default bit rate (bps) */ - //ret = wext_set_rate(prDev, &rIwReqInfo, &iwr->u.bitrate, NULL); - break; - - case SIOCGIWRATE: /* 0x8B21, get current bit rate (bps) */ - ret = wext_get_rate(prDev, NULL, &iwr->u.bitrate, NULL); - break; - - case SIOCSIWRTS: /* 0x8B22, set rts/cts threshold */ - ret = wext_set_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - case SIOCGIWRTS: /* 0x8B23, get rts/cts threshold */ - ret = wext_get_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - /* case SIOCSIWFRAG: 0x8B24, unsupported */ - case SIOCGIWFRAG: /* 0x8B25, get frag threshold */ - ret = wext_get_frag(prDev, NULL, &iwr->u.frag, NULL); - break; - - case SIOCSIWTXPOW: /* 0x8B26, set relative tx power (in %) */ - ret = wext_set_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - case SIOCGIWTXPOW: /* 0x8B27, get relative tx power (in %) */ - ret = wext_get_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - /* case SIOCSIWRETRY: 0x8B28, unsupported */ - /* case SIOCGIWRETRY: 0x8B29, unsupported */ - -#if 1 - case SIOCSIWENCODE: /* 0x8B2A, set encoding token & mode */ - /* Only DISABLED case has NULL pointer and length == 0 */ - if (iwr->u.encoding.pointer) { - if (iwr->u.encoding.length > 16) { - ret = -E2BIG; - break; - } - - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - case SIOCGIWENCODE: /* 0x8B2B, get encoding token & mode */ - /* check pointer */ - ret = wext_get_encode(prDev, NULL, &iwr->u.encoding, NULL); - break; - - case SIOCSIWPOWER: /* 0x8B2C, set power management */ - ret = wext_set_power(prDev, NULL, &iwr->u.power, NULL); - break; - - case SIOCGIWPOWER: /* 0x8B2D, get power management */ - ret = wext_get_power(prDev, NULL, &iwr->u.power, NULL); - break; - -#if WIRELESS_EXT > 17 - case SIOCSIWGENIE: /* 0x8B30, set gen ie */ - if (iwr->u.data.pointer) { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (1 /* wlanQueryWapiMode(prGlueInfo->prAdapter) */) { - /* Fixed length structure */ -#if CFG_SUPPORT_WAPI - if (iwr->u.data.length > 42 /* The max wapi ie buffer */) { - ret = -EINVAL; - break; - } -#endif - u4ExtraSize = iwr->u.data.length; - if (u4ExtraSize) { - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - iwr->u.data.length)) { - ret = -EFAULT; - } - else { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - prExtraBuf, - u4ExtraSize, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] set wapi assoc info error:%lx\n", rStatus); -#endif -#if CFG_SUPPORT_WPS2 - PUINT_8 prDesiredIE = NULL; - if (wextSrchDesiredWPSIE(prExtraBuf, - u4ExtraSize, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[WSC] set WSC assoc info error:%lx\n", rStatus); - } - } -#endif -#if CFG_SUPPORT_WAPI - } -#endif - } - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - } - break; - - case SIOCGIWGENIE: /* 0x8B31, get gen ie, unused */ - break; - -#endif - - case SIOCSIWAUTH: /* 0x8B32, set auth mode params */ - ret = wext_set_auth(prDev, NULL, &iwr->u.param, NULL); - break; - - /* case SIOCGIWAUTH: 0x8B33, unused? */ - case SIOCSIWENCODEEXT: /* 0x8B34, set extended encoding token & mode */ - if (iwr->u.encoding.pointer) { - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode_ext(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - /* case SIOCGIWENCODEEXT: 0x8B35, unused? */ - - case SIOCSIWPMKSA: /* 0x8B36, pmksa cache operation */ - #if 1 - if (iwr->u.data.pointer) { - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_pmksa)) { - ret = -EINVAL; - break; - } - - u4ExtraSize = sizeof(struct iw_pmksa); - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - sizeof(struct iw_pmksa))) { - ret = -EFAULT; - } - else { - switch(((struct iw_pmksa *)prExtraBuf)->cmd) { - case IW_PMKSA_ADD: - /* - printk(KERN_INFO "IW_PMKSA_ADD [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)pExtraBuf)->bssid.sa_data)); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, - ((struct iw_pmksa *)prExtraBuf)->bssid.sa_data, - 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, - ((struct iw_pmksa *)prExtraBuf)->pmkid, - IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - } - break; - case IW_PMKSA_REMOVE: - /* - printk(KERN_INFO "IW_PMKSA_REMOVE [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)buf)->bssid.sa_data)); - */ - break; - case IW_PMKSA_FLUSH: - /* - printk(KERN_INFO "IW_PMKSA_FLUSH\n"); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - } - break; - default: - DBGLOG(INIT, INFO, ("UNKNOWN iw_pmksa command:%d\n", - ((struct iw_pmksa *)prExtraBuf)->cmd)); - ret = -EFAULT; - break; - } - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - else if (iwr->u.data.length != 0) { - ret = -EINVAL; - break; - } - #endif - break; - -#endif - - default: - /* printk(KERN_NOTICE "unsupported IOCTL: 0x%x\n", i4Cmd); */ - ret = -EOPNOTSUPP; - break; - } - - //printk("%ld CMD:0x%x ret:%d\n", jiffies_to_msecs(jiffies), i4Cmd, ret); - - return ret; -} /* wext_support_ioctl */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To send an event (RAW socket pacekt) to user process actively. -* -* \param[in] prGlueInfo Glue layer info. -* \param[in] u4cmd Whcih event command we want to indicate to user process. -* \param[in] pData Data buffer to be indicated. -* \param[in] dataLen Available data size in pData. -* -* \return (none) -* -* \note Event is indicated to upper layer if cmd is supported and data is valid. -* Using of kernel symbol wireless_send_event(), which is defined in -* after WE-14 (2.4.20). -*/ -/*----------------------------------------------------------------------------*/ -void -wext_indicate_wext_event ( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4dataLen - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; -#if WIRELESS_EXT >= 15 - unsigned char *pucDesiredIE = NULL; - unsigned char aucExtraInfoBuf[200]; -#endif -#if WIRELESS_EXT < 18 - int i; -#endif - - memset(&wrqu, 0, sizeof(wrqu)); - - switch (u4Cmd) { - case SIOCGIWTXPOW: - memcpy(&wrqu.power, pucData, u4dataLen); - break; - case SIOCGIWSCAN: - complete_all(&prGlueInfo->rScanComp); - break; - - case SIOCGIWAP: - if (pucData) { - memcpy(&wrqu.ap_addr.sa_data, pucData, ETH_ALEN); - } - else { - memset(&wrqu.ap_addr.sa_data, 0, ETH_ALEN); - } - break; - - case IWEVASSOCREQIE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0x30, &pucDesiredIE)) { - /* RSN IE found */ - } -#if 0 - else if (wextSrchDesiredWPSIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPS IE found */ - } -#endif - else if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPA IE found */ - } -#if CFG_SUPPORT_WAPI /* Android+ */ - else if (wextSrchDesiredWAPIIE(pucData, u4dataLen, &pucDesiredIE)) { - //printk("wextSrchDesiredWAPIIE!!\n"); - /* WAPI IE found */ - } -#endif - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - #if WIRELESS_EXT < 18 - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, "ASSOCINFO(ReqIEs="); - /* printk(KERN_DEBUG "assoc info buffer size needed:%d\n", infoElemLen * 2 + 17); */ - /* translate binary string to hex string, requirement of IWEVCUSTOM */ - for (i = 0; i < pucDesiredIE[1] + 2 ; ++i) { - pucExtraInfo += sprintf(pucExtraInfo, "%02x", pucDesiredIE[i]); - } - pucExtraInfo = aucExtraInfoBuf; - wrqu.data.length = 17 + (pucDesiredIE[1] + 2) * 2; - #else - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - #endif -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVMICHAELMICFAILURE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - if (pucData) { - P_PARAM_AUTH_REQUEST_T pAuthReq = (P_PARAM_AUTH_REQUEST_T)pucData; - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, - "MLME-MICHAELMICFAILURE.indication "); - pucExtraInfo += sprintf(pucExtraInfo, - "%s", - (pAuthReq->u4Flags == PARAM_AUTH_REQUEST_GROUP_ERROR) ? - "groupcast " : "unicast "); - - wrqu.data.length = pucExtraInfo - aucExtraInfoBuf; - pucExtraInfo = aucExtraInfoBuf; - } -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVPMKIDCAND: - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2 && - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_802_1X) { - - /* only used in WPA2 */ -#if WIRELESS_EXT >= 18 - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)pucData; - - struct iw_pmkid_cand rPmkidCand; - pucExtraInfo = aucExtraInfoBuf; - - rPmkidCand.flags = prPmkidCand->u4Flags; - rPmkidCand.index = 0; - kalMemCopy(rPmkidCand.bssid.sa_data, prPmkidCand->arBSSID, 6); - - kalMemCopy(pucExtraInfo, (PUINT_8)&rPmkidCand, sizeof(struct iw_pmkid_cand)); - wrqu.data.length = sizeof(struct iw_pmkid_cand); - - /* pmkid canadidate list is supported after WE-18 */ - /* indicate struct iw_pmkid_cand */ -#else - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, WE < 18\n"); */ - goto skip_indicate_event; -#endif - } - else { - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, NOT WPA2\n"); */ - goto skip_indicate_event; - } - break; - - case IWEVCUSTOM: - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - kalMemCopy(pucExtraInfo, pucData, sizeof(PTA_IPC_T)); - wrqu.data.length = sizeof(PTA_IPC_T); - break; - - default: - /* printk(KERN_INFO "Unsupported wext event:%x\n", cmd); */ - goto skip_indicate_event; - } - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prDevHandler, u4Cmd, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; -} /* wext_indicate_wext_event */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] pDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -* -*/ -/*----------------------------------------------------------------------------*/ -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - FALSE, - &bufLen); - -stat_out: - return pStats; -} /* wlan_get_wireless_stats */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To report the private supported IOCTLs table to user space. -* -* \param[in] prNetDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 For success. -* \retval -E2BIG For user's buffer size is too small. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_point *prData= (struct iw_point *)&prIwReq->u.data; - UINT_16 u2BufferSize = 0; - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rIwPrivTable, sizeof(rIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* wext_get_priv */ - -#endif /* WIRELESS_EXT */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_wext_priv.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_wext_priv.c deleted file mode 100755 index aafe5696310a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/gl_wext_priv.c +++ /dev/null @@ -1,2238 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_wext_priv.c#4 $ -*/ - -/*! \file gl_wext_priv.c - \brief This file includes private ioctl support. -*/ - - - -/* -** $Log: gl_wext_priv.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 20 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function[WCXRP00001202] [MT6628 Wi-Fi][FW] Adding the New PN init code - * use return to avoid the ioctl return not supported - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Fixed typo. - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 24 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * correct typo for NVRAM access. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable OID_CUSTOM_MTK_WIFI_TEST for RFTest & META tool - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support -** \main\maintrunk.MT5921\32 2009-10-08 10:33:25 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\31 2009-09-29 16:46:21 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\30 2009-09-29 14:46:47 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\29 2009-09-29 14:28:48 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\28 2009-09-28 22:21:38 GMT mtk01090 -** Refine lines to supress compile warning -** \main\maintrunk.MT5921\27 2009-09-28 20:19:14 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\26 2009-08-18 22:56:53 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\25 2009-05-07 22:26:15 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\24 2009-04-29 10:07:05 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\23 2009-04-24 09:09:45 GMT mtk01088 -** mark the code not used at linux supplicant v0.6.7 -** \main\maintrunk.MT5921\22 2008-11-24 21:03:51 GMT mtk01425 -** 1. Add PTA_ENABLED flag -** \main\maintrunk.MT5921\21 2008-08-29 14:55:59 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\20 2008-07-16 15:23:20 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\19 2008-07-15 17:43:11 GMT mtk01084 -** modify variable name -** \main\maintrunk.MT5921\18 2008-07-14 14:37:58 GMT mtk01104 -** Add exception handle about length in function priv_set_struct() -** \main\maintrunk.MT5921\17 2008-07-14 13:55:32 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\16 2008-07-09 00:20:15 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\15 2008-06-02 11:15:22 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\14 2008-05-30 19:31:07 GMT mtk01461 -** Add IOCTL for Power Mode -** \main\maintrunk.MT5921\13 2008-05-30 18:57:15 GMT mtk01461 -** Not use wlanoidSetCSUMOffloadForLinux() -** \main\maintrunk.MT5921\12 2008-05-30 15:13:18 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\11 2008-05-29 14:16:31 GMT mtk01084 -** rename for wlanoidSetBeaconIntervalForLinux -** \main\maintrunk.MT5921\10 2008-04-17 23:06:37 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\9 2008-03-31 21:00:55 GMT mtk01461 -** Add priv IOCTL for VOIP setting -** \main\maintrunk.MT5921\8 2008-03-31 13:49:43 GMT mtk01461 -** Add priv ioctl to turn on / off roaming -** \main\maintrunk.MT5921\7 2008-03-26 15:35:14 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\6 2008-03-11 14:50:59 GMT mtk01461 -** Unify priv ioctl -** \main\maintrunk.MT5921\5 2007-11-06 19:32:30 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\4 2007-10-30 12:01:39 GMT MTK01425 -** 1. Update wlanQueryInformation and wlanSetInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext_priv.h" -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NUM_SUPPORTED_OIDS (sizeof(arWlanOidReqTable) / sizeof(WLAN_REQ_ENTRY)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -#if 0 /* CFG_SUPPORT_WPS */ -static int -priv_set_appie ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); - -static int -priv_set_filter ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); -#endif /* CFG_SUPPORT_WPS */ - -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ); - -#if 0 -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_8 aucOidBuf[4096] = {0}; - -/* OID processing table */ -/* Order is important here because the OIDs should be in order of - increasing value for binary searching. */ -static WLAN_REQ_ENTRY arWlanOidReqTable[] = { - /* - {(NDIS_OID)rOid, - (PUINT_8)pucOidName, - fgQryBufLenChecking, fgSetBufLenChecking, fgIsHandleInGlueLayerOnly, u4InfoBufLen, - pfOidQueryHandler, - pfOidSetHandler} - */ - /* General Operational Characteristics */ - - /* Ethernet Operational Characteristics */ - {OID_802_3_CURRENT_ADDRESS, - DISP_STRING("OID_802_3_CURRENT_ADDRESS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 6, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentAddr, - NULL}, - - /* OID_802_3_MULTICAST_LIST */ - /* OID_802_3_MAXIMUM_LIST_SIZE */ - /* Ethernet Statistics */ - - /* NDIS 802.11 Wireless LAN OIDs */ - {OID_802_11_SUPPORTED_RATES, - DISP_STRING("OID_802_11_SUPPORTED_RATES"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_RATES_EX), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySupportedRates, - NULL}, - /* - {OID_802_11_CONFIGURATION, - DISP_STRING("OID_802_11_CONFIGURATION"), - TRUE, TRUE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_802_11_CONFIG_T), - (PFN_OID_HANDLER_FUNC_REQ)reqExtQueryConfiguration, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetConfiguration}, - */ - {OID_PNP_SET_POWER, - DISP_STRING("OID_PNP_SET_POWER"), - TRUE, FALSE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_DEVICE_POWER_STATE), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetAcpiDevicePowerState}, - - /* Custom OIDs */ - {OID_CUSTOM_OID_INTERFACE_VERSION, - DISP_STRING("OID_CUSTOM_OID_INTERFACE_VERSION"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryOidInterfaceVersion, - NULL}, - - /* -#if PTA_ENABLED - {OID_CUSTOM_BT_COEXIST_CTRL, - DISP_STRING("OID_CUSTOM_BT_COEXIST_CTRL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_BT_COEXIST_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtCoexistCtrl}, -#endif - */ - - /* - {OID_CUSTOM_POWER_MANAGEMENT_PROFILE, - DISP_STRING("OID_CUSTOM_POWER_MANAGEMENT_PROFILE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPwrMgmtProfParam, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPwrMgmtProfParam}, - {OID_CUSTOM_PATTERN_CONFIG, - DISP_STRING("OID_CUSTOM_PATTERN_CONFIG"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_PATTERN_SEARCH_CONFIG_STRUC_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPatternConfig}, - {OID_CUSTOM_BG_SSID_SEARCH_CONFIG, - DISP_STRING("OID_CUSTOM_BG_SSID_SEARCH_CONFIG"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBgSsidParam}, - {OID_CUSTOM_VOIP_SETUP, - DISP_STRING("OID_CUSTOM_VOIP_SETUP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryVoipConnectionStatus, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetVoipConnectionStatus}, - {OID_CUSTOM_ADD_TS, - DISP_STRING("OID_CUSTOM_ADD_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidAddTS}, - {OID_CUSTOM_DEL_TS, - DISP_STRING("OID_CUSTOM_DEL_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidDelTS}, - */ - - /* -#if CFG_LP_PATTERN_SEARCH_SLT - {OID_CUSTOM_SLT, - DISP_STRING("OID_CUSTOM_SLT"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySltResult, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSltMode}, -#endif - - {OID_CUSTOM_ROAMING_EN, - DISP_STRING("OID_CUSTOM_ROAMING_EN"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRoamingFunction, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetRoamingFunction}, - {OID_CUSTOM_WMM_PS_TEST, - DISP_STRING("OID_CUSTOM_WMM_PS_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWiFiWmmPsTest}, - {OID_CUSTOM_COUNTRY_STRING, - DISP_STRING("OID_CUSTOM_COUNTRY_STRING"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentCountry, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetCurrentCountry}, - -#if CFG_SUPPORT_802_11D - {OID_CUSTOM_MULTI_DOMAIN_CAPABILITY, - DISP_STRING("OID_CUSTOM_MULTI_DOMAIN_CAPABILITY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMultiDomainCap, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMultiDomainCap}, -#endif - - {OID_CUSTOM_GPIO2_MODE, - DISP_STRING("OID_CUSTOM_GPIO2_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_PARAM_GPIO2_MODE_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetGPIO2Mode}, - {OID_CUSTOM_CONTINUOUS_POLL, - DISP_STRING("OID_CUSTOM_CONTINUOUS_POLL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CONTINUOUS_POLL_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryContinuousPollInterval, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetContinuousPollProfile}, - {OID_CUSTOM_DISABLE_BEACON_DETECTION, - DISP_STRING("OID_CUSTOM_DISABLE_BEACON_DETECTION"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryDisableBeaconDetectionFunc, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisableBeaconDetectionFunc}, - */ - - /* WPS */ - /* - {OID_CUSTOM_DISABLE_PRIVACY_CHECK, - DISP_STRING("OID_CUSTOM_DISABLE_PRIVACY_CHECK"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisablePriavcyCheck}, - */ - - {OID_CUSTOM_MCR_RW, - DISP_STRING("OID_CUSTOM_MCR_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMcrRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMcrWrite}, - - {OID_CUSTOM_EEPROM_RW, - DISP_STRING("OID_CUSTOM_EEPROM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetEepromWrite}, - - {OID_CUSTOM_SW_CTRL, - DISP_STRING("OID_CUSTOM_SW_CTRL"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySwCtrlRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSwCtrlWrite}, - - {OID_CUSTOM_MEM_DUMP, - DISP_STRING("OID_CUSTOM_MEM_DUMP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MEM_DUMP_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMemDump, - NULL}, - - {OID_CUSTOM_TEST_MODE, - DISP_STRING("OID_CUSTOM_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetTestMode}, - - /* - {OID_CUSTOM_TEST_RX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_RX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestRxStatus, - NULL}, - {OID_CUSTOM_TEST_TX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_TX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestTxStatus, - NULL}, - */ - {OID_CUSTOM_ABORT_TEST_MODE, - DISP_STRING("OID_CUSTOM_ABORT_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAbortTestMode}, - {OID_CUSTOM_MTK_WIFI_TEST, - DISP_STRING("OID_CUSTOM_MTK_WIFI_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_MTK_WIFI_TEST_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestQueryAutoTest, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAutoTest}, - - /* OID_CUSTOM_EMULATION_VERSION_CONTROL */ - - /* BWCS */ -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {OID_CUSTOM_BWCS_CMD, - DISP_STRING("OID_CUSTOM_BWCS_CMD"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PTA_IPC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBT, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBT}, -#endif - -/* {OID_CUSTOM_SINGLE_ANTENNA, - DISP_STRING("OID_CUSTOM_SINGLE_ANTENNA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBtSingleAntenna, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtSingleAntenna}, - {OID_CUSTOM_SET_PTA, - DISP_STRING("OID_CUSTOM_SET_PTA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPta, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPta}, - */ - - { OID_CUSTOM_MTK_NVRAM_RW, - DISP_STRING("OID_CUSTOM_MTK_NVRAM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryNvramRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetNvramWrite }, - - { OID_CUSTOM_CFG_SRC_TYPE, - DISP_STRING("OID_CUSTOM_CFG_SRC_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_CFG_SRC_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCfgSrcType, - NULL }, - - { OID_CUSTOM_EEPROM_TYPE, - DISP_STRING("OID_CUSTOM_EEPROM_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_EEPROM_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromType, - NULL }, - -#if CFG_SUPPORT_WAPI - {OID_802_11_WAPI_MODE, - DISP_STRING("OID_802_11_WAPI_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiMode}, - {OID_802_11_WAPI_ASSOC_INFO, - DISP_STRING("OID_802_11_WAPI_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiAssocInfo}, - {OID_802_11_SET_WAPI_KEY, - DISP_STRING("OID_802_11_SET_WAPI_KEY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_WPI_KEY_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiKey}, -#endif - -#if CFG_SUPPORT_WPS2 - {OID_802_11_WSC_ASSOC_INFO, - DISP_STRING("OID_802_11_WSC_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWSCAssocInfo}, -#endif -}; - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatching function for private ioctl region (SIOCIWFIRSTPRIV ~ -* SIOCIWLASTPRIV). -* -* \param[in] prNetDev Net device requested. -* \param[in] prIfReq Pointer to ifreq structure. -* \param[in] i4Cmd Command ID between SIOCIWFIRSTPRIV and SIOCIWLASTPRIV. -* -* \retval 0 for success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_support_ioctl ( - IN struct net_device *prNetDev, - IN OUT struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_request_info rIwReqInfo; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case IOCTL_SET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_set_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_GET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_get_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_SET_STRUCT: - case IOCTL_SET_STRUCT_FOR_EM: - return priv_set_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - case IOCTL_GET_STRUCT: - return priv_get_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - default: - return -EOPNOTSUPP; - - } /* end of switch */ - -}/* priv_support_ioctl */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_PTA_IPC_T prPtaIpc; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_MODE: - //printk("TestMode=%ld\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY) { - prNdisReq->ndisOidCmd = OID_CUSTOM_TEST_MODE; - } - else if (pu4IntBuf[1] == 0) { - prNdisReq->ndisOidCmd = OID_CUSTOM_ABORT_TEST_MODE; - } - else { - status = 0; - break; - } - prNdisReq->inNdisOidlength = 0; - prNdisReq->outNdisOidLength = 0; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY && - pu4IntBuf[2] == PRIV_CMD_TEST_MAGIC_KEY) { - prGlueInfo->fgMcrAccessAllowed = TRUE; - } - status = 0; - break; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; -#endif - - case PRIV_CMD_SW_CTRL: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - case PRIV_CMD_CSUM_OFFLOAD: - { - UINT_32 u4CSUMFlags; - - - if (pu4IntBuf[1] == 1) { - u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - } - else if (pu4IntBuf[1] == 0) { - u4CSUMFlags = 0; - } - else { - return -EINVAL; - } - - if (kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen - ) == WLAN_STATUS_SUCCESS) { - if (pu4IntBuf[1] == 1) { - prNetDev->features |= NETIF_F_HW_CSUM; - } else if (pu4IntBuf[1] == 0) { - prNetDev->features &= ~NETIF_F_HW_CSUM; - } - } - } - break; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - case PRIV_CMD_POWER_MODE: - kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - break; - - case PRIV_CMD_WMM_PS: - { - PARAM_CUSTOM_WMM_PS_TEST_STRUC_T rWmmPsTest; - - rWmmPsTest.bmfgApsdEnAc = (UINT_8)pu4IntBuf[1]; - rWmmPsTest.ucIsEnterPsAtOnce = (UINT_8)pu4IntBuf[2]; - rWmmPsTest.ucIsDisableUcTrigger = (UINT_8)pu4IntBuf[3]; - rWmmPsTest.reserved = 0; - - kalIoctl(prGlueInfo, - wlanoidSetWiFiWmmPsTest, - (PVOID)&rWmmPsTest, - sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - break; - - #if 0 - case PRIV_CMD_ADHOC_MODE: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAdHocMode, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - - case PRIV_CUSTOM_BWCS_CMD: - - DBGLOG(REQ, INFO, ("pu4IntBuf[1] = %x, size of PTA_IPC_T = %d.\n", pu4IntBuf[1], sizeof(PARAM_PTA_IPC_T))); - - prPtaIpc = (P_PTA_IPC_T) aucOidBuf; - prPtaIpc->u.aucBTPParams[0] = (UINT_8) (pu4IntBuf[1] >> 24); - prPtaIpc->u.aucBTPParams[1] = (UINT_8) (pu4IntBuf[1] >> 16); - prPtaIpc->u.aucBTPParams[2] = (UINT_8) (pu4IntBuf[1] >> 8); - prPtaIpc->u.aucBTPParams[3] = (UINT_8) (pu4IntBuf[1]); - - DBGLOG(REQ, INFO, ("BCM BWCS CMD : PRIV_CUSTOM_BWCS_CMD : aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3])); - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - sizeof(PARAM_PTA_IPC_T), - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - - case PRIV_CMD_BAND_CONFIG: - { - DBGLOG(INIT, INFO, ("CMD set_band=%u\n", pu4IntBuf[1])); - } - break; - -#if CFG_ENABLE_WIFI_DIRECT - case PRIV_CMD_P2P_MODE: - { - PARAM_CUSTOM_P2P_SET_STRUC_T rSetP2P; - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - - rSetP2P.u4Enable = pu4IntBuf[1]; - rSetP2P.u4Mode = pu4IntBuf[2]; - - if(!rSetP2P.u4Enable) { - p2pNetUnregister(prGlueInfo, TRUE); - } - - rWlanStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pMode, - (PVOID)&rSetP2P, /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if(rSetP2P.u4Enable) { - p2pNetRegister(prGlueInfo, TRUE); - } - - - } - break; -#endif - - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - /* - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], 4)) { - printk(KERN_NOTICE "priv_get_int() copy_to_user oidBuf fail(3)\n"); - return -EFAULT; - } - */ - } - return status; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; -#endif - - case PRIV_CMD_DUMP_MEM: - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - -#if 1 - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } -#endif - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MEM_DUMP; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[0]; - } - return status; - - case PRIV_CMD_SW_CTRL: - //printk(" addr=0x%08lx\n", pu4IntBuf[1]); - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_POWER_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_ADHOC_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAdHocMode, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - #endif - - case PRIV_CMD_BAND_CONFIG: - DBGLOG(INIT, INFO, ("CMD get_band=\n")); - prIwReqData->mode = 0; - return status; - - default: - break; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i, j = 0; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - if (kalIsAPmode(prGlueInfo)) { - for (i = 0; i < NumOfChannel; i++) { - if ((aucChannelList[i].ucChannelNum <= 13) || - (aucChannelList[i].ucChannelNum == 36 || aucChannelList[i].ucChannelNum == 40 || - aucChannelList[i].ucChannelNum == 44 || aucChannelList[i].ucChannelNum == 48)) { - ch[j] = (INT_32)aucChannelList[i].ucChannelNum; - j++; - } - } - } - else { - for (j = 0; j < NumOfChannel; j++) { - ch[j] = (INT_32)aucChannelList[j].ucChannelNum; - } - } - - prIwReqData->data.length = j; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } - default: - return -EOPNOTSUPP; - } - - return status; -} /* priv_get_int */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int array handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd, u4BufLen; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_SET_TX_POWER: - { - INT_32 *setting = prIwReqData->data.pointer; - UINT_16 i; - -#if 0 - printk("Tx power num = %d\n", prIwReqData->data.length); - - printk("Tx power setting = %d %d %d %d\n", - setting[0], setting[1], setting[2], setting[3]); -#endif - prTxpwr = &prGlueInfo->rTxPwr; - if (setting[0] == 0 && prIwReqData->data.length == 4 /* argc num */) { - /* 0 (All networks), 1 (legacy STA), 2 (Hotspot AP), 3 (P2P), 4 (BT over Wi-Fi) */ - if (setting[1] == 1 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GLegacyStaPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GLegacyStaPwrOffset = setting[3]; - } - if (setting[1] == 2 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GHotspotPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GHotspotPwrOffset = setting[3]; - } - if (setting[1] == 3 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GP2pPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GP2pPwrOffset = setting[3]; - } - if (setting[1] == 4 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GBowPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GBowPwrOffset = setting[3]; - } - } - else if (setting[0] == 1 && prIwReqData->data.length == 2) { - prTxpwr->ucConcurrencePolicy = setting[1]; - } - else if (setting[0] == 2 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<14; i++) - prTxpwr->acTxPwrLimit2G[i] = setting[2]; - } - else if (setting[1] <= 14) - prTxpwr->acTxPwrLimit2G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 3 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<4; i++) - prTxpwr->acTxPwrLimit5G[i] = setting[2]; - } - else if (setting[1] <= 4) - prTxpwr->acTxPwrLimit5G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 4 && prIwReqData->data.length == 2) { - if (setting[1] == 0) { - wlanDefTxPowerCfg(prGlueInfo->prAdapter); - } - rStatus = kalIoctl(prGlueInfo, - wlanoidSetTxPower, - prTxpwr, - sizeof(SET_TXPWR_CTRL_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - } - else - return -EFAULT; - } - return status; - default: - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int array handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - for (i = 0; i < NumOfChannel; i++) { - ch[i] = (INT_32)aucChannelList[i].ucChannelNum; - } - - prIwReqData->data.length = NumOfChannel; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } - default: - break; - } - - return status; -} /* priv_get_int */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set structure handler. -* -* \param[in] pDev Net device requested. -* \param[in] prIwReqData Pointer to iwreq_data structure. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - int status = 0; - //WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4CmdLen = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - PUINT_32 pu4IntBuf = NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - //ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - //ASSERT(pcExtra); - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwReqData)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - - switch (u4SubCmd) { -#if 0 //PTA_ENABLED - case PRIV_CMD_BT_COEXIST: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_CUSTOM_BT_COEXIST_T) >= u4CmdLen); - if (sizeof(PARAM_CUSTOM_BT_COEXIST_T) < u4CmdLen) { - return -EFAULT; - } - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } - - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBtCoexistCtrl, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); - if (WLAN_STATUS_SUCCESS != rStatus) { - status = -EFAULT; - } - break; -#endif - - case PRIV_CUSTOM_BWCS_CMD: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_PTA_IPC_T) >= u4CmdLen); - if (sizeof(PARAM_PTA_IPC_T) < u4CmdLen) { - return -EFAULT; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("ucCmdLen = %d, size of PTA_IPC_T = %d, prIwReqData->data = 0x%x.\n", u4CmdLen, sizeof(PARAM_PTA_IPC_T), prIwReqData->data)); - - DBGLOG(REQ, INFO, ("priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - )); - - DBGLOG(REQ, INFO, ("*pcExtra = 0x%x\n", *pcExtra)); - #endif - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("priv_set_struct(): BWCS CMD = %02x%02x%02x%02x\n", - aucOidBuf[2], aucOidBuf[3], aucOidBuf[4], aucOidBuf[5])); -#endif - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - -#if 1 - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - -#if CFG_SUPPORT_WPS2 - case PRIV_CMD_WSC_PROBE_REQ: - { - /* retrieve IE for Probe Request */ - if (prIwReqData->data.length > 0) { - if (copy_from_user(prGlueInfo->aucWSCIE, prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prGlueInfo->u2WSCIELen = prIwReqData->data.length; - } - else { - prGlueInfo->u2WSCIELen = 0; - } - } - break; -#endif - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - if (!kalMemCmp(&aucOidBuf[0], pcExtra, prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("pcExtra buffer is valid\n")); - } - else - DBGLOG(REQ, INFO, ("pcExtra 0x%p\n", pcExtra)); - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0], &u4BufLen); - /* Copy result to user space */ - ((P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0])->outNdisOidLength = u4BufLen; - - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("copy_to_user oidBuf fail\n")); - status = -EFAULT; - } - - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - //kalMemCopy(&prNdisReq->ndisOidContent[0], prIwReqData->data.pointer, 8); - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - default: - return -EOPNOTSUPP; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get struct handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] cmd Private sub-command. -* -* \retval 0 For success. -* \retval -EFAULT If copy from user space buffer fail. -* \retval -EOPNOTSUPP Parameter "cmd" not recognized. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq= NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - PUINT_32 pu4IntBuf = NULL; - int status = 0; - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - ASSERT(prNetDev); - ASSERT(prIwReqData); - if (!prNetDev || !prIwReqData) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid param(0x%p, 0x%p)\n", - prNetDev, prIwReqData)); - return -EINVAL; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - memset(aucOidBuf, 0, sizeof(aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - sizeof(NDIS_TRANSPORT_STRUCT))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0]; -#if 0 - printk(KERN_NOTICE "\n priv_get_struct cmd 0x%02x len:%d OID:0x%08x OID Len:%d\n", - cmd, - pIwReq->u.data.length, - ndisReq->ndisOidCmd, - ndisReq->inNdisOidlength); -#endif - if (priv_get_ndis(prNetDev, prNdisReq, &u4BufLen) == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - u4BufLen + sizeof(NDIS_TRANSPORT_STRUCT) - sizeof(prNdisReq->ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(1)\n")); - return -EFAULT; - } - return 0; - } - else { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - return -EFAULT; - } - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - //printk("len=%d Result=%08lx\n", u4BufLen, *(PUINT_32)&prNdisReq->ndisOidContent[4]); - - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], - 4 /* OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent)*/)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - } - return 0; - break; - default: - DBGLOG(REQ, WARN, ("get struct cmd:0x%lx\n", u4SubCmd)); - return -EOPNOTSUPP; - } -} /* priv_get_struct */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a set operation for a single OID. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4SetInfoLen = 0; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Set OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - if (NULL == prWlanReqEntry->pfOidSetHandler) { - //WARNLOG(("Set %s: Null set handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgSetBufLenChecking) { - if (prNdisReq->inNdisOidlength != prWlanReqEntry->u4InfoBufLen) { - DBGLOG(REQ, WARN, ("Set %s: Invalid length (current=%ld, needed=%ld)\n", - prWlanReqEntry->pucOidName, - prNdisReq->inNdisOidlength, - prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - return -EINVAL; - } - } - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidSetHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4SetInfoLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4SetInfoLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EFAULT; - } - - return 0; -} /* priv_set_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a query operation for a single OID. Basically we -* return information about the current state of the OID in question. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL invalid input parameters -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - UINT_32 u4BufLen = 0; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Query OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - - if (NULL == prWlanReqEntry->pfOidQueryHandler) { - //WARNLOG(("Query %s: Null query handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgQryBufLenChecking) { - if (prNdisReq->inNdisOidlength < prWlanReqEntry->u4InfoBufLen) { - /* Not enough room in InformationBuffer. Punt */ - //WARNLOG(("Query %s: Buffer too short (current=%ld, needed=%ld)\n", - //prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - - status = WLAN_STATUS_INVALID_LENGTH; - return -EINVAL; - } - } - - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidQueryHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4BufLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4BufLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EOPNOTSUPP; - } - - return 0; -} /* priv_get_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search desired OID. -* -* \param rOid[in] Desired NDIS_OID -* \param ppWlanReqEntry[out] Found registered OID entry -* -* \retval TRUE: Matched OID is found -* \retval FALSE: No matched OID is found -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ) -{ - INT_32 i, j, k; - - i = 0; - j = NUM_SUPPORTED_OIDS - 1; - - while (i <= j) { - k = (i + j) / 2; - - if (rOid == arWlanOidReqTable[k].rOid) { - *ppWlanReqEntry = &arWlanOidReqTable[k]; - return TRUE; - } else if (rOid < arWlanOidReqTable[k].rOid) { - j = k - 1; - } else { - i = k + 1; - } - } - - return FALSE; -} /* reqSearchSupportedOidEntry */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the radio configuration used in IBSS -* mode and RF test mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[out] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_802_11_CONFIG_T prQueryConfig = (P_PARAM_802_11_CONFIG_T)pvQueryBuffer; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen = 0; - - DEBUGFUNC("wlanoidQueryConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_CONFIG_T); - if (u4QueryBufferLen < sizeof(PARAM_802_11_CONFIG_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - kalMemZero(prQueryConfig, sizeof(PARAM_802_11_CONFIG_T)); - - /* Update the current radio configuration. */ - prQueryConfig->u4Length = sizeof(PARAM_802_11_CONFIG_T); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - prQueryConfig->rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - return rStatus; - -} /* end of reqExtQueryConfiguration() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the radio configuration used in IBSS -* mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_PARAM_802_11_CONFIG_T prNewConfig = (P_PARAM_802_11_CONFIG_T)pvSetBuffer; - UINT_32 u4SetInfoLen = 0; - - DEBUGFUNC("wlanoidSetConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_802_11_CONFIG_T); - - if (u4SetBufferLen < *pu4SetInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* OID_802_11_CONFIGURATION. If associated, NOT_ACCEPTED shall be returned. */ - if (prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - ASSERT(pvSetBuffer); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - return rStatus; - -} /* end of reqExtSetConfiguration() */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set beacon detection function enable/disable state -* This is mainly designed for usage under BT inquiry state (disable function). -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prGlueInfo); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - /* WIFI is enabled, when ACPI is D0 (ParamDeviceStateD0 = 1). And vice versa */ - - //rStatus = wlanSetInformation(prGlueInfo->prAdapter, - // wlanoidSetAcpiDevicePowerState, - // pvSetBuffer, - // u4SetBufferLen, - // pu4SetInfoLen); - return rStatus; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/arm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/arm.c deleted file mode 100755 index 4322fa303a71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/arm.c +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** -*[File] mt6516-evb.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* dummy file for build system -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: mt6516-evb.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/hif.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/hif.h deleted file mode 100755 index 23eac4684d56..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/hif.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif.h#1 $ -*/ - -/*! \file "hif.h" - \brief Functions for the driver to register bus and setup the IRQ - - Functions for the driver to register bus and setup the IRQ -*/ - - - -/* -** $Log: hif.h $ - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 17 2010 cp.wu - * NULL - * add ENE SDIO host workaround for x86 linux platform. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\4 2009-10-20 17:38:28 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\3 2009-09-28 20:19:20 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\2 2009-08-18 22:57:05 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\2 2008-09-22 23:18:17 GMT mtk01461 -** Update driver for code review -** Revision 1.1 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -*/ - -#ifndef _HIF_H -#define _HIF_H - - -#if MTK_WCN_HIF_SDIO -#include "hif_sdio.h" -#endif - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define SDIO_X86_WORKAROUND_WRITE_MCR 0x00C4 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* host interface's private data structure, which is attached to os glue -** layer info structure. - */ -typedef struct _GL_HIF_INFO_T { -#if MTK_WCN_HIF_SDIO - MTK_WCN_HIF_SDIO_CLTCTX cltCtx; - const MTK_WCN_HIF_SDIO_FUNCINFO *prFuncInfo; -#else - struct sdio_func *func; -#endif - BOOLEAN fgIntReadClear; - BOOLEAN fgMbxReadClear; -} GL_HIF_INFO_T, *P_GL_HIF_INFO_T; - - -#if CFG_DBG_GPIO_PINS - -extern void -mtk_wcn_stp_debug_gpio_assert(UINT_32 dwIndex, UINT_32 dwMethod); - - -/* Platform DEPENDENT configurations: MT6516 GPIO pin name */ -#define GPIO_6516(x) (GPIO##x) -#define GPIO_PLATFORM(x) GPIO_6516(x) - -/* Platform independent configurations */ -#define DBG_TIE_DIR 0x40000000UL -#define DBG_LOW 0x0UL -#define DBG_HIGH 0x1UL -#define DBG_TIE_LOW (DBG_TIE_DIR | DBG_LOW) -#define DBG_TIE_HIGH (DBG_TIE_DIR | DBG_HIGH) - -#define DBG_TOGGLE(x) (0x80000000UL | x) -#define DBG_TOGGLE_NUM(x) (x & 0xFFF) -#define GPIO_INVALID 0xFFFF - -typedef enum { - IDX_ERR = 0, - IDX_TX_THREAD, - IDX_TX_REQ, - IDX_TX_PORT_WRITE, - IDX_STP_MTX_BT, - IDX_STP_MTX_FM, /* 5 */ - IDX_STP_MTX_GPS, - IDX_STP_MTX_WIFI, - IDX_STP_MTX_WMT, - IDX_LOOP_CNT, - IDX_NO_BUF, /*10 */ - IDX_BT_TX, - IDX_BT_RX, - IDX_GPS_RX, - IDX_GPS_2, - IDX_GPS_3, - IDX_GPS_TX, - IDX_STP_MAX -} DBG_PIN; - -#define DBG_MTX_OFFSET (IDX_STP_MTX_BT) /* index of mutex0 */ -#endif -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -glRegisterBus( - probe_card pfProbe, - remove_card pfRemove - ); - -VOID -glUnregisterBus( - remove_card pfRemove - ); - -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ); - -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ); - -BOOL -glBusInit ( - PVOID pvData - ); - -VOID -glBusRelease ( - PVOID pData - ); - -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ); - -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ); - -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _HIF_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/hif_sdio.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/hif_sdio.h deleted file mode 100755 index a2375fd34894..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/hif_sdio.h +++ /dev/null @@ -1,277 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif_sdio.h#2 $ -*/ - -/*! \file "hif_sdio.h" - \brief - - -*/ - -/* -** $Log: $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 02 2012 terry.wu - * NULL - * Fix build error if HAVE_AEE_FEATURE = n - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 07 25 2010 george.kuo - * - * Move hif_sdio driver to linux directory. - * - * 07 23 2010 george.kuo - * - * Add MT6620 driver source tree - * , including char device driver (wmt, bt, gps), stp driver, interface driver (tty ldisc and hif_sdio), and bt hci driver. -** -** -*/ - -#ifndef _HIF_SDIO_H -#define _HIF_SDIO_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#define HIF_SDIO_DEBUG (0) /* 0:trun off debug msg and assert, 1:trun off debug msg and assert */ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "mtk_porting.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CFG_CLIENT_COUNT (8) - -#define HIF_DEFAULT_BLK_SIZE (256) -#define HIF_DEFAULT_VENDOR (0x037A) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Function info provided by client driver */ -typedef struct _MTK_WCN_HIF_SDIO_FUNCINFO MTK_WCN_HIF_SDIO_FUNCINFO; - -/* Client context provided by hif_sdio driver for the following function call */ -typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX; - -/* Callback functions provided by client driver */ -typedef INT32 (*MTK_WCN_HIF_SDIO_PROBE)(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *); -typedef INT32 (*MTK_WCN_HIF_SDIO_REMOVE)(MTK_WCN_HIF_SDIO_CLTCTX); -typedef INT32 (*MTK_WCN_HIF_SDIO_IRQ)(MTK_WCN_HIF_SDIO_CLTCTX); - -/* Function info provided by client driver */ -struct _MTK_WCN_HIF_SDIO_FUNCINFO { - UINT16 manf_id; /* TPLMID_MANF: manufacturer ID */ - UINT16 card_id; /* TPLMID_CARD: card ID */ - UINT16 func_num; /* Function Number */ - UINT16 blk_sz; /* Function block size */ -}; - -/* Client info provided by client driver */ -typedef struct _MTK_WCN_HIF_SDIO_CLTINFO { - const MTK_WCN_HIF_SDIO_FUNCINFO *func_tbl; /* supported function info table */ - UINT32 func_tbl_size; /* supported function table info element number */ - MTK_WCN_HIF_SDIO_PROBE hif_clt_probe; /* callback function for probing */ - MTK_WCN_HIF_SDIO_REMOVE hif_clt_remove; /* callback function for removing */ - MTK_WCN_HIF_SDIO_IRQ hif_clt_irq; /* callback function for interrupt handling */ -} MTK_WCN_HIF_SDIO_CLTINFO; - -/* function info provided by registed function */ -typedef struct _MTK_WCN_HIF_SDIO_REGISTINFO { - const MTK_WCN_HIF_SDIO_CLTINFO *sdio_cltinfo; /* client's MTK_WCN_HIF_SDIO_CLTINFO pointer */ - const MTK_WCN_HIF_SDIO_FUNCINFO *func_info; /* supported function info pointer */ -} MTK_WCN_HIF_SDIO_REGISTINFO; - -/* Card info provided by probed function */ -typedef struct _MTK_WCN_HIF_SDIO_PROBEINFO { - struct sdio_func* func; /* probed sdio function pointer */ - INT8 clt_idx; /* registered function table info element number (initial value is -1) */ - MTK_WCN_BOOL interrupted; /* TRUE: interrupted, FALSE: not interrupted */ - void* private_data_p; /* clt's private data pointer */ -} MTK_WCN_HIF_SDIO_PROBEINFO; - -/* work queue info needed by worker */ -typedef struct _MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO { - struct work_struct probe_work; /* work queue structure */ - MTK_WCN_HIF_SDIO_REGISTINFO *registinfo_p; /* MTK_WCN_HIF_SDIO_REGISTINFO pointer of the client */ - INT8 probe_idx; /* probed function table info element number (initial value is -1) */ -} MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO; - -/* error code returned by hif_sdio driver (use NEGATIVE number) */ -typedef enum { - HIF_SDIO_ERR_SUCCESS = 0, - HIF_SDIO_ERR_FAIL, /* generic error */ - HIF_SDIO_ERR_INVALID_PARAM, - HIF_SDIO_ERR_DUPLICATED, - HIF_SDIO_ERR_UNSUP_MANF_ID, - HIF_SDIO_ERR_UNSUP_CARD_ID, - HIF_SDIO_ERR_INVALID_FUNC_NUM, - HIF_SDIO_ERR_INVALID_BLK_SZ, -} MTK_WCN_HIF_SDIO_ERR ; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/*! - * \brief A macro used to describe an SDIO function - * - * Fill an MTK_WCN_HIF_SDIO_FUNCINFO structure with function-specific information - * - * \param manf the 16 bit manufacturer id - * \param card the 16 bit card id - * \param func the 16 bit function number - * \param b_sz the 16 bit function block size - */ -#define MTK_WCN_HIF_SDIO_FUNC(manf, card, func, b_sz) \ - .manf_id = (manf), .card_id = (card), .func_num = (func), .blk_sz = (b_sz) - -/*! - * \brief A debug print used to print debug messages while compiler flag HIF_SDIO_DEBUG on. - * - */ -#if HIF_SDIO_DEBUG -#define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__, ## args) -#else -#define DPRINTK(fmt, args...) -#endif - -/*! - * \brief ASSERT function definition. - * - */ -#if HIF_SDIO_DEBUG -#define ASSERT(expr) if ( !(expr) ) { \ - printk("assertion failed! %s[%d]: %s\n",\ - __FUNCTION__, __LINE__, #expr); \ - BUG_ON( !(expr) );\ - } -#else -#define ASSERT(expr) do {} while(0) -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*! - * \brief MTK hif sdio client registration function - * - * Client uses this function to do hif sdio registration - * - * \param pinfo a pointer of client's information - * - * \retval 0 register successfully - * \retval < 0 error code - */ -extern INT32 mtk_wcn_hif_sdio_client_reg ( - const MTK_WCN_HIF_SDIO_CLTINFO *pinfo - ); - -extern INT32 mtk_wcn_hif_sdio_client_unreg ( - const MTK_WCN_HIF_SDIO_CLTINFO *pinfo - ); - -extern INT32 mtk_wcn_hif_sdio_readb ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT8 pvb - ); - -extern INT32 mtk_wcn_hif_sdio_writeb ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - UINT8 vb - ); - -extern INT32 mtk_wcn_hif_sdio_readl ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pvl - ); - -extern INT32 mtk_wcn_hif_sdio_writel ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - UINT32 vl - ); - -extern INT32 mtk_wcn_hif_sdio_read_buf ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pbuf, - UINT32 len - ); - -extern INT32 mtk_wcn_hif_sdio_write_buf ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pbuf, - UINT32 len - ); - -extern void mtk_wcn_hif_sdio_set_drvdata( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - void* private_data_p - ); - -extern void* mtk_wcn_hif_sdio_get_drvdata( - MTK_WCN_HIF_SDIO_CLTCTX ctx - ); - -extern void mtk_wcn_hif_sdio_get_dev( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - struct device **dev - ); -extern void mtk_wcn_hif_sdio_enable_irq( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - MTK_WCN_BOOL enable - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _HIF_SDIO_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/mtk_porting.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/mtk_porting.h deleted file mode 100755 index 37f96be599e0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/include/mtk_porting.h +++ /dev/null @@ -1,52 +0,0 @@ -/* porting layer */ -/* Android */ - -#ifndef _MTK_PORTING_H_ -#define _MTK_PORTING_H_ - -#include /* include stddef.h for NULL */ - -/* Type definition for signed integers */ -typedef signed char INT8, *PINT8; -typedef signed short INT16, *PINT16; -typedef signed int INT32, *PINT32; - -/* Type definition for unsigned integers */ -typedef unsigned char UINT8, *PUINT8; -typedef unsigned short UINT16, *PUINT16; -typedef unsigned int UINT32, *PUINT32; - -//typedef void VOID, *PVOID; - -typedef int MTK_WCN_BOOL; -#ifndef MTK_WCN_BOOL_TRUE -#define MTK_WCN_BOOL_FALSE ((MTK_WCN_BOOL) 0) -#define MTK_WCN_BOOL_TRUE ((MTK_WCN_BOOL) 1) -#endif - -typedef int MTK_WCN_MUTEX; - -typedef int MTK_WCN_TIMER; - -/* system APIs */ -/* mutex */ -typedef MTK_WCN_MUTEX (*MUTEX_CREATE)(const char * const name); -typedef INT32 (*MUTEX_DESTROY)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_LOCK)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_UNLOCK)(MTK_WCN_MUTEX mtx, unsigned long flags); -/* debug */ -typedef INT32 (*DBG_PRINT)(const char *str, ...); -typedef INT32 (*DBG_ASSERT)(INT32 expr, const char *file, INT32 line); -/* timer */ -typedef void (*MTK_WCN_TIMER_CB)(void); -typedef MTK_WCN_TIMER (*TIMER_CREATE)(const char * const name); -typedef INT32 (*TIMER_DESTROY)(MTK_WCN_TIMER tmr); -typedef INT32 (*TIMER_START)(MTK_WCN_TIMER tmr, UINT32 timeout, MTK_WCN_TIMER_CB tmr_cb, void *param); -typedef INT32 (*TIMER_STOP)(MTK_WCN_TIMER tmr); -/* kernel lib */ -typedef void* (*SYS_MEMCPY)(void *dest, const void *src, UINT32 n); -typedef void* (*SYS_MEMSET)(void *s, INT32 c, UINT32 n); -typedef INT32 (*SYS_SPRINTF)(char *str, const char *format, ...); - -#endif /* _MTK_PORTING_H_ */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/sdio.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/sdio.c deleted file mode 100755 index 1c1b75bd1d9f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/sdio.c +++ /dev/null @@ -1,1324 +0,0 @@ -/****************************************************************************** -*[File] sdio.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* The program provides SDIO HIF driver -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: sdio.c $ - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 02 14 2012 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * include correct header file upon setting. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 17 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628 related definitions for Linux/Android driver. - * - * 05 18 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add device ID for MT5931. - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 15 2010 jeffrey.chang - * [WCXRP00000181] [MT6620 Wi-Fi][Driver] fix the driver message "GLUE_FLAG_HALT skip INT" during unloading - * Fix GLUE_FALG_HALT message which cause driver to hang - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * correct typo - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 18 2010 cp.wu - * NULL - * #if defined(__X86__) is not working, change to use #ifdef CONFIG_X86. - * - * 08 17 2010 cp.wu - * NULL - * add ENE SDIO host workaround for x86 linux platform. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Fix hotplug bug - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * clear sdio interrupt - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#if MTK_WCN_HIF_SDIO -#include "hif_sdio.h" -#else -#include -#include -#include -#include /* sdio_readl(), etc */ -#include -#endif - -#include -#ifdef CONFIG_ARM -#include -#endif - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#if CFG_DBG_GPIO_PINS/* FIXME: move to platform or custom header */ -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define HIF_SDIO_ERR_TITLE_STR "["CHIP_NAME"] SDIO Access Error!" -#define HIF_SDIO_ERR_DESC_STR "**SDIO Access Error**\n" - -#if MTK_WCN_HIF_SDIO - - -/* - * function prototypes - * - */ - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *); - -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX); -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX); - -/* - * sdio function info table - */ - -static MTK_WCN_HIF_SDIO_FUNCINFO funcInfo[] = { -#if defined(MT6620) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020c, 0x2, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018c, 0x2, 512) }, -#elif defined(MT5931) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x5931, 0x1, 512) }, -#elif defined(MT6628) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x6628, 0x1, 512) }, -#endif -}; - - -static MTK_WCN_HIF_SDIO_CLTINFO cltInfo = { - .func_tbl = funcInfo, - .func_tbl_size = sizeof(funcInfo)/sizeof(MTK_WCN_HIF_SDIO_FUNCINFO), - .hif_clt_probe = mtk_sdio_probe, - .hif_clt_remove = mtk_sdio_remove, - .hif_clt_irq = mtk_sdio_interrupt, -}; - -#else - -static const struct sdio_device_id mtk_sdio_ids[] = { -#if defined(MT6620) - { SDIO_DEVICE(0x037a, 0x020a) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020b) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020c) }, /* Not an SDIO standard class device */ -#elif defined(MT5931) - { SDIO_DEVICE(0x037a, 0x5931) }, /* Not an SDIO standard class device */ -#elif defined(MT6628) - { SDIO_DEVICE(0x037a, 0x6628) }, /* Not an SDIO standard class device */ -#endif - { /* end: all zeroes */ }, -}; - -MODULE_DEVICE_TABLE(sdio, mtk_sdio_ids); - -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static probe_card pfWlanProbe = NULL; -static remove_card pfWlanRemove = NULL; - - -#if (MTK_WCN_HIF_SDIO == 0) -static struct sdio_driver mtk_sdio_driver = { - .name = "wlan", /* "MTK SDIO WLAN Driver" */ - .id_table = mtk_sdio_ids, - .probe = NULL, - .remove = NULL, -}; -#endif - - -#if CFG_DBG_GPIO_PINS - -/* debug pins */ -UINT_32 dbgPinSTP[] = { - GPIO_PLATFORM(33)/* CMFLASH, IDX_ERR J613 */ - , GPIO_PLATFORM(62)/* EINT3, IDX_TX_THREAD */ - , GPIO_PLATFORM(80)/* SPI_CS_N, IDX_TX_REQ J613 */ - , GPIO_PLATFORM(81)/* SPI_SCK, IDX_TX_PORT_WRITE J613 */ - , GPIO_PLATFORM(17) /* CMRST, IDX_STP_MTX_BT J618 */ - , GPIO_PLATFORM(18) /* CMPDN, IDX_STP_MTX_FM J613 */ - , GPIO_PLATFORM(19) /* CMVREF,IDX_STP_MTX_GPS J613 */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WIFI */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WMT */ - , GPIO_PLATFORM(135) /* SCL2, IDX_LOOP_CNT J616 */ - , GPIO_PLATFORM(136) /* SDA2, IDX_NO_BUF J616 */ - , GPIO_PLATFORM(30) /* CAM_MECHSH0, IDX_BT_TX, J613 low-active */ - , GPIO_PLATFORM(31) /* CAM_MECHSH1, IDX_BT_RX, J613 low-active */ - , GPIO_PLATFORM(124) /* GPS_PWR_EN, ThreadDSPIn [GPS] */ - , GPIO_PLATFORM(125) /* GPS_SYNC, mtk_sys_msg_recv [GPS] */ - , GPIO_PLATFORM(21) /* GPS_EINT8, dump_nmea_data [GPS] */ - , GPIO_PLATFORM(29) /* CAM_STROBE, IDX_GPS_TX, J613 low-active */ - , GPIO_PLATFORM(20) /*CMHREF, J613 UNUSED */ -// , GPIO_6516(64) /* EINT5, REMOVED!!! for MT6620-Wi-Fi Int */ -// , GPIO_6516(122) /* BT_PWR_EN, REMOVED!!! for MT6620-PMU_EN */ -// , GPIO_6516(123) /* BT_RESET, REMOVED!!! for MT6620-RST */ -}; -#endif -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_DBG_GPIO_PINS -void debug_gpio_init(void) -{ - int i; - - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_pull_enable(dbgPinSTP[i], 0); /* disable pull */ - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_OUT); /* set output */ - mt_set_gpio_mode(dbgPinSTP[i], GPIO_MODE_00); /* set gpio mode */ - - /* toggle twice to check if ok: */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - } - //printk(KERN_INFO "[%s] initialization ok \n", __FUNCTION__); -} - -void debug_gpio_deinit(void) -{ - int i; - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_IN); - } - - //printk(KERN_INFO "[%s] k\n", __FUNCTION__); -} - -void mtk_wcn_stp_debug_gpio_assert(UINT_32 dwIndex, UINT_32 dwMethod) -{ - unsigned int i; - - if (dwIndex >= (sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]))) { - //printk(KERN_INFO "[%s] invalid dwIndex(%ld) \n", __FUNCTION__, dwIndex); - return; - } - - if (dwIndex > IDX_STP_MAX) { - //printk(KERN_INFO "[%s] dwIndex(%ld) > IDX_STP_MAX(%d) \n", __FUNCTION__, dwIndex, IDX_STP_MAX); - } - - if (GPIO_INVALID == dbgPinSTP[dwIndex]) { - return; - } - - if (dwMethod & DBG_TIE_DIR) { - if (dwMethod & DBG_HIGH) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - else { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - } - return; - } - - if (dwMethod & DBG_TOGGLE(0)) { - for (i = 0; i < DBG_TOGGLE_NUM(dwMethod); ++i) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - return; - } - - return; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO interrupt callback function -* -* \param[in] func pointer to SDIO handle -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT32 ret = 0; - - prGlueInfo = mtk_wcn_hif_sdio_get_drvdata(cltCtx); - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return (-HIF_SDIO_ERR_FAIL); - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - return ret; - } - - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); - - return ret; -} - -#else - -static unsigned int in_interrupt = 0; - -static void mtk_sdio_interrupt(struct sdio_func *func) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - int ret = 0; - - prGlueInfo = sdio_get_drvdata(func); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - return; - } - - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - - #if 0 - wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - //printk(KERN_INFO DRV_NAME"ignore pending interrupt\n"); - } - else { - wlanIST(prGlueInfo->prAdapter); - } - #endif - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO probe function -* -* \param[in] func pointer to SDIO handle -* \param[in] id pointer to SDIO device id table -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -// FIXME: global variable -static const MTK_WCN_HIF_SDIO_FUNCINFO *prFunc; - - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX cltCtx, const MTK_WCN_HIF_SDIO_FUNCINFO *prFuncInfo) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - - prFunc = prFuncInfo; - - if (pfWlanProbe((PVOID) &cltCtx) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -(HIF_SDIO_ERR_FAIL); - } else { - //printk(KERN_INFO DRV_NAME"mtk_wifi_sdio_probe() done(%d)\n", ret); - } - return ret; -} -#else -static int mtk_sdio_probe ( - struct sdio_func *func, - const struct sdio_device_id *id - ) -{ - int ret = 0; - int i = 0; - - //printk(KERN_INFO DRV_NAME "mtk_sdio_probe()\n"); - - ASSERT(func); - ASSERT(id); - - //printk(KERN_INFO DRV_NAME "Basic struct size checking...\n"); - //printk(KERN_INFO DRV_NAME "sizeof(struct device) = %d\n", sizeof(struct device)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_host) = %d\n", sizeof(struct mmc_host)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_card) = %d\n", sizeof(struct mmc_card)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_driver) = %d\n", sizeof(struct mmc_driver)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_data) = %d\n", sizeof(struct mmc_data)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_command) = %d\n", sizeof(struct mmc_command)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_request) = %d\n", sizeof(struct mmc_request)); - //printk(KERN_INFO DRV_NAME "sizeof(struct sdio_func) = %d\n", sizeof(struct sdio_func)); - - //printk(KERN_INFO DRV_NAME "Card information checking...\n"); - //printk(KERN_INFO DRV_NAME "func = 0x%p\n", func); - //printk(KERN_INFO DRV_NAME "Number of info = %d:\n", func->card->num_info); - - for (i = 0; i < func->card->num_info; i++) { - //printk(KERN_INFO DRV_NAME "info[%d]: %s\n", i, func->card->info[i]); - } - - sdio_claim_host(func); - ret = sdio_enable_func(func); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_enable_func failed!\n"); - goto out; - } - //printk(KERN_INFO DRV_NAME"sdio_enable_func done!\n"); - - if (pfWlanProbe((PVOID)func) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -1; - } - else { -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] init debug gpio, 20100815 \n", __FUNCTION__); - /* Debug pins initialization */ - debug_gpio_init(); -#endif - } - -out: - //printk(KERN_INFO DRV_NAME"mtk_sdio_probe() done(%d)\n", ret); - return ret; -} -#endif - - -#if MTK_WCN_HIF_SDIO -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - return ret; -} -#else -static void -mtk_sdio_remove ( - struct sdio_func *func - ) -{ - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove()\n"); - -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] deinit debug gpio \n", __FUNCTION__); - debug_gpio_deinit(); -#endif - - ASSERT(func); - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - sdio_claim_host(func); - sdio_disable_func(func); - //printk(KERN_INFO DRV_NAME"sdio_disable_func() done\n"); - sdio_release_host(func); - - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove() done\n"); -} -#endif - -#if (MTK_WCN_HIF_SDIO == 0) -static int -mtk_sdio_suspend ( - struct device * pDev, - pm_message_t state - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_suspend dev(0x%p)\n", pDev); - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - - return 0; -} - -int mtk_sdio_resume ( - struct device * pDev - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_resume dev(0x%p)\n", pDev); - - return 0; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register sdio bus to the os -* -* \param[in] pfProbe Function pointer to detect card -* \param[in] pfRemove Function pointer to remove card -* -* \return The result of registering sdio bus -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -glRegisterBus ( - probe_card pfProbe, - remove_card pfRemove - ) -{ - int ret = 0; - - ASSERT(pfProbe); - ASSERT(pfRemove); - - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - //printk(KERN_INFO "mtk_sdio: Copyright MediaTek Inc.\n"); - - pfWlanProbe = pfProbe; - pfWlanRemove = pfRemove; - -#if MTK_WCN_HIF_SDIO - /* register MTK sdio client */ - ret = ((mtk_wcn_hif_sdio_client_reg(&cltInfo) == HIF_SDIO_ERR_SUCCESS) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE); -#else - mtk_sdio_driver.probe = mtk_sdio_probe; - mtk_sdio_driver.remove = mtk_sdio_remove; - - mtk_sdio_driver.drv.suspend = mtk_sdio_suspend; - mtk_sdio_driver.drv.resume = mtk_sdio_resume; - - ret = (sdio_register_driver(&mtk_sdio_driver) == 0) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE; -#endif - - return ret; -} /* end of glRegisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will unregister sdio bus to the os -* -* \param[in] pfRemove Function pointer to remove card -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glUnregisterBus( - remove_card pfRemove - ) -{ - ASSERT(pfRemove); - pfRemove(); - -#if MTK_WCN_HIF_SDIO - /* unregister MTK sdio client */ - mtk_wcn_hif_sdio_client_unreg(&cltInfo); -#else - sdio_unregister_driver(&mtk_sdio_driver); -#endif - - return; -} /* end of glUnregisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function stores hif related info, which is initialized before. -* -* \param[in] prGlueInfo Pointer to glue info structure -* \param[in] u4Cookie Pointer to UINT_32 memory base variable for _HIF_HPI -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - - prHif = &prGlueInfo->rHifInfo; - -#if MTK_WCN_HIF_SDIO - //prHif->prFuncInfo = ((MTK_WCN_HIF_SDIO_FUNCINFO *) u4Cookie); - prHif->prFuncInfo = prFunc; - prHif->cltCtx = *((MTK_WCN_HIF_SDIO_CLTCTX *) u4Cookie); - mtk_wcn_hif_sdio_set_drvdata(prHif->cltCtx, prGlueInfo); - -#else - prHif->func = (struct sdio_func *) u4Cookie; - - //printk(KERN_INFO DRV_NAME"prHif->func->dev = 0x%p\n", &prHif->func->dev); - //printk(KERN_INFO DRV_NAME"prHif->func->vendor = 0x%04X\n", prHif->func->vendor); - //printk(KERN_INFO DRV_NAME"prHif->func->device = 0x%04X\n", prHif->func->device); - //printk(KERN_INFO DRV_NAME"prHif->func->func = 0x%04X\n", prHif->func->num); - - sdio_set_drvdata(prHif->func, prGlueInfo); - - SET_NETDEV_DEV(prGlueInfo->prDevHandler, &prHif->func->dev); -#endif - - return; -} /* end of glSetHifInfo() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clears hif related info. -* -* \param[in] prGlueInfo Pointer to glue info structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ) -{ - //P_GL_HIF_INFO_T prHif = NULL; - //ASSERT(prGlueInfo); - //prHif = &prGlueInfo->rHifInfo; - - return; -} /* end of glClearHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize bus operation and hif related information, request resources. -* -* \param[out] pvData A pointer to HIF-specific data type buffer. -* For eHPI, pvData is a pointer to UINT_32 type and stores a -* mapped base address. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOL -glBusInit ( - PVOID pvData - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - int ret = 0; - struct sdio_func *func = NULL; - - ASSERT(pvData); - - func = (struct sdio_func *) pvData; - - sdio_claim_host(func); - ret = sdio_set_block_size(func, 512); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 failed!\n"); - } - else { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 done!\n"); - } - - //printk(KERN_INFO DRV_NAME"param: func->cur_blksize(%d)\n", func->cur_blksize); - //printk(KERN_INFO DRV_NAME"param: func->max_blksize(%d)\n", func->max_blksize); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_size(%d)\n", func->card->host->max_blk_size); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_count(%d)\n", func->card->host->max_blk_count); -#endif - return TRUE; -} /* end of glBusInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus operation and release resources. -* -* \param[in] pvData A pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusRelease ( - PVOID pvData - ) -{ - - return; -} /* end of glBusRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup bus interrupt operation and interrupt handler for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pfnIsr A pointer to interrupt handler function. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \retval WLAN_STATUS_SUCCESS if success -* NEGATIVE_VALUE if fail -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - return -1; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - return -1; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_claim_irq(prHifInfo->func, mtk_sdio_interrupt); - sdio_release_host(prHifInfo->func); -#else - /* hif_sdio case */ - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - return -1; - } - prNetDevice = (struct net_device *) pvData; - - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - return -1; - } - - mtk_wcn_hif_sdio_enable_irq(prGlueInfo->rHifInfo.cltCtx, MTK_WCN_BOOL_TRUE); - -#endif - return ret; -} /* end of glBusSetIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus interrupt operation and disable interrupt handling for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - int ret = 0; - - ASSERT(pvData); - if (!pvData) { - //printk(KERN_INFO DRV_NAME"%s null pvData\n", __FUNCTION__); - return; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"%s no glue info\n", __FUNCTION__); - return; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_release_irq(prHifInfo->func); - sdio_release_host(prHifInfo->func); -#else - /* hif_sdio case */ - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - //printk(KERN_INFO DRV_NAME"%s null pvData\n", __FUNCTION__); - return; - } - prNetDevice = (struct net_device *) pvData; - - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"%s no glue info\n", __FUNCTION__); - return; - } - - mtk_wcn_hif_sdio_enable_irq(prGlueInfo->rHifInfo.cltCtx, MTK_WCN_BOOL_FALSE); - -#endif - - return; -} /* end of glBusreeIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] pu4Value Pointer to variable used to store read value -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ) -{ - int ret = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Value); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_readl(prGlueInfo->rHifInfo.cltCtx, u4Register, (PUINT32) pu4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - *pu4Value = sdio_readl(prGlueInfo->rHifInfo.func, u4Register, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readl() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readl() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] u4Value Value to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ) -{ - int ret = 0; - - ASSERT(prGlueInfo); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_writel(prGlueInfo->rHifInfo.cltCtx, u4Register, u4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - sdio_writel(prGlueInfo->rHifInfo.func, u4Value, u4Register, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writel() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writel() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be read -* \param[out] pucBuf Pointer to read buffer -* \param[in] u2ValidOutBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucDst = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortRead++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucDst = pucBuf; - - ASSERT(u2Len <= u2ValidOutBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, count); - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= (prGlueInfo->rHifInfo).prFuncInfo->blk_sz) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, (count+3)&~0x3U); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readsb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readsb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be write -* \param[in] pucBuf Pointer to write buffer -* \param[in] u2ValidInBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucSrc = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortWrite++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucSrc = pucBuf; - - ASSERT(u2Len <= u2ValidInBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { // block mode - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { // byte mode - - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, count); - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz)) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { // block mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { // byte mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, (count+3)&~0x3U); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writesb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writesb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port in byte with CMD52 -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Addr I/O port offset -* \param[in] ucData Single byte of data to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - sdio_writeb(prGlueInfo->rHifInfo.func, ucData, u4Addr, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#else - ret = mtk_wcn_hif_sdio_writeb(prGlueInfo->rHifInfo.cltCtx, u4Addr, ucData); -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writeb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writeb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; - -} /* end of kalDevWriteWithSdioCmd52() */ - - -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ) -{ - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/x86.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/x86.c deleted file mode 100755 index 4322fa303a71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/hif/sdio/x86.c +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** -*[File] mt6516-evb.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* dummy file for build system -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: mt6516-evb.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_cfg80211.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_cfg80211.h deleted file mode 100755 index 9d00b73586a5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_cfg80211.h +++ /dev/null @@ -1,283 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_cfg80211.h#1 $ -*/ - -/*! \file gl_cfg80211.h - \brief This file is for Portable Driver linux cfg80211 support. -*/ - - - -/* -** $Log: gl_cfg80211.h $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 29 2012 chinglan.wang -** [ALPS00349655] [Need Patch] [Volunteer Patch] [ALPS.JB] Daily build warning on [mt6575_phone_mhl-eng] -** . - * -*/ - -#ifndef _GL_CFG80211_H -#define _GL_CFG80211_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#include "gl_os.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* cfg80211 hooks */ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ); - - -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - - -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - - -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - - -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - - -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - - -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ); - - -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ); - - -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ); - - -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ); - - -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ); - - -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - - -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ); - - -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#endif -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_CFG80211_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_kal.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_kal.h deleted file mode 100755 index 4551db4d3e6f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_kal.h +++ /dev/null @@ -1,2250 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_kal.h#1 $ -*/ - -/*! \file gl_kal.h - \brief Declaration of KAL functions - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - - - -/* -** $Log: gl_kal.h $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 06 2012 wh.su - * [WCXRP00001177] [MT6620 Wi-Fi][Driver][2.2] Adding the query channel filter for AP mode - * adding the channel query filter for AP mode. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adjust the code for Non-DBG and no XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * include link.h for linux's port. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 jeffrey.chang - * [WCXRP00000332] [MT6620 Wi-Fi][Driver] add kal sleep function for delay which use blocking call - * modify the implementation of kalDelay to msleep - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * modify kalSetEvent declaration - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * fix kal header file - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * gl_kal merged - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify kalMemAlloc method - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * * 2) add 2 kal API for later integration - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download KAPI - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\41 2009-09-28 20:19:23 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\40 2009-08-18 22:57:09 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\39 2009-06-23 23:19:15 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\38 2009-02-09 14:03:17 GMT mtk01090 -** Add KAL function kalDevSetPowerState(). It is not implemented yet. Only add an empty macro. -** -** \main\maintrunk.MT5921\37 2009-01-22 13:05:59 GMT mtk01088 -** new defeine to got 1x value at packet reserved field -** \main\maintrunk.MT5921\36 2008-12-08 16:15:02 GMT mtk01461 -** Add kalQueryValidBufferLength() macro -** \main\maintrunk.MT5921\35 2008-11-13 20:33:15 GMT mtk01104 -** Remove lint warning -** \main\maintrunk.MT5921\34 2008-10-22 11:05:52 GMT mtk01461 -** Remove unused macro -** \main\maintrunk.MT5921\33 2008-10-16 15:48:17 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\32 2008-09-02 11:50:51 GMT mtk01461 -** SPIN_LOCK_SDIO_DDK_TX_QUE -** \main\maintrunk.MT5921\31 2008-08-29 15:58:30 GMT mtk01088 -** remove non-used function for code refine -** \main\maintrunk.MT5921\30 2008-08-21 00:33:29 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\29 2008-06-19 13:29:14 GMT mtk01425 -** 1. Add declaration of SPIN_LOCK_SDIO_DDK_TX_QUE and SPIN_LOCK_SDIO_DDK_RX_QUE -** \main\maintrunk.MT5921\28 2008-05-30 20:27:34 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\27 2008-05-30 14:42:05 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\26 2008-05-29 14:15:18 GMT mtk01084 -** remove un-used function -** \main\maintrunk.MT5921\25 2008-04-23 14:02:20 GMT mtk01084 -** modify KAL port access function prototype -** \main\maintrunk.MT5921\24 2008-04-17 23:06:41 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\23 2008-04-08 15:38:50 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\22 2008-03-26 15:34:48 GMT mtk01461 -** Add update MAC address func -** \main\maintrunk.MT5921\21 2008-03-18 15:56:15 GMT mtk01084 -** update ENUM_NIC_INITIAL_PARAM_E -** \main\maintrunk.MT5921\20 2008-03-18 11:49:28 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\19 2008-03-18 10:21:31 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\18 2008-03-14 18:03:41 GMT mtk01084 -** refine register and port access function -** \main\maintrunk.MT5921\17 2008-03-11 14:51:02 GMT mtk01461 -** Add copy_to(from)_user macro -** \main\maintrunk.MT5921\16 2008-03-06 23:42:21 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\15 2008-02-26 09:48:04 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\14 2008-01-09 17:54:58 GMT mtk01084 -** Modify the argument of kalQueryPacketInfo -** \main\maintrunk.MT5921\13 2007-11-29 02:05:20 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\12 2007-11-26 19:43:45 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\11 2007-11-09 16:36:15 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\10 2007-11-07 18:38:37 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\9 2007-11-06 19:36:50 GMT mtk01088 -** add the WPS related code -** \main\maintrunk.MT5921\8 2007-11-02 01:03:57 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:23 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - - -#ifndef _GL_KAL_H -#define _GL_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "link.h" -#include "nic/mac.h" -#include "nic/wlan_def.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "gl_wext_priv.h" - - -#if CFG_ENABLE_BT_OVER_WIFI - #include "nic/bow.h" -#endif - -#if DBG -extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define USEC_PER_MSEC (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SPIN_LOCK_CATEGORY_E { - SPIN_LOCK_FSM = 0, - - /* FIX ME */ - SPIN_LOCK_RX_QUE, - SPIN_LOCK_TX_QUE, - SPIN_LOCK_CMD_QUE, - SPIN_LOCK_TX_RESOURCE, - SPIN_LOCK_CMD_RESOURCE, - SPIN_LOCK_QM_TX_QUEUE, - SPIN_LOCK_CMD_PENDING, - SPIN_LOCK_CMD_SEQ_NUM, - SPIN_LOCK_TX_MSDU_INFO_LIST, - SPIN_LOCK_TXING_MGMT_LIST, - SPIN_LOCK_TX_SEQ_NUM, - SPIN_LOCK_TX_COUNT, - SPIN_LOCK_TXS_COUNT, - /* end */ - SPIN_LOCK_TX, - SPIN_LOCK_IO_REQ, - SPIN_LOCK_INT, - - SPIN_LOCK_MGT_BUF, - SPIN_LOCK_MSG_BUF, - SPIN_LOCK_STA_REC, - - SPIN_LOCK_MAILBOX, - SPIN_LOCK_TIMER, - - SPIN_LOCK_BOW_TABLE, - - SPIN_LOCK_EHPI_BUS, /* only for EHPI */ - SPIN_LOCK_NET_DEV, - SPIN_LOCK_NUM -} ENUM_SPIN_LOCK_CATEGORY_E; - -/* event for assoc infomation update */ -typedef struct _EVENT_ASSOC_INFO { - UINT_8 ucAssocReq; /* 1 for assoc req, 0 for assoc rsp */ - UINT_8 ucReassoc; /* 0 for assoc, 1 for reassoc */ - UINT_16 u2Length; - PUINT_8 pucIe; -} EVENT_ASSOC_INFO, *P_EVENT_ASSOC_INFO; - -typedef enum _ENUM_KAL_NETWORK_TYPE_INDEX_T { - KAL_NETWORK_TYPE_AIS_INDEX = 0, -#if CFG_ENABLE_WIFI_DIRECT - KAL_NETWORK_TYPE_P2P_INDEX, -#endif -#if CFG_ENABLE_BT_OVER_WIFI - KAL_NETWORK_TYPE_BOW_INDEX, -#endif - KAL_NETWORK_TYPE_INDEX_NUM -} ENUM_KAL_NETWORK_TYPE_INDEX_T; - -typedef enum _ENUM_KAL_MEM_ALLOCATION_TYPE_E { - PHY_MEM_TYPE, /* physically continuous */ - VIR_MEM_TYPE, /* virtually continous */ - MEM_TYPE_NUM -} ENUM_KAL_MEM_ALLOCATION_TYPE; - -#if CONFIG_ANDROID /* Defined in Android kernel source */ -typedef struct wake_lock KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#else -typedef UINT_32 KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#define KAL_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags - -#define KAL_ACQUIRE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalAcquireSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, &__u4Flags) - -#define KAL_RELEASE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalReleaseSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, __u4Flags) - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define KAL_GET_PKT_QUEUE_ENTRY(_p) GLUE_GET_PKT_QUEUE_ENTRY(_p) -#define KAL_GET_PKT_DESCRIPTOR(_prQueueEntry) GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) -#define KAL_GET_PKT_TID(_p) GLUE_GET_PKT_TID(_p) -#define KAL_GET_PKT_IS1X(_p) GLUE_GET_PKT_IS1X(_p) -#define KAL_GET_PKT_HEADER_LEN(_p) GLUE_GET_PKT_HEADER_LEN(_p) -#define KAL_GET_PKT_PAYLOAD_LEN(_p) GLUE_GET_PKT_PAYLOAD_LEN(_p) -#define KAL_GET_PKT_ARRIVAL_TIME(_p) GLUE_GET_PKT_ARRIVAL_TIME(_p) - -/*----------------------------------------------------------------------------*/ -/* Macros of wake_lock operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#if CONFIG_ANDROID /* Defined in Android kernel source */ -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) \ - wake_lock_init(_prWakeLock, WAKE_LOCK_SUSPEND, _pcName) - -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) \ - wake_lock_destroy(_prWakeLock) - -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) \ - wake_lock(_prWakeLock) - -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) \ - wake_lock_timeout(_prWakeLock, _u4Timeout) - -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) \ - wake_unlock(_prWakeLock) - -#else -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Cache memory allocation -* -* \param[in] u4Size Required memory size. -* \param[in] eMemType Memory allocation type -* -* \return Pointer to allocated memory -* or NULL -*/ -/*----------------------------------------------------------------------------*/ -/*#if DBG -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - if (pvAddr) { \ - allocatedMemSize += u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) allocated (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - pvAddr; \ - }) -#else */ -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - pvAddr; \ - }) -//#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free allocated cache memory -* -* \param[in] pvAddr Required memory size. -* \param[in] eMemType Memory allocation type -* \param[in] u4Size Allocated memory size. -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -/*#if DBG -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if (pvAddr) { \ - allocatedMemSize -= u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) freed (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -#else */ -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -//#endif - -#define kalUdelay(u4USec) udelay(u4USec) - -#define kalMdelay(u4MSec) mdelay(u4MSec) -#define kalMsleep(u4MSec) msleep(u4MSec) - -/* Copy memory from user space to kernel space */ -#define kalMemCopyFromUser(_pvTo, _pvFrom, _u4N) copy_from_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory from kernel space to user space */ -#define kalMemCopyToUser(_pvTo, _pvFrom, _u4N) copy_to_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory block with specific size */ -#define kalMemCopy(pvDst, pvSrc, u4Size) memcpy(pvDst, pvSrc, u4Size) - -/* Set memory block with specific pattern */ -#define kalMemSet(pvAddr, ucPattern, u4Size) memset(pvAddr, ucPattern, u4Size) - -/* Compare two memory block with specific length. - * Return zero if they are the same. - */ -#define kalMemCmp(pvAddr1, pvAddr2, u4Size) memcmp(pvAddr1, pvAddr2, u4Size) - -/* Zero specific memory block */ -#define kalMemZero(pvAddr, u4Size) memset(pvAddr, 0, u4Size) - -/* defined for wince sdio driver only */ -#if defined(_HIF_SDIO) -#define kalDevSetPowerState(prGlueInfo, ePowerMode) glSetPowerState(prGlueInfo, ePowerMode) -#else -#define kalDevSetPowerState(prGlueInfo, ePowerMode) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalSendComplete(prGlueInfo, pvPacket, status) \ - kalSendCompleteAndAwakeQueue(prGlueInfo, pvPacket) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to locate the starting address of incoming ethernet -* frame for skb. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryBufferPointer(prGlueInfo, pvPacket) \ - ((PUINT_8)((struct sk_buff *)pvPacket)->data) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to query the length of valid buffer which is accessible during -* port read/write. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryValidBufferLength(prGlueInfo, pvPacket) \ - ((UINT_32)((struct sk_buff *)pvPacket)->end - \ - (UINT_32)((struct sk_buff *)pvPacket)->data) - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to copy the entire frame from skb to the destination -* address in the input parameter. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] pucDestBuffer Destination Address -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalCopyFrame(prGlueInfo, pvPacket, pucDestBuffer) \ - {struct sk_buff *skb = (struct sk_buff *)pvPacket; \ - memcpy(pucDestBuffer, skb->data, skb->len);} - -#define kalGetTimeTick() jiffies_to_msecs(jiffies) - -#define kalPrint printk - -#if !DBG -#if CFG_SUPPORT_XLOG -#define XLOG_TAG "wlan" - -#define XLOG_FUNC(__LEVEL, __FMT...)\ - if (__LEVEL == ANDROID_LOG_ERROR) {\ - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_WARN) {\ - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_INFO) {\ - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_DEBUG) {\ - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_VERBOSE) {\ - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, ##__FMT);\ - } - -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define AIS_ERROR_LOGDUMP8(x, y) -#define AIS_WARN_LOGDUMP8(x, y) -#define AIS_INFO_LOGDUMP8(x, y) -#define AIS_STATE_LOGDUMP8(x, y) -#define AIS_EVENT_LOGDUMP8(x, y) -#define AIS_TRACE_LOGDUMP8(x, y) -#define AIS_LOUD_LOGDUMP8(x, y) -#define AIS_TEMP_LOGDUMP8(x, y) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGDUMP8(x, y) -#define INTR_WARN_LOGDUMP8(x, y) -#define INTR_INFO_LOGDUMP8(x, y) -#define INTR_STATE_LOGDUMP8(x, y) -#define INTR_EVENT_LOGDUMP8(x, y) -#define INTR_TRACE_LOGDUMP8(x, y) -#define INTR_LOUD_LOGDUMP8(x, y) -#define INTR_TEMP_LOGDUMP8(x, y) - -#define INIT_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGDUMP8(x, y) -#define INIT_WARN_LOGDUMP8(x, y) -#define INIT_INFO_LOGDUMP8(x, y) -#define INIT_STATE_LOGDUMP8(x, y) -#define INIT_EVENT_LOGDUMP8(x, y) -#define INIT_TRACE_LOGDUMP8(x, y) -#define INIT_LOUD_LOGDUMP8(x, y) -#define INIT_TEMP_LOGDUMP8(x, y) - -#define AAA_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGDUMP8(x, y) -#define AAA_WARN_LOGDUMP8(x, y) -#define AAA_INFO_LOGDUMP8(x, y) -#define AAA_STATE_LOGDUMP8(x, y) -#define AAA_EVENT_LOGDUMP8(x, y) -#define AAA_TRACE_LOGDUMP8(x, y) -#define AAA_LOUD_LOGDUMP8(x, y) -#define AAA_TEMP_LOGDUMP8(x, y) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define ROAMING_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define ROAMING_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGDUMP8(x, y) -#define ROAMING_WARN_LOGDUMP8(x, y) -#define ROAMING_INFO_LOGDUMP8(x, y) -#define ROAMING_STATE_LOGDUMP8(x, y) -#define ROAMING_EVENT_LOGDUMP8(x, y) -#define ROAMING_TRACE_LOGDUMP8(x, y) -#define ROAMING_LOUD_LOGDUMP8(x, y) -#define ROAMING_TEMP_LOGDUMP8(x, y) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGDUMP8(x, y) -#define REQ_WARN_LOGDUMP8(x, y) -#define REQ_INFO_LOGDUMP8(x, y) -#define REQ_STATE_LOGDUMP8(x, y) -#define REQ_EVENT_LOGDUMP8(x, y) -#define REQ_TRACE_LOGDUMP8(x, y) -#define REQ_LOUD_LOGDUMP8(x, y) -#define REQ_TEMP_LOGDUMP8(x, y) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGDUMP8(x, y) -#define TX_WARN_LOGDUMP8(x, y) -#define TX_INFO_LOGDUMP8(x, y) -#define TX_STATE_LOGDUMP8(x, y) -#define TX_EVENT_LOGDUMP8(x, y) -#define TX_TRACE_LOGDUMP8(x, y) -#define TX_LOUD_LOGDUMP8(x, y) -#define TX_TEMP_LOGDUMP8(x, y) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGDUMP8(x, y) -#define RX_WARN_LOGDUMP8(x, y) -#define RX_INFO_LOGDUMP8(x, y) -#define RX_STATE_LOGDUMP8(x, y) -#define RX_EVENT_LOGDUMP8(x, y) -#define RX_TRACE_LOGDUMP8(x, y) -#define RX_LOUD_LOGDUMP8(x, y) -#define RX_TEMP_LOGDUMP8(x, y) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGDUMP8(x, y) -#define RFTEST_WARN_LOGDUMP8(x, y) -#define RFTEST_INFO_LOGDUMP8(x, y) -#define RFTEST_STATE_LOGDUMP8(x, y) -#define RFTEST_EVENT_LOGDUMP8(x, y) -#define RFTEST_TRACE_LOGDUMP8(x, y) -#define RFTEST_LOUD_LOGDUMP8(x, y) -#define RFTEST_TEMP_LOGDUMP8(x, y) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGDUMP8(x, y) -#define EMU_WARN_LOGDUMP8(x, y) -#define EMU_INFO_LOGDUMP8(x, y) -#define EMU_STATE_LOGDUMP8(x, y) -#define EMU_EVENT_LOGDUMP8(x, y) -#define EMU_TRACE_LOGDUMP8(x, y) -#define EMU_LOUD_LOGDUMP8(x, y) -#define EMU_TEMP_LOGDUMP8(x, y) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGDUMP8(x, y) -#define HEM_WARN_LOGDUMP8(x, y) -#define HEM_INFO_LOGDUMP8(x, y) -#define HEM_STATE_LOGDUMP8(x, y) -#define HEM_EVENT_LOGDUMP8(x, y) -#define HEM_TRACE_LOGDUMP8(x, y) -#define HEM_LOUD_LOGDUMP8(x, y) -#define HEM_TEMP_LOGDUMP8(x, y) - -#define RLM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RLM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RLM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGDUMP8(x, y) -#define RLM_WARN_LOGDUMP8(x, y) -#define RLM_INFO_LOGDUMP8(x, y) -#define RLM_STATE_LOGDUMP8(x, y) -#define RLM_EVENT_LOGDUMP8(x, y) -#define RLM_TRACE_LOGDUMP8(x, y) -#define RLM_LOUD_LOGDUMP8(x, y) -#define RLM_TEMP_LOGDUMP8(x, y) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGDUMP8(x, y) -#define MEM_WARN_LOGDUMP8(x, y) -#define MEM_INFO_LOGDUMP8(x, y) -#define MEM_STATE_LOGDUMP8(x, y) -#define MEM_EVENT_LOGDUMP8(x, y) -#define MEM_TRACE_LOGDUMP8(x, y) -#define MEM_LOUD_LOGDUMP8(x, y) -#define MEM_TEMP_LOGDUMP8(x, y) - -#define CNM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGDUMP8(x, y) -#define CNM_WARN_LOGDUMP8(x, y) -#define CNM_INFO_LOGDUMP8(x, y) -#define CNM_STATE_LOGDUMP8(x, y) -#define CNM_EVENT_LOGDUMP8(x, y) -#define CNM_TRACE_LOGDUMP8(x, y) -#define CNM_LOUD_LOGDUMP8(x, y) -#define CNM_TEMP_LOGDUMP8(x, y) - -#define RSN_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RSN_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RSN_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGDUMP8(x, y) -#define RSN_WARN_LOGDUMP8(x, y) -#define RSN_INFO_LOGDUMP8(x, y) -#define RSN_STATE_LOGDUMP8(x, y) -#define RSN_EVENT_LOGDUMP8(x, y) -#define RSN_TRACE_LOGDUMP8(x, y) -#define RSN_LOUD_LOGDUMP8(x, y) -#define RSN_TEMP_LOGDUMP8(x, y) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGDUMP8(x, y) -#define BSS_WARN_LOGDUMP8(x, y) -#define BSS_INFO_LOGDUMP8(x, y) -#define BSS_STATE_LOGDUMP8(x, y) -#define BSS_EVENT_LOGDUMP8(x, y) -#define BSS_TRACE_LOGDUMP8(x, y) -#define BSS_LOUD_LOGDUMP8(x, y) -#define BSS_TEMP_LOGDUMP8(x, y) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGDUMP8(x, y) -#define SCN_WARN_LOGDUMP8(x, y) -#define SCN_INFO_LOGDUMP8(x, y) -#define SCN_STATE_LOGDUMP8(x, y) -#define SCN_EVENT_LOGDUMP8(x, y) -#define SCN_TRACE_LOGDUMP8(x, y) -#define SCN_LOUD_LOGDUMP8(x, y) -#define SCN_TEMP_LOGDUMP8(x, y) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGDUMP8(x, y) -#define SAA_WARN_LOGDUMP8(x, y) -#define SAA_INFO_LOGDUMP8(x, y) -#define SAA_STATE_LOGDUMP8(x, y) -#define SAA_EVENT_LOGDUMP8(x, y) -#define SAA_TRACE_LOGDUMP8(x, y) -#define SAA_LOUD_LOGDUMP8(x, y) -#define SAA_TEMP_LOGDUMP8(x, y) - -#define P2P_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define P2P_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define P2P_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGDUMP8(x, y) -#define P2P_WARN_LOGDUMP8(x, y) -#define P2P_INFO_LOGDUMP8(x, y) -#define P2P_STATE_LOGDUMP8(x, y) -#define P2P_EVENT_LOGDUMP8(x, y) -#define P2P_TRACE_LOGDUMP8(x, y) -#define P2P_LOUD_LOGDUMP8(x, y) -#define P2P_TEMP_LOGDUMP8(x, y) - -#define QM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGDUMP8(x, y) -#define QM_WARN_LOGDUMP8(x, y) -#define QM_INFO_LOGDUMP8(x, y) -#define QM_STATE_LOGDUMP8(x, y) -#define QM_EVENT_LOGDUMP8(x, y) -#define QM_TRACE_LOGDUMP8(x, y) -#define QM_LOUD_LOGDUMP8(x, y) -#define QM_TEMP_LOGDUMP8(x, y) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGDUMP8(x, y) -#define SEC_WARN_LOGDUMP8(x, y) -#define SEC_INFO_LOGDUMP8(x, y) -#define SEC_STATE_LOGDUMP8(x, y) -#define SEC_EVENT_LOGDUMP8(x, y) -#define SEC_TRACE_LOGDUMP8(x, y) -#define SEC_LOUD_LOGDUMP8(x, y) -#define SEC_TEMP_LOGDUMP8(x, y) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGDUMP8(x, y) -#define BOW_WARN_LOGDUMP8(x, y) -#define BOW_INFO_LOGDUMP8(x, y) -#define BOW_STATE_LOGDUMP8(x, y) -#define BOW_EVENT_LOGDUMP8(x, y) -#define BOW_TRACE_LOGDUMP8(x, y) -#define BOW_LOUD_LOGDUMP8(x, y) -#define BOW_TEMP_LOGDUMP8(x, y) - -#define HAL_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGDUMP8(x, y) -#define HAL_WARN_LOGDUMP8(x, y) -#define HAL_INFO_LOGDUMP8(x, y) -#define HAL_STATE_LOGDUMP8(x, y) -#define HAL_EVENT_LOGDUMP8(x, y) -#define HAL_TRACE_LOGDUMP8(x, y) -#define HAL_LOUD_LOGDUMP8(x, y) -#define HAL_TEMP_LOGDUMP8(x, y) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGDUMP8(x, y) -#define WAPI_WARN_LOGDUMP8(x, y) -#define WAPI_INFO_LOGDUMP8(x, y) -#define WAPI_STATE_LOGDUMP8(x, y) -#define WAPI_EVENT_LOGDUMP8(x, y) -#define WAPI_TRACE_LOGDUMP8(x, y) -#define WAPI_LOUD_LOGDUMP8(x, y) -#define WAPI_TEMP_LOGDUMP8(x, y) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGDUMP8(x, y) -#define SW1_WARN_LOGDUMP8(x, y) -#define SW1_INFO_LOGDUMP8(x, y) -#define SW1_STATE_LOGDUMP8(x, y) -#define SW1_EVENT_LOGDUMP8(x, y) -#define SW1_TRACE_LOGDUMP8(x, y) -#define SW1_LOUD_LOGDUMP8(x, y) -#define SW1_TEMP_LOGDUMP8(x, y) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGDUMP8(x, y) -#define SW2_WARN_LOGDUMP8(x, y) -#define SW2_INFO_LOGDUMP8(x, y) -#define SW2_STATE_LOGDUMP8(x, y) -#define SW2_EVENT_LOGDUMP8(x, y) -#define SW2_TRACE_LOGDUMP8(x, y) -#define SW2_LOUD_LOGDUMP8(x, y) -#define SW2_TEMP_LOGDUMP8(x, y) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGDUMP8(x, y) -#define SW3_WARN_LOGDUMP8(x, y) -#define SW3_INFO_LOGDUMP8(x, y) -#define SW3_STATE_LOGDUMP8(x, y) -#define SW3_EVENT_LOGDUMP8(x, y) -#define SW3_TRACE_LOGDUMP8(x, y) -#define SW3_LOUD_LOGDUMP8(x, y) -#define SW3_TEMP_LOGDUMP8(x, y) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGDUMP8(x, y) -#define SW4_WARN_LOGDUMP8(x, y) -#define SW4_INFO_LOGDUMP8(x, y) -#define SW4_STATE_LOGDUMP8(x, y) -#define SW4_EVENT_LOGDUMP8(x, y) -#define SW4_TRACE_LOGDUMP8(x, y) dumpMemory8(ANDROID_LOG_DEBUG, x, y) -#define SW4_LOUD_LOGDUMP8(x, y) -#define SW4_TEMP_LOGDUMP8(x, y) -#else -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) -#define ROAMING_WARN_LOGFUNC(_Fmt...) -#define ROAMING_INFO_LOGFUNC(_Fmt...) -#define ROAMING_STATE_LOGFUNC(_Fmt...) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGFUNC(_Fmt...) -#define RLM_WARN_LOGFUNC(_Fmt...) -#define RLM_INFO_LOGFUNC(_Fmt...) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGFUNC(_Fmt...) -#define RSN_WARN_LOGFUNC(_Fmt...) -#define RSN_INFO_LOGFUNC(_Fmt...) -#define RSN_STATE_LOGFUNC(_Fmt...) -#define RSN_EVENT_LOGFUNC(_Fmt...) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGFUNC(_Fmt...) -#define P2P_WARN_LOGFUNC(_Fmt...) -#define P2P_INFO_LOGFUNC(_Fmt...) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) -#endif -#endif - -#define kalBreakPoint() \ - do { \ - BUG(); \ - panic("Oops"); \ - } while(0) - -#if CFG_ENABLE_AEE_MSG -#define kalSendAeeException aee_kernel_exception -#define kalSendAeeWarning aee_kernel_warning -#define kalSendAeeReminding aee_kernel_reminding -#else -#define kalSendAeeException(_module, _desc, ...) -#define kalSendAeeWarning(_module, _desc, ...) -#define kalSendAeeReminding(_module, _desc, ...) -#endif - -#define PRINTF_ARG(...) __VA_ARGS__ -#define SPRINTF(buf, arg) {buf += sprintf((char *)(buf), PRINTF_ARG arg);} - -#define USEC_TO_SYSTIME(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_SYSTIME(_msec) (_msec) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in gl_kal.c */ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ); - -VOID -kalReleaseSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ); - -VOID -kalUpdateMACAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ); - -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -PVOID -kalPacketAlloc( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ); - -VOID -kalOsTimerInitialize( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ); - -BOOL -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN OS_SYSTIME rInterval - ); - -WLAN_STATUS -kalProcessRxPacket( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ); - -WLAN_STATUS -kalRxIndicatePkts( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ); - -VOID -kalIndicateStatusAndComplete( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ); - -VOID -kalUpdateReAssocReqInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ); - -#if CFG_TX_FRAGMENT -BOOLEAN -kalQueryTxPacketHeader( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - OUT PUINT_16 pu2EtherTypeLen, - OUT PUINT_8 pucEthDestAddr - ); -#endif /* CFG_TX_FRAGMENT */ - -VOID -kalSendCompleteAndAwakeQueue( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -kalQueryTxChksumOffloadParam( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag); - -VOID -kalUpdateRxCSUMOffloadParam( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T eCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines in interface - ehpi/sdio.c */ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ); - -BOOL -kalDevRegWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ); - -BOOL -kalDevPortRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ); - -BOOL -kalDevPortWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ); - -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ); - - - #if CFG_SUPPORT_EXT_CONFIG -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ); - #endif - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType -); - -inline VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ); - - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ); - -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ); - -#if CFG_ENABLE_FW_DOWNLOAD - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ); - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Card Removal Check */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* TX */ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media State Indication */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ); - - -/*----------------------------------------------------------------------------*/ -/* OID handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ); - -#if CFG_ENABLE_BT_OVER_WIFI -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - PARAM_MAC_ADDRESS rPeerAddr - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_BOW_SEPARATE_DATA_PATH -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi Net Device Init/Uninit */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ); - -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - - -/*----------------------------------------------------------------------------*/ -/* Firmware Download Handling */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Security Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ); - - -/*----------------------------------------------------------------------------*/ -/* Management Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearMgmtFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ); - -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ); - -UINT_32 -kalRandomNumber( - VOID - ); - -VOID -kalTimeoutHandler (unsigned long arg); - -VOID -kalSetEvent (P_GLUE_INFO_T pr); - - -/*----------------------------------------------------------------------------*/ -/* NVRAM/Registry Service */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ); - -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ); - -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ); - -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - IN UINT_16 u2Data - ); - -/*----------------------------------------------------------------------------*/ -/* WSC Connection */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* RSSI Updating */ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - - -/*----------------------------------------------------------------------------*/ -/* I/O Buffer Pre-allocation */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ); - -VOID -kalUninitIOBuffer( - VOID - ); - -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ); - -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ); - -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/* 802.11W */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size - ); - - -/*----------------------------------------------------------------------------*/ -/* NL80211 */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ); - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -int tx_thread(void *data); - -#endif /* _GL_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_os.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_os.h deleted file mode 100755 index 596a5b4e5c74..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_os.h +++ /dev/null @@ -1,1151 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_os.h#2 $ -*/ - -/*! \file gl_os.h - \brief List the external reference to OS for GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - - - -/* -** $Log: gl_os.h $ -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. -** -** 08 20 2012 yuche.tsai -** [ALPS00339327] [Rose][6575JB][BSP Package][Free Test][KE][WIFI]There is no response when you tap the turn off/on button,wait a minutes, the device will reboot automatically and "KE" will pop up. -** Fix possible KE when netlink operate mgmt frame register. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 29 2011 terry.wu - * NULL - * Show DRV_NAME by chip id. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 19 2010 jeffrey.chang - * - * add security frame pending count - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * supporting power management - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * pvInformationBuffer and u4InformationBufferLength are no longer in glue - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * * are done in adapter layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * * (2) fix spin lock - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download related data type - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * * the frequency is used for adhoc connection only - * * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\30 2009-10-20 17:38:31 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\29 2009-10-08 10:33:33 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\28 2009-09-28 20:19:26 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\27 2009-08-18 22:57:12 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\26 2009-07-06 21:42:25 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\25 2009-07-06 20:51:46 GMT mtk01088 -** adding the wapi 1x ether type define -** \main\maintrunk.MT5921\24 2009-06-23 23:19:18 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\23 2009-02-07 15:05:06 GMT mtk01088 -** add the privacy flag to ingo driver the supplicant selected ap's security -** \main\maintrunk.MT5921\22 2009-02-05 15:34:09 GMT mtk01088 -** fixed the compiling error for using bits marco for only one parameter -** \main\maintrunk.MT5921\21 2009-01-22 13:02:13 GMT mtk01088 -** data frame is or not 802.1x value share with tid, using the same reserved byte, provide the function to set and get -** \main\maintrunk.MT5921\20 2008-10-24 12:04:16 GMT mtk01088 -** move the config.h from precomp.h to here for lint check -** \main\maintrunk.MT5921\19 2008-09-22 23:19:02 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\18 2008-09-05 17:25:13 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\17 2008-08-01 13:32:47 GMT mtk01084 -** Prevent redundent driver assertion in driver logic when BUS is detached -** \main\maintrunk.MT5921\16 2008-05-30 14:41:43 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\15 2008-05-29 14:16:25 GMT mtk01084 -** remoev un-used variable -** \main\maintrunk.MT5921\14 2008-05-03 15:17:14 GMT mtk01461 -** Add Media Status variable in Glue Layer -** \main\maintrunk.MT5921\13 2008-04-24 11:58:41 GMT mtk01461 -** change threshold to 256 -** \main\maintrunk.MT5921\12 2008-03-11 14:51:05 GMT mtk01461 -** Remove redundant GL_CONN_INFO_T -** \main\maintrunk.MT5921\11 2008-01-07 15:07:41 GMT mtk01461 -** Adjust the netif stop threshold to 150 -** \main\maintrunk.MT5921\10 2007-11-26 19:43:46 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\9 2007-11-07 18:38:38 GMT mtk01461 -** Move definition -** \main\maintrunk.MT5921\8 2007-11-02 01:04:00 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.5 2007/07/12 11:04:28 MTK01084 -** update macro to delay for ms order -** -** Revision 1.4 2007/07/05 07:25:34 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_OS_H -#define _GL_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/*------------------------------------------------------------------------------ - * Flags for LINUX(OS) dependent - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_WLAN_DEVICES 1 /* number of wlan card will coexist*/ - -#define CFG_MAX_TXQ_NUM 4 /* number of tx queue for support multi-queue h/w */ - - -#define CFG_USE_SPIN_LOCK_BOTTOM_HALF 0 /* 1: Enable use of SPIN LOCK Bottom Half for LINUX - 0: Disable - use SPIN LOCK IRQ SAVE instead */ - -#define CFG_TX_PADDING_SMALL_ETH_PACKET 0 /* 1: Enable - Drop ethernet packet if it < 14 bytes. - And pad ethernet packet with dummy 0 if it < 60 bytes. - 0: Disable */ - -#define CFG_TX_STOP_NETIF_QUEUE_THRESHOLD 256 /* packets */ - -#define CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD 64 /* packets */ -#define CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD 32 /* packets */ - - -#define ETH_P_1X 0x888E -#define IPTOS_PREC_OFFSET 5 -#define USER_PRIORITY_DEFAULT 0 - -#define ETH_WPI_1X 0x88B4 - -#define ETH_HLEN 14 -#define ETH_TYPE_LEN_OFFSET 12 -#define ETH_P_IP 0x0800 -#define ETH_P_1X 0x888E -#define ETH_P_PRE_1X 0x88C7 - -#define IPVERSION 4 -#define IP_HEADER_LEN 20 - -#define IPVH_VERSION_OFFSET 4 // For Little-Endian -#define IPVH_VERSION_MASK 0xF0 -#define IPTOS_PREC_OFFSET 5 -#define IPTOS_PREC_MASK 0xE0 - -#define SOURCE_PORT_LEN 2 -/* NOTE(Kevin): Without IP Option Length */ -#define LOOK_AHEAD_LEN (ETH_HLEN + IP_HEADER_LEN + SOURCE_PORT_LEN) - -/* 802.2 LLC/SNAP */ -#define ETH_LLC_OFFSET (ETH_HLEN) -#define ETH_LLC_LEN 3 -#define ETH_LLC_DSAP_SNAP 0xAA -#define ETH_LLC_SSAP_SNAP 0xAA -#define ETH_LLC_CONTROL_UNNUMBERED_INFORMATION 0x03 - -/* Bluetooth SNAP */ -#define ETH_SNAP_OFFSET (ETH_HLEN + ETH_LLC_LEN) -#define ETH_SNAP_LEN 5 -#define ETH_SNAP_BT_SIG_OUI_0 0x00 -#define ETH_SNAP_BT_SIG_OUI_1 0x19 -#define ETH_SNAP_BT_SIG_OUI_2 0x58 - -#define BOW_PROTOCOL_ID_SECURITY_FRAME 0x0003 - - -#if defined(MT6620) - #define CHIP_NAME "MT6620" -#elif defined(MT5931) - #define CHIP_NAME "MT5931" -#elif defined(MT6628) - #define CHIP_NAME "MT6628" -#endif - -#define DRV_NAME "["CHIP_NAME"]: " - -/* Define if target platform is Android. - * It should already be defined in Android kernel source - */ -#ifndef CONFIG_ANDROID -#define CONFIG_ANDROID 0 -#endif - -/* for CFG80211 IE buffering mechanism */ -#define CFG_CFG80211_IE_BUF_LEN (512) - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include /* constant of kernel version */ - -#include /* bitops.h */ - -#include /* struct timer_list */ -#include /* jiffies */ -#include /* udelay and mdelay macro */ - -#if CONFIG_ANDROID -#include -#endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) -#include /* IRQT_FALLING */ -#include /*for in_interrupt*/ -#endif - -#include /* struct net_device, struct net_device_stats */ -#include /* for eth_type_trans() function */ -#include /* struct iw_statistics */ -#include -#include /* struct in_device */ - -#include /* struct iphdr */ - -#include /* for memcpy()/memset() function */ -#include /* for offsetof() macro */ - -#include /* The proc filesystem constants/structures */ - -#include /* for rtnl_lock() and rtnl_unlock() */ -#include /*for the ipv6*/ -#include /*for the ipv6*/ -#include /* kthread_should_stop(), kthread_run() */ -#include /* for copy_from_user() */ -#include /* for firmware download */ -#include - -#include /* for kfifo interface */ -#include /* for cdev interface */ - -#include /* for firmware download */ - -#if defined(_HIF_SDIO) -#include -#include -#endif - -#include - -#include - -#include /* readw and writew */ - -#if WIRELESS_EXT > 12 -#include -#endif - -#include "version.h" -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#endif - -#include - -#if defined(MTK_WLAN_ARP_OFFLOAD) -#include -#include -#endif - -#include "gl_typedef.h" -#include "typedef.h" -#include "queue.h" -#include "gl_kal.h" -#if CFG_CHIP_RESET_SUPPORT - #include "gl_rst.h" -#endif -#include "hif.h" - - -#include "debug.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" - -#if CFG_ENABLE_AEE_MSG -#include -#endif - -extern BOOLEAN fgIsBusAccessFailed; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define GLUE_FLAG_HALT BIT(0) -#define GLUE_FLAG_INT BIT(1) -#define GLUE_FLAG_OID BIT(2) -#define GLUE_FLAG_TIMEOUT BIT(3) -#define GLUE_FLAG_TXREQ BIT(4) -#define GLUE_FLAG_SUB_MOD_INIT BIT(5) -#define GLUE_FLAG_SUB_MOD_EXIT BIT(6) -#define GLUE_FLAG_SUB_MOD_MULTICAST BIT(7) -#define GLUE_FLAG_FRAME_FILTER BIT(8) -#define GLUE_FLAG_HALT_BIT (0) -#define GLUE_FLAG_INT_BIT (1) -#define GLUE_FLAG_OID_BIT (2) -#define GLUE_FLAG_TIMEOUT_BIT (3) -#define GLUE_FLAG_TXREQ_BIT (4) -#define GLUE_FLAG_SUB_MOD_INIT_BIT (5) -#define GLUE_FLAG_SUB_MOD_EXIT_BIT (6) -#define GLUE_FLAG_SUB_MOD_MULTICAST_BIT (7) -#define GLUE_FLAG_FRAME_FILTER_BIT (8) - - - -#define GLUE_BOW_KFIFO_DEPTH (1024) -//#define GLUE_BOW_DEVICE_NAME "MT6620 802.11 AMP" -#define GLUE_BOW_DEVICE_NAME "ampc0" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _GL_WPA_INFO_T { - UINT_32 u4WpaVersion; - UINT_32 u4KeyMgmt; - UINT_32 u4CipherGroup; - UINT_32 u4CipherPairwise; - UINT_32 u4AuthAlg; - BOOLEAN fgPrivacyInvoke; -#if CFG_SUPPORT_802_11W - UINT_32 u4Mfp; -#endif -} GL_WPA_INFO_T, *P_GL_WPA_INFO_T; - -typedef enum _ENUM_RSSI_TRIGGER_TYPE { - ENUM_RSSI_TRIGGER_NONE, - ENUM_RSSI_TRIGGER_GREATER, - ENUM_RSSI_TRIGGER_LESS, - ENUM_RSSI_TRIGGER_TRIGGERED, - ENUM_RSSI_TRIGGER_NUM -} ENUM_RSSI_TRIGGER_TYPE; - -#if CFG_ENABLE_WIFI_DIRECT -typedef enum _ENUM_SUB_MODULE_IDX_T { - P2P_MODULE = 0, - SUB_MODULE_NUM -} ENUM_SUB_MODULE_IDX_T; - -typedef enum _ENUM_NET_REG_STATE_T { - ENUM_NET_REG_STATE_UNREGISTERED, - ENUM_NET_REG_STATE_REGISTERING, - ENUM_NET_REG_STATE_REGISTERED, - ENUM_NET_REG_STATE_UNREGISTERING, - ENUM_NET_REG_STATE_NUM -} ENUM_NET_REG_STATE_T; - -#endif - -typedef struct _GL_IO_REQ_T { - QUE_ENTRY_T rQueEntry; - //wait_queue_head_t cmdwait_q; - BOOL fgRead; - BOOL fgWaitResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOL fgIsP2pOid; -#endif - P_ADAPTER_T prAdapter; - PFN_OID_HANDLER_FUNC pfnOidHandler; - PVOID pvInfoBuf; - UINT_32 u4InfoBufLen; - PUINT_32 pu4QryInfoLen; - WLAN_STATUS rStatus; - UINT_32 u4Flag; -} GL_IO_REQ_T, *P_GL_IO_REQ_T; - -#if CFG_ENABLE_BT_OVER_WIFI -typedef struct _GL_BOW_INFO { - BOOLEAN fgIsRegistered; - dev_t u4DeviceNumber; /* dynamic device number */ -// struct kfifo *prKfifo; /* for buffering indicated events */ - struct kfifo rKfifo; /* for buffering indicated events */ - spinlock_t rSpinLock; /* spin lock for kfifo */ - struct cdev cdev; - UINT_32 u4FreqInKHz; /* frequency */ - - UINT_8 aucRole[CFG_BOW_PHYSICAL_LINK_NUM]; /* 0: Responder, 1: Initiator */ - ENUM_BOW_DEVICE_STATE aeState[CFG_BOW_PHYSICAL_LINK_NUM]; - PARAM_MAC_ADDRESS arPeerAddr[CFG_BOW_PHYSICAL_LINK_NUM]; - - wait_queue_head_t outq; - - #if CFG_BOW_SEPARATE_DATA_PATH - /* Device handle */ - struct net_device *prDevHandler; - BOOLEAN fgIsNetRegistered; - #endif - -} GL_BOW_INFO, *P_GL_BOW_INFO; -#endif - -/* -* type definition of pointer to p2p structure -*/ -typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; - -struct _GLUE_INFO_T { - /* Device handle */ - struct net_device *prDevHandler; - - /* Device Index(index of arWlanDevInfo[]) */ - INT_32 i4DevIdx; - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* Wireless statistics struct net_device */ - struct iw_statistics rIwStats; - - /* spinlock to sync power save mechanism */ - spinlock_t rSpinLock[SPIN_LOCK_NUM]; - - /* semaphore for ioctl */ - struct semaphore ioctl_sem; - - UINT_32 u4Flag; /* GLUE_FLAG_XXX */ - UINT_32 u4PendFlag; - //UINT_32 u4TimeoutFlag; - UINT_32 u4OidCompleteFlag; - UINT_32 u4ReadyFlag; /* check if card is ready */ - - /* Number of pending frames, also used for debuging if any frame is - * missing during the process of unloading Driver. - * - * NOTE(Kevin): In Linux, we also use this variable as the threshold - * for manipulating the netif_stop(wake)_queue() func. - */ - INT_32 ai4TxPendingFrameNumPerQueue[4][CFG_MAX_TXQ_NUM]; - INT_32 i4TxPendingFrameNum; - INT_32 i4TxPendingSecurityFrameNum; - - /* current IO request for kalIoctl */ - GL_IO_REQ_T OidEntry; - - /* registry info*/ - REG_INFO_T rRegInfo; - - /* firmware */ - struct firmware *prFw; - - /* Host interface related information */ - /* defined in related hif header file */ - GL_HIF_INFO_T rHifInfo; - - /*! \brief wext wpa related information */ - GL_WPA_INFO_T rWpaInfo; - - - /* Pointer to ADAPTER_T - main data structure of internal protocol stack */ - P_ADAPTER_T prAdapter; - -#ifdef WLAN_INCLUDE_PROC - struct proc_dir_entry *pProcRoot; -#endif /* WLAN_INCLUDE_PROC */ - - /* Indicated media state */ - ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicated; - - /* Device power state D0~D3 */ - PARAM_DEVICE_POWER_STATE ePowerState; - - struct completion rScanComp; /* indicate scan complete */ - struct completion rHaltComp; /* indicate main thread halt complete */ - struct completion rPendComp; /* indicate main thread halt complete */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) - struct completion rMgmtTxComp; /* indicate supp mgmt TX done, supp can request channel again. */ - atomic_t rMgmtTxAto; -#endif -#if CFG_ENABLE_WIFI_DIRECT - struct completion rSubModComp; /*indicate sub module init or exit complete*/ -#endif - WLAN_STATUS rPendStatus; - - QUE_T rTxQueue; - - - /* OID related */ - QUE_T rCmdQueue; - //PVOID pvInformationBuffer; - //UINT_32 u4InformationBufferLength; - //PVOID pvOidEntry; - //PUINT_8 pucIOReqBuff; - //QUE_T rIOReqQueue; - //QUE_T rFreeIOReqQueue; - - wait_queue_head_t waitq; - struct task_struct *main_thread; - - struct timer_list tickfn; - - -#if CFG_SUPPORT_EXT_CONFIG - UINT_16 au2ExtCfg[256]; /* NVRAM data buffer */ - UINT_32 u4ExtCfgLength; /* 0 means data is NOT valid */ -#endif - -#if 1//CFG_SUPPORT_WAPI - /* Should be large than the PARAM_WAPI_ASSOC_INFO_T */ - UINT_8 aucWapiAssocInfoIEs[42]; - UINT_16 u2WapiAssocInfoIESz; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - GL_BOW_INFO rBowInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - P_GL_P2P_INFO_T prP2PInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - /* Wireless statistics struct net_device */ - struct iw_statistics rP2pIwStats; -#endif -#endif - BOOLEAN fgWpsActive; - UINT_8 aucWSCIE[500]; /*for probe req*/ - UINT_16 u2WSCIELen; - UINT_8 aucWSCAssocInfoIE[200]; /*for Assoc req*/ - UINT_16 u2WSCAssocInfoIELen; - - /* NVRAM availability */ - BOOLEAN fgNvramAvailable; - - BOOLEAN fgMcrAccessAllowed; - - /* MAC Address Overriden by IOCTL */ - BOOLEAN fgIsMacAddrOverride; - PARAM_MAC_ADDRESS rMacAddrOverride; - - SET_TXPWR_CTRL_T rTxPwr; - - /* for cfg80211 scan done indication */ - struct cfg80211_scan_request *prScanRequest; - - /* to indicate registered or not */ - BOOLEAN fgIsRegistered; - - /* for cfg80211 connected indication */ - UINT_32 u4RspIeLength; - UINT_8 aucRspIe[CFG_CFG80211_IE_BUF_LEN]; - - UINT_32 u4ReqIeLength; - UINT_8 aucReqIe[CFG_CFG80211_IE_BUF_LEN]; -}; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) - /* linux 2.4 */ - typedef void (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#else - typedef irqreturn_t (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#endif - -typedef void (*PFN_LINUX_TIMER_FUNC)(unsigned long); - - -/* generic sub module init/exit handler -* now, we only have one sub module, p2p -*/ -#if CFG_ENABLE_WIFI_DIRECT -typedef BOOLEAN (*SUB_MODULE_INIT)(P_GLUE_INFO_T prGlueInfo); -typedef BOOLEAN (*SUB_MODULE_EXIT)(P_GLUE_INFO_T prGlueInfo); - -typedef struct _SUB_MODULE_HANDLER { - SUB_MODULE_INIT subModInit; - SUB_MODULE_EXIT subModExit; - BOOLEAN fgIsInited; -} SUB_MODULE_HANDLER, *P_SUB_MODULE_HANDLER; - -#endif - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_MODE_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_MODE_PARAMS, *P_NL80211_DRIVER_TEST_MODE_PARAMS; - -/*SW CMD */ -typedef struct _NL80211_DRIVER_SW_CMD_PARAMS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 set; - unsigned long adr; - unsigned long data; -}NL80211_DRIVER_SW_CMD_PARAMS, *P_NL80211_DRIVER_SW_CMD_PARAMS; - -struct iw_encode_exts { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 addr[MAC_ADDR_LEN]; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[32]; -}; - -/*SET KEY EXT */ -typedef struct _NL80211_DRIVER_SET_KEY_EXTS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 key_index; - UINT_8 key_len; - struct iw_encode_exts ext; -}NL80211_DRIVER_SET_KEY_EXTS, *P_NL80211_DRIVER_SET_KEY_EXTS; - - -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Glue Layer */ -/*----------------------------------------------------------------------------*/ -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - #define GLUE_SPIN_LOCK_DECLARATION() - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - #define GLUE_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags = 0 - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_irqsave(&(prGlueInfo)->rSpinLock[rLockCategory], __u4Flags); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_irqrestore(&(prGlueInfo->rSpinLock[rLockCategory]), __u4Flags); \ - } -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define GLUE_GET_PKT_QUEUE_ENTRY(_p) \ - (&( ((struct sk_buff *)(_p))->cb[0] )) - -#define GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) \ - ((P_NATIVE_PACKET) ((UINT_32)_prQueueEntry - offsetof(struct sk_buff, cb[0])) ) - -#define GLUE_SET_PKT_FLAG_802_11(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(7)) - -#define GLUE_SET_PKT_FLAG_1X(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(6)) - -#define GLUE_SET_PKT_FLAG_PAL(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(5)) - -#define GLUE_SET_PKT_FLAG_P2P(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(4)) - - - -#define GLUE_SET_PKT_TID(_p, _tid) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= (((UINT_8)((_tid) & (BITS(0,3)))))) - - -#define GLUE_SET_PKT_FRAME_LEN(_p, _u2PayloadLen) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) = (UINT_16)(_u2PayloadLen)) - -#define GLUE_GET_PKT_FRAME_LEN(_p) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) ) - - -#define GLUE_GET_PKT_IS_802_11(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(7))) - -#define GLUE_GET_PKT_IS_1X(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(6))) - -#define GLUE_GET_PKT_TID(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BITS(0,3))) - - -#define GLUE_GET_PKT_IS_PAL(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(5))) - -#define GLUE_GET_PKT_IS_P2P(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(4))) - - -#define GLUE_SET_PKT_HEADER_LEN(_p, _ucMacHeaderLen) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) = (UINT_8)(_ucMacHeaderLen)) - -#define GLUE_GET_PKT_HEADER_LEN(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) ) - -#define GLUE_SET_PKT_ARRIVAL_TIME(_p, _rSysTime) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) = (OS_SYSTIME)(_rSysTime)) - -#define GLUE_GET_PKT_ARRIVAL_TIME(_p) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) ) - -/* Check validity of prDev, private data, and pointers */ -#define GLUE_CHK_DEV(prDev) \ - ((prDev && *((P_GLUE_INFO_T *) netdev_priv(prDev))) ? TRUE : FALSE) - -#define GLUE_CHK_PR2(prDev, pr2) \ - ((GLUE_CHK_DEV(prDev) && pr2) ? TRUE : FALSE) - -#define GLUE_CHK_PR3(prDev, pr2, pr3) \ - ((GLUE_CHK_PR2(prDev, pr2) && pr3) ? TRUE : FALSE) - -#define GLUE_CHK_PR4(prDev, pr2, pr3, pr4) \ - ((GLUE_CHK_PR3(prDev, pr2, pr3) && pr4) ? TRUE : FALSE) - -#define GLUE_SET_EVENT(pr) \ - kalSetEvent(pr) - -#define GLUE_INC_REF_CNT(_refCount) atomic_inc((atomic_t *)&(_refCount)) -#define GLUE_DEC_REF_CNT(_refCount) atomic_dec((atomic_t *)&(_refCount)) - - -#define DbgPrint(...) -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#ifdef WLAN_INCLUDE_PROC -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ); - -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ); -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI -BOOLEAN -glRegisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -glUnregisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ); - -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ); - -BOOLEAN -wlanIsLaunched( - VOID - ); - -void -p2pSetMulticastListWorkQueueWrapper( - P_GLUE_INFO_T prGlueInfo - ); - - - -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_OS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_ioctl.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_ioctl.h deleted file mode 100755 index 4f24ff08de48..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_ioctl.h +++ /dev/null @@ -1,1104 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_ioctl.h#9 $ -*/ - -/*! \file gl_p2p_ioctl.h - \brief This file is for custom ioctls for Wi-Fi Direct only -*/ - - - -/* -** $Log: gl_p2p_ioctl.h $ -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 03 25 2011 wh.su - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 03 29 2011 wh.su - * [WCXRP00000095] [MT6620 Wi-Fi] [FW] Refine the P2P GO send broadcast protected code - * add the set power and get power function sample. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 01 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the ioctl sumcmd to meet the p2p_supplicant setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int define for p2p parameter. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * adjust the set wsc ie structure. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 07 2010 cp.wu - * [WCXRP00000237] [MT6620 Wi-Fi][Wi-Fi Direct][Driver] Add interface for supporting service discovery - * define a pair of i/o control for multiplexing layer - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 20 2010 yuche.tsai - * NULL - * Refine a function parameter name. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * -*/ - -#ifndef _GL_P2P_IOCTL_H -#define _GL_P2P_IOCTL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - #include - #include -#endif - -#include "wlan_oid.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// (WirelessExtension) Private I/O Controls -#define IOC_P2P_CFG_DEVICE (SIOCIWFIRSTPRIV+0) -#define IOC_P2P_PROVISION_COMPLETE (SIOCIWFIRSTPRIV+2) -#define IOC_P2P_START_STOP_DISCOVERY (SIOCIWFIRSTPRIV+4) -#define IOC_P2P_DISCOVERY_RESULTS (SIOCIWFIRSTPRIV+5) -#define IOC_P2P_WSC_BEACON_PROBE_RSP_IE (SIOCIWFIRSTPRIV+6) -#define IOC_P2P_GO_WSC_IE IOC_P2P_WSC_BEACON_PROBE_RSP_IE -#define IOC_P2P_CONNECT_DISCONNECT (SIOCIWFIRSTPRIV+8) -#define IOC_P2P_PASSWORD_READY (SIOCIWFIRSTPRIV+10) -//#define IOC_P2P_SET_PWR_MGMT_PARAM (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_SET_INT (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_GET_STRUCT (SIOCIWFIRSTPRIV+13) -#define IOC_P2P_SET_STRUCT (SIOCIWFIRSTPRIV+14) -#define IOC_P2P_GET_REQ_DEVICE_INFO (SIOCIWFIRSTPRIV+15) - -#define PRIV_CMD_INT_P2P_SET 0 - -// IOC_P2P_PROVISION_COMPLETE (iw_point . flags) -#define P2P_PROVISIONING_SUCCESS 0 -#define P2P_PROVISIONING_FAIL 1 - -// IOC_P2P_START_STOP_DISCOVERY (iw_point . flags) -#define P2P_STOP_DISCOVERY 0 -#define P2P_START_DISCOVERY 1 - -// IOC_P2P_CONNECT_DISCONNECT (iw_point . flags) -#define P2P_CONNECT 0 -#define P2P_DISCONNECT 1 - -// IOC_P2P_START_STOP_DISCOVERY (scan_type) -#define P2P_SCAN_FULL_AND_FIND 0 -#define P2P_SCAN_FULL 1 -#define P2P_SCAN_SEARCH_AND_LISTEN 2 -#define P2P_LISTEN 3 - -// IOC_P2P_GET_STRUCT/IOC_P2P_SET_STRUCT -#define P2P_SEND_SD_RESPONSE 0 -#define P2P_GET_SD_REQUEST 1 -#define P2P_SEND_SD_REQUEST 2 -#define P2P_GET_SD_RESPONSE 3 -#define P2P_TERMINATE_SD_PHASE 4 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Wireless Extension: Private I/O Control */ -/*----------------------------------------------------------------------------*/ -typedef struct iw_p2p_cfg_device_type { - void __user *ssid; - UINT_8 ssid_len; - UINT_8 pri_device_type[8]; - UINT_8 snd_device_type[8]; - void __user *device_name; - UINT_8 device_name_len; - UINT_8 intend; - UINT_8 persistence; - UINT_8 sec_mode; - UINT_8 ch; - UINT_8 ch_width; /* 0: 20 Mhz 1:20/40 Mhz auto */ - UINT_8 max_scb; -} IW_P2P_CFG_DEVICE_TYPE, *P_IW_P2P_CFG_DEVICE_TYPE; - -typedef struct iw_p2p_hostapd_param { - UINT_8 cmd; - UINT_8 rsv[3]; - UINT_8 sta_addr[6]; - void __user *data; - UINT_16 len; -} IW_P2P_HOSTAPD_PARAM, *P_IW_P2P_HOSTAPD_PARAM; - -typedef struct iw_p2p_req_device_type { - UINT_8 scan_type; /* 0: Full scan + Find - * 1: Full scan - * 2: Scan (Search +Listen) - * 3: Listen - * other : reserved - */ - UINT_8 pri_device_type[8]; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_REQ_DEVICE_TYPE, *P_IW_P2P_REQ_DEVICE_TYPE; - -typedef struct iw_p2p_connect_device { - UINT_8 sta_addr[6]; - UINT_8 p2pRole; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 authPeer; /* 1: auth peer invitation request */ - UINT_8 intend_config_method; /* Request Peer Device used config method */ -} IW_P2P_CONNECT_DEVICE, *P_IW_P2P_CONNECT_DEVICE; - -typedef struct iw_p2p_password_ready { - UINT_8 active_config_method; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_PASSWORD_READY, *P_IW_P2P_PASSWORD_READY; - -typedef struct iw_p2p_device_req { - UINT_8 name[33]; - UINT_32 name_len; - UINT_8 device_addr[6]; - UINT_8 device_type; - INT_32 config_method; - INT_32 active_config_method; -} IW_P2P_DEVICE_REQ, *P_IW_P2P_DEVICE_REQ; - -typedef struct iw_p2p_transport_struct { - UINT_32 u4CmdId; - UINT_32 inBufferLength; - UINT_32 outBufferLength; - UINT_8 aucBuffer[16]; -} IW_P2P_TRANSPORT_STRUCT, *P_IW_P2P_TRANSPORT_STRUCT; - -// For Invitation -typedef struct iw_p2p_ioctl_invitation_struct { - UINT_8 aucDeviceID[6]; - UINT_8 aucGroupID[6]; // BSSID - UINT_8 aucSsid[32]; - UINT_32 u4SsidLen; - UINT_8 ucReinvoke; -} IW_P2P_IOCTL_INVITATION_STRUCT, *P_IW_P2P_IOCTL_INVITATION_STRUCT; - -typedef struct iw_p2p_ioctl_abort_invitation { - UINT_8 dev_addr[6]; -} IW_P2P_IOCTL_ABORT_INVITATION, *P_IW_P2P_IOCTL_ABORT_INVITATION; - -typedef struct iw_p2p_ioctl_invitation_indicate { - UINT_8 dev_addr[6]; - UINT_8 group_bssid[6]; - INT_32 config_method; /* peer device supported config method */ - UINT_8 dev_name[32]; /* for reinvoke */ - UINT_32 name_len; - UINT_8 operating_channel; /* for re-invoke, target operating channel */ - UINT_8 invitation_type; /* invitation or re-invoke */ -} IW_P2P_IOCTL_INVITATION_INDICATE, *P_IW_P2P_IOCTL_INVITATION_INDICATE; - -typedef struct iw_p2p_ioctl_invitation_status { - UINT_32 status_code; -} IW_P2P_IOCTL_INVITATION_STATUS, *P_IW_P2P_IOCTL_INVITATION_STATUS; - -//For Formation -typedef struct iw_p2p_ioctl_start_formation { - UINT_8 dev_addr[6]; /* bssid */ - UINT_8 role; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 auth; /* 1: auth peer invitation request */ - UINT_8 config_method; /* Request Peer Device used config method */ -}IW_P2P_IOCTL_START_FORMATION, *P_IW_P2P_IOCTL_START_FORMATION; - -/* SET_STRUCT / GET_STRUCT */ -typedef enum _ENUM_P2P_CMD_ID_T { - P2P_CMD_ID_SEND_SD_RESPONSE = 0, /* 0x00 (Set) */ - P2P_CMD_ID_GET_SD_REQUEST, /* 0x01 (Get) */ - P2P_CMD_ID_SEND_SD_REQUEST, /* 0x02 (Set) */ - P2P_CMD_ID_GET_SD_RESPONSE, /* 0x03 (Get) */ - P2P_CMD_ID_TERMINATE_SD_PHASE, /* 0x04 (Set) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - P2P_CMD_ID_SEC_CHECK, /* 0x05(Set) */ -#endif - P2P_CMD_ID_INVITATION, /* 0x06 (Set) */ - P2P_CMD_ID_INVITATION_INDICATE, /* 0x07 (Get) */ - P2P_CMD_ID_INVITATION_STATUS, /* 0x08 (Get) */ - P2P_CMD_ID_INVITATION_ABORT, /* 0x09 (Set) */ - P2P_CMD_ID_START_FORMATION, /* 0x0A (Set) */ - P2P_CMD_ID_P2P_VERSION, /* 0x0B (Set/Get) */ - P2P_CMD_ID_GET_CH_LIST = 12, /* 0x0C (Get) */ - P2P_CMD_ID_GET_OP_CH = 14 /* 0x0E (Get) */ -} ENUM_P2P_CMD_ID_T, *P_ENUM_P2P_CMD_ID_T; - -/* Service Discovery */ -typedef struct iw_p2p_cmd_send_sd_response { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_RESPONSE, *P_IW_P2P_CMD_SEND_SD_RESPONSE; - -typedef struct iw_p2p_cmd_get_sd_request { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_REQUEST, *P_IW_P2P_CMD_GET_SD_REQUEST; - -typedef struct iw_p2p_cmd_send_service_discovery_request { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_REQUEST, *P_IW_P2P_CMD_SEND_SD_REQUEST; - -typedef struct iw_p2p_cmd_get_sd_response { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_RESPONSE, *P_IW_P2P_CMD_GET_SD_RESPONSE; - -typedef struct iw_p2p_cmd_terminate_sd_phase { - PARAM_MAC_ADDRESS rPeerAddr; -} IW_P2P_CMD_TERMINATE_SD_PHASE, *P_IW_P2P_CMD_TERMINATE_SD_PHASE; - -typedef struct iw_p2p_version { - UINT_32 u4Version; -} IW_P2P_VERSION, *P_IW_P2P_VERSION; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros used for cfg80211 */ -#define RATETAB_ENT(_rate, _rateid, _flags) \ - { \ - .bitrate = (_rate), \ - .hw_value = (_rateid), \ - .flags = (_flags), \ - } - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) -int mtk_p2p_cfg80211_change_iface( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, u32 *flags, - struct vif_params *params - ); - -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - -int -mtk_p2p_cfg80211_set_default_key( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - -int mtk_p2p_cfg80211_scan( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ); - -int mtk_p2p_cfg80211_connect( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ); - -int mtk_p2p_cfg80211_disconnect( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ); - -int mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ); - -int mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ); - -int mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ); - -int mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ); - -int mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ); - -int -mtk_p2p_cfg80211_change_bss( - struct wiphy * wiphy, - struct net_device * dev, - struct bss_parameters * params - ); - -int -mtk_p2p_cfg80211_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - struct ieee80211_channel * chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 * cookie - ); - -int -mtk_p2p_cfg80211_cancel_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - u64 cookie - ); - -int -mtk_p2p_cfg80211_deauth( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_deauth_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); - - -int -mtk_p2p_cfg80211_disassoc( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_disassoc_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - -int -mtk_p2p_cfg80211_start_ap( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ); - - -int -mtk_p2p_cfg80211_change_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ); - -int -mtk_p2p_cfg80211_mgmt_tx( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie); - -#else -int -mtk_p2p_cfg80211_add_set_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ); - -int -mtk_p2p_cfg80211_mgmt_tx( - struct wiphy * wiphy, - struct net_device * dev, - struct ieee80211_channel * chan, - bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 * buf, - size_t len, - u64 *cookie - ); - -#endif -int -mtk_p2p_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - - -int -mtk_p2p_cfg80211_stop_ap( - struct wiphy * wiphy, - struct net_device * dev - ); - - - -int -mtk_p2p_cfg80211_del_station( - struct wiphy * wiphy, - struct net_device * dev, - u8 * mac - ); - -int -mtk_p2p_cfg80211_set_channel( - IN struct wiphy * wiphy, - IN struct net_device * dev, - IN struct ieee80211_channel * chan, - IN enum nl80211_channel_type channel_type - ); - -int -mtk_p2p_cfg80211_set_bitrate_mask( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ); - - -void -mtk_p2p_cfg80211_mgmt_frame_register( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); - -#if CFG_SUPPORT_WFD -int -mtk_p2p_cfg80211_testmode_wfd_update_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#endif - -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - -#endif - -/* I/O control handlers */ - -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_key ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls takes use of iw_handler */ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls for IOC_SET_STRUCT/IOC_GET_STRUCT */ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* IOC_SET_STRUCT/IOC_GET_STRUCT: Service Discovery */ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -#if CFG_SUPPORT_ANTI_PIRACY -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); -#endif - -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - - -void -mtk_p2p_wext_set_Multicastlist( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -int -mtk_p2p_wext_get_rssi( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats( - struct net_device *prDev - ); - -#endif - -int -mtk_p2p_wext_set_txpow( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_P2P_IOCTL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_kal.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_kal.h deleted file mode 100755 index 9a20c26b406f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_kal.h +++ /dev/null @@ -1,395 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_kal.h#2 $ -*/ - -/*! \file gl_p2p_kal.h - \brief Declaration of KAL functions for Wi-Fi Direct support - - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - - - -/* -** $Log: gl_p2p_kal.h $ -** -** 08 29 2012 chinglan.wang -** [ALPS00349655] [Need Patch] [Volunteer Patch] [ALPS.JB] Daily build warning on [mt6575_phone_mhl-eng] -** . - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 15 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Add group BSSID in invitation request indication. - * The BSSID is used for APP to decide the configure method. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 03 19 2011 terry.wu - * [WCXRP00000577] [MT6620 Wi-Fi][Driver][FW] Create V2.0 branch for firmware and driver - * create V2.0 p2p driver release based on label "MT6620_WIFI_P2P_DRIVER_V2_0_2100_0319_2011" from main trunk. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * -*/ - -#ifndef _GL_P2P_KAL_H -#define _GL_P2P_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_p2p.h" -#include "gl_kal.h" -#include "gl_wext_priv.h" -#include "gl_p2p_ioctl.h" -#include "nic/p2p.h" - - -#if DBG - extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/* Service Discovery */ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Wi-Fi Direct handling */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ); - -VOID -kalP2PUpdateAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ); - -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ); - -BOOLEAN -kalP2PGetCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalP2PGetTkipCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -BOOLEAN -kalP2PGetCcmpCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ); - -UINT_8 -kalP2PGetWscMode( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_16 -kalP2PCalWSC_IELen( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ); - -VOID -kalP2PGenWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ); - - -VOID -kalP2PUpdateWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ); - - - -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ); - -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ); - -VOID -kalP2PInvitationIndication( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ); - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -#if CFG_SUPPORT_ANTI_PIRACY -VOID -kalP2PIndicateSecCheckRsp( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID -kalP2PIndicateChannelReady( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ); - -VOID -kalP2PIndicateScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ); - -VOID -kalP2PIndicateBssInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ); - -VOID -kalP2PIndicateRxMgmtFrame( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ); - -VOID -kalP2PIndicateMgmtTxStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ); - -VOID -kalP2PIndicateChannelExpired( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -kalP2PGCIndicateConnectionStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ); - - -VOID -kalP2PGOStationUpdate( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ); - -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ); - -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ); - -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ); - -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ); - -#endif /* _GL_P2P_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_os.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_os.h deleted file mode 100755 index e2232499608a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_p2p_os.h +++ /dev/null @@ -1,199 +0,0 @@ -/* -** $Id: -//Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/os/linux/include/gl_p2p_os.h#28 $ -*/ - -/*! \file gl_p2p_os.h - \brief List the external reference to OS for p2p GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - - - - - -#ifndef _GL_P2P_OS_H -#define _GL_P2P_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -struct _GL_P2P_INFO_T { - - /* Device handle */ - struct net_device *prDevHandler; - - #if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* cfg80211 */ - struct wireless_dev wdev; - - struct cfg80211_scan_request *prScanRequest; - - UINT_64 u8Cookie; - - /* Generation for station list update. */ - INT_32 i4Generation; - - UINT_32 u4OsMgmtFrameFilter; - - #endif - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* glue layer variables */ - /*move to glueinfo->adapter*/ - // BOOLEAN fgIsRegistered; - UINT_32 u4FreqInKHz; /* frequency */ - UINT_8 ucRole; /* 0: P2P Device, 1: Group Client, 2: Group Owner */ - UINT_8 ucIntent; /* range: 0-15 */ - UINT_8 ucScanMode; /* 0: Search & Listen, 1: Scan without probe response */ - - ENUM_PARAM_MEDIA_STATE_T eState; - UINT_32 u4PacketFilter; - PARAM_MAC_ADDRESS aucMCAddrList[MAX_NUM_GROUP_ADDR]; - - /* connection-requested peer information */ - UINT_8 aucConnReqDevName[32]; - INT_32 u4ConnReqNameLength; - PARAM_MAC_ADDRESS rConnReqPeerAddr; - PARAM_MAC_ADDRESS rConnReqGroupAddr; /* For invitation group. */ - UINT_8 ucConnReqDevType; - INT_32 i4ConnReqConfigMethod; - INT_32 i4ConnReqActiveConfigMethod; - - UINT_32 u4CipherPairwise; - UINT_8 ucWSCRunning; - - UINT_8 aucWSCIE[3][400]; /* 0 for beacon, 1 for probe req, 2 for probe response */ - UINT_16 u2WSCIELen[3]; - -#if CFG_SUPPORT_WFD - UINT_8 aucVenderIE[1024]; /* Save the other IE for prove resp */ - UINT_16 u2VenderIELen; -#endif - - UINT_8 ucOperatingChnl; - UINT_8 ucInvitationType; - - UINT_32 u4InvStatus; - - /* For SET_STRUCT/GET_STRUCT */ - UINT_8 aucOidBuf[4096]; - -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - UINT_8 aucSecCheck[256]; - UINT_8 aucSecCheckRsp[256]; -#endif - - /* Hotspot Client Management */ - PARAM_MAC_ADDRESS aucblackMACList[8]; - UINT_8 ucMaxClients; - -}; - - -BOOLEAN -p2pRegisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pUnregisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -p2pSetMode( - IN BOOLEAN fgIsAPMOde - ); - - -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ); - -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_rst.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_rst.h deleted file mode 100755 index 5c918c2a6e2a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_rst.h +++ /dev/null @@ -1,134 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_rst.h#1 $ -*/ - -/*! \file gl_rst.h - \brief Declaration of functions and finite state machine for - MT6620 Whole-Chip Reset Mechanism -*/ - - - - -#ifndef _GL_RST_H -#define _GL_RST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* duplicated from wmt_exp.h for better driver isolation */ -typedef enum _ENUM_WMTDRV_TYPE_T { - WMTDRV_TYPE_BT = 0, - WMTDRV_TYPE_FM = 1, - WMTDRV_TYPE_GPS = 2, - WMTDRV_TYPE_WIFI = 3, - WMTDRV_TYPE_WMT = 4, - WMTDRV_TYPE_STP = 5, - WMTDRV_TYPE_SDIO1 = 6, - WMTDRV_TYPE_SDIO2 = 7, - WMTDRV_TYPE_LPBK = 8, - WMTDRV_TYPE_MAX -} ENUM_WMTDRV_TYPE_T, *P_ENUM_WMTDRV_TYPE_T; - -typedef enum _ENUM_WMTMSG_TYPE_T { - WMTMSG_TYPE_POWER_ON = 0, - WMTMSG_TYPE_POWER_OFF = 1, - WMTMSG_TYPE_RESET = 2, - WMTMSG_TYPE_STP_RDY= 3, - WMTMSG_TYPE_HW_FUNC_ON= 4, - WMTMSG_TYPE_MAX -} ENUM_WMTMSG_TYPE_T, *P_ENUM_WMTMSG_TYPE_T; - -typedef enum _ENUM_WMTRSTMSG_TYPE_T{ - WMTRSTMSG_RESET_START = 0x0, - WMTRSTMSG_RESET_END = 0x1, - WMTRSTMSG_RESET_MAX, - WMTRSTMSG_RESET_INVALID = 0xff -} ENUM_WMTRSTMSG_TYPE_T, *P_ENUM_WMTRSTMSG_TYPE_T; - -typedef void (*PF_WMT_CB)( - ENUM_WMTDRV_TYPE_T, /* Source driver type */ - ENUM_WMTDRV_TYPE_T, /* Destination driver type */ - ENUM_WMTMSG_TYPE_T, /* Message type */ - void *, /* READ-ONLY buffer. Buffer is allocated and freed by WMT_drv. Client - can't touch this buffer after this function return. */ - unsigned int /* Buffer size in unit of byte */ - ); - - -typedef enum _ENUM_WIFI_NETLINK_GRP_T{ - WIFI_NETLINK_GRP_RESET, - WIFI_NETLINK_GRP_MAX -} ENUM_WIFI_NETLINK_GRP_T, *P_ENUM_WIFI_NETLINK_GRP_T; - - -typedef int (*set_p2p_mode)(struct net_device * netdev, PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode); - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/* Reset Initialization/Uninitialization */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ); - -VOID -glResetUninit( - VOID - ); - -VOID -glSendResetRequest( - VOID - ); - -BOOLEAN -kalIsResetting( - VOID - ); - - -#endif /* _GL_RST_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_sec.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_sec.h deleted file mode 100755 index 16f0af93be89..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_sec.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_sec.h#1 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - - - - -#ifndef _GL_SEC_H -#define _GL_SEC_H - -extern void handle_sec_msg_1(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_2(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_3(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_4(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_5(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_final(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); - -#endif /* _GL_SEC_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_typedef.h deleted file mode 100755 index e220b43c36ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_typedef.h +++ /dev/null @@ -1,279 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_typedef.h#1 $ -*/ - -/*! \file gl_typedef.h - \brief Definition of basic data type(os dependent). - - In this file we define the basic data type. -*/ - - - -/* -** $Log: gl_typedef.h $ - * - * 06 22 2012 cp.wu - * [WCXRP00001257] [MT6620][MT5931][MT6628][Driver][Linux] Modify KAL_HZ to align ms accuracy - * modify KAL_HZ to (1000) for correct definition. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\6 2009-08-18 22:57:14 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\5 2008-09-22 23:19:30 GMT mtk01461 -** Update comment for code review -** \main\maintrunk.MT5921\4 2008-09-05 17:25:16 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\3 2007-11-09 11:00:50 GMT mtk01425 -** 1. Use macro to unify network-to-host and host-to-network related functions -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_TYPEDEF_H -#define _GL_TYPEDEF_H - -#if defined(CONFIG_HAS_EARLYSUSPEND) -#include -#endif - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define HZ of timer tick for function kalGetTimeTick() */ -#define KAL_HZ (1000) - -/* Miscellaneous Equates */ -#ifndef FALSE - #define FALSE ((BOOL) 0) - #define TRUE ((BOOL) 1) -#endif /* FALSE */ - -#ifndef NULL - #if defined(__cplusplus) - #define NULL 0 - #else - #define NULL ((void *) 0) - #endif -#endif - -#if defined(CONFIG_HAS_EARLYSUSPEND) -typedef void (*early_suspend_callback)(struct early_suspend *h); -typedef void (*late_resume_callback) (struct early_suspend *h); -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for void */ -typedef void VOID, *PVOID, **PPVOID; - -/* Type definition for Boolean */ -typedef unsigned char BOOL, *PBOOL, BOOLEAN, *PBOOLEAN; - -/* Type definition for signed integers */ -typedef signed char CHAR, *PCHAR, **PPCHAR; -typedef signed char INT_8, *PINT_8, **PPINT_8; -typedef signed short INT_16, *PINT_16, **PPINT_16; -typedef signed long INT_32, *PINT_32, **PPINT_32; -typedef signed long long INT_64, *PINT_64, **PPINT_64; - -/* Type definition for unsigned integers */ -typedef unsigned char UCHAR, *PUCHAR, **PPUCHAR; -typedef unsigned char UINT_8, *PUINT_8, **PPUINT_8, *P_UINT_8; -typedef unsigned short UINT_16, *PUINT_16, **PPUINT_16; -typedef unsigned long ULONG, UINT_32, *PUINT_32, **PPUINT_32; -typedef unsigned long long UINT_64, *PUINT_64, **PPUINT_64; - -typedef unsigned long OS_SYSTIME, *POS_SYSTIME, **PPOS_SYSTIME; - - -/* Type definition of large integer (64bits) union to be comptaible with - * Windows definition, so we won't apply our own coding style to these data types. - * NOTE: LARGE_INTEGER must NOT be floating variable. - * : Check for big-endian compatibility. - */ -typedef union _LARGE_INTEGER { - struct { - UINT_32 LowPart; - INT_32 HighPart; - } u; - INT_64 QuadPart; -} LARGE_INTEGER, *PLARGE_INTEGER; - -typedef union _ULARGE_INTEGER { - struct { - UINT_32 LowPart; - UINT_32 HighPart; - } u; - UINT_64 QuadPart; -} ULARGE_INTEGER, *PULARGE_INTEGER; - - -typedef INT_32 (*probe_card)(PVOID pvData); -typedef VOID (*remove_card)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define IN //volatile -#define OUT //volatile - -#define __KAL_INLINE__ static __inline__ -#define __KAL_ATTRIB_PACKED__ __attribute__((__packed__)) -#define __KAL_ATTRIB_ALIGN_4__ __attribute__ ((aligned (4))) - - -#ifndef BIT -#define BIT(n) ((UINT_32) 1UL << (n)) -#endif /* BIT */ - -#ifndef BITS -/* bits range: for example BITS(16,23) = 0xFF0000 - * ==> (BIT(m)-1) = 0x0000FFFF ~(BIT(m)-1) => 0xFFFF0000 - * ==> (BIT(n+1)-1) = 0x00FFFFFF - */ -#define BITS(m,n) (~(BIT(m)-1) & ((BIT(n) - 1) | BIT(n))) -#endif /* BIT */ - - -/* This macro returns the byte offset of a named field in a known structure - type. - _type - structure name, - _field - field name of the structure */ -#ifndef OFFSET_OF - #define OFFSET_OF(_type, _field) ((UINT_32)&(((_type *)0)->_field)) -#endif /* OFFSET_OF */ - - -/* This macro returns the base address of an instance of a structure - * given the type of the structure and the address of a field within the - * containing structure. - * _addrOfField - address of current field of the structure, - * _type - structure name, - * _field - field name of the structure - */ -#ifndef ENTRY_OF - #define ENTRY_OF(_addrOfField, _type, _field) \ - ((_type *)((PINT_8)(_addrOfField) - (PINT_8)OFFSET_OF(_type, _field))) -#endif /* ENTRY_OF */ - - -/* This macro align the input value to the DW boundary. - * _value - value need to check - */ -#ifndef ALIGN_4 - #define ALIGN_4(_value) (((_value) + 3) & ~3u) -#endif /* ALIGN_4 */ - -/* This macro check the DW alignment of the input value. - * _value - value of address need to check - */ -#ifndef IS_ALIGN_4 - #define IS_ALIGN_4(_value) (((_value) & 0x3) ? FALSE : TRUE) -#endif /* IS_ALIGN_4 */ - -#ifndef IS_NOT_ALIGN_4 - #define IS_NOT_ALIGN_4(_value) (((_value) & 0x3) ? TRUE : FALSE) -#endif /* IS_NOT_ALIGN_4 */ - - -/* This macro evaluate the input length in unit of Double Word(4 Bytes). - * _value - value in unit of Byte, output will round up to DW boundary. - */ -#ifndef BYTE_TO_DWORD - #define BYTE_TO_DWORD(_value) ((_value + 3) >> 2) -#endif /* BYTE_TO_DWORD */ - -/* This macro evaluate the input length in unit of Byte. - * _value - value in unit of DW, output is in unit of Byte. - */ -#ifndef DWORD_TO_BYTE - #define DWORD_TO_BYTE(_value) ((_value) << 2) -#endif /* DWORD_TO_BYTE */ - -#if 1 // Little-Endian - #define CONST_NTOHS(_x) __constant_ntohs(_x) - - #define CONST_HTONS(_x) __constant_htons(_x) - - #define NTOHS(_x) ntohs(_x) - - #define HTONS(_x) htons(_x) - - #define NTOHL(_x) ntohl(_x) - - #define HTONL(_x) htonl(_x) - -#else // Big-Endian - - #define CONST_NTOHS(_x) - - #define CONST_HTONS(_x) - - #define NTOHS(_x) - - #define HTONS(_x) - -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_TYPEDEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_wext.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_wext.h deleted file mode 100755 index 7a5129f7a54d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_wext.h +++ /dev/null @@ -1,376 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_wext.h#1 $ -*/ - -/*! \file gl_wext.h - \brief This file is for Portable Driver linux wireless extension support. -*/ - - - -/* -** $Log: gl_wext.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\12 2009-10-20 17:38:33 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\11 2009-09-28 20:19:28 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\10 2009-09-03 12:12:35 GMT mtk01088 -** adding the function declaration -** \main\maintrunk.MT5921\9 2009-08-18 22:57:17 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\8 2008-08-29 16:59:07 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\7 2008-08-29 14:13:28 GMT mtk01088 -** adjust the header file for code refine -** \main\maintrunk.MT5921\6 2008-03-28 10:40:31 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\5 2008-03-11 14:51:08 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\4 2008-02-12 23:45:45 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\3 2007-11-06 19:36:19 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_H -#define _GL_WEXT_H - -#ifdef WIRELESS_EXT -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define KILO 1000 -#define RATE_5_5M 11 /* 5.5M */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PARAM_FIXED_IEs { - UINT_8 aucTimestamp[8]; - UINT_16 u2BeaconInterval; - UINT_16 u2Capabilities; -} PARAM_FIXED_IEs; - -typedef struct _PARAM_VARIABLE_IE_T { - UINT_8 ucElementID; - UINT_8 ucLength; - UINT_8 aucData[1]; -} PARAM_VARIABLE_IE_T, *P_PARAM_VARIABLE_IE_T; - - -#if WIRELESS_EXT < 18 - -#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses struct iw_mlme */ -/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ -#define IW_MLME_DEAUTH 0 -#define IW_MLME_DISASSOC 1 - -/*! \brief SIOCSIWMLME data */ -struct iw_mlme { - __u16 cmd; /*!< IW_MLME_* */ - __u16 reason_code; - struct sockaddr addr; -}; - -#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */ -#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */ -/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ -#define IW_AUTH_INDEX 0x0FFF -#define IW_AUTH_FLAGS 0xF000 -/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) - * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the - * parameter that is being set/get to; value will be read/written to - * struct iw_param value field) */ -#define IW_AUTH_WPA_VERSION 0 -#define IW_AUTH_CIPHER_PAIRWISE 1 -#define IW_AUTH_CIPHER_GROUP 2 -#define IW_AUTH_KEY_MGMT 3 -#define IW_AUTH_TKIP_COUNTERMEASURES 4 -#define IW_AUTH_DROP_UNENCRYPTED 5 -#define IW_AUTH_80211_AUTH_ALG 6 -#define IW_AUTH_WPA_ENABLED 7 -#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 -#define IW_AUTH_ROAMING_CONTROL 9 -#define IW_AUTH_PRIVACY_INVOKED 10 -#if CFG_SUPPORT_802_11W -#define IW_AUTH_MFP 12 - -#define IW_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define IW_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define IW_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/* IW_AUTH_WPA_VERSION values (bit field) */ -#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 -#define IW_AUTH_WPA_VERSION_WPA 0x00000002 -#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 - -/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ -#define IW_AUTH_CIPHER_NONE 0x00000001 -#define IW_AUTH_CIPHER_WEP40 0x00000002 -#define IW_AUTH_CIPHER_TKIP 0x00000004 -#define IW_AUTH_CIPHER_CCMP 0x00000008 -#define IW_AUTH_CIPHER_WEP104 0x00000010 - -/* IW_AUTH_KEY_MGMT values (bit field) */ -#define IW_AUTH_KEY_MGMT_802_1X 1 -#define IW_AUTH_KEY_MGMT_PSK 2 -#define IW_AUTH_KEY_MGMT_WPA_NONE 4 - -/* IW_AUTH_80211_AUTH_ALG values (bit field) */ -#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 -#define IW_AUTH_ALG_SHARED_KEY 0x00000002 -#define IW_AUTH_ALG_LEAP 0x00000004 - -/* IW_AUTH_ROAMING_CONTROL values */ -#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ -#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming - * control */ - -#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */ -#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */ -/* SIOCSIWENCODEEXT definitions */ -#define IW_ENCODE_SEQ_MAX_SIZE 8 -/* struct iw_encode_ext ->alg */ -#define IW_ENCODE_ALG_NONE 0 -#define IW_ENCODE_ALG_WEP 1 -#define IW_ENCODE_ALG_TKIP 2 -#define IW_ENCODE_ALG_CCMP 3 -#if CFG_SUPPORT_802_11W -#define IW_ENCODE_ALG_AES_CMAC 5 -#endif - -/* struct iw_encode_ext ->ext_flags */ -#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 -#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 -#define IW_ENCODE_EXT_GROUP_KEY 0x00000004 -#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008 - -struct iw_encode_ext { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - struct sockaddr addr; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[0]; -}; - -#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */ -#define IW_PMKSA_ADD 1 -#define IW_PMKSA_REMOVE 2 -#define IW_PMKSA_FLUSH 3 - -#define IW_PMKID_LEN 16 - -struct iw_pmksa { - __u32 cmd; /*!< IW_PMKSA_* */ - struct sockaddr bssid; - __u8 pmkid[IW_PMKID_LEN]; -}; - -#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..) - * (scan results); This includes id and - * length fields. One IWEVGENIE may - * contain more than one IE. Scan - * results may contain one or more - * IWEVGENIE events. */ -#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure - * (struct iw_michaelmicfailure) - */ -#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request. - * The data includes id and length - * fields and may contain more than one - * IE. This event is required in - * Managed mode if the driver - * generates its own WPA/RSN IE. This - * should be sent just before - * IWEVREGISTERED event for the - * association. */ -#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association - * Response. The data includes id and - * length fields and may contain more - * than one IE. This may be sent - * between IWEVASSOCREQIE and - * IWEVREGISTERED events for the - * association. */ -#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN - * pre-authentication - * (struct iw_pmkid_cand) */ - -#endif /* WIRELESS_EXT < 18 */ - -#if WIRELESS_EXT < 17 -/* Statistics flags (bitmask in updated) */ -#define IW_QUAL_QUAL_UPDATED 0x1 /* Value was updated since last read */ -#define IW_QUAL_LEVEL_UPDATED 0x2 -#define IW_QUAL_NOISE_UPDATED 0x4 -#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ -#define IW_QUAL_LEVEL_INVALID 0x20 -#define IW_QUAL_NOISE_INVALID 0x40 -#endif - -enum { - IEEE80211_FILTER_TYPE_BEACON = 1<<0, - IEEE80211_FILTER_TYPE_PROBE_REQ = 1<<1, - IEEE80211_FILTER_TYPE_PROBE_RESP = 1<<2, - IEEE80211_FILTER_TYPE_ASSOC_REQ = 1<<3, - IEEE80211_FILTER_TYPE_ASSOC_RESP = 1<<4, - IEEE80211_FILTER_TYPE_AUTH = 1<<5, - IEEE80211_FILTER_TYPE_DEAUTH = 1<<6, - IEEE80211_FILTER_TYPE_DISASSOC = 1<<7, - IEEE80211_FILTER_TYPE_ALL = 0xFF /* used to check the valid filter bits */ -}; - -#if CFG_SUPPORT_WAPI -#define IW_AUTH_WAPI_ENABLED 0x20 -#define IW_ENCODE_ALG_SMS4 0x20 -#endif - -#if CFG_SUPPORT_WAPI /* Android+ */ -#define IW_AUTH_KEY_MGMT_WAPI_PSK 3 -#define IW_AUTH_KEY_MGMT_WAPI_CERT 4 -#endif -#define IW_AUTH_KEY_MGMT_WPS 5 - -#if CFG_SUPPORT_802_11W -#define IW_AUTH_KEY_MGMT_802_1X_SHA256 7 -#define IW_AUTH_KEY_MGMT_PSK_SHA256 8 -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern const struct iw_handler_def wext_handler_def; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* wireless extensions' ioctls */ -int -wext_support_ioctl( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ); - -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ); - -void -wext_indicate_wext_event( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4DataLen - ); - -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ); - -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ); - -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* WIRELESS_EXT */ - -#endif /* _GL_WEXT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_wext_priv.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_wext_priv.h deleted file mode 100755 index 4a40ce491bae..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/include/gl_wext_priv.h +++ /dev/null @@ -1,396 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_wext_priv.h#3 $ -*/ - -/*! \file gl_wext_priv.h - \brief This file includes private ioctl support. -*/ - - - -/* -** $Log: gl_wext_priv.h $ - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add a CMD ID for P2P driver version query. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\16 2009-09-29 16:47:23 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\15 2009-09-28 20:19:31 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\14 2009-05-07 22:26:06 GMT mtk01089 -** add private IO control for Linux BWCS -** \main\maintrunk.MT5921\13 2008-08-29 14:55:20 GMT mtk01088 -** adjust the code to meet coding style -** \main\maintrunk.MT5921\12 2008-07-16 15:23:45 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\11 2008-07-14 13:55:58 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\10 2008-07-09 00:20:24 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\9 2008-05-30 20:27:24 GMT mtk01461 -** Add POWER_MODE Private IOCTL cmd -** \main\maintrunk.MT5921\8 2008-04-17 23:06:44 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\7 2008-03-31 21:01:24 GMT mtk01461 -** Add priv IOCTL for VOIP settings -** \main\maintrunk.MT5921\6 2008-03-31 13:49:47 GMT mtk01461 -** add priv ioctl arg definition for turning on / off roaming -** \main\maintrunk.MT5921\5 2008-03-26 15:35:09 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\4 2008-03-11 14:51:11 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\3 2007-11-06 19:36:25 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_PRIV_H -#define _GL_WEXT_PRIV_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/* If it is set to 1, iwpriv will support register read/write */ -#define CFG_SUPPORT_PRIV_MCR_RW 1 - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* New wireless extensions API - SET/GET convention (even ioctl numbers are - * root only) - */ -#define IOCTL_SET_INT (SIOCIWFIRSTPRIV + 0) -#define IOCTL_GET_INT (SIOCIWFIRSTPRIV + 1) - -#define IOCTL_SET_ADDRESS (SIOCIWFIRSTPRIV + 2) -#define IOCTL_GET_ADDRESS (SIOCIWFIRSTPRIV + 3) -#define IOCTL_SET_STR (SIOCIWFIRSTPRIV + 4) -#define IOCTL_GET_STR (SIOCIWFIRSTPRIV + 5) -#define IOCTL_SET_KEY (SIOCIWFIRSTPRIV + 6) -#define IOCTL_GET_KEY (SIOCIWFIRSTPRIV + 7) -#define IOCTL_SET_STRUCT (SIOCIWFIRSTPRIV + 8) -#define IOCTL_GET_STRUCT (SIOCIWFIRSTPRIV + 9) -#define IOCTL_SET_STRUCT_FOR_EM (SIOCIWFIRSTPRIV + 11) -#define IOCTL_SET_INTS (SIOCIWFIRSTPRIV + 12) -#define IOCTL_GET_INTS (SIOCIWFIRSTPRIV + 13) - -#define PRIV_CMD_REG_DOMAIN 0 -#define PRIV_CMD_BEACON_PERIOD 1 -#define PRIV_CMD_ADHOC_MODE 2 - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - #define PRIV_CMD_CSUM_OFFLOAD 3 -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#define PRIV_CMD_ROAMING 4 -#define PRIV_CMD_VOIP_DELAY 5 -#define PRIV_CMD_POWER_MODE 6 - -#define PRIV_CMD_WMM_PS 7 -#define PRIV_CMD_BT_COEXIST 8 -#define PRIV_GPIO2_MODE 9 - -#define PRIV_CUSTOM_SET_PTA 10 -#define PRIV_CUSTOM_CONTINUOUS_POLL 11 -#define PRIV_CUSTOM_SINGLE_ANTENNA 12 -#define PRIV_CUSTOM_BWCS_CMD 13 -#define PRIV_CUSTOM_DISABLE_BEACON_DETECTION 14//later -#define PRIV_CMD_OID 15 -#define PRIV_SEC_MSG_OID 16 - -#define PRIV_CMD_TEST_MODE 17 -#define PRIV_CMD_TEST_CMD 18 -#define PRIV_CMD_ACCESS_MCR 19 -#define PRIV_CMD_SW_CTRL 20 - -#if 1 /* ANTI_PRIVCY */ -#define PRIV_SEC_CHECK_OID 21 -#endif - -#define PRIV_CMD_WSC_PROBE_REQ 22 - -#define PRIV_CMD_P2P_VERSION 23 - -#define PRIV_CMD_GET_CH_LIST 24 - -#define PRIV_CMD_SET_TX_POWER 25 - -#define PRIV_CMD_BAND_CONFIG 26 - -#define PRIV_CMD_DUMP_MEM 27 - -#define PRIV_CMD_P2P_MODE 28 - -/* 802.3 Objects (Ethernet) */ -#define OID_802_3_CURRENT_ADDRESS 0x01010102 - -/* IEEE 802.11 OIDs */ -#define OID_802_11_SUPPORTED_RATES 0x0D01020E -#define OID_802_11_CONFIGURATION 0x0D010211 - -/* PnP and PM OIDs, NDIS default OIDS */ -#define OID_PNP_SET_POWER 0xFD010101 - -#define OID_CUSTOM_OID_INTERFACE_VERSION 0xFFA0C000 - -/* MT5921 specific OIDs */ -#define OID_CUSTOM_BT_COEXIST_CTRL 0xFFA0C580 -#define OID_CUSTOM_POWER_MANAGEMENT_PROFILE 0xFFA0C581 -#define OID_CUSTOM_PATTERN_CONFIG 0xFFA0C582 -#define OID_CUSTOM_BG_SSID_SEARCH_CONFIG 0xFFA0C583 -#define OID_CUSTOM_VOIP_SETUP 0xFFA0C584 -#define OID_CUSTOM_ADD_TS 0xFFA0C585 -#define OID_CUSTOM_DEL_TS 0xFFA0C586 -#define OID_CUSTOM_SLT 0xFFA0C587 -#define OID_CUSTOM_ROAMING_EN 0xFFA0C588 -#define OID_CUSTOM_WMM_PS_TEST 0xFFA0C589 -#define OID_CUSTOM_COUNTRY_STRING 0xFFA0C58A -#define OID_CUSTOM_MULTI_DOMAIN_CAPABILITY 0xFFA0C58B -#define OID_CUSTOM_GPIO2_MODE 0xFFA0C58C -#define OID_CUSTOM_CONTINUOUS_POLL 0xFFA0C58D -#define OID_CUSTOM_DISABLE_BEACON_DETECTION 0xFFA0C58E - -/* CR1460, WPS privacy bit check disable */ -#define OID_CUSTOM_DISABLE_PRIVACY_CHECK 0xFFA0C600 - -/* Precedent OIDs */ -#define OID_CUSTOM_MCR_RW 0xFFA0C801 -#define OID_CUSTOM_EEPROM_RW 0xFFA0C803 -#define OID_CUSTOM_SW_CTRL 0xFFA0C805 -#define OID_CUSTOM_MEM_DUMP 0xFFA0C807 - - -/* RF Test specific OIDs */ -#define OID_CUSTOM_TEST_MODE 0xFFA0C901 -#define OID_CUSTOM_TEST_RX_STATUS 0xFFA0C903 -#define OID_CUSTOM_TEST_TX_STATUS 0xFFA0C905 -#define OID_CUSTOM_ABORT_TEST_MODE 0xFFA0C906 -#define OID_CUSTOM_MTK_WIFI_TEST 0xFFA0C911 - -/* BWCS */ -#define OID_CUSTOM_BWCS_CMD 0xFFA0C931 -#define OID_CUSTOM_SINGLE_ANTENNA 0xFFA0C932 -#define OID_CUSTOM_SET_PTA 0xFFA0C933 - -/* NVRAM */ -#define OID_CUSTOM_MTK_NVRAM_RW 0xFFA0C941 -#define OID_CUSTOM_CFG_SRC_TYPE 0xFFA0C942 -#define OID_CUSTOM_EEPROM_TYPE 0xFFA0C943 - - -#if CFG_SUPPORT_WAPI -#define OID_802_11_WAPI_MODE 0xFFA0CA00 -#define OID_802_11_WAPI_ASSOC_INFO 0xFFA0CA01 -#define OID_802_11_SET_WAPI_KEY 0xFFA0CA02 -#endif - -#if CFG_SUPPORT_WPS2 -#define OID_802_11_WSC_ASSOC_INFO 0xFFA0CB00 -#endif - - -/* Define magic key of test mode (Don't change it for future compatibity) */ -#define PRIV_CMD_TEST_MAGIC_KEY 2011 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* NIC BBCR configuration entry structure */ -typedef struct _PRIV_CONFIG_ENTRY { - UINT_8 ucOffset; - UINT_8 ucValue; -} PRIV_CONFIG_ENTRY, *PPRIV_CONFIG_ENTRY; - -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC_REQ) ( - IN PVOID prAdapter, - IN OUT PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_OID_METHOD_T { - ENUM_OID_GLUE_ONLY, - ENUM_OID_GLUE_EXTENSION, - ENUM_OID_DRIVER_CORE -} ENUM_OID_METHOD_T, *P_ENUM_OID_METHOD_T; - -/* OID set/query processing entry */ -typedef struct _WLAN_REQ_ENTRY { - UINT_32 rOid; /* OID */ - PUINT_8 pucOidName; /* OID name text */ - BOOLEAN fgQryBufLenChecking; - BOOLEAN fgSetBufLenChecking; - ENUM_OID_METHOD_T eOidMethod; - UINT_32 u4InfoBufLen; - PFN_OID_HANDLER_FUNC_REQ pfOidQueryHandler; /* PFN_OID_HANDLER_FUNC*/ - PFN_OID_HANDLER_FUNC_REQ pfOidSetHandler; /* PFN_OID_HANDLER_FUNC */ -} WLAN_REQ_ENTRY, *P_WLAN_REQ_ENTRY; - -typedef struct _NDIS_TRANSPORT_STRUCT { - UINT_32 ndisOidCmd; - UINT_32 inNdisOidlength; - UINT_32 outNdisOidLength; - UINT_8 ndisOidContent[16]; -} NDIS_TRANSPORT_STRUCT, *P_NDIS_TRANSPORT_STRUCT; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -int -priv_set_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_struct( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_support_ioctl ( - IN struct net_device *prDev, - IN OUT struct ifreq *prReq, - IN int i4Cmd - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_WEXT_PRIV_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/platform.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/platform.c deleted file mode 100755 index 98d850339fd9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/linux/platform.c +++ /dev/null @@ -1,654 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/platform.c#1 $ -*/ - -/*! \file "platform.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from wlan_oid.c and for parse.c and - rsn.c and nic_privacy.c - -*/ - - - -/* -** $Log: platform.c $ - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 13 2011 jeffrey.chang - * [WCXRP00000983] [MT6620][Wi-Fi Driver] invalid pointer casting causes kernel panic during p2p connection - * fix the pointer casting - * - * 06 29 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * . - * - * 06 28 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * remove un-used code - * - * 05 11 2011 jeffrey.chang - * NULL - * fix build error - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 03 2011 jeffrey.chang - * NULL - * add the ARP filter callback - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 01 2011 cp.wu - * [WCXRP00000413] [MT6620 Wi-Fi][Driver] Merge 1103 changes on NVRAM file path change to DaVinci main trunk and V1.1 branch - * upon Jason Zhang(NVRAM owner)'s change, ALPS has modified its NVRAM storage from /nvram/... to /data/nvram/... - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * -** -*/ -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - #include -#endif - -#include "gl_os.h" - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLY_SUSPEND) - #include -#endif -#endif - - extern atomic_t fgIsUnderEarlierSuspend; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define WIFI_NVRAM_FILE_NAME "/data/nvram/APCFG/APRDEB/WIFI" -#define WIFI_NVRAM_CUSTOM_NAME "/data/nvram/APCFG/APRDEB/WIFI_CUSTOM" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -static int netdev_event(struct notifier_block *nb, unsigned long notification, void *ptr) -{ - struct in_device *in_dev; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -//#ifdef CONFIG_IPV6 -#if 0 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - struct in_ifaddr *ifa = (struct in_ifaddr *) ptr; - struct net_device *prDev = ifa->ifa_dev->dev; - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (prDev == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: device is empty.\n")); - return NOTIFY_DONE; - } - - if ((strncmp(prDev->name, "p2p", 3) != 0) && (strncmp(prDev->name, "wlan", 4) != 0)) { - DBGLOG(REQ, INFO, ("netdev_event: xxx\n")); - return NOTIFY_DONE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: prGlueInfo is empty.\n")); - return NOTIFY_DONE; - } - ASSERT(prGlueInfo); - - // <3> get the IPv4 address - in_dev = in_dev_get(prDev); - if (!in_dev) - return; - - //rtnl_lock(); - if(!in_dev->ifa_list ||!in_dev->ifa_list->ifa_local) { - //rtnl_unlock(); - in_dev_put(in_dev); - DBGLOG(REQ, INFO, ("ip is not avaliable.\n")); - return; - } - // <4> copy the IPv4 address - kalMemCopy(ip, &(in_dev->ifa_list->ifa_local), sizeof(ip)); - //rtnl_unlock(); - in_dev_put(in_dev); - - DBGLOG(REQ, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#if defined(MTK_WLAN_ARP_OFFLOAD) - if(NETDEV_UP == notification && PARAM_MEDIA_STATE_CONNECTED == prGlueInfo->eParamMediaStateIndicated){ - PARAM_CUSTOM_SW_CTRL_STRUC_T SwCtrlInfo; - UINT_32 u4SetInfoLen; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - - SwCtrlInfo.u4Id = 0x90110000; - SwCtrlInfo.u4Data = 1; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSwCtrlWrite, - (PVOID)&SwCtrlInfo, - sizeof(SwCtrlInfo), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, INFO, ("ARP OFFLOAD fail 0x%lx\n", rStatus)); - }else{ - DBGLOG(REQ, INFO, ("ARP OFFLOAD success\n")); - } - } -#endif - - if(atomic_read(&fgIsUnderEarlierSuspend)==0){ - - DBGLOG(REQ, INFO, ("netdev_event: PARAM_MEDIA_STATE_DISCONNECTED. (%d)\n", prGlueInfo->eParamMediaStateIndicated)); - return NOTIFY_DONE; - } - -//#ifdef CONFIG_IPV6 -#if 0 - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return NOTIFY_DONE; - } - - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - //u4NumIPv6++; - } -#endif - - // here we can compare the dev with other network's netdev to - // set the proper arp filter - // - // IMPORTANT: please make sure if the context can sleep, if the context can't sleep - // we should schedule a kernel thread to do this for us - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; - UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - -//#ifdef CONFIG_IPV6 -#if 0 - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; -#else - prParamNetAddrList->u4AddressCount = u4NumIPv4; -#endif - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -//#ifdef CONFIG_IPV6 -#if 0 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(aucBuf)); - - DBGLOG(REQ, INFO, ("kalIoctl (0x%x, 0x%x)\n", prGlueInfo, prParamNetAddrList)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } - - return NOTIFY_DONE; - -} - -static struct notifier_block inetaddr_notifier = { - .notifier_call = netdev_event, -}; - -void wlanRegisterNotifier(void) -{ - register_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanRegisterNotifier); - -void wlanUnregisterNotifier(void) -{ - unregister_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanUnregisterNotifier); - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLYSUSPEND) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register platform driver to os -* -* \param[in] wlanSuspend Function pointer to platform suspend function -* \param[in] wlanResume Function pointer to platform resume function -* -* \return The result of registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume) -{ - int ret = 0; - - if(NULL != wlanSuspend) - prDesc->suspend = wlanSuspend; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanSuspend ERROR.\n")); - ret = -1; - } - - if(NULL != wlanResume) - prDesc->resume = wlanResume; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanResume ERROR.\n")); - ret = -1; - } - - register_early_suspend(prDesc); - return ret; -} - -//EXPORT_SYMBOL(glRegisterEarlySuspend); - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will un-register platform driver to os -* -* \return The result of un-registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glUnregisterEarlySuspend(struct early_suspend *prDesc) -{ - int ret = 0; - - unregister_early_suspend(prDesc); - - prDesc->suspend = NULL; - prDesc->resume = NULL; - - return ret; -} - -//EXPORT_SYMBOL(glUnregisterEarlySuspend); -#endif -#endif // !CONFIG_X86 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for reading data from files on NVRAM-FS -* -* \param[in] -* filename -* len -* offset -* \param[out] -* buf -* \return -* actual length of data being read -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_read( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_RDONLY, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to open!!\n")); - return -1; - } - - do { - if ((fd->f_op == NULL) || (fd->f_op->read == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : file can not be read!!\n")); - break; - } - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->read(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAM - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for writing data to files on NVRAM-FS -* -* \param[in] -* filename -* buf -* len -* offset -* \return -* actual length of data being written -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_write ( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_WRONLY|O_CREAT, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to open!!\n")); - return -1; - } - - do{ - if ((fd->f_op == NULL) || (fd->f_op->write == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : file can not be write!!\n")); - break; - } /* End of if */ - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->write(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAMS - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for reading data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* \param[out] -* pu2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ) -{ - if(pu2Data == NULL) { - return FALSE; - } - - if(nvram_read(WIFI_NVRAM_FILE_NAME, - (char *)pu2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for writing data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* u2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Offset, - UINT_16 u2Data - ) -{ - if(nvram_write(WIFI_NVRAM_FILE_NAME, - (char *)&u2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/version.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/version.h deleted file mode 100755 index 716a0628d755..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6620/wlan/os/version.h +++ /dev/null @@ -1,200 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/version.h#1 $ -*/ - -/*! \file "version.h" - \brief Driver's version definition - -*/ - - - -/* -** $Log: version.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.1.1. - * - * 08 26 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.9.. - * - * 08 23 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.8. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * correct typo. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * for building MT6628 Win32 driver environment - * - * 08 03 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.7. - * - * 07 24 2011 puff.wen - * NULL - * [MT5931][Beta 5]Change the version number to v0.2.2.0 - * - * 06 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.6.. - * - * 05 09 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.5.. - * - * 04 19 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.4. - * - * 04 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.3. - * - * 03 25 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.2. - * - * 03 21 2011 chinglan.wang - * NULL - * Change the version number to 2.0.0.1. - * - * 03 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.0. - * - * 02 11 2011 chinglan.wang - * NULL - * Change to the version 1.2.0.2. - * - * 02 10 2011 chinglan.wang - * NULL - * Change the version to 1.2.0.1. - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * [WINDDK] build system changes for MT5931 - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-12-14 14:10:55 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-17 22:41:00 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-13 16:20:33 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:27:13 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _VERSION_H -#define _VERSION_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef NIC_AUTHOR -#define NIC_AUTHOR "NIC_AUTHOR" -#endif -#ifndef NIC_DESC -#define NIC_DESC "NIC_DESC" -#endif - -#ifndef NIC_NAME - #if defined(MT6620) - #define NIC_NAME "MT6620" - #define NIC_DEVICE_ID "MT6620" - #define NIC_DEVICE_ID_LOW "mt6620" - #elif defined(MT5931) - #define NIC_NAME "MT5931" - #define NIC_DEVICE_ID "MT5931" - #define NIC_DEVICE_ID_LOW "mt5931" - #elif defined(MT6628) - #define NIC_NAME "MT6628" - #define NIC_DEVICE_ID "MT6628" - #define NIC_DEVICE_ID_LOW "mt6628" - #endif -#endif - -/* NIC driver information */ -#define NIC_VENDOR "MediaTek Inc." -#define NIC_VENDOR_OUI {0x00, 0x0C, 0xE7} - -#if defined(MT6620) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter Driver" -#elif defined(MT5931) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter Driver" -#elif defined(MT6628) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter Driver" -#endif - -/* Define our driver version */ -#define NIC_DRIVER_MAJOR_VERSION 2 -#define NIC_DRIVER_MINOR_VERSION 0 -#define NIC_DRIVER_VERSION 2,0,1,1 -#define NIC_DRIVER_VERSION_STRING "2.0.1.1" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#endif /* _VERSION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/Makefile b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/Makefile deleted file mode 100755 index 2968515154cd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_MTK_COMBO_WIFI) += wlan/ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/Makefile b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/Makefile deleted file mode 100755 index 019896371333..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/Makefile +++ /dev/null @@ -1,141 +0,0 @@ -# --------------------------------------------------- -# Compile Options -# --------------------------------------------------- -#include $(MTK_PATH_BUILD)/Makefile -ccflags-y += -DLINUX -DMT6628 - -ifeq ($(MTK_WAPI_SUPPORT), yes) - ccflags-y += -DCFG_SUPPORT_WAPI=1 -else - ccflags-y += -DCFG_SUPPORT_WAPI=0 -endif - -ifeq ($(HAVE_XLOG_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_XLOG=1 -else - ccflags-y += -DCFG_SUPPORT_XLOG=0 -endif - -ifeq ($(HAVE_AEE_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_AEE=1 -else - ccflags-y += -DCFG_SUPPORT_AEE=0 -endif - -#ifeq ($(CONFIG_MTK_COMBO_WIFI_HIF_SDIO1), y) -# ccflags-y += -D_HIF_SDIO=1 -#endif - -MODULE_NAME := wlan_mt6628 - -ccflags-y += -D_HIF_SDIO=1 - -ccflags-y += -DDBG=0 -ccflags-y += -I$(src)/os -I$(src)/os/linux/include -I$(src)/os/linux/hif/sdio/include -ccflags-y += -I$(src)/include -I$(src)/include/nic -I$(src)/include/mgmt - -obj-$(CONFIG_MTK_COMBO_WIFI) += $(MODULE_NAME).o -#obj-m += $(MODULE_NAME).o - -# --------------------------------------------------- -# Directory List -# --------------------------------------------------- -COMMON_DIR := common/ -OS_DIR := os/linux/ -HIF_DIR := os/linux/hif/sdio/ -NIC_DIR := nic/ -MGMT_DIR := mgmt/ - - -# --------------------------------------------------- -# Objects List -# --------------------------------------------------- - -COMMON_OBJS := $(COMMON_DIR)dump.o \ - $(COMMON_DIR)wlan_lib.o \ - $(COMMON_DIR)wlan_oid.o \ - $(COMMON_DIR)wlan_bow.o - -NIC_OBJS := $(NIC_DIR)nic.o \ - $(NIC_DIR)nic_tx.o \ - $(NIC_DIR)nic_rx.o \ - $(NIC_DIR)nic_pwr_mgt.o \ - $(NIC_DIR)cmd_buf.o \ - $(NIC_DIR)que_mgt.o \ - $(NIC_DIR)nic_cmd_event.o - -OS_OBJS := $(OS_DIR)gl_init.o \ - $(OS_DIR)gl_kal.o \ - $(OS_DIR)gl_bow.o \ - $(OS_DIR)gl_wext.o \ - $(OS_DIR)gl_wext_priv.o \ - $(OS_DIR)gl_rst.o \ - $(OS_DIR)gl_cfg80211.o \ - $(OS_DIR)platform.o - -MGMT_OBJS := $(MGMT_DIR)ais_fsm.o \ - $(MGMT_DIR)aaa_fsm.o \ - $(MGMT_DIR)assoc.o \ - $(MGMT_DIR)auth.o \ - $(MGMT_DIR)bss.o \ - $(MGMT_DIR)cnm.o \ - $(MGMT_DIR)cnm_timer.o \ - $(MGMT_DIR)cnm_mem.o \ - $(MGMT_DIR)hem_mbox.o \ - $(MGMT_DIR)mib.o \ - $(MGMT_DIR)privacy.o \ - $(MGMT_DIR)rate.o \ - $(MGMT_DIR)rlm.o \ - $(MGMT_DIR)rlm_domain.o \ - $(MGMT_DIR)rlm_obss.o \ - $(MGMT_DIR)rlm_protection.o \ - $(MGMT_DIR)rsn.o \ - $(MGMT_DIR)saa_fsm.o \ - $(MGMT_DIR)scan.o \ - $(MGMT_DIR)scan_fsm.o \ - $(MGMT_DIR)sec_fsm.o \ - $(MGMT_DIR)swcr.o \ - $(MGMT_DIR)roaming_fsm.o - -# --------------------------------------------------- -# P2P Objects List -# --------------------------------------------------- - -COMMON_OBJS += $(COMMON_DIR)wlan_p2p.o - -NIC_OBJS += $(NIC_DIR)p2p_nic.o - -OS_OBJS += $(OS_DIR)gl_p2p.o \ - $(OS_DIR)gl_p2p_cfg80211.o \ - $(OS_DIR)gl_p2p_init.o \ - $(OS_DIR)gl_p2p_kal.o - -MGMT_OBJS += $(MGMT_DIR)p2p_assoc.o \ - $(MGMT_DIR)p2p_bss.o \ - $(MGMT_DIR)p2p_fsm.o \ - $(MGMT_DIR)p2p_func.o \ - $(MGMT_DIR)p2p_rlm.o \ - $(MGMT_DIR)p2p_rlm_obss.o \ - $(MGMT_DIR)p2p_scan.o \ - $(MGMT_DIR)p2p_ie.o \ - $(MGMT_DIR)p2p_state.o - - -ifeq ($(MTK_WAPI_SUPPORT), yes) -MGMT_OBJS += $(MGMT_DIR)wapi.o -endif - -ifeq ($(WLAN_PROC), y) -OS_OBJS += gl_proc.o -endif - -HIF_OBJS := $(HIF_DIR)arm.o \ - $(HIF_DIR)sdio.o - -$(MODULE_NAME)-objs += $(COMMON_OBJS) -$(MODULE_NAME)-objs += $(NIC_OBJS) -$(MODULE_NAME)-objs += $(OS_OBJS) -$(MODULE_NAME)-objs += $(HIF_OBJS) -$(MODULE_NAME)-objs += $(MGMT_OBJS) - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/dump.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/dump.c deleted file mode 100755 index 95f2d7f25b76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/dump.c +++ /dev/null @@ -1,539 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/dump.c#1 $ -*/ - -/*! \file "dump.c" - \brief Provide memory dump function for debugging. - - Provide memory dump function for debugging. -*/ - - - -/* -** $Log: dump.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 19:58:51 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if DBG -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - LOG_FUNC("DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - LOG_FUNC("(%08lx) %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - LOG_FUNC("(%08lx) %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - LOG_FUNC("(%08lx) %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - LOG_FUNC("\n"); - - return; -} /* end of dumpMemory8() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in double words. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length) -{ - PUINT_8 pucAddr; - - - ASSERT(pu4StartAddr); - - LOG_FUNC("DUMP32 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pu4StartAddr, u4Length); - - if (IS_NOT_ALIGN_4((UINT_32)pu4StartAddr)) { - UINT_32 u4ProtrudeLen = sizeof(UINT_32) - ((UINT_32)pu4StartAddr % 4); - - - u4ProtrudeLen = ((u4Length < u4ProtrudeLen) ? u4Length: u4ProtrudeLen); - LOG_FUNC("pu4StartAddr is not at DW boundary.\n"); - pucAddr = (PUINT_8) &pu4StartAddr[0]; - - switch (u4ProtrudeLen) { - case 1: - LOG_FUNC("(%08lx) %02x------\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x%02x----\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - LOG_FUNC("(%08lx) %02x%02x%02x--\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - - u4Length -= u4ProtrudeLen; - pu4StartAddr = (PUINT_32)((UINT_32)pu4StartAddr + u4ProtrudeLen); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %08lx %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], pu4StartAddr[3]); - pu4StartAddr += 4; - u4Length -= 16; - } - else { - switch (u4Length) { - case 1: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ------%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 4: - LOG_FUNC("(%08lx) %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0]); - break; - case 5: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[0]); - break; - case 6: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[1], pucAddr[0]); - break; - case 7: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 8: - LOG_FUNC("(%08lx) %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1]); - break; - case 9: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[0]); - break; - case 10: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[1], pucAddr[0]); - break; - case 11: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 12: - LOG_FUNC("(%08lx) %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2]); - break; - case 13: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[0]); - break; - case 14: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[1], pucAddr[0]); - break; - case 15: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - u4Length = 0; - } - } - - return; -} /* end of dumpMemory32() */ -#elif CFG_SUPPORT_XLOG - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - if (log_level == ANDROID_LOG_ERROR) { - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_WARN) { - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_INFO) { - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_DEBUG) { - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_VERBOSE) { - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - XLOG_FUNC(log_level, "%02x\n", - pucStartAddr[ 0]); - break; - case 2: - XLOG_FUNC(log_level, "%02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - XLOG_FUNC(log_level, "%02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - XLOG_FUNC(log_level, "%02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - - return; -} /* end of dumpMemory8() */ -#endif /* DBG */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_bow.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_bow.c deleted file mode 100755 index 41b179dde04e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_bow.c +++ /dev/null @@ -1,3898 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_bow.c#1 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the 802.11 PAL commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_bow.c $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 01 09 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00110632] [Rose][LCA42][Cross Feature][Bluetooth]The "KE" pops up after the device reboots automatically.(once) - * - * Fix bow link disconnected event dereference. - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 terry.wu - * NULL - * Fix BoW KE. - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * aware more compile options. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * . - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Only reply probe response to its peer or mached SSID for BoW AP. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW SAA retry and disable disconnect event when AAA fail . - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 17 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix wrong StaRec state of BoW . - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix prAssocRspSwRfb casting. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 28 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Simplify link disconnected routine, remove link disconnected other routine. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add new feature - multiple physical link support. - * - * 02 22 2011 wh.su - * [WCXRP00000486] [MT6620 Wi-Fi][BOW] Fixed the bow send frame but not encrypted issue - * fixed the BOW packet sending without encrypted issue. - * - * 02 21 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BOW link disconnection bug. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting. - * - * 02 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW channel granted function. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW to support multiple physical link. - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix for event returnning Band. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 chinghwa.yu - * NULL - * Fix bowResponderScanDone error when prBssDesc is NULL. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * indicate correct AIS network information for PAL. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Initialize nicActivateNetwork(prAdapter as soon as bow is starting.. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * 2) command sequence number is now increased atomically - * * 3) private data could be hold and taken use for other purpose -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -#if CFG_BOW_TEST -extern UINT_32 g_arBowRevPalPacketTime[32]; -#endif - - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -static UINT_32 g_u4LinkCount = 0; -static UINT_32 g_u4Beaconing = 0; -static BOW_TABLE_T arBowTable[CFG_BOW_PHYSICAL_LINK_NUM]; - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -const BOW_CMD_T arBowCmdTable[] = { - {BOW_CMD_ID_GET_MAC_STATUS, bowCmdGetMacStatus}, - {BOW_CMD_ID_SETUP_CONNECTION, bowCmdSetupConnection}, - {BOW_CMD_ID_DESTROY_CONNECTION, bowCmdDestroyConnection}, - {BOW_CMD_ID_SET_PTK, bowCmdSetPTK}, - {BOW_CMD_ID_READ_RSSI, bowCmdReadRSSI}, - {BOW_CMD_ID_READ_LINK_QUALITY, bowCmdReadLinkQuality}, - {BOW_CMD_ID_SHORT_RANGE_MODE, bowCmdShortRangeMode}, - {BOW_CMD_ID_GET_CHANNEL_LIST, bowCmdGetChannelList}, -}; - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCID, - IN BOOLEAN fgSetQuery, - IN BOOLEAN fgNeedResp, - IN PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - IN PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - IN UINT_32 u4SetQueryInfoLen, - IN PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_BOW_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - prCmdInfo->u4PrivateData = (UINT_32) ucSeqNumber; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dispatch command coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - WLAN_STATUS retval = WLAN_STATUS_FAILURE; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < sizeof(arBowCmdTable) / sizeof(BOW_CMD_T); i++) { - if ((arBowCmdTable[i].uCmdID == prCmd->rHeader.ucCommandId) && - arBowCmdTable[i].pfCmdHandle) { - retval = arBowCmdTable[i].pfCmdHandle(prAdapter, prCmd); - break; - } - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_MAC_STATUS -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_MAC_STATUS prMacStatus; - UINT_8 idx = 0; - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eBssSCO; - UINT_8 ucNumOfChannel = 0;//MAX_BOW_NUMBER_OF_CHANNEL; - - RF_CHANNEL_INFO_T aucChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; - - ASSERT(prAdapter); - - //3 <1> If LinkCount != 0 -> OK (optional) - - eBand = BAND_2G4; - eBssSCO = CHNL_EXT_SCN; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS)), VIR_MEM_TYPE); - - prEvent->rHeader.ucEventId = BOW_EVENT_ID_MAC_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_MAC_STATUS); - - // fill event body - prMacStatus = (P_BOW_MAC_STATUS)(prEvent->aucPayload); - kalMemZero(prMacStatus, sizeof(BOW_MAC_STATUS)); - - //3 <2> Call CNM to decide if BOW available. - if (cnmBowIsPermitted(prAdapter)) - { - prMacStatus->ucAvailability = TRUE; - } - else - { - prMacStatus->ucAvailability = FALSE; - } - - memcpy(prMacStatus->aucMacAddr, prAdapter->rWifiVar.aucDeviceAddress, PARAM_MAC_ADDR_LEN); - - if (cnmPreferredChannel(prAdapter, &eBand, &ucPrimaryChannel, &eBssSCO)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get preferred channel.\n")); -#endif - - prMacStatus->ucNumOfChannel = 1; - prMacStatus->arChannelList[0].ucChannelBand = eBand; - prMacStatus->arChannelList[0].ucChannelNum = ucPrimaryChannel; - } - else - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get channel list. Current number of channel, %d.\n", ucNumOfChannel)); -#endif - - rlmDomainGetChnlList(prAdapter, BAND_2G4, MAX_BOW_NUMBER_OF_CHANNEL_2G4, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_2G4*/; idx++) - { - prMacStatus->arChannelList[idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = ucNumOfChannel; - } - - rlmDomainGetChnlList(prAdapter, BAND_5G, MAX_BOW_NUMBER_OF_CHANNEL_5G, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_5G*/; idx++) - { - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = prMacStatus->ucNumOfChannel + ucNumOfChannel; - - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("ucNumOfChannel, eBand, aucChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - ucNumOfChannel, - aucChannelList[0].eBand, - aucChannelList[0].ucChannelNum, - aucChannelList[1].ucChannelNum, - aucChannelList[2].ucChannelNum, - aucChannelList[3].ucChannelNum, - aucChannelList[4].ucChannelNum, - aucChannelList[5].ucChannelNum, - aucChannelList[6].ucChannelNum, - aucChannelList[7].ucChannelNum, - aucChannelList[8].ucChannelNum, - aucChannelList[9].ucChannelNum, - aucChannelList[10].ucChannelNum, - aucChannelList[11].ucChannelNum, - aucChannelList[12].ucChannelNum, - aucChannelList[13].ucChannelNum, - aucChannelList[14].ucChannelNum, - aucChannelList[15].ucChannelNum, - aucChannelList[16].ucChannelNum, - aucChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, eBand, prMacStatus->arChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prMacStatus->ucNumOfChannel, - prMacStatus->arChannelList[0].ucChannelBand, - prMacStatus->arChannelList[0].ucChannelNum, - prMacStatus->arChannelList[1].ucChannelNum, - prMacStatus->arChannelList[2].ucChannelNum, - prMacStatus->arChannelList[3].ucChannelNum, - prMacStatus->arChannelList[4].ucChannelNum, - prMacStatus->arChannelList[5].ucChannelNum, - prMacStatus->arChannelList[6].ucChannelNum, - prMacStatus->arChannelList[7].ucChannelNum, - prMacStatus->arChannelList[8].ucChannelNum, - prMacStatus->arChannelList[9].ucChannelNum, - prMacStatus->arChannelList[10].ucChannelNum, - prMacStatus->arChannelList[11].ucChannelNum, - prMacStatus->arChannelList[12].ucChannelNum, - prMacStatus->arChannelList[13].ucChannelNum, - prMacStatus->arChannelList[14].ucChannelNum, - prMacStatus->arChannelList[15].ucChannelNum, - prMacStatus->arChannelList[16].ucChannelNum, - prMacStatus->arChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, %x.\n", prMacStatus->ucNumOfChannel)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelBand, %x.\n", prMacStatus->arChannelList[0].ucChannelBand)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelNum, %x.\n", prMacStatus->arChannelList[0].ucChannelNum)); - DBGLOG(BOW, EVENT, ("prMacStatus->ucAvailability, %x.\n", prMacStatus->ucAvailability)); - DBGLOG(BOW, EVENT, ("prMacStatus->aucMacAddr, %x:%x:%x:%x:%x:%x.\n", - prMacStatus->aucMacAddr[0], - prMacStatus->aucMacAddr[1], - prMacStatus->aucMacAddr[2], - prMacStatus->aucMacAddr[3], - prMacStatus->aucMacAddr[4], - prMacStatus->aucMacAddr[5])); -#endif - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS))); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SETUP_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SETUP_CONNECTION prBowSetupConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - - UINT_8 ucBowTableIdx = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowSetupConnection = (P_BOW_SETUP_CONNECTION) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SETUP_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <1> If ucLinkCount >= 4 -> Fail. - if (g_u4LinkCount >= CFG_BOW_PHYSICAL_LINK_NUM) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <2> Call CNM, check if BOW is available. - if (!cnmBowIsPermitted(prAdapter)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <3> Lookup BOW Table, if Peer MAC address exist and valid -> Fail. - if (bowCheckBowTableIfVaild(prAdapter, prBowSetupConnection->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if(EQUAL_MAC_ADDR(prBowSetupConnection->aucPeerAddress, prAdapter->rWifiVar.aucDeviceAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_NOT_ACCEPTED; - } - - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = BOW_SETUP_CMD; - rCmdBtOverWifi.ucChannelNum = prBowSetupConnection->ucChannelNum; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowSetupConnection->aucPeerAddress); - rCmdBtOverWifi.u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - rCmdBtOverWifi.ucTimeoutDiscovery = prBowSetupConnection->ucTimeoutDiscovery; - rCmdBtOverWifi.ucTimeoutInactivity = prBowSetupConnection->ucTimeoutInactivity; - rCmdBtOverWifi.ucRole = prBowSetupConnection->ucRole; - rCmdBtOverWifi.PAL_Capabilities = prBowSetupConnection->ucPAL_Capabilities; - rCmdBtOverWifi.cMaxTxPower = prBowSetupConnection->cMaxTxPower; - - if (prBowSetupConnection->ucChannelNum > 14) { - rCmdBtOverWifi.ucChannelBand = BAND_5G; - } - else { - rCmdBtOverWifi.ucChannelBand = BAND_2G4; - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowSetupConnection->aucPeerAddress); - -#if CFG_BOW_PHYSICAL_LINK_NUM > 1 - /*Channel check for supporting multiple physical link*/ - if(g_u4LinkCount > 0) { - if (prBowSetupConnection->ucChannelNum != prBowFsmInfo->ucPrimaryChannel) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - } -#endif - - prBowFsmInfo->ucPrimaryChannel = prBowSetupConnection->ucChannelNum; - prBowFsmInfo->eBand = rCmdBtOverWifi.ucChannelBand; - prBowFsmInfo->u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - prBowFsmInfo->ucRole = prBowSetupConnection->ucRole; - - if (prBowSetupConnection->ucPAL_Capabilities > 0) - { - prBowFsmInfo->fgSupportQoS = TRUE; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection.\n")); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Channel Number - 0x%x.\n", rCmdBtOverWifi.ucChannelNum)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Peer address - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Beacon interval - 0x%x.\n", rCmdBtOverWifi.u2BeaconInterval)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout activity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutDiscovery)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout inactivity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutInactivity)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Role - 0x%x.\n", rCmdBtOverWifi.ucRole)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi PAL capability - 0x%x.\n", rCmdBtOverWifi.PAL_Capabilities)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Max Tx power - 0x%x.\n", rCmdBtOverWifi.cMaxTxPower)); -#endif - - //3 <4> Get a free BOW entry, mark as Valid, fill in Peer MAC address, LinkCount += 1, state == Starting. - if (!bowGetBowTableFreeEntry(prAdapter, &ucBowTableIdx)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - prBowFsmInfo->prTargetBssDesc = NULL; - - COPY_MAC_ADDR(rBowTable.aucPeerAddress, prBowSetupConnection->aucPeerAddress); - //owTable.eState = BOW_DEVICE_STATE_ACQUIRING_CHANNEL; - rBowTable.fgIsValid = TRUE; - rBowTable.ucAcquireID = prBowFsmInfo->ucSeqNumOfChReq; - //rBowTable.ucRole = prBowSetupConnection->ucRole; - //rBowTable.ucChannelNum = prBowSetupConnection->ucChannelNum; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - kalSetBowRole(prAdapter->prGlueInfo, rCmdBtOverWifi.ucRole, prBowSetupConnection->aucPeerAddress); - - GLUE_INC_REF_CNT(g_u4LinkCount); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, cnmTimerInitTimer.\n")); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->u2BeaconInterval, %d.\n", prBowFsmInfo->u2BeaconInterval)); -#endif - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rStartingBeaconTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowSendBeacon, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowChGrantedTimeout, - (UINT_32)NULL); - - //Reset Global Variable - g_u4Beaconing = 0; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("kalInitBowDevice, bow0\n")); -#endif -#if CFG_BOW_SEPARATE_DATA_PATH - kalInitBowDevice(prAdapter->prGlueInfo, BOWDEVNAME); -#endif - - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - if(rCmdBtOverWifi.ucRole == BOW_INITIATOR) { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } else { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - bowResponderScan(prAdapter); - } - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_DESTROY_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_DESTROY_CONNECTION prBowDestroyConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; -#if CFG_BOW_TEST - UINT_8 ucIdx; -#endif - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - //3 <1> If LinkCount == 0 ->Fail (Optional) - if (g_u4LinkCount == 0) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_DESTROY_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <2> Lookup BOW table, check if is not exist (Valid and Peer MAC address) -> Fail - prBowDestroyConnection = (P_BOW_DESTROY_CONNECTION) &(prCmd->aucPayload[0]); - - if (!bowCheckBowTableIfVaild(prAdapter, prBowDestroyConnection->aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, bowCheckIfVaild, not accepted.\n")); -#endif - return WLAN_STATUS_NOT_ACCEPTED; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, destroy Peer address - %x:%x:%x:%x:%x:%x.\n", prBowDestroyConnection->aucPeerAddress[0], - prBowDestroyConnection->aucPeerAddress[1], - prBowDestroyConnection->aucPeerAddress[2], - prBowDestroyConnection->aucPeerAddress[3], - prBowDestroyConnection->aucPeerAddress[4], - prBowDestroyConnection->aucPeerAddress[5])); -#endif - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = 2; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowDestroyConnection->aucPeerAddress); - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowDestroyConnection->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, rCmdBtOverWifi.rPeerAddr - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); -#endif - -#if CFG_BOW_TEST - for (ucIdx = 0; ucIdx < 11; ucIdx++) - { - DBGLOG(BOW, EVENT, ("BoW receiving PAL packet delta time vs packet number -- %d ms vs %x.\n", ucIdx, g_arBowRevPalPacketTime[ucIdx])); - } -#endif - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - sizeof(CMD_BT_OVER_WIFI), - (PUINT_8) &rCmdBtOverWifi, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SET_PTK -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SET_PTK prBowSetPTK; - CMD_802_11_KEY rCmdKey; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SET_PTK)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowSetPTK = (P_BOW_SET_PTK) &(prCmd->aucPayload[0]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucPeerAddress[0], - prBowSetPTK->aucPeerAddress[1], - prBowSetPTK->aucPeerAddress[2], - prBowSetPTK->aucPeerAddress[3], - prBowSetPTK->aucPeerAddress[4], - prBowSetPTK->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("rCmdKey.ucIsAuthenticator, %x.\n", kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress))); -#endif - - if (!bowCheckBowTableIfVaild(prAdapter, prBowSetPTK->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowSetPTK->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - // fill CMD_802_11_KEY - rCmdKey.ucAddRemove = 1; // add - rCmdKey.ucTxKey = 1; - rCmdKey.ucKeyType = 1; - rCmdKey.ucIsAuthenticator = kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress); - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prBowSetPTK->aucPeerAddress); - rCmdKey.ucNetType = NETWORK_TYPE_BOW_INDEX; // BT Over Wi-Fi - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - rCmdKey.ucKeyId = 0; - rCmdKey.ucKeyLen = 16; // AES = 128bit - kalMemCopy(rCmdKey.aucKeyMaterial, prBowSetPTK->aucTemporalKey, 16); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucTemporalKey, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucTemporalKey[0], - prBowSetPTK->aucTemporalKey[1], - prBowSetPTK->aucTemporalKey[2], - prBowSetPTK->aucTemporalKey[3], - prBowSetPTK->aucTemporalKey[4], - prBowSetPTK->aucTemporalKey[5], - prBowSetPTK->aucTemporalKey[6], - prBowSetPTK->aucTemporalKey[7], - prBowSetPTK->aucTemporalKey[8], - prBowSetPTK->aucTemporalKey[9], - prBowSetPTK->aucTemporalKey[10], - prBowSetPTK->aucTemporalKey[11], - prBowSetPTK->aucTemporalKey[12], - prBowSetPTK->aucTemporalKey[13], - prBowSetPTK->aucTemporalKey[14], - prBowSetPTK->aucTemporalKey[15])); - - DBGLOG(BOW, EVENT, ("rCmdKey.aucKeyMaterial, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - rCmdKey.aucKeyMaterial[0], - rCmdKey.aucKeyMaterial[1], - rCmdKey.aucKeyMaterial[2], - rCmdKey.aucKeyMaterial[3], - rCmdKey.aucKeyMaterial[4], - rCmdKey.aucKeyMaterial[5], - rCmdKey.aucKeyMaterial[6], - rCmdKey.aucKeyMaterial[7], - rCmdKey.aucKeyMaterial[8], - rCmdKey.aucKeyMaterial[9], - rCmdKey.aucKeyMaterial[10], - rCmdKey.aucKeyMaterial[11], - rCmdKey.aucKeyMaterial[12], - rCmdKey.aucKeyMaterial[13], - rCmdKey.aucKeyMaterial[14], - rCmdKey.aucKeyMaterial[15])); -#endif - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - wlanbowCmdEventSetCommon, - wlanbowCmdTimeoutHandler, - sizeof(CMD_802_11_KEY), - (PUINT_8) &rCmdKey, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_RSSI -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_RSSI prBowReadRSSI; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_READ_RSSI)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadRSSI = (P_BOW_READ_RSSI) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadRssi, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_LINK_QUALITY -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_LINK_QUALITY prBowReadLinkQuality; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(P_BOW_READ_LINK_QUALITY)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadLinkQuality = (P_BOW_READ_LINK_QUALITY) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadLinkQuality, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SHORT_RANGE_MODE -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SHORT_RANGE_MODE prBowShortRangeMode; - CMD_TX_PWR_T rTxPwrParam; - - ASSERT(prAdapter); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode.\n")); -#endif - - prBowShortRangeMode = (P_BOW_SHORT_RANGE_MODE) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SHORT_RANGE_MODE)) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (!bowCheckBowTableIfVaild(prAdapter, prBowShortRangeMode->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowShortRangeMode->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_NOT_ACCEPTED; - } - - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowShortRangeMode->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowShortRangeMode->aucPeerAddress[0], - prBowShortRangeMode->aucPeerAddress[1], - prBowShortRangeMode->aucPeerAddress[2], - prBowShortRangeMode->aucPeerAddress[3], - prBowShortRangeMode->aucPeerAddress[4], - prBowShortRangeMode->aucPeerAddress[5])); -#endif - - rTxPwrParam.cTxPwr2G4Cck = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GOFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GHT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - if (nicUpdateTxPower(prAdapter, &rTxPwrParam) == WLAN_STATUS_SUCCESS) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode, %x.\n", WLAN_STATUS_SUCCESS)); -#endif - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - return WLAN_STATUS_SUCCESS; - } - else - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_FAILURE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_CHANNEL_LIST -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - ASSERT(prAdapter); - - // not supported yet - return WLAN_STATUS_FAILURE; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = ucEventBuf; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkConnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkConnected, sizeof(BOW_LINK_CONNECTED)); - prBowLinkConnected->rChannel.ucChannelNum = prBssInfo->ucPrimaryChannel; - prBowLinkConnected->rChannel.ucChannelBand = prBssInfo->eBand; - COPY_MAC_ADDR(prBowLinkConnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelNum, 0x%x\n", prBowLinkConnected->rChannel.ucChannelNum)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelBand, 0x%x\n", prBowLinkConnected->rChannel.ucChannelBand)); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowLinkConnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkConnected->aucPeerAddress[0], - prBowLinkConnected->aucPeerAddress[1], - prBowLinkConnected->aucPeerAddress[2], - prBowLinkConnected->aucPeerAddress[3], - prBowLinkConnected->aucPeerAddress[4], - prBowLinkConnected->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate Event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED))); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - //bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - } - - /* set to connected status*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTED); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkDisconnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - UINT_8 ucBowTableIdx; - ENUM_BOW_DEVICE_STATE eFsmState; - BOOL fgSendDeauth = FALSE; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return; - } - /*Cancel scan*/ - else if(eFsmState == BOW_DEVICE_STATE_SCANNING && - !(prBowFsmInfo->fgIsChannelRequested)) { - bowResponderCancelScan(prAdapter, FALSE); - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_DISCONNECTING); - return; - } - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - if ((prCmdInfo->u4PrivateData)) - { - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - } - else - { - prEvent->rHeader.ucSeqNumber = 0; - } - - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkDisconnected, sizeof(BOW_LINK_DISCONNECTED)); - prBowLinkDisconnected->ucReason = 0x0; - COPY_MAC_ADDR(prBowLinkDisconnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowLinkDisconnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkDisconnected->aucPeerAddress[0], - prBowLinkDisconnected->aucPeerAddress[1], - prBowLinkDisconnected->aucPeerAddress[2], - prBowLinkDisconnected->aucPeerAddress[3], - prBowLinkDisconnected->aucPeerAddress[4], - prBowLinkDisconnected->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate BoW event to PAL*/ -#if 0 - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); -#endif - - // set to disconnected status - prBowFsmInfo->prTargetStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_BOW_INDEX, prBowLinkDisconnected->aucPeerAddress); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - //bowReleaseCh(prAdapter); - } - -#if 1 - /*Send Deauth to connected peer*/ - if (eFsmState == BOW_DEVICE_STATE_CONNECTED && - (prBowFsmInfo->prTargetStaRec->ucStaState == STA_STATE_3)) - { - fgSendDeauth = TRUE; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, bowGetBowTableState, %x.\n", bowGetBowTableState(prAdapter, prBowLinkDisconnected->aucPeerAddress))); -#endif - authSendDeauthFrame(prAdapter, - prBowFsmInfo->prTargetStaRec, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - (PFN_TX_DONE_HANDLER)bowDisconnectLink); - } -#endif - -#if 0 - //3 <3>Stop this link; flush Tx; send deAuthentication -> abort. SAA, AAA. need to check BOW table state == Connected. - if (prAdapter->prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - } - - /* flush pending security frames */ - if (prAdapter->prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prAdapter->prGlueInfo); - } -#endif - - /*Update BoW table*/ - bowGetBowTableEntryByPeerAddress(prAdapter, prBowLinkDisconnected->aucPeerAddress, &ucBowTableIdx); - rBowTable.fgIsValid = FALSE; - rBowTable.eState = BOW_DEVICE_STATE_DISCONNECTED; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); - - /*Decrease link count*/ - GLUE_DEC_REF_CNT(g_u4LinkCount); - - /*If no need to send deauth, DO disconnect now*/ - /*If need to send deauth, DO disconnect at deauth Tx done*/ - if(!fgSendDeauth){ - bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BT_OVER_WIFI prCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // restore original command for rPeerAddr - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prCmdBtOverWifi = (P_CMD_BT_OVER_WIFI)(prWifiCmd->aucBuffer); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - // set to starting status - kalSetBowState(prAdapter->prGlueInfo, - BOW_DEVICE_STATE_STARTING, - prCmdBtOverWifi->rPeerAddr); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_LINK_QUALITY -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_LINK_QUALITY prBowLinkQuality; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_QUALITY; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_QUALITY); - - // fill event body - prBowLinkQuality = (P_BOW_LINK_QUALITY)(prEvent->aucPayload); - kalMemZero(prBowLinkQuality, sizeof(BOW_LINK_QUALITY)); - prBowLinkQuality->ucLinkQuality = (UINT_8)prLinkQuality->cLinkQuality; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_RSSI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_RSSI prBowRssi; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_RSSI; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_RSSI); - - // fill event body - prBowRssi = (P_BOW_RSSI)(prEvent->aucPayload); - kalMemZero(prBowRssi, sizeof(BOW_RSSI)); - prBowRssi->cRssi = (INT_8) prLinkQuality->cRssi; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the default command timeout handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_TIMEOUT; // timeout - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - return; -} - - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBowBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStoping.\n")); - DBGLOG(BOW, EVENT, ("bowStoping, SSID %s.\n", prBowBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("bowStoping, prBowBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucBSSID[0], - prBowBssInfo->aucBSSID[1], - prBowBssInfo->aucBSSID[2], - prBowBssInfo->aucBSSID[3], - prBowBssInfo->aucBSSID[4], - prBowBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucOwnMacAddr[0], - prBowBssInfo->aucOwnMacAddr[1], - prBowBssInfo->aucOwnMacAddr[2], - prBowBssInfo->aucOwnMacAddr[3], - prBowBssInfo->aucOwnMacAddr[4], - prBowBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); - DBGLOG(BOW, EVENT, ("bowStopping, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - kalPrint("BoW Stoping,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); -#endif - - if (g_u4LinkCount == 0) - { - /*Stop beaconing*/ - GLUE_DEC_REF_CNT(g_u4Beaconing); - - /*Deactive BoW network*/ - //prBowBssInfo->fgIsNetActive = FALSE; - //prBowBssInfo->fgIsBeaconActivated = FALSE; - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - /*temp solution for FW hal_pwr_mgt.c#3037 ASSERT*/ - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_BOW_INDEX); - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - return; -} - - -VOID -bowStarting( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("BoW Starting.\n")); - DBGLOG(BOW, EVENT, ("BoW channel granted.\n")); -#endif - -#if 0 - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBssInfo->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prBssInfo->eCurrentOPMode = OP_MODE_BOW; - - //4 <1.2> Setup SSID - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - prBssInfo->ucSSIDLen = BOW_SSID_LEN; - bowAssignSsid(prBssInfo->aucSSID, prBssInfo->aucOwnMacAddr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("SSID %s.\n", prBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("prBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucBSSID[0], - prBssInfo->aucBSSID[1], - prBssInfo->aucBSSID[2], - prBssInfo->aucBSSID[3], - prBssInfo->aucBSSID[4], - prBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucOwnMacAddr[0], - prBssInfo->aucOwnMacAddr[1], - prBssInfo->aucOwnMacAddr[2], - prBssInfo->aucOwnMacAddr[3], - prBssInfo->aucOwnMacAddr[4], - prBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); -#endif - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; - if (prBowFsmInfo->eBand == BAND_2G4) - { - prBssInfo->eBand = BAND_2G4; - } - else - { - prBssInfo->eBand = BAND_5G; - } - -#if CFG_BOW_SUPPORT_11N - prBssInfo->ucPhyTypeSet = prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - -#else - if (prBssInfo->eBand == BAND_2G4) - { - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else - { - //prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - //prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11A; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - //prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - //prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_OFDM; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - - -#endif - prBssInfo->fgErpProtectMode = FALSE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = prBowFsmInfo->u2BeaconInterval; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - if (prBowFsmInfo->fgSupportQoS) - { - prAdapter->rWifiVar.fgSupportQoS = TRUE; - prBssInfo->fgIsQBSS = TRUE; - } - - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - bssInitForAP(prAdapter, prBssInfo, TRUE); - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif /* CFG_SUPPORT_AAA */ - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->fgIsBeaconActivated = TRUE; - - //3 <3> Set MAC HW - - //4 <2> Initiate BSS_INFO_T - common part - BOW_BSS_INFO_INIT(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); -#endif - - //4 <3.1> use command packets to inform firmware - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.2> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.1> Reset HW TSF Update Mode and Beacon Mode - - //4 <3.2> Setup BSSID - // TODO: rxmSetRxFilterBSSID0 -// rxmSetRxFilterBSSID0(prBssInfo->ucHwBssidId, prBssInfo->aucBSSID); - - //4 <3.3> Setup RX Filter to accept Probe Request - // TODO: f get/set RX filter. - -#if 0 - { - UINT_32 u4RxFilter; - if (halMacRxGetRxFilters(&u4RxFilter)== HAL_STATUS_SUCCESS) { - - u4RxFilter &= ~BIT(RXFILTER_DROP_PROBE_REQ); - - halMacRxSetRxFilters(u4RxFilter); - } - } -#endif - } - - /*Update BoW Table*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_STARTING); - -#if CFG_BOW_TEST - kalPrint("BoW Starting,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Start beaconing*/ - if (g_u4Beaconing < 1) - { - GLUE_INC_REF_CNT(g_u4Beaconing); - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } - -#if 0 - /*Responder: Start to scan Initiator*/ - if (prBowFsmInfo->ucRole == BOW_RESPONDER) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting responder, start scan result searching.\n")); -#endif - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - bowResponderScan(prAdapter); - } - /*Initiator: Request channel, wait for responder*/ - else { - //bowRequestCh(prAdapter); - } -#endif - return; -} - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 puOwnMacAddr - ) -{ - UINT_8 i; - UINT_8 aucSSID[]=BOW_WILDCARD_SSID; - - kalMemCopy(pucSsid, aucSSID, BOW_WILDCARD_SSID_LEN); - - for (i = 0; i < 6; i++) - { - pucSsid[(3 * i) + 3] = 0x2D; - if ((*(puOwnMacAddr + i) >> 4) < 0xA) - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x30; - } - else - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x57; - } - - if ((*(puOwnMacAddr + i) & 0x0F) < 0xA) - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x30; - } - else - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x57; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateProbeReq.\n")); -#endif - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - /*If BoW AP is beaconing*/ - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW && - g_u4Beaconing > 0) { - - /*Check the probe requset sender is our peer*/ - if(bowCheckBowTableIfVaild(prAdapter, prMgtHdr->aucSrcAddr)) { - fgReplyProbeResp = TRUE; - } - /*Check the probe request target SSID is our SSID*/ - else if ((prIeSsid) && - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - else { - fgReplyProbeResp = FALSE; - } - } - - return fgReplyProbeResp; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if ((g_u4Beaconing != 0) && (g_u4LinkCount > 0) && (g_u4LinkCount < CFG_BOW_PHYSICAL_LINK_NUM)) - { - //Send beacon - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } -#if CFG_BOW_TEST - else { - kalPrint("BoW Send Beacon,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - } -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScan.\n")); - kalPrint("BOW SCAN [REQ:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq+1); -#endif - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - - if (!prScanReqMsg) - { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - /*Fill scan message*/ - prScanReqMsg->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_BOW_INDEX; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - prScanReqMsg->ucSSIDLength = BOW_SSID_LEN; - bowAssignSsid(prScanReqMsg->aucSSID, prBowFsmInfo->aucPeerAddress); - prScanReqMsg->ucChannelListNum = 1; - - if (prBowFsmInfo->eBand == BAND_2G4) - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_2G4; - } - else - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_5G; - } - - prScanReqMsg->arChnlInfoList[0].ucChannelNum = prBowFsmInfo->ucPrimaryChannel; - prScanReqMsg->u2IELen = 0; - - /*Send scan message*/ - mboxSendMsg(prAdapter, MBOX_ID_0, (P_MSG_HDR_T) prScanReqMsg, MSG_SEND_METHOD_BUF); - - /*Change state to SCANNING*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - - //prBowFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_DESC_T prBssDesc; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_BOW_DEVICE_STATE eFsmState; - ENUM_SCAN_STATUS eScanStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - ASSERT(prScanDoneMsg->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - eScanStatus = prScanDoneMsg->eScanStatus; - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScanDone.\n")); - kalPrint("BOW SCAN [DONE:%d]\n", ucSeqNumOfCompMsg); -#endif - - if( eScanStatus == SCAN_STATUS_CANCELLED) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCELLED:%d]\n", ucSeqNumOfCompMsg); -#endif - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTING) { - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - return; - } - else if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - //bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - return; - } - else if (ucSeqNumOfCompMsg != prBowFsmInfo->ucSeqNumOfScanReq) - { - DBGLOG(BOW, EVENT, ("Sequence no. of BOW Responder scan done is not matched.\n")); - return; - } - else - { - prConnSettings->fgIsScanReqIssued = FALSE; - prBssDesc = scanSearchBssDescByBssid(prAdapter, prBowFsmInfo->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("End scan result searching.\n")); -#endif - - /*Initiator is FOUND*/ - if (prBssDesc != NULL)// (prBssDesc->aucBSSID != NULL)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Search Bow Peer address - %x:%x:%x:%x:%x:%x.\n", prBssDesc->aucBSSID[0], - prBssDesc->aucBSSID[1], - prBssDesc->aucBSSID[2], - prBssDesc->aucBSSID[3], - prBssDesc->aucBSSID[4], - prBssDesc->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("Starting to join initiator.\n")); -#endif - /*Set target BssDesc*/ - prBowFsmInfo->prTargetBssDesc = prBssDesc; - /*Request channel to do JOIN*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } - /*Initiator is NOT FOUND*/ - else - { - /*Scan again, until PAL timeout*/ - bowResponderScan(prAdapter); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for cancelling scan request. There is another option to extend channel privilige -* for another purpose. -* -* @param fgIsChannelExtention - Keep the channel previlege, but can cancel scan timer. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ) -{ - - P_MSG_SCN_SCAN_CANCEL prScanCancel = (P_MSG_SCN_SCAN_CANCEL)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo = (P_BOW_FSM_INFO_T)NULL; - - DEBUGFUNC("bowResponderCancelScan()"); - - do { - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (TRUE) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCEL:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq); -#endif - /* There is a channel privilege on hand. */ - - DBGLOG(P2P, TRACE, ("BOW Cancel Scan\n")); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancel) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancel->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_CANCEL; - prScanCancel->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prScanCancel->ucSeqNum = prBowFsmInfo->ucSeqNumOfScanReq; -#if CFG_ENABLE_WIFI_DIRECT - prScanCancel->fgIsChannelExt = fgIsChannelExtention; -#endif - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancel, - MSG_SEND_METHOD_BUF); - - } - - } while (FALSE); - -} /* bowResponderCancelScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - ASSERT(prBssDesc); - ASSERT(prAdapter); - - DBGLOG(BOW, EVENT, ("Starting bowResponderJoin.\n")); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTING); - - //4 <2> Setup corresponding STA_RECORD_T - /*Support First JOIN and retry*/ - prStaRec = bssCreateStaRecFromBssDesc( - prAdapter, - STA_TYPE_BOW_AP, - NETWORK_TYPE_BOW_INDEX, - prBssDesc); - - prBowFsmInfo->prTargetStaRec = prStaRec; - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - prStaRec->fgIsReAssoc = FALSE; - prBowFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prBowFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(BOW, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prBowFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - ASSERT(0); - } - - //4 <4.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <5> Overwrite Connection Setting for eConnectionPolicy - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prBssDesc->aucSSID)); - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prConnSettings->aucSSID)); -#endif - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_BOW_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - prBssInfo->prStaRecOfAP = prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - printk("BoW trigger SAA ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for BOW FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - P_BSS_INFO_T prBssInfo; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete.\n")); - DBGLOG(BOW, EVENT, ("bowfsmRunEventJoinComplete ptr check\n")); - DBGLOG(BOW, EVENT, ("prMsgHdr %x\n", prMsgHdr)); - DBGLOG(BOW, EVENT, ("prAdapter %x\n", prAdapter)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo %x\n", prBowFsmInfo)); - DBGLOG(BOW, EVENT, ("prStaRec %x\n", prStaRec)); -#endif - - ASSERT(prStaRec); - ASSERT(prBowFsmInfo); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prBowFsmInfo->ucSeqNumOfReqMsg) { - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - prStaRec->eStaType = STA_TYPE_BOW_AP; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; -#if CFG_BOW_RATE_LIMITATION - //4 <1.2>Update Rate Set - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } - } -#endif - - //4 <1.1> Change FW's Media State immediately. - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <1.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ -#if CFG_BOW_SUPPORT_11N - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); -#endif - - //4 <1.3> Update BSS_INFO_T - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Finish bowUpdateBssInfoForJOIN.\n")); -#endif - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowFsmRunEventJoinComplete, qmActivateStaRec.\n")); -#endif - - //4 <1.7> Set the Next State of BOW FSM - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - //4 <2> JOIN was not successful - else - { - /*Retry*/ - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete -- Join failed.\n")); - printk("BoW trigger SAA REJOIN\n"); -#endif - } - } - - cnmMemFree(prAdapter, prMsgHdr); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // NOTE(Kevin): Move following line to bowChangeMediaState() macro per CM's request. - //prBowBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prBssInfo->ucPrimaryChannel); - - switch (prBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prBssInfo->ucReasonOfDisconnect; - - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_BOW_INDEX, &rEventConnStatus); - prBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(BOW, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAATxFail , bssRemoveStaRecFromClientList.\n")); - printk("BoW AAA TxFail, target state %d\n", prStaRec->ucStaState+1); -#endif - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prStaRec); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAAComplete, cnmStaRecChangeState, STA_STATE_3.\n")); - printk("BoW AAA complete ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - /*Update BssInfo to connected*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*Update StaRec to State3*/ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - /*Connected*/ - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle RxDeauth -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if(!IS_STA_IN_BOW(prStaRec)) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - eFsmState = bowGetBowTableState(prAdapter, prStaRec->aucMacAddr); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (prStaRec->ucStaState > STA_STATE_1) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - //P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; - } - - return WLAN_STATUS_NOT_ACCEPTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handle BoW Link disconnect. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - /*Free target StaRec*/ - if(prMsduInfo) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - } - else { - prStaRec = prBowFsmInfo->prTargetStaRec; - } - - if(prStaRec) { - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - kalPrint("bowDisconnectLink\n"); - /*No one connected*/ - if (g_u4LinkCount == 0 && g_u4Beaconing != 0) - { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer); - bowStopping(prAdapter); - kalPrint("bowStopping\n"); - /*Restore TxPower from Short range mode*/ -#if CFG_SUPPORT_NVRAM && 0 - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - /*Uninit BoW Interface*/ -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prAdapter->prGlueInfo); -#endif - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAssocTime = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prAssocReqFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAssocReqFrame->aucSrcAddr[0], - prAssocReqFrame->aucSrcAddr[1], - prAssocReqFrame->aucSrcAddr[2], - prAssocReqFrame->aucSrcAddr[3], - prAssocReqFrame->aucSrcAddr[4], - prAssocReqFrame->aucSrcAddr[5])); -#endif - - /*Assoc Accept*/ - while(EQUAL_MAC_ADDR(prAssocReqFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, return wlanbowCmdEventLinkConnected.\n")); -#endif - /*Update StaRec*/ - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAssocReqFrame->aucSrcAddr); - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; - -#if CFG_BOW_RATE_LIMITATION - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } else { - /*If no avaliable rate is found, DECLINE the association*/ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - } -#endif - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - - /*Undpate BssInfo to FW*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*reply successful*/ - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAssocResp = TRUE; - break; - } - - /*Reject Assoc*/ - if(*pu2StatusCode != STATUS_CODE_SUCCESSFUL) { - /*Reply Assoc with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAssocTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAssocTime == 0 - ) { - fgReplyAssocResp = TRUE; - rLastRejectAssocTime = rCurrentTime; - } - } - - return fgReplyAssocResp; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAuthTime = 0; - - /* TODO(Kevin): Call BoW functions to check .. - 1. Check we are BoW now. - 2. Check we can accept connection from thsi peer - 3. Check Black List here. - */ - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prAuthFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAuthFrame->aucSrcAddr[0], - prAuthFrame->aucSrcAddr[1], - prAuthFrame->aucSrcAddr[2], - prAuthFrame->aucSrcAddr[3], - prAuthFrame->aucSrcAddr[4], - prAuthFrame->aucSrcAddr[5])); -#endif - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAuthFrame->aucSrcAddr); - if (!prStaRec) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecAlloc.\n")); -#endif - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - ASSERT(prStaRec); - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - prBowBssInfo->prStaRecOfAP = prStaRec; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecChangeState.\n")); -#endif - } - else - { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucIndex, %x.\n", prStaRec->ucIndex)); -#endif - bssRemoveStaRecFromClientList(prAdapter, prBowBssInfo, prStaRec); - } - - if (EQUAL_MAC_ADDR(prAuthFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { - - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucNetTypeIndex, %x.\n", prStaRec->ucNetTypeIndex)); -#endif - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->ucJoinFailureCount = 0; - *pprStaRec = prStaRec; - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAuth = TRUE; - } - else { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - /*Reply auth with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAuthTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAuthTime == 0 - ) { - fgReplyAuth = TRUE; - rLastRejectAuthTime = rCurrentTime; - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, fgReplyAuth, %x.\n", fgReplyAuth)); -#endif - return fgReplyAuth; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - prBowFsmInfo->fgIsChannelGranted = TRUE; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Entering bowRunEventChGrant.\n")); -#endif - - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*Release channel*/ - if((!prBowFsmInfo->fgIsChannelRequested) || - (prBowFsmInfo->ucSeqNumOfChReq != ucTokenID) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTED) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTING)){ -#if CFG_BOW_TEST - printk("BoW Channel [GIVE UP:%d]\n", ucTokenID); - printk("[Requested:%d][ucSeqNumOfChReq:%d][eFsmState:%d]\n", - prBowFsmInfo->fgIsChannelRequested, prBowFsmInfo->ucSeqNumOfChReq, eFsmState); -#endif - bowReleaseCh(prAdapter); - return; - } - - /* 2. channel privilege has been approved */ - prBowFsmInfo->u4ChGrantedInterval = u4GrantInterval; - -#if 0 - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - prBowFsmInfo->u4ChGrantedInterval - BOW_JOIN_CH_GRANT_THRESHOLD); -#else - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - BOW_JOIN_CH_REQUEST_INTERVAL - BOW_JOIN_CH_GRANT_THRESHOLD); -#endif - - /* 3.2 set local variable to indicate join timer is ticking */ - prBowFsmInfo->fgIsInfraChannelFinished = FALSE; - -#if CFG_BOW_TEST - printk("BoW Channel [GRANTED:%d].\n", ucTokenID); -#endif - - if(eFsmState == BOW_DEVICE_STATE_ACQUIRING_CHANNEL) { - bowStarting(prAdapter); - bowReleaseCh(prAdapter); - if(prBowFsmInfo->ucRole == BOW_RESPONDER) { - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); - } - } - else { - /*update bssinfo*/ - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM for channel privilege requesting -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_REQ_T prMsgChReq; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (prBowFsmInfo->fgIsChannelGranted == FALSE) - { - -#if CFG_BOW_TEST - printk("BoW channel [REQUEST:%d], %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq+1, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChReq->ucTokenID = ++prBowFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; -#if 0 - prMsgChReq->u4MaxInterval = BOW_JOIN_CH_REQUEST_INTERVAL; -#else - prMsgChReq->u4MaxInterval = 1; -#endif - prMsgChReq->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; //prBowFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = CHNL_EXT_SCN; //prBowFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prBowFsmInfo->eBand; //prBowFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prBowFsmInfo->aucPeerAddress); - - - prBowFsmInfo->fgIsChannelRequested = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform BOW that channel privilege is granted -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if(prBowFsmInfo->fgIsChannelGranted != FALSE || prBowFsmInfo->fgIsChannelRequested != FALSE) - { -#if CFG_BOW_TEST - printk("BoW channel [RELEASE:%d] %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - - prBowFsmInfo->fgIsChannelRequested = FALSE; - prBowFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChAbort->ucTokenID = prBowFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - printk("BoW Channel [TIMEOUT]\n"); -#endif -#if 1 - //bowReleaseCh(prAdapter); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*If connecting is not completed, request CH again*/ - if((eFsmState == BOW_DEVICE_STATE_CONNECTING) || - (eFsmState == BOW_DEVICE_STATE_STARTING)) - { - bowRequestCh(prAdapter); - } -#endif -} - - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucBowTableIdx = 0; - CMD_INFO_T rCmdInfo; - - ASSERT(prAdapter); - - kalMemZero(&rCmdInfo, sizeof(CMD_INFO_T)); - - while (ucBowTableIdx < CFG_BOW_PHYSICAL_LINK_NUM) - { - if (arBowTable[ucBowTableIdx].fgIsValid) - { - COPY_MAC_ADDR(prAdapter->rWifiVar.rBowFsmInfo.aucPeerAddress, arBowTable[ucBowTableIdx].aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", ucBowTableIdx, - arBowTable[ucBowTableIdx].aucPeerAddress[0], - arBowTable[ucBowTableIdx].aucPeerAddress[1], - arBowTable[ucBowTableIdx].aucPeerAddress[2], - arBowTable[ucBowTableIdx].aucPeerAddress[3], - arBowTable[ucBowTableIdx].aucPeerAddress[4], - arBowTable[ucBowTableIdx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].fgIsValid, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif -#if 1 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#else - wlanbowCmdEventLinkDisconnected(prAdapter, &rCmdInfo, NULL); -#endif - } - - ucBowTableIdx += 1; - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return FALSE; -} - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - if (arBowTable[ucBowTableIdx].fgIsValid) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableContent, arBowTable[idx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); - printk("GET State [%d]\n", arBowTable[ucBowTableIdx].eState); -#endif - prBowTable = &(arBowTable[ucBowTableIdx]); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - COPY_MAC_ADDR(arBowTable[ucBowTableIdx].aucPeerAddress, prBowTable->aucPeerAddress); - arBowTable[ucBowTableIdx].eState = prBowTable->eState; - arBowTable[ucBowTableIdx].fgIsValid = prBowTable->fgIsValid; - arBowTable[ucBowTableIdx].ucAcquireID = prBowTable->ucAcquireID; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, prBowTable->eState, prBowTable->aucPeerAddress); - //kalSetBowRole(prAdapter->prGlueInfo, prBowTable->ucRole, prBowTable->aucPeerAddress); - -#if CFG_BOW_TEST - printk("SET State [%d]\n", arBowTable[ucBowTableIdx].eState); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[ucBowTableIdx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif - - return TRUE; - -} - - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - *pucBowTableIdx = idx; - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if(!arBowTable[idx].fgIsValid) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableFreeEntry, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - *pucBowTableIdx = idx; - arBowTable[idx].fgIsValid = TRUE; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].eState;, %x, %x.\n", idx, arBowTable[idx].eState)); - printk("GET State [%d]\n", arBowTable[idx].eState); -#endif - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return arBowTable[idx].eState; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ) -{ - UINT_8 ucBowTableIdx; - - if(bowGetBowTableEntryByPeerAddress(prAdapter, aucPeerAddress, &ucBowTableIdx)) { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - arBowTable[ucBowTableIdx].eState = eState; -#if CFG_BOW_TEST - printk("SET State [%d]\n", eState); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, eState, aucPeerAddress); - return TRUE; - } - return FALSE; -} - - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_lib.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_lib.c deleted file mode 100755 index 5a6f5d35c605..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_lib.c +++ /dev/null @@ -1,5550 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_lib.c#2 $ -*/ -/*! \file wlan_lib.c - \brief Internal driver stack will export the required procedures here for GLUE Layer. - - This file contains all routines which are exported from MediaTek 802.11 Wireless - LAN driver stack to GLUE Layer. -*/ - - -/* -** $Log: wlan_lib.c $ -** -** 08 15 2012 eason.tsai -** [ALPS00338170] [Need Patch] [Volunteer Patch] modify build warning -** fix build waring for codechange - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 11 2012 cp.wu - * [WCXRP00001252] [MT6620 Wi-Fi][Driver] Add debug message while encountering firmware response timeout - * output message while timeout event occurs - * - * 06 11 2012 eason.tsai - * NULL - * change from binay to hex code - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct scan result removing policy. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 14 2011 cm.chang - * [WCXRP00001104] [All Wi-Fi][FW] Show init process by HW mail-box register - * Show FW initial ID when timeout to wait for ready bit - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * when powering off, always clear pending interrupts, then wait for RDY to be de-asserted - * - * 10 14 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * shorten the packet length for firmware download if no more than 2048 bytes. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 26 2011 cm.chang - * [WCXRP00000952] [MT5931 Wi-Fi][FW] Handshake with BWCS before DPD/TX power calibration - * Fix compiling error for WinXP MT5931 driver - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS Sync ready for WinXP. - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 19 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * escape from normal path if any error is occured. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 24 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * if there is no valid address in chip, generate a new one from driver domain instead of firmware domain due to sufficient randomness - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 20 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * disable whole-chip resetting mechanism due to the need of further ECO to work as expected. - * - * 05 31 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * changed to use non-zero checking for valid bit in NVRAM content - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * correct assertion. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 05 11 2011 cm.chang - * [WCXRP00000717] [MT5931 Wi-Fi][Driver] Handle wrong NVRAM content about AP bandwidth setting - * . - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * change delay from 100ms to 120ms upon DE's suggestion. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 15 2011 cp.wu - * [WCXRP00000654] [MT6620 Wi-Fi][Driver] Add loop termination criterion for wlanAdapterStop(). - * add loop termination criteria for wlanAdapterStop(). - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 04 06 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * invoke nicReleaseAdapterMemory() as failure handling in case wlanAdapterStart() failed unexpectedly - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 25 2011 cp.wu - * [WCXRP00000496] [MT5931][Driver] Apply host-triggered chip reset before initializing firmware download procedures - * apply host-triggered chip reset mechanism before initializing firmware download procedures. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 01 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * init variable for CTIA. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 22 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Remove controling auto rate from initial setting. The initial setting is defined by FW code. - * - * 12 15 2010 cp.wu - * NULL - * sync. with ALPS code by enabling interrupt just before leaving wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * Change Param name for invitation connection. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * for MT5931, adapter initialization is done *after* firmware is downloaded. - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * correct MT5931 firmware download procedure: - * MT5931 will download firmware first then acquire LP-OWN - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) update MT5931 firmware encryption tool. (using 64-bytes unit) - * 2) update MT5931 firmware download procedure - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 15 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * bugfix: always reset pointer to IEbuf to zero when keeping scanning result for the connected AP - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 13 2010 cp.wu - * NULL - * acquire & release power control in oid handing wrapper. - * - * 09 09 2010 cp.wu - * NULL - * move IE to buffer head when the IE pointer is not pointed at head. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 13 2010 cp.wu - * NULL - * correction issue: desired phy type not initialized as ABGN mode. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 10 2010 cm.chang - * NULL - * Support EEPROM read/write in RF test mode - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Reduce unnecessary type casting - * - * 07 13 2010 cp.wu - * - * use multiple queues to keep 1x/MMPDU/CMD's strict order even when there is incoming 1x frames. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * initialize mbox & ais_fsm in wlanAdapterStart() - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable interrupt then send power control command packet. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when stopping adapter, wait til RDY bit has been cleaerd. - * 2) set TASK_OFFLOAD as driver-core OIDs - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * roll-back to rev.60. - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always set fw-own before driver is unloaded. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * 2) command sequence number is now increased atomically - * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * 2) add 2 kal API for later integration - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * 2) ready bit will be polled for limited iteration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * kalOidComplete is not necessary in linux - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use pass-in prRegInfo instead of accessing prGlueInfo directly - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding none-glue code portability - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding non-glue code portability - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve non-glue code portability - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * only send CMD_NIC_POWER_CTRL in wlanAdapterStop() when card is not removed and is not in D3 state - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when starting adapter, read local adminsitrated address from registry and send to firmware via CMD_BASIC_CONFIG. - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for QM_TEST_MODE - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct function name .. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanAdapterStart - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * 2) firmware image length is now retrieved via NdisFileOpen - * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * 4) nicRxWaitResponse() revised - * 5) another set of TQ counter default value is added for fw-download state - * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * 2. follow MSDN defined behavior when associates to another AP - * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * wlanoidSetFrequency is now implemented by RF test command. - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * QueryRssi is no longer w/o hardware access, it is now implemented by command/event handling loop - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. - * - * 01 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * allow MCR read/write OIDs in RF test mode - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * 2. block TX/ordinary OID when RF test mode is engaged - * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-12-10 16:54:36 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-12-09 20:04:59 GMT mtk02752 -** only report as connected when CFG_HIF_EMULATION_TEST is set to 1 -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-12-08 17:39:41 GMT mtk02752 -** wlanoidRftestQueryAutoTest could be executed without touching hardware -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-12-03 16:10:26 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-02 22:05:33 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-01 23:02:36 GMT mtk02752 -** remove unnecessary spinlock -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-01 22:50:38 GMT mtk02752 -** use TC4 for command, maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-27 12:45:34 GMT mtk02752 -** prCmdInfo should be freed when invoking wlanReleasePendingOid() to clear pending oid -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-24 19:55:51 GMT mtk02752 -** wlanSendPacket & wlanRetransmitOfPendingFrames is only used in old data path -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-23 17:59:55 GMT mtk02752 -** clear prPendingOID inside wlanSendCommand() when the OID didn't need to be replied. -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-23 14:45:29 GMT mtk02752 -** add another version of wlanSendCommand() for command-sending only without blocking for response -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-17 22:40:44 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 10:14:56 GMT mtk01084 -** modify place to invoke wlanIst -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-10-30 18:17:07 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-10-29 19:46:15 GMT mtk01084 -** invoke interrupt process routine -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-10-13 21:58:24 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-09-09 17:26:01 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-05-20 12:21:27 GMT mtk01461 -** Add SeqNum check when process Event Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-05-19 10:38:44 GMT mtk01461 -** Add wlanReleasePendingOid() for mpReset() if there is a pending OID and no available TX resource to send it. -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-04-29 15:41:34 GMT mtk01461 -** Add handle of EVENT of CMD Result in wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-04-22 09:11:23 GMT mtk01461 -** Fix wlanSendCommand() for Driver Domain CR -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-04-21 09:33:56 GMT mtk01461 -** Update wlanSendCommand() for Driver Domain Response and handle Event Packet, wlanQuery/SetInformation() for enqueue CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-17 20:00:08 GMT mtk01461 -** Update wlanImageSectionDownload for optimized CMD process -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-14 20:50:51 GMT mtk01426 -** Fixed compile error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-13 16:38:40 GMT mtk01084 -** add wifi start function -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-13 14:26:44 GMT mtk01084 -** modify a parameter about FW download length -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-10 21:53:42 GMT mtk01461 -** Update wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-08 16:51:04 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-01 10:32:47 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-03-23 21:44:13 GMT mtk01461 -** Refine TC assignment for WmmAssoc flag -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 16:51:57 GMT mtk01084 -** modify the input argument of caller to RECLAIM_POWER_CONTROL_TO_PM() -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:27:13 GMT mtk01461 -** Add reference code of FW Image Download -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:37 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:08 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 16:28:45 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" -#include "mgmt/ais_fsm.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* 6.1.1.2 Interpretation of priority parameter in MAC service primitives */ -/* Static convert the Priority Parameter/TID(User Priority/TS Identifier) to Traffic Class */ -const UINT_8 aucPriorityParam2TC[] = { - TC1_INDEX, - TC0_INDEX, - TC0_INDEX, - TC1_INDEX, - TC2_INDEX, - TC2_INDEX, - TC3_INDEX, - TC3_INDEX -}; - -#if QM_TEST_MODE -extern QUE_MGT_T g_rQM; -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _CODE_MAPPING_T { - UINT_32 u4RegisterValue; - INT_32 u4TxpowerOffset; -} CODE_MAPPING_T, *P_CODE_MAPPING_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -BOOLEAN fgIsBusAccessFailed = FALSE; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SIGNED_EXTEND(n, _sValue) \ - (((_sValue) & BIT((n)-1)) ? ((_sValue) | BITS(n,31)) : \ - ((_sValue) & ~BITS(n,31))) - -// TODO: Check -/* OID set handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerWOHwAccess[] = { - wlanoidSetChannel, - wlanoidSetBeaconInterval, - wlanoidSetAtimWindow, - wlanoidSetFrequency, -}; - -// TODO: Check -/* OID query handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerWOHwAccess[] = { - wlanoidQueryBssid, - wlanoidQuerySsid, - wlanoidQueryInfrastructureMode, - wlanoidQueryAuthMode, - wlanoidQueryEncryptionStatus, - wlanoidQueryPmkid, - wlanoidQueryNetworkTypeInUse, - wlanoidQueryBssidList, - wlanoidQueryAcpiDevicePowerState, - wlanoidQuerySupportedRates, - wlanoidQueryDesiredRates, - wlanoidQuery802dot11PowerSaveProfile, - wlanoidQueryBeaconInterval, - wlanoidQueryAtimWindow, - wlanoidQueryFrequency, -}; - -/* OID set handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerAllowedInRFTest[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidRftestSetAutoTest, - wlanoidSetMcrWrite, - wlanoidSetEepromWrite -}; - -/* OID query handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerAllowedInRFTest[] = { - wlanoidRftestQueryAutoTest, - wlanoidQueryMcrRead, - wlanoidQueryEepromRead -} -; - -PFN_OID_HANDLER_FUNC apfnOidWOTimeoutCheck[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidSetAcpiDevicePowerState, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is a private routine, which is used to check if HW access is needed -* for the OID query/ set handlers. -* -* \param[IN] pfnOidHandler Pointer to the OID handler. -* \param[IN] fgSetInfo It is a Set information handler. -* -* \retval TRUE This function needs HW access -* \retval FALSE This function does not need HW access -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOHwAccess; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerWOHwAccess = apfnOidSetHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidSetHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerWOHwAccess = apfnOidQueryHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidQueryHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOHwAccess[i] == pfnOidHandler) { - return FALSE; - } - } - - return TRUE; -} /* wlanIsHandlerNeedHwAccess */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set flag for later handling card -* ejected event. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -* -* \note When surprised removal happens, Glue layer should invoke this -* function to notify WPDD not to do any hw access. -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanCardEjected ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("wlanCardEjected"); - //INITLOG(("\n")); - - ASSERT(prAdapter); - - /* mark that the card is being ejected, NDIS will shut us down soon */ - nicTxRelease(prAdapter); - -} /* wlanCardEjected */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Create adapter object -* -* \param prAdapter This routine is call to allocate the driver software objects. -* If fails, return NULL. -* \retval NULL If it fails, NULL is returned. -* \retval NOT NULL If the adapter was initialized successfully. -*/ -/*----------------------------------------------------------------------------*/ -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdpater = (P_ADAPTER_T)NULL; - - DEBUGFUNC("wlanAdapterCreate"); - - do { - prAdpater = (P_ADAPTER_T) kalMemAlloc(sizeof(ADAPTER_T), VIR_MEM_TYPE); - - if (!prAdpater) { - DBGLOG(INIT, ERROR, ("Allocate ADAPTER memory ==> FAILED\n")); - break; - } - -#if QM_TEST_MODE - g_rQM.prAdapter = prAdpater; -#endif - kalMemZero(prAdpater, sizeof(ADAPTER_T)); - prAdpater->prGlueInfo = prGlueInfo; - - } while(FALSE); - - return prAdpater; -} /* wlanAdapterCreate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroy adapter object -* -* \param prAdapter This routine is call to destroy the driver software objects. -* If fails, return NULL. -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - - if (!prAdapter) { - return; - } - - kalMemFree(prAdapter, VIR_MEM_TYPE, sizeof(ADAPTER_T)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize the adapter. The sequence is -* 1. Disable interrupt -* 2. Read adapter configuration from EEPROM and registry, verify chip ID. -* 3. Create NIC Tx/Rx resource. -* 4. Initialize the chip -* 5. Initialize the protocol -* 6. Enable Interrupt -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 i, u4Value = 0; - UINT_32 u4WHISR = 0; - UINT_8 aucTxCount[8]; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwLoadAddr, u4ImgSecSize; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - PARAM_PTA_IPC_T rBwcsPta; - UINT_32 u4SetInfoLen; -#endif - - ASSERT(prAdapter); - - DEBUGFUNC("wlanAdapterStart"); - - //4 <0> Reset variables in ADAPTER_T - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - - QUEUE_INITIALIZE(&(prAdapter->rPendingCmdQueue)); - - /* Initialize rWlanInfo */ - kalMemSet(&(prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - //4 <0.1> reset fgIsBusAccessFailed - fgIsBusAccessFailed = FALSE; - - do { - if ( (u4Status = nicAllocateAdapterMemory(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicAllocateAdapterMemory Error!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - prAdapter->u4OsPacketFilter = PARAM_PACKET_FILTER_SUPPORTED; - -#if defined(MT6620) || defined(MT6628) - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - //4 <2> Initialize System Service (MGMT Memory pool and STA_REC) - nicInitSystemService(prAdapter); - - //4 <3> Initialize Tx - nicTxInitialize(prAdapter); - wlanDefTxPowerCfg(prAdapter); - - //4 <4> Initialize Rx - nicRxInitialize(prAdapter); - -#if CFG_ENABLE_FW_DOWNLOAD - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 1. disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 2. Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3. FW download here */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImageFileLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImageFileLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - prRegInfo->u4StartAddress); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", prRegInfo->u4LoadAddress)); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImageFileLength)); - - do { -#if CFG_SUPPORT_WHOLE_CHIP_RESET -#define RESET_RDY_INTERVAL (120) - - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.0.1 delay for EEIF ready */ - kalMsleep(RESET_RDY_INTERVAL); -#endif - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImageFileLength >> 6); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 5. disable interrupt */ - nicDisableInterrupt(prAdapter); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif -#endif - - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - //4 <5> check Wi-Fi FW asserts ready bit - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - UINT_32 u4MailBox0; - - nicGetMailbox(prAdapter, 0, &u4MailBox0); - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout, ID=%d\n", - (u4MailBox0 & 0x0000FFFF))); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* post initialization for MT5931 due to some CR is only accessible after driver own */ - nicRxPostInitialize(prAdapter); -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 1. reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 2. reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - wlanSetMcuOscStableTime(prAdapter, 0); -#endif - - /* 3. query for permanent address by polling */ - wlanQueryPermanentAddress(prAdapter); - -#if (CFG_SUPPORT_NIC_CAPABILITY == 1) - /* 4. query for NIC capability */ - wlanQueryNicCapability(prAdapter); -#endif - - /* 5. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6. indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* OID timeout timer initialize */ - cnmTimerInitTimer(prAdapter, - &prAdapter->rOidTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)wlanReleasePendingOid, - (UINT_32)NULL); - - /* Power state initialization */ - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - - /* Online scan option */ - if(prRegInfo->fgDisOnlineScan == 0) { - prAdapter->fgEnOnlineScan = TRUE; - } - else { - prAdapter->fgEnOnlineScan = FALSE; - } - - /* Beacon lost detection option */ - if(prRegInfo->fgDisBcnLostDetection != 0) { - prAdapter->fgDisBcnLostDetection = TRUE; - } - - /* Load compile time constant */ - prAdapter->rWlanInfo.u2BeaconPeriod = CFG_INIT_ADHOC_BEACON_INTERVAL; - prAdapter->rWlanInfo.u2AtimWindow = CFG_INIT_ADHOC_ATIM_WINDOW; - -#if 1// set PM parameters - prAdapter->fgEnArpFilter = prRegInfo->fgEnArpFilter; - prAdapter->u4PsCurrentMeasureEn = prRegInfo->u4PsCurrentMeasureEn; - - prAdapter->u4UapsdAcBmp = prRegInfo->u4UapsdAcBmp; - - prAdapter->u4MaxSpLen = prRegInfo->u4MaxSpLen; - - DBGLOG(INIT, TRACE, ("[1] fgEnArpFilter:0x%x, u4UapsdAcBmp:0x%x, u4MaxSpLen:0x%x", - prAdapter->fgEnArpFilter, - prAdapter->u4UapsdAcBmp, - prAdapter->u4MaxSpLen)); - - prAdapter->fgEnCtiaPowerMode = FALSE; - -#endif - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, prRegInfo); - - /* Enable WZC Disassociation */ - prAdapter->rWifiVar.fgSupportWZCDisassociation = TRUE; - - /* Apply Rate Setting */ - if((ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* Disable Hidden SSID Join */ - prAdapter->rWifiVar.fgEnableJoinToHiddenSSID = FALSE; - - /* Enable Short Slot Time */ - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable = TRUE; - - /* configure available PHY type set */ - nicSetAvailablePhyTypeSet(prAdapter); - -#if 1// set PM parameters - { -#if CFG_SUPPORT_PWR_MGT - prAdapter->u4PowerMode = prRegInfo->u4PowerMode; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile = ENUM_PSP_FAST_SWITCH; -#else - prAdapter->u4PowerMode = ENUM_PSP_CONTINUOUS_ACTIVE; -#endif - - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, //FIXIT - prAdapter->u4PowerMode, - FALSE); - } - -#endif - -#if CFG_SUPPORT_NVRAM - /* load manufacture data */ - wlanLoadManufactureData(prAdapter, prRegInfo); -#endif - -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - //Enable DPD calibration. - rBwcsPta.u.aucBTPParams[0] = 0x00; - rBwcsPta.u.aucBTPParams[1] = 0x01; - rBwcsPta.u.aucBTPParams[2] = 0x00; - rBwcsPta.u.aucBTPParams[3] = 0x80; - - wlanoidSetBT(prAdapter, - (PVOID)&rBwcsPta, - sizeof(PARAM_PTA_IPC_T), - &u4SetInfoLen); -#endif - -#if 0 - /* Update Auto rate parameters in FW */ - nicRlmArUpdateParms(prAdapter, - prRegInfo->u4ArSysParam0, - prRegInfo->u4ArSysParam1, - prRegInfo->u4ArSysParam2, - prRegInfo->u4ArSysParam3); -#endif - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* clock gating workaround */ - prAdapter->fgIsClockGatingEnabled = FALSE; -#endif - - } while(FALSE); - - if(u4Status == WLAN_STATUS_SUCCESS) { - // restore to hardware default - HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter); - HAL_SET_MAILBOX_READ_CLEAR(prAdapter, FALSE); - - /* Enable interrupt */ - nicEnableInterrupt(prAdapter); - - } - else { - // release allocated memory - nicReleaseAdapterMemory(prAdapter); - } - - return u4Status; -} /* wlanAdapterStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Uninitialize the adapter -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Value = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - /* MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - if(prAdapter->rAcpiState == ACPI_STATE_D0 && -#if (CFG_CHIP_RESET_SUPPORT == 1) - kalIsResetting() == FALSE && -#endif - kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - - /* 0. Disable interrupt, this can be done without Driver own */ - nicDisableInterrupt(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* 1. Set CMD to FW to tell WIFI to stop (enter power off state) */ - if(prAdapter->fgIsFwOwn == FALSE && - wlanSendNicPowerCtrlCmd(prAdapter, 1) == WLAN_STATUS_SUCCESS) { - /* 2. Clear pending interrupt */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 3. Wait til RDY bit has been cleaerd */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if ((u4Value & WCIR_WLAN_READY) == 0) - break; - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || i >= CFG_RESPONSE_POLLING_TIMEOUT) { - break; - } - else { - i++; - kalMsleep(10); - } - } - } - - /* 4. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - -#if CFG_FORCE_RESET_UNDER_BUS_ERROR - if(HAL_TEST_FLAG(prAdapter, ADAPTER_FLAG_HW_ERR) == TRUE) { - /* force acquire firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - /* delay for 10ms */ - kalMdelay(10); - - /* force firmware reset via software interrupt */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WSICR, WSICR_H2D_SW_INT_SET); - - /* force release firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - } -#endif - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - - nicRxUninitialize(prAdapter); - - nicTxRelease(prAdapter); - - /* System Service Uninitialization */ - nicUninitSystemService(prAdapter); - - nicReleaseAdapterMemory(prAdapter); - -#if defined(_HIF_SPI) - /* Note: restore the SPI Mode Select from 32 bit to default */ - nicRestoreSpiDefMode(prAdapter); -#endif - - return u4Status; -} /* wlanAdapterStop */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by ISR (interrupt). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval TRUE: NIC's interrupt -* \retval FALSE: Not NIC's interrupt -*/ -/*----------------------------------------------------------------------------*/ -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ) -{ - ASSERT(prAdapter); - - if (fgGlobalIntrCtrl) { - nicDisableInterrupt(prAdapter); - - //wlanIST(prAdapter); - } - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by IST (task_let). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - nicProcessIST(prAdapter); - - nicEnableInterrupt(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check command queue to find out if any could be dequeued -* and/or send to HIF to MT6620 -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdQue Pointer of Command Queue (in Glue Layer) -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ) -{ - WLAN_STATUS rStatus; - QUE_T rTempCmdQue, rMergeCmdQue, rStandInCmdQue; - P_QUE_T prTempCmdQue, prMergeCmdQue, prStandInCmdQue; - P_QUE_ENTRY_T prQueueEntry; - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - ENUM_FRAME_ACTION_T eFrameAction = FRAME_ACTION_DROP_PKT; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prCmdQue); - - prTempCmdQue = &rTempCmdQue; - prMergeCmdQue = &rMergeCmdQue; - prStandInCmdQue = &rStandInCmdQue; - - QUEUE_INITIALIZE(prTempCmdQue); - QUEUE_INITIALIZE(prMergeCmdQue); - QUEUE_INITIALIZE(prStandInCmdQue); - - //4 <1> Move whole list of CMD_INFO to temp queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - //4 <2> Dequeue from head and check it is able to be sent - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while(prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - /* command packet will be always sent */ - eFrameAction = FRAME_ACTION_TX_PKT; - break; - - case COMMAND_TYPE_SECURITY_FRAME: - /* inquire with QM */ - eFrameAction = qmGetFrameAction(prAdapter, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - NULL, - FRAME_TYPE_802_1X); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - /* inquire with QM */ - prMsduInfo = (P_MSDU_INFO_T)(prCmdInfo->prPacket); - - eFrameAction = qmGetFrameAction(prAdapter, - prMsduInfo->ucNetworkType, - prMsduInfo->ucStaRecIndex, - prMsduInfo, - FRAME_TYPE_MMPDU); - break; - - default: - ASSERT(0); - break; - } - - //4 <3> handling upon dequeue result - if(eFrameAction == FRAME_ACTION_DROP_PKT) { - wlanReleaseCommand(prAdapter, prCmdInfo); - } - else if(eFrameAction == FRAME_ACTION_QUEUE_PKT) { - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - } - else if(eFrameAction == FRAME_ACTION_TX_PKT) { - //4 <4> Send the command - rStatus = wlanSendCommand(prAdapter, prCmdInfo); - - if(rStatus == WLAN_STATUS_RESOURCES) { - // no more TC4 resource for further transmission - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - break; - } - else if(rStatus == WLAN_STATUS_PENDING) { - // command packet which needs further handling upon response - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - QUEUE_INSERT_TAIL(&(prAdapter->rPendingCmdQueue), prQueueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - } - else { - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (rStatus == WLAN_STATUS_SUCCESS) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prCmdInfo->pucInfoBuffer); - } - } - else { - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, prCmdInfo->u4SetInfoLen, rStatus); - } - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - } - else { - ASSERT(0); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - //4 <3> Merge back to original queue - //4 <3.1> Merge prMergeCmdQue & prTempCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prTempCmdQue); - - //4 <3.2> Move prCmdQue to prStandInQue, due to prCmdQue might differ due to incoming 802.1X frames - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prStandInCmdQue, prCmdQue); - - //4 <3.3> concatenate prStandInQue to prMergeCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prStandInCmdQue); - - //4 <3.4> then move prMergeCmdQue to prCmdQue - QUEUE_MOVE_ALL(prCmdQue, prMergeCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanProcessCommandQueue() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will take CMD_INFO_T which carry some informations of -* incoming OID and notify the NIC_TX to send CMD. -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdInfo Pointer of P_CMD_INFO_T -* -* \retval WLAN_STATUS_SUCCESS : CMD was written to HIF and be freed(CMD Done) immediately. -* \retval WLAN_STATUS_RESOURCE : No resource for current command, need to wait for previous -* frame finishing their transmission. -* \retval WLAN_STATUS_FAILURE : Get failure while access HIF or been rejected. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_8 ucTC; /* "Traffic Class" SW(Driver) resource classification */ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - prTxCtrl = &prAdapter->rTxCtrl; - - //DbgPrint("wlanSendCommand()\n"); - // - // -#if DBG && 0 - LOG_FUNC("wlanSendCommand()\n"); - LOG_FUNC("CmdType %u NetworkType %u StaRecIndex %u Oid %u CID 0x%x SetQuery %u NeedResp %u CmdSeqNum %u\n", - prCmdInfo->eCmdType, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - prCmdInfo->fgIsOid, - prCmdInfo->ucCID, - prCmdInfo->fgSetQuery, - prCmdInfo->fgNeedResp, - prCmdInfo->ucCmdSeqNum); -#endif - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - do { - // <0> card removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - rStatus = WLAN_STATUS_FAILURE; - break; - } - - // <1> Normal case of sending CMD Packet - if (!prCmdInfo->fgDriverDomainMCR) { - // <1.1> Assign Traffic Class(TC) = TC4. - ucTC = TC4_INDEX; - - // <1.2> Check if pending packet or resource was exhausted - if ((rStatus = nicTxAcquireResource(prAdapter, ucTC)) == WLAN_STATUS_RESOURCES) { - DbgPrint("NO Resource:%d\n", ucTC); - break; - } - - // <1.3> Forward CMD_INFO_T to NIC Layer - rStatus = nicTxCmd(prAdapter, prCmdInfo, ucTC); - - // <1.4> Set Pending in response to Query Command/Need Response - if (rStatus == WLAN_STATUS_SUCCESS) { - if ((!prCmdInfo->fgSetQuery) || (prCmdInfo->fgNeedResp)) { - rStatus = WLAN_STATUS_PENDING; - } - } - } - // <2> Special case for access Driver Domain MCR - else { - P_CMD_ACCESS_REG prCmdAccessReg; - prCmdAccessReg = (P_CMD_ACCESS_REG)(prCmdInfo->pucInfoBuffer + CMD_HDR_SIZE); - - if (prCmdInfo->fgSetQuery) { - HAL_MCR_WR(prAdapter, - (prCmdAccessReg->u4Address & BITS(2,31)), //address is in DWORD unit - prCmdAccessReg->u4Data); - } - else { - P_CMD_ACCESS_REG prEventAccessReg; - UINT_32 u4Address; - - u4Address = prCmdAccessReg->u4Address; - prEventAccessReg = (P_CMD_ACCESS_REG)prCmdInfo->pucInfoBuffer; - prEventAccessReg->u4Address = u4Address; - - HAL_MCR_RD(prAdapter, - prEventAccessReg->u4Address & BITS(2,31), //address is in DWORD unit - &prEventAccessReg->u4Data); - } - } - - } - while (FALSE); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return rStatus; -} /* end of wlanSendCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function will release thd CMD_INFO upon its attribution - * - * \param prAdapter Pointer of Adapter Data Structure - * \param prCmdInfo Pointer of CMD_INFO_T - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_FAILURE); - } - break; - - case COMMAND_TYPE_SECURITY_FRAME: - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - /* invoke callbacks */ - if(prMsduInfo->pfTxDoneHandler != NULL) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - cnmMgtPktFree(prAdapter, prMsduInfo); - break; - - default: - ASSERT(0); - break; - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - -} /* end of wlanReleaseCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending OID and -* compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReleasePendingOid"); - - ASSERT(prAdapter); - - DBGLOG(INIT, ERROR, ("OID Timeout! Releasing pending OIDs ..\n")); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->fgIsOid) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - // 2: Clear pending OID in glue layer command queue - kalOidCmdClearance(prAdapter->prGlueInfo); - - // 3: Clear pending OID queued in pvOidEntry with REQ_FLAG_OID set - kalOidClearance(prAdapter->prGlueInfo); - - } while(FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending CMD/OID for specific -* NETWORK TYPE and compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingCMDbyNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - DBGLOG(P2P, TRACE, ("Pending CMD for Network Type:%d \n", prCmdInfo->eNetworkType)); - - if (prCmdInfo->eNetworkType == eNetworkType) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - - } while(FALSE); - - return; -} /* wlanReleasePendingCMDbyNetwork */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the packet buffer and reallocate one to the RFB -* -* \param prAdapter Pointer of Adapter Data Structure -* \param pvPacket Pointer of returned packet -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReturnPacket"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if (pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, pvPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT, 1); -#if CFG_NATIVE_802_11 - if (GLUE_TEST_FLAG(prAdapter->prGlueInfo, GLUE_FLAG_HALT)) { - } -#endif - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rIndicatedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (!prSwRfb){ - ASSERT(0); - return; - } - - if (nicRxSetupRFB(prAdapter, prSwRfb)){ - ASSERT(0); - return; - } - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that returns information about -* the capabilities and status of the driver and/or its network adapter. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] pfnOidQryHandler Function pointer for the OID query handler. -* \param[IN] pvInfoBuf Points to a buffer for return the query information. -* \param[IN] u4QueryBufferLen Specifies the number of bytes at pvInfoBuf. -* \param[OUT] pu4QueryInfoLen Points to the number of bytes it written or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4QryInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet */ - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidQryHandler, FALSE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - } -#endif - - return status; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that allows bound protocol drivers, -* or NDIS, to request changes in the state information that the miniport -* maintains for particular object identifiers, such as changes in multicast -* addresses. -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* \param[IN] pfnOidSetHandler Points to the OID set handlers. -* \param[IN] pvInfoBuf Points to a buffer containing the OID-specific data for the set. -* \param[IN] u4InfoBufLen Specifies the number of bytes at prSetBuffer. -* \param[OUT] pu4SetInfoLen Points to the number of bytes it read or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet - * for power state transition OIDs, handler will acquire power control by itself - */ - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidSetHandler, TRUE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - } -#endif - - return status; -} - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a used to query driver's config wapi mode or not -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* -* \retval TRUE for use wapi mode -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryWapiMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rWifiVar.rConnSettings.fgWapiMode; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to Promiscuous Mode. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnablePromiscuousMode Enable/ disable RX Promiscuous Mode. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ) -{ - ASSERT(prAdapter); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to allow to receive -* broadcast address packets. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ) -{ - ASSERT(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to send out CMD_NIC_POWER_CTRL command packet -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] ucPowerMode refer to CMD/EVENT document -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ) -{ - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - /* 1. Prepare CMD */ - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL))); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - /* 2.1 increase command sequence number */ - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - /* 2.2 Setup common CMD Info Packet */ - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_NIC_POWER_CTRL; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_NIC_POWER_CTRL); - - /* 2.3 Setup WIFI_CMD_T */ - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - kalMemZero(prWifiCmd->aucBuffer, sizeof(CMD_NIC_POWER_CTRL)); - ((P_CMD_NIC_POWER_CTRL)(prWifiCmd->aucBuffer))->ucPowerMode = ucPowerMode; - - /* 3. Issue CMD for entering specific power mode */ - ucTC = TC4_INDEX; - - while(1) { - // 3.0 Removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - status = WLAN_STATUS_FAILURE; - break; - } - - // 3.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - status = WLAN_STATUS_FAILURE; - break; - } - else { - continue; - } - } - - // 3.2 Send CMD Info Packet - if (nicTxCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to transmit CMD_NIC_POWER_CTRL command\n")); - status = WLAN_STATUS_FAILURE; - } - - break; - }; - - // 4. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - // 5. Add flag - if(ucPowerMode == 1) { - prAdapter->fgIsEnterD3ReqIssued = TRUE; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to check if it is RF test mode and -* the OID is allowed to be called or not -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerAllowedInRFTest; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerAllowedInRFTest = apfnOidSetHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidSetHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerAllowedInRFTest = apfnOidQueryHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidQueryHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerAllowedInRFTest[i] == pfnOidHandler) { - return TRUE; - } - } - - return FALSE; -} - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image in an aggregated way -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4PktCnt, u4Offset, u4Length; - UINT_32 u4TotalLength; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - - pucOutputBuf = prAdapter->rTxCtrl.pucTxCoalescingBufPtr; - - DEBUGFUNC("wlanImageSectionDownloadAggregated"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and Pre-fill Headers - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->ucEtherTypeOffset = 0; - prInitHifTxHeader->ucCSflags = 0; - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - - // 4. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - - // 5.0 reset loop control variable - u4TotalLength = 0; - u4Offset = u4PktCnt = 0; - - // 5.1 main loop for maximize transmission count per access - while(u4Offset < u4ImgSecSize) { - if(nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_SUCCESS) { - // 5.1.1 calculate u4Length - if(u4Offset + CMD_PKT_SIZE_FOR_IMAGE < u4ImgSecSize) { - u4Length = CMD_PKT_SIZE_FOR_IMAGE; - } - else { - u4Length = u4ImgSecSize - u4Offset; - } - - // 5.1.1 increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5.1.2 update HIF TX hardware header - prInitHifTxHeader->u2TxByteCount = ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4Length); - - // 5.1.3 fill command header - prInitCmdDownloadBuf->u4Address = u4DestAddr + u4Offset; - prInitCmdDownloadBuf->u4Length = u4Length; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf + u4Offset, u4Length); - - // 5.1.4.1 copy header to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, - (PVOID)prCmdInfo->pucInfoBuffer, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF)); - - // 5.1.4.2 copy payload to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength + sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF), - pucImgSecBuf + u4Offset, - u4Length); - - // 5.1.4.3 update length and other variables - u4TotalLength += ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4Length); - u4Offset += u4Length; - u4PktCnt++; - - if(u4Offset < u4ImgSecSize) { - continue; - } - } - else if(u4PktCnt == 0) { - /* no resource, so get some back */ - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - } - - if(u4PktCnt != 0) { - // start transmission - HAL_WRITE_TX_PORT(prAdapter, - 0, - u4TotalLength, - (PUINT_8)pucOutputBuf, - prAdapter->u4CoalescingBufCachedSize); - - // reset varaibles - u4PktCnt = 0; - u4TotalLength = 0; - } - } - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #else - #error "Only MT6620/MT6628 supports firmware download in an aggregated way" - - return WLAN_STATUS_FAILURE; - - #endif -} - - #endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4ImgSecSize); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4ImgSecSize; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4Address = u4DestAddr; - prInitCmdDownloadBuf->u4Length = u4ImgSecSize; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf, u4ImgSecSize); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_DOWNLOAD_ACK - | DOWNLOAD_BUF_ACK_OPTION // ACK needed - #endif - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - kalMemCopy(prInitCmdDownloadBuf->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 6. Send FW_Download command - while(1) { - // 6.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 6.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - #if CFG_ENABLE_FW_DOWNLOAD_ACK - // 7. Wait for INIT_EVENT_ID_CMD_RESULT - u4Status = wlanImageSectionDownloadStatus(prAdapter, ucCmdSeqNum); - #endif - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #elif defined(MT5931) - - UINT_32 i, u4Value; - P_HIF_HW_TX_HEADER_T prHifTxHeader; - - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - DBGLOG(INIT, TRACE, ("Destination: 0x%08X / Length: 0x%08X\n", u4DestAddr, u4ImgSecSize)); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Use TX coalescing buffer - prHifTxHeader = (P_HIF_HW_TX_HEADER_T) prAdapter->pucCoalescingBufCached; - - // 2. Setup HIF_TX_HEADER - prHifTxHeader->u2TxByteCount = (UINT_16)(ALIGN_4(sizeof(HIF_HW_TX_HEADER_T) + u4ImgSecSize)); - prHifTxHeader->ucEtherTypeOffset = 0; - prHifTxHeader->ucCSflags = 0; - - // 3. Copy payload - kalMemCopy(prHifTxHeader->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 3.1 add 4-bytes zero tail - kalMemZero(&(prHifTxHeader->aucBuffer[ALIGN_4(u4ImgSecSize)]), sizeof(HIF_HW_TX_HEADER_T)); - - // 4. Poll til FWDL_RDY = 1 - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_FWDLSR, &u4Value); - - if (u4Value & FWDLSR_FWDL_RDY) { - DBGLOG(INIT, TRACE, ("FWDL_RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for FWDL_RDY: Timeout (0x%08X)\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - // 5. Send firmware - HAL_PORT_WR(prAdapter, - MCR_FWDLDR, - prHifTxHeader->u2TxByteCount, - (PUINT_8)prHifTxHeader, - prAdapter->u4CoalescingBufCachedSize); - - return u4Status; - - #endif -} - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm previously firmware download is done without error -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR)]; - UINT_32 u4RxPktLength; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_PENDING_ERROR prEventPendingError; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanImageQueryStatus"); - - // 1. Allocate CMD Info Packet and it Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, sizeof(INIT_HIF_TX_HEADER_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T)); - prCmdInfo->u2InfoBufLen = sizeof(INIT_HIF_TX_HEADER_T); - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_QUERY_PENDING_ERROR; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Send command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - // 6. Wait for INIT_EVENT_ID_PENDING_ERROR - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_PENDING_ERROR) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prEventPendingError = (P_INIT_EVENT_PENDING_ERROR) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventPendingError->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - // 7. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm the status of -* previously downloaded firmware scatter -* -* @param prAdapter Pointer to the Adapter structure. -* ucCmdSeqNum Sequence number of previous firmware scatter -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ) -{ - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT)]; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_CMD_RESULT prEventCmdResult; - UINT_32 u4RxPktLength; - WLAN_STATUS u4Status; - - ASSERT(prAdapter); - - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_CMD_RESULT) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prEventCmdResult = (P_INIT_EVENT_CMD_RESULT) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventCmdResult->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - return u4Status; -} - - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to start FW normal operation. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_WIFI_START prInitCmdWifiStart; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanConfigWifiFunc"); - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START); - - // 2. Always use TC0 - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_WIFI_START; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - prInitCmdWifiStart = (P_INIT_CMD_WIFI_START)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdWifiStart->u4Override = (fgEnable == TRUE ? 1 : 0); - prInitCmdWifiStart->u4Address = u4StartAddress; - - // 5. Seend WIFI start command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit WIFI start command\n")); - } - - break; - }; - - // 6. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate CRC32 checksum -* -* @param buf Pointer to the data. -* @param len data length -* -* @return crc32 value -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len) -{ - UINT_32 i, crc32 = 0xFFFFFFFF; - const UINT_32 crc32_ccitt_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d }; - - for (i = 0; i < len; i++) - crc32 = crc32_ccitt_table[(crc32 ^ buf[i]) & 0xff] ^ (crc32 >> 8); - - return ( ~crc32 ); -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to process queued RX packets -* -* @param prAdapter Pointer to the Adapter structure. -* prSwRfbListHead Pointer to head of RX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - P_SW_RFB_T prSwRfb, prNextSwRfb; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(prSwRfbListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prSwRfb = prSwRfbListHead; - - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - switch(prSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prSwRfb); - break; - - default: - break; - } - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to purge queued TX packets -* by indicating failure to OS and returned to free list -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfoListHead Pointer to head of TX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - nicTxReturnMsduInfo(prAdapter, prMsduInfoListHead); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the OID handler needs timeout -* -* @param prAdapter Pointer to the Adapter structure. -* pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOTimeoutCheck; - UINT_32 i; - UINT_32 u4NumOfElem; - - apfnOidHandlerWOTimeoutCheck = apfnOidWOTimeoutCheck; - u4NumOfElem = sizeof(apfnOidWOTimeoutCheck) / sizeof(PFN_OID_HANDLER_FUNC); - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOTimeoutCheck[i] == pfnOidHandler) { - return FALSE; - } - } - - // set timer if need timeout check - //cnmTimerStartTimer(prAdapter, - // &(prAdapter->rOidTimeoutTimer), - // 1000); - cnmTimerStartTimer(prAdapter, - &(prAdapter->rOidTimeoutTimer), - 2000); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to clear any pending OID timeout check -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerStopTimer(prAdapter, &(prAdapter->rOidTimeoutTimer)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to set up the MCUSYS's OSC stable time -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ) -{ - UINT_8 ucCmdSeqNum = 0; - P_CMD_INFO_T prCmdInfo = NULL; - P_WIFI_CMD_T prWifiCmd = NULL; - P_CMD_MCU_LP_PARAM_T prMcuSetOscCmd = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_MCU_LP_PARAM_T cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_SET_OSC; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_MCU_LP_PARAM_T); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_MCU_LP_PARAM_T - prMcuSetOscCmd = (P_CMD_MCU_LP_PARAM_T)(prWifiCmd->aucBuffer); - prMcuSetOscCmd->u2OscStableTime = u2OscStableTime; - - status = wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return status; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update network address in firmware domain -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_FAILURE The request could not be processed -* WLAN_STATUS_PENDING The request has been queued for later processing -* WLAN_STATUS_SUCCESS The request has been processed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ) -{ - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - PARAM_MAC_ADDRESS rMacAddr; - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BASIC_CONFIG prCmdBasicConfig; - UINT_32 u4SysTime; - - DEBUGFUNC("wlanUpdateNetworkAddress"); - - ASSERT(prAdapter); - - if(kalRetrieveNetworkAddress(prAdapter->prGlueInfo, &rMacAddr) == FALSE - || IS_BMCAST_MAC_ADDR(rMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, rMacAddr)) { - // eFUSE has a valid address, don't do anything - if(prAdapter->fgIsEmbbededMacAddrValid == TRUE) { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using embedded MAC address")); -#endif - return WLAN_STATUS_SUCCESS; - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using dynamically generated MAC address")); -#endif - // dynamic generate - u4SysTime = (UINT_32) kalGetTimeTick(); - - rMacAddr[0] = 0x00; - rMacAddr[1] = 0x08; - rMacAddr[2] = 0x22; - - kalMemCopy(&rMacAddr[3], &u4SysTime, 3); - } - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using host-supplied MAC address")); -#endif - } - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_BASIC_CONFIG - prCmdBasicConfig = (P_CMD_BASIC_CONFIG)(prWifiCmd->aucBuffer); - kalMemCopy(&(prCmdBasicConfig->rMyMacAddr), &rMacAddr, PARAM_MAC_ADDR_LEN); - prCmdBasicConfig->ucNative80211 = 0; - prCmdBasicConfig->rCsumOffload.u2RxChecksum = 0; - prCmdBasicConfig->rCsumOffload.u2TxChecksum = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(0); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(0); -#endif - - if(wlanSendCommand(prAdapter, prCmdInfo) == WLAN_STATUS_RESOURCES) { - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryAddress; - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return WLAN_STATUS_PENDING; - } - else { - nicCmdEventQueryAddress(prAdapter, prCmdInfo, (PUINT_8)prCmdBasicConfig); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return WLAN_STATUS_SUCCESS; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the device is in RF test mode -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->fgTestMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to identify 802.1x and Bluetooth-over-Wi-Fi -* security frames, and queued into command queue for strict ordering -* due to 802.1x frames before add-key OIDs are not to be encrypted -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prPacket Pointer of native packet -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ) -{ - UINT_8 ucPriorityParam; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - P_CMD_INFO_T prCmdInfo; - - ASSERT(prAdapter); - ASSERT(prPacket); - - if (kalQoSFrameClassifierAndPacketInfo(prAdapter->prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == TRUE) { - if(fgIs1x == FALSE) { - return FALSE; - } - else { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - DBGLOG(RSN, INFO, ("T1X len=%d\n", u4PacketLen)); - - if (prCmdInfo) { - P_STA_RECORD_T prStaRec; - // fill arrival time - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_SECURITY_FRAME; - prCmdInfo->u2InfoBufLen = (UINT_16)u4PacketLen; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = prPacket; -#if 0 - prCmdInfo->ucStaRecIndex = qmGetStaRecIdx(prAdapter, - aucEthDestAddr, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType); -#endif - prStaRec = cnmGetStaRecByAddress(prAdapter, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType, - aucEthDestAddr); - if(prStaRec) { - prCmdInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prCmdInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - } - - prCmdInfo->eNetworkType = (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType; - prCmdInfo->pfCmdDoneHandler = wlanSecurityFrameTxDone; - prCmdInfo->pfCmdTimeoutHandler = wlanSecurityFrameTxTimeout; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return TRUE; - } - else { - ASSERT(0); - return FALSE; - } - } - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has been sent to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* @param pucEventBuf meaningless, only for API compatibility -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - if (prCmdInfo->eNetworkType == NETWORK_TYPE_AIS_INDEX && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure) { - P_STA_RECORD_T prSta = cnmGetStaRecByIndex(prAdapter, prCmdInfo->ucStaRecIndex); - if (prSta) { - kalMsleep(10); - secFsmEventEapolTxDone(prAdapter, prSta, TX_RESULT_SUCCESS); - } - } - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_SUCCESS); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has failed sending to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called before AIS is starting a new scan -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgKeepCurrOne = FALSE; - UINT_32 i; - - ASSERT(prAdapter); - - // clear scanning result - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - fgKeepCurrOne = TRUE; - - if(i != 0) { - // copy structure - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[0]), - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] != &(prAdapter->rWlanInfo.aucScanIEBuf[0])) { - // move IEs to head - kalMemCopy(prAdapter->rWlanInfo.aucScanIEBuf, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // modify IE pointer - prAdapter->rWlanInfo.apucScanResultIEs[0] = &(prAdapter->rWlanInfo.aucScanIEBuf[0]); - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[0] = NULL; - } - - break; - } - } - } - - if(fgKeepCurrOne == TRUE) { - prAdapter->rWlanInfo.u4ScanResultNum = 1; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = - ALIGN_4(prAdapter->rWlanInfo.arScanResult[0].u4IELength); - } - else { - prAdapter->rWlanInfo.u4ScanResultNum = 0; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when AIS received a beacon timeout event -* -* @param prAdapter Pointer of Adapter Data Structure -* @param arBSSID MAC address of the specified BSS -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ) -{ - UINT_32 i, j, u4IELength = 0, u4IEMoveLength; - PUINT_8 pucIEPtr; - - ASSERT(prAdapter); - - // clear scanning result - i = 0; - while(1) { - if(i >= prAdapter->rWlanInfo.u4ScanResultNum) { - break; - } - - if(EQUAL_MAC_ADDR(arBSSID, prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - // backup current IE length - u4IELength = ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4IELength); - pucIEPtr = prAdapter->rWlanInfo.apucScanResultIEs[i]; - - // removed from middle - for(j = i + 1 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[j-1]), - &(prAdapter->rWlanInfo.arScanResult[j]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - prAdapter->rWlanInfo.apucScanResultIEs[j-1] = - prAdapter->rWlanInfo.apucScanResultIEs[j]; - } - - prAdapter->rWlanInfo.u4ScanResultNum--; - - // remove IE buffer if needed := move rest of IE buffer - if(u4IELength > 0) { - u4IEMoveLength = prAdapter->rWlanInfo.u4ScanIEBufferUsage - - (((UINT_32)pucIEPtr) + u4IELength - ((UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])))); - - kalMemCopy(pucIEPtr, - (PUINT_8)(((UINT_32)pucIEPtr) + u4IELength), - u4IEMoveLength); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4IELength; - - // correction of pointers to IE buffer - for(j = 0 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - if(prAdapter->rWlanInfo.apucScanResultIEs[j] > pucIEPtr) { - prAdapter->rWlanInfo.apucScanResultIEs[j] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[j]) - u4IELength); - } - } - } - } - - i++; - } - - return; -} - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction ( - IN P_ADAPTER_T prAdapter - ) -{ -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(FALSE); - return; - } - - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prMsgFuncSwitch->fgIsFuncOn = TRUE; - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return; -} - -VOID -wlanEnableATGO ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_MSG_P2P_CONNECTION_REQUEST_T prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - if (!prMsgConnReq) { - ASSERT(FALSE); - return; - } - - prMsgConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - /*=====Param Modified for test=====*/ - COPY_MAC_ADDR(prMsgConnReq->aucDeviceID, aucTargetDeviceID); - prMsgConnReq->fgIsTobeGO = TRUE; - prMsgConnReq->fgIsPersistentGroup = FALSE; - - /*=====Param Modified for test=====*/ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgConnReq, - MSG_SEND_METHOD_BUF); - - return; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve permanent address from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryPermanentAddress"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_BASIC_CONFIG) { - return WLAN_STATUS_FAILURE; - } - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(prEvent->aucBuffer); - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucPermanentAddress, &(prEventBasicConfig->rMyMacAddr)); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, &(prEventBasicConfig->rMyMacAddr)); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve NIC capability from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_NIC_CAPABILITY prEventNicCapability; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryNicCapability"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_GET_NIC_CAPABILITY; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = 0; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_NIC_CAPABILITY) { - return WLAN_STATUS_FAILURE; - } - - prEventNicCapability = (P_EVENT_NIC_CAPABILITY)(prEvent->aucBuffer); - - prAdapter->rVerInfo.u2FwProductID = prEventNicCapability->u2ProductID; - prAdapter->rVerInfo.u2FwOwnVersion = prEventNicCapability->u2FwVersion; - prAdapter->rVerInfo.u2FwPeerVersion = prEventNicCapability->u2DriverVersion; - prAdapter->fgIsHw5GBandDisabled = (BOOLEAN)prEventNicCapability->ucHw5GBandDisabled; - prAdapter->fgIsEepromUsed = (BOOLEAN)prEventNicCapability->ucEepromUsed; - prAdapter->fgIsEfuseValid = (BOOLEAN)prEventNicCapability->ucEfuseValid; - prAdapter->fgIsEmbbededMacAddrValid = (BOOLEAN)prEventNicCapability->ucMacAddrValid; - - -#if CFG_ENABLE_CAL_LOG - DBGLOG(INIT, INFO, (" RF CAL FAIL = (%d),BB CAL FAIL = (%d)\n", - prEventNicCapability->ucRfCalFail ,prEventNicCapability->ucBbCalFail )); -#endif - return WLAN_STATUS_SUCCESS; -} - -#ifdef MT6628 -static INT_32 wlanChangeCodeWord(INT_32 au4Input){ - - UINT_16 i; -#if TXPWR_USE_PDSLOPE - CODE_MAPPING_T arCodeTable[] = { - {0X100, -40}, - {0X104, -35}, - {0X128, -30}, - {0X14C, -25}, - {0X170, -20}, - {0X194, -15}, - {0X1B8, -10}, - {0X1DC, - 5}, - {0 , 0}, - {0X24 , 5}, - {0X48 , 10}, - {0X6C , 15}, - {0X90 , 20}, - {0XB4 , 25}, - {0XD8 , 30}, - {0XFC , 35}, - {0XFF , 40}, - - }; -#else - CODE_MAPPING_T arCodeTable[] = { - {0X100, 0x80}, - {0X104, 0x80}, - {0X128, 0x80}, - {0X14C, 0x80}, - {0X170, 0x80}, - {0X194, 0x94}, - {0X1B8, 0XB8}, - {0X1DC, 0xDC}, - {0 , 0}, - {0X24 , 0x24}, - {0X48 , 0x48}, - {0X6C , 0x6c}, - {0X90 , 0x7F}, - {0XB4 , 0x7F}, - {0XD8 , 0x7F}, - {0XFC , 0x7F}, - {0XFF , 0x7F}, - - }; -#endif - - for (i = 0; i < sizeof(arCodeTable) / sizeof(CODE_MAPPING_T); i++) { - - if (arCodeTable[i].u4RegisterValue == au4Input){ - return arCodeTable[i] .u4TxpowerOffset; - } - } - - - return 0; -} -#endif -#if TXPWR_USE_PDSLOPE - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_CMD_ACCESS_REG prCmdMcrQuery; - ASSERT(prAdapter); - - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_ACCESS_REG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_ACCESS_REG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - kalMemCopy(prWifiCmd->aucBuffer, prMcrRdInfo, sizeof(CMD_ACCESS_REG)); - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - - if(prEvent->ucEID != EVENT_ID_ACCESS_REG) { - return WLAN_STATUS_FAILURE; - } - - prCmdMcrQuery = (P_CMD_ACCESS_REG)(prEvent->aucBuffer); - prMcrRdInfo->u4McrOffset = prCmdMcrQuery->u4Address; - prMcrRdInfo->u4McrData = prCmdMcrQuery->u4Data; - - return WLAN_STATUS_SUCCESS; -} - -static INT_32 wlanIntRound(INT_32 au4Input) -{ - - - if (au4Input >= 0){ - if((au4Input%10) == 5){ - au4Input = au4Input + 5; - return au4Input; - } - } - - if (au4Input < 0){ - if((au4Input%10) == -5){ - au4Input = au4Input - 5; - return au4Input; - } - } - - return au4Input; -} - -static INT_32 wlanCal6628EfuseForm(IN P_ADAPTER_T prAdapter,INT_32 au4Input){ - - PARAM_MCR_RW_STRUC_T rMcrRdInfo; - INT_32 au4PdSlope,au4TxPwrOffset,au4TxPwrOffset_Round; - INT_8 auTxPwrOffset_Round; - - rMcrRdInfo.u4McrOffset = 0x60205c68; - rMcrRdInfo.u4McrData = 0; - au4TxPwrOffset = au4Input; - wlanQueryPdMcr(prAdapter,&rMcrRdInfo); - - au4PdSlope = (rMcrRdInfo.u4McrData) & BITS(0,6); - au4TxPwrOffset_Round = wlanIntRound((au4TxPwrOffset*au4PdSlope))/10; - - au4TxPwrOffset_Round = -au4TxPwrOffset_Round; - - if(au4TxPwrOffset_Round < -128) { - au4TxPwrOffset_Round = 128; - } - else if (au4TxPwrOffset_Round < 0){ - au4TxPwrOffset_Round += 256; - } - else if (au4TxPwrOffset_Round > 127){ - au4TxPwrOffset_Round = 127; - } - - auTxPwrOffset_Round = (UINT8) au4TxPwrOffset_Round ; - - return au4TxPwrOffset_Round; -} - -#endif - -#ifdef MT6628 -static VOID wlanChangeNvram6620to6628(PUINT_8 pucEFUSE){ - - - #define EFUSE_CH_OFFSET1_L_MASK_6620 BITS(0,8) - #define EFUSE_CH_OFFSET1_L_SHIFT_6620 0 - #define EFUSE_CH_OFFSET1_M_MASK_6620 BITS(9,17) - #define EFUSE_CH_OFFSET1_M_SHIFT_6620 9 - #define EFUSE_CH_OFFSET1_H_MASK_6620 BITS(18,26) - #define EFUSE_CH_OFFSET1_H_SHIFT_6620 18 - #define EFUSE_CH_OFFSET1_VLD_MASK_6620 BIT(27) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_6620 27 - - #define EFUSE_CH_OFFSET1_L_MASK_5931 BITS(0,7) - #define EFUSE_CH_OFFSET1_L_SHIFT_5931 0 - #define EFUSE_CH_OFFSET1_M_MASK_5931 BITS(8,15) - #define EFUSE_CH_OFFSET1_M_SHIFT_5931 8 - #define EFUSE_CH_OFFSET1_H_MASK_5931 BITS(16,23) - #define EFUSE_CH_OFFSET1_H_SHIFT_5931 16 - #define EFUSE_CH_OFFSET1_VLD_MASK_5931 BIT(24) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_5931 24 - #define EFUSE_ALL_CH_OFFSET1_MASK_5931 BITS(25,27) - #define EFUSE_ALL_CH_OFFSET1_SHIFT_5931 25 - - - - - INT_32 au4ChOffset; - INT_16 au2ChOffsetL,au2ChOffsetM,au2ChOffsetH; - - - au4ChOffset = *(UINT_32*)(pucEFUSE + 72); - - if((au4ChOffset & EFUSE_CH_OFFSET1_VLD_MASK_6620) && ((*(UINT_32*)(pucEFUSE + 28)) == 0)) { - - - au2ChOffsetL = ((au4ChOffset & EFUSE_CH_OFFSET1_L_MASK_6620) >> - EFUSE_CH_OFFSET1_L_SHIFT_6620); - - au2ChOffsetM = ((au4ChOffset & EFUSE_CH_OFFSET1_M_MASK_6620) >> - EFUSE_CH_OFFSET1_M_SHIFT_6620); - - au2ChOffsetH = ((au4ChOffset & EFUSE_CH_OFFSET1_H_MASK_6620) >> - EFUSE_CH_OFFSET1_H_SHIFT_6620); - - au2ChOffsetL = wlanChangeCodeWord(au2ChOffsetL); - au2ChOffsetM = wlanChangeCodeWord(au2ChOffsetM); - au2ChOffsetH = wlanChangeCodeWord(au2ChOffsetH); - - au4ChOffset = 0; - au4ChOffset |= *(UINT_32*)(pucEFUSE + 72) - >> (EFUSE_CH_OFFSET1_VLD_SHIFT_6620 - EFUSE_CH_OFFSET1_VLD_SHIFT_5931 )& EFUSE_CH_OFFSET1_VLD_MASK_5931 ; - - - - au4ChOffset |= ((((UINT_32)au2ChOffsetL) << EFUSE_CH_OFFSET1_L_SHIFT_5931) & EFUSE_CH_OFFSET1_L_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetM) << EFUSE_CH_OFFSET1_M_SHIFT_5931) & EFUSE_CH_OFFSET1_M_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetH) << EFUSE_CH_OFFSET1_H_SHIFT_5931) & EFUSE_CH_OFFSET1_H_MASK_5931); - - *((INT_32 *)((pucEFUSE + 28))) = au4ChOffset ; - - - - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to load manufacture data from NVRAM -* if available and valid -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prRegInfo Pointer of REG_INFO_T -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_RDD_CH_T rRddParam; -#endif - - ASSERT(prAdapter); - - /* 1. Version Check */ - kalGetConfigurationVersion(prAdapter->prGlueInfo, - &(prAdapter->rVerInfo.u2Part1CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part1CfgPeerVersion), - &(prAdapter->rVerInfo.u2Part2CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part2CfgPeerVersion)); - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - if(CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION) { - return WLAN_STATUS_FAILURE; - } -#endif - - // MT6620 E1/E2 would be ignored directly - if(prAdapter->rVerInfo.u2Part1CfgOwnVersion == 0x0001) { - prRegInfo->ucTxPwrValid = 1; - } - else { - /* 2. Load TX power gain parameters if valid */ - if(prRegInfo->ucTxPwrValid != 0) { - // send to F/W - nicUpdateTxPower(prAdapter, (P_CMD_TX_PWR_T)(&(prRegInfo->rTxPwr))); - } - } - - /* 3. Check if needs to support 5GHz */ - if(prRegInfo->ucEnable5GBand) { - // check if it is disabled by hardware - if(prAdapter->fgIsHw5GBandDisabled - || prRegInfo->ucSupport5GBand == 0) { - prAdapter->fgEnable5GBand = FALSE; - } - else { - prAdapter->fgEnable5GBand = TRUE; - } - } - else { - prAdapter->fgEnable5GBand = FALSE; - } - - /* 4. Send EFUSE data */ -#if defined(MT6628) - wlanChangeNvram6620to6628(prRegInfo->aucEFUSE); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PHY_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PHY_PARAM_T), - (PUINT_8)(prRegInfo->aucEFUSE), - NULL, - 0); - -#if CFG_SUPPORT_RDD_TEST_MODE - rRddParam.ucRddTestMode = (UINT_8) prRegInfo->u4RddTestMode; - rRddParam.ucRddShutCh = (UINT_8) prRegInfo->u4RddShutFreq; - rRddParam.ucRddStartCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStartFreq); - rRddParam.ucRddStopCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStopFreq); - rRddParam.ucRddDfs = (UINT_8) prRegInfo->u4RddDfs; - prAdapter->ucRddStatus = 0; - nicUpdateRddTestMode(prAdapter, (P_CMD_RDD_CH_T)(&rRddParam)); -#endif - - /* 5. Get 16-bits Country Code and Bandwidth */ - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) prRegInfo->au2CountryCode[0]) << 8) | - (((UINT_16) prRegInfo->au2CountryCode[1]) & BITS(0,7)); - -#if 0 /* Bandwidth control will be controlled by GUI. 20110930 - * So ignore the setting from registry/NVRAM - */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prRegInfo->uc2G4BwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prRegInfo->uc5GBwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; -#endif - - /* 6. Set domain and channel information to chip */ - rlmDomainSendCmd(prAdapter, FALSE); - - /* 7. set band edge tx power if available */ - if(prRegInfo->fg2G4BandEdgePwrUsed) { - CMD_EDGE_TXPWR_LIMIT_T rCmdEdgeTxPwrLimit; - - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrCCK - = prRegInfo->cBandEdgeMaxPwrCCK; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM20 - = prRegInfo->cBandEdgeMaxPwrOFDM20; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM40 - = prRegInfo->cBandEdgeMaxPwrOFDM40; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_EDGE_TXPWR_LIMIT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_EDGE_TXPWR_LIMIT_T), - (PUINT_8)&rCmdEdgeTxPwrLimit, - NULL, - 0); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check -* Media Stream Mode is set to non-default value or not, -* and clear to default value if above criteria is met -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return TRUE -* The media stream mode was non-default value and has been reset -* FALSE -* The media stream mode is default value -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode != 0) { - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - - return TRUE; - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending timer has expired -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerDoTimeOutCheck(prAdapter); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending mailbox message -* to be handled -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - for(i = 0 ; i < MBOX_ID_TOTAL_NUM ; i++) { - mboxRcvAllMsg(prAdapter , (ENUM_MBOX_ID_T)i); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to enqueue a single TX packet into CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* prNativePacket Pointer of Native Packet -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_RESOURCES -* WLAN_STATUS_INVALID_PACKET -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo == NULL) { - return WLAN_STATUS_RESOURCES; - } - else { - prMsduInfo->eSrc = TX_PACKET_OS; - - if(nicTxFillMsduInfo(prAdapter, - prMsduInfo, - prNativePacket) == FALSE) { // packet is not extractable - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_INVALID_PACKET); - - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - - return WLAN_STATUS_INVALID_PACKET; - } - else { - // enqueue to QM - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to flush pending TX packets in CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return nicTxFlush(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function sends pending MSDU_INFO_T to MT6620 -* -* @param prAdapter Pointer to the Adapter structure. -* @param pfgHwAccess Pointer for tracking LP-OWN status -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(pfgHwAccess); - - // <1> dequeue packet by txDequeuTxPackets() - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmDequeueTxPackets(prAdapter, &prTxCtrl->rTc); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - /* <2> Acquire LP-OWN if necessary */ - if(*pfgHwAccess == FALSE) { - *pfgHwAccess = TRUE; - - wlanAcquirePowerControl(prAdapter); - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - // <3> send packets - nicTxMsduInfoList(prAdapter, prMsduInfo); - - // <4> update TC by txAdjustTcQuotas() - nicTxAdjustTcq(prAdapter); - } - else { - wlanProcessQueuedMsduInfo(prAdapter, prMsduInfo); - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to acquire power control from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to release power control to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to report currently pending TX frames count -* (command packets are not included) -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return number of pending TX frames -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_32 u4Num; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - u4Num = kalGetTxPendingFrameCount(prAdapter->prGlueInfo) + (UINT_32)(prTxCtrl->i4PendingFwdFrameCount); - - return u4Num; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to report current ACPI state -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -*/ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rAcpiState; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to update current ACPI state only -* -* @param prAdapter Pointer of Adapter Data Structure -* @param ePowerState ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ) -{ - ASSERT(prAdapter); - ASSERT(ePowerState <= ACPI_STATE_D3); - - prAdapter->rAcpiState = ePowerState; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to query ECO version from HIFSYS CR -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(nicVerifyChipID(prAdapter) == TRUE) { - return (prAdapter->ucRevID + 1); - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to setting the default Tx Power configuration -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 i; - P_GLUE_INFO_T prGlueInfo = prAdapter->prGlueInfo; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prGlueInfo); - - prTxpwr = &prGlueInfo->rTxPwr; - - prTxpwr->c2GLegacyStaPwrOffset = 0; - prTxpwr->c2GHotspotPwrOffset = 0; - prTxpwr->c2GP2pPwrOffset = 0; - prTxpwr->c2GBowPwrOffset = 0; - prTxpwr->c5GLegacyStaPwrOffset = 0; - prTxpwr->c5GHotspotPwrOffset = 0; - prTxpwr->c5GP2pPwrOffset = 0; - prTxpwr->c5GBowPwrOffset = 0; - prTxpwr->ucConcurrencePolicy = 0; - for (i=0; i<3;i++) - prTxpwr->acReserved1[i] = 0; - - for (i=0; i<14;i++) - prTxpwr->acTxPwrLimit2G[i] = 63; - - for (i=0; i<4;i++) - prTxpwr->acTxPwrLimit5G[i] = 63; - - for (i=0; i<2;i++) - prTxpwr->acReserved2[i] = 0; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* set preferred band configuration corresponding to network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eBand Given band -* @param eNetTypeIndex Given Network Type -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - /* 1. set prefer band according to network type */ - prAdapter->aePreferBand[eNetTypeIndex] = eBand; - - /* 2. remove buffered BSS descriptors correspondingly */ - if(eBand == BAND_2G4) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_5G, eNetTypeIndex); - } - else if(eBand == BAND_5G) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_2G4, eNetTypeIndex); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* get channel information corresponding to specified network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eNetTypeIndex Given Network Type -* -* @return channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - return prBssInfo->ucPrimaryChannel; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* get BSS descriptor information corresponding to specified network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eNetTypeIndex Given Network Type -* -* @return pointer to BSS_DESC_T -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -wlanGetTargetBssDescByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - return prAdapter->rWifiVar.rAisFsmInfo.prTargetBssDesc; - - case NETWORK_TYPE_P2P_INDEX: - return NULL; - - case NETWORK_TYPE_BOW_INDEX: - return prAdapter->rWifiVar.rBowFsmInfo.prTargetBssDesc; - - default: - return NULL; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* check unconfigured system properties and generate related message on -* scan list to notify users -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -#if CFG_SUPPORT_NVRAM -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ) -{ -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) || (CFG_SW_NVRAM_VERSION_CHECK == 1) - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - const UINT_8 aucBCAddr[] = BC_MAC_ADDR; - BOOLEAN fgIsConfExist = TRUE; - BOOLEAN fgGenErrMsg = FALSE; - P_REG_INFO_T prRegInfo = NULL; - P_WLAN_BEACON_FRAME_T prBeacon = NULL; - P_IE_SSID_T prSsid = NULL; - UINT_32 u4ErrCode = 0; - UINT_8 aucErrMsg[32]; - PARAM_SSID_T rSsid; - PARAM_802_11_CONFIG_T rConfiguration; - PARAM_RATES_EX rSupportedRates; -#endif - - DEBUGFUNC("wlanCheckSystemConfiguration"); - - ASSERT(prAdapter); - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - fgIsConfExist = FALSE; - fgGenErrMsg = TRUE; - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - prRegInfo = kalGetConfiguration(prAdapter->prGlueInfo); - - if(fgIsConfExist == TRUE && - (CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION - || (prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) - || prRegInfo->ucTxPwrValid == 0)) { - fgGenErrMsg = TRUE; - } -#endif - - if(fgGenErrMsg == TRUE) { - prBeacon = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // initialization - kalMemZero(prBeacon, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // prBeacon initialization - prBeacon->u2FrameCtrl = MAC_FRAME_BEACON; - COPY_MAC_ADDR(prBeacon->aucDestAddr, aucBCAddr); - COPY_MAC_ADDR(prBeacon->aucSrcAddr, aucZeroMacAddr); - COPY_MAC_ADDR(prBeacon->aucBSSID, aucZeroMacAddr); - prBeacon->u2BeaconInterval = 100; - prBeacon->u2CapInfo = CAP_INFO_ESS; - - // prSSID initialization - prSsid = (P_IE_SSID_T)(&prBeacon->aucInfoElem[0]); - prSsid->ucId = ELEM_ID_SSID; - - // rConfiguration initialization - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = 100; - rConfiguration.u4ATIMWindow = 1; - rConfiguration.u4DSConfig = 2412; - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - // rSupportedRates initialization - kalMemZero(rSupportedRates, sizeof(PARAM_RATES_EX)); - } - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - #define NVRAM_ERR_MSG "NVRAM WARNING: Err = 0x01" - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - NVRAM_ERR_MSG, - strlen(NVRAM_ERR_MSG)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, NVRAM_ERR_MSG, strlen(NVRAM_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - #define VER_ERR_MSG "NVRAM WARNING: Err = 0x%02X" - if(fgIsConfExist == TRUE) { - if((CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION)) { - u4ErrCode |= NVRAM_ERROR_VERSION_MISMATCH; - } - - - if(prRegInfo->ucTxPwrValid == 0) { - u4ErrCode |= NVRAM_ERROR_INVALID_TXPWR; - } - - if(prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) { - u4ErrCode |= NVRAM_ERROR_INVALID_MAC_ADDR; - } - - if(u4ErrCode != 0) { - sprintf(aucErrMsg, VER_ERR_MSG, (unsigned int)u4ErrCode); - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - aucErrMsg, - strlen(aucErrMsg)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, NVRAM_ERR_MSG, strlen(NVRAM_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } - } -#endif - - if(fgGenErrMsg == TRUE) { - cnmMemFree(prAdapter, prBeacon); - } - - return WLAN_STATUS_SUCCESS; -} -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_oid.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_oid.c deleted file mode 100755 index ae0aaa7e855b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_oid.c +++ /dev/null @@ -1,10778 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_oid.c#5 $ -*/ - -/*! \file wlanoid.c - \brief This file contains the WLAN OID processing routines of Windows driver for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_oid.c $ -** -** 01 17 2013 george.huang -** [ALPS00444577] ?Lenovo A820t??Pre-test??????Critical??wifi??wifi?????????????? -** Rollback //ALPS_SW/MP/ALPS.JB2.MP/alps/mediatek/kernel/drivers/combo/drv_wlan/mt6628/wlan/common/wlan_oid.c to revision 1 -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * using the wlanSendSetQueryCmd to set the tx power control cmd. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * change the set tx power cmd name. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 09 2011 george.huang - * [WCXRP00000871] [MT6620 Wi-Fi][FW] Include additional wakeup condition, which is by consequent DTIM unicast indication - * add XLOG for Set PS mode entry - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add RDD certification features. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 15 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * correct fifo full control from query to set operation for CTIA. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 17 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * add system config for CTIA. - * - * 08 15 2011 george.huang - * [MT6620 Wi-Fi][FW] handle TSF drift for connection detection - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 05 02 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Fix compile warning. - * - * 04 29 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * . - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * add more debug message - * - * 04 26 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Add rx path profiling. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 03 29 2011 puff.wen - * NULL - * Add chennel switch for stress test - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 24 2011 wh.su - * [WCXRP00000595] [MT6620 Wi-Fi][Driver] at CTIA indicate disconnect to make the ps profile can apply - * use disconnect event instead of ais abort for CTIA testing. - * - * 03 23 2011 george.huang - * [WCXRP00000586] [MT6620 Wi-Fi][FW] Modify for blocking absence request right after connected - * revise for CTIA power mode setting - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 15 2011 george.huang - * [WCXRP00000557] [MT6620 Wi-Fi] Support current consumption test mode commands - * Support current consumption measurement mode command - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 03 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the enter ctia test mode issue. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Update sigma CAPI for U-APSD setting - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 25 2011 cp.wu - * [WCXRP00000394] [MT6620 Wi-Fi][Driver] Count space needed for generating error message in scanning list into buffer size checking - * when doing size prechecking, check illegal MAC address as well - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * check if allow to switch to IBSS mode via concurrent module before setting to IBSS mode - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 04 2011 cp.wu - * [WCXRP00000342] [MT6620 Wi-Fi][Driver] show error code in scanning list when MAC address is not correctly configured in NVRAM - * show error code 0x10 when MAC address in NVRAM is not configured correctly. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 28 2010 george.huang - * [WCXRP00000232] [MT5931 Wi-Fi][FW] Modifications for updated HW power on sequence and related design - * support WMM-PS U-APSD AC assignment. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 16 2010 cp.wu - * [WCXRP00000268] [MT6620 Wi-Fi][Driver] correction for WHQL failed items - * correction for OID_802_11_NETWORK_TYPES_SUPPORTED handlers - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 21 2010 wh.su - * [WCXRP00000192] [MT6620 Wi-Fi][Driver] Fixed fail trying to build connection with Security AP while enable WAPI message check - * Not set the wapi mode while the wapi assoc info set non-wapi ie. - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 22 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * dos2unix conversion. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 yuche.tsai - * NULL - * Update SLT 5G Test Channel Set. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 06 2010 yuche.tsai - * NULL - * Update For SLT 5G Test Channel Selection Rule. - * - * 10 05 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Query buffer size needs to be enlarged due to result is filled in 4-bytes alignment boundary - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 10 04 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Extend result length to multiples of 4-bytes - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Update SLT due to API change of SCAN module. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 yuche.tsai - * NULL - * Refine SLT IO control handler. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 chinglan.wang - * NULL - * Modify the rescan condition. - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * upate params defined in CMD_SET_NETWORK_ADDRESS_LIST - * - * 08 04 2010 cp.wu - * NULL - * fix for check build WHQL testing: - * 1) do not assert query buffer if indicated buffer length is zero - * 2) sdio.c has bugs which cause freeing same pointer twice - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 08 04 2010 cp.wu - * NULL - * bypass u4FuncData for RF-Test query request as well. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 19 2010 wh.su - * - * modify the auth and encry status variable. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement SCAN-REQUEST oid as mailbox message dispatching. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for oid pmkid. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * simplify cmd packet sending for RF test and MCR access OIDs - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable radio even when STA is not associated. - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct 2 OID behaviour to meet WHQL requirement. - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct BSSID_LIST oid when radio if turned off. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable wlanoidSetNetworkAddress() temporally. - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * some OIDs should be DRIVER_CORE instead of GLUE_EXTENSION - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanoidSet802dot11PowerSaveProfile implementation. - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassocation support for wpa supplicant - * - * 05 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct return value. - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, still use parameter with current setting. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, generate a WZC-compatible invalid SSID. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * associate to illegal SSID when handling OID_802_11_DISASSOCIATE - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * 2) command sequence number is now increased atomically - * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_CONFIGURATION query for infrastructure mode. - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) remove unused spin lock declaration - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * (2) disable set Multicast address during atomic context - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve glue code portability - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * the frequency is used for adhoc connection only - * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * adding the check for pass WHQL test item. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 16 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * fixed some whql pre-test fail case. - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 24 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Don't needed to check the auth mode, WHQL testing not specific at auth wpa2. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not check SSID validity anymore. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * 2. follow MSDN defined behavior when associates to another AP - * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 02 04 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when OID_CUSTOM_OID_INTERFACE_VERSION is queried, do modify connection states - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * 2. block TX/ordinary OID when RF test mode is engaged - * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * OID_802_11_RSSI, - * OID_802_11_RSSI_TRIGGER, - * OID_802_11_STATISTICS, - * OID_802_11_DISASSOCIATE, - * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not fill ucJoinOnly currently - * - * 01 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable to connect to ad-hoc network - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .implement Set/Query BeaconInterval/AtimWindow - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .Set/Get AT Info is not blocked even when driver is not in fg test mode - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * and result is retrieved by get ATInfo instead - * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-16 22:13:36 GMT mtk02752 -** change hard-coded MAC address to match with FW (temporally) -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-10 16:49:50 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-08 17:38:49 GMT mtk02752 -** + add OID for RF test -** * MCR RD/WR are modified to match with cmd/event definition -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-12-08 11:32:20 GMT mtk02752 -** add skeleton for RF test implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-12-03 16:43:24 GMT mtk01461 -** Modify query SCAN list oid by adding prEventScanResult -** -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-03 16:39:27 GMT mtk01461 -** Sync CMD data structure in set ssid oid -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-03 16:28:22 GMT mtk01461 -** Add invalid check of set SSID oid and fix query scan list oid -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-30 17:33:08 GMT mtk02752 -** implement wlanoidSetInfrastructureMode/wlanoidQueryInfrastructureMode -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-30 10:53:49 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-30 09:22:48 GMT mtk02752 -** correct wifi cmd length mismatch -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-25 21:34:33 GMT mtk02752 -** sync EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 21:03:27 GMT mtk02752 -** implement wlanoidQueryBssidList() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-25 18:17:17 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-23 20:28:51 GMT mtk02752 -** some OID will be set to WLAN_STATUS_PENDING until it is sent via wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-23 17:56:36 GMT mtk02752 -** implement wlanoidSetBssidListScan(), wlanoidSetBssid() and wlanoidSetSsid() -** -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-13 17:20:53 GMT mtk02752 -** add Set BSSID/SSID path but disabled temporally due to FW is not ready yet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 12:28:58 GMT mtk02752 -** add wlanoidSetBssidListScan -> cmd_info path -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-09 22:48:07 GMT mtk01084 -** modify test cases entry -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-04 14:10:58 GMT mtk01084 -** add new test interfaces -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-30 18:17:10 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:46:26 GMT mtk01084 -** add test functions -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:07:56 GMT mtk01084 -** include new file -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:29 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-02 13:48:49 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-09-09 17:26:04 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-21 12:09:50 GMT mtk01461 -** Update for MCR Write OID -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:35:18 GMT mtk01461 -** Update wlanoidQueryMcrRead() for composing CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 18:09:51 GMT mtk01426 -** Remove kalIndicateStatusAndComplete() in wlanoidQueryOidInterfaceVersion() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-14 15:51:50 GMT mtk01426 -** Add MCR read/write support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:40 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:06:31 GMT mtk01426 -** Init for develop -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" -#include "mgmt/rsn.h" - -#include - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ -#if DBG -extern UINT_8 aucDebugModule[DBG_MODULE_NUM]; -extern UINT_32 u4DebugModule; -UINT_32 u4DebugModuleTemp; -#endif /* DBG */ - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ -extern int sprintf(char * buf, const char * fmt, ...); - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -#if CFG_ENABLE_STATISTICS_BUFFERING -static BOOLEAN -IsBufferedStatisticsUsable( - P_ADAPTER_T prAdapter) -{ - ASSERT(prAdapter); - - if(prAdapter->fgIsStatValid == TRUE && - (kalGetTimeTick() - prAdapter->rStatUpdateTime) <= CFG_STATISTICS_VALID_CYCLE) - return TRUE; - else - return FALSE; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the supported physical layer network -* type that can be used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 u4NumItem = 0; - ENUM_PARAM_NETWORK_TYPE_T eSupportedNetworks[PARAM_NETWORK_TYPE_NUM]; - PPARAM_NETWORK_TYPE_LIST prSupported; - - /* The array of all physical layer network subtypes that the driver supports. */ - - DEBUGFUNC("wlanoidQueryNetworkTypesSupported"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - /* Init. */ - for (u4NumItem = 0; u4NumItem < PARAM_NETWORK_TYPE_NUM ; u4NumItem++) { - eSupportedNetworks[u4NumItem] = 0; - } - - u4NumItem = 0; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_DS; - u4NumItem ++; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_OFDM24; - u4NumItem ++; - - *pu4QueryInfoLen = - (UINT_32)OFFSET_OF(PARAM_NETWORK_TYPE_LIST, eNetworkType) + - (u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSupported = (PPARAM_NETWORK_TYPE_LIST)pvQueryBuffer; - prSupported->NumberOfItems = u4NumItem; - kalMemCopy(prSupported->eNetworkType, - eSupportedNetworks, - u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - DBGLOG(REQ, TRACE, ("NDIS supported network type list: %ld\n", - prSupported->NumberOfItems)); - DBGLOG_MEM8(REQ, INFO, prSupported, *pu4QueryInfoLen); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypesSupported */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current physical layer network -* type used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T rCurrentNetworkTypeInUse = PARAM_NETWORK_TYPE_OFDM24; - - DEBUGFUNC("wlanoidQueryNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkType); - } - else { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkTypeInUse); - } - - *(P_ENUM_PARAM_NETWORK_TYPE_T)pvQueryBuffer = rCurrentNetworkTypeInUse; - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, TRACE, ("Network type in use: %d\n", rCurrentNetworkTypeInUse)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the physical layer network type used -* by the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS The given network type is supported and accepted. -* \retval WLAN_STATUS_INVALID_DATA The given network type is not in the -* supported list. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T eNewNetworkType; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - DEBUGFUNC("wlanoidSetNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_INVALID_LENGTH; - } - - eNewNetworkType = *(P_ENUM_PARAM_NETWORK_TYPE_T)pvSetBuffer; - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, - INFO, - ("New network type: %d mode\n", eNewNetworkType)); - - switch (eNewNetworkType) { - - case PARAM_NETWORK_TYPE_DS: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_DS; - break; - - case PARAM_NETWORK_TYPE_OFDM5: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM5; - break; - - case PARAM_NETWORK_TYPE_OFDM24: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM24; - break; - - case PARAM_NETWORK_TYPE_AUTOMODE: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_AUTOMODE; - break; - - case PARAM_NETWORK_TYPE_FH: - DBGLOG(REQ, INFO, ("Not support network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - - default: - DBGLOG(REQ, INFO, ("Unknown network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - /* Verify if we support the new network type. */ - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("Unknown network type: %d\n", eNewNetworkType)); - } - - return rStatus; -} /* wlanoidSetNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current BSSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryBssid"); - - ASSERT(prAdapter); - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - ASSERT(pu4QueryInfoLen); - *pu4QueryInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(u4QueryBufferLen >= MAC_ADDR_LEN); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalMemCopy(pvQueryBuffer, prAdapter->rWlanInfo.rCurrBssId.arMacAddress, MAC_ADDR_LEN); - } - else if(prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS) { - PARAM_MAC_ADDRESS aucTemp; /*!< BSSID */ - COPY_MAC_ADDR(aucTemp, prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - aucTemp[0] &= ~BIT(0); - aucTemp[1] |= BIT(1); - COPY_MAC_ADDR(pvQueryBuffer, aucTemp); - } - else { - rStatus = WLAN_STATUS_ADAPTER_NOT_READY; - } - - *pu4QueryInfoLen = MAC_ADDR_LEN; - return rStatus; -} /* wlanoidQueryBssid */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the list of all BSSIDs detected by -* the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssidList ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_32 i, u4BssidListExLen; - P_PARAM_BSSID_LIST_EX_T prList; - P_PARAM_BSSID_EX_T prBssidEx; - PUINT_8 cp; - - DEBUGFUNC("wlanoidQueryBssidList"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - - if(!pvQueryBuffer) { - return WLAN_STATUS_INVALID_DATA; - } - } - - prGlueInfo = prAdapter->prGlueInfo; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in qeury BSSID list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - u4BssidListExLen = 0; - - if(prAdapter->fgIsRadioOff == FALSE) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - u4BssidListExLen += ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4Length); - } - } - - if(u4BssidListExLen) { - u4BssidListExLen += 4; // u4NumberOfItems. - } - else { - u4BssidListExLen = sizeof(PARAM_BSSID_LIST_EX_T); - } - - *pu4QueryInfoLen = u4BssidListExLen; - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Clear the buffer */ - kalMemZero(pvQueryBuffer, u4BssidListExLen); - - prList = (P_PARAM_BSSID_LIST_EX_T) pvQueryBuffer; - cp = (PUINT_8)&prList->arBssid[0]; - - if(prAdapter->fgIsRadioOff == FALSE && prAdapter->rWlanInfo.u4ScanResultNum > 0) { - // fill up for each entry - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - prBssidEx = (P_PARAM_BSSID_EX_T)cp; - - // copy structure - kalMemCopy(prBssidEx, - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - /*For WHQL test, Rssi should be in range -10 ~ -200 dBm*/ - if(prBssidEx->rRssi > PARAM_WHQL_RSSI_MAX_DBM) { - prBssidEx->rRssi = PARAM_WHQL_RSSI_MAX_DBM; - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - // copy IEs - kalMemCopy(prBssidEx->aucIEs, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // 4-bytes alignement - prBssidEx->u4Length = ALIGN_4(prBssidEx->u4Length); - - cp += prBssidEx->u4Length; - prList->u4NumberOfItems++; - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryBssidList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScan ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SSID_T prSsid; - PARAM_SSID_T rSsid; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidSetBssidListScan()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - pvSetBuffer, - u4SetBufferLen); - prSsid = &rSsid; - } - else { - prSsid = NULL; - } - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED){ - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - else { - /* reject the scan request */ - rStatus = WLAN_STATUS_FAILURE; - } - } - else { - /* reject the scan request */ - rStatus = WLAN_STATUS_FAILURE; - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - else { - /* reject the scan request */ - rStatus = WLAN_STATUS_FAILURE; - } - } - - return rStatus; -} /* wlanoidSetBssidListScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning with attaching information elements(IEs) specified from user space -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SCAN_REQUEST_EXT_T prScanRequest; - P_PARAM_SSID_T prSsid; - PUINT_8 pucIe; - UINT_32 u4IeLength; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidSetBssidListScanExt()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if(u4SetBufferLen != sizeof(PARAM_SCAN_REQUEST_EXT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - prScanRequest = (P_PARAM_SCAN_REQUEST_EXT_T)pvSetBuffer; - prSsid = &(prScanRequest->rSsid); - pucIe = prScanRequest->pucIE; - u4IeLength = prScanRequest->u4IELength; - } - else { - prScanRequest = NULL; - prSsid = NULL; - pucIe = NULL; - u4IeLength = 0; - } - - P_AIS_FSM_INFO_T prAisFsmInfo; - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rScanDoneTimer, - SEC_TO_MSEC(AIS_SCN_DONE_TIMEOUT_SEC)); - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED){ - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - else { - /* reject the scan request */ - rStatus = WLAN_STATUS_FAILURE; - } - } - else { - /* reject the scan request */ - rStatus = WLAN_STATUS_FAILURE; - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - else { - /* reject the scan request */ - rStatus = WLAN_STATUS_FAILURE; - } - } - - return rStatus; -} /* wlanoidSetBssidListScanWithIE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt to associate -* with the specified BSSID. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_UINT_8 pAddr; - UINT_32 i; - INT_32 i4Idx = -1; - P_MSG_AIS_ABORT_T prAisAbortMsg; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = MAC_ADDR_LEN;; - if (u4SetBufferLen != MAC_ADDR_LEN){ - *pu4SetInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prGlueInfo = prAdapter->prGlueInfo; - pAddr = (P_UINT_8)pvSetBuffer; - - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, pAddr)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the BSSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, pAddr)) { - i4Idx = (INT_32)i; - break; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - /* Set Connection Request Issued Flag */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_BSSID; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - prAdapter->rWifiVar.rConnSettings.ucSSIDLen = 0; - prAdapter->rWifiVar.rConnSettings.aucSSID[0] = '\0'; - - COPY_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr); - prAisAbortMsg->fgDelayIndication = FALSE; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt -* to associate with the new SSID. If the previous scanning -* result is aged, we will scan the channels at first. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSsid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_PARAM_SSID_T pParamSsid; - UINT_32 i; - INT_32 i4Idx = -1, i4MaxRSSI = INT_MIN; - P_MSG_AIS_ABORT_T prAisAbortMsg; - BOOLEAN fgIsValidSsid = TRUE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* MSDN: - * Powering on the radio if the radio is powered off through a setting of OID_802_11_DISASSOCIATE - */ - if(prAdapter->fgIsRadioOff == TRUE) { - prAdapter->fgIsRadioOff = FALSE; - } - - if(u4SetBufferLen < sizeof(PARAM_SSID_T) || u4SetBufferLen > sizeof(PARAM_SSID_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - pParamSsid = (P_PARAM_SSID_T) pvSetBuffer; - - if (pParamSsid->u4SsidLen > 32) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prGlueInfo = prAdapter->prGlueInfo; - - // prepare for CMD_BUILD_CONNECTION & CMD_GET_CONNECTION_STATUS - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_SSID(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the SSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - PUINT_8 aucSsid = prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid; - UINT_8 ucSsidLength = (UINT_8) prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen; - INT_32 i4RSSI = prAdapter->rWlanInfo.arScanResult[i].rRssi; - - if(EQUAL_SSID(aucSsid, ucSsidLength, pParamSsid->aucSsid, pParamSsid->u4SsidLen) && - i4RSSI >= i4MaxRSSI) { - i4Idx = (INT_32)i; - i4MaxRSSI = i4RSSI; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - if (prAdapter->rWifiVar.fgSupportWZCDisassociation) { - if (pParamSsid->u4SsidLen == ELEM_MAX_LEN_SSID) { - fgIsValidSsid = FALSE; - - for (i = 0; i < ELEM_MAX_LEN_SSID; i++) { - if ( !((0 < pParamSsid->aucSsid[i]) && (pParamSsid->aucSsid[i] <= 0x1F)) ) { - fgIsValidSsid = TRUE; - break; - } - } - } - } - - /* Set Connection Request Issued Flag */ - if (fgIsValidSsid) { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - - if(pParamSsid->u4SsidLen) { - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - } - else { - // wildcard SSID - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_ANY; - } - } - else { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - } - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - COPY_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - (UINT_8)pParamSsid->u4SsidLen); - - prAisAbortMsg->fgDelayIndication = FALSE; - } - DBGLOG(SCN, INFO, ("SSID %s\n", prAdapter->rWifiVar.rConnSettings.aucSSID)); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidSetSsid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the currently associated SSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySsid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_SSID_T prAssociatedSsid; - - DEBUGFUNC("wlanoidQuerySsid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_SSID_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prAssociatedSsid = (P_PARAM_SSID_T)pvQueryBuffer; - - kalMemZero(prAssociatedSsid->aucSsid, sizeof(prAssociatedSsid->aucSsid)); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - prAssociatedSsid->u4SsidLen = prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen; - - if (prAssociatedSsid->u4SsidLen) { - kalMemCopy(prAssociatedSsid->aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAssociatedSsid->u4SsidLen); - } - } - else { - prAssociatedSsid->u4SsidLen = 0; - - DBGLOG(REQ, TRACE, ("Null SSID\n")); - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQuerySsid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 network type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eOPMode; - - /* - ** According to OID_802_11_INFRASTRUCTURE_MODE - ** If there is no prior OID_802_11_INFRASTRUCTURE_MODE, - ** NDIS_STATUS_ADAPTER_NOT_READY shall be returned. - */ -#if DBG - switch (*(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer) { - case NET_TYPE_IBSS: - DBGLOG(REQ, INFO, ("IBSS mode\n")); - break; - case NET_TYPE_INFRA: - DBGLOG(REQ, INFO, ("Infrastructure mode\n")); - break; - default: - DBGLOG(REQ, INFO, ("Automatic mode\n")); - } -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set mode to infrastructure or -* IBSS, or automatic switch between the two. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid -* length of the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - ENUM_PARAM_OP_MODE_T eOpMode; - - DEBUGFUNC("wlanoidSetInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - if (u4SetBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) - return WLAN_STATUS_BUFFER_TOO_SHORT; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set infrastructure mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eOpMode = *(P_ENUM_PARAM_OP_MODE_T)pvSetBuffer; - /* Verify the new infrastructure mode. */ - if (eOpMode >= NET_TYPE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid mode value %d\n", eOpMode)); - return WLAN_STATUS_INVALID_DATA; - } - - /* check if possible to switch to AdHoc mode */ - if(eOpMode == NET_TYPE_IBSS || eOpMode == NET_TYPE_DEDICATED_IBSS) { - if(cnmAisIbssIsPermitted(prAdapter) == FALSE) { - DBGLOG(REQ, TRACE, ("Mode value %d unallowed\n", eOpMode)); - return WLAN_STATUS_FAILURE; - } - } - - /* Save the new infrastructure mode setting. */ - prAdapter->rWifiVar.rConnSettings.eOPMode = eOpMode; - - /* Clean up the Tx key flag */ - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; -#if CFG_SUPPORT_WAPI - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - kalMemZero(&prAdapter->prGlueInfo->aucWapiAssocInfoIEs, 42); -#endif - -#if CFG_SUPPORT_802_11W - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled = FALSE; -#endif - -#if CFG_SUPPORT_WPS2 - kalMemZero(&prAdapter->prGlueInfo->aucWSCAssocInfoIE, 200); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; -#endif - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INFRASTRUCTURE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 authentication -* mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAuthMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAuthMode"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eAuthMode; - -#if DBG - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer) { - case AUTH_MODE_OPEN: - DBGLOG(REQ, INFO, ("Current auth mode: Open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(REQ, INFO, ("Current auth mode: Shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(REQ, INFO, ("Current auth mode: Auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(REQ, INFO, ("Current auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(REQ, INFO, ("Current auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryAuthMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 authentication mode -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAuthMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_32 i, u4AkmSuite; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("wlanoidSetAuthMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* RF Test */ - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer >= AUTH_MODE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid auth mode %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer) { - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - /* infrastructure mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_INFRA) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - case AUTH_MODE_WPA_NONE: - /* ad hoc mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_IBSS) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - default: - ; - } - - /* Save the new authentication mode. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer; - -#if DBG - switch (prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_OPEN: - DBGLOG(RSN, TRACE, ("New auth mode: open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(RSN, TRACE, ("New auth mode: shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(RSN, TRACE, ("New auth mode: auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(RSN, TRACE, ("New auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(RSN, TRACE, ("New auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(RSN, TRACE, ("New auth mode: unknown (%d)\n", - prAdapter->rWifiVar.rConnSettings.eAuthMode)); - } -#endif - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode >= AUTH_MODE_WPA) { - switch(prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_WPA: - u4AkmSuite = WPA_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA_PSK: - u4AkmSuite = WPA_AKM_SUITE_PSK; - break; - - case AUTH_MODE_WPA_NONE: - u4AkmSuite = WPA_AKM_SUITE_NONE; - break; - - case AUTH_MODE_WPA2: - u4AkmSuite = RSN_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA2_PSK: - u4AkmSuite = RSN_AKM_SUITE_PSK; - break; - - default: - u4AkmSuite = 0; - } - } - else { - u4AkmSuite = 0; - } - - /* Enable the specific AKM suite only. */ - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite) { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = FALSE; - } -#if CFG_SUPPORT_802_11W - if (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) { - if ((u4AkmSuite == RSN_AKM_SUITE_PSK) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_PSK_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_PSK_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - - } - if ((u4AkmSuite == RSN_AKM_SUITE_802_1X) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_802_1X_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_802_1X_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - } -#endif - } - - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetAuthMode */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 privacy filter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPrivacyFilter"); - - ASSERT(prAdapter); - - ASSERT(pvQueryBuffer); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer = prAdapter->rWlanInfo.ePrivacyFilter; - -#if DBG - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer) { - case PRIVACY_FILTER_ACCEPT_ALL: - DBGLOG(REQ, INFO, ("Current privacy mode: open mode\n")); - break; - - case PRIVACY_FILTER_8021xWEP: - DBGLOG(REQ, INFO, ("Current privacy mode: filtering mode\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPrivacyFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 privacy filter -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("wlanoidSetPrivacyFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer >= PRIVACY_FILTER_NUM) { - DBGLOG(REQ, TRACE, ("Invalid privacy filter %d\n", - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer) { - default: - break; - } - - /* Save the new authentication mode. */ - prAdapter->rWlanInfo.ePrivacyFilter = *(ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPrivacyFilter */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to reload the available default settings for -* the specified type field. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetReloadDefaults ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - UINT_32 u4Len; - UINT_8 ucCmdSeqNum; - - - DEBUGFUNC("wlanoidSetReloadDefaults"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = sizeof(PARAM_RELOAD_DEFAULTS); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Reload default! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - /* Verify the available reload options and reload the settings. */ - switch (*(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer) { - case ENUM_RELOAD_WEP_KEYS: - /* Reload available default WEP keys from the permanent - storage. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = AUTH_MODE_OPEN; - prAdapter->rWifiVar.rConnSettings.eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT;//ENUM_ENCRYPTION_DISABLED; - { - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_802_11_KEY prCmdKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = 0;//(UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, aucBCAddr, MAC_ADDR_LEN); - - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); - - prCmdKey->ucKeyType = 0; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; - } - - break; - - default: - DBGLOG(REQ, TRACE, ("Invalid reload option %d\n", - *(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer)); - rStatus = WLAN_STATUS_INVALID_DATA; - } - - /* OID_802_11_RELOAD_DEFAULTS requiest to reset to auto mode */ - eNetworkType = PARAM_NETWORK_TYPE_AUTOMODE; - wlanoidSetNetworkTypeInUse(prAdapter, &eNetworkType, sizeof(eNetworkType), &u4Len); - - return rStatus; -} /* wlanoidSetReloadDefaults */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a WEP key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -#ifdef LINUX -UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; -UINT_8 aucBCAddr[] = BC_MAC_ADDR; -#endif -WLAN_STATUS -wlanoidSetAddWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - #ifndef LINUX - UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - #endif - P_PARAM_WEP_T prNewWepKey; - P_PARAM_KEY_T prParamKey = (P_PARAM_KEY_T)keyBuffer; - UINT_32 u4KeyId, u4SetLen; - - DEBUGFUNC("wlanoidSetAddWep"); - - ASSERT(prAdapter); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial)) { - ASSERT(pu4SetInfoLen); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewWepKey = (P_PARAM_WEP_T)pvSetBuffer; - - /* Verify the total buffer for minimum length. */ - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial) + prNewWepKey->u4KeyLength) { - DBGLOG(REQ, WARN, ("Invalid total buffer length (%d) than minimum length (%d)\n", - (UINT_8)u4SetBufferLen, - (UINT_8)OFFSET_OF(PARAM_WEP_T, aucKeyMaterial))); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key structure length. */ - if (prNewWepKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewWepKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key material length for maximum key material length:16 */ - if (prNewWepKey->u4KeyLength > 16 /* LEGACY_KEY_MAX_LEN */) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d) greater than maximum key material length (16)\n", - (UINT_8)prNewWepKey->u4KeyLength)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = u4SetBufferLen; - - u4KeyId = prNewWepKey->u4KeyIndex & BITS(0,29) /* WEP_KEY_ID_FIELD */; - - /* Verify whether key index is valid or not, current version - driver support only 4 global WEP keys setting by this OID */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("Error, invalid WEP key ID: %d\n", (UINT_8)u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - prParamKey->u4KeyIndex = u4KeyId; - - /* Transmit key */ - if (prNewWepKey->u4KeyIndex & IS_TRANSMIT_KEY) { - prParamKey->u4KeyIndex |= IS_TRANSMIT_KEY; - } - - /* Per client key */ - if (prNewWepKey->u4KeyIndex & IS_UNICAST_KEY) { - prParamKey->u4KeyIndex |= IS_UNICAST_KEY; - } - - prParamKey->u4KeyLength = prNewWepKey->u4KeyLength; - - kalMemCopy(prParamKey->arBSSID, aucBCAddr, MAC_ADDR_LEN); - - kalMemCopy(prParamKey->aucKeyMaterial, - prNewWepKey->aucKeyMaterial, - prNewWepKey->u4KeyLength); - - prParamKey->u4Length = OFFSET_OF(PARAM_KEY_T, aucKeyMaterial) + prNewWepKey->u4KeyLength; - - wlanoidSetAddKey(prAdapter, - (PVOID)prParamKey, - prParamKey->u4Length, - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the WEP key -* at the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4KeyId, u4SetLen; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - DEBUGFUNC("wlanoidSetRemoveWep"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_KEY_INDEX); - - if (u4SetBufferLen < sizeof(PARAM_KEY_INDEX)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4KeyId = *(PUINT_32)pvSetBuffer; - - /* Dump PARAM_WEP content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_KEY_INDEX content\n")); - DBGLOG(REQ, INFO, ("Index : 0x%08lx\n", u4KeyId)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if (u4KeyId & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("Invalid WEP key index: 0x%08lx\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - u4KeyId &= BITS(0,7); - - /* Verify whether key index is valid or not. Current version - driver support only 4 global WEP keys. */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("invalid WEP key ID %lu\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - rRemoveKey.u4KeyIndex = *(PUINT_32)pvSetBuffer; - - kalMemCopy(rRemoveKey.arBSSID, aucBCAddr, MAC_ADDR_LEN); - - wlanoidSetRemoveKey(prAdapter, - (PVOID)&rRemoveKey, - sizeof(PARAM_REMOVE_KEY_T), - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer PARAM_KEY_T, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetAddKey"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Verify the key material length for key material buffer */ - if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check */ - if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - - if (!(prNewKey->u4KeyLength == WEP_40_LEN || prNewKey->u4KeyLength == WEP_104_LEN || - prNewKey->u4KeyLength == CCMP_KEY_LEN || prNewKey->u4KeyLength == TKIP_KEY_LEN)) - { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Dump PARAM_KEY content. */ - DBGLOG(REQ, TRACE, ("Set: Dump PARAM_KEY content\n")); - DBGLOG(REQ, TRACE, ("Length : 0x%08lx\n", prNewKey->u4Length)); - DBGLOG(REQ, TRACE, ("Key Index : 0x%08lx\n", prNewKey->u4KeyIndex)); - DBGLOG(REQ, TRACE, ("Key Length: 0x%08lx\n", prNewKey->u4KeyLength)); - DBGLOG(REQ, TRACE, ("BSSID:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->arBSSID, sizeof(PARAM_MAC_ADDRESS)); - DBGLOG(REQ, TRACE, ("Key RSC:\n")); - DBGLOG_MEM8(REQ, TRACE, &prNewKey->rKeyRSC, sizeof(PARAM_KEY_RSC)); - DBGLOG(REQ, TRACE, ("Key Material:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucKeyMaterial, prNewKey->u4KeyLength); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - /* Todo:: Store the legacy wep key for OID_802_11_RELOAD_DEFAULTS */ - } - - if (prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = TRUE; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, INFO, ("ucCmdSeqNum = %d\n", ucCmdSeqNum)); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - prCmdKey->ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - prCmdKey->ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - prCmdKey->ucIsAuthenticator = ((prNewKey->u4KeyIndex & IS_AUTHENTICATOR) == IS_AUTHENTICATOR) ? 1 : 0; - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->arBSSID, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - - /* Note: adjust the key length for WPA-None */ - prCmdKey->ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, prCmdKey->ucKeyLen); - - if (prNewKey->u4KeyLength == 5) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP40; - } - else if (prNewKey->u4KeyLength == 13) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP104; - } - else if (prNewKey->u4KeyLength == 16) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP128; - else { -#if CFG_SUPPORT_802_11W - if (prCmdKey->ucKeyId >= 4) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_BIP; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - prAisSpecBssInfo->fgBipKeyInstalled = TRUE; - } - else -#endif - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - } - } - else if (prNewKey->u4KeyLength == 32) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION2_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - prCmdKey->ucKeyLen = CCMP_KEY_LEN; - } - } - else { - if (rsnCheckPmkidCandicate(prAdapter)) { - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("Add key: Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the key at -* the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_REMOVE_KEY_T prRemovedKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetRemoveKey"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Dump PARAM_REMOVE_KEY content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_REMOVE_KEY content\n")); - DBGLOG(REQ, INFO, ("Length : 0x%08lx\n", prRemovedKey->u4Length)); - DBGLOG(REQ, INFO, ("Key Index : 0x%08lx\n", prRemovedKey->u4KeyIndex)); - DBGLOG(REQ, INFO, ("BSSID:\n")); - DBGLOG_MEM8(REQ, INFO, prRemovedKey->arBSSID, MAC_ADDR_LEN); - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Clean up the Tx key flag */ - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - } - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - -#if CFG_SUPPORT_802_11W - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM + 2); -#else - //ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); -#endif - - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prCmdKey->ucKeyType = 1; - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current encryption status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - BOOLEAN fgTransmitKeyAvailable = TRUE; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus = 0; - - DEBUGFUNC("wlanoidQueryEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - fgTransmitKeyAvailable = prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist; - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION3_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION3_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION2_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - break; - } - else { - eEncStatus = ENUM_ENCRYPTION2_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION_DISABLED: - eEncStatus = ENUM_ENCRYPTION_DISABLED; - break; - - default: - DBGLOG(REQ, ERROR, ("Unknown Encryption Status Setting:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } - -#if DBG - DBGLOG(REQ, INFO, - ("Encryption status: %d Return:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus, - eEncStatus)); -#endif - - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvQueryBuffer = eEncStatus; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the encryption status to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_SUPPORTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_ENCRYPTION_STATUS_T eEewEncrypt; - - DEBUGFUNC("wlanoidSetEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set encryption status! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eEewEncrypt = *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - DBGLOG(REQ, TRACE, ("ENCRYPTION_STATUS %d\n", eEewEncrypt)); - - switch (eEewEncrypt) { - case ENUM_ENCRYPTION_DISABLED: /* Disable WEP, TKIP, AES */ - DBGLOG(RSN, TRACE, ("Disable Encryption\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION1_ENABLED: /* Enable WEP. Disable TKIP, AES */ - DBGLOG(RSN, TRACE, ("Enable Encryption1\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION2_ENABLED: /* Enable WEP, TKIP. Disable AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP); - DBGLOG(RSN, TRACE, ("Enable Encryption2\n")); - break; - - case ENUM_ENCRYPTION3_ENABLED: /* Enable WEP, TKIP, AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP | - CIPHER_FLAG_CCMP); - DBGLOG(RSN, TRACE, ("Enable Encryption3\n")); - break; - - default: - DBGLOG(RSN, WARN, ("Unacceptible encryption status: %d\n", - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer)); - - rStatus = WLAN_STATUS_NOT_SUPPORTED; - } - - if (rStatus == WLAN_STATUS_SUCCESS) { - /* Save the new encryption status. */ - prAdapter->rWifiVar.rConnSettings.eEncStatus = - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - } - - return rStatus; -} /* wlanoidSetEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to test the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_802_11_TEST_T prTest; - PVOID pvTestData; - PVOID pvStatusBuffer; - UINT_32 u4StatusBufferSize; - - DEBUGFUNC("wlanoidSetTest"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - *pu4SetInfoLen = u4SetBufferLen; - - prTest = (P_PARAM_802_11_TEST_T)pvSetBuffer; - - DBGLOG(REQ, TRACE, ("Test - Type %ld\n", prTest->u4Type)); - - switch (prTest->u4Type) { - case 1: /* Type 1: generate an authentication event */ - pvTestData = (PVOID)&prTest->u.AuthenticationEvent; - pvStatusBuffer = (PVOID)prAdapter->aucIndicationEventBuffer; - u4StatusBufferSize = prTest->u4Length - 8; - break; - - case 2: /* Type 2: generate an RSSI status indication */ - pvTestData = (PVOID)&prTest->u.RssiTrigger; - pvStatusBuffer = (PVOID)&prAdapter->rWlanInfo.rCurrBssId.rRssi; - u4StatusBufferSize = sizeof(PARAM_RSSI); - break; - - default: - return WLAN_STATUS_INVALID_DATA; - } - - ASSERT(u4StatusBufferSize <= 180); - if (u4StatusBufferSize > 180) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Get the contents of the StatusBuffer from the test structure. */ - kalMemCopy(pvStatusBuffer, pvTestData, u4StatusBufferSize); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - pvStatusBuffer, - u4StatusBufferSize); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the driver's WPA2 status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCapability ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CAPABILITY_T prCap; - P_PARAM_AUTH_ENCRYPTION_T prAuthenticationEncryptionSupported; - - DEBUGFUNC("wlanoidQueryCapability"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = 4 * sizeof(UINT_32) + 14 * sizeof(PARAM_AUTH_ENCRYPTION_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prCap = (P_PARAM_CAPABILITY_T)pvQueryBuffer; - - prCap->u4Length = *pu4QueryInfoLen; - prCap->u4Version = 2; /* WPA2 */ - prCap->u4NoOfPMKIDs = CFG_MAX_PMKID_CACHE; - prCap->u4NoOfAuthEncryptPairsSupported = 14; - - prAuthenticationEncryptionSupported = - &prCap->arAuthenticationEncryptionSupported[0]; - - // fill 14 entries of supported settings - prAuthenticationEncryptionSupported[0].eAuthModeSupported = - AUTH_MODE_OPEN; - - prAuthenticationEncryptionSupported[0].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[1].eAuthModeSupported = - AUTH_MODE_OPEN; - prAuthenticationEncryptionSupported[1].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[2].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[2].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[3].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[3].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[4].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[4].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[5].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[5].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[6].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[6].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[7].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[7].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[8].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[8].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[9].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[9].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[10].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[10].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[11].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[11].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[12].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[12].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[13].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[13].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryCapability */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the PMKID in the PMK cache. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPmkid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 i; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidQueryPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - *pu4QueryInfoLen = OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo) + - prAisSpecBssInfo->u4PmkidCacheCount * sizeof(PARAM_BSSID_INFO_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prPmkid = (P_PARAM_PMKID_T)pvQueryBuffer; - - prPmkid->u4Length = *pu4QueryInfoLen; - prPmkid->u4BSSIDInfoCount = prAisSpecBssInfo->u4PmkidCacheCount; - - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - kalMemCopy(prPmkid->arBSSIDInfo[i].arBSSID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - kalMemCopy(prPmkid->arBSSIDInfo[i].arPMKID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - } - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the PMKID to the PMK cache in the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPmkid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, j; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidSetPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = u4SetBufferLen; - - /* It's possibble BSSIDInfoCount is zero, because OS wishes to clean PMKID */ - if (u4SetBufferLen < OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - prPmkid = (P_PARAM_PMKID_T)pvSetBuffer; - - if (u4SetBufferLen < - ((prPmkid->u4BSSIDInfoCount * sizeof(PARAM_BSSID_INFO_T)) + - OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo))) { - return WLAN_STATUS_INVALID_DATA; - } - - if (prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE) { - return WLAN_STATUS_INVALID_DATA; - } - - DBGLOG(REQ, INFO, ("Count %lu\n", prPmkid->u4BSSIDInfoCount)); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* This OID replace everything in the PMKID cache. */ - if (prPmkid->u4BSSIDInfoCount == 0) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - if ((prAisSpecBssInfo->u4PmkidCacheCount + prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE)) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - - /* - The driver can only clear its PMKID cache whenever it make a media disconnect - indication. Otherwise, it must change the PMKID cache only when set through this OID. - */ -#if CFG_RSN_MIGRATION - for (i = 0; i < prPmkid->u4BSSIDInfoCount; i++) { - /* Search for desired BSSID. If desired BSSID is found, - then set the PMKID */ - if (!rsnSearchPmkidEntry(prAdapter, - (PUINT_8)prPmkid->arBSSIDInfo[i].arBSSID, - &j)) { - /* No entry found for the specified BSSID, so add one entry */ - if (prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE - 1) { - j = prAisSpecBssInfo->u4PmkidCacheCount; - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prPmkid->arBSSIDInfo[i].arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - prAisSpecBssInfo->u4PmkidCacheCount++; - } - else { - j = CFG_MAX_PMKID_CACHE; - } - } - - if (j < CFG_MAX_PMKID_CACHE) { - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID, - prPmkid->arBSSIDInfo[i].arPMKID, - sizeof(PARAM_PMKID_VALUE)); - DBGLOG(RSN, TRACE, ("Add BSSID "MACSTR" idx=%d PMKID value "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID),j, MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID))); - prAisSpecBssInfo->arPmkidCache[j].fgPmkidExist = TRUE; - } - } -#endif - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the set of supported data rates that -* the radio is capable of running -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query -* \param[in] u4QueryBufferLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number -* of bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySupportedRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PARAM_RATES eRate = { - // BSSBasicRateSet for 802.11n Non-HT rates - 0x8C, // 6M - 0x92, // 9M - 0x98, // 12M - 0xA4, // 18M - 0xB0, // 24M - 0xC8, // 36M - 0xE0, // 48M - 0xEC // 54M - }; - - DEBUGFUNC("wlanoidQuerySupportedRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&eRate, - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQuerySupportedRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i; - DEBUGFUNC("wlanoidSetDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(PARAM_RATES); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy((PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - pvSetBuffer, - sizeof(PARAM_RATES)); - - prAdapter->rWlanInfo.eLinkAttr.ucDesiredRateLen = PARAM_MAX_LEN_RATES; - for (i = 0 ; i < PARAM_MAX_LEN_RATES ; i++) { - prAdapter->rWlanInfo.eLinkAttr.u2DesiredRate[i] = - (UINT_16) (prAdapter->rWlanInfo.eDesiredRates[i]); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum frame size in bytes, -* not including the header. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxFrameSize"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ - ETHERNET_HEADER_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxFrameSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum total packet length -* in bytes. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxTotalSize"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxTotalSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the vendor ID of the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryVendorId ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PUINT_8 cp; -#endif - DEBUGFUNC("wlanoidQueryVendorId"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, prAdapter->aucMacAddress, 3); - *((PUINT_8)pvQueryBuffer + 3) = 1; - *pu4QueryInfoLen = sizeof(UINT_32); - -#if DBG - cp = (PUINT_8)pvQueryBuffer; - DBGLOG(REQ, LOUD, ("Vendor ID=%02x-%02x-%02x-%02x\n", cp[0], cp[1], cp[2], cp[3])); -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryVendorId */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssi ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (prAdapter->fgIsLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* end of wlanoidQueryRssi() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI trigger value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssiTrigger ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_NONE) - return WLAN_STATUS_ADAPTER_NOT_READY; - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(PARAM_RSSI *) pvQueryBuffer = prAdapter->rWlanInfo.rRssiTriggerValue; - DBGLOG(REQ, INFO, ("RSSI trigger: %ld dBm\n", *(PARAM_RSSI *) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a trigger value of the RSSI event. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRssiTrigger ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RSSI rRssiTriggerValue; - DEBUGFUNC("wlanoidSetRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_RSSI); - rRssiTriggerValue = *(PARAM_RSSI *) pvSetBuffer; - - if(rRssiTriggerValue > PARAM_WHQL_RSSI_MAX_DBM - || rRssiTriggerValue < PARAM_WHQL_RSSI_MIN_DBM) - return - - /* Save the RSSI trigger value to the Adapter structure */ - prAdapter->rWlanInfo.rRssiTriggerValue = rRssiTriggerValue; - - /* If the RSSI trigger value is equal to the current RSSI value, the - * indication triggers immediately. We need to indicate the protocol - * that an RSSI status indication event triggers. */ - if (rRssiTriggerValue == (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &prAdapter->rWlanInfo.rRssiTriggerValue, sizeof(PARAM_RSSI)); - } - else if(rRssiTriggerValue < (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_GREATER; - else if(rRssiTriggerValue > (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_LESS; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a suggested value for the number of -* bytes of received packet data that will be indicated to the protocol -* driver. We just accept the set and ignore this value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetCurrentLookahead"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetCurrentLookahead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* receives but does not indicate to the protocols due to errors. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* cannot receive due to lack of NIC receive buffer space. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvNoBuffer"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) 0; //@FIXME - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) 0; //@FIXME - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvNoBuffer, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvNoBuffer */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* received and it is CRC error. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvCrcError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvCrcError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvCrcError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the current 802.11 statistics. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryStatistics"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(PARAM_802_11_STATISTICS_STRUCT_T)) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) pvQueryBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prAdapter->rStatStruct.rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prAdapter->rStatStruct.rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prAdapter->rStatStruct.rFailedCount; - prStatistics->rRetryCount - = prAdapter->rStatStruct.rRetryCount; - prStatistics->rMultipleRetryCount - = prAdapter->rStatStruct.rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prAdapter->rStatStruct.rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prAdapter->rStatStruct.rRTSFailureCount; - prStatistics->rACKFailureCount - = prAdapter->rStatStruct.rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prAdapter->rStatStruct.rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prAdapter->rStatStruct.rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prAdapter->rStatStruct.rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prAdapter->rStatStruct.rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryStatistics, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryStatistics */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query current media streaming status. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(P_ENUM_MEDIA_STREAM_MODE)pvQueryBuffer = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to enter media streaming mode or exit media streaming mode -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ENUM_MEDIA_STREAM_MODE eStreamMode; - - DEBUGFUNC("wlanoidSetMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_MEDIA_STREAM_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - eStreamMode = *(P_ENUM_MEDIA_STREAM_MODE)pvSetBuffer; - - if(eStreamMode == ENUM_MEDIA_STREAM_OFF) - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - else - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 1; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetMediaStreamMode, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); -} /* wlanoidSetMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the permanent MAC address of the NIC. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPermanentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - COPY_MAC_ADDR(pvQueryBuffer, prAdapter->rWifiVar.aucPermanentAddress); - *pu4QueryInfoLen = MAC_ADDR_LEN; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPermanentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the MAC address the NIC is currently using. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidQueryCurrentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryAddress, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryCurrentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query NIC link speed. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryLinkSpeed"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = 10000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else if (prAdapter->fgIsLinkRateValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - *(PUINT_32)pvQueryBuffer = prAdapter->rLinkQuality.u2LinkSpeed * 5000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkSpeed, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* end of wlanoidQueryLinkSpeed() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query MCR value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - CMD_ACCESS_REG rCmdAccessReg; - - DEBUGFUNC("wlanoidQueryMcrRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvQueryBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrRdInfo->u4McrOffset >>16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_READ, - (UINT_16) (prMcrRdInfo->u4McrOffset & BITS(0,15)), - &prMcrRdInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - /* Check if access F/W Domain MCR (due to WiFiSYS is placed from 0x6000-0000*/ - if (prMcrRdInfo->u4McrOffset & 0xFFFF0000){ - // fill command - rCmdAccessReg.u4Address = prMcrRdInfo->u4McrOffset; - rCmdAccessReg.u4Data = 0; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcrRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvQueryBuffer, - u4QueryBufferLen - ); - } - else { - HAL_MCR_RD(prAdapter, - prMcrRdInfo->u4McrOffset & BITS(2,31), //address is in DWORD unit - &prMcrRdInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Read: Offset = %#08lx, Data = %#08lx\n", - prMcrRdInfo->u4McrOffset, prMcrRdInfo->u4McrData)); - return WLAN_STATUS_SUCCESS; - } -} /* end of wlanoidQueryMcrRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write MCR and enable specific function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrWrInfo; - CMD_ACCESS_REG rCmdAccessReg; - -#if CFG_STRESS_TEST_SUPPORT - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - P_STA_RECORD_T prStaRec = prBssInfo->prStaRecOfAP; - UINT_32 u4McrOffset, u4McrData; -#endif - - DEBUGFUNC("wlanoidSetMcrWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMcrWrInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvSetBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - - // -- Puff Stress Test Begin -#if CFG_STRESS_TEST_SUPPORT - - // 0xFFFFFFFE for Control Rate - if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFE){ - if(prMcrWrInfo->u4McrData < FIXED_RATE_NUM && prMcrWrInfo->u4McrData > 0){ - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prMcrWrInfo->u4McrData); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - DEBUGFUNC("[Stress Test]Complete Rate is Changed...\n"); - DBGLOG(INIT, TRACE, ("[Stress Test] Rate is Changed to index %d...\n", prAdapter->rWifiVar.eRateSetting)); - } - - // 0xFFFFFFFD for Switch Channel - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFD){ - if(prMcrWrInfo->u4McrData <= 11 && prMcrWrInfo->u4McrData >= 1){ - prBssInfo->ucPrimaryChannel = prMcrWrInfo->u4McrData; - } - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - DBGLOG(INIT, TRACE, ("[Stress Test] Channel is switched to %d ...\n", prBssInfo->ucPrimaryChannel)); - - return WLAN_STATUS_SUCCESS; - } - - // 0xFFFFFFFFC for Control RF Band and SCO - else if(prMcrWrInfo->u4McrOffset == 0xFFFFFFFC){ - // Band - if(prMcrWrInfo->u4McrData & 0x80000000){ - //prBssInfo->eBand = BAND_5G; - //prBssInfo->ucPrimaryChannel = 52; // Bond to Channel 52 - } else { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 8; // Bond to Channel 6 - } - - // Bandwidth - if(prMcrWrInfo->u4McrData & 0x00010000){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - - if(prMcrWrInfo->u4McrData == 0x00010002){ - prBssInfo->eBssSCO = CHNL_EXT_SCB; // U20 - prBssInfo->ucPrimaryChannel += 2; - } else if (prMcrWrInfo->u4McrData == 0x00010001){ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // L20 - prBssInfo->ucPrimaryChannel -= 2; - } else { - prBssInfo->eBssSCO = CHNL_EXT_SCA; // 40 - } - } - - if(prMcrWrInfo->u4McrData & 0x00000000){ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - } - - // 0xFFFFFFFB for HT Capability - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFB){ - /* Enable HT Capability */ - if(prMcrWrInfo->u4McrData & 0x00000001){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - DEBUGFUNC("[Stress Test]Enable HT capability...\n"); - }else{ - prStaRec->u2HtCapInfo &= (~HT_CAP_INFO_HT_GF); - DEBUGFUNC("[Stress Test]Disable HT capability...\n"); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - - // 0xFFFFFFFA for Enable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFA){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF9 for Disable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF9){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF8 for Enable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF8){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF7 for Disable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF7){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - else -#endif - // -- Puff Stress Test End - - - /* Check if access F/W Domain MCR */ - if (prMcrWrInfo->u4McrOffset & 0xFFFF0000){ - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrWrInfo->u4McrOffset >> 16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) (prMcrWrInfo->u4McrOffset & BITS(0,15)), - &prMcrWrInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } -#endif - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - -#endif - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - HAL_MCR_WR(prAdapter, - (prMcrWrInfo->u4McrOffset & BITS(2,31)), //address is in DWORD unit - prMcrWrInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Write: Offset = %#08lx, Data = %#08lx\n", - prMcrWrInfo->u4McrOffset, prMcrWrInfo->u4McrData)); - - return WLAN_STATUS_SUCCESS; - } -} /* wlanoidSetMcrWrite */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query SW CTRL -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - - DEBUGFUNC("wlanoidQuerySwCtrlRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvQueryBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = 0; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_READ/* Read */, - (UINT_16) u2SubId , - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0xFFFF: - { - u4Data = 0x5AA56620; - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = 0; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - FALSE, - TRUE, - TRUE, - nicCmdEventQuerySwCtrlRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvQueryBuffer, - u4QueryBufferLen - ); - } - } /* switch(u2Id)*/ - - prSwCtrlInfo->u4Data = u4Data; - - return rWlanStatus; - -} - /* end of wlanoidQuerySwCtrlRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write SW CTRL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - DEBUGFUNC("wlanoidSetSwCtrlWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvSetBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) u2SubId, - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0x1000: - if (u2SubId == 0x8000) { - // CTIA power save mode setting (code: 0x10008000) - prAdapter->u4CtiaPowerMode = u4Data; - prAdapter->fgEnCtiaPowerMode = TRUE; - - // - { - PARAM_POWER_MODE ePowerMode; - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else { - ePowerMode = Param_PowerModeFast_PSP; - } - - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - } - break; - case 0x1001: - if(u2SubId == 0x0) { - prAdapter->fgEnOnlineScan = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x1) { - prAdapter->fgDisBcnLostDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x2) { - prAdapter->rWifiVar.fgSupportUAPSD = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x3) { - prAdapter->u4UapsdAcBmp = u4Data & BITS(0,15); - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpTriggerAC = (UINT_8)prAdapter->u4UapsdAcBmp; - } - else if(u2SubId == 0x4) { - prAdapter->fgDisStaAgingTimeoutDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x5) { - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = (UINT_8)u4Data; - } - else if(u2SubId == 0x0100) { - prAdapter->rWifiVar.u8SupportRxGf = (UINT_8)u4Data; - } - else if(u2SubId == 0x0101) { - prAdapter->rWifiVar.u8SupportRxSgi20 = (UINT_8)u4Data; - prAdapter->rWifiVar.u8SupportRxSgi40 = (UINT_8)u4Data; - } - - - break; - -#if CFG_SUPPORT_SWCR - case 0x1002: - if(u2SubId == 0x0) { - if (u4Data) { - u4Data = BIT(HIF_RX_PKT_TYPE_MANAGEMENT); - } - swCrFrameCheckEnable(prAdapter, u4Data); - } - else if(u2SubId == 0x1) { - BOOLEAN fgIsEnable; - UINT_8 ucType; - UINT_32 u4Timeout; - - fgIsEnable = (BOOLEAN)(u4Data & 0xff); - ucType = 0;//((u4Data>>4) & 0xf); - u4Timeout = ((u4Data>>8) & 0xff); - swCrDebugCheckEnable(prAdapter, fgIsEnable, ucType, u4Timeout); - } - break; -#endif - -#if CFG_SUPPORT_802_11W - case 0x2000: - DBGLOG(RSN, INFO, ("802.11w test 0x%x\n", u2SubId)); - if (u2SubId == 0x0) { - rsnStartSaQuery(prAdapter); - } - if (u2SubId == 0x1) { - rsnStopSaQuery(prAdapter); - } - if (u2SubId == 0x2) { - rsnSaQueryRequest(prAdapter, NULL); - } - if (u2SubId == 0x3) { - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - authSendDeauthFrame(prAdapter, prBssInfo->prStaRecOfAP , NULL, 7, NULL); - } - /* wext_set_mode */ - /* - if (u2SubId == 0x3) { - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_DISABLED; - } - if (u2SubId == 0x4) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_OPTIONAL; - } - if (u2SubId == 0x5) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_REQUIRED; - } - */ - break; -#endif - case 0xFFFF: - { - CMD_ACCESS_REG rCmdAccessReg; -#if 1 //CFG_MT6573_SMT_TEST - if (u2SubId == 0x0123) { - - DBGLOG(HAL, INFO, ("set smt fixed rate: %d \n", u4Data)); - - if((ENUM_REGISTRY_FIXED_RATE_T)(u4Data) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(u4Data); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* abort to re-connect */ -#if 1 - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); -#else - aisBssBeaconTimeout(prAdapter); -#endif - - return WLAN_STATUS_SUCCESS; - - } - else if (u2SubId == 0x1234) { - rWlanStatus = nicEnterCtiaMode(prAdapter, TRUE, TRUE); - } - else if (u2SubId == 0x1235) { - rWlanStatus = nicEnterCtiaMode(prAdapter, FALSE, TRUE); - } -#endif - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - } - } /* switch(u2Id) */ - - return rWlanStatus; -} - /* wlanoidSetSwCtrlWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query EEPROM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidQueryEepromRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvQueryBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryEepromRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryEepromRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write EEPROM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidSetEepromWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - rCmdAccessEeprom.u2Data = prEepromRwInfo->u2EepromData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetEepromWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully transmitted -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully received -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* fails to transmit. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitError */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after exactly one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOneCollision"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOneCollision, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOneCollision */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after more than one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMoreCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMoreCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMoreCollisions */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames -* not transmitted due to excessive collisions. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMaxCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMaxCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMaxCollisions */ - - -#define MTK_CUSTOM_OID_INTERFACE_VERSION 0x00006620 // for WPDWifi DLL -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current the OID interface version, -* which is the interface between the application and driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen) -{ - DEBUGFUNC("wlanoidQueryOidInterfaceVersion"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *(PUINT_32) pvQueryBuffer = MTK_CUSTOM_OID_INTERFACE_VERSION ; - *pu4QueryInfoLen = sizeof(UINT_32); - - DBGLOG(REQ, WARN, ("Custom OID interface version: %#08lX\n", - *(PUINT_32) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryOidInterfaceVersion */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#ifndef LINUX - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcastAddr, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); -#else - return WLAN_STATUS_SUCCESS; -#endif -} /* end of wlanoidQueryMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ - WLAN_STATUS - wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) - { - UINT_8 ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Caller should provide this information */ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = ucNetTypeIndex; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); -} /* end of wlanoidSetMulticastList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4NewPacketFilter; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidSetCurrentPacketFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - ASSERT(pvSetBuffer); - - /* Set the new packet filter. */ - u4NewPacketFilter = *(PUINT_32) pvSetBuffer; - - DBGLOG(REQ, INFO, ("New packet filter: %#08lx\n", u4NewPacketFilter)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set current packet filter! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - do { - /* Verify the bits of the new packet filter. If any bits are set that - we don't support, leave. */ - if (u4NewPacketFilter & ~(PARAM_PACKET_FILTER_SUPPORTED)) { - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - } - -#if DBG - /* Need to enable or disable promiscuous support depending on the new - filter. */ - if (u4NewPacketFilter & PARAM_PACKET_FILTER_PROMISCUOUS) { - DBGLOG(REQ, INFO, ("Enable promiscuous mode\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable promiscuous mode\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_ALL_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable all-multicast mode\n")); - } - else if (u4NewPacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable multicast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable multicast\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_BROADCAST) { - DBGLOG(REQ, INFO, ("Enable Broadcast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable Broadcast\n")); - } -#endif - } while (FALSE); - - if(rStatus == WLAN_STATUS_SUCCESS) { - // Store the packet filter - - prAdapter->u4OsPacketFilter &= PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - return rStatus; - } -} /* wlanoidSetCurrentPacketFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current packet filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryCurrentPacketFilter"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen >= sizeof(UINT_32)) { - ASSERT(pvQueryBuffer); - *(PUINT_32) pvQueryBuffer = prAdapter->u4OsPacketFilter; - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryCurrentPacketFilter */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query ACPI device power state. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PPARAM_DEVICE_POWER_STATE prPowerState; -#endif - - DEBUGFUNC("wlanoidQueryAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - -#if DBG - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvQueryBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Query Power State: D0\n")); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Query Power State: D1\n")); - break; - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Query Power State: D2\n")); - break; - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Query Power State: D3\n")); - break; - default: - break; - } -#endif - - /* Since we will disconnect the newwork, therefore we do not - need to check queue empty */ - *(PPARAM_DEVICE_POWER_STATE) pvQueryBuffer = ParamDeviceStateD3; - //WARNLOG(("Ready to transition to D3\n")); - return WLAN_STATUS_SUCCESS; - -} /* pwrmgtQueryPower */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set ACPI device power state. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PPARAM_DEVICE_POWER_STATE prPowerState; - BOOLEAN fgRetValue = TRUE; - - DEBUGFUNC("wlanoidSetAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - - ASSERT(pvSetBuffer); - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvSetBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Set Power State: D0\n")); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD0); - fgRetValue = nicpmSetAcpiPowerD0(prAdapter); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Set Power State: D1\n")); - /* no break here */ - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Set Power State: D2\n")); - /* no break here */ - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Set Power State: D3\n")); - fgRetValue = nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - break; - default: - break; - } - - if(fgRetValue == TRUE) - return WLAN_STATUS_SUCCESS; - else - return WLAN_STATUS_FAILURE; -} /* end of wlanoidSetAcpiDevicePowerState() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current fragmentation threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFragThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidQueryFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new fragmentation threshold to the -* driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidSetFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RTS threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRtsThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - - if (u4QueryBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - *pu4QueryInfoLen = sizeof(PARAM_RTS_THRESHOLD); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *((PARAM_RTS_THRESHOLD *)pvQueryBuffer) = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryRtsThreshold */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new RTS threshold to the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RTS_THRESHOLD *prRtsThreshold; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_RTS_THRESHOLD); - if (u4SetBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRtsThreshold = (PARAM_RTS_THRESHOLD *)pvSetBuffer; - *prRtsThreshold = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetRtsThreshold */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to turn radio off. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - - DEBUGFUNC("wlanoidSetDisassociate"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set disassociate! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* prepare message to AIS */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - /* indicate for disconnection */ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetDisassociate */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQuery802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - -// *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile); - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_AIS_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - - // hack for CTIA power mode setting function - if (prAdapter->fgEnCtiaPowerMode) { - // set to non-zero value (to prevent MMI query 0, before it intends to set 0, which will skip its following state machine) - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)2; - } - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSet802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - //WARNLOG(("Invalid power mode %d\n", - //*(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - - switch (ePowerMode) { - case Param_PowerModeCAM: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to CAM (%d)\n", ePowerMode)); - break; - case Param_PowerModeMAX_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to MAX PS (%d)\n", ePowerMode)); - break; - case Param_PowerModeFast_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to FAST PS (%d)\n", ePowerMode)); - break; - default: - DBGLOG(INIT, INFO, ("invalid Wi-Fi PS mode setting (%d)\n", ePowerMode)); - break; - } - - return status; - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current status of AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query RF frequency. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].ucPrimaryChannel); - } - else { - *(PUINT_32)pvQueryBuffer = 0; - } - } - else { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum); - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set RF frequency by User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4FreqInKHz; - - DEBUGFUNC("wlanoidSetFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4FreqInKHz = (PUINT_32)pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum - = (UINT_8)nicFreq2ChannelNum(*pu4FreqInKHz); - prAdapter->rWifiVar.rConnSettings.eAdHocBand - = *pu4FreqInKHz < 5000000 ? BAND_2G4 : BAND_5G; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set 802.11 channel of the radio frequency. -* This is a proprietary function call to Lunux currently. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the Beacon Interval from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryBeaconInterval"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - else { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the Beacon Interval to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4BeaconInterval; - - DEBUGFUNC("wlanoidSetBeaconInterval"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4BeaconInterval = (PUINT_32)pvSetBuffer; - - if ((*pu4BeaconInterval < DOT11_BEACON_PERIOD_MIN) || - (*pu4BeaconInterval > DOT11_BEACON_PERIOD_MAX)) { - DBGLOG(REQ, TRACE, ("Invalid Beacon Interval = %ld\n", *pu4BeaconInterval)); - return WLAN_STATUS_INVALID_DATA; - } - - prAdapter->rWlanInfo.u2BeaconPeriod = (UINT_16)*pu4BeaconInterval; - - DBGLOG(REQ, INFO, ("Set beacon interval: %d\n", - prAdapter->rWlanInfo.u2BeaconPeriod)); - - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the ATIM window from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2AtimWindow; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryAtimWindow() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the ATIM window to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4AtimWindow; - - DEBUGFUNC("wlanoidSetAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4AtimWindow = (PUINT_32)pvSetBuffer; - - prAdapter->rWlanInfo.u2AtimWindow = (UINT_16)*pu4AtimWindow; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAtimWindow() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the MAC address which is currently used by the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetCurrentAddr() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the checksum offload function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, u4CSUMFlags; - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidSetCSUMOffload"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4CSUMFlags = *(PUINT_32)pvSetBuffer; - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - for(i = 0 ; i < 6 ; i++) { // set to broadcast address for not-specified - rCmdBasicConfig.rMyMacAddr[i] = 0xff; - } - - rCmdBasicConfig.ucNative80211 = 0; //@FIXME: for Vista - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(1); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(0); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(1); - - if(u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(0); - - prAdapter->u4CSUMFlags = u4CSUMFlags; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetNetworkAddress"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - DBGLOG(REQ, INFO, ("u4IpAddressCount (%d)\n", u4IpAddressCount)); - - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - DBGLOG(REQ, INFO, ("prNetAddrIp->in_addr:%d:%d:%d:%d\n", pucBuf[0], pucBuf[1],pucBuf[2],pucBuf[3])); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set, -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == FALSE) { - // switch to RF Test mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 1; // RF test mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventEnterRfTest, - nicOidCmdEnterRFTestTimeout, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in test mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into normal operation mode from RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == TRUE) { - // switch to normal mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 0; // normal mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventLeaveRfTest, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in normal mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief query for RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestQueryAutoTest"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4QueryBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. QueryBufferLen: %ld.\n", - u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvQueryBuffer; - rStatus = rftestQueryATInfo(prAdapter, - prRfATInfo->u4FuncIndex, - prRfATInfo->u4FuncData, - pvQueryBuffer, - u4QueryBufferLen); - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestSetAutoTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4SetBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. SetBufferLen: %ld.\n", - u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvSetBuffer; - rStatus = rftestSetATInfo(prAdapter, prRfATInfo->u4FuncIndex, prRfATInfo->u4FuncData); - - return rStatus; -} - -/* RF test OID set handler */ -WLAN_STATUS -rftestSetATInfo ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 1; // Set ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; -} - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - P_EVENT_TEST_STATUS prTestStatus; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - if(u4FuncIndex == RF_AT_FUNCID_FW_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = - (prAdapter->rVerInfo.u2FwProductID << 16) | (prAdapter->rVerInfo.u2FwOwnVersion); - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else if(u4FuncIndex == RF_AT_FUNCID_DRV_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = CFG_DRV_OWN_VERSION; - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else { - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryRfTestATInfo; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = pvQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4QueryBufferLen; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 2; // Get ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; - } -} - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ) -{ - CMD_TEST_CTRL_T rCmdTestCtrl; - - ASSERT(prAdapter); - - rCmdTestCtrl.ucAction = 5; // Set Channel Frequency - rCmdTestCtrl.u.u4ChannelFreq = u4FreqInKHz; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - DEBUGFUNC("wlanSendSetQueryCmd"); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI ui to set wapi mode, which is needed to info the the driver -* to operation at WAPI mode while driver initialize. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetWapiMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - /* Todo:: For support WAPI and Wi-Fi at same driver, use the set wapi assoc ie at the check point */ - /* The Adapter Connection setting fgUseWapi will cleat whil oid set mode (infra), */ - /* And set fgUseWapi True while set wapi assoc ie */ - /* policay selection, add key all depend on this flag, */ - /* The fgUseWapi may remove later */ - if (*(PUINT_32)pvSetBuffer) { - prAdapter->fgUseWapi = TRUE; - } - else { - prAdapter->fgUseWapi = FALSE; - } - -#if 0 - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + 4)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + 4; - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_WAPI_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - cp = (PUINT_8)(prWifiCmd->aucBuffer); - - kalMemCopy(cp, (PUINT_8)pvSetBuffer, 4); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -#else - return WLAN_STATUS_SUCCESS; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI to set the assoc info, which is needed to add to -* Association request frame while join WAPI AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_WAPI_INFO_ELEM_T prWapiInfo; - PUINT_8 cp; - UINT_16 u2AuthSuiteCount = 0; - UINT_16 u2PairSuiteCount = 0; - UINT_32 u4AuthKeyMgtSuite = 0; - UINT_32 u4PairSuite = 0; - UINT_32 u4GroupSuite = 0; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWapiAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if (u4SetBufferLen < 20 /* From EID to Group cipher */) { - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = TRUE; - - //if (prWapiInfo->ucElemId != ELEM_ID_WAPI) - // DBGLOG(SEC, TRACE, ("Not WAPI IE ?!\n")); - - //if (prWapiInfo->ucLength < 18) - // return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - prWapiInfo = (P_WAPI_INFO_ELEM_T)pvSetBuffer; - - if (prWapiInfo->ucElemId != ELEM_ID_WAPI) { - DBGLOG(SEC, TRACE, ("Not WAPI IE ?! u4SetBufferLen = %d\n", u4SetBufferLen)); - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prWapiInfo->ucLength < 18) - return WLAN_STATUS_INVALID_LENGTH; - - /* Skip Version check */ - cp = (PUINT_8)&prWapiInfo->u2AuthKeyMgtSuiteCount; - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - - if (u2AuthSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4AuthKeyMgtSuite); - - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info auth mgt suite [%d]: %02x-%02x-%02x-%02x\n", - u2AuthSuiteCount, - (UCHAR) (u4AuthKeyMgtSuite & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 8) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 16) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 24) & 0x000000FF))); - - if (u4AuthKeyMgtSuite != WAPI_AKM_SUITE_802_1X && - u4AuthKeyMgtSuite != WAPI_AKM_SUITE_PSK) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - if (u2PairSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4PairSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info pairwise cipher suite [%d]: %02x-%02x-%02x-%02x\n", - u2PairSuiteCount, - (UCHAR) (u4PairSuite & 0x000000FF), - (UCHAR) ((u4PairSuite >> 8) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 16) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 24) & 0x000000FF))); - - if (u4PairSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info group cipher suite : %02x-%02x-%02x-%02x\n", - (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (u4GroupSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite = u4AuthKeyMgtSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher = u4PairSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher = u4GroupSuite; - - kalMemCopy(prAdapter->prGlueInfo->aucWapiAssocInfoIEs, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the wpi key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer P_PARAM_WPI_KEY, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_WPI_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - PUINT_8 pc; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetWapiKey"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\r\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_WPI_KEY_T) pvSetBuffer; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)pvSetBuffer, 560); - pc = (PUINT_8)pvSetBuffer; - - *pu4SetInfoLen = u4SetBufferLen; - - /* Exception check */ - if (prNewKey->ucKeyID != 0x1 || - prNewKey->ucKeyID != 0x0) { - prNewKey->ucKeyID = prNewKey->ucKeyID & BIT(0); - //DBGLOG(SEC, INFO, ("Invalid WAPI key ID (%d)\r\n", prNewKey->ucKeyID)); - } - - /* Dump P_PARAM_WPI_KEY_T content. */ - DBGLOG(REQ, TRACE, ("Set: Dump P_PARAM_WPI_KEY_T content\r\n")); - DBGLOG(REQ, TRACE, ("TYPE : %d\r\n", prNewKey->eKeyType)); - DBGLOG(REQ, TRACE, ("Direction : %d\r\n", prNewKey->eDirection)); - DBGLOG(REQ, TRACE, ("KeyID : %d\r\n", prNewKey->ucKeyID)); - DBGLOG(REQ, TRACE, ("AddressIndex:\r\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucAddrIndex, 12); - prNewKey->u4LenWPIEK = 16; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPIEK, (UINT_8)prNewKey->u4LenWPIEK); - prNewKey->u4LenWPICK = 16; - - DBGLOG(REQ, TRACE, ("CK Key(%d):\r\n", (UINT_8)prNewKey->u4LenWPICK)); - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPICK, (UINT_8)prNewKey->u4LenWPICK); - DBGLOG(REQ, TRACE, ("PN:\r\n")); - if (prNewKey->eKeyType == 0){ - prNewKey->aucPN[0] = 0x5c; - prNewKey->aucPN[1] = 0x36; - prNewKey->aucPN[2] = 0x5c; - prNewKey->aucPN[3] = 0x36; - prNewKey->aucPN[4] = 0x5c; - prNewKey->aucPN[5] = 0x36; - prNewKey->aucPN[6] = 0x5c; - prNewKey->aucPN[7] = 0x36; - prNewKey->aucPN[8] = 0x5c; - prNewKey->aucPN[9] = 0x36; - prNewKey->aucPN[10] = 0x5c; - prNewKey->aucPN[11] = 0x36; - prNewKey->aucPN[12] = 0x5c; - prNewKey->aucPN[13] = 0x36; - prNewKey->aucPN[14] = 0x5c; - prNewKey->aucPN[15] = 0x36; - } - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucPN, 16); - - prGlueInfo = prAdapter->prGlueInfo; - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetBufferLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_ID_ADD_REMOVE_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - if (prNewKey->eKeyType == ENUM_WPI_PAIRWISE_KEY) { - prCmdKey->ucTxKey = 1; - prCmdKey->ucKeyType = 1; - } - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->aucAddrIndex, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = prNewKey->ucKeyID; - - prCmdKey->ucKeyLen = 32; - - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WPI; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucWPIEK, 16); - - kalMemCopy(prCmdKey->aucKeyMaterial+16, (PUINT_8)prNewKey->aucWPICK, 16); - - kalMemCopy(prCmdKey->aucKeyRsc, (PUINT_8)prNewKey->aucPN, 16); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ -#endif - - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WSC to set the assoc info, which is needed to add to -* Association request frame while join WPS AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWSCAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if(u4SetBufferLen == 0) - return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - kalMemCopy(prAdapter->prGlueInfo->aucWSCAssocInfoIE, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} -#endif - - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidQueryEnableWakeup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - pu4WakeupEventEnable = (PUINT_32)pvQueryBuffer; - - *pu4WakeupEventEnable = prAdapter->u4WakeupEventEnable; - - return WLAN_STATUS_SUCCESS; -} - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidSetEnableWakup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - pu4WakeupEventEnable = (PUINT_32)pvSetBuffer; - prAdapter->u4WakeupEventEnable = *pu4WakeupEventEnable; - - /* FIXME: - * Send Command Event for setting wakeup-pattern / Magic Packet to firmware - * */ - - return WLAN_STATUS_FAILURE; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure PS related settings for WMM-PS test. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T prWmmPsTestInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_SET_WMM_PS_TEST_STRUC_T rSetWmmPsTestParam; - UINT_16 u2CmdBufLen; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("wlanoidSetWiFiWmmPsTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T); - - prWmmPsTestInfo = (P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T) pvSetBuffer; - - rSetWmmPsTestParam.ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - rSetWmmPsTestParam.bmfgApsdEnAc = prWmmPsTestInfo->bmfgApsdEnAc; - rSetWmmPsTestParam.ucIsEnterPsAtOnce = prWmmPsTestInfo->ucIsEnterPsAtOnce; - rSetWmmPsTestParam.ucIsDisableUcTrigger = prWmmPsTestInfo->ucIsDisableUcTrigger; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[rSetWmmPsTestParam.ucNetTypeIndex]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - prPmProfSetupInfo->ucBmpDeliveryAC = (rSetWmmPsTestParam.bmfgApsdEnAc >> 4) & BITS(0, 3); - prPmProfSetupInfo->ucBmpTriggerAC = rSetWmmPsTestParam.bmfgApsdEnAc & BITS(0, 3); - - u2CmdBufLen = sizeof(CMD_SET_WMM_PS_TEST_STRUC_T); - -#if 0 - /* it will apply the disable trig or not immediately */ - if (prPmInfo->ucWmmPsDisableUcPoll && prPmInfo->ucWmmPsConnWithTrig) { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, TRUE); - } - else { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, FALSE); - } -#endif - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_WMM_PS_TEST_PARMS, - TRUE, - FALSE, - TRUE, - NULL, // TODO? - NULL, - u2CmdBufLen, - (PUINT_8)&rSetWmmPsTestParam, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetWiFiWmmPsTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure enable/disable TX A-MPDU feature. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_TX_AMPDU_T rTxAmpdu; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetTxAmpdu"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rTxAmpdu.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_TX_AMPDU_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TX_AMPDU, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rTxAmpdu, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetTxAmpdu */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure reject/accept ADDBA Request. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_ADDBA_REJECT_T rAddbaReject; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetAddbaReject"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rAddbaReject.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_ADDBA_REJECT_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_ADDBA_REJECT, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rAddbaReject, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetAddbaReject */ - - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - - DEBUGFUNC("wlanoidQuerySLTStatus"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)pvQueryBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_LP_SET: - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - prLpSetting->u4BcnRcvNum = prSltInfo->u4BeaconReceiveCnt; - } - break; - default: - // TBD... - break; - } - - return rWlanStatus; -} /* wlanoidQuerySLTStatus */ - -WLAN_STATUS -wlanoidUpdateSLTMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - /* 1. Action: Update or Initial Set - * 2. Role. - * 3. Target MAC address. - * 4. RF BW & Rate Settings - */ - - DEBUGFUNC("wlanoidUpdateSLTMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T) pvSetBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_INITIAL: /* Initialize */ - { - P_PARAM_MTK_SLT_INITIAL_STRUC_T prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_INITIAL_STRUC_T)); - - prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoStaRec != NULL) { - /* The driver has been initialized. */ - prSltInfo->prPseudoStaRec = NULL; - } - - - prSltInfo->prPseudoBssDesc = scanSearchExistingBssDesc(prAdapter, - BSS_TYPE_IBSS, - prMtkSltInit->aucTargetMacAddr, - prMtkSltInit->aucTargetMacAddr); - - prSltInfo->u2SiteID = prMtkSltInit->u2SiteID; - - /* Bandwidth 2.4G: Channel 1~14 - * Bandwidth 5G: *36, 40, 44, 48, 52, 56, 60, 64, - * *100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, - * 149, 153, *157, 161, - * 184, 188, 192, 196, 200, 204, 208, 212, *216 - */ - prSltInfo->ucChannel2G4 = 1 + (prSltInfo->u2SiteID % 4) * 5; - - switch (prSltInfo->ucChannel2G4) { - case 1: - prSltInfo->ucChannel5G = 36; - break; - case 6: - prSltInfo->ucChannel5G = 52; - break; - case 11: - prSltInfo->ucChannel5G = 104; - break; - case 16: - prSltInfo->ucChannel2G4 = 14; - prSltInfo->ucChannel5G = 161; - break; - default: - ASSERT(FALSE); - } - - if (prSltInfo->prPseudoBssDesc == NULL) { - do { - prSltInfo->prPseudoBssDesc = scanAllocateBssDesc(prAdapter); - - if (prSltInfo->prPseudoBssDesc == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - } while (FALSE); - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - if (prBssDesc) { - prBssDesc->eBSSType = BSS_TYPE_IBSS; - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prMtkSltInit->aucTargetMacAddr); - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - - prBssDesc->u2BeaconInterval = 100; - prBssDesc->u2ATIMWindow = 0; - prBssDesc->ucDTIMPeriod = 1; - - prBssDesc->u2IELength = 0; - - prBssDesc->fgIsERPPresent = TRUE; - prBssDesc->fgIsHTPresent = TRUE; - - prBssDesc->u2OperationalRateSet = BIT(RATE_36M_INDEX); - prBssDesc->u2BSSBasicRateSet = BIT(RATE_36M_INDEX); - prBssDesc->fgIsUnknownBssBasicRate = FALSE; - - prBssDesc->fgIsLargerTSF = TRUE; - - prBssDesc->eBand = BAND_2G4; - - prBssDesc->ucChannelNum = prSltInfo->ucChannel2G4; - - prBssDesc->ucPhyTypeSet = PHY_TYPE_SET_802_11ABGN; - - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - } - } - break; - case ENUM_MTK_SLT_FUNC_RATE_SET: /* Update RF Settings. */ - if (prSltInfo->prPseudoStaRec == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - } - else { - P_PARAM_MTK_SLT_TR_TEST_STRUC_T prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_TR_TEST_STRUC_T)); - - prStaRec = prSltInfo->prPseudoStaRec; - prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->eBand = BAND_5G; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel5G; - } - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM24) { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel2G4; - } - - if ((prTRSetting->u4FixedRate & FIXED_BW_DL40) != 0) { - /* RF 40 */ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; /* It would controls RFBW capability in WTBL. */ - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; /* This controls RF BW, RF BW would be 40 only if - * 1. PHY_TYPE_BIT_HT is TRUE. - * 2. SCO is SCA/SCB. - */ - - /* U20/L20 Control. */ - switch (prTRSetting->u4FixedRate & 0xC000) { - case FIXED_EXT_CHNL_U20: - prBssInfo->eBssSCO = CHNL_EXT_SCB; // +2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel += 2; - } - else { - if (prBssInfo->ucPrimaryChannel <5) { - prBssInfo->ucPrimaryChannel = 8; // For channel 1, testing L20 at channel 8. - } - } - break; - case FIXED_EXT_CHNL_L20: - default: /* 40M */ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // -2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel -= 2; - } - else { - if (prBssInfo->ucPrimaryChannel > 10) { - prBssInfo->ucPrimaryChannel = 3; // For channel 11 / 14. testing U20 at channel 3. - } - } - break; - } - } - else { - /* RF 20 */ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - - prStaRec->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - - switch (prTRSetting->u4FixedRate & 0xFF) { - case RATE_OFDM_54M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_54M_INDEX); - break; - case RATE_OFDM_48M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_48M_INDEX); - break; - case RATE_OFDM_36M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - case RATE_OFDM_24M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_24M_INDEX); - break; - case RATE_OFDM_6M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_6M_INDEX); - break; - case RATE_CCK_11M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_11M_INDEX); - break; - case RATE_CCK_1M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_1M_INDEX); - break; - case RATE_GF_MCS_0: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - case RATE_MM_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_HT_GF; -#if 0 // Only for Current Measurement Mode. - prStaRec->u2HtCapInfo |= (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); -#endif - break; - case RATE_GF_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - default: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - } - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - } - break; - case ENUM_MTK_SLT_FUNC_LP_SET: /* Reset LP Test Result. */ - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoBssDesc == NULL) { - /* Please initial SLT Mode first. */ - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - switch (prLpSetting->rLpTestMode) { - case ENUM_MTK_LP_TEST_NORMAL: - /* In normal mode, we would use target MAC address to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - prSltInfo->fgIsDUT = FALSE; - break; - case ENUM_MTK_LP_TEST_GOLDEN_SAMPLE: - /* 1. Lower AIFS of BCN queue. - * 2. Fixed Random Number tobe 0. - */ - prSltInfo->fgIsDUT = FALSE; - /* In LP test mode, we would use MAC address of Golden Sample to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - break; - case ENUM_MTK_LP_TEST_DUT: - /* 1. Enter Sleep Mode. - * 2. Fix random number a large value & enlarge AIFN of BCN queue. - */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssDesc->aucSrcAddr); - prSltInfo->u4BeaconReceiveCnt = 0; - prSltInfo->fgIsDUT = TRUE; - break; - } - - } - - break; - default: - break; - } - - - - - return WLAN_STATUS_FAILURE; - - - return rWlanStatus; -} /* wlanoidUpdateSLTMode */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query NVRAM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - UINT_16 u2Data; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryNvramRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvQueryBuffer; - - if(prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_READ) { - fgStatus = kalCfgDataRead16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - &u2Data); - - if(fgStatus) { - prNvramRwInfo->u2EepromData = u2Data; - DBGLOG(REQ, INFO, ("NVRAM Read: index=%#X, data=%#02X\r\n", - prNvramRwInfo->ucEepromIndex, u2Data)); - } - else{ - DBGLOG(REQ, ERROR, ("NVRAM Read Failed: index=%#x.\r\n", - prNvramRwInfo->ucEepromIndex)); - rStatus = WLAN_STATUS_FAILURE; - } - } - else if (prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_GETSIZE) { - prNvramRwInfo->u2EepromData = CFG_FILE_WIFI_REC_SIZE; - DBGLOG(REQ, INFO, ("EEPROM size =%d\r\n", prNvramRwInfo->u2EepromData)); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - return rStatus; -} /* wlanoidQueryNvramRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write NVRAM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - DEBUGFUNC("wlanoidSetNvramWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvSetBuffer; - - fgStatus = kalCfgDataWrite16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - prNvramRwInfo->u2EepromData - ); - - if(fgStatus == FALSE){ - DBGLOG(REQ, ERROR, ("NVRAM Write Failed.\r\n")); - rStatus = WLAN_STATUS_FAILURE; - } - - return rStatus; -} /* wlanoidSetNvramWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(ENUM_CFG_SRC_TYPE_T); - - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == TRUE) { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_NVRAM; - } - else { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_EEPROM; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(P_ENUM_EEPROM_TYPE_T); - -#if CFG_SUPPORT_NIC_CAPABILITY - if(prAdapter->fgIsEepromUsed == TRUE) { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_PRESENT; - } - else { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; - } -#else - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; -#endif - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_8 pucCountry; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(u4SetBufferLen == 2); - - *pu4SetInfoLen = 2; - - pucCountry = pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) pucCountry[0]) << 8) | ((UINT_16) pucCountry[1]) ; - - prAdapter->prDomainInfo = NULL; /* Force to re-search country code */ - rlmDomainSendCmd(prAdapter, TRUE); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set BT profile or BT information and the -* driver will set the built-in PTA configuration into chip. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - P_PTA_IPC_T prPtaIpc; - - DEBUGFUNC("wlanoidSetBT.\n"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PTA_IPC_T); - if (u4SetBufferLen != sizeof(PTA_IPC_T)) { - WARNLOG(("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT profile because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prPtaIpc = (P_PTA_IPC_T)pvSetBuffer; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: BWCS CMD = %02x%02x%02x%02x\n", - prPtaIpc->u.aucBTPParams[0], prPtaIpc->u.aucBTPParams[1], prPtaIpc->u.aucBTPParams[2], prPtaIpc->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3]); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BWCS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(PTA_IPC_T), - (PUINT_8)prPtaIpc, - NULL, - 0); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current BT profile and BTCR values -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -// P_PARAM_PTA_IPC_T prPtaIpc; -// UINT_32 u4QueryBuffLen; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PTA_IPC_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(PTA_IPC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); -// prPtaIpc = (P_PTA_IPC_T)pvQueryBuffer; -// prPtaIpc->ucCmd = BT_CMD_PROFILE; -// prPtaIpc->ucLen = sizeof(prPtaIpc->u); -// nicPtaGetProfile(prAdapter, (PUINT_8)&prPtaIpc->u, &u4QueryBuffLen); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4SingleAntenna; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4SingleAntenna = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgSingleAntenna) { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 1\r\n"); - *pu4SingleAntenna = 1; - } else { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 0\r\n"); - *pu4SingleAntenna = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - PUINT_32 pu4SingleAntenna; - UINT_32 u4SingleAntenna; - P_PTA_INFO_T prPtaInfo; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - prPtaInfo = &prAdapter->rPtaInfo; - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set antenna because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4SingleAntenna = (PUINT_32)pvSetBuffer; - u4SingleAntenna = *pu4SingleAntenna; - - if (u4SingleAntenna == 0) { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 0\r\n"); - prPtaInfo->fgSingleAntenna = FALSE; - } else { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 1\r\n"); - prPtaInfo->fgSingleAntenna = TRUE; - } - ptaFsmRunEventSetConfig(prAdapter, &prPtaInfo->rPtaParam); - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4Pta; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4Pta = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgEnabled) { - //printk(KERN_WARNING DRV_NAME"PTA = 1\r\n"); - *pu4Pta = 1; - } else { - //printk(KERN_WARNING DRV_NAME"PTA = 0\r\n"); - *pu4Pta = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4PtaCtrl; - UINT_32 u4PtaCtrl; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT setting because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4PtaCtrl = (PUINT_32)pvSetBuffer; - u4PtaCtrl = *pu4PtaCtrl; - - if (u4PtaCtrl == 0) { - //printk(KERN_WARNING DRV_NAME"Set Pta= 0\r\n"); - nicPtaSetFunc(prAdapter, FALSE); - } else { - //printk(KERN_WARNING DRV_NAME"Set Pta= 1\r\n"); - nicPtaSetFunc(prAdapter, TRUE); - } - - return WLAN_STATUS_SUCCESS; -} -#endif - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Tx power profile. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - //P_SET_TXPWR_CTRL_T pTxPwr = (P_SET_TXPWR_CTRL_T)pvSetBuffer; - //UINT_32 i; - WLAN_STATUS rStatus; - - DEBUGFUNC("wlanoidSetTxPower"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - -#if 0 - printk("c2GLegacyStaPwrOffset=%d\n", pTxPwr->c2GLegacyStaPwrOffset); - printk("c2GHotspotPwrOffset=%d\n", pTxPwr->c2GHotspotPwrOffset); - printk("c2GP2pPwrOffset=%d\n", pTxPwr->c2GP2pPwrOffset); - printk("c2GBowPwrOffset=%d\n", pTxPwr->c2GBowPwrOffset); - printk("c5GLegacyStaPwrOffset=%d\n", pTxPwr->c5GLegacyStaPwrOffset); - printk("c5GHotspotPwrOffset=%d\n", pTxPwr->c5GHotspotPwrOffset); - printk("c5GP2pPwrOffset=%d\n", pTxPwr->c5GP2pPwrOffset); - printk("c5GBowPwrOffset=%d\n", pTxPwr->c5GBowPwrOffset); - printk("ucConcurrencePolicy=%d\n", pTxPwr->ucConcurrencePolicy); - - for (i=0; i<14;i++) - printk("acTxPwrLimit2G[%d]=%d\n", i, pTxPwr->acTxPwrLimit2G[i]); - - for (i=0; i<4;i++) - printk("acTxPwrLimit5G[%d]=%d\n", i, pTxPwr->acTxPwrLimit5G[i]); -#endif - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_TXPWR_CTRL, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - TRUE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - u4SetBufferLen, /* u4SetQueryInfoLen */ - (PUINT_8) pvSetBuffer, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return rStatus; - -} - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_CMD_DUMP_MEM prCmdDumpMem; - CMD_DUMP_MEM rCmdDumpMem; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4MemSize = PARAM_MEM_DUMP_MAX_SIZE; - - UINT_32 u4RemainLeng = 0; - UINT_32 u4CurAddr = 0; - UINT_8 ucFragNum = 0; - - prCmdDumpMem = &rCmdDumpMem; - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - - u4RemainLeng = prMemDumpInfo->u4RemainLength; - u4CurAddr = prMemDumpInfo->u4Address + prMemDumpInfo->u4Length; - ucFragNum = prMemDumpInfo->ucFragNum + 1; - - /* Query. If request length is larger than max length, do it as ping pong. - * Send a command and wait for a event. Send next command while the event is received. - * - */ - do{ - UINT_32 u4CurLeng = 0; - - if(u4RemainLeng > u4MemSize) { - u4CurLeng = u4MemSize; - u4RemainLeng -= u4MemSize; - } else { - u4CurLeng = u4RemainLeng; - u4RemainLeng = 0; - } - - prCmdDumpMem->u4Address = u4CurAddr; - prCmdDumpMem->u4Length = u4CurLeng; - prCmdDumpMem->u4RemainLength = u4RemainLeng; - prCmdDumpMem->ucFragNum = ucFragNum; - - DBGLOG(REQ, TRACE, ("[%d] 0x%X, len %d, remain len %d\n", - ucFragNum, - prCmdDumpMem->u4Address, - prCmdDumpMem->u4Length, - prCmdDumpMem->u4RemainLength)); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_DUMP_MEM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMemDump, - nicOidCmdTimeoutCommon, - sizeof(CMD_DUMP_MEM), - (PUINT_8)prCmdDumpMem, - pvQueryBuffer, - u4QueryBufferLen - ); - - }while(FALSE); - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump memory. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - - DEBUGFUNC("wlanoidQueryMemDump"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - DBGLOG(REQ, TRACE, ("Dump 0x%X, len %d\n", prMemDumpInfo->u4Address, prMemDumpInfo->u4Length)); - - prMemDumpInfo->u4RemainLength = prMemDumpInfo->u4Length; - prMemDumpInfo->u4Length = 0; - prMemDumpInfo->ucFragNum = 0; - - return wlanSendMemDumpCmd( - prAdapter, - pvQueryBuffer, - u4QueryBufferLen); - -} /* end of wlanoidQueryMcrRead() */ - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the p2p mode. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - P_PARAM_CUSTOM_P2P_SET_STRUC_T prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T)NULL; - //P_MSG_P2P_NETDEV_REGISTER_T prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - DEBUGFUNC("wlanoidSetP2pMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T); - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T) pvSetBuffer; - - DBGLOG(P2P, INFO, ("Set P2P enable[%ld] mode[%ld]\n", prSetP2P->u4Enable, prSetP2P->u4Mode)); - - /* - * enable = 1, mode = 0 => init P2P network - * enable = 1, mode = 1 => init Soft AP network - * enable = 0 => uninit P2P/AP network - */ - - if (prSetP2P->u4Enable) { - p2pSetMode((prSetP2P->u4Mode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - - -#if 0 - prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_NETDEV_REGISTER_T))); - - if (prP2pNetdevRegMsg == NULL) { - ASSERT(FALSE); - status = WLAN_STATUS_RESOURCES; - return status; - } - - - prP2pNetdevRegMsg->rMsgHdr.eMsgId = MID_MNY_P2P_NET_DEV_REGISTER; - prP2pNetdevRegMsg->fgIsEnable = (prSetP2P->u4Enable == 1)?TRUE:FALSE; - prP2pNetdevRegMsg->ucMode = (UINT_8)prSetP2P->u4Mode; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pNetdevRegMsg, - MSG_SEND_METHOD_BUF); -#endif - - return status; - -} -#endif - - -#if CFG_SUPPORT_BUILD_DATE_CODE -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query build date code information from firmware -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBuildDateCode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - CMD_GET_BUILD_DATE_CODE rCmdGetBuildDateCode; - - DEBUGFUNC("wlanoidQueryBuildDateCode"); - DBGLOG(REQ, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_8) * 16; - - if (u4QueryBufferLen < sizeof(UINT_8) * 16) { - return WLAN_STATUS_INVALID_LENGTH; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_BUILD_DATE_CODE, - FALSE, - TRUE, - TRUE, - nicCmdEventBuildDateCode, - nicOidCmdTimeoutCommon, - sizeof(CMD_GET_BUILD_DATE_CODE), - (PUINT_8)&rCmdGetBuildDateCode, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* end of wlanoidQueryBuildDateCode() */ -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query BSS info from firmware -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBSSInfo ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - EVENT_AIS_BSS_INFO_T rCmdBSSInfo; - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(EVENT_AIS_BSS_INFO_T); - - if (u4QueryBufferLen < sizeof(EVENT_AIS_BSS_INFO_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - kalMemZero(&rCmdBSSInfo, sizeof(EVENT_AIS_BSS_INFO_T)); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_BSS_INFO, - FALSE, - TRUE, - TRUE, - nicCmdEventGetBSSInfo, - nicOidCmdTimeoutCommon, - sizeof(P_EVENT_AIS_BSS_INFO_T), - (PUINT_8)&rCmdBSSInfo, - pvQueryBuffer, - u4QueryBufferLen - ); - - return rStatus; -} /* wlanoidSetWiFiWmmPsTest */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_p2p.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_p2p.c deleted file mode 100755 index 0b2386939cbd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/common/wlan_p2p.c +++ /dev/null @@ -1,1865 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/common/wlan_p2p.c#8 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the Wi-Fi Direct commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_p2p.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 23 2011 yuche.tsai - * NULL - * Fix Multicast Issue of P2P. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 wh.su - * [WCXRP00000571] [MT6620 Wi-Fi] [Driver] Not check the p2p role during set key - * Skip the p2p role for adding broadcast key issue. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * fixed compiling error while enable dbg. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix SD Request Query Length issue. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Service Discovery Request. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Wlan OID related function. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DEBUGFUNC("wlanoidSendSetQueryP2PCmd"); - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_P2P_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to Wi-Fi Direct driver -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_KEY_T prNewKey; - - DEBUGFUNC("wlanoidSetAddP2PKey"); - DBGLOG(REQ, INFO, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - /* Verify the key material length for key material buffer */ - else if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check */ - else if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - else if (!(prNewKey->u4KeyLength == CCMP_KEY_LEN) && !(prNewKey->u4KeyLength == TKIP_KEY_LEN)) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - // fill CMD_802_11_KEY - kalMemZero(&rCmdKey, sizeof(CMD_802_11_KEY)); - rCmdKey.ucAddRemove = 1; /* add */ - rCmdKey.ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - rCmdKey.ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prNewKey->arBSSID); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - if(prNewKey->u4KeyLength == CCMP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - else if(prNewKey->u4KeyLength == TKIP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_TKIP; // TKIP - rCmdKey.ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - rCmdKey.ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - kalMemCopy(rCmdKey.aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, rCmdKey.ucKeyLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request Wi-Fi Direct driver to remove keys -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_REMOVE_KEY_T prRemovedKey; - - DEBUGFUNC("wlanoidSetRemoveP2PKey"); - ASSERT(prAdapter); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* There should not be any key operation for P2P Device */ - if(kalP2PGetRole(prAdapter->prGlueInfo) == 0) { - // return WLAN_STATUS_NOT_ACCEPTED; - } - - kalMemZero((PUINT_8)&rCmdKey, sizeof(CMD_802_11_KEY)); - - rCmdKey.ucAddRemove = 0; // remove - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - kalMemCopy(rCmdKey.aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - rCmdKey.ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - - DEBUGFUNC("wlanoidSetP2pNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSetP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - WARNLOG(("Invalid power mode %d\n", - *(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_P2P_INDEX, - ePowerMode, - TRUE); - return status; -} /* end of wlanoidSetP2pPowerSaveProfile() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetP2pSetNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - printk("wlanoidSetP2pSetNetworkAddress (%d)\n", (INT_16)u4SetBufferLen); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - printk("u4IpAddressCount (%ld) \n", (INT_32)u4IpAddressCount); - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - printk("prNetAddrIp->in_addr:%d:%d:%d:%d\n", (UINT_8)pucBuf[0], (UINT_8)pucBuf[1], (UINT_8)pucBuf[2], (UINT_8)pucBuf[3]); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} /* end of wlanoidSetP2pSetNetworkAddress() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - FALSE, // This CMD response is no need to complete the OID. Or the event would unsync. - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetP2PMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_REQUEST)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDRequest(prAdapter, (P_PARAM_P2P_SEND_SD_REQUEST)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidSendP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_RESPONSE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDResponse(prAdapter, (P_PARAM_P2P_SEND_SD_RESPONSE)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - PUINT_8 pucPacketBuffer = NULL, pucTA = NULL; -// PUINT_8 pucChannelNum = NULL; - PUINT_16 pu2PacketLength = NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - UINT_8 ucVersionNum = 0; -// UINT_8 ucChannelNum = 0, ucSeqNum = 0; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_REQUEST)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Request\n")); -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_REQUEST prP2pGetSdReq = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - - pucPacketBuffer = prP2pGetSdReq->aucPacketContent; - pu2PacketLength = &prP2pGetSdReq->u2PacketLength; - pucTA = &prP2pGetSdReq->rTransmitterAddr; - } - else { - P_PARAM_P2P_GET_SD_REQUEST_EX prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST_EX)NULL; - - prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketBuffer = prP2pGetSdReqEx->aucPacketContent; - pu2PacketLength = &prP2pGetSdReqEx->u2PacketLength; - pucTA = &prP2pGetSdReqEx->rTransmitterAddr; - pucChannelNum = &prP2pGetSdReqEx->ucChannelNum; - ucSeqNum = prP2pGetSdReqEx->ucSeqNum; - } - - - rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, - pucPacketBuffer, - (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_REQUEST)), - (PUINT_32)pu2PacketLength, - pucChannelNum, - ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketBuffer; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST) + (*pu2PacketLength)); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST_EX) + (*pu2PacketLength)); - } - - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - //UINT_8 ucSeqNum = 0, - UINT_8 ucVersionNum = 0; - PUINT_8 pucPacketContent = (PUINT_8)NULL, pucTA = (PUINT_8)NULL; - PUINT_16 pu2PacketLength = (PUINT_16)NULL; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_RESPONSE)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Response\n")); - -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_RESPONSE prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_RESPONSE)NULL; - - prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketContent = prP2pGetSdRsp->aucPacketContent; - pucTA = &prP2pGetSdRsp->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRsp->u2PacketLength; - } - else { - P_PARAM_P2P_GET_SD_RESPONSE_EX prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)NULL; - - prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)pvQueryBuffer; - pucPacketContent = prP2pGetSdRspEx->aucPacketContent; - pucTA = &prP2pGetSdRspEx->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRspEx->u2PacketLength; - ucSeqNum = prP2pGetSdRspEx->ucSeqNum; - } - - -// rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, -// pucPacketContent, -// (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_RESPONSE)), -// (PUINT_32)pu2PacketLength, -// NULL, -// ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketContent; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE) + *pu2PacketLength); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE_EX) + *pu2PacketLength); - } - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to terminate P2P Service Discovery Phase -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_P2P_TERMINATE_SD_PHASE prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)NULL; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - break; - } - - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - break; - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_TERMINATE_SD_PHASE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_TERMINATE_SD_PHASE); - rWlanStatus = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)pvSetBuffer; - - if (EQUAL_MAC_ADDR(prP2pTerminateSD->rPeerAddr, aucNullAddr)) { - DBGLOG(P2P, TRACE, ("Service Discovery Version 2.0\n")); -// p2pFuncSetVersionNumOfSD(prAdapter, 2); - } - - //rWlanStatus = p2pFsmRunEventSDAbort(prAdapter); - - } while (FALSE); - - - - - - return rWlanStatus; -} /* end of wlanoidSetP2PTerminateSDPhase() */ - - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SEC_CHECK, - FALSE, - TRUE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - u4SetBufferLen, - (PUINT_8)pvSetBuffer, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetSecCheckRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - //P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = prAdapter->prGlueInfo; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen > 256) { - u4QueryBufferLen = 256; - } - - *pu4QueryInfoLen = u4QueryBufferLen; - - #if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - #endif - kalMemCopy((PUINT_8)(pvQueryBuffer + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer)), prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - - return rWlanStatus; -} /* end of wlanoidGetSecCheckResponse() */ -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - #else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif -} - - - -WLAN_STATUS -wlanoidQueryP2pOpChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucOpChnl = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - -#if 0 - if (!p2pFuncGetCurrentOpChnl(prAdapter, pucOpChnl)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } -#else - rResult = WLAN_STATUS_INVALID_DATA; - break; -#endif - - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_SUCCESS; - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pOpChannel */ - -WLAN_STATUS -wlanoidQueryP2pVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucVersionNum = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pVersion */ - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; - UINT_8 ucVersionNum; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - *pu4SetInfoLen = sizeof(UINT_8); - - if (u4SetBufferLen < sizeof(UINT_8)) { - rResult = WLAN_STATUS_INVALID_LENGTH; - break; - } - - - ucVersionNum = *((PUINT_8)pvSetBuffer); - - - rResult = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rResult; -} /* wlanoidSetP2pSupplicantVersion */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the WPS mode. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pWPSmode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - UINT_32 u4IsWPSmode = 0; - DEBUGFUNC("wlanoidSetP2pWPSmode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if(pvSetBuffer) { - u4IsWPSmode = *(PUINT_32)pvSetBuffer; - } - else{ - u4IsWPSmode = 0; - } - - if(u4IsWPSmode){ - prAdapter->rWifiVar.prP2pFsmInfo->fgIsWPSMode = 1; - } - else{ - prAdapter->rWifiVar.prP2pFsmInfo->fgIsWPSMode = 0; - } - - status = nicUpdateBss( - prAdapter, - NETWORK_TYPE_P2P_INDEX); - - return status; -} /* end of wlanoidSetP2pWPSmode() */ - - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->fgIsP2pLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rP2pLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* wlanoidQueryP2pRssi */ -#endif - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/CFG_Wifi_File.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/CFG_Wifi_File.h deleted file mode 100755 index dd1fce8d7bf5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/CFG_Wifi_File.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/CFG_Wifi_File.h#1 $ -*/ - -/*! \file CFG_Wifi_File.h - \brief Collection of NVRAM structure used for YuSu project - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -/* -** $Log: CFG_Wifi_File.h $ - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * update NVRAM data structure definition. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * -*/ - -#ifndef _CFG_WIFI_FILE_H -#define _CFG_WIFI_FILE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -// duplicated from nic_cmd_event.h to avoid header dependency -typedef struct _TX_PWR_PARAM_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} TX_PWR_PARAM_T, *P_TX_PWR_PARAM_T; - -typedef struct _PWR_5G_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} PWR_5G_OFFSET_T, *P_PWR_5G_OFFSET_T; - -typedef struct _PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} PWR_PARAM_T, *P_PWR_PARAM_T; - -typedef struct _MT6620_CFG_PARAM_STRUCT { - /* 256 bytes of MP data */ - UINT_16 u2Part1OwnVersion; - UINT_16 u2Part1PeerVersion; - UINT_8 aucMacAddress[6]; - UINT_8 aucCountryCode[2]; - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - - UINT_8 ucRegChannelListMap; - UINT_8 ucRegChannelListIndex; - UINT_8 aucRegSubbandInfo[36]; - - UINT_8 aucReserved2[256-240]; - - /* 256 bytes of function data */ - UINT_16 u2Part2OwnVersion; - UINT_16 u2Part2PeerVersion; - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - UINT_8 aucPreTailReserved; - UINT_8 aucTailReserved[256-8]; -} MT6620_CFG_PARAM_STRUCT, *P_MT6620_CFG_PARAM_STRUCT, - WIFI_CFG_PARAM_STRUCT, *P_WIFI_CFG_PARAM_STRUCT; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -#define CFG_FILE_WIFI_REC_SIZE sizeof(WIFI_CFG_PARAM_STRUCT) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -nvramOffsetCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion) == 256); - - DATA_STRUC_INSPECTING_ASSERT( - sizeof(WIFI_CFG_PARAM_STRUCT) == 512); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) & 0x0001) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) & 0x0001) == 0); -} -#endif - -#endif /* _CFG_WIFI_FILE_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/config.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/config.h deleted file mode 100755 index b2a63c0667ee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/config.h +++ /dev/null @@ -1,1541 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/config.h#2 $ -*/ - -/*! \file "config.h" - \brief This file includes the various configurable parameters for customers - - This file ncludes the configurable parameters except the paramters indicate the turning-on/off of some features -*/ - - - -/* -** $Log: config.h $ - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 05 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined".. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 10 28 2011 cp.wu - * [MT6620 Wi-Fi][Win32 Driver] Enable 5GHz support as default - * enable 5GHz as default for DaVinci trunk and V2.1 driver release . - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * surpress compiler warning for MT6628 build - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * enable divided firmware downloading. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 08 09 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS definition for MT6620. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 24 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * increase RX buffer number to have a 2:1 ping-pong ratio - * - * 06 23 2011 eddie.chen - * [WCXRP00000810] [MT5931][DRV/FW] Adjust TxRx Buffer number and Rx buffer size - * 1. Different TX RX buffer - * 2. Enlarge RX buffer and increase the number 8->11 - * 3. Seperate the WINSZIE and RX buffer number - * 4. Fix RX maximum size in MAC - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 17 2011 terry.wu - * NULL - * . - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add compile flag for persistent group support. - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * Enable RX STBC capability - * - * 04 11 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * . - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. correction: RX aggregation is not limited to SDIO but for all host interface options - * 2. add forward declarations for DBG-only symbols - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * enable roaming feature. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 01 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Fix compile issue - * - * 02 25 2011 george.huang - * [WCXRP00000497] [MT6620 Wi-Fi][FW] Change default UAPSD AC assignment - * Assign all AC default to be U-APSD enabled. - * - * 02 14 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * Let the privacy check at hotspot mode default enable. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 02 01 2011 yarco.yang - * [WCXRP00000417] [MT6620 Driver] Chnage CFG_HANDLE_IST_IN_SDIO_CALLBACK from 1 to 0 for Interoperability - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 19 2011 wh.su - * [WCXRP00000370] [MT6620 Wi-Fi][Driver] Disable Rx RDG for workaround pre-N ccmp issue - * Not announce support Rx RDG for wokaround pre-N ccmp construct AAD issue.. - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW only for Linux. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Enable BOW and 4 physical links. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Modify CFG_SLT_SUPPORT default value. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000341] [MT6620][SLT] Create Branch for SLT SW. - * Update configure flag. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 11 23 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Enable PM function by default - * - * 11 15 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use config.mk WAPI config define. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use the config.mk define. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * enable the WAPI compiling flag as default - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * Add a define CFG_TEST_ANDROID_DIRECT_GO compiling flag - * - * 10 08 2010 cm.chang - * NULL - * Remove unused compiling flags (TX_RDG and TX_SGI) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 05 2010 yarco.yang - * [WCXRP00000082] [MT6620 Wi-Fi][Driver]High throughput performance tuning - * Change CFG_IST_LOOP_COUNT from 2 to 1 to reduce unnecessary SDIO bus access - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 20 2010 cm.chang - * NULL - * Disable RX STBC by BB HEC based on MT6620E1_PHY_BUG v05.docx - * - * 09 17 2010 chinglan.wang - * NULL - * Add performance test option - * - * 09 10 2010 chinglan.wang - * NULL - * Modify for Software Migration Phase 2.10 for E2 FPGA - * - * 09 07 2010 yuche.tsai - * NULL - * Add a CFG for max common IE buffer size. - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 chinglan.wang - * NULL - * Enable the MT6620_FPGA_BWCS value. - * - * 08 30 2010 chinglan.wang - * NULL - * Disable the FW encryption. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Disable BOW Test. - * - * 08 23 2010 jeffrey.chang - * NULL - * fix config.h typo - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 09 2010 wh.su - * NULL - * let the firmware download default enabled. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Add a configure flag for P2P unitest. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 yuche.tsai - * - * Add for SLT support. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * set default compiling flag for security disable. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add config option for cfg80211. - * - * 05 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set ATIMwindow default value to zero. - * - * 05 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add option for FPGA_BWCS & FPGA_V5 - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change firmware name to WIFI_RAM_CODE. - * - * 05 07 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * disable bt-over-wifi configuration, turn it on after firmware finished implementation - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * re-enable power management - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable TCP/IP checksum offloading by default. - * - * 04 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set CFG_ENABLE_FULL_PM to 1 as default to - * 1) acquire own before hardware access - * 2) set own back after hardware access - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 07 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * disable RX-enhanced response temporally, it seems the CQ is not resolved yet. - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * re-enable RX enhanced mode as WPD00003827 is resolved. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn off RX_ENHANCE mode by default. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * * 2) ready bit will be polled for limited iteration - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * firmware download: Linux uses different firmware path - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add options for full PM support. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn on FW-DOWNLOAD as default for release. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 05 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * change CFG_NUM_OF_QM_RX_PKT_NUM to 120 - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * . - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * increase RX buffer number to avoid RX buffer starvation. - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed the number of STA_RECs to 20 - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * and result is retrieved by get ATInfo instead - * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-16 22:12:28 GMT mtk02752 -** enable interrupt enhanced response, TX/RX Aggregation as default -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:38:43 GMT mtk02752 -** eliminate compile options which are obsolete or for emulation purpose -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 13:56:26 GMT MTK02468 -** Added RX buffer reordering configurations -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-12-04 12:09:09 GMT mtk02752 -** once enhanced intr/rx reponse is taken, RX must be access in aggregated basis -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 17:54:50 GMT mtk02752 -** correct a typo -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:47 GMT mtk01084 -** add defines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:33:37 GMT mtk02752 -** add coalescing buffer definition for SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 20:32:40 GMT mtk02752 -** add CFG_TX_MAX_PKT_NUM for limiting queued TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 13:34:44 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION define for source control -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 13:54:11 GMT mtk01084 -** enable INT enhance mode by default -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-30 18:17:14 GMT mtk01084 -** add new define -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-10-29 19:47:36 GMT mtk01084 -** not use HIF loopback mode -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-13 21:58:33 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-09-09 17:26:08 GMT mtk01084 -** add CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:02:30 GMT mtk01426 -** Update CFG_RX_COALESCING_BUFFER_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-21 09:35:51 GMT mtk01461 -** Add CFG_TX_DBG_MGT_BUF to debug MGMT Buffer depth -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:52:21 GMT mtk01426 -** Add OOB_DATA_PRE_FIXED_LEN define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-08 16:51:08 GMT mtk01084 -** update for FW download part -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:33:37 GMT mtk01461 -** Add SW pre test flag CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 00:29:18 GMT mtk01461 -** Fix CFG_COALESCING_BUFFER_SIZE if enable the CFG_TX_FRAGMENT -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-18 20:58:34 GMT mtk01426 -** Add CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-17 20:17:36 GMT mtk01426 -** Add CMD/Response related configure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:21 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:21 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _CONFIG_H -#define _CONFIG_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#ifdef MT6620 -#undef MT6620 -#endif - -#ifdef MT5931 -#undef MT5931 -#endif - -#ifndef MT6628 -#define MT6628 -#endif - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//2 Flags for OS capability - -#ifdef LINUX - #ifdef CONFIG_X86 - #define MTK_WCN_HIF_SDIO 0 - #else - #define MTK_WCN_HIF_SDIO 1 - #endif -#else - #define MTK_WCN_HIF_SDIO 0 -#endif - -#if (CFG_SUPPORT_AEE == 1) - #define CFG_ENABLE_AEE_MSG 1 -#else - #define CFG_ENABLE_AEE_MSG 0 -#endif - -//2 Flags for Driver Features -#define CFG_TX_FRAGMENT 1 /*!< 1: Enable TX fragmentation - 0: Disable */ -#define CFG_SUPPORT_PERFORMANCE_TEST 0 /*Only for performance Test*/ - -#define CFG_COUNTRY_CODE NULL //"US" - -#ifndef LINUX - #define CFG_FW_FILENAME L"WIFI_RAM_CODE" - #define CFG_FW_FILENAME_E6 L"WIFI_RAM_CODE_E6" -#else - #define CFG_FW_FILENAME "WIFI_RAM_CODE" -#endif - -#define CFG_SUPPORT_802_11D 1 /*!< 1(default): Enable 802.11d - 0: Disable */ - -#define CFG_SUPPORT_SPEC_MGMT 0 /* Spectrum Management (802.11h): TPC and DFS */ -#define CFG_SUPPORT_RRM 0 /* Radio Reasource Measurement (802.11k) */ -#define CFG_SUPPORT_QUIET 0 /* Quiet (802.11h) */ - - -#define CFG_SUPPORT_RX_RDG 0 /* 11n feature. RX RDG capability */ -#define CFG_SUPPORT_MFB 0 /* 802.11n MCS Feedback responder */ -#define CFG_SUPPORT_RX_STBC 1 /* 802.11n RX STBC (1SS) */ -#define CFG_SUPPORT_RX_SGI 1 /* 802.11n RX short GI for both 20M and 40M BW */ -#define CFG_SUPPORT_RX_HT_GF 1 /* 802.11n RX HT green-field capability */ - -/*------------------------------------------------------------------------------ - * SLT Option - *------------------------------------------------------------------------------ - */ -#define CFG_SLT_SUPPORT 0 - - -#ifdef NDIS60_MINIPORT - #define CFG_NATIVE_802_11 1 - - #define CFG_TX_MAX_PKT_SIZE 2304 - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD 0 - #define CFG_WHQL_DOT11_STATISTICS 1 - #define CFG_WHQL_ADD_REMOVE_KEY 1 - #define CFG_WHQL_CUSTOM_IE 1 - #define CFG_WHQL_SAFE_MODE_ENABLED 1 - -#else - #define CFG_TCP_IP_CHKSUM_OFFLOAD 1 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 - #define CFG_TX_MAX_PKT_SIZE 1600 - #define CFG_NATIVE_802_11 0 -#endif - - -//2 Flags for Driver Parameters -/*------------------------------------------------------------------------------ - * Flags for EHPI Interface in Colibri Platform - *------------------------------------------------------------------------------ - */ -#define CFG_EHPI_FASTER_BUS_TIMING 0 /*!< 1: Do workaround for faster bus timing - 0(default): Disable */ - -/*------------------------------------------------------------------------------ - * Flags for HIFSYS Interface - *------------------------------------------------------------------------------ - */ -#ifdef _lint - #define _HIF_SDIO 1 -#endif - -#define CFG_SDIO_INTR_ENHANCE 1 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_RX_ENHANCE 0 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_TX_AGG 1 /*!< 1: Enable SDIO TX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#define CFG_SDIO_RX_AGG 1 /*!< 1: Enable SDIO RX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#if (CFG_SDIO_RX_AGG == 1) && (CFG_SDIO_INTR_ENHANCE == 0) - #error "CFG_SDIO_INTR_ENHANCE should be 1 once CFG_SDIO_RX_AGG equals to 1" -#elif (CFG_SDIO_INTR_ENHANCE == 1 || CFG_SDIO_RX_ENHANCE == 1) && (CFG_SDIO_RX_AGG == 0) - #error "CFG_SDIO_RX_AGG should be 1 once CFG_SDIO_INTR_ENHANCE and/or CFG_SDIO_RX_ENHANCE equals to 1" -#endif - -#define CFG_SDIO_MAX_RX_AGG_NUM 0 /*!< 1: Setting the maximum RX aggregation number - 0(default): no limited */ - -#ifdef WINDOWS_CE - #define CFG_SDIO_PATHRU_MODE 1 /*!< 1: Suport pass through (PATHRU) mode - 0: Disable */ -#else - #define CFG_SDIO_PATHRU_MODE 0 /*!< 0: Always disable if WINDOWS_CE is not defined */ -#endif - -#define CFG_MAX_RX_ENHANCE_LOOP_COUNT 3 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Integration - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) - #define MT6620_FPGA_BWCS 0 - #define MT6620_FPGA_V5 0 - - #if (MT6620_FPGA_BWCS == 1) && (MT6620_FPGA_V5 == 1) - #error - #endif - - #if (MTK_WCN_HIF_SDIO == 1) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #elif !defined(LINUX) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #else - #define CFG_MULTI_ECOVER_SUPPORT 0 - #endif - - #define CFG_ENABLE_CAL_LOG 0 - #define CFG_REPORT_RFBB_VERSION 0 -#elif defined(MT5931) - -#define CFG_MULTI_ECOVER_SUPPORT 0 -#define CFG_ENABLE_CAL_LOG 0 -#define CFG_REPORT_RFBB_VERSION 0 - -#elif defined(MT6628) - -#define CFG_MULTI_ECOVER_SUPPORT 0 - -#define CFG_ENABLE_CAL_LOG 1 -#define CFG_REPORT_RFBB_VERSION 1 - -#endif - -#define CFG_CHIP_RESET_SUPPORT 1 - - -/*------------------------------------------------------------------------------ - * Flags for workaround - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) && (MT6620_FPGA_BWCS == 0) && (MT6620_FPGA_V5 == 0) - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#else - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#endif - -/*------------------------------------------------------------------------------ - * Flags for driver version - *------------------------------------------------------------------------------ - */ -#define CFG_DRV_OWN_VERSION ((UINT_16)((NIC_DRIVER_MAJOR_VERSION << 8) | (NIC_DRIVER_MINOR_VERSION))) -#define CFG_DRV_PEER_VERSION ((UINT_16)0x0000) - - -/*------------------------------------------------------------------------------ - * Flags for TX path which are OS dependent - *------------------------------------------------------------------------------ - */ -/*! NOTE(Kevin): If the Network buffer is non-scatter-gather like structure(without - * NETIF_F_FRAGLIST in LINUX), then we can set CFG_TX_BUFFER_IS_SCATTER_LIST to "0" - * for zero copy TX packets. - * For scatter-gather like structure, we set "1", driver will do copy frame to - * internal coalescing buffer before write it to FIFO. - */ -#if defined(LINUX) - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 /*!< 1: Do frame copy before write to TX FIFO. - Used when Network buffer is scatter-gather. - 0(default): Do not copy frame */ -#else /* WINDOWS/WINCE */ - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 -#endif /* LINUX */ - - -#if CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE * NIC_TX_BUFF_SUM) -#else - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE) -#endif /* CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for TX path - *------------------------------------------------------------------------------ - */ - -/*! Maximum number of SW TX packet queue */ -#define CFG_TX_MAX_PKT_NUM 256 - -/*! Maximum number of SW TX CMD packet buffer */ -#define CFG_TX_MAX_CMD_PKT_NUM 32 - -/*! Maximum number of associated STAs */ -#define CFG_NUM_OF_STA_RECORD 20 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for RX path - *------------------------------------------------------------------------------ - */ - -/*! Max. descriptor number - sync. with firmware */ -#if CFG_SLT_SUPPORT -#define CFG_NUM_OF_RX0_HIF_DESC 42 -#else -#define CFG_NUM_OF_RX0_HIF_DESC 16 -#endif -#define CFG_NUM_OF_RX1_HIF_DESC 2 - -/*! Max. buffer hold by QM */ -#define CFG_NUM_OF_QM_RX_PKT_NUM 120 - -/*! Maximum number of SW RX packet buffer */ -#define CFG_RX_MAX_PKT_NUM ((CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC) * 3 \ - + CFG_NUM_OF_QM_RX_PKT_NUM) - -#define CFG_RX_REORDER_Q_THRESHOLD 8 - -#ifndef LINUX -#define CFG_RX_RETAINED_PKT_THRESHOLD (CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC + CFG_NUM_OF_QM_RX_PKT_NUM) -#else -#define CFG_RX_RETAINED_PKT_THRESHOLD 0 -#endif - -/*! Maximum RX packet size, if exceed this value, drop incoming packet */ -/* 7.2.3 Maganement frames */ -#define CFG_RX_MAX_PKT_SIZE ( 28 + 2312 + 12 /*HIF_RX_HEADER_T*/ ) //TODO: it should be 4096 under emulation mode - -/*! Minimum RX packet size, if lower than this value, drop incoming packet */ -#define CFG_RX_MIN_PKT_SIZE 10 /*!< 802.11 Control Frame is 10 bytes */ - -#if CFG_SDIO_RX_AGG - /* extra size for CS_STATUS and enhanced response */ - #define CFG_RX_COALESCING_BUFFER_SIZE ((CFG_NUM_OF_RX0_HIF_DESC + 1) \ - * CFG_RX_MAX_PKT_SIZE) -#else - #define CFG_RX_COALESCING_BUFFER_SIZE (CFG_RX_MAX_PKT_SIZE) -#endif - -/*! RX BA capability */ -#define CFG_NUM_OF_RX_BA_AGREEMENTS 8 -#define CFG_RX_BA_MAX_WINSIZE 16 -#define CFG_RX_BA_INC_SIZE 4 -#define CFG_RX_MAX_BA_TID_NUM 8 -#define CFG_RX_REORDERING_ENABLED 1 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for CMD/RESPONSE - *------------------------------------------------------------------------------ - */ -#define CFG_RESPONSE_POLLING_TIMEOUT 512 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Protocol Stack - *------------------------------------------------------------------------------ - */ -/*! Maximum number of BSS in the SCAN list */ -#define CFG_MAX_NUM_BSS_LIST 64 - -#define CFG_MAX_COMMON_IE_BUF_LEN (1500 * CFG_MAX_NUM_BSS_LIST) / 3 - -/*! Maximum size of IE buffer of each SCAN record */ -#define CFG_IE_BUFFER_SIZE 512 - -/*! Maximum number of STA records */ -#define CFG_MAX_NUM_STA_RECORD 32 - - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Power management - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FULL_PM 1 -#define CFG_ENABLE_WAKEUP_ON_LAN 0 - -#define CFG_INIT_POWER_SAVE_PROF ENUM_PSP_FAST_SWITCH - -#define CFG_INIT_ENABLE_PATTERN_FILTER_ARP 0 - -#define CFG_INIT_UAPSD_AC_BMP 0//(BIT(3) | BIT(2) | BIT(1) | BIT(0)) - -//#define CFG_SUPPORT_WAPI 0 -#define CFG_SUPPORT_WPS 1 -#define CFG_SUPPORT_WPS2 1 - -/*------------------------------------------------------------------------------ - * 802.11i RSN Pre-authentication PMKID cahce maximun number - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_PMKID_CACHE 16 /*!< max number of PMKID cache - 16(default) : The Max PMKID cache */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Ad-Hoc - *------------------------------------------------------------------------------ - */ -#define CFG_INIT_ADHOC_FREQ (2462000) -#define CFG_INIT_ADHOC_MODE AD_HOC_MODE_MIXED_11BG -#define CFG_INIT_ADHOC_BEACON_INTERVAL (100) -#define CFG_INIT_ADHOC_ATIM_WINDOW (0) - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Load Setup Default - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags for enable 802.11A Band setting - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Interrupt Process - *------------------------------------------------------------------------------ - */ -#if defined(_HIF_SDIO) && defined(WINDOWS_CE) - #define CFG_IST_LOOP_COUNT 1 -#else - #define CFG_IST_LOOP_COUNT 1 -#endif /* _HIF_SDIO */ - -#define CFG_INT_WRITE_CLEAR 0 - -#if defined(LINUX) -#define CFG_DBG_GPIO_PINS 0 /* if 1, use MT6516 GPIO pin to log TX behavior */ -#endif - -//2 Flags for Driver Debug Options -/*------------------------------------------------------------------------------ - * Flags of TX Debug Option. NOTE(Kevin): Confirm with SA before modifying following flags. - *------------------------------------------------------------------------------ - */ -#define CFG_DBG_MGT_BUF 1 /*!< 1: Debug statistics usage of MGMT Buffer - 0: Disable */ - -#define CFG_HIF_STATISTICS 0 - -#define CFG_HIF_RX_STARVATION_WARNING 0 - -#define CFG_STARTUP_DEBUG 0 - -#define CFG_RX_PKTS_DUMP 1 - -/*------------------------------------------------------------------------------ - * Flags of Firmware Download Option. - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FW_DOWNLOAD 1 - -#define CFG_ENABLE_FW_DOWNLOAD_ACK 1 -#define CFG_ENABLE_FW_ENCRYPTION 1 - -#if defined(MT6620) || defined(MT6628) - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 1 -#else - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 0 -#endif - - - -#if defined(MT6620) - #if MT6620_FPGA_BWCS - #define CFG_FW_LOAD_ADDRESS 0x10014000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10014001 - #elif MT6620_FPGA_V5 - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #else - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #endif -#elif defined(MT5931) - #define CFG_FW_LOAD_ADDRESS 0xFF900000 - #define CFG_FW_START_ADDRESS 0x00000000 -#elif defined(MT6628) - #define CFG_FW_LOAD_ADDRESS 0x00060000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x00060000 -#endif - - -/*------------------------------------------------------------------------------ - * Flags of Bluetooth-over-WiFi (BT 3.0 + HS) support - *------------------------------------------------------------------------------ - */ - -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_BT_OVER_WIFI 0 - #else - #define CFG_ENABLE_BT_OVER_WIFI 1 - #endif -#else - #define CFG_ENABLE_BT_OVER_WIFI 0 -#endif - -#define CFG_BOW_SEPARATE_DATA_PATH 1 - -#define CFG_BOW_PHYSICAL_LINK_NUM 4 - -#define CFG_BOW_TEST 0 - -#define CFG_BOW_LIMIT_AIS_CHNL 1 - -#define CFG_BOW_SUPPORT_11N 0 - -#define CFG_BOW_RATE_LIMITATION 1 - -/*------------------------------------------------------------------------------ - * Flags of Wi-Fi Direct support - *------------------------------------------------------------------------------ - */ -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 - #else - #define CFG_ENABLE_WIFI_DIRECT 1 - #define CFG_SUPPORT_802_11W 0 /*!< 0(default): Disable 802.11W */ - #endif -#else - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 /* Not support at WinXP */ -#endif - -#define CFG_SUPPORT_PERSISTENT_GROUP 0 - -#define CFG_TEST_WIFI_DIRECT_GO 0 - -#define CFG_TEST_ANDROID_DIRECT_GO 0 - -#define CFG_UNITEST_P2P 0 - -/* - * Enable cfg80211 option after Android 2.2(Froyo) is suggested, - * cfg80211 on linux 2.6.29 is not mature yet - */ -#define CFG_ENABLE_WIFI_DIRECT_CFG_80211 1 - -/*------------------------------------------------------------------------------ - * Configuration Flags (Linux Only) - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_EXT_CONFIG 0 - -/*------------------------------------------------------------------------------ - * Statistics Buffering Mechanism - *------------------------------------------------------------------------------ - */ -#if CFG_SUPPORT_PERFORMANCE_TEST -#define CFG_ENABLE_STATISTICS_BUFFERING 1 -#else -#define CFG_ENABLE_STATISTICS_BUFFERING 0 -#endif -#define CFG_STATISTICS_VALID_CYCLE 2000 -#define CFG_LINK_QUALITY_VALID_PERIOD 5000 - -/*------------------------------------------------------------------------------ - * Migration Option - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_ADHOC 1 -#define CFG_SUPPORT_AAA 1 - - -#if (defined(MT5931) && defined(LINUX)) -#define CFG_SUPPORT_BCM 1 -#define CFG_SUPPORT_BCM_BWCS 1 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 1 -#else -#define CFG_SUPPORT_BCM 0 -#define CFG_SUPPORT_BCM_BWCS 0 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 0 -#endif - -#define CFG_SUPPORT_RDD_TEST_MODE 0 - -#define CFG_SUPPORT_PWR_MGT 1 - -#define CFG_RSN_MIGRATION 1 - -#define CFG_PRIVACY_MIGRATION 1 - -#define CFG_ENABLE_HOTSPOT_PRIVACY_CHECK 1 - -#define CFG_MGMT_FRAME_HANDLING 1 - -#define CFG_MGMT_HW_ACCESS_REPLACEMENT 0 - -#if CFG_SUPPORT_PERFORMANCE_TEST - -#else - -#endif - -#define CFG_SUPPORT_AIS_5GHZ 1 -#define CFG_SUPPORT_BEACON_CHANGE_DETECTION 0 - -/*------------------------------------------------------------------------------ - * Option for NVRAM and Version Checking - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_NVRAM 1 -#define CFG_NVRAM_EXISTENCE_CHECK 1 -#define CFG_SW_NVRAM_VERSION_CHECK 1 -#define CFG_SUPPORT_NIC_CAPABILITY 1 - - -/*------------------------------------------------------------------------------ - * CONFIG_TITLE : Stress Test Option - * OWNER : Puff Wen - * Description : For stress test only. DO NOT enable it while normal operation - *------------------------------------------------------------------------------ - */ -#define CFG_STRESS_TEST_SUPPORT 0 - -/*------------------------------------------------------------------------------ - * Flags for LINT - *------------------------------------------------------------------------------ - */ -#define LINT_SAVE_AND_DISABLE /*lint -save -e* */ - -#define LINT_RESTORE /*lint -restore */ - -#define LINT_EXT_HEADER_BEGIN LINT_SAVE_AND_DISABLE - -#define LINT_EXT_HEADER_END LINT_RESTORE - -/*------------------------------------------------------------------------------ - * Flags of Features - *------------------------------------------------------------------------------ - */ - -#define CFG_SUPPORT_QOS 1 /* Enable/disable QoS TX, AMPDU */ -#define CFG_SUPPORT_AMPDU_TX 1 -#define CFG_SUPPORT_AMPDU_RX 1 -#define CFG_SUPPORT_TSPEC 0 /* Enable/disable TS-related Action frames handling */ -#define CFG_SUPPORT_UAPSD 1 -#define CFG_SUPPORT_UL_PSMP 0 - -#define CFG_SUPPORT_ROAMING 1 /* Roaming System */ -#define CFG_SUPPORT_SWCR 1 - -#define CFG_SUPPORT_ANTI_PIRACY 1 - -#define CFG_SUPPORT_OSC_SETTING 1 - -#if defined(MT5931) -#define CFG_SUPPORT_WHOLE_CHIP_RESET 1 /* for e3 chip only */ -#endif - -#define CFG_SUPPORT_P2P_RSSI_QUERY 0 - -#define CFG_SHOW_MACADDR_SOURCE 1 - -#define CFG_SUPPORT_802_11V 0 /* Support 802.11v Wireless Network Management */ -#define CFG_SUPPORT_802_11V_TIMING_MEASUREMENT 0 -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT == 1) && (CFG_SUPPORT_802_11V == 0) - #error "CFG_SUPPORT_802_11V should be 1 once CFG_SUPPORT_802_11V_TIMING_MEASUREMENT equals to 1" -#endif -#if (CFG_SUPPORT_802_11V == 0) -#define WNM_UNIT_TEST 0 -#endif - -#define CFG_DRIVER_COMPOSE_ASSOC_REQ 1 - -#define CFG_STRICT_CHECK_CAPINFO_PRIVACY 0 - -#define CFG_SUPPORT_WFD 1 - -#define CFG_SUPPORT_WFD_COMPOSE_IE 1 - -/*------------------------------------------------------------------------------ - * Flags of Packet Lifetime Profiling Mechanism - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_PKT_LIFETIME_PROFILE 1 - -#define CFG_ENABLE_PER_STA_STATISTICS 1 - -#define CFG_PRINT_RTP_PROFILE 0 -#define CFG_PRINT_RTP_SN_SKIP 0 - -/*------------------------------------------------------------------------------ - * Flags of bus error tolerance - *------------------------------------------------------------------------------ - */ -#define CFG_FORCE_RESET_UNDER_BUS_ERROR 0 - -/*------------------------------------------------------------------------------ - * Build Date Code Integration - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_BUILD_DATE_CODE 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CONFIG_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/debug.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/debug.h deleted file mode 100755 index 8c43af22fdee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/debug.h +++ /dev/null @@ -1,544 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/debug.h#1 $ -*/ - -/*! \file debug.h - \brief Definition of SW debugging level. - - In this file, it describes the definition of various SW debugging levels and - assert functions. -*/ - - - -/* -** $Log: debug.h $ - * - * 12 16 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * fixed the Windows DDK free build compiling error. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 07 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * . - * - * 09 23 2010 cp.wu - * NULL - * add BOW index for debugging message and passing compilation - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add one more debug moduel for P2P. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add debug module index for cnm and ais. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-29 19:47:50 GMT mtk01084 -** add emu catagory -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-17 18:12:04 GMT mtk01426 -** Don't use dynamic memory allocate for debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:29 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _DEBUG_H -#define _DEBUG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#ifndef BUILD_QA_DBG -#define BUILD_QA_DBG 0 -#endif - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" -#if CFG_SUPPORT_XLOG -#include "linux/xlog.h" -#endif - -extern UINT_8 aucDebugModule[]; -extern UINT_32 u4DebugModule; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define debug category (class): - * (1) ERROR (2) WARN (3) STATE (4) EVENT (5) TRACE (6) INFO (7) LOUD (8) TEMP - */ -#define DBG_CLASS_ERROR BIT(0) -#define DBG_CLASS_WARN BIT(1) -#define DBG_CLASS_STATE BIT(2) -#define DBG_CLASS_EVENT BIT(3) -#define DBG_CLASS_TRACE BIT(4) -#define DBG_CLASS_INFO BIT(5) -#define DBG_CLASS_LOUD BIT(6) -#define DBG_CLASS_TEMP BIT(7) -#define DBG_CLASS_MASK BITS(0,7) - - -#if defined(LINUX) -#define DBG_PRINTF_64BIT_DEC "lld" - -#else //Windows -#define DBG_PRINTF_64BIT_DEC "I64d" - -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Define debug module index */ -typedef enum _ENUM_DBG_MODULE_T { - DBG_INIT_IDX = 0, /* For driver initial */ - DBG_HAL_IDX, /* For HAL(HW) Layer */ - DBG_INTR_IDX, /* For Interrupt */ - DBG_REQ_IDX, - DBG_TX_IDX, - DBG_RX_IDX, - DBG_RFTEST_IDX, /* For RF test mode*/ - DBG_EMU_IDX, /* Developer specific */ - - DBG_SW1_IDX, /* Developer specific */ - DBG_SW2_IDX, /* Developer specific */ - DBG_SW3_IDX, /* Developer specific */ - DBG_SW4_IDX, /* Developer specific */ - - DBG_HEM_IDX, /* HEM */ - DBG_AIS_IDX, /* AIS */ - DBG_RLM_IDX, /* RLM */ - DBG_MEM_IDX, /* RLM */ - DBG_CNM_IDX, /* CNM */ - DBG_RSN_IDX, /* RSN */ - DBG_BSS_IDX, /* BSS */ - DBG_SCN_IDX, /* SCN */ - DBG_SAA_IDX, /* SAA */ - DBG_AAA_IDX, /* AAA */ - DBG_P2P_IDX, /* P2P */ - DBG_QM_IDX, /* QUE_MGT */ - DBG_SEC_IDX, /* SEC */ - DBG_BOW_IDX, /* BOW */ - DBG_WAPI_IDX, /* WAPI */ - DBG_ROAMING_IDX, /* ROAMING */ - - DBG_MODULE_NUM /* Notice the XLOG check */ -} ENUM_DBG_MODULE_T; - -//XLOG -//#define XLOG_DBG_MODULE_IDX 28 /* DBG_MODULE_NUM */ -//#if (XLOG_DBG_MODULE_IDX != XLOG_DBG_MODULE_IDX) -//#error "Please modify the DBG_MODULE_NUM and make sure this include at XLOG" -//#endif - -/* Define who owns developer specific index */ -#define DBG_YARCO_IDX DBG_SW1_IDX -#define DBG_KEVIN_IDX DBG_SW2_IDX -#define DBG_CMC_IDX DBG_SW3_IDX -#define DBG_GEORGE_IDX DBG_SW4_IDX - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Debug print format string for the OS system time */ -#define OS_SYSTIME_DBG_FORMAT "0x%08x" - -/* Debug print argument for the OS system time */ -#define OS_SYSTIME_DBG_ARGUMENT(systime) (systime) - -/* Debug print format string for the MAC Address */ -#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" - -/* Debug print argument for the MAC Address */ -#define MAC2STR(a) ((PUINT_8)a)[0], ((PUINT_8)a)[1], ((PUINT_8)a)[2], \ - ((PUINT_8)a)[3], ((PUINT_8)a)[4], ((PUINT_8)a)[5] - -/* The pre-defined format to dump the value of a varaible with its name shown. */ -#define DUMPVAR(variable, format) (#variable " = " format "\n", variable) - -/* The pre-defined format to dump the MAC type value with its name shown. */ -#define DUMPMACADDR(addr) (#addr " = " MACSTR "\n", MAC2STR(addr)) - - -/* Basiclly, we just do renaming of KAL functions although they should - * be defined as "Nothing to do" if DBG=0. But in some compiler, the macro - * syntax does not support #define LOG_FUNC(x,...) - * - * A caller shall not invoke these three macros when DBG=0. - */ -#define LOG_FUNC_TIME kalPrint -#define LOG_FUNC kalPrint - -#if DBG - - #define TMP_BUF_LEN 256 - #define TMP_WBUF_LEN (TMP_BUF_LEN * 2) - - extern PINT_16 g_wbuf_p; - extern PINT_8 g_buf_p; - - /* If __FUNCTION__ is already defined by compiler, we just use it. */ - #if defined(__FUNCTION__) - #define DEBUGFUNC(_Func) - #else - #define DEBUGFUNC(_Func) static const char __FUNCTION__[] = _Func; - #endif - - /* The following macros are used for future debug message. */ - /* TODO(Kevin): We should remove INITLOG/ERRORLOG/WARNLOG macro sooner or later */ - #define INITLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_TRACE) { \ - LOG_FUNC("%s: ", __FUNCTION__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define ERRORLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_ERROR) { \ - LOG_FUNC("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define WARNLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_WARN) { \ - LOG_FUNC("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - /*lint -save -e960 Multiple use of '#/##' */ - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - if (DBG_CLASS_##_Class == DBG_CLASS_ERROR) { \ - LOG_FUNC_TIME("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_WARN) { \ - LOG_FUNC_TIME("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_EVENT) { \ - } \ - else { \ - LOG_FUNC_TIME("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - LOG_FUNC _Fmt; \ - } \ - } - - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory8((PUINT_8) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory32((PUINT_32) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - /*lint -restore */ - - /*lint -save -e961 use of '#undef' is discouraged */ - #undef ASSERT - /*lint -restore */ - - #ifdef _lint - #define ASSERT(_exp) \ - { \ - if (!(_exp)) {do {} while (1);} \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - #endif /* _lint */ - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - - #define DISP_STRING(_str) _str - -#else /* !DBG */ - - #define DEBUGFUNC(_Func) - #define INITLOG(_Fmt) - #define ERRORLOG(_Fmt) - #define WARNLOG(_Fmt) - -#if defined(LINUX) - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - _Module##_##_Class##_LOGFUNC _Fmt; \ - } -#else - #define DBGLOG(_Module, _Class, _Fmt) -#endif - -#if CFG_SUPPORT_XLOG - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - _Module##_##_Class##_LOGFUNC (__FUNCTION__);\ - _Module##_##_Class##_LOGDUMP8(_StartAddr, _Length); \ - } -#else - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) -#endif - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) - - #undef ASSERT - -#if BUILD_QA_DBG - #if defined(LINUX) /* For debugging in Linux w/o GDB */ - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - #else - #ifdef WINDOWS_CE - #define UNICODE_TEXT(_msg) TEXT(_msg) - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - #endif /* WINDOWS_CE */ - #endif /* LINUX */ -#elif CFG_SUPPORT_XLOG - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - XLOG_FUNC(ANDROID_LOG_DEBUG, "Warning at %s:%d (%s)\n", __FUNCTION__, __LINE__, #_exp); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - XLOG_FUNC(ANDROID_LOG_DEBUG, "Warning at %s:%d (%s)\n", __FUNCTION__, __LINE__, #_exp); \ - XLOG_FUNC(ANDROID_LOG_DEBUG, _fmt); \ - } \ - } -#else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Warning at %s:%d (%s)\n", __FUNCTION__, __LINE__, #_exp); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Warning at %s:%d (%s)\n", __FUNCTION__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - } \ - } -#endif /* BUILD_QA_DBG */ - - #define DISP_STRING(_str) "" - -#endif /* DBG */ - -#if CFG_STARTUP_DEBUG - #if defined(LINUX) -#define DBGPRINTF kalPrint - #else -#define DBGPRINTF DbgPrint - #endif -#else -#define DBGPRINTF(...) -#endif - - -/* The following macro is used for debugging packed structures. */ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if DBG -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); - -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length - ); -#elif CFG_SUPPORT_XLOG -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); -#endif /* DBG */ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _DEBUG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/link.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/link.h deleted file mode 100755 index deefb031a2e5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/link.h +++ /dev/null @@ -1,414 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/link.h#1 $ -*/ - -/*! \file link.h - \brief Definition for simple doubly linked list operations. - - In this file we define the simple doubly linked list data structure and its - operation MACROs and INLINE functions. -*/ - - - -/* -** $Log: link.h $ - * - * 08 05 2010 yuche.tsai - * NULL - * Modify a MACRO of LINK_FOR_EACH_SAFE for compile error. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833] [MT6620 and MT5931] Driver migration - * . - * - * - * - * - * May 4 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add WIFI to BORA source control -** \main\maintrunk.MT5921\8 2008-10-16 15:57:11 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\7 2008-08-10 18:47:53 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\6 2007-12-11 00:09:00 GMT mtk01461 -** Add macro for checking valid list -** \main\maintrunk.MT5921\5 2007-11-13 14:27:01 GMT mtk01461 -** Add LINK_IS_INVALID macro -** Revision 1.1.1.1 2007/06/22 08:09:05 MTK01461 -** no message -** -*/ - -#ifndef _LINK_H -#define _LINK_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INVALID_LINK_POISON1 ((VOID *) 0x00100101) // May cause page fault & unalignment issue (data abort) -#define INVALID_LINK_POISON2 ((VOID *) 0x00100201) // Used to verify that nonbody uses non-initialized link entries. - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Simple Doubly Linked List Structures - Entry Part */ -typedef struct _LINK_ENTRY_T { - struct _LINK_ENTRY_T *prNext, *prPrev; -} LINK_ENTRY_T, *P_LINK_ENTRY_T; - -/* Simple Doubly Linked List Structures - List Part */ -typedef struct _LINK_T { - P_LINK_ENTRY_T prNext; - P_LINK_ENTRY_T prPrev; - UINT_32 u4NumElem; -} LINK_T, *P_LINK_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#if 0 // No one use it, temporarily mark it for [Lint - Info 773] -#define LINK_ADDR(rLink) { (P_LINK_ENTRY_T)(&(rLink)), (P_LINK_ENTRY_T)(&(rLink)), 0 } - -#define LINK_DECLARATION(rLink) \ - struct _LINK_T rLink = LINK_ADDR(rLink) -#endif - -#define LINK_INITIALIZE(prLink) \ - do { \ - ((P_LINK_T)(prLink))->prNext = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->prPrev = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->u4NumElem = 0; \ - } while (0) - -#define LINK_ENTRY_INITIALIZE(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)NULL; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)NULL; \ - } while (0) - -#define LINK_ENTRY_INVALID(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)INVALID_LINK_POISON1; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)INVALID_LINK_POISON2; \ - } while (0) - -#define LINK_IS_EMPTY(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)(prLink)) - -/* NOTE: We should do memory zero before any LINK been initiated, so we can check - * if it is valid before parsing the LINK. - */ -#define LINK_IS_INVALID(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)NULL) - -#define LINK_IS_VALID(prLink) (((P_LINK_T)(prLink))->prNext != (P_LINK_ENTRY_T)NULL) - - -#define LINK_ENTRY(ptr, type, member) ENTRY_OF(ptr, type, member) - -/* Insert an entry into a link list's head */ -#define LINK_INSERT_HEAD(prLink, prEntry) \ - { \ - linkAdd(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - - -/* Append an entry into a link list's tail */ -#define LINK_INSERT_TAIL(prLink, prEntry) \ - { \ - linkAddTail(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - -/* Peek head entry, but keep still in link list */ -#define LINK_PEEK_HEAD(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prNext, _type, _member) \ - ) - -/* Peek tail entry, but keep still in link list */ -#define LINK_PEEK_TAIL(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prPrev, _type, _member) \ - ) - -/* Get first entry from a link list */ -/* NOTE: We assume the link entry located at the beginning of "prEntry Type", - * so that we can cast the link entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define LINK_REMOVE_HEAD(prLink, prEntry, _P_TYPE) \ - { \ - ASSERT(prLink); \ - if (LINK_IS_EMPTY(prLink)) { \ - prEntry = (_P_TYPE)NULL; \ - } \ - else { \ - prEntry = (_P_TYPE)(((P_LINK_T)(prLink))->prNext); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } \ - } - -/* Assume the link entry located at the beginning of prEntry Type. - * And also decrease the total entry count. - */ -#define LINK_REMOVE_KNOWN_ENTRY(prLink, prEntry) \ - { \ - ASSERT(prLink); \ - ASSERT(prEntry); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } - -/* Iterate over a link list */ -#define LINK_FOR_EACH(prEntry, prLink) \ - for (prEntry = (prLink)->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prNext) - -/* Iterate over a link list backwards */ -#define LINK_FOR_EACH_PREV(prEntry, prLink) \ - for (prEntry = (prLink)->prPrev; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prPrev) - -/* Iterate over a link list safe against removal of link entry */ -#define LINK_FOR_EACH_SAFE(prEntry, prNextEntry, prLink) \ - for (prEntry = (prLink)->prNext, prNextEntry = prEntry->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = prNextEntry, prNextEntry = prEntry->prNext) - -/* Iterate over a link list of given type */ -#define LINK_FOR_EACH_ENTRY(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember)) - -/* Iterate backwards over a link list of given type */ -#define LINK_FOR_EACH_ENTRY_PREV(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prPrev, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prPrev, _TYPE, rMember)) - -/* Iterate over a link list of given type safe against removal of link entry */ -#define LINK_FOR_EACH_ENTRY_SAFE(prObj, prNextObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember), \ - prNextObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = prNextObj, \ - prNextObj = LINK_ENTRY(prNextObj->rMember.prNext, _TYPE, rMember)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prNew Pointer of new link head -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prNew; - prNew->prNext = prNext; - prNew->prPrev = prPrev; - prPrev->prNext = prNew; - - return; -} /* end of __linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry after the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, (P_LINK_ENTRY_T)prLink, prLink->prNext); - - return; -} /* end of linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry before the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAddTail ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, prLink->prPrev, (P_LINK_ENTRY_T)prLink); - - return; -} /* end of linkAddTail() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkDel ( - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prPrev; - prPrev->prNext = prNext; - - return; -} /* end of __linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list. -* NOTE: the entry is in an initial state. -* -* \param prEntry Specified link head(entry) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkDel ( - IN P_LINK_ENTRY_T prEntry - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - - LINK_ENTRY_INITIALIZE(prEntry); - - return; -} /* end of linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* after the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMove ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAdd(prEntry, prLink); - - return; -} /* end of linkMove() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* before the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMoveTail ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAddTail(prEntry, prLink); - - return; -} /* end of linkMoveTail() */ - -#endif /* _LINK_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/aa_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/aa_fsm.h deleted file mode 100755 index 1e7630c7c7ee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/aa_fsm.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/aa_fsm.h#1 $ -*/ - -/*! \file aa_fsm.h - \brief Declaration of functions and finite state machine for SAA/AAA Module. - - Declaration of functions and finite state machine for SAA/AAA Module. -*/ - - - -/* -** $Log: aa_fsm.h $ - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - - -#ifndef _AA_FSM_H -#define _AA_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Retry interval for retransmiting authentication-request MMPDU. */ -#define TX_AUTHENTICATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Retry interval for retransmiting association-request MMPDU. */ -#define TX_ASSOCIATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Wait for a response to a transmitted authentication-request MMPDU. */ -#define DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* Wait for a response to a transmitted association-request MMPDU. */ -#define DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* The maximum time to wait for JOIN process complete. */ -#define JOIN_FAILURE_TIMEOUT_BEACON_INTERVAL 20 // Beacon Interval, 20 * 100TU = 2 sec. - -/* Retry interval for next JOIN request. */ -#define JOIN_RETRY_INTERVAL_SEC 10 // Seconds - -/* Maximum Retry Count for accept a JOIN request. */ -#define JOIN_MAX_RETRY_FAILURE_COUNT 2 // Times - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AA_STATE_T { - AA_STATE_IDLE = 0, - SAA_STATE_SEND_AUTH1, - SAA_STATE_WAIT_AUTH2, - SAA_STATE_SEND_AUTH3, - SAA_STATE_WAIT_AUTH4, - SAA_STATE_SEND_ASSOC1, - SAA_STATE_WAIT_ASSOC2, - AAA_STATE_SEND_AUTH2, - AAA_STATE_SEND_AUTH4, // We may not use, because P2P GO didn't support WEP and 11r - AAA_STATE_SEND_ASSOC2, - AA_STATE_RESOURCE, // A state for debugging the case of out of msg buffer. - AA_STATE_NUM -} ENUM_AA_STATE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in saa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ); - -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in aaa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AA_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/ais_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/ais_fsm.h deleted file mode 100755 index 89f76530e6c6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/ais_fsm.h +++ /dev/null @@ -1,692 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/ais_fsm.h#1 $ -*/ - -/*! \file ais_fsm.h - \brief Declaration of functions and finite state machine for AIS Module. - - Declaration of functions and finite state machine for AIS Module. -*/ - - - -/* -** $Log: ais_fsm.h $ - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 04 25 2011 cp.wu - * [WCXRP00000676] [MT6620 Wi-Fi][Driver] AIS to reduce request channel period from 5 seconds to 2 seconds - * channel interval for joining is shortened to 2 seconds to avoid interruption of concurrent operating network. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 23 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * reduce the backgroud ssid idle time min and max value - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Media disconnect indication and related postpone functions - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventJoinComplete() - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM for aisFsmTest() - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of aisFsmInit() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _AIS_FSM_H -#define _AIS_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define AIS_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define AIS_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define AIS_IBSS_ALONE_TIMEOUT_SEC 20 // seconds - -#define AIS_BEACON_TIMEOUT_COUNT_ADHOC 30 -#define AIS_BEACON_TIMEOUT_COUNT_INFRA 10 -#define AIS_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define AIS_BEACON_MAX_TIMEOUT_TU 100 -#define AIS_BEACON_MIN_TIMEOUT_TU 5 -#define AIS_BEACON_MAX_TIMEOUT_VALID TRUE -#define AIS_BEACON_MIN_TIMEOUT_VALID TRUE - -#define AIS_BMC_MAX_TIMEOUT_TU 100 -#define AIS_BMC_MIN_TIMEOUT_TU 5 -#define AIS_BMC_MAX_TIMEOUT_VALID TRUE -#define AIS_BMC_MIN_TIMEOUT_VALID TRUE - -#define AIS_JOIN_CH_GRANT_THRESHOLD 10 -#define AIS_JOIN_CH_REQUEST_INTERVAL 2000 - -#define AIS_SCN_DONE_TIMEOUT_SEC 5 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AIS_STATE_T { - AIS_STATE_IDLE = 0, - AIS_STATE_SEARCH, - AIS_STATE_SCAN, - AIS_STATE_ONLINE_SCAN, - AIS_STATE_LOOKING_FOR, - AIS_STATE_WAIT_FOR_NEXT_SCAN, - AIS_STATE_REQ_CHANNEL_JOIN, - AIS_STATE_JOIN, - AIS_STATE_IBSS_ALONE, - AIS_STATE_IBSS_MERGE, - AIS_STATE_NORMAL_TR, - AIS_STATE_DISCONNECTING, - AIS_STATE_NUM -} ENUM_AIS_STATE_T; - - -typedef struct _MSG_AIS_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; -} MSG_AIS_ABORT_T, *P_MSG_AIS_ABORT_T; - - -typedef struct _MSG_AIS_IBSS_PEER_FOUND_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - BOOLEAN fgIsMergeIn; /* TRUE: Merge In, FALSE: Merge Out */ - P_STA_RECORD_T prStaRec; -} MSG_AIS_IBSS_PEER_FOUND_T, *P_MSG_AIS_IBSS_PEER_FOUND_T; - -typedef enum _ENUM_AIS_REQUEST_TYPE_T { - AIS_REQUEST_SCAN, - AIS_REQUEST_RECONNECT, - AIS_REQUEST_ROAMING_SEARCH, - AIS_REQUEST_ROAMING_CONNECT, - AIS_REQUEST_NUM -} ENUM_AIS_REQUEST_TYPE_T; - -typedef struct _AIS_REQ_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_AIS_REQUEST_TYPE_T eReqType; -} AIS_REQ_HDR_T, *P_AIS_REQ_HDR_T; - - -typedef struct _AIS_FSM_INFO_T { - ENUM_AIS_STATE_T ePreviousState; - ENUM_AIS_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - -#if CFG_SUPPORT_ROAMING - BOOLEAN fgIsRoamingScanPending; -#endif /* CFG_SUPPORT_ROAMING */ - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - P_STA_RECORD_T prTargetStaRec; /* For JOIN Abort */ - - UINT_32 u4SleepInterval; - - TIMER_T rBGScanTimer; - - TIMER_T rIbssAloneTimer; - - TIMER_T rIndicationOfDisconnectTimer; - - TIMER_T rJoinTimeoutTimer; - - - TIMER_T rScanDoneTimer; - - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfScanReq; - - UINT_32 u4ChGrantedInterval; - - UINT_8 ucConnTrialCount; - - UINT_8 ucScanSSIDLen; - UINT_8 aucScanSSID[ELEM_MAX_LEN_SSID]; - - UINT_32 u4ScanIELength; - UINT_8 aucScanIEBuf[MAX_IE_LENGTH]; - - /* Pending Request List */ - LINK_T rPendingReqList; - -} AIS_FSM_INFO_T, *P_AIS_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define aisChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState = (_eNewMediaState)); - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ); - -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Handling for Ad-Hoc Network */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/*----------------------------------------------------------------------------*/ -/* Handling of Incoming Mailbox Message from CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -/*----------------------------------------------------------------------------*/ -/* Generating Outgoing Mailbox Message to CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Indication */ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ); - -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -/*----------------------------------------------------------------------------*/ -/* Disconnection Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -#if CFG_SUPPORT_ROAMING -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ); - -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ); - -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); -#endif /*CFG_SUPPORT_ROAMING */ - -/*----------------------------------------------------------------------------*/ -/* Timeout Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventScanDoneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ); - -/*----------------------------------------------------------------------------*/ -/* Internal State Checking */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ); - -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ); - -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ); - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -VOID -aisTest ( - VOID - ); -#endif /* CFG_TEST_MGMT_FSM */ -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AIS_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/assoc.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/assoc.h deleted file mode 100755 index 1dbb06e73f1c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/assoc.h +++ /dev/null @@ -1,147 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/assoc.h#1 $ -*/ - -/*! \file assoc.h - \brief This file contains the ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: assoc.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add assocCheckTxReAssocRespFrame() proto type for P2P usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _ASSOC_H -#define _ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in assoc.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckTxReAssocRespFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ); - -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ASSOC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/auth.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/auth.h deleted file mode 100755 index 6a8bf18b063b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/auth.h +++ /dev/null @@ -1,175 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/auth.h#1 $ -*/ - -/*! \file auth.h - \brief This file contains the authentication REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: auth.h $ - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _AUTH_H -#define _AUTH_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in auth.c */ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ); - -#if !CFG_SUPPORT_AAA -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ); -#else -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ); -#endif /* CFG_SUPPORT_AAA */ - -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ); - -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ); - -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ); - -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AUTH_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/bow_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/bow_fsm.h deleted file mode 100755 index 2e63f9131163..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/bow_fsm.h +++ /dev/null @@ -1,190 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/bow_fsm.h#1 $ -*/ - -/*! \file bow_fsm.h - \brief Declaration of functions and finite state machine for BOW Module. - - Declaration of functions and finite state machine for BOW Module. -*/ - - - -/* -** $Log: bow_fsm.h $ - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add channel previledge into _BOW_FSM_INFO_T. - * - * 09 16 2010 chinghwa.yu - * NULL - * update bowChangeMediaState. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - */ - -#ifndef _BOW_FSM_H -#define _BOW_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOW_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define BOW_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define BOW_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define BOW_BEACON_TIMEOUT_COUNT_STARTING 10 -#define BOW_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define BOW_BEACON_MAX_TIMEOUT_TU 100 -#define BOW_BEACON_MIN_TIMEOUT_TU 5 -#define BOW_BEACON_MAX_TIMEOUT_VALID TRUE -#define BOW_BEACON_MIN_TIMEOUT_VALID TRUE - -#define BOW_BMC_MAX_TIMEOUT_TU 100 -#define BOW_BMC_MIN_TIMEOUT_TU 5 -#define BOW_BMC_MAX_TIMEOUT_VALID TRUE -#define BOW_BMC_MIN_TIMEOUT_VALID TRUE - -#define BOW_JOIN_CH_GRANT_THRESHOLD 10 -#define BOW_JOIN_CH_REQUEST_INTERVAL 2000 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_BOW_STATE_T { - BOW_STATE_IDLE = 0, - BOW_STATE_SEARCH, - BOW_STATE_SCAN, - BOW_STATE_ONLINE_SCAN, - BOW_STATE_LOOKING_FOR, - BOW_STATE_WAIT_FOR_NEXT_SCAN, - BOW_STATE_REQ_CHANNEL_JOIN, - BOW_STATE_REQ_CHANNEL_ALONE, - BOW_STATE_REQ_CHANNEL_MERGE, - BOW_STATE_JOIN, - BOW_STATE_IBSS_ALONE, - BOW_STATE_IBSS_MERGE, - BOW_STATE_NORMAL_TR, - BOW_STATE_NUM -} ENUM_BOW_STATE_T; - -typedef struct _BOW_FSM_INFO_T { - ENUM_BOW_STATE_T ePreviousState; - ENUM_BOW_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - /* Channel Privilege */ - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - BOOLEAN fgIsScanPending; - UINT_32 u4ChGrantedInterval; - - - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - UINT_16 u2BeaconInterval; - - ENUM_BOW_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - ENUM_BOW_STATE_T eForwardState; /* Step to next state if ACTION frame is TX successfully. */ - - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - UINT_8 aucPeerAddress[6]; - - UINT_8 ucRole; - - BOOLEAN fgSupportQoS; - - BOOLEAN fgIsRsponseProbe; /* Indicate if BOW can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfScnMsg; - UINT_8 ucSeqNumOfScanReq; - - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - - /* Timer */ - TIMER_T rStartingBeaconTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rStartingDiscoveryTimer; - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - TIMER_T rIndicationOfDisconnectTimer; - TIMER_T rChGrantedTimer; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - -} BOW_FSM_INFO_T, *P_BOW_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define bowChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].eConnectionState = (_eNewMediaState)); - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/bss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/bss.h deleted file mode 100755 index b7ff943c2763..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/bss.h +++ /dev/null @@ -1,353 +0,0 @@ -/* -** $Id: @(#) bss.h -*/ - -/*! \file "bss.h" - \brief In this file we define the function prototype used in BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - - - -/* -** $Log: bss.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 01 31 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * Extend TIM PVB, from 2 to 3 octets. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 12 2010 kevin.huang - * NULL - * Update bssProcessProbeRequest() and bssSendBeaconProbeResponse() declarations - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add CTRL FLAGS for Probe Response. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Remove unused typedef. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _BSS_H -#define _BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//NOTE(Kevin): change define for george -//#define MAX_LEN_TIM_PARTIAL_BMP (((MAX_ASSOC_ID + 1) + 7) / 8) /* Required bits = (MAX_ASSOC_ID + 1) */ -#define MAX_LEN_TIM_PARTIAL_BMP ((CFG_STA_REC_NUM + 7) / 8) /* reserve length greater than maximum size of STA_REC */ //obsoleted: Assume we only use AID:1~15 - -/* CTRL FLAGS for Probe Response */ -#define BSS_PROBE_RESP_USE_P2P_DEV_ADDR BIT(0) -#define BSS_PROBE_RESP_INCLUDE_P2P_IE BIT(1) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define bssAssignAssocID(_prStaRec) ((_prStaRec)->ucIndex + 1) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ); - -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ); - -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ); - -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ); - -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ); - -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ); - -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ); - - -/*link function to p2p module for txBcnIETable*/ - -/* WMM-2.2.2 WMM ACI to AC coding */ -typedef enum _ENUM_ACI_T { - ACI_BE = 0, - ACI_BK = 1, - ACI_VI = 2, - ACI_VO = 3, - ACI_NUM -} ENUM_ACI_T, *P_ENUM_ACI_T; - -typedef enum _ENUM_AC_PRIORITY_T { - AC_BK_PRIORITY = 0, - AC_BE_PRIORITY, - AC_VI_PRIORITY, - AC_VO_PRIORITY -} ENUM_AC_PRIORITY_T, *P_ENUM_AC_PRIORITY_T; - - -#endif /* _BSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm.h deleted file mode 100755 index ec41a1155427..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm.h +++ /dev/null @@ -1,323 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1 $ -*/ - -/*! \file "cnm.h" - \brief -*/ - - - -/* -** $Log: cnm.h $ - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Need bandwidth info when requesting channel privilege - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add prototype of cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_H -#define _CNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_CH_REQ_TYPE_T { - CH_REQ_TYPE_JOIN, - CH_REQ_TYPE_P2P_LISTEN, - - CH_REQ_TYPE_NUM -} ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T; - -typedef struct _MSG_CH_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} MSG_CH_REQ_T, *P_MSG_CH_REQ_T; - -typedef struct _MSG_CH_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; -} MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T; - -typedef struct _MSG_CH_GRANT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4GrantInterval; /* In unit of ms */ -} MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T; - -typedef struct _MSG_CH_REOCVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; -} MSG_CH_RECOVER_T, *P_MSG_CH_RECOVER_T; - - -typedef struct _CNM_INFO_T { - UINT_32 u4Reserved; -} CNM_INFO_T, *P_CNM_INFO_T; - -#if CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -typedef struct _DEVICE_TYPE_T { - UINT_16 u2CategoryId; /* Category ID */ - UINT_8 aucOui[4]; /* OUI */ - UINT_16 u2SubCategoryId; /* Sub Category ID */ -} __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T, *P_DEVICE_TYPE_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ); - -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ); - -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ); - -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -cnmMsgDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == - OFFSET_OF(MSG_CH_RECOVER_T,rMsgHdr)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucNetTypeIndex) == - OFFSET_OF(MSG_CH_RECOVER_T,ucNetTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucTokenID) == - OFFSET_OF(MSG_CH_RECOVER_T,ucTokenID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucPrimaryChannel) == - OFFSET_OF(MSG_CH_RECOVER_T,ucPrimaryChannel)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfSco) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfSco)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfBand) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfBand)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eReqType) == - OFFSET_OF(MSG_CH_RECOVER_T,eReqType)); - - return; -} -#endif /* _lint */ - -#endif /* _CNM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_mem.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_mem.h deleted file mode 100755 index e620a1d95a6b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_mem.h +++ /dev/null @@ -1,1165 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm_mem.h#1 $ -*/ - -/*! \file "cnm_mem.h" - \brief In this file we define the structure of the control unit of - packet buffer and MGT/MSG Memory Buffer. -*/ - - - -/* -** $Log: cnm_mem.h $ - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add per STA flow control when STA is in PS mode - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error for P2P related defination. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related fields. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [BORA00000678] [MT6620]WiFi LP integration - * 1. add u8TimeStamp in MSDU_INFO - * 2. move fgIsRxTSFUpdated/fgIsTxTSFUpdated from static to BSS_INFO - * 3. add new member for supporting PM in STA_RECORD, which is for AP PS mode - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 19 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fixed MAC RX Desc be overwritten issue - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 10 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support Rx header translation for A-MSDU subframe - * - * 05 07 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * add more sanity check about setting timer - * - * 04 29 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * modify the compiling flag for RAM usage - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * Added per-TID SN cache in STA_REC - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 11 2010 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * . - * - * 03 05 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove Emulation definition - * - * 03 04 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * eliminate HIF_EMULATION in cnm_mem.h - * - * 03 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add cnmStaRecChangeState() declaration. - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning for some emulation flags - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 10 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Renamed MSDU_INFO.ucFixedRateIndex as MSDU_INFO.ucFixedRateCode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 02 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added SN info in MSDU_INFO_T - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) surpress debug message emitted from hal_hif.c - * 2) add two set of field for recording buffer process time - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1. move wifi task initialization from wifi_task.c(rom) to wifi_init.c (TCM) for integrating F/W download later - * * * * * 2. WIFI_Event_Dispatcher() prototype changed to return to suspend mode from normal operation mode - * * * * * 2. HIF emulation logic revised - * - * 12 29 2009 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * .Using global buffer declaring by SD1 instead of using another one. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * MQM: BA handling - * * TXM: Macros updates - * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 23 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * allocating SRAM for emulation purpose by ruducing MEM_BANK3_BUF_SZ - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove individual DATA_BUF_BLOCK_NUM definition for emulation compiling flagsu1rwduu`wvpghlqg|fh+fmdkb - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 17 2009 george.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 17 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified the DATA_BLOCK_SIZE from 1620 to 2048 - * - * Dec 16 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_SEC_EMULATION flag - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap to sta record - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the buffer for key handshake 1x and cmd key order issue - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the tx call back function proto type to typedef.h - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and modify variable in STA_RECORD_T - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the port block flag - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add variables to STA_RECORD_T for assoc/auth - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the value of STA_WAIT_QUEUE_NUM (from 7 to 5) - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed u2FrameLength from SW_RFB - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed indenting - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Updated MSDU_INFO and SW_RFB - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * update the variable for security - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove the variable to make the compiler ok - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the variable for security module - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo in define of MSG_BUF_BLOCK_SIZE - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Let typedef STA_REC_T precede typedef MSDU_INFO_T and SW_RFB_T - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified MSDU_INFO and STA_REC for TXM and MQM - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename STA_REC_T to STA_RECORD_T and add ucIndex member - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Make sure ucBufferSource the same offset in MSDU_INFO and SW_RFB - * - * Nov 6 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add draft content of MSDU_INFO_T and SW_RFB_T - * - * Oct 30 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 21 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_RX_EMULATION flag - * - * Oct 20 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 9 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added field ucTC to MSDU_INFO_T and field pucHifRxPacket to SW_RFB_T - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_MEM_H -#define _CNM_MEM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef POWER_OF_2 -#define POWER_OF_2(n) BIT(n) -#endif - -/* Size of a basic management buffer block in power of 2 */ -#define MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2 7 /* 7 to the power of 2 = 128 */ -#define MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2 5 /* 5 to the power of 2 = 32 */ - -/* Size of a basic management buffer block */ -#define MGT_BUF_BLOCK_SIZE POWER_OF_2(MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCK_SIZE POWER_OF_2(MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Total size of (n) basic management buffer blocks */ -#define MGT_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Number of management buffer block */ -#define MAX_NUM_OF_BUF_BLOCKS 32 /* Range: 1~32 */ - -/* Size of overall management frame buffer */ -#define MGT_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MGT_BUF_BLOCK_SIZE) -#define MSG_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MSG_BUF_BLOCK_SIZE) - - -/* STA_REC related definitions */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE -#define STA_WAIT_QUEUE_NUM 5 /* Number of SW queues in each STA_REC: AC0~AC4 */ -#define SC_CACHE_INDEX_NUM 5 /* Number of SC caches in each STA_REC: AC0~AC4 */ - - -/* P2P related definitions */ -#ifdef CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if ((MAX_NUM_OF_BUF_BLOCKS > 32) || (MAX_NUM_OF_BUF_BLOCKS <= 0)) - #error > #define MAX_NUM_OF_MGT_BUF_BLOCKS : Out of boundary ! -#elif MAX_NUM_OF_BUF_BLOCKS > 16 - typedef UINT_32 BUF_BITMAP; -#elif MAX_NUM_OF_BUF_BLOCKS > 8 - typedef UINT_16 BUF_BITMAP; -#else - typedef UINT_8 BUF_BITMAP; -#endif /* MAX_NUM_OF_MGT_BUF_BLOCKS */ - - -/* Control variable of TX management memory pool */ -typedef struct _BUF_INFO_T { - PUINT_8 pucBuf; - -#if CFG_DBG_MGT_BUF - UINT_32 u4AllocCount; - UINT_32 u4FreeCount; - UINT_32 u4AllocNullCount; -#endif /* CFG_DBG_MGT_BUF */ - - BUF_BITMAP rFreeBlocksBitmap; - UINT_8 aucAllocatedBlockNum[MAX_NUM_OF_BUF_BLOCKS]; -} BUF_INFO_T, *P_BUF_INFO_T; - - -/* Wi-Fi divides RAM into three types - * MSG: Mailbox message (Small size) - * BUF: HW DMA buffers (HIF/MAC) - */ -typedef enum _ENUM_RAM_TYPE_T { - RAM_TYPE_MSG = 0, - RAM_TYPE_BUF -} ENUM_RAM_TYPE_T, P_ENUM_RAM_TYPE_T; - -typedef enum _ENUM_BUFFER_SOURCE_T { - BUFFER_SOURCE_HIF_TX0 =0, - BUFFER_SOURCE_HIF_TX1, - BUFFER_SOURCE_MAC_RX, - BUFFER_SOURCE_MNG, - BUFFER_SOURCE_BCN, - BUFFER_SOURCE_NUM -} ENUM_BUFFER_SOURCE_T, *P_ENUM_BUFFER_SOURCE_T; - - -typedef enum _ENUM_SEC_STATE_T { - SEC_STATE_INIT, - SEC_STATE_INITIATOR_PORT_BLOCKED, - SEC_STATE_RESPONDER_PORT_BLOCKED, - SEC_STATE_CHECK_OK, - SEC_STATE_SEND_EAPOL, - SEC_STATE_SEND_DEAUTH, - SEC_STATE_COUNTERMEASURE, - SEC_STATE_NUM -} ENUM_SEC_STATE_T; - -typedef struct _TSPEC_ENTRY_T { - UINT_8 ucStatus; - UINT_8 ucToken; /* Dialog Token in ADDTS_REQ or ADDTS_RSP */ - UINT_16 u2MediumTime; - UINT_32 u4TsInfo; - //PARAM_QOS_TS_INFO rParamTsInfo; - /* Add other retained QoS parameters below */ -} TSPEC_ENTRY_T, *P_TSPEC_ENTRY_T, TSPEC_TABLE_ENTRY_T, *P_TSPEC_TABLE_ENTRY_T; - -typedef struct _SEC_INFO_T { - - ENUM_SEC_STATE_T ePreviousState; - ENUM_SEC_STATE_T eCurrentState; - - BOOL fg2nd1xSend; - BOOL fgKeyStored; - - UINT_8 aucStoredKey[64]; - - BOOL fgAllowOnly1x; -} SEC_INFO_T, *P_SEC_INFO_T; - -#define MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS 3 - -#define UPDATE_BSS_RSSI_INTERVAL_SEC 3 // Seconds - -/* Fragment information structure */ -typedef struct _FRAG_INFO_T { - UINT_16 u2NextFragSeqCtrl; - PUINT_8 pucNextFragStart; - P_SW_RFB_T pr1stFrag; - OS_SYSTIME rReceiveLifetimeLimit; /* The receive time of 1st fragment */ -} FRAG_INFO_T, *P_FRAG_INFO_T; - - -/* Define STA record structure */ -struct _STA_RECORD_T { - LINK_ENTRY_T rLinkEntry; - UINT_8 ucIndex; /* Not modify it except initializing */ - - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 aucMacAddr[MAC_ADDR_LEN]; /* MAC address */ - - /* SAA/AAA */ - ENUM_AA_STATE_T eAuthAssocState; /* Store STATE Value used in SAA/AAA */ - UINT_8 ucAuthAssocReqSeqNum; - - ENUM_STA_TYPE_T eStaType; /* Indicate the role of this STA in - * the network (for example, P2P GO) - */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucStaState; /* STATE_1,2,3 */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (may deduced from received BSS_DESC_T) - */ - UINT_8 ucDesiredPhyTypeSet; /* The match result by AND operation of peer's - * PhyTypeSet and ours. - */ - BOOLEAN fgHasBasicPhyType; /* A flag to indicate a Basic Phy Type which - * is used to generate some Phy Attribute IE - * (e.g. capability, MIB) during association. - */ - UINT_8 ucNonHTBasicPhyType; /* The Basic Phy Type choosen among the - * ucDesiredPhyTypeSet. - */ - - UINT_16 u2CapInfo; /* For Infra Mode, to store Capability Info. from Association Resp(SAA). - * For AP Mode, to store Capability Info. from Association Req(AAA). - */ - UINT_16 u2AssocId; /* For Infra Mode, to store AID from Association Resp(SAA). - * For AP Mode, to store the Assigned AID(AAA). - */ - - UINT_16 u2ListenInterval; /* Listen Interval from STA(AAA) */ - - UINT_16 u2DesiredNonHTRateSet; /* Our Current Desired Rate Set after - * match with STA's Operational Rate Set - */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of peer BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of peer BSS */ - - BOOLEAN fgIsMerging; /* For IBSS Mode, to indicate that Merge is ongoing */ - - BOOLEAN fgDiagnoseConnection; /* For Infra/AP Mode, to diagnose the Connection with - * this peer by sending ProbeReq/Null frame */ - - /*------------------------------------------------------------------------------------------*/ - /* 802.11n HT capabilities when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT) is true */ - /* They have the same definition with fields of information element */ - /*------------------------------------------------------------------------------------------*/ - UINT_8 ucMcsSet; /* MCS0~7 rate set of peer BSS */ - BOOLEAN fgSupMcs32; /* MCS32 is supported by peer BSS */ - UINT_16 u2HtCapInfo; /* HT cap info field by HT cap IE */ - UINT_8 ucAmpduParam; /* Field A-MPDU Parameters in HT cap IE */ - UINT_16 u2HtExtendedCap; /* HT extended cap field by HT cap IE */ - UINT_32 u4TxBeamformingCap; /* TX beamforming cap field by HT cap IE */ - UINT_8 ucAselCap; /* ASEL cap field by HT cap IE */ - - UINT_8 ucRCPI; /* RCPI of peer */ - - UINT_8 ucDTIMPeriod; /* Target BSS's DTIM Period, we use this - * value for setup Listen Interval - * TODO(Kevin): TBD - */ - UINT_8 ucAuthAlgNum; /* For Infra/AP Mode, the Auth Alogrithm Num used in Authentication(SAA/AAA) */ - BOOLEAN fgIsReAssoc; /* For Infra/AP Mode, to indicate ReAssoc Frame was in used(SAA/AAA) */ - - UINT_8 ucTxAuthAssocRetryCount;/* For Infra Mode, the Retry Count of TX Auth/Assod Frame(SAA) */ - UINT_8 ucTxAuthAssocRetryLimit;/* For Infra Mode, the Retry Limit of TX Auth/Assod Frame(SAA) */ - - UINT_16 u2StatusCode; /* Status of Auth/Assoc Req */ - UINT_16 u2ReasonCode; /* Reason that been Deauth/Disassoc */ - - - P_IE_CHALLENGE_TEXT_T prChallengeText; /* Point to an allocated buffer for storing Challenge Text for Shared Key Authentication */ - - TIMER_T rTxReqDoneOrRxRespTimer;/* For Infra Mode, a timer used to send a timeout event - * while waiting for TX request done or RX response. - */ - - /*------------------------------------------------------------------------------------------*/ - /* Power Management related fields (for STA/ AP/ P2P/ BOW power saving mode) */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgSetPwrMgtBit; /* For Infra Mode, to indicate that outgoing frame need toggle - * the Pwr Mgt Bit in its Frame Control Field. - */ - - BOOLEAN fgIsInPS; /* For AP Mode, to indicate the client PS state(PM). - * TRUE: In PS Mode; FALSE: In Active Mode. */ - - BOOLEAN fgIsInPsPollSP; /* For Infra Mode, to indicate we've sent a PS POLL to AP and start - * the PS_POLL Service Period(LP) - */ - - BOOLEAN fgIsInTriggerSP; /* For Infra Mode, to indicate we've sent a Trigger Frame to AP and start - * the Delivery Service Period(LP) - */ - - UINT_8 ucBmpDeliveryAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucBmpTriggerAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucUapsdSp; /* Max SP length */ - - /*------------------------------------------------------------------------------------------*/ - - BOOLEAN fgIsRtsEnabled; - - OS_SYSTIME rUpdateTime; /* (4) System Timestamp of Successful TX and RX */ - - OS_SYSTIME rLastJoinTime; /* (4) System Timestamp of latest JOIN process */ - - UINT_8 ucJoinFailureCount; /* Retry Count of JOIN process */ - - LINK_T arStaWaitQueue[STA_WAIT_QUEUE_NUM]; /* For TXM to defer pkt forwarding to MAC TX DMA */ - - UINT_16 au2CachedSeqCtrl[TID_NUM + 1]; /* Duplicate removal for HT STA on a per-TID basis ("+1" is for MMPDU and non-QoS) */ - -#if 0 - /* RXM */ - P_RX_BA_ENTRY_T aprRxBaTable[TID_NUM]; - - /* TXM */ - P_TX_BA_ENTRY_T aprTxBaTable[TID_NUM]; -#endif - - FRAG_INFO_T rFragInfo[MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS]; - - SEC_INFO_T rSecInfo; /* The security state machine */ - - BOOLEAN fgPortBlock; /* The 802.1x Port Control flag */ - - BOOLEAN fgTransmitKeyExist; /* Unicast key exist for this STA */ - - UINT_8 ucWTEntry; - - BOOLEAN fgTxAmpduEn; /* Enable TX AMPDU for this Peer */ - BOOLEAN fgRxAmpduEn; /* Enable RX AMPDU for this Peer */ - - PUINT_8 pucAssocReqIe; - UINT_16 u2AssocReqIeLen; - /*------------------------------------------------------------------------------------------*/ - /* WMM/QoS related fields */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgIsQoS; /* If the STA is associated as a QSTA or QAP (for TX/RX) */ - BOOLEAN fgIsWmmSupported; /* If the peer supports WMM, set to TRUE (for association)*/ - BOOLEAN fgIsUapsdSupported; /* Set according to the scan result (for association) */ - - /*------------------------------------------------------------------------------------------*/ - /* P2P related fields */ - /*------------------------------------------------------------------------------------------*/ -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 u2DevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - - UINT_16 u2ConfigMethods; - - UINT_8 ucDeviceCap; - - UINT_8 ucSecondaryDevTypeCount; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT]; -#endif /* CFG_SUPPORT_P2P */ - - - /*------------------------------------------------------------------------------------------*/ - /* QM related fields */ - /*------------------------------------------------------------------------------------------*/ - - UINT_8 ucFreeQuota; /* Per Sta flow controal. Valid when fgIsInPS is TRUE. Chnage it for per Queue flow control */ - //UINT_8 aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES]; /* used in future */ - UINT_8 ucFreeQuotaForDelivery; - UINT_8 ucFreeQuotaForNonDelivery; -#if CFG_ENABLE_PKT_LIFETIME_PROFILE && CFG_ENABLE_PER_STA_STATISTICS - UINT_32 u4TotalTxPktsNumber; - UINT_32 u4TotalTxPktsTime; - UINT_32 u4MaxTxPktsTime; - UINT_32 u4ThresholdCounter; -#endif - -#if 1 - /*------------------------------------------------------------------------------------------*/ - /* To be removed, this is to make que_mgt compilation success only */ - /*------------------------------------------------------------------------------------------*/ - /* When this STA_REC is in use, set to TRUE. */ - BOOLEAN fgIsValid; - - /* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ - QUE_T arTxQueue[NUM_OF_PER_STA_TX_QUEUES]; - - /* When this STA is in PS Mode, set to TRUE. */ - //BOOLEAN fgIsPS; - - /* When this STA enters Power-Saving, FW will notify the driver with a Session ID */ - UINT_8 ucPsSessionID; - - BOOLEAN fgIsAp; - - /* Reorder Parameter reference table */ - P_RX_BA_ENTRY_T aprRxReorderParamRefTbl[CFG_RX_MAX_BA_TID_NUM]; -#endif - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - TIMINGMSMT_PARAM_T rWNMTimingMsmt; -#endif -}; - -#if 0 -/* use nic_tx.h instead */ -/* MSDU_INFO and SW_RFB structure */ -typedef struct _MSDU_INFO_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - /* TODO: move flags to ucControlFlag */ - - BOOLEAN fgIs1xFrame; /* Set to TRUE for 802.1x frame */ - - /* TXM: For TX Done handling, callback function & parameter (5) */ - BOOLEAN fgIsTxFailed; /* Set to TRUE if transmission failure */ - - PFN_TX_DONE_HANDLER pfTxDoneHandler; - - UINT_64 u8TimeStamp; /* record the TX timestamp */ - - /* TXM: For PS forwarding control (per-STA flow control) */ - UINT_8 ucPsForwardingType; /* Delivery-enabled, non-delivery-enabled, non-PS */ - UINT_8 ucPsSessionID; /* The Power Save session id for PS forwarding control*/ - - /* TXM: For MAC TX DMA operations */ - UINT_8 ucMacTxQueIdx; /* MAC TX queue: AC0-AC6, BCM, or BCN */ - BOOLEAN fgNoAck; /* Set to true if Ack is not requred for this packet */ - BOOLEAN fgBIP; /* Set to true if BIP is used for this packet */ - UINT_8 ucFragTotalCount; - UINT_8 ucFragFinishedCount; - UINT_16 u2FragThreshold; /* Fragmentation threshold without WLAN Header & FCS */ - BOOLEAN fgFixedRate; /* If a fixed rate is used, set to TRUE. */ - UINT_8 ucFixedRateCode; /* The rate code copied to MAC TX Desc */ - UINT_8 ucFixedRateRetryLimit; /* The retry limit when a fixed rate is used */ - BOOLEAN fgIsBmcQueueEnd; /* Set to true if this packet is the end of BMC */ - - /* TXM: For flushing ACL frames */ - UINT_16 u2PalLLH; /* 802.11 PAL LLH */ - //UINT_16 u2LLH; - UINT_16 u2ACLSeq; /* u2LLH+u2ACLSeq for AM HCI flush ACL frame */ - - /* TXM for retransmitting a flushed packet */ - BOOLEAN fgIsSnAssigned; - UINT_16 u2SequenceNumber; /* To remember the Sequence Control field of this MPDU */ - -} MSDU_INFO_T, *P_MSDU_INFO_T; -#endif - -#if 0 -/* nic_rx.h */ -typedef struct _SW_RFB_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - - /* For composing the HIF RX Header (TODO: move flags to ucControlFlag) */ - PUINT_8 pucHifRxPacket; /* Pointer to the Response packet to HIF RX0 or RX1 */ - UINT_16 u2HifRxPacketLength; - UINT_8 ucHeaderOffset; - UINT_8 ucHifRxPortIndex; - - UINT_16 u2SequenceControl; - BOOLEAN fgIsA4Frame; /* (For MAC RX packet parsing) set to TRUE if 4 addresses are present */ - BOOLEAN fgIsBAR; - BOOLEAN fgIsQoSData; - BOOLEAN fgIsAmsduSubframe; /* Set to TRUE for A-MSDU Subframe */ - - /* For HIF RX DMA Desc */ - BOOLEAN fgTUChecksumCheckRequired; - BOOLEAN fgIPChecksumCheckRequired; - UINT_8 ucEtherTypeOffset; - -} SW_RFB_T, *P_SW_RFB_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_MSDU_INFO_T -cnmMgtPktAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cnmMgtPktFree ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -cnmMemInit ( - IN P_ADAPTER_T prAdapter - ); - -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ); - -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ); - -VOID -cnmStaRecInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ); - -P_STA_RECORD_T -cnmStaRecAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex - ); - -VOID -cnmStaRecFree ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSyncToChip - ); - -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ); - -P_STA_RECORD_T -cnmGetStaRecByIndex ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucIndex - ); - -P_STA_RECORD_T -cnmGetStaRecByAddress ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex, - IN UINT_8 aucPeerMACAddress[] - ); - -VOID -cnmStaRecResetStatus ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -cnmStaRecChangeState ( - IN P_ADAPTER_T prAdapter, - IN OUT P_STA_RECORD_T prStaRec, - IN UINT_8 ucNewState - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -cnmMemDataTypeCheck ( - VOID - ) -{ -#if 0 - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == OFFSET_OF(SW_RFB_T,rLinkEntry)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucBuffer) == OFFSET_OF(SW_RFB_T,pucBuffer)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucBufferSource) == - OFFSET_OF(SW_RFB_T,ucBufferSource)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucMacHeader) == - OFFSET_OF(SW_RFB_T,pucMacHeader)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucMacHeaderLength) == - OFFSET_OF(SW_RFB_T,ucMacHeaderLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucPayload) == - OFFSET_OF(SW_RFB_T,pucPayload)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,u2PayloadLength) == - OFFSET_OF(SW_RFB_T,u2PayloadLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,prStaRec) == - OFFSET_OF(SW_RFB_T,prStaRec)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucNetworkTypeIndex) == - OFFSET_OF(SW_RFB_T,ucNetworkTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTID) == - OFFSET_OF(SW_RFB_T,ucTID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgIs802_11Frame) == - OFFSET_OF(SW_RFB_T,fgIs802_11Frame)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucControlFlag) == - OFFSET_OF(SW_RFB_T,ucControlFlag)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rArrivalTime) == - OFFSET_OF(SW_RFB_T,rArrivalTime)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTC) == - OFFSET_OF(SW_RFB_T,ucTC)); - -#if CFG_PROFILE_BUFFER_TRACING - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,eActivity[0]) == - OFFSET_OF(SW_RFB_T,eActivity[0])); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rActivityTime[0]) == - OFFSET_OF(SW_RFB_T,rActivityTime[0])); -#endif - -#if DBG && CFG_BUFFER_FREE_CHK - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgBufferInSource) == - OFFSET_OF(SW_RFB_T,fgBufferInSource)); -#endif - - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(STA_RECORD_T,rLinkEntry) == 0); - - return; -#endif -} -#endif /* _lint */ - -#endif /* _CNM_MEM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_scan.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_scan.h deleted file mode 100755 index b3d2993f801a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_scan.h +++ /dev/null @@ -1,206 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "cnm_scan.h" - \brief - -*/ - - - -/* -** $Log: cnm_scan.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of cnmScanInit() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_SCAN_H -#define _CNM_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define SCN_CHANNEL_DWELL_TIME_MIN_MSEC 12 -#define SCN_CHANNEL_DWELL_TIME_EXT_MSEC 98 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_FULL 3 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_FULL 1 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_PARTIAL 2 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_PARTIAL 1 - - -#define SCN_INTERLACED_CHANNEL_GROUPS_NUM 3 /* Used by partial scan */ - -#define SCN_PARTIAL_SCAN_NUM 3 - -#define SCN_PARTIAL_SCAN_IDLE_MSEC 100 - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* The type of Scan Source */ -typedef enum _ENUM_SCN_REQ_SOURCE_T { - SCN_REQ_SOURCE_HEM = 0, - SCN_REQ_SOURCE_NET_FSM, - SCN_REQ_SOURCE_ROAMING, /* ROAMING Module is independent of AIS FSM */ - SCN_REQ_SOURCE_OBSS, /* 2.4G OBSS scan */ - SCN_REQ_SOURCE_NUM -} ENUM_SCN_REQ_SOURCE_T, *P_ENUM_SCN_REQ_SOURCE_T; - -typedef enum _ENUM_SCAN_PROFILE_T { - SCAN_PROFILE_FULL = 0, - SCAN_PROFILE_PARTIAL, - SCAN_PROFILE_VOIP, - SCAN_PROFILE_FULL_2G4, - SCAN_PROFILE_NUM -} ENUM_SCAN_PROFILE_T, *P_ENUM_SCAN_PROFILE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -VOID -cnmScanInit ( - VOID - ); - -VOID -cnmScanRunEventScanRequest ( - IN P_MSG_HDR_T prMsgHdr - ); - -BOOLEAN -cnmScanRunEventScanAbort ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanProfileSelection ( - VOID - ); - -VOID -cnmScanProcessStart ( - VOID - ); - -VOID -cnmScanProcessStop ( - VOID - ); - -VOID -cnmScanRunEventReqAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanRunEventCancelAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanPartialScanTimeout ( - UINT_32 u4Param - ); - -VOID -cnmScanRunEventScnFsmComplete ( - IN P_MSG_HDR_T prMsgHdr - ); -#endif - - - -#endif /* _CNM_SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_timer.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_timer.h deleted file mode 100755 index b1ed2c6456ad..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/cnm_timer.h +++ /dev/null @@ -1,274 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm_timer.h#1 $ -*/ - -/*! \file cnm_timer.h - \brief Declaration of timer obj and related timer macro for setup time out - event. - - In this file we declare the timer object and provide several macro for - Protocol functional blocks to setup their own time out event. -*/ - - - -/* -** $Log: cnm_timer.h $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the copy time function - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix LINT warnning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_TIMER_H -#define _CNM_TIMER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#undef MSEC_PER_SEC -#define MSEC_PER_SEC 1000 -#undef USEC_PER_MSEC -#define USEC_PER_MSEC 1000 -#define USEC_PER_TU 1024 /* microsecond */ - -#define MSEC_PER_MIN (60 * MSEC_PER_SEC) - - -#define MGMT_MAX_TIMEOUT_INTERVAL ((UINT_32)0x7fffffff) - -#define WAKE_LOCK_MAX_TIME 5 /* Unit: sec */ - -/* If WAKE_LOCK_MAX_TIME is too large, the whole system may always keep awake - * because of periodic timer of OBSS scanning - */ -#if (WAKE_LOCK_MAX_TIME >= OBSS_SCAN_MIN_INTERVAL) - #error WAKE_LOCK_MAX_TIME is too large -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef VOID (*PFN_MGMT_TIMEOUT_FUNC)(P_ADAPTER_T, UINT_32); - -typedef struct _TIMER_T { - LINK_ENTRY_T rLinkEntry; - OS_SYSTIME rExpiredSysTime; - UINT_16 u2Minutes; - UINT_16 u2Reserved; - UINT_32 u4Data; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; -} TIMER_T, *P_TIMER_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Check if time "a" is before time "b" */ -/* In 32-bit variable, 0x00000001~0x7fffffff -> positive number, - * 0x80000000~0xffffffff -> negative number - */ -#define TIME_BEFORE_64bit(a,b) (a < b) - -#define TIME_BEFORE(a,b) ((UINT_32)((UINT_32)(a) - (UINT_32)(b)) > 0x7fffffff) - -/* #define TIME_BEFORE(a,b) ((INT_32)((INT_32)(b) - (INT_32)(a)) > 0) - * may cause UNexpect result between Free build and Check build for WinCE - */ - -#define TIME_AFTER(a,b) TIME_BEFORE(b,a) - -#define SYSTIME_TO_SEC(_systime) ((_systime) / KAL_HZ) -#define SEC_TO_SYSTIME(_sec) ((_sec) * KAL_HZ) - - -/* The macros to convert second & millisecond */ -#define MSEC_TO_SEC(_msec) ((_msec) / MSEC_PER_SEC) -#define SEC_TO_MSEC(_sec) ((UINT_32)(_sec) * MSEC_PER_SEC) - - -/* The macros to convert millisecond & microsecond */ -#define USEC_TO_MSEC(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_USEC(_msec) ((UINT_32)(_msec) * USEC_PER_MSEC) - - -/* The macros to convert TU & microsecond, TU & millisecond */ -#define TU_TO_USEC(_tu) ((_tu) * USEC_PER_TU) -#define TU_TO_MSEC(_tu) USEC_TO_MSEC( TU_TO_USEC(_tu) ) - - -/* The macros to convert TU & & OS system time, round up by 0.5 */ -#define TU_TO_SYSTIME(_tu) MSEC_TO_SYSTIME( TU_TO_MSEC(_tu) ) -#define SYSTIME_TO_TU(_systime) \ - ((SYSTIME_TO_USEC(_systime) + ((USEC_PER_TU / 2) - 1)) / USEC_PER_TU) - - -/* The macros to convert OS system time & microsecond */ -#define SYSTIME_TO_USEC(_systime) (SYSTIME_TO_MSEC(_systime) * USEC_PER_MSEC) - - -/* The macro to get the current OS system time */ -#define GET_CURRENT_SYSTIME(_systime_p) {*(_systime_p) = kalGetTimeTick();} - -/* The macro to copy the system time */ -#define COPY_SYSTIME(_destTime, _srcTime) (_destTime) = (_srcTime) - -/* The macro to get the system time difference between t1 and t2 (t1 - t2) */ -/* #define GET_SYSTIME_DIFFERENCE(_time1, _time2, _diffTime) \ - (_diffTime) = (_time1) - (_time2) */ - -/* The macro to check for the expiration, if TRUE means _currentTime >= _expirationTime */ -#define CHECK_FOR_EXPIRATION(_currentTime, _expirationTime) \ - ( ((UINT_32)(_currentTime) - (UINT_32)(_expirationTime)) <= 0x7fffffffUL) - -/* The macro to check for the timeout */ -#define CHECK_FOR_TIMEOUT(_currentTime, _timeoutStartingTime, _timeout) \ - CHECK_FOR_EXPIRATION((_currentTime), ((_timeoutStartingTime) + (_timeout))) - -/* The macro to set the expiration time with a specified timeout *//* Watch out for round up.*/ -#define SET_EXPIRATION_TIME(_expirationTime, _timeout) \ - { \ - GET_CURRENT_SYSTIME(&(_expirationTime)); \ - (_expirationTime) += (OS_SYSTIME)(_timeout); \ - } - -#define timerRenewTimer(adapter,tmr,interval) \ - timerStartTimer(adapter,tmr,interval,(tmr)->function,(tmr)->data) - -#define MGMT_INIT_TIMER(_adapter_p, _timer, _callbackFunc) \ - timerInitTimer(_adapter_p, &(_timer), (UINT_32)(_callbackFunc)) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ); - -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ); - -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ); - -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ -INT_32 -timerPendingTimer ( - IN P_TIMER_T prTimer - ) -{ - ASSERT(prTimer); - - return prTimer->rLinkEntry.prNext != NULL; -} - -#endif /* _CNM_TIMER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/hem_mbox.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/hem_mbox.h deleted file mode 100755 index c86099c810e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/hem_mbox.h +++ /dev/null @@ -1,444 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/hem_mbox.h#2 $ -*/ - -/*! \file hem_mbox.h - \brief - -*/ - - - -/* -** $Log: hem_mbox.h $ -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some message ID for P2P FSM under provisioning phase. - * - * 08 11 2010 yuche.tsai - * NULL - * Add Message Event ID for P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added MID_RXM_MQM_QOS_ACTION_FRAME for RXM to indicate QoS Action frames to MQM - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename the parameter of mboxDummy() - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove Dummy MSG ID - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add JOIN REQ related MSG ID - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add AIS ABORT MSG ID - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN MSG IDs - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _HEM_MBOX_H -#define _HEM_MBOX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Message IDs */ -typedef enum _ENUM_MSG_ID_T { - MID_MNY_CNM_CH_REQ, /* MANY notify CNM to obtain channel privilege */ - MID_MNY_CNM_CH_ABORT, /* MANY notify CNM to abort/release channel privilege */ - - MID_CNM_AIS_CH_GRANT, /* CNM notify AIS for indicating channel granted */ - MID_CNM_P2P_CH_GRANT, /* CNM notify P2P for indicating channel granted */ - MID_CNM_BOW_CH_GRANT, /* CNM notify BOW for indicating channel granted */ - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_AIS_SCN_SCAN_REQ, /* AIS notify SCN for starting scan */ - MID_AIS_SCN_SCAN_REQ_V2, /* AIS notify SCN for starting scan with multiple SSID support */ - MID_AIS_SCN_SCAN_CANCEL, /* AIS notify SCN for cancelling scan */ - MID_P2P_SCN_SCAN_REQ, /* P2P notify SCN for starting scan */ - MID_P2P_SCN_SCAN_REQ_V2, /* P2P notify SCN for starting scan with multiple SSID support */ - MID_P2P_SCN_SCAN_CANCEL, /* P2P notify SCN for cancelling scan */ - MID_BOW_SCN_SCAN_REQ, /* BOW notify SCN for starting scan */ - MID_BOW_SCN_SCAN_REQ_V2, /* BOW notify SCN for starting scan with multiple SSID support */ - MID_BOW_SCN_SCAN_CANCEL, /* BOW notify SCN for cancelling scan */ - MID_RLM_SCN_SCAN_REQ, /* RLM notify SCN for starting scan (OBSS-SCAN) */ - MID_RLM_SCN_SCAN_REQ_V2, /* RLM notify SCN for starting scan (OBSS-SCAN) with multiple SSID support */ - MID_RLM_SCN_SCAN_CANCEL, /* RLM notify SCN for cancelling scan (OBSS-SCAN)*/ - MID_SCN_AIS_SCAN_DONE, /* SCN notify AIS for scan completion */ - MID_SCN_P2P_SCAN_DONE, /* SCN notify P2P for scan completion */ - MID_SCN_BOW_SCAN_DONE, /* SCN notify BOW for scan completion */ - MID_SCN_RLM_SCAN_DONE, /* SCN notify RLM for scan completion (OBSS-SCAN) */ - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_OID_AIS_FSM_JOIN_REQ, /* OID/IOCTL notify AIS for join */ - MID_OID_AIS_FSM_ABORT, /* OID/IOCTL notify AIS for abort */ - MID_AIS_SAA_FSM_START, /* AIS notify SAA for Starting authentication/association fsm */ - MID_AIS_SAA_FSM_ABORT, /* AIS notify SAA for Aborting authentication/association fsm */ - MID_SAA_AIS_JOIN_COMPLETE, /* SAA notify AIS for indicating join complete */ - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_BOW_SAA_FSM_START, /* BOW notify SAA for Starting authentication/association fsm */ - MID_BOW_SAA_FSM_ABORT, /* BOW notify SAA for Aborting authentication/association fsm */ - MID_SAA_BOW_JOIN_COMPLETE, /* SAA notify BOW for indicating join complete */ -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*--------------------------------------------------*/ - /* P2P Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_P2P_SAA_FSM_START, /* P2P notify SAA for Starting authentication/association fsm */ - MID_P2P_SAA_FSM_ABORT, /* P2P notify SAA for Aborting authentication/association fsm */ - MID_SAA_P2P_JOIN_COMPLETE, /* SAA notify P2P for indicating join complete */ - - MID_MNY_P2P_FUN_SWITCH, /* Enable P2P FSM. */ - MID_MNY_P2P_DEVICE_DISCOVERY, /* Start device discovery. */ - MID_MNY_P2P_CONNECTION_REQ, /* Connection request. */ - MID_MNY_P2P_CONNECTION_ABORT, /* Abort connection request, P2P FSM return to IDLE. */ - MID_MNY_P2P_BEACON_UPDATE, - MID_MNY_P2P_STOP_AP, - MID_MNY_P2P_CHNL_REQ, - MID_MNY_P2P_CHNL_ABORT, - MID_MNY_P2P_MGMT_TX, - MID_MNY_P2P_GROUP_DISSOLVE, - MID_MNY_P2P_MGMT_FRAME_REGISTER, - MID_MNY_P2P_NET_DEV_REGISTER, - MID_MNY_P2P_START_AP, - MID_MNY_P2P_MGMT_FRAME_UPDATE, -#if CFG_SUPPORT_WFD - MID_MNY_P2P_WFD_CFG_UPDATE, -#endif -#endif - -#if CFG_SUPPORT_ADHOC - MID_SCN_AIS_FOUND_IBSS, /* SCN notify AIS that an IBSS Peer has been found and can merge into */ -#endif /* CFG_SUPPORT_ADHOC */ - - MID_SAA_AIS_FSM_ABORT, /* SAA notify AIS for indicating deauthentication/disassociation */ - - MID_TOTAL_NUM -} ENUM_MSG_ID_T, *P_ENUM_MSG_ID_T; - -/* Message header of inter-components */ -struct _MSG_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_MSG_ID_T eMsgId; -}; - -typedef VOID (*PFN_MSG_HNDL_FUNC)(P_ADAPTER_T, P_MSG_HDR_T); - -typedef struct _MSG_HNDL_ENTRY { - ENUM_MSG_ID_T eMsgId; - PFN_MSG_HNDL_FUNC pfMsgHndl; -} MSG_HNDL_ENTRY_T, *P_MSG_HNDL_ENTRY_T; - -typedef enum _EUNM_MSG_SEND_METHOD_T { - MSG_SEND_METHOD_BUF = 0, /* Message is put in the queue and will be - executed when mailbox is checked. */ - MSG_SEND_METHOD_UNBUF /* The handler function is called immediately - in the same context of the sender */ -} EUNM_MSG_SEND_METHOD_T, *P_EUNM_MSG_SEND_METHOD_T; - - -typedef enum _ENUM_MBOX_ID_T { - MBOX_ID_0 = 0, - MBOX_ID_TOTAL_NUM -} ENUM_MBOX_ID_T, *P_ENUM_MBOX_ID_T; - -/* Define Mailbox structure */ -typedef struct _MBOX_T { - LINK_T rLinkHead; -} MBOX_T, *P_MBOX_T; - -typedef struct _MSG_SAA_FSM_START_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_START_T, *P_MSG_SAA_FSM_START_T; - -typedef struct _MSG_SAA_FSM_COMP_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - WLAN_STATUS rJoinStatus; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prSwRfb; -} MSG_SAA_FSM_COMP_T, *P_MSG_SAA_FSM_COMP_T; - -typedef struct _MSG_SAA_FSM_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_ABORT_T, *P_MSG_SAA_FSM_ABORT_T; - -typedef struct _MSG_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; -} MSG_CONNECTION_ABORT_T, *P_MSG_CONNECTION_ABORT_T; - - - -/* specific message data types */ -typedef MSG_SAA_FSM_START_T MSG_JOIN_REQ_T, *P_MSG_JOIN_REQ_T; -typedef MSG_SAA_FSM_COMP_T MSG_JOIN_COMP_T, *P_MSG_JOIN_COMP_T; -typedef MSG_SAA_FSM_ABORT_T MSG_JOIN_ABORT_T, *P_MSG_JOIN_ABORT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - - -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ); - -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HEM_MBOX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/mib.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/mib.h deleted file mode 100755 index febcfb5fc40c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/mib.h +++ /dev/null @@ -1,157 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/mib.h#1 $ -*/ - -/*! \file mib.h - \brief This file contains the IEEE 802.11 family related MIB definition - for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: mib.h $ - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _MIB_H -#define _MIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Entry in SMT AuthenticationAlgorithms Table: dot11AuthenticationAlgorithmsEntry */ -typedef struct _DOT11_AUTHENTICATION_ALGORITHMS_ENTRY { - BOOLEAN dot11AuthenticationAlgorithmsEnable; /* dot11AuthenticationAlgorithmsEntry 3 */ -} DOT11_AUTHENTICATION_ALGORITHMS_ENTRY, *P_DOT11_AUTHENTICATION_ALGORITHMS_ENTRY; - -/* Entry in SMT dot11RSNAConfigPairwiseCiphersTalbe Table: dot11RSNAConfigPairwiseCiphersEntry */ -typedef struct _DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY -{ - UINT_32 dot11RSNAConfigPairwiseCipher; /* dot11RSNAConfigPairwiseCiphersEntry 2 */ - BOOLEAN dot11RSNAConfigPairwiseCipherEnabled; /* dot11RSNAConfigPairwiseCiphersEntry 3 */ -} DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY, *P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY; - -/* Entry in SMT dot11RSNAConfigAuthenticationSuitesTalbe Table: dot11RSNAConfigAuthenticationSuitesEntry */ -typedef struct _DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY -{ - UINT_32 dot11RSNAConfigAuthenticationSuite; /* dot11RSNAConfigAuthenticationSuitesEntry 2 */ - BOOLEAN dot11RSNAConfigAuthenticationSuiteEnabled; /* dot11RSNAConfigAuthenticationSuitesEntry 3 */ -} DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY, *P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY; - -/* ----- IEEE 802.11 MIB Major sections ----- */ -typedef struct _IEEE_802_11_MIB_T { - /* dot11PrivacyTable (dot11smt 5) */ - UINT_8 dot11WEPDefaultKeyID; /* dot11PrivacyEntry 2 */ - BOOLEAN dot11TranmitKeyAvailable; - UINT_32 dot11WEPICVErrorCount; /* dot11PrivacyEntry 5 */ - UINT_32 dot11WEPExcludedCount; /* dot11PrivacyEntry 6 */ - - /* dot11RSNAConfigTable (dot11smt 8) */ - UINT_32 dot11RSNAConfigGroupCipher; /* dot11RSNAConfigEntry 4 */ - - /* dot11RSNAConfigPairwiseCiphersTable (dot11smt 9) */ - DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY dot11RSNAConfigPairwiseCiphersTable[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - - /* dot11RSNAConfigAuthenticationSuitesTable (dot11smt 10) */ - DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY dot11RSNAConfigAuthenticationSuitesTable[MAX_NUM_SUPPORTED_AKM_SUITES]; - -#if 0 //SUPPORT_WAPI - BOOLEAN fgWapiKeyInstalled; - PARAM_WPI_KEY_T rWapiPairwiseKey[2]; - BOOLEAN fgPairwiseKeyUsed[2]; - UINT_8 ucWpiActivedPWKey; /* Must be 0 or 1, by wapi spec */ - PARAM_WPI_KEY_T rWapiGroupKey[2]; - BOOLEAN fgGroupKeyUsed[2]; -#endif -} IEEE_802_11_MIB_T, *P_IEEE_802_11_MIB_T; - -/* ------------------ IEEE 802.11 non HT PHY characteristics ---------------- */ -typedef const struct _NON_HT_PHY_ATTRIBUTE_T { - UINT_16 u2SupportedRateSet; - - BOOLEAN fgIsShortPreambleOptionImplemented; - - BOOLEAN fgIsShortSlotTimeOptionImplemented; - -} NON_HT_PHY_ATTRIBUTE_T, *P_NON_HT_PHY_ATTRIBUTE_T; - -typedef const struct _NON_HT_ADHOC_MODE_ATTRIBUTE_T { - - ENUM_PHY_TYPE_INDEX_T ePhyTypeIndex; - - UINT_16 u2BSSBasicRateSet; - -} NON_HT_ADHOC_MODE_ATTRIBUTE_T, *P_NON_HT_ADHOC_MODE_ATTRIBUTE_T; - -typedef NON_HT_ADHOC_MODE_ATTRIBUTE_T NON_HT_AP_MODE_ATTRIBUTE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[]; -extern NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[]; -extern NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[]; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_assoc.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_assoc.h deleted file mode 100755 index 270d1d63c7fb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_assoc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_assoc.h#1 $ -*/ - -/*! \file p2p_assoc.h - \brief This file contains the Wi-Fi Direct ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - - -#ifndef _P2P_ASSOC_H -#define _P2P_ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_bss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_bss.h deleted file mode 100755 index a609476fff7d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_bss.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_bss.h#2 $ -*/ - -/*! \file "p2p_bss.h" - \brief In this file we define the function prototype used in p2p BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - - - - - -#ifndef _P2P_BSS_H -#define _P2P_BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -UINT_32 -p2pGetTxProbRspIeTableSize( - VOID - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_fsm.h deleted file mode 100755 index 1efc33e4c8ac..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_fsm.h +++ /dev/null @@ -1,2778 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_fsm.h#23 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - - - -/* -** $Log: p2p_fsm.h $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 14 2012 yuche.tsai -** NULL -** Fix compile error. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 18 2012 yuche.tsai - * NULL - * add one file. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve class 3 error issue under AP mode. - * - * data frame may TX before Assoc Response TX. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 09 2011 yuche.tsai - * [WCXRP00001093] [Need Patch][Volunteer Patch] Service Discovery 2.0 state transition issue. - * Fix SD2.0 issue which may cause KE. (Monkey test) - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 09 01 2011 yuche.tsai - * NULL - * Fix channel stay interval. - * Sync channel stay interval & channel request interval under AP mode.. - * - * 08 30 2011 yuche.tsai - * [WCXRP00000953] [Volunteer Patch][Driver] Hot Spot Channel ASSERT issue. - * Fix hot spot FW assert issue when under concurrent case. (DBG enable only) - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 yuche.tsai - * NULL - * Fix scan policy for Active LISTEN scan. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Support TX Deauth Issue. - * - * 07 26 2011 yuche.tsai - * [WCXRP00000875] [Volunteer Patch][WiFi Direct][Driver] MT6620 IOT issue with realtek test bed solution. - * Turn off persistent group support for V2.0 release. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix compile error. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix MT6620 WiFi Direct IOT Issue with BCM solution. - * - * 07 11 2011 yuche.tsai - * [WCXRP00000845] [Volunteer Patch][WiFi Direct] WiFi Direct Device Connection Robustness - * Enhance Connection Robustness. - * - * 07 08 2011 yuche.tsai - * [WCXRP00000841] [Volunteer Patch][WiFi Direct] Group Owner Setting. - * Update GO configure parameter. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Disable enhancement II for debugging. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 04 20 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove CFG_WIFI_DIRECT_MOVED. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add two function prototype. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add connection abort message event prototype. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 16 2010 yuche.tsai - * NULL - * Fix P2P Intended Interface Address Bug. - * Extend GO Nego Timeout Time. - * - * 08 16 2010 yuche.tsai - * NULL - * Extend Listen Interval default value & remove deprecated variable. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add function prototype for join complete. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function proto type for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Change P2P data structure for supporting - * 1. P2P Device discovery. - * 2. P2P Group Negotiation. - * 3. P2P JOIN - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix some P2P function prototype. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify parameter of p2pStartGO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _P2P_FSM_H -#define _P2P_FSM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#define CID52_53_54 0 - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - - - - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_P2P_STATE_T { - P2P_STATE_IDLE = 0, - P2P_STATE_SCAN, - P2P_STATE_AP_CHANNEL_DETECT, - P2P_STATE_REQING_CHANNEL, - P2P_STATE_CHNL_ON_HAND, /* Requesting Channel to Send Specific Frame. */ - P2P_STATE_GC_JOIN, /* Sending Specific Frame. May extending channel by other event. */ - P2P_STATE_NUM -} ENUM_P2P_STATE_T, *P_ENUM_P2P_STATE_T; - - -typedef enum _ENUM_CHANNEL_REQ_TYPE_T { - CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL, - CHANNEL_REQ_TYPE_GC_JOIN_REQ, - CHANNEL_REQ_TYPE_GO_START_BSS -} -ENUM_CHANNEL_REQ_TYPE_T, *P_ENUM_CHANNEL_REQ_TYPE_T; - - -typedef enum _ENUM_BUFFER_TYPE_T { - ENUM_FRAME_TYPE_EXTRA_IE_BEACON, - ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP, - ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP, - ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE, - ENUM_FRAME_TYPE_BEACON_TEMPLATE, - ENUM_FRAME_IE_NUM -} ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T; - -typedef enum _ENUM_HIDDEN_SSID_TYPE_T { - ENUM_HIDDEN_SSID_NONE, - ENUM_HIDDEN_SSID_LEN, - ENUM_HIDDEN_SSID_ZERO_CONTENT, - ENUM_HIDDEN_SSID_NUM -} -ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T; - -typedef struct _P2P_SSID_STRUCT_T { - UINT_8 aucSsid[32]; - UINT_8 ucSsidLen; -} P2P_SSID_STRUCT_T, *P_P2P_SSID_STRUCT_T; - -typedef struct _P2P_STATION_INFO_T { - UINT_32 u4InactiveTime; - UINT_32 u4RxBytes; // TODO: - UINT_32 u4TxBytes; // TODO: - UINT_32 u4RxPackets; // TODO: - UINT_32 u4TxPackets; // TODO: - // TODO: Add more for requirement. -} -P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T; - - -typedef struct _AP_CRYPTO_SETTINGS_T { - UINT_32 u4WpaVersion; - UINT_32 u4CipherGroup; - INT_32 i4NumOfCiphers; - UINT_32 aucCiphersPairwise[5]; - INT_32 i4NumOfAkmSuites; - UINT_32 aucAkmSuites[2]; - BOOLEAN fgIsControlPort; - UINT_16 u2ControlPortBE; - BOOLEAN fgIsControlPortEncrypt; -} AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T; - -/*-------------------- P2P FSM ACTION STRUCT ---------------------*/ -typedef struct _P2P_CHNL_REQ_INFO_T { - BOOLEAN fgIsChannelRequested; - UINT_8 ucSeqNumOfChReq; - UINT_64 u8Cookie; - UINT_8 ucReqChnlNum; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eChnlSco; - UINT_32 u4MaxInterval; - ENUM_CHANNEL_REQ_TYPE_T eChannelReqType; - - UINT_8 ucOriChnlNum; - ENUM_BAND_T eOriBand; - ENUM_CHNL_EXT_T eOriChnlSco; -} P2P_CHNL_REQ_INFO_T, *P_P2P_CHNL_REQ_INFO_T; - -typedef struct _P2P_SCAN_REQ_INFO_T { - ENUM_SCAN_TYPE_T eScanType; - ENUM_SCAN_CHANNEL eChannelSet; - UINT_16 u2PassiveDewellTime; - UINT_8 ucSeqNumOfScnMsg; - BOOLEAN fgIsAbort; - BOOLEAN fgIsScanRequest; - UINT_8 ucNumChannelList; - RF_CHANNEL_INFO_T arScanChannelList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - P2P_SSID_STRUCT_T rSsidStruct; // Currently we can only take one SSID scan request -} -P2P_SCAN_REQ_INFO_T, *P_P2P_SCAN_REQ_INFO_T; - -typedef struct _P2P_CONNECTION_REQ_INFO_T { - - BOOLEAN fgIsConnRequest; - P2P_SSID_STRUCT_T rSsidStruct; - UINT_8 aucBssid[MAC_ADDR_LEN]; - /* For ASSOC Req. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T; - -typedef struct _P2P_MGMT_TX_REQ_INFO_T { - BOOLEAN fgIsMgmtTxRequested; - P_MSDU_INFO_T prMgmtTxMsdu; - UINT_64 u8Cookie; -} P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T; - -typedef struct _P2P_BEACON_UPDATE_INFO_T { - PUINT_8 pucBcnHdr; - UINT_32 u4BcnHdrLen; - PUINT_8 pucBcnBody; - UINT_32 u4BcnBodyLen; -} -P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T; - -typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T { - P_MSDU_INFO_T prProbeRspMsduTemplate; -} P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T; - -typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T { - PUINT_8 pucAssocRspExtIE; - UINT_16 u2AssocIELen; -} P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T; - -typedef struct _P2P_JOIN_INFO_T { - UINT_32 ucSeqNumOfReqMsg; - UINT_8 ucAvailableAuthTypes; - P_STA_RECORD_T prTargetStaRec; - P2P_SSID_STRUCT_T rSsidStruct; - BOOLEAN fgIsJoinComplete; - /* For ASSOC Rsp. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} -P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T; - -#if CFG_SUPPORT_WFD - -#define WFD_FLAGS_DEV_INFO_VALID BIT(0) /* 1. WFD_DEV_INFO, 2. WFD_CTRL_PORT, 3. WFD_MAT_TP. */ -#define WFD_FLAGS_SINK_INFO_VALID BIT(1) /* 1. WFD_SINK_STATUS, 2. WFD_SINK_MAC. */ -#define WFD_FLAGS_ASSOC_MAC_VALID BIT(2) /* 1. WFD_ASSOC_MAC. */ -#define WFD_FLAGS_EXT_CAPABILITY_VALID BIT(3) /* 1. WFD_EXTEND_CAPABILITY. */ - - - -struct _WFD_CFG_SETTINGS_T { - UINT_32 u4WfdCmdType; - UINT_8 ucWfdEnable; - UINT_8 ucWfdCoupleSinkStatus; - UINT_8 ucWfdSessionAvailable; /* 0: NA 1:Set 2:Clear */ - UINT_8 ucWfdSigmaMode; - UINT_16 u2WfdDevInfo; - UINT_16 u2WfdControlPort; - UINT_16 u2WfdMaximumTp; - UINT_16 u2WfdExtendCap; - UINT_8 aucWfdCoupleSinkAddress[MAC_ADDR_LEN]; - UINT_8 aucWfdAssociatedBssid[MAC_ADDR_LEN]; - UINT_8 aucWfdVideolp[4]; - UINT_8 aucWfdAudiolp[4]; - UINT_16 u2WfdVideoPort; - UINT_16 u2WfdAudioPort; - UINT_32 u4WfdFlag; - UINT_32 u4WfdPolicy; - UINT_32 u4WfdState; - UINT_8 aucWfdSessionInformationIE[24*8]; - UINT_16 u2WfdSessionInformationIELen; - UINT_8 aucReserved1[2]; - UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN]; - UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN]; - UINT_32 u4WfdAdvancedFlag; - /* Group 1 64 bytes */ - UINT_8 aucWfdLocalIp[4]; - UINT_16 u2WfdLifetimeAc2; /* Unit is 2 TU */ - UINT_16 u2WfdLifetimeAc3; /* Unit is 2 TU */ - UINT_8 aucReverved2[56]; - /* Group 2 64 bytes */ - UINT_8 aucReverved3[64]; - /* Group 3 64 bytes */ - UINT_8 aucReverved4[64]; - -}; - -#endif - - - -struct _P2P_FSM_INFO_T { - /* State related. */ - ENUM_P2P_STATE_T ePreviousState; - ENUM_P2P_STATE_T eCurrentState; - - /* Channel related. */ - P2P_CHNL_REQ_INFO_T rChnlReqInfo; - - /* Scan related. */ - P2P_SCAN_REQ_INFO_T rScanReqInfo; - - /* Connection related. */ - P2P_CONNECTION_REQ_INFO_T rConnReqInfo; - - /* Mgmt tx related. */ - P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo; - - /* Beacon related. */ - P2P_BEACON_UPDATE_INFO_T rBcnContentInfo; - - /* Probe Response related. */ - P2P_PROBE_RSP_UPDATE_INFO_T rProbeRspContentInfo; - - /* Assoc Rsp related. */ - P2P_ASSOC_RSP_UPDATE_INFO_T rAssocRspContentInfo; - - /* GC Join related. */ - P2P_JOIN_INFO_T rJoinInfo; - - /* FSM Timer */ - TIMER_T rP2pFsmTimeoutTimer; - - - /* GC Target BSS. */ - P_BSS_DESC_T prTargetBss; - - /* GC Connection Request. */ - BOOLEAN fgIsConnectionRequested; - - BOOLEAN fgIsApMode; - - /* Channel grant interval. */ - UINT_32 u4GrantInterval; - - /* Packet filter for P2P module. */ - UINT_32 u4P2pPacketFilter; - - //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Prepare for use vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - /* Msg event queue. */ - LINK_T rMsgEventQueue; - -#if CFG_SUPPORT_WFD - WFD_CFG_SETTINGS_T rWfdConfigureSettings; -#endif - - BOOLEAN fgIsWPSMode; -}; - - -/*---------------- Messages -------------------*/ -typedef struct _MSG_P2P_SCAN_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P_P2P_SSID_STRUCT_T prSSID; - INT_32 i4SsidNum; - UINT_32 u4NumChannel; - PUINT_8 pucIEBuf; - UINT_32 u4IELen; - BOOLEAN fgIsAbort; - RF_CHANNEL_INFO_T arChannelListInfo[1]; -} MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; - UINT_32 u4Duration; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; -} MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; -} MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T; - - -typedef struct _MSG_P2P_CONNECTION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P2P_SSID_STRUCT_T rSsid; - UINT_8 aucBssid[MAC_ADDR_LEN]; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; - UINT_32 u4IELen; - UINT_8 aucIEBuf[1]; - // TODO: Auth Type, OPEN, SHARED, FT, EAP... -} MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T; - - -typedef struct _MSG_P2P_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member. */ - UINT_8 aucTargetID[MAC_ADDR_LEN]; - UINT_16 u2ReasonCode; - BOOLEAN fgSendDeauth; -} MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T; - -typedef struct _MSG_P2P_MGMT_TX_REQUEST_T { - MSG_HDR_T rMsgHdr; - P_MSDU_INFO_T prMgmtMsduInfo; - UINT_64 u8Cookie; /* For indication. */ - BOOLEAN fgNoneCckRate; - BOOLEAN fgIsWaitRsp; -} MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T; - -typedef struct _MSG_P2P_START_AP_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4DtimPeriod; - UINT_32 u4BcnInterval; - UINT_8 aucSsid[32]; - UINT_16 u2SsidLen; - UINT_8 ucHiddenSsidType; - BOOLEAN fgIsPrivacy; - AP_CRYPTO_SETTINGS_T rEncryptionSettings; - INT_32 i4InactiveTimeout; -} -MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T; - - -typedef struct _MSG_P2P_BEACON_UPDATE_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4BcnHdrLen; - UINT_32 u4BcnBodyLen; - PUINT_8 pucBcnHdr; - PUINT_8 pucBcnBody; - UINT_8 aucBuffer[1]; /* Header & Body are put here. */ -} -MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T { - MSG_HDR_T rMsgHdr; - ENUM_BUFFER_TYPE_T eBufferType; - UINT_32 u4BufferLen; - UINT_8 aucBuffer[1]; -} MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T; - - -typedef struct _MSG_P2P_SWITCH_OP_MODE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - ENUM_OP_MODE_T eOpMode; -} MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_16 u2FrameType; - BOOLEAN fgIsRegister; -} -MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T; - -typedef struct _MSG_P2P_NETDEV_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsEnable; - UINT_8 ucMode; -} MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T; - -#if CFG_SUPPORT_WFD -typedef struct _MSG_WFD_CONFIG_SETTINGS_CHANGED_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P_WFD_CFG_SETTINGS_T prWfdCfgSettings; -} MSG_WFD_CONFIG_SETTINGS_CHANGED_T, *P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T; -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -p2pFsmStateTransition( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - - -VOID -p2pFsmRunEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFsmRunEventScanRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventMgmtFrameTx( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStartAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventNetDeviceRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventUpdateMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStopAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChannelRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventChannelAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventDissolve( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -VOID -p2pFsmRunEventMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -#if CFG_SUPPORT_WFD -VOID -p2pFsmRunEventWfdSettingUpdate( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); -#endif - - -#if 0 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - -//3 /* --------------- WFA P2P DEFAULT PARAMETERS --------------- */ -#define P2P_WILDCARD_SSID "DIRECT-" -#define P2P_WILDCARD_SSID_LEN 7 -#define P2P_GROUP_ID_LEN 9 - -#define P2P_DRIVER_VERSION 2 /* Update when needed. */ - -#define P2P_DEFAULT_DEV_NAME "Wireless Client" -#define P2P_DEFAULT_DEV_NAME_LEN 15 -#define P2P_DEFAULT_PRIMARY_CATEGORY_ID 10 -#define P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID 5 -#define P2P_DEFAULT_CONFIG_METHOD (WPS_ATTRI_CFG_METHOD_PUSH_BUTTON | WPS_ATTRI_CFG_METHOD_KEYPAD | WPS_ATTRI_CFG_METHOD_DISPLAY) -#define P2P_DEFAULT_LISTEN_CHANNEL 1 - -#define P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT 0 /* NOTE(Kevin): Shall <= 16 */ -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT 13 - -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE 51 /* Contains 6 sub-band. */ - -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ - -#define P2P_MAXIMUM_CLIENT_COUNT 8 -#define P2P_MAXIMUM_NOA_COUNT 8 - - -#define P2P_MAXIMUM_ATTRIBUTE_LEN 251 - -#define P2P_CTWINDOW_DEFAULT 25 /* in TU=(1024usec) */ - -#define P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE 768 - -/* P2P 3.1.2.1.3 - Find Phase */ -#define P2P_MAX_DISCOVERABLE_INTERVAL 8 //3//3 -#define P2P_MIN_DISCOVERABLE_INTERVAL 5 // 1 - -#define P2P_LISTEN_SCAN_UNIT 100 // MS - -/* FSM Time Related constrain. */ -#define P2P_SERACH_STATE_PERIOD_MS 1000 // Deprecated. - -#define P2P_GO_CHANNEL_STAY_INTERVAL 1000 - -#define P2P_GO_NEGO_TIMEOUT_MS 500 -#define P2P_CONNECTION_TIMEOUT_SEC 120 - -#define P2P_INVITAION_TIMEOUT_MS 500 /* Timeout Wait Invitation Resonse. */ -#define P2P_PROVISION_DISCOVERY_TIMEOUT_MS 500 /* Timeout Wait Provision Discovery Resonse. */ - -//3 /* --------------- WFA P2P IE --------------- */ -/* P2P 4.1.1 - P2P IE format */ -#define P2P_OUI_TYPE_LEN 4 -#define P2P_IE_OUI_HDR (ELEM_HDR_LEN + P2P_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */ - -/* P2P 4.1.1 - General P2P Attribute */ -#define P2P_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */ - -/* P2P 4.1.1 - P2P Attribute ID definitions */ -#define P2P_ATTRI_ID_STATUS 0 -#define P2P_ATTRI_ID_REASON_CODE 1 -#define P2P_ATTRI_ID_P2P_CAPABILITY 2 -#define P2P_ATTRI_ID_P2P_DEV_ID 3 -#define P2P_ATTRI_ID_GO_INTENT 4 -#define P2P_ATTRI_ID_CFG_TIMEOUT 5 -#define P2P_ATTRI_ID_LISTEN_CHANNEL 6 -#define P2P_ATTRI_ID_P2P_GROUP_BSSID 7 -#define P2P_ATTRI_ID_EXT_LISTEN_TIMING 8 -#define P2P_ATTRI_ID_INTENDED_P2P_IF_ADDR 9 -#define P2P_ATTRI_ID_P2P_MANAGEABILITY 10 -#define P2P_ATTRI_ID_CHANNEL_LIST 11 -#define P2P_ATTRI_ID_NOTICE_OF_ABSENCE 12 -#define P2P_ATTRI_ID_P2P_DEV_INFO 13 -#define P2P_ATTRI_ID_P2P_GROUP_INFO 14 -#define P2P_ATTRI_ID_P2P_GROUP_ID 15 -#define P2P_ATTRI_ID_P2P_INTERFACE 16 -#define P2P_ATTRI_ID_OPERATING_CHANNEL 17 -#define P2P_ATTRI_ID_INVITATION_FLAG 18 -#define P2P_ATTRI_ID_VENDOR_SPECIFIC 221 - -/* Maximum Length of P2P Attributes */ -#define P2P_ATTRI_MAX_LEN_STATUS 1 /* 0 */ -#define P2P_ATTRI_MAX_LEN_REASON_CODE 1 /* 1 */ -#define P2P_ATTRI_MAX_LEN_P2P_CAPABILITY 2 /* 2 */ -#define P2P_ATTRI_MAX_LEN_P2P_DEV_ID 6 /* 3 */ -#define P2P_ATTRI_MAX_LEN_GO_INTENT 1 /* 4 */ -#define P2P_ATTRI_MAX_LEN_CFG_TIMEOUT 2 /* 5 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#else - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#endif -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_BSSID 6 /* 7 */ -#define P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING 4 /* 8 */ -#define P2P_ATTRI_MAX_LEN_INTENDED_P2P_IF_ADDR 6 /* 9 */ -#define P2P_ATTRI_MAX_LEN_P2P_MANAGEABILITY 1 /* 10 */ -//#define P2P_ATTRI_MAX_LEN_CHANNEL_LIST 3 + (n* (2 + num_of_ch)) /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_LIST 3 /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_ENTRY 2 /* 11 */ - - -//#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE 2 + (n* (13)) /* 12 */ -#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE (2 + (P2P_MAXIMUM_NOA_COUNT*(13))) /* 12 */ - -#define P2P_ATTRI_MAX_LEN_P2P_DEV_INFO 17 + (8 * (8)) + 36 /* 13 */ -//#define P2P_ATTRI_MAX_LEN_P2P_GROUP_INFO n* (25 + (m* (8)) + 32) /* 14 */ -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_ID 38 /* 15 */ -#define P2P_ATTRI_MAX_LEN_P2P_INTERFACE 253 // 7 + 6* [0~41] /* 16 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#else - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#endif -#define P2P_ATTRI_MAX_LEN_INVITATION_FLAGS 1 /* 18 */ - -/* P2P 4.1.2 - P2P Status definitions */ -#define P2P_STATUS_SUCCESS 0 -#define P2P_STATUS_FAIL_INFO_IS_CURRENTLY_UNAVAILABLE 1 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 2 -#define P2P_STATUS_FAIL_LIMIT_REACHED 3 -#define P2P_STATUS_FAIL_INVALID_PARAM 4 -#define P2P_STATUS_FAIL_UNABLE_ACCOMMODATE_REQ 5 -#define P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR 6 -#define P2P_STATUS_FAIL_NO_COMMON_CHANNELS 7 -#define P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP 8 -#define P2P_STATUS_FAIL_SAME_INTENT_VALUE_15 9 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD 10 -#define P2P_STATUS_FAIL_REJECTED_BY_USER 11 - - -/* P2P 4.1.3 - P2P Minor Reason Code definitions */ -#define P2P_REASON_SUCCESS 0 -#define P2P_REASON_DISASSOCIATED_DUE_CROSS_CONNECTION 1 -#define P2P_REASON_DISASSOCIATED_DUE_UNMANAGEABLE 2 -#define P2P_REASON_DISASSOCIATED_DUE_NO_P2P_COEXIST_PARAM 3 -#define P2P_REASON_DISASSOCIATED_DUE_MANAGEABLE 4 - - -/* P2P 4.1.4 - Device Capability Bitmap definitions */ -#define P2P_DEV_CAPABILITY_SERVICE_DISCOVERY BIT(0) -#define P2P_DEV_CAPABILITY_CLIENT_DISCOVERABILITY BIT(1) -#define P2P_DEV_CAPABILITY_CONCURRENT_OPERATION BIT(2) -#define P2P_DEV_CAPABILITY_P2P_INFRA_MANAGED BIT(3) -#define P2P_DEV_CAPABILITY_P2P_DEVICE_LIMIT BIT(4) -#define P2P_DEV_CAPABILITY_P2P_INVITATION_PROCEDURE BIT(5) - - -/* P2P 4.1.4 - Group Capability Bitmap definitions */ -#define P2P_GROUP_CAPABILITY_P2P_GROUP_OWNER BIT(0) -#define P2P_GROUP_CAPABILITY_PERSISTENT_P2P_GROUP BIT(1) -#define P2P_GROUP_CAPABILITY_P2P_GROUP_LIMIT BIT(2) -#define P2P_GROUP_CAPABILITY_INTRA_BSS_DISTRIBUTION BIT(3) -#define P2P_GROUP_CAPABILITY_CROSS_CONNECTION BIT(4) -#define P2P_GROUP_CAPABILITY_PERSISTENT_RECONNECT BIT(5) -#define P2P_GROUP_CAPABILITY_GROUP_FORMATION BIT(6) - -/* P2P 4.1.6 - GO Intent field definitions */ -#define P2P_GO_INTENT_TIE_BREAKER_FIELD BIT(0) -#define P2P_GO_INTENT_VALUE_MASK BITS(1,7) -#define P2P_GO_INTENT_VALUE_OFFSET 1 - -/* P2P 4.1.12 - Manageability Bitmap definitions */ -#define P2P_DEVICE_MANAGEMENT BIT(0) - -/* P2P 4.1.14 - CTWindow and OppPS Parameters definitions */ -#define P2P_CTW_OPPPS_PARAM_OPPPS_FIELD BIT(7) -#define P2P_CTW_OPPPS_PARAM_CTWINDOW_MASK BITS(0,6) - - -#define ELEM_MAX_LEN_P2P_FOR_PROBE_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_ID) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL)) - -#define ELEM_MAX_LEN_P2P_FOR_ASSOC_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_INFO)) - - -/* P2P 4.1.16 - P2P Client Infor Descriptor */ -#define P2P_CLIENT_INFO_DESC_HDR_LEN 1 /* Length(1 octets) */ - -/* P2P 4.1.20 - P2P Invitation Flags Attribute*/ -#define P2P_INVITATION_FLAGS_INVITATION_TYPE BIT(0) -#define P2P_INVITATION_TYPE_INVITATION 0 -#define P2P_INVITATION_TYPE_REINVOKE 1 -//3 /* --------------- WPS Data Element Definitions --------------- */ -/* P2P 4.2.2 - General WSC Attribute */ -#define WSC_ATTRI_HDR_LEN 4 /* ID(2 octet) + Length(2 octets) */ -#define WSC_ATTRI_MAX_LEN_VERSION 1 -#define WSC_ATTRI_MAX_LEN_DEVICE_PASSWORD_ID 2 -#define WSC_ATTRI_LEN_CONFIG_METHOD 2 - -/* WPS 11 - Data Element Definitions */ -#define WPS_ATTRI_ID_VERSION 0x104A -#define WPS_ATTRI_ID_CONFIGURATION_METHODS 0x1008 -#define WPS_ATTRI_ID_DEVICE_PASSWORD 0x1012 -#define WPS_ATTRI_ID_DEVICE_NAME 0x1011 -#define WPS_ATTRI_ID_PRI_DEVICE_TYPE 0x1054 -#define WPS_ATTRI_ID_SEC_DEVICE_TYPE 0x1055 - -#define WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE 300 - -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ - -#define WPS_ATTRI_CFG_METHOD_USBA BIT(0) -#define WPS_ATTRI_CFG_METHOD_ETHERNET BIT(1) -#define WPS_ATTRI_CFG_METHOD_LABEL BIT(2) -#define WPS_ATTRI_CFG_METHOD_DISPLAY BIT(3) -#define WPS_ATTRI_CFG_METHOD_EXT_NFC BIT(4) -#define WPS_ATTRI_CFG_METHOD_INT_NFC BIT(5) -#define WPS_ATTRI_CFG_METHOD_NFC_IF BIT(6) -#define WPS_ATTRI_CFG_METHOD_PUSH_BUTTON BIT(7) -#define WPS_ATTRI_CFG_METHOD_KEYPAD BIT(8) - - -#define P2P_FLAGS_PROVISION_COMPLETE 0x00000001 -#define P2P_FLAGS_PROVISION_DISCOVERY_COMPLETE 0x00000002 -#define P2P_FLAGS_PROVISION_DISCOVERY_WAIT_RESPONSE 0x00000004 -#define P2P_FLAGS_PROVISION_DISCOVERY_RESPONSE_WAIT 0x00000008 -#define P2P_FLAGS_MASK_PROVISION 0x00000017 -#define P2P_FLAGS_MASK_PROVISION_COMPLETE 0x00000015 -#define P2P_FLAGS_PROVISION_DISCOVERY_INDICATED 0x00000010 -#define P2P_FLAGS_INVITATION_TOBE_GO 0x00000100 -#define P2P_FLAGS_INVITATION_TOBE_GC 0x00000200 -#define P2P_FLAGS_INVITATION_SUCCESS 0x00000400 -#define P2P_FLAGS_INVITATION_WAITING_TARGET 0x00000800 -#define P2P_FLAGS_MASK_INVITATION 0x00000F00 -#define P2P_FLAGS_FORMATION_ON_GOING 0x00010000 -#define P2P_FLAGS_FORMATION_LOCAL_PWID_RDY 0x00020000 -#define P2P_FLAGS_FORMATION_TARGET_PWID_RDY 0x00040000 -#define P2P_FLAGS_FORMATION_COMPLETE 0x00080000 -#define P2P_FLAGS_MASK_FORMATION 0x000F0000 -#define P2P_FLAGS_DEVICE_DISCOVER_REQ 0x00100000 -#define P2P_FLAGS_DEVICE_DISCOVER_DONE 0x00200000 -#define P2P_FLAGS_DEVICE_INVITATION_WAIT 0x00400000 -#define P2P_FLAGS_DEVICE_SERVICE_DISCOVER_WAIT 0x00800000 -#define P2P_FLAGS_MASK_DEVICE_DISCOVER 0x00F00000 - -#define P2P_FLAGS_DEVICE_FORMATION_REQUEST 0x01000000 - - -/* MACRO for flag operation */ -#define SET_FLAGS(_FlagsVar, _BitsToSet) \ - (_FlagsVar) = ((_FlagsVar) | (_BitsToSet)) - -#define TEST_FLAGS(_FlagsVar, _BitsToCheck) \ - (((_FlagsVar) & (_BitsToCheck)) == (_BitsToCheck)) - -#define CLEAR_FLAGS(_FlagsVar, _BitsToClear) \ - (_FlagsVar) &= ~(_BitsToClear) - - - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_I 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_II 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_III 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_IV 0 - -#define CFG_DISABLE_DELAY_PROVISION_DISCOVERY 0 - -#define CFG_CONNECTION_POLICY_2_0 0 - -/* Device Password ID */ -enum wps_dev_password_id { - DEV_PW_DEFAULT = 0x0000, - DEV_PW_USER_SPECIFIED = 0x0001, - DEV_PW_MACHINE_SPECIFIED = 0x0002, - DEV_PW_REKEY = 0x0003, - DEV_PW_PUSHBUTTON = 0x0004, - DEV_PW_REGISTRAR_SPECIFIED = 0x0005 -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -//3 /* --------------- WFA P2P IE and Attributes --------------- */ - -/* P2P 4.1.1 - P2P Information Element */ -typedef struct _IE_P2P_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 aucP2PAttributes[1]; /* P2P Attributes */ -} __KAL_ATTRIB_PACKED__ IE_P2P_T, *P_IE_P2P_T; - -/* P2P 4.1.1 - General P2P Attribute */ -typedef struct _P2P_ATTRIBUTE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRIBUTE_T, ATTRIBUTE_HDR_T, *P_P2P_ATTRIBUTE_T, *P_ATTRIBUTE_HDR_T; - - -/* P2P 4.1.2 - P2P Status Attribute */ -typedef struct _P2P_ATTRI_STATUS_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucStatusCode; /* Status Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_STATUS_T, *P_P2P_ATTRI_STATUS_T; - - -/* P2P 4.1.3 - P2P Minor Reason Code Attribute */ -typedef struct _P2P_ATTRI_REASON_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucMinorReasonCode; /* Minor Reason Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_REASON_T, *P_P2P_ATTRI_REASON_T; - - -/* P2P 4.1.4 - P2P Capability Attribute */ -typedef struct _P2P_ATTRI_CAPABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_8 ucGroupCap; /* Group Capability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CAPABILITY_T, *P_P2P_ATTRI_CAPABILITY_T; - - -/* P2P 4.1.5 - P2P Device ID Attribute */ -typedef struct _P2P_ATTRI_DEV_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_ID_T, *P_P2P_ATTRI_DEV_ID_T; - - -/* P2P 4.1.6 - Group Owner Intent Attribute */ -typedef struct _P2P_ATTRI_GO_INTENT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOIntent; /* Group Owner Intent */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GO_INTENT_T, *P_P2P_ATTRI_GO_INTENT_T; - - -/* P2P 4.1.7 - Configuration Timeout Attribute */ -typedef struct _P2P_ATTRI_CFG_TIMEOUT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOCfgTimeout; /* GO Configuration Timeout */ - UINT_8 ucClientCfgTimeout; /* Client Configuration Timeout */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CFG_TIMEOUT_T, *P_P2P_ATTRI_CFG_TIMEOUT_T; - - -/* P2P 4.1.8 - Listen Channel Attribute */ -typedef struct _P2P_ATTRI_LISTEN_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_LISTEN_CHANNEL_T, *P_P2P_ATTRI_LISTEN_CHANNEL_T; - - -/* P2P 4.1.9 - P2P Group BSSID Attribute */ -typedef struct _P2P_ATTRI_GROUP_BSSID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBssid[MAC_ADDR_LEN]; /* P2P Group BSSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_BSSID_T, *P_P2P_ATTRI_GROUP_BSSID_T; - - -/* P2P 4.1.10 - Extended Listen Timing Attribute */ -typedef struct _P2P_ATTRI_EXT_LISTEN_TIMING_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2AvailPeriod; /* Availability Period */ - UINT_16 u2AvailInterval; /* Availability Interval */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_EXT_LISTEN_TIMING_T, *P_P2P_ATTRI_EXT_LISTEN_TIMING_T; - - -/* P2P 4.1.11 - Intended P2P Interface Address Attribute */ -typedef struct _P2P_ATTRI_INTENDED_IF_ADDR_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucIfAddr[MAC_ADDR_LEN];/* P2P Interface Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTENDED_IF_ADDR_T, *P_P2P_ATTRI_INTENDED_IF_ADDR_T; - - -/* P2P 4.1.12 - P2P Manageability Attribute */ -typedef struct _P2P_ATTRI_MANAGEABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucManageability; /* P2P Manageability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_MANAGEABILITY_T, *P_P2P_ATTRI_MANAGEABILITY_T; - - -/* P2P 4.1.13 - Channel List Attribute */ -typedef struct _P2P_ATTRI_CHANNEL_LIST_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 aucChannelEntry[1]; /* Channel Entry List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CHANNEL_T, *P_P2P_ATTRI_CHANNEL_T; - -typedef struct _CHANNEL_ENTRY_FIELD_T { - UINT_8 ucRegulatoryClass; /* Regulatory Class */ - UINT_8 ucNumberOfChannels; /* Number Of Channels */ - UINT_8 aucChannelList[1]; /* Channel List */ -} __KAL_ATTRIB_PACKED__ CHANNEL_ENTRY_FIELD_T, *P_CHANNEL_ENTRY_FIELD_T; - - -/* P2P 4.1.14 - Notice of Absence Attribute */ -typedef struct _P2P_ATTRI_NOA_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucIndex; /* Index */ - UINT_8 ucCTWOppPSParam; /* CTWindow and OppPS Parameters */ - UINT_8 aucNoADesc[1]; /* NoA Descriptor */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_NOA_T, *P_P2P_ATTRI_NOA_T; - -typedef struct _NOA_DESCRIPTOR_T { - UINT_8 ucCountType; /* Count/Type */ - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} __KAL_ATTRIB_PACKED__ NOA_DESCRIPTOR_T, *P_NOA_DESCRIPTOR_T; - -typedef struct _P2P_ATTRI_DEV_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_INFO_T, *P_P2P_ATTRI_DEV_INFO_T; - -/* WPS 7.1 & 11 WPS TLV Data Format - Device Name */ -typedef struct _DEVICE_NAME_TLV_T { - UINT_16 u2Id; /* WPS Attribute Type */ - UINT_16 u2Length; /* Data Length */ - UINT_8 aucName[32]; /* Device Name */ // TODO: Fixme -} __KAL_ATTRIB_PACKED__ DEVICE_NAME_TLV_T, *P_DEVICE_NAME_TLV_T; - - -/* P2P 4.1.16 - P2P Group Info Attribute */ -typedef struct _P2P_CLIENT_INFO_DESC_T { - UINT_8 ucLength; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucIfAddr[MAC_ADDR_LEN]; /* P2P Interface Address */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_CLIENT_INFO_DESC_T, *P_P2P_CLIENT_INFO_DESC_T; - -typedef struct _P2P_ATTRI_GROUP_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - P2P_CLIENT_INFO_DESC_T arClientDesc[1]; /* P2P Client Info Descriptors */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_INFO_T, *P_P2P_ATTRI_GROUP_INFO_T; - - -/* P2P 4.1.17 - P2P Group ID Attribute */ -typedef struct _P2P_ATTRI_GROUP_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_ID_T, *P_P2P_ATTRI_GROUP_ID_T; - - -/* P2P 4.1.18 - P2P Interface Attribute */ -typedef struct _P2P_ATTRI_INTERFACE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 ucIfAddrCount; /* P2P Interface Address Count */ - UINT_8 aucIfAddrList[MAC_ADDR_LEN];/* P2P Interface Address List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTERFACE_T, *P_P2P_ATTRI_INTERFACE_T; - - -/* P2P 4.1.19 - Operating Channel Attribute */ -typedef struct _P2P_ATTRI_OPERATING_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_OPERATING_CHANNEL_T, *P_P2P_ATTRI_OPERATING_CHANNEL_T; - -/* P2P 4.1.20 - Invitation Flags Attribute */ -typedef struct _P2P_ATTRI_INVITATION_FLAG_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucInviteFlagsBitmap; /* Invitation Flags Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INVITATION_FLAG_T, *P_P2P_ATTRI_INVITATION_FLAG_T; - - - -/* P2P 4.1.1 - General WSC Attribute */ -typedef struct _WSC_ATTRIBUTE_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRIBUTE_T, *P_WSC_ATTRIBUTE_T; - -/* WSC 1.0 Table 28 */ -typedef struct _WSC_ATTRI_VERSION_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucVersion; /* Version 1.0 or 1.1 */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_VERSION_T, *P_WSC_ATTRI_VERSION_T; - -typedef struct _WSC_ATTRI_DEVICE_PASSWORD_ID_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2DevPasswordId; /* Device Password ID */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_DEVICE_PASSWORD_ID_T, *P_WSC_ATTRI_DEVICE_PASSWORD_ID_T; - - -typedef struct _WSC_ATTRI_CONFIGURATION_METHOD_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2ConfigMethods; /* Configure Methods */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_CONFIGURATION_METHOD_T, *P_WSC_ATTRI_CONFIGURATION_METHOD_T; - - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - - -//3 /* --------------- WFA P2P Attributes Handler prototype --------------- */ -typedef UINT_32 (*PFN_APPEND_ATTRI_FUNC)(P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16); - -typedef VOID (*PFN_HANDLE_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T); - -typedef VOID (*PFN_VERIFY_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T, PUINT_16); - -typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC)(P_ADAPTER_T, P_STA_RECORD_T); - - -typedef struct _APPEND_VAR_ATTRI_ENTRY_T { - UINT_16 u2EstimatedFixedAttriLen; /* For fixed length */ - PFN_CALCULATE_VAR_ATTRI_LEN_FUNC pfnCalculateVariableAttriLen; - PFN_APPEND_ATTRI_FUNC pfnAppendAttri; -} APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T; - -typedef enum _ENUM_CONFIG_METHOD_SEL { - ENUM_CONFIG_METHOD_SEL_AUTO, - ENUM_CONFIG_METHOD_SEL_USER, - ENUM_CONFIG_METHOD_SEL_NUM -} ENUM_CONFIG_METHOD_SEL, *P_ENUM_CONFIG_METHOD_SEL; - -typedef enum _ENUM_P2P_FORMATION_POLICY { - ENUM_P2P_FORMATION_POLICY_AUTO = 0, - ENUM_P2P_FORMATION_POLICY_PASSIVE, /* Device would wait GO NEGO REQ instead of sending it actively. */ - ENUM_P2P_FORMATION_POLICY_NUM -} ENUM_P2P_FORMATION_POLICY, P_ENUM_P2P_FORMATION_POLICY; - -typedef enum _ENUM_P2P_INVITATION_POLICY { - ENUM_P2P_INVITATION_POLICY_USER = 0, - ENUM_P2P_INVITATION_POLICY_ACCEPT_FIRST, - ENUM_P2P_INVITATION_POLICY_DENY_ALL, - ENUM_P2P_INVITATION_POLICY_NUM -} ENUM_P2P_INVITATION_POLICY, P_ENUM_P2P_INVITATION_POLICY; - -//3 /* --------------- Data Structure for P2P Operation --------------- */ -//3 /* Session for CONNECTION SETTINGS of P2P */ -struct _P2P_CONNECTION_SETTINGS_T { - UINT_8 ucDevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - ENUM_P2P_FORMATION_POLICY eFormationPolicy; /* Formation Policy. */ - - /*------------WSC Related Param---------------*/ - UINT_16 u2ConfigMethodsSupport; /* Prefered configure method. - * Some device may not have keypad. - */ - ENUM_CONFIG_METHOD_SEL eConfigMethodSelType; - UINT_16 u2TargetConfigMethod; /* Configure method selected by user or auto. */ - UINT_16 u2LocalConfigMethod; /* Configure method of target. */ - BOOLEAN fgIsPasswordIDRdy; - /*------------WSC Related Param---------------*/ - - UINT_8 ucClientConfigTimeout; - UINT_8 ucGoConfigTimeout; - - UINT_8 ucSecondaryDevTypeCount; -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT]; -#endif - - -#if 0 - UINT_8 ucRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ - -#endif -#else - UINT_8 ucRfChannelListSize; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - UINT_8 aucChannelEntriesField[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; -#endif -#endif - - /* Go Intent */ - UINT_8 ucTieBreaker; - UINT_8 ucGoIntent; - - /* For Device Capability */ - BOOLEAN fgSupportServiceDiscovery; - BOOLEAN fgSupportClientDiscoverability; - BOOLEAN fgSupportConcurrentOperation; - BOOLEAN fgSupportInfraManaged; - BOOLEAN fgSupportInvitationProcedure; - - /* For Group Capability */ - BOOLEAN fgSupportPersistentP2PGroup; - BOOLEAN fgSupportIntraBSSDistribution; - BOOLEAN fgSupportCrossConnection; - BOOLEAN fgSupportPersistentReconnect; - - BOOLEAN fgP2pGroupLimit; - - BOOLEAN fgSupportOppPS; - UINT_16 u2CTWindow; - - BOOLEAN fgIsScanReqIssued; - BOOLEAN fgIsServiceDiscoverIssued; - - - /*============ Target Device Connection Settings ============*/ - - /* Discover Target Device Info. */ - BOOLEAN fgIsDevId; - BOOLEAN fgIsDevType; - - /* Encryption mode of Target Device */ - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - /* SSID - * 1. AP Mode, this is the desired SSID user specified. - * 2. Client Mode, this is the target SSID to be connected to. - */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - UINT_8 ucSSIDLen; - - /* Operating channel requested. */ - UINT_8 ucOperatingChnl; - ENUM_BAND_T eBand; - - /* Linten channel requested. */ - UINT_8 ucListenChnl; - - /* For device discover address/type. */ - UINT_8 aucTargetDevAddr[MAC_ADDR_LEN]; /* P2P Device Address, for P2P Device Discovery & P2P Connection. */ - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_DEVICE_DESC_T prTargetP2pDesc; -#endif - - UINT_8 ucLastStatus; /* P2P FSM would append status attribute according to this field. */ - - -#if !CFG_DISABLE_DELAY_PROVISION_DISCOVERY - UINT_8 ucLastDialogToken; - UINT_8 aucIndicateDevAddr[MAC_ADDR_LEN]; -#endif - -#if 0 - UINT_8 ucTargetRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucTargetChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ -#endif -#endif - -}; - - -typedef struct _NOA_TIMING_T { - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} NOA_TIMING_T, *P_NOA_TIMING_T; - -typedef enum _ENUM_P2P_IOCTL_T { - P2P_IOCTL_IDLE = 0, - P2P_IOCTL_DEV_DISCOVER, - P2P_IOCTL_INVITATION_REQ, - P2P_IOCTL_SERV_DISCOVER, - P2P_IOCTL_WAITING, - P2P_IOCTL_NUM -} ENUM_P2P_IOCTL_T; - - - -/*---------------- Service Discovery Related -------------------*/ -typedef enum _ENUM_SERVICE_TX_TYPE_T { - ENUM_SERVICE_TX_TYPE_BY_DA, - ENUM_SERVICE_TX_TYPE_BY_CHNL, - ENUM_SERVICE_TX_TYPE_NUM -} ENUM_SERVICE_TX_TYPE_T; - - -typedef struct _SERVICE_DISCOVERY_FRAME_DATA_T { - QUE_ENTRY_T rQueueEntry; - P_MSDU_INFO_T prSDFrame; - ENUM_SERVICE_TX_TYPE_T eServiceType; - UINT_8 ucSeqNum; - union { - - UINT_8 ucChannelNum; - UINT_8 aucPeerAddr[MAC_ADDR_LEN]; - } uTypeData; - BOOLEAN fgIsTxDoneIndicate; -} SERVICE_DISCOVERY_FRAME_DATA_T, *P_SERVICE_DISCOVERY_FRAME_DATA_T; - - - - -struct _P2P_FSM_INFO_T_DEPRECATED { - /* P2P FSM State */ - ENUM_P2P_STATE_T eCurrentState; - - /* Channel */ - BOOLEAN fgIsChannelRequested; - - - - - - - - - - - ENUM_P2P_STATE_T ePreviousState; - - ENUM_P2P_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - - UINT_8 aucTargetIfAddr[PARAM_MAC_ADDR_LEN]; - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - - BOOLEAN fgIsRsponseProbe; /* Indicate if P2P FSM can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfReqMsg; /* Used for SAA FSM request message. */ - - /* Channel Privilege */ - UINT_8 ucSeqNumOfChReq; /* Used for Channel Request message. */ - - - UINT_8 ucSeqNumOfScnMsg; /* Used for SCAN FSM request message. */ - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - UINT_8 ucRxDialogToken; - - /* Timer */ - TIMER_T rDeviceDiscoverTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - - TIMER_T rRejoinTimer; /* A timer used for Action frame timeout usage. */ - - - /* Flag to indicate Provisioning */ - BOOLEAN fgIsConnectionRequested; - - /* Current IOCTL. */ - ENUM_P2P_IOCTL_T eP2pIOCTL; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - /*--------SERVICE DISCOVERY--------*/ - QUE_T rQueueGASRx; /* Input Request/Response. */ - QUE_T rQueueGASTx; /* Output Response. */ - P_SERVICE_DISCOVERY_FRAME_DATA_T prSDRequest; - UINT_8 ucVersionNum; /* GAS packet sequence number for...Action Frame? */ - UINT_8 ucGlobalSeqNum; /* Sequence Number of RX SD packet. */ - /*--------Service DISCOVERY--------*/ - - /*--------DEVICE DISCOVERY---------*/ - UINT_8 aucTargetGroupID[PARAM_MAC_ADDR_LEN]; - UINT_16 u2TargetGroupSsidLen; - UINT_8 aucTargetSsid[32]; - UINT_8 aucSearchingP2pDevice[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDLToken; - /*----------------------------------*/ - - /* Indicating Peer Status. */ - UINT_32 u4Flags; - - /*Indicating current running mode.*/ - BOOLEAN fgIsApMode; - - - /*------------INVITATION------------*/ - ENUM_P2P_INVITATION_POLICY eInvitationRspPolicy; - /*----------------------------------*/ - -}; - - - -struct _P2P_SPECIFIC_BSS_INFO_T { - /* For GO(AP) Mode - Compose TIM IE */ - UINT_16 u2SmallestAID; - UINT_16 u2LargestAID; - UINT_8 ucBitmapCtrl; - //UINT_8 aucPartialVirtualBitmap[MAX_LEN_TIM_PARTIAL_BMP]; - - /* For GC/GO OppPS */ - BOOLEAN fgEnableOppPS; - UINT_16 u2CTWindow; - - /* For GC/GO NOA */ - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - NOA_TIMING_T arNoATiming[P2P_MAXIMUM_NOA_COUNT]; - - BOOLEAN fgIsNoaAttrExisted; - - /* For P2P Device */ - UINT_8 ucRegClass; /* Regulatory Class for channel. */ - UINT_8 ucListenChannel; /* Linten Channel only on channels 1, 6 and 11 in the 2.4 GHz. */ - - UINT_8 ucPreferredChannel; /* Operating Channel, should be one of channel list in p2p connection settings. */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - - /* Extened Listen Timing. */ - UINT_16 u2AvailabilityPeriod; - UINT_16 u2AvailabilityInterval; - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - UINT_16 u2IELenForBCN; - UINT_8 aucBeaconIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -// UINT_16 u2IELenForProbeRsp; -// UINT_8 aucProbeRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2IELenForAssocRsp; - UINT_8 aucAssocRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -#else - UINT_16 u2AttributeLen; - UINT_8 aucAttributesCache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2WscAttributeLen; - UINT_8 aucWscAttributesCache[WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; -#endif - UINT_8 aucGroupID[MAC_ADDR_LEN]; - UINT_16 u2GroupSsidLen; - UINT_8 aucGroupSsid[ELEM_MAX_LEN_SSID]; - - PARAM_CUSTOM_NOA_PARAM_STRUC_T rNoaParam; - PARAM_CUSTOM_OPPPS_PARAM_STRUC_T rOppPsParam; - -}; - - - - - - - -typedef struct _MSG_P2P_DEVICE_DISCOVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4DevDiscoverTime; /* 0: Infinite, 1~X: in unit of MS. */ - BOOLEAN fgIsSpecificType; -#if CFG_ENABLE_WIFI_DIRECT - P2P_DEVICE_TYPE_T rTargetDeviceType; -#endif - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN]; -} MSG_P2P_DEVICE_DISCOVER_T, *P_MSG_P2P_DEVICE_DISCOVER_T; - - - -typedef struct _MSG_P2P_INVITATION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; /* Target Device ID to be invited. */ -} MSG_P2P_INVITATION_REQUEST_T, *P_MSG_P2P_INVITATION_REQUEST_T; - -typedef struct _MSG_P2P_FUNCTION_SWITCH_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsFuncOn; -} MSG_P2P_FUNCTION_SWITCH_T, *P_MSG_P2P_FUNCTION_SWITCH_T; - -typedef struct _MSG_P2P_SERVICE_DISCOVERY_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; - BOOLEAN fgNeedTxDoneIndicate; - UINT_8 ucSeqNum; -} MSG_P2P_SERVICE_DISCOVERY_REQUEST_T, *P_MSG_P2P_SERVICE_DISCOVERY_REQUEST_T; - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define p2pChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState = (_eNewMediaState));\ - wfdChangeMediaState((_prAdapter),NETWORK_TYPE_P2P_INDEX,(_eNewMediaState)); - -#define ATTRI_ID(_fp) (((P_P2P_ATTRIBUTE_T) _fp)->ucId) -#define ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[0]) | \ - ((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[1] << 8)) - - -#define ATTRI_SIZE(_fp) (P2P_ATTRI_HDR_LEN + ATTRI_LEN(_fp)) - -#define P2P_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += ATTRI_SIZE(_pucAttriBuf)) ) - - -#define P2P_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WSC_ATTRI_ID(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[1])) - -#define WSC_ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[1])) - - -#define WSC_ATTRI_SIZE(_fp) (WSC_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp)) - -#define WSC_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WSC_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WSC_ATTRI_SIZE(_pucAttriBuf)) ) - -#define WSC_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WFD_ATTRI_ID(_fp) (((P_WFD_ATTRIBUTE_T) _fp)->ucElemID) - -#define WFD_ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[1])) - -#define WFD_ATTRI_SIZE(_fp) (WFD_ATTRI_HDR_LEN + WFD_ATTRI_LEN(_fp)) - -#define WFD_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WFD_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WFD_ATTRI_SIZE(_pucAttriBuf)) ) - - -#if DBG - #define ASSERT_BREAK(_exp) \ - { \ - if (!(_exp)) { \ - ASSERT(FALSE); \ - break; \ - } \ - } - -#else - #define ASSERT_BREAK(_exp) -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*======P2P State======*/ -VOID -p2pStateInit_LISTEN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prSP2pBssInfo, - IN UINT_8 ucListenChannel - ); - -VOID -p2pStateAbort_LISTEN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_SEARCH_SCAN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_GO_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_GC_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_CONFIGURATION( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecBssInfo - ); - -VOID -p2pStateAbort_CONFIGURATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_JOIN( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_JOIN( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P Functions ======*/ - - -VOID -p2pFuncInitGO( - IN P_ADAPTER_T prAdapter - ); - - - - - -VOID -p2pFuncDisconnect( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -VOID -p2pFuncSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ); - -VOID -p2pFuncRunEventProvisioningComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -p2pFuncSetGroupID( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucGroupID, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen - ); - - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityReqFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityRspFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - - -UINT_8 -p2pFuncGetVersionNumOfSD( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P FSM ======*/ -VOID -p2pFsmRunEventConnectionRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventRxGroupNegotiationReqFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationConfirmTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -WLAN_STATUS -p2pFsmRunEventInvitationRequestTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - - -VOID -p2pFsmRunEventRxDeauthentication( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxDisassociation( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventBeaconTimeout( - IN P_ADAPTER_T prAdapter - ); - - - -WLAN_STATUS -p2pFsmRunEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -#if 1 -#endif - - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmRunEventConnectionAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionTrigger( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventP2PFunctionSwitch( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChGrant( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionPause( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN UINT_8 aucTargetAddr[] - ); - -VOID -p2pUpdateBssInfoForJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmInit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmUninit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmSteps( - IN P_ADAPTER_T prAdapter, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStartGO( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pAssignSsid( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -VOID -p2pFsmRunEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventIOReqTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventSearchPeriodTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventFsmTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventRejoinTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - - - - -/*=============== P2P Function Related ================*/ - -/*=============== P2P Function Related ================*/ - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -p2pTest( - IN P_ADAPTER_T prAdapter - ); -#endif /* CFG_TEST_WIFI_DIRECT_GO */ - - - - -VOID -p2pGenerateP2P_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -VOID -p2pGenerateP2P_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - - -UINT_32 -p2pCalculateP2P_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pCalculateP2P_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pCalculateP2P_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -VOID -p2pGenerateWSC_IEForProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateWSC_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_16 -p2pCalculateWSC_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -UINT_32 -p2pCalculateWSC_IELenForProbeResp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriStatus( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_32 -p2pAppendAttriCapability( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGoIntent( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriCfgTimeout( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGroupBssid( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriDeviceIDForBeacon( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForProbeReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForDeviceDiscoveryReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriListenChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriIntendP2pIfAddr( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriChannelList( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenChannelList( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriNoA( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriGroupInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenGroupInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pAppendAttriP2pGroupID( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriOperatingChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriInvitationFlag( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -VOID -p2pGenerateWscIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -UINT_32 -p2pAppendAttriWSCConfigMethod ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCVersion ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegReqDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegRspDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -WLAN_STATUS -p2pGetWscAttriList( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -WLAN_STATUS -p2pGetAttriList ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pSendProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFsmRunEventRxProbeRequestFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ); - -WLAN_STATUS -p2pRxPublicActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationRspFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationCfmFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -#if 0 // frog -BOOLEAN -scanMatchFilterOfP2P ( - IN P_SW_RFB_T prSWRfb, - IN PP_BSS_DESC_T pprBssDesc - ); -#endif // frog - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -VOID -p2pFuncCompleteIOCTL( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rWlanStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -p2pDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(IE_P2P_T) == (2+4+1)); // all UINT_8 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRIBUTE_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_STATUS_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_REASON_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CAPABILITY_T) == (3+2)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_ID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GO_INTENT_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CFG_TIMEOUT_T) == (3+2)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#endif - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_BSSID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_EXT_LISTEN_TIMING_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTENDED_IF_ADDR_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_MANAGEABILITY_T) == (3+1)); - - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CHANNEL_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(CHANNEL_ENTRY_FIELD_T) == 3); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_NOA_T) == (3+3)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(NOA_DESCRIPTOR_T) == 13); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_TYPE_T) == 8); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_INFO_T) == (3+6+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_NAME_TLV_T) == (4+32)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_CLIENT_INFO_DESC_T) == (1+6+6+1+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_INFO_T) == (3+(1+6+6+1+2+8+1+8))); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_ID_T) == (3+38)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTERFACE_T) == (3+13)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#endif - - - return; -} -#endif /* _lint */ - -#endif /* _P2P_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_func.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_func.h deleted file mode 100755 index 8b3a847a4f2c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_func.h +++ /dev/null @@ -1,362 +0,0 @@ -#ifndef _P2P_FUNC_H -#define _P2P_FUNC_H - - -VOID -p2pFuncRequestScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - -VOID -p2pFuncCancelScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - - -VOID -p2pFuncStartGO( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ); - - - -VOID -p2pFuncAcquireCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - - -VOID -p2pFuncReleaseCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -p2pFuncSetChannel( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ); - - -BOOLEAN -p2pFuncRetryJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ); - -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - - -WLAN_STATUS -p2pFuncTxMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ); - -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ); - - -BOOLEAN -p2pFuncValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -p2pFuncValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - - -VOID -p2pFuncResetStaRecStatus( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncInitConnectionSettings( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ); - - -BOOLEAN -p2pFuncParseCheckForP2PInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -BOOLEAN -p2pFuncValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -p2pFuncValidateRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFuncIsAPMode( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFuncParseBeaconContent( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ); - - -P_BSS_DESC_T -p2pFuncKeepOnConnection( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - -VOID -p2pFuncStoreAssocRspIEBuffer( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -p2pFuncMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ); - -VOID -p2pFuncUpdateMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ); - - -VOID -p2pFuncGetStationInfo( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ); - -BOOLEAN -p2pFuncGetAttriList( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ); - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateExtra_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pFuncGenerateP2p_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateWSC_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateP2p_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateWSC_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateWSC_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - - -UINT_32 -p2pFuncCalculateP2P_IELen( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -VOID -p2pFuncGenerateP2P_IE( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pFuncAppendAttriExtListenTiming( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -VOID -p2pFuncDissolve( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - - -P_IE_HDR_T -p2pFuncGetSpecIE( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ); - - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_16 u2AttriID - ); - - -BOOLEAN -p2pFuncIsChannelGrant( - IN P_ADAPTER_T prAdapter - ); - - - -WLAN_STATUS wfdChangeMediaState( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState); -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_ie.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_ie.h deleted file mode 100755 index e6320542aaed..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_ie.h +++ /dev/null @@ -1,232 +0,0 @@ -#ifndef _P2P_IE_H -#define _P2P_IE_H - -#if CFG_SUPPORT_WFD - -#define ELEM_MAX_LEN_WFD 62 // TODO: Move to appropriate place - - -/*---------------- WFD Data Element Definitions ----------------*/ -/* WFD 4.1.1 - WFD IE format */ -#define WFD_OUI_TYPE_LEN 4 -#define WFD_IE_OUI_HDR (ELEM_HDR_LEN + WFD_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */ - -/* WFD 4.1.1 - General WFD Attribute */ -#define WFD_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */ - -/* WFD Attribute Code */ -#define WFD_ATTRI_ID_DEV_INFO 0 -#define WFD_ATTRI_ID_ASSOC_BSSID 1 -#define WFD_ATTRI_ID_COUPLED_SINK_INFO 6 -#define WFD_ATTRI_ID_EXT_CAPABILITY 7 -#define WFD_ATTRI_ID_SESSION_INFO 9 -#define WFD_ATTRI_ID_ALTER_MAC_ADDRESS 10 - -/* Maximum Length of WFD Attributes */ -#define WFD_ATTRI_MAX_LEN_DEV_INFO 6 /* 0 */ -#define WFD_ATTRI_MAX_LEN_ASSOC_BSSID 6 /* 1 */ -#define WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO 7 /* 6 */ -#define WFD_ATTRI_MAX_LEN_EXT_CAPABILITY 2 /* 7 */ -#define WFD_ATTRI_MAX_LEN_SESSION_INFO 0 /* 9 */ /* 24 * #Clients */ -#define WFD_ATTRI_MAX_LEN_ALTER_MAC_ADDRESS 6 /* 10 */ - - - - - -/* WFD 1.10 5.1.1 */ -typedef struct _IE_WFD_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 aucWFDAttributes[1]; /* WFD Subelement */ -} __KAL_ATTRIB_PACKED__ IE_WFD_T, *P_IE_WFD_T; - -typedef struct _WFD_ATTRIBUTE_T { - UINT_8 ucElemID; /* Subelement ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ WFD_ATTRIBUTE_T, *P_WFD_ATTRIBUTE_T; - -typedef struct _WFD_DEVICE_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_16 u2WfdDevInfo; - UINT_16 u2SessionMgmtCtrlPort; - UINT_16 u2WfdDevMaxSpeed; -} __KAL_ATTRIB_PACKED__ WFD_DEVICE_INFORMATION_IE_T, *P_WFD_DEVICE_INFORMATION_IE_T; - -typedef struct _WFD_ASSOCIATED_BSSID_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_8 aucAssocBssid[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_ASSOCIATED_BSSID_IE_T, *P_WFD_ASSOCIATED_BSSID_IE_T; - -typedef struct _WFD_COUPLE_SINK_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_8 ucCoupleSinkStatusBp; - UINT_8 aucCoupleSinkMac[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_COUPLE_SINK_INFORMATION_IE_T, *P_WFD_COUPLE_SINK_INFORMATION_IE_T; - -typedef struct _WFD_EXTENDED_CAPABILITY_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_16 u2WfdExtCapabilityBp; -} -__KAL_ATTRIB_PACKED__ WFD_EXTENDED_CAPABILITY_IE_T, *P_WFD_EXTENDED_CAPABILITY_IE_T; - -typedef struct _WFD_SESSION_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - PUINT_8 pucWfdDevInfoDesc[1]; -} __KAL_ATTRIB_PACKED__ WFD_SESSION_INFORMATION_IE_T, *P_WFD_SESSION_INFORMATION_IE_T; - -typedef struct _WFD_DEVICE_INFORMATION_DESCRIPTOR_T { - UINT_8 ucLength; - UINT_8 aucDevAddr[MAC_ADDR_LEN]; - UINT_8 aucAssocBssid[MAC_ADDR_LEN]; - UINT_16 u2WfdDevInfo; - UINT_16 u2WfdDevMaxSpeed; - UINT_8 ucCoupleSinkStatusBp; - UINT_8 aucCoupleSinkMac[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_DEVICE_INFORMATION_DESCRIPTOR_T, *P_WFD_DEVICE_INFORMATION_DESCRIPTOR_T; - - -#endif - - -UINT_32 -p2pCalculate_IEForAssocReq( - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pGenerate_IEForAssocReq( - - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#if CFG_SUPPORT_WFD - -UINT_32 -wfdFuncAppendAttriDevInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriAssocBssid( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriCoupledSinkInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriExtCapability( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncCalculateAttriLenSessionInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -wfdFuncAppendAttriSessionInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncCalculateWfdIELenForProbeResp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -wfdFuncGenerateWfdIEForProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -wfdFuncCalculateWfdIELenForAssocReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -UINT_32 -wfdFuncCalculateWfdIELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -wfdFuncCalculateWfdIELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#endif - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_rlm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_rlm.h deleted file mode 100755 index fe20ac38048f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_rlm.h +++ /dev/null @@ -1,109 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm.h#1 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - - - - -#ifndef _P2P_RLM_H -#define _P2P_RLM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -VOID -rlmFuncInitialChannelList( - IN P_ADAPTER_T prAdapter - ); - -VOID -rlmFuncCommonChannelList( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ); - -UINT_8 -rlmFuncFindOperatingClass( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ); - -BOOLEAN -rlmFuncFindAvailableChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ); - -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_rlm_obss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_rlm_obss.h deleted file mode 100755 index fa93d94decde..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_rlm_obss.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - - - -#ifndef _P2P_RLM_OBSS_H -#define _P2P_RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_scan.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_scan.h deleted file mode 100755 index 8ba3199f4b02..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_scan.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_scan.h#1 $ -*/ - -/*! \file "scan.h" - \brief - -*/ - - - - -#ifndef _P2P_SCAN_H -#define _P2P_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ); - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ); - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scnEventReturnChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ); - -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -VOID -scanRemoveAllP2pBssDesc( - P_ADAPTER_T prAdapter - ); - -VOID -scanRemoveP2pBssDesc( - P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - - -P_BSS_DESC_T -scanP2pSearchDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ); - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_state.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_state.h deleted file mode 100755 index 22bcf1798ce3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/p2p_state.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef _P2P_STATE_H -#define _P2P_STATE_H - -BOOLEAN -p2pStateInit_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ); - - -VOID -p2pStateAbort_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateAbort_REQING_CHANNEL( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateInit_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -p2pStateAbort_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/privacy.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/privacy.h deleted file mode 100755 index 8f6ffd131803..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/privacy.h +++ /dev/null @@ -1,288 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/privacy.h#1 $ -*/ - -/*! \file privacy.h - \brief This file contains the function declaration for privacy.c. -*/ - - - -/* -** $Log: privacy.h $ - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for auth mode and encryption status setting from build connection command - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for wapi - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the tx done callback handle function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for mac header privacy bit setting - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the structure for parsing the EAPoL frame - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the class error function parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection structure - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _PRIVACY_H -#define _PRIVACY_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_KEY_NUM 4 -#define WEP_40_LEN 5 -#define WEP_104_LEN 13 -#define LEGACY_KEY_MAX_LEN 16 -#define CCMP_KEY_LEN 16 -#define TKIP_KEY_LEN 32 -#define MAX_KEY_LEN 32 -#define MIC_RX_KEY_OFFSET 16 -#define MIC_TX_KEY_OFFSET 24 -#define MIC_KEY_LEN 8 - -#define WEP_KEY_ID_FIELD BITS(0,29) -#define KEY_ID_FIELD BITS(0,7) - -#define IS_TRANSMIT_KEY BIT(31) -#define IS_UNICAST_KEY BIT(30) -#define IS_AUTHENTICATOR BIT(28) - -#define CIPHER_SUITE_NONE 0 -#define CIPHER_SUITE_WEP40 1 -#define CIPHER_SUITE_TKIP 2 -#define CIPHER_SUITE_TKIP_WO_MIC 3 -#define CIPHER_SUITE_CCMP 4 -#define CIPHER_SUITE_WEP104 5 -#define CIPHER_SUITE_BIP 6 -#define CIPHER_SUITE_WEP128 7 -#define CIPHER_SUITE_WPI 8 - -#define WPA_KEY_INFO_KEY_TYPE BIT(3) /* 1 = Pairwise, 0 = Group key */ -#define WPA_KEY_INFO_MIC BIT(8) -#define WPA_KEY_INFO_SECURE BIT(9) - -#define MASK_2ND_EAPOL (WPA_KEY_INFO_KEY_TYPE | WPA_KEY_INFO_MIC) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _IEEE_802_1X_HDR { - UINT_8 ucVersion; - UINT_8 ucType; - UINT_16 u2Length; - /* followed by length octets of data */ -} IEEE_802_1X_HDR, *P_IEEE_802_1X_HDR; - -typedef struct _EAPOL_KEY { - UINT_8 ucType; - /* Note: key_info, key_length, and key_data_length are unaligned */ - UINT_8 aucKeyInfo[2]; /* big endian */ - UINT_8 aucKeyLength[2]; /* big endian */ - UINT_8 aucReplayCounter[8]; - UINT_8 aucKeyNonce[16]; - UINT_8 aucKeyIv[16]; - UINT_8 aucKeyRsc[8]; - UINT_8 aucKeyId[8]; /* Reserved in IEEE 802.11i/RSN */ - UINT_8 aucKeyMic[16]; - UINT_8 aucKeyDataLength[2]; /* big endian */ - /* followed by key_data_length bytes of key_data */ -} EAPOL_KEY, *P_EAPOL_KEY; - -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; - -#if 0 -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -secInit( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ); - -VOID -secSetPortBlocked( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPort - ); - -BOOL -secCheckClassError( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ); - -BOOL -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -secRxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -secSetCipherSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ); - -BOOL -secProcessEAPOL( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen - ); - -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T pMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ); - -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ); - -VOID -secClearPmkid( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secRsnKeyHandshakeEnabled( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secTransmitKeyExist( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secEnabledInAis( - IN P_ADAPTER_T prAdapter - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRIVACY_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rate.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rate.h deleted file mode 100755 index 74c4bb0fc440..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rate.h +++ /dev/null @@ -1,111 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rate.h#1 $ -*/ - -/*! \file rate.h - \brief This file contains the rate utility function of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: rate.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _RATE_H -#define _RATE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in rate.c */ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ); - -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ); - -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ); - -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RATE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm.h deleted file mode 100755 index 197202f73e76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm.h +++ /dev/null @@ -1,451 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm.h#2 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - - - -/* -** $Log: rlm.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cm.chang - * [WCXRP00000114] [MT6620 Wi-Fi] [Driver] Fix compiling warning in Linux about RLM network index checking - * Enum member cannot be used as compiling option decision in Linux - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX HT GF compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 17 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * MT6620 does not support L-SIG TXOP - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Move default value of HT capability to rlm.h - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Modify the prototype of rlmRecAssocRspHtInfo() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add several function prototypes for HT operation - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -#ifndef _RLM_H -#define _RLM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ELEM_EXT_CAP_DEFAULT_VAL \ - (ELEM_EXT_CAP_20_40_COEXIST_SUPPORT /*| ELEM_EXT_CAP_PSMP_CAP*/) - - -#if CFG_SUPPORT_RX_STBC - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_1_SS -#else - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_NO_SUPPORTED -#endif - -#if CFG_SUPPORT_RX_SGI - #define FIELD_HT_CAP_INFO_SGI_20M HT_CAP_INFO_SHORT_GI_20M - #define FIELD_HT_CAP_INFO_SGI_40M HT_CAP_INFO_SHORT_GI_40M -#else - #define FIELD_HT_CAP_INFO_SGI_20M 0 - #define FIELD_HT_CAP_INFO_SGI_40M 0 -#endif - -#if CFG_SUPPORT_RX_HT_GF - #define FIELD_HT_CAP_INFO_HT_GF HT_CAP_INFO_HT_GF -#else - #define FIELD_HT_CAP_INFO_HT_GF 0 -#endif - -#define HT_CAP_INFO_DEFAULT_VAL \ - (HT_CAP_INFO_SUP_CHNL_WIDTH | FIELD_HT_CAP_INFO_HT_GF | \ - FIELD_HT_CAP_INFO_SGI_20M | FIELD_HT_CAP_INFO_SGI_40M | \ - FIELD_HT_CAP_INFO_RX_STBC | HT_CAP_INFO_DSSS_CCK_IN_40M) - - - -#define AMPDU_PARAM_DEFAULT_VAL \ - (AMPDU_PARAM_MAX_AMPDU_LEN_64K | AMPDU_PARAM_MSS_NO_RESTRICIT) - - -#define SUP_MCS_TX_DEFAULT_VAL \ - SUP_MCS_TX_SET_DEFINED /* TX defined and TX/RX equal (TBD) */ - -#if CFG_SUPPORT_MFB - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_BOTH -#else - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_NO_FB -#endif - -#if CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_RDR HT_EXT_CAP_RD_RESPONDER -#else - #define FIELD_HT_EXT_CAP_RDR 0 -#endif - -#if CFG_SUPPORT_MFB || CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_HTC HT_EXT_CAP_HTC_SUPPORT -#else - #define FIELD_HT_EXT_CAP_HTC 0 -#endif - -#define HT_EXT_CAP_DEFAULT_VAL \ - (HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE | \ - FIELD_HT_EXT_CAP_MFB | FIELD_HT_EXT_CAP_HTC | \ - FIELD_HT_EXT_CAP_RDR) - -#define TX_BEAMFORMING_CAP_DEFAULT_VAL 0 -#define ASEL_CAP_DEFAULT_VAL 0 - - -/* Define bandwidth from user setting */ -#define CONFIG_BW_20_40M 0 -#define CONFIG_BW_20M 1 /* 20MHz only */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* It is used for RLM module to judge if specific network is valid - * Note: Ad-hoc mode of AIS is not included now. (TBD) - */ -#define RLM_NET_PARAM_VALID(_prBssInfo) \ - (IS_BSS_ACTIVE(_prBssInfo) && \ - ((_prBssInfo)->eConnectionState == PARAM_MEDIA_STATE_CONNECTED || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_ACCESS_POINT || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_IBSS || \ - RLM_NET_IS_BOW(_prBssInfo)) \ - ) - -#define RLM_NET_IS_11N(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11N) -#define RLM_NET_IS_11GN(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11GN) - - -/* This macro is used to sweep all 3 networks */ -#define RLM_NET_FOR_EACH(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_INDEX_NUM; \ - (_ucNetIdx)++) - -/* This macro is used to sweep all networks excluding BOW */ -#if CFG_ENABLE_BT_OVER_WIFI - /* Note: value of enum NETWORK_TYPE_BOW_INDEX is validated in - * rlmStuctureCheck(). - */ - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_BOW_INDEX; \ - (_ucNetIdx)++) - - #define RLM_NET_IS_BOW(_prBssInfo) \ - ((_prBssInfo)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) - -#else - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) RLM_NET_FOR_EACH(_ucNetIdx) - #define RLM_NET_IS_BOW(_prBssInfo) (FALSE) - -#endif /* end of CFG_ENABLE_BT_OVER_WIFI */ - - -/* The bandwidth modes are not used anymore. They represent if AP - * can use 20/40 bandwidth, not all modes. (20110411) - */ -#define RLM_AP_IS_BW_40_ALLOWED(_prAdapter, _prBssInfo) \ - (((_prBssInfo)->eBand == BAND_2G4 && \ - (_prAdapter)->rWifiVar.rConnSettings.uc2G4BandwidthMode \ - == CONFIG_BW_20_40M) || \ - ((_prBssInfo)->eBand == BAND_5G && \ - (_prAdapter)->rWifiVar.rConnSettings.uc5GBandwidthMode \ - == CONFIG_BW_20_40M)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#ifndef _lint -__KAL_INLINE__ VOID -rlmDataTypeCheck ( - VOID - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_AIS_INDEX < NETWORK_TYPE_BOW_INDEX); - - #if CFG_ENABLE_WIFI_DIRECT - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_P2P_INDEX < NETWORK_TYPE_BOW_INDEX); - #endif -#endif - - return; -} -#endif /* _lint */ - -#endif /* _RLM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_domain.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_domain.h deleted file mode 100755 index fda01372bf37..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_domain.h +++ /dev/null @@ -1,358 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_domain.h#1 $ -*/ - -/*! \file "rlm_domain.h" - \brief -*/ - - - -/* -** $Log: rlm_domain.h $ - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Declare public rDomainInfo - * -** -*/ - -#ifndef _RLM_DOMAIN_H -#define _RLM_DOMAIN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SUBBAND_NUM 6 - - -#define COUNTRY_CODE_NULL ((UINT_16)0x0) - -/* ISO/IEC 3166-1 two-character country codes */ -#define COUNTRY_CODE_AG (((UINT_16) 'A' << 8) | (UINT_16) 'G') /* Antigua/Barbuda */ -#define COUNTRY_CODE_AI (((UINT_16) 'A' << 8) | (UINT_16) 'I') /* Anguilla */ -#define COUNTRY_CODE_AR (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Argentina */ -#define COUNTRY_CODE_AT (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Austria */ -#define COUNTRY_CODE_AU (((UINT_16) 'A' << 8) | (UINT_16) 'U') /* Australia */ -#define COUNTRY_CODE_AW (((UINT_16) 'A' << 8) | (UINT_16) 'W') /* Aruba */ -#define COUNTRY_CODE_BB (((UINT_16) 'B' << 8) | (UINT_16) 'B') /* Barbados */ -#define COUNTRY_CODE_BE (((UINT_16) 'B' << 8) | (UINT_16) 'E') /* Belgium */ -#define COUNTRY_CODE_BM (((UINT_16) 'B' << 8) | (UINT_16) 'M') /* Bermuda */ -#define COUNTRY_CODE_BO (((UINT_16) 'B' << 8) | (UINT_16) 'O') /* Bolivia */ -#define COUNTRY_CODE_BR (((UINT_16) 'B' << 8) | (UINT_16) 'R') /* Brazil */ -#define COUNTRY_CODE_BS (((UINT_16) 'B' << 8) | (UINT_16) 'S') /* Bahamas */ -#define COUNTRY_CODE_BY (((UINT_16) 'B' << 8) | (UINT_16) 'Y') /* Belarus */ -#define COUNTRY_CODE_CA (((UINT_16) 'C' << 8) | (UINT_16) 'A') /* Canada */ -#define COUNTRY_CODE_CH (((UINT_16) 'C' << 8) | (UINT_16) 'H') /* Switzerland */ -#define COUNTRY_CODE_CL (((UINT_16) 'C' << 8) | (UINT_16) 'L') /* Chile */ -#define COUNTRY_CODE_CN (((UINT_16) 'C' << 8) | (UINT_16) 'N') /* China */ -#define COUNTRY_CODE_CO (((UINT_16) 'C' << 8) | (UINT_16) 'O') /* Colombia */ -#define COUNTRY_CODE_CR (((UINT_16) 'C' << 8) | (UINT_16) 'R') /* Costa Rica */ -#define COUNTRY_CODE_CU (((UINT_16) 'C' << 8) | (UINT_16) 'U') /* Cuba */ -#define COUNTRY_CODE_DE (((UINT_16) 'D' << 8) | (UINT_16) 'E') /* Germany */ -#define COUNTRY_CODE_DK (((UINT_16) 'D' << 8) | (UINT_16) 'K') /* Denmark */ -#define COUNTRY_CODE_DM (((UINT_16) 'D' << 8) | (UINT_16) 'M') /* Dominica */ -#define COUNTRY_CODE_DO (((UINT_16) 'D' << 8) | (UINT_16) 'O') /* Dominican Republic */ -#define COUNTRY_CODE_EC (((UINT_16) 'E' << 8) | (UINT_16) 'C') /* Ecuador */ -#define COUNTRY_CODE_EG (((UINT_16) 'E' << 8) | (UINT_16) 'G') /* Egypt */ -#define COUNTRY_CODE_ES (((UINT_16) 'E' << 8) | (UINT_16) 'S') /* Spain */ -#define COUNTRY_CODE_EU (((UINT_16) 'E' << 8) | (UINT_16) 'U') /* ETSI (Europe) */ -#define COUNTRY_CODE_FI (((UINT_16) 'F' << 8) | (UINT_16) 'I') /* Finland */ -#define COUNTRY_CODE_FR (((UINT_16) 'F' << 8) | (UINT_16) 'R') /* France */ -#define COUNTRY_CODE_GB (((UINT_16) 'G' << 8) | (UINT_16) 'B') /* United Kingdom */ -#define COUNTRY_CODE_GD (((UINT_16) 'G' << 8) | (UINT_16) 'D') /* Grenada */ -#define COUNTRY_CODE_GR (((UINT_16) 'G' << 8) | (UINT_16) 'R') /* Greece */ -#define COUNTRY_CODE_GY (((UINT_16) 'G' << 8) | (UINT_16) 'Y') /* Guyana */ -#define COUNTRY_CODE_HK (((UINT_16) 'H' << 8) | (UINT_16) 'K') /* Hong Kong */ -#define COUNTRY_CODE_HT (((UINT_16) 'H' << 8) | (UINT_16) 'T') /* Haiti */ -#define COUNTRY_CODE_HN (((UINT_16) 'H' << 8) | (UINT_16) 'N') /* Honduras */ -#define COUNTRY_CODE_ID (((UINT_16) 'I' << 8) | (UINT_16) 'D') /* Indonesia */ -#define COUNTRY_CODE_IE (((UINT_16) 'I' << 8) | (UINT_16) 'E') /* Ireland */ -#define COUNTRY_CODE_IL (((UINT_16) 'I' << 8) | (UINT_16) 'L') /* Israel */ -#define COUNTRY_CODE_IN (((UINT_16) 'I' << 8) | (UINT_16) 'N') /* India */ -#define COUNTRY_CODE_IR (((UINT_16) 'I' << 8) | (UINT_16) 'R') /* Iran */ -#define COUNTRY_CODE_IS (((UINT_16) 'I' << 8) | (UINT_16) 'S') /* Iceland */ -#define COUNTRY_CODE_IT (((UINT_16) 'I' << 8) | (UINT_16) 'T') /* Italy */ -#define COUNTRY_CODE_JM (((UINT_16) 'J' << 8) | (UINT_16) 'M') /* Jamaica */ -#define COUNTRY_CODE_JO (((UINT_16) 'J' << 8) | (UINT_16) 'O') /* Jordan */ -#define COUNTRY_CODE_JP (((UINT_16) 'J' << 8) | (UINT_16) 'P') /* Japan */ -#define COUNTRY_CODE_KN (((UINT_16) 'K' << 8) | (UINT_16) 'N') /* Saint Kitts and Nevis */ -#define COUNTRY_CODE_KR (((UINT_16) 'K' << 8) | (UINT_16) 'R') /* South Korea */ -#define COUNTRY_CODE_KW (((UINT_16) 'K' << 8) | (UINT_16) 'W') /* Kuwait */ -#define COUNTRY_CODE_LC (((UINT_16) 'L' << 8) | (UINT_16) 'C') /* Saint Lucia */ -#define COUNTRY_CODE_LI (((UINT_16) 'L' << 8) | (UINT_16) 'I') /* Liechtenstein */ -#define COUNTRY_CODE_LK (((UINT_16) 'L' << 8) | (UINT_16) 'K') /* Sri Lanka */ -#define COUNTRY_CODE_LU (((UINT_16) 'L' << 8) | (UINT_16) 'U') /* Luxembourg */ -#define COUNTRY_CODE_MA (((UINT_16) 'M' << 8) | (UINT_16) 'A') /* Morocco */ -#define COUNTRY_CODE_MD (((UINT_16) 'M' << 8) | (UINT_16) 'D') /* Moldova */ -#define COUNTRY_CODE_MX (((UINT_16) 'M' << 8) | (UINT_16) 'X') /* Mexico */ -#define COUNTRY_CODE_MY (((UINT_16) 'M' << 8) | (UINT_16) 'Y') /* Malaysia */ -#define COUNTRY_CODE_NI (((UINT_16) 'N' << 8) | (UINT_16) 'I') /* Nicaragua */ -#define COUNTRY_CODE_NL (((UINT_16) 'N' << 8) | (UINT_16) 'L') /* Netherlands */ -#define COUNTRY_CODE_NO (((UINT_16) 'N' << 8) | (UINT_16) 'O') /* Norway */ -#define COUNTRY_CODE_NZ (((UINT_16) 'N' << 8) | (UINT_16) 'Z') /* New Zealand */ -#define COUNTRY_CODE_OM (((UINT_16) 'O' << 8) | (UINT_16) 'M') /* Oman */ -#define COUNTRY_CODE_PE (((UINT_16) 'P' << 8) | (UINT_16) 'E') /* Peru */ -#define COUNTRY_CODE_PG (((UINT_16) 'P' << 8) | (UINT_16) 'G') /* Papua New Guinea */ -#define COUNTRY_CODE_PH (((UINT_16) 'P' << 8) | (UINT_16) 'H') /* Philippines */ -#define COUNTRY_CODE_PK (((UINT_16) 'P' << 8) | (UINT_16) 'K') /* Pakistan */ -#define COUNTRY_CODE_PR (((UINT_16) 'P' << 8) | (UINT_16) 'R') /* Puerto Rico */ -#define COUNTRY_CODE_PT (((UINT_16) 'P' << 8) | (UINT_16) 'T') /* Portugal */ -#define COUNTRY_CODE_PY (((UINT_16) 'P' << 8) | (UINT_16) 'Y') /* Paraguay */ -#define COUNTRY_CODE_PZ (((UINT_16) 'P' << 8) | (UINT_16) 'Z') /* Panama */ -#define COUNTRY_CODE_RU (((UINT_16) 'R' << 8) | (UINT_16) 'U') /* Russian */ -#define COUNTRY_CODE_SA (((UINT_16) 'S' << 8) | (UINT_16) 'A') /* Saudi Arabia */ -#define COUNTRY_CODE_SE (((UINT_16) 'S' << 8) | (UINT_16) 'E') /* Sweden */ -#define COUNTRY_CODE_SG (((UINT_16) 'S' << 8) | (UINT_16) 'G') /* Singapore */ -#define COUNTRY_CODE_SR (((UINT_16) 'S' << 8) | (UINT_16) 'R') /* Suriname */ -#define COUNTRY_CODE_TW (((UINT_16) 'T' << 8) | (UINT_16) 'W') /* Taiwan */ -#define COUNTRY_CODE_TH (((UINT_16) 'T' << 8) | (UINT_16) 'H') /* Thailand */ -#define COUNTRY_CODE_TR (((UINT_16) 'T' << 8) | (UINT_16) 'R') /* Turkey */ -#define COUNTRY_CODE_TT (((UINT_16) 'T' << 8) | (UINT_16) 'T') /* Trinidad */ -#define COUNTRY_CODE_UA (((UINT_16) 'U' << 8) | (UINT_16) 'A') /* Ukraine */ -#define COUNTRY_CODE_US (((UINT_16) 'U' << 8) | (UINT_16) 'S') /* United States */ -#define COUNTRY_CODE_UY (((UINT_16) 'U' << 8) | (UINT_16) 'Y') /* Uruguay */ -#define COUNTRY_CODE_VC (((UINT_16) 'V' << 8) | (UINT_16) 'C') /* Saint Vincent */ -#define COUNTRY_CODE_VE (((UINT_16) 'V' << 8) | (UINT_16) 'E') /* Venezuela */ -#define COUNTRY_CODE_VN (((UINT_16) 'V' << 8) | (UINT_16) 'N') /* Vietnam */ - -/* dot11RegDomainsSupportValue */ -#define MIB_REG_DOMAIN_FCC 0x10 /* FCC (US) */ -#define MIB_REG_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define MIB_REG_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define MIB_REG_DOMAIN_SPAIN 0x31 /* Spain */ -#define MIB_REG_DOMAIN_FRANCE 0x32 /* France */ -#define MIB_REG_DOMAIN_JAPAN 0x40 /* MPHPT (Japan) */ -#define MIB_REG_DOMAIN_OTHER 0x00 /* other */ - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Define channel offset in unit of 5MHz bandwidth */ -typedef enum _ENUM_CHNL_SPAN_T { - CHNL_SPAN_5 = 1, - CHNL_SPAN_10 = 2, - CHNL_SPAN_20 = 4, - CHNL_SPAN_40 = 8 -} ENUM_CHNL_SPAN_T, *P_ENUM_CHNL_SPAN_T; - -/* Define BSS operating bandwidth */ -typedef enum _ENUM_CHNL_BW_T { - CHNL_BW_20, - CHNL_BW_20_40, - CHNL_BW_10, - CHNL_BW_5 -} ENUM_CHNL_BW_T, *P_ENUM_CHNL_BW_T; - -#if 0 -/* If channel width is CHNL_BW_20_40, the first channel will be SCA and - * the second channel is SCB, then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - UINT_8 ucRegClass; - ENUM_BAND_T eBand; - ENUM_CHNL_SPAN_T eChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - ENUM_CHNL_BW_T eChannelBw; - BOOLEAN fgDfsNeeded; - BOOLEAN fgIbssProhibited; -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - UINT_16 u2CountryCode; - UINT_16 u2MibRegDomainValue; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; - -#else /* New definition 20110830 */ - -/* In all bands, the first channel will be SCA and the second channel is SCB, - * then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - /* Note1: regulation class depends on operation bandwidth and RF band. - * For example: 2.4GHz, 1~13, 20MHz ==> regulation class = 81 - * 2.4GHz, 1~13, SCA ==> regulation class = 83 - * 2.4GHz, 1~13, SCB ==> regulation class = 84 - * Note2: TX power limit is not specified here because path loss is unknown - */ - UINT_8 ucRegClass; /* Regulation class for 20MHz */ - UINT_8 ucBand; /* Type: ENUM_BAND_T */ - UINT_8 ucChannelSpan; /* Type: ENUM_CHNL_SPAN_T */ - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 ucReserved; /* Type: BOOLEAN (fgDfsNeeded) */ -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - PUINT_16 pu2CountryGroup; - UINT_32 u4CountryNum; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; -#endif - -/* The following definitions are not used yet */ -typedef enum _ENUM_CH_SET_2G4_T { - CH_SET_2G4_NA, - CH_SET_2G4_1_11, - CH_SET_2G4_1_13, - CH_SET_2G4_1_14, - CH_SET_2G4_NUM -} ENUM_CH_SET_2G4_T, *P_ENUM_CH_SET_2G4_T; - -typedef enum _ENUM_CH_SET_UNII_LOW_T { - CH_SET_UNII_LOW_NA, - CH_SET_UNII_LOW_36_48, - CH_SET_UNII_LOW_NUM -} ENUM_CH_SET_UNII_LOW_T, *P_ENUM_CH_SET_UNII_LOW_T; - -typedef enum _ENUM_CH_SET_UNII_MID_T { - CH_SET_UNII_MID_NA, - CH_SET_UNII_MID_52_64, - CH_SET_UNII_MID_NUM -} ENUM_CH_SET_UNII_MID_T, *P_ENUM_CH_SET_UNII_MID_T; - -typedef enum _ENUM_CH_SET_UNII_WW_T { - CH_SET_UNII_WW_NA, - CH_SET_UNII_WW_100_128, - CH_SET_UNII_WW_100_140, - CH_SET_UNII_WW_100_116_132_140, - CH_SET_UNII_WW_NUM -} ENUM_CH_SET_UNII_WW_T, *P_ENUM_CH_SET_UNII_WW_T; - -typedef enum _ENUM_CH_SET_UNII_UPPER_T { - CH_SET_UNII_UPPER_NA, - CH_SET_UNII_UPPER_149_161, - CH_SET_UNII_UPPER_149_165, - CH_SET_UNII_UPPER_149_173, - CH_SET_UNII_UPPER_NUM -} ENUM_CH_SET_UNII_UPPER_T, *P_ENUM_CH_SET_UNII_UPPER_T; - -typedef struct _COUNTRY_CH_SET_T { - ENUM_CH_SET_2G4_T e2G4; - ENUM_CH_SET_UNII_LOW_T eUniiLow; - ENUM_CH_SET_UNII_MID_T eUniiMid; - ENUM_CH_SET_UNII_WW_T eUniiWw; - ENUM_CH_SET_UNII_UPPER_T eUniiUpper; -} COUNTRY_CH_SET_T, *P_COUNTRY_CH_SET_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ); - -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ); - -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_DOMAIN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_obss.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_obss.h deleted file mode 100755 index 20533c95762f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_obss.h +++ /dev/null @@ -1,164 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - - - -/* -** $Log: rlm_obss.h $ - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_OBSS_H -#define _RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - - -#define CHNL_LEVEL0 0 -#define CHNL_LEVEL1 1 -#define CHNL_LEVEL2 2 - -#define AFFECTED_CHNL_OFFSET 5 - -#define OBSS_SCAN_MIN_INTERVAL 10 /* In unit of sec */ - -#define PUBLIC_ACTION_MAX_LEN 200 /* In unit of byte */ - -/* P2P GO only */ -/* Define default OBSS Scan parameters (from MIB in spec.) */ -#define dot11OBSSScanPassiveDwell 20 -#define dot11OBSSScanActiveDwell 10 -#define dot11OBSSScanPassiveTotalPerChannel 200 -#define dot11OBSSScanActiveTotalPerChannel 20 -#define dot11BSSWidthTriggerScanInterval 300 /* Unit: sec */ -#define dot11BSSWidthChannelTransitionDelayFactor 5 -#define dot11OBSSScanActivityThreshold 25 - -#define OBSS_20_40M_TIMEOUT (dot11BSSWidthTriggerScanInterval + 10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Control MAC PCO function */ -typedef enum _ENUM_SYS_PCO_PHASE_T { - SYS_PCO_PHASE_DISABLED = 0, - SYS_PCO_PHASE_20M, - SYS_PCO_PHASE_40M -} ENUM_SYS_PCO_PHASE_T, *P_ENUM_SYS_PCO_PHASE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_OBSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_protection.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_protection.h deleted file mode 100755 index 6025b9044740..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rlm_protection.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_protection.h#1 $ -*/ - -/*! \file "rlm_protection.h" - \brief -*/ - - - -/* -** $Log: rlm_protection.h $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_PROTECTION_H -#define _RLM_PROTECTION_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SYS_PROTECT_MODE_T { - SYS_PROTECT_MODE_NONE = 0, /* Mode 0 */ - SYS_PROTECT_MODE_ERP, /* Mode 1 */ - SYS_PROTECT_MODE_NON_HT, /* Mode 2 */ - SYS_PROTECT_MODE_20M, /* Mode 3 */ - - SYS_PROTECT_MODE_NUM -} ENUM_SYS_PROTECT_MODE_T, *P_ENUM_SYS_PROTECT_MODE_T; - -/* This definition follows HT Protection field of HT Operation IE */ -typedef enum _ENUM_HT_PROTECT_MODE_T { - HT_PROTECT_MODE_NONE = 0, - HT_PROTECT_MODE_NON_MEMBER, - HT_PROTECT_MODE_20M, - HT_PROTECT_MODE_NON_HT, - - HT_PROTECT_MODE_NUM -} ENUM_HT_PROTECT_MODE_T, *P_ENUM_HT_PROTECT_MODE_T; - - -typedef enum _ENUM_GF_MODE_T { - GF_MODE_NORMAL = 0, - GF_MODE_PROTECT, - GF_MODE_DISALLOWED, - - GF_MODE_NUM -} ENUM_GF_MODE_T, *P_ENUM_GF_MODE_T; - -typedef enum _ENUM_RIFS_MODE_T { - RIFS_MODE_NORMAL = 0, - RIFS_MODE_DISALLOWED, - - RIFS_MODE_NUM -} ENUM_RIFS_MODE_T, *P_ENUM_RIFS_MODE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_PROTECTION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/roaming_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/roaming_fsm.h deleted file mode 100755 index 2a744f7e3c68..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/roaming_fsm.h +++ /dev/null @@ -1,209 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.h" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - - - -/* -** $Log: roaming_fsm.h $ - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -#ifndef _ROAMING_FSM_H -#define _ROAMING_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Roaming Discovery interval, SCAN result need to be updated */ -#define ROAMING_DISCOVERY_TIMEOUT_SEC 5 // Seconds. - -//#define ROAMING_NO_SWING_RCPI_STEP 5 //rcpi -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_ROAMING_FAIL_REASON_T { - ROAMING_FAIL_REASON_CONNLIMIT = 0, - ROAMING_FAIL_REASON_NOCANDIDATE, - ROAMING_FAIL_REASON_NUM -} ENUM_ROAMING_FAIL_REASON_T; - -/* events of roaming between driver and firmware */ -typedef enum _ENUM_ROAMING_EVENT_T { - ROAMING_EVENT_START = 0, - ROAMING_EVENT_DISCOVERY, - ROAMING_EVENT_ROAM, - ROAMING_EVENT_FAIL, - ROAMING_EVENT_ABORT, - ROAMING_EVENT_NUM -} ENUM_ROAMING_EVENT_T; - -typedef struct _ROAMING_PARAM_T { - UINT_16 u2Event; - UINT_16 u2Data; -} ROAMING_PARAM_T, *P_ROAMING_PARAM_T; - -/**/ -typedef enum _ENUM_ROAMING_STATE_T { - ROAMING_STATE_IDLE = 0, - ROAMING_STATE_DECISION, - ROAMING_STATE_DISCOVERY, - ROAMING_STATE_ROAM, - ROAMING_STATE_NUM -} ENUM_ROAMING_STATE_T; - -typedef struct _ROAMING_INFO_T { - BOOLEAN fgIsEnableRoaming; - - ENUM_ROAMING_STATE_T eCurrentState; - - OS_SYSTIME rRoamingDiscoveryUpdateTime; - -} ROAMING_INFO_T, *P_ROAMING_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if CFG_SUPPORT_ROAMING -#define IS_ROAMING_ACTIVE(prAdapter) \ - (prAdapter->rWifiVar.rRoamingInfo.eCurrentState == ROAMING_STATE_ROAM) -#else -#define IS_ROAMING_ACTIVE(prAdapter) FALSE -#endif /* CFG_SUPPORT_ROAMING */ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ); - -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Reason - ); - -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ROAMING_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rsn.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rsn.h deleted file mode 100755 index e18b201f14d9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/rsn.h +++ /dev/null @@ -1,386 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rsn.h#1 $ -*/ - -/*! \file rsn.h - \brief The wpa/rsn related define, macro and structure are described here. -*/ - - - -/* -** $Log: rsn.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype for generate wap/rsn ie - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function input parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some event function declaration - * - * Nov 26 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the internal data structure for pmkid to rsn.h - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the port control and class error function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the pmkid candidate - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _RSN_H -#define _RSN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* ----- Definitions for Cipher Suite Selectors ----- */ -#define RSN_CIPHER_SUITE_USE_GROUP_KEY 0x00AC0F00 -#define RSN_CIPHER_SUITE_WEP40 0x01AC0F00 -#define RSN_CIPHER_SUITE_TKIP 0x02AC0F00 -#define RSN_CIPHER_SUITE_CCMP 0x04AC0F00 -#define RSN_CIPHER_SUITE_WEP104 0x05AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_CIPHER_SUITE_AES_128_CMAC 0x06AC0F00 -#endif - -#define WPA_CIPHER_SUITE_NONE 0x00F25000 -#define WPA_CIPHER_SUITE_WEP40 0x01F25000 -#define WPA_CIPHER_SUITE_TKIP 0x02F25000 -#define WPA_CIPHER_SUITE_CCMP 0x04F25000 -#define WPA_CIPHER_SUITE_WEP104 0x05F25000 - -/* ----- Definitions for Authentication and Key Management Suite Selectors ----- */ -#define RSN_AKM_SUITE_NONE 0x00AC0F00 -#define RSN_AKM_SUITE_802_1X 0x01AC0F00 -#define RSN_AKM_SUITE_PSK 0x02AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_AKM_SUITE_802_1X_SHA256 0x05AC0F00 -#define RSN_AKM_SUITE_PSK_SHA256 0x06AC0F00 -#endif - -#define WPA_AKM_SUITE_NONE 0x00F25000 -#define WPA_AKM_SUITE_802_1X 0x01F25000 -#define WPA_AKM_SUITE_PSK 0x02F25000 - -#define ELEM_ID_RSN_LEN_FIXED 20 /* The RSN IE len for associate request */ - -#define ELEM_ID_WPA_LEN_FIXED 22 /* The RSN IE len for associate request */ - -#define MASK_RSNIE_CAP_PREAUTH BIT(0) - -#define GET_SELECTOR_TYPE(x) ((UINT_8)(((x) >> 24) & 0x000000FF)) -#define SET_SELECTOR_TYPE(x, y) x = (((x) & 0x00FFFFFF) | (((UINT_32)(y) << 24) & 0xFF000000)) - -#define AUTH_CIPHER_CCMP 0x00000008 - -/* Cihpher suite flags */ -#define CIPHER_FLAG_NONE 0x00000000 -#define CIPHER_FLAG_WEP40 0x00000001 /* BIT 1 */ -#define CIPHER_FLAG_TKIP 0x00000002 /* BIT 2 */ -#define CIPHER_FLAG_CCMP 0x00000008 /* BIT 4 */ -#define CIPHER_FLAG_WEP104 0x00000010 /* BIT 5 */ -#define CIPHER_FLAG_WEP128 0x00000020 /* BIT 6 */ - -#define WAIT_TIME_IND_PMKID_CANDICATE_SEC 6 /* seconds */ -#define TKIP_COUNTERMEASURE_SEC 60 /* seconds */ - -#if CFG_SUPPORT_802_11W -#define RSN_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define RSN_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define RSN_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Flags for PMKID Candidate list structure */ -#define EVENT_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 - - -#define CONTROL_FLAG_UC_MGMT_NO_ENC BIT(5) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RSN_IE(fp) ((P_RSN_INFO_ELEM_T) fp) -#define WPA_IE(fp) ((P_WPA_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -rsnParseRsnIE( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ); - -BOOLEAN -rsnParseWpaIE( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ); - -BOOLEAN -rsnSearchSupportedCipher( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnSearchAKMSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGenerateWpaNoneIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateWPAIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateRSNIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -rsnParseCheckForWFAInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ); - -BOOLEAN -rsnIsSuitableBSS ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_T prBssRsnInfo - ); - -#if CFG_SUPPORT_AAA -void -rsnParserCheckForRSNCCMPPSK ( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ); -#endif - -VOID -rsnTkipHandleMICFailure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ); - -VOID -rsnSelectPmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -rsnUpdatePmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -rsnSearchPmkidEntry( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ); - -BOOLEAN -rsnCheckPmkidCandicate( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnCheckPmkidCache( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGeneratePmkidIndication( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnIndicatePmkidCand( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); -#if CFG_SUPPORT_WPS2 -VOID -rsnGenerateWSCIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif - -#if CFG_SUPPORT_802_11W -UINT_32 -rsnCheckBipKeyInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_8 -rsnCheckSaQueryTimeout( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQueryTimer( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStopSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnSaQueryRequest( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -void -rsnSaQueryAction( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -rsnCheckRxMgmt( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ); -#endif -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RSN_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/scan.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/scan.h deleted file mode 100755 index 85ab71281b58..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/scan.h +++ /dev/null @@ -1,847 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "scan.h" - \brief - -*/ - - - -/* -** $Log: scan.h $ - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 12 2010 yuche.tsai - * NULL - * Add a functio prototype to find p2p descriptor of a bss descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Add function prototype for return channel. - * modify data structure for scan specific device ID or TYPE. (Move from P2P Connection Settings to Scan Param) - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add a option for channel time extention in scan abort command. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Scan status "FIND" is used for P2P FSM find state. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field in SCAN_PARAM_T. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * - * Add new HW CH macro support - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify scanBuildProbeReqFrameCommonIEs() to support P2P SCAN - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Simplify the process of Beacon during SCAN and remove redundant variable in PRE_BSS_DESC_T - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding variable for wapi ap - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove non-used secuirty variavle - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Refine data structure of BSS_DESC_T and PRE_BSS_DESC_T - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add eNetType to rScanParam and revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add ucAvailablePhyTypeSet to BSS_DESC_T - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aucSrcAddress to SCAN_PARAM_T for P2P's Device Address - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security related variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security ie filed for scan parsing - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function declarations of scan_fsm.c - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scan.h to source control -** -*/ - -#ifndef _SCAN_H -#define _SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! Maximum buffer size of SCAN list */ -#define SCN_MAX_BUFFER_SIZE (CFG_MAX_NUM_BSS_LIST * ALIGN_4(sizeof(BSS_DESC_T))) - -#define SCN_RM_POLICY_EXCLUDE_CONNECTED BIT(0) // Remove SCAN result except the connected one. -#define SCN_RM_POLICY_TIMEOUT BIT(1) // Remove the timeout one -#define SCN_RM_POLICY_OLDEST_HIDDEN BIT(2) // Remove the oldest one with hidden ssid -#define SCN_RM_POLICY_SMART_WEAKEST BIT(3) /* If there are more than half BSS which has the - * same ssid as connection setting, remove the weakest one from them - * Else remove the weakest one. - */ -#define SCN_RM_POLICY_ENTIRE BIT(4) // Remove entire SCAN result - -#define SCN_BSS_DESC_SAME_SSID_THRESHOLD 3 /* This is used by POLICY SMART WEAKEST, - * If exceed this value, remove weakest BSS_DESC_T - * with same SSID first in large network. - */ - -#define SCN_BSS_DESC_REMOVE_TIMEOUT_SEC 5 // Second. - /* This is used by POLICY TIMEOUT, - * If exceed this value, remove timeout BSS_DESC_T. - */ - - - - -#define SCN_PROBE_DELAY_MSEC 0 - -#define SCN_ADHOC_BSS_DESC_TIMEOUT_SEC 5 // Second. - -/*----------------------------------------------------------------------------*/ -/* MSG_SCN_SCAN_REQ */ -/*----------------------------------------------------------------------------*/ -#define SCAN_REQ_SSID_WILDCARD BIT(0) -#define SCAN_REQ_SSID_P2P_WILDCARD BIT(1) -#define SCAN_REQ_SSID_SPECIFIED BIT(2) - - -/*----------------------------------------------------------------------------*/ -/* Support Multiple SSID SCAN */ -/*----------------------------------------------------------------------------*/ -#define SCN_SSID_MAX_NUM 4 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SCAN_TYPE_T { - SCAN_TYPE_PASSIVE_SCAN = 0, - SCAN_TYPE_ACTIVE_SCAN, - SCAN_TYPE_NUM -} ENUM_SCAN_TYPE_T, *P_ENUM_SCAN_TYPE_T; - -typedef enum _ENUM_SCAN_STATE_T { - SCAN_STATE_IDLE = 0, - SCAN_STATE_SCANNING, - SCAN_STATE_NUM -} ENUM_SCAN_STATE_T; - -typedef enum _ENUM_SCAN_CHANNEL_T { - SCAN_CHANNEL_FULL = 0, - SCAN_CHANNEL_2G4, - SCAN_CHANNEL_5G, - SCAN_CHANNEL_P2P_SOCIAL, - SCAN_CHANNEL_SPECIFIED, - SCAN_CHANNEL_NUM -} ENUM_SCAN_CHANNEL, *P_ENUM_SCAN_CHANNEL; - -typedef struct _MSG_SCN_FSM_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4Dummy; -} MSG_SCN_FSM_T, *P_MSG_SCN_FSM_T; - - - -/*----------------------------------------------------------------------------*/ -/* BSS Descriptors */ -/*----------------------------------------------------------------------------*/ -struct _BSS_DESC_T { - LINK_ENTRY_T rLinkEntry; - - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ - - BOOLEAN fgIsConnecting; /* If we are going to connect to this BSS - * (JOIN or ROAMING to another BSS), don't - * remove this record from BSS List. - */ - BOOLEAN fgIsConnected; /* If we have connected to this BSS (NORMAL_TR), - * don't removed this record from BSS list. - */ - - BOOLEAN fgIsHiddenSSID; /* When this flag is TRUE, means the SSID - * of this BSS is not known yet. - */ - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - OS_SYSTIME rUpdateTime; - - ENUM_BSS_TYPE_T eBSSType; - - UINT_16 u2CapInfo; - - UINT_16 u2BeaconInterval; - UINT_16 u2ATIMWindow; - - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - BOOLEAN fgIsERPPresent; - BOOLEAN fgIsHTPresent; - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this BSS */ - - UINT_8 ucChannelNum; - - ENUM_CHNL_EXT_T eSco; /* Record bandwidth for association process - Some AP will send association resp by 40MHz BW */ - ENUM_BAND_T eBand; - - UINT_8 ucDTIMPeriod; - - BOOLEAN fgIsLargerTSF; /* This BSS's TimeStamp is larger than us(TCL == 1 in RX_STATUS_T) */ - - UINT_8 ucRCPI; - - UINT_8 ucWmmFlag; /* A flag to indicate this BSS's WMM capability */ - - /*! \brief The srbiter Search State will matched the scan result, - and saved the selected cipher and akm, and report the score, - for arbiter join state, join module will carry this target BSS - to rsn generate ie function, for gen wpa/rsn ie */ - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - - UINT_16 u2RsnCap; - - RSN_INFO_T rRSNInfo; - RSN_INFO_T rWPAInfo; -#if 1//CFG_SUPPORT_WAPI - WAPI_INFO_T rIEWAPI; - BOOL fgIEWAPI; -#endif - BOOL fgIERSN; - BOOL fgIEWPA; - - /*! \brief RSN parameters selected for connection */ - /*! \brief The Select score for final AP selection, - 0, no sec, 1,2,3 group cipher is WEP, TKIP, CCMP */ - UINT_8 ucEncLevel; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PPresent; - P_P2P_DEVICE_DESC_T prP2pDesc; - - UINT_8 aucIntendIfAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ -// UINT_8 ucDevCapabilityBitmap; /* Device Capability Attribute. (P2P_DEV_CAPABILITY_XXXX) */ -// UINT_8 ucGroupCapabilityBitmap; /* Group Capability Attribute. (P2P_GROUP_CAPABILITY_XXXX) */ - - LINK_T rP2pDeviceList; - -// P_LINK_T prP2pDeviceList; - - /* For - * 1. P2P Capability. - * 2. P2P Device ID. ( in aucSrcAddr[] ) - * 3. NOA (TODO:) - * 4. Extend Listen Timing. (Probe Rsp) (TODO:) - * 5. P2P Device Info. (Probe Rsp) - * 6. P2P Group Info. (Probe Rsp) - */ -#endif - - BOOLEAN fgIsIEOverflow; /* The received IE length exceed the maximum IE buffer size */ - UINT_16 u2IELength; /* The byte count of aucIEBuf[] */ - - ULARGE_INTEGER u8TimeStamp; /* Place u8TimeStamp before aucIEBuf[1] to force DW align */ - - UINT_8 aucIEBuf[CFG_IE_BUFFER_SIZE]; -}; - - -typedef struct _SCAN_PARAM_T { /* Used by SCAN FSM */ - /* Active or Passive */ - ENUM_SCAN_TYPE_T eScanType; - - /* Network Type */ - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - /* Specified SSID Type */ - UINT_8 ucSSIDType; - UINT_8 ucSSIDNum; - - /* Length of Specified SSID */ - UINT_8 ucSpecifiedSSIDLen[SCN_SSID_MAX_NUM]; - - /* Specified SSID */ - UINT_8 aucSpecifiedSSID[SCN_SSID_MAX_NUM][ELEM_MAX_LEN_SSID]; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgFindSpecificDev; /* P2P: Discovery Protocol */ - UINT_8 aucDiscoverDevAddr[MAC_ADDR_LEN]; - BOOLEAN fgIsDevType; - P2P_DEVICE_TYPE_T rDiscoverDevType; - - UINT_16 u2PassiveListenInterval; - // TODO: Find Specific Device Type. -#endif /* CFG_SUPPORT_P2P */ - - BOOLEAN fgIsObssScan; - BOOLEAN fgIsScanV2; - - /* Run time flags */ - UINT_16 u2ProbeDelayTime; - - /* channel information */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - - /* Feedback information */ - UINT_8 ucSeqNum; - - /* Information Element */ - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; - -} SCAN_PARAM_T, *P_SCAN_PARAM_T; - -typedef struct _SCAN_INFO_T { - ENUM_SCAN_STATE_T eCurrentState; /* Store the STATE variable of SCAN FSM */ - - OS_SYSTIME rLastScanCompletedTime; - - SCAN_PARAM_T rScanParam; - - UINT_32 u4NumOfBssDesc; - - UINT_8 aucScanBuffer[SCN_MAX_BUFFER_SIZE]; - - LINK_T rBSSDescList; - - LINK_T rFreeBSSDescList; - - LINK_T rPendingMsgList; - - /* Sparse Channel Detection */ - BOOLEAN fgIsSparseChannelValid; - RF_CHANNEL_INFO_T rSparseChannel; - -} SCAN_INFO_T, *P_SCAN_INFO_T; - - -/* Incoming Mailbox Messages */ -typedef struct _MSG_SCN_SCAN_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucSSID[PARAM_MAX_LEN_SSID]; -#if CFG_ENABLE_WIFI_DIRECT - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ -#endif - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ, *P_MSG_SCN_SCAN_REQ; - -typedef struct _MSG_SCN_SCAN_REQ_V2_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDNum; - P_PARAM_SSID_T prSsid; - UINT_16 u2ProbeDelay; - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ_V2, *P_MSG_SCN_SCAN_REQ_V2; - - -typedef struct _MSG_SCN_SCAN_CANCEL_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsChannelExt; -#endif -} MSG_SCN_SCAN_CANCEL, *P_MSG_SCN_SCAN_CANCEL; - -/* Outgoing Mailbox Messages */ -typedef enum _ENUM_SCAN_STATUS_T { - SCAN_STATUS_DONE = 0, - SCAN_STATUS_CANCELLED, - SCAN_STATUS_FAIL, - SCAN_STATUS_BUSY, - SCAN_STATUS_NUM -} ENUM_SCAN_STATUS, *P_ENUM_SCAN_STATUS; - -typedef struct _MSG_SCN_SCAN_DONE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_STATUS eScanStatus; -} MSG_SCN_SCAN_DONE, *P_MSG_SCN_SCAN_DONE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in scan.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Search */ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Search - Alternative */ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Allocation */ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Removal */ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ); - -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/* BSS-DESC State Change */ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -#if 0 -/* BSS-DESC Insertion */ -P_BSS_DESC_T -scanAddToInternalScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb, - IN P_BSS_DESC_T prBssDesc - ); -#endif - -/* BSS-DESC Insertion - ALTERNATIVE */ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -scanBuildProbeReqFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucDesiredSsid, - IN UINT_32 u4DesiredSsidLen, - IN UINT_16 u2SupportedRateSet - ); - -WLAN_STATUS -scanSendProbeReqFrames ( - IN P_ADAPTER_T prAdapter, - IN P_SCAN_PARAM_T prScanParam - ); - -VOID -scanUpdateBssDescForSearch ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in scan_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Command Routines */ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* RX Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ); - -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ); - -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Generation */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Query for sparse channel */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ); - - -#endif /* _SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/sec_fsm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/sec_fsm.h deleted file mode 100755 index 17c651937abc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/sec_fsm.h +++ /dev/null @@ -1,284 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/sec_fsm.h#1 $ -*/ - -/*! \file sec_fsm.h - \brief Declaration of functions and finite state machine for SECURITY Module. - - Function declaration for privacy.c and SEC_STATE for SECURITY FSM. -*/ - - - -/* -** $Log: sec_fsm.h $ - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the deauth Tx done callback parameter - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the reference function declaration - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * delete non-used code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\14 2009-04-06 15:35:47 GMT mtk01088 -** add the variable to set the disable AP selection for privacy check, for wps open networking. -** \main\maintrunk.MT5921\13 2008-11-19 11:46:01 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\12 2008-08-28 20:37:11 GMT mtk01088 -** remove non-used code -** -** \main\maintrunk.MT5921\11 2008-03-18 09:51:52 GMT mtk01088 -** Add function declaration for timer to indicate pmkid candidate -** \main\maintrunk.MT5921\10 2008-02-29 15:12:08 GMT mtk01088 -** add variable for sw port control -** \main\maintrunk.MT5921\9 2008-02-29 12:37:30 GMT mtk01088 -** rename the security related function declaration -** \main\maintrunk.MT5921\8 2007-12-27 13:59:08 GMT mtk01088 -** adjust the wlan table and sec fsm init timing -** \main\maintrunk.MT5921\7 2007-11-20 10:39:49 GMT mtk01088 -** add function timer for wait EAPoL Error timeout -** \main\maintrunk.MT5921\6 2007-11-06 20:39:08 GMT mtk01088 -** rename the counter measure timer -** \main\maintrunk.MT5921\5 2007-11-06 20:14:31 GMT mtk01088 -** add a abort function -** Revision 1.5 2007/07/16 02:33:42 MTK01088 -** change the ENUM declaration structure prefix from r to e -** -** Revision 1.4 2007/07/09 06:23:10 MTK01088 -** update -** -** Revision 1.3 2007/07/04 10:09:04 MTK01088 -** adjust the state for security fsm -** change function name -** -** Revision 1.2 2007/07/03 08:13:22 MTK01088 -** change the sec fsm state -** add the event for sec fsm -** -** Revision 1.1 2007/06/27 06:20:35 MTK01088 -** add the sec fsm header file -** -** -*/ -#ifndef _SEC_FSM_H -#define _SEC_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* TKIP CounterMeasure interval for Rejoin to Network. */ -#define COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC 60 - -/* Timeout to wait the EAPoL Error Report frame Send out. */ -#define EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef UINT_32 SEC_STATUS, *P_SEC_STATUS; - -#if 0 -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; /* MAC address */ - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; -#endif - -typedef SEC_STATUS (*PFN_SEC_FSM_STATE_HANDLER)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SEC_STATE_TRANSITION_FLAG fgIsTransition -#define SEC_NEXT_STATE_VAR eNextState - -#define SEC_STATE_TRANSITION(prAdapter, prSta, eFromState, eToState) \ - { secFsmTrans_ ## eFromState ## _to_ ## eToState(prAdapter, prSta); \ - SEC_NEXT_STATE_VAR = SEC_STATE_ ## eToState; \ - SEC_STATE_TRANSITION_FLAG = (BOOLEAN)TRUE; \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle the sec check */ -/*--------------------------------------------------------------*/ -/***** Routines in sec_fsm.c *****/ -VOID -secFsmInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventStart( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secFsmEventPTKInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent2ndEapolTx( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent4ndEapolTxDone( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -VOID -secFsmEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventStartCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEndOfCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _SEC_FSM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/swcr.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/swcr.h deleted file mode 100755 index 4ea322d9763d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/swcr.h +++ /dev/null @@ -1,180 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/swcr.h#1 $ -*/ - -/*! \file "swcr.h" - \brief -*/ - - - -/* - * - */ - -#ifndef _SWCR_H -#define _SWCR_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define SWCR_VAR(x) ((VOID *)&x) -#define SWCR_FUNC(x) ((VOID *)x) - -#define SWCR_T_FUNC BIT(7) - -#define SWCR_L_32 3 -#define SWCR_L_16 2 -#define SWCR_L_8 1 - -#define SWCR_READ 0 -#define SWCR_WRITE 1 - -#define SWCR_MAP_NUM(x) (sizeof(x)/sizeof(x[0])) - -#define SWCR_CR_NUM 7 - -#define SWCR_GET_RW_INDEX(action,rw,index) \ - index = action & 0x7F; \ - rw = action >> 7; - - -extern UINT_32 g_au4SwCr[]; /*: 0: command other: data */ - -typedef VOID (*PFN_SWCR_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); -typedef VOID (*PFN_CMD_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); - -typedef struct _SWCR_MAP_ENTRY_T { - UINT_16 u2Type; - PVOID u4Addr; -} SWCR_MAP_ENTRY_T, *P_SWCR_MAP_ENTRY_T; - - -typedef struct _SWCR_MOD_MAP_ENTRY_T { - UINT_8 ucMapNum; - P_SWCR_MAP_ENTRY_T prSwCrMap; -} SWCR_MOD_MAP_ENTRY_T, *P_SWCR_MOD_MAP_ENTRY_T; - -typedef enum _ENUM_SWCR_DBG_TYPE_T { - SWCR_DBG_TYPE_ALL = 0, - SWCR_DBG_TYPE_TXRX, - SWCR_DBG_TYPE_RX_RATES, - SWCR_DBG_TYPE_PS, - SWCR_DBG_TYPE_NUM -} ENUM_SWCR_DBG_TYPE_T; - -typedef enum _ENUM_SWCR_DBG_ALL_T { - SWCR_DBG_ALL_TX_CNT = 0, - SWCR_DBG_ALL_TX_BCN_CNT, - SWCR_DBG_ALL_TX_FAILED_CNT, - SWCR_DBG_ALL_TX_RETRY_CNT, - SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT, - SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT, - SWCR_DBG_ALL_TX_MGNT_DROP_CNT, - SWCR_DBG_ALL_TX_ERROR_CNT, - - SWCR_DBG_ALL_RX_CNT, - SWCR_DBG_ALL_RX_DROP_CNT, - SWCR_DBG_ALL_RX_DUP_DROP_CNT, - SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_FCSERR_CNT, - SWCR_DBG_ALL_RX_FIFOFULL_CNT, - SWCR_DBG_ALL_RX_PFDROP_CNT, - - SWCR_DBG_ALL_PWR_PS_POLL_CNT, - SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT, - SWCR_DBG_ALL_PWR_BCN_IND_CNT, - SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT, - SWCR_DBG_ALL_PWR_PM_STATE0, - SWCR_DBG_ALL_PWR_PM_STATE1, - SWCR_DBG_ALL_PWR_CUR_PS_PROF0, - SWCR_DBG_ALL_PWR_CUR_PS_PROF1, - - SWCR_DBG_ALL_AR_STA0_RATE, - SWCR_DBG_ALL_AR_STA0_BWGI, - SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI, - - SWCR_DBG_ALL_ROAMING_ENABLE, - SWCR_DBG_ALL_ROAMING_ROAM_CNT, - SWCR_DBG_ALL_ROAMING_INT_CNT, - - SWCR_DBG_ALL_BB_RX_MDRDY_CNT, - SWCR_DBG_ALL_BB_RX_FCSERR_CNT, - SWCR_DBG_ALL_BB_CCK_PD_CNT, - SWCR_DBG_ALL_BB_OFDM_PD_CNT, - SWCR_DBG_ALL_BB_CCK_SFDERR_CNT, - SWCR_DBG_ALL_BB_CCK_SIGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT, - - SWCR_DBG_ALL_NUM -} ENUM_SWCR_DBG_ALL_T; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID swCrReadWriteCmd( - P_ADAPTER_T prAdapter, - UINT_8 ucRead, - UINT_16 u2Addr, - UINT_32 *pu4Data - ); - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType); -VOID swCrDebugInit(P_ADAPTER_T prAdapter); -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout); -VOID swCrDebugUninit(P_ADAPTER_T prAdapter); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wapi.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wapi.h deleted file mode 100755 index a47acae67778..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wapi.h +++ /dev/null @@ -1,120 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/wapi.h#1 $ -*/ - -/*! \file wapi.h - \brief The wapi related define, macro and structure are described here. -*/ - - - -/* -** $Log: wapi.h $ - * - * 07 20 2010 wh.su - * - * . - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the wapi function name and adding the generate wapi ie function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some wapi structure define - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\1 2009-10-09 17:06:29 GMT mtk01088 -** -*/ - -#ifndef _WAPI_H -#define _WAPI_H - -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define WAPI_CIPHER_SUITE_WPI 0x01721400 /* WPI_SMS4 */ -#define WAPI_AKM_SUITE_802_1X 0x01721400 /* WAI */ -#define WAPI_AKM_SUITE_PSK 0x02721400 /* WAI_PSK */ - -#define ELEM_ID_WAPI 68 /* WAPI IE */ - -#define WAPI_IE(fp) ((P_WAPI_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wapiGenerateWAPIIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ); - -BOOLEAN -wapiPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -//BOOLEAN -//wapiUpdateTxKeyIdx ( -// IN P_STA_RECORD_T prStaRec, -// IN UINT_8 ucWlanIdx -// ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif -#endif /* _WAPI_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wlan_typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wlan_typedef.h deleted file mode 100755 index 2680a88eb9a2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wlan_typedef.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/wlan_typedef.h#1 $ -*/ - -/*! \file wlan_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - - - -/* -** $Log: wlan_typedef.h $ -*/ - -#ifndef _WLAN_TYPEDEF_H -#define _WLAN_TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for BSS_INFO_T structure, to describe the attributes used in a - * common BSS. - */ -typedef struct _BSS_INFO_T BSS_INFO_T, *P_BSS_INFO_T; - -typedef BSS_INFO_T AIS_BSS_INFO_T, *P_AIS_BSS_INFO_T; -typedef BSS_INFO_T P2P_BSS_INFO_T, *P_P2P_BSS_INFO_T; -typedef BSS_INFO_T BOW_BSS_INFO_T, *P_BOW_BSS_INFO_T; - -typedef struct _AIS_SPECIFIC_BSS_INFO_T AIS_SPECIFIC_BSS_INFO_T, *P_AIS_SPECIFIC_BSS_INFO_T; -typedef struct _P2P_SPECIFIC_BSS_INFO_T P2P_SPECIFIC_BSS_INFO_T, *P_P2P_SPECIFIC_BSS_INFO_T; -typedef struct _BOW_SPECIFIC_BSS_INFO_T BOW_SPECIFIC_BSS_INFO_T, *P_BOW_SPECIFIC_BSS_INFO_T; -/* CFG_SUPPORT_WFD */ -typedef struct _WFD_CFG_SETTINGS_T WFD_CFG_SETTINGS_T, *P_WFD_CFG_SETTINGS_T; - - -/* BSS related structures */ -/* Type definition for BSS_DESC_T structure, to describe parameter sets of a particular BSS */ -typedef struct _BSS_DESC_T BSS_DESC_T, *P_BSS_DESC_T, **PP_BSS_DESC_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _WLAN_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wnm.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wnm.h deleted file mode 100755 index ac54cbc86dfa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/mgmt/wnm.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/include/mgmt/wnm.h#1 $ -*/ - -/*! \file wnm.h - \brief This file contains the IEEE 802.11 family related 802.11v network management - for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wnm.h $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -#ifndef _WNM_H -#define _WNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _TIMINGMSMT_PARAM_T { - BOOLEAN fgInitiator; - UINT_8 ucTrigger; - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ -} TIMINGMSMT_PARAM_T, *P_TIMINGMSMT_PARAM_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ); - -#define WNM_UNIT_TEST 1 - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WNM_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/adapter.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/adapter.h deleted file mode 100755 index 46eee2b4dca8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/adapter.h +++ /dev/null @@ -1,1412 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/adapter.h#3 $ -*/ - -/*! \file adapter.h - \brief Definition of internal data structure for driver manipulation. - - In this file we define the internal data structure - ADAPTER_T which stands - for MiniPort ADAPTER(From Windows point of view) or stands for Network ADAPTER. -*/ - - - -/* -** $Log: adapter.h $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Remove ERP member in adapter structure - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * Action frame callback for GO Device Discoverability Req. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 yuche.tsai - * [WCXRP00000533] [Volunteer Patch][MT6620][Driver] Provide a P2P function API for Legacy WiFi to query AP mode. - * Provide an API for Legacy WiFi to query the operation mode.. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Provide disconnect function for AAA module. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add CWMin CWMax for AP to generate IE. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common IE buffer in P2P INFO structure. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 yuche.tsai - * NULL - * Add an intend mode for BSS info. - * It is used to let P2P BSS Info to know which OP Mode it is going to become. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 yuche.tsai - * - * Remove BSS info which is redonedent in Wifi Var.. - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P FSM Info in adapter. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field, additional include p2p_fsm.h if p2p is enabled. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * 2) command sequence number is now increased atomically - * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * 4. correct some HAL implementation - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * and result is retrieved by get ATInfo instead - * * * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-16 18:02:03 GMT mtk02752 -** add external reference to avoid compilation error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:40:26 GMT mtk02752 -** eliminate unused member -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-08 17:36:08 GMT mtk02752 -** add RF test data members into P_ADAPTER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:45 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-28 10:29:57 GMT mtk01461 -** Add read WTSR for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:37:35 GMT mtk01461 -** Add prPendingCmdInfoOfOID for temporarily saving the CMD_INFO_T before en-queue to rCmdQueue -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:57:51 GMT mtk01461 -** Add MGMT Buffer Info -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:34:12 GMT mtk01461 -** Add SW pre test CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:41:48 GMT mtk01461 -** Add fgIsWmmAssoc flag for TC assignment -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:51 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:51:52 GMT mtk01426 -** Add #if CFG_SDIO_RX_ENHANCE related data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:17 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _ADAPTER_H -#define _ADAPTER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _ENHANCE_MODE_DATA_STRUCT_T SDIO_CTRL_T, *P_SDIO_CTRL_T; - -typedef struct _WLAN_INFO_T { - PARAM_BSSID_EX_T rCurrBssId; - - // Scan Result - PARAM_BSSID_EX_T arScanResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 apucScanResultIEs[CFG_MAX_NUM_BSS_LIST]; - UINT_32 u4ScanResultNum; - - // IE pool for Scanning Result - UINT_8 aucScanIEBuf[CFG_MAX_COMMON_IE_BUF_LEN]; - UINT_32 u4ScanIEBufferUsage; - - OS_SYSTIME u4SysTime; - - // connection parameter (for Ad-Hoc) - UINT_16 u2BeaconPeriod; - UINT_16 u2AtimWindow; - - PARAM_RATES eDesiredRates; - CMD_LINK_ATTRIB eLinkAttr; -// CMD_PS_PROFILE_T ePowerSaveMode; - CMD_PS_PROFILE_T arPowerSaveMode[NETWORK_TYPE_INDEX_NUM]; - - // trigger parameter - ENUM_RSSI_TRIGGER_TYPE eRssiTriggerType; - PARAM_RSSI rRssiTriggerValue; - - // Privacy Filter - ENUM_PARAM_PRIVACY_FILTER_T ePrivacyFilter; - - // RTS Threshold - PARAM_RTS_THRESHOLD eRtsThreshold; - - // Network Type - UINT_8 ucNetworkType; - - // Network Type In Use - UINT_8 ucNetworkTypeInUse; - -} WLAN_INFO_T, *P_WLAN_INFO_T; - -/* Session for CONNECTION SETTINGS */ -typedef struct _CONNECTION_SETTINGS_T { - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - UINT_8 ucDelayTimeOfDisconnectEvent; - - BOOLEAN fgIsConnByBssidIssued; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - - BOOLEAN fgIsConnReqIssued; - BOOLEAN fgIsDisconnectedByNonRequest; - - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - ENUM_PARAM_OP_MODE_T eOPMode; - - ENUM_PARAM_CONNECTION_POLICY_T eConnectionPolicy; - - ENUM_PARAM_AD_HOC_MODE_T eAdHocMode; - - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - - BOOLEAN fgIsScanReqIssued; - - - /* MIB attributes */ - UINT_16 u2BeaconPeriod; - - UINT_16 u2RTSThreshold; /* User desired setting */ - - UINT_16 u2DesiredNonHTRateSet; /* User desired setting */ - - UINT_8 ucAdHocChannelNum; /* For AdHoc */ - - ENUM_BAND_T eAdHocBand; /* For AdHoc */ - - UINT_32 u4FreqInKHz; /* Center frequency */ - - /* ATIM windows using for IBSS power saving function */ - UINT_16 u2AtimWindow; - - /* Features */ - BOOLEAN fgIsEnableRoaming; - - BOOLEAN fgIsAdHocQoSEnable; - - ENUM_PARAM_PHY_CONFIG_T eDesiredPhyConfig; - - /* Used for AP mode for desired channel and bandwidth */ - UINT_16 u2CountryCode; - UINT_8 uc2G4BandwidthMode; /* 20/40M or 20M only */ - UINT_8 uc5GBandwidthMode; /* 20/40M or 20M only */ - - BOOLEAN fgTxShortGIDisabled; - BOOLEAN fgRxShortGIDisabled; - -#if CFG_SUPPORT_802_11D - BOOLEAN fgMultiDomainCapabilityEnabled; -#endif /* CFG_SUPPORT_802_11D*/ - - -#if 1 //CFG_SUPPORT_WAPI - BOOL fgWapiMode; - UINT_32 u4WapiSelectedGroupCipher; - UINT_32 u4WapiSelectedPairwiseCipher; - UINT_32 u4WapiSelectedAKMSuite; -#endif - - /* CR1486, CR1640 */ - /* for WPS, disable the privacy check for AP selection policy */ - BOOLEAN fgPrivacyCheckDisable; - - /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 bmfgApsdEnAc; - - /* for RSN info store, when upper layer set rsn info */ - RSN_INFO_T rRsnInfo; - -} CONNECTION_SETTINGS_T, *P_CONNECTION_SETTINGS_T; - -struct _BSS_INFO_T { - - ENUM_PARAM_MEDIA_STATE_T eConnectionState; /* Connected Flag used in AIS_NORMAL_TR */ - ENUM_PARAM_MEDIA_STATE_T eConnectionStateIndicated; /* The Media State that report to HOST */ - - ENUM_OP_MODE_T eCurrentOPMode; /* Current Operation Mode - Infra/IBSS */ -#if CFG_ENABLE_WIFI_DIRECT - ENUM_OP_MODE_T eIntendOPMode; -#endif - - BOOLEAN fgIsNetActive; /* TRUE if this network has been activated */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucReasonOfDisconnect; /* Used by media state indication */ - - UINT_8 ucSSIDLen; /* Length of SSID */ - -#if CFG_ENABLE_WIFI_DIRECT - ENUM_HIDDEN_SSID_TYPE_T eHiddenSsidType; /* For Hidden SSID usage. */ -#endif - - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID used in this BSS */ - - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* The BSSID of the associated BSS */ - - UINT_8 aucOwnMacAddr[MAC_ADDR_LEN];/* Owned MAC Address used in this BSS */ - - P_STA_RECORD_T prStaRecOfAP; /* For Infra Mode, and valid only if - * eConnectionState == MEDIA_STATE_CONNECTED - */ - LINK_T rStaRecOfClientList; /* For IBSS/AP Mode, all known STAs in current BSS */ - - UINT_16 u2CapInfo; /* Change Detection */ - - UINT_16 u2BeaconInterval; /* The Beacon Interval of this BSS */ - - - UINT_16 u2ATIMWindow; /* For IBSS Mode */ - - UINT_16 u2AssocId; /* For Infra Mode, it is the Assoc ID assigned by AP. - */ - - - UINT_8 ucDTIMPeriod; /* For Infra/AP Mode */ - - UINT_8 ucDTIMCount; /* For AP Mode, it is the DTIM value we should carried in - * the Beacon of next TBTT. - */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (This is deduced from received BSS_DESC_T) - */ - - UINT_8 ucNonHTBasicPhyType; /* The Basic PHY Type Index, used to setup Phy Capability */ - - UINT_8 ucConfigAdHocAPMode; /* The configuration of AdHoc/AP Mode. e.g. 11g or 11b */ - - UINT_8 ucBeaconTimeoutCount; /* For Infra/AP Mode, it is a threshold of Beacon Lost Count to - confirm connection was lost */ - - BOOLEAN fgHoldSameBssidForIBSS; /* For IBSS Mode, to keep use same BSSID to extend the life cycle of an IBSS */ - - BOOLEAN fgIsBeaconActivated; /* For AP/IBSS Mode, it is used to indicate that Beacon is sending */ - - P_MSDU_INFO_T prBeacon; /* For AP/IBSS Mode - Beacon Frame */ - - BOOLEAN fgIsIBSSMaster; /* For IBSS Mode - To indicate that we can reply ProbeResp Frame. - In current TBTT interval */ - - BOOLEAN fgIsShortPreambleAllowed; /* From Capability Info. of AssocResp Frame AND of Beacon/ProbeResp Frame */ - BOOLEAN fgUseShortPreamble; /* Short Preamble is enabled in current BSS. */ - BOOLEAN fgUseShortSlotTime; /* Short Slot Time is enabled in current BSS. */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of current BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of current BSS */ - - - UINT_8 ucAllSupportedRatesLen; /* Used for composing Beacon Frame in AdHoc or AP Mode */ - UINT_8 aucAllSupportedRates[RATE_NUM]; - - UINT_8 ucAssocClientCnt; /* TODO(Kevin): Number of associated clients */ - - BOOLEAN fgIsProtection; - BOOLEAN fgIsQBSS; /* fgIsWmmBSS; */ /* For Infra/AP/IBSS Mode, it is used to indicate if we support WMM in - * current BSS. */ - BOOLEAN fgIsNetAbsent; /* TRUE: BSS is absent, FALSE: BSS is present */ - - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - UINT_16 u2RsnSelectedCapInfo; - - /*------------------------------------------------------------------------*/ - /* Power Management related information */ - /*------------------------------------------------------------------------*/ - PM_PROFILE_SETUP_INFO_T rPmProfSetupInfo; - - - /*------------------------------------------------------------------------*/ - /* WMM/QoS related information */ - /*------------------------------------------------------------------------*/ - UINT_8 ucWmmParamSetCount; /* Used to detect the change of EDCA parameters. For AP mode, the value is used in WMM IE */ - - AC_QUE_PARMS_T arACQueParms[WMM_AC_INDEX_NUM]; - - UINT_8 aucCWminLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWminLog2 */ - UINT_8 aucCWmaxLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWmaxLog2 */ - AC_QUE_PARMS_T arACQueParmsForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the value */ - - /*------------------------------------------------------------------------*/ - /* 802.11n HT operation IE when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT)*/ - /* is true. They have the same definition with fields of */ - /* information element (CM) */ - /*------------------------------------------------------------------------*/ - ENUM_BAND_T eBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucHtOpInfo1; - UINT_16 u2HtOpInfo2; - UINT_16 u2HtOpInfo3; - - /*------------------------------------------------------------------------*/ - /* Required protection modes (CM) */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgErpProtectMode; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - ENUM_RIFS_MODE_T eRifsOperationMode; - - BOOLEAN fgObssErpProtectMode; /* GO only */ - ENUM_HT_PROTECT_MODE_T eObssHtProtectMode; /* GO only */ - ENUM_GF_MODE_T eObssGfOperationMode; /* GO only */ - BOOLEAN fgObssRifsOperationMode; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* OBSS to decide if 20/40M bandwidth is permitted. */ - /* The first member indicates the following channel list length. */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgAssoc40mBwAllowed; - BOOLEAN fg40mBwAllowed; - ENUM_CHNL_EXT_T eBssSCO; /* Real setting for HW - * 20/40M AP mode will always set 40M, - * but its OP IE can be changed. - */ - UINT_8 auc2G_20mReqChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_NonHtChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_PriChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_SecChnlList[CHNL_LIST_SZ_2G + 1]; - - UINT_8 auc5G_20mReqChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_NonHtChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_PriChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_SecChnlList[CHNL_LIST_SZ_5G + 1]; - - TIMER_T rObssScanTimer; - UINT_16 u2ObssScanInterval; /* in unit of sec */ - - BOOLEAN fgObssActionForcedTo20M; /* GO only */ - BOOLEAN fgObssBeaconForcedTo20M; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* HW Related Fields (Kevin) */ - /*------------------------------------------------------------------------*/ - UINT_8 ucHwDefaultFixedRateCode; /* The default rate code copied to MAC TX Desc */ - UINT_16 u2HwLPWakeupGuardTimeUsec; - - - UINT_8 ucBssFreeQuota; /* The value is updated from FW */ -}; - - -struct _AIS_SPECIFIC_BSS_INFO_T { - UINT_8 ucRoamingAuthTypes; /* This value indicate the roaming type used in AIS_JOIN */ - - BOOLEAN fgIsIBSSActive; - - /*! \brief Global flag to let arbiter stay at standby and not connect to any network */ - BOOLEAN fgCounterMeasure; - UINT_8 ucWEPDefaultKeyID; - BOOLEAN fgTransmitKeyExist; /* Legacy wep Transmit key exist or not */ - - /* While Do CounterMeasure procedure, check the EAPoL Error report have send out */ - BOOLEAN fgCheckEAPoLTxDone; - - UINT_32 u4RsnaLastMICFailTime; - - /* Stored the current bss wpa rsn cap filed, used for roaming policy */ - //UINT_16 u2RsnCap; - TIMER_T rPreauthenticationTimer; - - /* By the flow chart of 802.11i, - wait 60 sec before associating to same AP - or roaming to a new AP - or sending data in IBSS, - keep a timer for handle the 60 sec counterMeasure */ - TIMER_T rRsnaBlockTrafficTimer; - TIMER_T rRsnaEAPoLReportTimeoutTimer; - - /* For Keep the Tx/Rx Mic key for TKIP SW Calculate Mic */ - /* This is only one for AIS/AP */ - UINT_8 aucTxMicKey[8]; - UINT_8 aucRxMicKey[8]; - - /* Buffer for WPA2 PMKID */ - /* The PMKID cache lifetime is expire by media_disconnect_indication */ - UINT_32 u4PmkidCandicateCount; - PMKID_CANDICATE_T arPmkidCandicate[CFG_MAX_PMKID_CACHE]; - UINT_32 u4PmkidCacheCount; - PMKID_ENTRY_T arPmkidCache[CFG_MAX_PMKID_CACHE]; - BOOLEAN fgIndicatePMKID; -#if CFG_SUPPORT_802_11W - BOOLEAN fgMgmtProtection; - UINT_32 u4SaQueryStart; - UINT_32 u4SaQueryCount; - UINT_8 ucSaQueryTimedOut; - PUINT_8 pucSaQueryTransId; - TIMER_T rSaQueryTimer; - BOOLEAN fgBipKeyInstalled; -#endif -}; - -struct _BOW_SPECIFIC_BSS_INFO_T { - UINT_16 u2Reserved; /* Reserved for Data Type Check */ -}; - -#if CFG_SLT_SUPPORT -typedef struct _SLT_INFO_T { - - P_BSS_DESC_T prPseudoBssDesc; - UINT_16 u2SiteID; - UINT_8 ucChannel2G4; - UINT_8 ucChannel5G; - BOOLEAN fgIsDUT; - UINT_32 u4BeaconReceiveCnt; - /////////Deprecated///////// - P_STA_RECORD_T prPseudoStaRec; -} SLT_INFO_T, *P_SLT_INFO_T; -#endif - - -/* Major member variables for WiFi FW operation. - Variables within this region will be ready for access after WIFI function is enabled. -*/ -typedef struct _WIFI_VAR_T { - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - BOOLEAN fgDebugCmdResp; - - CONNECTION_SETTINGS_T rConnSettings; - - SCAN_INFO_T rScanInfo; - -#if CFG_SUPPORT_ROAMING - ROAMING_INFO_T rRoamingInfo; -#endif /* CFG_SUPPORT_ROAMING */ - - AIS_FSM_INFO_T rAisFsmInfo; - - ENUM_PWR_STATE_T aePwrState[NETWORK_TYPE_INDEX_NUM]; - - BSS_INFO_T arBssInfo[NETWORK_TYPE_INDEX_NUM]; - - AIS_SPECIFIC_BSS_INFO_T rAisSpecificBssInfo; - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings; - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - P_P2P_FSM_INFO_T prP2pFsmInfo; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - BOW_SPECIFIC_BSS_INFO_T rBowSpecificBssInfo; - BOW_FSM_INFO_T rBowFsmInfo; -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - DEAUTH_INFO_T arDeauthInfo[MAX_DEAUTH_INFO_COUNT]; - - /* Current Wi-Fi Settings and Flags */ - UINT_8 aucPermanentAddress[MAC_ADDR_LEN]; - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - UINT_8 aucDeviceAddress[MAC_ADDR_LEN]; - UINT_8 aucInterfaceAddress[MAC_ADDR_LEN]; - - UINT_8 ucAvailablePhyTypeSet; - - ENUM_PHY_TYPE_INDEX_T eNonHTBasicPhyType2G4; /* Basic Phy Type used by SCN according - * to the set of Available PHY Types - */ - - ENUM_PARAM_PREAMBLE_TYPE_T ePreambleType; - ENUM_REGISTRY_FIXED_RATE_T eRateSetting; - - BOOLEAN fgIsShortSlotTimeOptionEnable; - /* User desired setting, but will honor the capability of AP */ - - BOOLEAN fgEnableJoinToHiddenSSID; - BOOLEAN fgSupportWZCDisassociation; - - BOOLEAN fgSupportQoS; - BOOLEAN fgSupportAmpduTx; - BOOLEAN fgSupportAmpduRx; - BOOLEAN fgSupportTspec; - BOOLEAN fgSupportUAPSD; - BOOLEAN fgSupportULPSMP; - UINT_8 u8SupportRxSgi20; /* 0: default 1: enable 2:disble */ - UINT_8 u8SupportRxSgi40; - UINT_8 u8SupportRxGf; - -#if CFG_SLT_SUPPORT - SLT_INFO_T rSltInfo; -#endif - -} WIFI_VAR_T, *P_WIFI_VAR_T;/* end of _WIFI_VAR_T */ - -/* cnm_timer module */ -typedef struct { - LINK_T rLinkHead; - OS_SYSTIME rNextExpiredSysTime; - KAL_WAKE_LOCK_T rWakeLock; - BOOLEAN fgWakeLocked; -} ROOT_TIMER, *P_ROOT_TIMER; - - -/* FW/DRV/NVRAM version information */ -typedef struct { - - /* NVRAM or Registry */ - UINT_16 u2Part1CfgOwnVersion; - UINT_16 u2Part1CfgPeerVersion; - UINT_16 u2Part2CfgOwnVersion; - UINT_16 u2Part2CfgPeerVersion; - - /* Firmware */ - UINT_16 u2FwProductID; - UINT_16 u2FwOwnVersion; - UINT_16 u2FwPeerVersion; - -} WIFI_VER_INFO_T, *P_WIFI_VER_INFO_T; - - -#if CFG_ENABLE_WIFI_DIRECT -/* -* p2p function pointer structure -*/ - -typedef struct _P2P_FUNCTION_LINKER { - P2P_REMOVE prP2pRemove; -// NIC_P2P_MEDIA_STATE_CHANGE prNicP2pMediaStateChange; -// SCAN_UPDATE_P2P_DEVICE_DESC prScanUpdateP2pDeviceDesc; -// P2P_FSM_RUN_EVENT_RX_PROBE_RESPONSE_FRAME prP2pFsmRunEventRxProbeResponseFrame; - P2P_GENERATE_P2P_IE prP2pGenerateWSC_IEForBeacon; -// P2P_CALCULATE_WSC_IE_LEN_FOR_PROBE_RSP prP2pCalculateWSC_IELenForProbeRsp; -// P2P_GENERATE_WSC_IE_FOR_PROBE_RSP prP2pGenerateWSC_IEForProbeRsp; -// SCAN_REMOVE_P2P_BSS_DESC prScanRemoveP2pBssDesc; -// P2P_HANDLE_SEC_CHECK_RSP prP2pHandleSecCheckRsp; - P2P_NET_REGISTER prP2pNetRegister; - P2P_NET_UNREGISTER prP2pNetUnregister; - P2P_CALCULATE_P2P_IE_LEN prP2pCalculateP2p_IELenForAssocReq; /* All IEs generated from supplicant. */ - P2P_GENERATE_P2P_IE prP2pGenerateP2p_IEForAssocReq; /* All IEs generated from supplicant. */ -} P2P_FUNCTION_LINKER, *P_P2P_FUNCTION_LINKER; - - -#endif - -/* - * Major ADAPTER structure - * Major data structure for driver operation - */ -struct _ADAPTER_T { - UINT_8 ucRevID; - - UINT_16 u2NicOpChnlNum; - - BOOLEAN fgIsEnableWMM; - BOOLEAN fgIsWmmAssoc; /* This flag is used to indicate that WMM is enable in current BSS */ - - UINT_32 u4OsPacketFilter; // packet filter used by OS - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_32 u4CSUMFlags; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - - ENUM_BAND_T aePreferBand[NETWORK_TYPE_INDEX_NUM]; - - /* ADAPTER flags */ - UINT_32 u4Flags; - UINT_32 u4HwFlags; - - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - ENUM_PHY_TYPE_INDEX_T eCurrentPhyType; /* Current selection basing on the set of Available PHY Types */ - -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - UINT_32 u4CoalescingBufCachedSize; - PUINT_8 pucCoalescingBufCached; -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - /* Buffer for CMD_INFO_T, Mgt packet and mailbox message */ - BUF_INFO_T rMgtBufInfo; - BUF_INFO_T rMsgBufInfo; - PUINT_8 pucMgtBufCached; - UINT_32 u4MgtBufCachedSize; - UINT_8 aucMsgBuf[MSG_BUFFER_SIZE]; -#if CFG_DBG_MGT_BUF - UINT_32 u4MemAllocDynamicCount; /* Debug only */ - UINT_32 u4MemFreeDynamicCount; /* Debug only */ -#endif - - STA_RECORD_T arStaRec[CFG_STA_REC_NUM]; - - /* Element for TX PATH */ - TX_CTRL_T rTxCtrl; - QUE_T rFreeCmdList; - CMD_INFO_T arHifCmdDesc[CFG_TX_MAX_CMD_PKT_NUM]; - - /* Element for RX PATH */ - RX_CTRL_T rRxCtrl; - - P_SDIO_CTRL_T prSDIOCtrl; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* Element for MT6620 E1 HIFSYS workaround */ - BOOLEAN fgIsClockGatingEnabled; -#endif - - /* Buffer for Authentication Event */ - /* Move to glue layer and refine the kal function */ - /* Reference to rsnGeneratePmkidIndication function at rsn.c */ - UINT_8 aucIndicationEventBuffer[(CFG_MAX_PMKID_CACHE * 20) + 8 ]; - - UINT_32 u4IntStatus; - - ENUM_ACPI_STATE_T rAcpiState; - - BOOLEAN fgIsIntEnable; - BOOLEAN fgIsIntEnableWithLPOwnSet; - - BOOLEAN fgIsFwOwn; - BOOLEAN fgWiFiInSleepyState; - - UINT_32 u4PwrCtrlBlockCnt; - - QUE_T rPendingCmdQueue; - - P_GLUE_INFO_T prGlueInfo; - - UINT_8 ucCmdSeqNum; - UINT_8 ucTxSeqNum; - -#if 1//CFG_SUPPORT_WAPI - BOOLEAN fgUseWapi; -#endif - - /* RF Test flags */ - BOOLEAN fgTestMode; - - /* WLAN Info for DRIVER_CORE OID query */ - WLAN_INFO_T rWlanInfo; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PRegistered; - ENUM_NET_REG_STATE_T rP2PNetRegState; - BOOLEAN fgIsWlanLaunched; - P_P2P_INFO_T prP2pInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - OS_SYSTIME rP2pLinkQualityUpdateTime; - BOOLEAN fgIsP2pLinkQualityValid; - EVENT_LINK_QUALITY rP2pLinkQuality; -#endif -#endif - - /* Online Scan Option */ - BOOLEAN fgEnOnlineScan; - - /* Online Scan Option */ - BOOLEAN fgDisBcnLostDetection; - - /* MAC address */ - PARAM_MAC_ADDRESS rMyMacAddr; - - /* Wake-up Event for WOL */ - UINT_32 u4WakeupEventEnable; - - /* Event Buffering */ - EVENT_STATISTICS rStatStruct; - OS_SYSTIME rStatUpdateTime; - BOOLEAN fgIsStatValid; - - EVENT_LINK_QUALITY rLinkQuality; - OS_SYSTIME rLinkQualityUpdateTime; - BOOLEAN fgIsLinkQualityValid; - OS_SYSTIME rLinkRateUpdateTime; - BOOLEAN fgIsLinkRateValid; - - /* WIFI_VAR_T */ - WIFI_VAR_T rWifiVar; - - /* MTK WLAN NIC driver IEEE 802.11 MIB */ - IEEE_802_11_MIB_T rMib; - - /* Mailboxs for inter-module communication */ - MBOX_T arMbox[MBOX_ID_TOTAL_NUM]; - - /* Timers for OID Pending Handling */ - TIMER_T rOidTimeoutTimer; - - /* Root Timer for cnm_timer module */ - ROOT_TIMER rRootTimer; - - /* RLM maintenance */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_SYS_PROTECT_MODE_T eSysProtectMode; - ENUM_GF_MODE_T eSysHtGfMode; - ENUM_RIFS_MODE_T eSysTxRifsMode; - ENUM_SYS_PCO_PHASE_T eSysPcoPhase; - - P_DOMAIN_INFO_ENTRY prDomainInfo; - - /* QM */ - QUE_MGT_T rQM; - - CNM_INFO_T rCnmInfo; - - UINT_32 u4PowerMode; - - UINT_32 u4CtiaPowerMode; - BOOLEAN fgEnCtiaPowerMode; - - UINT_32 fgEnArpFilter; - - UINT_32 u4UapsdAcBmp; - - UINT_32 u4MaxSpLen; - - UINT_32 u4PsCurrentMeasureEn; - - /* Version Information */ - WIFI_VER_INFO_T rVerInfo; - - /* 5GHz support (from F/W) */ - BOOLEAN fgIsHw5GBandDisabled; - BOOLEAN fgEnable5GBand; - BOOLEAN fgIsEepromUsed; - BOOLEAN fgIsEfuseValid; - BOOLEAN fgIsEmbbededMacAddrValid; - - /* Packet Forwarding Tracking */ - INT_32 i4PendingFwdFrameCount; - -#if CFG_SUPPORT_RDD_TEST_MODE - UINT_8 ucRddStatus; -#endif - - BOOL fgDisStaAgingTimeoutDetection; - -};/* end of _ADAPTER_T */ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros for BSS_INFO_T - Flag of Net Active */ -/*----------------------------------------------------------------------------*/ -#define IS_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive) -#define IS_BSS_ACTIVE(_prBssInfo) ((_prBssInfo)->fgIsNetActive) - -#define IS_AIS_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_AIS_INDEX) -#define IS_P2P_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_P2P_INDEX) -#define IS_BOW_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_BOW_INDEX) - -#define SET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = TRUE;} - -#define UNSET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = FALSE;} - -#define BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; \ - _prBssInfo->fgIsNetActive = FALSE; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - COPY_MAC_ADDR(_prBssInfo->aucBSSID, _aucZeroMacAddr); \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = FALSE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } - -#if CFG_ENABLE_BT_OVER_WIFI -#define BOW_BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_BOW; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = TRUE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } -#endif - -/*----------------------------------------------------------------------------*/ -/* Macros for Power State */ -/*----------------------------------------------------------------------------*/ -#define SET_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_IDLE;} - -#define SET_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_ACTIVE;} - -#define SET_NET_PWR_STATE_PS(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_PS;} - -#define IS_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_ACTIVE) - -#define IS_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_IDLE) - -#define IS_SCN_PWR_STATE_ACTIVE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_ACTIVE) - -#define IS_SCN_PWR_STATE_IDLE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_IDLE) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ADAPTER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/bow.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/bow.h deleted file mode 100755 index d0be930e2a61..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/bow.h +++ /dev/null @@ -1,323 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/bow.h#1 $ -*/ - - - -/* -** $Log: bow.h $ - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW structure. - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add Activity Report definition. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * sync. with design document for interface change. - * - * 04 02 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * Wi-Fi driver no longer needs to implement 802.11 PAL, thus replaced by wrapping command/event definitions - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * correct typo. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * update for all command/event needed to be supported by 802.11 PAL. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * -*/ - -#ifndef _BOW_H_ -#define _BOW_H_ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOWDEVNAME "bow0" - -#define MAX_BOW_NUMBER_OF_CHANNEL_2G4 14 -#define MAX_BOW_NUMBER_OF_CHANNEL_5G 4 -#define MAX_BOW_NUMBER_OF_CHANNEL 18 //(MAX_BOW_NUMBER_OF_CHANNEL_2G4 + MAX_BOW_NUMBER_OF_CHANNEL_5G) - -#define MAX_ACTIVITY_REPORT 2 -#define MAX_ACTIVITY_REPROT_TIME 660 - -#define ACTIVITY_REPORT_STATUS_SUCCESS 0 -#define ACTIVITY_REPORT_STATUS_FAILURE 1 -#define ACTIVITY_REPORT_STATUS_TIME_INVALID 2 -#define ACTIVITY_REPORT_STATUS_OTHERS 3 - -#define ACTIVITY_REPORT_SCHEDULE_UNKNOWN 0 //Does not know the schedule of the interference -#define ACTIVITY_REPORT_SCHEDULE_KNOWN 1 - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _BT_OVER_WIFI_COMMAND_HEADER_T { - UINT_8 ucCommandId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_COMMAND_HEADER_T, *P_AMPC_COMMAND_HEADER_T; - -typedef struct _BT_OVER_WIFI_COMMAND { - AMPC_COMMAND_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_COMMAND, *P_AMPC_COMMAND; - -typedef struct _BT_OVER_WIFI_EVENT_HEADER_T { - UINT_8 ucEventId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_EVENT_HEADER_T, *P_AMPC_EVENT_HEADER_T; - -typedef struct _BT_OVER_WIFI_EVENT { - AMPC_EVENT_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_EVENT, *P_AMPC_EVENT; - -typedef struct _CHANNEL_DESC_T { - UINT_8 ucChannelBand; - UINT_8 ucChannelNum; -} CHANNEL_DESC, P_CHANNEL_DESC; - -// Command Structures -typedef struct _BOW_SETUP_CONNECTION { -//Fixed to 2.4G - UINT_8 ucChannelNum; - UINT_8 ucReserved1; - UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucReserved2; - -//Pending, for future BOW 5G supporting. -/* UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucChannelListNum; - CHANNEL_DESC arChannelList[1]; -*/ -} BOW_SETUP_CONNECTION, *P_BOW_SETUP_CONNECTION; - -typedef struct _BOW_DESTROY_CONNECTION { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_DESTROY_CONNECTION, *P_BOW_DESTROY_CONNECTION; - -typedef struct _BOW_SET_PTK { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; - UINT_8 aucTemporalKey[16]; -} BOW_SET_PTK, *P_BOW_SET_PTK; - -typedef struct _BOW_READ_RSSI { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_RSSI, *P_BOW_READ_RSSI; - -typedef struct _BOW_READ_LINK_QUALITY { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_LINK_QUALITY, *P_BOW_READ_LINK_QUALITY; - -typedef struct _BOW_SHORT_RANGE_MODE { - UINT_8 aucPeerAddress[6]; - INT_8 cTxPower; - UINT_8 ucReserved; -} BOW_SHORT_RANGE_MODE, *P_BOW_SHORT_RANGE_MODE; - -// Event Structures -typedef struct _BOW_COMMAND_STATUS { - UINT_8 ucStatus; - UINT_8 ucReserved[3]; -} BOW_COMMAND_STATUS, *P_BOW_COMMAND_STATUS; - -typedef struct _BOW_MAC_STATUS { - UINT_8 aucMacAddr[6]; - UINT_8 ucAvailability; - UINT_8 ucNumOfChannel; - CHANNEL_DESC arChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; -} BOW_MAC_STATUS, *P_BOW_MAC_STATUS; - -typedef struct _BOW_LINK_CONNECTED { - CHANNEL_DESC rChannel; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_CONNECTED, *P_BOW_LINK_CONNECTED; - -typedef struct _BOW_LINK_DISCONNECTED { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_DISCONNECTED, *P_BOW_LINK_DISCONNECTED; - -typedef struct _BOW_RSSI { - INT_8 cRssi; - UINT_8 aucReserved[3]; -} BOW_RSSI, *P_BOW_RSSI; - -typedef struct _BOW_LINK_QUALITY { - UINT_8 ucLinkQuality; - UINT_8 aucReserved[3]; -} BOW_LINK_QUALITY, *P_BOW_LINK_QUALITY; - -typedef enum _ENUM_BOW_CMD_ID_T { - BOW_CMD_ID_GET_MAC_STATUS = 1, - BOW_CMD_ID_SETUP_CONNECTION, - BOW_CMD_ID_DESTROY_CONNECTION, - BOW_CMD_ID_SET_PTK, - BOW_CMD_ID_READ_RSSI, - BOW_CMD_ID_READ_LINK_QUALITY, - BOW_CMD_ID_SHORT_RANGE_MODE, - BOW_CMD_ID_GET_CHANNEL_LIST, -} ENUM_BOW_CMD_ID_T, *P_ENUM_BOW_CMD_ID_T; - -typedef enum _ENUM_BOW_EVENT_ID_T { - BOW_EVENT_ID_COMMAND_STATUS = 1, - BOW_EVENT_ID_MAC_STATUS, - BOW_EVENT_ID_LINK_CONNECTED, - BOW_EVENT_ID_LINK_DISCONNECTED, - BOW_EVENT_ID_RSSI, - BOW_EVENT_ID_LINK_QUALITY, - BOW_EVENT_ID_CHANNEL_LIST, - BOW_EVENT_ID_CHANNEL_SELECTED, -} ENUM_BOW_EVENT_ID_T, *P_ENUM_BOW_EVENT_ID_T; - -typedef enum _ENUM_BOW_DEVICE_STATE { - BOW_DEVICE_STATE_DISCONNECTED = 0, - BOW_DEVICE_STATE_DISCONNECTING, - BOW_DEVICE_STATE_ACQUIRING_CHANNEL, - BOW_DEVICE_STATE_STARTING, - BOW_DEVICE_STATE_SCANNING, - BOW_DEVICE_STATE_CONNECTING, - BOW_DEVICE_STATE_CONNECTED, - BOW_DEVICE_STATE_NUM -} ENUM_BOW_DEVICE_STATE, *P_ENUM_BOW_DEVICE_STATE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_BOW_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/cmd_buf.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/cmd_buf.h deleted file mode 100755 index 2bb10b9b1390..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/cmd_buf.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - - - -/* -** $Log: cmd_buf.h $ - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Enable change log -*/ - -#ifndef _CMD_BUF_H -#define _CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _COMMAND_TYPE { - COMMAND_TYPE_GENERAL_IOCTL, - COMMAND_TYPE_NETWORK_IOCTL, - COMMAND_TYPE_SECURITY_FRAME, - COMMAND_TYPE_MANAGEMENT_FRAME, - COMMAND_TYPE_NUM -} COMMAND_TYPE, *P_COMMAND_TYPE; - -typedef VOID (*PFN_CMD_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -typedef VOID (*PFN_CMD_TIMEOUT_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -struct _CMD_INFO_T { - QUE_ENTRY_T rQueEntry; - - COMMAND_TYPE eCmdType; - - UINT_16 u2InfoBufLen; /* This is actual CMD buffer length */ - PUINT_8 pucInfoBuffer; /* May pointer to structure in prAdapter */ - P_NATIVE_PACKET prPacket; /* only valid when it's a security frame */ - - ENUM_NETWORK_TYPE_INDEX_T eNetworkType; - UINT_8 ucStaRecIndex; /* only valid when it's a security frame */ - - PFN_CMD_DONE_HANDLER pfCmdDoneHandler; - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler; - - BOOLEAN fgIsOid; /* Used to check if we need indicate */ - - UINT_8 ucCID; - BOOLEAN fgSetQuery; - BOOLEAN fgNeedResp; - BOOLEAN fgDriverDomainMCR; /* Access Driver Domain MCR, for CMD_ID_ACCESS_REG only */ - UINT_8 ucCmdSeqNum; - UINT_32 u4SetInfoLen; /* Indicate how many byte we read for Set OID */ - - /* information indicating by OID/ioctl */ - PVOID pvInformationBuffer; - UINT_32 u4InformationBufferLength; - - /* private data */ - UINT_32 u4PrivateData; -}; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ); - -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Routines for CMDs */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hal.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hal.h deleted file mode 100755 index e67727d7653d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hal.h +++ /dev/null @@ -1,609 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hal.h#1 $ -*/ - -/*! \file "hal.h" - \brief The declaration of hal functions - - N/A -*/ - - - -/* -** $Log: hal.h $ - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-16 18:02:26 GMT mtk02752 -** include precomp.h -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:16 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 13:54:15 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-11 10:36:01 GMT mtk01084 -** modify HAL functions -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-09 22:56:28 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:50:09 GMT mtk01084 -** add new macro HAL_TX_PORT_WR -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:08:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:50 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-05-18 14:28:10 GMT mtk01084 -** fix issue in HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-11 17:26:33 GMT mtk01084 -** modify the bit definition to check driver own status -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:30:22 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:50:34 GMT mtk01461 -** Redefine HAL_PORT_RD/WR macro for SW pre test -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-24 09:46:49 GMT mtk01084 -** fix LINT error -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 16:53:38 GMT mtk01084 -** add HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:53:13 GMT mtk01426 -** Fixed lint warn -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:20 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HAL_H -#define _HAL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* Macros for flag operations for the Adapter structure */ -#define HAL_SET_FLAG(_M, _F) ((_M)->u4HwFlags |= (_F)) -#define HAL_CLEAR_FLAG(_M, _F) ((_M)->u4HwFlags &= ~(_F)) -#define HAL_TEST_FLAG(_M, _F) ((_M)->u4HwFlags & (_F)) -#define HAL_TEST_FLAGS(_M, _F) (((_M)->u4HwFlags & (_F)) == (_F)) - -#if defined(_HIF_SDIO) -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_RD access fail! 0x%x: 0x%x \n", _u4Offset, *_pu4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_RD access! 0x%x\n", _u4Offset)); \ - } \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_WR access fail! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_WR access! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_RD access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_RD access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_WR access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_BYTE_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - } \ - } \ - else { \ - DBGLOG(HAL, WARN, ("ignore HAL_BYTE_WR access! 0x%x\n", _u4Port)); \ - } \ - } - - -#define HAL_DRIVER_OWN_BY_SDIO_CMD52(_prAdapter, _pfgDriverIsOwnReady) \ - { \ - UINT_8 ucBuf = BIT(1); \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevReadAfterWriteWithSdioCmd52(_prAdapter->prGlueInfo, MCR_WHLPCR_BYTE1, &ucBuf, 1) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("kalDevReadAfterWriteWithSdioCmd52 access fail!\n")); \ - } \ - else { \ - *_pfgDriverIsOwnReady = (ucBuf & BIT(0)) ? TRUE : FALSE; \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_DRIVER_OWN_BY_SDIO_CMD52 access!\n")); \ - } \ - } - -#else /* #if defined(_HIF_SDIO) */ -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value); \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value); \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf); \ - } - -#endif /* #if defined(_HIF_SDIO) */ - - -#define HAL_READ_RX_PORT(prAdapter, u4PortId, u4Len, pvBuf, _u4ValidBufSize) \ - { \ - ASSERT(u4PortId < 2); \ - HAL_PORT_RD(prAdapter, \ - ((u4PortId == 0) ? MCR_WRDR0 : MCR_WRDR1), \ - u4Len, \ - pvBuf, \ - _u4ValidBufSize/*temp!!*//*4Kbyte*/) \ - } - -#define HAL_WRITE_TX_PORT(_prAdapter, _ucTxPortIdx, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - ASSERT(_ucTxPortIdx < 2); \ - if((_u4ValidBufSize - _u4Len) >= sizeof(UINT_32)) { \ - /* fill with single dword of zero as TX-aggregation termination */ \ - *(PUINT_32) (&((_pucBuf)[ALIGN_4(_u4Len)])) = 0; \ - } \ - HAL_PORT_WR(_prAdapter, \ - (_ucTxPortIdx == 0) ? MCR_WTDR0 : MCR_WTDR1, \ - _u4Len, \ - _pucBuf, \ - _u4ValidBufSize/*temp!!*//*4KByte*/) \ - } - -/* The macro to read the given MCR several times to check if the wait - condition come true. */ -#define HAL_MCR_RD_AND_WAIT(_pAdapter, _offset, _pReadValue, _waitCondition, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 count; \ - (_status) = FALSE; \ - for (count = 0; count < (_waitCount); count++) { \ - HAL_MCR_RD((_pAdapter), (_offset), (_pReadValue)); \ - if ((_waitCondition)) { \ - (_status) = TRUE; \ - break; \ - } \ - kalUdelay((_waitDelay)); \ - } \ - } - - -/* The macro to write 1 to a R/S bit and read it several times to check if the - command is done */ -#define HAL_MCR_WR_AND_WAIT(_pAdapter, _offset, _writeValue, _busyMask, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 u4Temp; \ - UINT_32 u4Count = _waitCount; \ - (_status) = FALSE; \ - HAL_MCR_WR((_pAdapter), (_offset), (_writeValue)); \ - do { \ - kalUdelay((_waitDelay)); \ - HAL_MCR_RD((_pAdapter), (_offset), &u4Temp); \ - if (!(u4Temp & (_busyMask))) { \ - (_status) = TRUE; \ - break; \ - } \ - u4Count--; \ - } while (u4Count); \ - } - -#define HAL_GET_CHIP_ID_VER(_prAdapter, pu2ChipId, pu2Version) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - *pu2ChipId = (UINT_16)(u4Value & WCIR_CHIP_ID); \ - *pu2Version = (UINT_16)(u4Value & WCIR_REVISION_ID) >> 16; \ - } - -#define HAL_WAIT_WIFI_FUNC_READY(_prAdapter) \ - { \ - UINT_32 u4Value; \ - UINT_32 i; \ - for (i = 0; i < 100; i++) { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - if (u4Value & WCIR_WLAN_READY) { \ - break; \ - } \ - NdisMSleep(10); \ - } \ - } - -#define HAL_INTR_DISABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_CLR) - -#define HAL_INTR_ENABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_SET) - -#define HAL_INTR_ENABLE_AND_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - (WHLPCR_INT_EN_SET | WHLPCR_FW_OWN_REQ_SET)) - -#define HAL_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_SET) - -#define HAL_LP_OWN_CLR_OK(_prAdapter, _pfgResult) \ - { \ - UINT_32 i; \ - UINT_32 u4RegValue; \ - UINT_32 u4LoopCnt = 2048 / 8; \ - *_pfgResult = TRUE; \ - /* Software get LP ownership */ \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_CLR) \ - for (i = 0; i < u4LoopCnt; i++) { \ - HAL_MCR_RD(_prAdapter, MCR_WHLPCR, &u4RegValue); \ - if (u4RegValue & WHLPCR_IS_DRIVER_OWN) { \ - break; \ - } \ - else { \ - kalUdelay(8); \ - } \ - } \ - if (i == u4LoopCnt) { \ - *_pfgResult = FALSE; \ - /*ERRORLOG(("LP cannot be own back (%ld)", u4LoopCnt));*/ \ - /* check the time of LP instructions need to perform from Sleep to On */ \ - /*ASSERT(0); */ \ - } \ - } - -#define HAL_GET_ABNORMAL_INTERRUPT_REASON_CODE(_prAdapter, pu4AbnormalReason) \ - { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WASR, \ - pu4AbnormalReason); \ - } - - -#define HAL_DISABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_ENABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_CFG_MAX_HIF_RX_LEN_NUM(_prAdapter, _ucNumOfRxLen) \ - { \ - UINT_32 u4Value, ucNum; \ - ucNum = ((_ucNumOfRxLen >= 16) ? 0 : _ucNumOfRxLen); \ - u4Value = 0; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - u4Value &= ~WHCR_MAX_HIF_RX_LEN_NUM; \ - u4Value |= ((((UINT_32)ucNum) << 4) & WHCR_MAX_HIF_RX_LEN_NUM); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value); \ - } - -#define HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = TRUE;\ - } - -#define HAL_SET_INTR_STATUS_WRITE_1_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = FALSE;\ - } - -/* Note: enhance mode structure may also carried inside the buffer, - if the length of the buffer is long enough */ -#define HAL_READ_INTR_STATUS(prAdapter, length, pvBuf) \ - HAL_PORT_RD(prAdapter, \ - MCR_WHISR, \ - length, \ - pvBuf, \ - length) - -#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, aucTxReleaseCount) \ - { \ - PUINT_32 pu4Value = (PUINT_32)aucTxReleaseCount; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR0, \ - &pu4Value[0]); \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR1, \ - &pu4Value[1]); \ - } - -#define HAL_READ_RX_LENGTH(prAdapter, pu2Rx0Len, pu2Rx1Len) \ - { \ - UINT_32 u4Value; \ - u4Value = 0; \ - HAL_MCR_RD(prAdapter, \ - MCR_WRPLR, \ - &u4Value); \ - *pu2Rx0Len = (UINT_16)u4Value; \ - *pu2Rx1Len = (UINT_16)(u4Value >> 16); \ - } - -#define HAL_GET_INTR_STATUS_FROM_ENHANCE_MODE_STRUCT(pvBuf, u2Len, pu4Status) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvBuf; \ - *pu4Status = pu4Buf[0]; \ - } - -#define HAL_GET_TX_STATUS_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4BufOut, u4LenBufOut) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT(u4LenBufOut >= 8); \ - pu4BufOut[0] = pu4Buf[1]; \ - pu4BufOut[1] = pu4Buf[2]; \ - } - -#define HAL_GET_RX_LENGTH_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu2Rx0Num, au2Rx0Len, pu2Rx1Num, au2Rx1Len) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT((sizeof(au2Rx0Len) / sizeof(UINT_16)) >= 16); \ - ASSERT((sizeof(au2Rx1Len) / sizeof(UINT_16)) >= 16); \ - *pu2Rx0Num = (UINT_16)pu4Buf[3]; \ - *pu2Rx1Num = (UINT_16)(pu4Buf[3] >> 16); \ - kalMemCopy(au2Rx0Len, &pu4Buf[4], 8); \ - kalMemCopy(au2Rx1Len, &pu4Buf[12], 8); \ - } - -#define HAL_GET_MAILBOX_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4Mailbox0, pu4Mailbox1) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - *pu4Mailbox0 = (UINT_16)pu4Buf[21]; \ - *pu4Mailbox1 = (UINT_16)pu4Buf[22]; \ - } - -#define HAL_IS_TX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_TX_DONE_INT) ? TRUE : FALSE) - -#define HAL_IS_RX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & (WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT)) ? TRUE : FALSE) - -#define HAL_IS_ABNORMAL_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_ABNORMAL_INT) ? TRUE : FALSE) - -#define HAL_IS_FW_OWNBACK_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_FW_OWN_BACK_INT) ? TRUE : FALSE) - -#define HAL_PUT_MAILBOX(prAdapter, u4MboxId, u4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_WR(prAdapter, \ - ((u4MboxId == 0) ? MCR_H2DSM0R : MCR_H2DSM1R), \ - u4Data); \ - } - -#define HAL_GET_MAILBOX(prAdapter, u4MboxId, pu4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_RD(prAdapter, \ - ((u4MboxId == 0) ? MCR_D2HRM0R : MCR_D2HRM1R), \ - pu4Data); \ - } - -#define HAL_SET_MAILBOX_READ_CLEAR(prAdapter, fgEnableReadClear) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value);\ - HAL_MCR_WR(prAdapter, MCR_WHCR, \ - (fgEnableReadClear) ? \ - (u4Value | WHCR_W_MAILBOX_RD_CLR_EN) : \ - (u4Value & ~WHCR_W_MAILBOX_RD_CLR_EN)); \ - prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear = fgEnableReadClear;\ - } - -#define HAL_GET_MAILBOX_READ_CLEAR(prAdapter) (prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hif_rx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hif_rx.h deleted file mode 100755 index 3895a7c3fc01..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hif_rx.h +++ /dev/null @@ -1,227 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hif_rx.h#1 $ -*/ - -/*! \file "hif_rx.h" - \brief Provide HIF RX Header Information between F/W and Driver - - N/A -*/ - - -/* -** $Log: hif_rx.h $ - * - * 09 01 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * follow-ups for HIF_RX_HEADER_T update: - * 1) add TCL - * 2) add RCPI - * 3) add ChannelNumber - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:44:00 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-09 13:59:20 GMT MTK02468 -** Added HIF_RX_HDR parsing macros -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 19:54:54 GMT mtk02752 -** adopt HIF_RX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-29 19:51:19 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:33:58 GMT mtk01461 -** Add define of HW_APPENED_LEN -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:51:02 GMT mtk01461 -** Rename ENUM_HIF_RX_PKT_TYPE_T -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 12:05:03 GMT mtk01426 -** Remove __KAL_ATTRIB_PACKED__ and add hifDataTypeCheck() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:18:52 GMT mtk01426 -** Add comment to HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:23 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HIF_RX_H -#define _HIF_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! HIF_RX_HEADER_T */ -// DW 0, Byte 1 -#define HIF_RX_HDR_PACKET_TYPE_MASK BITS(0,1) - -// DW 1, Byte 0 -#define HIF_RX_HDR_HEADER_LEN BITS(2,7) -#define HIF_RX_HDR_HEADER_LEN_OFFSET 2 -#define HIF_RX_HDR_HEADER_OFFSET_MASK BITS(0,1) - -// DW 1, Byte 1 -#define HIF_RX_HDR_80211_HEADER_FORMAT BIT(0) -#define HIF_RX_HDR_DO_REORDER BIT(1) -#define HIF_RX_HDR_PAL BIT(2) -#define HIF_RX_HDR_TCL BIT(3) -#define HIF_RX_HDR_NETWORK_IDX_MASK BITS(4,7) -#define HIF_RX_HDR_NETWORK_IDX_OFFSET 4 - -// DW 1, Byte 2, 3 -#define HIF_RX_HDR_SEQ_NO_MASK BITS(0,11) -#define HIF_RX_HDR_TID_MASK BITS(12,14) -#define HIF_RX_HDR_TID_OFFSET 12 -#define HIF_RX_HDR_BAR_FRAME BIT(15) - - - -#define HIF_RX_HDR_FLAG_AMP_WDS BIT(0) -#define HIF_RX_HDR_FLAG_802_11_FORMAT BIT(1) -#define HIF_RX_HDR_FLAG_BAR_FRAME BIT(2) -#define HIF_RX_HDR_FLAG_DO_REORDERING BIT(3) -#define HIF_RX_HDR_FLAG_CTRL_WARPPER_FRAME BIT(4) - -#define HIF_RX_HW_APPENDED_LEN 4 - -// For DW 2, Byte 3 - ucHwChannelNum -#define HW_CHNL_NUM_MAX_2G4 14 -#define HW_CHNL_NUM_MAX_4G_5G (255 - HW_CHNL_NUM_MAX_2G4) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _HIF_RX_HEADER_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucHerderLenOffset; - UINT_8 uc80211_Reorder_PAL_TCL; - UINT_16 u2SeqNoTid; - UINT_8 ucStaRecIdx; - UINT_8 ucRcpi; - UINT_8 ucHwChannelNum; - UINT_8 ucReserved; -} HIF_RX_HEADER_T, *P_HIF_RX_HEADER_T; - -typedef enum _ENUM_HIF_RX_PKT_TYPE_T { - HIF_RX_PKT_TYPE_DATA = 0, - HIF_RX_PKT_TYPE_EVENT, - HIF_RX_PKT_TYPE_TX_LOOPBACK, - HIF_RX_PKT_TYPE_MANAGEMENT, - HIF_RX_PKT_TYPE_NUM -} ENUM_HIF_RX_PKT_TYPE_T, *P_ENUM_HIF_RX_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define HIF_RX_HDR_SIZE sizeof(HIF_RX_HEADER_T) - -#define HIF_RX_HDR_GET_80211_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_80211_HEADER_FORMAT) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_REORDER_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_DO_REORDER) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_PAL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_PAL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_TCL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_TCL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_NETWORK_IDX(_prHifRxHdr) \ - ((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_NETWORK_IDX_MASK)\ - >> HIF_RX_HDR_NETWORK_IDX_OFFSET) - - -#define HIF_RX_HDR_GET_TID(_prHifRxHdr) \ - ((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_TID_MASK)\ - >> HIF_RX_HDR_TID_OFFSET) -#define HIF_RX_HDR_GET_SN(_prHifRxHdr) \ - (((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_SEQ_NO_MASK) -#define HIF_RX_HDR_GET_BAR_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_BAR_FRAME)? TRUE: FALSE)) - - -#define HIF_RX_HDR_GET_CHNL_NUM(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) > HW_CHNL_NUM_MAX_4G_5G ) ? \ - ( ((_prHifRxHdr)->ucHwChannelNum) - HW_CHNL_NUM_MAX_4G_5G ) : \ - ((_prHifRxHdr)->ucHwChannelNum) ) - -/* To do: support more bands other than 2.4G and 5G */ -#define HIF_RX_HDR_GET_RF_BAND(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) <= HW_CHNL_NUM_MAX_2G4 ) ? \ - BAND_2G4 : BAND_5G) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_RX_HEADER_T) == 12); - - return; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hif_tx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hif_tx.h deleted file mode 100755 index 3a04ce55d9be..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/hif_tx.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hif_tx.h#1 $ -*/ - - - -/* -** $Log: hif_tx.h $ - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * 2. follow MSDN defined behavior when associates to another AP - * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:40 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-24 19:55:11 GMT mtk02752 -** adopt HIF_TX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-23 17:54:13 GMT mtk02752 -** CMD_HDR_SIZE = (sizeof(WIFI_CMD_T)) to follow up CM's CMD/EVENT documentation -** -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-17 22:41:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-17 17:34:07 GMT mtk02752 -** remove HIF_TX_BUFF_COUNT_TC0 (move to nic_tx.h) -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-17 12:14:12 GMT mtk02752 -** add initial value for HIF_TX_BUFF_COUNT_TC5 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-13 13:54:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-04 14:11:14 GMT mtk01084 -** modify SW TX data format -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-29 19:51:53 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-20 12:22:46 GMT mtk01461 -** Add SeqNum field to CMD Header -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:40:52 GMT mtk01461 -** Update the Log Sign -*/ - -#ifndef _HIF_TX_H -#define _HIF_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Maximum buffer size for individual HIF TCQ Buffer */ -#define HIF_TX_BUFF_MAX_SIZE 1552 /* Reserved field was not included */ - -/* Maximum buffer count for individual HIF TCQ */ -#define HIF_TX_BUFF_COUNT_TC0 3 -#define HIF_TX_BUFF_COUNT_TC1 3 -#define HIF_TX_BUFF_COUNT_TC2 3 -#define HIF_TX_BUFF_COUNT_TC3 3 -#define HIF_TX_BUFF_COUNT_TC4 2 - -#define TX_HDR_SIZE sizeof(HIF_TX_HEADER_T) - -#define CMD_HDR_SIZE sizeof(WIFI_CMD_T) - -#define CMD_PKT_SIZE_FOR_IMAGE 2048 /* !< 2048 Bytes CMD payload buffer */ - - -/*! NIC_HIF_TX_HEADER_T */ -// DW 0, Byte 0,1 -#define HIF_TX_HDR_TX_BYTE_COUNT_MASK BITS(0,11) -#define HIF_TX_HDR_USER_PRIORITY_OFFSET 12 - -// DW 0, Byte 2 -#define HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK BITS(0,7) - -// DW 0, Byte 3 -#define HIF_TX_HDR_IP_CSUM BIT(0) -#define HIF_TX_HDR_TCP_CSUM BIT(1) -#define HIF_TX_HDR_RESOURCE_MASK BITS(2,5) -#define HIF_TX_HDR_RESOURCE_OFFSET 2 -#define HIF_TX_HDR_PACKET_TYPE_MASK BITS(6,7) -#define HIF_TX_HDR_PACKET_TYPE_OFFSET 6 - -// DW 1, Byte 0 -#define HIF_TX_HDR_WLAN_HEADER_LEN_MASK BITS(0,5) - -// DW 1, Byte 1 -#define HIF_TX_HDR_FORMAT_ID_MASK BITS(0,2) -#define HIF_TX_HDR_NETWORK_TYPE_MASK BITS(4,5) -#define HIF_TX_HDR_NETWORK_TYPE_OFFSET 4 -#define HIF_TX_HDR_FLAG_1X_FRAME_MASK BIT(6) -#define HIF_TX_HDR_FLAG_1X_FRAME_OFFSET 6 -#define HIF_TX_HDR_FLAG_802_11_FORMAT_MASK BIT(7) -#define HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET 7 - - -// DW2, Byte 3 -#define HIF_TX_HDR_PS_FORWARDING_TYPE_MASK BITS(0,1) -#define HIF_TX_HDR_PS_SESSION_ID_MASK BITS(2,4) -#define HIF_TX_HDR_PS_SESSION_ID_OFFSET 2 -#define HIF_TX_HDR_BURST_END_MASK BIT(5) -#define HIF_TX_HDR_BURST_END_OFFSET 5 - -// DW3, Byte 1 -#define HIF_TX_HDR_NEED_ACK BIT(0) -#define HIF_TX_HDR_BIP BIT(1) -#define HIF_TX_HDR_BASIC_RATE BIT(2) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _HIF_HW_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - UINT_8 aucBuffer[0]; -} HIF_HW_TX_HEADER_T, *P_HIF_HW_TX_HEADER_T; - -typedef struct _HIF_TX_HEADER_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucWlanHeaderLength; - UINT_8 ucPktFormtId_Flags; - UINT_16 u2LLH; /* for BOW */ - UINT_16 u2SeqNo; /* for BOW */ - UINT_8 ucStaRecIdx; - UINT_8 ucForwardingType_SessionID_Reserved; - UINT_8 ucPacketSeqNo; - UINT_8 ucAck_BIP_BasicRate; - UINT_8 aucReserved[2]; -} HIF_TX_HEADER_T, *P_HIF_TX_HEADER_T; - -typedef enum _ENUM_HIF_TX_PKT_TYPE_T { - HIF_TX_PKT_TYPE_DATA = 0, - HIF_TX_PKT_TYPE_CMD, - HIF_TX_PKT_TYPE_HIF_LOOPBACK, - HIF_TX_PKT_TYPE_MANAGEMENT, - HIF_TX_PKT_TYPE_NUM -} ENUM_HIF_TX_PKT_TYPE_T, *P_ENUM_HIF_TX_PKT_TYPE_T; - -typedef enum _ENUM_HIF_OOB_CTRL_PKT_TYPE_T { - HIF_OOB_CTRL_PKT_TYPE_LOOPBACK = 1, - HIF_OOB_CTRL_PKT_TYP_NUM -} ENUM_HIF_OOB_CTRL_PKT_TYPE_T, *P_ENUM_HIF_OOB_CTRL_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define TFCB_FRAME_PAD_TO_DW(u2Length) ALIGN_4(u2Length) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - */ -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ); - -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_TX_HEADER_T) == 16); - - return; -} - -#endif /*_HIF_TX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/mac.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/mac.h deleted file mode 100755 index d7e2cd8f10ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/mac.h +++ /dev/null @@ -1,2186 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/mac.h#1 $ -*/ - -/*! \file "mac.h" - \brief Brief description. - - Detail description. -*/ - - - -/* -** $Log: mac.h $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * Add the length check before access the ie length filed. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * adding the length check before processing next ie.. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discover ability support. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Some action frame define is not belong to P2P. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add some service discovery MAC define, phase I. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 11 01 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * revert to previous revision. (this file is not necessary to be changed) - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * 1. Add P2P MAC define. - * 2. Add scan device found event - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add WFA specific OUI. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P IE ID & Vendor OUI TYPE for P2P. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge MAC.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added OFFSET_BAR_SSC_SN -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:00:24 GMT MTK02468 -** Added offsets and masks for the BA Parameter Set filed -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:26 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _MAC_H -#define _MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//3 /* --------------- Constants for Ethernet/802.11 MAC --------------- */ -/* MAC Address */ -#define MAC_ADDR_LEN 6 - -#define MAC_ADDR_LOCAL_ADMIN BIT(1) - -#define ETH_P_IPV4 0x0800 -#define ETH_P_IPX 0x8137 // Novell IPX -#define ETH_P_AARP 0x80F3 // AppleTalk Address Resolution Protocol (AARP) -#define ETH_P_IPV6 0x86DD - -#define IP_VERSION_4 4 -#define IP_VERSION_6 6 - -#define IP_PROTOCOL_TCP 6 -#define IP_PROTOCOL_UDP 17 - -#define IPV4_HDR_IP_IDENTIFICATION_OFFSET 4 -#define IPV4_HDR_IP_PROTOCOL_OFFSET 9 -#define IPV4_HDR_IP_CSUM_OFFSET 10 - -#define IPV6_HDR_IP_PROTOCOL_OFFSET 6 - -#define TCP_HDR_TCP_CSUM_OFFSET 16 -#define UDP_HDR_UDP_CSUM_OFFSET 6 - -#define LLC_LEN 8 // LLC(3) + SNAP(3) + EtherType(2) - -#define NULL_MAC_ADDR {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} -#define BC_MAC_ADDR {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} - -/* Ethernet Frame Field Size, in byte */ -#define ETHER_HEADER_LEN 14 -#define ETHER_TYPE_LEN 2 -#define ETHER_MIN_PKT_SZ 60 -#define ETHER_MAX_PKT_SZ 1514 - -/* IEEE 802.11 WLAN Frame Field Size, in byte */ -#define WLAN_MAC_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_HEADER_A4_LEN 30 /* Address 4 included */ -#define WLAN_MAC_HEADER_QOS_LEN 26 /* QoS Control included */ -#define WLAN_MAC_HEADER_QOS_HTC_LEN 30 /* QoS Control and HTC included */ -#define WLAN_MAC_HEADER_A4_QOS_LEN 32 /* Address 4 and QoS Control included */ -#define WLAN_MAC_HEADER_A4_QOS_HTC_LEN 36 /* Address 4, QoS Control and HTC included */ -#define WLAN_MAC_MGMT_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_MGMT_HEADER_HTC_LEN 28 /* HTC included */ - -#define QOS_CTRL_LEN 2 -#define HT_CTRL_LEN 4 - -#define WLAN_MAC_CTS_ACK_LEN WLAN_MAC_CTS_ACK_FRAME_HEADER_LEN + FCS_LEN - -/* 6.2.1.1.2 Semantics of the service primitive */ -#define MSDU_MAX_LENGTH 2304 - -/* 7.1.3.3.3 Broadcast BSSID */ -#define BC_BSSID BC_MAC_ADDR - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.3.1.6 Listen Interval field */ -#define DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD 2 // In unit of AP's DTIM interval, -#define DEFAULT_LISTEN_INTERVAL 10 - -/* 7.3.2.1 Broadcast(Wildcard) SSID */ -#define BC_SSID "" -#define BC_SSID_LEN 0 - -/* 7.3.2.2 Data Rate Value */ -#define RATE_1M 2 /* 1M in unit of 500kb/s */ -#define RATE_2M 4 /* 2M */ -#define RATE_5_5M 11 /* 5.5M */ -#define RATE_11M 22 /* 11M */ -#define RATE_22M 44 /* 22M */ -#define RATE_33M 66 /* 33M */ -#define RATE_6M 12 /* 6M */ -#define RATE_9M 18 /* 9M */ -#define RATE_12M 24 /* 12M */ -#define RATE_18M 36 /* 18M */ -#define RATE_24M 48 /* 24M */ -#define RATE_36M 72 /* 36M */ -#define RATE_48M 96 /* 48M */ -#define RATE_54M 108 /* 54M */ -/* 7.3.2.14 BSS membership selector */ -#define RATE_HT_PHY 127 /* BSS Selector - Clause 20. HT PHY */ -#define RATE_MASK BITS(0,6) /* mask bits for the rate */ -#define RATE_BASIC_BIT BIT(7) /* mask bit for the rate belonging to the BSSBasicRateSet */ - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 9.2.10 DIFS */ -#define DIFS 2 /* 2 x aSlotTime */ - -/* 11.3 STA Authentication and Association */ -#define STA_STATE_1 0 /* Accept Class 1 frames */ -#define STA_STATE_2 1 /* Accept Class 1 & 2 frames */ -#define STA_STATE_3 2 /* Accept Class 1,2 & 3 frames */ - -/* 15.4.8.5 802.11k RCPI-dBm mapping*/ -#define NDBM_LOW_BOUND_FOR_RCPI 110 -#define RCPI_LOW_BOUND 0 -#define RCPI_HIGH_BOUND 220 -#define RCPI_MEASUREMENT_NOT_AVAILABLE 255 - - -/* PHY characteristics */ -/* 17.4.4/18.3.3/19.8.4 Slot Time (aSlotTime) */ -#define SLOT_TIME_LONG 20 /* Long Slot Time */ -#define SLOT_TIME_SHORT 9 /* Short Slot Time */ - -#define SLOT_TIME_HR_DSSS SLOT_TIME_LONG /* 802.11b aSlotTime */ -#define SLOT_TIME_OFDM SLOT_TIME_SHORT /* 802.11a aSlotTime(20M Spacing) */ -#define SLOT_TIME_OFDM_10M_SPACING 13 /* 802.11a aSlotTime(10M Spacing) */ -#define SLOT_TIME_ERP_LONG SLOT_TIME_LONG /* 802.11g aSlotTime(Long) */ -#define SLOT_TIME_ERP_SHORT SLOT_TIME_SHORT /* 802.11g aSlotTime(Short) */ - -/* 17.4.4/18.3.3/19.8.4 Contention Window (aCWmin & aCWmax) */ -#define CWMIN_OFDM 15 /* 802.11a aCWmin */ -#define CWMAX_OFDM 1023 /* 802.11a aCWmax */ - -#define CWMIN_HR_DSSS 31 /* 802.11b aCWmin */ -#define CWMAX_HR_DSSS 1023 /* 802.11b aCWmax */ - -#define CWMIN_ERP_0 31 /* 802.11g aCWmin(0) - for only have 1/2/5/11Mbps Rates */ -#define CWMIN_ERP_1 15 /* 802.11g aCWmin(1) */ -#define CWMAX_ERP 1023 /* 802.11g aCWmax */ - -/* Short Inter-Frame Space (aSIFSTime) */ -/* 15.3.3 802.11b aSIFSTime */ -#define SIFS_TIME_HR_DSSS 10 -/* 17.4.4 802.11a aSIFSTime */ -#define SIFS_TIME_OFDM 16 -/* 19.8.4 802.11g aSIFSTime */ -#define SIFS_TIME_ERP 10 - -/* 15.4.6.2 Number of operating channels */ -#define CH_1 0x1 -#define CH_2 0x2 -#define CH_3 0x3 -#define CH_4 0x4 -#define CH_5 0x5 -#define CH_6 0x6 -#define CH_7 0x7 -#define CH_8 0x8 -#define CH_9 0x9 -#define CH_10 0xa -#define CH_11 0xb -#define CH_12 0xc -#define CH_13 0xd -#define CH_14 0xe - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - - -//3 /* --------------- IEEE 802.11 PICS --------------- */ -/* Annex D - dot11OperationEntry 2 */ -#define DOT11_RTS_THRESHOLD_MIN 0 -#define DOT11_RTS_THRESHOLD_MAX 2347 // from Windows DDK -//#define DOT11_RTS_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_RTS_THRESHOLD_DEFAULT \ - DOT11_RTS_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 5 */ -#define DOT11_FRAGMENTATION_THRESHOLD_MIN 256 -#define DOT11_FRAGMENTATION_THRESHOLD_MAX 2346 // from Windows DDK -//#define DOT11_FRAGMENTATION_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_FRAGMENTATION_THRESHOLD_DEFAULT \ - DOT11_FRAGMENTATION_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 6 */ -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MIN 1 -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_DEFAULT 4095 // 802.11 define 512 - // MT5921 only aceept N <= 4095 - -/* Annex D - dot11OperationEntry 7 */ -#define DOT11_RECEIVE_LIFETIME_TU_MIN 1 -#define DOT11_RECEIVE_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_RECEIVE_LIFETIME_TU_DEFAULT 4096 // 802.11 define 512 - -/* Annex D - dot11StationConfigEntry 12 */ -#define DOT11_BEACON_PERIOD_MIN 1 // TU. -#define DOT11_BEACON_PERIOD_MAX 0xffff // TU. -#define DOT11_BEACON_PERIOD_DEFAULT 100 // TU. - -/* Annex D - dot11StationConfigEntry 13 */ -#define DOT11_DTIM_PERIOD_MIN 1 // TU. -#define DOT11_DTIM_PERIOD_MAX 255 // TU. -#define DOT11_DTIM_PERIOD_DEFAULT 1 // TU. - -/* Annex D - dot11RegDomainsSupportValue */ -#define REGULATION_DOMAIN_FCC 0x10 /* FCC (US) */ -#define REGULATION_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define REGULATION_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define REGULATION_DOMAIN_SPAIN 0x31 /* Spain */ -#define REGULATION_DOMAIN_FRANCE 0x32 /* France */ -#define REGULATION_DOMAIN_JAPAN 0x40 /* MKK (Japan) */ -#define REGULATION_DOMAIN_CHINA 0x50 /* China */ -#define REGULATION_DOMAIN_OTHER 0x00 /* Other */ - - - -//3 /* --------------- IEEE 802.11 MAC header fields --------------- */ -/* 7.1.3.1 Masks for the subfields in the Frame Control field */ -#define MASK_FC_PROTOCOL_VER BITS(0,1) -#define MASK_FC_TYPE BITS(2,3) -#define MASK_FC_SUBTYPE BITS(4,7) -#define MASK_FC_SUBTYPE_QOS_DATA BIT(7) -#define MASK_FC_TO_DS BIT(8) -#define MASK_FC_FROM_DS BIT(9) -#define MASK_FC_MORE_FRAG BIT(10) -#define MASK_FC_RETRY BIT(11) -#define MASK_FC_PWR_MGT BIT(12) -#define MASK_FC_MORE_DATA BIT(13) -#define MASK_FC_PROTECTED_FRAME BIT(14) -#define MASK_FC_ORDER BIT(15) - -#define MASK_FRAME_TYPE (MASK_FC_TYPE | MASK_FC_SUBTYPE) -#define MASK_TO_DS_FROM_DS (MASK_FC_TO_DS | MASK_FC_FROM_DS) - -#define MAX_NUM_OF_FC_SUBTYPES 16 -#define OFFSET_OF_FC_SUBTYPE 4 - - -/* 7.1.3.1.2 MAC frame types and subtypes */ -#define MAC_FRAME_TYPE_MGT 0 -#define MAC_FRAME_TYPE_CTRL BIT(2) -#define MAC_FRAME_TYPE_DATA BIT(3) -#define MAC_FRAME_TYPE_QOS_DATA (MAC_FRAME_TYPE_DATA | MASK_FC_SUBTYPE_QOS_DATA) - -#define MAC_FRAME_ASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0000) -#define MAC_FRAME_ASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0010) -#define MAC_FRAME_REASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0020) -#define MAC_FRAME_REASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0030) -#define MAC_FRAME_PROBE_REQ (MAC_FRAME_TYPE_MGT | 0x0040) -#define MAC_FRAME_PROBE_RSP (MAC_FRAME_TYPE_MGT | 0x0050) -#define MAC_FRAME_BEACON (MAC_FRAME_TYPE_MGT | 0x0080) -#define MAC_FRAME_ATIM (MAC_FRAME_TYPE_MGT | 0x0090) -#define MAC_FRAME_DISASSOC (MAC_FRAME_TYPE_MGT | 0x00A0) -#define MAC_FRAME_AUTH (MAC_FRAME_TYPE_MGT | 0x00B0) -#define MAC_FRAME_DEAUTH (MAC_FRAME_TYPE_MGT | 0x00C0) -#define MAC_FRAME_ACTION (MAC_FRAME_TYPE_MGT | 0x00D0) -#define MAC_FRAME_ACTION_NO_ACK (MAC_FRAME_TYPE_MGT | 0x00E0) - - -#define MAC_FRAME_CONTRL_WRAPPER (MAC_FRAME_TYPE_CTRL | 0x0070) -#define MAC_FRAME_BLOCK_ACK_REQ (MAC_FRAME_TYPE_CTRL | 0x0080) -#define MAC_FRAME_BLOCK_ACK (MAC_FRAME_TYPE_CTRL | 0x0090) -#define MAC_FRAME_PS_POLL (MAC_FRAME_TYPE_CTRL | 0x00A0) -#define MAC_FRAME_RTS (MAC_FRAME_TYPE_CTRL | 0x00B0) -#define MAC_FRAME_CTS (MAC_FRAME_TYPE_CTRL | 0x00C0) -#define MAC_FRAME_ACK (MAC_FRAME_TYPE_CTRL | 0x00D0) -#define MAC_FRAME_CF_END (MAC_FRAME_TYPE_CTRL | 0x00E0) -#define MAC_FRAME_CF_END_CF_ACK (MAC_FRAME_TYPE_CTRL | 0x00F0) - -#define MAC_FRAME_DATA (MAC_FRAME_TYPE_DATA | 0x0000) -#define MAC_FRAME_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0010) -#define MAC_FRAME_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0020) -#define MAC_FRAME_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0030) -#define MAC_FRAME_NULL (MAC_FRAME_TYPE_DATA | 0x0040) -#define MAC_FRAME_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0050) -#define MAC_FRAME_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0060) -#define MAC_FRAME_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0070) -#define MAC_FRAME_QOS_DATA (MAC_FRAME_TYPE_DATA | 0x0080) -#define MAC_FRAME_QOS_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0090) -#define MAC_FRAME_QOS_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00A0) -#define MAC_FRAME_QOS_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00B0) -#define MAC_FRAME_QOS_NULL (MAC_FRAME_TYPE_DATA | 0x00C0) -#define MAC_FRAME_QOS_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00E0) -#define MAC_FRAME_QOS_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00F0) - -/* 7.1.3.2 Mask for the AID value in the Duration/ID field */ -#define MASK_DI_DURATION BITS(0,14) -#define MASK_DI_AID BITS(0,13) -#define MASK_DI_AID_MSB BITS(14,15) -#define MASK_DI_CFP_FIXED_VALUE BIT(15) - -/* 7.1.3.4 Masks for the subfields in the Sequence Control field */ -#define MASK_SC_SEQ_NUM BITS(4,15) -#define MASK_SC_SEQ_NUM_OFFSET 4 -#define MASK_SC_FRAG_NUM BITS(0,3) -#define INVALID_SEQ_CTRL_NUM 0x000F /* According to 6.2.1.1.2 - * FRAG_NUM won't equal to 15 - */ - -/* 7.1.3.5 QoS Control field */ -#define TID_NUM 16 -#define TID_MASK BITS(0,3) -#define EOSP BIT(4) -#define ACK_POLICY BITS(5,6) -#define A_MSDU_PRESENT BIT(7) - -#define MASK_QC_TID BITS(0,3) -#define MASK_QC_EOSP BIT(4) -#define MASK_QC_EOSP_OFFSET 4 -#define MASK_QC_ACK_POLICY BITS(5, 6) -#define MASK_QC_ACK_POLICY_OFFSET 5 -#define MASK_QC_A_MSDU_PRESENT BIT(7) - -/* 7.1.3.5a HT Control field */ -#define HT_CTRL_LINK_ADAPTATION_CTRL BITS(0,15) -#define HT_CTRL_CALIBRATION_POSITION BITS(16,17) -#define HT_CTRL_CALIBRATION_SEQUENCE BITS(18,19) -#define HT_CTRL_CSI_STEERING BITS(22,23) -#define HT_CTRL_NDP_ANNOUNCEMENT BIT(24) -#define HT_CTRL_AC_CONSTRAINT BIT(30) -#define HT_CTRL_RDG_MORE_PPDU BIT(31) - -#define LINK_ADAPTATION_CTRL_TRQ BIT(1) -#define LINK_ADAPTATION_CTRL_MAI_MRQ BIT(2) -#define LINK_ADAPTATION_CTRL_MAI_MSI BITS(3,5) -#define LINK_ADAPTATION_CTRL_MFSI BITS(6,8) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_CMD BITS(9,11) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_DATA BITS(12,15) - -/* 7.1.3.5.3 Ack Policy subfield*/ -#define ACK_POLICY_NORMAL_ACK_IMPLICIT_BA_REQ 0 -#define ACK_POLICY_NO_ACK 1 -#define ACK_POLICY_NO_EXPLICIT_ACK_PSMP_ACK 2 -#define ACK_POLICY_BA 3 - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -#define PSPOLL_FRAME_LEN 16 /* w/o FCS */ - -/* 7.2.7.1 BAR */ -#define OFFSET_BAR_SSC_SN 4 - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 2009.11.30 mtk02468: Moved these definitions to the right place */ -#if 0 -/* Block Ack Parameter Set field */ -#define BA_PARM_BA_POLICY BIT(1) -#define BA_PARM_TID BITS(2,5) -#define BA_PARM_BUFFER_SIZE BITS(6,15) -#endif - -#define BA_POLICY_IMMEDIATE BIT(1) - -/* Block Ack Starting Sequence Control field */ -#define BA_START_SEQ_CTL_FRAG_NUM BITS(0,3) -#define BA_START_SEQ_CTL_SSN BITS(4,15) - -/* BAR Control field */ -#define BAR_CONTROL_NO_ACK_POLICY BIT(0) -#define BAR_CONTROL_MULTI_TID BIT(1) -#define BAR_CONTROL_COMPRESSED_BA BIT(2) -#define BAR_CONTROL_TID_INFO BITS(12,15) -#define BAR_CONTROL_TID_INFO_OFFSET 12 - -/* TID Value */ -#define BAR_INFO_TID_VALUE BITS(12,15) - -#define BAR_COMPRESSED_VARIANT_FRAME_LEN (16 + 4) - -//3 /* --------------- IEEE 802.11 frame body fields --------------- */ -//3 Management frame body components (I): Fixed Fields. -/* 7.3.1.1 Authentication Algorithm Number field */ -#define AUTH_ALGORITHM_NUM_FIELD_LEN 2 - -#define AUTH_ALGORITHM_NUM_OPEN_SYSTEM 0 /* Open System */ -#define AUTH_ALGORITHM_NUM_SHARED_KEY 1 /* Shared Key */ -#define AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION 2 /* Fast BSS Transition */ - -/* 7.3.1.2 Authentication Transaction Sequence Number field */ -#define AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN 2 -#define AUTH_TRANSACTION_SEQ_1 1 -#define AUTH_TRANSACTION_SEQ_2 2 -#define AUTH_TRANSACTION_SEQ_3 3 -#define AUTH_TRANSACTION_SEQ_4 4 - -/* 7.3.1.3 Beacon Interval field */ -#define BEACON_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.4 Capability Information field */ -#define CAP_INFO_FIELD_LEN 2 -#define CAP_INFO_ESS BIT(0) -#define CAP_INFO_IBSS BIT(1) -#define CAP_INFO_BSS_TYPE (CAP_INFO_ESS | CAP_INFO_IBSS) -#define CAP_INFO_CF_POLLABLE BIT(2) -#define CAP_INFO_CF_POLL_REQ BIT(3) -#define CAP_INFO_CF (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) -#define CAP_INFO_PRIVACY BIT(4) -#define CAP_INFO_SHORT_PREAMBLE BIT(5) -#define CAP_INFO_PBCC BIT(6) -#define CAP_INFO_CH_AGILITY BIT(7) -#define CAP_INFO_SPEC_MGT BIT(8) -#define CAP_INFO_QOS BIT(9) -#define CAP_INFO_SHORT_SLOT_TIME BIT(10) -#define CAP_INFO_APSD BIT(11) -#define CAP_INFO_RESERVED BIT(12) -#define CAP_INFO_DSSS_OFDM BIT(13) -#define CAP_INFO_DELAYED_BLOCK_ACK BIT(14) -#define CAP_INFO_IMM_BLOCK_ACK BIT(15) -/* STA usage of CF-Pollable and CF-Poll Request subfields */ -/* STA: not CF-Pollable */ -#define CAP_CF_STA_NOT_POLLABLE 0x0000 -/* STA: CF-Pollable, not requesting on the CF-Polling list */ -#define CAP_CF_STA_NOT_ON_LIST CAP_INFO_CF_POLL_REQ -/* STA: CF-Pollable, requesting on the CF-Polling list */ -#define CAP_CF_STA_ON_LIST CAP_INFO_CF_POLLABLE -/* STA: CF-Pollable, requesting never to be polled */ -#define CAP_CF_STA_NEVER_POLLED (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) - -/* AP usage of CF-Pollable and CF-Poll Request subfields */ -/* AP: No point coordinator (PC) */ -#define CAP_CF_AP_NO_PC 0x0000 -/* AP: PC at AP for delivery only (no polling) */ -#define CAP_CF_AP_DELIVERY_ONLY CAP_INFO_CF_POLL_REQ -/* AP: PC at AP for delivery and polling */ -#define CAP_CF_AP_DELIVERY_POLLING CAP_INFO_CF_POLLABLE - -/* 7.3.1.5 Current AP Address field */ -#define CURR_AP_ADDR_FIELD_LEN MAC_ADDR_LEN - -/* 7.3.1.6 Listen Interval field */ -#define LISTEN_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.7 Reason Code field */ -#define REASON_CODE_FIELD_LEN 2 - -#define REASON_CODE_RESERVED 0 /* Reseved */ -#define REASON_CODE_UNSPECIFIED 1 /* Unspecified reason */ -#define REASON_CODE_PREV_AUTH_INVALID 2 /* Previous auth no longer valid */ -#define REASON_CODE_DEAUTH_LEAVING_BSS 3 /* Deauth because sending STA is leaving BSS */ -#define REASON_CODE_DISASSOC_INACTIVITY 4 /* Disassoc due to inactivity */ -#define REASON_CODE_DISASSOC_AP_OVERLOAD 5 /* Disassoc because AP is unable to handle all assoc STAs */ -#define REASON_CODE_CLASS_2_ERR 6 /* Class 2 frame rx from nonauth STA */ -#define REASON_CODE_CLASS_3_ERR 7 /* Class 3 frame rx from nonassoc STA */ -#define REASON_CODE_DISASSOC_LEAVING_BSS 8 /* Disassoc because sending STA is leaving BSS */ -#define REASON_CODE_ASSOC_BEFORE_AUTH 9 /* STA requesting (re)assoc is not auth with responding STA */ -#define REASON_CODE_DISASSOC_PWR_CAP_UNACCEPTABLE 10 /* Disassoc because the info in Power Capability is unacceptable */ -#define REASON_CODE_DISASSOC_SUP_CHS_UNACCEPTABLE 11 /* Disassoc because the info in Supported Channels is unacceptable */ -#define REASON_CODE_INVALID_INFO_ELEM 13 /* Invalid information element */ -#define REASON_CODE_MIC_FAILURE 14 /* MIC failure */ -#define REASON_CODE_4_WAY_HANDSHAKE_TIMEOUT 15 /* 4-way handshake timeout */ -#define REASON_CODE_GROUP_KEY_UPDATE_TIMEOUT 16 /* Group key update timeout */ -#define REASON_CODE_DIFFERENT_INFO_ELEM 17 /* Info element in 4-way handshake different from (Re-)associate request/Probe response/Beacon */ -#define REASON_CODE_MULTICAST_CIPHER_NOT_VALID 18 /* Multicast Cipher is not valid */ -#define REASON_CODE_UNICAST_CIPHER_NOT_VALID 19 /* Unicast Cipher is not valid */ -#define REASON_CODE_AKMP_NOT_VALID 20 /* AKMP is not valid */ -#define REASON_CODE_UNSUPPORTED_RSNE_VERSION 21 /* Unsupported RSNE version */ -#define REASON_CODE_INVALID_RSNE_CAPABILITIES 22 /* Invalid RSNE Capabilities */ -#define REASON_CODE_IEEE_802_1X_AUTH_FAILED 23 /* IEEE 802.1X Authentication failed */ -#define REASON_CODE_CIPHER_REJECT_SEC_POLICY 24 /* Cipher suite rejected because of the security policy */ -#define REASON_CODE_DISASSOC_UNSPECIFIED_QOS 32 /* Disassoc for unspecified, QoS-related reason */ -#define REASON_CODE_DISASSOC_LACK_OF_BANDWIDTH 33 /* Disassoc because QAP lacks sufficient bandwidth for this QSTA */ -#define REASON_CODE_DISASSOC_ACK_LOST_POOR_CHANNEL 34 /* Disassoc because of too many ACKs lost for AP transmissions and/or poor channel conditions */ -#define REASON_CODE_DISASSOC_TX_OUTSIDE_TXOP_LIMIT 35 /* Disassoc because QSTA is transmitting outside the limits of its TXOPs */ -#define REASON_CODE_PEER_WHILE_LEAVING 36 /* QSTA is leaving the QBSS or resetting */ -#define REASON_CODE_PEER_REFUSE_DLP 37 /* Peer does not want to use this mechanism */ -#define REASON_CODE_PEER_SETUP_REQUIRED 38 /* Frames received but a setup is reqired */ -#define REASON_CODE_PEER_TIME_OUT 39 /* Time out */ -#define REASON_CODE_PEER_CIPHER_UNSUPPORTED 45 /* Peer does not support the requested cipher suite */ - -/* 7.3.1.8 AID field */ -#define AID_FIELD_LEN 2 -#define AID_MASK BITS(0,13) -#define AID_MSB BITS(14,15) -#define AID_MIN_VALUE 1 -#define AID_MAX_VALUE 2007 - -/* 7.3.1.9 Status Code field */ -#define STATUS_CODE_FIELD_LEN 2 - -#define STATUS_CODE_RESERVED 0 /* Reserved - Used by TX Auth */ -#define STATUS_CODE_SUCCESSFUL 0 /* Successful */ -#define STATUS_CODE_UNSPECIFIED_FAILURE 1 /* Unspecified failure */ -#define STATUS_CODE_CAP_NOT_SUPPORTED 10 /* Cannot support all requested cap in the Cap Info field */ -#define STATUS_CODE_REASSOC_DENIED_WITHOUT_ASSOC 11 /* Reassoc denied due to inability to confirm that assoc exists */ -#define STATUS_CODE_ASSOC_DENIED_OUTSIDE_STANDARD 12 /* Assoc denied due to reason outside the scope of this std. */ -#define STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED 13 /* Responding STA does not support the specified auth algorithm */ -#define STATUS_CODE_AUTH_OUT_OF_SEQ 14 /* Rx an auth frame with auth transaction seq num out of expected seq */ -#define STATUS_CODE_AUTH_REJECTED_CHAL_FAIL 15 /* Auth rejected because of challenge failure */ -#define STATUS_CODE_AUTH_REJECTED_TIMEOUT 16 /* Auth rejected due to timeout waiting for next frame in sequence */ -#define STATUS_CODE_ASSOC_DENIED_AP_OVERLOAD 17 /* Assoc denied because AP is unable to handle additional assoc STAs */ -#define STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED 18 /* Assoc denied due to requesting STA not supporting all of basic rates */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_PREAMBLE 19 /* Assoc denied due to requesting STA not supporting short preamble */ -#define STATUS_CODE_ASSOC_DENIED_NO_PBCC 20 /* Assoc denied due to requesting STA not supporting PBCC */ -#define STATUS_CODE_ASSOC_DENIED_NO_CH_AGILITY 21 /* Assoc denied due to requesting STA not supporting channel agility */ -#define STATUS_CODE_ASSOC_REJECTED_NO_SPEC_MGT 22 /* Assoc rejected because Spectrum Mgt capability is required */ -#define STATUS_CODE_ASSOC_REJECTED_PWR_CAP 23 /* Assoc rejected because the info in Power Capability is unacceptable */ -#define STATUS_CODE_ASSOC_REJECTED_SUP_CHS 24 /* Assoc rejected because the info in Supported Channels is unacceptable */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25 /* Assoc denied due to requesting STA not supporting short slot time */ -#define STATUS_CODE_ASSOC_DENIED_NO_DSSS_OFDM 26 /* Assoc denied due to requesting STA not supporting DSSS-OFDM */ -#if CFG_SUPPORT_802_11W -#define STATUS_CODE_ASSOC_REJECTED_TEMPORARILY 30 /* IEEE 802.11w, Assoc denied due to the SA query */ -#define STATUS_CODE_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31 /* IEEE 802.11w, Assoc denied due to the MFP select policy */ -#endif -#define STATUS_CODE_UNSPECIFIED_QOS_FAILURE 32 /* Unspecified, QoS-related failure */ -#define STATUS_CODE_ASSOC_DENIED_BANDWIDTH 33 /* Assoc denied due to insufficient bandwidth to handle another QSTA */ -#define STATUS_CODE_ASSOC_DENIED_POOR_CHANNEL 34 /* Assoc denied due to excessive frame loss rates and/or poor channel conditions */ -#define STATUS_CODE_ASSOC_DENIED_NO_QOS_FACILITY 35 /* Assoc denied due to requesting STA not supporting QoS facility */ -#define STATUS_CODE_REQ_DECLINED 37 /* Request has been declined */ -#define STATUS_CODE_REQ_INVALID_PARAMETER_VALUE 38 /* Request has not been successful as one or more parameters have invalid values */ -#define STATUS_CODE_REQ_NOT_HONORED_TSPEC 39 /* TS not created because request cannot be honored. Suggested TSPEC provided. */ -#define STATUS_CODE_INVALID_INFO_ELEMENT 40 /* Invalid information element */ -#define STATUS_CODE_INVALID_GROUP_CIPHER 41 /* Invalid group cipher */ -#define STATUS_CODE_INVALID_PAIRWISE_CIPHER 42 /* Invalid pairwise cipher */ -#define STATUS_CODE_INVALID_AKMP 43 /* Invalid AKMP */ -#define STATUS_CODE_UNSUPPORTED_RSN_IE_VERSION 44 /* Unsupported RSN information element version */ -#define STATUS_CODE_INVALID_RSN_IE_CAP 45 /* Invalid RSN information element capabilities */ -#define STATUS_CODE_CIPHER_SUITE_REJECTED 46 /* Cipher suite rejected because of security policy */ -#define STATUS_CODE_REQ_NOT_HONORED_TS_DELAY 47 /* TS not created becasue request cannot be honored. Attempt to create a TS later. */ -#define STATUS_CODE_DIRECT_LINK_NOT_ALLOWED 48 /* Direct Link is not allowed in the BSS by policy */ -#define STATUS_CODE_DESTINATION_STA_NOT_PRESENT 49 /* Destination STA is not present within this QBSS */ -#define STATUS_CODE_DESTINATION_STA_NOT_QSTA 50 /* Destination STA is not a QSTA */ -#define STATUS_CODE_ASSOC_DENIED_LARGE_LIS_INTERVAL 51 /* Association denied because the ListenInterval is too large */ - -/* proprietary definition of reserved field of Status Code */ -#define STATUS_CODE_JOIN_FAILURE 0xFFF0 /* Join failure */ -#define STATUS_CODE_JOIN_TIMEOUT 0xFFF1 /* Join timeout */ -#define STATUS_CODE_AUTH_TIMEOUT 0xFFF2 /* Authentication timeout */ -#define STATUS_CODE_ASSOC_TIMEOUT 0xFFF3 /* (Re)Association timeout */ -#define STATUS_CODE_CCX_CCKM_REASSOC_FAILURE 0xFFF4 /* CCX CCKM reassociation failure */ - - -/* 7.3.1.10 Timestamp field */ -#define TIMESTAMP_FIELD_LEN 8 - -/* 7.3.1.11 Category of Action field */ -#define CATEGORY_SPEC_MGT 0 -#define CATEGORY_QOS_ACTION 1 /* QoS action */ -#define CATEGORY_DLS_ACTION 2 /* Direct Link Protocol (DLP) action */ -#define CATEGORY_BLOCK_ACK_ACTION 3 /* Block ack action */ -#define CATEGORY_PUBLIC_ACTION 4 /* Public action */ -#define CATEGORY_RM_ACTION 5 /* Radio measurement action */ -#define CATEGORY_HT_ACTION 7 -#if CFG_SUPPORT_802_11W -#define CATEGORY_SA_QUERT_ACTION 8 -#endif -#define CATEGORY_WNM_ACTION 10 /* 802.11v Wireless Network Management */ -#define CATEGORY_UNPROTECTED_WNM_ACTION 11 /* 802.11v Wireless Network Management */ -#define CATEGORY_WME_MGT_NOTIFICATION 17 /* WME management notification */ -#define CATEGORY_VENDOR_SPECIFIC_ACTION 127 - - -/* 7.3.1.14 Block Ack Parameter Set field */ -#define BA_PARAM_SET_ACK_POLICY_MASK BIT(1) -#define BA_PARAM_SET_ACK_POLICY_MASK_OFFSET 1 -#define BA_PARAM_SET_TID_MASK BITS(2,5) -#define BA_PARAM_SET_TID_MASK_OFFSET 2 -#define BA_PARAM_SET_BUFFER_SIZE_MASK BITS(6,15) -#define BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET 6 - -#define BA_PARAM_SET_ACK_POLICY_IMMEDIATE_BA 1 -#define BA_PARAM_SET_ACK_POLICY_DELAYED_BA 0 - - -//3 Management frame body components (II): Information Elements. -/* 7.3.2 Element IDs of information elements */ -#define ELEM_HDR_LEN 2 - -#define ELEM_ID_SSID 0 /* SSID */ -#define ELEM_ID_SUP_RATES 1 /* Supported rates */ -#define ELEM_ID_FH_PARAM_SET 2 /* FH parameter set */ -#define ELEM_ID_DS_PARAM_SET 3 /* DS parameter set */ -#define ELEM_ID_CF_PARAM_SET 4 /* CF parameter set */ -#define ELEM_ID_TIM 5 /* TIM */ -#define ELEM_ID_IBSS_PARAM_SET 6 /* IBSS parameter set */ -#define ELEM_ID_COUNTRY_INFO 7 /* Country information */ -#define ELEM_ID_HOPPING_PATTERN_PARAM 8 /* Hopping pattern parameters */ -#define ELEM_ID_HOPPING_PATTERN_TABLE 9 /* Hopping pattern table */ -#define ELEM_ID_REQUEST 10 /* Request */ -#define ELEM_ID_BSS_LOAD 11 /* BSS load */ -#define ELEM_ID_EDCA_PARAM_SET 12 /* EDCA parameter set */ -#define ELEM_ID_TSPEC 13 /* Traffic specification (TSPEC) */ -#define ELEM_ID_TCLAS 14 /* Traffic classification (TCLAS) */ -#define ELEM_ID_SCHEDULE 15 /* Schedule */ -#define ELEM_ID_CHALLENGE_TEXT 16 /* Challenge text */ - -#define ELEM_ID_PWR_CONSTRAINT 32 /* Power constraint */ -#define ELEM_ID_PWR_CAP 33 /* Power capability */ -#define ELEM_ID_TPC_REQ 34 /* TPC request */ -#define ELEM_ID_TPC_REPORT 35 /* TPC report */ -#define ELEM_ID_SUP_CHS 36 /* Supported channels */ -#define ELEM_ID_CH_SW_ANNOUNCEMENT 37 /* Channel switch announcement */ -#define ELEM_ID_MEASUREMENT_REQ 38 /* Measurement request */ -#define ELEM_ID_MEASUREMENT_REPORT 39 /* Measurement report */ -#define ELEM_ID_QUIET 40 /* Quiet */ -#define ELEM_ID_IBSS_DFS 41 /* IBSS DFS */ -#define ELEM_ID_ERP_INFO 42 /* ERP information */ -#define ELEM_ID_TS_DELAY 43 /* TS delay */ -#define ELEM_ID_TCLAS_PROCESSING 44 /* TCLAS processing */ -#define ELEM_ID_HT_CAP 45 /* HT Capabilities subelement */ -#define ELEM_ID_QOS_CAP 46 /* QoS capability */ -#define ELEM_ID_RSN 48 /* RSN IE */ -#define ELEM_ID_EXTENDED_SUP_RATES 50 /* Extended supported rates */ -#if CFG_SUPPORT_802_11W -#define ELEM_ID_TIMEOUT_INTERVAL 56 /* 802.11w SA Timeout interval */ -#endif -#define ELEM_ID_HT_OP 61 /* HT Operation */ -#define ELEM_ID_SCO 62 /* Secondary Channel Offset */ -#define ELEM_ID_RRM_ENABLED_CAP 70 /* Radio Resource Management Enabled Capabilities */ -#define ELEM_ID_20_40_BSS_COEXISTENCE 72 /* 20/40 BSS Coexistence */ -#define ELEM_ID_20_40_INTOLERANT_CHNL_REPORT 73 /* 20/40 BSS Intolerant Channel Report */ -#define ELEM_ID_OBSS_SCAN_PARAMS 74 /* Overlapping BSS Scan Parameters */ -#define ELEM_ID_EXTENDED_CAP 127 /* Extended capabilities */ - -#define ELEM_ID_VENDOR 221 /* Vendor specific IE */ -#define ELEM_ID_WPA ELEM_ID_VENDOR /* WPA IE */ -#define ELEM_ID_WMM ELEM_ID_VENDOR /* WMM IE */ -#define ELEM_ID_P2P ELEM_ID_VENDOR /* WiFi Direct */ -#define ELEM_ID_WFD ELEM_ID_VENDOR /* WiFi Direct */ -#define ELEM_ID_WSC ELEM_ID_VENDOR /* WSC IE */ - -#define ELEM_ID_RESERVED 255 /* Reserved */ - - -/* 7.3.2.1 SSID element */ -#define ELEM_MAX_LEN_SSID 32 - -/* 7.3.2.2 Supported Rates */ -#define ELEM_MAX_LEN_SUP_RATES 8 - -/* 7.3.2.4 DS Parameter Set */ -#define ELEM_MAX_LEN_DS_PARAMETER_SET 1 - -/* 7.3.2.5 CF Parameter Set */ -#define ELEM_CF_PARM_LEN 8 - -/* 7.3.2.6 TIM */ -#define ELEM_MIX_LEN_TIM 4 -#define ELEM_MAX_LEN_TIM 254 - -/* 7.3.2.7 IBSS Parameter Set element */ -#define ELEM_MAX_LEN_IBSS_PARAMETER_SET 2 - -/* 7.3.2.8 Challenge Text element */ -#define ELEM_MIN_LEN_CHALLENGE_TEXT 1 -#define ELEM_MAX_LEN_CHALLENGE_TEXT 253 - -/* 7.3.2.9 Country Information element */ -/* Country IE should contain at least 3-bytes country code string and one subband triplet. */ -#define ELEM_MIN_LEN_COUNTRY_INFO 6 - -#define ELEM_ID_COUNTRY_INFO_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_SUBBAND_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_REGULATORY_TRIPLET_LEN_FIXED 3 - - -/* 7.3.2.13 ERP Information element */ -#define ELEM_MAX_LEN_ERP 1 -/* -- bits in the ERP Information element */ -#define ERP_INFO_NON_ERP_PRESENT BIT(0) /* NonERP_Present bit */ -#define ERP_INFO_USE_PROTECTION BIT(1) /* Use_Protection bit */ -#define ERP_INFO_BARKER_PREAMBLE_MODE BIT(2) /* Barker_Preamble_Mode bit */ - - -/* 7.3.2.14 Extended Supported Rates */ -#define ELEM_MAX_LEN_EXTENDED_SUP_RATES 255 - -/* 7.3.2.21 Measurement Request element */ -#define ELEM_RM_TYPE_BASIC_REQ 0 -#define ELEM_RM_TYPE_CCA_REQ 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REQ 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REQ 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REQ 4 -#define ELEM_RM_TYPE_BEACON_REQ 5 -#define ELEM_RM_TYPE_FRAME_REQ 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REQ 7 -#define ELEM_RM_TYPE_LCI_REQ 8 -#define ELEM_RM_TYPE_TS_REQ 9 -#define ELEM_RM_TYPE_MEASURE_PAUSE_REQ 255 - -/* 7.3.2.22 Measurement Report element */ -#define ELEM_RM_TYPE_BASIC_REPORT 0 -#define ELEM_RM_TYPE_CCA_REPORT 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REPORT 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REPORT 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REPORT 4 -#define ELEM_RM_TYPE_BEACON_REPORT 5 -#define ELEM_RM_TYPE_FRAME_REPORT 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REPORT 7 -#define ELEM_RM_TYPE_LCI_REPORT 8 -#define ELEM_RM_TYPE_TS_REPORT 9 - - -/* 7.3.2.25 RSN information element */ -#define ELEM_MAX_LEN_WPA 24 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_RSN 38 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_WAPI 38 /* one pairwise, one AKM suite, one BKID */ -#define ELEM_MAX_LEN_WSC 200/* one pairwise, one AKM suite, one BKID */ - -#if CFG_SUPPORT_802_11W -#define ELEM_WPA_CAP_MFPR BIT(6) -#define ELEM_WPA_CAP_MFPC BIT(7) -#endif - -/* 7.3.2.27 Extended Capabilities information element */ -#define ELEM_EXT_CAP_20_40_COEXIST_SUPPORT BIT(0) -#define ELEM_EXT_CAP_PSMP_CAP BIT(4) -#define ELEM_EXT_CAP_SERVICE_INTERVAL_GRANULARITY BIT(5) -#define ELEM_EXT_CAP_SCHEDULE_PSMP BIT(6) - -#define ELEM_MAX_LEN_EXT_CAP (3 - ELEM_HDR_LEN) - -/* 7.3.2.30 TSPEC element */ -#define TS_INFO_TRAFFIC_TYPE_MASK BIT(0) //WMM: 0 (Asynchronous TS of low-duty cycles) -#define TS_INFO_TID_OFFSET 1 -#define TS_INFO_TID_MASK BITS(1,4) -#define TS_INFO_DIRECTION_OFFSET 5 -#define TS_INFO_DIRECTION_MASK BITS(5,6) -#define TS_INFO_ACCESS_POLICY_OFFSET 7 -#define TS_INFO_ACCESS_POLICY_MASK BITS(7,8) //WMM: Bit(7,8) = (1,0) = EDCA -#define TS_INFO_AGGREGATION_MASK BIT(9) //WMM: 0 -#define TS_INFO_APSD_MASK BIT(10) -#define TS_INFO_UP_OFFSET 11 -#define TS_INFO_UP_MASK BITS(11,13) -#define TS_INFO_ACK_POLICY_OFFSET 14 -#define TS_INFO_ACK_POLICY_MASK BITS(14,15) -#define TS_INFO_SCHEDULE_MASK 16 - -/* 7.3.2.56 HT capabilities element */ -#define ELEM_MAX_LEN_HT_CAP (28 - ELEM_HDR_LEN) /* sizeof(IE_HT_CAP_T)-2 */ - -/* 7.3.2.56.2 HT capabilities Info field */ -#define HT_CAP_INFO_LDPC_CAP BIT(0) -#define HT_CAP_INFO_SUP_CHNL_WIDTH BIT(1) -#define HT_CAP_INFO_SM_POWER_SAVE BITS(2,3) -#define HT_CAP_INFO_HT_GF BIT(4) -#define HT_CAP_INFO_SHORT_GI_20M BIT(5) -#define HT_CAP_INFO_SHORT_GI_40M BIT(6) -#define HT_CAP_INFO_TX_STBC BIT(7) -#define HT_CAP_INFO_RX_STBC BITS(8,9) -#define HT_CAP_INFO_HT_DELAYED_BA BIT(10) -#define HT_CAP_INFO_MAX_AMSDU_LEN BIT(11) -#define HT_CAP_INFO_DSSS_CCK_IN_40M BIT(12) -#define HT_CAP_INFO_40M_INTOLERANT BIT(14) -#define HT_CAP_INFO_LSIG_TXOP_SUPPORT BIT(15) - -#define HT_CAP_INFO_RX_STBC_NO_SUPPORTED 0 -#define HT_CAP_INFO_RX_STBC_1_SS BIT(8) -#define HT_CAP_INFO_RX_STBC_2_SS BIT(9) -#define HT_CAP_INFO_RX_STBC_3_SS HT_CAP_INFO_RX_STBC - -/* 7.3.2.56.3 A-MPDU Parameters field */ -#define AMPDU_PARAM_MAX_AMPDU_LEN_EXP BITS(0,1) -#define AMPDU_PARAM_MIN_START_SPACING BITS(2,4) - -#define AMPDU_PARAM_MAX_AMPDU_LEN_8K 0 -#define AMPDU_PARAM_MAX_AMPDU_LEN_16K BIT(0) -#define AMPDU_PARAM_MAX_AMPDU_LEN_32K BIT(1) -#define AMPDU_PARAM_MAX_AMPDU_LEN_64K BITS(0,1) - -#define AMPDU_PARAM_MSS_NO_RESTRICIT 0 -#define AMPDU_PARAM_MSS_1_4_US BIT(2) -#define AMPDU_PARAM_MSS_1_2_US BIT(3) -#define AMPDU_PARAM_MSS_1_US BITS(2,3) -#define AMPDU_PARAM_MSS_2_US BIT(4) -#define AMPDU_PARAM_MSS_4_US (BIT(4) | BIT(2)) -#define AMPDU_PARAM_MSS_8_US (BIT(4) | BIT(3)) -#define AMPDU_PARAM_MSS_16_US BITS(2,4) - -/* 7.3.2.56.4 Supported MCS Set field (TX rate: octects 12~15) */ -#define SUP_MCS_TX_SET_DEFINED BIT(0) -#define SUP_MCS_TX_RX_SET_NOT_EQUAL BIT(1) -#define SUP_MCS_TX_MAX_NUM_SS BITS(2,3) -#define SUP_MCS_TX_UNEQUAL_MODULATION BIT(4) - -#define SUP_MCS_TX_MAX_NUM_1_SS 0 -#define SUP_MCS_TX_MAX_NUM_2_SS BIT(2) -#define SUP_MCS_TX_MAX_NUM_3_SS BIT(3) -#define SUP_MCS_TX_MAX_NUM_4_SS BITS(2,3) - -#define SUP_MCS_RX_BITMASK_OCTET_NUM 10 -#define SUP_MCS_RX_DEFAULT_HIGHEST_RATE 0 /* Not specify */ - -/* 7.3.2.56.5 HT Extended Capabilities field */ -#define HT_EXT_CAP_PCO BIT(0) -#define HT_EXT_CAP_PCO_TRANSITION_TIME BITS(1,2) -#define HT_EXT_CAP_MCS_FEEDBACK BITS(8,9) -#define HT_EXT_CAP_HTC_SUPPORT BIT(10) -#define HT_EXT_CAP_RD_RESPONDER BIT(11) - -#define HT_EXT_CAP_PCO_TRANS_TIME_NONE 0 -#define HT_EXT_CAP_PCO_TRANS_TIME_400US BIT(1) -#define HT_EXT_CAP_PCO_TRANS_TIME_1_5MS BIT(2) -#define HT_EXT_CAP_PCO_TRANS_TIME_5MS BITS(1,2) - -#define HT_EXT_CAP_MCS_FEEDBACK_NO_FB 0 -#define HT_EXT_CAP_MCS_FEEDBACK_UNSOLICITED BIT(9) -#define HT_EXT_CAP_MCS_FEEDBACK_BOTH BITS(8,9) - -/* 7.3.2.56.6 Transmit Beamforming Capabilities field */ - -/* 7.3.2.56.7 Antenna Selection Capability field */ -#define ASEL_CAP_CAPABLE BIT(0) -#define ASEL_CAP_CSI_FB_BY_TX_ASEL_CAPABLE BIT(1) -#define ASEL_CAP_ANT_INDICES_FB_BY_TX_ASEL_CAPABLE BIT(2) -#define ASEL_CAP_EXPLICIT_CSI_FB_CAPABLE BIT(3) -#define ASEL_CAP_ANT_INDICES_CAPABLE BIT(4) -#define ASEL_CAP_RX_ASEL_CAPABLE BIT(5) -#define ASEL_CAP_TX_SOUNDING_CAPABLE BIT(6) - -/* 7.3.2.57 HT Operation element */ -#define ELEM_MAX_LEN_HT_OP (24 - ELEM_HDR_LEN) /* sizeof(IE_HT_OP_T)-2 */ - -#define HT_OP_INFO1_SCO BITS(0,1) -#define HT_OP_INFO1_STA_CHNL_WIDTH BIT(2) -#define HT_OP_INFO1_RIFS_MODE BIT(3) - -#define HT_OP_INFO2_HT_PROTECTION BITS(0,1) -#define HT_OP_INFO2_NON_GF_HT_STA_PRESENT BIT(2) -#define HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT BIT(4) - -#define HT_OP_INFO3_DUAL_BEACON BIT(6) -#define HT_OP_INFO3_DUAL_CTS_PROTECTION BIT(7) -#define HT_OP_INFO3_STBC_BEACON BIT(8) -#define HT_OP_INFO3_LSIG_TXOP_FULL_SUPPORT BIT(9) -#define HT_OP_INFO3_PCO_ACTIVE BIT(10) -#define HT_OP_INFO3_PCO_PHASE BIT(11) - -/* 7.3.2.59 OBSS Scan Parameter element */ -#define ELEM_MAX_LEN_OBSS_SCAN (16 - ELEM_HDR_LEN) - -/* 7.3.2.60 20/40 BSS Coexistence element */ -#define ELEM_MAX_LEN_20_40_BSS_COEXIST (3 - ELEM_HDR_LEN) - -#define BSS_COEXIST_INFO_REQ BIT(0) -#define BSS_COEXIST_40M_INTOLERANT BIT(1) -#define BSS_COEXIST_20M_REQ BIT(2) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ BIT(3) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_GRANT BIT(4) - - -//3 Management frame body components (III): 7.4 Action frame format details. -/* 7.4.1 Spectrum Measurement Action frame details */ -#define ACTION_MEASUREMENT_REQ 0 /* Spectrum measurement request */ -#define ACTION_MEASUREMENT_REPORT 1 /* Spectrum measurement report */ -#define ACTION_TPC_REQ 2 /* TPC request */ -#define ACTION_TPC_REPORT 3 /* TPC report */ -#define ACTION_CHNL_SWITCH 4 /* Channel Switch Announcement */ - -/* 7.4.2 QoS Action frame details */ -#define ACTION_ADDTS_REQ 0 /* ADDTS request */ -#define ACTION_ADDTS_RSP 1 /* ADDTS response */ -#define ACTION_DELTS 2 /* DELTS */ -#define ACTION_SCHEDULE 3 /* Schedule */ - -#define ACTION_ADDTS_REQ_FRAME_LEN (24+3+63) /* WMM TSPEC IE: 63 */ -#define ACTION_ADDTS_RSP_FRAME_LEN (24+4+63) /* WMM Status Code: 1; WMM TSPEC IE: 63*/ - -/* 7.4.3 DLS Action frame details */ -#define ACTION_DLS_REQ 0 /* DLS request */ -#define ACTION_DLS_RSP 1 /* DLS response */ -#define ACTION_DLS_TEARDOWN 2 /* DLS teardown */ - -/* 7.4.4 Block ack Action frame details */ -#define ACTION_ADDBA_REQ 0 /* ADDBA request */ -#define ACTION_ADDBA_RSP 1 /* ADDBA response */ -#define ACTION_DELBA 2 /* DELBA */ - -#define ACTION_ADDBA_REQ_FRAME_LEN (24+9) -#define ACTION_ADDBA_RSP_FRAME_LEN (24+9) - -#define ACTION_DELBA_INITIATOR_MASK BIT(11) -#define ACTION_DELBA_TID_MASK BITS(12,15) -#define ACTION_DELBA_TID_OFFSET 12 -#define ACTION_DELBA_FRAME_LEN (24+6) - -/* 7.4.6 Radio Measurement Action frame details */ -#define ACTION_RM_REQ 0 /* Radio measurement request */ -#define ACTION_RM_REPORT 1 /* Radio measurement report */ -#define ACTION_LM_REQ 2 /* Link measurement request */ -#define ACTION_LM_REPORT 3 /* Link measurement report */ -#define ACTION_NEIGHBOR_REPORT_REQ 4 /* Neighbor report request */ -#define ACTION_NEIGHBOR_REPORT_RSP 5 /* Neighbor report response */ - -/* 7.4.7 Public Action frame details */ -#define ACTION_PUBLIC_20_40_COEXIST 0 /* 20/40 BSS coexistence */ - -#if CFG_SUPPORT_802_11W -/* SA Query Action frame (IEEE 802.11w/D8.0, 7.4.9) */ -#define ACTION_SA_QUERY_REQUEST 0 -#define ACTION_SA_QUERY_RESPONSE 1 - -#define ACTION_SA_QUERY_TR_ID_LEN 2 - -/* Timeout Interval Type */ -#define ACTION_SA_TIMEOUT_REASSOC_DEADLINE 1 -#define ACTION_SA_TIMEOUT_KEY_LIFETIME 2 -#define ACTION_SA_TIMEOUT_ASSOC_COMEBACK 3 -#endif - -/* 7.4.10.1 HT action frame details */ -#define ACTION_HT_NOTIFY_CHANNEL_WIDTH 0 /* Notify Channel Width */ -#define ACTION_HT_SM_POWER_SAVE 1 /* SM Power Save */ -#define ACTION_HT_PSMP 2 /* PSMP */ -#define ACTION_HT_SET_PCO_PHASE 3 /* Set PCO Phase */ -#define ACTION_HT_CSI 4 /* CSI */ -#define ACTION_HT_NON_COMPRESSED_BEAMFORM 5 /* Non-compressed Beamforming */ -#define ACTION_HT_COMPRESSED_BEAMFORM 6 /* Compressed Beamforming */ -#define ACTION_HT_ANT_SEL_INDICES_FB 7 /* Antenna Selection Indices Feedback */ - -/* 802.11v Wireless Network Management */ -#define ACTION_WNM_TIMING_MEASUREMENT_REQUEST 27 - -#define ACTION_UNPROTECTED_WNM_TIM 0 -#define ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT 1 - -#define ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN 12 - -//3 /* --------------- WFA frame body fields --------------- */ -#define VENDOR_OUI_WFA { 0x00, 0x50, 0xF2 } -#define VENDOR_OUI_WFA_SPECIFIC { 0x50, 0x6F, 0x9A } -#define VENDOR_OUI_TYPE_WPA 1 -#define VENDOR_OUI_TYPE_WMM 2 -#define VENDOR_OUI_TYPE_WPS 4 -#define VENDOR_OUI_TYPE_P2P 9 -#define VENDOR_OUI_TYPE_WFD 10 - -#define VENDOR_OUI_TYPE_LEN 4 /* Length of OUI and Type */ - -/* VERSION(2 octets for WPA) / SUBTYPE(1 octet)-VERSION(1 octet) fields for WMM in WFA IE */ -#define VERSION_WPA 0x0001 /* Little Endian Format */ -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_INFO 0x0100 -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_PARAM 0x0101 - -/* SUBTYPE(1 octet) for WMM */ -#define VENDOR_OUI_SUBTYPE_WMM_INFO 0x00 /* WMM Spec version 1.1 */ -#define VENDOR_OUI_SUBTYPE_WMM_PARAM 0x01 -#define VENDOR_OUI_SUBTYPE_WMM_TSPEC 0x02 - -/* VERSION(1 octet) for WMM */ -#define VERSION_WMM 0x01 /* WMM Spec version 1.1 */ - -/* WMM-2.1.6 QoS Control Field */ -#define WMM_QC_UP_MASK BITS(0,2) -#define WMM_QC_EOSP BIT(4) -#define WMM_QC_ACK_POLICY_MASK BITS(5, 6) -#define WMM_QC_ACK_POLICY_OFFSET 5 -#define WMM_QC_ACK_POLICY_ACKNOWLEDGE 0 -#define WMM_QC_ACK_POLICY_NOT_ACKNOWLEDGE (1 << WMM_QC_ACK_POLICY_OFFSET) - - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE 6 - - -//3 Control frame body -/* 7.2.1.7 BlockAckReq */ -#define CTRL_BAR_BAR_CONTROL_OFFSET 16 -#define CTRL_BAR_BAR_INFORMATION_OFFSET 18 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -typedef struct _LLC_SNAP_HEADER_T { - UINT_8 ucDSAP; - UINT_8 ucSSAP; - UINT_8 ucControl; - UINT_8 aucCode[3]; - UINT_16 u2Type; -} __KAL_ATTRIB_PACKED__ LLC_SNAP_HEADER_T, *P_LLC_SNAP_HEADER_T; - -//3 MAC Header. -/* Ethernet Frame Header */ -typedef struct _ETH_FRAME_HEADER_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_HEADER_T, *P_ETH_FRAME_HEADER_T; - -/* Ethernet Frame Structure */ -typedef struct _ETH_FRAME_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; - UINT_8 aucData[1]; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_T, *P_ETH_FRAME_T; - - -/* IEEE 802.11 WLAN Frame Structure */ -/* WLAN MAC Header (without Address 4 and QoS Control fields) */ -typedef struct _WLAN_MAC_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_T, *P_WLAN_MAC_HEADER_T; - - -/* WLAN MAC Header (QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_QOS_T, *P_WLAN_MAC_HEADER_QOS_T; - - -/* WLAN MAC Header (HT Control fields included) */ -typedef struct _WLAN_MAC_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_HT_T, *P_WLAN_MAC_HEADER_HT_T; - - -/* WLAN MAC Header (Address 4 included) */ -typedef struct _WLAN_MAC_HEADER_A4_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_T, *P_WLAN_MAC_HEADER_A4_T; - - -/* WLAN MAC Header (Address 4 and QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_A4_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_QOS_T, *P_WLAN_MAC_HEADER_A4_QOS_T; - - -typedef struct _WLAN_MAC_HEADER_A4_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_HT_T, *P_WLAN_MAC_HEADER_A4_HT_T; - - -/* 7.2.3 WLAN MAC Header for Management Frame - MMPDU */ -typedef struct _WLAN_MAC_MGMT_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2Duration; - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_T, *P_WLAN_MAC_MGMT_HEADER_T; - - -/* WLAN MAC Header for Management Frame (HT Control fields included) */ -typedef struct _WLAN_MAC_MGMT_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_HT_T, *P_WLAN_MAC_MGMT_HEADER_HT_T; - -//3 WLAN CONTROL Frame -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -typedef struct _CTRL_PSPOLL_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2AID; /* AID */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_8 aucTA[MAC_ADDR_LEN]; /* TA */ -} __KAL_ATTRIB_PACKED__ CTRL_PSPOLL_FRAME_T, *P_CTRL_PSPOLL_FRAME_T; - - -/* BAR */ -typedef struct _CTRL_BAR_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* RA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* TA */ - UINT_16 u2BarControl; - UINT_8 aucBarInfo[2]; /* Variable size */ -} __KAL_ATTRIB_PACKED__ CTRL_BAR_FRAME_T, *P_CTRL_BAR_FRAME_T; - -//3 WLAN Management Frame. -/* 7.2.3.1 WLAN Management Frame - Beacon Frame */ -typedef struct _WLAN_BEACON_FRAME_T { - /* Beacon header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_T, *P_WLAN_BEACON_FRAME_T; - -typedef struct _WLAN_BEACON_FRAME_BODY_T { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_BODY_T, *P_WLAN_BEACON_FRAME_BODY_T; - - -/* 7.2.3.3 WLAN Management Frame - Disassociation Frame */ -typedef struct _WLAN_DISASSOC_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Disassociation frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DISASSOC_FRAME_T, *P_WLAN_DISASSOC_FRAME_T; - - -/* 7.2.3.4 WLAN Management Frame - Association Request frame */ -typedef struct _WLAN_ASSOC_REQ_FRAME_T { - /* Association Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_REQ_FRAME_T, *P_WLAN_ASSOC_REQ_FRAME_T; - - -/* 7.2.3.5 WLAN Management Frame - Association Response frame */ -typedef struct _WLAN_ASSOC_RSP_FRAME_T { - /* Association Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Response frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2StatusCode; /* Status code */ - UINT_16 u2AssocId; /* Association ID */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - supported rates, and etc. */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_RSP_FRAME_T, *P_WLAN_ASSOC_RSP_FRAME_T; - - -/* 7.2.3.6 WLAN Management Frame - Reassociation Request frame */ -typedef struct _WLAN_REASSOC_REQ_FRAME_T { - /* Reassociation Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Reassociation Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucCurrentAPAddr[MAC_ADDR_LEN]; /* Current AP address */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_REASSOC_REQ_FRAME_T, *P_WLAN_REASSOC_REQ_FRAME_T; - - -/* 7.2.3.7 WLAN Management Frame - Reassociation Response frame - (the same as Association Response frame) */ -typedef WLAN_ASSOC_RSP_FRAME_T WLAN_REASSOC_RSP_FRAME_T, *P_WLAN_REASSOC_RSP_FRAME_T; - -/* 7.2.3.9 WLAN Management Frame - Probe Response Frame */ -typedef WLAN_BEACON_FRAME_T WLAN_PROBE_RSP_FRAME_T, *P_WLAN_PROBE_RSP_FRAME_T; - -/* 7.2.3.10 WLAN Management Frame - Authentication Frame */ -typedef struct _WLAN_AUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Authentication frame body */ - UINT_16 u2AuthAlgNum; /* Authentication algorithm number */ - UINT_16 u2AuthTransSeqNo; /* Authentication transaction sequence number */ - UINT_16 u2StatusCode; /* Status code */ - UINT_8 aucInfoElem[1]; /* Various IEs for Fast BSS Transition */ -} __KAL_ATTRIB_PACKED__ WLAN_AUTH_FRAME_T, *P_WLAN_AUTH_FRAME_T; - - -/* 7.2.3.11 WLAN Management Frame - Deauthentication Frame */ -typedef struct _WLAN_DEAUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Deauthentication frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DEAUTH_FRAME_T, *P_WLAN_DEAUTH_FRAME_T; - - - -//3 Information Elements. -/* 7.3.2 Generic element format */ -typedef struct _IE_HDR_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucInfo[1]; -} __KAL_ATTRIB_PACKED__ IE_HDR_T, *P_IE_HDR_T; - -/* 7.3.2.1 SSID element */ -typedef struct _IE_SSID_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; -} __KAL_ATTRIB_PACKED__ IE_SSID_T, *P_IE_SSID_T; - -/* 7.3.2.2 Supported Rates element */ -typedef struct _IE_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSupportedRates[ELEM_MAX_LEN_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_SUPPORTED_RATE_T, *P_IE_SUPPORTED_RATE_T; - -/* 7.3.2.4 DS Parameter Set element */ -typedef struct _IE_DS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCurrChnl; -} __KAL_ATTRIB_PACKED__ IE_DS_PARAM_SET_T, *P_IE_DS_PARAM_SET_T; - - -/* 7.3.2.5 CF Parameter Set element */ -typedef struct _IE_CF_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCFPCount; - UINT_8 ucCFPPeriod; - UINT_16 u2CFPMaxDur; - UINT_16 u2DurRemaining; -} __KAL_ATTRIB_PACKED__ IE_CF_PARAM_SET_T, *P_IE_CF_PARAM_SET_T; - - -/* 7.3.2.6 TIM */ -typedef struct _IE_TIM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucDTIMCount; - UINT_8 ucDTIMPeriod; - UINT_8 ucBitmapControl; - UINT_8 aucPartialVirtualMap[1]; -} __KAL_ATTRIB_PACKED__ IE_TIM_T, *P_IE_TIM_T; - -/* 7.3.2.7 IBSS Parameter Set element */ -typedef struct _IE_IBSS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ATIMWindow; -} __KAL_ATTRIB_PACKED__ IE_IBSS_PARAM_SET_T, *P_IE_IBSS_PARAM_SET_T; - -/* 7.3.2.8 Challenge Text element */ -typedef struct _IE_CHALLENGE_TEXT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucChallengeText[ELEM_MAX_LEN_CHALLENGE_TEXT]; -} __KAL_ATTRIB_PACKED__ IE_CHALLENGE_TEXT_T, *P_IE_CHALLENGE_TEXT_T; - -/* 7.3.2.9 Country information element */ -#if CFG_SUPPORT_802_11D -/*! \brief COUNTRY_INFO_TRIPLET is defined for the COUNTRY_INFO_ELEM structure. */ -typedef struct _COUNTRY_INFO_TRIPLET_T { - UINT_8 ucParam1; /*!< If param1 >= 201, this triplet is referred to as - Regulatory Triplet in 802_11J. */ - UINT_8 ucParam2; - UINT_8 ucParam3; -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_TRIPLET_T, *P_COUNTRY_INFO_TRIPLET_T; - -typedef struct _COUNTRY_INFO_SUBBAND_TRIPLET_T { - UINT_8 ucFirstChnlNum; /*!< First Channel Number */ - UINT_8 ucNumOfChnl; /*!< Number of Channels */ - INT_8 cMaxTxPwrLv; /*!< Maximum Transmit Power Level */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_SUBBAND_TRIPLET_T, *P_COUNTRY_INFO_SUBBAND_TRIPLET_T; - -typedef struct _COUNTRY_INFO_REGULATORY_TRIPLET_T { - UINT_8 ucRegExtId; /*!< Regulatory Extension Identifier, should - be greater than or equal to 201 */ - UINT_8 ucRegClass; /*!< Regulatory Class */ - UINT_8 ucCoverageClass; /*!< Coverage Class, unsigned 1-octet value 0~31 - , 32~255 reserved */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_REGULATORY_TRIPLET_T, *P_COUNTRY_INFO_REGULATORY_TRIPLET_T; - -typedef struct _IE_COUNTRY_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCountryStr[3]; - COUNTRY_INFO_SUBBAND_TRIPLET_T arCountryStr[1]; -} __KAL_ATTRIB_PACKED__ IE_COUNTRY_T, *P_IE_COUNTRY_T; -#endif /* CFG_SUPPORT_802_11D */ - -/* 7.3.2.13 ERP element */ -typedef struct _IE_ERP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucERP; -} __KAL_ATTRIB_PACKED__ IE_ERP_T, *P_IE_ERP_T; - -/* 7.3.2.14 Extended Supported Rates element */ -typedef struct _IE_EXT_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucExtSupportedRates[ELEM_MAX_LEN_EXTENDED_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_EXT_SUPPORTED_RATE_T, *P_IE_EXT_SUPPORTED_RATE_T; - -/* 7.3.2.15 Power Constraint element */ -typedef struct _IE_POWER_CONSTRAINT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucLocalPowerConstraint; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CONSTRAINT_T, *P_IE_POWER_CONSTRAINT_T; - -/* 7.3.2.16 Power Capability element */ -typedef struct _IE_POWER_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cMinTxPowerCap; /* Unit: dBm */ - INT_8 cMaxTxPowerCap; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CAP_T, *P_IE_POWER_CAP_T; - -/* 7.3.2.17 TPC request element */ -typedef struct _IE_TPC_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; -} __KAL_ATTRIB_PACKED__ IE_TPC_REQ_T, *P_IE_TPC_REQ_T; - -/* 7.3.2.18 TPC report element */ -typedef struct _IE_TPC_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cTxPower; /* Unit: dBm */ - INT_8 cLinkMargin; /* Unit: dB */ -} __KAL_ATTRIB_PACKED__ IE_TPC_REPORT_T, *P_IE_TPC_REPORT_T; - -/* 7.3.2.20 Channel Switch Announcement element */ -typedef struct _IE_CHNL_SWITCH_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucSwitchMode; - UINT_8 ucNewChannel; - UINT_8 ucSwitchCount; -} __KAL_ATTRIB_PACKED__ IE_CHNL_SWITCH_T, *P_IE_CHNL_SWITCH_T; - -/* 7.3.2.21 Measurement Request element */ -typedef struct _IE_MEASUREMENT_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucRequestMode; - UINT_8 ucMeasurementType; - UINT_8 aucRequestFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REQ_T, *P_IE_MEASUREMENT_REQ_T; - -typedef struct _SM_BASIC_REQ_T { - UINT_8 ucChannel; - UINT_32 au4StartTime[2]; - UINT_16 u2Duration; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REQ_T, *P_SM_BASIC_REQ_T; - -/* SM_COMMON_REQ_T is not specified in Spec. Use it as common structure of SM */ -typedef SM_BASIC_REQ_T SM_REQ_COMMON_T, *P_SM_REQ_COMMON_T; -typedef SM_BASIC_REQ_T SM_CCA_REQ_T, *P_SM_CCA_REQ_T; -typedef SM_BASIC_REQ_T SM_RPI_HISTOGRAM_REQ_T, *P_SM_RPI_HISTOGRAM_REQ_T; - -typedef struct _RM_CHNL_LOAD_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REQ_T, *P_RM_CHNL_LOAD_REQ_T; - -typedef RM_CHNL_LOAD_REQ_T \ - RM_NOISE_HISTOGRAM_REQ_T, *P_RM_NOISE_HISTOGRAM_REQ_T; - -typedef struct _RM_BCN_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucMeasurementMode; - UINT_8 aucBssid[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_BCN_REQ_T, *P_RM_BCN_REQ_T; - -typedef struct _RM_FRAME_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucFrameReqType; - UINT_8 aucMacAddr[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_FRAME_REQ_T, *P_RM_FRAME_REQ_T; - -typedef struct _RM_STA_STATS_REQ_T { - UINT_8 aucPeerMacAddr[6]; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucGroupID; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_STA_STATS_REQ_T, *P_RM_STA_STATS_REQ_T; - -typedef struct _RM_LCI_REQ_T { - UINT_8 ucLocationSubject; - UINT_8 ucLatitudeResolution; - UINT_8 ucLongitudeResolution; - UINT_8 ucAltitudeResolution; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_LCI_REQ_T, *P_RM_LCI_REQ_T; - -typedef struct _RM_TS_MEASURE_REQ_T { - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucPeerStaAddr[6]; - UINT_8 ucTrafficID; - UINT_8 ucBin0Range; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_TS_MEASURE_REQ_T, *P_RM_TS_MEASURE_REQ_T; - -typedef struct _RM_MEASURE_PAUSE_REQ_T { - UINT_16 u2PauseTime; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_MEASURE_PAUSE_REQ_T, *P_RM_MEASURE_PAUSE_REQ_T; - -/* 7.3.2.22 Measurement Report element */ -typedef struct _IE_MEASUREMENT_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucReportMode; - UINT_8 ucMeasurementType; - UINT_8 aucReportFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REPORT_T, *P_IE_MEASUREMENT_REPORT_T; - -typedef struct _SM_BASIC_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucMap; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REPORT_T, *P_SM_BASIC_REPORT_T; - -typedef struct _SM_CCA_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucCcaBusyFraction; -} __KAL_ATTRIB_PACKED__ SM_CCA_REPORT_T, *P_SM_CCA_REPORT_T; - -typedef struct _SM_RPI_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 aucRPI[8]; -} __KAL_ATTRIB_PACKED__ SM_RPI_REPORT_T, *P_SM_RPI_REPORT_T; - -typedef struct _RM_CHNL_LOAD_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucChnlLoad; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REPORT_T, *P_RM_CHNL_LOAD_REPORT_T; - -typedef struct _RM_IPI_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucAntennaId; - INT_8 cANPI; - UINT_8 aucIPI[11]; -} __KAL_ATTRIB_PACKED__ RM_IPI_REPORT_T, *P_RM_IPI_REPORT_T; - -/* 7.3.2.23 Quiet element */ -typedef struct _IE_QUIET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCount; - UINT_8 ucPeriod; - UINT_16 u2Duration; - UINT_16 u2Offset; -} __KAL_ATTRIB_PACKED__ IE_QUIET_T, *P_IE_QUIET_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_EXT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCapabilities[1]; -} __KAL_ATTRIB_PACKED__ IE_EXT_CAP_T, *P_EXT_CAP_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_RRM_ENABLED_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCap[5]; -} __KAL_ATTRIB_PACKED__ IE_RRM_ENABLED_CAP_T, *P_IE_RRM_ENABLED_CAP_T; - -/* 7.3.2.56 HT Capabilities element */ -typedef struct _SUP_MCS_SET_FIELD { - UINT_8 aucRxMcsBitmask[SUP_MCS_RX_BITMASK_OCTET_NUM]; - UINT_16 u2RxHighestSupportedRate; - UINT_32 u4TxRateInfo; -} __KAL_ATTRIB_PACKED__ SUP_MCS_SET_FIELD, *P_SUP_MCS_SET_FIELD; - -typedef struct _IE_HT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2HtCapInfo; - UINT_8 ucAmpduParam; - SUP_MCS_SET_FIELD rSupMcsSet; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; -} __KAL_ATTRIB_PACKED__ IE_HT_CAP_T, *P_IE_HT_CAP_T; - -/* 7.3.2.57 HT Operation element */ -typedef struct _IE_HT_OP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucPrimaryChannel; - UINT_8 ucInfo1; - UINT_16 u2Info2; - UINT_16 u2Info3; - UINT_8 aucBasicMcsSet[16]; -} __KAL_ATTRIB_PACKED__ IE_HT_OP_T, *P_IE_HT_OP_T; - -/* 7.3.2.25 RSN Information element format */ -typedef struct _RSN_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ RSN_INFO_ELEM_T, *P_RSN_INFO_ELEM_T; - -/* 7.3.2.26 WPA Information element format */ -typedef struct _WPA_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UCHAR aucOui[3]; - UCHAR ucOuiType; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ WPA_INFO_ELEM_T, *P_WPA_INFO_ELEM_T; - -/* 7.3.2.58 20/40 BSS Intolerant Channel Report element */ -typedef struct _IE_INTOLERANT_CHNL_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucRegulatoryClass; - UINT_8 aucChannelList[1]; -} __KAL_ATTRIB_PACKED__ IE_INTOLERANT_CHNL_REPORT_T, *P_IE_INTOLERANT_CHNL_REPORT_T; - -/* 7.3.2.59 OBSS Scan Parameters element */ -typedef struct _IE_OBSS_SCAN_PARAM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ScanPassiveDwell; - UINT_16 u2ScanActiveDwell; - UINT_16 u2TriggerScanInterval; - UINT_16 u2ScanPassiveTotalPerChnl; - UINT_16 u2ScanActiveTotalPerChnl; - UINT_16 u2WidthTransDelayFactor; - UINT_16 u2ScanActivityThres; -} __KAL_ATTRIB_PACKED__ IE_OBSS_SCAN_PARAM_T, *P_IE_OBSS_SCAN_PARAM_T; - -/* 7.3.2.60 20/40 BSS Coexistence element */ -typedef struct _IE_20_40_COEXIST_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucData; -} __KAL_ATTRIB_PACKED__ IE_20_40_COEXIST_T, *P_IE_20_40_COEXIST_T; - - -//3 7.4 Action Frame. -/* 7.4 Action frame format */ -typedef struct _WLAN_ACTION_FRAME { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucActionDetails[1]; /* Action details */ -} __KAL_ATTRIB_PACKED__ WLAN_ACTION_FRAME, *P_WLAN_ACTION_FRAME; - -/* 7.4.1.1 Spectrum Measurement Request frame format */ -typedef struct _ACTION_SM_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements */ -} __KAL_ATTRIB_PACKED__ ACTION_SM_REQ_FRAME, *P_ACTION_SM_REQ_FRAME; - -/* 7.4.1.2 Spectrum Measurement Report frame format */ -typedef ACTION_SM_REQ_FRAME ACTION_SM_REPORT_FRAME, *P_ACTION_SM_REPORT_FRAME; - -/* 7.4.2.1 ADDTS Request frame format */ -typedef struct _ACTION_ADDTS_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_REQ_FRAME, *P_ACTION_ADDTS_REQ_FRAME; - - -/* 7.4.2.2 ADDTS Response frame format */ -typedef struct _ACTION_ADDTS_RSP_FRAME { - /* ADDTS Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Response frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucStatusCode; /* WMM Status Code is of one byte */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_RSP_FRAME, *P_ACTION_ADDTS_RSP_FRAME; - - -/* 7.4.2.3 DELTS frame format */ -typedef struct _ACTION_DELTS_FRAME { - /* DELTS MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* DELTS frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 aucTsInfo[3]; /* TS Info */ -} __KAL_ATTRIB_PACKED__ ACTION_DELTS_FRAME, *P_ACTION_DELTS_FRAME; - - -/* 7.4.4.1 ADDBA Request frame format */ -typedef struct _ACTION_ADDBA_REQ_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; - UINT_8 aucBAStartSeqCtrl[2]; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_FRAME_T, *P_ACTION_ADDBA_REQ_FRAME_T; - -typedef struct _ACTION_ADDBA_REQ_BODY_T{ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_BODY_T, *P_ACTION_ADDBA_REQ_BODY_T; - -/* 7.4.4.2 ADDBA Response frame format */ -typedef struct _ACTION_ADDBA_RSP_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucStatusCode[2]; - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_FRAME_T, *P_ACTION_ADDBA_RSP_FRAME_T; - -typedef struct _ACTION_ADDBA_RSP_BODY_T { - UINT_16 u2StatusCode; - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_BODY_T, *P_ACTION_ADDBA_RSP_BODY_T; - -/* 7.4.4.3 DELBA frame format */ -typedef struct _ACTION_DELBA_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_16 u2DelBaParameterSet; /* Bit 11 Initiator, Bits 12-15 TID */ - UINT_16 u2ReasonCode; /* 7.3.1.7 */ -} __KAL_ATTRIB_PACKED__ ACTION_DELBA_FRAME_T, *P_ACTION_DELBA_FRAME_T; - -/* 7.4.6.1 Radio Measurement Request frame format */ -typedef struct _ACTION_RM_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_16 u2Repetitions; /* Number of repetitions */ - UINT_8 aucInfoElem[1]; /* Measurement Request elements, such as - channel load request, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REQ_FRAME, *P_ACTION_RM_REQ_FRAME; - -/* 7.4.6.2 Radio Measurement Report frame format */ -typedef struct _ACTION_RM_REPORT_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Report frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Measurement Report elements, such as - channel load report, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REPORT_FRAME, *P_ACTION_RM_REPORT_FRAME; - -/* 7.4.7.1a 20/40 BSS Coexistence Management frame format */ -typedef struct _ACTION_20_40_COEXIST_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - IE_20_40_COEXIST_T rBssCoexist;/* 20/40 BSS coexistence element */ - IE_INTOLERANT_CHNL_REPORT_T rChnlReport;/* Intolerant channel report */ - -} __KAL_ATTRIB_PACKED__ ACTION_20_40_COEXIST_FRAME, *P_ACTION_20_40_COEXIST_FRAME; - - -#if CFG_SUPPORT_802_11W -/* 7.4.9 SA Query Management frame format */ -typedef struct _ACTION_SA_QUERY_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; /* Transaction id */ - -} __KAL_ATTRIB_PACKED__ ACTION_SA_QUERY_FRAME, *P_ACTION_SA_QUERY_FRAME; -#endif - -/* 7.4.10 Notify Channel Width Management frame format */ -typedef struct _ACTION_NOTIFY_CHNL_WIDTH_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucChannelWidth; /* Channel Width */ -} __KAL_ATTRIB_PACKED__ ACTION_NOTIFY_CHNL_WIDTH_FRAME, *P_ACTION_NOTIFY_CHNL_WIDTH_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement Request */ -typedef struct _ACTION_WNM_TIMING_MEAS_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Request Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucTrigger; /* Trigger */ -} __KAL_ATTRIB_PACKED__ ACTION_WNM_TIMING_MEAS_REQ_FRAME, *P_ACTION_WNM_TIMING_MEAS_REQ_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement */ -typedef struct _ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ - UINT_8 ucMaxToDErr; /* Maximum of ToD Error [10ns] */ - UINT_8 ucMaxToAErr; /* Maximum of ToA Error [10ns] */ -} __KAL_ATTRIB_PACKED__ ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME, *P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME; - -//3 Information Elements from WFA. -typedef struct _IE_WFA_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucOui[3]; - UINT_8 ucOuiType; - UINT_8 aucOuiSubTypeVersion[2]; - /*!< Please be noted. WPA defines a 16 bit field version - instead of one subtype field and one version field*/ -} __KAL_ATTRIB_PACKED__ IE_WFA_T, *P_IE_WFA_T; - -/* WAPI Information element format */ -typedef struct _WAPI_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_16 u2AuthKeyMgtSuiteCount; - UCHAR aucAuthKeyMgtSuite1[4]; -} __KAL_ATTRIB_PACKED__ WAPI_INFO_ELEM_T, *P_WAPI_INFO_ELEM_T; - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Convert the ECWmin(max) to CWmin(max) */ -#define ECW_TO_CW(_ECW) ((1 << (_ECW)) - 1) - -/* Convert the RCPI to dBm */ -#define RCPI_TO_dBm(_rcpi) \ - ((PARAM_RSSI)(((_rcpi) > RCPI_HIGH_BOUND ? RCPI_HIGH_BOUND : (_rcpi)) >> 1) - NDBM_LOW_BOUND_FOR_RCPI) - -/* Convert the dBm to RCPI */ -#define dBm_TO_RCPI(_dbm) \ - (RCPI)( ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) > RCPI_HIGH_BOUND) ? RCPI_HIGH_BOUND : \ - ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) < RCPI_LOW_BOUND ? RCPI_LOW_BOUND : \ - (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) ) ) - -/* Convert an unsigned char pointer to an information element pointer */ -#define IE_ID(fp) (((P_IE_HDR_T) fp)->ucId) -#define IE_LEN(fp) (((P_IE_HDR_T) fp)->ucLength) -#define IE_SIZE(fp) (ELEM_HDR_LEN + IE_LEN(fp)) - -#define SSID_IE(fp) ((P_IE_SSID_T) fp) - -#define SUP_RATES_IE(fp) ((P_IE_SUPPORTED_RATE_T) fp) - -#define DS_PARAM_IE(fp) ((P_IE_DS_PARAM_SET_T) fp) - -#define TIM_IE(fp) ((P_IE_TIM_T) fp) - -#define IBSS_PARAM_IE(fp) ((P_IE_IBSS_PARAM_SET_T) fp) - -#define ERP_INFO_IE(fp) ((P_IE_ERP_T) fp) - -#define EXT_SUP_RATES_IE(fp) ((P_IE_EXT_SUPPORTED_RATE_T) fp) - -#define WFA_IE(fp) ((P_IE_WFA_T) fp) - -#if CFG_SUPPORT_802_11D -#define COUNTRY_IE(fp) ((P_IE_COUNTRY_T) fp) -#endif - -#define EXT_CAP_IE(fp) ((P_EXT_CAP_T) fp) - -#define HT_CAP_IE(fp) ((P_IE_HT_CAP_T) fp) - -#define HT_OP_IE(fp) ((P_IE_HT_OP_T) fp) - -#define OBSS_SCAN_PARAM_IE(fp) ((P_IE_OBSS_SCAN_PARAM_T) fp) - -#define BSS_20_40_COEXIST_IE(fp) ((P_IE_20_40_COEXIST_T) fp) - -#define QUIET_IE(fp) ((P_IE_QUIET_T) fp) - - - -/* The macro to check if the MAC address is B/MCAST Address */ -#define IS_BMCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) ( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to check if the MAC address is UCAST Address */ -#define IS_UCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) !( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to copy the MAC address */ -#define COPY_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - kalMemCopy(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN) - -/* The macro to check if two MAC addresses are equal */ -#define EQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (!kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - -/* The macro to check if two MAC addresses are not equal */ -#define UNEQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - - -/* The macro to check whether two SSIDs are equal */ -#define EQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 <= ELEM_MAX_LEN_SSID) && \ - (ucSsidLen2 <= ELEM_MAX_LEN_SSID) && \ - ((ucSsidLen1) == (ucSsidLen2)) && \ - !kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to check whether two SSIDs are equal */ -#define UNEQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 > ELEM_MAX_LEN_SSID) || \ - (ucSsidLen2 > ELEM_MAX_LEN_SSID) || \ - ((ucSsidLen1) != (ucSsidLen2)) || \ - kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to copy the SSID, the length of pucDestSsid should have at least 32 bytes */ -#define COPY_SSID(pucDestSsid, ucDestSsidLen, pucSrcSsid, ucSrcSsidLen) \ - do { \ - ucDestSsidLen = ucSrcSsidLen; \ - if (ucSrcSsidLen) { \ - ASSERT(ucSrcSsidLen <= ELEM_MAX_LEN_SSID); \ - kalMemCopy(pucDestSsid, pucSrcSsid, ((ucSrcSsidLen > ELEM_MAX_LEN_SSID) ? ELEM_MAX_LEN_SSID : ucSrcSsidLen)); \ - } \ - } while (FALSE) - -/* The macro to copy the IE */ -#define COPY_IE(pucDestIE, pucSrcIE) \ - do { \ - kalMemCopy((PUINT_8)pucDestIE, \ - (PUINT_8)pucSrcIE,\ - IE_SIZE(pucSrcIE)); \ - } while (FALSE) - -#define IE_FOR_EACH(_pucIEsBuf, _u2IEsBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((((_u2Offset) + 2) <= (_u2IEsBufLen)) && (((_u2Offset) + IE_SIZE(_pucIEsBuf)) <= (_u2IEsBufLen))) ; \ - (_u2Offset) += IE_SIZE(_pucIEsBuf), (_pucIEsBuf) += IE_SIZE(_pucIEsBuf)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MAC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/mt6628_reg.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/mt6628_reg.h deleted file mode 100755 index c6cd53d45d73..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/mt6628_reg.h +++ /dev/null @@ -1,252 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/include/nic/mt6628_reg.h#2 $ -*/ - -/*! \file "mt6628_reg.h" - \brief The common register definition of mt5931 - - N/A -*/ - - - -/* -** $Log: mt6628_reg.h $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 07 13 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add initial version for MT6628 driver support. - * -*/ - -#ifndef _MT6628_REG_H -#define _MT6628_REG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -//1 MT6628 MCR Definition - -//2 Host Interface - -//4 CHIP ID Register -#define MCR_WCIR 0x0000 - -//4 HIF Low Power Control Register -#define MCR_WHLPCR 0x0004 - -//4 Control Status Register -#define MCR_WSDIOCSR 0x0008 -#define MCR_WSPICSR 0x0008 - -//4 HIF Control Register -#define MCR_WHCR 0x000C - -//4 HIF Interrupt Status Register -#define MCR_WHISR 0x0010 - -//4 HIF Interrupt Enable Register -#define MCR_WHIER 0x0014 - -//4 Abnormal Status Register -#define MCR_WASR 0x0018 - -//4 WLAN Software Interrupt Control Register -#define MCR_WSICR 0x001C - -//4 WLAN TX Status Register -#define MCR_WTSR0 0x0020 - -//4 WLAN TX Status Register -#define MCR_WTSR1 0x0024 - -//4 WLAN TX Data Register 0 -#define MCR_WTDR0 0x0028 - -//4 WLAN TX Data Register 1 -#define MCR_WTDR1 0x002C - -//4 WLAN RX Data Register 0 -#define MCR_WRDR0 0x0030 - -//4 WLAN RX Data Register 1 -#define MCR_WRDR1 0x0034 - -//4 Host to Device Send Mailbox 0 Register -#define MCR_H2DSM0R 0x0038 - -//4 Host to Device Send Mailbox 1 Register -#define MCR_H2DSM1R 0x003c - -//4 Device to Host Receive Mailbox 0 Register -#define MCR_D2HRM0R 0x0040 - -//4 Device to Host Receive Mailbox 1 Register -#define MCR_D2HRM1R 0x0044 - -//4 Device to Host Receive Mailbox 2 Register -#define MCR_D2HRM2R 0x0048 - -//4 WLAN RX Packet Length Register -#define MCR_WRPLR 0x0050 - - -//#if CFG_SDIO_INTR_ENHANCE -typedef struct _ENHANCE_MODE_DATA_STRUCT_T { - UINT_32 u4WHISR; - union { - struct { - UINT_8 ucTQ0Cnt; - UINT_8 ucTQ1Cnt; - UINT_8 ucTQ2Cnt; - UINT_8 ucTQ3Cnt; - UINT_8 ucTQ4Cnt; - UINT_8 ucTQ5Cnt; - UINT_16 u2Rsrv; - } u; - UINT_32 au4WTSR[2]; - } rTxInfo; - union { - struct { - UINT_16 u2NumValidRx0Len; - UINT_16 u2NumValidRx1Len; - UINT_16 au2Rx0Len[16]; - UINT_16 au2Rx1Len[16]; - } u; - UINT_32 au4RxStatusRaw[17]; - } rRxInfo; - UINT_32 u4RcvMailbox0; - UINT_32 u4RcvMailbox1; -} ENHANCE_MODE_DATA_STRUCT_T, *P_ENHANCE_MODE_DATA_STRUCT_T; -// #endif /* ENHANCE_MODE_DATA_STRUCT_T */ - - -//2 Definition in each register -//3 WCIR 0x0000 -#define WCIR_WLAN_READY BIT(21) -#define WCIR_POR_INDICATOR BIT(20) -#define WCIR_REVISION_ID BITS(16,19) -#define WCIR_CHIP_ID BITS(0,15) - -#define MTK_CHIP_REV 0x00006628 -#define MTK_CHIP_MP_REVERSION_ID 0x0 - -//3 WHLPCR 0x0004 -#define WHLPCR_FW_OWN_REQ_CLR BIT(9) -#define WHLPCR_FW_OWN_REQ_SET BIT(8) -#define WHLPCR_IS_DRIVER_OWN BIT(8) -#define WHLPCR_INT_EN_CLR BIT(1) -#define WHLPCR_INT_EN_SET BIT(0) - -//3 WSDIOCSR 0x0008 -#define WSDIOCSR_SDIO_RE_INIT_EN BIT(0) - -//3 WSPICSR 0x0008 -#define WCSR_SPI_MODE_SEL BITS(3,4) -#define WCSR_SPI_ENDIAN_BIG BIT(2) -#define WCSR_SPI_INT_OUT_MODE BIT(1) -#define WCSR_SPI_DATA_OUT_MODE BIT(0) - -//3 WHCR 0x000C -#define WHCR_RX_ENHANCE_MODE_EN BIT(16) -#define WHCR_MAX_HIF_RX_LEN_NUM BITS(4,7) -#define WHCR_W_MAILBOX_RD_CLR_EN BIT(2) -#define WHCR_W_INT_CLR_CTRL BIT(1) -#define WHCR_MCU_DBG_EN BIT(0) -#define WHCR_OFFSET_MAX_HIF_RX_LEN_NUM 4 - -//3 WHISR 0x0010 -#define WHISR_D2H_SW_INT BITS(8,31) -#define WHISR_D2H_SW_ASSERT_INFO_INT BIT(31) -#define WHISR_FW_OWN_BACK_INT BIT(4) -#define WHISR_ABNORMAL_INT BIT(3) -#define WHISR_RX1_DONE_INT BIT(2) -#define WHISR_RX0_DONE_INT BIT(1) -#define WHISR_TX_DONE_INT BIT(0) - - -//3 WHIER 0x0014 -#define WHIER_D2H_SW_INT BITS(8,31) -#define WHIER_FW_OWN_BACK_INT_EN BIT(4) -#define WHIER_ABNORMAL_INT_EN BIT(3) -#define WHIER_RX1_DONE_INT_EN BIT(2) -#define WHIER_RX0_DONE_INT_EN BIT(1) -#define WHIER_TX_DONE_INT_EN BIT(0) -#define WHIER_DEFAULT (WHIER_RX0_DONE_INT_EN | \ - WHIER_RX1_DONE_INT_EN | \ - WHIER_TX_DONE_INT_EN | \ - WHIER_ABNORMAL_INT_EN | \ - WHIER_D2H_SW_INT \ - ) - - -//3 WASR 0x0018 -#define WASR_FW_OWN_INVALID_ACCESS BIT(4) -#define WASR_RX1_UNDER_FLOW BIT(3) -#define WASR_RX0_UNDER_FLOW BIT(2) -#define WASR_TX1_OVER_FLOW BIT(1) -#define WASR_TX0_OVER_FLOW BIT(0) - - -//3 WSICR 0x001C -#define WSICR_H2D_SW_INT_SET BITS(16,31) - - -//3 WRPLR 0x0050 -#define WRPLR_RX1_PACKET_LENGTH BITS(16,31) -#define WRPLR_RX0_PACKET_LENGTH BITS(0,15) - - -#endif /* _MT6628_REG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic.h deleted file mode 100755 index b60f43db1fa5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic.h +++ /dev/null @@ -1,730 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic.h#1 $ -*/ - -/*! \file "nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - - - -/* -** $Log: nic.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-10-13 21:58:58 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-24 21:12:55 GMT mtk01104 -** Add function prototype nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:54 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:32 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_H -#define _NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -struct _REG_ENTRY_T { - UINT_32 u4Offset; - UINT_32 u4Value; -}; - -struct _TABLE_ENTRY_T { - P_REG_ENTRY_T pu4TablePtr; - UINT_16 u2Size; -}; - -/*! INT status to event map */ -typedef struct _INT_EVENT_MAP_T { - UINT_32 u4Int; - UINT_32 u4Event; -} INT_EVENT_MAP_T, *P_INT_EVENT_MAP_T; - - -enum ENUM_INT_EVENT_T { - INT_EVENT_ABNORMAL, - INT_EVENT_SW_INT, - INT_EVENT_TX, - INT_EVENT_RX, - INT_EVENT_NUM -}; - -typedef enum _ENUM_IE_UPD_METHOD_T { - IE_UPD_METHOD_UPDATE_RANDOM, - IE_UPD_METHOD_UPDATE_ALL, - IE_UPD_METHOD_DELETE_ALL, -} ENUM_IE_UPD_METHOD_T, *P_ENUM_IE_UPD_METHOD_T; - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in nic.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ); - -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ); - - -#if CFG_SDIO_INTR_ENHANCE -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ); -#endif - -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ); - -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(_HIF_SPI) -void -nicRestoreSpiDefMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data); - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data); - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ); - -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingStaMMPDU( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ); - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -/* Media State Change */ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -/* Utility function for channel number conversion */ -UINT_32 -nicChannelNum2Freq ( - IN UINT_32 u4ChannelNum - ); - -UINT_32 -nicFreq2ChannelNum ( - IN UINT_32 u4FreqInKHz - ); - -/* firmware command wrapper */ - /* NETWORK (WIFISYS) */ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - - /* BSS-INFO */ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* BSS-INFO Indication (PM) */ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* Beacon Template Update */ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ); - -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ); - -/*----------------------------------------------------------------------------*/ -/* Calibration Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ); - -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ); - -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ); - - -/*----------------------------------------------------------------------------*/ -/* PHY configuration */ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* MGMT and System Service Control */ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ); - -WLAN_STATUS -nicEnterCtiaMode ( - IN P_ADAPTER_T prAdapter, - BOOLEAN fgEnterCtia, - BOOLEAN fgEnCmdEvent - ); -/*----------------------------------------------------------------------------*/ -/* Scan Result Processing */ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ); - -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/* Workaround Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Fixed Rate Hacking */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 u2HtCapInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Write registers */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ); - -/*----------------------------------------------------------------------------*/ -/* Update auto rate */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ); - -/*----------------------------------------------------------------------------*/ -/* Enable/Disable Roaming */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ); - - -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* Link Quality Updating */ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ); - -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ); - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ); -#endif - -#endif /* _NIC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic_rx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic_rx.h deleted file mode 100755 index 49ca2991abab..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic_rx.h +++ /dev/null @@ -1,529 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_rx.h#1 $ -*/ - -/*! \file "nic_rx.h" - \brief The declaration of the nic rx functions - -*/ - - - -/* -** $Log: nic_rx.h $ - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Change prototype of API of adding P2P device to scan result. - * Additional IE buffer is saved. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 08 03 2010 cp.wu - * NULL - * newly added P2P API should be declared in header file. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * 2) firmware image length is now retrieved via NdisFileOpen - * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * 4) nicRxWaitResponse() revised - * * 5) another set of TQ counter default value is added for fw-download state - * * 6) Wi-Fi load address is now retrieved from registry too - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * and result is retrieved by get ATInfo instead - * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:49:09 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 14:02:37 GMT MTK02468 -** Added ucStaRecIdx in SW_RFB_T and HALF_SEQ_NO_COUNT definition (to replace HALF_SEQ_NO_CNOUT) -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-27 11:07:54 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 18:18:09 GMT mtk02752 -** modify nicRxAddScanResult() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-24 22:42:22 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-24 19:57:06 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 21:43:04 GMT mtk02752 -** correct ENUM_RX_PKT_DESTINATION_T definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 15:28:25 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packet are queued by RX reordering buffer/forwarding path -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 15:05:01 GMT mtk02752 -** add eTC for SW_RFB_T and structure RX_MAILBOX -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 21:16:57 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-13 16:59:30 GMT mtk02752 -** add handler for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-13 13:45:50 GMT mtk02752 -** add port param for nicRxEnhanceReadBuffer() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-11 10:12:31 GMT mtk02752 -** nicSDIOReadIntStatus() always read sizeof(ENHANCE_MODE_DATA_STRUCT_T) for int response, thus the number should be set to 0(:=16) instead of 10 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-29 19:53:32 GMT mtk01084 -** modify structure naming -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-23 16:08:23 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:01 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-20 12:23:33 GMT mtk01461 -** Add u4MaxEventBufferLen parameter to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-18 21:00:48 GMT mtk01426 -** Update SDIO_MAXIMUM_RX_STATUS value -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:36:15 GMT mtk01461 -** Remove unused define - SDIO_MAXIMUM_TX_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:17 GMT mtk01461 -** Add function for HIF_LOOPBACK_PRE_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:56:19 GMT mtk01426 -** Add to support CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:19:56 GMT mtk01426 -** Add nicRxWaitResponse function proto type -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:35 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_RX_H -#define _NIC_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SEQ_NO 4095 -#define MAX_SEQ_NO_COUNT 4096 -#define HALF_SEQ_NO_CNOUT 2048 - -#define HALF_SEQ_NO_COUNT 2048 - -#define MT6620_FIXED_WIN_SIZE 64 -#define CFG_RX_MAX_BA_ENTRY 4 -#define CFG_RX_MAX_BA_TID_NUM 8 - -#define RX_STATUS_FLAG_MORE_PACKET BIT(30) -#define RX_STATUS_CHKSUM_MASK BITS(0,10) - -#define RX_RFB_LEN_FIELD_LEN 4 -#define RX_HEADER_OFFSET 2 - - -#if defined(_HIF_SDIO) && defined (WINDOWS_DDK) -/*! On XP, maximum Tx+Rx Statue <= 64-4(HISR)*/ - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#else - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_RX_STATISTIC_COUNTER_T { - RX_MPDU_TOTAL_COUNT = 0, - RX_SIZE_ERR_DROP_COUNT, - - RX_DATA_INDICATION_COUNT, - RX_DATA_RETURNED_COUNT, - RX_DATA_RETAINED_COUNT, - - RX_DROP_TOTAL_COUNT, - RX_TYPE_ERR_DROP_COUNT, - RX_CLASS_ERR_DROP_COUNT, - RX_DST_NULL_DROP_COUNT, - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - RX_CSUM_TCP_FAILED_COUNT, - RX_CSUM_UDP_FAILED_COUNT, - RX_CSUM_IP_FAILED_COUNT, - RX_CSUM_TCP_SUCCESS_COUNT, - RX_CSUM_UDP_SUCCESS_COUNT, - RX_CSUM_IP_SUCCESS_COUNT, - RX_CSUM_UNKNOWN_L4_PKT_COUNT, - RX_CSUM_UNKNOWN_L3_PKT_COUNT, - RX_IP_V6_PKT_CCOUNT, -#endif - RX_STATISTIC_COUNTER_NUM -} ENUM_RX_STATISTIC_COUNTER_T; - -typedef enum _ENUM_RX_PKT_DESTINATION_T { - RX_PKT_DESTINATION_HOST, /* to OS */ - RX_PKT_DESTINATION_FORWARD, /* to TX queue for forward, AP mode */ - RX_PKT_DESTINATION_HOST_WITH_FORWARD, /* to both TX and OS, AP mode broadcast packet */ - RX_PKT_DESTINATION_NULL, /* packet to be freed */ - RX_PKT_DESTINATION_NUM -} ENUM_RX_PKT_DESTINATION_T; - -struct _SW_RFB_T { - QUE_ENTRY_T rQueEntry; - PVOID pvPacket; /*!< ptr to rx Packet Descriptor */ - PUINT_8 pucRecvBuff; /*!< ptr to receive data buffer */ - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4HifRxHdrFlag; - PVOID pvHeader; - UINT_16 u2PacketLen; - UINT_16 u2HeaderLen; - UINT_16 u2SSN; - UINT_8 ucTid; - UINT_8 ucWlanIdx; - UINT_8 ucPacketType; - UINT_8 ucStaRecIdx; - - ENUM_CSUM_RESULT_T aeCSUM[CSUM_TYPE_NUM]; - ENUM_RX_PKT_DESTINATION_T eDst; - ENUM_TRAFFIC_CLASS_INDEX_T eTC; /* only valid when eDst == FORWARD */ -}; - -/*! RX configuration type structure */ -typedef struct _RX_CTRL_T { - UINT_32 u4RxCachedSize; - PUINT_8 pucRxCached; - QUE_T rFreeSwRfbList; - QUE_T rReceivedRfbList; - QUE_T rIndicatedRfbList; - -#if CFG_SDIO_RX_AGG - PUINT_8 pucRxCoalescingBufPtr; -#endif - - PVOID apvIndPacket[CFG_RX_MAX_PKT_NUM]; - PVOID apvRetainedPacket[CFG_RX_MAX_PKT_NUM]; - - UINT_8 ucNumIndPacket; - UINT_8 ucNumRetainedPacket; - UINT_64 au8Statistics[RX_STATISTIC_COUNTER_NUM]; /*!< RX Counters */ - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalRxAccessNum; - UINT_32 u4TotalRxPacketNum; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - UINT_32 u4QueuedCnt; - UINT_32 u4DequeuedCnt; -#endif - -#if CFG_RX_PKTS_DUMP - UINT_32 u4RxPktsDumpTypeMask; -#endif - -} RX_CTRL_T, *P_RX_CTRL_T; - -typedef struct _RX_MAILBOX_T { - UINT_32 u4RxMailbox[2]; /* for Device-to-Host Mailbox */ -} RX_MAILBOX_T, *P_RX_MAILBOX_T; - -typedef WLAN_STATUS (*PROCESS_RX_MGT_FUNCTION)(P_ADAPTER_T, P_SW_RFB_T); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RX_INC_CNT(prRxCtrl, eCounter) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]++;} - -#define RX_ADD_CNT(prRxCtrl, eCounter, u8Amount) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter] += (UINT_64)u8Amount;} - -#define RX_GET_CNT(prRxCtrl, eCounter) \ - (((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]) - -#define RX_RESET_ALL_CNTS(prRxCtrl) \ - {kalMemZero(&prRxCtrl->au8Statistics[0], sizeof(prRxCtrl->au8Statistics));} - -#define RX_STATUS_TEST_MORE_FLAG(flag) \ - ((BOOL)((flag & RX_STATUS_FLAG_MORE_PACKET) ? TRUE : FALSE)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(MT5931) -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ); - -#if !CFG_SDIO_INTR_ENHANCE -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#else -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - -#if CFG_SDIO_RX_AGG -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus - ); - -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ); - -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -#endif /* _NIC_RX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic_tx.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic_tx.h deleted file mode 100755 index 674a1e3ca729..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/nic_tx.h +++ /dev/null @@ -1,695 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_tx.h#1 $ -*/ - -/*! \file nic_tx.h - \brief Functions that provide TX operation in NIC's point of view. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. - -*/ - - - -/* -** $Log: nic_tx.h $ - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 11 16 2010 yarco.yang - * [WCXRP00000177] [MT5931 F/W] Performance tuning for 1st connection - * Update TX buffer count - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 07 26 2010 cp.wu - * - * change TC4 initial value from 2 to 4. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Redistributed the initial TC resources for normal operation - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * 4) nicRxWaitResponse() revised - * * * 5) another set of TQ counter default value is added for fw-download state - * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * and result is retrieved by get ATInfo instead - * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:53:28 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-27 11:08:00 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-24 19:56:49 GMT mtk02752 -** remove redundant eTC -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 22:01:08 GMT mtk02468 -** Added MSDU_INFO fields for composing HIF TX header -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:51 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:35:05 GMT mtk02752 -** + nicTxMsduInfoList() for sending MsduInfoList -** + NIC_TX_BUFF_COUNT_TC[0~5] -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-17 11:07:00 GMT mtk02752 -** add nicTxAdjustTcq() API -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 22:28:30 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 21:44:50 GMT mtk02752 -** + nicTxReturnMsduInfo() -** + nicTxFillMsduInfo() -** + rFreeMsduInfoList field in TX_CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-16 18:00:43 GMT mtk02752 -** use P_PACKET_INFO_T for prPacket to avoid inventing another new structure for packet -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-16 15:28:49 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packets are queued by per STA/AC queue -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-16 10:52:01 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-14 23:39:24 GMT mtk02752 -** interface structure redefine -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-13 21:17:03 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-29 19:53:10 GMT mtk01084 -** remove strange code by Frog -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:04 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-02 13:53:03 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:36:50 GMT mtk01461 -** Add declaration of nicTxReleaseResource() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:58:39 GMT mtk01461 -** Move CMD_INFO_T related define and function to cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:53 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:33:27 GMT mtk01461 -** Define constants for TX PATH and add nicTxPollingResource -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:32 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_TX_H -#define _NIC_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NIC_TX_RESOURCE_POLLING_TIMEOUT 256 -#define NIC_TX_RESOURCE_POLLING_DELAY_MSEC 50 - -/* Maximum buffer count for individual HIF TCQ */ - -#if defined(MT6620) -#if CFG_SLT_SUPPORT - /* 20101215 mtk01725 Redistributed the initial TC resources for SLT operation */ - #define NIC_TX_BUFF_COUNT_TC0 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 16 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 0 // First connection: 0 -#else - /* 20100302 mtk02468 Redistributed the initial TC resources for normal operation */ - #define NIC_TX_BUFF_COUNT_TC0 6 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 8 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 2 // First connection: 0 -#endif -#elif defined(MT5931) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 14 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 -#elif defined(MT6628) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 20 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 - -#endif - -#define NIC_TX_BUFF_SUM (NIC_TX_BUFF_COUNT_TC0 + \ - NIC_TX_BUFF_COUNT_TC1 + \ - NIC_TX_BUFF_COUNT_TC2 + \ - NIC_TX_BUFF_COUNT_TC3 + \ - NIC_TX_BUFF_COUNT_TC4 + \ - NIC_TX_BUFF_COUNT_TC5) -#if CFG_ENABLE_FW_DOWNLOAD - - #define NIC_TX_INIT_BUFF_COUNT_TC0 8 - #define NIC_TX_INIT_BUFF_COUNT_TC1 0 - #define NIC_TX_INIT_BUFF_COUNT_TC2 0 - #define NIC_TX_INIT_BUFF_COUNT_TC3 0 - #define NIC_TX_INIT_BUFF_COUNT_TC4 0 - #define NIC_TX_INIT_BUFF_COUNT_TC5 0 - - #define NIC_TX_INIT_BUFF_SUM (NIC_TX_INIT_BUFF_COUNT_TC0 + \ - NIC_TX_INIT_BUFF_COUNT_TC1 + \ - NIC_TX_INIT_BUFF_COUNT_TC2 + \ - NIC_TX_INIT_BUFF_COUNT_TC3 + \ - NIC_TX_INIT_BUFF_COUNT_TC4 + \ - NIC_TX_INIT_BUFF_COUNT_TC5) - -#endif - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE -#define NIC_TX_TIME_THRESHOLD 100 //in unit of ms -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -//3 /* Session for TX QUEUES */ -/* The definition in this ENUM is used to categorize packet's Traffic Class according - * to the their TID(User Priority). - * In order to achieve QoS goal, a particular TC should not block the process of - * another packet with different TC. - * In current design we will have 5 categories(TCs) of SW resource. - */ -typedef enum _ENUM_TRAFFIC_CLASS_INDEX_T { - TC0_INDEX = 0, /* HIF TX0: AC0 packets */ - TC1_INDEX, /* HIF TX0: AC1 packets & non-QoS packets */ - TC2_INDEX, /* HIF TX0: AC2 packets */ - TC3_INDEX, /* HIF TX0: AC3 packets */ - TC4_INDEX, /* HIF TX1: Command packets or 802.1x packets */ - TC5_INDEX, /* HIF TX0: BMCAST packets */ - TC_NUM /* Maximum number of Traffic Classes. */ -} ENUM_TRAFFIC_CLASS_INDEX_T; - -typedef enum _ENUM_TX_STATISTIC_COUNTER_T { - TX_MPDU_TOTAL_COUNT = 0, - TX_INACTIVE_BSS_DROP, - TX_INACTIVE_STA_DROP, - TX_FORWARD_OVERFLOW_DROP, - TX_AP_BORADCAST_DROP, - TX_STATISTIC_COUNTER_NUM -} ENUM_TX_STATISTIC_COUNTER_T; - - -typedef struct _TX_TCQ_STATUS_T { - UINT_8 aucFreeBufferCount[TC_NUM]; - UINT_8 aucMaxNumOfBuffer[TC_NUM]; -} TX_TCQ_STATUS_T, *P_TX_TCQ_STATUS_T; - -typedef struct _TX_TCQ_ADJUST_T { - INT_8 acVariation[TC_NUM]; -} TX_TCQ_ADJUST_T, *P_TX_TCQ_ADJUST_T; - -typedef struct _TX_CTRL_T { - UINT_32 u4TxCachedSize; - PUINT_8 pucTxCached; - -/* Elements below is classified according to TC (Traffic Class) value. */ - - TX_TCQ_STATUS_T rTc; - - PUINT_8 pucTxCoalescingBufPtr; - - QUE_T rFreeMsduInfoList; - - /* Management Frame Tracking */ - /* number of management frames to be sent */ - INT_32 i4TxMgmtPendingNum; - - /* to tracking management frames need TX done callback */ - QUE_T rTxMgmtTxingQueue; - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalTxAccessNum; - UINT_32 u4TotalTxPacketNum; -#endif - UINT_32 au4Statistics[TX_STATISTIC_COUNTER_NUM]; - - /* Number to track forwarding frames */ - INT_32 i4PendingFwdFrameCount; - -} TX_CTRL_T, *P_TX_CTRL_T; - -typedef enum _ENUM_TX_PACKET_SRC_T { - TX_PACKET_OS, - TX_PACKET_OS_OID, - TX_PACKET_FORWARDING, - TX_PACKET_MGMT, - TX_PACKET_NUM -} ENUM_TX_PACKET_SRC_T; - -typedef enum _ENUM_HIF_TX_PACKET_TYPE_T { - HIF_TX_PACKET_TYPE_DATA = 0, - HIF_TX_PACKET_TYPE_COMMAND, - HIF_TX_PACKET_TYPE_HIF_LB, - HIF_TX_PACKET_TYPE_MGMT -} ENUM_HIF_TX_PACKET_TYPE_T, *P_ENUM_HIF_TX_PACKET_TYPE_T; - -typedef enum _ENUM_TX_RESULT_CODE_T { - TX_RESULT_SUCCESS = 0, - TX_RESULT_LIFE_TIMEOUT, - TX_RESULT_RTS_ERROR, - TX_RESULT_MPDU_ERROR, - TX_RESULT_AGING_TIMEOUT, - TX_RESULT_FLUSHED, - TX_RESULT_DROPPED_IN_DRIVER = 32, - TX_RESULT_NUM -} ENUM_TX_RESULT_CODE_T, *P_ENUM_TX_RESULT_CODE_T; - -/* TX Call Back Function */ -typedef WLAN_STATUS (*PFN_TX_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE -typedef struct _PKT_PROFILE_T { - BOOLEAN fgIsValid; -#if CFG_PRINT_RTP_PROFILE - BOOLEAN fgIsPrinted; - UINT_16 u2IpSn; - UINT_16 u2RtpSn; - UINT_8 ucTcxFreeCount; -#endif - OS_SYSTIME rHardXmitArrivalTimestamp; - OS_SYSTIME rEnqueueTimestamp; - OS_SYSTIME rDequeueTimestamp; - OS_SYSTIME rHifTxDoneTimestamp; -}PKT_PROFILE_T, *P_PKT_PROFILE_T; -#endif - -/* TX transactions could be divided into 4 kinds: - * - * 1) 802.1X / Bluetooth-over-Wi-Fi Security Frames - * [CMD_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - * - * 2) MMPDU - * [CMD_INFO_T] - [prPacket] - [MSDU_INFO_T] - [prPacket] - direct buffer for frame body - * - * 3) Command Packets - * [CMD_INFO_T] - [pucInfoBuffer] - direct buffer for content of command packet - * - * 4) Normal data frame - * [MSDU_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - */ - - -/* PS_FORWARDING_TYPE_NON_PS means that the receiving STA is in Active Mode -* from the perspective of host driver (maybe not synchronized with FW --> SN is needed) -*/ - -struct _MSDU_INFO_T { - QUE_ENTRY_T rQueEntry; - P_NATIVE_PACKET prPacket; - - ENUM_TX_PACKET_SRC_T eSrc; /* specify OS/FORWARD packet */ - UINT_8 ucUserPriority; - - /* For composing HIF TX header */ - UINT_8 ucTC; /* Traffic Class: 0~4 (HIF TX0), 5 (HIF TX1) */ - UINT_8 ucPacketType; /* 0: Data, 1: Command, 2: HIF Loopback 3: Management Frame */ - UINT_8 ucStaRecIndex; - UINT_8 ucNetworkType; /* See ENUM_NETWORK_TYPE_T */ - UINT_8 ucFormatID; /* 0: MAUI, Linux, Windows NDIS 5.1 */ - BOOLEAN fgIs802_1x; /* TRUE: 802.1x frame */ - BOOLEAN fgIs802_11; /* TRUE: 802.11 header is present */ - UINT_16 u2PalLLH; /* PAL Logical Link Header (for BOW network) */ - UINT_16 u2AclSN; /* ACL Sequence Number (for BOW network) */ - UINT_8 ucPsForwardingType; /* See ENUM_PS_FORWARDING_TYPE_T */ - UINT_8 ucPsSessionID; /* PS Session ID specified by the FW for the STA */ - BOOLEAN fgIsBurstEnd; /* TRUE means this is the last packet of the burst for (STA, TID) */ - BOOLEAN fgIsBIP; /* Management Frame Protection */ - BOOLEAN fgIsBasicRate; /* Force Basic Rate Transmission */ - - /* flattened from PACKET_INFO_T */ - UINT_8 ucMacHeaderLength; - UINT_8 ucLlcLength; /* w/o EtherType */ - UINT_16 u2FrameLength; - UINT_8 aucEthDestAddr[MAC_ADDR_LEN]; /* Ethernet Destination Address */ - - /* for TX done tracking */ - UINT_8 ucTxSeqNum; - PFN_TX_DONE_HANDLER pfTxDoneHandler; - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - PKT_PROFILE_T rPktProfile; -#endif -}; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define TX_INC_CNT(prTxCtrl, eCounter) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]++;} - -#define TX_ADD_CNT(prTxCtrl, eCounter, u8Amount) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter] += (UINT_32)u8Amount;} - -#define TX_GET_CNT(prTxCtrl, eCounter) \ - (((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]) - -#define TX_RESET_ALL_CNTS(prTxCtrl) \ - {kalMemZero(&prTxCtrl->au4Statistics[0], sizeof(prTxCtrl->au4Statistics));} - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE -#define PRINT_PKT_PROFILE(_pkt_profile, _note) \ - { \ - if(!(_pkt_profile)->fgIsPrinted) { \ - DBGLOG(TX, TRACE, ("X[%lu] E[%lu] D[%lu] HD[%lu] B[%d] RTP[%d] %s\n", \ - (UINT_32)((_pkt_profile)->rHardXmitArrivalTimestamp), \ - (UINT_32)((_pkt_profile)->rEnqueueTimestamp), \ - (UINT_32)((_pkt_profile)->rDequeueTimestamp), \ - (UINT_32)((_pkt_profile)->rHifTxDoneTimestamp), \ - (UINT_8)((_pkt_profile)->ucTcxFreeCount), \ - (UINT_16)((_pkt_profile)->u2RtpSn), \ - (_note))); \ - (_pkt_profile)->fgIsPrinted = TRUE; \ - } \ - } - -#define CHK_PROFILES_DELTA(_pkt1, _pkt2, _delta) \ - (CHECK_FOR_TIMEOUT((_pkt1)->rHardXmitArrivalTimestamp, (_pkt2)->rHardXmitArrivalTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt1)->rEnqueueTimestamp, (_pkt2)->rEnqueueTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt1)->rDequeueTimestamp, (_pkt2)->rDequeueTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt1)->rHifTxDoneTimestamp, (_pkt2)->rHifTxDoneTimestamp, (_delta))) - -#define CHK_PROFILE_DELTA(_pkt, _delta) \ - (CHECK_FOR_TIMEOUT((_pkt)->rEnqueueTimestamp, (_pkt)->rHardXmitArrivalTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt)->rDequeueTimestamp, (_pkt)->rEnqueueTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt)->rHifTxDoneTimestamp, (_pkt)->rDequeueTimestamp, (_delta))) -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ); - -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ); - -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessTxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prNdisPacket - ); - -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_ENABLE_FW_DOWNLOAD -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_TX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p.h deleted file mode 100755 index 30bae79019e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p.h +++ /dev/null @@ -1,195 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p.h#3 $ -*/ - - - -/* -** $Log: p2p.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add parameter to control: - * 1) auto group owner - * 2) P2P-PS parameter (CTWindow, NoA descriptors) - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * correct WPS Device Password ID definition. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * -*/ - -#ifndef _P2P_H -#define _P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// refer to 'Config Methods' in WPS -#define WPS_CONFIG_USBA 0x0001 -#define WPS_CONFIG_ETHERNET 0x0002 -#define WPS_CONFIG_LABEL 0x0004 -#define WPS_CONFIG_DISPLAY 0x0008 -#define WPS_CONFIG_EXT_NFC 0x0010 -#define WPS_CONFIG_INT_NFC 0x0020 -#define WPS_CONFIG_NFC 0x0040 -#define WPS_CONFIG_PBC 0x0080 -#define WPS_CONFIG_KEYPAD 0x0100 - -// refer to 'Device Password ID' in WPS -#define WPS_DEV_PASSWORD_ID_PIN 0x0000 -#define WPS_DEV_PASSWORD_ID_USER 0x0001 -#define WPS_DEV_PASSWORD_ID_MACHINE 0x0002 -#define WPS_DEV_PASSWORD_ID_REKEY 0x0003 -#define WPS_DEV_PASSWORD_ID_PUSHBUTTON 0x0004 -#define WPS_DEV_PASSWORD_ID_REGISTRAR 0x0005 - - -#define P2P_DEVICE_TYPE_NUM 2 -#define P2P_DEVICE_NAME_LENGTH 32 -#define P2P_NETWORK_NUM 8 -#define P2P_MEMBER_NUM 8 - -#define P2P_WILDCARD_SSID "DIRECT-" - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -struct _P2P_INFO_T { - UINT_32 u4DeviceNum; - EVENT_P2P_DEV_DISCOVER_RESULT_T arP2pDiscoverResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 pucCurrIePtr; - UINT_8 aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]; /* A common pool for IE of all scan results. */ -}; - -typedef enum { - ENUM_P2P_PEER_GROUP, - ENUM_P2P_PEER_DEVICE, - ENUM_P2P_PEER_NUM -} ENUM_P2P_PEER_TYPE, *P_ENUM_P2P_PEER_TYPE; - -typedef struct _P2P_DEVICE_INFO { - UINT_8 aucDevAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 aucIfAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDevCapabilityBitmap; - INT_32 i4ConfigMethod; - UINT_8 aucPrimaryDeviceType[8]; - UINT_8 aucSecondaryDeviceType[8]; - UINT_8 aucDeviceName[P2P_DEVICE_NAME_LENGTH]; -} P2P_DEVICE_INFO, *P_P2P_DEVICE_INFO; - -typedef struct _P2P_GROUP_INFO { - PARAM_SSID_T rGroupID; - P2P_DEVICE_INFO rGroupOwnerInfo; - UINT_8 ucMemberNum; - P2P_DEVICE_INFO arMemberInfo[P2P_MEMBER_NUM]; -} P2P_GROUP_INFO, *P_P2P_GROUP_INFO; - -typedef struct _P2P_NETWORK_INFO { - ENUM_P2P_PEER_TYPE eNodeType; - - union { - P2P_GROUP_INFO rGroupInfo; - P2P_DEVICE_INFO rDeviceInfo; - } node; - -} P2P_NETWORK_INFO, *P_P2P_NETWORK_INFO; - -typedef struct _P2P_NETWORK_LIST { - UINT_8 ucNetworkNum; - P2P_NETWORK_INFO rP2PNetworkInfo[P2P_NETWORK_NUM]; -} P2P_NETWORK_LIST, *P_P2P_NETWORK_LIST; - -typedef struct _P2P_DISCONNECT_INFO { - UINT_8 ucRole; - UINT_8 ucRsv[3]; -} P2P_DISCONNECT_INFO, *P_P2P_DISCONNECT_INFO; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_cmd_buf.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_cmd_buf.h deleted file mode 100755 index c59c60678d44..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_cmd_buf.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "p2p_cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - - - -/* -** $Log: p2p_cmd_buf.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks -*/ - -#ifndef _P2P_CMD_BUF_H -#define _P2P_CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - - - -#endif /* _P2P_CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_mac.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_mac.h deleted file mode 100755 index 9c022b0193b8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_mac.h +++ /dev/null @@ -1,223 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_mac.h#2 $ -*/ - -/*! \file "p2p_mac.h" - \brief Brief description. - - Detail description. -*/ - - - - - -#ifndef _P2P_MAC_H -#define _P2P_MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define ACTION_PUBLIC_WIFI_DIRECT 9 -#define ACTION_GAS_INITIAL_REQUEST 10 -#define ACTION_GAS_INITIAL_RESPONSE 11 -#define ACTION_GAS_COMEBACK_REQUEST 12 -#define ACTION_GAS_COMEBACK_RESPONSE 13 - - -/* P2P 4.2.8.1 - P2P Public Action Frame Type. */ -#define P2P_PUBLIC_ACTION_GO_NEGO_REQ 0 -#define P2P_PUBLIC_ACTION_GO_NEGO_RSP 1 -#define P2P_PUBLIC_ACTION_GO_NEGO_CFM 2 -#define P2P_PUBLIC_ACTION_INVITATION_REQ 3 -#define P2P_PUBLIC_ACTION_INVITATION_RSP 4 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_REQ 5 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_RSP 6 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_REQ 7 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_RSP 8 - -/* P2P 4.2.9.1 - P2P Action Frame Type */ -#define P2P_ACTION_NOTICE_OF_ABSENCE 0 -#define P2P_ACTION_P2P_PRESENCE_REQ 1 -#define P2P_ACTION_P2P_PRESENCE_RSP 2 -#define P2P_ACTION_GO_DISCOVER_REQ 3 - -#define P2P_PUBLIC_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+8) -#define P2P_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+7) - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/* P2P 4.2.8.2 P2P Public Action Frame Format */ -typedef struct _P2P_PUBLIC_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 aucOui[3]; /* 0x50, 0x6F, 0x9A */ - UINT_8 ucOuiType; /* 0x09 */ - UINT_8 ucOuiSubtype; /* GO Nego Req/Rsp/Cfm, P2P Invittion Req/Rsp, Device Discoverability Req/Rsp */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* P2P IE, WSC IE. */ -} __KAL_ATTRIB_PACKED__ P2P_PUBLIC_ACTION_FRAME_T, *P_P2P_PUBLIC_ACTION_FRAME_T; - - -/* P2P 4.2.9.1 - General Action Frame Format. */ -typedef struct _P2P_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Action Frame Body */ - UINT_8 ucCategory; // 0x7F - UINT_8 aucOui[3]; // 0x50, 0x6F, 0x9A - UINT_8 ucOuiType; // 0x09 - UINT_8 ucOuiSubtype; // - UINT_8 ucDialogToken; - UINT_8 aucInfoElem[1]; -} __KAL_ATTRIB_PACKED__ P2P_ACTION_FRAME_T, *P_P2P_ACTION_FRAME_T; - -/* P2P C.1 GAS Public Action Initial Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T; - -/* P2P C.2 GAS Public Action Initial Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Initial Response. */ - UINT_16 u2ComebackDelay; /* Initial Response. */ /* In unit of TU. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T; - - -/* P2P C.3-1 GAS Public Action Comeback Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T; - -/* P2P C.3-2 GAS Public Action Comeback Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Comeback Response. */ - UINT_8 ucFragmentID; /*Comeback Response. */ - UINT_16 u2ComebackDelay; /* Comeback Response. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T; - - - - -typedef struct _P2P_SD_VENDER_SPECIFIC_CONTENT_T { - /* Service Discovery Vendor-specific Content. */ - UINT_8 ucOuiSubtype; // 0x09 - UINT_16 u2ServiceUpdateIndicator; - UINT_8 aucServiceTLV[1]; -} __KAL_ATTRIB_PACKED__ P2P_SD_VENDER_SPECIFIC_CONTENT_T, *P_P2P_SD_VENDER_SPECIFIC_CONTENT_T; - - -typedef struct _P2P_SERVICE_REQUEST_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 aucQueryData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_REQUEST_TLV_T, *P_P2P_SERVICE_REQUEST_TLV_T; - - - -typedef struct _P2P_SERVICE_RESPONSE_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 ucStatusCode; - UINT_8 aucResponseData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_RESPONSE_TLV_T, *P_P2P_SERVICE_RESPONSE_TLV_T; - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_nic.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_nic.h deleted file mode 100755 index 3f1363f77d1a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_nic.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic.h#1 $ -*/ - -/*! \file "p2p_nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - - - - - -#ifndef _P2P_NIC_H -#define _P2P_NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -nicP2pMediaStateChange( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -VOID -nicRxAddP2pDevice( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_nic_cmd_event.h deleted file mode 100755 index fb056fff3598..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/p2p_nic_cmd_event.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic_cmd_event.h#1 $ -*/ - -/*! \file p2p_nic_cmd_event.h - \brief -*/ - - - -#ifndef _P2P_NIC_CMD_EVENT_H -#define _P2P_NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -typedef struct _EVENT_P2P_DEV_DISCOVER_RESULT_T { -// UINT_8 aucCommunicateAddr[MAC_ADDR_LEN]; // Deprecated. - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[2]; - UINT_16 u2NameLength; - UINT_8 aucName[32]; - PUINT_8 pucIeBuf; - UINT_16 u2IELength; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - // TODO: Service Information or PasswordID valid? -} EVENT_P2P_DEV_DISCOVER_RESULT_T, *P_EVENT_P2P_DEV_DISCOVER_RESULT_T; - -#endif \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/que_mgt.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/que_mgt.h deleted file mode 100755 index b7c8d5e73375..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/que_mgt.h +++ /dev/null @@ -1,1150 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/que_mgt.h#1 $ -*/ - -/*! \file "que_mgt.h" - \brief TX/RX queues management header file - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - - - -/* -** $Log: que_mgt.h $ - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 06 14 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Change the parameter for WMM pass. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 19 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * By default enabling dynamic STA_REC activation and decactivation - * - * 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:04:53 GMT MTK02468 -** Added RX buffer reordering function prototypes -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-02 22:08:44 GMT MTK02468 -** Added macro QM_INIT_STA_REC for initialize a STA_REC -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 21:58:43 GMT mtk02468 -** Initial version -** -*/ - -#ifndef _QUE_MGT_H -#define _QUE_MGT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* Queue Manager Features */ -#define QM_BURST_END_INFO_ENABLED 1 /* 1: Indicate the last TX packet to the FW for each burst */ -#define QM_FORWARDING_FAIRNESS 1 /* 1: To fairly share TX resource among active STAs */ -#define QM_ADAPTIVE_TC_RESOURCE_CTRL 1 /* 1: To adaptively adjust resource for each TC */ -#define QM_PRINT_TC_RESOURCE_CTRL 0 /* 1: To print TC resource adjustment results */ -#define QM_RX_WIN_SSN_AUTO_ADVANCING 1 /* 1: If pkt with SSN is missing, auto advance the RX reordering window */ -#define QM_RX_INIT_FALL_BEHIND_PASS 1 /* 1: Indicate the packets falling behind to OS before the frame with SSN is received */ -#define QM_TC_RESOURCE_EMPTY_COUNTER 1 /* 1: Count times of TC resource empty happened */ -/* Parameters */ -#define QM_INIT_TIME_TO_UPDATE_QUE_LEN 60 /* p: Update queue lengths when p TX packets are enqueued */ -#define QM_INIT_TIME_TO_ADJUST_TC_RSC 3 /* s: Adjust the TC resource every s updates of queue lengths */ -#define QM_QUE_LEN_MOVING_AVE_FACTOR 3 /* Factor for Que Len averaging */ - -#define QM_MIN_RESERVED_TC0_RESOURCE 1 -#define QM_MIN_RESERVED_TC1_RESOURCE 1 -#define QM_MIN_RESERVED_TC2_RESOURCE 1 -#define QM_MIN_RESERVED_TC3_RESOURCE 1 -#define QM_MIN_RESERVED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_MIN_RESERVED_TC5_RESOURCE 1 - -#if defined(MT6620) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 9 -#define QM_GUARANTEED_TC3_RESOURCE 11 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - -#elif defined(MT5931) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 4 -#define QM_GUARANTEED_TC3_RESOURCE 4 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 2 - -#elif defined(MT6628) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 6 -#define QM_GUARANTEED_TC3_RESOURCE 6 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - - -#else -#error -#endif - - - -#define QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY 0 - -#define QM_TOTAL_TC_RESOURCE (\ - NIC_TX_BUFF_COUNT_TC0 + NIC_TX_BUFF_COUNT_TC1 +\ - NIC_TX_BUFF_COUNT_TC2 + NIC_TX_BUFF_COUNT_TC3 +\ - NIC_TX_BUFF_COUNT_TC5) -#define QM_AVERAGE_TC_RESOURCE 6 - -/* Note: QM_INITIAL_RESIDUAL_TC_RESOURCE shall not be less than 0 */ -#define QM_INITIAL_RESIDUAL_TC_RESOURCE (QM_TOTAL_TC_RESOURCE - \ - (QM_GUARANTEED_TC0_RESOURCE +\ - QM_GUARANTEED_TC1_RESOURCE +\ - QM_GUARANTEED_TC2_RESOURCE +\ - QM_GUARANTEED_TC3_RESOURCE +\ - QM_GUARANTEED_TC5_RESOURCE \ - )) - -/* Hard-coded network type for Phase 3: NETWORK_TYPE_AIS/P2P/BOW */ -#define QM_OPERATING_NETWORK_TYPE NETWORK_TYPE_AIS - -#define QM_TEST_MODE 0 -#define QM_TEST_TRIGGER_TX_COUNT 50 -#define QM_TEST_STA_REC_DETERMINATION 0 -#define QM_TEST_STA_REC_DEACTIVATION 0 -#define QM_TEST_FAIR_FORWARDING 0 - -#define QM_DEBUG_COUNTER 0 - -/* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ -/* Per-Type Queues: [0] BMCAST */ -#define NUM_OF_PER_STA_TX_QUEUES 5 -#define NUM_OF_PER_TYPE_TX_QUEUES 1 - -/* These two constants are also used for FW to verify the STA_REC index */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE - -/* TX Queue Index */ -#define TX_QUEUE_INDEX_BMCAST 0 -#define TX_QUEUE_INDEX_NO_STA_REC 0 -#define TX_QUEUE_INDEX_AC0 0 -#define TX_QUEUE_INDEX_AC1 1 -#define TX_QUEUE_INDEX_AC2 2 -#define TX_QUEUE_INDEX_AC3 3 -#define TX_QUEUE_INDEX_802_1X 4 -#define TX_QUEUE_INDEX_NON_QOS 1 - - -//1 WMM-related -/* WMM FLAGS */ -#define WMM_FLAG_SUPPORT_WMM BIT(0) -#define WMM_FLAG_SUPPORT_WMMSA BIT(1) -#define WMM_FLAG_AC_PARAM_PRESENT BIT(2) -#define WMM_FLAG_SUPPORT_UAPSD BIT(3) - -/* WMM Admission Control Mandatory FLAGS */ -#define ACM_FLAG_ADM_NOT_REQUIRED 0 -#define ACM_FLAG_ADM_GRANTED BIT(0) -#define ACM_FLAG_ADM_REQUIRED BIT(1) - -/* WMM Power Saving FLAGS */ -#define AC_FLAG_TRIGGER_ENABLED BIT(1) -#define AC_FLAG_DELIVERY_ENABLED BIT(2) - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/* WMM-2.2.2 WMM Parameter Element */ -#define ELEM_MAX_LEN_WMM_PARAM 24 - -/* WMM-2.2.1 WMM QoS Info field */ -#define WMM_QOS_INFO_PARAM_SET_CNT BITS(0,3) /* Sent by AP */ -#define WMM_QOS_INFO_UAPSD BIT(7) - -#define WMM_QOS_INFO_VO_UAPSD BIT(0) /* Sent by non-AP STA */ -#define WMM_QOS_INFO_VI_UAPSD BIT(1) -#define WMM_QOS_INFO_BK_UAPSD BIT(2) -#define WMM_QOS_INFO_BE_UAPSD BIT(3) -#define WMM_QOS_INFO_MAX_SP_LEN_MASK BITS(5,6) -#define WMM_QOS_INFO_MAX_SP_ALL 0 -#define WMM_QOS_INFO_MAX_SP_2 BIT(5) -#define WMM_QOS_INFO_MAX_SP_4 BIT(6) -#define WMM_QOS_INFO_MAX_SP_6 BITS(5,6) - -/* -- definitions for Max SP length field */ -#define WMM_MAX_SP_LENGTH_ALL 0 -#define WMM_MAX_SP_LENGTH_2 2 -#define WMM_MAX_SP_LENGTH_4 4 -#define WMM_MAX_SP_LENGTH_6 6 - - -/* WMM-2.2.2 WMM ACI/AIFSN field */ -/* -- subfields in the ACI/AIFSN field */ -#define WMM_ACIAIFSN_AIFSN BITS(0,3) -#define WMM_ACIAIFSN_ACM BIT(4) -#define WMM_ACIAIFSN_ACI BITS(5,6) -#define WMM_ACIAIFSN_ACI_OFFSET 5 - -/* -- definitions for ACI field */ -#define WMM_ACI_AC_BE 0 -#define WMM_ACI_AC_BK BIT(5) -#define WMM_ACI_AC_VI BIT(6) -#define WMM_ACI_AC_VO BITS(5,6) - -#define WMM_ACI(_AC) (_AC << WMM_ACIAIFSN_ACI_OFFSET) - -/* -- definitions for ECWmin/ECWmax field */ -#define WMM_ECW_WMIN_MASK BITS(0,3) -#define WMM_ECW_WMAX_MASK BITS(4,7) -#define WMM_ECW_WMAX_OFFSET 4 - -#define TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME 0 /* Unit: 64 us */ - -#define QM_RX_BA_ENTRY_MISS_TIMEOUT_MS (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -enum { - QM_DBG_CNT_00=0, - QM_DBG_CNT_01, - QM_DBG_CNT_02, - QM_DBG_CNT_03, - QM_DBG_CNT_04, - QM_DBG_CNT_05, - QM_DBG_CNT_06, - QM_DBG_CNT_07, - QM_DBG_CNT_08, - QM_DBG_CNT_09, - QM_DBG_CNT_10, - QM_DBG_CNT_11, - QM_DBG_CNT_12, - QM_DBG_CNT_13, - QM_DBG_CNT_14, - QM_DBG_CNT_15, - QM_DBG_CNT_16, - QM_DBG_CNT_17, - QM_DBG_CNT_18, - QM_DBG_CNT_19, - QM_DBG_CNT_20, - QM_DBG_CNT_21, - QM_DBG_CNT_22, - QM_DBG_CNT_23, - QM_DBG_CNT_24, - QM_DBG_CNT_25, - QM_DBG_CNT_26, - QM_DBG_CNT_27, - QM_DBG_CNT_28, - QM_DBG_CNT_29, - QM_DBG_CNT_30, - QM_DBG_CNT_31, - QM_DBG_CNT_NUM -}; - - - - -/* Used for MAC TX */ -typedef enum _ENUM_MAC_TX_QUEUE_INDEX_T { - MAC_TX_QUEUE_AC0_INDEX = 0, - MAC_TX_QUEUE_AC1_INDEX, - MAC_TX_QUEUE_AC2_INDEX, - MAC_TX_QUEUE_AC3_INDEX, - MAC_TX_QUEUE_AC4_INDEX, - MAC_TX_QUEUE_AC5_INDEX, - MAC_TX_QUEUE_AC6_INDEX, - MAC_TX_QUEUE_BCN_INDEX, - MAC_TX_QUEUE_BMC_INDEX, - MAC_TX_QUEUE_NUM -} ENUM_MAC_TX_QUEUE_INDEX_T; - -typedef struct _RX_BA_ENTRY_T { - BOOLEAN fgIsValid; - QUE_T rReOrderQue; - UINT_16 u2WinStart; - UINT_16 u2WinEnd; - UINT_16 u2WinSize; - - /* For identifying the RX BA agreement */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; - - BOOLEAN fgIsWaitingForPktWithSsn; - - //UINT_8 ucTxBufferSize; - //BOOL fgIsAcConstrain; - //BOOL fgIsBaEnabled; -} RX_BA_ENTRY_T, *P_RX_BA_ENTRY_T; - -/* The mailbox message (could be used for Host-To-Device or Device-To-Host Mailbox) */ -typedef struct _MAILBOX_MSG_T{ - UINT_32 u4Msg[2]; /* [0]: D2HRM0R or H2DRM0R, [1]: D2HRM1R or H2DRM1R */ -} MAILBOX_MSG_T, *P_MAILBOX_MSG_T; - - -/* Used for adaptively adjusting TC resources */ -typedef struct _TC_RESOURCE_CTRL_T { - /* TC0, TC1, TC2, TC3, TC5 */ - UINT_32 au4AverageQueLen[TC_NUM - 1]; -} TC_RESOURCE_CTRL_T, *P_TC_RESOURCE_CTRL_T; - -typedef struct _QUE_MGT_T{ /* Queue Management Control Info */ - - /* Per-Type Queues: [0] BMCAST or UNKNOWN-STA packets */ - QUE_T arTxQueue[NUM_OF_PER_TYPE_TX_QUEUES]; - -#if 0 - /* For TX Scheduling */ - UINT_8 arRemainingTxOppt[NUM_OF_PER_STA_TX_QUEUES]; - UINT_8 arCurrentTxStaIndex[NUM_OF_PER_STA_TX_QUEUES]; - -#endif - - /* Reordering Queue Parameters */ - RX_BA_ENTRY_T arRxBaTable[CFG_NUM_OF_RX_BA_AGREEMENTS]; - - /* Current number of activated RX BA agreements <= CFG_NUM_OF_RX_BA_AGREEMENTS */ - UINT_8 ucRxBaCount; - -#if QM_TEST_MODE - UINT_32 u4PktCount; - P_ADAPTER_T prAdapter; - -#if QM_TEST_FAIR_FORWARDING - UINT_32 u4CurrentStaRecIndexToEnqueue; -#endif - -#endif - - -#if QM_FORWARDING_FAIRNESS - /* The current TX count for a STA with respect to a TC index */ - UINT_32 au4ForwardCount[NUM_OF_PER_STA_TX_QUEUES]; - - /* The current serving STA with respect to a TC index */ - UINT_32 au4HeadStaRecIndex [NUM_OF_PER_STA_TX_QUEUES]; -#endif - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 au4AverageQueLen[TC_NUM]; - UINT_32 au4CurrentTcResource[TC_NUM]; - UINT_32 au4MinReservedTcResource[TC_NUM]; /* The minimum amount of resource no matter busy or idle */ - UINT_32 au4GuaranteedTcResource[TC_NUM]; /* The minimum amount of resource when extremely busy */ - - UINT_32 u4TimeToAdjustTcResource; - UINT_32 u4TimeToUpdateQueLen; - - /* Set to TRUE if the last TC adjustment has not been completely applied (i.e., waiting more TX-Done events - to align the TC quotas to the TC resource assignment) */ - BOOLEAN fgTcResourcePostAnnealing; - -#endif - -#if QM_DEBUG_COUNTER - UINT_32 au4QmDebugCounters[QM_DBG_CNT_NUM]; -#endif -#if QM_TC_RESOURCE_EMPTY_COUNTER - UINT_32 au4QmTcResourceEmptyCounter[NET_TYPE_NUM][TC_NUM]; -#endif -} QUE_MGT_T, *P_QUE_MGT_T; - - - -typedef struct _EVENT_RX_ADDBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - - /* Fields that are present in the received ADDBA_REQ */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ - -} EVENT_RX_ADDBA_T, *P_EVENT_RX_ADDBA_T; - -typedef struct _EVENT_RX_DELBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; -} EVENT_RX_DELBA_T, *P_EVENT_RX_DELBA_T; - - -typedef struct _EVENT_BSS_ABSENCE_PRESENCE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucNetTypeIdx; - BOOLEAN fgIsAbsent; - UINT_8 ucBssFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_BSS_ABSENCE_PRESENCE_T, *P_EVENT_BSS_ABSENCE_PRESENCE_T; - - -typedef struct _EVENT_STA_CHANGE_PS_MODE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - BOOLEAN fgIsInPs; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; -} EVENT_STA_CHANGE_PS_MODE_T, *P_EVENT_STA_CHANGE_PS_MODE_T; - -/* The free quota is used by PS only now */ -/* The event may be used by per STA flow conttrol in general */ -typedef struct _EVENT_STA_UPDATE_FREE_QUOTA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_STA_UPDATE_FREE_QUOTA_T, *P_EVENT_STA_UPDATE_FREE_QUOTA_T; - - - - -/* WMM-2.2.1 WMM Information Element */ -typedef struct _IE_WMM_INFO_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucDummy[3]; /* Dummy for pack */ -} IE_WMM_INFO_T, *P_IE_WMM_INFO_T; - -/* WMM-2.2.2 WMM Parameter Element */ -typedef struct _IE_WMM_PARAM_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - - /* IE Body */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - - /* WMM IE Body */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucReserved; - - /* AC Parameters */ - UINT_8 ucAciAifsn_BE; - UINT_8 ucEcw_BE; - UINT_8 aucTxopLimit_BE[2]; - - UINT_8 ucAciAifsn_BG; - UINT_8 ucEcw_BG; - UINT_8 aucTxopLimit_BG[2]; - - UINT_8 ucAciAifsn_VI; - UINT_8 ucEcw_VI; - UINT_8 aucTxopLimit_VI[2]; - - UINT_8 ucAciAifsn_VO; - UINT_8 ucEcw_VO; - UINT_8 aucTxopLimit_VO[2]; - -} IE_WMM_PARAM_T, *P_IE_WMM_PARAM_T; - -typedef struct _IE_WMM_TSPEC_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - /* WMM TSPEC body */ - UINT_8 aucTsInfo[3]; /* TS Info */ - UINT_8 aucTspecBodyPart[1]; /* Note: Utilize PARAM_QOS_TSPEC to fill (memory copy) */ -} IE_WMM_TSPEC_T, *P_IE_WMM_TSPEC_T; - -typedef struct _IE_WMM_HDR_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 aucBody[1]; /* IE body */ -} IE_WMM_HDR_T, *P_IE_WMM_HDR_T; - - -typedef struct _AC_QUE_PARMS_T{ - UINT_16 u2CWmin; /*!< CWmin */ - UINT_16 u2CWmax; /*!< CWmax */ - UINT_16 u2TxopLimit; /*!< TXOP limit */ - UINT_16 u2Aifsn; /*!< AIFSN */ - UINT_8 ucGuradTime; /*!< GuardTime for STOP/FLUSH. */ - BOOLEAN fgIsACMSet; -} AC_QUE_PARMS_T, *P_AC_QUE_PARMS_T; - -/* WMM ACI (AC index) */ -typedef enum _ENUM_WMM_ACI_T { - WMM_AC_BE_INDEX = 0, - WMM_AC_BK_INDEX, - WMM_AC_VI_INDEX, - WMM_AC_VO_INDEX, - WMM_AC_INDEX_NUM -} ENUM_WMM_ACI_T, *P_ENUM_WMM_ACI_T; - - -/* Used for CMD Queue Operation */ -typedef enum _ENUM_FRAME_ACTION_T { - FRAME_ACTION_DROP_PKT = 0, - FRAME_ACTION_QUEUE_PKT, - FRAME_ACTION_TX_PKT, - FRAME_ACTION_NUM -} ENUM_FRAME_ACTION_T; - - -typedef enum _ENUM_FRAME_TYPE_IN_CMD_Q_T { - FRAME_TYPE_802_1X = 0, - FRAME_TYPE_MMPDU, - FRAME_TYEP_NUM -} ENUM_FRAME_TYPE_IN_CMD_Q_T; - -typedef enum _ENUM_FREE_QUOTA_MODET_T { - FREE_QUOTA_UPDATE_MODE_INIT = 0, - FREE_QUOTA_UPDATE_MODE_OVERWRITE, - FREE_QUOTA_UPDATE_MODE_INCREASE, - FREE_QUOTA_UPDATE_MODE_DECREASE -} ENUM_FREE_QUOTA_MODET_T, *P_ENUM_FREE_QUOTA_MODET_T; - - - -typedef struct _CMD_UPDATE_WMM_PARMS_T { - AC_QUE_PARMS_T arACQueParms[AC_NUM]; - UINT_8 ucNetTypeIndex; - UINT_8 fgIsQBSS; - UINT_8 aucReserved[2]; -} CMD_UPDATE_WMM_PARMS_T, *P_CMD_UPDATE_WMM_PARMS_T; - - -typedef struct _CMD_TX_AMPDU_T { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_TX_AMPDU_T, *P_CMD_TX_AMPDU_T; - - -typedef struct _CMD_ADDBA_REJECT { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_ADDBA_REJECT_T, *P_CMD_ADDBA_REJECT_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define QM_TX_SET_NEXT_MSDU_INFO(_prMsduInfoPreceding, _prMsduInfoNext) \ - ((((_prMsduInfoPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prMsduInfoNext)) - -#define QM_TX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - - -#define QM_TX_GET_NEXT_MSDU_INFO(_prMsduInfo) \ - ((P_MSDU_INFO_T)(((_prMsduInfo)->rQueEntry).prNext)) - -#define QM_RX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - -#define QM_RX_GET_NEXT_SW_RFB(_prSwRfb) \ - ((P_SW_RFB_T)(((_prSwRfb)->rQueEntry).prNext)) - -#if 0 -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - ((((_ucIndex) != STA_REC_INDEX_BMCAST) && ((_ucIndex)!= STA_REC_INDEX_NOT_FOUND)) ?\ - &(_prAdapter->arStaRec[_ucIndex]): NULL) -#endif - -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - cnmGetStaRecByIndex(_prAdapter,_ucIndex) - - -#define QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET(\ - _prMsduInfo,\ - _ucTC,\ - _ucPacketType,\ - _ucFormatID,\ - _fgIs802_1x,\ - _fgIs802_11,\ - _u2PalLLH,\ - _u2AclSN,\ - _ucPsForwardingType,\ - _ucPsSessionID\ - ) \ -{\ - ASSERT(_prMsduInfo);\ - (_prMsduInfo)->ucTC = (_ucTC);\ - (_prMsduInfo)->ucPacketType = (_ucPacketType);\ - (_prMsduInfo)->ucFormatID = (_ucFormatID);\ - (_prMsduInfo)->fgIs802_1x = (_fgIs802_1x);\ - (_prMsduInfo)->fgIs802_11 = (_fgIs802_11);\ - (_prMsduInfo)->u2PalLLH = (_u2PalLLH);\ - (_prMsduInfo)->u2AclSN = (_u2AclSN);\ - (_prMsduInfo)->ucPsForwardingType = (_ucPsForwardingType);\ - (_prMsduInfo)->ucPsSessionID = (_ucPsSessionID);\ - (_prMsduInfo)->fgIsBurstEnd = (FALSE);\ -} - -#define QM_INIT_STA_REC(\ - _prStaRec,\ - _fgIsValid,\ - _fgIsQoS,\ - _pucMacAddr\ - )\ -{\ - ASSERT(_prStaRec);\ - (_prStaRec)->fgIsValid = (_fgIsValid);\ - (_prStaRec)->fgIsQoS = (_fgIsQoS);\ - (_prStaRec)->fgIsInPS = FALSE; \ - (_prStaRec)->ucPsSessionID = 0xFF;\ - COPY_MAC_ADDR((_prStaRec)->aucMacAddr,(_pucMacAddr));\ -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -#define QM_GET_TX_QUEUE_LEN(_prAdapter, _u4QueIdx) ((_prAdapter->rQM.au4AverageQueLen[(_u4QueIdx)] >> QM_QUE_LEN_MOVING_AVE_FACTOR)) -#endif - - -#define WMM_IE_OUI_TYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiType) -#define WMM_IE_OUI_SUBTYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiSubtype) -#define WMM_IE_OUI(fp) (((P_IE_WMM_HDR_T)(fp))->aucOui) - -#if QM_DEBUG_COUNTER -#define QM_DBG_CNT_INC(_prQM, _index) { (_prQM)->au4QmDebugCounters[(_index)]++; } -#else -#define QM_DBG_CNT_INC(_prQM, _index) {} -#endif - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Queue Management and STA_REC Initialization */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ); - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - - -/*----------------------------------------------------------------------------*/ -/* TX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ); - -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - - -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ); - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ); - -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid - ); - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ); - - -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ); - - -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ); - -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ); - -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ); - - -/* Utility function: for deciding STA-REC index */ -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -); - -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - - -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ); - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUE_MGT_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/wlan_def.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/wlan_def.h deleted file mode 100755 index c9a7f184dea8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic/wlan_def.h +++ /dev/null @@ -1,1012 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/wlan_def.h#1 $ -*/ - -/*! \file "wlan_def.h" - \brief This file includes the basic definition of WLAN - -*/ - - - -/* -** $Log: wlan_def.h $ - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add new station type MACRO. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 11 2010 kevin.huang - * [WCXRP00000068] [MT6620 Wi-Fi][Driver][FW] Fix STA RECORD sync issue and remove unused code - * Update ENUM_STA_ROLE_INDEX_T by using a fixed base value - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 14 2010 chinghwa.yu - * NULL - * Update OP_MODE_BOW and include bow_fsm.h. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Change P2P Descriptor List to a pointer and allocate it dynamically to avoid structure corrupt by BssDescriptor free. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add a pointer in BSS Descriptor for P2P Descriptor. - * - * 08 11 2010 yuche.tsai - * NULL - * Add an Interface in BSS Descriptor. - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 07 26 2010 yuche.tsai - * - * Add an operation mode for P2P device. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P present boolean flag in BSS & Pre-BSS descriptor. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * move bss related data types to wlan_def.h to avoid recursive dependency. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:40 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_DEF_H -#define _WLAN_DEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* disconnect reason */ -#define DISCONNECT_REASON_CODE_RESERVED 0 -#define DISCONNECT_REASON_CODE_RADIO_LOST 1 -#define DISCONNECT_REASON_CODE_DEAUTHENTICATED 2 -#define DISCONNECT_REASON_CODE_DISASSOCIATED 3 -#define DISCONNECT_REASON_CODE_NEW_CONNECTION 4 - -/* The rate definitions */ -#define TX_MODE_CCK 0x00 -#define TX_MODE_OFDM 0x40 -#define TX_MODE_HT_MM 0x80 -#define TX_MODE_HT_GF 0xC0 - -#define RATE_CCK_SHORT_PREAMBLE 0x10 -#define RATE_OFDM 0x20 - -#define PHY_RATE_1M 0x0 -#define PHY_RATE_2M 0x1 -#define PHY_RATE_5_5M 0x2 -#define PHY_RATE_11M 0x3 -#define PHY_RATE_6M 0xB -#define PHY_RATE_9M 0xF -#define PHY_RATE_12M 0xA -#define PHY_RATE_18M 0xE -#define PHY_RATE_24M 0x9 -#define PHY_RATE_36M 0xD -#define PHY_RATE_48M 0x8 -#define PHY_RATE_54M 0xC -#define PHY_RATE_MCS0 0x0 -#define PHY_RATE_MCS1 0x1 -#define PHY_RATE_MCS2 0x2 -#define PHY_RATE_MCS3 0x3 -#define PHY_RATE_MCS4 0x4 -#define PHY_RATE_MCS5 0x5 -#define PHY_RATE_MCS6 0x6 -#define PHY_RATE_MCS7 0x7 -#define PHY_RATE_MCS32 0x20 - -#define RATE_CCK_1M_LONG (TX_MODE_CCK | PHY_RATE_1M) -#define RATE_CCK_2M_LONG (TX_MODE_CCK | PHY_RATE_2M) -#define RATE_CCK_5_5M_LONG (TX_MODE_CCK | PHY_RATE_5_5M) -#define RATE_CCK_11M_LONG (TX_MODE_CCK | PHY_RATE_11M) -#define RATE_CCK_2M_SHORT (TX_MODE_CCK | PHY_RATE_2M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_5_5M_SHORT (TX_MODE_CCK | PHY_RATE_5_5M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_11M_SHORT (TX_MODE_CCK | PHY_RATE_11M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_OFDM_6M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_6M) -#define RATE_OFDM_9M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_9M) -#define RATE_OFDM_12M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_12M) -#define RATE_OFDM_18M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_18M) -#define RATE_OFDM_24M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_24M) -#define RATE_OFDM_36M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_36M) -#define RATE_OFDM_48M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_48M) -#define RATE_OFDM_54M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_54M) - -#define RATE_MM_MCS_0 (TX_MODE_HT_MM | PHY_RATE_MCS0) -#define RATE_MM_MCS_1 (TX_MODE_HT_MM | PHY_RATE_MCS1) -#define RATE_MM_MCS_2 (TX_MODE_HT_MM | PHY_RATE_MCS2) -#define RATE_MM_MCS_3 (TX_MODE_HT_MM | PHY_RATE_MCS3) -#define RATE_MM_MCS_4 (TX_MODE_HT_MM | PHY_RATE_MCS4) -#define RATE_MM_MCS_5 (TX_MODE_HT_MM | PHY_RATE_MCS5) -#define RATE_MM_MCS_6 (TX_MODE_HT_MM | PHY_RATE_MCS6) -#define RATE_MM_MCS_7 (TX_MODE_HT_MM | PHY_RATE_MCS7) -#define RATE_MM_MCS_32 (TX_MODE_HT_MM | PHY_RATE_MCS32) - -#define RATE_GF_MCS_0 (TX_MODE_HT_GF | PHY_RATE_MCS0) -#define RATE_GF_MCS_1 (TX_MODE_HT_GF | PHY_RATE_MCS1) -#define RATE_GF_MCS_2 (TX_MODE_HT_GF | PHY_RATE_MCS2) -#define RATE_GF_MCS_3 (TX_MODE_HT_GF | PHY_RATE_MCS3) -#define RATE_GF_MCS_4 (TX_MODE_HT_GF | PHY_RATE_MCS4) -#define RATE_GF_MCS_5 (TX_MODE_HT_GF | PHY_RATE_MCS5) -#define RATE_GF_MCS_6 (TX_MODE_HT_GF | PHY_RATE_MCS6) -#define RATE_GF_MCS_7 (TX_MODE_HT_GF | PHY_RATE_MCS7) -#define RATE_GF_MCS_32 (TX_MODE_HT_GF | PHY_RATE_MCS32) - -#define RATE_TX_MODE_MASK BITS(6,7) -#define RATE_TX_MODE_OFFSET 6 -#define RATE_CODE_GET_TX_MODE(_ucRateCode) ((_ucRateCode & RATE_TX_MODE_MASK) >> RATE_TX_MODE_OFFSET) -#define RATE_PHY_RATE_MASK BITS(0,5) -#define RATE_PHY_RATE_OFFSET 0 -#define RATE_CODE_GET_PHY_RATE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_MASK) >> RATE_PHY_RATE_OFFSET) -#define RATE_PHY_RATE_SHORT_PREAMBLE BIT(4) -#define RATE_CODE_IS_SHORT_PREAMBLE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_SHORT_PREAMBLE)?TRUE:FALSE) - - -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - -/*! CNM(STA_RECORD_T) related definition */ -#define CFG_STA_REC_NUM 20 - -/* PHY TYPE bit definitions */ -#define PHY_TYPE_BIT_HR_DSSS BIT(PHY_TYPE_HR_DSSS_INDEX) /* HR/DSSS PHY (clause 18) */ -#define PHY_TYPE_BIT_ERP BIT(PHY_TYPE_ERP_INDEX) /* ERP PHY (clause 19) */ -#define PHY_TYPE_BIT_OFDM BIT(PHY_TYPE_OFDM_INDEX) /* OFDM 5 GHz PHY (clause 17) */ -#define PHY_TYPE_BIT_HT BIT(PHY_TYPE_HT_INDEX) /* HT PHY (clause 20) */ - - -/* PHY TYPE set definitions */ -#define PHY_TYPE_SET_802_11ABGN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11BGN (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11GN (PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11AN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11ABG (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11BG (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11A (PHY_TYPE_BIT_OFDM) - -#define PHY_TYPE_SET_802_11G (PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11B (PHY_TYPE_BIT_HR_DSSS) - -#define PHY_TYPE_SET_802_11N (PHY_TYPE_BIT_HT) - - -/* Rate set bit definitions */ -#define RATE_SET_BIT_1M BIT(RATE_1M_INDEX) /* Bit 0: 1M */ -#define RATE_SET_BIT_2M BIT(RATE_2M_INDEX) /* Bit 1: 2M */ -#define RATE_SET_BIT_5_5M BIT(RATE_5_5M_INDEX) /* Bit 2: 5.5M */ -#define RATE_SET_BIT_11M BIT(RATE_11M_INDEX) /* Bit 3: 11M */ -#define RATE_SET_BIT_22M BIT(RATE_22M_INDEX) /* Bit 4: 22M */ -#define RATE_SET_BIT_33M BIT(RATE_33M_INDEX) /* Bit 5: 33M */ -#define RATE_SET_BIT_6M BIT(RATE_6M_INDEX) /* Bit 6: 6M */ -#define RATE_SET_BIT_9M BIT(RATE_9M_INDEX) /* Bit 7: 9M */ -#define RATE_SET_BIT_12M BIT(RATE_12M_INDEX) /* Bit 8: 12M */ -#define RATE_SET_BIT_18M BIT(RATE_18M_INDEX) /* Bit 9: 18M */ -#define RATE_SET_BIT_24M BIT(RATE_24M_INDEX) /* Bit 10: 24M */ -#define RATE_SET_BIT_36M BIT(RATE_36M_INDEX) /* Bit 11: 36M */ -#define RATE_SET_BIT_48M BIT(RATE_48M_INDEX) /* Bit 12: 48M */ -#define RATE_SET_BIT_54M BIT(RATE_54M_INDEX) /* Bit 13: 54M */ -#define RATE_SET_BIT_HT_PHY BIT(RATE_HT_PHY_INDEX) /* Bit 14: BSS Selector */ - - -/* Rate set definitions */ -#define RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_HT (RATE_SET_ERP) -//#define RATE_SET_HT (RATE_SET_ERP | RATE_SET_BIT_HT_PHY) /* NOTE(Kevin): TBD */ - - -#define RATE_SET_ALL_ABG RATE_SET_ERP - -#define BASIC_RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M) - -#define BASIC_RATE_SET_HR_DSSS_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define BASIC_RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_100 RATE_SET_ALL_ABG - -#define INITIAL_RATE_SET_RCPI_80 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_60 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M) - -#define INITIAL_RATE_SET(_rcpi) (INITIAL_RATE_SET_ ## _rcpi) - -#define RCPI_100 100 /* -60 dBm */ -#define RCPI_80 80 /* -70 dBm */ -#define RCPI_60 60 /* -80 dBm */ - - -/* The number of RCPI records used to calculate their average value */ -#define MAX_NUM_RCPI_RECORDS 10 - -/* The number of RCPI records used to calculate their average value */ -#define NO_RCPI_RECORDS -128 -#define MAX_RCPI_DBM 0 -#define MIN_RCPI_DBM -100 - - -#define MAC_TX_RESERVED_FIELD 0 /* NOTE(Kevin): Should defined in tx.h */ - -#define MAX_ASSOC_ID (CFG_STA_REC_NUM) /* Available AID: 1 ~ 20(STA_REC_NUM) */ - - -#define MAX_DEAUTH_INFO_COUNT 4 /* NOTE(Kevin): Used in auth.c */ -#define MIN_DEAUTH_INTERVAL_MSEC 500 /* The minimum interval if continuously send Deauth Frame */ - -/* Authentication Type */ -#define AUTH_TYPE_OPEN_SYSTEM BIT(AUTH_ALGORITHM_NUM_OPEN_SYSTEM) -#define AUTH_TYPE_SHARED_KEY BIT(AUTH_ALGORITHM_NUM_SHARED_KEY) -#define AUTH_TYPE_FAST_BSS_TRANSITION BIT(AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION) - -/* Authentication Retry Limit */ -#define TX_AUTH_ASSOCI_RETRY_LIMIT 6 -#define TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING 1 - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_16 PHY_TYPE, *P_PHY_TYPE; -typedef UINT_8 RCPI, *P_RCPI; -typedef UINT_8 ALC_VAL, *P_ALC_VAL; - -typedef enum _ENUM_HW_BSSID_T { - BSSID_0 = 0, - BSSID_1, - BSSID_NUM -} ENUM_HW_BSSID_T; - -typedef enum _ENUM_HW_MAC_ADDR_T { - MAC_ADDR_0 = 0, - MAC_ADDR_1, - MAC_ADDR_NUM -} ENUM_HW_MAC_ADDR_T; - -typedef enum _ENUM_HW_OP_MODE_T { - HW_OP_MODE_STA = 0, - HW_OP_MODE_AP, - HW_OP_MODE_ADHOC, - HW_OP_MODE_NUM -} ENUM_HW_OP_MODE_T; - -typedef enum _ENUM_TSF_T { - ENUM_LOCAL_TSF_0, - ENUM_LOCAL_TSF_1, - ENUM_LOCAL_TSF_NUM -} ENUM_LOCAL_TSF_T, *P_ENUM_LOCAL_TSF_T; - -typedef enum _HAL_TS_HW_UPDATE_MODE { - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME, - HAL_TSF_HW_UPDATE_BY_TICK_ONLY, - HAL_TSF_HW_UPDATE_BY_RECEIVED_FRAME_ONLY, - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME_AD_HOC -} HAL_TSF_HW_UPDATE_MODE; - - -typedef enum _ENUM_AC_T { - AC0 = 0, - AC1, - AC2, - AC3, - AC_NUM -} ENUM_AC_T, *P_ENUM_AC_T; - - -/* The Type of Network been activated */ -typedef enum _ENUM_NETWORK_TYPE_INDEX_T { - NETWORK_TYPE_AIS_INDEX = 0, - NETWORK_TYPE_P2P_INDEX, - NETWORK_TYPE_BOW_INDEX, - NETWORK_TYPE_INDEX_NUM -} ENUM_NETWORK_TYPE_INDEX_T; - - -/* The Type of STA Type. */ -typedef enum _ENUM_STA_TYPE_INDEX_T { - STA_TYPE_LEGACY_INDEX = 0, - STA_TYPE_P2P_INDEX, - STA_TYPE_BOW_INDEX, - STA_TYPE_INDEX_NUM -} -ENUM_STA_TYPE_INDEX_T; - -#define STA_ROLE_BASE_INDEX 4 - -typedef enum _ENUM_STA_ROLE_INDEX_T { - STA_ROLE_ADHOC_INDEX = STA_ROLE_BASE_INDEX, //4 - STA_ROLE_CLIENT_INDEX, - STA_ROLE_AP_INDEX, - STA_ROLE_DLS_INDEX -} ENUM_STA_ROLE_INDEX_T; - -/* The Power State of a specific Network */ -typedef enum _ENUM_PWR_STATE_T { - PWR_STATE_IDLE = 0, - PWR_STATE_ACTIVE, - PWR_STATE_PS, - PWR_STATE_NUM -} ENUM_PWR_STATE_T; - -typedef enum _ENUM_PHY_TYPE_INDEX_T { - //PHY_TYPE_DSSS_INDEX, /* DSSS PHY (clause 15) -- Not used anymore */ - PHY_TYPE_HR_DSSS_INDEX = 0, /* HR/DSSS PHY (clause 18) */ - PHY_TYPE_ERP_INDEX, /* ERP PHY (clause 19) */ - PHY_TYPE_ERP_P2P_INDEX, /* ERP PHY (clause 19) w/o HR/DSSS */ - PHY_TYPE_OFDM_INDEX, /* OFDM 5 GHz PHY (clause 17) */ - PHY_TYPE_HT_INDEX, /* HT PHY (clause 20) */ - PHY_TYPE_INDEX_NUM // 5 -} ENUM_PHY_TYPE_INDEX_T, *P_ENUM_PHY_TYPE_INDEX_T; - -typedef enum _ENUM_ACPI_STATE_T { - ACPI_STATE_D0 = 0, - ACPI_STATE_D1, - ACPI_STATE_D2, - ACPI_STATE_D3 -} ENUM_ACPI_STATE_T; - -/* The operation mode of a specific Network */ -typedef enum _ENUM_OP_MODE_T { - OP_MODE_INFRASTRUCTURE = 0, /* Infrastructure/GC */ - OP_MODE_IBSS, /* AdHoc */ - OP_MODE_ACCESS_POINT, /* For GO */ - OP_MODE_P2P_DEVICE, /* P2P Device */ - OP_MODE_BOW, - OP_MODE_NUM -} ENUM_OP_MODE_T, *P_ENUM_OP_MODE_T; - -typedef enum _ENUM_CHNL_EXT_T { - CHNL_EXT_SCN = 0, - CHNL_EXT_SCA = 1, - CHNL_EXT_RES = 2, - CHNL_EXT_SCB = 3 -} ENUM_CHNL_EXT_T, *P_ENUM_CHNL_EXT_T; - -/* This starting freq of the band is unit of kHz */ -typedef enum _ENUM_BAND_T { - BAND_NULL, - BAND_2G4, - BAND_5G, - BAND_NUM -} ENUM_BAND_T, *P_ENUM_BAND_T; - -/* Provide supported channel list to other components in array format */ -typedef struct _RF_CHANNEL_INFO_T { - ENUM_BAND_T eBand; - UINT_8 ucChannelNum; -} RF_CHANNEL_INFO_T, *P_RF_CHANNEL_INFO_T; - -typedef enum _ENUM_RATE_INDEX_T { - RATE_1M_INDEX = 0, /* 1M */ - RATE_2M_INDEX, /* 2M */ - RATE_5_5M_INDEX, /* 5.5M */ - RATE_11M_INDEX, /* 11M */ - RATE_22M_INDEX, /* 22M */ - RATE_33M_INDEX, /* 33M */ - RATE_6M_INDEX, /* 6M */ - RATE_9M_INDEX, /* 9M */ - RATE_12M_INDEX, /* 12M */ - RATE_18M_INDEX, /* 18M */ - RATE_24M_INDEX, /* 24M */ - RATE_36M_INDEX, /* 36M */ - RATE_48M_INDEX, /* 48M */ - RATE_54M_INDEX, /* 54M */ - RATE_HT_PHY_INDEX, /* BSS Selector - HT PHY */ - RATE_NUM // 15 -} ENUM_RATE_INDEX_T, *P_ENUM_RATE_INDEX_T; - -typedef enum _ENUM_HT_RATE_INDEX_T { - HT_RATE_MCS0_INDEX = 0, - HT_RATE_MCS1_INDEX, - HT_RATE_MCS2_INDEX, - HT_RATE_MCS3_INDEX, - HT_RATE_MCS4_INDEX, - HT_RATE_MCS5_INDEX, - HT_RATE_MCS6_INDEX, - HT_RATE_MCS7_INDEX, - HT_RATE_MCS32_INDEX, - HT_RATE_NUM // 9 -} ENUM_HT_RATE_INDEX_T, *P_ENUM_HT_RATE_INDEX_T; - -typedef enum _ENUM_PREMABLE_OPTION_T { - PREAMBLE_DEFAULT_LONG_NONE = 0, /* LONG for PHY_TYPE_HR_DSSS, NONE for PHY_TYPE_OFDM */ - PREAMBLE_OPTION_SHORT, /* SHORT mandatory for PHY_TYPE_ERP, SHORT option for PHY_TYPE_HR_DSSS */ - PREAMBLE_HT_MIXED_MODE, - PREAMBLE_HT_GREEN_FIELD, - PREAMBLE_OPTION_NUM -} ENUM_PREMABLE_OPTION_T, *P_ENUM_PREMABLE_OPTION_T; - -typedef enum _ENUM_MODULATION_SYSTEM_T { - MODULATION_SYSTEM_CCK = 0, - MODULATION_SYSTEM_OFDM, - MODULATION_SYSTEM_HT20, - MODULATION_SYSTEM_HT40, - MODULATION_SYSTEM_NUM -} ENUM_MODULATION_SYSTEM_T, *P_ENUM_MODULATION_SYSTEM_T; - -typedef enum _ENUM_MODULATION_TYPE_T { - MODULATION_TYPE_CCK_BPSK = 0, - MODULATION_TYPE_QPSK, - MODULATION_TYPE_16QAM, - MODULATION_TYPE_64QAM, - MODULATION_TYPE_NUM -} ENUM_MODULATION_TYPE_T, *P_ENUM_MODULATION_TYPE_T; - -typedef enum _ENUM_PS_FORWARDING_TYPE_T { - PS_FORWARDING_TYPE_NON_PS = 0, - PS_FORWARDING_TYPE_DELIVERY_ENABLED, - PS_FORWARDING_TYPE_NON_DELIVERY_ENABLED, - PS_FORWARDING_MORE_DATA_ENABLED, - PS_FORWARDING_TYPE_NUM -} ENUM_PS_FORWARDING_TYPE_T, *P_ENUM_PS_FORWARDING_TYPE_T; - -typedef struct _DEAUTH_INFO_T { - UINT_8 aucRxAddr[MAC_ADDR_LEN]; - OS_SYSTIME rLastSendTime; -} DEAUTH_INFO_T, *P_DEAUTH_INFO_T; - -/*----------------------------------------------------------------------------*/ -/* Information Element (IE) handlers */ -/*----------------------------------------------------------------------------*/ -typedef VOID (*PFN_APPEND_IE_FUNC)(P_ADAPTER_T, P_MSDU_INFO_T); -typedef VOID (*PFN_HANDLE_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T); -typedef VOID (*PFN_VERIFY_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T, PUINT_16); -typedef UINT_32 (*PFN_CALCULATE_VAR_IE_LEN_FUNC)(P_ADAPTER_T, ENUM_NETWORK_TYPE_INDEX_T, P_STA_RECORD_T); - -typedef struct _APPEND_IE_ENTRY_T { - UINT_16 u2EstimatedIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_IE_ENTRY_T, *P_APPEND_IE_ENTRY_T; - -typedef struct _APPEND_VAR_IE_ENTRY_T { - UINT_16 u2EstimatedFixedIELen; /* For Fixed Length */ - PFN_CALCULATE_VAR_IE_LEN_FUNC pfnCalculateVariableIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_VAR_IE_ENTRY_T, *P_APPEND_VAR_IE_ENTRY_T; - -typedef struct _HANDLE_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_HANDLE_IE_FUNC pfnHandleIE; -} HANDLE_IE_ENTRY_T, *P_HANDLE_IE_ENTRY_T; - -typedef struct _VERIFY_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_VERIFY_IE_FUNC pfnVarifyIE; -} VERIFY_IE_ENTRY_T, *P_VERIFY_IE_ENTRY_T; - -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration */ -/*----------------------------------------------------------------------------*/ -typedef enum _ENUM_PARAM_CONNECTION_POLICY_T { - CONNECT_BY_SSID_BEST_RSSI = 0, - CONNECT_BY_SSID_GOOD_RSSI_MIN_CH_LOAD, - CONNECT_BY_SSID_ANY, /* NOTE(Kevin): Needed by WHQL */ - CONNECT_BY_BSSID, - CONNECT_BY_CUSTOMIZED_RULE /* NOTE(Kevin): TBD */ -} ENUM_PARAM_CONNECTION_POLICY_T, *P_ENUM_PARAM_CONNECTION_POLICY_T; - -typedef enum _ENUM_PARAM_PREAMBLE_TYPE_T { - PREAMBLE_TYPE_LONG = 0, - PREAMBLE_TYPE_SHORT, - PREAMBLE_TYPE_AUTO /*!< Try preamble short first, if fail tray preamble long. */ -} ENUM_PARAM_PREAMBLE_TYPE_T, *P_ENUM_PARAM_PREAMBLE_TYPE_T; - -/* This is enum defined for user to select a phy config listed in combo box */ -typedef enum _ENUM_PARAM_PHY_CONFIG_T { - PHY_CONFIG_802_11ABG = 0, /*!< Can associated with 802.11abg AP but without n capability, Scan dual band. */ - PHY_CONFIG_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11ABGN, /*!< Can associated with 802.11abgn AP, Scan dual band. */ - PHY_CONFIG_802_11BGN, /*!< Can associated with 802_11bgn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11AN, /*!< Can associated with 802_11an AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11GN, /*!< Can associated with 802_11gn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_NUM // 9 -} ENUM_PARAM_PHY_CONFIG_T, *P_ENUM_PARAM_PHY_CONFIG_T; - -/* This is enum defined for user to select an AP Mode */ -typedef enum _ENUM_PARAM_AP_MODE_T { - AP_MODE_11B = 0, /*!< Create 11b BSS if we support 802.11abg/802.11bg. */ - AP_MODE_MIXED_11BG, /*!< Create 11bg mixed BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G, /*!< Create 11g only BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G_P2P, /*!< Create 11g only BSS for P2P if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11A, /*!< Create 11a only BSS if we support 802.11abg. */ - AP_MODE_NUM // 4 -} ENUM_PARAM_AP_MODE_T, *P_ENUM_PARAM_AP_MODE_T; - - -/* Masks for determining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define NETWORK_TYPE_AIS_MASK BIT(NETWORK_TYPE_AIS_INDEX) -#define NETWORK_TYPE_P2P_MASK BIT(NETWORK_TYPE_P2P_INDEX) -#define NETWORK_TYPE_BOW_MASK BIT(NETWORK_TYPE_BOW_INDEX) -#define STA_TYPE_LEGACY_MASK BIT(STA_TYPE_LEGACY_INDEX) -#define STA_TYPE_P2P_MASK BIT(STA_TYPE_P2P_INDEX) -#define STA_TYPE_BOW_MASK BIT(STA_TYPE_BOW_INDEX) -#define STA_TYPE_ADHOC_MASK BIT(STA_ROLE_ADHOC_INDEX) -#define STA_TYPE_CLIENT_MASK BIT(STA_ROLE_CLIENT_INDEX) -#define STA_TYPE_AP_MASK BIT(STA_ROLE_AP_INDEX) -#define STA_TYPE_DLS_MASK BIT(STA_ROLE_DLS_INDEX) - -/* Macros for obtaining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define IS_STA_IN_AIS(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) -#define IS_STA_IN_P2P(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) -#define IS_STA_IN_BOW(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) -#define IS_STA_LEGACY_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_LEGACY_MASK) -#define IS_STA_P2P_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_P2P_MASK) -#define IS_STA_BOW_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_BOW_MASK) -#define IS_ADHOC_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_ADHOC_MASK) -#define IS_CLIENT_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_CLIENT_MASK) -#define IS_AP_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_AP_MASK) -#define IS_DLS_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_DLS_MASK) - -/* The ENUM_STA_TYPE_T accounts for ENUM_NETWORK_TYPE_T and ENUM_STA_ROLE_INDEX_T. - * * It is a merged version of Network Type and STA Role. - * */ -typedef enum _ENUM_STA_TYPE_T { - STA_TYPE_LEGACY_AP = (STA_TYPE_LEGACY_MASK | STA_TYPE_AP_MASK), - STA_TYPE_LEGACY_CLIENT = (STA_TYPE_LEGACY_MASK | STA_TYPE_CLIENT_MASK), - STA_TYPE_ADHOC_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_ADHOC_MASK), -#if CFG_ENABLE_WIFI_DIRECT - STA_TYPE_P2P_GO = (STA_TYPE_P2P_MASK | STA_TYPE_AP_MASK), - STA_TYPE_P2P_GC = (STA_TYPE_P2P_MASK | STA_TYPE_CLIENT_MASK), -#endif -#if CFG_ENABLE_BT_OVER_WIFI - STA_TYPE_BOW_AP = (STA_TYPE_BOW_MASK | STA_TYPE_AP_MASK), - STA_TYPE_BOW_CLIENT = (STA_TYPE_BOW_MASK | STA_TYPE_CLIENT_MASK), -#endif - STA_TYPE_DLS_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_DLS_MASK) -} ENUM_STA_TYPE_T, *P_ENUM_STA_TYPE_T; - -/* The type of BSS we discovered */ -typedef enum _ENUM_BSS_TYPE_T { - BSS_TYPE_INFRASTRUCTURE = 1, - BSS_TYPE_IBSS, - BSS_TYPE_P2P_DEVICE, - BSS_TYPE_BOW_DEVICE, - BSS_TYPE_NUM -} ENUM_BSS_TYPE_T, *P_ENUM_BSS_TYPE_T; - -/*----------------------------------------------------------------------------*/ -/* RSN structures */ -/*----------------------------------------------------------------------------*/ -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack(1) -//#endif - -#define MAX_NUM_SUPPORTED_CIPHER_SUITES 8 /* max number of supported cipher suites */ -#if CFG_SUPPORT_802_11W -#define MAX_NUM_SUPPORTED_AKM_SUITES 8 /* max number of supported AKM suites */ -#else -#define MAX_NUM_SUPPORTED_AKM_SUITES 6 /* max number of supported AKM suites */ -#endif - -/* Structure of RSN Information */ -typedef struct _RSN_INFO_T { - UINT_8 ucElemId; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_AKM_SUITES]; - UINT_16 u2RsnCap; - BOOLEAN fgRsnCapPresent; -} /*__KAL_ATTRIB_PACKED__*/ RSN_INFO_T, *P_RSN_INFO_T; - -#define MAX_NUM_SUPPORTED_WAPI_AKM_SUITES 1 /* max number of supported AKM suites */ -#define MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES 1 /* max number of supported cipher suites */ - -/* Structure of WAPI Information */ -typedef struct _WAPI_INFO_T { - UINT_8 ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_WAPI_AKM_SUITES]; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES]; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2WapiCap; - UINT_16 u2Bkid; - UINT_8 aucBkid[1][16]; -} /* __KAL_ATTRIB_PACKED__*/ WAPI_INFO_T, *P_WAPI_INFO_T; - -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack() -//#endif - - -#if CFG_ENABLE_WIFI_DIRECT - -typedef struct _P2P_DEVICE_TYPE_T { - UINT_16 u2CategoryID; - UINT_16 u2SubCategoryID; -} P2P_DEVICE_TYPE_T, *P_P2P_DEVICE_TYPE_T; - -typedef struct _P2P_DEVICE_DESC_T { - LINK_ENTRY_T rLinkEntry; - BOOLEAN fgDevInfoValid; - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Interface Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method support. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[8]; // Reference to P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT - UINT_16 u2NameLength; - UINT_8 aucName[32]; // Reference to WPS_ATTRI_MAX_LEN_DEVICE_NAME - // TODO: Service Information or PasswordID valid? -} P2P_DEVICE_DESC_T, *P_P2P_DEVICE_DESC_T; - -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static const UINT_8 aucRateIndex2RateCode[PREAMBLE_OPTION_NUM][RATE_NUM] = { - { /* Long Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_LONG, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_LONG, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_LONG, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Short Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_SHORT, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_SHORT, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_SHORT, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Mixed Mode(Option) */ - RATE_MM_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_MM_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_MM_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_MM_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_MM_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_MM_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_MM_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_MM_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_MM_MCS_32 /* RATE_MCS32_INDEX, */ - }, - { /* Green Field(Option) */ - RATE_GF_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_GF_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_GF_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_GF_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_GF_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_GF_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_GF_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_GF_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_GF_MCS_32 /* RATE_MCS32_INDEX, */ - } -}; - -static const UINT_8 aucRateTableSize[PREAMBLE_OPTION_NUM] = { - RATE_HT_PHY_INDEX, - RATE_HT_PHY_INDEX, - HT_RATE_NUM, - HT_RATE_NUM -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros to get and set the wireless LAN frame fields those are 16/32 bits in - length. */ -#define WLAN_GET_FIELD_16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0]) | ((UINT_16) __cp[1] << 8); \ - } - -#define WLAN_GET_FIELD_BE16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0] << 8) | ((UINT_16) __cp[1]); \ - } - -#define WLAN_GET_FIELD_32(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_32)(_value_p) = ((UINT_32) __cp[0]) | ((UINT_32) __cp[1] << 8) | \ - ((UINT_32) __cp[2] << 16) | ((UINT_32) __cp[3] << 24); \ - } - -#define WLAN_GET_FIELD_64(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_64)(_value_p) = \ - ((UINT_64) __cp[0]) | ((UINT_64) __cp[1] << 8) | \ - ((UINT_64) __cp[2] << 16) | ((UINT_64) __cp[3] << 24) | \ - ((UINT_64) __cp[4] << 32) | ((UINT_64) __cp[5] << 40) | \ - ((UINT_64) __cp[6] << 48) | ((UINT_64) __cp[7] << 56); \ - } - -#define WLAN_SET_FIELD_16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - } - -#define WLAN_SET_FIELD_BE16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) ((_value) >> 8); \ - __cp[1] = (UINT_8) (_value); \ - } - -#define WLAN_SET_FIELD_32(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - __cp[2] = (UINT_8) ((_value) >> 16); \ - __cp[3] = (UINT_8) ((_value) >> 24); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_DEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic_cmd_event.h deleted file mode 100755 index e54dd3209c00..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic_cmd_event.h +++ /dev/null @@ -1,1936 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic_cmd_event.h#1 $ -*/ - -/*! \file "nic_cmd_event.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: nic_cmd_event.h $ - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * redefine the CMD_ID_SET_TXPWR_CTRL value. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 30 2011 cm.chang - * [WCXRP00001128] [MT5931 Wi-Fi][FW] Update BB/RF setting based on RF doc v0.7 for LGE spec - * 1. Add a new CMD for driver to set device mode - * 2. Update calibration parameters - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 26 2011 cp.wu - * [WCXRP00001065] [MT6620 Wi-Fi][MT5931][FW][DRV] Adding parameter for controlling minimum channel dwell time for scanning - * add interface for control minimum channel dwell time for scanning. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * add osc stable time command structure - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update cmd format of BSS INFO, always sync OwnMac to FW no matter P2P is enabled or not.. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Sync HT operation element information from host to FW - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 15 2010 cm.chang - * NULL - * Add new CMD for TX power, 5G power offset and power parameters - * - * 09 07 2010 yuche.tsai - * NULL - * Add a pointer in P2P SCAN RESULT structure. This pointer - * is pointed to a IE buffer for this P2p device. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 george.huang - * NULL - * add new CMD ID definition - * - * 08 16 2010 yuche.tsai - * NULL - * Add a field in BSS INFO cmd to change interface address for P2P. (switching between Device Addr & Interface Addr) - * - * 08 12 2010 yuche.tsai - * NULL - * Add interface address indication when indicate connection status. - * It is requested by supplicant to do 4 way handshake. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Change data structure for P2P Device scan result, all channel time for scan command. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 26 2010 yuche.tsai - * - * Add P2P Device Found Event. - * Channel extention option in scan abort command. - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 george.huang - * - * DWORD align for the CMD data structure - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 cp.wu - * - * reorder members of CMD_SET_BSS_INFO. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add BSS/STA_REC commands for integration. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * the frequency is used for adhoc connection only - * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * OID_802_11_RSSI, - * * * OID_802_11_RSSI_TRIGGER, - * * * OID_802_11_STATISTICS, - * * * OID_802_11_DISASSOCIATE, - * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * and result is retrieved by get ATInfo instead - * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-12-11 18:35:07 GMT mtk02752 -** add CMD added in CMD/EVEN document v0.8 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-12-10 16:39:37 GMT mtk02752 -** eliminate unused definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-12-10 09:55:11 GMT mtk02752 -** command ID/event ID revised -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-09 13:57:37 GMT MTK02468 -** Added event ids (EVENT_ID_RX_ADDBA and EVENT_ID_RX_DELBA) -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-08 17:35:39 GMT mtk02752 -** + add event ID for EVENT_ID_TEST_STATUS (rf test) -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-12-07 23:01:09 GMT mtk02752 -** add data structure for RF_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-12-03 16:22:56 GMT mtk01461 -** Modify the element - i4RSSI in EVENT of SCAN RESULT -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-30 10:54:44 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T, while 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-26 10:16:58 GMT mtk02752 -** resync EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-25 21:34:01 GMT mtk02752 -** sync. EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-25 21:03:48 GMT mtk02752 -** refine MGMT_FRAME -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-25 18:17:47 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result and presume max. ie length = 600 bytes -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 22:41:20 GMT mtk02752 -** add EVENT_SCAN_RESULT_T definition -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-11-23 20:29:16 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-11-23 14:46:01 GMT mtk02752 -** add new command/event structure upon CM@SD1's documentation -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-13 15:13:40 GMT mtk02752 -** add command definition for CMD_BUILD_CONNECTION and EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-20 12:22:22 GMT mtk01461 -** Add SeqNum field to Event Header -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:11 GMT mtk01461 -** Update structure of HIF_EVENT_HEADER_T and EVENT_HDR_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 12:10:36 GMT mtk01461 -** Add Common Set CMD Callback for MCR Write and other Set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:17 GMT mtk01461 -** Command Done Handler -*/ -#ifndef _NIC_CMD_EVENT_H -#define _NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CMD_STATUS_SUCCESS 0 -#define CMD_STATUS_REJECTED 1 -#define CMD_STATUS_UNKNOWN 2 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -#define MAX_IE_LENGTH (600) -#define MAX_WSC_IE_LENGTH (400) - -/* Action field in structure CMD_CH_PRIVILEGE_T */ -#define CMD_CH_ACTION_REQ 0 -#define CMD_CH_ACTION_ABORT 1 - -/* Status field in structure EVENT_CH_PRIVILEGE_T */ -#define EVENT_CH_STATUS_GRANT 0 - - -typedef enum _ENUM_CMD_ID_T { - CMD_ID_TEST_MODE = 1, /* 0x01 (Set) */ - CMD_ID_RESET_REQUEST, /* 0x02 (Set) */ - CMD_ID_BUILD_CONNECTION, /* 0x03 (Set) */ - CMD_ID_SCAN_REQ_V2, /* 0x04 (Set) */ - CMD_ID_NIC_POWER_CTRL, /* 0x05 (Set) */ - CMD_ID_POWER_SAVE_MODE, /* 0x06 (Set) */ - CMD_ID_LINK_ATTRIB, /* 0x07 (Set) */ - CMD_ID_ADD_REMOVE_KEY, /* 0x08 (Set) */ - CMD_ID_DEFAULT_KEY_ID, /* 0x09 (Set) */ - CMD_ID_INFRASTRUCTURE, /* 0x0a (Set) */ - CMD_ID_SET_RX_FILTER, /* 0x0b (Set) */ - CMD_ID_DOWNLOAD_BUF, /* 0x0c (Set) */ - CMD_ID_WIFI_START, /* 0x0d (Set) */ - CMD_ID_CMD_BT_OVER_WIFI, /* 0x0e (Set) */ - CMD_ID_SET_MEDIA_CHANGE_DELAY_TIME, /* 0x0f (Set) */ - CMD_ID_SEND_ADDBA_RSP, /* 0x10 (Set) */ - CMD_ID_WAPI_MODE, /* 0x11 (Set) (obsolete) */ - CMD_ID_WAPI_ASSOC_INFO, /* 0x12 (Set) (obsolete) */ - CMD_ID_SET_DOMAIN_INFO, /* 0x13 (Set) */ - CMD_ID_SET_IP_ADDRESS, /* 0x14 (Set) */ - CMD_ID_BSS_ACTIVATE_CTRL, /* 0x15 (Set) */ - CMD_ID_SET_BSS_INFO, /* 0x16 (Set) */ - CMD_ID_UPDATE_STA_RECORD, /* 0x17 (Set) */ - CMD_ID_REMOVE_STA_RECORD, /* 0x18 (Set) */ - CMD_ID_INDICATE_PM_BSS_CREATED, /* 0x19 (Set) */ - CMD_ID_INDICATE_PM_BSS_CONNECTED, /* 0x1a (Set) */ - CMD_ID_INDICATE_PM_BSS_ABORT, /* 0x1b (Set) */ - CMD_ID_UPDATE_BEACON_CONTENT, /* 0x1c (Set) */ - CMD_ID_SET_BSS_RLM_PARAM, /* 0x1d (Set) */ - CMD_ID_SCAN_REQ, /* 0x1e (Set) */ - CMD_ID_SCAN_CANCEL, /* 0x1f (Set) */ - CMD_ID_CH_PRIVILEGE, /* 0x20 (Set) */ - CMD_ID_UPDATE_WMM_PARMS, /* 0x21 (Set) */ - CMD_ID_SET_WMM_PS_TEST_PARMS, /* 0x22 (Set) */ - CMD_ID_TX_AMPDU, /* 0x23 (Set) */ - CMD_ID_ADDBA_REJECT, /* 0x24 (Set) */ - CMD_ID_SET_PS_PROFILE_ADV, /* 0x25 (Set) */ - CMD_ID_SET_RAW_PATTERN, /* 0x26 (Set) */ - CMD_ID_CONFIG_PATTERN_FUNC, /* 0x27 (Set) */ - CMD_ID_SET_TX_PWR, /* 0x28 (Set) */ - CMD_ID_SET_5G_PWR_OFFSET, /* 0x29 (Set) */ - CMD_ID_SET_PWR_PARAM, /* 0x2A (Set) */ - CMD_ID_P2P_ABORT, /* 0x2B (Set) */ -#if CFG_STRESS_TEST_SUPPORT - CMD_ID_RANDOM_RX_RESET_EN = 0x2C, /* 0x2C (Set ) */ - CMD_ID_RANDOM_RX_RESET_DE = 0x2D, /* 0x2D (Set ) */ - CMD_ID_SAPP_EN = 0x2E, /* 0x2E (Set ) */ - CMD_ID_SAPP_DE = 0x2F, /* 0x2F (Set ) */ -#endif - CMD_ID_ROAMING_TRANSIT = 0x30, /* 0x30 (Set) */ - CMD_ID_SET_PHY_PARAM, /* 0x31 (Set) */ - CMD_ID_SET_NOA_PARAM, /* 0x32 (Set) */ - CMD_ID_SET_OPPPS_PARAM, /* 0x33 (Set) */ - CMD_ID_SET_UAPSD_PARAM, /* 0x34 (Set) */ - CMD_ID_SET_SIGMA_STA_SLEEP, /* 0x35 (Set) */ - CMD_ID_SET_EDGE_TXPWR_LIMIT, /* 0x36 (Set) */ - CMD_ID_SET_DEVICE_MODE, /* 0x37 (Set) */ - CMD_ID_SET_TXPWR_CTRL, /* 0x38 (Set) */ - CMD_ID_SET_AUTOPWR_CTRL, /* 0x39 (Set) */ - CMD_ID_SET_WFD_CTRL = 0x3A, /* 0x3A (Set) */ - - CMD_ID_GET_NIC_CAPABILITY = 0x80, /* 0x80 (Query) */ - CMD_ID_GET_LINK_QUALITY, /* 0x81 (Query) */ - CMD_ID_GET_STATISTICS, /* 0x82 (Query) */ - CMD_ID_GET_CONNECTION_STATUS, /* 0x83 (Query) */ - CMD_ID_GET_ASSOC_INFO, /* 0x84 (Query) (obsolete) */ - CMD_ID_GET_STA_STATISTICS = 0x85, /* 0x85 (Query) */ - - CMD_ID_BASIC_CONFIG = 0xc1, /* 0xc1 (Set / Query) */ - CMD_ID_ACCESS_REG, /* 0xc2 (Set / Query) */ - CMD_ID_MAC_MCAST_ADDR, /* 0xc3 (Set / Query) */ - CMD_ID_802_11_PMKID, /* 0xc4 (Set / Query) */ - CMD_ID_ACCESS_EEPROM, /* 0xc5 (Set / Query) */ - CMD_ID_SW_DBG_CTRL, /* 0xc6 (Set / Query) */ -#if 1/* CFG_SUPPORT_ANTI_PIRACY */ - CMD_ID_SEC_CHECK, /* 0xc7 (Set / Query) */ -#endif - CMD_ID_DUMP_MEM, /* 0xc8 (Query) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_ID_SET_RDD_CH = 0xE1, -#endif - - CMD_ID_SET_BWCS = 0xF1, -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - CMD_ID_SET_OSC = 0xf2, -#endif -#if CFG_SUPPORT_BUILD_DATE_CODE - CMD_ID_GET_BUILD_DATE_CODE = 0xF8, -#endif - CMD_ID_GET_BSS_INFO = 0xF9 - -} ENUM_CMD_ID_T, *P_ENUM_CMD_ID_T; - -typedef enum _ENUM_EVENT_ID_T { - EVENT_ID_CMD_RESULT = 1, /* 0x01 (Query) */ - EVENT_ID_NIC_CAPABILITY, /* 0x02 (Query) */ - EVENT_ID_CONNECTION_STATUS, /* 0x03 (Query / Unsolicited) (obsolete) */ - EVENT_ID_SCAN_RESULT, /* 0x04 (Query / Unsolicited) (obselete) */ - EVENT_ID_LINK_QUALITY, /* 0x05 (Query / Unsolicited) */ - EVENT_ID_STATISTICS, /* 0x06 (Query) */ - EVENT_ID_MIC_ERR_INFO, /* 0x07 (Unsolicited) */ - EVENT_ID_ASSOC_INFO, /* 0x08 (Query - CMD_ID_GET_ASSOC_INFO) */ - EVENT_ID_BASIC_CONFIG, /* 0x09 (Query - CMD_ID_BASIC_CONFIG) */ - EVENT_ID_ACCESS_REG, /* 0x0a (Query - CMD_ID_ACCESS_REG) */ - EVENT_ID_MAC_MCAST_ADDR, /* 0x0b (Query - CMD_ID_MAC_MCAST_ADDR) */ - EVENT_ID_802_11_PMKID, /* 0x0c (Query - CMD_ID_802_11_PMKID) */ - EVENT_ID_ACCESS_EEPROM, /* 0x0d (Query - CMD_ID_ACCESS_EEPROM) */ - EVENT_ID_SLEEPY_NOTIFY, /* 0x0e (Query) */ - EVENT_ID_BT_OVER_WIFI, /* 0x0f (Unsolicited) */ - EVENT_ID_TEST_STATUS, /* 0x10 (Query - CMD_ID_TEST_MODE) */ - EVENT_ID_RX_ADDBA, /* 0x11 (Unsolicited) (obsolete) */ - EVENT_ID_RX_DELBA, /* 0x12 (Unsolicited) (obsolete) */ - EVENT_ID_ACTIVATE_STA_REC_T, /* 0x13 (Unsolicited) */ - EVENT_ID_DEACTIVATE_STA_REC_T, /* 0x14 (Unsolicited) */ - EVENT_ID_SCAN_DONE, /* 0x15 (Unsoiicited) */ - EVENT_ID_RX_FLUSH, /* 0x16 (Unsolicited) */ - EVENT_ID_TX_DONE, /* 0x17 (Unsolicited) */ - EVENT_ID_CH_PRIVILEGE, /* 0x18 (Unsolicited) */ - EVENT_ID_BSS_ABSENCE_PRESENCE = 0x19, /* 0x19 (Unsolicited) */ - EVENT_ID_STA_CHANGE_PS_MODE, /* 0x1A (Unsolicited) */ - EVENT_ID_BSS_BEACON_TIMEOUT, /* 0x1B (Unsolicited) */ - EVENT_ID_UPDATE_NOA_PARAMS, /* 0x1C (Unsolicited) */ - EVENT_ID_AP_OBSS_STATUS, /* 0x1D (Unsolicited) */ - EVENT_ID_STA_UPDATE_FREE_QUOTA, /* 0x1E (Unsolicited) */ - EVENT_ID_SW_DBG_CTRL, /* 0x1F (Query - CMD_ID_SW_DBG_CTRL) */ - EVENT_ID_ROAMING_STATUS, /* 0x20 (Unsolicited) */ - EVENT_ID_STA_AGING_TIMEOUT, /* 0x21 (Unsolicited) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - EVENT_ID_SEC_CHECK_RSP, /* 0x22 (Unsolicited) */ -#endif - EVENT_ID_SEND_DEAUTH, /* 0x23 (Unsolicited) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - EVENT_ID_UPDATE_RDD_STATUS, /* 0x24 (Unsolicited) */ -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - EVENT_ID_UPDATE_BWCS_STATUS = 0x25, /* 0x25 (Unsolicited) */ - EVENT_ID_UPDATE_BCM_DEBUG, /* 0x26 (Unsolicited) */ -#endif - EVENT_ID_RX_ERR, - EVENT_ID_DUMP_MEM, - EVENT_ID_STA_STATISTICS= 0x29, /* 0x29 (Query ) */ - EVENT_ID_STA_STATISTICS_UPDATE, /* 0x2A (Unsolicited) */ - -#if CFG_SUPPORT_BUILD_DATE_CODE - EVENT_ID_BUILD_DATE_CODE = 0xF8, -#endif - EVENT_ID_GET_AIS_BSS_INFO = 0xF9 - -} ENUM_EVENT_ID_T, *P_ENUM_EVENT_ID_T; - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#ifndef LINUX -typedef UINT_8 CMD_STATUS; -#endif -/* for Event Packet (via HIF-RX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_CMD_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucCID; - UINT_8 ucSetQuery; - UINT_8 ucSeqNum; - UINT_8 aucReserved2; - - UINT_8 aucBuffer[0]; -} WIFI_CMD_T, *P_WIFI_CMD_T; - -/* for Command Packet (via HIF-TX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_EVENT_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - UINT_8 aucBuffer[0]; -} WIFI_EVENT_T, *P_WIFI_EVENT_T; - -// CMD_ID_TEST_MODE -typedef struct _CMD_TEST_CTRL_T { - UINT_8 ucAction; - UINT_8 aucReserved[3]; - union { - UINT_32 u4OpMode; - UINT_32 u4ChannelFreq; - PARAM_MTK_WIFI_TEST_STRUC_T rRfATInfo; - } u; -} CMD_TEST_CTRL_T, *P_CMD_TEST_CTRL_T; - -// EVENT_TEST_STATUS -typedef struct _PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T { - UINT_32 u4PktSentStatus; - UINT_32 u4PktSentCount; - UINT_16 u2AvgAlc; - UINT_8 ucCckGainControl; - UINT_8 ucOfdmGainControl; -} PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T; - -typedef struct _PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T { - UINT_32 u4IntRxOk; /*!< number of packets that Rx ok from interrupt */ - UINT_32 u4IntCrcErr; /*!< number of packets that CRC error from interrupt */ - UINT_32 u4IntShort; /*!< number of packets that is short preamble from interrupt */ - UINT_32 u4IntLong; /*!< number of packets that is long preamble from interrupt */ - UINT_32 u4PauRxPktCount; /*!< number of packets that Rx ok from PAU */ - UINT_32 u4PauCrcErrCount; /*!< number of packets that CRC error from PAU */ - UINT_32 u4PauRxFifoFullCount; /*!< number of packets that is short preamble from PAU */ - UINT_32 u4PauCCACount; /*!< CCA rising edge count */ -} PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T; - -typedef union _EVENT_TEST_STATUS { - PARAM_MTK_WIFI_TEST_STRUC_T rATInfo; -// PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T rTxStatus; -// PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T rRxStatus; -} EVENT_TEST_STATUS, *P_EVENT_TEST_STATUS; - -// CMD_BUILD_CONNECTION -typedef struct _CMD_BUILD_CONNECTION { - UINT_8 ucInfraMode; - UINT_8 ucAuthMode; - UINT_8 ucEncryptStatus; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - - /* Ad-hoc mode */ - UINT_16 u2BeaconPeriod; - UINT_16 u2ATIMWindow; - UINT_8 ucJoinOnly; - UINT_8 ucReserved; - UINT_32 u4FreqInKHz; - - /* for faster connection */ - UINT_8 aucScanResult[0]; -} CMD_BUILD_CONNECTION, *P_CMD_BUILD_CONNECTION; - -//CMD_ADD_REMOVE_KEY -typedef struct _CMD_802_11_KEY { - UINT_8 ucAddRemove; - UINT_8 ucTxKey; - UINT_8 ucKeyType; - UINT_8 ucIsAuthenticator; - UINT_8 aucPeerAddr[6]; - UINT_8 ucNetType; - UINT_8 ucAlgorithmId; - UINT_8 ucKeyId; - UINT_8 ucKeyLen; - UINT_8 aucReverved[2]; - UINT_8 aucKeyMaterial[32]; - UINT_8 aucKeyRsc[16]; -} CMD_802_11_KEY, *P_CMD_802_11_KEY; - -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; - -typedef struct _CMD_802_11_PMKID -{ - ULONG u4BSSIDInfoCount; - P_PMKID_ENTRY_T arPMKIDInfo[1]; -} CMD_802_11_PMKID, *P_CMD_802_11_PMKID; - -// CMD_BASIC_CONFIG -typedef struct _CMD_CSUM_OFFLOAD { - UINT_16 u2RxChecksum; // bit0: IP, bit1: UDP, bit2: TCP - UINT_16 u2TxChecksum; // bit0: IP, bit1: UDP, bit2: TCP -} CMD_CSUM_OFFLOAD, *P_CMD_CSUM_OFFLOAD; - -typedef struct _CMD_BASIC_CONFIG { - PARAM_MAC_ADDRESS rMyMacAddr; - UINT_8 ucNative80211; - UINT_8 aucReserved[1]; - - CMD_CSUM_OFFLOAD rCsumOffload; -} CMD_BASIC_CONFIG, *P_CMD_BASIC_CONFIG, EVENT_BASIC_CONFIG, *P_EVENT_BASIC_CONFIG; - -// CMD_MAC_MCAST_ADDR -typedef struct _CMD_MAC_MCAST_ADDR { - UINT_32 u4NumOfGroupAddr; - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; - PARAM_MAC_ADDRESS arAddress[MAX_NUM_GROUP_ADDR]; -} CMD_MAC_MCAST_ADDR, *P_CMD_MAC_MCAST_ADDR, EVENT_MAC_MCAST_ADDR, *P_EVENT_MAC_MCAST_ADDR; - -// CMD_ACCESS_EEPROM -typedef struct _CMD_ACCESS_EEPROM { - UINT_16 u2Offset; - UINT_16 u2Data; -} CMD_ACCESS_EEPROM, *P_CMD_ACCESS_EEPROM, EVENT_ACCESS_EEPROM, *P_EVENT_ACCESS_EEPROM; - -typedef struct _CMD_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} CMD_CUSTOM_NOA_PARAM_STRUC_T, *P_CMD_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} CMD_CUSTOM_OPPPS_PARAM_STRUC_T, *P_CMD_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} CMD_CUSTOM_UAPSD_PARAM_STRUC_T, *P_CMD_CUSTOM_UAPSD_PARAM_STRUC_T; - -// EVENT_CONNECTION_STATUS -typedef struct _EVENT_CONNECTION_STATUS { - UINT_8 ucMediaStatus; - UINT_8 ucReasonOfDisconnect; - - UINT_8 ucInfraMode; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - UINT_8 ucAuthenMode; - UINT_8 ucEncryptStatus; - UINT_16 u2BeaconPeriod; - UINT_16 u2AID; - UINT_16 u2ATIMWindow; - UINT_8 ucNetworkType; - UINT_8 aucReserved[1]; - UINT_32 u4FreqInKHz; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucInterfaceAddr[PARAM_MAC_ADDR_LEN]; -#endif - -} EVENT_CONNECTION_STATUS, *P_EVENT_CONNECTION_STATUS; - -// EVENT_NIC_CAPABILITY -typedef struct _EVENT_NIC_CAPABILITY { - UINT_16 u2ProductID; - UINT_16 u2FwVersion; - UINT_16 u2DriverVersion; - UINT_8 ucHw5GBandDisabled; - UINT_8 ucEepromUsed; - UINT_8 ucEfuseValid; - UINT_8 ucMacAddrValid; -#if CFG_REPORT_RFBB_VERSION - UINT_8 ucRfVersion; - UINT_8 ucPhyVersion; -#endif -#if CFG_ENABLE_CAL_LOG - UINT_8 ucRfCalFail; - UINT_8 ucBbCalFail; -#endif - UINT_8 aucReserved[2]; -} EVENT_NIC_CAPABILITY, *P_EVENT_NIC_CAPABILITY; - -// modified version of WLAN_BEACON_FRAME_BODY_T for simplier buffering -typedef struct _WLAN_BEACON_FRAME_BODY_T_LOCAL { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[MAX_IE_LENGTH]; /* Various IEs, start from SSID */ - UINT_16 u2IELength; /* This field is *NOT* carried by F/W but caculated by nic_rx */ -} WLAN_BEACON_FRAME_BODY_T_LOCAL, *P_WLAN_BEACON_FRAME_BODY_T_LOCAL; - -// EVENT_SCAN_RESULT -typedef struct _EVENT_SCAN_RESULT_T { - INT_32 i4RSSI; - UINT_32 u4LinkQuality; - UINT_32 u4DSConfig; /* Center frequency */ - UINT_32 u4DomainInfo; /* Require CM opinion */ - UINT_32 u4Reserved; - UINT_8 ucNetworkType; - UINT_8 ucOpMode; - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - WLAN_BEACON_FRAME_BODY_T_LOCAL rBeaconFrameBody; -} EVENT_SCAN_RESULT_T, *P_EVENT_SCAN_RESULT_T; - -/* event of tkip mic error */ -typedef struct _EVENT_MIC_ERR_INFO -{ - UINT_32 u4Flags; -} EVENT_MIC_ERR_INFO, *P_EVENT_MIC_ERR_INFO; - -typedef struct _EVENT_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} EVENT_PMKID_CANDIDATE_LIST_T, *P_EVENT_PMKID_CANDIDATE_LIST_T; - - -typedef struct _EVENT_CMD_RESULT { - UINT_8 ucCmdID; - UINT_8 ucStatus; - UINT_8 aucReserved[2]; -} EVENT_CMD_RESULT, *P_EVENT_CMD_RESULT; - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -typedef struct _CMD_MCU_LP_PARAM_T { - UINT_16 u2OscStableTime; - UINT_8 ucReserved[6]; -} CMD_MCU_LP_PARAM_T, *P_CMD_MCU_LP_PARAM_T; -#endif - - -// CMD_ID_ACCESS_REG & EVENT_ID_ACCESS_REG -typedef struct _CMD_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} CMD_ACCESS_REG, *P_CMD_ACCESS_REG; - -// CMD_DUMP_MEMORY -typedef struct _CMD_DUMP_MEM { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} CMD_DUMP_MEM, *P_CMD_DUMP_MEM; - -typedef struct _EVENT_DUMP_MEM_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; - UINT_8 aucBuffer[1]; -} EVENT_DUMP_MEM_T, *P_EVENT_DUMP_MEM_T; - -typedef struct _CMD_SW_DBG_CTRL_T { - UINT_32 u4Id; - UINT_32 u4Data; - /* Debug Support */ - UINT_32 u4DebugCnt[64]; -} CMD_SW_DBG_CTRL_T, *P_CMD_SW_DBG_CTRL_T; - - -// CMD_ID_LINK_ATTRIB -typedef struct _CMD_LINK_ATTRIB { - INT_8 cRssiTrigger; - UINT_8 ucDesiredRateLen; - UINT_16 u2DesiredRate[32]; - UINT_8 ucMediaStreamMode; - UINT_8 aucReserved[1]; -} CMD_LINK_ATTRIB, *P_CMD_LINK_ATTRIB; - -// CMD_ID_NIC_POWER_CTRL -typedef struct _CMD_NIC_POWER_CTRL { - UINT_8 ucPowerMode; - UINT_8 aucReserved[3]; -} CMD_NIC_POWER_CTRL, *P_CMD_NIC_POWER_CTRL; - -// CMD_ID_POWER_SAVE_MODE -typedef struct _CMD_PS_PROFILE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucPsProfile; - UINT_8 aucReserved[2]; -} CMD_PS_PROFILE_T, *P_CMD_PS_PROFILE_T; - - -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; -} EVENT_LINK_QUALITY, *P_EVENT_LINK_QUALITY; - -#if CFG_SUPPORT_P2P_RSSI_QUERY -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY_EX { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; - UINT_8 ucIsLQ0Rdy; - INT_8 cRssiP2P; /* For P2P Network. */ - INT_8 cLinkQualityP2P; - UINT_16 u2LinkSpeedP2P; - UINT_8 ucMediumBusyPercentageP2P; - UINT_8 ucIsLQ1Rdy; -} EVENT_LINK_QUALITY_EX, *P_EVENT_LINK_QUALITY_EX; -#endif - -// EVENT_ID_STATISTICS -typedef struct _EVENT_STATISTICS { - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; -} EVENT_STATISTICS, *P_EVENT_STATISTICS; - -// EVENT_ID_FW_SLEEPY_NOTIFY -typedef struct _EVENT_SLEEPY_NOTIFY { - UINT_8 ucSleepyState; - UINT_8 aucReserved[3]; -} EVENT_SLEEPY_NOTIFY, *P_EVENT_SLEEPY_NOTIFY; - -typedef struct _EVENT_ACTIVATE_STA_REC_T { - UINT_8 aucMacAddr[6]; - UINT_8 ucStaRecIdx; - UINT_8 ucNetworkTypeIndex; - BOOLEAN fgIsQoS; - BOOLEAN fgIsAP; - UINT_8 aucReserved[2]; -} EVENT_ACTIVATE_STA_REC_T, *P_EVENT_ACTIVATE_STA_REC_T; - -typedef struct _EVENT_DEACTIVATE_STA_REC_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_DEACTIVATE_STA_REC_T, *P_EVENT_DEACTIVATE_STA_REC_T; - -// CMD_BT_OVER_WIFI -typedef struct _CMD_BT_OVER_WIFI { - UINT_8 ucAction; /* 0: query, 1: setup, 2: destroy */ - UINT_8 ucChannelNum; - PARAM_MAC_ADDRESS rPeerAddr; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 PAL_Capabilities; - UINT_8 cMaxTxPower; - UINT_8 ucChannelBand; - UINT_8 ucReserved[1]; -} CMD_BT_OVER_WIFI, *P_CMD_BT_OVER_WIFI; - -// EVENT_BT_OVER_WIFI -typedef struct _EVENT_BT_OVER_WIFI { - UINT_8 ucLinkStatus; - UINT_8 ucSelectedChannel; - INT_8 cRSSI; - UINT_8 ucReserved[1]; -} EVENT_BT_OVER_WIFI, *P_EVENT_BT_OVER_WIFI; - -// Same with DOMAIN_SUBBAND_INFO -typedef struct _CMD_SUBBAND_INFO { - UINT_8 ucRegClass; - UINT_8 ucBand; - UINT_8 ucChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 aucReserved[3]; -} CMD_SUBBAND_INFO, *P_CMD_SUBBAND_INFO; - -// CMD_SET_DOMAIN_INFO -typedef struct _CMD_SET_DOMAIN_INFO_T { - UINT_16 u2CountryCode; - UINT_16 u2Reserved; - CMD_SUBBAND_INFO rSubBand[6]; - - UINT_8 uc2G4Bandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 uc5GBandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 aucReserved[2]; -} CMD_SET_DOMAIN_INFO_T, *P_CMD_SET_DOMAIN_INFO_T; - -// CMD_SET_IP_ADDRESS -typedef struct _IPV4_NETWORK_ADDRESS { - UINT_8 aucIpAddr[4]; -} IPV4_NETWORK_ADDRESS, *P_IPV4_NETWORK_ADDRESS; - -typedef struct _CMD_SET_NETWORK_ADDRESS_LIST { - UINT_8 ucNetTypeIndex; - UINT_8 ucAddressCount; - UINT_8 ucReserved[2]; - IPV4_NETWORK_ADDRESS arNetAddress[1]; -} CMD_SET_NETWORK_ADDRESS_LIST, *P_CMD_SET_NETWORK_ADDRESS_LIST; - -typedef struct _PATTERN_DESCRIPTION { - UINT_8 fgCheckBcA1; - UINT_8 fgCheckMcA1; - UINT_8 ePatternHeader; - UINT_8 fgAndOp; - UINT_8 fgNotOp; - UINT_8 ucPatternMask; - UINT_16 ucPatternOffset; - UINT_8 aucPattern[8]; -} PATTERN_DESCRIPTION, *P_PATTERN_DESCRIPTION; - -typedef struct _CMD_RAW_PATTERN_CONFIGURATION_T { - PATTERN_DESCRIPTION arPatternDesc[4]; -} CMD_RAW_PATTERN_CONFIGURATION_T, *P_CMD_RAW_PATTERN_CONFIGURATION_T; - -typedef struct _CMD_PATTERN_FUNC_CONFIG { - BOOLEAN fgBcA1En; - BOOLEAN fgMcA1En; - BOOLEAN fgBcA1MatchDrop; - BOOLEAN fgMcA1MatchDrop; -} CMD_PATTERN_FUNC_CONFIG, *P_CMD_PATTERN_FUNC_CONFIG; - - -typedef struct _EVENT_TX_DONE_T { - UINT_8 ucPacketSeq; - UINT_8 ucStatus; - UINT_16 u2SequenceNumber; - UINT_32 au4Reserved1; - UINT_32 au4Reserved2; - UINT_32 au4Reserved3; -} EVENT_TX_DONE_T, *P_EVENT_TX_DONE_T; - -typedef struct _CMD_BSS_ACTIVATE_CTRL { - UINT_8 ucNetTypeIndex; - UINT_8 ucActive; - UINT_8 aucReserved[2]; -} CMD_BSS_ACTIVATE_CTRL, *P_CMD_BSS_ACTIVATE_CTRL; - -typedef struct _CMD_SET_BSS_RLM_PARAM_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucRfBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucErpProtectMode; - UINT_8 ucHtProtectMode; - UINT_8 ucGfOperationMode; - UINT_8 ucTxRifsMode; - UINT_16 u2HtOpInfo3; - UINT_16 u2HtOpInfo2; - UINT_8 ucHtOpInfo1; - UINT_8 ucUseShortPreamble; - UINT_8 ucUseShortSlotTime; - UINT_8 ucCheckId; /* Fixed value: 0x72 */ -} CMD_SET_BSS_RLM_PARAM_T, *P_CMD_SET_BSS_RLM_PARAM_T; - -typedef struct _CMD_SET_BSS_INFO { - UINT_8 ucNetTypeIndex; - UINT_8 ucConnectionState; - UINT_8 ucCurrentOPMode; - UINT_8 ucSSIDLen; - UINT_8 aucSSID[32]; - UINT_8 aucBSSID[6]; - UINT_8 ucIsQBSS; - UINT_8 ucReserved1; - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucStaRecIdxOfAP; - UINT_8 ucReserved2; - UINT_8 ucReserved3; - UINT_8 ucNonHTBasicPhyType; /* For Slot Time and CWmin */ - UINT_8 ucAuthMode; - UINT_8 ucEncStatus; - UINT_8 ucPhyTypeSet; - UINT_8 aucOwnMac[6]; - UINT_8 fgWapiMode; - UINT_8 fgIsApMode; - UINT_8 aucRsv[1]; - CMD_SET_BSS_RLM_PARAM_T rBssRlmParam; -} CMD_SET_BSS_INFO, *P_CMD_SET_BSS_INFO; - -typedef struct _CMD_UPDATE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucStaType; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - UINT_16 u2AssocId; - UINT_16 u2ListenInterval; - UINT_8 ucNetTypeIndex; - UINT_8 ucDesiredPhyTypeSet; - UINT_16 u2DesiredNonHTRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucIsQoS; - UINT_8 ucIsUapsdSupported; - UINT_8 ucStaState; - UINT_8 ucMcsSet; - UINT_8 ucSupMcs32; - UINT_8 ucAmpduParam; - UINT_16 u2HtCapInfo; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; - UINT_8 ucRCPI; - UINT_8 ucNeedResp; - UINT_8 ucUapsdAc; /* b0~3: Trigger enabled, b4~7: Delivery enabled */ - UINT_8 ucUapsdSp; /* 0: all, 1: max 2, 2: max 4, 3: max 6 */ - UINT_8 aucReserved[3]; - /* TBD */ -} CMD_UPDATE_STA_RECORD_T, *P_CMD_UPDATE_STA_RECORD_T; - -typedef struct _CMD_REMOVE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucReserved; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; -} CMD_REMOVE_STA_RECORD_T, *P_CMD_REMOVE_STA_RECORD_T; - -typedef struct _CMD_INDICATE_PM_BSS_CREATED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 aucReserved[2]; -} CMD_INDICATE_PM_BSS_CREATED, *P_CMD_INDICATE_PM_BSS_CREATED; - -typedef struct _CMD_INDICATE_PM_BSS_CONNECTED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2AssocId; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 fgIsUapsdConnection; - UINT_8 ucBmpDeliveryAC; - UINT_8 ucBmpTriggerAC; - UINT_8 aucReserved[1]; -} CMD_INDICATE_PM_BSS_CONNECTED, *P_CMD_INDICATE_PM_BSS_CONNECTED; - -typedef struct _CMD_INDICATE_PM_BSS_ABORT { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} CMD_INDICATE_PM_BSS_ABORT, *P_CMD_INDICATE_PM_BSS_ABORT; - -typedef struct _CMD_BEACON_TEMPLATE_UPDATE { - UINT_8 ucUpdateMethod; // 0: update randomly, 1: update all, 2: delete all (1 and 2 will update directly without search) - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_16 u2Capability; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_BEACON_TEMPLATE_UPDATE, *P_CMD_BEACON_TEMPLATE_UPDATE; - -typedef struct _CMD_SET_WMM_PS_TEST_STRUC_T { - UINT_8 ucNetTypeIndex; - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ -} CMD_SET_WMM_PS_TEST_STRUC_T, *P_CMD_SET_WMM_PS_TEST_STRUC_T; - - -/* Definition for CHANNEL_INFO.ucBand: - * 0: Reserved - * 1: BAND_2G4 - * 2: BAND_5G - * Others: Reserved - */ -typedef struct _CHANNEL_INFO_T { - UINT_8 ucBand; - UINT_8 ucChannelNum; -} CHANNEL_INFO_T, *P_CHANNEL_INFO_T; - -typedef struct _CMD_SCAN_REQ_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucReserved[1]; - UINT_16 u2ChannelMinDwellTime; - UINT_8 aucSSID[32]; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ, *P_CMD_SCAN_REQ; - -typedef struct _CMD_SCAN_REQ_V2_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; - PARAM_SSID_T arSSID[4]; - UINT_16 u2ProbeDelayTime; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ_V2, *P_CMD_SCAN_REQ_V2; - -typedef struct _CMD_SCAN_CANCEL_T { - UINT_8 ucSeqNum; - UINT_8 ucIsExtChannel; /* For P2P channel extention. */ - UINT_8 aucReserved[2]; -} CMD_SCAN_CANCEL, *P_CMD_SCAN_CANCEL; - -typedef struct _EVENT_SCAN_DONE_T { - UINT_8 ucSeqNum; - UINT_8 ucSparseChannelValid; - CHANNEL_INFO_T rSparseChannel; -} EVENT_SCAN_DONE, *P_EVENT_SCAN_DONE; - -typedef struct _CMD_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucAction; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} CMD_CH_PRIVILEGE_T, *P_CMD_CH_PRIVILEGE_T; - -typedef struct _CMD_TX_PWR_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} CMD_TX_PWR_T, *P_CMD_TX_PWR_T; - -typedef struct _CMD_5G_PWR_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} CMD_5G_PWR_OFFSET_T, *P_CMD_5G_PWR_OFFSET_T; - -typedef struct _CMD_PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} CMD_PWR_PARAM_T, *P_CMD_PWR_PARAM_T; - - -typedef struct _CMD_PHY_PARAM_T { - UINT_8 aucData[144]; /* eFuse content */ -} CMD_PHY_PARAM_T, *P_CMD_PHY_PARAM_T; - -typedef struct _CMD_AUTO_POWER_PARAM_T { - UINT_8 ucType; /* 0: Disable 1: Enalbe 0x10: Change paramters */ - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 aucLevelRcpiTh[3]; - UINT_8 aucReserved2[1]; - INT_8 aicLevelPowerOffset[3]; /* signed, in unit of 0.5dBm */ - UINT_8 aucReserved3[1]; - UINT_8 aucReserved4[8]; -} CMD_AUTO_POWER_PARAM_T, *P_CMD_AUTO_POWER_PARAM_T; - - -typedef struct _EVENT_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucStatus; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4GrantInterval; /* In unit of ms */ -} EVENT_CH_PRIVILEGE_T, *P_EVENT_CH_PRIVILEGE_T; - -typedef struct _EVENT_BSS_BEACON_TIMEOUT_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} EVENT_BSS_BEACON_TIMEOUT_T, *P_EVENT_BSS_BEACON_TIMEOUT_T; - -typedef struct _EVENT_STA_AGING_TIMEOUT_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_STA_AGING_TIMEOUT_T, *P_EVENT_STA_AGING_TIMEOUT_T; - -typedef struct _EVENT_NOA_TIMING_T { - UINT_8 fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} EVENT_NOA_TIMING_T, *P_EVENT_NOA_TIMING_T; - -typedef struct _EVENT_UPDATE_NOA_PARAMS_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 fgEnableOppPS; - UINT_16 u2CTWindow; - - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - EVENT_NOA_TIMING_T arEventNoaTiming[8/*P2P_MAXIMUM_NOA_COUNT*/]; -} EVENT_UPDATE_NOA_PARAMS_T, *P_EVENT_UPDATE_NOA_PARAMS_T; - -typedef struct _EVENT_AP_OBSS_STATUS_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucObssErpProtectMode; - UINT_8 ucObssHtProtectMode; - UINT_8 ucObssGfOperationMode; - UINT_8 ucObssRifsOperationMode; - UINT_8 ucObssBeaconForcedTo20M; - UINT_8 aucReserved[2]; -} EVENT_AP_OBSS_STATUS_T, *P_EVENT_AP_OBSS_STATUS_T; - -typedef struct _CMD_EDGE_TXPWR_LIMIT_T { - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - INT_8 cReserved; -} CMD_EDGE_TXPWR_LIMIT_T, *P_CMD_EDGE_TXPWR_LIMIT_T; - -typedef struct _CMD_SET_DEVICE_MODE_T { - UINT_16 u2ChipID; - UINT_16 u2Mode; -} CMD_SET_DEVICE_MODE_T, *P_CMD_SET_DEVICE_MODE_T; - - -#if CFG_SUPPORT_RDD_TEST_MODE -typedef struct _CMD_RDD_CH_T { - UINT_8 ucRddTestMode; - UINT_8 ucRddShutCh; - UINT_8 ucRddStartCh; - UINT_8 ucRddStopCh; - UINT_8 ucRddDfs; - UINT_8 ucReserved; - UINT_8 ucReserved1; - UINT_8 ucReserved2; -} CMD_RDD_CH_T, *P_CMD_RDD_CH_T; - -typedef struct _EVENT_RDD_STATUS_T { - UINT_8 ucRddStatus; - UINT_8 aucReserved[3]; -} EVENT_RDD_STATUS_T, *P_EVENT_RDD_STATUS_T; -#endif - -typedef struct _EVENT_AIS_BSS_INFO_T{ - ENUM_PARAM_MEDIA_STATE_T eConnectionState; /* Connected Flag used in AIS_NORMAL_TR */ - ENUM_OP_MODE_T eCurrentOPMode; /* Current Operation Mode - Infra/IBSS */ - BOOLEAN fgIsNetActive; /* TRUE if this network has been actived */ - UINT_8 ucReserved[3]; -}EVENT_AIS_BSS_INFO_T, *P_EVENT_AIS_BSS_INFO_T; - -typedef struct _CMD_SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} CMD_SET_TXPWR_CTRL_T, *P_CMD_SET_TXPWR_CTRL_T; - -#if CFG_SUPPORT_BUILD_DATE_CODE -typedef struct _CMD_GET_BUILD_DATE_CODE { - UINT_8 aucReserved[4]; -} CMD_GET_BUILD_DATE_CODE, *P_CMD_GET_BUILD_DATE_CODE; - -typedef struct _EVENT_BUILD_DATE_CODE { - UINT_8 aucDateCode[16]; -} EVENT_BUILD_DATE_CODE, *P_EVENT_BUILD_DATE_CODE; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - - - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* for timeout check */ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -#if CFG_SUPPORT_BUILD_DATE_CODE -VOID -nicCmdEventBuildDateCode ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); -#endif - -VOID -nicCmdEventGetBSSInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic_init_cmd_event.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic_init_cmd_event.h deleted file mode 100755 index 33886c98045a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/nic_init_cmd_event.h +++ /dev/null @@ -1,180 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic_init_cmd_event.h#1 $ -*/ - -/*! \file "nic_init_cmd_event.h" - \brief This file contains the declairation file of the WLAN initialization routines - for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: nic_init_cmd_event.h $ - * - * 09 26 2011 cp.wu - * [WCXRP00001011] [MT6628 Wi-Fi] Firmware Download Agent: make CRC validation as an optional feature - * add definition for disabling CRC32 validation (for MT6628 only) - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * -*/ -#ifndef _NIC_INIT_CMD_EVENT_H -#define _NIC_INIT_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INIT_CMD_STATUS_SUCCESS 0 -#define INIT_CMD_STATUS_REJECTED_INVALID_PARAMS 1 -#define INIT_CMD_STATUS_REJECTED_CRC_ERROR 2 -#define INIT_CMD_STATUS_REJECTED_DECRYPT_FAIL 3 -#define INIT_CMD_STATUS_UNKNOWN 4 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -typedef enum _ENUM_INIT_CMD_ID { - INIT_CMD_ID_DOWNLOAD_BUF = 1, - INIT_CMD_ID_WIFI_START, - INIT_CMD_ID_ACCESS_REG, - INIT_CMD_ID_QUERY_PENDING_ERROR -} ENUM_INIT_CMD_ID, *P_ENUM_INIT_CMD_ID; - -typedef enum _ENUM_INIT_EVENT_ID { - INIT_EVENT_ID_CMD_RESULT = 1, - INIT_EVENT_ID_ACCESS_REG, - INIT_EVENT_ID_PENDING_ERROR -} ENUM_INIT_EVENT_ID, *P_ENUM_INIT_EVENT_ID; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_8 CMD_STATUS; - -// commands -typedef struct _INIT_WIFI_CMD_T { - UINT_8 ucCID; - UINT_8 ucSeqNum; - UINT_16 u2Reserved; - UINT_8 aucBuffer[0]; -} INIT_WIFI_CMD_T, *P_INIT_WIFI_CMD_T; - -typedef struct _INIT_HIF_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - INIT_WIFI_CMD_T rInitWifiCmd; -} INIT_HIF_TX_HEADER_T, *P_INIT_HIF_TX_HEADER_T; - -#define DOWNLOAD_BUF_ENCRYPTION_MODE BIT(0) -#define DOWNLOAD_BUF_NO_CRC_CHECKING BIT(30) -#define DOWNLOAD_BUF_ACK_OPTION BIT(31) -typedef struct _INIT_CMD_DOWNLOAD_BUF { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4CRC32; - UINT_32 u4DataMode; - UINT_8 aucBuffer[0]; -} INIT_CMD_DOWNLOAD_BUF, *P_INIT_CMD_DOWNLOAD_BUF; - -typedef struct _INIT_CMD_WIFI_START { - UINT_32 u4Override; - UINT_32 u4Address; -} INIT_CMD_WIFI_START, *P_INIT_CMD_WIFI_START; - -typedef struct _INIT_CMD_ACCESS_REG { - UINT_8 ucSetQuery; - UINT_8 aucReserved[3]; - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_CMD_ACCESS_REG, *P_INIT_CMD_ACCESS_REG; - -// Events -typedef struct _INIT_WIFI_EVENT_T { - UINT_16 u2RxByteCount; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucBuffer[0]; -} INIT_WIFI_EVENT_T, *P_INIT_WIFI_EVENT_T; - -typedef struct _INIT_HIF_RX_HEADER_T { - INIT_WIFI_EVENT_T rInitWifiEvent; -} INIT_HIF_RX_HEADER_T, *P_INIT_HIF_RX_HEADER_T; - -typedef struct _INIT_EVENT_CMD_RESULT { - UINT_8 ucStatus; // 0: success - // 1: rejected by invalid param - // 2: rejected by incorrect CRC - // 3: rejected by decryption failure - // 4: unknown CMD - UINT_8 aucReserved[3]; -} INIT_EVENT_CMD_RESULT, *P_INIT_EVENT_CMD_RESULT, INIT_EVENT_PENDING_ERROR, *P_INIT_EVENT_PENDING_ERROR; - -typedef struct _INIT_EVENT_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_EVENT_ACCESS_REG, *P_INIT_EVENT_ACCESS_REG; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_INIT_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/p2p_precomp.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/p2p_precomp.h deleted file mode 100755 index 892b5b714baf..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/p2p_precomp.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/p2p_precomp.h#1 $ -*/ - -/*! \file p2p_precomp.h - \brief Collection of most compiler flags for p2p driver are described here. - - In this file we collect all compiler flags and detail the p2p driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -#ifndef _P2P_PRECOMP_H -#define _P2P_PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#include "gl_p2p_os.h" - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#include "roaming_fsm.h" - - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#include "wlan_p2p.h" - - - - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" - - -#include "aa_fsm.h" - -#include "cnm_timer.h" - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -/* Dependency: cnm_timer.h (TIMER_T) */ -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" - - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#include "gl_p2p_kal.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_PRECOMP_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/p2p_typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/p2p_typedef.h deleted file mode 100755 index c8aa47fb6297..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/p2p_typedef.h +++ /dev/null @@ -1,278 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/p2p_typedef.h#1 $ -*/ - -/*! \file p2p_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - - - - -#ifndef _P2P_TYPEDEF_H -#define _P2P_TYPEDEF_H - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* -* type definition of pointer to p2p structure -*/ -//typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; -typedef struct _P2P_INFO_T P2P_INFO_T, *P_P2P_INFO_T; - -typedef struct _P2P_FSM_INFO_T P2P_FSM_INFO_T, *P_P2P_FSM_INFO_T; - -typedef struct _P2P_CONNECTION_SETTINGS_T P2P_CONNECTION_SETTINGS_T, *P_P2P_CONNECTION_SETTINGS_T; - - -/* Type definition for function pointer to p2p function*/ -typedef BOOLEAN (*P2P_LAUNCH)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*P2P_REMOVE)( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsWlanLaunched - ); - -typedef BOOLEAN (*KAL_P2P_GET_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_TKIP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_CCMP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_WSC_MODE)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef struct net_device* (*KAL_P2P_GET_DEV_HDLR)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_SET_MULTICAST_WORK_ITEM) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_REGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_UNREGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_UPDATE_ASSOC_INFO)( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -typedef BOOLEAN (*P2P_VALIDATE_AUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -typedef BOOLEAN (*P2P_VALIDATE_ASSOC_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu4ControlFlags - ); - -typedef VOID (*P2P_RUN_EVENT_AAA_TX_FAIL) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef BOOLEAN (*P2P_PARSE_CHECK_FOR_P2P_INFO_ELEM)( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -typedef WLAN_STATUS (*P2P_RUN_EVENT_AAA_COMPLETE) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef VOID (*P2P_PROCESS_EVENT_UPDATE_NOA_PARAM) ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -typedef VOID (*SCAN_P2P_PROCESS_BEACON_AND_PROBE_RESP) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -typedef VOID (*P2P_RX_PUBLIC_ACTION_FRAME) ( - P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_RSP_GENERATE_OBSS_SCAN_IE) ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -typedef VOID (*RLM_UPDATE_BW_BY_CH_LIST_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef VOID (*RLM_PROCESS_PUBLIC_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_PROCESS_HT_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_UPDATE_PARAMS_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -typedef VOID (*RLM_HANDLE_OBSS_STATUS_EVENT_PKT) ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - - -typedef BOOLEAN (*P2P_FUNC_VALIDATE_PROBE_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -typedef VOID (*RLM_BSS_INIT_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef UINT_32 (*P2P_GET_PROB_RSP_IE_TABLE_SIZE)( - VOID - ); - -typedef PUINT_8 (*P2P_BUILD_REASSOC_REQ_FRAME_COMMON_IES) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -typedef VOID (*P2P_FUNC_DISCONNECT) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DEAUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DISASSOC) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef BOOLEAN (*P2P_FUN_IS_AP_MODE) ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_BEACON_TIMEOUT) ( - IN P_ADAPTER_T prAdapter - ); - - -typedef VOID (*P2P_FUNC_STORE_ASSOC_RSP_IE_BUFFER) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -typedef VOID (*P2P_GENERATE_P2P_IE) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -typedef UINT_32 (*P2P_CALCULATE_P2P_IE_LEN) ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /*CFG_ENABLE_WIFI_DIRECT*/ - -#endif /* _P2P_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/precomp.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/precomp.h deleted file mode 100755 index 0e5a8e372076..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/precomp.h +++ /dev/null @@ -1,380 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/precomp.h#2 $ -*/ - -/*! \file precomp.h - \brief Collection of most compiler flags are described here. - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -/* -** $Log: precomp.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Isolate P2P related function for Hardware Software Bundle - * - * 09 14 2010 chinghwa.yu - * NULL - * Fix BOW_FSM_INFO_T dependence. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 11:30:58 GMT mtk02752 -** add rftest.h for implementing RF test mode in driver land -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-23 22:02:00 GMT mtk02468 -** Added que_mgt.h -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-13 21:58:36 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:40:11 GMT mtk01461 -** Add nic_cmd_event.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 20:00:26 GMT mtk01461 -** Add cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:44 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:25 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _PRECOMP_H -#define _PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#if CFG_SUPPORT_SWCR -#include "swcr.h" -#endif - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "wlan_p2p.h" -#endif - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" -#if CFG_SUPPORT_802_11V -#include "wnm.h" -#endif - -#include "aa_fsm.h" - -#include "cnm_timer.h" - - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" -#endif - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - -#if CFG_SUPPORT_ROAMING -#include "roaming_fsm.h" -#endif /* CFG_SUPPORT_ROAMING */ - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_kal.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRECOMP_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/pwr_mgt.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/pwr_mgt.h deleted file mode 100755 index 4819de0fd9bb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/pwr_mgt.h +++ /dev/null @@ -1,147 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/pwr_mgt.h#1 $ -*/ - -/*! \file "pwr_mgt.h" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - - - -/* -** $Log: pwr_mgt.h $ - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * * due to the different configurations on FPGA and ASIC -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-10 16:39:10 GMT mtk02752 -** disable PM macros temporally -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-29 19:48:37 GMT mtk01084 -** temp remove power management macro -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-08 16:51:11 GMT mtk01084 -** update for power management control macro -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-03 14:59:58 GMT mtk01426 -** Add #if CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:53:10 GMT mtk01084 -** modify ACQUIRE_POWER_CONTROL_FROM_PM() and RECLAIM_POWER_CONTROL_TO_PM() macro -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:32:47 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:20 GMT mtk01084 -** Initial version -** -*/ - -#ifndef _PWR_MGT_H -#define _PWR_MGT_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PM_UAPSD_AC0 (BIT(0)) -#define PM_UAPSD_AC1 (BIT(1)) -#define PM_UAPSD_AC2 (BIT(2)) -#define PM_UAPSD_AC3 (BIT(3)) - -#define PM_UAPSD_ALL (PM_UAPSD_AC0 | PM_UAPSD_AC1 | PM_UAPSD_AC2 | PM_UAPSD_AC3) -#define PM_UAPSD_NONE 0 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PM_PROFILE_SETUP_INFO_T { - /* Profile setup */ - UINT_8 ucBmpDeliveryAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - UINT_8 ucBmpTriggerAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - - UINT_8 ucUapsdSp; /* Number of triggered packets in UAPSD */ - -} PM_PROFILE_SETUP_INFO_T, *P_PM_PROFILE_SETUP_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if !CFG_ENABLE_FULL_PM - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) -#else - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) \ - { \ - if (_prAdapter->fgIsFwOwn) { \ - nicpmSetDriverOwn(_prAdapter); \ - } \ - /* Increase Block to Enter Low Power Semaphore count */ \ - GLUE_INC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - } - - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) \ - { \ - ASSERT(_prAdapter->u4PwrCtrlBlockCnt != 0); \ - /* Decrease Block to Enter Low Power Semaphore count */ \ - GLUE_DEC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - if (_prAdapter->fgWiFiInSleepyState && (_prAdapter->u4PwrCtrlBlockCnt == 0)) { \ - nicpmSetFWOwn(_prAdapter, _fgEnableGINT_in_IST); \ - } \ - } -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PWR_MGT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/queue.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/queue.h deleted file mode 100755 index 99118799b252..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/queue.h +++ /dev/null @@ -1,200 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/queue.h#1 $ -*/ - -/*! \file queue.h - \brief Definition for singly queue operations. - - In this file we define the singly queue data structure and its - queue operation MACROs. -*/ - - - -/* -** $Log: queue.h $ - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:46 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _QUEUE_H -#define _QUEUE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Singly Queue Structures - Entry Part */ -typedef struct _QUE_ENTRY_T { - struct _QUE_ENTRY_T *prNext; - struct _QUE_ENTRY_T *prPrev; /* For Rx buffer reordering used only */ -} QUE_ENTRY_T, *P_QUE_ENTRY_T; - -/* Singly Queue Structures - Queue Part */ -typedef struct _QUE_T { - P_QUE_ENTRY_T prHead; - P_QUE_ENTRY_T prTail; - UINT_32 u4NumElem; -} QUE_T, *P_QUE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* - * To resolve compiler warning of address check -Waddress - * Redefine a ASSERT dedicate for queue operation - */ -#if DBG - #define QUE_ASSERT ASSERT -#else - #define QUE_ASSERT(_exp) -#endif - -#define QUEUE_INITIALIZE(prQueue) \ - { \ - (prQueue)->prHead = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->u4NumElem = 0; \ - } - -#define QUEUE_IS_EMPTY(prQueue) (((P_QUE_T)(prQueue))->prHead == (P_QUE_ENTRY_T)NULL) - -#define QUEUE_IS_NOT_EMPTY(prQueue) ((prQueue)->u4NumElem > 0) - -#define QUEUE_GET_HEAD(prQueue) ((prQueue)->prHead) - -#define QUEUE_GET_TAIL(prQueue) ((prQueue)->prTail) - -#define QUEUE_GET_NEXT_ENTRY(prQueueEntry) ((prQueueEntry)->prNext) - -#define QUEUE_INSERT_HEAD(prQueue, prQueueEntry) \ - { \ - QUE_ASSERT(prQueue); \ - QUE_ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (prQueue)->prHead; \ - (prQueue)->prHead = (prQueueEntry); \ - if ((prQueue)->prTail == (P_QUE_ENTRY_T)NULL) { \ - (prQueue)->prTail = (prQueueEntry); \ - } \ - ((prQueue)->u4NumElem)++; \ - } - -#define QUEUE_INSERT_TAIL(prQueue, prQueueEntry) \ - { \ - QUE_ASSERT(prQueue); \ - QUE_ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (P_QUE_ENTRY_T)NULL; \ - if ((prQueue)->prTail) { \ - ((prQueue)->prTail)->prNext = (prQueueEntry); \ - } else { \ - (prQueue)->prHead = (prQueueEntry); \ - } \ - (prQueue)->prTail = (prQueueEntry); \ - ((prQueue)->u4NumElem)++; \ - } - -/* NOTE: We assume the queue entry located at the beginning of "prQueueEntry Type", - * so that we can cast the queue entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define QUEUE_REMOVE_HEAD(prQueue, prQueueEntry, _P_TYPE) \ - { \ - QUE_ASSERT(prQueue); \ - prQueueEntry = (_P_TYPE)((prQueue)->prHead); \ - if (prQueueEntry) { \ - (prQueue)->prHead = ((P_QUE_ENTRY_T)(prQueueEntry))->prNext; \ - if ((prQueue)->prHead == (P_QUE_ENTRY_T)NULL){ \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - } \ - ((P_QUE_ENTRY_T)(prQueueEntry))->prNext = (P_QUE_ENTRY_T)NULL; \ - ((prQueue)->u4NumElem)--; \ - } \ - } - -#define QUEUE_MOVE_ALL(prDestQueue, prSrcQueue) \ - { \ - QUE_ASSERT(prDestQueue); \ - QUE_ASSERT(prSrcQueue); \ - *(P_QUE_T)prDestQueue = *(P_QUE_T)prSrcQueue; \ - QUEUE_INITIALIZE(prSrcQueue); \ - } - -#define QUEUE_CONCATENATE_QUEUES(prDestQueue, prSrcQueue) \ - { \ - QUE_ASSERT(prDestQueue); \ - QUE_ASSERT(prSrcQueue); \ - if (prSrcQueue->u4NumElem > 0) { \ - if ((prDestQueue)->prTail) { \ - ((prDestQueue)->prTail)->prNext = (prSrcQueue)->prHead; \ - } else { \ - (prDestQueue)->prHead = (prSrcQueue)->prHead; \ - } \ - (prDestQueue)->prTail = (prSrcQueue)->prTail; \ - ((prDestQueue)->u4NumElem) += ((prSrcQueue)->u4NumElem); \ - QUEUE_INITIALIZE(prSrcQueue); \ - } \ - } - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUEUE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/rftest.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/rftest.h deleted file mode 100755 index ae6541dc2e92..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/rftest.h +++ /dev/null @@ -1,317 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/rftest.h#1 $ -*/ - -/*! \file "rftest.h" - \brief definitions for RF Productino test - -*/ - - - -/* -** $Log: rftest.h $ - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-08 17:35:11 GMT mtk02752 -** * comment out RF test which is not supported on MT6620 -** + API decalre for rftest -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-12-08 11:29:07 GMT mtk02752 -** definitions for RF test mode -** -*/ -#ifndef _RFTEST_H -#define _RFTEST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -// Table Version -#define RF_AUTO_TEST_FUNCTION_TABLE_VERSION 0x01000001 - -// Power -#define RF_AT_PARAM_POWER_MASK BITS(0,7) -#define RF_AT_PARAM_POWER_MAX RF_AT_PARAM_POWER_MASK - -// Rate -#define RF_AT_PARAM_RATE_MCS_MASK BIT(31) -#define RF_AT_PARAM_RATE_MASK BITS(0,7) -#define RF_AT_PARAM_RATE_CCK_MAX 3 -#define RF_AT_PARAM_RATE_1M 0 -#define RF_AT_PARAM_RATE_2M 1 -#define RF_AT_PARAM_RATE_5_5M 2 -#define RF_AT_PARAM_RATE_11M 3 -#define RF_AT_PARAM_RATE_6M 4 -#define RF_AT_PARAM_RATE_9M 5 -#define RF_AT_PARAM_RATE_12M 6 -#define RF_AT_PARAM_RATE_18M 7 -#define RF_AT_PARAM_RATE_24M 8 -#define RF_AT_PARAM_RATE_36M 9 -#define RF_AT_PARAM_RATE_48M 10 -#define RF_AT_PARAM_RATE_54M 11 - -// Antenna -#define RF_AT_PARAM_ANTENNA_ID_MASK BITS(0,7) -#define RF_AT_PARAM_ANTENNA_ID_MAX 1 - -// Packet Length -#define RF_AT_PARAM_TX_80211HDR_BYTE_MAX (32) -#define RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX (2048) - -#define RF_AT_PARAM_TX_PKTLEN_BYTE_DEFAULT 1024 -#define RF_AT_PARAM_TX_PKTLEN_BYTE_MAX \ - ((UINT_16)(RF_AT_PARAM_TX_80211HDR_BYTE_MAX + RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX )) - -// Packet Count -#define RF_AT_PARAM_TX_PKTCNT_DEFAULT 1000 -#define RF_AT_PARAM_TX_PKTCNT_UNLIMITED 0 - -// Packet Interval -#define RF_AT_PARAM_TX_PKT_INTERVAL_US_DEFAULT 50 - -// ALC -#define RF_AT_PARAM_ALC_DISABLE 0 -#define RF_AT_PARAM_ALC_ENABLE 1 - -// TXOP -#define RF_AT_PARAM_TXOP_DEFAULT 0 -#define RF_AT_PARAM_TXOPQUE_QMASK BITS(16,31) -#define RF_AT_PARAM_TXOPQUE_TMASK BITS(0,15) -#define RF_AT_PARAM_TXOPQUE_AC0 (0<<16) -#define RF_AT_PARAM_TXOPQUE_AC1 (1<<16) -#define RF_AT_PARAM_TXOPQUE_AC2 (2<<16) -#define RF_AT_PARAM_TXOPQUE_AC3 (3<<16) -#define RF_AT_PARAM_TXOPQUE_AC4 (4<<16) -#define RF_AT_PARAM_TXOPQUE_QOFFSET 16 - -// Retry Limit -#define RF_AT_PARAM_TX_RETRY_DEFAULT 0 -#define RF_AT_PARAM_TX_RETRY_MAX 6 - -// QoS Queue -#define RF_AT_PARAM_QOSQUE_AC0 0 -#define RF_AT_PARAM_QOSQUE_AC1 1 -#define RF_AT_PARAM_QOSQUE_AC2 2 -#define RF_AT_PARAM_QOSQUE_AC3 3 -#define RF_AT_PARAM_QOSQUE_AC4 4 -#define RF_AT_PARAM_QOSQUE_DEFAULT RF_AT_PARAM_QOSQUE_AC0 - -// Bandwidth -#define RF_AT_PARAM_BANDWIDTH_20MHZ 0 -#define RF_AT_PARAM_BANDWIDTH_40MHZ 1 -#define RF_AT_PARAM_BANDWIDTH_U20_IN_40MHZ 2 -#define RF_AT_PARAM_BANDWIDTH_D20_IN_40MHZ 3 -#define RF_AT_PARAM_BANDWIDTH_DEFAULT RF_AT_PARAM_BANDWIDTH_20MHZ - -// GI (Guard Interval) -#define RF_AT_PARAM_GI_800NS 0 -#define RF_AT_PARAM_GI_400NS 1 -#define RF_AT_PARAM_GI_DEFAULT RF_AT_PARAM_GI_800NS - -// STBC -#define RF_AT_PARAM_STBC_DISABLE 0 -#define RF_AT_PARAM_STBC_ENABLE 1 - -// RIFS -#define RF_AT_PARAM_RIFS_DISABLE 0 -#define RF_AT_PARAM_RIFS_ENABLE 1 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -// Function ID List -typedef enum _ENUM_RF_AT_FUNCID_T { - RF_AT_FUNCID_VERSION = 0, - RF_AT_FUNCID_COMMAND, - RF_AT_FUNCID_POWER, - RF_AT_FUNCID_RATE, - RF_AT_FUNCID_PREAMBLE, - RF_AT_FUNCID_ANTENNA, - RF_AT_FUNCID_PKTLEN, - RF_AT_FUNCID_PKTCNT, - RF_AT_FUNCID_PKTINTERVAL, - RF_AT_FUNCID_TEMP_COMPEN, - RF_AT_FUNCID_TXOPLIMIT, - RF_AT_FUNCID_ACKPOLICY, - RF_AT_FUNCID_PKTCONTENT, - RF_AT_FUNCID_RETRYLIMIT, - RF_AT_FUNCID_QUEUE, - RF_AT_FUNCID_BANDWIDTH, - RF_AT_FUNCID_GI, - RF_AT_FUNCID_STBC, - RF_AT_FUNCID_CHNL_FREQ, - RF_AT_FUNCID_RIFS, - RF_AT_FUNCID_TRSW_TYPE, - RF_AT_FUNCID_RF_SX_SHUTDOWN, - RF_AT_FUNCID_PLL_SHUTDOWN, - RF_AT_FUNCID_SLOW_CLK_MODE, - RF_AT_FUNCID_ADC_CLK_MODE, - RF_AT_FUNCID_MEASURE_MODE, - RF_AT_FUNCID_VOLT_COMPEN, - RF_AT_FUNCID_DPD_TX_GAIN, - RF_AT_FUNCID_DPD_MODE, - RF_AT_FUNCID_TSSI_MODE, - RF_AT_FUNCID_TX_GAIN_CODE, - RF_AT_FUNCID_TX_PWR_MODE, - - /* Query command */ - RF_AT_FUNCID_TXED_COUNT = 32, - RF_AT_FUNCID_TXOK_COUNT, - RF_AT_FUNCID_RXOK_COUNT, - RF_AT_FUNCID_RXERROR_COUNT, - RF_AT_FUNCID_RESULT_INFO, - RF_AT_FUNCID_TRX_IQ_RESULT, - RF_AT_FUNCID_TSSI_RESULT, - RF_AT_FUNCID_DPD_RESULT, - RF_AT_FUNCID_RXV_DUMP, - RF_AT_FUNCID_RX_PHY_STATIS, - RF_AT_FUNCID_MEASURE_RESULT, - RF_AT_FUNCID_TEMP_SENSOR, - RF_AT_FUNCID_VOLT_SENSOR, - RF_AT_FUNCID_READ_EFUSE, - RF_AT_FUNCID_RX_RSSI, - RF_AT_FUNCID_FW_INFO, - RF_AT_FUNCID_DRV_INFO, - - /* Set command */ - RF_AT_FUNCID_SET_DPD_RESULT = 64, - RF_AT_FUNCID_SET_CW_MODE, - RF_AT_FUNCID_SET_JAPAN_CH14_FILTER, - RF_AT_FUNCID_WRITE_EFUSE, - RF_AT_FUNCID_SET_MAC_ADDRESS - -} ENUM_RF_AT_FUNCID_T; - -// Command -typedef enum _ENUM_RF_AT_COMMAND_T { - RF_AT_COMMAND_STOPTEST = 0, - RF_AT_COMMAND_STARTTX, - RF_AT_COMMAND_STARTRX, - RF_AT_COMMAND_RESET, - RF_AT_COMMAND_OUTPUT_POWER, /* Payload */ - RF_AT_COMMAND_LO_LEAKAGE, /* Local freq is renamed to Local leakage */ - RF_AT_COMMAND_CARRIER_SUPPR, /* OFDM (LTF/STF), CCK (PI,PI/2) */ - RF_AT_COMMAND_TRX_IQ_CAL, - RF_AT_COMMAND_TSSI_CAL, - RF_AT_COMMAND_DPD_CAL, - RF_AT_COMMAND_CW, - RF_AT_COMMAND_NUM -} ENUM_RF_AT_COMMAND_T; - -// Preamble -typedef enum _ENUM_RF_AT_PREAMBLE_T { - RF_AT_PREAMBLE_NORMAL = 0, - RF_AT_PREAMBLE_CCK_SHORT, - RF_AT_PREAMBLE_11N_MM, - RF_AT_PREAMBLE_11N_GF, - RF_AT_PREAMBLE_NUM -} ENUM_RF_AT_PREAMBLE_T; - -// Ack Policy -typedef enum _ENUM_RF_AT_ACK_POLICY_T { - RF_AT_ACK_POLICY_NORMAL = 0, - RF_AT_ACK_POLICY_NOACK, - RF_AT_ACK_POLICY_NOEXPLICTACK, - RF_AT_ACK_POLICY_BLOCKACK, - RF_AT_ACK_POLICY_NUM -} ENUM_RF_AT_ACK_POLICY_T; - -typedef enum _ENUM_RF_AUTOTEST_STATE_T { - RF_AUTOTEST_STATE_STANDBY = 0, - RF_AUTOTEST_STATE_TX, - RF_AUTOTEST_STATE_RX, - RF_AUTOTEST_STATE_RESET, - RF_AUTOTEST_STATE_OUTPUT_POWER, - RF_AUTOTEST_STATE_LOCA_FREQUENCY, - RF_AUTOTEST_STATE_CARRIER_SUPRRESION, - RF_AUTOTEST_STATE_NUM -} ENUM_RF_AUTOTEST_STATE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -rftestSetATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ); - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ); - -#endif /* _RFTEST_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/typedef.h deleted file mode 100755 index 5db05c055bb0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/typedef.h +++ /dev/null @@ -1,239 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/typedef.h#1 $ -*/ - -/*! \file typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to the GLUE Layer. -*/ - - - -/* -** $Log: typedef.h $ - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:41:37 GMT mtk01461 -** Update PACKET_INFO_INIT for TX Path -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:30:17 GMT mtk01461 -** Add parameter in PACKET_INFO_T for HIF Loopback -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:22 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:28 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:54 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _TYPEDEF_H -#define _TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* ieee80211.h of linux has duplicated definitions */ -#if defined(WLAN_STATUS_SUCCESS) -#undef WLAN_STATUS_SUCCESS -#endif - -#define WLAN_STATUS_SUCCESS ((WLAN_STATUS) 0x00000000L) -#define WLAN_STATUS_PENDING ((WLAN_STATUS) 0x00000103L) -#define WLAN_STATUS_NOT_ACCEPTED ((WLAN_STATUS) 0x00010003L) - -#define WLAN_STATUS_MEDIA_CONNECT ((WLAN_STATUS) 0x4001000BL) -#define WLAN_STATUS_MEDIA_DISCONNECT ((WLAN_STATUS) 0x4001000CL) -#define WLAN_STATUS_MEDIA_SPECIFIC_INDICATION ((WLAN_STATUS) 0x40010012L) - -#define WLAN_STATUS_SCAN_COMPLETE ((WLAN_STATUS) 0x60010001L) -#define WLAN_STATUS_MSDU_OK ((WLAN_STATUS) 0x60010002L) - -/* TODO(Kevin): double check if 0x60010001 & 0x60010002 is proprietary */ -#define WLAN_STATUS_ROAM_OUT_FIND_BEST ((WLAN_STATUS) 0x60010101L) -#define WLAN_STATUS_ROAM_DISCOVERY ((WLAN_STATUS) 0x60010102L) - -#define WLAN_STATUS_FAILURE ((WLAN_STATUS) 0xC0000001L) -#define WLAN_STATUS_RESOURCES ((WLAN_STATUS) 0xC000009AL) -#define WLAN_STATUS_NOT_SUPPORTED ((WLAN_STATUS) 0xC00000BBL) - -#define WLAN_STATUS_MULTICAST_FULL ((WLAN_STATUS) 0xC0010009L) -#define WLAN_STATUS_INVALID_PACKET ((WLAN_STATUS) 0xC001000FL) -#define WLAN_STATUS_ADAPTER_NOT_READY ((WLAN_STATUS) 0xC0010011L) -#define WLAN_STATUS_NOT_INDICATING ((WLAN_STATUS) 0xC0010013L) -#define WLAN_STATUS_INVALID_LENGTH ((WLAN_STATUS) 0xC0010014L) -#define WLAN_STATUS_INVALID_DATA ((WLAN_STATUS) 0xC0010015L) -#define WLAN_STATUS_BUFFER_TOO_SHORT ((WLAN_STATUS) 0xC0010016L) - -#define WLAN_STATUS_BWCS_UPDATE ((WLAN_STATUS) 0xC0010017L) - -#define WLAN_STATUS_CONNECT_INDICATION ((WLAN_STATUS) 0xC0010018L) - - -/* NIC status flags */ -#define ADAPTER_FLAG_HW_ERR 0x00400000 - -/* Type Length */ -#define TL_IPV4 0x0008 -#define TL_IPV6 0xDD86 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for GLUE_INFO structure */ -typedef struct _GLUE_INFO_T GLUE_INFO_T, *P_GLUE_INFO_T; - -/* Type definition for WLAN STATUS */ -typedef UINT_32 WLAN_STATUS, *P_WLAN_STATUS; - -/* Type definition for ADAPTER structure */ -typedef struct _ADAPTER_T ADAPTER_T, *P_ADAPTER_T; - -/* Type definition for MESSAGE HEADER structure */ -typedef struct _MSG_HDR_T MSG_HDR_T, *P_MSG_HDR_T; - -/* Type definition for Pointer to OS Native Packet */ -typedef void *P_NATIVE_PACKET; - -/* Type definition for STA_RECORD_T structure to handle the connectivity and packet reception - * for a particular STA. - */ -typedef struct _STA_RECORD_T STA_RECORD_T, *P_STA_RECORD_T, **PP_STA_RECORD_T; - -/* CMD_INFO_T is used by Glue Layer to send a cluster of Command(OID) information to - * the TX Path to reduce the parameters of a function call. - */ -typedef struct _CMD_INFO_T CMD_INFO_T, *P_CMD_INFO_T; - -/* Following typedef should be removed later, because Glue Layer should not - * be aware of following data type. - */ -typedef struct _SW_RFB_T SW_RFB_T, *P_SW_RFB_T, **PP_SW_RFB_T; - -typedef struct _MSDU_INFO_T MSDU_INFO_T, *P_MSDU_INFO_T; - -typedef struct _REG_ENTRY_T REG_ENTRY_T, *P_REG_ENTRY_T; - -/* IST handler definition */ -typedef VOID (*IST_EVENT_FUNCTION)(P_ADAPTER_T); - -/* Type definition for function pointer of timer handler */ -typedef VOID (*PFN_TIMER_CALLBACK)(IN P_GLUE_INFO_T); - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_bow.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_bow.h deleted file mode 100755 index a3c4d3849a05..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_bow.h +++ /dev/null @@ -1,547 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_bow.h#1 $ -*/ - -/*! \file "wlan_bow.h" - \brief This file contains the declairations of 802.11 PAL - command processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_bow.h $ - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -#ifndef _WLAN_BOW_H -#define _WLAN_BOW_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "nic/bow.h" -#include "nic/cmd_buf.h" - -#if CFG_ENABLE_BT_OVER_WIFI -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define BOWCMD_STATUS_SUCCESS 0 -#define BOWCMD_STATUS_FAILURE 1 -#define BOWCMD_STATUS_UNACCEPTED 2 -#define BOWCMD_STATUS_INVALID 3 -#define BOWCMD_STATUS_TIMEOUT 4 - -#define BOW_WILDCARD_SSID "AMP" -#define BOW_WILDCARD_SSID_LEN 3 -#define BOW_SSID_LEN 21 - - /* 0: query, 1: setup, 2: destroy */ -#define BOW_QUERY_CMD 0 -#define BOW_SETUP_CMD 1 -#define BOW_DESTROY_CMD 2 - -#define BOW_INITIATOR 0 -#define BOW_RESPONDER 1 - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -typedef struct _BOW_TABLE_T { - UINT_8 ucAcquireID; - BOOLEAN fgIsValid; - ENUM_BOW_DEVICE_STATE eState; - UINT_8 aucPeerAddress[6]; - //UINT_8 ucRole; - //UINT_8 ucChannelNum; - UINT_16 u2Reserved; -} BOW_TABLE_T, *P_BOW_TABLE_T; - -typedef WLAN_STATUS (*PFN_BOW_CMD_HANDLE)(P_ADAPTER_T, P_AMPC_COMMAND); - -typedef struct _BOW_CMD_T { - UINT_8 uCmdID; - PFN_BOW_CMD_HANDLE pfCmdHandle; -} BOW_CMD_T, *P_BOW_CMD_T; - -typedef struct _BOW_EVENT_ACTIVITY_REPORT_T { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_EVENT_ACTIVITY_REPORT_T, *P_BOW_EVENT_ACTIVITY_REPORT_T; - -/* -ucReason: 0: success - 1: general failure - 2: too much time (> 2/3 second totally) requested for scheduling. - Others: reserved. -*/ - -typedef struct _BOW_EVENT_SYNC_TSF_T { - UINT_64 u4TsfTime; - UINT_32 u4TsfSysTime; - UINT_32 u4ScoTime; - UINT_32 u4ScoSysTime; - } BOW_EVENT_SYNC_TSF_T, *P_BOW_EVENT_SYNC_TSF_T; - -typedef struct _BOW_ACTIVITY_REPORT_BODY_T { - UINT_32 u4StartTime; - UINT_32 u4Duration; - UINT_32 u4Periodicity; - } BOW_ACTIVITY_REPORT_BODY_T, *P_BOW_ACTIVITY_REPORT_BODY_T; - -typedef struct _BOW_ACTIVITY_REPORT_T { - UINT_8 aucPeerAddress[6]; - UINT_8 ucScheduleKnown; - UINT_8 ucNumReports; - BOW_ACTIVITY_REPORT_BODY_T arBowActivityReportBody[MAX_ACTIVITY_REPORT]; - } BOW_ACTIVITY_REPORT_T, *P_BOW_ACTIVITY_REPORT_T; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ); - - -/*--------------------------------------------------------------*/ -/* Command Dispatcher */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ); - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkConnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkDisconnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter); - -VOID -bowStarting ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -BOOLEAN -bowValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ); - -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -bowRunEventAAATxFail( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventAAAComplete( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -BOOLEAN -bowValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -bowValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ); - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ); - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ); - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ); - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_BOW_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_lib.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_lib.h deleted file mode 100755 index 5141726b1fec..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_lib.h +++ /dev/null @@ -1,1042 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_lib.h#1 $ -*/ - -/*! \file "wlan_lib.h" - \brief The declaration of the functions of the wlanAdpater objects - - Detail description. -*/ - - - -/* -** $Log: wlan_lib.h $ - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * eliminate win32 native data types. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * . - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add extra 64 adjustable parameters for CoEX scenario. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * 2) add 2 kal API for later integration - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * 4) nicRxWaitResponse() revised - * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:39:55 GMT mtk02752 -** eliminate unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:58:41 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-19 10:43:06 GMT mtk01461 -** Add wlanReleasePendingOid() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-13 16:38:44 GMT mtk01084 -** add WIFI start function -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-08 16:51:14 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:57:38 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:31:02 GMT mtk01461 -** Add declaration of FW Image download reference code -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:31 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:04 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_LIB_H -#define _WLAN_LIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "CFG_Wifi_File.h" -#include "rlm_domain.h" -#include "wlan_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define MAX_NUM_GROUP_ADDR 32 /* max number of group addresses */ - - - -#define TX_CS_TCP_UDP_GEN BIT(1) -#define TX_CS_IP_GEN BIT(0) - - -#define CSUM_OFFLOAD_EN_TX_TCP BIT(0) -#define CSUM_OFFLOAD_EN_TX_UDP BIT(1) -#define CSUM_OFFLOAD_EN_TX_IP BIT(2) -#define CSUM_OFFLOAD_EN_RX_TCP BIT(3) -#define CSUM_OFFLOAD_EN_RX_UDP BIT(4) -#define CSUM_OFFLOAD_EN_RX_IPv4 BIT(5) -#define CSUM_OFFLOAD_EN_RX_IPv6 BIT(6) -#define CSUM_OFFLOAD_EN_TX_MASK BITS(0,2) -#define CSUM_OFFLOAD_EN_ALL BITS(0,6) - -/* TCP, UDP, IP Checksum */ -#define RX_CS_TYPE_UDP BIT(7) -#define RX_CS_TYPE_TCP BIT(6) -#define RX_CS_TYPE_IPv6 BIT(5) -#define RX_CS_TYPE_IPv4 BIT(4) - -#define RX_CS_STATUS_UDP BIT(3) -#define RX_CS_STATUS_TCP BIT(2) -#define RX_CS_STATUS_IP BIT(0) - -#define CSUM_NOT_SUPPORTED 0x0 - -#define TXPWR_USE_PDSLOPE 0 - -/* NVRAM error code definitions */ -#define NVRAM_ERROR_VERSION_MISMATCH BIT(1) -#define NVRAM_ERROR_INVALID_TXPWR BIT(2) -#define NVRAM_ERROR_INVALID_DPD BIT(3) -#define NVRAM_ERROR_INVALID_MAC_ADDR BIT(4) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC) ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_CSUM_TYPE_T { - CSUM_TYPE_IPV4, - CSUM_TYPE_IPV6, - CSUM_TYPE_TCP, - CSUM_TYPE_UDP, - CSUM_TYPE_NUM -} ENUM_CSUM_TYPE_T, *P_ENUM_CSUM_TYPE_T; - -typedef enum _ENUM_CSUM_RESULT_T { - CSUM_RES_NONE, - CSUM_RES_SUCCESS, - CSUM_RES_FAILED, - CSUM_RES_NUM -} ENUM_CSUM_RESULT_T, *P_ENUM_CSUM_RESULT_T; - -typedef enum _ENUM_PHY_MODE_T { - ENUM_PHY_2G4_CCK, - ENUM_PHY_2G4_OFDM_BPSK, - ENUM_PHY_2G4_OFDM_QPSK, - ENUM_PHY_2G4_OFDM_16QAM, - ENUM_PHY_2G4_OFDM_48M, - ENUM_PHY_2G4_OFDM_54M, - ENUM_PHY_2G4_HT20_BPSK, - ENUM_PHY_2G4_HT20_QPSK, - ENUM_PHY_2G4_HT20_16QAM, - ENUM_PHY_2G4_HT20_MCS5, - ENUM_PHY_2G4_HT20_MCS6, - ENUM_PHY_2G4_HT20_MCS7, - ENUM_PHY_2G4_HT40_BPSK, - ENUM_PHY_2G4_HT40_QPSK, - ENUM_PHY_2G4_HT40_16QAM, - ENUM_PHY_2G4_HT40_MCS5, - ENUM_PHY_2G4_HT40_MCS6, - ENUM_PHY_2G4_HT40_MCS7, - ENUM_PHY_5G_OFDM_BPSK, - ENUM_PHY_5G_OFDM_QPSK, - ENUM_PHY_5G_OFDM_16QAM, - ENUM_PHY_5G_OFDM_48M, - ENUM_PHY_5G_OFDM_54M, - ENUM_PHY_5G_HT20_BPSK, - ENUM_PHY_5G_HT20_QPSK, - ENUM_PHY_5G_HT20_16QAM, - ENUM_PHY_5G_HT20_MCS5, - ENUM_PHY_5G_HT20_MCS6, - ENUM_PHY_5G_HT20_MCS7, - ENUM_PHY_5G_HT40_BPSK, - ENUM_PHY_5G_HT40_QPSK, - ENUM_PHY_5G_HT40_16QAM, - ENUM_PHY_5G_HT40_MCS5, - ENUM_PHY_5G_HT40_MCS6, - ENUM_PHY_5G_HT40_MCS7, - ENUM_PHY_MODE_NUM -} ENUM_PHY_MODE_T, *P_ENUM_PHY_MODE_T; - -typedef enum _ENUM_POWER_SAVE_POLL_MODE_T { - ENUM_POWER_SAVE_POLL_DISABLE, - ENUM_POWER_SAVE_POLL_LEGACY_NULL, - ENUM_POWER_SAVE_POLL_QOS_NULL, - ENUM_POWER_SAVE_POLL_NUM -} ENUM_POWER_SAVE_POLL_MODE_T, *P_ENUM_POWER_SAVE_POLL_MODE_T; - -typedef enum _ENUM_AC_TYPE_T { - ENUM_AC_TYPE_AC0, - ENUM_AC_TYPE_AC1, - ENUM_AC_TYPE_AC2, - ENUM_AC_TYPE_AC3, - ENUM_AC_TYPE_AC4, - ENUM_AC_TYPE_AC5, - ENUM_AC_TYPE_AC6, - ENUM_AC_TYPE_BMC, - ENUM_AC_TYPE_NUM -} ENUM_AC_TYPE_T, *P_ENUM_AC_TYPE_T; - -typedef enum _ENUM_ADV_AC_TYPE_T { - ENUM_ADV_AC_TYPE_RX_NSW, - ENUM_ADV_AC_TYPE_RX_PTA, - ENUM_ADV_AC_TYPE_RX_SP, - ENUM_ADV_AC_TYPE_TX_PTA, - ENUM_ADV_AC_TYPE_TX_RSP, - ENUM_ADV_AC_TYPE_NUM -} ENUM_ADV_AC_TYPE_T, *P_ENUM_ADV_AC_TYPE_T; - -typedef enum _ENUM_REG_CH_MAP_T { - REG_CH_MAP_COUNTRY_CODE, - REG_CH_MAP_TBL_IDX, - REG_CH_MAP_CUSTOMIZED, - REG_CH_MAP_NUM -} ENUM_REG_CH_MAP_T, *P_ENUM_REG_CH_MAP_T; - -typedef struct _SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} SET_TXPWR_CTRL_T, *P_SET_TXPWR_CTRL_T; - -/* For storing driver initialization value from glue layer */ -typedef struct _REG_INFO_T { - UINT_32 u4SdBlockSize; /* SDIO block size */ - UINT_32 u4SdBusWidth; /* SDIO bus width. 1 or 4 */ - UINT_32 u4SdClockRate; /* SDIO clock rate. (in unit of HZ) */ - UINT_32 u4StartAddress; /* Starting address of Wi-Fi Firmware */ - UINT_32 u4LoadAddress; /* Load address of Wi-Fi Firmware */ - UINT_16 aucFwImgFilename[65]; /* Firmware filename */ - UINT_16 aucFwImgFilenameE6[65]; /* Firmware filename for E6 */ - UINT_32 u4StartFreq; /* Start Frequency for Ad-Hoc network : in unit of KHz */ - UINT_32 u4AdhocMode; /* Default mode for Ad-Hoc network : ENUM_PARAM_AD_HOC_MODE_T */ - UINT_32 u4RddStartFreq; - UINT_32 u4RddStopFreq; - UINT_32 u4RddTestMode; - UINT_32 u4RddShutFreq; - UINT_32 u4RddDfs; - INT_32 i4HighRssiThreshold; - INT_32 i4MediumRssiThreshold; - INT_32 i4LowRssiThreshold; - INT_32 au4TxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4RxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4AdvPriorityTag[ENUM_ADV_AC_TYPE_NUM]; - UINT_32 u4FastPSPoll; - UINT_32 u4PTA; /* 0: disable, 1: enable */ - UINT_32 u4TXLimit; /* 0: disable, 1: enable */ - UINT_32 u4SilenceWindow; /* range: 100 - 625, unit: us */ - UINT_32 u4TXLimitThreshold; /* range: 250 - 1250, unit: us */ - UINT_32 u4PowerMode; - UINT_32 fgEnArpFilter; - UINT_32 u4PsCurrentMeasureEn; - UINT_32 u4UapsdAcBmp; - UINT_32 u4MaxSpLen; - UINT_32 fgDisOnlineScan; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 fgDisBcnLostDetection; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 u4FixedRate; /* 0: automatic, non-zero: fixed rate */ - UINT_32 u4ArSysParam0; - UINT_32 u4ArSysParam1; - UINT_32 u4ArSysParam2; - UINT_32 u4ArSysParam3; - UINT_32 fgDisRoaming; /* 0:enable roaming 1:disable */ - - // NVRAM - MP Data -START- - UINT_8 aucMacAddr[6]; - UINT_16 au2CountryCode[4]; /* Country code (in ISO 3166-1 expression, ex: "US", "TW") */ - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - ENUM_REG_CH_MAP_T eRegChannelListMap; - UINT_8 ucRegChannelListIndex; - DOMAIN_INFO_ENTRY rDomainInfo; - // NVRAM - MP Data -END- - - // NVRAM - Functional Data -START- - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - // NVRAM - Functional Data -END- - -} REG_INFO_T, *P_REG_INFO_T; - -/* for divided firmware loading */ -typedef struct _FWDL_SECTION_INFO_T -{ - UINT_32 u4Offset; - UINT_32 u4Reserved; - UINT_32 u4Length; - UINT_32 u4DestAddr; -} FWDL_SECTION_INFO_T, *P_FWDL_SECTION_INFO_T; - -typedef struct _FIRMWARE_DIVIDED_DOWNLOAD_T -{ - UINT_32 u4Signature; - UINT_32 u4CRC; /* CRC calculated without first 8 bytes included */ - UINT_32 u4NumOfEntries; - UINT_32 u4Reserved; - FWDL_SECTION_INFO_T arSection[]; -} FIRMWARE_DIVIDED_DOWNLOAD_T, *P_FIRMWARE_DIVIDED_DOWNLOAD_T; - -typedef struct _PARAM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_MCR_RW_STRUC_T, *P_PARAM_MCR_RW_STRUC_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define BUILD_SIGN(ch0, ch1, ch2, ch3) \ - ((UINT_32)(UINT_8)(ch0) | ((UINT_32)(UINT_8)(ch1) << 8) | \ - ((UINT_32)(UINT_8)(ch2) << 16) | ((UINT_32)(UINT_8)(ch3) << 24 )) - -#define MTK_WIFI_SIGNATURE BUILD_SIGN('M', 'T', 'K', 'W') - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanCardEjected( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ); - -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ); - -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ); - -VOID -wlanReleasePendingCMDbyNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ); - -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ); - -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ); - -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_SUPPORT_WAPI -BOOLEAN -wlanQueryWapiMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -wlanReturnRxPacket ( - IN PVOID pvAdapter, - IN PVOID pvPacket - ); - -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ); - -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ); - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - #endif - -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ); -#else -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ); -#endif - -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ); - -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len - ); - -#endif - -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ); - -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ); - -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ); - -/* Security Frame Handling */ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ); - -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ); - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanEnableATGO( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Address Retreive by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* NIC Capability Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* PD MCR Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ); -/*----------------------------------------------------------------------------*/ -/* Loading Manufacture Data */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media Stream Mode */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Timer Timeout Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* TX Pending Packets Handling (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ); - -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ); - - -/*----------------------------------------------------------------------------*/ -/* Low Power Acquire/Release (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Pending Packets Number Reporting (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* ACPI state inquiry (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ); -#endif - -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* get ECO version from Revision ID register (for Win32) */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* set preferred band configuration corresponding to network type */ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get currently operating channel information */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get BSS Descriptor information */ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -wlanGetTargetBssDescByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* check for system configuration to generate message on scan list */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ); - - -#endif /* _WLAN_LIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_oid.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_oid.h deleted file mode 100755 index e123bf09f41a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_oid.h +++ /dev/null @@ -1,2081 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_oid.h#2 $ -*/ - -/*! \file "wlan_oid.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_oid.h $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * OID_802_11_RSSI, - * * * * OID_802_11_RSSI_TRIGGER, - * * * * OID_802_11_STATISTICS, - * * * * OID_802_11_DISASSOCIATE, - * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-08 11:38:11 GMT mtk02752 -** add declares for RF test related APIs -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-24 22:41:53 GMT mtk02752 -** remove u4SysTime, MSDN 10-second will be implemented in FW side -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 20:30:13 GMT mtk02752 -** add u4SysTime field in PARAM_BSSID_EX_T -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-12 19:48:35 GMT mtk02752 -** allow upper layer to set a packet filter with PROMISCUOUS mode -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:12 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_OID_H -#define _WLAN_OID_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define PARAM_MAX_LEN_SSID 32 - -#define PARAM_MAC_ADDR_LEN 6 - -#define ETHERNET_HEADER_SZ 14 -#define ETHERNET_MIN_PKT_SZ 60 -#define ETHERNET_MAX_PKT_SZ 1514 - -#define PARAM_MAX_LEN_RATES 8 -#define PARAM_MAX_LEN_RATES_EX 16 - -#define PARAM_AUTH_REQUEST_REAUTH 0x01 -#define PARAM_AUTH_REQUEST_KEYUPDATE 0x02 -#define PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 -#define PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E - -#define PARAM_EEPROM_READ_METHOD_READ 1 -#define PARAM_EEPROM_READ_METHOD_GETSIZE 0 - -#define PARAM_WHQL_RSSI_MAX_DBM (-10) -#define PARAM_WHQL_RSSI_MIN_DBM (-200) - -#define PARAM_DEVICE_WAKE_UP_ENABLE 0x00000001 -#define PARAM_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002 -#define PARAM_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004 - -#define PARAM_WAKE_UP_MAGIC_PACKET 0x00000001 -#define PARAM_WAKE_UP_PATTERN_MATCH 0x00000002 -#define PARAM_WAKE_UP_LINK_CHANGE 0x00000004 - - -/* Packet filter bit definitioin (UINT_32 bit-wise definition) */ -#define PARAM_PACKET_FILTER_DIRECTED 0x00000001 -#define PARAM_PACKET_FILTER_MULTICAST 0x00000002 -#define PARAM_PACKET_FILTER_ALL_MULTICAST 0x00000004 -#define PARAM_PACKET_FILTER_BROADCAST 0x00000008 -#define PARAM_PACKET_FILTER_PROMISCUOUS 0x00000020 -#define PARAM_PACKET_FILTER_ALL_LOCAL 0x00000080 -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#define PARAM_PACKET_FILTER_P2P_MASK 0xC0000000 -#define PARAM_PACKET_FILTER_PROBE_REQ 0x80000000 -#define PARAM_PACKET_FILTER_ACTION_FRAME 0x40000000 -#endif - -#if CFG_SLT_SUPPORT -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST | \ - PARAM_PACKET_FILTER_ALL_MULTICAST) -#else -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST) -#endif - -#define PARAM_MEM_DUMP_MAX_SIZE 2048 - -#define BT_PROFILE_PARAM_LEN 8 -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration which match to NDIS5.1 */ -/*----------------------------------------------------------------------------*/ -/* NDIS_802_11_AUTHENTICATION_MODE */ -typedef enum _ENUM_PARAM_AUTH_MODE_T -{ - AUTH_MODE_OPEN, /*!< Open system */ - AUTH_MODE_SHARED, /*!< Shared key */ - AUTH_MODE_AUTO_SWITCH, /*!< Either open system or shared key */ - AUTH_MODE_WPA, - AUTH_MODE_WPA_PSK, - AUTH_MODE_WPA_NONE, /*!< For Ad hoc */ - AUTH_MODE_WPA2, - AUTH_MODE_WPA2_PSK, - AUTH_MODE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_AUTH_MODE_T, *P_ENUM_PARAM_AUTH_MODE_T; - -/* NDIS_802_11_ENCRYPTION_STATUS *//* Encryption types */ -typedef enum _ENUM_WEP_STATUS_T -{ - ENUM_WEP_ENABLED, - ENUM_ENCRYPTION1_ENABLED = ENUM_WEP_ENABLED, - ENUM_WEP_DISABLED, - ENUM_ENCRYPTION_DISABLED = ENUM_WEP_DISABLED, - ENUM_WEP_KEY_ABSENT, - ENUM_ENCRYPTION1_KEY_ABSENT = ENUM_WEP_KEY_ABSENT, - ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION_NOT_SUPPORTED = ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION2_ENABLED, - ENUM_ENCRYPTION2_KEY_ABSENT, - ENUM_ENCRYPTION3_ENABLED, - ENUM_ENCRYPTION3_KEY_ABSENT -} ENUM_PARAM_ENCRYPTION_STATUS_T, *P_ENUM_PARAM_ENCRYPTION_STATUS_T; - - - -typedef UINT_8 PARAM_MAC_ADDRESS[PARAM_MAC_ADDR_LEN]; - -typedef UINT_32 PARAM_KEY_INDEX; -typedef UINT_64 PARAM_KEY_RSC; -typedef INT_32 PARAM_RSSI; - -typedef UINT_32 PARAM_FRAGMENTATION_THRESHOLD; -typedef UINT_32 PARAM_RTS_THRESHOLD; - -typedef UINT_8 PARAM_RATES[PARAM_MAX_LEN_RATES]; -typedef UINT_8 PARAM_RATES_EX[PARAM_MAX_LEN_RATES_EX]; - -typedef enum _ENUM_PARAM_PHY_TYPE_T { - PHY_TYPE_802_11ABG = 0, /*!< Can associated with 802.11abg AP, Scan dual band. */ - PHY_TYPE_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 802_11a BSSs. */ - PHY_TYPE_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 802_11ab BSSs. */ - PHY_TYPE_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 802_11bg BSSs. */ - PHY_TYPE_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 802_11ag BSSs. */ - PHY_TYPE_NUM // 5 -} ENUM_PARAM_PHY_TYPE_T, *P_ENUM_PARAM_PHY_TYPE_T; - -typedef enum _ENUM_PARAM_OP_MODE_T { - NET_TYPE_IBSS = 0, /*!< Try to merge/establish an AdHoc, do periodic SCAN for merging. */ - NET_TYPE_INFRA, /*!< Try to join an Infrastructure, do periodic SCAN for joining. */ - NET_TYPE_AUTO_SWITCH, /*!< Try to join an Infrastructure, if fail then try to merge or - establish an AdHoc, do periodic SCAN for joining or merging. */ - NET_TYPE_DEDICATED_IBSS, /*!< Try to merge an AdHoc first, if fail then establish AdHoc permanently, no more SCAN. */ - NET_TYPE_NUM // 4 -} ENUM_PARAM_OP_MODE_T, *P_ENUM_PARAM_OP_MODE_T; - -typedef struct _PARAM_SSID_T { - UINT_32 u4SsidLen; /*!< SSID length in bytes. Zero length is broadcast(any) SSID */ - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; -} PARAM_SSID_T, *P_PARAM_SSID_T; - -/* This is enum defined for user to select an AdHoc Mode */ -typedef enum _ENUM_PARAM_AD_HOC_MODE_T { - AD_HOC_MODE_11B = 0, /*!< Create 11b IBSS if we support 802.11abg/802.11bg. */ - AD_HOC_MODE_MIXED_11BG, /*!< Create 11bg mixed IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11G, /*!< Create 11g only IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11A, /*!< Create 11a only IBSS if we support 802.11abg. */ - AD_HOC_MODE_NUM // 4 -} ENUM_PARAM_AD_HOC_MODE_T, *P_ENUM_PARAM_AD_HOC_MODE_T; - - -typedef enum _ENUM_PARAM_MEDIA_STATE_T { - PARAM_MEDIA_STATE_CONNECTED, - PARAM_MEDIA_STATE_DISCONNECTED, - PARAM_MEDIA_STATE_TO_BE_INDICATED // for following MSDN re-association behavior -} ENUM_PARAM_MEDIA_STATE_T, *P_ENUM_PARAM_MEDIA_STATE_T; - - -typedef enum _ENUM_PARAM_NETWORK_TYPE_T { - PARAM_NETWORK_TYPE_FH, - PARAM_NETWORK_TYPE_DS, - PARAM_NETWORK_TYPE_OFDM5, - PARAM_NETWORK_TYPE_OFDM24, - PARAM_NETWORK_TYPE_AUTOMODE, - PARAM_NETWORK_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_NETWORK_TYPE_T, *P_ENUM_PARAM_NETWORK_TYPE_T; - - -typedef struct _PARAM_NETWORK_TYPE_LIST { - UINT_32 NumberOfItems; /*!< At least 1 */ - ENUM_PARAM_NETWORK_TYPE_T eNetworkType [1]; -} PARAM_NETWORK_TYPE_LIST, *PPARAM_NETWORK_TYPE_LIST; - -typedef enum _ENUM_PARAM_PRIVACY_FILTER_T -{ - PRIVACY_FILTER_ACCEPT_ALL, - PRIVACY_FILTER_8021xWEP, - PRIVACY_FILTER_NUM -} ENUM_PARAM_PRIVACY_FILTER_T, *P_ENUM_PARAM_PRIVACY_FILTER_T; - -typedef enum _ENUM_RELOAD_DEFAULTS -{ - ENUM_RELOAD_WEP_KEYS -} PARAM_RELOAD_DEFAULTS, *P_PARAM_RELOAD_DEFAULTS; - -typedef struct _PARAM_PM_PACKET_PATTERN -{ - UINT_32 Priority; // Importance of the given pattern. - UINT_32 Reserved; // Context information for transports. - UINT_32 MaskSize; // Size in bytes of the pattern mask. - UINT_32 PatternOffset; // Offset from beginning of this - // structure to the pattern bytes. - UINT_32 PatternSize; // Size in bytes of the pattern. - UINT_32 PatternFlags; // Flags (TBD). -} PARAM_PM_PACKET_PATTERN, *P_PARAM_PM_PACKET_PATTERN; - -/*--------------------------------------------------------------*/ -/*! \brief Struct definition to indicate specific event. */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_STATUS_TYPE_T -{ - ENUM_STATUS_TYPE_AUTHENTICATION, - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE, - ENUM_STATUS_TYPE_CANDIDATE_LIST, - ENUM_STATUS_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_STATUS_TYPE_T, *P_ENUM_STATUS_TYPE_T; - - -typedef struct _PARAM_802_11_CONFIG_FH_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4HopPattern; /*!< Defined as 802.11 */ - UINT_32 u4HopSet; /*!< to one if non-802.11 */ - UINT_32 u4DwellTime; /*!< In unit of Kusec */ -} PARAM_802_11_CONFIG_FH_T, *P_PARAM_802_11_CONFIG_FH_T; - -typedef struct _PARAM_802_11_CONFIG_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4BeaconPeriod; /*!< In unit of Kusec */ - UINT_32 u4ATIMWindow; /*!< In unit of Kusec */ - UINT_32 u4DSConfig; /*!< Channel frequency in unit of kHz */ - PARAM_802_11_CONFIG_FH_T rFHConfig; -} PARAM_802_11_CONFIG_T, *P_PARAM_802_11_CONFIG_T; - -typedef struct _PARAM_STATUS_INDICATION_T -{ - ENUM_STATUS_TYPE_T eStatusType; -} PARAM_STATUS_INDICATION_T, *P_PARAM_STATUS_INDICATION_T; - -typedef struct _PARAM_AUTH_REQUEST_T -{ - UINT_32 u4Length; /*!< Length of this struct */ - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4Flags; /*!< Definitions are as follows */ -} PARAM_AUTH_REQUEST_T, *P_PARAM_AUTH_REQUEST_T; - -typedef struct _PARAM_AUTH_EVENT_T -{ - PARAM_STATUS_INDICATION_T rStatus; - PARAM_AUTH_REQUEST_T arRequest[1]; -} PARAM_AUTH_EVENT_T, *P_PARAM_AUTH_EVENT_T; - -/*! \brief Capabilities, privacy, rssi and IEs of each BSSID */ -typedef struct _PARAM_BSSID_EX_T { - UINT_32 u4Length; /*!< Length of structure */ - PARAM_MAC_ADDRESS arMacAddress; /*!< BSSID */ - UINT_8 Reserved[2]; - PARAM_SSID_T rSsid; /*!< SSID */ - UINT_32 u4Privacy; /*!< Need WEP encryption */ - PARAM_RSSI rRssi; /*!< in dBm */ - ENUM_PARAM_NETWORK_TYPE_T eNetworkTypeInUse; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - PARAM_RATES_EX rSupportedRates; - UINT_32 u4IELength; - UINT_8 aucIEs[1]; -} PARAM_BSSID_EX_T, *P_PARAM_BSSID_EX_T; - -typedef struct _PARAM_BSSID_LIST_EX { - UINT_32 u4NumberOfItems; /*!< at least 1 */ - PARAM_BSSID_EX_T arBssid[1]; -} PARAM_BSSID_LIST_EX_T, *P_PARAM_BSSID_LIST_EX_T; - - -typedef struct _PARAM_WEP_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< 0: pairwise key, others group keys */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_WEP_T, *P_PARAM_WEP_T; - -/*! \brief Key mapping of BSSID */ -typedef struct _PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_KEY_T, *P_PARAM_KEY_T; - -typedef struct _PARAM_REMOVE_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ -} PARAM_REMOVE_KEY_T, *P_PARAM_REMOVE_KEY_T; - -#if CFG_SUPPORT_WAPI -typedef enum _ENUM_KEY_TYPE { - ENUM_WPI_PAIRWISE_KEY = 0, - ENUM_WPI_GROUP_KEY -} ENUM_KEY_TYPE; - -typedef enum _ENUM_WPI_PROTECT_TYPE -{ - ENUM_WPI_NONE, - ENUM_WPI_RX, - ENUM_WPI_TX, - ENUM_WPI_RX_TX -} ENUM_WPI_PROTECT_TYPE; - -typedef struct _PARAM_WPI_KEY_T { - ENUM_KEY_TYPE eKeyType; - ENUM_WPI_PROTECT_TYPE eDirection; - UINT_8 ucKeyID; - UINT_8 aucRsv[3]; - UINT_8 aucAddrIndex[12]; - UINT_32 u4LenWPIEK; - UINT_8 aucWPIEK[256]; - UINT_32 u4LenWPICK; - UINT_8 aucWPICK[256]; - UINT_8 aucPN[16]; -} PARAM_WPI_KEY_T, *P_PARAM_WPI_KEY_T; -#endif - - -typedef enum _PARAM_POWER_MODE -{ - Param_PowerModeCAM, - Param_PowerModeMAX_PSP, - Param_PowerModeFast_PSP, - Param_PowerModeMax /* Upper bound, not real case */ -} PARAM_POWER_MODE, *PPARAM_POWER_MODE; - -typedef enum _PARAM_DEVICE_POWER_STATE -{ - ParamDeviceStateUnspecified = 0, - ParamDeviceStateD0, - ParamDeviceStateD1, - ParamDeviceStateD2, - ParamDeviceStateD3, - ParamDeviceStateMaximum -} PARAM_DEVICE_POWER_STATE, *PPARAM_DEVICE_POWER_STATE; - -#if CFG_SUPPORT_802_11D - -/*! \brief The enumeration definitions for OID_IPN_MULTI_DOMAIN_CAPABILITY */ -typedef enum _PARAM_MULTI_DOMAIN_CAPABILITY { - ParamMultiDomainCapDisabled, - ParamMultiDomainCapEnabled -} PARAM_MULTI_DOMAIN_CAPABILITY, *P_PARAM_MULTI_DOMAIN_CAPABILITY; -#endif - -typedef struct _COUNTRY_STRING_ENTRY { - UINT_8 aucCountryCode[2]; - UINT_8 aucEnvironmentCode[2]; -} COUNTRY_STRING_ENTRY, *P_COUNTRY_STRING_ENTRY; - -/* Power management related definition and enumerations */ -#define UAPSD_NONE 0 -#define UAPSD_AC0 (BIT(0) | BIT(4)) -#define UAPSD_AC1 (BIT(1) | BIT(5)) -#define UAPSD_AC2 (BIT(2) | BIT(6)) -#define UAPSD_AC3 (BIT(3) | BIT(7)) -#define UAPSD_ALL (UAPSD_AC0 | UAPSD_AC1 | UAPSD_AC2 | UAPSD_AC3) - -typedef enum _ENUM_POWER_SAVE_PROFILE_T -{ - ENUM_PSP_CONTINUOUS_ACTIVE = 0, - ENUM_PSP_CONTINUOUS_POWER_SAVE, - ENUM_PSP_FAST_SWITCH, - ENUM_PSP_NUM -} ENUM_POWER_SAVE_PROFILE_T, *PENUM_POWER_SAVE_PROFILE_T; - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query testing type. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_802_11_TEST_T -{ - UINT_32 u4Length; - UINT_32 u4Type; - union - { - PARAM_AUTH_EVENT_T AuthenticationEvent; - PARAM_RSSI RssiTrigger; - } u; -} PARAM_802_11_TEST_T, *P_PARAM_802_11_TEST_T; - - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query authentication and encryption capability. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_AUTH_ENCRYPTION_T -{ - ENUM_PARAM_AUTH_MODE_T eAuthModeSupported; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncryptStatusSupported; -} PARAM_AUTH_ENCRYPTION_T, *P_PARAM_AUTH_ENCRYPTION_T; - -typedef struct _PARAM_CAPABILITY_T -{ - UINT_32 u4Length; - UINT_32 u4Version; - UINT_32 u4NoOfPMKIDs; - UINT_32 u4NoOfAuthEncryptPairsSupported; - PARAM_AUTH_ENCRYPTION_T arAuthenticationEncryptionSupported[1]; -} PARAM_CAPABILITY_T, *P_PARAM_CAPABILITY_T; - -typedef UINT_8 PARAM_PMKID_VALUE[16]; - -typedef struct _PARAM_BSSID_INFO_T -{ - PARAM_MAC_ADDRESS arBSSID; - PARAM_PMKID_VALUE arPMKID; -} PARAM_BSSID_INFO_T, *P_PARAM_BSSID_INFO_T; - -typedef struct _PARAM_PMKID_T -{ - UINT_32 u4Length; - UINT_32 u4BSSIDInfoCount; - PARAM_BSSID_INFO_T arBSSIDInfo[1]; -} PARAM_PMKID_T, *P_PARAM_PMKID_T; - -/*! \brief PMKID candidate lists. */ -typedef struct _PARAM_PMKID_CANDIDATE_T { - PARAM_MAC_ADDRESS arBSSID; - UINT_32 u4Flags; -} PARAM_PMKID_CANDIDATE_T, *P_PARAM_PMKID_CANDIDATE_T; - -//#ifdef LINUX -typedef struct _PARAM_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} PARAM_PMKID_CANDIDATE_LIST_T, *P_PARAM_PMKID_CANDIDATE_LIST_T; -//#endif - -typedef struct _PARAM_CUSTOM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_CUSTOM_MCR_RW_STRUC_T, *P_PARAM_CUSTOM_MCR_RW_STRUC_T; - -typedef struct _PARAM_CUSTOM_MEM_DUMP_STRUC_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} PARAM_CUSTOM_MEM_DUMP_STRUC_T, *P_PARAM_CUSTOM_MEM_DUMP_STRUC_T; - - -typedef struct _PARAM_CUSTOM_SW_CTRL_STRUC_T { - UINT_32 u4Id; - UINT_32 u4Data; -} PARAM_CUSTOM_SW_CTRL_STRUC_T, *P_PARAM_CUSTOM_SW_CTRL_STRUC_T; - - -typedef struct _PARAM_CUSTOM_EEPROM_RW_STRUC_T { - UINT_8 ucEepromMethod; /* For read only read: 1, query size: 0*/ - UINT_8 ucEepromIndex; - UINT_8 reserved; - UINT_16 u2EepromData; -} PARAM_CUSTOM_EEPROM_RW_STRUC_T, *P_PARAM_CUSTOM_EEPROM_RW_STRUC_T, - PARAM_CUSTOM_NVRAM_RW_STRUCT_T, *P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T; - -typedef struct _PARAM_CUSTOM_WMM_PS_TEST_STRUC_T { - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ - UINT_8 reserved; -} PARAM_CUSTOM_WMM_PS_TEST_STRUC_T, *P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T; - -typedef struct _PARAM_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} PARAM_CUSTOM_NOA_PARAM_STRUC_T, *P_PARAM_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} PARAM_CUSTOM_OPPPS_PARAM_STRUC_T, *P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} PARAM_CUSTOM_UAPSD_PARAM_STRUC_T, *P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_P2P_SET_STRUC_T { - UINT_32 u4Enable; - UINT_32 u4Mode; -} PARAM_CUSTOM_P2P_SET_STRUC_T, *P_PARAM_CUSTOM_P2P_SET_STRUC_T; - -typedef enum _ENUM_CFG_SRC_TYPE_T { - CFG_SRC_TYPE_EEPROM, - CFG_SRC_TYPE_NVRAM, - CFG_SRC_TYPE_UNKNOWN, - CFG_SRC_TYPE_NUM -} ENUM_CFG_SRC_TYPE_T, *P_ENUM_CFG_SRC_TYPE_T; - -typedef enum _ENUM_EEPROM_TYPE_T { - EEPROM_TYPE_NO, - EEPROM_TYPE_PRESENT, - EEPROM_TYPE_NUM -} ENUM_EEPROM_TYPE_T, *P_ENUM_EEPROM_TYPE_T; - -typedef struct _PARAM_QOS_TSINFO { - UINT_8 ucTrafficType; /* Traffic Type: 1 for isochronous 0 for asynchronous */ - UINT_8 ucTid; /* TSID: must be between 8 ~ 15 */ - UINT_8 ucDirection; /* direction */ - UINT_8 ucAccessPolicy; /* access policy */ - UINT_8 ucAggregation; /* aggregation */ - UINT_8 ucApsd; /* APSD */ - UINT_8 ucuserPriority; /* user priority */ - UINT_8 ucTsInfoAckPolicy; /* TSINFO ACK policy */ - UINT_8 ucSchedule; /* Schedule */ -} PARAM_QOS_TSINFO, *P_PARAM_QOS_TSINFO; - -typedef struct _PARAM_QOS_TSPEC { - PARAM_QOS_TSINFO rTsInfo; /* TS info field */ - UINT_16 u2NominalMSDUSize; /* nominal MSDU size */ - UINT_16 u2MaxMSDUsize; /* maximum MSDU size */ - UINT_32 u4MinSvcIntv; /* minimum service interval */ - UINT_32 u4MaxSvcIntv; /* maximum service interval */ - UINT_32 u4InactIntv; /* inactivity interval */ - UINT_32 u4SpsIntv; /* suspension interval */ - UINT_32 u4SvcStartTime; /* service start time */ - UINT_32 u4MinDataRate; /* minimum Data rate */ - UINT_32 u4MeanDataRate; /* mean data rate */ - UINT_32 u4PeakDataRate; /* peak data rate */ - UINT_32 u4MaxBurstSize; /* maximum burst size */ - UINT_32 u4DelayBound; /* delay bound */ - UINT_32 u4MinPHYRate; /* minimum PHY rate */ - UINT_16 u2Sba; /* surplus bandwidth allowance */ - UINT_16 u2MediumTime; /* medium time */ -} PARAM_QOS_TSPEC, *P_PARAM_QOS_TSPEC; - -typedef struct _PARAM_QOS_ADDTS_REQ_INFO { - PARAM_QOS_TSPEC rTspec; -} PARAM_QOS_ADDTS_REQ_INFO, *P_PARAM_QOS_ADDTS_REQ_INFO; - -typedef struct _PARAM_VOIP_CONFIG { - UINT_32 u4VoipTrafficInterval; /* 0: disable VOIP configuration */ -} PARAM_VOIP_CONFIG, *P_PARAM_VOIP_CONFIG; - -/*802.11 Statistics Struct*/ -typedef struct _PARAM_802_11_STATISTICS_STRUCT_T { - UINT_32 u4Length; // Length of structure - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; - LARGE_INTEGER rTKIPLocalMICFailures; - LARGE_INTEGER rTKIPICVErrors; - LARGE_INTEGER rTKIPCounterMeasuresInvoked; - LARGE_INTEGER rTKIPReplays; - LARGE_INTEGER rCCMPFormatErrors; - LARGE_INTEGER rCCMPReplays; - LARGE_INTEGER rCCMPDecryptErrors; - LARGE_INTEGER rFourWayHandshakeFailures; - LARGE_INTEGER rWEPUndecryptableCount; - LARGE_INTEGER rWEPICVErrorCount; - LARGE_INTEGER rDecryptSuccessCount; - LARGE_INTEGER rDecryptFailureCount; -} PARAM_802_11_STATISTICS_STRUCT_T, *P_PARAM_802_11_STATISTICS_STRUCT_T; - -/* Linux Network Device Statistics Struct */ -typedef struct _PARAM_LINUX_NETDEV_STATISTICS_T { - UINT_32 u4RxPackets; - UINT_32 u4TxPackets; - UINT_32 u4RxBytes; - UINT_32 u4TxBytes; - UINT_32 u4RxErrors; - UINT_32 u4TxErrors; - UINT_32 u4Multicast; -} PARAM_LINUX_NETDEV_STATISTICS_T, *P_PARAM_LINUX_NETDEV_STATISTICS_T; - - -typedef struct _PARAM_MTK_WIFI_TEST_STRUC_T { - UINT_32 u4FuncIndex; - UINT_32 u4FuncData; -} PARAM_MTK_WIFI_TEST_STRUC_T, *P_PARAM_MTK_WIFI_TEST_STRUC_T; - - -/* 802.11 Media stream constraints */ -typedef enum _ENUM_MEDIA_STREAM_MODE { - ENUM_MEDIA_STREAM_OFF, - ENUM_MEDIA_STREAM_ON -} ENUM_MEDIA_STREAM_MODE, *P_ENUM_MEDIA_STREAM_MODE; - -/* for NDIS 5.1 Media Streaming Change */ -typedef struct _PARAM_MEDIA_STREAMING_INDICATION { - PARAM_STATUS_INDICATION_T rStatus; - ENUM_MEDIA_STREAM_MODE eMediaStreamMode; -} PARAM_MEDIA_STREAMING_INDICATION, *P_PARAM_MEDIA_STREAMING_INDICATION; - - -#define PARAM_PROTOCOL_ID_DEFAULT 0x00 -#define PARAM_PROTOCOL_ID_TCP_IP 0x02 -#define PARAM_PROTOCOL_ID_IPX 0x06 -#define PARAM_PROTOCOL_ID_NBF 0x07 -#define PARAM_PROTOCOL_ID_MAX 0x0F -#define PARAM_PROTOCOL_ID_MASK 0x0F - -/* for NDIS OID_GEN_NETWORK_LAYER_ADDRESSES */ -typedef struct _PARAM_NETWORK_ADDRESS_IP -{ - UINT_16 sin_port; - UINT_32 in_addr; - UINT_8 sin_zero[8]; -} PARAM_NETWORK_ADDRESS_IP, *P_PARAM_NETWORK_ADDRESS_IP; - -typedef struct _PARAM_NETWORK_ADDRESS { - UINT_16 u2AddressLength; // length in bytes of Address[] in this - UINT_16 u2AddressType; // type of this address (PARAM_PROTOCOL_ID_XXX above) - UINT_8 aucAddress[1]; // actually AddressLength bytes long -} PARAM_NETWORK_ADDRESS, *P_PARAM_NETWORK_ADDRESS; - -// The following is used with OID_GEN_NETWORK_LAYER_ADDRESSES to set network layer addresses on an interface - -typedef struct _PARAM_NETWORK_ADDRESS_LIST -{ - UINT_32 u4AddressCount; // number of addresses following - UINT_16 u2AddressType; // type of this address (NDIS_PROTOCOL_ID_XXX above) - PARAM_NETWORK_ADDRESS arAddress[1]; // actually AddressCount elements long -} PARAM_NETWORK_ADDRESS_LIST, *P_PARAM_NETWORK_ADDRESS_LIST; - -#if CFG_SLT_SUPPORT - -#define FIXED_BW_LG20 0x0000 -#define FIXED_BW_UL20 0x2000 -#define FIXED_BW_DL40 0x3000 - -#define FIXED_EXT_CHNL_U20 0x4000 // For AGG register. -#define FIXED_EXT_CHNL_L20 0xC000 // For AGG regsiter. - -typedef enum _ENUM_MTK_LP_TEST_MODE_T { - ENUM_MTK_LP_TEST_NORMAL, - ENUM_MTK_LP_TEST_GOLDEN_SAMPLE, - ENUM_MTK_LP_TEST_DUT, - ENUM_MTK_LP_TEST_MODE_NUM -} ENUM_MTK_LP_TEST_MODE_T, *P_ENUM_MTK_LP_TEST_MODE_T; - -typedef enum _ENUM_MTK_SLT_FUNC_IDX_T { - ENUM_MTK_SLT_FUNC_DO_NOTHING, - ENUM_MTK_SLT_FUNC_INITIAL, - ENUM_MTK_SLT_FUNC_RATE_SET, - ENUM_MTK_SLT_FUNC_LP_SET, - ENUM_MTK_SLT_FUNC_NUM -} ENUM_MTK_SLT_FUNC_IDX_T, *P_ENUM_MTK_SLT_FUNC_IDX_T; - -typedef struct _PARAM_MTK_SLT_LP_TEST_STRUC_T { - ENUM_MTK_LP_TEST_MODE_T rLpTestMode; - UINT_32 u4BcnRcvNum; -} PARAM_MTK_SLT_LP_TEST_STRUC_T, *P_PARAM_MTK_SLT_LP_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TR_TEST_STRUC_T { - ENUM_PARAM_NETWORK_TYPE_T rNetworkType; // Network Type OFDM5G or OFDM2.4G - UINT_32 u4FixedRate; // Fixed Rate including BW -} PARAM_MTK_SLT_TR_TEST_STRUC_T, *P_PARAM_MTK_SLT_TR_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_INITIAL_STRUC_T { - UINT_8 aucTargetMacAddr[PARAM_MAC_ADDR_LEN]; - UINT_16 u2SiteID; -} PARAM_MTK_SLT_INITIAL_STRUC_T, *P_PARAM_MTK_SLT_INITIAL_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TEST_STRUC_T { - ENUM_MTK_SLT_FUNC_IDX_T rSltFuncIdx; - UINT_32 u4Length; /* Length of structure, - including myself */ - UINT_32 u4FuncInfoLen; /* Include following content - field and myself */ - union { - PARAM_MTK_SLT_INITIAL_STRUC_T rMtkInitTest; - PARAM_MTK_SLT_LP_TEST_STRUC_T rMtkLpTest; - PARAM_MTK_SLT_TR_TEST_STRUC_T rMtkTRTest; - } unFuncInfoContent; - -} PARAM_MTK_SLT_TEST_STRUC_T, *P_PARAM_MTK_SLT_TEST_STRUC_T; - -#endif - -/*--------------------------------------------------------------*/ -/*! \brief For Fixed Rate Configuration (Registry) */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_REGISTRY_FIXED_RATE_T { - FIXED_RATE_NONE, - FIXED_RATE_1M, - FIXED_RATE_2M, - FIXED_RATE_5_5M, - FIXED_RATE_11M, - FIXED_RATE_6M, - FIXED_RATE_9M, - FIXED_RATE_12M, - FIXED_RATE_18M, - FIXED_RATE_24M, - FIXED_RATE_36M, - FIXED_RATE_48M, - FIXED_RATE_54M, - FIXED_RATE_MCS0_20M_800NS, - FIXED_RATE_MCS1_20M_800NS, - FIXED_RATE_MCS2_20M_800NS, - FIXED_RATE_MCS3_20M_800NS, - FIXED_RATE_MCS4_20M_800NS, - FIXED_RATE_MCS5_20M_800NS, - FIXED_RATE_MCS6_20M_800NS, - FIXED_RATE_MCS7_20M_800NS, - FIXED_RATE_MCS0_20M_400NS, - FIXED_RATE_MCS1_20M_400NS, - FIXED_RATE_MCS2_20M_400NS, - FIXED_RATE_MCS3_20M_400NS, - FIXED_RATE_MCS4_20M_400NS, - FIXED_RATE_MCS5_20M_400NS, - FIXED_RATE_MCS6_20M_400NS, - FIXED_RATE_MCS7_20M_400NS, - FIXED_RATE_MCS0_40M_800NS, - FIXED_RATE_MCS1_40M_800NS, - FIXED_RATE_MCS2_40M_800NS, - FIXED_RATE_MCS3_40M_800NS, - FIXED_RATE_MCS4_40M_800NS, - FIXED_RATE_MCS5_40M_800NS, - FIXED_RATE_MCS6_40M_800NS, - FIXED_RATE_MCS7_40M_800NS, - FIXED_RATE_MCS32_800NS, - FIXED_RATE_MCS0_40M_400NS, - FIXED_RATE_MCS1_40M_400NS, - FIXED_RATE_MCS2_40M_400NS, - FIXED_RATE_MCS3_40M_400NS, - FIXED_RATE_MCS4_40M_400NS, - FIXED_RATE_MCS5_40M_400NS, - FIXED_RATE_MCS6_40M_400NS, - FIXED_RATE_MCS7_40M_400NS, - FIXED_RATE_MCS32_400NS, - FIXED_RATE_NUM -} ENUM_REGISTRY_FIXED_RATE_T, *P_ENUM_REGISTRY_FIXED_RATE_T; - -typedef enum _ENUM_BT_CMD_T { - BT_CMD_PROFILE = 0, - BT_CMD_UPDATE, - BT_CMD_NUM -} ENUM_BT_CMD_T; - -typedef enum _ENUM_BT_PROFILE_T { - BT_PROFILE_CUSTOM = 0, - BT_PROFILE_SCO, - BT_PROFILE_ACL, - BT_PROFILE_MIXED, - BT_PROFILE_NO_CONNECTION, - BT_PROFILE_NUM -} ENUM_BT_PROFILE_T; - -typedef struct _PTA_PROFILE_T { - ENUM_BT_PROFILE_T eBtProfile; - union { - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - /* 0: sco reserved slot time, - 1: sco idle slot time, - 2: acl throughput, - 3: bt tx power, - 4: bt rssi - 5: VoIP interval - 6: BIT(0) Use this field, BIT(1) 0 apply single/ 1 dual PTA setting. - */ - UINT_32 au4Btcr[4]; - } u; -} PTA_PROFILE_T, *P_PTA_PROFILE_T; - -typedef struct _PTA_IPC_T { - UINT_8 ucCmd; - UINT_8 ucLen; - union { - PTA_PROFILE_T rProfile; - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - } u; -} PARAM_PTA_IPC_T, *P_PARAM_PTA_IPC_T, PTA_IPC_T, *P_PTA_IPC_T; - -/*--------------------------------------------------------------*/ -/*! \brief CFG80211 Scan Request Container */ -/*--------------------------------------------------------------*/ - -typedef struct _PARAM_SCAN_REQUEST_EXT_T { - PARAM_SSID_T rSsid; - UINT_32 u4IELength; - PUINT_8 pucIE; -} PARAM_SCAN_REQUEST_EXT_T, *P_PARAM_SCAN_REQUEST_EXT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Routines to set parameters or query information. */ -/*--------------------------------------------------------------*/ -/***** Routines in wlan_oid.c *****/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryNetworkTypeInUse( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScan( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssidList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetSsid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySsid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryInfrastructureMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetInfrastructureMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAuthMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAuthMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if 0 -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAddWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetAddKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetReloadDefaults( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCapability( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssi( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssiTrigger( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRssiTrigger( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID prSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPmkid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetPmkid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySupportedRates( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestRxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestTxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryVendorId( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#ifdef LINUX - -WLAN_STATUS -wlanoidQueryStatisticsForLinux ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#endif - -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetCurrentPacketFilter( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen -); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -WLAN_STATUS -wlanoidSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/* RF Test related APIs */ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_WAPI -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_SUPPORT_WPS2 -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 u4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBSSInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidUpdateSLTMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#endif - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_BUILD_DATE_CODE -WLAN_STATUS -wlanoidQueryBuildDateCode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#endif - -/* -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -*/ - -#if CFG_ENABLE_WIFI_DIRECT -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_OID_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_p2p.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_p2p.h deleted file mode 100755 index f2380f6df626..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/include/wlan_p2p.h +++ /dev/null @@ -1,469 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/wlan_p2p.h#3 $ -*/ - -/*! \file "wlan_p2p.h" - \brief This file contains the declairations of Wi-Fi Direct command - processing routines for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_p2p.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * -** -*/ - -#ifndef _WLAN_P2P_H -#define _WLAN_P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* Service Discovery */ -typedef struct _PARAM_P2P_SEND_SD_RESPONSE { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucChannelNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_RESPONSE, *P_PARAM_P2P_SEND_SD_RESPONSE; - -typedef struct _PARAM_P2P_GET_SD_REQUEST { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST, *P_PARAM_P2P_GET_SD_REQUEST; - -typedef struct _PARAM_P2P_GET_SD_REQUEST_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucChannelNum; /* Channel Number Where SD Request is received. */ - UINT_8 ucSeqNum; /* Get SD Request by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST_EX, *P_PARAM_P2P_GET_SD_REQUEST_EX; - -typedef struct _PARAM_P2P_SEND_SD_REQUEST { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucVersionNum; /* Indicate the Service Discovery Supplicant Version. */ - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_REQUEST, *P_PARAM_P2P_SEND_SD_REQUEST; - -/* Service Discovery 1.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE, *P_PARAM_P2P_GET_SD_RESPONSE; - -/* Service Discovery 2.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucSeqNum; /* Get SD Response by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE_EX, *P_PARAM_P2P_GET_SD_RESPONSE_EX; - - -typedef struct _PARAM_P2P_TERMINATE_SD_PHASE { - PARAM_MAC_ADDRESS rPeerAddr; -} PARAM_P2P_TERMINATE_SD_PHASE, *P_PARAM_P2P_TERMINATE_SD_PHASE; - - -/*! \brief Key mapping of BSSID */ -typedef struct _P2P_PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} P2P_PARAM_KEY_T, *P_P2P_PARAM_KEY_T; - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_PRE_PARAMS { - UINT_16 idx_mode; - UINT_16 idx; - UINT_32 value; -} NL80211_DRIVER_TEST_PRE_PARAMS, *P_NL80211_DRIVER_TEST_PRE_PARAMS; - - -typedef struct _NL80211_DRIVER_TEST_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_PARAMS, *P_NL80211_DRIVER_TEST_PARAMS; - - -/* P2P Sigma*/ -typedef struct _NL80211_DRIVER_P2P_SIGMA_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_32 idx; - UINT_32 value; -}NL80211_DRIVER_P2P_SIGMA_PARAMS, *P_NL80211_DRIVER_P2P_SIGMA_PARAMS; - - -/* Hotspot Client Management */ -typedef struct _NL80211_DRIVER_hotspot_block_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_8 ucblocked; - UINT_8 aucBssid[MAC_ADDR_LEN]; -}NL80211_DRIVER_hotspot_block_PARAMS, *P_NL80211_DRIVER_hotspot_block_PARAMS; - - -#if CFG_SUPPORT_WFD -typedef struct _NL80211_DRIVER_WFD_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_32 WfdCmdType; - UINT_8 WfdEnable; - UINT_8 WfdCoupleSinkStatus; - UINT_8 WfdSessionAvailable; - UINT_8 WfdSigmaMode; - UINT_16 WfdDevInfo; - UINT_16 WfdControlPort; - UINT_16 WfdMaximumTp; - UINT_16 WfdExtendCap; - UINT_8 WfdCoupleSinkAddress[MAC_ADDR_LEN]; - UINT_8 WfdAssociatedBssid[MAC_ADDR_LEN]; - UINT_8 WfdVideoIp[4]; - UINT_8 WfdAudioIp[4]; - UINT_16 WfdVideoPort; - UINT_16 WfdAudioPort; - UINT_32 WfdFlag; - UINT_32 WfdPolicy; - UINT_32 WfdState; - UINT_8 WfdSessionInformationIE[24*8]; // Include Subelement ID, length - UINT_16 WfdSessionInformationIELen; - UINT_8 aucReserved1[2]; - UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN]; - UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN]; - UINT_32 WfdAdvanceFlag; - UINT_8 aucWfdLocalIp[4]; - UINT_8 aucReserved2[64]; - UINT_8 aucReserved3[64]; - UINT_8 aucReserved4[64]; -}NL80211_DRIVER_WFD_PARAMS, *P_NL80211_DRIVER_WFD_PARAMS; -#endif - - - -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/*--------------------------------------------------------------*/ -/* Service Discovery Subroutines */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 puQueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#if CFG_SUPPORT_ANTI_PIRACY -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pOpChannel( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pWPSmode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_P2P_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/aaa_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/aaa_fsm.c deleted file mode 100755 index 1d1479378e3a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/aaa_fsm.c +++ /dev/null @@ -1,1490 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/aaa_fsm.c#2 $ -*/ - -/*! \file "aaa_fsm.c" - \brief This file defines the FSM for AAA MODULE. - - This file defines the FSM for AAA MODULE. -*/ - - - -/* -** $Log: aaa_fsm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 22 2012 yuche.tsai - * NULL - * Solve sigma test 5.1.3 issue, assoc response should have P2P IE. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 02 2011 eddie.chen - * [WCXRP00000759] [MT6620 Wi-Fi][DRV] Update RCPI in AAA - * Update RCPI when receiving Assoc request. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 09 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * Skip to call p2pRunEventAAAComplete to avoid indicate STA connect twice. - * - * 03 04 2011 terry.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * Remove unused variable. - * - * 02 16 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Add more check after RX assoc frame under Hot-Spot mode. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 15 2011 puff.wen - * NULL - * [On behalf of Frog] Add CFG_ENABLE_WIFI_DIRECT to p2pRunEventAAAComplete - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Fix Compile warning, type cast from UINT_32 to UINT_16. - * - * 08 26 2010 yuche.tsai - * NULL - * In P2P AT GO test mode under WinXP, we would not indicate connected event to host. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 17 2010 yuche.tsai - * NULL - * Fix bug while enabling P2P GO. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * modify due to P2P functino call prototype change. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 02 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify CFG flags - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmSendEventJoinComplete ( - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ) -{ - P_MSG_SAA_JOIN_COMP_T prJoinCompMsg; - - - ASSERT(prStaRec); - - prJoinCompMsg = cnmMemAlloc(RAM_TYPE_TCM, sizeof(MSG_SAA_JOIN_COMP_T)); - if (!prJoinCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - if (IS_STA_IN_AIS(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - } - else if (IS_STA_IN_P2P(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - } - else if (IS_STA_IN_BOW(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - } - else { - ASSERT(0); - } - - prJoinCompMsg->rJoinStatus = rJoinStatus; - prJoinCompMsg->prStaRec = prStaRec; - prJoinCompMsg->prSwRfb = prSwRfb; - - mboxSendMsg(MBOX_ID_0, - (P_MSG_HDR_T)prJoinCompMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmSendEventJoinComplete() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to AAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventStart ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_JOIN_REQ_T prJoinReqMsg; - P_STA_RECORD_T prStaRec; - P_AIS_BSS_INFO_T prAisBssInfo; - - - ASSERT(prMsgHdr); - - prJoinReqMsg = (P_MSG_SAA_JOIN_REQ_T)prMsgHdr; - prStaRec = prJoinReqMsg->prStaRec; - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM\n")); - - cnmMemFree(prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec->eStaType)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(&prStaRec->rTxReqDoneOrRxRespTimer); - - prStaRec->ucStaState = STA_STATE_1; - - /* Trigger SAA MODULE */ - saaFsmSteps(prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ -#endif - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode; - BOOLEAN fgReplyAuth = FALSE; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - - ASSERT(prAdapter); - - do { - - - //4 <1> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <1.1> Validate Auth Frame by Auth Algorithm/Transation Seq - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <1.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = p2pFuncValidateAuth( - prAdapter, - prSwRfb, - &prStaRec, - &u2StatusCode); - } - else { - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <2> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)) { - - //4 <2.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <2.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = bowValidateAuth(prAdapter, prSwRfb, &prStaRec, &u2StatusCode); - - } - else { - - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return; - } while (FALSE); - - if(prStaRec) { - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - //4 <3> Update STA_RECORD_T and reply Auth_2(Response to Auth_1) Frame - if (fgReplyAuth) { - - if (prStaRec) { - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != IDLE.\n", - prStaRec->eAuthAssocState)); - } - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - } - else { - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - prStaRec->ucAuthAlgNum = AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - /* NOTE(Kevin): We should have STA_RECORD_T if the status code was successful */ - ASSERT(!(u2StatusCode == STATUS_CODE_SUCCESSFUL)); - } - - /* NOTE: Ignore the return status for AAA */ - //4 <4> Reply Auth - authSendAuthFrame(prAdapter, - prStaRec, - eNetTypeIndex, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - u2StatusCode); - - } - - return; -} /* end of aaaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode = STATUS_CODE_RESERVED; - BOOLEAN fgReplyAssocResp = FALSE; - - - ASSERT(prAdapter); - - do { - - //4 <1> Check if we have the STA_RECORD_T for incoming Assoc Req - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - ASSERT(0); // Only for debug phase - break; - } - - if (!IS_CLIENT_STA(prStaRec)) { - break; - } - - if (prStaRec->ucStaState == STA_STATE_3) { - /* Do Reassocation */ - } - else if ((prStaRec->ucStaState == STA_STATE_2) && - (prStaRec->eAuthAssocState == AAA_STATE_SEND_AUTH2)) { - /* Normal case */ - } - else { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != SEND_AUTH2.\n", - prStaRec->eAuthAssocState)); - break; - } - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - //4 <2> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <2.1> Validate Assoc Req Frame and get Status Code - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <2.2> Validate Assoc Req Frame for Network Specific Conditions - fgReplyAssocResp = p2pFuncValidateAssocReq( - prAdapter, - prSwRfb, - (PUINT_16)&u2StatusCode); - } - else { - fgReplyAssocResp = TRUE; - } - - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <3> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)){ - - //4 <3.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <3.2> Validate Auth Frame for Network Specific Conditions - fgReplyAssocResp = bowValidateAssocReq(prAdapter, prSwRfb, &u2StatusCode); - - } - else { - - fgReplyAssocResp = TRUE; - } - - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return WLAN_STATUS_SUCCESS; // To release the SW_RFB_T - } while (FALSE); - - - //4 <4> Update STA_RECORD_T and reply Assoc Resp Frame - if (fgReplyAssocResp) { - UINT_16 u2IELength; - PUINT_8 pucIE; - - if ((((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->u2FrameCtrl & MASK_FRAME_TYPE) == - MAC_FRAME_REASSOC_REQ) { - - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - - rlmProcessAssocReq(prAdapter, prSwRfb, pucIE, u2IELength); - - //4 <4.1> Assign Association ID - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - if (p2pRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - //prStaRec->eAuthAssocState = AA_STATE_IDLE; - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if ((IS_STA_IN_BOW(prStaRec))) { - -// if (bowRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } -#if 0 - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif -#endif - } - else { - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - /* NOTE: Ignore the return status for AAA */ - //4 <4.2> Reply Assoc Resp - assocSendReAssocRespFrame(prAdapter, prStaRec); - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth2/AssocReq) Event of AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(AAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - switch (prStaRec->eAuthAssocState) { - case AAA_STATE_SEND_AUTH2: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_2) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - /* NOTE(Kevin): Change to STATE_2 at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - else { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - } - - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - - } - break; - - case AAA_STATE_SEND_ASSOC2: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocRespFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_3 at TX Done */ -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAASuccess(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - - if (IS_STA_IN_BOW(prStaRec)) - { - bowRunEventAAAComplete(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - else { - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Change to STATE_2 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventTxDone() */ -#endif /* CFG_SUPPORT_AAA */ - - -#if 0 /* TODO(Kevin): for abort event, just reset the STA_RECORD_T. */ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send ABORT Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventAbort"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: ABORT\n")); - - - /* NOTE(Kevin): when reach here, the ARB_STATE should be in ARB_STATE_JOIN. */ - ASSERT(prJoinInfo->prBssDesc); - - //4 <1> Update Flags and Elements of JOIN Module. - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel all JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rJoinTimer); - - //4 <2> Update the associated STA_RECORD_T during JOIN. - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - if (prStaRec) { - - /* Update Station Record - Class 1 Flag */ - prStaRec->ucStaState = STA_STATE_1; - } -#if DBG - else { - ASSERT(0); /* Shouldn't happened, because we already add this STA_RECORD_T at JOIN_STATE_INIT */ - } -#endif /* DBG */ - - //4 <3> Pull back to IDLE. - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - //4 <4> If we are in Roaming, recover the settings of previous BSS. - /* NOTE: JOIN FAIL - - * Restore original setting from current BSS_INFO_T. - */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - return; -} /* end of joinFsmRunEventAbort() */ -#endif - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/ais_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/ais_fsm.c deleted file mode 100755 index 3f0e62ca1f22..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/ais_fsm.c +++ /dev/null @@ -1,4750 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/ais_fsm.c#1 $ -*/ - -/*! \file "aa_fsm.c" - \brief This file defines the FSM for SAA and AAA MODULE. - - This file defines the FSM for SAA and AAA MODULE. -*/ - - - -/* -** $Log: ais_fsm.c $ - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * correct reference to BSSID field in Association-Response frame. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 26 2011 tsaiyuan.hsu - * [WCXRP00001064] [MT6620 Wi-Fi][DRV]] add code with roaming awareness when disconnecting AIS network - * be aware roaming when disconnecting AIS network. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * STA_REC shall be NULL for Beacon's MSDU - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 08 2011 tsaiyuan.hsu - * [WCXRP00000972] [MT6620 Wi-Fi][DRV]] check if roaming occurs after join failure to avoid state incosistence. - * check if roaming occurs after join failure to avoid deactivation of network. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * EnableRoaming in registry is deprecated. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * use registry to enable or disable roaming. - * - * 07 07 2011 cp.wu - * [WCXRP00000840] [MT6620 Wi-Fi][Driver][AIS] Stop timer for joining when channel is released due to join failure count exceeding limit - * stop timer when joining operation is failed due to try count exceeds limitation - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not handle SCAN request immediately after connected to increase the probability of receiving 1st beacon frame. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * ensure DEAUTH is always sent before establish a new connection - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * typo fix: a right brace is missed. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * When RECONNECT request is identified as disconnected, it is necessary to check for pending scan request. - * - * 06 16 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * mark fgIsTransition as TRUE for state rolling. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always check for pending scan after switched into NORMAL_TR state. - * - * 06 14 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always treat connection request at higher priority over scanning request - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 18 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * change SCAN handling behavior when followed by a CONNECT/DISCONNECT requests by pending instead of dropping. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 13 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * remove assert - * - * 03 18 2011 cp.wu - * [WCXRP00000575] [MT6620 Wi-Fi][Driver][AIS] reduce memory usage when generating mailbox message for scan request - * when there is no IE needed for probe request, then request a smaller memory for mailbox message - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 03 09 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * avoid clearing fgIsScanReqIssued so as to add scan results. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * reset retry conter of attemp to connect to ap after completion of join. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 23 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * when handling reconnect request, set fgTryScan as TRUE - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 02 09 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * Check if prRegInfo is null or not before initializing roaming parameters. - * - * 02 01 2011 cp.wu - * [WCXRP00000416] [MT6620 Wi-Fi][Driver] treat "unable to find BSS" as connection trial to prevent infinite reconnection trials - * treat "unable to find BSS" as connection trial to prevent infinite reconnection trials. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 01 11 2011 cp.wu - * [WCXRP00000307] [MT6620 Wi-Fi][SQA]WHQL test .2c_wlan_adhoc case fail. - * [IBSS] when merged in, the bss state should be updated to firmware to pass WHQL adhoc failed item - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 03 2011 cp.wu - * [WCXRP00000337] [MT6620 Wi-FI][Driver] AIS-FSM not to invoke cnmStaRecResetStatus directly 'cause it frees all belonging STA-RECs - * do not invoke cnmStaRecResetStatus() directly, nicUpdateBss will do the things after bss is disconnected - * - * 12 30 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * do not need to manipulate prStaRec after indicating BSS disconnection to firmware, 'cause all STA-RECs belongs to BSS has been freed already - * - * 12 27 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * add DEBUGFUNC() macro invoking for more detailed debugging information - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 14 2010 wh.su - * [WCXRP00000097] [MT6620 Wi-Fi] [Driver] Fixed the P2P not setting the fgIsChannelExt value make scan not abort - * initial the fgIsChannelExt value. - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000049] [MT6620 Wi-Fi][Driver] Adhoc cannot be created successfully. - * keep IBSS-ALONE state retrying until further instruction is received - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 09 2010 yuche.tsai - * NULL - * Fix NULL IE Beacon issue. Sync Beacon Content to FW before enable beacon. - * Both in IBSS Create & IBSS Merge - * - * 09 09 2010 cp.wu - * NULL - * frequency is in unit of KHz thus no need to divide 1000 once more. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 12 2010 cp.wu - * NULL - * check-in missed files. - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 09 2010 cp.wu - * NULL - * reset fgIsScanReqIssued when abort request is received right after join completion. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 29 2010 cp.wu - * NULL - * allocate on MGMT packet for IBSS beaconing. - * - * 07 29 2010 cp.wu - * NULL - * [AIS-FSM] fix: when join failed, release channel privilege as well - * - * 07 28 2010 cp.wu - * NULL - * reuse join-abort sub-procedure to reduce code size. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 23 2010 cp.wu - * - * indicate scan done for linux wireless extension - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 cp.wu - * - * 1) init AIS_BSS_INFO as channel number = 1 with band = 2.4GHz - * 2) correct typo - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * for AIS scanning, driver specifies no extra IE for probe request - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 yarco.yang - * - * Remove CFG_MQM_MIGRATION - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * once STA-REC is allocated and updated, invoke cnmStaRecChangeState() to sync. with firmware. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 01 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add conditionial compiling flag to choose default available bandwidth - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile error if CFG_CMD_EVENT_VER_009 == 0 for prEventConnStatus->ucNetworkType. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 17 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Call pmAbort() and add ucNetworkType field in EVENT_CONNECTION_STATUS - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - define of MQM_WMM_PARSING was removed - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * Fix typo - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 07 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add TX Power Control RCPI function. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 25 2010 wh.su - * [BORA00000676][MT6620] Support the frequency setting and query at build connection / connection event - * modify the build connection and status event structure bu CMD_EVENT doc 0.09 draft, default is disable. - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 24 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Set / Unset POWER STATE in AIS Network - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add PHY_CONFIG to change Phy Type - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Use bcmWiFiNotify to replace wifi_send_msg to pass infomation to BCM module. - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Remove wmt_task definition and add PTA function. - * - * 03 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Init TXM and MQM testing procedures in aisFsmRunEventJoinComplete() - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Modified aisUpdateBssInfo() to call TXM's functions for setting WTBL TX parameters - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * clear the pmkid cache while indicate media disconnect. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * . - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Enabled MQM parsing WMM IEs for non-AP mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 23 2010 wh.su - * [BORA00000621][MT6620 Wi-Fi] Add the RSSI indicate to avoid XP stalled for query rssi value - * Adding the RSSI event support, using the HAL function to get the rcpi value and tranlsate to RSSI and indicate to driver - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Set max AMDPU size supported by the peer to 64 KB, removed mqmInit() and mqmTxSendAddBaReq() function calls in aisUpdateBssInfo() - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 15 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Configured the AMPDU factor to 3 for the APu1rwduu`wvpghlqg|q`mpdkb+ilp - * - * 01 14 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add WiFi BCM module for the 1st time. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Refine JOIN Complete and seperate the function of Media State indication - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sample code to update the wlan table rate, - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Different function prototype of wifi_send_msg() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlm related function to process HT info when join complete - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * default the acquired wlan table entry code off - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to acquired the wlan table entry, and a sample code to update the BA bit at table - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix the problem of prSwRfb overwrited by event packet in aisFsmRunEventJoinComplete() - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to integrate the security related code - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove redundant declaration - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add code for JOIN init and JOIN complete - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise ENUM_MEDIA_STATE to ENUM_PARAM_MEDIA_STATE - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add fgIsScanReqIssued to CONNECTION_SETTINGS_T - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise Virtual CMD handler due to structure changed - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM flag for aisFsmTest() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_ROAMING_CONNECTION_TRIAL_LIMIT 2 - -#define CTIA_MAGIC_SSID "ctia_test_only_*#*#3646633#*#*" -#define CTIA_MAGIC_SSID_LEN 30 -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAisState[AIS_STATE_NUM] = { - (PUINT_8)DISP_STRING("AIS_STATE_IDLE"), - (PUINT_8)DISP_STRING("AIS_STATE_SEARCH"), - (PUINT_8)DISP_STRING("AIS_STATE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_ONLINE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_LOOKING_FOR"), - (PUINT_8)DISP_STRING("AIS_STATE_WAIT_FOR_NEXT_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_REQ_CHANNEL_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_ALONE"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_MERGE"), - (PUINT_8)DISP_STRING("AIS_STATE_NORMAL_TR"), - (PUINT_8)DISP_STRING("AIS_STATE_DISCONNECTING") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value of the connection settings for -* AIS network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucAnyBSSID[] = BC_BSSID; - UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - int i = 0; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Setup default values for operation */ - COPY_MAC_ADDR(prConnSettings->aucMacAddress, aucZeroMacAddr); - - prConnSettings->ucDelayTimeOfDisconnectEvent = AIS_DELAY_TIME_OF_DISCONNECT_SEC; - - COPY_MAC_ADDR(prConnSettings->aucBSSID, aucAnyBSSID); - prConnSettings->fgIsConnByBssidIssued = FALSE; - - prConnSettings->fgIsConnReqIssued = FALSE; - prConnSettings->fgIsDisconnectedByNonRequest = FALSE; - - prConnSettings->ucSSIDLen = 0; - - prConnSettings->eOPMode = NET_TYPE_INFRA; - - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - - if(prRegInfo) { - prConnSettings->ucAdHocChannelNum = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4StartFreq); - prConnSettings->eAdHocBand = prRegInfo->u4StartFreq < 5000000 ? BAND_2G4 : BAND_5G; - prConnSettings->eAdHocMode = (ENUM_PARAM_AD_HOC_MODE_T) (prRegInfo->u4AdhocMode); - } - - prConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prConnSettings->eEncStatus = ENUM_ENCRYPTION_DISABLED; - - prConnSettings->fgIsScanReqIssued = FALSE; - - /* MIB attributes */ - prConnSettings->u2BeaconPeriod = DOT11_BEACON_PERIOD_DEFAULT; - - prConnSettings->u2RTSThreshold = DOT11_RTS_THRESHOLD_DEFAULT; - - prConnSettings->u2DesiredNonHTRateSet = RATE_SET_ALL_ABG; - - //prConnSettings->u4FreqInKHz; /* Center frequency */ - - - /* Set U-APSD AC */ - prConnSettings->bmfgApsdEnAc = PM_UAPSD_NONE; - - secInit(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Features */ - prConnSettings->fgIsEnableRoaming = FALSE; -#if CFG_SUPPORT_ROAMING - if(prRegInfo) { - prConnSettings->fgIsEnableRoaming = ((prRegInfo->fgDisRoaming > 0)?(FALSE):(TRUE)); - } -#endif /* CFG_SUPPORT_ROAMING */ - - prConnSettings->fgIsAdHocQoSEnable = FALSE; - - prConnSettings->eDesiredPhyConfig = PHY_CONFIG_802_11ABGN; - - /* Set default bandwidth modes */ - prConnSettings->uc2G4BandwidthMode = CONFIG_BW_20M; - prConnSettings->uc5GBandwidthMode = CONFIG_BW_20_40M; - - prConnSettings->rRsnInfo.ucElemId = 0x30; - prConnSettings->rRsnInfo.u2Version = 0x0001; - prConnSettings->rRsnInfo.u4GroupKeyCipherSuite = 0; - prConnSettings->rRsnInfo.u4PairwiseKeyCipherSuiteCount = 0; - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) - prConnSettings->rRsnInfo.au4PairwiseKeyCipherSuite[i] = 0; - prConnSettings->rRsnInfo.u4AuthKeyMgtSuiteCount = 0; - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) - prConnSettings->rRsnInfo.au4AuthKeyMgtSuite[i] = 0; - prConnSettings->rRsnInfo.u2RsnCap = 0; - prConnSettings->rRsnInfo.fgRsnCapPresent = FALSE; - - return; -} /* end of aisFsmInitializeConnectionSettings() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmInit()"); - DBGLOG(SW1, INFO, ("->aisFsmInit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Initiate FSM - prAisFsmInfo->ePreviousState = AIS_STATE_IDLE; - prAisFsmInfo->eCurrentState = AIS_STATE_IDLE; - - prAisFsmInfo->ucAvailableAuthTypes = 0; - - prAisFsmInfo->prTargetBssDesc = (P_BSS_DESC_T)NULL; - - prAisFsmInfo->ucSeqNumOfReqMsg = 0; - prAisFsmInfo->ucSeqNumOfChReq = 0; - prAisFsmInfo->ucSeqNumOfScanReq = 0; - - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - //4 <1.1> Initiate FSM - Timer INIT - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventBGSleepTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventIbssAloneTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisPostponedEventOfDisconnTimeout, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventJoinTimeout, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rScanDoneTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventScanDoneTimeOut, - (UINT_32)NULL); - - //4 <1.2> Initiate PWR STATE - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_AIS_INDEX); - COPY_MAC_ADDR(prAisBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prAisBssInfo->eBand = BAND_2G4; - prAisBssInfo->ucPrimaryChannel = 1; - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - //4 <4> Allocate MSDU_INFO_T for Beacon - prAisBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prAisBssInfo->prBeacon) { - prAisBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prAisBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - } - else { - ASSERT(0); - } - -#if 0 - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - if (prAdapter->u4UapsdAcBmp == 0) { - prAdapter->u4UapsdAcBmp = CFG_INIT_UAPSD_AC_BMP; - //ASSERT(prAdapter->u4UapsdAcBmp); - } - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - - /* request list initialization */ - LINK_INITIALIZE(&prAisFsmInfo->rPendingReqList); - - //DBGPRINTF("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - //prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - //prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - //prAisBssInfo->rPmProfSetupInfo.ucUapsdSp); - - return; -} /* end of aisFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to uninitialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmUninit()"); - DBGLOG(SW1, INFO, ("->aisFsmUninit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Stop all timers - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rScanDoneTimer); //Add by Enlai - - //4 <2> flush pending request - aisFsmFlushRequest(prAdapter); - - //4 <3> Reset driver-domain BSS-INFO - if(prAisBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prAisBssInfo->prBeacon); - prAisBssInfo->prBeacon = NULL; - } - -#if CFG_SUPPORT_802_11W - rsnStopSaQuery(prAdapter); -#endif - - return; -} /* end of aisFsmUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_JOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - ASSERT(prBssDesc); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_LEGACY_AP, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - prStaRec->fgIsReAssoc = FALSE; - - switch (prConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - - - case AUTH_MODE_SHARED: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(AIS, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - - default: - ASSERT(!(prConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(AIS, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - - /* TODO(tyhsu): Assume that Roaming Auth Type is equal to ConnSettings eAuthMode */ - prAisSpecificBssInfo->ucRoamingAuthTypes = prAisFsmInfo->ucAvailableAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - } - else { - ASSERT(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE); - ASSERT(!prBssDesc->fgIsConnected); - - DBGLOG(AIS, LOUD, ("JOIN INIT: AUTH TYPE = %d for Roaming\n", - prAisSpecificBssInfo->ucRoamingAuthTypes)); - - - prStaRec->fgIsReAssoc = TRUE; /* We do roaming while the medium is connected */ - - /* TODO(Kevin): We may call a sub function to acquire the Roaming Auth Type */ - prAisFsmInfo->ucAvailableAuthTypes = prAisSpecificBssInfo->ucRoamingAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING; - } - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prConnSettings->eConnectionPolicy == CONNECT_BY_SSID_ANY) { - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - if (1) { - int j; - P_FRAG_INFO_T prFragInfo; - for (j = 0; j < MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS; j++) { - prFragInfo = &prStaRec->rFragInfo[j]; - - if (prFragInfo->pr1stFrag) { - //nicRxReturnRFB(prAdapter, prFragInfo->pr1stFrag); - prFragInfo->pr1stFrag = (P_SW_RFB_T)NULL; - } - } - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} /* end of aisFsmInit_JOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_RetryJOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Retry other AuthType if possible */ - if (!prAisFsmInfo->ucAvailableAuthTypes) { - return FALSE; - } - - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(AIS, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - } - - prAisFsmInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return FALSE; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return TRUE; - -}/* end of aisFsmRetryJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_ALONE -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Check if IBSS was created before ? - if (prAisBssInfo->fgIsBeaconActivated) { - - //4 <2> Start IBSS Alone Timer for periodic SCAN and then SEARCH -#if !CFG_SLT_SUPPORT - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); -#endif - } - - aisFsmCreateIBSS(prAdapter); - - return; -} /* end of aisFsmStateInit_IBSS_ALONE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_MERGE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the IBSS we will try to merge with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - - ASSERT(prBssDesc); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prStaRec->fgIsMerging = TRUE; - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> IBSS-Merge - aisFsmMergeIBSS(prAdapter, prStaRec); - - return; -} /* end of aisFsmStateInit_IBSS_MERGE() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_ABORT_T prJoinAbortMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* 1. Abort JOIN process */ - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - - ASSERT(0); // Can't abort SAA FSM - return; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_CONNECT_INDICATION, - NULL, - 0); - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prAisFsmInfo->prTargetStaRec; - - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisFsmInfo->prTargetStaRec->aucMacAddr); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - /* 2. Return channel privilege */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - return; -} /* end of aisFsmAbortJOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of SCAN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - - ASSERT(0); // Can't abort SCN FSM - return; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfScanReq; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - prScanCancelMsg->fgIsChannelExt = FALSE; - } -#endif - - /* unbuffered message to guarantee scan is cancelled in sequence */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_UNBUF); - - return; -} /* end of aisFsmAbortSCAN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* TODO(Kevin): Do abort other MGMT func */ - - /* 1. Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* 2.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 2.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - return; -} /* end of aisFsmAbortNORMAL_TR() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_DESC_T prBssDesc; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // reset BSS-DESC - if (prAisFsmInfo->prTargetStaRec) { - prBssDesc = scanSearchBssDescByTA(prAdapter, - prAisFsmInfo->prTargetStaRec->aucMacAddr); - - if (prBssDesc) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - } - } - - // release channel privilege - aisFsmReleaseCh(prAdapter); - - return; -} -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of AIS(Ad-hoc, Infra STA) -* -* @param[in] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - P_MSG_CH_REQ_T prMsgChReq; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_AIS_REQ_HDR_T prAisReq; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - UINT_16 u2ScanIELen; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("aisFsmSteps()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - - /* Do entering Next State */ - prAisFsmInfo->ePreviousState = prAisFsmInfo->eCurrentState; - -#if DBG - DBGLOG(AIS, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAisState[prAisFsmInfo->eCurrentState], - apucDebugAisState[eNextState])); -#else - DBGLOG(AIS, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prAisFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prAisFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case AIS_STATE_IDLE: - - prAisReq = aisFsmGetNextRequest(prAdapter); - - if(prAisReq == NULL || prAisReq->eReqType == AIS_REQUEST_RECONNECT) { - if (prConnSettings->fgIsConnReqIssued == TRUE && - prConnSettings->fgIsDisconnectedByNonRequest == FALSE) { - - prAisFsmInfo->fgTryScan = TRUE; - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // reset trial count - prAisFsmInfo->ucConnTrialCount = 0; - - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - else { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // check for other pending request - if(prAisReq) { - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_SCAN; - - fgIsTransition = TRUE; - } - } - } - - if(prAisReq) { - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - } - else if(prAisReq->eReqType == AIS_REQUEST_SCAN) { -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - wlanClearScanningResult(prAdapter); - - eNextState = AIS_STATE_SCAN; - fgIsTransition = TRUE; - - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - else if(prAisReq->eReqType == AIS_REQUEST_ROAMING_CONNECT || prAisReq->eReqType == AIS_REQUEST_ROAMING_SEARCH) { - /* ignore */ - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - - prAisFsmInfo->u4SleepInterval = AIS_BG_SCAN_INTERVAL_MIN_SEC; - - break; - - case AIS_STATE_SEARCH: - //4 <1> Search for a matched candidate and save it to prTargetBssDesc. -#if CFG_SLT_SUPPORT - prBssDesc = prAdapter->rWifiVar.rSltInfo.prPseudoBssDesc; -#else - prBssDesc = scanSearchBssDescByPolicy(prAdapter, NETWORK_TYPE_AIS_INDEX); -#endif - - // we are under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(prAisFsmInfo->ucConnTrialCount > AIS_ROAMING_CONNECTION_TRIAL_LIMIT) { -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_CONNLIMIT); -#endif /* CFG_SUPPORT_ROAMING */ - // reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // abort connection trial - prConnSettings->fgIsConnReqIssued = FALSE; - - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - - break; - } - } - - //4 <2> We are not under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - //4 <2.a> If we have the matched one - if (prBssDesc) { - - //4 Stored the Selected BSS security cipher. For later asoc req compose IE - prAisBssInfo->u4RsnSelectedGroupCipher = - prBssDesc->u4RsnSelectedGroupCipher; - prAisBssInfo->u4RsnSelectedPairwiseCipher = - prBssDesc->u4RsnSelectedPairwiseCipher; - prAisBssInfo->u4RsnSelectedAKMSuite = - prBssDesc->u4RsnSelectedAKMSuite; - - //4 Do STATE transition and update current Operation Mode. - if (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - - // increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - } -#if CFG_SUPPORT_ADHOC - else if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - eNextState = AIS_STATE_IBSS_MERGE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - //4 <2.b> If we don't have the matched one - else { - - // increase connection trial count for infrastructure connection - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - prAisFsmInfo->ucConnTrialCount++; - } - - //4 Try to SCAN - if (prAisFsmInfo->fgTryScan) { - eNextState = AIS_STATE_LOOKING_FOR; - - fgIsTransition = TRUE; - } - //4 We've do SCAN already, now wait in some STATE. - else { - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - - /* issue reconnect request, and retreat to idle state for scheduling */ - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - eNextState = AIS_STATE_IDLE; - fgIsTransition = TRUE; - } -#if CFG_SUPPORT_ADHOC - else if ((prConnSettings->eOPMode == NET_TYPE_IBSS) - || (prConnSettings->eOPMode == NET_TYPE_AUTO_SWITCH) - || (prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS)) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - prAisFsmInfo->prTargetBssDesc = NULL; - - eNextState = AIS_STATE_IBSS_ALONE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - } - } - //4 <3> We are under Roaming Condition. - else { // prAdapter->eConnectionState == MEDIA_STATE_CONNECTED. - - //4 <3.a> This BSS_DESC_T is our AP. - /* NOTE(Kevin 2008/05/16): Following cases will go back to NORMAL_TR. - * CASE I: During Roaming, APP(WZC/NDISTEST) change the connection - * settings. That make we can NOT match the original AP, so the - * prBssDesc is NULL. - * CASE II: The same reason as CASE I. Because APP change the - * eOPMode to other network type in connection setting - * (e.g. NET_TYPE_IBSS), so the BssDesc become the IBSS node. - * (For CASE I/II, before WZC/NDISTEST set the OID_SSID, it will change - * other parameters in connection setting first. So if we do roaming - * at the same time, it will hit these cases.) - * - * CASE III: Normal case, we can't find other candidate to roam - * out, so only the current AP will be matched. - * - * CASE VI: Timestamp of the current AP might be reset - */ - if ((!prBssDesc) || /* CASE I */ - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) || /* CASE II */ - (prBssDesc->fgIsConnected) || /* CASE III */ - (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)) /* CASE VI */) { -#if DBG - if ((prBssDesc) && - (prBssDesc->fgIsConnected)) { - ASSERT(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); - } -#endif /* DBG */ - /* We already associated with it, go back to NORMAL_TR */ - /* TODO(Kevin): Roaming Fail */ -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_NOCANDIDATE); -#endif /* CFG_SUPPORT_ROAMING */ - - /* Retreat to NORMAL_TR state */ - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - } - //4 <3.b> Try to roam out for JOIN this BSS_DESC_T. - else { -#if DBG - ASSERT(UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); -#endif /* DBG */ - - //4 Record the target BSS_DESC_T for next STATE. - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - // tyhsu: increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - - DBGLOG(AIS, LOUD, ("SCAN: Idle Begin - Current Time = %ld\n", kalGetTimeTick())); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - SEC_TO_MSEC(prAisFsmInfo->u4SleepInterval)); - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (prAisFsmInfo->u4SleepInterval < AIS_BG_SCAN_INTERVAL_MAX_SEC) { - prAisFsmInfo->u4SleepInterval <<= 1; - } - break; - - case AIS_STATE_SCAN: - case AIS_STATE_ONLINE_SCAN: - case AIS_STATE_LOOKING_FOR: - - if(!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) { - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - - /* IE length decision */ - if(prAisFsmInfo->u4ScanIELength > 0) { - u2ScanIELen = (UINT_16)prAisFsmInfo->u4ScanIELength; - } - else { -#if CFG_SUPPORT_WPS2 - u2ScanIELen = prAdapter->prGlueInfo->u2WSCIELen; -#else - u2ScanIELen = 0; -#endif - } - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - OFFSET_OF(MSG_SCN_SCAN_REQ, aucIE) + u2ScanIELen); - if (!prScanReqMsg) { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prScanReqMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - -#if CFG_SUPPORT_RDD_TEST_MODE - prScanReqMsg->eScanType = SCAN_TYPE_PASSIVE_SCAN; -#else - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; -#endif - - if(prAisFsmInfo->eCurrentState == AIS_STATE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - if(prAisFsmInfo->ucScanSSIDLen == 0) { - /* Scan for all available SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - } - else { - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen); - } - } - else { - /* Scan for determined SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - } - - /* check if tethering is running and need to fix on specific channel */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->ucChannelListNum = 1; - prScanReqMsg->arChnlInfoList[0].eBand - = eBand;; - prScanReqMsg->arChnlInfoList[0].ucChannelNum - = ucChannel; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_NULL) { - if(prAdapter->fgEnable5GBand == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_2G4) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_5G) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - ASSERT(0); - } - - if(prAisFsmInfo->u4ScanIELength > 0) { - kalMemCopy(prScanReqMsg->aucIE, prAisFsmInfo->aucScanIEBuf, prAisFsmInfo->u4ScanIELength); - } - else { -#if CFG_SUPPORT_WPS2 - if(prAdapter->prGlueInfo->u2WSCIELen > 0) { - kalMemCopy(prScanReqMsg->aucIE, &prAdapter->prGlueInfo->aucWSCIE, prAdapter->prGlueInfo->u2WSCIELen); - } - } -#endif - - prScanReqMsg->u2IELen = u2ScanIELen; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChReq->ucTokenID = ++prAisFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prMsgChReq->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = prAisFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prAisFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prAisFsmInfo->prTargetBssDesc->aucBSSID); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgIsChannelRequested = TRUE; - break; - - case AIS_STATE_JOIN: - aisFsmStateInit_JOIN(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - aisFsmStateInit_IBSS_ALONE(prAdapter); - break; - - case AIS_STATE_IBSS_MERGE: - aisFsmStateInit_IBSS_MERGE(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_NORMAL_TR: - if(prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - /* Don't do anything when rJoinTimeoutTimer is still ticking */ - } - else { - /* 1. Process for pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - fgIsTransition = TRUE; - } - /* 2. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE) == TRUE) { - eNextState = AIS_STATE_LOOKING_FOR; - fgIsTransition = TRUE; - } - /* 3. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE) == TRUE) { - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_DISCONNECTING: - /* send for deauth frame for disconnection */ - authSendDeauthFrame(prAdapter, - prAisBssInfo->prStaRecOfAP, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - aisDeauthXmitComplete); - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - - } - } - while (fgIsTransition); - - return; - -} /* end of aisFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("aisFsmRunEventScanDone()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - DBGLOG(AIS, LOUD, ("EVENT-SCAN DONE: Current Time = %ld\n", kalGetTimeTick())); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - ASSERT(prScanDoneMsg->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - cnmMemFree(prAdapter, prMsgHdr); - - eNextState = prAisFsmInfo->eCurrentState; - - if (ucSeqNumOfCompMsg != prAisFsmInfo->ucSeqNumOfScanReq) { - DBGLOG(AIS, WARN, ("SEQ NO of AIS SCN DONE MSG is not matched.\n")); - } - else { - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); - eNextState = AIS_STATE_IDLE; - - break; - - case AIS_STATE_ONLINE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_NORMAL_TR; -#endif /* CFG_SUPPORT_ROAMING */ - - break; - - case AIS_STATE_LOOKING_FOR: -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_SEARCH; -#endif /* CFG_SUPPORT_ROAMING */ - break; - - default: - break; - - } - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventScanDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("aisFsmRunEventAbort()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Extract information of Abort Message and then free memory. - prAisAbortMsg = (P_MSG_AIS_ABORT_T)prMsgHdr; - ucReasonOfDisconnect = prAisAbortMsg->ucReasonOfDisconnect; - fgDelayIndication = prAisAbortMsg->fgDelayIndication; - - cnmMemFree(prAdapter, prMsgHdr); - -#if DBG - DBGLOG(AIS, LOUD, ("EVENT-ABORT: Current State %s\n", - apucDebugAisState[prAisFsmInfo->eCurrentState])); -#else - DBGLOG(AIS, LOUD, ("[%d] EVENT-ABORT: Current State [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState)); -#endif - - //4 <2> clear previous pending connection request and insert new one - if(ucReasonOfDisconnect == DISCONNECT_REASON_CODE_DEAUTHENTICATED - || ucReasonOfDisconnect == DISCONNECT_REASON_CODE_DISASSOCIATED) { - prConnSettings->fgIsDisconnectedByNonRequest = TRUE; - } - else { - prConnSettings->fgIsDisconnectedByNonRequest = FALSE; - } - - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - if(prAisFsmInfo->eCurrentState != AIS_STATE_DISCONNECTING) { - //4 <3> invoke abort handler - aisFsmStateAbort(prAdapter, ucReasonOfDisconnect, fgDelayIndication); - } - - return; -} /* end of aisFsmRunEventAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handles AIS-FSM abort event/command -* -* \param[in] prAdapter Pointer of ADAPTER_T -* ucReasonOfDisconnect Reason for disonnection -* fgDelayIndication Option to delay disconnection indication -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - BOOLEAN fgIsCheckConnected; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - fgIsCheckConnected = FALSE; - - //4 <1> Save information of Abort Message and then free memory. - prAisBssInfo->ucReasonOfDisconnect = ucReasonOfDisconnect; - - //4 <2> Abort current job. - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IDLE: - case AIS_STATE_SEARCH: - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - /* Do cancel timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - break; - - case AIS_STATE_LOOKING_FOR: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_JOIN: - /* Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - case AIS_STATE_IBSS_MERGE: - aisFsmStateAbort_IBSS(prAdapter); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_ONLINE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_NORMAL_TR: - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_DISCONNECTING: - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - - break; - - default: - break; - } - - if (fgIsCheckConnected && - (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState)) { - - /* switch into DISCONNECTING state for sending DEAUTH if necessary */ - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_NEW_CONNECTION && - prAisBssInfo->prStaRecOfAP && - prAisBssInfo->prStaRecOfAP->fgIsInUse) { - aisFsmSteps(prAdapter, AIS_STATE_DISCONNECTING); - - return; - } - else { - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - } - } - - aisFsmDisconnect(prAdapter, fgDelayIndication); - - return; - -} /* end of aisFsmStateAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for AIS FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - - DEBUGFUNC("aisFsmRunEventJoinComplete()"); - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - - eNextState = prAisFsmInfo->eCurrentState; - - // Check State and SEQ NUM - if (prAisFsmInfo->eCurrentState == AIS_STATE_JOIN) { - P_BSS_INFO_T prAisBssInfo; - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prAisFsmInfo->ucSeqNumOfReqMsg) { - - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //1. Reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // Completion of roaming - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - -#if CFG_SUPPORT_ROAMING - //2. Deactivate previous BSS - aisFsmRoamingDisconnectPrevAP(prAdapter, prStaRec); - - //3. Update bss based on roaming staRec - aisUpdateBssInfoForRoamingAP(prAdapter, prStaRec, prAssocRspSwRfb); -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_AIS_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //add for ctia mode - { - UINT_8 aucP2pSsid[] = CTIA_MAGIC_SSID; - - if (EQUAL_SSID(aucP2pSsid, CTIA_MAGIC_SSID_LEN, prAisBssInfo->aucSSID, prAisBssInfo->ucSSIDLen)) { - nicEnterCtiaMode(prAdapter, TRUE, FALSE); - } - } - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventStart(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <1.7> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - } - //4 <2> JOIN was not successful - else { - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (aisFsmStateInit_RetryJOIN(prAdapter, prStaRec) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* 1. Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* 2. release channel */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - prBssDesc = scanSearchBssDescByBssid(prAdapter, prStaRec->aucMacAddr); - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - } - - /* 3.3 Free STA-REC */ - if(prStaRec != prAisBssInfo->prStaRecOfAP) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { -#if CFG_SUPPORT_ROAMING - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - // abort connection trial - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_CONNECT_INDICATION, - NULL, - 0); - - eNextState = AIS_STATE_IDLE; - } - } - - } - } -#if DBG - else { - DBGLOG(AIS, WARN, ("SEQ NO of AIS JOIN COMP MSG is not matched.\n")); - } -#endif /* DBG */ - - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of aisFsmRunEventJoinComplete() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Create which was sent by -* CNM to indicate that channel was changed for creating IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - do { - // Check State - if (prAisFsmInfo->eCurrentState == AIS_STATE_IBSS_ALONE) { - aisUpdateBssInfoForCreateIBSS(prAdapter); - } - } - while (FALSE); - - return; -} /* end of aisFsmCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Merge which was sent by -* CNM to indicate that channel was changed for merging IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* @param[in] prStaRec Pointer of STA_RECORD_T for merge -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - do { - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_MERGE: - { - P_BSS_DESC_T prBssDesc; - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous Peers' STA_RECORD_T in Driver if have. - bssClearClientList(prAdapter, prAisBssInfo); - - //4 <1.3> Unmark connection flag of previous BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = FALSE; - } - - //4 <1.4> Update BSS_INFO_T - aisUpdateBssInfoForMergeIBSS(prAdapter, prStaRec); - - //4 <1.5> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - - //4 <1.6> Activate current Peer's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.7> Enable other features - - //4 <1.8> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - -#if CFG_SLT_SUPPORT - prAdapter->rWifiVar.rSltInfo.prPseudoStaRec = prStaRec; -#endif - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - } - while (FALSE); - - return; -} /* end of aisFsmMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Notification of existing IBSS was found -* from SCN. -* -* @param[in] prMsgHdr Message of Notification of an IBSS was present. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - BOOLEAN fgIsMergeIn; - - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T)prMsgHdr; - - ASSERT(prAisIbssPeerFoundMsg->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX); - - prStaRec = prAisIbssPeerFoundMsg->prStaRec; - ASSERT(prStaRec); - - fgIsMergeIn = prAisIbssPeerFoundMsg->fgIsMergeIn; - - cnmMemFree(prAdapter, prMsgHdr); - - - eNextState = prAisFsmInfo->eCurrentState; - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - { - //4 <1> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ - -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.6> sync. to firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.7> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.8> indicate PM for connected - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - } - //4 <2> We need 'merge out' to this IBSS - else { - - //4 <2.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <2.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - } - } - break; - - case AIS_STATE_NORMAL_TR: - { - - //4 <3> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <3.1> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - } - //4 <4> We need 'merge out' to this IBSS - else { - - //4 <4.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <4.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - - } - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventFoundIBSSPeer() */ -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisIndicationOfMediaStateToHost()"); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // NOTE(Kevin): Move following line to aisChangeMediaState() macro per CM's request. - //prAisBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prAisBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prAisBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prAisBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prAisBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prAisBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prAisBssInfo->ucPrimaryChannel); - - switch (prAisBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - /* Deactivate previous Peers' STA_RECORD_T in Driver if have. */ - bssClearClientList(prAdapter, prAisBssInfo); - - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prAisBssInfo->ucReasonOfDisconnect; - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_AIS_INDEX, &rEventConnStatus); - prAisBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(AIS, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} /* end of aisIndicationOfMediaStateToHost() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Deactivate previous AP's STA_RECORD_T in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - - //4 <2> Remove pending connection request - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - prConnSettings->fgIsDisconnectedByNonRequest = TRUE; - - //4 <3> Indicate Disconnected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, FALSE); - - return; -} /* end of aisPostponedEventOfDisconnTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_BSS_DESC_T prBssDesc; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("aisUpdateBssInfoForJOIN()"); - - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - - DBGLOG(AIS, INFO, ("Update AIS_BSS_INFO_T and apply settings to MAC\n")); - - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prAisBssInfo->eBand = prAisFsmInfo->prTargetBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = prStaRec; - prAisBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prAisBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAssocRspFrame->aucBSSID); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - } - else { - // should never happen - ASSERT(0); - } - - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of aisUpdateBssInfoForJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create an Ad-Hoc network and start sending Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prAisBssInfo->fgIsBeaconActivated) { - return; - } - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prAisBssInfo->ucPrimaryChannel = prConnSettings->ucAdHocChannelNum; - prAisBssInfo->eBand = prConnSettings->eAdHocBand; - - if (prAisBssInfo->eBand == BAND_2G4) { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - //4 <1.5> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prConnSettings->u2BeaconPeriod; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = prConnSettings->u2AtimWindow; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - -#if CFG_PRIVACY_MIGRATION - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION1_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION2_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prAisBssInfo->fgIsProtection = TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } -#else - prAisBssInfo->fgIsProtection = FALSE; -#endif - - //3 <2> Update BSS_INFO_T common part - ibssInitForAdHoc(prAdapter, prAisBssInfo); - - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <3.2> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.3> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.4> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <4> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - //3 <5> Start IBSS Alone Timer - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); - - return; - -} /* end of aisCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the existing IBSS was found. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - //UINT_16 u2IELength; - //PUINT_8 pucIE; - - - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - - if (!prAisBssInfo->fgIsBeaconActivated) { - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - } - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use Peer's Cap Info as IBSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - prAisBssInfo->fgUseShortPreamble = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - prAisBssInfo->fgUseShortPreamble = FALSE; - } - - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prAisBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - prAisBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - - if (prAisBssInfo->u2CapInfo & CAP_INFO_PRIVACY) { - prAisBssInfo->fgIsProtection= TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } - - //4 <2.2> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - rateGetDataRatesFromRateSet(prAisBssInfo->u2OperationalRateSet, - prAisBssInfo->u2BSSBasicRateSet, - prAisBssInfo->aucAllSupportedRates, - &prAisBssInfo->ucAllSupportedRatesLen); - - //3 <3> X Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prBssDesc->aucBSSID); - - //4 <4.2> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prAisBssInfo->eBand = prBssDesc->eBand; - - //4 <4.3> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; /* TBD(Kevin) */ - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - } - else { - // should never happen - ASSERT(0); - } - - - //3 <5> Set MAC HW - //4 <5.1> Find Lowest Basic Rate Index for default TX Rate of MMPDU - { - UINT_8 ucLowestBasicRateIndex; - - if (!rateGetLowestRateIndexFromRateSet(prAisBssInfo->u2BSSBasicRateSet, - &ucLowestBasicRateIndex)) { - - if (prAisBssInfo->ucPhyTypeSet & PHY_TYPE_BIT_OFDM) { - ucLowestBasicRateIndex = RATE_6M_INDEX; - } - else { - ucLowestBasicRateIndex = RATE_1M_INDEX; - } - } - - prAisBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[prAisBssInfo->fgUseShortPreamble][ucLowestBasicRateIndex]; - } - - //4 <5.2> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <5.3> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.4> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.5> Update AdHoc PM parameter - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <6> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - return; -} /* end of aisUpdateBssInfoForMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, /* CURRENT SSID */ - prIeSsid->aucSSID, prIeSsid->ucLength)) ) { - fgReplyProbeResp = TRUE; - } - } - - return fgReplyProbeResp; - -} /* end of aisValidateProbeReq() */ - -#endif /* CFG_SUPPORT_ADHOC */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection handling -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ) -{ - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - -#if CFG_SUPPORT_ADHOC - if (prAisBssInfo->fgIsBeaconActivated) { - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_DELETE_ALL, - NETWORK_TYPE_AIS_INDEX, - 0, - NULL, - 0); - - prAisBssInfo->fgIsBeaconActivated = FALSE; - } -#endif - - rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - //add for ctia mode - { - UINT_8 aucP2pSsid[] = CTIA_MAGIC_SSID; - - if (EQUAL_SSID(aucP2pSsid, CTIA_MAGIC_SSID_LEN, prAisBssInfo->aucSSID, prAisBssInfo->ucSSIDLen)) { - nicEnterCtiaMode(prAdapter, FALSE, FALSE); - } - } - - if (prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_RADIO_LOST) { - scanRemoveBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - - /* remove from scanning results as well */ - wlanClearBssInScanningResult(prAdapter, prAisBssInfo->aucBSSID); - - /* trials for re-association */ - if (fgDelayIndication) { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - } - } - else { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - if (fgDelayIndication) { - if (OP_MODE_IBSS != prAisBssInfo->eCurrentOPMode) { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (!fgDelayIndication) { - //4 <5> Deactivate previous AP's STA_RECORD_T or all Clients in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventAbort(prAdapter); - - /* clear pending roaming connection request */ - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <6> Indicate Disconnected Event to Host - aisIndicationOfMediaStateToHost(prAdapter, - PARAM_MEDIA_STATE_DISCONNECTED, - fgDelayIndication); - - - //4 <7> Trigger AIS FSM - aisFsmSteps(prAdapter, AIS_STATE_IDLE); - - return; -} /* end of aisFsmDisconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of Scan done Time-Out to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDoneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - DEBUGFUNC("aisFsmRunEventScanDoneTimeOut()"); - - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - DBGLOG(AIS, STATE, ("aisFsmRunEventScanDoneTimeOut Current[%d]\n",prAisFsmInfo->eCurrentState)); - - prConnSettings->fgIsScanReqIssued = FALSE; - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_SCAN: - prAisFsmInfo->u4ScanIELength = 0; - eNextState = AIS_STATE_IDLE; - break; - case AIS_STATE_ONLINE_SCAN: - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_NORMAL_TR; -#endif /* CFG_SUPPORT_ROAMING */ - break; - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmBGSleepTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Background Scan Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventBGSleepTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - DBGLOG(AIS, LOUD, ("EVENT - SCAN TIMER: Idle End - Current Time = %ld\n", kalGetTimeTick())); - - eNextState = AIS_STATE_LOOKING_FOR; - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - break; - - default: - break; - } - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmBGSleepTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "IBSS ALONE Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventIbssAloneTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - - /* There is no one participate in our AdHoc during this TIMEOUT Interval - * so go back to search for a valid IBSS again. - */ - - DBGLOG(AIS, LOUD, ("EVENT-IBSS ALONE TIMER: Start pairing\n")); - - prAisFsmInfo->fgTryScan = TRUE; - - /* abort timer */ - aisFsmReleaseCh(prAdapter); - - /* Pull back to SEARCH to find candidate again */ - eNextState = AIS_STATE_SEARCH; - - break; - - default: - break; - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisIbssAloneTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Join Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventJoinTimeout()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_JOIN: - DBGLOG(AIS, LOUD, ("EVENT- JOIN TIMEOUT\n")); - - /* 1. Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* 2. Increase Join Failure Count */ - prAisFsmInfo->prTargetStaRec->ucJoinFailureCount++; -// For JB nl802.11 -#if 0 - if(prAisFsmInfo->prTargetStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) { - /* 3.1 Retreat to AIS_STATE_SEARCH state for next try */ - eNextState = AIS_STATE_SEARCH; - } - else { - /* 3.2 Retreat to AIS_STATE_WAIT_FOR_NEXT_SCAN state for next try */ - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - } -#endif - eNextState = AIS_STATE_IDLE; - break; - - case AIS_STATE_NORMAL_TR: - /* 1. release channel */ - aisFsmReleaseCh(prAdapter); - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - /* 2. process if there is pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - } - - break; - - default: - /* release channel */ - aisFsmReleaseCh(prAdapter); - break; - - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventJoinTimeout() */ - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisTest ( - VOID - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucSSID[]="pci-11n"; - UINT_8 ucSSIDLen=7; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Set Connection Request Issued Flag */ - prConnSettings->fgIsConnReqIssued = TRUE; - prConnSettings->ucSSIDLen = ucSSIDLen; - kalMemCopy(prConnSettings->aucSSID, aucSSID, ucSSIDLen); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_HEM_AIS_FSM_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - wifi_send_msg(INDX_WIFI, MSG_ID_WIFI_IST, 0); - - return; -} -#endif /* CFG_TEST_MGMT_FSM */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle OID_802_11_BSSID_LIST_SCAN -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prSsid Pointer of SSID_T if specified -* \param[in] pucIe Pointer to buffer of extra information elements to be attached -* \param[in] u4IeLength Length of information elements -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisFsmScanRequest()"); - - ASSERT(prAdapter); - ASSERT(u4IeLength <= MAX_IE_LENGTH); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (!prConnSettings->fgIsScanReqIssued) { - prConnSettings->fgIsScanReqIssued = TRUE; - - if(prSsid == NULL) { - prAisFsmInfo->ucScanSSIDLen = 0; - } - else { - COPY_SSID(prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen, - prSsid->aucSsid, - (UINT_8)prSsid->u4SsidLen); - } - - if(u4IeLength > 0 && u4IeLength <= MAX_IE_LENGTH ) { - prAisFsmInfo->u4ScanIELength = u4IeLength; - kalMemCopy(prAisFsmInfo->aucScanIEBuf, pucIe, u4IeLength); - } - else { - prAisFsmInfo->u4ScanIELength = 0; - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR) { - if(prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE - && prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - // 802.1x might not finished yet, pend it for later handling .. - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - else { - if(prAisFsmInfo->fgIsChannelGranted == TRUE) { - DBGLOG(AIS, WARN, ("Scan Request with channel granted for join operation: %d, %d", - prAisFsmInfo->fgIsChannelGranted, - prAisFsmInfo->fgIsChannelRequested)); - } - - /* start online scan */ - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN); - } - } - else if(prAisFsmInfo->eCurrentState == AIS_STATE_IDLE) { - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_SCAN); - } - else { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - } - else { - DBGLOG(AIS, WARN, ("Scan Request dropped. (state: %d)\n", prAisFsmInfo->eCurrentState)); - } - - return; -} /* end of aisFsmScanRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_REQ_CHANNEL_JOIN && - prAisFsmInfo->ucSeqNumOfChReq == ucTokenID) { - /* 2. channel privilege has been approved */ - prAisFsmInfo->u4ChGrantedInterval = u4GrantInterval; - - /* 3. state transition to join/ibss-alone/ibss-merge */ - /* 3.1 set timeout timer in cases join could not be completed */ - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - prAisFsmInfo->u4ChGrantedInterval - AIS_JOIN_CH_GRANT_THRESHOLD); - /* 3.2 set local variable to indicate join timer is ticking */ - prAisFsmInfo->fgIsInfraChannelFinished = FALSE; - - /* 3.3 switch to join state */ - aisFsmSteps(prAdapter, AIS_STATE_JOIN); - - prAisFsmInfo->fgIsChannelGranted = TRUE; - } - else { /* mismatched grant */ - /* 2. return channel privilege to CNM immediately */ - aisFsmReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->fgIsChannelGranted == TRUE - || prAisFsmInfo->fgIsChannelRequested == TRUE) { - - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChAbort->ucTokenID = prAisFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that corresponding beacon has not -* been received for a while and probing is not successful -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prAisBssInfo; - BOOLEAN fgDoAbortIndication = FALSE; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Diagnose Connection for Beacon Timeout Event - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - if (OP_MODE_INFRASTRUCTURE == prAisBssInfo->eCurrentOPMode) { - P_STA_RECORD_T prStaRec = prAisBssInfo->prStaRecOfAP; - - if (prStaRec) { - fgDoAbortIndication = TRUE; - } - } - else if (OP_MODE_IBSS == prAisBssInfo->eCurrentOPMode) { - fgDoAbortIndication = TRUE; - } - } - - //4 <2> invoke abort handler - if (fgDoAbortIndication) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_RADIO_LOST, TRUE); - } - - return; -} /* end of aisBssBeaconTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that DEAUTH frame has been -* sent and thus state machine could go ahead -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prMsduInfo Pointer of MSDU_INFO_T for DEAUTH frame -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_DISCONNECTING) { - if(rTxDoneStatus != TX_RESULT_DROPPED_IN_DRIVER) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_NEW_CONNECTION, FALSE); - } - } - else { - DBGLOG(AIS, WARN, ("DEAUTH frame transmitted without further handling")); - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aisDeauthXmitComplete() */ - -#if CFG_SUPPORT_ROAMING -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Looking for a candidate due to weak signal" to AIS FSM. -* -* @param[in] u4ReqScan Requesting Scan or not -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_AIS_REQUEST_TYPE_T eAisRequest; - - DBGLOG(AIS, LOUD, ("aisFsmRunEventRoamingDiscovery()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* search candidates by best rssi */ - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - -#if CFG_SUPPORT_WFD -#if CFG_ENABLE_WIFI_DIRECT - { - /* Check WFD is running */ - P_BSS_INFO_T prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - if (prAdapter->fgIsP2PRegistered && - IS_BSS_ACTIVE(prP2pBssInfo) && - (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT || - prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE)) { - DBGLOG(ROAMING, INFO, ("Handle roaming when P2P is GC or GO.\n")); - if (prAdapter->rWifiVar.prP2pFsmInfo) { - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - if ((prWfdCfgSettings->ucWfdEnable == 1) && - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID))) { - DBGLOG(ROAMING, INFO, ("WFD is running. Stop roaming.\n")); - roamingFsmRunEventRoam(prAdapter); - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_NOCANDIDATE); - return; - } - } - else { - ASSERT(0); - } - } /* fgIsP2PRegistered */ - } -#endif -#endif - - /* results are still new */ - if (!u4ReqScan) { - roamingFsmRunEventRoam(prAdapter); - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - if(prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - eAisRequest = AIS_REQUEST_ROAMING_SEARCH; - } - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR && prAisFsmInfo->fgIsInfraChannelFinished == TRUE) { - if(eAisRequest == AIS_REQUEST_ROAMING_SEARCH) { - aisFsmSteps(prAdapter, AIS_STATE_LOOKING_FOR); - } - else { - aisFsmSteps(prAdapter, AIS_STATE_SEARCH); - } - } - else { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); - - aisFsmInsertRequest(prAdapter, eAisRequest); - } - - return; -} /* end of aisFsmRunEventRoamingDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the time of ScanDone for roaming and transit to Roam state. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DBGLOG(AIS, LOUD, ("->aisFsmRoamingScanResultsUpdate()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - roamingFsmScanResultsUpdate(prAdapter); - - eNextState = prAisFsmInfo->eCurrentState; - if (prRoamingFsmInfo->eCurrentState == ROAMING_STATE_DISCOVERY) { - roamingFsmRunEventRoam(prAdapter); - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - eNextState = AIS_STATE_NORMAL_TR; - } - - return eNextState; -} /* end of aisFsmRoamingScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection of last AP before switching to roaming bss. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prTargetStaRec Target of StaRec of roaming -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisFsmRoamingDisconnectPrevAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Not invoke rlmBssAborted() here to avoid prAisBssInfo->fg40mBwAllowed - * to be reset. RLM related parameters will be reset again when handling - * association response in rlmProcessAssocRsp(). 20110413 - */ - //rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - prTargetStaRec->ucNetTypeIndex = 0xff; /* Virtial NetType */ - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - prTargetStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Virtial NetType */ - - return; -} /* end of aisFsmRoamingDisconnectPrevAP() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the roaming was completed. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prStaRec StaRec of roaming AP -* prAssocRspSwRfb -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisUpdateBssInfoForRoamingAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - return; -} /* end of aisFsmRoamingUpdateBss() */ - -#endif /* CFG_SUPPORT_ROAMING */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Check if there is any pending request and remove it (optional) -* -* @param prAdapter -* eReqType -* bRemove -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr, prPendingReqHdrNext; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* traverse through pending request list */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingReqHdr, - prPendingReqHdrNext, - &(prAisFsmInfo->rPendingReqList), - rLinkEntry, - AIS_REQ_HDR_T) { - /* check for specified type */ - if(prPendingReqHdr->eReqType == eReqType) { - /* check if need to remove */ - if(bRemove == TRUE) { - LINK_REMOVE_KNOWN_ENTRY(&(prAisFsmInfo->rPendingReqList), &(prPendingReqHdr->rLinkEntry)); - - cnmMemFree(prAdapter, prPendingReqHdr); - } - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get next pending request -* -* @param prAdapter -* -* @return P_AIS_REQ_HDR_T -*/ -/*----------------------------------------------------------------------------*/ -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - LINK_REMOVE_HEAD(&(prAisFsmInfo->rPendingReqList), prPendingReqHdr, P_AIS_REQ_HDR_T); - - return prPendingReqHdr; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Insert a new request -* -* @param prAdapter -* eReqType -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ) -{ - P_AIS_REQ_HDR_T prAisReq; - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - prAisReq = (P_AIS_REQ_HDR_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(AIS_REQ_HDR_T)); - - if(!prAisReq) { - ASSERT(0); // Can't generate new message - return FALSE; - } - - prAisReq->eReqType = eReqType; - - /* attach request into pending request list */ - LINK_INSERT_TAIL(&prAisFsmInfo->rPendingReqList, &prAisReq->rLinkEntry); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Flush all pending requests -* -* @param prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_REQ_HDR_T prAisReq; - - ASSERT(prAdapter); - - while((prAisReq = aisFsmGetNextRequest(prAdapter)) != NULL) { - cnmMemFree(prAdapter, prAisReq); - } - - return; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/assoc.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/assoc.c deleted file mode 100755 index d91d19743e92..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/assoc.c +++ /dev/null @@ -1,2050 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/assoc.c#3 $ -*/ - -/*! \file "assoc.c" - \brief This file includes the association-related functions. - - This file includes the association-related functions. -*/ - - - -/*\ -** $Log: assoc.c $ -** -** 07 27 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Fix wifi direct connection issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 08 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * add a pair of brace for compilation success. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 03 09 2012 terry.wu - * NULL - * Fix build error. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 yuche.tsai - * NULL - * Update Driver for wifi driect gc join IE update issue. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Fix PhyTypeSet in STA_REC in AP mode - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 19 2011 yuche.tsai - * NULL - * Fix KE when enable hot-spot & any one client connect to this hot-spot. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Update workaround for Kingnet AP. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Workaround for Kingnet 710 AP wrong AID assignment. - * - * 05 02 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning[WCXRP00000672] [MT6620 Wi-Fi][FW] Fix the PS event allocation - * Check STA when rx assoc. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 14 2011 wh.su - * [WCXRP00000545] [MT6620 Wi-Fi] [Driver] Fixed the p2p not enable, received a assoc rsp cause the rx assoc execute a null function - * Modify file for avoid assert at BOW recieve a assoc response frame but no p2p fucntion. - * - * 03 08 2011 terry.wu - * [WCXRP00000524] [MT6620 Wi-Fi][Driver] Fix p2p assoc request containing wrong IE format - * Fix p2p assoc request containing wrong IE format. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix RX disassoc issue under Hot-spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Desired Non-HT Rate Set. - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Recover the code that was coverwritted.. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 yuche.tsai - * NULL - * Add SSID IE in assoc req frame which is sent by P2P GC. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RSN IE generation by CFG_RSN_MIGRATION compilation flag. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * revised. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update assocProcessRxAssocReqFrame() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - macro > 10 line, initial value of an array - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 28 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning.u1rwduu`wvpghlqg|rm+vp - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update Assoc ID for PS - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Use new constant definition ELEM_MAX_LEN_EXT_CAP - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify assoc req IE talbe for HT cap IE - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * update the assocComposeReAssocReqFrameHeader() and fix the u2EstimatedFrameLen in assocSendReAssocReqFrame() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove some space line - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sending disassoc frame function - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the txassocReq IE table, adding for WPA/RSN - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eNetType not init in send AssocReq function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate the send Assoc with TXM - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to indicate the assoc request and assoc response (now disable) - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove unused variables - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_VAR_IE_ENTRY_T txAssocReqIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmReqGenerateHtCapIE },/* 45 */ -#if CFG_SUPPORT_WPS2 - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WSC), NULL, rsnGenerateWSCIE }, /* 221 */ -#endif -#if CFG_SUPPORT_WAPI - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WAPI), NULL, wapiGenerateWAPIIE }, /* 68 */ -#endif -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE }, /* 221 */ -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmReqGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO), NULL, mqmGenerateWmmInfoIE }, /* 221 */ -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE }, /* 48 */ -#endif -}; - -#if CFG_SUPPORT_AAA -VERIFY_IE_ENTRY_T rxAssocReqIETable[] = { - { ELEM_ID_RESERVED, NULL } /* 255 */ -}; - - -APPEND_VAR_IE_ENTRY_T txAssocRespIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE }, /* 42 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE }, /* 45 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE }, /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - { (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE }, /* 74 */ - { (0), p2pFuncCalculateP2p_IELenForAssocRsp, p2pFuncGenerateP2p_IEForAssocRsp }, /* 221 */ -#if CFG_SUPPORT_WFD - { (0), wfdFuncCalculateWfdIELenForAssocRsp, wfdFuncGenerateWfdIEForAssocRsp }, /* 221 */ -#endif -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE }, /* 221 */ - - { (0), p2pFuncCalculateWSC_IELenForAssocRsp, p2pFuncGenerateWSC_IEForAssocRsp } /* 221 */ - -}; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose the Capability Info Field. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval Capability Info Field -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ UINT_16 -assocBuildCapabilityInfo ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - UINT_32 u4NonHTPhyType; - UINT_16 u2CapInfo; - - - ASSERT(prStaRec); - - - /* Set up our requested capabilities. */ - u2CapInfo = CAP_INFO_ESS; - u2CapInfo |= CAP_CF_STA_NOT_POLLABLE; - - if (prStaRec->u2CapInfo & CAP_INFO_PRIVACY) { - u2CapInfo |= CAP_INFO_PRIVACY; - } - - - /* 7.3.1.4 */ - if (prStaRec->fgHasBasicPhyType) { - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - if ( (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortPreambleOptionImplemented) && - ( (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO) && - (prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) ) ) { - - /* Case I: Implemented == TRUE and Short Preamble Option Enable == TRUE. - * Case II: Implemented == TRUE and Short Preamble == AUTO (depends on - * BSS_DESC_T's capability) - */ - u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortSlotTimeOptionImplemented && - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable) { - u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - } - - DBGLOG(SAA, LOUD, ("ASSOC REQ: Compose Capability = 0x%04x for Target BSS ["MACSTR"].\n", - u2CapInfo, MAC2STR(prStaRec->aucMacAddr))); - - - return u2CapInfo; - -} /* end of assocBuildCapabilityInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - PUINT_8 pucBuffer; - UINT_16 u2SupportedRateSet; - UINT_8 aucAllSupportedRates[RATE_NUM] = {0}; - UINT_8 ucAllSupportedRatesLen; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (IS_STA_IN_AIS(prStaRec)) { - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - pucBuffer = p2pBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo, pucBuffer); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } -#endif - - else { - /* TODO(Kevin): For other network */ - } - - /* NOTE(Kevin 2008/12/19): 16.3.6.3 MLME-ASSOCIATE.indication - - * SupportedRates - The set of data rates that are supported by the STA - * that is requesting association. - * Original(Portable Driver): Only send the Rates that we'll support. - * New: Send the Phy Rates if the result of following & operation == NULL. - */ - //rateGetDataRatesFromRateSet((prBssDesc->u2OperationalRateSet & - // rPhyAttributes[prBssDesc->ePhyType].u2SupportedRateSet), - - if (prStaRec->fgHasBasicPhyType) { - UINT_32 u4NonHTPhyType; - - - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - u2SupportedRateSet = (prStaRec->u2OperationalRateSet & - rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet); - - ASSERT(u2SupportedRateSet); - - if (!u2SupportedRateSet) { - u2SupportedRateSet = rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet; - } - - /* TODO(Kevin): For P2P, we shouldn't send support rate set which contains 11b rate */ - - rateGetDataRatesFromRateSet(u2SupportedRateSet, - 0, - aucAllSupportedRates, - &ucAllSupportedRatesLen); - - ucSupRatesLen = ((ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) ? - ELEM_MAX_LEN_SUP_RATES : ucAllSupportedRatesLen); - - ucExtSupRatesLen = ucAllSupportedRatesLen - ucSupRatesLen; - - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - } - - return; -} /* end of assocBuildReAssocReqFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Request frame header and -* its fixed fields -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocReqFrameHeaderAndFF ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - UINT_16 u2CapInfo; - UINT_16 u2ListenInterval; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - ASSERT(pu2PayloadLen); - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_REQ; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_REQ; - } - WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - u2CapInfo = assocBuildCapabilityInfo(prAdapter, prStaRec); - - /* Fill the Capability Information field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - - - /* Calculate the listen interval for the maximum power mode. Currently, we - set it to the value 2 times DTIM period. */ - if (prStaRec->ucDTIMPeriod) { - u2ListenInterval = prStaRec->ucDTIMPeriod * DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD; - } - else { - DBGLOG(SAA, TRACE, ("Use default listen interval\n")); - u2ListenInterval = DEFAULT_LISTEN_INTERVAL; - } - prStaRec->u2ListenInterval = u2ListenInterval; - - /* Fill the Listen Interval field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2ListenInterval, u2ListenInterval); - - - //4 <3> Compose the Current AP Address field for ReAssociation Request frame. - /* Fill the Current AP Address field. */ - if (prStaRec->fgIsReAssoc) { - if (IS_STA_IN_AIS(prStaRec)) { - - P_AIS_BSS_INFO_T prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - P_WLAN_REASSOC_REQ_FRAME_T prReAssocFrame = - (P_WLAN_REASSOC_REQ_FRAME_T)prAssocFrame; - - COPY_MAC_ADDR(prReAssocFrame->aucCurrentAPAddr, prAisBssInfo->aucBSSID); - } - else { - ASSERT(0); /* We don't support ReAssociation for other network */ - } - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN + - CURR_AP_ADDR_FIELD_LEN); - } - else { - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN); - } - - return; -} /* end of assocComposeReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Request frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - if (fgIsReAssoc) { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - CURR_AP_ADDR_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - else { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - u2EstimatedExtraIELen = p2pCalculate_IEForAssocReq(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } - } -#else - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } -#endif - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - - /* Compose Header and Fixed Field */ - assocComposeReAssocReqFrameHeaderAndFF(prAdapter, - prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucOwnMacAddr, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - p2pGenerate_IEForAssocReq(prAdapter, prMsduInfo); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - } -#else - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } -#endif - - //4 <6> Update the (Re)association request information - if (IS_STA_IN_AIS(prStaRec)) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - -#if CFG_RSN_MIGRATION - kalUpdateReAssocReqInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); -#endif - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - - kalP2PUpdateAssocInfo( - prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); - } -#endif - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Request frame for -* SAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocReqFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Response frame for -* AAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocRspFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocRespFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming (Re)Association Frame and take out -* the status code. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - UINT_16 u2RxFrameCtrl; - UINT_16 u2RxCapInfo; - UINT_16 u2RxStatusCode; - UINT_16 u2RxAssocId; - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - DBGLOG(SAA, LOUD, ("prSwRfb->u2PayloadLength = %d\n", prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the (Re)Assocation Resp Frame. - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of (Re)Assocation Resp Frame. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2RxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2RxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Parse the Fixed Fields of (Re)Assocation Resp Frame Body. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2CapInfo, &u2RxCapInfo); - u2RxCapInfo = prAssocRspFrame->u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2StatusCode, &u2RxStatusCode); - u2RxStatusCode = prAssocRspFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //4 <4> Check CAP_INFO - /* NOTE(Kevin): CM suggest to add MGMT workaround for those APs didn't check - * the CAP Privacy Bit to overcome a corner case that the Privacy Bit - * of our SCAN result didn't consist with AP's Association Resp. - */ - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - /* WAPI AP allow the customer use WZC to join mode, the privacy bit is 0 */ - /* even at WAI & WAPI_PSK mode, but the assoc respose set the privacy bit set 1 */ - DBGLOG(SEC, TRACE, ("Workaround the WAPI AP allow the customer to use WZC to join\n")); - } - else -#endif -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && 1) { - /* Todo:: Fixed this */ - } - else -#endif - { - } - -#if CFG_STRICT_CHECK_CAPINFO_PRIVACY - if ((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) ^ (u2RxCapInfo & CAP_INFO_PRIVACY)) { - u2RxStatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - } -#endif - } - - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_RSN_MIGRATION - /* Update the information in the structure used to query and set - OID_802_11_ASSOCIATION_INFORMATION. */ - kalUpdateReAssocRspInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocRspFrame->u2CapInfo, - (UINT_32)(prSwRfb->u2PacketLen)); -#endif - } - - //4 <5> Update CAP_INFO and ASSOC_ID - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { - prStaRec->u2CapInfo = u2RxCapInfo; - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2AssocId, &u2RxAssocId); - u2RxAssocId = prAssocRspFrame->u2AssocId; // NOTE(Kevin): Optimized for ARM - - /* 20110715 Workaround for Kingnet 710 AP (Realtek 8186) - * This AP raises the bit 6&7 not bit 14&15 in AID field. - * It cause wrong AID assignment. - * For AID = 2 - * Normal case: 0xC002(1100 0000 0000 0010) => 2 - * Kingnet 710: 0x00C2(0000 0000 1100 0010) => 194 - * workaround: mask bit 6&7 for this AP - */ - if((u2RxAssocId & BIT(6)) && - (u2RxAssocId & BIT(7)) && - !(u2RxAssocId & BITS(8, 15))) { - prStaRec->u2AssocId = u2RxAssocId & ~BITS(6,7); - } else { - prStaRec->u2AssocId = u2RxAssocId & ~AID_MSB; -#if CFG_SUPPORT_802_11W - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prBssSpecInfo->ucSaQueryTimedOut = 0; - } -#endif - } - } - -#if CFG_SUPPORT_802_11W - if (u2RxStatusCode == STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED){ - DBGLOG(SAA, INFO, ("AP rejected due the authentication algorithm not support\n")); - } - else if (u2RxStatusCode == STATUS_CODE_ASSOC_REJECTED_TEMPORARILY) { - PUINT_8 pucIE, pucTime; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_TIMEOUT_INTERVAL == IE_ID(pucIE) && IE_LEN(pucIE) == 5) { - pucTime = ((P_IE_HDR_T)pucIE)->aucInfo; - if (pucTime[0] == ACTION_SA_TIMEOUT_ASSOC_COMEBACK) { - UINT_32 tu; - WLAN_GET_FIELD_32(pucTime + 1, &tu); - DBGLOG(SAA, INFO, ("AP rejected association temporarily; comeback duration %u TU " - "(%u ms)\n", tu, TU_TO_MSEC(tu))); - if (tu > TX_ASSOCIATION_RETRY_TIMEOUT_TU) { - DBGLOG(SAA, INFO, ("Update timer based on comeback duration\n")); - //ieee80211_reschedule_timer(wpa_s, ms); - } - } - break; - } - } /* end of IE_FOR_EACH */ - } -#endif - *pu2StatusCode = u2RxStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckRxReAssocRspFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will compose the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2ReasonCode The reason code of disassociation -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeDisassocFrame ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisAssocFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - - prDisAssocFrame = (P_WLAN_DISASSOC_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the DisAssociation frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DISASSOC; - - WLAN_SET_FIELD_16(&prDisAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDisAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDisAssocFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Disassociation frame. - /* Fill the Reason Code field. */ - WLAN_SET_FIELD_16(&prDisAssocFrame->u2ReasonCode, u2ReasonCode); - - return; -} /* end of assocComposeDisassocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2ReasonCode The reason code of disassociation -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ) -{ - PUINT_8 pucMacAddress; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - //UINT_32 u4Status = WLAN_STATUS_SUCCESS; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Disassociation Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - REASON_CODE_FIELD_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending DisAssoc.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Disassociation frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - pucMacAddress = prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].aucOwnMacAddr; - - /* Compose Header and Fixed Field */ - assocComposeDisassocFrame(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucMacAddress, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - - prDisassocFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDisassocFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("assocSendDisAssocFrame with protection\n")); - } -#endif - - u2PayloadLen = REASON_CODE_FIELD_LEN; - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendDisAssocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Disassociation frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Disassociation Frame. - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Disassociation Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDisassocFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Disassoc Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDisassocFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDisassocFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxDisassocFrame() */ - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Association Req frame -* and return a Status Code. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code for carried in Association Response. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_RSN_INFO_ELEM_T prIeRsn = (P_RSN_INFO_ELEM_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE, pucIEStart; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_16 u2StatusCode = STATUS_CODE_SUCCESSFUL; - UINT_16 u2RxFrameCtrl; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - UINT_32 i; - - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - return WLAN_STATUS_FAILURE; - } - - //4 <1> locate the Association Req Frame. - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Association Req Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < - (CAP_INFO_FIELD_LEN + LISTEN_INTERVAL_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prAssocReqFrame->aucBSSID, prBssInfo->aucBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (MAC_FRAME_REASSOC_REQ == u2RxFrameCtrl) { - prStaRec->fgIsReAssoc = TRUE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - prStaRec->fgIsReAssoc = FALSE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = prAssocReqFrame->aucInfoElem; - } - - - //4 <3> Parse the Fixed Fields of Assoc Req Frame Body. - prStaRec->u2CapInfo = prAssocReqFrame->u2CapInfo; - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) && - !kalP2PGetCipher(prAdapter->prGlueInfo))) { - u2StatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - DBGLOG(RSN, TRACE, ("STA Assoc req privacy bit check fail\n")); - return WLAN_STATUS_SUCCESS; - } - } -#endif - - prStaRec->u2ListenInterval = prAssocReqFrame->u2ListenInterval; - prStaRec->ucPhyTypeSet = 0; - - /* Might be legacy client or p2p gc. */ - prStaRec->eStaType = STA_TYPE_LEGACY_CLIENT; - - //4 <4> Parse the IE of Assoc Req Frame Body. - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): Get SSID once */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - case ELEM_ID_HT_CAP: - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - break; - case ELEM_ID_RSN: - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - prIeRsn = RSN_IE(pucIE); - rsnParserCheckForRSNCCMPPSK(prAdapter, prIeRsn, &u2StatusCode); - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - #endif - break; - case ELEM_ID_VENDOR: - #if CFG_ENABLE_WIFI_DIRECT - { - if ((prAdapter->fgIsP2PRegistered)) { - UINT_8 ucOuiType = 0; - - p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType); - - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - DBGLOG(P2P, TRACE, ("Target Client is a P2P group client\n")); - prStaRec->eStaType = STA_TYPE_P2P_GC; - } - } - } - #endif - break; - default: - for (i = 0; i < (sizeof(rxAssocReqIETable) / sizeof(VERIFY_IE_ENTRY_T)); i++) { - - if ((IE_ID(pucIE)) == rxAssocReqIETable[i].ucElemID) { - rxAssocReqIETable[i].pfnVarifyIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIE, &u2StatusCode); - - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - } - - break; - } - } /* end of IE_FOR_EACH */ - - // parsing for WMM related information (2010/12/21) - mqmProcessAssocReq( - prAdapter, - prSwRfb, - pucIEStart, - u2IELength); - - do { - if (prIeSsid) { - if (UNEQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - } - else { - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - - prStaRec->u2OperationalRateSet = 0; - prStaRec->u2BSSBasicRateSet = 0; - - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prStaRec->u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if ((prBssInfo->u2BSSBasicRateSet & prStaRec->u2OperationalRateSet) != - prBssInfo->u2BSSBasicRateSet) { - - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - - /* Accpet the Sta, update BSSBasicRateSet from Bss */ - - prStaRec->u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = (prStaRec->u2OperationalRateSet & RATE_SET_ALL_ABG); - - if (BAND_2G4 == HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr)) { - #if 0 /* Marked by CMC 20111024 */ - /* check if support 11n */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - - if (!(u2BSSBasicRateSet & RATE_SET_OFDM)) { - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - - } - - } - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - #endif - } - else { /* (BAND_5G == prBssDesc->eBande) */ - #if 0 /* Marked by CMC 20111024 */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - ASSERT((prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) == 0); - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - #endif - } - - } - else { - ASSERT(0); - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (prIeRsn) { - if (!kalP2PGetCipher(prAdapter->prGlueInfo)) { - u2StatusCode = STATUS_CODE_CIPHER_SUITE_REJECTED; - break; - } - } - else { - prStaRec->rSecInfo.fgAllowOnly1x = FALSE; - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - //Only Allow 1x - prStaRec->rSecInfo.fgAllowOnly1x = TRUE; - break; - } - } - } -#endif - - } while (FALSE); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - #if 1 /* ICS */ - { - PUINT_8 cp = (PUINT_8)&prAssocReqFrame->u2CapInfo; - if (prStaRec->fgIsReAssoc) - cp += 10; - else - cp += 4; - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - } - prStaRec->u2AssocReqIeLen = u2IELength; - if (u2IELength) { - prStaRec->pucAssocReqIe = kalMemAlloc(u2IELength, VIR_MEM_TYPE); - kalMemCopy(prStaRec->pucAssocReqIe, cp, u2IELength); - } - } - #endif - kalP2PUpdateAssocInfo(prAdapter->prGlueInfo, (PUINT_8)&prAssocReqFrame->u2CapInfo, u2IELength + (prStaRec->fgIsReAssoc ? 10 : 4), prStaRec->fgIsReAssoc); - } -#endif - - *pu2StatusCode = u2StatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocRespFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo - ) -{ - PUINT_8 pucBuffer; - P_STA_RECORD_T prStaRec; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - ucExtSupRatesLen = 0; - } - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of assocBuildReAssocRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Response frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucBssid Given BSSID. -* @param[in] u2CapInfo Capability Field of current BSS. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocRespFrameHeaderAndFF ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucBSSID[], - IN UINT_16 u2CapInfo, - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucBSSID); - ASSERT(pu2PayloadLen); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_RSP; - } - //WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - prAssocRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target MAC Address. */ - COPY_MAC_ADDR(prAssocRspFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucSrcAddr, aucBSSID); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucBSSID, aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - prAssocRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2StatusCode, prStaRec->u2StatusCode); - prAssocRspFrame->u2StatusCode = prStaRec->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2AssocId, ((prStaRec->u2AssocId & AID_MASK) | AID_MSB)); - prAssocRspFrame->u2AssocId = - ((prStaRec->u2AssocId & AID_MASK) | AID_MSB); // NOTE(Kevin): Optimized for ARM - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - return; -} /* end of assocComposeReAssocRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Resp frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - STATUS_CODE_FIELD_LEN + \ - AID_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocRespIETable[i].u2EstimatedFixedIELen; - } - else if (txAssocRespIETable[i].pfnCalculateVariableIELen != NULL) { - u2EstimatedExtraIELen += (UINT_16)txAssocRespIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(AAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Response.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex != NETWORK_TYPE_AIS_INDEX); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and Fixed Field */ - assocComposeReAssocRespFrameHeaderAndFF(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucBSSID, - prBssInfo->u2CapInfo, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = aaaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocRespFrameCommonIEs(prAdapter, prMsduInfo, prBssInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].pfnAppendIE) { - txAssocRespIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of assocSendReAssocRespFrame() */ -#endif /* CFG_SUPPORT_AAA */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/auth.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/auth.c deleted file mode 100755 index 9938ebc09823..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/auth.c +++ /dev/null @@ -1,1350 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/auth.c#1 $ -*/ - -/*! \file "auth.c" - \brief This file includes the authentication-related functions. - - This file includes the authentication-related functions. -*/ - - - -/* -** $Log: auth.c $ - * - * 02 13 2012 cp.wu - * NULL - * show error message only instead of raise assertion when - * received authentication frame is carrying illegal parameters. - * - * 11 09 2011 yuche.tsai - * NULL - * Fix a network index & station record index issue when TX deauth frame. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 yuche.tsai - * NULL - * Fix coding error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000796] [Volunteer Patch][MT6620][Driver] Add BC deauth frame TX feature. - * BC deauth support. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 21 2011 terry.wu - * [WCXRP00000381] [MT6620 Wi-Fi][Driver] Kernel panic when replying unaccept Auth in AP mode - * In AP mode, use STA_REC_INDEX_NOT_FOUND(0xFE) instead of StaRec index when replying an unaccept Auth frame. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update authSendDeauthFrame() for correct the value of eNetTypeIndex in MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Check Net is active before sending Deauth frame. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix compile warning - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add debug message for abnormal authentication frame from AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Fix the Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the authComposeAuthFrameHeader() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the send deauth frame function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate send Auth with TXM - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_IE_ENTRY_T txAuthIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_CHALLENGE_TEXT), authAddIEChallengeText } -}; - -HANDLE_IE_ENTRY_T rxAuthIETable[] = { - { ELEM_ID_CHALLENGE_TEXT, authHandleIEChallengeText } -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Authentication frame header and fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2AuthAlgNum Authentication Algorithm Number -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[in] u2StatusCode Status Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeAuthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_16 u2AuthAlgNum, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Authentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_AUTH; - - /* If this frame is the third frame in the shared key authentication - * sequence, it shall be encrypted. - */ - if ((u2AuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3)) { - - u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; /* HW will also detect this bit for applying encryption */ - } - - //WLAN_SET_FIELD_16(&prAuthFrame->u2FrameCtrl, u2FrameCtrl); - prAuthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAuthFrame->aucSrcAddr, aucMACAddress); - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucPeerMACAddress); - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - - /* Fill the BSSID field with Current BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucMACAddress); - break; - - default: - ASSERT(0); - } - - /* Clear the SEQ/FRAG_NO field. */ - prAuthFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Authentication Algorithm Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthAlgNum, u2AuthAlgNum); - prAuthFrame->u2AuthAlgNum = u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Authentication Transaction Sequence Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, u2TransactionSeqNum); - prAuthFrame->u2AuthTransSeqNo = u2TransactionSeqNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2StatusCode, u2StatusCode); - prAuthFrame->u2StatusCode = u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeAuthFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will append Challenge Text IE to the Authentication frame -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return; - } - - ASSERT(prStaRec); - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prMsduInfo->prPacket; - - WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - - /* Only consider SEQ_3 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (prStaRec->prChallengeText != NULL)) { - - COPY_IE(((UINT_32)(prMsduInfo->prPacket) + prMsduInfo->u2FrameLength), - (prStaRec->prChallengeText)); - - prMsduInfo->u2FrameLength += IE_SIZE(prStaRec->prChallengeText); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -#if !CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame\n")); - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec->aucMacAddr, - prBssInfo->aucOwnMacAddr, - prStaRec->ucAuthAlgNum, - u2TransactionSeqNum, - STATUS_CODE_RESERVED); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#else - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - /*get from input parameter*/ - //ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - PFN_TX_DONE_HANDLER pfTxDoneHandler = (PFN_TX_DONE_HANDLER)NULL; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_16 ucAuthAlgNum; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame %d, Status Code = %d\n", - u2TransactionSeqNum, u2StatusCode)); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - if (prStaRec) { - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucReceiveAddr = prStaRec->aucMacAddr; - - ucAuthAlgNum = prStaRec->ucAuthAlgNum; - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - pfTxDoneHandler = saaFsmRunEventTxDone; - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - pfTxDoneHandler = aaaFsmRunEventTxDone; - break; - } - - } - else { /* For Error Status Code */ - P_WLAN_AUTH_FRAME_T prFalseAuthFrame; - - - ASSERT(prFalseAuthSwRfb); - prFalseAuthFrame = (P_WLAN_AUTH_FRAME_T)prFalseAuthSwRfb->pvHeader; - - ASSERT(u2StatusCode != STATUS_CODE_SUCCESSFUL); - - pucTransmitAddr = prFalseAuthFrame->aucDestAddr; - - pucReceiveAddr = prFalseAuthFrame->aucSrcAddr; - - ucAuthAlgNum = prFalseAuthFrame->u2AuthAlgNum; - - u2TransactionSeqNum = (prFalseAuthFrame->u2AuthTransSeqNo + 1); - } - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF((PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - ucAuthAlgNum, - u2TransactionSeqNum, - u2StatusCode); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - if(prStaRec) { - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; //false Auth frame - } - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#endif /* CFG_SUPPORT_AAA */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX Authentication frame for SAA/AAA event -* handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - UINT_16 u2TxAuthAlgNum; - UINT_16 u2TxTransactionSeqNum; - - - ASSERT(prMsduInfo); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAuthFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAuthFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (u2TxFrameCtrl != MAC_FRAME_AUTH) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2TxAuthAlgNum) - u2TxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2TxAuthAlgNum != (UINT_16)(prStaRec->ucAuthAlgNum)) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TxTransactionSeqNum) - u2TxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2TxTransactionSeqNum != u2TransactionSeqNum) { - return WLAN_STATUS_FAILURE; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckTxAuthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Auth Frame's Transaction Sequence -* Number before delivering it to the corresponding SAA or AAA Module. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain authentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxTransactionSeqNum; - - - ASSERT(prSwRfb); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Authentication Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_SUCCESS; - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - switch (u2RxTransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - saaFsmRunEventRxAuth(prAdapter, prSwRfb); - break; - - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: -#if CFG_SUPPORT_AAA - aaaFsmRunEventRxAuth(prAdapter, prSwRfb); -#endif /* CFG_SUPPORT_AAA */ - break; - - default: - DBGLOG(SAA, WARN, ("Strange Authentication Packet: Auth Trans Seq No = %d, Error Status Code = %d\n", - u2RxTransactionSeqNum, prAuthFrame->u2StatusCode)); - break; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameTransSeq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming Authentication Frame and take -* the status code out. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxAuthAlgNum; - UINT_16 u2RxTransactionSeqNum; - //UINT_16 u2RxStatusCode; // NOTE(Kevin): Optimized for ARM - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2RxAuthAlgNum); - u2RxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2RxAuthAlgNum != (UINT_16)prStaRec->ucAuthAlgNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with auth type = %d, current = %d\n", - u2RxAuthAlgNum, prStaRec->ucAuthAlgNum)); - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2RxTransactionSeqNum != u2TransactionSeqNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with Transaction Seq No = %d\n", - u2RxTransactionSeqNum)); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Get the Status code - //WLAN_GET_FIELD_16(&prAuthFrame->u2StatusCode, &u2RxStatusCode); - //*pu2StatusCode = u2RxStatusCode; - *pu2StatusCode = prAuthFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Challenge Text IE from the Authentication frame -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] prIEHdr Pointer to start address of IE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prSwRfb); - ASSERT(prIEHdr); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - u2TransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - /* Only consider SEQ_2 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_2) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY)) { - - /* Free previous allocated TCM memory */ - if (prStaRec->prChallengeText) { - ASSERT(0); - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - if ( ( prStaRec->prChallengeText = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, IE_SIZE(prIEHdr)) ) == NULL) { - return; - } - - /* Save the Challenge Text from Auth Seq 2 Frame, before sending Auth Seq 3 Frame */ - COPY_IE(prStaRec->prChallengeText, prIEHdr); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - PUINT_8 pucIEsBuffer; - UINT_16 u2IEsLen; - UINT_16 u2Offset; - UINT_8 ucIEID; - UINT_32 i; - - - ASSERT(prSwRfb); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - pucIEsBuffer = &prAuthFrame->aucInfoElem[0]; - u2IEsLen = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - IE_FOR_EACH(pucIEsBuffer, u2IEsLen, u2Offset) { - ucIEID = IE_ID(pucIEsBuffer); - - for (i = 0; i < (sizeof(rxAuthIETable) / sizeof(HANDLE_IE_ENTRY_T)); i++) { - - if (ucIEID == rxAuthIETable[i].ucElemID) { - rxAuthIETable[i].pfnHandleIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIEsBuffer); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth2_Auth4Frame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Deauthentication frame -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2StatusCode Status Code -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeDeauthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_8 aucBssid[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - ASSERT(aucBssid); - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Deauthentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DEAUTH; - - //WLAN_SET_FIELD_16(&prDeauthFrame->u2FrameCtrl, u2FrameCtrl); - prDeauthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDeauthFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucBSSID, aucBssid); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDeauthFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prDeauthFrame->u2ReasonCode, u2ReasonCode); - prDeauthFrame->u2ReasonCode = u2ReasonCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeDeauthFrameHeaderAndFF() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Deauthenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prClassErrSwRfb Pointer to the SW_RFB_T which is Class Error. -* @param[in] u2ReasonCode A reason code to indicate why to leave BSS. -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -* @retval WLAN_STATUS_FAILURE Didn't send Deauth frame for various reasons. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_WLAN_MAC_HEADER_A4_T prWlanMacHeader = NULL; - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - PUINT_8 pucBssid = NULL; - - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2RxFrameCtrl; - P_BSS_INFO_T prBssInfo; - - P_DEAUTH_INFO_T prDeauthInfo; - OS_SYSTIME rCurrentTime; - INT_32 i4NewEntryIndex, i; - UINT_8 ucStaRecIdx = STA_REC_INDEX_NOT_FOUND; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucBMC[] = BC_MAC_ADDR; -#endif - - /* NOTE(Kevin): The best way to reply the Deauth is according to the incoming data - * frame - */ - //4 <1> Find the Receiver Address first. - if (prClassErrSwRfb) { - BOOLEAN fgIsAbleToSendDeauth = FALSE; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_A4_T) prClassErrSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prWlanMacHeader->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prWlanMacHeader->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* TODO(Kevin): Currently we won't send Deauth for IBSS node. How about DLS ? */ - if ((prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) == 0) { - return WLAN_STATUS_FAILURE; - } - - /* Check if corresponding BSS is able to send Deauth */ - for (i = NETWORK_TYPE_AIS_INDEX; i < NETWORK_TYPE_INDEX_NUM; i++) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[i]); - - if (IS_NET_ACTIVE(prAdapter, i) && - (EQUAL_MAC_ADDR(prWlanMacHeader->aucAddr1, prBssInfo->aucOwnMacAddr))) { - { - fgIsAbleToSendDeauth = TRUE; - eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)i; - break; - } - } - } - - if (!fgIsAbleToSendDeauth) { - return WLAN_STATUS_FAILURE; - } - - pucReceiveAddr = prWlanMacHeader->aucAddr2; - - } - else if (prStaRec) { - - pucReceiveAddr = prStaRec->aucMacAddr; - } - else { -#if CFG_ENABLE_WIFI_DIRECT - pucReceiveAddr = aucBMC; -#else - return WLAN_STATUS_FAILURE; -#endif - } - - //4 <2> Check if already send a Deauth frame in MIN_DEAUTH_INTERVAL_MSEC - GET_CURRENT_SYSTIME(&rCurrentTime); - - i4NewEntryIndex = -1; - for (i = 0; i < MAX_DEAUTH_INFO_COUNT; i++) { - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i]); - - - /* For continuously sending Deauth frame, the minimum interval is - * MIN_DEAUTH_INTERVAL_MSEC. - */ - if (CHECK_FOR_TIMEOUT(rCurrentTime, - prDeauthInfo->rLastSendTime, - MSEC_TO_SYSTIME(MIN_DEAUTH_INTERVAL_MSEC))) { - - i4NewEntryIndex = i; - } - else if (EQUAL_MAC_ADDR(pucReceiveAddr, prDeauthInfo->aucRxAddr) && - (!pfTxDoneHandler)) { - - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Update information. - if (i4NewEntryIndex > 0) { - - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i4NewEntryIndex]); - - COPY_MAC_ADDR(prDeauthInfo->aucRxAddr, pucReceiveAddr); - prDeauthInfo->rLastSendTime = rCurrentTime; - } - else { - /* NOTE(Kevin): for the case of AP mode, we may encounter this case - * if deauth all the associated clients. - */ - DBGLOG(SAA, WARN, ("No unused DEAUTH_INFO_T !\n")); - } - - //4 <4> Allocate a PKT_INFO_T for Deauthentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - REASON_CODE_FIELD_LEN); - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Deauth Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <5> Find the Transmitter Address and BSSID. - if (prClassErrSwRfb) { - - /* The TA of Deauth is the A1 of RX frame */ - pucTransmitAddr = prWlanMacHeader->aucAddr1; - - switch (prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) { - - case MASK_FC_FROM_DS: - /* The BSSID of Deauth is the A2 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - case MASK_FC_TO_DS: - /* The BSSID of Deauth is the A1 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr1; - break; - - case MASK_TO_DS_FROM_DS: - /* TODO(Kevin): Consider BOW, now we set the BSSID of Deauth - * to the A2 of RX frame for temporary solution. - */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - /* No Default */ - } - - } - else if (prStaRec) { - eNetTypeIndex = prStaRec->ucNetTypeIndex; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - } -#if CFG_ENABLE_WIFI_DIRECT - else { - if (prAdapter->fgIsP2PRegistered) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ucStaRecIdx = STA_REC_INDEX_BMCAST; - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - } - else { - return WLAN_STATUS_FAILURE; - } - } - -#endif - - //4 <6> compose Deauthentication frame header and some fixed fields */ - authComposeDeauthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - pucBssid, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDeauthFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("authSendDeauthFrame with protection\n")); - } -#endif - - //4 <7> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = ((prStaRec == NULL)?ucStaRecIdx:prStaRec->ucIndex); - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + REASON_CODE_FIELD_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <8> Inform TXM to send this Deauthentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendDeauthFrame() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Deauthentication frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Deauthentication Frame. - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Deauthentication Frame. -#if 0 // Kevin: Seems redundant - WLAN_GET_FIELD_16(&prDeauthFrame->u2FrameCtrl, &u2RxFrameCtrl) - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (u2RxFrameCtrl != MAC_FRAME_DEAUTH) { - return WLAN_STATUS_FAILURE; - } -#endif - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Deauth Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDeauthFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Deauth Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDeauthFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDeauthFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxDeauthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucExpectedBSSID Given Expected BSSID. -* @param[in] u2ExpectedAuthAlgNum Given Expected Authentication Algorithm Number -* @param[in] u2ExpectedTransSeqNum Given Expected Transaction Sequence Number. -* @param[out] pu2ReturnStatusCode Return Status Code. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -* @retval WLAN_STATUS_FAILURE The frame we will ignore. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2ReturnStatusCode = STATUS_CODE_SUCCESSFUL; - - - ASSERT(prSwRfb); - ASSERT(aucExpectedBSSID); - ASSERT(pu2ReturnStatusCode); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Check the BSSID - if (UNEQUAL_MAC_ADDR(prAuthFrame->aucBSSID, aucExpectedBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - if (prAuthFrame->u2AuthAlgNum != u2ExpectedAuthAlgNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED; - } - - if (prAuthFrame->u2AuthTransSeqNo != u2ExpectedTransSeqNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_OUT_OF_SEQ; - } - - *pu2ReturnStatusCode = u2ReturnStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth1Frame() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/bss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/bss.c deleted file mode 100755 index cd2b70afd6a5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/bss.c +++ /dev/null @@ -1,2790 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/bss.c#3 $ -*/ - -/*! \file "bss.c" - \brief This file contains the functions for creating BSS(AP)/IBSS(AdHoc). - - This file contains the functions for BSS(AP)/IBSS(AdHoc). We may create a BSS/IBSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - - - -/* -** $Log: bss.c $ -** -** 08 30 2012 chinglan.wang -** [ALPS00349664] [6577JB][WIFI] Phone can not connect to AP secured with AES via WPS in 802.11n Only -** . -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 14 2012 chinglan.wang - * NULL - * Fix the losing of the HT IE in assoc request.. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 08 2012 yuche.tsai - * NULL - * Fix FW assert when start Hot-Spot. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 20 2012 chinglan.wang - * 03 02 2012 terry.wu - * NULL - * Fix the WPA-PSK TKIP and WPA2-PSK AES security mode bug. - * - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 15 2012 yuche.tsai - * NULL - * Fix wrong basic rate issue. - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Always set short slot time to TRUE initially in AP mode - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 29 2011 eddie.chen - * [WCXRP00000608] [MT6620 Wi-Fi][DRV] Change wmm parameters in beacon - * Change wmm parameters in beacon. - * - * 03 29 2011 yuche.tsai - * [WCXRP00000607] [Volunteer Patch][MT6620][Driver] Coding Style Fix for klocwork scan. - * Fix klocwork issue. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * modify to handle if beacon MSDU been released when BSS deactivated - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * bss should create station record type according to callers input. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * In p2p link function, check networktype before calling p2p function. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Modify p2p link function to avoid assert. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Fix the compile error in windows. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * .Fix typo and missing entry - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Fix prBssInfo->aucCWminLog to prBssInfo->aucCWminLogForBcast - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 16 2010 yuche.tsai - * NULL - * Before composing Beacon IE, assign network type index for msdu info, - * this information is needed by RLM module while composing some RLM related IE field. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Fix undefined pucDestAddr in bssUpdateBeaconContent() - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 26 2010 yuche.tsai - * - * Add support to RX probe response for P2P. - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fix compilation error when WIFI_DIRECT is turned on - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update bssProcessProbeRequest() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Use TX MGMT Frame API for sending PS NULL frame to avoid the TX Burst Mechanism in TX FW Frame API - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Seperate Beacon and ProbeResp IE array - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 20 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Fix restart Beacon Timeout Func after connection diagnosis - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename the CFG flags - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing beacon's TX data rate - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to define - BAND_24G and specific BSS_INFO_T was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -APPEND_VAR_IE_ENTRY_T txBcnIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - ,{ 0, p2pFuncCalculateExtra_IELenForBeacon, p2pFuncGenerateExtra_IEForBeacon } /* 221 */ -#else - ,{ 0, p2pFuncCalculateP2p_IELenForBeacon, p2pFuncGenerateP2p_IEForBeacon } /* 221 */ - ,{ 0, p2pFuncCalculateWSC_IELenForBeacon, p2pFuncGenerateWSC_IEForBeacon } /* 221 */ -#endif -#endif /* CFG_ENABLE_WIFI_DIRECT */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create or reset a STA_RECORD_T by given BSS_DESC_T for -* Infrastructure or AdHoc Mode. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eStaType Assign STA Type for this STA_RECORD_T -* @param[in] eNetTypeIndex Assign Net Type Index for this STA_RECORD_T -* @param[in] prBssDesc Received Beacon/ProbeResp from this STA -* -* @retval Pointer to STA_RECORD_T -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_STA_RECORD_T prStaRec; - UINT_8 ucNonHTPhyTypeSet; - - - ASSERT(prBssDesc); - - //4 <1> Get a valid STA_RECORD_T - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - if (!prStaRec) { - - prStaRec = cnmStaRecAlloc(prAdapter, (UINT_8) eNetTypeIndex); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - - if(!prStaRec) { - ASSERT(FALSE); - return NULL; - } - - ASSERT(prStaRec); - - prStaRec->ucJoinFailureCount = 0; - /* TODO(Kevin): If this is an old entry, we may also reset the ucJoinFailureCount to 0. - */ - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prBssDesc->aucSrcAddr); - } - - - //4 <2> Setup STA TYPE and NETWORK - prStaRec->eStaType = eStaType; - - prStaRec->ucNetTypeIndex = eNetTypeIndex; - - - //4 <3> Update information from BSS_DESC_T to current P_STA_RECORD_T - prStaRec->u2CapInfo = prBssDesc->u2CapInfo; - - prStaRec->u2OperationalRateSet = prBssDesc->u2OperationalRateSet; - prStaRec->u2BSSBasicRateSet = prBssDesc->u2BSSBasicRateSet; - - prStaRec->ucPhyTypeSet = prBssDesc->ucPhyTypeSet; - - if (!((prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_KEY_ABSENT) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION_DISABLED) || - (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) || - (prAdapter->prGlueInfo->u2WapiAssocInfoIESz))) { - DBGLOG(BSS, INFO, ("Ignore the HT Bit for TKIP as pairwise cipher configed!\n")); - prStaRec->ucPhyTypeSet &= ~PHY_TYPE_BIT_HT; - } - - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prAdapter->rWifiVar.ucAvailablePhyTypeSet; - - ucNonHTPhyTypeSet = prStaRec->ucDesiredPhyTypeSet & PHY_TYPE_SET_802_11ABG; - - /* Check for Target BSS's non HT Phy Types */ - if (ucNonHTPhyTypeSet) { - - if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_ERP) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_OFDM) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = TRUE; - } - else { - /* Use mandatory for 11N only BSS */ - ASSERT(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N); - - { - /* TODO(Kevin): which value should we set for 11n ? ERP ? */ - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = FALSE; - } - - /* Update non HT Desired Rate Set */ - { - P_CONNECTION_SETTINGS_T prConnSettings; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prStaRec->u2DesiredNonHTRateSet = - (prStaRec->u2OperationalRateSet & prConnSettings->u2DesiredNonHTRateSet); - } - - //4 <4> Update information from BSS_DESC_T to current P_STA_RECORD_T - if (IS_AP_STA(prStaRec)) { - /* do not need to parse IE for DTIM, - * which have been parsed before inserting into BSS_DESC_T - */ - if (prBssDesc->ucDTIMPeriod) { - prStaRec->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - } - else { - prStaRec->ucDTIMPeriod = 0; // Means that TIM was not parsed. - } - } - - - //4 <5> Update default value - prStaRec->fgDiagnoseConnection = FALSE; - - - //4 <6> Update default value for other Modules - /* Determine fgIsWmmSupported and fgIsUapsdSupported in STA_REC */ - mqmProcessScanResult(prAdapter, prBssDesc, prStaRec); - - return prStaRec; - -} /* end of bssCreateStaRecFromBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ) -{ - P_WLAN_MAC_HEADER_T prNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prNullFrame = (P_WLAN_MAC_HEADER_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prNullFrame->u2FrameCtrl, u2FrameCtrl); - prNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prNullFrame->u2SeqCtrl = 0; - - return; - -} /* end of bssComposeNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the QoS Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* @param[in] ucUP User Priority. -* @param[in] fgSetEOSP Set the EOSP bit. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ) -{ - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - UINT_16 u2QosControl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_QOS_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send QoS Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the QoS Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2FrameCtrl, u2FrameCtrl); - prQoSNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prQoSNullFrame->u2SeqCtrl = 0; - - u2QosControl = (UINT_16)(ucUP & WMM_QC_UP_MASK); - - if (fgSetEOSP) { - u2QosControl |= WMM_QC_EOSP; - } - - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2QosCtrl, u2QosControl); - prQoSNullFrame->u2QosCtrl = u2QosControl; // NOTE(Kevin): Optimized for ARM - - return; - -} /* end of bssComposeQoSNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Succe]ss. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeNullFrame(prAdapter, - (PUINT_8)((UINT_32)prMsduInfo->prPacket + MAC_TX_RESERVED_FIELD), - prStaRec); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ BSS_DEFAULT_CONN_TEST_NULL_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendNullFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the QoS Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - FALSE); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_QOS_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_QOS_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ TXM_DEFAULT_DATA_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendQoSNullFrame() */ - - -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate Information Elements of Extended -* Support Rate -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - PUINT_8 pucBuffer; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucExtSupRatesLen = 0; - } - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ELEM_MAX_LEN_SUP_RATES], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of bssGenerateExtSuppRate_IE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Beacon -* or Probe Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ) -{ - PUINT_8 pucBuffer; - UINT_8 ucSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - /* Compose the frame body of the Probe Response frame. */ - //4 <1> Fill the SSID element. - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - SSID_IE(pucBuffer)->ucLength = prBssInfo->ucSSIDLen; - if (prBssInfo->ucSSIDLen) { - kalMemCopy(SSID_IE(pucBuffer)->aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - } - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - - //4 <2> Fill the Supported Rates element. - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - } - - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <3> Fill the DS Parameter Set element. - if (prBssInfo->eBand == BAND_2G4) { - DS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_DS_PARAM_SET; - DS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_DS_PARAMETER_SET; - DS_PARAM_IE(pucBuffer)->ucCurrChnl = prBssInfo->ucPrimaryChannel; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <4> IBSS Parameter Set element, ID: 6 - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - IBSS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_IBSS_PARAM_SET; - IBSS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_IBSS_PARAMETER_SET; - WLAN_SET_FIELD_16(&(IBSS_PARAM_IE(pucBuffer)->u2ATIMWindow), prBssInfo->u2ATIMWindow); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <5> TIM element, ID: 5 - if ((!pucDestAddr) && // For Beacon only. - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - -#if CFG_ENABLE_WIFI_DIRECT - /*no fgIsP2PRegistered protect*/ - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { -#if 0 - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_8 ucBitmapControl = 0; - UINT_32 u4N1, u4N2; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - // Clear existing value. - prP2pSpecificBssInfo->ucBitmapCtrl = 0; - kalMemZero(prP2pSpecificBssInfo->aucPartialVirtualBitmap, - sizeof(prP2pSpecificBssInfo->aucPartialVirtualBitmap)); - - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucDTIMCount = prBssInfo->ucDTIMCount; - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount == 0) { - //3 *** pmQueryBufferedBCAST(); - } - - //3 *** pmQueryBufferedPSNode(); - /* TODO(Kevin): Call PM Module here to loop all STA_RECORD_Ts and it - * will call bssSetTIMBitmap to toggle the Bitmap. - */ - - // Set Virtual Bitmap for UCAST - u4N1 = (prP2pSpecificBssInfo->u2SmallestAID >> 4) << 1; // Find the largest even number. - u4N2 = prP2pSpecificBssInfo->u2LargestAID >> 3; // Find the smallest number. - - ASSERT(u4N2 >= u4N1); - - kalMemCopy(TIM_IE(pucBuffer)->aucPartialVirtualMap, - &prP2pSpecificBssInfo->aucPartialVirtualBitmap[u4N1], - ((u4N2 - u4N1) + 1)); - - // Set Virtual Bitmap for BMCAST - // BMC bit only indicated when DTIM count == 0. - if (prBssInfo->ucDTIMCount == 0) { - ucBitmapControl = prP2pSpecificBssInfo->ucBitmapCtrl; - } - TIM_IE(pucBuffer)->ucBitmapControl = ucBitmapControl | (UINT_8)u4N1; - - TIM_IE(pucBuffer)->ucLength = ((u4N2 - u4N1) + 4); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); -#else - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -#endif - - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - /* NOTE(Kevin): 1. AIS - Didn't Support AP Mode. - * 2. BOW - Didn't Support BCAST and PS. - */ - } - - - - } - - return; -} /* end of bssBuildBeaconProbeRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Beacon/Probe Response frame header and -* its fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* @param[in] pucOwnMACAddress Given Our MAC Address. -* @param[in] pucBSSID Given BSSID of the BSS. -* @param[in] u2BeaconInterval Given Beacon Interval. -* @param[in] u2CapInfo Given Capability Info. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ) -{ - P_WLAN_BEACON_FRAME_T prBcnProbRspFrame; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - UINT_16 u2FrameCtrl; - - DEBUGFUNC("bssComposeBeaconProbeRespFrameHeaderAndFF"); - //DBGLOG(INIT, LOUD, ("\n")); - - - ASSERT(pucBuffer); - ASSERT(pucOwnMACAddress); - ASSERT(pucBSSID); - - prBcnProbRspFrame = (P_WLAN_BEACON_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Beacon /ProbeResp frame. - /* Fill the Frame Control field. */ - if (pucDestAddr) { - u2FrameCtrl = MAC_FRAME_PROBE_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_BEACON; - pucDestAddr = aucBCAddr; - } - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2FrameCtrl, u2FrameCtrl); - prBcnProbRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with BCAST MAC ADDR or TA of ProbeReq. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucDestAddr, pucDestAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucSrcAddr, pucOwnMACAddress); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucBSSID, pucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prBcnProbRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the Beacon /ProbeResp frame. - /* MAC will update TimeStamp field */ - - /* Fill the Beacon Interval field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2BeaconInterval, u2BeaconInterval); - prBcnProbRspFrame->u2BeaconInterval = u2BeaconInterval; // NOTE(Kevin): Optimized for ARM - - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2CapInfo, u2CapInfo); - prBcnProbRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of bssComposeBeaconProbeRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the Beacon Frame Template to FW for AIS AdHoc and P2P GO. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_WLAN_BEACON_FRAME_T prBcnFrame; - UINT_32 i; - - DEBUGFUNC("bssUpdateBeaconContent"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - //4 <1> Allocate a PKT_INFO_T for Beacon Frame - /* Allocate a MSDU_INFO_T */ - // For Beacon - prMsduInfo = prBssInfo->prBeacon; - - // beacon prMsduInfo will be NULLify once BSS deactivated, so skip if it is - if (prMsduInfo == NULL) { - return WLAN_STATUS_SUCCESS; - } - - //4 <2> Compose header - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - NULL, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - - - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - prMsduInfo->ucNetworkType = eNetTypeIndex; - - //4 <3> Compose the frame body's Common IEs of the Beacon frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, NULL); - - - //4 <4> Compose IEs in MSDU_INFO_T - - /* Append IE for Beacon */ - for (i = 0; i < sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txBcnIETable[i].pfnAppendIE) { - txBcnIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - eNetTypeIndex, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - -} /* end of bssUpdateBeaconContent() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Beacon Frame(for BOW) or Probe Response Frame according to the given -* Destination Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* @param[in] pucDestAddr Pointer to the Destination Address to reply -* @param[in] u4ControlFlags Control flags for information on Probe Response. -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedFixedIELen; - UINT_16 u2EstimatedExtraIELen; - P_APPEND_VAR_IE_ENTRY_T prIeArray = NULL; - UINT_32 u4IeArraySize = 0; - UINT_32 i; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - - if (!pucDestAddr) { // For Beacon - prIeArray = &txBcnIETable[0]; - u4IeArraySize = sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - else { - prIeArray = &txProbRspIETable[0]; - u4IeArraySize = sizeof(txProbRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - - - //4 <1> Allocate a PKT_INFO_T for Beacon /Probe Response Frame - /* Allocate a MSDU_INFO_T */ - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Fields */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_IBSS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + (3 + MAX_LEN_TIM_PARTIAL_BMP)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < u4IeArraySize; i++) { - u2EstimatedFixedIELen = prIeArray[i].u2EstimatedFixedIELen; - - if (u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += u2EstimatedFixedIELen; - } - else { - ASSERT(prIeArray[i].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16) - prIeArray[i].pfnCalculateVariableIELen(prAdapter, eNetTypeIndex, NULL); - } - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending %s.\n", - ((!pucDestAddr)?"Beacon":"Probe Response"))); - return WLAN_STATUS_RESOURCES; - } - - - //4 <2> Compose Beacon/Probe Response frame header and fixed fields in MSDU_INfO_T. - /* Compose Header and Fixed Field */ -#if CFG_ENABLE_WIFI_DIRECT - if (u4ControlFlags & BSS_PROBE_RESP_USE_P2P_DEV_ADDR) { - if(prAdapter->fgIsP2PRegistered) { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prAdapter->rWifiVar.aucDeviceAddress, - prAdapter->rWifiVar.aucDeviceAddress, - DOT11_BEACON_PERIOD_DEFAULT, - (prBssInfo->u2CapInfo & ~(CAP_INFO_ESS | CAP_INFO_IBSS))); - } - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - } - - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - - //4 <4> Compose the frame body's Common IEs of the Beacon/ProbeResp frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, pucDestAddr); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < u4IeArraySize; i++) { - if (prIeArray[i].pfnAppendIE) { - prIeArray[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Beacon /Probe Response frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendBeaconProbeResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - UINT_8 aucBCBSSID[] = BC_BSSID; - BOOLEAN fgIsBcBssid; - BOOLEAN fgReplyProbeResp; - UINT_32 u4CtrlFlagsForProbeResp = 0; - ENUM_BAND_T eBand; - UINT_8 ucHwChannelNum; - - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get BSSID - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - if (EQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID)) { - fgIsBcBssid = TRUE; - } - else { - fgIsBcBssid = FALSE; - } - - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if ((!fgIsBcBssid) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - continue; - } - - eBand = HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr); - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - - if(prBssInfo->eBand != eBand) { - continue; - } - - if(prBssInfo->ucPrimaryChannel != ucHwChannelNum) { - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - -#if CFG_SUPPORT_ADHOC - fgReplyProbeResp = aisValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); -#endif - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex)) { - - fgReplyProbeResp = p2pFuncValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - fgReplyProbeResp = bowValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif - - if (fgReplyProbeResp) { - if(nicTxGetFreeCmdCount(prAdapter) > (CFG_TX_MAX_CMD_PKT_NUM/2) ){ - /* Resource margin is enough */ - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr, u4CtrlFlagsForProbeResp); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ - - -#if 0 // NOTE(Kevin): condition check should move to P2P_FSM.c -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_8 aucBCBSSID[] = BC_BSSID; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - BOOLEAN fgReplyProbeResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgP2PTargetDeviceFound; - UINT_8 aucP2PWildcardSSID[] = P2P_WILDCARD_SSID; -#endif - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get SSID IE ptr - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - prIeSsid = (P_IE_SSID_T)NULL; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - // if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SUP_RATES) { - if (IE_LEN(pucIE) <= RATE_NUM) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - -#if CFG_ENABLE_WIFI_DIRECT - // TODO: P2P IE & WCS IE parsing for P2P. - case ELEM_ID_P2P: - - break; -#endif - - /* no default */ - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (UNEQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - /* BSSID not Wildcard BSSID. */ - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - /* TODO(Kevin): Check if we are IBSS Master. */ - if (TRUE) { - - if (prIeSsid) { - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } - } - } -#if CFG_ENABLE_WIFI_DIRECT - else if (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex) { - - // TODO(Kevin): Move following lines to p2p_fsm.c - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || - (EQUAL_SSID(aucP2PWildcardSSID, - P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, - prIeSsid->ucLength)))) { -// if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prMgtHdr->aucSrcAddr, pucIE, u2IELength)) { - if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prSwRfb)) { - /* Extand channel request time & cancel scan request. */ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - // TODO: RX probe request may not caused by LISTEN state. - // TODO: It can be GO. - /* Generally speaking, cancel a non-exist scan request is fine. - * We can check P2P FSM here for only LISTEN state. - */ - - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - ASSERT(0); // Can't abort SCN FSM - continue; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prP2pFsmInfo->ucSeqNumOfScnMsg; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->fgIsChannelExt = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - /* 1. Probe Request without SSID. - * 2. Probe Request with SSID not Wildcard SSID & not P2P Wildcard SSID. - */ - continue; - } - -#if 0 // Frog - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_LISTEN) { - // P2P 2.4.1 - P2P Devices shall not respond to Probe Request frames which only contain 11b rates only. - if (prIeSupportedRate || prIeExtSupportedRate) { - UINT_16 u2OperationalRateSet, u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if (u2OperationalRateSet & ~RATE_SET_HR_DSSS) { - continue; - } - } - } - - // TODO: Check channel time before first check point to: - /* If Target device is selected: - * 1. Send XXXX request frame. - * else - * 1. Send Probe Response frame. - */ - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): During PROVISION state, can we reply Probe Response ? */ - - /* TODO(Kevin): - * If we are GO, accept legacy client --> accept Wildcard SSID - * If we are in Listen State, accept only P2P Device --> check P2P IE and WPS IE - */ - if (TRUE /* We are GO */) { - if (prIeSsid) { - UINT_8 aucSSID[]=P2P_WILDCARD_SSID; - - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength) || - EQUAL_SSID(aucSSID, P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } -// else if (FALSE /* We are in Listen State */) { -// } - - /* TODO(Kevin): Check P2P IE and WPS IE */ - } -#endif - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): TBD */ - } - } -#endif - else { - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - } - - if (fgReplyProbeResp) { - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr); - } - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to clear the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prPeerStaRec; - - LINK_FOR_EACH_ENTRY(prPeerStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - cnmStaRecChangeState(prAdapter, prPeerStaRec, STA_STATE_1); - } - - LINK_INITIALIZE(prStaRecOfClientList); - } - - return; -} /* end of bssClearClientList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Add a STA_RECORD_T to the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - DBGLOG(BSS, WARN, ("Current Client List already contains that STA_RECORD_T["MACSTR"]\n", - MAC2STR(prStaRec->aucMacAddr))); - return; - } - } - } - - LINK_INSERT_TAIL(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; -} /* end of bssAddStaRecToClientList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Remove a STA_RECORD_T from the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - -#if 0 - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; - } - } - } -#endif - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prStaRec->rLinkEntry); - return; - } - } - } - - - DBGLOG(BSS, INFO, ("Current Client List didn't contain that STA_RECORD_T["MACSTR"] before removing.\n", - MAC2STR(prStaRec->aucMacAddr))); - - return; -} /* end of bssRemoveStaRecFromClientList() */ -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to process Beacons from current Ad-Hoc network peers. -* We also process Beacons from other Ad-Hoc network during SCAN. If it has -* the same SSID and we'll decide to merge into it if it has a larger TSF. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ) -{ - P_STA_RECORD_T prStaRec = NULL; - - BOOLEAN fgIsCheckCapability = FALSE; - BOOLEAN fgIsCheckTSF = FALSE; - BOOLEAN fgIsGoingMerging = FALSE; - BOOLEAN fgIsSameBSSID; - - - ASSERT(prBssInfo); - ASSERT(prBssDesc); - - //4 <1> Process IBSS Beacon only after we create or merge with other IBSS. - if (!prBssInfo->fgIsBeaconActivated) { - return; - } - - //4 <2> Get the STA_RECORD_T of TA. - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prBssDesc->aucSrcAddr); - - fgIsSameBSSID = UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID) ? FALSE : TRUE; - - - //4 <3> IBSS Merge Decision Flow for Processing Beacon. - if (fgIsSameBSSID) { - - /* Same BSSID: - * Case I. This is a new TA and it has decide to merged with us. - * a) If fgIsMerging == FALSE - we will send msg to notify AIS. - * b) If fgIsMerging == TRUE - already notify AIS. - * Case II. This is an old TA and we've already merged together. - */ - if (!prStaRec) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - - } - else { - - ASSERT((prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) && - IS_ADHOC_STA(prStaRec)); - - if (prStaRec->ucStaState != STA_STATE_3) { - - if (!prStaRec->fgIsMerging) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - - } - } - else { - - /* Unequal BSSID: - * Case III. This is a new TA and we need to compare the TSF and get the winner. - * Case IV. This is an old TA and it merge into a new IBSS before we do the same thing. - * We need to compare the TSF to get the winner. - * Case V. This is an old TA and it restart a new IBSS. We also need to - * compare the TSF to get the winner. - */ - - /* For Case III, IV & V - We'll always check this new IBSS's capability first - * before merging into new IBSS. - */ - fgIsCheckCapability = TRUE; - - /* If check is passed, we need to perform TSF check to decide the major BSSID */ - fgIsCheckTSF = TRUE; - - /* For Case IV & V - We won't update rExpirationTime of Sta Record */ - } - - - //4 <7> Check this BSS_DESC_T's capability. - if (fgIsCheckCapability) { - BOOLEAN fgIsCapabilityMatched = FALSE; - - do { - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unsupported Phy.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unknown Basic Rate.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - fgIsCapabilityMatched = TRUE; - } - while (FALSE); - - if (!fgIsCapabilityMatched) { - - if (prStaRec) { - /* For Case II - We merge this STA_RECORD in RX Path. - * Case IV & V - They change their BSSID after we merge with them. - */ - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - return; - } - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Peer MAC: "MACSTR" - Check capability was passed.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - - if (fgIsCheckTSF) { -#if CFG_SLT_SUPPORT - fgIsGoingMerging = TRUE; -#else - if (prBssDesc->fgIsLargerTSF) { - fgIsGoingMerging = TRUE; - } - else { - return; - } -#endif - } - - - if (fgIsGoingMerging) { - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = TRUE; - prBssDesc->fgIsConnected = FALSE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - if(!prStaRec) { - // no memory ? - return; - } - - prStaRec->fgIsMerging = TRUE; - - /* update RCPI */ - prStaRec->ucRCPI = ucRCPI; - - //4 <3> Send Merge Msg to CNM to obtain the channel privilege. - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_IBSS_PEER_FOUND_T)); - - if (!prAisIbssPeerFoundMsg) { - - ASSERT(0); // Can't send Merge Msg - return; - } - - prAisIbssPeerFoundMsg->rMsgHdr.eMsgId = MID_SCN_AIS_FOUND_IBSS; - prAisIbssPeerFoundMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - prAisIbssPeerFoundMsg->prStaRec = prStaRec; - - /* Inform AIS to do STATE TRANSITION - * For Case I - If AIS in IBSS_ALONE, let it jump to NORMAL_TR after we know the new member. - * For Case III, IV - Now this new BSSID wins the TSF, follow it. - */ - if (fgIsSameBSSID) { - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; - } - else { -#if CFG_SLT_SUPPORT - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; -#else - prAisIbssPeerFoundMsg->fgIsMergeIn = (prBssDesc->fgIsLargerTSF) ? FALSE: TRUE; -#endif - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisIbssPeerFoundMsg, - MSG_SEND_METHOD_BUF); - - } - - return; -} /* end of ibssProcessMatchedBeacon() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the Capability for Ad-Hoc to decide if we are -* able to merge with(same capability). -* -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @retval WLAN_STATUS_FAILURE Can't pass the check of Capability. -* @retval WLAN_STATUS_SUCCESS Pass the check of Capability. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - - - ASSERT(prBssDesc); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - //4 <1> Check the BSS Basic Rate Set for current AdHoc Mode - if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11B) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_HR_DSSS)) { - break; - } - else if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11A) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_OFDM)) { - break; - } - - //4 <2> Check the Short Slot Time. -#if 0 // Do not check ShortSlotTime until Wi-Fi define such policy - if (prConnSettings->eAdHocMode == AD_HOC_MODE_11G) { - if (((prConnSettings->fgIsShortSlotTimeOptionEnable) && - !(prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) || - (!(prConnSettings->fgIsShortSlotTimeOptionEnable) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME))) { - break; - } - } -#endif - - //4 <3> Check the ATIM window setting. - if (prBssDesc->u2ATIMWindow) { - DBGLOG(BSS, INFO, ("AdHoc PS was not supported(ATIM Window: %d)\n", - prBssDesc->u2ATIMWindow)); - break; - } - -#if CFG_RSN_MIGRATION - //4 <4> Check the Security setting. - if (!rsnPerformPolicySelection(prAdapter, prBssDesc)) { - break; - } -#endif - - rStatus = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - return rStatus; - -} /* end of ibssCheckCapabilityForAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for IBSS Mode. -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLowestBasicRateIndex; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - PUINT_16 pu2BSSID = (PUINT_16)&aucBSSID[0]; - UINT_32 i; - - - ASSERT(prBssInfo); - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_IBSS); - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - - //4 <2> Setup BSSID - if (!prBssInfo->fgHoldSameBssidForIBSS) { - - for (i = 0; i < sizeof(aucBSSID)/sizeof(UINT_16); i++) { - pu2BSSID[i] = (UINT_16)(kalRandomNumber() & 0xFFFF); - } - - aucBSSID[0] &= ~0x01; // 7.1.3.3.3 - The individual/group bit of the address is set to 0. - aucBSSID[0] |= 0x02; // 7.1.3.3.3 - The universal/local bit of the address is set to 1. - - COPY_MAC_ADDR(prBssInfo->aucBSSID, aucBSSID); - } - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_IBSS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - return; -} /* end of ibssInitForAdHoc() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -#if CFG_SUPPORT_AAA - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for AP Mode. -* -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ) -{ - UINT_8 ucLowestBasicRateIndex; - - P_AC_QUE_PARMS_T prACQueParms; - - ENUM_WMM_ACI_T eAci; - - UINT_8 auCWminLog2ForBcast[WMM_AC_INDEX_NUM] = { 4/*BE*/, 4 /*BK*/, 3/*VO*/, 2/*VI*/}; - UINT_8 auCWmaxLog2ForBcast[WMM_AC_INDEX_NUM] = { 10, 10, 4, 3}; - UINT_8 auAifsForBcast[WMM_AC_INDEX_NUM] = { 3, 7, 2, 2 }; - UINT_8 auTxopForBcast[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - UINT_8 auCWminLog2[WMM_AC_INDEX_NUM] = { 4 /*BE*/, 4 /*BK*/, 3 /*VO*/, 2 /*VI*/}; - UINT_8 auCWmaxLog2[WMM_AC_INDEX_NUM] = { 7, 10, 4, 3}; - UINT_8 auAifs[WMM_AC_INDEX_NUM] = { 3, 7, 1, 1 }; - UINT_8 auTxop[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - DEBUGFUNC("bssInitForAP"); - DBGLOG(BSS, LOUD,("\n")); - - ASSERT(prBssInfo); - ASSERT((prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || (prBssInfo->eCurrentOPMode == OP_MODE_BOW)); - -#if 0 - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = CONFIG_BW_20M; -#endif - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (fgIsRateUpdate) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <2> Setup BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssInfo->aucOwnMacAddr); - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - prBssInfo->fgUseShortSlotTime = TRUE; - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_ESS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - - //4 <7> Fill the EDCA - - prACQueParms = prBssInfo->arACQueParmsForBcast; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifsForBcast[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxopForBcast[eAci]; - - prBssInfo->aucCWminLog2ForBcast[eAci] = auCWminLog2ForBcast[eAci] ; /* used to send WMM IE */ - prBssInfo->aucCWmaxLog2ForBcast[eAci] = auCWmaxLog2ForBcast[eAci] ; - - DBGLOG(BSS, INFO, ("Bcast: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - - } - - prACQueParms = prBssInfo->arACQueParms; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifs[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxop[eAci]; - - DBGLOG(BSS, INFO, ("eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - } - - /* Note: Caller should update the EDCA setting to HW by nicQmUpdateWmmParms() it there is no AIS network */ - /* Note: In E2, only 4 HW queues. The the Edca parameters should be folow by AIS network */ - /* Note: In E3, 8 HW queues. the Wmm parameters should be updated to right queues according to BSS */ - - - return; -} /* end of bssInitForAP() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update DTIM Count -* -* @param[in] eNetTypeIndex Specify which network to update -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount > 0) { - prBssInfo->ucDTIMCount--; - } - else { - - ASSERT(prBssInfo->ucDTIMPeriod > 0); - - prBssInfo->ucDTIMCount = prBssInfo->ucDTIMPeriod - 1; - } - } - - return; -} /* end of bssUpdateDTIMIE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to set the Virtual Bitmap in TIM Information Elements -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] u2AssocId The association id to set in Virtual Bitmap. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ) -{ - - ASSERT(prBssInfo); - - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - /* Use Association ID == 0 for BMCAST indication */ - if (u2AssocId == 0) { - - prP2pSpecificBssInfo->ucBitmapCtrl |= (UINT_8)BIT(0); - } - else { - PUINT_8 pucPartialVirtualBitmap; - UINT_8 ucBitmapToSet; - - - pucPartialVirtualBitmap = &prP2pSpecificBssInfo->aucPartialVirtualBitmap[(u2AssocId >> 3)]; // (u2AssocId / 8) - ucBitmapToSet = (UINT_8) BIT((u2AssocId % 8)); - - if (*pucPartialVirtualBitmap & ucBitmapToSet) { - /* The virtual bitmap has been set */ - return; - } - - *pucPartialVirtualBitmap |= ucBitmapToSet; - - // Update u2SmallestAID and u2LargestAID - if ((u2AssocId < prP2pSpecificBssInfo->u2SmallestAID) || - (prP2pSpecificBssInfo->u2SmallestAID == 0)) { - prP2pSpecificBssInfo->u2SmallestAID = u2AssocId; - } - - if ((u2AssocId > prP2pSpecificBssInfo->u2LargestAID) || - (prP2pSpecificBssInfo->u2LargestAID == 0)) { - prP2pSpecificBssInfo->u2LargestAID = u2AssocId; - } - } - } - - return; -} /* end of bssSetTIMBitmap() */ -#endif - -#endif /* CFG_SUPPORT_AAA */ - - -VOID -bssCreateStaRecFromAuth ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - -VOID -bssUpdateStaRecFromAssocReq ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm.c deleted file mode 100755 index 1af871d96310..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm.c +++ /dev/null @@ -1,775 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm.c#2 $ -*/ - -/*! \file "cnm.c" - \brief Module of Concurrent Network Management - - Module of Concurrent Network Management -*/ - - - -/* -** $Log: cnm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Fix possible wrong message when P2P is unregistered - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 01 2011 cm.chang - * [WCXRP00001077] [All Wi-Fi][Driver] Fix wrong preferred channel for AP and BOW - * Only check AIS channel for P2P and BOW - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Extension channel of some 5G AP will not follow regulation requirement - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 01 2011 cm.chang - * [WCXRP00000937] [MT6620 Wi-Fi][Driver][FW] cnm.c line #848 assert when doing monkey test - * Print message only in Linux platform for monkey testing - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Check if P2P network index is Tethering AP - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 02 17 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * When P2P registried, invoke BOW deactivate function - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix wrong message ID for channel grant to requester - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set 20/40M bandwidth of AP HT OP before association process - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 21 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support TCP/UDP/IP Checksum offload feature - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 04 27 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * BMC mac address shall be ignored in basic config command - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support change of MAC address by host command - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix bug for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove conditional compiling FPGA_V5 - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before handle the message from other module, it need to obtain -* the Channel privilege from Channel Manager -* -* @param[in] prMsgHdr The message need to be handled. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_REQ_T prMsgChReq; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChReq = (P_MSG_CH_REQ_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChReq: fail to get buf (net=%d, token=%d)\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(CNM, INFO, ("ChReq net=%d token=%d b=%d c=%d s=%d\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID, - prMsgChReq->eRfBand, prMsgChReq->ucPrimaryChannel, - prMsgChReq->eRfSco)); - - prCmdBody->ucNetTypeIndex = prMsgChReq->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChReq->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_REQ; /* Request */ - prCmdBody->ucPrimaryChannel = prMsgChReq->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prMsgChReq->eRfSco; - prCmdBody->ucRfBand = (UINT_8) prMsgChReq->eRfBand; - prCmdBody->ucReqType = (UINT_8) prMsgChReq->eReqType; - prCmdBody->ucReserved = 0; - prCmdBody->u4MaxInterval= prMsgChReq->u4MaxInterval; - COPY_MAC_ADDR(prCmdBody->aucBSSID, prMsgChReq->aucBSSID); - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChReq with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrRequestPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before deliver the message to other module, it need to release -* the Channel privilege to Channel Manager. -* -* @param[in] prMsgHdr The message need to be delivered -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_ABORT_T prMsgChAbort; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChAbort = (P_MSG_CH_ABORT_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChAbort: fail to get buf (net=%d, token=%d)\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(CNM, INFO, ("ChAbort net=%d token=%d\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); - - prCmdBody->ucNetTypeIndex = prMsgChAbort->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChAbort->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_ABORT; /* Abort */ - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChAbort with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrAbortPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_CH_PRIVILEGE_T prEventBody; - P_MSG_CH_GRANT_T prChResp; - - ASSERT(prAdapter); - ASSERT(prEvent); - - prEventBody = (P_EVENT_CH_PRIVILEGE_T) (prEvent->aucBuffer); - prChResp = (P_MSG_CH_GRANT_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_GRANT_T)); - ASSERT(prChResp); - - /* To do: exception handle */ - if (!prChResp) { - DBGLOG(CNM, ERROR, ("ChGrant: fail to get buf (net=%d, token=%d)\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID)); - - return; - } - - DBGLOG(CNM, INFO, ("ChGrant net=%d token=%d ch=%d sco=%d\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID, - prEventBody->ucPrimaryChannel, prEventBody->ucRfSco)); - - ASSERT(prEventBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventBody->ucStatus == EVENT_CH_STATUS_GRANT); - - /* Decide message ID based on network and response status */ - if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_AIS_CH_GRANT; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (prEventBody->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - prChResp->rMsgHdr.eMsgId = MID_CNM_P2P_CH_GRANT; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_BOW_CH_GRANT; - } -#endif - else { - cnmMemFree(prAdapter, prChResp); - return; - } - - prChResp->ucNetTypeIndex = prEventBody->ucNetTypeIndex; - prChResp->ucTokenID = prEventBody->ucTokenID; - prChResp->ucPrimaryChannel = prEventBody->ucPrimaryChannel; - prChResp->eRfSco = (ENUM_CHNL_EXT_T) prEventBody->ucRfSco; - prChResp->eRfBand = (ENUM_BAND_T) prEventBody->ucRfBand; - prChResp->eReqType = (ENUM_CH_REQ_TYPE_T) prEventBody->ucReqType; - prChResp->u4GrantInterval = prEventBody->u4GrantInterval; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prChResp, - MSG_SEND_METHOD_BUF); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked for P2P or BOW networks -* -* @param (none) -* -* @return TRUE: suggest to adopt the returned preferred channel -* FALSE: No suggestion. Caller should adopt its preference -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prBand); - ASSERT(pucPrimaryChannel); - ASSERT(prBssSCO); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - *prBssSCO = prBssInfo->eBssSCO; - - return TRUE; - } - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: available channel is limited to return value -* FALSE: no limited -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ) -{ -#if CFG_ENABLE_WIFI_DIRECT ||(CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL) - P_BSS_INFO_T prBssInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - ASSERT(prAdapter->fgIsP2PRegistered); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - P_BSS_INFO_T prAisBssInfo, prBowBssInfo; - - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prBowBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - if (RLM_NET_PARAM_VALID(prAisBssInfo) && RLM_NET_PARAM_VALID(prBowBssInfo)){ - if (prAisBssInfo->eBand != prBowBssInfo->eBand || - prAisBssInfo->ucPrimaryChannel != prBowBssInfo->ucPrimaryChannel) { - - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 i; - - /* Note: To support real-time decision instead of current activated-time, - * the STA roaming case shall be considered about synchronization - * problem. Another variable fgAssoc40mBwAllowed is added to - * represent HT capability when association - */ - for (i = 0; i < NETWORK_TYPE_INDEX_NUM; i++) { - if (i != (UINT_8) eNetTypeIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[i]; - - if (IS_BSS_ACTIVE(prBssInfo) && (prBssInfo->fg40mBwAllowed || - prBssInfo->fgAssoc40mBwAllowed)) { - return FALSE; - } - } - } - - return TRUE; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm_mem.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm_mem.c deleted file mode 100755 index 483663362982..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm_mem.c +++ /dev/null @@ -1,1298 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm_mem.c#2 $ -*/ - -/*! \file "cnm_mem.c" - \brief This file contain the management function of packet buffers and - generic memory alloc/free functioin for mailbox message. - - A data packet has a fixed size of buffer, but a management - packet can be equipped with a variable size of buffer. -*/ - - - -/* -** $Log: cnm_mem.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * initialize fgNeedResp. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 05 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix correct structure size in cnmStaSendDeactivateCmd() - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * spin lock target revised - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change inner loop index from i to k. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Notify MQM, TXM, and RXM upon disconnection . - * - * 04 26 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Call mqm, txm, rxm functions upon disconnection - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * * * and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * * Added per-TID SN cache in STA_REC - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 03 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Initialize StaRec->arStaWaitQueue - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add debug message when no available pkt buffer - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Fixed STA_REC initialization bug: prStaRec->au2CachedSeqCtrl[k] - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * * * * * * * * * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * * * * * * * * * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * MQM: BA handling - * * * * * * * TXM: Macros updates - * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * Dec 9 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed DBGPRINT - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix warning of null pointer - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and add fgIsInUse flag in STA_RECORD_T - * - * Nov 23 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Assign ucBufferSource in function cnmMgtPktAlloc() - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added packet redispatch function calls - * - * Nov 13 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * enable packet re-usable in current emulation driver - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * 1. Add new function cnmGetStaRecByIndex() - * 2. Rename STA_REC_T to STA_RECORD_T - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call cnmDataPktDispatch() in cnmPktFree() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove definition of pragma section code - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Oct 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ); - -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ); - -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -cnmMgtPktAlloc ( - P_ADAPTER_T prAdapter, - UINT_32 u4Length - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - /* Get a free MSDU_INFO_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(prQueList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if (prMsduInfo) { - prMsduInfo->prPacket = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - prMsduInfo->eSrc = TX_PACKET_MGMT; - - if (prMsduInfo->prPacket == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = NULL; - } - } - -#if DBG - if (prMsduInfo == NULL) { - DBGLOG(MEM, WARN, ("\n")); - DBGLOG(MEM, WARN, ("MgtDesc#=%ld\n", prQueList->u4NumElem)); - -#if CFG_DBG_MGT_BUF - DBGLOG(MEM, WARN, ("rMgtBufInfo: alloc#=%ld, free#=%ld, null#=%ld\n", - prAdapter->rMgtBufInfo.u4AllocCount, - prAdapter->rMgtBufInfo.u4FreeCount, - prAdapter->rMgtBufInfo.u4AllocNullCount)); -#endif - - DBGLOG(MEM, WARN, ("\n")); - } -#endif - - return prMsduInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMgtPktFree ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - ASSERT(prMsduInfo->prPacket); - if (prMsduInfo->prPacket) { - cnmMemFree(prAdapter, prMsduInfo->prPacket); - prMsduInfo->prPacket = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry) - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to initial the MGMT/MSG memory pool. -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BUF_INFO_T prBufInfo; - - /* Initialize Management buffer pool */ - prBufInfo = &prAdapter->rMgtBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMgtBufInfo)); - prBufInfo->pucBuf = prAdapter->pucMgtBufCached; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - - /* Initialize Message buffer pool */ - prBufInfo = &prAdapter->rMsgBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMsgBufInfo)); - prBufInfo->pucBuf = &prAdapter->aucMsgBuf[0]; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - return; - -} /* end of cnmMemInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate MGMT/MSG memory pool. -* -* \param[in] eRamType Target RAM type. -* TCM blk_sz= 16bytes, BUF blk_sz= 256bytes -* \param[in] u4Length Length of the buffer to allocate. -* -* \retval !NULL Pointer to the start address of allocated memory. -* \retval NULL Fail to allocat memory -*/ -/*----------------------------------------------------------------------------*/ -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ) -{ - P_BUF_INFO_T prBufInfo; - BUF_BITMAP rRequiredBitmap; - UINT_32 u4BlockNum; - UINT_32 i, u4BlkSzInPower; - PVOID pvMemory; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(u4Length); - - if (eRamType == RAM_TYPE_MSG && u4Length <= 256) { - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlkSzInPower = MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MSG_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - else { - eRamType = RAM_TYPE_BUF; - - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlkSzInPower = MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MGT_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocCount++; -#endif - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - if ((u4BlockNum > 0) && (u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS)) { - - /* Convert number of block into bit cluster */ - rRequiredBitmap = BITS(0, u4BlockNum-1); - - for (i = 0; i <= (MAX_NUM_OF_BUF_BLOCKS - u4BlockNum); i++) { - - /* Have available memory blocks */ - if ((prBufInfo->rFreeBlocksBitmap & rRequiredBitmap) - == rRequiredBitmap) { - - /* Clear corresponding bits of allocated memory blocks */ - prBufInfo->rFreeBlocksBitmap &= ~rRequiredBitmap; - - /* Store how many blocks be allocated */ - prBufInfo->aucAllocatedBlockNum[i] = (UINT_8) u4BlockNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? - SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - /* Return the start address of allocated memory */ - return (PVOID)(prBufInfo->pucBuf + (i << u4BlkSzInPower)); - - } - - rRequiredBitmap <<= 1; - } - } - -#ifdef LINUX - pvMemory = (PVOID)kalMemAlloc(u4Length, VIR_MEM_TYPE); -#else - pvMemory = (PVOID)NULL; -#endif - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocNullCount++; - - if (pvMemory) { - prAdapter->u4MemAllocDynamicCount++; - } -#endif - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return pvMemory; - -} /* end of cnmMemAlloc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release memory to MGT/MSG memory pool. -* -* \param pucMemory Start address of previous allocated memory -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ) -{ - P_BUF_INFO_T prBufInfo; - UINT_32 u4BlockIndex; - BUF_BITMAP rAllocatedBlocksBitmap; - ENUM_RAM_TYPE_T eRamType; - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(pvMemory); - if (!pvMemory) { - return; - } - - /* Judge it belongs to which RAM type */ - if ( ((UINT_32)pvMemory >= (UINT_32)&prAdapter->aucMsgBuf[0]) && - ((UINT_32)pvMemory <= (UINT_32)&prAdapter->aucMsgBuf[MSG_BUFFER_SIZE-1])) { - - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_MSG; - } - else if ( ((UINT_32)pvMemory >= (UINT_32)prAdapter->pucMgtBufCached) && - ((UINT_32)pvMemory <= ((UINT_32)prAdapter->pucMgtBufCached + MGT_BUFFER_SIZE -1))) { - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_BUF; - } - else { - #ifdef LINUX - /* For Linux, it is supported because size is not needed */ - kalMemFree(pvMemory, VIR_MEM_TYPE, 0); - #else - /* For Windows, it is not supported because of no size argument */ - ASSERT(0); - #endif - - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount++; - #endif - return; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#if CFG_DBG_MGT_BUF - prBufInfo->u4FreeCount++; -#endif - - /* Convert number of block into bit cluster */ - ASSERT(prBufInfo->aucAllocatedBlockNum[u4BlockIndex] > 0); - - rAllocatedBlocksBitmap = - BITS(0, prBufInfo->aucAllocatedBlockNum[u4BlockIndex] - 1); - rAllocatedBlocksBitmap <<= u4BlockIndex; - - /* Clear saved block count for this memory segment */ - prBufInfo->aucAllocatedBlockNum[u4BlockIndex] = 0; - - /* Set corresponding bit of released memory block */ - prBufInfo->rFreeBlocksBitmap |= rAllocatedBlocksBitmap; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return; - -} /* end of cnmMemFree() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecInit ( - P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - prStaRec->ucIndex = (UINT_8) i; - prStaRec->fgIsInUse = FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmStaRecAlloc ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i, k; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (!prStaRec->fgIsInUse) { - /*---- Initialize STA_REC_T here ----*/ - kalMemZero(prStaRec, sizeof(STA_RECORD_T)); - prStaRec->ucIndex = (UINT_8) i; - prStaRec->ucNetTypeIndex = ucNetTypeIndex; - prStaRec->fgIsInUse = TRUE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - /* Initialize the SN caches for duplicate detection */ - for (k = 0; k < TID_NUM + 1; k++) { - prStaRec->au2CachedSeqCtrl[k] = 0xFFFF; - } - - /* Initialize SW TX queues in STA_REC */ - for (k = 0; k < STA_WAIT_QUEUE_NUM; k++) { - LINK_INITIALIZE(&prStaRec->arStaWaitQueue[k]); - } - - /* Default enable TX/RX AMPDU */ - prStaRec->fgTxAmpduEn = TRUE; - prStaRec->fgRxAmpduEn = TRUE; - - #if CFG_ENABLE_PER_STA_STATISTICS && CFG_ENABLE_PKT_LIFETIME_PROFILE - prStaRec->u4TotalTxPktsNumber = 0; - prStaRec->u4TotalTxPktsTime = 0; - prStaRec->u4MaxTxPktsTime = 0; - #endif - - for (k = 0; k < NUM_OF_PER_STA_TX_QUEUES; k++) { - QUEUE_INITIALIZE(&prStaRec->arTxQueue[k]); - } - - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecFree ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgSyncToChip - ) -{ - ASSERT(prAdapter); - ASSERT(prStaRec); - - /* To do: free related resources, e.g. timers, buffers, etc */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - prStaRec->fgTransmitKeyExist = FALSE; - prStaRec->fgSetPwrMgtBit = FALSE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - - if (fgSyncToChip) { - cnmStaSendRemoveCmd(prAdapter, prStaRec); - } - - prStaRec->fgIsInUse = FALSE; - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = (P_STA_RECORD_T) &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == (UINT_8) eNetTypeIndex) { - - cnmStaRecFree(prAdapter, prStaRec, fgSyncToChip); - } - } /* end of for loop */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByIndex ( - P_ADAPTER_T prAdapter, - UINT_8 ucIndex - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prStaRec = (ucIndex < CFG_STA_REC_NUM) ? - &prAdapter->arStaRec[ucIndex] : NULL; - - if (prStaRec && prStaRec->fgIsInUse == FALSE) { - prStaRec = NULL; - } - - return prStaRec; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get STA_RECORD_T by Peer MAC Address(Usually TA). -* -* @param[in] pucPeerMacAddr Given Peer MAC Address. -* -* @retval Pointer to STA_RECORD_T, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByAddress ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - PUINT_8 pucPeerMacAddr - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(pucPeerMacAddr); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == ucNetTypeIndex && - EQUAL_MAC_ADDR(prStaRec->aucMacAddr, pucPeerMacAddr)) { - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Reset the Status and Reason Code Field to 0 of all Station Records for -* the specified Network Type -* -* @param[in] eNetType Specify Network Type -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecResetStatus ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - cnmStaFreeAllStaByNetType(prAdapter, eNetTypeIndex, FALSE); - -#if 0 - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - if ((NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) && - IS_STA_IN_AIS(prStaRec->eStaType)) { - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - } - - /* TODO(Kevin): For P2P and BOW */ - } - } - - return; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will change the ucStaState of STA_RECORD_T and also do -* event indication to HOST to sync the STA_RECORD_T in driver. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u4NewState New STATE to change. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecChangeState ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - UINT_8 ucNewState - ) -{ - BOOLEAN fgNeedResp; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* Do nothing when following state transitions happen, - * other 6 conditions should be sync to FW, including 1-->1, 3-->3 - */ - if ((ucNewState == STA_STATE_2 && prStaRec->ucStaState != STA_STATE_3) || - (ucNewState == STA_STATE_1 && prStaRec->ucStaState == STA_STATE_2)) { - prStaRec->ucStaState = ucNewState; - return; - } - - fgNeedResp = FALSE; - if (ucNewState == STA_STATE_3) { - secFsmEventStart(prAdapter, prStaRec); - if (ucNewState != prStaRec->ucStaState) { - fgNeedResp = TRUE; - } - } - else { - if (ucNewState != prStaRec->ucStaState && - prStaRec->ucStaState == STA_STATE_3) { - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - } - fgNeedResp = FALSE; - } - prStaRec->ucStaState = ucNewState; - - cnmStaSendUpdateCmd(prAdapter, prStaRec, fgNeedResp); - -#if CFG_ENABLE_WIFI_DIRECT - /* To do: Confirm if it is invoked here or other location, but it should - * be invoked after state sync of STA_REC - * Update system operation parameters for AP mode - */ - if (prAdapter->fgIsP2PRegistered && (IS_STA_IN_P2P(prStaRec))) { - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - } - } -#endif - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ) -{ - P_EVENT_ACTIVATE_STA_REC_T prEventContent; - P_STA_RECORD_T prStaRec; - - prEventContent = (P_EVENT_ACTIVATE_STA_REC_T) pucEventBuf; - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventContent->ucStaRecIdx); - - if (prStaRec && prStaRec->ucStaState == STA_STATE_3 && - !kalMemCmp(&prStaRec->aucMacAddr[0], &prEventContent->aucMacAddr[0], - MAC_ADDR_LEN)) { - - qmActivateStaRec(prAdapter, prStaRec); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ) -{ - P_CMD_UPDATE_STA_RECORD_T prCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* To do: come out a mechanism to limit one STA_REC sync once for AP mode - * to avoid buffer empty case when many STAs are associated - * simultaneously. - */ - - /* To do: how to avoid 2 times of allocated memory. Use Stack? - * One is here, the other is in wlanSendQueryCmd() - */ - prCmdContent = cnmMemAlloc(prAdapter, - RAM_TYPE_BUF, sizeof(CMD_UPDATE_STA_RECORD_T)); - ASSERT(prCmdContent); - - /* To do: exception handle */ - if (!prCmdContent) { - return; - } - - prCmdContent->ucIndex = prStaRec->ucIndex; - prCmdContent->ucStaType = (UINT_8) prStaRec->eStaType; - kalMemCopy(&prCmdContent->aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - prCmdContent->u2AssocId = prStaRec->u2AssocId; - prCmdContent->u2ListenInterval = prStaRec->u2ListenInterval; - prCmdContent->ucNetTypeIndex = prStaRec->ucNetTypeIndex; - - prCmdContent->ucDesiredPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - prCmdContent->u2DesiredNonHTRateSet = prStaRec->u2DesiredNonHTRateSet; - prCmdContent->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - prCmdContent->ucMcsSet = prStaRec->ucMcsSet; - prCmdContent->ucSupMcs32 = (UINT_8) prStaRec->fgSupMcs32; - prCmdContent->u2HtCapInfo = prStaRec->u2HtCapInfo; - prCmdContent->ucNeedResp = (UINT_8) fgNeedResp; - -#if !CFG_SLT_SUPPORT - if(prAdapter->rWifiVar.eRateSetting != FIXED_RATE_NONE) { - /* override rate configuration */ - nicUpdateRateParams(prAdapter, - prAdapter->rWifiVar.eRateSetting, - &(prCmdContent->ucDesiredPhyTypeSet), - &(prCmdContent->u2DesiredNonHTRateSet), - &(prCmdContent->u2BSSBasicRateSet), - &(prCmdContent->ucMcsSet), - &(prCmdContent->ucSupMcs32), - &(prCmdContent->u2HtCapInfo)); - } -#endif - - prCmdContent->ucIsQoS = prStaRec->fgIsQoS; - prCmdContent->ucIsUapsdSupported = prStaRec->fgIsUapsdSupported; - prCmdContent->ucStaState = prStaRec->ucStaState; - - prCmdContent->ucAmpduParam = prStaRec->ucAmpduParam; - prCmdContent->u2HtExtendedCap = prStaRec->u2HtExtendedCap; - prCmdContent->u4TxBeamformingCap = prStaRec->u4TxBeamformingCap; - prCmdContent->ucAselCap = prStaRec->ucAselCap; - prCmdContent->ucRCPI = prStaRec->ucRCPI; - - prCmdContent->ucUapsdAc = prStaRec->ucBmpTriggerAC | (prStaRec->ucBmpDeliveryAC << 4); - prCmdContent->ucUapsdSp = prStaRec->ucUapsdSp; - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_UPDATE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - fgNeedResp, /* fgNeedResp */ - FALSE, /* fgIsOid */ - fgNeedResp? cnmStaRecHandleEventPkt : NULL, - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_UPDATE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdContent); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - CMD_REMOVE_STA_RECORD_T rCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - rCmdContent.ucIndex = prStaRec->ucIndex; - kalMemCopy(&rCmdContent.aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_REMOVE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_REMOVE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) &rCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm_timer.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm_timer.c deleted file mode 100755 index 2e8a8d7fa1b8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/cnm_timer.c +++ /dev/null @@ -1,531 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm_timer.c#1 $ -*/ - -/*! \file "cnm_timer.c" - \brief - -*/ - - - -/* -** $Log: cnm_timer.c $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support sleep notification to host - * - * 05 19 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some checking assertions - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 11 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Place rRootTimer.rNextExpiredSysTime = rExpiredSysTime; before set timer - * - * Oct 30 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * In cnmTimerInitialize(), just stop timer if it was already created. - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Move the external reference for Lint to precomp.h - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] rTimeout Time out interval from current time. -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -cnmTimerSetTimer ( - IN P_ADAPTER_T prAdapter, - IN OS_SYSTIME rTimeout - ) -{ - P_ROOT_TIMER prRootTimer; - BOOLEAN fgNeedWakeLock; - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - kalSetTimer(prAdapter->prGlueInfo, rTimeout); - - if (rTimeout <= SEC_TO_SYSTIME(WAKE_LOCK_MAX_TIME)) { - fgNeedWakeLock = TRUE; - - if (!prRootTimer->fgWakeLocked) { - KAL_WAKE_LOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = TRUE; - } - } - else { - fgNeedWakeLock = FALSE; - } - - return fgNeedWakeLock; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a root timer. -* -* \param[in] prAdapter -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - /* Note: glue layer have configured timer */ - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - KAL_WAKE_LOCK_INIT(prAdapter, &prRootTimer->rWakeLock, "WLAN Timer"); - prRootTimer->fgWakeLocked = FALSE; - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to destroy a root timer. -* When WIFI is off, the token shall be returned back to system. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - if (prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - KAL_WAKE_LOCK_DESTROY(prAdapter, &prRootTimer->rWakeLock); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - /* Note: glue layer will be responsible for timer destruction */ - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] pfnFunc Pointer to the call back function. -* \param[in] u4Data Parameter for call back function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ) -{ - ASSERT(prAdapter); - - ASSERT(prTimer); - -#if DBG - /* Note: NULL function pointer is permitted for HEM POWER */ - if (pfFunc == NULL) { - DBGLOG(CNM, WARN, ("Init timer with NULL callback function!\n")); - } -#endif - -#if DBG - ASSERT(prAdapter->rRootTimer.rLinkHead.prNext); - { - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prPendingTimer; - - prTimerList = &(prAdapter->rRootTimer.rLinkHead); - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prPendingTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prPendingTimer); - ASSERT(prPendingTimer != prTimer); - } - } -#endif - - LINK_ENTRY_INITIALIZE(&prTimer->rLinkEntry); - - prTimer->pfMgmtTimeOutFunc = pfFunc; - prTimer->u4Data = u4Data; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmTimerStopTimer_impl ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN BOOLEAN fgAcquireSpinlock - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - prRootTimer = &prAdapter->rRootTimer; - - if (fgAcquireSpinlock) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - if (timerPendingTimer(prTimer)) { - LINK_REMOVE_KNOWN_ENTRY(&prRootTimer->rLinkHead, - &prTimer->rLinkEntry); - - /* Reduce dummy timeout for power saving, especially HIF activity. - * If two or more timers exist and being removed timer is smallest, - * this dummy timeout will still happen, but it is OK. - */ - if (LINK_IS_EMPTY(&prRootTimer->rLinkHead)) { - kalCancelTimer(prAdapter->prGlueInfo); - - if (fgAcquireSpinlock && prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - } - } - - if (fgAcquireSpinlock) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ) -{ - ASSERT(prAdapter); - ASSERT(prTimer); - - cnmTimerStopTimer_impl(prAdapter, prTimer, TRUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to start a timer with wake_lock. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] u4TimeoutMs Timeout to issue the timer and call back function -* (unit: ms). -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - OS_SYSTIME rExpiredSysTime, rTimeoutSystime; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - /* If timeout interval is larger than 1 minute, the mod value is set - * to the timeout value first, then per minutue. - */ - if (u4TimeoutMs > MSEC_PER_MIN) { - ASSERT(u4TimeoutMs <= ((UINT_32)0xFFFF * MSEC_PER_MIN)); - - prTimer->u2Minutes = (UINT_16)(u4TimeoutMs / MSEC_PER_MIN); - u4TimeoutMs -= (prTimer->u2Minutes * MSEC_PER_MIN); - if (u4TimeoutMs == 0) { - u4TimeoutMs = MSEC_PER_MIN; - prTimer->u2Minutes--; - } - } - else { - prTimer->u2Minutes = 0; - } - - /* The assertion check if MSEC_TO_SYSTIME() may be overflow. */ - ASSERT(u4TimeoutMs < (((UINT_32)0x80000000 - MSEC_PER_SEC) / KAL_HZ)); - rTimeoutSystime = MSEC_TO_SYSTIME(u4TimeoutMs); - rExpiredSysTime = kalGetTimeTick() + rTimeoutSystime; - - /* If no timer pending or the fast time interval is used. */ - if (LINK_IS_EMPTY(prTimerList) || - TIME_BEFORE(rExpiredSysTime, prRootTimer->rNextExpiredSysTime)) { - - prRootTimer->rNextExpiredSysTime = rExpiredSysTime; - cnmTimerSetTimer(prAdapter, rTimeoutSystime); - } - - /* Add this timer to checking list */ - prTimer->rExpiredSysTime = rExpiredSysTime; - - if (!timerPendingTimer(prTimer)) { - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to check the timer list. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prTimer; - OS_SYSTIME rCurSysTime; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; - UINT_32 u4TimeoutData; - BOOLEAN fgNeedWakeLock; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - /* acquire spin lock */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - rCurSysTime = kalGetTimeTick(); - - /* Set the permitted max timeout value for new one */ - prRootTimer->rNextExpiredSysTime = rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prTimer); - - /* Check if this entry is timeout. */ - if (!TIME_BEFORE(rCurSysTime, prTimer->rExpiredSysTime)) { - cnmTimerStopTimer_impl(prAdapter, prTimer, FALSE); - - pfMgmtTimeOutFunc = prTimer->pfMgmtTimeOutFunc; - u4TimeoutData = prTimer->u4Data; - - if (prTimer->u2Minutes > 0) { - prTimer->u2Minutes--; - prTimer->rExpiredSysTime = - rCurSysTime + MSEC_TO_SYSTIME(MSEC_PER_MIN); - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - else if (pfMgmtTimeOutFunc) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - (pfMgmtTimeOutFunc)(prAdapter, u4TimeoutData); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - /* Search entire list again because of nest del and add timers - * and current MGMT_TIMER could be volatile after stopped - */ - prLinkEntry = (P_LINK_ENTRY_T)prTimerList; - - prRootTimer->rNextExpiredSysTime = - rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - } - else if (TIME_BEFORE(prTimer->rExpiredSysTime, - prRootTimer->rNextExpiredSysTime)) { - prRootTimer->rNextExpiredSysTime = prTimer->rExpiredSysTime; - } - } /* end of for loop */ - - /* Setup the prNext timeout event. It is possible the timer was already - * set in the above timeout callback function. - */ - fgNeedWakeLock = FALSE; - if (!LINK_IS_EMPTY(prTimerList)) { - ASSERT(TIME_AFTER(prRootTimer->rNextExpiredSysTime, rCurSysTime)); - - fgNeedWakeLock = cnmTimerSetTimer(prAdapter, (OS_SYSTIME) - ((INT_32)prRootTimer->rNextExpiredSysTime - (INT_32)rCurSysTime)); - } - - if (prRootTimer->fgWakeLocked && !fgNeedWakeLock) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - - /* release spin lock */ - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/hem_mbox.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/hem_mbox.c deleted file mode 100755 index 278e5d7627a1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/hem_mbox.c +++ /dev/null @@ -1,831 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/hem_mbox.c#3 $ -*/ - -/*! \file "hem_mbox.c" - \brief - -*/ - - - -/* -** $Log: hem_mbox.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 03 2012 cp.wu - * [WCXRP00001231] [MT6620 Wi-Fi][MT5931][Driver] Correct SCAN_V2 related debugging facilities within hem_mbox.c - * correct for debug message string table by adding missed scan_v2 related definitions. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 17 2012 yuche.tsai - * NULL - * Update mgmt frame filter setting. - * Please also update FW 2.1 - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 15 2011 cm.chang - * NULL - * Add exception handle for NULL function pointer of mailbox message - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 yarco.yang - * NULL - * Fixed Driver ASSERT at mboxInitMsgMap() - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Add debug message for newly add P2P message. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function entry for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some events to P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Add message box event for P2P device switch on & device discovery. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 yuche.tsai - * - * Add wifi direct scan done callback. - * - * 07 09 2010 cp.wu - * - * change handler of MID_MNY_CNM_CONNECTION_ABORT from NULL to mboxDummy. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable currently migrated message call-backs. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Updated arMsgMapTable for MID_RXM_MQM_QOS_ACTION_FRAME - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 9 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add hemRunEventScanDone() to arMsgMapTable[] - * - * Dec 4 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix mboxDummy() didn't free prMsgHdr - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add saaAisJoinComplete event handler - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the handler function name in arMsgMapTable for MID_RXM_MQM_BA_ACTION_FRAME - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME to MsgMapTable - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MSG Handler (remove dummy and add for SAA) - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventAbort() event handler - * - * Nov 11 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 10 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add more MSG_HNDL_ENTRY_T to avoid ASSERT() in mboxInitMsgMap() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN message and function entry to arMsgMapTable[] - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix sorting algorithm in mboxInitMsgMap() - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugMsg[] = { - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_ABORT"), - (PUINT_8)DISP_STRING("MID_CNM_AIS_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_P2P_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_BOW_CH_GRANT"), - - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_P2P_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_BOW_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_RLM_SCAN_DONE"), - - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_JOIN_REQ"), - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_AIS_JOIN_COMPLETE"), - -#if CFG_ENABLE_BT_OVER_WIFI - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_BOW_JOIN_COMPLETE"), -#endif - -#if CFG_ENABLE_WIFI_DIRECT - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_P2P_JOIN_COMPLETE"), - - (PUINT_8)DISP_STRING("MID_MNY_P2P_FUN_SWITCH"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_DEVICE_DISCOVERY"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_BEACON_UPDATE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_STOP_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_TX"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_GROUP_DISSOLVE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_FRAME_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_NET_DEV_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_START_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_UPDATE_IE_BUF"), - #endif - -#if CFG_SUPPORT_ADHOC - //(PUINT_8)DISP_STRING("MID_AIS_CNM_CREATE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_CREATE_IBSS_GRANT"), - //(PUINT_8)DISP_STRING("MID_AIS_CNM_MERGE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_MERGE_IBSS_GRANT"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_FOUND_IBSS"), -#endif /* CFG_SUPPORT_ADHOC */ - - (PUINT_8)DISP_STRING("MID_SAA_AIS_FSM_ABORT") -}; -/*lint -restore */ -#endif /* DBG */ - -/* This message entry will be re-ordered based on the message ID order - * by invoking mboxInitMsgMap() - */ -static MSG_HNDL_ENTRY_T arMsgMapTable[] = { - { MID_MNY_CNM_CH_REQ, cnmChMngrRequestPrivilege }, - { MID_MNY_CNM_CH_ABORT, cnmChMngrAbortPrivilege }, - { MID_CNM_AIS_CH_GRANT, aisFsmRunEventChGrant }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_CNM_P2P_CH_GRANT, p2pFsmRunEventChGrant }, /*set in gl_p2p_init.c*/ -#else - { MID_CNM_P2P_CH_GRANT, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_CNM_BOW_CH_GRANT, bowRunEventChGrant }, -#else - { MID_CNM_BOW_CH_GRANT, mboxDummy }, -#endif - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_AIS_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_P2P_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_BOW_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_RLM_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_SCN_AIS_SCAN_DONE, aisFsmRunEventScanDone }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_SCN_P2P_SCAN_DONE, p2pFsmRunEventScanDone }, /*set in gl_p2p_init.c*/ -#else - { MID_SCN_P2P_SCAN_DONE, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_SCN_BOW_SCAN_DONE, bowResponderScanDone }, -#else - { MID_SCN_BOW_SCAN_DONE, mboxDummy }, -#endif - { MID_SCN_RLM_SCAN_DONE, rlmObssScanDone }, - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_OID_AIS_FSM_JOIN_REQ, aisFsmRunEventAbort }, - { MID_OID_AIS_FSM_ABORT, aisFsmRunEventAbort }, - { MID_AIS_SAA_FSM_START, saaFsmRunEventStart }, - { MID_AIS_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_AIS_JOIN_COMPLETE, aisFsmRunEventJoinComplete }, - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_BOW_SAA_FSM_START, saaFsmRunEventStart }, - { MID_BOW_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_BOW_JOIN_COMPLETE, bowFsmRunEventJoinComplete }, -#endif - -#if CFG_ENABLE_WIFI_DIRECT /*set in gl_p2p_init.c*/ - { MID_P2P_SAA_FSM_START, saaFsmRunEventStart }, - { MID_P2P_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_P2P_JOIN_COMPLETE, p2pFsmRunEventJoinComplete },// TODO: p2pFsmRunEventJoinComplete - - { MID_MNY_P2P_FUN_SWITCH, p2pFsmRunEventSwitchOPMode }, - { MID_MNY_P2P_DEVICE_DISCOVERY, p2pFsmRunEventScanRequest }, - { MID_MNY_P2P_CONNECTION_REQ, p2pFsmRunEventConnectionRequest }, - { MID_MNY_P2P_CONNECTION_ABORT, p2pFsmRunEventConnectionAbort }, - { MID_MNY_P2P_BEACON_UPDATE, p2pFsmRunEventBeaconUpdate }, - { MID_MNY_P2P_STOP_AP, p2pFsmRunEventStopAP }, - { MID_MNY_P2P_CHNL_REQ, p2pFsmRunEventChannelRequest }, - { MID_MNY_P2P_CHNL_ABORT, p2pFsmRunEventChannelAbort }, - { MID_MNY_P2P_MGMT_TX, p2pFsmRunEventMgmtFrameTx }, - { MID_MNY_P2P_GROUP_DISSOLVE, p2pFsmRunEventDissolve }, - { MID_MNY_P2P_MGMT_FRAME_REGISTER, p2pFsmRunEventMgmtFrameRegister }, - { MID_MNY_P2P_NET_DEV_REGISTER, p2pFsmRunEventNetDeviceRegister }, - { MID_MNY_P2P_START_AP, p2pFsmRunEventStartAP }, - { MID_MNY_P2P_MGMT_FRAME_UPDATE, p2pFsmRunEventUpdateMgmtFrame }, -#if CFG_SUPPORT_WFD - { MID_MNY_P2P_WFD_CFG_UPDATE, p2pFsmRunEventWfdSettingUpdate }, -#endif - -#endif - -#if CFG_SUPPORT_ADHOC - { MID_SCN_AIS_FOUND_IBSS, aisFsmRunEventFoundIBSSPeer }, -#endif /* CFG_SUPPORT_ADHOC */ - - { MID_SAA_AIS_FSM_ABORT, aisFsmRunEventAbort } -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if DBG -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d: %s]\n", prMsg->eMsgId, apucDebugMsg[prMsg->eMsgId])); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#else -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d]\n", prMsg->eMsgId)); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#endif -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitMsgMap ( - VOID - ) -{ - UINT_32 i, idx; - MSG_HNDL_ENTRY_T rTempEntry; - - ASSERT((sizeof(arMsgMapTable) / sizeof(MSG_HNDL_ENTRY_T)) == MID_TOTAL_NUM); - - for (i = 0; i < MID_TOTAL_NUM; i++) { - if (arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i) { - continue; - } - for (idx = i + 1; idx < MID_TOTAL_NUM; idx++) { - if (arMsgMapTable[idx].eMsgId == (ENUM_MSG_ID_T) i) { - break; - } - } - ASSERT(idx < MID_TOTAL_NUM); - if (idx >= MID_TOTAL_NUM) { - continue; - } - - /* Swap target entry and current entry */ - rTempEntry.eMsgId = arMsgMapTable[idx].eMsgId; - rTempEntry.pfMsgHndl= arMsgMapTable[idx].pfMsgHndl; - - arMsgMapTable[idx].eMsgId = arMsgMapTable[i].eMsgId; - arMsgMapTable[idx].pfMsgHndl = arMsgMapTable[i].pfMsgHndl; - - arMsgMapTable[i].eMsgId = rTempEntry.eMsgId; - arMsgMapTable[i].pfMsgHndl = rTempEntry.pfMsgHndl; - } - - /* Verify the correctness of final message map */ - for (i = 0; i < MID_TOTAL_NUM; i++) { - ASSERT(arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i); - while (arMsgMapTable[i].eMsgId != (ENUM_MSG_ID_T) i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INITIALIZE(&prMbox->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prMsg); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - switch (eMethod) { - case MSG_SEND_METHOD_BUF: - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INSERT_TAIL(&prMbox->rLinkHead, &prMsg->rLinkEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - // to wake up main service thread - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - break; - - case MSG_SEND_METHOD_UNBUF: - MBOX_HNDL_MSG(prAdapter, prMsg); - break; - - default: - ASSERT(0); - break; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - MBOX_HNDL_MSG(prAdapter, prMsg); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* Initialize Mailbox */ - mboxInitMsgMap(); - - /* Setup/initialize each mailbox */ - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - mboxSetup(prAdapter, i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - UINT_8 i; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - prMbox = &(prAdapter->arMbox[i]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - cnmMemFree(prAdapter, prMsg); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is dummy function to prevent empty arMsgMapTable[] for compiling. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - ASSERT(prAdapter); - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/mib.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/mib.c deleted file mode 100755 index 270bdf97a71e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/mib.c +++ /dev/null @@ -1,102 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/mib.c#1 $ -*/ - -/*! \file "mib.c" - \brief This file includes the mib default vale and functions. -*/ - - - -/* -** $Log: mib.c $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add mib.c. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[] = { - {RATE_SET_HR_DSSS, TRUE, FALSE }, /* For PHY_TYPE_HR_DSSS_INDEX(0) */ - {RATE_SET_ERP, TRUE, TRUE }, /* For PHY_TYPE_ERP_INDEX(1) */ - {RATE_SET_ERP_P2P, TRUE, TRUE }, /* For PHY_TYPE_ERP_P2P_INDEX(2) */ - {RATE_SET_OFDM, FALSE, FALSE }, /* For PHY_TYPE_OFDM_INDEX(3) */ -}; - -NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[AD_HOC_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AD_HOC_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AD_HOC_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AD_HOC_MODE_11G(2) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AD_HOC_MODE_11A(3) */ -}; - -NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[AP_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AP_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AP_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AP_MODE_11G(2) */ - {PHY_TYPE_ERP_P2P_INDEX, BASIC_RATE_SET_ERP_P2P}, /* For AP_MODE_11G_P2P(3) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AP_MODE_11A(4) */ -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_assoc.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_assoc.c deleted file mode 100755 index d03d8338a261..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_assoc.c +++ /dev/null @@ -1,99 +0,0 @@ -/* -** $Id: @(#) p2p_assoc.c@@ -*/ - -/*! \file "p2p_assoc.c" - \brief This file includes the Wi-Fi Direct association-related functions. - - This file includes the association-related functions. -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for P2P Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - return pucBuffer; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_bss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_bss.c deleted file mode 100755 index d9aa1a130034..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_bss.c +++ /dev/null @@ -1,66 +0,0 @@ -/* -** $Id: @(#) p2p_bss.c@@ -*/ - -/*! \file "p2p_bss.c" - \brief This file contains the functions for creating p2p BSS(AP). - - This file contains the functions for BSS(AP). We may create a BSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_fsm.c deleted file mode 100755 index 8a77308896e4..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_fsm.c +++ /dev/null @@ -1,3444 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/mgmt/p2p_fsm.c#61 $ -*/ - -/*! \file "p2p_fsm.c" - \brief This file defines the FSM for P2P Module. - - This file defines the FSM for P2P Module. -*/ - - - -/* -** $Log: p2p_fsm.c $ -** -** 12 20 2012 yuche.tsai -** [ALPS00410124] [Rose][Free Test][KE][rlmUpdateParamsForAP]The device reboot automaticly and then "Fatal/Kernel" pops up during use data service.(Once) -** Fix possible NULL station record cause KE under AP mode. -** May due to variable uninitial. -** Review: http://mtksap20:8080/go?page=NewReview&reviewid=49970 -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 08 21 2012 yuche.tsai -** NULL -** fix disconnect indication. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** Fix p2p bug find on ALPS.JB trunk. -** -** 07 27 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update for driver unload KE issue. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Fix the compile flag of enhancement. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000808] [Volunteer Patch][MT6620][Driver/FW] Device discoverability issue fix - * Change device discoverability methodology. From driver SCAN to FW lock channel. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000833] [Volunteer Patch][WiFi Direct][Driver] Service Discovery Frame RX Indicate Issue - * Fix Service Discovery Race Condition Issue. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix an issue of accepting connection of GO. - * - * 06 21 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability - * Drop GAS frame when SD is not enabled. - * - * 06 20 2011 yuche.tsai - * NULL - * Fix compile error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 20 2011 yuche.tsai - * [WCXRP00000795] [Volunteer Patch][MT6620][Driver] GO can not connect second device issue - * Solve P2P GO can not formation with second device issue. - * - * 06 14 2011 yuche.tsai - * NULL - * Change disconnect feature. - * - * 06 10 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability[WCXRP00000776] [Need Patch][MT6620][Driver] MT6620 response probe request of P2P device with P2P IE under Hot Spot mode. - * 1. Dynamic enable SD capability after P2P supplicant ready. - * 2. Avoid response probe respone with p2p IE when under hot spot mode. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 26 2011 yuche.tsai - * [WCXRP00000745] Support accepting connection after one Group Connection Lost. - -After Group Formation & lost connection, if MT6620 behave as: - -1. GO: It would keep under GO state until been dissolved by supplicant. - - At this time, other P2P device can use join method to join this group. - - -2. GC: It would keep on searching target GO or target device until been dissolved by supplicant. - -At this time, it would ignore other P2P device formation request. - - --- - -Modification: Make driver to accept GO NEGO REQ at this time, to let user decide to accept new connection or not. - - * [Volunteer Patch][MT6620][Driver] - * Driver would indicate connection request, if password ID is not ready but connection request is issued. - * - * 05 18 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * A solution for both connection request & IO control. - * - * 05 16 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * Fix SD request can not send out issue. - * - * 05 09 2011 terry.wu - * [WCXRP00000711] [MT6620 Wi-Fi][Driver] Set Initial value of StaType in StaRec for Hotspot Client - * Set initial value of StaType in StaRec for hotspot client. - * - * 05 04 2011 yuche.tsai - * [WCXRP00000697] [Volunteer Patch][MT6620][Driver] - * Bug fix for p2p descriptor is NULL if BSS descriptor is found first. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 20 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Fix side effect while starting ATGO. - * - * 04 20 2011 yuche.tsai - * NULL - * Fix ASSERT issue in FW, side effect of last change. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Workaround for multiple device connection, before invitation ready. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000665] [Wifi Direct][MT6620 E4] When use Ralink's dongle to establish wifi direct connection with PBC. But 6573 always not pop accept option to establish connection. - * Support connection indication when GO NEGO REQ doesn't have configure method, instead it has PasswordID. - * - * 04 18 2011 yuche.tsai - * NULL - * Fix error. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix a connection issue. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix the channel issue of AP mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix Device discoverability related issue. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix bug for Device Discoverability. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix compile error. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 28 2011 yuche.tsai - * NULL - * Fix a possible issue for retry join when media status connected. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 24 2011 yuche.tsai - * NULL - * Assign AID before change STA_REC state to state 3. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix Response Rate Issue when TX Auth Rsp Frame under P2P Mode. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix issue of connection to one GC. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix ASSERT issue when starting Hot-spot. - * - * 03 22 2011 yuche.tsai - * NULL - * When Target Information is not available, change to passive mode. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix one connection issue while using Keypad to connect a GO. - * - * 03 22 2011 yuche.tsai - * NULL - * 1. Fix two issues that may cause kernel panic. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix GC connect to other device issue. - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 21 2011 yuche.tsai - * NULL - * Solve Listen State doesn't response probe response issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Indicate the correct Group SSID when join on Group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Support the third P2P device to join GO/GC group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000578] [Volunteer Patch][MT6620][Driver] Separate Connection Request from general IOCTL - * Separate connection request from general IOCTL. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 17 2011 yuche.tsai - * NULL - * When AIS is connect to an AP, Hot Spot would be enabled under fixed same channel. - * - * 03 17 2011 yuche.tsai - * NULL - * Solve the Group Info IE in Probe Response incorrect issue. - * - * 03 17 2011 yuche.tsai - * NULL - * Release Channel after Join Complete. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix local configure method issue. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 14 2011 yuche.tsai - * NULL - * . - * - * 03 14 2011 yuche.tsai - * NULL - * Fix password ID issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 04 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the p2p action frame type check for device request indication. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Service Discovery RX packet buffer pointer. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 21 2011 yuche.tsai - * [WCXRP00000481] [Volunteer Patch][MT6620][FW] Scan hang under concurrent case. - * Fix all BE issue of WSC or P2P IE. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the wsc config method mapping to driver used config method issue. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000479] [Volunteer Patch][MT6620][Driver] Probe Response of P2P using 11b rate. - * Update basic rate to FW, after P2P is initialed. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Use P2P Wildcard SSID when scan type of P2P_WILDCARD_SSID is set. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 16 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * If two station connected to the Hot-Spot and one disconnect, FW would get into an infinite loop - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix re-connection issue after RX deauthentication. - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix conneciton issue after disconnect with AP. - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * P2P Create Station Type according to Target BSS capability. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Disconnect every station client when disolve on P2P group. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Workaround of disable P2P network. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * 1. Fixed SSID wrong length issue. - * 2. Under Hot Spot configuration, there won't be any P2P IE. - * 3. Under Hot Spot configuration, P2P FSM won't get into LISTEN state first. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Modify Start GO flow. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix desire phy type set issue. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Add desire phy type set phase I. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix P2P Disconnect Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type Definition. - * - * 01 19 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Add P2P QoS Support. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 01 13 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Resolve Channel ZERO issue. (Uninitialized default channel) - * - * 01 13 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update P2P State Debug Message. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Fix bug when allocating message buffer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Bug of reference to NULL pointer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix bug of wrong pointer check. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Compile Error. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Add station record into client list before change it state from STATE_2 to STATE_3. - * - * 01 05 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Specify SSID Type when issue a scan request. - * - * 01 05 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * correct typo - * - * 01 05 2011 george.huang - * [WCXRP00000343] [MT6620 Wi-Fi] Add TSF reset path for concurrent operation - * modify NOA update path for preventing assertion false alarm. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 01 03 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * let the p2p ap mode acept a legacy device join. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * The order of invoking nicUpdateBss() and rlm functions - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 30 2010 yuche.tsai - * NULL - * Update RCIP value when RX assoc request frame. - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 05 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * fixed the p2p role code error. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * fixed the ASSERT check error - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 19 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine[WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * fixed the compiling error. - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * adding a code to support Direct GO with a compiling flag . - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * fixed the compiling error. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 yuche.tsai - * NULL - * Reset Common IE Buffer of P2P INFO when scan request is issued. - * If an action frame other than public action frame is received, return direcly. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 yuche.tsai - * NULL - * 1. Fix Interface Address from GO Nego Req/Rsp is not correct. - * 2. Fix GO mode does not change media state after station connected. - * 3. Fix STA don't response probe request when there is a connection request. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 20 2010 yuche.tsai - * NULL - * Add Glue Layer indication. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix compile warning under Linux. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Add random Interface Address Generation support. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Update P2P FSM code for GO Nego. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Join complete indication. - * - * 08 11 2010 yuche.tsai - * NULL - * Add two boolean in connection request. - * Based on these two boolean value, P2P FSM should - * decide to do invitation or group formation or start a GO directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Update P2P FSM, currently P2P Device Discovery is verified. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P FSM for group formation. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 03 2010 cp.wu - * NULL - * limit build always needs spin-lock declaration. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add P2P FSM code check in. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM. - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add code to test P2P GO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to BAND_24G define was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugP2pState[P2P_STATE_NUM] = { - (PUINT_8)DISP_STRING("P2P_STATE_IDLE"), - (PUINT_8)DISP_STRING("P2P_STATE_SCAN"), - (PUINT_8)DISP_STRING("P2P_STATE_AP_CHANNEL_DETECT"), - (PUINT_8)DISP_STRING("P2P_STATE_REQING_CHANNEL"), - (PUINT_8)DISP_STRING("P2P_STATE_CHNL_ON_HAND"), - (PUINT_8)DISP_STRING("P2P_STATE_GC_JOIN") -}; -/*lint -restore */ -#endif /* DBG */ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* p2pStateXXX : Processing P2P FSM related action. - * p2pFSMXXX : Control P2P FSM flow. - * p2pFuncXXX : Function for doing one thing. - */ -VOID -p2pFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ASSERT_BREAK(prP2pFsmInfo != NULL); - - LINK_INITIALIZE(&(prP2pFsmInfo->rMsgEventQueue)); - LINK_INITIALIZE(&(prP2pBssInfo->rStaRecOfClientList)); - - - prP2pFsmInfo->eCurrentState = prP2pFsmInfo->ePreviousState = P2P_STATE_IDLE; - prP2pFsmInfo->prTargetBss = NULL; - prP2pFsmInfo->fgIsWPSMode = 0; - - cnmTimerInitTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (PFN_MGMT_TIMEOUT_FUNC)p2pFsmRunEventFsmTimeout, - (UINT_32)prP2pFsmInfo); - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - //4 <2.1> Initiate BSS_INFO_T - Setup HW ID - prP2pBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; - prP2pBssInfo->ucHwDefaultFixedRateCode = RATE_OFDM_6M; - - - prP2pBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prP2pBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prP2pBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prP2pBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prP2pBssInfo->u2OperationalRateSet, - prP2pBssInfo->u2BSSBasicRateSet, - prP2pBssInfo->aucAllSupportedRates, - &prP2pBssInfo->ucAllSupportedRatesLen); - - prP2pBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prP2pBssInfo->prBeacon) { - prP2pBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prP2pBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - prP2pBssInfo->prBeacon->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else { - /* Out of memory. */ - ASSERT(FALSE); - } - - prP2pBssInfo->eCurrentOPMode = OP_MODE_NUM; - - prP2pBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; - prP2pBssInfo->ucPrimaryChannel = P2P_DEFAULT_LISTEN_CHANNEL; - prP2pBssInfo->eBand = BAND_2G4; - prP2pBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (prAdapter->rWifiVar.fgSupportQoS) { - prP2pBssInfo->fgIsQBSS = TRUE; - } - else { - prP2pBssInfo->fgIsQBSS = FALSE; - } - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - return; -} /* p2pFsmInit */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to uninitialize the value in P2P_FSM_INFO_T for -* P2P FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DEBUGFUNC("p2pFsmUninit()"); - DBGLOG(P2P, INFO, ("->p2pFsmUninit()\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - p2pFuncSwitchOPMode(prAdapter, prP2pBssInfo, OP_MODE_P2P_DEVICE, TRUE); - - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - p2pStateAbort_IDLE(prAdapter, prP2pFsmInfo, P2P_STATE_NUM); - - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - wlanAcquirePowerControl(prAdapter); - - /* Release all pending CMD queue. */ - DBGLOG(P2P, TRACE, ("p2pFsmUninit: wlanProcessCommandQueue, num of element:%d\n", prAdapter->prGlueInfo->rCmdQueue.u4NumElem)); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - - wlanReleasePowerControl(prAdapter); - - /* Release pending mgmt frame, - * mgmt frame may be pending by CMD without resource. - */ - kalClearMgmtFramesByNetType(prAdapter->prGlueInfo, NETWORK_TYPE_P2P_INDEX); - - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - if (prP2pBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prP2pBssInfo->prBeacon); - prP2pBssInfo->prBeacon = NULL; - } - - } while (FALSE); - - return; - -} /* end of p2pFsmUninit() */ - -VOID -p2pFsmStateTransition ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - BOOLEAN fgIsTransOut = (BOOLEAN)FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (!IS_BSS_ACTIVE(prP2pBssInfo)) { - if (!cnmP2PIsPermitted(prAdapter)) { - return; - } - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - fgIsTransOut = fgIsTransOut?FALSE:TRUE; - - if (!fgIsTransOut) { - DBGLOG(P2P, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugP2pState[prP2pFsmInfo->eCurrentState], - apucDebugP2pState[eNextState])); - - /* Transition into current state. */ - prP2pFsmInfo->ePreviousState = prP2pFsmInfo->eCurrentState; - prP2pFsmInfo->eCurrentState = eNextState; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - if (fgIsTransOut) { - - p2pStateAbort_IDLE(prAdapter, - prP2pFsmInfo, - eNextState); - } - else { - fgIsTransOut = p2pStateInit_IDLE(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &eNextState); - } - - break; - case P2P_STATE_SCAN: - if (fgIsTransOut) { - - // Scan done / scan canceled. - p2pStateAbort_SCAN(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial scan request. - p2pStateInit_SCAN(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_AP_CHANNEL_DETECT: - if (fgIsTransOut) { - // Scan done - // Get sparse channel result. - p2pStateAbort_AP_CHANNEL_DETECT(prAdapter, - prP2pFsmInfo, - prP2pSpecificBssInfo, - eNextState); - } - - else { - // Initial passive scan request. - p2pStateInit_AP_CHANNEL_DETECT(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_REQING_CHANNEL: - if (fgIsTransOut) { - - // Channel on hand / Channel canceled. - p2pStateAbort_REQING_CHANNEL(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial channel request. - p2pFuncAcquireCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - break; - case P2P_STATE_CHNL_ON_HAND: - if (fgIsTransOut) { - p2pStateAbort_CHNL_ON_HAND(prAdapter, prP2pFsmInfo, prP2pBssInfo, eNextState); - } - else { - // Initial channel ready. - // Send channel ready event. - // Start a FSM timer. - p2pStateInit_CHNL_ON_HAND(prAdapter, prP2pBssInfo, prP2pFsmInfo); - } - - break; - case P2P_STATE_GC_JOIN: - if (fgIsTransOut) { - - // Join complete / join canceled. - p2pStateAbort_GC_JOIN(prAdapter, - prP2pFsmInfo, - &(prP2pFsmInfo->rJoinInfo), - eNextState); - } - else { - ASSERT(prP2pFsmInfo->prTargetBss != NULL); - - // Send request to SAA module. - p2pStateInit_GC_JOIN(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &(prP2pFsmInfo->rJoinInfo), - prP2pFsmInfo->prTargetBss); - } - - break; - default: - break; - } - - } while (fgIsTransOut); - -} /* p2pFsmStateTransition */ - - -VOID -p2pFsmRunEventSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchOpMode = (P_MSG_P2P_SWITCH_OP_MODE_T)prMsgHdr; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwitchOpMode != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventSwitchOPMode\n")); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prSwitchOpMode->eOpMode >= OP_MODE_NUM) { - ASSERT(FALSE); - break; - } - - /* P2P Device / GC. */ - p2pFuncSwitchOPMode(prAdapter, - prP2pBssInfo, - prSwitchOpMode->eOpMode, - TRUE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventSwitchOPMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle scan done event during Device Discovery. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - P_MSG_SCN_SCAN_DONE prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - - /* This scan done event is either for "SCAN" phase or "SEARCH" state or "LISTEN" state. - * The scan done for SCAN phase & SEARCH state doesn't imply Device - * Discovery over. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Done Event\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - - if (prScanDoneMsg->ucSeqNum != prScanReqInfo->ucSeqNumOfScnMsg) { - /* Scan Done message sequence number mismatch. - * Ignore this event. (P2P FSM issue two scan events.) - */ - /* The scan request has been cancelled. - * Ignore this message. It is possible. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Don SeqNum:%d <-> P2P Fsm SCAN Msg:%d\n", - prScanDoneMsg->ucSeqNum, - prScanReqInfo->ucSeqNumOfScnMsg)); - - break; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_SCAN: - { - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - prScanReqInfo->fgIsAbort = FALSE; - - if (prConnReqInfo->fgIsConnRequest) { - - if ((prP2pFsmInfo->prTargetBss = p2pFuncKeepOnConnection(prAdapter, - &prP2pFsmInfo->rConnReqInfo, - &prP2pFsmInfo->rChnlReqInfo, - &prP2pFsmInfo->rScanReqInfo)) == NULL) { - eNextState = P2P_STATE_SCAN; - } - else { - eNextState = P2P_STATE_REQING_CHANNEL; - } - - } - else { - eNextState = P2P_STATE_IDLE; - } - - } - break; - case P2P_STATE_AP_CHANNEL_DETECT: - eNextState = P2P_STATE_REQING_CHANNEL; - break; - default: - /* Unexpected channel scan done event without being chanceled. */ - ASSERT(FALSE); - break; - } - - prScanReqInfo->fgIsScanRequest = FALSE; - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanDone */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when channel is granted by CNM module from FW. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_CH_GRANT_T prMsgChGrant = (P_MSG_CH_GRANT_T)NULL; - UINT_8 ucTokenID = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Run Event Channel Grant\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - prP2pFsmInfo->u4GrantInterval = prMsgChGrant->u4GrantInterval; - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (ucTokenID == prChnlReqInfo->ucSeqNumOfChReq) { - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_REQING_CHANNEL: - switch (prChnlReqInfo->eChannelReqType) { - case CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL: - eNextState = P2P_STATE_CHNL_ON_HAND; - break; - case CHANNEL_REQ_TYPE_GC_JOIN_REQ: - eNextState = P2P_STATE_GC_JOIN; - break; - case CHANNEL_REQ_TYPE_GO_START_BSS: - eNextState = P2P_STATE_IDLE; - break; - default: - break; - } - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - break; - default: - /* Channel is granted under unexpected state. - * Driver should cancel channel privileagea before leaving the states. - */ - ASSERT(FALSE); - break; - } - - } - else { - /* Channel requsted, but released. */ - //ASSERT(!prChnlReqInfo->fgIsChannelRequested); - DBGLOG(P2P, TRACE, ("Channel requsted, but released\n")); - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventChGrant */ - - -VOID -p2pFsmRunEventChannelRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelRequest\n")); - - /* Special case of time renewing for same frequency. */ - if ((prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND) && - (prChnlReqInfo->ucReqChnlNum == prP2pChnlReqMsg->rChannelInfo.ucChannelNum) && - (prChnlReqInfo->eBand == prP2pChnlReqMsg->rChannelInfo.eBand) && - (prChnlReqInfo->eChnlSco == prP2pChnlReqMsg->eChnlSco)) { - - ASSERT(prChnlReqInfo->fgIsChannelRequested == TRUE); - ASSERT(prChnlReqInfo->eChannelReqType == CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; - - /* Re-enter the state. */ - eNextState = P2P_STATE_CHNL_ON_HAND; - } - else { - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; /* Cookie can only be assign after abort.(for indication) */ - prChnlReqInfo->ucReqChnlNum = prP2pChnlReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prP2pChnlReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prP2pChnlReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL; - - eNextState = P2P_STATE_REQING_CHANNEL; - } - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, eNextState); - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelRequest */ - - -VOID -p2pFsmRunEventChannelAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelAbort\n")); - - if ((prChnlAbortMsg->u8Cookie == prChnlReqInfo->u8Cookie) && - (prChnlReqInfo->fgIsChannelRequested)) { - - ASSERT((prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL || - (prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND))); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelAbort */ - - - -VOID -p2pFsmRunEventScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - UINT_32 u4ChnlListSize = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)prMsgHdr; - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanRequest\n")); - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - ASSERT(prScanReqInfo->fgIsScanRequest == FALSE); - - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - - // Channel List - prScanReqInfo->ucNumChannelList = prP2pScanReqMsg->u4NumChannel; - DBGLOG(P2P, TRACE, ("Scan Request Channel List Number: %d\n", prScanReqInfo->ucNumChannelList)); - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - DBGLOG(P2P, TRACE, ("Channel List Number Overloaded: %d, change to: %d\n", - prScanReqInfo->ucNumChannelList, - MAXIMUM_OPERATION_CHANNEL_LIST)); - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - u4ChnlListSize = sizeof(RF_CHANNEL_INFO_T) * prScanReqInfo->ucNumChannelList; - kalMemCopy(prScanReqInfo->arScanChannelList, prP2pScanReqMsg->arChannelListInfo, u4ChnlListSize); - - // TODO: I only take the first SSID. Multiple SSID may be needed in the future. - // SSID - if (prP2pScanReqMsg->i4SsidNum >= 1) { - - kalMemCopy(&(prScanReqInfo->rSsidStruct), - prP2pScanReqMsg->prSSID, - sizeof(P2P_SSID_STRUCT_T)); - } - else { - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - } - - // IE Buffer - kalMemCopy(prScanReqInfo->aucIEBuf, - prP2pScanReqMsg->pucIEBuf, - prP2pScanReqMsg->u4IELen); - - prScanReqInfo->u4BufLength = prP2pScanReqMsg->u4IELen; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventScanRequest */ - - -VOID -p2pFsmRunEventScanAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanAbort\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanAbort */ - - - - - -VOID -p2pFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventAbort\n")); - - if (prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - } - else if (prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL) { - /* 2012/08/06: frog - * Prevent Start GO. - */ - prP2pBssInfo->eIntendOPMode = OP_MODE_NUM; - } - - // For other state, is there any special action that should be take before leaving? - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - else { - /* P2P State IDLE. */ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventAbort */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle FSM Timeout. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventFsmTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)u4Param; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - DBGLOG(P2P, TRACE, ("P2P FSM Timeout Event\n")); - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - else if (IS_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - break; - -// case P2P_STATE_SCAN: -// break; -// case P2P_STATE_AP_CHANNEL_DETECT: -// break; -// case P2P_STATE_REQING_CHANNEL: -// break; - case P2P_STATE_CHNL_ON_HAND: - { - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - break; -// case P2P_STATE_GC_JOIN: -// break; - default: - break; - } - - } while (FALSE); - - return; -} /* p2pFsmRunEventFsmTimeout */ - -VOID -p2pFsmRunEventMgmtFrameTx ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventMgmtFrameTx\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)prMsgHdr; - - p2pFuncTxMgmtFrame(prAdapter, - &prP2pFsmInfo->rMgmtTxInfo, - prMgmtTxMsg->prMgmtMsduInfo, - prMgmtTxMsg->u8Cookie); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtTx */ - - -VOID -p2pFsmRunEventStartAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStartAP\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)prMsgHdr; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - - if (prP2pStartAPMsg->u4BcnInterval) { - DBGLOG(P2P, TRACE, ("Beacon interval updated to :%ld \n", prP2pStartAPMsg->u4BcnInterval)); - prP2pBssInfo->u2BeaconInterval = (UINT_16)prP2pStartAPMsg->u4BcnInterval; - } - else if (prP2pBssInfo->u2BeaconInterval == 0) { - prP2pBssInfo->u2BeaconInterval = DOT11_BEACON_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u4DtimPeriod) { - DBGLOG(P2P, TRACE, ("DTIM interval updated to :%ld \n", prP2pStartAPMsg->u4DtimPeriod)); - prP2pBssInfo->ucDTIMPeriod = (UINT_8)prP2pStartAPMsg->u4DtimPeriod; - } - else if (prP2pBssInfo->ucDTIMPeriod == 0) { - prP2pBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u2SsidLen != 0) { - kalMemCopy(prP2pBssInfo->aucSSID, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - kalMemCopy(prP2pSpecificBssInfo->aucGroupSsid, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - prP2pBssInfo->ucSSIDLen = prP2pSpecificBssInfo->u2GroupSsidLen = prP2pStartAPMsg->u2SsidLen; - } - - - prP2pBssInfo->eHiddenSsidType = prP2pStartAPMsg->ucHiddenSsidType; - - - // TODO: JB - /* Privacy & inactive timeout. */ - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eIntendOPMode != OP_MODE_NUM)) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - ENUM_P2P_STATE_T eNextState = P2P_STATE_SCAN; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - - if(prP2pFsmInfo->eCurrentState != P2P_STATE_SCAN && - prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - } - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Leave IDLE state. */ - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - // sync with firmware - //DBGLOG(P2P, INFO, ("Activate P2P Network. \n")); - //nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - /* Key to trigger P2P FSM to allocate channel for AP mode. */ - prP2pBssInfo->eIntendOPMode = OP_MODE_ACCESS_POINT; - - /* Sparse Channel to decide which channel to use. */ - if ((cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) && (prP2pConnSettings->ucOperatingChnl == 0)) { - // Sparse Channel Detection using passive mode. - eNextState = P2P_STATE_AP_CHANNEL_DETECT; - } - else { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - -#if 1 - /* 2012-01-27: frog - Channel set from upper layer is the first priority. */ - /* Becuase the channel & beacon is decided by p2p_supplicant. */ - if (prP2pConnSettings->ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - - else { - ASSERT(ucPreferedChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } -#else - if (ucPreferedChnl) { - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } - else { - ASSERT(prP2pConnSettings->ucOperatingChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - -#endif - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - } - - /* If channel is specified, use active scan to shorten the scan time. */ - p2pFsmStateTransition(prAdapter, - prAdapter->rWifiVar.prP2pFsmInfo, - eNextState); - } - - - - } while (FALSE); - - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventStartAP */ - -VOID -p2pFsmRunEventNetDeviceRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_NETDEV_REGISTER_T prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventNetDeviceRegister\n")); - - prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)prMsgHdr; - - if (prNetDevRegisterMsg->fgIsEnable) { - p2pSetMode((prNetDevRegisterMsg->ucMode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventNetDeviceRegister */ - - -VOID -p2pFsmRunEventUpdateMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_UPDATE_T prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventUpdateMgmtFrame\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)prMsgHdr; - - switch (prP2pMgmtFrameUpdateMsg->eBufferType) { - case ENUM_FRAME_TYPE_EXTRA_IE_BEACON: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP: - break; - case ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE: - break; - case ENUM_FRAME_TYPE_BEACON_TEMPLATE: - break; - default: - break; - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventUpdateMgmtFrame */ - - -VOID -p2pFsmRunEventBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_BEACON_UPDATE_T prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconUpdate\n")); - - printk("p2pFsmRunEventBeaconUpdate\n"); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)prMsgHdr; - - - p2pFuncBeaconUpdate(prAdapter, - prP2pBssInfo, - &prP2pFsmInfo->rBcnContentInfo, - prBcnUpdateMsg->pucBcnHdr, - prBcnUpdateMsg->u4BcnHdrLen, - prBcnUpdateMsg->pucBcnBody, - prBcnUpdateMsg->u4BcnBodyLen); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) && - (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - //nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - -} /* p2pFsmRunEventBeaconUpdate */ - - -VOID -p2pFsmRunEventStopAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStopAP\n")); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) - && (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); - - DBGLOG(P2P, TRACE, ("Stop Beaconing\n")); - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Enter IDLE state. */ - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - DBGLOG(P2P, INFO, ("Re activate P2P Network. \n")); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - -#if CFG_SUPPORT_WFD - p2pFsmRunEventWfdSettingUpdate(prAdapter, NULL); -#endif - - p2pFsmRunEventAbort(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo); -// p2pFsmStateTransition(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - -} /* p2pFsmRunEventStopAP */ - -VOID -p2pFsmRunEventConnectionRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)prMsgHdr; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventConnectionRequest\n")); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - // Update connection request information. - prConnReqInfo->fgIsConnRequest = TRUE; - COPY_MAC_ADDR(prConnReqInfo->aucBssid, prConnReqMsg->aucBssid); - kalMemCopy(&(prConnReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - kalMemCopy(prConnReqInfo->aucIEBuf, prConnReqMsg->aucIEBuf, prConnReqMsg->u4IELen); - prConnReqInfo->u4BufLength = prConnReqMsg->u4IELen; - - /* Find BSS Descriptor first. */ - prP2pFsmInfo->prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prP2pFsmInfo->prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - prScanReqInfo->arScanChannelList[0].ucChannelNum = prConnReqMsg->rChannelInfo.ucChannelNum; - kalMemCopy(&(prScanReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prConnReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prConnReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prConnReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_REQING_CHANNEL); - } - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventConnectionRequest */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle Connection Request from Supplicant. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventConnectionAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - //P_STA_RECORD_T prTargetStaRec = (P_STA_RECORD_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventConnectionAbort: Connection Abort.\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)prMsgHdr; - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - { - UINT_8 aucBCBSSID[] = BC_BSSID; - - if (!prP2pBssInfo->prStaRecOfAP) { - DBGLOG(P2P, TRACE, ("GO's StaRec is NULL\n")); - break; - } - if (UNEQUAL_MAC_ADDR(prP2pBssInfo->prStaRecOfAP->aucMacAddr, prDisconnMsg->aucTargetID) && - UNEQUAL_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCBSSID)) { - DBGLOG(P2P, TRACE, ("Unequal MAC ADDR ["MACSTR":"MACSTR"]\n", - MAC2STR(prP2pBssInfo->prStaRecOfAP->aucMacAddr), - MAC2STR(prDisconnMsg->aucTargetID))); - break; - } - - - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, NULL, NULL, 0, 0); - - /* Stop rejoin timer if it is started. */ - // TODO: If it has. - - p2pFuncDisconnect(prAdapter, prP2pBssInfo->prStaRecOfAP, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prP2pBssInfo->prStaRecOfAP; - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } - break; - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - /* Search specific client device, and disconnect. */ - /* 1. Send deauthentication frame. */ - /* 2. Indication: Device disconnect. */ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - DBGLOG(P2P, TRACE, ("Disconnecting with Target ID: "MACSTR"\n", MAC2STR(prDisconnMsg->aucTargetID))); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prDisconnMsg->aucTargetID)) { - - DBGLOG(P2P, TRACE, ("Disconnecting: "MACSTR"\n", MAC2STR(prCurrStaRec->aucMacAddr))); - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Glue layer indication. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - /* Send deauth & do indication. */ - p2pFuncDisconnect(prAdapter, prCurrStaRec, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prCurrStaRec; - - break; - } - } - - } - break; - case OP_MODE_P2P_DEVICE: - default: - ASSERT(FALSE); - break; - } - - } while (FALSE); - - //20120830 moved into p2pFuncDisconnect() - //if ((!prDisconnMsg->fgSendDeauth) && (prTargetStaRec)) { - // cnmStaRecFree(prAdapter, prTargetStaRec, TRUE); - //} - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventConnectionAbort */ - - -VOID -p2pFsmRunEventDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - // TODO: - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventDissolve\n")); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} -WLAN_STATUS -p2pFsmRunEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prMsduInfo != NULL)); - - DBGLOG(P2P, TRACE, ("Deauth TX Done\n")); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Station Record NULL, Index:%d\n", prMsduInfo->ucStaRecIndex)); - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - - /**/ - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - /* Because the eConnectionState is changed before Deauth TxDone. Dont Check eConnectionState */ - //if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - //} - - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; -} /* p2pFsmRunEventDeauthTxDone */ - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo = (P_P2P_MGMT_TX_REQ_INFO_T)NULL; - BOOLEAN fgIsSuccess = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prMgmtTxReqInfo = &(prP2pFsmInfo->rMgmtTxInfo); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Fail, Status:%d.\n", rTxDoneStatus)); - } - else { - fgIsSuccess = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Done.\n")); - } - - - if (prMgmtTxReqInfo->prMgmtTxMsdu == prMsduInfo) { - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - fgIsSuccess, - prMsduInfo->prPacket, - (UINT_32)prMsduInfo->u2FrameLength); - - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* p2pFsmRunEventMgmtFrameTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when JOIN complete message event is received from SAA. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_MSG_JOIN_COMP_T prJoinCompMsg = (P_MSG_JOIN_COMP_T)NULL; - P_SW_RFB_T prAssocRspSwRfb = (P_SW_RFB_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Join Complete\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - prStaRec = prJoinCompMsg->prStaRec; - - /* Check SEQ NUM */ - if (prJoinCompMsg->ucSeqNum == prJoinInfo->ucSeqNumOfReqMsg) { - ASSERT(prStaRec == prJoinInfo->prTargetStaRec); - prJoinInfo->fgIsJoinComplete = TRUE; - - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //4 <1.1> Change FW's Media State immediately. - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prP2pBssInfo->prStaRecOfAP) && - (prP2pBssInfo->prStaRecOfAP != prStaRec)) { - cnmStaRecChangeState(prAdapter, prP2pBssInfo->prStaRecOfAP, STA_STATE_1); - - cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - prP2pBssInfo->prStaRecOfAP = NULL; - } - - //4 <1.3> Update BSS_INFO_T - p2pFuncUpdateBssInfoForJOIN(prAdapter, prP2pFsmInfo->prTargetBss, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_SUPPORT_P2P_RSSI_QUERY - //<1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); -#endif - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, prStaRec->aucMacAddr); - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - - } - else { - /* Join Fail*/ - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (p2pFuncRetryJOIN(prAdapter, prStaRec, prJoinInfo) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - prBssDesc = prP2pFsmInfo->prTargetBss; - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - prBssDesc->fgIsConnecting = FALSE; - - if( prStaRec->ucJoinFailureCount >=3) { - - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - } - else { - /* Sometime the GO is not ready to response auth. Connect it again*/ - prP2pFsmInfo->prTargetBss = NULL; - } - - - } - - } - } - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_GC_JOIN) { - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* Return to IDLE state. */ - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - else { - //p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - /* one more scan */ - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - } - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventJoinComplete */ - - - -VOID -p2pFsmRunEventMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)prMsgHdr; - - p2pFuncMgmtFrameRegister(prAdapter, - prMgmtFrameRegister->u2FrameType, - prMgmtFrameRegister->fgIsRegister, - &prP2pFsmInfo->u4P2pPacketFilter); - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtFrameRegister */ - - - - -#if 0 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDeauthentication ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - if (!prStaRec) { - break; - } - - - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - if (prStaRec->ucStaState == STA_STATE_1) { - break; - } - - DBGLOG(P2P, TRACE, ("RX Deauth\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - prStaRec->u2ReasonCode = u2ReasonCode; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDeauthFrame->aucInfoElem, - u2IELength, - u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (authProcessRxDeauthFrame(prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - /* Findout why someone sent deauthentication frame to us. */ - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("Deauth Reason:%d\n", u2ReasonCode)); - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDeauthentication */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDisassociation ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prStaRec->ucStaState == STA_STATE_1) { - - break; - } - - DBGLOG(P2P, TRACE, ("RX Disassoc\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDisassocFrame->aucInfoElem, - u2IELength, - prStaRec->u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, prStaRec->u2ReasonCode); - - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - ASSERT(FALSE); - break; - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDisassociation */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when a probe request frame is received. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is accepted & need cancel scan request. -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxProbeResponseFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL) && (prBssDesc != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - /* There is a connection request. */ - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxProbeResponseFrame */ - - - - - - -VOID -p2pFsmRunEventBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconTimeout: Beacon Timeout\n")); - - /* Only client mode would have beacon lost event. */ - ASSERT(prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE); - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DISASSOC_INACTIVITY); - - if (prP2pBssInfo->prStaRecOfAP != NULL) { - P_STA_RECORD_T prStaRec = prP2pBssInfo->prStaRecOfAP; - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_DISASSOC_LEAVING_BSS); - - //20120830 moved into p2pFuncDisconnect() - //cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - - } - } - } while (FALSE); - - return; -} /* p2pFsmRunEventBeaconTimeout */ - - - - -#if CFG_SUPPORT_WFD -VOID -p2pFsmRunEventWfdSettingUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgSettings = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - WLAN_STATUS rStatus; - - - DBGLOG(P2P, INFO,("p2pFsmRunEventWfdSettingUpdate\n")); - - do { - ASSERT_BREAK((prAdapter != NULL)); - - if (prMsgHdr != NULL) { - prMsgWfdCfgSettings = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)prMsgHdr; - prWfdCfgSettings = prMsgWfdCfgSettings->prWfdCfgSettings; - } - else { - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - } - - DBGLOG(P2P, INFO,("WFD Enalbe %x info %x state %x flag %x adv %x\n", - prWfdCfgSettings->ucWfdEnable, - prWfdCfgSettings->u2WfdDevInfo, - prWfdCfgSettings->u4WfdState, - prWfdCfgSettings->u4WfdFlag, - prWfdCfgSettings->u4WfdAdvancedFlag)); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_WFD_CTRL, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, - NULL, /* pfCmdTimeoutHandler */ - sizeof(WFD_CFG_SETTINGS_T), /* u4SetQueryInfoLen */ - (PUINT_8)prWfdCfgSettings, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - } while (FALSE); - - return; - -} -/* p2pFsmRunEventWfdSettingUpdate */ - -#endif - - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - // TODO: - } - - } while (FALSE); - - return; - -} /* end of p2pGenerateP2P_IEForAssocReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Probe Request frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - ASSERT(prAdapter); - ASSERT(pucBuf); - - // TODO: - - return; - -} /* end of p2pGenerateP2P_IEForProbReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pCalculateP2P_IELenForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - // TODO: - - return 0; - -} /* end of p2pCalculateP2P_IELenForProbeReq() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_UNSPECIFIED); - - - //20120830 moved into p2puUncDisconnect. - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - - return; -} /* p2pRunEventAAATxFail */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaState; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - eOriMediaState = prP2pBssInfo->eConnectionState; - - if(prStaRec != NULL){ - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - - } - else{ - - break; - - } - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem > P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - rStatus = WLAN_STATUS_RESOURCES; - break; - } - - bssAddStaRecToClientList(prAdapter, prP2pBssInfo, prStaRec); - - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem > P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - rStatus = WLAN_STATUS_RESOURCES; - break; - } - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - /* Update Connected state to FW. */ - if (eOriMediaState != prP2pBssInfo->eConnectionState) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAAComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - /* Glue layer indication. */ - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, TRUE); - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAASuccess */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRxPublicActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_PUBLIC_ACTION_FRAME_T prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - ASSERT(prSwRfb); - ASSERT(prAdapter); - - - - prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)prSwRfb->pvHeader; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - DBGLOG(P2P, TRACE, ("RX Public Action Frame Token:%d.\n", prPublicActionFrame->ucDialogToken)); - - if (prPublicActionFrame->ucCategory != CATEGORY_PUBLIC_ACTION) { - return rWlanStatus; - } - - switch (prPublicActionFrame->ucAction) { - case ACTION_PUBLIC_WIFI_DIRECT: - break; - case ACTION_GAS_INITIAL_REQUEST: - case ACTION_GAS_INITIAL_RESPONSE: - case ACTION_GAS_COMEBACK_REQUEST: - case ACTION_GAS_COMEBACK_RESPONSE: - break; - default: - break; - } - - return rWlanStatus; -} /* p2pRxPublicActionFrame */ - - - -WLAN_STATUS -p2pRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_ACTION_FRAME_T prP2pActionFrame = (P_P2P_ACTION_FRAME_T)NULL; - UINT_8 aucOui[3] = VENDOR_OUI_WFA_SPECIFIC; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pActionFrame = (P_P2P_ACTION_FRAME_T)prSwRfb->pvHeader; - - if (prP2pActionFrame->ucCategory != CATEGORY_VENDOR_SPECIFIC_ACTION) { - DBGLOG(P2P, TRACE, ("RX Action Frame but not vendor specific.\n")); - break; - } - - - if ((prP2pActionFrame->ucOuiType != VENDOR_OUI_TYPE_P2P) || - (prP2pActionFrame->aucOui[0] != aucOui[0]) || - (prP2pActionFrame->aucOui[1] != aucOui[1]) || - (prP2pActionFrame->aucOui[2] != aucOui[2])) { - DBGLOG(P2P, TRACE, ("RX Vendor Specific Action Frame but not P2P Type or not WFA OUI.\n")); - break; - } - - } while (FALSE); - - return rWlanStatus; -} /* p2pRxActionFrame */ - - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ) -{ - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_32 i; - BOOLEAN fgNoaAttrExisted = FALSE; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - prP2pSpecificBssInfo->fgEnableOppPS = prEventUpdateNoaParam->fgEnableOppPS; - prP2pSpecificBssInfo->u2CTWindow = prEventUpdateNoaParam->u2CTWindow; - prP2pSpecificBssInfo->ucNoAIndex = prEventUpdateNoaParam->ucNoAIndex; - prP2pSpecificBssInfo->ucNoATimingCount = prEventUpdateNoaParam->ucNoATimingCount; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->fgEnableOppPS; - - - ASSERT(prP2pSpecificBssInfo->ucNoATimingCount <= P2P_MAXIMUM_NOA_COUNT); - - for (i = 0; i < prP2pSpecificBssInfo->ucNoATimingCount; i++) { - // in used - prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse = - prEventUpdateNoaParam->arEventNoaTiming[i].fgIsInUse; - // count - prP2pSpecificBssInfo->arNoATiming[i].ucCount = - prEventUpdateNoaParam->arEventNoaTiming[i].ucCount; - // duration - prP2pSpecificBssInfo->arNoATiming[i].u4Duration = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Duration; - // interval - prP2pSpecificBssInfo->arNoATiming[i].u4Interval = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Interval; - // start time - prP2pSpecificBssInfo->arNoATiming[i].u4StartTime = - prEventUpdateNoaParam->arEventNoaTiming[i].u4StartTime; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse; - } - - prP2pSpecificBssInfo->fgIsNoaAttrExisted = fgNoaAttrExisted; - - // update beacon content by the change - bssUpdateBeaconContent(prAdapter, ucNetTypeIndex); -} - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_func.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_func.c deleted file mode 100755 index ae70c1415882..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_func.c +++ /dev/null @@ -1,3950 +0,0 @@ -#include "precomp.h" - -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif - - -APPEND_VAR_ATTRI_ENTRY_T txAssocRspAttributesTable[] = { - { (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS) , NULL, p2pFuncAppendAttriStatusForAssocRsp } /* 0 */ // Status - ,{ (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING), NULL, p2pFuncAppendAttriExtListenTiming } /* 8 */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbeRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for requesting scan. There is an option to do ACTIVE or PASSIVE scan. -* -* @param eScanType - Specify the scan type of the scan request. It can be an ACTIVE/PASSIVE -* Scan. -* eChannelSet - Specify the prefered channel set. -* A FULL scan would request a legacy full channel normal scan.(usually ACTIVE). -* A P2P_SOCIAL scan would scan 1+6+11 channels.(usually ACTIVE) -* A SPECIFIC scan would only 1/6/11 channels scan. (Passive Listen/Specific Search) -* ucChannelNum - A specific channel number. (Only when channel is specified) -* eBand - A specific band. (Only when channel is specified) -* -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncRequestScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - - P_MSG_SCN_SCAN_REQ prScanReq = (P_MSG_SCN_SCAN_REQ)NULL; - - DEBUGFUNC("p2pFuncRequestScan()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prScanReqInfo != NULL)); - - if (prScanReqInfo->eChannelSet == SCAN_CHANNEL_SPECIFIED) { - ASSERT_BREAK(prScanReqInfo->ucNumChannelList > 0); - DBGLOG(P2P, LOUD, ("P2P Scan Request Channel:%d\n", prScanReqInfo->arScanChannelList[0].ucChannelNum)); - } - - prScanReq = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - if (!prScanReq) { - ASSERT(0); // Can't trigger SCAN FSM - break; - } - - prScanReq->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_REQ; - prScanReq->ucSeqNum = ++prScanReqInfo->ucSeqNumOfScnMsg; - prScanReq->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanReq->eScanType = prScanReqInfo->eScanType; - prScanReq->eScanChannel = prScanReqInfo->eChannelSet; - prScanReq->u2IELen = 0; - - /* Copy IE for Probe Request. */ - kalMemCopy(prScanReq->aucIE, prScanReqInfo->aucIEBuf, prScanReqInfo->u4BufLength); - prScanReq->u2IELen = (UINT_16)prScanReqInfo->u4BufLength; - - prScanReq->u2ChannelDwellTime = prScanReqInfo->u2PassiveDewellTime; - - switch (prScanReqInfo->eChannelSet) { - case SCAN_CHANNEL_SPECIFIED: - { - UINT_32 u4Idx = 0; - P_RF_CHANNEL_INFO_T prDomainInfo = (P_RF_CHANNEL_INFO_T)prScanReqInfo->arScanChannelList; - - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - - for (u4Idx = 0; u4Idx < prScanReqInfo->ucNumChannelList; u4Idx++) { - prScanReq->arChnlInfoList[u4Idx].ucChannelNum = prDomainInfo->ucChannelNum; - prScanReq->arChnlInfoList[u4Idx].eBand = prDomainInfo->eBand; - prDomainInfo++; - } - - prScanReq->ucChannelListNum = prScanReqInfo->ucNumChannelList; - } - case SCAN_CHANNEL_FULL: - case SCAN_CHANNEL_2G4: - case SCAN_CHANNEL_P2P_SOCIAL: - { - UINT_8 aucP2pSsid[] = P2P_WILDCARD_SSID; - - COPY_SSID(prScanReq->aucSSID, - prScanReq->ucSSIDLength, - prScanReqInfo->rSsidStruct.aucSsid, - prScanReqInfo->rSsidStruct.ucSsidLen); - - /* For compatible. */ - if (EQUAL_SSID(aucP2pSsid, P2P_WILDCARD_SSID_LEN, prScanReq->aucSSID, prScanReq->ucSSIDLength)) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_P2P_WILDCARD; - } - else if (prScanReq->ucSSIDLength != 0) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - } - } - break; - default: - /* Currently there is no other scan channel set. */ - ASSERT(FALSE); - break; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanReq, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncRequestScan */ - -VOID -p2pFuncCancelScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanInfo - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prScanInfo != NULL)); - - if (!prScanInfo->fgIsScanRequest) { - break; - } - - - if (prScanInfo->ucSeqNumOfScnMsg) { - /* There is a channel privilege on hand. */ - DBGLOG(P2P, TRACE, ("P2P Cancel Scan\n")); - - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->ucSeqNum = prScanInfo->ucSeqNumOfScnMsg++; - prScanCancelMsg->fgIsChannelExt = FALSE; - prScanInfo->fgIsScanRequest = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancelMsg, - MSG_SEND_METHOD_BUF); - - - } - - - } while (FALSE); - - return; -} /* p2pFuncCancelScan */ - - -VOID -p2pFuncSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (eOpMode < OP_MODE_NUM)); - - if (prP2pBssInfo->eCurrentOPMode != eOpMode) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to from %d, to %d.\n", prP2pBssInfo->eCurrentOPMode, eOpMode)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); - - p2pFsmRunEventStopAP(prAdapter, NULL); - break; - default: - break; - } - - - prP2pBssInfo->eIntendOPMode = eOpMode; - prP2pBssInfo->eCurrentOPMode = eOpMode; - switch (eOpMode) { - case OP_MODE_INFRASTRUCTURE: - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to Client.\n")); - case OP_MODE_ACCESS_POINT: -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - /* Change interface address. */ - if (eOpMode == OP_MODE_ACCESS_POINT) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to AP.\n")); - prP2pBssInfo->ucSSIDLen = 0; - } - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucInterfaceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucInterfaceAddress); - - - break; - case OP_MODE_P2P_DEVICE: - { - /* Change device address. */ - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch back to P2P Device.\n")); - -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - - - } - break; - default: -// if (IS_BSS_ACTIVE(prP2pBssInfo)) { -// UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - -// nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - ASSERT(FALSE); - break; - } - - if (1) { - P2P_DISCONNECT_INFO rP2PDisInfo; - - rP2PDisInfo.ucRole = 2; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_P2P_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(P2P_DISCONNECT_INFO), - (PUINT_8)&rP2PDisInfo, - NULL, - 0); - } - - - DBGLOG(P2P, TRACE, ("The device address is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucOwnMacAddr))); - DBGLOG(P2P, TRACE, ("The BSSID is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucBSSID))); - - /* Update BSS INFO to FW. */ - if ((fgSyncToFW) && (eOpMode != OP_MODE_ACCESS_POINT)) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - } - - } while (FALSE); - - return; -} /* p2pFuncSwitchOPMode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will start a P2P Group Owner and send Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncStartGO ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && (prBssInfo != NULL)); - - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - DBGLOG(P2P, TRACE, ("p2pFuncStartGO:\n")); - - /* AP mode started. */ - p2pFuncSwitchOPMode(prAdapter, prBssInfo, prBssInfo->eIntendOPMode, FALSE); - - prBssInfo->eIntendOPMode = OP_MODE_NUM; - - //4 <1.1> Assign SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - pucSsidBuf, - ucSsidLen); - - DBGLOG(P2P, TRACE, ("GO SSID:%s \n", prBssInfo->aucSSID)); - - //4 <1.2> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - - //4 <1.3> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = ucChannelNum; - prBssInfo->eBand = eBand; - prBssInfo->eBssSCO = eSco; - - DBGLOG(P2P, TRACE, ("GO Channel:%d \n", ucChannelNum)); - - - if (prBssInfo->eBand == BAND_5G) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else if (fgIsPureAP) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11GN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (prBssInfo->ucAllSupportedRatesLen == 0) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - if (!fgIsPureAP) { - prBssInfo->fgIsProtection = TRUE; /* Always enable protection at P2P GO */ - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - } - else { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) - prBssInfo->fgIsProtection = TRUE; - } - - // 20120106 frog: I want separate OP_Mode & Beacon TX Function. - //p2pFuncSwitchOPMode(prAdapter, prBssInfo, OP_MODE_ACCESS_POINT, FALSE); - - bssInitForAP(prAdapter, prBssInfo, FALSE); - - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif /* CFG_SUPPORT_AAA */ - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - - //4 <3.2> Reset HW TSF Update Mode and Beacon Mode - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.3> Update Beacon again for network phy type confirmed. - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.4> Setup BSSID - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - - } while (FALSE); - - return; -} /* p2pFuncStartGO() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncReleaseCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_ABORT_T prMsgChRelease = (P_MSG_CH_ABORT_T)NULL; - - DEBUGFUNC("p2pFuncReleaseCh()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - if (!prChnlReqInfo->fgIsChannelRequested) { - break; - } - else { - DBGLOG(P2P, TRACE, ("P2P Release Channel\n")); - prChnlReqInfo->fgIsChannelRequested = FALSE; - } - - /* 1. return channel privilege to CNM immediately */ - prMsgChRelease = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChRelease) { - ASSERT(0); // Can't release Channel to CNM - break; - } - - prMsgChRelease->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChRelease->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChRelease->ucTokenID = prChnlReqInfo->ucSeqNumOfChReq++; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChRelease, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncReleaseCh */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of CHANNEL_REQ_JOIN Initial. Enter CHANNEL_REQ_JOIN State. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncAcquireCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_REQ_T prMsgChReq = (P_MSG_CH_REQ_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - break; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChReq->ucTokenID = ++prChnlReqInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = prChnlReqInfo->u4MaxInterval; - - prMsgChReq->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prMsgChReq->eRfSco = prChnlReqInfo->eChnlSco; - prMsgChReq->eRfBand = prChnlReqInfo->eBand; - - kalMemZero(prMsgChReq->aucBSSID, MAC_ADDR_LEN); - - /* Channel request join BSSID. */ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prChnlReqInfo->fgIsChannelRequested = TRUE; - - } while (FALSE); - - return; -} /* p2pFuncAcquireCh */ - -#if 0 -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnHdr, - IN UINT_32 u4HdrLen, - IN PUINT_8 pucBcnBody, - IN UINT_32 u4BodyLen, - IN UINT_32 u4DtimPeriod, - IN UINT_32 u4BcnInterval) -{ - WLAN_STATUS rResultStatus = WLAN_STATUS_INVALID_DATA; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucTIMBody = (PUINT_8)NULL; - UINT_16 u2FrameLength = 0, UINT_16 u2OldBodyLen = 0; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnMsduInfo = prP2pBssInfo->prBeacon - - ASSERT_BREAK(prBcnMsduInfo != NULL); - - /* TODO: Find TIM IE pointer. */ - prBcnFrame = prBcnMsduInfo->prPacket; - - ASSERT_BREAK(prBcnFrame != NULL); - - do { - /* Ori header. */ - UINT_16 u2IELength = 0, u2Offset = 0; - PUINT_8 pucIEBuf = prBcnFrame->aucInfoElem; - - u2IELength = prBcnMsduInfo->u2FrameLength - prBcnMsduInfo->ucMacHeaderLength; - - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - if ((IE_ID(pucIEBuf) == ELEM_ID_TIM) || - ((IE_ID(pucIEBuf) > ELEM_ID_IBSS_PARAM_SET)) { - pucTIMBody = pucIEBuf; - break - } - u2FrameLength += IE_SIZE(pucIEBuf); - } - - if (pucTIMBody == NULL) { - pucTIMBody = pucIEBuf; - } - - /* Body not change. */ - u2OldBodyLen = (UINT_16)((UINT_32)pucTIMBody - (UINT_32)prBcnFrame->aucInfoElem); - - // Move body. - kalMemCmp(aucIEBuf, pucTIMBody, u2OldBodyLen); - } while (FALSE); - - - if (pucBcnHdr) { - kalMemCopy(prBcnMsduInfo->prPacket, pucBcnHdr, u4HdrLen); - - pucTIMBody = (PUINT_8)((UINT_32)prBcnMsduInfo->prPacket + u4HdrLen); - - prBcnMsduInfo->ucMacHeaderLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - u2FrameLength = u4HdrLen; /* Header + Partial Body. */ - - } - else { - /* Header not change. */ - u2FrameLength += prBcnMsduInfo->ucMacHeaderLength; - } - - - if (pucBcnBody) { - kalMemCopy(pucTIMBody, pucBcnBody, u4BodyLen); - u2FrameLength += (UINT_16)u4BodyLen; - } - else { - kalMemCopy(pucTIMBody, aucIEBuf, u2OldBodyLen); - u2FrameLength += u2OldBodyLen; - } - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = u2FrameLength; - - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - prP2pBssInfo->u2BeaconInterval = (UINT_16)u4BcnInterval; - prP2pBssInfo->ucDTIMPeriod = (UINT_8)u4DtimPeriod; - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - prBcnMsduInfo->ucPacketType = 3; - - rResultStatus = nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prP2pBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* AP is created, Beacon Update. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rResultStatus; -} /* p2pFuncBeaconUpdate */ - -#else -WLAN_STATUS -p2pFuncBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (prBcnUpdateInfo != NULL)); - - prBcnMsduInfo = prP2pBssInfo->prBeacon; - -#if DBG - if (prBcnUpdateInfo->pucBcnHdr != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnHdr == ((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD)); - } - - if (prBcnUpdateInfo->pucBcnBody != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnBody == ((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen)); - } -#endif - prBcnFrame = (P_WLAN_BEACON_FRAME_T)((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD); - - if (!pucNewBcnBody) { - /* Old body. */ - pucNewBcnBody = prBcnUpdateInfo->pucBcnBody; - ASSERT(u4NewBodyLen == 0); - u4NewBodyLen = prBcnUpdateInfo->u4BcnBodyLen; - } - else { - prBcnUpdateInfo->u4BcnBodyLen = u4NewBodyLen; - } - - /* Temp buffer body part. */ - kalMemCopy(aucIEBuf, pucNewBcnBody, u4NewBodyLen); - - if (pucNewBcnHdr) { - kalMemCopy(prBcnFrame, pucNewBcnHdr, u4NewHdrLen); - prBcnUpdateInfo->pucBcnHdr = (PUINT_8)prBcnFrame; - prBcnUpdateInfo->u4BcnHdrLen = u4NewHdrLen; - } - - pucIEBuf = (PUINT_8)((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen); - kalMemCopy(pucIEBuf, aucIEBuf, u4NewBodyLen); - prBcnUpdateInfo->pucBcnBody = pucIEBuf; - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = (UINT_16)(prBcnUpdateInfo->u4BcnHdrLen + prBcnUpdateInfo->u4BcnBodyLen); - - prBcnMsduInfo->ucPacketType = 3; - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - - /* Update BSS INFO related information. */ - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prBcnFrame->aucSrcAddr); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prBcnFrame->aucBSSID); - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - - p2pFuncParseBeaconContent(prAdapter, - prP2pBssInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); - -#if 1 - //bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); -#else - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBcnFrame->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); -#endif - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncBeaconUpdate */ - -#endif - -// TODO: We do not apply IE in deauth frame set from upper layer now. -WLAN_STATUS -p2pFuncDeauth ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDeauth - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDeauth, u2ReasonCode); - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDeauth */ - -// TODO: We do not apply IE in disassoc frame set from upper layer now. -WLAN_STATUS -p2pFuncDisassoc ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDisassoc - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - //20120830 moved into p2pFuncDisconnect(). - //cnmStaRecFree(prAdapter, prCliStaRec, TRUE); - - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDisassoc */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - DEBUGFUNC("p2pFuncDissolve()"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pBssInfo != NULL)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - /* Reset station record status. */ - if (prP2pBssInfo->prStaRecOfAP) { - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DEAUTH_LEAVING_BSS); - - // 2012/02/14 frog: After formation before join group, prStaRecOfAP is NULL. - p2pFuncDisconnect(prAdapter, - prP2pBssInfo->prStaRecOfAP, - fgSendDeauth, - u2ReasonCode); - } - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - break; - case OP_MODE_ACCESS_POINT: - /* Under AP mode, we would net send deauthentication frame to each STA. - * We only stop the Beacon & let all stations timeout. - */ - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - NULL, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)NULL); - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - while (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_REMOVE_HEAD(prStaRecOfClientList, prCurrStaRec, P_STA_RECORD_T); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - p2pFuncDisconnect(prAdapter, prCurrStaRec, TRUE, u2ReasonCode); - - } - - } - - break; - default: - return; // 20110420 -- alreay in Device Mode. - } - - /* Make the deauth frame send to FW ASAP. */ - wlanAcquirePowerControl(prAdapter); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - wlanReleasePowerControl(prAdapter); - - kalMdelay(100); - - /* Change Connection Status. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - } while (FALSE); - - return; -} /* p2pFuncDissolve */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDisconnect ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - DBGLOG(P2P, TRACE, ("p2pFuncDisconnect()")); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - /* Indicate disconnect. */ - // TODO: -// kalP2PGOStationUpdate -// kalP2PGCIndicateConnectionStatus - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, prStaRec->aucMacAddr); - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - } - - if (fgSendDeauth) { - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - prStaRec, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)p2pFsmRunEventDeauthTxDone); - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - - } - else { - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* GO: It would stop Beacon TX. GC: Stop all BSS related PS function. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - } while (FALSE); - - return; - -} /* p2pFuncDisconnect */ - - - - - - -WLAN_STATUS -p2pFuncTxMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prTxMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxReqInfo != NULL)); - - if (prMgmtTxReqInfo->fgIsMgmtTxRequested) { - - // 1. prMgmtTxReqInfo->prMgmtTxMsdu != NULL - /* Packet on driver, not done yet, drop it. */ - if ((prTxMsduInfo = prMgmtTxReqInfo->prMgmtTxMsdu) != NULL) { - - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - FALSE, - prTxMsduInfo->prPacket, - (UINT_32)prTxMsduInfo->u2FrameLength); - - // Leave it to TX Done handler. - //cnmMgtPktFree(prAdapter, prTxMsduInfo); - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - // 2. prMgmtTxReqInfo->prMgmtTxMsdu == NULL - /* Packet transmitted, wait tx done. (cookie issue) */ - // 20120105 frog - use another u8cookie to store this value. - - } - - ASSERT(prMgmtTxReqInfo->prMgmtTxMsdu == NULL); - - - - prWlanHdr = (P_WLAN_MAC_HEADER_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - prStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_P2P_INDEX, prWlanHdr->aucAddr1); - prMgmtTxMsdu->ucNetworkType = (UINT_8)NETWORK_TYPE_P2P_INDEX; - - switch (prWlanHdr->u2FrameCtrl & MASK_FRAME_TYPE) { - case MAC_FRAME_PROBE_RSP: - DBGLOG(P2P, TRACE, ("p2pFuncTxMgmtFrame: TX MAC_FRAME_PROBE_RSP\n")); - prMgmtTxMsdu = p2pFuncProcessP2pProbeRsp(prAdapter, prMgmtTxMsdu); - break; - default: - break; - } - - - prMgmtTxReqInfo->u8Cookie = u8Cookie; - prMgmtTxReqInfo->prMgmtTxMsdu = prMgmtTxMsdu; - prMgmtTxReqInfo->fgIsMgmtTxRequested = TRUE; - - prMgmtTxMsdu->eSrc = TX_PACKET_MGMT; - prMgmtTxMsdu->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMgmtTxMsdu->ucStaRecIndex = (prStaRec != NULL)?(prStaRec->ucIndex):(0xFF); - if (prStaRec != NULL) { - DBGLOG(P2P, TRACE, ("Mgmt with station record: "MACSTR" .\n", MAC2STR(prStaRec->aucMacAddr))); - } - - prMgmtTxMsdu->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; // TODO: undcertain. - prMgmtTxMsdu->fgIs802_1x = FALSE; - prMgmtTxMsdu->fgIs802_11 = TRUE; - prMgmtTxMsdu->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMgmtTxMsdu->pfTxDoneHandler = p2pFsmRunEventMgmtFrameTxDone; - prMgmtTxMsdu->fgIsBasicRate = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt seq NO. %d .\n", prMgmtTxMsdu->ucTxSeqNum)); - - nicTxEnqueueMsdu(prAdapter, prMgmtTxMsdu); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncTxMgmtFrame */ - - - -VOID -p2pFuncSetChannel ( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prRfChannelInfo != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnSettings->ucOperatingChnl = prRfChannelInfo->ucChannelNum; - prP2pConnSettings->eBand = prRfChannelInfo->eBand; - - - } while (FALSE); - - return; -} -/* p2pFuncSetChannel */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncRetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - BOOLEAN fgRetValue = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prStaRec != NULL) && - (prJoinInfo != NULL)); - - /* Retry other AuthType if possible */ - if (!prJoinInfo->ucAvailableAuthTypes) { - break; - } - - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(P2P, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - break; - } - - prJoinInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - ASSERT(0); // Can't trigger SAA FSM - break; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - fgRetValue = TRUE; - } while (FALSE); - - return fgRetValue; - - - -}/* end of p2pFuncRetryJOIN() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("p2pUpdateBssInfoForJOIN()"); - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - DBGLOG(P2P, INFO, ("Update P2P_BSS_INFO_T and apply settings to MAC\n")); - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prP2pBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - if (prBssDesc == NULL) { - /* Target BSS NULL. */ - DBGLOG(P2P, TRACE,("Target BSS NULL\n")); - return; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAssocRspFrame->aucBSSID)) { - ASSERT(FALSE); - } - - //4 <1.3> Setup Channel, Band - prP2pBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prP2pBssInfo->eBand = prBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prP2pBssInfo->prStaRecOfAP = prStaRec; - prP2pBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prP2pBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prP2pBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prP2pBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prP2pBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prP2pBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prP2pBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prP2pBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prP2pBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prP2pBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - ASSERT(prBssDesc); - - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prP2pBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prP2pBssInfo->ucDTIMPeriod = 0; - prP2pBssInfo->u2ATIMWindow = 0; - - prP2pBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of p2pUpdateBssInfoForJOIN() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = TRUE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - - DBGLOG(P2P, TRACE, ("p2pValidate Authentication Frame\n")) - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pprStaRec != NULL) && - (pu2StatusCode != NULL)); - - /* P2P 3.2.8 */ - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* We are not under AP Mode yet. */ - fgReplyAuth = FALSE; - DBGLOG(P2P, WARN, ("Current OP mode is not under AP mode. (%d)\n", prP2pBssInfo->eCurrentOPMode)); - break; - } - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX, - prAuthFrame->aucSrcAddr); - - if (!prStaRec) { - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - /* Sent a message event to clean un-used STA_RECORD_T. */ - ASSERT(prStaRec); - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - prStaRec->u2BSSBasicRateSet = prP2pBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = RATE_SET_ERP_P2P; - - prStaRec->u2OperationalRateSet = RATE_SET_ERP_P2P; - prStaRec->ucPhyTypeSet = PHY_TYPE_SET_802_11GN; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - else { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - if ((prStaRec->ucStaState > STA_STATE_1) && (IS_STA_IN_P2P(prStaRec))) { - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - } - - } - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem > P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - /* GROUP limit full. */ - /* P2P 3.2.8 */ - DBGLOG(P2P, WARN, ("Group Limit Full. (%d)\n", (INT_16)prP2pBssInfo->rStaRecOfClientList.u4NumElem)); - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - - cnmStaRecFree(prAdapter, prStaRec, FALSE); - break; - } - else { - /* Hotspot Blacklist */ - if(prAuthFrame->aucSrcAddr) { - if(kalP2PCmpBlackList(prAdapter->prGlueInfo, prAuthFrame->aucSrcAddr)) { - fgReplyAuth = FALSE; - return fgReplyAuth; - } - } - } - - //prStaRec->eStaType = STA_TYPE_INFRA_CLIENT; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - prStaRec->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - prStaRec->ucJoinFailureCount = 0; - - *pprStaRec = prStaRec; - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - - - return fgReplyAuth; - -} /* p2pFuncValidateAuth */ - - - - -VOID -p2pFuncResetStaRecStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - do { - if ((prAdapter == NULL) || (prStaRec == NULL)) { - ASSERT(FALSE); - break; - } - - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - - } while (FALSE); - - return; -} /* p2pFuncResetStaRecStatus */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to initialize the value of the connection settings for -* P2P network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncInitConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ) -{ - P_DEVICE_TYPE_T prDevType; - UINT_8 aucDefaultDevName[] = P2P_DEFAULT_DEV_NAME; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - ASSERT(prP2PConnSettings); - - /* Setup Default Device Name */ - prP2PConnSettings->ucDevNameLen = P2P_DEFAULT_DEV_NAME_LEN; - kalMemCopy(prP2PConnSettings->aucDevName, aucDefaultDevName, sizeof(aucDefaultDevName)); - - /* Setup Primary Device Type (Big-Endian) */ - prDevType = &prP2PConnSettings->rPrimaryDevTypeBE; - - prDevType->u2CategoryId = HTONS(P2P_DEFAULT_PRIMARY_CATEGORY_ID); - prDevType->u2SubCategoryId = HTONS(P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID); - - prDevType->aucOui[0] = aucWfaOui[0]; - prDevType->aucOui[1] = aucWfaOui[1]; - prDevType->aucOui[2] = aucWfaOui[2]; - prDevType->aucOui[3] = VENDOR_OUI_TYPE_WPS; - - /* Setup Secondary Device Type */ - prP2PConnSettings->ucSecondaryDevTypeCount = 0; - - /* Setup Default Config Method */ - prP2PConnSettings->eConfigMethodSelType = ENUM_CONFIG_METHOD_SEL_AUTO; - prP2PConnSettings->u2ConfigMethodsSupport = P2P_DEFAULT_CONFIG_METHOD; - prP2PConnSettings->u2TargetConfigMethod = 0; - prP2PConnSettings->u2LocalConfigMethod = 0; - prP2PConnSettings->fgIsPasswordIDRdy = FALSE; - - /* For Device Capability */ - prP2PConnSettings->fgSupportServiceDiscovery = FALSE; - prP2PConnSettings->fgSupportClientDiscoverability = TRUE; - prP2PConnSettings->fgSupportConcurrentOperation = TRUE; - prP2PConnSettings->fgSupportInfraManaged = FALSE; - prP2PConnSettings->fgSupportInvitationProcedure = FALSE; - - /* For Group Capability */ -#if CFG_SUPPORT_PERSISTENT_GROUP - prP2PConnSettings->fgSupportPersistentP2PGroup = TRUE; -#else - prP2PConnSettings->fgSupportPersistentP2PGroup = FALSE; -#endif - prP2PConnSettings->fgSupportIntraBSSDistribution = TRUE; - prP2PConnSettings->fgSupportCrossConnection = TRUE; - prP2PConnSettings->fgSupportPersistentReconnect = FALSE; - - prP2PConnSettings->fgSupportOppPS = FALSE; - prP2PConnSettings->u2CTWindow = P2P_CTWINDOW_DEFAULT; - - /* For Connection Settings. */ - prP2PConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prP2PConnSettings->prTargetP2pDesc = NULL; - prP2PConnSettings->ucSSIDLen = 0; - - /* Misc */ - prP2PConnSettings->fgIsScanReqIssued = FALSE; - prP2PConnSettings->fgIsServiceDiscoverIssued = FALSE; - prP2PConnSettings->fgP2pGroupLimit = FALSE; - prP2PConnSettings->ucOperatingChnl = 0; - prP2PConnSettings->ucListenChnl = 0; - prP2PConnSettings->ucTieBreaker = (UINT_8)(kalRandomNumber() & 0x1); - - prP2PConnSettings->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - return; -} /* p2pFuncInitConnectionSettings */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = TRUE; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; -#if CFG_SUPPORT_WFD - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_WFD_ATTRIBUTE_T prWfdAttribute = (P_WFD_ATTRIBUTE_T)NULL; - BOOLEAN fgNeedFree = FALSE; -#endif - - - /* TODO(Kevin): Call P2P functions to check .. - 2. Check we can accept connection from thsi peer - a. If we are in PROVISION state, only accept the peer we do the GO formation previously. - b. If we are in OPERATION state, only accept the other peer when P2P_GROUP_LIMIT is 0. - 3. Check Black List here. - */ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pu2StatusCode != NULL)); - - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)prSwRfb->pvHeader; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - /* Station record should be ready while RX AUTH frame. */ - fgReplyAssocResp = FALSE; - ASSERT(FALSE); - break; - } - else { - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - prStaRec->u2DesiredNonHTRateSet &= prP2pBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prP2pBssInfo->ucPhyTypeSet; - - if (prStaRec->ucDesiredPhyTypeSet == 0) { - /* The station only support 11B rate. */ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - -#if CFG_SUPPORT_WFD && 1 - //LOG_FUNC("Skip check WFD IE becasue some API is not ready\n"); /* Eddie */ - if (!prAdapter->rWifiVar.prP2pFsmInfo) { - fgReplyAssocResp = FALSE; - ASSERT(FALSE); - break; - } - - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - DBGLOG(P2P, INFO,("Current WfdCfgSettings wfd_en %u wfd_info 0x%x wfd_policy 0x%x wfd_flag 0x%x\n", - prWfdCfgSettings->ucWfdEnable, prWfdCfgSettings->u2WfdDevInfo, - prWfdCfgSettings->u4WfdPolicy, prWfdCfgSettings->u4WfdFlag)); /* Eddie */ - if (prWfdCfgSettings->ucWfdEnable) { - if (prWfdCfgSettings->u4WfdPolicy & BIT(6)) { - /* Rejected all. */ - break; - } - else { - - //UINT_16 u2AttriListLen = 0; - UINT_16 u2WfdDevInfo = 0; - P_WFD_DEVICE_INFORMATION_IE_T prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)NULL; - - //fgNeedFree = p2pFuncGetAttriList(prAdapter, - // VENDOR_OUI_TYPE_WFD, - // (PUINT_8)prAssocReqFrame->aucInfoElem, - // (prSwRfb->u2PacketLen - OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem)), - // (PPUINT_8)&prWfdAttribute, - // &u2AttriListLen); - - prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T) - p2pFuncGetSpecAttri(prAdapter, - VENDOR_OUI_TYPE_WFD, - (PUINT_8)prAssocReqFrame->aucInfoElem, - (prSwRfb->u2PacketLen - OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem)), - WFD_ATTRI_ID_DEV_INFO); - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(5)) && (prAttriWfdDevInfo != NULL)) { - /* Rejected with WFD IE. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(0)) && (prAttriWfdDevInfo == NULL)) { - /* Rejected without WFD IE. */ - break; - } - - if (prAttriWfdDevInfo != NULL) { - - //prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)p2pFuncGetSpecAttri(prAdapter, - // VENDOR_OUI_TYPE_WFD, - // (PUINT_8)prWfdAttribute, - // u2AttriListLen, - // WFD_ATTRI_ID_DEV_INFO); - //if (prAttriWfdDevInfo == NULL) { - // /* No such attribute. */ - // break; - //} - - WLAN_GET_FIELD_BE16(&prAttriWfdDevInfo->u2WfdDevInfo, &u2WfdDevInfo); - DBGLOG(P2P, INFO,("RX Assoc Req WFD Info:0x%x.\n", u2WfdDevInfo)); - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(1)) && ((u2WfdDevInfo & 0x3) == 0x0)) { - /* Rejected because of SOURCE. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(2)) && ((u2WfdDevInfo & 0x3) == 0x1)) { - /* Rejected because of Primary Sink. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(3)) && ((u2WfdDevInfo & 0x3) == 0x2)) { - /* Rejected because of Secondary Sink. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(4)) && ((u2WfdDevInfo & 0x3) == 0x3)) { - /* Rejected because of Source & Primary Sink. */ - break; - } - - /* Check role */ - - if(prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) { - - if((prWfdCfgSettings->u2WfdDevInfo & BITS(0,1)) == 0x3) { - //P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgUpdate = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - UINT_16 u2DevInfo = prWfdCfgSettings->u2WfdDevInfo; - - /* We may change role here if we are dual role */ - - if((u2WfdDevInfo & BITS(0,1)) == 0x00 /* Peer is Source*/) { - DBGLOG(P2P, INFO,("WFD: Switch role to primary sink\n")); - - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - prWfdCfgSettings->u2WfdDevInfo |= 0x1; - - /* event to annonce the role is chanaged to P-Sink */ - - } - else if((u2WfdDevInfo & BITS(0,1)) == 0x01 /* Peer is P-Sink */) { - - DBGLOG(P2P, INFO,("WFD: Switch role to source\n")); - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - /* event to annonce the role is chanaged to Source */ - } - else { - - DBGLOG(P2P, INFO,("WFD: Peer role is wrong type(dev 0x%x)\n", (u2DevInfo))); - DBGLOG(P2P, INFO,("WFD: Switch role to source\n")); - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - /* event to annonce the role is chanaged to Source */ - } - - p2pFsmRunEventWfdSettingUpdate (prAdapter,NULL); - - } /* Dual role p2p->wfd_params->WfdDevInfo */ - } /* WFD_FLAG_DEV_INFO_VALID */ - - - } - else { - /* Without WFD IE. - * Do nothing. Accept the connection request. - */ - } - } - - } /* ucWfdEnable */ - -#endif - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - -#if CFG_SUPPORT_WFD - if ((prWfdAttribute) && (fgNeedFree)) { - kalMemFree(prWfdAttribute, VIR_MEM_TYPE, WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE); - } -#endif - - return fgReplyAssocResp; - -} /* p2pFuncValidateAssocReq */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to check the P2P IE -* -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncParseCheckForP2PInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - P_IE_WFA_T prWfaIE = (P_IE_WFA_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pucOuiType != NULL)); - - prWfaIE = (P_IE_WFA_T)pucBuf; - - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - - return TRUE; - } while (FALSE); - - return FALSE; -} /* p2pFuncParseCheckForP2PInfoElem */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - BOOLEAN fgIsReplyProbeRsp = FALSE; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - DBGLOG(P2P, TRACE, ("p2pFuncValidateProbeReq\n")); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_PROBE_REQ) { - - printk("p2pFuncValidateProbeReq\n"); - - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return fgIsReplyProbeRsp; - -} /* end of p2pFuncValidateProbeReq() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncValidateRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_ACTION_FRAME) { - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return; - -} /* p2pFuncValidateRxMgmtFrame */ - - - -BOOLEAN -p2pFuncIsAPMode ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - if (prP2pFsmInfo) { - if(prP2pFsmInfo->fgIsWPSMode == 1){ - return FALSE; - } - return prP2pFsmInfo->fgIsApMode; - } - else { - return FALSE; - } -} -/* p2pFuncIsAPMode */ - - - -VOID -p2pFuncParseBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ) -{ - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - BOOL ucNewSecMode = FALSE; - BOOL ucOldSecMode = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL)); - - if (u4IELen == 0) { - break; - } - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pSpecificBssInfo->u2AttributeLen = 0; - - ASSERT_BREAK(pucIEInfo != NULL); - - pucIE = pucIEInfo; - - ucOldSecMode = kalP2PGetCipher(prAdapter->prGlueInfo); - - IE_FOR_EACH(pucIE, u4IELen, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: /* 0 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("SSID update\n")); - - /* Update when starting GO. */ - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - COPY_SSID(prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - } - break; - case ELEM_ID_SUP_RATES: /* 1 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("Support Rate IE\n")); - kalMemCopy(prP2pBssInfo->aucAllSupportedRates, - SUP_RATES_IE(pucIE)->aucSupportedRates, - SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen = SUP_RATES_IE(pucIE)->ucLength; - - DBGLOG_MEM8(P2P, TRACE, SUP_RATES_IE(pucIE)->aucSupportedRates, SUP_RATES_IE(pucIE)->ucLength); - } - break; - case ELEM_ID_DS_PARAM_SET: /* 3 */ /* V */ /* Done */ - { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("DS PARAM IE\n")); - - ASSERT(prP2pConnSettings->ucOperatingChnl == DS_PARAM_IE(pucIE)->ucCurrChnl); - - if (prP2pConnSettings->eBand != BAND_2G4) { - ASSERT(FALSE); - break; - } - - //prP2pBssInfo->ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - - //prP2pBssInfo->eBand = BAND_2G4; - } - break; - case ELEM_ID_TIM: /* 5 */ /* V */ - DBGLOG(P2P, TRACE, ("TIM IE\n")); - TIM_IE(pucIE)->ucDTIMPeriod = prP2pBssInfo->ucDTIMPeriod; - break; - case ELEM_ID_ERP_INFO: /* 42 */ /* V */ - { -#if 1 - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE will be over write by driver\n")); - DBGLOG(P2P, TRACE, (" ucERP: %x. \n", ERP_INFO_IE(pucIE)->ucERP)); - -#else - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE.\n")); - - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11GN; - - ASSERT(prP2pBssInfo->eBand == BAND_2G4); - - prP2pBssInfo->fgObssErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & ERP_INFO_USE_PROTECTION)? TRUE : FALSE); - - prP2pBssInfo->fgErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & (ERP_INFO_USE_PROTECTION | ERP_INFO_NON_ERP_PRESENT))? TRUE : FALSE); -#endif - - } - break; - case ELEM_ID_HT_CAP: /* 45 */ /* V */ - { -#if 1 - DBGLOG(P2P, TRACE, ("HT CAP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, ("HT Cap Info:%x, AMPDU Param:%x\n", HT_CAP_IE(pucIE)->u2HtCapInfo, HT_CAP_IE(pucIE)->ucAmpduParam)); - - DBGLOG(P2P, TRACE, ("HT Extended Cap Info:%x, TX Beamforming Cap Info:%lx, Ant Selection Cap Info%x \n", - HT_CAP_IE(pucIE)->u2HtExtendedCap, - HT_CAP_IE(pucIE)->u4TxBeamformingCap, - HT_CAP_IE(pucIE)->ucAselCap)); -#else - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - /* u2HtCapInfo */ - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SUP_CHNL_WIDTH | HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M)) == 0) { - prP2pBssInfo->fgAssoc40mBwAllowed = FALSE; - } - else { - prP2pBssInfo->fgAssoc40mBwAllowed = TRUE; - } - - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M)) == 0) { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - } - else { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = FALSE; - } - - /* ucAmpduParam */ - DBGLOG(P2P, TRACE, ("AMPDU setting from supplicant:0x%x, & default value:0x%x\n", (UINT_8)HT_CAP_IE(pucIE)->ucAmpduParam, (UINT_8)AMPDU_PARAM_DEFAULT_VAL)); - - /* rSupMcsSet */ - /* Can do nothing. the field is default value from other configuration. */ - //HT_CAP_IE(pucIE)->rSupMcsSet; - - /* u2HtExtendedCap */ - ASSERT(HT_CAP_IE(pucIE)->u2HtExtendedCap == (HT_EXT_CAP_DEFAULT_VAL & ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE))); - - /* u4TxBeamformingCap */ - ASSERT(HT_CAP_IE(pucIE)->u4TxBeamformingCap == TX_BEAMFORMING_CAP_DEFAULT_VAL); - - /* ucAselCap */ - ASSERT(HT_CAP_IE(pucIE)->ucAselCap == ASEL_CAP_DEFAULT_VAL); -#endif - } - break; - case ELEM_ID_RSN: /* 48 */ /* V */ - { - RSN_INFO_T rRsnIe; - - DBGLOG(P2P, TRACE, ("RSN IE\n")); - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - ucNewSecMode = TRUE; - - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &rRsnIe)) { - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - prP2pBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; - prP2pBssInfo->u2RsnSelectedCapInfo = rRsnIe.u2RsnCap; - } - } - break; - case ELEM_ID_EXTENDED_SUP_RATES: /* 50 */ /* V */ - /* Be attention, ELEM_ID_SUP_RATES should be placed before ELEM_ID_EXTENDED_SUP_RATES. */ - DBGLOG(P2P, TRACE, ("Ex Support Rate IE\n")); - kalMemCopy(&(prP2pBssInfo->aucAllSupportedRates[prP2pBssInfo->ucAllSupportedRatesLen]), - EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, - EXT_SUP_RATES_IE(pucIE)->ucLength); - - DBGLOG_MEM8(P2P, TRACE, EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, EXT_SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen += EXT_SUP_RATES_IE(pucIE)->ucLength; - break; - case ELEM_ID_HT_OP: /* 61 */ /* V */ // TODO: - { -#if 1 - DBGLOG(P2P, TRACE, ("HT OP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, (" Primary Channel: %x, Info1: %x, Info2: %x, Info3: %x\n", - HT_OP_IE(pucIE)->ucPrimaryChannel, - HT_OP_IE(pucIE)->ucInfo1, - HT_OP_IE(pucIE)->u2Info2, - HT_OP_IE(pucIE)->u2Info3)); -#else - UINT_16 u2Info2 = 0; - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - DBGLOG(P2P, TRACE, ("HT OP IE\n")); - - /* ucPrimaryChannel. */ - ASSERT(HT_OP_IE(pucIE)->ucPrimaryChannel == prP2pBssInfo->ucPrimaryChannel); - - /* ucInfo1 */ - prP2pBssInfo->ucHtOpInfo1 = HT_OP_IE(pucIE)->ucInfo1; - - /* u2Info2 */ - u2Info2 = HT_OP_IE(pucIE)->u2Info2; - - if (u2Info2 & HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - ASSERT(prP2pBssInfo->eGfOperationMode != GF_MODE_NORMAL); - u2Info2 &= ~HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (u2Info2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) { - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - u2Info2 &= ~HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - switch (u2Info2 & HT_OP_INFO2_HT_PROTECTION) { - case HT_PROTECT_MODE_NON_HT: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NON_HT; - break; - case HT_PROTECT_MODE_NON_MEMBER: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - break; - default: - prP2pBssInfo->eHtProtectMode = HT_OP_IE(pucIE)->u2Info2; - break; - } - - /* u2Info3 */ - prP2pBssInfo->u2HtOpInfo3 = HT_OP_IE(pucIE)->u2Info3; - - /* aucBasicMcsSet */ - DBGLOG_MEM8(P2P, TRACE, HT_OP_IE(pucIE)->aucBasicMcsSet, 16); -#endif - } - break; - case ELEM_ID_OBSS_SCAN_PARAMS: /* 74 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_OBSS_SCAN_PARAMS IE would be replaced by driver\n")); - } - break; - case ELEM_ID_EXTENDED_CAP: /* 127 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_EXTENDED_CAP IE would be replaced by driver\n")); - } - break; - case ELEM_ID_VENDOR: /* 221 */ /* V */ - DBGLOG(P2P, TRACE, ("Vender Specific IE\n")); - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_TKIP); - ucNewSecMode = TRUE; - } - else if ((ucOuiType == VENDOR_OUI_TYPE_WPS)) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 0, pucIE, IE_SIZE(pucIE)); - } - - // WMM here. - } - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - // TODO Store the whole P2P IE & generate later. - // Be aware that there may be one or more P2P IE. - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - } - else if(ucOuiType == VENDOR_OUI_TYPE_WFD) { - - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - } - } - else { - - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - DBGLOG(P2P, TRACE, ("Driver unprocessed Vender Specific IE\n")); - ASSERT(FALSE); - } - - // TODO: Store other Vender IE except for WMM Param. - } - break; - default: - DBGLOG(P2P, TRACE, ("Unprocessed element ID:%d \n", IE_ID(pucIE))); - break; - } - } - - if (!ucNewSecMode && ucOldSecMode) - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_NONE); - - } while (FALSE); - - return; -} /* p2pFuncParseBeaconContent */ - - - - -P_BSS_DESC_T -p2pFuncKeepOnConnection ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - P_BSS_DESC_T prTargetBss = (P_BSS_DESC_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prConnReqInfo != NULL) && - (prChnlReqInfo != NULL) && - (prScanReqInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - // Update connection request information. - ASSERT(prConnReqInfo->fgIsConnRequest == TRUE); - - /* Find BSS Descriptor first. */ - prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_FULL; - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prTargetBss->ucChannelNum; - prChnlReqInfo->eBand = prTargetBss->eBand; - prChnlReqInfo->eChnlSco = prTargetBss->eSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - } - - } while (FALSE); - - return prTargetBss; -} /* p2pFuncKeepOnConnection */ - -/* Currently Only for ASSOC Response Frame. */ -VOID -p2pFuncStoreAssocRspIEBuffer ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - INT_16 i2IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)prSwRfb->pvHeader; - - if (prAssocRspFrame->u2FrameCtrl != MAC_FRAME_ASSOC_RSP) { - break; - } - - i2IELen = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + - CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - - if (i2IELen <= 0) { - break; - } - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinInfo->u4BufLength = (UINT_32)i2IELen; - - kalMemCopy(prJoinInfo->aucIEBuf, prAssocRspFrame->aucInfoElem, prJoinInfo->u4BufLength); - - } while (FALSE); - - - return; -} /* p2pFuncStoreAssocRspIEBuffer */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ) -{ - UINT_32 u4NewPacketFilter = 0; - - DEBUGFUNC("p2pFuncMgmtFrameRegister"); - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (pu4P2pPacketFilter) { - u4NewPacketFilter = *pu4P2pPacketFilter; - } - - switch (u2FrameType) { - case MAC_FRAME_PROBE_REQ: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, TRACE, ("Ask frog to add code for mgmt:%x\n", u2FrameType)); - break; - } - - if (pu4P2pPacketFilter) { - *pu4P2pPacketFilter = u4NewPacketFilter; - } - -// u4NewPacketFilter |= prAdapter->u4OsPacketFilter; - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4NewPacketFilter, - sizeof(u4NewPacketFilter) - ); - - } while (FALSE); - - return; -} /* p2pFuncMgmtFrameRegister */ - - -VOID -p2pFuncUpdateMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ) -{ - - do { - - prAdapter->rWifiVar.prP2pFsmInfo->u4P2pPacketFilter = u4OsFilter; - - if ((prAdapter->u4OsPacketFilter & PARAM_PACKET_FILTER_P2P_MASK) ^ u4OsFilter) { - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - - prAdapter->u4OsPacketFilter |= (u4OsFilter & PARAM_PACKET_FILTER_P2P_MASK); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4OsFilter, - sizeof(u4OsFilter) - ); - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - } - - } while (FALSE); - - - - - return; -} /* p2pFuncUpdateMgmtFrameRegister */ - - -VOID -p2pFuncGetStationInfo ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ) -{ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (pucMacAddr != NULL) && - (prStaInfo != NULL)); - - prStaInfo->u4InactiveTime = 0; - prStaInfo->u4RxBytes = 0; - prStaInfo->u4TxBytes = 0; - prStaInfo->u4RxPackets = 0; - prStaInfo->u4TxPackets = 0; - // TODO: - - } while (FALSE); - - return; -} /* p2pFuncGetStationInfo */ - - -BOOLEAN -p2pFuncGetAttriList ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ) -{ - BOOLEAN fgIsAllocMem = FALSE; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_16 u2Offset = 0; - P_IE_P2P_T prIe = (P_IE_P2P_T)NULL; - PUINT_8 pucAttriListStart = (PUINT_8)NULL; - UINT_16 u2AttriListLen = 0, u2BufferSize = 0; - BOOLEAN fgBackupAttributes = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (pucIE != NULL) && - (u2IELength != 0) && - (ppucAttriList != NULL) && - (pu2AttriListLen != NULL)); - - if(ppucAttriList) { - *ppucAttriList = NULL; - } - if(pu2AttriListLen) { - *pu2AttriListLen = 0; - } - - if (ucOuiType == VENDOR_OUI_TYPE_WPS){ - aucWfaOui[0] = 0x00; - aucWfaOui[1] = 0x50; - aucWfaOui[2] = 0xF2; - } - else if ((ucOuiType != VENDOR_OUI_TYPE_P2P) -#if CFG_SUPPORT_WFD - && (ucOuiType != VENDOR_OUI_TYPE_WFD) -#endif - ) { - DBGLOG(P2P, INFO, ("Not supported OUI Type to parsing 0x%x\n", ucOuiType)); - break; - } - - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_VENDOR == IE_ID(pucIE)) { - prIe = (P_IE_P2P_T)pucIE; - - if (prIe->ucLength <= P2P_OUI_TYPE_LEN) { - continue; - - } - - if ((prIe->aucOui[0] == aucWfaOui[0]) && - (prIe->aucOui[1] == aucWfaOui[1]) && - (prIe->aucOui[2] == aucWfaOui[2]) && - (ucOuiType == prIe->ucOuiType)) { - - if (!pucAttriListStart) { - pucAttriListStart = &prIe->aucP2PAttributes[0]; - if (prIe->ucLength > P2P_OUI_TYPE_LEN) { - u2AttriListLen = (UINT_16)(prIe->ucLength - P2P_OUI_TYPE_LEN); - } - else { - ASSERT(FALSE); - } - } - else { -/* More than 2 attributes. */ - UINT_16 u2CopyLen; - - if (FALSE == fgBackupAttributes) { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo;; - - fgBackupAttributes = TRUE; - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[0], - pucAttriListStart, - u2AttriListLen); - - pucAttriListStart = &prP2pSpecificBssInfo->aucAttributesCache[0]; - - u2BufferSize = P2P_MAXIMUM_ATTRIBUTE_LEN; - } - else if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - kalMemCopy(&prP2pSpecificBssInfo->aucWscAttributesCache[0], - pucAttriListStart, - u2AttriListLen); - pucAttriListStart = &prP2pSpecificBssInfo->aucWscAttributesCache[0]; - - u2BufferSize = WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE; - } -#if CFG_SUPPORT_WFD - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - PUINT_8 pucTmpBuf = (PUINT_8)NULL; - pucTmpBuf = (PUINT_8)kalMemAlloc(WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE, VIR_MEM_TYPE); - - if (pucTmpBuf != NULL) { - fgIsAllocMem = TRUE; - } - else { - /* Can't alloca memory for WFD IE relocate. */ - ASSERT(FALSE); - break; - } - - kalMemCopy(pucTmpBuf, - pucAttriListStart, - u2AttriListLen); - - pucAttriListStart = pucTmpBuf; - - u2BufferSize = WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE; - } -#endif - else { - fgBackupAttributes = FALSE; - } - } - - u2CopyLen = (UINT_16)(prIe->ucLength - P2P_OUI_TYPE_LEN); - - if ((u2AttriListLen + u2CopyLen) > u2BufferSize) { - - u2CopyLen = u2BufferSize - u2AttriListLen; - - DBGLOG(P2P, WARN, ("Length of received P2P attributes > maximum cache size.\n")); - - } - - if (u2CopyLen) { - kalMemCopy((PUINT_8)((UINT_32)pucAttriListStart + (UINT_32)u2AttriListLen), - &prIe->aucP2PAttributes[0], - u2CopyLen); - - u2AttriListLen += u2CopyLen; - } - - - } - } /* prIe->aucOui */ - } /* ELEM_ID_VENDOR */ - } /* IE_FOR_EACH */ - - - } while (FALSE); - - if (pucAttriListStart) { - PUINT_8 pucAttribute = pucAttriListStart; - DBGLOG(P2P, LOUD, ("Checking Attribute Length.\n")); - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - P2P_ATTRI_FOR_EACH(pucAttribute, u2AttriListLen, u2Offset); - } - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - } - else if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - /* Big Endian: WSC, WFD. */ - WSC_ATTRI_FOR_EACH(pucAttribute, u2AttriListLen, u2Offset) { - DBGLOG(P2P, LOUD, ("Attribute ID:%d, Length:%d.\n", - WSC_ATTRI_ID(pucAttribute), - WSC_ATTRI_LEN(pucAttribute))); - } - } - else { - } - - ASSERT(u2Offset == u2AttriListLen); - - *ppucAttriList = pucAttriListStart; - *pu2AttriListLen = u2AttriListLen; - - } - else { - *ppucAttriList = (PUINT_8)NULL; - *pu2AttriListLen = 0; - } - - return fgIsAllocMem; -} /* p2pFuncGetAttriList */ - - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ) -{ - P_MSDU_INFO_T prRetMsduInfo = prMgmtTxMsdu; - P_WLAN_PROBE_RSP_FRAME_T prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_16 u2Offset = 0, u2IELength = 0, u2ProbeRspHdrLen = 0; - BOOLEAN fgIsP2PIE = FALSE, fgIsWSCIE = FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2EstimateSize = 0, u2EstimatedExtraIELen = 0; - UINT_32 u4IeArraySize = 0, u4Idx = 0; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxMsdu != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - //3 Make sure this is probe response frame. - prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - ASSERT_BREAK((prProbeRspFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_PROBE_RSP); - - //3 Get the importent P2P IE. - u2ProbeRspHdrLen = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - pucIEBuf = prProbeRspFrame->aucInfoElem; - u2IELength = prMgmtTxMsdu->u2FrameLength - u2ProbeRspHdrLen; - -#if CFG_SUPPORT_WFD - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen = 0; -#endif - - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - switch (IE_ID(pucIEBuf)) { - case ELEM_ID_SSID: - { - - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIEBuf)->aucSSID, - SSID_IE(pucIEBuf)->ucLength); - } - break; - case ELEM_ID_VENDOR: - { - UINT_8 ucOuiType = 0; - UINT_16 u2SubTypeVersion = 0; -#if! CFG_SUPPORT_WFD - - - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIEBuf, &ucOuiType, &u2SubTypeVersion)) { - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 2, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsWSCIE = TRUE; - } - - } - - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIEBuf, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - //2 Note(frog): I use WSC IE buffer for Probe Request to store the P2P IE for Probe Response. - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 1, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsP2PIE = TRUE; - } - - } - - - - else { - if((prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen+IE_SIZE(pucIEBuf))<512) { - kalMemCopy(prAdapter->prGlueInfo->prP2PInfo->aucVenderIE, pucIEBuf, IE_SIZE(pucIEBuf)); - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen += IE_SIZE(pucIEBuf); - } - } -#else - /* Eddie May be WFD */ - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIEBuf, &ucOuiType, &u2SubTypeVersion)) { - if(ucOuiType == VENDOR_OUI_TYPE_WMM) { - break; - } - - } - if((prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen+IE_SIZE(pucIEBuf))<1024) { - kalMemCopy(prAdapter->prGlueInfo->prP2PInfo->aucVenderIE + prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen - , pucIEBuf, IE_SIZE(pucIEBuf)); - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen += IE_SIZE(pucIEBuf); - } -#endif - - - } - break; - default: - break; - } - - } - - - //3 Check the total size & current frame. - u2EstimateSize = WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET); - - u2EstimatedExtraIELen = 0; - - u4IeArraySize = sizeof(txProbeRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += txProbeRspIETable[u4Idx].u2EstimatedFixedIELen; - } - - else { - ASSERT(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16)(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen(prAdapter, - NETWORK_TYPE_P2P_INDEX, - NULL)); - } - - } - - - if (fgIsWSCIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - -#if CFG_SUPPORT_WFD - u2EstimatedExtraIELen += prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen; -#endif - - - - if ((u2EstimateSize += u2EstimatedExtraIELen) > (prRetMsduInfo->u2FrameLength)) { - prRetMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimateSize); - - if (prRetMsduInfo == NULL) { - DBGLOG(P2P, WARN, ("No packet for sending new probe response, use original one\n")); - prRetMsduInfo = prMgmtTxMsdu; - break; - } - - - prRetMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - - - //3 Compose / Re-compose probe response frame. - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prRetMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prProbeRspFrame->aucDestAddr, - prProbeRspFrame->aucSrcAddr, - prProbeRspFrame->aucBSSID, - prProbeRspFrame->u2BeaconInterval, - prProbeRspFrame->u2CapInfo); - - prRetMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - - bssBuildBeaconProbeRespFrameCommonIEs(prRetMsduInfo, - prP2pBssInfo, - prProbeRspFrame->aucDestAddr); - - - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].pfnAppendIE) { - txProbeRspIETable[u4Idx].pfnAppendIE(prAdapter, prRetMsduInfo); - } - - } - - - if (fgIsWSCIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 2, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 1, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - -#if CFG_SUPPORT_WFD - if(prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen>0) { - kalMemCopy((PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength), - prAdapter->prGlueInfo->prP2PInfo->aucVenderIE, prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen); - prRetMsduInfo->u2FrameLength += (UINT_16) prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen; - } -#endif - - - } while (FALSE); - - if (prRetMsduInfo != prMgmtTxMsdu) { - cnmMgtPktFree(prAdapter, prMgmtTxMsdu); - } - - - return prRetMsduInfo; -} /* p2pFuncProcessP2pProbeRsp */ - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - -VOID -p2pFuncGenerateExtra_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucBeaconIECache, prP2pSpeBssInfo->u2IELenForBCN); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return; -} /* p2pFuncGenerateExtra_IEForBeacon */ - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateP2p_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucAttributesCache, prP2pSpeBssInfo->u2AttributeLen); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - - - - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateWSC_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - UINT_16 u2IELen = 0; - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_P2P_INDEX) { - return; - } - - u2IELen = (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - // TODO: Check P2P FSM State. - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 0, - pucBuffer); - - prMsduInfo->u2FrameLength += u2IELen; - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return p2pFuncCalculateP2P_IELen(prAdapter, - eNetTypeIndex, - prStaRec, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - -} /* p2pFuncCalculateP2p_IELenForAssocRsp */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncGenerateP2p_IEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - DBGLOG(P2P, TRACE, ("Generate NULL P2P IE for Assoc Rsp.\n")); - - p2pFuncGenerateP2P_IE(prAdapter, - TRUE, - &prMsduInfo->u2FrameLength, - prMsduInfo->prPacket, - 1500, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - } - else { - - DBGLOG(P2P, TRACE, ("Legacy device, no P2P IE.\n")); - } - - } while (FALSE); - - return; - -} /* p2pFuncGenerateP2p_IEForAssocRsp */ - - -UINT_32 -p2pFuncCalculateWSC_IELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - DBGLOG(P2P, TRACE, ("p2pFuncCalculateWSC_IELenForAssocRsp\n")); - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); -} /* p2pFuncCalculateP2p_IELenForAssocRsp */ - - -VOID -p2pFuncGenerateWSC_IEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - UINT_16 u2IELen = 0; - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_P2P_INDEX) { - return; - } - DBGLOG(P2P, TRACE, ("p2pFuncGenerateWSC_IEForAssocRsp\n")); - - u2IELen = (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - // TODO: Check P2P FSM State. - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 0, - pucBuffer); - - prMsduInfo->u2FrameLength += u2IELen; - - return; -} -/* p2pFuncGenerateP2p_IEForAssocRsp */ - - - - -UINT_32 -p2pFuncCalculateP2P_IELen ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - - UINT_32 u4OverallAttriLen, u4Dummy; - UINT_16 u2EstimatedFixedAttriLen; - UINT_32 i; - - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - for (i = 0; i < u4AttriTableSize; i++) { - u2EstimatedFixedAttriLen = arAppendAttriTable[i].u2EstimatedFixedAttriLen; - - if (u2EstimatedFixedAttriLen) { - u4OverallAttriLen += u2EstimatedFixedAttriLen; - } - else { - ASSERT(arAppendAttriTable[i].pfnCalculateVariableAttriLen); - - u4OverallAttriLen += - arAppendAttriTable[i].pfnCalculateVariableAttriLen(prAdapter, prStaRec); - } - } - - u4Dummy = u4OverallAttriLen; - u4OverallAttriLen += P2P_IE_OUI_HDR; - - for (;(u4Dummy > P2P_MAXIMUM_ATTRIBUTE_LEN);) { - u4OverallAttriLen += P2P_IE_OUI_HDR; - u4Dummy -= P2P_MAXIMUM_ATTRIBUTE_LEN; - } - - return u4OverallAttriLen; -} /* p2pFuncCalculateP2P_IELen */ - - -VOID -p2pFuncGenerateP2P_IE ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_P2P_T prIeP2P = (P_IE_P2P_T)NULL; - UINT_32 u4OverallAttriLen; - UINT_32 u4AttriLen; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN]; - UINT_32 i; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - /* Check buffer length is still enough. */ - ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= P2P_IE_OUI_HDR); - - prIeP2P = (P_IE_P2P_T)pucBuffer; - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - (*pu2Offset) += P2P_IE_OUI_HDR; - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - - for (i = 0; i < u4AttriTableSize; i++) { - - if (arAppendAttriTable[i].pfnAppendAttri) { - u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize); - - u4OverallAttriLen += u4AttriLen; - - if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) { - u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN; - - prIeP2P->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN); - - pucBuffer = (PUINT_8)((UINT_32)prIeP2P + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - prIeP2P = (P_IE_P2P_T)((UINT_32)prIeP2P + - (ELEM_HDR_LEN + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN))); - - kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen); - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - kalMemCopy(prIeP2P->aucP2PAttributes, aucTempBuffer, u4OverallAttriLen); - (*pu2Offset) += P2P_IE_OUI_HDR; - } - - } - - } - - prIeP2P->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen); - - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2P_IE */ - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - PUINT_8 pucBuffer; - P_P2P_ATTRI_STATUS_T prAttriStatus; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 u4AttriLen = 0; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For assoc request P2P IE check in driver & return status in P2P IE. - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - prAttriStatus = (P_P2P_ATTRI_STATUS_T)pucBuffer; - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - - - - prAttriStatus->ucId = P2P_ATTRI_ID_STATUS; - WLAN_SET_FIELD_16(&prAttriStatus->u2Length, P2P_ATTRI_MAX_LEN_STATUS); - - prAttriStatus->ucStatusCode = P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriStatusForAssocRsp */ - -UINT_32 -p2pFuncAppendAttriExtListenTiming ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - P_P2P_ATTRI_EXT_LISTEN_TIMING_T prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucBuffer = NULL; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For extend listen timing. - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - - prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)pucBuffer; - - prP2pExtListenTiming->ucId = P2P_ATTRI_ID_EXT_LISTEN_TIMING; - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2Length, P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailInterval, prP2pSpecificBssInfo->u2AvailabilityInterval); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailPeriod, prP2pSpecificBssInfo->u2AvailabilityPeriod); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriExtListenTiming */ - - -P_IE_HDR_T -p2pFuncGetSpecIE ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ) -{ - P_IE_HDR_T prTargetIE = (P_IE_HDR_T)NULL; - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - - if (pfgIsMore) { - *pfgIsMore = FALSE; - } - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - pucIE = pucIEBuf; - - IE_FOR_EACH(pucIE, u2BufferLen, u2Offset) { - if (IE_ID(pucIE) == ucElemID) { - if ((prTargetIE) && (pfgIsMore)) { - - *pfgIsMore = TRUE; - break; - } - else { - prTargetIE = (P_IE_HDR_T)pucIE; - - if (pfgIsMore == NULL) { - break; - } - - } - - } - } - - } while (FALSE); - - return prTargetIE; -} /* p2pFuncGetSpecIE */ - - - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_16 u2AttriID - ) -{ - P_IE_P2P_T prP2pIE = (P_IE_P2P_T)NULL; - P_ATTRIBUTE_HDR_T prTargetAttri = (P_ATTRIBUTE_HDR_T)NULL; - BOOLEAN fgIsMore = FALSE; - PUINT_8 pucIE = (PUINT_8)NULL, pucAttri = (PUINT_8)NULL; - UINT_16 u2OffsetAttri = 0; - UINT_16 u2BufferLenLeft = 0; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - - - DBGLOG(P2P, INFO, ("Check AssocReq Oui type %u attri %u for len %u\n",ucOuiType, u2AttriID, u2BufferLen)); - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - u2BufferLenLeft = u2BufferLen; - pucIE = pucIEBuf; - do { - fgIsMore = FALSE; - prP2pIE = (P_IE_P2P_T)p2pFuncGetSpecIE(prAdapter, - pucIE, - u2BufferLenLeft, - ELEM_ID_VENDOR, - &fgIsMore); - - if (prP2pIE) { - - ASSERT(prP2pIE>pucIE); - - u2BufferLenLeft = u2BufferLen - (UINT_16)( ((UINT_32)prP2pIE) - ((UINT_32)pucIEBuf)); - - DBGLOG(P2P, INFO, ("Find vendor id %u len %u oui %u more %u LeftLen %u\n", - IE_ID(prP2pIE), IE_LEN(prP2pIE), prP2pIE->ucOuiType, fgIsMore, u2BufferLenLeft)); - - if(IE_LEN(prP2pIE) > P2P_OUI_TYPE_LEN) { - - if (prP2pIE->ucOuiType == ucOuiType) { - switch (ucOuiType) { - case VENDOR_OUI_TYPE_WPS: - aucWfaOui[0] = 0x00; - aucWfaOui[1] = 0x50; - aucWfaOui[2] = 0xF2; - break; - case VENDOR_OUI_TYPE_P2P: - break; - case VENDOR_OUI_TYPE_WPA: - case VENDOR_OUI_TYPE_WMM: - case VENDOR_OUI_TYPE_WFD: - default: - break; - } - - - if ((prP2pIE->aucOui[0] == aucWfaOui[0]) - && (prP2pIE->aucOui[1] == aucWfaOui[1]) - && (prP2pIE->aucOui[2] == aucWfaOui[2]) - ) { - - u2OffsetAttri = 0; - pucAttri = prP2pIE->aucP2PAttributes; - - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - WSC_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //LOG_FUNC("WSC: attri id=%u len=%u\n",WSC_ATTRI_ID(pucAttri), WSC_ATTRI_LEN(pucAttri)); - if (WSC_ATTRI_ID(pucAttri) == u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - - } - - else if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - P2P_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //LOG_FUNC("P2P: attri id=%u len=%u\n",ATTRI_ID(pucAttri), ATTRI_LEN(pucAttri)); - if (ATTRI_ID(pucAttri) == (UINT_8)u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - - } - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - WFD_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //DBGLOG(P2P, INFO, ("WFD: attri id=%u len=%u\n",WFD_ATTRI_ID(pucAttri), WFD_ATTRI_LEN(pucAttri))); - if (ATTRI_ID(pucAttri) == (UINT_8)u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - } - else { - // Possible or else. - } - - } - } /* ucOuiType */ - } /* P2P_OUI_TYPE_LEN */ - - pucIE = (PUINT_8)(((UINT_32)prP2pIE) + IE_SIZE(prP2pIE)); - - } /* prP2pIE */ - - } while (prP2pIE && fgIsMore && u2BufferLenLeft); - - } while (FALSE); - - return prTargetAttri; -} -/* p2pFuncGetSpecAttri */ - - -WLAN_STATUS -p2pFuncGenerateBeaconProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_MSDU_INFO_T prMsduInfo, - IN BOOLEAN fgIsProbeRsp - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; -// P_APPEND_VAR_IE_ENTRY_T prAppendIeTable = (P_APPEND_VAR_IE_ENTRY_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prBssInfo != NULL) && - (prMsduInfo != NULL)); - - -// txBcnIETable - -// txProbeRspIETable - - - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncGenerateBeaconProbeRsp */ - - -WLAN_STATUS -p2pFuncComposeBeaconProbeRspTemplate ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnBuffer, - IN UINT_32 u4BcnBufLen, - IN BOOLEAN fgIsProbeRsp, - IN P_P2P_PROBE_RSP_UPDATE_INFO_T prP2pProbeRspInfo, - IN BOOLEAN fgSynToFW - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - PUINT_8 pucBuffer = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBcnBuffer != NULL)); - - prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)pucBcnBuffer; - - if ((prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_BEACON) && (!fgIsProbeRsp)) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - else if (prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_PROBE_RSP) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - - - if (fgIsProbeRsp) { - ASSERT_BREAK(prP2pProbeRspInfo != NULL); - - if (!prP2pProbeRspInfo->prProbeRspMsduTemplate) { - cnmMgtPktFree(prAdapter, prP2pProbeRspInfo->prProbeRspMsduTemplate); - } - - prP2pProbeRspInfo->prProbeRspMsduTemplate = cnmMgtPktAlloc(prAdapter, u4BcnBufLen); - - prMsduInfo = prP2pProbeRspInfo->prProbeRspMsduTemplate; - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - } - else { - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prMsduInfo = prP2pBssInfo->prBeacon; - - if (prMsduInfo == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - - if (u4BcnBufLen > (OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH)) { - /* Unexpected error, buffer overflow. */ - ASSERT(FALSE); - break; - } - - } - - - pucBuffer = (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucBuffer, pucBcnBuffer, u4BcnBufLen); - - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (UINT_16)u4BcnBufLen; - - if (fgSynToFW) { - rWlanStatus = p2pFuncGenerateBeaconProbeRsp(prAdapter, prP2pBssInfo, prMsduInfo, fgIsProbeRsp); - } - - } while (FALSE); - - return rWlanStatus; - -} /* p2pFuncComposeBeaconTemplate */ - -#if CFG_SUPPORT_WFD -WLAN_STATUS wfdAdjustResource( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable - ) { -#if 1 - /* The API shall be called in tx_thread */ - P_QUE_MGT_T prQM = &prAdapter->rQM; - DBGLOG(P2P, INFO, ("wfdAdjustResource %d\n", fgEnable)); - if(fgEnable) { - prQM->au4MinReservedTcResource[TC2_INDEX] = QM_GUARANTEED_TC2_RESOURCE; - if(QM_GUARANTEED_TC0_RESOURCE>2) { - prQM->au4GuaranteedTcResource[TC0_INDEX] = QM_GUARANTEED_TC0_RESOURCE - 2; - prQM->au4GuaranteedTcResource[TC2_INDEX] += 2; - } - if(QM_GUARANTEED_TC1_RESOURCE>2) { - prQM->au4GuaranteedTcResource[TC1_INDEX] = QM_GUARANTEED_TC1_RESOURCE - 2; - prQM->au4GuaranteedTcResource[TC2_INDEX] += 2; - } - } - else { - prQM->au4MinReservedTcResource[TC2_INDEX] = QM_MIN_RESERVED_TC2_RESOURCE; - prQM->au4GuaranteedTcResource[TC0_INDEX] = QM_GUARANTEED_TC0_RESOURCE; - prQM->au4GuaranteedTcResource[TC1_INDEX] = QM_GUARANTEED_TC1_RESOURCE; - prQM->au4GuaranteedTcResource[TC2_INDEX] = QM_GUARANTEED_TC2_RESOURCE; - } -#endif - return WLAN_STATUS_SUCCESS; -} - -WLAN_STATUS wfdAdjustThread( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable - ) { -#define WFD_TX_THREAD_PRIORITY 70 - DBGLOG(P2P, INFO, ("wfdAdjustResource %d\n", fgEnable)); - if(fgEnable) { -#ifdef LINUX - /* TODO the change schedule API shall be provided by OS glue layer */ - /* Or the API shall be put in os glue layer */ - struct sched_param param = { .sched_priority = WFD_TX_THREAD_PRIORITY }; - sched_setscheduler(prAdapter->prGlueInfo->main_thread , SCHED_RR, ¶m); -#endif - } - else { -#ifdef LINUX - /* TODO the change schedule API shall be provided by OS glue layer */ - struct sched_param param = { .sched_priority = 0 }; - sched_setscheduler(prAdapter->prGlueInfo->main_thread , SCHED_NORMAL, ¶m); -#endif - } - return WLAN_STATUS_SUCCESS; -} - - -#endif /* CFG_SUPPORT_WFD */ - -WLAN_STATUS wfdChangeMediaState( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx, - ENUM_PARAM_MEDIA_STATE_T eConnectionState) { -#if CFG_SUPPORT_WFD - - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - - if ((prWfdCfgSettings->ucWfdEnable) && - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID))) { - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED ) { - wfdAdjustResource(prAdapter, TRUE); - wfdAdjustThread(prAdapter, TRUE); - } - else { - wfdAdjustResource(prAdapter, FALSE); - wfdAdjustThread(prAdapter, FALSE); - } - - } -#endif - return WLAN_STATUS_SUCCESS; -} - - - - - - - - - -BOOLEAN -p2pFuncIsChannelGrant ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - if (prAdapter == NULL) - return FALSE; - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - - if (prP2pFsmInfo == NULL) - return FALSE; - - return (prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND); - -} /* p2pFuncIsChannelGrant */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_ie.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_ie.c deleted file mode 100755 index 33cafca9ca04..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_ie.c +++ /dev/null @@ -1,582 +0,0 @@ -#include "p2p_precomp.h" - -#if CFG_SUPPORT_WFD -#if CFG_SUPPORT_WFD_COMPOSE_IE -#if 0 -APPEND_VAR_ATTRI_ENTRY_T txProbeRspWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_EXT_CAPABILITY), NULL, wfdFuncAppendAttriExtCapability } /* 7 */ - ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */ -}; - -APPEND_VAR_ATTRI_ENTRY_T txBeaconWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ -}; - -APPEND_VAR_ATTRI_ENTRY_T txAssocReqWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ -}; -#endif - -APPEND_VAR_ATTRI_ENTRY_T txAssocRspWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ - ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */ - -}; - -#endif - - - - -UINT_32 -p2pCalculate_IEForAssocReq ( - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - UINT_32 u4RetValue = 0; - - do { - ASSERT_BREAK((eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) && (prAdapter != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - u4RetValue = prConnReqInfo->u4BufLength; - - // ADD HT Capability - u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP); - - // ADD WMM Information Element - u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO); - - } while (FALSE); - - return u4RetValue; -} /* p2pCalculate_IEForAssocReq */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerate_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prConnReqInfo->aucIEBuf, prConnReqInfo->u4BufLength); - - prMsduInfo->u2FrameLength += prConnReqInfo->u4BufLength; - - rlmReqGenerateHtCapIE (prAdapter,prMsduInfo); - mqmGenerateWmmInfoIE (prAdapter,prMsduInfo); - - - } while (FALSE); - - return; - -} /* p2pGenerate_IEForAssocReq */ - - - -UINT_32 -wfdFuncAppendAttriDevInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_DEVICE_INFORMATION_IE_T prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)pucBuffer; - - prWfdDevInfo->ucElemID = WFD_ATTRI_ID_DEV_INFO; - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevInfo, prWfdCfgSettings->u2WfdDevInfo); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2SessionMgmtCtrlPort, prWfdCfgSettings->u2WfdControlPort); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevMaxSpeed, prWfdCfgSettings->u2WfdMaximumTp); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2Length, WFD_ATTRI_MAX_LEN_DEV_INFO); - - u4AttriLen = WFD_ATTRI_MAX_LEN_DEV_INFO + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriDevInfo */ - -UINT_32 -wfdFuncAppendAttriAssocBssid ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_ASSOCIATED_BSSID_IE_T prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_BSS_INFO_T prAisBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - - /* AIS network. */ - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if ((!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) || - (prAisBssInfo->eConnectionState != PARAM_MEDIA_STATE_CONNECTED)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)pucBuffer; - - prWfdAssocBssid->ucElemID = WFD_ATTRI_ID_ASSOC_BSSID; - - WLAN_SET_FIELD_BE16(&prWfdAssocBssid->u2Length, WFD_ATTRI_MAX_LEN_ASSOC_BSSID); - - COPY_MAC_ADDR(prWfdAssocBssid->aucAssocBssid, prAisBssInfo->aucBSSID); - - u4AttriLen = WFD_ATTRI_MAX_LEN_ASSOC_BSSID + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriAssocBssid */ - -UINT_32 -wfdFuncAppendAttriCoupledSinkInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_COUPLE_SINK_INFORMATION_IE_T prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_SINK_INFO_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)pucBuffer; - - prWfdCoupleSinkInfo->ucElemID = WFD_ATTRI_ID_COUPLED_SINK_INFO; - - WLAN_SET_FIELD_BE16(&prWfdCoupleSinkInfo->u2Length, WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO); - - COPY_MAC_ADDR(prWfdCoupleSinkInfo->aucCoupleSinkMac, prWfdCfgSettings->aucWfdCoupleSinkAddress); - - prWfdCoupleSinkInfo->ucCoupleSinkStatusBp = prWfdCfgSettings->ucWfdCoupleSinkStatus; - - u4AttriLen = WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriCoupledSinkInfo */ - -UINT_32 -wfdFuncAppendAttriExtCapability ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_EXTENDED_CAPABILITY_IE_T prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_EXT_CAPABILITY_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)pucBuffer; - - prWfdExtCapability->ucElemID = WFD_ATTRI_ID_EXT_CAPABILITY; - - WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2Length, WFD_ATTRI_MAX_LEN_EXT_CAPABILITY); - - WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2WfdExtCapabilityBp, prWfdCfgSettings->u2WfdExtendCap); - - u4AttriLen = WFD_ATTRI_MAX_LEN_EXT_CAPABILITY + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriExtCapability */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate length of Channel List Attribute -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of Attribute added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -wfdFuncCalculateAttriLenSessionInfo ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - UINT_16 u2AttriLen = 0; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - - u2AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - - return (UINT_32)u2AttriLen; - -} /* wfdFuncCalculateAttriLenSessionInfo */ - - -UINT_32 -wfdFuncAppendAttriSessionInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_SESSION_INFORMATION_IE_T prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || (prWfdCfgSettings->u2WfdSessionInformationIELen == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)pucBuffer; - - prWfdSessionInfo->ucElemID = WFD_ATTRI_ID_SESSION_INFO; - - // TODO: Check endian issue? - kalMemCopy(prWfdSessionInfo->pucWfdDevInfoDesc, prWfdCfgSettings->aucWfdSessionInformationIE, prWfdCfgSettings->u2WfdSessionInformationIELen); - - WLAN_SET_FIELD_16(&prWfdSessionInfo->u2Length, prWfdCfgSettings->u2WfdSessionInformationIELen); - - u4AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN; - - } -while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriSessionInfo */ - - - -#if CFG_SUPPORT_WFD_COMPOSE_IE -VOID -wfdFuncGenerateWfd_IE ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - - - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_WFD_T prIeWFD = (P_IE_WFD_T)NULL; - UINT_32 u4OverallAttriLen; - UINT_32 u4AttriLen; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN]; - UINT_32 i; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - /* Check buffer length is still enough. */ - ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= WFD_IE_OUI_HDR); - - prIeWFD = (P_IE_WFD_T)pucBuffer; - - prIeWFD->ucId = ELEM_ID_WFD; - - prIeWFD->aucOui[0] = aucWfaOui[0]; - prIeWFD->aucOui[1] = aucWfaOui[1]; - prIeWFD->aucOui[2] = aucWfaOui[2]; - prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD; - - (*pu2Offset) += WFD_IE_OUI_HDR; - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - for (i = 0; i < u4AttriTableSize; i++) { - - if (arAppendAttriTable[i].pfnAppendAttri) { - u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize); - - u4OverallAttriLen += u4AttriLen; - - if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) { - u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN; - - prIeWFD->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN); - - pucBuffer = (PUINT_8)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - prIeWFD = (P_IE_WFD_T)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen); - - prIeWFD->ucId = ELEM_ID_WFD; - - prIeWFD->aucOui[0] = aucWfaOui[0]; - prIeWFD->aucOui[1] = aucWfaOui[1]; - prIeWFD->aucOui[2] = aucWfaOui[2]; - prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD; - - kalMemCopy(prIeWFD->aucWFDAttributes, aucTempBuffer, u4OverallAttriLen); - (*pu2Offset) += WFD_IE_OUI_HDR; - } - - } - - } - - prIeWFD->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen); - - - } while (FALSE); - - return; -} /* wfdFuncGenerateWfd_IE */ - -#endif /* CFG_SUPPORT_WFD_COMPOSE_IE */ - - - - -UINT_32 -wfdFuncCalculateWfdIELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - -#if CFG_SUPPORT_WFD_COMPOSE_IE - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - if ( - !IS_STA_P2P_TYPE(prStaRec) || - (prWfdCfgSettings->ucWfdEnable == 0)) { - return 0; - } - - return p2pFuncCalculateP2P_IELen(prAdapter, - eNetTypeIndex, - prStaRec, - txAssocRspWFDAttributesTable, - sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - -#else - return 0; -#endif -} /* wfdFuncCalculateWfdIELenForAssocRsp */ - - - -VOID -wfdFuncGenerateWfdIEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - -#if CFG_SUPPORT_WFD_COMPOSE_IE - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_STA_RECORD_T prStaRec; - - do { - ASSERT_BREAK((prMsduInfo != NULL) && (prAdapter != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - if((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0) { - break; - } - - wfdFuncGenerateWfd_IE(prAdapter, - FALSE, - &prMsduInfo->u2FrameLength, - prMsduInfo->prPacket, - 1500, - txAssocRspWFDAttributesTable, - sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - } - } while (FALSE); - - return; -#else - - return; -#endif -} /* wfdFuncGenerateWfdIEForAssocRsp */ - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_rlm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_rlm.c deleted file mode 100755 index a01e1cab20e5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_rlm.c +++ /dev/null @@ -1,1018 +0,0 @@ -/* -** $Id: @(#) p2p_rlm.c@@ -*/ - -/*! \file "p2p_rlm.c" - \brief - -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -extern VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init AP Bss -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ENUM_BAND_T eBand; - UINT_8 ucChannel; - ENUM_CHNL_EXT_T eSCO; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - /* Operation band, channel shall be ready before invoking this function. - * Bandwidth may be ready if other network is connected - */ - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (RLM_AP_IS_BW_40_ALLOWED(prAdapter, prBssInfo)) { - /* In this case, the first BSS's SCO is 40MHz and known, so AP can - * apply 40MHz bandwidth, but the first BSS's SCO may be changed - * later if its Beacon lost timeout occurs - */ - if (cnmPreferredChannel(prAdapter, &eBand, &ucChannel, &eSCO) && - eSCO != CHNL_EXT_SCN && ucChannel == prBssInfo->ucPrimaryChannel && - eBand == prBssInfo->eBand) { - prBssInfo->eBssSCO = eSCO; - } - else if (cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex)) { - prBssInfo->eBssSCO = rlmDecideScoForAP(prAdapter, prBssInfo); - } - - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - prBssInfo->fg40mBwAllowed = TRUE; - prBssInfo->fgAssoc40mBwAllowed = TRUE; - - prBssInfo->ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - - rlmUpdateBwByChListForAP(prAdapter, prBssInfo); - } - } - - DBGLOG(RLM, INFO, ("WLAN AP SCO=%d\n", prBssInfo->eBssSCO)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_IE_OBSS_SCAN_PARAM_T prObssScanIe; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && !RLM_NET_IS_BOW(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) && - prBssInfo->eBand == BAND_2G4 && - prBssInfo->eBssSCO != CHNL_EXT_SCN) { - - prObssScanIe = (P_IE_OBSS_SCAN_PARAM_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add 20/40 BSS coexistence IE */ - prObssScanIe->ucId = ELEM_ID_OBSS_SCAN_PARAMS; - prObssScanIe->ucLength = sizeof(IE_OBSS_SCAN_PARAM_T) - ELEM_HDR_LEN; - - prObssScanIe->u2ScanPassiveDwell = - dot11OBSSScanPassiveDwell; - prObssScanIe->u2ScanActiveDwell = - dot11OBSSScanActiveDwell; - prObssScanIe->u2TriggerScanInterval = - dot11BSSWidthTriggerScanInterval; - prObssScanIe->u2ScanPassiveTotalPerChnl = - dot11OBSSScanPassiveTotalPerChannel; - prObssScanIe->u2ScanActiveTotalPerChnl = - dot11OBSSScanActiveTotalPerChannel; - prObssScanIe->u2WidthTransDelayFactor = - dot11BSSWidthChannelTransitionDelayFactor; - prObssScanIe->u2ScanActivityThres = - dot11OBSSScanActivityThreshold; - - ASSERT(IE_SIZE(prObssScanIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_OBSS_SCAN)); - - prMsduInfo->u2FrameLength += IE_SIZE(prObssScanIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P GO. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLevel; - BOOLEAN fgBwChange; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - fgBwChange = FALSE; - - if (prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return fgBwChange; - } - - ucLevel = rlmObssChnlLevel(prBssInfo, prBssInfo->eBand, - prBssInfo->ucPrimaryChannel, prBssInfo->eBssSCO); - - if (ucLevel == CHNL_LEVEL0) { - /* Forced to 20MHz, so extended channel is SCN and STA width is zero */ - prBssInfo->fgObssActionForcedTo20M = TRUE; - - if (prBssInfo->ucHtOpInfo1 != (UINT_8) CHNL_EXT_SCN) { - prBssInfo->ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - fgBwChange = TRUE; - } - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - OBSS_20_40M_TIMEOUT * MSEC_PER_SEC); - } - - /* Clear up all channel lists */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - return fgBwChange; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_20_40_COEXIST_FRAME prRxFrame; - P_IE_20_40_COEXIST_T prCoexist; - P_IE_INTOLERANT_CHNL_REPORT_T prChnlReport; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - PUINT_8 pucIE; - UINT_16 u2IELength, u2Offset; - UINT_8 i, j; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_PUBLIC_20_40_COEXIST || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < (WLAN_MAC_MGMT_HEADER_LEN + 5) || - HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr) != - NETWORK_TYPE_P2P_INDEX) { - return; - } - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT || - prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return; - } - - prCoexist = &prRxFrame->rBssCoexist; - if (prCoexist->ucData & (BSS_COEXIST_40M_INTOLERANT|BSS_COEXIST_20M_REQ)) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == - prBssInfo->ucPrimaryChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = prBssInfo->ucPrimaryChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - - /* Process intolerant channel report IE */ - pucIE = (PUINT_8) &prRxFrame->rChnlReport; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_MGMT_HEADER_LEN + 5); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_20_40_INTOLERANT_CHNL_REPORT: - prChnlReport = (P_IE_INTOLERANT_CHNL_REPORT_T) pucIE; - - if (prChnlReport->ucLength <= 1) { - break; - } - - /* To do: process regulatory class. Now we assume 2.4G band */ - - for (j = 0; j < prChnlReport->ucLength - 1; j++) { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == - prChnlReport->aucChannelList[j]) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = - prChnlReport->aucChannelList[j]; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - } - break; - - default: - break; - } - } /* end of IE_FOR_EACH */ - - if (rlmUpdateBwByChListForAP(prAdapter, prBssInfo)) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - rlmSyncOperationParams(prAdapter, prBssInfo); - } - - /* Check if OBSS scan exemption response should be sent */ - if (prCoexist->ucData & BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ) { - rlmObssScanExemptionRsp(prAdapter, prBssInfo, prSwRfb); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_NOTIFY_CHNL_WIDTH_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_NOTIFY_CHNL_WIDTH_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_HT_NOTIFY_CHANNEL_WIDTH || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < sizeof(ACTION_NOTIFY_CHNL_WIDTH_FRAME)) { - return; - } - - /* To do: depending regulation class 13 and 14 based on spec - * Note: (ucChannelWidth==1) shall restored back to original capability, - * not current setting to 40MHz BW here - */ - if (prRxFrame->ucChannelWidth == 0) { - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - } - else if (prRxFrame->ucChannelWidth == 1) { - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prObssStatus); - ASSERT(prObssStatus->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prObssStatus->ucNetTypeIndex]; - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - prBssInfo->fgObssErpProtectMode = - (BOOLEAN) prObssStatus->ucObssErpProtectMode; - prBssInfo->eObssHtProtectMode = - (ENUM_HT_PROTECT_MODE_T) prObssStatus->ucObssHtProtectMode; - prBssInfo->eObssGfOperationMode = - (ENUM_GF_MODE_T) prObssStatus->ucObssGfOperationMode; - prBssInfo->fgObssRifsOperationMode = - (BOOLEAN) prObssStatus->ucObssRifsOperationMode; - prBssInfo->fgObssBeaconForcedTo20M = - (BOOLEAN) prObssStatus->ucObssBeaconForcedTo20M; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, TRUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is only for AP mode in NETWORK_TYPE_P2P_INDEX. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ) -{ - P_LINK_T prStaList; - P_STA_RECORD_T prStaRec; - BOOLEAN fgErpProtectMode, fgSta40mIntolerant; - BOOLEAN fgUseShortPreamble, fgUseShortSlotTime; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - UINT_8 ucHtOpInfo1; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - fgErpProtectMode = FALSE; - eHtProtectMode = HT_PROTECT_MODE_NONE; - eGfOperationMode = GF_MODE_NORMAL; - fgSta40mIntolerant = FALSE; - fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - fgUseShortSlotTime = TRUE; - ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - - prStaList = &prBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH_ENTRY(prStaRec, prStaList, rLinkEntry, STA_RECORD_T) { - //ASSERT(prStaRec); - if(!prStaRec){ - DBGLOG(P2P, TRACE, ("prStaRec is NULL in rlmUpdateParamsForAP() \n")); - break; - } - if (prStaRec->fgIsInUse && prStaRec->ucStaState == STA_STATE_3 && - prStaRec->ucNetTypeIndex == prBssInfo->ucNetTypeIndex) { - if (!(prStaRec->ucPhyTypeSet & - (PHY_TYPE_SET_802_11GN | PHY_TYPE_SET_802_11A))) { - /* B-only mode, so mode 1 (ERP protection) */ - fgErpProtectMode = TRUE; - } - - if (!(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - /* BG-only or A-only */ - eHtProtectMode = HT_PROTECT_MODE_NON_HT; - } - else if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - /* 20MHz-only */ - if (eHtProtectMode == HT_PROTECT_MODE_NONE) { - eHtProtectMode = HT_PROTECT_MODE_20M; - } - } - - if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_HT_GF)) { - eGfOperationMode = GF_MODE_PROTECT; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) { - fgUseShortPreamble = FALSE; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) { - fgUseShortSlotTime = FALSE; - } - - if (prStaRec->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fgSta40mIntolerant = TRUE; - } - } - } /* end of LINK_FOR_EACH_ENTRY */ - - /* Check if HT operation IE about 20/40M bandwidth shall be updated */ - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - if (/*!LINK_IS_EMPTY(prStaList) && */ !fgSta40mIntolerant && - !prBssInfo->fgObssActionForcedTo20M && - !prBssInfo->fgObssBeaconForcedTo20M) { - - ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - } - } - - /* Check if any new parameter may be updated */ - if (prBssInfo->fgErpProtectMode != fgErpProtectMode || - prBssInfo->eHtProtectMode != eHtProtectMode || - prBssInfo->eGfOperationMode != eGfOperationMode || - prBssInfo->ucHtOpInfo1 != ucHtOpInfo1 || - prBssInfo->fgUseShortPreamble != fgUseShortPreamble || - prBssInfo->fgUseShortSlotTime != fgUseShortSlotTime) { - - prBssInfo->fgErpProtectMode = fgErpProtectMode; - prBssInfo->eHtProtectMode = eHtProtectMode; - prBssInfo->eGfOperationMode = eGfOperationMode; - prBssInfo->ucHtOpInfo1 = ucHtOpInfo1; - prBssInfo->fgUseShortPreamble = fgUseShortPreamble; - prBssInfo->fgUseShortSlotTime = fgUseShortSlotTime; - - if (fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - else { - prBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - } - - rlmSyncOperationParams(prAdapter, prBssInfo); - fgUpdateBeacon = TRUE; - } - - /* Update Beacon content if related IE content is changed */ - if (fgUpdateBeacon) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initial the channel list from the domain information. -* This function is called after P2P initial and Domain information changed. -* Make sure the device is disconnected while changing domain information. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncInitialChannelList ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_DOMAIN_INFO_ENTRY prDomainInfoEntry = (P_DOMAIN_INFO_ENTRY)NULL; - P_DOMAIN_SUBBAND_INFO prDomainSubBand = (P_DOMAIN_SUBBAND_INFO)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0, u4IdxII = 0; - UINT_8 ucBufferSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE; -#if 0 - UINT_8 ucSocialChnlSupport = 0, ucAutoChnl = 0; -#endif - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; -#if 0 - ucAutoChnl = prP2pConnSetting->ucOperatingChnl; -#endif - - prDomainInfoEntry = rlmDomainGetDomainInfo(prAdapter); - - ASSERT_BREAK((prDomainInfoEntry != NULL) && (prP2pConnSetting != NULL)); - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - for (u4Idx = 0; u4Idx < MAX_SUBBAND_NUM; u4Idx++) { - prDomainSubBand = &prDomainInfoEntry->rSubBand[u4Idx]; - - - if (((prDomainSubBand->ucBand == BAND_5G) && (!prAdapter->fgEnable5GBand)) || - (prDomainSubBand->ucBand == BAND_NULL)) { - continue; - } - - - if (ucBufferSize < (P2P_ATTRI_LEN_CHANNEL_ENTRY + prDomainSubBand->ucNumChannels)) { - /* Buffer is not enough to include all supported channels. */ - break; // for - } - - prChannelEntryField->ucRegulatoryClass = prDomainSubBand->ucRegClass; - prChannelEntryField->ucNumberOfChannels = prDomainSubBand->ucNumChannels; - - for (u4IdxII = 0; u4IdxII < prDomainSubBand->ucNumChannels; u4IdxII++) { - prChannelEntryField->aucChannelList[u4IdxII] = prDomainSubBand->ucFirstChannelNum + - (u4IdxII * prDomainSubBand->ucChannelSpan); - -#if 0 - switch (prChannelEntryField->aucChannelList[u4IdxII]) { - case 1: - ucSocialChnlSupport = 1; - break; - case 6: - ucSocialChnlSupport = 6; - break; - case 11: - ucSocialChnlSupport = 11; - break; - default: - break; - } - -#endif - } - - if (ucBufferSize >= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels)) { - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - else { - break; - } - - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - } - -#if 0 - if (prP2pConnSetting->ucListenChnl == 0) { - prP2pConnSetting->ucListenChnl = P2P_DEFAULT_LISTEN_CHANNEL; - - if (ucSocialChnlSupport != 0) { - /* 1. User Not Set LISTEN channel. - * 2. Social channel is not empty. - */ - prP2pConnSetting->ucListenChnl = ucSocialChnlSupport; - } - } - -#endif - - // TODO: 20110921 frog - - /* If LISTEN channel is not set, - * a random supported channel would be set. - * If no social channel is supported, DEFAULT channel would be set. - */ - - prP2pConnSetting->ucRfChannelListSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - ucBufferSize; - -#if 0 - if (prP2pConnSetting->ucOperatingChnl == 0) { /* User not set OPERATE channel. */ - - if (scnQuerySparseChannel(prAdapter, NULL, &ucAutoChnl)) { - break; // while - } - - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - if (prChannelEntryField->ucNumberOfChannels != 0) { - ucAutoChnl = prChannelEntryField->aucChannelList[0]; - break; // while - } - - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - - } - -#endif - /* We assume user would not set a channel not in the channel list. - * If so, the operating channel still depends on target deivce supporting capability. - */ - - // TODO: 20110921 frog - - /* If the Operating channel is not set, a channel from supported channel list is set automatically. - * If there is no supported channel in channel list, a DEFAULT channel is set. - */ - - } while (FALSE); - -#if 0 - prP2pConnSetting->ucOperatingChnl = ucAutoChnl; -#endif - return; -} /* rlmFuncInitialChannelList */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find a common channel list from the local channel list info & target channel list info. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncCommonChannelList ( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)NULL, prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_8 aucCommonChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; - UINT_8 ucOriChnlSize = 0, ucNewChnlSize = 0; - - - do { - - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)aucCommonChannelList; - - while (ucChannelListSize > 0) { - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - ucOriChnlSize = prP2pConnSetting->ucRfChannelListSize; - - while (ucOriChnlSize > 0) { - if (prChannelEntryI->ucRegulatoryClass == prChannelEntryII->ucRegulatoryClass) { - prChannelEntryIII->ucRegulatoryClass = prChannelEntryI->ucRegulatoryClass; - // TODO: Currently we assume that the regulatory class the same, the channels are the same. - kalMemCopy(prChannelEntryIII->aucChannelList, prChannelEntryII->aucChannelList, prChannelEntryII->ucNumberOfChannels); - prChannelEntryIII->ucNumberOfChannels = prChannelEntryII->ucNumberOfChannels; - - ucNewChnlSize += P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryIII->ucNumberOfChannels; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryIII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryIII->ucNumberOfChannels); - } - - ucOriChnlSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryI->ucNumberOfChannels); - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryI + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryI->ucNumberOfChannels); - - - } - - - ucChannelListSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryII->ucNumberOfChannels); - - prChannelEntryII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryII->ucNumberOfChannels); - - - } - - - kalMemCopy(prP2pConnSetting->aucChannelEntriesField, aucCommonChannelList, ucNewChnlSize); - prP2pConnSetting->ucRfChannelListSize = ucNewChnlSize; - - } while (FALSE); - - return; -} /* rlmFuncCommonChannelList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmFuncFindOperatingClass ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ) -{ - UINT_8 ucRegulatoryClass = 0, ucBufferSize = 0; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - - for (u4Idx = 0; u4Idx < prChannelEntryField->ucNumberOfChannels; u4Idx++) { - if (prChannelEntryField->aucChannelList[u4Idx] == ucChannelNum) { - ucRegulatoryClass = prChannelEntryField->ucRegulatoryClass; - break; - } - - } - - - if (ucRegulatoryClass != 0) { - break; //while - } - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - } while (FALSE); - - return ucRegulatoryClass; -} /* rlmFuncFindOperatingClass */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmFuncFindAvailableChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ) -{ - BOOLEAN fgIsResultAvailable = FALSE; - P_CHANNEL_ENTRY_FIELD_T prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_8 ucBufferSize = 0, ucIdx = 0, ucChannelSelected = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (fgIsDefaultChannel) { - ucChannelSelected = P2P_DEFAULT_LISTEN_CHANNEL; - } - - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while ((ucBufferSize != 0) && (!fgIsResultAvailable)) { - - for (ucIdx = 0; ucIdx < prChannelEntry->ucNumberOfChannels; ucIdx++) { - if ((!fgIsSocialChannel) || - (prChannelEntry->aucChannelList[ucIdx] == 1) || - (prChannelEntry->aucChannelList[ucIdx] == 6) || - (prChannelEntry->aucChannelList[ucIdx] == 11)) { - - if (prChannelEntry->aucChannelList[ucIdx] <= 11) { - /* 2.4G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - else if ((prChannelEntry->aucChannelList[ucIdx] < 52) && - (prChannelEntry->aucChannelList[ucIdx] > 14)) { - /* 2.4G + 5G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - - if (ucChannelSelected == ucCheckChnl) { - fgIsResultAvailable = TRUE; - break; - } - } - - } - - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntry->ucNumberOfChannels); - - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntry + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntry->ucNumberOfChannels); - - } - - - - if ((!fgIsResultAvailable) && (pucSuggestChannel != NULL)) { - DBGLOG(P2P, TRACE, ("The request channel %d is not available, sugguested channel:%d\n", ucCheckChnl, ucChannelSelected)); - // Given a suggested channel. - *pucSuggestChannel = ucChannelSelected; - } - - - } while (FALSE); - - return fgIsResultAvailable; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - UINT_8 ucSecondChannel, i, j; - ENUM_CHNL_EXT_T eSCO; - - eSCO = CHNL_EXT_SCN; - - if (prBssInfo->eBand == BAND_2G4) { - if (prBssInfo->ucPrimaryChannel != 14) { - eSCO = (prBssInfo->ucPrimaryChannel > 7) ? - CHNL_EXT_SCB : CHNL_EXT_SCA; - } - } - else { - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - if (prSubband->ucBand == prBssInfo->eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == prBssInfo->ucPrimaryChannel) { - eSCO = (j & 1) ? CHNL_EXT_SCB : CHNL_EXT_SCA; - break; - } - } - - if (j < prSubband->ucNumChannels) { - break; /* Found */ - } - } - } - } - - /* Check if it is boundary channel and 40MHz BW is permitted */ - if (eSCO != CHNL_EXT_SCN) { - ucSecondChannel = (eSCO == CHNL_EXT_SCA) ? - (prBssInfo->ucPrimaryChannel+ 4) : (prBssInfo->ucPrimaryChannel- 4); - - if (!rlmDomainIsLegalChannel(prAdapter, prBssInfo->eBand, ucSecondChannel)){ - eSCO = CHNL_EXT_SCN; - } - } - - return eSCO; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_rlm_obss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_rlm_obss.c deleted file mode 100755 index f9045373157b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_rlm_obss.c +++ /dev/null @@ -1,374 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#include "precomp.h" - - -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Different concurrent network has itself channel lists, and -* concurrent networks should have been recorded in channel lists. -* If role of active P2P is GO, assume associated AP of AIS will -* record our Beacon for P2P GO because of same channel. -* -* Note: If we have scenario of different channel in the future, -* the internal FW communication channel shall be established. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 ucChannelLevel; - - ASSERT(prBssInfo); - - if (eBand == BAND_2G4) { - ucChannelLevel = rlmObssChnlLevelIn2G4(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else if (eBand == BAND_5G) { - ucChannelLevel = rlmObssChnlLevelIn5G(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else { - ucChannelLevel = CHNL_LEVEL0; - } - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel, ucCenterChannel; - UINT_8 ucAffectedChnl_L, ucAffectedChnl_H; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucCenterChannel = ucPriChannel + 2; - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucCenterChannel = ucPriChannel - 2; - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucCenterChannel >= 1 && ucCenterChannel <= 14); - - /* Calculated low/upper channels in affected freq range */ - ucAffectedChnl_L = (ucCenterChannel <= AFFECTED_CHNL_OFFSET) ? - 1 : (ucCenterChannel - AFFECTED_CHNL_OFFSET); - - ucAffectedChnl_H = (ucCenterChannel >= (14 - AFFECTED_CHNL_OFFSET)) ? - 14 : (ucCenterChannel + AFFECTED_CHNL_OFFSET); - - - /* Check intolerant (Non-HT) channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_NonHtChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_NonHtChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_NonHtChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 20M BW request channel list */ - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_20mReqChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_20mReqChnlList[i] <= ucAffectedChnl_H)) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G primary channel list */ - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_PriChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_PriChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_PriChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G secondary channel list */ - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_SecChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_SecChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_SecChnlList[i] != ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - -L_2G4_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucSecChannel >= 36); - - /* Check 5G primary channel list */ - ASSERT(prBssInfo->auc5G_PriChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_PriChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_PriChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_PriChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check non-HT channel list */ - ASSERT(prBssInfo->auc5G_NonHtChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_NonHtChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_NonHtChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check secondary channel list */ - ASSERT(prBssInfo->auc5G_SecChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_SecChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_SecChnlList[i] == ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - } - -L_5G_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - - /* To do: need an algorithm to do judgement. Now always reject request */ - - prMsduInfo = (P_MSDU_INFO_T) - cnmMgtPktAlloc(prAdapter, PUBLIC_ACTION_MAX_LEN); - if (prMsduInfo == NULL) { - return; - } - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence rsp frame!\n")); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) prMsduInfo->prPacket; - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, - ((P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader)->aucSrcAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = 0; - - ASSERT((WLAN_MAC_HEADER_LEN + 5) <= PUBLIC_ACTION_MAX_LEN); - - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex =prSwRfb->ucStaRecIdx; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_HTC_LEN + 5; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - /* Send them to HW queue */ - nicTxEnqueueMsdu(prAdapter, prMsduInfo); -} - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_scan.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_scan.c deleted file mode 100755 index 068dc4b5f46e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_scan.c +++ /dev/null @@ -1,836 +0,0 @@ -/* -** $Id: @(#) p2p_scan.c@@ -*/ - -/*! \file "p2p_scan.c" - \brief This file defines the p2p scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_SCAN_INFO_T prScanInfo = (P_SCAN_INFO_T)NULL; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucDeviceID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* Loop for each prBssDesc */ - prTargetP2pDesc = scanFindP2pDeviceDesc(prAdapter, - prBssDesc, - aucDeviceID, - TRUE, - FALSE); - - if (prTargetP2pDesc != NULL) { - break; - } - } - - if ((pprBssDesc) && (prTargetP2pDesc != NULL)) { - /* Only valid if prTargetP2pDesc is not NULL. */ - *pprBssDesc = prBssDesc; - } - - return prTargetP2pDesc; -} /* scanSearchTargetP2pDesc */ - - - - -VOID -scanInvalidAllP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (prTargetDesc->fgDevInfoValid) { - prTargetDesc->fgDevInfoValid = FALSE; - } - } - - return; -} /* scanRenewP2pClientDevice */ - -VOID -scanRemoveInvalidP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL, prNexEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - LINK_FOR_EACH_SAFE(prLinkEntry, prNexEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (!prTargetDesc->fgDevInfoValid) { - LINK_REMOVE_KNOWN_ENTRY(&prBssDesc->rP2pDeviceList, prLinkEntry); - if ((prP2pConnSettings) && - (prP2pConnSettings->prTargetP2pDesc == prTargetDesc)) { - prP2pConnSettings->prTargetP2pDesc = NULL; - } - kalMemFree(prTargetDesc, VIR_MEM_TYPE, sizeof(P2P_DEVICE_DESC_T)); - } - } - - return; -} /* scanRenewP2pClientDevice */ - - - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prBssDesc != NULL) && - (aucMacAddr != NULL)); - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (fgIsDeviceAddr) { - if (EQUAL_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr)) { - break; - } - } - else { - if (EQUAL_MAC_ADDR(prTargetDesc->aucInterfaceAddr, aucMacAddr)) { - break; - } - } - - prTargetDesc = NULL; - } - - if ((fgAddIfNoFound) && (prTargetDesc == NULL)) { - /* Target Not Found. */ - // TODO: Use memory pool in the future. - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - } - else { - ASSERT(FALSE); - } - } - - } while (FALSE); - - return prTargetDesc; -} /* scanFindP2pDeviceDesc */ - - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - ASSERT(prAdapter); - ASSERT(prBssDesc); - - if (prBssDesc->prP2pDesc == NULL) { - - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - prBssDesc->prP2pDesc = prTargetDesc; - /* We are not sure the SrcAddr is Device Address or Interface Address. */ - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, prBssDesc->aucSrcAddr); - COPY_MAC_ADDR(prTargetDesc->aucInterfaceAddr, prBssDesc->aucSrcAddr); - } - else { - - ASSERT(FALSE); - } - } - else { - prTargetDesc = prBssDesc->prP2pDesc; - } - - - return prTargetDesc; - -} /* scanFindP2pDeviceDesc */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_DEVICE_DESC_T prP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - BOOLEAN fgUpdateDevInfo = FALSE; - - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - - ASSERT(prAdapter); - - prP2pDesc = scanGetP2pDeviceDesc(prAdapter, prBssDesc); - - if (!prP2pDesc) { - ASSERT(FALSE); - return fgUpdateDevInfo; - } - - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: /* Beacon, Probe Response */ - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - - prP2pDesc->ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - prP2pDesc->ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: /* Beacon */ - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == P2P_ATTRI_MAX_LEN_P2P_DEV_ID); - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: /* Probe Response */ - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - UINT_16 u2NameLen = 0, u2Id = 0; - - fgUpdateDevInfo = TRUE; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &prP2pDesc->rPriDevType; - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); // TODO: Fixme if secondary device type is more than 2. - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)((PUINT_8)prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &u2NameLen); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Id, &u2Id); - ASSERT(u2Id == WPS_ATTRI_ID_DEVICE_NAME); - if (u2NameLen > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - u2NameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - prP2pDesc->u2NameLength = u2NameLen; - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: /* Probe Response */ - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - case P2P_ATTRI_ID_NOTICE_OF_ABSENCE: - break; - case P2P_ATTRI_ID_EXT_LISTEN_TIMING: - // TODO: Not implement yet. - //ASSERT(FALSE); - break; - default: - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - scanInvalidAllP2pClientDevice(prAdapter, prBssDesc); - - /* GO/Device itself. */ - prP2pDesc->fgDevInfoValid = TRUE; - - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - - while (u2AttributeLen > 0) { - prP2pDesc = scanFindP2pDeviceDesc(prAdapter, prBssDesc, prClientInfoDesc->aucDevAddr, TRUE, TRUE); - - if (!prP2pDesc) { - ASSERT(FALSE); - break; /* while */ - } - - prP2pDesc->fgDevInfoValid = TRUE; - - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - if (u2AttributeLen < 25) { - DBGLOG(P2P, WARN, ("Length incorrect warning.\n")); - break; - } - COPY_MAC_ADDR(prP2pDesc->aucInterfaceAddr, prClientInfoDesc->aucIfAddr); - - prP2pDesc->ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - - WLAN_GET_FIELD_BE16(&prClientInfoDesc->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &(prP2pDesc->rPriDevType); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &prP2pDesc->u2NameLength); - if (prP2pDesc->u2NameLength > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prP2pDesc->u2NameLength = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - - u2AttributeLen -= (prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)((UINT_32)prClientInfoDesc + (UINT_32)prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - } - - scanRemoveInvalidP2pClientDevice(prAdapter, prBssDesc); - } - - return fgUpdateDevInfo; -} /* end of scanAddP2pDeviceInfo() */ - -#endif - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - EVENT_P2P_DEV_DISCOVER_RESULT_T rEventDevInfo; -#if 1 - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - COPY_MAC_ADDR(rEventDevInfo.aucDeviceAddr, prTargetDesc->aucDeviceAddr); - COPY_MAC_ADDR(rEventDevInfo.aucInterfaceAddr, prTargetDesc->aucInterfaceAddr); - - rEventDevInfo.ucDeviceCapabilityBitmap = prTargetDesc->ucDeviceCapabilityBitmap; - rEventDevInfo.ucGroupCapabilityBitmap = prTargetDesc->ucGroupCapabilityBitmap; - rEventDevInfo.u2ConfigMethod = prTargetDesc->u2ConfigMethod; - - kalMemCopy(&rEventDevInfo.rPriDevType, - &prTargetDesc->rPriDevType, - sizeof(P2P_DEVICE_TYPE_T)); - - kalMemCopy(rEventDevInfo.arSecDevType, - prTargetDesc->arSecDevType, - (prTargetDesc->ucSecDevTypeNum * sizeof(P2P_DEVICE_TYPE_T))); - - rEventDevInfo.ucSecDevTypeNum = prTargetDesc->ucSecDevTypeNum; - - rEventDevInfo.u2NameLength = prTargetDesc->u2NameLength; - kalMemCopy(rEventDevInfo.aucName, - prTargetDesc->aucName, - prTargetDesc->u2NameLength); - - COPY_MAC_ADDR(rEventDevInfo.aucBSSID, prBssDesc->aucBSSID); - - if (prTargetDesc == prBssDesc->prP2pDesc) { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - prBssDesc->aucIEBuf, - prBssDesc->u2IELength); - } - else { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - NULL, - 0); - } - } - - kalP2PIndicateFound(prAdapter->prGlueInfo); - -#else - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - - ASSERT(prAdapter); - - prP2pSpecificBssInfo = &prAdapter->rWifiVar.rP2pSpecificBssInfo; - -#if 1 - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); -#else - prP2pAttribute = (P_P2P_ATTRIBUTE_T)&prP2pSpecificBssInfo->aucAttributesCache[0]; - u2AttributeLen = prP2pSpecificBssInfo->u2AttributeLen; -#endif - rEventDevInfo.fgDevInfoValid = FALSE; - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - rEventDevInfo.ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - rEventDevInfo.ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == 6); - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - rEventDevInfo.u2ConfigMethod = prP2pAttriDevInfo->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prClientInfoDesc = prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - while (u2AttributeLen > 0) { - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prClientInfoDesc->aucIfAddr, MAC_ADDR_LEN); - rEventDevInfo.ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - rEventDevInfo.u2ConfigMethod = prClientInfoDesc->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(&rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - u2AttributeLen -= prP2pAttriGroupInfo->u2Length; - prP2pAttriGroupInfo = prP2pAttriGroupInfo + prP2pAttriGroupInfo->u2Length + 1; - } - - } -#endif - return WLAN_STATUS_SUCCESS; -} /* scanSendDeviceDiscoverEvent */ - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->fgIsP2PPresent) { - - if ((!prP2pBssInfo->ucDTIMPeriod) && // First time. - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && // P2P GC - (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && // Connected - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON) && // TX Beacon - EQUAL_SSID(prBssDesc->aucSSID, // SSID Match - prBssDesc->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen)) { - - - prP2pBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - do { - RF_CHANNEL_INFO_T rChannelInfo; - - ASSERT_BREAK((prSwRfb != NULL) && (prBssDesc != NULL)); - - if (((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) != MAC_FRAME_PROBE_RSP)) { - // Only report Probe Response frame to supplicant. - /* Probe response collect much more information. */ - break; - } - - rChannelInfo.ucChannelNum = prBssDesc->ucChannelNum; - rChannelInfo.eBand = prBssDesc->eBand; - - kalP2PIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - &rChannelInfo, - RCPI_TO_dBm(prBssDesc->ucRCPI)); - - - } while (FALSE); - } -} - -VOID -scnEventReturnChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ) -{ - - CMD_SCAN_CANCEL rCmdScanCancel; - - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = ucScnSeqNum; - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - return; -} /* scnEventReturnChannel */ - -VOID -scanRemoveAllP2pBssDesc( - IN P_ADAPTER_T prAdapter - ) -{ - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prBSSDescNext; - - ASSERT(prAdapter); - - prBSSDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - scanRemoveP2pBssDesc(prAdapter, prBssDesc); - } -} /* scanRemoveAllP2pBssDesc */ - -VOID -scanRemoveP2pBssDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - return; -} /* scanRemoveP2pBssDesc */ - - -P_BSS_DESC_T -scanP2pSearchDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ) -{ - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL, prBssDesc = (P_BSS_DESC_T)NULL; - P_LINK_T prBssDescList = (P_LINK_T)NULL; - - do { - if ((prAdapter == NULL) || - (prP2pBssInfo == NULL) || - (prConnReqInfo == NULL)) { - break; - } - - - prBssDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - DBGLOG(P2P, LOUD, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, LOUD, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - - LINK_FOR_EACH_ENTRY(prBssDesc, prBssDescList, rLinkEntry, BSS_DESC_T) { - DBGLOG(P2P, LOUD, ("Checking BSS: "MACSTR"\n", MAC2STR(prBssDesc->aucBSSID))); - - if (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSS type.\n")); - continue; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnReqInfo->aucBssid)) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSSID.\n")); - continue; - } - - - /* SSID should be the same? SSID is vary for each connection. so... */ - if (UNEQUAL_SSID(prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)) { - - DBGLOG(P2P, TRACE, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, TRACE, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - DBGLOG(P2P, TRACE, ("Checking SSID:%s, length:%d\n", - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)); - DBGLOG(P2P, TRACE, ("Ignore mismatch SSID, (But BSSID match).\n")); - ASSERT(FALSE); - continue; - } - - if (!prBssDesc->fgIsP2PPresent) { - DBGLOG(P2P, ERROR, ("SSID, BSSID, BSSTYPE match, but no P2P IE present.\n")); - continue; - } - - /* Final decision. */ - prCandidateBssDesc = prBssDesc; - break; - } - - - - } while (FALSE); - - return prCandidateBssDesc; -} /* scanP2pSearchDesc */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_state.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_state.c deleted file mode 100755 index 64b9ae62aaf9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/p2p_state.c +++ /dev/null @@ -1,577 +0,0 @@ -#include "p2p_precomp.h" - - -BOOLEAN -p2pStateInit_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ) -{ - BOOLEAN fgIsTransOut = FALSE; -// P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (peNextState != NULL)); - - if ((prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) && IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - fgIsTransOut = TRUE; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - *peNextState = P2P_STATE_REQING_CHANNEL; - - } - else { -#if 0 - else if (IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - - ASSERT((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Start a timer for return channel. */ - DBGLOG(P2P, TRACE, ("start a GO channel timer.\n")); - } - - } - -#endif - cnmTimerStartTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer), 5000); - } - - } while (FALSE); - - return fgIsTransOut; -} /* p2pStateInit_IDLE */ - - -VOID -p2pStateAbort_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Release channel before timeout. */ - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - - /* Stop timer for leaving this state. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - } while (FALSE); - - return; -} /* p2pStateAbort_IDLE */ - - - -VOID -p2pStateInit_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Store the original channel info. */ - prChnlReqInfo->ucOriChnlNum = prP2pBssInfo->ucPrimaryChannel; - prChnlReqInfo->eOriBand = prP2pBssInfo->eBand; - prChnlReqInfo->eOriChnlSco = prP2pBssInfo->eBssSCO; - - /* RX Probe Request would check primary channel.*/ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eChnlSco; - - - DBGLOG(P2P, TRACE, ("start a channel on hand timer.\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - prChnlReqInfo->u4MaxInterval); - - kalP2PIndicateChannelReady(prAdapter->prGlueInfo, - prChnlReqInfo->u8Cookie, - prChnlReqInfo->ucReqChnlNum, - prChnlReqInfo->eBand, - prChnlReqInfo->eChnlSco, - prChnlReqInfo->u4MaxInterval); - - } while (FALSE); - - return; -} /* p2pStateInit_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Restore the original channel info. */ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucOriChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eOriBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eOriChnlSco; - - if (eNextState != P2P_STATE_CHNL_ON_HAND) { - /* Indicate channel return. */ - kalP2PIndicateChannelExpired(prAdapter->prGlueInfo, &prP2pFsmInfo->rChnlReqInfo); - - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } while (FALSE); - return; -} /* p2pStateAbort_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_REQING_CHANNEL ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (eNextState < P2P_STATE_NUM)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (eNextState == P2P_STATE_IDLE) { - if (prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) { - /* Intend to be AP. */ - /* Setup for AP mode. */ - p2pFuncStartGO(prAdapter, - prP2pBssInfo, - prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - prP2pSpecificBssInfo->ucPreferredChannel, - prP2pSpecificBssInfo->eRfBand, - prP2pSpecificBssInfo->eRfSco, - prP2pFsmInfo->fgIsApMode); - - } - else { - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } - - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->eScanType = SCAN_TYPE_PASSIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_2G4; - prScanReqInfo->u2PassiveDewellTime = 50; // 50ms for passive channel load detection - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->fgIsScanRequest = TRUE; - prScanReqInfo->ucNumChannelList = 0; - prScanReqInfo->u4BufLength = 0; - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - - -VOID -p2pStateAbort_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - - if (eNextState == P2P_STATE_REQING_CHANNEL) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Determine the channel for AP. */ - if (cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) { - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if ((ucPreferedChnl = prP2pConnSettings->ucOperatingChnl) == 0) { - - if (scnQuerySparseChannel(prAdapter, &eBand, &ucPreferedChnl) == FALSE) { - - // What to do? - ASSERT(FALSE); - // TODO: Pick up a valid channel from channel list. - ucPreferedChnl = 1; - eBand = BAND_2G4; - } - } - } - - - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand = eBand; - prChnlReqInfo->eChnlSco = prP2pSpecificBssInfo->eRfSco = eSco; - } - else { - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - } - - - } while (FALSE); - - return; -} /* p2pStateAbort_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_SCAN ( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &prP2pFsmInfo->rScanReqInfo; - - prScanReqInfo->fgIsScanRequest = TRUE; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - return; -} /* p2pStateInit_SCAN */ - - -VOID -p2pStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - do { - ASSERT_BREAK(prAdapter != NULL); - - // 1. Scan cancel. (Make sure the scan request is invalid. - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - - // Scan done indication. - kalP2PIndicateScanDone(prAdapter->prGlueInfo, prP2pFsmInfo->rScanReqInfo.fgIsAbort); - } while (FALSE); - - return; -} /* p2pStateAbort_SCAN */ - - -VOID -p2pStateInit_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (prJoinInfo != NULL) && - (prBssDesc != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - - // Setup a join timer. - DBGLOG(P2P, TRACE, ("Start a join init timer\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (prP2pFsmInfo->u4GrantInterval - AIS_JOIN_CH_GRANT_THRESHOLD)); - - //2 <1> We are goin to connect to this BSS - prBssDesc->fgIsConnecting = TRUE; - - //2 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - (prBssDesc->fgIsP2PPresent?(STA_TYPE_P2P_GO):(STA_TYPE_LEGACY_AP)), - NETWORK_TYPE_P2P_INDEX, - prBssDesc); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Create station record fail\n")); - break; - } - - - prJoinInfo->prTargetStaRec = prStaRec; - prJoinInfo->fgIsJoinComplete = FALSE; - prJoinInfo->u4BufLength = 0; - - //2 <2.1> Sync. to FW domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prStaRec->fgIsReAssoc = FALSE; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - switch (prP2pConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - case AUTH_MODE_SHARED: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(P2P, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prJoinInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - default: - ASSERT(!(prP2pConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(P2P, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prP2pConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - } - else { - ASSERT(FALSE); - // TODO: Shall we considering ROAMIN case for P2P Device?. - } - - - //2 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes. - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prJoinInfo->rSsidStruct.aucSsid, - prJoinInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - //2 <5> Backup desired channel. - - //2 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - - if (!prJoinReqMsg) { - DBGLOG(P2P, TRACE, ("Allocation Join Message Fail\n")); - ASSERT(FALSE); - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - // TODO: Consider fragmentation info in station record. - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - - - } while (FALSE); - - return; -} /* p2pStateInit_GC_JOIN */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort. Leave JOIN State & Abort JOIN. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pStateAbort_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_MSG_JOIN_ABORT_T prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL) && (prJoinInfo != NULL)); - - if (prJoinInfo->fgIsJoinComplete == FALSE) { - - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - DBGLOG(P2P, TRACE, ("Fail to allocate join abort message buffer\n")); - ASSERT(FALSE); - return; - } - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prJoinInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prJoinInfo->prTargetStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - } - - /* Stop Join Timer. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Release channel requested. */ - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - - } while (FALSE); - - return; - -} /* p2pStateAbort_GC_JOIN */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/privacy.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/privacy.c deleted file mode 100755 index 66b33a631b71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/privacy.c +++ /dev/null @@ -1,1024 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/privacy.c#1 $ -*/ - -/*! \file "privacy.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from rsn.c and nic_privacy.c - -*/ - - - -/* -** $Log: privacy.c $ - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2011 terry.wu - * NULL - * Fix Hotspot deauth send failed. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 28 2011 tsaiyuan.hsu - * [WCXRP00000819] [MT6620 Wi-Fi][Driver] check if staRec is NULL or not in secCheckClassError - * check if staRec is NULL or not in secCheckClassError. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for migration. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 22 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the wpi same key id rx issue and fixed the remove wep key issue. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * remove the assert code for allow ad-hoc pkt. - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * change the waning message shown level, and clear the global transmit flag for CMD INFRASTRUCTURE. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * * * MQM: BA handling - * * * * * * * * * TXM: Macros updates - * * * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * modify the cmd with result return - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the value not initialize issue - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to update the auth mode and encryption status for cmd build connection - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some code for wapi mode - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the call to check the 4th and eapol error report frame - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function name - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for parsing the EAPoL frame, and do some code refine - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the class error check - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the cmd_802_11_pmkid code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * doing some function rename, and adding the code for cmd CMD_ADD_REMOVE_KEY - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the clear pmkid function - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eStaType check for AIS - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection related code - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_PRIVACY_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the privacy-related -* parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] ucNetTypeIdx Pointer to netowrk type index -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secInit ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ) -{ - UINT_8 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secInit"); - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prBssInfo->u4RsnSelectedGroupCipher = 0; - prBssInfo->u4RsnSelectedPairwiseCipher = 0; - prBssInfo->u4RsnSelectedAKMSuite = 0; - -#if CFG_ENABLE_WIFI_DIRECT - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[0].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[1].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[2].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[3].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP104; - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[4].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[5].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[6].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[7].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP104; - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[0].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[1].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[2].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_PSK; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[3].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[4].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[5].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK; - -#if CFG_SUPPORT_802_11W - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[6].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X_SHA256; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[7].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK_SHA256; -#endif - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i].dot11RSNAConfigAuthenticationSuiteEnabled = - FALSE; - } - - secClearPmkid(prAdapter); - - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rPreauthenticationTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnIndicatePmkidCand, - (UINT_32)NULL); - -#if CFG_SUPPORT_802_11W - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rSaQueryTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnStartSaQueryTimer, - (UINT_32)NULL); -#endif - - prAisSpecBssInfo->fgCounterMeasure = FALSE; - prAisSpecBssInfo->ucWEPDefaultKeyID = 0; - - - #if 0 - for (i=0;iarWtbl[i].fgUsed = FALSE; - g_prWifiVar->arWtbl[i].prSta = NULL; - g_prWifiVar->arWtbl[i].ucNetTypeIdx = NETWORK_TYPE_INDEX_NUM; - - } - nicPrivacyInitialize((UINT_8)NETWORK_TYPE_INDEX_NUM); - #endif -} /* secInit */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Rx Class Error" to SEC_FSM for -* JOIN Module. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSwRfb Pointer to the SW RFB. -* -* \return FALSE Class Error -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secCheckClassError ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prSwRfb); - //ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prSwRfb->ucStaRecIdx]); - - if ((prStaRec) && 1 /* RXM_IS_DATA_FRAME(prSwRfb) */) { - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = prStaRec->ucNetTypeIndex; - - if (IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - P_BSS_INFO_T prBssInfo; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]; - - if ((STA_STATE_3 != prStaRec->ucStaState) && - IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->fgIsNetAbsent == FALSE) { - /*(IS_AP_STA(prStaRec) || IS_CLIENT_STA(prStaRec))) {*/ - - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - prStaRec, - NULL, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - - DBGLOG(RSN, INFO, ("Send Deauth to MAC:["MACSTR"] for Rx Class 3 Error.\n", - MAC2STR(prStaRec->aucMacAddr))); - } - - return FALSE; - } - - return secRxPortControlCheck(prAdapter, prSwRfb); - } - } - - return FALSE; -} /* end of secCheckClassError() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to setting the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[in] fgPortBlock The port status -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetPortBlocked ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPortBlock - ) -{ - if (prSta == NULL) - return ; - - prSta->fgPortBlock = fgPortBlock; - - DBGLOG(RSN, TRACE, ("The STA "MACSTR" port %s\n", MAC2STR(prSta->aucMacAddr), fgPortBlock == TRUE ? "BLOCK" :" OPEN")); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to report the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[out] fgPortBlock The port status -* -* \return TRUE sta exist, FALSE sta not exist -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secGetPortStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - OUT PBOOLEAN pfgPortStatus - ) -{ - if (prSta == NULL) - return FALSE; - - *pfgPortStatus = prSta->fgPortBlock; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle Peer device Tx Security process MSDU. -* -* \param[in] prMsduInfo pointer to the packet info pointer -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port blocked -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL /* ENUM_PORT_CONTROL_RESULT */ -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - if (prStaRec) { - - /* Todo:: */ - if (prMsduInfo->fgIs802_1x) - return TRUE; - - if (prStaRec->fgPortBlock == TRUE) { - DBGLOG(INIT, TRACE, ("Drop Tx packet due Port Control!\n")); - return FALSE; - } - -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - return TRUE; - } -#endif - if (IS_STA_IN_AIS(prStaRec)) { - if (!prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist && - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED)){ - DBGLOG(INIT, TRACE, ("Drop Tx packet due the key is removed!!!\n")); - return FALSE; - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The Rx Security process MSDU. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSWRfb SW rfb pinter -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRxPortControlCheck ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ) -{ - ASSERT(prSWRfb); - -#if 0 - /* whsu:Todo: Process MGMT and DATA */ - if (prSWRfb->prStaRec) { - if (prSWRfb->prStaRec->fgPortBlock == TRUE) { - if (1 /* prSWRfb->fgIsDataFrame and not 1x*/ && - (g_prWifiVar->rConnSettings.eAuthMode >= AUTH_MODE_WPA)){ - //DBGLOG(SEC, WARN, ("Drop Rx data due port control !\r\n")); - return TRUE; /* Todo: whsu FALSE; */ - } - //if (!RX_STATUS_IS_PROTECT(prSWRfb->prRxStatus)) { - // DBGLOG(RSN, WARN, ("Drop rcv non-encrypted data frame!\n")); - // return FALSE; - //} - } - } - else { - } -#endif - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will enable/disable the cipher suite -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4CipherSuitesFlags flag for cipher suite -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetCipherSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ) -{ - UINT_32 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - P_IEEE_802_11_MIB_T prMib; - - ASSERT(prAdapter); - - prMib = &prAdapter->rMib; - - ASSERT(prMib); - - if (u4CipherSuitesFlags == CIPHER_FLAG_NONE) { - /* Disable all the pairwise cipher suites. */ - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prMib->dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - /* Update the group cipher suite. */ - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - - return; - } - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prMib->dot11RSNAConfigPairwiseCiphersTable[i]; - - switch (prEntry->dot11RSNAConfigPairwiseCipher) { - case WPA_CIPHER_SUITE_WEP40: - case RSN_CIPHER_SUITE_WEP40: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP40) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (u4CipherSuitesFlags & CIPHER_FLAG_TKIP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (u4CipherSuitesFlags & CIPHER_FLAG_CCMP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_WEP104: - case RSN_CIPHER_SUITE_WEP104: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP104) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - default: - break; - } - } - - /* Update the group cipher suite. */ - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP40; - } - else { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - } - -} /* secSetCipherSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The 2nd Tx EAPoL Frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsduInfo pointer to the packet info pointer -* \param[in] pucPayload pointer to the 1x hdr -* \param[in] u2PayloadLen the 1x payload length -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secProcessEAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen -) -{ - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - P_IEEE_802_1X_HDR pr1xHdr; - UINT_16 u2KeyInfo; - - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prMsduInfo->ucStaRecIndex]); - ASSERT(prStaRec); - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)pucPayload; - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)((PUINT_32)(pucPayload + 4)); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (u2KeyInfo & WPA_KEY_INFO_SECURE) { - /* 4th EAPoL check at secHandleTxDoneCallback() */ - //DBGLOG(RSN, TRACE, ("Tx 4th EAPoL frame\r\n")); - } - else if (u2PayloadLen == 123 /* Not include LLC */) { - DBGLOG(RSN, INFO, ("Tx 2nd EAPoL frame\r\n")); - secFsmEvent2ndEapolTx(prAdapter, prStaRec); - } - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will handle the 4th EAPoL Tx done and mic Error Report frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ) -{ - PUINT_8 pucPayload; - P_IEEE_802_1X_HDR pr1xHdr = (P_IEEE_802_1X_HDR)NULL; - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - UINT_16 u2KeyInfo; - UINT_16 u2PayloadLen; - - DEBUGFUNC("secHandleTxDoneCallback"); - - ASSERT(prMsduInfo); - //Todo:: Notice if using the TX free immediate after send to firmware, the payload may not correcttly!!!! - - ASSERT(prStaRec); - - //Todo:: This call back may not need because the order of set key and send 4th 1x can be make sure - //Todo:: Notice the LLC offset - #if 1 - pucPayload = (PUINT_8)prMsduInfo->prPacket; - ASSERT(pucPayload); - - u2PayloadLen = prMsduInfo->u2FrameLength; - - if (0 /* prMsduInfo->fgIs1xFrame */) { - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)(PUINT_32)(pucPayload + 8); - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)(PUINT_32)(pucPayload + 12); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (prStaRec->rSecInfo.fg2nd1xSend == TRUE && u2PayloadLen == 107 /* include LLC *//* u2KeyInfo & WPA_KEY_INFO_SECURE */) { - DBGLOG(RSN, INFO, ("Tx 4th EAPoL frame\r\n")); - secFsmEvent4ndEapolTxDone(prAdapter, prStaRec); - } - else if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone){ - DBGLOG(RSN, INFO, ("Tx EAPoL Error report frame\r\n")); - //secFsmEventEapolTxDone(prAdapter, (UINT_32)prMsduInfo->prStaRec); - } - } - } - } - - } - #endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the pmkid parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secClearPmkid ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secClearPmkid"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("secClearPmkid\n")); - prAisSpecBssInfo->u4PmkidCandicateCount = 0; - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCandicate, sizeof(PMKID_CANDICATE_T) * CFG_MAX_PMKID_CACHE); - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether WPA, or WPA2 but not WPA-None is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRsnKeyHandshakeEnabled ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - - ASSERT(prConnSettings); - - ASSERT(prConnSettings->eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION_DISABLED) { - return FALSE; - } - - ASSERT(prConnSettings->eAuthMode < AUTH_MODE_NUM); - if ((prConnSettings->eAuthMode >= AUTH_MODE_WPA) && - (prConnSettings->eAuthMode != AUTH_MODE_WPA_NONE)) { - return TRUE; - } - - return FALSE; -} /* secRsnKeyHandshakeEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return whether the transmit key alread installed. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer the sta record -* -* \retval TRUE Default key or Transmit key installed -* FALSE Default key or Transmit key not installed -* -* \note: -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secTransmitKeyExist ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prSta); - - if (prSta->fgTransmitKeyExist){ - return TRUE; - } - else { - return FALSE; - } -} /* secTransmitKeyExist */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether 802.11 privacy is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secEnabledInAis ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("secEnabled"); - - ASSERT(prAdapter->rWifiVar.rConnSettings.eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION_DISABLED: - return FALSE; - case ENUM_ENCRYPTION1_ENABLED: - case ENUM_ENCRYPTION2_ENABLED: - case ENUM_ENCRYPTION3_ENABLED: - return TRUE; - default: - DBGLOG(RSN, TRACE, ("Unknown encryption setting %d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - break; - } - return FALSE; -} /* secEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the privacy bit at mac header for TxM -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsdu the msdu for known the sta record -* -* \return TRUE the privacy need to set -* FALSE the privacy no need to set -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - - ASSERT(prMsdu); - - ASSERT(prStaRec); - //prStaRec = &(g_arStaRec[prMsdu->ucStaRecIndex]); - - if (prStaRec == NULL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist) - return TRUE; - return FALSE; /* No privacy bit */ - } - - /* Todo:: */ - if (0 /* prMsdu->fgIs1xFrame */){ - if (IS_STA_IN_AIS(prStaRec) && - prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - DBGLOG(RSN, LOUD, ("For AIS Legacy 1x, always not encryped\n")); - return FALSE; - } - else if (!prStaRec->fgTransmitKeyExist) { - DBGLOG(RSN, LOUD, ("1x Not Protected.\n")); - return FALSE; - } - else if (prStaRec->rSecInfo.fgKeyStored) { - DBGLOG(RSN, LOUD, ("1x not Protected due key stored!\n")); - return FALSE; - } - else { - DBGLOG(RSN, LOUD, ("1x Protected.\n")); - return TRUE; - } - } - else { - if (!prStaRec->fgTransmitKeyExist) { - /* whsu , check for AIS only */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist){ - DBGLOG(RSN, LOUD, ("Protected\n")); - return TRUE; - } - } - else { - DBGLOG(RSN, LOUD, ("Protected.\n")); - return TRUE; - } - } - - /* No sec or key is removed!!! */ - return FALSE; -} -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rate.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rate.c deleted file mode 100755 index c63fe7b7d641..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rate.c +++ /dev/null @@ -1,547 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rate.c#1 $ -*/ - -/*! \file "rate.c" - \brief This file contains the transmission rate handling routines. - - This file contains the transmission rate handling routines for setting up - ACK/CTS Rate, Highest Tx Rate, Lowest Tx Rate, Initial Tx Rate and do - conversion between Rate Set and Data Rates. -*/ - - - -/* -** $Log: rate.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add rate.c. - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comments - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix DBGLOG - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** \main\maintrunk.MT5921\12 2008-12-19 17:19:32 GMT mtk01461 -** Fix the problem that do not ASSERT the length of Supported Rate IE == 8 -** \main\maintrunk.MT5921\11 2008-12-01 18:17:42 GMT mtk01088 -** fixed the lint "possible using null pointer" warning -** \main\maintrunk.MT5921\10 2008-08-20 00:16:36 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\9 2008-04-13 21:17:13 GMT mtk01461 -** Revise GEN Link Speed OID -** \main\maintrunk.MT5921\8 2008-03-28 10:40:13 GMT mtk01461 -** Add rateGetRateSetFromDataRates() for set desired rate OID -** \main\maintrunk.MT5921\7 2008-03-26 09:16:20 GMT mtk01461 -** Add adopt operational rate as ACK rate if BasicRateSet was not found -** Add comments -** \main\maintrunk.MT5921\6 2008-02-21 15:01:39 GMT mtk01461 -** Add initial rate according rx signal quality support -** \main\maintrunk.MT5921\5 2008-01-07 15:06:44 GMT mtk01461 -** Fix typo of rate adaptation of CtrlResp Frame -** \main\maintrunk.MT5921\4 2007-10-25 18:05:12 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* The list of valid data rates. */ -const UINT_8 aucDataRate[] = { - RATE_1M, /* RATE_1M_INDEX = 0 */ - RATE_2M, /* RATE_2M_INDEX */ - RATE_5_5M, /* RATE_5_5M_INDEX */ - RATE_11M, /* RATE_11M_INDEX */ - RATE_22M, /* RATE_22M_INDEX */ - RATE_33M, /* RATE_33M_INDEX */ - RATE_6M, /* RATE_6M_INDEX */ - RATE_9M, /* RATE_9M_INDEX */ - RATE_12M, /* RATE_12M_INDEX */ - RATE_18M, /* RATE_18M_INDEX */ - RATE_24M, /* RATE_24M_INDEX */ - RATE_36M, /* RATE_36M_INDEX */ - RATE_48M, /* RATE_48M_INDEX */ - RATE_54M, /* RATE_54M_INDEX */ - RATE_HT_PHY /* RATE_HT_PHY_INDEX */ -}; - -static const UINT_8 aucDefaultAckCtsRateIndex[RATE_NUM] = { - RATE_1M_INDEX, /* RATE_1M_INDEX = 0 */ - RATE_2M_INDEX, /* RATE_2M_INDEX */ - RATE_5_5M_INDEX, /* RATE_5_5M_INDEX */ - RATE_11M_INDEX, /* RATE_11M_INDEX */ - RATE_1M_INDEX, /* RATE_22M_INDEX - Not supported */ - RATE_1M_INDEX, /* RATE_33M_INDEX - Not supported */ - RATE_6M_INDEX, /* RATE_6M_INDEX */ - RATE_6M_INDEX, /* RATE_9M_INDEX */ - RATE_12M_INDEX, /* RATE_12M_INDEX */ - RATE_12M_INDEX, /* RATE_18M_INDEX */ - RATE_24M_INDEX, /* RATE_24M_INDEX */ - RATE_24M_INDEX, /* RATE_36M_INDEX */ - RATE_24M_INDEX, /* RATE_48M_INDEX */ - RATE_24M_INDEX /* RATE_54M_INDEX */ -}; - -const BOOLEAN afgIsOFDMRate[RATE_NUM] = { - FALSE, /* RATE_1M_INDEX = 0 */ - FALSE, /* RATE_2M_INDEX */ - FALSE, /* RATE_5_5M_INDEX */ - FALSE, /* RATE_11M_INDEX */ - FALSE, /* RATE_22M_INDEX - Not supported */ - FALSE, /* RATE_33M_INDEX - Not supported */ - TRUE, /* RATE_6M_INDEX */ - TRUE, /* RATE_9M_INDEX */ - TRUE, /* RATE_12M_INDEX */ - TRUE, /* RATE_18M_INDEX */ - TRUE, /* RATE_24M_INDEX */ - TRUE, /* RATE_36M_INDEX */ - TRUE, /* RATE_48M_INDEX */ - TRUE /* RATE_54M_INDEX */ -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Supported Rate & Extended Supported Rate IE to the -* Operational Rate Set and Basic Rate Set, and also check if any Basic -* Rate Code is unknown by driver. -* -* @param[in] prIeSupportedRate Pointer to the Supported Rate IE -* @param[in] prIeExtSupportedRate Pointer to the Ext Supported Rate IE -* @param[out] pu2OperationalRateSet Pointer to the Operational Rate Set -* @param[out] pu2BSSBasicRateSet Pointer to the Basic Rate Set -* @param[out] pfgIsUnknownBSSBasicRate Pointer to a Flag to indicate that Basic -* Rate Set has unknown Rate Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ) -{ - UINT_16 u2OperationalRateSet = 0; - UINT_16 u2BSSBasicRateSet = 0; - BOOLEAN fgIsUnknownBSSBasicRate = FALSE; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pu2OperationalRateSet); - ASSERT(pu2BSSBasicRateSet); - ASSERT(pfgIsUnknownBSSBasicRate); - - if (prIeSupportedRate) { - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - //ASSERT(prIeSupportedRate->ucLength <= ELEM_MAX_LEN_SUP_RATES); - ASSERT(prIeSupportedRate->ucLength <= RATE_NUM); - - for (i = 0; i < prIeSupportedRate->ucLength; i++) { - ucRate = prIeSupportedRate->aucSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - - if (prIeExtSupportedRate) { - //ASSERT(prIeExtSupportedRate->ucLength <= ELEM_MAX_LEN_EXTENDED_SUP_RATES); - - for (i = 0; i < prIeExtSupportedRate->ucLength; i++) { - ucRate = prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - *pu2OperationalRateSet = u2OperationalRateSet; - *pu2BSSBasicRateSet = u2BSSBasicRateSet; - *pfgIsUnknownBSSBasicRate = fgIsUnknownBSSBasicRate; - - return; - -} /* end of rateGetRateSetFromIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Operational Rate Set & Basic Rate Set to the Rate Code -* Format for used in (Ext)Supportec Rate IE. -* -* @param[in] u2OperationalRateSet Operational Rate Set -* @param[in] u2BSSBasicRateSet Basic Rate Set -* @param[out] pucDataRates Pointer to the Data Rate Buffer -* @param[out] pucDataRatesLen Pointer to the Data Rate Buffer Length -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ) -{ - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pucDataRatesLen); - - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - for (i = RATE_1M_INDEX, j = 0; i < RATE_NUM; i++) { - if (u2OperationalRateSet & BIT(i)) { - - *(pucDataRates + j) = aucDataRate[i]; - - if (u2BSSBasicRateSet & BIT(i)) { - *(pucDataRates + j) |= RATE_BASIC_BIT; - } - - j++; - } - } - - *pucDataRatesLen = (UINT_8)j; - - return; - -} /* end of rateGetDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the highest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucHighestRateIndex Pointer to buffer of the Highest Rate Index -* -* \retval TRUE Highest Rate Index was found -* \retval FALSE Highest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ) -{ - INT_32 i; - - - ASSERT(pucHighestRateIndex); - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucHighestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetHighestRateIndexFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the lowest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucLowestRateIndex Pointer to buffer of the Lowest Rate Index -* -* \retval TRUE Lowest Rate Index was found -* \retval FALSE Lowest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ) -{ - UINT_32 i; - - ASSERT(pucLowestRateIndex); - - for (i = RATE_1M_INDEX; i <= RATE_54M_INDEX; i++) { - if (u2RateSet & BIT(i)) { - *pucLowestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetLowestRateIndexFromRateSet() */ - - -#if 0 // NOTE(Kevin): For reference -/*----------------------------------------------------------------------------*/ -/*! -* \brief Convert the given Data Rates to the Rate Set. -* -* \param[in] pucDataRates Pointer to the Data Rates -* \param[in] ucDataRatesLen Length of given Data Rates -* \param[out] pu2RateSet Pointer to the Rate Set -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromDataRates ( - IN PUINT_8 pucDataRates, - IN UINT_8 ucDataRatesLen, - OUT PUINT_16 pu2RateSet - ) -{ - UINT_16 u2RateSet = 0; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pu2RateSet); - - if (pucDataRates) { - for (i = 0; i < ucDataRatesLen; i++) { - ucRate = pucDataRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2RateSet |= BIT(j); - break; - } - } - } - } - - *pu2RateSet = u2RateSet; - - return; - -} /* end of rateGetRateSetFromDataRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the Operational Rate Set and Basic Rate Set to get the corresponding -* ACK/CTS(Respnose) TX Rates. -* -* \param[in] u2OperationalRateSet Operational Rate Set -* \param[in] u2BSSBasicRateSet Basic Rate Set -* \param[out] aucAckCtsRateIndex Pointer to the Ack/Cts Data Rate Buffer -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateSetAckCtsDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - IN OUT UINT_8 aucAckCtsRateIndex[] - ) -{ - INT_32 i,j; - - - ASSERT(aucAckCtsRateIndex); - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - /* Setup default ACK/CTS response rate */ - kalMemCopy(aucAckCtsRateIndex, (PVOID)aucDefaultAckCtsRateIndex, sizeof(aucDefaultAckCtsRateIndex)); - - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2OperationalRateSet & BIT(i)) { - for (j = i; j >= RATE_1M_INDEX; j--) { - if (u2BSSBasicRateSet & BIT(j)) { - if ((afgIsOFDMRate[i] && afgIsOFDMRate[j]) || (!afgIsOFDMRate[i] && !afgIsOFDMRate[j])) // Reply ACK Frame at the same Modulation Scheme. - aucAckCtsRateIndex[i] = (UINT_8)j; - break; - } - } - - /* NOTE(Kevin 2008/03/25): Following code is used for those AP which has - * NULL BasicRateSet. - * e.g. If input Operational Rate Set = [18M 12M 9M], Basic Rate Set = NULL. - * Originally we'll get Ack Rate for [18M 12M 9M] is [12M 12M "6M"]. - * Now we'll get Ack Rate for [18M 12M 9M] is [12M 12M 9M], - * The Ack Rate for Tx Rates which are not list in Operational Rate Set is still - * use highest mandatory rate as default. - */ - if (j < RATE_1M_INDEX) { /* The ACK/CTS rate was not found in BasicRateSet */ - if (!(BIT(aucAckCtsRateIndex[i]) & u2OperationalRateSet)) { - aucAckCtsRateIndex[i] = (UINT_8)i; - } - } - } - } - - return; - -} /* end of rateSetAckCtsDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the proper initial rate from Rate Set according to given RCPI value -* -* \param[in] u2RateSet Rate Set -* \param[in] rRcpi RCPI value from AP or Peer STA -* \param[out] pucInitialRateIndex Pointer to buffer of the initial Rate Index -* -* \retval TRUE Initial Rate Index was found -* \retval FALSE Initial Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetBestInitialRateIndex ( - IN UINT_16 u2RateSet, - IN RCPI rRcpi, - OUT PUINT_8 pucInitialRateIndex - ) -{ - UINT_16 u2InitRateSet; - INT_32 i; - - - ASSERT(pucInitialRateIndex); - - DBGLOG(MGT, TRACE, ("rRcpi = %d\n", rRcpi)); - - if (rRcpi >= RCPI_100) { /* Best Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_100); - } - else if (rRcpi >= RCPI_80) { /* Better Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_80); - } - else if (rRcpi >= RCPI_60) { /* Good Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_60); - } - else { /* Worse Signal */ - /* NOTE(Kevin): If return FALSE, we should assign the BSS Basic Rate Index - * (prBssInfo->ucBasicRateIndex) to the initial rate. It was determined in - * function - bssUpdateTxRateForControlFrame(). - */ - return FALSE; - } - - u2RateSet &= u2InitRateSet; - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucInitialRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetBestInitialRateIndex() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm.c deleted file mode 100755 index 2b283564ea0b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm.c +++ /dev/null @@ -1,1752 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm.c#2 $ -*/ - -/*! \file "rlm.c" - \brief - -*/ - - - -/* -** $Log: rlm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Check length HT cap IE about RX associate request frame - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Fix preamble type of STA mode - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Not send ERP IE if peer STA is 802.11b-only - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 28 2011 cm.chang - * NULL - * Add length check to reduce possibility to adopt wrong IE - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 01 2011 cm.chang - * [WCXRP00000971] [MT6620 Wi-Fi][Driver][FW] Not set Beacon timeout interval when CPTT - * Final channel number only adopts the field from assoc response - * - * 06 10 2011 cm.chang - * [WCXRP00000773] [MT6620 Wi-Fi][Driver] Workaround some AP fill primary channel field with its secondary channel - * If DS IE exists, ignore the primary channel field in HT OP IE - * - * 05 03 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Fix compiling error - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 15 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when no mgmt buffer in free build - * - * 10 08 2010 cm.chang - * NULL - * When 20M only setting, ignore OBSS IE - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Temporary add rlmUpdateParamByStaForBow() and rlmBssInitForBow(). - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix channel ID definition in RFB status to primary channel instead of center channel - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add TX short GI compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Utilize status of swRfb to know channel number and band - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 04 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process Beacon only ready for infra STA now - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 15 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide draft measurement and quiet functions - * - * 03 09 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * If bss is not 11n network, zero WTBL HT parameters - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Generate HT IE only depending on own phyTypeSet - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not fill HT related IE if BssInfo does not include 11n phySet - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RDG RX, but disable RDG TX for IOT and LongNAV - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Modify the parameter of rlmRecAssocRspHtInfo function - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix prBssInfo->ucPrimaryChannel handle for assoc resp - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add some function to process HT operation - * - * Nov 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlmStatisticsInit() to handle MIB counters - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Note: assume TIMER_T structures are reset to zero or stopped - * before invoking this function. - */ - - /* Initialize OBSS FSM */ - rlmObssInit(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - /* Note: all RLM timers will also be stopped. - * Now only one OBSS scan timer. - */ - rlmBssReset(prAdapter, prBssInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtOpIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_IE_ERP_T prErpIe; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11GN(prBssInfo) && prBssInfo->eBand == BAND_2G4 && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11GN))) { - prErpIe = (P_IE_ERP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add ERP IE */ - prErpIe->ucId = ELEM_ID_ERP_INFO; - prErpIe->ucLength = 1; - - prErpIe->ucERP = prBssInfo->fgObssErpProtectMode ? - ERP_INFO_USE_PROTECTION : 0; - - if (prBssInfo->fgErpProtectMode) { - prErpIe->ucERP |= - (ERP_INFO_NON_ERP_PRESENT | ERP_INFO_USE_PROTECTION); - } - - /* Handle barker preamble */ - if (!prBssInfo->fgUseShortPreamble) { - prErpIe->ucERP |= ERP_INFO_BARKER_PREAMBLE_MODE; - } - - ASSERT(IE_SIZE(prErpIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_ERP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prErpIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_CAP_T prHtCap; - P_SUP_MCS_SET_FIELD prSupMcsSet; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - -#if 1 - if(prMsduInfo->ucNetworkType==NETWORK_TYPE_P2P_INDEX) - { - DBGLOG(AIS, WARN,("Assoc:Force P2P BW to 20\n")); - prBssInfo->fgAssoc40mBwAllowed=FALSE; - } -#endif - - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - prHtCap = (P_IE_HT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT capabilities IE */ - prHtCap->ucId = ELEM_ID_HT_CAP; - prHtCap->ucLength = sizeof(IE_HT_CAP_T) - ELEM_HDR_LEN; - - prHtCap->u2HtCapInfo = HT_CAP_INFO_DEFAULT_VAL; - if (!fg40mAllowed) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH | - HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M); - } - if (prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled) { - prHtCap->u2HtCapInfo &= - ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - } - - if(prAdapter->rWifiVar.u8SupportRxSgi20 == 2) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_20M); - } - if(prAdapter->rWifiVar.u8SupportRxSgi40 == 2) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_40M); - } - if(prAdapter->rWifiVar.u8SupportRxGf == 2) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_HT_GF); - } - - prHtCap->ucAmpduParam = AMPDU_PARAM_DEFAULT_VAL; - - prSupMcsSet = &prHtCap->rSupMcsSet; - kalMemZero((PVOID)&prSupMcsSet->aucRxMcsBitmask[0], - SUP_MCS_RX_BITMASK_OCTET_NUM); - - prSupMcsSet->aucRxMcsBitmask[0] = BITS(0, 7); - - if (fg40mAllowed) { - prSupMcsSet->aucRxMcsBitmask[32/8] = BIT(0); /* MCS32 */ - } - prSupMcsSet->u2RxHighestSupportedRate = SUP_MCS_RX_DEFAULT_HIGHEST_RATE; - prSupMcsSet->u4TxRateInfo = SUP_MCS_TX_DEFAULT_VAL; - - prHtCap->u2HtExtendedCap = HT_EXT_CAP_DEFAULT_VAL; - if (!fg40mAllowed || prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prHtCap->u2HtExtendedCap &= - ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE); - } - - prHtCap->u4TxBeamformingCap = TX_BEAMFORMING_CAP_DEFAULT_VAL; - - prHtCap->ucAselCap = ASEL_CAP_DEFAULT_VAL; - - - ASSERT(IE_SIZE(prHtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_EXT_CAP_T prExtCap; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - /* Add Extended Capabilities IE */ - prExtCap = (P_EXT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - prExtCap->ucId = ELEM_ID_EXTENDED_CAP; - prExtCap->ucLength = 1; - prExtCap->aucCapabilities[0] = ELEM_EXT_CAP_DEFAULT_VAL; - - if (!fg40mAllowed) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_20_40_COEXIST_SUPPORT; - } - - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_PSMP_CAP; - } - - ASSERT(IE_SIZE(prExtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prExtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_OP_T prHtOp; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - - prHtOp = (P_IE_HT_OP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT operation IE */ - prHtOp->ucId = ELEM_ID_HT_OP; - prHtOp->ucLength = sizeof(IE_HT_OP_T) - ELEM_HDR_LEN; - - /* RIFS and 20/40 bandwidth operations are included */ - prHtOp->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prHtOp->ucInfo1 = prBssInfo->ucHtOpInfo1; - - /* Decide HT protection mode field */ - if (prBssInfo->eHtProtectMode == HT_PROTECT_MODE_NON_HT) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_HT; - } - else if (prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_MEMBER; - } - else { - /* It may be SYS_PROTECT_MODE_NONE or SYS_PROTECT_MODE_20M */ - prHtOp->u2Info2 = (UINT_8) prBssInfo->eHtProtectMode; - } - - if (prBssInfo->eGfOperationMode != GF_MODE_NORMAL) { - /* It may be GF_MODE_PROTECT or GF_MODE_DISALLOWED - * Note: it will also be set in ad-hoc network - */ - prHtOp->u2Info2 |= HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (0 /* Regulatory class 16 */ && - prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - /* (TBD) It is HT_PROTECT_MODE_NON_MEMBER, so require protection - * although it is possible to have no protection by spec. - */ - prHtOp->u2Info2 |= HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - prHtOp->u2Info3 = prBssInfo->u2HtOpInfo3; /* To do: handle L-SIG TXOP */ - - /* No basic MCSx are needed temporarily */ - for (i = 0; i < 16; i++) { - prHtOp->aucBasicMcsSet[i] = 0; - } - - ASSERT(IE_SIZE(prHtOp) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtOp); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked to update parameters of associated AP. -* (Association response and Beacon) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset; - P_STA_RECORD_T prStaRec; - P_IE_HT_CAP_T prHtCap; - P_IE_HT_OP_T prHtOp; - P_IE_OBSS_SCAN_PARAM_T prObssScnParam; - UINT_8 ucERP, ucPrimaryChannel; -#if CFG_SUPPORT_QUIET && 0 - BOOLEAN fgHasQuietIE = FALSE; -#endif - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(pucIE); - - prStaRec = prBssInfo->prStaRecOfAP; - ASSERT(prStaRec); - if (!prStaRec) { - return 0; - } - - prBssInfo->fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - ucPrimaryChannel = 0; - prObssScnParam = NULL; - - /* Note: HT-related members in staRec may not be zero before, so - * if following IE does not exist, they are still not zero. - * These HT-related parameters are vaild only when the corresponding - * BssInfo supports 802.11n, i.e., RLM_NET_IS_11N() - */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - case ELEM_ID_HT_OP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPrimaryChannel == 0) { - ucPrimaryChannel = prHtOp->ucPrimaryChannel; - } - prBssInfo->ucHtOpInfo1 = prHtOp->ucInfo1; - prBssInfo->u2HtOpInfo2 = prHtOp->u2Info2; - prBssInfo->u2HtOpInfo3 = prHtOp->u2Info3; - - if (!prBssInfo->fg40mBwAllowed) { - prBssInfo->ucHtOpInfo1 &= - ~(HT_OP_INFO1_SCO | HT_OP_INFO1_STA_CHNL_WIDTH); - } - - if ((prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssInfo->eBssSCO = (ENUM_CHNL_EXT_T) - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO); - } - - prBssInfo->eHtProtectMode = (ENUM_HT_PROTECT_MODE_T) - (prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_HT_PROTECTION); - - /* To do: process regulatory class 16 */ - if ((prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) - && 0 /* && regulatory class is 16 */) { - prBssInfo->eGfOperationMode = GF_MODE_DISALLOWED; - } - else if (prBssInfo->u2HtOpInfo2&HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - prBssInfo->eGfOperationMode = GF_MODE_PROTECT; - } - else { - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - } - - prBssInfo->eRifsOperationMode = - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_RIFS_MODE) ? - RIFS_MODE_NORMAL : RIFS_MODE_DISALLOWED; - - break; - - case ELEM_ID_20_40_BSS_COEXISTENCE: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store if scanning exemption grant to BssInfo */ - break; - - case ELEM_ID_OBSS_SCAN_PARAMS: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_OBSS_SCAN_PARAM_T) - 2)) { - break; - } - /* Store OBSS parameters to BssInfo */ - prObssScnParam = (P_IE_OBSS_SCAN_PARAM_T) pucIE; - break; - - case ELEM_ID_EXTENDED_CAP: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store extended capability (PSMP, coexist) to BssInfo */ - break; - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) != (sizeof(IE_ERP_T) - 2) || - prBssInfo->eBand != BAND_2G4) { - break; - } - ucERP = ERP_INFO_IE(pucIE)->ucERP; - prBssInfo->fgErpProtectMode = - (ucERP & ERP_INFO_USE_PROTECTION) ? TRUE : FALSE; - - if (ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - - #if CFG_SUPPORT_QUIET && 0 - /* Note: RRM code should be moved to independent RRM function by - * component design rule. But we attach it to RLM temporarily - */ - case ELEM_ID_QUIET: - rrmQuietHandleQuietIE(prBssInfo, (P_IE_QUIET_T) pucIE); - fgHasQuietIE = TRUE; - break; - #endif - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ - - /* Some AP will have wrong channel number (255) when running time. - * Check if correct channel number information. 20110501 - */ - if ((prBssInfo->eBand == BAND_2G4 && ucPrimaryChannel > 14) || - (prBssInfo->eBand != BAND_2G4 && (ucPrimaryChannel >= 200 || - ucPrimaryChannel <= 14))) { - ucPrimaryChannel = 0; - } - -#if CFG_SUPPORT_QUIET && 0 - if (!fgHasQuietIE) { - rrmQuietIeNotExist(prAdapter, prBssInfo); - } -#endif - - /* Check if OBSS scan process will launch */ - if (!prAdapter->fgEnOnlineScan || !prObssScnParam || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH) || - prBssInfo->eBand != BAND_2G4 || !prBssInfo->fg40mBwAllowed) { - - /* Note: it is ok not to stop rObssScanTimer() here */ - prBssInfo->u2ObssScanInterval = 0; - } - else { - if (prObssScnParam->u2TriggerScanInterval < OBSS_SCAN_MIN_INTERVAL) { - prObssScnParam->u2TriggerScanInterval = OBSS_SCAN_MIN_INTERVAL; - } - if (prBssInfo->u2ObssScanInterval != - prObssScnParam->u2TriggerScanInterval) { - - prBssInfo->u2ObssScanInterval = - prObssScnParam->u2TriggerScanInterval; - - /* Start timer to trigger OBSS scanning */ - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } - } - - return ucPrimaryChannel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset, i; - UINT_8 ucPriChannel, ucSecChannel; - ENUM_CHNL_EXT_T eSCO; - BOOLEAN fgHtBss, fg20mReq; - - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - - /* Record it to channel list to change 20/40 bandwidth */ - ucPriChannel = 0; - eSCO = CHNL_EXT_SCN; - - fgHtBss = FALSE; - fg20mReq = FALSE; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - { - P_IE_HT_CAP_T prHtCap; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - - prHtCap = (P_IE_HT_CAP_T) pucIE; - if (prHtCap->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fg20mReq = TRUE; - } - fgHtBss = TRUE; - break; - } - case ELEM_ID_HT_OP: - { - P_IE_HT_OP_T prHtOp; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPriChannel == 0) { - ucPriChannel = prHtOp->ucPrimaryChannel; - } - - if ((prHtOp->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - eSCO = (ENUM_CHNL_EXT_T) (prHtOp->ucInfo1 & HT_OP_INFO1_SCO); - } - break; - } - case ELEM_ID_20_40_BSS_COEXISTENCE: - { - P_IE_20_40_COEXIST_T prCoexist; - - if (IE_LEN(pucIE) != (sizeof(IE_20_40_COEXIST_T) - 2)) { - break; - } - - prCoexist = (P_IE_20_40_COEXIST_T) pucIE; - if (prCoexist->ucData & BSS_COEXIST_40M_INTOLERANT) { - fg20mReq = TRUE; - } - break; - } - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) != (sizeof(IE_DS_PARAM_SET_T) - 2)) { - break; - } - ucPriChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - break; - - default: - break; - } - } - - - /* To do: Update channel list and 5G band. All channel lists have the same - * update procedure. We should give it the entry pointer of desired - * channel list. - */ - if (HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr) != BAND_2G4) { - return FALSE; - } - - if (ucPriChannel == 0 || ucPriChannel > 14) { - ucPriChannel = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - } - - if (fgHtBss) { - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_PriChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_PriChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_PriChnlList[i] = ucPriChannel; - prBssInfo->auc2G_PriChnlList[0]++; - } - - /* Update secondary channel */ - if (eSCO != CHNL_EXT_SCN) { - ucSecChannel = (eSCO == CHNL_EXT_SCA) ? - (ucPriChannel + 4) : (ucPriChannel - 4); - - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_SecChnlList[i] == ucSecChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_SecChnlList[0])&& (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_SecChnlList[i] = ucSecChannel; - prBssInfo->auc2G_SecChnlList[0]++; - } - } - - /* Update 20M bandwidth request channels */ - if (fg20mReq) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = ucPriChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - } - else { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = ucPriChannel; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - -#if 0 /* SW migration 2010/8/20 */ - /* Note: we shall not update parameters when scanning, otherwise - * channel and bandwidth will not be correct or asserted failure - * during scanning. - * Note: remove channel checking. All received Beacons should be processed - * if measurement or other actions are executed in adjacent channels - * and Beacon content checking mechanism is not disabled. - */ - if (IS_SCAN_ACTIVE() - /* || prBssInfo->ucPrimaryChannel != CHNL_NUM_BY_SWRFB(prSwRfb) */) { - return FALSE; - } -#endif - - /* Handle change of slot time */ - prBssInfo->u2CapInfo = - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->u2CapInfo; - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength); - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgNewParameter; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - fgNewParameter = FALSE; - - /* When concurrent networks exist, GO shall have the same handle as - * the other BSS, so the Beacon shall be procesed for bandwidth and - * protection mechanism. - * Note1: we do not have 2 AP (GO) cases simultaneously now. - * Note2: If we are GO, concurrent AIS AP should detect it and reflect - * action in its Beacon, so AIS STA just follows Beacon from AP. - */ - RLM_NET_FOR_EACH_NO_BOW(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - if (IS_BSS_ACTIVE(prBssInfo)) { - if (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* P2P client or AIS infra STA */ - if (EQUAL_MAC_ADDR(prBssInfo->aucBSSID, - ((P_WLAN_MAC_MGMT_HEADER_T) - (prSwRfb->pvHeader))->aucBSSID)) { - - fgNewParameter = rlmRecBcnInfoForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - else { - fgNewParameter = rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - } - #if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT || - prBssInfo->eCurrentOPMode == OP_MODE_P2P_DEVICE)) { - /* AP scan to check if 20/40M bandwidth is permitted */ - rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - #endif - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - /* To do: Ad-hoc */ - } - - /* Appy new parameters if necessary */ - if (fgNewParameter) { - rlmSyncOperationParams(prAdapter, prBssInfo); - fgNewParameter = FALSE; - } - } /* end of IS_BSS_ACTIVE() */ - } /* end of RLM_NET_FOR_EACH_NO_BOW */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_8 ucPriChannel; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prStaRec == prBssInfo->prStaRecOfAP); - - /* To do: the invoked function is used to clear all members. It may be - * done by center mechanism in invoker. - */ - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - if ((ucPriChannel = - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength)) > 0) { - prBssInfo->ucPrimaryChannel = ucPriChannel; - } - - if (!RLM_NET_IS_11N(prBssInfo) || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - prBssInfo->fg40mBwAllowed = FALSE; - } - - /* Note: Update its capabilities to WTBL by cnmStaRecChangeState(), which - * shall be invoked afterwards. - * Update channel, bandwidth and protection mode by nicUpdateBss() - */ -#if 1 - if(prStaRec->ucNetTypeIndex==NETWORK_TYPE_P2P_INDEX) - { - - DBGLOG(AIS, WARN, ("Force P2P BW to 20\n")); - prBssInfo->fgAssoc40mBwAllowed=FALSE; - } -#endif - - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prCmdBody && prBssInfo); - if (!prCmdBody || !prBssInfo) { - return; - } - - prCmdBody->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prCmdBody->ucRfBand = (UINT_8) prBssInfo->eBand; - prCmdBody->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prBssInfo->eBssSCO; - prCmdBody->ucErpProtectMode = (UINT_8) prBssInfo->fgErpProtectMode; - prCmdBody->ucHtProtectMode = (UINT_8) prBssInfo->eHtProtectMode; - prCmdBody->ucGfOperationMode = (UINT_8) prBssInfo->eGfOperationMode; - prCmdBody->ucTxRifsMode = (UINT_8) prBssInfo->eRifsOperationMode; - prCmdBody->u2HtOpInfo3 = prBssInfo->u2HtOpInfo3; - prCmdBody->u2HtOpInfo2 = prBssInfo->u2HtOpInfo2; - prCmdBody->ucHtOpInfo1 = prBssInfo->ucHtOpInfo1; - prCmdBody->ucUseShortPreamble = prBssInfo->fgUseShortPreamble; - prCmdBody->ucUseShortSlotTime = prBssInfo->fgUseShortSlotTime; - prCmdBody->ucCheckId = 0x72; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - DBGLOG(RLM, INFO, ("N=%d b=%d c=%d s=%d e=%d h=%d I=0x%02x l=%d p=%d\n", - prCmdBody->ucNetTypeIndex, prCmdBody->ucRfBand, - prCmdBody->ucPrimaryChannel, prCmdBody->ucRfSco, - prCmdBody->ucErpProtectMode, prCmdBody->ucHtProtectMode, - prCmdBody->ucHtOpInfo1, prCmdBody->ucUseShortSlotTime, - prCmdBody->ucUseShortPreamble)); - } - else { - DBGLOG(RLM, INFO, ("N=%d closed\n", prCmdBody->ucNetTypeIndex)); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will operation parameters based on situations of -* concurrent networks. Channel, bandwidth, protection mode, supported -* rate will be modified. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - prCmdBody = (P_CMD_SET_BSS_RLM_PARAM_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_BSS_RLM_PARAM_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(RLM, WARN, ("No buf for sync RLM params (Net=%d)\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmFillSyncCmdParam(prCmdBody, prBssInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_BSS_RLM_PARAM, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_BSS_RLM_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); -} - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - P_IE_HT_CAP_T prHtCap; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ -} -#endif /* CFG_SUPPORT_AAA */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - rlmBssInitForAP(prAdapter, prBssInfo); - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - - /* Assume FW state is updated by CMD_ID_SET_BSS_INFO, so - * the sync CMD is not needed here. - */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief All RLM timers will also be stopped. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - /* HT related parameters */ - prBssInfo->ucHtOpInfo1 = 0; /* RIFS disabled. 20MHz */ - prBssInfo->u2HtOpInfo2 = 0; - prBssInfo->u2HtOpInfo3 = 0; - - prBssInfo->eBssSCO = 0; - prBssInfo->fgErpProtectMode = 0; - prBssInfo->eHtProtectMode = 0; - prBssInfo->eGfOperationMode = 0; - prBssInfo->eRifsOperationMode = 0; - - /* OBSS related parameters */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - /* All RLM timers will also be stopped */ - cnmTimerStopTimer(prAdapter, &prBssInfo->rObssScanTimer); - prBssInfo->u2ObssScanInterval = 0; - - prBssInfo->fgObssErpProtectMode = 0; /* GO only */ - prBssInfo->eObssHtProtectMode = 0; /* GO only */ - prBssInfo->eObssGfOperationMode = 0; /* GO only */ - prBssInfo->fgObssRifsOperationMode = 0; /* GO only */ - prBssInfo->fgObssActionForcedTo20M = 0; /* GO only */ - prBssInfo->fgObssBeaconForcedTo20M = 0; /* GO only */ -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_domain.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_domain.c deleted file mode 100755 index b5f34388469b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_domain.c +++ /dev/null @@ -1,681 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_domain.c#1 $ -*/ - -/*! \file "rlm_domain.c" - \brief - -*/ - - - -/* -** $Log: rlm_domain.c $ - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 23 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Let channel number to zero if band is illegal - * - * 09 22 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Exclude channel list with illegal band - * - * 09 15 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use defined country group to have a change to add new group - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 02 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export rlmDomainGetDomainInfo for p2p driver. - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Filter out not supported RF freq when reporting available chnl list - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* The following country or domain shall be set from host driver. - * And host driver should pass specified DOMAIN_INFO_ENTRY to MT6620 as - * the channel list of being a STA to do scanning/searching AP or being an - * AP to choose an adequate channel if auto-channel is set. - */ - -/* Define mapping tables between country code and its channel set - */ -static const UINT_16 g_u2CountryGroup0[] = -{ - COUNTRY_CODE_US, COUNTRY_CODE_BS, COUNTRY_CODE_BB, COUNTRY_CODE_BO, COUNTRY_CODE_DM, - COUNTRY_CODE_DO, COUNTRY_CODE_HT, COUNTRY_CODE_PR, COUNTRY_CODE_TH, COUNTRY_CODE_TW, - COUNTRY_CODE_AI, COUNTRY_CODE_AG, COUNTRY_CODE_AW, COUNTRY_CODE_BM, COUNTRY_CODE_CU, - COUNTRY_CODE_GD, COUNTRY_CODE_GY, COUNTRY_CODE_JM, COUNTRY_CODE_KN, COUNTRY_CODE_LC, - COUNTRY_CODE_VC, COUNTRY_CODE_TT, COUNTRY_CODE_SR -}; -static const UINT_16 g_u2CountryGroup1[] = -{ - COUNTRY_CODE_BR, COUNTRY_CODE_EC, COUNTRY_CODE_HK, COUNTRY_CODE_MX, COUNTRY_CODE_PE, - COUNTRY_CODE_CR, COUNTRY_CODE_MD, COUNTRY_CODE_NI, COUNTRY_CODE_PZ -}; -static const UINT_16 g_u2CountryGroup2[] = {COUNTRY_CODE_CO, COUNTRY_CODE_PY}; -static const UINT_16 g_u2CountryGroup3[] = {COUNTRY_CODE_JP}; -static const UINT_16 g_u2CountryGroup4[] = -{ - COUNTRY_CODE_CN, COUNTRY_CODE_UY, COUNTRY_CODE_MA -}; -static const UINT_16 g_u2CountryGroup5[] = {COUNTRY_CODE_AR}; -static const UINT_16 g_u2CountryGroup6[] = {COUNTRY_CODE_AU, COUNTRY_CODE_NZ}; -static const UINT_16 g_u2CountryGroup7[] = {COUNTRY_CODE_RU}; -static const UINT_16 g_u2CountryGroup8[] = -{ - COUNTRY_CODE_ID, COUNTRY_CODE_HN, COUNTRY_CODE_PG, COUNTRY_CODE_PK -}; -static const UINT_16 g_u2CountryGroup9[] = {COUNTRY_CODE_CA}; -static const UINT_16 g_u2CountryGroup10[] = -{ - COUNTRY_CODE_CL, COUNTRY_CODE_IN, COUNTRY_CODE_SA, COUNTRY_CODE_SG, COUNTRY_CODE_VE, - COUNTRY_CODE_MY, COUNTRY_CODE_VN, COUNTRY_CODE_EG -}; -static const UINT_16 g_u2CountryGroup11[] = {COUNTRY_CODE_IL, COUNTRY_CODE_UA}; -static const UINT_16 g_u2CountryGroup12[] = {COUNTRY_CODE_JO, COUNTRY_CODE_KW}; -static const UINT_16 g_u2CountryGroup13[] = {COUNTRY_CODE_KR, COUNTRY_CODE_OM}; -static const UINT_16 g_u2CountryGroup14[] = -{ - COUNTRY_CODE_EU - /* When country code is not found, this domain info will be used. - * So mark all country codes to reduce search time. 20110908 - */ - /*, COUNTRY_CODE_PH, COUNTRY_CODE_TR, COUNTRY_CODE_IR, COUNTRY_CODE_BY, - COUNTRY_CODE_LK */ -}; - - -DOMAIN_INFO_ENTRY arSupportedRegDomains[] = { - { - (PUINT_16) g_u2CountryGroup0, sizeof(g_u2CountryGroup0) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup1, sizeof(g_u2CountryGroup1) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup2, sizeof(g_u2CountryGroup2) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup3, sizeof(g_u2CountryGroup3) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_14 */ - { 82, BAND_2G4, CHNL_SPAN_5, 14, 1, FALSE }, - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE } /* CH_SET_UNII_UPPER_NA */ - } - }, - { - (PUINT_16) g_u2CountryGroup4, sizeof(g_u2CountryGroup4) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup5, sizeof(g_u2CountryGroup5) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup6, sizeof(g_u2CountryGroup6) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup7, sizeof(g_u2CountryGroup7) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup8, sizeof(g_u2CountryGroup8) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup9, sizeof(g_u2CountryGroup9) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 5, FALSE }, /* CH_SET_UNII_WW_100_116_132_140 */ - { 121, BAND_5G, CHNL_SPAN_20, 132, 5, FALSE }, - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - } - }, - { - (PUINT_16) g_u2CountryGroup10, sizeof(g_u2CountryGroup10) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup11, sizeof(g_u2CountryGroup11) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup12, sizeof(g_u2CountryGroup12) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup13, sizeof(g_u2CountryGroup13) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 8, FALSE }, /* CH_SET_UNII_WW_100_128 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - /* Note: The final one is for Europe union now. */ - (PUINT_16) g_u2CountryGroup14, sizeof(g_u2CountryGroup14) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 7, FALSE }, /* CH_SET_UNII_UPPER_149_173 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - } -}; - -#if 0 -COUNTRY_CH_SET_T arCountryChSets[] = { - /* idx=0: US, Bahamas, Barbados, Bolivia(Voluntary), Dominica (the Commonwealth of Dominica), - The Dominican Republic, Haiti */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=1: Brazil, Ecuador, Hong Kong, Mexico, Peru */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=2: JP1, Colombia(Voluntary), Paraguay */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=3: JP2 */ - {CH_SET_2G4_1_14, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=4: CN, Uruguay, Morocco */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=5: Argentina */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=6: Australia, New Zealand */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=7: Russia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=8: Indonesia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_161}, - /* idx=9: Canada */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_116_132_140, CH_SET_UNII_UPPER_149_165}, - /* idx=10: Chile, India, Saudi Arabia, Singapore */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=11: Israel, Ukraine */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=12: Jordan, Kuwait */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=13: South Korea */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_128, CH_SET_UNII_UPPER_149_165}, - /* idx=14: Taiwan */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=15: EU all countries */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_173} -}; -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ) -{ -#define REG_DOMAIN_DEF_IDX 14 /* EU (Europe Union) */ -#define REG_DOMAIN_GROUP_NUM \ - (sizeof(arSupportedRegDomains) / sizeof(DOMAIN_INFO_ENTRY)) - - UINT_16 i, j; - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_REG_INFO_T prRegInfo; - UINT_16 u2TargetCountryCode; - - ASSERT(prAdapter); - - if (prAdapter->prDomainInfo) { - return prAdapter->prDomainInfo; - } - - prRegInfo = &prAdapter->prGlueInfo->rRegInfo; - - DBGLOG(RLM, INFO, ("Domain: map=%d, idx=%d, code=0x%04x\n", - prRegInfo->eRegChannelListMap, prRegInfo->ucRegChannelListIndex, - prAdapter->rWifiVar.rConnSettings.u2CountryCode)); - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_TBL_IDX && - prRegInfo->ucRegChannelListIndex < REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[prRegInfo->ucRegChannelListIndex]; - goto L_set_domain_info; - } - else if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - prDomainInfo = &prRegInfo->rDomainInfo; - goto L_set_domain_info; - } - - u2TargetCountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - - /* If no matched country code, the final one will be used - * The final one is for Europe union now. - */ - for (i = 0; i < REG_DOMAIN_GROUP_NUM; i++) { - prDomainInfo = &arSupportedRegDomains[i]; - - ASSERT((prDomainInfo->u4CountryNum && prDomainInfo->pu2CountryGroup) || - prDomainInfo->u4CountryNum == 0); - - for (j = 0; j < prDomainInfo->u4CountryNum; j++) { - if (prDomainInfo->pu2CountryGroup[j] == u2TargetCountryCode) { - break; - } - } - if (j < prDomainInfo->u4CountryNum) { - break; /* Found */ - } - } - - DATA_STRUC_INSPECTING_ASSERT(REG_DOMAIN_DEF_IDX < REG_DOMAIN_GROUP_NUM); - - if (i >= REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[REG_DOMAIN_DEF_IDX]; - } - -L_set_domain_info: - - prAdapter->prDomainInfo = prDomainInfo; - return prDomainInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] The input variable pointed by pucNumOfChannel is the max -* arrary size. The return value indciates meaning list size. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - UINT_8 i, j, ucNum; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - ASSERT(prAdapter); - ASSERT(paucChannelList); - ASSERT(pucNumOfChannel); - - /* If no matched country code, the final one will be used */ - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - ucNum = 0; - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_NULL || prSubband->ucBand >= BAND_NUM || - (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand)) { - continue; - } - - if (eSpecificBand == BAND_NULL || prSubband->ucBand == eSpecificBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if (ucNum >= ucMaxChannelNum) { - break; - } - paucChannelList[ucNum].eBand = prSubband->ucBand; - paucChannelList[ucNum].ucChannelNum = - prSubband->ucFirstChannelNum + j * prSubband->ucChannelSpan; - ucNum++; - } - } - } - - *pucNumOfChannel = ucNum; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ) -{ - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_CMD_SET_DOMAIN_INFO_T prCmd; - WLAN_STATUS rStatus; - UINT_8 i; - P_DOMAIN_SUBBAND_INFO prSubBand; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_DOMAIN_INFO_T)); - ASSERT(prCmd); - - /* To do: exception handle */ - if (!prCmd) { - DBGLOG(RLM, ERROR, ("Domain: no buf to send cmd\n")); - return; - } - kalMemZero(prCmd, sizeof(CMD_SET_DOMAIN_INFO_T)); - - prCmd->u2CountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - prCmd->u2Reserved = 0; - prCmd->uc2G4Bandwidth = - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode; - prCmd->uc5GBandwidth = - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode; - - for (i = 0; i < 6; i++) { - prSubBand = &prDomainInfo->rSubBand[i]; - - prCmd->rSubBand[i].ucRegClass = prSubBand->ucRegClass; - prCmd->rSubBand[i].ucBand = prSubBand->ucBand; - - if (prSubBand->ucBand != BAND_NULL && prSubBand->ucBand < BAND_NUM) { - prCmd->rSubBand[i].ucChannelSpan = prSubBand->ucChannelSpan; - prCmd->rSubBand[i].ucFirstChannelNum = prSubBand->ucFirstChannelNum; - prCmd->rSubBand[i].ucNumChannels = prSubBand->ucNumChannels; - } - } - - /* Update domain info to chip */ - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_DOMAIN_INFO, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - fgIsOid, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_DOMAIN_INFO_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmd, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmd); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return TRUE Legal channel -* FALSE Illegal channel for current regulatory domain -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ) -{ - UINT_8 i, j; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand) { - continue; - } - - if (prSubband->ucBand == eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == ucChannel) { - return TRUE; - } - } - } - } - - return FALSE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_obss.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_obss.c deleted file mode 100755 index a5ea1f2f30b8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_obss.c +++ /dev/null @@ -1,484 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_obss.c#2 $ -*/ - -/*! \file "rlm_obss.c" - \brief - -*/ - - - -/* -** $Log: rlm_obss.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Avoid possible OBSS scan when BSS is switched - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Regulation class is changed to 81 in 20_40_coexistence action frame - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add more ASSERT to check exception - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - cnmTimerInitTimer(prAdapter, &prBssInfo->rObssScanTimer, - rlmObssScanTimeout, (UINT_32) prBssInfo); - } /* end of RLM_NET_FOR_EACH */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmObssUpdateChnlLists ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - UINT_16 i, u2PayloadLen; - - ASSERT(prMsgHdr); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prScanDoneMsg->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(RLM, INFO, ("OBSS Scan Done (NetIdx=%d, Mode=%d)\n", - prScanDoneMsg->ucNetTypeIndex, prBssInfo->eCurrentOPMode)); - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_ENABLE_WIFI_DIRECT - /* AP mode */ - if ((prAdapter->fgIsP2PRegistered) && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex)) && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - return; - } -#endif - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan Done (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - /* To do: check 2.4G channel list to decide if obss mgmt should be - * sent to associated AP. Note: how to handle concurrent network? - * To do: invoke rlmObssChnlLevel() to decide if 20/40 BSS coexistence - * management frame is needed. - */ - if ((prBssInfo->auc2G_20mReqChnlList[0] > 0 || - prBssInfo->auc2G_NonHtChnlList[0] > 0) && - (prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN)) != NULL) { - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence mgmt(20mReq=%d, NonHt=%d)\n", - prBssInfo->auc2G_20mReqChnlList[0], - prBssInfo->auc2G_NonHtChnlList[0])); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = - (prBssInfo->auc2G_20mReqChnlList[0] > 0) ? BSS_COEXIST_20M_REQ : 0; - - u2PayloadLen = 2 + 3; - - if (prBssInfo->auc2G_NonHtChnlList[0] > 0) { - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - - prTxFrame->rChnlReport.ucId = ELEM_ID_20_40_INTOLERANT_CHNL_REPORT; - prTxFrame->rChnlReport.ucLength = - prBssInfo->auc2G_NonHtChnlList[0] + 1; - prTxFrame->rChnlReport.ucRegulatoryClass = 81; /* 2.4GHz, ch1~13 */ - for (i = 0; i < prBssInfo->auc2G_NonHtChnlList[0] && - i < CHNL_LIST_SZ_2G; i++) { - prTxFrame->rChnlReport.aucChannelList[i] = - prBssInfo->auc2G_NonHtChnlList[i+1]; - } - - u2PayloadLen += IE_SIZE(&prTxFrame->rChnlReport); - } - ASSERT((WLAN_MAC_HEADER_LEN + u2PayloadLen) <= PUBLIC_ACTION_MAX_LEN); - - /* Clear up channel lists in 2.4G band */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - } /* end of prMsduInfo != NULL */ - - if (prBssInfo->u2ObssScanInterval > 0) { - DBGLOG(RLM, INFO, ("Set OBSS timer (NetIdx=%d, %d sec)\n", - prBssInfo->ucNetTypeIndex, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = (P_BSS_INFO_T) u4Data; - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex))) { - - /* AP mode */ - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - prBssInfo->fgObssActionForcedTo20M = FALSE; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - - return; - } - - #if CFG_SUPPORT_WFD - /* WFD streaming */ - else { - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - P_BSS_INFO_T prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - /* If WFD is enabled & connected */ - if (prWfdCfgSettings->ucWfdEnable && - (prWfdCfgSettings->u4WfdFlag & BIT(0)) && - RLM_NET_PARAM_VALID(prP2pBssInfo)) { - - /* Skip OBSS scan */ - prBssInfo->u2ObssScanInterval = 0; - - DBGLOG(RLM, INFO, ("WFD is running. Stop net[%lu] OBSS scan.\n", prBssInfo->ucNetTypeIndex)); - - return; - } - } - #endif - } -#endif /* end of CFG_ENABLE_WIFI_DIRECT */ - - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan timeout (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmObssTriggerScan(prAdapter, prBssInfo); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_MSG_SCN_SCAN_REQ prScanReqMsg; - - ASSERT(prBssInfo); - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - ASSERT(prScanReqMsg); - - if (!prScanReqMsg) { - DBGLOG(RLM, WARN, ("No buf for OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - return; - } - - /* It is ok that ucSeqNum is set to fixed value because the same network - * OBSS scan interval is limited to OBSS_SCAN_MIN_INTERVAL (min 10 sec) - * and scan module don't care seqNum of OBSS scanning - */ - prScanReqMsg->rMsgHdr.eMsgId = MID_RLM_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = 0x33; - prScanReqMsg->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - prScanReqMsg->ucSSIDLength = 0; - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - prScanReqMsg->u2IELen = 0; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - DBGLOG(RLM, INFO, ("Timeout to trigger OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_protection.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_protection.c deleted file mode 100755 index 27ffda023bf8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rlm_protection.c +++ /dev/null @@ -1,108 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_protection.c#1 $ -*/ - -/*! \file "rlm_protection.c" - \brief - -*/ - - - -/* -** $Log: rlm_protection.c $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 03 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RTS threshold temporarily for AMPDU - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/roaming_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/roaming_fsm.c deleted file mode 100755 index c941873eb8f3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/roaming_fsm.c +++ /dev/null @@ -1,583 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.c" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - - - -/* -** $Log: roaming_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_ROAMING -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugRoamingState[ROAMING_STATE_NUM] = { - (PUINT_8)DISP_STRING("ROAMING_STATE_IDLE"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DECISION"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DISCOVERY"), - (PUINT_8)DISP_STRING("ROAMING_STATE_ROAM") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define ROAMING_ENABLE_CHECK(_roam) \ - { \ - if (!(_roam->fgIsEnableRoaming)) {return;} \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the value in ROAMING_FSM_INFO_T for ROAMING FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmInit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Initiate FSM - prRoamingFsmInfo->fgIsEnableRoaming = prConnSettings->fgIsEnableRoaming; - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - prRoamingFsmInfo->rRoamingDiscoveryUpdateTime = 0; - - return; -} /* end of roamingFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the value in AIS_FSM_INFO_T for AIS FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmUninit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - - return; -} /* end of roamingFsmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send commands to firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - WLAN_STATUS rStatus; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmSendCmd(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_ROAMING_TRANSIT, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(ROAMING_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prParam, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} /* end of roamingFsmSendCmd() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the recent time when ScanDone occurred -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, LOUD, ("->roamingFsmScanResultsUpdate(): Current Time = %ld\n", kalGetTimeTick())); - - GET_CURRENT_SYSTIME(&prRoamingFsmInfo->rRoamingDiscoveryUpdateTime); - - return; -} /* end of roamingFsmScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of ROAMING for AIS Infra. -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN ENUM_ROAMING_STATE_T] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T ePreviousState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - do { - - /* Do entering Next State */ -#if DBG - DBGLOG(ROAMING, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugRoamingState[prRoamingFsmInfo->eCurrentState], - apucDebugRoamingState[eNextState])); -#else - DBGLOG(ROAMING, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_ROAMING_IDX, - prRoamingFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - ePreviousState = prRoamingFsmInfo->eCurrentState; - prRoamingFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prRoamingFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case ROAMING_STATE_IDLE: - case ROAMING_STATE_DECISION: - break; - - case ROAMING_STATE_DISCOVERY: - { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prRoamingFsmInfo->rRoamingDiscoveryUpdateTime, - SEC_TO_SYSTIME(ROAMING_DISCOVERY_TIMEOUT_SEC))) { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Timeout")); - aisFsmRunEventRoamingDiscovery(prAdapter, TRUE); - } - else { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Updated")); - aisFsmRunEventRoamingDiscovery(prAdapter, FALSE); - } - } - break; - - case ROAMING_STATE_ROAM: - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - } - } - while (fgIsTransition); - - return; - -} /* end of roamingFsmSteps() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state after join completion -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - if (prAisBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - return; - } - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING START: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as DECISION, DISCOVERY -> DECISION */ - if (!(prRoamingFsmInfo->eCurrentState == ROAMING_STATE_IDLE - || prRoamingFsmInfo->eCurrentState == ROAMING_STATE_ROAM)) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_START; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventStart() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Discovery state when deciding to find a candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING DISCOVERY: Current Time = %ld\n", kalGetTimeTick())); - - /* DECISION -> DISCOVERY */ - /* Errors as IDLE, DISCOVERY, ROAM -> DISCOVERY */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DECISION) { - return; - } - - eNextState = ROAMING_STATE_DISCOVERY; - /* DECISION -> DISCOVERY */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - - // sync. rcpi with firmware - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - if (prBssDesc) { - prBssDesc->ucRCPI = (UINT_8)(u4Param&0xff); - } - - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Roam state after Scan Done -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ROAM: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, ROAM -> ROAM */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DISCOVERY) { - return; - } - - eNextState = ROAMING_STATE_ROAM; - /* DISCOVERY -> ROAM */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ROAM; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventRoam() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state as being failed to find out any candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING FAIL: reason %x Current Time = %ld\n", u4Param, kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, DISCOVERY -> DECISION */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_ROAM) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - /* ROAM -> DECISION */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_FAIL; - rParam.u2Data = (UINT_16)(u4Param&0xffff); - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventFail() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Idle state as beging aborted by other moduels, AIS -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ABORT: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = ROAMING_STATE_IDLE; - /* IDLE, DECISION, DISCOVERY, ROAM -> IDLE */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ABORT; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventAbort() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process events from firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - DBGLOG(ROAMING, LOUD, ("ROAMING Process Events: Current Time = %ld\n", kalGetTimeTick())); - - if (ROAMING_EVENT_DISCOVERY == prParam->u2Event) { - roamingFsmRunEventDiscovery(prAdapter, prParam->u2Data); - } - - return WLAN_STATUS_SUCCESS; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rsn.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rsn.c deleted file mode 100755 index a576b1d2a222..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/rsn.c +++ /dev/null @@ -1,2671 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rsn.c#2 $ -*/ - -/*! \file "rsn.c" - \brief This file including the 802.11i, wpa and wpa2(rsn) related function. - - This file provided the macros and functions library support the wpa/rsn ie parsing, - cipher and AKM check to help the AP seleced deciding, tkip mic error handler and rsn PMKID support. -*/ - - - -/* -** $Log: rsn.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 09 2012 chinglan.wang - * NULL - * Fix the condition error. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 12 24 2010 chinglan.wang - * NULL - * [MT6620][Wi-Fi] Modify the key management in the driver for WPS function. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 yuche.tsai - * NULL - * Fix compile error, remove unused pointer in rsnGenerateRSNIE(). - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * [WPD00003840] [MT6620 5931] Security migration - * migration from firmware. - * - * 05 27 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * not indiate pmkid candidate while no new one scaned. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the name - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * using the Rx0 port to indicate event - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code for generate the WPA/RSN IE for assoc req - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust code for pmkid event - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for event (mic error and pmkid indicate) and do some function rename - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security feature, including pmkid - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -//extern PHY_ATTRIBUTE_T rPhyAttributes[]; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse RSN IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** RSN information from the given RSN IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseRsnIE ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ) -{ - UINT_32 i; - INT_32 u4RemainRsnIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = RSN_CIPHER_SUITE_CCMP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUINT_8 pucPairSuite = NULL; - PUINT_8 pucAuthSuite = NULL; - PUINT_8 cp; - - DEBUGFUNC("rsnParseRsnIE"); - - ASSERT(prInfoElem); - ASSERT(prRsnInfo); - - /* Verify the length of the RSN IE. */ - if (prInfoElem->ucLength < 2) { - DBGLOG(RSN, TRACE, ("RSN IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check RSN version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE,("Unsupported RSN IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainRsnIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainRsnIeLen < 4) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainRsnIeLen -= 4; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the RSN u2Capabilities field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in RSN capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - } while (FALSE); - - /* Save the RSN information for the BSS. */ - prRsnInfo->ucElemId = ELEM_ID_RSN; - - prRsnInfo->u2Version = u2Version; - - prRsnInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("RSN: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prRsnInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prRsnInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for RSN: CCMP. */ - prRsnInfo->u4PairwiseKeyCipherSuiteCount = 1; - prRsnInfo->au4PairwiseKeyCipherSuite[0] = RSN_CIPHER_SUITE_CCMP; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prRsnInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prRsnInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for RSN. */ - prRsnInfo->u4AuthKeyMgtSuiteCount = 1; - prRsnInfo->au4AuthKeyMgtSuite[0] = RSN_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prRsnInfo->u2RsnCap = u2Cap; -#if CFG_SUPPORT_802_11W - prRsnInfo->fgRsnCapPresent = TRUE; -#endif - DBGLOG(RSN, LOUD, ("RSN cap: 0x%04x\n", prRsnInfo->u2RsnCap)); - - return TRUE; -} /* rsnParseRsnIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WPA IE. -* -* \param[in] prInfoElem Pointer to the WPA IE. -* \param[out] prWpaInfo Pointer to the BSSDescription structure to store the -* WPA information from the given WPA IE. -* -* \retval TRUE Succeeded. -* \retval FALSE Failed. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseWpaIE ( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWpaIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WPA_CIPHER_SUITE_TKIP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - BOOLEAN fgCapPresent = FALSE; - - DEBUGFUNC("rsnParseWpaIE"); - - ASSERT(prInfoElem); - ASSERT(prWpaInfo); - - /* Verify the length of the WPA IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(RSN, TRACE,("WPA IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WPA version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE, ("Unsupported WPA IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainWpaIeLen = (INT_32) prInfoElem->ucLength - 6; - - do { - if (u4RemainWpaIeLen == 0) { - break; - } - - /* WPA_OUI : 4 - Version : 2 - GroupSuite : 4 - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - Cap : 2 */ - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWpaIeLen < 4) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWpaIeLen -= 4; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the WPA u2Capabilities field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in WPA capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - fgCapPresent = TRUE; - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWpaIeLen -= 2; - } while (FALSE); - - /* Save the WPA information for the BSS. */ - - prWpaInfo->ucElemId = ELEM_ID_WPA; - - prWpaInfo->u2Version = u2Version; - - prWpaInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("WPA: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prWpaInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWpaInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WPA: TKIP. */ - prWpaInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWpaInfo->au4PairwiseKeyCipherSuite[0] = WPA_CIPHER_SUITE_TKIP; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prWpaInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWpaInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WPA. */ - prWpaInfo->u4AuthKeyMgtSuiteCount = 1; - prWpaInfo->au4AuthKeyMgtSuite[0] = WPA_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - if (fgCapPresent) { - prWpaInfo->fgRsnCapPresent = TRUE; - prWpaInfo->u2RsnCap = u2Cap; - DBGLOG(RSN, LOUD, ("WPA: RSN cap: 0x%04x\n", prWpaInfo->u2RsnCap)); - } - else { - prWpaInfo->fgRsnCapPresent = FALSE; - prWpaInfo->u2RsnCap = 0; - } - - return TRUE; -} /* rsnParseWpaIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired pairwise -* cipher suite from the MIB Pairwise Cipher Suite -* configuration table. -* -* \param[in] u4Cipher The desired pairwise cipher suite to be searched -* \param[out] pu4Index Pointer to the index of the desired pairwise cipher in -* the table -* -* \retval TRUE - The desired pairwise cipher suite is found in the table. -* \retval FALSE - The desired pairwise cipher suite is not found in the -* table. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchSupportedCipher ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - - DEBUGFUNC("rsnSearchSupportedCipher"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i]; - if (prEntry->dot11RSNAConfigPairwiseCipher == u4Cipher && - prEntry->dot11RSNAConfigPairwiseCipherEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchSupportedCipher */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether BSS RSN is matched from upper layer set. -* -* \param[in] prAdapter Pointer to the Adapter structure, BSS RSN Information -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnIsSuitableBSS ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_T prBssRsnInfo - ) -{ - UINT_8 i = 0; - - DEBUGFUNC("rsnIsSuitableBSS"); - - do{ - - if((prAdapter->rWifiVar.rConnSettings.rRsnInfo.u4GroupKeyCipherSuite & 0x000000FF) != \ - GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite)){ - DBGLOG(RSN, TRACE, ("Break by GroupKeyCipherSuite\n")); - break; - } - for(i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++){ - if(((prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4PairwiseKeyCipherSuite[0] & 0x000000FF) != \ - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i])) - && (i == prBssRsnInfo->u4PairwiseKeyCipherSuiteCount - 1) ){ - DBGLOG(RSN, TRACE, ("Break by PairwiseKeyCipherSuite\n")); - break; - } - } - for(i = 0; i < prBssRsnInfo->u4AuthKeyMgtSuiteCount; i++){ - if(((prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4AuthKeyMgtSuite[0] & 0x000000FF) != \ - GET_SELECTOR_TYPE(prBssRsnInfo->au4AuthKeyMgtSuite[0])) - && (i == prBssRsnInfo->u4AuthKeyMgtSuiteCount - 1)){ - DBGLOG(RSN, TRACE, ("Break by AuthKeyMgtSuite \n")); - break; - } - } - return TRUE; - }while(FALSE); - return FALSE; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to search the desired -* authentication and key management (AKM) suite from the -* MIB Authentication and Key Management Suites table. -* -* \param[in] u4AkmSuite The desired AKM suite to be searched -* \param[out] pu4Index Pointer to the index of the desired AKM suite in the -* table -* -* \retval TRUE The desired AKM suite is found in the table. -* \retval FALSE The desired AKM suite is not found in the table. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchAKMSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("rsnSearchAKMSuite"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite && - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchAKMSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform RSNA or TSN policy -* selection for a given BSS. -* -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The RSNA/TSN policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The RSNA/TSN policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ -#if CFG_SUPPORT_802_11W - INT_32 i; - UINT_32 j; -#else - UINT_32 i, j; -#endif - BOOLEAN fgSuiteSupported; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_RSN_INFO_T prBssRsnInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetwotkType; - BOOLEAN fgIsWpsActive = (BOOLEAN)FALSE; - - DEBUGFUNC("rsnPerformPolicySelection"); - - ASSERT(prBss); - - DBGLOG(RSN, TRACE, ("rsnPerformPolicySelection\n")); - //Todo:: - eNetwotkType = NETWORK_TYPE_AIS_INDEX; - - prBss->u4RsnSelectedPairwiseCipher = 0; - prBss->u4RsnSelectedGroupCipher = 0; - prBss->u4RsnSelectedAKMSuite = 0; - prBss->ucEncLevel = 0; - -#if CFG_SUPPORT_WPS - fgIsWpsActive = kalWSCGetActiveState(prAdapter->prGlueInfo); - - /* CR1640, disable the AP select privacy check */ - if ( fgIsWpsActive && - (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) && - (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA)) { - DBGLOG(RSN, TRACE,("-- Skip the Protected BSS check\n")); - return TRUE; - } -#endif - - /* Protection is not required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) == 0 ) { - - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - /* Protection is required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) != 0) { - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - - if (prBss->fgIEWPA) { - prBssRsnInfo = &prBss->rWPAInfo; - } - else { - DBGLOG(RSN, TRACE, ("WPA Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2 || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK) { - - if (prBss->fgIERSN) { - prBssRsnInfo = &prBss->rRSNInfo; - } - else { - DBGLOG(RSN, TRACE, ("RSN Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus != ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, ignore this BSS. */ - DBGLOG(RSN, TRACE, ("-- Not WEP-only legacy BSS\n")); - return FALSE; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, use this BSS. */ - DBGLOG(RSN, TRACE, ("-- WEP-only legacy BSS\n")); - return TRUE; - } - - if(!rsnIsSuitableBSS(prAdapter, prBssRsnInfo)) - { - DBGLOG(RSN, TRACE, ("RSN info check no matched\n")); - return FALSE; - } - - if (prBssRsnInfo->u4PairwiseKeyCipherSuiteCount == 1 && - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[0]) == - CIPHER_SUITE_NONE) { - /* Since the pairwise cipher use the same cipher suite as the group - cipher in the BSS, we check the group cipher suite against the - current encryption status. */ - fgSuiteSupported = FALSE; - - switch (prBssRsnInfo->u4GroupKeyCipherSuite) { - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION3_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION2_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_WEP40: - case WPA_CIPHER_SUITE_WEP104: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION1_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - } - - if (fgSuiteSupported) { - u4PairwiseCipher = WPA_CIPHER_SUITE_NONE; - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } -#if DBG - else { - DBGLOG(RSN, TRACE, ("Inproper encryption status %d for group-key-only BSS\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } -#endif - } - else { - fgSuiteSupported = FALSE; - - DBGLOG(RSN, TRACE, ("eEncStatus %d %d 0x%x\n", prAdapter->rWifiVar.rConnSettings.eEncStatus, - prBssRsnInfo->u4PairwiseKeyCipherSuiteCount, - prBssRsnInfo->au4PairwiseKeyCipherSuite[0])); - /* Select pairwise/group ciphers */ - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) - { - case ENUM_ENCRYPTION3_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_CCMP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - break; - - case ENUM_ENCRYPTION2_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_TKIP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP104) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP || - GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_TKIP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP/TKIP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - default: - break; - } - } - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (eNetwotkType == NETWORK_TYPE_P2P_INDEX)) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for P2P network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (eNetwotkType == NETWORK_TYPE_BOW_INDEX) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - } - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for BT over Wi-Fi network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } -#endif - - - /* Verify if selected pairwisse cipher is supported */ - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4PairwiseCipher, &i); - - /* Verify if selected group cipher is supported */ - if (fgSuiteSupported) { - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4GroupCipher, &i); - } - - if (!fgSuiteSupported) { - DBGLOG(RSN, TRACE, ("Failed to support selected pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ -#if CFG_SUPPORT_802_11W - if (i != 0) - for (i = (prBssRsnInfo->u4AuthKeyMgtSuiteCount - 1); i >= 0; i--) -#else - for (i = 0; i < prBssRsnInfo->u4AuthKeyMgtSuiteCount; i++) -#endif - { - if (rsnSearchAKMSuite(prAdapter, - prBssRsnInfo->au4AuthKeyMgtSuite[i], - &j)) { - u4AkmSuite = prBssRsnInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(RSN, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(RSN, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(RSN, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - -#if CFG_SUPPORT_802_11W - DBGLOG(RSN, TRACE, ("MFP setting = %d\n ", kalGetMfpSetting(prAdapter->prGlueInfo))); - - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - if (!prBssRsnInfo->fgRsnCapPresent) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability.\n")); - return FALSE; - } - else if (!(prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - if (prBssRsnInfo->u2RsnCap && ((prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR) || - (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC))) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - } - else { - if (prBssRsnInfo->fgRsnCapPresent && (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - DBGLOG(RSN, TRACE, ("fgMgmtProtection = %d\n ", prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection)); -#endif - - if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_CCMP){ - prBss->ucEncLevel = 3; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_TKIP){ - prBss->ucEncLevel = 2; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP104) { - prBss->ucEncLevel = 1; - } - else { - ASSERT(FALSE); - } - prBss->u4RsnSelectedPairwiseCipher = u4PairwiseCipher; - prBss->u4RsnSelectedGroupCipher = u4GroupCipher; - prBss->u4RsnSelectedAKMSuite = u4AkmSuite; - - return TRUE; - -} /* rsnPerformPolicySelection */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate WPA IE for beacon frame. -* -* \param[in] pucIeStartAddr Pointer to put the generated WPA IE. -* -* \return The append WPA-None IE length -* \note -* Called by: JOIN module, compose beacon IE -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWpaNoneIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - P_WPA_INFO_ELEM_T prWpaIE; - UINT_32 u4Suite; - UINT_16 u2SuiteCount; - PUINT_8 cp, cp2; - UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWpaNoneIE"); - - ASSERT(prMsduInfo); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode != AUTH_MODE_WPA_NONE) { - return; - } - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - prWpaIE = (P_WPA_INFO_ELEM_T)(pucBuffer); - - /* Start to construct a WPA IE. */ - /* Fill the Element ID field. */ - prWpaIE->ucElemId = ELEM_ID_WPA; - - /* Fill the OUI and OUI Type fields. */ - prWpaIE->aucOui[0] = 0x00; - prWpaIE->aucOui[1] = 0x50; - prWpaIE->aucOui[2] = 0xF2; - prWpaIE->ucOuiType = VENDOR_OUI_TYPE_WPA; - - /* Fill the Version field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2Version, 1); /* version 1 */ - ucExpendedLen = 6; - - /* Fill the Pairwise Key Cipher Suite List field. */ - u2SuiteCount = 0; - cp = (PUINT_8)&prWpaIE->aucPairwiseKeyCipherSuite1[0]; - - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - u4Suite = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP40; - } - else { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Group Key Cipher Suite field as the same in pair-wise key. */ - WLAN_SET_FIELD_32(&prWpaIE->u4GroupKeyCipherSuite, u4Suite); - ucExpendedLen += 4; - - /* Fill the Pairwise Key Cipher Suite Count field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2PairwiseKeyCipherSuiteCount, u2SuiteCount); - ucExpendedLen += 2; - - cp2 = cp; - - /* Fill the Authentication and Key Management Suite List field. */ - u2SuiteCount = 0; - cp += 2; - - if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_802_1X, &i)) { - u4Suite = WPA_AKM_SUITE_802_1X; - } - else if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_PSK, &i)) { - u4Suite = WPA_AKM_SUITE_PSK; - } - else { - u4Suite = WPA_AKM_SUITE_NONE; - } - - /* This shall be the only avaiable value for current implementation */ - ASSERT(u4Suite == WPA_AKM_SUITE_NONE); - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Authentication and Key Management Suite Count field. */ - WLAN_SET_FIELD_16(cp2, u2SuiteCount); - ucExpendedLen += 2; - - /* Fill the Length field. */ - prWpaIE->ucLength = (UINT_8)ucExpendedLen; - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -} /* rsnGenerateWpaNoneIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWPAIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUCHAR cp; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWPAIE"); - - ASSERT(prMsduInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - //if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - // return; - -#if CFG_ENABLE_WIFI_DIRECT - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetTkipCipher(prAdapter->prGlueInfo)))) || - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK))) -#else - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK)))) -#endif - { - /* Construct a WPA IE for association request frame. */ - WPA_IE(pucBuffer)->ucElemId = ELEM_ID_WPA; - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - WPA_IE(pucBuffer)->aucOui[0] = 0x00; - WPA_IE(pucBuffer)->aucOui[1] = 0x50; - WPA_IE(pucBuffer)->aucOui[2] = 0xF2; - WPA_IE(pucBuffer)->ucOuiType = VENDOR_OUI_TYPE_WPA; - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2Version, 1); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedGroupCipher); - - cp = (PUCHAR) &WPA_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedPairwiseCipher); - cp += 4; - - WLAN_SET_FIELD_16(cp, 1); - cp += 2; -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_AKM_SUITE_PSK); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedAKMSuite); - cp += 4; - - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateWPAIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate RSN IE for -* associate request frame. -* -* \param[in] prMsduInfo The Selected BSS description -* -* \retval The append RSN IE length -* -* \note -* Called by: AIS module, P2P module, BOW module Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateRSNIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 u4Entry; - PUCHAR cp; - //UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("rsnGenerateRSNIE"); - - ASSERT(prMsduInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - /* Todo:: network id */ - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if ( -#if CFG_ENABLE_WIFI_DIRECT - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetCcmpCipher(prAdapter->prGlueInfo))) || -#endif -#if CFG_ENABLE_BT_OVER_WIFI - (eNetworkId == NETWORK_TYPE_BOW_INDEX) || -#endif - (eNetworkId == NETWORK_TYPE_AIS_INDEX /* prCurrentBss->fgIERSN */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK)))) - { - /* Construct a RSN IE for association request frame. */ - RSN_IE(pucBuffer)->ucElemId = ELEM_ID_RSN; - RSN_IE(pucBuffer)->ucLength = ELEM_ID_RSN_LEN_FIXED; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2Version, 1); // Version - WLAN_SET_FIELD_32(&RSN_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedGroupCipher); // Group key suite - cp = (PUCHAR) &RSN_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedPairwiseCipher); - cp += 4; - WLAN_SET_FIELD_16(cp, 1); // AKM suite count - cp += 2; - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedAKMSuite); // AKM suite - cp += 4; - WLAN_SET_FIELD_16(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u2RsnSelectedCapInfo); // Capabilities -#if CFG_SUPPORT_802_11W - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection) { - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC | ELEM_WPA_CAP_MFPR); // Capabilities - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC); // Capabilities - } - } -#endif - cp += 2; - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX) - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && - rsnSearchPmkidEntry(prAdapter, prStaRec->aucMacAddr, &u4Entry)) { - //DBGLOG(RSN, TRACE, ("Add Pmk at assoc req\n")); - //DBGLOG(RSN, TRACE, ("addr " MACSTR" PMKID "MACSTR"\n", - // MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arBSSID), MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - if (prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].fgPmkidExist) { - RSN_IE(pucBuffer)->ucLength = 38; - WLAN_SET_FIELD_16(cp, 1); // PMKID count - cp += 2; - DBGLOG(RSN, TRACE, ("BSSID "MACSTR" ind=%d\n", MAC2STR(prStaRec->aucMacAddr), u4Entry)); - DBGLOG(RSN, TRACE, ("use PMKID "MACSTR"\n", MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - kalMemCopy(cp, (PVOID)prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - //ucExpendedLen = 40; - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - -#if CFG_SUPPORT_802_11W - if ((eNetworkId == NETWORK_TYPE_AIS_INDEX) && (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) /* (mgmt_group_cipher == WPA_CIPHER_AES_128_CMAC) */ ) { - WLAN_SET_FIELD_32(cp, RSN_CIPHER_SUITE_AES_128_CMAC); - cp += 4; - RSN_IE(pucBuffer)->ucLength += 4; - } -#endif - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateRSNIE */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is WFA IE and return Type and -* SubType for further process. -* -* \param[in] pucBuf Pointer to the buffer of WFA Information Element. -* \param[out] pucOuiType Pointer to the storage of OUI Type. -* \param[out] pu2SubTypeVersion Pointer to the storage of OUI SubType and Version. - -* \retval TRUE Parse IE ok -* \retval FALSE Parse IE fail -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseCheckForWFAInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WFA_T prWfaIE; - - ASSERT(pucBuf); - ASSERT(pucOuiType); - ASSERT(pu2SubTypeVersion); - prWfaIE = (P_IE_WFA_T)pucBuf; - - do { - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - WLAN_GET_FIELD_16(&prWfaIE->aucOuiSubTypeVersion[0], pu2SubTypeVersion); - - return TRUE; - } - while (FALSE); - - return FALSE; - -} /* end of rsnParseCheckForWFAInfoElem() */ - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is RSN IE with CCMP PSK -* -* \param[in] prAdapter Pointer to Adapter -* \param[in] prSwRfb Pointer to the rx buffer -* \param[in] pIE Pointer rthe buffer of Information Element. -* \param[out] prStatusCode Pointer to the return status code. - -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -rsnParserCheckForRSNCCMPPSK( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ) -{ - - RSN_INFO_T rRsnIe; - - ASSERT(prAdapter); - ASSERT(prIe); - ASSERT(pu2StatusCode); - - *pu2StatusCode = STATUS_CODE_INVALID_INFO_ELEMENT; - - if (rsnParseRsnIE(prAdapter, prIe, &rRsnIe)) { - if ((rRsnIe.u4PairwiseKeyCipherSuiteCount != 1) || (rRsnIe.au4PairwiseKeyCipherSuite[0] != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_PAIRWISE_CIPHER; - return; - } - if ((rRsnIe.u4GroupKeyCipherSuite != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_GROUP_CIPHER; - return; - } - if ((rRsnIe.u4AuthKeyMgtSuiteCount != 1) || (rRsnIe.au4AuthKeyMgtSuite[0] != RSN_AKM_SUITE_PSK)) { - *pu2StatusCode = STATUS_CODE_INVALID_AKMP; - return; - } - - DBGLOG(RSN, TRACE, ("RSN with CCMP-PSK\n" )); - *pu2StatusCode = WLAN_STATUS_SUCCESS; - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an authentication event to NDIS. -* -* \param[in] u4Flags Authentication event: \n -* PARAM_AUTH_REQUEST_REAUTH 0x01 \n -* PARAM_AUTH_REQUEST_KEYUPDATE 0x02 \n -* PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 \n -* PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E \n -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenMicErrorEvent ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgFlags - ) -{ - P_PARAM_AUTH_EVENT_T prAuthEvent; - - DEBUGFUNC("rsnGenMicErrorEvent"); - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, (PVOID)prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucBSSID, MAC_ADDR_LEN); - - if (fgFlags == TRUE) - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - else - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); - -} /* rsnGenMicErrorEvent */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle TKIP MIC failures. -* -* \param[in] adapter_p Pointer to the adapter object data area. -* \param[in] prSta Pointer to the STA which occur MIC Error -* \param[in] fgErrorKeyType type of error key -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnTkipHandleMICFailure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ) -{ - //UINT_32 u4RsnaCurrentMICFailTime; - //P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnTkipHandleMICFailure"); - - ASSERT(prAdapter); -#if 1 - rsnGenMicErrorEvent(prAdapter,/* prSta,*/ fgErrorKeyType); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); -#else - ASSERT(prSta); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Record the MIC error occur time. */ - GET_CURRENT_SYSTIME(&u4RsnaCurrentMICFailTime); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); - - /* If less than 60 seconds have passed since a previous TKIP MIC failure, - disassociate from the AP and wait for 60 seconds before (re)associating - with the same AP. */ - if (prAisSpecBssInfo->u4RsnaLastMICFailTime != 0 && - !CHECK_FOR_TIMEOUT(u4RsnaCurrentMICFailTime, - prAisSpecBssInfo->u4RsnaLastMICFailTime, - SEC_TO_SYSTIME(TKIP_COUNTERMEASURE_SEC))) { - /* If less than 60 seconds expired since last MIC error, we have to - block traffic. */ - - DBGLOG(RSN, INFO, ("Start blocking traffic!\n")); - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - - secFsmEventStartCounterMeasure(prAdapter, prSta); - } - else { - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - DBGLOG(RSN, INFO, ("First TKIP MIC error!\n")); - } - - COPY_SYSTIME(prAisSpecBssInfo->u4RsnaLastMICFailTime, u4RsnaCurrentMICFailTime); -#endif -} /* rsnTkipHandleMICFailure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS Desc at scan result list -* \param[out] pu4CandidateCount Pointer to the number of selected candidates. -* It is set to zero if no BSSID matches our requirement. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnSelectPmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("rsnSelectPmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - /* Search a BSS with the same SSID from the given BSS description set. */ - //DBGLOG(RSN, TRACE, ("Check scan result ["MACSTR"]\n", - // MAC2STR(prBssDesc->aucBSSID))); - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - -#if 0 - if ((prBssDesc->u2BSSBasicRateSet & - ~(rPhyAttributes[prAisBssInfo->ePhyType].u2SupportedRateSet)) || - prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(RSN, TRACE, ("-- Rate set not matched\n")); - return; - } - - if (/* prBssDesc->u4RsnSelectedPairwiseCipher != prAisBssInfo->u4RsnSelectedPairwiseCipher ||*/ - prBssDesc->u4RsnSelectedGroupCipher != prAisBssInfo->u4RsnSelectedGroupCipher /*|| - prBssDesc->u4RsnSelectedAKMSuite != prAisBssInfo->u4RsnSelectedAKMSuite */) { - DBGLOG(RSN, TRACE, ("-- Encrypt status not matched for PMKID \n")); - return; - } -#endif - - rsnUpdatePmkidCandidateList(prAdapter, prBssDesc); - -} /* rsnSelectPmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS DESC at scan result list -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnUpdatePmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - UINT_32 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnUpdatePmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - - for (i = 0; i < CFG_MAX_PMKID_CACHE; i++) { - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisSpecBssInfo->arPmkidCandicate[i].aucBssid)) - return; - } - - /* If the number of selected BSSID exceed MAX_NUM_PMKID_CACHE(16), - then we only store MAX_NUM_PMKID_CACHE(16) in PMKID cache */ - if ((prAisSpecBssInfo->u4PmkidCandicateCount + 1) > CFG_MAX_PMKID_CACHE) { - prAisSpecBssInfo->u4PmkidCandicateCount --; - } - - i = prAisSpecBssInfo->u4PmkidCandicateCount; - - COPY_MAC_ADDR((PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - (PVOID)prBssDesc->aucBSSID); - - if (prBssDesc->u2RsnCap & MASK_RSNIE_CAP_PREAUTH) { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 1; - DBGLOG(RSN, TRACE, ("Add " MACSTR " with pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - else { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 0; - DBGLOG(RSN, TRACE, ("Add " MACSTR " without pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - - prAisSpecBssInfo->u4PmkidCandicateCount ++; - -} /* rsnUpdatePmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired entry in -* PMKID cache according to the BSSID -* -* \param[in] pucBssid Pointer to the BSSID -* \param[out] pu4EntryIndex Pointer to place the found entry index -* -* \retval TRUE, if found one entry for specified BSSID -* \retval FALSE, if not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchPmkidEntry ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ) -{ - UINT_32 i; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnSearchPmkidEntry"); - - ASSERT(pucBssid); - ASSERT(pu4EntryIndex); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (prAisSpecBssInfo->u4PmkidCacheCount > CFG_MAX_PMKID_CACHE) { - return FALSE; - } - - ASSERT(prAisSpecBssInfo->u4PmkidCacheCount <= CFG_MAX_PMKID_CACHE); - - /* Search for desired BSSID */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, pucBssid, - MAC_ADDR_LEN)) { - break; - } - } - - /* If desired BSSID is found, then set the PMKID */ - if (i < prAisSpecBssInfo->u4PmkidCacheCount) { - *pu4EntryIndex = i; - - return TRUE; - } - - return FALSE; -} /* rsnSearchPmkidEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check if there is difference -* between PMKID candicate list and PMKID cache. If there -* is new candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \retval TRUE, if new member in the PMKID candicate list -* \retval FALSe, if no new member in the PMKID candicate list -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckPmkidCandicate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - UINT_32 i; // Index for PMKID candicate - UINT_32 j; // Indix for PMKID cache - BOOLEAN status = FALSE; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Check for each candicate */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecBssInfo->u4PmkidCacheCount; j++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN)) { - //DBGLOG(RSN, TRACE, (MACSTR" at PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - break; - } - } - - /* No entry found in PMKID cache for the candicate, add new one */ - if (j == prAisSpecBssInfo->u4PmkidCacheCount && prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE) { - DBGLOG(RSN, TRACE, ("Add "MACSTR" to PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - kalMemCopy((PVOID)prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.arBSSID, - (PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN); - prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].fgPmkidExist = FALSE; - prAisSpecBssInfo->u4PmkidCacheCount++; - - status = TRUE; - } - } - - return status; -} /* rsnCheckPmkidCandicate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to wait a duration to indicate the pre-auth AP candicate -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnIndicatePmkidCand ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - DBGLOG(RSN, EVENT, ("Security - Time to indicate the PMKID cand.\n")); - - /* If the authentication mode is WPA2 and indication PMKID flag - is available, then we indicate the PMKID candidate list to NDIS and - clear the flag, indicatePMKID */ - - if (prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnGeneratePmkidIndication(prAdapter); - } - - return; -} /* end of rsnIndicatePmkidCand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check the BSS Desc at scan result -* with pre-auth cap at wpa2 mode. If there -* is candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \param[in] prBss The BSS Desc at scan result -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnCheckPmkidCache ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - P_AIS_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - ASSERT(prBss); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if ((prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && - (prConnSettings->eAuthMode == AUTH_MODE_WPA2)) { - rsnSelectPmkidCandidateList(prAdapter, prBss); - - /* Set indication flag of PMKID to TRUE, and then connHandleNetworkConnection() - will indicate this later */ - if (rsnCheckPmkidCandicate(prAdapter)) { - DBGLOG(RSN, TRACE, ("Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an PMKID candidate list -* indication to NDIS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4Flags PMKID candidate list event: -* PARAM_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGeneratePmkidIndication ( - IN P_ADAPTER_T prAdapter - ) -{ - P_PARAM_STATUS_INDICATION_T prStatusEvent; - P_PARAM_PMKID_CANDIDATE_LIST_T prPmkidEvent; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - UINT_8 i, j = 0, count = 0; - UINT_32 u4LenOfUsedBuffer; - - DEBUGFUNC("rsnGeneratePmkidIndication"); - - ASSERT(prAdapter); - - prStatusEvent = - (P_PARAM_STATUS_INDICATION_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: PMKID Candidatelist Event */ - prStatusEvent->eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - ASSERT(prStatusEvent); - - prPmkidEvent = (P_PARAM_PMKID_CANDIDATE_LIST_T)(&prStatusEvent->eStatusType + 1); - ASSERT(prPmkidEvent); - - prAisSpecificBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prAisSpecificBssInfo); - - for (i = 0; i < prAisSpecificBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecificBssInfo->u4PmkidCacheCount; j++) { - if (EQUAL_MAC_ADDR( prAisSpecificBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid) && - (prAisSpecificBssInfo->arPmkidCache[j].fgPmkidExist == TRUE)){ - break; - } - } - if (count >= CFG_MAX_PMKID_CACHE) { - break; - } - - if (j == prAisSpecificBssInfo->u4PmkidCacheCount) { - kalMemCopy((PVOID)prPmkidEvent->arCandidateList[count].arBSSID, - (PVOID)prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid, - PARAM_MAC_ADDR_LEN); - prPmkidEvent->arCandidateList[count].u4Flags = - prAisSpecificBssInfo->arPmkidCandicate[i].u4PreAuthFlags; - DBGLOG(RSN, TRACE, (MACSTR" %d\n", MAC2STR(prPmkidEvent->arCandidateList[count].arBSSID), - prPmkidEvent->arCandidateList[count].u4Flags)); - count++; - } - } - - /* PMKID Candidate List */ - prPmkidEvent->u4Version = 1; - prPmkidEvent->u4NumCandidates = count; - DBGLOG(RSN, TRACE, ("rsnGeneratePmkidIndication #%d\n", prPmkidEvent->u4NumCandidates)); - u4LenOfUsedBuffer = sizeof(ENUM_STATUS_TYPE_T) + (2 * sizeof(UINT_32)) + - (count * sizeof(PARAM_PMKID_CANDIDATE_T)); - //dumpMemory8((PUINT_8)prAdapter->aucIndicationEventBuffer, u4LenOfUsedBuffer); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) prAdapter->aucIndicationEventBuffer, - u4LenOfUsedBuffer); - -} /* rsnGeneratePmkidIndication */ -#endif - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WSC IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WSC IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWSCIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 221 :0xDD */ - if (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWSCAssocInfoIE, prAdapter->prGlueInfo->u2WSCAssocInfoIELen); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WSCAssocInfoIELen; - } - -} -#endif - - -#if CFG_SUPPORT_802_11W - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the Bip Key installed or not -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -rsnCheckBipKeyInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - if (prStaRec && prStaRec->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX) - return prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled; - else - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to check the Sa query timeout. -* -* -* \note -* Called by: AIS module, Handle by Sa Quert timeout -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rsnCheckSaQueryTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - UINT_32 now; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - GET_CURRENT_SYSTIME(&now); - - if (CHECK_FOR_TIMEOUT(now, - prBssSpecInfo->u4SaQueryStart, - TU_TO_MSEC(1000))) { - LOG_FUNC("association SA Query timed out\n"); - - prBssSpecInfo->ucSaQueryTimedOut = 1; - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - /* Re-connect */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - return 1; - } - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query timer. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQueryTimer ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prTxFrame; - UINT_16 u2PayloadLen; - PUINT_8 pucTmp = NULL; - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - LOG_FUNC("MFP: Start Sa Query\n"); - - if (prBssSpecInfo->u4SaQueryCount > 0 && - rsnCheckSaQueryTimeout(prAdapter)) { - LOG_FUNC("MFP: u4SaQueryCount count =%d\n", prBssSpecInfo->u4SaQueryCount); - return; - } - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_REQUEST; - - if (prBssSpecInfo->u4SaQueryCount == 0) { - GET_CURRENT_SYSTIME(&prBssSpecInfo->u4SaQueryStart); - } - - if (prBssSpecInfo->u4SaQueryCount) { - pucTmp = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!pucTmp) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc tmp buffer for backup sa query id\n")); - return; - } - kalMemCopy(pucTmp, prBssSpecInfo->pucSaQueryTransId, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - } - - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - - ucTransId[0] = (UINT_8)(kalRandomNumber() & 0xFF); - ucTransId[1] = (UINT_8)(kalRandomNumber() & 0xFF); - - kalMemCopy(prTxFrame->ucTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - - prBssSpecInfo->u4SaQueryCount++; - - prBssSpecInfo->pucSaQueryTransId = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!prBssSpecInfo->pucSaQueryTransId) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc buffer for sa query id list\n")); - return; - } - - if (pucTmp) { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, pucTmp, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - kalMemCopy(&prBssSpecInfo->pucSaQueryTransId[(prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN], - ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - kalMemFree(pucTmp, VIR_MEM_TYPE, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - } - else { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - } - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - DBGLOG(RSN, TRACE, ("Set SA Query timer %d (%d sec)\n", prBssSpecInfo->u4SaQueryCount, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer, - TU_TO_MSEC(201)); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - rsnStartSaQueryTimer(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to stop the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStopSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame = NULL; - UINT_16 u2PayloadLen; - P_STA_RECORD_T prStaRec; - P_ACTION_SA_QUERY_FRAME prTxFrame; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Ignore SA Query Request " - "from unassociated STA " MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - return; - } - DBGLOG(RSN, TRACE, ("IEEE 802.11: Sending SA Query Response to " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - /* SA Query always with protected */ - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_RESPONSE; - - kalMemCopy(prTxFrame->ucTransId, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - UINT_32 i; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prSwRfb->u2PacketLen < ACTION_SA_QUERY_TR_ID_LEN) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Too short SA Query Action " - "frame (len=%lu)\n", (unsigned long) prSwRfb->u2PacketLen)); - return; - } - - if (prRxFrame->ucAction == ACTION_SA_QUERY_REQUEST) { - rsnSaQueryRequest(prAdapter, prSwRfb); - return; - } - - if (prRxFrame->ucAction != ACTION_SA_QUERY_RESPONSE) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Unexpected SA Query " - "Action %d\n", prRxFrame->ucAction)); - return; - } - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Response from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - /* MLME-SAQuery.confirm */ - - for (i = 0; i < prBssSpecInfo->u4SaQueryCount; i++) { - if (kalMemCmp(prBssSpecInfo->pucSaQueryTransId + - i * ACTION_SA_QUERY_TR_ID_LEN, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN) == 0) - break; - } - - if (i >= prBssSpecInfo->u4SaQueryCount) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: No matching SA Query " - "transaction identifier found\n")); - return; - } - - DBGLOG(RSN, TRACE, ("Reply to pending SA Query received\n")); - - rsnStopSaQuery(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w mgmt frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckRxMgmt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - BOOLEAN fgUnicast = TRUE; - BOOLEAN fgRobustAction = FALSE; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */) { - - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - if (prAssocReqFrame->aucDestAddr[0] & BIT(0)) - fgUnicast = FALSE; - - LOG_FUNC("QM RX MGT: rsnCheckRxMgmt = %d 0x%x %d ucSubtype=%x\n", fgUnicast, prHifRxHdr->ucReserved, (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC), ucSubtype); - - if (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC) { - /* "Dropped unprotected Robust Action frame from an MFP STA" */ - /* exclude Public Action */ - if (ucSubtype == 13 /* 0x1011: MAC_FRAME_ACTION */) - { - UINT_8 ucAction = *prSwRfb->pucRecvBuff; - if (ucAction != CATEGORY_PUBLIC_ACTION && ucAction != CATEGORY_HT_ACTION) { -#if DBG && CFG_RX_PKTS_DUMP - LOG_FUNC("QM RX MGT: UnProtected Robust Action frame = %d\n", ucAction); -#endif - fgRobustAction = TRUE; - return TRUE; - } - } - if (fgUnicast && ((ucSubtype == 10 /* 0x1010: MAC_FRAME_DISASSOC */) || (ucSubtype == 12 /* 0x1100: MAC_FRAME_DEAUTH */))) { - LOG_FUNC("QM RX MGT: rsnStartSaQuery\n"); - /* MFP test plan 5.3.3.5 */ - rsnStartSaQuery(prAdapter); - return TRUE; - } - } -#if 0 - else { - if (fgUnicast && ((ucSubtype == MAC_FRAME_DISASSOC) || (ucSubtype == MAC_FRAME_DEAUTH))) { - /* This done by function handler */ - //kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - // WLAN_STATUS_MEDIA_DISCONNECT, - // NULL, - // 0); - } - } -#endif - } - return FALSE; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/saa_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/saa_fsm.c deleted file mode 100755 index 65eee2b53fe3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/saa_fsm.c +++ /dev/null @@ -1,2022 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/saa_fsm.c#2 $ -*/ - -/*! \file "saa_fsm.c" - \brief This file defines the FSM for SAA MODULE. - - This file defines the FSM for SAA MODULE. -*/ - - - -/* -** $Log: saa_fsm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * Add debug message about 40MHz bandwidth allowed - * - * 05 12 2011 cp.wu - * [WCXRP00000720] [MT6620 Wi-Fi][Driver] Do not do any further operation in case STA-REC has been invalidated before SAA-FSM starts to roll - * check for valid STA-REC before SAA-FSM starts to roll. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error of after Station Type Macro modification. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * Add support for P2P join event start. - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with main branch for reseting to state 1 when associating with another AP - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable WiFi Direct function. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * * * Add Connection Policy - Any and Rx Burst Deauth Support for WHQL - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 12 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix compile warning due to declared but not used - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Refine Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAAState[AA_STATE_NUM] = { - (PUINT_8)DISP_STRING("AA_STATE_IDLE"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH2"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH3"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH4"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_ASSOC1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_ASSOC2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH4"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_ASSOC2"), - (PUINT_8)DISP_STRING("AA_STATE_RESOURCE") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of SAA Module. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] eNextState The value of Next State -* @param[in] prRetainedSwRfb Pointer to the retained SW_RFB_T for JOIN Success -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ) -{ - ENUM_AA_STATE_T ePreviousState; - BOOLEAN fgIsTransition; - - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - do { - -#if DBG - DBGLOG(SAA, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAAState[prStaRec->eAuthAssocState], - apucDebugAAState[eNextState])); -#else - DBGLOG(SAA, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SAA_IDX, - prStaRec->eAuthAssocState, - eNextState)); -#endif - ePreviousState = prStaRec->eAuthAssocState; - - /* NOTE(Kevin): This is the only place to change the eAuthAssocState(except initial) */ - prStaRec->eAuthAssocState = eNextState; - - - fgIsTransition = (BOOLEAN)FALSE; - switch (prStaRec->eAuthAssocState) { - case AA_STATE_IDLE: - { - if (ePreviousState != prStaRec->eAuthAssocState) { /* Only trigger this event once */ - - if (prRetainedSwRfb) { - - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_SUCCESS, - prStaRec, - prRetainedSwRfb) == WLAN_STATUS_SUCCESS) { - } - else { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - else { - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_FAILURE, - prStaRec, - NULL) == WLAN_STATUS_RESOURCES) { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - - } - - /* Free allocated TCM memory */ - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - } - break; - - case SAA_STATE_SEND_AUTH1: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - /* Update Station Record - Class 1 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame( - prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_1, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH2: - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame(prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_3, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH4: - break; - - case SAA_STATE_SEND_ASSOC1: - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - if (assocSendReAssocReqFrame(prAdapter, prStaRec) != WLAN_STATUS_SUCCESS) { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_ASSOCIATION_RETRY_TIMEOUT_TU)); - } - } - - break; - - case SAA_STATE_WAIT_ASSOC2: - break; - - case AA_STATE_RESOURCE: - /* TODO(Kevin) Can setup a timer and send message later */ - break; - - default: - DBGLOG(SAA, ERROR, ("Unknown AA STATE\n")); - ASSERT(0); - break; - } - - } - while (fgIsTransition); - - return; - -} /* end of saaFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rJoinStatus, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prStaRec); - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - /* Store limitation about 40Mhz bandwidth capability during association */ - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (rJoinStatus == WLAN_STATUS_SUCCESS) { - prBssInfo->fg40mBwAllowed = prBssInfo->fgAssoc40mBwAllowed; - } - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //@TODO: BOW handler - - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - -} /* end of saaFsmSendEventJoinComplete() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_START_T prSaaFsmStartMsg; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prSaaFsmStartMsg = (P_MSG_SAA_FSM_START_T)prMsgHdr; - prStaRec = prSaaFsmStartMsg->prStaRec; - - if((!prStaRec) || (prStaRec->fgIsInUse == FALSE)) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM.\n")); - - /* record sequence number of request message */ - prStaRec->ucAuthAssocReqSeqNum = prSaaFsmStartMsg->ucSeqNum; - - cnmMemFree(prAdapter, prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(prAdapter, WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - -#if CFG_PRIVACY_MIGRATION - //4 <4> Init the sec fsm - secFsmInit(prAdapter, prStaRec); -#endif - - //4 <5> Reset the STA STATE - /* Update Station Record - Class 1 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for Reconnect issue - - * We won't deactivate the same STA_RECORD_T and then activate it again for the - * case of reconnection. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_1); - - //4 <6> Decide if this BSS 20/40M bandwidth is allowed - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) - && (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - prBssInfo->fgAssoc40mBwAllowed = - cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex); - } - else { - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - DBGLOG(RLM, INFO, ("STA 40mAllowed=%d\n", prBssInfo->fgAssoc40mBwAllowed)); - } - - //4 <7> Trigger SAA FSM - saaFsmSteps(prAdapter, prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth1/Auth3/AssocReq) Event of SAA FSM. -* -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH2; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Strictly check the outgoing frame is matched with current JOIN STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH4; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_ASSOC1: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocReqFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_ASSOC2; - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &(prStaRec->rTxReqDoneOrRxRespTimer), - TU_TO_MSEC(DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventTxDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Tx Request Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: TX REQ TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_SEND_ASSOC1: - saaFsmSteps(prAdapter, prStaRec, prStaRec->eAuthAssocState, (P_SW_RFB_T)NULL); - break; - - default: - return; - } - - return; -} /* end of saaFsmRunEventTxReqTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Rx Response Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ENUM_AA_STATE_T eNextState; - - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: RX RESP TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_WAIT_AUTH2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH1; - break; - - case SAA_STATE_WAIT_AUTH4: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH3; - break; - - case SAA_STATE_WAIT_ASSOC2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_ASSOC1; - break; - - default: - break; /* Ignore other cases */ - } - - - if (eNextState != prStaRec->eAuthAssocState) { - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - - return; -} /* end of saaFsmRunEventRxRespTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - ASSERT(0); - return; - } - - if (!IS_AP_STA(prStaRec)) { - return; - } - - switch(prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_WAIT_AUTH2: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); - - if (prStaRec->ucAuthAlgNum == - (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY) { - - eNextState = SAA_STATE_SEND_AUTH3; - } - else { - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_WAIT_AUTH4: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_4, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); /* Add for 802.11r handling */ - - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - return; -} /* end of saaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if the status code was not success -* @retval WLAN_STATUS_BUFFER_RETAINED if the status code was success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - P_SW_RFB_T prRetainedSwRfb = (P_SW_RFB_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - ASSERT(0); - return rStatus; - } - - if (!IS_AP_STA(prStaRec)) { - return rStatus; - } - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_ASSOC1: - case SAA_STATE_WAIT_ASSOC2: - /* TRUE if the incoming frame is what we are waiting for */ - if (assocCheckRxReAssocRspFrameStatus(prAdapter, - prSwRfb, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - /* Update Station Record - Class 3 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for roaming issue - - * We should deactivate the STA_RECORD_T of previous AP before - * activate new one in Driver. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_3); - - prStaRec->ucJoinFailureCount = 0; // Clear history. - - prRetainedSwRfb = prSwRfb; - rStatus = WLAN_STATUS_PENDING; - } - else { - DBGLOG(SAA, INFO, ("Assoc Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - eNextState = AA_STATE_IDLE; - - saaFsmSteps(prAdapter, prStaRec, eNextState, prRetainedSwRfb); - } - break; - - default: - break; /* Ignore other cases */ - } - - return rStatus; - -} /* end of saaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Deauth Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain deauthentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Deauth frame from BSSID=["MACSTR"].\n", - MAC2STR(prDeauthFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DEAUTHENTICATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDeauthentication(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventRxDeAuth(prAdapter, prStaRec, prSwRfb); - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDeauth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Disassociation Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain disassociation frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Disassoc frame from BSSID=["MACSTR"].\n", - MAC2STR(prDisassocFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DISASSOCIATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDisassociation(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - /* TODO(Kevin) */ - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDisassoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Abort Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Abort Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_ABORT_T prSaaFsmAbortMsg; - P_STA_RECORD_T prStaRec; - - - ASSERT(prMsgHdr); - - prSaaFsmAbortMsg = (P_MSG_SAA_FSM_ABORT_T)prMsgHdr; - prStaRec = prSaaFsmAbortMsg->prStaRec; - - ASSERT(prStaRec); - if(!prStaRec) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Stop SAA FSM.\n")); - - cnmMemFree(prAdapter, prMsgHdr); - - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* Cancel JOIN relative Timer */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { -#if DBG - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %s.\n", - apucDebugAAState[prStaRec->eAuthAssocState])); -#else - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %d.\n", - prStaRec->eAuthAssocState)); -#endif - } - -#if 0 - /* For the Auth/Assoc State to IDLE */ - prStaRec->eAuthAssocState = AA_STATE_IDLE; -#else - /* Free this StaRec */ - cnmStaRecFree(prAdapter, prStaRec, FALSE); -#endif - - return; -} /* end of saaFsmRunEventAbort() */ - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/scan.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/scan.c deleted file mode 100755 index efa267eccd4c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/scan.c +++ /dev/null @@ -1,2960 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/scan.c#3 $ -*/ - -/*! \file "scan.c" - \brief This file defines the scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - - - -/* -** $Log: scan.c $ -** -** 01 30 2013 yuche.tsai -** [ALPS00451578] [JB2][WFD][Case Fail][JE][MR1]?????????[Java (JE),660,-1361051648,99,/data/core/,0,system_server_crash,system_server]JE happens when try to connect WFD.(4/5) -** Fix possible old scan result indicate to supplicant after formation. -** -** 01 16 2013 yuche.tsai -** [ALPS00431980] [WFD]Aupus one ?play game 10 minitues?wfd connection automaticlly disconnect -** Fix possible FW assert issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 25 2012 cp.wu - * [WCXRP00001258] [MT6620][MT5931][MT6628][Driver] Do not use stale scan result for deciding connection target - * drop off scan result which is older than 5 seconds when choosing which BSS to join - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct typo. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 04 2011 cp.wu - * [WCXRP00001085] [MT6628 Wi-Fi][Driver] deprecate old BSS-DESC if timestamp is reset with received beacon/probe response frames - * deprecate old BSS-DESC when timestamp in received beacon/probe response frames showed a smaller value than before - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 30 2011 cp.wu - * [WCXRP00001021] [MT5931][Driver] Correct scan result generation for conversion between BSS type and operation mode - * correct type casting issue. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 10 2011 cp.wu - * [WCXRP00000922] [MT6620 Wi-Fi][Driver] traverse whole BSS-DESC list for removing - * traverse whole BSS-DESC list because BSSID is not unique anymore. - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * for multiple BSS descriptior detecting issue: - * 1) check BSSID for infrastructure network - * 2) check SSID for AdHoc network - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * check for BSSID for beacons used to update DTIM - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not check BSS descriptor for connected flag due to linksys's hidden SSID will use another BSS descriptor and never connected - * - * 07 11 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * just pass beacons with the same BSSID. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * Do not check for SSID as beacon content change due to the existence of single BSSID with multiple SSID AP configuration - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * remove unused temporal variable reference. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 06 02 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * filter out BSS in disallowed channel by - * 1. do not add to scan result array if BSS is at disallowed channel - * 2. do not allow to search for BSS-DESC in disallowed channels - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Take parsed result for channel information instead of hardware channel number passed from firmware domain - * take parsed result for generating scanning result with channel information. - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 25 2011 yuche.tsai - * NULL - * Always update Bss Type, for Bss Type for P2P Network is changing every time. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix concurrent issue when AIS scan result would overwrite p2p scan result. - * - * 03 14 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * filtering out other BSS coming from adjacent channels - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * implement beacon change detection by checking SSID and supported rate. - * - * 02 22 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC big endian issue. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 21 2011 cp.wu - * [WCXRP00000380] [MT6620 Wi-Fi][Driver] SSID information should come from buffered BSS_DESC_T rather than using beacon-carried information - * SSID should come from buffered prBssDesc rather than beacon-carried information - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Memfree for P2P Descriptor & P2P Descriptor List. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Free P2P Descriptor List & Descriptor under BSS Descriptor. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 21 2010 cp.wu - * [WCXRP00000280] [MT6620 Wi-Fi][Driver] Enable BSS selection with best RCPI policy in SCN module - * SCN: enable BEST RSSI selection policy support - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 12 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * trust HT IE if available for 5GHz band - * - * 10 11 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * add timing and strenght constraint for filtering out beacons with same SSID/TA but received on different channels - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 01 2010 yuche.tsai - * NULL - * [MT6620 P2P] Fix Big Endian Issue when parse P2P device name TLV. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * When indicate scan result, append IE buffer information in the scan result. - * - * 09 03 2010 yuche.tsai - * NULL - * 1. Update Beacon RX count when running SLT. - * 2. Ignore Beacon when running SLT, would not update information from Beacon. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * 1. Fix P2P Descriptor List to be a link list, to avoid link corrupt after Bss Descriptor Free. - * 2.. Fix P2P Device Name Length BE issue. - * - * 08 23 2010 yuche.tsai - * NULL - * Add P2P Device Found Indication to supplicant - * - * 08 20 2010 cp.wu - * NULL - * reset BSS_DESC_T variables before parsing IE due to peer might have been reconfigured. - * - * 08 20 2010 yuche.tsai - * NULL - * Workaround for P2P Descriptor Infinite loop issue. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 yuche.tsai - * NULL - * Modify code of processing Probe Resonse frame for P2P. - * - * 08 12 2010 yuche.tsai - * NULL - * Add function to get P2P descriptor of BSS descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Modify Scan result processing for P2P module. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P Device Discovery result add function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add support for Probe Request & Response parsing. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 21 2010 yuche.tsai - * - * Fix compile error for SCAN module while disabling P2P feature. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct BSS_DESC_T initialization after allocated. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * if beacon/probe-resp is received in 2.4GHz bands and there is ELEM_ID_DS_PARAM_SET IE available, - * trust IE instead of RMAC information - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable P2P function. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the TKIP disallow join a HT AP code. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add more chance of JOIN retry for BG_SCAN - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * let the rsn wapi IE always parsing. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Solve the compile warning for 'return non-void' function - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix No PKT_INFO_T issue - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing ProbeRequest Frame's TX data rate - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Refine Beacon processing, add read RF channel from RX Status - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify u2EstimatedExtraIELen for probe request - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap IE to probe request - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the process of SCAN Result by adding more Phy Attributes - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function and code for meet the new define - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Report event of scan result to host - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix SCAN Record update - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status and Integrate with TXM - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add (Ext)Support Rate Set IE to ProbeReq - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed the use of SW_RFB->u2FrameLength - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix uninitial aucMacAddress[] for ProbeReq - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Send Probe Request Frame - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define REPLICATED_BEACON_TIME_THRESHOLD (3000) -#define REPLICATED_BEACON_FRESH_PERIOD (10000) -#define REPLICATED_BEACON_STRENGTH_THRESHOLD (32) - -#define ROAMING_NO_SWING_RCPI_STEP (10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to initialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBSSDesc; - PUINT_8 pucBSSBuff; - UINT_32 i; - - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - pucBSSBuff = &prScanInfo->aucScanBuffer[0]; - - - DBGLOG(SCN, INFO, ("->scnInit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - LINK_INITIALIZE(&prScanInfo->rPendingMsgList); - - - //4 <2> Reset link list of BSS_DESC_T - kalMemZero((PVOID) pucBSSBuff, SCN_MAX_BUFFER_SIZE); - - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - for (i = 0; i < CFG_MAX_NUM_BSS_LIST; i++) { - - prBSSDesc = (P_BSS_DESC_T)pucBSSBuff; - - LINK_INSERT_TAIL(&prScanInfo->rFreeBSSDescList, &prBSSDesc->rLinkEntry); - - pucBSSBuff += ALIGN_4(sizeof(BSS_DESC_T)); - } - /* Check if the memory allocation consist with this initialization function */ - ASSERT(((UINT_32)pucBSSBuff - (UINT_32)&prScanInfo->aucScanBuffer[0]) == SCN_MAX_BUFFER_SIZE); - - /* reset freest channel information */ - prScanInfo->fgIsSparseChannelValid = FALSE; - - return; -} /* end of scnInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to uninitialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - DBGLOG(SCN, INFO, ("->scnUninit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - /* NOTE(Kevin): Check rPendingMsgList ? */ - - //4 <2> Reset link list of BSS_DESC_T - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - return; -} /* end of scnUninit() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - return scanSearchBssDescByBssidAndSsid(prAdapter, - aucBSSID, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - else { - /* 20120206 frog: Equal BSSID but not SSID, SSID not hidden, SSID must be updated. */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - return prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchBssDescByTAAndSsid(prAdapter, - aucSrcAddr, - FALSE, - NULL); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucSrcAddr, aucSrcAddr)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByTA() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - aucBSSID, - aucSrcAddr, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBssDesc, prIBSSBssDesc; - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - - switch (eBSSType) { - case BSS_TYPE_P2P_DEVICE: - fgCheckSsid = FALSE; - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_BOW_DEVICE: - { - prBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - - /* if (eBSSType == prBssDesc->eBSSType) */ - - return prBssDesc; - } - - case BSS_TYPE_IBSS: - { - prIBSSBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - prBssDesc = scanSearchBssDescByTAAndSsid(prAdapter, aucSrcAddr, fgCheckSsid, prSsid); - - /* NOTE(Kevin): - * Rules to maintain the SCAN Result: - * For AdHoc - - * CASE I We have TA1(BSSID1), but it change its BSSID to BSSID2 - * -> Update TA1 entry's BSSID. - * CASE II We have TA1(BSSID1), and get TA1(BSSID1) again - * -> Update TA1 entry's contain. - * CASE III We have a SCAN result TA1(BSSID1), and TA2(BSSID2). Sooner or - * later, TA2 merge into TA1, we get TA2(BSSID1) - * -> Remove TA2 first and then replace TA1 entry's TA with TA2, Still have only one entry of BSSID. - * CASE IV We have a SCAN result TA1(BSSID1), and another TA2 also merge into BSSID1. - * -> Replace TA1 entry's TA with TA2, Still have only one entry. - * CASE V New IBSS - * -> Add this one to SCAN result. - */ - if (prBssDesc) { - if ((!prIBSSBssDesc) || // CASE I - (prBssDesc == prIBSSBssDesc)) { // CASE II - - return prBssDesc; - } - else { // CASE III - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - - - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - return prIBSSBssDesc; - } - } - - if (prIBSSBssDesc) { // CASE IV - - return prIBSSBssDesc; - } - - // CASE V - break; // Return NULL; - } - - default: - break; - } - - - return (P_BSS_DESC_T)NULL; - -} /* end of scanSearchExistingBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given Remove Policy. -* -* @param[in] u4RemovePolicy Remove Policy. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - //DBGLOG(SCN, TRACE, ("Before Remove - Number Of SCAN Result = %ld\n", - //prBSSDescList->u4NumElem)); - - if (u4RemovePolicy & SCN_RM_POLICY_TIMEOUT) { - P_BSS_DESC_T prBSSDescNext; - OS_SYSTIME rCurrentTime; - - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - //DBGLOG(SCN, TRACE, ("Remove TIMEOUT BSS DESC(%#x): MAC: "MACSTR", Current Time = %08lx, Update Time = %08lx\n", - //prBssDesc, MAC2STR(prBssDesc->aucBSSID), rCurrentTime, prBssDesc->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_OLDEST_HIDDEN) { - P_BSS_DESC_T prBssDescOldest = (P_BSS_DESC_T)NULL; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (!prBssDesc->fgIsHiddenSSID) { - continue; - } - - if (!prBssDescOldest) { /* 1st element */ - prBssDescOldest = prBssDesc; - continue; - } - - if (TIME_BEFORE(prBssDesc->rUpdateTime, prBssDescOldest->rUpdateTime)) { - prBssDescOldest = prBssDesc; - } - } - - if (prBssDescOldest) { - - //DBGLOG(SCN, TRACE, ("Remove OLDEST HIDDEN BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescOldest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescOldest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_SMART_WEAKEST) { - P_BSS_DESC_T prBssDescWeakest = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBssDescWeakestSameSSID = (P_BSS_DESC_T)NULL; - UINT_32 u4SameSSIDCount = 0; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if ((!prBssDesc->fgIsHiddenSSID) && - (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen))) { - - u4SameSSIDCount++; - - if (!prBssDescWeakestSameSSID) { - prBssDescWeakestSameSSID = prBssDesc; - } - else if (prBssDesc->ucRCPI < prBssDescWeakestSameSSID->ucRCPI) { - prBssDescWeakestSameSSID = prBssDesc; - } - } - - if (!prBssDescWeakest) { /* 1st element */ - prBssDescWeakest = prBssDesc; - continue; - } - - if (prBssDesc->ucRCPI < prBssDescWeakest->ucRCPI) { - prBssDescWeakest = prBssDesc; - } - - } - - if ((u4SameSSIDCount >= SCN_BSS_DESC_SAME_SSID_THRESHOLD) && - (prBssDescWeakestSameSSID)) { - prBssDescWeakest = prBssDescWeakestSameSSID; - } - - if (prBssDescWeakest) { - - //DBGLOG(SCN, TRACE, ("Remove WEAKEST BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescWeakest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescWeakest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_ENTIRE) { - P_BSS_DESC_T prBSSDescNext; - - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - - } - - return; - -} /* end of scanRemoveBssDescsByPolicy() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given BSSID. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; -} /* end of scanRemoveBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given band configuration -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBand Given band -* @param[in] eNetTypeIndex AIS - Remove IBSS/Infrastructure BSS -* BOW - Remove BOW BSS -* P2P - Remove P2P BSS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - BOOLEAN fgToRemove; - - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - - if(eBand == BAND_NULL) { - return; /* no need to do anything, keep all scan result */ - } - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - fgToRemove = FALSE; - - if(prBssDesc->eBand == eBand) { - switch (eNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - if((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS)) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_P2P_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_BOW_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_BOW_DEVICE) { - fgToRemove = TRUE; - } - break; - - default: - ASSERT(0); - break; - } - } - - if(fgToRemove == TRUE) { - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - - return; -} /* end of scanRemoveBssDescByBand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear the CONNECTION FLAG of a specified BSS Descriptor. -* -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; - -} /* end of scanRemoveConnectionFlagOfBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate new BSS_DESC_T -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @return Pointer to BSS Descriptor, if has free space. NULL, if has no space. -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - LINK_REMOVE_HEAD(prFreeBSSDescList, prBssDesc, P_BSS_DESC_T); - - if (prBssDesc) { - P_LINK_T prBSSDescList; - - kalMemZero(prBssDesc, sizeof(BSS_DESC_T)); - -#if CFG_ENABLE_WIFI_DIRECT - LINK_INITIALIZE(&(prBssDesc->rP2pDeviceList)); - prBssDesc->fgIsP2PPresent = FALSE; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* NOTE(Kevin): In current design, this new empty BSS_DESC_T will be - * inserted to BSSDescList immediately. - */ - LINK_INSERT_TAIL(prBSSDescList, &prBssDesc->rLinkEntry); - } - - return prBssDesc; - -} /* end of scanAllocateBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This API parses Beacon/ProbeResp frame and insert extracted BSS_DESC_T -* with IEs into prAdapter->rWifiVar.rScanInfo.aucScanBuffer -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the receiving frame buffer. -* -* @return Pointer to BSS Descriptor -* NULL if the Beacon/ProbeResp frame is invalid -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_DESC_T prBssDesc = NULL; - UINT_16 u2CapInfo; - ENUM_BSS_TYPE_T eBSSType = BSS_TYPE_INFRASTRUCTURE; - - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_8 ucHwChannelNum = 0; - UINT_8 ucIeDsChannelNum = 0; - UINT_8 ucIeHtChannelNum = 0; - BOOLEAN fgIsValidSsid = FALSE, fgEscape = FALSE; - PARAM_SSID_T rSsid; - UINT_64 u8Timestamp; - BOOLEAN fgIsNewBssDesc = FALSE; - - UINT_32 i; - UINT_8 ucSSIDChar; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2CapInfo, &u2CapInfo); - WLAN_GET_FIELD_64(&prWlanBeaconFrame->au4Timestamp[0], &u8Timestamp); - - // decide BSS type - switch (u2CapInfo & CAP_INFO_BSS_TYPE) { - case CAP_INFO_ESS: - /* It can also be Group Owner of P2P Group. */ - eBSSType = BSS_TYPE_INFRASTRUCTURE; - break; - - case CAP_INFO_IBSS: - eBSSType = BSS_TYPE_IBSS; - break; - case 0: - /* The P2P Device shall set the ESS bit of the Capabilities field in the Probe Response fame to 0 and IBSS bit to 0. (3.1.2.1.1) */ - eBSSType = BSS_TYPE_P2P_DEVICE; - break; - -#if CFG_ENABLE_BT_OVER_WIFI - // @TODO: add rule to identify BOW beacons -#endif - - default: - return NULL; - } - - //4 <1.1> Pre-parse SSID IE - pucIE = prWlanBeaconFrame->aucInfoElem; - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - } - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID) { - ucSSIDChar = '\0'; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsValidSsid = FALSE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (ucSSIDChar) { - fgIsValidSsid = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (fgIsValidSsid == TRUE) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - } - fgEscape = TRUE; - break; - default: - break; - } - - if(fgEscape == TRUE) { - break; - } - } - - - //4 <1.2> Replace existing BSS_DESC_T or allocate a new one - prBssDesc = scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - (PUINT_8)prWlanBeaconFrame->aucBSSID, - (PUINT_8)prWlanBeaconFrame->aucSrcAddr, - fgIsValidSsid, - fgIsValidSsid == TRUE ? &rSsid : NULL); - - if (prBssDesc == (P_BSS_DESC_T)NULL) { - fgIsNewBssDesc = TRUE; - - do { - //4 <1.2.1> First trial of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.2> Hidden is useless, remove the oldest hidden ssid. (for passive scan) - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_OLDEST_HIDDEN)); - - //4 <1.2.3> Second tail of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.4> Remove the weakest one - /* If there are more than half of BSS which has the same ssid as connection - * setting, remove the weakest one from them. - * Else remove the weakest one. - */ - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_SMART_WEAKEST)); - - //4 <1.2.5> reallocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.6> no space, should not happen - //ASSERT(0); // still no space available ? - return NULL; - - } - while(FALSE); - - } - else { - OS_SYSTIME rCurrentTime; - - // WCXRP00000091 - // if the received strength is much weaker than the original one, - // ignore it due to it might be received on the folding frequency - - GET_CURRENT_SYSTIME(&rCurrentTime); - - if (prBssDesc->eBSSType != eBSSType) { - prBssDesc->eBSSType = eBSSType; - } - else if(HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr) != prBssDesc->ucChannelNum && - prBssDesc->ucRCPI > prSwRfb->prHifRxHdr->ucRcpi) { - - // for signal strength is too much weaker and previous beacon is not stale - if((prBssDesc->ucRCPI - prSwRfb->prHifRxHdr->ucRcpi) >= REPLICATED_BEACON_STRENGTH_THRESHOLD && - rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_FRESH_PERIOD) { - return prBssDesc; - } - // for received beacons too close in time domain - else if(rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_TIME_THRESHOLD) { - return prBssDesc; - } - } - - /* if Timestamp has been reset, re-generate BSS DESC 'cause AP should have reset itself */ - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && u8Timestamp < prBssDesc->u8TimeStamp.QuadPart) { - BOOLEAN fgIsConnected, fgIsConnecting; - - /* set flag for indicating this is a new BSS-DESC */ - fgIsNewBssDesc = TRUE; - - /* backup 2 flags for APs which reset timestamp unexpectedly */ - fgIsConnected = prBssDesc->fgIsConnected; - fgIsConnecting = prBssDesc->fgIsConnecting; - scanRemoveBssDescByBssid(prAdapter, prBssDesc->aucBSSID); - - prBssDesc = scanAllocateBssDesc(prAdapter); - if (!prBssDesc) { - return NULL; - } - - /* restore */ - prBssDesc->fgIsConnected = fgIsConnected; - prBssDesc->fgIsConnecting = fgIsConnecting; - } - } - - /* NOTE: Keep consistency of Scan Record during JOIN process */ - if ((fgIsNewBssDesc == FALSE) && prBssDesc->fgIsConnecting) { - return prBssDesc; - } - - //4 <2> Get information from Fixed Fields - prBssDesc->eBSSType = eBSSType; /* Update the latest BSS type information. */ - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prWlanBeaconFrame->aucSrcAddr); - - COPY_MAC_ADDR(prBssDesc->aucBSSID, prWlanBeaconFrame->aucBSSID); - - prBssDesc->u8TimeStamp.QuadPart = u8Timestamp; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2BeaconInterval, &prBssDesc->u2BeaconInterval); - - prBssDesc->u2CapInfo = u2CapInfo; - - - //4 <2.1> Retrieve IEs for later parsing - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - prBssDesc->fgIsIEOverflow = TRUE; - } - else { - prBssDesc->fgIsIEOverflow = FALSE; - } - prBssDesc->u2IELength = u2IELength; - - kalMemCopy(prBssDesc->aucIEBuf, prWlanBeaconFrame->aucInfoElem, u2IELength); - - //4 <2.2> reset prBssDesc variables in case that AP has been reconfigured - prBssDesc->fgIsERPPresent = FALSE; - prBssDesc->fgIsHTPresent = FALSE; - prBssDesc->eSco = CHNL_EXT_SCN; - prBssDesc->fgIEWAPI = FALSE; -#if CFG_RSN_MIGRATION - prBssDesc->fgIERSN = FALSE; -#endif -#if CFG_PRIVACY_MIGRATION - prBssDesc->fgIEWPA = FALSE; -#endif - - - //4 <3.1> Full IE parsing on SW_RFB_T - pucIE = prWlanBeaconFrame->aucInfoElem; - - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): for Atheros IOT #1 */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - BOOLEAN fgIsHiddenSSID = FALSE; - ucSSIDChar = '\0'; - - - prIeSsid = (P_IE_SSID_T)pucIE; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsHiddenSSID = TRUE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (!ucSSIDChar) { - fgIsHiddenSSID = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (!fgIsHiddenSSID) { - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - /* TP-LINK will set extra and incorrect ie with ELEM_ID_SUP_RATES */ - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucIeDsChannelNum = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - - case ELEM_ID_TIM: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_TIM) { - prBssDesc->ucDTIMPeriod = TIM_IE(pucIE)->ucDTIMPeriod; - } - break; - - case ELEM_ID_IBSS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_IBSS_PARAMETER_SET){ - prBssDesc->u2ATIMWindow = IBSS_PARAM_IE(pucIE)->u2ATIMWindow; - } - break; - -#if 0 //CFG_SUPPORT_802_11D - case ELEM_ID_COUNTRY_INFO: - prBssDesc->prIECountry = (P_IE_COUNTRY_T)pucIE; - break; -#endif - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_ERP) { - prBssDesc->fgIsERPPresent = TRUE; - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) { - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - } - break; - -#if CFG_RSN_MIGRATION - case ELEM_ID_RSN: - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &prBssDesc->rRSNInfo)) { - prBssDesc->fgIERSN = TRUE; - prBssDesc->u2RsnCap = prBssDesc->rRSNInfo.u2RsnCap; - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnCheckPmkidCache(prAdapter, prBssDesc); - } - } - break; -#endif - - case ELEM_ID_HT_CAP: - prBssDesc->fgIsHTPresent = TRUE; - break; - - case ELEM_ID_HT_OP: - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - if ((((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssDesc->eSco = (ENUM_CHNL_EXT_T) - (((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO); - } - ucIeHtChannelNum = ((P_IE_HT_OP_T) pucIE)->ucPrimaryChannel; - - break; - -#if CFG_SUPPORT_WAPI - case ELEM_ID_WAPI: - if (wapiParseWapiIE(WAPI_IE(pucIE), &prBssDesc->rIEWAPI)) { - prBssDesc->fgIEWAPI = TRUE; - } - break; -#endif - - case ELEM_ID_VENDOR: // ELEM_ID_P2P, ELEM_ID_WMM - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; -#if CFG_PRIVACY_MIGRATION - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - - if (rsnParseWpaIE(prAdapter, WPA_IE(pucIE), &prBssDesc->rWPAInfo)) { - prBssDesc->fgIEWPA = TRUE; - } - } - } -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - prBssDesc->fgIsP2PPresent = TRUE; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } - break; - - /* no default */ - } - } - - - //4 <3.2> Save information from IEs - SSID - /* Update Flag of Hidden SSID for used in SEARCH STATE. */ - - /* NOTE(Kevin): in current driver, the ucSSIDLen == 0 represent - * all cases of hidden SSID. - * If the fgIsHiddenSSID == TRUE, it means we didn't get the ProbeResp with - * valid SSID. - */ - if (prBssDesc->ucSSIDLen == 0) { - prBssDesc->fgIsHiddenSSID = TRUE; - } - else { - prBssDesc->fgIsHiddenSSID = FALSE; - } - - - //4 <3.3> Check rate information in related IEs. - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prBssDesc->u2OperationalRateSet, - &prBssDesc->u2BSSBasicRateSet, - &prBssDesc->fgIsUnknownBssBasicRate); - } - - - //4 <4> Update information from HIF RX Header - { - prHifRxHdr = prSwRfb->prHifRxHdr; - - ASSERT(prHifRxHdr); - - //4 <4.1> Get TSF comparison result - prBssDesc->fgIsLargerTSF = HIF_RX_HDR_GET_TCL_FLAG(prHifRxHdr); - - //4 <4.2> Get Band information - prBssDesc->eBand = HIF_RX_HDR_GET_RF_BAND(prHifRxHdr); - - //4 <4.2> Get channel and RCPI information - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prHifRxHdr); - - if (BAND_2G4 == prBssDesc->eBand) { - - /* Update RCPI if in right channel */ - if (ucIeDsChannelNum >= 1 && ucIeDsChannelNum <= 14) { - - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeDsChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeDsChannelNum; - } - else if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum <= 14) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - // 5G Band - else { - if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum < 200) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - /* Always update RCPI */ - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - } - - - //4 <5> PHY type setting - prBssDesc->ucPhyTypeSet = 0; - - if (BAND_2G4 == prBssDesc->eBand) { - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* check if support 11g */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) || - prBssDesc->fgIsERPPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - /* if not 11g only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_OFDM)) { - /* check if support 11b */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - } - } - } - else { /* (BAND_5G == prBssDesc->eBande) */ - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* Support 11a definitely */ - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - - ASSERT(!(prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)); - } - } - - - //4 <6> Update BSS_DESC_T's Last Update TimeStamp. - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - - return prBssDesc; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to scan result for query -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SCAN_INFO_T prScanInfo; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame; - PARAM_MAC_ADDRESS rMacAddr; - PARAM_SSID_T rSsid; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_8 ucRateLen = 0; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if (prBssDesc->eBand == BAND_2G4) { - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) - || prBssDesc->fgIsERPPresent) { - eNetworkType = PARAM_NETWORK_TYPE_OFDM24; - } - else { - eNetworkType = PARAM_NETWORK_TYPE_DS; - } - } - else { - ASSERT(prBssDesc->eBand == BAND_5G); - eNetworkType = PARAM_NETWORK_TYPE_OFDM5; - } - - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - /* NOTE(Kevin): Not supported by WZC(TBD) */ - return WLAN_STATUS_FAILURE; - } - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - COPY_MAC_ADDR(rMacAddr, prWlanBeaconFrame->aucBSSID); - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = (UINT_32) prWlanBeaconFrame->u2BeaconInterval; - rConfiguration.u4ATIMWindow = prBssDesc->u2ATIMWindow; - rConfiguration.u4DSConfig = nicChannelNum2Freq(prBssDesc->ucChannelNum); - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - rateGetDataRatesFromRateSet(prBssDesc->u2OperationalRateSet, - 0, - aucRatesEx, - &ucRateLen); - - /* NOTE(Kevin): Set unused entries, if any, at the end of the array to 0. - * from OID_802_11_BSSID_LIST - */ - for (i = ucRateLen; i < sizeof(aucRatesEx) / sizeof(aucRatesEx[0]) ; i++) { - aucRatesEx[i] = 0; - } - - switch(prBssDesc->eBSSType) { - case BSS_TYPE_IBSS: - eOpMode = NET_TYPE_IBSS; - break; - - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_P2P_DEVICE: - case BSS_TYPE_BOW_DEVICE: - default: - eOpMode = NET_TYPE_INFRA; - break; - } - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - prBssDesc->ucChannelNum, - RCPI_TO_dBm(prBssDesc->ucRCPI)); - - nicAddScanResult(prAdapter, - rMacAddr, - &rSsid, - prWlanBeaconFrame->u2CapInfo & CAP_INFO_PRIVACY ? 1 : 0, - RCPI_TO_dBm(prBssDesc->ucRCPI), - eNetworkType, - &rConfiguration, - eOpMode, - aucRatesEx, - prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen, - (PUINT_8)((UINT_32)(prSwRfb->pvHeader) + WLAN_MAC_MGMT_HEADER_LEN)); - - return WLAN_STATUS_SUCCESS; - -} /* end of scanAddScanResult() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Parse the content of given Beacon or ProbeResp Frame. -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if not report this SW_RFB_T to host -* @retval WLAN_STATUS_PENDING if report this SW_RFB_T to host as scan result -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prAisBssInfo; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; -#if CFG_SLT_SUPPORT - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; -#endif - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - //4 <0> Ignore invalid Beacon Frame - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)) { -#ifndef _lint - ASSERT(0); -#endif /* _lint */ - return rStatus; - } - -#if CFG_SLT_SUPPORT - prSltInfo = &prAdapter->rWifiVar.rSltInfo; - - if (prSltInfo->fgIsDUT) { - DBGLOG(P2P, INFO, ("\n\rBCN: RX\n")); - prSltInfo->u4BeaconReceiveCnt++; - return WLAN_STATUS_SUCCESS; - } - else { - return WLAN_STATUS_SUCCESS; - } -#endif - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - //4 <1> Parse and add into BSS_DESC_T - prBssDesc = scanAddToBssDesc(prAdapter, prSwRfb); - - if (prBssDesc) { - - //4 <1.1> Beacon Change Detection for Connected BSS - if(prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA)) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - EQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, prAisBssInfo->aucSSID, prAisBssInfo->ucSSIDLen)) { - BOOLEAN fgNeedDisconnect = FALSE; - -#if CFG_SUPPORT_BEACON_CHANGE_DETECTION - // <1.1.2> check if supported rate differs - if(prAisBssInfo->u2OperationalRateSet != prBssDesc->u2OperationalRateSet) { - fgNeedDisconnect = TRUE; - } -#endif - - // <1.1.3> beacon content change detected, disconnect immediately - if(fgNeedDisconnect == TRUE) { - aisBssBeaconTimeout(prAdapter); - } - } - - //4 <1.1> Update AIS_BSS_INFO - if(((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA))) { - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - - /* *not* checking prBssDesc->fgIsConnected anymore, - * due to Linksys AP uses " " as hidden SSID, and would have different BSS descriptor */ - if ((!prAisBssInfo->ucDTIMPeriod) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON)) { - - prAisBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - - /* sync with firmware for beacon information */ - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - } - -#if CFG_SUPPORT_ADHOC - if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen) && - (prBssDesc->eBSSType == BSS_TYPE_IBSS) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS)) { - - ibssProcessMatchedBeacon(prAdapter, prAisBssInfo, prBssDesc, prSwRfb->prHifRxHdr->ucRcpi); - } -#endif /* CFG_SUPPORT_ADHOC */ - } - - rlmProcessBcn(prAdapter, - prSwRfb, - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem, - (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]))); - - //4 <3> Send SW_RFB_T to HIF when we perform SCAN for HOST - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE - || prBssDesc->eBSSType == BSS_TYPE_IBSS) { - /* for AIS, send to host */ - if (prConnSettings->fgIsScanReqIssued && - rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == TRUE) { - ENUM_BAND_T eBand; - UINT_8 ucChannel; - BOOLEAN fgAddToScanResult; - - /* check ucChannelNum/eBand for adjacement channel filtering */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE && - (eBand != prBssDesc->eBand || ucChannel != prBssDesc->ucChannelNum)) { - fgAddToScanResult = FALSE; - } - else { - fgAddToScanResult = TRUE; - } - - if(fgAddToScanResult == TRUE) { - rStatus = scanAddScanResult(prAdapter, prBssDesc, prSwRfb); - } - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - scanP2pProcessBeaconAndProbeResp( - prAdapter, - prSwRfb, - &rStatus, - prBssDesc, - prWlanBeaconFrame); - } -#endif - } - - return rStatus; - -} /* end of scanProcessBeaconAndProbeResp() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Search the Candidate of BSS Descriptor for JOIN(Infrastructure) or -* MERGE(AdHoc) according to current Connection Policy. -* -* \return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_SCAN_INFO_T prScanInfo; - - P_LINK_T prBSSDescList; - - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL; - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_STA_RECORD_T prPrimaryStaRec; - P_STA_RECORD_T prCandidateStaRec = (P_STA_RECORD_T)NULL; - - OS_SYSTIME rCurrentTime; - - /* The first one reach the check point will be our candidate */ - BOOLEAN fgIsFindFirst = (BOOLEAN)FALSE; - - BOOLEAN fgIsFindBestRSSI = (BOOLEAN)FALSE; - BOOLEAN fgIsFindBestEncryptionLevel = (BOOLEAN)FALSE; - //BOOLEAN fgIsFindMinChannelLoad = (BOOLEAN)FALSE; - - /* TODO(Kevin): Support Min Channel Load */ - //UINT_8 aucChannelLoad[CHANNEL_NUM] = {0}; - - BOOLEAN fgIsFixedChannel; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - prAisSpecBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* check for fixed channel operation */ - if(eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - fgIsFixedChannel = cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel); - } - else { - fgIsFixedChannel = FALSE; - } - -#if DBG - if (prConnSettings->ucSSIDLen < ELEM_MAX_LEN_SSID) { - prConnSettings->aucSSID[prConnSettings->ucSSIDLen] = '\0'; - } -#endif - - DBGLOG(SCN, INFO, ("SEARCH: Num Of BSS_DESC_T = %d, Look for SSID: %s\n", - prBSSDescList->u4NumElem, prConnSettings->aucSSID)); - - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* TODO(Kevin): Update Minimum Channel Load Information here */ - - DBGLOG(SCN, INFO, ("SEARCH: ["MACSTR"], SSID:%s\n", - MAC2STR(prBssDesc->aucBSSID), prBssDesc->aucSSID)); - - - //4 <2> Check PHY Type and attributes - //4 <2.1> Check Unsupported BSS PHY Type - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore unsupported ucPhyTypeSet = %x\n", - prBssDesc->ucPhyTypeSet)); - continue; - } - - //4 <2.2> Check if has unknown NonHT BSS Basic Rate Set. - if (prBssDesc->fgIsUnknownBssBasicRate) { - - continue; - } - - //4 <2.3> Check if fixed operation cases should be aware - if (fgIsFixedChannel == TRUE && - (prBssDesc->eBand != eBand || prBssDesc->ucChannelNum != ucChannel)) { - continue; - } - - //4 <2.4> Check if the channel is legal under regulatory domain - if(rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == FALSE) { - continue; - } - - //4 <2.5> Check if this BSS_DESC_T is stale - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - continue; - } - - //4 <3> Check if reach the excessive join retry limit - /* NOTE(Kevin): STA_RECORD_T is recorded by TA. */ - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - - if (prStaRec) { - /* NOTE(Kevin): - * The Status Code is the result of a Previous Connection Request, we use this as SCORE for choosing a proper - * candidate (Also used for compare see <6>) - * The Reason Code is an indication of the reason why AP reject us, we use this Code for "Reject" - * a SCAN result to become our candidate(Like a blacklist). - */ -#if 0 /* TODO(Kevin): */ - if (prStaRec->u2ReasonCode != REASON_CODE_RESERVED) { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS with previous Reason Code = %d\n", - prStaRec->u2ReasonCode)); - continue; - } - else -#endif - if (prStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - /* NOTE(Kevin): greedy association - after timeout, we'll still - * try to associate to the AP whose STATUS of conection attempt - * was not success. - * We may also use (ucJoinFailureCount x JOIN_RETRY_INTERVAL_SEC) for - * time bound. - */ - if ((prStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) || - (CHECK_FOR_TIMEOUT(rCurrentTime, - prStaRec->rLastJoinTime, - SEC_TO_SYSTIME(JOIN_RETRY_INTERVAL_SEC)))) { - - /* NOTE(Kevin): Every JOIN_RETRY_INTERVAL_SEC interval, we can retry - * JOIN_MAX_RETRY_FAILURE_COUNT times. - */ - if (prStaRec->ucJoinFailureCount >= JOIN_MAX_RETRY_FAILURE_COUNT) { - prStaRec->ucJoinFailureCount = 0; - } - DBGLOG(SCN, INFO, ("SEARCH: Try to join BSS again which has Status Code = %d (Curr = %ld/Last Join = %ld)\n", - prStaRec->u2StatusCode, rCurrentTime, prStaRec->rLastJoinTime)); - } - else { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS which reach maximum Join Retry Count = %d \n", - JOIN_MAX_RETRY_FAILURE_COUNT)); - continue; - } - - } - } - - - //4 <4> Check for various NETWORK conditions - if (eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - - //4 <4.1> Check BSS Type for the corresponding Operation Mode in Connection Setting - /* NOTE(Kevin): For NET_TYPE_AUTO_SWITCH, we will always pass following check. */ - if (((prConnSettings->eOPMode == NET_TYPE_INFRA) && - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE)) || - ((prConnSettings->eOPMode == NET_TYPE_IBSS || prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS) && - (prBssDesc->eBSSType != BSS_TYPE_IBSS))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore eBSSType = %s\n", - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) ? - "INFRASTRUCTURE" : "IBSS"))); - continue; - } - - //4 <4.2> Check AP's BSSID if OID_802_11_BSSID has been set. - if ((prConnSettings->fgIsConnByBssidIssued) && - (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE)) { - - if (UNEQUAL_MAC_ADDR(prConnSettings->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore due to BSSID was not matched!\n")); - continue; - } - } - -#if CFG_SUPPORT_ADHOC - //4 <4.3> Check for AdHoc Mode - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - //4 <4.3.1> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS - e.g. IPN2220, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_ADHOC_BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCN, LOUD, ("SEARCH: Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - - //4 <4.3.2> Check Peer's capability - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4.3.3> Compare TSF - if (prBssInfo->fgIsBeaconActivated && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, LOUD, - ("SEARCH: prBssDesc->fgIsLargerTSF = %d\n", - prBssDesc->fgIsLargerTSF)); - - if (!prBssDesc->fgIsLargerTSF) { - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: ["MACSTR"], Smaller TSF\n", MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - } -#endif /* CFG_SUPPORT_ADHOC */ - - } - - - - -#if 0 /* TODO(Kevin): For IBSS */ - //4 <2.c> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - if ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) && - (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED)) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - - //4 <4B> Check for IBSS AdHoc Mode. - /* Skip if one or more BSS Basic Rate are not supported by current AdHocMode */ - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_IBSS) { - //4 <4B.1> Check if match the Capability of current IBSS AdHoc Mode. - if (ibssCheckCapabilityForAdHocMode(prAdapter, prPrimaryBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4B.2> IBSS Merge Decision Flow for SEARCH STATE. - if (prAdapter->fgIsIBSSActive && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prPrimaryBssDesc->aucBSSID)) { - - if (!fgIsLocalTSFRead) { - NIC_GET_CURRENT_TSF(prAdapter, &rCurrentTsf); - - DBGLOG(SCAN, TRACE, - ("\n\nCurrent TSF : %08lx-%08lx\n\n", - rCurrentTsf.u.HighPart, rCurrentTsf.u.LowPart)); - } - - if (rCurrentTsf.QuadPart > prPrimaryBssDesc->u8TimeStamp.QuadPart) { - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: ["MACSTR"], Current BSSID: ["MACSTR"].\n", - MAC2STR(prPrimaryBssDesc->aucBSSID), MAC2STR(prBssInfo->aucBSSID))); - - DBGLOG(SCAN, TRACE, - ("\n\nBSS's TSF : %08lx-%08lx\n\n", - prPrimaryBssDesc->u8TimeStamp.u.HighPart, prPrimaryBssDesc->u8TimeStamp.u.LowPart)); - - prPrimaryBssDesc->fgIsLargerTSF = FALSE; - continue; - } - else { - prPrimaryBssDesc->fgIsLargerTSF = TRUE; - } - - } - } - - //4 <5> Check the Encryption Status. - if (rsnPerformPolicySelection(prPrimaryBssDesc)) { - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - - /* For RSN Pre-authentication, update the PMKID canidate list for - same SSID and encrypt status */ - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAdapter->rWifiVar.rAisBssInfo.u4PmkidCandicateCount) { - prAdapter->rWifiVar.rAisBssInfo.fgIndicatePMKID = rsnCheckPmkidCandicate(); - } - } - -#endif - - - prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - - //4 <6> Check current Connection Policy. - switch (prConnSettings->eConnectionPolicy) { - case CONNECT_BY_SSID_BEST_RSSI: - /* Choose Hidden SSID to join only if the `fgIsEnableJoin...` is TRUE */ - if (prAdapter->rWifiVar.fgEnableJoinToHiddenSSID && prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): following if () statement means that - * If Target is hidden, then we won't connect when user specify SSID_ANY policy. - */ - if (prConnSettings->ucSSIDLen) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - - } - else if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen)) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - break; - - case CONNECT_BY_SSID_ANY: - /* NOTE(Kevin): In this policy, we don't know the desired - * SSID from user, so we should exclude the Hidden SSID from scan list. - * And because we refuse to connect to Hidden SSID node at the beginning, so - * when the JOIN Module deal with a BSS_DESC_T which has fgIsHiddenSSID == TRUE, - * then the Connection Settings must be valid without doubt. - */ - if (!prBssDesc->fgIsHiddenSSID) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindFirst = TRUE; - } - break; - - case CONNECT_BY_BSSID: - if(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnSettings->aucBSSID)) { - prPrimaryBssDesc = prBssDesc; - } - break; - - default: - break; - } - - - /* Primary Candidate was not found */ - if (prPrimaryBssDesc == NULL) { - continue; - } - - //4 <7> Check the Encryption Status. - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - if (wapiPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - fgIsFindFirst = TRUE; - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - } - else -#endif -#if CFG_RSN_MIGRATION - if (rsnPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - if (prAisSpecBssInfo->fgCounterMeasure) { - DBGLOG(RSN, INFO, ("Skip while at counter measure period!!!\n")); - continue; - } - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - -#if 0 - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAisSpecBssInfo->u4PmkidCandicateCount) { - if (rsnCheckPmkidCandicate()) { - DBGLOG(RSN, WARN, ("Prepare a timer to indicate candidate "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.aucBssid))); - cnmTimerStopTimer(&prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(&prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } - } -#endif - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } -#endif - } - else { - /* Todo:: P2P and BOW Policy Selection */ - } - - prPrimaryStaRec = prStaRec; - - //4 <8> Compare the Candidate and the Primary Scan Record. - if (!prCandidateBssDesc) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - - //4 <8.1> Condition - Get the first matched one. - if (fgIsFindFirst) { - break; - } - } - else { -#if 0 /* TODO(Kevin): For security(TBD) */ - //4 <6B> Condition - Choose the one with best Encryption Score. - if (fgIsFindBestEncryptionLevel) { - if (prCandidateBssDesc->ucEncLevel < - prPrimaryBssDesc->ucEncLevel) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - - /* If reach here, that means they have the same Encryption Score. - */ - - //4 <6C> Condition - Give opportunity to the one we didn't connect before. - // For roaming, only compare the candidates other than current associated BSSID. - if (!prCandidateBssDesc->fgIsConnected && !prPrimaryBssDesc->fgIsConnected) { - if ((prCandidateStaRec != (P_STA_RECORD_T)NULL) && - (prCandidateStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - - DBGLOG(SCAN, TRACE, ("So far -BSS DESC MAC: "MACSTR" has nonzero Status Code = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateStaRec->u2StatusCode)); - - if (prPrimaryStaRec != (P_STA_RECORD_T)NULL) { - if (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - - /* Give opportunity to the one with smaller rLastJoinTime */ - if (TIME_BEFORE(prCandidateStaRec->rLastJoinTime, - prPrimaryStaRec->rLastJoinTime)) { - continue; - } - /* We've connect to CANDIDATE recently, let us try PRIMARY now */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY's u2StatusCode = 0 */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY has no StaRec - We didn't connet to PRIMARY before */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if ((prPrimaryStaRec != (P_STA_RECORD_T)NULL) && - (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - continue; - } - } - } -#endif - - - //4 <6D> Condition - Visible SSID win Hidden SSID. - if (prCandidateBssDesc->fgIsHiddenSSID) { - if (!prPrimaryBssDesc->fgIsHiddenSSID) { - prCandidateBssDesc = prPrimaryBssDesc; /* The non Hidden SSID win. */ - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if (prPrimaryBssDesc->fgIsHiddenSSID) { - continue; - } - } - - - //4 <6E> Condition - Choose the one with better RCPI(RSSI). - if (fgIsFindBestRSSI) { - /* TODO(Kevin): We shouldn't compare the actual value, we should - * allow some acceptable tolerance of some RSSI percentage here. - */ - DBGLOG(SCN, TRACE, ("Candidate ["MACSTR"]: RCPI = %d, Primary ["MACSTR"]: RCPI = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateBssDesc->ucRCPI, - MAC2STR(prPrimaryBssDesc->aucBSSID), prPrimaryBssDesc->ucRCPI)); - - ASSERT(!(prCandidateBssDesc->fgIsConnected && - prPrimaryBssDesc->fgIsConnected)); - - /* NOTE: To prevent SWING, we do roaming only if target AP has at least 5dBm larger than us. */ - if (prCandidateBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP <= prPrimaryBssDesc->ucRCPI) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prPrimaryBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - -#if 0 - /* If reach here, that means they have the same Encryption Score, and - * both RSSI value are close too. - */ - //4 <6F> Seek the minimum Channel Load for less interference. - if (fgIsFindMinChannelLoad) { - - /* TODO(Kevin): Check which one has minimum channel load in its channel */ - } -#endif - } - } - - return prCandidateBssDesc; - -} /* end of scanSearchBssDescByPolicy() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/scan_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/scan_fsm.c deleted file mode 100755 index 2fc9b8bac204..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/scan_fsm.c +++ /dev/null @@ -1,1109 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/scan_fsm.c#1 $ -*/ - -/*! \file "scan_fsm.c" - \brief This file defines the state transition function for SCAN FSM. - - The SCAN FSM is part of SCAN MODULE and responsible for performing basic SCAN - behavior as metioned in IEEE 802.11 2007 11.1.3.1 & 11.1.3.2 . -*/ - - - -/* -** $Log: scan_fsm.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001095] [Volunteer Patch][Driver] Always Scan before enable Hot-Spot. - * Fix bug when unregister P2P network.. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * free mailbox message afte parsing is completed. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Take P2P wildcard SSID into consideration. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix bug for processing queued scan request. - * - * 08 11 2010 yuche.tsai - * NULL - * Add a function for returning channel. - * - * 08 05 2010 yuche.tsai - * NULL - * Update SCAN FSM for support P2P Device discovery scan. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add option of channel extension while cancelling scan request. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 cp.wu - * - * due to FW/DRV won't be sync. precisely, some strict assertions should be eased. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * when returning to SCAN_IDLE state, send a correct message to source FSM. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine the order of Stop TX Queue and Switch Channel - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update pause/resume/flush API to new Bitmap API - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Ignore the PROBE_DELAY state if the value of Probe Delay == 0 - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add set RX Filter to receive BCN from different BSSID during SCAN - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove flag of CFG_TEST_MGMT_FSM - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Change parameter of scanSendProbeReqFrames() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update scnFsmSteps() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugScanState[SCAN_STATE_NUM] = { - (PUINT_8)DISP_STRING("SCAN_STATE_IDLE"), - (PUINT_8)DISP_STRING("SCAN_STATE_SCANNING"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prMsgHdr; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - do { - -#if DBG - DBGLOG(SCN, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugScanState[prScanInfo->eCurrentState], - apucDebugScanState[eNextState])); -#else - DBGLOG(SCN, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SCN_IDX, - prScanInfo->eCurrentState, - eNextState)); -#endif - - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prScanInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - switch (prScanInfo->eCurrentState) { - case SCAN_STATE_IDLE: - /* check for pending scanning requests */ - if(!LINK_IS_EMPTY(&(prScanInfo->rPendingMsgList))) { - // load next message from pending list as scan parameters - LINK_REMOVE_HEAD(&(prScanInfo->rPendingMsgList), prMsgHdr, P_MSG_HDR_T); - - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - - /* switch to next state */ - eNextState = SCAN_STATE_SCANNING; - fgIsTransition = TRUE; - - cnmMemFree(prAdapter, prMsgHdr); - } - break; - - case SCAN_STATE_SCANNING: - if(prScanParam->fgIsScanV2 == FALSE) { - scnSendScanReq(prAdapter); - } - else { - scnSendScanReqV2(prAdapter); - } - break; - - default: - ASSERT(0); - break; - - } - } - while (fgIsTransition); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - if(prScanParam->ucSSIDNum == 1) { - COPY_SSID(rCmdScanReq.aucSSID, - rCmdScanReq.ucSSIDLength, - prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0]); - } - - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif - - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ_V2 command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ_V2 rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ_V2)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - for (i = 0 ; i < prScanParam->ucSSIDNum; i++) { - COPY_SSID(rCmdScanReq.arSSID[i].aucSsid, - rCmdScanReq.arSSID[i].u4SsidLen, - prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i]); - } - - rCmdScanReq.u2ProbeDelayTime = (UINT_8)prScanParam->u2ProbeDelayTime; - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif - - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ_V2, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ_V2, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - ASSERT(prMsgHdr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - - if (prScanInfo->eCurrentState == SCAN_STATE_IDLE) { - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - else { - // should not deliver to this function - ASSERT(0); - } - - cnmMemFree(prAdapter, prMsgHdr); - scnFsmSteps(prAdapter, SCAN_STATE_SCANNING); - } - else { - LINK_INSERT_TAIL(&prScanInfo->rPendingMsgList, &prMsgHdr->rLinkEntry); - } - - return; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancel; - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_CANCEL rCmdScanCancel; - - ASSERT(prMsgHdr); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)prMsgHdr; - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - if (prScanInfo->eCurrentState != SCAN_STATE_IDLE) { - if(prScanCancel->ucSeqNum == prScanParam->ucSeqNum && - prScanCancel->ucNetTypeIndex == (UINT_8)prScanParam->eNetTypeIndex) { - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = prScanParam->ucSeqNum; - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanCancel.ucIsExtChannel = (UINT_8) prScanCancel->fgIsChannelExt; - } - else { - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - } -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - scnFsmRemovePendingMsg(prAdapter, prScanCancel->ucSeqNum, prScanCancel->ucNetTypeIndex); - } - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing (Legacy) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - if (prScanParam->ucSSIDType & (SCAN_REQ_SSID_SPECIFIED | SCAN_REQ_SSID_P2P_WILDCARD)) { - prScanParam->ucSSIDNum = 1; - - COPY_SSID(prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0], - prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength); - - // reset SSID length to zero for rest array entries - for(i = 1 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - else { - prScanParam->ucSSIDNum = 0; - - for(i = 0 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - - prScanParam->u2ProbeDelayTime = 0; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = FALSE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing - V2 with multiple SSID support -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - ASSERT(prScanReqMsg->ucSSIDNum <= SCN_SSID_MAX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - prScanParam->ucSSIDNum = prScanReqMsg->ucSSIDNum; - - for(i = 0 ; i < prScanReqMsg->ucSSIDNum ; i++) { - COPY_SSID(prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i], - prScanReqMsg->prSsid[i].aucSsid, - (UINT_8)prScanReqMsg->prSsid[i].u4SsidLen); - } - - prScanParam->u2ProbeDelayTime = prScanReqMsg->u2ProbeDelay; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = TRUE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Remove pending scan request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prPendingMsgHdr, prPendingMsgHdrNext, prRemoveMsgHdr = NULL; - P_LINK_ENTRY_T prRemoveLinkEntry = NULL; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - /* traverse through rPendingMsgList for removal */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingMsgHdr, - prPendingMsgHdrNext, - &(prScanInfo->rPendingMsgList), - rLinkEntry, - MSG_HDR_T) { - if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - P_MSG_SCN_SCAN_REQ prScanReqMsg = (P_MSG_SCN_SCAN_REQ)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsg->ucSeqNum && - ucNetTypeIndex == prScanReqMsg->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsg->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - else if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - P_MSG_SCN_SCAN_REQ_V2 prScanReqMsgV2 = (P_MSG_SCN_SCAN_REQ_V2)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsgV2->ucSeqNum && - ucNetTypeIndex == prScanReqMsgV2->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsgV2->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - - if(prRemoveLinkEntry) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - ucSeqNum, - ucNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* remove from pending list */ - LINK_REMOVE_KNOWN_ENTRY(&(prScanInfo->rPendingMsgList), prRemoveLinkEntry); - cnmMemFree(prAdapter, prRemoveMsgHdr); - - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // buffer empty channel information - if(prScanParam->eScanChannel == SCAN_CHANNEL_FULL - || prScanParam->eScanChannel == SCAN_CHANNEL_2G4) { - if(prScanDone->ucSparseChannelValid) { - prScanInfo->fgIsSparseChannelValid = TRUE; - prScanInfo->rSparseChannel.eBand = (ENUM_BAND_T)prScanDone->rSparseChannel.ucBand; - prScanInfo->rSparseChannel.ucChannelNum = prScanDone->rSparseChannel.ucChannelNum; - } - else { - prScanInfo->fgIsSparseChannelValid = FALSE; - } - } - - if(prScanInfo->eCurrentState == SCAN_STATE_SCANNING && - prScanDone->ucSeqNum == prScanParam->ucSeqNum) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_DONE); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - DBGLOG(SCN, LOUD, ("Unexpected SCAN-DONE event: SeqNum = %d, Current State = %d\n", - prScanDone->ucSeqNum, - prScanInfo->eCurrentState)); - } - - return; -} /* end of scnEventScanDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_DONE)); - if (!prScanDoneMsg) { - ASSERT(0); // Can't indicate SCAN FSM Complete - return; - } - - if(prScanParam->fgIsObssScan == TRUE) { - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_RLM_SCAN_DONE; - } - else { - switch((ENUM_NETWORK_TYPE_INDEX_T)ucNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_AIS_SCAN_DONE; - break; - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_P2P_SCAN_DONE; - break; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_BOW_SCAN_DONE; - break; -#endif - - default: - DBGLOG(SCN, LOUD, ("Unexpected Network Type: %d\n", ucNetTypeIndex)); - ASSERT(0); - break; - } - } - - prScanDoneMsg->ucSeqNum = ucSeqNum; - prScanDoneMsg->ucNetTypeIndex = ucNetTypeIndex; - prScanDoneMsg->eScanStatus = eScanStatus; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanDoneMsg, - MSG_SEND_METHOD_BUF); - -} /* end of scnFsmGenerateScanDoneMsg() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Query for most sparse channel -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ) -{ - P_SCAN_INFO_T prScanInfo; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if(prScanInfo->fgIsSparseChannelValid == TRUE) { - if(prSparseBand) { - *prSparseBand = prScanInfo->rSparseChannel.eBand; - } - - if(pucSparseChannel) { - *pucSparseChannel = prScanInfo->rSparseChannel.ucChannelNum; - } - - return TRUE; - } - else { - return FALSE; - } -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/sec_fsm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/sec_fsm.c deleted file mode 100755 index 862b9fa64661..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/sec_fsm.c +++ /dev/null @@ -1,1255 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/sec_fsm.c#1 $ -*/ - -/*! \file "sec_fsm.c" - \brief This is the file implement security check state machine. - - In security module, do the port control check after success join to an AP, - and the path to NORMAL TR, the state machine handle these state transition. -*/ - - - -/* -** $Log: sec_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 19 2010 wh.su - * - * fixed the compilng error at debug mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 13 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine some code - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * code refine - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function name - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the state machine, to meet the firmware security design v1.1 - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugSecState[SEC_STATE_NUM] = { - (PUINT_8)DISP_STRING("SEC_STATE_INIT"), - (PUINT_8)DISP_STRING("SEC_STATE_INITIATOR_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_RESPONDER_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_CHECK_OK"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_EAPOL"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_DEAUTH"), - (PUINT_8)DISP_STRING("SEC_STATE_COUNTERMEASURE"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - #if 1 /* MT6620 */ - //At MT5921, is ok, but at MT6620, firmware base ASIC, the firmware - //will lost these data, thus, driver have to keep the wep material and - //setting to firmware while awake from D3. - #endif - - prSecInfo->eCurrentState = SEC_STATE_INIT; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - if (IS_STA_IN_AIS(prSta)) { - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prAisSpecBssInfo->u4RsnaLastMICFailTime = 0; - prAisSpecBssInfo->fgCheckEAPoLTxDone = FALSE; - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEapolTxTimeout, - (UINT_32)prSta); - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEndOfCounterMeasure, - (UINT_32)prSta); - - } - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do uninitialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID /* whsu:Todo: */ -secFsmUnInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - //nicPrivacyRemoveWlanTable(prSta->ucWTEntry); - - if (IS_STA_IN_AIS(prSta)) { - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer); - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* STANDBY to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to INITIATOR_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_INITIATOR_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to RESPONDER_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_RESPONDER_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INITIATOR_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INITIATOR_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* RESPONDER_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_RESPONDER_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* CHECK_OK to SEND_EAPOL -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_CHECK_OK_to_SEND_EAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - ASSERT(prSta); - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo->fgCheckEAPoLTxDone = TRUE; - - //cnmTimerStartTimer(prAdapter, - // &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer, - // SEC_TO_MSEC(EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_EAPOL to SEND_DEAUTH. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_EAPOL_to_SEND_DEAUTH ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - /* Compose deauth frame to AP, a call back function for tx done */ - if (authSendDeauthFrame(prAdapter, - prSta, - (P_SW_RFB_T)NULL, - REASON_CODE_MIC_FAILURE, - (PFN_TX_DONE_HANDLER)secFsmEventDeauthTxDone) != WLAN_STATUS_SUCCESS) { - ASSERT(FALSE); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_DEAUTH_to_COUNTERMEASURE ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prAdapter); - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - //Start the 60 sec timer - cnmTimerStartTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - SEC_TO_MSEC(COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_COUNTERMEASURE_to_INIT ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - //Clear the counter measure flag - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The Core FSM engine of security module. -* -* \param[in] prSta Pointer to the Sta record -* \param[in] eNextState Enum value of next sec STATE -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN ENUM_SEC_STATE_T eNextState - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - ASSERT(prSecInfo); - - DEBUGFUNC("secFsmSteps"); - do { - /* Do entering Next State */ - prSecInfo->ePreviousState = prSecInfo->eCurrentState; - - /* Do entering Next State */ -#if DBG - DBGLOG(RSN, STATE, ("\n"MACSTR" TRANSITION: [%s] -> [%s]\n\n", - MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState], - apucDebugSecState[eNextState])); -#else - DBGLOG(RSN, STATE, ("\n"MACSTR" [%d] TRANSITION: [%d] -> [%d]\n\n", - MAC2STR(prSta->aucMacAddr), - DBG_RSN_IDX, - prSecInfo->eCurrentState, - eNextState)); -#endif - prSecInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; -#if 0 - /* Do tasks of the State that we just entered */ - switch (prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - break; - case SEC_STATE_INITIATOR_PORT_BLOCKED: - break; - case SEC_STATE_RESPONDER_PORT_BLOCKED: - break; - case SEC_STATE_CHECK_OK: - break; - case SEC_STATE_SEND_EAPOL: - break; - case SEC_STATE_SEND_DEAUTH: - break; - case SEC_STATE_COUNTERMEASURE: - break; - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - } -#endif - } - while (fgIsTransition); - - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - ENUM_SEC_STATE_T eNextState; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart\n")); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - //prSta->fgTransmitKeyExist = FALSE; - //whsu:: nicPrivacySetStaDefaultWTIdx(prSta); - -#if 1 /* Since the 1x and key can set to firmware in order, always enter the check ok state */ - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); -#else - if (IS_STA_IN_AIS(prSta->eStaType)) { - if (secRsnKeyHandshakeEnabled(prAdapter) == TRUE -#if CFG_SUPPORT_WAPI - || (prAdapter->rWifiVar.rConnSettings.fgWapiMode) -#endif - ) { - prSta->fgTransmitKeyExist = FALSE; - //nicPrivacyInitialize(prSta->ucNetTypeIndex); - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); - } - } -#if CFG_ENABLE_WIFI_DIRECT || CFG_ENABLE_BT_OVER_WIFI - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_BT_OVER_WIFI - else if ((prSta->eStaType == STA_TYPE_BOW_CLIENT) || - (prSta->eStaType == STA_TYPE_P2P_GC)) - #elif CFG_ENABLE_WIFI_DIRECT - else if (prSta->eStaType == STA_TYPE_P2P_GC) - #elif CFG_ENABLE_BT_OVER_WIFI - else if (prSta->eStaType == STA_TYPE_BOW_CLIENT) - #endif - { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, RESPONDER_PORT_BLOCKED); - } -#endif - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } -#endif - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -} /* secFsmRunEventStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function called by reset procedure to force the sec fsm enter -* idle state -* -* \param[in] ucNetTypeIdx The Specific Network type index -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - DBGLOG(RSN, TRACE, ("secFsmEventAbort for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - prSta->fgTransmitKeyExist = FALSE; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - if (prSecInfo == NULL) - return; - - if (IS_STA_IN_AIS(prSta)) { - - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - if (prSecInfo->eCurrentState == SEC_STATE_SEND_EAPOL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone == FALSE) { - DBGLOG(RSN, TRACE, ("EAPOL STATE not match the flag\n")); - //cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - } - } - } - prSecInfo->eCurrentState = SEC_STATE_INIT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "2nd EAPoL Tx is sending" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent2ndEapolTx ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - //BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEvent2ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR" Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR" Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = TRUE; - break; - default: -#if DBG - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent2ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "4th EAPoL Tx is Tx done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent4ndEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_CMD_802_11_KEY prStoredKey; - - DEBUGFUNC("secFsmRunEvent4ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = FALSE; - if (prSecInfo->fgKeyStored) { - prStoredKey = (P_CMD_802_11_KEY)prSecInfo->aucStoredKey; - - //prSta = rxmLookupStaRecIndexFromTA(prStoredKey->aucPeerAddr); - //if (nicPrivacySetKeyEntry(prStoredKey, prSta->ucWTEntry) == FALSE) - // DBGLOG(RSN, WARN, ("nicPrivacySetKeyEntry() fail,..\n")); - - //key update - prSecInfo->fgKeyStored = FALSE; - prSta->fgTransmitKeyExist = TRUE; - } - if (prSecInfo->eCurrentState == SEC_STATE_INITIATOR_PORT_BLOCKED) { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - default: - -#if DBG - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent4ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Pairwise key installed" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \retval TRUE The key can be installed to HW -* \retval FALSE The kay conflict with the current key, abort it -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secFsmEventPTKInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgStatus = TRUE; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - if (prSecInfo == NULL) - return TRUE; /* Not PTK */ - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - eNextState = prSecInfo->eCurrentState; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - /* Legacy wep, wpa-none */ - break; - - case SEC_STATE_INITIATOR_PORT_BLOCKED: - if (prSecInfo->fg2nd1xSend) { - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - - case SEC_STATE_RESPONDER_PORT_BLOCKED: - SEC_STATE_TRANSITION(prAdapter, prSta, RESPONDER_PORT_BLOCKED, CHECK_OK); - break; - - - case SEC_STATE_CHECK_OK: - break; - - default: - fgStatus = FALSE; - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return fgStatus; - -} /* end of secFsmRunEventPTKInstalled() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Counter Measure" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStartCounterMeasure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventStartCounterMeasure"); - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - prAdapter->rWifiVar.rAisSpecificBssInfo.u4RsnaLastMICFailTime = 0; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_CHECK_OK: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = TRUE; - - // dls port control - SEC_STATE_TRANSITION(prAdapter, prSta, CHECK_OK, SEND_EAPOL); - } - break; - - default: - break; - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -} /* secFsmRunEventStartCounterMeasure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "802.1x EAPoL Tx Done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("secFsmRunEventEapolTxDone"); - - ASSERT(prStaRec); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(RSN, INFO, ("Error EAPoL fram fail to send!!\n")); - //ASSERT(0); - return; - } - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - prSecInfo = &prStaRec->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_EAPOL: - if (prAisBssInfo->fgCheckEAPoLTxDone == FALSE) { - ASSERT(0); - } - - prAisBssInfo->fgCheckEAPoLTxDone = FALSE; - //cnmTimerStopTimer(prAdapter, &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_EAPOL, SEND_DEAUTH); - break; - default: - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prStaRec, eNextState); - } - - return; - -}/* secFsmRunEventEapolTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Deauth frame Tx Done" to Sec FSM. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventDeauthTxDone"); - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - - if (!prStaRec) - return; - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = (P_SEC_INFO_T)&prStaRec->rSecInfo; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - - DBGLOG(RSN, TRACE, ("Set timer %d\n", COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_DEAUTH, COUNTERMEASURE); - - break; - - default: - ASSERT(0); - break; - } - - return; -}/* secFsmRunEventDeauthTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check the eapol error frame fail to send issue. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("secFsmRunEventEapolTxTimeout"); - - prStaRec = (P_STA_RECORD_T)u4Parm; - - ASSERT(prStaRec); - - /* Todo:: How to handle the Eapol Error fail to send case? */ - ASSERT(0); - - return; - -}/* secFsmEventEapolTxTimeout */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will stop the counterMeasure duration. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEndOfCounterMeasure ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prSta; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventEndOfCounterMeasure"); - - prSta = (P_STA_RECORD_T)u4Parm; - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = FALSE; - - SEC_STATE_TRANSITION(prAdapter, prSta, COUNTERMEASURE, INIT); - } - break; - - default: - ASSERT(0); - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -}/* end of secFsmRunEventEndOfCounterMeasure */ -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/swcr.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/swcr.c deleted file mode 100755 index e874511b848a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/swcr.c +++ /dev/null @@ -1,1264 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/swcr.c#1 $ -*/ - -/*! \file "swcr.c" - \brief - -*/ - - - -/* -** $Log: swcr.c $ - * - * 06 04 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined". - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * fix debug counters of rx in driver. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add swcr for test. - * -* -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_SWCR - -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if 0 -extern SWCR_MAP_ENTRY_T g_arRlmArSwCrMap[]; -SWCR_MOD_MAP_ENTRY_T g_arSwCrAllMaps[] = { - { SWCR_MAP_NUM(g_arRlmArSwCrMap), g_arRlmArSwCrMap}, /* 0x00nn */ - {0,NULL} -}; -#endif - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -void testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); - -/* Support Debug */ -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl); -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param); -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo); - -UINT_32 g_au4SwCr[SWCR_CR_NUM]; /*: 0: command other: data */ - -/* JB mDNS Filter*/ -UINT_32 g_u4mDNSRXFilter = 0; /* [31] 0: stop 1: start, [3] IPv6 [2] IPv4*/ - -static TIMER_T g_rSwcrDebugTimer; -static BOOLEAN g_fgSwcrDebugTimer = FALSE; -static UINT_32 g_u4SwcrDebugCheckTimeout = 0; -static ENUM_SWCR_DBG_TYPE_T g_ucSwcrDebugCheckType = 0; -static UINT_32 g_u4SwcrDebugFrameDumpType = 0; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#define TEST_PS 1 - -const static PFN_CMD_RW_T g_arSwCtrlCmd[] ={ - swCtrlCmdCategory0, - swCtrlCmdCategory1 -#if TEST_PS - , testPsCmdCategory0 - , testPsCmdCategory1 -#endif -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) - , testWNMCmdCategory0 -#endif -#endif -}; - - -const PFN_SWCR_RW_T g_arSwCrModHandle[] = { - swCtrlSwCr, - NULL -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -enum { - SWCTRL_MAGIC, - SWCTRL_DEBUG, - SWCTRL_WIFI_VAR, - SWCTRL_ENABLE_INT, - SWCTRL_DISABLE_INT, - SWCTRL_TXM_INFO, - SWCTRL_RXM_INFO, - SWCTRL_DUMP_BSS, - SWCTRL_QM_INFO, - SWCTRL_DUMP_ALL_QUEUE_LEN, - SWCTRL_DUMP_MEM, - SWCTRL_TX_CTRL_INFO, - SWCTRL_DUMP_QUEUE, - SWCTRL_DUMP_QM_DBG_CNT, - SWCTRL_QM_DBG_CNT, - SWCTRL_RX_PKTS_DUMP, - SWCTRL_RX_MDNS_FILTER, - SWCTRL_CATA0_INDEX_NUM -}; - -enum { - SWCTRL_STA_INFO, - SWCTRL_DUMP_STA, - SWCTRL_STA_QUE_INFO, - SWCTRL_CATA1_INDEX_NUM -}; - -/* JB mDNS Filter*/ -#define RX_MDNS_FILTER_START (1<<31) -#define RX_MDNS_FILTER_IPV4 (1<<2) -#define RX_MDNS_FILTER_IPV6 (1<<3) -typedef enum _ENUM_SWCR_RX_MDNS_FILTER_CMD_T { - SWCR_RX_MDNS_FILTER_CMD_STOP = 0, - SWCR_RX_MDNS_FILTER_CMD_START, - SWCR_RX_MDNS_FILTER_CMD_ADD, - SWCR_RX_MDNS_FILTER_CMD_REMOVE, - SWCR_RX_MDNS_FILTER_NUM -} ENUM_SWCR_RX_MDNS_FILTER_CMD_T; - -#if TEST_PS -enum { - TEST_PS_MAGIC, - TEST_PS_SETUP_BSS, - TEST_PS_ENABLE_BEACON, - TEST_PS_TRIGGER_BMC, - TEST_PS_SEND_NULL, - TEST_PS_BUFFER_BMC, - TEST_PS_UPDATE_BEACON, - TEST_PS_CATA0_INDEX_NUM -}; - -enum { - TEST_PS_STA_PS, - TEST_PS_STA_ENTER_PS, - TEST_PS_STA_EXIT_PS, - TEST_PS_STA_TRIGGER_PSPOLL, - TEST_PS_STA_TRIGGER_FRAME, - TEST_PS_CATA1_INDEX_NUM -}; -#endif - -#if CFG_SUPPORT_802_11V -#if WNM_UNIT_TEST -enum { - TEST_WNM_TIMING_MEAS, - TEST_WNM_CATA0_INDEX_NUM -}; -#endif -#endif - - -#define _SWCTRL_MAGIC 0x66201642 - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -void dumpQueue(P_ADAPTER_T prAdapter) -{ - - P_TX_CTRL_T prTxCtrl; - P_QUE_MGT_T prQM; - P_GLUE_INFO_T prGlueInfo; - UINT_32 i; - UINT_32 j; - - - DEBUGFUNC("dumpQueue"); - - prTxCtrl = &prAdapter->rTxCtrl; - prQM = &prAdapter->rQM; - prGlueInfo = prAdapter->prGlueInfo; - - for(i = TC0_INDEX; i<=TC5_INDEX; i++) { - DBGLOG(SW4, INFO,( "TC %u\n",i)); - DBGLOG(SW4, INFO,( "Max %u Free %u\n", - prTxCtrl->rTc.aucMaxNumOfBuffer[i], prTxCtrl->rTc.aucFreeBufferCount[i])); - - DBGLOG(SW4, INFO,("Average %u minReserved %u CurrentTcResource %u GuaranteedTcResource %u\n", - QM_GET_TX_QUEUE_LEN(prAdapter, i), - prQM->au4MinReservedTcResource[i], - prQM->au4CurrentTcResource[i], - prQM->au4GuaranteedTcResource[i])); - - } - - - for(i = 0; iau4HeadStaRecIndex[i],prQM->au4ForwardCount[i])); - } - - DBGLOG(SW4, INFO,( "BMC or unknown TxQueue Len %u\n",prQM->arTxQueue[0].u4NumElem)); - DBGLOG(SW4, INFO,( "Pending %d\n",prGlueInfo->i4TxPendingFrameNum)); - DBGLOG(SW4, INFO,( "Pending Security %d\n",prGlueInfo->i4TxPendingSecurityFrameNum)); -#if defined(LINUX) - for(i=0;i<4;i++){ - for(j=0;jai4TxPendingFrameNumPerQueue[i][j])); - } - } -#endif - - DBGLOG(SW4, INFO,( " rFreeSwRfbList %u\n", prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rReceivedRfbList %u\n", prAdapter->rRxCtrl.rReceivedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rIndicatedRfbList %u\n", prAdapter->rRxCtrl.rIndicatedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " ucNumIndPacket %u\n", prAdapter->rRxCtrl.ucNumIndPacket)); - DBGLOG(SW4, INFO,( " ucNumRetainedPacket %u\n", prAdapter->rRxCtrl.ucNumRetainedPacket)); - - -} - - -void dumpSTA(P_ADAPTER_T prAdapter, P_STA_RECORD_T prStaRec) -{ - UINT_8 ucWTEntry; - UINT_32 i; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("dumpSTA"); - - ASSERT(prStaRec); - ucWTEntry = prStaRec->ucWTEntry; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(SW4, INFO,("Mac address: " MACSTR " Rcpi %u" "\n", MAC2STR(prStaRec->aucMacAddr),prStaRec->ucRCPI)); - - DBGLOG(SW4, INFO,("Idx %u Wtbl %u Used %u State %u Bss Phy 0x%x Sta DesiredPhy 0x%x\n", - prStaRec->ucIndex, ucWTEntry, - prStaRec->fgIsInUse,prStaRec->ucStaState, - prBssInfo->ucPhyTypeSet, - prStaRec->ucDesiredPhyTypeSet)); - - DBGLOG(SW4, INFO,("Sta Operation 0x%x DesiredNontHtRateSet 0x%x Mcs 0x%x u2HtCapInfo 0x%x\n", - prStaRec->u2OperationalRateSet,prStaRec->u2DesiredNonHTRateSet,prStaRec->ucMcsSet, prStaRec->u2HtCapInfo)); - - - for(i = 0; iarTxQueue[i].u4NumElem)); - } - - DBGLOG(SW4, INFO, ("BmpDeliveryAC %x\n",prStaRec->ucBmpDeliveryAC)); - DBGLOG(SW4, INFO, ("BmpTriggerAC %x\n",prStaRec->ucBmpTriggerAC)); - DBGLOG(SW4, INFO, ("UapsdSpSupproted %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("IsQoS %u\n",prStaRec->fgIsQoS)); - DBGLOG(SW4, INFO, ("AssocId %u\n",prStaRec->u2AssocId)); - - DBGLOG(SW4, INFO, ("fgIsInPS %u\n",prStaRec->fgIsInPS)); - DBGLOG(SW4, INFO, ("ucFreeQuota %u\n",prStaRec->ucFreeQuota)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForDelivery %u\n",prStaRec->ucFreeQuotaForDelivery)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForNonDelivery %u\n",prStaRec->ucFreeQuotaForNonDelivery)); - - -#if 0 - DBGLOG(SW4, INFO, ("IsQmmSup %u\n",prStaRec->fgIsWmmSupported)); - DBGLOG(SW4, INFO, ("IsUapsdSup %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("AvailabaleDeliverPkts %u\n",prStaRec->ucAvailableDeliverPkts)); - DBGLOG(SW4, INFO, ("BmpDeliverPktsAC %u\n",prStaRec->u4BmpDeliverPktsAC)); - DBGLOG(SW4, INFO, ("BmpBufferAC %u\n",prStaRec->u4BmpBufferAC)); - DBGLOG(SW4, INFO, ("BmpNonDeliverPktsAC %u\n",prStaRec->u4BmpNonDeliverPktsAC)); -#endif - - for(i=0;iaprRxReorderParamRefTbl[i]){ - DBGLOG(SW4, INFO,("RxReorder fgIsValid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->fgIsValid)); - DBGLOG(SW4, INFO,("RxReorder Tid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->ucTid)); - DBGLOG(SW4, INFO,("RxReorder rReOrderQue Len: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->rReOrderQue.u4NumElem)); - DBGLOG(SW4, INFO,("RxReorder WinStart: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinStart)); - DBGLOG(SW4, INFO,("RxReorder WinEnd: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinEnd)); - DBGLOG(SW4, INFO,("RxReorder WinSize: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinSize)); - } - } - -} - - -VOID dumpBss(P_ADAPTER_T prAdapter, P_BSS_INFO_T prBssInfo) -{ - - DBGLOG(SW4, INFO, ("SSID %s\n",prBssInfo->aucSSID)); - DBGLOG(SW4, INFO, ("OWN " MACSTR"\n",MAC2STR(prBssInfo->aucOwnMacAddr))); - DBGLOG(SW4, INFO, ("BSSID " MACSTR"\n",MAC2STR(prBssInfo->aucBSSID))); - DBGLOG(SW4, INFO, ("ucNetTypeIndex %u\n",prBssInfo->ucNetTypeIndex)); - DBGLOG(SW4, INFO, ("eConnectionState %u\n",prBssInfo->eConnectionState)); - DBGLOG(SW4, INFO, ("eCurrentOPMode %u\n",prBssInfo->eCurrentOPMode)); - DBGLOG(SW4, INFO, ("fgIsQBSS %u\n",prBssInfo->fgIsQBSS)); - DBGLOG(SW4, INFO, ("fgIsShortPreambleAllowed %u\n",prBssInfo->fgIsShortPreambleAllowed)); - DBGLOG(SW4, INFO, ("fgUseShortPreamble %u\n",prBssInfo->fgUseShortPreamble)); - DBGLOG(SW4, INFO, ("fgUseShortSlotTime %u\n",prBssInfo->fgUseShortSlotTime)); - DBGLOG(SW4, INFO, ("ucNonHTBasicPhyType %x\n",prBssInfo->ucNonHTBasicPhyType)); - DBGLOG(SW4, INFO, ("u2OperationalRateSet %x\n",prBssInfo->u2OperationalRateSet)); - DBGLOG(SW4, INFO, ("u2BSSBasicRateSet %x\n",prBssInfo->u2BSSBasicRateSet)); - DBGLOG(SW4, INFO, ("ucPhyTypeSet %x\n",prBssInfo->ucPhyTypeSet)); - DBGLOG(SW4, INFO, ("rStaRecOfClientList %d\n",prBssInfo->rStaRecOfClientList.u4NumElem)); - DBGLOG(SW4, INFO, ("u2CapInfo %x\n",prBssInfo->u2CapInfo)); - DBGLOG(SW4, INFO, ("u2ATIMWindow %x\n",prBssInfo->u2ATIMWindow)); - DBGLOG(SW4, INFO, ("u2AssocId %x\n",prBssInfo->u2AssocId)); - DBGLOG(SW4, INFO, ("ucDTIMPeriod %x\n",prBssInfo->ucDTIMPeriod)); - DBGLOG(SW4, INFO, ("ucDTIMCount %x\n",prBssInfo->ucDTIMCount)); - DBGLOG(SW4, INFO, ("fgIsNetAbsent %x\n", prBssInfo->fgIsNetAbsent)); - DBGLOG(SW4, INFO, ("eBand %d\n", prBssInfo->eBand)); - DBGLOG(SW4, INFO, ("ucPrimaryChannel %d\n", prBssInfo->ucPrimaryChannel)); - DBGLOG(SW4, INFO, ("ucHtOpInfo1 %d\n", prBssInfo->ucHtOpInfo1)); - DBGLOG(SW4, INFO, ("ucHtOpInfo2 %d\n", prBssInfo->u2HtOpInfo2)); - DBGLOG(SW4, INFO, ("ucHtOpInfo3 %d\n", prBssInfo->u2HtOpInfo3)); - DBGLOG(SW4, INFO, ("fgErpProtectMode %d\n", prBssInfo->fgErpProtectMode)); - DBGLOG(SW4, INFO, ("eHtProtectMode %d\n", prBssInfo->eHtProtectMode)); - DBGLOG(SW4, INFO, ("eGfOperationMode %d\n", prBssInfo->eGfOperationMode)); - DBGLOG(SW4, INFO, ("eRifsOperationMode %d\n", prBssInfo->eRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgObssErpProtectMode %d\n", prBssInfo->fgObssErpProtectMode)); - DBGLOG(SW4, INFO, ("eObssHtProtectMode %d\n", prBssInfo->eObssHtProtectMode)); - DBGLOG(SW4, INFO, ("eObssGfProtectMode %d\n", prBssInfo->eObssGfOperationMode)); - DBGLOG(SW4, INFO, ("fgObssRifsOperationMode %d\n", prBssInfo->fgObssRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgAssoc40mBwAllowed %d\n", prBssInfo->fgAssoc40mBwAllowed)); - DBGLOG(SW4, INFO, ("fg40mBwAllowed %d\n", prBssInfo->fg40mBwAllowed)); - DBGLOG(SW4, INFO, ("eBssSCO %d\n", prBssInfo->eBssSCO)); - - -} - - - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_32 i; - - DEBUGFUNC("swCtrlCmdCategory0"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - i=0; - - if(ucIndex>=SWCTRL_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case SWCTRL_DEBUG: -#if DBG - aucDebugModule[ucOpt0] = (UINT_8)g_au4SwCr[1]; -#endif - break; - case SWCTRL_WIFI_VAR: - break; - -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i] = 0; - } - break; - case SWCTRL_QM_DBG_CNT: - prAdapter->rQM.au4QmDebugCounters[ucOpt0] = g_au4SwCr[1]; - - break; -#endif -#if CFG_RX_PKTS_DUMP - case SWCTRL_RX_PKTS_DUMP: - //DBGLOG(SW4, INFO,("SWCTRL_RX_PKTS_DUMP: mask %x\n", g_au4SwCr[1])); - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = g_au4SwCr[1]; - break; -#endif - case SWCTRL_RX_MDNS_FILTER: - { - UINT_32 u4rxfilter; - BOOLEAN fgUpdate = FALSE; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_STOP) { - g_u4mDNSRXFilter &= ~(RX_MDNS_FILTER_START); - - u4rxfilter = prAdapter->u4OsPacketFilter; - fgUpdate = TRUE; - } - else if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_START) { - g_u4mDNSRXFilter |= (RX_MDNS_FILTER_START); - - u4rxfilter = prAdapter->u4OsPacketFilter; - if ((g_u4mDNSRXFilter & RX_MDNS_FILTER_IPV4) || - (g_u4mDNSRXFilter & RX_MDNS_FILTER_IPV6)) { - u4rxfilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - fgUpdate = TRUE; - } - else if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_ADD) { - if (ucOpt1 < 31) { - g_u4mDNSRXFilter |= (1<rQM; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = (QM_GET_TX_QUEUE_LEN(prAdapter, ucOpt1)) ; - g_au4SwCr[2] = prQM->au4MinReservedTcResource[ucOpt1] ; - g_au4SwCr[3] = prQM->au4CurrentTcResource[ucOpt1]; - g_au4SwCr[4] = prQM->au4GuaranteedTcResource[ucOpt1]; - break; - - case 1: - g_au4SwCr[1] = prQM->au4ForwardCount[ucOpt1]; - g_au4SwCr[2] = prQM->au4HeadStaRecIndex[ucOpt1]; - break; - - case 2: - g_au4SwCr[1] = prQM->arTxQueue[ucOpt1].u4NumElem; /* only one */ - - - break; - } - - } - case SWCTRL_TX_CTRL_INFO: - { - P_TX_CTRL_T prTxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = prAdapter->rTxCtrl.rTc.aucFreeBufferCount[ucOpt1]; - g_au4SwCr[2] = prAdapter->rTxCtrl.rTc.aucMaxNumOfBuffer[ucOpt1]; - break; - } - - } - break; - case SWCTRL_DUMP_QUEUE: - dumpQueue(prAdapter); - - break; -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i])); - } - break; - - case SWCTRL_QM_DBG_CNT: - g_au4SwCr[1] = prAdapter->rQM.au4QmDebugCounters[ucOpt0]; - break; -#endif - case SWCTRL_DUMP_BSS: - { - dumpBss(prAdapter, &(prAdapter->rWifiVar.arBssInfo[ucOpt0])) ; - } - break; - - default: - break; - } - - } -} - - -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("swCtrlCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - //prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - prStaRec = &prAdapter->arStaRec[ucOpt0]; - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - } - else { - /* Read */ - switch(ucIndex) { - case SWCTRL_STA_QUE_INFO: - { - g_au4SwCr[1] = prStaRec->arTxQueue[ucOpt1].u4NumElem; - } - break; - case SWCTRL_STA_INFO: - switch(ucOpt1) { - case 0: - g_au4SwCr[1] = prStaRec->fgIsInPS; - break; - } - - break; - - case SWCTRL_DUMP_STA: - { - dumpSTA(prAdapter, prStaRec); - } - break; - - default: - - break; - } - } - - -} - -#if TEST_PS - -VOID -testPsSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN UINT_8 ucNetTypeIndex, - IN BOOLEAN fgBMC, - IN BOOLEAN fgIsBurstEnd, - IN BOOLEAN ucPacketType, - IN BOOLEAN ucPsSessionID, - IN BOOLEAN fgSetEOSP - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - - - DEBUGFUNC("testPsSendQoSNullFrame"); - DBGLOG(SW4, LOUD, ("\n")); - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SW4, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return ; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - fgSetEOSP); - - - prMsduInfo->eSrc = TX_PACKET_MGMT; - //prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucPacketType = ucPacketType; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - prMsduInfo->fgIsBurstEnd = fgIsBurstEnd; - prMsduInfo->ucUserPriority = ucUP; - prMsduInfo->ucPsSessionID = ucPsSessionID /* 0~7 Test 7 means NOACK*/; - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)( (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD) ); - - if(fgBMC) { - prQoSNullFrame->aucAddr1[0] = 0xfd; - } - else { - prQoSNullFrame->aucAddr1[5] = 0xdd; - } - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - - -VOID -testPsSetupBss( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetworkTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; - - DEBUGFUNC("testPsSetupBss()"); - DBGLOG(SW4, INFO, ("index %d\n", ucNetworkTypeIndex)); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetworkTypeIndex]); - - //4 <1.2> Initiate PWR STATE - //SET_NET_PWR_STATE_IDLE(prAdapter, ucNetworkTypeIndex); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, ucNetworkTypeIndex); - - prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eCurrentOPMode = OP_MODE_ACCESS_POINT; - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->ucNetTypeIndex = (ucNetworkTypeIndex); - prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->u2BSSBasicRateSet = RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->fgIsQBSS = TRUE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = 100; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - - prBssInfo->ucBeaconTimeoutCount = 0; - - - bssInitForAP (prAdapter,prBssInfo, TRUE); - - COPY_MAC_ADDR(prBssInfo->aucBSSID, _aucZeroMacAddr); - LINK_INITIALIZE(&prBssInfo->rStaRecOfClientList); - prBssInfo->fgIsBeaconActivated = TRUE; - prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; - - - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 1; - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - - //prBssInfo->fgErpProtectMode = eErpProectMode; - //prBssInfo->eHtProtectMode = eHtProtectMode; - //prBssInfo->eGfOperationMode = eGfOperationMode; - - - //4 <4> Allocate MSDU_INFO_T for Beacon - prBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prBssInfo->prBeacon) { - prBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prBssInfo->prBeacon->ucNetworkType = ucNetworkTypeIndex; - } - else { - DBGLOG(SW4, INFO, ("prBeacon allocation fail\n")); - } - -#if 0 - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - -#if 0 - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prBssInfo->arACQueParms[eAci].fgIsACMSet = FALSE; - prBssInfo->arACQueParms[eAci].u2Aifsn = (UINT_16) eAci; - prBssInfo->arACQueParms[eAci].u2CWmin = 7; - prBssInfo->arACQueParms[eAci].u2CWmax = 31; - prBssInfo->arACQueParms[eAci].u2TxopLimit = eAci+1; - DBGLOG(SW4, INFO, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prBssInfo->arACQueParms[eAci].fgIsACMSet , - prBssInfo->arACQueParms[eAci].u2Aifsn, - prBssInfo->arACQueParms[eAci].u2CWmin, - prBssInfo->arACQueParms[eAci].u2CWmax, - prBssInfo->arACQueParms[eAci].u2TxopLimit)); - - } -#endif - - - DBGLOG(SW4, INFO, ("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - prBssInfo->rPmProfSetupInfo.ucUapsdSp)); - - return; -} - - - - -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, LOUD, ("Read %u Index %u\n",ucRead,ucIndex)); - - prStaRec = cnmGetStaRecByIndex (prAdapter, 0); - - if(ucIndex>=TEST_PS_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_PS_SETUP_BSS: - testPsSetupBss(prAdapter, ucOpt0) ; - break; - - case TEST_PS_ENABLE_BEACON: - break; - - case TEST_PS_TRIGGER_BMC: - //txmForwardQueuedBmcPkts (ucOpt0); - break; - case TEST_PS_SEND_NULL: - { - - testPsSendQoSNullFrame (prAdapter,prStaRec, - (UINT_8)(g_au4SwCr[1] & 0xFF), /* UP */ - ucOpt0, - (BOOLEAN)((g_au4SwCr[1] >>8)& 0xFF), /* BMC*/ - (BOOLEAN)((g_au4SwCr[1] >>16)& 0xFF), /* BurstEnd*/ - (BOOLEAN)((g_au4SwCr[1] >>24)& 0xFF), /* Packet type*/ - (UINT_8)((g_au4SwCr[2] )& 0xFF), /* PS sesson ID 7: NOACK */ - FALSE /* EOSP */ - ); - } - break; - case TEST_PS_BUFFER_BMC: - //g_aprBssInfo[ucOpt0]->fgApToBufferBMC = (g_au4SwCr[1] & 0xFF); - break; - case TEST_PS_UPDATE_BEACON: - bssUpdateBeaconContent(prAdapter, ucOpt0 /*networktype*/ ); - break; - - default: - break; - } - } - else { - switch(ucIndex) { - - case TEST_PS_MAGIC: - g_au4SwCr[1] = 0x88660011 ; - break; - - } - } -} - -#endif //TEST_PS - -#if TEST_PS - -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - - switch(ucIndex) { - case TEST_PS_STA_PS: - prStaRec->fgIsInPS = (BOOLEAN) (g_au4SwCr[1] & 0x1); - prStaRec->fgIsQoS = (BOOLEAN) (g_au4SwCr[1] >>8 & 0xFF); - prStaRec->fgIsUapsdSupported = (BOOLEAN) (g_au4SwCr[1] >>16 & 0xFF); - prStaRec->ucBmpDeliveryAC = (BOOLEAN) (g_au4SwCr[1] >>24 & 0xFF); - break; - - } - - } - else { - /* Read */ - switch(ucIndex) { - default: - break; - } - } - - -} - -#endif //TEST_PS - -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) -VOID testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testWNMCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, INFO, ("Read %u Index %u\n",ucRead,ucIndex)); - - if(ucIndex>=TEST_WNM_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_WNM_TIMING_MEAS: - wnmTimingMeasUnitTest1(prAdapter, ucOpt0) ; - break; - - default: - break; - } - } -} -#endif //TEST_WNM -#endif //CFG_SUPPORT_802_11V - -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - /* According other register STAIDX */ - UINT_8 ucOffset; - ucOffset = (u2Addr>>2) & 0x3F; - - if(ucOffset>= SWCR_CR_NUM) return; - - if(ucRead==SWCR_WRITE) { - g_au4SwCr[ucOffset] = *pu4Data; - if(ucOffset==0x0) { - /* Commmand [31:24]: Category */ - /* Commmand [23:23]: 1(W) 0(R) */ - /* Commmand [22:16]: Index */ - /* Commmand [15:08]: Option0 */ - /* Commmand [07:00]: Option1 */ - UINT_8 ucCate; - UINT_32 u4Cmd; - u4Cmd = g_au4SwCr[0]; - ucCate = (UINT_8)(u4Cmd >> 24) ; - if(ucCate < sizeof(g_arSwCtrlCmd)/sizeof(g_arSwCtrlCmd[0])) { - if(g_arSwCtrlCmd[ucCate]!=NULL) { - g_arSwCtrlCmd[ucCate](prAdapter, ucCate, (UINT_8)(u4Cmd>>16 & 0xFF),(UINT_8)((u4Cmd>>8) & 0xFF), (UINT_8)(u4Cmd&0xFF)); - } - } - } - } - else { - *pu4Data = g_au4SwCr[ucOffset]; - } -} - -VOID swCrReadWriteCmd(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - UINT_8 ucMod; - - ucMod = u2Addr >>8; - /* Address [15:8] MOD ID */ - /* Address [7:0] OFFSET */ - - DEBUGFUNC("swCrReadWriteCmd"); - DBGLOG(SW4, INFO, ("%u addr 0x%x data 0x%x\n",ucRead,u2Addr,*pu4Data)); - - if(ucMod < (sizeof(g_arSwCrModHandle)/sizeof(g_arSwCrModHandle[0])) ) { - - if(g_arSwCrModHandle[ucMod]!=NULL) { - g_arSwCrModHandle[ucMod](prAdapter, ucRead, u2Addr, pu4Data); - } - } /* ucMod */ -} - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType) -{ - g_u4SwcrDebugFrameDumpType = u4DumpType; - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = u4DumpType; -} - -VOID swCrDebugInit(P_ADAPTER_T prAdapter) -{ - // frame dump - if (g_u4SwcrDebugFrameDumpType) { - swCrFrameCheckEnable(prAdapter, g_u4SwcrDebugFrameDumpType); - } - - // debug counter - g_fgSwcrDebugTimer = FALSE; - - cnmTimerInitTimer(prAdapter, - &g_rSwcrDebugTimer, - (PFN_MGMT_TIMEOUT_FUNC)swCrDebugCheckTimeout, - (UINT_32) NULL); - - if (g_u4SwcrDebugCheckTimeout) { - swCrDebugCheckEnable(prAdapter, TRUE, g_ucSwcrDebugCheckType, g_u4SwcrDebugCheckTimeout); - } -} - -VOID swCrDebugUninit(P_ADAPTER_T prAdapter) -{ - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - - g_fgSwcrDebugTimer = FALSE; -} - -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout) -{ - if (fgIsEnable) { - g_ucSwcrDebugCheckType = ucType; - g_u4SwcrDebugCheckTimeout = u4Timeout; - if (g_fgSwcrDebugTimer == FALSE) { - swCrDebugCheckTimeout(prAdapter, 0); - } - } - else { - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - g_u4SwcrDebugCheckTimeout = 0; - } - - g_fgSwcrDebugTimer = fgIsEnable; -} - -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - // dump counters - if (prCmdSwCtrl) { - if (prCmdSwCtrl->u4Data == SWCR_DBG_TYPE_ALL) { - - // TX Counter from fw - DBGLOG(SW4, INFO, ("TX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_BCN_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_FAILED_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_RETRY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_MGNT_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_ERROR_CNT])); -#if 1 - // TX Counter from drv - DBGLOG(SW4, INFO, ("TX1\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_BSS_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_STA_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_FORWARD_OVERFLOW_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_AP_BORADCAST_DROP))); -#endif - - // RX Counter - DBGLOG(SW4, INFO, ("RX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DUP_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FIFOFULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_PFDROP_CNT])); - - DBGLOG(SW4, INFO, ("RX1\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)RX_GET_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT))); - - DBGLOG(SW4, INFO, ("PWR\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PS_POLL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_IND_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE1], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF1])); - - DBGLOG(SW4, INFO, ("ARM\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RATE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_BWGI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ENABLE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ROAM_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_INT_CNT])); - - DBGLOG(SW4, INFO, ("BB\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_MDRDY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SFDERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SIGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT])); - - } - } - - // start the next check - if (g_u4SwcrDebugCheckTimeout) { - cnmTimerStartTimer(prAdapter, &g_rSwcrDebugTimer, g_u4SwcrDebugCheckTimeout * MSEC_PER_SEC); - } -} - -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param) -{ - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rStatus; - - rCmdSwCtrl.u4Id = (0xb000<<16) + g_ucSwcrDebugCheckType; - rCmdSwCtrl.u4Data = 0; - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SW_DBG_CTRL, /* ucCID */ - FALSE, /* fgSetQuery */ - TRUE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - swCrDebugQuery, /* pfCmdDoneHandler */ - swCrDebugQueryTimeout, /* pfCmdTimeoutHandler */ - sizeof(CMD_SW_DBG_CTRL_T), /* u4SetQueryInfoLen */ - (PUINT_8)&rCmdSwCtrl, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} - -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, (P_CMD_SW_DBG_CTRL_T)(pucEventBuf)); -} - -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, NULL); -} - -#endif /* CFG_SUPPORT_SWCR */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/wapi.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/wapi.c deleted file mode 100755 index 4d2337851489..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/wapi.c +++ /dev/null @@ -1,522 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/wapi.c#1 $ -*/ - -/*! \file "wapi.c" - \brief This file including the WAPI related function. - - This file provided the macros and functions library support the wapi ie parsing, - cipher and AKM check to help the AP seleced deciding. -*/ - - - -/* -** $Log: wapi.c $ -** -** 10 24 2012 wh.su -** [ALPS00376392] [klocwork 9.1] in wapi.c, line 344 -** Use MAX_NUM_SUPPORTED_WAPI_AKM_SUITESfor avoid Klocwork warning. -** -** 10 24 2012 wh.su -** [ALPS00376391] [klocwork 9.1] in wapi.c, line 311 -** Use the MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES for avoid Klccwork waring. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * fixed the network type - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 20 2010 wh.su - * - * . - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to check and update the default wapi tx - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the generate wapi ie function, and replace the tabe by space - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wapiGenerateWAPIIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 68 :0x44 */ - if (/* prWlanInfo->fgWapiMode && */ prAdapter->prGlueInfo->u2WapiAssocInfoIESz) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWapiAssocInfoIEs, prAdapter->prGlueInfo->u2WapiAssocInfoIESz); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WapiAssocInfoIESz; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WAPI IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** WAPI information from the given WAPI IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWapiIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WAPI_CIPHER_SUITE_WPI; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - - DEBUGFUNC("wapiParseWapiIE"); - - ASSERT(prInfoElem); - ASSERT(prWapiInfo); - - /* Verify the length of the WAPI IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(SEC, TRACE, ("WAPI IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WAPI version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(SEC, TRACE, ("Unsupported WAPI IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u2AuthKeyMgtSuiteCount; - u4RemainWapiIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainWapiIeLen == 0) { - break; - } - - /* - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - GroupSuite : 4 - Cap : 2 */ - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - if (u4RemainWapiIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWapiIeLen < 4) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWapiIeLen -= 4; - - /* Parse the WAPI u2Capabilities field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in WAPI capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWapiIeLen -= 2; - - /* Todo:: BKID support */ - } while (FALSE); - - /* Save the WAPI information for the BSS. */ - - prWapiInfo->ucElemId = ELEM_ID_WAPI; - - prWapiInfo->u2Version = u2Version; - - prWapiInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(SEC, LOUD, ("WAPI: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES; - } - - prWapiInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWapiInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(SEC, LOUD,("WAPI: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WAPI: WPI. */ - prWapiInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWapiInfo->au4PairwiseKeyCipherSuite[0] = WAPI_CIPHER_SUITE_WPI; - - DBGLOG(SEC, LOUD, ("WAPI: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_WAPI_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_WAPI_AKM_SUITES; - } - - prWapiInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWapiInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WAPI. */ - prWapiInfo->u4AuthKeyMgtSuiteCount = 1; - prWapiInfo->au4AuthKeyMgtSuite[0] = WAPI_AKM_SUITE_802_1X; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prWapiInfo->u2WapiCap = u2Cap; - DBGLOG(SEC, LOUD, ("WAPI: cap: 0x%04x\n", prWapiInfo->u2WapiCap)); - - return TRUE; -} /* wapiParseWapiIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform WAPI policy selection for a given BSS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The WAPI policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The WAPI policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - UINT_32 i; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_WAPI_INFO_T prBssWapiInfo; - P_WLAN_INFO_T prWlanInfo; - - DEBUGFUNC("wapiPerformPolicySelection"); - - ASSERT(prBss); - - /* Notice!!!! WAPI AP not set the privacy bit for WAI and WAI-PSK at WZC configuration mode */ - prWlanInfo = &prAdapter->rWlanInfo; - - if (prBss->fgIEWAPI) { - prBssWapiInfo = &prBss->rIEWAPI; - } - else { - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode == FALSE) { - DBGLOG(SEC, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(SEC, TRACE, ("WAPI Information Element does not exist.\n")); - return FALSE; - } - } - - /* Select pairwise/group ciphers */ - for (i = 0; i < prBssWapiInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (prBssWapiInfo->au4PairwiseKeyCipherSuite[i] == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher) { - u4PairwiseCipher = prBssWapiInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (prBssWapiInfo->u4GroupKeyCipherSuite == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher) - u4GroupCipher = prBssWapiInfo->u4GroupKeyCipherSuite; - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(SEC, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ - for (i = 0; i < prBssWapiInfo->u4AuthKeyMgtSuiteCount; i++) { - if (prBssWapiInfo->au4AuthKeyMgtSuite[i] == prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite) { - u4AkmSuite = prBssWapiInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(SEC, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(SEC, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(SEC, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - - return TRUE; -} /* wapiPerformPolicySelection */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is use for wapi mode, to update the current wpi tx idx ? 0 :1 . -* -* \param[in] prStaRec Pointer to the Sta record -* \param[out] ucWlanIdx The Rx status->wlanidx field -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiUpdateTxKeyIdx ( - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucWlanIdx - ) -{ - UINT_8 ucKeyId; - - if ((ucWlanIdx & BITS(0, 3)) == CIPHER_SUITE_WPI) { - - ucKeyId = ((ucWlanIdx & BITS(4, 5)) >> 4); - - if (ucKeyId != g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey) { - DBGLOG(RSN, STATE, ("Change wapi key index from %d->%d\n", g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey, ucKeyId)); - g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey = ucKeyId; - - prStaRec->ucWTEntry = - (ucKeyId == WTBL_AIS_BSSID_WAPI_IDX_0) ? WTBL_AIS_BSSID_WAPI_IDX_0 : WTBL_AIS_BSSID_WAPI_IDX_1; - } - } -} -#endif -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/wnm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/wnm.c deleted file mode 100755 index c6871df87ce7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/mgmt/wnm.c +++ /dev/null @@ -1,349 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/mgmt/wnm.c#1 $ -*/ - -/*! \file "wnm.c" - \brief This file includes the 802.11v default vale and functions. -*/ - - - -/* -** $Log: wnm.c $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_802_11V - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define WNM_MAX_TOD_ERROR 0 -#define WNM_MAX_TOA_ERROR 0 -#define MICRO_TO_10NANO(x) ((x)*100) -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -static UINT_8 ucTimingMeasToken = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v wnm category action frame. -* -* -* \note -* Called by: Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prRxFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - if (prRxFrame->ucAction == ACTION_WNM_TIMING_MEASUREMENT_REQUEST) { - wnmTimingMeasRequest(prAdapter, prSwRfb); - return; - } -#endif - - DBGLOG(WNM, TRACE, ("Unsupport WNM action frame: %d\n", prRxFrame->ucAction)); -} - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to report timing measurement data. -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("wnmReportTimingMeas: u4ToD %x u4ToA %x", u4ToD, u4ToA)); - - if (!prStaRec->rWNMTimingMsmt.ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.u4ToD = MICRO_TO_10NANO(u4ToD); - prStaRec->rWNMTimingMsmt.u4ToA = MICRO_TO_10NANO(u4ToA); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(TimingMeasurement) Event. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Timing Measurement frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(WNM, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - DBGLOG(WNM, TRACE, ("wnmRunEventTimgingMeasTxDone: ucDialog %d ucFollowUp %d u4ToD %x u4ToA %x", - prStaRec->rWNMTimingMsmt.ucDialogToken, - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken, - prStaRec->rWNMTimingMsmt.u4ToD, - prStaRec->rWNMTimingMsmt.u4ToA)); - - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, NULL); - - return WLAN_STATUS_SUCCESS; - -} /* end of wnmRunEventTimgingMeasTxDone() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Timing Measurement frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME prTxFrame; - UINT_16 u2PayloadLen; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prStaRec->aucMacAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_UNPROTECTED_WNM_ACTION; - prTxFrame->ucAction = ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT; - - //3 Compose the frame body's frame. - prTxFrame->ucDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prTxFrame->ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken; - prTxFrame->u4ToD = prStaRec->rWNMTimingMsmt.u4ToD; - prTxFrame->u4ToA = prStaRec->rWNMTimingMsmt.u4ToA; - prTxFrame->ucMaxToDErr = WNM_MAX_TOD_ERROR; - prTxFrame->ucMaxToAErr = WNM_MAX_TOA_ERROR; - - u2PayloadLen = 2 + ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - DBGLOG(WNM, TRACE, ("wnmComposeTimingMeasFrame: ucDialogToken %d ucFollowUpDialogToken %d u4ToD %x u4ToA %x\n", - prTxFrame->ucDialogToken, prTxFrame->ucFollowUpDialogToken, - prTxFrame->u4ToD, prTxFrame->u4ToA)); - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return; - -} /* end of wnmComposeTimingMeasFrame() */ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v timing measurement request. -* -* -* \note -* Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_WNM_TIMING_MEAS_REQ_FRAME prRxFrame = NULL; - P_STA_RECORD_T prStaRec; - - prRxFrame = (P_ACTION_WNM_TIMING_MEAS_REQ_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("IEEE 802.11: Received Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - // reset timing msmt - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = prRxFrame->ucTrigger; - if (!prRxFrame->ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, INFO, ("IEEE 802.11v: Test Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = 1; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} -#endif - -#endif /* CFG_SUPPORT_802_11V_TIMING_MEASUREMENT */ - -#endif /* CFG_SUPPORT_802_11V */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/cmd_buf.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/cmd_buf.c deleted file mode 100755 index 62653abf608a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/cmd_buf.c +++ /dev/null @@ -1,218 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/cmd_buf.c#1 $ -*/ - -/*! \file "cmd_buf.c" - \brief This file contain the management function of internal Command Buffer - for CMD_INFO_T. - - We'll convert the OID into Command Packet and then send to FW. Thus we need - to copy the OID information to Command Buffer for following reasons. - 1. The data structure of OID information may not equal to the data structure of - Command, we cannot use the OID buffer directly. - 2. If the Command was not generated by driver we also need a place to store the - information. - 3. Because the CMD is NOT FIFO when doing memory allocation (CMD will be generated - from OID or interrupt handler), thus we'll use the Block style of Memory Allocation - here. -*/ - - - -/* -** $Log: cmd_buf.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-13 21:59:08 GMT mtk01084 -** remove un-neceasary spaces -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-05-20 12:24:26 GMT mtk01461 -** Increase CMD Buffer - HIF_RX_HW_APPENDED_LEN when doing CMD_INFO_T allocation -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 09:41:08 GMT mtk01461 -** Add init of Driver Domain MCR flag and fix lint MTK WARN -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-17 19:51:45 GMT mtk01461 -** allocation function of CMD_INFO_T -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initial the MGMT memory pool for CMD Packet. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - UINT_32 i; - - ASSERT(prAdapter); - - QUEUE_INITIALIZE(&prAdapter->rFreeCmdList); - - for (i = 0; i < CFG_TX_MAX_CMD_PKT_NUM; i++) { - prCmdInfo = &prAdapter->arHifCmdDesc[i]; - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - } - -} /* end of cmdBufInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate CMD_INFO_T from a free list and MGMT memory pool. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] u4Length Length of the frame buffer to allocate. -* -* @retval NULL Pointer to the valid CMD Packet handler -* @retval !NULL Fail to allocat CMD Packet -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ) -{ - P_CMD_INFO_T prCmdInfo; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufAllocateCmdInfo"); - - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - /* Setup initial value in CMD_INFO_T */ - /* Start address of allocated memory */ - prCmdInfo->pucInfoBuffer = - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - - if (prCmdInfo->pucInfoBuffer == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - prCmdInfo = NULL; - } - else { - prCmdInfo->u2InfoBufLen = 0; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - } - } - - return prCmdInfo; - -} /* end of cmdBufAllocateCmdInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to free the CMD Packet to the MGMT memory pool. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo CMD Packet handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufFreeCmdInfo"); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo) { - if (prCmdInfo->pucInfoBuffer) { - cnmMemFree(prAdapter, prCmdInfo->pucInfoBuffer); - prCmdInfo->pucInfoBuffer = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - } - - return; - -} /* end of cmdBufFreeCmdPacket() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic.c deleted file mode 100755 index 2359fd66c8cf..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic.c +++ /dev/null @@ -1,4621 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic.c#2 $ -*/ - -/*! \file nic.c - \brief Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - - - -/* -** $Log: nic.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 02 2012 terry.wu - * NULL - * Set the default value of AP StaRec index to "STA_REC_INDEX_NOT_FOUND" in update firmware bss command. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 04 2011 cp.wu - * [WCXRP00001079] [MT5931][Driver] Release pending MMPDU only when BSS is being deactivated - * pre-check for NULL before calling MMPDU free function - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 11 2011 terry.wu - * NULL - * Rewrite Assert Dump Function for Portability. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 05 12 2011 puff.wen - * NULL - * FW Assert information dump to driver - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 cp.wu - * [WCXRP00000651] [MT6620 Wi-Fi][Driver] Refine RSSI buffering mechanism - * ROLLBACK due to the special design is to workaround incorrect initial RCPI value coming from firmware domain. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 12 2011 wh.su - * NULL - * enable the p2p check the cipher to set the bssInfo auth mode. - * - * 04 12 2011 wh.su - * NULL - * prepare the code for sync the auth mode and encryption status for P2P and BOW. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 10 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * Fix compiler issue. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * . - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * implementation of internal error handling of nicAllocateAdapterMemory. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 08 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Use kalPrint to print firmware assert info. - * - * 02 01 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * . - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 31 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Print firmware ASSERT info at Android kernel log, driver side - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000372] [MT6620 Wi-Fi][Driver] Check bus access failure inside nicProcessIST() - * check bus error and/or card removal when retrieving interrupt status from HAL - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 02 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add more control value but dont use it now. - * - * 11 30 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add auto rate check window in registry - * - * 11 10 2010 eddie.chen - * [WCXRP00000156] [MT6620][FW] Change Auto rate window to 64 and add throughput swcr - * Use autorate parameter 1 as phy rate mask. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 18 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * reset ptrs when IEs are going to be dropped - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 26 2010 yuche.tsai - * NULL - * Fix someones coding error while enable WIFI_DIRECT. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 yuche.tsai - * NULL - * Add state change indication. - * - * 08 16 2010 yuche.tsai - * NULL - * Add support for P2P BSS update info. - * - * 08 12 2010 cp.wu - * NULL - * [removing debugging] not to dump beacon content. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * FIX: structure of CMD_SET_BSS_INFO has been changed but no follow-ups are done. - * - * 07 22 2010 george.huang - * - * . - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill fgIsUapsdConnection when indicating BSS-CREATE with AIS-STA mode. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * correct nicProcessIST_impl() for interrupt status brought up by RX enhanced response - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-16 18:03:43 GMT mtk02752 -** handling enhanced response which fields are fetched at different moments -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-15 17:00:29 GMT mtk02752 -** if RX enhanced response is used, D2H interrupt status should be coming from buffered result as well -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-15 12:01:55 GMT mtk02752 -** if TX_DONE bit is not set but WTSR0/WTSR1 is non-zero, then set TX_DONE bit due to time latency of interrupt status enhanced response -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:52:52 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-24 20:51:01 GMT mtk02752 -** integrate with SD1 by invoking qmHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-16 17:32:33 GMT mtk02752 -** prepare code for invoking rxHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:08 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-09 22:56:41 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:20 GMT mtk01084 -** prevent warning -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:54:57 GMT mtk01084 -** init HIF -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:30 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:12 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-09-09 17:26:15 GMT mtk01084 -** modify for CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-19 10:55:22 GMT mtk01461 -** Unmask the unused HISR -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-18 15:59:13 GMT mtk01084 -** remove debug purpose code -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 14:05:02 GMT mtk01084 -** update for WIFI ownback part on initial -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-04 21:32:57 GMT mtk01084 -** add temporarily code to set driver own on adapter initialization -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:35:41 GMT mtk01461 -** Add init of TX aggregation and fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-24 21:12:10 GMT mtk01104 -** Add function nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:43:31 GMT mtk01461 -** Revise for MTK coding style - nicInitializeAdapter() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:52:47 GMT mtk01461 -** Update allocate Adapter Memory for MGMT Memory pool -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:57:08 GMT mtk01461 -** Refine the order of release memory from pucRxCoalescingBufCached -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-19 18:32:57 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:00:14 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:27 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:25:59 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const UINT_8 aucPhyCfg2PhyTypeSet[PHY_CONFIG_NUM] = -{ - PHY_TYPE_SET_802_11ABG, /* PHY_CONFIG_802_11ABG */ - PHY_TYPE_SET_802_11BG, /* PHY_CONFIG_802_11BG */ - PHY_TYPE_SET_802_11G, /* PHY_CONFIG_802_11G */ - PHY_TYPE_SET_802_11A, /* PHY_CONFIG_802_11A */ - PHY_TYPE_SET_802_11B, /* PHY_CONFIG_802_11B */ - PHY_TYPE_SET_802_11ABGN, /* PHY_CONFIG_802_11ABGN */ - PHY_TYPE_SET_802_11BGN, /* PHY_CONFIG_802_11BGN */ - PHY_TYPE_SET_802_11AN, /* PHY_CONFIG_802_11AN */ - PHY_TYPE_SET_802_11GN /* PHY_CONFIG_802_11GN */ -}; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - #define REQ_GATING_ENABLE_H2D_INT BIT(31) - #define REQ_GATING_DISABLE_H2D_INT BIT(30) - #define ACK_GATING_ENABLE_D2H_INT BIT(31) - #define ACK_GATING_DISABLE_D2H_INT BIT(30) - - #define GATING_CONTROL_POLL_LIMIT 64 -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -static INT_EVENT_MAP_T arIntEventMapTable[] = { - {WHISR_ABNORMAL_INT, INT_EVENT_ABNORMAL}, - {WHISR_D2H_SW_INT, INT_EVENT_SW_INT}, - {WHISR_TX_DONE_INT, INT_EVENT_TX}, - {(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT), INT_EVENT_RX} -}; - -static const UINT_8 ucIntEventMapSize = (sizeof(arIntEventMapTable) / sizeof(INT_EVENT_MAP_T)); - -static IST_EVENT_FUNCTION apfnEventFuncTable[] = { - nicProcessAbnormalInterrupt, /*!< INT_EVENT_ABNORMAL */ - nicProcessSoftwareInterrupt, /*!< INT_EVENT_SW_INT */ - nicProcessTxInterrupt, /*!< INT_EVENT_TX */ - nicProcessRxInterrupt, /*!< INT_EVENT_RX */ -}; -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*! This macro is used to reduce coding errors inside nicAllocateAdapterMemory() - * and also enhance the readability. - */ -#define LOCAL_NIC_ALLOCATE_MEMORY(pucMem, u4Size, eMemType, pucComment) \ - { \ - DBGLOG(INIT, INFO, ("Allocating %ld bytes for %s.\n", u4Size, pucComment)); \ - if ((pucMem = (PUINT_8)kalMemAlloc(u4Size, eMemType)) == (PUINT_8)NULL) { \ - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for %s.\n", u4Size, pucComment)); \ - break; \ - } \ - ASSERT(((UINT_32)pucMem % 4) == 0); \ - DBGLOG(INIT, INFO, ("Virtual Address = %08lx for %s.\n", (UINT_32)pucMem, pucComment)); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for the allocation of the data structures -* inside the Adapter structure, include: -* 1. SW_RFB_Ts -* 2. Common coalescing buffer for TX PATH. -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @retval WLAN_STATUS_SUCCESS - Has enough memory. -* @retval WLAN_STATUS_RESOURCES - Memory is not enough. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS status = WLAN_STATUS_RESOURCES; - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicAllocateAdapterMemory"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - - do { - //4 <0> Reset all Memory Handler - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount = 0; - prAdapter->u4MemAllocDynamicCount = 0; - #endif - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - prRxCtrl->pucRxCached = (PUINT_8)NULL; - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - - - //4 <1> Memory for Management Memory Pool and CMD_INFO_T - /* Allocate memory for the CMD_INFO_T and its MGMT memory pool. */ - prAdapter->u4MgtBufCachedSize = MGT_BUFFER_SIZE; - - LOCAL_NIC_ALLOCATE_MEMORY(prAdapter->pucMgtBufCached, - prAdapter->u4MgtBufCachedSize, - VIR_MEM_TYPE, - "COMMON MGMT MEMORY POOL"); - - //4 <2> Memory for RX Descriptor - /* Initialize the number of rx buffers we will have in our queue. */ - /* We may setup ucRxPacketDescriptors by GLUE Layer, and using - * this variable directly. - */ - /* Allocate memory for the SW receive structures. */ - prRxCtrl->u4RxCachedSize = CFG_RX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(SW_RFB_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prRxCtrl->pucRxCached, - prRxCtrl->u4RxCachedSize, - VIR_MEM_TYPE, - "SW_RFB_T"); - - //4 <3> Memory for TX DEscriptor - prTxCtrl->u4TxCachedSize = CFG_TX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(MSDU_INFO_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prTxCtrl->pucTxCached, - prTxCtrl->u4TxCachedSize, - VIR_MEM_TYPE, - "MSDU_INFO_T"); - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - - /* Allocate memory for the common coalescing buffer. */ - prAdapter->u4CoalescingBufCachedSize = CFG_COALESCING_BUFFER_SIZE > CFG_RX_COALESCING_BUFFER_SIZE ? - CFG_COALESCING_BUFFER_SIZE : CFG_RX_COALESCING_BUFFER_SIZE; - - prAdapter->pucCoalescingBufCached = - kalAllocateIOBuffer(prAdapter->u4CoalescingBufCachedSize); - - if(prAdapter->pucCoalescingBufCached == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for coalescing buffer.\n", prAdapter->u4CoalescingBufCachedSize)); - break; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <5> Memory for enhanced interrupt response - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T) - kalAllocateIOBuffer(sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(prAdapter->prSDIOCtrl == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for interrupt response.\n", sizeof(ENHANCE_MODE_DATA_STRUCT_T))); - break; - } - - status = WLAN_STATUS_SUCCESS; - - } - while(FALSE); - - if(status != WLAN_STATUS_SUCCESS) { - nicReleaseAdapterMemory(prAdapter); - } - - return status; - -} /* end of nicAllocateAdapterMemory() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for releasing the allocated memory by -* nicAllocatedAdapterMemory(). -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <5> Memory for enhanced interrupt response - if (prAdapter->prSDIOCtrl) { - kalReleaseIOBuffer((PVOID)prAdapter->prSDIOCtrl, sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - } - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - if (prAdapter->pucCoalescingBufCached) { - kalReleaseIOBuffer((PVOID)prAdapter->pucCoalescingBufCached, prAdapter->u4CoalescingBufCachedSize); - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <3> Memory for TX Descriptor - if (prTxCtrl->pucTxCached) { - kalMemFree((PVOID)prTxCtrl->pucTxCached, - VIR_MEM_TYPE, - prTxCtrl->u4TxCachedSize); - prTxCtrl->pucTxCached = (PUINT_8)NULL; - } - - //4 <2> Memory for RX Descriptor - if (prRxCtrl->pucRxCached) { - kalMemFree((PVOID)prRxCtrl->pucRxCached, - VIR_MEM_TYPE, - prRxCtrl->u4RxCachedSize); - prRxCtrl->pucRxCached = (PUINT_8)NULL; - } - - //4 <1> Memory for Management Memory Pool - if (prAdapter->pucMgtBufCached) { - kalMemFree((PVOID)prAdapter->pucMgtBufCached, - VIR_MEM_TYPE, - prAdapter->u4MgtBufCachedSize); - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - } - -#if CFG_DBG_MGT_BUF - /* Check if all allocated memories are free */ - ASSERT(prAdapter->u4MemFreeDynamicCount == - prAdapter->u4MemAllocDynamicCount); -#endif - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief disable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - prAdapter->fgIsIntEnable = FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief enable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgIsIntEnableCache; - - - ASSERT(prAdapter); - fgIsIntEnableCache = prAdapter->fgIsIntEnable; - - prAdapter->fgIsIntEnable = TRUE; // NOTE(Kevin): It must be placed before MCR GINT write. - - /* If need enable INT and also set LPOwn at the same time. */ - if (prAdapter->fgIsIntEnableWithLPOwnSet) { - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; /* NOTE(Kevin): It's better to place it - * before MCR GINT write. - */ - /* If INT was enabled, only set LPOwn */ - if (fgIsIntEnableCache) { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - prAdapter->fgIsFwOwn = TRUE; - } - /* If INT was not enabled, enable it and also set LPOwn now */ - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET | - WHLPCR_INT_EN_SET); - prAdapter->fgIsFwOwn = TRUE; - } - } - /* If INT was not enabled, enable it now */ - else if (!fgIsIntEnableCache) { - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_SET); - } - - return; -} /* end of nicEnableInterrupt() */ - - -#if CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief For SDIO enhance mode, set the max rx len and tx status -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value = 0; - - ASSERT(prAdapter); - - //4 <1> Check STATUS Buffer is DW alignment. - ASSERT( IS_ALIGN_4( (UINT_32)&prAdapter->prSDIOCtrl->u4WHISR ) ); - - //4 <2> Setup STATUS count. - { - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value); - - //4 <2.1> Setup the number of maximum RX length to be report - u4Value &= ~(WHCR_MAX_HIF_RX_LEN_NUM); - u4Value |= ((SDIO_MAXIMUM_RX_LEN_NUM << WHCR_OFFSET_MAX_HIF_RX_LEN_NUM)); - - //4 <2.2> Setup RX enhancement mode -#if CFG_SDIO_RX_ENHANCE - u4Value |= WHCR_RX_ENHANCE_MODE_EN; -#else - u4Value &= ~WHCR_RX_ENHANCE_MODE_EN; -#endif /* CFG_SDIO_RX_AGG */ - - HAL_MCR_WR(prAdapter, MCR_WHCR, u4Value); - } - - return; - -} /* end of nicSDIOInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read interrupt status from hardware -* -* @param prAdapter pointer to the Adapter handler -* @param the interrupts -* -* @return N/A -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - - DEBUGFUNC("nicSDIOReadIntStatus"); - - ASSERT(prAdapter); - ASSERT(pu4IntStatus); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - HAL_PORT_RD(prAdapter, - MCR_WHISR, - sizeof(ENHANCE_MODE_DATA_STRUCT_T), - (PUINT_8)prSDIOCtrl, - sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - *pu4IntStatus = 0; - return; - } - - /* workaround */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - *pu4IntStatus = prSDIOCtrl->u4WHISR; - - return; -} /* end of nicSDIOReadIntStatus() */ -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to read interrupt status and then invoking -* dispatching procedure for the appropriate functions -* corresponding to specific interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4IntStatus = 0; - UINT_32 i; - - DEBUGFUNC("nicProcessIST"); - //DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set nicProcessIST! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - for (i = 0; i < CFG_IST_LOOP_COUNT; i++) { - -#if CFG_SDIO_INTR_ENHANCE - nicSDIOReadIntStatus(prAdapter, &u4IntStatus); -#else - HAL_MCR_RD(prAdapter, MCR_WHISR, &u4IntStatus); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - //DBGLOG(INIT, TRACE, ("u4IntStatus: 0x%x\n", u4IntStatus)); - - if (u4IntStatus & ~(WHIER_DEFAULT | WHIER_FW_OWN_BACK_INT_EN)) { - DBGLOG(INTR, WARN, ("Un-handled HISR %#x, HISR = %#x (HIER:0x%x)\n", - (u4IntStatus & ~WHIER_DEFAULT), u4IntStatus, WHIER_DEFAULT)); - u4IntStatus &= WHIER_DEFAULT; - } - - nicProcessIST_impl(prAdapter, u4IntStatus); - - if(u4IntStatus == 0) { - if(i == 0) { - u4Status = WLAN_STATUS_NOT_INDICATING; - } - break; - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return u4Status; -} /* end of nicProcessIST() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to dispatch the appropriate functions for specific -* interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* u4IntStatus interrupt status bits -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ) -{ - UINT_32 u4IntCount = 0; - P_INT_EVENT_MAP_T prIntEventMap = NULL; - - ASSERT(prAdapter); - - prAdapter->u4IntStatus = u4IntStatus; - - /* Process each of the interrupt status consequently */ - prIntEventMap = &arIntEventMapTable[0]; - for (u4IntCount = 0; u4IntCount < ucIntEventMapSize; prIntEventMap++, u4IntCount++) { - if (prIntEventMap->u4Int & prAdapter->u4IntStatus) { - if(prIntEventMap->u4Event == INT_EVENT_RX && - prAdapter->fgIsEnterD3ReqIssued == TRUE) { - // ignore - } - else if (apfnEventFuncTable[prIntEventMap->u4Event] != NULL) { - apfnEventFuncTable[prIntEventMap->u4Event](prAdapter); - } - else { - DBGLOG(INTR , WARN, - ("Empty INTR handler! ISAR bit#: %ld, event:%d, func: 0x%x\n", - prIntEventMap->u4Int, prIntEventMap->u4Event, apfnEventFuncTable[prIntEventMap->u4Event])); - - ASSERT(0); // to trap any NULL interrupt handler - } - prAdapter->u4IntStatus &= ~prIntEventMap->u4Int; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of nicProcessIST_impl() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Verify the CHIP ID -* -* @param prAdapter a pointer to adapter private data structure. -* -* -* @retval TRUE CHIP ID is the same as the setting compiled -* @retval FALSE CHIP ID is different from the setting compiled -*/ -/*----------------------------------------------------------------------------*/ -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4CIR = 0; - - ASSERT(prAdapter); - - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4CIR ); - - DBGLOG(INIT, TRACE,("Chip ID: 0x%x\n", u4CIR & WCIR_CHIP_ID)); - DBGLOG(INIT, TRACE,("Revision ID: 0x%x\n", ((u4CIR & WCIR_REVISION_ID) >> 16))); - - if ((u4CIR & WCIR_CHIP_ID) != MTK_CHIP_REV) { - return FALSE; - } - - prAdapter->ucRevID = (UINT_8)(((u4CIR & WCIR_REVISION_ID) >> 16) & 0xF) ; - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the MCR to the appropriate init value, and verify the init -* value -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); - - //4 <0> Initial value -} - -VOID -nicHifInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); -#if 0 - /* reset event */ - nicPutMailbox(prAdapter, 0, 0x52455345); // RESE - nicPutMailbox(prAdapter, 1, 0x545F5746); // T_WF - nicSetSwIntr(prAdapter, BIT(16)); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the Adapter soft variable -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; - - do { - if (!nicVerifyChipID(prAdapter)) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> MCR init - nicMCRInit(prAdapter); - - #if CFG_SDIO_INTR_ENHANCE - nicSDIOInit(prAdapter); - #endif /* CFG_SDIO_INTR_ENHANCE */ - - HAL_MCR_WR(prAdapter, MCR_WHIER, WHIER_DEFAULT); - - - //4 <2> init FW HIF - nicHifInit(prAdapter); - } - while (FALSE); - - - return u4Status; -} - - -#if defined(_HIF_SPI) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Restore the SPI Mode Select to default mode, -* this is important while driver is unload, and this must be last mcr -* since the operation will let the hif use 8bit mode access -* -* \param[in] prAdapter a pointer to adapter private data structure. -* \param[in] eGPIO2_Mode GPIO2 operation mode -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -void -nicRestoreSpiDefMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_MCR_WR(prAdapter, MCR_WCSR, SPICSR_8BIT_MODE_DATA); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value; - - HAL_MCR_RD(prAdapter, MCR_WASR, &u4Value); - DBGLOG(REQ, WARN, ("MCR_WASR: 0x%x \n", u4Value)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessFwOwnBackInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - - return; -} /* end of nicProcessFwOwnBackInterrupt() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4IntrBits; - - ASSERT(prAdapter); - - u4IntrBits = prAdapter->u4IntStatus & BITS(8, 31); - - if((u4IntrBits & WHISR_D2H_SW_ASSERT_INFO_INT) != 0) { - nicPrintFirmwareAssertInfo(prAdapter); -#if CFG_CHIP_RESET_SUPPORT - glSendResetRequest(); -#endif - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - ASSERT((u4IntrBits & (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)) - != (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)); - - if(u4IntrBits & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - } - - if(u4IntrBits & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - - // Indicate Service Thread for TX - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } -#endif - - DBGLOG(REQ, WARN, ("u4IntrBits: 0x%x \n", u4IntrBits)); - - return; -} /* end of nicProcessSoftwareInterrupt() */ - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_WR(prAdapter, MCR_H2DSM0R, u4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_WR(prAdapter, MCR_H2DSM1R, u4Data); - } else { - ASSERT(0); - } -} - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_RD(prAdapter, MCR_D2HRM0R, pu4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_RD(prAdapter, MCR_D2HRM1R, pu4Data); - } else { - ASSERT(0); - } -} - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ) -{ - /* NOTE: - * SW interrup in HW bit 16 is mapping to SW bit 0 (shift 16bit in HW transparancy) - * SW interrupt valid from b0~b15 - */ - ASSERT((u4SwIntrBitmap & BITS(0, 15)) == 0); -// DBGLOG(INIT, TRACE, ("u4SwIntrBitmap: 0x%08x\n", u4SwIntrBitmap)); - - HAL_MCR_WR(prAdapter, MCR_WSICR, u4SwIntrBitmap); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rPendingCmdQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_CMD_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if(prCmdInfo->ucCmdSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - - prCmdInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - return prCmdInfo; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rTxCtrl.rTxMgmtTxingQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_MSDU_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if(prMsduInfo->ucTxSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - return prMsduInfo; -} - -P_MSDU_INFO_T -nicGetPendingStaMMPDU ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ) -{ - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_QUE_T prTxingQue = (P_QUE_T)NULL; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - do { - if (prAdapter == NULL) { - - ASSERT(FALSE); - break; - } - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if ((prMsduInfo->ucStaRecIndex == ucStaRecIdx) && (prMsduInfo->pfTxDoneHandler != NULL)) { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfo, - prMsduInfoListHead); - prMsduInfoListHead = prMsduInfo; - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - - } while (FALSE); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - - return prMsduInfoListHead; -} /* nicGetPendingStaMMPDU */ - - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfoListTail = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if((ENUM_NETWORK_TYPE_INDEX_T)(prMsduInfo->ucNetworkType) == eNetworkType) { - if(prMsduInfoListHead == NULL) { - prMsduInfoListHead = prMsduInfoListTail = prMsduInfo; - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, prMsduInfo); - prMsduInfoListTail = prMsduInfo; - } - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - /* free */ - if(prMsduInfoListHead) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - } - - return; - -} /* end of nicFreePendingTxMsduInfoByNetwork() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a CMD sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - prAdapter->ucCmdSeqNum++; - ucRetval = prAdapter->ucCmdSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - return ucRetval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a TX sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - prAdapter->ucTxSeqNum++; - ucRetval = prAdapter->ucTxSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - return ucRetval; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to handle -* media state change event -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ) -{ - P_GLUE_INFO_T prGlueInfo; - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - switch(eNetworkType) { - case NETWORK_TYPE_AIS_INDEX: - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - - /* reset buffered link quality information */ - prAdapter->fgIsLinkQualityValid = FALSE; - prAdapter->fgIsLinkRateValid = FALSE; - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - prAdapter->rWlanInfo.rCurrBssId.eOpMode - = (ENUM_PARAM_OP_MODE_T) prConnectionStatus->ucInfraMode; - - // always indicate to OS according to MSDN (re-association/roaming) - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - else { - /* connected -> connected : roaming ? */ - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_ROAM_OUT_FIND_BEST, - NULL, - 0); - } - } - break; - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - break; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - break; -#endif - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} /* nicMediaStateChange */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4ChannelNum -* -* @retval - Frequency in unit of KHz, 0 for invalid channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicChannelNum2Freq ( - UINT_32 u4ChannelNum - ) -{ - UINT_32 u4ChannelInMHz; - - if(u4ChannelNum >= 1 && u4ChannelNum <= 13) { - u4ChannelInMHz = 2412 + (u4ChannelNum - 1) * 5; - } - else if(u4ChannelNum == 14) { - u4ChannelInMHz = 2484; - } - else if(u4ChannelNum == 133) { - u4ChannelInMHz = 3665; // 802.11y - } - else if(u4ChannelNum == 137) { - u4ChannelInMHz = 3685; // 802.11y - } - else if(u4ChannelNum >= 34 && u4ChannelNum <= 165) { - u4ChannelInMHz = 5000 + u4ChannelNum * 5; - } - else if(u4ChannelNum >= 183 && u4ChannelNum <= 196) { - u4ChannelInMHz = 4000 + u4ChannelNum * 5; - } - else { - u4ChannelInMHz = 0; - } - - return 1000 * u4ChannelInMHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4FreqInKHz -* -* @retval - Frequency Number, 0 for invalid freqency -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicFreq2ChannelNum ( - UINT_32 u4FreqInKHz - ) -{ - switch(u4FreqInKHz) { - case 2412000: - return 1; - case 2417000: - return 2; - case 2422000: - return 3; - case 2427000: - return 4; - case 2432000: - return 5; - case 2437000: - return 6; - case 2442000: - return 7; - case 2447000: - return 8; - case 2452000: - return 9; - case 2457000: - return 10; - case 2462000: - return 11; - case 2467000: - return 12; - case 2472000: - return 13; - case 2484000: - return 14; - case 3665000: - return 133; // 802.11y - case 3685000: - return 137; // 802.11y - case 4915000: - return 183; - case 4920000: - return 184; - case 4925000: - return 185; - case 4930000: - return 186; - case 4935000: - return 187; - case 4940000: - return 188; - case 4945000: - return 189; - case 4960000: - return 192; - case 4980000: - return 196; - case 5170000: - return 34; - case 5180000: - return 36; - case 5190000: - return 38; - case 5200000: - return 40; - case 5210000: - return 42; - case 5220000: - return 44; - case 5230000: - return 46; - case 5240000: - return 48; - case 5250000: - return 50; - case 5260000: - return 52; - case 5270000: - return 54; - case 5280000: - return 56; - case 5290000: - return 58; - case 5300000: - return 60; - case 5320000: - return 64; - case 5500000: - return 100; - case 5520000: - return 104; - case 5540000: - return 108; - case 5560000: - return 112; - case 5580000: - return 116; - case 5600000: - return 120; - case 5620000: - return 124; - case 5640000: - return 128; - case 5660000: - return 132; - case 5680000: - return 136; - case 5700000: - return 140; - case 5745000: - return 149; - case 5765000: - return 153; - case 5785000: - return 157; - case 5805000: - return 161; - case 5825000: - return 165; - default: - return 0; - } -} - - -/* firmware command wrapper */ -/* NETWORK (WIFISYS) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to activate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 1; - - if (((UINT_8) eNetworkTypeIdx) < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]; - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to deactivate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 0; - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - nicFreePendingTxMsduInfoByNetwork(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - - return u4Status; -} - - -/* BSS-INFO */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to sync bss info with firmware -* when a new BSS has been connected or disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - P_BSS_INFO_T prBssInfo; - CMD_SET_BSS_INFO rCmdSetBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - kalMemZero(&rCmdSetBssInfo, sizeof(CMD_SET_BSS_INFO)); - - rCmdSetBssInfo.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdSetBssInfo.ucConnectionState = (UINT_8)prBssInfo->eConnectionState; - rCmdSetBssInfo.ucCurrentOPMode = (UINT_8)prBssInfo->eCurrentOPMode; - rCmdSetBssInfo.ucSSIDLen = (UINT_8)prBssInfo->ucSSIDLen; - kalMemCopy(rCmdSetBssInfo.aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - COPY_MAC_ADDR(rCmdSetBssInfo.aucBSSID, prBssInfo->aucBSSID); - rCmdSetBssInfo.ucIsQBSS = (UINT_8)prBssInfo->fgIsQBSS; - rCmdSetBssInfo.ucNonHTBasicPhyType = prBssInfo->ucNonHTBasicPhyType; - rCmdSetBssInfo.u2OperationalRateSet = prBssInfo->u2OperationalRateSet; - rCmdSetBssInfo.u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - rCmdSetBssInfo.ucPhyTypeSet = prBssInfo->ucPhyTypeSet; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(rCmdSetBssInfo.aucOwnMac, prBssInfo->aucOwnMacAddr); - } -#endif - - rlmFillSyncCmdParam(&rCmdSetBssInfo.rBssRlmParam, prBssInfo); - - rCmdSetBssInfo.fgWapiMode = (UINT_8)FALSE; - - if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - rCmdSetBssInfo.ucAuthMode = (UINT_8)prConnSettings->eAuthMode; - rCmdSetBssInfo.ucEncStatus = (UINT_8)prConnSettings->eEncStatus; - rCmdSetBssInfo.fgWapiMode = (UINT_8)prConnSettings->fgWapiMode; - } -#if CFG_ENABLE_BT_OVER_WIFI - else if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } -#endif - else { -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } - else { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_OPEN; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION_DISABLED; - } - /* Need the probe response to detect the PBC overlap */ - rCmdSetBssInfo.fgIsApMode = p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo); - } -#else - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; -#endif - } - - if(eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - - cnmAisInfraConnectNotify(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && - (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - (prBssInfo->prStaRecOfAP != NULL)) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - else if (eNetworkTypeIdx == NETWORK_TYPE_BOW_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_BOW && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - else { - rCmdSetBssInfo.ucStaRecIdxOfAP = STA_REC_INDEX_NOT_FOUND; - } - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BSS_INFO, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SET_BSS_INFO), - (PUINT_8)&rCmdSetBssInfo, - NULL, - 0); - - /* if BSS-INFO is going to be disconnected state, free all correlated station records */ - if(prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - /* clear client list */ - bssClearClientList(prAdapter, prBssInfo); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - } - - return u4Status; -} - - -/* BSS-INFO Indication (PM) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been created. (for AdHoc / P2P-GO) -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CREATED rCmdIndicatePmBssCreated; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssCreated.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssCreated.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssCreated.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssCreated.u2AtimWindow = prBssInfo->u2ATIMWindow; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CREATED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CREATED), - (PUINT_8)&rCmdIndicatePmBssCreated, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been connected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CONNECTED rCmdIndicatePmBssConnected; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssConnected.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssConnected.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssConnected.u2AssocId = prBssInfo->u2AssocId; - rCmdIndicatePmBssConnected.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssConnected.u2AtimWindow = prBssInfo->u2ATIMWindow; - - rCmdIndicatePmBssConnected.ucBmpDeliveryAC = prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC; - rCmdIndicatePmBssConnected.ucBmpTriggerAC = prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC; - - //DBGPRINTF("nicPmIndicateBssConnected: ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x", - //rCmdIndicatePmBssConnected.ucBmpDeliveryAC, - //rCmdIndicatePmBssConnected.ucBmpTriggerAC); - - if ((eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX) -#if CFG_ENABLE_WIFI_DIRECT - || ((eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && (prAdapter->fgIsP2PRegistered)) -#endif - ) { - if(prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = (UINT_8)prBssInfo->prStaRecOfAP->fgIsUapsdSupported; - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; //@FIXME - } - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CONNECTED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CONNECTED), - (PUINT_8)&rCmdIndicatePmBssConnected, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_INDICATE_PM_BSS_ABORT rCmdIndicatePmBssAbort; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdIndicatePmBssAbort.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_ABORT), - (PUINT_8)&rCmdIndicatePmBssAbort, - NULL, - 0); -} - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ) -{ - DEBUGFUNC("nicConfigPowerSaveProfile"); - DBGLOG(INIT, TRACE, ("eNetTypeIndex:%d, ePwrMode:%d, fgEnCmdEvent:%d\n", - eNetTypeIndex, ePwrMode, fgEnCmdEvent)); - - ASSERT(prAdapter); - - if (eNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - ASSERT(0); - return WLAN_STATUS_NOT_SUPPORTED; - } - -// prAdapter->rWlanInfo.ePowerSaveMode.ucNetTypeIndex = eNetTypeIndex; -// prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile = (UINT_8)ePwrMode; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucNetTypeIndex = eNetTypeIndex; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucPsProfile = (UINT_8)ePwrMode; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_POWER_SAVE_MODE, - TRUE, - FALSE, - (fgEnCmdEvent ? TRUE : FALSE), - (fgEnCmdEvent ? nicCmdEventSetCommon : NULL), - (fgEnCmdEvent ? nicOidCmdTimeoutCommon : NULL), - sizeof(CMD_PS_PROFILE_T), - (PUINT_8)&(prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex]), - NULL, - sizeof(PARAM_POWER_MODE) - ); - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - -WLAN_STATUS -nicEnterCtiaMode ( - IN P_ADAPTER_T prAdapter, - BOOLEAN fgEnterCtia, - BOOLEAN fgEnCmdEvent - ) -{ - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - CMD_ACCESS_REG rCmdAccessReg; - WLAN_STATUS rWlanStatus; - - DEBUGFUNC("nicEnterCtiaMode"); - DBGLOG(INIT, TRACE, ("nicEnterCtiaMode: %d\n", fgEnterCtia)); - - ASSERT(prAdapter); - - rWlanStatus = WLAN_STATUS_SUCCESS; - - if (fgEnterCtia) { - // 1. Disable On-Lin Scan - prAdapter->fgEnOnlineScan = FALSE; - - // 3. Disable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x904; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - NULL, - NULL, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - NULL, - 0 - ); - - // 4. Disable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - NULL, - 0 - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - NULL, - 0 - ); - - // Disalbe auto tx power - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - NULL, - 0 - ); - - // 2. Keep at CAM mode - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 0; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeCAM; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - fgEnCmdEvent); - } - - // 5. Disable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = TRUE; - } - else { - // 1. Enaable On-Lin Scan - prAdapter->fgEnOnlineScan = TRUE; - - // 3. Enable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x905; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - NULL, - NULL, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - NULL, - 0 - ); - - // 4. Enable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - NULL, - 0 - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - NULL, - 0 - ); - - // Enable auto tx power - // - - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - NULL, - 0 - ); - - - // 2. Keep at Fast PS - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 2; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeFast_PSP; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - fgEnCmdEvent); - } - - // 5. Enable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = FALSE; - - } - - return rWlanStatus; -} /* end of nicEnterCtiaMode() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate firmware domain -* for beacon generation parameters -* -* @param prAdapter Pointer of ADAPTER_T -* eIeUpdMethod, Update Method -* eNetTypeIndex Index of Network -* u2Capability Capability -* aucIe Pointer to buffer of IEs -* u2IELen Length of IEs -* -* @retval - WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* WLAN_STATUS_PENDING -* WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ) -{ - P_CMD_BEACON_TEMPLATE_UPDATE prCmdBcnUpdate; - UINT_16 u2CmdBufLen = 0; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanUpdateBeaconIETemplate"); - DBGLOG(INIT, LOUD, ("\n")); - - printk("nicUpdateBeaconIETemplate\n"); - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - if (u2IELen > MAX_IE_LENGTH) { - return WLAN_STATUS_INVALID_DATA; - } - - if (eIeUpdMethod == IE_UPD_METHOD_UPDATE_RANDOM - || eIeUpdMethod == IE_UPD_METHOD_UPDATE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, aucIE) + u2IELen; - } - else if (eIeUpdMethod == IE_UPD_METHOD_DELETE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, u2IELen); - } - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - // prepare command info - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u2CmdBufLen)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - printk("Allocate CMD_INFO_T ==> FAILED.\n"); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = eNetTypeIndex; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u2CmdBufLen); - prCmdInfo->pfCmdDoneHandler = NULL; //@FIXME - prCmdInfo->pfCmdTimeoutHandler = NULL; //@FIXME - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_UPDATE_BEACON_CONTENT; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u2CmdBufLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdBcnUpdate = (P_CMD_BEACON_TEMPLATE_UPDATE)(prWifiCmd->aucBuffer); - - // fill beacon updating command - prCmdBcnUpdate->ucUpdateMethod = (UINT_8) eIeUpdMethod; - prCmdBcnUpdate->ucNetTypeIndex = (UINT_8) eNetTypeIndex; - prCmdBcnUpdate->u2Capability = u2Capability; - prCmdBcnUpdate->u2IELen = u2IELen; - if(u2IELen > 0 ) { - kalMemCopy(prCmdBcnUpdate->aucIE, aucIe, u2IELen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to initialization PHY related -* varaibles -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prConnSettings->eDesiredPhyConfig >= PHY_CONFIG_NUM) { - ASSERT(0); - return; - } - - prAdapter->rWifiVar.ucAvailablePhyTypeSet = - aucPhyCfg2PhyTypeSet[prConnSettings->eDesiredPhyConfig]; - - if (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_BIT_ERP) { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_ERP_INDEX; - } - /* NOTE(Kevin): Because we don't have N only mode, TBD */ - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_HR_DSSS_INDEX; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_UPDATE_WMM_PARMS_T rCmdUpdateWmmParms; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - DBGLOG(QM, EVENT, ("sizeof(AC_QUE_PARMS_T): %d \n", sizeof(AC_QUE_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(CMD_UPDATE_WMM_PARMS): %d \n", sizeof(CMD_UPDATE_WMM_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(WIFI_CMD_T): %d \n", sizeof(WIFI_CMD_T))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - rCmdUpdateWmmParms.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - kalMemCopy(&rCmdUpdateWmmParms.arACQueParms[0], &prBssInfo->arACQueParms[0], - (sizeof(AC_QUE_PARMS_T)*AC_NUM)); - - rCmdUpdateWmmParms.fgIsQBSS = prBssInfo->fgIsQBSS; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_UPDATE_WMM_PARMS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_UPDATE_WMM_PARMS_T), - (PUINT_8)&rCmdUpdateWmmParms, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to set auto tx power parameter -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of Auto TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ) -{ - DEBUGFUNC("nicSetAutoTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_AUTOPWR_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_AUTO_POWER_PARAM_T), - (PUINT_8)prAutoPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPowerControl( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update power offset around 5GHz band -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of 5GHz power offset parameter -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ) -{ - DEBUGFUNC("nicUpdate5GOffset"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_5G_PWR_OFFSET, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_5G_PWR_OFFSET_T), - (PUINT_8)pr5GPwrOffset, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update DPD calibration result -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of parameter for DPD calibration result -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ) -{ - DEBUGFUNC("nicUpdateDPD"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PWR_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PWR_PARAM_T), - (PUINT_8)prDpdCalResult, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function starts system service such as timer and -* memory pools -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - // <1> Initialize MGMT Memory pool and STA_REC - cnmMemInit(prAdapter); - cnmStaRecInit(prAdapter); - cmdBufInitialize(prAdapter); - - // <2> Mailbox Initialization - mboxInitialize(prAdapter); - - // <3> Timer Initialization - cnmTimerInitialize(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function reset some specific system service, -* such as STA-REC -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Timer Destruction */ - cnmTimerDestroy(prAdapter); - - /* Mailbox Destruction */ - mboxDestroy(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - ASSERT(prAdapter); - - /* CNM Module - initialization */ - cnmInit(prAdapter); - - /* RLM Module - initialization */ - rlmFsmEventInit(prAdapter); - - /* SCN Module - initialization */ - scnInit(prAdapter); - - /* AIS Module - intiailization */ - aisInitializeConnectionSettings(prAdapter, prRegInfo); - aisFsmInit(prAdapter); - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - intiailization */ - roamingFsmInit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - -#if CFG_SUPPORT_SWCR - swCrDebugInit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SUPPORT_SWCR - swCrDebugUninit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - unintiailization */ - roamingFsmUninit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - /* AIS Module - unintiailization */ - aisFsmUninit(prAdapter); - - /* SCN Module - unintiailization */ - scnUninit(prAdapter); - - /* RLM Module - uninitialization */ - rlmFsmEventUninit(prAdapter); - - /* CNM Module - uninitialization */ - cnmUninit(prAdapter); - - return; -} - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to enable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_ENABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to disable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_DISABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param rMacAddr BSSID -* @param prSsid Pointer to SSID -* @param u4Privacy Privacy settings (0: Open / 1: WEP/WPA/WPA2 enabled) -* @param rRssi Received Strength (-10 ~ -200 dBm) -* @param eNetworkType Network Type (a/b/g) -* @param prConfiguration Network Parameter -* @param eOpMode Infra/Ad-Hoc -* @param rSupportedRates Supported basic rates -* @param u2IELength IE Length -* @param pucIEBuf Pointer to Information Elements(IEs) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ) -{ - BOOLEAN bReplace; - UINT_32 i; - UINT_32 u4IdxWeakest = 0; - PARAM_RSSI rWeakestRssi; - UINT_32 u4BufferSize; - - ASSERT(prAdapter); - - rWeakestRssi = (PARAM_RSSI)INT_MAX; - u4BufferSize = sizeof(prAdapter->rWlanInfo.aucScanIEBuf) / sizeof(prAdapter->rWlanInfo.aucScanIEBuf[0]); - - bReplace = FALSE; - - // decide to replace or add - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - // find weakest entry && not connected one - if(UNEQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, prAdapter->rWlanInfo.rCurrBssId.arMacAddress) - && prAdapter->rWlanInfo.arScanResult[i].rRssi < rWeakestRssi) { - u4IdxWeakest = i; - rWeakestRssi = prAdapter->rWlanInfo.arScanResult[i].rRssi; - } - - if(prAdapter->rWlanInfo.arScanResult[i].eOpMode == eOpMode && - EQUAL_MAC_ADDR(&(prAdapter->rWlanInfo.arScanResult[i].arMacAddress), rMacAddr) && - (EQUAL_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen) - || prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen == 0)) { - // replace entry - bReplace = TRUE; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - break; - } - } - - if (bReplace == FALSE) { - if (prAdapter->rWlanInfo.u4ScanResultNum < (CFG_MAX_NUM_BSS_LIST - 1)) { - i = prAdapter->rWlanInfo.u4ScanResultNum; - - // zero - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - prAdapter->rWlanInfo.u4ScanResultNum++; - } - else if(rWeakestRssi != (PARAM_RSSI)INT_MAX) { - // replace weakest one - i = u4IdxWeakest; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - if(u2IELength > 0) { - // IE - allocate buffer and update pointer - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to free IE buffer for dedicated scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4Idx Index of Scan Result -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ) -{ - UINT_32 i; - PUINT_8 pucPivot, pucMovePivot; - UINT_32 u4MoveSize, u4FreeSize, u4ReserveSize; - - ASSERT(prAdapter); - ASSERT(u4Idx < CFG_MAX_NUM_BSS_LIST); - - if(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength == 0 - || prAdapter->rWlanInfo.apucScanResultIEs[u4Idx] == NULL) { - return; - } - - u4FreeSize = ALIGN_4(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength); - - pucPivot = prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]; - pucMovePivot = (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]) + u4FreeSize); - - u4ReserveSize = ((UINT_32)pucPivot) - (UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])); - u4MoveSize = prAdapter->rWlanInfo.u4ScanIEBufferUsage - u4ReserveSize - u4FreeSize; - - // 1. rest of buffer to move forward - kalMemCopy(pucPivot, pucMovePivot, u4MoveSize); - - // 1.1 modify pointers - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(i != u4Idx) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] >= pucMovePivot) { - prAdapter->rWlanInfo.apucScanResultIEs[i] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[i]) - u4FreeSize); - } - } - } - - // 1.2 reset the freed one - prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - - // 2. reduce IE buffer usage - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4FreeSize; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to hack parameters for WLAN TABLE for -* fixed rate settings -* -* @param prAdapter Pointer to the Adapter structure. -* @param eRateSetting -* @param pu2DesiredNonHTRateSet, -* @param pu2BSSBasicRateSet, -* @param pucMcsSet -* @param pucSupMcs32 -* @param pu2HtCapInfo -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 pu2HtCapInfo - ) -{ - ASSERT(prAdapter); - ASSERT(eRateSetting > FIXED_RATE_NONE && eRateSetting < FIXED_RATE_NUM); - - switch(prAdapter->rWifiVar.eRateSetting) { - case FIXED_RATE_1M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_1M; - *pu2BSSBasicRateSet = RATE_SET_BIT_1M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_2M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_2M; - *pu2BSSBasicRateSet = RATE_SET_BIT_2M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_5_5M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_5_5M; - *pu2BSSBasicRateSet = RATE_SET_BIT_5_5M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_11M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_11M; - *pu2BSSBasicRateSet = RATE_SET_BIT_11M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_6M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_6M; - *pu2BSSBasicRateSet = RATE_SET_BIT_6M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_9M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_9M; - *pu2BSSBasicRateSet = RATE_SET_BIT_9M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_12M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_12M; - *pu2BSSBasicRateSet = RATE_SET_BIT_12M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_18M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_18M; - *pu2BSSBasicRateSet = RATE_SET_BIT_18M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_24M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_24M; - *pu2BSSBasicRateSet = RATE_SET_BIT_24M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_36M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_36M; - *pu2BSSBasicRateSet = RATE_SET_BIT_36M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_48M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_48M; - *pu2BSSBasicRateSet = RATE_SET_BIT_48M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_54M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_54M; - *pu2BSSBasicRateSet = RATE_SET_BIT_54M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_MCS0_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS1_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS2_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS3_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS4_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS5_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS6_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS7_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS0_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS1_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS2_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS3_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS4_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS5_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS6_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS7_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS0_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS1_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS2_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS3_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS4_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS5_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS6_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS7_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS32_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS0_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS1_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS2_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS3_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS4_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS5_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS6_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS7_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS32_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to write the register -* -* @param u4Address Register address -* u4Value the value to be written -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ) -{ - CMD_ACCESS_REG rCmdAccessReg; - - rCmdAccessReg.u4Address = u4Address; - rCmdAccessReg.u4Data = u4Value; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - NULL, - 0 - ); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to modify the auto rate parameters -* -* @param u4ArSysParam0 see description below -* u4ArSysParam1 -* u4ArSysParam2 -* u4ArSysParam3 -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* ArSysParam0[0:3] -> auto rate version (0:disable 1:version1 2:version2) -* ArSysParam0[4:5]-> auto bw version (0:disable 1:version1 2:version2) -* ArSysParam0[6:7]-> auto gi version (0:disable 1:version1 2:version2) -* ArSysParam0[8:15]-> HT rate clear mask -* ArSysParam0[16:31]-> Legacy rate clear mask -* ArSysParam1[0:7]-> Auto Rate check weighting window -* ArSysParam1[8:15]-> Auto Rate v1 Force Rate down -* ArSysParam1[16:23]-> Auto Rate v1 PerH -* ArSysParam1[24:31]-> Auto Rate v1 PerL -* -* Examples -* ArSysParam0 = 1, -* Enable auto rate version 1 -* -* ArSysParam0 = 983041, -* Enable auto rate version 1 -* Remove CCK 1M, 2M, 5.5M, 11M -* -* ArSysParam0 = 786433 -* Enable auto rate version 1 -* Remove CCK 5.5M 11M -*/ -/*----------------------------------------------------------------------------*/ - - -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ) -{ - UINT_8 ucArVer,ucAbwVer,ucAgiVer; - UINT_16 u2HtClrMask; - UINT_16 u2LegacyClrMask; - UINT_8 ucArCheckWindow; - UINT_8 ucArPerL; - UINT_8 ucArPerH; - UINT_8 ucArPerForceRateDownPer; - - ucArVer = (UINT_8)(u4ArSysParam0 & BITS(0,3)); - ucAbwVer = (UINT_8)((u4ArSysParam0 & BITS(4,5)) >>4); - ucAgiVer = (UINT_8)((u4ArSysParam0 & BITS(6,7)) >>6); - u2HtClrMask = (UINT_16) ((u4ArSysParam0 & BITS(8,15)) >> 8); - u2LegacyClrMask = (UINT_16) ((u4ArSysParam0 & BITS(16,31)) >> 16); - -#if 0 - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) ((u4ArSysParam1 & BITS(8,15)>>8)); - ucArPerH = (UINT_8) ((u4ArSysParam1 & BITS(16,23)) >>16); - ucArPerL = (UINT_8) ((u4ArSysParam1 & BITS(24,31)) >>24); -#endif - - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) (((u4ArSysParam1>>8) & BITS(0,7))); - ucArPerH = (UINT_8) (((u4ArSysParam1>>16) & BITS(0,7))); - ucArPerL = (UINT_8) (((u4ArSysParam1>>24) & BITS(0,7))); - - - DBGLOG(INIT, INFO, ("ArParam %u %u %u %u\n", u4ArSysParam0, u4ArSysParam1, u4ArSysParam2, u4ArSysParam3)); - DBGLOG(INIT, INFO, ("ArVer %u AbwVer %u AgiVer %u\n", ucArVer, ucAbwVer, ucAgiVer)); - DBGLOG(INIT, INFO, ("HtMask %x LegacyMask %x\n", u2HtClrMask, u2LegacyClrMask)); - DBGLOG(INIT, INFO, ("CheckWin %u RateDownPer %u PerH %u PerL %u\n", ucArCheckWindow, ucArPerForceRateDownPer, ucArPerH, ucArPerL)); - -#define SWCR_DATA_ADDR(MOD,ADDR) (0x90000000+(MOD<<8)+(ADDR)) -#define SWCR_DATA_CMD(CATE,WRITE,INDEX,OPT0,OPT1) ( (CATE<<24) | (WRITE<<23) | (INDEX<<16) | (OPT0 <<8) | OPT1 ) -#define SWCR_DATA0 0x0 -#define SWCR_DATA1 0x4 -#define SWCR_DATA2 0x8 -#define SWCR_DATA3 0xC -#define SWCR_DATA4 0x10 -#define SWCR_WRITE 1 -#define SWCR_READ 0 - - if(ucArVer > 0) { - /* dummy = WiFi.WriteMCR(&h90000104, &h00000001) */ - /* dummy = WiFi.WriteMCR(&h90000100, &h00850000)*/ - - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),1); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)); - } - else { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),0); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)) ; - } - - /* ucArVer 0: none 1:PER 2:Rcpi */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArVer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,7,0,0)); - - /* Candidate rate Ht mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2HtClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1c,0,0)); - - /* Candidate rate legacy mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2LegacyClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1d,0,0)); - -#if 0 - if(ucArCheckWindow!=0) { - /* TX DONE MCS INDEX CHECK STA RATE DOWN TH */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x14,0,0)); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0xc,0,0)); - } - - if(ucArPerForceRateDownPer !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerForceRateDownPer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x18,0,0)); - } - if(ucArPerH !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerH); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1,0,0)); - } - if(ucArPerL !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerL); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x2,0,0)); - } -#endif - - - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to enable roaming -* -* @param u4EnableRoaming -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* u4EnableRoaming -> Enable Romaing -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prConnSettings->fgIsEnableRoaming = ((u4EnableRoaming>0)?(TRUE):(FALSE)); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief dump firmware Assert message -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4MailBox0, u4MailBox1; - UINT_32 line = 0; - UINT_8 aucAssertFile[7]; - UINT_32 u4ChipId; - -#if CFG_SDIO_INTR_ENHANCE - u4MailBox0 = prAdapter->prSDIOCtrl->u4RcvMailbox0; - u4MailBox1 = prAdapter->prSDIOCtrl->u4RcvMailbox1; -#else - nicGetMailbox(prAdapter, 0, &u4MailBox0); - nicGetMailbox(prAdapter, 1, &u4MailBox1); -#endif - - line = u4MailBox0 & 0x0000FFFF; - - u4MailBox0 = ((u4MailBox0 >> 16) & 0x0000FFFF); - - kalMemCopy(&aucAssertFile[0], &u4MailBox0, 2); - kalMemCopy(&aucAssertFile[2], &u4MailBox1, 4); - - aucAssertFile[6] = '\0'; - -#if defined(MT6620) - u4ChipId = 6620; -#elif defined(MT5931) - u4ChipId = 5931; -#elif defined(MT6628) - u4ChipId = 6628; -#endif - - kalPrint("\n[MT%ld][wifi][Firmware] Assert at \"%s\" #%ld\n\n", - u4ChipId, - aucAssertFile, - line); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventLinkQuality); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* check is to prevent RSSI to be updated by incorrect initial RSSI from hardware */ - /* buffer statistics for further query */ - if(prAdapter->fgIsLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateRSSI(prAdapter, eNetTypeIdx, prEventLinkQuality->cRssi, prEventLinkQuality->cLinkQuality); - } - - if(prAdapter->fgIsLinkRateValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateLinkSpeed(prAdapter, eNetTypeIdx, prEventLinkQuality->u2LinkSpeed); - } - } - break; -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - if (prAdapter->fgIsP2pLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - P_EVENT_LINK_QUALITY_EX prEventLQEx = (P_EVENT_LINK_QUALITY_EX)prEventLinkQuality; - - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, prEventLQEx->cRssiP2P, prEventLQEx->cLinkQualityP2P); - } - break; -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update RSSI and Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - prAdapter->fgIsLinkQualityValid = TRUE; - prAdapter->rLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.cRssi = cRssi; - prAdapter->rLinkQuality.cLinkQuality = cLinkQuality; - - /* indicate to glue layer */ - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_AIS_INDEX, - prAdapter->rLinkQuality.cRssi, - prAdapter->rLinkQuality.cLinkQuality); - } - - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - prAdapter->fgIsP2pLinkQualityValid = TRUE; - prAdapter->rP2pLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rP2pLinkQuality.cRssi= cRssi; - prAdapter->rP2pLinkQuality.cLinkQuality= cLinkQuality; - - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_P2P_INDEX, - cRssi, - cLinkQuality); - break; -#endif -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* buffer statistics for further query */ - prAdapter->fgIsLinkRateValid = TRUE; - prAdapter->rLinkRateUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.u2LinkSpeed = u2LinkSpeed; - } - break; - - default: - break; - - } - - return; -} - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ) -{ - DEBUGFUNC("nicUpdateRddTestMode.\n"); - - ASSERT(prAdapter); - -// aisFsmScanRequest(prAdapter, NULL); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RDD_CH, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_RDD_CH_T), - (PUINT_8)prRddChParam, - NULL, - 0); -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_cmd_event.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_cmd_event.c deleted file mode 100755 index b26b644ffc99..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_cmd_event.c +++ /dev/null @@ -1,1749 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_cmd_event.c#1 $ -*/ - -/*! \file nic_cmd_event.c - \brief Callback functions for Command packets. - - Various Event packet handlers which will be setup in the callback function of - a command packet. -*/ - - - -/* -** $Log: nic_cmd_event.c $ - * - * 04 10 2012 yuche.tsai - * NULL - * Update address for wifi direct connection issue. - * - * 06 15 2011 cm.chang - * [WCXRP00000785] [MT6620 Wi-Fi][Driver][FW] P2P/BOW MAC address is XOR with AIS MAC address - * P2P/BOW mac address XOR with local bit instead of OR - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 24 2011 cp.wu - * [WCXRP00000493] [MT6620 Wi-Fi][Driver] Do not indicate redundant disconnection to host when entering into RF test mode - * only indicate DISCONNECTION to host when entering RF test if necessary (connected -> disconnected cases) - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 01 2010 cp.wu - * [WCXRP00000223] MT6620 Wi-Fi][Driver][FW] Adopt NVRAM parameters when enter/exit RF test mode - * reload NVRAM settings before entering RF test mode and leaving from RF test mode. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 15 2010 yuche.tsai - * NULL - * Start to test AT GO only when P2P state is not IDLE. - * - * 09 09 2010 yuche.tsai - * NULL - * Add AT GO Test mode after MAC address available. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 yuche.tsai - * NULL - * Add support for P2P Device Address query from FW. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 08 02 2010 cp.wu - * NULL - * reset FSMs before entering RF test mode. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change upon request: indicate as disconnected in driver domain when leaving from RF test mode - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not clear scanning list array after disassociation - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glude code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * limit RSSI return value to microsoft defined range. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * block until firmware finished RF test enter/leave then indicate completion to upper layer - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when entering RF test mode and leaving from RF test mode, wait for W_FUNC_RDY bit to be asserted forever until it is set or card is removed. - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * OID_802_11_RSSI, - * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * OID_802_11_STATISTICS, - * * * * * OID_802_11_DISASSOCIATE, - * * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:47:47 GMT mtk02752 -** only handle MCR read when accessing FW domain register -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 17:37:28 GMT mtk02752 -** * refine nicCmdEventQueryMcrRead -** + add TxStatus/RxStatus for RF test QueryInformation OIDs -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 22:05:45 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-01 23:02:57 GMT mtk02752 -** remove unnecessary spin locks -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-01 22:51:18 GMT mtk02752 -** maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-30 10:55:03 GMT mtk02752 -** modify for compatibility -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 14:46:32 GMT mtk02752 -** add another version of command-done handler upon new event structure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:33 GMT mtk01461 -** Add comment -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 19:32:42 GMT mtk01461 -** Add nicCmdEventSetCommon() for general set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:35 GMT mtk01461 -** Command Done Handler -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_ACCESS_REG prCmdAccessReg; - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdAccessReg = (P_CMD_ACCESS_REG)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prMcrRdInfo->u4McrOffset = prCmdAccessReg->u4Address; - prMcrRdInfo->u4McrData = prCmdAccessReg->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_SW_DBG_CTRL_T prCmdSwCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdSwCtrl = (P_CMD_SW_DBG_CTRL_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T) prCmdInfo->pvInformationBuffer; - prSwCtrlInfo->u4Id = prCmdSwCtrl->u4Id; - prSwCtrlInfo->u4Data = prCmdSwCtrl->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4InformationBufferLength, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_SUCCESS); - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return; -} - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4Count; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - u4Count = (prCmdInfo->u4SetInfoLen - OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress)) - / sizeof(IPV4_NETWORK_ADDRESS) ; - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress) + u4Count * - (OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP)), - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_TEST_STATUS prTestStatus, prQueryBuffer; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTestStatus = (P_EVENT_TEST_STATUS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prQueryBuffer = (P_EVENT_TEST_STATUS) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prQueryBuffer, prTestStatus, sizeof(EVENT_TEST_STATUS)); - - u4QueryInfoLen = sizeof(EVENT_TEST_STATUS); - - /* Update Query Infomation Length */ - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_RSSI rRssi, *prRssi; - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - rRssi = (PARAM_RSSI)prLinkQuality->cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - else { - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prRssi = (PARAM_RSSI *) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prRssi, &rRssi, sizeof(PARAM_RSSI)); - u4QueryInfoLen = sizeof(PARAM_RSSI); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is in response of OID_GEN_LINK_SPEED query request -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the pending command info -* @param pucEventBuf -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4LinkSpeed; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - pu4LinkSpeed = (PUINT_32)(prCmdInfo->pvInformationBuffer); - - if(prLinkQuality->u2LinkSpeed == 0) { - *pu4LinkSpeed = 10000; /* 10K * 100bps = 1Mbps */ - } - else { - *pu4LinkSpeed = prLinkQuality->u2LinkSpeed * 5000; - } - - u4QueryInfoLen = sizeof(UINT_32); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - u4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) prCmdInfo->pvInformationBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prEventStatistics->rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prEventStatistics->rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prEventStatistics->rFailedCount; - prStatistics->rRetryCount - = prEventStatistics->rRetryCount; - prStatistics->rMultipleRetryCount - = prEventStatistics->rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prEventStatistics->rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prEventStatistics->rRTSFailureCount; - prStatistics->rACKFailureCount - = prEventStatistics->rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prEventStatistics->rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prEventStatistics->rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prEventStatistics->rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prEventStatistics->rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // [driver-land] - prAdapter->fgTestMode = TRUE; - - // 0. always indicate disconnection - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - // 1. Remove pending TX - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. Reset driver-domain FSMs - nicUninitMGMT(prAdapter); - - nicResetSystemService(prAdapter); - nicInitMGMT(prAdapter, NULL); - - // 3. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 4. Block til firmware completed entering into RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else - kalMsleep(10); - } - - // 5. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 6. Reset TX Counter - nicTxResetResource(prAdapter); - - // 7. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 8. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - -#if CFG_SUPPORT_NVRAM - // 9. load manufacture data - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - return; -} - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // 1. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 2. Block til firmware completed leaving from RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else { - kalMsleep(10); - } - } - - // 3. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 4. Reset TX Counter - nicTxResetResource(prAdapter); - - // 5. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 6. set driver-land variable - prAdapter->fgTestMode = FALSE; - - // 7. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - /* 8. Indicate as disconnected */ - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - -#if CFG_SUPPORT_NVRAM - /* 9. load manufacture data */ - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - /* 10. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - return; -} - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(pucEventBuf); - - // copy to adapter - kalMemCopy(&(prAdapter->rMyMacAddr), &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - kalMemCopy(prCmdInfo->pvInformationBuffer, &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - u4QueryInfoLen = MAC_ADDR_LEN; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - //4 <3> Update new MAC address and all 3 networks - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, prAdapter->rMyMacAddr); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucDeviceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucDeviceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucInterfaceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucInterfaceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucOwnMacAddr, - prAdapter->rMyMacAddr); - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); -#endif - -#if CFG_TEST_WIFI_DIRECT_GO - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_IDLE) { - wlanEnableP2pFunction(prAdapter); - - wlanEnableATGO(prAdapter); - } -#endif - - kalUpdateMACAddress(prAdapter->prGlueInfo, prAdapter->rWifiVar.aucMacAddress); - - return; -} - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_MAC_MCAST_ADDR prEventMacMcastAddr; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventMacMcastAddr = (P_EVENT_MAC_MCAST_ADDR)(pucEventBuf); - - u4QueryInfoLen = prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN; - - // buffer length check - if (prCmdInfo->u4InformationBufferLength < u4QueryInfoLen) { - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_BUFFER_TOO_SHORT); - } - else { - kalMemCopy(prCmdInfo->pvInformationBuffer, - prEventMacMcastAddr->arAddress, - prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN); - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - } -} - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_ACCESS_EEPROM prEventAccessEeprom; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventAccessEeprom = (P_EVENT_ACCESS_EEPROM)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - prEepromRdInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prEepromRdInfo->ucEepromIndex = (UINT_8)(prEventAccessEeprom->u2Offset); - prEepromRdInfo->u2EepromData = prEventAccessEeprom->u2Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_MEDIA_STREAMING_INDICATION rParamMediaStreamIndication; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - rParamMediaStreamIndication.rStatus.eStatusType = - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE; - rParamMediaStreamIndication.eMediaStreamMode = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)&rParamMediaStreamIndication, - sizeof(PARAM_MEDIA_STREAMING_INDICATION)); -} - - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rReceivedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rReceivedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = 0; // @FIXME? - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME? - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) 0; //@FIXME - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rMultipleRetryCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rMultipleRetryCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command by OID/ioctl has been timeout -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a generic command timeout handler -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for entering RF test has -* failed sending due to timeout (highly possibly by firmware crash) -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - // 1. Remove pending TX frames - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. indiate for OID failure - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for memory dump has -* replied a event. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* @param pucEventBuf Pointer to event buffer -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_DUMP_MEM_T prEventDumpMem; - static UINT_8 aucPath[256]; - static UINT_32 u4CurTimeTick; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventDumpMem = (P_EVENT_DUMP_MEM_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(P_PARAM_CUSTOM_MEM_DUMP_STRUC_T); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T) prCmdInfo->pvInformationBuffer; - prMemDumpInfo->u4Address = prEventDumpMem->u4Address; - prMemDumpInfo->u4Length = prEventDumpMem->u4Length; - prMemDumpInfo->u4RemainLength = prEventDumpMem->u4RemainLength; - prMemDumpInfo->ucFragNum = prEventDumpMem->ucFragNum; - -#if 0 - do{ - UINT_32 i = 0; - printk("Rx dump address 0x%X, Length %d, FragNum %d, remain %d\n", - prEventDumpMem->u4Address, - prEventDumpMem->u4Length, - prEventDumpMem->ucFragNum, - prEventDumpMem->u4RemainLength); -#if 0 - for(i = 0; i < prEventDumpMem->u4Length; i++) { - printk("%02X ", prEventDumpMem->aucBuffer[i]); - if(i % 32 == 31) { - printk("\n"); - } - } -#endif - }while(FALSE); -#endif - - if(prEventDumpMem->ucFragNum == 1) { - /* Store memory dump into sdcard, - * path /sdcard/dump___.hex - */ - u4CurTimeTick = kalGetTimeTick(); - sprintf(aucPath, "/sdcard/dump_%ld_0x%08lX_%ld.hex", - u4CurTimeTick, - prEventDumpMem->u4Address, - prEventDumpMem->u4Length + prEventDumpMem->u4RemainLength); - kalWriteToFile(aucPath, FALSE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - else { - /* Append current memory dump to the hex file */ - kalWriteToFile(aucPath, TRUE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - - if(prEventDumpMem->u4RemainLength == 0 || - prEventDumpMem->u4Address == 0xFFFFFFFF) { - /* The request is finished or firmware response a error */ - /* Reply time tick to iwpriv */ - *((PUINT_32)prCmdInfo->pvInformationBuffer) = u4CurTimeTick; - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - else { - /* The memory dump request is not finished, Send next command*/ - wlanSendMemDumpCmd( - prAdapter, - prCmdInfo->pvInformationBuffer, - prCmdInfo->u4InformationBufferLength); - } - } - - return; - -} - -#if CFG_SUPPORT_BUILD_DATE_CODE -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when event for build date code information -* has been retrieved -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* @param pucEventBuf Pointer to the event buffer -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventBuildDateCode ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_EVENT_BUILD_DATE_CODE prEvent; - P_GLUE_INFO_T prGlueInfo; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEvent = (P_EVENT_BUILD_DATE_CODE)pucEventBuf; - - u4QueryInfoLen = sizeof(UINT_8) * 16; - kalMemCopy(prCmdInfo->pvInformationBuffer, prEvent->aucDateCode, sizeof(UINT_8) * 16); - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when event for query FW bss info -* has been retrieved -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* @param pucEventBuf Pointer to the event buffer -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ - -VOID -nicCmdEventGetBSSInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_EVENT_AIS_BSS_INFO_T prEvent; - P_GLUE_INFO_T prGlueInfo; - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEvent = (P_EVENT_AIS_BSS_INFO_T)pucEventBuf; - - u4QueryInfoLen = sizeof(EVENT_AIS_BSS_INFO_T); - kalMemCopy(prCmdInfo->pvInformationBuffer, prEvent, sizeof(EVENT_AIS_BSS_INFO_T)); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if(prEvent->eCurrentOPMode == OP_MODE_INFRASTRUCTURE){ - if (prEvent->eConnectionState != prAisBssInfo->eConnectionState) { - DBGLOG(INIT, ERROR, ("driver[%d] & FW[%d] status didn't sync !!!\n", - prAisBssInfo->eConnectionState, prEvent->eCurrentOPMode)); - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_RADIO_LOST, FALSE); - } - } - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; -} - - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_pwr_mgt.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_pwr_mgt.c deleted file mode 100755 index f469057da479..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_pwr_mgt.c +++ /dev/null @@ -1,802 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_pwr_mgt.c#1 $ -*/ - -/*! \file "nic_pwr_mgt.c" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - - - -/* -** $Log: nic_pwr_mgt.c $ - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 29 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * fix for compilation error when applied with FW_DOWNLOAD = 0 - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * refine for MT5931/MT6620 logic separation. - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * bugfix: firmware download procedure for ACPI state transition is not complete. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * check success or failure for setting fw-own - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 30 2010 cp.wu - * NULL - * reset ACPI power state before waking up MT6620 Wi-Fi firmware. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sleepy notify is only used for sleepy state, - * while wake-up state is automatically set when host needs to access device - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct hibernation problem. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * are now handled in glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct typo. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-13 21:59:15 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-09-09 17:26:36 GMT mtk01084 -** remove CMD52 access -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-18 14:50:29 GMT mtk01084 -** modify lines in nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:55:37 GMT mtk01084 -** modify nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:33:00 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:32 GMT mtk01084 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/extern BOOLEAN fgIsResetting; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER ON procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ) -{ - UINT_32 u4RegValue; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == TRUE) { - return; - } - else { - if(nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - // pending interrupts - return; - } - } - - if (fgEnableGlobalInt) { - prAdapter->fgIsIntEnableWithLPOwnSet = TRUE; - } - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - if(u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - // if set firmware own not successful (possibly pending interrupts), - // indicate an own clear event - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - return; - } - - prAdapter->fgIsFwOwn = TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER OFF procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ) -{ -#define LP_OWN_BACK_TOTAL_DELAY_MS 8192 //exponential of 2 -#define LP_OWN_BACK_LOOP_DELAY_MS 1 //exponential of 2 -#define LP_OWN_BACK_CLR_OWN_ITERATION 256 //exponential of 2 - - BOOLEAN fgStatus = TRUE; - UINT_32 i, u4CurrTick, u4RegValue = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == FALSE) - return fgStatus; - - u4CurrTick = kalGetTimeTick(); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - - if (u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - prAdapter->fgIsFwOwn = FALSE; - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (kalGetTimeTick() - u4CurrTick) > LP_OWN_BACK_TOTAL_DELAY_MS - ||fgIsResetting ==TRUE) { - //ERRORLOG(("LP cannot be own back (for %ld ms)", kalGetTimeTick() - u4CurrTick)); - fgStatus = FALSE; - break; - } - else { - if((i & (LP_OWN_BACK_CLR_OWN_ITERATION - 1)) == 0) { - /* Software get LP ownership - per 256 iterations */ - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - } - - /* Delay for LP engine to complete its operation. */ - kalMsleep(LP_OWN_BACK_LOOP_DELAY_MS); - i++; - } - } - - return fgStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set ACPI power mode to D0. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4Value = 0, u4WHISR = 0; - UINT_8 aucTxCount[8]; - UINT_32 i; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwImgLength, u4FwLoadAddr, u4ImgSecSize; - PVOID prFwMappingHandle; - PVOID pvFwImageMapFile = NULL; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif - - DEBUGFUNC("nicpmSetAcpiPowerD0"); - - ASSERT(prAdapter); - - do { - /* 0. Reset variables in ADAPTER_T */ - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - -#if defined(MT6620) || defined(MT6628) - /* 1. Request Ownership to enter F/W download state */ - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - #if CFG_ENABLE_FW_DOWNLOAD - prFwMappingHandle = kalFirmwareImageMapping(prAdapter->prGlueInfo, &pvFwImageMapFile, &u4FwImgLength); - if(!prFwMappingHandle) { - DBGLOG(INIT, ERROR,("Fail to load FW image from file!\n")); - pvFwImageMapFile = NULL; - } - - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 3.1 disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 3.2 Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3.3 FW download here */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImgLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImgLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanImageSectionDownload failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - } - else { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - kalGetFwStartAddress(prAdapter->prGlueInfo)); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", kalGetFwLoadAddress(prAdapter->prGlueInfo))); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImgLength)); - - do { - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImgLength >> 6); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - #endif - #endif - - /* 5. check Wi-Fi FW asserts ready bit */ - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 6.1 reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 6.2 reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - - /* 6.3 Enable interrupt */ - nicEnableInterrupt(prAdapter); - - /* 6.4 Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6.5 indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, NULL); - - } while(FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - return FALSE; - } - else { - return TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is used to set ACPI power mode to D3. -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* 1. MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - /* 2. Disable Interrupt */ - nicDisableInterrupt(prAdapter); - - /* 3. emit CMD_NIC_POWER_CTRL command packet */ - wlanSendNicPowerCtrlCmd(prAdapter, 1); - - /* 4. Clear Interrupt Status */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 5. Remove pending TX */ - nicTxRelease(prAdapter); - - // 5.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 5.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - /* 6. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - - /* 7. Set variables */ - prAdapter->rAcpiState = ACPI_STATE_D3; - - return TRUE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_rx.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_rx.c deleted file mode 100755 index 17e9f34bc4e9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_rx.c +++ /dev/null @@ -1,3532 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_rx.c#3 $ -*/ - -/*! \file nic_rx.c - \brief Functions that provide many rx-related functions - - This file includes the functions used to process RFB and dispatch RFBs to - the appropriate related rx functions for protocols. -*/ - - - -/* -** $Log: nic_rx.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 14 2012 cp.wu - * NULL - * remove another assertion by error message dump - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 08 26 2011 cp.wu - * [WCXRP00000958] [MT6620 Wi-Fi][Driver] Extend polling timeout from 25ms to 1sec due to RF calibration might took up to 600ms - * extend polling RX response timeout period from 25ms to 1000ms. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * correct comment. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * take use of QUE_MGT exported function to estimate currently RX buffer usage count. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support for GO. - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Remove Station Record after Aging timeout. - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add MLME deauthentication support for Hot-Spot mode. - * - * 02 09 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Adjust variable order. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update beacon for NoA - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 20 2010 wh.su - * NULL - * add a cmd to reset the p2p key - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed compilier error. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * release RX packet to packet pool when in RF test mode - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common buffer, store the IE of a P2P device in this common buffer. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 yuche.tsai - * NULL - * When enable WiFi Direct function, check each packet to tell which interface to indicate. - * - * 08 05 2010 yuche.tsai - * NULL - * Add P2P Device Discovery Function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * Add support API for RX public action frame. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 yuche.tsai - * - * Update Device Capability Bitmap & Group Capability Bitmap from 16 bits to 8 bits. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill ucStaRecIdx into SW_RFB_T. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync with MT6620 driver for scan result replacement policy - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 04 29 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * fixing the PMKID candicate indicate code. - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * nicRxProcessEvent packet doesn't access spin-lock directly from now on. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * do not need to release the spin lock due to it is done inside nicGetPendingCmdInfo() - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * 2) add KAPI for handling association info - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve Linux supplicant compliance - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * the frequency is used for adhoc connection only - * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct fgSetQuery/fgNeedResp check - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Updated API interfaces for qmHandleEventRxAddBa() and qmHandleEventRxDelBa() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * 4) nicRxWaitResponse() revised - * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * * OID_802_11_RSSI, - * * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * * OID_802_11_STATISTICS, - * * * * * * OID_802_11_DISASSOCIATE, - * * * * * * OID_802_11_POWER_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * 2) add 4 counter for recording aggregation statistics - * - * 12 23 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a precheck: if free sw rfb is not enough, do not invoke read transactionu1rwduu`wvpghlqg|fu+rp - * - * 12 22 2009 cp.wu - * [WPD00003809][Bug] Host driver will crash when processing reordered MSDUs - * The root cause is pointer accessing by mistake. After dequeued from reordering-buffer, handling logic should access returned pointer instead of pointer which has been passed in before. -** \main\maintrunk.MT6620WiFiDriver_Prj\58 2009-12-17 13:40:33 GMT mtk02752 -** always update prAdapter->rSDIOCtrl when enhanced response is read by RX -** \main\maintrunk.MT6620WiFiDriver_Prj\57 2009-12-16 18:01:38 GMT mtk02752 -** if interrupt enhanced response is fetched by RX enhanced response, RX needs to invoke interrupt handlers too -** \main\maintrunk.MT6620WiFiDriver_Prj\56 2009-12-16 14:16:52 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\55 2009-12-15 20:03:12 GMT mtk02752 -** ASSERT when RX FreeSwRfb is not enough -** \main\maintrunk.MT6620WiFiDriver_Prj\54 2009-12-15 17:01:29 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is enabled, after enhanced response is read, rx procedure should process 1) TX_DONE_INT 2) D2H INT as well -** \main\maintrunk.MT6620WiFiDriver_Prj\53 2009-12-14 20:45:28 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is set, TC counter must be updated each time RX enhance response is read -** -** \main\maintrunk.MT6620WiFiDriver_Prj\52 2009-12-14 11:34:16 GMT mtk02752 -** correct a trivial logic issue -** \main\maintrunk.MT6620WiFiDriver_Prj\51 2009-12-14 10:28:25 GMT mtk02752 -** add a protection to avoid out-of-boundary access -** \main\maintrunk.MT6620WiFiDriver_Prj\50 2009-12-10 16:55:18 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\49 2009-12-09 14:06:47 GMT MTK02468 -** Added parsing event packets with EVENT_ID_RX_ADDBA or EVENT_ID_RX_DELBA -** \main\maintrunk.MT6620WiFiDriver_Prj\48 2009-12-08 17:37:51 GMT mtk02752 -** handle EVENT_ID_TEST_STATUS as well -** \main\maintrunk.MT6620WiFiDriver_Prj\47 2009-12-04 17:59:11 GMT mtk02752 -** to pass free-build compilation check -** \main\maintrunk.MT6620WiFiDriver_Prj\46 2009-12-04 12:09:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\45 2009-12-04 11:53:37 GMT mtk02752 -** all API should be compilable under SD1_SD3_DATAPATH_INTEGRATION == 0 -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-03 16:19:48 GMT mtk01461 -** Fix the Connected Event -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-11-30 10:56:18 GMT mtk02752 -** 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-11-30 10:11:27 GMT mtk02752 -** implement replacement for bss scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-11-27 11:08:05 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-11-26 09:38:59 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-11-26 09:29:40 GMT mtk02752 -** enable packet forwarding path (for AP mode) -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-11-25 21:37:00 GMT mtk02752 -** sync. with EVENT_SCAN_RESULT_T change, and add an assert for checking event size -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-25 20:17:41 GMT mtk02752 -** fill HIF_TX_HEADER_T.u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-25 18:18:57 GMT mtk02752 -** buffer scan result to prGlueInfo->rWlanInfo.arScanResult directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-24 22:42:45 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event (not implemented yet) -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-24 20:51:41 GMT mtk02752 -** integrate with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-24 19:56:17 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T in new path -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-23 20:31:21 GMT mtk02752 -** payload to send into pfCmdDoneHandler() will not include WIFI_EVENT_T -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-23 17:51:34 GMT mtk02752 -** when event packet corresponding to some pendingOID is received, pendingOID should be cleared -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 14:46:54 GMT mtk02752 -** implement nicRxProcessEventPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-17 22:40:54 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-16 21:48:22 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-16 15:41:18 GMT mtk01084 -** modify the length to be read in emu mode -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-13 17:00:12 GMT mtk02752 -** add blank function for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-13 13:54:24 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 14:41:51 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-11 14:33:46 GMT mtk02752 -** add protection when there is no packet avilable -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 12:33:36 GMT mtk02752 -** add RX1 read path for aggregated/enhanced/normal packet read procedures -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-04 14:11:08 GMT mtk01084 -** modify lines in RX aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:23 GMT mtk01084 -** modify RX aggregation handling -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:56:12 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:34 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:20 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-02 13:59:08 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-21 23:39:05 GMT mtk01461 -** Fix the paste error of RX STATUS in OOB of HIF Loopback CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-20 12:25:32 GMT mtk01461 -** Fix process of Read Done, and add u4MaxEventBufferLen to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 21:13:18 GMT mtk01426 -** Fixed compiler error -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:05:29 GMT mtk01426 -** Fixed nicRxSDIOAggReceiveRFBs() ASSERT issue -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:38:43 GMT mtk01461 -** Fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode and refine nicRxSDIOAggeceiveRFBs() for RX Aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-22 09:12:17 GMT mtk01461 -** Fix nicRxProcessHIFLoopbackPacket(), the size of HIF CTRL LENTH field is 1 byte -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-14 15:51:26 GMT mtk01426 -** Update RX OOB Setting -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-03 14:58:58 GMT mtk01426 -** Fixed logical error -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:58:31 GMT mtk01461 -** Rename the HIF_PKT_TYPE_DATA -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:51:18 GMT mtk01461 -** Fix u4HeaderOffset in nicRxProcessHIFLoopbackPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:02:58 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE and CFG_HIF_LOOPBACK support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:20:59 GMT mtk01426 -** Add nicRxWaitResponse function -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:01 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#ifndef LINUX -#include -#else -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define RX_RESPONSE_TIMEOUT (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_MGMT_FRAME_HANDLING -static PROCESS_RX_MGT_FUNCTION apfnProcessRxMgtFrame[MAX_NUM_OF_FC_SUBTYPES] = { - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0000: Association request */ - #else - NULL, /* subtype 0000: Association request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0001: Association response */ - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0010: Reassociation request */ - #else - NULL, /* subtype 0010: Reassociation request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0011: Reassociation response */ - #if CFG_SUPPORT_ADHOC - bssProcessProbeRequest, /* subtype 0100: Probe request */ - #else - NULL, /* subtype 0100: Probe request */ - #endif /* CFG_SUPPORT_ADHOC */ - scanProcessBeaconAndProbeResp, /* subtype 0101: Probe response */ - NULL, /* subtype 0110: reserved */ - NULL, /* subtype 0111: reserved */ - scanProcessBeaconAndProbeResp, /* subtype 1000: Beacon */ - NULL, /* subtype 1001: ATIM */ - saaFsmRunEventRxDisassoc, /* subtype 1010: Disassociation */ - authCheckRxAuthFrameTransSeq, /* subtype 1011: Authentication */ - saaFsmRunEventRxDeauth, /* subtype 1100: Deauthentication */ - nicRxProcessActionFrame, /* subtype 1101: Action */ - NULL, /* subtype 1110: reserved */ - NULL /* subtype 1111: reserved */ -}; -#endif - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucMemHandle; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i; - - DEBUGFUNC("nicRxInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <0> Clear allocated memory. - kalMemZero((PVOID) prRxCtrl->pucRxCached, prRxCtrl->u4RxCachedSize); - - //4 <1> Initialize the RFB lists - QUEUE_INITIALIZE(&prRxCtrl->rFreeSwRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rReceivedRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rIndicatedRfbList); - - pucMemHandle = prRxCtrl->pucRxCached; - for (i = CFG_RX_MAX_PKT_NUM; i != 0; i--) { - prSwRfb = (P_SW_RFB_T)pucMemHandle; - - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - - pucMemHandle += ALIGN_4(sizeof(SW_RFB_T)); - } - - ASSERT(prRxCtrl->rFreeSwRfbList.u4NumElem == CFG_RX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prRxCtrl->pucRxCached) == prRxCtrl->u4RxCachedSize); - - //4 <2> Clear all RX counters - RX_RESET_ALL_CNTS(prRxCtrl); - -#if CFG_SDIO_RX_AGG - prRxCtrl->pucRxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); - #endif -#else - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); - #endif -#endif - -#if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum = 0; - prRxCtrl->u4TotalRxPacketNum = 0; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt = 0; - prRxCtrl->u4DequeuedCnt = 0; -#endif - - return; -} /* end of nicRxInitialize() */ - - -#if defined(MT5931) -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize HIF RX control registers explicitly -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - DEBUGFUNC("nicRxPostInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - -#if CFG_SDIO_RX_AGG - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); -#else - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); -#endif - -} /* end of nicRxPostInitialize() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - nicRxFlush(prAdapter); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - return; -} /* end of nicRxUninitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb specify the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4PktLen = 0; - UINT_32 u4MacHeaderLen; - UINT_32 u4HeaderOffset; - - DEBUGFUNC("nicRxFillRFB"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - u4PktLen= prHifRxHdr->u2PacketLen; - - u4HeaderOffset = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_OFFSET_MASK); - u4MacHeaderLen = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_LEN) - >> HIF_RX_HDR_HEADER_LEN_OFFSET; - - //DBGLOG(RX, TRACE, ("u4HeaderOffset = %d, u4MacHeaderLen = %d\n", - // u4HeaderOffset, u4MacHeaderLen)); - - prSwRfb->u2HeaderLen = (UINT_16)u4MacHeaderLen; - prSwRfb->pvHeader = (PUINT_8)prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset; - prSwRfb->u2PacketLen = (UINT_16)(u4PktLen - (HIF_RX_HDR_SIZE + u4HeaderOffset)); - - //DBGLOG(RX, TRACE, ("Dump Rx packet, u2PacketLen = %d\n", prSwRfb->u2PacketLen)); - //DBGLOG_MEM8(RX, TRACE, prSwRfb->pvHeader, prSwRfb->u2PacketLen); - -#if 0 - if (prHifRxHdr->ucReorder & HIF_RX_HDR_80211_HEADER_FORMAT){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_802_11_FORMAT; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_802_11_FORMAT\n")); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_DO_REORDER){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_DO_REORDERING; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_DO_REORDERING\n")); - - /* Get Seq. No and TID, Wlan Index info */ - if (prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_BAR_FRAME){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_BAR_FRAME; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_BAR_FRAME\n")); - } - - prSwRfb->u2SSN = prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_SEQ_NO_MASK; - prSwRfb->ucTid = (UINT_8)((prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_TID_MASK) - >> HIF_RX_HDR_TID_OFFSET); - DBGLOG(RX, TRACE, ("u2SSN = %d, ucTid = %d\n", - prSwRfb->u2SSN, prSwRfb->ucTid)); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_WDS){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_AMP_WDS; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_AMP_WDS\n")); - } -#endif -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill checksum status in RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* @param u4TcpUdpIpCksStatus specify the Checksum status -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus -) -{ - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prAdapter->u4CSUMFlags != CSUM_NOT_SUPPORTED){ - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv4) { // IPv4 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_IP) { //IP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_SUCCESS; - } - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv6) {//IPv6 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_SUCCESS; - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - } - } - -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process packet doesn't need to do buffer reordering -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - BOOL fgIsRetained = FALSE; - UINT_32 u4CurrentRxBufferCount; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - DEBUGFUNC("nicRxProcessPktWithoutReorder"); - //DBGLOG(RX, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - u4CurrentRxBufferCount = prRxCtrl->rFreeSwRfbList.u4NumElem; - /* QM USED = $A, AVAILABLE COUNT = $B, INDICATED TO OS = $C - * TOTAL = $A + $B + $C - * - * Case #1 (Retain) - * ------------------------------------------------------- - * $A + $B < THRESHOLD := $A + $B + $C < THRESHOLD + $C := $TOTAL - THRESHOLD < $C - * => $C used too much, retain - * - * Case #2 (Non-Retain) - * ------------------------------------------------------- - * $A + $B > THRESHOLD := $A + $B + $C > THRESHOLD + $C := $TOTAL - THRESHOLD > $C - * => still availble for $C to use - * - */ - fgIsRetained = (((u4CurrentRxBufferCount + - qmGetRxReorderQueuedBufferCount(prAdapter) + - prTxCtrl->i4PendingFwdFrameCount) < CFG_RX_RETAINED_PKT_THRESHOLD) ? - TRUE : FALSE); - - //DBGLOG(RX, INFO, ("fgIsRetained = %d\n", fgIsRetained)); - - if (kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - fgIsRetained, - prSwRfb->aeCSUM) != WLAN_STATUS_SUCCESS) { - DBGLOG(RX, ERROR, ("kalProcessRxPacket return value != WLAN_STATUS_SUCCESS\n")); - ASSERT(0); - - nicRxReturnRFB(prAdapter, prSwRfb); - return; - } - else { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec) { -#if CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX && - prAdapter->fgIsP2PRegistered == TRUE) { - GLUE_SET_PKT_FLAG_P2P(prSwRfb->pvPacket); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - GLUE_SET_PKT_FLAG_PAL(prSwRfb->pvPacket); - } -#endif - } - prRxCtrl->apvIndPacket[prRxCtrl->ucNumIndPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumIndPacket++; - } - - if (fgIsRetained) { - prRxCtrl->apvRetainedPacket[prRxCtrl->ucNumRetainedPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumRetainedPacket++; - /* TODO : error handling of nicRxSetupRFB */ - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - } - else{ - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process forwarding data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo, prRetMsduInfoList; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessForwardPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo && kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - prRxCtrl->rFreeSwRfbList.u4NumElem < CFG_RX_RETAINED_PKT_THRESHOLD ? TRUE : FALSE, - prSwRfb->aeCSUM) == WLAN_STATUS_SUCCESS) { - - prMsduInfo->eSrc = TX_PACKET_FORWARDING; - // pack into MSDU_INFO_T - nicTxFillMsduInfo(prAdapter, prMsduInfo, (P_NATIVE_PACKET)(prSwRfb->pvPacket)); - // Overwrite the ucNetworkType - prMsduInfo->ucNetworkType = HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr); - - // release RX buffer (to rIndicatedRfbList) - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - - // increase forward frame counter - GLUE_INC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - - // send into TX queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfoList = qmEnqueueTxPackets(prAdapter, prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prRetMsduInfoList != NULL) { // TX queue refuses queuing the packet - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfoList); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfoList); - } - /* indicate service thread for sending */ - if(prTxCtrl->i4PendingFwdFrameCount > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } - else { // no TX resource - nicRxReturnRFB(prAdapter, prSwRfb); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process broadcast data packet for both host and forwarding -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SW_RFB_T prSwRfbDuplicated; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - P_HIF_RX_HEADER_T prHifRxHdr; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessGOBroadcastPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - ASSERT(CFG_NUM_OF_QM_RX_PKT_NUM >= 16); - - if( prRxCtrl->rFreeSwRfbList.u4NumElem - >= (CFG_RX_MAX_PKT_NUM - (CFG_NUM_OF_QM_RX_PKT_NUM - 16 /* Reserved for others */) ) ) { - - /* 1. Duplicate SW_RFB_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfbDuplicated, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if(prSwRfbDuplicated){ - kalMemCopy(prSwRfbDuplicated->pucRecvBuff, - prSwRfb->pucRecvBuff, - ALIGN_4(prHifRxHdr->u2PacketLen + HIF_RX_HW_APPENDED_LEN)); - - prSwRfbDuplicated->ucPacketType = HIF_RX_PKT_TYPE_DATA; - prSwRfbDuplicated->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - nicRxFillRFB(prAdapter, prSwRfbDuplicated); - - /* 2. Modify eDst */ - prSwRfbDuplicated->eDst = RX_PKT_DESTINATION_FORWARD; - - /* 4. Forward */ - nicRxProcessForwardPkt(prAdapter, prSwRfbDuplicated); - } - } - else { - DBGLOG(RX, WARN, ("Stop to forward BMC packet due to less free Sw Rfb %u\n", prRxCtrl->rFreeSwRfbList.u4NumElem)); - } - - /* 3. Indicate to host */ - prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prRetSwRfb, prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("nicRxProcessDataPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prRxCtrl = &prAdapter->rRxCtrl; - - nicRxFillRFB(prAdapter, prSwRfb); - -#if 1 /* Check 1x Pkt */ - if (prSwRfb->u2PacketLen > 14) { - PUINT_8 pc = (PUINT_8)prSwRfb->pvHeader; - UINT_16 u2Etype = 0; - - u2Etype = (pc[ETH_TYPE_LEN_OFFSET] << 8) | (pc[ETH_TYPE_LEN_OFFSET + 1]); - -#if CFG_SUPPORT_WAPI - if (u2Etype == ETH_P_1X || u2Etype == ETH_WPI_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#else - if (u2Etype == ETH_P_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#endif - else if (u2Etype == ETH_P_PRE_1X) { - DBGLOG(RSN, INFO, ("Pre R1X len=%d\n", prSwRfb->u2PacketLen)); - } - } -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - { - UINT_32 u4TcpUdpIpCksStatus; - - u4TcpUdpIpCksStatus = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - nicRxFillChksumStatus(prAdapter, prSwRfb, u4TcpUdpIpCksStatus); - - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - prStaRec = cnmGetStaRecByIndex(prAdapter, prHifRxHdr->ucStaRecIdx); - if(secCheckClassError(prAdapter, prSwRfb, prStaRec) == TRUE && - prAdapter->fgTestMode == FALSE) { -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt++; -#endif - - if((prRetSwRfb = qmHandleRxPackets(prAdapter, prSwRfb)) != NULL) { - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prRetSwRfb); - - switch(prRetSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prRetSwRfb); - RX_INC_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - break; - - default: - break; - } -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prRetSwRfb = prNextSwRfb; - } while(prRetSwRfb); - } - } - else { - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF event packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - P_WIFI_EVENT_T prEvent; - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("nicRxProcessEventPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prEvent = (P_WIFI_EVENT_T) prSwRfb->pucRecvBuff; - prGlueInfo = prAdapter->prGlueInfo; - - // Event Handling - switch(prEvent->ucEID) { - case EVENT_ID_CMD_RESULT: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - P_EVENT_CMD_RESULT prCmdResult; - prCmdResult = (P_EVENT_CMD_RESULT) ((PUINT_8)prEvent + EVENT_HDR_SIZE); - - /* CMD_RESULT should be only in response to Set commands */ - ASSERT(prCmdInfo->fgSetQuery == FALSE || prCmdInfo->fgNeedResp == TRUE); - - if(prCmdResult->ucStatus == 0) { // success - if(prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid == TRUE) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - } - else if(prCmdResult->ucStatus == 1) { // reject - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_FAILURE); - } - else if(prCmdResult->ucStatus == 2) { // unknown CMD - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_NOT_SUPPORTED); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - -#if 0 - case EVENT_ID_CONNECTION_STATUS: - /* OBSELETE */ - { - P_EVENT_CONNECTION_STATUS prConnectionStatus; - prConnectionStatus = (P_EVENT_CONNECTION_STATUS) (prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_CONNECTION_STATUS = %d\n", prConnectionStatus->ucMediaStatus); - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - - switch(prConnectionStatus->ucInfraMode) { - case 0: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_IBSS; - break; - case 1: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_INFRA; - break; - case 2: - default: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_AUTO_SWITCH; - break; - } - // always indicate to OS according to MSDN (re-association/roaming) - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - } - break; - - case EVENT_ID_SCAN_RESULT: - /* OBSELETE */ - break; -#endif - - case EVENT_ID_RX_ADDBA: - /* The FW indicates that an RX BA agreement will be established */ - qmHandleEventRxAddBa(prAdapter, prEvent); - break; - - case EVENT_ID_RX_DELBA: - /* The FW indicates that an RX BA agreement has been deleted */ - qmHandleEventRxDelBa(prAdapter, prEvent); - break; - - case EVENT_ID_LINK_QUALITY: -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - if (prEvent->u2PacketLen == EVENT_HDR_SIZE + sizeof(EVENT_LINK_QUALITY_EX)) { - P_EVENT_LINK_QUALITY_EX prLqEx = (P_EVENT_LINK_QUALITY_EX)(prEvent->aucBuffer); - - if (prLqEx->ucIsLQ0Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - if (prLqEx->ucIsLQ1Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_P2P_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - } - else { - /* For old FW, P2P may invoke link quality query, and make driver flag becone TRUE. */ - DBGLOG(P2P, WARN, ("Old FW version, not support P2P RSSI query.\n")); - - /* Must not use NETWORK_TYPE_P2P_INDEX, cause the structure is mismatch. */ - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); - } -#else - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); -#endif - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - #ifndef LINUX - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_GREATER && - prAdapter->rWlanInfo.rRssiTriggerValue >= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - else if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_LESS && - prAdapter->rWlanInfo.rRssiTriggerValue <= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - #endif - - break; - - case EVENT_ID_MIC_ERR_INFO: - { - P_EVENT_MIC_ERR_INFO prMicError; - //P_PARAM_AUTH_EVENT_T prAuthEvent; - P_STA_RECORD_T prStaRec; - - DBGLOG(RSN, EVENT, ("EVENT_ID_MIC_ERR_INFO\n")); - - prMicError = (P_EVENT_MIC_ERR_INFO)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - ASSERT(prStaRec); - - if (prStaRec) { - rsnTkipHandleMICFailure(prAdapter, prStaRec, (BOOLEAN)prMicError->u4Flags); - } - else { - DBGLOG(RSN, INFO, ("No STA rec!!\n")); - } -#if 0 - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, - (PVOID)prAdapter->rWlanInfo.rCurrBssId.arMacAddress, /* whsu:Todo? */ - PARAM_MAC_ADDR_LEN); - - if (prMicError->u4Flags != 0) { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - } - else { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); -#endif - } - break; - - case EVENT_ID_ASSOC_INFO: - { - P_EVENT_ASSOC_INFO prAssocInfo; - prAssocInfo = (P_EVENT_ASSOC_INFO)(prEvent->aucBuffer); - - kalHandleAssocInfo(prAdapter->prGlueInfo, prAssocInfo); - } - break; - - case EVENT_ID_802_11_PMKID: - { - P_PARAM_AUTH_EVENT_T prAuthEvent; - PUINT_8 cp; - UINT_32 u4LenOfUsedBuffer; - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - - u4LenOfUsedBuffer = (UINT_32)(prEvent->u2PacketLen - 8); - - prAuthEvent->arRequest[0].u4Length = u4LenOfUsedBuffer; - - cp = (PUINT_8)&prAuthEvent->arRequest[0]; - - /* Status type: PMKID Candidatelist Event */ - kalMemCopy(cp, (P_EVENT_PMKID_CANDIDATE_LIST_T)(prEvent->aucBuffer), prEvent->u2PacketLen - 8); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + u4LenOfUsedBuffer); - } - break; - -#if 0 - case EVENT_ID_ACTIVATE_STA_REC_T: - { - P_EVENT_ACTIVATE_STA_REC_T prActivateStaRec; - prActivateStaRec = (P_EVENT_ACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_ACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prActivateStaRec->ucStaRecIdx, - MAC2STR(prActivateStaRec->aucMacAddr)); - - qmActivateStaRec(prAdapter, - (UINT_32)prActivateStaRec->ucStaRecIdx, - ((prActivateStaRec->fgIsQoS) ? TRUE: FALSE), - prActivateStaRec->ucNetworkTypeIndex, - ((prActivateStaRec->fgIsAP) ? TRUE: FALSE), - prActivateStaRec->aucMacAddr); - - } - break; - - case EVENT_ID_DEACTIVATE_STA_REC_T: - { - P_EVENT_DEACTIVATE_STA_REC_T prDeactivateStaRec; - prDeactivateStaRec = (P_EVENT_DEACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_DEACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prDeactivateStaRec->ucStaRecIdx); - - qmDeactivateStaRec(prAdapter, - prDeactivateStaRec->ucStaRecIdx); - } - break; -#endif - - case EVENT_ID_SCAN_DONE: - scnEventScanDone(prAdapter, (P_EVENT_SCAN_DONE)(prEvent->aucBuffer)); - break; - - case EVENT_ID_TX_DONE: - { - P_EVENT_TX_DONE_T prTxDone; - prTxDone = (P_EVENT_TX_DONE_T)(prEvent->aucBuffer); - - DBGLOG(INIT, TRACE,("EVENT_ID_TX_DONE PacketSeq:%u ucStatus: %u SN: %u\n", - prTxDone->ucPacketSeq, prTxDone->ucStatus, prTxDone->u2SequenceNumber)); - - /* call related TX Done Handler */ - prMsduInfo = nicGetPendingTxMsduInfo(prAdapter, prTxDone->ucPacketSeq); - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - DBGLOG(INIT, TRACE, ("EVENT_ID_TX_DONE u4TimeStamp = %x u2AirDelay = %x\n", - prTxDone->au4Reserved1, prTxDone->au4Reserved2)); - - wnmReportTimingMeas(prAdapter, prMsduInfo->ucStaRecIndex, - prTxDone->au4Reserved1, prTxDone->au4Reserved1 + prTxDone->au4Reserved2); -#endif - - if(prMsduInfo) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, (ENUM_TX_RESULT_CODE_T)(prTxDone->ucStatus)); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - } - break; - - case EVENT_ID_SLEEPY_NOTIFY: - { - P_EVENT_SLEEPY_NOTIFY prEventSleepyNotify; - prEventSleepyNotify = (P_EVENT_SLEEPY_NOTIFY)(prEvent->aucBuffer); - - //DBGLOG(RX, INFO, ("ucSleepyState = %d\n", prEventSleepyNotify->ucSleepyState)); - - prAdapter->fgWiFiInSleepyState = (BOOLEAN)(prEventSleepyNotify->ucSleepyState); - } - break; - case EVENT_ID_BT_OVER_WIFI: -#if CFG_ENABLE_BT_OVER_WIFI - { - UINT_8 aucTmp[sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)]; - P_EVENT_BT_OVER_WIFI prEventBtOverWifi; - P_AMPC_EVENT prBowEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - - prEventBtOverWifi = (P_EVENT_BT_OVER_WIFI)(prEvent->aucBuffer); - - // construct event header - prBowEvent = (P_AMPC_EVENT)aucTmp; - - if(prEventBtOverWifi->ucLinkStatus == 0) { - // Connection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prBowEvent->aucPayload); - prBowLinkConnected->rChannel.ucChannelNum = prEventBtOverWifi->ucSelectedChannel; - kalMemZero(prBowLinkConnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - else { - // Disconnection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prBowEvent->aucPayload); - prBowLinkDisconnected->ucReason = 0; //@FIXME - kalMemZero(prBowLinkDisconnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - } - break; -#endif - case EVENT_ID_STATISTICS: - /* buffer statistics for further query */ - prAdapter->fgIsStatValid = TRUE; - prAdapter->rStatUpdateTime = kalGetTimeTick(); - kalMemCopy(&prAdapter->rStatStruct, prEvent->aucBuffer, sizeof(EVENT_STATISTICS)); - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - - case EVENT_ID_CH_PRIVILEGE: - cnmChMngrHandleChEvent(prAdapter, prEvent); - break; - - case EVENT_ID_BSS_ABSENCE_PRESENCE: - qmHandleEventBssAbsencePresence(prAdapter, prEvent); - break; - - case EVENT_ID_STA_CHANGE_PS_MODE: - qmHandleEventStaChangePsMode(prAdapter, prEvent); - break; -#if CFG_ENABLE_WIFI_DIRECT - case EVENT_ID_STA_UPDATE_FREE_QUOTA: - qmHandleEventStaUpdateFreeQuota(prAdapter, prEvent); - break; -#endif - case EVENT_ID_BSS_BEACON_TIMEOUT: - DBGLOG(INIT, INFO,("EVENT_ID_BSS_BEACON_TIMEOUT\n")); - - if (prAdapter->fgDisBcnLostDetection == FALSE) { - P_EVENT_BSS_BEACON_TIMEOUT_T prEventBssBeaconTimeout; - prEventBssBeaconTimeout = (P_EVENT_BSS_BEACON_TIMEOUT_T)(prEvent->aucBuffer); - - if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - aisBssBeaconTimeout(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - - p2pFsmRunEventBeaconTimeout(prAdapter); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - } -#endif - else { - DBGLOG(RX, ERROR, ("EVENT_ID_BSS_BEACON_TIMEOUT: (ucNetTypeIdx = %d)\n", - prEventBssBeaconTimeout->ucNetTypeIndex)); - } - } - - break; - case EVENT_ID_UPDATE_NOA_PARAMS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam; - prEventUpdateNoaParam = (P_EVENT_UPDATE_NOA_PARAMS_T)(prEvent->aucBuffer); - - if (prEventUpdateNoaParam->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - p2pProcessEvent_UpdateNOAParam(prAdapter, - prEventUpdateNoaParam->ucNetTypeIndex, - prEventUpdateNoaParam); - } else { - ASSERT(0); - } - } -#else - ASSERT(0); -#endif - break; - - case EVENT_ID_STA_AGING_TIMEOUT: -#if CFG_ENABLE_WIFI_DIRECT - { - if (prAdapter->fgDisStaAgingTimeoutDetection == FALSE) { - P_EVENT_STA_AGING_TIMEOUT_T prEventStaAgingTimeout; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - prEventStaAgingTimeout = (P_EVENT_STA_AGING_TIMEOUT_T)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventStaAgingTimeout->ucStaRecIdx); - if (prStaRec == NULL) { - break; - } - - DBGLOG(INIT, INFO,("EVENT_ID_STA_AGING_TIMEOUT %u " MACSTR "\n", - prEventStaAgingTimeout->ucStaRecIdx, MAC2STR(prStaRec->aucMacAddr))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - /* Call False Auth */ - if (prAdapter->fgIsP2PRegistered) { - p2pFuncDisconnect(prAdapter, prStaRec, TRUE, REASON_CODE_DISASSOC_INACTIVITY); - } - - - } /* gDisStaAgingTimeoutDetection */ - - } -#endif - break; - - case EVENT_ID_AP_OBSS_STATUS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - rlmHandleObssStatusEventPkt(prAdapter, (P_EVENT_AP_OBSS_STATUS_T) prEvent->aucBuffer); - } -#endif - break; - - case EVENT_ID_ROAMING_STATUS: -#if CFG_SUPPORT_ROAMING - { - P_ROAMING_PARAM_T prParam; - - prParam = (P_ROAMING_PARAM_T)(prEvent->aucBuffer); - roamingFsmProcessEvent(prAdapter, prParam); - } -#endif /* CFG_SUPPORT_ROAMING */ - break; - case EVENT_ID_SEND_DEAUTH: -#if DBG - { - P_WLAN_MAC_HEADER_T prWlanMacHeader; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - DBGLOG(RX, INFO, ("nicRx: aucAddr1: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr1))); - DBGLOG(RX, INFO, ("nicRx: aucAddr2: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr2))); - } -#endif - /* receive packets without StaRec */ - prSwRfb->pvHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - NULL, - prSwRfb, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - DBGLOG(RX, INFO, ("Send Deauth Error\n")); - } - break; - -#if CFG_SUPPORT_RDD_TEST_MODE - case EVENT_ID_UPDATE_RDD_STATUS: - { - P_EVENT_RDD_STATUS_T prEventRddStatus; - - prEventRddStatus = (P_EVENT_RDD_STATUS_T) (prEvent->aucBuffer); - - prAdapter->ucRddStatus = prEventRddStatus->ucRddStatus; - } - - break; -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case EVENT_ID_UPDATE_BWCS_STATUS: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS Event: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS Event: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_BWCS_UPDATE, - (PVOID) prEventBwcsStatus, - sizeof(PTA_IPC_T)); - } - - break; - - case EVENT_ID_UPDATE_BCM_DEBUG: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM FW status: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM FW status: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - } - - break; -#endif - - case EVENT_ID_ACCESS_REG: - case EVENT_ID_NIC_CAPABILITY: - case EVENT_ID_BASIC_CONFIG: - case EVENT_ID_MAC_MCAST_ADDR: - case EVENT_ID_ACCESS_EEPROM: - case EVENT_ID_TEST_STATUS: -#if CFG_SUPPORT_BUILD_DATE_CODE - case EVENT_ID_BUILD_DATE_CODE: -#endif - case EVENT_ID_GET_AIS_BSS_INFO: - default: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicRxProcessMgmtPacket is used to dispatch management frames -* to corresponding modules -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - UINT_8 ucSubtype; -#if CFG_SUPPORT_802_11W - BOOL fgMfgDrop = FALSE; -#endif - ASSERT(prAdapter); - ASSERT(prSwRfb); - - nicRxFillRFB(prAdapter, prSwRfb); - - ucSubtype = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FC_SUBTYPE )>> OFFSET_OF_FC_SUBTYPE; - -#if CFG_RX_PKTS_DUMP - { - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_16 u2TxFrameCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - u2TxFrameCtrl = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FRAME_TYPE); - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_MANAGEMENT)) { - if (u2TxFrameCtrl == MAC_FRAME_BEACON || - u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - - DBGLOG(SW4, INFO, ("QM RX MGT: net %u sta idx %u wlan idx %u ssn %u ptype %u subtype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - prSwRfb->ucPacketType, - ucSubtype, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prSwRfb->pvHeader, prSwRfb->u2PacketLen); - } - } - } -#endif - - if(prAdapter->fgTestMode == FALSE) { -#if CFG_MGMT_FRAME_HANDLING -#if CFG_SUPPORT_802_11W - fgMfgDrop = rsnCheckRxMgmt(prAdapter, prSwRfb, ucSubtype); - if (fgMfgDrop) { - #if DBG - LOG_FUNC("QM RX MGT: Drop Unprotected Mgmt frame!!!\n"); - #endif - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - return; - } - else -#endif - if(apfnProcessRxMgtFrame[ucSubtype]) { - switch(apfnProcessRxMgtFrame[ucSubtype](prAdapter, prSwRfb)){ - case WLAN_STATUS_PENDING: - return; - case WLAN_STATUS_SUCCESS: - case WLAN_STATUS_FAILURE: - break; - - default: - DBGLOG(RX, WARN, ("Unexpected MMPDU(0x%02X) returned with abnormal status\n", ucSubtype)); - break; - } - } -#endif - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicProcessRFBs is used to process RFBs in the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prRxCtrl->ucNumIndPacket = 0; - prRxCtrl->ucNumRetainedPacket = 0; - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb){ - switch(prSwRfb->ucPacketType){ - case HIF_RX_PKT_TYPE_DATA: - nicRxProcessDataPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_EVENT: - nicRxProcessEventPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_TX_LOOPBACK: - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - - case HIF_RX_PKT_TYPE_MANAGEMENT: - nicRxProcessMgmtPacket(prAdapter, prSwRfb); - break; - - default: - RX_INC_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - } - } - else { - break; - } - }while(TRUE); - - if (prRxCtrl->ucNumIndPacket > 0) { - RX_ADD_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT, prRxCtrl->ucNumIndPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT, prRxCtrl->ucNumRetainedPacket); - - //DBGLOG(RX, INFO, ("%d packets indicated, Retained cnt = %d\n", - // prRxCtrl->ucNumIndPacket, prRxCtrl->ucNumRetainedPacket)); - #if CFG_NATIVE_802_11 - kalRxIndicatePkts(prAdapter->prGlueInfo, (UINT_32)prRxCtrl->ucNumIndPacket, (UINT_32)prRxCtrl->ucNumRetainedPacket); - #else - kalRxIndicatePkts(prAdapter->prGlueInfo, prRxCtrl->apvIndPacket, (UINT_32)prRxCtrl->ucNumIndPacket); - #endif - } - -} /* end of nicRxProcessRFBs() */ - - -#if !CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the rx data from data port and setup RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @retval WLAN_STATUS_SUCCESS: SUCCESS -* @retval WLAN_STATUS_FAILURE: FAILURE -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0, u4ReadBytes; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4RegValue; - UINT_32 rxNum; - - DEBUGFUNC("nicRxReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(pucBuf); - DBGLOG(RX, TRACE, ("pucBuf= 0x%x, prHifRxHdr= 0x%x\n", pucBuf, prHifRxHdr)); - - do { - /* Read the RFB DW length and packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4RegValue); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - return WLAN_STATUS_FAILURE; - } - - //20091021 move the line to get the HIF RX header (for RX0/1) - if(u4RegValue == 0) { - DBGLOG(RX, ERROR, ("No RX packet\n")); - return WLAN_STATUS_FAILURE; - } - - u4PktLen = u4RegValue & BITS(0, 15); - if(u4PktLen != 0) { - rxNum = 0; - } - else { - rxNum = 1; - u4PktLen = (u4RegValue & BITS(16, 31)) >> 16; - } - - DBGLOG(RX, TRACE, ("RX%d: u4PktLen = %d\n", rxNum, u4PktLen)); - - //4 <4> Read Entire RFB and packet, include HW appended DW (Checksum Status) - u4ReadBytes = ALIGN_4(u4PktLen) + 4; - HAL_READ_RX_PORT(prAdapter, rxNum, u4ReadBytes, pucBuf, CFG_RX_MAX_PKT_SIZE); - - //20091021 move the line to get the HIF RX header - //u4PktLen = (UINT_32)prHifRxHdr->u2PacketLen; - if (u4PktLen != (UINT_32)prHifRxHdr->u2PacketLen) { - DBGLOG(RX, ERROR, ("Read u4PktLen = %d, prHifRxHdr->u2PacketLen: %d\n", - u4PktLen, prHifRxHdr->u2PacketLen)); - #if DBG - dumpMemory8((PUINT_8)prHifRxHdr, (prHifRxHdr->u2PacketLen > 4096) ? 4096 : prHifRxHdr->u2PacketLen); - #endif - ASSERT(0); - } - /* u4PktLen is byte unit, not inlude HW appended DW */ - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - return WLAN_STATUS_FAILURE; - } - - DBGLOG(RX, TRACE, ("Dump RX buffer, length = 0x%x\n", u4ReadBytes)); - DBGLOG_MEM8(RX, TRACE, pucBuf, u4ReadBytes); - }while(FALSE); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4HwAppendDW; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxReceiveRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - - // need to consider - if (nicRxReadBuffer(prAdapter, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("halRxFillRFB failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - prHifRxHdr = prSwRfb->prHifRxHdr; - u4HwAppendDW = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - DBGLOG(RX, TRACE, ("u4HwAppendDW = 0x%x\n", u4HwAppendDW)); - DBGLOG(RX, TRACE, ("u2PacketLen = 0x%x\n", prHifRxHdr->u2PacketLen)); - } -// while (RX_STATUS_TEST_MORE_FLAG(u4HwAppendDW)); - while (FALSE); - - return; - -} /* end of nicReceiveRFBs() */ - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4DataPort Specify which port to read -* @param u2RxLength Specify to the the rx packet length in Byte. -* @param prSwRfb the RFB to receive rx data. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - BOOL fgResult = TRUE; - - DEBUGFUNC("nicRxEnhanceReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - ASSERT(pucBuf); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - //DBGLOG(RX, TRACE, ("u2RxLength = %d\n", u2RxLength)); - - do { - //4 <1> Read RFB frame from MCR_WRDR0, include HW appended DW - HAL_READ_RX_PORT(prAdapter, - u4DataPort, - ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN), - pucBuf, - CFG_RX_MAX_PKT_SIZE); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - break; - } - - u4PktLen = (UINT_32)(prHifRxHdr->u2PacketLen); - //DBGLOG(RX, TRACE, ("u4PktLen = %d\n", u4PktLen)); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - //4 <2> if the RFB dw size or packet size is zero - if (u4PktLen == 0) { - DBGLOG(RX, ERROR, ("Packet Length = %d\n", u4PktLen)); - ASSERT(0); - break; - } - - //4 <3> if the packet is too large or too small - if (u4PktLen > CFG_RX_MAX_PKT_SIZE) { - DBGLOG(RX, TRACE, ("Read RX Packet Lentgh Error (%d)\n", u4PktLen)); - ASSERT(0); - break; - } - - u4Status = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - DBGLOG_MEM8(RX, TRACE, pucBuf, ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN)); - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i, rxNum; - UINT_16 u2RxPktNum, u2RxLength = 0, u2Tmp = 0; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOReceiveRFBs"); - - ASSERT(prAdapter); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - for (rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len : prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len); - - if(u2RxPktNum == 0) { - continue; - } - - for (i = 0; i < u2RxPktNum; i++) { - if(rxNum == 0) { - HAL_READ_RX_LENGTH(prAdapter, &u2RxLength, &u2Tmp); - } - else if(rxNum == 1) { - HAL_READ_RX_LENGTH(prAdapter, &u2Tmp, &u2RxLength); - } - - if (!u2RxLength) { - break; - } - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - ASSERT(prSwRfb); - - if (nicRxEnhanceReadBuffer(prAdapter, rxNum, u2RxLength, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("nicRxEnhanceRxReadBuffer failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - //prSDIOCtrl->au4RxLength[i] = 0; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - } - } - - prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len = 0; - prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len = 0; - - return; -}/* end of nicRxSDIOReceiveRFBs() */ - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - - -#if CFG_SDIO_RX_AGG -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO with Rx aggregation enabled -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ENHANCE_MODE_DATA_STRUCT_T prEnhDataStr; - P_RX_CTRL_T prRxCtrl; - P_SDIO_CTRL_T prSDIOCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 u4RxLength; - UINT_32 i, rxNum; - UINT_32 u4RxAggCount = 0, u4RxAggLength = 0; - UINT_32 u4RxAvailAggLen, u4CurrAvailFreeRfbCnt; - PUINT_8 pucSrcAddr; - P_HIF_RX_HEADER_T prHifRxHdr; - BOOL fgResult = TRUE; - BOOLEAN fgIsRxEnhanceMode; - UINT_16 u2RxPktNum; -#if CFG_SDIO_RX_ENHANCE - UINT_32 u4MaxLoopCount = CFG_MAX_RX_ENHANCE_LOOP_COUNT; -#endif - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOAggReceiveRFBs"); - - ASSERT(prAdapter); - prEnhDataStr = prAdapter->prSDIOCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - prSDIOCtrl = prAdapter->prSDIOCtrl; - -#if CFG_SDIO_RX_ENHANCE - fgIsRxEnhanceMode = TRUE; -#else - fgIsRxEnhanceMode = FALSE; -#endif - - do { -#if CFG_SDIO_RX_ENHANCE - /* to limit maximum loop for RX */ - u4MaxLoopCount--; - if (u4MaxLoopCount == 0) { - break; - } -#endif - - if(prEnhDataStr->rRxInfo.u.u2NumValidRx0Len == 0 && - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len == 0) { - break; - } - - for(rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prEnhDataStr->rRxInfo.u.u2NumValidRx0Len : prEnhDataStr->rRxInfo.u.u2NumValidRx1Len); - - // if this assertion happened, it is most likely a F/W bug - ASSERT(u2RxPktNum <= 16); - - if (u2RxPktNum > 16) - continue; - - if(u2RxPktNum == 0) - continue; - - #if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum++; - prRxCtrl->u4TotalRxPacketNum += u2RxPktNum; - #endif - - u4CurrAvailFreeRfbCnt = prRxCtrl->rFreeSwRfbList.u4NumElem; - - // if SwRfb is not enough, abort reading this time - if(u4CurrAvailFreeRfbCnt < u2RxPktNum) { - #if CFG_HIF_RX_STARVATION_WARNING - DbgPrint("FreeRfb is not enough: %d available, need %d\n", u4CurrAvailFreeRfbCnt, u2RxPktNum); - DbgPrint("Queued Count: %d / Dequeud Count: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt); - #endif - continue; - } - -#if CFG_SDIO_RX_ENHANCE - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE - (sizeof(ENHANCE_MODE_DATA_STRUCT_T) + 4/* extra HW padding */); -#else - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE; -#endif - u4RxAggCount = 0; - - for (i = 0; i < u2RxPktNum ; i++) { - u4RxLength = (rxNum == 0 ? - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - if (!u4RxLength) { - ASSERT(0); - break; - } - - if (ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN) < u4RxAvailAggLen) { - if (u4RxAggCount < u4CurrAvailFreeRfbCnt) { - u4RxAvailAggLen -= ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN); - u4RxAggCount++; - } - else { - // no FreeSwRfb for rx packet - ASSERT(0); - break; - } - } - else { - // CFG_RX_COALESCING_BUFFER_SIZE is not large enough - ASSERT(0); - break; - } - } - - u4RxAggLength = (CFG_RX_COALESCING_BUFFER_SIZE - u4RxAvailAggLen); - //DBGLOG(RX, INFO, ("u4RxAggCount = %d, u4RxAggLength = %d\n", - // u4RxAggCount, u4RxAggLength)); - - HAL_READ_RX_PORT(prAdapter, - rxNum, - u4RxAggLength, - prRxCtrl->pucRxCoalescingBufPtr, - CFG_RX_COALESCING_BUFFER_SIZE); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Agg Packet Error\n")); - continue; - } - - pucSrcAddr = prRxCtrl->pucRxCoalescingBufPtr; - for (i = 0; i < u4RxAggCount; i++) { - UINT_16 u2PktLength; - - u2PktLength = (rxNum == 0 ? - prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - ASSERT(prSwRfb); - kalMemCopy(prSwRfb->pucRecvBuff, pucSrcAddr, - ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN)); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - pucSrcAddr += ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN); - //prEnhDataStr->au4RxLength[i] = 0; - } - -#if CFG_SDIO_RX_ENHANCE - kalMemCopy(prAdapter->prSDIOCtrl, (pucSrcAddr + 4), sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - /* do the same thing what nicSDIOReadIntStatus() does */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - /* dispatch to interrupt handler with RX bits masked */ - nicProcessIST_impl(prAdapter, prSDIOCtrl->u4WHISR & (~(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT))); -#endif - } - -#if !CFG_SDIO_RX_ENHANCE - prEnhDataStr->rRxInfo.u.u2NumValidRx0Len = 0; - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len = 0; -#endif - } - while ((prEnhDataStr->rRxInfo.u.u2NumValidRx0Len - || prEnhDataStr->rRxInfo.u.u2NumValidRx1Len) - && fgIsRxEnhanceMode); - - return; -} -#endif /* CFG_SDIO_RX_AGG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Setup a RFB and allocate the os packet to the RFB -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_RESOURCES -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - PVOID pvPacket; - PUINT_8 pucRecvBuff; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (!prSwRfb->pvPacket) { - kalMemZero(prSwRfb, sizeof(SW_RFB_T)); - pvPacket = kalPacketAlloc(prAdapter->prGlueInfo, CFG_RX_MAX_PKT_SIZE, - &pucRecvBuff); - if (pvPacket == NULL) { - return WLAN_STATUS_RESOURCES; - } - - prSwRfb->pvPacket = pvPacket; - prSwRfb->pucRecvBuff= (PVOID)pucRecvBuff; - } - else { - kalMemZero(((PUINT_8)prSwRfb + OFFSET_OF(SW_RFB_T, prHifRxHdr)), - (sizeof(SW_RFB_T)-OFFSET_OF(SW_RFB_T, prHifRxHdr))); - } - - prSwRfb->prHifRxHdr = (P_HIF_RX_HEADER_T)(prSwRfb->pucRecvBuff); - - return WLAN_STATUS_SUCCESS; - -} /* end of nicRxSetupRFB() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to put a RFB back onto the "RFB with Buffer" list -* or "RFB without buffer" list according to pvPacket. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_QUE_ENTRY_T prQueEntry; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - prRxCtrl = &prAdapter->rRxCtrl; - prQueEntry = &prSwRfb->rQueEntry; - - ASSERT(prQueEntry); - - /* The processing on this RFB is done, so put it back on the tail of - our list */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb->pvPacket) { - QUEUE_INSERT_TAIL(&prRxCtrl->rFreeSwRfbList, prQueEntry); - } - else { - QUEUE_INSERT_TAIL(&prRxCtrl->rIndicatedRfbList, prQueEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - return; -} /* end of nicRxReturnRFB() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SDIO_INTR_ENHANCE - #if CFG_SDIO_RX_AGG - nicRxSDIOAggReceiveRFBs(prAdapter); - #else - nicRxSDIOReceiveRFBs(prAdapter); - #endif -#else - nicRxReceiveRFBs(prAdapter); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicRxProcessRFBs(prAdapter); - - return; - -} /* end of nicProcessRxInterrupt() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* @brief Used to update IP/TCP/UDP checksum statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param aeCSUM The array of checksum result. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(aeCSUM); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_SUCCESS_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_FAILED)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L3_PKT_COUNT); - } - else { - ASSERT(0); - } - - if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_FAILED_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L4_PKT_COUNT); - } - else { - ASSERT(0); - } - - return; -} /* end of nicRxUpdateCSUMStatistics() */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current status of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - - SPRINTF(pucCurrBuf, ("\n\nRX CTRL STATUS:")); - SPRINTF(pucCurrBuf, ("\n===============")); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/i BUF LIST :%9ld", prRxCtrl->rFreeSwRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/o BUF LIST :%9ld", prRxCtrl->rIndicatedRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nRECEIVED RFB LIST :%9ld", prRxCtrl->rReceivedRfbList.u4NumElem)); - - SPRINTF(pucCurrBuf, ("\n\n")); - - //*pu4Count = (UINT_32)((UINT_32)pucCurrBuf - (UINT_32)pucBuffer); - - return; -} /* end of nicRxQueryStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear RX related counters -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return - (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - RX_RESET_ALL_CNTS(prRxCtrl); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - -#define SPRINTF_RX_COUNTER(eCounter) \ - SPRINTF(pucCurrBuf, ("%-30s : %ld\n", #eCounter, (UINT_32)prRxCtrl->au8Statistics[eCounter])) - - SPRINTF_RX_COUNTER(RX_MPDU_TOTAL_COUNT); - SPRINTF_RX_COUNTER(RX_SIZE_ERR_DROP_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_INDICATION_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETURNED_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETAINED_COUNT); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - SPRINTF_RX_COUNTER(RX_CSUM_TCP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_TCP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L4_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L3_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_IP_V6_PKT_CCOUNT); -#endif - - //*pu4Count = (UINT_32)(pucCurrBuf - pucBuffer); - - nicRxClearStatistics(prAdapter); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the Response data from data port -* -* @param prAdapter pointer to the Adapter handler -* @param pucRspBuffer pointer to the Response buffer -* -* @retval WLAN_STATUS_SUCCESS: Response packet has been read -* @retval WLAN_STATUS_FAILURE: Read Response packet timeout or error occurred -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ) -{ - UINT_32 u4Value = 0, u4PktLen = 0, i = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4Time, u4Current; - - DEBUGFUNC("nicRxWaitResponse"); - - ASSERT(prAdapter); - ASSERT(pucRspBuffer); - ASSERT(ucPortIdx < 2); - - u4Time = (UINT_32)kalGetTimeTick(); - - do { - /* Read the packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4Value); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - if(ucPortIdx == 0) { - u4PktLen = u4Value & 0xFFFF; - } - else { - u4PktLen = (u4Value >> 16) & 0xFFFF; - } - - DBGLOG(RX, TRACE, ("i = %d, u4PktLen = %d\n", i, u4PktLen)); - - if (u4PktLen == 0) { - /* timeout exceeding check */ - u4Current = (UINT_32)kalGetTimeTick(); - - if((u4Current > u4Time) && ((u4Current - u4Time) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - else if(u4Current < u4Time && ((u4Current + (0xFFFFFFFF - u4Time)) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - - /* Response packet is not ready */ - kalUdelay(50); - - i++; - } - else if (u4PktLen > u4MaxRespBufferLen) { - DBGLOG(RX, WARN, ("Not enough Event Buffer: required length = 0x%x, available buffer length = %d\n", - u4PktLen, u4MaxRespBufferLen)); - - return WLAN_STATUS_FAILURE; - } - else { - HAL_PORT_RD(prAdapter, - ucPortIdx == 0 ? MCR_WRDR0 : MCR_WRDR1, - u4PktLen, - pucRspBuffer, - u4MaxRespBufferLen); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - DBGLOG(RX, TRACE, ("Dump Response buffer, length = 0x%x\n", - u4PktLen)); - DBGLOG_MEM8(RX, TRACE, pucRspBuffer, u4PktLen); - - *pu4Length = u4PktLen; - break; - } - } while(TRUE); - - return u4Status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to enable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxEnablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to disable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxDisablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in reordering module -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SW_RFB_T prSwRfb; - - ASSERT(prAdapter); - - if((prSwRfb = qmFlushRxQueues(prAdapter)) != NULL) { - do { - P_SW_RFB_T prNextSwRfb; - - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - // free - nicRxReturnRFB(prAdapter, prSwRfb); - - prSwRfb = prNextSwRfb; - } while(prSwRfb); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prActFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prSwRfb->u2PacketLen < sizeof(WLAN_ACTION_FRAME) - 1) { - return WLAN_STATUS_INVALID_PACKET; - } - prActFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - - switch (prActFrame->ucCategory) { - case CATEGORY_PUBLIC_ACTION: - - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessPublicAction(prAdapter, prSwRfb); - - p2pFuncValidateRxActionFrame( - prAdapter, prSwRfb); - - } - #endif - break; - - case CATEGORY_HT_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessHtAction(prAdapter, prSwRfb); - } - #endif - break; - case CATEGORY_VENDOR_SPECIFIC_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - p2pFuncValidateRxActionFrame(prAdapter, prSwRfb); - } - #endif - break; -#if CFG_SUPPORT_802_11W - case CATEGORY_SA_QUERT_ACTION: - { - P_HIF_RX_HEADER_T prHifRxHdr; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */ - ) { - if (!(prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC)) { - /* MFP test plan 5.3.3.4 */ - rsnSaQueryAction(prAdapter, prSwRfb); - } - else { - DBGLOG(RSN, TRACE, ("Un-Protected SA Query, do nothing\n")); - } - } - } - break; -#endif -#if CFG_SUPPORT_802_11V - case CATEGORY_WNM_ACTION: - { - wnmWNMAction(prAdapter, prSwRfb); - } - break; -#endif - default: - break; - } /* end of switch case */ - - return WLAN_STATUS_SUCCESS; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_tx.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_tx.c deleted file mode 100755 index 55f9027eaecc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/nic_tx.c +++ /dev/null @@ -1,2450 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_tx.c#1 $ -*/ - -/*! \file nic_tx.c - \brief Functions that provide TX operation in NIC Layer. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. -*/ - - - -/* -** $Log: nic_tx.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * remove unused variables. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 27 2010 wh.su - * NULL - * since the u2TxByteCount_UserPriority will or another setting, keep the overall buffer for avoid error - * - * 09 24 2010 wh.su - * NULL - * [WCXRP000000058][MT6620 Wi-Fi][Driver] Fail to handshake with WAPI AP due the 802.1x frame send to fw with extra bytes padding. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 05 2010 yuche.tsai - * NULL - * . - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add checking for TX descriptor poll. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * * - * -* 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * avoid refering to NDIS-specific data structure directly from non-glue layer. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * * 4) nicRxWaitResponse() revised - * * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-10 16:52:15 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-12-07 22:44:24 GMT mtk02752 -** correct assertion criterion -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-12-07 21:15:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-12-04 15:47:21 GMT mtk02752 -** + always append a dword of zero on TX path to avoid TX aggregation to triggered on uninitialized data -** + add more assertion for packet size check -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-12-04 14:51:55 GMT mtk02752 -** nicTxMsduInfo(): save ptr for next entry before attaching to qDataPort -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-12-04 11:54:54 GMT mtk02752 -** add 2 assertion for size check -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-12-03 16:20:35 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-30 10:57:10 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-30 09:20:43 GMT mtk02752 -** use TC4 instead of TC5 for command packet -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-27 11:08:11 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-26 20:31:22 GMT mtk02752 -** fill prMsduInfo->ucUserPriority -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-25 21:04:33 GMT mtk02752 -** fill u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-24 20:52:12 GMT mtk02752 -** integration with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-24 19:54:25 GMT mtk02752 -** nicTxRetransmitOfOsSendQue & nicTxData but changed to use nicTxMsduInfoList -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 17:53:18 GMT mtk02752 -** add nicTxCmd() for SD1_SD3_DATAPATH_INTEGRATION, which will append only HIF_TX_HEADER. seqNum, WIFI_CMD_T will be created inside oid handler -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-20 15:10:24 GMT mtk02752 -** use TxAccquireResource instead of accessing TCQ directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-17 22:40:57 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-17 17:35:40 GMT mtk02752 -** add nicTxMsduInfoList () implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-17 11:07:10 GMT mtk02752 -** add nicTxAdjustTcq() implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-16 22:28:38 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-16 21:45:32 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-13 13:29:56 GMT mtk01084 -** modify TX hdr format, fix tx retransmission issue -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 10:36:21 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-04 14:11:11 GMT mtk01084 -** modify TX SW data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-10-29 19:56:17 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-13 21:59:23 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-02 14:00:18 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-05-20 12:26:06 GMT mtk01461 -** Assign SeqNum to CMD Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-05-19 10:54:04 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-05-12 09:41:55 GMT mtk01461 -** Fix Query Command need resp issue -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-29 15:44:38 GMT mtk01461 -** Move OS dependent code to kalQueryTxOOBData() -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-28 10:40:03 GMT mtk01461 -** Add nicTxReleaseResource() for SDIO_STATUS_ENHANCE, and also fix the TX aggregation issue for 1x packet to TX1 port -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-21 09:50:47 GMT mtk01461 -** Update nicTxCmd() for moving wait RESP function call to wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-17 19:56:32 GMT mtk01461 -** Move the CMD_INFO_T related function to cmd_buf.c -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-17 18:14:40 GMT mtk01426 -** Update OOB query for TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:51:32 GMT mtk01426 -** Support PKGUIO -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-02 17:26:40 GMT mtk01461 -** Add virtual OOB for HIF LOOPBACK SW PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:54:43 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:53:47 GMT mtk01461 -** Add code for retransmit of rOsSendQueue, mpSendPacket(), and add code for TX Checksum offload, Loopback Test. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:33:51 GMT mtk01461 -** Add code for TX Data & Cmd Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:40 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:30 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:04 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial all variables in regard to SW TX Queues and -* all free lists of MSDU_INFO_T and SW_TFCB_T. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - PUINT_8 pucMemHandle; - P_MSDU_INFO_T prMsduInfo; - UINT_32 i; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxInitialize"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - //4 <1> Initialization of Traffic Class Queue Parameters - nicTxResetResource(prAdapter); - -#if CFG_SDIO_TX_AGG - prTxCtrl->pucTxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; -#endif /* CFG_SDIO_TX_AGG */ - - // allocate MSDU_INFO_T and link it into rFreeMsduInfoList - QUEUE_INITIALIZE(&prTxCtrl->rFreeMsduInfoList); - - pucMemHandle = prTxCtrl->pucTxCached; - for (i = 0 ; i < CFG_TX_MAX_PKT_NUM ; i++) { - prMsduInfo = (P_MSDU_INFO_T)pucMemHandle; - kalMemZero(prMsduInfo, sizeof(MSDU_INFO_T)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - pucMemHandle += ALIGN_4(sizeof(MSDU_INFO_T)); - } - - ASSERT(prTxCtrl->rFreeMsduInfoList.u4NumElem == CFG_TX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prTxCtrl->pucTxCached) == prTxCtrl->u4TxCachedSize); - - QUEUE_INITIALIZE(&prTxCtrl->rTxMgmtTxingQueue); - prTxCtrl->i4TxMgmtPendingNum = 0; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum = 0; - prTxCtrl->u4TotalTxPacketNum = 0; -#endif - - prTxCtrl->i4PendingFwdFrameCount = 0; - - qmInit(prAdapter); - - TX_RESET_ALL_CNTS(prTxCtrl); - - return; -} /* end of nicTxInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will check if has enough TC Buffer for incoming -* packet and then update the value after promise to provide the resources. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucTC Specify the resource of TC -* -* \retval WLAN_STATUS_SUCCESS Resource is available and been assigned. -* \retval WLAN_STATUS_RESOURCES Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_RESOURCES; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - -// DbgPrint("nicTxAcquireResource prTxCtrl->rTc.aucFreeBufferCount[%d]=%d\n", ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC]); - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC]) { - - prTxCtrl->rTc.aucFreeBufferCount[ucTC]--; - - DBGLOG(TX, EVENT, ("Acquire: TC = %d aucFreeBufferCount = %d\n", - ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC])); - - u4Status = WLAN_STATUS_SUCCESS; - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return u4Status; - -}/* end of nicTxAcquireResourceAndTFCBs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will do polling if FW has return the resource. -* Used when driver start up before enable interrupt. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Resource is available. -* @retval WLAN_STATUS_FAILURE Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - INT_32 i = NIC_TX_RESOURCE_POLLING_TIMEOUT; - UINT_32 au4WTSR[2]; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - if (ucTC >= TC_NUM) { - return WLAN_STATUS_FAILURE; - } - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - return WLAN_STATUS_SUCCESS; - } - - while (i-- > 0) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, au4WTSR); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if (nicTxReleaseResource(prAdapter, (PUINT_8)au4WTSR)) { - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - u4Status = WLAN_STATUS_SUCCESS; - break; - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - -#if DBG - { - INT_32 i4Times = NIC_TX_RESOURCE_POLLING_TIMEOUT - (i+1); - - if (i4Times) { - DBGLOG(TX, TRACE, ("Polling MCR_WTSR delay %d times, %d msec\n", - i4Times, (i4Times * NIC_TX_RESOURCE_POLLING_DELAY_MSEC))); - } - } -#endif /* DBG */ - - return u4Status; - -} /* end of nicTxPollingResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will release TC Buffer count according to -* the given TX_STATUS COUNTER after TX Done. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] u4TxStatusCnt Value of TX STATUS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ) -{ - PUINT_32 pu4Tmp = (PUINT_32)aucTxRlsCnt; - P_TX_CTRL_T prTxCtrl; - BOOLEAN bStatus = FALSE; - UINT_32 i; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - if (pu4Tmp[0] | pu4Tmp[1]) { - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - for (i = 0; i < TC_NUM; i++) { - prTxCtrl->rTc.aucFreeBufferCount[i] += aucTxRlsCnt[i]; - - if ((i==1) || (i==5)){ - DBGLOG(TX, EVENT, ("Release: i = %d aucFreeBufferCount = %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i])); - } - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); -#if 0 - for (i = 0; i < TC_NUM; i++) { - DBGLOG(INIT, TRACE, ("aucFreeBufferCount[%d]: %d, aucMaxNumOfBuffer[%d]: %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i], i, prTxCtrl->rTc.aucMaxNumOfBuffer[i])); - } - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[0]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[0]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[1]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[1]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[2]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[2]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[3]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[3]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[4]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[4]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[5]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[5]); -#endif - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX]); - bStatus = TRUE; - } - - return bStatus; -} /* end of nicTxReleaseResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reset TC Buffer Count to initialized value -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will return the value for other component -* which needs this information for making decisions -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval UINT_8 The number of corresponding TC number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(prTxCtrl); - - if (ucTC >= TC_NUM) { - return 0; - } - else { - return prTxCtrl->rTc.aucFreeBufferCount[ucTC]; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll aggregate frame(PACKET_INFO_T) -* corresponding to HIF TX port -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoListHead a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - QUE_T qDataPort0, qDataPort1; - WLAN_STATUS status; - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prMsduInfo = prMsduInfoListHead; - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - // Separate MSDU_INFO_T lists into 2 categories: for Port#0 & Port#1 - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); -#if DBG && 0 - LOG_FUNC("nicTxMsduInfoList Acquire TC %d net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prMsduInfo->ucTC, - prMsduInfo->ucNetworkType, - prMsduInfo->ucMacHeaderLength, - prMsduInfo->u2FrameLength, - prMsduInfo->ucPacketType, - prMsduInfo->fgIs802_1x, - prMsduInfo->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prMsduInfo->aucEthDestAddr)); -#endif - - switch(prMsduInfo->ucTC) { - case TC0_INDEX: - case TC1_INDEX: - case TC2_INDEX: - case TC3_INDEX: - case TC5_INDEX: // Broadcast/multicast data packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - case TC4_INDEX: // Command or 802.1x packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - default: - ASSERT(0); - break; - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 0, &qDataPort0); - } - - if(qDataPort1.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 1, &qDataPort1); - } - - return WLAN_STATUS_SUCCESS; -} - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - -#if CFG_PRINT_RTP_PROFILE -PKT_PROFILE_T rPrevRoundLastPkt; - -BOOLEAN -nicTxLifetimePrintCheckRTP ( - IN P_MSDU_INFO_T prPrevProfileMsduInfo, - IN P_PKT_PROFILE_T prPrevRoundLastPkt, - IN P_PKT_PROFILE_T prPktProfile, - IN OUT PBOOLEAN pfgGotFirst, - IN UINT_32 u4MaxDeltaTime, - IN UINT_8 ucSnToBePrinted - ) -{ - BOOLEAN fgPrintCurPkt = FALSE; - - if(u4MaxDeltaTime) { - //4 1. check delta between current round first pkt and prevous round last pkt - if(!*pfgGotFirst) { - *pfgGotFirst = TRUE; - - if(prPrevRoundLastPkt->fgIsValid) { - if(CHK_PROFILES_DELTA(prPktProfile, prPrevRoundLastPkt, u4MaxDeltaTime)) { - PRINT_PKT_PROFILE(prPrevRoundLastPkt, "PR"); - fgPrintCurPkt = TRUE; - } - } - } - - //4 2. check delta between current pkt and previous pkt - if(prPrevProfileMsduInfo) { - if(CHK_PROFILES_DELTA(prPktProfile, &prPrevProfileMsduInfo->rPktProfile, u4MaxDeltaTime)) { - PRINT_PKT_PROFILE(&prPrevProfileMsduInfo->rPktProfile, "P"); - fgPrintCurPkt = TRUE; - } - } - - //4 3. check delta of current pkt lifetime - if(CHK_PROFILE_DELTA(prPktProfile, u4MaxDeltaTime)) { - fgPrintCurPkt = TRUE; - } - } - - //4 4. print every X RTP packets - #if CFG_SUPPORT_WFD - if((ucSnToBePrinted != 0) && - (prPktProfile->u2RtpSn % ucSnToBePrinted) == 0) { - fgPrintCurPkt = TRUE; - } - #endif - - return fgPrintCurPkt; -} - -BOOLEAN -nicTxLifetimePrintCheckRTPSnSkip ( - IN P_MSDU_INFO_T prPrevProfileMsduInfo, - IN P_PKT_PROFILE_T prPrevRoundLastPkt, - IN P_PKT_PROFILE_T prPktProfile, - IN OUT PBOOLEAN pfgGotFirst - ) -{ - BOOLEAN fgPrintCurPkt = FALSE; - UINT_16 u2PredictRtpSn = 0; - - //4 1. check RTP SN between current round first pkt and prevous round last pkt - if(!*pfgGotFirst) { - *pfgGotFirst = TRUE; - - if(prPrevRoundLastPkt->fgIsValid) { - u2PredictRtpSn = prPrevRoundLastPkt->u2RtpSn + 1; - if(prPktProfile->u2RtpSn != u2PredictRtpSn) { - PRINT_PKT_PROFILE(prPrevRoundLastPkt, "PR"); - fgPrintCurPkt = TRUE; - } - } - } - - //4 2. check RTP SN between current pkt and previous pkt - if(prPrevProfileMsduInfo) { - u2PredictRtpSn = prPrevProfileMsduInfo->rPktProfile.u2RtpSn + 1; - if(prPktProfile->u2RtpSn != u2PredictRtpSn) { - PRINT_PKT_PROFILE(&prPrevProfileMsduInfo->rPktProfile, "P"); - fgPrintCurPkt = TRUE; - } - } - - return fgPrintCurPkt; -} -#endif - - -VOID -nicTxReturnMsduInfoProfiling ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead, prNextMsduInfo; - P_PKT_PROFILE_T prPktProfile; - UINT_16 u2MagicCode = 0; - - #if CFG_PRINT_RTP_PROFILE - P_MSDU_INFO_T prPrevProfileMsduInfo = NULL; - P_PKT_PROFILE_T prPrevRoundLastPkt = &rPrevRoundLastPkt; - - BOOLEAN fgPrintCurPkt = FALSE; - BOOLEAN fgGotFirst = FALSE; - UINT_8 ucSnToBePrinted = 0; - - UINT_32 u4MaxDeltaTime = 50; // in ms - #endif - - #if CFG_ENABLE_PER_STA_STATISTICS - UINT_32 u4PktPrintPeriod = 0; - #endif - - #if CFG_SUPPORT_WFD - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - if(prAdapter->fgIsP2PRegistered) { - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - u2MagicCode = prWfdCfgSettings->u2WfdMaximumTp; - if(prWfdCfgSettings->ucWfdEnable && (prWfdCfgSettings->u4WfdFlag & BIT(0))) { - u2MagicCode = 0xE040; - } - } - #endif - - #if CFG_PRINT_RTP_PROFILE - if((u2MagicCode >= 0xF000)) { - ucSnToBePrinted = (UINT_8)(u2MagicCode & BITS(0, 7)); - u4MaxDeltaTime = (UINT_8)(((u2MagicCode & BITS(8, 11)) >> 8) * 10); - } - else { - ucSnToBePrinted = 0; - u4MaxDeltaTime = 0; - } - #endif - - #if CFG_ENABLE_PER_STA_STATISTICS - if((u2MagicCode >= 0xE000) && (u2MagicCode < 0xF000)) { - u4PktPrintPeriod = (UINT_32)((u2MagicCode & BITS(0, 7)) * 32); - } - else { - u4PktPrintPeriod = 0; - } - #endif - - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - prPktProfile = &prMsduInfo->rPktProfile; - - if(prPktProfile->fgIsValid) { - - prPktProfile->rHifTxDoneTimestamp = kalGetTimeTick(); - - #if CFG_PRINT_RTP_PROFILE - #if CFG_PRINT_RTP_SN_SKIP - fgPrintCurPkt = nicTxLifetimePrintCheckRTPSnSkip( - prPrevProfileMsduInfo, - prPrevRoundLastPkt, - prPktProfile, - &fgGotFirst); - #else - fgPrintCurPkt = nicTxLifetimePrintCheckRTP( - prPrevProfileMsduInfo, - prPrevRoundLastPkt, - prPktProfile, - &fgGotFirst, - u4MaxDeltaTime, - ucSnToBePrinted); - #endif - - /* Print current pkt profile */ - if(fgPrintCurPkt) { - PRINT_PKT_PROFILE(prPktProfile, "C"); - } - - prPrevProfileMsduInfo = prMsduInfo; - fgPrintCurPkt = FALSE; - #endif - - #if CFG_ENABLE_PER_STA_STATISTICS - { - P_STA_RECORD_T prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - UINT_32 u4DeltaTime; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - if(prStaRec) { - u4DeltaTime = (UINT_32)(prPktProfile->rHifTxDoneTimestamp - prPktProfile->rHardXmitArrivalTimestamp); - - prStaRec->u4TotalTxPktsNumber++; - prStaRec->u4TotalTxPktsTime += u4DeltaTime; - if(u4DeltaTime > prStaRec->u4MaxTxPktsTime) { - prStaRec->u4MaxTxPktsTime = u4DeltaTime; - } - if(u4DeltaTime >= NIC_TX_TIME_THRESHOLD) { - prStaRec->u4ThresholdCounter++; - } - - if(u4PktPrintPeriod && (prStaRec->u4TotalTxPktsNumber >= u4PktPrintPeriod)) { - - DBGLOG(TX, TRACE, ("N[%4lu] A[%5lu] M[%4lu] T[%4lu] E[%4lu]\n", - prStaRec->u4TotalTxPktsNumber, - (prStaRec->u4TotalTxPktsTime/prStaRec->u4TotalTxPktsNumber), - prStaRec->u4MaxTxPktsTime, - prStaRec->u4ThresholdCounter, - prQM->au4QmTcResourceEmptyCounter[prStaRec->ucNetTypeIndex][TC2_INDEX])); - - prStaRec->u4TotalTxPktsNumber = 0; - prStaRec->u4TotalTxPktsTime = 0; - prStaRec->u4MaxTxPktsTime = 0; - prStaRec->u4ThresholdCounter = 0; - prQM->au4QmTcResourceEmptyCounter[prStaRec->ucNetTypeIndex][TC2_INDEX] = 0; - } - } - - } - #endif - } - - prMsduInfo = prNextMsduInfo; - }; - -#if CFG_PRINT_RTP_PROFILE - //4 4. record the lifetime of current round last pkt - if(prPrevProfileMsduInfo) { - prPktProfile = &prPrevProfileMsduInfo->rPktProfile; - prPrevRoundLastPkt->u2IpSn = prPktProfile->u2IpSn; - prPrevRoundLastPkt->u2RtpSn = prPktProfile->u2RtpSn; - prPrevRoundLastPkt->rHardXmitArrivalTimestamp = prPktProfile->rHardXmitArrivalTimestamp; - prPrevRoundLastPkt->rEnqueueTimestamp = prPktProfile->rEnqueueTimestamp; - prPrevRoundLastPkt->rDequeueTimestamp = prPktProfile->rDequeueTimestamp; - prPrevRoundLastPkt->rHifTxDoneTimestamp = prPktProfile->rHifTxDoneTimestamp; - prPrevRoundLastPkt->ucTcxFreeCount = prPktProfile->ucTcxFreeCount; - prPrevRoundLastPkt->fgIsPrinted = prPktProfile->fgIsPrinted; - prPrevRoundLastPkt->fgIsValid = TRUE; - } -#endif - - nicTxReturnMsduInfo(prAdapter, prMsduInfoListHead); - - return; -} - - -VOID -nicTxLifetimeRecordEn ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket - ) -{ - P_PKT_PROFILE_T prPktProfile = &prMsduInfo->rPktProfile; - - /* Enable packet lifetime profiling */ - prPktProfile->fgIsValid = TRUE; - - /* Packet arrival time at kernel Hard Xmit */ - prPktProfile->rHardXmitArrivalTimestamp = GLUE_GET_PKT_ARRIVAL_TIME(prPacket); - - /* Packet enqueue time */ - prPktProfile->rEnqueueTimestamp = (OS_SYSTIME)kalGetTimeTick(); - -} - -#if CFG_PRINT_RTP_PROFILE -/* - in: - data RTP packet pointer - size RTP size - return - 0:audio 1: video, -1:none -*/ -UINT8 checkRtpAV(PUINT_8 data, UINT_32 size) -{ - PUINT_8 buf = data+12; - while (buf+188 <= data+size) { - int pid = ((buf[1] << 8 ) & 0x1F00) | (buf[2] & 0xFF); - if (pid == 0 || pid == 0x100 || pid == 0x1000) { - buf += 188; - } - else if (pid == 0x1100){ - return 0; - } - else if (pid == 0x1011){ - return 1; - } - } - return -1; -} - -VOID -nicTxLifetimeCheckRTP ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket, - IN UINT_32 u4PacketLen, - IN UINT_8 ucNetworkType - ) -{ - struct sk_buff *prSkb = (struct sk_buff *) prPacket; - UINT_16 u2EtherTypeLen; - PUINT_8 aucLookAheadBuf = NULL; - P_PKT_PROFILE_T prPktProfile = &prMsduInfo->rPktProfile; - - //UINT_8 ucRtpHdrOffset = 28; - UINT_8 ucRtpSnOffset = 30; - //UINT_32 u4RtpSrcPort = 15550; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_WFD - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - BOOLEAN fgEnProfiling = FALSE; - - if(prAdapter->fgIsP2PRegistered) { - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - - #if CFG_PRINT_RTP_SN_SKIP - if(ucNetworkType == NETWORK_TYPE_P2P_INDEX) { - fgEnProfiling = TRUE; - } - else - #endif - if((prWfdCfgSettings->u2WfdMaximumTp >= 0xF000) && - (ucNetworkType == NETWORK_TYPE_P2P_INDEX)) { - fgEnProfiling = TRUE; - } - } - - if(fgEnProfiling == FALSE) { - //prPktProfile->fgIsValid = FALSE; - return; - } -#endif - - prTxCtrl = &prAdapter->rTxCtrl; - //prPktProfile->fgIsValid = FALSE; - - aucLookAheadBuf = prSkb->data; - - u2EtherTypeLen = (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET] << 8) | (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET + 1]); - - if ((u2EtherTypeLen == ETH_P_IP) && - (u4PacketLen >= LOOK_AHEAD_LEN)) { - PUINT_8 pucIpHdr = &aucLookAheadBuf[ETH_HLEN]; - UINT_8 ucIpVersion; - - ucIpVersion = (pucIpHdr[0] & IPVH_VERSION_MASK) >> IPVH_VERSION_OFFSET; - if (ucIpVersion == IPVERSION) { - if(pucIpHdr[IPV4_HDR_IP_PROTOCOL_OFFSET] == IP_PROTOCOL_UDP) { - - //if(checkRtpAV(&pucIpHdr[ucRtpHdrOffset], (u4PacketLen - ETH_HLEN - ucRtpHdrOffset)) == 0) { - - if(prPktProfile->fgIsValid == FALSE) { - nicTxLifetimeRecordEn(prAdapter, prMsduInfo, prPacket); - } - - prPktProfile->fgIsPrinted = FALSE; - - prPktProfile->ucTcxFreeCount = prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX]; - - /* RTP SN */ - prPktProfile->u2RtpSn = pucIpHdr[ucRtpSnOffset] << 8 | pucIpHdr[ucRtpSnOffset + 1]; - - /* IP SN */ - prPktProfile->u2IpSn = pucIpHdr[IPV4_HDR_IP_IDENTIFICATION_OFFSET] << 8 | - pucIpHdr[IPV4_HDR_IP_IDENTIFICATION_OFFSET + 1]; - - //} - } - } - } - -} -#endif -#if CFG_ENABLE_PER_STA_STATISTICS -VOID -nicTxLifetimeCheckByAC ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket, - IN UINT_8 ucPriorityParam - ) -{ - switch(ucPriorityParam){ - /* BK */ - //case 1: - //case 2: - - /* BE */ - //case 0: - //case 3: - - /* VI */ - case 4: - case 5: - - /* VO */ - case 6: - case 7: - nicTxLifetimeRecordEn(prAdapter, prMsduInfo, prPacket); - break; - default: - break; - } -} - -#endif - -VOID -nicTxLifetimeCheck ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket, - IN UINT_8 ucPriorityParam, - IN UINT_32 u4PacketLen, - IN UINT_8 ucNetworkType - ) -{ - P_PKT_PROFILE_T prPktProfile = &prMsduInfo->rPktProfile; - - /* Reset packet profile */ - prPktProfile->fgIsValid = FALSE; - - #if CFG_ENABLE_PER_STA_STATISTICS - nicTxLifetimeCheckByAC(prAdapter, prMsduInfo, prPacket, ucPriorityParam); - #endif - - #if CFG_PRINT_RTP_PROFILE - nicTxLifetimeCheckRTP(prAdapter, prMsduInfo, prPacket, u4PacketLen, ucNetworkType); - #endif - -} - - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll write frame(PACKET_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucPortIdx Port Number -* @param prQue a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_16 u2OverallBufferLength; - UINT_8 ucEtherTypeOffsetInWord; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4TxHdrSize; - UINT_32 u4ValidBufSize; - UINT_32 u4TotalLength; - P_TX_CTRL_T prTxCtrl; - QUE_T rFreeQueue; -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_8 ucChksumFlag; -#endif - - ASSERT(prAdapter); - ASSERT(ucPortIdx < 2); - ASSERT(prQue); - - prTxCtrl = &prAdapter->rTxCtrl; - u4ValidBufSize = prAdapter->u4CoalescingBufCachedSize; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum++; - prTxCtrl->u4TotalTxPacketNum += prQue->u4NumElem; -#endif - - QUEUE_INITIALIZE(&rFreeQueue); - - if(prQue->u4NumElem > 0) { - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_HEAD(prQue); - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - u4TotalLength = 0; - - while(prMsduInfo) { - - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prMsduInfo->prPacket; - - ASSERT(prNativePacket); - - u4TxHdrSize = TX_HDR_SIZE; - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - if (prMsduInfo->fgIs802_11) { - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - } - else { - ucEtherTypeOffsetInWord = - ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - } - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - if (prAdapter->u4CSUMFlags & - (CSUM_OFFLOAD_EN_TX_TCP | - CSUM_OFFLOAD_EN_TX_UDP | - CSUM_OFFLOAD_EN_TX_IP)) { - kalQueryTxChksumOffloadParam(prNativePacket, &ucChksumFlag); - - if (ucChksumFlag & TX_CS_IP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_IP_CSUM; - } - - if (ucChksumFlag & TX_CS_TCP_UDP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_TCP_CSUM; - } - } - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - if(prMsduInfo->rPktProfile.fgIsValid) { - prMsduInfo->rPktProfile.rDequeueTimestamp = kalGetTimeTick(); - } -#endif - -#if CFG_SDIO_TX_AGG - // attach to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, &rHwTxHeader, u4TxHdrSize); - u4TotalLength += u4TxHdrSize; - - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TotalLength); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TotalLength, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - u4TotalLength += ALIGN_4(prMsduInfo->u2FrameLength); - -#else - kalMemCopy(pucOutputBuf, &rHwTxHeader, u4TxHdrSize); - - /* Copy Frame Body */ - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TxHdrSize); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TxHdrSize, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - ASSERT(u2OverallBufferLength <= u4ValidBufSize); - - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); - - // send immediately -#endif - prNextMsduInfo = (P_MSDU_INFO_T) - QUEUE_GET_NEXT_ENTRY(&prMsduInfo->rQueEntry); - - if (prMsduInfo->eSrc == TX_PACKET_MGMT) { - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - KAL_SPIN_LOCK_DECLARATION(); - DBGLOG(INIT, TRACE,("Wait TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - /* only free MSDU when it is not a MGMT frame */ - QUEUE_INSERT_TAIL(&rFreeQueue, (P_QUE_ENTRY_T)prMsduInfo); - - if (prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_SUCCESS); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - } - - prMsduInfo = prNextMsduInfo; - } - -#if CFG_SDIO_TX_AGG - ASSERT(u4TotalLength <= u4ValidBufSize); - - #if CFG_DBG_GPIO_PINS - { - /* Start port write */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_HIGH); - } - #endif - - // send coalescing buffer - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - u4TotalLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); -#endif - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - #if CFG_SUPPORT_WFD && CFG_PRINT_RTP_PROFILE && !CFG_ENABLE_PER_STA_STATISTICS - do { - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - - if((prWfdCfgSettings->u2WfdMaximumTp >= 0xF000)) { - //Enable profiling - nicTxReturnMsduInfoProfiling(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); - } - else { - //Skip profiling - nicTxReturnMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); - } - }while(FALSE); - #else - nicTxReturnMsduInfoProfiling(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); - #endif -#else - // return - nicTxReturnMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); -#endif - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_WIFI_CMD_T prWifiCmd; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_8 ucPortIdx; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_8 ucEtherTypeOffsetInWord; - P_MSDU_INFO_T prMsduInfo; - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - - // <1> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { - // Broadcast/multicast data frames, 1x frames, command packets, MMPDU - ucPortIdx = 1; - } - - if(prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prCmdInfo->prPacket; - - ASSERT(prNativePacket); - - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = ((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - ucEtherTypeOffsetInWord = ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET); - - rHwTxHeader.ucStaRecIdx = prCmdInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = HIF_TX_HDR_BURST_END_MASK; - - rHwTxHeader.ucWlanHeaderLength = (ETH_HLEN & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (((UINT_8)(prCmdInfo->eNetworkType) << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((1 << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK); - - rHwTxHeader.u2SeqNo = 0; - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body Copy - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + TX_HDR_SIZE); - } - else if(prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - ASSERT(prMsduInfo->fgIs802_11 == TRUE); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body - kalMemCopy(pucOutputBuf + TX_HDR_SIZE, - prMsduInfo->prPacket, - prMsduInfo->u2FrameLength); - - // <4> Management Frame Post-Processing - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - - DBGLOG(INIT, TRACE,("Wait Cmd TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - prWifiCmd = (P_WIFI_CMD_T)prCmdInfo->pucInfoBuffer; - - // <2> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prWifiCmd->u2TxByteCount_UserPriority = u2OverallBufferLength; - prWifiCmd->ucEtherTypeOffset = 0; - prWifiCmd->ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET) - | (UINT_8)((HIF_TX_PKT_TYPE_CMD << HIF_TX_HDR_PACKET_TYPE_OFFSET) & (HIF_TX_HDR_PACKET_TYPE_MASK)); - - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - } - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} /* end of nicTxCmd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will clean up all the pending frames in internal SW Queues -* by return the pending TX packet to the system. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - nicTxFlush(prAdapter); - - // free MSDU_INFO_T from rTxMgmtMsduInfoList - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rTxMgmtTxingQueue, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - if(prMsduInfo) { - // the packet must be mgmt frame with tx done callback - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - ASSERT(prMsduInfo->pfTxDoneHandler != NULL); - - // invoke done handler - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_LIFE_TIMEOUT); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - break; - } - } while(TRUE); - - return; -} /* end of nicTxRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process the TX Done interrupt and pull in more pending frames in SW -* Queues for transmission. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessTxInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; -#if CFG_SDIO_INTR_ENHANCE - P_SDIO_CTRL_T prSDIOCtrl; -#else - UINT_32 au4TxCount[2]; -#endif /* CFG_SDIO_INTR_ENHANCE */ - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - /* Get the TX STATUS */ -#if CFG_SDIO_INTR_ENHANCE - - prSDIOCtrl = prAdapter->prSDIOCtrl; - #if DBG - //dumpMemory8((PUINT_8)prSDIOCtrl, sizeof(SDIO_CTRL_T)); - #endif - - nicTxReleaseResource(prAdapter, (PUINT_8)&prSDIOCtrl->rTxInfo); - kalMemZero(&prSDIOCtrl->rTxInfo, sizeof(prSDIOCtrl->rTxInfo)); - -#else - - HAL_MCR_RD(prAdapter, MCR_WTSR0, &au4TxCount[0]); - HAL_MCR_RD(prAdapter, MCR_WTSR1, &au4TxCount[1]); - DBGLOG(EMU, TRACE, ("MCR_WTSR0: 0x%x, MCR_WTSR1: 0x%x\n", au4TxCount[0], au4TxCount[1])); - - nicTxReleaseResource(prAdapter, (PUINT_8)au4TxCount); - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicTxAdjustTcq(prAdapter); - - // Indicate Service Thread - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return; -} /* end of nicProcessTxInterrupt() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function frees packet of P_MSDU_INFO_T linked-list -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_NATIVE_PACKET prNativePacket; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead; - P_TX_CTRL_T prTxCtrl; - - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - - while(prMsduInfo) { - prNativePacket = prMsduInfo->prPacket; - - if(prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_FAILURE); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - if (prMsduInfo->pfTxDoneHandler) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - cnmMemFree(prAdapter, prNativePacket); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function returns P_MSDU_INFO_T of MsduInfoList to TxCtrl->rfreeMsduInfoList -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead, prNextMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - switch(prMsduInfo->eSrc) { - case TX_PACKET_FORWARDING: - wlanReturnPacket(prAdapter, prMsduInfo->prPacket); - break; - case TX_PACKET_OS: - case TX_PACKET_OS_OID: - case TX_PACKET_MGMT: - default: - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = prNextMsduInfo; - }; - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function fills packet information to P_MSDU_INFO_T -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfo P_MSDU_INFO_T -* @param prPacket P_NATIVE_PACKET -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_8 ucPriorityParam; - UINT_8 ucMacHeaderLen; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - if (kalQoSFrameClassifierAndPacketInfo(prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == FALSE) { - return FALSE; - } - - #if CFG_ENABLE_PKT_LIFETIME_PROFILE - nicTxLifetimeCheck ( - prAdapter, - prMsduInfo, - prPacket, - ucPriorityParam, - u4PacketLen, - ucNetworkType); - #endif - - /* Save the value of Priority Parameter */ - GLUE_SET_PKT_TID(prPacket, ucPriorityParam); - - if (fgIs1x) { - GLUE_SET_PKT_FLAG_1X(prPacket); - } - - if (fgIsPAL) { - GLUE_SET_PKT_FLAG_PAL(prPacket); - } - - ucMacHeaderLen = ETH_HLEN; - - /* Save the value of Header Length */ - GLUE_SET_PKT_HEADER_LEN(prPacket, ucMacHeaderLen); - - /* Save the value of Frame Length */ - GLUE_SET_PKT_FRAME_LEN(prPacket, (UINT_16)u4PacketLen); - - /* Save the value of Arrival Time*/ - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - prMsduInfo->prPacket = prPacket; - prMsduInfo->fgIs802_1x = fgIs1x; - prMsduInfo->fgIs802_11 = FALSE; - prMsduInfo->ucNetworkType = ucNetworkType; - prMsduInfo->ucUserPriority = ucPriorityParam; - prMsduInfo->ucMacHeaderLength = ucMacHeaderLen; - prMsduInfo->u2FrameLength = (UINT_16)u4PacketLen; - COPY_MAC_ADDR(prMsduInfo->aucEthDestAddr, aucEthDestAddr); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function update TCQ values by passing current status to txAdjustTcQuotas -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Updated successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Num; - TX_TCQ_ADJUST_T rTcqAdjust; - P_TX_CTRL_T prTxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - qmAdjustTcQuotas(prAdapter, &rTcqAdjust, &prTxCtrl->rTc); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - for (u4Num = 0 ; u4Num < TC_NUM ; u4Num++) { - prTxCtrl->rTc.aucFreeBufferCount[u4Num] += rTcqAdjust.acVariation[u4Num]; - prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] += rTcqAdjust.acVariation[u4Num]; - - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[u4Num] >= 0); - ASSERT(prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] >= 0); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in STA/AC queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MSDU_INFO_T prMsduInfo; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - // ask Per STA/AC queue to be fllushed and return all queued packets - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmFlushTxQueues(prAdapter); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfo); - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - } - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_ENABLE_FW_DOWNLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* However this function is used for INIT_CMD. -* -* In order to avoid further maintainance issues, these 2 functions are separated -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_INIT_HIF_TX_HEADER_T prInitTxHeader; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 ucPortIdx; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(ucTC == TC0_INDEX); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - prInitTxHeader = (P_INIT_HIF_TX_HEADER_T)prCmdInfo->pucInfoBuffer; - - // <1> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prInitTxHeader->u2TxByteCount = u2OverallBufferLength; - prInitTxHeader->ucEtherTypeOffset = 0; - prInitTxHeader->ucCSflags = 0; - - // <2> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { // Broadcast/multicast data packets - ucPortIdx = 1; - } - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll reset TX resource counter to initial value used -* in F/W download state -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicTxInitResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - - return WLAN_STATUS_SUCCESS; - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function enqueues MSDU_INFO_T into queue management, -* or command queue -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfo Pointer to MSDU -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prNextMsduInfo, prRetMsduInfo, prMsduInfoHead; - QUE_T qDataPort0, qDataPort1; - P_CMD_INFO_T prCmdInfo; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - /* check how many management frame are being queued */ - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - - if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - // MMPDU: force stick to TC4 - prMsduInfo->ucTC = TC4_INDEX; - - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem) { - /* send to QM */ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfo = qmEnqueueTxPackets(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort0)); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - /* post-process for dropped packets */ - if(prRetMsduInfo != NULL) { // unable to enqueue - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfo); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfo); - } - } - - if(qDataPort1.u4NumElem) { - prMsduInfoHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort1); - - if(qDataPort1.u4NumElem > nicTxGetFreeCmdCount(prAdapter)) { - // not enough descriptors for sending - u4Status = WLAN_STATUS_FAILURE; - - // free all MSDUs - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - if (prMsduInfoHead->pfTxDoneHandler != NULL) { - prMsduInfoHead->pfTxDoneHandler(prAdapter, prMsduInfoHead, TX_RESULT_DROPPED_IN_DRIVER); - } - - - cnmMgtPktFree(prAdapter, prMsduInfoHead); - - prMsduInfoHead = prNextMsduInfo; - } - } - else { - /* send to command queue */ - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - GLUE_INC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_MANAGEMENT_FRAME; - prCmdInfo->u2InfoBufLen = prMsduInfoHead->u2FrameLength; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = (P_NATIVE_PACKET)prMsduInfoHead; - prCmdInfo->ucStaRecIndex = prMsduInfoHead->ucStaRecIndex; - prCmdInfo->eNetworkType = prMsduInfoHead->ucNetworkType; - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - } - else { - /* Cmd free count is larger than expected, but allocation fail. */ - ASSERT(0); - - u4Status = WLAN_STATUS_FAILURE; - cnmMgtPktFree(prAdapter, prMsduInfoHead); - } - - prMsduInfoHead = prNextMsduInfo; - } - } - } - - /* indicate service thread for sending */ - if(prTxCtrl->i4TxMgmtPendingNum > 0 - || kalGetTxPendingFrameCount(prAdapter->prGlueInfo) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function returns available count in command queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rFreeCmdList.u4NumElem; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/p2p_nic.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/p2p_nic.c deleted file mode 100755 index 592318b00454..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/p2p_nic.c +++ /dev/null @@ -1,203 +0,0 @@ -/* -** $Id: @(#) p2p_nic.c@@ -*/ - -/*! \file p2p_nic.c - \brief Wi-Fi Direct Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief When Probe Rsp & Beacon frame is received and decide a P2P device, -* this function will be invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param prEventScanResult Pointer of EVENT_SCAN_RESULT_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxAddP2pDevice ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ) -{ - P_P2P_INFO_T prP2pInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - UINT_32 u4Idx = 0; - BOOLEAN bUpdate = FALSE; - - PUINT_8 pucIeBuf = (PUINT_8)NULL; - UINT_16 u2IELength = 0; - UINT_8 zeroMac[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - - ASSERT(prAdapter); - - prP2pInfo = prAdapter->prP2pInfo; - - for (u4Idx = 0; u4Idx < prP2pInfo->u4DeviceNum; u4Idx++) { - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - if (EQUAL_MAC_ADDR(prTargetResult->aucDeviceAddr, prP2pResult->aucDeviceAddr)) { - bUpdate = TRUE; - - /* Backup OLD buffer result. */ - pucIeBuf = prTargetResult->pucIeBuf; - u2IELength = prTargetResult->u2IELength; - - /* Update Device Info. */ - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - /* See if new IE length is longer or not. */ - if ((u2RxIELength > u2IELength) && (u2IELength != 0)) { - /* Buffer is not enough. */ - u2RxIELength = u2IELength; - } - else if ((u2IELength == 0) && (u2RxIELength != 0)) { - /* RX new IE buf. */ - ASSERT(pucIeBuf == NULL); - pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2RxIELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - - /* Step to next buffer address. */ - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength); - } - - /* Restore buffer pointer. */ - prTargetResult->pucIeBuf = pucIeBuf; - - if (pucRxIEBuf) { - /* If new received IE is availabe. - * Replace the old one & update new IE length. - */ - kalMemCopy(pucIeBuf, pucRxIEBuf, u2RxIELength); - prTargetResult->u2IELength = u2RxIELength; - } - else { - /* There is no new IE information, keep the old one. */ - prTargetResult->u2IELength = u2IELength; - } - } - } - - if (!bUpdate) { - /* We would flush the whole scan result after each scan request is issued. - * If P2P device is too many, it may over the scan list. - */ - if ((u4Idx < CFG_MAX_NUM_BSS_LIST) && (UNEQUAL_MAC_ADDR(zeroMac, prP2pResult->aucDeviceAddr))) { /* whsu:XXX */ - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - //printk("DVC FND %d " MACSTR", " MACSTR "\n", prP2pInfo->u4DeviceNum, MAC2STR(prP2pResult->aucDeviceAddr), MAC2STR(prTargetResult->aucDeviceAddr)); - - if (u2RxIELength) { - prTargetResult->pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2IELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - else { - u2IELength = u2RxIELength; - } - - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2IELength); - - kalMemCopy((PVOID)prTargetResult->pucIeBuf, (PVOID)pucRxIEBuf, (UINT_32)u2IELength); - prTargetResult->u2IELength = u2IELength; - } - else { - prTargetResult->pucIeBuf = NULL; - prTargetResult->u2IELength = 0; - } - - prP2pInfo->u4DeviceNum++; - - } - else { - // TODO: Fixme to replace an old one. (?) - ASSERT(FALSE); - } - } -} /* nicRxAddP2pDevice */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/que_mgt.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/que_mgt.c deleted file mode 100755 index 7b30c2a936ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/nic/que_mgt.c +++ /dev/null @@ -1,4849 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/que_mgt.c#1 $ -*/ - -/*! \file "que_mgt.c" - \brief TX/RX queues management - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - - - -/* -** $Log: que_mgt.c $ -** -** 05 06 2013 yuche.tsai -** [ALPS00625499] [GN_WIFI]wifi???????? -** May fix P2P device interface & group interface conflict issue. -** -** Label: 20130506_ALPS_WIFI_FW_MT6628 - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 23 2012 eddie.chen - * [WCXRP00001194] [MT6620][DRV/FW] follow admission control bit to change the enqueue rule - * Change the enqueue policy when ACM = 1. - * - * 11 22 2011 yuche.tsai - * NULL - * Code refine, remove one #if 0 code. - * - * 11 19 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for tx - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Fix xlog format to hex format - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug msg for xlog. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Use short name for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 chinglan.wang - * NULL - * [WiFi WPS]Can't switch to new AP via WPS PBC when there existing a connection to another AP. - * - * 11 09 2011 chinglan.wang - * NULL - * [WiFi direct]Can't make P2P connect via PBC. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 25 2011 wh.su - * [WCXRP00001059] [MT6620 Wi-Fi][Driver][P2P] Fixed sometimes data (1x) will not indicate to upper layer due ba check un-expect - * let the Rx BA accept even the sta not valid. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 09 01 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * set rx window size as twice buffer size. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 03 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * force window size at least 16. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 07 07 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Add setEvent when free quota is updated. - * - * 07 05 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Send 1x when peer STA is in PS. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 yuche.tsai - * [WCXRP00000712] [Volunteer Patch][MT6620][Driver] Sending deauth issue when Hot spot is disabled. (GO is dissolved) - * Deauthentication frame is not bound to network active status. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 14 2011 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out[WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * Allow 802.1x can be send even the net is not active due the drver / fw sync issue. - * - * 01 13 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix typo and compile error. - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix WMM parameter condition for STA - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 01 12 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Update MQM for WMM IE generation method - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add per STA flow control when STA is in PS mode - * - * 01 03 2011 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update prStaRec->fgIsUapsdSupported flag. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * use the #14 and modify the add code for check MMPDU. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * only MMPDU not check the netActive flag. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * not check the netActive flag for mgmt . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 30 2010 yarco.yang - * NULL - * Fixed klockwork error message - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 10 2010 yarco.yang - * NULL - * Code refine - * - * 08 06 2010 yarco.yang - * NULL - * Update qmGetFrameAction() to allow P2P MGMT frame w/o STA_Record still can perform TX action - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 20 2010 yarco.yang - * - * Add to SetEvent when BSS is from Absent to Present or STA from PS to Awake - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * . - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Use fgInUse instead of fgIsValid for De-queue judgement - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * For MMPDU, STA_REC will be decided by caller module - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined the debug msg - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * comment out one assertion which refer to undefined data member. - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * -* 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * For TX packets with STA_REC index = STA_REC_INDEX_NOT_FOUND, use TC5 - * - * 03 01 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed STA_REC index determination bug (fgIsValid shall be checked) - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined function qmDetermineStaRecIndex() for BMCAST packets - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the 802.1x path - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-14 15:01:37 GMT MTK02468 -** Fixed casting for qmAddRxBaEntry() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:51:03 GMT mtk02752 -** remove SD1_SD3.. flag -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-09 14:07:25 GMT MTK02468 -** Added RX buffer reordering functions -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-04 13:34:16 GMT MTK02468 -** Modified Flush Queue function to let queues be reinitialized -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-04 13:18:25 GMT MTK02468 -** Added flushing per-Type queues code -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 23:39:49 GMT MTK02468 -** Added Debug msgs and fixed incorrect assert -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-26 23:50:27 GMT MTK02468 -** Bug fixing (qmDequeueTxPackets local variable initialization) -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-26 09:39:25 GMT mtk02752 -** correct and surpress PREfast warning -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-11-23 22:10:55 GMT mtk02468 -** Used SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 22:02:30 GMT mtk02468 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -OS_SYSTIME g_arMissTimeout[CFG_STA_REC_NUM][CFG_RX_MAX_BA_TID_NUM]; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentAvailableQuota, - IN UINT_8 ucTotalQuota - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for TX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4QueArrayIdx; - UINT_32 i; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmInit()\n"); -#if CFG_SUPPORT_QOS - prAdapter->rWifiVar.fgSupportQoS = TRUE; -#else - prAdapter->rWifiVar.fgSupportQoS = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_RX - prAdapter->rWifiVar.fgSupportAmpduRx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduRx = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_TX - prAdapter->rWifiVar.fgSupportAmpduTx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduTx = FALSE; -#endif - -#if CFG_SUPPORT_TSPEC - prAdapter->rWifiVar.fgSupportTspec = TRUE; -#else - prAdapter->rWifiVar.fgSupportTspec = FALSE; -#endif - -#if CFG_SUPPORT_UAPSD - prAdapter->rWifiVar.fgSupportUAPSD= TRUE; -#else - prAdapter->rWifiVar.fgSupportUAPSD = FALSE; -#endif - -#if CFG_SUPPORT_UL_PSMP - prAdapter->rWifiVar.fgSupportULPSMP = TRUE; -#else - prAdapter->rWifiVar.fgSupportULPSMP = FALSE; -#endif - -#if CFG_SUPPORT_RX_SGI - prAdapter->rWifiVar.u8SupportRxSgi20 = 0; - prAdapter->rWifiVar.u8SupportRxSgi40 = 0; -#else - prAdapter->rWifiVar.u8SupportRxSgi20 = 2; - prAdapter->rWifiVar.u8SupportRxSgi40 = 2; -#endif - -#if CFG_SUPPORT_RX_HT_GF - prAdapter->rWifiVar.u8SupportRxGf = 0; -#else - prAdapter->rWifiVar.u8SupportRxGf = 2; -#endif - - - //4 <2> Initialize other TX queues (queues not in STA_RECs) - for(u4QueArrayIdx = 0; u4QueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; u4QueArrayIdx++){ - QUEUE_INITIALIZE(&(prQM->arTxQueue[u4QueArrayIdx])); - } - - //4 <3> Initialize the RX BA table and RX queues - /* Initialize the RX Reordering Parameters and Queues */ - for(u4QueArrayIdx = 0; u4QueArrayIdx < CFG_NUM_OF_RX_BA_AGREEMENTS; u4QueArrayIdx++){ - prQM->arRxBaTable[u4QueArrayIdx].fgIsValid = FALSE; - QUEUE_INITIALIZE(&(prQM->arRxBaTable[u4QueArrayIdx].rReOrderQue)); - prQM->arRxBaTable[u4QueArrayIdx].u2WinStart = 0xFFFF; - prQM->arRxBaTable[u4QueArrayIdx].u2WinEnd = 0xFFFF; - - prQM->arRxBaTable[u4QueArrayIdx].fgIsWaitingForPktWithSsn = FALSE; - - } - prQM->ucRxBaCount = 0; - - kalMemSet(&g_arMissTimeout, 0, sizeof(g_arMissTimeout)); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - //4 <4> Initialize TC resource control variables - for(i = 0; i < TC_NUM; i++){ - prQM->au4AverageQueLen[i] = 0; - } - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - -// ASSERT(prQM->u4TimeToAdjust && prQM->u4TimeToUpdateQueLen); - - prQM->au4CurrentTcResource[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prQM->au4CurrentTcResource[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prQM->au4CurrentTcResource[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prQM->au4CurrentTcResource[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prQM->au4CurrentTcResource[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; /* Not adjustable (TX port 1)*/ - prQM->au4CurrentTcResource[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - prQM->au4MinReservedTcResource[TC0_INDEX] = QM_MIN_RESERVED_TC0_RESOURCE; - prQM->au4MinReservedTcResource[TC1_INDEX] = QM_MIN_RESERVED_TC1_RESOURCE; - prQM->au4MinReservedTcResource[TC2_INDEX] = QM_MIN_RESERVED_TC2_RESOURCE; - prQM->au4MinReservedTcResource[TC3_INDEX] = QM_MIN_RESERVED_TC3_RESOURCE; - prQM->au4MinReservedTcResource[TC4_INDEX] = QM_MIN_RESERVED_TC4_RESOURCE; /* Not adjustable (TX port 1)*/ - prQM->au4MinReservedTcResource[TC5_INDEX] = QM_MIN_RESERVED_TC5_RESOURCE; - - - prQM->au4GuaranteedTcResource[TC0_INDEX] = QM_GUARANTEED_TC0_RESOURCE; - prQM->au4GuaranteedTcResource[TC1_INDEX] = QM_GUARANTEED_TC1_RESOURCE; - prQM->au4GuaranteedTcResource[TC2_INDEX] = QM_GUARANTEED_TC2_RESOURCE; - prQM->au4GuaranteedTcResource[TC3_INDEX] = QM_GUARANTEED_TC3_RESOURCE; - prQM->au4GuaranteedTcResource[TC4_INDEX] = QM_GUARANTEED_TC4_RESOURCE; - prQM->au4GuaranteedTcResource[TC5_INDEX] = QM_GUARANTEED_TC5_RESOURCE; - - prQM->fgTcResourcePostAnnealing = FALSE; - - ASSERT(QM_INITIAL_RESIDUAL_TC_RESOURCE < 64); -#endif - -#if QM_TEST_MODE - prQM->u4PktCount = 0; - -#if QM_TEST_FAIR_FORWARDING - - prQM->u4CurrentStaRecIndexToEnqueue = 0; - { - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - P_STA_RECORD_T prStaRec; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - prStaRec = &prAdapter->arStaRec[1]; - ASSERT(prStaRec); - - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prStaRec->fgIsAp = TRUE; - COPY_MAC_ADDR((prStaRec)->aucMacAddr,aucMacAddr); - - } - -#endif - -#endif - -#if QM_FORWARDING_FAIRNESS -{ - UINT_32 i; - for (i=0; i < NUM_OF_PER_STA_TX_QUEUES; i++){ - prQM->au4ForwardCount[i] = 0; - prQM->au4HeadStaRecIndex[i] = 0; - } -} -#endif - -#if QM_TC_RESOURCE_EMPTY_COUNTER - kalMemZero(prQM->au4QmTcResourceEmptyCounter, sizeof(prQM->au4QmTcResourceEmptyCounter)); -#endif - -} - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ) -{ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DbgPrint("QM: ** TEST MODE **\n"); - - if(QM_TEST_STA_REC_DETERMINATION){ - if(prAdapter->arStaRec[0].fgIsValid){ - prAdapter->arStaRec[0].fgIsValid = FALSE; - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - } - else{ - prAdapter->arStaRec[0].fgIsValid = TRUE; - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - } - } - - if(QM_TEST_STA_REC_DEACTIVATION){ - /* Note that QM_STA_REC_HARD_CODING shall be set to 1 for this test */ - - if(prAdapter->arStaRec[0].fgIsValid){ - - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - qmDeactivateStaRec(prAdapter,0); - } - else{ - - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - qmActivateStaRec( - prAdapter, /* Adapter pointer */ - 0, /* STA_REC index from FW */ - TRUE, /* fgIsQoS */ - NETWORK_TYPE_AIS_INDEX, /* Network type */ - TRUE, /* fgIsAp */ - aucMacAddr /* MAC address */ - ); - } - } - - if(QM_TEST_FAIR_FORWARDING){ - if(prAdapter->arStaRec[1].fgIsValid){ - prQM->u4CurrentStaRecIndexToEnqueue ++; - prQM->u4CurrentStaRecIndexToEnqueue %= 2; - DbgPrint("QM: (Test) Switch to STA_REC[%ld]\n", prQM->u4CurrentStaRecIndexToEnqueue); - } - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Activate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* \param[in] fgIsQoS Set to TRUE if this is a QoS STA -* \param[in] pucMacAddr The MAC address of the STA -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - - //4 <1> Deactivate first - ASSERT(prStaRec); - - if(prStaRec->fgIsValid){ /* The STA_REC has been activated */ - DBGLOG(QM, WARN, ("QM: (WARNING) Activating a STA_REC which has been activated \n")); - DBGLOG(QM, WARN, ("QM: (WARNING) Deactivating a STA_REC before re-activating \n")); - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); // To flush TX/RX queues and del RX BA agreements - } - - //4 <2> Activate the STA_REC - /* Init the STA_REC */ - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->fgIsAp = (IS_AP_STA(prStaRec)) ? TRUE : FALSE;; - - /* Done in qmInit() or qmDeactivateStaRec() */ -#if 0 - /* At the beginning, no RX BA agreements have been established */ - for(i =0; iaprRxReorderParamRefTbl)[i] = NULL; - } -#endif - - DBGLOG(QM, INFO, ("QM: +STA[%ld]\n", prStaRec->ucIndex)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - P_STA_RECORD_T prStaRec; - UINT_32 i; - P_MSDU_INFO_T prFlushedTxPacketList = NULL; - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - //4<1> Flush TX queues - prFlushedTxPacketList = qmFlushStaTxQueues(prAdapter, u4StaRecIdx); - - if(prFlushedTxPacketList){ - wlanProcessQueuedMsduInfo(prAdapter, prFlushedTxPacketList); - } - - //4 <2> Flush RX queues and delete RX BA agreements - for(i =0; i < CFG_RX_MAX_BA_TID_NUM; i++){ - /* Delete the RX BA entry with TID = i */ - qmDelRxBaEntry(prAdapter, (UINT_8)u4StaRecIdx, (UINT_8)i, FALSE); - } - - //4 <3> Deactivate the STA_REC - prStaRec->fgIsValid = FALSE; - prStaRec->fgIsInPS = FALSE; - - DBGLOG(QM, INFO, ("QM: -STA[%ld]\n", u4StaRecIdx)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the network -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - - P_QUE_MGT_T prQM; - P_QUE_T prQue; - QUE_T rNeedToFreeQue; - QUE_T rTempQue; - P_QUE_T prNeedToFreeQue; - P_QUE_T prTempQue; - P_MSDU_INFO_T prMsduInfo; - - - prQM = &prAdapter->rQM; - prQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - - QUEUE_INITIALIZE(&rNeedToFreeQue); - QUEUE_INITIALIZE(&rTempQue); - - prNeedToFreeQue = &rNeedToFreeQue; - prTempQue = &rTempQue; - - QUEUE_MOVE_ALL(prTempQue, prQue); - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - while (prMsduInfo) { - - if(prMsduInfo->ucNetworkType == eNetworkTypeIdx) { - QUEUE_INSERT_TAIL(prNeedToFreeQue, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(prQue, (P_QUE_ENTRY_T)prMsduInfo); - } - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - } - if(QUEUE_IS_NOT_EMPTY(prNeedToFreeQue)) { - wlanProcessQueuedMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(prNeedToFreeQue)); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush all TX queues -* -* \param[in] (none) -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucStaArrayIdx; - UINT_8 ucQueArrayIdx; - - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushTxQueues()\n")); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - /* Concatenate all MSDU_INFOs in per-STA queues */ - for(ucStaArrayIdx = 0; ucStaArrayIdx < CFG_NUM_OF_STA_RECORD; ucStaArrayIdx++){ - - /* Always check each STA_REC when flushing packets no matter it is inactive or active */ - #if 0 - if(!prAdapter->arStaRec[ucStaArrayIdx].fgIsValid){ - continue; /* Continue to check the next STA_REC */ - } - #endif - - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - } - - /* Flush per-Type queues */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; ucQueArrayIdx++){ - - if(QUEUE_IS_EMPTY(&(prQM->arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prQM->arTxQueue[ucQueArrayIdx]); - - } - - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, NULL); - } - - return prMsduInfoListHead; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush TX packets for a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - UINT_8 ucQueArrayIdx; - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaTxQueues(%ld)\n", u4StaRecIdx)); - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Concatenate all MSDU_INFOs in TX queues of this STA_REC */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prStaRec->arTxQueue[ucQueArrayIdx]))){ - continue; - } - - if(!prMsduInfoListHead){ - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = - (P_MSDU_INFO_T)QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prStaRec->arTxQueue[ucQueArrayIdx]); - - } - -#if 0 - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx)); - } - else { - prMsduInfoListHead = nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx); - } -#endif - - return prMsduInfoListHead; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets -* -* \param[in] (none) -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - prSwRfbListHead = prSwRfbListTail = NULL; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushRxQueues()\n")); - - for(i =0; iarRxBaTable[i].rReOrderQue))){ - if(!prSwRfbListHead){ - - /* The first MSDU_INFO is found */ - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prSwRfbListTail, - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue))); - - prSwRfbListTail = (P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - - QUEUE_INITIALIZE(&(prQM->arRxBaTable[i].rReOrderQue)); - - } - else{ - continue; - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets with respect to a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* \param[in] u4Tid TID -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushStaRxQueue( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx, - IN UINT_32 u4Tid - ) -{ - //UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_RX_BA_ENTRY_T prReorderQueParm; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaRxQueues(%ld)\n", u4StaRecIdx)); - - prSwRfbListHead = prSwRfbListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Obtain the RX BA Entry pointer */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[u4Tid]); - - /* Note: For each queued packet, prCurrSwRfb->eDst equals RX_PKT_DESTINATION_HOST */ - if(prReorderQueParm){ - - if(QUEUE_IS_NOT_EMPTY(&(prReorderQueParm->rReOrderQue))){ - - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prReorderQueParm->rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prReorderQueParm->rReOrderQue)); - - - QUEUE_INITIALIZE(&(prReorderQueParm->rReOrderQue)); - - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enqueue TX packets -* -* \param[in] prMsduInfoListHead Pointer to the list of TX packets -* -* \return The freed packets, which are not enqueued -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfoReleaseList; - P_MSDU_INFO_T prCurrentMsduInfo; - P_MSDU_INFO_T prNextMsduInfo; - - P_STA_RECORD_T prStaRec; - P_QUE_T prTxQue; - QUE_T rNotEnqueuedQue; - - - UINT_8 ucPacketType; - UINT_8 ucTC; - P_QUE_MGT_T prQM = &prAdapter->rQM; - UINT_8 aucNextUP[WMM_AC_INDEX_NUM] = { 1 /* BEtoBK*/, 1 /*na*/, 0/*VItoBE*/ , 4 /*VOtoVI*/}; - - DBGLOG(QM, LOUD, ("Enter qmEnqueueTxPackets\n")); - - ASSERT(prMsduInfoListHead); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - { - //UINT_32 i; - //4 <0> Update TC resource control related variables - /* Keep track of the queue length */ - if (--prQM->u4TimeToUpdateQueLen == 0){ - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - qmUpdateAverageTxQueLen(prAdapter); - } - } -#endif - - /* Push TX packets into STA_REC (for UNICAST) or prAdapter->rQM (for BMCAST) */ - prStaRec = NULL; - prMsduInfoReleaseList = NULL; - prCurrentMsduInfo = NULL; - QUEUE_INITIALIZE(&rNotEnqueuedQue); - prNextMsduInfo = prMsduInfoListHead; - - do{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgCheckACMAgain; - ENUM_WMM_ACI_T eAci = WMM_AC_BE_INDEX; - prCurrentMsduInfo = prNextMsduInfo; - prNextMsduInfo = QM_TX_GET_NEXT_MSDU_INFO(prCurrentMsduInfo); - ucTC = TC1_INDEX; - - //4 <1> Lookup the STA_REC index - /* The ucStaRecIndex will be set in this function */ - qmDetermineStaRecIndex(prAdapter, prCurrentMsduInfo); - ucPacketType = HIF_TX_PACKET_TYPE_DATA; - - DBGLOG(QM, LOUD , ("***** ucStaRecIndex = %d *****\n", - prCurrentMsduInfo->ucStaRecIndex)); - - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prCurrentMsduInfo->ucNetworkType]); - - if(IS_NET_ACTIVE(prAdapter, prCurrentMsduInfo->ucNetworkType)) { - - switch (prCurrentMsduInfo->ucStaRecIndex){ - case STA_REC_INDEX_BMCAST: - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucTC = TC5_INDEX; -#if 0 - if(prCurrentMsduInfo->ucNetworkType == NETWORK_TYPE_P2P_INDEX - && prCurrentMsduInfo->eSrc != TX_PACKET_MGMT - ) { - if(LINK_IS_EMPTY(&prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].rStaRecOfClientList)) { - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_AP_BORADCAST_DROP); - } - } -#endif - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_23); - break; - - case STA_REC_INDEX_NOT_FOUND: - ucTC = TC5_INDEX; - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - - /* if the packet is the forward type. the packet should be freed */ - DBGLOG(QM, TRACE, ("Forwarding packet but Sta is STA_REC_INDEX_NOT_FOUND\n")); - //prTxQue = &rNotEnqueuedQue; - } - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_NO_STA_REC]; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_24); - - break; - - default: - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prCurrentMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsValid); - - if(prCurrentMsduInfo->ucUserPriority < 8) { - QM_DBG_CNT_INC(prQM, prCurrentMsduInfo->ucUserPriority + 15); - /* QM_DBG_CNT_15 */ /* QM_DBG_CNT_16 */ /* QM_DBG_CNT_17 */ /* QM_DBG_CNT_18 */ - /* QM_DBG_CNT_19 */ /* QM_DBG_CNT_20 */ /* QM_DBG_CNT_21 */ /* QM_DBG_CNT_22 */ - } - - eAci = WMM_AC_BE_INDEX; - do { - fgCheckACMAgain = FALSE; - if (prStaRec->fgIsQoS){ - switch(prCurrentMsduInfo->ucUserPriority){ - case 1: - case 2: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC0]; - ucTC = TC0_INDEX; - eAci = WMM_AC_BK_INDEX; - break; - case 0: - case 3: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - break; - case 4: - case 5: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC2]; - ucTC = TC2_INDEX; - eAci = WMM_AC_VI_INDEX; - break; - case 6: - case 7: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC3]; - ucTC = TC3_INDEX; - eAci = WMM_AC_VO_INDEX; - break; - default: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - ASSERT(0); - break; - } - if(prBssInfo->arACQueParms[eAci].fgIsACMSet && eAci != WMM_AC_BK_INDEX) { - prCurrentMsduInfo->ucUserPriority = aucNextUP[eAci]; - fgCheckACMAgain = TRUE; - } - } - else{ - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - } - } - while(fgCheckACMAgain); - - //LOG_FUNC ("QoS %u UP %u TC %u",prStaRec->fgIsQoS,prCurrentMsduInfo->ucUserPriority, ucTC); - - break; /*default */ - } /* switch (prCurrentMsduInfo->ucStaRecIndex) */ - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - if(prTxQue->u4NumElem > 32) { - DBGLOG(QM, INFO, ("Drop the Packet for full Tx queue (forwarding) Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_FORWARD_OVERFLOW_DROP); - } - } - - } - else { - - DBGLOG(QM, INFO, ("Drop the Packet for inactive Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_31); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_INACTIVE_BSS_DROP); - } - - //4 <3> Fill the MSDU_INFO for constructing HIF TX header - - /* TODO: Fill MSDU_INFO according to the network type, - * EtherType, and STA status (for PS forwarding control). - */ - - /* Note that the Network Type Index and STA_REC index are determined in - * qmDetermineStaRecIndex(prCurrentMsduInfo). - */ - QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET( - prCurrentMsduInfo, /* MSDU_INFO ptr */ - ucTC, /* TC tag */ - ucPacketType, /* Packet Type */ - 0, /* Format ID */ - prCurrentMsduInfo->fgIs802_1x, /* Flag 802.1x */ - prCurrentMsduInfo->fgIs802_11, /* Flag 802.11 */ - 0, /* PAL LLH */ - 0, /* ACL SN */ - PS_FORWARDING_TYPE_NON_PS, /* PS Forwarding Type */ - 0 /* PS Session ID */ - ); - - //4 <4> Enqueue the packet - QUEUE_INSERT_TAIL(prTxQue, (P_QUE_ENTRY_T)prCurrentMsduInfo); -#if QM_TC_RESOURCE_EMPTY_COUNTER - { - P_TX_CTRL_T prTxCtrl = &prAdapter->rTxCtrl; - - if(prTxCtrl->rTc.aucFreeBufferCount[ucTC] == 0) { - prQM->au4QmTcResourceEmptyCounter[prCurrentMsduInfo->ucNetworkType][ucTC]++; - /* - DBGLOG(QM, TRACE, ("TC%d Q Empty Count: [%d]%ld\n", - ucTC, - prCurrentMsduInfo->ucNetworkType, - prQM->au4QmTcResourceEmptyCounter[prCurrentMsduInfo->ucNetworkType][ucTC])); - */ - } - - } -#endif - -#if QM_TEST_MODE - if (++prQM->u4PktCount == QM_TEST_TRIGGER_TX_COUNT){ - prQM->u4PktCount = 0; - qmTestCases(prAdapter); - } - -#endif - - DBGLOG(QM, LOUD, ("Current queue length = %u\n", prTxQue->u4NumElem)); - }while(prNextMsduInfo); - - if( QUEUE_IS_NOT_EMPTY(&rNotEnqueuedQue) ) { - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rNotEnqueuedQue), NULL); - prMsduInfoReleaseList = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rNotEnqueuedQue); - } - - - return prMsduInfoReleaseList; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Determine the STA_REC index for a packet -* -* \param[in] prMsduInfo Pointer to the packet -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - - P_STA_RECORD_T prTempStaRec; - //P_QUE_MGT_T prQM = &prAdapter->rQM; - - prTempStaRec = NULL; - - ASSERT(prMsduInfo); - - //4 <1> DA = BMCAST - if (IS_BMCAST_MAC_ADDR(prMsduInfo->aucEthDestAddr)){ - /* For intrastructure mode and P2P (playing as a GC), BMCAST frames shall be sent to the AP. - * FW shall take care of this. The host driver is not able to distinguish these cases. */ - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_BMCAST; - DBGLOG(QM, LOUD, ("TX with DA = BMCAST\n")); - return; - } - - - //4 <2> Check if an AP STA is present - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - - if((prTempStaRec->ucNetTypeIndex == prMsduInfo->ucNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - - - - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if (prTempStaRec->fgIsValid){ - if (EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, prMsduInfo->aucEthDestAddr)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - DBGLOG(QM, LOUD, ("QM: TX with STA_REC_INDEX_NOT_FOUND\n")); - - -#if (QM_TEST_MODE && QM_TEST_FAIR_FORWARDING) - prMsduInfo->ucStaRecIndex = (UINT_8)prQM->u4CurrentStaRecIndexToEnqueue; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a STA_REC for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (TC0_INDEX to TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentQuota, - IN UINT_8 ucTotalQuota - ) -{ - -#if QM_FORWARDING_FAIRNESS - UINT_32 i; /* Loop for */ - - PUINT_32 pu4HeadStaRecIndex; /* The Head STA index */ - PUINT_32 pu4HeadStaRecForwardCount; /* The total forwarded packets for the head STA */ - - P_STA_RECORD_T prStaRec; /* The current focused STA */ - P_BSS_INFO_T prBssInfo; /* The Bss for current focused STA */ - P_QUE_T prCurrQueue; /* The current TX queue to dequeue */ - P_MSDU_INFO_T prDequeuedPkt; /* The dequeued packet */ - - UINT_32 u4ForwardCount; /* To remember the total forwarded packets for a STA */ - UINT_32 u4MaxForwardCount; /* The maximum number of packets a STA can forward */ - UINT_32 u4Resource; /* The TX resource amount */ - - BOOLEAN fgChangeHeadSta; /* Whether a new head STA shall be determined at the end of the function */ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - PUINT_8 pucFreeQuota; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - - if(!ucCurrentQuota){ - DBGLOG(TX, LOUD, ("@@@@@ TC = %u ucCurrentQuota = %u @@@@@\n", - ucTC, ucCurrentQuota)); - return; - } - - u4Resource = ucCurrentQuota; - - //4 <1> Determine the head STA - /* The head STA shall be an active STA */ - - pu4HeadStaRecIndex = &(prQM->au4HeadStaRecIndex[ucTC]); - pu4HeadStaRecForwardCount = &(prQM->au4ForwardCount[ucTC]); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Init Head STA = %u Resource = %u\n", - ucTC, *pu4HeadStaRecIndex, u4Resource)); - - - /* From STA[x] to STA[x+1] to STA[x+2] to ... to STA[x] */ - for (i=0; i < CFG_NUM_OF_STA_RECORD + 1; i++){ - prStaRec = &prAdapter->arStaRec[(*pu4HeadStaRecIndex)]; - ASSERT(prStaRec); - - /* Only Data frame (1x was not included) will be queued in */ - if (prStaRec->fgIsValid){ - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - /* Determine how many packets the head STA is allowed to send in a round */ - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_25); - u4MaxForwardCount = ucTotalQuota; -#if CFG_ENABLE_WIFI_DIRECT - - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } /* fgIsInPS */ -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - /* Determine whether the head STA can continue to forward packets in this round */ - if((*pu4HeadStaRecForwardCount) < u4MaxForwardCount){ - break; - } - - } /* prStaRec->fgIsValid */ - else{ - /* The current Head STA has been deactivated, so search for a new head STA */ - prStaRec = NULL; - prBssInfo = NULL; - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - - /* Reset the forwarding count before searching (since this is for a new selected STA) */ - (*pu4HeadStaRecForwardCount) = 0; - } - } /* i < CFG_NUM_OF_STA_RECORD + 1 */ - - /* All STA_RECs are inactive, so exit */ - if (!prStaRec){ - /* Under concurrent, it is possible that there is no candidcated STA.*/ - //DBGLOG(TX, EVENT, ("All STA_RECs are inactive\n")); - return; - } - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Round Head STA = %lu\n", - ucTC, *pu4HeadStaRecIndex)); - - //4 <2> Dequeue packets from the head STA - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - prDequeuedPkt = NULL; - fgChangeHeadSta = FALSE; - - while(prCurrQueue){ - - -#if QM_DEBUG_COUNTER - - if(ucTC <= TC4_INDEX) { - if(QUEUE_IS_EMPTY(prCurrQueue)) { - QM_DBG_CNT_INC(prQM, ucTC); - /* QM_DBG_CNT_00 */ /* QM_DBG_CNT_01 */ /* QM_DBG_CNT_02 */ /* QM_DBG_CNT_03 */ /* QM_DBG_CNT_04 */ - } - if(u4Resource == 0) { - QM_DBG_CNT_INC(prQM, ucTC + 5); - /* QM_DBG_CNT_05 */ /* QM_DBG_CNT_06 */ /* QM_DBG_CNT_07 */ /* QM_DBG_CNT_08 */ /* QM_DBG_CNT_09 */ - } - if(((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)) { - QM_DBG_CNT_INC(prQM, ucTC + 10); - /* QM_DBG_CNT_10 */ /* QM_DBG_CNT_11 */ /* QM_DBG_CNT_12 */ /* QM_DBG_CNT_13 */ /* QM_DBG_CNT_14 */ - } - } -#endif - - - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if (QUEUE_IS_EMPTY(prCurrQueue) || ((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)){ - fgChangeHeadSta = TRUE; - break; - } - else if (u4Resource == 0){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); -#if DBG && 0 - LOG_FUNC("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - /* XXX: check all queues for STA */ - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - (*pu4HeadStaRecForwardCount) ++; - - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - - if (*pu4HeadStaRecForwardCount){ - DBGLOG(QM, LOUD, ("TC = %u Round Head STA = %lu, u4HeadStaRecForwardCount = %lu\n", ucTC, *pu4HeadStaRecIndex, (*pu4HeadStaRecForwardCount))); - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - - - //4 <3> Dequeue from the other STAs if there is residual TX resource - - /* Check all of the STAs to continue forwarding packets (including the head STA) */ - for (i= 0; i< CFG_NUM_OF_STA_RECORD; i++){ - /* Break in case no reasource is available */ - if (u4Resource == 0){ - break; - } - - /* The current head STA will be examined when i = CFG_NUM_OF_STA_RECORD-1 */ - prStaRec = &prAdapter->arStaRec[((*pu4HeadStaRecIndex) + i + 1) % CFG_NUM_OF_STA_RECORD]; - ASSERT(prStaRec); - - if (prStaRec->fgIsValid) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Sharing STA = %u Resource = %lu\n", - ucTC, prStaRec->ucIndex, u4Resource)); - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - u4ForwardCount = 0; - u4MaxForwardCount = ucTotalQuota; - -#if CFG_ENABLE_WIFI_DIRECT - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } /* prStaRec->fgIsValid */ - else{ - prBssInfo = NULL; - /* Invalid STA, so check the next STA */ - continue; - } - - while(prCurrQueue){ - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if ((u4Resource == 0) || QUEUE_IS_EMPTY(prCurrQueue) || (u4ForwardCount >= u4MaxForwardCount)){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - -#if DBG && 0 - DBGLOG(QM, LOUD, ("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 )); - - DBGLOG(QM, LOUD,("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr))); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - u4ForwardCount ++; - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - -#if CFG_ENABLE_WIFI_DIRECT - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (u4ForwardCount){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - } - - - if (fgChangeHeadSta){ - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - (*pu4HeadStaRecForwardCount) = 0; - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Scheduled Head STA = %lu Left Resource = %lu\n", - ucTC, (*pu4HeadStaRecIndex), u4Resource)); - } - - -/***************************************************************************************/ -#else - UINT_8 ucStaRecIndex; - P_STA_RECORD_T prStaRec; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - if (ucCurrentQuota == 0){ - return; - } - - //4 <1> Determine the queue index and the head STA - - /* The head STA */ - ucStaRecIndex = 0; /* TODO: Get the current head STA */ - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - /* The queue to pull out packets */ - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - - ucPktCount = ucCurrentQuota; - prDequeuedPkt = NULL; - - //4 <2> Dequeue packets for the head STA - while(TRUE){ - if (!(prStaRec->fgIsValid) || ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - //DbgPrint("QM: Remove Queue Head, TC= %d\n", prDequeuedPkt->ucTC); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - ucPktCount--; - } - } - - //DbgPrint("QM: Remaining number of queued packets = %d\n", prCurrQueue->u4NumElem); - -#if QM_BURST_END_INFO_ENABLED - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } - -#endif - - //4 <3> Update scheduling info - /* TODO */ - - //4 <4> Utilize the remainaing TX opportunities for non-head STAs - /* TODO */ -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a per-Type-based Queue for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (Shall always be TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ) -{ - //UINT_8 ucQueIndex; - //UINT_8 ucStaRecIndex; - P_BSS_INFO_T prBssInfo; - P_BSS_INFO_T parBssInfo; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - P_MSDU_INFO_T prBurstEndPkt; - QUE_T rMergeQue; - P_QUE_T prMergeQue; - P_QUE_MGT_T prQM; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerTypeQueues (TC = %d, Max = %d)\n", ucTC, ucMaxNum)); - - /* TC5: Broadcast/Multicast data packets */ - ASSERT(ucTC == TC5_INDEX); - - if (ucMaxNum == 0){ - return; - } - - prQM = &prAdapter->rQM; - //4 <1> Determine the queue - - prCurrQueue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucPktCount = ucMaxNum; - prDequeuedPkt = NULL; - prBurstEndPkt = NULL; - - parBssInfo = prAdapter->rWifiVar.arBssInfo; - - QUEUE_INITIALIZE(&rMergeQue); - prMergeQue = &rMergeQue; - - //4 <2> Dequeue packets - while(TRUE){ - if(ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - } - else{ - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - ASSERT(prDequeuedPkt->ucNetworkType < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &parBssInfo[prDequeuedPkt->ucNetworkType]; - - if(IS_BSS_ACTIVE(prBssInfo)) { - if( !prBssInfo->fgIsNetAbsent){ - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - prBurstEndPkt = prDequeuedPkt; - ucPktCount--; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_26); -#if DBG && 0 - LOG_FUNC("DeqType TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - } - else { - QUEUE_INSERT_TAIL(prMergeQue,(P_QUE_ENTRY_T)prDequeuedPkt); - } - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prDequeuedPkt, NULL); - wlanProcessQueuedMsduInfo(prAdapter,prDequeuedPkt); - } - } - } - - if(QUEUE_IS_NOT_EMPTY(prMergeQue)) { - QUEUE_CONCATENATE_QUEUES(prMergeQue, prCurrQueue); - QUEUE_MOVE_ALL(prCurrQueue, prMergeQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(prCurrQueue), NULL); - } - -#if QM_BURST_END_INFO_ENABLED - if (prBurstEndPkt){ - prBurstEndPkt->fgIsBurstEnd = TRUE; - } -#endif -} /* qmDequeueTxPacketsFromPerTypeQueues */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets to send to HIF TX -* -* \param[in] prTcqStatus Info about the maximum amount of dequeued packets -* -* \return The list of dequeued TX packets -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ - - INT_32 i; - P_MSDU_INFO_T prReturnedPacketListHead; - QUE_T rReturnedQue; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPackets\n")); - - QUEUE_INITIALIZE(&rReturnedQue); - - prReturnedPacketListHead = NULL; - - /* TC0 to TC4: AC0~AC3, 802.1x (commands packets are not handled by QM) */ - for(i = TC4_INDEX; i >= TC0_INDEX; i--){ - DBGLOG(QM, LOUD, ("Dequeue packets from Per-STA queue[%u]\n", i)); - - qmDequeueTxPacketsFromPerStaQueues( - prAdapter, - &rReturnedQue, - (UINT_8)i, - prTcqStatus->aucFreeBufferCount[i], - prTcqStatus->aucMaxNumOfBuffer[i] - ); - - /* The aggregate number of dequeued packets */ - DBGLOG(QM, LOUD, ("DQA)[%u](%lu)\n", i, rReturnedQue.u4NumElem)); - } - - - /* TC5 (BMCAST or STA-NOT-FOUND packets) */ - qmDequeueTxPacketsFromPerTypeQueues( - prAdapter, - &rReturnedQue, - TC5_INDEX, - prTcqStatus->aucFreeBufferCount[TC5_INDEX] - ); - - DBGLOG(QM, LOUD, ("Current total number of dequeued packets = %u\n", rReturnedQue.u4NumElem)); - - if (QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - prReturnedPacketListHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rReturnedQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return prReturnedPacketListHead; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Adjust the TC quotas according to traffic demands -* -* \param[out] prTcqAdjust The resulting adjustment -* \param[in] prTcqStatus Info about the current TC quotas and counters -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Must initialize */ - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - - //4 <1> If TC resource is not just adjusted, exit directly - if (!prQM->fgTcResourcePostAnnealing){ - return; - } - - //4 <2> Adjust TcqStatus according to the updated prQM->au4CurrentTcResource - else{ - INT_32 i4TotalExtraQuota = 0; - INT_32 ai4ExtraQuota[TC_NUM]; - BOOLEAN fgResourceRedistributed = TRUE; - - /* Obtain the free-to-distribute resource */ - for (i = 0; i < TC_NUM; i++){ - ai4ExtraQuota[i] = (INT_32)prTcqStatus->aucMaxNumOfBuffer[i] - (INT_32)prQM->au4CurrentTcResource[i]; - - if (ai4ExtraQuota[i] > 0){ /* The resource shall be reallocated to other TCs */ - if (ai4ExtraQuota[i] > prTcqStatus->aucFreeBufferCount[i]){ - ai4ExtraQuota[i] = prTcqStatus->aucFreeBufferCount[i]; - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* Distribute quotas to TCs which need extra resource according to prQM->au4CurrentTcResource */ - for (i = 0; i < TC_NUM; i++){ - if (ai4ExtraQuota[i] < 0){ - if ((-ai4ExtraQuota[i]) > i4TotalExtraQuota){ - ai4ExtraQuota[i] = (-i4TotalExtraQuota); - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* In case some TC is waiting for TX Done, continue to adjust TC quotas upon TX Done */ - prQM->fgTcResourcePostAnnealing = (!fgResourceRedistributed); - -#if QM_PRINT_TC_RESOURCE_CTRL - DBGLOG(QM, LOUD, ("QM: Curr Quota [0]=%u [1]=%u [2]=%u [3]=%u [4]=%u [5]=%u\n", - prTcqStatus->aucFreeBufferCount[0], - prTcqStatus->aucFreeBufferCount[1], - prTcqStatus->aucFreeBufferCount[2], - prTcqStatus->aucFreeBufferCount[3], - prTcqStatus->aucFreeBufferCount[4], - prTcqStatus->aucFreeBufferCount[5] - )); -#endif - } - -#else - UINT_32 i; - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - -#endif -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update the average TX queue length for the TC resource control mechanism -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 u4CurrQueLen, i, k; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //4 <1> Update the queue lengths for TC0 to TC3 (skip TC4) and TC5 */ - for (i = 0; i < NUM_OF_PER_STA_TX_QUEUES - 1; i++){ - u4CurrQueLen = 0; - - for (k = 0; k < CFG_NUM_OF_STA_RECORD; k++){ - prStaRec = &prAdapter->arStaRec[k]; - ASSERT(prStaRec); - - /* If the STA is activated, get the queue length */ - if (prStaRec->fgIsValid && - (!prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].fgIsNetAbsent) - ) - { - - u4CurrQueLen += (prStaRec->arTxQueue[i].u4NumElem); - } - } - - if (prQM->au4AverageQueLen[i] == 0){ - prQM->au4AverageQueLen[i] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[i] -= (prQM->au4AverageQueLen[i] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[i] += (u4CurrQueLen); - } - - } - - /* Update the queue length for TC5 (BMCAST) */ - u4CurrQueLen = prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST].u4NumElem; - - if (prQM->au4AverageQueLen[TC_NUM-1] == 0){ - prQM->au4AverageQueLen[TC_NUM-1] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[TC_NUM-1] -= (prQM->au4AverageQueLen[TC_NUM-1] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[TC_NUM-1] += (u4CurrQueLen); - } - - - //4 <2> Adjust TC resource assignment - /* Check whether it is time to adjust the TC resource assignment */ - if (--prQM->u4TimeToAdjustTcResource == 0){ - /* The last assignment has not been completely applied */ - if (prQM->fgTcResourcePostAnnealing){ - /* Upon the next qmUpdateAverageTxQueLen function call, do this check again */ - prQM->u4TimeToAdjustTcResource = 1; - } - - /* The last assignment has been applied */ - else{ - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - qmReassignTcResource(prAdapter); - } - } - - /* Debug */ -#if QM_PRINT_TC_RESOURCE_CTRL - for (i=0; i= 100){ - DBGLOG(QM, LOUD, ("QM: QueLen [%ld %ld %ld %ld %ld %ld]\n", - QM_GET_TX_QUEUE_LEN(prAdapter, 0), - QM_GET_TX_QUEUE_LEN(prAdapter, 1), - QM_GET_TX_QUEUE_LEN(prAdapter, 2), - QM_GET_TX_QUEUE_LEN(prAdapter, 3), - QM_GET_TX_QUEUE_LEN(prAdapter, 4), - QM_GET_TX_QUEUE_LEN(prAdapter, 5) - )); - break; - } - } -#endif - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Assign TX resource for each TC according to TX queue length and current assignment -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 i4TotalResourceDemand = 0; - UINT_32 u4ResidualResource = 0; - UINT_32 i; - INT_32 ai4PerTcResourceDemand[TC_NUM]; - UINT_32 u4ShareCount = 0; - UINT_32 u4Share = 0 ; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Note: After the new assignment is obtained, set prQM->fgTcResourcePostAnnealing to TRUE to - * start the TC-quota adjusting procedure, which will be invoked upon every TX Done - */ - - //4 <1> Determine the demands - /* Determine the amount of extra resource to fulfill all of the demands */ - for (i=0; iau4MinReservedTcResource[i] - prQM->au4CurrentTcResource[i]); - - /* If there are queued packets, allocate extra resource for the TC (for TCP consideration) */ - if (QM_GET_TX_QUEUE_LEN(prAdapter, i)){ - ai4PerTcResourceDemand[i] += QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY; - } - - i4TotalResourceDemand += ai4PerTcResourceDemand[i]; - } - - //4 <2> Case 1: Demand <= Total Resource - if (i4TotalResourceDemand <= 0){ - //4 <2.1> Satisfy every TC - for (i = 0; i < TC_NUM; i++){ - /* Skip TC4 (not adjustable) */ - if (i == TC4_INDEX) { - continue; - } - - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - } - - //4 <2.2> Share the residual resource evenly - u4ShareCount= (TC_NUM - 1); /* excluding TC4 */ - u4ResidualResource = (UINT_32)(-i4TotalResourceDemand); - u4Share = (u4ResidualResource/u4ShareCount); - - for (i=0; iau4CurrentTcResource[i] += u4Share; - - /* Every TC is fully satisfied */ - ai4PerTcResourceDemand[i] = 0; - - /* The left resource will be allocated to TC3 */ - u4ResidualResource -= u4Share; - } - - //4 <2.3> Allocate the left resource to TC3 (VO) - prQM->au4CurrentTcResource[TC3_INDEX] += (u4ResidualResource); - - } - - //4 <3> Case 2: Demand > Total Resource --> Guarantee a minimum amount of resource for each TC - else{ - u4ResidualResource = QM_INITIAL_RESIDUAL_TC_RESOURCE; - - //4 <3.1> Allocated resouce amount = minimum of (guaranteed, total demand) - for (i=0; iau4CurrentTcResource[i] + ai4PerTcResourceDemand[i] < prQM->au4GuaranteedTcResource[i]){ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource += (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - ai4PerTcResourceDemand[i] = 0; - } - - /* The demand can not be fulfilled with the guaranteed resource amount */ - else{ - ai4PerTcResourceDemand[i] -= (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - prQM->au4CurrentTcResource[i] = prQM->au4GuaranteedTcResource[i]; - u4ShareCount++; - } - } - - //4 <3.2> Allocate the residual resource - do{ - /* If there is no resource left, exit directly */ - if (u4ResidualResource == 0){ - break; - } - - /* This shall not happen */ - if (u4ShareCount == 0){ - prQM->au4CurrentTcResource[TC1_INDEX] += u4ResidualResource; - DBGLOG(QM, ERROR, ("QM: (Error) u4ShareCount = 0\n")); - break; - } - - /* Share the residual resource evenly */ - u4Share = (u4ResidualResource / u4ShareCount); - if(u4Share){ - for (i=0; iau4CurrentTcResource[i] += u4Share; - u4ResidualResource -= u4Share; - ai4PerTcResourceDemand[i] -= u4Share; - } - else{ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource -= ai4PerTcResourceDemand[i]; - ai4PerTcResourceDemand[i] = 0; - } - } - } - } - - /* By priority, allocate the left resource that is not divisible by u4Share */ - if (u4ResidualResource == 0){ - break; - } - - if (ai4PerTcResourceDemand[TC3_INDEX]){ /* VO */ - prQM->au4CurrentTcResource[TC3_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC2_INDEX]){ /* VI */ - prQM->au4CurrentTcResource[TC2_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC5_INDEX]){ /* BMCAST */ - prQM->au4CurrentTcResource[TC5_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC1_INDEX]){ /* BE */ - prQM->au4CurrentTcResource[TC1_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC0_INDEX]){ /* BK */ - prQM->au4CurrentTcResource[TC0_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - /* Allocate the left resource */ - prQM->au4CurrentTcResource[TC3_INDEX] += u4ResidualResource; - - }while(FALSE); - } - - prQM->fgTcResourcePostAnnealing = TRUE; - -#if QM_PRINT_TC_RESOURCE_CTRL - /* Debug print */ - DBGLOG(QM, LOUD, ("QM: TC Rsc %ld %ld %ld %ld %ld %ld\n", - prQM->au4CurrentTcResource[0], - prQM->au4CurrentTcResource[1], - prQM->au4CurrentTcResource[2], - prQM->au4CurrentTcResource[3], - prQM->au4CurrentTcResource[4], - prQM->au4CurrentTcResource[5] - )); -#endif - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for RX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - //DbgPrint("QM: Enter qmInitRxQueues()\n"); - /* TODO */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle RX packets (buffer reordering) -* -* \param[in] prSwRfbListHead The list of RX packets -* -* \return The list of packets which are not buffered for reordering -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - -#if CFG_RX_REORDERING_ENABLED - //UINT_32 i; - P_SW_RFB_T prCurrSwRfb; - P_SW_RFB_T prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - QUE_T rReturnedQue; - PUINT_8 pucEthDestAddr; - BOOLEAN fgIsBMC; - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - - DEBUGFUNC("qmHandleRxPackets"); - - ASSERT(prSwRfbListHead); - - QUEUE_INITIALIZE(&rReturnedQue); - prNextSwRfb = prSwRfbListHead; - - do{ - prCurrSwRfb = prNextSwRfb; - prNextSwRfb = QM_RX_GET_NEXT_SW_RFB(prCurrSwRfb); - - prHifRxHdr = prCurrSwRfb->prHifRxHdr; // TODO: (Tehuang) Use macro to obtain the pointer - - /* TODO: (Tehuang) Check if relaying */ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Decide the Destination */ -#if CFG_RX_PKTS_DUMP - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_DATA)) { - DBGLOG(SW4, INFO, ("QM RX DATA: net %u sta idx %u wlan idx %u ssn %u tid %u ptype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prCurrSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - HIF_RX_HDR_GET_TID(prHifRxHdr), - prCurrSwRfb->ucPacketType, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prCurrSwRfb->pvHeader, prCurrSwRfb->u2PacketLen); - } -#endif - - fgIsBMC = FALSE; - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - //DBGLOG_MEM8(QM, TRACE,prCurrSwRfb->pvHeader, 16); - // - - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr)) { - fgIsBMC = TRUE; - } - - if( prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem - > (CFG_RX_MAX_PKT_NUM - CFG_NUM_OF_QM_RX_PKT_NUM) ) { - - if(IS_BSS_ACTIVE(prBssInfo)) { - if(OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode) { - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - else if(UNEQUAL_MAC_ADDR(prBssInfo->aucOwnMacAddr,pucEthDestAddr)) { - prCurrSwRfb->eDst = RX_PKT_DESTINATION_FORWARD; - /* TODO : need to check the dst mac is valid */ - /* If src mac is invalid, the packet will be freed in fw */ - } - } /* OP_MODE_ACCESS_POINT */ - } - else { - DBGLOG(QM, TRACE, ("Mark NULL the Packet for inactive Bss %u\n",ucNetTypeIdx)); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - else { - /* Dont not occupy other SW RFB */ - DBGLOG(QM, TRACE, ("Mark NULL the Packet for less Free Sw Rfb\n")); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - - /* BAR frame */ - if(HIF_RX_HDR_GET_BAR_FLAG(prHifRxHdr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - qmProcessBarFrame(prAdapter, prCurrSwRfb, &rReturnedQue); - } - /* Reordering is not required for this packet, return it without buffering */ - else if(!HIF_RX_HDR_GET_REORDER_FLAG(prHifRxHdr) || fgIsBMC){ -#if 0 - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr) && (OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - } -#endif - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - } - /* Reordering is required for this packet */ - else{ - /* If this packet should dropped or indicated to the host immediately, - * it should be enqueued into the rReturnedQue with specific flags. If - * this packet should be buffered for reordering, it should be enqueued - * into the reordering queue in the STA_REC rather than into the - * rReturnedQue. - */ - qmProcessPktWithReordering(prAdapter, prCurrSwRfb, &rReturnedQue); - - } - }while(prNextSwRfb); - - - /* The returned list of SW_RFBs must end with a NULL pointer */ - if(QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - QM_TX_SET_NEXT_MSDU_INFO((P_SW_RFB_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return (P_SW_RFB_T)QUEUE_GET_HEAD(&rReturnedQue); - -#else - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - return prSwRfbListHead; - -#endif - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reorder the received packet -* -* \param[in] prSwRfb The RX packet to process -* \param[out] prReturnedQue The queue for indicating packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SeqNo; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - DEBUGFUNC("qmProcessPktWithReordering"); - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SN of the frame */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - //prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN, ("Reordering for an invalid STA_REC \n")); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - - /* Start to reorder packets */ - u4SeqNo = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - /* Debug */ - //DbgPrint("QM:(R)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - - /* Case 1: Fall within */ - if /* 0 - start - sn - end - 4095 */ - (((u4WinStart <= u4SeqNo) && (u4SeqNo <= u4WinEnd)) - /* 0 - end - start - sn - 4095 */ - || ((u4WinEnd < u4WinStart) && (u4WinStart <= u4SeqNo)) - /* 0 - sn - end - start - 4095 */ - || ((u4SeqNo <= u4WinEnd) && (u4WinEnd < u4WinStart))){ - - qmInsertFallWithinReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - /* Let the first received packet pass the reorder check */ - DBGLOG(QM, LOUD, ("QM:(A)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd)); - - prReorderQueParm->u2WinStart = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - - qmPopOutDueToFallWithin(prReorderQueParm, prReturnedQue); - } - /* Case 2: Fall ahead */ - else if - /* 0 - start - end - sn - (start+2048) - 4095 */ - (((u4WinStart < u4WinEnd) - && (u4WinEnd < u4SeqNo) - && (u4SeqNo < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - sn - (start+2048) - start - end - 4095 */ - || ((u4SeqNo < u4WinStart) - && (u4WinStart < u4WinEnd) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - end - sn - (start+2048) - start - 4095 */ - || ((u4WinEnd < u4SeqNo) - && (u4SeqNo < u4WinStart) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT)))){ - - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - qmInsertFallAheadReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - - /* Advance the window after inserting a new tail */ - prReorderQueParm->u2WinEnd = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinStart = - (((prReorderQueParm->u2WinEnd) - (prReorderQueParm->u2WinSize) + MAX_SEQ_NO_COUNT + 1) - % MAX_SEQ_NO_COUNT); - - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - - } - /* Case 3: Fall behind */ - else{ - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - #if QM_RX_INIT_FALL_BEHIND_PASS - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - //?? prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(P)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - #endif -#endif - - /* An erroneous packet */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(D)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - - return; - -} - - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SSN; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SSN */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - DbgPrint("QM: (Warning) BAR for an invalid STA_REC \n"); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - u4SSN = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - if(qmCompareSnIsLessThan(u4WinStart,u4SSN)){ - prReorderQueParm->u2WinStart = (UINT_16)u4SSN; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - DBGLOG(QM, TRACE, ("QM:(BAR)[%d](%ld){%d,%d}\n", prSwRfb->ucTid, u4SSN, prReorderQueParm->u2WinStart, prReorderQueParm->u2WinEnd)); - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - } - else{ - DBGLOG(QM, TRACE, ("QM:(BAR)(%d)(%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SSN, u4WinStart, u4WinEnd)); - } -} - - - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prExaminedQueuedSwRfb; - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - prExaminedQueuedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - - /* There are no packets queued in the Reorder Queue */ - if(prExaminedQueuedSwRfb == NULL){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - } - - /* Determine the insert position */ - else{ - do{ - /* Case 1: Terminate. A duplicate packet */ - if(((prExaminedQueuedSwRfb->u2SSN) == (prSwRfb->u2SSN))){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - return; - } - - /* Case 2: Terminate. The insert point is found */ - else if(qmCompareSnIsLessThan( - (prSwRfb->u2SSN),(prExaminedQueuedSwRfb->u2SSN))){ - break; - } - - /* Case 3: Insert point not found. Check the next SW_RFB in the Reorder Queue */ - else{ - prExaminedQueuedSwRfb = - (P_SW_RFB_T)(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prNext); - } - }while(prExaminedQueuedSwRfb); - - /* Update the Reorder Queue Parameters according to the found insert position */ - if(prExaminedQueuedSwRfb == NULL){ - /* The received packet shall be placed at the tail */ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - prReorderQue->prTail = (P_QUE_ENTRY_T)(prSwRfb); - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = (P_QUE_ENTRY_T)prExaminedQueuedSwRfb; - if(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb) == (prReorderQue->prHead)){ - /* The received packet will become the head */ - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - (((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev)->prNext = (P_QUE_ENTRY_T)prSwRfb; - } - ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev = (P_QUE_ENTRY_T)prSwRfb; - } - - prReorderQue->u4NumElem ++; - - } - -} - - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* There are no packets queued in the Reorder Queue */ - if(QUEUE_IS_EMPTY(prReorderQue)){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - } - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - -} - - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead, fgMissing; - OS_SYSTIME rCurrentTime, *prMissTimeout; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - fgMissing = FALSE; - rCurrentTime = 0; - prMissTimeout = &(g_arMissTimeout[prReorderQueParm->ucStaRecIdx][prReorderQueParm->ucTid]); - if ((*prMissTimeout)){ - fgMissing = TRUE; - GET_CURRENT_SYSTIME(&rCurrentTime); - } - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - /* SN > WinStart, break to update WinEnd */ - else{ - if ((fgMissing == TRUE) && - CHECK_FOR_TIMEOUT(rCurrentTime, (*prMissTimeout), - MSEC_TO_SYSTIME(QM_RX_BA_ENTRY_MISS_TIMEOUT_MS))) { - DBGLOG(QM, TRACE, ("QM:RX BA Timout Next Tid %d SSN %d\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2SSN)); - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - - fgMissing = FALSE; - } - else break; - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - if (QUEUE_IS_EMPTY(prReorderQue)){ - *prMissTimeout = 0; - } - else { - if (fgMissing == FALSE) { - GET_CURRENT_SYSTIME(prMissTimeout); - } - } - - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1 )% MAX_SEQ_NO_COUNT); - -} - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - - /* SN < WinStart, so the head packet shall be indicated (do not advance the window) */ - else if(qmCompareSnIsLessThan( - (UINT_32)(prReorderedSwRfb->u2SSN), - (UINT_32)(prReorderQueParm->u2WinStart))){ - - fgDequeuHead = TRUE; - - } - - /* SN > WinStart, break to update WinEnd */ - else{ - break; - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1)% MAX_SEQ_NO_COUNT); - -} - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ) -{ - /* 0 <---> SnLess <--(gap>2048)--> SnGreater : SnLess > SnGreater */ - if((u4SnLess + HALF_SEQ_NO_COUNT) <= u4SnGreater){ /* Shall be <= */ - return FALSE; - } - - /* 0 <---> SnGreater <--(gap>2048)--> SnLess : SnLess < SnGreater */ - else if((u4SnGreater + HALF_SEQ_NO_COUNT) < u4SnLess){ - return TRUE; - } - - /* 0 <---> SnGreater <--(gap<2048)--> SnLess : SnLess > SnGreater */ - /* 0 <---> SnLess <--(gap<2048)--> SnGreater : SnLess < SnGreater */ - else{ - return (u4SnLess < u4SnGreater); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle Mailbox RX messages -* -* \param[in] prMailboxRxMsg The received Mailbox message from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ) -{ - //DbgPrint("QM: Enter qmHandleMailboxRxMessage()\n"); - /* TODO */ -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle ADD RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_ADDBA_T prEventRxAddBa; - P_STA_RECORD_T prStaRec; - UINT_32 u4Tid; - UINT_32 u4WinSize; - - DBGLOG(QM, INFO, ("QM:Event +RxBa\n")); - - prEventRxAddBa = (P_EVENT_RX_ADDBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxAddBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - DBGLOG(QM, INFO, ("QM: (Warning) RX ADDBA Event for a NULL STA_REC\n")); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - DBGLOG(QM, WARN, ("QM: (Warning) RX ADDBA Event for an invalid STA_REC\n")); - //ASSERT(0); - //return; - } -#endif - - u4Tid = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_TID_MASK) - >> BA_PARAM_SET_TID_MASK_OFFSET); - - u4WinSize = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_BUFFER_SIZE_MASK) - >> BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET); - - if(!qmAddRxBaEntry( - prAdapter, - prStaRec->ucIndex, - (UINT_8)u4Tid, - (prEventRxAddBa->u2BAStartSeqCtrl >> OFFSET_BAR_SSC_SN), - (UINT_16)u4WinSize)){ - - /* FW shall ensure the availabiilty of the free-to-use BA entry */ - DBGLOG(QM, ERROR, ("QM: (Error) qmAddRxBaEntry() failure\n")); - ASSERT(0); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle DEL RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_DELBA_T prEventRxDelBa; - P_STA_RECORD_T prStaRec; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventRxDelBa = (P_EVENT_RX_DELBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxDelBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - //ASSERT(0); - return; - } -#endif - - qmDelRxBaEntry(prAdapter, prStaRec->ucIndex, prEventRxDelBa->ucTid, TRUE); - -} - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - UINT_8 ucStaRecIdx, - UINT_8 ucTid - ) -{ - int i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmLookupRxBaEntry()\n"); - - for(i=0; iarRxBaTable[i].fgIsValid){ - if((prQM->arRxBaTable[i].ucStaRecIdx == ucStaRecIdx) && - (prQM->arRxBaTable[i].ucTid == ucTid)){ - return &prQM->arRxBaTable[i]; - } - } - } - return NULL; -} - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ) -{ - int i; - P_RX_BA_ENTRY_T prRxBaEntry = NULL; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - if(ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - /* Invalid STA_REC index, discard the event packet */ - DBGLOG(QM, WARN, ("QM: (WARNING) RX ADDBA Event for a invalid ucStaRecIdx = %d\n", ucStaRecIdx)); - return FALSE; - } - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - - //if(!(prStaRec->fgIsValid)){ - // DbgPrint("QM: (WARNING) Invalid STA when adding an RX BA \n"); - // return FALSE; - //} - - //4 <1> Delete before adding - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - if(qmLookupRxBaEntry(prAdapter, ucStaRecIdx,ucTid)){ - qmDelRxBaEntry(prAdapter, ucStaRecIdx, ucTid, TRUE); /* prQM->ucRxBaCount-- */ - } - - //4 <2> Add a new BA entry - /* No available entry to store the BA agreement info. Retrun FALSE. */ - if(prQM->ucRxBaCount >= CFG_NUM_OF_RX_BA_AGREEMENTS){ - DBGLOG(QM, ERROR, ("QM: **failure** (limited resource, ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - else{ - /* Find the free-to-use BA entry */ - for(i=0; iarRxBaTable[i].fgIsValid){ - prRxBaEntry = &(prQM->arRxBaTable[i]); - prQM->ucRxBaCount++; - DBGLOG(QM, LOUD, ("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount)); - break; - } - } - - /* If a free-to-use entry is found, configure it and associate it with the STA_REC */ - u2WinSize += CFG_RX_BA_INC_SIZE; - if(prRxBaEntry){ - prRxBaEntry->ucStaRecIdx = ucStaRecIdx; - prRxBaEntry->ucTid = ucTid; - prRxBaEntry->u2WinStart = u2WinStart; - prRxBaEntry->u2WinSize= u2WinSize; - prRxBaEntry->u2WinEnd = ((u2WinStart + u2WinSize - 1) % MAX_SEQ_NO_COUNT); - prRxBaEntry->fgIsValid = TRUE; - prRxBaEntry->fgIsWaitingForPktWithSsn = TRUE; - - g_arMissTimeout[ucStaRecIdx][ucTid] = 0; - - DBGLOG(QM, INFO, ("QM: +RxBA(STA=%d TID=%d WinStart=%d WinEnd=%d WinSize=%d)\n", - ucStaRecIdx, ucTid, - prRxBaEntry->u2WinStart, prRxBaEntry->u2WinEnd, prRxBaEntry->u2WinSize)); - - /* Update the BA entry reference table for per-packet lookup */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = prRxBaEntry; - } - else{ - /* This shall not happen because FW should keep track of the usage of RX BA entries */ - DBGLOG(QM, ERROR, ("QM: **AddBA Error** (ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - } - - return TRUE; -} -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ) -{ - P_RX_BA_ENTRY_T prRxBaEntry; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prFlushedPacketList = NULL; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - DbgPrint("QM: (WARNING) Invalid STA when deleting an RX BA \n"); - return; - } -#endif - - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - prRxBaEntry = prStaRec->aprRxReorderParamRefTbl[ucTid]; - - if(prRxBaEntry){ - - prFlushedPacketList = qmFlushStaRxQueue(prAdapter, ucStaRecIdx, ucTid); - - if(prFlushedPacketList){ - - if(fgFlushToHost) { - wlanProcessQueuedSwRfb(prAdapter, prFlushedPacketList); - } - else { - - P_SW_RFB_T prSwRfb; - P_SW_RFB_T prNextSwRfb; - prSwRfb = prFlushedPacketList; - - do { - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - } - - - } -#if ((QM_TEST_MODE == 0) && (QM_TEST_STA_REC_DEACTIVATION == 0)) - /* Update RX BA entry state. Note that RX queue flush is not done here */ - prRxBaEntry->fgIsValid = FALSE; - prQM->ucRxBaCount--; - - /* Debug */ - #if 0 - DbgPrint("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount); - #endif - - /* Update STA RX BA table */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = NULL; -#endif - - DBGLOG(QM, INFO, ("QM: -RxBA(STA=%d,TID=%d)\n", ucStaRecIdx, ucTid)); - - } - - - /* Debug */ - #if CFG_HIF_RX_STARVATION_WARNING - { - P_RX_CTRL_T prRxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - DBGLOG(QM, TRACE, ("QM: (RX DEBUG) Enqueued: %d / Dequeued: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt)); - } - #endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WMM_INFO_T prIeWmmInfo; - - DEBUGFUNC("mqmProcessAssocReq"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - pucIEStart = pucIE; - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - if (!prAdapter->rWifiVar.fgSupportQoS) { - return; - } - - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_INFO: - { - - UINT_8 ucQosInfo; - UINT_8 ucQosInfoAC; - UINT_8 ucBmpAC; - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsWmmSupported = TRUE; - - prIeWmmInfo = (P_IE_WMM_INFO_T)pucIE; - ucQosInfo = prIeWmmInfo->ucQosInfo; - ucQosInfoAC = ucQosInfo & BITS(0, 3); - - prStaRec->fgIsUapsdSupported = ((ucQosInfoAC)? TRUE: FALSE) & - prAdapter->rWifiVar.fgSupportUAPSD; - - ucBmpAC = 0; - - if( ucQosInfoAC & WMM_QOS_INFO_VO_UAPSD) { - ucBmpAC |= BIT(ACI_VO); - } - if( ucQosInfoAC & WMM_QOS_INFO_VI_UAPSD) { - ucBmpAC |= BIT(ACI_VI); - } - if( ucQosInfoAC & WMM_QOS_INFO_BE_UAPSD) { - ucBmpAC |= BIT(ACI_BE); - } - if( ucQosInfoAC & WMM_QOS_INFO_BK_UAPSD) { - ucBmpAC |= BIT(ACI_BK); - } - - prStaRec->ucBmpTriggerAC = prStaRec->ucBmpDeliveryAC = ucBmpAC; - - prStaRec->ucUapsdSp = (ucQosInfo & WMM_QOS_INFO_MAX_SP_LEN_MASK) >> 5; - - } - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - - break; - - case ELEM_ID_HT_CAP: - /* Some client won't put the WMM IE if client is 802.11n */ - if (IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Req Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessAssocRsp"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - - pucIEStart = pucIE; - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgSupportQoS=%d)\n", - prStaRec->fgIsWmmSupported, prAdapter->rWifiVar.fgSupportQoS)); - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - //if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported)) - if((!prAdapter->rWifiVar.fgSupportQoS)) - { - return; - } - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - break; - - case ELEM_ID_HT_CAP: - /* Some AP won't put the WMM IE if client is 802.11n */ - if ( IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - /* Parse AC parameters and write to HW CRs */ - if((prStaRec->fgIsQoS) && (prStaRec->eStaType == STA_TYPE_LEGACY_AP)){ - mqmParseEdcaParameters(prAdapter, prSwRfb, pucIEStart, u2IELength, TRUE); - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Rsp Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - if(prStaRec->fgIsWmmSupported) { - nicQmUpdateWmmParms(prAdapter, prStaRec->ucNetTypeIndex); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM Parameter IE (in BCN or Assoc_Rsp) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* \param[in] fgForceOverride TRUE: If EDCA parameters are found, always set to HW CRs. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("mqmParseEdcaParameters"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgIsQoS=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsQoS)); - - if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported) || (!prStaRec->fgIsQoS)){ - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Goal: Obtain the EDCA parameters */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - P_AC_QUE_PARMS_T prAcQueParams; - P_IE_WMM_PARAM_T prIeWmmParam; - ENUM_WMM_ACI_T eAci; - PUINT_8 pucWmmParamSetCount; - //int i; - - pucWmmParamSetCount = &(prBssInfo->ucWmmParamSetCount); - - prIeWmmParam = (P_IE_WMM_PARAM_T)pucIE; - - /* Check the Parameter Set Count to determine whether EDCA parameters have been changed */ - if(!fgForceOverride){ - if(*pucWmmParamSetCount == (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT)){ - break; /* Ignore the IE without updating HW CRs */ - } - } - - /* Update Parameter Set Count */ - *pucWmmParamSetCount = (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT); - - /* Update EDCA parameters */ - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prAcQueParams = &prBssInfo->arACQueParms[eAci]; - mqmFillAcQueParam(prIeWmmParam, eAci, prAcQueParams); - - prAcQueParams->fgIsACMSet = - (prAcQueParams->u2Aifsn & WMM_ACIAIFSN_ACM) ? TRUE : FALSE; - prAcQueParams->u2Aifsn &= WMM_ACIAIFSN_AIFSN; - - DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci, prAcQueParams->fgIsACMSet, - prAcQueParams->u2Aifsn, prAcQueParams->u2CWmin, - prAcQueParams->u2CWmax, prAcQueParams->u2TxopLimit)); - } - } - break; - - default: - /* Other WMM QoS IEs. Ignore */ - break; - } - - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - break; - default: - break; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used for parsing EDCA parameters specified in the WMM Parameter IE -* -* \param[in] prAdapter Adapter pointer -* \param[in] prIeWmmParam The pointer to the WMM Parameter IE -* \param[in] u4AcOffset The offset specifying the AC queue for parsing -* \param[in] prHwAcParams The parameter structure used to configure the HW CRs -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ) -{ - prAcQueParams->u2Aifsn = *((PUINT_8)(&(prIeWmmParam->ucAciAifsn_BE)) + (u4AcOffset * 4)); - - prAcQueParams->u2CWmax = - BIT(((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMAX_MASK) - >> WMM_ECW_WMAX_OFFSET)-1; - - prAcQueParams->u2CWmin = - BIT((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMIN_MASK)-1; - - WLAN_GET_FIELD_16(((PUINT_8)(&(prIeWmmParam->aucTxopLimit_BE)) + (u4AcOffset * 4)),&(prAcQueParams->u2TxopLimit)); - - prAcQueParams->ucGuradTime = TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM/11n related IEs in scan results (only for AP peers) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prScanResult The scan result which shall be parsed to obtain needed info -* \param[out] prStaRec The obtained info is stored in the STA_REC -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ) -{ - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessScanResult"); - - ASSERT(prScanResult); - ASSERT(prStaRec); - - /* Reset the flag before parsing */ - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - if (!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - u2IELength = prScanResult->u2IELength; - pucIE = prScanResult->aucIEBuf; - - /* Goal: Determine whether the peer supports WMM/QoS and UAPSDU */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_PARAM_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_INFO_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - default: - /* A WMM QoS IE that doesn't matter. Ignore it. */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - - break; - - default: - /* A WMM IE that doesn't matter. Ignore it. */ - break; - } - } - DBGLOG(QM, LOUD, ("MQM: Scan Result Parsing (WMM=%d, UAPSD=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsUapsdSupported)); - -} - -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - UINT_32 i; - P_STA_RECORD_T prTempStaRec; - - prTempStaRec = NULL; - - ASSERT(prAdapter); - - //4 <1> DA = BMCAST - if(IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - return STA_REC_INDEX_BMCAST; - } - - - //4 <2> Check if an AP STA is present - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if((prTempStaRec->ucNetTypeIndex == eNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - return prTempStaRec->ucIndex; - } - } - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if(prTempStaRec->fgIsValid){ - if(EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, pucEthDestAddr)){ - return prTempStaRec->ucIndex; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - return STA_REC_INDEX_NOT_FOUND; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Info IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_INFO_T prIeWmmInfo; - UINT_32 ucUapsd[] = { - WMM_QOS_INFO_BE_UAPSD, - WMM_QOS_INFO_BK_UAPSD, - WMM_QOS_INFO_VI_UAPSD, - WMM_QOS_INFO_VO_UAPSD - }; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("mqmGenerateWmmInfoIE"); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - if(!prStaRec->fgIsWmmSupported) { - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prIeWmmInfo = (P_IE_WMM_INFO_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmInfo->ucId = ELEM_ID_WMM; - prIeWmmInfo->ucLength = ELEM_MAX_LEN_WMM_INFO; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmInfo->aucOui[0] = aucWfaOui[0]; - prIeWmmInfo->aucOui[1] = aucWfaOui[1]; - prIeWmmInfo->aucOui[2] = aucWfaOui[2]; - prIeWmmInfo->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmInfo->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_INFO; - - prIeWmmInfo->ucVersion = VERSION_WMM; - prIeWmmInfo->ucQosInfo = 0; - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ -// if(prAdapter->rWifiVar.fgSupportUAPSD){ - if(prAdapter->rWifiVar.fgSupportUAPSD && prStaRec->fgIsUapsdSupported){ - - UINT_8 ucQosInfo = 0; - UINT_8 i; - - - /* Static U-APSD setting */ - for(i = ACI_BE; i <= ACI_VO; i++){ - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC & BIT(i)){ - ucQosInfo |= (UINT_8)ucUapsd[i]; - } - } - - - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC) { - switch (prPmProfSetupInfo->ucUapsdSp) { - case WMM_MAX_SP_LENGTH_ALL: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_ALL; - break; - - case WMM_MAX_SP_LENGTH_2: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - - case WMM_MAX_SP_LENGTH_4: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_4; - break; - - case WMM_MAX_SP_LENGTH_6: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_6; - break; - - default: - DBGLOG(QM, INFO, ("MQM: Incorrect SP length \n")); - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - } - } - prIeWmmInfo->ucQosInfo = ucQosInfo; - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmInfo); - -} - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief log2 calculation for CW -* -* @param[in] val value -* -* @return log2(val) -*/ -/*----------------------------------------------------------------------------*/ - -UINT_32 cwlog2(UINT_32 val) { - - UINT_32 n; - n=0; - - while (val >= 512) { n+= 9; val = val >> 9; } - while (val >= 16) { n+= 4; val >>= 4; } - while (val >= 2) { n+= 1; val >>= 1; } - return n; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Param IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_PARAM_T prIeWmmParam; - - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - UINT_8 aucACI[] = { - WMM_ACI_AC_BE, - WMM_ACI_AC_BK, - WMM_ACI_AC_VI, - WMM_ACI_AC_VO - }; - - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - ENUM_WMM_ACI_T eAci; - - DEBUGFUNC("mqmGenerateWmmParamIE"); - DBGLOG(QM, LOUD,("\n")); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(prStaRec) { - if(!prStaRec->fgIsQoS) { - return; - } - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - - if(!prBssInfo->fgIsQBSS) { return; } - -#if 0 // 20120220 frog: update beacon content & change OP mode is a separate event for P2P network. - if( prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT && - prBssInfo->eCurrentOPMode != OP_MODE_BOW) - { - return; - } -#endif - - prIeWmmParam = (P_IE_WMM_PARAM_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmParam->ucId = ELEM_ID_WMM; - prIeWmmParam->ucLength = ELEM_MAX_LEN_WMM_PARAM; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmParam->aucOui[0] = aucWfaOui[0]; - prIeWmmParam->aucOui[1] = aucWfaOui[1]; - prIeWmmParam->aucOui[2] = aucWfaOui[2]; - prIeWmmParam->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmParam->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_PARAM; - - prIeWmmParam->ucVersion = VERSION_WMM; - prIeWmmParam->ucQosInfo = (prBssInfo->ucWmmParamSetCount & WMM_QOS_INFO_PARAM_SET_CNT); - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ - if(prAdapter->rWifiVar.fgSupportUAPSD){ - - prIeWmmParam->ucQosInfo |= WMM_QOS_INFO_UAPSD; - - } - - /* EDCA parameter */ - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - //DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - // eAci,prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet , - // prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmin, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmax, - // prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit)); - - *( ((PUINT_8)(&prIeWmmParam->ucAciAifsn_BE)) + (eAci <<2) ) = (UINT_8) (aucACI[eAci] - | (prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet ? WMM_ACIAIFSN_ACM:0 ) - | (prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn & (WMM_ACIAIFSN_AIFSN))); -#if 1 - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (((prBssInfo->aucCWminLog2ForBcast[eAci] )) & WMM_ECW_WMIN_MASK) - | ((((prBssInfo->aucCWmaxLog2ForBcast[eAci] )) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#else - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmin + 1)) & WMM_ECW_WMIN_MASK) - | ((cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmax + 1)) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#endif - - WLAN_SET_FIELD_16( ((PUINT_8)(prIeWmmParam->aucTxopLimit_BE)) + (eAci<<2) - , prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit); - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmParam); - -} - - - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_WLAN_MAC_HEADER_T prWlanFrame; - UINT_16 u2TxFrameCtrl; - - DEBUGFUNC("qmGetFrameAction"); - -#if (NIC_TX_BUFF_COUNT_TC4 > 2) -#define QM_MGMT_QUUEUD_THRESHOLD 2 -#else -#define QM_MGMT_QUUEUD_THRESHOLD 1 -#endif - - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD <= (NIC_TX_BUFF_COUNT_TC4)); - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD > 0); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkType]); - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIdx); - - /* XXX Check BOW P2P AIS time ot set active */ - if (!IS_BSS_ACTIVE(prBssInfo)) { - if (eFrameType == FRAME_TYPE_MMPDU) { - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - if ((u2TxFrameCtrl == MAC_FRAME_DEAUTH) && (prMsduInfo->pfTxDoneHandler == NULL)) { - return FRAME_ACTION_TX_PKT; - } - - } - - DBGLOG(QM, INFO, ("Drop packets Action (Inactive %u).\n",prBssInfo->ucNetTypeIndex)); - TX_INC_CNT(&prAdapter->rTxCtrl, TX_INACTIVE_BSS_DROP); - return FRAME_ACTION_DROP_PKT; - } - - /* TODO Handle disconnect issue */ - - /* P2P probe Request frame */ - do { - if(eFrameType == FRAME_TYPE_MMPDU) { - ASSERT(prMsduInfo!=NULL); - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - - if (u2TxFrameCtrl == MAC_FRAME_BEACON ) { - if( prBssInfo->fgIsNetAbsent) { - return FRAME_ACTION_DROP_PKT; - } - } - else if (u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - if ((prBssInfo->fgIsNetAbsent) && (!p2pFuncIsChannelGrant(prAdapter))) { - break; - } - return FRAME_ACTION_TX_PKT; - } - else if (u2TxFrameCtrl == MAC_FRAME_DEAUTH) { - if (prBssInfo->fgIsNetAbsent) { - break; - } - DBGLOG(P2P, LOUD, ("Sending DEAUTH Frame\n")); - return FRAME_ACTION_TX_PKT; - } - /* MMPDU with prStaRec && fgIsInUse not check fgIsNetActive */ - else if(u2TxFrameCtrl == MAC_FRAME_ASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_AUTH - || u2TxFrameCtrl == MAC_FRAME_REASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_PROBE_REQ - || u2TxFrameCtrl == MAC_FRAME_ACTION) { - - if(prStaRec){ - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - return FRAME_ACTION_TX_PKT; - } - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - } - - } /* FRAME_TYPE_MMPDU */ - else if ((eFrameType == FRAME_TYPE_802_1X)){ - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - - } /* FRAME_TYPE_802_1X */ - else if ((!IS_BSS_ACTIVE(prBssInfo)) - || (!prStaRec) - || (!prStaRec->fgIsInUse)){ - return FRAME_ACTION_DROP_PKT; - } - }while(0); - - if (prBssInfo->fgIsNetAbsent){ - DBGLOG(QM, LOUD, ("Queue packets (Absent %u).\n",prBssInfo->ucNetTypeIndex)); - return FRAME_ACTION_QUEUE_PKT; - } - - if (prStaRec && prStaRec->fgIsInPS){ - DBGLOG(QM, LOUD, ("Queue packets (PS %u).\n",prStaRec->fgIsInPS)); - return FRAME_ACTION_QUEUE_PKT; - } - else { - switch (eFrameType){ - case FRAME_TYPE_802_1X: - if (!prStaRec->fgIsValid){ - return FRAME_ACTION_QUEUE_PKT; - } - break; - - case FRAME_TYPE_MMPDU: - break; - - default: - ASSERT(0); - } - } - - return FRAME_ACTION_TX_PKT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle BSS change operation Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_BSS_ABSENCE_PRESENCE_T prEventBssStatus; - P_BSS_INFO_T prBssInfo; - BOOLEAN fgIsNetAbsentOld; - - prEventBssStatus = (P_EVENT_BSS_ABSENCE_PRESENCE_T)prEvent; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prEventBssStatus->ucNetTypeIdx]); - fgIsNetAbsentOld = prBssInfo->fgIsNetAbsent; - prBssInfo->fgIsNetAbsent = prEventBssStatus->fgIsAbsent; - prBssInfo->ucBssFreeQuota = prEventBssStatus->ucBssFreeQuota; - - //DBGLOG(QM, TRACE, ("qmHandleEventBssAbsencePresence (ucNetTypeIdx=%d, fgIsAbsent=%d, FreeQuota=%d)\n", - // prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); - - DBGLOG(QM, TRACE, ("NAF=%d,%d,%d\n", - prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); - - if(!prBssInfo->fgIsNetAbsent) { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_27); - } - else { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_28); - } - /* From Absent to Present */ - if ((fgIsNetAbsentOld) && (!prBssInfo->fgIsNetAbsent)){ - kalSetEvent(prAdapter->prGlueInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle STA change PS mode Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_CHANGE_PS_MODE_T prEventStaChangePsMode; - P_STA_RECORD_T prStaRec; - BOOLEAN fgIsInPSOld; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventStaChangePsMode = (P_EVENT_STA_CHANGE_PS_MODE_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaChangePsMode->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec) { - - fgIsInPSOld = prStaRec->fgIsInPS; - prStaRec->fgIsInPS = prEventStaChangePsMode->fgIsInPs; - - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaChangePsMode->ucUpdateMode, - prEventStaChangePsMode->ucFreeQuota); - - //DBGLOG(QM, TRACE, ("qmHandleEventStaChangePsMode (ucStaRecIdx=%d, fgIsInPs=%d)\n", - // prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - - DBGLOG(QM, TRACE, ("PS=%d,%d\n", - prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - /* From PS to Awake */ - if ((fgIsInPSOld) && (!prStaRec->fgIsInPS)){ - kalSetEvent(prAdapter->prGlueInfo); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota Event from FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_UPDATE_FREE_QUOTA_T prEventStaUpdateFreeQuota; - P_STA_RECORD_T prStaRec; - - - prEventStaUpdateFreeQuota = (P_EVENT_STA_UPDATE_FREE_QUOTA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaUpdateFreeQuota->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec) { - if(prStaRec->fgIsInPS) { - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota); - - kalSetEvent(prAdapter->prGlueInfo); - } -#if 0 - DBGLOG(QM, TRACE, ("qmHandleEventStaUpdateFreeQuota (ucStaRecIdx=%d, ucUpdateMode=%d, ucFreeQuota=%d)\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); -#endif - - DBGLOG(QM, TRACE, ("UFQ=%d,%d,%d\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); - - - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota -* -* \param[in] prStaRec the STA -* \param[in] ucUpdateMode the method to update free quota -* \param[in] ucFreeQuota the value for update -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ) -{ - - UINT_8 ucFreeQuotaForNonDelivery; - UINT_8 ucFreeQuotaForDelivery; - - ASSERT(prStaRec); - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota orig ucFreeQuota=%d Mode %u New %u\n", - prStaRec->ucFreeQuota, ucUpdateMode, ucFreeQuota )); - - if(!prStaRec->fgIsInPS)return; - - switch (ucUpdateMode) { - case FREE_QUOTA_UPDATE_MODE_INIT: - case FREE_QUOTA_UPDATE_MODE_OVERWRITE: - prStaRec->ucFreeQuota = ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_INCREASE: - prStaRec->ucFreeQuota += ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_DECREASE: - prStaRec->ucFreeQuota -= ucFreeQuota; - break; - default: - ASSERT(0); - } - - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota new ucFreeQuota=%d)\n", - prStaRec->ucFreeQuota )); - - ucFreeQuota = prStaRec->ucFreeQuota; - - ucFreeQuotaForNonDelivery = 0; - ucFreeQuotaForDelivery = 0; - - if(ucFreeQuota > 0) { - if( prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - /* XXX We should assign quota to aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES] */ - - if(prStaRec->ucFreeQuotaForNonDelivery > 0 && prStaRec->ucFreeQuotaForDelivery > 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery == 0 && prStaRec->ucFreeQuotaForDelivery == 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery > 0) { - /* NonDelivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForNonDelivery = 2; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery ; - } - else { - ucFreeQuotaForDelivery = ucFreeQuota; - ucFreeQuotaForNonDelivery = 0; - } - } - else if(prStaRec->ucFreeQuotaForDelivery > 0) { - /* Delivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForDelivery = 2; - ucFreeQuotaForNonDelivery = ucFreeQuota - ucFreeQuotaForDelivery; - } - else { - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } - - } - else { - /* !prStaRec->fgIsUapsdSupported */ - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } /* ucFreeQuota > 0 */ - - prStaRec->ucFreeQuotaForDelivery = ucFreeQuotaForDelivery; - prStaRec->ucFreeQuotaForNonDelivery = ucFreeQuotaForNonDelivery; - - DBGLOG(QM, LOUD, ("new QuotaForDelivery = %d QuotaForNonDelivery = %d\n", - prStaRec->ucFreeQuotaForDelivery, prStaRec->ucFreeQuotaForNonDelivery )); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the reorder queued RX packets -* -* \param[in] (none) -* -* \return The number of queued RX packets -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Total; - P_QUE_MGT_T prQM = &prAdapter->rQM; - u4Total = 0; - /* XXX The summation may impact the performance */ - for(i =0; iarRxBaTable[i].rReOrderQue.u4NumElem; -#if DBG && 0 - if(QUEUE_IS_EMPTY(&(prQM->arRxBaTable[i].rReOrderQue))){ - ASSERT(prQM->arRxBaTable[i].rReOrderQue == 0); - } -#endif - } - ASSERT(u4Total <=( CFG_NUM_OF_QM_RX_PKT_NUM*2)); - return u4Total; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_bow.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_bow.c deleted file mode 100755 index bdd30aa9ee72..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_bow.c +++ /dev/null @@ -1,1369 +0,0 @@ -/* -** $Id: @(#) gl_bow.c@@ -*/ - -/*! \file gl_bow.c - \brief Main routines of Linux driver interface for 802.11 PAL (BT 3.0 + HS) - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_bow.c $ - * - * 02 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00235223] [Rose][ICS][Cross Feature][AEE-IPANIC]The device reboot automatically and then the "KE" pops up after you turn on the "Airplane mode".(once) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered or when wlan GLUE_FLAG_HALT is set. - * - * This is a workaround for BOW driver robustness, happens only in ICS. - * - * Root cause should be fixed by CR [ALPS00231570] - * - * 02 03 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00118114] [Rose][ICS][Free Test][Bluetooth]The "KE" pops up after you turn on the airplane mode.(5/5) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered. - * - * Happens only in ICS. - * - * Notified PAL owener to reivew MTKBT/PAL closing BOW char dev procedure. - * - * [Side Effect] - * None. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 25 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Modify ampc0 char device for major number 151 for all MT6575 projects. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * unlocked_ioctl returns as long instead of int. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * migrate to unlocked ioctl interface - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * replace alloc_netdev to alloc_netdev_mq for BoW - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update net register and BOW for concurrent features. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * correct typo: POLLOUT instead of POLL_OUT - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * multiple BoW interfaces need to compare with peer address - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * fix kalIndicateBOWEvent. - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include "bss.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* @FIXME if there is command/event with payload length > 28 */ -#define MAX_BUFFER_SIZE (64) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_BOW_TEST - UINT_32 g_u4PrevSysTime = 0; - UINT_32 g_u4CurrentSysTime = 0; - UINT_32 g_arBowRevPalPacketTime[11]; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -// forward declarations -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg); - -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait); - -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp); - -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp); - - -// character file operations -static const struct file_operations mt6620_ampc_fops = { - //.owner = THIS_MODULE, - .read = mt6620_ampc_read, - .write = mt6620_ampc_write, - .unlocked_ioctl = mt6620_ampc_ioctl, - .poll = mt6620_ampc_poll, - .open = mt6620_ampc_open, - .release = mt6620_ampc_release, -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for character device to communicate with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == TRUE) { - return FALSE; - } - else { -#if 0 - // 1. allocate major number dynamically - - if(alloc_chrdev_region(&(prGlueInfo->rBowInfo.u4DeviceNumber), - 0, // first minor number - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - -#if 1 - -#if defined (CONFIG_AMPC_CDEV_NUM) - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(CONFIG_AMPC_CDEV_NUM, 0); -#else - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(226, 0); -#endif - - if(register_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - - // 2. spin-lock initialization - // spin_lock_init(&(prGlueInfo->rBowInfo.rSpinLock)); - - // 3. initialize kfifo -/* prGlueInfo->rBowInfo.prKfifo = kfifo_alloc(GLUE_BOW_KFIFO_DEPTH, - GFP_KERNEL, - &(prGlueInfo->rBowInfo.rSpinLock));*/ - if ((kfifo_alloc((struct kfifo *) &(prGlueInfo->rBowInfo.rKfifo), GLUE_BOW_KFIFO_DEPTH, GFP_KERNEL))) - goto fail_kfifo_alloc; - -// if(prGlueInfo->rBowInfo.prKfifo == NULL) - if(&(prGlueInfo->rBowInfo.rKfifo) == NULL) - goto fail_kfifo_alloc; - - // 4. initialize cdev - cdev_init(&(prGlueInfo->rBowInfo.cdev), &mt6620_ampc_fops); - // prGlueInfo->rBowInfo.cdev.owner = THIS_MODULE; - prGlueInfo->rBowInfo.cdev.ops = &mt6620_ampc_fops; - - // 5. add character device - if(cdev_add(&(prGlueInfo->rBowInfo.cdev), - prGlueInfo->rBowInfo.u4DeviceNumber, - 1)) - goto fail_cdev_add; - - - // 6. in queue initialization - init_waitqueue_head(&(prGlueInfo->rBowInfo.outq)); - - // 7. finish - prGlueInfo->rBowInfo.fgIsRegistered = TRUE; - return TRUE; - -fail_cdev_add: - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); -fail_kfifo_alloc: - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - return FALSE; - } -} /* end of glRegisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister character device for communicating with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == FALSE) { - return FALSE; - } - else { - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - - // 1. free netdev if necessary -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prGlueInfo); -#endif - - // 2. removal of character device - cdev_del(&(prGlueInfo->rBowInfo.cdev)); - - // 3. free kfifo -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// prGlueInfo->rBowInfo.prKfifo = NULL; -// prGlueInfo->rBowInfo.rKfifo = NULL; - - // 4. free device number - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - - return TRUE; - } -} /* end of glUnregisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief read handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - ssize_t retval; - - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // size check -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) >= size) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) >= size) - retval = size; - else - retval = kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); -// retval = kfifo_len(prGlueInfo->rBowInfo.prKfifo); - -// kfifo_get(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); -// kfifo_out(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); - if (!(kfifo_out(&(prGlueInfo->rBowInfo.rKfifo), aucBuffer, retval))) - retval = -EIO; - - if(copy_to_user(buf, aucBuffer, retval)) - retval = -EIO; - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief write handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ -#if CFG_BOW_TEST - UINT_8 i; -#endif - - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - P_AMPC_COMMAND prCmd; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - if(size > MAX_BUFFER_SIZE) - return -EINVAL; - else if(copy_from_user(aucBuffer, buf, size)) - return -EIO; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP driver CMD buffer size : %d.\n", size)); - - for(i = 0; i < MAX_BUFFER_SIZE; i++) - { - DBGLOG(BOW, EVENT, ("AMP write content : 0x%x.\n", aucBuffer[i])); - } - - DBGLOG(BOW, EVENT, ("BoW CMD write.\n")); -#endif - - prCmd = (P_AMPC_COMMAND) aucBuffer; - - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP write content payload length : %d.\n", prCmd->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("AMP write content header length : %d.\n", sizeof(AMPC_COMMAND_HEADER_T))); - #endif - - // size check - if(prCmd->rHeader.u2PayloadLength + sizeof(AMPC_COMMAND_HEADER_T) != size) - { - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Wrong CMD total length.\n")); - #endif - - return -EINVAL; - } - - if(wlanbowHandleCommand(prGlueInfo->prAdapter, prCmd) == WLAN_STATUS_SUCCESS) - return size; - else - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg) -{ - int err = 0; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // permission check - if(_IOC_DIR(cmd) & _IOC_READ) - err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd)); - else if (_IOC_DIR(cmd) & _IOC_WRITE) - err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd)); - if (err) - return -EFAULT; - - // no ioctl is implemented yet - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait) -{ - unsigned int retval; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - poll_wait(filp, &prGlueInfo->rBowInfo.outq, wait); - - retval = (POLLOUT | POLLWRNORM); // always accepts incoming command packets - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLOUT | POLLWRNORM, %x\n", retval)); - -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) > 0) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) > 0) - { - retval |= (POLLIN | POLLRDNORM); - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLIN | POLLRDNORM, %x\n", retval)); - - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief open handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - P_GL_BOW_INFO prBowInfo; - - prBowInfo = container_of(inodep->i_cdev, GL_BOW_INFO, cdev); - ASSERT(prBowInfo); - - prGlueInfo = container_of(prBowInfo, GLUE_INFO_T, rBowInfo); - ASSERT(prGlueInfo); - - // set-up private data - filp->private_data = prGlueInfo; - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief close handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to indicate event for Bluetooth over Wi-Fi -* -* \param[in] -* prGlueInfo -* prEvent -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ) -{ - size_t u4AvailSize, u4EventSize; - - ASSERT(prGlueInfo); - ASSERT(prEvent); - - // check device - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return; - } - -/* u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(prGlueInfo->rBowInfo.prKfifo);*/ - - u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); - - - u4EventSize = - prEvent->rHeader.u2PayloadLength + sizeof(AMPC_EVENT_HEADER_T); - - // check kfifo availability - if(u4AvailSize < u4EventSize) { - DBGLOG(BOW, EVENT, ("[bow] no space for event: %d/%d\n", - u4EventSize, - u4AvailSize)); - return; - } - - // queue into kfifo -// kfifo_put(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); -// kfifo_in(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); - kfifo_in(&(prGlueInfo->rBowInfo.rKfifo), (PUINT_8)prEvent, u4EventSize); - wake_up_interruptible(&(prGlueInfo->rBowInfo.outq)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState.\n")); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalGetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); - -#endif - - return prGlueInfo->rBowInfo.aeState[i]; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState.\n")); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.arPeerAddr, %x:%x:%x:%x:%x:%x.\n", - prGlueInfo->rBowInfo.arPeerAddr[0], - prGlueInfo->rBowInfo.arPeerAddr[1], - prGlueInfo->rBowInfo.arPeerAddr[2], - prGlueInfo->rBowInfo.arPeerAddr[3], - prGlueInfo->rBowInfo.arPeerAddr[4], - prGlueInfo->rBowInfo.arPeerAddr[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - prGlueInfo->rBowInfo.aeState[i] = eBowState; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); -#endif - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi global state -* -* \param[in] -* prGlueInfo -* -* \return -* BOW_DEVICE_STATE_DISCONNECTED -* in case there is no BoW connection or -* BoW connection under initialization -* -* BOW_DEVICE_STATE_STARTING -* in case there is no BoW connection but -* some BoW connection under initialization -* -* BOW_DEVICE_STATE_CONNECTED -* in case there is any BoW connection available -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - -//Henry, can reduce this logic to indentify state change - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_CONNECTED) { - return BOW_DEVICE_STATE_CONNECTED; - } - } - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_STARTING) { - return BOW_DEVICE_STATE_STARTING; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rBowInfo.u4FreqInKHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: Responder -* 1: Initiator -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - return prGlueInfo->rBowInfo.aucRole[i]; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* ucRole -* 0: Responder -* 1: Initiator -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 1); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - prGlueInfo->rBowInfo.aucRole[i] = ucRole; //Henry, 0 : Responder, 1 : Initiator - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get available Bluetooth-over-Wi-Fi physical link number -* -* \param[in] -* prGlueInfo -* \return -* UINT_32 -* how many physical links are aviailable -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i; - UINT_8 ucLinkCount = 0; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_DISCONNECTED) { - ucLinkCount++; - } - } - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowAvailablePhysicalLinkCount, ucLinkCount, %c.\n", ucLinkCount)); -#endif - - return ucLinkCount; -} - -#if CFG_BOW_SEPARATE_DATA_PATH - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowOpen( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); - - /* 2. turn of carrier */ - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -}; - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is TX entry point of NET DEVICE. - * - * \param[in] prSkb Pointer of the sk_buff to be sent - * \param[in] prDev Pointer to struct net_device - * - * \retval NETDEV_TX_OK - on success. - * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - */ -/*----------------------------------------------------------------------------*/ -static int -bowHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - PUINT_8 aucLookAheadBuf = NULL; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - aucLookAheadBuf = prSkb->data; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if (!(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) || (prSkb->len > 1514)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Invalid BOW packet, skip tx\n")); -#endif - - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(BOW, TRACE, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Tx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n"); -#endif - -#if CFG_BOW_TEST -// g_u4CurrentSysTime = (OS_SYSTIME)kalGetTimeTick(); - - g_u4CurrentSysTime = (OS_SYSTIME) jiffies_to_usecs(jiffies); - - i = g_u4CurrentSysTime - g_u4PrevSysTime; - - if ( (i >> 10) > 0) - { - i = 10; - } - else - { - i = i >> 7; - } - - g_arBowRevPalPacketTime[i]++; - - g_u4PrevSysTime = g_u4CurrentSysTime; - -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} - - -// callbacks for netdevice -static const struct net_device_ops bow_netdev_ops = { - .ndo_open = bowOpen, - .ndo_stop = bowStop, - .ndo_start_xmit = bowHardStartXmit, -}; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief initialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* prDevName -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ) -{ - P_ADAPTER_T prAdapter; - P_GL_HIF_INFO_T prHif; - PARAM_MAC_ADDRESS rMacAddr; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == FALSE) { - prGlueInfo->rBowInfo.prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - - if (!prGlueInfo->rBowInfo.prDevHandler) { - return FALSE; - } - else { - /* 1. setup netdev */ - /* 1.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->rBowInfo.prDevHandler)) = prGlueInfo; - - /* 1.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] |= 0x2; // change to local administrated address - memcpy(prGlueInfo->rBowInfo.prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->rBowInfo.prDevHandler->perm_addr, prGlueInfo->rBowInfo.prDevHandler->dev_addr, ETH_ALEN); - - /* 1.3 register callback functions */ - prGlueInfo->rBowInfo.prDevHandler->netdev_ops = &bow_netdev_ops; - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->rBowInfo.prDevHandler, &(prHif->func->dev)); -#endif - - register_netdev(prGlueInfo->rBowInfo.prDevHandler); - - /* 2. net device initialize */ - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* 3. finish */ - prGlueInfo->rBowInfo.fgIsNetRegistered = TRUE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief uninitialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - //ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == TRUE) { - - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - - if(netif_carrier_ok(prGlueInfo->rBowInfo.prDevHandler)) { - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->rBowInfo.prDevHandler); - free_netdev(prGlueInfo->rBowInfo.prDevHandler); - prGlueInfo->rBowInfo.prDevHandler = NULL; - - return TRUE; - - } - else { - return FALSE; - } -} - -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_cfg80211.c deleted file mode 100755 index 6cfaca00649f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_cfg80211.c +++ /dev/null @@ -1,1600 +0,0 @@ -/* -** $Id: @(#) gl_cfg80211.c@@ -*/ - -/*! \file gl_cfg80211.c - \brief Main routines for supporintg MT6620 cfg80211 control interface - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_cfg80211.c $ -** -** 11 23 2012 yuche.tsai -** [ALPS00398671] [Acer-Tablet] Remove Wi-Fi Direct completely -** Fix bug of WiFi may reboot under user load, when WiFi Direct is removed.. -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 30 2012 chinglan.wang -** [ALPS00349664] [6577JB][WIFI] Phone can not connect to AP secured with AES via WPS in 802.11n Only -** . - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_SUPPORT_WAPI - extern UINT_8 keyStructBuf[1024]; /* add/remove key shared buffer */ -#else - extern UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for change STA type between - * 1. Infrastructure Client (Non-AP STA) - * 2. Ad-Hoc IBSS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(type == NL80211_IFTYPE_STATION) { - eOpMode = NET_TYPE_INFRA; - } - else if(type == NL80211_IFTYPE_ADHOC) { - eOpMode = NET_TYPE_IBSS; - } - else { - return -EINVAL; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set infrastructure mode error:%lx\n", rStatus)); - } - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for adding key - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - PARAM_KEY_T rKey; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - INT_32 i4Rslt = -EINVAL; - UINT_32 u4BufLen = 0; - UINT_8 tmp1[8]; - UINT_8 tmp2[8]; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rKey, sizeof(PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - - if(mac_addr) { - COPY_MAC_ADDR(rKey.arBSSID, mac_addr); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - //rKey.u4KeyIndex |= BIT(31); //Enable BIT 31 will make tx use bc key id, should use pairwise key id 0 - } - - if(params->key) { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - if (params->key_len == 32) { - kalMemCopy(tmp1, ¶ms->key[16], 8); - kalMemCopy(tmp2, ¶ms->key[24], 8); - kalMemCopy(&rKey.aucKeyMaterial[16], tmp2, 8); - kalMemCopy(&rKey.aucKeyMaterial[24], tmp1, 8); - } - } - - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for removing key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_32 u4BufLen = 0; - INT_32 i4Rslt = -EINVAL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - COPY_MAC_ADDR(rRemoveKey.arBSSID, mac_addr); - rRemoveKey.u4KeyIndex = key_index; - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - &rRemoveKey, - rRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("remove key error:%lx\n", rStatus)); - } - else { - i4Rslt = 0; - } - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for setting default key on an interface - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting station information such as RSSI - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4BufLen, u4Rate; - INT_32 i4Rssi; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(arBssid, MAC_ADDR_LEN); - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &u4BufLen); - - /* 1. check BSSID */ - if(UNEQUAL_MAC_ADDR(arBssid, mac)) { - /* wrong MAC address */ - DBGLOG(REQ, WARN, ("incorrect BSSID: ["MACSTR"] currently connected BSSID["MACSTR"]\n", - MAC2STR(mac), MAC2STR(arBssid))); - return -ENOENT; - } - - /* 2. fill TX rate */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - sinfo->filled |= STATION_INFO_TX_BITRATE; - sinfo->txrate.legacy = u4Rate / 1000; /* convert from 100bps to 100kbps */ - } - - if(prGlueInfo->eParamMediaStateIndicated != PARAM_MEDIA_STATE_CONNECTED) { - /* not connected */ - DBGLOG(REQ, WARN, ("not yet connected\n")); - } - else { - /* 3. fill RSSI */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - sinfo->filled |= STATION_INFO_SIGNAL; - //in the cfg80211 layer, the signal is a signed char variable. - if(i4Rssi < -128) - sinfo->signal = -128; - else - sinfo->signal = i4Rssi; /* dBm */ - } - } - - sinfo->rx_packets = prGlueInfo->rNetDevStats.rx_packets; - sinfo->filled |= STATION_INFO_TX_PACKETS; - sinfo->tx_packets = prGlueInfo->rNetDevStats.tx_packets; - sinfo->filled |= STATION_INFO_TX_FAILED; - -#if 1 - { - WLAN_STATUS rStatus; - UINT_32 u4XmitError = 0; -// UINT_32 u4XmitOk = 0; -// UINT_32 u4RecvError = 0; -// UINT_32 u4RecvOk = 0; -// UINT_32 u4BufLen; - - /* @FIX ME: need a more clear way to do this */ - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitError, - &u4XmitError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - - prGlueInfo->rNetDevStats.tx_errors = u4XmitError; - - } -#else - prGlueInfo->rNetDevStats.tx_errors = 0; -#endif - - sinfo->tx_failed = prGlueInfo->rNetDevStats.tx_errors; - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to do a scan - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PARAM_SCAN_REQUEST_EXT_T rScanRequest; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rScanRequest, sizeof(PARAM_SCAN_REQUEST_EXT_T)); - - /* check if there is any pending scan not yet finished */ - if(prGlueInfo->prScanRequest != NULL) { - return -EBUSY; - } - - if(request->n_ssids == 0) { - rScanRequest.rSsid.u4SsidLen = 0; - } - else if(request->n_ssids == 1) { - COPY_SSID(rScanRequest.rSsid.aucSsid, rScanRequest.rSsid.u4SsidLen, request->ssids[0].ssid, request->ssids[0].ssid_len); - } - else { - return -EINVAL; - } - - if(request->ie_len > 0) { - rScanRequest.u4IELength = request->ie_len; - rScanRequest.pucIE = (PUINT_8)(request->ie); - } - else { - rScanRequest.u4IELength = 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScanExt, - &rScanRequest, - sizeof(PARAM_SCAN_REQUEST_EXT_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("scan error:%lx\n", rStatus)); - return -EINVAL; - } - - prGlueInfo->prScanRequest = request; - - return 0; -} - -static UINT_8 wepBuf[48]; - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to connect to - * the ESS with the specified parameters - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - UINT_32 cipher; - PARAM_SSID_T rNewSsid; - BOOLEAN fgCarryWPSIE = FALSE; - ENUM_PARAM_OP_MODE_T eOpMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if (prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode > NET_TYPE_AUTO_SWITCH) - eOpMode = NET_TYPE_AUTO_SWITCH; - else - eOpMode = prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetInfrastructureMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_1) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA; - else if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_2) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA2; - else - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - - switch (sme->auth_type) { - case NL80211_AUTHTYPE_OPEN_SYSTEM: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - break; - case NL80211_AUTHTYPE_SHARED_KEY: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY; - break; - default: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM | IW_AUTH_ALG_SHARED_KEY; - break; - } - - if (sme->crypto.n_ciphers_pairwise) { - prGlueInfo->prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4PairwiseKeyCipherSuite[0] = sme->crypto.ciphers_pairwise[0]; - switch (sme->crypto.ciphers_pairwise[0]) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher pairwise (%d)\n", - sme->crypto.ciphers_pairwise[0])); - return -EINVAL; - } - } - - if (sme->crypto.cipher_group) { - prGlueInfo->prAdapter->rWifiVar.rConnSettings.rRsnInfo.u4GroupKeyCipherSuite = sme->crypto.cipher_group; - switch (sme->crypto.cipher_group) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - - if (sme->crypto.n_akm_suites) { - prGlueInfo->prAdapter->rWifiVar.rConnSettings.rRsnInfo.au4AuthKeyMgtSuite[0] = sme->crypto.akm_suites[0]; - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } else if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA2; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - } - - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - } - - prGlueInfo->rWpaInfo.fgPrivacyInvoke = sme->privacy; - - //prGlueInfo->prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - prGlueInfo->fgWpsActive = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; - - if (sme->ie && sme->ie_len > 0) { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PUINT_8 prDesiredIE = NULL; - -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - sme->ie, - sme->ie_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("[wapi] set wapi assoc info error:%lx\n", rStatus)); - } -#endif -#if CFG_SUPPORT_WPS2 - if (wextSrchDesiredWPSIE(sme->ie, - sme->ie_len, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - prGlueInfo->fgWpsActive = TRUE; - fgCarryWPSIE = TRUE; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("WSC] set WSC assoc info error:%lx\n", rStatus)); - } - } -#endif - } - - /* clear WSC Assoc IE buffer in case WPS IE is not detected */ - if(fgCarryWPSIE == FALSE) { - kalMemZero(&prGlueInfo->aucWSCAssocInfoIE, 200); - prGlueInfo->u2WSCAssocInfoIELen = 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set auth mode error:%lx\n", rStatus)); - } - - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | prGlueInfo->rWpaInfo.u4CipherPairwise; - - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) { - if (cipher & IW_AUTH_CIPHER_CCMP) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set encryption mode error:%lx\n", rStatus)); - } - - if (sme->key_len != 0 && prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - kalMemSet(prWepKey, 0, sizeof(prWepKey)); - prWepKey->u4Length = 12 + sme->key_len; - prWepKey->u4KeyLength = (UINT_32) sme->key_len; - prWepKey->u4KeyIndex = (UINT_32) sme->key_idx; - prWepKey->u4KeyIndex |= BIT(31); - if (prWepKey->u4KeyLength > 32) { - DBGLOG(REQ, WARN, ("Too long key length (%u)\n", prWepKey->u4KeyLength)); - return -EINVAL; - } - kalMemCopy(prWepKey->aucKeyMaterial, sme->key, prWepKey->u4KeyLength); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - } - - if(sme->ssid_len > 0) { - /* connect by SSID */ - COPY_SSID(rNewSsid.aucSsid, rNewSsid.u4SsidLen, sme->ssid, sme->ssid_len); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EINVAL; - } - } - else { - /* connect by BSSID */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssid, - (PVOID) sme->bssid, - sizeof(MAC_ADDR_LEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set BSSID:%lx\n", rStatus)); - return -EINVAL; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to disconnect from - * currently connected ESS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to join an IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ) -{ - PARAM_SSID_T rNewSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - UINT_32 u4BufLen = 0; - WLAN_STATUS rStatus; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - /* set channel */ - if(params->channel) { - u4ChnlFreq = nicChannelNum2Freq(params->channel->hw_value); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - } - - /* set SSID */ - kalMemCopy(rNewSsid.aucSsid, params->ssid, params->ssid_len); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; - - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to leave from IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to configure - * WLAN power managemenet - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PARAM_POWER_MODE ePowerMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(enabled) { - if(timeout == -1) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - ePowerMode = Param_PowerModeMAX_PSP; - } - } - else { - ePowerMode = Param_PowerModeCAM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set_power_mgmt error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cache - * a PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, pmksa->bssid, 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, pmksa->pmkid, IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to remove - * a cached PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to flush - * all cached PMKID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to stay on a - * specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel staying - * on a specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to send a management frame - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel the wait time - * from transmitting a management frame on another channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -#if CONFIG_NL80211_TESTMODE - -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SET_KEY_EXTS prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)NULL; - struct iw_encode_exts *prIWEncExt = (struct iw_encode_exts *)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4BufLen = 0; - - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) { - prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)data; - } - - if(prParams) { - prIWEncExt = (struct iw_encode_exts *) &prParams->ext; - } - - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - /* KeyID */ - prWpiKey->ucKeyID = prParams->key_index; - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - -//#if CFG_SUPPORT_WAPI - //handle_sec_msg_final(prIWEncExt->key, 32, prIWEncExt->key, NULL); -//#endif - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rstatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rstatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - fgIsValid = -EFAULT; - } - - } - return fgIsValid; -} -#endif - - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SW_CMD_PARAMS prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4SetInfoLen = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) - prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)data; - - if(prParams) { - if(prParams->set == 1){ - rstatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)wlanoidSetSwCtrlWrite, - &prParams->adr, - (UINT_32)8, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - } - - if (WLAN_STATUS_SUCCESS != rstatus) { - fgIsValid = -EFAULT; - } - - return fgIsValid; -} - -int mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_MODE_PARAMS prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)NULL; - BOOLEAN fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)data; - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* SW cmd */ - if(mtk_cfg80211_testmode_sw_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - case 2: /* WAPI */ -#if CFG_SUPPORT_WAPI - if(mtk_cfg80211_testmode_set_key_ext(wiphy, data, len)) - fgIsValid = TRUE; -#endif - break; - default: - fgIsValid = TRUE; - break; - } - } - - return fgIsValid; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_init.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_init.c deleted file mode 100755 index fe0330e44226..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_init.c +++ /dev/null @@ -1,3161 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_init.c#7 $ -*/ - -/*! \file gl_init.c - \brief Main routines of Linux driver - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_init.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 25 2012 yuche.tsai - * NULL - * Fix reset KE issue. - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 02 2012 terry.wu - * NULL - * EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem);. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 12 22 2011 george.huang - * [WCXRP00000905] [MT6628 Wi-Fi][FW] Code refinement for ROM/ RAM module dependency - * using global variable instead of stack for setting wlanoidSetNetworkAddress(), due to buffer may be released before TX thread handling - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 06 2011 eddie.chen - * [WCXRP00001027] [MT6628 Wi-Fi][Firmware/Driver] Tx fragmentation - * Add rlmDomainGetChnlList symbol. - * - * 09 22 2011 cm.chang - * NULL - * Safer writng stype to avoid unitialized regitry structure - * - * 09 21 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Avoid possible structure alignment problem - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * expose scnQuerySparseChannel() for P2P-FSM. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 07 2011 wh.su - * [WCXRP00000839] [MT6620 Wi-Fi][Driver] Add the dumpMemory8 and dumpMemory32 EXPORT_SYMBOL - * Add the dumpMemory8 symbol export for debug mode. - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Export one symbol for enhancement. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Modify some driver connection flow or behavior to pass Sigma test more easier.. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 11 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * export wlan functions to p2p - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * glBusFreeIrq() should use the same pvCookie as glBusSetIrq() or request_irq()/free_irq() won't work as a pair. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * fix typo. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * reverse order to prevent probing racing. - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine the queue_select function - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export nicQmUpdateWmmParms. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 24 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Support ARP filter during suspended - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 17 2011 terry.wu - * [WCXRP00000459] [MT6620 Wi-Fi][Driver] Fix deference null pointer problem in wlanRemove - * Fix deference a null pointer problem in wlanRemove. - * - * 02 16 2011 jeffrey.chang - * NULL - * fix compilig error - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add one more export symbol. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * Export Deactivation Network. - * - * 02 01 2011 jeffrey.chang - * [WCXRP00000414] KAL Timer is not unregistered when driver not loaded - * Unregister the KAL timer during driver unloading - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 15 2010 cp.wu - * [WCXRP00000265] [MT6620 Wi-Fi][Driver] Remove set_mac_address routine from legacy Wi-Fi Android driver - * remove set MAC address. MAC address is always loaded from NVRAM instead. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 21 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * . - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000106] [MT6620 Wi-Fi][Driver] Enable setting multicast callback in Android - * . - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 yarco.yang - * NULL - * Support Linux x86 - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 jeffrey.chang - * NULL - * fix memory leak for module unloading - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Query statistics from firmware - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify tcp/ip checksum offload flags - * - * 04 16 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix tcp/ip checksum offload bug - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * * (2) disable set Multicast address during atomic context - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding debug module - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix f/w download start and load address by using config.h - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download support - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\52 2009-10-27 22:49:59 GMT mtk01090 -** Fix compile error for Linux EHPI driver -** \main\maintrunk.MT5921\51 2009-10-20 17:38:22 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\50 2009-10-08 10:33:11 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\49 2009-09-28 20:19:05 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\48 2009-09-03 13:58:46 GMT mtk01088 -** remove non-used code -** \main\maintrunk.MT5921\47 2009-09-03 11:40:25 GMT mtk01088 -** adding the module parameter for wapi -** \main\maintrunk.MT5921\46 2009-08-18 22:56:41 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\45 2009-07-06 20:53:00 GMT mtk01088 -** adding the code to check the wapi 1x frame -** \main\maintrunk.MT5921\44 2009-06-23 23:18:55 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\43 2009-02-16 23:46:51 GMT mtk01461 -** Revise the order of increasing u4TxPendingFrameNum because of CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\42 2009-01-22 13:11:59 GMT mtk01088 -** set the tid and 1x value at same packet reserved field -** \main\maintrunk.MT5921\41 2008-10-20 22:43:53 GMT mtk01104 -** Fix wrong variable name "prDev" in wlanStop() -** \main\maintrunk.MT5921\40 2008-10-16 15:37:10 GMT mtk01461 -** add handle WLAN_STATUS_SUCCESS in wlanHardStartXmit() for CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\39 2008-09-25 15:56:21 GMT mtk01461 -** Update driver for Code review -** \main\maintrunk.MT5921\38 2008-09-05 17:25:07 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\37 2008-09-02 10:57:06 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\36 2008-08-05 01:53:28 GMT mtk01461 -** Add support for linux statistics -** \main\maintrunk.MT5921\35 2008-08-04 16:52:58 GMT mtk01461 -** Fix ASSERT if removing module in BG_SSID_SCAN state -** \main\maintrunk.MT5921\34 2008-06-13 22:52:24 GMT mtk01461 -** Revise status code handling in wlanHardStartXmit() for WLAN_STATUS_SUCCESS -** \main\maintrunk.MT5921\33 2008-05-30 18:56:53 GMT mtk01461 -** Not use wlanoidSetCurrentAddrForLinux() -** \main\maintrunk.MT5921\32 2008-05-30 14:39:40 GMT mtk01461 -** Remove WMM Assoc Flag -** \main\maintrunk.MT5921\31 2008-05-23 10:26:40 GMT mtk01084 -** modify wlanISR interface -** \main\maintrunk.MT5921\30 2008-05-03 18:52:36 GMT mtk01461 -** Fix Unset Broadcast filter when setMulticast -** \main\maintrunk.MT5921\29 2008-05-03 15:17:26 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\28 2008-04-24 22:48:21 GMT mtk01461 -** Revise set multicast function by using windows oid style for LP own back -** \main\maintrunk.MT5921\27 2008-04-24 12:00:08 GMT mtk01461 -** Fix multicast setting in Linux and add comment -** \main\maintrunk.MT5921\26 2008-03-28 10:40:22 GMT mtk01461 -** Fix set mac address func in Linux -** \main\maintrunk.MT5921\25 2008-03-26 15:37:26 GMT mtk01461 -** Add set MAC Address -** \main\maintrunk.MT5921\24 2008-03-26 14:24:53 GMT mtk01461 -** For Linux, set net_device has feature with checksum offload by default -** \main\maintrunk.MT5921\23 2008-03-11 14:50:52 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT5921\22 2008-02-29 15:35:20 GMT mtk01088 -** add 1x decide code for sw port control -** \main\maintrunk.MT5921\21 2008-02-21 15:01:54 GMT mtk01461 -** Rearrange the set off place of GLUE spin lock in HardStartXmit -** \main\maintrunk.MT5921\20 2008-02-12 23:26:50 GMT mtk01461 -** Add debug option - Packet Order for Linux and add debug level - Event -** \main\maintrunk.MT5921\19 2007-12-11 00:11:12 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\18 2007-11-30 17:02:25 GMT mtk01425 -** 1. Set Rx multicast packets mode before setting the address list -** \main\maintrunk.MT5921\17 2007-11-26 19:44:24 GMT mtk01461 -** Add OS_TIMESTAMP to packet -** \main\maintrunk.MT5921\16 2007-11-21 15:47:20 GMT mtk01088 -** fixed the unload module issue -** \main\maintrunk.MT5921\15 2007-11-07 18:37:38 GMT mtk01461 -** Fix compile warnning -** \main\maintrunk.MT5921\14 2007-11-02 01:03:19 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\13 2007-10-30 10:42:33 GMT mtk01425 -** 1. Refine for multicast list -** \main\maintrunk.MT5921\12 2007-10-25 18:08:13 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "gl_cfg80211.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define MAX_IOREQ_NUM 10 - -BOOLEAN fgIsUnderEarlierSuspend = false; - -struct semaphore g_halt_sem; -int g_u4HaltFlag = 0; - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Tasklet mechanism is like buttom-half in Linux. We just want to - * send a signal to OS for interrupt defer processing. All resources - * are NOT allowed reentry, so txPacket, ISR-DPC and ioctl must avoid preempty. - */ -typedef struct _WLANDEV_INFO_T { - struct net_device *prDev; -} WLANDEV_INFO_T, *P_WLANDEV_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -MODULE_AUTHOR(NIC_AUTHOR); -MODULE_DESCRIPTION(NIC_DESC); -MODULE_SUPPORTED_DEVICE(NIC_NAME); - -#if 0 - MODULE_LICENSE("MTK Propietary"); -#else - MODULE_LICENSE("GPL"); -#endif - -#define NIC_INF_NAME "wlan%d" /* interface name */ - -#if DBG - UINT_8 aucDebugModule[DBG_MODULE_NUM]; - UINT_32 u4DebugModule = 0; -#endif /* DBG */ - -//4 2007/06/26, mikewu, now we don't use this, we just fix the number of wlan device to 1 -static WLANDEV_INFO_T arWlanDevInfo[CFG_MAX_WLAN_DEVICES] = {{0}}; -static UINT_32 u4WlanDevNum = 0; /* How many NICs coexist now */ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if CFG_ENABLE_WIFI_DIRECT -static SUB_MODULE_HANDLER rSubModHandler[SUB_MODULE_NUM] = {{NULL}}; -#endif - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_5ghz_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 mtk_cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_wlan_ops = { - .change_virtual_intf = mtk_cfg80211_change_iface, - .add_key = mtk_cfg80211_add_key, - .get_key = mtk_cfg80211_get_key, - .del_key = mtk_cfg80211_del_key, - .set_default_key = mtk_cfg80211_set_default_key, - .get_station = mtk_cfg80211_get_station, - .scan = mtk_cfg80211_scan, - .connect = mtk_cfg80211_connect, - .disconnect = mtk_cfg80211_disconnect, - .join_ibss = mtk_cfg80211_join_ibss, - .leave_ibss = mtk_cfg80211_leave_ibss, - .set_power_mgmt = mtk_cfg80211_set_power_mgmt, - .set_pmksa = mtk_cfg80211_set_pmksa, - .del_pmksa = mtk_cfg80211_del_pmksa, - .flush_pmksa = mtk_cfg80211_flush_pmksa, - - /* Action Frame TX/RX */ - .remain_on_channel = mtk_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_cfg80211_mgmt_tx, - .mgmt_tx_cancel_wait = mtk_cfg80211_mgmt_tx_cancel_wait, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_cfg80211_testmode_cmd, - #endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -unsigned int _cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -wlanSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Load NVRAM data and translate it into REG_INFO_T -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* \param[out] prRegInfo Pointer to struct REG_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -glLoadNvram ( - IN P_GLUE_INFO_T prGlueInfo, - OUT P_REG_INFO_T prRegInfo - ) -{ - UINT_32 i, j; - UINT_8 aucTmp[2]; - PUINT_8 pucDest; - - ASSERT(prGlueInfo); - ASSERT(prRegInfo); - - if((!prGlueInfo) || (!prRegInfo)) { - return; - } - - if(kalCfgDataRead16(prGlueInfo, - sizeof(WIFI_CFG_PARAM_STRUCT) - sizeof(UINT_16), - (PUINT_16)aucTmp) == TRUE) { - prGlueInfo->fgNvramAvailable = TRUE; - - // load MAC Address - for (i = 0 ; i < sizeof(PARAM_MAC_ADDR_LEN) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prRegInfo->aucMacAddr) + i)); - } - - // load country code - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucCountryCode[0]), - (PUINT_16)aucTmp); - - // cast to wide characters - prRegInfo->au2CountryCode[0] = (UINT_16) aucTmp[0]; - prRegInfo->au2CountryCode[1] = (UINT_16) aucTmp[1]; - - // load default normal TX power - for (i = 0 ; i < sizeof(TX_PWR_PARAM_T) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, rTxPwr) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->rTxPwr)) + i)); - } - - // load feature flags - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucTxPwrValid), - (PUINT_16)aucTmp); - prRegInfo->ucTxPwrValid = aucTmp[0]; - prRegInfo->ucSupport5GBand = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, uc2G4BwFixed20M), - (PUINT_16)aucTmp); - prRegInfo->uc2G4BwFixed20M = aucTmp[0]; - prRegInfo->uc5GBwFixed20M = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucEnable5GBand), - (PUINT_16)aucTmp); - prRegInfo->ucEnable5GBand = aucTmp[0]; - - /* load EFUSE overriding part */ - for (i = 0 ; i < sizeof(prRegInfo->aucEFUSE) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->aucEFUSE)) + i)); - } - - /* load band edge tx power control */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, fg2G4BandEdgePwrUsed), - (PUINT_16)aucTmp); - prRegInfo->fg2G4BandEdgePwrUsed = (BOOLEAN)aucTmp[0]; - if (aucTmp[0]) { - prRegInfo->cBandEdgeMaxPwrCCK = (INT_8)aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, cBandEdgeMaxPwrOFDM20), - (PUINT_16)aucTmp); - prRegInfo->cBandEdgeMaxPwrOFDM20 = (INT_8)aucTmp[0]; - prRegInfo->cBandEdgeMaxPwrOFDM40 = (INT_8)aucTmp[1]; - } - - /* load regulation subbands */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucRegChannelListMap), - (PUINT_16)aucTmp); - prRegInfo->eRegChannelListMap = (ENUM_REG_CH_MAP_T) aucTmp[0]; - prRegInfo->ucRegChannelListIndex = aucTmp[1]; - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - for (i = 0 ; i < MAX_SUBBAND_NUM; i++) { - pucDest = (PUINT_8) &prRegInfo->rDomainInfo.rSubBand[i]; - for (j = 0; j < 6; j += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) - + (i * 6 + j), - (PUINT_16)aucTmp); - - *pucDest++ = aucTmp[0]; - *pucDest++ = aucTmp[1]; - } - } - } - } - else { - prGlueInfo->fgNvramAvailable = FALSE; - } - - return; -} - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module init function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == FALSE) { - rSubModHandler[P2P_MODULE].subModInit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = TRUE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module exit function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == TRUE) { - rSubModHandler[P2P_MODULE].subModExit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = FALSE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module init flag, force TxThread to run sub modle init -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_INIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module INIT*/ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetRegister(prGlueInfo); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module exit flag, force TxThread to run sub modle exit -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ) -{ -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo); - } -#endif - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_EXIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module EXIT */ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set by sub module, indicate sub module is already inserted -* -* \param[in] rSubModInit, function pointer point to sub module init function -* \param[in] rSubModExit, function pointer point to sub module exit function -* \param[in] eSubModIdx, sub module index -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ) -{ - rSubModHandler[eSubModIdx].subModInit = rSubModInit; - rSubModHandler[eSubModIdx].subModExit = rSubModExit; - rSubModHandler[eSubModIdx].fgIsInited = FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief check wlan is launched or not -* -* \param[in] (none) -* -* \return TRUE, wlan is already started -* FALSE, wlan is not started yet -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsLaunched( - VOID - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - - ASSERT(prDev); - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - return FALSE; - } - - return prGlueInfo->prAdapter->fgIsWlanLaunched; -} - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Export wlan GLUE_INFO_T pointer to p2p module -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return TRUE: get GlueInfo pointer successfully -* FALSE: wlan is not started yet -*/ -/*---------------------------------------------------------------------------*/ -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (NULL == prGlueInfo) { - return FALSE; - } - - if(FALSE == prGlueInfo->prAdapter->fgIsWlanLaunched) { - return FALSE; - } - - *prGlueInfoExpAddr = prGlueInfo; - return TRUE; -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release prDev from wlandev_array and free tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanClearDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == prDev) { - arWlanDevInfo[i].prDev = NULL; - u4WlanDevNum--; - } - } - - return; -} /* end of wlanClearDevIdx() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate an unique interface index, net_device::ifindex member for this -* wlan device. Store the net_device in wlandev_array, and initialize -* tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \retval >= 0 The device number. -* \retval -1 Fail to get index. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanGetDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == (struct net_device *) NULL) { - /* Reserve 2 bytes space to store one digit of - * device number and NULL terminator. - */ - arWlanDevInfo[i].prDev = prDev; - u4WlanDevNum++; - return i; - } - } - - return -1; -} /* end of wlanGetDevIdx() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, a primary SOCKET interface to configure -* the interface lively. Handle an ioctl call on one of our devices. -* Everything Linux ioctl specific is done here. Then we pass the contents -* of the ifr->data to the request message handler. -* -* \param[in] prDev Linux kernel netdevice -* -* \param[in] prIFReq Our private ioctl request structure, typed for the generic -* struct ifreq so we can use ptr to function -* -* \param[in] cmd Command ID -* -* \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. -* \retval OTHER The execution of IOCTL command is failed. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - - /* Verify input parameters for the following functions */ - ASSERT(prDev && prIFReq); - if (!prDev || !prIFReq) { - DBGLOG(INIT, WARN, ("%s Invalid input data\n", __FUNCTION__)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("%s No glue info\n", __FUNCTION__)); - return -EFAULT; - } - - if (prGlueInfo->u4ReadyFlag == 0) { - return -EINVAL; - } - - //printk ("ioctl %x\n", i4Cmd); - - if (i4Cmd == SIOCGIWPRIV) { - /* 0x8B0D, get private ioctl table */ - ret = wext_get_priv(prDev, prIFReq); - } - else if ((i4Cmd >= SIOCIWFIRST) && (i4Cmd < SIOCIWFIRSTPRIV)) { - /* 0x8B00 ~ 0x8BDF, wireless extension region */ - ret = wext_support_ioctl(prDev, prIFReq, i4Cmd); - } - else if ((i4Cmd >= SIOCIWFIRSTPRIV) && (i4Cmd < SIOCIWLASTPRIV)) { - /* 0x8BE0 ~ 0x8BFF, private ioctl region */ - ret = priv_support_ioctl(prDev, prIFReq, i4Cmd); - } - else { - DBGLOG(INIT, WARN, ("Unexpected ioctl command: 0x%04x\n", i4Cmd)); - /* return 0 for safe? */ - } - - return ret; -} /* end of wlanDoIOCTL() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to set multicast list and set rx mode. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -static struct delayed_work workq; -static struct net_device *gPrDev; - -static void -wlanSetMulticastList (struct net_device *prDev) -{ - gPrDev = prDev; - schedule_delayed_work(&workq, 0); -} - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -static void -wlanSetMulticastListWorkQueue (struct work_struct *work) { - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4PacketFilter = 0; - UINT_32 u4SetInfoLen; - struct net_device *prDev = gPrDev; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", - prDev, prGlueInfo)); - up(&g_halt_sem); - return; - } - - if (prDev->flags & IFF_PROMISC) { - u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - - u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - up(&g_halt_sem); - - if (kalIoctl(prGlueInfo, - wlanoidSetCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen) != WLAN_STATUS_SUCCESS) { - return; - } - - - if (u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - PUINT_8 prMCAddrList = NULL; - UINT_32 i = 0; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prMCAddrList = kalMemAlloc(MAX_NUM_GROUP_ADDR * ETH_ALEN, VIR_MEM_TYPE); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - memcpy((prMCAddrList + i * ETH_ALEN), ha->addr, ETH_ALEN); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - memcpy((prMCAddrList + i * ETH_ALEN), prMcList->dmi_addr, ETH_ALEN); - } -#endif - - up(&g_halt_sem); - - kalIoctl(prGlueInfo, - wlanoidSetMulticastList, - prMCAddrList, - (i * ETH_ALEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - kalMemFree(prMCAddrList, VIR_MEM_TYPE, MAX_NUM_GROUP_ADDR * ETH_ALEN); - } - - return; -} /* end of wlanSetMulticastList() */ - - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -void -p2pSetMulticastListWorkQueueWrapper (P_GLUE_INFO_T prGlueInfo) { - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prGlueInfo(0x%p)\n", - prGlueInfo)); - return; - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - mtk_p2p_wext_set_Multicastlist(prGlueInfo); - } -#endif - - return; -} /* end of p2pSetMulticastListWorkQueueWrapper() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is TX entry point of NET DEVICE. -* -* \param[in] prSkb Pointer of the sk_buff to be sent -* \param[in] prDev Pointer to struct net_device -* -* \retval NETDEV_TX_OK - on success. -* \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanHardStartXmit( - struct sk_buff *prSkb, - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n")); -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - #if CFG_DBG_GPIO_PINS - { - /* TX request from OS */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_HIGH); - } - #endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); -#endif - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - GLUE_SET_PKT_ARRIVAL_TIME(prSkb, kalGetTimeTick()); -#endif - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx]); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum >= CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_stop_queue(prDev); - } -#endif - } else { - //printk("is security frame\n"); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - DBGLOG(TX, EVENT, ("\n+++++ pending frame %d len = %d +++++\n", prGlueInfo->i4TxPendingFrameNum, prSkb->len)); - prGlueInfo->rNetDevStats.tx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.tx_packets++; - - //pr->u4Flag |= GLUE_FLAG_TXREQ; - //wake_up_interruptible(&prGlueInfo->waitq); - kalSetEvent(prGlueInfo); - - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} /* end of wlanHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] prDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -*/ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -wlanGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - #if 0 - WLAN_STATUS rStatus; - UINT_32 u4XmitError = 0; - UINT_32 u4XmitOk = 0; - UINT_32 u4RecvError = 0; - UINT_32 u4RecvOk = 0; - UINT_32 u4BufLen; - - ASSERT(prDev); - - /* @FIX ME: need a more clear way to do this */ - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitError, - &u4XmitError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitOk, - &u4XmitOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvOk, - &u4RecvOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvError, - &u4RecvError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - prGlueInfo->rNetDevStats.rx_packets = u4RecvOk; - prGlueInfo->rNetDevStats.tx_packets = u4XmitOk; - prGlueInfo->rNetDevStats.tx_errors = u4XmitError; - prGlueInfo->rNetDevStats.rx_errors = u4RecvError; - //prGlueInfo->rNetDevStats.rx_bytes = rCustomNetDevStats.u4RxBytes; - //prGlueInfo->rNetDevStats.tx_bytes = rCustomNetDevStats.u4TxBytes; - //prGlueInfo->rNetDevStats.rx_errors = rCustomNetDevStats.u4RxErrors; - //prGlueInfo->rNetDevStats.multicast = rCustomNetDevStats.u4Multicast; - #endif - //prGlueInfo->rNetDevStats.rx_packets = 0; - //prGlueInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - //prGlueInfo->rNetDevStats.rx_bytes = 0; - //prGlueInfo->rNetDevStats.tx_bytes = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->rNetDevStats; - -} /* end of wlanGetStats() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanInit( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - if (!prDev) { - return -ENXIO; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue); -#else - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue, NULL); -#endif - - return 0; /* success */ -} /* end of wlanInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanUninit( - struct net_device *prDev - ) -{ - return; -} /* end of wlanUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->open -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanOpen succeeds. -* \retval < 0 The execution of wlanOpen failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanOpen( - struct net_device *prDev - ) -{ - ASSERT(prDev); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_start_all_queues(prDev); -#else - netif_start_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->stop -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanStop succeeds. -* \retval < 0 The execution of wlanStop failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanStop( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* CFG80211 down */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(prScanRequest) { - cfg80211_scan_done(prScanRequest, TRUE); - } - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_stop_all_queues(prDev); -#else - netif_stop_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code - * - * \param[in] prGlueInfo Pointer to glue info - * - * \return none - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanUpdateChannelTable( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, j; - UINT_8 ucNumOfChannel; - RF_CHANNEL_INFO_T aucChannelList[ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels)]; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_channels); i++) { - mtk_5ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, - BAND_NULL, - ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels), - &ucNumOfChannel, - aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - for(j = 0 ; j < ARRAY_SIZE(mtk_2ghz_channels) ; j++) { - if(mtk_2ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_2ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - case BAND_5G: - for(j = 0 ; j < ARRAY_SIZE(mtk_5ghz_channels) ; j++) { - if(mtk_5ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_5ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - default: - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register the device to the kernel and return the index. -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanNetRegister succeeds. -* \retval < 0 The execution of wlanNetRegister failed. -*/ -/*----------------------------------------------------------------------------*/ -static INT_32 -wlanNetRegister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - INT_32 i4DevIdx = -1; - - ASSERT(prWdev); - - - do { - if (!prWdev) { - break; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - if ((i4DevIdx = wlanGetDevIdx(prWdev->netdev)) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device number exceeds.\n")); - break; - } - - /* adjust channel support status */ - wlanUpdateChannelTable((P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy)); - - if (wiphy_register(prWdev->wiphy) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: wiphy context is not registered.\n")); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(register_netdev(prWdev->netdev) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device context is not registered.\n")); - - wiphy_unregister(prWdev->wiphy); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(i4DevIdx != -1) { - prGlueInfo->fgIsRegistered = TRUE; - } - } - while(FALSE); - - return i4DevIdx; /* success */ -} /* end of wlanNetRegister() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister the device from the kernel -* -* \param[in] prWdev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetUnregister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetUnregister: The device context is NULL\n")); - return; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - wlanClearDevIdx(prWdev->netdev); - unregister_netdev(prWdev->netdev); - wiphy_unregister(prWdev->wiphy); - - prGlueInfo->fgIsRegistered = FALSE; - - DBGLOG(INIT, INFO, ("unregister wireless_dev(0x%p)\n", prWdev)); - - return; -} /* end of wlanNetUnregister() */ - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops wlan_netdev_ops = { - .ndo_open = wlanOpen, - .ndo_stop = wlanStop, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = wlanSetMulticastList, -#else - .ndo_set_multicast_list = wlanSetMulticastList, -#endif - .ndo_get_stats = wlanGetStats, - .ndo_do_ioctl = wlanDoIOCTL, - .ndo_start_xmit = wlanHardStartXmit, - .ndo_init = wlanInit, - .ndo_uninit = wlanUninit, - .ndo_select_queue = wlanSelectQueue, -}; -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method for creating Linux NET4 struct net_device object and the -* private data(prGlueInfo and prAdapter). Setup the IO address to the HIF. -* Assign the function pointer to the net_device object -* -* \param[in] pvData Memory address for the device -* -* \retval Not null The wireless_dev object. -* \retval NULL Fail to create wireless_dev object -*/ -/*----------------------------------------------------------------------------*/ -static struct lock_class_key rSpinKey[SPIN_LOCK_NUM]; -static struct wireless_dev * -wlanNetCreate( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - UINT_32 i; - struct device *prDev; - - //4 <1.1> Create wireless_dev - prWdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL); - DBGLOG(INIT, INFO, ("wireless_dev prWdev(0x%p) allocated\n", prWdev)); - if (!prWdev) { - DBGLOG(INIT, ERROR, ("Allocating memory to wireless_dev context failed\n")); - return NULL; - } - - //4 <1.2> Create wiphy - prWdev->wiphy = wiphy_new(&mtk_wlan_ops, sizeof(GLUE_INFO_T)); - DBGLOG(INIT, INFO, ("wiphy (0x%p) allocated\n", prWdev->wiphy)); - if (!prWdev->wiphy) { - DBGLOG(INIT, ERROR, ("Allocating memory to wiphy device failed\n")); - kfree(prWdev); - return NULL; - } - - //4 <1.3> co-relate wiphy & prDev -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(*((MTK_WCN_HIF_SDIO_CLTCTX *)pvData), &prDev); -#else - prDev = ((struct sdio_func *) pvData)->dev; -#endif - if (!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for wlan\n"); - } - set_wiphy_dev(prWdev->wiphy, prDev); - - //4 <1.4> configure wireless_dev & wiphy - prWdev->iftype = NL80211_IFTYPE_STATION; - prWdev->wiphy->max_scan_ssids = 1; /* FIXME: for combo scan */ - prWdev->wiphy->max_scan_ie_len = 512; - prWdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); - prWdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - //for the WPS probe request suband issue - //prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = NULL; - prWdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; - prWdev->wiphy->cipher_suites = (const u32 *)mtk_cipher_suites; - prWdev->wiphy->n_cipher_suites = ARRAY_SIZE(mtk_cipher_suites); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_SUPPORTS_FW_ROAM; - #else - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY; - #endif - - //4 <2> Create Glue structure - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - if (!prGlueInfo) { - DBGLOG(INIT, ERROR, ("Allocating memory to glue layer failed\n")); - goto netcreate_err; - } - - //4 <3> Initial Glue structure - //4 <3.1> create net device - prGlueInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), NIC_INF_NAME, ether_setup, CFG_MAX_TXQ_NUM); - - DBGLOG(INIT, INFO, ("net_device prDev(0x%p) allocated\n", prGlueInfo->prDevHandler)); - if (!prGlueInfo->prDevHandler) { - DBGLOG(INIT, ERROR, ("Allocating memory to net_device context failed\n")); - goto netcreate_err; - } - - //4 <3.1.1> initialize net device varaiables - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prDevHandler)) = prGlueInfo; - - prGlueInfo->prDevHandler->netdev_ops = &wlan_netdev_ops; -#ifdef CONFIG_WIRELESS_EXT - prGlueInfo->prDevHandler->wireless_handlers = &wext_handler_def; -#endif - netif_carrier_off(prGlueInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prDevHandler); - - //4 <3.1.2> co-relate with wiphy bi-directionally - prGlueInfo->prDevHandler->ieee80211_ptr = prWdev; -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prGlueInfo->prDevHandler->features = NETIF_F_HW_CSUM; -#endif - prWdev->netdev = prGlueInfo->prDevHandler; - - //4 <3.1.3> co-relate net device & prDev - SET_NETDEV_DEV(prGlueInfo->prDevHandler, wiphy_dev(prWdev->wiphy)); - - //4 <3.2> initiali glue variables - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prGlueInfo->ePowerState = ParamDeviceStateD0; - prGlueInfo->fgIsMacAddrOverride = FALSE; - prGlueInfo->fgIsRegistered = FALSE; - prGlueInfo->prScanRequest = NULL; - - init_completion(&prGlueInfo->rScanComp); - init_completion(&prGlueInfo->rHaltComp); - init_completion(&prGlueInfo->rPendComp); -#if CFG_ENABLE_WIFI_DIRECT - init_completion(&prGlueInfo->rSubModComp); -#endif - - /* initialize timer for OID timeout checker */ - kalOsTimerInitialize(prGlueInfo, kalTimeoutHandler); - - for (i = 0; i < SPIN_LOCK_NUM; i++) { - spin_lock_init(&prGlueInfo->rSpinLock[i]); - lockdep_set_class(&prGlueInfo->rSpinLock[i], &rSpinKey[i]); - } - - /* initialize semaphore for ioctl */ - sema_init(&prGlueInfo->ioctl_sem, 1); - - /* initialize semaphore for ioctl */ - sema_init(&g_halt_sem, 1); - g_u4HaltFlag = 0; - - //4 <4> Create Adapter structure - prAdapter = (P_ADAPTER_T) wlanAdapterCreate(prGlueInfo); - - if (!prAdapter) { - DBGLOG(INIT, ERROR, ("Allocating memory to adapter failed\n")); - goto netcreate_err; - } - - prGlueInfo->prAdapter = prAdapter; - -#ifdef CONFIG_CFG80211_WEXT - //4 <5> Use wireless extension to replace IOCTL - prWdev->wiphy->wext = &wext_handler_def; -#endif - - goto netcreate_done; - -netcreate_err: - if (NULL != prAdapter) { - wlanAdapterDestroy(prAdapter); - prAdapter = NULL; - } - - if (NULL != prGlueInfo->prDevHandler) { - free_netdev(prGlueInfo->prDevHandler); - prGlueInfo->prDevHandler = NULL; - } - - if (NULL != prWdev->wiphy) { - wiphy_free(prWdev->wiphy); - prWdev->wiphy = NULL; - } - - if (NULL != prWdev) { - /* Free net_device and private data, which are allocated by - * alloc_netdev(). - */ - kfree(prWdev); - prWdev = NULL; - } - -netcreate_done: - - return prWdev; -} /* end of wlanNetCreate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroying the struct net_device object and the private data. -* -* \param[in] prWdev Pointer to struct wireless_dev. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetDestroy( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prWdev); - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetDestroy: The device context is NULL\n")); - return; - } - - /* prGlueInfo is allocated with net_device */ - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - ASSERT(prGlueInfo); - - /* destroy kal OS timer */ - kalCancelTimer(prGlueInfo); - - glClearHifInfo(prGlueInfo); - - wlanAdapterDestroy(prGlueInfo->prAdapter); - prGlueInfo->prAdapter = NULL; - - /* Free net_device and private data, which are allocated by alloc_netdev(). - */ - free_netdev(prWdev->netdev); - wiphy_free(prWdev->wiphy); - - kfree(prWdev); - - return; -} /* end of wlanNetDestroy() */ - -#ifndef CONFIG_X86 -UINT_8 g_aucBufIpAddr[32] = {0}; - -static void wlanEarlySuspend(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - - DBGLOG(INIT, INFO, ("*********wlanEarlySuspend************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if(u4WlanDevNum == 0){ - DBGLOG(INIT, ERROR, ("wlanEarlySuspend u4WlanDevNum==0 invalid!!\n")); - return; - } - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - ASSERT(prDev); - -fgIsUnderEarlierSuspend = true; - - // <2> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - - // <3> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(INIT, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - DBGLOG(INIT, INFO, ("ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - )); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - //u4NumIPv6++; - } - -#endif - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -#ifdef CONFIG_IPV6 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -static void wlanLateResume(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_8 ip[4] = { 0 }; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - - DBGLOG(INIT, INFO, ("*********wlanLateResume************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if(u4WlanDevNum == 0){ - DBGLOG(INIT, ERROR, ("wlanLateResume u4WlanDevNum==0 invalid!!\n")); - return; - } - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - ASSERT(prDev); - -fgIsUnderEarlierSuspend = false; - - if(!prDev ){ - DBGLOG(INIT, INFO, ("prDev == NULL!!! \n")); - return; - } - - // <3> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - EVENT_AIS_BSS_INFO_T rParam; - UINT_32 u4BufLen = 0; - kalMemZero(&rParam, sizeof(EVENT_AIS_BSS_INFO_T)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBSSInfo, - &rParam, - sizeof(EVENT_AIS_BSS_INFO_T), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Query BSSinfo fail 0x%lx!!\n", rStatus)); - }else{ - DBGLOG(INIT, INFO, ("Status[%d], Mode[%d], Active[%d]\\n", rParam.eConnectionState, rParam.eCurrentOPMode, rParam.fgIsNetActive)); - } - - // <2> get the IPv4 address - if(!(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(INIT, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - DBGLOG(INIT, INFO, ("ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - )); -#endif - // <7> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void wlan_early_suspend(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_early_suspend************\n")); - wlanEarlySuspend(); -} - -static void wlan_late_resume(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_late_resume************\n")); - wlanLateResume(); -} -#endif //defined(CONFIG_HAS_EARLYSUSPEND) -#endif //! CONFIG_X86 - -extern void wlanRegisterNotifier(void); -extern void wlanUnregisterNotifier(void); - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Wlan probe function. This function probes and initializes the device. -* -* \param[in] pvData data passed by bus driver init function -* _HIF_EHPI: NULL -* _HIF_SDIO: sdio bus driver handle -* -* \retval 0 Success -* \retval negative value Failed -*/ -/*----------------------------------------------------------------------------*/ -static INT_32 -wlanProbe( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - INT_32 i4DevIdx = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - INT_32 i4Status = 0; - BOOL bRet = FALSE; - - - do { -#if DBG - int i; - /* Initialize DEBUG CLASS of each module */ - for (i = 0; i < DBG_MODULE_NUM; i++) { - aucDebugModule[i] = DBG_CLASS_ERROR | \ - DBG_CLASS_WARN | \ - DBG_CLASS_STATE | \ - DBG_CLASS_TRACE | \ - DBG_CLASS_EVENT; - //aucDebugModule[i] = 0; - } -#if 0 - aucDebugModule[DBG_INIT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_ARB_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_JOIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_RX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_TX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_NIC_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_HAL_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_KEVIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO | DBG_CLASS_TEMP; - aucDebugModule[DBG_SCAN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_REQ_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_MGT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_RSN_IDX] |= DBG_CLASS_TRACE; - aucDebugModule[DBG_ROAMING_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; -#endif -#endif /* DBG */ - - //4 <1> Initialize the IO port of the interface - /* GeorgeKuo: pData has different meaning for _HIF_XXX: - * _HIF_EHPI: pointer to memory base variable, which will be - * initialized by glBusInit(). - * _HIF_SDIO: bus driver handle - */ - - bRet = glBusInit(pvData); - - /* Cannot get IO address from interface */ - if (FALSE == bRet) { - DBGLOG(INIT, ERROR, (KERN_ALERT "wlanProbe: glBusInit() fail\n")); - i4Status = -EIO; - break; - } - - //4 <2> Create network device, Adapter, KalInfo, prDevHandler(netdev) - if ((prWdev = wlanNetCreate(pvData)) == NULL) { - DBGLOG(INIT, ERROR, ("wlanProbe: No memory for dev and its private\n")); - i4Status = -ENOMEM; - break; - } - - //4 <2.5> Set the ioaddr to HIF Info - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - gPrDev = prGlueInfo->prDevHandler; - glSetHifInfo(prGlueInfo, (UINT_32) pvData); - - - /* main thread is created in this function */ - init_waitqueue_head(&prGlueInfo->waitq); - // - - QUEUE_INITIALIZE(&prGlueInfo->rCmdQueue); - QUEUE_INITIALIZE(&prGlueInfo->rTxQueue); - - - - //prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - //4 <4> Setup IRQ - prWlandevInfo = &arWlanDevInfo[i4DevIdx]; - - i4Status = glBusSetIrq(prWdev->netdev, NULL, *((P_GLUE_INFO_T *) netdev_priv(prWdev->netdev))); - - if (i4Status != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanProbe: Set IRQ error\n")); - break; - } - - prGlueInfo->i4DevIdx = i4DevIdx; - - prAdapter = prGlueInfo->prAdapter; - - prGlueInfo->u4ReadyFlag = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prAdapter->u4CSUMFlags = (CSUM_OFFLOAD_EN_TX_TCP | CSUM_OFFLOAD_EN_TX_UDP | CSUM_OFFLOAD_EN_TX_IP); -#endif - - //4 <5> Start Device - // -#if CFG_ENABLE_FW_DOWNLOAD - /* before start adapter, we need to open and load firmware */ - { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(prRegInfo, 0, sizeof(REG_INFO_T)); - prRegInfo->u4StartAddress = CFG_FW_START_ADDRESS; - prRegInfo->u4LoadAddress = CFG_FW_LOAD_ADDRESS; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - //kalMemCopy(&prGlueInfo->rRegInfo, prRegInfo, sizeof(REG_INFO_T)); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - prRegInfo->fgEnArpFilter = TRUE; - - if (kalFirmwareImageMapping(prGlueInfo, &prFwBuffer, &u4FwSize) == NULL) { - i4Status = -EIO; - goto bailout; - } else { - if (wlanAdapterStart(prAdapter, prRegInfo, prFwBuffer, u4FwSize) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - } - } - - kalFirmwareImageUnmapping(prGlueInfo, NULL, prFwBuffer); - -bailout: - //kfree(prRegInfo); - - if (i4Status < 0) { - break; - } - } -#else - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(&prGlueInfo->rRegInfo, 0, sizeof(REG_INFO_T)); - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - - if (wlanAdapterStart(prAdapter, prRegInfo, NULL, 0) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - break; - } -#endif - if(TRUE == prAdapter->fgEnable5GBand) - prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - - prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - /* set MAC address */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - struct sockaddr MacAddr; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryCurrentAddr, - &MacAddr.sa_data, - PARAM_MAC_ADDR_LEN, - TRUE, - TRUE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set MAC addr fail 0x%lx\n", rStatus)); - prGlueInfo->u4ReadyFlag = 0; - } else { - memcpy(prGlueInfo->prDevHandler->dev_addr, &MacAddr.sa_data, ETH_ALEN); - memcpy(prGlueInfo->prDevHandler->perm_addr, prGlueInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* card is ready */ - prGlueInfo->u4ReadyFlag = 1; -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("MAC address: "MACSTR, MAC2STR(&MacAddr.sa_data))); -#endif - } - } - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - /* set HW checksum offload */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set HW checksum offload fail 0x%lx\n", rStatus)); - } - } -#endif - - //4 <3> Register the card - if ((i4DevIdx = wlanNetRegister(prWdev)) < 0){ - i4Status = -ENXIO; - DBGLOG(INIT, ERROR, ("wlanProbe: Cannot register the net_device context to the kernel\n")); - break; - } -#if defined(CONFIG_HAS_EARLYSUSPEND) - glRegisterEarlySuspend(&mt6620_early_suspend_desc, wlan_early_suspend, wlan_late_resume); - wlanRegisterNotifier(); -#endif - - //4 <6> Initialize /proc filesystem -#ifdef WLAN_INCLUDE_PROC - if ( (i4Status = procInitProcfs(prDev, NIC_DEVICE_ID_LOW)) < 0) { - DBGLOG(INIT, ERROR, ("wlanProbe: init procfs failed\n")); - break; - } -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - glRegisterAmpc(prGlueInfo); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*wlan is launched*/ - prGlueInfo->prAdapter->fgIsWlanLaunched = TRUE; - /*if p2p module is inserted, notify tx_thread to init p2p network*/ - if(rSubModHandler[P2P_MODULE].subModInit) { - wlanSubModInit(prGlueInfo); - } -#endif - } - while (FALSE); - - return i4Status; -} /* end of wlanProbe() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method to stop driver operation and release all resources. Following -* this call, no frame should go up or down through this interface. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanRemove( - VOID - ) -{ - struct net_device *prDev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - DBGLOG(INIT, INFO, ("Remove wlan!\n")); - - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - DBGLOG(INIT, INFO, ("0 == u4WlanDevNum\n")); - return; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - prWlandevInfo = &arWlanDevInfo[u4WlanDevNum-1]; - - ASSERT(prDev); - if (NULL == prDev) { - DBGLOG(INIT, INFO, ("NULL == prDev\n")); - return; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - DBGLOG(INIT, INFO, ("NULL == prGlueInfo\n")); - free_netdev(prDev); - return; - } - - -#if CFG_ENABLE_WIFI_DIRECT - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo, FALSE); - p2pRemove(prGlueInfo); - } - -#if 0 - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - //if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - if (prGlueInfo->prP2PInfo) { - //p2pRemove(prGlueInfo); - if (prGlueInfo->prP2PInfo->prDevHandler) { - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - - } - - - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return; - } - } -#endif -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsNetRegistered) { - bowNotifyAllLinkDisconnected(prGlueInfo->prAdapter); - /*wait 300ms for BoW module to send deauth*/ - kalMsleep(300); - } -#endif - - //4 <1> Stopping handling interrupt and free IRQ - glBusFreeIrq(prDev, *((P_GLUE_INFO_T *) netdev_priv(prDev))); - - kalMemSet(&(prGlueInfo->prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - flush_delayed_work_sync(&workq); - - down(&g_halt_sem); - g_u4HaltFlag = 1; - - //4 <2> Mark HALT, notify main thread to stop, and clean up queued requests - prGlueInfo->u4Flag |= GLUE_FLAG_HALT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread stops */ - wait_for_completion_interruptible(&prGlueInfo->rHaltComp); - - DBGLOG(INIT, INFO, ("mtk_sdiod stopped\n")); - - //prGlueInfo->rHifInfo.main_thread = NULL; - prGlueInfo->main_thread = NULL; - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsRegistered) { - glUnregisterAmpc(prGlueInfo); - } -#endif - - - //4 <3> Remove /proc filesystem. -#ifdef WLAN_INCLUDE_PROC - procRemoveProcfs(prDev, NIC_DEVICE_ID_LOW); -#endif /* WLAN_INCLUDE_PROC */ - - //4 <4> wlanAdapterStop - prAdapter = prGlueInfo->prAdapter; - - wlanAdapterStop(prAdapter); - DBGLOG(INIT, INFO, ("Number of Stalled Packets = %ld\n", prGlueInfo->i4TxPendingFrameNum)); - - //4 <5> Release the Bus - glBusRelease(prDev); - - up(&g_halt_sem); - - //4 <6> Unregister the card - wlanNetUnregister(prDev->ieee80211_ptr); - - //4 <7> Destroy the device - wlanNetDestroy(prDev->ieee80211_ptr); - prDev = NULL; - -#if defined(CONFIG_HAS_EARLYSUSPEND) - glUnregisterEarlySuspend(&mt6620_early_suspend_desc); -#endif - wlanUnregisterNotifier(); - - return; -} /* end of wlanRemove() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Entry Point -static int __init initWlan(void) -{ - int ret = 0; - - DBGLOG(INIT, INFO, ("initWlan\n")); - - /* memory pre-allocation */ - kalInitIOBuffer(); - - //return ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - ret = ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - - if (ret == -EIO) { - kalUninitIOBuffer(); - return ret; - } - -#if (CFG_CHIP_RESET_SUPPORT) - glResetInit(); -#endif - - return ret; -} /* end of initWlan() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -static VOID __exit exitWlan(void) -{ - //printk("remove %p\n", wlanRemove); -#if CFG_CHIP_RESET_SUPPORT - glResetUninit(); -#endif - - glUnregisterBus(wlanRemove); - - /* free pre-allocated memory */ - kalUninitIOBuffer(); - - DBGLOG(INIT, INFO, ("exitWlan\n")); - - return; -} /* end of exitWlan() */ - -module_init(initWlan); -module_exit(exitWlan); -#if 0 -/* export necessary symbol for p2p driver using */ -#if CFG_ENABLE_WIFI_DIRECT -EXPORT_SYMBOL(wlanSubModRegisterInitExit); -EXPORT_SYMBOL(wlanSubModExit); -EXPORT_SYMBOL(wlanSubModInit); - -EXPORT_SYMBOL(nicPmIndicateBssCreated); -EXPORT_SYMBOL(rlmProcessAssocRsp); -EXPORT_SYMBOL(kalSetEvent); -EXPORT_SYMBOL(rlmBssInitForAPandIbss); -EXPORT_SYMBOL(kalEnqueueCommand); -EXPORT_SYMBOL(nicIncreaseTxSeqNum); -EXPORT_SYMBOL(nicCmdEventQueryAddress); -EXPORT_SYMBOL(bssCreateStaRecFromBssDesc); -EXPORT_SYMBOL(rlmBssAborted); -EXPORT_SYMBOL(cnmStaRecResetStatus); -EXPORT_SYMBOL(mqmProcessAssocRsp); -EXPORT_SYMBOL(nicTxReturnMsduInfo); -EXPORT_SYMBOL(nicTxEnqueueMsdu); -EXPORT_SYMBOL(wlanProcessSecurityFrame); -EXPORT_SYMBOL(nicChannelNum2Freq); -EXPORT_SYMBOL(nicUpdateBss); -EXPORT_SYMBOL(wlanSendSetQueryCmd); -EXPORT_SYMBOL(cnmStaRecAlloc); -EXPORT_SYMBOL(cnmTimerInitTimer); -EXPORT_SYMBOL(rateGetRateSetFromIEs); -EXPORT_SYMBOL(nicOidCmdTimeoutCommon); -EXPORT_SYMBOL(cnmStaRecChangeState); -EXPORT_SYMBOL(rateGetDataRatesFromRateSet); -EXPORT_SYMBOL(cnmMgtPktAlloc); -EXPORT_SYMBOL(cnmMgtPktFree); -EXPORT_SYMBOL(wextSrchDesiredWPAIE); -EXPORT_SYMBOL(nicRxReturnRFB); -EXPORT_SYMBOL(cnmTimerStartTimer); -EXPORT_SYMBOL(cmdBufAllocateCmdInfo); -EXPORT_SYMBOL(cnmGetStaRecByAddress); -EXPORT_SYMBOL(nicMediaStateChange); -EXPORT_SYMBOL(bssUpdateBeaconContent); -EXPORT_SYMBOL(kalIoctl); -EXPORT_SYMBOL(nicActivateNetwork); -EXPORT_SYMBOL(nicDeactivateNetwork); -EXPORT_SYMBOL(kalRandomNumber); -EXPORT_SYMBOL(nicCmdEventSetCommon); -EXPORT_SYMBOL(cnmTimerStopTimer); -EXPORT_SYMBOL(nicIncreaseCmdSeqNum); -EXPORT_SYMBOL(authSendDeauthFrame); -EXPORT_SYMBOL(cnmMemAlloc); -EXPORT_SYMBOL(nicPmIndicateBssAbort); -EXPORT_SYMBOL(nicCmdEventSetIpAddress); -EXPORT_SYMBOL(mboxSendMsg); -EXPORT_SYMBOL(scanSearchBssDescByBssid); -EXPORT_SYMBOL(bssRemoveStaRecFromClientList); -EXPORT_SYMBOL(assocProcessRxDisassocFrame); -EXPORT_SYMBOL(authProcessRxDeauthFrame); -EXPORT_SYMBOL(cnmStaRecFree); -EXPORT_SYMBOL(rNonHTPhyAttributes); -EXPORT_SYMBOL(rNonHTApModeAttributes); -EXPORT_SYMBOL(cnmMemFree); -EXPORT_SYMBOL(wlanExportGlueInfo); -EXPORT_SYMBOL(bssInitForAP); -EXPORT_SYMBOL(nicPmIndicateBssConnected); -EXPORT_SYMBOL(rlmRspGenerateHtOpIE); -EXPORT_SYMBOL(bssGenerateExtSuppRate_IE); -EXPORT_SYMBOL(rlmRspGenerateErpIE); -EXPORT_SYMBOL(rlmRspGenerateHtCapIE); -EXPORT_SYMBOL(cnmGetStaRecByIndex); -EXPORT_SYMBOL(rsnGenerateWpaNoneIE); -EXPORT_SYMBOL(rlmRspGenerateExtCapIE); -EXPORT_SYMBOL(rsnGenerateRSNIE); -EXPORT_SYMBOL(rsnParseRsnIE); -#if CFG_SUPPORT_WPS -EXPORT_SYMBOL(wextSrchDesiredWPSIE); -#endif -EXPORT_SYMBOL(mboxDummy); -EXPORT_SYMBOL(saaFsmRunEventStart); -EXPORT_SYMBOL(saaFsmRunEventAbort); -EXPORT_SYMBOL(cnmP2PIsPermitted); -EXPORT_SYMBOL(cnmBss40mBwPermitted); -EXPORT_SYMBOL(mqmGenerateWmmParamIE); -EXPORT_SYMBOL(cnmPreferredChannel); -EXPORT_SYMBOL(bssAddStaRecToClientList); -EXPORT_SYMBOL(nicQmUpdateWmmParms); -EXPORT_SYMBOL(qmFreeAllByNetType); -EXPORT_SYMBOL(wlanQueryInformation); -EXPORT_SYMBOL(nicConfigPowerSaveProfile); -EXPORT_SYMBOL(scanSearchExistingBssDesc); -EXPORT_SYMBOL(scanAllocateBssDesc); -EXPORT_SYMBOL(wlanProcessCommandQueue); -EXPORT_SYMBOL(wlanAcquirePowerControl); -EXPORT_SYMBOL(wlanReleasePowerControl); -EXPORT_SYMBOL(wlanReleasePendingCMDbyNetwork); -#if DBG -EXPORT_SYMBOL(aucDebugModule); -EXPORT_SYMBOL(fgIsBusAccessFailed); -EXPORT_SYMBOL(allocatedMemSize); -EXPORT_SYMBOL(dumpMemory8); -EXPORT_SYMBOL(dumpMemory32); -#endif -EXPORT_SYMBOL(rlmDomainIsLegalChannel); -EXPORT_SYMBOL(scnQuerySparseChannel); -EXPORT_SYMBOL(rlmDomainGetChnlList); -EXPORT_SYMBOL(p2pSetMulticastListWorkQueueWrapper); -EXPORT_SYMBOL(nicUpdateRSSI); -EXPORT_SYMBOL(nicCmdEventQueryLinkQuality); -EXPORT_SYMBOL(kalGetMediaStateIndicated); -EXPORT_SYMBOL(nicFreq2ChannelNum); -EXPORT_SYMBOL(assocSendDisAssocFrame); -EXPORT_SYMBOL(nicUpdateBeaconIETemplate); -EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem); -EXPORT_SYMBOL(kalClearMgmtFramesByNetType); -EXPORT_SYMBOL(kalClearSecurityFramesByNetType); -EXPORT_SYMBOL(nicFreePendingTxMsduInfoByNetwork); -EXPORT_SYMBOL(bssComposeBeaconProbeRespFrameHeaderAndFF); -EXPORT_SYMBOL(bssBuildBeaconProbeRespFrameCommonIEs); -EXPORT_SYMBOL(wlanoidSetWapiAssocInfo); -EXPORT_SYMBOL(wlanoidSetWSCAssocInfo); -#endif -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_kal.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_kal.c deleted file mode 100755 index 5d87e781fc5d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_kal.c +++ /dev/null @@ -1,3986 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_kal.c#3 $ -*/ - -/*! \file gl_kal.c - \brief GLUE Layer will export the required procedures here for internal driver stack. - - This file contains all routines which are exported from GLUE Layer to internal - driver stack. -*/ - - - -/* -** $Log: gl_kal.c $ -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 31 2012 terry.wu - * NULL - * . - * - * 03 26 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * invoke put_cred() after get_current_cred() calls. - * - * 03 07 2012 yuche.tsai - * NULL - * Fix compile error when WiFi Direct is off. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 20 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * do not need to invoke free() while firmware image file doesn't exist - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 yuche.tsai - * [WCXRP00000998] [Volunteer Patch][WiFi Direct][FW] P2P Social Channel & country domain issue - * Regulation domain feature check in. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * correct i4TxPendingFrameNum decreasing. - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * refix ... - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * correct compiling warning/error. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * add more robust fault tolerance design when pre-allocation failed. (rarely happen) - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 14 2011 jeffrey.chang - * [WCXRP00000546] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] fix kernel build warning message - * fix kernel build warning message - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 11 02 2010 jeffrey.chang - * [WCXRP00000145] [MT6620 Wi-Fi][Driver] fix issue of byte endian in packet classifier which discards BoW packets - * . - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant code which cause mismatch of power control release - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant GLUE_HALT condfition to avoid unmatched release of power control - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * if there is NVRAM, then use MAC address on NVRAM as default MAC address. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 20 2010 yuche.tsai - * NULL - * Support second interface indicate when enabling P2P. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 jeffrey.chang - * NULL - * remove redundant code which cause kernel panic - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add spinlock for pending security frame count - * - * 07 19 2010 jeffrey.chang - * - * adjust the timer unit to microsecond - * - * 07 19 2010 jeffrey.chang - * - * timer should return value greater than zero - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove unused files. - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * workaround for fixing request_firmware() failure on android 2.1 - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix kernel panic when debug mode enabled - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Disable network interface after disassociation - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * flush pending TX packets while unloading driver - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set driver own before handling cmd queue - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * 2) fix ioctl - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add spinlock for i4TxPendingFrameNum access - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. free cmdinfo after command is emiited. - * 2. for BoW frames, user priority is extracted from sk_buff directly. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * (2) fix spin lock - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * 2) add 2 kal API for later integration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * raising the priority of processing interrupt - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Bug fix: the tx thread will cause starvation of MMC thread, and the interrupt will never come in - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding secondary command queue for improving non-glue code portability - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download kal api - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\50 2009-09-28 20:19:08 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\49 2009-08-18 22:56:44 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\48 2009-06-23 23:18:58 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\47 2008-11-19 11:55:43 GMT mtk01088 -** fixed some lint warning, and rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\46 2008-09-02 21:07:42 GMT mtk01461 -** Remove ASSERT(pvBuf) in kalIndicateStatusAndComplete(), this parameter can be NULL -** \main\maintrunk.MT5921\45 2008-08-29 16:03:21 GMT mtk01088 -** remove non-used code for code review, add assert check -** \main\maintrunk.MT5921\44 2008-08-21 00:32:49 GMT mtk01461 -** \main\maintrunk.MT5921\43 2008-05-30 20:27:02 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\42 2008-05-30 15:47:29 GMT mtk01461 -** \main\maintrunk.MT5921\41 2008-05-30 15:13:04 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\40 2008-05-29 14:15:14 GMT mtk01084 -** remove un-used KAL function -** \main\maintrunk.MT5921\39 2008-05-03 15:17:30 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\38 2008-04-24 11:59:44 GMT mtk01461 -** change awake queue threshold and remove code which mark #if 0 -** \main\maintrunk.MT5921\37 2008-04-17 23:06:35 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\36 2008-04-08 15:38:56 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\35 2008-04-01 23:53:13 GMT mtk01461 -** Add comment -** \main\maintrunk.MT5921\34 2008-03-26 15:36:48 GMT mtk01461 -** Add update MAC Address for Linux -** \main\maintrunk.MT5921\33 2008-03-18 11:49:34 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\32 2008-03-18 10:25:22 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\31 2008-03-06 23:43:08 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\30 2008-02-26 09:47:57 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\29 2008-02-12 23:26:53 GMT mtk01461 -** Add debug option - Packet Order for Linux -** \main\maintrunk.MT5921\28 2008-01-09 17:54:43 GMT mtk01084 -** modify the argument of kalQueryPacketInfo() -** \main\maintrunk.MT5921\27 2007-12-24 16:02:03 GMT mtk01425 -** 1. Revise csum offload -** \main\maintrunk.MT5921\26 2007-11-30 17:03:36 GMT mtk01425 -** 1. Fix bugs -** -** \main\maintrunk.MT5921\25 2007-11-29 01:57:17 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\24 2007-11-20 11:24:07 GMT mtk01088 -** CR90, not doing the netif_carrier_off to let supplicant 1x pkt can be rcv at hardstattXmit -** \main\maintrunk.MT5921\23 2007-11-09 16:36:44 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\22 2007-11-07 18:37:39 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\21 2007-11-06 19:34:06 GMT mtk01088 -** add the WPS code, indicate the mgmt frame to upper layer -** \main\maintrunk.MT5921\20 2007-11-02 01:03:21 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\19 2007-10-30 11:59:38 GMT MTK01425 -** 1. Update wlanQueryInformation -** \main\maintrunk.MT5921\18 2007-10-30 10:44:57 GMT mtk01425 -** 1. Refine multicast list code -** 2. Refine TCP/IP csum offload code -** -** Revision 1.5 2007/07/17 13:01:18 MTK01088 -** add associate req and rsp function -** -** Revision 1.4 2007/07/13 05:19:19 MTK01084 -** provide timer set functions -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if DBG -int allocatedMemSize = 0; -#endif - -extern struct semaphore g_halt_sem; -extern int g_u4HaltFlag; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static PVOID pvIoBuffer = NULL; -static UINT_32 pvIoBufferSize = 0; -static UINT_32 pvIoBufferUsage = 0; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(MT6620) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_WMTHWVER_TYPE_T{ - WMTHWVER_MT6620_E1 = 0x0, - WMTHWVER_MT6620_E2 = 0x1, - WMTHWVER_MT6620_E3 = 0x2, - WMTHWVER_MT6620_E4 = 0x3, - WMTHWVER_MT6620_E5 = 0x4, - WMTHWVER_MT6620_E6 = 0x5, - WMTHWVER_MT6620_MAX, - WMTHWVER_INVALID = 0xff -} ENUM_WMTHWVER_TYPE_T, *P_ENUM_WMTHWVER_TYPE_T; - -extern ENUM_WMTHWVER_TYPE_T -mtk_wcn_wmt_hwver_get( - VOID - ); -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_HWVER_TYPE_T{ - HWVER_MT5931_E1 = 0x1, - HWVER_MT5931_E2 = 0x2, - HWVER_MT5931_E3 = 0x3, - HWVER_MT5931_MAX, - HWVER_INVALID = 0xff -} ENUM_HWVER_TYPE_T, *P_ENUM_HWVER_TYPE_T; -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_ENABLE_FW_DOWNLOAD - -static struct file *filp = NULL; -static uid_t orgfsuid; -static gid_t orgfsgid; -static mm_segment_t orgfs; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* open firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareOpen ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - /* FIX ME: since we don't have hotplug script in the filesystem - * , so the request_firmware() KAPI can not work properly - */ - - /* save uid and gid used for filesystem access. - * set user and group to 0(root) */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - orgfsuid = current->fsuid; - orgfsgid = current->fsgid; - current->fsuid = current->fsgid = 0; -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#else - struct cred *cred = get_task_cred(current); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#endif - - ASSERT(prGlueInfo); - - - orgfs = get_fs(); - set_fs(get_ds()); - - - /* open the fw file */ -#if defined(MT6620) & CFG_MULTI_ECOVER_SUPPORT - switch(mtk_wcn_wmt_hwver_get()) { - case WMTHWVER_MT6620_E1: - case WMTHWVER_MT6620_E2: - case WMTHWVER_MT6620_E3: - case WMTHWVER_MT6620_E4: - case WMTHWVER_MT6620_E5: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - - case WMTHWVER_MT6620_E6: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E6", O_RDONLY, 0); - break; - } -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT - switch (wlanGetEcoVersion(prGlueInfo->prAdapter)) { - case HWVER_MT5931_E1: - case HWVER_MT5931_E2: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E2", O_RDONLY, 0); - break; - case HWVER_MT5931_E3: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - } -#elif defined(MT6628) - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_MT6628", O_RDONLY, 0); -#else - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); -#endif - if (IS_ERR(filp)) { - DBGLOG(INIT, INFO, ("Open FW image: %s failed\n", CFG_FW_FILENAME)); - goto error_open; - } - DBGLOG(INIT, INFO, ("Open FW image: %s done\n", CFG_FW_FILENAME)); - return WLAN_STATUS_SUCCESS; - -error_open: - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif -#endif - return WLAN_STATUS_FAILURE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* release firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareClose ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if ((filp != NULL) && !IS_ERR(filp)) { - /* close firmware file */ - filp_close(filp, NULL); - - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - { -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); -#else - struct cred *cred = get_task_cred(current); -#endif - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif - } -#endif - filp = NULL; - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* load firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareLoad ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID prBuf, - IN UINT_32 u4Offset, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - ASSERT(prBuf); - - //l = filp->f_path.dentry->d_inode->i_size; - - /* the object must have a read method */ - if ((filp == NULL) || IS_ERR(filp) || (filp->f_op == NULL) || (filp->f_op->read == NULL)) { - goto error_read; - } else { - filp->f_pos = u4Offset; - *pu4Size = filp->f_op->read(filp, prBuf, *pu4Size, &filp->f_pos); - } - - return WLAN_STATUS_SUCCESS; - -error_read: - return WLAN_STATUS_FAILURE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* query firmware image size in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -kalFirmwareSize ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - *pu4Size = filp->f_path.dentry->d_inode->i_size; -#else - *pu4Size = filp->f_dentry->d_inode->i_size; -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - /* <1> Open firmware */ - if (kalFirmwareOpen(prGlueInfo) != WLAN_STATUS_SUCCESS) { - break; - } else { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - /* <2> Query firmare size */ - kalFirmwareSize(prGlueInfo, &u4FwSize); - /* <3> Use vmalloc for allocating large memory trunk */ - prFwBuffer = vmalloc(ALIGN_4(u4FwSize)); - /* <4> Load image binary into buffer */ - if (kalFirmwareLoad(prGlueInfo, prFwBuffer, 0, &u4FwSize) != WLAN_STATUS_SUCCESS) { - vfree(prFwBuffer); - kalFirmwareClose(prGlueInfo); - break; - } - /* <5> write back info */ - *pu4FileLength = u4FwSize; - *ppvMapFileBuf = prFwBuffer; - - return prFwBuffer; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - - /* pvMapFileBuf might be NULL when file doesn't exist */ - if(pvMapFileBuf) { - vfree(pvMapFileBuf); - } - - kalFirmwareClose(prGlueInfo); -} - -#endif - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - INT_32 i4Ret = 0; - - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - GL_HIF_INFO_T *prHifInfo = &prGlueInfo->rHifInfo; - prGlueInfo->prFw = NULL; - - /* <1> Open firmware */ - i4Ret = request_firmware(&prGlueInfo->prFw, CFG_FW_FILENAME, &prHifInfo->func->dev); - - if (i4Ret) { - printk (KERN_INFO DRV_NAME"fw %s:request failed %d\n", CFG_FW_FILENAME, i4Ret); - break; - } else { - *pu4FileLength = prGlueInfo->prFw->size; - *ppvMapFileBuf = prGlueInfo->prFw->data; - return prGlueInfo->prFw->data; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - ASSERT(pvMapFileBuf); - - release_firmware(prGlueInfo->prFw); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to acquire -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[out] pu4Flags Pointer of a variable for saving IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ) -{ - UINT_32 u4Flags = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Flags); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_lock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_lock_irqsave(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - *pu4Flags = u4Flags; - } - - return; -} /* end of kalAcquireSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to release -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[in] u4Flags Saved IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ) -{ - ASSERT(prGlueInfo); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_unlock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_unlock_irqrestore(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - } - - return; -} /* end of kalReleaseSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to update -* current MAC address. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pucMacAddr Pointer of current MAC address -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateMACAddress ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ) -{ - ASSERT(prGlueInfo); - ASSERT(pucMacAddr); - - if(UNEQUAL_MAC_ADDR(prGlueInfo->prDevHandler->dev_addr, pucMacAddr)) { - memcpy(prGlueInfo->prDevHandler->dev_addr, pucMacAddr, PARAM_MAC_ADDR_LEN); - } - - return; -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief To query the packet information for offload related parameters. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryTxChksumOffloadParam ( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag - ) -{ - struct sk_buff *skb = (struct sk_buff *) pvPacket; - UINT_8 ucFlag = 0; - - ASSERT(pvPacket); - ASSERT(pucFlag); - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) - if (skb->ip_summed == CHECKSUM_HW) -#else - if (skb->ip_summed == CHECKSUM_PARTIAL) -#endif - { - -#if DBG - /* Kevin: do double check, we can remove this part in Normal Driver. - * Because we register NIC feature with NETIF_F_IP_CSUM for MT5912B MAC, so - * we'll process IP packet only. - */ - if (skb->protocol != __constant_htons(ETH_P_IP)) { - //printk("Wrong skb->protocol( = %08x) for TX Checksum Offload.\n", skb->protocol); - } - else -#endif - ucFlag |= (TX_CS_IP_GEN | TX_CS_TCP_UDP_GEN); - } - - *pucFlag = ucFlag; - - return; -} /* kalQueryChksumOffloadParam */ - - -//4 2007/10/8, mikewu, this is rewritten by Mike -/*----------------------------------------------------------------------------*/ -/*! -* \brief To update the checksum offload status to the packet to be indicated to OS. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRxCSUMOffloadParam ( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - ASSERT(pvPacket); - - if ( (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS || aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)&& - ( (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) || (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS)) ) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - } - else { - skb->ip_summed = CHECKSUM_NONE; -#if DBG - if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE && aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE) { - DBGLOG(RX, TRACE, ("RX: \"non-IPv4/IPv6\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad IP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad TCP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad UDP Checksum\" Packet\n")); - } - else { - - } -#endif - } - -} /* kalUpdateRxCSUMOffloadParam */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to free packet allocated from kalPacketAlloc. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of the packet descriptor -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - dev_kfree_skb((struct sk_buff *) pvPacket); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Only handles driver own creating packet (coalescing buffer). -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param u4Size Pointer of Packet Handle -* \param ppucData Status Code for OS upper layer -* -* \return NULL: Failed to allocate skb, Not NULL get skb -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalPacketAlloc ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ) -{ - struct sk_buff *prSkb = dev_alloc_skb(u4Size); - - if (prSkb) { - *ppucData = (PUINT_8) (prSkb->data); - } -#if DBG -{ - PUINT_32 pu4Head = (PUINT_32)&prSkb->cb[0]; - *pu4Head = (UINT_32)prSkb->head; - DBGLOG(RX, TRACE, ("prSkb->head = %#lx, prSkb->cb = %#lx\n", (UINT_32)prSkb->head, *pu4Head)); -} -#endif - return (PVOID) prSkb; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Process the received packet for indicating to OS. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] pvPacket Pointer of the packet descriptor -* \param[in] pucPacketStart The starting address of the buffer of Rx packet. -* \param[in] u4PacketLen The packet length. -* \param[in] pfgIsRetain Is the packet to be retained. -* \param[in] aerCSUM The result of TCP/ IP checksum offload. -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalProcessRxPacket ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aerCSUM[] - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - - skb->data = (unsigned char *)pucPacketStart; - skb->tail = (unsigned char *) ((UINT_32) (pucPacketStart + u4PacketLen)); - skb->len = (unsigned int)u4PacketLen; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - kalUpdateRxCSUMOffloadParam(skb, aerCSUM); -#endif - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate an array of received packets is available for higher -* level protocol uses. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] apvPkts The packet array to be indicated -* \param[in] ucPktNum The number of packets to be indicated -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalRxIndicatePkts ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ) -{ - UINT_8 ucIdx = 0; - struct net_device *prNetDev = prGlueInfo->prDevHandler; - struct sk_buff *prSkb = NULL; - - ASSERT(prGlueInfo); - ASSERT(apvPkts); - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - for(ucIdx = 0; ucIdx < ucPktNum; ucIdx++) { - prSkb = apvPkts[ucIdx]; -#if DBG - do { - PUINT_8 pu4Head = (PUINT_8)&prSkb->cb[0]; - UINT_32 u4HeadValue = 0; - kalMemCopy(&u4HeadValue, pu4Head, sizeof(u4HeadValue)); - DBGLOG(RX, TRACE, ("prSkb->head = 0x%p, prSkb->cb = 0x%lx\n", pu4Head, u4HeadValue)); - } while (0); -#endif - - if (GLUE_GET_PKT_IS_P2P(prSkb)) { - /* P2P */ -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - prNetDev = kalP2PGetDevHdlr(prGlueInfo); - } - - //prNetDev->stats.rx_bytes += prSkb->len; - //prNetDev->stats.rx_packets++; - prGlueInfo->prP2PInfo->rNetDevStats.rx_bytes += prSkb->len; - prGlueInfo->prP2PInfo->rNetDevStats.rx_packets++; - -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else if (GLUE_GET_PKT_IS_PAL(prSkb)) { - /* BOW */ -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_SEPARATE_DATA_PATH - if (prGlueInfo->rBowInfo.fgIsNetRegistered) { - prNetDev = prGlueInfo->rBowInfo.prDevHandler; - } -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else { - /* AIS */ - prNetDev = prGlueInfo->prDevHandler; - prGlueInfo->rNetDevStats.rx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.rx_packets++; - - } - - prNetDev->last_rx = jiffies; - prSkb->protocol = eth_type_trans(prSkb, prNetDev); - prSkb->dev = prNetDev; - //DBGLOG_MEM32(RX, TRACE, (PUINT_32)prSkb->data, prSkb->len); - DBGLOG(RX, EVENT, ("kalRxIndicatePkts len = %d\n", prSkb->len)); - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Rx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n")); -#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) - if(!in_interrupt()){ - netif_rx_ni(prSkb); /* only in non-interrupt context */ - } - else { - netif_rx(prSkb); - } -#else - netif_rx(prSkb); -#endif - - wlanReturnPacket(prGlueInfo->prAdapter, NULL); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Called by driver to indicate event to upper layer, for example, the wpa -* supplicant or wireless tools. -* -* \param[in] pvAdapter Pointer to the adapter descriptor. -* \param[in] eStatus Indicated status. -* \param[in] pvBuf Indicated message buffer. -* \param[in] u4BufLen Indicated message buffer size. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateStatusAndComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ) -{ - UINT_32 bufLen; - P_PARAM_STATUS_INDICATION_T pStatus = (P_PARAM_STATUS_INDICATION_T) pvBuf; - P_PARAM_AUTH_EVENT_T pAuth = (P_PARAM_AUTH_EVENT_T) pStatus; - P_PARAM_PMKID_CANDIDATE_LIST_T pPmkid = - (P_PARAM_PMKID_CANDIDATE_LIST_T) (pStatus + 1); - PARAM_MAC_ADDRESS arBssid; - struct cfg80211_scan_request *prScanRequest = NULL; - PARAM_SSID_T ssid; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_bss *bss; - UINT_8 ucChannelNum; - P_BSS_DESC_T prBssDesc = NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - kalMemZero(arBssid, MAC_ADDR_LEN); - - ASSERT(prGlueInfo); - - switch (eStatus) { - case WLAN_STATUS_ROAM_OUT_FIND_BEST: - case WLAN_STATUS_MEDIA_CONNECT: - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_CONNECTED; - - /* indicate assoc event */ - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &bufLen); - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, arBssid, bufLen); - - /* switch netif on */ - netif_carrier_on(prGlueInfo->prDevHandler); - - do { - /* print message on console */ - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuerySsid, - &ssid, - sizeof(ssid), - &bufLen); - - ssid.aucSsid[(ssid.u4SsidLen >= PARAM_MAX_LEN_SSID) ? - (PARAM_MAX_LEN_SSID - 1) : ssid.u4SsidLen ] = '\0'; - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_on [ssid:%s " MACSTR "]\n", - prGlueInfo->prDevHandler->name, - ssid.aucSsid, - MAC2STR(arBssid))); - } while(0); - - if(prGlueInfo->fgIsRegistered == TRUE) { - /* retrieve channel */ - ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - /* ensure BSS exists */ - bss = cfg80211_get_bss(priv_to_wiphy(prGlueInfo), prChannel, arBssid, - ssid.aucSsid, ssid.u4SsidLen, - WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); - - if(bss == NULL) { - /* create BSS on-the-fly */ - prBssDesc = wlanGetTargetBssDescByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - - if(prBssDesc != NULL) { - bss = cfg80211_inform_bss(priv_to_wiphy(prGlueInfo), - prChannel, - arBssid, - 0, /* TSF */ - WLAN_CAPABILITY_ESS, - prBssDesc->u2BeaconInterval, /* beacon interval */ - prBssDesc->aucIEBuf, /* IE */ - prBssDesc->u2IELength, /* IE Length */ - RCPI_TO_dBm(prBssDesc->ucRCPI) * 100, /* MBM */ - GFP_KERNEL); - } - } - - /* CFG80211 Indication */ - if(eStatus == WLAN_STATUS_MEDIA_CONNECT - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTING) { - cfg80211_connect_result(prGlueInfo->prDevHandler, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - WLAN_STATUS_SUCCESS, - GFP_KERNEL); - } - else if(eStatus == WLAN_STATUS_ROAM_OUT_FIND_BEST - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { - #if LINUX_VERSION_CODE > KERNEL_VERSION(3, 3, 0) - cfg80211_roamed_bss(prGlueInfo->prDevHandler, - bss, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - GFP_KERNEL); - #else - struct ieee80211_channel *prChannel = NULL; - UINT_8 ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - cfg80211_roamed(prGlueInfo->prDevHandler, - prChannel, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - GFP_KERNEL); - #endif - } - } - break; - - case WLAN_STATUS_MEDIA_DISCONNECT: - /* indicate disassoc event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, NULL, 0); - /* For CR 90 and CR99, While supplicant do reassociate, driver will do netif_carrier_off first, - after associated success, at joinComplete(), do netif_carier_on, - but for unknown reason, the supplicant 1x pkt will not called the driver - hardStartXmit, for template workaround these bugs, add this compiling flag - */ - /* switch netif off */ - -#if 1 /* CONSOLE_MESSAGE */ - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_off\n", prGlueInfo->prDevHandler->name)); -#endif - - netif_carrier_off(prGlueInfo->prDevHandler); - - if(prGlueInfo->fgIsRegistered == TRUE - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { - /* CFG80211 Indication */ - cfg80211_disconnected(prGlueInfo->prDevHandler, 0, NULL, 0, GFP_KERNEL); - } - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - - break; - - case WLAN_STATUS_SCAN_COMPLETE: - /* indicate scan complete event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWSCAN, NULL, 0); - - /* 1. reset first for newly incoming request */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - /* 2. then CFG80211 Indication */ - if(prScanRequest != NULL) { - cfg80211_scan_done(prScanRequest, FALSE); - } - break; - case WLAN_STATUS_CONNECT_INDICATION: - /* indicate AIS Jion fail event */ - if(prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTING) { - cfg80211_connect_result(prGlueInfo->prDevHandler, - prGlueInfo->prAdapter->rWifiVar.rAisFsmInfo.prTargetBssDesc->aucBSSID, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - REASON_CODE_UNSPECIFIED, - GFP_KERNEL); - } - break; - - #if 0 - case WLAN_STATUS_MSDU_OK: - if (netif_running(prGlueInfo->prDevHandler)) { - netif_wake_queue(prGlueInfo->prDevHandler); - } - break; - #endif - - case WLAN_STATUS_MEDIA_SPECIFIC_INDICATION: - if (pStatus) { - switch (pStatus->eStatusType) { - case ENUM_STATUS_TYPE_AUTHENTICATION: - /* - printk(KERN_NOTICE "ENUM_STATUS_TYPE_AUTHENTICATION: L(%ld) [" MACSTR "] F:%lx\n", - pAuth->Request[0].Length, - MAC2STR(pAuth->Request[0].Bssid), - pAuth->Request[0].Flags); - */ - /* indicate (UC/GC) MIC ERROR event only */ - if ((pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_PAIRWISE_ERROR) || - (pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_GROUP_ERROR)) { - cfg80211_michael_mic_failure(prGlueInfo->prDevHandler, NULL, - (pAuth->arRequest[0].u4Flags == PARAM_AUTH_REQUEST_PAIRWISE_ERROR) ? NL80211_KEYTYPE_PAIRWISE : NL80211_KEYTYPE_GROUP, - 0, NULL, GFP_KERNEL); - wext_indicate_wext_event(prGlueInfo, - IWEVMICHAELMICFAILURE, - (unsigned char *)&pAuth->arRequest[0], - pAuth->arRequest[0].u4Length); - } - break; - - case ENUM_STATUS_TYPE_CANDIDATE_LIST: - /* - printk(KERN_NOTICE "Param_StatusType_PMKID_CandidateList: Ver(%ld) Num(%ld)\n", - pPmkid->u2Version, - pPmkid->u4NumCandidates); - if (pPmkid->u4NumCandidates > 0) { - printk(KERN_NOTICE "candidate[" MACSTR "] preAuth Flag:%lx\n", - MAC2STR(pPmkid->arCandidateList[0].rBSSID), - pPmkid->arCandidateList[0].fgFlags); - } - */ - { - UINT_32 i = 0; - - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)&pPmkid->arCandidateList[0]; - - for (i=0; iu4NumCandidates; i++) { - wext_indicate_wext_event(prGlueInfo, - IWEVPMKIDCAND, - (unsigned char *)&pPmkid->arCandidateList[i], - pPmkid->u4NumCandidates); - prPmkidCand += sizeof(PARAM_PMKID_CANDIDATE_T); - } - } - break; - - default: - /* case ENUM_STATUS_TYPE_MEDIA_STREAM_MODE */ - /* - printk(KERN_NOTICE "unknown media specific indication type:%x\n", - pStatus->StatusType); - */ - break; - } - } - else { - /* - printk(KERN_WARNING "media specific indication buffer NULL\n"); - */ - } - break; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case WLAN_STATUS_BWCS_UPDATE: - { - wext_indicate_wext_event(prGlueInfo, IWEVCUSTOM, pvBuf, sizeof(PTA_IPC_T)); - } - - break; - -#endif - - default: - /* - printk(KERN_WARNING "unknown indication:%lx\n", eStatus); - */ - break; - } -} /* kalIndicateStatusAndComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to update the (re)association request -* information to the structure used to query and set -* OID_802_11_ASSOCIATION_INFORMATION. -* -* \param[in] prGlueInfo Pointer to the Glue structure. -* \param[in] pucFrameBody Pointer to the frame body of the last (Re)Association -* Request frame from the AP. -* \param[in] u4FrameBodyLen The length of the frame body of the last -* (Re)Association Request frame. -* \param[in] fgReassocRequest TRUE, if it is a Reassociation Request frame. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocReqInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - PUINT_8 cp; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4ReqIeLength = 0; - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - wext_indicate_wext_event(prGlueInfo, IWEVASSOCREQIE, cp, u4FrameBodyLen); - - if(u4FrameBodyLen <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4ReqIeLength = u4FrameBodyLen; - kalMemCopy(prGlueInfo->aucReqIe, cp, u4FrameBodyLen); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to update the (re)association -* response information to the structure used to reply with -* cfg80211_connect_result -* -* @param prGlueInfo Pointer to adapter descriptor -* @param pucFrameBody Pointer to the frame body of the last (Re)Association -* Response frame from the AP -* @param u4FrameBodyLen The length of the frame body of the last -* (Re)Association Response frame -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ) -{ - UINT_32 u4IEOffset = 6; /* cap_info, status_code & assoc_id */ - UINT_32 u4IELength = u4FrameBodyLen - u4IEOffset; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4RspIeLength = 0; - - if(u4IELength <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4RspIeLength = u4IELength; - kalMemCopy(prGlueInfo->aucRspIe, pucFrameBody + u4IEOffset, u4IELength); - } - -} /* kalUpdateReAssocRspInfo */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSendCompleteAndAwakeQueue ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - - struct net_device *prDev = NULL; - struct sk_buff *prSkb = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucNetworkType = 0; - BOOLEAN fgIsValidDevice = TRUE; - - - ASSERT(pvPacket); - ASSERT(prGlueInfo->i4TxPendingFrameNum); - - prSkb = (struct sk_buff *) pvPacket; -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); -#endif - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (GLUE_GET_PKT_IS_PAL(prSkb)) { - ucNetworkType = NETWORK_TYPE_BOW_INDEX; - } else if (GLUE_GET_PKT_IS_P2P(prSkb)) { - ucNetworkType = NETWORK_TYPE_P2P_INDEX; - -#if CFG_ENABLE_WIFI_DIRECT - /* in case packet was sent after P2P device is unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - fgIsValidDevice = FALSE; - } -#endif - } else { - ucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_DEC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx]); - prDev = prSkb->dev; - - ASSERT(prDev); - - if(fgIsValidDevice == TRUE) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (netif_subqueue_stopped(prDev, prSkb) && - prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx] <= CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD) { - netif_wake_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum < CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_wake_queue(prGlueInfo->prDevHandler); - } -#endif - } - - - dev_kfree_skb((struct sk_buff *) pvPacket); - - DBGLOG(TX, EVENT, ("----- pending frame %d -----\n", prGlueInfo->i4TxPendingFrameNum)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Copy Mac Address setting from registry. It's All Zeros in Linux. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \param[out] paucMacAddr Pointer to the Mac Address buffer -* -* \retval WLAN_STATUS_SUCCESS -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryRegistryMacAddr ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_8 paucMacAddr - ) -{ - UINT_8 aucZeroMac[MAC_ADDR_LEN] = {0,0,0,0,0,0} - DEBUGFUNC("kalQueryRegistryMacAddr"); - - ASSERT(prGlueInfo); - ASSERT(paucMacAddr); - - kalMemCopy((PVOID) paucMacAddr, (PVOID)aucZeroMac, MAC_ADDR_LEN); - - return; -} /* end of kalQueryRegistryMacAddr() */ - -#if CFG_SUPPORT_EXT_CONFIG -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read external configuration, ex. NVRAM or file -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - /* External data is given from user space by ioctl or /proc, not read by - driver. - */ - if (0 != prGlueInfo->u4ExtCfgLength) { - DBGLOG(INIT, TRACE, ("Read external configuration data -- OK\n")); - } - else { - DBGLOG(INIT, TRACE, ("Read external configuration data -- fail\n")); - } - - return prGlueInfo->u4ExtCfgLength; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This inline function is to extract some packet information, including -* user priority, packet length, destination address, 802.1x and BT over Wi-Fi -* or not. -* -* @param prGlueInfo Pointer to the glue structure -* @param prNdisPacket Packet descriptor -* @param pucPriorityParam User priority -* @param pu4PacketLen Packet length -* @param pucEthDestAddr Destination address -* @param pfgIs1X 802.1x packet or not -* @param pfgIsPAL BT over Wi-Fi packet or not -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType - ) -{ - - UINT_32 u4PacketLen; - - - UINT_8 ucUserPriority = USER_PRIORITY_DEFAULT; /* Default */ - UINT_16 u2EtherTypeLen; - struct sk_buff *prSkb = (struct sk_buff *) prPacket; - PUINT_8 aucLookAheadBuf = NULL; - - DEBUGFUNC("kalQoSFrameClassifierAndPacketInfo"); - - u4PacketLen = prSkb->len; - - if (u4PacketLen < ETH_HLEN) { - DBGLOG(INIT, WARN, ("Invalid Ether packet length: %d\n", u4PacketLen)); - return FALSE; - } - - aucLookAheadBuf = prSkb->data; - - *pfgIs1X = FALSE; - *pfgIsPAL = FALSE; - //4 <3> Obtain the User Priority for WMM - u2EtherTypeLen = (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET] << 8) | (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET + 1]); - - if ((u2EtherTypeLen == ETH_P_IP) && - (u4PacketLen >= LOOK_AHEAD_LEN)) { - PUINT_8 pucIpHdr = &aucLookAheadBuf[ETH_HLEN]; - UINT_8 ucIpVersion; - - ucIpVersion = (pucIpHdr[0] & IPVH_VERSION_MASK) >> IPVH_VERSION_OFFSET; - //printk ("ip version %x\n", ucIpVersion); - if (ucIpVersion == IPVERSION) { - UINT_8 ucIpTos; - /* Get the DSCP value from the header of IP packet. */ - ucIpTos = pucIpHdr[1]; - ucUserPriority = ((ucIpTos & IPTOS_PREC_MASK) >> IPTOS_PREC_OFFSET); - } - - /* TODO(Kevin): Add TSPEC classifier here */ - } - else if (u2EtherTypeLen == ETH_P_1X) { /* For Port Control */ - //DBGLOG(REQ, TRACE, ("Tx 1x\n")); - *pfgIs1X = TRUE; - } - else if (u2EtherTypeLen == ETH_P_PRE_1X) { /* For Pre 1x pkt */ - //DBGLOG(REQ, TRACE, ("Tx Pre-1x\n")); - *pfgIs1X = TRUE; - } -#if CFG_SUPPORT_WAPI - else if (u2EtherTypeLen == ETH_WPI_1X) { - *pfgIs1X = TRUE; - } -#endif - else if (u2EtherTypeLen <= 1500) { /* 802.3 Frame */ - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) { - - UINT_16 tmp = ((aucLookAheadBuf[ETH_SNAP_OFFSET + 3] << 8) | aucLookAheadBuf[ETH_SNAP_OFFSET + 4]); - - *pfgIsPAL = TRUE; - ucUserPriority = (UINT_8)prSkb->priority; - - if (tmp == BOW_PROTOCOL_ID_SECURITY_FRAME) { - *pfgIs1X = TRUE; - } - } - } - - //4 <4> Return the value of Priority Parameter. - *pucPriorityParam = ucUserPriority; - - //4 <5> Retrieve Packet Information - DA - /* Packet Length/ Destination Address */ - *pu4PacketLen = u4PacketLen; - - kalMemCopy(pucEthDestAddr, aucLookAheadBuf, PARAM_MAC_ADDR_LEN); - - - //<6> Network type -#if CFG_ENABLE_BT_OVER_WIFI - if(*pfgIsPAL == TRUE) { - *pucNetworkType = NETWORK_TYPE_BOW_INDEX; - } - else -#endif - { -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered && GLUE_GET_PKT_IS_P2P(prPacket)) { - *pucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else -#endif - { - *pucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - } - return TRUE; -} /* end of kalQoSFrameClassifier() */ - -VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ) -{ - - ASSERT(prGlueInfo); - /* remove timeout check timer */ - wlanoidClearTimeoutCheck(prGlueInfo->prAdapter); - - //if (prGlueInfo->u4TimeoutFlag != 1) { - prGlueInfo->rPendStatus = rOidStatus; - complete(&prGlueInfo->rPendComp); - prGlueInfo->u4OidCompleteFlag = 1; - //} - /* else let it timeout on kalIoctl entry */ -} - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - //if (prGlueInfo->u4TimeoutFlag != 1) { - //clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - if (prGlueInfo->u4OidCompleteFlag != 1) { - complete(&prGlueInfo->rPendComp); - } - //} -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to transfer linux ioctl to OID, and we -* need to specify the behavior of the OID by ourself -* -* @param prGlueInfo Pointer to the glue structure -* @param pvInfoBuf Data buffer -* @param u4InfoBufLen Data buffer length -* @param fgRead Is this a read OID -* @param fgWaitResp does this OID need to wait for values -* @param fgCmd does this OID compose command packet -* @param pu4QryInfoLen The data length of the return values -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -// todo: enqueue the i/o requests for multiple processes access -// -// currently, return -1 -// - -//static GL_IO_REQ_T OidEntry; - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ) -{ - P_GL_IO_REQ_T prIoReq = NULL; - WLAN_STATUS ret = WLAN_STATUS_SUCCESS; - - - //GLUE_SPIN_LOCK_DECLARATION(); - ASSERT(prGlueInfo); - - - - /* <1> Check if driver is halt */ - - //if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - // return WLAN_STATUS_ADAPTER_NOT_READY; - //} - - if (down_interruptible(&g_halt_sem)) { - return WLAN_STATUS_FAILURE; - } - - - if (g_u4HaltFlag) { - up(&g_halt_sem); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if(down_interruptible(&prGlueInfo->ioctl_sem)) { - up(&g_halt_sem); - return WLAN_STATUS_FAILURE; - } - - /* <2> TODO: thread-safe */ - - /* <3> point to the OidEntry of Glue layer */ - - prIoReq = &(prGlueInfo->OidEntry); - - ASSERT(prIoReq); - - /* <4> Compose the I/O request */ - prIoReq->prAdapter = prGlueInfo->prAdapter; - prIoReq->pfnOidHandler = pfnOidHandler; - prIoReq->pvInfoBuf = pvInfoBuf; - prIoReq->u4InfoBufLen = u4InfoBufLen; - prIoReq->pu4QryInfoLen = pu4QryInfoLen; - prIoReq->fgRead = fgRead; - prIoReq->fgWaitResp= fgWaitResp; - prIoReq->rStatus = WLAN_STATUS_FAILURE; -#if CFG_ENABLE_WIFI_DIRECT - prIoReq->fgIsP2pOid = fgIsP2pOid; -#endif - - /* <5> Reset the status of pending OID */ - prGlueInfo->rPendStatus = WLAN_STATUS_FAILURE; - //prGlueInfo->u4TimeoutFlag = 0; - prGlueInfo->u4OidCompleteFlag = 0; - - /* <6> Check if we use the command queue */ - prIoReq->u4Flag = fgCmd; - - /* <7> schedule the OID bit */ - set_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - - /* <8> Wake up tx thread to handle kick start the I/O request */ - wake_up_interruptible(&prGlueInfo->waitq); - - /* <9> Block and wait for event or timeout, current the timeout is 5 secs */ - //if (wait_for_completion_interruptible_timeout(&prGlueInfo->rPendComp, 5 * KAL_HZ)) { - //if (!wait_for_completion_interruptible(&prGlueInfo->rPendComp)) { - wait_for_completion(&prGlueInfo->rPendComp); { - /* Case 1: No timeout. */ - /* if return WLAN_STATUS_PENDING, the status of cmd is stored in prGlueInfo */ - if (prIoReq->rStatus == WLAN_STATUS_PENDING) { - ret = prGlueInfo->rPendStatus; - } else { - ret = prIoReq->rStatus; - } - } - #if 0 - else { - /* Case 2: timeout */ - /* clear pending OID's cmd in CMD queue */ - if (fgCmd) { - prGlueInfo->u4TimeoutFlag = 1; - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - } - ret = WLAN_STATUS_FAILURE; - } - #endif - - up(&prGlueInfo->ioctl_sem); - up(&g_halt_sem); - - - - return ret; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending security frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending security frames -* belongs to dedicated network type -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param eNetworkTypeIdx Network Type Index -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* belongs to dedicated network type -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFramesByNetType ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} /* kalClearMgmtFramesByNetType */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a kernel thread function for handling command packets -* Tx requests and interrupt events -* -* @param data data pointer to private data of tx_thread -* -* @retval If the function succeeds, the return value is 0. -* Otherwise, an error code is returned. -* -*/ -/*----------------------------------------------------------------------------*/ - -int tx_thread(void *data) -{ - struct net_device *dev = data; - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(dev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_GL_IO_REQ_T prIoReq = NULL; - P_QUE_T prTxQueue = NULL; - P_QUE_T prCmdQue = NULL; - - int ret = 0; - - BOOLEAN fgNeedHwAccess = FALSE; - - struct sk_buff *prSkb = NULL; - - /* for spin lock acquire and release */ - GLUE_SPIN_LOCK_DECLARATION(); - - prTxQueue = &prGlueInfo->rTxQueue; - prCmdQue = &prGlueInfo->rCmdQueue; - - current->flags |= PF_NOFREEZE; - - DBGLOG(INIT, INFO, ("tx_thread starts running... \n")); - - while (TRUE) { - -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } -#endif - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("tx_thread should stop now...\n")); - break; - } - - /* - * sleep on waitqueue if no events occurred. Event contain (1) GLUE_FLAG_INT - * (2) GLUE_FLAG_OID (3) GLUE_FLAG_TXREQ (4) GLUE_FLAG_HALT - * - */ - - ret = wait_event_interruptible(prGlueInfo->waitq, - (prGlueInfo->u4Flag != 0)); - -#if CFG_DBG_GPIO_PINS - /* TX thread Wake up */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_LOW); -#endif -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } - - if (test_and_clear_bit(GLUE_FLAG_FRAME_FILTER_BIT, &prGlueInfo->u4Flag)) { - p2pFuncUpdateMgmtFrameRegister(prGlueInfo->prAdapter, prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter); - } - - -#endif - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("<1>tx_thread should stop now...\n")); - break; - } - - fgNeedHwAccess = FALSE; - - /* Handle Interrupt */ - if (test_and_clear_bit(GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag)) { - - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - - /* the Wi-Fi interrupt is already disabled in mmc thread, - so we set the flag only to enable the interrupt later */ - prGlueInfo->prAdapter->fgIsIntEnable = FALSE; - //wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - DBGLOG(INIT, INFO, ("ignore pending interrupt\n")); - } - else { - - wlanIST(prGlueInfo->prAdapter); - } - } - - /* transfer ioctl to OID request */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<2>tx_thread should stop now...\n"); - break; - } - #endif - - do { - if (test_and_clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag)) { - /* get current prIoReq */ - prIoReq = &(prGlueInfo->OidEntry); -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE - && prIoReq->fgIsP2pOid == TRUE) { - /* if this Oid belongs to p2p and p2p module is removed - * do nothing, - */ - } - else -#endif - { - if (FALSE == prIoReq->fgRead) { - prIoReq->rStatus = wlanSetInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } else { - prIoReq->rStatus = wlanQueryInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } - - if (prIoReq->rStatus != WLAN_STATUS_PENDING) { - complete(&prGlueInfo->rPendComp); - } - else { - wlanoidTimeoutCheck(prGlueInfo->prAdapter, prIoReq->pfnOidHandler); - } - } - } - - } while (FALSE); - - - /* - * - * if TX request, clear the TXREQ flag. TXREQ set by kalSetEvent/GlueSetEvent - * indicates the following requests occur - * - */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<3>tx_thread should stop now...\n"); - break; - } - #endif - - if (test_and_clear_bit(GLUE_FLAG_TXREQ_BIT, &prGlueInfo->u4Flag)) - { - - /* Process Mailbox Messages */ - wlanProcessMboxMessage(prGlueInfo->prAdapter); - - /* Process CMD request */ - do { - if (prCmdQue->u4NumElem > 0) { - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - wlanProcessCommandQueue(prGlueInfo->prAdapter, prCmdQue); - } - } while (FALSE); - - /* Handle Packet Tx */ - { - while (QUEUE_IS_NOT_EMPTY(prTxQueue)) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQueue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - ASSERT(prQueueEntry); - if (NULL == prQueueEntry) { - break; - } - - prSkb = (struct sk_buff *) GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - ASSERT(prSkb); - if (NULL == prSkb) { - DBGLOG(INIT, WARN, ("prSkb == NULL in tx\n")); - continue; - } - - if(wlanEnqueueTxPacket(prGlueInfo->prAdapter, - (P_NATIVE_PACKET)prSkb) == WLAN_STATUS_RESOURCES) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_HEAD(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - break; - } - } - - if (wlanGetTxPendingFrameCount(prGlueInfo->prAdapter) > 0) { - wlanTxPendingPackets(prGlueInfo->prAdapter, &fgNeedHwAccess); - } - } - - } - - /* Process RX, In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't do reset */ - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - - /* handle cnmTimer time out */ - if (test_and_clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag)) { - wlanTimerTimeoutCheck(prGlueInfo->prAdapter); - } - - #if CFG_DBG_GPIO_PINS - /* TX thread go to sleep */ - if (!prGlueInfo->u4Flag){ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_HIGH); - } - #endif - } - - #if 0 - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - #endif - - /* flush the pending TX packets */ - if (prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prGlueInfo); - } - - /* flush pending security frames */ - if (prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prGlueInfo); - } - - /* remove pending oid */ - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - - - /* In linux, we don't need to free sk_buff by ourself */ - - DBGLOG(INIT, INFO, ("mtk_sdiod stops\n")); - complete(&prGlueInfo->rHaltComp); - - return 0; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to check if card is removed -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval TRUE: card is removed -* FALSE: card is still attached -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return FALSE; - // Linux MMC doesn't have removal notification yet -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This routine is used to send command to firmware for overriding netweork address - * - * \param pvGlueInfo Pointer of GLUE Data Structure - - * \retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->fgIsMacAddrOverride == FALSE) { - #if !defined(CONFIG_X86) - UINT_32 i; - BOOLEAN fgIsReadError = FALSE; - - for(i = 0 ; i < MAC_ADDR_LEN ; i+=2) { - if(kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prMacAddr) + i)) == FALSE) { - fgIsReadError = TRUE; - break; - } - } - - if(fgIsReadError == TRUE) { - return FALSE; - } - else { - return TRUE; - } - #else - /* x86 Linux doesn't need to override network address so far */ - return FALSE; - #endif - } - else { - COPY_MAC_ADDR(prMacAddr, prGlueInfo->rMacAddrOverride); - - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to flush pending TX packets in glue layer -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prTxQue; - P_QUE_ENTRY_T prQueueEntry; - PVOID prPacket; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prTxQue = &(prGlueInfo->rTxQueue); - - if (prGlueInfo->i4TxPendingFrameNum) { - while (TRUE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - if (prQueueEntry == NULL) { - break; - } - - prPacket = GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - - kalSendComplete(prGlueInfo, - prPacket, - WLAN_STATUS_NOT_ACCEPTED); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is get indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->eParamMediaStateIndicated; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ) -{ - ASSERT(prGlueInfo); - - prGlueInfo->eParamMediaStateIndicated = eParamMediaStateIndicate; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending OID staying in command queue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - - if (((P_CMD_INFO_T)prQueueEntry)->fgIsOid) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - break; - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - - if (prCmdInfo) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - } - else { - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_NOT_ACCEPTED); - } - - prGlueInfo->u4OidCompleteFlag = 1; - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to insert command into prCmdQueue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* prQueueEntry Pointer of queue entry to be inserted -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ) -{ - P_QUE_T prCmdQue; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prQueueEntry); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Handle EVENT_ID_ASSOC_INFO event packet by indicating to OS with -* proper information -* -* @param pvGlueInfo Pointer of GLUE Data Structure -* @param prAssocInfo Pointer of EVENT_ID_ASSOC_INFO Packet -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ) -{ - // to do -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware load address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4LoadAddress; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware start address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4StartAddress; -} - -/*----------------------------------------------------------------------------*/ -/*! - * * @brief Notify OS with SendComplete event of the specific packet. Linux should - * * free packets here. - * * - * * @param pvGlueInfo Pointer of GLUE Data Structure - * * @param pvPacket Pointer of Packet Handle - * * @param status Status Code for OS upper layer - * * - * * @return none - * */ -/*----------------------------------------------------------------------------*/ - -/// Todo -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ) -{ - ASSERT(pvPacket); - - dev_kfree_skb((struct sk_buff *) pvPacket); - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); -} - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (UINT_32)(prGlueInfo->i4TxPendingFrameNum); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to retrieve the number of pending commands -* (including MMPDU, 802.1X and command packets) -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - - ASSERT(prGlueInfo); - prCmdQue = &prGlueInfo->rCmdQueue; - - return prCmdQue->u4NumElem; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Timer Initialization Procedure -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] prTimerHandler Pointer to timer handling function, whose only -* argument is "prAdapter" -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ - -//static struct timer_list tickfn; - -VOID -kalOsTimerInitialize ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ) -{ - - ASSERT(prGlueInfo); - - init_timer(&(prGlueInfo->tickfn)); - prGlueInfo->tickfn.function = prTimerHandler; - prGlueInfo->tickfn.data = (unsigned long) prGlueInfo; -} - -// Todo -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] rInterval Time out interval from current time. -* -* \retval TRUE Success. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ) -{ - ASSERT(prGlueInfo); - del_timer_sync(&(prGlueInfo->tickfn)); - - prGlueInfo->tickfn.expires = jiffies + u4Interval * HZ / MSEC_PER_SEC; - add_timer(&(prGlueInfo->tickfn)); - - return TRUE; /* success */ -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to cancel -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval TRUE : Timer has been canceled -* FALAE : Timer doens't exist -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - - if (del_timer_sync(&(prGlueInfo->tickfn)) >=0) { - return TRUE; - } else { - return FALSE; - } -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is a callback function for scanning done -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ) -{ - ASSERT(prGlueInfo); - - P_AIS_FSM_INFO_T prAisFsmInfo; - prAisFsmInfo = &(prGlueInfo->prAdapter->rWifiVar.rAisFsmInfo); - - cnmTimerStopTimer(prGlueInfo->prAdapter, &prAisFsmInfo->rScanDoneTimer); -#if CFG_SUPPORT_NVRAM - /* check for system configuration for generating error message on scan list */ - wlanCheckSystemConfiguration(prGlueInfo->prAdapter); -#endif - kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to generate a random number -* -* \param none -* -* \retval UINT_32 -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalRandomNumber( - VOID - ) -{ - UINT_32 number = 0; - - get_random_bytes(&number, 4); - - return number; -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief command timeout call-back function - * - * \param[in] prGlueInfo Pointer to the GLUE data structure. - * - * \retval (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -kalTimeoutHandler (unsigned long arg) -{ - - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T) arg; - - ASSERT(prGlueInfo); - - /* Notify tx thread for timeout event */ - set_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - wake_up_interruptible(&prGlueInfo->waitq); - - return; -} - - -VOID -kalSetEvent (P_GLUE_INFO_T pr) { - set_bit(GLUE_FLAG_TXREQ_BIT, &pr->u4Flag); - wake_up_interruptible(&pr->waitq); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if configuration file (NVRAM/Registry) exists -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if !defined(CONFIG_X86) - ASSERT(prGlueInfo); - - return prGlueInfo->fgNvramAvailable; -#else - /* there is no configuration data for x86-linux */ - return FALSE; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Registry information -* -* \param[in] -* prGlueInfo -* -* \return -* Pointer of REG_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return &(prGlueInfo->rRegInfo); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve version information of corresponding configuration file -* -* \param[in] -* prGlueInfo -* -* \param[out] -* pu2Part1CfgOwnVersion -* pu2Part1CfgPeerVersion -* pu2Part2CfgOwnVersion -* pu2Part2CfgPeerVersion -* -* \return -* NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ) -{ - ASSERT(prGlueInfo); - - ASSERT(pu2Part1CfgOwnVersion); - ASSERT(pu2Part1CfgPeerVersion); - ASSERT(pu2Part2CfgOwnVersion); - ASSERT(pu2Part2CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1OwnVersion), - pu2Part1CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1PeerVersion), - pu2Part1CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion), - pu2Part2CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2PeerVersion), - pu2Part2CfgPeerVersion); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the WPS is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->fgWpsActive); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief update RSSI and LinkQuality to GLUE layer -* -* \param[in] -* prGlueInfo -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* \return -* None -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - struct iw_statistics *pStats = (struct iw_statistics *)NULL; - - ASSERT(prGlueInfo); - - switch(eNetTypeIdx) { - case KAL_NETWORK_TYPE_AIS_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case KAL_NETWORK_TYPE_P2P_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - break; -#endif -#endif - default: - break; - - } - - if (pStats) { - pStats->qual.qual = cLinkQuality; - pStats->qual.noise = 0; - pStats->qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_NOISE_UPDATED; - pStats->qual.level = 0x100 + cRssi; - pStats->qual.updated |= IW_QUAL_LEVEL_UPDATED; - } - - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Pre-allocate I/O buffer -* -* \param[in] -* none -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ) -{ - UINT_32 u4Size; - - if(CFG_COALESCING_BUFFER_SIZE >= CFG_RX_COALESCING_BUFFER_SIZE) { - u4Size = CFG_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - else { - u4Size = CFG_RX_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - - pvIoBuffer = kmalloc(u4Size, GFP_KERNEL); - if(pvIoBuffer) { - pvIoBufferSize = u4Size; - pvIoBufferUsage = 0; - - return TRUE; - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free pre-allocated I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUninitIOBuffer( - VOID - ) -{ - if(pvIoBuffer) { - kfree(pvIoBuffer); - - pvIoBuffer = (PVOID) NULL; - pvIoBufferSize = 0; - pvIoBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatch pre-allocated I/O buffer -* -* \param[in] -* u4AllocSize -* -* \return -* PVOID for pointer of pre-allocated I/O buffer -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ) -{ - PVOID ret = (PVOID)NULL; - - if(pvIoBuffer) { - if(u4AllocSize <= (pvIoBufferSize - pvIoBufferUsage)) { - ret = (PVOID)&(((PUINT_8)(pvIoBuffer))[pvIoBufferUsage]); - pvIoBufferUsage += u4AllocSize; - } - } - else { - /* fault tolerance */ - ret = (PVOID) kalMemAlloc(u4AllocSize, PHY_MEM_TYPE); - } - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release all dispatched I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ) -{ - if(pvIoBuffer) { - pvIoBufferUsage -= u4Size; - } - else { - /* fault tolerance */ - kalMemFree(pvAddr, PHY_MEM_TYPE, u4Size); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo)) - return TRUE; -#endif - - return FALSE; -} - - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the MFP is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->rWpaInfo.u4Mfp); -} -#endif - -struct file* -kalFileOpen( - const char* path, - int flags, - int rights) -{ - struct file* filp = NULL; - mm_segment_t oldfs; - int err = 0; - - oldfs = get_fs(); - set_fs(get_ds()); - filp = filp_open(path, flags, rights); - set_fs(oldfs); - if(IS_ERR(filp)) { - err = PTR_ERR(filp); - return NULL; - } - return filp; -} - -VOID -kalFileClose( - struct file* file) -{ - filp_close(file, NULL); -} - -UINT_32 -kalFileRead( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_read(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalFileWrite( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_write(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size) -{ - struct file* file = NULL; - UINT_32 ret; - UINT_32 u4Flags = 0; - - if(fgDoAppend) { - u4Flags = O_APPEND; - } - - file = kalFileOpen(pucPath, O_WRONLY | O_CREAT | u4Flags, S_IRWXU); - ret = kalFileWrite(file, 0, pucData, u4Size); - kalFileClose(file); - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate BSS-INFO to NL80211 as scanning result -* -* \param[in] -* prGlueInfo -* pucBeaconProbeResp -* u4FrameLen -* -* -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucBeaconProbeResp, - IN UINT_32 u4FrameLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ) -{ - struct wiphy *wiphy; - struct ieee80211_channel *prChannel = NULL; - - ASSERT(prGlueInfo); - wiphy = priv_to_wiphy(prGlueInfo); - - /* search through channel entries */ - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - if(prChannel != NULL && prGlueInfo->prScanRequest != NULL) { - struct cfg80211_bss *bss; - - /* indicate to NL80211 subsystem */ - bss = cfg80211_inform_bss_frame(wiphy, - prChannel, - (struct ieee80211_mgmt *)pucBeaconProbeResp, - u4FrameLen, - i4SignalStrength * 100, - GFP_KERNEL); - - if(!bss) { - DBGLOG(REQ, WARN, ("cfg80211_inform_bss_frame() returned with NULL\n")); - } - else { - cfg80211_put_bss(bss); - } - } - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p.c deleted file mode 100755 index d918b4cfc25d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p.c +++ /dev/null @@ -1,5483 +0,0 @@ -/* -** $Id: @(#) gl_p2p.c@@ -*/ - -/*! \file gl_p2p.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_p2p.c $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** FPB from ALPS.JB to phase 2 release. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 09 2012 terry.wu - * [WCXRP00001166] [Wi-Fi] [Driver] cfg80211 integration for p2p newtork - * cfg80211 integration for p2p network. - * - * 12 19 2011 terry.wu - * [WCXRP00001142] [Wi-Fi] [P2P Driver] XOR local admin bit to generate p2p net device MAC - * XOR local administrated bit to generate net device MAC of p2p network. - * - * 12 02 2011 yuche.tsai - * NULL - * Fix possible KE when unload p2p. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 16 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Avoid using work thread in set p2p multicast address callback. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 11 07 2011 yuche.tsai - * NULL - * [ALPS 00087243] KE in worker thread. - * The multicast address list is scheduled in worker thread. - * Before the worker thread is excuted, if P2P is unloaded, a KE may occur. - * - * 10 26 2011 terry.wu - * [WCXRP00001066] [MT6620 Wi-Fi] [P2P Driver] Fix P2P Oid Issue - * Fix some P2P OID functions didn't raise its flag "fgIsP2pOid" issue. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 26 2011 yuche.tsai - * NULL - * Fix bug of parsing secondary device list type issue. - * - * 08 24 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Abort. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue of P2P. - * - * 08 22 2011 chinglan.wang - * NULL - * Fix invitation indication bug.. - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 05 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Add Password ID check for quick connection. - * Also modify some connection policy. - * - * 07 18 2011 chinglan.wang - * NULL - * Add IOC_P2P_GO_WSC_IE (p2p capability). - * - * 06 14 2011 yuche.tsai - * NULL - * Add compile flag to disable persistent group support. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 21 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * 1. Revise P2P power mode setting. - * 2. Revise fast-PS for concurrent - * - * 04 19 2011 wh.su - * NULL - * Adding length check before doing WPA RSN IE parsing for scan results indicate. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 07 2011 terry.wu - * [WCXRP00000619] [MT6620 Wi-Fi][Driver] fix kernel panic may occur when removing wlan - * Fix kernel panic may occur when removing wlan driver. - * - * 03 31 2011 wh.su - * [WCXRP00000614] [MT6620 Wi-Fi][Driver] P2P: Update beacon content while setting WSC IE - * Update the wsc ie to beacon content. - * - * 03 25 2011 wh.su - * NULL - * add the sample code for set power mode and get power mode. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Modify formation policy. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 wh.su - * [WCXRP00000563] [MT6620 Wi-Fi] [P2P] Set local config method while set password Id ready - * set lccal config method method while set password Id ready. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine queue_select function - * - * 03 13 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * add code for avoid compiling warning. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * support the power save related p2p setting. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify P2P's netdevice functions to support multiple H/W queues - * - * 03 03 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * for get request, the buffer length to be copied is header + payload. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * add a missed break. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 02 25 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * add the Operation channel setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the set int ioctl set index and value map to driver issue. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * modify the structure pointer for set WSC IE. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 09 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * fix typo - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 20 2010 cp.wu - * NULL - * correct typo. - * - * 08 20 2010 yuche.tsai - * NULL - * Invert Connection request provision status parameter. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 18 2010 cp.wu - * NULL - * modify pwp ioctls attribution by removing FIXED_SIZE. - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 17 2010 cp.wu - * NULL - * correct p2p net device registration with NULL pointer access issue. - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * add basic support for ioctl of getting scan result. (only address and SSID are reporterd though) - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement private io controls for Wi-Fi Direct - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include - -#include -//#include -#include "gl_p2p_ioctl.h" - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ARGV_MAX_NUM (4) - -/*For CFG80211 - wiphy parameters*/ -#define MAX_SCAN_LIST_NUM (1) -#define MAX_SCAN_IE_LEN (512) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -/* for cfg80211 - frequency table */ -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -static struct ieee80211_channel mtk_5ghz_a_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - /* MCS1~7*/ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#if 0 -/*Bandwidth 20Mhz Only*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#else -/*Bandwidth 20/40Mhz*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#endif - -static struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_a_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_a_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_p2p_config_ops = { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) - /* Froyo */ - .change_virtual_intf = mtk_p2p_cfg80211_change_iface, // 1 st - .change_bss = mtk_p2p_cfg80211_change_bss, - .scan = mtk_p2p_cfg80211_scan, - .remain_on_channel = mtk_p2p_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_p2p_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_p2p_cfg80211_mgmt_tx, - .connect = mtk_p2p_cfg80211_connect, - .disconnect = mtk_p2p_cfg80211_disconnect, - .deauth = mtk_p2p_cfg80211_deauth, - .disassoc = mtk_p2p_cfg80211_disassoc, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .start_ap = mtk_p2p_cfg80211_start_ap, - .change_beacon = mtk_p2p_cfg80211_change_beacon, - .stop_ap = mtk_p2p_cfg80211_stop_ap, -#else - .add_beacon = mtk_p2p_cfg80211_add_set_beacon, - .set_beacon = mtk_p2p_cfg80211_add_set_beacon, - .del_beacon = mtk_p2p_cfg80211_stop_ap, -#endif - .set_wiphy_params = mtk_p2p_cfg80211_set_wiphy_params, - .del_station = mtk_p2p_cfg80211_del_station, - .set_channel = mtk_p2p_cfg80211_set_channel, - .set_bitrate_mask = mtk_p2p_cfg80211_set_bitrate_mask, - .mgmt_frame_register = mtk_p2p_cfg80211_mgmt_frame_register, - .get_station = mtk_p2p_cfg80211_get_station, - // ================ - .add_key = mtk_p2p_cfg80211_add_key, - .get_key = mtk_p2p_cfg80211_get_key, - .del_key = mtk_p2p_cfg80211_del_key, - .set_default_key = mtk_p2p_cfg80211_set_default_key, - .join_ibss = mtk_p2p_cfg80211_join_ibss, - .leave_ibss = mtk_p2p_cfg80211_leave_ibss, - .set_tx_power = mtk_p2p_cfg80211_set_txpower, - .get_tx_power = mtk_p2p_cfg80211_get_txpower, - .set_power_mgmt = mtk_p2p_cfg80211_set_power_mgmt, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_p2p_cfg80211_testmode_cmd, - #endif -#endif -}; - - - -/* There isn't a lot of sense in it, but you can transmit anything you like */ -static const struct ieee80211_txrx_stypes -mtk_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = { - [NL80211_IFTYPE_ADHOC] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_STATION] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_AP] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_AP_VLAN] = { - /* copy AP */ - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_DISASSOC >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_P2P_CLIENT] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_P2P_GO] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - } -}; - - - -#endif - -/* the legacy wireless extension stuff */ -static const iw_handler rP2PIwStandardHandler[] = { - [SIOCGIWPRIV - SIOCIWFIRST] = mtk_p2p_wext_get_priv, - [SIOCGIWSCAN - SIOCIWFIRST] = mtk_p2p_wext_discovery_results, - [SIOCSIWESSID - SIOCIWFIRST] = mtk_p2p_wext_reconnect, - [SIOCSIWAUTH - SIOCIWFIRST] = mtk_p2p_wext_set_auth, - [SIOCSIWENCODEEXT - SIOCIWFIRST] = mtk_p2p_wext_set_key, - [SIOCSIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_set_powermode, - [SIOCGIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_get_powermode, - [SIOCSIWTXPOW - SIOCIWFIRST] = mtk_p2p_wext_set_txpow, -#if CFG_SUPPORT_P2P_RSSI_QUERY - [SIOCGIWSTATS - SIOCIWFIRST] = mtk_p2p_wext_get_rssi, -#endif - [SIOCSIWMLME - SIOCIWFIRST] = mtk_p2p_wext_mlme_handler, -}; - -static const iw_handler rP2PIwPrivHandler[] = { - [IOC_P2P_CFG_DEVICE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_local_dev_info, - [IOC_P2P_PROVISION_COMPLETE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_provision_complete, - [IOC_P2P_START_STOP_DISCOVERY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_start_stop_discovery, - [IOC_P2P_DISCOVERY_RESULTS - SIOCIWFIRSTPRIV] = mtk_p2p_wext_discovery_results, - [IOC_P2P_WSC_BEACON_PROBE_RSP_IE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_wsc_ie, - [IOC_P2P_CONNECT_DISCONNECT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_connect_disconnect, - [IOC_P2P_PASSWORD_READY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_password_ready, -// [IOC_P2P_SET_PWR_MGMT_PARAM - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_pm_param, - [IOC_P2P_SET_INT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_int, - [IOC_P2P_GET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_get_struct, - [IOC_P2P_SET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_struct, - [IOC_P2P_GET_REQ_DEVICE_INFO - SIOCIWFIRSTPRIV] = mtk_p2p_wext_request_dev_info, -}; - - -static const struct iw_priv_args rP2PIwPrivTable[] = { - { - .cmd = IOC_P2P_CFG_DEVICE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CFG_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CFG_DEVICE" - }, - { - .cmd = IOC_P2P_START_STOP_DISCOVERY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_REQ_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_DISCOVERY" - }, - { - .cmd = IOC_P2P_DISCOVERY_RESULTS, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_RESULT" - }, - { - .cmd = IOC_P2P_WSC_BEACON_PROBE_RSP_IE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_HOSTAPD_PARAM), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_WSC_IE" - }, - { - .cmd = IOC_P2P_CONNECT_DISCONNECT, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CONNECT_DEVICE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CONNECT" - }, - { - .cmd = IOC_P2P_PASSWORD_READY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_PASSWORD_READY), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_PASSWD_RDY" - }, - { - .cmd = IOC_P2P_GET_STRUCT, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "P2P_GET_STRUCT" - }, - { - .cmd = IOC_P2P_SET_STRUCT, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_SET_STRUCT" - }, - { - .cmd = IOC_P2P_GET_REQ_DEVICE_INFO, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_DEVICE_REQ), - .name = "P2P_GET_REQDEV" - }, - { - /* SET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "set_oid" - }, - { - /* GET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "get_oid" - } -}; - -const struct iw_handler_def mtk_p2p_wext_handler_def = { - .num_standard = (__u16)sizeof(rP2PIwStandardHandler)/sizeof(iw_handler), - .num_private = (__u16)sizeof(rP2PIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args), - .standard = rP2PIwStandardHandler, - .private = rP2PIwPrivHandler, - .private_args = rP2PIwPrivTable, -#if CFG_SUPPORT_P2P_RSSI_QUERY - .get_wireless_stats = mtk_p2p_wext_get_wireless_stats, -#else - .get_wireless_stats = NULL, -#endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* for IE Searching */ -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/* Net Device Hooks */ -static int -p2pOpen( - IN struct net_device *prDev - ); - -static int -p2pStop( - IN struct net_device *prDev - ); - -static struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ); - -static void -p2pSetMulticastList( - IN struct net_device *prDev - ); - -static int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ); - -static int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ); - -static int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -unsigned int _p2p_cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -p2pSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _p2p_cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} - -static struct net_device *g_P2pPrDev; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -p2pInit( - struct net_device *prDev - ) -{ - if (!prDev) { - return -ENXIO; - } - - return 0; /* success */ -} /* end of p2pInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -p2pUninit ( - IN struct net_device *prDev - ) -{ - - - return; -} /* end of p2pUninit() */ - - - - - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops p2p_netdev_ops = { - .ndo_open = p2pOpen, - .ndo_stop = p2pStop, - .ndo_set_mac_address = p2pSetMACAddress, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = p2pSetMulticastList, -#else - .ndo_set_multicast_list = p2pSetMulticastList, -#endif - .ndo_get_stats = p2pGetStats, - .ndo_do_ioctl = p2pDoIOCTL, - .ndo_start_xmit = p2pHardStartXmit, - .ndo_select_queue = p2pSelectQueue, - .ndo_init = p2pInit, - .ndo_uninit = p2pUninit, -}; - - -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PAllocInfo ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_WIFI_VAR_T prWifiVar = NULL; - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - prWifiVar = &(prAdapter->rWifiVar); - - ASSERT(prAdapter); - ASSERT(prWifiVar); - - do { - if (prGlueInfo == NULL) { - break; - } - - if (prGlueInfo->prP2PInfo == NULL) { - /*alloc memory for p2p info */ - prGlueInfo->prP2PInfo = - kalMemAlloc(sizeof(GL_P2P_INFO_T), VIR_MEM_TYPE); - prAdapter->prP2pInfo = - kalMemAlloc(sizeof(P2P_INFO_T), VIR_MEM_TYPE); - prWifiVar->prP2PConnSettings = - kalMemAlloc(sizeof(P2P_CONNECTION_SETTINGS_T),VIR_MEM_TYPE); - prWifiVar->prP2pFsmInfo = - kalMemAlloc(sizeof(P2P_FSM_INFO_T),VIR_MEM_TYPE); - prWifiVar->prP2pSpecificBssInfo = - kalMemAlloc(sizeof(P2P_SPECIFIC_BSS_INFO_T),VIR_MEM_TYPE); - } - else { - ASSERT(prAdapter->prP2pInfo != NULL); - ASSERT(prWifiVar->prP2PConnSettings != NULL); - ASSERT(prWifiVar->prP2pFsmInfo != NULL); - ASSERT(prWifiVar->prP2pSpecificBssInfo != NULL); - } - /*MUST set memory to 0 */ - kalMemZero(prGlueInfo->prP2PInfo, sizeof(GL_P2P_INFO_T)); - kalMemZero(prAdapter->prP2pInfo, sizeof(P2P_INFO_T)); - kalMemZero(prWifiVar->prP2PConnSettings, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemZero(prWifiVar->prP2pFsmInfo, sizeof(P2P_FSM_INFO_T)); - kalMemZero(prWifiVar->prP2pSpecificBssInfo, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - } while (FALSE); - - - /* chk if alloc successful or not*/ - if (prGlueInfo->prP2PInfo && - prAdapter->prP2pInfo && - prWifiVar->prP2PConnSettings && - prWifiVar->prP2pFsmInfo && - prWifiVar->prP2pSpecificBssInfo) { - return TRUE; - } - else { - - if (prWifiVar->prP2pSpecificBssInfo) { - kalMemFree(prWifiVar->prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - prWifiVar->prP2pSpecificBssInfo = NULL; - } - if (prWifiVar->prP2pFsmInfo) { - kalMemFree(prWifiVar->prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - - prWifiVar->prP2pFsmInfo = NULL; - } - if (prWifiVar->prP2PConnSettings) { - kalMemFree(prWifiVar->prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - - prWifiVar->prP2PConnSettings = NULL; - } - if (prGlueInfo->prP2PInfo) { - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - - prGlueInfo->prP2PInfo = NULL; - } - if (prAdapter->prP2pInfo) { - kalMemFree(prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - - prAdapter->prP2pInfo = NULL; - } - return FALSE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ) -{ - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - /* free memory after p2p module is ALREADY unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - - kalMemFree(prGlueInfo->prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - /*Reomve p2p bss scan list*/ - scanRemoveAllP2pBssDesc(prGlueInfo->prAdapter); - - /*reset all pointer to NULL */ - prGlueInfo->prP2PInfo = NULL; - prGlueInfo->prAdapter->prP2pInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo = NULL; - - return TRUE; - } - else { - return FALSE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enable Channel for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pEnableChannel( - PUINT_8 pucChIdx, - UINT_8 ucChannelNum, - struct ieee80211_channel *mtk_channels, - UINT_8 mtk_channel_sz -) -{ - UINT_8 ucCurChIdx = *pucChIdx; - - while(TRUE) { - (*pucChIdx)++; - (*pucChIdx) %= mtk_channel_sz; - - if(ucChannelNum == mtk_channels[*pucChIdx].hw_value) { - mtk_channels[*pucChIdx].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - - if(*pucChIdx == ucCurChIdx) { - printk(KERN_ALERT DRV_NAME "Orphan channel [%d]\n", ucChannelNum); - break; - } - } -} - - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoRegister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - BOOLEAN ret; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_UNREGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERING; - fgDoRegister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoRegister) { - return TRUE; - } - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - - /* Here are functions which need rtnl_lock */ - wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy); - - /* net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - ret = FALSE; - } - else { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERED; - ret = TRUE; - } - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - return ret; -} - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoUnregister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_REGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERING; - fgDoUnregister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoUnregister) { - return TRUE; - } - - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - /* Here are functions which need rtnl_lock */ - - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pUpdateChannelTableByDomain( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, uc2gChIdx, uc5gChIdx; - UINT_8 ucMaxChannelNum = ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_a_channels); - UINT_8 ucNumOfChannel = ucMaxChannelNum; - RF_CHANNEL_INFO_T aucChannelList[ucMaxChannelNum]; - - uc2gChIdx = uc5gChIdx = 0; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_a_channels); i++) { - mtk_5ghz_a_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, BAND_NULL, ucMaxChannelNum, &ucNumOfChannel, aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - p2pEnableChannel(&uc2gChIdx, aucChannelList[i].ucChannelNum, mtk_2ghz_channels, ARRAY_SIZE(mtk_2ghz_channels)); - break; - - case BAND_5G: - p2pEnableChannel(&uc5gChIdx, aucChannelList[i].ucChannelNum, mtk_5ghz_a_channels, ARRAY_SIZE(mtk_5ghz_a_channels)); - break; - - default: - printk(KERN_ALERT DRV_NAME "Unknow band.\n"); - break; - - } - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for cfg80211 for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GL_HIF_INFO_T prHif = NULL; - PARAM_MAC_ADDRESS rMacAddr; -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - struct device *prDev; -#endif - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - printk("glRegisterP2P\n"); - - /*0. allocate p2pinfo */ - if(!p2PAllocInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Allocate memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* 1. allocate WIPHY */ - prGlueInfo->prP2PInfo->wdev.wiphy = wiphy_new(&mtk_p2p_config_ops, sizeof(P_GLUE_INFO_T)); - if (!prGlueInfo->prP2PInfo->wdev.wiphy) { - printk(KERN_ALERT DRV_NAME "unable to allocate wiphy for p2p\n"); - - goto err_alloc_wiphy; - } - - /* 1.1 fill wiphy parameters */ -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(prHif->cltCtx, &prDev); - if(!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for p2p\n"); - } -#else - prDev = &(prHif->func->dev); -#endif - set_wiphy_dev(prGlueInfo->prP2PInfo->wdev.wiphy, prDev); - - prGlueInfo->prP2PInfo->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_AP) - | BIT(NL80211_IFTYPE_P2P_CLIENT) - | BIT(NL80211_IFTYPE_P2P_GO) - | BIT(NL80211_IFTYPE_STATION); - - p2pUpdateChannelTableByDomain(prGlueInfo); - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - if(prAdapter->fgEnable5GBand) { - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - } - - prGlueInfo->prP2PInfo->wdev.wiphy->mgmt_stypes = mtk_cfg80211_default_mgmt_stypes; - prGlueInfo->prP2PInfo->wdev.wiphy->max_remain_on_channel_duration = 5000; - prGlueInfo->prP2PInfo->wdev.wiphy->n_cipher_suites = 5; - prGlueInfo->prP2PInfo->wdev.wiphy->cipher_suites = (const u32*)cipher_suites; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; -#else - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY; -#endif - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ssids = MAX_SCAN_LIST_NUM; - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ie_len = MAX_SCAN_IE_LEN; - prGlueInfo->prP2PInfo->wdev.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; -#endif - -#if 0 - /* 2. Register WIPHY */ - if(wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy) < 0) { - printk(KERN_ALERT DRV_NAME "Couldn't register wiphy device for p2p\n"); - - goto err_reg_wiphy; - } -#endif - - /* 2.1 set priv as pointer to glue structure */ - *((P_GLUE_INFO_T *) wiphy_priv(prGlueInfo->prP2PInfo->wdev.wiphy)) = prGlueInfo; - - /* 2.2 wdev initialization */ - if(fgIsApMode) { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_AP; - } else { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_P2P_CLIENT; - } - -#endif /* CFG_ENABLE_WIFI_DIRECT_CFG_80211 */ - - /* 3. allocate netdev */ - prGlueInfo->prP2PInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - if (!prGlueInfo->prP2PInfo->prDevHandler) { - printk(KERN_ALERT DRV_NAME "unable to allocate netdevice for p2p\n"); - - printk("unable to allocate netdevice for p2p\n"); - - goto err_alloc_netdev; - } - - /* 4. setup netdev */ - /* 4.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prP2PInfo->prDevHandler)) = prGlueInfo; - - /* 4.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] ^= 0x2; // change to local administrated address - memcpy(prGlueInfo->prP2PInfo->prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->prP2PInfo->prDevHandler->perm_addr, prGlueInfo->prP2PInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* 4.3 register callback functions */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) - prGlueInfo->prP2PInfo->prDevHandler->netdev_ops = &p2p_netdev_ops; -#else - prGlueInfo->prP2PInfo->prDevHandler->open = p2pOpen; - prGlueInfo->prP2PInfo->prDevHandler->stop = p2pStop; - prGlueInfo->prP2PInfo->prDevHandler->get_stats = p2pGetStats; - prGlueInfo->prP2PInfo->prDevHandler->set_multicast_list = p2pSetMulticastList; - prGlueInfo->prP2PInfo->prDevHandler->hard_start_xmit = p2pHardStartXmit; - prGlueInfo->prP2PInfo->prDevHandler->do_ioctl = p2pDoIOCTL; - prGlueInfo->prP2PInfo->prDevHandler->set_mac_address = p2pSetMACAddress; -#endif -// prGlueInfo->prP2PInfo->prDevHandler->wireless_handlers = &mtk_p2p_wext_handler_def; - - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->prP2PInfo->prDevHandler, &(prHif->func->dev)); -#endif - - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - prGlueInfo->prP2PInfo->prDevHandler->ieee80211_ptr = &(prGlueInfo->prP2PInfo->wdev); - prGlueInfo->prP2PInfo->wdev.netdev = prGlueInfo->prP2PInfo->prDevHandler; -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prGlueInfo->prP2PInfo->prDevHandler->features = NETIF_F_IP_CSUM; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#if 0 - /* 7. net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* 8. register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - goto err_reg_netdev; - } -#endif - - /* 8. set p2p net device register state */ - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - /* 9. setup running mode*/ - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo->fgIsApMode = fgIsApMode; - - /* 10. finish */ - p2pFsmInit(prAdapter); - - p2pFuncInitConnectionSettings(prAdapter, prAdapter->rWifiVar.prP2PConnSettings); - - /* Active network too early would cause HW not able to sleep. - * Defer the network active time. - */ -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - return TRUE; -#if 0 -err_reg_netdev: - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif -err_alloc_netdev: -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -// wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - -//err_reg_wiphy: - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; - -err_alloc_wiphy: -#endif - - return FALSE; -} /* end of glRegisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister Net Device for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - p2pFsmUninit(prGlueInfo->prAdapter); - - nicDeactivateNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - -#if 0 - /* Release command, mgmt and security frame belong to P2P network in - * prGlueInfo->prCmdQue - * prAdapter->rPendingCmdQueue - * prAdapter->rTxCtrl.rTxMgmtTxingQueue - * To ensure there is no pending CmdDone/TxDone handler to be executed after p2p module is removed. - */ - - /* Clear CmdQue*/ - kalClearMgmtFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - kalClearSecurityFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingTxMsdu */ - nicFreePendingTxMsduInfoByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif - -#if 0 - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#if 0 - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); -#endif - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; -#endif - - /* Free p2p memory */ -#if 1 - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#endif - return TRUE; - -} /* end of glUnregisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for stop p2p fsm immediate - * - * \param[in] prGlueInfo Pointer to struct P_GLUE_INFO_T. - * - * \retval TRUE The execution succeeds. - * \retval FALSE The execution failed. - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ) -{ -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prGlueInfo); - -// prAdapter = prGlueInfo->prAdapter; -// ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - -#if 0 - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - printk(KERN_ALERT DRV_NAME "Allocate for p2p mesasage FAILED\n"); - //return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_UNBUF); - -#endif - - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - return TRUE; -} /* end of p2pStop() */ - - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pOpen( - IN struct net_device *prDev - ) -{ -// P_GLUE_INFO_T prGlueInfo = NULL; -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prDev); - -#if 0 // Move after device name set. (mtk_p2p_set_local_dev_info) - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} /* end of p2pOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - // P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - ASSERT(prGlueP2pInfo); - - /* CFG80211 down */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueP2pInfo->prScanRequest != NULL) { - prScanRequest = prGlueP2pInfo->prScanRequest; - prGlueP2pInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(prScanRequest) { - cfg80211_scan_done(prScanRequest, TRUE); - } - -#if 0 - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); - - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - netif_tx_stop_all_queues(prDev); - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -} /* end of p2pStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, to get the network interface statistical - * information. - * - * Whenever an application needs to get statistics for the interface, this method - * is called. This happens, for example, when ifconfig or netstat -i is run. - * - * \param[in] prDev Pointer to struct net_device. - * - * \return net_device_stats buffer pointer. - */ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - -#if 0 // frog temp fix - //@FIXME - //prDev->stats.rx_packets = 0; - //prDev->stats.tx_packets = 0; - prDev->stats.tx_errors = 0; - prDev->stats.rx_errors = 0; - //prDev->stats.rx_bytes = 0; - //prDev->stats.tx_bytes = 0; - prDev->stats.multicast = 0; - - return &prDev->stats; - -#else - //prGlueInfo->prP2PInfo->rNetDevStats.rx_packets = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.rx_bytes = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.tx_bytes = 0; - //prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->prP2PInfo->rNetDevStats; -#endif -} /* end of p2pGetStats() */ - - - - -static void -p2pSetMulticastList ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - g_P2pPrDev = prDev; - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_MULTICAST; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - -} /* p2pSetMulticastList */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is to set multicast list and set rx mode. - * - * \param[in] prDev Pointer to struct net_device - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -void -mtk_p2p_wext_set_Multicastlist ( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 u4SetInfoLen = 0; - struct net_device *prDev = g_P2pPrDev; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - if (prDev->flags & IFF_PROMISC) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - if (prGlueInfo->prP2PInfo->u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - UINT_32 i = 0; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), ha->addr); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), prMcList->dmi_addr); - } -#endif - - DBGLOG(P2P, TRACE, ("SEt Multicast Address List\n")); - - if (i >= MAX_NUM_GROUP_ADDR) { - return; - } - wlanoidSetP2PMulticastList(prGlueInfo->prAdapter, - &(prGlueInfo->prP2PInfo->aucMCAddrList[0]), - (i * ETH_ALEN), - &u4SetInfoLen); - - } - - return; -} /* end of p2pSetMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * * \brief This function is TX entry point of NET DEVICE. - * * - * * \param[in] prSkb Pointer of the sk_buff to be sent - * * \param[in] prDev Pointer to struct net_device - * * - * * \retval NETDEV_TX_OK - on success. - * * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - * */ -/*----------------------------------------------------------------------------*/ -int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_16 u2QueueIdx = 0; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip tx\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - // mark as P2P packets - GLUE_SET_PKT_FLAG_P2P(prSkb); -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - GLUE_SET_PKT_ARRIVAL_TIME(prSkb, kalGetTimeTick()); -#endif - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (u2QueueIdx >= CFG_MAX_TXQ_NUM) { - printk(KERN_INFO DRV_NAME"Incorrect queue index, skip this frame\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* Statistic usage. */ - prGlueInfo->prP2PInfo->rNetDevStats.tx_bytes += prSkb->len; - prGlueInfo->prP2PInfo->rNetDevStats.tx_packets++; - //prDev->stats.tx_packets++; - - return NETDEV_TX_OK; -} /* end of p2pHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, a primary SOCKET interface to configure - * the interface lively. Handle an ioctl call on one of our devices. - * Everything Linux ioctl specific is done here. Then we pass the contents - * of the ifr->data to the request message handler. - * - * \param[in] prDev Linux kernel netdevice - * - * \param[in] prIFReq Our private ioctl request structure, typed for the generic - * struct ifreq so we can use ptr to function - * - * \param[in] cmd Command ID - * - * \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. - * \retval OTHER The execution of IOCTL command is failed. - */ -/*----------------------------------------------------------------------------*/ -int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - struct iwreq *prIwReq = (struct iwreq *)prIFReq; - struct iw_request_info rIwReqInfo; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4ReadyFlag == 0) { - // adapter not ready yet - return -EINVAL; - } - - // fill rIwReqInfo - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch(i4Cmd) { - case SIOCSIWENCODEEXT: - /* Set Encryption Material after 4-way handshaking is done */ - if (prIwReq->u.encoding.pointer) { - u4ExtraSize = prIwReq->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - prIwReq->u.encoding.pointer, - prIwReq->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (prIwReq->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if(ret == 0) { - ret = mtk_p2p_wext_set_key(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - break; - - case SIOCSIWMLME: - /* IW_MLME_DISASSOC used for disconnection*/ - if (prIwReq->u.data.length != sizeof(struct iw_mlme)) { - printk(KERN_INFO "MLME buffer strange:%d\n", prIwReq->u.data.length); - ret = -EINVAL; - break; - } - - if (!prIwReq->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, prIwReq->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = mtk_p2p_wext_mlme_handler(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - case SIOCGIWPRIV: - /* This ioctl is used to list all IW privilege ioctls */ - ret = mtk_p2p_wext_get_priv(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCGIWSCAN: - ret = mtk_p2p_wext_discovery_results(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCSIWAUTH: - ret = mtk_p2p_wext_set_auth(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case IOC_P2P_CFG_DEVICE: - case IOC_P2P_PROVISION_COMPLETE: - case IOC_P2P_START_STOP_DISCOVERY: - case IOC_P2P_DISCOVERY_RESULTS: - case IOC_P2P_WSC_BEACON_PROBE_RSP_IE: - case IOC_P2P_CONNECT_DISCONNECT: - case IOC_P2P_PASSWORD_READY: - case IOC_P2P_GET_STRUCT: - case IOC_P2P_SET_STRUCT: - case IOC_P2P_GET_REQ_DEVICE_INFO: - ret = rP2PIwPrivHandler[i4Cmd - SIOCIWFIRSTPRIV](prDev, &rIwReqInfo, &(prIwReq->u), (char *)&(prIwReq->u)); - break; -#if CFG_SUPPORT_P2P_RSSI_QUERY - case SIOCGIWSTATS: - ret = mtk_p2p_wext_get_rssi(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; -#endif - default: - ret = -ENOTTY; - } - - return ret; -} /* end of p2pDoIOCTL() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To report the private supported IOCTLs table to user space. - * - * \param[in] prDev Net device requested. - * \param[out] prIfReq Pointer to ifreq structure, content is copied back to - * user space buffer in gl_iwpriv_table. - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - - ASSERT(prDev); - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rP2PIwPrivTable, sizeof(rP2PIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* end of mtk_p2p_wext_get_priv() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To indicate P2P-FSM for re-associate to the connecting device - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 For success. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_reconnect: P2P Reconnect\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_reconnect() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief MLME command handler -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_mlme *mlme = (struct iw_mlme *)extra; - P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_mlme_handler:\n")); - - switch (mlme->cmd) { - case IW_MLME_DISASSOC: - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, mlme->addr.sa_data); - - prMsgP2PConnAbt->u2ReasonCode = mlme->reason_code; - - - if (EQUAL_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prP2pBssInfo->aucOwnMacAddr)) { - DBGLOG(P2P, TRACE, ("P2P Connection Abort:\n")); - - /* 1.2 fill message */ - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - } - else { - DBGLOG(P2P, TRACE, ("P2P Connection Pause:\n")); - - /* 1.2 fill message */ - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); - - break; - - default: - return -EOPNOTSUPP; - } -#endif - return 0; -} /* end of mtk_p2p_wext_mlme_handler() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PROVISION_COMPLETE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - switch(prData->flags) { - case P2P_PROVISIONING_SUCCESS: - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - prGlueInfo->prP2PInfo->u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - - break; - - case P2P_PROVISIONING_FAIL: - - break; - - default: - return -EOPNOTSUPP; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_set_provision_complete() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_START_STOP_DISCOVERY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_IW_P2P_REQ_DEVICE_TYPE prReqDeviceType = (P_IW_P2P_REQ_DEVICE_TYPE) extra; - UINT_8 au4IeBuf[MAX_IE_LENGTH]; - P_MSG_HDR_T prMsgHdr; - P_MSG_P2P_DEVICE_DISCOVER_T prDiscoverMsg; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if(prData->flags == P2P_STOP_DISCOVERY) { - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_HDR_T)); - - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - } - else if(prData->flags == P2P_START_DISCOVERY) { - - /* retrieve IE for Probe Response */ - if(prReqDeviceType->probe_rsp_len > 0) { - if(prReqDeviceType->probe_rsp_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prReqDeviceType->probe_rsp_ie, prReqDeviceType->probe_rsp_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prReqDeviceType->probe_rsp_len; - } - else { - return -E2BIG; - } - } - - /* retrieve IE for Probe Request */ - if(prReqDeviceType->probe_req_len > 0) { - if(prReqDeviceType->probe_req_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prReqDeviceType->probe_req_ie, prReqDeviceType->probe_req_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prReqDeviceType->probe_req_len; - } - else { - return -E2BIG; - } - } - /* update IE for Probe Request */ - - if(prReqDeviceType->scan_type == P2P_LISTEN) { - /* update listening parameter */ - - /* @TODO: update prConnSettings for Probe Response IE */ - } - else { - // indicate P2P-FSM with MID_MNY_P2P_DEVICE_DISCOVERY - prDiscoverMsg = (P_MSG_P2P_DEVICE_DISCOVER_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_DEVICE_DISCOVER_T)); - - if (!prDiscoverMsg) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - prDiscoverMsg->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - prDiscoverMsg->u4DevDiscoverTime = 0; // unlimited - prDiscoverMsg->fgIsSpecificType = TRUE; - prDiscoverMsg->rTargetDeviceType.u2CategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[0])); - prDiscoverMsg->rTargetDeviceType.u2SubCategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[6]));; - COPY_MAC_ADDR(prDiscoverMsg->aucTargetDeviceID, aucNullAddr); - - /* @FIXME: parameter to be refined, where to pass IE buffer ? */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prDiscoverMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - return -EINVAL; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_start_stop_discovery() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_INVITATION_STRUCT prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - if (prIoctlInvitation->ucReinvoke == 1) { - // TODO: Set Group ID - p2pFuncSetGroupID(prAdapter, prIoctlInvitation->aucGroupID, prIoctlInvitation->aucSsid, prIoctlInvitation->u4SsidLen); - } - - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - // TODO: Do Invitation. - prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - if (!prMsgP2PInvitationReq) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationReq->aucDeviceID, prIoctlInvitation->aucDeviceID, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationReq, - MSG_SEND_METHOD_BUF); - - } - - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_request */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_abort ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_ABORT_INVITATION prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)NULL; - - UINT_8 bssid[MAC_ADDR_LEN]; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - - if (!prMsgP2PInvitationAbort) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationAbort->aucDeviceID, prIoctlInvitationAbort->dev_addr, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationAbort, - MSG_SEND_METHOD_BUF); - - } - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_abort */ - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To override p2p interface address - * - * \param[in] prDev Net device requested. - * \param[in] addr Pointer to address - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@FIXME - return eth_mac_addr(prDev, addr); -} - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher suite -* -* \param[in] prDev Net device requested. -* \param[out] -* -* \retval 0 Success. -* \retval -EINVAL Invalid parameter -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_param *prAuth = (struct iw_param *)wrqu; - - ASSERT(prDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prDev, prAuth)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: - break; - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->prP2PInfo->u4CipherPairwise = prAuth->value; - break; - case IW_AUTH_CIPHER_GROUP: - case IW_AUTH_KEY_MGMT: - case IW_AUTH_TKIP_COUNTERMEASURES: - case IW_AUTH_DROP_UNENCRYPTED: - case IW_AUTH_80211_AUTH_ALG: - case IW_AUTH_WPA_ENABLED: - case IW_AUTH_RX_UNENCRYPTED_EAPOL: - case IW_AUTH_ROAMING_CONTROL: - case IW_AUTH_PRIVACY_INVOKED: - default: - //@TODO - break; - } - - return 0; -} /* end of mtk_p2p_wext_set_auth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_key( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int ret = 0; - struct iw_encode_ext *prIWEncExt; - struct iw_point *prEnc; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - UINT_8 keyStructBuf[100]; - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - do { - if (wrqu->encoding.pointer) { - u4ExtraSize = wrqu->encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - wrqu->encoding.pointer, - wrqu->encoding.length)) { - ret = -EFAULT; - break; - } - } - else if (wrqu->encoding.length != 0) { - ret = -EINVAL; - break; - } - - prEnc = &wrqu->encoding; - prIWEncExt = (struct iw_encode_ext *) prExtraBuf; - - if (GLUE_CHK_PR3(prDev, prEnc, prExtraBuf) == TRUE) { - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - if ((prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { // Key Removal - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if(rStatus != WLAN_STATUS_SUCCESS) - ret = -EFAULT; - } - else { - if(prIWEncExt->alg == IW_ENCODE_ALG_CCMP) { - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - ((prEnc->flags & IW_ENCODE_INDEX) - 1) : 0; - if (prKey->u4KeyIndex <= 3) { - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - ret = -EFAULT; - } - } - else { - ret = -EINVAL; - } - } - else { - ret = -EINVAL; - } - } - } - else - ret = -EINVAL; - - } while(FALSE); - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - - return ret; -} /* end of mtk_p2p_wext_set_key() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("set_powermode = %d, value = %d\n", wrqu->power.disabled, wrqu->power.value); - struct iw_param *prPower = (struct iw_param*)&wrqu->power; -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - printk(KERN_DEBUG "%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief get the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("mtk_p2p_wext_get_powermode\n"); - //wrqu->power.disabled = 0; - //wrqu->power.value = 1; - - struct iw_param *prPower = (struct iw_param*)&wrqu->power; - PARAM_POWER_MODE ePowerMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - - -#if 1 - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CFG_DEVICE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_CFG_DEVICE_TYPE prDeviceCfg = (P_IW_P2P_CFG_DEVICE_TYPE) extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - //P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - // update connection settings for P2P-FSM - // 1. update SSID - if(prDeviceCfg->ssid_len > ELEM_MAX_LEN_SSID) { - prConnSettings->ucSSIDLen = ELEM_MAX_LEN_SSID; - } - else { - prConnSettings->ucSSIDLen = prDeviceCfg->ssid_len; - } - - if(copy_from_user(prConnSettings->aucSSID, prDeviceCfg->ssid, prConnSettings->ucSSIDLen)) { - return -EFAULT; - } - - // 2. update device type (WPS IE) - kalMemCopy(&(prConnSettings->rPrimaryDevTypeBE), &(prDeviceCfg->pri_device_type), sizeof(DEVICE_TYPE_T)); -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - kalMemCopy(&(prConnSettings->arSecondaryDevTypeBE[0]), &(prDeviceCfg->snd_device_type), sizeof(DEVICE_TYPE_T)); -#endif - - // 3. update device name - if(prDeviceCfg->device_name_len > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prConnSettings->ucDevNameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - else { - prConnSettings->ucDevNameLen = prDeviceCfg->device_name_len; - } - if(copy_from_user(prConnSettings->aucDevName, prDeviceCfg->device_name, prConnSettings->ucDevNameLen)) { - return -EFAULT; - } - - // 4. update GO intent - prConnSettings->ucGoIntent = prDeviceCfg->intend; - - - /* Preferred channel bandwidth */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - -#if 0 - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_set_local_dev_info() */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief I/O Control handler for both - * IOC_P2P_START_STOP_DISCOVERY & SIOCGIWSCAN - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 Success. - * \retval -EFAULT Setting parameters to driver fail. - * \retval -EOPNOTSUPP Key size not supported. - * - * \note - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_event iwe; - char *current_ev = extra; - UINT_32 i; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - P_P2P_INFO_T prP2PInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2PInfo = prAdapter->prP2pInfo; - - for(i = 0 ; i < prP2PInfo->u4DeviceNum ; i++) { - prTargetResult = &prP2PInfo->arP2pDiscoverResult[i]; - - /* SIOCGIWAP */ - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, - prTargetResult->aucInterfaceAddr, - 6); - - current_ev = iwe_stream_add_event(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, IW_EV_ADDR_LEN); - - - /* SIOCGIWESSID */ - iwe.cmd = SIOCGIWESSID; - iwe.u.data.flags = 1; - iwe.u.data.length = prTargetResult->u2NameLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, prTargetResult->aucName); - - /* IWEVGENIE for WPA IE */ - if(prTargetResult->u2IELength <= 600 && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#if CFG_SUPPORT_WPS - - /* IWEVGENIE for WPS IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPSIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#endif - - /* IWEVGENIE for RSN IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - - /* IOC_P2P_GO_WSC_IE */ -#if 1 - /* device capability */ - if (1) { - UINT_8 data[40]; - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 8 + sizeof("p2p_cap="); - - snprintf(data, iwe.u.data.length, "p2p_cap=%02x%02x%02x%02x%c", - prTargetResult->ucDeviceCapabilityBitmap, prTargetResult->ucGroupCapabilityBitmap, - (UINT_8)prTargetResult->u2ConfigMethod, (UINT_8)(prTargetResult->u2ConfigMethod >> 8), '\0' ); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - - //printk("%s\n", data); - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 12 + sizeof("p2p_dev_type="); - - snprintf(data, iwe.u.data.length, "p2p_dev_type=%02x%02x%02x%02x%02x%02x%c", - (UINT_8)prTargetResult->rPriDevType.u2CategoryID,(UINT_8)prTargetResult->rPriDevType.u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[0].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[0].u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[1].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[1].u2SubCategoryID, - '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 17 + sizeof("p2p_grp_bssid="); - - snprintf(data, iwe.u.data.length, "p2p_grp_bssid="MACSTR"%c", - MAC2STR(prTargetResult->aucBSSID), '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - } -#endif - } - - /* Length of data */ - wrqu->data.length = (current_ev - extra); - wrqu->data.flags = 0; - - return 0; -} /* end of mtk_p2p_wext_discovery_results() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_WSC_BEACON_PROBE_RSP_IE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_HOSTAPD_PARAM prHostapdParam = (P_IW_P2P_HOSTAPD_PARAM)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (prHostapdParam->len > 0) { - if (prHostapdParam->len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[0], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[0] = prHostapdParam->len; - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prHostapdParam->len; - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //@TODO: send message to P2P-FSM - - return 0; -} /* end of mtk_p2p_wext_wsc_ie() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CONNECT_DISCONNECT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; -// P_IW_P2P_CONNECT_DEVICE prConnectDevice = (P_IW_P2P_CONNECT_DEVICE)extra; -// P_MSG_HDR_T prMsgHdr; -// P_MSG_P2P_CONNECTION_REQUEST_T prMsgP2PConnReq; -// P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt; -// UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - if (prData->flags == P2P_CONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_REQ - prMsgP2PConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (!prMsgP2PConnReq) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnReq, - MSG_SEND_METHOD_BUF); -#endif - } - else if(prData->flags == P2P_DISCONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_ABORT - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prConnectDevice->sta_addr); - - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); -#endif - } - else { - return -EINVAL; - } - - return 0; -} /* end of mtk_p2p_wext_connect_disconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PASSWORD_READY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_PASSWORD_READY prPasswordReady = (P_IW_P2P_PASSWORD_READY)extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* retrieve IE for Probe Request */ - if (prPasswordReady->probe_req_len > 0) { - if (prPasswordReady->probe_req_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prPasswordReady->probe_req_ie, prPasswordReady->probe_req_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prPasswordReady->probe_req_len; - - /* retrieve IE for Probe Response */ - if (prPasswordReady->probe_rsp_len > 0) { - if (prPasswordReady->probe_rsp_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prPasswordReady->probe_rsp_ie, prPasswordReady->probe_rsp_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prPasswordReady->probe_rsp_len; - - switch (prPasswordReady->active_config_method) { - case 1: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_PUSH_BUTTON; - break; - case 2: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_KEYPAD; - break; - case 3: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_DISPLAY; - break; - default: - break; - } - - prConnSettings->fgIsPasswordIDRdy = TRUE; - return 0; -} /* end of mtk_p2p_wext_password_ready() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_REQ_DEVICE_INFO) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_DEVICE_REQ prDeviceReq = (P_IW_P2P_DEVICE_REQ)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_DEVICE_REQ); - - // copy to upper-layer supplied buffer - kalMemCopy(prDeviceReq->name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - prDeviceReq->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prDeviceReq->name[prDeviceReq->name_len]='\0'; - COPY_MAC_ADDR(prDeviceReq->device_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prDeviceReq->device_type = prGlueInfo->prP2PInfo->ucConnReqDevType; - prDeviceReq->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prDeviceReq->active_config_method = prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod; - - return 0; -} /* end of mtk_p2p_wext_request_dev_info() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_INDICATE prInvIndicate = (P_IW_P2P_IOCTL_INVITATION_INDICATE)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_INDICATE); - - // copy to upper-layer supplied buffer - kalMemCopy(prInvIndicate->dev_name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - kalMemCopy(prInvIndicate->group_bssid, prGlueInfo->prP2PInfo->rConnReqGroupAddr, MAC_ADDR_LEN); - prInvIndicate->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prInvIndicate->dev_name[prInvIndicate->name_len]='\0'; - COPY_MAC_ADDR(prInvIndicate->dev_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prInvIndicate->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prInvIndicate->operating_channel = prGlueInfo->prP2PInfo->ucOperatingChnl; - prInvIndicate->invitation_type = prGlueInfo->prP2PInfo->ucInvitationType; - - return 0; -} /* end of mtk_p2p_wext_invitation_indicate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_STATUS prInvStatus = (P_IW_P2P_IOCTL_INVITATION_STATUS)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_STATUS); - - // copy to upper-layer supplied buffer - prInvStatus->status_code = prGlueInfo->prP2PInfo->u4InvStatus; - - return 0; -} /* end of mtk_p2p_wext_invitation_status() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device found -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval TRUE Success. -* \retval FALSE Failure -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_FND"); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PDVCFND event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return FALSE; -} /* end of kalP2PIndicateFound() */ - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pNetworkAddress, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_formation ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; -// struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_START_FORMATION prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - } while (FALSE); - - return i4Status; - -} -/* mtk_p2p_wext_start_formation */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 index; - INT_32 value; - PUINT_32 pu4IntBuf; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - UINT_32 u4Leng; - - ASSERT(prDev); - ASSERT(wrqu); - - //printk("mtk_p2p_wext_set_int\n"); - pu4IntBuf = (PUINT_32) extra; - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - - u4SubCmd = (UINT_32) wrqu->mode; - index = pu4IntBuf[1]; - value = pu4IntBuf[2]; - - printk("set parameter, u4SubCmd=%d idx=%d value=%lu\n", (INT_16)u4SubCmd, (INT_16)index, value); - - switch (u4SubCmd) { - case PRIV_CMD_INT_P2P_SET: - switch (index) { - case 0: /* Listen CH */ - { - UINT_8 ucSuggestChnl = 0; - - prP2pConnSettings->ucListenChnl = value; - - // 20110920 - frog: User configurations are placed in ConnSettings. - if (rlmFuncFindAvailableChannel(prGlueInfo->prAdapter, value, &ucSuggestChnl, TRUE, TRUE)) { - prP2pSpecificBssInfo->ucListenChannel = value; - } - else { - prP2pSpecificBssInfo->ucListenChannel = ucSuggestChnl; - } - - - break; - } - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - //prP2pConnSettings->u2LocalConfigMethod; - break; - case 102: /* Sigma P2p reset */ - kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - - default: - break; - } - break; - default: - break; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&prGlueInfo->prP2PInfo->aucOidBuf[0], - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEND_SD_RESPONSE: - status = mtk_p2p_wext_send_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_SEND_SD_REQUEST: - status = mtk_p2p_wext_send_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_TERMINATE_SD_PHASE: - status = mtk_p2p_wext_terminate_service_discovery_phase(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_INVITATION_STRUCT)) { -// status = mtk_p2p_wext_invitation_request(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_INVITATION_ABORT: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_ABORT_INVITATION)) { -// status = mtk_p2p_wext_invitation_abort(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_START_FORMATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_START_FORMATION)) { - status = mtk_p2p_wext_start_formation(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_set_sec_check_request(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_set_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - break; - default: - status = -EOPNOTSUPP; - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (!prDev || !wrqu) { - printk(KERN_INFO DRV_NAME "%s(): invalid param(0x%p, 0x%p)\n", - __func__, - prDev, - wrqu); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_GET_SD_REQUEST: - status = mtk_p2p_wext_get_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_GET_SD_RESPONSE: - status = mtk_p2p_wext_get_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION_INDICATE: - { - status = mtk_p2p_wext_invitation_indicate(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_INVITATION_STATUS: - { - status = mtk_p2p_wext_invitation_status(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - UINT_8 ucMaxChannelNum = 50; - PUINT_8 pucChnlList = (PUINT_8)prP2PReq->aucBuffer; - - kalGetChnlList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - prP2PReq->outBufferLength = NumOfChannel; - - for (i=0; iaucBuffer[i] = aucChannelList[i].ucChannelNum; -#else - *pucChnlList = aucChannelList[i].ucChannelNum; - pucChnlList++; -#endif - } - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - NumOfChannel + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - - case P2P_CMD_ID_GET_OP_CH: - { - prP2PReq->inBufferLength = 4; - - status = wlanoidQueryP2pOpChannel(prGlueInfo->prAdapter, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - &prP2PReq->outBufferLength); - - if (status == 0) { // WLAN_STATUS_SUCCESS - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - else { - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - break; - } - - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_get_sec_check_response(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_get_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - - - /* Copy queried data to user. */ - if (status == 0) { // WLAN_STATUS_SUCCESS - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - else { - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - break; - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery request frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery response frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery request frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery response frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSecCheckRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_get_sec_check_response\n"); - rStatus = kalIoctl(prGlueInfo, - wlanoidGetSecCheckResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - prP2PReq->aucBuffer, - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* terminating service discovery phase -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2PTerminateSDPhase, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - //P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_set_noa_param\n"); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNoaParam, - prNoaParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T),//prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; -// P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_set_oppps_param\n"); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetOppPsParam, - prOppPsParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T), //prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -int -mtk_p2p_wext_set_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - UINT_32 u4SetInfoLen; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSupplicantVersion, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} -/* mtk_p2p_wext_set_p2p_version */ - -int -mtk_p2p_wext_get_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pVersion, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} /* mtk_p2p_wext_get_p2p_version */ - -#if CFG_SUPPORT_P2P_RSSI_QUERY - -int -mtk_p2p_wext_get_rssi ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rssi; - struct iw_statistics *pStats = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - rStatus = WLAN_STATUS_FAILURE; - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &u4QueryInfoLen); - - u2BufferSize = prData->length; - - if (u2BufferSize < sizeof(struct iw_statistics)) { - return -E2BIG; - } - - - if (copy_to_user(prData->pointer, pStats, sizeof(struct iw_statistics))) { - rStatus = WLAN_STATUS_FAILURE; - } - - -stat_out: - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - -} /* mtk_p2p_wext_get_rssi */ - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &bufLen); - -stat_out: - return pStats; -} /* mtk_p2p_wext_get_wireless_stats */ - - -#endif /* CFG_SUPPORT_P2P_RSSI_QUERY */ - - -int -mtk_p2p_wext_set_txpow ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; -#endif - int i4Ret = 0; - - ASSERT(prDev); - ASSERT(prTxPow); - - do { - if ((!prDev) || (!prTxPow)) { - i4Ret = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - - if (!prGlueInfo) { - i4Ret = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; -#if 0 - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(0); - return -ENOMEM; - } - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - if (prTxPow->disabled) { - /* Dissolve. */ - prMsgFuncSwitch->fgIsFuncOn = FALSE; - } - else { - - /* Re-enable function. */ - prMsgFuncSwitch->fgIsFuncOn = TRUE; - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - } while (FALSE); - - return i4Ret; -} /* mtk_p2p_wext_set_txpow */ - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_cfg80211.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_cfg80211.c deleted file mode 100755 index bffe39669382..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_cfg80211.c +++ /dev/null @@ -1,2321 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_p2p_cfg80211.c $ -** -** 01 30 2013 yuche.tsai -** [ALPS00455459] [GN_WIFI]??wifi direct??????????? -** Fix possible race condition under GO mode. -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 09 05 2012 wh.su -** [ALPS00351547] [6577JB][WiFi direct]The 3rd device fail to establish p2p connection with GO sometimes -** sync with the ICS code. -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 08 21 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** Fix p2p bug find on ALPS.JB trunk. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#include -#include -#include - -#include "precomp.h" -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - P2P_PARAM_KEY_T rKey; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rKey, sizeof(P2P_PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - if(mac_addr) { - memcpy(rKey.arBSSID, mac_addr, ETH_ALEN); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - else { - rKey.u4KeyIndex |= BIT(31); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - rKey.u4KeyIndex |= BIT(31); //???? - } - if(params->key) - { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - } - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - PARAM_REMOVE_KEY_T prRemoveKey; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&prRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - memcpy(prRemoveKey.arBSSID, mac_addr, PARAM_MAC_ADDR_LEN); - prRemoveKey.u4KeyIndex = key_index; - prRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - &prRemoveKey, - prRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int -mtk_p2p_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - INT_32 i4RetRslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P2P_STATION_INFO_T rP2pStaInfo; - - ASSERT(wiphy); - - do { - if ((wiphy == NULL) || - (ndev == NULL) || - (sinfo == NULL) || - (mac == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_get_station\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - sinfo->filled = 0; - - /* Get station information. */ - /* 1. Inactive time? */ - p2pFuncGetStationInfo(prGlueInfo->prAdapter, - mac, - &rP2pStaInfo); - - /* Inactive time. */ - sinfo->filled |= STATION_INFO_INACTIVE_TIME; - sinfo->inactive_time = rP2pStaInfo.u4InactiveTime; - sinfo->generation = prP2pGlueInfo->i4Generation; - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} - -int -mtk_p2p_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prMsgScanRequest = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - UINT_32 u4MsgSize = 0, u4Idx = 0; - INT_32 i4RetRslt = -EINVAL; - P_RF_CHANNEL_INFO_T prRfChannelInfo = (P_RF_CHANNEL_INFO_T)NULL; - P_P2P_SSID_STRUCT_T prSsidStruct = (P_P2P_SSID_STRUCT_T)NULL; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_ssid *prSsid = NULL; - - /* [---------Channel---------] [---------SSID---------][---------IE---------] */ - - - do { - if ((wiphy == NULL) || (request == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (prP2pGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_scan.\n")); - - - if (prP2pGlueInfo->prScanRequest != NULL) { - /* There have been a scan request on-going processing. */ - DBGLOG(P2P, TRACE, ("There have been a scan request on-going processing.\n")); - break; - } - - prP2pGlueInfo->prScanRequest = request; - - /* Should find out why the n_channels so many? */ - if (request->n_channels > MAXIMUM_OPERATION_CHANNEL_LIST) { - request->n_channels = MAXIMUM_OPERATION_CHANNEL_LIST; - DBGLOG(P2P, TRACE, ("Channel list exceed the maximun support.\n")); - } - - u4MsgSize = sizeof(MSG_P2P_SCAN_REQUEST_T) + - (request->n_channels * sizeof(RF_CHANNEL_INFO_T)) + - (request->n_ssids * sizeof(PARAM_SSID_T)) + - request->ie_len; - - prMsgScanRequest = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, u4MsgSize); - - if (prMsgScanRequest == NULL) { - ASSERT(FALSE); - i4RetRslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("Generating scan request message.\n")); - - prMsgScanRequest->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - - - - DBGLOG(P2P, TRACE, ("Requesting channel number:%d.\n", request->n_channels)); - - for (u4Idx = 0; u4Idx < request->n_channels; u4Idx++) { - /* Translate Freq from MHz to channel number. */ - prRfChannelInfo = &(prMsgScanRequest->arChannelListInfo[u4Idx]); - prChannel = request->channels[u4Idx]; - - prRfChannelInfo->ucChannelNum = nicFreq2ChannelNum(prChannel->center_freq * 1000); - DBGLOG(P2P, TRACE, ("Scanning Channel:%d, freq: %d\n", - prRfChannelInfo->ucChannelNum, - prChannel->center_freq)); - switch (prChannel->band) { - case IEEE80211_BAND_2GHZ: - prRfChannelInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChannelInfo->eBand = BAND_5G; - break; - default: - DBGLOG(P2P, TRACE, ("UNKNOWN Band info from supplicant\n")); - prRfChannelInfo->eBand = BAND_NULL; - break; - } - - /* Iteration. */ - prRfChannelInfo++; - } - prMsgScanRequest->u4NumChannel = request->n_channels; - - DBGLOG(P2P, TRACE, ("Finish channel list.\n")); - - /* SSID */ - prSsid = request->ssids; - prSsidStruct = (P_P2P_SSID_STRUCT_T)prRfChannelInfo; - if (request->n_ssids) { - ASSERT(prSsidStruct == &(prMsgScanRequest->arChannelListInfo[u4Idx])); - prMsgScanRequest->prSSID = prSsidStruct; - } - - for (u4Idx = 0; u4Idx < request->n_ssids; u4Idx++) { - COPY_SSID(prSsidStruct->aucSsid, - prSsidStruct->ucSsidLen, - request->ssids->ssid, - request->ssids->ssid_len); - - prSsidStruct++; - prSsid++; - } - - prMsgScanRequest->i4SsidNum = request->n_ssids; - - DBGLOG(P2P, TRACE, ("Finish SSID list:%d.\n", request->n_ssids)); - - /* IE BUFFERS */ - prMsgScanRequest->pucIEBuf = (PUINT_8)prSsidStruct; - if (request->ie_len) { - kalMemCopy(prMsgScanRequest->pucIEBuf, request->ie, request->ie_len); - prMsgScanRequest->u4IELen = request->ie_len; - } - - DBGLOG(P2P, TRACE, ("Finish IE Buffer.\n")); - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgScanRequest, - MSG_SEND_METHOD_BUF); - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} /* mtk_p2p_cfg80211_scan */ - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - - - do { - if (wiphy == NULL) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_wiphy_params\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if (changed & WIPHY_PARAM_RETRY_SHORT) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY short param is changed.\n")); - } - - if (changed & WIPHY_PARAM_RETRY_LONG) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY long param is changed.\n")); - } - - - if (changed & WIPHY_PARAM_FRAG_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY fragmentation threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_RTS_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY RTS threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_COVERAGE_CLASS) { - // TODO: - DBGLOG(P2P, TRACE, ("The coverage class is changed???\n")); - } - - i4Rslt = 0; - } while (FALSE); - - - - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_wiphy_params */ - - - -int -mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - // TODO: for JB. - - return -EINVAL; -} - -//&&&&&&&&&&&&&&&&&&&&&&&&&& Add for ICS Wi-Fi Direct Support. &&&&&&&&&&&&&&&&&&&&&&& -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -int -mtk_p2p_cfg80211_start_ap ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; -// P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - - do { - if ((wiphy == NULL) || (settings == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_start_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + settings->beacon.head_len + settings->beacon.tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (settings->beacon.head_len != 0) { - kalMemCopy(pucBuffer, settings->beacon.head, settings->beacon.head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = settings->beacon.head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)settings->beacon.head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (settings->beacon.tail_len != 0) { - UINT_8 ucLen = settings->beacon.tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, settings->beacon.tail, settings->beacon.tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - - prP2pStartAPMsg->fgIsPrivacy = settings->privacy; - - prP2pStartAPMsg->u4BcnInterval = settings->beacon_interval; - - prP2pStartAPMsg->u4DtimPeriod = settings->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = settings->hidden_ssid; - - COPY_SSID(prP2pStartAPMsg->aucSsid, - prP2pStartAPMsg->u2SsidLen, - settings->ssid, - settings->ssid_len); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; - - -///////////////////////// - /** - * struct cfg80211_ap_settings - AP configuration - * - * Used to configure an AP interface. - * - * @beacon: beacon data - * @beacon_interval: beacon interval - * @dtim_period: DTIM period - * @ssid: SSID to be used in the BSS (note: may be %NULL if not provided from - * user space) - * @ssid_len: length of @ssid - * @hidden_ssid: whether to hide the SSID in Beacon/Probe Response frames - * @crypto: crypto settings - * @privacy: the BSS uses privacy - * @auth_type: Authentication type (algorithm) - * @inactivity_timeout: time in seconds to determine station's inactivity. - */ -// struct cfg80211_ap_settings { -// struct cfg80211_beacon_data beacon; -// -// int beacon_interval, dtim_period; -// const u8 *ssid; -// size_t ssid_len; -// enum nl80211_hidden_ssid hidden_ssid; -// struct cfg80211_crypto_settings crypto; -// bool privacy; -// enum nl80211_auth_type auth_type; -// int inactivity_timeout; -// }; -//////////////////// - - return i4Rslt; -} /* mtk_p2p_cfg80211_start_ap */ - - -int -mtk_p2p_cfg80211_change_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_change_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - -//////////////////////////// -/** - * struct cfg80211_beacon_data - beacon data - * @head: head portion of beacon (before TIM IE) - * or %NULL if not changed - * @tail: tail portion of beacon (after TIM IE) - * or %NULL if not changed - * @head_len: length of @head - * @tail_len: length of @tail - * @beacon_ies: extra information element(s) to add into Beacon frames or %NULL - * @beacon_ies_len: length of beacon_ies in octets - * @proberesp_ies: extra information element(s) to add into Probe Response - * frames or %NULL - * @proberesp_ies_len: length of proberesp_ies in octets - * @assocresp_ies: extra information element(s) to add into (Re)Association - * Response frames or %NULL - * @assocresp_ies_len: length of assocresp_ies in octets - * @probe_resp_len: length of probe response template (@probe_resp) - * @probe_resp: probe response template (AP mode only) - */ -//struct cfg80211_beacon_data { -// const u8 *head, *tail; -// const u8 *beacon_ies; -// const u8 *proberesp_ies; -// const u8 *assocresp_ies; -// const u8 *probe_resp; - -// size_t head_len, tail_len; -// size_t beacon_ies_len; -// size_t proberesp_ies_len; -// size_t assocresp_ies_len; -// size_t probe_resp_len; -//}; - -//////////////////////////// - - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_beacon */ - -#else -int -mtk_p2p_cfg80211_add_set_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_add_set_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - - prP2pStartAPMsg->fgIsPrivacy = FALSE; - - prP2pStartAPMsg->u4BcnInterval = info->interval; - - prP2pStartAPMsg->u4DtimPeriod = info->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = ENUM_HIDDEN_SSID_NONE; - -#if 0 - if (info->head_len > OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)) { - P_WLAN_BEACON_FRAME_T prWlanBcnFrame = info->head; - - prSsidIE = (P_IE_HDR_T)p2pFuncGetSpecIE(prGlueInfo->prAdapter, - (PUINT_8)prWlanBcnFrame->aucInfoElem, - (info->head_len - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)), - ELEM_ID_SSID, - NULL); - - kalMemCopy(prP2pStartAPMsg->aucSsid, SSID_IE(prSsidIE)->aucSSID, IE_LEN(prSsidIE)); - - } -#endif - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; -} -/* mtk_p2p_cfg80211_add_set_beacon */ -#endif - -int -mtk_p2p_cfg80211_stop_ap ( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prP2pSwitchMode = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if (wiphy == NULL) { - break; - } - - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_stop_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // Switch OP MOde. - prP2pSwitchMode = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prP2pSwitchMode == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pSwitchMode->rMsgHdr.eMsgId = MID_MNY_P2P_STOP_AP; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pSwitchMode, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} /* mtk_p2p_cfg80211_stop_ap */ - -// TODO: -int -mtk_p2p_cfg80211_deauth ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_deauth_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_deauth.\n")); - - return -EINVAL; -} /* mtk_p2p_cfg80211_deauth */ - - -// TODO: -int -mtk_p2p_cfg80211_disassoc ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_disassoc_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_disassoc.\n")); - - // not implemented yet - - return -EINVAL; -} /* mtk_p2p_cfg80211_disassoc */ - - -int -mtk_p2p_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prMsgChnlReq = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL) || - (cookie == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - prMsgChnlReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_REQUEST_T)); - - if (prMsgChnlReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_remain_on_channel\n")); - - prMsgChnlReq->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_REQ; - prMsgChnlReq->u8Cookie = *cookie; - prMsgChnlReq->u4Duration = duration; - - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &prMsgChnlReq->rChannelInfo, - &prMsgChnlReq->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} -/* mtk_p2p_cfg80211_remain_on_channel */ - - -int -mtk_p2p_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - u64 cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prMsgChnlAbort = (P_MSG_P2P_CHNL_ABORT_T)NULL; - - do { - if ((wiphy == NULL) || (dev == NULL)) { - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prMsgChnlAbort = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_ABORT_T)); - - if (prMsgChnlAbort == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_cancel_remain_on_channel\n")); - - prMsgChnlAbort->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_ABORT; - prMsgChnlAbort->u8Cookie = cookie; - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlAbort, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_cancel_remain_on_channel */ - -int -mtk_p2p_cfg80211_mgmt_tx ( - struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, - size_t len, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - bool no_cck, - bool dont_wait_for_ack, -#endif - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - P_MSDU_INFO_T prMgmtFrame = (P_MSDU_INFO_T)NULL; - PUINT_8 pucFrameBuf = (PUINT_8)NULL; - - do { - if ((wiphy == NULL) || - (buf == NULL) || - (len == 0) || - (dev == NULL) || - (cookie == NULL)) { - break; - } - - //DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_mgmt_tx\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - /* Channel & Channel Type & Wait time are ignored. */ - prMsgTxReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_MGMT_TX_REQUEST_T)); - - if (prMsgTxReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->fgNoneCckRate = FALSE; - prMsgTxReq->fgIsWaitRsp = TRUE; - - prMgmtFrame = cnmMgtPktAlloc(prGlueInfo->prAdapter, (UINT_32)(len + MAC_TX_RESERVED_FIELD)); - - if ((prMsgTxReq->prMgmtMsduInfo = prMgmtFrame) == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->u8Cookie = *cookie; - prMsgTxReq->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_TX; - - pucFrameBuf = (PUINT_8)((UINT_32)prMgmtFrame->prPacket + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucFrameBuf, buf, len); - - prMgmtFrame->u2FrameLength = len; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - if ((i4Rslt != 0) && (prMsgTxReq != NULL)) { - if (prMsgTxReq->prMgmtMsduInfo != NULL) { - cnmMgtPktFree(prGlueInfo->prAdapter, prMsgTxReq->prMgmtMsduInfo); - } - - cnmMemFree(prGlueInfo->prAdapter, prMsgTxReq); - } - - return i4Rslt; -} /* mtk_p2p_cfg80211_mgmt_tx */ - - - -int -mtk_p2p_cfg80211_change_bss ( - struct wiphy *wiphy, - struct net_device *dev, - struct bss_parameters *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - switch (params->use_cts_prot) { - case -1: - DBGLOG(P2P, TRACE, ("CTS protection no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("CTS protection disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("CTS protection enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("CTS protection unknown\n")); - break; - } - - - - switch (params->use_short_preamble) { - case -1: - DBGLOG(P2P, TRACE, ("Short prreamble no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("Short prreamble disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("Short prreamble enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("Short prreamble unknown\n")); - break; - } - - - -#if 0 - // not implemented yet - p2pFuncChangeBssParam(prGlueInfo->prAdapter, - prBssInfo->fgIsProtection, - prBssInfo->fgIsShortPreambleAllowed, - prBssInfo->fgUseShortSlotTime, - // Basic rates - // basic rates len - // ap isolate - // ht opmode. - ); -#else - i4Rslt = 0; -#endif - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_bss */ - - - -int -mtk_p2p_cfg80211_del_station ( - struct wiphy *wiphy, - struct net_device *dev, - u8 *mac - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBcMac[] = BC_MAC_ADDR; - - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - if (mac == NULL) { - mac = aucBcMac; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_del_station.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - //prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnectMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnectMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - COPY_MAC_ADDR(prDisconnectMsg->aucTargetID, mac); - prDisconnectMsg->u2ReasonCode = REASON_CODE_UNSPECIFIED; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnectMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_del_station */ - - -int -mtk_p2p_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (sme == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_connect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, (sizeof(MSG_P2P_CONNECTION_REQUEST_T) + sme->ie_len)); - - if (prConnReqMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prConnReqMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - COPY_SSID(prConnReqMsg->rSsid.aucSsid, - prConnReqMsg->rSsid.ucSsidLen, - sme->ssid, - sme->ssid_len); - - COPY_MAC_ADDR(prConnReqMsg->aucBssid, sme->bssid); - - DBGLOG(P2P, TRACE, ("Assoc Req IE Buffer Length:%d\n", sme->ie_len)); - kalMemCopy(prConnReqMsg->aucIEBuf, sme->ie, sme->ie_len); - prConnReqMsg->u4IELen = sme->ie_len; - - mtk_p2p_cfg80211func_channel_format_switch(sme->channel, - NL80211_CHAN_NO_HT, - &prConnReqMsg->rChannelInfo, - &prConnReqMsg->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prConnReqMsg, - MSG_SEND_METHOD_BUF); - - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_connect */ - -int -mtk_p2p_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_disconnect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - -// prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(P_MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - prDisconnMsg->u2ReasonCode = reason_code; - prDisconnMsg->fgSendDeauth = TRUE; - COPY_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCAddr); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_disconnect */ - - -int -mtk_p2p_cfg80211_change_iface ( - IN struct wiphy *wiphy, - IN struct net_device *ndev, - IN enum nl80211_iftype type, - IN u32 *flags, - IN struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if ((wiphy == NULL) || - (ndev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_change_iface.\n")); - - if (ndev->ieee80211_ptr) { - ndev->ieee80211_ptr->iftype = type; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - // Switch OP MOde. - prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prSwitchModeMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prSwitchModeMsg->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - switch (type) { - case NL80211_IFTYPE_P2P_CLIENT: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_CLIENT.\n")); - case NL80211_IFTYPE_STATION: - if (type == NL80211_IFTYPE_STATION) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_STATION.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_INFRASTRUCTURE; - break; - case NL80211_IFTYPE_AP: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_AP.\n")); - case NL80211_IFTYPE_P2P_GO: - if (type == NL80211_IFTYPE_P2P_GO) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_GO not AP.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_ACCESS_POINT; - break; - default: - DBGLOG(P2P, TRACE, ("Other type :%d .\n", type)); - prSwitchModeMsg->eOpMode = OP_MODE_P2P_DEVICE; - break; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSwitchModeMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_change_iface */ - - -int -mtk_p2p_cfg80211_set_channel ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN struct ieee80211_channel *chan, - IN enum nl80211_channel_type channel_type) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - RF_CHANNEL_INFO_T rRfChnlInfo; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_channel.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &rRfChnlInfo, - NULL); - - p2pFuncSetChannel(prGlueInfo->prAdapter, &rRfChnlInfo); - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; - -} -/* mtk_p2p_cfg80211_set_channel */ - -int -mtk_p2p_cfg80211_set_bitrate_mask ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (mask == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_bitrate_mask\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // TODO: Set bitrate mask of the peer? - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_bitrate_mask */ - - -void -mtk_p2p_cfg80211_mgmt_frame_register ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ) -{ -#if 0 - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; -#endif - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_mgmt_frame_register\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - switch (frame_type) { - case MAC_FRAME_PROBE_REQ: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, ERROR, ("Ask frog to add code for mgmt:%x\n", frame_type)); - break; - } - - - - if((prGlueInfo->prAdapter != NULL) && (prGlueInfo->prAdapter->fgIsP2PRegistered == TRUE)){ - - prGlueInfo->u4Flag |= GLUE_FLAG_FRAME_FILTER; - - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - - if (in_interrupt()) { - DBGLOG(P2P, TRACE, ("It is in interrupt level\n")); - } - } - - -#if 0 - - - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_MGMT_FRAME_REGISTER_T)); - - if (prMgmtFrameRegister == NULL) { - ASSERT(FALSE); - break; - } - - prMgmtFrameRegister->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_FRAME_REGISTER; - - prMgmtFrameRegister->u2FrameType = frame_type; - prMgmtFrameRegister->fgIsRegister = reg; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMgmtFrameRegister, - MSG_SEND_METHOD_BUF); - -#endif - - } while (FALSE); - - - return; -} /* mtk_p2p_cfg80211_mgmt_frame_register */ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch ( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel == NULL) { - break; - } - - if (prRfChnlInfo) { - prRfChnlInfo->ucChannelNum = nicFreq2ChannelNum(channel->center_freq * 1000); - - switch (channel->band) { - case IEEE80211_BAND_2GHZ: - prRfChnlInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChnlInfo->eBand = BAND_5G; - break; - default: - prRfChnlInfo->eBand = BAND_2G4; - break; - } - - } - - - if (prChnlSco) { - - switch (channel_type) { - case NL80211_CHAN_NO_HT: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT20: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT40MINUS: - *prChnlSco = CHNL_EXT_SCA; - break; - case NL80211_CHAN_HT40PLUS: - *prChnlSco = CHNL_EXT_SCB; - break; - default: - ASSERT(FALSE); - *prChnlSco = CHNL_EXT_SCN; - break; - } - } - - fgIsValid = TRUE; - } -while (FALSE); - - return fgIsValid; -} -/* mtk_p2p_cfg80211func_channel_format_switch */ - - -#if CONFIG_NL80211_TESTMODE -int mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_PARAMS prParams = (P_NL80211_DRIVER_TEST_PARAMS)NULL; - BOOLEAN fgIsValid = FALSE; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_cmd\n")); - - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_PARAMS)data; - - if(prParams->index >> 24 == 0x01) { - /* New version */ - prParams->index = prParams->index & ~ BITS(24,31); - } - else { - /* Old version*/ - mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd(wiphy, data, len); - fgIsValid = TRUE; - return fgIsValid; - } - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* P2P Simga */ - if(mtk_p2p_cfg80211_testmode_p2p_sigma_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; -#if CFG_SUPPORT_WFD - case 2: /* WFD */ - if(mtk_p2p_cfg80211_testmode_wfd_update_cmd(wiphy, data, len)) - fgIsValid= TRUE; - break; -#endif - case 3: /* Hotspot Client Management */ - if(mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - default: - fgIsValid = TRUE; - break; - } - } - - return fgIsValid; - -} - - -int mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - NL80211_DRIVER_TEST_PRE_PARAMS rParams; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index_mode; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rParams, sizeof(NL80211_DRIVER_TEST_PRE_PARAMS)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd\n")); - - if(data && len) - memcpy(&rParams, data, len); - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA,idx_mode=%d idx=%d value=%lu\n", - (INT_16)rParams.idx_mode, (INT_16)rParams.idx, rParams.value)); - - index_mode = rParams.idx_mode; - index = rParams.idx; - value = rParams.value; - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - p2pFsmUninit(prGlueInfo->prAdapter); - p2pFsmInit(prGlueInfo->prAdapter); - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - default: - break; - } - - return status; - -} - - -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_P2P_SIGMA_PARAMS prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_p2p_sigma_cmd\n")); - - if(data && len) - prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)data; - - index = (INT_32)prParams->idx; - value = (INT_32)prParams->value; - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA, idx=%lu value=%lu\n", - (INT_32)prParams->idx, (INT_32)prParams->value)); - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - case 109: /* Max Clients*/ - kalP2PSetMaxClients(prGlueInfo, value); - break; - case 110: /* Hotspot WPS mode */ - kalIoctl(prGlueInfo, - wlanoidSetP2pWPSmode, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - default: - break; - } - - return status; - -} - -#if CFG_SUPPORT_WFD -int -mtk_p2p_cfg80211_testmode_wfd_update_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_WFD_PARAMS prParams = (P_NL80211_DRIVER_WFD_PARAMS)NULL; - int status = 0; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgUpdate = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prParams = (P_NL80211_DRIVER_WFD_PARAMS)data; - - - DBGLOG(P2P, INFO, ("mtk_p2p_cfg80211_testmode_wfd_update_cmd\n")); - -#if 1 - - DBGLOG(P2P, INFO,("WFD Enable:%x\n", prParams->WfdEnable)); - DBGLOG(P2P, INFO,("WFD Session Available:%x\n", prParams->WfdSessionAvailable)); - DBGLOG(P2P, INFO,("WFD Couple Sink Status:%x\n", prParams->WfdCoupleSinkStatus)); - //aucReserved0[2] - DBGLOG(P2P, INFO,("WFD Device Info:%x\n", prParams->WfdDevInfo)); - DBGLOG(P2P, INFO,("WFD Control Port:%x\n", prParams->WfdControlPort)); - DBGLOG(P2P, INFO,("WFD Maximum Throughput:%x\n", prParams->WfdMaximumTp)); - DBGLOG(P2P, INFO,("WFD Extend Capability:%x\n", prParams->WfdExtendCap)); - DBGLOG(P2P, INFO,("WFD Couple Sink Addr "MACSTR" \n", MAC2STR(prParams->WfdCoupleSinkAddress))); - DBGLOG(P2P, INFO,("WFD Associated BSSID "MACSTR" \n", MAC2STR(prParams->WfdAssociatedBssid))); - //UINT_8 aucVideolp[4]; - //UINT_8 aucAudiolp[4]; - DBGLOG(P2P, INFO,("WFD Video Port:%x\n", prParams->WfdVideoPort)); - DBGLOG(P2P, INFO,("WFD Audio Port:%x\n", prParams->WfdAudioPort)); - DBGLOG(P2P, INFO,("WFD Flag:%x\n", prParams->WfdFlag)); - DBGLOG(P2P, INFO,("WFD Policy:%x\n", prParams->WfdPolicy)); - DBGLOG(P2P, INFO,("WFD State:%x\n", prParams->WfdState)); - //UINT_8 aucWfdSessionInformationIE[24*8]; - DBGLOG(P2P, INFO,("WFD Session Info Length:%x\n", prParams->WfdSessionInformationIELen)); - //UINT_8 aucReserved1[2]; - DBGLOG(P2P, INFO,("WFD Primary Sink Addr "MACSTR" \n", MAC2STR(prParams->aucWfdPrimarySinkMac))); - DBGLOG(P2P, INFO,("WFD Secondary Sink Addr "MACSTR" \n", MAC2STR(prParams->aucWfdSecondarySinkMac))); - DBGLOG(P2P, INFO,("WFD Advanced Flag:%x\n", prParams->WfdAdvanceFlag)); - DBGLOG(P2P, INFO,("WFD Sigma mode:%x\n", prParams->WfdSigmaMode)); - //UINT_8 aucReserved2[64]; - //UINT_8 aucReserved3[64]; - //UINT_8 aucReserved4[64]; - -#endif - - prWfdCfgSettings = &(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - kalMemCopy(&prWfdCfgSettings->u4WfdCmdType, &prParams->WfdCmdType, sizeof(WFD_CFG_SETTINGS_T)); - - prMsgWfdCfgUpdate = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_WFD_CONFIG_SETTINGS_CHANGED_T)); - - if (prMsgWfdCfgUpdate == NULL) { - ASSERT(FALSE); - return status; - } - - prMsgWfdCfgUpdate->rMsgHdr.eMsgId = MID_MNY_P2P_WFD_CFG_UPDATE; - prMsgWfdCfgUpdate->prWfdCfgSettings = prWfdCfgSettings; - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgWfdCfgUpdate, - MSG_SEND_METHOD_BUF); -#if 0 // Test Only -// prWfdCfgSettings->ucWfdEnable = 1; -// prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_DEV_INFO_VALID; - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_DEV_INFO_VALID; - prWfdCfgSettings->u2WfdDevInfo = 123; - prWfdCfgSettings->u2WfdControlPort = 456; - prWfdCfgSettings->u2WfdMaximumTp = 789; - - - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_SINK_INFO_VALID; - prWfdCfgSettings->ucWfdCoupleSinkStatus = 0xAB; - { - UINT_8 aucTestAddr[MAC_ADDR_LEN] = {0x77, 0x66, 0x55, 0x44, 0x33, 0x22}; - COPY_MAC_ADDR(prWfdCfgSettings->aucWfdCoupleSinkAddress, aucTestAddr); - } - - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_EXT_CAPABILITY_VALID; - prWfdCfgSettings->u2WfdExtendCap = 0xCDE; - -#endif - - return status; - -} -#endif /* CFG_SUPPORT_WFD */ - - - -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_hotspot_block_PARAMS prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)NULL; - int fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if(data && len) - prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)data; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd\n")); - - fgIsValid = kalP2PSetBlackList(prGlueInfo, prParams->aucBssid, prParams->ucblocked); - - return fgIsValid; - -} - -#endif - - -#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - -#endif // CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_init.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_init.c deleted file mode 100755 index 8fd89a40f35a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_init.c +++ /dev/null @@ -1,518 +0,0 @@ -/* -** $Id: @(#) gl_p2p_init.c@@ -*/ - -/*! \file gl_p2p_init.c - \brief init and exit routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define P2P_MODE_INF_NAME "p2p%d"; -#define AP_MODE_INF_NAME "ap%d"; -//#define MAX_INF_NAME_LEN 15 -//#define MIN_INF_NAME_LEN 1 - -#define RUNNING_P2P_MODE 0 -#define RUNNING_AP_MODE 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/* Get interface name and running mode from module insertion parameter -* Usage: insmod p2p.ko mode=1 -* default: interface name is p2p%d -* running mode is P2P -*/ -static PUCHAR ifname = P2P_MODE_INF_NAME; -static UINT_16 mode = RUNNING_P2P_MODE; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief check interface name parameter is valid or not -* if invalid, set ifname to P2P_MODE_INF_NAME -* -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pCheckInterfaceName( - VOID - ) -{ - - if(mode) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } -#if 0 - UINT_32 ifLen = 0; - - if(ifname) { - ifLen = strlen(ifname); - - if(ifLen > MAX_INF_NAME_LEN) { - ifname[MAX_INF_NAME_LEN] = '\0'; - } - else if( ifLen < MIN_INF_NAME_LEN ) { - ifname = P2P_MODE_INF_NAME; - } - } else { - ifname = P2P_MODE_INF_NAME; - } -#endif -} - - -extern UINT_8 g_aucBufIpAddr[32]; - -static void wlanP2PEarlySuspend(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - - printk(KERN_INFO "*********p2pEarlySuspend************\n"); - - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pEarlySuspend ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ip is not avaliable.\n"); - return; - } - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - // todo: traverse between list to find whole sets of IPv6 addresses - - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - } - -#endif - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); // TODO: frog. The pointer is not right. - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP); -#endif - } -#ifdef CONFIG_IPV6 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - - -static void wlanP2PLateResume(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - - printk(KERN_INFO "*********wlanP2PLateResume************\n"); - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pLateResume ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ip is not avaliable.\n"); - return; - } - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); -#endif - // <7> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_p2p_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void p2p_early_suspend(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_early_suspend************\n"); - wlanP2PEarlySuspend(); -} - -static void p2p_late_resume(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_late_resume************\n"); - wlanP2PLateResume(); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p init procedure, include register pointer to wlan -* glue register p2p -* set p2p registered flag -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ) -{ - - printk("p2p Launch\n"); - - if(prGlueInfo->prAdapter->fgIsP2PRegistered == TRUE) { - printk("p2p already registered\n"); - return FALSE; - } - else if(glRegisterP2P(prGlueInfo, ifname, (BOOLEAN)mode)) { - prGlueInfo->prAdapter->fgIsP2PRegistered = TRUE; - - printk("Launch success, fgIsP2PRegistered TRUE.\n"); - -#if defined(CONFIG_HAS_EARLYSUSPEND) - /* Here, we register the early suspend and resume callback */ - glRegisterEarlySuspend(&mt6620_p2p_early_suspend_desc, p2p_early_suspend, p2p_late_resume); -#endif - - return TRUE; - } - else { - printk("Launch Fail\n"); - } - - return FALSE; -} - - -VOID -p2pSetMode ( - IN BOOLEAN fgIsAPMOde - ) -{ - if (fgIsAPMOde) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } - else { - mode = RUNNING_P2P_MODE; - ifname = P2P_MODE_INF_NAME; - } - - return; -} /* p2pSetMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p exit procedure, include unregister pointer to wlan -* glue unregister p2p -* set p2p registered flag - -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ) -{ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - printk("p2p is not Registered.\n"); - return FALSE; - } - else { - -#if defined(CONFIG_HAS_EARLYSUSPEND) - glUnregisterEarlySuspend(&mt6620_p2p_early_suspend_desc); -#endif - /*Check p2p fsm is stop or not. If not then stop now*/ - if(IS_P2P_ACTIVE(prGlueInfo->prAdapter)) { - p2pStopImmediate(prGlueInfo); - } - prGlueInfo->prAdapter->fgIsP2PRegistered = FALSE; - glUnregisterP2P(prGlueInfo); - /*p2p is removed successfully*/ - return TRUE; - } - return FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -static int initP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - /*check interface name validation*/ - p2pCheckInterfaceName(); - - printk( KERN_INFO DRV_NAME "InitP2P, Ifname: %s, Mode: %s\n", ifname, mode ? "AP":"P2P"); - - /*register p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(p2pLaunch, p2pRemove, P2P_MODULE); - - /*if wlan is not start yet, do nothing - * p2pLaunch will be called by txthread while wlan start - */ - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModInit(prGlueInfo); - return ( prGlueInfo->prAdapter->fgIsP2PRegistered? 0: -EIO); - } - - return 0; -} /* end of initP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -static VOID __exit exitP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - printk( KERN_INFO DRV_NAME "ExitP2P\n"); - - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModExit(prGlueInfo); - } - /*UNregister p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(NULL, NULL, P2P_MODULE); -} /* end of exitP2P() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_kal.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_kal.c deleted file mode 100755 index 021c362aaf7e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_p2p_kal.c +++ /dev/null @@ -1,1627 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_kal.c - \brief - -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "net/cfg80211.h" -#include "precomp.h" - -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ); - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->eState; -} /* end of kalP2PGetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to update the assoc req to p2p -* -* \param[in] -* prGlueInfo -* pucFrameBody -* u4FrameBodyLen -* fgReassocRequest -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PUpdateAssocInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; - unsigned char *pucDesiredIE = NULL; -// unsigned char aucExtraInfoBuf[200]; - PUINT_8 cp; - - memset(&wrqu, 0, sizeof(wrqu)); - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPSIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPSIE!!\n"); - /* WPS IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0x30, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* RSN IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* WPA IE found */ - } - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVASSOCREQIE, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - if(eState == PARAM_MEDIA_STATE_CONNECTED) { - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_CONNECTED; - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_CONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - } - else if(eState == PARAM_MEDIA_STATE_DISCONNECTED) { - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_DISCONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - } - else { - ASSERT(0); - } - - return; -} /* end of kalP2PSetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->u4FreqInKHz; -} /* end of kalP2PGetFreqInKHz() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->ucRole; -} /* end of kalP2PGetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct role -* -* \param[in] -* prGlueInfo -* ucResult -* 0: successful -* 1: error -* ucRole -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 2); - - memset(&evt, 0, sizeof(evt)); - - if(ucResult == 0) { - prGlueInfo->prP2PInfo->ucRole = ucRole; - } - - if (pucSSID) - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, pucSSID[7], pucSSID[8]); - else - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, '0', '0'); - - evt.data.length = strlen(aucBuffer); - - //if (pucSSID) - // printk("P2P GO SSID DIRECT-%c%c\n", pucSSID[7], pucSSID[8]); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PSetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the cipher for p2p -* -* \param[in] -* prGlueInfo -* u4Cipher -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->u4CipherPairwise = u4Cipher; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the cipher, return for cipher is ccmp -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE: cipher is ccmp -* FALSE: cipher is none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PGetCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -BOOLEAN -kalP2PGetCcmpCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return FALSE; - - return FALSE; -} - - -BOOLEAN -kalP2PGetTkipCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return FALSE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->ucWSCRunning = ucWscMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetWscMode ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - return (prGlueInfo->prP2PInfo->ucWSCRunning); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the wsc ie length -* -* \param[in] -* prGlueInfo -* ucType : 0 for beacon, 1 for probe req, 2 for probe resp -* -* \return -* The WSC IE length -*/ -/*----------------------------------------------------------------------------*/ -UINT_16 -kalP2PCalWSC_IELen ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ) -{ - ASSERT(prGlueInfo); - - ASSERT(ucType < 3); - - return prGlueInfo->prP2PInfo->u2WSCIELen[ucType]; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to copy the wsc ie setting from p2p supplicant -* -* \param[in] -* prGlueInfo -* -* \return -* The WPS IE length -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PGenWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - (pucBuffer == NULL)) { - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(pucBuffer, prGlP2pInfo->aucWSCIE[ucType], prGlP2pInfo->u2WSCIELen[ucType]); - - } while (FALSE); - - return; -} - - -VOID -kalP2PUpdateWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - ((u2BufferLength > 0) && (pucBuffer == NULL))) { - break; - } - - - if (u2BufferLength > 400) { - DBGLOG(P2P, ERROR, ("Buffer length is not enough, GLUE only 400 bytes but %d received\n", u2BufferLength)); - ASSERT(FALSE); - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(prGlP2pInfo->aucWSCIE[ucType], pucBuffer, u2BufferLength); - - prGlP2pInfo->u2WSCIELen[ucType] = u2BufferLength; - - - } while (FALSE); - - return; -} /* kalP2PUpdateWSC_IE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device connection request -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_REQ_DEVICE_INFO access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = u4NameLength > 32 ? 32 : u4NameLength; - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - pucDevName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, rPeerAddr); - prGlueInfo->prP2PInfo->ucConnReqDevType = ucDevType; - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = i4ConfigMethod; - prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod = i4ActiveConfigMethod; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_REQ"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateConnReq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for device connection request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] pucGroupBssid Only valid when invitation Type equals to 0. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationIndication ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ) -{ -#if 1 - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = (UINT_32)((prP2pDevDesc->u2NameLength > 32)? 32 : prP2pDevDesc->u2NameLength); - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - prP2pDevDesc->aucName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, prP2pDevDesc->aucDeviceAddr); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqGroupAddr, pucGroupBssid); - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = (INT_32)(prP2pDevDesc->u2ConfigMethod); - prGlueInfo->prP2PInfo->ucOperatingChnl = ucOperatingChnl; - prGlueInfo->prP2PInfo->ucInvitationType = ucInvitationType; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_INDICATE"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; - -#else - P_MSG_P2P_CONNECTION_REQUEST_T prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prGlueInfo != NULL) && (prP2pDevDesc != NULL)); - - - // Not a real solution - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (prP2pConnReq == NULL) { - break; - } - - - kalMemZero(prP2pConnReq, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - prP2pConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - prP2pConnReq->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - COPY_MAC_ADDR(prP2pConnReq->aucDeviceID, prP2pDevDesc->aucDeviceAddr); - - prP2pConnReq->u2ConfigMethod = prP2pDevDesc->u2ConfigMethod; - - if (ucInvitationType == P2P_INVITATION_TYPE_INVITATION) { - prP2pConnReq->fgIsPersistentGroup = FALSE; - prP2pConnReq->fgIsTobeGO = FALSE; - - } - - else if (ucInvitationType == P2P_INVITATION_TYPE_REINVOKE) { - DBGLOG(P2P, TRACE, ("Re-invoke Persistent Group\n")); - prP2pConnReq->fgIsPersistentGroup = TRUE; - prP2pConnReq->fgIsTobeGO = (prGlueInfo->prP2PInfo->ucRole == 2)?TRUE:FALSE; - - } - - - p2pFsmRunEventDeviceDiscoveryAbort(prGlueInfo->prAdapter, NULL); - - if (ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = ucOperatingChnl; - } - - if ((ucSsidLen < 32) && (pucSsid != NULL)) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - pucSsid, - ucSsidLen); - } - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pConnReq, - MSG_SEND_METHOD_BUF); - - - - } while (FALSE); - - // frog add. - // TODO: Invitation Indication - - return; -#endif - -} /* kalP2PInvitationIndication */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an status to supplicant for device invitation status. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4InvStatus = u4InvStatus; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_STATUS"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* kalP2PInvitationStatus */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_REQ %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery response -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_RESP %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery TX Done -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] ucSeqNum Sequence number of the frame -* \param[in] ucStatus Status code for TX -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_XMITTED: %d %d", ucSeqNum, ucStatus); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - return prGlueInfo->prP2PInfo->prDevHandler; -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSecCheckRsp ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SEC_CHECK_RSP="); - - kalMemCopy(prGlueInfo->prP2PInfo->aucSecCheckRsp, pucRsp, u2RspLen); - evt.data.length = strlen(aucBuffer); - -#if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u2RspLen); -#endif - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; -} /* p2pFsmRunEventRxDisassociation */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} /* kalGetChnlList */ - -//////////////////////////////////////ICS SUPPORT////////////////////////////////////// - -VOID -kalP2PIndicateChannelReady ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ) -{ - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - RF_CHANNEL_INFO_T rChannelInfo; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; - - do { - if (prGlueInfo == NULL) { - break; - } - - - kalMemZero(&rChannelInfo, sizeof(RF_CHANNEL_INFO_T)); - - rChannelInfo.ucChannelNum = u4ChannelNum; - rChannelInfo.eBand = eBand; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueInfo->prP2PInfo, &rChannelInfo); - - kalP2pFuncGetChannelType(eSco, &eChnlType); - - cfg80211_ready_on_channel(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - u8SeqNum, //u64 cookie, - prIEEE80211ChnlStruct, //struct ieee80211_channel * chan, - eChnlType, //enum nl80211_channel_type channel_type, - u4Duration, //unsigned int duration, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - - } while (FALSE); - -} /* kalP2PIndicateChannelReady */ - -VOID -kalP2PIndicateChannelExpired ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; - RF_CHANNEL_INFO_T rRfChannelInfo; - - do { - if ((prGlueInfo == NULL) || (prChnlReqInfo == NULL)) { - - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - DBGLOG(P2P, TRACE, ("kalP2PIndicateChannelExpired\n")); - - rRfChannelInfo.eBand = prChnlReqInfo->eBand; - rRfChannelInfo.ucChannelNum = prChnlReqInfo->ucReqChnlNum; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueP2pInfo, &rRfChannelInfo); - - - kalP2pFuncGetChannelType(prChnlReqInfo->eChnlSco, - &eChnlType); - - - cfg80211_remain_on_channel_expired(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prChnlReqInfo->u8Cookie, - prIEEE80211ChnlStruct, - eChnlType, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateChannelExpired */ - -VOID -kalP2PIndicateScanDone ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if (prGlueInfo == NULL) { - - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - if (prGlueP2pInfo->prScanRequest) { - cfg80211_scan_done(prGlueP2pInfo->prScanRequest, - fgIsAbort); - - prGlueP2pInfo->prScanRequest = NULL; - } - - } while (FALSE); - - -} /* kalP2PIndicateScanDone */ - -VOID -kalP2PIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prChannelEntry = (struct ieee80211_channel *)NULL; - struct ieee80211_mgmt *prBcnProbeRspFrame = (struct ieee80211_mgmt *)pucFrameBuf; - struct cfg80211_bss *prCfg80211Bss = (struct cfg80211_bss *)NULL; - - do { - if ((prGlueInfo == NULL) || (pucFrameBuf == NULL) || (prChannelInfo == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prChannelEntry = kalP2pFuncGetChannelEntry(prGlueP2pInfo, prChannelInfo); - - if (prChannelEntry == NULL) { - DBGLOG(P2P, TRACE, ("Unknown channel info\n")); - break; - } - - - //rChannelInfo.center_freq = nicChannelNum2Freq((UINT_32)prChannelInfo->ucChannelNum) / 1000; - - prCfg80211Bss = cfg80211_inform_bss_frame(prGlueP2pInfo->wdev.wiphy, //struct wiphy * wiphy, - prChannelEntry, - prBcnProbeRspFrame, - u4BufLen, - i4SignalStrength, - GFP_KERNEL); - - - /* Return this structure. */ - cfg80211_put_bss(prCfg80211Bss); - - } while (FALSE); - - return; - -} /* kalP2PIndicateBssInfo */ - -VOID -kalP2PIndicateMgmtTxStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (pucFrameBuf == NULL) || - (u4FrameLen == 0)) { - DBGLOG(P2P, TRACE, ("Unexpected pointer PARAM. 0x%lx, 0x%lx, %ld.", prGlueInfo, pucFrameBuf, u4FrameLen)); - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - cfg80211_mgmt_tx_status(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u8Cookie, - pucFrameBuf, - u4FrameLen, - fgIsAck, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateMgmtTxStatus */ - -VOID -kalP2PIndicateRxMgmtFrame ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ) -{ -#define DBG_P2P_MGMT_FRAME_INDICATION 0 - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Freq = 0; - UINT_8 ucChnlNum = 0; -#if DBG_P2P_MGMT_FRAME_INDICATION - P_WLAN_MAC_HEADER_T prWlanHeader = (P_WLAN_MAC_HEADER_T)NULL; -#endif - - - do { - if ((prGlueInfo == NULL) || (prSwRfb == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - ucChnlNum = prSwRfb->prHifRxHdr->ucHwChannelNum; - -#if DBG_P2P_MGMT_FRAME_INDICATION - - prWlanHeader = (P_WLAN_MAC_HEADER_T)prSwRfb->pvHeader; - - switch (prWlanHeader->u2FrameCtrl) { - case MAC_FRAME_PROBE_REQ: - DBGLOG(P2P, TRACE, ("RX Probe Req at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_PROBE_RSP: - DBGLOG(P2P, TRACE, ("RX Probe Rsp at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_ACTION: - DBGLOG(P2P, TRACE, ("RX Action frame at channel %d ", ucChnlNum)); - break; - default: - DBGLOG(P2P, TRACE, ("RX Packet:%d at channel %d ", prWlanHeader->u2FrameCtrl, ucChnlNum)); - break; - } - - DBGLOG(P2P, TRACE, ("from: "MACSTR"\n", MAC2STR(prWlanHeader->aucAddr2))); -#endif - i4Freq = nicChannelNum2Freq(ucChnlNum) / 1000; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - RCPI_TO_dBm(prSwRfb->prHifRxHdr->ucRcpi), - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_KERNEL); -#else - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_KERNEL); -#endif - - } while (FALSE); - -} /* kalP2PIndicateRxMgmtFrame */ - -VOID -kalP2PGCIndicateConnectionStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if (prGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prP2pConnInfo) { - cfg80211_connect_result(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prP2pConnInfo->aucBssid, - prP2pConnInfo->aucIEBuf, - prP2pConnInfo->u4BufLength, - pucRxIEBuf, - u2RxIELen, - u2StatusReason, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - prP2pConnInfo->fgIsConnRequest = FALSE; - } - else { - /* Disconnect, what if u2StatusReason == 0? */ - cfg80211_disconnected(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u2StatusReason, - pucRxIEBuf, - u2RxIELen, - GFP_KERNEL); - } - - - - } while (FALSE); - - -} /* kalP2PGCIndicateConnectionStatus */ - - -VOID -kalP2PGOStationUpdate ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ) -{ - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - struct station_info rStationInfo; - - do { - if ((prGlueInfo == NULL) || (prCliStaRec == NULL)) { - break; - } - - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (fgIsNew) { - rStationInfo.filled = STATION_INFO_ASSOC_REQ_IES; - rStationInfo.generation = ++prP2pGlueInfo->i4Generation; - - rStationInfo.assoc_req_ies = prCliStaRec->pucAssocReqIe; - rStationInfo.assoc_req_ies_len = prCliStaRec->u2AssocReqIeLen; -// rStationInfo.filled |= STATION_INFO_ASSOC_REQ_IES; - - cfg80211_new_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - &rStationInfo, - GFP_KERNEL); - } - else { - ++prP2pGlueInfo->i4Generation; - - cfg80211_del_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - GFP_KERNEL); - } - - - } while (FALSE); - - return; - -} /* kalP2PGOStationUpdate */ - - - - -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel_type) { - - switch (rChnlSco) { - case CHNL_EXT_SCN: - *channel_type = NL80211_CHAN_NO_HT; - break; - case CHNL_EXT_SCA: - *channel_type = NL80211_CHAN_HT40MINUS; - break; - case CHNL_EXT_SCB: - *channel_type = NL80211_CHAN_HT40PLUS; - break; - default: - ASSERT(FALSE); - *channel_type = NL80211_CHAN_NO_HT; - break; - } - - } - - fgIsValid = TRUE; - } while (FALSE); - - return fgIsValid; -} /* kalP2pFuncGetChannelType */ - - - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry ( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ) -{ - struct ieee80211_channel *prTargetChannelEntry = (struct ieee80211_channel *)NULL; - UINT_32 u4TblSize = 0, u4Idx = 0; - - do { - if ((prP2pInfo == NULL) || (prChannelInfo == NULL)) { - break; - } - - - switch (prChannelInfo->eBand) { - case BAND_2G4: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->n_channels; - break; - case BAND_5G: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels; - break; - default: - break; - } - - - if (prTargetChannelEntry == NULL) { - break; - } - - - - for (u4Idx = 0; u4Idx < u4TblSize; u4Idx++, prTargetChannelEntry++) { - if (prTargetChannelEntry->hw_value == prChannelInfo->ucChannelNum) { - break; - } - - } - - - if (u4Idx == u4TblSize) { - prTargetChannelEntry = NULL; - break; - } - - - } while (FALSE); - - return prTargetChannelEntry; -} /* kalP2pFuncGetChannelEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the block list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsValid = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(fgIsblock) { - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)) { - if(UNEQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - if(EQUAL_MAC_ADDR (&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - } - } - else { - for(i = 0; i < 8; i++) { - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - - return fgIsValid; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to compare the black list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsExsit = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)){ - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - fgIsExsit = TRUE; - return fgIsExsit; - } - } - } - - return fgIsExsit; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(u4MaxClient == 0 || prGlueInfo->prP2PInfo->ucMaxClients >= P2P_MAXIMUM_CLIENT_COUNT) - prGlueInfo->prP2PInfo->ucMaxClients = P2P_MAXIMUM_CLIENT_COUNT; - else - prGlueInfo->prP2PInfo->ucMaxClients = u4MaxClient; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(prGlueInfo->prP2PInfo->ucMaxClients) { - if((UINT_8)u4NumClient > prGlueInfo->prP2PInfo->ucMaxClients) - return TRUE; - else - return FALSE; - } - - return FALSE; -} diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_proc.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_proc.c deleted file mode 100755 index 3e53176c8991..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_proc.c +++ /dev/null @@ -1,811 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_proc.c#1 $ -*/ - -/*! \file "gl_proc.c" - \brief This file defines the interface which can interact with users in /proc fs. - - Detail description. -*/ - - - -/* -** $Log: gl_proc.c $ - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support -** \main\maintrunk.MT5921\19 2008-09-02 21:08:37 GMT mtk01461 -** Fix the compile error of SPRINTF() -** \main\maintrunk.MT5921\18 2008-08-10 18:48:28 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\17 2008-08-04 16:52:01 GMT mtk01461 -** Add proc dbg print message of DOMAIN_INDEX level -** \main\maintrunk.MT5921\16 2008-07-10 00:45:16 GMT mtk01461 -** Remove the check of MCR offset, we may use the MCR address which is not align to DW boundary or proprietary usage. -** \main\maintrunk.MT5921\15 2008-06-03 20:49:44 GMT mtk01461 -** \main\maintrunk.MT5921\14 2008-06-02 22:56:00 GMT mtk01461 -** Rename some functions for linux proc -** \main\maintrunk.MT5921\13 2008-06-02 20:23:18 GMT mtk01461 -** Revise PROC mcr read / write for supporting TELNET -** \main\maintrunk.MT5921\12 2008-03-28 10:40:25 GMT mtk01461 -** Remove temporary set desired rate in linux proc -** \main\maintrunk.MT5921\11 2008-01-07 15:07:29 GMT mtk01461 -** Add User Update Desired Rate Set for QA in Linux -** \main\maintrunk.MT5921\10 2007-12-11 00:11:14 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\9 2007-12-04 18:07:57 GMT mtk01461 -** Add additional debug category to proc -** \main\maintrunk.MT5921\8 2007-11-02 01:03:23 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\7 2007-10-25 18:08:14 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.3 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.2 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_kal.h" - -#include "wlan_lib.h" -#include "debug.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PROC_MCR_ACCESS "mcr" -#define PROC_DRV_STATUS "status" -#define PROC_RX_STATISTICS "rx_statistics" -#define PROC_TX_STATISTICS "tx_statistics" -#define PROC_DBG_LEVEL "dbg_level" - -#define PROC_MCR_ACCESS_MAX_USER_INPUT_LEN 20 -#define PROC_RX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_TX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_DBG_LEVEL_MAX_USER_INPUT_LEN 20 -#define PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN 30 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 u4McrOffset = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading MCR register to User Space, the offset of -* the MCR is specified in u4McrOffset. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - char *p = page; - UINT_32 u4Count; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - rMcrInfo.u4McrOffset = u4McrOffset; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryMcrRead, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - - - SPRINTF(p, ("MCR (0x%08lxh): 0x%08lx\n", - rMcrInfo.u4McrOffset, rMcrInfo.u4McrData)); - - u4Count = (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procMCRRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for writing MCR register to HW or update u4McrOffset -* for reading MCR later. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - char acBuf[PROC_MCR_ACCESS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - int i4CopySize; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - i4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - if (copy_from_user(acBuf, buffer, i4CopySize)) { - return 0; - } - acBuf[i4CopySize] = '\0'; - - switch (sscanf(acBuf, "0x%lx 0x%lx", - &rMcrInfo.u4McrOffset, &rMcrInfo.u4McrData)) { - case 2: - /* NOTE: Sometimes we want to test if bus will still be ok, after accessing - * the MCR which is not align to DW boundary. - */ - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - u4McrOffset = rMcrInfo.u4McrOffset; - - //printk("Write 0x%lx to MCR 0x%04lx\n", - //rMcrInfo.u4McrOffset, rMcrInfo.u4McrData); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetMcrWrite, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - } - break; - - case 1: - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - u4McrOffset = rMcrInfo.u4McrOffset; - } - break; - - default: - break; - } - - return count; - -} /* end of procMCRWrite() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver Status to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDrvStatusRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("GLUE LAYER STATUS:")); - SPRINTF(p, ("\n==================")); - - SPRINTF(p, ("\n* Number of Pending Frames: %ld\n", - prGlueInfo->u4TxPendingFrameNum)); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryDrvStatusForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procDrvStatusRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver RX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("RX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryRxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procRxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver RX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetRxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procRxStatisticsWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver TX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("TX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryTxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procTxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver TX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetTxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procTxStatisticsWrite() */ -#endif - - -#if DBG -static UINT_8 aucDbModuleName[][PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN] = { - "DBG_INIT_IDX", - "DBG_HAL_IDX", - "DBG_INTR_IDX", - "DBG_REQ_IDX", - "DBG_TX_IDX", - "DBG_RX_IDX", - "DBG_RFTEST_IDX", - "DBG_EMU_IDX", - "DBG_SW1_IDX", - "DBG_SW2_IDX", - "DBG_SW3_IDX", - "DBG_SW4_IDX", - "DBG_HEM_IDX", - "DBG_AIS_IDX", - "DBG_RLM_IDX", - "DBG_MEM_IDX", - "DBG_CNM_IDX", - "DBG_RSN_IDX", - "DBG_BSS_IDX", - "DBG_SCN_IDX", - "DBG_SAA_IDX", - "DBG_AAA_IDX", - "DBG_P2P_IDX", - "DBG_QM_IDX", - "DBG_SEC_IDX", - "DBG_BOW_IDX" - }; - -extern UINT_8 aucDebugModule[]; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for displaying current Debug Level. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - char *p = page; - int i; - - - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - for (i = 0; i < (sizeof(aucDbModuleName)/PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN); i++) { - SPRINTF(p, ("%c %-15s(0x%02x): %02x\n", - ((i == u4DebugModule) ? '*' : ' '), - &aucDbModuleName[i][0], - i, - aucDebugModule[i])); - } - - *eof = 1; - return (int)(p - page); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for adjusting Debug Level to turn on/off debugging message. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - char acBuf[PROC_DBG_LEVEL_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4NewDbgModule, u4NewDbgLevel; - - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "0x%lx 0x%lx", &u4NewDbgModule, &u4NewDbgLevel) == 2) { - if (u4NewDbgModule < DBG_MODULE_NUM) { - u4DebugModule = u4NewDbgModule; - u4NewDbgLevel &= DBG_CLASS_MASK; - aucDebugModule[u4DebugModule] = (UINT_8)u4NewDbgLevel; - } - } - - return count; -} -#endif /* DBG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function create a PROC fs in linux /proc/net subdirectory. -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo; - struct proc_dir_entry *prEntry; - - - ASSERT(prDev); - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, INFO, ("init proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("The OS context is NULL\n")); - return -ENOENT; - } - - - /* - /proc/net/wlan0 - |-- mcr (PROC_MCR_ACCESS) - |-- status (PROC_DRV_STATUS) - |-- rx_statistics (PROC_RX_STATISTICS) - |-- tx_statistics (PROC_TX_STATISTICS) - |-- dbg_level (PROC_DBG_LEVEL) - |-- (end) - */ - - /* - * Directory: Root (/proc/net/wlan0) - */ - - prGlueInfo->pProcRoot = proc_mkdir(pucDevName, init_net.proc_net); - if (prGlueInfo->pProcRoot == NULL) { - return -ENOENT; - } - - /* File Root/mcr (RW) */ - prEntry = create_proc_entry(PROC_MCR_ACCESS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procMCRRead; - prEntry->write_proc = procMCRWrite; - prEntry->data = (void *)prDev; - } - -#if 0 - /* File Root/status (RW) */ - prEntry = create_proc_read_entry(PROC_DRV_STATUS, 0, prGlueInfo->pProcRoot, - procDrvStatusRead, prDev); - - /* File Root/rx_statistics (RW) */ - prEntry = create_proc_entry(PROC_RX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procRxStatisticsRead; - prEntry->write_proc = procRxStatisticsWrite; - prEntry->data = (void *)prDev; - } - - /* File Root/tx_statistics (RW) */ - prEntry = create_proc_entry(PROC_TX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procTxStatisticsRead; - prEntry->write_proc = procTxStatisticsWrite; - prEntry->data = (void *)prDev; - } - -#if DBG - /* File Root/dbg_level (RW) */ - prEntry = create_proc_entry(PROC_DBG_LEVEL, 0644, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procDbgLevelRead; - prEntry->write_proc = procDbgLevelWrite; - } -#endif /* DBG */ -#endif - return 0; - -} /* end of procInitProcfs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clean up a PROC fs created by procInitProcfs(). -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - - ASSERT(prDev); - - if (!prDev) { - return -ENOENT; - } - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, WARN, ("remove proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (!prGlueInfo->pProcRoot) { - DBGLOG(INIT, WARN, ("The procfs root is NULL\n")); - return -ENOENT; - } -#if 0 -#if DBG - remove_proc_entry(PROC_DBG_LEVEL, prGlueInfo->pProcRoot); -#endif /* DBG */ - remove_proc_entry(PROC_TX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_RX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_DRV_STATUS, prGlueInfo->pProcRoot); -#endif - remove_proc_entry(PROC_MCR_ACCESS, prGlueInfo->pProcRoot); - - /* remove root directory (proc/net/wlan0) */ - remove_proc_entry(pucDevName, init_net.proc_net); - - return 0; - -} /* end of procRemoveProcfs() */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_rst.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_rst.c deleted file mode 100755 index eadc2c610cc6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_rst.c +++ /dev/null @@ -1,473 +0,0 @@ -/* -** $Id: @(#) gl_rst.c@@ -*/ - -/*! \file gl_rst.c - \brief Main routines for supporintg MT6620 whole-chip reset mechanism - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_rst.c $ - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 03 30 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * use netlink unicast instead of broadcast - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include -#include - -#if CFG_CHIP_RESET_SUPPORT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_BIND_PROCESS (4) - -#define MTK_WIFI_FAMILY_NAME "MTK_WIFI" -#define MTK_WIFI_RESET_START_NAME "RESET_START" -#define MTK_WIFI_RESET_END_NAME "RESET_END" -#define MTK_WIFI_RESET_TEST_NAME "GENETLINK_START" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -enum { - __MTK_WIFI_ATTR_INVALID, - MTK_WIFI_ATTR_MSG, - __MTK_WIFI_ATTR_MAX, -}; -#define MTK_WIFI_ATTR_MAX (__MTK_WIFI_ATTR_MAX - 1) - - -enum { - __MTK_WIFI_COMMAND_INVALID, - MTK_WIFI_COMMAND_BIND, - MTK_WIFI_COMMAND_RESET, - __MTK_WIFI_COMMAND_MAX, -}; -#define MTK_WIFI_COMMAND_MAX (__MTK_WIFI_COMMAND_MAX - 1) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/BOOLEAN fgIsResetting = FALSE; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 mtk_wifi_seqnum = 0; -static int num_bind_process = 0; -static pid_t bind_pid[MAX_BIND_PROCESS]; - - -/* attribute policy */ -static struct nla_policy mtk_wifi_genl_policy[MTK_WIFI_ATTR_MAX + 1] = { - [MTK_WIFI_ATTR_MSG] = { .type = NLA_NUL_STRING }, -}; - -/* family definition */ -static struct genl_family mtk_wifi_gnl_family = { - .id = GENL_ID_GENERATE, - .hdrsize = 0, - .name = MTK_WIFI_FAMILY_NAME, - .version = 1, - .maxattr = MTK_WIFI_ATTR_MAX, -}; - -/* forward declaration */ -static int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ); - -static int mtk_wifi_reset( - struct sk_buff *skb, - struct genl_info *info - ); - -/* operation definition */ -static struct genl_ops mtk_wifi_gnl_ops_bind = { - .cmd = MTK_WIFI_COMMAND_BIND, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_bind, - .dumpit = NULL, -}; - -static struct genl_ops mtk_wifi_gnl_ops_reset = { - .cmd = MTK_WIFI_COMMAND_RESET, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_reset, - .dumpit = NULL, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -extern int -mtk_wcn_wmt_msgcb_reg( - ENUM_WMTDRV_TYPE_T eType, - PF_WMT_CB pCb); - -extern int -mtk_wcn_wmt_msgcb_unreg( - ENUM_WMTDRV_TYPE_T eType - ); - -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ); - -static BOOLEAN -glResetSendMessage ( - char *aucMsg, - u8 cmd - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. registering for reset callbacks - * 2. initialize netlink socket - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ) -{ - /* 1. register for reset callback */ - mtk_wcn_wmt_msgcb_reg(WMTDRV_TYPE_WIFI, (PF_WMT_CB)glResetCallback); - - /* 2.1 registration for NETLINK_GENERIC family */ - if(genl_register_family(&mtk_wifi_gnl_family) != 0) { - DBGLOG(INIT, WARN, ("%s(): GE_NELINK family registration fail\n", __func__)); - } - else { - /* 2.2 operation registration */ - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_bind) != 0) { - DBGLOG(INIT, WARN, ("%s(): BIND operation registration fail\n", __func__)); - } - - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_reset) != 0) { - DBGLOG(INIT, WARN, ("%s(): RESET operation registration fail\n", __func__)); - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. uninitialize netlink socket - * 2. deregistering for reset callbacks - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetUninit( - VOID - ) -{ - /* 1. release NETLINK_GENERIC family */ - genl_unregister_family(&mtk_wifi_gnl_family); - - /* 2. deregister for reset callback */ - mtk_wcn_wmt_msgcb_unreg(WMTDRV_TYPE_WIFI); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is invoked when there is reset messages indicated - * - * @param eSrcType - * eDstType - * eMsgType - * prMsgBody - * u4MsgLength - * - * @retval - */ -/*----------------------------------------------------------------------------*/ -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ) -{ - switch(eMsgType) { - case WMTMSG_TYPE_RESET: - if(u4MsgLength == sizeof(ENUM_WMTRSTMSG_TYPE_T)) { - P_ENUM_WMTRSTMSG_TYPE_T prRstMsg = (P_ENUM_WMTRSTMSG_TYPE_T) prMsgBody; - - switch(*prRstMsg) { - case WMTRSTMSG_RESET_START: - fgIsResetting = TRUE; - glResetSendMessage(MTK_WIFI_RESET_START_NAME, MTK_WIFI_COMMAND_RESET); - break; - - case WMTRSTMSG_RESET_END: - glResetSendMessage(MTK_WIFI_RESET_END_NAME, MTK_WIFI_COMMAND_RESET); - fgIsResetting = FALSE; - break; - - default: - break; - } - } - - break; - - default: - break; - } - - return NULL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine send out message via netlink socket - * - * @param aucMsg - * u4MsgLength - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -glResetSendMessage( - char * aucMsg, - u8 cmd - ) -{ - struct sk_buff *skb = NULL; - void *msg_head = NULL; - int rc = -1; - int i; - - if(num_bind_process == 0) { - /* no listening process */ - return FALSE; - } - - for(i = 0 ; i < num_bind_process ; i++) { - skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); - - if(skb) { - msg_head = genlmsg_put(skb, 0, mtk_wifi_seqnum++, &mtk_wifi_gnl_family, 0, cmd); - - if(msg_head == NULL) { - nlmsg_free(skb); - return FALSE; - } - - rc = nla_put_string(skb, MTK_WIFI_ATTR_MSG, aucMsg); - if(rc != 0) { - nlmsg_free(skb); - return FALSE; - } - - /* finalize the message */ - genlmsg_end(skb, msg_head); - - /* sending message */ - rc = genlmsg_unicast(&init_net, skb, bind_pid[i]); - if(rc != 0) { - return FALSE; - } - } - else { - return FALSE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called to identify PID for process binding - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ) -{ - struct nlattr *na; - char * mydata; - - if (info == NULL) { - goto out; - } - - /*for each attribute there is an index in info->attrs which points to a nlattr structure - *in this structure the data is given - */ - - na = info->attrs[MTK_WIFI_ATTR_MSG]; - if (na) { - mydata = (char *)nla_data(na); - - /* no need to parse mydata */ - } - - /* collect PID */ - if(num_bind_process < MAX_BIND_PROCESS) { - bind_pid[num_bind_process] = info->snd_pid; - num_bind_process++; - } - else { - DBGLOG(INIT, WARN, ("%s(): exceeding binding limit %d\n", __func__, MAX_BIND_PROCESS)); - } - -out: - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for reset, shout not happen - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_reset( - struct sk_buff *skb, - struct genl_info *info - ) -{ - DBGLOG(INIT, WARN, ("%s(): should not be invoked\n", __func__)); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for generating reset request to WMT - * - * @param None - * - * @retval None - */ -/*----------------------------------------------------------------------------*/ -VOID -glSendResetRequest( - VOID - ) -{ - // WMT thread would trigger whole chip resetting itself - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for checking if MT6620 is resetting - * - * @param None - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsResetting( - VOID - ) -{ - return fgIsResetting; -} - - -#endif // CFG_CHIP_RESET_SUPPORT diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_wext.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_wext.c deleted file mode 100755 index e4c1314f7eb6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_wext.c +++ /dev/null @@ -1,4529 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_wext.c#3 $ -*/ - -/*! \file gl_wext.c - \brief ioctl() (mostly Linux Wireless Extensions) routines for STA driver. -*/ - - - -/* -** $Log: gl_wext.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 tsaiyuan.hsu - * [WCXRP00000979] [MT6620 Wi-Fi][DRV]] stop attempting to connect to config AP after D3 state - * avoid entering D3 state after deep sleep. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 wh.su - * [WCXRP00000877] [MT6620 Wi-Fi][Driver] Remove the netif_carry_ok check for avoid the wpa_supplicant fail to query the ap address - * Remove the netif check while query bssid and ssid - * - * 07 26 2011 chinglan.wang - * NULL - * [MT6620][WiFi Driver] Do not include the WSC IE in the association info packet when not do the wps connection.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 17 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Initilize the vairlabes. - * - * 05 11 2011 jeffrey.chang - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * modify set_tx_pow ioctl - * - * 03 29 2011 terry.wu - * [WCXRP00000610] [MT 6620 Wi-Fi][Driver] Fix klocwork waring - * [MT6620 Wi-Fi][Driver] Fix klocwork warning. Add Null pointer check on wext_get_essid. Limit the upper bound of essid storage array. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 21 2011 wh.su - * [WCXRP00000483] [MT6620 Wi-Fi][Driver] Check the kalIoctl return value before doing the memory copy at linux get essid - * fixed the potential error to do a larget memory copy while wlanoid get essid not actually running. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 01 29 2011 wh.su - * [WCXRP00000408] [MT6620 Wi-Fi][Driver] Not doing memory alloc while ioctl set ie with length 0 - * not doing mem alloc. while set ie length already 0 - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Remove debug text. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous types - * to ease slab system pressure - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Allow change PS profile function (throught wext_set_power()). - * - * 12 14 2010 jeffrey.chang - * [WCXRP00000262] [MT6620 Wi-Fi][Driver] modify the scan request ioctl to handle hidden SSID - * handle hidden SSID - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * Fix compiling error - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000121] [MT6620 Wi-Fi][Driver] Temporarily disable set power mode ioctl which may cause 6620 to enter power saving - * Temporarily disable set power mode ioctl which may cause MT6620 to enter power saving - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 01 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * add the scan result with wapi ie. - * - * 09 30 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed the wapi ie assigned issue. - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 02 2010 jeffrey.chang - * NULL - * enable remove key ioctl - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) enable encyption ioctls - * 2) temporarily disable remove keys ioctl to prevent TX1 busy - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove unused macro and debug messages - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassoication support for wpa supplicant - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * * 2) fix ioctl - * - * 04 12 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug messages for pre-release - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * are done in adapter layer. - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl type - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * enable pmksa cache operation - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\38 2009-10-08 10:33:22 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\37 2009-09-29 16:49:48 GMT mtk01090 -** Remove unused variables -** \main\maintrunk.MT5921\36 2009-09-28 20:19:11 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\35 2009-09-03 11:42:30 GMT mtk01088 -** adding the wapi ioctl support -** \main\maintrunk.MT5921\34 2009-08-18 22:56:50 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\33 2009-05-14 22:43:47 GMT mtk01089 -** fix compiling warning -** \main\maintrunk.MT5921\32 2009-05-07 22:26:18 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\31 2009-02-07 15:11:14 GMT mtk01088 -** fixed the compiling error -** \main\maintrunk.MT5921\30 2009-02-07 14:46:51 GMT mtk01088 -** add the privacy setting from linux supplicant ap selection -** \main\maintrunk.MT5921\29 2008-11-19 15:18:50 GMT mtk01088 -** fixed the compling error -** \main\maintrunk.MT5921\28 2008-11-19 11:56:18 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\27 2008-08-29 16:59:43 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\26 2008-08-29 14:55:53 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\25 2008-06-02 11:15:19 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\24 2008-05-30 15:13:12 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\23 2008-03-28 10:40:28 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\22 2008-03-18 10:31:24 GMT mtk01088 -** add pmkid ioctl and indicate -** \main\maintrunk.MT5921\21 2008-03-11 15:21:24 GMT mtk01461 -** \main\maintrunk.MT5921\20 2008-03-11 14:50:55 GMT mtk01461 -** Refine WPS related priv ioctl for unified interface -** -** \main\maintrunk.MT5921\19 2008-03-06 16:30:41 GMT mtk01088 -** move the configuration code from set essid function, -** remove the non-used code -** \main\maintrunk.MT5921\18 2008-02-21 15:47:09 GMT mtk01461 -** Fix CR[489] -** \main\maintrunk.MT5921\17 2008-02-12 23:38:31 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\16 2008-01-24 12:07:34 GMT mtk01461 -** \main\maintrunk.MT5921\15 2008-01-24 12:00:10 GMT mtk01461 -** Modify the wext_essid for set up correct information for IBSS, and fix the wrong input ptr for prAdapter -** \main\maintrunk.MT5921\14 2007-12-06 09:30:12 GMT mtk01425 -** 1. Branch Test -** \main\maintrunk.MT5921\13 2007-12-04 18:07:59 GMT mtk01461 -** fix typo -** \main\maintrunk.MT5921\12 2007-11-30 17:10:21 GMT mtk01425 -** 1. Fix compiling erros -** -** \main\maintrunk.MT5921\11 2007-11-27 10:43:22 GMT mtk01425 -** 1. Add WMM-PS setting -** \main\maintrunk.MT5921\10 2007-11-06 20:33:32 GMT mtk01088 -** fixed the compiler error -** \main\maintrunk.MT5921\9 2007-11-06 19:33:15 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\8 2007-10-30 12:00:44 GMT MTK01425 -** 1. Update wlanQueryInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#include "config.h" -#include "wlan_oid.h" - -#include "gl_wext.h" -#include "gl_wext_priv.h" - -#include "precomp.h" - -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif - -/* compatibility to wireless extensions */ -#ifdef WIRELESS_EXT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const long channel_freq[] = { - 2412, 2417, 2422, 2427, 2432, 2437, 2442, - 2447, 2452, 2457, 2462, 2467, 2472, 2484 -}; - -#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \ - switch (ch) \ - { \ - case 1: khz = 2412000; break; \ - case 2: khz = 2417000; break; \ - case 3: khz = 2422000; break; \ - case 4: khz = 2427000; break; \ - case 5: khz = 2432000; break; \ - case 6: khz = 2437000; break; \ - case 7: khz = 2442000; break; \ - case 8: khz = 2447000; break; \ - case 9: khz = 2452000; break; \ - case 10: khz = 2457000; break; \ - case 11: khz = 2462000; break; \ - case 12: khz = 2467000; break; \ - case 13: khz = 2472000; break; \ - case 14: khz = 2484000; break; \ - case 36: /* UNII */ khz = 5180000; break; \ - case 40: /* UNII */ khz = 5200000; break; \ - case 44: /* UNII */ khz = 5220000; break; \ - case 48: /* UNII */ khz = 5240000; break; \ - case 52: /* UNII */ khz = 5260000; break; \ - case 56: /* UNII */ khz = 5280000; break; \ - case 60: /* UNII */ khz = 5300000; break; \ - case 64: /* UNII */ khz = 5320000; break; \ - case 149: /* UNII */ khz = 5745000; break; \ - case 153: /* UNII */ khz = 5765000; break; \ - case 157: /* UNII */ khz = 5785000; break; \ - case 161: /* UNII */ khz = 5805000; break; \ - case 165: /* UNII */ khz = 5825000; break; \ - case 100: /* HiperLAN2 */ khz = 5500000; break; \ - case 104: /* HiperLAN2 */ khz = 5520000; break; \ - case 108: /* HiperLAN2 */ khz = 5540000; break; \ - case 112: /* HiperLAN2 */ khz = 5560000; break; \ - case 116: /* HiperLAN2 */ khz = 5580000; break; \ - case 120: /* HiperLAN2 */ khz = 5600000; break; \ - case 124: /* HiperLAN2 */ khz = 5620000; break; \ - case 128: /* HiperLAN2 */ khz = 5640000; break; \ - case 132: /* HiperLAN2 */ khz = 5660000; break; \ - case 136: /* HiperLAN2 */ khz = 5680000; break; \ - case 140: /* HiperLAN2 */ khz = 5700000; break; \ - case 34: /* Japan MMAC */ khz = 5170000; break; \ - case 38: /* Japan MMAC */ khz = 5190000; break; \ - case 42: /* Japan MMAC */ khz = 5210000; break; \ - case 46: /* Japan MMAC */ khz = 5230000; break; \ - case 184: /* Japan */ khz = 4920000; break; \ - case 188: /* Japan */ khz = 4940000; break; \ - case 192: /* Japan */ khz = 4960000; break; \ - case 196: /* Japan */ khz = 4980000; break; \ - case 208: /* Japan, means J08 */ khz = 5040000; break; \ - case 212: /* Japan, means J12 */ khz = 5060000; break; \ - case 216: /* Japan, means J16 */ khz = 5080000; break; \ - default: khz = 2412000; break; \ - } \ - } - - -#define NUM_CHANNELS (sizeof(channel_freq) / sizeof(channel_freq[0])) - -#define MAX_SSID_LEN 32 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -/* NOTE: name in iwpriv_args only have 16 bytes */ -static const struct iw_priv_args rIwPrivTable[] = { - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, ""}, - - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - - {IOCTL_SET_INTS, IW_PRIV_TYPE_INT | 4, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | 50, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_CHAR | 16, ""}, - - /* added for set_oid and get_oid */ - {IOCTL_SET_STRUCT, 256, 0, ""}, - {IOCTL_GET_STRUCT, 0, 256, ""}, - - /* sub-ioctl definitions */ -#if 0 - {PRIV_CMD_REG_DOMAIN, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_reg_domain" }, - {PRIV_CMD_REG_DOMAIN, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_reg_domain" }, -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - {PRIV_CMD_CSUM_OFFLOAD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_tcp_csum" }, -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - {PRIV_CMD_POWER_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_power_mode" }, - {PRIV_CMD_POWER_MODE, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_power_mode" }, - - {PRIV_CMD_WMM_PS, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "set_wmm_ps" }, - - {PRIV_CMD_TEST_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_test_mode" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_test_cmd" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_test_result" }, -#if CFG_SUPPORT_PRIV_MCR_RW - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_mcr" }, - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mcr" }, -#endif - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_sw_ctrl" }, - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_sw_ctrl" }, - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_bwcs"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_bwcs"}, -#endif - - /* SET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 256, 0, "set_oid"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 0, 256, "get_oid"}, - - {PRIV_CMD_BAND_CONFIG, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_band" }, - {PRIV_CMD_BAND_CONFIG, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_band" }, - - {PRIV_CMD_SET_TX_POWER, IW_PRIV_TYPE_INT | 4, 0, "set_txpower" }, - {PRIV_CMD_GET_CH_LIST, 0, IW_PRIV_TYPE_INT | 50, "get_ch_list" }, - {PRIV_CMD_DUMP_MEM, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mem" }, - -#if CFG_ENABLE_WIFI_DIRECT - {PRIV_CMD_P2P_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_p2p_mode" }, -#endif - {PRIV_CMD_GET_BUILD_DATE_CODE, 0, IW_PRIV_TYPE_CHAR | 16, "get_date_code" }, -}; - -static const iw_handler rIwPrivHandler[] = { - [IOCTL_SET_INT - SIOCIWFIRSTPRIV] = priv_set_int, - [IOCTL_GET_INT - SIOCIWFIRSTPRIV] = priv_get_int, - [IOCTL_SET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STRUCT - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_GET_STRUCT - SIOCIWFIRSTPRIV] = priv_get_struct, - [IOCTL_SET_STRUCT_FOR_EM - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_SET_INTS - SIOCIWFIRSTPRIV] = priv_set_ints, - [IOCTL_GET_INTS - SIOCIWFIRSTPRIV] = priv_get_ints, -}; - -const struct iw_handler_def wext_handler_def = { - .num_standard = 0, - .num_private = (__u16)sizeof(rIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args), - .standard = (iw_handler *) NULL, - .private = rIwPrivHandler, - .private_args = rIwPrivTable, - .get_wireless_stats = wext_get_wireless_stats, -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPA/RSN Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPA IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x01", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPA IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPAIE */ - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WAPI Information Element . -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWAPIIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ELEM_ID_WAPI && i4InfoElemLen <= i4TotalIeLen) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* wextSrchDesiredWAPIIE */ -#endif - - -#if CFG_SUPPORT_WPS -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPS Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPS IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x04", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPS IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPSIE */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the name of the protocol used on the air. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] pcName Buffer to store protocol name string -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note If netif_carrier_ok, protocol name is returned; -* otherwise, "disconnected" is returned. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_name ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT char *pcName, - IN char *pcExtra - ) -{ - ENUM_PARAM_NETWORK_TYPE_T eNetWorkType; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcName); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcName)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (netif_carrier_ok(prNetDev)) { - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryNetworkTypeInUse, - &eNetWorkType, - sizeof(eNetWorkType), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - switch(eNetWorkType) { - case PARAM_NETWORK_TYPE_DS: - strcpy(pcName, "IEEE 802.11b"); - break; - case PARAM_NETWORK_TYPE_OFDM24: - strcpy(pcName, "IEEE 802.11bgn"); - break; - case PARAM_NETWORK_TYPE_AUTOMODE: - case PARAM_NETWORK_TYPE_OFDM5: - strcpy(pcName, "IEEE 802.11abgn"); - break; - case PARAM_NETWORK_TYPE_FH: - default: - strcpy(pcName, "IEEE 802.11"); - break; - } - } - else { - strcpy(pcName, "Disconnected"); - } - - return 0; -} /* wext_get_name */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL -* \param[in] prFreq Buffer to store frequency information -* \param[in] pcExtra NULL -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If infrastructure mode is not NET NET_TYPE_IBSS. -* \retval -EINVAL Invalid channel frequency. -* -* \note If infrastructure mode is IBSS, new channel frequency is set to device. -* The range of channel number depends on different regulatory domain. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - -#if 0 - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("set m:%d, e:%d, i:%d, flags:%d\n", - prIwFreq->m, prIwFreq->e, prIwFreq->i, prIwFreq->flags); - */ - - /* If setting by frequency, convert to a channel */ - if ((prIwFreq->e == 1) && - (prIwFreq->m >= (int) 2.412e8) && - (prIwFreq->m <= (int) 2.484e8)) { - - /* Change to KHz format */ - u4ChnlFreq = (UINT_32)(prIwFreq->m / (KILO / 10)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - /* Setting by channel number */ - else if ((prIwFreq->m > KILO) || (prIwFreq->e > 0)) { - return -EOPNOTSUPP; - } - else { - /* Change to channel number format */ - u4ChnlFreq = (UINT_32)prIwFreq->m; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetChannel, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - -#endif - - return 0; - -} /* wext_set_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFreq Buffer to store frequency information. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise -* -* \note If netif_carrier_ok, channel frequency information is stored in pFreq. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - UINT_32 u4Channel = 0; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: TODO skip checking in IBSS mode */ - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryFrequency, - &u4Channel, - sizeof(u4Channel), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - prIwFreq->m = (int) u4Channel; /* freq in KHz */ - prIwFreq->e = 3; - - return 0; - -} /* wext_get_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set operating mode. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - switch (*pu4Mode) { - case IW_MODE_AUTO: - eOpMode = NET_TYPE_AUTO_SWITCH; - break; - - case IW_MODE_ADHOC: - eOpMode = NET_TYPE_IBSS; - break; - - case IW_MODE_INFRA: - eOpMode = NET_TYPE_INFRA; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Set UNSUPPORTED Mode = %d.\n", __FUNCTION__, *pu4Mode)); - return -EOPNOTSUPP; - } - - //printk("%s(): Set Mode = %d\n", __FUNCTION__, *pu4Mode); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} /* wext_set_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get operating mode. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo NULL. -* \param[out] pu4Mode Buffer to store operating mode information. -* \param[in] pcExtra NULL. -* -* \retval 0 If data is valid. -* \retval -EINVAL Otherwise. -* -* \note If netif_carrier_ok, operating mode information is stored in pu4Mode. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - OUT unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch (eOpMode){ - case NET_TYPE_IBSS: - *pu4Mode = IW_MODE_ADHOC; - break; - - case NET_TYPE_INFRA: - *pu4Mode = IW_MODE_INFRA; - break; - - case NET_TYPE_AUTO_SWITCH: - *pu4Mode = IW_MODE_AUTO; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Get UNKNOWN Mode.\n", __FUNCTION__)); - return -EINVAL; - } - - return 0; -} /* wext_get_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the valid range for each configurable STA setting value. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer to iw_point structure, not used. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 If data is valid. -* -* \note The extra buffer (pcExtra) is filled with information from driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_range ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - OUT char *pcExtra - ) -{ - struct iw_range *prRange = NULL; - PARAM_RATES_EX aucSuppRate = {0}; /* data buffers */ - int i = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prRange = (struct iw_range *) pcExtra; - - memset(prRange, 0, sizeof(*prRange)); - prRange->throughput = 20000000; /* 20Mbps */ - prRange->min_nwid = 0; /* not used */ - prRange->max_nwid = 0; /* not used */ - - /* scan_capa not implemented */ - - /* event_capa[6]: kernel + driver capabilities */ - prRange->event_capa[0] = (IW_EVENT_CAPA_K_0 - | IW_EVENT_CAPA_MASK(SIOCGIWAP) - | IW_EVENT_CAPA_MASK(SIOCGIWSCAN) - /* can't display meaningful string in iwlist - | IW_EVENT_CAPA_MASK(SIOCGIWTXPOW) - | IW_EVENT_CAPA_MASK(IWEVMICHAELMICFAILURE) - | IW_EVENT_CAPA_MASK(IWEVASSOCREQIE) - | IW_EVENT_CAPA_MASK(IWEVPMKIDCAND) - */ - ); - prRange->event_capa[1] = IW_EVENT_CAPA_K_1; - - /* report 2.4G channel and frequency only */ - prRange->num_channels = (__u16) NUM_CHANNELS; - prRange->num_frequency = (__u8) NUM_CHANNELS; - for (i = 0; i < NUM_CHANNELS; i++) { - /* iwlib takes this number as channel number */ - prRange->freq[i].i = i + 1; - prRange->freq[i].m = channel_freq[i]; - prRange->freq[i].e = 6; /* Values in table in MHz */ - } - - rStatus = kalIoctl( - prGlueInfo, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - for (i = 0; i < IW_MAX_BITRATES && i < PARAM_MAX_LEN_RATES_EX ; i++) { - if (aucSuppRate[i] == 0) { - break; - } - prRange->bitrate[i] = (aucSuppRate[i] & 0x7F) * 500000; /* 0.5Mbps */ - } - prRange->num_bitrates = i; - - prRange->min_rts = 0; - prRange->max_rts = 2347; - prRange->min_frag = 256; - prRange->max_frag = 2346; - - prRange->min_pmp = 0; /* power management by driver */ - prRange->max_pmp = 0; /* power management by driver */ - prRange->min_pmt = 0; /* power management by driver */ - prRange->max_pmt = 0; /* power management by driver */ - prRange->pmp_flags = IW_POWER_RELATIVE; /* pm default flag */ - prRange->pmt_flags = IW_POWER_ON; /* pm timeout flag */ - prRange->pm_capa = IW_POWER_ON; /* power management by driver */ - - prRange->encoding_size[0] = 5; /* wep40 */ - prRange->encoding_size[1] = 16; /* tkip */ - prRange->encoding_size[2] = 16; /* ckip */ - prRange->encoding_size[3] = 16; /* ccmp */ - prRange->encoding_size[4] = 13; /* wep104 */ - prRange->encoding_size[5] = 16; /* wep128 */ - prRange->num_encoding_sizes = 6; - prRange->max_encoding_tokens = 6; /* token? */ - -#if WIRELESS_EXT < 17 - prRange->txpower_capa = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prRange->txpower_capa = IW_TXPOW_RELATIVE; -#endif - prRange->num_txpower = 5; - prRange->txpower[0] = 0; /* minimum */ - prRange->txpower[1] = 25; /* 25% */ - prRange->txpower[2] = 50; /* 50% */ - prRange->txpower[3] = 100; /* 100% */ - - prRange->we_version_compiled = WIRELESS_EXT; - prRange->we_version_source = WIRELESS_EXT; - - prRange->retry_capa = IW_RETRY_LIMIT; - prRange->retry_flags = IW_RETRY_LIMIT; - prRange->min_retry = 7; - prRange->max_retry = 7; - prRange->r_time_flags = IW_RETRY_ON; - prRange->min_r_time = 0; - prRange->max_r_time = 0; - - /* signal strength and link quality */ - /* Just define range here, reporting value moved to wext_get_stats() */ - prRange->sensitivity = -83; /* fixed value */ - prRange->max_qual.qual = 100; /* max 100% */ - prRange->max_qual.level = (__u8)(0x100 - 0); /* max 0 dbm */ - prRange->max_qual.noise = (__u8)(0x100 - 0); /* max 0 dbm */ - - /* enc_capa */ -#if WIRELESS_EXT > 17 - prRange->enc_capa = IW_ENC_CAPA_WPA | - IW_ENC_CAPA_WPA2 | - IW_ENC_CAPA_CIPHER_TKIP | - IW_ENC_CAPA_CIPHER_CCMP; -#endif - - /* min_pms; Minimal PM saving */ - /* max_pms; Maximal PM saving */ - /* pms_flags; How to decode max/min PM saving */ - - /* modul_capa; IW_MODUL_* bit field */ - /* bitrate_capa; Types of bitrates supported */ - - return 0; -} /* wext_get_range */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set BSSID of AP to connect. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prAddr Pointer to struct sockaddr structure containing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note Desired AP's BSSID is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_ap ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - return 0; -} /* wext_set_ap */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get AP MAC address. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prAddr Pointer to struct sockaddr structure storing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, AP's mac address is stored in pAddr->sa_data. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_ap ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prAddr); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAddr)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - if(prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_DISCONNECTED){ - memset(prAddr, 0, 6); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssid, - prAddr->sa_data, - ETH_ALEN, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; -} /* wext_get_ap */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set mlme operation request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer of iw_point header. -* \param[in] pcExtra Pointer to iw_mlme structure mlme request information. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP unsupported IW_MLME_ command. -* \retval -EINVAL Set MLME Fail, different bssid. -* -* \note Driver will start mlme operation if valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mlme ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - IN char *pcExtra - ) -{ - struct iw_mlme *prMlme = NULL; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prMlme = (struct iw_mlme *)pcExtra; - if (prMlme->cmd == IW_MLME_DEAUTH || prMlme->cmd == IW_MLME_DISASSOC) { - if (!netif_carrier_ok(prNetDev)) { - DBGLOG(INIT, INFO, ("[wifi] Set MLME Deauth/Disassoc, but netif_carrier_off\n")); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - return 0; - } - else { - DBGLOG(INIT, INFO, ("[wifi] unsupported IW_MLME_ command :%d\n", prMlme->cmd)); - return -EOPNOTSUPP; - } -} /* wext_set_mlme */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To issue scan request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData NULL. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EFAULT Tx power is off. -* -* \note Device will start scanning. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN union iwreq_data *prData, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - int essid_len = 0; - - ASSERT(prNetDev); - if (FALSE == GLUE_CHK_DEV(prNetDev)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if WIRELESS_EXT > 17 - /* retrieve SSID */ - if(prData) { - essid_len = ((struct iw_scan_req *)(((struct iw_point*)prData)->pointer))->essid_len; - } -#endif - - init_completion(&prGlueInfo->rScanComp); - - // TODO: parse flags and issue different scan requests? - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScan, - pcExtra, - essid_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 2 * KAL_HZ); - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - - - return 0; -} /* wext_set_scan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To write the ie to buffer -* -*/ -/*----------------------------------------------------------------------------*/ -static inline int snprintf_hex(char *buf, size_t buf_size, const u8 *data, - size_t len) -{ - size_t i; - char *pos = buf, *end = buf + buf_size; - int ret; - - if (buf_size == 0) - return 0; - - for (i = 0; i < len; i++) { - ret = snprintf(pos, end - pos, "%02x", - data[i]); - if (ret < 0 || ret >= end - pos) { - end[-1] = '\0'; - return pos - buf; - } - pos += ret; - } - end[-1] = '\0'; - return pos - buf; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get scan results, transform results from driver's format to WE's. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prData Pointer to iw_point structure, pData->length is the size of -* pcExtra buffer before used, and is updated after filling scan -* results. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 For success. -* \retval -ENOMEM If dynamic memory allocation fail. -* \retval -E2BIG Invalid length. -* -* \note Scan results is filled into pcExtra buffer, data size is updated in -* pData->length. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN OUT struct iw_point *prData, - IN char *pcExtra - ) -{ - UINT_32 i = 0; - UINT_32 j = 0; - P_PARAM_BSSID_LIST_EX_T prList = NULL; - P_PARAM_BSSID_EX_T prBss = NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - struct iw_event iwEvent; /* local iw_event buffer */ - - /* write pointer of extra buffer */ - char *pcCur = NULL; - /* pointer to the end of last full entry in extra buffer */ - char *pcValidEntryEnd = NULL; - char *pcEnd = NULL; /* end of extra buffer */ - - UINT_32 u4AllocBufLen = 0; - - /* arrange rate information */ - UINT_32 u4HighestRate = 0; - char aucRatesBuf[64]; - UINT_32 u4BufIndex; - - /* return value */ - int ret = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Initialize local variables */ - pcCur = pcExtra; - pcValidEntryEnd = pcExtra; - pcEnd = pcExtra + prData->length; /* end of extra buffer */ - - /* Allocate another query buffer with the same size of extra buffer */ - u4AllocBufLen = prData->length; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for scan list:%d\n", prData->length)); - ret = -ENOMEM; - goto error; - } - prList->u4NumberOfItems = 0; - - /* wait scan done */ - //printk ("wait for scan results\n"); - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 4 * KAL_HZ); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - /* Buffer length is not large enough. */ - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - -#if WIRELESS_EXT >= 17 - /* This feature is supported in WE-17 or above, limited by iwlist. - ** Return -E2BIG and iwlist will request again with a larger buffer. - */ - ret = -E2BIG; - /* Update length to give application a hint on result length */ - prData->length = (__u16)u4BufLen; - goto error; -#else - /* Realloc a larger query buffer here, but don't write too much to extra - ** buffer when filling it later. - */ - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - - u4AllocBufLen = u4BufLen; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for larger scan list :%ld\n", u4BufLen)); - ret = -ENOMEM; - goto error; - } - prList->NumberOfItems = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - DBGLOG(INIT, INFO, ("[wifi] larger buf:%d result:%ld\n", u4AllocBufLen, u4BufLen)); - ret = -E2BIG; - prData->length = (__u16)u4BufLen; - goto error; - } -#endif /* WIRELESS_EXT >= 17 */ - - } - - - if (prList->u4NumberOfItems > CFG_MAX_NUM_BSS_LIST) { - DBGLOG(INIT, INFO, ("[wifi] strange scan result count:%ld\n", - prList->u4NumberOfItems)); - goto error; - } - - /* Copy required data from pList to pcExtra */ - prBss = &prList->arBssid[0]; /* set to the first entry */ - for (i = 0; i < prList->u4NumberOfItems; ++i) { - /* BSSID */ - iwEvent.cmd = SIOCGIWAP; - iwEvent.len = IW_EV_ADDR_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwEvent.u.ap_addr.sa_data, prBss->arMacAddress, ETH_ALEN); - memcpy(pcCur, &iwEvent, IW_EV_ADDR_LEN); - pcCur += IW_EV_ADDR_LEN; - - /* SSID */ - iwEvent.cmd = SIOCGIWESSID; - /* Modification to user space pointer(essid.pointer) is not needed. */ - iwEvent.u.essid.length = (__u16)prBss->rSsid.u4SsidLen; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.essid.length; - - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.essid.flags = 1; - iwEvent.u.essid.pointer = NULL; - -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, iwEvent.len); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prBss->rSsid.aucSsid, iwEvent.u.essid.length); - pcCur += iwEvent.len; - /* Frequency */ - iwEvent.cmd = SIOCGIWFREQ; - iwEvent.len = IW_EV_FREQ_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.freq.m = prBss->rConfiguration.u4DSConfig; - iwEvent.u.freq.e = 3; /* (in KHz) */ - iwEvent.u.freq.i = 0; - memcpy(pcCur, &iwEvent, IW_EV_FREQ_LEN); - pcCur += IW_EV_FREQ_LEN; - - /* Operation Mode */ - iwEvent.cmd = SIOCGIWMODE; - iwEvent.len = IW_EV_UINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - if (prBss->eOpMode == NET_TYPE_IBSS) { - iwEvent.u.mode = IW_MODE_ADHOC; - } - else if (prBss->eOpMode == NET_TYPE_INFRA) { - iwEvent.u.mode = IW_MODE_INFRA; - } - else { - iwEvent.u.mode = IW_MODE_AUTO; - } - memcpy(pcCur, &iwEvent, IW_EV_UINT_LEN); - pcCur += IW_EV_UINT_LEN; - - /* Quality */ - iwEvent.cmd = IWEVQUAL; - iwEvent.len = IW_EV_QUAL_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.qual.qual = 0; /* Quality not available now */ - /* -100 < Rssi < -10, normalized by adding 0x100 */ - iwEvent.u.qual.level = 0x100 + prBss->rRssi; - iwEvent.u.qual.noise = 0; /* Noise not available now */ - iwEvent.u.qual.updated = IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_UPDATED \ - | IW_QUAL_NOISE_INVALID; - memcpy(pcCur, &iwEvent, IW_EV_QUAL_LEN); - pcCur += IW_EV_QUAL_LEN; - - /* Security Mode*/ - iwEvent.cmd = SIOCGIWENCODE; - iwEvent.len = IW_EV_POINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.pointer = NULL; - iwEvent.u.data.flags = 0; - iwEvent.u.data.length = 0; - if(!prBss->u4Privacy) { - iwEvent.u.data.flags |= IW_ENCODE_DISABLED; - } -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - pcCur += IW_EV_POINT_LEN; - - /* rearrange rate information */ - u4BufIndex = sprintf(aucRatesBuf, "Rates (Mb/s):"); - u4HighestRate = 0; - for (j = 0; j < PARAM_MAX_LEN_RATES_EX; ++j) { - UINT_8 curRate = prBss->rSupportedRates[j] & 0x7F; - if (curRate == 0) { - break; - } - - if (curRate > u4HighestRate) { - u4HighestRate = curRate; - } - - if (curRate == RATE_5_5M) { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " 5.5"); - } - else { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " %d", curRate / 2); - } - #if DBG - if (u4BufIndex > sizeof(aucRatesBuf)) { - //printk("rate info too long\n"); - break; - } - #endif - } - /* Report Highest Rates */ - iwEvent.cmd = SIOCGIWRATE; - iwEvent.len = IW_EV_PARAM_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.bitrate.value = u4HighestRate * 500000; - iwEvent.u.bitrate.fixed = 0; - iwEvent.u.bitrate.disabled = 0; - iwEvent.u.bitrate.flags = 0; - memcpy(pcCur, &iwEvent, iwEvent.len); - pcCur += iwEvent.len; - - #if WIRELESS_EXT >= 15 /* IWEVCUSTOM is available in WE-15 or above */ - /* Report Residual Rates */ - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = u4BufIndex; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 0; - #if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); - #else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - #endif - memcpy(pcCur + IW_EV_POINT_LEN, aucRatesBuf, u4BufIndex); - pcCur += iwEvent.len; - #endif /* WIRELESS_EXT >= 15 */ - - - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WPS /* search WPS IE (0xDD, 221, OUI: 0x0050f204 ) */ - if (wextSrchDesiredWPSIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } -#endif - - - /* Search RSN IE (0x30, 48). pBss->IEs starts from timestamp. */ - /* pBss->IEs starts from timestamp */ - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WAPI /* Android+ */ - if (wextSrchDesiredWAPIIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - (PUINT_8 *)&prDesiredIE)) { - -#if 0 - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; -#else - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = (2 + prDesiredIE->ucLength) * 2 + 8 /* wapi_ie= */; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 1; - - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - - pcCur += (IW_EV_POINT_LEN); - - pcCur += sprintf(pcCur, "wapi_ie="); - - snprintf_hex(pcCur, pcEnd - pcCur, (UINT_8 *)prDesiredIE, prDesiredIE->ucLength + 2); - - pcCur += (2 + prDesiredIE->ucLength) * 2 /* iwEvent.len */; -#endif - } -#endif - /* Complete an entry. Update end of valid entry */ - pcValidEntryEnd = pcCur; - /* Extract next bss */ - prBss = (P_PARAM_BSSID_EX_T)((char *)prBss + prBss->u4Length); - } - - /* Update valid data length for caller function and upper layer - * applications. - */ - prData->length = (pcValidEntryEnd - pcExtra); - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - -error: - /* free local query buffer */ - if (prList) { - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - } - - return ret; -} /* wext_get_scan */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set desired network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer of iw_point header. -* \param[in] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -E2BIG Essid string length is too big. -* \retval -EINVAL pcExtra is null pointer. -* \retval -EFAULT Driver fail to set new essid. -* -* \note If string lengh is ok, device will try connecting to the new network. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - IN char *pcExtra - ) -{ - PARAM_SSID_T rNewSsid; - UINT_32 cipher; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prEssid->length > IW_ESSID_MAX_SIZE) { - return -E2BIG; - } - - - /* set auth mode */ - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - //printk(KERN_INFO "IW_AUTH_WPA_VERSION_DISABLED->Param_AuthMode%s\n", - // (eAuthMode == AUTH_MODE_OPEN) ? "Open" : "Shared"); - } - else { - /* set auth mode */ - switch(prGlueInfo->rWpaInfo.u4KeyMgmt) { - case IW_AUTH_KEY_MGMT_802_1X: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA : AUTH_MODE_WPA2; - //printk("IW_AUTH_KEY_MGMT_802_1X->AUTH_MODE_WPA%s\n", - // (eAuthMode == AUTH_MODE_WPA) ? "" : "2"); - break; - case IW_AUTH_KEY_MGMT_PSK: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA_PSK: AUTH_MODE_WPA2_PSK; - //printk("IW_AUTH_KEY_MGMT_PSK->AUTH_MODE_WPA%sPSK\n", - // (eAuthMode == AUTH_MODE_WPA_PSK) ? "" : "2"); - break; -#if CFG_SUPPORT_WAPI /* Android+ */ - case IW_AUTH_KEY_MGMT_WAPI_PSK: - break; - case IW_AUTH_KEY_MGMT_WAPI_CERT: - break; -#endif - -//#if defined (IW_AUTH_KEY_MGMT_WPA_NONE) -// case IW_AUTH_KEY_MGMT_WPA_NONE: -// eAuthMode = AUTH_MODE_WPA_NONE; -// //printk("IW_AUTH_KEY_MGMT_WPA_NONE->AUTH_MODE_WPA_NONE\n"); -// break; -//#endif -#if CFG_SUPPORT_802_11W - case IW_AUTH_KEY_MGMT_802_1X_SHA256: - eAuthMode = AUTH_MODE_WPA2; - break; - case IW_AUTH_KEY_MGMT_PSK_SHA256: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; -#endif - default: - //printk(KERN_INFO DRV_NAME"strange IW_AUTH_KEY_MGMT : %ld set auto switch\n", - // prGlueInfo->rWpaInfo.u4KeyMgmt); - eAuthMode = AUTH_MODE_AUTO_SWITCH; - break; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - /* set encryption status */ - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | - prGlueInfo->rWpaInfo.u4CipherPairwise; - if (cipher & IW_AUTH_CIPHER_CCMP) { - //printk("IW_AUTH_CIPHER_CCMP->ENUM_ENCRYPTION3_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - //printk("IW_AUTH_CIPHER_TKIP->ENUM_ENCRYPTION2_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - //printk("IW_AUTH_CIPHER_WEPx->ENUM_ENCRYPTION1_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - //printk("IW_AUTH_CIPHER_NONE->ENUM_ENCRYPTION_DISABLED\n"); - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - //printk("unknown IW_AUTH_CIPHER->Param_EncryptionDisabled\n"); - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - -#if WIRELESS_EXT < 21 - /* GeorgeKuo: a length error bug exists in (WE < 21) cases, kernel before - ** 2.6.19. Cut the trailing '\0'. - */ - rNewSsid.u4SsidLen = (prEssid->length) ? prEssid->length - 1 : 0; -#else - rNewSsid.u4SsidLen = prEssid->length; -#endif - kalMemCopy(rNewSsid.aucSsid, pcExtra, rNewSsid.u4SsidLen); - - /* - rNewSsid.aucSsid[rNewSsid.u4SsidLen] = '\0'; - printk("set ssid(%lu): %s\n", rNewSsid.u4SsidLen, rNewSsid.aucSsid); - */ - - if (kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING "Fail to set ssid\n"); - return -EFAULT; - } - - - return 0; -} /* wext_set_essid */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer to iw_point structure containing essid information. -* \param[out] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, network essid is stored in pcExtra. -*/ -/*----------------------------------------------------------------------------*/ -//static PARAM_SSID_T ssid; -static int -wext_get_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - OUT char *pcExtra - ) -{ - //PARAM_SSID_T ssid; - - P_PARAM_SSID_T prSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - prSsid = kalMemAlloc(sizeof(PARAM_SSID_T), VIR_MEM_TYPE); - - if(!prSsid) { - return -ENOMEM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQuerySsid, - prSsid, - sizeof(PARAM_SSID_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if ((rStatus == WLAN_STATUS_SUCCESS) && (prSsid->u4SsidLen <= MAX_SSID_LEN)) { - kalMemCopy(pcExtra, prSsid->aucSsid, prSsid->u4SsidLen); - prEssid->length = prSsid->u4SsidLen; - prEssid->flags = 1; - } - - kalMemFree(prSsid, VIR_MEM_TYPE, sizeof(PARAM_SSID_T)); - - return 0; -} /* wext_get_essid */ - - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set tx desired bit rate. Three cases here -* iwconfig wlan0 auto -> Set to origianl supported rate set. -* iwconfig wlan0 18M -> Imply "fixed" case, set to 18Mbps as desired rate. -* iwconfig wlan0 18M auto -> Set to auto rate lower and equal to 18Mbps -* -* \param[in] prNetDev Pointer to the net_device handler. -* \param[in] prIwReqInfo Pointer to the Request Info. -* \param[in] prRate Pointer to the Rate Parameter. -* \param[in] pcExtra Pointer to the extra buffer. -* -* \retval 0 Update desired rate. -* \retval -EINVAL Wrong parameter -*/ -/*----------------------------------------------------------------------------*/ -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ) -{ - PARAM_RATES_EX aucSuppRate = {0}; - PARAM_RATES_EX aucNewRate = {0}; - UINT_32 u4NewRateLen = 0; - UINT_32 i; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("value = %d, fixed = %d, disable = %d, flags = %d\n", - prRate->value, prRate->fixed, prRate->disabled, prRate->flags); - */ - - rStatus = wlanQueryInformation( - prGlueInfo->prAdapter, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - - /* Case: AUTO */ - if (prRate->value < 0) { - if (prRate->fixed == 0) { - /* iwconfig wlan0 rate auto */ - - /* set full supported rate to device */ - /* printk("wlanoidQuerySupportedRates():u4BufLen = %ld\n", u4BufLen); */ - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - return 0; - } - else { - /* iwconfig wlan0 rate fixed */ - - /* fix rate to what? DO NOTHING */ - return -EINVAL; - } - } - - - aucNewRate[0] = prRate->value / 500000; /* In unit of 500k */ - - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; i++) { - /* check the given value is supported */ - if (aucSuppRate[i] == 0) { - break; - } - - if (aucNewRate[0] == aucSuppRate[i]) { - u4NewRateLen = 1; - break; - } - } - - if (u4NewRateLen == 0) { - /* the given value is not supported */ - /* return error or use given rate as upper bound? */ - return -EINVAL; - } - - if (prRate->fixed == 0) { - /* add all rates lower than desired rate */ - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; ++i) { - if (aucSuppRate[i] == 0) { - break; - } - - if (aucSuppRate[i] < aucNewRate[0]) { - aucNewRate[u4NewRateLen++] = aucSuppRate[i]; - } - } - } - - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucNewRate, - sizeof(aucNewRate), - &u4BufLen); - return 0; -} /* wext_set_rate */ - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current tx bit rate. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRate Pointer to iw_param structure to store current tx rate. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, current tx rate is stored in pRate. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRate, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - UINT_32 u4Rate = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prRate->value = u4Rate * 100; /* u4Rate is in unit of 100bps */ - prRate->fixed = 0; - - return 0; -} /* wext_get_rate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EINVAL Given value is out of range. -* -* \note If given value is valid, device will follow the new setting. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prRts->disabled == 1) { - u4RtsThresh = 2347; - } - else if (prRts->value < 0 || prRts->value > 2347) { - return -EINVAL; - } - else { - u4RtsThresh = (PARAM_RTS_THRESHOLD)prRts->value; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_set_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pRts. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347 || prRts->value < 0) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_get_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get fragmentation threshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFrag Pointer to iw_param structure containing frag threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pFrag. Fragmentation is disabled. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_frag ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prFrag, - IN char *pcExtra - ) -{ - ASSERT(prFrag); - - prFrag->value = 2346; - prFrag->fixed = 1; - prFrag->disabled = 1; - return 0; -} /* wext_get_frag */ - -#if 1 -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set TX power, or enable/disable the radio. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. iwconfig wlan0 txpow on/off are used -* to enable/disable the radio. -*/ -/*----------------------------------------------------------------------------*/ - -static int -wext_set_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - int ret = 0; - //PARAM_DEVICE_POWER_STATE ePowerState; - ENUM_ACPI_STATE_T ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if(prTxPow->disabled){ - /* <1> disconnect */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("######set disassoc failed\n")); - } else { - DBGLOG(INIT, INFO, ("######set assoc ok\n")); - } - - /* <2> mark to power state flag*/ - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d3(0)\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - - } - else { - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d0\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - } - - prGlueInfo->ePowerState = ePowerState; - - return ret; -} /* wext_set_txpow */ - - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get TX power. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - //PARAM_DEVICE_POWER_STATE ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: wlanoidQueryAcpiDevicePowerState() reports capability, not - * current state. Use GLUE_INFO_T to store state. - */ - //ePowerState = prGlueInfo->ePowerState; - - /* TxPow parameters: Fixed at relative 100% */ -#if WIRELESS_EXT < 17 - prTxPow->flags = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prTxPow->flags = IW_TXPOW_RELATIVE; -#endif - prTxPow->value = 100; - prTxPow->fixed = 1; - //prTxPow->disabled = (ePowerState != ParamDeviceStateD3) ? FALSE : TRUE; - prTxPow->disabled = TRUE; - - return 0; -} /* wext_get_txpow */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Buffer to store key content. -* -* \retval 0 Success. -* -* \note Securiry information is stored in pEnc except key content. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - //ENUM_ENCRYPTION_STATUS_T eEncMode; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR2(prNetDev, prEnc)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryEncryptionStatus, - &eEncMode, - sizeof(eEncMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch(eEncMode) { - case ENUM_WEP_DISABLED: - prEnc->flags = IW_ENCODE_DISABLED; - break; - case ENUM_WEP_ENABLED: - prEnc->flags = IW_ENCODE_ENABLED; - break; - case ENUM_WEP_KEY_ABSENT: - prEnc->flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - break; - default: - prEnc->flags = IW_ENCODE_ENABLED; - break; - } - - /* Cipher, Key Content, Key ID can't be queried */ - prEnc->flags |= IW_ENCODE_NOKEY; -#endif - return 0; -} /* wext_get_encode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 wepBuf[48]; - -static int -wext_set_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //UINT_8 wepBuf[48]; - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* reset to default mode */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - /* iwconfig wlan0 key off */ - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED ) { - eAuthMode = AUTH_MODE_OPEN; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - eEncStatus = ENUM_ENCRYPTION_DISABLED; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; - } - - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prEnc->length == 5 || prEnc->length == 13 || prEnc->length == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prEnc->length; - prWepKey->u4KeyLength = prEnc->length; - kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prEnc->length); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetAuthMode fail 0x%lx\n", rStatus); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus); - return -EFAULT; - } - - return 0; - } -#endif - return -EOPNOTSUPP; -} /* wext_set_encode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note New Power Management Mode is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prPower, - IN char *pcExtra - ) -{ -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - DBGLOG(INIT, INFO, ("%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value)); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - return 0; -} /* wext_set_power */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Power management mode is stored in pTxPow->value. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prPower, - IN char *pcExtra - ) -{ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - PARAM_POWER_MODE ePowerMode = Param_PowerModeCAM; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if 0 -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - //printk(KERN_INFO "wext_get_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - return 0; -} /* wext_get_power */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set authentication parameters. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] rpAuth Pointer to iw_param structure containing authentication information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_auth ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prAuth, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAuth)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: -#if CFG_SUPPORT_WAPI - if (wlanQueryWapiMode(prGlueInfo->prAdapter)){ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - } - else { - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; - } -#else - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; -#endif - break; - - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->rWpaInfo.u4CipherPairwise = prAuth->value; - break; - - case IW_AUTH_CIPHER_GROUP: - prGlueInfo->rWpaInfo.u4CipherGroup = prAuth->value; - break; - - case IW_AUTH_KEY_MGMT: - prGlueInfo->rWpaInfo.u4KeyMgmt = prAuth->value; -#if CFG_SUPPORT_WAPI - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_PSK || - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_CERT) { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - } -#endif - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WPS) - prGlueInfo->fgWpsActive = TRUE; - else - prGlueInfo->fgWpsActive = FALSE; - break; - - case IW_AUTH_80211_AUTH_ALG: - prGlueInfo->rWpaInfo.u4AuthAlg = prAuth->value; - break; - - case IW_AUTH_PRIVACY_INVOKED: - prGlueInfo->rWpaInfo.fgPrivacyInvoke = prAuth->value; - break; -#if CFG_SUPPORT_802_11W - case IW_AUTH_MFP: - //printk("wext_set_auth IW_AUTH_MFP=%d\n", prAuth->value); - prGlueInfo->rWpaInfo.u4Mfp = prAuth->value; - break; -#endif -#if CFG_SUPPORT_WAPI - case IW_AUTH_WAPI_ENABLED: - { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - break; -#endif - default: - /* - printk(KERN_INFO "[wifi] unsupported IW_AUTH_INDEX :%d\n", prAuth->flags); - */ - break; - } - return 0; -} /* wext_set_auth */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -#if CFG_SUPPORT_WAPI - UINT_8 keyStructBuf[320]; /* add/remove key shared buffer */ -#else - UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -static int -wext_set_encode_ext ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - - - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - struct iw_encode_ext *prIWEncExt = (struct iw_encode_ext *) pcExtra; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //ENUM_PARAM_OP_MODE_T eOpMode = NET_TYPE_AUTO_SWITCH; - -#if CFG_SUPPORT_WAPI - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; -#endif - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - -#if CFG_SUPPORT_WAPI - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - if (prEnc->flags & IW_ENCODE_DISABLED) { - //printk(KERN_INFO "[wapi] IW_ENCODE_DISABLED\n"); - return 0; - } - /* KeyID */ - prWpiKey->ucKeyID = (prEnc->flags & IW_ENCODE_INDEX); - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr.sa_data, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - } - - } - else -#endif - { - - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - /* - printk("IW_ENCODE_DISABLED: ID:%d, Addr:[" MACSTR "]\n", - prRemoveKey->KeyIndex, MAC2STR(prRemoveKey->BSSID)); - */ - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("remove key error:%lx\n", rStatus)); - } - return 0; - } - - //return 0; - //printk ("alg %x\n", prIWEncExt->alg); - - switch (prIWEncExt->alg) { - case IW_ENCODE_ALG_NONE: - break; - case IW_ENCODE_ALG_WEP: - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prIWEncExt->key_len == 5 || prIWEncExt->key_len == 13 || prIWEncExt->key_len == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prIWEncExt->key_len; - prWepKey->u4KeyLength = prIWEncExt->key_len; - //kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prIWEncExt->key_len); - kalMemCopy(prWepKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAuthMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - } else { - DBGLOG(INIT, INFO, ("key length %x\n", prIWEncExt->key_len)); - DBGLOG(INIT, INFO, ("key error\n")); - } - - break; - case IW_ENCODE_ALG_TKIP: - case IW_ENCODE_ALG_CCMP: -#if CFG_SUPPORT_802_11W - case IW_ENCODE_ALG_AES_CMAC: -#endif - { - - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1: 0; -#if CFG_SUPPORT_802_11W - if (prKey->u4KeyIndex > 5) -#else - if (prKey->u4KeyIndex > 3) -#endif - { - DBGLOG(INIT, INFO, ("key index error:0x%lx\n", prKey->u4KeyIndex)); - /* key id is out of range */ - return -EINVAL; - } - - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - } - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - /* switch tx/rx MIC key for sta */ - if (prIWEncExt->alg == IW_ENCODE_ALG_TKIP && prIWEncExt->key_len == 32) { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, 16); - memcpy(((PUINT_8)prKey->aucKeyMaterial) + 16, prIWEncExt->key + 24, 8); - memcpy((prKey->aucKeyMaterial) + 24, prIWEncExt->key + 16, 8); - } - else { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - } - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add key error:%lx\n", rStatus)); - return -EFAULT; - } - break; - } - } - - return 0; -} /* wext_set_encode_ext */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set country code -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_country ( - IN struct net_device *prNetDev, - IN struct iwreq *iwr - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - UINT_8 aucCountry[2]; - - ASSERT(prNetDev); - - /* iwr->u.data.pointer should be like "COUNTRY US", "COUNTRY EU" - * and "COUNTRY JP" - */ - if (FALSE == GLUE_CHK_PR2(prNetDev, iwr) || - !iwr->u.data.pointer || iwr->u.data.length < 10) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - aucCountry[0] = *((PUINT_8)iwr->u.data.pointer + 8); - aucCountry[1] = *((PUINT_8)iwr->u.data.pointer + 9); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCountryCode, - &aucCountry[0], - 2, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl() (Linux Wireless Extensions) routines -* -* \param[in] prDev Net device requested. -* \param[in] ifr The ifreq structure for seeting the wireless extension. -* \param[in] i4Cmd The wireless extension ioctl command. -* -* \retval zero On success. -* \retval -EOPNOTSUPP If the cmd is not supported. -* \retval -EFAULT If copy_to_user goes wrong. -* \retval -EINVAL If any value's out of range. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -wext_support_ioctl ( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *iwr = (struct iwreq*)prIfReq; - struct iw_request_info rIwReqInfo; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - //printk("%d CMD:0x%x\n", jiffies_to_msecs(jiffies), i4Cmd); - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case SIOCGIWNAME: /* 0x8B01, get wireless protocol name */ - ret = wext_get_name(prDev, &rIwReqInfo, (char *)&iwr->u.name, NULL); - break; - - /* case SIOCSIWNWID: 0x8B02, deprecated */ - /* case SIOCGIWNWID: 0x8B03, deprecated */ - - case SIOCSIWFREQ: /* 0x8B04, set channel */ - ret = wext_set_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCGIWFREQ: /* 0x8B05, get channel */ - ret = wext_get_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCSIWMODE: /* 0x8B06, set operation mode */ - ret = wext_set_mode(prDev, NULL, &iwr->u.mode, NULL); - //ret = 0; - break; - - case SIOCGIWMODE: /* 0x8B07, get operation mode */ - ret = wext_get_mode(prDev, NULL, &iwr->u.mode, NULL); - break; - - /* case SIOCSIWSENS: 0x8B08, unsupported */ - /* case SIOCGIWSENS: 0x8B09, unsupported */ - - /* case SIOCSIWRANGE: 0x8B0A, unused */ - case SIOCGIWRANGE: /* 0x8B0B, get range of parameters */ - if (iwr->u.data.pointer != NULL) { - /* Buffer size shoule be large enough */ - if (iwr->u.data.length < sizeof(struct iw_range)) { - ret = -E2BIG; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_range), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* reset all fields */ - memset(prExtraBuf, 0, sizeof(struct iw_range)); - iwr->u.data.length = sizeof(struct iw_range); - - ret = wext_get_range(prDev, NULL, &iwr->u.data, prExtraBuf); - /* Push up to the caller */ - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_range)); - prExtraBuf = NULL; - } - else { - ret = -EINVAL; - } - break; - - case SIOCSIWPRIV: /* 0x8B0C, Country */ - ret = wext_set_country(prDev, iwr); - break; - - /* case SIOCGIWPRIV: 0x8B0D, handled in wlan_do_ioctl() */ - /* caes SIOCSIWSTATS: 0x8B0E, unused */ - /* case SIOCGIWSTATS: - get statistics, intercepted by wireless_process_ioctl() in wireless.c, - redirected to dev_iwstats(), dev->get_wireless_stats(). - */ - /* case SIOCSIWSPY: 0x8B10, unsupported */ - /* case SIOCGIWSPY: 0x8B11, unsupported*/ - /* case SIOCSIWTHRSPY: 0x8B12, unsupported */ - /* case SIOCGIWTHRSPY: 0x8B13, unsupported*/ - - case SIOCSIWAP: /* 0x8B14, set access point MAC addresses (BSSID) */ - if (iwr->u.ap_addr.sa_data[0] == 0 && - iwr->u.ap_addr.sa_data[1] == 0 && - iwr->u.ap_addr.sa_data[2] == 0 && - iwr->u.ap_addr.sa_data[3] == 0 && - iwr->u.ap_addr.sa_data[4] == 0 && - iwr->u.ap_addr.sa_data[5] == 0) { - /* WPA Supplicant will set 000000000000 in - ** wpa_driver_wext_deinit(), do nothing here or disassoc again? - */ - ret = 0; - break; - } - else { - ret = wext_set_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - } - break; - - case SIOCGIWAP: /* 0x8B15, get access point MAC addresses (BSSID) */ - ret = wext_get_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - break; - - case SIOCSIWMLME: /* 0x8B16, request MLME operation */ - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_mlme)) { - DBGLOG(INIT, INFO, ("MLME buffer strange:%d\n", iwr->u.data.length)); - ret = -EINVAL; - break; - } - - if (!iwr->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, iwr->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = wext_set_mlme(prDev, NULL, &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - /* case SIOCGIWAPLIST: 0x8B17, deprecated */ - case SIOCSIWSCAN: /* 0x8B18, scan request */ - if (iwr->u.data.pointer == NULL) { - ret = wext_set_scan(prDev, NULL, NULL, NULL); - } -#if WIRELESS_EXT > 17 - else if (iwr->u.data.length == sizeof(struct iw_scan_req)) { - prExtraBuf = kalMemAlloc(MAX_SSID_LEN, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, ((struct iw_scan_req *) (iwr->u.data.pointer))->essid, - ((struct iw_scan_req *) (iwr->u.data.pointer))->essid_len)) { - ret = -EFAULT; - } else { - ret = wext_set_scan(prDev, NULL, (union iwreq_data *) &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, MAX_SSID_LEN); - prExtraBuf = NULL; - } -#endif - else { - ret = -EINVAL; - } - break; -#if 1 - case SIOCGIWSCAN: /* 0x8B19, get scan results */ - if (!iwr->u.data.pointer|| !iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - u4ExtraSize = iwr->u.data.length; - /* allocate the same size of kernel buffer to store scan results. */ - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* iwr->u.data.length may be updated by wext_get_scan() */ - ret = wext_get_scan(prDev, NULL, &iwr->u.data, prExtraBuf); - if (ret != 0) { - if (ret == -E2BIG) { - DBGLOG(INIT, INFO, ("[wifi] wext_get_scan -E2BIG\n")); - } - } - else { - /* check updated length is valid */ - ASSERT(iwr->u.data.length <= u4ExtraSize); - if (iwr->u.data.length > u4ExtraSize) { - DBGLOG(INIT, INFO, ("Updated result length is larger than allocated (%d > %ld)\n", - iwr->u.data.length, u4ExtraSize)); - iwr->u.data.length = u4ExtraSize; - } - - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - - break; - -#endif - -#if 1 - case SIOCSIWESSID: /* 0x8B1A, set SSID (network name) */ - if (iwr->u.essid.length > IW_ESSID_MAX_SIZE) { - ret = -E2BIG; - break; - } - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE + 4, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.essid.pointer, - iwr->u.essid.length)) { - ret = -EFAULT; - } - else { - /* Add trailing '\0' for printk */ - //prExtraBuf[iwr->u.essid.length] = 0; - //printk(KERN_INFO "wext_set_essid: %s (%d)\n", prExtraBuf, iwr->u.essid.length); - ret = wext_set_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - //printk ("set essid %d\n", ret); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE + 4); - prExtraBuf = NULL; - break; - -#endif - - case SIOCGIWESSID: /* 0x8B1B, get SSID */ - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - if (iwr->u.essid.length < IW_ESSID_MAX_SIZE) { - DBGLOG(INIT, INFO, ("[wifi] iwr->u.essid.length:%d too small\n", - iwr->u.essid.length)); - ret = -E2BIG; /* let caller try larger buffer */ - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - /* iwr->u.essid.length is updated by wext_get_essid() */ - - ret = wext_get_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - if (ret == 0) { - if (copy_to_user(iwr->u.essid.pointer, prExtraBuf, iwr->u.essid.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE); - prExtraBuf = NULL; - - break; - - /* case SIOCSIWNICKN: 0x8B1C, not supported */ - /* case SIOCGIWNICKN: 0x8B1D, not supported */ - - case SIOCSIWRATE: /* 0x8B20, set default bit rate (bps) */ - //ret = wext_set_rate(prDev, &rIwReqInfo, &iwr->u.bitrate, NULL); - break; - - case SIOCGIWRATE: /* 0x8B21, get current bit rate (bps) */ - ret = wext_get_rate(prDev, NULL, &iwr->u.bitrate, NULL); - break; - - case SIOCSIWRTS: /* 0x8B22, set rts/cts threshold */ - ret = wext_set_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - case SIOCGIWRTS: /* 0x8B23, get rts/cts threshold */ - ret = wext_get_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - /* case SIOCSIWFRAG: 0x8B24, unsupported */ - case SIOCGIWFRAG: /* 0x8B25, get frag threshold */ - ret = wext_get_frag(prDev, NULL, &iwr->u.frag, NULL); - break; - - case SIOCSIWTXPOW: /* 0x8B26, set relative tx power (in %) */ - ret = wext_set_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - case SIOCGIWTXPOW: /* 0x8B27, get relative tx power (in %) */ - ret = wext_get_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - /* case SIOCSIWRETRY: 0x8B28, unsupported */ - /* case SIOCGIWRETRY: 0x8B29, unsupported */ - -#if 1 - case SIOCSIWENCODE: /* 0x8B2A, set encoding token & mode */ - /* Only DISABLED case has NULL pointer and length == 0 */ - if (iwr->u.encoding.pointer) { - if (iwr->u.encoding.length > 16) { - ret = -E2BIG; - break; - } - - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - case SIOCGIWENCODE: /* 0x8B2B, get encoding token & mode */ - /* check pointer */ - ret = wext_get_encode(prDev, NULL, &iwr->u.encoding, NULL); - break; - - case SIOCSIWPOWER: /* 0x8B2C, set power management */ - ret = wext_set_power(prDev, NULL, &iwr->u.power, NULL); - break; - - case SIOCGIWPOWER: /* 0x8B2D, get power management */ - ret = wext_get_power(prDev, NULL, &iwr->u.power, NULL); - break; - -#if WIRELESS_EXT > 17 - case SIOCSIWGENIE: /* 0x8B30, set gen ie */ - if (iwr->u.data.pointer) { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (1 /* wlanQueryWapiMode(prGlueInfo->prAdapter) */) { - /* Fixed length structure */ -#if CFG_SUPPORT_WAPI - if (iwr->u.data.length > 42 /* The max wapi ie buffer */) { - ret = -EINVAL; - break; - } -#endif - u4ExtraSize = iwr->u.data.length; - if (u4ExtraSize) { - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - iwr->u.data.length)) { - ret = -EFAULT; - } - else { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - prExtraBuf, - u4ExtraSize, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] set wapi assoc info error:%lx\n", rStatus); -#endif -#if CFG_SUPPORT_WPS2 - PUINT_8 prDesiredIE = NULL; - if (wextSrchDesiredWPSIE(prExtraBuf, - u4ExtraSize, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[WSC] set WSC assoc info error:%lx\n", rStatus); - } - } -#endif -#if CFG_SUPPORT_WAPI - } -#endif - } - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - } - break; - - case SIOCGIWGENIE: /* 0x8B31, get gen ie, unused */ - break; - -#endif - - case SIOCSIWAUTH: /* 0x8B32, set auth mode params */ - ret = wext_set_auth(prDev, NULL, &iwr->u.param, NULL); - break; - - /* case SIOCGIWAUTH: 0x8B33, unused? */ - case SIOCSIWENCODEEXT: /* 0x8B34, set extended encoding token & mode */ - if (iwr->u.encoding.pointer) { - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode_ext(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - /* case SIOCGIWENCODEEXT: 0x8B35, unused? */ - - case SIOCSIWPMKSA: /* 0x8B36, pmksa cache operation */ - #if 1 - if (iwr->u.data.pointer) { - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_pmksa)) { - ret = -EINVAL; - break; - } - - u4ExtraSize = sizeof(struct iw_pmksa); - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - sizeof(struct iw_pmksa))) { - ret = -EFAULT; - } - else { - switch(((struct iw_pmksa *)prExtraBuf)->cmd) { - case IW_PMKSA_ADD: - /* - printk(KERN_INFO "IW_PMKSA_ADD [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)pExtraBuf)->bssid.sa_data)); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, - ((struct iw_pmksa *)prExtraBuf)->bssid.sa_data, - 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, - ((struct iw_pmksa *)prExtraBuf)->pmkid, - IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - } - break; - case IW_PMKSA_REMOVE: - /* - printk(KERN_INFO "IW_PMKSA_REMOVE [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)buf)->bssid.sa_data)); - */ - break; - case IW_PMKSA_FLUSH: - /* - printk(KERN_INFO "IW_PMKSA_FLUSH\n"); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - } - break; - default: - DBGLOG(INIT, INFO, ("UNKNOWN iw_pmksa command:%d\n", - ((struct iw_pmksa *)prExtraBuf)->cmd)); - ret = -EFAULT; - break; - } - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - else if (iwr->u.data.length != 0) { - ret = -EINVAL; - break; - } - #endif - break; - -#endif - - default: - /* printk(KERN_NOTICE "unsupported IOCTL: 0x%x\n", i4Cmd); */ - ret = -EOPNOTSUPP; - break; - } - - //printk("%ld CMD:0x%x ret:%d\n", jiffies_to_msecs(jiffies), i4Cmd, ret); - - return ret; -} /* wext_support_ioctl */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To send an event (RAW socket pacekt) to user process actively. -* -* \param[in] prGlueInfo Glue layer info. -* \param[in] u4cmd Whcih event command we want to indicate to user process. -* \param[in] pData Data buffer to be indicated. -* \param[in] dataLen Available data size in pData. -* -* \return (none) -* -* \note Event is indicated to upper layer if cmd is supported and data is valid. -* Using of kernel symbol wireless_send_event(), which is defined in -* after WE-14 (2.4.20). -*/ -/*----------------------------------------------------------------------------*/ -void -wext_indicate_wext_event ( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4dataLen - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; -#if WIRELESS_EXT >= 15 - unsigned char *pucDesiredIE = NULL; - unsigned char aucExtraInfoBuf[200]; -#endif -#if WIRELESS_EXT < 18 - int i; -#endif - - memset(&wrqu, 0, sizeof(wrqu)); - - switch (u4Cmd) { - case SIOCGIWTXPOW: - memcpy(&wrqu.power, pucData, u4dataLen); - break; - case SIOCGIWSCAN: - complete_all(&prGlueInfo->rScanComp); - break; - - case SIOCGIWAP: - if (pucData) { - memcpy(&wrqu.ap_addr.sa_data, pucData, ETH_ALEN); - } - else { - memset(&wrqu.ap_addr.sa_data, 0, ETH_ALEN); - } - break; - - case IWEVASSOCREQIE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0x30, &pucDesiredIE)) { - /* RSN IE found */ - } -#if 0 - else if (wextSrchDesiredWPSIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPS IE found */ - } -#endif - else if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPA IE found */ - } -#if CFG_SUPPORT_WAPI /* Android+ */ - else if (wextSrchDesiredWAPIIE(pucData, u4dataLen, &pucDesiredIE)) { - //printk("wextSrchDesiredWAPIIE!!\n"); - /* WAPI IE found */ - } -#endif - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - #if WIRELESS_EXT < 18 - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, "ASSOCINFO(ReqIEs="); - /* printk(KERN_DEBUG "assoc info buffer size needed:%d\n", infoElemLen * 2 + 17); */ - /* translate binary string to hex string, requirement of IWEVCUSTOM */ - for (i = 0; i < pucDesiredIE[1] + 2 ; ++i) { - pucExtraInfo += sprintf(pucExtraInfo, "%02x", pucDesiredIE[i]); - } - pucExtraInfo = aucExtraInfoBuf; - wrqu.data.length = 17 + (pucDesiredIE[1] + 2) * 2; - #else - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - #endif -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVMICHAELMICFAILURE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - if (pucData) { - P_PARAM_AUTH_REQUEST_T pAuthReq = (P_PARAM_AUTH_REQUEST_T)pucData; - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, - "MLME-MICHAELMICFAILURE.indication "); - pucExtraInfo += sprintf(pucExtraInfo, - "%s", - (pAuthReq->u4Flags == PARAM_AUTH_REQUEST_GROUP_ERROR) ? - "groupcast " : "unicast "); - - wrqu.data.length = pucExtraInfo - aucExtraInfoBuf; - pucExtraInfo = aucExtraInfoBuf; - } -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVPMKIDCAND: - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2 && - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_802_1X) { - - /* only used in WPA2 */ -#if WIRELESS_EXT >= 18 - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)pucData; - - struct iw_pmkid_cand rPmkidCand; - pucExtraInfo = aucExtraInfoBuf; - - rPmkidCand.flags = prPmkidCand->u4Flags; - rPmkidCand.index = 0; - kalMemCopy(rPmkidCand.bssid.sa_data, prPmkidCand->arBSSID, 6); - - kalMemCopy(pucExtraInfo, (PUINT_8)&rPmkidCand, sizeof(struct iw_pmkid_cand)); - wrqu.data.length = sizeof(struct iw_pmkid_cand); - - /* pmkid canadidate list is supported after WE-18 */ - /* indicate struct iw_pmkid_cand */ -#else - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, WE < 18\n"); */ - goto skip_indicate_event; -#endif - } - else { - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, NOT WPA2\n"); */ - goto skip_indicate_event; - } - break; - - case IWEVCUSTOM: - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - kalMemCopy(pucExtraInfo, pucData, sizeof(PTA_IPC_T)); - wrqu.data.length = sizeof(PTA_IPC_T); - break; - - default: - /* printk(KERN_INFO "Unsupported wext event:%x\n", cmd); */ - goto skip_indicate_event; - } - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prDevHandler, u4Cmd, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; -} /* wext_indicate_wext_event */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] pDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -* -*/ -/*----------------------------------------------------------------------------*/ -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - FALSE, - &bufLen); - -stat_out: - return pStats; -} /* wlan_get_wireless_stats */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To report the private supported IOCTLs table to user space. -* -* \param[in] prNetDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 For success. -* \retval -E2BIG For user's buffer size is too small. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_point *prData= (struct iw_point *)&prIwReq->u.data; - UINT_16 u2BufferSize = 0; - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rIwPrivTable, sizeof(rIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* wext_get_priv */ - -#endif /* WIRELESS_EXT */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_wext_priv.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_wext_priv.c deleted file mode 100755 index f9d79f7c53ea..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/gl_wext_priv.c +++ /dev/null @@ -1,2265 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_wext_priv.c#4 $ -*/ - -/*! \file gl_wext_priv.c - \brief This file includes private ioctl support. -*/ - - - -/* -** $Log: gl_wext_priv.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 20 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function[WCXRP00001202] [MT6628 Wi-Fi][FW] Adding the New PN init code - * use return to avoid the ioctl return not supported - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Fixed typo. - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 24 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * correct typo for NVRAM access. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable OID_CUSTOM_MTK_WIFI_TEST for RFTest & META tool - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support -** \main\maintrunk.MT5921\32 2009-10-08 10:33:25 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\31 2009-09-29 16:46:21 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\30 2009-09-29 14:46:47 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\29 2009-09-29 14:28:48 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\28 2009-09-28 22:21:38 GMT mtk01090 -** Refine lines to supress compile warning -** \main\maintrunk.MT5921\27 2009-09-28 20:19:14 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\26 2009-08-18 22:56:53 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\25 2009-05-07 22:26:15 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\24 2009-04-29 10:07:05 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\23 2009-04-24 09:09:45 GMT mtk01088 -** mark the code not used at linux supplicant v0.6.7 -** \main\maintrunk.MT5921\22 2008-11-24 21:03:51 GMT mtk01425 -** 1. Add PTA_ENABLED flag -** \main\maintrunk.MT5921\21 2008-08-29 14:55:59 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\20 2008-07-16 15:23:20 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\19 2008-07-15 17:43:11 GMT mtk01084 -** modify variable name -** \main\maintrunk.MT5921\18 2008-07-14 14:37:58 GMT mtk01104 -** Add exception handle about length in function priv_set_struct() -** \main\maintrunk.MT5921\17 2008-07-14 13:55:32 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\16 2008-07-09 00:20:15 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\15 2008-06-02 11:15:22 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\14 2008-05-30 19:31:07 GMT mtk01461 -** Add IOCTL for Power Mode -** \main\maintrunk.MT5921\13 2008-05-30 18:57:15 GMT mtk01461 -** Not use wlanoidSetCSUMOffloadForLinux() -** \main\maintrunk.MT5921\12 2008-05-30 15:13:18 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\11 2008-05-29 14:16:31 GMT mtk01084 -** rename for wlanoidSetBeaconIntervalForLinux -** \main\maintrunk.MT5921\10 2008-04-17 23:06:37 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\9 2008-03-31 21:00:55 GMT mtk01461 -** Add priv IOCTL for VOIP setting -** \main\maintrunk.MT5921\8 2008-03-31 13:49:43 GMT mtk01461 -** Add priv ioctl to turn on / off roaming -** \main\maintrunk.MT5921\7 2008-03-26 15:35:14 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\6 2008-03-11 14:50:59 GMT mtk01461 -** Unify priv ioctl -** \main\maintrunk.MT5921\5 2007-11-06 19:32:30 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\4 2007-10-30 12:01:39 GMT MTK01425 -** 1. Update wlanQueryInformation and wlanSetInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext_priv.h" -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NUM_SUPPORTED_OIDS (sizeof(arWlanOidReqTable) / sizeof(WLAN_REQ_ENTRY)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -#if 0 /* CFG_SUPPORT_WPS */ -static int -priv_set_appie ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); - -static int -priv_set_filter ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); -#endif /* CFG_SUPPORT_WPS */ - -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ); - -#if 0 -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_8 aucOidBuf[4096] = {0}; - -/* OID processing table */ -/* Order is important here because the OIDs should be in order of - increasing value for binary searching. */ -static WLAN_REQ_ENTRY arWlanOidReqTable[] = { - /* - {(NDIS_OID)rOid, - (PUINT_8)pucOidName, - fgQryBufLenChecking, fgSetBufLenChecking, fgIsHandleInGlueLayerOnly, u4InfoBufLen, - pfOidQueryHandler, - pfOidSetHandler} - */ - /* General Operational Characteristics */ - - /* Ethernet Operational Characteristics */ - {OID_802_3_CURRENT_ADDRESS, - DISP_STRING("OID_802_3_CURRENT_ADDRESS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 6, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentAddr, - NULL}, - - /* OID_802_3_MULTICAST_LIST */ - /* OID_802_3_MAXIMUM_LIST_SIZE */ - /* Ethernet Statistics */ - - /* NDIS 802.11 Wireless LAN OIDs */ - {OID_802_11_SUPPORTED_RATES, - DISP_STRING("OID_802_11_SUPPORTED_RATES"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_RATES_EX), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySupportedRates, - NULL}, - /* - {OID_802_11_CONFIGURATION, - DISP_STRING("OID_802_11_CONFIGURATION"), - TRUE, TRUE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_802_11_CONFIG_T), - (PFN_OID_HANDLER_FUNC_REQ)reqExtQueryConfiguration, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetConfiguration}, - */ - {OID_PNP_SET_POWER, - DISP_STRING("OID_PNP_SET_POWER"), - TRUE, FALSE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_DEVICE_POWER_STATE), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetAcpiDevicePowerState}, - - /* Custom OIDs */ - {OID_CUSTOM_OID_INTERFACE_VERSION, - DISP_STRING("OID_CUSTOM_OID_INTERFACE_VERSION"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryOidInterfaceVersion, - NULL}, - - /* -#if PTA_ENABLED - {OID_CUSTOM_BT_COEXIST_CTRL, - DISP_STRING("OID_CUSTOM_BT_COEXIST_CTRL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_BT_COEXIST_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtCoexistCtrl}, -#endif - */ - - /* - {OID_CUSTOM_POWER_MANAGEMENT_PROFILE, - DISP_STRING("OID_CUSTOM_POWER_MANAGEMENT_PROFILE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPwrMgmtProfParam, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPwrMgmtProfParam}, - {OID_CUSTOM_PATTERN_CONFIG, - DISP_STRING("OID_CUSTOM_PATTERN_CONFIG"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_PATTERN_SEARCH_CONFIG_STRUC_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPatternConfig}, - {OID_CUSTOM_BG_SSID_SEARCH_CONFIG, - DISP_STRING("OID_CUSTOM_BG_SSID_SEARCH_CONFIG"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBgSsidParam}, - {OID_CUSTOM_VOIP_SETUP, - DISP_STRING("OID_CUSTOM_VOIP_SETUP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryVoipConnectionStatus, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetVoipConnectionStatus}, - {OID_CUSTOM_ADD_TS, - DISP_STRING("OID_CUSTOM_ADD_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidAddTS}, - {OID_CUSTOM_DEL_TS, - DISP_STRING("OID_CUSTOM_DEL_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidDelTS}, - */ - - /* -#if CFG_LP_PATTERN_SEARCH_SLT - {OID_CUSTOM_SLT, - DISP_STRING("OID_CUSTOM_SLT"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySltResult, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSltMode}, -#endif - - {OID_CUSTOM_ROAMING_EN, - DISP_STRING("OID_CUSTOM_ROAMING_EN"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRoamingFunction, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetRoamingFunction}, - {OID_CUSTOM_WMM_PS_TEST, - DISP_STRING("OID_CUSTOM_WMM_PS_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWiFiWmmPsTest}, - {OID_CUSTOM_COUNTRY_STRING, - DISP_STRING("OID_CUSTOM_COUNTRY_STRING"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentCountry, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetCurrentCountry}, - -#if CFG_SUPPORT_802_11D - {OID_CUSTOM_MULTI_DOMAIN_CAPABILITY, - DISP_STRING("OID_CUSTOM_MULTI_DOMAIN_CAPABILITY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMultiDomainCap, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMultiDomainCap}, -#endif - - {OID_CUSTOM_GPIO2_MODE, - DISP_STRING("OID_CUSTOM_GPIO2_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_PARAM_GPIO2_MODE_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetGPIO2Mode}, - {OID_CUSTOM_CONTINUOUS_POLL, - DISP_STRING("OID_CUSTOM_CONTINUOUS_POLL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CONTINUOUS_POLL_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryContinuousPollInterval, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetContinuousPollProfile}, - {OID_CUSTOM_DISABLE_BEACON_DETECTION, - DISP_STRING("OID_CUSTOM_DISABLE_BEACON_DETECTION"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryDisableBeaconDetectionFunc, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisableBeaconDetectionFunc}, - */ - - /* WPS */ - /* - {OID_CUSTOM_DISABLE_PRIVACY_CHECK, - DISP_STRING("OID_CUSTOM_DISABLE_PRIVACY_CHECK"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisablePriavcyCheck}, - */ - - {OID_CUSTOM_MCR_RW, - DISP_STRING("OID_CUSTOM_MCR_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMcrRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMcrWrite}, - - {OID_CUSTOM_EEPROM_RW, - DISP_STRING("OID_CUSTOM_EEPROM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetEepromWrite}, - - {OID_CUSTOM_SW_CTRL, - DISP_STRING("OID_CUSTOM_SW_CTRL"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySwCtrlRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSwCtrlWrite}, - - {OID_CUSTOM_MEM_DUMP, - DISP_STRING("OID_CUSTOM_MEM_DUMP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MEM_DUMP_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMemDump, - NULL}, - - {OID_CUSTOM_TEST_MODE, - DISP_STRING("OID_CUSTOM_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetTestMode}, - - /* - {OID_CUSTOM_TEST_RX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_RX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestRxStatus, - NULL}, - {OID_CUSTOM_TEST_TX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_TX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestTxStatus, - NULL}, - */ - {OID_CUSTOM_ABORT_TEST_MODE, - DISP_STRING("OID_CUSTOM_ABORT_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAbortTestMode}, - {OID_CUSTOM_MTK_WIFI_TEST, - DISP_STRING("OID_CUSTOM_MTK_WIFI_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_MTK_WIFI_TEST_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestQueryAutoTest, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAutoTest}, - - /* OID_CUSTOM_EMULATION_VERSION_CONTROL */ - - /* BWCS */ -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {OID_CUSTOM_BWCS_CMD, - DISP_STRING("OID_CUSTOM_BWCS_CMD"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PTA_IPC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBT, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBT}, -#endif - -/* {OID_CUSTOM_SINGLE_ANTENNA, - DISP_STRING("OID_CUSTOM_SINGLE_ANTENNA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBtSingleAntenna, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtSingleAntenna}, - {OID_CUSTOM_SET_PTA, - DISP_STRING("OID_CUSTOM_SET_PTA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPta, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPta}, - */ - - { OID_CUSTOM_MTK_NVRAM_RW, - DISP_STRING("OID_CUSTOM_MTK_NVRAM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryNvramRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetNvramWrite }, - - { OID_CUSTOM_CFG_SRC_TYPE, - DISP_STRING("OID_CUSTOM_CFG_SRC_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_CFG_SRC_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCfgSrcType, - NULL }, - - { OID_CUSTOM_EEPROM_TYPE, - DISP_STRING("OID_CUSTOM_EEPROM_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_EEPROM_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromType, - NULL }, - -#if CFG_SUPPORT_WAPI - {OID_802_11_WAPI_MODE, - DISP_STRING("OID_802_11_WAPI_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiMode}, - {OID_802_11_WAPI_ASSOC_INFO, - DISP_STRING("OID_802_11_WAPI_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiAssocInfo}, - {OID_802_11_SET_WAPI_KEY, - DISP_STRING("OID_802_11_SET_WAPI_KEY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_WPI_KEY_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiKey}, -#endif - -#if CFG_SUPPORT_WPS2 - {OID_802_11_WSC_ASSOC_INFO, - DISP_STRING("OID_802_11_WSC_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWSCAssocInfo}, -#endif -}; - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatching function for private ioctl region (SIOCIWFIRSTPRIV ~ -* SIOCIWLASTPRIV). -* -* \param[in] prNetDev Net device requested. -* \param[in] prIfReq Pointer to ifreq structure. -* \param[in] i4Cmd Command ID between SIOCIWFIRSTPRIV and SIOCIWLASTPRIV. -* -* \retval 0 for success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_support_ioctl ( - IN struct net_device *prNetDev, - IN OUT struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_request_info rIwReqInfo; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case IOCTL_SET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_set_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_GET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_get_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_SET_STRUCT: - case IOCTL_SET_STRUCT_FOR_EM: - return priv_set_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - case IOCTL_GET_STRUCT: - return priv_get_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - default: - return -EOPNOTSUPP; - - } /* end of switch */ - -}/* priv_support_ioctl */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_PTA_IPC_T prPtaIpc; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_MODE: - //printk("TestMode=%ld\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY) { - prNdisReq->ndisOidCmd = OID_CUSTOM_TEST_MODE; - } - else if (pu4IntBuf[1] == 0) { - prNdisReq->ndisOidCmd = OID_CUSTOM_ABORT_TEST_MODE; - } - else { - status = 0; - break; - } - prNdisReq->inNdisOidlength = 0; - prNdisReq->outNdisOidLength = 0; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY && - pu4IntBuf[2] == PRIV_CMD_TEST_MAGIC_KEY) { - prGlueInfo->fgMcrAccessAllowed = TRUE; - } - status = 0; - break; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; -#endif - - case PRIV_CMD_SW_CTRL: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - case PRIV_CMD_CSUM_OFFLOAD: - { - UINT_32 u4CSUMFlags; - - - if (pu4IntBuf[1] == 1) { - u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - } - else if (pu4IntBuf[1] == 0) { - u4CSUMFlags = 0; - } - else { - return -EINVAL; - } - - if (kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen - ) == WLAN_STATUS_SUCCESS) { - if (pu4IntBuf[1] == 1) { - prNetDev->features |= NETIF_F_HW_CSUM; - } else if (pu4IntBuf[1] == 0) { - prNetDev->features &= ~NETIF_F_HW_CSUM; - } - } - } - break; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - case PRIV_CMD_POWER_MODE: - kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - break; - - case PRIV_CMD_WMM_PS: - { - PARAM_CUSTOM_WMM_PS_TEST_STRUC_T rWmmPsTest; - - rWmmPsTest.bmfgApsdEnAc = (UINT_8)pu4IntBuf[1]; - rWmmPsTest.ucIsEnterPsAtOnce = (UINT_8)pu4IntBuf[2]; - rWmmPsTest.ucIsDisableUcTrigger = (UINT_8)pu4IntBuf[3]; - rWmmPsTest.reserved = 0; - - kalIoctl(prGlueInfo, - wlanoidSetWiFiWmmPsTest, - (PVOID)&rWmmPsTest, - sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - break; - - #if 0 - case PRIV_CMD_ADHOC_MODE: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAdHocMode, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - - case PRIV_CUSTOM_BWCS_CMD: - - DBGLOG(REQ, INFO, ("pu4IntBuf[1] = %x, size of PTA_IPC_T = %d.\n", pu4IntBuf[1], sizeof(PARAM_PTA_IPC_T))); - - prPtaIpc = (P_PTA_IPC_T) aucOidBuf; - prPtaIpc->u.aucBTPParams[0] = (UINT_8) (pu4IntBuf[1] >> 24); - prPtaIpc->u.aucBTPParams[1] = (UINT_8) (pu4IntBuf[1] >> 16); - prPtaIpc->u.aucBTPParams[2] = (UINT_8) (pu4IntBuf[1] >> 8); - prPtaIpc->u.aucBTPParams[3] = (UINT_8) (pu4IntBuf[1]); - - DBGLOG(REQ, INFO, ("BCM BWCS CMD : PRIV_CUSTOM_BWCS_CMD : aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3])); - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - sizeof(PARAM_PTA_IPC_T), - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - - case PRIV_CMD_BAND_CONFIG: - { - DBGLOG(INIT, INFO, ("CMD set_band=%u\n", pu4IntBuf[1])); - } - break; - -#if CFG_ENABLE_WIFI_DIRECT - case PRIV_CMD_P2P_MODE: - { - PARAM_CUSTOM_P2P_SET_STRUC_T rSetP2P; - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - - rSetP2P.u4Enable = pu4IntBuf[1]; - rSetP2P.u4Mode = pu4IntBuf[2]; - - if(!rSetP2P.u4Enable) { - p2pNetUnregister(prGlueInfo, TRUE); - } - - rWlanStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pMode, - (PVOID)&rSetP2P, /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if(rSetP2P.u4Enable) { - p2pNetRegister(prGlueInfo, TRUE); - } - - - } - break; -#endif - - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - /* - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], 4)) { - printk(KERN_NOTICE "priv_get_int() copy_to_user oidBuf fail(3)\n"); - return -EFAULT; - } - */ - } - return status; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; -#endif - - case PRIV_CMD_DUMP_MEM: - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - -#if 1 - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } -#endif - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MEM_DUMP; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[0]; - } - return status; - - case PRIV_CMD_SW_CTRL: - //printk(" addr=0x%08lx\n", pu4IntBuf[1]); - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_POWER_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_ADHOC_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAdHocMode, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - #endif - - case PRIV_CMD_BAND_CONFIG: - DBGLOG(INIT, INFO, ("CMD get_band=\n")); - prIwReqData->mode = 0; - return status; - - default: - break; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i, j = 0; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - if (kalIsAPmode(prGlueInfo)) { - for (i = 0; i < NumOfChannel; i++) { - if ((aucChannelList[i].ucChannelNum <= 13) || - (aucChannelList[i].ucChannelNum == 36 || aucChannelList[i].ucChannelNum == 40 || - aucChannelList[i].ucChannelNum == 44 || aucChannelList[i].ucChannelNum == 48)) { - ch[j] = (INT_32)aucChannelList[i].ucChannelNum; - j++; - } - } - } - else { - for (j = 0; j < NumOfChannel; j++) { - ch[j] = (INT_32)aucChannelList[j].ucChannelNum; - } - } - - prIwReqData->data.length = j; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } - - case PRIV_CMD_GET_BUILD_DATE_CODE: - { - UINT_8 aucBuffer[16]; - - if(kalIoctl(prGlueInfo, - wlanoidQueryBuildDateCode, - (PVOID)aucBuffer, - sizeof(UINT_8) * 16, - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen) == WLAN_STATUS_SUCCESS) { - prIwReqData->data.length = sizeof(UINT_8) * 16; - - if (copy_to_user(prIwReqData->data.pointer, aucBuffer, prIwReqData->data.length)) { - return -EFAULT; - } - else - return status; - } - else { - return -EFAULT; - } - } - - default: - return -EOPNOTSUPP; - } - - return status; -} /* priv_get_int */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int array handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd, u4BufLen; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_SET_TX_POWER: - { - INT_32 *setting = prIwReqData->data.pointer; - UINT_16 i; - -#if 0 - printk("Tx power num = %d\n", prIwReqData->data.length); - - printk("Tx power setting = %d %d %d %d\n", - setting[0], setting[1], setting[2], setting[3]); -#endif - prTxpwr = &prGlueInfo->rTxPwr; - if (setting[0] == 0 && prIwReqData->data.length == 4 /* argc num */) { - /* 0 (All networks), 1 (legacy STA), 2 (Hotspot AP), 3 (P2P), 4 (BT over Wi-Fi) */ - if (setting[1] == 1 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GLegacyStaPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GLegacyStaPwrOffset = setting[3]; - } - if (setting[1] == 2 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GHotspotPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GHotspotPwrOffset = setting[3]; - } - if (setting[1] == 3 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GP2pPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GP2pPwrOffset = setting[3]; - } - if (setting[1] == 4 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GBowPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GBowPwrOffset = setting[3]; - } - } - else if (setting[0] == 1 && prIwReqData->data.length == 2) { - prTxpwr->ucConcurrencePolicy = setting[1]; - } - else if (setting[0] == 2 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<14; i++) - prTxpwr->acTxPwrLimit2G[i] = setting[2]; - } - else if (setting[1] <= 14) - prTxpwr->acTxPwrLimit2G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 3 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<4; i++) - prTxpwr->acTxPwrLimit5G[i] = setting[2]; - } - else if (setting[1] <= 4) - prTxpwr->acTxPwrLimit5G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 4 && prIwReqData->data.length == 2) { - if (setting[1] == 0) { - wlanDefTxPowerCfg(prGlueInfo->prAdapter); - } - rStatus = kalIoctl(prGlueInfo, - wlanoidSetTxPower, - prTxpwr, - sizeof(SET_TXPWR_CTRL_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - } - else - return -EFAULT; - } - return status; - default: - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int array handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - for (i = 0; i < NumOfChannel; i++) { - ch[i] = (INT_32)aucChannelList[i].ucChannelNum; - } - - prIwReqData->data.length = NumOfChannel; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } - default: - break; - } - - return status; -} /* priv_get_int */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set structure handler. -* -* \param[in] pDev Net device requested. -* \param[in] prIwReqData Pointer to iwreq_data structure. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - int status = 0; - //WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4CmdLen = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - PUINT_32 pu4IntBuf = NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - //ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - //ASSERT(pcExtra); - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwReqData)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - - switch (u4SubCmd) { -#if 0 //PTA_ENABLED - case PRIV_CMD_BT_COEXIST: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_CUSTOM_BT_COEXIST_T) >= u4CmdLen); - if (sizeof(PARAM_CUSTOM_BT_COEXIST_T) < u4CmdLen) { - return -EFAULT; - } - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } - - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBtCoexistCtrl, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); - if (WLAN_STATUS_SUCCESS != rStatus) { - status = -EFAULT; - } - break; -#endif - - case PRIV_CUSTOM_BWCS_CMD: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_PTA_IPC_T) >= u4CmdLen); - if (sizeof(PARAM_PTA_IPC_T) < u4CmdLen) { - return -EFAULT; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("ucCmdLen = %d, size of PTA_IPC_T = %d, prIwReqData->data = 0x%x.\n", u4CmdLen, sizeof(PARAM_PTA_IPC_T), prIwReqData->data)); - - DBGLOG(REQ, INFO, ("priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - )); - - DBGLOG(REQ, INFO, ("*pcExtra = 0x%x\n", *pcExtra)); - #endif - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("priv_set_struct(): BWCS CMD = %02x%02x%02x%02x\n", - aucOidBuf[2], aucOidBuf[3], aucOidBuf[4], aucOidBuf[5])); -#endif - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - -#if 1 - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - -#if CFG_SUPPORT_WPS2 - case PRIV_CMD_WSC_PROBE_REQ: - { - /* retrieve IE for Probe Request */ - if (prIwReqData->data.length > 0) { - if (copy_from_user(prGlueInfo->aucWSCIE, prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prGlueInfo->u2WSCIELen = prIwReqData->data.length; - } - else { - prGlueInfo->u2WSCIELen = 0; - } - } - break; -#endif - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - if (!kalMemCmp(&aucOidBuf[0], pcExtra, prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("pcExtra buffer is valid\n")); - } - else - DBGLOG(REQ, INFO, ("pcExtra 0x%p\n", pcExtra)); - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0], &u4BufLen); - /* Copy result to user space */ - ((P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0])->outNdisOidLength = u4BufLen; - - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("copy_to_user oidBuf fail\n")); - status = -EFAULT; - } - - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - //kalMemCopy(&prNdisReq->ndisOidContent[0], prIwReqData->data.pointer, 8); - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - default: - return -EOPNOTSUPP; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get struct handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] cmd Private sub-command. -* -* \retval 0 For success. -* \retval -EFAULT If copy from user space buffer fail. -* \retval -EOPNOTSUPP Parameter "cmd" not recognized. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq= NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - PUINT_32 pu4IntBuf = NULL; - int status = 0; - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - ASSERT(prNetDev); - ASSERT(prIwReqData); - if (!prNetDev || !prIwReqData) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid param(0x%p, 0x%p)\n", - prNetDev, prIwReqData)); - return -EINVAL; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - memset(aucOidBuf, 0, sizeof(aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - sizeof(NDIS_TRANSPORT_STRUCT))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0]; -#if 0 - printk(KERN_NOTICE "\n priv_get_struct cmd 0x%02x len:%d OID:0x%08x OID Len:%d\n", - cmd, - pIwReq->u.data.length, - ndisReq->ndisOidCmd, - ndisReq->inNdisOidlength); -#endif - if (priv_get_ndis(prNetDev, prNdisReq, &u4BufLen) == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - u4BufLen + sizeof(NDIS_TRANSPORT_STRUCT) - sizeof(prNdisReq->ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(1)\n")); - return -EFAULT; - } - return 0; - } - else { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - return -EFAULT; - } - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - //printk("len=%d Result=%08lx\n", u4BufLen, *(PUINT_32)&prNdisReq->ndisOidContent[4]); - - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], - 4 /* OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent)*/)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - } - return 0; - break; - default: - DBGLOG(REQ, WARN, ("get struct cmd:0x%lx\n", u4SubCmd)); - return -EOPNOTSUPP; - } -} /* priv_get_struct */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a set operation for a single OID. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4SetInfoLen = 0; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Set OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - if (NULL == prWlanReqEntry->pfOidSetHandler) { - //WARNLOG(("Set %s: Null set handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgSetBufLenChecking) { - if (prNdisReq->inNdisOidlength != prWlanReqEntry->u4InfoBufLen) { - DBGLOG(REQ, WARN, ("Set %s: Invalid length (current=%ld, needed=%ld)\n", - prWlanReqEntry->pucOidName, - prNdisReq->inNdisOidlength, - prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - return -EINVAL; - } - } - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidSetHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4SetInfoLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4SetInfoLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EFAULT; - } - - return 0; -} /* priv_set_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a query operation for a single OID. Basically we -* return information about the current state of the OID in question. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL invalid input parameters -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - UINT_32 u4BufLen = 0; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Query OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - - if (NULL == prWlanReqEntry->pfOidQueryHandler) { - //WARNLOG(("Query %s: Null query handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgQryBufLenChecking) { - if (prNdisReq->inNdisOidlength < prWlanReqEntry->u4InfoBufLen) { - /* Not enough room in InformationBuffer. Punt */ - //WARNLOG(("Query %s: Buffer too short (current=%ld, needed=%ld)\n", - //prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - - status = WLAN_STATUS_INVALID_LENGTH; - return -EINVAL; - } - } - - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidQueryHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4BufLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4BufLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EOPNOTSUPP; - } - - return 0; -} /* priv_get_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search desired OID. -* -* \param rOid[in] Desired NDIS_OID -* \param ppWlanReqEntry[out] Found registered OID entry -* -* \retval TRUE: Matched OID is found -* \retval FALSE: No matched OID is found -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ) -{ - INT_32 i, j, k; - - i = 0; - j = NUM_SUPPORTED_OIDS - 1; - - while (i <= j) { - k = (i + j) / 2; - - if (rOid == arWlanOidReqTable[k].rOid) { - *ppWlanReqEntry = &arWlanOidReqTable[k]; - return TRUE; - } else if (rOid < arWlanOidReqTable[k].rOid) { - j = k - 1; - } else { - i = k + 1; - } - } - - return FALSE; -} /* reqSearchSupportedOidEntry */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the radio configuration used in IBSS -* mode and RF test mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[out] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_802_11_CONFIG_T prQueryConfig = (P_PARAM_802_11_CONFIG_T)pvQueryBuffer; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen = 0; - - DEBUGFUNC("wlanoidQueryConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_CONFIG_T); - if (u4QueryBufferLen < sizeof(PARAM_802_11_CONFIG_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - kalMemZero(prQueryConfig, sizeof(PARAM_802_11_CONFIG_T)); - - /* Update the current radio configuration. */ - prQueryConfig->u4Length = sizeof(PARAM_802_11_CONFIG_T); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - prQueryConfig->rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - return rStatus; - -} /* end of reqExtQueryConfiguration() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the radio configuration used in IBSS -* mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_PARAM_802_11_CONFIG_T prNewConfig = (P_PARAM_802_11_CONFIG_T)pvSetBuffer; - UINT_32 u4SetInfoLen = 0; - - DEBUGFUNC("wlanoidSetConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_802_11_CONFIG_T); - - if (u4SetBufferLen < *pu4SetInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* OID_802_11_CONFIGURATION. If associated, NOT_ACCEPTED shall be returned. */ - if (prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - ASSERT(pvSetBuffer); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - return rStatus; - -} /* end of reqExtSetConfiguration() */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set beacon detection function enable/disable state -* This is mainly designed for usage under BT inquiry state (disable function). -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prGlueInfo); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - /* WIFI is enabled, when ACPI is D0 (ParamDeviceStateD0 = 1). And vice versa */ - - //rStatus = wlanSetInformation(prGlueInfo->prAdapter, - // wlanoidSetAcpiDevicePowerState, - // pvSetBuffer, - // u4SetBufferLen, - // pu4SetInfoLen); - return rStatus; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/arm.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/arm.c deleted file mode 100755 index 4322fa303a71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/arm.c +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** -*[File] mt6516-evb.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* dummy file for build system -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: mt6516-evb.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/hif.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/hif.h deleted file mode 100755 index 23eac4684d56..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/hif.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif.h#1 $ -*/ - -/*! \file "hif.h" - \brief Functions for the driver to register bus and setup the IRQ - - Functions for the driver to register bus and setup the IRQ -*/ - - - -/* -** $Log: hif.h $ - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 17 2010 cp.wu - * NULL - * add ENE SDIO host workaround for x86 linux platform. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\4 2009-10-20 17:38:28 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\3 2009-09-28 20:19:20 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\2 2009-08-18 22:57:05 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\2 2008-09-22 23:18:17 GMT mtk01461 -** Update driver for code review -** Revision 1.1 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -*/ - -#ifndef _HIF_H -#define _HIF_H - - -#if MTK_WCN_HIF_SDIO -#include "hif_sdio.h" -#endif - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define SDIO_X86_WORKAROUND_WRITE_MCR 0x00C4 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* host interface's private data structure, which is attached to os glue -** layer info structure. - */ -typedef struct _GL_HIF_INFO_T { -#if MTK_WCN_HIF_SDIO - MTK_WCN_HIF_SDIO_CLTCTX cltCtx; - const MTK_WCN_HIF_SDIO_FUNCINFO *prFuncInfo; -#else - struct sdio_func *func; -#endif - BOOLEAN fgIntReadClear; - BOOLEAN fgMbxReadClear; -} GL_HIF_INFO_T, *P_GL_HIF_INFO_T; - - -#if CFG_DBG_GPIO_PINS - -extern void -mtk_wcn_stp_debug_gpio_assert(UINT_32 dwIndex, UINT_32 dwMethod); - - -/* Platform DEPENDENT configurations: MT6516 GPIO pin name */ -#define GPIO_6516(x) (GPIO##x) -#define GPIO_PLATFORM(x) GPIO_6516(x) - -/* Platform independent configurations */ -#define DBG_TIE_DIR 0x40000000UL -#define DBG_LOW 0x0UL -#define DBG_HIGH 0x1UL -#define DBG_TIE_LOW (DBG_TIE_DIR | DBG_LOW) -#define DBG_TIE_HIGH (DBG_TIE_DIR | DBG_HIGH) - -#define DBG_TOGGLE(x) (0x80000000UL | x) -#define DBG_TOGGLE_NUM(x) (x & 0xFFF) -#define GPIO_INVALID 0xFFFF - -typedef enum { - IDX_ERR = 0, - IDX_TX_THREAD, - IDX_TX_REQ, - IDX_TX_PORT_WRITE, - IDX_STP_MTX_BT, - IDX_STP_MTX_FM, /* 5 */ - IDX_STP_MTX_GPS, - IDX_STP_MTX_WIFI, - IDX_STP_MTX_WMT, - IDX_LOOP_CNT, - IDX_NO_BUF, /*10 */ - IDX_BT_TX, - IDX_BT_RX, - IDX_GPS_RX, - IDX_GPS_2, - IDX_GPS_3, - IDX_GPS_TX, - IDX_STP_MAX -} DBG_PIN; - -#define DBG_MTX_OFFSET (IDX_STP_MTX_BT) /* index of mutex0 */ -#endif -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -glRegisterBus( - probe_card pfProbe, - remove_card pfRemove - ); - -VOID -glUnregisterBus( - remove_card pfRemove - ); - -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ); - -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ); - -BOOL -glBusInit ( - PVOID pvData - ); - -VOID -glBusRelease ( - PVOID pData - ); - -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ); - -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ); - -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _HIF_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/hif_sdio.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/hif_sdio.h deleted file mode 100755 index a2375fd34894..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/hif_sdio.h +++ /dev/null @@ -1,277 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif_sdio.h#2 $ -*/ - -/*! \file "hif_sdio.h" - \brief - - -*/ - -/* -** $Log: $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 02 2012 terry.wu - * NULL - * Fix build error if HAVE_AEE_FEATURE = n - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 07 25 2010 george.kuo - * - * Move hif_sdio driver to linux directory. - * - * 07 23 2010 george.kuo - * - * Add MT6620 driver source tree - * , including char device driver (wmt, bt, gps), stp driver, interface driver (tty ldisc and hif_sdio), and bt hci driver. -** -** -*/ - -#ifndef _HIF_SDIO_H -#define _HIF_SDIO_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#define HIF_SDIO_DEBUG (0) /* 0:trun off debug msg and assert, 1:trun off debug msg and assert */ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "mtk_porting.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CFG_CLIENT_COUNT (8) - -#define HIF_DEFAULT_BLK_SIZE (256) -#define HIF_DEFAULT_VENDOR (0x037A) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Function info provided by client driver */ -typedef struct _MTK_WCN_HIF_SDIO_FUNCINFO MTK_WCN_HIF_SDIO_FUNCINFO; - -/* Client context provided by hif_sdio driver for the following function call */ -typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX; - -/* Callback functions provided by client driver */ -typedef INT32 (*MTK_WCN_HIF_SDIO_PROBE)(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *); -typedef INT32 (*MTK_WCN_HIF_SDIO_REMOVE)(MTK_WCN_HIF_SDIO_CLTCTX); -typedef INT32 (*MTK_WCN_HIF_SDIO_IRQ)(MTK_WCN_HIF_SDIO_CLTCTX); - -/* Function info provided by client driver */ -struct _MTK_WCN_HIF_SDIO_FUNCINFO { - UINT16 manf_id; /* TPLMID_MANF: manufacturer ID */ - UINT16 card_id; /* TPLMID_CARD: card ID */ - UINT16 func_num; /* Function Number */ - UINT16 blk_sz; /* Function block size */ -}; - -/* Client info provided by client driver */ -typedef struct _MTK_WCN_HIF_SDIO_CLTINFO { - const MTK_WCN_HIF_SDIO_FUNCINFO *func_tbl; /* supported function info table */ - UINT32 func_tbl_size; /* supported function table info element number */ - MTK_WCN_HIF_SDIO_PROBE hif_clt_probe; /* callback function for probing */ - MTK_WCN_HIF_SDIO_REMOVE hif_clt_remove; /* callback function for removing */ - MTK_WCN_HIF_SDIO_IRQ hif_clt_irq; /* callback function for interrupt handling */ -} MTK_WCN_HIF_SDIO_CLTINFO; - -/* function info provided by registed function */ -typedef struct _MTK_WCN_HIF_SDIO_REGISTINFO { - const MTK_WCN_HIF_SDIO_CLTINFO *sdio_cltinfo; /* client's MTK_WCN_HIF_SDIO_CLTINFO pointer */ - const MTK_WCN_HIF_SDIO_FUNCINFO *func_info; /* supported function info pointer */ -} MTK_WCN_HIF_SDIO_REGISTINFO; - -/* Card info provided by probed function */ -typedef struct _MTK_WCN_HIF_SDIO_PROBEINFO { - struct sdio_func* func; /* probed sdio function pointer */ - INT8 clt_idx; /* registered function table info element number (initial value is -1) */ - MTK_WCN_BOOL interrupted; /* TRUE: interrupted, FALSE: not interrupted */ - void* private_data_p; /* clt's private data pointer */ -} MTK_WCN_HIF_SDIO_PROBEINFO; - -/* work queue info needed by worker */ -typedef struct _MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO { - struct work_struct probe_work; /* work queue structure */ - MTK_WCN_HIF_SDIO_REGISTINFO *registinfo_p; /* MTK_WCN_HIF_SDIO_REGISTINFO pointer of the client */ - INT8 probe_idx; /* probed function table info element number (initial value is -1) */ -} MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO; - -/* error code returned by hif_sdio driver (use NEGATIVE number) */ -typedef enum { - HIF_SDIO_ERR_SUCCESS = 0, - HIF_SDIO_ERR_FAIL, /* generic error */ - HIF_SDIO_ERR_INVALID_PARAM, - HIF_SDIO_ERR_DUPLICATED, - HIF_SDIO_ERR_UNSUP_MANF_ID, - HIF_SDIO_ERR_UNSUP_CARD_ID, - HIF_SDIO_ERR_INVALID_FUNC_NUM, - HIF_SDIO_ERR_INVALID_BLK_SZ, -} MTK_WCN_HIF_SDIO_ERR ; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/*! - * \brief A macro used to describe an SDIO function - * - * Fill an MTK_WCN_HIF_SDIO_FUNCINFO structure with function-specific information - * - * \param manf the 16 bit manufacturer id - * \param card the 16 bit card id - * \param func the 16 bit function number - * \param b_sz the 16 bit function block size - */ -#define MTK_WCN_HIF_SDIO_FUNC(manf, card, func, b_sz) \ - .manf_id = (manf), .card_id = (card), .func_num = (func), .blk_sz = (b_sz) - -/*! - * \brief A debug print used to print debug messages while compiler flag HIF_SDIO_DEBUG on. - * - */ -#if HIF_SDIO_DEBUG -#define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__, ## args) -#else -#define DPRINTK(fmt, args...) -#endif - -/*! - * \brief ASSERT function definition. - * - */ -#if HIF_SDIO_DEBUG -#define ASSERT(expr) if ( !(expr) ) { \ - printk("assertion failed! %s[%d]: %s\n",\ - __FUNCTION__, __LINE__, #expr); \ - BUG_ON( !(expr) );\ - } -#else -#define ASSERT(expr) do {} while(0) -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*! - * \brief MTK hif sdio client registration function - * - * Client uses this function to do hif sdio registration - * - * \param pinfo a pointer of client's information - * - * \retval 0 register successfully - * \retval < 0 error code - */ -extern INT32 mtk_wcn_hif_sdio_client_reg ( - const MTK_WCN_HIF_SDIO_CLTINFO *pinfo - ); - -extern INT32 mtk_wcn_hif_sdio_client_unreg ( - const MTK_WCN_HIF_SDIO_CLTINFO *pinfo - ); - -extern INT32 mtk_wcn_hif_sdio_readb ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT8 pvb - ); - -extern INT32 mtk_wcn_hif_sdio_writeb ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - UINT8 vb - ); - -extern INT32 mtk_wcn_hif_sdio_readl ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pvl - ); - -extern INT32 mtk_wcn_hif_sdio_writel ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - UINT32 vl - ); - -extern INT32 mtk_wcn_hif_sdio_read_buf ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pbuf, - UINT32 len - ); - -extern INT32 mtk_wcn_hif_sdio_write_buf ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pbuf, - UINT32 len - ); - -extern void mtk_wcn_hif_sdio_set_drvdata( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - void* private_data_p - ); - -extern void* mtk_wcn_hif_sdio_get_drvdata( - MTK_WCN_HIF_SDIO_CLTCTX ctx - ); - -extern void mtk_wcn_hif_sdio_get_dev( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - struct device **dev - ); -extern void mtk_wcn_hif_sdio_enable_irq( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - MTK_WCN_BOOL enable - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _HIF_SDIO_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/mtk_porting.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/mtk_porting.h deleted file mode 100755 index 37f96be599e0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/include/mtk_porting.h +++ /dev/null @@ -1,52 +0,0 @@ -/* porting layer */ -/* Android */ - -#ifndef _MTK_PORTING_H_ -#define _MTK_PORTING_H_ - -#include /* include stddef.h for NULL */ - -/* Type definition for signed integers */ -typedef signed char INT8, *PINT8; -typedef signed short INT16, *PINT16; -typedef signed int INT32, *PINT32; - -/* Type definition for unsigned integers */ -typedef unsigned char UINT8, *PUINT8; -typedef unsigned short UINT16, *PUINT16; -typedef unsigned int UINT32, *PUINT32; - -//typedef void VOID, *PVOID; - -typedef int MTK_WCN_BOOL; -#ifndef MTK_WCN_BOOL_TRUE -#define MTK_WCN_BOOL_FALSE ((MTK_WCN_BOOL) 0) -#define MTK_WCN_BOOL_TRUE ((MTK_WCN_BOOL) 1) -#endif - -typedef int MTK_WCN_MUTEX; - -typedef int MTK_WCN_TIMER; - -/* system APIs */ -/* mutex */ -typedef MTK_WCN_MUTEX (*MUTEX_CREATE)(const char * const name); -typedef INT32 (*MUTEX_DESTROY)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_LOCK)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_UNLOCK)(MTK_WCN_MUTEX mtx, unsigned long flags); -/* debug */ -typedef INT32 (*DBG_PRINT)(const char *str, ...); -typedef INT32 (*DBG_ASSERT)(INT32 expr, const char *file, INT32 line); -/* timer */ -typedef void (*MTK_WCN_TIMER_CB)(void); -typedef MTK_WCN_TIMER (*TIMER_CREATE)(const char * const name); -typedef INT32 (*TIMER_DESTROY)(MTK_WCN_TIMER tmr); -typedef INT32 (*TIMER_START)(MTK_WCN_TIMER tmr, UINT32 timeout, MTK_WCN_TIMER_CB tmr_cb, void *param); -typedef INT32 (*TIMER_STOP)(MTK_WCN_TIMER tmr); -/* kernel lib */ -typedef void* (*SYS_MEMCPY)(void *dest, const void *src, UINT32 n); -typedef void* (*SYS_MEMSET)(void *s, INT32 c, UINT32 n); -typedef INT32 (*SYS_SPRINTF)(char *str, const char *format, ...); - -#endif /* _MTK_PORTING_H_ */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/sdio.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/sdio.c deleted file mode 100755 index b6e0c57d79cf..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/sdio.c +++ /dev/null @@ -1,1324 +0,0 @@ -/****************************************************************************** -*[File] sdio.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* The program provides SDIO HIF driver -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: sdio.c $ - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 02 14 2012 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * include correct header file upon setting. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 17 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628 related definitions for Linux/Android driver. - * - * 05 18 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add device ID for MT5931. - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 15 2010 jeffrey.chang - * [WCXRP00000181] [MT6620 Wi-Fi][Driver] fix the driver message "GLUE_FLAG_HALT skip INT" during unloading - * Fix GLUE_FALG_HALT message which cause driver to hang - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * correct typo - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 18 2010 cp.wu - * NULL - * #if defined(__X86__) is not working, change to use #ifdef CONFIG_X86. - * - * 08 17 2010 cp.wu - * NULL - * add ENE SDIO host workaround for x86 linux platform. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Fix hotplug bug - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * clear sdio interrupt - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#if MTK_WCN_HIF_SDIO -#include "hif_sdio.h" -#else -#include -#include -#include -#include /* sdio_readl(), etc */ -#include -#endif - -#include -#ifndef CONFIG_X86 -#include -#endif - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#if CFG_DBG_GPIO_PINS/* FIXME: move to platform or custom header */ -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define HIF_SDIO_ERR_TITLE_STR "["CHIP_NAME"] SDIO Access Error!" -#define HIF_SDIO_ERR_DESC_STR "**SDIO Access Error**\n" - -#if MTK_WCN_HIF_SDIO - - -/* - * function prototypes - * - */ - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *); - -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX); -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX); - -/* - * sdio function info table - */ - -static MTK_WCN_HIF_SDIO_FUNCINFO funcInfo[] = { -#if defined(MT6620) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020c, 0x2, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018c, 0x2, 512) }, -#elif defined(MT5931) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x5931, 0x1, 512) }, -#elif defined(MT6628) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x6628, 0x1, 512) }, -#endif -}; - - -static MTK_WCN_HIF_SDIO_CLTINFO cltInfo = { - .func_tbl = funcInfo, - .func_tbl_size = sizeof(funcInfo)/sizeof(MTK_WCN_HIF_SDIO_FUNCINFO), - .hif_clt_probe = mtk_sdio_probe, - .hif_clt_remove = mtk_sdio_remove, - .hif_clt_irq = mtk_sdio_interrupt, -}; - -#else - -static const struct sdio_device_id mtk_sdio_ids[] = { -#if defined(MT6620) - { SDIO_DEVICE(0x037a, 0x020a) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020b) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020c) }, /* Not an SDIO standard class device */ -#elif defined(MT5931) - { SDIO_DEVICE(0x037a, 0x5931) }, /* Not an SDIO standard class device */ -#elif defined(MT6628) - { SDIO_DEVICE(0x037a, 0x6628) }, /* Not an SDIO standard class device */ -#endif - { /* end: all zeroes */ }, -}; - -MODULE_DEVICE_TABLE(sdio, mtk_sdio_ids); - -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static probe_card pfWlanProbe = NULL; -static remove_card pfWlanRemove = NULL; - - -#if (MTK_WCN_HIF_SDIO == 0) -static struct sdio_driver mtk_sdio_driver = { - .name = "wlan", /* "MTK SDIO WLAN Driver" */ - .id_table = mtk_sdio_ids, - .probe = NULL, - .remove = NULL, -}; -#endif - - -#if CFG_DBG_GPIO_PINS - -/* debug pins */ -UINT_32 dbgPinSTP[] = { - GPIO_PLATFORM(33)/* CMFLASH, IDX_ERR J613 */ - , GPIO_PLATFORM(62)/* EINT3, IDX_TX_THREAD */ - , GPIO_PLATFORM(80)/* SPI_CS_N, IDX_TX_REQ J613 */ - , GPIO_PLATFORM(81)/* SPI_SCK, IDX_TX_PORT_WRITE J613 */ - , GPIO_PLATFORM(17) /* CMRST, IDX_STP_MTX_BT J618 */ - , GPIO_PLATFORM(18) /* CMPDN, IDX_STP_MTX_FM J613 */ - , GPIO_PLATFORM(19) /* CMVREF,IDX_STP_MTX_GPS J613 */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WIFI */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WMT */ - , GPIO_PLATFORM(135) /* SCL2, IDX_LOOP_CNT J616 */ - , GPIO_PLATFORM(136) /* SDA2, IDX_NO_BUF J616 */ - , GPIO_PLATFORM(30) /* CAM_MECHSH0, IDX_BT_TX, J613 low-active */ - , GPIO_PLATFORM(31) /* CAM_MECHSH1, IDX_BT_RX, J613 low-active */ - , GPIO_PLATFORM(124) /* GPS_PWR_EN, ThreadDSPIn [GPS] */ - , GPIO_PLATFORM(125) /* GPS_SYNC, mtk_sys_msg_recv [GPS] */ - , GPIO_PLATFORM(21) /* GPS_EINT8, dump_nmea_data [GPS] */ - , GPIO_PLATFORM(29) /* CAM_STROBE, IDX_GPS_TX, J613 low-active */ - , GPIO_PLATFORM(20) /*CMHREF, J613 UNUSED */ -// , GPIO_6516(64) /* EINT5, REMOVED!!! for MT6620-Wi-Fi Int */ -// , GPIO_6516(122) /* BT_PWR_EN, REMOVED!!! for MT6620-PMU_EN */ -// , GPIO_6516(123) /* BT_RESET, REMOVED!!! for MT6620-RST */ -}; -#endif -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_DBG_GPIO_PINS -void debug_gpio_init(void) -{ - int i; - - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_pull_enable(dbgPinSTP[i], 0); /* disable pull */ - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_OUT); /* set output */ - mt_set_gpio_mode(dbgPinSTP[i], GPIO_MODE_00); /* set gpio mode */ - - /* toggle twice to check if ok: */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - } - //printk(KERN_INFO "[%s] initialization ok \n", __FUNCTION__); -} - -void debug_gpio_deinit(void) -{ - int i; - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_IN); - } - - //printk(KERN_INFO "[%s] k\n", __FUNCTION__); -} - -void mtk_wcn_stp_debug_gpio_assert(UINT_32 dwIndex, UINT_32 dwMethod) -{ - unsigned int i; - - if (dwIndex >= (sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]))) { - //printk(KERN_INFO "[%s] invalid dwIndex(%ld) \n", __FUNCTION__, dwIndex); - return; - } - - if (dwIndex > IDX_STP_MAX) { - //printk(KERN_INFO "[%s] dwIndex(%ld) > IDX_STP_MAX(%d) \n", __FUNCTION__, dwIndex, IDX_STP_MAX); - } - - if (GPIO_INVALID == dbgPinSTP[dwIndex]) { - return; - } - - if (dwMethod & DBG_TIE_DIR) { - if (dwMethod & DBG_HIGH) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - else { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - } - return; - } - - if (dwMethod & DBG_TOGGLE(0)) { - for (i = 0; i < DBG_TOGGLE_NUM(dwMethod); ++i) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - return; - } - - return; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO interrupt callback function -* -* \param[in] func pointer to SDIO handle -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT32 ret = 0; - - prGlueInfo = mtk_wcn_hif_sdio_get_drvdata(cltCtx); - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return (-HIF_SDIO_ERR_FAIL); - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - return ret; - } - - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); - - return ret; -} - -#else - -static unsigned int in_interrupt = 0; - -static void mtk_sdio_interrupt(struct sdio_func *func) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - int ret = 0; - - prGlueInfo = sdio_get_drvdata(func); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - return; - } - - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - - #if 0 - wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - //printk(KERN_INFO DRV_NAME"ignore pending interrupt\n"); - } - else { - wlanIST(prGlueInfo->prAdapter); - } - #endif - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO probe function -* -* \param[in] func pointer to SDIO handle -* \param[in] id pointer to SDIO device id table -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -// FIXME: global variable -static const MTK_WCN_HIF_SDIO_FUNCINFO *prFunc; - - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX cltCtx, const MTK_WCN_HIF_SDIO_FUNCINFO *prFuncInfo) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - - prFunc = prFuncInfo; - - if (pfWlanProbe((PVOID) &cltCtx) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -(HIF_SDIO_ERR_FAIL); - } else { - //printk(KERN_INFO DRV_NAME"mtk_wifi_sdio_probe() done(%d)\n", ret); - } - return ret; -} -#else -static int mtk_sdio_probe ( - struct sdio_func *func, - const struct sdio_device_id *id - ) -{ - int ret = 0; - int i = 0; - - //printk(KERN_INFO DRV_NAME "mtk_sdio_probe()\n"); - - ASSERT(func); - ASSERT(id); - - //printk(KERN_INFO DRV_NAME "Basic struct size checking...\n"); - //printk(KERN_INFO DRV_NAME "sizeof(struct device) = %d\n", sizeof(struct device)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_host) = %d\n", sizeof(struct mmc_host)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_card) = %d\n", sizeof(struct mmc_card)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_driver) = %d\n", sizeof(struct mmc_driver)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_data) = %d\n", sizeof(struct mmc_data)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_command) = %d\n", sizeof(struct mmc_command)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_request) = %d\n", sizeof(struct mmc_request)); - //printk(KERN_INFO DRV_NAME "sizeof(struct sdio_func) = %d\n", sizeof(struct sdio_func)); - - //printk(KERN_INFO DRV_NAME "Card information checking...\n"); - //printk(KERN_INFO DRV_NAME "func = 0x%p\n", func); - //printk(KERN_INFO DRV_NAME "Number of info = %d:\n", func->card->num_info); - - for (i = 0; i < func->card->num_info; i++) { - //printk(KERN_INFO DRV_NAME "info[%d]: %s\n", i, func->card->info[i]); - } - - sdio_claim_host(func); - ret = sdio_enable_func(func); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_enable_func failed!\n"); - goto out; - } - //printk(KERN_INFO DRV_NAME"sdio_enable_func done!\n"); - - if (pfWlanProbe((PVOID)func) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -1; - } - else { -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] init debug gpio, 20100815 \n", __FUNCTION__); - /* Debug pins initialization */ - debug_gpio_init(); -#endif - } - -out: - //printk(KERN_INFO DRV_NAME"mtk_sdio_probe() done(%d)\n", ret); - return ret; -} -#endif - - -#if MTK_WCN_HIF_SDIO -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - return ret; -} -#else -static void -mtk_sdio_remove ( - struct sdio_func *func - ) -{ - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove()\n"); - -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] deinit debug gpio \n", __FUNCTION__); - debug_gpio_deinit(); -#endif - - ASSERT(func); - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - sdio_claim_host(func); - sdio_disable_func(func); - //printk(KERN_INFO DRV_NAME"sdio_disable_func() done\n"); - sdio_release_host(func); - - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove() done\n"); -} -#endif - -#if (MTK_WCN_HIF_SDIO == 0) -static int -mtk_sdio_suspend ( - struct device * pDev, - pm_message_t state - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_suspend dev(0x%p)\n", pDev); - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - - return 0; -} - -int mtk_sdio_resume ( - struct device * pDev - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_resume dev(0x%p)\n", pDev); - - return 0; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register sdio bus to the os -* -* \param[in] pfProbe Function pointer to detect card -* \param[in] pfRemove Function pointer to remove card -* -* \return The result of registering sdio bus -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -glRegisterBus ( - probe_card pfProbe, - remove_card pfRemove - ) -{ - int ret = 0; - - ASSERT(pfProbe); - ASSERT(pfRemove); - - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - //printk(KERN_INFO "mtk_sdio: Copyright MediaTek Inc.\n"); - - pfWlanProbe = pfProbe; - pfWlanRemove = pfRemove; - -#if MTK_WCN_HIF_SDIO - /* register MTK sdio client */ - ret = ((mtk_wcn_hif_sdio_client_reg(&cltInfo) == HIF_SDIO_ERR_SUCCESS) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE); -#else - mtk_sdio_driver.probe = mtk_sdio_probe; - mtk_sdio_driver.remove = mtk_sdio_remove; - - mtk_sdio_driver.drv.suspend = mtk_sdio_suspend; - mtk_sdio_driver.drv.resume = mtk_sdio_resume; - - ret = (sdio_register_driver(&mtk_sdio_driver) == 0) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE; -#endif - - return ret; -} /* end of glRegisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will unregister sdio bus to the os -* -* \param[in] pfRemove Function pointer to remove card -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glUnregisterBus( - remove_card pfRemove - ) -{ - ASSERT(pfRemove); - pfRemove(); - -#if MTK_WCN_HIF_SDIO - /* unregister MTK sdio client */ - mtk_wcn_hif_sdio_client_unreg(&cltInfo); -#else - sdio_unregister_driver(&mtk_sdio_driver); -#endif - - return; -} /* end of glUnregisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function stores hif related info, which is initialized before. -* -* \param[in] prGlueInfo Pointer to glue info structure -* \param[in] u4Cookie Pointer to UINT_32 memory base variable for _HIF_HPI -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - - prHif = &prGlueInfo->rHifInfo; - -#if MTK_WCN_HIF_SDIO - //prHif->prFuncInfo = ((MTK_WCN_HIF_SDIO_FUNCINFO *) u4Cookie); - prHif->prFuncInfo = prFunc; - prHif->cltCtx = *((MTK_WCN_HIF_SDIO_CLTCTX *) u4Cookie); - mtk_wcn_hif_sdio_set_drvdata(prHif->cltCtx, prGlueInfo); - -#else - prHif->func = (struct sdio_func *) u4Cookie; - - //printk(KERN_INFO DRV_NAME"prHif->func->dev = 0x%p\n", &prHif->func->dev); - //printk(KERN_INFO DRV_NAME"prHif->func->vendor = 0x%04X\n", prHif->func->vendor); - //printk(KERN_INFO DRV_NAME"prHif->func->device = 0x%04X\n", prHif->func->device); - //printk(KERN_INFO DRV_NAME"prHif->func->func = 0x%04X\n", prHif->func->num); - - sdio_set_drvdata(prHif->func, prGlueInfo); - - SET_NETDEV_DEV(prGlueInfo->prDevHandler, &prHif->func->dev); -#endif - - return; -} /* end of glSetHifInfo() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clears hif related info. -* -* \param[in] prGlueInfo Pointer to glue info structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ) -{ - //P_GL_HIF_INFO_T prHif = NULL; - //ASSERT(prGlueInfo); - //prHif = &prGlueInfo->rHifInfo; - - return; -} /* end of glClearHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize bus operation and hif related information, request resources. -* -* \param[out] pvData A pointer to HIF-specific data type buffer. -* For eHPI, pvData is a pointer to UINT_32 type and stores a -* mapped base address. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOL -glBusInit ( - PVOID pvData - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - int ret = 0; - struct sdio_func *func = NULL; - - ASSERT(pvData); - - func = (struct sdio_func *) pvData; - - sdio_claim_host(func); - ret = sdio_set_block_size(func, 512); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 failed!\n"); - } - else { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 done!\n"); - } - - //printk(KERN_INFO DRV_NAME"param: func->cur_blksize(%d)\n", func->cur_blksize); - //printk(KERN_INFO DRV_NAME"param: func->max_blksize(%d)\n", func->max_blksize); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_size(%d)\n", func->card->host->max_blk_size); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_count(%d)\n", func->card->host->max_blk_count); -#endif - return TRUE; -} /* end of glBusInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus operation and release resources. -* -* \param[in] pvData A pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusRelease ( - PVOID pvData - ) -{ - - return; -} /* end of glBusRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup bus interrupt operation and interrupt handler for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pfnIsr A pointer to interrupt handler function. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \retval WLAN_STATUS_SUCCESS if success -* NEGATIVE_VALUE if fail -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - return -1; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - return -1; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_claim_irq(prHifInfo->func, mtk_sdio_interrupt); - sdio_release_host(prHifInfo->func); -#else - /* hif_sdio case */ - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - return -1; - } - prNetDevice = (struct net_device *) pvData; - - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - return -1; - } - - mtk_wcn_hif_sdio_enable_irq(prGlueInfo->rHifInfo.cltCtx, MTK_WCN_BOOL_TRUE); - -#endif - return ret; -} /* end of glBusSetIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus interrupt operation and disable interrupt handling for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - int ret = 0; - - ASSERT(pvData); - if (!pvData) { - //printk(KERN_INFO DRV_NAME"%s null pvData\n", __FUNCTION__); - return; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"%s no glue info\n", __FUNCTION__); - return; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_release_irq(prHifInfo->func); - sdio_release_host(prHifInfo->func); -#else - /* hif_sdio case */ - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - //printk(KERN_INFO DRV_NAME"%s null pvData\n", __FUNCTION__); - return; - } - prNetDevice = (struct net_device *) pvData; - - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"%s no glue info\n", __FUNCTION__); - return; - } - - mtk_wcn_hif_sdio_enable_irq(prGlueInfo->rHifInfo.cltCtx, MTK_WCN_BOOL_FALSE); - -#endif - - return; -} /* end of glBusreeIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] pu4Value Pointer to variable used to store read value -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ) -{ - int ret = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Value); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_readl(prGlueInfo->rHifInfo.cltCtx, u4Register, (PUINT32) pu4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - *pu4Value = sdio_readl(prGlueInfo->rHifInfo.func, u4Register, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readl() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readl() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] u4Value Value to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ) -{ - int ret = 0; - - ASSERT(prGlueInfo); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_writel(prGlueInfo->rHifInfo.cltCtx, u4Register, u4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - sdio_writel(prGlueInfo->rHifInfo.func, u4Value, u4Register, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writel() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writel() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be read -* \param[out] pucBuf Pointer to read buffer -* \param[in] u2ValidOutBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucDst = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortRead++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucDst = pucBuf; - - ASSERT(u2Len <= u2ValidOutBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, count); - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= (prGlueInfo->rHifInfo).prFuncInfo->blk_sz) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, (count+3)&~0x3U); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readsb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readsb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be write -* \param[in] pucBuf Pointer to write buffer -* \param[in] u2ValidInBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucSrc = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortWrite++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucSrc = pucBuf; - - ASSERT(u2Len <= u2ValidInBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { // block mode - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { // byte mode - - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, count); - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz)) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { // block mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { // byte mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, (count+3)&~0x3U); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writesb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writesb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port in byte with CMD52 -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Addr I/O port offset -* \param[in] ucData Single byte of data to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - sdio_writeb(prGlueInfo->rHifInfo.func, ucData, u4Addr, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#else - ret = mtk_wcn_hif_sdio_writeb(prGlueInfo->rHifInfo.cltCtx, u4Addr, ucData); -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writeb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writeb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; - -} /* end of kalDevWriteWithSdioCmd52() */ - - -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ) -{ - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/x86.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/x86.c deleted file mode 100755 index 4322fa303a71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/hif/sdio/x86.c +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** -*[File] mt6516-evb.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* dummy file for build system -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: mt6516-evb.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_cfg80211.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_cfg80211.h deleted file mode 100755 index 83f766c44580..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_cfg80211.h +++ /dev/null @@ -1,283 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_cfg80211.h#1 $ -*/ - -/*! \file gl_cfg80211.h - \brief This file is for Portable Driver linux cfg80211 support. -*/ - - - -/* -** $Log: gl_cfg80211.h $ -** -** 09 12 2012 wcpadmin -** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages -** . -** -** 08 30 2012 chinglan.wang -** [ALPS00349664] [6577JB][WIFI] Phone can not connect to AP secured with AES via WPS in 802.11n Only -** . - * -*/ - -#ifndef _GL_CFG80211_H -#define _GL_CFG80211_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#include "gl_os.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* cfg80211 hooks */ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ); - - -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - - -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - - -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - - -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - - -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - - -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ); - - -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ); - - -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ); - - -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ); - - -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ); - - -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - - -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ); - - -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#endif -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_CFG80211_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_kal.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_kal.h deleted file mode 100755 index c5310febeb79..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_kal.h +++ /dev/null @@ -1,2250 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_kal.h#1 $ -*/ - -/*! \file gl_kal.h - \brief Declaration of KAL functions - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - - - -/* -** $Log: gl_kal.h $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 06 2012 wh.su - * [WCXRP00001177] [MT6620 Wi-Fi][Driver][2.2] Adding the query channel filter for AP mode - * adding the channel query filter for AP mode. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adjust the code for Non-DBG and no XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * include link.h for linux's port. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 jeffrey.chang - * [WCXRP00000332] [MT6620 Wi-Fi][Driver] add kal sleep function for delay which use blocking call - * modify the implementation of kalDelay to msleep - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * modify kalSetEvent declaration - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * fix kal header file - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * gl_kal merged - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify kalMemAlloc method - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * * 2) add 2 kal API for later integration - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download KAPI - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\41 2009-09-28 20:19:23 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\40 2009-08-18 22:57:09 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\39 2009-06-23 23:19:15 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\38 2009-02-09 14:03:17 GMT mtk01090 -** Add KAL function kalDevSetPowerState(). It is not implemented yet. Only add an empty macro. -** -** \main\maintrunk.MT5921\37 2009-01-22 13:05:59 GMT mtk01088 -** new defeine to got 1x value at packet reserved field -** \main\maintrunk.MT5921\36 2008-12-08 16:15:02 GMT mtk01461 -** Add kalQueryValidBufferLength() macro -** \main\maintrunk.MT5921\35 2008-11-13 20:33:15 GMT mtk01104 -** Remove lint warning -** \main\maintrunk.MT5921\34 2008-10-22 11:05:52 GMT mtk01461 -** Remove unused macro -** \main\maintrunk.MT5921\33 2008-10-16 15:48:17 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\32 2008-09-02 11:50:51 GMT mtk01461 -** SPIN_LOCK_SDIO_DDK_TX_QUE -** \main\maintrunk.MT5921\31 2008-08-29 15:58:30 GMT mtk01088 -** remove non-used function for code refine -** \main\maintrunk.MT5921\30 2008-08-21 00:33:29 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\29 2008-06-19 13:29:14 GMT mtk01425 -** 1. Add declaration of SPIN_LOCK_SDIO_DDK_TX_QUE and SPIN_LOCK_SDIO_DDK_RX_QUE -** \main\maintrunk.MT5921\28 2008-05-30 20:27:34 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\27 2008-05-30 14:42:05 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\26 2008-05-29 14:15:18 GMT mtk01084 -** remove un-used function -** \main\maintrunk.MT5921\25 2008-04-23 14:02:20 GMT mtk01084 -** modify KAL port access function prototype -** \main\maintrunk.MT5921\24 2008-04-17 23:06:41 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\23 2008-04-08 15:38:50 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\22 2008-03-26 15:34:48 GMT mtk01461 -** Add update MAC address func -** \main\maintrunk.MT5921\21 2008-03-18 15:56:15 GMT mtk01084 -** update ENUM_NIC_INITIAL_PARAM_E -** \main\maintrunk.MT5921\20 2008-03-18 11:49:28 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\19 2008-03-18 10:21:31 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\18 2008-03-14 18:03:41 GMT mtk01084 -** refine register and port access function -** \main\maintrunk.MT5921\17 2008-03-11 14:51:02 GMT mtk01461 -** Add copy_to(from)_user macro -** \main\maintrunk.MT5921\16 2008-03-06 23:42:21 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\15 2008-02-26 09:48:04 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\14 2008-01-09 17:54:58 GMT mtk01084 -** Modify the argument of kalQueryPacketInfo -** \main\maintrunk.MT5921\13 2007-11-29 02:05:20 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\12 2007-11-26 19:43:45 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\11 2007-11-09 16:36:15 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\10 2007-11-07 18:38:37 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\9 2007-11-06 19:36:50 GMT mtk01088 -** add the WPS related code -** \main\maintrunk.MT5921\8 2007-11-02 01:03:57 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:23 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - - -#ifndef _GL_KAL_H -#define _GL_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "link.h" -#include "nic/mac.h" -#include "nic/wlan_def.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "gl_wext_priv.h" - - -#if CFG_ENABLE_BT_OVER_WIFI - #include "nic/bow.h" -#endif - -#if DBG -extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define USEC_PER_MSEC (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SPIN_LOCK_CATEGORY_E { - SPIN_LOCK_FSM = 0, - - /* FIX ME */ - SPIN_LOCK_RX_QUE, - SPIN_LOCK_TX_QUE, - SPIN_LOCK_CMD_QUE, - SPIN_LOCK_TX_RESOURCE, - SPIN_LOCK_CMD_RESOURCE, - SPIN_LOCK_QM_TX_QUEUE, - SPIN_LOCK_CMD_PENDING, - SPIN_LOCK_CMD_SEQ_NUM, - SPIN_LOCK_TX_MSDU_INFO_LIST, - SPIN_LOCK_TXING_MGMT_LIST, - SPIN_LOCK_TX_SEQ_NUM, - SPIN_LOCK_TX_COUNT, - SPIN_LOCK_TXS_COUNT, - /* end */ - SPIN_LOCK_TX, - SPIN_LOCK_IO_REQ, - SPIN_LOCK_INT, - - SPIN_LOCK_MGT_BUF, - SPIN_LOCK_MSG_BUF, - SPIN_LOCK_STA_REC, - - SPIN_LOCK_MAILBOX, - SPIN_LOCK_TIMER, - - SPIN_LOCK_BOW_TABLE, - - SPIN_LOCK_EHPI_BUS, /* only for EHPI */ - SPIN_LOCK_NET_DEV, - SPIN_LOCK_NUM -} ENUM_SPIN_LOCK_CATEGORY_E; - -/* event for assoc infomation update */ -typedef struct _EVENT_ASSOC_INFO { - UINT_8 ucAssocReq; /* 1 for assoc req, 0 for assoc rsp */ - UINT_8 ucReassoc; /* 0 for assoc, 1 for reassoc */ - UINT_16 u2Length; - PUINT_8 pucIe; -} EVENT_ASSOC_INFO, *P_EVENT_ASSOC_INFO; - -typedef enum _ENUM_KAL_NETWORK_TYPE_INDEX_T { - KAL_NETWORK_TYPE_AIS_INDEX = 0, -#if CFG_ENABLE_WIFI_DIRECT - KAL_NETWORK_TYPE_P2P_INDEX, -#endif -#if CFG_ENABLE_BT_OVER_WIFI - KAL_NETWORK_TYPE_BOW_INDEX, -#endif - KAL_NETWORK_TYPE_INDEX_NUM -} ENUM_KAL_NETWORK_TYPE_INDEX_T; - -typedef enum _ENUM_KAL_MEM_ALLOCATION_TYPE_E { - PHY_MEM_TYPE, /* physically continuous */ - VIR_MEM_TYPE, /* virtually continous */ - MEM_TYPE_NUM -} ENUM_KAL_MEM_ALLOCATION_TYPE; - -#if CONFIG_ANDROID /* Defined in Android kernel source */ -typedef struct wake_lock KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#else -typedef UINT_32 KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#define KAL_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags - -#define KAL_ACQUIRE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalAcquireSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, &__u4Flags) - -#define KAL_RELEASE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalReleaseSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, __u4Flags) - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define KAL_GET_PKT_QUEUE_ENTRY(_p) GLUE_GET_PKT_QUEUE_ENTRY(_p) -#define KAL_GET_PKT_DESCRIPTOR(_prQueueEntry) GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) -#define KAL_GET_PKT_TID(_p) GLUE_GET_PKT_TID(_p) -#define KAL_GET_PKT_IS1X(_p) GLUE_GET_PKT_IS1X(_p) -#define KAL_GET_PKT_HEADER_LEN(_p) GLUE_GET_PKT_HEADER_LEN(_p) -#define KAL_GET_PKT_PAYLOAD_LEN(_p) GLUE_GET_PKT_PAYLOAD_LEN(_p) -#define KAL_GET_PKT_ARRIVAL_TIME(_p) GLUE_GET_PKT_ARRIVAL_TIME(_p) - -/*----------------------------------------------------------------------------*/ -/* Macros of wake_lock operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#if CONFIG_ANDROID /* Defined in Android kernel source */ -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) \ - wake_lock_init(_prWakeLock, WAKE_LOCK_SUSPEND, _pcName) - -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) \ - wake_lock_destroy(_prWakeLock) - -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) \ - wake_lock(_prWakeLock) - -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) \ - wake_lock_timeout(_prWakeLock, _u4Timeout) - -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) \ - wake_unlock(_prWakeLock) - -#else -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Cache memory allocation -* -* \param[in] u4Size Required memory size. -* \param[in] eMemType Memory allocation type -* -* \return Pointer to allocated memory -* or NULL -*/ -/*----------------------------------------------------------------------------*/ -#if DBG -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - if (pvAddr) { \ - allocatedMemSize += u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) allocated (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - pvAddr; \ - }) -#else -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - pvAddr; \ - }) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free allocated cache memory -* -* \param[in] pvAddr Required memory size. -* \param[in] eMemType Memory allocation type -* \param[in] u4Size Allocated memory size. -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#if DBG -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if (pvAddr) { \ - allocatedMemSize -= u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) freed (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -#else -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -#endif - -#define kalUdelay(u4USec) udelay(u4USec) - -#define kalMdelay(u4MSec) mdelay(u4MSec) -#define kalMsleep(u4MSec) msleep(u4MSec) - -/* Copy memory from user space to kernel space */ -#define kalMemCopyFromUser(_pvTo, _pvFrom, _u4N) copy_from_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory from kernel space to user space */ -#define kalMemCopyToUser(_pvTo, _pvFrom, _u4N) copy_to_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory block with specific size */ -#define kalMemCopy(pvDst, pvSrc, u4Size) memcpy(pvDst, pvSrc, u4Size) - -/* Set memory block with specific pattern */ -#define kalMemSet(pvAddr, ucPattern, u4Size) memset(pvAddr, ucPattern, u4Size) - -/* Compare two memory block with specific length. - * Return zero if they are the same. - */ -#define kalMemCmp(pvAddr1, pvAddr2, u4Size) memcmp(pvAddr1, pvAddr2, u4Size) - -/* Zero specific memory block */ -#define kalMemZero(pvAddr, u4Size) memset(pvAddr, 0, u4Size) - -/* defined for wince sdio driver only */ -#if defined(_HIF_SDIO) -#define kalDevSetPowerState(prGlueInfo, ePowerMode) glSetPowerState(prGlueInfo, ePowerMode) -#else -#define kalDevSetPowerState(prGlueInfo, ePowerMode) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalSendComplete(prGlueInfo, pvPacket, status) \ - kalSendCompleteAndAwakeQueue(prGlueInfo, pvPacket) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to locate the starting address of incoming ethernet -* frame for skb. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryBufferPointer(prGlueInfo, pvPacket) \ - ((PUINT_8)((struct sk_buff *)pvPacket)->data) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to query the length of valid buffer which is accessible during -* port read/write. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryValidBufferLength(prGlueInfo, pvPacket) \ - ((UINT_32)((struct sk_buff *)pvPacket)->end - \ - (UINT_32)((struct sk_buff *)pvPacket)->data) - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to copy the entire frame from skb to the destination -* address in the input parameter. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] pucDestBuffer Destination Address -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalCopyFrame(prGlueInfo, pvPacket, pucDestBuffer) \ - {struct sk_buff *skb = (struct sk_buff *)pvPacket; \ - memcpy(pucDestBuffer, skb->data, skb->len);} - -#define kalGetTimeTick() jiffies_to_msecs(jiffies) - -#define kalPrint printk - -#if !DBG -#if CFG_SUPPORT_XLOG -#define XLOG_TAG "wlan" - -#define XLOG_FUNC(__LEVEL, __FMT...)\ - if (__LEVEL == ANDROID_LOG_ERROR) {\ - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_WARN) {\ - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_INFO) {\ - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_DEBUG) {\ - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_VERBOSE) {\ - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, ##__FMT);\ - } - -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define AIS_ERROR_LOGDUMP8(x, y) -#define AIS_WARN_LOGDUMP8(x, y) -#define AIS_INFO_LOGDUMP8(x, y) -#define AIS_STATE_LOGDUMP8(x, y) -#define AIS_EVENT_LOGDUMP8(x, y) -#define AIS_TRACE_LOGDUMP8(x, y) -#define AIS_LOUD_LOGDUMP8(x, y) -#define AIS_TEMP_LOGDUMP8(x, y) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGDUMP8(x, y) -#define INTR_WARN_LOGDUMP8(x, y) -#define INTR_INFO_LOGDUMP8(x, y) -#define INTR_STATE_LOGDUMP8(x, y) -#define INTR_EVENT_LOGDUMP8(x, y) -#define INTR_TRACE_LOGDUMP8(x, y) -#define INTR_LOUD_LOGDUMP8(x, y) -#define INTR_TEMP_LOGDUMP8(x, y) - -#define INIT_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGDUMP8(x, y) -#define INIT_WARN_LOGDUMP8(x, y) -#define INIT_INFO_LOGDUMP8(x, y) -#define INIT_STATE_LOGDUMP8(x, y) -#define INIT_EVENT_LOGDUMP8(x, y) -#define INIT_TRACE_LOGDUMP8(x, y) -#define INIT_LOUD_LOGDUMP8(x, y) -#define INIT_TEMP_LOGDUMP8(x, y) - -#define AAA_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGDUMP8(x, y) -#define AAA_WARN_LOGDUMP8(x, y) -#define AAA_INFO_LOGDUMP8(x, y) -#define AAA_STATE_LOGDUMP8(x, y) -#define AAA_EVENT_LOGDUMP8(x, y) -#define AAA_TRACE_LOGDUMP8(x, y) -#define AAA_LOUD_LOGDUMP8(x, y) -#define AAA_TEMP_LOGDUMP8(x, y) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define ROAMING_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define ROAMING_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGDUMP8(x, y) -#define ROAMING_WARN_LOGDUMP8(x, y) -#define ROAMING_INFO_LOGDUMP8(x, y) -#define ROAMING_STATE_LOGDUMP8(x, y) -#define ROAMING_EVENT_LOGDUMP8(x, y) -#define ROAMING_TRACE_LOGDUMP8(x, y) -#define ROAMING_LOUD_LOGDUMP8(x, y) -#define ROAMING_TEMP_LOGDUMP8(x, y) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGDUMP8(x, y) -#define REQ_WARN_LOGDUMP8(x, y) -#define REQ_INFO_LOGDUMP8(x, y) -#define REQ_STATE_LOGDUMP8(x, y) -#define REQ_EVENT_LOGDUMP8(x, y) -#define REQ_TRACE_LOGDUMP8(x, y) -#define REQ_LOUD_LOGDUMP8(x, y) -#define REQ_TEMP_LOGDUMP8(x, y) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGDUMP8(x, y) -#define TX_WARN_LOGDUMP8(x, y) -#define TX_INFO_LOGDUMP8(x, y) -#define TX_STATE_LOGDUMP8(x, y) -#define TX_EVENT_LOGDUMP8(x, y) -#define TX_TRACE_LOGDUMP8(x, y) -#define TX_LOUD_LOGDUMP8(x, y) -#define TX_TEMP_LOGDUMP8(x, y) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGDUMP8(x, y) -#define RX_WARN_LOGDUMP8(x, y) -#define RX_INFO_LOGDUMP8(x, y) -#define RX_STATE_LOGDUMP8(x, y) -#define RX_EVENT_LOGDUMP8(x, y) -#define RX_TRACE_LOGDUMP8(x, y) -#define RX_LOUD_LOGDUMP8(x, y) -#define RX_TEMP_LOGDUMP8(x, y) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGDUMP8(x, y) -#define RFTEST_WARN_LOGDUMP8(x, y) -#define RFTEST_INFO_LOGDUMP8(x, y) -#define RFTEST_STATE_LOGDUMP8(x, y) -#define RFTEST_EVENT_LOGDUMP8(x, y) -#define RFTEST_TRACE_LOGDUMP8(x, y) -#define RFTEST_LOUD_LOGDUMP8(x, y) -#define RFTEST_TEMP_LOGDUMP8(x, y) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGDUMP8(x, y) -#define EMU_WARN_LOGDUMP8(x, y) -#define EMU_INFO_LOGDUMP8(x, y) -#define EMU_STATE_LOGDUMP8(x, y) -#define EMU_EVENT_LOGDUMP8(x, y) -#define EMU_TRACE_LOGDUMP8(x, y) -#define EMU_LOUD_LOGDUMP8(x, y) -#define EMU_TEMP_LOGDUMP8(x, y) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGDUMP8(x, y) -#define HEM_WARN_LOGDUMP8(x, y) -#define HEM_INFO_LOGDUMP8(x, y) -#define HEM_STATE_LOGDUMP8(x, y) -#define HEM_EVENT_LOGDUMP8(x, y) -#define HEM_TRACE_LOGDUMP8(x, y) -#define HEM_LOUD_LOGDUMP8(x, y) -#define HEM_TEMP_LOGDUMP8(x, y) - -#define RLM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RLM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RLM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGDUMP8(x, y) -#define RLM_WARN_LOGDUMP8(x, y) -#define RLM_INFO_LOGDUMP8(x, y) -#define RLM_STATE_LOGDUMP8(x, y) -#define RLM_EVENT_LOGDUMP8(x, y) -#define RLM_TRACE_LOGDUMP8(x, y) -#define RLM_LOUD_LOGDUMP8(x, y) -#define RLM_TEMP_LOGDUMP8(x, y) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGDUMP8(x, y) -#define MEM_WARN_LOGDUMP8(x, y) -#define MEM_INFO_LOGDUMP8(x, y) -#define MEM_STATE_LOGDUMP8(x, y) -#define MEM_EVENT_LOGDUMP8(x, y) -#define MEM_TRACE_LOGDUMP8(x, y) -#define MEM_LOUD_LOGDUMP8(x, y) -#define MEM_TEMP_LOGDUMP8(x, y) - -#define CNM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGDUMP8(x, y) -#define CNM_WARN_LOGDUMP8(x, y) -#define CNM_INFO_LOGDUMP8(x, y) -#define CNM_STATE_LOGDUMP8(x, y) -#define CNM_EVENT_LOGDUMP8(x, y) -#define CNM_TRACE_LOGDUMP8(x, y) -#define CNM_LOUD_LOGDUMP8(x, y) -#define CNM_TEMP_LOGDUMP8(x, y) - -#define RSN_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RSN_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RSN_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGDUMP8(x, y) -#define RSN_WARN_LOGDUMP8(x, y) -#define RSN_INFO_LOGDUMP8(x, y) -#define RSN_STATE_LOGDUMP8(x, y) -#define RSN_EVENT_LOGDUMP8(x, y) -#define RSN_TRACE_LOGDUMP8(x, y) -#define RSN_LOUD_LOGDUMP8(x, y) -#define RSN_TEMP_LOGDUMP8(x, y) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGDUMP8(x, y) -#define BSS_WARN_LOGDUMP8(x, y) -#define BSS_INFO_LOGDUMP8(x, y) -#define BSS_STATE_LOGDUMP8(x, y) -#define BSS_EVENT_LOGDUMP8(x, y) -#define BSS_TRACE_LOGDUMP8(x, y) -#define BSS_LOUD_LOGDUMP8(x, y) -#define BSS_TEMP_LOGDUMP8(x, y) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGDUMP8(x, y) -#define SCN_WARN_LOGDUMP8(x, y) -#define SCN_INFO_LOGDUMP8(x, y) -#define SCN_STATE_LOGDUMP8(x, y) -#define SCN_EVENT_LOGDUMP8(x, y) -#define SCN_TRACE_LOGDUMP8(x, y) -#define SCN_LOUD_LOGDUMP8(x, y) -#define SCN_TEMP_LOGDUMP8(x, y) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGDUMP8(x, y) -#define SAA_WARN_LOGDUMP8(x, y) -#define SAA_INFO_LOGDUMP8(x, y) -#define SAA_STATE_LOGDUMP8(x, y) -#define SAA_EVENT_LOGDUMP8(x, y) -#define SAA_TRACE_LOGDUMP8(x, y) -#define SAA_LOUD_LOGDUMP8(x, y) -#define SAA_TEMP_LOGDUMP8(x, y) - -#define P2P_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define P2P_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define P2P_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGDUMP8(x, y) -#define P2P_WARN_LOGDUMP8(x, y) -#define P2P_INFO_LOGDUMP8(x, y) -#define P2P_STATE_LOGDUMP8(x, y) -#define P2P_EVENT_LOGDUMP8(x, y) -#define P2P_TRACE_LOGDUMP8(x, y) -#define P2P_LOUD_LOGDUMP8(x, y) -#define P2P_TEMP_LOGDUMP8(x, y) - -#define QM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGDUMP8(x, y) -#define QM_WARN_LOGDUMP8(x, y) -#define QM_INFO_LOGDUMP8(x, y) -#define QM_STATE_LOGDUMP8(x, y) -#define QM_EVENT_LOGDUMP8(x, y) -#define QM_TRACE_LOGDUMP8(x, y) -#define QM_LOUD_LOGDUMP8(x, y) -#define QM_TEMP_LOGDUMP8(x, y) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGDUMP8(x, y) -#define SEC_WARN_LOGDUMP8(x, y) -#define SEC_INFO_LOGDUMP8(x, y) -#define SEC_STATE_LOGDUMP8(x, y) -#define SEC_EVENT_LOGDUMP8(x, y) -#define SEC_TRACE_LOGDUMP8(x, y) -#define SEC_LOUD_LOGDUMP8(x, y) -#define SEC_TEMP_LOGDUMP8(x, y) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGDUMP8(x, y) -#define BOW_WARN_LOGDUMP8(x, y) -#define BOW_INFO_LOGDUMP8(x, y) -#define BOW_STATE_LOGDUMP8(x, y) -#define BOW_EVENT_LOGDUMP8(x, y) -#define BOW_TRACE_LOGDUMP8(x, y) -#define BOW_LOUD_LOGDUMP8(x, y) -#define BOW_TEMP_LOGDUMP8(x, y) - -#define HAL_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGDUMP8(x, y) -#define HAL_WARN_LOGDUMP8(x, y) -#define HAL_INFO_LOGDUMP8(x, y) -#define HAL_STATE_LOGDUMP8(x, y) -#define HAL_EVENT_LOGDUMP8(x, y) -#define HAL_TRACE_LOGDUMP8(x, y) -#define HAL_LOUD_LOGDUMP8(x, y) -#define HAL_TEMP_LOGDUMP8(x, y) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGDUMP8(x, y) -#define WAPI_WARN_LOGDUMP8(x, y) -#define WAPI_INFO_LOGDUMP8(x, y) -#define WAPI_STATE_LOGDUMP8(x, y) -#define WAPI_EVENT_LOGDUMP8(x, y) -#define WAPI_TRACE_LOGDUMP8(x, y) -#define WAPI_LOUD_LOGDUMP8(x, y) -#define WAPI_TEMP_LOGDUMP8(x, y) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGDUMP8(x, y) -#define SW1_WARN_LOGDUMP8(x, y) -#define SW1_INFO_LOGDUMP8(x, y) -#define SW1_STATE_LOGDUMP8(x, y) -#define SW1_EVENT_LOGDUMP8(x, y) -#define SW1_TRACE_LOGDUMP8(x, y) -#define SW1_LOUD_LOGDUMP8(x, y) -#define SW1_TEMP_LOGDUMP8(x, y) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGDUMP8(x, y) -#define SW2_WARN_LOGDUMP8(x, y) -#define SW2_INFO_LOGDUMP8(x, y) -#define SW2_STATE_LOGDUMP8(x, y) -#define SW2_EVENT_LOGDUMP8(x, y) -#define SW2_TRACE_LOGDUMP8(x, y) -#define SW2_LOUD_LOGDUMP8(x, y) -#define SW2_TEMP_LOGDUMP8(x, y) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGDUMP8(x, y) -#define SW3_WARN_LOGDUMP8(x, y) -#define SW3_INFO_LOGDUMP8(x, y) -#define SW3_STATE_LOGDUMP8(x, y) -#define SW3_EVENT_LOGDUMP8(x, y) -#define SW3_TRACE_LOGDUMP8(x, y) -#define SW3_LOUD_LOGDUMP8(x, y) -#define SW3_TEMP_LOGDUMP8(x, y) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGDUMP8(x, y) -#define SW4_WARN_LOGDUMP8(x, y) -#define SW4_INFO_LOGDUMP8(x, y) -#define SW4_STATE_LOGDUMP8(x, y) -#define SW4_EVENT_LOGDUMP8(x, y) -#define SW4_TRACE_LOGDUMP8(x, y) dumpMemory8(ANDROID_LOG_DEBUG, x, y) -#define SW4_LOUD_LOGDUMP8(x, y) -#define SW4_TEMP_LOGDUMP8(x, y) -#else -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) -#define ROAMING_WARN_LOGFUNC(_Fmt...) -#define ROAMING_INFO_LOGFUNC(_Fmt...) -#define ROAMING_STATE_LOGFUNC(_Fmt...) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGFUNC(_Fmt...) -#define RLM_WARN_LOGFUNC(_Fmt...) -#define RLM_INFO_LOGFUNC(_Fmt...) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGFUNC(_Fmt...) -#define RSN_WARN_LOGFUNC(_Fmt...) -#define RSN_INFO_LOGFUNC(_Fmt...) -#define RSN_STATE_LOGFUNC(_Fmt...) -#define RSN_EVENT_LOGFUNC(_Fmt...) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGFUNC(_Fmt...) -#define P2P_WARN_LOGFUNC(_Fmt...) -#define P2P_INFO_LOGFUNC(_Fmt...) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) -#endif -#endif - -#define kalBreakPoint() \ - do { \ - BUG(); \ - panic("Oops"); \ - } while(0) - -#if CFG_ENABLE_AEE_MSG -#define kalSendAeeException aee_kernel_exception -#define kalSendAeeWarning aee_kernel_warning -#define kalSendAeeReminding aee_kernel_reminding -#else -#define kalSendAeeException(_module, _desc, ...) -#define kalSendAeeWarning(_module, _desc, ...) -#define kalSendAeeReminding(_module, _desc, ...) -#endif - -#define PRINTF_ARG(...) __VA_ARGS__ -#define SPRINTF(buf, arg) {buf += sprintf((char *)(buf), PRINTF_ARG arg);} - -#define USEC_TO_SYSTIME(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_SYSTIME(_msec) (_msec) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in gl_kal.c */ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ); - -VOID -kalReleaseSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ); - -VOID -kalUpdateMACAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ); - -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -PVOID -kalPacketAlloc( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ); - -VOID -kalOsTimerInitialize( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ); - -BOOL -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN OS_SYSTIME rInterval - ); - -WLAN_STATUS -kalProcessRxPacket( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ); - -WLAN_STATUS -kalRxIndicatePkts( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ); - -VOID -kalIndicateStatusAndComplete( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ); - -VOID -kalUpdateReAssocReqInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ); - -#if CFG_TX_FRAGMENT -BOOLEAN -kalQueryTxPacketHeader( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - OUT PUINT_16 pu2EtherTypeLen, - OUT PUINT_8 pucEthDestAddr - ); -#endif /* CFG_TX_FRAGMENT */ - -VOID -kalSendCompleteAndAwakeQueue( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -kalQueryTxChksumOffloadParam( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag); - -VOID -kalUpdateRxCSUMOffloadParam( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T eCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines in interface - ehpi/sdio.c */ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ); - -BOOL -kalDevRegWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ); - -BOOL -kalDevPortRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ); - -BOOL -kalDevPortWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ); - -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ); - - - #if CFG_SUPPORT_EXT_CONFIG -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ); - #endif - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType -); - -inline VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ); - - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ); - -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ); - -#if CFG_ENABLE_FW_DOWNLOAD - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ); - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Card Removal Check */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* TX */ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media State Indication */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ); - - -/*----------------------------------------------------------------------------*/ -/* OID handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ); - -#if CFG_ENABLE_BT_OVER_WIFI -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - PARAM_MAC_ADDRESS rPeerAddr - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_BOW_SEPARATE_DATA_PATH -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi Net Device Init/Uninit */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ); - -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - - -/*----------------------------------------------------------------------------*/ -/* Firmware Download Handling */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Security Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ); - - -/*----------------------------------------------------------------------------*/ -/* Management Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearMgmtFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ); - -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ); - -UINT_32 -kalRandomNumber( - VOID - ); - -VOID -kalTimeoutHandler (unsigned long arg); - -VOID -kalSetEvent (P_GLUE_INFO_T pr); - - -/*----------------------------------------------------------------------------*/ -/* NVRAM/Registry Service */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ); - -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ); - -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ); - -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - IN UINT_16 u2Data - ); - -/*----------------------------------------------------------------------------*/ -/* WSC Connection */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* RSSI Updating */ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - - -/*----------------------------------------------------------------------------*/ -/* I/O Buffer Pre-allocation */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ); - -VOID -kalUninitIOBuffer( - VOID - ); - -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ); - -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ); - -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/* 802.11W */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size - ); - - -/*----------------------------------------------------------------------------*/ -/* NL80211 */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ); - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -int tx_thread(void *data); - -#endif /* _GL_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_os.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_os.h deleted file mode 100755 index 369fed31a616..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_os.h +++ /dev/null @@ -1,1140 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_os.h#2 $ -*/ - -/*! \file gl_os.h - \brief List the external reference to OS for GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - - - -/* -** $Log: gl_os.h $ -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. -** -** 08 20 2012 yuche.tsai -** [ALPS00339327] [Rose][6575JB][BSP Package][Free Test][KE][WIFI]There is no response when you tap the turn off/on button,wait a minutes, the device will reboot automatically and "KE" will pop up. -** Fix possible KE when netlink operate mgmt frame register. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 29 2011 terry.wu - * NULL - * Show DRV_NAME by chip id. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 19 2010 jeffrey.chang - * - * add security frame pending count - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * supporting power management - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * pvInformationBuffer and u4InformationBufferLength are no longer in glue - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * * are done in adapter layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * * (2) fix spin lock - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download related data type - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * * the frequency is used for adhoc connection only - * * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\30 2009-10-20 17:38:31 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\29 2009-10-08 10:33:33 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\28 2009-09-28 20:19:26 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\27 2009-08-18 22:57:12 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\26 2009-07-06 21:42:25 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\25 2009-07-06 20:51:46 GMT mtk01088 -** adding the wapi 1x ether type define -** \main\maintrunk.MT5921\24 2009-06-23 23:19:18 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\23 2009-02-07 15:05:06 GMT mtk01088 -** add the privacy flag to ingo driver the supplicant selected ap's security -** \main\maintrunk.MT5921\22 2009-02-05 15:34:09 GMT mtk01088 -** fixed the compiling error for using bits marco for only one parameter -** \main\maintrunk.MT5921\21 2009-01-22 13:02:13 GMT mtk01088 -** data frame is or not 802.1x value share with tid, using the same reserved byte, provide the function to set and get -** \main\maintrunk.MT5921\20 2008-10-24 12:04:16 GMT mtk01088 -** move the config.h from precomp.h to here for lint check -** \main\maintrunk.MT5921\19 2008-09-22 23:19:02 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\18 2008-09-05 17:25:13 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\17 2008-08-01 13:32:47 GMT mtk01084 -** Prevent redundent driver assertion in driver logic when BUS is detached -** \main\maintrunk.MT5921\16 2008-05-30 14:41:43 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\15 2008-05-29 14:16:25 GMT mtk01084 -** remoev un-used variable -** \main\maintrunk.MT5921\14 2008-05-03 15:17:14 GMT mtk01461 -** Add Media Status variable in Glue Layer -** \main\maintrunk.MT5921\13 2008-04-24 11:58:41 GMT mtk01461 -** change threshold to 256 -** \main\maintrunk.MT5921\12 2008-03-11 14:51:05 GMT mtk01461 -** Remove redundant GL_CONN_INFO_T -** \main\maintrunk.MT5921\11 2008-01-07 15:07:41 GMT mtk01461 -** Adjust the netif stop threshold to 150 -** \main\maintrunk.MT5921\10 2007-11-26 19:43:46 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\9 2007-11-07 18:38:38 GMT mtk01461 -** Move definition -** \main\maintrunk.MT5921\8 2007-11-02 01:04:00 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.5 2007/07/12 11:04:28 MTK01084 -** update macro to delay for ms order -** -** Revision 1.4 2007/07/05 07:25:34 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_OS_H -#define _GL_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/*------------------------------------------------------------------------------ - * Flags for LINUX(OS) dependent - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_WLAN_DEVICES 1 /* number of wlan card will coexist*/ - -#define CFG_MAX_TXQ_NUM 4 /* number of tx queue for support multi-queue h/w */ - - -#define CFG_USE_SPIN_LOCK_BOTTOM_HALF 0 /* 1: Enable use of SPIN LOCK Bottom Half for LINUX - 0: Disable - use SPIN LOCK IRQ SAVE instead */ - -#define CFG_TX_PADDING_SMALL_ETH_PACKET 0 /* 1: Enable - Drop ethernet packet if it < 14 bytes. - And pad ethernet packet with dummy 0 if it < 60 bytes. - 0: Disable */ - -#define CFG_TX_STOP_NETIF_QUEUE_THRESHOLD 256 /* packets */ - -#define CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD 512 /* packets */ -#define CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD 128 /* packets */ - - -#define ETH_P_1X 0x888E -#define IPTOS_PREC_OFFSET 5 -#define USER_PRIORITY_DEFAULT 0 - -#define ETH_WPI_1X 0x88B4 - -#define ETH_HLEN 14 -#define ETH_TYPE_LEN_OFFSET 12 -#define ETH_P_IP 0x0800 -#define ETH_P_1X 0x888E -#define ETH_P_PRE_1X 0x88C7 - -#define IPVERSION 4 -#define IP_HEADER_LEN 20 - -#define IPVH_VERSION_OFFSET 4 // For Little-Endian -#define IPVH_VERSION_MASK 0xF0 -#define IPTOS_PREC_OFFSET 5 -#define IPTOS_PREC_MASK 0xE0 - -#define SOURCE_PORT_LEN 2 -/* NOTE(Kevin): Without IP Option Length */ -#define LOOK_AHEAD_LEN (ETH_HLEN + IP_HEADER_LEN + SOURCE_PORT_LEN) - -/* 802.2 LLC/SNAP */ -#define ETH_LLC_OFFSET (ETH_HLEN) -#define ETH_LLC_LEN 3 -#define ETH_LLC_DSAP_SNAP 0xAA -#define ETH_LLC_SSAP_SNAP 0xAA -#define ETH_LLC_CONTROL_UNNUMBERED_INFORMATION 0x03 - -/* Bluetooth SNAP */ -#define ETH_SNAP_OFFSET (ETH_HLEN + ETH_LLC_LEN) -#define ETH_SNAP_LEN 5 -#define ETH_SNAP_BT_SIG_OUI_0 0x00 -#define ETH_SNAP_BT_SIG_OUI_1 0x19 -#define ETH_SNAP_BT_SIG_OUI_2 0x58 - -#define BOW_PROTOCOL_ID_SECURITY_FRAME 0x0003 - - -#if defined(MT6620) - #define CHIP_NAME "MT6620" -#elif defined(MT5931) - #define CHIP_NAME "MT5931" -#elif defined(MT6628) - #define CHIP_NAME "MT6628" -#endif - -#define DRV_NAME "["CHIP_NAME"]: " - -/* Define if target platform is Android. - * It should already be defined in Android kernel source - */ -#ifndef CONFIG_ANDROID -#define CONFIG_ANDROID 0 -#endif - -/* for CFG80211 IE buffering mechanism */ -#define CFG_CFG80211_IE_BUF_LEN (512) - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include /* constant of kernel version */ - -#include /* bitops.h */ - -#include /* struct timer_list */ -#include /* jiffies */ -#include /* udelay and mdelay macro */ - -#if CONFIG_ANDROID -#include -#endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) -#include /* IRQT_FALLING */ -#include /*for in_interrupt*/ -#endif - -#include /* struct net_device, struct net_device_stats */ -#include /* for eth_type_trans() function */ -#include /* struct iw_statistics */ -#include -#include /* struct in_device */ - -#include /* struct iphdr */ - -#include /* for memcpy()/memset() function */ -#include /* for offsetof() macro */ - -#include /* The proc filesystem constants/structures */ - -#include /* for rtnl_lock() and rtnl_unlock() */ -#include /* kthread_should_stop(), kthread_run() */ -#include /* for copy_from_user() */ -#include /* for firmware download */ -#include - -#include /* for kfifo interface */ -#include /* for cdev interface */ - -#include /* for firmware download */ - -#if defined(_HIF_SDIO) -#include -#include -#endif - -#include - -#include - -#include /* readw and writew */ - -#if WIRELESS_EXT > 12 -#include -#endif - -#include "version.h" -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#endif - -#include - -#include "gl_typedef.h" -#include "typedef.h" -#include "queue.h" -#include "gl_kal.h" -#if CFG_CHIP_RESET_SUPPORT - #include "gl_rst.h" -#endif -#include "hif.h" - - -#include "debug.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" - -#if CFG_ENABLE_AEE_MSG -#include -#endif - -extern BOOLEAN fgIsBusAccessFailed; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define GLUE_FLAG_HALT BIT(0) -#define GLUE_FLAG_INT BIT(1) -#define GLUE_FLAG_OID BIT(2) -#define GLUE_FLAG_TIMEOUT BIT(3) -#define GLUE_FLAG_TXREQ BIT(4) -#define GLUE_FLAG_SUB_MOD_INIT BIT(5) -#define GLUE_FLAG_SUB_MOD_EXIT BIT(6) -#define GLUE_FLAG_SUB_MOD_MULTICAST BIT(7) -#define GLUE_FLAG_FRAME_FILTER BIT(8) -#define GLUE_FLAG_HALT_BIT (0) -#define GLUE_FLAG_INT_BIT (1) -#define GLUE_FLAG_OID_BIT (2) -#define GLUE_FLAG_TIMEOUT_BIT (3) -#define GLUE_FLAG_TXREQ_BIT (4) -#define GLUE_FLAG_SUB_MOD_INIT_BIT (5) -#define GLUE_FLAG_SUB_MOD_EXIT_BIT (6) -#define GLUE_FLAG_SUB_MOD_MULTICAST_BIT (7) -#define GLUE_FLAG_FRAME_FILTER_BIT (8) - - - -#define GLUE_BOW_KFIFO_DEPTH (1024) -//#define GLUE_BOW_DEVICE_NAME "MT6620 802.11 AMP" -#define GLUE_BOW_DEVICE_NAME "ampc0" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _GL_WPA_INFO_T { - UINT_32 u4WpaVersion; - UINT_32 u4KeyMgmt; - UINT_32 u4CipherGroup; - UINT_32 u4CipherPairwise; - UINT_32 u4AuthAlg; - BOOLEAN fgPrivacyInvoke; -#if CFG_SUPPORT_802_11W - UINT_32 u4Mfp; -#endif -} GL_WPA_INFO_T, *P_GL_WPA_INFO_T; - -typedef enum _ENUM_RSSI_TRIGGER_TYPE { - ENUM_RSSI_TRIGGER_NONE, - ENUM_RSSI_TRIGGER_GREATER, - ENUM_RSSI_TRIGGER_LESS, - ENUM_RSSI_TRIGGER_TRIGGERED, - ENUM_RSSI_TRIGGER_NUM -} ENUM_RSSI_TRIGGER_TYPE; - -#if CFG_ENABLE_WIFI_DIRECT -typedef enum _ENUM_SUB_MODULE_IDX_T { - P2P_MODULE = 0, - SUB_MODULE_NUM -} ENUM_SUB_MODULE_IDX_T; - -typedef enum _ENUM_NET_REG_STATE_T { - ENUM_NET_REG_STATE_UNREGISTERED, - ENUM_NET_REG_STATE_REGISTERING, - ENUM_NET_REG_STATE_REGISTERED, - ENUM_NET_REG_STATE_UNREGISTERING, - ENUM_NET_REG_STATE_NUM -} ENUM_NET_REG_STATE_T; - -#endif - -typedef struct _GL_IO_REQ_T { - QUE_ENTRY_T rQueEntry; - //wait_queue_head_t cmdwait_q; - BOOL fgRead; - BOOL fgWaitResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOL fgIsP2pOid; -#endif - P_ADAPTER_T prAdapter; - PFN_OID_HANDLER_FUNC pfnOidHandler; - PVOID pvInfoBuf; - UINT_32 u4InfoBufLen; - PUINT_32 pu4QryInfoLen; - WLAN_STATUS rStatus; - UINT_32 u4Flag; -} GL_IO_REQ_T, *P_GL_IO_REQ_T; - -#if CFG_ENABLE_BT_OVER_WIFI -typedef struct _GL_BOW_INFO { - BOOLEAN fgIsRegistered; - dev_t u4DeviceNumber; /* dynamic device number */ -// struct kfifo *prKfifo; /* for buffering indicated events */ - struct kfifo rKfifo; /* for buffering indicated events */ - spinlock_t rSpinLock; /* spin lock for kfifo */ - struct cdev cdev; - UINT_32 u4FreqInKHz; /* frequency */ - - UINT_8 aucRole[CFG_BOW_PHYSICAL_LINK_NUM]; /* 0: Responder, 1: Initiator */ - ENUM_BOW_DEVICE_STATE aeState[CFG_BOW_PHYSICAL_LINK_NUM]; - PARAM_MAC_ADDRESS arPeerAddr[CFG_BOW_PHYSICAL_LINK_NUM]; - - wait_queue_head_t outq; - - #if CFG_BOW_SEPARATE_DATA_PATH - /* Device handle */ - struct net_device *prDevHandler; - BOOLEAN fgIsNetRegistered; - #endif - -} GL_BOW_INFO, *P_GL_BOW_INFO; -#endif - -/* -* type definition of pointer to p2p structure -*/ -typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; - -struct _GLUE_INFO_T { - /* Device handle */ - struct net_device *prDevHandler; - - /* Device Index(index of arWlanDevInfo[]) */ - INT_32 i4DevIdx; - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* Wireless statistics struct net_device */ - struct iw_statistics rIwStats; - - /* spinlock to sync power save mechanism */ - spinlock_t rSpinLock[SPIN_LOCK_NUM]; - - /* semaphore for ioctl */ - struct semaphore ioctl_sem; - - UINT_32 u4Flag; /* GLUE_FLAG_XXX */ - UINT_32 u4PendFlag; - //UINT_32 u4TimeoutFlag; - UINT_32 u4OidCompleteFlag; - UINT_32 u4ReadyFlag; /* check if card is ready */ - - /* Number of pending frames, also used for debuging if any frame is - * missing during the process of unloading Driver. - * - * NOTE(Kevin): In Linux, we also use this variable as the threshold - * for manipulating the netif_stop(wake)_queue() func. - */ - INT_32 ai4TxPendingFrameNumPerQueue[4][CFG_MAX_TXQ_NUM]; - INT_32 i4TxPendingFrameNum; - INT_32 i4TxPendingSecurityFrameNum; - - /* current IO request for kalIoctl */ - GL_IO_REQ_T OidEntry; - - /* registry info*/ - REG_INFO_T rRegInfo; - - /* firmware */ - struct firmware *prFw; - - /* Host interface related information */ - /* defined in related hif header file */ - GL_HIF_INFO_T rHifInfo; - - /*! \brief wext wpa related information */ - GL_WPA_INFO_T rWpaInfo; - - - /* Pointer to ADAPTER_T - main data structure of internal protocol stack */ - P_ADAPTER_T prAdapter; - -#ifdef WLAN_INCLUDE_PROC - struct proc_dir_entry *pProcRoot; -#endif /* WLAN_INCLUDE_PROC */ - - /* Indicated media state */ - ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicated; - - /* Device power state D0~D3 */ - PARAM_DEVICE_POWER_STATE ePowerState; - - struct completion rScanComp; /* indicate scan complete */ - struct completion rHaltComp; /* indicate main thread halt complete */ - struct completion rPendComp; /* indicate main thread halt complete */ -#if CFG_ENABLE_WIFI_DIRECT - struct completion rSubModComp; /*indicate sub module init or exit complete*/ -#endif - WLAN_STATUS rPendStatus; - - QUE_T rTxQueue; - - - /* OID related */ - QUE_T rCmdQueue; - //PVOID pvInformationBuffer; - //UINT_32 u4InformationBufferLength; - //PVOID pvOidEntry; - //PUINT_8 pucIOReqBuff; - //QUE_T rIOReqQueue; - //QUE_T rFreeIOReqQueue; - - wait_queue_head_t waitq; - struct task_struct *main_thread; - - struct timer_list tickfn; - - -#if CFG_SUPPORT_EXT_CONFIG - UINT_16 au2ExtCfg[256]; /* NVRAM data buffer */ - UINT_32 u4ExtCfgLength; /* 0 means data is NOT valid */ -#endif - -#if 1//CFG_SUPPORT_WAPI - /* Should be large than the PARAM_WAPI_ASSOC_INFO_T */ - UINT_8 aucWapiAssocInfoIEs[42]; - UINT_16 u2WapiAssocInfoIESz; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - GL_BOW_INFO rBowInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - P_GL_P2P_INFO_T prP2PInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - /* Wireless statistics struct net_device */ - struct iw_statistics rP2pIwStats; -#endif -#endif - BOOLEAN fgWpsActive; - UINT_8 aucWSCIE[500]; /*for probe req*/ - UINT_16 u2WSCIELen; - UINT_8 aucWSCAssocInfoIE[200]; /*for Assoc req*/ - UINT_16 u2WSCAssocInfoIELen; - - /* NVRAM availability */ - BOOLEAN fgNvramAvailable; - - BOOLEAN fgMcrAccessAllowed; - - /* MAC Address Overriden by IOCTL */ - BOOLEAN fgIsMacAddrOverride; - PARAM_MAC_ADDRESS rMacAddrOverride; - - SET_TXPWR_CTRL_T rTxPwr; - - /* for cfg80211 scan done indication */ - struct cfg80211_scan_request *prScanRequest; - - /* to indicate registered or not */ - BOOLEAN fgIsRegistered; - - /* for cfg80211 connected indication */ - UINT_32 u4RspIeLength; - UINT_8 aucRspIe[CFG_CFG80211_IE_BUF_LEN]; - - UINT_32 u4ReqIeLength; - UINT_8 aucReqIe[CFG_CFG80211_IE_BUF_LEN]; -}; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) - /* linux 2.4 */ - typedef void (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#else - typedef irqreturn_t (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#endif - -typedef void (*PFN_LINUX_TIMER_FUNC)(unsigned long); - - -/* generic sub module init/exit handler -* now, we only have one sub module, p2p -*/ -#if CFG_ENABLE_WIFI_DIRECT -typedef BOOLEAN (*SUB_MODULE_INIT)(P_GLUE_INFO_T prGlueInfo); -typedef BOOLEAN (*SUB_MODULE_EXIT)(P_GLUE_INFO_T prGlueInfo); - -typedef struct _SUB_MODULE_HANDLER { - SUB_MODULE_INIT subModInit; - SUB_MODULE_EXIT subModExit; - BOOLEAN fgIsInited; -} SUB_MODULE_HANDLER, *P_SUB_MODULE_HANDLER; - -#endif - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_MODE_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_MODE_PARAMS, *P_NL80211_DRIVER_TEST_MODE_PARAMS; - -/*SW CMD */ -typedef struct _NL80211_DRIVER_SW_CMD_PARAMS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 set; - unsigned long adr; - unsigned long data; -}NL80211_DRIVER_SW_CMD_PARAMS, *P_NL80211_DRIVER_SW_CMD_PARAMS; - -struct iw_encode_exts { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 addr[MAC_ADDR_LEN]; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[32]; -}; - -/*SET KEY EXT */ -typedef struct _NL80211_DRIVER_SET_KEY_EXTS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 key_index; - UINT_8 key_len; - struct iw_encode_exts ext; -}NL80211_DRIVER_SET_KEY_EXTS, *P_NL80211_DRIVER_SET_KEY_EXTS; - - -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Glue Layer */ -/*----------------------------------------------------------------------------*/ -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - #define GLUE_SPIN_LOCK_DECLARATION() - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - #define GLUE_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags = 0 - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_irqsave(&(prGlueInfo)->rSpinLock[rLockCategory], __u4Flags); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_irqrestore(&(prGlueInfo->rSpinLock[rLockCategory]), __u4Flags); \ - } -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define GLUE_GET_PKT_QUEUE_ENTRY(_p) \ - (&( ((struct sk_buff *)(_p))->cb[0] )) - -#define GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) \ - ((P_NATIVE_PACKET) ((UINT_32)_prQueueEntry - offsetof(struct sk_buff, cb[0])) ) - -#define GLUE_SET_PKT_FLAG_802_11(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(7)) - -#define GLUE_SET_PKT_FLAG_1X(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(6)) - -#define GLUE_SET_PKT_FLAG_PAL(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(5)) - -#define GLUE_SET_PKT_FLAG_P2P(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(4)) - - - -#define GLUE_SET_PKT_TID(_p, _tid) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= (((UINT_8)((_tid) & (BITS(0,3)))))) - - -#define GLUE_SET_PKT_FRAME_LEN(_p, _u2PayloadLen) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) = (UINT_16)(_u2PayloadLen)) - -#define GLUE_GET_PKT_FRAME_LEN(_p) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) ) - - -#define GLUE_GET_PKT_IS_802_11(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(7))) - -#define GLUE_GET_PKT_IS_1X(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(6))) - -#define GLUE_GET_PKT_TID(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BITS(0,3))) - - -#define GLUE_GET_PKT_IS_PAL(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(5))) - -#define GLUE_GET_PKT_IS_P2P(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(4))) - - -#define GLUE_SET_PKT_HEADER_LEN(_p, _ucMacHeaderLen) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) = (UINT_8)(_ucMacHeaderLen)) - -#define GLUE_GET_PKT_HEADER_LEN(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) ) - -#define GLUE_SET_PKT_ARRIVAL_TIME(_p, _rSysTime) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) = (OS_SYSTIME)(_rSysTime)) - -#define GLUE_GET_PKT_ARRIVAL_TIME(_p) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) ) - -/* Check validity of prDev, private data, and pointers */ -#define GLUE_CHK_DEV(prDev) \ - ((prDev && *((P_GLUE_INFO_T *) netdev_priv(prDev))) ? TRUE : FALSE) - -#define GLUE_CHK_PR2(prDev, pr2) \ - ((GLUE_CHK_DEV(prDev) && pr2) ? TRUE : FALSE) - -#define GLUE_CHK_PR3(prDev, pr2, pr3) \ - ((GLUE_CHK_PR2(prDev, pr2) && pr3) ? TRUE : FALSE) - -#define GLUE_CHK_PR4(prDev, pr2, pr3, pr4) \ - ((GLUE_CHK_PR3(prDev, pr2, pr3) && pr4) ? TRUE : FALSE) - -#define GLUE_SET_EVENT(pr) \ - kalSetEvent(pr) - -#define GLUE_INC_REF_CNT(_refCount) atomic_inc((atomic_t *)&(_refCount)) -#define GLUE_DEC_REF_CNT(_refCount) atomic_dec((atomic_t *)&(_refCount)) - - -#define DbgPrint(...) -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#ifdef WLAN_INCLUDE_PROC -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ); - -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ); -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI -BOOLEAN -glRegisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -glUnregisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ); - -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ); - -BOOLEAN -wlanIsLaunched( - VOID - ); - -void -p2pSetMulticastListWorkQueueWrapper( - P_GLUE_INFO_T prGlueInfo - ); - - - -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_OS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_ioctl.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_ioctl.h deleted file mode 100755 index 9c2ec9dfd9b9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_ioctl.h +++ /dev/null @@ -1,1098 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_ioctl.h#9 $ -*/ - -/*! \file gl_p2p_ioctl.h - \brief This file is for custom ioctls for Wi-Fi Direct only -*/ - - - -/* -** $Log: gl_p2p_ioctl.h $ -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 03 25 2011 wh.su - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 03 29 2011 wh.su - * [WCXRP00000095] [MT6620 Wi-Fi] [FW] Refine the P2P GO send broadcast protected code - * add the set power and get power function sample. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 01 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the ioctl sumcmd to meet the p2p_supplicant setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int define for p2p parameter. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * adjust the set wsc ie structure. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 07 2010 cp.wu - * [WCXRP00000237] [MT6620 Wi-Fi][Wi-Fi Direct][Driver] Add interface for supporting service discovery - * define a pair of i/o control for multiplexing layer - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 20 2010 yuche.tsai - * NULL - * Refine a function parameter name. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * -*/ - -#ifndef _GL_P2P_IOCTL_H -#define _GL_P2P_IOCTL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - #include - #include -#endif - -#include "wlan_oid.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// (WirelessExtension) Private I/O Controls -#define IOC_P2P_CFG_DEVICE (SIOCIWFIRSTPRIV+0) -#define IOC_P2P_PROVISION_COMPLETE (SIOCIWFIRSTPRIV+2) -#define IOC_P2P_START_STOP_DISCOVERY (SIOCIWFIRSTPRIV+4) -#define IOC_P2P_DISCOVERY_RESULTS (SIOCIWFIRSTPRIV+5) -#define IOC_P2P_WSC_BEACON_PROBE_RSP_IE (SIOCIWFIRSTPRIV+6) -#define IOC_P2P_GO_WSC_IE IOC_P2P_WSC_BEACON_PROBE_RSP_IE -#define IOC_P2P_CONNECT_DISCONNECT (SIOCIWFIRSTPRIV+8) -#define IOC_P2P_PASSWORD_READY (SIOCIWFIRSTPRIV+10) -//#define IOC_P2P_SET_PWR_MGMT_PARAM (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_SET_INT (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_GET_STRUCT (SIOCIWFIRSTPRIV+13) -#define IOC_P2P_SET_STRUCT (SIOCIWFIRSTPRIV+14) -#define IOC_P2P_GET_REQ_DEVICE_INFO (SIOCIWFIRSTPRIV+15) - -#define PRIV_CMD_INT_P2P_SET 0 - -// IOC_P2P_PROVISION_COMPLETE (iw_point . flags) -#define P2P_PROVISIONING_SUCCESS 0 -#define P2P_PROVISIONING_FAIL 1 - -// IOC_P2P_START_STOP_DISCOVERY (iw_point . flags) -#define P2P_STOP_DISCOVERY 0 -#define P2P_START_DISCOVERY 1 - -// IOC_P2P_CONNECT_DISCONNECT (iw_point . flags) -#define P2P_CONNECT 0 -#define P2P_DISCONNECT 1 - -// IOC_P2P_START_STOP_DISCOVERY (scan_type) -#define P2P_SCAN_FULL_AND_FIND 0 -#define P2P_SCAN_FULL 1 -#define P2P_SCAN_SEARCH_AND_LISTEN 2 -#define P2P_LISTEN 3 - -// IOC_P2P_GET_STRUCT/IOC_P2P_SET_STRUCT -#define P2P_SEND_SD_RESPONSE 0 -#define P2P_GET_SD_REQUEST 1 -#define P2P_SEND_SD_REQUEST 2 -#define P2P_GET_SD_RESPONSE 3 -#define P2P_TERMINATE_SD_PHASE 4 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Wireless Extension: Private I/O Control */ -/*----------------------------------------------------------------------------*/ -typedef struct iw_p2p_cfg_device_type { - void __user *ssid; - UINT_8 ssid_len; - UINT_8 pri_device_type[8]; - UINT_8 snd_device_type[8]; - void __user *device_name; - UINT_8 device_name_len; - UINT_8 intend; - UINT_8 persistence; - UINT_8 sec_mode; - UINT_8 ch; - UINT_8 ch_width; /* 0: 20 Mhz 1:20/40 Mhz auto */ - UINT_8 max_scb; -} IW_P2P_CFG_DEVICE_TYPE, *P_IW_P2P_CFG_DEVICE_TYPE; - -typedef struct iw_p2p_hostapd_param { - UINT_8 cmd; - UINT_8 rsv[3]; - UINT_8 sta_addr[6]; - void __user *data; - UINT_16 len; -} IW_P2P_HOSTAPD_PARAM, *P_IW_P2P_HOSTAPD_PARAM; - -typedef struct iw_p2p_req_device_type { - UINT_8 scan_type; /* 0: Full scan + Find - * 1: Full scan - * 2: Scan (Search +Listen) - * 3: Listen - * other : reserved - */ - UINT_8 pri_device_type[8]; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_REQ_DEVICE_TYPE, *P_IW_P2P_REQ_DEVICE_TYPE; - -typedef struct iw_p2p_connect_device { - UINT_8 sta_addr[6]; - UINT_8 p2pRole; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 authPeer; /* 1: auth peer invitation request */ - UINT_8 intend_config_method; /* Request Peer Device used config method */ -} IW_P2P_CONNECT_DEVICE, *P_IW_P2P_CONNECT_DEVICE; - -typedef struct iw_p2p_password_ready { - UINT_8 active_config_method; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_PASSWORD_READY, *P_IW_P2P_PASSWORD_READY; - -typedef struct iw_p2p_device_req { - UINT_8 name[33]; - UINT_32 name_len; - UINT_8 device_addr[6]; - UINT_8 device_type; - INT_32 config_method; - INT_32 active_config_method; -} IW_P2P_DEVICE_REQ, *P_IW_P2P_DEVICE_REQ; - -typedef struct iw_p2p_transport_struct { - UINT_32 u4CmdId; - UINT_32 inBufferLength; - UINT_32 outBufferLength; - UINT_8 aucBuffer[16]; -} IW_P2P_TRANSPORT_STRUCT, *P_IW_P2P_TRANSPORT_STRUCT; - -// For Invitation -typedef struct iw_p2p_ioctl_invitation_struct { - UINT_8 aucDeviceID[6]; - UINT_8 aucGroupID[6]; // BSSID - UINT_8 aucSsid[32]; - UINT_32 u4SsidLen; - UINT_8 ucReinvoke; -} IW_P2P_IOCTL_INVITATION_STRUCT, *P_IW_P2P_IOCTL_INVITATION_STRUCT; - -typedef struct iw_p2p_ioctl_abort_invitation { - UINT_8 dev_addr[6]; -} IW_P2P_IOCTL_ABORT_INVITATION, *P_IW_P2P_IOCTL_ABORT_INVITATION; - -typedef struct iw_p2p_ioctl_invitation_indicate { - UINT_8 dev_addr[6]; - UINT_8 group_bssid[6]; - INT_32 config_method; /* peer device supported config method */ - UINT_8 dev_name[32]; /* for reinvoke */ - UINT_32 name_len; - UINT_8 operating_channel; /* for re-invoke, target operating channel */ - UINT_8 invitation_type; /* invitation or re-invoke */ -} IW_P2P_IOCTL_INVITATION_INDICATE, *P_IW_P2P_IOCTL_INVITATION_INDICATE; - -typedef struct iw_p2p_ioctl_invitation_status { - UINT_32 status_code; -} IW_P2P_IOCTL_INVITATION_STATUS, *P_IW_P2P_IOCTL_INVITATION_STATUS; - -//For Formation -typedef struct iw_p2p_ioctl_start_formation { - UINT_8 dev_addr[6]; /* bssid */ - UINT_8 role; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 auth; /* 1: auth peer invitation request */ - UINT_8 config_method; /* Request Peer Device used config method */ -}IW_P2P_IOCTL_START_FORMATION, *P_IW_P2P_IOCTL_START_FORMATION; - -/* SET_STRUCT / GET_STRUCT */ -typedef enum _ENUM_P2P_CMD_ID_T { - P2P_CMD_ID_SEND_SD_RESPONSE = 0, /* 0x00 (Set) */ - P2P_CMD_ID_GET_SD_REQUEST, /* 0x01 (Get) */ - P2P_CMD_ID_SEND_SD_REQUEST, /* 0x02 (Set) */ - P2P_CMD_ID_GET_SD_RESPONSE, /* 0x03 (Get) */ - P2P_CMD_ID_TERMINATE_SD_PHASE, /* 0x04 (Set) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - P2P_CMD_ID_SEC_CHECK, /* 0x05(Set) */ -#endif - P2P_CMD_ID_INVITATION, /* 0x06 (Set) */ - P2P_CMD_ID_INVITATION_INDICATE, /* 0x07 (Get) */ - P2P_CMD_ID_INVITATION_STATUS, /* 0x08 (Get) */ - P2P_CMD_ID_INVITATION_ABORT, /* 0x09 (Set) */ - P2P_CMD_ID_START_FORMATION, /* 0x0A (Set) */ - P2P_CMD_ID_P2P_VERSION, /* 0x0B (Set/Get) */ - P2P_CMD_ID_GET_CH_LIST = 12, /* 0x0C (Get) */ - P2P_CMD_ID_GET_OP_CH = 14 /* 0x0E (Get) */ -} ENUM_P2P_CMD_ID_T, *P_ENUM_P2P_CMD_ID_T; - -/* Service Discovery */ -typedef struct iw_p2p_cmd_send_sd_response { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_RESPONSE, *P_IW_P2P_CMD_SEND_SD_RESPONSE; - -typedef struct iw_p2p_cmd_get_sd_request { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_REQUEST, *P_IW_P2P_CMD_GET_SD_REQUEST; - -typedef struct iw_p2p_cmd_send_service_discovery_request { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_REQUEST, *P_IW_P2P_CMD_SEND_SD_REQUEST; - -typedef struct iw_p2p_cmd_get_sd_response { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_RESPONSE, *P_IW_P2P_CMD_GET_SD_RESPONSE; - -typedef struct iw_p2p_cmd_terminate_sd_phase { - PARAM_MAC_ADDRESS rPeerAddr; -} IW_P2P_CMD_TERMINATE_SD_PHASE, *P_IW_P2P_CMD_TERMINATE_SD_PHASE; - -typedef struct iw_p2p_version { - UINT_32 u4Version; -} IW_P2P_VERSION, *P_IW_P2P_VERSION; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros used for cfg80211 */ -#define RATETAB_ENT(_rate, _rateid, _flags) \ - { \ - .bitrate = (_rate), \ - .hw_value = (_rateid), \ - .flags = (_flags), \ - } - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) -int mtk_p2p_cfg80211_change_iface( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, u32 *flags, - struct vif_params *params - ); - -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - -int -mtk_p2p_cfg80211_set_default_key( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - -int mtk_p2p_cfg80211_scan( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ); - -int mtk_p2p_cfg80211_connect( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ); - -int mtk_p2p_cfg80211_disconnect( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ); - -int mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ); - -int mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ); - -int mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ); - -int mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ); - -int mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ); - -int -mtk_p2p_cfg80211_change_bss( - struct wiphy * wiphy, - struct net_device * dev, - struct bss_parameters * params - ); - -int -mtk_p2p_cfg80211_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - struct ieee80211_channel * chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 * cookie - ); - -int -mtk_p2p_cfg80211_cancel_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - u64 cookie - ); - -int -mtk_p2p_cfg80211_deauth( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_deauth_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); - - -int -mtk_p2p_cfg80211_disassoc( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_disassoc_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - -int -mtk_p2p_cfg80211_start_ap( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ); - - -int -mtk_p2p_cfg80211_change_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ); - -int -mtk_p2p_cfg80211_mgmt_tx( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie); - -#else -int -mtk_p2p_cfg80211_add_set_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ); - -int -mtk_p2p_cfg80211_mgmt_tx( - struct wiphy * wiphy, - struct net_device * dev, - struct ieee80211_channel * chan, - bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 * buf, - size_t len, - u64 *cookie - ); - -#endif - - -int -mtk_p2p_cfg80211_stop_ap( - struct wiphy * wiphy, - struct net_device * dev - ); - - - -int -mtk_p2p_cfg80211_del_station( - struct wiphy * wiphy, - struct net_device * dev, - u8 * mac - ); - -int -mtk_p2p_cfg80211_set_channel( - IN struct wiphy * wiphy, - IN struct net_device * dev, - IN struct ieee80211_channel * chan, - IN enum nl80211_channel_type channel_type - ); - -int -mtk_p2p_cfg80211_set_bitrate_mask( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ); - - -void -mtk_p2p_cfg80211_mgmt_frame_register( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); - -#if CFG_SUPPORT_WFD -int -mtk_p2p_cfg80211_testmode_wfd_update_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#endif - -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - -#endif - -/* I/O control handlers */ - -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_key ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls takes use of iw_handler */ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls for IOC_SET_STRUCT/IOC_GET_STRUCT */ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* IOC_SET_STRUCT/IOC_GET_STRUCT: Service Discovery */ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -#if CFG_SUPPORT_ANTI_PIRACY -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); -#endif - -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - - -void -mtk_p2p_wext_set_Multicastlist( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -int -mtk_p2p_wext_get_rssi( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats( - struct net_device *prDev - ); - -#endif - -int -mtk_p2p_wext_set_txpow( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_P2P_IOCTL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_kal.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_kal.h deleted file mode 100755 index bd38dbce0f16..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_kal.h +++ /dev/null @@ -1,395 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_kal.h#2 $ -*/ - -/*! \file gl_p2p_kal.h - \brief Declaration of KAL functions for Wi-Fi Direct support - - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - - - -/* -** $Log: gl_p2p_kal.h $ -** -** 08 30 2012 chinglan.wang -** [ALPS00349664] [6577JB][WIFI] Phone can not connect to AP secured with AES via WPS in 802.11n Only -** . - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 15 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Add group BSSID in invitation request indication. - * The BSSID is used for APP to decide the configure method. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 03 19 2011 terry.wu - * [WCXRP00000577] [MT6620 Wi-Fi][Driver][FW] Create V2.0 branch for firmware and driver - * create V2.0 p2p driver release based on label "MT6620_WIFI_P2P_DRIVER_V2_0_2100_0319_2011" from main trunk. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * -*/ - -#ifndef _GL_P2P_KAL_H -#define _GL_P2P_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_p2p.h" -#include "gl_kal.h" -#include "gl_wext_priv.h" -#include "gl_p2p_ioctl.h" -#include "nic/p2p.h" - - -#if DBG - extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/* Service Discovery */ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Wi-Fi Direct handling */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ); - -VOID -kalP2PUpdateAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ); - -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ); - -BOOLEAN -kalP2PGetCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalP2PGetTkipCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -BOOLEAN -kalP2PGetCcmpCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ); - -UINT_8 -kalP2PGetWscMode( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_16 -kalP2PCalWSC_IELen( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ); - -VOID -kalP2PGenWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ); - - -VOID -kalP2PUpdateWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ); - - - -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ); - -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ); - -VOID -kalP2PInvitationIndication( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ); - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -#if CFG_SUPPORT_ANTI_PIRACY -VOID -kalP2PIndicateSecCheckRsp( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID -kalP2PIndicateChannelReady( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ); - -VOID -kalP2PIndicateScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ); - -VOID -kalP2PIndicateBssInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ); - -VOID -kalP2PIndicateRxMgmtFrame( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ); - -VOID -kalP2PIndicateMgmtTxStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ); - -VOID -kalP2PIndicateChannelExpired( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -kalP2PGCIndicateConnectionStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ); - - -VOID -kalP2PGOStationUpdate( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ); - -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ); - -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ); - -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ); - -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ); - -#endif /* _GL_P2P_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_os.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_os.h deleted file mode 100755 index e2232499608a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_p2p_os.h +++ /dev/null @@ -1,199 +0,0 @@ -/* -** $Id: -//Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/os/linux/include/gl_p2p_os.h#28 $ -*/ - -/*! \file gl_p2p_os.h - \brief List the external reference to OS for p2p GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - - - - - -#ifndef _GL_P2P_OS_H -#define _GL_P2P_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -struct _GL_P2P_INFO_T { - - /* Device handle */ - struct net_device *prDevHandler; - - #if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* cfg80211 */ - struct wireless_dev wdev; - - struct cfg80211_scan_request *prScanRequest; - - UINT_64 u8Cookie; - - /* Generation for station list update. */ - INT_32 i4Generation; - - UINT_32 u4OsMgmtFrameFilter; - - #endif - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* glue layer variables */ - /*move to glueinfo->adapter*/ - // BOOLEAN fgIsRegistered; - UINT_32 u4FreqInKHz; /* frequency */ - UINT_8 ucRole; /* 0: P2P Device, 1: Group Client, 2: Group Owner */ - UINT_8 ucIntent; /* range: 0-15 */ - UINT_8 ucScanMode; /* 0: Search & Listen, 1: Scan without probe response */ - - ENUM_PARAM_MEDIA_STATE_T eState; - UINT_32 u4PacketFilter; - PARAM_MAC_ADDRESS aucMCAddrList[MAX_NUM_GROUP_ADDR]; - - /* connection-requested peer information */ - UINT_8 aucConnReqDevName[32]; - INT_32 u4ConnReqNameLength; - PARAM_MAC_ADDRESS rConnReqPeerAddr; - PARAM_MAC_ADDRESS rConnReqGroupAddr; /* For invitation group. */ - UINT_8 ucConnReqDevType; - INT_32 i4ConnReqConfigMethod; - INT_32 i4ConnReqActiveConfigMethod; - - UINT_32 u4CipherPairwise; - UINT_8 ucWSCRunning; - - UINT_8 aucWSCIE[3][400]; /* 0 for beacon, 1 for probe req, 2 for probe response */ - UINT_16 u2WSCIELen[3]; - -#if CFG_SUPPORT_WFD - UINT_8 aucVenderIE[1024]; /* Save the other IE for prove resp */ - UINT_16 u2VenderIELen; -#endif - - UINT_8 ucOperatingChnl; - UINT_8 ucInvitationType; - - UINT_32 u4InvStatus; - - /* For SET_STRUCT/GET_STRUCT */ - UINT_8 aucOidBuf[4096]; - -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - UINT_8 aucSecCheck[256]; - UINT_8 aucSecCheckRsp[256]; -#endif - - /* Hotspot Client Management */ - PARAM_MAC_ADDRESS aucblackMACList[8]; - UINT_8 ucMaxClients; - -}; - - -BOOLEAN -p2pRegisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pUnregisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -p2pSetMode( - IN BOOLEAN fgIsAPMOde - ); - - -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ); - -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_rst.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_rst.h deleted file mode 100755 index b85978a80e76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_rst.h +++ /dev/null @@ -1,131 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_rst.h#1 $ -*/ - -/*! \file gl_rst.h - \brief Declaration of functions and finite state machine for - MT6620 Whole-Chip Reset Mechanism -*/ - - - - -#ifndef _GL_RST_H -#define _GL_RST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* duplicated from wmt_exp.h for better driver isolation */ -typedef enum _ENUM_WMTDRV_TYPE_T { - WMTDRV_TYPE_BT = 0, - WMTDRV_TYPE_FM = 1, - WMTDRV_TYPE_GPS = 2, - WMTDRV_TYPE_WIFI = 3, - WMTDRV_TYPE_WMT = 4, - WMTDRV_TYPE_STP = 5, - WMTDRV_TYPE_SDIO1 = 6, - WMTDRV_TYPE_SDIO2 = 7, - WMTDRV_TYPE_LPBK = 8, - WMTDRV_TYPE_MAX -} ENUM_WMTDRV_TYPE_T, *P_ENUM_WMTDRV_TYPE_T; - -typedef enum _ENUM_WMTMSG_TYPE_T { - WMTMSG_TYPE_POWER_ON = 0, - WMTMSG_TYPE_POWER_OFF = 1, - WMTMSG_TYPE_RESET = 2, - WMTMSG_TYPE_STP_RDY= 3, - WMTMSG_TYPE_HW_FUNC_ON= 4, - WMTMSG_TYPE_MAX -} ENUM_WMTMSG_TYPE_T, *P_ENUM_WMTMSG_TYPE_T; - -typedef enum _ENUM_WMTRSTMSG_TYPE_T{ - WMTRSTMSG_RESET_START = 0x0, - WMTRSTMSG_RESET_END = 0x1, - WMTRSTMSG_RESET_MAX, - WMTRSTMSG_RESET_INVALID = 0xff -} ENUM_WMTRSTMSG_TYPE_T, *P_ENUM_WMTRSTMSG_TYPE_T; - -typedef void (*PF_WMT_CB)( - ENUM_WMTDRV_TYPE_T, /* Source driver type */ - ENUM_WMTDRV_TYPE_T, /* Destination driver type */ - ENUM_WMTMSG_TYPE_T, /* Message type */ - void *, /* READ-ONLY buffer. Buffer is allocated and freed by WMT_drv. Client - can't touch this buffer after this function return. */ - unsigned int /* Buffer size in unit of byte */ - ); - - -typedef enum _ENUM_WIFI_NETLINK_GRP_T{ - WIFI_NETLINK_GRP_RESET, - WIFI_NETLINK_GRP_MAX -} ENUM_WIFI_NETLINK_GRP_T, *P_ENUM_WIFI_NETLINK_GRP_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/* Reset Initialization/Uninitialization */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ); - -VOID -glResetUninit( - VOID - ); - -VOID -glSendResetRequest( - VOID - ); - -BOOLEAN -kalIsResetting( - VOID - ); - - -#endif /* _GL_RST_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_sec.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_sec.h deleted file mode 100755 index 16f0af93be89..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_sec.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_sec.h#1 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - - - - -#ifndef _GL_SEC_H -#define _GL_SEC_H - -extern void handle_sec_msg_1(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_2(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_3(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_4(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_5(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_final(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); - -#endif /* _GL_SEC_H */ diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_typedef.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_typedef.h deleted file mode 100755 index e220b43c36ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_typedef.h +++ /dev/null @@ -1,279 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_typedef.h#1 $ -*/ - -/*! \file gl_typedef.h - \brief Definition of basic data type(os dependent). - - In this file we define the basic data type. -*/ - - - -/* -** $Log: gl_typedef.h $ - * - * 06 22 2012 cp.wu - * [WCXRP00001257] [MT6620][MT5931][MT6628][Driver][Linux] Modify KAL_HZ to align ms accuracy - * modify KAL_HZ to (1000) for correct definition. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\6 2009-08-18 22:57:14 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\5 2008-09-22 23:19:30 GMT mtk01461 -** Update comment for code review -** \main\maintrunk.MT5921\4 2008-09-05 17:25:16 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\3 2007-11-09 11:00:50 GMT mtk01425 -** 1. Use macro to unify network-to-host and host-to-network related functions -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_TYPEDEF_H -#define _GL_TYPEDEF_H - -#if defined(CONFIG_HAS_EARLYSUSPEND) -#include -#endif - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define HZ of timer tick for function kalGetTimeTick() */ -#define KAL_HZ (1000) - -/* Miscellaneous Equates */ -#ifndef FALSE - #define FALSE ((BOOL) 0) - #define TRUE ((BOOL) 1) -#endif /* FALSE */ - -#ifndef NULL - #if defined(__cplusplus) - #define NULL 0 - #else - #define NULL ((void *) 0) - #endif -#endif - -#if defined(CONFIG_HAS_EARLYSUSPEND) -typedef void (*early_suspend_callback)(struct early_suspend *h); -typedef void (*late_resume_callback) (struct early_suspend *h); -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for void */ -typedef void VOID, *PVOID, **PPVOID; - -/* Type definition for Boolean */ -typedef unsigned char BOOL, *PBOOL, BOOLEAN, *PBOOLEAN; - -/* Type definition for signed integers */ -typedef signed char CHAR, *PCHAR, **PPCHAR; -typedef signed char INT_8, *PINT_8, **PPINT_8; -typedef signed short INT_16, *PINT_16, **PPINT_16; -typedef signed long INT_32, *PINT_32, **PPINT_32; -typedef signed long long INT_64, *PINT_64, **PPINT_64; - -/* Type definition for unsigned integers */ -typedef unsigned char UCHAR, *PUCHAR, **PPUCHAR; -typedef unsigned char UINT_8, *PUINT_8, **PPUINT_8, *P_UINT_8; -typedef unsigned short UINT_16, *PUINT_16, **PPUINT_16; -typedef unsigned long ULONG, UINT_32, *PUINT_32, **PPUINT_32; -typedef unsigned long long UINT_64, *PUINT_64, **PPUINT_64; - -typedef unsigned long OS_SYSTIME, *POS_SYSTIME, **PPOS_SYSTIME; - - -/* Type definition of large integer (64bits) union to be comptaible with - * Windows definition, so we won't apply our own coding style to these data types. - * NOTE: LARGE_INTEGER must NOT be floating variable. - * : Check for big-endian compatibility. - */ -typedef union _LARGE_INTEGER { - struct { - UINT_32 LowPart; - INT_32 HighPart; - } u; - INT_64 QuadPart; -} LARGE_INTEGER, *PLARGE_INTEGER; - -typedef union _ULARGE_INTEGER { - struct { - UINT_32 LowPart; - UINT_32 HighPart; - } u; - UINT_64 QuadPart; -} ULARGE_INTEGER, *PULARGE_INTEGER; - - -typedef INT_32 (*probe_card)(PVOID pvData); -typedef VOID (*remove_card)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define IN //volatile -#define OUT //volatile - -#define __KAL_INLINE__ static __inline__ -#define __KAL_ATTRIB_PACKED__ __attribute__((__packed__)) -#define __KAL_ATTRIB_ALIGN_4__ __attribute__ ((aligned (4))) - - -#ifndef BIT -#define BIT(n) ((UINT_32) 1UL << (n)) -#endif /* BIT */ - -#ifndef BITS -/* bits range: for example BITS(16,23) = 0xFF0000 - * ==> (BIT(m)-1) = 0x0000FFFF ~(BIT(m)-1) => 0xFFFF0000 - * ==> (BIT(n+1)-1) = 0x00FFFFFF - */ -#define BITS(m,n) (~(BIT(m)-1) & ((BIT(n) - 1) | BIT(n))) -#endif /* BIT */ - - -/* This macro returns the byte offset of a named field in a known structure - type. - _type - structure name, - _field - field name of the structure */ -#ifndef OFFSET_OF - #define OFFSET_OF(_type, _field) ((UINT_32)&(((_type *)0)->_field)) -#endif /* OFFSET_OF */ - - -/* This macro returns the base address of an instance of a structure - * given the type of the structure and the address of a field within the - * containing structure. - * _addrOfField - address of current field of the structure, - * _type - structure name, - * _field - field name of the structure - */ -#ifndef ENTRY_OF - #define ENTRY_OF(_addrOfField, _type, _field) \ - ((_type *)((PINT_8)(_addrOfField) - (PINT_8)OFFSET_OF(_type, _field))) -#endif /* ENTRY_OF */ - - -/* This macro align the input value to the DW boundary. - * _value - value need to check - */ -#ifndef ALIGN_4 - #define ALIGN_4(_value) (((_value) + 3) & ~3u) -#endif /* ALIGN_4 */ - -/* This macro check the DW alignment of the input value. - * _value - value of address need to check - */ -#ifndef IS_ALIGN_4 - #define IS_ALIGN_4(_value) (((_value) & 0x3) ? FALSE : TRUE) -#endif /* IS_ALIGN_4 */ - -#ifndef IS_NOT_ALIGN_4 - #define IS_NOT_ALIGN_4(_value) (((_value) & 0x3) ? TRUE : FALSE) -#endif /* IS_NOT_ALIGN_4 */ - - -/* This macro evaluate the input length in unit of Double Word(4 Bytes). - * _value - value in unit of Byte, output will round up to DW boundary. - */ -#ifndef BYTE_TO_DWORD - #define BYTE_TO_DWORD(_value) ((_value + 3) >> 2) -#endif /* BYTE_TO_DWORD */ - -/* This macro evaluate the input length in unit of Byte. - * _value - value in unit of DW, output is in unit of Byte. - */ -#ifndef DWORD_TO_BYTE - #define DWORD_TO_BYTE(_value) ((_value) << 2) -#endif /* DWORD_TO_BYTE */ - -#if 1 // Little-Endian - #define CONST_NTOHS(_x) __constant_ntohs(_x) - - #define CONST_HTONS(_x) __constant_htons(_x) - - #define NTOHS(_x) ntohs(_x) - - #define HTONS(_x) htons(_x) - - #define NTOHL(_x) ntohl(_x) - - #define HTONL(_x) htonl(_x) - -#else // Big-Endian - - #define CONST_NTOHS(_x) - - #define CONST_HTONS(_x) - - #define NTOHS(_x) - - #define HTONS(_x) - -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_TYPEDEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_wext.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_wext.h deleted file mode 100755 index 7a5129f7a54d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_wext.h +++ /dev/null @@ -1,376 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_wext.h#1 $ -*/ - -/*! \file gl_wext.h - \brief This file is for Portable Driver linux wireless extension support. -*/ - - - -/* -** $Log: gl_wext.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\12 2009-10-20 17:38:33 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\11 2009-09-28 20:19:28 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\10 2009-09-03 12:12:35 GMT mtk01088 -** adding the function declaration -** \main\maintrunk.MT5921\9 2009-08-18 22:57:17 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\8 2008-08-29 16:59:07 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\7 2008-08-29 14:13:28 GMT mtk01088 -** adjust the header file for code refine -** \main\maintrunk.MT5921\6 2008-03-28 10:40:31 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\5 2008-03-11 14:51:08 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\4 2008-02-12 23:45:45 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\3 2007-11-06 19:36:19 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_H -#define _GL_WEXT_H - -#ifdef WIRELESS_EXT -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define KILO 1000 -#define RATE_5_5M 11 /* 5.5M */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PARAM_FIXED_IEs { - UINT_8 aucTimestamp[8]; - UINT_16 u2BeaconInterval; - UINT_16 u2Capabilities; -} PARAM_FIXED_IEs; - -typedef struct _PARAM_VARIABLE_IE_T { - UINT_8 ucElementID; - UINT_8 ucLength; - UINT_8 aucData[1]; -} PARAM_VARIABLE_IE_T, *P_PARAM_VARIABLE_IE_T; - - -#if WIRELESS_EXT < 18 - -#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses struct iw_mlme */ -/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ -#define IW_MLME_DEAUTH 0 -#define IW_MLME_DISASSOC 1 - -/*! \brief SIOCSIWMLME data */ -struct iw_mlme { - __u16 cmd; /*!< IW_MLME_* */ - __u16 reason_code; - struct sockaddr addr; -}; - -#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */ -#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */ -/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ -#define IW_AUTH_INDEX 0x0FFF -#define IW_AUTH_FLAGS 0xF000 -/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) - * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the - * parameter that is being set/get to; value will be read/written to - * struct iw_param value field) */ -#define IW_AUTH_WPA_VERSION 0 -#define IW_AUTH_CIPHER_PAIRWISE 1 -#define IW_AUTH_CIPHER_GROUP 2 -#define IW_AUTH_KEY_MGMT 3 -#define IW_AUTH_TKIP_COUNTERMEASURES 4 -#define IW_AUTH_DROP_UNENCRYPTED 5 -#define IW_AUTH_80211_AUTH_ALG 6 -#define IW_AUTH_WPA_ENABLED 7 -#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 -#define IW_AUTH_ROAMING_CONTROL 9 -#define IW_AUTH_PRIVACY_INVOKED 10 -#if CFG_SUPPORT_802_11W -#define IW_AUTH_MFP 12 - -#define IW_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define IW_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define IW_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/* IW_AUTH_WPA_VERSION values (bit field) */ -#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 -#define IW_AUTH_WPA_VERSION_WPA 0x00000002 -#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 - -/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ -#define IW_AUTH_CIPHER_NONE 0x00000001 -#define IW_AUTH_CIPHER_WEP40 0x00000002 -#define IW_AUTH_CIPHER_TKIP 0x00000004 -#define IW_AUTH_CIPHER_CCMP 0x00000008 -#define IW_AUTH_CIPHER_WEP104 0x00000010 - -/* IW_AUTH_KEY_MGMT values (bit field) */ -#define IW_AUTH_KEY_MGMT_802_1X 1 -#define IW_AUTH_KEY_MGMT_PSK 2 -#define IW_AUTH_KEY_MGMT_WPA_NONE 4 - -/* IW_AUTH_80211_AUTH_ALG values (bit field) */ -#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 -#define IW_AUTH_ALG_SHARED_KEY 0x00000002 -#define IW_AUTH_ALG_LEAP 0x00000004 - -/* IW_AUTH_ROAMING_CONTROL values */ -#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ -#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming - * control */ - -#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */ -#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */ -/* SIOCSIWENCODEEXT definitions */ -#define IW_ENCODE_SEQ_MAX_SIZE 8 -/* struct iw_encode_ext ->alg */ -#define IW_ENCODE_ALG_NONE 0 -#define IW_ENCODE_ALG_WEP 1 -#define IW_ENCODE_ALG_TKIP 2 -#define IW_ENCODE_ALG_CCMP 3 -#if CFG_SUPPORT_802_11W -#define IW_ENCODE_ALG_AES_CMAC 5 -#endif - -/* struct iw_encode_ext ->ext_flags */ -#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 -#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 -#define IW_ENCODE_EXT_GROUP_KEY 0x00000004 -#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008 - -struct iw_encode_ext { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - struct sockaddr addr; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[0]; -}; - -#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */ -#define IW_PMKSA_ADD 1 -#define IW_PMKSA_REMOVE 2 -#define IW_PMKSA_FLUSH 3 - -#define IW_PMKID_LEN 16 - -struct iw_pmksa { - __u32 cmd; /*!< IW_PMKSA_* */ - struct sockaddr bssid; - __u8 pmkid[IW_PMKID_LEN]; -}; - -#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..) - * (scan results); This includes id and - * length fields. One IWEVGENIE may - * contain more than one IE. Scan - * results may contain one or more - * IWEVGENIE events. */ -#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure - * (struct iw_michaelmicfailure) - */ -#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request. - * The data includes id and length - * fields and may contain more than one - * IE. This event is required in - * Managed mode if the driver - * generates its own WPA/RSN IE. This - * should be sent just before - * IWEVREGISTERED event for the - * association. */ -#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association - * Response. The data includes id and - * length fields and may contain more - * than one IE. This may be sent - * between IWEVASSOCREQIE and - * IWEVREGISTERED events for the - * association. */ -#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN - * pre-authentication - * (struct iw_pmkid_cand) */ - -#endif /* WIRELESS_EXT < 18 */ - -#if WIRELESS_EXT < 17 -/* Statistics flags (bitmask in updated) */ -#define IW_QUAL_QUAL_UPDATED 0x1 /* Value was updated since last read */ -#define IW_QUAL_LEVEL_UPDATED 0x2 -#define IW_QUAL_NOISE_UPDATED 0x4 -#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ -#define IW_QUAL_LEVEL_INVALID 0x20 -#define IW_QUAL_NOISE_INVALID 0x40 -#endif - -enum { - IEEE80211_FILTER_TYPE_BEACON = 1<<0, - IEEE80211_FILTER_TYPE_PROBE_REQ = 1<<1, - IEEE80211_FILTER_TYPE_PROBE_RESP = 1<<2, - IEEE80211_FILTER_TYPE_ASSOC_REQ = 1<<3, - IEEE80211_FILTER_TYPE_ASSOC_RESP = 1<<4, - IEEE80211_FILTER_TYPE_AUTH = 1<<5, - IEEE80211_FILTER_TYPE_DEAUTH = 1<<6, - IEEE80211_FILTER_TYPE_DISASSOC = 1<<7, - IEEE80211_FILTER_TYPE_ALL = 0xFF /* used to check the valid filter bits */ -}; - -#if CFG_SUPPORT_WAPI -#define IW_AUTH_WAPI_ENABLED 0x20 -#define IW_ENCODE_ALG_SMS4 0x20 -#endif - -#if CFG_SUPPORT_WAPI /* Android+ */ -#define IW_AUTH_KEY_MGMT_WAPI_PSK 3 -#define IW_AUTH_KEY_MGMT_WAPI_CERT 4 -#endif -#define IW_AUTH_KEY_MGMT_WPS 5 - -#if CFG_SUPPORT_802_11W -#define IW_AUTH_KEY_MGMT_802_1X_SHA256 7 -#define IW_AUTH_KEY_MGMT_PSK_SHA256 8 -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern const struct iw_handler_def wext_handler_def; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* wireless extensions' ioctls */ -int -wext_support_ioctl( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ); - -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ); - -void -wext_indicate_wext_event( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4DataLen - ); - -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ); - -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ); - -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* WIRELESS_EXT */ - -#endif /* _GL_WEXT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_wext_priv.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_wext_priv.h deleted file mode 100755 index 1aa496ae323f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/include/gl_wext_priv.h +++ /dev/null @@ -1,398 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_wext_priv.h#3 $ -*/ - -/*! \file gl_wext_priv.h - \brief This file includes private ioctl support. -*/ - - - -/* -** $Log: gl_wext_priv.h $ - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add a CMD ID for P2P driver version query. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\16 2009-09-29 16:47:23 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\15 2009-09-28 20:19:31 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\14 2009-05-07 22:26:06 GMT mtk01089 -** add private IO control for Linux BWCS -** \main\maintrunk.MT5921\13 2008-08-29 14:55:20 GMT mtk01088 -** adjust the code to meet coding style -** \main\maintrunk.MT5921\12 2008-07-16 15:23:45 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\11 2008-07-14 13:55:58 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\10 2008-07-09 00:20:24 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\9 2008-05-30 20:27:24 GMT mtk01461 -** Add POWER_MODE Private IOCTL cmd -** \main\maintrunk.MT5921\8 2008-04-17 23:06:44 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\7 2008-03-31 21:01:24 GMT mtk01461 -** Add priv IOCTL for VOIP settings -** \main\maintrunk.MT5921\6 2008-03-31 13:49:47 GMT mtk01461 -** add priv ioctl arg definition for turning on / off roaming -** \main\maintrunk.MT5921\5 2008-03-26 15:35:09 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\4 2008-03-11 14:51:11 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\3 2007-11-06 19:36:25 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_PRIV_H -#define _GL_WEXT_PRIV_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/* If it is set to 1, iwpriv will support register read/write */ -#define CFG_SUPPORT_PRIV_MCR_RW 1 - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* New wireless extensions API - SET/GET convention (even ioctl numbers are - * root only) - */ -#define IOCTL_SET_INT (SIOCIWFIRSTPRIV + 0) -#define IOCTL_GET_INT (SIOCIWFIRSTPRIV + 1) - -#define IOCTL_SET_ADDRESS (SIOCIWFIRSTPRIV + 2) -#define IOCTL_GET_ADDRESS (SIOCIWFIRSTPRIV + 3) -#define IOCTL_SET_STR (SIOCIWFIRSTPRIV + 4) -#define IOCTL_GET_STR (SIOCIWFIRSTPRIV + 5) -#define IOCTL_SET_KEY (SIOCIWFIRSTPRIV + 6) -#define IOCTL_GET_KEY (SIOCIWFIRSTPRIV + 7) -#define IOCTL_SET_STRUCT (SIOCIWFIRSTPRIV + 8) -#define IOCTL_GET_STRUCT (SIOCIWFIRSTPRIV + 9) -#define IOCTL_SET_STRUCT_FOR_EM (SIOCIWFIRSTPRIV + 11) -#define IOCTL_SET_INTS (SIOCIWFIRSTPRIV + 12) -#define IOCTL_GET_INTS (SIOCIWFIRSTPRIV + 13) - -#define PRIV_CMD_REG_DOMAIN 0 -#define PRIV_CMD_BEACON_PERIOD 1 -#define PRIV_CMD_ADHOC_MODE 2 - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - #define PRIV_CMD_CSUM_OFFLOAD 3 -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#define PRIV_CMD_ROAMING 4 -#define PRIV_CMD_VOIP_DELAY 5 -#define PRIV_CMD_POWER_MODE 6 - -#define PRIV_CMD_WMM_PS 7 -#define PRIV_CMD_BT_COEXIST 8 -#define PRIV_GPIO2_MODE 9 - -#define PRIV_CUSTOM_SET_PTA 10 -#define PRIV_CUSTOM_CONTINUOUS_POLL 11 -#define PRIV_CUSTOM_SINGLE_ANTENNA 12 -#define PRIV_CUSTOM_BWCS_CMD 13 -#define PRIV_CUSTOM_DISABLE_BEACON_DETECTION 14//later -#define PRIV_CMD_OID 15 -#define PRIV_SEC_MSG_OID 16 - -#define PRIV_CMD_TEST_MODE 17 -#define PRIV_CMD_TEST_CMD 18 -#define PRIV_CMD_ACCESS_MCR 19 -#define PRIV_CMD_SW_CTRL 20 - -#if 1 /* ANTI_PRIVCY */ -#define PRIV_SEC_CHECK_OID 21 -#endif - -#define PRIV_CMD_WSC_PROBE_REQ 22 - -#define PRIV_CMD_P2P_VERSION 23 - -#define PRIV_CMD_GET_CH_LIST 24 - -#define PRIV_CMD_SET_TX_POWER 25 - -#define PRIV_CMD_BAND_CONFIG 26 - -#define PRIV_CMD_DUMP_MEM 27 - -#define PRIV_CMD_P2P_MODE 28 - -#define PRIV_CMD_GET_BUILD_DATE_CODE 29 - -/* 802.3 Objects (Ethernet) */ -#define OID_802_3_CURRENT_ADDRESS 0x01010102 - -/* IEEE 802.11 OIDs */ -#define OID_802_11_SUPPORTED_RATES 0x0D01020E -#define OID_802_11_CONFIGURATION 0x0D010211 - -/* PnP and PM OIDs, NDIS default OIDS */ -#define OID_PNP_SET_POWER 0xFD010101 - -#define OID_CUSTOM_OID_INTERFACE_VERSION 0xFFA0C000 - -/* MT5921 specific OIDs */ -#define OID_CUSTOM_BT_COEXIST_CTRL 0xFFA0C580 -#define OID_CUSTOM_POWER_MANAGEMENT_PROFILE 0xFFA0C581 -#define OID_CUSTOM_PATTERN_CONFIG 0xFFA0C582 -#define OID_CUSTOM_BG_SSID_SEARCH_CONFIG 0xFFA0C583 -#define OID_CUSTOM_VOIP_SETUP 0xFFA0C584 -#define OID_CUSTOM_ADD_TS 0xFFA0C585 -#define OID_CUSTOM_DEL_TS 0xFFA0C586 -#define OID_CUSTOM_SLT 0xFFA0C587 -#define OID_CUSTOM_ROAMING_EN 0xFFA0C588 -#define OID_CUSTOM_WMM_PS_TEST 0xFFA0C589 -#define OID_CUSTOM_COUNTRY_STRING 0xFFA0C58A -#define OID_CUSTOM_MULTI_DOMAIN_CAPABILITY 0xFFA0C58B -#define OID_CUSTOM_GPIO2_MODE 0xFFA0C58C -#define OID_CUSTOM_CONTINUOUS_POLL 0xFFA0C58D -#define OID_CUSTOM_DISABLE_BEACON_DETECTION 0xFFA0C58E - -/* CR1460, WPS privacy bit check disable */ -#define OID_CUSTOM_DISABLE_PRIVACY_CHECK 0xFFA0C600 - -/* Precedent OIDs */ -#define OID_CUSTOM_MCR_RW 0xFFA0C801 -#define OID_CUSTOM_EEPROM_RW 0xFFA0C803 -#define OID_CUSTOM_SW_CTRL 0xFFA0C805 -#define OID_CUSTOM_MEM_DUMP 0xFFA0C807 - - -/* RF Test specific OIDs */ -#define OID_CUSTOM_TEST_MODE 0xFFA0C901 -#define OID_CUSTOM_TEST_RX_STATUS 0xFFA0C903 -#define OID_CUSTOM_TEST_TX_STATUS 0xFFA0C905 -#define OID_CUSTOM_ABORT_TEST_MODE 0xFFA0C906 -#define OID_CUSTOM_MTK_WIFI_TEST 0xFFA0C911 - -/* BWCS */ -#define OID_CUSTOM_BWCS_CMD 0xFFA0C931 -#define OID_CUSTOM_SINGLE_ANTENNA 0xFFA0C932 -#define OID_CUSTOM_SET_PTA 0xFFA0C933 - -/* NVRAM */ -#define OID_CUSTOM_MTK_NVRAM_RW 0xFFA0C941 -#define OID_CUSTOM_CFG_SRC_TYPE 0xFFA0C942 -#define OID_CUSTOM_EEPROM_TYPE 0xFFA0C943 - - -#if CFG_SUPPORT_WAPI -#define OID_802_11_WAPI_MODE 0xFFA0CA00 -#define OID_802_11_WAPI_ASSOC_INFO 0xFFA0CA01 -#define OID_802_11_SET_WAPI_KEY 0xFFA0CA02 -#endif - -#if CFG_SUPPORT_WPS2 -#define OID_802_11_WSC_ASSOC_INFO 0xFFA0CB00 -#endif - - -/* Define magic key of test mode (Don't change it for future compatibity) */ -#define PRIV_CMD_TEST_MAGIC_KEY 2011 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* NIC BBCR configuration entry structure */ -typedef struct _PRIV_CONFIG_ENTRY { - UINT_8 ucOffset; - UINT_8 ucValue; -} PRIV_CONFIG_ENTRY, *PPRIV_CONFIG_ENTRY; - -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC_REQ) ( - IN PVOID prAdapter, - IN OUT PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_OID_METHOD_T { - ENUM_OID_GLUE_ONLY, - ENUM_OID_GLUE_EXTENSION, - ENUM_OID_DRIVER_CORE -} ENUM_OID_METHOD_T, *P_ENUM_OID_METHOD_T; - -/* OID set/query processing entry */ -typedef struct _WLAN_REQ_ENTRY { - UINT_32 rOid; /* OID */ - PUINT_8 pucOidName; /* OID name text */ - BOOLEAN fgQryBufLenChecking; - BOOLEAN fgSetBufLenChecking; - ENUM_OID_METHOD_T eOidMethod; - UINT_32 u4InfoBufLen; - PFN_OID_HANDLER_FUNC_REQ pfOidQueryHandler; /* PFN_OID_HANDLER_FUNC*/ - PFN_OID_HANDLER_FUNC_REQ pfOidSetHandler; /* PFN_OID_HANDLER_FUNC */ -} WLAN_REQ_ENTRY, *P_WLAN_REQ_ENTRY; - -typedef struct _NDIS_TRANSPORT_STRUCT { - UINT_32 ndisOidCmd; - UINT_32 inNdisOidlength; - UINT_32 outNdisOidLength; - UINT_8 ndisOidContent[16]; -} NDIS_TRANSPORT_STRUCT, *P_NDIS_TRANSPORT_STRUCT; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -int -priv_set_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_struct( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_support_ioctl ( - IN struct net_device *prDev, - IN OUT struct ifreq *prReq, - IN int i4Cmd - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_WEXT_PRIV_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/platform.c b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/platform.c deleted file mode 100755 index f3b8516e487a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/linux/platform.c +++ /dev/null @@ -1,620 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/platform.c#1 $ -*/ - -/*! \file "platform.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from wlan_oid.c and for parse.c and - rsn.c and nic_privacy.c - -*/ - - - -/* -** $Log: platform.c $ - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 13 2011 jeffrey.chang - * [WCXRP00000983] [MT6620][Wi-Fi Driver] invalid pointer casting causes kernel panic during p2p connection - * fix the pointer casting - * - * 06 29 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * . - * - * 06 28 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * remove un-used code - * - * 05 11 2011 jeffrey.chang - * NULL - * fix build error - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 03 2011 jeffrey.chang - * NULL - * add the ARP filter callback - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 01 2011 cp.wu - * [WCXRP00000413] [MT6620 Wi-Fi][Driver] Merge 1103 changes on NVRAM file path change to DaVinci main trunk and V1.1 branch - * upon Jason Zhang(NVRAM owner)'s change, ALPS has modified its NVRAM storage from /nvram/... to /data/nvram/... - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * -** -*/ -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - #include -#endif - -#include "gl_os.h" - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLY_SUSPEND) - #include -#endif -#endif - - -extern BOOLEAN fgIsUnderEarlierSuspend; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define WIFI_NVRAM_FILE_NAME "/data/nvram/APCFG/APRDEB/WIFI_6628" -#define WIFI_NVRAM_CUSTOM_NAME "/data/nvram/APCFG/APRDEB/WIFI_CUSTOM" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -static int netdev_event(struct notifier_block *nb, unsigned long notification, void *ptr) -{ - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -//#ifdef CONFIG_IPV6 -#if 0 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - struct in_ifaddr *ifa = (struct in_ifaddr *) ptr; - struct net_device *prDev = ifa->ifa_dev->dev; - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (prDev == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: device is empty.\n")); - return NOTIFY_DONE; - } - - if ((strncmp(prDev->name, "p2p", 3) != 0) && (strncmp(prDev->name, "wlan", 4) != 0)) { - DBGLOG(REQ, INFO, ("netdev_event: xxx\n")); - return NOTIFY_DONE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: prGlueInfo is empty.\n")); - return NOTIFY_DONE; - } - ASSERT(prGlueInfo); - - if (fgIsUnderEarlierSuspend == false) { - DBGLOG(REQ, INFO, ("netdev_event: PARAM_MEDIA_STATE_DISCONNECTED. (%d)\n", prGlueInfo->eParamMediaStateIndicated)); - return NOTIFY_DONE; - } - - - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(REQ, INFO, ("ip is not avaliable.\n")); - return NOTIFY_DONE; - } - - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(REQ, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -//#ifdef CONFIG_IPV6 -#if 0 - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return NOTIFY_DONE; - } - - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - //u4NumIPv6++; - } -#endif - - // here we can compare the dev with other network's netdev to - // set the proper arp filter - // - // IMPORTANT: please make sure if the context can sleep, if the context can't sleep - // we should schedule a kernel thread to do this for us - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; - UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - -//#ifdef CONFIG_IPV6 -#if 0 - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; -#else - prParamNetAddrList->u4AddressCount = u4NumIPv4; -#endif - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -//#ifdef CONFIG_IPV6 -#if 0 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(aucBuf)); - - DBGLOG(REQ, INFO, ("kalIoctl (0x%x, 0x%x)\n", prGlueInfo, prParamNetAddrList)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } - - return NOTIFY_DONE; - -} - -static struct notifier_block inetaddr_notifier = { - .notifier_call = netdev_event, -}; - -void wlanRegisterNotifier(void) -{ - register_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanRegisterNotifier); - -void wlanUnregisterNotifier(void) -{ - unregister_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanUnregisterNotifier); - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLYSUSPEND) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register platform driver to os -* -* \param[in] wlanSuspend Function pointer to platform suspend function -* \param[in] wlanResume Function pointer to platform resume function -* -* \return The result of registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume) -{ - int ret = 0; - - if(NULL != wlanSuspend) - prDesc->suspend = wlanSuspend; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanSuspend ERROR.\n")); - ret = -1; - } - - if(NULL != wlanResume) - prDesc->resume = wlanResume; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanResume ERROR.\n")); - ret = -1; - } - - register_early_suspend(prDesc); - return ret; -} - -//EXPORT_SYMBOL(glRegisterEarlySuspend); - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will un-register platform driver to os -* -* \return The result of un-registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glUnregisterEarlySuspend(struct early_suspend *prDesc) -{ - int ret = 0; - - unregister_early_suspend(prDesc); - - prDesc->suspend = NULL; - prDesc->resume = NULL; - - return ret; -} - -//EXPORT_SYMBOL(glUnregisterEarlySuspend); -#endif -#endif // !CONFIG_X86 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for reading data from files on NVRAM-FS -* -* \param[in] -* filename -* len -* offset -* \param[out] -* buf -* \return -* actual length of data being read -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_read( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_RDONLY, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to open!!\n")); - return -1; - } - - do { - if ((fd->f_op == NULL) || (fd->f_op->read == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : file can not be read!!\n")); - break; - } - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->read(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAM - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for writing data to files on NVRAM-FS -* -* \param[in] -* filename -* buf -* len -* offset -* \return -* actual length of data being written -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_write ( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_WRONLY|O_CREAT, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to open!!\n")); - return -1; - } - - do{ - if ((fd->f_op == NULL) || (fd->f_op->write == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : file can not be write!!\n")); - break; - } /* End of if */ - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->write(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAMS - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for reading data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* \param[out] -* pu2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ) -{ - if(pu2Data == NULL) { - return FALSE; - } - - if(nvram_read(WIFI_NVRAM_FILE_NAME, - (char *)pu2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for writing data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* u2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Offset, - UINT_16 u2Data - ) -{ - if(nvram_write(WIFI_NVRAM_FILE_NAME, - (char *)&u2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - diff --git a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/version.h b/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/version.h deleted file mode 100755 index 716a0628d755..000000000000 --- a/drivers/net/wireless/rockchip_wlan/combo_mt66xx/mt6628/wlan/os/version.h +++ /dev/null @@ -1,200 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/version.h#1 $ -*/ - -/*! \file "version.h" - \brief Driver's version definition - -*/ - - - -/* -** $Log: version.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.1.1. - * - * 08 26 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.9.. - * - * 08 23 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.8. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * correct typo. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * for building MT6628 Win32 driver environment - * - * 08 03 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.7. - * - * 07 24 2011 puff.wen - * NULL - * [MT5931][Beta 5]Change the version number to v0.2.2.0 - * - * 06 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.6.. - * - * 05 09 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.5.. - * - * 04 19 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.4. - * - * 04 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.3. - * - * 03 25 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.2. - * - * 03 21 2011 chinglan.wang - * NULL - * Change the version number to 2.0.0.1. - * - * 03 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.0. - * - * 02 11 2011 chinglan.wang - * NULL - * Change to the version 1.2.0.2. - * - * 02 10 2011 chinglan.wang - * NULL - * Change the version to 1.2.0.1. - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * [WINDDK] build system changes for MT5931 - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-12-14 14:10:55 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-17 22:41:00 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-13 16:20:33 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:27:13 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _VERSION_H -#define _VERSION_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef NIC_AUTHOR -#define NIC_AUTHOR "NIC_AUTHOR" -#endif -#ifndef NIC_DESC -#define NIC_DESC "NIC_DESC" -#endif - -#ifndef NIC_NAME - #if defined(MT6620) - #define NIC_NAME "MT6620" - #define NIC_DEVICE_ID "MT6620" - #define NIC_DEVICE_ID_LOW "mt6620" - #elif defined(MT5931) - #define NIC_NAME "MT5931" - #define NIC_DEVICE_ID "MT5931" - #define NIC_DEVICE_ID_LOW "mt5931" - #elif defined(MT6628) - #define NIC_NAME "MT6628" - #define NIC_DEVICE_ID "MT6628" - #define NIC_DEVICE_ID_LOW "mt6628" - #endif -#endif - -/* NIC driver information */ -#define NIC_VENDOR "MediaTek Inc." -#define NIC_VENDOR_OUI {0x00, 0x0C, 0xE7} - -#if defined(MT6620) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter Driver" -#elif defined(MT5931) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter Driver" -#elif defined(MT6628) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter Driver" -#endif - -/* Define our driver version */ -#define NIC_DRIVER_MAJOR_VERSION 2 -#define NIC_DRIVER_MINOR_VERSION 0 -#define NIC_DRIVER_VERSION 2,0,1,1 -#define NIC_DRIVER_VERSION_STRING "2.0.1.1" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#endif /* _VERSION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/Kconfig b/drivers/net/wireless/rockchip_wlan/mt5931/Kconfig deleted file mode 100755 index 4835b1783d8e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/Kconfig +++ /dev/null @@ -1,19 +0,0 @@ - config MT5931 - depends on WLAN_80211 && MMC - select WIRELESS_EXT - select WEXT_PRIV - select CFG80211 - select NL80211_TESTMODE - bool "MediaTek MT5931 WiFi" - ---help--- - MediaTek MT5931 WiFi - - config MT5931_MT6622 - depends on WLAN_80211 && MMC - select WIRELESS_EXT - select WEXT_PRIV - select CFG80211 - select NL80211_TESTMODE - bool "MediaTek MT5931 & MT6622 WiFi Bluetooth Combo" - ---help--- - MediaTek MT5931 & MT6622 WiFi Bluetooth Combo diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/Makefile b/drivers/net/wireless/rockchip_wlan/mt5931/Makefile deleted file mode 100755 index eaf16c44529c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -# --------------------------------------------------- -# Compile Options -# --------------------------------------------------- - -#include $(MTK_PATH_BUILD)/Makefile -#ccflags-y += -DLINUX -DMT6620 -ccflags-y += -DLINUX -DMT5931 ##mark skynine modify DMT6620-->DMT5931 - -ifeq ($(MTK_WAPI_SUPPORT), yes) - ccflags-y += -DCFG_SUPPORT_WAPI=1 -else - ccflags-y += -DCFG_SUPPORT_WAPI=0 -endif - -ifeq ($(HAVE_XLOG_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_XLOG=1 -else - ccflags-y += -DCFG_SUPPORT_XLOG=0 -endif - -ifeq ($(HAVE_AEE_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_AEE=1 -else - ccflags-y += -DCFG_SUPPORT_AEE=0 -endif - -#ifeq ($(CONFIG_MTK_COMBO_WIFI_HIF_SDIO1), y) -# ccflags-y += -D_HIF_SDIO=1 -#endif - -#MODULE_NAME := wlan_mt6620 -MODULE_NAME := wlan ##mark skynine modify MT6620-->MT5931 - -ccflags-y += -D_HIF_SDIO=1 - -ccflags-y += -DRSSI_ENHANCE=1 - -ccflags-y += -DDBG=0 -ccflags-y += -I$(src)/os -I$(src)/os/linux/include -I$(src)/os/linux/hif/sdio/include -ccflags-y += -I$(src)/include -I$(src)/include/nic -I$(src)/include/mgmt - -#obj-$(CONFIG_MTK_COMBO_WIFI) += $(MODULE_NAME).o -#obj-$(CONFIG_MT5931) += $(MODULE_NAME).o -#obj-y += $(MODULE_NAME).o - -# --------------------------------------------------- -# Directory List -# --------------------------------------------------- -COMMON_DIR := common/ -OS_DIR := os/linux/ -HIF_DIR := os/linux/hif/sdio/ -NIC_DIR := nic/ -MGMT_DIR := mgmt/ - - -# --------------------------------------------------- -# Objects List -# --------------------------------------------------- - -COMMON_OBJS := $(COMMON_DIR)dump.o \ - $(COMMON_DIR)wlan_lib.o \ - $(COMMON_DIR)wlan_oid.o \ - $(COMMON_DIR)wlan_bow.o - -NIC_OBJS := $(NIC_DIR)nic.o \ - $(NIC_DIR)nic_tx.o \ - $(NIC_DIR)nic_rx.o \ - $(NIC_DIR)nic_pwr_mgt.o \ - $(NIC_DIR)cmd_buf.o \ - $(NIC_DIR)que_mgt.o \ - $(NIC_DIR)nic_cmd_event.o - -OS_OBJS := $(OS_DIR)gl_init.o \ - $(OS_DIR)gl_kal.o \ - $(OS_DIR)gl_bow.o \ - $(OS_DIR)gl_wext.o \ - $(OS_DIR)gl_wext_priv.o \ - $(OS_DIR)gl_rst.o \ - $(OS_DIR)gl_cfg80211.o \ - $(OS_DIR)platform.o - -MGMT_OBJS := $(MGMT_DIR)ais_fsm.o \ - $(MGMT_DIR)aaa_fsm.o \ - $(MGMT_DIR)assoc.o \ - $(MGMT_DIR)auth.o \ - $(MGMT_DIR)bss.o \ - $(MGMT_DIR)cnm.o \ - $(MGMT_DIR)cnm_timer.o \ - $(MGMT_DIR)cnm_mem.o \ - $(MGMT_DIR)hem_mbox.o \ - $(MGMT_DIR)mib.o \ - $(MGMT_DIR)privacy.o \ - $(MGMT_DIR)rate.o \ - $(MGMT_DIR)rlm.o \ - $(MGMT_DIR)rlm_domain.o \ - $(MGMT_DIR)rlm_obss.o \ - $(MGMT_DIR)rlm_protection.o \ - $(MGMT_DIR)rsn.o \ - $(MGMT_DIR)saa_fsm.o \ - $(MGMT_DIR)scan.o \ - $(MGMT_DIR)scan_fsm.o \ - $(MGMT_DIR)sec_fsm.o \ - $(MGMT_DIR)swcr.o \ - $(MGMT_DIR)roaming_fsm.o - -# --------------------------------------------------- -# P2P Objects List -# --------------------------------------------------- - -COMMON_OBJS += $(COMMON_DIR)wlan_p2p.o - -NIC_OBJS += $(NIC_DIR)p2p_nic.o - -OS_OBJS += $(OS_DIR)gl_p2p.o \ - $(OS_DIR)gl_p2p_cfg80211.o \ - $(OS_DIR)gl_p2p_init.o \ - $(OS_DIR)gl_p2p_kal.o - -MGMT_OBJS += $(MGMT_DIR)p2p_assoc.o \ - $(MGMT_DIR)p2p_bss.o \ - $(MGMT_DIR)p2p_fsm.o \ - $(MGMT_DIR)p2p_func.o \ - $(MGMT_DIR)p2p_rlm.o \ - $(MGMT_DIR)p2p_rlm_obss.o \ - $(MGMT_DIR)p2p_scan.o \ - $(MGMT_DIR)p2p_ie.o \ - $(MGMT_DIR)p2p_state.o - - -ifeq ($(MTK_WAPI_SUPPORT), yes) -MGMT_OBJS += $(MGMT_DIR)wapi.o -endif - -ifeq ($(WLAN_PROC), y) -OS_OBJS += gl_proc.o -endif - -HIF_OBJS := $(HIF_DIR)arm.o \ - $(HIF_DIR)sdio.o - -obj-y += $(COMMON_OBJS) -obj-y += $(NIC_OBJS) -obj-y += $(OS_OBJS) -obj-y += $(HIF_OBJS) -obj-y += $(MGMT_OBJS) - - -clean: - rm $(HIF_OBJS) $(OS_OBJS) $(NIC_OBJS) $(MGMT_OBJS) $(COMMON_OBJS) - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/Makefile.module b/drivers/net/wireless/rockchip_wlan/mt5931/Makefile.module deleted file mode 100755 index 1645ae2424a6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/Makefile.module +++ /dev/null @@ -1,152 +0,0 @@ -# --------------------------------------------------- -# Compile Options -# --------------------------------------------------- - -#include $(MTK_PATH_BUILD)/Makefile -#ccflags-y += -DLINUX -DMT6620 -ccflags-y += -DLINUX -DMT5931 ##mark skynine modify DMT6620-->DMT5931 - -ifeq ($(MTK_WAPI_SUPPORT), yes) - ccflags-y += -DCFG_SUPPORT_WAPI=1 -else - ccflags-y += -DCFG_SUPPORT_WAPI=0 -endif - -ifeq ($(HAVE_XLOG_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_XLOG=1 -else - ccflags-y += -DCFG_SUPPORT_XLOG=0 -endif - -ifeq ($(HAVE_AEE_FEATURE), yes) - ccflags-y += -DCFG_SUPPORT_AEE=1 -else - ccflags-y += -DCFG_SUPPORT_AEE=0 -endif - -#ifeq ($(CONFIG_MTK_COMBO_WIFI_HIF_SDIO1), y) -# ccflags-y += -D_HIF_SDIO=1 -#endif - -#MODULE_NAME := wlan_mt6620 -MODULE_NAME := wlan - -ccflags-y += -D_HIF_SDIO=1 - -ccflags-y += -DDBG=0 -ccflags-y += -I$(src)/os -I$(src)/os/linux/include -I$(src)/os/linux/hif/sdio/include -ccflags-y += -I$(src)/include -I$(src)/include/nic -I$(src)/include/mgmt - -#obj-$(CONFIG_MTK_COMBO_WIFI) += $(MODULE_NAME).o -#obj-$(CONFIG_MT5931) += $(MODULE_NAME).o -obj-m += $(MODULE_NAME).o - -# --------------------------------------------------- -# Directory List -# --------------------------------------------------- -COMMON_DIR := common/ -OS_DIR := os/linux/ -HIF_DIR := os/linux/hif/sdio/ -NIC_DIR := nic/ -MGMT_DIR := mgmt/ - - -# --------------------------------------------------- -# Objects List -# --------------------------------------------------- - -COMMON_OBJS := $(COMMON_DIR)dump.o \ - $(COMMON_DIR)wlan_lib.o \ - $(COMMON_DIR)wlan_oid.o \ - $(COMMON_DIR)wlan_bow.o - -NIC_OBJS := $(NIC_DIR)nic.o \ - $(NIC_DIR)nic_tx.o \ - $(NIC_DIR)nic_rx.o \ - $(NIC_DIR)nic_pwr_mgt.o \ - $(NIC_DIR)cmd_buf.o \ - $(NIC_DIR)que_mgt.o \ - $(NIC_DIR)nic_cmd_event.o - -OS_OBJS := $(OS_DIR)gl_init.o \ - $(OS_DIR)gl_kal.o \ - $(OS_DIR)gl_bow.o \ - $(OS_DIR)gl_wext.o \ - $(OS_DIR)gl_wext_priv.o \ - $(OS_DIR)gl_rst.o \ - $(OS_DIR)gl_cfg80211.o \ - $(OS_DIR)platform.o - -MGMT_OBJS := $(MGMT_DIR)ais_fsm.o \ - $(MGMT_DIR)aaa_fsm.o \ - $(MGMT_DIR)assoc.o \ - $(MGMT_DIR)auth.o \ - $(MGMT_DIR)bss.o \ - $(MGMT_DIR)cnm.o \ - $(MGMT_DIR)cnm_timer.o \ - $(MGMT_DIR)cnm_mem.o \ - $(MGMT_DIR)hem_mbox.o \ - $(MGMT_DIR)mib.o \ - $(MGMT_DIR)privacy.o \ - $(MGMT_DIR)rate.o \ - $(MGMT_DIR)rlm.o \ - $(MGMT_DIR)rlm_domain.o \ - $(MGMT_DIR)rlm_obss.o \ - $(MGMT_DIR)rlm_protection.o \ - $(MGMT_DIR)rsn.o \ - $(MGMT_DIR)saa_fsm.o \ - $(MGMT_DIR)scan.o \ - $(MGMT_DIR)scan_fsm.o \ - $(MGMT_DIR)sec_fsm.o \ - $(MGMT_DIR)swcr.o \ - $(MGMT_DIR)roaming_fsm.o - -# --------------------------------------------------- -# P2P Objects List -# --------------------------------------------------- - -COMMON_OBJS += $(COMMON_DIR)wlan_p2p.o - -NIC_OBJS += $(NIC_DIR)p2p_nic.o - -OS_OBJS += $(OS_DIR)gl_p2p.o \ - $(OS_DIR)gl_p2p_cfg80211.o \ - $(OS_DIR)gl_p2p_init.o \ - $(OS_DIR)gl_p2p_kal.o - -MGMT_OBJS += $(MGMT_DIR)p2p_assoc.o \ - $(MGMT_DIR)p2p_bss.o \ - $(MGMT_DIR)p2p_fsm.o \ - $(MGMT_DIR)p2p_func.o \ - $(MGMT_DIR)p2p_rlm.o \ - $(MGMT_DIR)p2p_rlm_obss.o \ - $(MGMT_DIR)p2p_scan.o \ - $(MGMT_DIR)p2p_ie.o \ - $(MGMT_DIR)p2p_state.o - - -ifeq ($(MTK_WAPI_SUPPORT), yes) -MGMT_OBJS += $(MGMT_DIR)wapi.o -endif - -ifeq ($(WLAN_PROC), y) -OS_OBJS += gl_proc.o -endif - -HIF_OBJS := $(HIF_DIR)arm.o \ - $(HIF_DIR)sdio.o - -$(MODULE_NAME)-y += $(COMMON_OBJS) -$(MODULE_NAME)-y += $(NIC_OBJS) -$(MODULE_NAME)-y += $(OS_OBJS) -$(MODULE_NAME)-y += $(HIF_OBJS) -$(MODULE_NAME)-y += $(MGMT_OBJS) - -KERNEL_DIR = /home/hwg/rk2928_kernel_M7000HC/kernel - -all: - make -C $(KERNEL_DIR) M=`pwd` modules - -clean: - rm $(HIF_OBJS) $(OS_OBJS) $(NIC_OBJS) $(MGMT_OBJS) $(COMMON_OBJS) - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/common/dump.c b/drivers/net/wireless/rockchip_wlan/mt5931/common/dump.c deleted file mode 100755 index 95f2d7f25b76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/common/dump.c +++ /dev/null @@ -1,539 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/dump.c#1 $ -*/ - -/*! \file "dump.c" - \brief Provide memory dump function for debugging. - - Provide memory dump function for debugging. -*/ - - - -/* -** $Log: dump.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 19:58:51 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if DBG -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - LOG_FUNC("DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - LOG_FUNC("(%08lx) %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - LOG_FUNC("(%08lx) %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - LOG_FUNC("(%08lx) %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - LOG_FUNC("\n"); - - return; -} /* end of dumpMemory8() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in double words. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length) -{ - PUINT_8 pucAddr; - - - ASSERT(pu4StartAddr); - - LOG_FUNC("DUMP32 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pu4StartAddr, u4Length); - - if (IS_NOT_ALIGN_4((UINT_32)pu4StartAddr)) { - UINT_32 u4ProtrudeLen = sizeof(UINT_32) - ((UINT_32)pu4StartAddr % 4); - - - u4ProtrudeLen = ((u4Length < u4ProtrudeLen) ? u4Length: u4ProtrudeLen); - LOG_FUNC("pu4StartAddr is not at DW boundary.\n"); - pucAddr = (PUINT_8) &pu4StartAddr[0]; - - switch (u4ProtrudeLen) { - case 1: - LOG_FUNC("(%08lx) %02x------\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x%02x----\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - LOG_FUNC("(%08lx) %02x%02x%02x--\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - - u4Length -= u4ProtrudeLen; - pu4StartAddr = (PUINT_32)((UINT_32)pu4StartAddr + u4ProtrudeLen); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %08lx %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], pu4StartAddr[3]); - pu4StartAddr += 4; - u4Length -= 16; - } - else { - switch (u4Length) { - case 1: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ------%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 4: - LOG_FUNC("(%08lx) %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0]); - break; - case 5: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[0]); - break; - case 6: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[1], pucAddr[0]); - break; - case 7: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 8: - LOG_FUNC("(%08lx) %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1]); - break; - case 9: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[0]); - break; - case 10: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[1], pucAddr[0]); - break; - case 11: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 12: - LOG_FUNC("(%08lx) %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2]); - break; - case 13: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[0]); - break; - case 14: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[1], pucAddr[0]); - break; - case 15: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - u4Length = 0; - } - } - - return; -} /* end of dumpMemory32() */ -#elif CFG_SUPPORT_XLOG - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - if (log_level == ANDROID_LOG_ERROR) { - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_WARN) { - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_INFO) { - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_DEBUG) { - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_VERBOSE) { - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - XLOG_FUNC(log_level, "%02x\n", - pucStartAddr[ 0]); - break; - case 2: - XLOG_FUNC(log_level, "%02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - XLOG_FUNC(log_level, "%02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - XLOG_FUNC(log_level, "%02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - - return; -} /* end of dumpMemory8() */ -#endif /* DBG */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_bow.c b/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_bow.c deleted file mode 100755 index 41b179dde04e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_bow.c +++ /dev/null @@ -1,3898 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_bow.c#1 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the 802.11 PAL commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_bow.c $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 01 09 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00110632] [Rose][LCA42][Cross Feature][Bluetooth]The "KE" pops up after the device reboots automatically.(once) - * - * Fix bow link disconnected event dereference. - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 terry.wu - * NULL - * Fix BoW KE. - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * aware more compile options. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * . - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Only reply probe response to its peer or mached SSID for BoW AP. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW SAA retry and disable disconnect event when AAA fail . - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 17 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix wrong StaRec state of BoW . - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix prAssocRspSwRfb casting. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 28 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Simplify link disconnected routine, remove link disconnected other routine. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add new feature - multiple physical link support. - * - * 02 22 2011 wh.su - * [WCXRP00000486] [MT6620 Wi-Fi][BOW] Fixed the bow send frame but not encrypted issue - * fixed the BOW packet sending without encrypted issue. - * - * 02 21 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BOW link disconnection bug. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting. - * - * 02 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW channel granted function. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW to support multiple physical link. - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix for event returnning Band. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 chinghwa.yu - * NULL - * Fix bowResponderScanDone error when prBssDesc is NULL. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * indicate correct AIS network information for PAL. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Initialize nicActivateNetwork(prAdapter as soon as bow is starting.. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * 2) command sequence number is now increased atomically - * * 3) private data could be hold and taken use for other purpose -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -#if CFG_BOW_TEST -extern UINT_32 g_arBowRevPalPacketTime[32]; -#endif - - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -static UINT_32 g_u4LinkCount = 0; -static UINT_32 g_u4Beaconing = 0; -static BOW_TABLE_T arBowTable[CFG_BOW_PHYSICAL_LINK_NUM]; - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -const BOW_CMD_T arBowCmdTable[] = { - {BOW_CMD_ID_GET_MAC_STATUS, bowCmdGetMacStatus}, - {BOW_CMD_ID_SETUP_CONNECTION, bowCmdSetupConnection}, - {BOW_CMD_ID_DESTROY_CONNECTION, bowCmdDestroyConnection}, - {BOW_CMD_ID_SET_PTK, bowCmdSetPTK}, - {BOW_CMD_ID_READ_RSSI, bowCmdReadRSSI}, - {BOW_CMD_ID_READ_LINK_QUALITY, bowCmdReadLinkQuality}, - {BOW_CMD_ID_SHORT_RANGE_MODE, bowCmdShortRangeMode}, - {BOW_CMD_ID_GET_CHANNEL_LIST, bowCmdGetChannelList}, -}; - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCID, - IN BOOLEAN fgSetQuery, - IN BOOLEAN fgNeedResp, - IN PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - IN PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - IN UINT_32 u4SetQueryInfoLen, - IN PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_BOW_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - prCmdInfo->u4PrivateData = (UINT_32) ucSeqNumber; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dispatch command coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - WLAN_STATUS retval = WLAN_STATUS_FAILURE; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < sizeof(arBowCmdTable) / sizeof(BOW_CMD_T); i++) { - if ((arBowCmdTable[i].uCmdID == prCmd->rHeader.ucCommandId) && - arBowCmdTable[i].pfCmdHandle) { - retval = arBowCmdTable[i].pfCmdHandle(prAdapter, prCmd); - break; - } - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_MAC_STATUS -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_MAC_STATUS prMacStatus; - UINT_8 idx = 0; - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eBssSCO; - UINT_8 ucNumOfChannel = 0;//MAX_BOW_NUMBER_OF_CHANNEL; - - RF_CHANNEL_INFO_T aucChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; - - ASSERT(prAdapter); - - //3 <1> If LinkCount != 0 -> OK (optional) - - eBand = BAND_2G4; - eBssSCO = CHNL_EXT_SCN; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS)), VIR_MEM_TYPE); - - prEvent->rHeader.ucEventId = BOW_EVENT_ID_MAC_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_MAC_STATUS); - - // fill event body - prMacStatus = (P_BOW_MAC_STATUS)(prEvent->aucPayload); - kalMemZero(prMacStatus, sizeof(BOW_MAC_STATUS)); - - //3 <2> Call CNM to decide if BOW available. - if (cnmBowIsPermitted(prAdapter)) - { - prMacStatus->ucAvailability = TRUE; - } - else - { - prMacStatus->ucAvailability = FALSE; - } - - memcpy(prMacStatus->aucMacAddr, prAdapter->rWifiVar.aucDeviceAddress, PARAM_MAC_ADDR_LEN); - - if (cnmPreferredChannel(prAdapter, &eBand, &ucPrimaryChannel, &eBssSCO)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get preferred channel.\n")); -#endif - - prMacStatus->ucNumOfChannel = 1; - prMacStatus->arChannelList[0].ucChannelBand = eBand; - prMacStatus->arChannelList[0].ucChannelNum = ucPrimaryChannel; - } - else - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get channel list. Current number of channel, %d.\n", ucNumOfChannel)); -#endif - - rlmDomainGetChnlList(prAdapter, BAND_2G4, MAX_BOW_NUMBER_OF_CHANNEL_2G4, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_2G4*/; idx++) - { - prMacStatus->arChannelList[idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = ucNumOfChannel; - } - - rlmDomainGetChnlList(prAdapter, BAND_5G, MAX_BOW_NUMBER_OF_CHANNEL_5G, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_5G*/; idx++) - { - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = prMacStatus->ucNumOfChannel + ucNumOfChannel; - - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("ucNumOfChannel, eBand, aucChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - ucNumOfChannel, - aucChannelList[0].eBand, - aucChannelList[0].ucChannelNum, - aucChannelList[1].ucChannelNum, - aucChannelList[2].ucChannelNum, - aucChannelList[3].ucChannelNum, - aucChannelList[4].ucChannelNum, - aucChannelList[5].ucChannelNum, - aucChannelList[6].ucChannelNum, - aucChannelList[7].ucChannelNum, - aucChannelList[8].ucChannelNum, - aucChannelList[9].ucChannelNum, - aucChannelList[10].ucChannelNum, - aucChannelList[11].ucChannelNum, - aucChannelList[12].ucChannelNum, - aucChannelList[13].ucChannelNum, - aucChannelList[14].ucChannelNum, - aucChannelList[15].ucChannelNum, - aucChannelList[16].ucChannelNum, - aucChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, eBand, prMacStatus->arChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prMacStatus->ucNumOfChannel, - prMacStatus->arChannelList[0].ucChannelBand, - prMacStatus->arChannelList[0].ucChannelNum, - prMacStatus->arChannelList[1].ucChannelNum, - prMacStatus->arChannelList[2].ucChannelNum, - prMacStatus->arChannelList[3].ucChannelNum, - prMacStatus->arChannelList[4].ucChannelNum, - prMacStatus->arChannelList[5].ucChannelNum, - prMacStatus->arChannelList[6].ucChannelNum, - prMacStatus->arChannelList[7].ucChannelNum, - prMacStatus->arChannelList[8].ucChannelNum, - prMacStatus->arChannelList[9].ucChannelNum, - prMacStatus->arChannelList[10].ucChannelNum, - prMacStatus->arChannelList[11].ucChannelNum, - prMacStatus->arChannelList[12].ucChannelNum, - prMacStatus->arChannelList[13].ucChannelNum, - prMacStatus->arChannelList[14].ucChannelNum, - prMacStatus->arChannelList[15].ucChannelNum, - prMacStatus->arChannelList[16].ucChannelNum, - prMacStatus->arChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, %x.\n", prMacStatus->ucNumOfChannel)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelBand, %x.\n", prMacStatus->arChannelList[0].ucChannelBand)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelNum, %x.\n", prMacStatus->arChannelList[0].ucChannelNum)); - DBGLOG(BOW, EVENT, ("prMacStatus->ucAvailability, %x.\n", prMacStatus->ucAvailability)); - DBGLOG(BOW, EVENT, ("prMacStatus->aucMacAddr, %x:%x:%x:%x:%x:%x.\n", - prMacStatus->aucMacAddr[0], - prMacStatus->aucMacAddr[1], - prMacStatus->aucMacAddr[2], - prMacStatus->aucMacAddr[3], - prMacStatus->aucMacAddr[4], - prMacStatus->aucMacAddr[5])); -#endif - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS))); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SETUP_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SETUP_CONNECTION prBowSetupConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - - UINT_8 ucBowTableIdx = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowSetupConnection = (P_BOW_SETUP_CONNECTION) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SETUP_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <1> If ucLinkCount >= 4 -> Fail. - if (g_u4LinkCount >= CFG_BOW_PHYSICAL_LINK_NUM) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <2> Call CNM, check if BOW is available. - if (!cnmBowIsPermitted(prAdapter)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <3> Lookup BOW Table, if Peer MAC address exist and valid -> Fail. - if (bowCheckBowTableIfVaild(prAdapter, prBowSetupConnection->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if(EQUAL_MAC_ADDR(prBowSetupConnection->aucPeerAddress, prAdapter->rWifiVar.aucDeviceAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_NOT_ACCEPTED; - } - - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = BOW_SETUP_CMD; - rCmdBtOverWifi.ucChannelNum = prBowSetupConnection->ucChannelNum; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowSetupConnection->aucPeerAddress); - rCmdBtOverWifi.u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - rCmdBtOverWifi.ucTimeoutDiscovery = prBowSetupConnection->ucTimeoutDiscovery; - rCmdBtOverWifi.ucTimeoutInactivity = prBowSetupConnection->ucTimeoutInactivity; - rCmdBtOverWifi.ucRole = prBowSetupConnection->ucRole; - rCmdBtOverWifi.PAL_Capabilities = prBowSetupConnection->ucPAL_Capabilities; - rCmdBtOverWifi.cMaxTxPower = prBowSetupConnection->cMaxTxPower; - - if (prBowSetupConnection->ucChannelNum > 14) { - rCmdBtOverWifi.ucChannelBand = BAND_5G; - } - else { - rCmdBtOverWifi.ucChannelBand = BAND_2G4; - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowSetupConnection->aucPeerAddress); - -#if CFG_BOW_PHYSICAL_LINK_NUM > 1 - /*Channel check for supporting multiple physical link*/ - if(g_u4LinkCount > 0) { - if (prBowSetupConnection->ucChannelNum != prBowFsmInfo->ucPrimaryChannel) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - } -#endif - - prBowFsmInfo->ucPrimaryChannel = prBowSetupConnection->ucChannelNum; - prBowFsmInfo->eBand = rCmdBtOverWifi.ucChannelBand; - prBowFsmInfo->u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - prBowFsmInfo->ucRole = prBowSetupConnection->ucRole; - - if (prBowSetupConnection->ucPAL_Capabilities > 0) - { - prBowFsmInfo->fgSupportQoS = TRUE; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection.\n")); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Channel Number - 0x%x.\n", rCmdBtOverWifi.ucChannelNum)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Peer address - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Beacon interval - 0x%x.\n", rCmdBtOverWifi.u2BeaconInterval)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout activity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutDiscovery)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout inactivity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutInactivity)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Role - 0x%x.\n", rCmdBtOverWifi.ucRole)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi PAL capability - 0x%x.\n", rCmdBtOverWifi.PAL_Capabilities)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Max Tx power - 0x%x.\n", rCmdBtOverWifi.cMaxTxPower)); -#endif - - //3 <4> Get a free BOW entry, mark as Valid, fill in Peer MAC address, LinkCount += 1, state == Starting. - if (!bowGetBowTableFreeEntry(prAdapter, &ucBowTableIdx)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - prBowFsmInfo->prTargetBssDesc = NULL; - - COPY_MAC_ADDR(rBowTable.aucPeerAddress, prBowSetupConnection->aucPeerAddress); - //owTable.eState = BOW_DEVICE_STATE_ACQUIRING_CHANNEL; - rBowTable.fgIsValid = TRUE; - rBowTable.ucAcquireID = prBowFsmInfo->ucSeqNumOfChReq; - //rBowTable.ucRole = prBowSetupConnection->ucRole; - //rBowTable.ucChannelNum = prBowSetupConnection->ucChannelNum; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - kalSetBowRole(prAdapter->prGlueInfo, rCmdBtOverWifi.ucRole, prBowSetupConnection->aucPeerAddress); - - GLUE_INC_REF_CNT(g_u4LinkCount); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, cnmTimerInitTimer.\n")); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->u2BeaconInterval, %d.\n", prBowFsmInfo->u2BeaconInterval)); -#endif - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rStartingBeaconTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowSendBeacon, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowChGrantedTimeout, - (UINT_32)NULL); - - //Reset Global Variable - g_u4Beaconing = 0; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("kalInitBowDevice, bow0\n")); -#endif -#if CFG_BOW_SEPARATE_DATA_PATH - kalInitBowDevice(prAdapter->prGlueInfo, BOWDEVNAME); -#endif - - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - if(rCmdBtOverWifi.ucRole == BOW_INITIATOR) { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } else { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - bowResponderScan(prAdapter); - } - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_DESTROY_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_DESTROY_CONNECTION prBowDestroyConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; -#if CFG_BOW_TEST - UINT_8 ucIdx; -#endif - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - //3 <1> If LinkCount == 0 ->Fail (Optional) - if (g_u4LinkCount == 0) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_DESTROY_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <2> Lookup BOW table, check if is not exist (Valid and Peer MAC address) -> Fail - prBowDestroyConnection = (P_BOW_DESTROY_CONNECTION) &(prCmd->aucPayload[0]); - - if (!bowCheckBowTableIfVaild(prAdapter, prBowDestroyConnection->aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, bowCheckIfVaild, not accepted.\n")); -#endif - return WLAN_STATUS_NOT_ACCEPTED; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, destroy Peer address - %x:%x:%x:%x:%x:%x.\n", prBowDestroyConnection->aucPeerAddress[0], - prBowDestroyConnection->aucPeerAddress[1], - prBowDestroyConnection->aucPeerAddress[2], - prBowDestroyConnection->aucPeerAddress[3], - prBowDestroyConnection->aucPeerAddress[4], - prBowDestroyConnection->aucPeerAddress[5])); -#endif - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = 2; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowDestroyConnection->aucPeerAddress); - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowDestroyConnection->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, rCmdBtOverWifi.rPeerAddr - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); -#endif - -#if CFG_BOW_TEST - for (ucIdx = 0; ucIdx < 11; ucIdx++) - { - DBGLOG(BOW, EVENT, ("BoW receiving PAL packet delta time vs packet number -- %d ms vs %x.\n", ucIdx, g_arBowRevPalPacketTime[ucIdx])); - } -#endif - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - sizeof(CMD_BT_OVER_WIFI), - (PUINT_8) &rCmdBtOverWifi, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SET_PTK -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SET_PTK prBowSetPTK; - CMD_802_11_KEY rCmdKey; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SET_PTK)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowSetPTK = (P_BOW_SET_PTK) &(prCmd->aucPayload[0]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucPeerAddress[0], - prBowSetPTK->aucPeerAddress[1], - prBowSetPTK->aucPeerAddress[2], - prBowSetPTK->aucPeerAddress[3], - prBowSetPTK->aucPeerAddress[4], - prBowSetPTK->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("rCmdKey.ucIsAuthenticator, %x.\n", kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress))); -#endif - - if (!bowCheckBowTableIfVaild(prAdapter, prBowSetPTK->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowSetPTK->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - // fill CMD_802_11_KEY - rCmdKey.ucAddRemove = 1; // add - rCmdKey.ucTxKey = 1; - rCmdKey.ucKeyType = 1; - rCmdKey.ucIsAuthenticator = kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress); - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prBowSetPTK->aucPeerAddress); - rCmdKey.ucNetType = NETWORK_TYPE_BOW_INDEX; // BT Over Wi-Fi - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - rCmdKey.ucKeyId = 0; - rCmdKey.ucKeyLen = 16; // AES = 128bit - kalMemCopy(rCmdKey.aucKeyMaterial, prBowSetPTK->aucTemporalKey, 16); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucTemporalKey, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucTemporalKey[0], - prBowSetPTK->aucTemporalKey[1], - prBowSetPTK->aucTemporalKey[2], - prBowSetPTK->aucTemporalKey[3], - prBowSetPTK->aucTemporalKey[4], - prBowSetPTK->aucTemporalKey[5], - prBowSetPTK->aucTemporalKey[6], - prBowSetPTK->aucTemporalKey[7], - prBowSetPTK->aucTemporalKey[8], - prBowSetPTK->aucTemporalKey[9], - prBowSetPTK->aucTemporalKey[10], - prBowSetPTK->aucTemporalKey[11], - prBowSetPTK->aucTemporalKey[12], - prBowSetPTK->aucTemporalKey[13], - prBowSetPTK->aucTemporalKey[14], - prBowSetPTK->aucTemporalKey[15])); - - DBGLOG(BOW, EVENT, ("rCmdKey.aucKeyMaterial, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - rCmdKey.aucKeyMaterial[0], - rCmdKey.aucKeyMaterial[1], - rCmdKey.aucKeyMaterial[2], - rCmdKey.aucKeyMaterial[3], - rCmdKey.aucKeyMaterial[4], - rCmdKey.aucKeyMaterial[5], - rCmdKey.aucKeyMaterial[6], - rCmdKey.aucKeyMaterial[7], - rCmdKey.aucKeyMaterial[8], - rCmdKey.aucKeyMaterial[9], - rCmdKey.aucKeyMaterial[10], - rCmdKey.aucKeyMaterial[11], - rCmdKey.aucKeyMaterial[12], - rCmdKey.aucKeyMaterial[13], - rCmdKey.aucKeyMaterial[14], - rCmdKey.aucKeyMaterial[15])); -#endif - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - wlanbowCmdEventSetCommon, - wlanbowCmdTimeoutHandler, - sizeof(CMD_802_11_KEY), - (PUINT_8) &rCmdKey, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_RSSI -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_RSSI prBowReadRSSI; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_READ_RSSI)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadRSSI = (P_BOW_READ_RSSI) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadRssi, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_LINK_QUALITY -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_LINK_QUALITY prBowReadLinkQuality; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(P_BOW_READ_LINK_QUALITY)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadLinkQuality = (P_BOW_READ_LINK_QUALITY) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadLinkQuality, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SHORT_RANGE_MODE -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SHORT_RANGE_MODE prBowShortRangeMode; - CMD_TX_PWR_T rTxPwrParam; - - ASSERT(prAdapter); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode.\n")); -#endif - - prBowShortRangeMode = (P_BOW_SHORT_RANGE_MODE) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SHORT_RANGE_MODE)) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (!bowCheckBowTableIfVaild(prAdapter, prBowShortRangeMode->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowShortRangeMode->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_NOT_ACCEPTED; - } - - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowShortRangeMode->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowShortRangeMode->aucPeerAddress[0], - prBowShortRangeMode->aucPeerAddress[1], - prBowShortRangeMode->aucPeerAddress[2], - prBowShortRangeMode->aucPeerAddress[3], - prBowShortRangeMode->aucPeerAddress[4], - prBowShortRangeMode->aucPeerAddress[5])); -#endif - - rTxPwrParam.cTxPwr2G4Cck = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GOFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GHT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - if (nicUpdateTxPower(prAdapter, &rTxPwrParam) == WLAN_STATUS_SUCCESS) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode, %x.\n", WLAN_STATUS_SUCCESS)); -#endif - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - return WLAN_STATUS_SUCCESS; - } - else - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_FAILURE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_CHANNEL_LIST -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - ASSERT(prAdapter); - - // not supported yet - return WLAN_STATUS_FAILURE; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = ucEventBuf; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkConnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkConnected, sizeof(BOW_LINK_CONNECTED)); - prBowLinkConnected->rChannel.ucChannelNum = prBssInfo->ucPrimaryChannel; - prBowLinkConnected->rChannel.ucChannelBand = prBssInfo->eBand; - COPY_MAC_ADDR(prBowLinkConnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelNum, 0x%x\n", prBowLinkConnected->rChannel.ucChannelNum)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelBand, 0x%x\n", prBowLinkConnected->rChannel.ucChannelBand)); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowLinkConnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkConnected->aucPeerAddress[0], - prBowLinkConnected->aucPeerAddress[1], - prBowLinkConnected->aucPeerAddress[2], - prBowLinkConnected->aucPeerAddress[3], - prBowLinkConnected->aucPeerAddress[4], - prBowLinkConnected->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate Event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED))); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - //bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - } - - /* set to connected status*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTED); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkDisconnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - UINT_8 ucBowTableIdx; - ENUM_BOW_DEVICE_STATE eFsmState; - BOOL fgSendDeauth = FALSE; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return; - } - /*Cancel scan*/ - else if(eFsmState == BOW_DEVICE_STATE_SCANNING && - !(prBowFsmInfo->fgIsChannelRequested)) { - bowResponderCancelScan(prAdapter, FALSE); - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_DISCONNECTING); - return; - } - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - if ((prCmdInfo->u4PrivateData)) - { - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - } - else - { - prEvent->rHeader.ucSeqNumber = 0; - } - - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkDisconnected, sizeof(BOW_LINK_DISCONNECTED)); - prBowLinkDisconnected->ucReason = 0x0; - COPY_MAC_ADDR(prBowLinkDisconnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowLinkDisconnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkDisconnected->aucPeerAddress[0], - prBowLinkDisconnected->aucPeerAddress[1], - prBowLinkDisconnected->aucPeerAddress[2], - prBowLinkDisconnected->aucPeerAddress[3], - prBowLinkDisconnected->aucPeerAddress[4], - prBowLinkDisconnected->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate BoW event to PAL*/ -#if 0 - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); -#endif - - // set to disconnected status - prBowFsmInfo->prTargetStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_BOW_INDEX, prBowLinkDisconnected->aucPeerAddress); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - //bowReleaseCh(prAdapter); - } - -#if 1 - /*Send Deauth to connected peer*/ - if (eFsmState == BOW_DEVICE_STATE_CONNECTED && - (prBowFsmInfo->prTargetStaRec->ucStaState == STA_STATE_3)) - { - fgSendDeauth = TRUE; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, bowGetBowTableState, %x.\n", bowGetBowTableState(prAdapter, prBowLinkDisconnected->aucPeerAddress))); -#endif - authSendDeauthFrame(prAdapter, - prBowFsmInfo->prTargetStaRec, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - (PFN_TX_DONE_HANDLER)bowDisconnectLink); - } -#endif - -#if 0 - //3 <3>Stop this link; flush Tx; send deAuthentication -> abort. SAA, AAA. need to check BOW table state == Connected. - if (prAdapter->prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - } - - /* flush pending security frames */ - if (prAdapter->prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prAdapter->prGlueInfo); - } -#endif - - /*Update BoW table*/ - bowGetBowTableEntryByPeerAddress(prAdapter, prBowLinkDisconnected->aucPeerAddress, &ucBowTableIdx); - rBowTable.fgIsValid = FALSE; - rBowTable.eState = BOW_DEVICE_STATE_DISCONNECTED; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); - - /*Decrease link count*/ - GLUE_DEC_REF_CNT(g_u4LinkCount); - - /*If no need to send deauth, DO disconnect now*/ - /*If need to send deauth, DO disconnect at deauth Tx done*/ - if(!fgSendDeauth){ - bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BT_OVER_WIFI prCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // restore original command for rPeerAddr - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prCmdBtOverWifi = (P_CMD_BT_OVER_WIFI)(prWifiCmd->aucBuffer); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - // set to starting status - kalSetBowState(prAdapter->prGlueInfo, - BOW_DEVICE_STATE_STARTING, - prCmdBtOverWifi->rPeerAddr); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_LINK_QUALITY -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_LINK_QUALITY prBowLinkQuality; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_QUALITY; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_QUALITY); - - // fill event body - prBowLinkQuality = (P_BOW_LINK_QUALITY)(prEvent->aucPayload); - kalMemZero(prBowLinkQuality, sizeof(BOW_LINK_QUALITY)); - prBowLinkQuality->ucLinkQuality = (UINT_8)prLinkQuality->cLinkQuality; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_RSSI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_RSSI prBowRssi; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_RSSI; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_RSSI); - - // fill event body - prBowRssi = (P_BOW_RSSI)(prEvent->aucPayload); - kalMemZero(prBowRssi, sizeof(BOW_RSSI)); - prBowRssi->cRssi = (INT_8) prLinkQuality->cRssi; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the default command timeout handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_TIMEOUT; // timeout - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - return; -} - - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBowBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStoping.\n")); - DBGLOG(BOW, EVENT, ("bowStoping, SSID %s.\n", prBowBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("bowStoping, prBowBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucBSSID[0], - prBowBssInfo->aucBSSID[1], - prBowBssInfo->aucBSSID[2], - prBowBssInfo->aucBSSID[3], - prBowBssInfo->aucBSSID[4], - prBowBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucOwnMacAddr[0], - prBowBssInfo->aucOwnMacAddr[1], - prBowBssInfo->aucOwnMacAddr[2], - prBowBssInfo->aucOwnMacAddr[3], - prBowBssInfo->aucOwnMacAddr[4], - prBowBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); - DBGLOG(BOW, EVENT, ("bowStopping, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - kalPrint("BoW Stoping,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); -#endif - - if (g_u4LinkCount == 0) - { - /*Stop beaconing*/ - GLUE_DEC_REF_CNT(g_u4Beaconing); - - /*Deactive BoW network*/ - //prBowBssInfo->fgIsNetActive = FALSE; - //prBowBssInfo->fgIsBeaconActivated = FALSE; - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - /*temp solution for FW hal_pwr_mgt.c#3037 ASSERT*/ - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_BOW_INDEX); - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - return; -} - - -VOID -bowStarting( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("BoW Starting.\n")); - DBGLOG(BOW, EVENT, ("BoW channel granted.\n")); -#endif - -#if 0 - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBssInfo->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prBssInfo->eCurrentOPMode = OP_MODE_BOW; - - //4 <1.2> Setup SSID - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - prBssInfo->ucSSIDLen = BOW_SSID_LEN; - bowAssignSsid(prBssInfo->aucSSID, prBssInfo->aucOwnMacAddr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("SSID %s.\n", prBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("prBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucBSSID[0], - prBssInfo->aucBSSID[1], - prBssInfo->aucBSSID[2], - prBssInfo->aucBSSID[3], - prBssInfo->aucBSSID[4], - prBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucOwnMacAddr[0], - prBssInfo->aucOwnMacAddr[1], - prBssInfo->aucOwnMacAddr[2], - prBssInfo->aucOwnMacAddr[3], - prBssInfo->aucOwnMacAddr[4], - prBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); -#endif - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; - if (prBowFsmInfo->eBand == BAND_2G4) - { - prBssInfo->eBand = BAND_2G4; - } - else - { - prBssInfo->eBand = BAND_5G; - } - -#if CFG_BOW_SUPPORT_11N - prBssInfo->ucPhyTypeSet = prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - -#else - if (prBssInfo->eBand == BAND_2G4) - { - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else - { - //prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - //prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11A; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - //prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - //prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_OFDM; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - - -#endif - prBssInfo->fgErpProtectMode = FALSE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = prBowFsmInfo->u2BeaconInterval; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - if (prBowFsmInfo->fgSupportQoS) - { - prAdapter->rWifiVar.fgSupportQoS = TRUE; - prBssInfo->fgIsQBSS = TRUE; - } - - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - bssInitForAP(prAdapter, prBssInfo, TRUE); - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif /* CFG_SUPPORT_AAA */ - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->fgIsBeaconActivated = TRUE; - - //3 <3> Set MAC HW - - //4 <2> Initiate BSS_INFO_T - common part - BOW_BSS_INFO_INIT(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); -#endif - - //4 <3.1> use command packets to inform firmware - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.2> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.1> Reset HW TSF Update Mode and Beacon Mode - - //4 <3.2> Setup BSSID - // TODO: rxmSetRxFilterBSSID0 -// rxmSetRxFilterBSSID0(prBssInfo->ucHwBssidId, prBssInfo->aucBSSID); - - //4 <3.3> Setup RX Filter to accept Probe Request - // TODO: f get/set RX filter. - -#if 0 - { - UINT_32 u4RxFilter; - if (halMacRxGetRxFilters(&u4RxFilter)== HAL_STATUS_SUCCESS) { - - u4RxFilter &= ~BIT(RXFILTER_DROP_PROBE_REQ); - - halMacRxSetRxFilters(u4RxFilter); - } - } -#endif - } - - /*Update BoW Table*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_STARTING); - -#if CFG_BOW_TEST - kalPrint("BoW Starting,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Start beaconing*/ - if (g_u4Beaconing < 1) - { - GLUE_INC_REF_CNT(g_u4Beaconing); - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } - -#if 0 - /*Responder: Start to scan Initiator*/ - if (prBowFsmInfo->ucRole == BOW_RESPONDER) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting responder, start scan result searching.\n")); -#endif - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - bowResponderScan(prAdapter); - } - /*Initiator: Request channel, wait for responder*/ - else { - //bowRequestCh(prAdapter); - } -#endif - return; -} - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 puOwnMacAddr - ) -{ - UINT_8 i; - UINT_8 aucSSID[]=BOW_WILDCARD_SSID; - - kalMemCopy(pucSsid, aucSSID, BOW_WILDCARD_SSID_LEN); - - for (i = 0; i < 6; i++) - { - pucSsid[(3 * i) + 3] = 0x2D; - if ((*(puOwnMacAddr + i) >> 4) < 0xA) - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x30; - } - else - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x57; - } - - if ((*(puOwnMacAddr + i) & 0x0F) < 0xA) - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x30; - } - else - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x57; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateProbeReq.\n")); -#endif - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - /*If BoW AP is beaconing*/ - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW && - g_u4Beaconing > 0) { - - /*Check the probe requset sender is our peer*/ - if(bowCheckBowTableIfVaild(prAdapter, prMgtHdr->aucSrcAddr)) { - fgReplyProbeResp = TRUE; - } - /*Check the probe request target SSID is our SSID*/ - else if ((prIeSsid) && - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - else { - fgReplyProbeResp = FALSE; - } - } - - return fgReplyProbeResp; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if ((g_u4Beaconing != 0) && (g_u4LinkCount > 0) && (g_u4LinkCount < CFG_BOW_PHYSICAL_LINK_NUM)) - { - //Send beacon - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } -#if CFG_BOW_TEST - else { - kalPrint("BoW Send Beacon,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - } -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScan.\n")); - kalPrint("BOW SCAN [REQ:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq+1); -#endif - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - - if (!prScanReqMsg) - { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - /*Fill scan message*/ - prScanReqMsg->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_BOW_INDEX; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - prScanReqMsg->ucSSIDLength = BOW_SSID_LEN; - bowAssignSsid(prScanReqMsg->aucSSID, prBowFsmInfo->aucPeerAddress); - prScanReqMsg->ucChannelListNum = 1; - - if (prBowFsmInfo->eBand == BAND_2G4) - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_2G4; - } - else - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_5G; - } - - prScanReqMsg->arChnlInfoList[0].ucChannelNum = prBowFsmInfo->ucPrimaryChannel; - prScanReqMsg->u2IELen = 0; - - /*Send scan message*/ - mboxSendMsg(prAdapter, MBOX_ID_0, (P_MSG_HDR_T) prScanReqMsg, MSG_SEND_METHOD_BUF); - - /*Change state to SCANNING*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - - //prBowFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_DESC_T prBssDesc; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_BOW_DEVICE_STATE eFsmState; - ENUM_SCAN_STATUS eScanStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - ASSERT(prScanDoneMsg->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - eScanStatus = prScanDoneMsg->eScanStatus; - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScanDone.\n")); - kalPrint("BOW SCAN [DONE:%d]\n", ucSeqNumOfCompMsg); -#endif - - if( eScanStatus == SCAN_STATUS_CANCELLED) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCELLED:%d]\n", ucSeqNumOfCompMsg); -#endif - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTING) { - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - return; - } - else if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - //bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - return; - } - else if (ucSeqNumOfCompMsg != prBowFsmInfo->ucSeqNumOfScanReq) - { - DBGLOG(BOW, EVENT, ("Sequence no. of BOW Responder scan done is not matched.\n")); - return; - } - else - { - prConnSettings->fgIsScanReqIssued = FALSE; - prBssDesc = scanSearchBssDescByBssid(prAdapter, prBowFsmInfo->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("End scan result searching.\n")); -#endif - - /*Initiator is FOUND*/ - if (prBssDesc != NULL)// (prBssDesc->aucBSSID != NULL)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Search Bow Peer address - %x:%x:%x:%x:%x:%x.\n", prBssDesc->aucBSSID[0], - prBssDesc->aucBSSID[1], - prBssDesc->aucBSSID[2], - prBssDesc->aucBSSID[3], - prBssDesc->aucBSSID[4], - prBssDesc->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("Starting to join initiator.\n")); -#endif - /*Set target BssDesc*/ - prBowFsmInfo->prTargetBssDesc = prBssDesc; - /*Request channel to do JOIN*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } - /*Initiator is NOT FOUND*/ - else - { - /*Scan again, until PAL timeout*/ - bowResponderScan(prAdapter); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for cancelling scan request. There is another option to extend channel privilige -* for another purpose. -* -* @param fgIsChannelExtention - Keep the channel previlege, but can cancel scan timer. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ) -{ - - P_MSG_SCN_SCAN_CANCEL prScanCancel = (P_MSG_SCN_SCAN_CANCEL)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo = (P_BOW_FSM_INFO_T)NULL; - - DEBUGFUNC("bowResponderCancelScan()"); - - do { - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (TRUE) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCEL:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq); -#endif - /* There is a channel privilege on hand. */ - - DBGLOG(P2P, TRACE, ("BOW Cancel Scan\n")); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancel) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancel->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_CANCEL; - prScanCancel->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prScanCancel->ucSeqNum = prBowFsmInfo->ucSeqNumOfScanReq; -#if CFG_ENABLE_WIFI_DIRECT - prScanCancel->fgIsChannelExt = fgIsChannelExtention; -#endif - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancel, - MSG_SEND_METHOD_BUF); - - } - - } while (FALSE); - -} /* bowResponderCancelScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - ASSERT(prBssDesc); - ASSERT(prAdapter); - - DBGLOG(BOW, EVENT, ("Starting bowResponderJoin.\n")); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTING); - - //4 <2> Setup corresponding STA_RECORD_T - /*Support First JOIN and retry*/ - prStaRec = bssCreateStaRecFromBssDesc( - prAdapter, - STA_TYPE_BOW_AP, - NETWORK_TYPE_BOW_INDEX, - prBssDesc); - - prBowFsmInfo->prTargetStaRec = prStaRec; - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - prStaRec->fgIsReAssoc = FALSE; - prBowFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prBowFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(BOW, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prBowFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - ASSERT(0); - } - - //4 <4.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <5> Overwrite Connection Setting for eConnectionPolicy - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prBssDesc->aucSSID)); - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prConnSettings->aucSSID)); -#endif - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_BOW_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - prBssInfo->prStaRecOfAP = prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - printk("BoW trigger SAA ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for BOW FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - P_BSS_INFO_T prBssInfo; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete.\n")); - DBGLOG(BOW, EVENT, ("bowfsmRunEventJoinComplete ptr check\n")); - DBGLOG(BOW, EVENT, ("prMsgHdr %x\n", prMsgHdr)); - DBGLOG(BOW, EVENT, ("prAdapter %x\n", prAdapter)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo %x\n", prBowFsmInfo)); - DBGLOG(BOW, EVENT, ("prStaRec %x\n", prStaRec)); -#endif - - ASSERT(prStaRec); - ASSERT(prBowFsmInfo); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prBowFsmInfo->ucSeqNumOfReqMsg) { - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - prStaRec->eStaType = STA_TYPE_BOW_AP; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; -#if CFG_BOW_RATE_LIMITATION - //4 <1.2>Update Rate Set - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } - } -#endif - - //4 <1.1> Change FW's Media State immediately. - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <1.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ -#if CFG_BOW_SUPPORT_11N - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); -#endif - - //4 <1.3> Update BSS_INFO_T - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Finish bowUpdateBssInfoForJOIN.\n")); -#endif - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowFsmRunEventJoinComplete, qmActivateStaRec.\n")); -#endif - - //4 <1.7> Set the Next State of BOW FSM - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - //4 <2> JOIN was not successful - else - { - /*Retry*/ - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete -- Join failed.\n")); - printk("BoW trigger SAA REJOIN\n"); -#endif - } - } - - cnmMemFree(prAdapter, prMsgHdr); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // NOTE(Kevin): Move following line to bowChangeMediaState() macro per CM's request. - //prBowBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prBssInfo->ucPrimaryChannel); - - switch (prBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prBssInfo->ucReasonOfDisconnect; - - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_BOW_INDEX, &rEventConnStatus); - prBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(BOW, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAATxFail , bssRemoveStaRecFromClientList.\n")); - printk("BoW AAA TxFail, target state %d\n", prStaRec->ucStaState+1); -#endif - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prStaRec); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAAComplete, cnmStaRecChangeState, STA_STATE_3.\n")); - printk("BoW AAA complete ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - /*Update BssInfo to connected*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*Update StaRec to State3*/ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - /*Connected*/ - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle RxDeauth -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if(!IS_STA_IN_BOW(prStaRec)) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - eFsmState = bowGetBowTableState(prAdapter, prStaRec->aucMacAddr); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (prStaRec->ucStaState > STA_STATE_1) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - //P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; - } - - return WLAN_STATUS_NOT_ACCEPTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handle BoW Link disconnect. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - /*Free target StaRec*/ - if(prMsduInfo) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - } - else { - prStaRec = prBowFsmInfo->prTargetStaRec; - } - - if(prStaRec) { - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - kalPrint("bowDisconnectLink\n"); - /*No one connected*/ - if (g_u4LinkCount == 0 && g_u4Beaconing != 0) - { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer); - bowStopping(prAdapter); - kalPrint("bowStopping\n"); - /*Restore TxPower from Short range mode*/ -#if CFG_SUPPORT_NVRAM && 0 - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - /*Uninit BoW Interface*/ -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prAdapter->prGlueInfo); -#endif - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAssocTime = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prAssocReqFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAssocReqFrame->aucSrcAddr[0], - prAssocReqFrame->aucSrcAddr[1], - prAssocReqFrame->aucSrcAddr[2], - prAssocReqFrame->aucSrcAddr[3], - prAssocReqFrame->aucSrcAddr[4], - prAssocReqFrame->aucSrcAddr[5])); -#endif - - /*Assoc Accept*/ - while(EQUAL_MAC_ADDR(prAssocReqFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, return wlanbowCmdEventLinkConnected.\n")); -#endif - /*Update StaRec*/ - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAssocReqFrame->aucSrcAddr); - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; - -#if CFG_BOW_RATE_LIMITATION - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } else { - /*If no avaliable rate is found, DECLINE the association*/ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - } -#endif - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - - /*Undpate BssInfo to FW*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*reply successful*/ - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAssocResp = TRUE; - break; - } - - /*Reject Assoc*/ - if(*pu2StatusCode != STATUS_CODE_SUCCESSFUL) { - /*Reply Assoc with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAssocTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAssocTime == 0 - ) { - fgReplyAssocResp = TRUE; - rLastRejectAssocTime = rCurrentTime; - } - } - - return fgReplyAssocResp; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAuthTime = 0; - - /* TODO(Kevin): Call BoW functions to check .. - 1. Check we are BoW now. - 2. Check we can accept connection from thsi peer - 3. Check Black List here. - */ - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prAuthFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAuthFrame->aucSrcAddr[0], - prAuthFrame->aucSrcAddr[1], - prAuthFrame->aucSrcAddr[2], - prAuthFrame->aucSrcAddr[3], - prAuthFrame->aucSrcAddr[4], - prAuthFrame->aucSrcAddr[5])); -#endif - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAuthFrame->aucSrcAddr); - if (!prStaRec) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecAlloc.\n")); -#endif - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - ASSERT(prStaRec); - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - prBowBssInfo->prStaRecOfAP = prStaRec; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecChangeState.\n")); -#endif - } - else - { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucIndex, %x.\n", prStaRec->ucIndex)); -#endif - bssRemoveStaRecFromClientList(prAdapter, prBowBssInfo, prStaRec); - } - - if (EQUAL_MAC_ADDR(prAuthFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { - - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucNetTypeIndex, %x.\n", prStaRec->ucNetTypeIndex)); -#endif - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->ucJoinFailureCount = 0; - *pprStaRec = prStaRec; - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAuth = TRUE; - } - else { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - /*Reply auth with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAuthTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAuthTime == 0 - ) { - fgReplyAuth = TRUE; - rLastRejectAuthTime = rCurrentTime; - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, fgReplyAuth, %x.\n", fgReplyAuth)); -#endif - return fgReplyAuth; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - prBowFsmInfo->fgIsChannelGranted = TRUE; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Entering bowRunEventChGrant.\n")); -#endif - - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*Release channel*/ - if((!prBowFsmInfo->fgIsChannelRequested) || - (prBowFsmInfo->ucSeqNumOfChReq != ucTokenID) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTED) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTING)){ -#if CFG_BOW_TEST - printk("BoW Channel [GIVE UP:%d]\n", ucTokenID); - printk("[Requested:%d][ucSeqNumOfChReq:%d][eFsmState:%d]\n", - prBowFsmInfo->fgIsChannelRequested, prBowFsmInfo->ucSeqNumOfChReq, eFsmState); -#endif - bowReleaseCh(prAdapter); - return; - } - - /* 2. channel privilege has been approved */ - prBowFsmInfo->u4ChGrantedInterval = u4GrantInterval; - -#if 0 - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - prBowFsmInfo->u4ChGrantedInterval - BOW_JOIN_CH_GRANT_THRESHOLD); -#else - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - BOW_JOIN_CH_REQUEST_INTERVAL - BOW_JOIN_CH_GRANT_THRESHOLD); -#endif - - /* 3.2 set local variable to indicate join timer is ticking */ - prBowFsmInfo->fgIsInfraChannelFinished = FALSE; - -#if CFG_BOW_TEST - printk("BoW Channel [GRANTED:%d].\n", ucTokenID); -#endif - - if(eFsmState == BOW_DEVICE_STATE_ACQUIRING_CHANNEL) { - bowStarting(prAdapter); - bowReleaseCh(prAdapter); - if(prBowFsmInfo->ucRole == BOW_RESPONDER) { - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); - } - } - else { - /*update bssinfo*/ - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM for channel privilege requesting -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_REQ_T prMsgChReq; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (prBowFsmInfo->fgIsChannelGranted == FALSE) - { - -#if CFG_BOW_TEST - printk("BoW channel [REQUEST:%d], %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq+1, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChReq->ucTokenID = ++prBowFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; -#if 0 - prMsgChReq->u4MaxInterval = BOW_JOIN_CH_REQUEST_INTERVAL; -#else - prMsgChReq->u4MaxInterval = 1; -#endif - prMsgChReq->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; //prBowFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = CHNL_EXT_SCN; //prBowFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prBowFsmInfo->eBand; //prBowFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prBowFsmInfo->aucPeerAddress); - - - prBowFsmInfo->fgIsChannelRequested = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform BOW that channel privilege is granted -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if(prBowFsmInfo->fgIsChannelGranted != FALSE || prBowFsmInfo->fgIsChannelRequested != FALSE) - { -#if CFG_BOW_TEST - printk("BoW channel [RELEASE:%d] %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - - prBowFsmInfo->fgIsChannelRequested = FALSE; - prBowFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChAbort->ucTokenID = prBowFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - printk("BoW Channel [TIMEOUT]\n"); -#endif -#if 1 - //bowReleaseCh(prAdapter); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*If connecting is not completed, request CH again*/ - if((eFsmState == BOW_DEVICE_STATE_CONNECTING) || - (eFsmState == BOW_DEVICE_STATE_STARTING)) - { - bowRequestCh(prAdapter); - } -#endif -} - - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucBowTableIdx = 0; - CMD_INFO_T rCmdInfo; - - ASSERT(prAdapter); - - kalMemZero(&rCmdInfo, sizeof(CMD_INFO_T)); - - while (ucBowTableIdx < CFG_BOW_PHYSICAL_LINK_NUM) - { - if (arBowTable[ucBowTableIdx].fgIsValid) - { - COPY_MAC_ADDR(prAdapter->rWifiVar.rBowFsmInfo.aucPeerAddress, arBowTable[ucBowTableIdx].aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", ucBowTableIdx, - arBowTable[ucBowTableIdx].aucPeerAddress[0], - arBowTable[ucBowTableIdx].aucPeerAddress[1], - arBowTable[ucBowTableIdx].aucPeerAddress[2], - arBowTable[ucBowTableIdx].aucPeerAddress[3], - arBowTable[ucBowTableIdx].aucPeerAddress[4], - arBowTable[ucBowTableIdx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].fgIsValid, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif -#if 1 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#else - wlanbowCmdEventLinkDisconnected(prAdapter, &rCmdInfo, NULL); -#endif - } - - ucBowTableIdx += 1; - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return FALSE; -} - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - if (arBowTable[ucBowTableIdx].fgIsValid) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableContent, arBowTable[idx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); - printk("GET State [%d]\n", arBowTable[ucBowTableIdx].eState); -#endif - prBowTable = &(arBowTable[ucBowTableIdx]); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - COPY_MAC_ADDR(arBowTable[ucBowTableIdx].aucPeerAddress, prBowTable->aucPeerAddress); - arBowTable[ucBowTableIdx].eState = prBowTable->eState; - arBowTable[ucBowTableIdx].fgIsValid = prBowTable->fgIsValid; - arBowTable[ucBowTableIdx].ucAcquireID = prBowTable->ucAcquireID; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, prBowTable->eState, prBowTable->aucPeerAddress); - //kalSetBowRole(prAdapter->prGlueInfo, prBowTable->ucRole, prBowTable->aucPeerAddress); - -#if CFG_BOW_TEST - printk("SET State [%d]\n", arBowTable[ucBowTableIdx].eState); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[ucBowTableIdx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif - - return TRUE; - -} - - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - *pucBowTableIdx = idx; - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if(!arBowTable[idx].fgIsValid) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableFreeEntry, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - *pucBowTableIdx = idx; - arBowTable[idx].fgIsValid = TRUE; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].eState;, %x, %x.\n", idx, arBowTable[idx].eState)); - printk("GET State [%d]\n", arBowTable[idx].eState); -#endif - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return arBowTable[idx].eState; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ) -{ - UINT_8 ucBowTableIdx; - - if(bowGetBowTableEntryByPeerAddress(prAdapter, aucPeerAddress, &ucBowTableIdx)) { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - arBowTable[ucBowTableIdx].eState = eState; -#if CFG_BOW_TEST - printk("SET State [%d]\n", eState); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, eState, aucPeerAddress); - return TRUE; - } - return FALSE; -} - - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_lib.c b/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_lib.c deleted file mode 100755 index 76bead149da0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_lib.c +++ /dev/null @@ -1,5536 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_lib.c#2 $ -*/ -/*! \file wlan_lib.c - \brief Internal driver stack will export the required procedures here for GLUE Layer. - - This file contains all routines which are exported from MediaTek 802.11 Wireless - LAN driver stack to GLUE Layer. -*/ - - -/* -** $Log: wlan_lib.c $ -** -** 08 15 2012 eason.tsai -** [ALPS00338170] [Need Patch] [Volunteer Patch] modify build warning -** fix build waring for codechange - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 11 2012 cp.wu - * [WCXRP00001252] [MT6620 Wi-Fi][Driver] Add debug message while encountering firmware response timeout - * output message while timeout event occurs - * - * 06 11 2012 eason.tsai - * NULL - * change from binay to hex code - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct scan result removing policy. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 14 2011 cm.chang - * [WCXRP00001104] [All Wi-Fi][FW] Show init process by HW mail-box register - * Show FW initial ID when timeout to wait for ready bit - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * when powering off, always clear pending interrupts, then wait for RDY to be de-asserted - * - * 10 14 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * shorten the packet length for firmware download if no more than 2048 bytes. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 26 2011 cm.chang - * [WCXRP00000952] [MT5931 Wi-Fi][FW] Handshake with BWCS before DPD/TX power calibration - * Fix compiling error for WinXP MT5931 driver - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS Sync ready for WinXP. - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 19 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * escape from normal path if any error is occured. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 24 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * if there is no valid address in chip, generate a new one from driver domain instead of firmware domain due to sufficient randomness - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 20 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * disable whole-chip resetting mechanism due to the need of further ECO to work as expected. - * - * 05 31 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * changed to use non-zero checking for valid bit in NVRAM content - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * correct assertion. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 05 11 2011 cm.chang - * [WCXRP00000717] [MT5931 Wi-Fi][Driver] Handle wrong NVRAM content about AP bandwidth setting - * . - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * change delay from 100ms to 120ms upon DE's suggestion. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 15 2011 cp.wu - * [WCXRP00000654] [MT6620 Wi-Fi][Driver] Add loop termination criterion for wlanAdapterStop(). - * add loop termination criteria for wlanAdapterStop(). - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 04 06 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * invoke nicReleaseAdapterMemory() as failure handling in case wlanAdapterStart() failed unexpectedly - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 25 2011 cp.wu - * [WCXRP00000496] [MT5931][Driver] Apply host-triggered chip reset before initializing firmware download procedures - * apply host-triggered chip reset mechanism before initializing firmware download procedures. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 01 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * init variable for CTIA. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 22 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Remove controling auto rate from initial setting. The initial setting is defined by FW code. - * - * 12 15 2010 cp.wu - * NULL - * sync. with ALPS code by enabling interrupt just before leaving wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * Change Param name for invitation connection. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * for MT5931, adapter initialization is done *after* firmware is downloaded. - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * correct MT5931 firmware download procedure: - * MT5931 will download firmware first then acquire LP-OWN - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) update MT5931 firmware encryption tool. (using 64-bytes unit) - * 2) update MT5931 firmware download procedure - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 15 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * bugfix: always reset pointer to IEbuf to zero when keeping scanning result for the connected AP - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 13 2010 cp.wu - * NULL - * acquire & release power control in oid handing wrapper. - * - * 09 09 2010 cp.wu - * NULL - * move IE to buffer head when the IE pointer is not pointed at head. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 13 2010 cp.wu - * NULL - * correction issue: desired phy type not initialized as ABGN mode. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 10 2010 cm.chang - * NULL - * Support EEPROM read/write in RF test mode - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Reduce unnecessary type casting - * - * 07 13 2010 cp.wu - * - * use multiple queues to keep 1x/MMPDU/CMD's strict order even when there is incoming 1x frames. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * initialize mbox & ais_fsm in wlanAdapterStart() - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable interrupt then send power control command packet. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when stopping adapter, wait til RDY bit has been cleaerd. - * 2) set TASK_OFFLOAD as driver-core OIDs - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * roll-back to rev.60. - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always set fw-own before driver is unloaded. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * 2) command sequence number is now increased atomically - * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * 2) add 2 kal API for later integration - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * 2) ready bit will be polled for limited iteration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * kalOidComplete is not necessary in linux - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use pass-in prRegInfo instead of accessing prGlueInfo directly - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding none-glue code portability - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding non-glue code portability - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve non-glue code portability - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * only send CMD_NIC_POWER_CTRL in wlanAdapterStop() when card is not removed and is not in D3 state - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when starting adapter, read local adminsitrated address from registry and send to firmware via CMD_BASIC_CONFIG. - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for QM_TEST_MODE - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct function name .. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanAdapterStart - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * 2) firmware image length is now retrieved via NdisFileOpen - * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * 4) nicRxWaitResponse() revised - * 5) another set of TQ counter default value is added for fw-download state - * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * 2. follow MSDN defined behavior when associates to another AP - * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * wlanoidSetFrequency is now implemented by RF test command. - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * QueryRssi is no longer w/o hardware access, it is now implemented by command/event handling loop - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. - * - * 01 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * allow MCR read/write OIDs in RF test mode - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * 2. block TX/ordinary OID when RF test mode is engaged - * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-12-10 16:54:36 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-12-09 20:04:59 GMT mtk02752 -** only report as connected when CFG_HIF_EMULATION_TEST is set to 1 -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-12-08 17:39:41 GMT mtk02752 -** wlanoidRftestQueryAutoTest could be executed without touching hardware -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-12-03 16:10:26 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-02 22:05:33 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-01 23:02:36 GMT mtk02752 -** remove unnecessary spinlock -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-01 22:50:38 GMT mtk02752 -** use TC4 for command, maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-27 12:45:34 GMT mtk02752 -** prCmdInfo should be freed when invoking wlanReleasePendingOid() to clear pending oid -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-24 19:55:51 GMT mtk02752 -** wlanSendPacket & wlanRetransmitOfPendingFrames is only used in old data path -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-23 17:59:55 GMT mtk02752 -** clear prPendingOID inside wlanSendCommand() when the OID didn't need to be replied. -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-23 14:45:29 GMT mtk02752 -** add another version of wlanSendCommand() for command-sending only without blocking for response -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-17 22:40:44 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 10:14:56 GMT mtk01084 -** modify place to invoke wlanIst -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-10-30 18:17:07 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-10-29 19:46:15 GMT mtk01084 -** invoke interrupt process routine -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-10-13 21:58:24 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-09-09 17:26:01 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-05-20 12:21:27 GMT mtk01461 -** Add SeqNum check when process Event Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-05-19 10:38:44 GMT mtk01461 -** Add wlanReleasePendingOid() for mpReset() if there is a pending OID and no available TX resource to send it. -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-04-29 15:41:34 GMT mtk01461 -** Add handle of EVENT of CMD Result in wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-04-22 09:11:23 GMT mtk01461 -** Fix wlanSendCommand() for Driver Domain CR -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-04-21 09:33:56 GMT mtk01461 -** Update wlanSendCommand() for Driver Domain Response and handle Event Packet, wlanQuery/SetInformation() for enqueue CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-17 20:00:08 GMT mtk01461 -** Update wlanImageSectionDownload for optimized CMD process -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-14 20:50:51 GMT mtk01426 -** Fixed compile error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-13 16:38:40 GMT mtk01084 -** add wifi start function -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-13 14:26:44 GMT mtk01084 -** modify a parameter about FW download length -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-10 21:53:42 GMT mtk01461 -** Update wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-08 16:51:04 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-01 10:32:47 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-03-23 21:44:13 GMT mtk01461 -** Refine TC assignment for WmmAssoc flag -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 16:51:57 GMT mtk01084 -** modify the input argument of caller to RECLAIM_POWER_CONTROL_TO_PM() -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:27:13 GMT mtk01461 -** Add reference code of FW Image Download -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:37 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:08 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 16:28:45 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" -#include "mgmt/ais_fsm.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* 6.1.1.2 Interpretation of priority parameter in MAC service primitives */ -/* Static convert the Priority Parameter/TID(User Priority/TS Identifier) to Traffic Class */ -const UINT_8 aucPriorityParam2TC[] = { - TC1_INDEX, - TC0_INDEX, - TC0_INDEX, - TC1_INDEX, - TC2_INDEX, - TC2_INDEX, - TC3_INDEX, - TC3_INDEX -}; - -#if QM_TEST_MODE -extern QUE_MGT_T g_rQM; -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _CODE_MAPPING_T { - UINT_32 u4RegisterValue; - INT_32 u4TxpowerOffset; -} CODE_MAPPING_T, *P_CODE_MAPPING_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -BOOLEAN fgIsBusAccessFailed = FALSE; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SIGNED_EXTEND(n, _sValue) \ - (((_sValue) & BIT((n)-1)) ? ((_sValue) | BITS(n,31)) : \ - ((_sValue) & ~BITS(n,31))) - -// TODO: Check -/* OID set handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerWOHwAccess[] = { - wlanoidSetChannel, - wlanoidSetBeaconInterval, - wlanoidSetAtimWindow, - wlanoidSetFrequency, -}; - -// TODO: Check -/* OID query handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerWOHwAccess[] = { - wlanoidQueryBssid, - wlanoidQuerySsid, - wlanoidQueryInfrastructureMode, - wlanoidQueryAuthMode, - wlanoidQueryEncryptionStatus, - wlanoidQueryPmkid, - wlanoidQueryNetworkTypeInUse, - wlanoidQueryBssidList, - wlanoidQueryAcpiDevicePowerState, - wlanoidQuerySupportedRates, - wlanoidQueryDesiredRates, - wlanoidQuery802dot11PowerSaveProfile, - wlanoidQueryBeaconInterval, - wlanoidQueryAtimWindow, - wlanoidQueryFrequency, -}; - -/* OID set handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerAllowedInRFTest[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidRftestSetAutoTest, - wlanoidSetMcrWrite, - wlanoidSetEepromWrite -}; - -/* OID query handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerAllowedInRFTest[] = { - wlanoidRftestQueryAutoTest, - wlanoidQueryMcrRead, - wlanoidQueryEepromRead -} -; - -PFN_OID_HANDLER_FUNC apfnOidWOTimeoutCheck[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidSetAcpiDevicePowerState, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is a private routine, which is used to check if HW access is needed -* for the OID query/ set handlers. -* -* \param[IN] pfnOidHandler Pointer to the OID handler. -* \param[IN] fgSetInfo It is a Set information handler. -* -* \retval TRUE This function needs HW access -* \retval FALSE This function does not need HW access -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOHwAccess; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerWOHwAccess = apfnOidSetHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidSetHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerWOHwAccess = apfnOidQueryHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidQueryHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOHwAccess[i] == pfnOidHandler) { - return FALSE; - } - } - - return TRUE; -} /* wlanIsHandlerNeedHwAccess */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set flag for later handling card -* ejected event. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -* -* \note When surprised removal happens, Glue layer should invoke this -* function to notify WPDD not to do any hw access. -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanCardEjected ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("wlanCardEjected"); - //INITLOG(("\n")); - - ASSERT(prAdapter); - - /* mark that the card is being ejected, NDIS will shut us down soon */ - nicTxRelease(prAdapter); - -} /* wlanCardEjected */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Create adapter object -* -* \param prAdapter This routine is call to allocate the driver software objects. -* If fails, return NULL. -* \retval NULL If it fails, NULL is returned. -* \retval NOT NULL If the adapter was initialized successfully. -*/ -/*----------------------------------------------------------------------------*/ -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdpater = (P_ADAPTER_T)NULL; - - DEBUGFUNC("wlanAdapterCreate"); - - do { - prAdpater = (P_ADAPTER_T) kalMemAlloc(sizeof(ADAPTER_T), VIR_MEM_TYPE); - - if (!prAdpater) { - DBGLOG(INIT, ERROR, ("Allocate ADAPTER memory ==> FAILED\n")); - break; - } - -#if QM_TEST_MODE - g_rQM.prAdapter = prAdpater; -#endif - kalMemZero(prAdpater, sizeof(ADAPTER_T)); - prAdpater->prGlueInfo = prGlueInfo; - - } while(FALSE); - - return prAdpater; -} /* wlanAdapterCreate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroy adapter object -* -* \param prAdapter This routine is call to destroy the driver software objects. -* If fails, return NULL. -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - - if (!prAdapter) { - return; - } - - kalMemFree(prAdapter, VIR_MEM_TYPE, sizeof(ADAPTER_T)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize the adapter. The sequence is -* 1. Disable interrupt -* 2. Read adapter configuration from EEPROM and registry, verify chip ID. -* 3. Create NIC Tx/Rx resource. -* 4. Initialize the chip -* 5. Initialize the protocol -* 6. Enable Interrupt -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 i, u4Value = 0; - UINT_32 u4WHISR = 0; - UINT_8 aucTxCount[8]; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwLoadAddr, u4ImgSecSize; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - PARAM_PTA_IPC_T rBwcsPta; - UINT_32 u4SetInfoLen; -#endif - - ASSERT(prAdapter); - - DEBUGFUNC("wlanAdapterStart"); - - //4 <0> Reset variables in ADAPTER_T - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - - QUEUE_INITIALIZE(&(prAdapter->rPendingCmdQueue)); - - /* Initialize rWlanInfo */ - kalMemSet(&(prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - //4 <0.1> reset fgIsBusAccessFailed - fgIsBusAccessFailed = FALSE; - - do { - if ( (u4Status = nicAllocateAdapterMemory(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicAllocateAdapterMemory Error!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - prAdapter->u4OsPacketFilter = PARAM_PACKET_FILTER_SUPPORTED; - -#if defined(MT6620) || defined(MT6628) - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - //4 <2> Initialize System Service (MGMT Memory pool and STA_REC) - nicInitSystemService(prAdapter); - - //4 <3> Initialize Tx - nicTxInitialize(prAdapter); - wlanDefTxPowerCfg(prAdapter); - - //4 <4> Initialize Rx - nicRxInitialize(prAdapter); - -#if CFG_ENABLE_FW_DOWNLOAD - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 1. disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 2. Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3. FW download here */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImageFileLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImageFileLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - prRegInfo->u4StartAddress); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", prRegInfo->u4LoadAddress)); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImageFileLength)); - - do { -#if CFG_SUPPORT_WHOLE_CHIP_RESET -#define RESET_RDY_INTERVAL (120) - - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.0.1 delay for EEIF ready */ - kalMsleep(RESET_RDY_INTERVAL); -#endif - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImageFileLength >> 6); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 5. disable interrupt */ - nicDisableInterrupt(prAdapter); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif -#endif - - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - //4 <5> check Wi-Fi FW asserts ready bit - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - UINT_32 u4MailBox0; - - nicGetMailbox(prAdapter, 0, &u4MailBox0); - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout, ID=%d\n", - (u4MailBox0 & 0x0000FFFF))); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* post initialization for MT5931 due to some CR is only accessible after driver own */ - nicRxPostInitialize(prAdapter); -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 1. reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 2. reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - wlanSetMcuOscStableTime(prAdapter, 0); -#endif - - /* 3. query for permanent address by polling */ - wlanQueryPermanentAddress(prAdapter); - -#if (CFG_SUPPORT_NIC_CAPABILITY == 1) - /* 4. query for NIC capability */ - wlanQueryNicCapability(prAdapter); -#endif - - /* 5. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6. indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* OID timeout timer initialize */ - cnmTimerInitTimer(prAdapter, - &prAdapter->rOidTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)wlanReleasePendingOid, - (UINT_32)NULL); - - /* Power state initialization */ - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - - /* Online scan option */ - if(prRegInfo->fgDisOnlineScan == 0) { - prAdapter->fgEnOnlineScan = TRUE; - } - else { - prAdapter->fgEnOnlineScan = FALSE; - } - - /* Beacon lost detection option */ - if(prRegInfo->fgDisBcnLostDetection != 0) { - prAdapter->fgDisBcnLostDetection = TRUE; - } - - /* Load compile time constant */ - prAdapter->rWlanInfo.u2BeaconPeriod = CFG_INIT_ADHOC_BEACON_INTERVAL; - prAdapter->rWlanInfo.u2AtimWindow = CFG_INIT_ADHOC_ATIM_WINDOW; - -#if 1// set PM parameters - prAdapter->fgEnArpFilter = prRegInfo->fgEnArpFilter; - prAdapter->u4PsCurrentMeasureEn = prRegInfo->u4PsCurrentMeasureEn; - - prAdapter->u4UapsdAcBmp = prRegInfo->u4UapsdAcBmp; - - prAdapter->u4MaxSpLen = prRegInfo->u4MaxSpLen; - - DBGLOG(INIT, TRACE, ("[1] fgEnArpFilter:0x%x, u4UapsdAcBmp:0x%x, u4MaxSpLen:0x%x", - prAdapter->fgEnArpFilter, - prAdapter->u4UapsdAcBmp, - prAdapter->u4MaxSpLen)); - - prAdapter->fgEnCtiaPowerMode = FALSE; - -#endif - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, prRegInfo); - - /* Enable WZC Disassociation */ - prAdapter->rWifiVar.fgSupportWZCDisassociation = TRUE; - - /* Apply Rate Setting */ - if((ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* Disable Hidden SSID Join */ - prAdapter->rWifiVar.fgEnableJoinToHiddenSSID = FALSE; - - /* Enable Short Slot Time */ - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable = TRUE; - - /* configure available PHY type set */ - nicSetAvailablePhyTypeSet(prAdapter); - -#if 1// set PM parameters - { -#if CFG_SUPPORT_PWR_MGT - prAdapter->u4PowerMode = prRegInfo->u4PowerMode; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile = ENUM_PSP_FAST_SWITCH; -#else - prAdapter->u4PowerMode = ENUM_PSP_CONTINUOUS_ACTIVE; -#endif - {/*CR:WCNAE00007101*/ - struct net_device *prDev = prAdapter->prGlueInfo->prDevHandler; - - if (prDev != NULL) { - glBusSetIrq(prDev, NULL, prAdapter->prGlueInfo ); - } - else { - printk(KERN_INFO "Skip glBusSetIrq because of the prDev\n"); - } - } - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, //FIXIT - prAdapter->u4PowerMode, - FALSE); - } - -#endif - -#if CFG_SUPPORT_NVRAM - /* load manufacture data */ - wlanLoadManufactureData(prAdapter, prRegInfo); -#endif - -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - //Enable DPD calibration. - rBwcsPta.u.aucBTPParams[0] = 0x00; - rBwcsPta.u.aucBTPParams[1] = 0x01; - rBwcsPta.u.aucBTPParams[2] = 0x00; - rBwcsPta.u.aucBTPParams[3] = 0x80; - - wlanoidSetBT(prAdapter, - (PVOID)&rBwcsPta, - sizeof(PARAM_PTA_IPC_T), - &u4SetInfoLen); -#endif - -#if 0 - /* Update Auto rate parameters in FW */ - nicRlmArUpdateParms(prAdapter, - prRegInfo->u4ArSysParam0, - prRegInfo->u4ArSysParam1, - prRegInfo->u4ArSysParam2, - prRegInfo->u4ArSysParam3); -#endif - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* clock gating workaround */ - prAdapter->fgIsClockGatingEnabled = FALSE; -#endif - - } while(FALSE); - - if(u4Status == WLAN_STATUS_SUCCESS) { - // restore to hardware default - HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter); - HAL_SET_MAILBOX_READ_CLEAR(prAdapter, FALSE); - - /* Enable interrupt */ - nicEnableInterrupt(prAdapter); - - } - else { - // release allocated memory - nicReleaseAdapterMemory(prAdapter); - } - - return u4Status; -} /* wlanAdapterStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Uninitialize the adapter -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Value = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - /* MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - if(prAdapter->rAcpiState == ACPI_STATE_D0 && -#if (CFG_CHIP_RESET_SUPPORT == 1) - kalIsResetting() == FALSE && -#endif - kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - - /* 0. Disable interrupt, this can be done without Driver own */ - nicDisableInterrupt(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* 1. Set CMD to FW to tell WIFI to stop (enter power off state) */ - if(prAdapter->fgIsFwOwn == FALSE && - wlanSendNicPowerCtrlCmd(prAdapter, 1) == WLAN_STATUS_SUCCESS) { - /* 2. Clear pending interrupt */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 3. Wait til RDY bit has been cleaerd */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if ((u4Value & WCIR_WLAN_READY) == 0) - break; - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || i >= CFG_RESPONSE_POLLING_TIMEOUT) { - break; - } - else { - i++; - kalMsleep(10); - } - } - } - - /* 4. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - -#if CFG_FORCE_RESET_UNDER_BUS_ERROR - if(HAL_TEST_FLAG(prAdapter, ADAPTER_FLAG_HW_ERR) == TRUE) { - /* force acquire firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - /* delay for 10ms */ - kalMdelay(10); - - /* force firmware reset via software interrupt */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WSICR, WSICR_H2D_SW_INT_SET); - - /* force release firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - } -#endif - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - - nicRxUninitialize(prAdapter); - - nicTxRelease(prAdapter); - - /* System Service Uninitialization */ - nicUninitSystemService(prAdapter); - - nicReleaseAdapterMemory(prAdapter); - -#if defined(_HIF_SPI) - /* Note: restore the SPI Mode Select from 32 bit to default */ - nicRestoreSpiDefMode(prAdapter); -#endif - - return u4Status; -} /* wlanAdapterStop */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by ISR (interrupt). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval TRUE: NIC's interrupt -* \retval FALSE: Not NIC's interrupt -*/ -/*----------------------------------------------------------------------------*/ -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ) -{ - ASSERT(prAdapter); - - if (fgGlobalIntrCtrl) { - nicDisableInterrupt(prAdapter); - - //wlanIST(prAdapter); - } - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by IST (task_let). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - nicProcessIST(prAdapter); - - nicEnableInterrupt(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check command queue to find out if any could be dequeued -* and/or send to HIF to MT6620 -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdQue Pointer of Command Queue (in Glue Layer) -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ) -{ - WLAN_STATUS rStatus; - QUE_T rTempCmdQue, rMergeCmdQue, rStandInCmdQue; - P_QUE_T prTempCmdQue, prMergeCmdQue, prStandInCmdQue; - P_QUE_ENTRY_T prQueueEntry; - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - ENUM_FRAME_ACTION_T eFrameAction = FRAME_ACTION_DROP_PKT; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prCmdQue); - - prTempCmdQue = &rTempCmdQue; - prMergeCmdQue = &rMergeCmdQue; - prStandInCmdQue = &rStandInCmdQue; - - QUEUE_INITIALIZE(prTempCmdQue); - QUEUE_INITIALIZE(prMergeCmdQue); - QUEUE_INITIALIZE(prStandInCmdQue); - - //4 <1> Move whole list of CMD_INFO to temp queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - //4 <2> Dequeue from head and check it is able to be sent - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while(prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - /* command packet will be always sent */ - eFrameAction = FRAME_ACTION_TX_PKT; - break; - - case COMMAND_TYPE_SECURITY_FRAME: - /* inquire with QM */ - eFrameAction = qmGetFrameAction(prAdapter, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - NULL, - FRAME_TYPE_802_1X); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - /* inquire with QM */ - prMsduInfo = (P_MSDU_INFO_T)(prCmdInfo->prPacket); - - eFrameAction = qmGetFrameAction(prAdapter, - prMsduInfo->ucNetworkType, - prMsduInfo->ucStaRecIndex, - prMsduInfo, - FRAME_TYPE_MMPDU); - break; - - default: - ASSERT(0); - break; - } - - //4 <3> handling upon dequeue result - if(eFrameAction == FRAME_ACTION_DROP_PKT) { - wlanReleaseCommand(prAdapter, prCmdInfo); - } - else if(eFrameAction == FRAME_ACTION_QUEUE_PKT) { - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - } - else if(eFrameAction == FRAME_ACTION_TX_PKT) { - //4 <4> Send the command - rStatus = wlanSendCommand(prAdapter, prCmdInfo); - - if(rStatus == WLAN_STATUS_RESOURCES) { - // no more TC4 resource for further transmission - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - break; - } - else if(rStatus == WLAN_STATUS_PENDING) { - // command packet which needs further handling upon response - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - QUEUE_INSERT_TAIL(&(prAdapter->rPendingCmdQueue), prQueueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - } - else { - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (rStatus == WLAN_STATUS_SUCCESS) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prCmdInfo->pucInfoBuffer); - } - } - else { - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, prCmdInfo->u4SetInfoLen, rStatus); - } - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - } - else { - ASSERT(0); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - //4 <3> Merge back to original queue - //4 <3.1> Merge prMergeCmdQue & prTempCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prTempCmdQue); - - //4 <3.2> Move prCmdQue to prStandInQue, due to prCmdQue might differ due to incoming 802.1X frames - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prStandInCmdQue, prCmdQue); - - //4 <3.3> concatenate prStandInQue to prMergeCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prStandInCmdQue); - - //4 <3.4> then move prMergeCmdQue to prCmdQue - QUEUE_MOVE_ALL(prCmdQue, prMergeCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanProcessCommandQueue() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will take CMD_INFO_T which carry some informations of -* incoming OID and notify the NIC_TX to send CMD. -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdInfo Pointer of P_CMD_INFO_T -* -* \retval WLAN_STATUS_SUCCESS : CMD was written to HIF and be freed(CMD Done) immediately. -* \retval WLAN_STATUS_RESOURCE : No resource for current command, need to wait for previous -* frame finishing their transmission. -* \retval WLAN_STATUS_FAILURE : Get failure while access HIF or been rejected. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_8 ucTC; /* "Traffic Class" SW(Driver) resource classification */ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - prTxCtrl = &prAdapter->rTxCtrl; - - //DbgPrint("wlanSendCommand()\n"); - // - // -#if DBG && 0 - LOG_FUNC("wlanSendCommand()\n"); - LOG_FUNC("CmdType %u NetworkType %u StaRecIndex %u Oid %u CID 0x%x SetQuery %u NeedResp %u CmdSeqNum %u\n", - prCmdInfo->eCmdType, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - prCmdInfo->fgIsOid, - prCmdInfo->ucCID, - prCmdInfo->fgSetQuery, - prCmdInfo->fgNeedResp, - prCmdInfo->ucCmdSeqNum); -#endif - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - do { - // <0> card removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - rStatus = WLAN_STATUS_FAILURE; - break; - } - - // <1> Normal case of sending CMD Packet - if (!prCmdInfo->fgDriverDomainMCR) { - // <1.1> Assign Traffic Class(TC) = TC4. - ucTC = TC4_INDEX; - - // <1.2> Check if pending packet or resource was exhausted - if ((rStatus = nicTxAcquireResource(prAdapter, ucTC)) == WLAN_STATUS_RESOURCES) { - DbgPrint("NO Resource:%d\n", ucTC); - break; - } - - // <1.3> Forward CMD_INFO_T to NIC Layer - rStatus = nicTxCmd(prAdapter, prCmdInfo, ucTC); - - // <1.4> Set Pending in response to Query Command/Need Response - if (rStatus == WLAN_STATUS_SUCCESS) { - if ((!prCmdInfo->fgSetQuery) || (prCmdInfo->fgNeedResp)) { - rStatus = WLAN_STATUS_PENDING; - } - } - } - // <2> Special case for access Driver Domain MCR - else { - P_CMD_ACCESS_REG prCmdAccessReg; - prCmdAccessReg = (P_CMD_ACCESS_REG)(prCmdInfo->pucInfoBuffer + CMD_HDR_SIZE); - - if (prCmdInfo->fgSetQuery) { - HAL_MCR_WR(prAdapter, - (prCmdAccessReg->u4Address & BITS(2,31)), //address is in DWORD unit - prCmdAccessReg->u4Data); - } - else { - P_CMD_ACCESS_REG prEventAccessReg; - UINT_32 u4Address; - - u4Address = prCmdAccessReg->u4Address; - prEventAccessReg = (P_CMD_ACCESS_REG)prCmdInfo->pucInfoBuffer; - prEventAccessReg->u4Address = u4Address; - - HAL_MCR_RD(prAdapter, - prEventAccessReg->u4Address & BITS(2,31), //address is in DWORD unit - &prEventAccessReg->u4Data); - } - } - - } - while (FALSE); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return rStatus; -} /* end of wlanSendCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function will release thd CMD_INFO upon its attribution - * - * \param prAdapter Pointer of Adapter Data Structure - * \param prCmdInfo Pointer of CMD_INFO_T - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_FAILURE); - } - break; - - case COMMAND_TYPE_SECURITY_FRAME: - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - /* invoke callbacks */ - if(prMsduInfo->pfTxDoneHandler != NULL) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - cnmMgtPktFree(prAdapter, prMsduInfo); - break; - - default: - ASSERT(0); - break; - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - -} /* end of wlanReleaseCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending OID and -* compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReleasePendingOid"); - - ASSERT(prAdapter); - - DBGLOG(INIT, ERROR, ("OID Timeout! Releasing pending OIDs ..\n")); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->fgIsOid) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - // 2: Clear pending OID in glue layer command queue - kalOidCmdClearance(prAdapter->prGlueInfo); - - // 3: Clear pending OID queued in pvOidEntry with REQ_FLAG_OID set - kalOidClearance(prAdapter->prGlueInfo); - - } while(FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending CMD/OID for specific -* NETWORK TYPE and compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingCMDbyNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - DBGLOG(P2P, TRACE, ("Pending CMD for Network Type:%d \n", prCmdInfo->eNetworkType)); - - if (prCmdInfo->eNetworkType == eNetworkType) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - - } while(FALSE); - - return; -} /* wlanReleasePendingCMDbyNetwork */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the packet buffer and reallocate one to the RFB -* -* \param prAdapter Pointer of Adapter Data Structure -* \param pvPacket Pointer of returned packet -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReturnPacket"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if (pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, pvPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT, 1); -#if CFG_NATIVE_802_11 - if (GLUE_TEST_FLAG(prAdapter->prGlueInfo, GLUE_FLAG_HALT)) { - } -#endif - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rIndicatedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (!prSwRfb){ - ASSERT(0); - return; - } - - if (nicRxSetupRFB(prAdapter, prSwRfb)){ - ASSERT(0); - return; - } - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that returns information about -* the capabilities and status of the driver and/or its network adapter. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] pfnOidQryHandler Function pointer for the OID query handler. -* \param[IN] pvInfoBuf Points to a buffer for return the query information. -* \param[IN] u4QueryBufferLen Specifies the number of bytes at pvInfoBuf. -* \param[OUT] pu4QueryInfoLen Points to the number of bytes it written or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4QryInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet */ - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidQryHandler, FALSE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - } -#endif - - return status; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that allows bound protocol drivers, -* or NDIS, to request changes in the state information that the miniport -* maintains for particular object identifiers, such as changes in multicast -* addresses. -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* \param[IN] pfnOidSetHandler Points to the OID set handlers. -* \param[IN] pvInfoBuf Points to a buffer containing the OID-specific data for the set. -* \param[IN] u4InfoBufLen Specifies the number of bytes at prSetBuffer. -* \param[OUT] pu4SetInfoLen Points to the number of bytes it read or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet - * for power state transition OIDs, handler will acquire power control by itself - */ - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidSetHandler, TRUE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - } -#endif - - return status; -} - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a used to query driver's config wapi mode or not -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* -* \retval TRUE for use wapi mode -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryWapiMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rWifiVar.rConnSettings.fgWapiMode; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to Promiscuous Mode. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnablePromiscuousMode Enable/ disable RX Promiscuous Mode. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ) -{ - ASSERT(prAdapter); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to allow to receive -* broadcast address packets. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ) -{ - ASSERT(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to send out CMD_NIC_POWER_CTRL command packet -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] ucPowerMode refer to CMD/EVENT document -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ) -{ - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - /* 1. Prepare CMD */ - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL))); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - /* 2.1 increase command sequence number */ - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - /* 2.2 Setup common CMD Info Packet */ - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_NIC_POWER_CTRL; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_NIC_POWER_CTRL); - - /* 2.3 Setup WIFI_CMD_T */ - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - kalMemZero(prWifiCmd->aucBuffer, sizeof(CMD_NIC_POWER_CTRL)); - ((P_CMD_NIC_POWER_CTRL)(prWifiCmd->aucBuffer))->ucPowerMode = ucPowerMode; - - /* 3. Issue CMD for entering specific power mode */ - ucTC = TC4_INDEX; - - while(1) { - // 3.0 Removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - status = WLAN_STATUS_FAILURE; - break; - } - - // 3.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - status = WLAN_STATUS_FAILURE; - break; - } - else { - continue; - } - } - - // 3.2 Send CMD Info Packet - if (nicTxCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to transmit CMD_NIC_POWER_CTRL command\n")); - status = WLAN_STATUS_FAILURE; - } - - break; - }; - - // 4. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - // 5. Add flag - if(ucPowerMode == 1) { - prAdapter->fgIsEnterD3ReqIssued = TRUE; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to check if it is RF test mode and -* the OID is allowed to be called or not -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerAllowedInRFTest; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerAllowedInRFTest = apfnOidSetHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidSetHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerAllowedInRFTest = apfnOidQueryHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidQueryHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerAllowedInRFTest[i] == pfnOidHandler) { - return TRUE; - } - } - - return FALSE; -} - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image in an aggregated way -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4PktCnt, u4Offset, u4Length; - UINT_32 u4TotalLength; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - - pucOutputBuf = prAdapter->rTxCtrl.pucTxCoalescingBufPtr; - - DEBUGFUNC("wlanImageSectionDownloadAggregated"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and Pre-fill Headers - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->ucEtherTypeOffset = 0; - prInitHifTxHeader->ucCSflags = 0; - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - - // 4. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - - // 5.0 reset loop control variable - u4TotalLength = 0; - u4Offset = u4PktCnt = 0; - - // 5.1 main loop for maximize transmission count per access - while(u4Offset < u4ImgSecSize) { - if(nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_SUCCESS) { - // 5.1.1 calculate u4Length - if(u4Offset + CMD_PKT_SIZE_FOR_IMAGE < u4ImgSecSize) { - u4Length = CMD_PKT_SIZE_FOR_IMAGE; - } - else { - u4Length = u4ImgSecSize - u4Offset; - } - - // 5.1.1 increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5.1.2 update HIF TX hardware header - prInitHifTxHeader->u2TxByteCount = ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4Length); - - // 5.1.3 fill command header - prInitCmdDownloadBuf->u4Address = u4DestAddr + u4Offset; - prInitCmdDownloadBuf->u4Length = u4Length; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf + u4Offset, u4Length); - - // 5.1.4.1 copy header to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, - (PVOID)prCmdInfo->pucInfoBuffer, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF)); - - // 5.1.4.2 copy payload to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength + sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF), - pucImgSecBuf + u4Offset, - u4Length); - - // 5.1.4.3 update length and other variables - u4TotalLength += ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4Length); - u4Offset += u4Length; - u4PktCnt++; - - if(u4Offset < u4ImgSecSize) { - continue; - } - } - else if(u4PktCnt == 0) { - /* no resource, so get some back */ - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - } - - if(u4PktCnt != 0) { - // start transmission - HAL_WRITE_TX_PORT(prAdapter, - 0, - u4TotalLength, - (PUINT_8)pucOutputBuf, - prAdapter->u4CoalescingBufCachedSize); - - // reset varaibles - u4PktCnt = 0; - u4TotalLength = 0; - } - } - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #else - #error "Only MT6620/MT6628 supports firmware download in an aggregated way" - - return WLAN_STATUS_FAILURE; - - #endif -} - - #endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4ImgSecSize); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4ImgSecSize; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4Address = u4DestAddr; - prInitCmdDownloadBuf->u4Length = u4ImgSecSize; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf, u4ImgSecSize); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_DOWNLOAD_ACK - | DOWNLOAD_BUF_ACK_OPTION // ACK needed - #endif - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - kalMemCopy(prInitCmdDownloadBuf->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 6. Send FW_Download command - while(1) { - // 6.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 6.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - #if CFG_ENABLE_FW_DOWNLOAD_ACK - // 7. Wait for INIT_EVENT_ID_CMD_RESULT - u4Status = wlanImageSectionDownloadStatus(prAdapter, ucCmdSeqNum); - #endif - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #elif defined(MT5931) - - UINT_32 i, u4Value; - P_HIF_HW_TX_HEADER_T prHifTxHeader; - - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - DBGLOG(INIT, TRACE, ("Destination: 0x%08X / Length: 0x%08X\n", u4DestAddr, u4ImgSecSize)); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Use TX coalescing buffer - prHifTxHeader = (P_HIF_HW_TX_HEADER_T) prAdapter->pucCoalescingBufCached; - - // 2. Setup HIF_TX_HEADER - prHifTxHeader->u2TxByteCount = (UINT_16)(ALIGN_4(sizeof(HIF_HW_TX_HEADER_T) + u4ImgSecSize)); - prHifTxHeader->ucEtherTypeOffset = 0; - prHifTxHeader->ucCSflags = 0; - - // 3. Copy payload - kalMemCopy(prHifTxHeader->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 3.1 add 4-bytes zero tail - kalMemZero(&(prHifTxHeader->aucBuffer[ALIGN_4(u4ImgSecSize)]), sizeof(HIF_HW_TX_HEADER_T)); - - // 4. Poll til FWDL_RDY = 1 - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_FWDLSR, &u4Value); - - if (u4Value & FWDLSR_FWDL_RDY) { - DBGLOG(INIT, TRACE, ("FWDL_RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for FWDL_RDY: Timeout (0x%08X)\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - // 5. Send firmware - HAL_PORT_WR(prAdapter, - MCR_FWDLDR, - prHifTxHeader->u2TxByteCount, - (PUINT_8)prHifTxHeader, - prAdapter->u4CoalescingBufCachedSize); - - return u4Status; - - #endif -} - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm previously firmware download is done without error -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR)]; - UINT_32 u4RxPktLength; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_PENDING_ERROR prEventPendingError; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanImageQueryStatus"); - - // 1. Allocate CMD Info Packet and it Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, sizeof(INIT_HIF_TX_HEADER_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T)); - prCmdInfo->u2InfoBufLen = sizeof(INIT_HIF_TX_HEADER_T); - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_QUERY_PENDING_ERROR; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Send command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - // 6. Wait for INIT_EVENT_ID_PENDING_ERROR - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("Bus error(%d)/Card removed(%d)\n", fgIsBusAccessFailed, kalIsCardRemoved(prAdapter->prGlueInfo))); - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("No RX response\n")); - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_PENDING_ERROR) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("EVENT-ID Mismatch: %d\n", prInitHifRxHeader->rInitWifiEvent.ucEID)); - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("SEQ-NUM Mismatch: %d (expected: %d)\n", prInitHifRxHeader->rInitWifiEvent.ucSeqNum, ucCmdSeqNum)); - } - else { - prEventPendingError = (P_INIT_EVENT_PENDING_ERROR) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventPendingError->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("ERROR CODE: %d\n", prEventCmdResult->ucStatus)); - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - // 7. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm the status of -* previously downloaded firmware scatter -* -* @param prAdapter Pointer to the Adapter structure. -* ucCmdSeqNum Sequence number of previous firmware scatter -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ) -{ - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT)]; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_CMD_RESULT prEventCmdResult; - UINT_32 u4RxPktLength; - WLAN_STATUS u4Status; - - ASSERT(prAdapter); - - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("Bus error(%d)/Card removed(%d)\n", fgIsBusAccessFailed, kalIsCardRemoved(prAdapter->prGlueInfo))); - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("No RX response\n")); - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_CMD_RESULT) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("EVENT-ID Mismatch: %d\n", prInitHifRxHeader->rInitWifiEvent.ucEID)); - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("SEQ-NUM Mismatch: %d\n", prInitHifRxHeader->rInitWifiEvent.ucSeqNum)); - } - else { - prEventCmdResult = (P_INIT_EVENT_CMD_RESULT) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventCmdResult->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR, ("ERROR CODE: %d\n", prEventCmdResult->ucStatus)); - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - return u4Status; -} - - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to start FW normal operation. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_WIFI_START prInitCmdWifiStart; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanConfigWifiFunc"); - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START); - - // 2. Always use TC0 - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_WIFI_START; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - prInitCmdWifiStart = (P_INIT_CMD_WIFI_START)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdWifiStart->u4Override = (fgEnable == TRUE ? 1 : 0); - prInitCmdWifiStart->u4Address = u4StartAddress; - - // 5. Seend WIFI start command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit WIFI start command\n")); - } - - break; - }; - - // 6. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate CRC32 checksum -* -* @param buf Pointer to the data. -* @param len data length -* -* @return crc32 value -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len) -{ - UINT_32 i, crc32 = 0xFFFFFFFF; - const UINT_32 crc32_ccitt_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d }; - - for (i = 0; i < len; i++) - crc32 = crc32_ccitt_table[(crc32 ^ buf[i]) & 0xff] ^ (crc32 >> 8); - - return ( ~crc32 ); -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to process queued RX packets -* -* @param prAdapter Pointer to the Adapter structure. -* prSwRfbListHead Pointer to head of RX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - P_SW_RFB_T prSwRfb, prNextSwRfb; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(prSwRfbListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prSwRfb = prSwRfbListHead; - - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - switch(prSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prSwRfb); - break; - - default: - break; - } - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to purge queued TX packets -* by indicating failure to OS and returned to free list -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfoListHead Pointer to head of TX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - nicTxReturnMsduInfo(prAdapter, prMsduInfoListHead); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the OID handler needs timeout -* -* @param prAdapter Pointer to the Adapter structure. -* pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOTimeoutCheck; - UINT_32 i; - UINT_32 u4NumOfElem; - - apfnOidHandlerWOTimeoutCheck = apfnOidWOTimeoutCheck; - u4NumOfElem = sizeof(apfnOidWOTimeoutCheck) / sizeof(PFN_OID_HANDLER_FUNC); - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOTimeoutCheck[i] == pfnOidHandler) { - return FALSE; - } - } - - // set timer if need timeout check - //cnmTimerStartTimer(prAdapter, - // &(prAdapter->rOidTimeoutTimer), - // 1000); - cnmTimerStartTimer(prAdapter, - &(prAdapter->rOidTimeoutTimer), - 2000); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to clear any pending OID timeout check -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerStopTimer(prAdapter, &(prAdapter->rOidTimeoutTimer)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to set up the MCUSYS's OSC stable time -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ) -{ - UINT_8 ucCmdSeqNum = 0; - P_CMD_INFO_T prCmdInfo = NULL; - P_WIFI_CMD_T prWifiCmd = NULL; - P_CMD_MCU_LP_PARAM_T prMcuSetOscCmd = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_MCU_LP_PARAM_T cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_SET_OSC; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_MCU_LP_PARAM_T); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_MCU_LP_PARAM_T - prMcuSetOscCmd = (P_CMD_MCU_LP_PARAM_T)(prWifiCmd->aucBuffer); - prMcuSetOscCmd->u2OscStableTime = u2OscStableTime; - - status = wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return status; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update network address in firmware domain -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_FAILURE The request could not be processed -* WLAN_STATUS_PENDING The request has been queued for later processing -* WLAN_STATUS_SUCCESS The request has been processed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ) -{ - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - PARAM_MAC_ADDRESS rMacAddr; - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BASIC_CONFIG prCmdBasicConfig; - UINT_32 u4SysTime; - - DEBUGFUNC("wlanUpdateNetworkAddress"); - - ASSERT(prAdapter); - - if(kalRetrieveNetworkAddress(prAdapter->prGlueInfo, &rMacAddr) == FALSE - || IS_BMCAST_MAC_ADDR(rMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, rMacAddr)) { - // eFUSE has a valid address, don't do anything - if(prAdapter->fgIsEmbbededMacAddrValid == TRUE) { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using embedded MAC address")); -#endif - return WLAN_STATUS_SUCCESS; - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using dynamically generated MAC address")); -#endif - // dynamic generate - u4SysTime = (UINT_32) kalGetTimeTick(); - - rMacAddr[0] = 0x00; - rMacAddr[1] = 0x08; - rMacAddr[2] = 0x22; - - kalMemCopy(&rMacAddr[3], &u4SysTime, 3); - } - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using host-supplied MAC address")); -#endif - } - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_BASIC_CONFIG - prCmdBasicConfig = (P_CMD_BASIC_CONFIG)(prWifiCmd->aucBuffer); - kalMemCopy(&(prCmdBasicConfig->rMyMacAddr), &rMacAddr, PARAM_MAC_ADDR_LEN); - prCmdBasicConfig->ucNative80211 = 0; - prCmdBasicConfig->rCsumOffload.u2RxChecksum = 0; - prCmdBasicConfig->rCsumOffload.u2TxChecksum = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(0); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(0); -#endif - - if(wlanSendCommand(prAdapter, prCmdInfo) == WLAN_STATUS_RESOURCES) { - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryAddress; - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return WLAN_STATUS_PENDING; - } - else { - nicCmdEventQueryAddress(prAdapter, prCmdInfo, (PUINT_8)prCmdBasicConfig); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return WLAN_STATUS_SUCCESS; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the device is in RF test mode -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->fgTestMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to identify 802.1x and Bluetooth-over-Wi-Fi -* security frames, and queued into command queue for strict ordering -* due to 802.1x frames before add-key OIDs are not to be encrypted -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prPacket Pointer of native packet -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ) -{ - UINT_8 ucPriorityParam; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - P_CMD_INFO_T prCmdInfo; - - ASSERT(prAdapter); - ASSERT(prPacket); - - if (kalQoSFrameClassifierAndPacketInfo(prAdapter->prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == TRUE) { - if(fgIs1x == FALSE) { - return FALSE; - } - else { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - DBGLOG(RSN, INFO, ("T1X len=%d\n", u4PacketLen)); - - if (prCmdInfo) { - P_STA_RECORD_T prStaRec; - // fill arrival time - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_SECURITY_FRAME; - prCmdInfo->u2InfoBufLen = (UINT_16)u4PacketLen; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = prPacket; -#if 0 - prCmdInfo->ucStaRecIndex = qmGetStaRecIdx(prAdapter, - aucEthDestAddr, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType); -#endif - prStaRec = cnmGetStaRecByAddress(prAdapter, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType, - aucEthDestAddr); - if(prStaRec) { - prCmdInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prCmdInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - } - - prCmdInfo->eNetworkType = (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType; - prCmdInfo->pfCmdDoneHandler = wlanSecurityFrameTxDone; - prCmdInfo->pfCmdTimeoutHandler = wlanSecurityFrameTxTimeout; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return TRUE; - } - else { - ASSERT(0); - return FALSE; - } - } - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has been sent to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* @param pucEventBuf meaningless, only for API compatibility -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - if (prCmdInfo->eNetworkType == NETWORK_TYPE_AIS_INDEX && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure) { - P_STA_RECORD_T prSta = cnmGetStaRecByIndex(prAdapter, prCmdInfo->ucStaRecIndex); - if (prSta) { - kalMsleep(10); - secFsmEventEapolTxDone(prAdapter, prSta, TX_RESULT_SUCCESS); - } - } - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_SUCCESS); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has failed sending to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); -} - -void sortAvgRssi(void); -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called before AIS is starting a new scan -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgKeepCurrOne = FALSE; - UINT_32 i; - - ASSERT(prAdapter); - -#if RSSI_ENHANCE - sortAvgRssi(); -#endif - - // clear scanning result - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - fgKeepCurrOne = TRUE; - - if(i != 0) { - // copy structure - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[0]), - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] != &(prAdapter->rWlanInfo.aucScanIEBuf[0])) { - // move IEs to head - kalMemCopy(prAdapter->rWlanInfo.aucScanIEBuf, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // modify IE pointer - prAdapter->rWlanInfo.apucScanResultIEs[0] = &(prAdapter->rWlanInfo.aucScanIEBuf[0]); - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[0] = NULL; - } - - break; - } - } - } - - if(fgKeepCurrOne == TRUE) { - prAdapter->rWlanInfo.u4ScanResultNum = 1; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = - ALIGN_4(prAdapter->rWlanInfo.arScanResult[0].u4IELength); - } - else { - prAdapter->rWlanInfo.u4ScanResultNum = 0; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when AIS received a beacon timeout event -* -* @param prAdapter Pointer of Adapter Data Structure -* @param arBSSID MAC address of the specified BSS -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ) -{ - UINT_32 i, j, u4IELength = 0, u4IEMoveLength; - PUINT_8 pucIEPtr; - - ASSERT(prAdapter); - - // clear scanning result - i = 0; - while(1) { - if(i >= prAdapter->rWlanInfo.u4ScanResultNum) { - break; - } - - if(EQUAL_MAC_ADDR(arBSSID, prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - // backup current IE length - u4IELength = ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4IELength); - pucIEPtr = prAdapter->rWlanInfo.apucScanResultIEs[i]; - - // removed from middle - for(j = i + 1 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[j-1]), - &(prAdapter->rWlanInfo.arScanResult[j]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - prAdapter->rWlanInfo.apucScanResultIEs[j-1] = - prAdapter->rWlanInfo.apucScanResultIEs[j]; - } - - prAdapter->rWlanInfo.u4ScanResultNum--; - - // remove IE buffer if needed := move rest of IE buffer - if(u4IELength > 0) { - u4IEMoveLength = prAdapter->rWlanInfo.u4ScanIEBufferUsage - - (((UINT_32)pucIEPtr) + u4IELength - ((UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])))); - - kalMemCopy(pucIEPtr, - (PUINT_8)(((UINT_32)pucIEPtr) + u4IELength), - u4IEMoveLength); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4IELength; - - // correction of pointers to IE buffer - for(j = 0 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - if(prAdapter->rWlanInfo.apucScanResultIEs[j] > pucIEPtr) { - prAdapter->rWlanInfo.apucScanResultIEs[j] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[j]) - u4IELength); - } - } - } - } - - i++; - } - - return; -} - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction ( - IN P_ADAPTER_T prAdapter - ) -{ -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(FALSE); - return; - } - - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prMsgFuncSwitch->fgIsFuncOn = TRUE; - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return; -} - -VOID -wlanEnableATGO ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_MSG_P2P_CONNECTION_REQUEST_T prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - if (!prMsgConnReq) { - ASSERT(FALSE); - return; - } - - prMsgConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - /*=====Param Modified for test=====*/ - COPY_MAC_ADDR(prMsgConnReq->aucDeviceID, aucTargetDeviceID); - prMsgConnReq->fgIsTobeGO = TRUE; - prMsgConnReq->fgIsPersistentGroup = FALSE; - - /*=====Param Modified for test=====*/ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgConnReq, - MSG_SEND_METHOD_BUF); - - return; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve permanent address from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryPermanentAddress"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_BASIC_CONFIG) { - return WLAN_STATUS_FAILURE; - } - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(prEvent->aucBuffer); - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucPermanentAddress, &(prEventBasicConfig->rMyMacAddr)); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, &(prEventBasicConfig->rMyMacAddr)); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve NIC capability from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_NIC_CAPABILITY prEventNicCapability; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryNicCapability"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_GET_NIC_CAPABILITY; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = 0; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_NIC_CAPABILITY) { - return WLAN_STATUS_FAILURE; - } - - prEventNicCapability = (P_EVENT_NIC_CAPABILITY)(prEvent->aucBuffer); - - prAdapter->rVerInfo.u2FwProductID = prEventNicCapability->u2ProductID; - prAdapter->rVerInfo.u2FwOwnVersion = prEventNicCapability->u2FwVersion; - prAdapter->rVerInfo.u2FwPeerVersion = prEventNicCapability->u2DriverVersion; - prAdapter->fgIsHw5GBandDisabled = (BOOLEAN)prEventNicCapability->ucHw5GBandDisabled; - prAdapter->fgIsEepromUsed = (BOOLEAN)prEventNicCapability->ucEepromUsed; - prAdapter->fgIsEfuseValid = (BOOLEAN)prEventNicCapability->ucEfuseValid; - prAdapter->fgIsEmbbededMacAddrValid = (BOOLEAN)prEventNicCapability->ucMacAddrValid; - - -#if CFG_ENABLE_CAL_LOG - DBGLOG(INIT, INFO, (" RF CAL FAIL = (%d),BB CAL FAIL = (%d)\n", - prEventNicCapability->ucRfCalFail ,prEventNicCapability->ucBbCalFail )); -#endif - return WLAN_STATUS_SUCCESS; -} - -#ifdef MT6628 -static INT_32 wlanChangeCodeWord(INT_32 au4Input){ - - UINT_16 i; -#if TXPWR_USE_PDSLOPE - CODE_MAPPING_T arCodeTable[] = { - {0X100, -40}, - {0X104, -35}, - {0X128, -30}, - {0X14C, -25}, - {0X170, -20}, - {0X194, -15}, - {0X1B8, -10}, - {0X1DC, - 5}, - {0 , 0}, - {0X24 , 5}, - {0X48 , 10}, - {0X6C , 15}, - {0X90 , 20}, - {0XB4 , 25}, - {0XD8 , 30}, - {0XFC , 35}, - {0XFF , 40}, - - }; -#else - CODE_MAPPING_T arCodeTable[] = { - {0X100, 0x80}, - {0X104, 0x80}, - {0X128, 0x80}, - {0X14C, 0x80}, - {0X170, 0x80}, - {0X194, 0x94}, - {0X1B8, 0XB8}, - {0X1DC, 0xDC}, - {0 , 0}, - {0X24 , 0x24}, - {0X48 , 0x48}, - {0X6C , 0x6c}, - {0X90 , 0x7F}, - {0XB4 , 0x7F}, - {0XD8 , 0x7F}, - {0XFC , 0x7F}, - {0XFF , 0x7F}, - - }; -#endif - - for (i = 0; i < sizeof(arCodeTable) / sizeof(CODE_MAPPING_T); i++) { - - if (arCodeTable[i].u4RegisterValue == au4Input){ - return arCodeTable[i] .u4TxpowerOffset; - } - } - - - return 0; -} -#endif -#if TXPWR_USE_PDSLOPE - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_CMD_ACCESS_REG prCmdMcrQuery; - ASSERT(prAdapter); - - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_ACCESS_REG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_ACCESS_REG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - kalMemCopy(prWifiCmd->aucBuffer, prMcrRdInfo, sizeof(CMD_ACCESS_REG)); - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - - if(prEvent->ucEID != EVENT_ID_ACCESS_REG) { - return WLAN_STATUS_FAILURE; - } - - prCmdMcrQuery = (P_CMD_ACCESS_REG)(prEvent->aucBuffer); - prMcrRdInfo->u4McrOffset = prCmdMcrQuery->u4Address; - prMcrRdInfo->u4McrData = prCmdMcrQuery->u4Data; - - return WLAN_STATUS_SUCCESS; -} - -static INT_32 wlanIntRound(INT_32 au4Input) -{ - - - if (au4Input >= 0){ - if((au4Input%10) == 5){ - au4Input = au4Input + 5; - return au4Input; - } - } - - if (au4Input < 0){ - if((au4Input%10) == -5){ - au4Input = au4Input - 5; - return au4Input; - } - } - - return au4Input; -} - -static INT_32 wlanCal6628EfuseForm(IN P_ADAPTER_T prAdapter,INT_32 au4Input){ - - PARAM_MCR_RW_STRUC_T rMcrRdInfo; - INT_32 au4PdSlope,au4TxPwrOffset,au4TxPwrOffset_Round; - INT_8 auTxPwrOffset_Round; - - rMcrRdInfo.u4McrOffset = 0x60205c68; - rMcrRdInfo.u4McrData = 0; - au4TxPwrOffset = au4Input; - wlanQueryPdMcr(prAdapter,&rMcrRdInfo); - - au4PdSlope = (rMcrRdInfo.u4McrData) & BITS(0,6); - au4TxPwrOffset_Round = wlanIntRound((au4TxPwrOffset*au4PdSlope))/10; - - au4TxPwrOffset_Round = -au4TxPwrOffset_Round; - - if(au4TxPwrOffset_Round < -128) { - au4TxPwrOffset_Round = 128; - } - else if (au4TxPwrOffset_Round < 0){ - au4TxPwrOffset_Round += 256; - } - else if (au4TxPwrOffset_Round > 127){ - au4TxPwrOffset_Round = 127; - } - - auTxPwrOffset_Round = (UINT8) au4TxPwrOffset_Round ; - - return au4TxPwrOffset_Round; -} - -#endif - -#ifdef MT6628 -static VOID wlanChangeNvram6620to6628(PUINT_8 pucEFUSE){ - - - #define EFUSE_CH_OFFSET1_L_MASK_6620 BITS(0,8) - #define EFUSE_CH_OFFSET1_L_SHIFT_6620 0 - #define EFUSE_CH_OFFSET1_M_MASK_6620 BITS(9,17) - #define EFUSE_CH_OFFSET1_M_SHIFT_6620 9 - #define EFUSE_CH_OFFSET1_H_MASK_6620 BITS(18,26) - #define EFUSE_CH_OFFSET1_H_SHIFT_6620 18 - #define EFUSE_CH_OFFSET1_VLD_MASK_6620 BIT(27) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_6620 27 - - #define EFUSE_CH_OFFSET1_L_MASK_5931 BITS(0,7) - #define EFUSE_CH_OFFSET1_L_SHIFT_5931 0 - #define EFUSE_CH_OFFSET1_M_MASK_5931 BITS(8,15) - #define EFUSE_CH_OFFSET1_M_SHIFT_5931 8 - #define EFUSE_CH_OFFSET1_H_MASK_5931 BITS(16,23) - #define EFUSE_CH_OFFSET1_H_SHIFT_5931 16 - #define EFUSE_CH_OFFSET1_VLD_MASK_5931 BIT(24) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_5931 24 - #define EFUSE_ALL_CH_OFFSET1_MASK_5931 BITS(25,27) - #define EFUSE_ALL_CH_OFFSET1_SHIFT_5931 25 - - - - - INT_32 au4ChOffset; - INT_16 au2ChOffsetL,au2ChOffsetM,au2ChOffsetH; - - - au4ChOffset = *(UINT_32*)(pucEFUSE + 72); - - if((au4ChOffset & EFUSE_CH_OFFSET1_VLD_MASK_6620) && ((*(UINT_32*)(pucEFUSE + 28)) == 0)) { - - - au2ChOffsetL = ((au4ChOffset & EFUSE_CH_OFFSET1_L_MASK_6620) >> - EFUSE_CH_OFFSET1_L_SHIFT_6620); - - au2ChOffsetM = ((au4ChOffset & EFUSE_CH_OFFSET1_M_MASK_6620) >> - EFUSE_CH_OFFSET1_M_SHIFT_6620); - - au2ChOffsetH = ((au4ChOffset & EFUSE_CH_OFFSET1_H_MASK_6620) >> - EFUSE_CH_OFFSET1_H_SHIFT_6620); - - au2ChOffsetL = wlanChangeCodeWord(au2ChOffsetL); - au2ChOffsetM = wlanChangeCodeWord(au2ChOffsetM); - au2ChOffsetH = wlanChangeCodeWord(au2ChOffsetH); - - au4ChOffset = 0; - au4ChOffset |= *(UINT_32*)(pucEFUSE + 72) - >> (EFUSE_CH_OFFSET1_VLD_SHIFT_6620 - EFUSE_CH_OFFSET1_VLD_SHIFT_5931 )& EFUSE_CH_OFFSET1_VLD_MASK_5931 ; - - - - au4ChOffset |= ((((UINT_32)au2ChOffsetL) << EFUSE_CH_OFFSET1_L_SHIFT_5931) & EFUSE_CH_OFFSET1_L_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetM) << EFUSE_CH_OFFSET1_M_SHIFT_5931) & EFUSE_CH_OFFSET1_M_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetH) << EFUSE_CH_OFFSET1_H_SHIFT_5931) & EFUSE_CH_OFFSET1_H_MASK_5931); - - *((INT_32 *)((pucEFUSE + 28))) = au4ChOffset ; - - - - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to load manufacture data from NVRAM -* if available and valid -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prRegInfo Pointer of REG_INFO_T -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_RDD_CH_T rRddParam; -#endif - - ASSERT(prAdapter); - - /* 1. Version Check */ - kalGetConfigurationVersion(prAdapter->prGlueInfo, - &(prAdapter->rVerInfo.u2Part1CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part1CfgPeerVersion), - &(prAdapter->rVerInfo.u2Part2CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part2CfgPeerVersion)); - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - if(CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION) { - return WLAN_STATUS_FAILURE; - } -#endif - - // MT6620 E1/E2 would be ignored directly - if(prAdapter->rVerInfo.u2Part1CfgOwnVersion == 0x0001) { - prRegInfo->ucTxPwrValid = 1; - } - else { - /* 2. Load TX power gain parameters if valid */ - if(prRegInfo->ucTxPwrValid != 0) { - // send to F/W - nicUpdateTxPower(prAdapter, (P_CMD_TX_PWR_T)(&(prRegInfo->rTxPwr))); - } - } - - /* 3. Check if needs to support 5GHz */ - if(prRegInfo->ucEnable5GBand) { - // check if it is disabled by hardware - if(prAdapter->fgIsHw5GBandDisabled - || prRegInfo->ucSupport5GBand == 0) { - prAdapter->fgEnable5GBand = FALSE; - } - else { - prAdapter->fgEnable5GBand = TRUE; - } - } - else { - prAdapter->fgEnable5GBand = FALSE; - } - - /* 4. Send EFUSE data */ -#if defined(MT6628) - wlanChangeNvram6620to6628(prRegInfo->aucEFUSE); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PHY_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PHY_PARAM_T), - (PUINT_8)(prRegInfo->aucEFUSE), - NULL, - 0); - -#if CFG_SUPPORT_RDD_TEST_MODE - rRddParam.ucRddTestMode = (UINT_8) prRegInfo->u4RddTestMode; - rRddParam.ucRddShutCh = (UINT_8) prRegInfo->u4RddShutFreq; - rRddParam.ucRddStartCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStartFreq); - rRddParam.ucRddStopCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStopFreq); - rRddParam.ucRddDfs = (UINT_8) prRegInfo->u4RddDfs; - prAdapter->ucRddStatus = 0; - nicUpdateRddTestMode(prAdapter, (P_CMD_RDD_CH_T)(&rRddParam)); -#endif - - /* 5. Get 16-bits Country Code and Bandwidth */ - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) prRegInfo->au2CountryCode[0]) << 8) | - (((UINT_16) prRegInfo->au2CountryCode[1]) & BITS(0,7)); - -#if 0 /* Bandwidth control will be controlled by GUI. 20110930 - * So ignore the setting from registry/NVRAM - */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prRegInfo->uc2G4BwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prRegInfo->uc5GBwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; -#endif - - /* 6. Set domain and channel information to chip */ - rlmDomainSendCmd(prAdapter, FALSE); - - /* 7. set band edge tx power if available */ - if(prRegInfo->fg2G4BandEdgePwrUsed) { - CMD_EDGE_TXPWR_LIMIT_T rCmdEdgeTxPwrLimit; - - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrCCK - = prRegInfo->cBandEdgeMaxPwrCCK; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM20 - = prRegInfo->cBandEdgeMaxPwrOFDM20; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM40 - = prRegInfo->cBandEdgeMaxPwrOFDM40; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_EDGE_TXPWR_LIMIT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_EDGE_TXPWR_LIMIT_T), - (PUINT_8)&rCmdEdgeTxPwrLimit, - NULL, - 0); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check -* Media Stream Mode is set to non-default value or not, -* and clear to default value if above criteria is met -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return TRUE -* The media stream mode was non-default value and has been reset -* FALSE -* The media stream mode is default value -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode != 0) { - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - - return TRUE; - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending timer has expired -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerDoTimeOutCheck(prAdapter); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending mailbox message -* to be handled -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - for(i = 0 ; i < MBOX_ID_TOTAL_NUM ; i++) { - mboxRcvAllMsg(prAdapter , (ENUM_MBOX_ID_T)i); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to enqueue a single TX packet into CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* prNativePacket Pointer of Native Packet -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_RESOURCES -* WLAN_STATUS_INVALID_PACKET -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo == NULL) { - return WLAN_STATUS_RESOURCES; - } - else { - prMsduInfo->eSrc = TX_PACKET_OS; - - if(nicTxFillMsduInfo(prAdapter, - prMsduInfo, - prNativePacket) == FALSE) { // packet is not extractable - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_INVALID_PACKET); - - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - - return WLAN_STATUS_INVALID_PACKET; - } - else { - // enqueue to QM - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to flush pending TX packets in CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return nicTxFlush(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function sends pending MSDU_INFO_T to MT6620 -* -* @param prAdapter Pointer to the Adapter structure. -* @param pfgHwAccess Pointer for tracking LP-OWN status -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(pfgHwAccess); - - // <1> dequeue packet by txDequeuTxPackets() - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmDequeueTxPackets(prAdapter, &prTxCtrl->rTc); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - /* <2> Acquire LP-OWN if necessary */ - if(*pfgHwAccess == FALSE) { - *pfgHwAccess = TRUE; - - wlanAcquirePowerControl(prAdapter); - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - // <3> send packets - nicTxMsduInfoList(prAdapter, prMsduInfo); - - // <4> update TC by txAdjustTcQuotas() - nicTxAdjustTcq(prAdapter); - } - else { - wlanProcessQueuedMsduInfo(prAdapter, prMsduInfo); - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to acquire power control from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to release power control to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to report currently pending TX frames count -* (command packets are not included) -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return number of pending TX frames -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_32 u4Num; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - u4Num = kalGetTxPendingFrameCount(prAdapter->prGlueInfo) + (UINT_32)(prTxCtrl->i4PendingFwdFrameCount); - - return u4Num; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to report current ACPI state -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -*/ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rAcpiState; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to update current ACPI state only -* -* @param prAdapter Pointer of Adapter Data Structure -* @param ePowerState ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ) -{ - ASSERT(prAdapter); - ASSERT(ePowerState <= ACPI_STATE_D3); - - prAdapter->rAcpiState = ePowerState; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to query ECO version from HIFSYS CR -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(nicVerifyChipID(prAdapter) == TRUE) { - return (prAdapter->ucRevID + 1); - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to setting the default Tx Power configuration -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 i; - P_GLUE_INFO_T prGlueInfo = prAdapter->prGlueInfo; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prGlueInfo); - - prTxpwr = &prGlueInfo->rTxPwr; - - prTxpwr->c2GLegacyStaPwrOffset = 0; - prTxpwr->c2GHotspotPwrOffset = 0; - prTxpwr->c2GP2pPwrOffset = 0; - prTxpwr->c2GBowPwrOffset = 0; - prTxpwr->c5GLegacyStaPwrOffset = 0; - prTxpwr->c5GHotspotPwrOffset = 0; - prTxpwr->c5GP2pPwrOffset = 0; - prTxpwr->c5GBowPwrOffset = 0; - prTxpwr->ucConcurrencePolicy = 0; - for (i=0; i<3;i++) - prTxpwr->acReserved1[i] = 0; - - for (i=0; i<14;i++) - prTxpwr->acTxPwrLimit2G[i] = 63; - - for (i=0; i<4;i++) - prTxpwr->acTxPwrLimit5G[i] = 63; - - for (i=0; i<2;i++) - prTxpwr->acReserved2[i] = 0; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* set preferred band configuration corresponding to network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eBand Given band -* @param eNetTypeIndex Given Network Type -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - /* 1. set prefer band according to network type */ - prAdapter->aePreferBand[eNetTypeIndex] = eBand; - - /* 2. remove buffered BSS descriptors correspondingly */ - if(eBand == BAND_2G4) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_5G, eNetTypeIndex); - } - else if(eBand == BAND_5G) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_2G4, eNetTypeIndex); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* get channel information corresponding to specified network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eNetTypeIndex Given Network Type -* -* @return channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - return prBssInfo->ucPrimaryChannel; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* check unconfigured system properties and generate related message on -* scan list to notify users -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ) -{ -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) || (CFG_SW_NVRAM_VERSION_CHECK == 1) - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - const UINT_8 aucBCAddr[] = BC_MAC_ADDR; - BOOLEAN fgIsConfExist = TRUE; - BOOLEAN fgGenErrMsg = FALSE; - P_REG_INFO_T prRegInfo = NULL; - P_WLAN_BEACON_FRAME_T prBeacon = NULL; - P_IE_SSID_T prSsid = NULL; - UINT_32 u4ErrCode = 0; - UINT_8 aucErrMsg[32]; - PARAM_SSID_T rSsid; - PARAM_802_11_CONFIG_T rConfiguration; - PARAM_RATES_EX rSupportedRates; -#endif - - DEBUGFUNC("wlanCheckSystemConfiguration"); - - ASSERT(prAdapter); - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - fgIsConfExist = FALSE; - fgGenErrMsg = TRUE; - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - prRegInfo = kalGetConfiguration(prAdapter->prGlueInfo); - - if(fgIsConfExist == TRUE && - (CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION - || (prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) - || prRegInfo->ucTxPwrValid == 0)) { - fgGenErrMsg = TRUE; - } -#endif - - if(fgGenErrMsg == TRUE) { - prBeacon = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // initialization - kalMemZero(prBeacon, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // prBeacon initialization - prBeacon->u2FrameCtrl = MAC_FRAME_BEACON; - COPY_MAC_ADDR(prBeacon->aucDestAddr, aucBCAddr); - COPY_MAC_ADDR(prBeacon->aucSrcAddr, aucZeroMacAddr); - COPY_MAC_ADDR(prBeacon->aucBSSID, aucZeroMacAddr); - prBeacon->u2BeaconInterval = 100; - prBeacon->u2CapInfo = CAP_INFO_ESS; - - // prSSID initialization - prSsid = (P_IE_SSID_T)(&prBeacon->aucInfoElem[0]); - prSsid->ucId = ELEM_ID_SSID; - - // rConfiguration initialization - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = 100; - rConfiguration.u4ATIMWindow = 1; - rConfiguration.u4DSConfig = 2412; - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - // rSupportedRates initialization - kalMemZero(rSupportedRates, sizeof(PARAM_RATES_EX)); - } - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - #define NVRAM_ERR_MSG "NVRAM WARNING: Err = 0x01" - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - NVRAM_ERR_MSG, - strlen(NVRAM_ERR_MSG)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, NVRAM_ERR_MSG, strlen(NVRAM_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - #define VER_ERR_MSG "NVRAM WARNING: Err = 0x%02X" - if(fgIsConfExist == TRUE) { - if((CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION)) { - u4ErrCode |= NVRAM_ERROR_VERSION_MISMATCH; - } - - - if(prRegInfo->ucTxPwrValid == 0) { - u4ErrCode |= NVRAM_ERROR_INVALID_TXPWR; - } - - if(prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) { - u4ErrCode |= NVRAM_ERROR_INVALID_MAC_ADDR; - } - - if(u4ErrCode != 0) { - sprintf(aucErrMsg, VER_ERR_MSG, (unsigned int)u4ErrCode); - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - aucErrMsg, - strlen(aucErrMsg)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, NVRAM_ERR_MSG, strlen(NVRAM_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } - } -#endif - - if(fgGenErrMsg == TRUE) { - cnmMemFree(prAdapter, prBeacon); - } - - return WLAN_STATUS_SUCCESS; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_oid.c b/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_oid.c deleted file mode 100755 index b0ae362ffc9f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_oid.c +++ /dev/null @@ -1,10979 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/wlan_oid.c#5 $ -*/ - -/*! \file wlanoid.c - \brief This file contains the WLAN OID processing routines of Windows driver for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_oid.c $ -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * using the wlanSendSetQueryCmd to set the tx power control cmd. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * change the set tx power cmd name. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 09 2011 george.huang - * [WCXRP00000871] [MT6620 Wi-Fi][FW] Include additional wakeup condition, which is by consequent DTIM unicast indication - * add XLOG for Set PS mode entry - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add RDD certification features. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 15 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * correct fifo full control from query to set operation for CTIA. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 17 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * add system config for CTIA. - * - * 08 15 2011 george.huang - * [MT6620 Wi-Fi][FW] handle TSF drift for connection detection - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 05 02 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Fix compile warning. - * - * 04 29 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * . - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * add more debug message - * - * 04 26 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Add rx path profiling. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 03 29 2011 puff.wen - * NULL - * Add chennel switch for stress test - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 24 2011 wh.su - * [WCXRP00000595] [MT6620 Wi-Fi][Driver] at CTIA indicate disconnect to make the ps profile can apply - * use disconnect event instead of ais abort for CTIA testing. - * - * 03 23 2011 george.huang - * [WCXRP00000586] [MT6620 Wi-Fi][FW] Modify for blocking absence request right after connected - * revise for CTIA power mode setting - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 15 2011 george.huang - * [WCXRP00000557] [MT6620 Wi-Fi] Support current consumption test mode commands - * Support current consumption measurement mode command - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 03 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the enter ctia test mode issue. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Update sigma CAPI for U-APSD setting - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 25 2011 cp.wu - * [WCXRP00000394] [MT6620 Wi-Fi][Driver] Count space needed for generating error message in scanning list into buffer size checking - * when doing size prechecking, check illegal MAC address as well - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * check if allow to switch to IBSS mode via concurrent module before setting to IBSS mode - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 04 2011 cp.wu - * [WCXRP00000342] [MT6620 Wi-Fi][Driver] show error code in scanning list when MAC address is not correctly configured in NVRAM - * show error code 0x10 when MAC address in NVRAM is not configured correctly. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 28 2010 george.huang - * [WCXRP00000232] [MT5931 Wi-Fi][FW] Modifications for updated HW power on sequence and related design - * support WMM-PS U-APSD AC assignment. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 16 2010 cp.wu - * [WCXRP00000268] [MT6620 Wi-Fi][Driver] correction for WHQL failed items - * correction for OID_802_11_NETWORK_TYPES_SUPPORTED handlers - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 21 2010 wh.su - * [WCXRP00000192] [MT6620 Wi-Fi][Driver] Fixed fail trying to build connection with Security AP while enable WAPI message check - * Not set the wapi mode while the wapi assoc info set non-wapi ie. - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 22 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * dos2unix conversion. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 yuche.tsai - * NULL - * Update SLT 5G Test Channel Set. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 06 2010 yuche.tsai - * NULL - * Update For SLT 5G Test Channel Selection Rule. - * - * 10 05 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Query buffer size needs to be enlarged due to result is filled in 4-bytes alignment boundary - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 10 04 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Extend result length to multiples of 4-bytes - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Update SLT due to API change of SCAN module. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 yuche.tsai - * NULL - * Refine SLT IO control handler. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 chinglan.wang - * NULL - * Modify the rescan condition. - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * upate params defined in CMD_SET_NETWORK_ADDRESS_LIST - * - * 08 04 2010 cp.wu - * NULL - * fix for check build WHQL testing: - * 1) do not assert query buffer if indicated buffer length is zero - * 2) sdio.c has bugs which cause freeing same pointer twice - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 08 04 2010 cp.wu - * NULL - * bypass u4FuncData for RF-Test query request as well. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 19 2010 wh.su - * - * modify the auth and encry status variable. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement SCAN-REQUEST oid as mailbox message dispatching. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for oid pmkid. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * simplify cmd packet sending for RF test and MCR access OIDs - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable radio even when STA is not associated. - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct 2 OID behaviour to meet WHQL requirement. - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct BSSID_LIST oid when radio if turned off. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable wlanoidSetNetworkAddress() temporally. - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * some OIDs should be DRIVER_CORE instead of GLUE_EXTENSION - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanoidSet802dot11PowerSaveProfile implementation. - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassocation support for wpa supplicant - * - * 05 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct return value. - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, still use parameter with current setting. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, generate a WZC-compatible invalid SSID. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * associate to illegal SSID when handling OID_802_11_DISASSOCIATE - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * 2) command sequence number is now increased atomically - * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_CONFIGURATION query for infrastructure mode. - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) remove unused spin lock declaration - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * (2) disable set Multicast address during atomic context - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve glue code portability - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * the frequency is used for adhoc connection only - * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * adding the check for pass WHQL test item. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 16 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * fixed some whql pre-test fail case. - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 24 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Don't needed to check the auth mode, WHQL testing not specific at auth wpa2. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not check SSID validity anymore. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * 2. follow MSDN defined behavior when associates to another AP - * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 02 04 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when OID_CUSTOM_OID_INTERFACE_VERSION is queried, do modify connection states - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * 2. block TX/ordinary OID when RF test mode is engaged - * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * OID_802_11_RSSI, - * OID_802_11_RSSI_TRIGGER, - * OID_802_11_STATISTICS, - * OID_802_11_DISASSOCIATE, - * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not fill ucJoinOnly currently - * - * 01 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable to connect to ad-hoc network - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .implement Set/Query BeaconInterval/AtimWindow - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .Set/Get AT Info is not blocked even when driver is not in fg test mode - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * and result is retrieved by get ATInfo instead - * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-16 22:13:36 GMT mtk02752 -** change hard-coded MAC address to match with FW (temporally) -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-10 16:49:50 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-08 17:38:49 GMT mtk02752 -** + add OID for RF test -** * MCR RD/WR are modified to match with cmd/event definition -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-12-08 11:32:20 GMT mtk02752 -** add skeleton for RF test implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-12-03 16:43:24 GMT mtk01461 -** Modify query SCAN list oid by adding prEventScanResult -** -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-03 16:39:27 GMT mtk01461 -** Sync CMD data structure in set ssid oid -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-03 16:28:22 GMT mtk01461 -** Add invalid check of set SSID oid and fix query scan list oid -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-30 17:33:08 GMT mtk02752 -** implement wlanoidSetInfrastructureMode/wlanoidQueryInfrastructureMode -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-30 10:53:49 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-30 09:22:48 GMT mtk02752 -** correct wifi cmd length mismatch -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-25 21:34:33 GMT mtk02752 -** sync EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 21:03:27 GMT mtk02752 -** implement wlanoidQueryBssidList() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-25 18:17:17 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-23 20:28:51 GMT mtk02752 -** some OID will be set to WLAN_STATUS_PENDING until it is sent via wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-23 17:56:36 GMT mtk02752 -** implement wlanoidSetBssidListScan(), wlanoidSetBssid() and wlanoidSetSsid() -** -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-13 17:20:53 GMT mtk02752 -** add Set BSSID/SSID path but disabled temporally due to FW is not ready yet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 12:28:58 GMT mtk02752 -** add wlanoidSetBssidListScan -> cmd_info path -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-09 22:48:07 GMT mtk01084 -** modify test cases entry -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-04 14:10:58 GMT mtk01084 -** add new test interfaces -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-30 18:17:10 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:46:26 GMT mtk01084 -** add test functions -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:07:56 GMT mtk01084 -** include new file -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:29 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-02 13:48:49 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-09-09 17:26:04 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-21 12:09:50 GMT mtk01461 -** Update for MCR Write OID -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:35:18 GMT mtk01461 -** Update wlanoidQueryMcrRead() for composing CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 18:09:51 GMT mtk01426 -** Remove kalIndicateStatusAndComplete() in wlanoidQueryOidInterfaceVersion() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-14 15:51:50 GMT mtk01426 -** Add MCR read/write support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:40 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:06:31 GMT mtk01426 -** Init for develop -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" -#include "mgmt/rsn.h" - -#include - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ -#define NVRAM_ERROR_VERSION_MISMATCH BIT(1) -#define NVRAM_ERROR_INVALID_TXPWR BIT(2) -#define NVRAM_ERROR_INVALID_DPD BIT(3) -#define NVRAM_ERROR_INVALID_MAC_ADDR BIT(4) - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ -#if DBG -extern UINT_8 aucDebugModule[DBG_MODULE_NUM]; -extern UINT_32 u4DebugModule; -UINT_32 u4DebugModuleTemp; -#endif /* DBG */ - -#if RSSI_ENHANCE -int numOfTblRssi; -TABLE_RSSI mTABLE_RSSI[MAX_SCAN_RSSI_NUM]; -int mTblRssiStatus[MAX_SCAN_RSSI_NUM]; - -void initScanRssiHistory(void) -{ - int i; - numOfTblRssi = 0; - memset(mTABLE_RSSI, 0, MAX_SCAN_RSSI_NUM*sizeof(TABLE_RSSI)); - for(i = 0; i < MAX_SCAN_RSSI_NUM; i++) { - mTblRssiStatus[i] = 0; - } -} -#endif - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ -extern int sprintf(char * buf, const char * fmt, ...); - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -#if CFG_ENABLE_STATISTICS_BUFFERING -static BOOLEAN -IsBufferedStatisticsUsable( - P_ADAPTER_T prAdapter) -{ - ASSERT(prAdapter); - - if(prAdapter->fgIsStatValid == TRUE && - (kalGetTimeTick() - prAdapter->rStatUpdateTime) <= CFG_STATISTICS_VALID_CYCLE) - return TRUE; - else - return FALSE; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the supported physical layer network -* type that can be used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 u4NumItem = 0; - ENUM_PARAM_NETWORK_TYPE_T eSupportedNetworks[PARAM_NETWORK_TYPE_NUM]; - PPARAM_NETWORK_TYPE_LIST prSupported; - - /* The array of all physical layer network subtypes that the driver supports. */ - - DEBUGFUNC("wlanoidQueryNetworkTypesSupported"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - /* Init. */ - for (u4NumItem = 0; u4NumItem < PARAM_NETWORK_TYPE_NUM ; u4NumItem++) { - eSupportedNetworks[u4NumItem] = 0; - } - - u4NumItem = 0; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_DS; - u4NumItem ++; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_OFDM24; - u4NumItem ++; - - *pu4QueryInfoLen = - (UINT_32)OFFSET_OF(PARAM_NETWORK_TYPE_LIST, eNetworkType) + - (u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSupported = (PPARAM_NETWORK_TYPE_LIST)pvQueryBuffer; - prSupported->NumberOfItems = u4NumItem; - kalMemCopy(prSupported->eNetworkType, - eSupportedNetworks, - u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - DBGLOG(REQ, TRACE, ("NDIS supported network type list: %ld\n", - prSupported->NumberOfItems)); - DBGLOG_MEM8(REQ, INFO, prSupported, *pu4QueryInfoLen); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypesSupported */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current physical layer network -* type used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T rCurrentNetworkTypeInUse = PARAM_NETWORK_TYPE_OFDM24; - - DEBUGFUNC("wlanoidQueryNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkType); - } - else { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkTypeInUse); - } - - *(P_ENUM_PARAM_NETWORK_TYPE_T)pvQueryBuffer = rCurrentNetworkTypeInUse; - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, TRACE, ("Network type in use: %d\n", rCurrentNetworkTypeInUse)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the physical layer network type used -* by the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS The given network type is supported and accepted. -* \retval WLAN_STATUS_INVALID_DATA The given network type is not in the -* supported list. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T eNewNetworkType; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - DEBUGFUNC("wlanoidSetNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_INVALID_LENGTH; - } - - eNewNetworkType = *(P_ENUM_PARAM_NETWORK_TYPE_T)pvSetBuffer; - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, - INFO, - ("New network type: %d mode\n", eNewNetworkType)); - - switch (eNewNetworkType) { - - case PARAM_NETWORK_TYPE_DS: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_DS; - break; - - case PARAM_NETWORK_TYPE_OFDM5: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM5; - break; - - case PARAM_NETWORK_TYPE_OFDM24: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM24; - break; - - case PARAM_NETWORK_TYPE_AUTOMODE: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_AUTOMODE; - break; - - case PARAM_NETWORK_TYPE_FH: - DBGLOG(REQ, INFO, ("Not support network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - - default: - DBGLOG(REQ, INFO, ("Unknown network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - /* Verify if we support the new network type. */ - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("Unknown network type: %d\n", eNewNetworkType)); - } - - return rStatus; -} /* wlanoidSetNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current BSSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryBssid"); - - ASSERT(prAdapter); - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - ASSERT(pu4QueryInfoLen); - *pu4QueryInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(u4QueryBufferLen >= MAC_ADDR_LEN); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalMemCopy(pvQueryBuffer, prAdapter->rWlanInfo.rCurrBssId.arMacAddress, MAC_ADDR_LEN); - } - else if(prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS) { - PARAM_MAC_ADDRESS aucTemp; /*!< BSSID */ - COPY_MAC_ADDR(aucTemp, prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - aucTemp[0] &= ~BIT(0); - aucTemp[1] |= BIT(1); - COPY_MAC_ADDR(pvQueryBuffer, aucTemp); - } - else { - rStatus = WLAN_STATUS_ADAPTER_NOT_READY; - } - - *pu4QueryInfoLen = MAC_ADDR_LEN; - return rStatus; -} /* wlanoidQueryBssid */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the list of all BSSIDs detected by -* the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssidList ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) || (CFG_SW_NVRAM_VERSION_CHECK == 1) - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsConfExist = TRUE; - P_REG_INFO_T prRegInfo; -#endif - - P_GLUE_INFO_T prGlueInfo; - UINT_32 i,j, u4BssidListExLen; - P_PARAM_BSSID_LIST_EX_T prList; - P_PARAM_BSSID_EX_T prBssidEx; - PUINT_8 cp; - BOOLEAN bInitial = TRUE; - - DEBUGFUNC("wlanoidQueryBssidList"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - - if(!pvQueryBuffer) { - return WLAN_STATUS_INVALID_DATA; - } - } - - prGlueInfo = prAdapter->prGlueInfo; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in qeury BSSID list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - u4BssidListExLen = 0; - - if(prAdapter->fgIsRadioOff == FALSE) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - u4BssidListExLen += ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4Length); - } - } - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - fgIsConfExist = FALSE; - u4BssidListExLen += OFFSET_OF(PARAM_BSSID_EX_T, aucIEs); - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - prRegInfo = kalGetConfiguration(prGlueInfo); - - if(fgIsConfExist == TRUE && - (CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION - || (prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) - || prRegInfo->ucTxPwrValid == 0)) { - u4BssidListExLen += OFFSET_OF(PARAM_BSSID_EX_T, aucIEs); - } -#endif - - if(u4BssidListExLen) { - u4BssidListExLen += 4; // u4NumberOfItems. - } - else { - u4BssidListExLen = sizeof(PARAM_BSSID_LIST_EX_T); - } - - *pu4QueryInfoLen = u4BssidListExLen; - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Clear the buffer */ - kalMemZero(pvQueryBuffer, u4BssidListExLen); - - prList = (P_PARAM_BSSID_LIST_EX_T) pvQueryBuffer; - cp = (PUINT_8)&prList->arBssid[0]; - - - if(prAdapter->fgIsRadioOff == FALSE && prAdapter->rWlanInfo.u4ScanResultNum > 0) { - // fill up for each entry - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - prBssidEx = (P_PARAM_BSSID_EX_T)cp; - - // copy structure - kalMemCopy(prBssidEx, - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - -#if RSSI_ENHANCE - bInitial = TRUE; - -// printk(KERN_INFO "%s::first prAdapter->rWlanInfo.arScanResult[i].AvgRssiX8 = %d, prBssidEx->rRssi= %d\n", __func__, prAdapter->rWlanInfo.arScanResult[i].AvgRssiX8, prBssidEx->rRssi); - for(j=0;jrWlanInfo.u4ScanResultNum;j++) - { - if(EQUAL_MAC_ADDR(&(prAdapter->rWlanInfo.arScanResult[i].arMacAddress), mTABLE_RSSI[j].arMacAddress)) - { - bInitial = FALSE; - prBssidEx->AvgRssiX8 = mTABLE_RSSI[j].AvgRssiX8; - prBssidEx->AvgRssi = mTABLE_RSSI[j].AvgRssi; - break; - } - } - - if (bInitial) - { - prBssidEx->AvgRssiX8 = prBssidEx->rRssi << 3; - prBssidEx->AvgRssi = prBssidEx->rRssi; - //printk(KERN_INFO "%s:: bInitial --- prBssidEx->AvgRssiX8 = %d, prBssidEx->AvgRssi = %d, prBssidEx->rRssi= %d\n", __func__, prBssidEx->AvgRssiX8, prBssidEx->AvgRssi, prBssidEx->rRssi); - } else { - prBssidEx->AvgRssiX8 = (prBssidEx->AvgRssiX8 - prBssidEx->AvgRssi) + prBssidEx->rRssi; - //printk(KERN_INFO "%s:: prBssidEx->AvgRssiX8 = %d, prBssidEx->AvgRssi = %d, prBssidEx->rRssi= %d\n", __func__, prBssidEx->AvgRssiX8, prBssidEx->AvgRssi, prBssidEx->rRssi); - } - - prBssidEx->AvgRssi = prBssidEx->AvgRssiX8 >> 3; - //prBssidEx->AvgRssi +=8; - prBssidEx->rRssi = prBssidEx->AvgRssi + 10; - prAdapter->rWlanInfo.arScanResult[i].rRssi = prBssidEx->AvgRssi; -#endif - /*For WHQL test, Rssi should be in range -10 ~ -200 dBm*/ - if(prBssidEx->rRssi > PARAM_WHQL_RSSI_MAX_DBM) { - prBssidEx->rRssi = PARAM_WHQL_RSSI_MAX_DBM; - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - // copy IEs - kalMemCopy(prBssidEx->aucIEs, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // 4-bytes alignement - prBssidEx->u4Length = ALIGN_4(prBssidEx->u4Length); - - cp += prBssidEx->u4Length; - prList->u4NumberOfItems++; - } -#if RSSI_ENHANCE - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) - { - COPY_MAC_ADDR(mTABLE_RSSI[i].arMacAddress,prAdapter->rWlanInfo.arScanResult[i].arMacAddress); - mTABLE_RSSI[i].AvgRssi = prAdapter->rWlanInfo.arScanResult[i].rRssi; - mTABLE_RSSI[i].AvgRssiX8= prAdapter->rWlanInfo.arScanResult[i].rRssi << 3; - } - for(i = prAdapter->rWlanInfo.u4ScanResultNum ; i < MAX_SCAN_RSSI_NUM ; i++) - { - mTABLE_RSSI[i].arMacAddress[0]=0; - mTABLE_RSSI[i].arMacAddress[1]=0; - mTABLE_RSSI[i].arMacAddress[2]=0; - mTABLE_RSSI[i].arMacAddress[3]=0; - mTABLE_RSSI[i].arMacAddress[4]=0; - mTABLE_RSSI[i].arMacAddress[5]=0; - } -#endif - } - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - #define NVRAM_ERR_MSG "NVRAM WARNING: Err = 0x01" - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - prBssidEx = (P_PARAM_BSSID_EX_T)cp; - - /* generate fake result as error message */ - i = prAdapter->rWlanInfo.u4ScanResultNum; - - // zero - kalMemZero(prBssidEx, OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - COPY_MAC_ADDR(prBssidEx->arMacAddress, aucZeroMacAddr); - COPY_SSID(prBssidEx->rSsid.aucSsid, - prBssidEx->rSsid.u4SsidLen, - NVRAM_ERR_MSG, - strlen(NVRAM_ERR_MSG)); - prBssidEx->u4Privacy = 0; - prBssidEx->rRssi = 0; - prBssidEx->eNetworkTypeInUse = PARAM_NETWORK_TYPE_FH; - prBssidEx->rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - prBssidEx->rConfiguration.u4BeaconPeriod = 100; - prBssidEx->rConfiguration.u4ATIMWindow = 1; - prBssidEx->rConfiguration.u4DSConfig = 2412000; - prBssidEx->rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - prBssidEx->eOpMode = BSS_TYPE_INFRASTRUCTURE; - prBssidEx->u4IELength = 0; - - /* move to next entry */ - prBssidEx->u4Length = OFFSET_OF(PARAM_BSSID_EX_T, aucIEs); - cp += prBssidEx->u4Length; - prList->u4NumberOfItems++; - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - #define VER_ERR_MSG "NVRAM WARNING: Err = 0x%02X" - if(fgIsConfExist == TRUE) { - UINT_32 u4ErrCode = 0; - - if((CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION)) { - u4ErrCode |= NVRAM_ERROR_VERSION_MISMATCH; - } - - - if(prRegInfo->ucTxPwrValid == 0) { - u4ErrCode |= NVRAM_ERROR_INVALID_TXPWR; - } - - if(prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) { - u4ErrCode |= NVRAM_ERROR_INVALID_MAC_ADDR; - } - - if(u4ErrCode != 0) { - UINT_8 aucErrMsg[32]; - prBssidEx = (P_PARAM_BSSID_EX_T)cp; - - // zero - kalMemZero(prBssidEx, OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - COPY_MAC_ADDR(prBssidEx->arMacAddress, aucZeroMacAddr); - - sprintf(aucErrMsg, VER_ERR_MSG, (unsigned int)u4ErrCode); - COPY_SSID(prBssidEx->rSsid.aucSsid, - prBssidEx->rSsid.u4SsidLen, - aucErrMsg, - strlen(aucErrMsg)); - - prBssidEx->u4Privacy = 0; - prBssidEx->rRssi = 0; - prBssidEx->eNetworkTypeInUse = PARAM_NETWORK_TYPE_FH; - prBssidEx->rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - prBssidEx->rConfiguration.u4BeaconPeriod = 100; - prBssidEx->rConfiguration.u4ATIMWindow = 1; - prBssidEx->rConfiguration.u4DSConfig = 2412000; - prBssidEx->rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - prBssidEx->eOpMode = BSS_TYPE_INFRASTRUCTURE; - prBssidEx->u4IELength = 0; - - /* move to next entry */ - prBssidEx->u4Length = OFFSET_OF(PARAM_BSSID_EX_T, aucIEs); - cp += prBssidEx->u4Length; - prList->u4NumberOfItems++; - } - } -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryBssidList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScan ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SSID_T prSsid; - PARAM_SSID_T rSsid; - - DEBUGFUNC("wlanoidSetBssidListScan()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - pvSetBuffer, - u4SetBufferLen); - prSsid = &rSsid; - } - else { - prSsid = NULL; - } - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED){ - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetBssidListScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning with attaching information elements(IEs) specified from user space -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SCAN_REQUEST_EXT_T prScanRequest; - P_PARAM_SSID_T prSsid; - PUINT_8 pucIe; - UINT_32 u4IeLength; - - DEBUGFUNC("wlanoidSetBssidListScanExt()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if(u4SetBufferLen != sizeof(PARAM_SCAN_REQUEST_EXT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - prScanRequest = (P_PARAM_SCAN_REQUEST_EXT_T)pvSetBuffer; - prSsid = &(prScanRequest->rSsid); - pucIe = prScanRequest->pucIE; - u4IeLength = prScanRequest->u4IELength; - } - else { - prScanRequest = NULL; - prSsid = NULL; - pucIe = NULL; - u4IeLength = 0; - } - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED){ - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetBssidListScanWithIE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt to associate -* with the specified BSSID. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_UINT_8 pAddr; - UINT_32 i; - INT_32 i4Idx = -1; - P_MSG_AIS_ABORT_T prAisAbortMsg; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = MAC_ADDR_LEN;; - if (u4SetBufferLen != MAC_ADDR_LEN){ - *pu4SetInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prGlueInfo = prAdapter->prGlueInfo; - pAddr = (P_UINT_8)pvSetBuffer; - - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, pAddr)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the BSSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, pAddr)) { - i4Idx = (INT_32)i; - break; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - /* Set Connection Request Issued Flag */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_BSSID; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - prAdapter->rWifiVar.rConnSettings.ucSSIDLen = 0; - prAdapter->rWifiVar.rConnSettings.aucSSID[0] = '\0'; - - COPY_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr); - prAisAbortMsg->fgDelayIndication = FALSE; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt -* to associate with the new SSID. If the previous scanning -* result is aged, we will scan the channels at first. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSsid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_PARAM_SSID_T pParamSsid; - UINT_32 i; - INT_32 i4Idx = -1, i4MaxRSSI = INT_MIN; - P_MSG_AIS_ABORT_T prAisAbortMsg; - BOOLEAN fgIsValidSsid = TRUE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* MSDN: - * Powering on the radio if the radio is powered off through a setting of OID_802_11_DISASSOCIATE - */ - if(prAdapter->fgIsRadioOff == TRUE) { - prAdapter->fgIsRadioOff = FALSE; - } - - if(u4SetBufferLen < sizeof(PARAM_SSID_T) || u4SetBufferLen > sizeof(PARAM_SSID_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - pParamSsid = (P_PARAM_SSID_T) pvSetBuffer; - - if (pParamSsid->u4SsidLen > 32) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prGlueInfo = prAdapter->prGlueInfo; - - // prepare for CMD_BUILD_CONNECTION & CMD_GET_CONNECTION_STATUS - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_SSID(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the SSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - PUINT_8 aucSsid = prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid; - UINT_8 ucSsidLength = (UINT_8) prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen; - INT_32 i4RSSI = prAdapter->rWlanInfo.arScanResult[i].rRssi; - - if(EQUAL_SSID(aucSsid, ucSsidLength, pParamSsid->aucSsid, pParamSsid->u4SsidLen) && - i4RSSI >= i4MaxRSSI) { - i4Idx = (INT_32)i; - i4MaxRSSI = i4RSSI; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - if (prAdapter->rWifiVar.fgSupportWZCDisassociation) { - if (pParamSsid->u4SsidLen == ELEM_MAX_LEN_SSID) { - fgIsValidSsid = FALSE; - - for (i = 0; i < ELEM_MAX_LEN_SSID; i++) { - if ( !((0 < pParamSsid->aucSsid[i]) && (pParamSsid->aucSsid[i] <= 0x1F)) ) { - fgIsValidSsid = TRUE; - break; - } - } - } - } - - /* Set Connection Request Issued Flag */ - if (fgIsValidSsid) { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - - if(pParamSsid->u4SsidLen) { - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - } - else { - // wildcard SSID - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_ANY; - } - } - else { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - } - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - COPY_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - (UINT_8)pParamSsid->u4SsidLen); - - prAisAbortMsg->fgDelayIndication = FALSE; - } - DBGLOG(SCN, INFO, ("SSID %s\n", prAdapter->rWifiVar.rConnSettings.aucSSID)); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidSetSsid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the currently associated SSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySsid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_SSID_T prAssociatedSsid; - - DEBUGFUNC("wlanoidQuerySsid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_SSID_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prAssociatedSsid = (P_PARAM_SSID_T)pvQueryBuffer; - - kalMemZero(prAssociatedSsid->aucSsid, sizeof(prAssociatedSsid->aucSsid)); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - prAssociatedSsid->u4SsidLen = prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen; - - if (prAssociatedSsid->u4SsidLen) { - kalMemCopy(prAssociatedSsid->aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAssociatedSsid->u4SsidLen); - } - } - else { - prAssociatedSsid->u4SsidLen = 0; - - DBGLOG(REQ, TRACE, ("Null SSID\n")); - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQuerySsid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 network type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eOPMode; - - /* - ** According to OID_802_11_INFRASTRUCTURE_MODE - ** If there is no prior OID_802_11_INFRASTRUCTURE_MODE, - ** NDIS_STATUS_ADAPTER_NOT_READY shall be returned. - */ -#if DBG - switch (*(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer) { - case NET_TYPE_IBSS: - DBGLOG(REQ, INFO, ("IBSS mode\n")); - break; - case NET_TYPE_INFRA: - DBGLOG(REQ, INFO, ("Infrastructure mode\n")); - break; - default: - DBGLOG(REQ, INFO, ("Automatic mode\n")); - } -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set mode to infrastructure or -* IBSS, or automatic switch between the two. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid -* length of the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - ENUM_PARAM_OP_MODE_T eOpMode; - - DEBUGFUNC("wlanoidSetInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - if (u4SetBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) - return WLAN_STATUS_BUFFER_TOO_SHORT; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set infrastructure mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eOpMode = *(P_ENUM_PARAM_OP_MODE_T)pvSetBuffer; - /* Verify the new infrastructure mode. */ - if (eOpMode >= NET_TYPE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid mode value %d\n", eOpMode)); - return WLAN_STATUS_INVALID_DATA; - } - - /* check if possible to switch to AdHoc mode */ - if(eOpMode == NET_TYPE_IBSS || eOpMode == NET_TYPE_DEDICATED_IBSS) { - if(cnmAisIbssIsPermitted(prAdapter) == FALSE) { - DBGLOG(REQ, TRACE, ("Mode value %d unallowed\n", eOpMode)); - return WLAN_STATUS_FAILURE; - } - } - - /* Save the new infrastructure mode setting. */ - prAdapter->rWifiVar.rConnSettings.eOPMode = eOpMode; - - /* Clean up the Tx key flag */ - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; -#if CFG_SUPPORT_WAPI - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - kalMemZero(&prAdapter->prGlueInfo->aucWapiAssocInfoIEs, 42); -#endif - -#if CFG_SUPPORT_802_11W - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled = FALSE; -#endif - -#if CFG_SUPPORT_WPS2 - kalMemZero(&prAdapter->prGlueInfo->aucWSCAssocInfoIE, 200); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; -#endif - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INFRASTRUCTURE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 authentication -* mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAuthMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAuthMode"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eAuthMode; - -#if DBG - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer) { - case AUTH_MODE_OPEN: - DBGLOG(REQ, INFO, ("Current auth mode: Open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(REQ, INFO, ("Current auth mode: Shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(REQ, INFO, ("Current auth mode: Auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(REQ, INFO, ("Current auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(REQ, INFO, ("Current auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryAuthMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 authentication mode -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAuthMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_32 i, u4AkmSuite; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("wlanoidSetAuthMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* RF Test */ - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer >= AUTH_MODE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid auth mode %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer) { - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - /* infrastructure mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_INFRA) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - case AUTH_MODE_WPA_NONE: - /* ad hoc mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_IBSS) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - default: - ; - } - - /* Save the new authentication mode. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer; - -#if DBG - switch (prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_OPEN: - DBGLOG(RSN, TRACE, ("New auth mode: open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(RSN, TRACE, ("New auth mode: shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(RSN, TRACE, ("New auth mode: auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(RSN, TRACE, ("New auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(RSN, TRACE, ("New auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(RSN, TRACE, ("New auth mode: unknown (%d)\n", - prAdapter->rWifiVar.rConnSettings.eAuthMode)); - } -#endif - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode >= AUTH_MODE_WPA) { - switch(prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_WPA: - u4AkmSuite = WPA_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA_PSK: - u4AkmSuite = WPA_AKM_SUITE_PSK; - break; - - case AUTH_MODE_WPA_NONE: - u4AkmSuite = WPA_AKM_SUITE_NONE; - break; - - case AUTH_MODE_WPA2: - u4AkmSuite = RSN_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA2_PSK: - u4AkmSuite = RSN_AKM_SUITE_PSK; - break; - - default: - u4AkmSuite = 0; - } - } - else { - u4AkmSuite = 0; - } - - /* Enable the specific AKM suite only. */ - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite) { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = FALSE; - } -#if CFG_SUPPORT_802_11W - if (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) { - if ((u4AkmSuite == RSN_AKM_SUITE_PSK) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_PSK_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_PSK_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - - } - if ((u4AkmSuite == RSN_AKM_SUITE_802_1X) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_802_1X_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_802_1X_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - } -#endif - } - - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetAuthMode */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 privacy filter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPrivacyFilter"); - - ASSERT(prAdapter); - - ASSERT(pvQueryBuffer); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer = prAdapter->rWlanInfo.ePrivacyFilter; - -#if DBG - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer) { - case PRIVACY_FILTER_ACCEPT_ALL: - DBGLOG(REQ, INFO, ("Current privacy mode: open mode\n")); - break; - - case PRIVACY_FILTER_8021xWEP: - DBGLOG(REQ, INFO, ("Current privacy mode: filtering mode\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPrivacyFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 privacy filter -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("wlanoidSetPrivacyFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer >= PRIVACY_FILTER_NUM) { - DBGLOG(REQ, TRACE, ("Invalid privacy filter %d\n", - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer) { - default: - break; - } - - /* Save the new authentication mode. */ - prAdapter->rWlanInfo.ePrivacyFilter = *(ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPrivacyFilter */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to reload the available default settings for -* the specified type field. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetReloadDefaults ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - UINT_32 u4Len; - UINT_8 ucCmdSeqNum; - - - DEBUGFUNC("wlanoidSetReloadDefaults"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = sizeof(PARAM_RELOAD_DEFAULTS); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Reload default! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - /* Verify the available reload options and reload the settings. */ - switch (*(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer) { - case ENUM_RELOAD_WEP_KEYS: - /* Reload available default WEP keys from the permanent - storage. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = AUTH_MODE_OPEN; - prAdapter->rWifiVar.rConnSettings.eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT;//ENUM_ENCRYPTION_DISABLED; - { - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_802_11_KEY prCmdKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = 0;//(UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, aucBCAddr, MAC_ADDR_LEN); - - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); - - prCmdKey->ucKeyType = 0; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; - } - - break; - - default: - DBGLOG(REQ, TRACE, ("Invalid reload option %d\n", - *(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer)); - rStatus = WLAN_STATUS_INVALID_DATA; - } - - /* OID_802_11_RELOAD_DEFAULTS requiest to reset to auto mode */ - eNetworkType = PARAM_NETWORK_TYPE_AUTOMODE; - wlanoidSetNetworkTypeInUse(prAdapter, &eNetworkType, sizeof(eNetworkType), &u4Len); - - return rStatus; -} /* wlanoidSetReloadDefaults */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a WEP key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -#ifdef LINUX -UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; -UINT_8 aucBCAddr[] = BC_MAC_ADDR; -#endif -WLAN_STATUS -wlanoidSetAddWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - #ifndef LINUX - UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - #endif - P_PARAM_WEP_T prNewWepKey; - P_PARAM_KEY_T prParamKey = (P_PARAM_KEY_T)keyBuffer; - UINT_32 u4KeyId, u4SetLen; - - DEBUGFUNC("wlanoidSetAddWep"); - - ASSERT(prAdapter); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial)) { - ASSERT(pu4SetInfoLen); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewWepKey = (P_PARAM_WEP_T)pvSetBuffer; - - /* Verify the total buffer for minimum length. */ - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial) + prNewWepKey->u4KeyLength) { - DBGLOG(REQ, WARN, ("Invalid total buffer length (%d) than minimum length (%d)\n", - (UINT_8)u4SetBufferLen, - (UINT_8)OFFSET_OF(PARAM_WEP_T, aucKeyMaterial))); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key structure length. */ - if (prNewWepKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewWepKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key material length for maximum key material length:16 */ - if (prNewWepKey->u4KeyLength > 16 /* LEGACY_KEY_MAX_LEN */) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d) greater than maximum key material length (16)\n", - (UINT_8)prNewWepKey->u4KeyLength)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = u4SetBufferLen; - - u4KeyId = prNewWepKey->u4KeyIndex & BITS(0,29) /* WEP_KEY_ID_FIELD */; - - /* Verify whether key index is valid or not, current version - driver support only 4 global WEP keys setting by this OID */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("Error, invalid WEP key ID: %d\n", (UINT_8)u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - prParamKey->u4KeyIndex = u4KeyId; - - /* Transmit key */ - if (prNewWepKey->u4KeyIndex & IS_TRANSMIT_KEY) { - prParamKey->u4KeyIndex |= IS_TRANSMIT_KEY; - } - - /* Per client key */ - if (prNewWepKey->u4KeyIndex & IS_UNICAST_KEY) { - prParamKey->u4KeyIndex |= IS_UNICAST_KEY; - } - - prParamKey->u4KeyLength = prNewWepKey->u4KeyLength; - - kalMemCopy(prParamKey->arBSSID, aucBCAddr, MAC_ADDR_LEN); - - kalMemCopy(prParamKey->aucKeyMaterial, - prNewWepKey->aucKeyMaterial, - prNewWepKey->u4KeyLength); - - prParamKey->u4Length = OFFSET_OF(PARAM_KEY_T, aucKeyMaterial) + prNewWepKey->u4KeyLength; - - wlanoidSetAddKey(prAdapter, - (PVOID)prParamKey, - prParamKey->u4Length, - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the WEP key -* at the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4KeyId, u4SetLen; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - DEBUGFUNC("wlanoidSetRemoveWep"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_KEY_INDEX); - - if (u4SetBufferLen < sizeof(PARAM_KEY_INDEX)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4KeyId = *(PUINT_32)pvSetBuffer; - - /* Dump PARAM_WEP content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_KEY_INDEX content\n")); - DBGLOG(REQ, INFO, ("Index : 0x%08lx\n", u4KeyId)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if (u4KeyId & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("Invalid WEP key index: 0x%08lx\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - u4KeyId &= BITS(0,7); - - /* Verify whether key index is valid or not. Current version - driver support only 4 global WEP keys. */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("invalid WEP key ID %lu\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - rRemoveKey.u4KeyIndex = *(PUINT_32)pvSetBuffer; - - kalMemCopy(rRemoveKey.arBSSID, aucBCAddr, MAC_ADDR_LEN); - - wlanoidSetRemoveKey(prAdapter, - (PVOID)&rRemoveKey, - sizeof(PARAM_REMOVE_KEY_T), - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer PARAM_KEY_T, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetAddKey"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Verify the key material length for key material buffer */ - if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check */ - if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - - if (!(prNewKey->u4KeyLength == WEP_40_LEN || prNewKey->u4KeyLength == WEP_104_LEN || - prNewKey->u4KeyLength == CCMP_KEY_LEN || prNewKey->u4KeyLength == TKIP_KEY_LEN)) - { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Dump PARAM_KEY content. */ - DBGLOG(REQ, TRACE, ("Set: Dump PARAM_KEY content\n")); - DBGLOG(REQ, TRACE, ("Length : 0x%08lx\n", prNewKey->u4Length)); - DBGLOG(REQ, TRACE, ("Key Index : 0x%08lx\n", prNewKey->u4KeyIndex)); - DBGLOG(REQ, TRACE, ("Key Length: 0x%08lx\n", prNewKey->u4KeyLength)); - DBGLOG(REQ, TRACE, ("BSSID:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->arBSSID, sizeof(PARAM_MAC_ADDRESS)); - DBGLOG(REQ, TRACE, ("Key RSC:\n")); - DBGLOG_MEM8(REQ, TRACE, &prNewKey->rKeyRSC, sizeof(PARAM_KEY_RSC)); - DBGLOG(REQ, TRACE, ("Key Material:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucKeyMaterial, prNewKey->u4KeyLength); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - /* Todo:: Store the legacy wep key for OID_802_11_RELOAD_DEFAULTS */ - } - - if (prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = TRUE; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, INFO, ("ucCmdSeqNum = %d\n", ucCmdSeqNum)); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - prCmdKey->ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - prCmdKey->ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - prCmdKey->ucIsAuthenticator = ((prNewKey->u4KeyIndex & IS_AUTHENTICATOR) == IS_AUTHENTICATOR) ? 1 : 0; - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->arBSSID, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - - /* Note: adjust the key length for WPA-None */ - prCmdKey->ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, prCmdKey->ucKeyLen); - - if (prNewKey->u4KeyLength == 5) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP40; - } - else if (prNewKey->u4KeyLength == 13) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP104; - } - else if (prNewKey->u4KeyLength == 16) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP128; - else { -#if CFG_SUPPORT_802_11W - if (prCmdKey->ucKeyId >= 4) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_BIP; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - prAisSpecBssInfo->fgBipKeyInstalled = TRUE; - } - else -#endif - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - } - } - else if (prNewKey->u4KeyLength == 32) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION2_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - prCmdKey->ucKeyLen = CCMP_KEY_LEN; - } - } - else { - if (rsnCheckPmkidCandicate(prAdapter)) { - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("Add key: Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the key at -* the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_REMOVE_KEY_T prRemovedKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetRemoveKey"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Dump PARAM_REMOVE_KEY content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_REMOVE_KEY content\n")); - DBGLOG(REQ, INFO, ("Length : 0x%08lx\n", prRemovedKey->u4Length)); - DBGLOG(REQ, INFO, ("Key Index : 0x%08lx\n", prRemovedKey->u4KeyIndex)); - DBGLOG(REQ, INFO, ("BSSID:\n")); - DBGLOG_MEM8(REQ, INFO, prRemovedKey->arBSSID, MAC_ADDR_LEN); - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Clean up the Tx key flag */ - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - } - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - -#if CFG_SUPPORT_802_11W - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM + 2); -#else - //ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); -#endif - - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prCmdKey->ucKeyType = 1; - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current encryption status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - BOOLEAN fgTransmitKeyAvailable = TRUE; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus = 0; - - DEBUGFUNC("wlanoidQueryEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - fgTransmitKeyAvailable = prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist; - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION3_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION3_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION2_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - break; - } - else { - eEncStatus = ENUM_ENCRYPTION2_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION_DISABLED: - eEncStatus = ENUM_ENCRYPTION_DISABLED; - break; - - default: - DBGLOG(REQ, ERROR, ("Unknown Encryption Status Setting:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } - -#if DBG - DBGLOG(REQ, INFO, - ("Encryption status: %d Return:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus, - eEncStatus)); -#endif - - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvQueryBuffer = eEncStatus; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the encryption status to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_SUPPORTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_ENCRYPTION_STATUS_T eEewEncrypt; - - DEBUGFUNC("wlanoidSetEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set encryption status! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eEewEncrypt = *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - DBGLOG(REQ, TRACE, ("ENCRYPTION_STATUS %d\n", eEewEncrypt)); - - switch (eEewEncrypt) { - case ENUM_ENCRYPTION_DISABLED: /* Disable WEP, TKIP, AES */ - DBGLOG(RSN, TRACE, ("Disable Encryption\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION1_ENABLED: /* Enable WEP. Disable TKIP, AES */ - DBGLOG(RSN, TRACE, ("Enable Encryption1\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION2_ENABLED: /* Enable WEP, TKIP. Disable AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP); - DBGLOG(RSN, TRACE, ("Enable Encryption2\n")); - break; - - case ENUM_ENCRYPTION3_ENABLED: /* Enable WEP, TKIP, AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP | - CIPHER_FLAG_CCMP); - DBGLOG(RSN, TRACE, ("Enable Encryption3\n")); - break; - - default: - DBGLOG(RSN, WARN, ("Unacceptible encryption status: %d\n", - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer)); - - rStatus = WLAN_STATUS_NOT_SUPPORTED; - } - - if (rStatus == WLAN_STATUS_SUCCESS) { - /* Save the new encryption status. */ - prAdapter->rWifiVar.rConnSettings.eEncStatus = - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - } - - return rStatus; -} /* wlanoidSetEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to test the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_802_11_TEST_T prTest; - PVOID pvTestData; - PVOID pvStatusBuffer; - UINT_32 u4StatusBufferSize; - - DEBUGFUNC("wlanoidSetTest"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - *pu4SetInfoLen = u4SetBufferLen; - - prTest = (P_PARAM_802_11_TEST_T)pvSetBuffer; - - DBGLOG(REQ, TRACE, ("Test - Type %ld\n", prTest->u4Type)); - - switch (prTest->u4Type) { - case 1: /* Type 1: generate an authentication event */ - pvTestData = (PVOID)&prTest->u.AuthenticationEvent; - pvStatusBuffer = (PVOID)prAdapter->aucIndicationEventBuffer; - u4StatusBufferSize = prTest->u4Length - 8; - break; - - case 2: /* Type 2: generate an RSSI status indication */ - pvTestData = (PVOID)&prTest->u.RssiTrigger; - pvStatusBuffer = (PVOID)&prAdapter->rWlanInfo.rCurrBssId.rRssi; - u4StatusBufferSize = sizeof(PARAM_RSSI); - break; - - default: - return WLAN_STATUS_INVALID_DATA; - } - - ASSERT(u4StatusBufferSize <= 180); - if (u4StatusBufferSize > 180) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Get the contents of the StatusBuffer from the test structure. */ - kalMemCopy(pvStatusBuffer, pvTestData, u4StatusBufferSize); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - pvStatusBuffer, - u4StatusBufferSize); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the driver's WPA2 status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCapability ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CAPABILITY_T prCap; - P_PARAM_AUTH_ENCRYPTION_T prAuthenticationEncryptionSupported; - - DEBUGFUNC("wlanoidQueryCapability"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = 4 * sizeof(UINT_32) + 14 * sizeof(PARAM_AUTH_ENCRYPTION_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prCap = (P_PARAM_CAPABILITY_T)pvQueryBuffer; - - prCap->u4Length = *pu4QueryInfoLen; - prCap->u4Version = 2; /* WPA2 */ - prCap->u4NoOfPMKIDs = CFG_MAX_PMKID_CACHE; - prCap->u4NoOfAuthEncryptPairsSupported = 14; - - prAuthenticationEncryptionSupported = - &prCap->arAuthenticationEncryptionSupported[0]; - - // fill 14 entries of supported settings - prAuthenticationEncryptionSupported[0].eAuthModeSupported = - AUTH_MODE_OPEN; - - prAuthenticationEncryptionSupported[0].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[1].eAuthModeSupported = - AUTH_MODE_OPEN; - prAuthenticationEncryptionSupported[1].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[2].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[2].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[3].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[3].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[4].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[4].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[5].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[5].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[6].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[6].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[7].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[7].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[8].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[8].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[9].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[9].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[10].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[10].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[11].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[11].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[12].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[12].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[13].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[13].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryCapability */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the PMKID in the PMK cache. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPmkid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 i; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidQueryPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - *pu4QueryInfoLen = OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo) + - prAisSpecBssInfo->u4PmkidCacheCount * sizeof(PARAM_BSSID_INFO_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prPmkid = (P_PARAM_PMKID_T)pvQueryBuffer; - - prPmkid->u4Length = *pu4QueryInfoLen; - prPmkid->u4BSSIDInfoCount = prAisSpecBssInfo->u4PmkidCacheCount; - - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - kalMemCopy(prPmkid->arBSSIDInfo[i].arBSSID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - kalMemCopy(prPmkid->arBSSIDInfo[i].arPMKID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - } - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the PMKID to the PMK cache in the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPmkid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, j; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidSetPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = u4SetBufferLen; - - /* It's possibble BSSIDInfoCount is zero, because OS wishes to clean PMKID */ - if (u4SetBufferLen < OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - prPmkid = (P_PARAM_PMKID_T)pvSetBuffer; - - if (u4SetBufferLen < - ((prPmkid->u4BSSIDInfoCount * sizeof(PARAM_BSSID_INFO_T)) + - OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo))) { - return WLAN_STATUS_INVALID_DATA; - } - - if (prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE) { - return WLAN_STATUS_INVALID_DATA; - } - - DBGLOG(REQ, INFO, ("Count %lu\n", prPmkid->u4BSSIDInfoCount)); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* This OID replace everything in the PMKID cache. */ - if (prPmkid->u4BSSIDInfoCount == 0) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - if ((prAisSpecBssInfo->u4PmkidCacheCount + prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE)) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - - /* - The driver can only clear its PMKID cache whenever it make a media disconnect - indication. Otherwise, it must change the PMKID cache only when set through this OID. - */ -#if CFG_RSN_MIGRATION - for (i = 0; i < prPmkid->u4BSSIDInfoCount; i++) { - /* Search for desired BSSID. If desired BSSID is found, - then set the PMKID */ - if (!rsnSearchPmkidEntry(prAdapter, - (PUINT_8)prPmkid->arBSSIDInfo[i].arBSSID, - &j)) { - /* No entry found for the specified BSSID, so add one entry */ - if (prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE - 1) { - j = prAisSpecBssInfo->u4PmkidCacheCount; - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prPmkid->arBSSIDInfo[i].arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - prAisSpecBssInfo->u4PmkidCacheCount++; - } - else { - j = CFG_MAX_PMKID_CACHE; - } - } - - if (j < CFG_MAX_PMKID_CACHE) { - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID, - prPmkid->arBSSIDInfo[i].arPMKID, - sizeof(PARAM_PMKID_VALUE)); - DBGLOG(RSN, TRACE, ("Add BSSID "MACSTR" idx=%d PMKID value "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID),j, MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID))); - prAisSpecBssInfo->arPmkidCache[j].fgPmkidExist = TRUE; - } - } -#endif - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the set of supported data rates that -* the radio is capable of running -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query -* \param[in] u4QueryBufferLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number -* of bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySupportedRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PARAM_RATES eRate = { - // BSSBasicRateSet for 802.11n Non-HT rates - 0x8C, // 6M - 0x92, // 9M - 0x98, // 12M - 0xA4, // 18M - 0xB0, // 24M - 0xC8, // 36M - 0xE0, // 48M - 0xEC // 54M - }; - - DEBUGFUNC("wlanoidQuerySupportedRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&eRate, - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQuerySupportedRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i; - DEBUGFUNC("wlanoidSetDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(PARAM_RATES); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy((PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - pvSetBuffer, - sizeof(PARAM_RATES)); - - prAdapter->rWlanInfo.eLinkAttr.ucDesiredRateLen = PARAM_MAX_LEN_RATES; - for (i = 0 ; i < PARAM_MAX_LEN_RATES ; i++) { - prAdapter->rWlanInfo.eLinkAttr.u2DesiredRate[i] = - (UINT_16) (prAdapter->rWlanInfo.eDesiredRates[i]); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum frame size in bytes, -* not including the header. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxFrameSize"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ - ETHERNET_HEADER_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxFrameSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum total packet length -* in bytes. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxTotalSize"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxTotalSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the vendor ID of the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryVendorId ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PUINT_8 cp; -#endif - DEBUGFUNC("wlanoidQueryVendorId"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, prAdapter->aucMacAddress, 3); - *((PUINT_8)pvQueryBuffer + 3) = 1; - *pu4QueryInfoLen = sizeof(UINT_32); - -#if DBG - cp = (PUINT_8)pvQueryBuffer; - DBGLOG(REQ, LOUD, ("Vendor ID=%02x-%02x-%02x-%02x\n", cp[0], cp[1], cp[2], cp[3])); -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryVendorId */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssi ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (prAdapter->fgIsLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* end of wlanoidQueryRssi() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI trigger value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssiTrigger ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_NONE) - return WLAN_STATUS_ADAPTER_NOT_READY; - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(PARAM_RSSI *) pvQueryBuffer = prAdapter->rWlanInfo.rRssiTriggerValue; - DBGLOG(REQ, INFO, ("RSSI trigger: %ld dBm\n", *(PARAM_RSSI *) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a trigger value of the RSSI event. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRssiTrigger ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RSSI rRssiTriggerValue; - DEBUGFUNC("wlanoidSetRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_RSSI); - rRssiTriggerValue = *(PARAM_RSSI *) pvSetBuffer; - - if(rRssiTriggerValue > PARAM_WHQL_RSSI_MAX_DBM - || rRssiTriggerValue < PARAM_WHQL_RSSI_MIN_DBM) - return - - /* Save the RSSI trigger value to the Adapter structure */ - prAdapter->rWlanInfo.rRssiTriggerValue = rRssiTriggerValue; - - /* If the RSSI trigger value is equal to the current RSSI value, the - * indication triggers immediately. We need to indicate the protocol - * that an RSSI status indication event triggers. */ - if (rRssiTriggerValue == (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &prAdapter->rWlanInfo.rRssiTriggerValue, sizeof(PARAM_RSSI)); - } - else if(rRssiTriggerValue < (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_GREATER; - else if(rRssiTriggerValue > (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_LESS; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a suggested value for the number of -* bytes of received packet data that will be indicated to the protocol -* driver. We just accept the set and ignore this value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetCurrentLookahead"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetCurrentLookahead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* receives but does not indicate to the protocols due to errors. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* cannot receive due to lack of NIC receive buffer space. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvNoBuffer"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) 0; //@FIXME - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) 0; //@FIXME - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvNoBuffer, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvNoBuffer */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* received and it is CRC error. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvCrcError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvCrcError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvCrcError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the current 802.11 statistics. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryStatistics"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(PARAM_802_11_STATISTICS_STRUCT_T)) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) pvQueryBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prAdapter->rStatStruct.rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prAdapter->rStatStruct.rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prAdapter->rStatStruct.rFailedCount; - prStatistics->rRetryCount - = prAdapter->rStatStruct.rRetryCount; - prStatistics->rMultipleRetryCount - = prAdapter->rStatStruct.rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prAdapter->rStatStruct.rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prAdapter->rStatStruct.rRTSFailureCount; - prStatistics->rACKFailureCount - = prAdapter->rStatStruct.rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prAdapter->rStatStruct.rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prAdapter->rStatStruct.rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prAdapter->rStatStruct.rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prAdapter->rStatStruct.rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryStatistics, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryStatistics */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query current media streaming status. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(P_ENUM_MEDIA_STREAM_MODE)pvQueryBuffer = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to enter media streaming mode or exit media streaming mode -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ENUM_MEDIA_STREAM_MODE eStreamMode; - - DEBUGFUNC("wlanoidSetMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_MEDIA_STREAM_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - eStreamMode = *(P_ENUM_MEDIA_STREAM_MODE)pvSetBuffer; - - if(eStreamMode == ENUM_MEDIA_STREAM_OFF) - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - else - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 1; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetMediaStreamMode, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); -} /* wlanoidSetMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the permanent MAC address of the NIC. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPermanentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - COPY_MAC_ADDR(pvQueryBuffer, prAdapter->rWifiVar.aucPermanentAddress); - *pu4QueryInfoLen = MAC_ADDR_LEN; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPermanentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the MAC address the NIC is currently using. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidQueryCurrentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryAddress, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryCurrentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query NIC link speed. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryLinkSpeed"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = 10000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else if (prAdapter->fgIsLinkRateValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - *(PUINT_32)pvQueryBuffer = prAdapter->rLinkQuality.u2LinkSpeed * 5000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkSpeed, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* end of wlanoidQueryLinkSpeed() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query MCR value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - CMD_ACCESS_REG rCmdAccessReg; - - DEBUGFUNC("wlanoidQueryMcrRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvQueryBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrRdInfo->u4McrOffset >>16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_READ, - (UINT_16) (prMcrRdInfo->u4McrOffset & BITS(0,15)), - &prMcrRdInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - /* Check if access F/W Domain MCR (due to WiFiSYS is placed from 0x6000-0000*/ - if (prMcrRdInfo->u4McrOffset & 0xFFFF0000){ - // fill command - rCmdAccessReg.u4Address = prMcrRdInfo->u4McrOffset; - rCmdAccessReg.u4Data = 0; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcrRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvQueryBuffer, - u4QueryBufferLen - ); - } - else { - HAL_MCR_RD(prAdapter, - prMcrRdInfo->u4McrOffset & BITS(2,31), //address is in DWORD unit - &prMcrRdInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Read: Offset = %#08lx, Data = %#08lx\n", - prMcrRdInfo->u4McrOffset, prMcrRdInfo->u4McrData)); - return WLAN_STATUS_SUCCESS; - } -} /* end of wlanoidQueryMcrRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write MCR and enable specific function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrWrInfo; - CMD_ACCESS_REG rCmdAccessReg; - -#if CFG_STRESS_TEST_SUPPORT - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - P_STA_RECORD_T prStaRec = prBssInfo->prStaRecOfAP; - UINT_32 u4McrOffset, u4McrData; -#endif - - DEBUGFUNC("wlanoidSetMcrWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMcrWrInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvSetBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - - // -- Puff Stress Test Begin -#if CFG_STRESS_TEST_SUPPORT - - // 0xFFFFFFFE for Control Rate - if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFE){ - if(prMcrWrInfo->u4McrData < FIXED_RATE_NUM && prMcrWrInfo->u4McrData > 0){ - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prMcrWrInfo->u4McrData); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - DEBUGFUNC("[Stress Test]Complete Rate is Changed...\n"); - DBGLOG(INIT, TRACE, ("[Stress Test] Rate is Changed to index %d...\n", prAdapter->rWifiVar.eRateSetting)); - } - - // 0xFFFFFFFD for Switch Channel - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFD){ - if(prMcrWrInfo->u4McrData <= 11 && prMcrWrInfo->u4McrData >= 1){ - prBssInfo->ucPrimaryChannel = prMcrWrInfo->u4McrData; - } - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - DBGLOG(INIT, TRACE, ("[Stress Test] Channel is switched to %d ...\n", prBssInfo->ucPrimaryChannel)); - - return WLAN_STATUS_SUCCESS; - } - - // 0xFFFFFFFFC for Control RF Band and SCO - else if(prMcrWrInfo->u4McrOffset == 0xFFFFFFFC){ - // Band - if(prMcrWrInfo->u4McrData & 0x80000000){ - //prBssInfo->eBand = BAND_5G; - //prBssInfo->ucPrimaryChannel = 52; // Bond to Channel 52 - } else { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 8; // Bond to Channel 6 - } - - // Bandwidth - if(prMcrWrInfo->u4McrData & 0x00010000){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - - if(prMcrWrInfo->u4McrData == 0x00010002){ - prBssInfo->eBssSCO = CHNL_EXT_SCB; // U20 - prBssInfo->ucPrimaryChannel += 2; - } else if (prMcrWrInfo->u4McrData == 0x00010001){ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // L20 - prBssInfo->ucPrimaryChannel -= 2; - } else { - prBssInfo->eBssSCO = CHNL_EXT_SCA; // 40 - } - } - - if(prMcrWrInfo->u4McrData & 0x00000000){ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - } - - // 0xFFFFFFFB for HT Capability - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFB){ - /* Enable HT Capability */ - if(prMcrWrInfo->u4McrData & 0x00000001){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - DEBUGFUNC("[Stress Test]Enable HT capability...\n"); - }else{ - prStaRec->u2HtCapInfo &= (~HT_CAP_INFO_HT_GF); - DEBUGFUNC("[Stress Test]Disable HT capability...\n"); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - - // 0xFFFFFFFA for Enable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFA){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF9 for Disable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF9){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF8 for Enable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF8){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF7 for Disable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF7){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - else -#endif - // -- Puff Stress Test End - - - /* Check if access F/W Domain MCR */ - if (prMcrWrInfo->u4McrOffset & 0xFFFF0000){ - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrWrInfo->u4McrOffset >> 16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) (prMcrWrInfo->u4McrOffset & BITS(0,15)), - &prMcrWrInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } -#endif - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - -#endif - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - HAL_MCR_WR(prAdapter, - (prMcrWrInfo->u4McrOffset & BITS(2,31)), //address is in DWORD unit - prMcrWrInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Write: Offset = %#08lx, Data = %#08lx\n", - prMcrWrInfo->u4McrOffset, prMcrWrInfo->u4McrData)); - - return WLAN_STATUS_SUCCESS; - } -} /* wlanoidSetMcrWrite */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query SW CTRL -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - - DEBUGFUNC("wlanoidQuerySwCtrlRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvQueryBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = 0; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_READ/* Read */, - (UINT_16) u2SubId , - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0xFFFF: - { - u4Data = 0x5AA56620; - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = 0; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - FALSE, - TRUE, - TRUE, - nicCmdEventQuerySwCtrlRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvQueryBuffer, - u4QueryBufferLen - ); - } - } /* switch(u2Id)*/ - - prSwCtrlInfo->u4Data = u4Data; - - return rWlanStatus; - -} - /* end of wlanoidQuerySwCtrlRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write SW CTRL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - DEBUGFUNC("wlanoidSetSwCtrlWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvSetBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) u2SubId, - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0x1000: - if (u2SubId == 0x8000) { - // CTIA power save mode setting (code: 0x10008000) - prAdapter->u4CtiaPowerMode = u4Data; - prAdapter->fgEnCtiaPowerMode = TRUE; - - // - { - PARAM_POWER_MODE ePowerMode; - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else { - ePowerMode = Param_PowerModeFast_PSP; - } - - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - } - break; - case 0x1001: - if(u2SubId == 0x0) { - prAdapter->fgEnOnlineScan = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x1) { - prAdapter->fgDisBcnLostDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x2) { - prAdapter->rWifiVar.fgSupportUAPSD = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x3) { - prAdapter->u4UapsdAcBmp = u4Data & BITS(0,15); - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpTriggerAC = (UINT_8)prAdapter->u4UapsdAcBmp; - } - else if(u2SubId == 0x4) { - prAdapter->fgDisStaAgingTimeoutDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x5) { - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = (UINT_8)u4Data; - } - - - break; - -#if CFG_SUPPORT_SWCR - case 0x1002: - if(u2SubId == 0x0) { - if (u4Data) { - u4Data = BIT(HIF_RX_PKT_TYPE_MANAGEMENT); - } - swCrFrameCheckEnable(prAdapter, u4Data); - } - else if(u2SubId == 0x1) { - BOOLEAN fgIsEnable; - UINT_8 ucType; - UINT_32 u4Timeout; - - fgIsEnable = (BOOLEAN)(u4Data & 0xff); - ucType = 0;//((u4Data>>4) & 0xf); - u4Timeout = ((u4Data>>8) & 0xff); - swCrDebugCheckEnable(prAdapter, fgIsEnable, ucType, u4Timeout); - } - break; -#endif - -#if CFG_SUPPORT_802_11W - case 0x2000: - DBGLOG(RSN, INFO, ("802.11w test 0x%x\n", u2SubId)); - if (u2SubId == 0x0) { - rsnStartSaQuery(prAdapter); - } - if (u2SubId == 0x1) { - rsnStopSaQuery(prAdapter); - } - if (u2SubId == 0x2) { - rsnSaQueryRequest(prAdapter, NULL); - } - if (u2SubId == 0x3) { - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - authSendDeauthFrame(prAdapter, prBssInfo->prStaRecOfAP , NULL, 7, NULL); - } - /* wext_set_mode */ - /* - if (u2SubId == 0x3) { - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_DISABLED; - } - if (u2SubId == 0x4) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_OPTIONAL; - } - if (u2SubId == 0x5) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_REQUIRED; - } - */ - break; -#endif - case 0xFFFF: - { - CMD_ACCESS_REG rCmdAccessReg; -#if 1 //CFG_MT6573_SMT_TEST - if (u2SubId == 0x0123) { - - DBGLOG(HAL, INFO, ("set smt fixed rate: %d \n", u4Data)); - - if((ENUM_REGISTRY_FIXED_RATE_T)(u4Data) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(u4Data); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* abort to re-connect */ -#if 1 - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); -#else - aisBssBeaconTimeout(prAdapter); -#endif - - return WLAN_STATUS_SUCCESS; - - } - else if (u2SubId == 0x1234) { - // 1. Disable On-Lin Scan - prAdapter->fgEnOnlineScan = FALSE; - - // 3. Disable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x904; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - 0 - ); - - // 4. Disable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - // Disalbe auto tx power - // - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - - - // 2. Keep at CAM mode - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 0; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeCAM; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - - // 5. Disable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = TRUE; - } - else if (u2SubId == 0x1235) { - - // 1. Enaable On-Lin Scan - prAdapter->fgEnOnlineScan = TRUE; - - // 3. Enable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x905; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - 0 - ); - - // 4. Enable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - // Enable auto tx power - // - - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - - // 2. Keep at Fast PS - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 2; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeFast_PSP; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - - // 5. Enable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = FALSE; - } -#endif - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - } - } /* switch(u2Id) */ - - return rWlanStatus; -} - /* wlanoidSetSwCtrlWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query EEPROM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidQueryEepromRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvQueryBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryEepromRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryEepromRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write EEPROM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidSetEepromWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - rCmdAccessEeprom.u2Data = prEepromRwInfo->u2EepromData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetEepromWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully transmitted -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully received -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* fails to transmit. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitError */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after exactly one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOneCollision"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOneCollision, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOneCollision */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after more than one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMoreCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMoreCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMoreCollisions */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames -* not transmitted due to excessive collisions. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMaxCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMaxCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMaxCollisions */ - - -#define MTK_CUSTOM_OID_INTERFACE_VERSION 0x00006620 // for WPDWifi DLL -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current the OID interface version, -* which is the interface between the application and driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen) -{ - DEBUGFUNC("wlanoidQueryOidInterfaceVersion"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *(PUINT_32) pvQueryBuffer = MTK_CUSTOM_OID_INTERFACE_VERSION ; - *pu4QueryInfoLen = sizeof(UINT_32); - - DBGLOG(REQ, WARN, ("Custom OID interface version: %#08lX\n", - *(PUINT_32) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryOidInterfaceVersion */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#ifndef LINUX - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcastAddr, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); -#else - return WLAN_STATUS_SUCCESS; -#endif -} /* end of wlanoidQueryMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ - WLAN_STATUS - wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) - { - UINT_8 ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Caller should provide this information */ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = ucNetTypeIndex; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); -} /* end of wlanoidSetMulticastList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4NewPacketFilter; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidSetCurrentPacketFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - ASSERT(pvSetBuffer); - - /* Set the new packet filter. */ - u4NewPacketFilter = *(PUINT_32) pvSetBuffer; - - DBGLOG(REQ, INFO, ("New packet filter: %#08lx\n", u4NewPacketFilter)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set current packet filter! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - do { - /* Verify the bits of the new packet filter. If any bits are set that - we don't support, leave. */ - if (u4NewPacketFilter & ~(PARAM_PACKET_FILTER_SUPPORTED)) { - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - } - -#if DBG - /* Need to enable or disable promiscuous support depending on the new - filter. */ - if (u4NewPacketFilter & PARAM_PACKET_FILTER_PROMISCUOUS) { - DBGLOG(REQ, INFO, ("Enable promiscuous mode\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable promiscuous mode\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_ALL_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable all-multicast mode\n")); - } - else if (u4NewPacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable multicast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable multicast\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_BROADCAST) { - DBGLOG(REQ, INFO, ("Enable Broadcast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable Broadcast\n")); - } -#endif - } while (FALSE); - - if(rStatus == WLAN_STATUS_SUCCESS) { - // Store the packet filter - - prAdapter->u4OsPacketFilter &= PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - return rStatus; - } -} /* wlanoidSetCurrentPacketFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current packet filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryCurrentPacketFilter"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen >= sizeof(UINT_32)) { - ASSERT(pvQueryBuffer); - *(PUINT_32) pvQueryBuffer = prAdapter->u4OsPacketFilter; - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryCurrentPacketFilter */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query ACPI device power state. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PPARAM_DEVICE_POWER_STATE prPowerState; -#endif - - DEBUGFUNC("wlanoidQueryAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - -#if DBG - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvQueryBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Query Power State: D0\n")); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Query Power State: D1\n")); - break; - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Query Power State: D2\n")); - break; - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Query Power State: D3\n")); - break; - default: - break; - } -#endif - - /* Since we will disconnect the newwork, therefore we do not - need to check queue empty */ - *(PPARAM_DEVICE_POWER_STATE) pvQueryBuffer = ParamDeviceStateD3; - //WARNLOG(("Ready to transition to D3\n")); - return WLAN_STATUS_SUCCESS; - -} /* pwrmgtQueryPower */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set ACPI device power state. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PPARAM_DEVICE_POWER_STATE prPowerState; - BOOLEAN fgRetValue = TRUE; - - DEBUGFUNC("wlanoidSetAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - - ASSERT(pvSetBuffer); - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvSetBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Set Power State: D0\n")); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD0); - fgRetValue = nicpmSetAcpiPowerD0(prAdapter); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Set Power State: D1\n")); - /* no break here */ - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Set Power State: D2\n")); - /* no break here */ - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Set Power State: D3\n")); - fgRetValue = nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - break; - default: - break; - } - - if(fgRetValue == TRUE) - return WLAN_STATUS_SUCCESS; - else - return WLAN_STATUS_FAILURE; -} /* end of wlanoidSetAcpiDevicePowerState() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current fragmentation threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFragThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidQueryFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new fragmentation threshold to the -* driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidSetFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RTS threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRtsThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - - if (u4QueryBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - *pu4QueryInfoLen = sizeof(PARAM_RTS_THRESHOLD); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *((PARAM_RTS_THRESHOLD *)pvQueryBuffer) = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryRtsThreshold */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new RTS threshold to the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RTS_THRESHOLD *prRtsThreshold; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_RTS_THRESHOLD); - if (u4SetBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRtsThreshold = (PARAM_RTS_THRESHOLD *)pvSetBuffer; - *prRtsThreshold = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetRtsThreshold */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to turn radio off. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - - DEBUGFUNC("wlanoidSetDisassociate"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set disassociate! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* prepare message to AIS */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - /* indicate for disconnection */ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetDisassociate */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQuery802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - -// *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile); - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_AIS_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - - // hack for CTIA power mode setting function - if (prAdapter->fgEnCtiaPowerMode) { - // set to non-zero value (to prevent MMI query 0, before it intends to set 0, which will skip its following state machine) - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)2; - } - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSet802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - //WARNLOG(("Invalid power mode %d\n", - //*(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - - switch (ePowerMode) { - case Param_PowerModeCAM: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to CAM (%d)\n", ePowerMode)); - break; - case Param_PowerModeMAX_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to MAX PS (%d)\n", ePowerMode)); - break; - case Param_PowerModeFast_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to FAST PS (%d)\n", ePowerMode)); - break; - default: - DBGLOG(INIT, INFO, ("invalid Wi-Fi PS mode setting (%d)\n", ePowerMode)); - break; - } - - return status; - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current status of AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query RF frequency. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].ucPrimaryChannel); - } - else { - *(PUINT_32)pvQueryBuffer = 0; - } - } - else { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum); - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set RF frequency by User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4FreqInKHz; - - DEBUGFUNC("wlanoidSetFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4FreqInKHz = (PUINT_32)pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum - = (UINT_8)nicFreq2ChannelNum(*pu4FreqInKHz); - prAdapter->rWifiVar.rConnSettings.eAdHocBand - = *pu4FreqInKHz < 5000000 ? BAND_2G4 : BAND_5G; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set 802.11 channel of the radio frequency. -* This is a proprietary function call to Lunux currently. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the Beacon Interval from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryBeaconInterval"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - else { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the Beacon Interval to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4BeaconInterval; - - DEBUGFUNC("wlanoidSetBeaconInterval"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4BeaconInterval = (PUINT_32)pvSetBuffer; - - if ((*pu4BeaconInterval < DOT11_BEACON_PERIOD_MIN) || - (*pu4BeaconInterval > DOT11_BEACON_PERIOD_MAX)) { - DBGLOG(REQ, TRACE, ("Invalid Beacon Interval = %ld\n", *pu4BeaconInterval)); - return WLAN_STATUS_INVALID_DATA; - } - - prAdapter->rWlanInfo.u2BeaconPeriod = (UINT_16)*pu4BeaconInterval; - - DBGLOG(REQ, INFO, ("Set beacon interval: %d\n", - prAdapter->rWlanInfo.u2BeaconPeriod)); - - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the ATIM window from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2AtimWindow; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryAtimWindow() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the ATIM window to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4AtimWindow; - - DEBUGFUNC("wlanoidSetAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4AtimWindow = (PUINT_32)pvSetBuffer; - - prAdapter->rWlanInfo.u2AtimWindow = (UINT_16)*pu4AtimWindow; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAtimWindow() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the MAC address which is currently used by the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetCurrentAddr() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the checksum offload function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, u4CSUMFlags; - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidSetCSUMOffload"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4CSUMFlags = *(PUINT_32)pvSetBuffer; - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - for(i = 0 ; i < 6 ; i++) { // set to broadcast address for not-specified - rCmdBasicConfig.rMyMacAddr[i] = 0xff; - } - - rCmdBasicConfig.ucNative80211 = 0; //@FIXME: for Vista - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(1); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(0); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(1); - - if(u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(0); - - prAdapter->u4CSUMFlags = u4CSUMFlags; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetNetworkAddress"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - DBGLOG(REQ, INFO, ("u4IpAddressCount (%d)\n", u4IpAddressCount)); - - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - DBGLOG(REQ, INFO, ("prNetAddrIp->in_addr:%d:%d:%d:%d\n", pucBuf[0], pucBuf[1],pucBuf[2],pucBuf[3])); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set, -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == FALSE) { - // switch to RF Test mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 1; // RF test mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventEnterRfTest, - nicOidCmdEnterRFTestTimeout, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in test mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into normal operation mode from RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == TRUE) { - // switch to normal mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 0; // normal mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventLeaveRfTest, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in normal mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief query for RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestQueryAutoTest"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4QueryBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. QueryBufferLen: %ld.\n", - u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvQueryBuffer; - rStatus = rftestQueryATInfo(prAdapter, - prRfATInfo->u4FuncIndex, - prRfATInfo->u4FuncData, - pvQueryBuffer, - u4QueryBufferLen); - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestSetAutoTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4SetBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. SetBufferLen: %ld.\n", - u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvSetBuffer; - rStatus = rftestSetATInfo(prAdapter, prRfATInfo->u4FuncIndex, prRfATInfo->u4FuncData); - - return rStatus; -} - -/* RF test OID set handler */ -WLAN_STATUS -rftestSetATInfo ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 1; // Set ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; -} - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - P_EVENT_TEST_STATUS prTestStatus; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - if(u4FuncIndex == RF_AT_FUNCID_FW_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = - (prAdapter->rVerInfo.u2FwProductID << 16) | (prAdapter->rVerInfo.u2FwOwnVersion); - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else if(u4FuncIndex == RF_AT_FUNCID_DRV_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = CFG_DRV_OWN_VERSION; - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else { - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryRfTestATInfo; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = pvQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4QueryBufferLen; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 2; // Get ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; - } -} - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ) -{ - CMD_TEST_CTRL_T rCmdTestCtrl; - - ASSERT(prAdapter); - - rCmdTestCtrl.ucAction = 5; // Set Channel Frequency - rCmdTestCtrl.u.u4ChannelFreq = u4FreqInKHz; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - DEBUGFUNC("wlanSendSetQueryCmd"); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI ui to set wapi mode, which is needed to info the the driver -* to operation at WAPI mode while driver initialize. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetWapiMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - /* Todo:: For support WAPI and Wi-Fi at same driver, use the set wapi assoc ie at the check point */ - /* The Adapter Connection setting fgUseWapi will cleat whil oid set mode (infra), */ - /* And set fgUseWapi True while set wapi assoc ie */ - /* policay selection, add key all depend on this flag, */ - /* The fgUseWapi may remove later */ - if (*(PUINT_32)pvSetBuffer) { - prAdapter->fgUseWapi = TRUE; - } - else { - prAdapter->fgUseWapi = FALSE; - } - -#if 0 - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + 4)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + 4; - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_WAPI_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - cp = (PUINT_8)(prWifiCmd->aucBuffer); - - kalMemCopy(cp, (PUINT_8)pvSetBuffer, 4); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -#else - return WLAN_STATUS_SUCCESS; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI to set the assoc info, which is needed to add to -* Association request frame while join WAPI AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_WAPI_INFO_ELEM_T prWapiInfo; - PUINT_8 cp; - UINT_16 u2AuthSuiteCount = 0; - UINT_16 u2PairSuiteCount = 0; - UINT_32 u4AuthKeyMgtSuite = 0; - UINT_32 u4PairSuite = 0; - UINT_32 u4GroupSuite = 0; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWapiAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if (u4SetBufferLen < 20 /* From EID to Group cipher */) { - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = TRUE; - - //if (prWapiInfo->ucElemId != ELEM_ID_WAPI) - // DBGLOG(SEC, TRACE, ("Not WAPI IE ?!\n")); - - //if (prWapiInfo->ucLength < 18) - // return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - prWapiInfo = (P_WAPI_INFO_ELEM_T)pvSetBuffer; - - if (prWapiInfo->ucElemId != ELEM_ID_WAPI) { - DBGLOG(SEC, TRACE, ("Not WAPI IE ?! u4SetBufferLen = %d\n", u4SetBufferLen)); - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prWapiInfo->ucLength < 18) - return WLAN_STATUS_INVALID_LENGTH; - - /* Skip Version check */ - cp = (PUINT_8)&prWapiInfo->u2AuthKeyMgtSuiteCount; - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - - if (u2AuthSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4AuthKeyMgtSuite); - - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info auth mgt suite [%d]: %02x-%02x-%02x-%02x\n", - u2AuthSuiteCount, - (UCHAR) (u4AuthKeyMgtSuite & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 8) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 16) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 24) & 0x000000FF))); - - if (u4AuthKeyMgtSuite != WAPI_AKM_SUITE_802_1X && - u4AuthKeyMgtSuite != WAPI_AKM_SUITE_PSK) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - if (u2PairSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4PairSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info pairwise cipher suite [%d]: %02x-%02x-%02x-%02x\n", - u2PairSuiteCount, - (UCHAR) (u4PairSuite & 0x000000FF), - (UCHAR) ((u4PairSuite >> 8) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 16) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 24) & 0x000000FF))); - - if (u4PairSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info group cipher suite : %02x-%02x-%02x-%02x\n", - (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (u4GroupSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite = u4AuthKeyMgtSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher = u4PairSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher = u4GroupSuite; - - kalMemCopy(prAdapter->prGlueInfo->aucWapiAssocInfoIEs, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the wpi key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer P_PARAM_WPI_KEY, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_WPI_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - PUINT_8 pc; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetWapiKey"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\r\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_WPI_KEY_T) pvSetBuffer; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)pvSetBuffer, 560); - pc = (PUINT_8)pvSetBuffer; - - *pu4SetInfoLen = u4SetBufferLen; - - /* Exception check */ - if (prNewKey->ucKeyID != 0x1 || - prNewKey->ucKeyID != 0x0) { - prNewKey->ucKeyID = prNewKey->ucKeyID & BIT(0); - //DBGLOG(SEC, INFO, ("Invalid WAPI key ID (%d)\r\n", prNewKey->ucKeyID)); - } - - /* Dump P_PARAM_WPI_KEY_T content. */ - DBGLOG(REQ, TRACE, ("Set: Dump P_PARAM_WPI_KEY_T content\r\n")); - DBGLOG(REQ, TRACE, ("TYPE : %d\r\n", prNewKey->eKeyType)); - DBGLOG(REQ, TRACE, ("Direction : %d\r\n", prNewKey->eDirection)); - DBGLOG(REQ, TRACE, ("KeyID : %d\r\n", prNewKey->ucKeyID)); - DBGLOG(REQ, TRACE, ("AddressIndex:\r\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucAddrIndex, 12); - prNewKey->u4LenWPIEK = 16; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPIEK, (UINT_8)prNewKey->u4LenWPIEK); - prNewKey->u4LenWPICK = 16; - - DBGLOG(REQ, TRACE, ("CK Key(%d):\r\n", (UINT_8)prNewKey->u4LenWPICK)); - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPICK, (UINT_8)prNewKey->u4LenWPICK); - DBGLOG(REQ, TRACE, ("PN:\r\n")); - if (prNewKey->eKeyType == 0){ - prNewKey->aucPN[0] = 0x5c; - prNewKey->aucPN[1] = 0x36; - prNewKey->aucPN[2] = 0x5c; - prNewKey->aucPN[3] = 0x36; - prNewKey->aucPN[4] = 0x5c; - prNewKey->aucPN[5] = 0x36; - prNewKey->aucPN[6] = 0x5c; - prNewKey->aucPN[7] = 0x36; - prNewKey->aucPN[8] = 0x5c; - prNewKey->aucPN[9] = 0x36; - prNewKey->aucPN[10] = 0x5c; - prNewKey->aucPN[11] = 0x36; - prNewKey->aucPN[12] = 0x5c; - prNewKey->aucPN[13] = 0x36; - prNewKey->aucPN[14] = 0x5c; - prNewKey->aucPN[15] = 0x36; - } - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucPN, 16); - - prGlueInfo = prAdapter->prGlueInfo; - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetBufferLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_ID_ADD_REMOVE_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - if (prNewKey->eKeyType == ENUM_WPI_PAIRWISE_KEY) { - prCmdKey->ucTxKey = 1; - prCmdKey->ucKeyType = 1; - } - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->aucAddrIndex, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = prNewKey->ucKeyID; - - prCmdKey->ucKeyLen = 32; - - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WPI; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucWPIEK, 16); - - kalMemCopy(prCmdKey->aucKeyMaterial+16, (PUINT_8)prNewKey->aucWPICK, 16); - - kalMemCopy(prCmdKey->aucKeyRsc, (PUINT_8)prNewKey->aucPN, 16); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ -#endif - - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WSC to set the assoc info, which is needed to add to -* Association request frame while join WPS AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWSCAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if(u4SetBufferLen == 0) - return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - kalMemCopy(prAdapter->prGlueInfo->aucWSCAssocInfoIE, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} -#endif - - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidQueryEnableWakeup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - pu4WakeupEventEnable = (PUINT_32)pvQueryBuffer; - - *pu4WakeupEventEnable = prAdapter->u4WakeupEventEnable; - - return WLAN_STATUS_SUCCESS; -} - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidSetEnableWakup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - pu4WakeupEventEnable = (PUINT_32)pvSetBuffer; - prAdapter->u4WakeupEventEnable = *pu4WakeupEventEnable; - - /* FIXME: - * Send Command Event for setting wakeup-pattern / Magic Packet to firmware - * */ - - return WLAN_STATUS_FAILURE; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure PS related settings for WMM-PS test. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T prWmmPsTestInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_SET_WMM_PS_TEST_STRUC_T rSetWmmPsTestParam; - UINT_16 u2CmdBufLen; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("wlanoidSetWiFiWmmPsTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T); - - prWmmPsTestInfo = (P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T) pvSetBuffer; - - rSetWmmPsTestParam.ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - rSetWmmPsTestParam.bmfgApsdEnAc = prWmmPsTestInfo->bmfgApsdEnAc; - rSetWmmPsTestParam.ucIsEnterPsAtOnce = prWmmPsTestInfo->ucIsEnterPsAtOnce; - rSetWmmPsTestParam.ucIsDisableUcTrigger = prWmmPsTestInfo->ucIsDisableUcTrigger; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[rSetWmmPsTestParam.ucNetTypeIndex]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - prPmProfSetupInfo->ucBmpDeliveryAC = (rSetWmmPsTestParam.bmfgApsdEnAc >> 4) & BITS(0, 3); - prPmProfSetupInfo->ucBmpTriggerAC = rSetWmmPsTestParam.bmfgApsdEnAc & BITS(0, 3); - - u2CmdBufLen = sizeof(CMD_SET_WMM_PS_TEST_STRUC_T); - -#if 0 - /* it will apply the disable trig or not immediately */ - if (prPmInfo->ucWmmPsDisableUcPoll && prPmInfo->ucWmmPsConnWithTrig) { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, TRUE); - } - else { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, FALSE); - } -#endif - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_WMM_PS_TEST_PARMS, - TRUE, - FALSE, - TRUE, - NULL, // TODO? - NULL, - u2CmdBufLen, - (PUINT_8)&rSetWmmPsTestParam, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetWiFiWmmPsTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure enable/disable TX A-MPDU feature. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_TX_AMPDU_T rTxAmpdu; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetTxAmpdu"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rTxAmpdu.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_TX_AMPDU_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TX_AMPDU, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rTxAmpdu, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetTxAmpdu */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure reject/accept ADDBA Request. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_ADDBA_REJECT_T rAddbaReject; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetAddbaReject"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rAddbaReject.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_ADDBA_REJECT_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_ADDBA_REJECT, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rAddbaReject, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetAddbaReject */ - - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - - DEBUGFUNC("wlanoidQuerySLTStatus"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)pvQueryBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_LP_SET: - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - prLpSetting->u4BcnRcvNum = prSltInfo->u4BeaconReceiveCnt; - } - break; - default: - // TBD... - break; - } - - return rWlanStatus; -} /* wlanoidQuerySLTStatus */ - -WLAN_STATUS -wlanoidUpdateSLTMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - /* 1. Action: Update or Initial Set - * 2. Role. - * 3. Target MAC address. - * 4. RF BW & Rate Settings - */ - - DEBUGFUNC("wlanoidUpdateSLTMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T) pvSetBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_INITIAL: /* Initialize */ - { - P_PARAM_MTK_SLT_INITIAL_STRUC_T prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_INITIAL_STRUC_T)); - - prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoStaRec != NULL) { - /* The driver has been initialized. */ - prSltInfo->prPseudoStaRec = NULL; - } - - - prSltInfo->prPseudoBssDesc = scanSearchExistingBssDesc(prAdapter, - BSS_TYPE_IBSS, - prMtkSltInit->aucTargetMacAddr, - prMtkSltInit->aucTargetMacAddr); - - prSltInfo->u2SiteID = prMtkSltInit->u2SiteID; - - /* Bandwidth 2.4G: Channel 1~14 - * Bandwidth 5G: *36, 40, 44, 48, 52, 56, 60, 64, - * *100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, - * 149, 153, *157, 161, - * 184, 188, 192, 196, 200, 204, 208, 212, *216 - */ - prSltInfo->ucChannel2G4 = 1 + (prSltInfo->u2SiteID % 4) * 5; - - switch (prSltInfo->ucChannel2G4) { - case 1: - prSltInfo->ucChannel5G = 36; - break; - case 6: - prSltInfo->ucChannel5G = 52; - break; - case 11: - prSltInfo->ucChannel5G = 104; - break; - case 16: - prSltInfo->ucChannel2G4 = 14; - prSltInfo->ucChannel5G = 161; - break; - default: - ASSERT(FALSE); - } - - if (prSltInfo->prPseudoBssDesc == NULL) { - do { - prSltInfo->prPseudoBssDesc = scanAllocateBssDesc(prAdapter); - - if (prSltInfo->prPseudoBssDesc == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - } while (FALSE); - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - if (prBssDesc) { - prBssDesc->eBSSType = BSS_TYPE_IBSS; - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prMtkSltInit->aucTargetMacAddr); - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - - prBssDesc->u2BeaconInterval = 100; - prBssDesc->u2ATIMWindow = 0; - prBssDesc->ucDTIMPeriod = 1; - - prBssDesc->u2IELength = 0; - - prBssDesc->fgIsERPPresent = TRUE; - prBssDesc->fgIsHTPresent = TRUE; - - prBssDesc->u2OperationalRateSet = BIT(RATE_36M_INDEX); - prBssDesc->u2BSSBasicRateSet = BIT(RATE_36M_INDEX); - prBssDesc->fgIsUnknownBssBasicRate = FALSE; - - prBssDesc->fgIsLargerTSF = TRUE; - - prBssDesc->eBand = BAND_2G4; - - prBssDesc->ucChannelNum = prSltInfo->ucChannel2G4; - - prBssDesc->ucPhyTypeSet = PHY_TYPE_SET_802_11ABGN; - - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - } - } - break; - case ENUM_MTK_SLT_FUNC_RATE_SET: /* Update RF Settings. */ - if (prSltInfo->prPseudoStaRec == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - } - else { - P_PARAM_MTK_SLT_TR_TEST_STRUC_T prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_TR_TEST_STRUC_T)); - - prStaRec = prSltInfo->prPseudoStaRec; - prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->eBand = BAND_5G; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel5G; - } - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM24) { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel2G4; - } - - if ((prTRSetting->u4FixedRate & FIXED_BW_DL40) != 0) { - /* RF 40 */ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; /* It would controls RFBW capability in WTBL. */ - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; /* This controls RF BW, RF BW would be 40 only if - * 1. PHY_TYPE_BIT_HT is TRUE. - * 2. SCO is SCA/SCB. - */ - - /* U20/L20 Control. */ - switch (prTRSetting->u4FixedRate & 0xC000) { - case FIXED_EXT_CHNL_U20: - prBssInfo->eBssSCO = CHNL_EXT_SCB; // +2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel += 2; - } - else { - if (prBssInfo->ucPrimaryChannel <5) { - prBssInfo->ucPrimaryChannel = 8; // For channel 1, testing L20 at channel 8. - } - } - break; - case FIXED_EXT_CHNL_L20: - default: /* 40M */ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // -2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel -= 2; - } - else { - if (prBssInfo->ucPrimaryChannel > 10) { - prBssInfo->ucPrimaryChannel = 3; // For channel 11 / 14. testing U20 at channel 3. - } - } - break; - } - } - else { - /* RF 20 */ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - - prStaRec->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - - switch (prTRSetting->u4FixedRate & 0xFF) { - case RATE_OFDM_54M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_54M_INDEX); - break; - case RATE_OFDM_48M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_48M_INDEX); - break; - case RATE_OFDM_36M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - case RATE_OFDM_24M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_24M_INDEX); - break; - case RATE_OFDM_6M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_6M_INDEX); - break; - case RATE_CCK_11M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_11M_INDEX); - break; - case RATE_CCK_1M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_1M_INDEX); - break; - case RATE_GF_MCS_0: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - case RATE_MM_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_HT_GF; -#if 0 // Only for Current Measurement Mode. - prStaRec->u2HtCapInfo |= (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); -#endif - break; - case RATE_GF_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - default: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - } - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - } - break; - case ENUM_MTK_SLT_FUNC_LP_SET: /* Reset LP Test Result. */ - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoBssDesc == NULL) { - /* Please initial SLT Mode first. */ - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - switch (prLpSetting->rLpTestMode) { - case ENUM_MTK_LP_TEST_NORMAL: - /* In normal mode, we would use target MAC address to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - prSltInfo->fgIsDUT = FALSE; - break; - case ENUM_MTK_LP_TEST_GOLDEN_SAMPLE: - /* 1. Lower AIFS of BCN queue. - * 2. Fixed Random Number tobe 0. - */ - prSltInfo->fgIsDUT = FALSE; - /* In LP test mode, we would use MAC address of Golden Sample to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - break; - case ENUM_MTK_LP_TEST_DUT: - /* 1. Enter Sleep Mode. - * 2. Fix random number a large value & enlarge AIFN of BCN queue. - */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssDesc->aucSrcAddr); - prSltInfo->u4BeaconReceiveCnt = 0; - prSltInfo->fgIsDUT = TRUE; - break; - } - - } - - break; - default: - break; - } - - - - - return WLAN_STATUS_FAILURE; - - - return rWlanStatus; -} /* wlanoidUpdateSLTMode */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query NVRAM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - UINT_16 u2Data; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryNvramRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvQueryBuffer; - - if(prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_READ) { - fgStatus = kalCfgDataRead16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - &u2Data); - - if(fgStatus) { - prNvramRwInfo->u2EepromData = u2Data; - DBGLOG(REQ, INFO, ("NVRAM Read: index=%#X, data=%#02X\r\n", - prNvramRwInfo->ucEepromIndex, u2Data)); - } - else{ - DBGLOG(REQ, ERROR, ("NVRAM Read Failed: index=%#x.\r\n", - prNvramRwInfo->ucEepromIndex)); - rStatus = WLAN_STATUS_FAILURE; - } - } - else if (prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_GETSIZE) { - prNvramRwInfo->u2EepromData = CFG_FILE_WIFI_REC_SIZE; - DBGLOG(REQ, INFO, ("EEPROM size =%d\r\n", prNvramRwInfo->u2EepromData)); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - return rStatus; -} /* wlanoidQueryNvramRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write NVRAM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - DEBUGFUNC("wlanoidSetNvramWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvSetBuffer; - - fgStatus = kalCfgDataWrite16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - prNvramRwInfo->u2EepromData - ); - - if(fgStatus == FALSE){ - DBGLOG(REQ, ERROR, ("NVRAM Write Failed.\r\n")); - rStatus = WLAN_STATUS_FAILURE; - } - - return rStatus; -} /* wlanoidSetNvramWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(ENUM_CFG_SRC_TYPE_T); - - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == TRUE) { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_NVRAM; - } - else { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_EEPROM; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(P_ENUM_EEPROM_TYPE_T); - -#if CFG_SUPPORT_NIC_CAPABILITY - if(prAdapter->fgIsEepromUsed == TRUE) { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_PRESENT; - } - else { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; - } -#else - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; -#endif - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_8 pucCountry; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(u4SetBufferLen == 2); - - *pu4SetInfoLen = 2; - - pucCountry = pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) pucCountry[0]) << 8) | ((UINT_16) pucCountry[1]) ; - - prAdapter->prDomainInfo = NULL; /* Force to re-search country code */ - rlmDomainSendCmd(prAdapter, TRUE); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set BT profile or BT information and the -* driver will set the built-in PTA configuration into chip. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - P_PTA_IPC_T prPtaIpc; - - DEBUGFUNC("wlanoidSetBT.\n"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PTA_IPC_T); - if (u4SetBufferLen != sizeof(PTA_IPC_T)) { - WARNLOG(("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT profile because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prPtaIpc = (P_PTA_IPC_T)pvSetBuffer; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: BWCS CMD = %02x%02x%02x%02x\n", - prPtaIpc->u.aucBTPParams[0], prPtaIpc->u.aucBTPParams[1], prPtaIpc->u.aucBTPParams[2], prPtaIpc->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3]); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BWCS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(PTA_IPC_T), - (PUINT_8)prPtaIpc, - NULL, - 0); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current BT profile and BTCR values -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -// P_PARAM_PTA_IPC_T prPtaIpc; -// UINT_32 u4QueryBuffLen; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PTA_IPC_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(PTA_IPC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); -// prPtaIpc = (P_PTA_IPC_T)pvQueryBuffer; -// prPtaIpc->ucCmd = BT_CMD_PROFILE; -// prPtaIpc->ucLen = sizeof(prPtaIpc->u); -// nicPtaGetProfile(prAdapter, (PUINT_8)&prPtaIpc->u, &u4QueryBuffLen); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4SingleAntenna; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4SingleAntenna = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgSingleAntenna) { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 1\r\n"); - *pu4SingleAntenna = 1; - } else { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 0\r\n"); - *pu4SingleAntenna = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - PUINT_32 pu4SingleAntenna; - UINT_32 u4SingleAntenna; - P_PTA_INFO_T prPtaInfo; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - prPtaInfo = &prAdapter->rPtaInfo; - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set antenna because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4SingleAntenna = (PUINT_32)pvSetBuffer; - u4SingleAntenna = *pu4SingleAntenna; - - if (u4SingleAntenna == 0) { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 0\r\n"); - prPtaInfo->fgSingleAntenna = FALSE; - } else { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 1\r\n"); - prPtaInfo->fgSingleAntenna = TRUE; - } - ptaFsmRunEventSetConfig(prAdapter, &prPtaInfo->rPtaParam); - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4Pta; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4Pta = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgEnabled) { - //printk(KERN_WARNING DRV_NAME"PTA = 1\r\n"); - *pu4Pta = 1; - } else { - //printk(KERN_WARNING DRV_NAME"PTA = 0\r\n"); - *pu4Pta = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4PtaCtrl; - UINT_32 u4PtaCtrl; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT setting because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4PtaCtrl = (PUINT_32)pvSetBuffer; - u4PtaCtrl = *pu4PtaCtrl; - - if (u4PtaCtrl == 0) { - //printk(KERN_WARNING DRV_NAME"Set Pta= 0\r\n"); - nicPtaSetFunc(prAdapter, FALSE); - } else { - //printk(KERN_WARNING DRV_NAME"Set Pta= 1\r\n"); - nicPtaSetFunc(prAdapter, TRUE); - } - - return WLAN_STATUS_SUCCESS; -} -#endif - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Tx power profile. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - //P_SET_TXPWR_CTRL_T pTxPwr = (P_SET_TXPWR_CTRL_T)pvSetBuffer; - //UINT_32 i; - WLAN_STATUS rStatus; - - DEBUGFUNC("wlanoidSetTxPower"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - -#if 0 - printk("c2GLegacyStaPwrOffset=%d\n", pTxPwr->c2GLegacyStaPwrOffset); - printk("c2GHotspotPwrOffset=%d\n", pTxPwr->c2GHotspotPwrOffset); - printk("c2GP2pPwrOffset=%d\n", pTxPwr->c2GP2pPwrOffset); - printk("c2GBowPwrOffset=%d\n", pTxPwr->c2GBowPwrOffset); - printk("c5GLegacyStaPwrOffset=%d\n", pTxPwr->c5GLegacyStaPwrOffset); - printk("c5GHotspotPwrOffset=%d\n", pTxPwr->c5GHotspotPwrOffset); - printk("c5GP2pPwrOffset=%d\n", pTxPwr->c5GP2pPwrOffset); - printk("c5GBowPwrOffset=%d\n", pTxPwr->c5GBowPwrOffset); - printk("ucConcurrencePolicy=%d\n", pTxPwr->ucConcurrencePolicy); - - for (i=0; i<14;i++) - printk("acTxPwrLimit2G[%d]=%d\n", i, pTxPwr->acTxPwrLimit2G[i]); - - for (i=0; i<4;i++) - printk("acTxPwrLimit5G[%d]=%d\n", i, pTxPwr->acTxPwrLimit5G[i]); -#endif - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_TXPWR_CTRL, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - TRUE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - u4SetBufferLen, /* u4SetQueryInfoLen */ - (PUINT_8) pvSetBuffer, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return rStatus; - -} - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_CMD_DUMP_MEM prCmdDumpMem; - CMD_DUMP_MEM rCmdDumpMem; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4MemSize = PARAM_MEM_DUMP_MAX_SIZE; - - UINT_32 u4RemainLeng = 0; - UINT_32 u4CurAddr = 0; - UINT_8 ucFragNum = 0; - - prCmdDumpMem = &rCmdDumpMem; - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - - u4RemainLeng = prMemDumpInfo->u4RemainLength; - u4CurAddr = prMemDumpInfo->u4Address + prMemDumpInfo->u4Length; - ucFragNum = prMemDumpInfo->ucFragNum + 1; - - /* Query. If request length is larger than max length, do it as ping pong. - * Send a command and wait for a event. Send next command while the event is received. - * - */ - do{ - UINT_32 u4CurLeng = 0; - - if(u4RemainLeng > u4MemSize) { - u4CurLeng = u4MemSize; - u4RemainLeng -= u4MemSize; - } else { - u4CurLeng = u4RemainLeng; - u4RemainLeng = 0; - } - - prCmdDumpMem->u4Address = u4CurAddr; - prCmdDumpMem->u4Length = u4CurLeng; - prCmdDumpMem->u4RemainLength = u4RemainLeng; - prCmdDumpMem->ucFragNum = ucFragNum; - - DBGLOG(REQ, TRACE, ("[%d] 0x%X, len %d, remain len %d\n", - ucFragNum, - prCmdDumpMem->u4Address, - prCmdDumpMem->u4Length, - prCmdDumpMem->u4RemainLength)); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_DUMP_MEM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMemDump, - nicOidCmdTimeoutCommon, - sizeof(CMD_DUMP_MEM), - (PUINT_8)prCmdDumpMem, - pvQueryBuffer, - u4QueryBufferLen - ); - - }while(FALSE); - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump memory. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - - DEBUGFUNC("wlanoidQueryMemDump"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - DBGLOG(REQ, TRACE, ("Dump 0x%X, len %d\n", prMemDumpInfo->u4Address, prMemDumpInfo->u4Length)); - - prMemDumpInfo->u4RemainLength = prMemDumpInfo->u4Length; - prMemDumpInfo->u4Length = 0; - prMemDumpInfo->ucFragNum = 0; - - return wlanSendMemDumpCmd( - prAdapter, - pvQueryBuffer, - u4QueryBufferLen); - -} /* end of wlanoidQueryMcrRead() */ - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the p2p mode. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - P_PARAM_CUSTOM_P2P_SET_STRUC_T prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T)NULL; - //P_MSG_P2P_NETDEV_REGISTER_T prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - DEBUGFUNC("wlanoidSetP2pMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T); - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T) pvSetBuffer; - - printk("Set P2P enable[%ld] mode[%ld]\n", prSetP2P->u4Enable, prSetP2P->u4Mode); - - /* - * enable = 1, mode = 0 => init P2P network - * enable = 1, mode = 1 => init Soft AP network - * enable = 0 => uninit P2P/AP network - */ - - if (prSetP2P->u4Enable) { - p2pSetMode((prSetP2P->u4Mode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - - -#if 0 - prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_NETDEV_REGISTER_T))); - - if (prP2pNetdevRegMsg == NULL) { - ASSERT(FALSE); - status = WLAN_STATUS_RESOURCES; - return status; - } - - - prP2pNetdevRegMsg->rMsgHdr.eMsgId = MID_MNY_P2P_NET_DEV_REGISTER; - prP2pNetdevRegMsg->fgIsEnable = (prSetP2P->u4Enable == 1)?TRUE:FALSE; - prP2pNetdevRegMsg->ucMode = (UINT_8)prSetP2P->u4Mode; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pNetdevRegMsg, - MSG_SEND_METHOD_BUF); -#endif - - return status; - -} -#endif - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_p2p.c b/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_p2p.c deleted file mode 100755 index be51207a7f16..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/common/wlan_p2p.c +++ /dev/null @@ -1,1811 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/common/wlan_p2p.c#8 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the Wi-Fi Direct commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_p2p.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 23 2011 yuche.tsai - * NULL - * Fix Multicast Issue of P2P. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 wh.su - * [WCXRP00000571] [MT6620 Wi-Fi] [Driver] Not check the p2p role during set key - * Skip the p2p role for adding broadcast key issue. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * fixed compiling error while enable dbg. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix SD Request Query Length issue. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Service Discovery Request. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Wlan OID related function. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DEBUGFUNC("wlanoidSendSetQueryP2PCmd"); - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_P2P_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to Wi-Fi Direct driver -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_KEY_T prNewKey; - - DEBUGFUNC("wlanoidSetAddP2PKey"); - DBGLOG(REQ, INFO, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - /* Verify the key material length for key material buffer */ - else if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check */ - else if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - else if (!(prNewKey->u4KeyLength == CCMP_KEY_LEN) && !(prNewKey->u4KeyLength == TKIP_KEY_LEN)) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - // fill CMD_802_11_KEY - kalMemZero(&rCmdKey, sizeof(CMD_802_11_KEY)); - rCmdKey.ucAddRemove = 1; /* add */ - rCmdKey.ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - rCmdKey.ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prNewKey->arBSSID); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - if(prNewKey->u4KeyLength == CCMP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - else if(prNewKey->u4KeyLength == TKIP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_TKIP; // TKIP - rCmdKey.ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - rCmdKey.ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - kalMemCopy(rCmdKey.aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, rCmdKey.ucKeyLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request Wi-Fi Direct driver to remove keys -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_REMOVE_KEY_T prRemovedKey; - - DEBUGFUNC("wlanoidSetRemoveP2PKey"); - ASSERT(prAdapter); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* There should not be any key operation for P2P Device */ - if(kalP2PGetRole(prAdapter->prGlueInfo) == 0) { - // return WLAN_STATUS_NOT_ACCEPTED; - } - - kalMemZero((PUINT_8)&rCmdKey, sizeof(CMD_802_11_KEY)); - - rCmdKey.ucAddRemove = 0; // remove - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - kalMemCopy(rCmdKey.aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - rCmdKey.ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - - DEBUGFUNC("wlanoidSetP2pNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSetP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - WARNLOG(("Invalid power mode %d\n", - *(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_P2P_INDEX, - ePowerMode, - TRUE); - return status; -} /* end of wlanoidSetP2pPowerSaveProfile() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetP2pSetNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - printk("wlanoidSetP2pSetNetworkAddress (%d)\n", (INT_16)u4SetBufferLen); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - printk("u4IpAddressCount (%ld) \n", (INT_32)u4IpAddressCount); - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - printk("prNetAddrIp->in_addr:%d:%d:%d:%d\n", (UINT_8)pucBuf[0], (UINT_8)pucBuf[1], (UINT_8)pucBuf[2], (UINT_8)pucBuf[3]); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} /* end of wlanoidSetP2pSetNetworkAddress() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - FALSE, // This CMD response is no need to complete the OID. Or the event would unsync. - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetP2PMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_REQUEST)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDRequest(prAdapter, (P_PARAM_P2P_SEND_SD_REQUEST)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidSendP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_RESPONSE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDResponse(prAdapter, (P_PARAM_P2P_SEND_SD_RESPONSE)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - PUINT_8 pucPacketBuffer = NULL, pucTA = NULL; -// PUINT_8 pucChannelNum = NULL; - PUINT_16 pu2PacketLength = NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - UINT_8 ucVersionNum = 0; -// UINT_8 ucChannelNum = 0, ucSeqNum = 0; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_REQUEST)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Request\n")); -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_REQUEST prP2pGetSdReq = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - - pucPacketBuffer = prP2pGetSdReq->aucPacketContent; - pu2PacketLength = &prP2pGetSdReq->u2PacketLength; - pucTA = &prP2pGetSdReq->rTransmitterAddr; - } - else { - P_PARAM_P2P_GET_SD_REQUEST_EX prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST_EX)NULL; - - prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketBuffer = prP2pGetSdReqEx->aucPacketContent; - pu2PacketLength = &prP2pGetSdReqEx->u2PacketLength; - pucTA = &prP2pGetSdReqEx->rTransmitterAddr; - pucChannelNum = &prP2pGetSdReqEx->ucChannelNum; - ucSeqNum = prP2pGetSdReqEx->ucSeqNum; - } - - - rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, - pucPacketBuffer, - (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_REQUEST)), - (PUINT_32)pu2PacketLength, - pucChannelNum, - ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketBuffer; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST) + (*pu2PacketLength)); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST_EX) + (*pu2PacketLength)); - } - - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - //UINT_8 ucSeqNum = 0, - UINT_8 ucVersionNum = 0; - PUINT_8 pucPacketContent = (PUINT_8)NULL, pucTA = (PUINT_8)NULL; - PUINT_16 pu2PacketLength = (PUINT_16)NULL; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_RESPONSE)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Response\n")); - -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_RESPONSE prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_RESPONSE)NULL; - - prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketContent = prP2pGetSdRsp->aucPacketContent; - pucTA = &prP2pGetSdRsp->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRsp->u2PacketLength; - } - else { - P_PARAM_P2P_GET_SD_RESPONSE_EX prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)NULL; - - prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)pvQueryBuffer; - pucPacketContent = prP2pGetSdRspEx->aucPacketContent; - pucTA = &prP2pGetSdRspEx->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRspEx->u2PacketLength; - ucSeqNum = prP2pGetSdRspEx->ucSeqNum; - } - - -// rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, -// pucPacketContent, -// (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_RESPONSE)), -// (PUINT_32)pu2PacketLength, -// NULL, -// ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketContent; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE) + *pu2PacketLength); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE_EX) + *pu2PacketLength); - } - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to terminate P2P Service Discovery Phase -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_P2P_TERMINATE_SD_PHASE prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)NULL; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - break; - } - - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - break; - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_TERMINATE_SD_PHASE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_TERMINATE_SD_PHASE); - rWlanStatus = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)pvSetBuffer; - - if (EQUAL_MAC_ADDR(prP2pTerminateSD->rPeerAddr, aucNullAddr)) { - DBGLOG(P2P, TRACE, ("Service Discovery Version 2.0\n")); -// p2pFuncSetVersionNumOfSD(prAdapter, 2); - } - - //rWlanStatus = p2pFsmRunEventSDAbort(prAdapter); - - } while (FALSE); - - - - - - return rWlanStatus; -} /* end of wlanoidSetP2PTerminateSDPhase() */ - - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SEC_CHECK, - FALSE, - TRUE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - u4SetBufferLen, - (PUINT_8)pvSetBuffer, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetSecCheckRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - //P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = prAdapter->prGlueInfo; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen > 256) { - u4QueryBufferLen = 256; - } - - *pu4QueryInfoLen = u4QueryBufferLen; - - #if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - #endif - kalMemCopy((PUINT_8)(pvQueryBuffer + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer)), prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - - return rWlanStatus; -} /* end of wlanoidGetSecCheckResponse() */ -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - #else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif -} - - - -WLAN_STATUS -wlanoidQueryP2pOpChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucOpChnl = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - -#if 0 - if (!p2pFuncGetCurrentOpChnl(prAdapter, pucOpChnl)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } -#else - rResult = WLAN_STATUS_INVALID_DATA; - break; -#endif - - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_SUCCESS; - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pOpChannel */ - -WLAN_STATUS -wlanoidQueryP2pVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucVersionNum = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pVersion */ - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; - UINT_8 ucVersionNum; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - *pu4SetInfoLen = sizeof(UINT_8); - - if (u4SetBufferLen < sizeof(UINT_8)) { - rResult = WLAN_STATUS_INVALID_LENGTH; - break; - } - - - ucVersionNum = *((PUINT_8)pvSetBuffer); - - - rResult = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rResult; -} /* wlanoidSetP2pSupplicantVersion */ - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->fgIsP2pLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rP2pLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* wlanoidQueryP2pRssi */ -#endif - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/firmware_5931/WIFI_RAM_CODE b/drivers/net/wireless/rockchip_wlan/mt5931/firmware_5931/WIFI_RAM_CODE deleted file mode 100755 index 2634f8392130..000000000000 Binary files a/drivers/net/wireless/rockchip_wlan/mt5931/firmware_5931/WIFI_RAM_CODE and /dev/null differ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/CFG_Wifi_File.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/CFG_Wifi_File.h deleted file mode 100755 index dd1fce8d7bf5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/CFG_Wifi_File.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/CFG_Wifi_File.h#1 $ -*/ - -/*! \file CFG_Wifi_File.h - \brief Collection of NVRAM structure used for YuSu project - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -/* -** $Log: CFG_Wifi_File.h $ - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * update NVRAM data structure definition. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * -*/ - -#ifndef _CFG_WIFI_FILE_H -#define _CFG_WIFI_FILE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -// duplicated from nic_cmd_event.h to avoid header dependency -typedef struct _TX_PWR_PARAM_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} TX_PWR_PARAM_T, *P_TX_PWR_PARAM_T; - -typedef struct _PWR_5G_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} PWR_5G_OFFSET_T, *P_PWR_5G_OFFSET_T; - -typedef struct _PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} PWR_PARAM_T, *P_PWR_PARAM_T; - -typedef struct _MT6620_CFG_PARAM_STRUCT { - /* 256 bytes of MP data */ - UINT_16 u2Part1OwnVersion; - UINT_16 u2Part1PeerVersion; - UINT_8 aucMacAddress[6]; - UINT_8 aucCountryCode[2]; - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - - UINT_8 ucRegChannelListMap; - UINT_8 ucRegChannelListIndex; - UINT_8 aucRegSubbandInfo[36]; - - UINT_8 aucReserved2[256-240]; - - /* 256 bytes of function data */ - UINT_16 u2Part2OwnVersion; - UINT_16 u2Part2PeerVersion; - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - UINT_8 aucPreTailReserved; - UINT_8 aucTailReserved[256-8]; -} MT6620_CFG_PARAM_STRUCT, *P_MT6620_CFG_PARAM_STRUCT, - WIFI_CFG_PARAM_STRUCT, *P_WIFI_CFG_PARAM_STRUCT; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -#define CFG_FILE_WIFI_REC_SIZE sizeof(WIFI_CFG_PARAM_STRUCT) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -nvramOffsetCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion) == 256); - - DATA_STRUC_INSPECTING_ASSERT( - sizeof(WIFI_CFG_PARAM_STRUCT) == 512); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) & 0x0001) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) & 0x0001) == 0); -} -#endif - -#endif /* _CFG_WIFI_FILE_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/config.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/config.h deleted file mode 100755 index 8b28eb5a4793..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/config.h +++ /dev/null @@ -1,1525 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/config.h#2 $ -*/ - -/*! \file "config.h" - \brief This file includes the various configurable parameters for customers - - This file ncludes the configurable parameters except the paramters indicate the turning-on/off of some features -*/ - - - -/* -** $Log: config.h $ - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 05 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined".. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 10 28 2011 cp.wu - * [MT6620 Wi-Fi][Win32 Driver] Enable 5GHz support as default - * enable 5GHz as default for DaVinci trunk and V2.1 driver release . - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * surpress compiler warning for MT6628 build - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * enable divided firmware downloading. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 08 09 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS definition for MT6620. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 24 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * increase RX buffer number to have a 2:1 ping-pong ratio - * - * 06 23 2011 eddie.chen - * [WCXRP00000810] [MT5931][DRV/FW] Adjust TxRx Buffer number and Rx buffer size - * 1. Different TX RX buffer - * 2. Enlarge RX buffer and increase the number 8->11 - * 3. Seperate the WINSZIE and RX buffer number - * 4. Fix RX maximum size in MAC - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 17 2011 terry.wu - * NULL - * . - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add compile flag for persistent group support. - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * Enable RX STBC capability - * - * 04 11 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * . - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. correction: RX aggregation is not limited to SDIO but for all host interface options - * 2. add forward declarations for DBG-only symbols - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * enable roaming feature. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 01 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Fix compile issue - * - * 02 25 2011 george.huang - * [WCXRP00000497] [MT6620 Wi-Fi][FW] Change default UAPSD AC assignment - * Assign all AC default to be U-APSD enabled. - * - * 02 14 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * Let the privacy check at hotspot mode default enable. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 02 01 2011 yarco.yang - * [WCXRP00000417] [MT6620 Driver] Chnage CFG_HANDLE_IST_IN_SDIO_CALLBACK from 1 to 0 for Interoperability - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 19 2011 wh.su - * [WCXRP00000370] [MT6620 Wi-Fi][Driver] Disable Rx RDG for workaround pre-N ccmp issue - * Not announce support Rx RDG for wokaround pre-N ccmp construct AAD issue.. - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW only for Linux. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Enable BOW and 4 physical links. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Modify CFG_SLT_SUPPORT default value. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000341] [MT6620][SLT] Create Branch for SLT SW. - * Update configure flag. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 11 23 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Enable PM function by default - * - * 11 15 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use config.mk WAPI config define. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use the config.mk define. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * enable the WAPI compiling flag as default - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * Add a define CFG_TEST_ANDROID_DIRECT_GO compiling flag - * - * 10 08 2010 cm.chang - * NULL - * Remove unused compiling flags (TX_RDG and TX_SGI) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 05 2010 yarco.yang - * [WCXRP00000082] [MT6620 Wi-Fi][Driver]High throughput performance tuning - * Change CFG_IST_LOOP_COUNT from 2 to 1 to reduce unnecessary SDIO bus access - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 20 2010 cm.chang - * NULL - * Disable RX STBC by BB HEC based on MT6620E1_PHY_BUG v05.docx - * - * 09 17 2010 chinglan.wang - * NULL - * Add performance test option - * - * 09 10 2010 chinglan.wang - * NULL - * Modify for Software Migration Phase 2.10 for E2 FPGA - * - * 09 07 2010 yuche.tsai - * NULL - * Add a CFG for max common IE buffer size. - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 chinglan.wang - * NULL - * Enable the MT6620_FPGA_BWCS value. - * - * 08 30 2010 chinglan.wang - * NULL - * Disable the FW encryption. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Disable BOW Test. - * - * 08 23 2010 jeffrey.chang - * NULL - * fix config.h typo - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 09 2010 wh.su - * NULL - * let the firmware download default enabled. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Add a configure flag for P2P unitest. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 yuche.tsai - * - * Add for SLT support. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * set default compiling flag for security disable. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add config option for cfg80211. - * - * 05 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set ATIMwindow default value to zero. - * - * 05 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add option for FPGA_BWCS & FPGA_V5 - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change firmware name to WIFI_RAM_CODE. - * - * 05 07 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * disable bt-over-wifi configuration, turn it on after firmware finished implementation - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * re-enable power management - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable TCP/IP checksum offloading by default. - * - * 04 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set CFG_ENABLE_FULL_PM to 1 as default to - * 1) acquire own before hardware access - * 2) set own back after hardware access - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 07 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * disable RX-enhanced response temporally, it seems the CQ is not resolved yet. - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * re-enable RX enhanced mode as WPD00003827 is resolved. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn off RX_ENHANCE mode by default. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * * 2) ready bit will be polled for limited iteration - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * firmware download: Linux uses different firmware path - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add options for full PM support. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn on FW-DOWNLOAD as default for release. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 05 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * change CFG_NUM_OF_QM_RX_PKT_NUM to 120 - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * . - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * increase RX buffer number to avoid RX buffer starvation. - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed the number of STA_RECs to 20 - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * and result is retrieved by get ATInfo instead - * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-16 22:12:28 GMT mtk02752 -** enable interrupt enhanced response, TX/RX Aggregation as default -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:38:43 GMT mtk02752 -** eliminate compile options which are obsolete or for emulation purpose -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 13:56:26 GMT MTK02468 -** Added RX buffer reordering configurations -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-12-04 12:09:09 GMT mtk02752 -** once enhanced intr/rx reponse is taken, RX must be access in aggregated basis -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 17:54:50 GMT mtk02752 -** correct a typo -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:47 GMT mtk01084 -** add defines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:33:37 GMT mtk02752 -** add coalescing buffer definition for SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 20:32:40 GMT mtk02752 -** add CFG_TX_MAX_PKT_NUM for limiting queued TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 13:34:44 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION define for source control -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 13:54:11 GMT mtk01084 -** enable INT enhance mode by default -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-30 18:17:14 GMT mtk01084 -** add new define -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-10-29 19:47:36 GMT mtk01084 -** not use HIF loopback mode -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-13 21:58:33 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-09-09 17:26:08 GMT mtk01084 -** add CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:02:30 GMT mtk01426 -** Update CFG_RX_COALESCING_BUFFER_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-21 09:35:51 GMT mtk01461 -** Add CFG_TX_DBG_MGT_BUF to debug MGMT Buffer depth -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:52:21 GMT mtk01426 -** Add OOB_DATA_PRE_FIXED_LEN define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-08 16:51:08 GMT mtk01084 -** update for FW download part -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:33:37 GMT mtk01461 -** Add SW pre test flag CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 00:29:18 GMT mtk01461 -** Fix CFG_COALESCING_BUFFER_SIZE if enable the CFG_TX_FRAGMENT -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-18 20:58:34 GMT mtk01426 -** Add CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-17 20:17:36 GMT mtk01426 -** Add CMD/Response related configure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:21 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:21 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _CONFIG_H -#define _CONFIG_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -/** -#ifndef MT6620 -#define MT6620 -#endif - -#ifdef MT5931 -#undef MT5931 -#endif - -#ifdef MT6628 -#undef MT6628 -#endif -***/ //mark skynine comment - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//2 Flags for OS capability - -#ifdef LINUX - #ifdef CONFIG_X86 - #define MTK_WCN_HIF_SDIO 0 - #else - #define MTK_WCN_HIF_SDIO 0 - #endif -#else - #define MTK_WCN_HIF_SDIO 0 -#endif - -#if (CFG_SUPPORT_AEE == 1) - #define CFG_ENABLE_AEE_MSG 1 -#else - #define CFG_ENABLE_AEE_MSG 0 -#endif - -//2 Flags for Driver Features -#define CFG_TX_FRAGMENT 1 /*!< 1: Enable TX fragmentation - 0: Disable */ -#define CFG_SUPPORT_PERFORMANCE_TEST 0 /*Only for performance Test*/ - -#define CFG_COUNTRY_CODE NULL //"US" - -#ifndef LINUX - #define CFG_FW_FILENAME L"WIFI_RAM_CODE" - #define CFG_FW_FILENAME_E6 L"WIFI_RAM_CODE_E6" -#else - #define CFG_FW_FILENAME "WIFI_RAM_CODE" -#endif - -#define CFG_SUPPORT_802_11D 1 /*!< 1(default): Enable 802.11d - 0: Disable */ - -#define CFG_SUPPORT_SPEC_MGMT 0 /* Spectrum Management (802.11h): TPC and DFS */ -#define CFG_SUPPORT_RRM 0 /* Radio Reasource Measurement (802.11k) */ -#define CFG_SUPPORT_QUIET 0 /* Quiet (802.11h) */ - - -#define CFG_SUPPORT_RX_RDG 0 /* 11n feature. RX RDG capability */ -#define CFG_SUPPORT_MFB 0 /* 802.11n MCS Feedback responder */ -#define CFG_SUPPORT_RX_STBC 1 /* 802.11n RX STBC (1SS) */ -#define CFG_SUPPORT_RX_SGI 1 /* 802.11n RX short GI for both 20M and 40M BW */ -#define CFG_SUPPORT_RX_HT_GF 1 /* 802.11n RX HT green-field capability */ - -/*------------------------------------------------------------------------------ - * SLT Option - *------------------------------------------------------------------------------ - */ -#define CFG_SLT_SUPPORT 0 - - -#ifdef NDIS60_MINIPORT - #define CFG_NATIVE_802_11 1 - - #define CFG_TX_MAX_PKT_SIZE 2304 - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD 0 - #define CFG_WHQL_DOT11_STATISTICS 1 - #define CFG_WHQL_ADD_REMOVE_KEY 1 - #define CFG_WHQL_CUSTOM_IE 1 - #define CFG_WHQL_SAFE_MODE_ENABLED 1 - -#else - #define CFG_TCP_IP_CHKSUM_OFFLOAD 1 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 - #define CFG_TX_MAX_PKT_SIZE 1600 - #define CFG_NATIVE_802_11 0 -#endif - - -//2 Flags for Driver Parameters -/*------------------------------------------------------------------------------ - * Flags for EHPI Interface in Colibri Platform - *------------------------------------------------------------------------------ - */ -#define CFG_EHPI_FASTER_BUS_TIMING 0 /*!< 1: Do workaround for faster bus timing - 0(default): Disable */ - -/*------------------------------------------------------------------------------ - * Flags for HIFSYS Interface - *------------------------------------------------------------------------------ - */ -#ifdef _lint - #define _HIF_SDIO 1 -#endif - -#define CFG_SDIO_INTR_ENHANCE 1 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_RX_ENHANCE 0 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_TX_AGG 1 /*!< 1: Enable SDIO TX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#define CFG_SDIO_RX_AGG 1 /*!< 1: Enable SDIO RX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#if (CFG_SDIO_RX_AGG == 1) && (CFG_SDIO_INTR_ENHANCE == 0) - #error "CFG_SDIO_INTR_ENHANCE should be 1 once CFG_SDIO_RX_AGG equals to 1" -#elif (CFG_SDIO_INTR_ENHANCE == 1 || CFG_SDIO_RX_ENHANCE == 1) && (CFG_SDIO_RX_AGG == 0) - #error "CFG_SDIO_RX_AGG should be 1 once CFG_SDIO_INTR_ENHANCE and/or CFG_SDIO_RX_ENHANCE equals to 1" -#endif - -#define CFG_SDIO_MAX_RX_AGG_NUM 0 /*!< 1: Setting the maximum RX aggregation number - 0(default): no limited */ - -#ifdef WINDOWS_CE - #define CFG_SDIO_PATHRU_MODE 1 /*!< 1: Suport pass through (PATHRU) mode - 0: Disable */ -#else - #define CFG_SDIO_PATHRU_MODE 0 /*!< 0: Always disable if WINDOWS_CE is not defined */ -#endif - -#define CFG_MAX_RX_ENHANCE_LOOP_COUNT 3 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Integration - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) - #define MT6620_FPGA_BWCS 0 - #define MT6620_FPGA_V5 0 - - #if (MT6620_FPGA_BWCS == 1) && (MT6620_FPGA_V5 == 1) - #error - #endif - - #if (MTK_WCN_HIF_SDIO == 1) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #elif !defined(LINUX) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #else - #define CFG_MULTI_ECOVER_SUPPORT 0 - #endif - - #define CFG_ENABLE_CAL_LOG 0 - #define CFG_REPORT_RFBB_VERSION 0 -#elif defined(MT5931) - -#define CFG_MULTI_ECOVER_SUPPORT 0 -#define CFG_ENABLE_CAL_LOG 0 -#define CFG_REPORT_RFBB_VERSION 0 - -#elif defined(MT6628) - -#define CFG_MULTI_ECOVER_SUPPORT 0 - -#define CFG_ENABLE_CAL_LOG 1 -#define CFG_REPORT_RFBB_VERSION 1 - -#endif - -#if (MTK_WCN_HIF_SDIO == 1) -#define CFG_CHIP_RESET_SUPPORT 1 -#else -#define CFG_CHIP_RESET_SUPPORT 0 -#endif - - -/*------------------------------------------------------------------------------ - * Flags for workaround - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) && (MT6620_FPGA_BWCS == 0) && (MT6620_FPGA_V5 == 0) - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#else - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#endif - -/*------------------------------------------------------------------------------ - * Flags for driver version - *------------------------------------------------------------------------------ - */ -#define CFG_DRV_OWN_VERSION ((UINT_16)((NIC_DRIVER_MAJOR_VERSION << 8) | (NIC_DRIVER_MINOR_VERSION))) -#define CFG_DRV_PEER_VERSION ((UINT_16)0x0000) - - -/*------------------------------------------------------------------------------ - * Flags for TX path which are OS dependent - *------------------------------------------------------------------------------ - */ -/*! NOTE(Kevin): If the Network buffer is non-scatter-gather like structure(without - * NETIF_F_FRAGLIST in LINUX), then we can set CFG_TX_BUFFER_IS_SCATTER_LIST to "0" - * for zero copy TX packets. - * For scatter-gather like structure, we set "1", driver will do copy frame to - * internal coalescing buffer before write it to FIFO. - */ -#if defined(LINUX) - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 /*!< 1: Do frame copy before write to TX FIFO. - Used when Network buffer is scatter-gather. - 0(default): Do not copy frame */ -#else /* WINDOWS/WINCE */ - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 -#endif /* LINUX */ - - -#if CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE * NIC_TX_BUFF_SUM) -#else - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE) -#endif /* CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for TX path - *------------------------------------------------------------------------------ - */ - -/*! Maximum number of SW TX packet queue */ -#define CFG_TX_MAX_PKT_NUM 256 - -/*! Maximum number of SW TX CMD packet buffer */ -#define CFG_TX_MAX_CMD_PKT_NUM 32 - -/*! Maximum number of associated STAs */ -#define CFG_NUM_OF_STA_RECORD 20 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for RX path - *------------------------------------------------------------------------------ - */ - -/*! Max. descriptor number - sync. with firmware */ -#if CFG_SLT_SUPPORT -#define CFG_NUM_OF_RX0_HIF_DESC 42 -#else -#define CFG_NUM_OF_RX0_HIF_DESC 16 -#endif -#define CFG_NUM_OF_RX1_HIF_DESC 2 - -/*! Max. buffer hold by QM */ -#define CFG_NUM_OF_QM_RX_PKT_NUM 120 - -/*! Maximum number of SW RX packet buffer */ -#define CFG_RX_MAX_PKT_NUM ((CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC) * 3 \ - + CFG_NUM_OF_QM_RX_PKT_NUM) - -#define CFG_RX_REORDER_Q_THRESHOLD 8 - -#ifndef LINUX -#define CFG_RX_RETAINED_PKT_THRESHOLD (CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC + CFG_NUM_OF_QM_RX_PKT_NUM) -#else -#define CFG_RX_RETAINED_PKT_THRESHOLD 0 -#endif - -/*! Maximum RX packet size, if exceed this value, drop incoming packet */ -/* 7.2.3 Maganement frames */ -#define CFG_RX_MAX_PKT_SIZE ( 28 + 2312 + 12 /*HIF_RX_HEADER_T*/ ) //TODO: it should be 4096 under emulation mode - -/*! Minimum RX packet size, if lower than this value, drop incoming packet */ -#define CFG_RX_MIN_PKT_SIZE 10 /*!< 802.11 Control Frame is 10 bytes */ - -#if CFG_SDIO_RX_AGG - /* extra size for CS_STATUS and enhanced response */ - #define CFG_RX_COALESCING_BUFFER_SIZE ((CFG_NUM_OF_RX0_HIF_DESC + 1) \ - * CFG_RX_MAX_PKT_SIZE) -#else - #define CFG_RX_COALESCING_BUFFER_SIZE (CFG_RX_MAX_PKT_SIZE) -#endif - -/*! RX BA capability */ -#define CFG_NUM_OF_RX_BA_AGREEMENTS 8 -#define CFG_RX_BA_MAX_WINSIZE 16 -#define CFG_RX_BA_INC_SIZE 4 -#define CFG_RX_MAX_BA_TID_NUM 8 -#define CFG_RX_REORDERING_ENABLED 1 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for CMD/RESPONSE - *------------------------------------------------------------------------------ - */ -#define CFG_RESPONSE_POLLING_TIMEOUT 512 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Protocol Stack - *------------------------------------------------------------------------------ - */ -/*! Maximum number of BSS in the SCAN list */ -#define CFG_MAX_NUM_BSS_LIST 64 - -#define CFG_MAX_COMMON_IE_BUF_LEN (1500 * CFG_MAX_NUM_BSS_LIST) / 3 - -/*! Maximum size of IE buffer of each SCAN record */ -#define CFG_IE_BUFFER_SIZE 512 - -/*! Maximum number of STA records */ -#define CFG_MAX_NUM_STA_RECORD 32 - - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Power management - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FULL_PM 1 -#define CFG_ENABLE_WAKEUP_ON_LAN 0 - -#define CFG_INIT_POWER_SAVE_PROF ENUM_PSP_FAST_SWITCH - -#define CFG_INIT_ENABLE_PATTERN_FILTER_ARP 0 - -#define CFG_INIT_UAPSD_AC_BMP 0//(BIT(3) | BIT(2) | BIT(1) | BIT(0)) - -//#define CFG_SUPPORT_WAPI 0 -#define CFG_SUPPORT_WPS 1 -#define CFG_SUPPORT_WPS2 1 - -/*------------------------------------------------------------------------------ - * 802.11i RSN Pre-authentication PMKID cahce maximun number - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_PMKID_CACHE 16 /*!< max number of PMKID cache - 16(default) : The Max PMKID cache */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Ad-Hoc - *------------------------------------------------------------------------------ - */ -#define CFG_INIT_ADHOC_FREQ (2462000) -#define CFG_INIT_ADHOC_MODE AD_HOC_MODE_MIXED_11BG -#define CFG_INIT_ADHOC_BEACON_INTERVAL (100) -#define CFG_INIT_ADHOC_ATIM_WINDOW (0) - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Load Setup Default - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags for enable 802.11A Band setting - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Interrupt Process - *------------------------------------------------------------------------------ - */ -#if defined(_HIF_SDIO) && defined(WINDOWS_CE) - #define CFG_IST_LOOP_COUNT 1 -#else - #define CFG_IST_LOOP_COUNT 1 -#endif /* _HIF_SDIO */ - -#define CFG_INT_WRITE_CLEAR 0 - -#if defined(LINUX) -#define CFG_DBG_GPIO_PINS 0 /* if 1, use MT6516 GPIO pin to log TX behavior */ -#endif - -//2 Flags for Driver Debug Options -/*------------------------------------------------------------------------------ - * Flags of TX Debug Option. NOTE(Kevin): Confirm with SA before modifying following flags. - *------------------------------------------------------------------------------ - */ -#define CFG_DBG_MGT_BUF 1 /*!< 1: Debug statistics usage of MGMT Buffer - 0: Disable */ - -#define CFG_HIF_STATISTICS 0 - -#define CFG_HIF_RX_STARVATION_WARNING 0 - -#define CFG_STARTUP_DEBUG 0 - -#define CFG_RX_PKTS_DUMP 1 - -/*------------------------------------------------------------------------------ - * Flags of Firmware Download Option. - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FW_DOWNLOAD 1 - -#define CFG_ENABLE_FW_DOWNLOAD_ACK 1 -#define CFG_ENABLE_FW_ENCRYPTION 1 - -#if defined(MT6620) || defined(MT6628) - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 1 -#else - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 0 -#endif - - - -#if defined(MT6620) - #if MT6620_FPGA_BWCS - #define CFG_FW_LOAD_ADDRESS 0x10014000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10014001 - #elif MT6620_FPGA_V5 - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #else - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #endif -#elif defined(MT5931) - #define CFG_FW_LOAD_ADDRESS 0xFF900000 - #define CFG_FW_START_ADDRESS 0x00000000 -#elif defined(MT6628) - #define CFG_FW_LOAD_ADDRESS 0x00060000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x00060000 -#endif - - -/*------------------------------------------------------------------------------ - * Flags of Bluetooth-over-WiFi (BT 3.0 + HS) support - *------------------------------------------------------------------------------ - */ - -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_BT_OVER_WIFI 0 - #else - #define CFG_ENABLE_BT_OVER_WIFI 1 - #endif -#else - #define CFG_ENABLE_BT_OVER_WIFI 0 -#endif - -#define CFG_BOW_SEPARATE_DATA_PATH 1 - -#define CFG_BOW_PHYSICAL_LINK_NUM 4 - -#define CFG_BOW_TEST 0 - -#define CFG_BOW_LIMIT_AIS_CHNL 1 - -#define CFG_BOW_SUPPORT_11N 0 - -#define CFG_BOW_RATE_LIMITATION 1 - -/*------------------------------------------------------------------------------ - * Flags of Wi-Fi Direct support - *------------------------------------------------------------------------------ - */ -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 - #else - #define CFG_ENABLE_WIFI_DIRECT 1 - #define CFG_SUPPORT_802_11W 0 /*!< 0(default): Disable 802.11W */ - #endif -#else - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 /* Not support at WinXP */ -#endif - -#define CFG_SUPPORT_PERSISTENT_GROUP 0 - -#define CFG_TEST_WIFI_DIRECT_GO 0 - -#define CFG_TEST_ANDROID_DIRECT_GO 0 - -#define CFG_UNITEST_P2P 0 - -/* - * Enable cfg80211 option after Android 2.2(Froyo) is suggested, - * cfg80211 on linux 2.6.29 is not mature yet - */ -#define CFG_ENABLE_WIFI_DIRECT_CFG_80211 1 - -/*------------------------------------------------------------------------------ - * Configuration Flags (Linux Only) - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_EXT_CONFIG 0 - -/*------------------------------------------------------------------------------ - * Statistics Buffering Mechanism - *------------------------------------------------------------------------------ - */ -#if CFG_SUPPORT_PERFORMANCE_TEST -#define CFG_ENABLE_STATISTICS_BUFFERING 1 -#else -#define CFG_ENABLE_STATISTICS_BUFFERING 0 -#endif -#define CFG_STATISTICS_VALID_CYCLE 2000 -#define CFG_LINK_QUALITY_VALID_PERIOD 5000 - -/*------------------------------------------------------------------------------ - * Migration Option - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_ADHOC 1 -#define CFG_SUPPORT_AAA 1 - - -#if (defined(MT5931) && defined(LINUX)) -#define CFG_SUPPORT_BCM 1 -#define CFG_SUPPORT_BCM_BWCS 1 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 1 -#else -#define CFG_SUPPORT_BCM 0 -#define CFG_SUPPORT_BCM_BWCS 0 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 0 -#endif - -#define CFG_SUPPORT_RDD_TEST_MODE 0 - -#define CFG_SUPPORT_PWR_MGT 1 - -#define CFG_RSN_MIGRATION 1 - -#define CFG_PRIVACY_MIGRATION 1 - -#define CFG_ENABLE_HOTSPOT_PRIVACY_CHECK 1 - -#define CFG_MGMT_FRAME_HANDLING 1 - -#define CFG_MGMT_HW_ACCESS_REPLACEMENT 0 - -#if CFG_SUPPORT_PERFORMANCE_TEST - -#else - -#endif - -#define CFG_SUPPORT_AIS_5GHZ 1 -#define CFG_SUPPORT_BEACON_CHANGE_DETECTION 0 - -/*------------------------------------------------------------------------------ - * Option for NVRAM and Version Checking - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_NVRAM 0 -#define CFG_NVRAM_EXISTENCE_CHECK 1 -#define CFG_SW_NVRAM_VERSION_CHECK 0 -#define CFG_SUPPORT_NIC_CAPABILITY 1 - - -/*------------------------------------------------------------------------------ - * CONFIG_TITLE : Stress Test Option - * OWNER : Puff Wen - * Description : For stress test only. DO NOT enable it while normal operation - *------------------------------------------------------------------------------ - */ -#define CFG_STRESS_TEST_SUPPORT 0 - -/*------------------------------------------------------------------------------ - * Flags for LINT - *------------------------------------------------------------------------------ - */ -#define LINT_SAVE_AND_DISABLE /*lint -save -e* */ - -#define LINT_RESTORE /*lint -restore */ - -#define LINT_EXT_HEADER_BEGIN LINT_SAVE_AND_DISABLE - -#define LINT_EXT_HEADER_END LINT_RESTORE - -/*------------------------------------------------------------------------------ - * Flags of Features - *------------------------------------------------------------------------------ - */ - -#define CFG_SUPPORT_QOS 1 /* Enable/disable QoS TX, AMPDU */ -#define CFG_SUPPORT_AMPDU_TX 1 -#define CFG_SUPPORT_AMPDU_RX 1 -#define CFG_SUPPORT_TSPEC 0 /* Enable/disable TS-related Action frames handling */ -#define CFG_SUPPORT_UAPSD 1 -#define CFG_SUPPORT_UL_PSMP 0 - -#define CFG_SUPPORT_ROAMING 0 /* Roaming System */ -#define CFG_SUPPORT_SWCR 1 - -#define CFG_SUPPORT_ANTI_PIRACY 1 - -#define CFG_SUPPORT_OSC_SETTING 1 - -#if defined(MT5931) -#define CFG_SUPPORT_WHOLE_CHIP_RESET 1 /* for e3 chip only */ -#endif - -#define CFG_SUPPORT_P2P_RSSI_QUERY 0 - -#define CFG_SHOW_MACADDR_SOURCE 1 - -#define CFG_SUPPORT_802_11V 0 /* Support 802.11v Wireless Network Management */ -#define CFG_SUPPORT_802_11V_TIMING_MEASUREMENT 0 -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT == 1) && (CFG_SUPPORT_802_11V == 0) - #error "CFG_SUPPORT_802_11V should be 1 once CFG_SUPPORT_802_11V_TIMING_MEASUREMENT equals to 1" -#endif -#if (CFG_SUPPORT_802_11V == 0) -#define WNM_UNIT_TEST 0 -#endif - -#define CFG_DRIVER_COMPOSE_ASSOC_REQ 1 - -#define CFG_STRICT_CHECK_CAPINFO_PRIVACY 0 - -/*------------------------------------------------------------------------------ - * Flags of bus error tolerance - *------------------------------------------------------------------------------ - */ -#define CFG_FORCE_RESET_UNDER_BUS_ERROR 0 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CONFIG_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/debug.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/debug.h deleted file mode 100755 index 3d5f03e16d0d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/debug.h +++ /dev/null @@ -1,517 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/debug.h#1 $ -*/ - -/*! \file debug.h - \brief Definition of SW debugging level. - - In this file, it describes the definition of various SW debugging levels and - assert functions. -*/ - - - -/* -** $Log: debug.h $ - * - * 12 16 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * fixed the Windows DDK free build compiling error. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 07 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * . - * - * 09 23 2010 cp.wu - * NULL - * add BOW index for debugging message and passing compilation - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add one more debug moduel for P2P. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add debug module index for cnm and ais. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-29 19:47:50 GMT mtk01084 -** add emu catagory -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-17 18:12:04 GMT mtk01426 -** Don't use dynamic memory allocate for debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:29 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _DEBUG_H -#define _DEBUG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#ifndef BUILD_QA_DBG -#define BUILD_QA_DBG 0 -#endif - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" -#if CFG_SUPPORT_XLOG -#include "linux/xlog.h" -#endif - -extern UINT_8 aucDebugModule[]; -extern UINT_32 u4DebugModule; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define debug category (class): - * (1) ERROR (2) WARN (3) STATE (4) EVENT (5) TRACE (6) INFO (7) LOUD (8) TEMP - */ -#define DBG_CLASS_ERROR BIT(0) -#define DBG_CLASS_WARN BIT(1) -#define DBG_CLASS_STATE BIT(2) -#define DBG_CLASS_EVENT BIT(3) -#define DBG_CLASS_TRACE BIT(4) -#define DBG_CLASS_INFO BIT(5) -#define DBG_CLASS_LOUD BIT(6) -#define DBG_CLASS_TEMP BIT(7) -#define DBG_CLASS_MASK BITS(0,7) - - -#if defined(LINUX) -#define DBG_PRINTF_64BIT_DEC "lld" - -#else //Windows -#define DBG_PRINTF_64BIT_DEC "I64d" - -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Define debug module index */ -typedef enum _ENUM_DBG_MODULE_T { - DBG_INIT_IDX = 0, /* For driver initial */ - DBG_HAL_IDX, /* For HAL(HW) Layer */ - DBG_INTR_IDX, /* For Interrupt */ - DBG_REQ_IDX, - DBG_TX_IDX, - DBG_RX_IDX, - DBG_RFTEST_IDX, /* For RF test mode*/ - DBG_EMU_IDX, /* Developer specific */ - - DBG_SW1_IDX, /* Developer specific */ - DBG_SW2_IDX, /* Developer specific */ - DBG_SW3_IDX, /* Developer specific */ - DBG_SW4_IDX, /* Developer specific */ - - DBG_HEM_IDX, /* HEM */ - DBG_AIS_IDX, /* AIS */ - DBG_RLM_IDX, /* RLM */ - DBG_MEM_IDX, /* RLM */ - DBG_CNM_IDX, /* CNM */ - DBG_RSN_IDX, /* RSN */ - DBG_BSS_IDX, /* BSS */ - DBG_SCN_IDX, /* SCN */ - DBG_SAA_IDX, /* SAA */ - DBG_AAA_IDX, /* AAA */ - DBG_P2P_IDX, /* P2P */ - DBG_QM_IDX, /* QUE_MGT */ - DBG_SEC_IDX, /* SEC */ - DBG_BOW_IDX, /* BOW */ - DBG_WAPI_IDX, /* WAPI */ - DBG_ROAMING_IDX, /* ROAMING */ - - DBG_MODULE_NUM /* Notice the XLOG check */ -} ENUM_DBG_MODULE_T; - -//XLOG -//#define XLOG_DBG_MODULE_IDX 28 /* DBG_MODULE_NUM */ -//#if (XLOG_DBG_MODULE_IDX != XLOG_DBG_MODULE_IDX) -//#error "Please modify the DBG_MODULE_NUM and make sure this include at XLOG" -//#endif - -/* Define who owns developer specific index */ -#define DBG_YARCO_IDX DBG_SW1_IDX -#define DBG_KEVIN_IDX DBG_SW2_IDX -#define DBG_CMC_IDX DBG_SW3_IDX -#define DBG_GEORGE_IDX DBG_SW4_IDX - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Debug print format string for the OS system time */ -#define OS_SYSTIME_DBG_FORMAT "0x%08x" - -/* Debug print argument for the OS system time */ -#define OS_SYSTIME_DBG_ARGUMENT(systime) (systime) - -/* Debug print format string for the MAC Address */ -#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" - -/* Debug print argument for the MAC Address */ -#define MAC2STR(a) ((PUINT_8)a)[0], ((PUINT_8)a)[1], ((PUINT_8)a)[2], \ - ((PUINT_8)a)[3], ((PUINT_8)a)[4], ((PUINT_8)a)[5] - -/* The pre-defined format to dump the value of a varaible with its name shown. */ -#define DUMPVAR(variable, format) (#variable " = " format "\n", variable) - -/* The pre-defined format to dump the MAC type value with its name shown. */ -#define DUMPMACADDR(addr) (#addr " = " MACSTR "\n", MAC2STR(addr)) - - -/* Basiclly, we just do renaming of KAL functions although they should - * be defined as "Nothing to do" if DBG=0. But in some compiler, the macro - * syntax does not support #define LOG_FUNC(x,...) - * - * A caller shall not invoke these three macros when DBG=0. - */ -#define LOG_FUNC_TIME kalPrint -#define LOG_FUNC kalPrint - -#if DBG - - #define TMP_BUF_LEN 256 - #define TMP_WBUF_LEN (TMP_BUF_LEN * 2) - - extern PINT_16 g_wbuf_p; - extern PINT_8 g_buf_p; - - /* If __FUNCTION__ is already defined by compiler, we just use it. */ - #if defined(__FUNCTION__) - #define DEBUGFUNC(_Func) - #else - #define DEBUGFUNC(_Func) static const char __FUNCTION__[] = _Func; - #endif - - /* The following macros are used for future debug message. */ - /* TODO(Kevin): We should remove INITLOG/ERRORLOG/WARNLOG macro sooner or later */ - #define INITLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_TRACE) { \ - LOG_FUNC("%s: ", __FUNCTION__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define ERRORLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_ERROR) { \ - LOG_FUNC("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define WARNLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_WARN) { \ - LOG_FUNC("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - /*lint -save -e960 Multiple use of '#/##' */ - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - if (DBG_CLASS_##_Class == DBG_CLASS_ERROR) { \ - LOG_FUNC_TIME("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_WARN) { \ - LOG_FUNC_TIME("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_EVENT) { \ - } \ - else { \ - LOG_FUNC_TIME("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - LOG_FUNC _Fmt; \ - } \ - } - - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory8((PUINT_8) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory32((PUINT_32) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - /*lint -restore */ - - /*lint -save -e961 use of '#undef' is discouraged */ - #undef ASSERT - /*lint -restore */ - - #ifdef _lint - #define ASSERT(_exp) \ - { \ - if (!(_exp)) {do {} while (1);} \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - #endif /* _lint */ - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - - #define DISP_STRING(_str) _str - -#else /* !DBG */ - - #define DEBUGFUNC(_Func) - #define INITLOG(_Fmt) - #define ERRORLOG(_Fmt) - #define WARNLOG(_Fmt) - -#if defined(LINUX) - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - _Module##_##_Class##_LOGFUNC _Fmt; \ - } -#else - #define DBGLOG(_Module, _Class, _Fmt) -#endif - -#if CFG_SUPPORT_XLOG - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - _Module##_##_Class##_LOGFUNC (__FUNCTION__);\ - _Module##_##_Class##_LOGDUMP8(_StartAddr, _Length); \ - } -#else - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) -#endif - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) - - #undef ASSERT - -#if BUILD_QA_DBG - #if defined(LINUX) /* For debugging in Linux w/o GDB */ - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - #else - #ifdef WINDOWS_CE - #define UNICODE_TEXT(_msg) TEXT(_msg) - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - #endif /* WINDOWS_CE */ - #endif /* LINUX */ -#else - #define ASSERT(_exp) - #define ASSERT_REPORT(_exp, _fmt) -#endif /* BUILD_QA_DBG */ - - #define DISP_STRING(_str) "" - -#endif /* DBG */ - -#if CFG_STARTUP_DEBUG - #if defined(LINUX) -#define DBGPRINTF kalPrint - #else -#define DBGPRINTF DbgPrint - #endif -#else -#define DBGPRINTF(...) -#endif - - -/* The following macro is used for debugging packed structures. */ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if DBG -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); - -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length - ); -#elif CFG_SUPPORT_XLOG -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); -#endif /* DBG */ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _DEBUG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/link.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/link.h deleted file mode 100755 index deefb031a2e5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/link.h +++ /dev/null @@ -1,414 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/link.h#1 $ -*/ - -/*! \file link.h - \brief Definition for simple doubly linked list operations. - - In this file we define the simple doubly linked list data structure and its - operation MACROs and INLINE functions. -*/ - - - -/* -** $Log: link.h $ - * - * 08 05 2010 yuche.tsai - * NULL - * Modify a MACRO of LINK_FOR_EACH_SAFE for compile error. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833] [MT6620 and MT5931] Driver migration - * . - * - * - * - * - * May 4 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add WIFI to BORA source control -** \main\maintrunk.MT5921\8 2008-10-16 15:57:11 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\7 2008-08-10 18:47:53 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\6 2007-12-11 00:09:00 GMT mtk01461 -** Add macro for checking valid list -** \main\maintrunk.MT5921\5 2007-11-13 14:27:01 GMT mtk01461 -** Add LINK_IS_INVALID macro -** Revision 1.1.1.1 2007/06/22 08:09:05 MTK01461 -** no message -** -*/ - -#ifndef _LINK_H -#define _LINK_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INVALID_LINK_POISON1 ((VOID *) 0x00100101) // May cause page fault & unalignment issue (data abort) -#define INVALID_LINK_POISON2 ((VOID *) 0x00100201) // Used to verify that nonbody uses non-initialized link entries. - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Simple Doubly Linked List Structures - Entry Part */ -typedef struct _LINK_ENTRY_T { - struct _LINK_ENTRY_T *prNext, *prPrev; -} LINK_ENTRY_T, *P_LINK_ENTRY_T; - -/* Simple Doubly Linked List Structures - List Part */ -typedef struct _LINK_T { - P_LINK_ENTRY_T prNext; - P_LINK_ENTRY_T prPrev; - UINT_32 u4NumElem; -} LINK_T, *P_LINK_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#if 0 // No one use it, temporarily mark it for [Lint - Info 773] -#define LINK_ADDR(rLink) { (P_LINK_ENTRY_T)(&(rLink)), (P_LINK_ENTRY_T)(&(rLink)), 0 } - -#define LINK_DECLARATION(rLink) \ - struct _LINK_T rLink = LINK_ADDR(rLink) -#endif - -#define LINK_INITIALIZE(prLink) \ - do { \ - ((P_LINK_T)(prLink))->prNext = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->prPrev = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->u4NumElem = 0; \ - } while (0) - -#define LINK_ENTRY_INITIALIZE(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)NULL; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)NULL; \ - } while (0) - -#define LINK_ENTRY_INVALID(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)INVALID_LINK_POISON1; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)INVALID_LINK_POISON2; \ - } while (0) - -#define LINK_IS_EMPTY(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)(prLink)) - -/* NOTE: We should do memory zero before any LINK been initiated, so we can check - * if it is valid before parsing the LINK. - */ -#define LINK_IS_INVALID(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)NULL) - -#define LINK_IS_VALID(prLink) (((P_LINK_T)(prLink))->prNext != (P_LINK_ENTRY_T)NULL) - - -#define LINK_ENTRY(ptr, type, member) ENTRY_OF(ptr, type, member) - -/* Insert an entry into a link list's head */ -#define LINK_INSERT_HEAD(prLink, prEntry) \ - { \ - linkAdd(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - - -/* Append an entry into a link list's tail */ -#define LINK_INSERT_TAIL(prLink, prEntry) \ - { \ - linkAddTail(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - -/* Peek head entry, but keep still in link list */ -#define LINK_PEEK_HEAD(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prNext, _type, _member) \ - ) - -/* Peek tail entry, but keep still in link list */ -#define LINK_PEEK_TAIL(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prPrev, _type, _member) \ - ) - -/* Get first entry from a link list */ -/* NOTE: We assume the link entry located at the beginning of "prEntry Type", - * so that we can cast the link entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define LINK_REMOVE_HEAD(prLink, prEntry, _P_TYPE) \ - { \ - ASSERT(prLink); \ - if (LINK_IS_EMPTY(prLink)) { \ - prEntry = (_P_TYPE)NULL; \ - } \ - else { \ - prEntry = (_P_TYPE)(((P_LINK_T)(prLink))->prNext); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } \ - } - -/* Assume the link entry located at the beginning of prEntry Type. - * And also decrease the total entry count. - */ -#define LINK_REMOVE_KNOWN_ENTRY(prLink, prEntry) \ - { \ - ASSERT(prLink); \ - ASSERT(prEntry); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } - -/* Iterate over a link list */ -#define LINK_FOR_EACH(prEntry, prLink) \ - for (prEntry = (prLink)->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prNext) - -/* Iterate over a link list backwards */ -#define LINK_FOR_EACH_PREV(prEntry, prLink) \ - for (prEntry = (prLink)->prPrev; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prPrev) - -/* Iterate over a link list safe against removal of link entry */ -#define LINK_FOR_EACH_SAFE(prEntry, prNextEntry, prLink) \ - for (prEntry = (prLink)->prNext, prNextEntry = prEntry->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = prNextEntry, prNextEntry = prEntry->prNext) - -/* Iterate over a link list of given type */ -#define LINK_FOR_EACH_ENTRY(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember)) - -/* Iterate backwards over a link list of given type */ -#define LINK_FOR_EACH_ENTRY_PREV(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prPrev, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prPrev, _TYPE, rMember)) - -/* Iterate over a link list of given type safe against removal of link entry */ -#define LINK_FOR_EACH_ENTRY_SAFE(prObj, prNextObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember), \ - prNextObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = prNextObj, \ - prNextObj = LINK_ENTRY(prNextObj->rMember.prNext, _TYPE, rMember)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prNew Pointer of new link head -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prNew; - prNew->prNext = prNext; - prNew->prPrev = prPrev; - prPrev->prNext = prNew; - - return; -} /* end of __linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry after the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, (P_LINK_ENTRY_T)prLink, prLink->prNext); - - return; -} /* end of linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry before the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAddTail ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, prLink->prPrev, (P_LINK_ENTRY_T)prLink); - - return; -} /* end of linkAddTail() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkDel ( - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prPrev; - prPrev->prNext = prNext; - - return; -} /* end of __linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list. -* NOTE: the entry is in an initial state. -* -* \param prEntry Specified link head(entry) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkDel ( - IN P_LINK_ENTRY_T prEntry - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - - LINK_ENTRY_INITIALIZE(prEntry); - - return; -} /* end of linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* after the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMove ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAdd(prEntry, prLink); - - return; -} /* end of linkMove() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* before the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMoveTail ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAddTail(prEntry, prLink); - - return; -} /* end of linkMoveTail() */ - -#endif /* _LINK_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/aa_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/aa_fsm.h deleted file mode 100755 index 1e7630c7c7ee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/aa_fsm.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/aa_fsm.h#1 $ -*/ - -/*! \file aa_fsm.h - \brief Declaration of functions and finite state machine for SAA/AAA Module. - - Declaration of functions and finite state machine for SAA/AAA Module. -*/ - - - -/* -** $Log: aa_fsm.h $ - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - - -#ifndef _AA_FSM_H -#define _AA_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Retry interval for retransmiting authentication-request MMPDU. */ -#define TX_AUTHENTICATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Retry interval for retransmiting association-request MMPDU. */ -#define TX_ASSOCIATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Wait for a response to a transmitted authentication-request MMPDU. */ -#define DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* Wait for a response to a transmitted association-request MMPDU. */ -#define DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* The maximum time to wait for JOIN process complete. */ -#define JOIN_FAILURE_TIMEOUT_BEACON_INTERVAL 20 // Beacon Interval, 20 * 100TU = 2 sec. - -/* Retry interval for next JOIN request. */ -#define JOIN_RETRY_INTERVAL_SEC 10 // Seconds - -/* Maximum Retry Count for accept a JOIN request. */ -#define JOIN_MAX_RETRY_FAILURE_COUNT 2 // Times - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AA_STATE_T { - AA_STATE_IDLE = 0, - SAA_STATE_SEND_AUTH1, - SAA_STATE_WAIT_AUTH2, - SAA_STATE_SEND_AUTH3, - SAA_STATE_WAIT_AUTH4, - SAA_STATE_SEND_ASSOC1, - SAA_STATE_WAIT_ASSOC2, - AAA_STATE_SEND_AUTH2, - AAA_STATE_SEND_AUTH4, // We may not use, because P2P GO didn't support WEP and 11r - AAA_STATE_SEND_ASSOC2, - AA_STATE_RESOURCE, // A state for debugging the case of out of msg buffer. - AA_STATE_NUM -} ENUM_AA_STATE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in saa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ); - -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in aaa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AA_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/ais_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/ais_fsm.h deleted file mode 100755 index b153256ed6f3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/ais_fsm.h +++ /dev/null @@ -1,680 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/ais_fsm.h#1 $ -*/ - -/*! \file ais_fsm.h - \brief Declaration of functions and finite state machine for AIS Module. - - Declaration of functions and finite state machine for AIS Module. -*/ - - - -/* -** $Log: ais_fsm.h $ - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 04 25 2011 cp.wu - * [WCXRP00000676] [MT6620 Wi-Fi][Driver] AIS to reduce request channel period from 5 seconds to 2 seconds - * channel interval for joining is shortened to 2 seconds to avoid interruption of concurrent operating network. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 23 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * reduce the backgroud ssid idle time min and max value - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Media disconnect indication and related postpone functions - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventJoinComplete() - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM for aisFsmTest() - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of aisFsmInit() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _AIS_FSM_H -#define _AIS_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define AIS_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define AIS_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define AIS_IBSS_ALONE_TIMEOUT_SEC 20 // seconds - -#define AIS_BEACON_TIMEOUT_COUNT_ADHOC 30 -#define AIS_BEACON_TIMEOUT_COUNT_INFRA 10 -#define AIS_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define AIS_BEACON_MAX_TIMEOUT_TU 100 -#define AIS_BEACON_MIN_TIMEOUT_TU 5 -#define AIS_BEACON_MAX_TIMEOUT_VALID TRUE -#define AIS_BEACON_MIN_TIMEOUT_VALID TRUE - -#define AIS_BMC_MAX_TIMEOUT_TU 100 -#define AIS_BMC_MIN_TIMEOUT_TU 5 -#define AIS_BMC_MAX_TIMEOUT_VALID TRUE -#define AIS_BMC_MIN_TIMEOUT_VALID TRUE - -#define AIS_JOIN_CH_GRANT_THRESHOLD 10 -#define AIS_JOIN_CH_REQUEST_INTERVAL 2000 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AIS_STATE_T { - AIS_STATE_IDLE = 0, - AIS_STATE_SEARCH, - AIS_STATE_SCAN, - AIS_STATE_ONLINE_SCAN, - AIS_STATE_LOOKING_FOR, - AIS_STATE_WAIT_FOR_NEXT_SCAN, - AIS_STATE_REQ_CHANNEL_JOIN, - AIS_STATE_JOIN, - AIS_STATE_IBSS_ALONE, - AIS_STATE_IBSS_MERGE, - AIS_STATE_NORMAL_TR, - AIS_STATE_DISCONNECTING, - AIS_STATE_NUM -} ENUM_AIS_STATE_T; - - -typedef struct _MSG_AIS_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; -} MSG_AIS_ABORT_T, *P_MSG_AIS_ABORT_T; - - -typedef struct _MSG_AIS_IBSS_PEER_FOUND_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - BOOLEAN fgIsMergeIn; /* TRUE: Merge In, FALSE: Merge Out */ - P_STA_RECORD_T prStaRec; -} MSG_AIS_IBSS_PEER_FOUND_T, *P_MSG_AIS_IBSS_PEER_FOUND_T; - -typedef enum _ENUM_AIS_REQUEST_TYPE_T { - AIS_REQUEST_SCAN, - AIS_REQUEST_RECONNECT, - AIS_REQUEST_ROAMING_SEARCH, - AIS_REQUEST_ROAMING_CONNECT, - AIS_REQUEST_NUM -} ENUM_AIS_REQUEST_TYPE_T; - -typedef struct _AIS_REQ_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_AIS_REQUEST_TYPE_T eReqType; -} AIS_REQ_HDR_T, *P_AIS_REQ_HDR_T; - - -typedef struct _AIS_FSM_INFO_T { - ENUM_AIS_STATE_T ePreviousState; - ENUM_AIS_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - -#if CFG_SUPPORT_ROAMING - BOOLEAN fgIsRoamingScanPending; -#endif /* CFG_SUPPORT_ROAMING */ - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - P_STA_RECORD_T prTargetStaRec; /* For JOIN Abort */ - - UINT_32 u4SleepInterval; - - TIMER_T rBGScanTimer; - - TIMER_T rIbssAloneTimer; - - TIMER_T rIndicationOfDisconnectTimer; - - TIMER_T rJoinTimeoutTimer; - - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfScanReq; - - UINT_32 u4ChGrantedInterval; - - UINT_8 ucConnTrialCount; - - UINT_8 ucScanSSIDLen; - UINT_8 aucScanSSID[ELEM_MAX_LEN_SSID]; - - UINT_32 u4ScanIELength; - UINT_8 aucScanIEBuf[MAX_IE_LENGTH]; - - /* Pending Request List */ - LINK_T rPendingReqList; - -} AIS_FSM_INFO_T, *P_AIS_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define aisChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState = (_eNewMediaState)); - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ); - -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Handling for Ad-Hoc Network */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/*----------------------------------------------------------------------------*/ -/* Handling of Incoming Mailbox Message from CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -/*----------------------------------------------------------------------------*/ -/* Generating Outgoing Mailbox Message to CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Indication */ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ); - -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -/*----------------------------------------------------------------------------*/ -/* Disconnection Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -#if CFG_SUPPORT_ROAMING -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ); - -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ); - -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); -#endif /*CFG_SUPPORT_ROAMING */ - -/*----------------------------------------------------------------------------*/ -/* Timeout Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ); - -/*----------------------------------------------------------------------------*/ -/* Internal State Checking */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ); - -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ); - -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ); - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -VOID -aisTest ( - VOID - ); -#endif /* CFG_TEST_MGMT_FSM */ -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AIS_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/assoc.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/assoc.h deleted file mode 100755 index 1dbb06e73f1c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/assoc.h +++ /dev/null @@ -1,147 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/assoc.h#1 $ -*/ - -/*! \file assoc.h - \brief This file contains the ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: assoc.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add assocCheckTxReAssocRespFrame() proto type for P2P usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _ASSOC_H -#define _ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in assoc.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckTxReAssocRespFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ); - -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ASSOC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/auth.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/auth.h deleted file mode 100755 index 6a8bf18b063b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/auth.h +++ /dev/null @@ -1,175 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/auth.h#1 $ -*/ - -/*! \file auth.h - \brief This file contains the authentication REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: auth.h $ - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _AUTH_H -#define _AUTH_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in auth.c */ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ); - -#if !CFG_SUPPORT_AAA -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ); -#else -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ); -#endif /* CFG_SUPPORT_AAA */ - -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ); - -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ); - -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ); - -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AUTH_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/bow_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/bow_fsm.h deleted file mode 100755 index 2e63f9131163..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/bow_fsm.h +++ /dev/null @@ -1,190 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/bow_fsm.h#1 $ -*/ - -/*! \file bow_fsm.h - \brief Declaration of functions and finite state machine for BOW Module. - - Declaration of functions and finite state machine for BOW Module. -*/ - - - -/* -** $Log: bow_fsm.h $ - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add channel previledge into _BOW_FSM_INFO_T. - * - * 09 16 2010 chinghwa.yu - * NULL - * update bowChangeMediaState. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - */ - -#ifndef _BOW_FSM_H -#define _BOW_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOW_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define BOW_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define BOW_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define BOW_BEACON_TIMEOUT_COUNT_STARTING 10 -#define BOW_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define BOW_BEACON_MAX_TIMEOUT_TU 100 -#define BOW_BEACON_MIN_TIMEOUT_TU 5 -#define BOW_BEACON_MAX_TIMEOUT_VALID TRUE -#define BOW_BEACON_MIN_TIMEOUT_VALID TRUE - -#define BOW_BMC_MAX_TIMEOUT_TU 100 -#define BOW_BMC_MIN_TIMEOUT_TU 5 -#define BOW_BMC_MAX_TIMEOUT_VALID TRUE -#define BOW_BMC_MIN_TIMEOUT_VALID TRUE - -#define BOW_JOIN_CH_GRANT_THRESHOLD 10 -#define BOW_JOIN_CH_REQUEST_INTERVAL 2000 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_BOW_STATE_T { - BOW_STATE_IDLE = 0, - BOW_STATE_SEARCH, - BOW_STATE_SCAN, - BOW_STATE_ONLINE_SCAN, - BOW_STATE_LOOKING_FOR, - BOW_STATE_WAIT_FOR_NEXT_SCAN, - BOW_STATE_REQ_CHANNEL_JOIN, - BOW_STATE_REQ_CHANNEL_ALONE, - BOW_STATE_REQ_CHANNEL_MERGE, - BOW_STATE_JOIN, - BOW_STATE_IBSS_ALONE, - BOW_STATE_IBSS_MERGE, - BOW_STATE_NORMAL_TR, - BOW_STATE_NUM -} ENUM_BOW_STATE_T; - -typedef struct _BOW_FSM_INFO_T { - ENUM_BOW_STATE_T ePreviousState; - ENUM_BOW_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - /* Channel Privilege */ - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - BOOLEAN fgIsScanPending; - UINT_32 u4ChGrantedInterval; - - - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - UINT_16 u2BeaconInterval; - - ENUM_BOW_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - ENUM_BOW_STATE_T eForwardState; /* Step to next state if ACTION frame is TX successfully. */ - - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - UINT_8 aucPeerAddress[6]; - - UINT_8 ucRole; - - BOOLEAN fgSupportQoS; - - BOOLEAN fgIsRsponseProbe; /* Indicate if BOW can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfScnMsg; - UINT_8 ucSeqNumOfScanReq; - - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - - /* Timer */ - TIMER_T rStartingBeaconTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rStartingDiscoveryTimer; - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - TIMER_T rIndicationOfDisconnectTimer; - TIMER_T rChGrantedTimer; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - -} BOW_FSM_INFO_T, *P_BOW_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define bowChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].eConnectionState = (_eNewMediaState)); - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/bss.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/bss.h deleted file mode 100755 index b7ff943c2763..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/bss.h +++ /dev/null @@ -1,353 +0,0 @@ -/* -** $Id: @(#) bss.h -*/ - -/*! \file "bss.h" - \brief In this file we define the function prototype used in BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - - - -/* -** $Log: bss.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 01 31 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * Extend TIM PVB, from 2 to 3 octets. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 12 2010 kevin.huang - * NULL - * Update bssProcessProbeRequest() and bssSendBeaconProbeResponse() declarations - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add CTRL FLAGS for Probe Response. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Remove unused typedef. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _BSS_H -#define _BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//NOTE(Kevin): change define for george -//#define MAX_LEN_TIM_PARTIAL_BMP (((MAX_ASSOC_ID + 1) + 7) / 8) /* Required bits = (MAX_ASSOC_ID + 1) */ -#define MAX_LEN_TIM_PARTIAL_BMP ((CFG_STA_REC_NUM + 7) / 8) /* reserve length greater than maximum size of STA_REC */ //obsoleted: Assume we only use AID:1~15 - -/* CTRL FLAGS for Probe Response */ -#define BSS_PROBE_RESP_USE_P2P_DEV_ADDR BIT(0) -#define BSS_PROBE_RESP_INCLUDE_P2P_IE BIT(1) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define bssAssignAssocID(_prStaRec) ((_prStaRec)->ucIndex + 1) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ); - -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ); - -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ); - -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ); - -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ); - -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ); - -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ); - - -/*link function to p2p module for txBcnIETable*/ - -/* WMM-2.2.2 WMM ACI to AC coding */ -typedef enum _ENUM_ACI_T { - ACI_BE = 0, - ACI_BK = 1, - ACI_VI = 2, - ACI_VO = 3, - ACI_NUM -} ENUM_ACI_T, *P_ENUM_ACI_T; - -typedef enum _ENUM_AC_PRIORITY_T { - AC_BK_PRIORITY = 0, - AC_BE_PRIORITY, - AC_VI_PRIORITY, - AC_VO_PRIORITY -} ENUM_AC_PRIORITY_T, *P_ENUM_AC_PRIORITY_T; - - -#endif /* _BSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm.h deleted file mode 100755 index ec41a1155427..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm.h +++ /dev/null @@ -1,323 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1 $ -*/ - -/*! \file "cnm.h" - \brief -*/ - - - -/* -** $Log: cnm.h $ - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Need bandwidth info when requesting channel privilege - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add prototype of cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_H -#define _CNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_CH_REQ_TYPE_T { - CH_REQ_TYPE_JOIN, - CH_REQ_TYPE_P2P_LISTEN, - - CH_REQ_TYPE_NUM -} ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T; - -typedef struct _MSG_CH_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} MSG_CH_REQ_T, *P_MSG_CH_REQ_T; - -typedef struct _MSG_CH_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; -} MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T; - -typedef struct _MSG_CH_GRANT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4GrantInterval; /* In unit of ms */ -} MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T; - -typedef struct _MSG_CH_REOCVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; -} MSG_CH_RECOVER_T, *P_MSG_CH_RECOVER_T; - - -typedef struct _CNM_INFO_T { - UINT_32 u4Reserved; -} CNM_INFO_T, *P_CNM_INFO_T; - -#if CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -typedef struct _DEVICE_TYPE_T { - UINT_16 u2CategoryId; /* Category ID */ - UINT_8 aucOui[4]; /* OUI */ - UINT_16 u2SubCategoryId; /* Sub Category ID */ -} __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T, *P_DEVICE_TYPE_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ); - -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ); - -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ); - -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -cnmMsgDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == - OFFSET_OF(MSG_CH_RECOVER_T,rMsgHdr)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucNetTypeIndex) == - OFFSET_OF(MSG_CH_RECOVER_T,ucNetTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucTokenID) == - OFFSET_OF(MSG_CH_RECOVER_T,ucTokenID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucPrimaryChannel) == - OFFSET_OF(MSG_CH_RECOVER_T,ucPrimaryChannel)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfSco) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfSco)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfBand) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfBand)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eReqType) == - OFFSET_OF(MSG_CH_RECOVER_T,eReqType)); - - return; -} -#endif /* _lint */ - -#endif /* _CNM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_mem.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_mem.h deleted file mode 100755 index ae08428153e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_mem.h +++ /dev/null @@ -1,1159 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm_mem.h#1 $ -*/ - -/*! \file "cnm_mem.h" - \brief In this file we define the structure of the control unit of - packet buffer and MGT/MSG Memory Buffer. -*/ - - - -/* -** $Log: cnm_mem.h $ - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add per STA flow control when STA is in PS mode - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error for P2P related defination. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related fields. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [BORA00000678] [MT6620]WiFi LP integration - * 1. add u8TimeStamp in MSDU_INFO - * 2. move fgIsRxTSFUpdated/fgIsTxTSFUpdated from static to BSS_INFO - * 3. add new member for supporting PM in STA_RECORD, which is for AP PS mode - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 19 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fixed MAC RX Desc be overwritten issue - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 10 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support Rx header translation for A-MSDU subframe - * - * 05 07 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * add more sanity check about setting timer - * - * 04 29 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * modify the compiling flag for RAM usage - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * Added per-TID SN cache in STA_REC - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 11 2010 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * . - * - * 03 05 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove Emulation definition - * - * 03 04 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * eliminate HIF_EMULATION in cnm_mem.h - * - * 03 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add cnmStaRecChangeState() declaration. - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning for some emulation flags - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 10 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Renamed MSDU_INFO.ucFixedRateIndex as MSDU_INFO.ucFixedRateCode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 02 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added SN info in MSDU_INFO_T - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) surpress debug message emitted from hal_hif.c - * 2) add two set of field for recording buffer process time - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1. move wifi task initialization from wifi_task.c(rom) to wifi_init.c (TCM) for integrating F/W download later - * * * * * 2. WIFI_Event_Dispatcher() prototype changed to return to suspend mode from normal operation mode - * * * * * 2. HIF emulation logic revised - * - * 12 29 2009 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * .Using global buffer declaring by SD1 instead of using another one. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * MQM: BA handling - * * TXM: Macros updates - * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 23 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * allocating SRAM for emulation purpose by ruducing MEM_BANK3_BUF_SZ - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove individual DATA_BUF_BLOCK_NUM definition for emulation compiling flagsu1rwduu`wvpghlqg|fh+fmdkb - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 17 2009 george.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 17 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified the DATA_BLOCK_SIZE from 1620 to 2048 - * - * Dec 16 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_SEC_EMULATION flag - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap to sta record - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the buffer for key handshake 1x and cmd key order issue - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the tx call back function proto type to typedef.h - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and modify variable in STA_RECORD_T - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the port block flag - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add variables to STA_RECORD_T for assoc/auth - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the value of STA_WAIT_QUEUE_NUM (from 7 to 5) - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed u2FrameLength from SW_RFB - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed indenting - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Updated MSDU_INFO and SW_RFB - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * update the variable for security - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove the variable to make the compiler ok - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the variable for security module - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo in define of MSG_BUF_BLOCK_SIZE - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Let typedef STA_REC_T precede typedef MSDU_INFO_T and SW_RFB_T - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified MSDU_INFO and STA_REC for TXM and MQM - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename STA_REC_T to STA_RECORD_T and add ucIndex member - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Make sure ucBufferSource the same offset in MSDU_INFO and SW_RFB - * - * Nov 6 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add draft content of MSDU_INFO_T and SW_RFB_T - * - * Oct 30 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 21 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_RX_EMULATION flag - * - * Oct 20 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 9 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added field ucTC to MSDU_INFO_T and field pucHifRxPacket to SW_RFB_T - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_MEM_H -#define _CNM_MEM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef POWER_OF_2 -#define POWER_OF_2(n) BIT(n) -#endif - -/* Size of a basic management buffer block in power of 2 */ -#define MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2 7 /* 7 to the power of 2 = 128 */ -#define MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2 5 /* 5 to the power of 2 = 32 */ - -/* Size of a basic management buffer block */ -#define MGT_BUF_BLOCK_SIZE POWER_OF_2(MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCK_SIZE POWER_OF_2(MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Total size of (n) basic management buffer blocks */ -#define MGT_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Number of management buffer block */ -#define MAX_NUM_OF_BUF_BLOCKS 32 /* Range: 1~32 */ - -/* Size of overall management frame buffer */ -#define MGT_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MGT_BUF_BLOCK_SIZE) -#define MSG_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MSG_BUF_BLOCK_SIZE) - - -/* STA_REC related definitions */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE -#define STA_WAIT_QUEUE_NUM 5 /* Number of SW queues in each STA_REC: AC0~AC4 */ -#define SC_CACHE_INDEX_NUM 5 /* Number of SC caches in each STA_REC: AC0~AC4 */ - - -/* P2P related definitions */ -#ifdef CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if ((MAX_NUM_OF_BUF_BLOCKS > 32) || (MAX_NUM_OF_BUF_BLOCKS <= 0)) - #error > #define MAX_NUM_OF_MGT_BUF_BLOCKS : Out of boundary ! -#elif MAX_NUM_OF_BUF_BLOCKS > 16 - typedef UINT_32 BUF_BITMAP; -#elif MAX_NUM_OF_BUF_BLOCKS > 8 - typedef UINT_16 BUF_BITMAP; -#else - typedef UINT_8 BUF_BITMAP; -#endif /* MAX_NUM_OF_MGT_BUF_BLOCKS */ - - -/* Control variable of TX management memory pool */ -typedef struct _BUF_INFO_T { - PUINT_8 pucBuf; - -#if CFG_DBG_MGT_BUF - UINT_32 u4AllocCount; - UINT_32 u4FreeCount; - UINT_32 u4AllocNullCount; -#endif /* CFG_DBG_MGT_BUF */ - - BUF_BITMAP rFreeBlocksBitmap; - UINT_8 aucAllocatedBlockNum[MAX_NUM_OF_BUF_BLOCKS]; -} BUF_INFO_T, *P_BUF_INFO_T; - - -/* Wi-Fi divides RAM into three types - * MSG: Mailbox message (Small size) - * BUF: HW DMA buffers (HIF/MAC) - */ -typedef enum _ENUM_RAM_TYPE_T { - RAM_TYPE_MSG = 0, - RAM_TYPE_BUF -} ENUM_RAM_TYPE_T, P_ENUM_RAM_TYPE_T; - -typedef enum _ENUM_BUFFER_SOURCE_T { - BUFFER_SOURCE_HIF_TX0 =0, - BUFFER_SOURCE_HIF_TX1, - BUFFER_SOURCE_MAC_RX, - BUFFER_SOURCE_MNG, - BUFFER_SOURCE_BCN, - BUFFER_SOURCE_NUM -} ENUM_BUFFER_SOURCE_T, *P_ENUM_BUFFER_SOURCE_T; - - -typedef enum _ENUM_SEC_STATE_T { - SEC_STATE_INIT, - SEC_STATE_INITIATOR_PORT_BLOCKED, - SEC_STATE_RESPONDER_PORT_BLOCKED, - SEC_STATE_CHECK_OK, - SEC_STATE_SEND_EAPOL, - SEC_STATE_SEND_DEAUTH, - SEC_STATE_COUNTERMEASURE, - SEC_STATE_NUM -} ENUM_SEC_STATE_T; - -typedef struct _TSPEC_ENTRY_T { - UINT_8 ucStatus; - UINT_8 ucToken; /* Dialog Token in ADDTS_REQ or ADDTS_RSP */ - UINT_16 u2MediumTime; - UINT_32 u4TsInfo; - //PARAM_QOS_TS_INFO rParamTsInfo; - /* Add other retained QoS parameters below */ -} TSPEC_ENTRY_T, *P_TSPEC_ENTRY_T, TSPEC_TABLE_ENTRY_T, *P_TSPEC_TABLE_ENTRY_T; - -typedef struct _SEC_INFO_T { - - ENUM_SEC_STATE_T ePreviousState; - ENUM_SEC_STATE_T eCurrentState; - - BOOL fg2nd1xSend; - BOOL fgKeyStored; - - UINT_8 aucStoredKey[64]; - - BOOL fgAllowOnly1x; -} SEC_INFO_T, *P_SEC_INFO_T; - -#define MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS 3 - -#define UPDATE_BSS_RSSI_INTERVAL_SEC 3 // Seconds - -/* Fragment information structure */ -typedef struct _FRAG_INFO_T { - UINT_16 u2NextFragSeqCtrl; - PUINT_8 pucNextFragStart; - P_SW_RFB_T pr1stFrag; - OS_SYSTIME rReceiveLifetimeLimit; /* The receive time of 1st fragment */ -} FRAG_INFO_T, *P_FRAG_INFO_T; - - -/* Define STA record structure */ -struct _STA_RECORD_T { - LINK_ENTRY_T rLinkEntry; - UINT_8 ucIndex; /* Not modify it except initializing */ - - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 aucMacAddr[MAC_ADDR_LEN]; /* MAC address */ - - /* SAA/AAA */ - ENUM_AA_STATE_T eAuthAssocState; /* Store STATE Value used in SAA/AAA */ - UINT_8 ucAuthAssocReqSeqNum; - - ENUM_STA_TYPE_T eStaType; /* Indicate the role of this STA in - * the network (for example, P2P GO) - */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucStaState; /* STATE_1,2,3 */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (may deduced from received BSS_DESC_T) - */ - UINT_8 ucDesiredPhyTypeSet; /* The match result by AND operation of peer's - * PhyTypeSet and ours. - */ - BOOLEAN fgHasBasicPhyType; /* A flag to indicate a Basic Phy Type which - * is used to generate some Phy Attribute IE - * (e.g. capability, MIB) during association. - */ - UINT_8 ucNonHTBasicPhyType; /* The Basic Phy Type choosen among the - * ucDesiredPhyTypeSet. - */ - - UINT_16 u2CapInfo; /* For Infra Mode, to store Capability Info. from Association Resp(SAA). - * For AP Mode, to store Capability Info. from Association Req(AAA). - */ - UINT_16 u2AssocId; /* For Infra Mode, to store AID from Association Resp(SAA). - * For AP Mode, to store the Assigned AID(AAA). - */ - - UINT_16 u2ListenInterval; /* Listen Interval from STA(AAA) */ - - UINT_16 u2DesiredNonHTRateSet; /* Our Current Desired Rate Set after - * match with STA's Operational Rate Set - */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of peer BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of peer BSS */ - - BOOLEAN fgIsMerging; /* For IBSS Mode, to indicate that Merge is ongoing */ - - BOOLEAN fgDiagnoseConnection; /* For Infra/AP Mode, to diagnose the Connection with - * this peer by sending ProbeReq/Null frame */ - - /*------------------------------------------------------------------------------------------*/ - /* 802.11n HT capabilities when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT) is true */ - /* They have the same definition with fields of information element */ - /*------------------------------------------------------------------------------------------*/ - UINT_8 ucMcsSet; /* MCS0~7 rate set of peer BSS */ - BOOLEAN fgSupMcs32; /* MCS32 is supported by peer BSS */ - UINT_16 u2HtCapInfo; /* HT cap info field by HT cap IE */ - UINT_8 ucAmpduParam; /* Field A-MPDU Parameters in HT cap IE */ - UINT_16 u2HtExtendedCap; /* HT extended cap field by HT cap IE */ - UINT_32 u4TxBeamformingCap; /* TX beamforming cap field by HT cap IE */ - UINT_8 ucAselCap; /* ASEL cap field by HT cap IE */ - - UINT_8 ucRCPI; /* RCPI of peer */ - - UINT_8 ucDTIMPeriod; /* Target BSS's DTIM Period, we use this - * value for setup Listen Interval - * TODO(Kevin): TBD - */ - UINT_8 ucAuthAlgNum; /* For Infra/AP Mode, the Auth Alogrithm Num used in Authentication(SAA/AAA) */ - BOOLEAN fgIsReAssoc; /* For Infra/AP Mode, to indicate ReAssoc Frame was in used(SAA/AAA) */ - - UINT_8 ucTxAuthAssocRetryCount;/* For Infra Mode, the Retry Count of TX Auth/Assod Frame(SAA) */ - UINT_8 ucTxAuthAssocRetryLimit;/* For Infra Mode, the Retry Limit of TX Auth/Assod Frame(SAA) */ - - UINT_16 u2StatusCode; /* Status of Auth/Assoc Req */ - UINT_16 u2ReasonCode; /* Reason that been Deauth/Disassoc */ - - - P_IE_CHALLENGE_TEXT_T prChallengeText; /* Point to an allocated buffer for storing Challenge Text for Shared Key Authentication */ - - TIMER_T rTxReqDoneOrRxRespTimer;/* For Infra Mode, a timer used to send a timeout event - * while waiting for TX request done or RX response. - */ - - /*------------------------------------------------------------------------------------------*/ - /* Power Management related fields (for STA/ AP/ P2P/ BOW power saving mode) */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgSetPwrMgtBit; /* For Infra Mode, to indicate that outgoing frame need toggle - * the Pwr Mgt Bit in its Frame Control Field. - */ - - BOOLEAN fgIsInPS; /* For AP Mode, to indicate the client PS state(PM). - * TRUE: In PS Mode; FALSE: In Active Mode. */ - - BOOLEAN fgIsInPsPollSP; /* For Infra Mode, to indicate we've sent a PS POLL to AP and start - * the PS_POLL Service Period(LP) - */ - - BOOLEAN fgIsInTriggerSP; /* For Infra Mode, to indicate we've sent a Trigger Frame to AP and start - * the Delivery Service Period(LP) - */ - - UINT_8 ucBmpDeliveryAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucBmpTriggerAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucUapsdSp; /* Max SP length */ - - /*------------------------------------------------------------------------------------------*/ - - BOOLEAN fgIsRtsEnabled; - - OS_SYSTIME rUpdateTime; /* (4) System Timestamp of Successful TX and RX */ - - OS_SYSTIME rLastJoinTime; /* (4) System Timestamp of latest JOIN process */ - - UINT_8 ucJoinFailureCount; /* Retry Count of JOIN process */ - - LINK_T arStaWaitQueue[STA_WAIT_QUEUE_NUM]; /* For TXM to defer pkt forwarding to MAC TX DMA */ - - UINT_16 au2CachedSeqCtrl[TID_NUM + 1]; /* Duplicate removal for HT STA on a per-TID basis ("+1" is for MMPDU and non-QoS) */ - -#if 0 - /* RXM */ - P_RX_BA_ENTRY_T aprRxBaTable[TID_NUM]; - - /* TXM */ - P_TX_BA_ENTRY_T aprTxBaTable[TID_NUM]; -#endif - - FRAG_INFO_T rFragInfo[MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS]; - - SEC_INFO_T rSecInfo; /* The security state machine */ - - BOOLEAN fgPortBlock; /* The 802.1x Port Control flag */ - - BOOLEAN fgTransmitKeyExist; /* Unicast key exist for this STA */ - - UINT_8 ucWTEntry; - - BOOLEAN fgTxAmpduEn; /* Enable TX AMPDU for this Peer */ - BOOLEAN fgRxAmpduEn; /* Enable RX AMPDU for this Peer */ - - PUINT_8 pucAssocReqIe; - UINT_16 u2AssocReqIeLen; - /*------------------------------------------------------------------------------------------*/ - /* WMM/QoS related fields */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgIsQoS; /* If the STA is associated as a QSTA or QAP (for TX/RX) */ - BOOLEAN fgIsWmmSupported; /* If the peer supports WMM, set to TRUE (for association)*/ - BOOLEAN fgIsUapsdSupported; /* Set according to the scan result (for association) */ - - /*------------------------------------------------------------------------------------------*/ - /* P2P related fields */ - /*------------------------------------------------------------------------------------------*/ -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 u2DevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - - UINT_16 u2ConfigMethods; - - UINT_8 ucDeviceCap; - - UINT_8 ucSecondaryDevTypeCount; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT]; -#endif /* CFG_SUPPORT_P2P */ - - - /*------------------------------------------------------------------------------------------*/ - /* QM related fields */ - /*------------------------------------------------------------------------------------------*/ - - UINT_8 ucFreeQuota; /* Per Sta flow controal. Valid when fgIsInPS is TRUE. Chnage it for per Queue flow control */ - //UINT_8 aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES]; /* used in future */ - UINT_8 ucFreeQuotaForDelivery; - UINT_8 ucFreeQuotaForNonDelivery; - -#if 1 - /*------------------------------------------------------------------------------------------*/ - /* To be removed, this is to make que_mgt compilation success only */ - /*------------------------------------------------------------------------------------------*/ - /* When this STA_REC is in use, set to TRUE. */ - BOOLEAN fgIsValid; - - /* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ - QUE_T arTxQueue[NUM_OF_PER_STA_TX_QUEUES]; - - /* When this STA is in PS Mode, set to TRUE. */ - //BOOLEAN fgIsPS; - - /* When this STA enters Power-Saving, FW will notify the driver with a Session ID */ - UINT_8 ucPsSessionID; - - BOOLEAN fgIsAp; - - /* Reorder Parameter reference table */ - P_RX_BA_ENTRY_T aprRxReorderParamRefTbl[CFG_RX_MAX_BA_TID_NUM]; -#endif - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - TIMINGMSMT_PARAM_T rWNMTimingMsmt; -#endif -}; - -#if 0 -/* use nic_tx.h instead */ -/* MSDU_INFO and SW_RFB structure */ -typedef struct _MSDU_INFO_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - /* TODO: move flags to ucControlFlag */ - - BOOLEAN fgIs1xFrame; /* Set to TRUE for 802.1x frame */ - - /* TXM: For TX Done handling, callback function & parameter (5) */ - BOOLEAN fgIsTxFailed; /* Set to TRUE if transmission failure */ - - PFN_TX_DONE_HANDLER pfTxDoneHandler; - - UINT_64 u8TimeStamp; /* record the TX timestamp */ - - /* TXM: For PS forwarding control (per-STA flow control) */ - UINT_8 ucPsForwardingType; /* Delivery-enabled, non-delivery-enabled, non-PS */ - UINT_8 ucPsSessionID; /* The Power Save session id for PS forwarding control*/ - - /* TXM: For MAC TX DMA operations */ - UINT_8 ucMacTxQueIdx; /* MAC TX queue: AC0-AC6, BCM, or BCN */ - BOOLEAN fgNoAck; /* Set to true if Ack is not requred for this packet */ - BOOLEAN fgBIP; /* Set to true if BIP is used for this packet */ - UINT_8 ucFragTotalCount; - UINT_8 ucFragFinishedCount; - UINT_16 u2FragThreshold; /* Fragmentation threshold without WLAN Header & FCS */ - BOOLEAN fgFixedRate; /* If a fixed rate is used, set to TRUE. */ - UINT_8 ucFixedRateCode; /* The rate code copied to MAC TX Desc */ - UINT_8 ucFixedRateRetryLimit; /* The retry limit when a fixed rate is used */ - BOOLEAN fgIsBmcQueueEnd; /* Set to true if this packet is the end of BMC */ - - /* TXM: For flushing ACL frames */ - UINT_16 u2PalLLH; /* 802.11 PAL LLH */ - //UINT_16 u2LLH; - UINT_16 u2ACLSeq; /* u2LLH+u2ACLSeq for AM HCI flush ACL frame */ - - /* TXM for retransmitting a flushed packet */ - BOOLEAN fgIsSnAssigned; - UINT_16 u2SequenceNumber; /* To remember the Sequence Control field of this MPDU */ - -} MSDU_INFO_T, *P_MSDU_INFO_T; -#endif - -#if 0 -/* nic_rx.h */ -typedef struct _SW_RFB_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - - /* For composing the HIF RX Header (TODO: move flags to ucControlFlag) */ - PUINT_8 pucHifRxPacket; /* Pointer to the Response packet to HIF RX0 or RX1 */ - UINT_16 u2HifRxPacketLength; - UINT_8 ucHeaderOffset; - UINT_8 ucHifRxPortIndex; - - UINT_16 u2SequenceControl; - BOOLEAN fgIsA4Frame; /* (For MAC RX packet parsing) set to TRUE if 4 addresses are present */ - BOOLEAN fgIsBAR; - BOOLEAN fgIsQoSData; - BOOLEAN fgIsAmsduSubframe; /* Set to TRUE for A-MSDU Subframe */ - - /* For HIF RX DMA Desc */ - BOOLEAN fgTUChecksumCheckRequired; - BOOLEAN fgIPChecksumCheckRequired; - UINT_8 ucEtherTypeOffset; - -} SW_RFB_T, *P_SW_RFB_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_MSDU_INFO_T -cnmMgtPktAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cnmMgtPktFree ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -cnmMemInit ( - IN P_ADAPTER_T prAdapter - ); - -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ); - -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ); - -VOID -cnmStaRecInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ); - -P_STA_RECORD_T -cnmStaRecAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex - ); - -VOID -cnmStaRecFree ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSyncToChip - ); - -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ); - -P_STA_RECORD_T -cnmGetStaRecByIndex ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucIndex - ); - -P_STA_RECORD_T -cnmGetStaRecByAddress ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex, - IN UINT_8 aucPeerMACAddress[] - ); - -VOID -cnmStaRecResetStatus ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -cnmStaRecChangeState ( - IN P_ADAPTER_T prAdapter, - IN OUT P_STA_RECORD_T prStaRec, - IN UINT_8 ucNewState - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -cnmMemDataTypeCheck ( - VOID - ) -{ -#if 0 - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == OFFSET_OF(SW_RFB_T,rLinkEntry)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucBuffer) == OFFSET_OF(SW_RFB_T,pucBuffer)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucBufferSource) == - OFFSET_OF(SW_RFB_T,ucBufferSource)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucMacHeader) == - OFFSET_OF(SW_RFB_T,pucMacHeader)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucMacHeaderLength) == - OFFSET_OF(SW_RFB_T,ucMacHeaderLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucPayload) == - OFFSET_OF(SW_RFB_T,pucPayload)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,u2PayloadLength) == - OFFSET_OF(SW_RFB_T,u2PayloadLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,prStaRec) == - OFFSET_OF(SW_RFB_T,prStaRec)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucNetworkTypeIndex) == - OFFSET_OF(SW_RFB_T,ucNetworkTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTID) == - OFFSET_OF(SW_RFB_T,ucTID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgIs802_11Frame) == - OFFSET_OF(SW_RFB_T,fgIs802_11Frame)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucControlFlag) == - OFFSET_OF(SW_RFB_T,ucControlFlag)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rArrivalTime) == - OFFSET_OF(SW_RFB_T,rArrivalTime)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTC) == - OFFSET_OF(SW_RFB_T,ucTC)); - -#if CFG_PROFILE_BUFFER_TRACING - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,eActivity[0]) == - OFFSET_OF(SW_RFB_T,eActivity[0])); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rActivityTime[0]) == - OFFSET_OF(SW_RFB_T,rActivityTime[0])); -#endif - -#if DBG && CFG_BUFFER_FREE_CHK - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgBufferInSource) == - OFFSET_OF(SW_RFB_T,fgBufferInSource)); -#endif - - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(STA_RECORD_T,rLinkEntry) == 0); - - return; -#endif -} -#endif /* _lint */ - -#endif /* _CNM_MEM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_scan.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_scan.h deleted file mode 100755 index b3d2993f801a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_scan.h +++ /dev/null @@ -1,206 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "cnm_scan.h" - \brief - -*/ - - - -/* -** $Log: cnm_scan.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of cnmScanInit() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_SCAN_H -#define _CNM_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define SCN_CHANNEL_DWELL_TIME_MIN_MSEC 12 -#define SCN_CHANNEL_DWELL_TIME_EXT_MSEC 98 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_FULL 3 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_FULL 1 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_PARTIAL 2 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_PARTIAL 1 - - -#define SCN_INTERLACED_CHANNEL_GROUPS_NUM 3 /* Used by partial scan */ - -#define SCN_PARTIAL_SCAN_NUM 3 - -#define SCN_PARTIAL_SCAN_IDLE_MSEC 100 - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* The type of Scan Source */ -typedef enum _ENUM_SCN_REQ_SOURCE_T { - SCN_REQ_SOURCE_HEM = 0, - SCN_REQ_SOURCE_NET_FSM, - SCN_REQ_SOURCE_ROAMING, /* ROAMING Module is independent of AIS FSM */ - SCN_REQ_SOURCE_OBSS, /* 2.4G OBSS scan */ - SCN_REQ_SOURCE_NUM -} ENUM_SCN_REQ_SOURCE_T, *P_ENUM_SCN_REQ_SOURCE_T; - -typedef enum _ENUM_SCAN_PROFILE_T { - SCAN_PROFILE_FULL = 0, - SCAN_PROFILE_PARTIAL, - SCAN_PROFILE_VOIP, - SCAN_PROFILE_FULL_2G4, - SCAN_PROFILE_NUM -} ENUM_SCAN_PROFILE_T, *P_ENUM_SCAN_PROFILE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -VOID -cnmScanInit ( - VOID - ); - -VOID -cnmScanRunEventScanRequest ( - IN P_MSG_HDR_T prMsgHdr - ); - -BOOLEAN -cnmScanRunEventScanAbort ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanProfileSelection ( - VOID - ); - -VOID -cnmScanProcessStart ( - VOID - ); - -VOID -cnmScanProcessStop ( - VOID - ); - -VOID -cnmScanRunEventReqAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanRunEventCancelAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanPartialScanTimeout ( - UINT_32 u4Param - ); - -VOID -cnmScanRunEventScnFsmComplete ( - IN P_MSG_HDR_T prMsgHdr - ); -#endif - - - -#endif /* _CNM_SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_timer.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_timer.h deleted file mode 100755 index b1ed2c6456ad..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/cnm_timer.h +++ /dev/null @@ -1,274 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm_timer.h#1 $ -*/ - -/*! \file cnm_timer.h - \brief Declaration of timer obj and related timer macro for setup time out - event. - - In this file we declare the timer object and provide several macro for - Protocol functional blocks to setup their own time out event. -*/ - - - -/* -** $Log: cnm_timer.h $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the copy time function - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix LINT warnning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_TIMER_H -#define _CNM_TIMER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#undef MSEC_PER_SEC -#define MSEC_PER_SEC 1000 -#undef USEC_PER_MSEC -#define USEC_PER_MSEC 1000 -#define USEC_PER_TU 1024 /* microsecond */ - -#define MSEC_PER_MIN (60 * MSEC_PER_SEC) - - -#define MGMT_MAX_TIMEOUT_INTERVAL ((UINT_32)0x7fffffff) - -#define WAKE_LOCK_MAX_TIME 5 /* Unit: sec */ - -/* If WAKE_LOCK_MAX_TIME is too large, the whole system may always keep awake - * because of periodic timer of OBSS scanning - */ -#if (WAKE_LOCK_MAX_TIME >= OBSS_SCAN_MIN_INTERVAL) - #error WAKE_LOCK_MAX_TIME is too large -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef VOID (*PFN_MGMT_TIMEOUT_FUNC)(P_ADAPTER_T, UINT_32); - -typedef struct _TIMER_T { - LINK_ENTRY_T rLinkEntry; - OS_SYSTIME rExpiredSysTime; - UINT_16 u2Minutes; - UINT_16 u2Reserved; - UINT_32 u4Data; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; -} TIMER_T, *P_TIMER_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Check if time "a" is before time "b" */ -/* In 32-bit variable, 0x00000001~0x7fffffff -> positive number, - * 0x80000000~0xffffffff -> negative number - */ -#define TIME_BEFORE_64bit(a,b) (a < b) - -#define TIME_BEFORE(a,b) ((UINT_32)((UINT_32)(a) - (UINT_32)(b)) > 0x7fffffff) - -/* #define TIME_BEFORE(a,b) ((INT_32)((INT_32)(b) - (INT_32)(a)) > 0) - * may cause UNexpect result between Free build and Check build for WinCE - */ - -#define TIME_AFTER(a,b) TIME_BEFORE(b,a) - -#define SYSTIME_TO_SEC(_systime) ((_systime) / KAL_HZ) -#define SEC_TO_SYSTIME(_sec) ((_sec) * KAL_HZ) - - -/* The macros to convert second & millisecond */ -#define MSEC_TO_SEC(_msec) ((_msec) / MSEC_PER_SEC) -#define SEC_TO_MSEC(_sec) ((UINT_32)(_sec) * MSEC_PER_SEC) - - -/* The macros to convert millisecond & microsecond */ -#define USEC_TO_MSEC(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_USEC(_msec) ((UINT_32)(_msec) * USEC_PER_MSEC) - - -/* The macros to convert TU & microsecond, TU & millisecond */ -#define TU_TO_USEC(_tu) ((_tu) * USEC_PER_TU) -#define TU_TO_MSEC(_tu) USEC_TO_MSEC( TU_TO_USEC(_tu) ) - - -/* The macros to convert TU & & OS system time, round up by 0.5 */ -#define TU_TO_SYSTIME(_tu) MSEC_TO_SYSTIME( TU_TO_MSEC(_tu) ) -#define SYSTIME_TO_TU(_systime) \ - ((SYSTIME_TO_USEC(_systime) + ((USEC_PER_TU / 2) - 1)) / USEC_PER_TU) - - -/* The macros to convert OS system time & microsecond */ -#define SYSTIME_TO_USEC(_systime) (SYSTIME_TO_MSEC(_systime) * USEC_PER_MSEC) - - -/* The macro to get the current OS system time */ -#define GET_CURRENT_SYSTIME(_systime_p) {*(_systime_p) = kalGetTimeTick();} - -/* The macro to copy the system time */ -#define COPY_SYSTIME(_destTime, _srcTime) (_destTime) = (_srcTime) - -/* The macro to get the system time difference between t1 and t2 (t1 - t2) */ -/* #define GET_SYSTIME_DIFFERENCE(_time1, _time2, _diffTime) \ - (_diffTime) = (_time1) - (_time2) */ - -/* The macro to check for the expiration, if TRUE means _currentTime >= _expirationTime */ -#define CHECK_FOR_EXPIRATION(_currentTime, _expirationTime) \ - ( ((UINT_32)(_currentTime) - (UINT_32)(_expirationTime)) <= 0x7fffffffUL) - -/* The macro to check for the timeout */ -#define CHECK_FOR_TIMEOUT(_currentTime, _timeoutStartingTime, _timeout) \ - CHECK_FOR_EXPIRATION((_currentTime), ((_timeoutStartingTime) + (_timeout))) - -/* The macro to set the expiration time with a specified timeout *//* Watch out for round up.*/ -#define SET_EXPIRATION_TIME(_expirationTime, _timeout) \ - { \ - GET_CURRENT_SYSTIME(&(_expirationTime)); \ - (_expirationTime) += (OS_SYSTIME)(_timeout); \ - } - -#define timerRenewTimer(adapter,tmr,interval) \ - timerStartTimer(adapter,tmr,interval,(tmr)->function,(tmr)->data) - -#define MGMT_INIT_TIMER(_adapter_p, _timer, _callbackFunc) \ - timerInitTimer(_adapter_p, &(_timer), (UINT_32)(_callbackFunc)) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ); - -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ); - -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ); - -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ -INT_32 -timerPendingTimer ( - IN P_TIMER_T prTimer - ) -{ - ASSERT(prTimer); - - return prTimer->rLinkEntry.prNext != NULL; -} - -#endif /* _CNM_TIMER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/hem_mbox.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/hem_mbox.h deleted file mode 100755 index d01c9c211f87..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/hem_mbox.h +++ /dev/null @@ -1,441 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/hem_mbox.h#2 $ -*/ - -/*! \file hem_mbox.h - \brief - -*/ - - - -/* -** $Log: hem_mbox.h $ -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some message ID for P2P FSM under provisioning phase. - * - * 08 11 2010 yuche.tsai - * NULL - * Add Message Event ID for P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added MID_RXM_MQM_QOS_ACTION_FRAME for RXM to indicate QoS Action frames to MQM - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename the parameter of mboxDummy() - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove Dummy MSG ID - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add JOIN REQ related MSG ID - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add AIS ABORT MSG ID - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN MSG IDs - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _HEM_MBOX_H -#define _HEM_MBOX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Message IDs */ -typedef enum _ENUM_MSG_ID_T { - MID_MNY_CNM_CH_REQ, /* MANY notify CNM to obtain channel privilege */ - MID_MNY_CNM_CH_ABORT, /* MANY notify CNM to abort/release channel privilege */ - - MID_CNM_AIS_CH_GRANT, /* CNM notify AIS for indicating channel granted */ - MID_CNM_P2P_CH_GRANT, /* CNM notify P2P for indicating channel granted */ - MID_CNM_BOW_CH_GRANT, /* CNM notify BOW for indicating channel granted */ - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_AIS_SCN_SCAN_REQ, /* AIS notify SCN for starting scan */ - MID_AIS_SCN_SCAN_REQ_V2, /* AIS notify SCN for starting scan with multiple SSID support */ - MID_AIS_SCN_SCAN_CANCEL, /* AIS notify SCN for cancelling scan */ - MID_P2P_SCN_SCAN_REQ, /* P2P notify SCN for starting scan */ - MID_P2P_SCN_SCAN_REQ_V2, /* P2P notify SCN for starting scan with multiple SSID support */ - MID_P2P_SCN_SCAN_CANCEL, /* P2P notify SCN for cancelling scan */ - MID_BOW_SCN_SCAN_REQ, /* BOW notify SCN for starting scan */ - MID_BOW_SCN_SCAN_REQ_V2, /* BOW notify SCN for starting scan with multiple SSID support */ - MID_BOW_SCN_SCAN_CANCEL, /* BOW notify SCN for cancelling scan */ - MID_RLM_SCN_SCAN_REQ, /* RLM notify SCN for starting scan (OBSS-SCAN) */ - MID_RLM_SCN_SCAN_REQ_V2, /* RLM notify SCN for starting scan (OBSS-SCAN) with multiple SSID support */ - MID_RLM_SCN_SCAN_CANCEL, /* RLM notify SCN for cancelling scan (OBSS-SCAN)*/ - MID_SCN_AIS_SCAN_DONE, /* SCN notify AIS for scan completion */ - MID_SCN_P2P_SCAN_DONE, /* SCN notify P2P for scan completion */ - MID_SCN_BOW_SCAN_DONE, /* SCN notify BOW for scan completion */ - MID_SCN_RLM_SCAN_DONE, /* SCN notify RLM for scan completion (OBSS-SCAN) */ - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_OID_AIS_FSM_JOIN_REQ, /* OID/IOCTL notify AIS for join */ - MID_OID_AIS_FSM_ABORT, /* OID/IOCTL notify AIS for abort */ - MID_AIS_SAA_FSM_START, /* AIS notify SAA for Starting authentication/association fsm */ - MID_AIS_SAA_FSM_ABORT, /* AIS notify SAA for Aborting authentication/association fsm */ - MID_SAA_AIS_JOIN_COMPLETE, /* SAA notify AIS for indicating join complete */ - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_BOW_SAA_FSM_START, /* BOW notify SAA for Starting authentication/association fsm */ - MID_BOW_SAA_FSM_ABORT, /* BOW notify SAA for Aborting authentication/association fsm */ - MID_SAA_BOW_JOIN_COMPLETE, /* SAA notify BOW for indicating join complete */ -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*--------------------------------------------------*/ - /* P2P Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_P2P_SAA_FSM_START, /* P2P notify SAA for Starting authentication/association fsm */ - MID_P2P_SAA_FSM_ABORT, /* P2P notify SAA for Aborting authentication/association fsm */ - MID_SAA_P2P_JOIN_COMPLETE, /* SAA notify P2P for indicating join complete */ - - MID_MNY_P2P_FUN_SWITCH, /* Enable P2P FSM. */ - MID_MNY_P2P_DEVICE_DISCOVERY, /* Start device discovery. */ - MID_MNY_P2P_CONNECTION_REQ, /* Connection request. */ - MID_MNY_P2P_CONNECTION_ABORT, /* Abort connection request, P2P FSM return to IDLE. */ - MID_MNY_P2P_BEACON_UPDATE, - MID_MNY_P2P_STOP_AP, - MID_MNY_P2P_CHNL_REQ, - MID_MNY_P2P_CHNL_ABORT, - MID_MNY_P2P_MGMT_TX, - MID_MNY_P2P_GROUP_DISSOLVE, - MID_MNY_P2P_MGMT_FRAME_REGISTER, - MID_MNY_P2P_NET_DEV_REGISTER, - MID_MNY_P2P_START_AP, - MID_MNY_P2P_MGMT_FRAME_UPDATE, -#endif - -#if CFG_SUPPORT_ADHOC - MID_SCN_AIS_FOUND_IBSS, /* SCN notify AIS that an IBSS Peer has been found and can merge into */ -#endif /* CFG_SUPPORT_ADHOC */ - - MID_SAA_AIS_FSM_ABORT, /* SAA notify AIS for indicating deauthentication/disassociation */ - - MID_TOTAL_NUM -} ENUM_MSG_ID_T, *P_ENUM_MSG_ID_T; - -/* Message header of inter-components */ -struct _MSG_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_MSG_ID_T eMsgId; -}; - -typedef VOID (*PFN_MSG_HNDL_FUNC)(P_ADAPTER_T, P_MSG_HDR_T); - -typedef struct _MSG_HNDL_ENTRY { - ENUM_MSG_ID_T eMsgId; - PFN_MSG_HNDL_FUNC pfMsgHndl; -} MSG_HNDL_ENTRY_T, *P_MSG_HNDL_ENTRY_T; - -typedef enum _EUNM_MSG_SEND_METHOD_T { - MSG_SEND_METHOD_BUF = 0, /* Message is put in the queue and will be - executed when mailbox is checked. */ - MSG_SEND_METHOD_UNBUF /* The handler function is called immediately - in the same context of the sender */ -} EUNM_MSG_SEND_METHOD_T, *P_EUNM_MSG_SEND_METHOD_T; - - -typedef enum _ENUM_MBOX_ID_T { - MBOX_ID_0 = 0, - MBOX_ID_TOTAL_NUM -} ENUM_MBOX_ID_T, *P_ENUM_MBOX_ID_T; - -/* Define Mailbox structure */ -typedef struct _MBOX_T { - LINK_T rLinkHead; -} MBOX_T, *P_MBOX_T; - -typedef struct _MSG_SAA_FSM_START_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_START_T, *P_MSG_SAA_FSM_START_T; - -typedef struct _MSG_SAA_FSM_COMP_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - WLAN_STATUS rJoinStatus; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prSwRfb; -} MSG_SAA_FSM_COMP_T, *P_MSG_SAA_FSM_COMP_T; - -typedef struct _MSG_SAA_FSM_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_ABORT_T, *P_MSG_SAA_FSM_ABORT_T; - -typedef struct _MSG_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; -} MSG_CONNECTION_ABORT_T, *P_MSG_CONNECTION_ABORT_T; - - - -/* specific message data types */ -typedef MSG_SAA_FSM_START_T MSG_JOIN_REQ_T, *P_MSG_JOIN_REQ_T; -typedef MSG_SAA_FSM_COMP_T MSG_JOIN_COMP_T, *P_MSG_JOIN_COMP_T; -typedef MSG_SAA_FSM_ABORT_T MSG_JOIN_ABORT_T, *P_MSG_JOIN_ABORT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - - -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ); - -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HEM_MBOX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/mib.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/mib.h deleted file mode 100755 index febcfb5fc40c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/mib.h +++ /dev/null @@ -1,157 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/mib.h#1 $ -*/ - -/*! \file mib.h - \brief This file contains the IEEE 802.11 family related MIB definition - for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: mib.h $ - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _MIB_H -#define _MIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Entry in SMT AuthenticationAlgorithms Table: dot11AuthenticationAlgorithmsEntry */ -typedef struct _DOT11_AUTHENTICATION_ALGORITHMS_ENTRY { - BOOLEAN dot11AuthenticationAlgorithmsEnable; /* dot11AuthenticationAlgorithmsEntry 3 */ -} DOT11_AUTHENTICATION_ALGORITHMS_ENTRY, *P_DOT11_AUTHENTICATION_ALGORITHMS_ENTRY; - -/* Entry in SMT dot11RSNAConfigPairwiseCiphersTalbe Table: dot11RSNAConfigPairwiseCiphersEntry */ -typedef struct _DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY -{ - UINT_32 dot11RSNAConfigPairwiseCipher; /* dot11RSNAConfigPairwiseCiphersEntry 2 */ - BOOLEAN dot11RSNAConfigPairwiseCipherEnabled; /* dot11RSNAConfigPairwiseCiphersEntry 3 */ -} DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY, *P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY; - -/* Entry in SMT dot11RSNAConfigAuthenticationSuitesTalbe Table: dot11RSNAConfigAuthenticationSuitesEntry */ -typedef struct _DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY -{ - UINT_32 dot11RSNAConfigAuthenticationSuite; /* dot11RSNAConfigAuthenticationSuitesEntry 2 */ - BOOLEAN dot11RSNAConfigAuthenticationSuiteEnabled; /* dot11RSNAConfigAuthenticationSuitesEntry 3 */ -} DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY, *P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY; - -/* ----- IEEE 802.11 MIB Major sections ----- */ -typedef struct _IEEE_802_11_MIB_T { - /* dot11PrivacyTable (dot11smt 5) */ - UINT_8 dot11WEPDefaultKeyID; /* dot11PrivacyEntry 2 */ - BOOLEAN dot11TranmitKeyAvailable; - UINT_32 dot11WEPICVErrorCount; /* dot11PrivacyEntry 5 */ - UINT_32 dot11WEPExcludedCount; /* dot11PrivacyEntry 6 */ - - /* dot11RSNAConfigTable (dot11smt 8) */ - UINT_32 dot11RSNAConfigGroupCipher; /* dot11RSNAConfigEntry 4 */ - - /* dot11RSNAConfigPairwiseCiphersTable (dot11smt 9) */ - DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY dot11RSNAConfigPairwiseCiphersTable[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - - /* dot11RSNAConfigAuthenticationSuitesTable (dot11smt 10) */ - DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY dot11RSNAConfigAuthenticationSuitesTable[MAX_NUM_SUPPORTED_AKM_SUITES]; - -#if 0 //SUPPORT_WAPI - BOOLEAN fgWapiKeyInstalled; - PARAM_WPI_KEY_T rWapiPairwiseKey[2]; - BOOLEAN fgPairwiseKeyUsed[2]; - UINT_8 ucWpiActivedPWKey; /* Must be 0 or 1, by wapi spec */ - PARAM_WPI_KEY_T rWapiGroupKey[2]; - BOOLEAN fgGroupKeyUsed[2]; -#endif -} IEEE_802_11_MIB_T, *P_IEEE_802_11_MIB_T; - -/* ------------------ IEEE 802.11 non HT PHY characteristics ---------------- */ -typedef const struct _NON_HT_PHY_ATTRIBUTE_T { - UINT_16 u2SupportedRateSet; - - BOOLEAN fgIsShortPreambleOptionImplemented; - - BOOLEAN fgIsShortSlotTimeOptionImplemented; - -} NON_HT_PHY_ATTRIBUTE_T, *P_NON_HT_PHY_ATTRIBUTE_T; - -typedef const struct _NON_HT_ADHOC_MODE_ATTRIBUTE_T { - - ENUM_PHY_TYPE_INDEX_T ePhyTypeIndex; - - UINT_16 u2BSSBasicRateSet; - -} NON_HT_ADHOC_MODE_ATTRIBUTE_T, *P_NON_HT_ADHOC_MODE_ATTRIBUTE_T; - -typedef NON_HT_ADHOC_MODE_ATTRIBUTE_T NON_HT_AP_MODE_ATTRIBUTE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[]; -extern NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[]; -extern NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[]; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_assoc.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_assoc.h deleted file mode 100755 index 270d1d63c7fb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_assoc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_assoc.h#1 $ -*/ - -/*! \file p2p_assoc.h - \brief This file contains the Wi-Fi Direct ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - - -#ifndef _P2P_ASSOC_H -#define _P2P_ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_bss.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_bss.h deleted file mode 100755 index a609476fff7d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_bss.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_bss.h#2 $ -*/ - -/*! \file "p2p_bss.h" - \brief In this file we define the function prototype used in p2p BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - - - - - -#ifndef _P2P_BSS_H -#define _P2P_BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -UINT_32 -p2pGetTxProbRspIeTableSize( - VOID - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_fsm.h deleted file mode 100755 index 01d2c9c9b94f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_fsm.h +++ /dev/null @@ -1,2740 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_fsm.h#23 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: p2p_fsm.h $ -** -** 08 14 2012 yuche.tsai -** NULL -** Fix compile error. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 18 2012 yuche.tsai - * NULL - * add one file. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve class 3 error issue under AP mode. - * - * data frame may TX before Assoc Response TX. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 09 2011 yuche.tsai - * [WCXRP00001093] [Need Patch][Volunteer Patch] Service Discovery 2.0 state transition issue. - * Fix SD2.0 issue which may cause KE. (Monkey test) - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 09 01 2011 yuche.tsai - * NULL - * Fix channel stay interval. - * Sync channel stay interval & channel request interval under AP mode.. - * - * 08 30 2011 yuche.tsai - * [WCXRP00000953] [Volunteer Patch][Driver] Hot Spot Channel ASSERT issue. - * Fix hot spot FW assert issue when under concurrent case. (DBG enable only) - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 yuche.tsai - * NULL - * Fix scan policy for Active LISTEN scan. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Support TX Deauth Issue. - * - * 07 26 2011 yuche.tsai - * [WCXRP00000875] [Volunteer Patch][WiFi Direct][Driver] MT6620 IOT issue with realtek test bed solution. - * Turn off persistent group support for V2.0 release. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix compile error. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix MT6620 WiFi Direct IOT Issue with BCM solution. - * - * 07 11 2011 yuche.tsai - * [WCXRP00000845] [Volunteer Patch][WiFi Direct] WiFi Direct Device Connection Robustness - * Enhance Connection Robustness. - * - * 07 08 2011 yuche.tsai - * [WCXRP00000841] [Volunteer Patch][WiFi Direct] Group Owner Setting. - * Update GO configure parameter. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Disable enhancement II for debugging. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 04 20 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove CFG_WIFI_DIRECT_MOVED. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add two function prototype. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add connection abort message event prototype. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 16 2010 yuche.tsai - * NULL - * Fix P2P Intended Interface Address Bug. - * Extend GO Nego Timeout Time. - * - * 08 16 2010 yuche.tsai - * NULL - * Extend Listen Interval default value & remove deprecated variable. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add function prototype for join complete. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function proto type for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Change P2P data structure for supporting - * 1. P2P Device discovery. - * 2. P2P Group Negotiation. - * 3. P2P JOIN - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix some P2P function prototype. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify parameter of p2pStartGO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _P2P_FSM_H -#define _P2P_FSM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#define CID52_53_54 0 - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - - - - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_P2P_STATE_T { - P2P_STATE_IDLE = 0, - P2P_STATE_SCAN, - P2P_STATE_AP_CHANNEL_DETECT, - P2P_STATE_REQING_CHANNEL, - P2P_STATE_CHNL_ON_HAND, /* Requesting Channel to Send Specific Frame. */ - P2P_STATE_GC_JOIN, /* Sending Specific Frame. May extending channel by other event. */ - P2P_STATE_NUM -} ENUM_P2P_STATE_T, *P_ENUM_P2P_STATE_T; - - -typedef enum _ENUM_CHANNEL_REQ_TYPE_T { - CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL, - CHANNEL_REQ_TYPE_GC_JOIN_REQ, - CHANNEL_REQ_TYPE_GO_START_BSS -} -ENUM_CHANNEL_REQ_TYPE_T, *P_ENUM_CHANNEL_REQ_TYPE_T; - - -typedef enum _ENUM_BUFFER_TYPE_T { - ENUM_FRAME_TYPE_EXTRA_IE_BEACON, - ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP, - ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP, - ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE, - ENUM_FRAME_TYPE_BEACON_TEMPLATE, - ENUM_FRAME_IE_NUM -} ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T; - -typedef enum _ENUM_HIDDEN_SSID_TYPE_T { - ENUM_HIDDEN_SSID_NONE, - ENUM_HIDDEN_SSID_LEN, - ENUM_HIDDEN_SSID_ZERO_CONTENT, - ENUM_HIDDEN_SSID_NUM -} -ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T; - -typedef struct _P2P_SSID_STRUCT_T { - UINT_8 aucSsid[32]; - UINT_8 ucSsidLen; -} P2P_SSID_STRUCT_T, *P_P2P_SSID_STRUCT_T; - -typedef struct _P2P_STATION_INFO_T { - UINT_32 u4InactiveTime; - UINT_32 u4RxBytes; // TODO: - UINT_32 u4TxBytes; // TODO: - UINT_32 u4RxPackets; // TODO: - UINT_32 u4TxPackets; // TODO: - // TODO: Add more for requirement. -} -P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T; - - -typedef struct _AP_CRYPTO_SETTINGS_T { - UINT_32 u4WpaVersion; - UINT_32 u4CipherGroup; - INT_32 i4NumOfCiphers; - UINT_32 aucCiphersPairwise[5]; - INT_32 i4NumOfAkmSuites; - UINT_32 aucAkmSuites[2]; - BOOLEAN fgIsControlPort; - UINT_16 u2ControlPortBE; - BOOLEAN fgIsControlPortEncrypt; -} AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T; - -/*-------------------- P2P FSM ACTION STRUCT ---------------------*/ -typedef struct _P2P_CHNL_REQ_INFO_T { - BOOLEAN fgIsChannelRequested; - UINT_8 ucSeqNumOfChReq; - UINT_64 u8Cookie; - UINT_8 ucReqChnlNum; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eChnlSco; - UINT_32 u4MaxInterval; - ENUM_CHANNEL_REQ_TYPE_T eChannelReqType; - - UINT_8 ucOriChnlNum; - ENUM_BAND_T eOriBand; - ENUM_CHNL_EXT_T eOriChnlSco; -} P2P_CHNL_REQ_INFO_T, *P_P2P_CHNL_REQ_INFO_T; - -typedef struct _P2P_SCAN_REQ_INFO_T { - ENUM_SCAN_TYPE_T eScanType; - ENUM_SCAN_CHANNEL eChannelSet; - UINT_16 u2PassiveDewellTime; - UINT_8 ucSeqNumOfScnMsg; - BOOLEAN fgIsAbort; - BOOLEAN fgIsScanRequest; - UINT_8 ucNumChannelList; - RF_CHANNEL_INFO_T arScanChannelList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - P2P_SSID_STRUCT_T rSsidStruct; // Currently we can only take one SSID scan request -} -P2P_SCAN_REQ_INFO_T, *P_P2P_SCAN_REQ_INFO_T; - -typedef struct _P2P_CONNECTION_REQ_INFO_T { - - BOOLEAN fgIsConnRequest; - P2P_SSID_STRUCT_T rSsidStruct; - UINT_8 aucBssid[MAC_ADDR_LEN]; - /* For ASSOC Req. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T; - -typedef struct _P2P_MGMT_TX_REQ_INFO_T { - BOOLEAN fgIsMgmtTxRequested; - P_MSDU_INFO_T prMgmtTxMsdu; - UINT_64 u8Cookie; -} P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T; - -typedef struct _P2P_BEACON_UPDATE_INFO_T { - PUINT_8 pucBcnHdr; - UINT_32 u4BcnHdrLen; - PUINT_8 pucBcnBody; - UINT_32 u4BcnBodyLen; -} -P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T; - -typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T { - P_MSDU_INFO_T prProbeRspMsduTemplate; -} P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T; - -typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T { - PUINT_8 pucAssocRspExtIE; - UINT_16 u2AssocIELen; -} P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T; - -typedef struct _P2P_JOIN_INFO_T { - UINT_32 ucSeqNumOfReqMsg; - UINT_8 ucAvailableAuthTypes; - P_STA_RECORD_T prTargetStaRec; - P2P_SSID_STRUCT_T rSsidStruct; - BOOLEAN fgIsJoinComplete; - /* For ASSOC Rsp. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} -P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T; - -struct _P2P_FSM_INFO_T { - /* State related. */ - ENUM_P2P_STATE_T ePreviousState; - ENUM_P2P_STATE_T eCurrentState; - - /* Channel related. */ - P2P_CHNL_REQ_INFO_T rChnlReqInfo; - - /* Scan related. */ - P2P_SCAN_REQ_INFO_T rScanReqInfo; - - /* Connection related. */ - P2P_CONNECTION_REQ_INFO_T rConnReqInfo; - - /* Mgmt tx related. */ - P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo; - - /* Beacon related. */ - P2P_BEACON_UPDATE_INFO_T rBcnContentInfo; - - /* Probe Response related. */ - P2P_PROBE_RSP_UPDATE_INFO_T rProbeRspContentInfo; - - /* Assoc Rsp related. */ - P2P_ASSOC_RSP_UPDATE_INFO_T rAssocRspContentInfo; - - /* GC Join related. */ - P2P_JOIN_INFO_T rJoinInfo; - - /* FSM Timer */ - TIMER_T rP2pFsmTimeoutTimer; - - - /* GC Target BSS. */ - P_BSS_DESC_T prTargetBss; - - /* GC Connection Request. */ - BOOLEAN fgIsConnectionRequested; - - BOOLEAN fgIsApMode; - - /* Channel grant interval. */ - UINT_32 u4GrantInterval; - - /* Packet filter for P2P module. */ - UINT_32 u4P2pPacketFilter; - - //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Prepare for use vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - /* Msg event queue. */ - LINK_T rMsgEventQueue; - -}; - - -/*---------------- Messages -------------------*/ -typedef struct _MSG_P2P_SCAN_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P_P2P_SSID_STRUCT_T prSSID; - INT_32 i4SsidNum; - UINT_32 u4NumChannel; - PUINT_8 pucIEBuf; - UINT_32 u4IELen; - BOOLEAN fgIsAbort; - RF_CHANNEL_INFO_T arChannelListInfo[1]; -} MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; - UINT_32 u4Duration; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; -} MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; -} MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T; - - -typedef struct _MSG_P2P_CONNECTION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P2P_SSID_STRUCT_T rSsid; - UINT_8 aucBssid[MAC_ADDR_LEN]; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; - UINT_32 u4IELen; - UINT_8 aucIEBuf[1]; - // TODO: Auth Type, OPEN, SHARED, FT, EAP... -} MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T; - - -typedef struct _MSG_P2P_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member. */ - UINT_8 aucTargetID[MAC_ADDR_LEN]; - UINT_16 u2ReasonCode; - BOOLEAN fgSendDeauth; -} MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T; - -typedef struct _MSG_P2P_MGMT_TX_REQUEST_T { - MSG_HDR_T rMsgHdr; - P_MSDU_INFO_T prMgmtMsduInfo; - UINT_64 u8Cookie; /* For indication. */ - BOOLEAN fgNoneCckRate; - BOOLEAN fgIsWaitRsp; -} MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T; - -typedef struct _MSG_P2P_START_AP_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4DtimPeriod; - UINT_32 u4BcnInterval; - UINT_8 aucSsid[32]; - UINT_16 u2SsidLen; - UINT_8 ucHiddenSsidType; - BOOLEAN fgIsPrivacy; - AP_CRYPTO_SETTINGS_T rEncryptionSettings; - INT_32 i4InactiveTimeout; -} -MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T; - - -typedef struct _MSG_P2P_BEACON_UPDATE_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4BcnHdrLen; - UINT_32 u4BcnBodyLen; - PUINT_8 pucBcnHdr; - PUINT_8 pucBcnBody; - UINT_8 aucBuffer[1]; /* Header & Body are put here. */ -} -MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T { - MSG_HDR_T rMsgHdr; - ENUM_BUFFER_TYPE_T eBufferType; - UINT_32 u4BufferLen; - UINT_8 aucBuffer[1]; -} MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T; - - -typedef struct _MSG_P2P_SWITCH_OP_MODE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - ENUM_OP_MODE_T eOpMode; -} MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_16 u2FrameType; - BOOLEAN fgIsRegister; -} -MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T; - -typedef struct _MSG_P2P_NETDEV_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsEnable; - UINT_8 ucMode; -} MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T; - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -p2pFsmStateTransition( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - - -VOID -p2pFsmRunEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFsmRunEventScanRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventMgmtFrameTx( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStartAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventNetDeviceRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventUpdateMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStopAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChannelRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventChannelAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventDissolve( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -VOID -p2pFsmRunEventMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -#if 0 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - -//3 /* --------------- WFA P2P DEFAULT PARAMETERS --------------- */ -#define P2P_WILDCARD_SSID "DIRECT-" -#define P2P_WILDCARD_SSID_LEN 7 -#define P2P_GROUP_ID_LEN 9 - -#define P2P_DRIVER_VERSION 2 /* Update when needed. */ - -#define P2P_DEFAULT_DEV_NAME "Wireless Client" -#define P2P_DEFAULT_DEV_NAME_LEN 15 -#define P2P_DEFAULT_PRIMARY_CATEGORY_ID 10 -#define P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID 5 -#define P2P_DEFAULT_CONFIG_METHOD (WPS_ATTRI_CFG_METHOD_PUSH_BUTTON | WPS_ATTRI_CFG_METHOD_KEYPAD | WPS_ATTRI_CFG_METHOD_DISPLAY) -#define P2P_DEFAULT_LISTEN_CHANNEL 1 - -#define P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT 0 /* NOTE(Kevin): Shall <= 16 */ -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT 13 - -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE 51 /* Contains 6 sub-band. */ - -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ - -#define P2P_MAXIMUM_CLIENT_COUNT 8 -#define P2P_MAXIMUM_NOA_COUNT 8 - - -#define P2P_MAXIMUM_ATTRIBUTE_LEN 251 - -#define P2P_CTWINDOW_DEFAULT 25 /* in TU=(1024usec) */ - -#define P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE 768 - -/* P2P 3.1.2.1.3 - Find Phase */ -#define P2P_MAX_DISCOVERABLE_INTERVAL 8 //3//3 -#define P2P_MIN_DISCOVERABLE_INTERVAL 5 // 1 - -#define P2P_LISTEN_SCAN_UNIT 100 // MS - -/* FSM Time Related constrain. */ -#define P2P_SERACH_STATE_PERIOD_MS 1000 // Deprecated. - -#define P2P_GO_CHANNEL_STAY_INTERVAL 1000 - -#define P2P_GO_NEGO_TIMEOUT_MS 500 -#define P2P_CONNECTION_TIMEOUT_SEC 120 - -#define P2P_INVITAION_TIMEOUT_MS 500 /* Timeout Wait Invitation Resonse. */ -#define P2P_PROVISION_DISCOVERY_TIMEOUT_MS 500 /* Timeout Wait Provision Discovery Resonse. */ - -//3 /* --------------- WFA P2P IE --------------- */ -/* P2P 4.1.1 - P2P IE format */ -#define P2P_OUI_TYPE_LEN 4 -#define P2P_IE_OUI_HDR (ELEM_HDR_LEN + P2P_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */ - -/* P2P 4.1.1 - General P2P Attribute */ -#define P2P_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */ - -/* P2P 4.1.1 - P2P Attribute ID definitions */ -#define P2P_ATTRI_ID_STATUS 0 -#define P2P_ATTRI_ID_REASON_CODE 1 -#define P2P_ATTRI_ID_P2P_CAPABILITY 2 -#define P2P_ATTRI_ID_P2P_DEV_ID 3 -#define P2P_ATTRI_ID_GO_INTENT 4 -#define P2P_ATTRI_ID_CFG_TIMEOUT 5 -#define P2P_ATTRI_ID_LISTEN_CHANNEL 6 -#define P2P_ATTRI_ID_P2P_GROUP_BSSID 7 -#define P2P_ATTRI_ID_EXT_LISTEN_TIMING 8 -#define P2P_ATTRI_ID_INTENDED_P2P_IF_ADDR 9 -#define P2P_ATTRI_ID_P2P_MANAGEABILITY 10 -#define P2P_ATTRI_ID_CHANNEL_LIST 11 -#define P2P_ATTRI_ID_NOTICE_OF_ABSENCE 12 -#define P2P_ATTRI_ID_P2P_DEV_INFO 13 -#define P2P_ATTRI_ID_P2P_GROUP_INFO 14 -#define P2P_ATTRI_ID_P2P_GROUP_ID 15 -#define P2P_ATTRI_ID_P2P_INTERFACE 16 -#define P2P_ATTRI_ID_OPERATING_CHANNEL 17 -#define P2P_ATTRI_ID_INVITATION_FLAG 18 -#define P2P_ATTRI_ID_VENDOR_SPECIFIC 221 - -/* Maximum Length of P2P Attributes */ -#define P2P_ATTRI_MAX_LEN_STATUS 1 /* 0 */ -#define P2P_ATTRI_MAX_LEN_REASON_CODE 1 /* 1 */ -#define P2P_ATTRI_MAX_LEN_P2P_CAPABILITY 2 /* 2 */ -#define P2P_ATTRI_MAX_LEN_P2P_DEV_ID 6 /* 3 */ -#define P2P_ATTRI_MAX_LEN_GO_INTENT 1 /* 4 */ -#define P2P_ATTRI_MAX_LEN_CFG_TIMEOUT 2 /* 5 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#else - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#endif -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_BSSID 6 /* 7 */ -#define P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING 4 /* 8 */ -#define P2P_ATTRI_MAX_LEN_INTENDED_P2P_IF_ADDR 6 /* 9 */ -#define P2P_ATTRI_MAX_LEN_P2P_MANAGEABILITY 1 /* 10 */ -//#define P2P_ATTRI_MAX_LEN_CHANNEL_LIST 3 + (n* (2 + num_of_ch)) /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_LIST 3 /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_ENTRY 2 /* 11 */ - - -//#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE 2 + (n* (13)) /* 12 */ -#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE (2 + (P2P_MAXIMUM_NOA_COUNT*(13))) /* 12 */ - -#define P2P_ATTRI_MAX_LEN_P2P_DEV_INFO 17 + (8 * (8)) + 36 /* 13 */ -//#define P2P_ATTRI_MAX_LEN_P2P_GROUP_INFO n* (25 + (m* (8)) + 32) /* 14 */ -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_ID 38 /* 15 */ -#define P2P_ATTRI_MAX_LEN_P2P_INTERFACE 253 // 7 + 6* [0~41] /* 16 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#else - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#endif -#define P2P_ATTRI_MAX_LEN_INVITATION_FLAGS 1 /* 18 */ - -/* P2P 4.1.2 - P2P Status definitions */ -#define P2P_STATUS_SUCCESS 0 -#define P2P_STATUS_FAIL_INFO_IS_CURRENTLY_UNAVAILABLE 1 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 2 -#define P2P_STATUS_FAIL_LIMIT_REACHED 3 -#define P2P_STATUS_FAIL_INVALID_PARAM 4 -#define P2P_STATUS_FAIL_UNABLE_ACCOMMODATE_REQ 5 -#define P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR 6 -#define P2P_STATUS_FAIL_NO_COMMON_CHANNELS 7 -#define P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP 8 -#define P2P_STATUS_FAIL_SAME_INTENT_VALUE_15 9 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD 10 -#define P2P_STATUS_FAIL_REJECTED_BY_USER 11 - - -/* P2P 4.1.3 - P2P Minor Reason Code definitions */ -#define P2P_REASON_SUCCESS 0 -#define P2P_REASON_DISASSOCIATED_DUE_CROSS_CONNECTION 1 -#define P2P_REASON_DISASSOCIATED_DUE_UNMANAGEABLE 2 -#define P2P_REASON_DISASSOCIATED_DUE_NO_P2P_COEXIST_PARAM 3 -#define P2P_REASON_DISASSOCIATED_DUE_MANAGEABLE 4 - - -/* P2P 4.1.4 - Device Capability Bitmap definitions */ -#define P2P_DEV_CAPABILITY_SERVICE_DISCOVERY BIT(0) -#define P2P_DEV_CAPABILITY_CLIENT_DISCOVERABILITY BIT(1) -#define P2P_DEV_CAPABILITY_CONCURRENT_OPERATION BIT(2) -#define P2P_DEV_CAPABILITY_P2P_INFRA_MANAGED BIT(3) -#define P2P_DEV_CAPABILITY_P2P_DEVICE_LIMIT BIT(4) -#define P2P_DEV_CAPABILITY_P2P_INVITATION_PROCEDURE BIT(5) - - -/* P2P 4.1.4 - Group Capability Bitmap definitions */ -#define P2P_GROUP_CAPABILITY_P2P_GROUP_OWNER BIT(0) -#define P2P_GROUP_CAPABILITY_PERSISTENT_P2P_GROUP BIT(1) -#define P2P_GROUP_CAPABILITY_P2P_GROUP_LIMIT BIT(2) -#define P2P_GROUP_CAPABILITY_INTRA_BSS_DISTRIBUTION BIT(3) -#define P2P_GROUP_CAPABILITY_CROSS_CONNECTION BIT(4) -#define P2P_GROUP_CAPABILITY_PERSISTENT_RECONNECT BIT(5) -#define P2P_GROUP_CAPABILITY_GROUP_FORMATION BIT(6) - -/* P2P 4.1.6 - GO Intent field definitions */ -#define P2P_GO_INTENT_TIE_BREAKER_FIELD BIT(0) -#define P2P_GO_INTENT_VALUE_MASK BITS(1,7) -#define P2P_GO_INTENT_VALUE_OFFSET 1 - -/* P2P 4.1.12 - Manageability Bitmap definitions */ -#define P2P_DEVICE_MANAGEMENT BIT(0) - -/* P2P 4.1.14 - CTWindow and OppPS Parameters definitions */ -#define P2P_CTW_OPPPS_PARAM_OPPPS_FIELD BIT(7) -#define P2P_CTW_OPPPS_PARAM_CTWINDOW_MASK BITS(0,6) - - -#define ELEM_MAX_LEN_P2P_FOR_PROBE_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_ID) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL)) - -#define ELEM_MAX_LEN_P2P_FOR_ASSOC_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_INFO)) - - -/* P2P 4.1.16 - P2P Client Infor Descriptor */ -#define P2P_CLIENT_INFO_DESC_HDR_LEN 1 /* Length(1 octets) */ - -/* P2P 4.1.20 - P2P Invitation Flags Attribute*/ -#define P2P_INVITATION_FLAGS_INVITATION_TYPE BIT(0) -#define P2P_INVITATION_TYPE_INVITATION 0 -#define P2P_INVITATION_TYPE_REINVOKE 1 -//3 /* --------------- WPS Data Element Definitions --------------- */ -/* P2P 4.2.2 - General WSC Attribute */ -#define WSC_ATTRI_HDR_LEN 4 /* ID(2 octet) + Length(2 octets) */ -#define WSC_ATTRI_MAX_LEN_VERSION 1 -#define WSC_ATTRI_MAX_LEN_DEVICE_PASSWORD_ID 2 -#define WSC_ATTRI_LEN_CONFIG_METHOD 2 - -/* WPS 11 - Data Element Definitions */ -#define WPS_ATTRI_ID_VERSION 0x104A -#define WPS_ATTRI_ID_CONFIGURATION_METHODS 0x1008 -#define WPS_ATTRI_ID_DEVICE_PASSWORD 0x1012 -#define WPS_ATTRI_ID_DEVICE_NAME 0x1011 -#define WPS_ATTRI_ID_PRI_DEVICE_TYPE 0x1054 -#define WPS_ATTRI_ID_SEC_DEVICE_TYPE 0x1055 - -#define WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE 300 - -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ - -#define WPS_ATTRI_CFG_METHOD_USBA BIT(0) -#define WPS_ATTRI_CFG_METHOD_ETHERNET BIT(1) -#define WPS_ATTRI_CFG_METHOD_LABEL BIT(2) -#define WPS_ATTRI_CFG_METHOD_DISPLAY BIT(3) -#define WPS_ATTRI_CFG_METHOD_EXT_NFC BIT(4) -#define WPS_ATTRI_CFG_METHOD_INT_NFC BIT(5) -#define WPS_ATTRI_CFG_METHOD_NFC_IF BIT(6) -#define WPS_ATTRI_CFG_METHOD_PUSH_BUTTON BIT(7) -#define WPS_ATTRI_CFG_METHOD_KEYPAD BIT(8) - - -#define P2P_FLAGS_PROVISION_COMPLETE 0x00000001 -#define P2P_FLAGS_PROVISION_DISCOVERY_COMPLETE 0x00000002 -#define P2P_FLAGS_PROVISION_DISCOVERY_WAIT_RESPONSE 0x00000004 -#define P2P_FLAGS_PROVISION_DISCOVERY_RESPONSE_WAIT 0x00000008 -#define P2P_FLAGS_MASK_PROVISION 0x00000017 -#define P2P_FLAGS_MASK_PROVISION_COMPLETE 0x00000015 -#define P2P_FLAGS_PROVISION_DISCOVERY_INDICATED 0x00000010 -#define P2P_FLAGS_INVITATION_TOBE_GO 0x00000100 -#define P2P_FLAGS_INVITATION_TOBE_GC 0x00000200 -#define P2P_FLAGS_INVITATION_SUCCESS 0x00000400 -#define P2P_FLAGS_INVITATION_WAITING_TARGET 0x00000800 -#define P2P_FLAGS_MASK_INVITATION 0x00000F00 -#define P2P_FLAGS_FORMATION_ON_GOING 0x00010000 -#define P2P_FLAGS_FORMATION_LOCAL_PWID_RDY 0x00020000 -#define P2P_FLAGS_FORMATION_TARGET_PWID_RDY 0x00040000 -#define P2P_FLAGS_FORMATION_COMPLETE 0x00080000 -#define P2P_FLAGS_MASK_FORMATION 0x000F0000 -#define P2P_FLAGS_DEVICE_DISCOVER_REQ 0x00100000 -#define P2P_FLAGS_DEVICE_DISCOVER_DONE 0x00200000 -#define P2P_FLAGS_DEVICE_INVITATION_WAIT 0x00400000 -#define P2P_FLAGS_DEVICE_SERVICE_DISCOVER_WAIT 0x00800000 -#define P2P_FLAGS_MASK_DEVICE_DISCOVER 0x00F00000 - -#define P2P_FLAGS_DEVICE_FORMATION_REQUEST 0x01000000 - - -/* MACRO for flag operation */ -#define SET_FLAGS(_FlagsVar, _BitsToSet) \ - (_FlagsVar) = ((_FlagsVar) | (_BitsToSet)) - -#define TEST_FLAGS(_FlagsVar, _BitsToCheck) \ - (((_FlagsVar) & (_BitsToCheck)) == (_BitsToCheck)) - -#define CLEAR_FLAGS(_FlagsVar, _BitsToClear) \ - (_FlagsVar) &= ~(_BitsToClear) - - - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_I 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_II 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_III 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_IV 0 - -#define CFG_DISABLE_DELAY_PROVISION_DISCOVERY 0 - -#define CFG_CONNECTION_POLICY_2_0 0 - -/* Device Password ID */ -enum wps_dev_password_id { - DEV_PW_DEFAULT = 0x0000, - DEV_PW_USER_SPECIFIED = 0x0001, - DEV_PW_MACHINE_SPECIFIED = 0x0002, - DEV_PW_REKEY = 0x0003, - DEV_PW_PUSHBUTTON = 0x0004, - DEV_PW_REGISTRAR_SPECIFIED = 0x0005 -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -//3 /* --------------- WFA P2P IE and Attributes --------------- */ - -/* P2P 4.1.1 - P2P Information Element */ -typedef struct _IE_P2P_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 aucP2PAttributes[1]; /* P2P Attributes */ -} __KAL_ATTRIB_PACKED__ IE_P2P_T, *P_IE_P2P_T; - -/* P2P 4.1.1 - General P2P Attribute */ -typedef struct _P2P_ATTRIBUTE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRIBUTE_T, ATTRIBUTE_HDR_T, *P_P2P_ATTRIBUTE_T, *P_ATTRIBUTE_HDR_T; - - -/* P2P 4.1.2 - P2P Status Attribute */ -typedef struct _P2P_ATTRI_STATUS_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucStatusCode; /* Status Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_STATUS_T, *P_P2P_ATTRI_STATUS_T; - - -/* P2P 4.1.3 - P2P Minor Reason Code Attribute */ -typedef struct _P2P_ATTRI_REASON_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucMinorReasonCode; /* Minor Reason Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_REASON_T, *P_P2P_ATTRI_REASON_T; - - -/* P2P 4.1.4 - P2P Capability Attribute */ -typedef struct _P2P_ATTRI_CAPABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_8 ucGroupCap; /* Group Capability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CAPABILITY_T, *P_P2P_ATTRI_CAPABILITY_T; - - -/* P2P 4.1.5 - P2P Device ID Attribute */ -typedef struct _P2P_ATTRI_DEV_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_ID_T, *P_P2P_ATTRI_DEV_ID_T; - - -/* P2P 4.1.6 - Group Owner Intent Attribute */ -typedef struct _P2P_ATTRI_GO_INTENT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOIntent; /* Group Owner Intent */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GO_INTENT_T, *P_P2P_ATTRI_GO_INTENT_T; - - -/* P2P 4.1.7 - Configuration Timeout Attribute */ -typedef struct _P2P_ATTRI_CFG_TIMEOUT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOCfgTimeout; /* GO Configuration Timeout */ - UINT_8 ucClientCfgTimeout; /* Client Configuration Timeout */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CFG_TIMEOUT_T, *P_P2P_ATTRI_CFG_TIMEOUT_T; - - -/* P2P 4.1.8 - Listen Channel Attribute */ -typedef struct _P2P_ATTRI_LISTEN_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_LISTEN_CHANNEL_T, *P_P2P_ATTRI_LISTEN_CHANNEL_T; - - -/* P2P 4.1.9 - P2P Group BSSID Attribute */ -typedef struct _P2P_ATTRI_GROUP_BSSID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBssid[MAC_ADDR_LEN]; /* P2P Group BSSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_BSSID_T, *P_P2P_ATTRI_GROUP_BSSID_T; - - -/* P2P 4.1.10 - Extended Listen Timing Attribute */ -typedef struct _P2P_ATTRI_EXT_LISTEN_TIMING_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2AvailPeriod; /* Availability Period */ - UINT_16 u2AvailInterval; /* Availability Interval */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_EXT_LISTEN_TIMING_T, *P_P2P_ATTRI_EXT_LISTEN_TIMING_T; - - -/* P2P 4.1.11 - Intended P2P Interface Address Attribute */ -typedef struct _P2P_ATTRI_INTENDED_IF_ADDR_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucIfAddr[MAC_ADDR_LEN];/* P2P Interface Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTENDED_IF_ADDR_T, *P_P2P_ATTRI_INTENDED_IF_ADDR_T; - - -/* P2P 4.1.12 - P2P Manageability Attribute */ -typedef struct _P2P_ATTRI_MANAGEABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucManageability; /* P2P Manageability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_MANAGEABILITY_T, *P_P2P_ATTRI_MANAGEABILITY_T; - - -/* P2P 4.1.13 - Channel List Attribute */ -typedef struct _P2P_ATTRI_CHANNEL_LIST_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 aucChannelEntry[1]; /* Channel Entry List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CHANNEL_T, *P_P2P_ATTRI_CHANNEL_T; - -typedef struct _CHANNEL_ENTRY_FIELD_T { - UINT_8 ucRegulatoryClass; /* Regulatory Class */ - UINT_8 ucNumberOfChannels; /* Number Of Channels */ - UINT_8 aucChannelList[1]; /* Channel List */ -} __KAL_ATTRIB_PACKED__ CHANNEL_ENTRY_FIELD_T, *P_CHANNEL_ENTRY_FIELD_T; - - -/* P2P 4.1.14 - Notice of Absence Attribute */ -typedef struct _P2P_ATTRI_NOA_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucIndex; /* Index */ - UINT_8 ucCTWOppPSParam; /* CTWindow and OppPS Parameters */ - UINT_8 aucNoADesc[1]; /* NoA Descriptor */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_NOA_T, *P_P2P_ATTRI_NOA_T; - -typedef struct _NOA_DESCRIPTOR_T { - UINT_8 ucCountType; /* Count/Type */ - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} __KAL_ATTRIB_PACKED__ NOA_DESCRIPTOR_T, *P_NOA_DESCRIPTOR_T; - -typedef struct _P2P_ATTRI_DEV_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_INFO_T, *P_P2P_ATTRI_DEV_INFO_T; - -/* WPS 7.1 & 11 WPS TLV Data Format - Device Name */ -typedef struct _DEVICE_NAME_TLV_T { - UINT_16 u2Id; /* WPS Attribute Type */ - UINT_16 u2Length; /* Data Length */ - UINT_8 aucName[32]; /* Device Name */ // TODO: Fixme -} __KAL_ATTRIB_PACKED__ DEVICE_NAME_TLV_T, *P_DEVICE_NAME_TLV_T; - - -/* P2P 4.1.16 - P2P Group Info Attribute */ -typedef struct _P2P_CLIENT_INFO_DESC_T { - UINT_8 ucLength; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucIfAddr[MAC_ADDR_LEN]; /* P2P Interface Address */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_CLIENT_INFO_DESC_T, *P_P2P_CLIENT_INFO_DESC_T; - -typedef struct _P2P_ATTRI_GROUP_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - P2P_CLIENT_INFO_DESC_T arClientDesc[1]; /* P2P Client Info Descriptors */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_INFO_T, *P_P2P_ATTRI_GROUP_INFO_T; - - -/* P2P 4.1.17 - P2P Group ID Attribute */ -typedef struct _P2P_ATTRI_GROUP_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_ID_T, *P_P2P_ATTRI_GROUP_ID_T; - - -/* P2P 4.1.18 - P2P Interface Attribute */ -typedef struct _P2P_ATTRI_INTERFACE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 ucIfAddrCount; /* P2P Interface Address Count */ - UINT_8 aucIfAddrList[MAC_ADDR_LEN];/* P2P Interface Address List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTERFACE_T, *P_P2P_ATTRI_INTERFACE_T; - - -/* P2P 4.1.19 - Operating Channel Attribute */ -typedef struct _P2P_ATTRI_OPERATING_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_OPERATING_CHANNEL_T, *P_P2P_ATTRI_OPERATING_CHANNEL_T; - -/* P2P 4.1.20 - Invitation Flags Attribute */ -typedef struct _P2P_ATTRI_INVITATION_FLAG_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucInviteFlagsBitmap; /* Invitation Flags Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INVITATION_FLAG_T, *P_P2P_ATTRI_INVITATION_FLAG_T; - - - -/* P2P 4.1.1 - General WSC Attribute */ -typedef struct _WSC_ATTRIBUTE_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRIBUTE_T, *P_WSC_ATTRIBUTE_T; - -/* WSC 1.0 Table 28 */ -typedef struct _WSC_ATTRI_VERSION_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucVersion; /* Version 1.0 or 1.1 */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_VERSION_T, *P_WSC_ATTRI_VERSION_T; - -typedef struct _WSC_ATTRI_DEVICE_PASSWORD_ID_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2DevPasswordId; /* Device Password ID */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_DEVICE_PASSWORD_ID_T, *P_WSC_ATTRI_DEVICE_PASSWORD_ID_T; - - -typedef struct _WSC_ATTRI_CONFIGURATION_METHOD_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2ConfigMethods; /* Configure Methods */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_CONFIGURATION_METHOD_T, *P_WSC_ATTRI_CONFIGURATION_METHOD_T; - - - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - - -//3 /* --------------- WFA P2P Attributes Handler prototype --------------- */ -typedef UINT_32 (*PFN_APPEND_ATTRI_FUNC)(P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16); - -typedef VOID (*PFN_HANDLE_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T); - -typedef VOID (*PFN_VERIFY_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T, PUINT_16); - -typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC)(P_ADAPTER_T, P_STA_RECORD_T); - - -typedef struct _APPEND_VAR_ATTRI_ENTRY_T { - UINT_16 u2EstimatedFixedAttriLen; /* For fixed length */ - PFN_CALCULATE_VAR_ATTRI_LEN_FUNC pfnCalculateVariableAttriLen; - PFN_APPEND_ATTRI_FUNC pfnAppendAttri; -} APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T; - -typedef enum _ENUM_CONFIG_METHOD_SEL { - ENUM_CONFIG_METHOD_SEL_AUTO, - ENUM_CONFIG_METHOD_SEL_USER, - ENUM_CONFIG_METHOD_SEL_NUM -} ENUM_CONFIG_METHOD_SEL, *P_ENUM_CONFIG_METHOD_SEL; - -typedef enum _ENUM_P2P_FORMATION_POLICY { - ENUM_P2P_FORMATION_POLICY_AUTO = 0, - ENUM_P2P_FORMATION_POLICY_PASSIVE, /* Device would wait GO NEGO REQ instead of sending it actively. */ - ENUM_P2P_FORMATION_POLICY_NUM -} ENUM_P2P_FORMATION_POLICY, P_ENUM_P2P_FORMATION_POLICY; - -typedef enum _ENUM_P2P_INVITATION_POLICY { - ENUM_P2P_INVITATION_POLICY_USER = 0, - ENUM_P2P_INVITATION_POLICY_ACCEPT_FIRST, - ENUM_P2P_INVITATION_POLICY_DENY_ALL, - ENUM_P2P_INVITATION_POLICY_NUM -} ENUM_P2P_INVITATION_POLICY, P_ENUM_P2P_INVITATION_POLICY; - -//3 /* --------------- Data Structure for P2P Operation --------------- */ -//3 /* Session for CONNECTION SETTINGS of P2P */ -struct _P2P_CONNECTION_SETTINGS_T { - UINT_8 ucDevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - ENUM_P2P_FORMATION_POLICY eFormationPolicy; /* Formation Policy. */ - - /*------------WSC Related Param---------------*/ - UINT_16 u2ConfigMethodsSupport; /* Prefered configure method. - * Some device may not have keypad. - */ - ENUM_CONFIG_METHOD_SEL eConfigMethodSelType; - UINT_16 u2TargetConfigMethod; /* Configure method selected by user or auto. */ - UINT_16 u2LocalConfigMethod; /* Configure method of target. */ - BOOLEAN fgIsPasswordIDRdy; - /*------------WSC Related Param---------------*/ - - UINT_8 ucClientConfigTimeout; - UINT_8 ucGoConfigTimeout; - - UINT_8 ucSecondaryDevTypeCount; -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT]; -#endif - - -#if 0 - UINT_8 ucRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ - -#endif -#else - UINT_8 ucRfChannelListSize; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - UINT_8 aucChannelEntriesField[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; -#endif -#endif - - /* Go Intent */ - UINT_8 ucTieBreaker; - UINT_8 ucGoIntent; - - /* For Device Capability */ - BOOLEAN fgSupportServiceDiscovery; - BOOLEAN fgSupportClientDiscoverability; - BOOLEAN fgSupportConcurrentOperation; - BOOLEAN fgSupportInfraManaged; - BOOLEAN fgSupportInvitationProcedure; - - /* For Group Capability */ - BOOLEAN fgSupportPersistentP2PGroup; - BOOLEAN fgSupportIntraBSSDistribution; - BOOLEAN fgSupportCrossConnection; - BOOLEAN fgSupportPersistentReconnect; - - BOOLEAN fgP2pGroupLimit; - - BOOLEAN fgSupportOppPS; - UINT_16 u2CTWindow; - - BOOLEAN fgIsScanReqIssued; - BOOLEAN fgIsServiceDiscoverIssued; - - - /*============ Target Device Connection Settings ============*/ - - /* Discover Target Device Info. */ - BOOLEAN fgIsDevId; - BOOLEAN fgIsDevType; - - /* Encryption mode of Target Device */ - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - /* SSID - * 1. AP Mode, this is the desired SSID user specified. - * 2. Client Mode, this is the target SSID to be connected to. - */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - UINT_8 ucSSIDLen; - - /* Operating channel requested. */ - UINT_8 ucOperatingChnl; - ENUM_BAND_T eBand; - - /* Linten channel requested. */ - UINT_8 ucListenChnl; - - /* For device discover address/type. */ - UINT_8 aucTargetDevAddr[MAC_ADDR_LEN]; /* P2P Device Address, for P2P Device Discovery & P2P Connection. */ - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_DEVICE_DESC_T prTargetP2pDesc; -#endif - - UINT_8 ucLastStatus; /* P2P FSM would append status attribute according to this field. */ - - -#if !CFG_DISABLE_DELAY_PROVISION_DISCOVERY - UINT_8 ucLastDialogToken; - UINT_8 aucIndicateDevAddr[MAC_ADDR_LEN]; -#endif - -#if 0 - UINT_8 ucTargetRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucTargetChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ -#endif -#endif - -}; - - -typedef struct _NOA_TIMING_T { - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} NOA_TIMING_T, *P_NOA_TIMING_T; - -typedef enum _ENUM_P2P_IOCTL_T { - P2P_IOCTL_IDLE = 0, - P2P_IOCTL_DEV_DISCOVER, - P2P_IOCTL_INVITATION_REQ, - P2P_IOCTL_SERV_DISCOVER, - P2P_IOCTL_WAITING, - P2P_IOCTL_NUM -} ENUM_P2P_IOCTL_T; - - - -/*---------------- Service Discovery Related -------------------*/ -typedef enum _ENUM_SERVICE_TX_TYPE_T { - ENUM_SERVICE_TX_TYPE_BY_DA, - ENUM_SERVICE_TX_TYPE_BY_CHNL, - ENUM_SERVICE_TX_TYPE_NUM -} ENUM_SERVICE_TX_TYPE_T; - - -typedef struct _SERVICE_DISCOVERY_FRAME_DATA_T { - QUE_ENTRY_T rQueueEntry; - P_MSDU_INFO_T prSDFrame; - ENUM_SERVICE_TX_TYPE_T eServiceType; - UINT_8 ucSeqNum; - union { - - UINT_8 ucChannelNum; - UINT_8 aucPeerAddr[MAC_ADDR_LEN]; - } uTypeData; - BOOLEAN fgIsTxDoneIndicate; -} SERVICE_DISCOVERY_FRAME_DATA_T, *P_SERVICE_DISCOVERY_FRAME_DATA_T; - - - - -struct _P2P_FSM_INFO_T_DEPRECATED { - /* P2P FSM State */ - ENUM_P2P_STATE_T eCurrentState; - - /* Channel */ - BOOLEAN fgIsChannelRequested; - - - - - - - - - - - ENUM_P2P_STATE_T ePreviousState; - - ENUM_P2P_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - - UINT_8 aucTargetIfAddr[PARAM_MAC_ADDR_LEN]; - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - - BOOLEAN fgIsRsponseProbe; /* Indicate if P2P FSM can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfReqMsg; /* Used for SAA FSM request message. */ - - /* Channel Privilege */ - UINT_8 ucSeqNumOfChReq; /* Used for Channel Request message. */ - - - UINT_8 ucSeqNumOfScnMsg; /* Used for SCAN FSM request message. */ - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - UINT_8 ucRxDialogToken; - - /* Timer */ - TIMER_T rDeviceDiscoverTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - - TIMER_T rRejoinTimer; /* A timer used for Action frame timeout usage. */ - - - /* Flag to indicate Provisioning */ - BOOLEAN fgIsConnectionRequested; - - /* Current IOCTL. */ - ENUM_P2P_IOCTL_T eP2pIOCTL; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - /*--------SERVICE DISCOVERY--------*/ - QUE_T rQueueGASRx; /* Input Request/Response. */ - QUE_T rQueueGASTx; /* Output Response. */ - P_SERVICE_DISCOVERY_FRAME_DATA_T prSDRequest; - UINT_8 ucVersionNum; /* GAS packet sequence number for...Action Frame? */ - UINT_8 ucGlobalSeqNum; /* Sequence Number of RX SD packet. */ - /*--------Service DISCOVERY--------*/ - - /*--------DEVICE DISCOVERY---------*/ - UINT_8 aucTargetGroupID[PARAM_MAC_ADDR_LEN]; - UINT_16 u2TargetGroupSsidLen; - UINT_8 aucTargetSsid[32]; - UINT_8 aucSearchingP2pDevice[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDLToken; - /*----------------------------------*/ - - /* Indicating Peer Status. */ - UINT_32 u4Flags; - - /*Indicating current running mode.*/ - BOOLEAN fgIsApMode; - - - /*------------INVITATION------------*/ - ENUM_P2P_INVITATION_POLICY eInvitationRspPolicy; - /*----------------------------------*/ - -}; - - - -struct _P2P_SPECIFIC_BSS_INFO_T { - /* For GO(AP) Mode - Compose TIM IE */ - UINT_16 u2SmallestAID; - UINT_16 u2LargestAID; - UINT_8 ucBitmapCtrl; - //UINT_8 aucPartialVirtualBitmap[MAX_LEN_TIM_PARTIAL_BMP]; - - /* For GC/GO OppPS */ - BOOLEAN fgEnableOppPS; - UINT_16 u2CTWindow; - - /* For GC/GO NOA */ - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - NOA_TIMING_T arNoATiming[P2P_MAXIMUM_NOA_COUNT]; - - BOOLEAN fgIsNoaAttrExisted; - - /* For P2P Device */ - UINT_8 ucRegClass; /* Regulatory Class for channel. */ - UINT_8 ucListenChannel; /* Linten Channel only on channels 1, 6 and 11 in the 2.4 GHz. */ - - UINT_8 ucPreferredChannel; /* Operating Channel, should be one of channel list in p2p connection settings. */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - - /* Extened Listen Timing. */ - UINT_16 u2AvailabilityPeriod; - UINT_16 u2AvailabilityInterval; - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - UINT_16 u2IELenForBCN; - UINT_8 aucBeaconIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -// UINT_16 u2IELenForProbeRsp; -// UINT_8 aucProbeRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2IELenForAssocRsp; - UINT_8 aucAssocRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -#else - UINT_16 u2AttributeLen; - UINT_8 aucAttributesCache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2WscAttributeLen; - UINT_8 aucWscAttributesCache[WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; -#endif - UINT_8 aucGroupID[MAC_ADDR_LEN]; - UINT_16 u2GroupSsidLen; - UINT_8 aucGroupSsid[ELEM_MAX_LEN_SSID]; - - PARAM_CUSTOM_NOA_PARAM_STRUC_T rNoaParam; - PARAM_CUSTOM_OPPPS_PARAM_STRUC_T rOppPsParam; - -}; - - - - - - - -typedef struct _MSG_P2P_DEVICE_DISCOVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4DevDiscoverTime; /* 0: Infinite, 1~X: in unit of MS. */ - BOOLEAN fgIsSpecificType; -#if CFG_ENABLE_WIFI_DIRECT - P2P_DEVICE_TYPE_T rTargetDeviceType; -#endif - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN]; -} MSG_P2P_DEVICE_DISCOVER_T, *P_MSG_P2P_DEVICE_DISCOVER_T; - - - -typedef struct _MSG_P2P_INVITATION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; /* Target Device ID to be invited. */ -} MSG_P2P_INVITATION_REQUEST_T, *P_MSG_P2P_INVITATION_REQUEST_T; - -typedef struct _MSG_P2P_FUNCTION_SWITCH_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsFuncOn; -} MSG_P2P_FUNCTION_SWITCH_T, *P_MSG_P2P_FUNCTION_SWITCH_T; - -typedef struct _MSG_P2P_SERVICE_DISCOVERY_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; - BOOLEAN fgNeedTxDoneIndicate; - UINT_8 ucSeqNum; -} MSG_P2P_SERVICE_DISCOVERY_REQUEST_T, *P_MSG_P2P_SERVICE_DISCOVERY_REQUEST_T; - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define p2pChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState = (_eNewMediaState)); - -#define ATTRI_ID(_fp) (((P_P2P_ATTRIBUTE_T) _fp)->ucId) -#define ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[0]) | \ - ((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[1] << 8)) - - -#define ATTRI_SIZE(_fp) (P2P_ATTRI_HDR_LEN + ATTRI_LEN(_fp)) - -#define P2P_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += ATTRI_SIZE(_pucAttriBuf)) ) - - -#define P2P_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WSC_ATTRI_ID(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[1])) - -#define WSC_ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[1])) - - -#define WSC_ATTRI_SIZE(_fp) (WSC_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp)) - -#define WSC_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WSC_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WSC_ATTRI_SIZE(_pucAttriBuf)) ) - -#define WSC_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WFD_ATTRI_SIZE(_fp) (P2P_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp)) - -#define WFD_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WFD_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WFD_ATTRI_SIZE(_pucAttriBuf)) ) - - - - -#if DBG - #define ASSERT_BREAK(_exp) \ - { \ - if (!(_exp)) { \ - ASSERT(FALSE); \ - break; \ - } \ - } - -#else - #define ASSERT_BREAK(_exp) -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*======P2P State======*/ -VOID -p2pStateInit_LISTEN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prSP2pBssInfo, - IN UINT_8 ucListenChannel - ); - -VOID -p2pStateAbort_LISTEN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_SEARCH_SCAN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_GO_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_GC_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_CONFIGURATION( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecBssInfo - ); - -VOID -p2pStateAbort_CONFIGURATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_JOIN( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_JOIN( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P Functions ======*/ - - -VOID -p2pFuncInitGO( - IN P_ADAPTER_T prAdapter - ); - - - - - -VOID -p2pFuncDisconnect( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -VOID -p2pFuncSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ); - -VOID -p2pFuncRunEventProvisioningComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -p2pFuncSetGroupID( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucGroupID, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen - ); - - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityReqFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityRspFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - - -UINT_8 -p2pFuncGetVersionNumOfSD( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P FSM ======*/ -VOID -p2pFsmRunEventConnectionRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventRxGroupNegotiationReqFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationConfirmTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -WLAN_STATUS -p2pFsmRunEventInvitationRequestTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - - -VOID -p2pFsmRunEventRxDeauthentication( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxDisassociation( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventBeaconTimeout( - IN P_ADAPTER_T prAdapter - ); - - - -WLAN_STATUS -p2pFsmRunEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -#if 1 -#endif - - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmRunEventConnectionAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionTrigger( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventP2PFunctionSwitch( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChGrant( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionPause( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN UINT_8 aucTargetAddr[] - ); - -VOID -p2pUpdateBssInfoForJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmInit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmUninit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmSteps( - IN P_ADAPTER_T prAdapter, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStartGO( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pAssignSsid( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -VOID -p2pFsmRunEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventIOReqTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventSearchPeriodTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventFsmTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventRejoinTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - - - - -/*=============== P2P Function Related ================*/ - -/*=============== P2P Function Related ================*/ - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -p2pTest( - IN P_ADAPTER_T prAdapter - ); -#endif /* CFG_TEST_WIFI_DIRECT_GO */ - - - - -VOID -p2pGenerateP2P_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -VOID -p2pGenerateP2P_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - - -UINT_32 -p2pCalculateP2P_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pCalculateP2P_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pCalculateP2P_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -VOID -p2pGenerateWSC_IEForProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateWSC_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_16 -p2pCalculateWSC_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -UINT_32 -p2pCalculateWSC_IELenForProbeResp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriStatus( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_32 -p2pAppendAttriCapability( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGoIntent( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriCfgTimeout( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGroupBssid( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriDeviceIDForBeacon( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForProbeReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForDeviceDiscoveryReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriListenChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriIntendP2pIfAddr( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriChannelList( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenChannelList( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriNoA( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriGroupInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenGroupInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pAppendAttriP2pGroupID( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriOperatingChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriInvitationFlag( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -VOID -p2pGenerateWscIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -UINT_32 -p2pAppendAttriWSCConfigMethod ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCVersion ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegReqDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegRspDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -WLAN_STATUS -p2pGetWscAttriList( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -WLAN_STATUS -p2pGetAttriList ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pSendProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFsmRunEventRxProbeRequestFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ); - -WLAN_STATUS -p2pRxPublicActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationRspFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationCfmFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -#if 0 // frog -BOOLEAN -scanMatchFilterOfP2P ( - IN P_SW_RFB_T prSWRfb, - IN PP_BSS_DESC_T pprBssDesc - ); -#endif // frog - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -VOID -p2pFuncCompleteIOCTL( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rWlanStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -p2pDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(IE_P2P_T) == (2+4+1)); // all UINT_8 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRIBUTE_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_STATUS_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_REASON_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CAPABILITY_T) == (3+2)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_ID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GO_INTENT_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CFG_TIMEOUT_T) == (3+2)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#endif - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_BSSID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_EXT_LISTEN_TIMING_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTENDED_IF_ADDR_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_MANAGEABILITY_T) == (3+1)); - - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CHANNEL_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(CHANNEL_ENTRY_FIELD_T) == 3); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_NOA_T) == (3+3)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(NOA_DESCRIPTOR_T) == 13); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_TYPE_T) == 8); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_INFO_T) == (3+6+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_NAME_TLV_T) == (4+32)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_CLIENT_INFO_DESC_T) == (1+6+6+1+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_INFO_T) == (3+(1+6+6+1+2+8+1+8))); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_ID_T) == (3+38)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTERFACE_T) == (3+13)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#endif - - - return; -} -#endif /* _lint */ - -#endif /* _P2P_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_func.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_func.h deleted file mode 100755 index 6d9db0274603..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_func.h +++ /dev/null @@ -1,324 +0,0 @@ -#ifndef _P2P_FUNC_H -#define _P2P_FUNC_H - - -VOID -p2pFuncRequestScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - -VOID -p2pFuncCancelScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - - -VOID -p2pFuncStartGO( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ); - - - -VOID -p2pFuncAcquireCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - - -VOID -p2pFuncReleaseCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -p2pFuncSetChannel( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ); - - -BOOLEAN -p2pFuncRetryJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ); - -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - - -WLAN_STATUS -p2pFuncTxMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ); - -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ); - - -BOOLEAN -p2pFuncValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -p2pFuncValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - - -VOID -p2pFuncResetStaRecStatus( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncInitConnectionSettings( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ); - - -BOOLEAN -p2pFuncParseCheckForP2PInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -BOOLEAN -p2pFuncValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -p2pFuncValidateRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFuncIsAPMode( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFuncParseBeaconContent( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ); - - -P_BSS_DESC_T -p2pFuncKeepOnConnection( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - -VOID -p2pFuncStoreAssocRspIEBuffer( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -p2pFuncMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ); - -VOID -p2pFuncUpdateMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ); - - -VOID -p2pFuncGetStationInfo( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ); - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ); - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateExtra_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pFuncGenerateP2p_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateWSC_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateP2p_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateP2P_IELen( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -VOID -p2pFuncGenerateP2P_IE( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pFuncAppendAttriExtListenTiming( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -VOID -p2pFuncDissolve( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - - -P_IE_HDR_T -p2pFuncGetSpecIE( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ); - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucAttriID - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_ie.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_ie.h deleted file mode 100755 index fa5b651e3ee3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_ie.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef _P2P_IE_H -#define _P2P_IE_H - - -UINT_32 -p2pCalculate_IEForAssocReq( - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pGenerate_IEForAssocReq( - - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_rlm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_rlm.h deleted file mode 100755 index fe20ac38048f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_rlm.h +++ /dev/null @@ -1,109 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm.h#1 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - - - - -#ifndef _P2P_RLM_H -#define _P2P_RLM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -VOID -rlmFuncInitialChannelList( - IN P_ADAPTER_T prAdapter - ); - -VOID -rlmFuncCommonChannelList( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ); - -UINT_8 -rlmFuncFindOperatingClass( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ); - -BOOLEAN -rlmFuncFindAvailableChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ); - -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_rlm_obss.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_rlm_obss.h deleted file mode 100755 index fa93d94decde..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_rlm_obss.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - - - -#ifndef _P2P_RLM_OBSS_H -#define _P2P_RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_scan.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_scan.h deleted file mode 100755 index 8ba3199f4b02..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_scan.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_scan.h#1 $ -*/ - -/*! \file "scan.h" - \brief - -*/ - - - - -#ifndef _P2P_SCAN_H -#define _P2P_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ); - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ); - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scnEventReturnChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ); - -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -VOID -scanRemoveAllP2pBssDesc( - P_ADAPTER_T prAdapter - ); - -VOID -scanRemoveP2pBssDesc( - P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - - -P_BSS_DESC_T -scanP2pSearchDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ); - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_state.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_state.h deleted file mode 100755 index 22bcf1798ce3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/p2p_state.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef _P2P_STATE_H -#define _P2P_STATE_H - -BOOLEAN -p2pStateInit_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ); - - -VOID -p2pStateAbort_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateAbort_REQING_CHANNEL( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateInit_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -p2pStateAbort_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/privacy.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/privacy.h deleted file mode 100755 index 8f6ffd131803..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/privacy.h +++ /dev/null @@ -1,288 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/privacy.h#1 $ -*/ - -/*! \file privacy.h - \brief This file contains the function declaration for privacy.c. -*/ - - - -/* -** $Log: privacy.h $ - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for auth mode and encryption status setting from build connection command - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for wapi - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the tx done callback handle function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for mac header privacy bit setting - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the structure for parsing the EAPoL frame - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the class error function parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection structure - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _PRIVACY_H -#define _PRIVACY_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_KEY_NUM 4 -#define WEP_40_LEN 5 -#define WEP_104_LEN 13 -#define LEGACY_KEY_MAX_LEN 16 -#define CCMP_KEY_LEN 16 -#define TKIP_KEY_LEN 32 -#define MAX_KEY_LEN 32 -#define MIC_RX_KEY_OFFSET 16 -#define MIC_TX_KEY_OFFSET 24 -#define MIC_KEY_LEN 8 - -#define WEP_KEY_ID_FIELD BITS(0,29) -#define KEY_ID_FIELD BITS(0,7) - -#define IS_TRANSMIT_KEY BIT(31) -#define IS_UNICAST_KEY BIT(30) -#define IS_AUTHENTICATOR BIT(28) - -#define CIPHER_SUITE_NONE 0 -#define CIPHER_SUITE_WEP40 1 -#define CIPHER_SUITE_TKIP 2 -#define CIPHER_SUITE_TKIP_WO_MIC 3 -#define CIPHER_SUITE_CCMP 4 -#define CIPHER_SUITE_WEP104 5 -#define CIPHER_SUITE_BIP 6 -#define CIPHER_SUITE_WEP128 7 -#define CIPHER_SUITE_WPI 8 - -#define WPA_KEY_INFO_KEY_TYPE BIT(3) /* 1 = Pairwise, 0 = Group key */ -#define WPA_KEY_INFO_MIC BIT(8) -#define WPA_KEY_INFO_SECURE BIT(9) - -#define MASK_2ND_EAPOL (WPA_KEY_INFO_KEY_TYPE | WPA_KEY_INFO_MIC) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _IEEE_802_1X_HDR { - UINT_8 ucVersion; - UINT_8 ucType; - UINT_16 u2Length; - /* followed by length octets of data */ -} IEEE_802_1X_HDR, *P_IEEE_802_1X_HDR; - -typedef struct _EAPOL_KEY { - UINT_8 ucType; - /* Note: key_info, key_length, and key_data_length are unaligned */ - UINT_8 aucKeyInfo[2]; /* big endian */ - UINT_8 aucKeyLength[2]; /* big endian */ - UINT_8 aucReplayCounter[8]; - UINT_8 aucKeyNonce[16]; - UINT_8 aucKeyIv[16]; - UINT_8 aucKeyRsc[8]; - UINT_8 aucKeyId[8]; /* Reserved in IEEE 802.11i/RSN */ - UINT_8 aucKeyMic[16]; - UINT_8 aucKeyDataLength[2]; /* big endian */ - /* followed by key_data_length bytes of key_data */ -} EAPOL_KEY, *P_EAPOL_KEY; - -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; - -#if 0 -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -secInit( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ); - -VOID -secSetPortBlocked( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPort - ); - -BOOL -secCheckClassError( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ); - -BOOL -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -secRxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -secSetCipherSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ); - -BOOL -secProcessEAPOL( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen - ); - -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T pMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ); - -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ); - -VOID -secClearPmkid( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secRsnKeyHandshakeEnabled( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secTransmitKeyExist( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secEnabledInAis( - IN P_ADAPTER_T prAdapter - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRIVACY_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rate.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rate.h deleted file mode 100755 index 74c4bb0fc440..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rate.h +++ /dev/null @@ -1,111 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rate.h#1 $ -*/ - -/*! \file rate.h - \brief This file contains the rate utility function of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: rate.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _RATE_H -#define _RATE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in rate.c */ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ); - -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ); - -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ); - -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RATE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm.h deleted file mode 100755 index 197202f73e76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm.h +++ /dev/null @@ -1,451 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm.h#2 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - - - -/* -** $Log: rlm.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cm.chang - * [WCXRP00000114] [MT6620 Wi-Fi] [Driver] Fix compiling warning in Linux about RLM network index checking - * Enum member cannot be used as compiling option decision in Linux - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX HT GF compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 17 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * MT6620 does not support L-SIG TXOP - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Move default value of HT capability to rlm.h - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Modify the prototype of rlmRecAssocRspHtInfo() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add several function prototypes for HT operation - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -#ifndef _RLM_H -#define _RLM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ELEM_EXT_CAP_DEFAULT_VAL \ - (ELEM_EXT_CAP_20_40_COEXIST_SUPPORT /*| ELEM_EXT_CAP_PSMP_CAP*/) - - -#if CFG_SUPPORT_RX_STBC - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_1_SS -#else - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_NO_SUPPORTED -#endif - -#if CFG_SUPPORT_RX_SGI - #define FIELD_HT_CAP_INFO_SGI_20M HT_CAP_INFO_SHORT_GI_20M - #define FIELD_HT_CAP_INFO_SGI_40M HT_CAP_INFO_SHORT_GI_40M -#else - #define FIELD_HT_CAP_INFO_SGI_20M 0 - #define FIELD_HT_CAP_INFO_SGI_40M 0 -#endif - -#if CFG_SUPPORT_RX_HT_GF - #define FIELD_HT_CAP_INFO_HT_GF HT_CAP_INFO_HT_GF -#else - #define FIELD_HT_CAP_INFO_HT_GF 0 -#endif - -#define HT_CAP_INFO_DEFAULT_VAL \ - (HT_CAP_INFO_SUP_CHNL_WIDTH | FIELD_HT_CAP_INFO_HT_GF | \ - FIELD_HT_CAP_INFO_SGI_20M | FIELD_HT_CAP_INFO_SGI_40M | \ - FIELD_HT_CAP_INFO_RX_STBC | HT_CAP_INFO_DSSS_CCK_IN_40M) - - - -#define AMPDU_PARAM_DEFAULT_VAL \ - (AMPDU_PARAM_MAX_AMPDU_LEN_64K | AMPDU_PARAM_MSS_NO_RESTRICIT) - - -#define SUP_MCS_TX_DEFAULT_VAL \ - SUP_MCS_TX_SET_DEFINED /* TX defined and TX/RX equal (TBD) */ - -#if CFG_SUPPORT_MFB - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_BOTH -#else - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_NO_FB -#endif - -#if CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_RDR HT_EXT_CAP_RD_RESPONDER -#else - #define FIELD_HT_EXT_CAP_RDR 0 -#endif - -#if CFG_SUPPORT_MFB || CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_HTC HT_EXT_CAP_HTC_SUPPORT -#else - #define FIELD_HT_EXT_CAP_HTC 0 -#endif - -#define HT_EXT_CAP_DEFAULT_VAL \ - (HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE | \ - FIELD_HT_EXT_CAP_MFB | FIELD_HT_EXT_CAP_HTC | \ - FIELD_HT_EXT_CAP_RDR) - -#define TX_BEAMFORMING_CAP_DEFAULT_VAL 0 -#define ASEL_CAP_DEFAULT_VAL 0 - - -/* Define bandwidth from user setting */ -#define CONFIG_BW_20_40M 0 -#define CONFIG_BW_20M 1 /* 20MHz only */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* It is used for RLM module to judge if specific network is valid - * Note: Ad-hoc mode of AIS is not included now. (TBD) - */ -#define RLM_NET_PARAM_VALID(_prBssInfo) \ - (IS_BSS_ACTIVE(_prBssInfo) && \ - ((_prBssInfo)->eConnectionState == PARAM_MEDIA_STATE_CONNECTED || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_ACCESS_POINT || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_IBSS || \ - RLM_NET_IS_BOW(_prBssInfo)) \ - ) - -#define RLM_NET_IS_11N(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11N) -#define RLM_NET_IS_11GN(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11GN) - - -/* This macro is used to sweep all 3 networks */ -#define RLM_NET_FOR_EACH(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_INDEX_NUM; \ - (_ucNetIdx)++) - -/* This macro is used to sweep all networks excluding BOW */ -#if CFG_ENABLE_BT_OVER_WIFI - /* Note: value of enum NETWORK_TYPE_BOW_INDEX is validated in - * rlmStuctureCheck(). - */ - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_BOW_INDEX; \ - (_ucNetIdx)++) - - #define RLM_NET_IS_BOW(_prBssInfo) \ - ((_prBssInfo)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) - -#else - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) RLM_NET_FOR_EACH(_ucNetIdx) - #define RLM_NET_IS_BOW(_prBssInfo) (FALSE) - -#endif /* end of CFG_ENABLE_BT_OVER_WIFI */ - - -/* The bandwidth modes are not used anymore. They represent if AP - * can use 20/40 bandwidth, not all modes. (20110411) - */ -#define RLM_AP_IS_BW_40_ALLOWED(_prAdapter, _prBssInfo) \ - (((_prBssInfo)->eBand == BAND_2G4 && \ - (_prAdapter)->rWifiVar.rConnSettings.uc2G4BandwidthMode \ - == CONFIG_BW_20_40M) || \ - ((_prBssInfo)->eBand == BAND_5G && \ - (_prAdapter)->rWifiVar.rConnSettings.uc5GBandwidthMode \ - == CONFIG_BW_20_40M)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#ifndef _lint -__KAL_INLINE__ VOID -rlmDataTypeCheck ( - VOID - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_AIS_INDEX < NETWORK_TYPE_BOW_INDEX); - - #if CFG_ENABLE_WIFI_DIRECT - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_P2P_INDEX < NETWORK_TYPE_BOW_INDEX); - #endif -#endif - - return; -} -#endif /* _lint */ - -#endif /* _RLM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_domain.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_domain.h deleted file mode 100755 index fda01372bf37..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_domain.h +++ /dev/null @@ -1,358 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_domain.h#1 $ -*/ - -/*! \file "rlm_domain.h" - \brief -*/ - - - -/* -** $Log: rlm_domain.h $ - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Declare public rDomainInfo - * -** -*/ - -#ifndef _RLM_DOMAIN_H -#define _RLM_DOMAIN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SUBBAND_NUM 6 - - -#define COUNTRY_CODE_NULL ((UINT_16)0x0) - -/* ISO/IEC 3166-1 two-character country codes */ -#define COUNTRY_CODE_AG (((UINT_16) 'A' << 8) | (UINT_16) 'G') /* Antigua/Barbuda */ -#define COUNTRY_CODE_AI (((UINT_16) 'A' << 8) | (UINT_16) 'I') /* Anguilla */ -#define COUNTRY_CODE_AR (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Argentina */ -#define COUNTRY_CODE_AT (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Austria */ -#define COUNTRY_CODE_AU (((UINT_16) 'A' << 8) | (UINT_16) 'U') /* Australia */ -#define COUNTRY_CODE_AW (((UINT_16) 'A' << 8) | (UINT_16) 'W') /* Aruba */ -#define COUNTRY_CODE_BB (((UINT_16) 'B' << 8) | (UINT_16) 'B') /* Barbados */ -#define COUNTRY_CODE_BE (((UINT_16) 'B' << 8) | (UINT_16) 'E') /* Belgium */ -#define COUNTRY_CODE_BM (((UINT_16) 'B' << 8) | (UINT_16) 'M') /* Bermuda */ -#define COUNTRY_CODE_BO (((UINT_16) 'B' << 8) | (UINT_16) 'O') /* Bolivia */ -#define COUNTRY_CODE_BR (((UINT_16) 'B' << 8) | (UINT_16) 'R') /* Brazil */ -#define COUNTRY_CODE_BS (((UINT_16) 'B' << 8) | (UINT_16) 'S') /* Bahamas */ -#define COUNTRY_CODE_BY (((UINT_16) 'B' << 8) | (UINT_16) 'Y') /* Belarus */ -#define COUNTRY_CODE_CA (((UINT_16) 'C' << 8) | (UINT_16) 'A') /* Canada */ -#define COUNTRY_CODE_CH (((UINT_16) 'C' << 8) | (UINT_16) 'H') /* Switzerland */ -#define COUNTRY_CODE_CL (((UINT_16) 'C' << 8) | (UINT_16) 'L') /* Chile */ -#define COUNTRY_CODE_CN (((UINT_16) 'C' << 8) | (UINT_16) 'N') /* China */ -#define COUNTRY_CODE_CO (((UINT_16) 'C' << 8) | (UINT_16) 'O') /* Colombia */ -#define COUNTRY_CODE_CR (((UINT_16) 'C' << 8) | (UINT_16) 'R') /* Costa Rica */ -#define COUNTRY_CODE_CU (((UINT_16) 'C' << 8) | (UINT_16) 'U') /* Cuba */ -#define COUNTRY_CODE_DE (((UINT_16) 'D' << 8) | (UINT_16) 'E') /* Germany */ -#define COUNTRY_CODE_DK (((UINT_16) 'D' << 8) | (UINT_16) 'K') /* Denmark */ -#define COUNTRY_CODE_DM (((UINT_16) 'D' << 8) | (UINT_16) 'M') /* Dominica */ -#define COUNTRY_CODE_DO (((UINT_16) 'D' << 8) | (UINT_16) 'O') /* Dominican Republic */ -#define COUNTRY_CODE_EC (((UINT_16) 'E' << 8) | (UINT_16) 'C') /* Ecuador */ -#define COUNTRY_CODE_EG (((UINT_16) 'E' << 8) | (UINT_16) 'G') /* Egypt */ -#define COUNTRY_CODE_ES (((UINT_16) 'E' << 8) | (UINT_16) 'S') /* Spain */ -#define COUNTRY_CODE_EU (((UINT_16) 'E' << 8) | (UINT_16) 'U') /* ETSI (Europe) */ -#define COUNTRY_CODE_FI (((UINT_16) 'F' << 8) | (UINT_16) 'I') /* Finland */ -#define COUNTRY_CODE_FR (((UINT_16) 'F' << 8) | (UINT_16) 'R') /* France */ -#define COUNTRY_CODE_GB (((UINT_16) 'G' << 8) | (UINT_16) 'B') /* United Kingdom */ -#define COUNTRY_CODE_GD (((UINT_16) 'G' << 8) | (UINT_16) 'D') /* Grenada */ -#define COUNTRY_CODE_GR (((UINT_16) 'G' << 8) | (UINT_16) 'R') /* Greece */ -#define COUNTRY_CODE_GY (((UINT_16) 'G' << 8) | (UINT_16) 'Y') /* Guyana */ -#define COUNTRY_CODE_HK (((UINT_16) 'H' << 8) | (UINT_16) 'K') /* Hong Kong */ -#define COUNTRY_CODE_HT (((UINT_16) 'H' << 8) | (UINT_16) 'T') /* Haiti */ -#define COUNTRY_CODE_HN (((UINT_16) 'H' << 8) | (UINT_16) 'N') /* Honduras */ -#define COUNTRY_CODE_ID (((UINT_16) 'I' << 8) | (UINT_16) 'D') /* Indonesia */ -#define COUNTRY_CODE_IE (((UINT_16) 'I' << 8) | (UINT_16) 'E') /* Ireland */ -#define COUNTRY_CODE_IL (((UINT_16) 'I' << 8) | (UINT_16) 'L') /* Israel */ -#define COUNTRY_CODE_IN (((UINT_16) 'I' << 8) | (UINT_16) 'N') /* India */ -#define COUNTRY_CODE_IR (((UINT_16) 'I' << 8) | (UINT_16) 'R') /* Iran */ -#define COUNTRY_CODE_IS (((UINT_16) 'I' << 8) | (UINT_16) 'S') /* Iceland */ -#define COUNTRY_CODE_IT (((UINT_16) 'I' << 8) | (UINT_16) 'T') /* Italy */ -#define COUNTRY_CODE_JM (((UINT_16) 'J' << 8) | (UINT_16) 'M') /* Jamaica */ -#define COUNTRY_CODE_JO (((UINT_16) 'J' << 8) | (UINT_16) 'O') /* Jordan */ -#define COUNTRY_CODE_JP (((UINT_16) 'J' << 8) | (UINT_16) 'P') /* Japan */ -#define COUNTRY_CODE_KN (((UINT_16) 'K' << 8) | (UINT_16) 'N') /* Saint Kitts and Nevis */ -#define COUNTRY_CODE_KR (((UINT_16) 'K' << 8) | (UINT_16) 'R') /* South Korea */ -#define COUNTRY_CODE_KW (((UINT_16) 'K' << 8) | (UINT_16) 'W') /* Kuwait */ -#define COUNTRY_CODE_LC (((UINT_16) 'L' << 8) | (UINT_16) 'C') /* Saint Lucia */ -#define COUNTRY_CODE_LI (((UINT_16) 'L' << 8) | (UINT_16) 'I') /* Liechtenstein */ -#define COUNTRY_CODE_LK (((UINT_16) 'L' << 8) | (UINT_16) 'K') /* Sri Lanka */ -#define COUNTRY_CODE_LU (((UINT_16) 'L' << 8) | (UINT_16) 'U') /* Luxembourg */ -#define COUNTRY_CODE_MA (((UINT_16) 'M' << 8) | (UINT_16) 'A') /* Morocco */ -#define COUNTRY_CODE_MD (((UINT_16) 'M' << 8) | (UINT_16) 'D') /* Moldova */ -#define COUNTRY_CODE_MX (((UINT_16) 'M' << 8) | (UINT_16) 'X') /* Mexico */ -#define COUNTRY_CODE_MY (((UINT_16) 'M' << 8) | (UINT_16) 'Y') /* Malaysia */ -#define COUNTRY_CODE_NI (((UINT_16) 'N' << 8) | (UINT_16) 'I') /* Nicaragua */ -#define COUNTRY_CODE_NL (((UINT_16) 'N' << 8) | (UINT_16) 'L') /* Netherlands */ -#define COUNTRY_CODE_NO (((UINT_16) 'N' << 8) | (UINT_16) 'O') /* Norway */ -#define COUNTRY_CODE_NZ (((UINT_16) 'N' << 8) | (UINT_16) 'Z') /* New Zealand */ -#define COUNTRY_CODE_OM (((UINT_16) 'O' << 8) | (UINT_16) 'M') /* Oman */ -#define COUNTRY_CODE_PE (((UINT_16) 'P' << 8) | (UINT_16) 'E') /* Peru */ -#define COUNTRY_CODE_PG (((UINT_16) 'P' << 8) | (UINT_16) 'G') /* Papua New Guinea */ -#define COUNTRY_CODE_PH (((UINT_16) 'P' << 8) | (UINT_16) 'H') /* Philippines */ -#define COUNTRY_CODE_PK (((UINT_16) 'P' << 8) | (UINT_16) 'K') /* Pakistan */ -#define COUNTRY_CODE_PR (((UINT_16) 'P' << 8) | (UINT_16) 'R') /* Puerto Rico */ -#define COUNTRY_CODE_PT (((UINT_16) 'P' << 8) | (UINT_16) 'T') /* Portugal */ -#define COUNTRY_CODE_PY (((UINT_16) 'P' << 8) | (UINT_16) 'Y') /* Paraguay */ -#define COUNTRY_CODE_PZ (((UINT_16) 'P' << 8) | (UINT_16) 'Z') /* Panama */ -#define COUNTRY_CODE_RU (((UINT_16) 'R' << 8) | (UINT_16) 'U') /* Russian */ -#define COUNTRY_CODE_SA (((UINT_16) 'S' << 8) | (UINT_16) 'A') /* Saudi Arabia */ -#define COUNTRY_CODE_SE (((UINT_16) 'S' << 8) | (UINT_16) 'E') /* Sweden */ -#define COUNTRY_CODE_SG (((UINT_16) 'S' << 8) | (UINT_16) 'G') /* Singapore */ -#define COUNTRY_CODE_SR (((UINT_16) 'S' << 8) | (UINT_16) 'R') /* Suriname */ -#define COUNTRY_CODE_TW (((UINT_16) 'T' << 8) | (UINT_16) 'W') /* Taiwan */ -#define COUNTRY_CODE_TH (((UINT_16) 'T' << 8) | (UINT_16) 'H') /* Thailand */ -#define COUNTRY_CODE_TR (((UINT_16) 'T' << 8) | (UINT_16) 'R') /* Turkey */ -#define COUNTRY_CODE_TT (((UINT_16) 'T' << 8) | (UINT_16) 'T') /* Trinidad */ -#define COUNTRY_CODE_UA (((UINT_16) 'U' << 8) | (UINT_16) 'A') /* Ukraine */ -#define COUNTRY_CODE_US (((UINT_16) 'U' << 8) | (UINT_16) 'S') /* United States */ -#define COUNTRY_CODE_UY (((UINT_16) 'U' << 8) | (UINT_16) 'Y') /* Uruguay */ -#define COUNTRY_CODE_VC (((UINT_16) 'V' << 8) | (UINT_16) 'C') /* Saint Vincent */ -#define COUNTRY_CODE_VE (((UINT_16) 'V' << 8) | (UINT_16) 'E') /* Venezuela */ -#define COUNTRY_CODE_VN (((UINT_16) 'V' << 8) | (UINT_16) 'N') /* Vietnam */ - -/* dot11RegDomainsSupportValue */ -#define MIB_REG_DOMAIN_FCC 0x10 /* FCC (US) */ -#define MIB_REG_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define MIB_REG_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define MIB_REG_DOMAIN_SPAIN 0x31 /* Spain */ -#define MIB_REG_DOMAIN_FRANCE 0x32 /* France */ -#define MIB_REG_DOMAIN_JAPAN 0x40 /* MPHPT (Japan) */ -#define MIB_REG_DOMAIN_OTHER 0x00 /* other */ - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Define channel offset in unit of 5MHz bandwidth */ -typedef enum _ENUM_CHNL_SPAN_T { - CHNL_SPAN_5 = 1, - CHNL_SPAN_10 = 2, - CHNL_SPAN_20 = 4, - CHNL_SPAN_40 = 8 -} ENUM_CHNL_SPAN_T, *P_ENUM_CHNL_SPAN_T; - -/* Define BSS operating bandwidth */ -typedef enum _ENUM_CHNL_BW_T { - CHNL_BW_20, - CHNL_BW_20_40, - CHNL_BW_10, - CHNL_BW_5 -} ENUM_CHNL_BW_T, *P_ENUM_CHNL_BW_T; - -#if 0 -/* If channel width is CHNL_BW_20_40, the first channel will be SCA and - * the second channel is SCB, then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - UINT_8 ucRegClass; - ENUM_BAND_T eBand; - ENUM_CHNL_SPAN_T eChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - ENUM_CHNL_BW_T eChannelBw; - BOOLEAN fgDfsNeeded; - BOOLEAN fgIbssProhibited; -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - UINT_16 u2CountryCode; - UINT_16 u2MibRegDomainValue; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; - -#else /* New definition 20110830 */ - -/* In all bands, the first channel will be SCA and the second channel is SCB, - * then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - /* Note1: regulation class depends on operation bandwidth and RF band. - * For example: 2.4GHz, 1~13, 20MHz ==> regulation class = 81 - * 2.4GHz, 1~13, SCA ==> regulation class = 83 - * 2.4GHz, 1~13, SCB ==> regulation class = 84 - * Note2: TX power limit is not specified here because path loss is unknown - */ - UINT_8 ucRegClass; /* Regulation class for 20MHz */ - UINT_8 ucBand; /* Type: ENUM_BAND_T */ - UINT_8 ucChannelSpan; /* Type: ENUM_CHNL_SPAN_T */ - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 ucReserved; /* Type: BOOLEAN (fgDfsNeeded) */ -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - PUINT_16 pu2CountryGroup; - UINT_32 u4CountryNum; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; -#endif - -/* The following definitions are not used yet */ -typedef enum _ENUM_CH_SET_2G4_T { - CH_SET_2G4_NA, - CH_SET_2G4_1_11, - CH_SET_2G4_1_13, - CH_SET_2G4_1_14, - CH_SET_2G4_NUM -} ENUM_CH_SET_2G4_T, *P_ENUM_CH_SET_2G4_T; - -typedef enum _ENUM_CH_SET_UNII_LOW_T { - CH_SET_UNII_LOW_NA, - CH_SET_UNII_LOW_36_48, - CH_SET_UNII_LOW_NUM -} ENUM_CH_SET_UNII_LOW_T, *P_ENUM_CH_SET_UNII_LOW_T; - -typedef enum _ENUM_CH_SET_UNII_MID_T { - CH_SET_UNII_MID_NA, - CH_SET_UNII_MID_52_64, - CH_SET_UNII_MID_NUM -} ENUM_CH_SET_UNII_MID_T, *P_ENUM_CH_SET_UNII_MID_T; - -typedef enum _ENUM_CH_SET_UNII_WW_T { - CH_SET_UNII_WW_NA, - CH_SET_UNII_WW_100_128, - CH_SET_UNII_WW_100_140, - CH_SET_UNII_WW_100_116_132_140, - CH_SET_UNII_WW_NUM -} ENUM_CH_SET_UNII_WW_T, *P_ENUM_CH_SET_UNII_WW_T; - -typedef enum _ENUM_CH_SET_UNII_UPPER_T { - CH_SET_UNII_UPPER_NA, - CH_SET_UNII_UPPER_149_161, - CH_SET_UNII_UPPER_149_165, - CH_SET_UNII_UPPER_149_173, - CH_SET_UNII_UPPER_NUM -} ENUM_CH_SET_UNII_UPPER_T, *P_ENUM_CH_SET_UNII_UPPER_T; - -typedef struct _COUNTRY_CH_SET_T { - ENUM_CH_SET_2G4_T e2G4; - ENUM_CH_SET_UNII_LOW_T eUniiLow; - ENUM_CH_SET_UNII_MID_T eUniiMid; - ENUM_CH_SET_UNII_WW_T eUniiWw; - ENUM_CH_SET_UNII_UPPER_T eUniiUpper; -} COUNTRY_CH_SET_T, *P_COUNTRY_CH_SET_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ); - -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ); - -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_DOMAIN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_obss.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_obss.h deleted file mode 100755 index 20533c95762f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_obss.h +++ /dev/null @@ -1,164 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - - - -/* -** $Log: rlm_obss.h $ - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_OBSS_H -#define _RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - - -#define CHNL_LEVEL0 0 -#define CHNL_LEVEL1 1 -#define CHNL_LEVEL2 2 - -#define AFFECTED_CHNL_OFFSET 5 - -#define OBSS_SCAN_MIN_INTERVAL 10 /* In unit of sec */ - -#define PUBLIC_ACTION_MAX_LEN 200 /* In unit of byte */ - -/* P2P GO only */ -/* Define default OBSS Scan parameters (from MIB in spec.) */ -#define dot11OBSSScanPassiveDwell 20 -#define dot11OBSSScanActiveDwell 10 -#define dot11OBSSScanPassiveTotalPerChannel 200 -#define dot11OBSSScanActiveTotalPerChannel 20 -#define dot11BSSWidthTriggerScanInterval 300 /* Unit: sec */ -#define dot11BSSWidthChannelTransitionDelayFactor 5 -#define dot11OBSSScanActivityThreshold 25 - -#define OBSS_20_40M_TIMEOUT (dot11BSSWidthTriggerScanInterval + 10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Control MAC PCO function */ -typedef enum _ENUM_SYS_PCO_PHASE_T { - SYS_PCO_PHASE_DISABLED = 0, - SYS_PCO_PHASE_20M, - SYS_PCO_PHASE_40M -} ENUM_SYS_PCO_PHASE_T, *P_ENUM_SYS_PCO_PHASE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_OBSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_protection.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_protection.h deleted file mode 100755 index 6025b9044740..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rlm_protection.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rlm_protection.h#1 $ -*/ - -/*! \file "rlm_protection.h" - \brief -*/ - - - -/* -** $Log: rlm_protection.h $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_PROTECTION_H -#define _RLM_PROTECTION_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SYS_PROTECT_MODE_T { - SYS_PROTECT_MODE_NONE = 0, /* Mode 0 */ - SYS_PROTECT_MODE_ERP, /* Mode 1 */ - SYS_PROTECT_MODE_NON_HT, /* Mode 2 */ - SYS_PROTECT_MODE_20M, /* Mode 3 */ - - SYS_PROTECT_MODE_NUM -} ENUM_SYS_PROTECT_MODE_T, *P_ENUM_SYS_PROTECT_MODE_T; - -/* This definition follows HT Protection field of HT Operation IE */ -typedef enum _ENUM_HT_PROTECT_MODE_T { - HT_PROTECT_MODE_NONE = 0, - HT_PROTECT_MODE_NON_MEMBER, - HT_PROTECT_MODE_20M, - HT_PROTECT_MODE_NON_HT, - - HT_PROTECT_MODE_NUM -} ENUM_HT_PROTECT_MODE_T, *P_ENUM_HT_PROTECT_MODE_T; - - -typedef enum _ENUM_GF_MODE_T { - GF_MODE_NORMAL = 0, - GF_MODE_PROTECT, - GF_MODE_DISALLOWED, - - GF_MODE_NUM -} ENUM_GF_MODE_T, *P_ENUM_GF_MODE_T; - -typedef enum _ENUM_RIFS_MODE_T { - RIFS_MODE_NORMAL = 0, - RIFS_MODE_DISALLOWED, - - RIFS_MODE_NUM -} ENUM_RIFS_MODE_T, *P_ENUM_RIFS_MODE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_PROTECTION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/roaming_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/roaming_fsm.h deleted file mode 100755 index 2a744f7e3c68..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/roaming_fsm.h +++ /dev/null @@ -1,209 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.h" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - - - -/* -** $Log: roaming_fsm.h $ - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -#ifndef _ROAMING_FSM_H -#define _ROAMING_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Roaming Discovery interval, SCAN result need to be updated */ -#define ROAMING_DISCOVERY_TIMEOUT_SEC 5 // Seconds. - -//#define ROAMING_NO_SWING_RCPI_STEP 5 //rcpi -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_ROAMING_FAIL_REASON_T { - ROAMING_FAIL_REASON_CONNLIMIT = 0, - ROAMING_FAIL_REASON_NOCANDIDATE, - ROAMING_FAIL_REASON_NUM -} ENUM_ROAMING_FAIL_REASON_T; - -/* events of roaming between driver and firmware */ -typedef enum _ENUM_ROAMING_EVENT_T { - ROAMING_EVENT_START = 0, - ROAMING_EVENT_DISCOVERY, - ROAMING_EVENT_ROAM, - ROAMING_EVENT_FAIL, - ROAMING_EVENT_ABORT, - ROAMING_EVENT_NUM -} ENUM_ROAMING_EVENT_T; - -typedef struct _ROAMING_PARAM_T { - UINT_16 u2Event; - UINT_16 u2Data; -} ROAMING_PARAM_T, *P_ROAMING_PARAM_T; - -/**/ -typedef enum _ENUM_ROAMING_STATE_T { - ROAMING_STATE_IDLE = 0, - ROAMING_STATE_DECISION, - ROAMING_STATE_DISCOVERY, - ROAMING_STATE_ROAM, - ROAMING_STATE_NUM -} ENUM_ROAMING_STATE_T; - -typedef struct _ROAMING_INFO_T { - BOOLEAN fgIsEnableRoaming; - - ENUM_ROAMING_STATE_T eCurrentState; - - OS_SYSTIME rRoamingDiscoveryUpdateTime; - -} ROAMING_INFO_T, *P_ROAMING_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if CFG_SUPPORT_ROAMING -#define IS_ROAMING_ACTIVE(prAdapter) \ - (prAdapter->rWifiVar.rRoamingInfo.eCurrentState == ROAMING_STATE_ROAM) -#else -#define IS_ROAMING_ACTIVE(prAdapter) FALSE -#endif /* CFG_SUPPORT_ROAMING */ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ); - -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Reason - ); - -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ROAMING_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rsn.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rsn.h deleted file mode 100755 index dcb05b1fbbfb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/rsn.h +++ /dev/null @@ -1,380 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/rsn.h#1 $ -*/ - -/*! \file rsn.h - \brief The wpa/rsn related define, macro and structure are described here. -*/ - - - -/* -** $Log: rsn.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype for generate wap/rsn ie - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function input parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some event function declaration - * - * Nov 26 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the internal data structure for pmkid to rsn.h - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the port control and class error function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the pmkid candidate - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _RSN_H -#define _RSN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* ----- Definitions for Cipher Suite Selectors ----- */ -#define RSN_CIPHER_SUITE_USE_GROUP_KEY 0x00AC0F00 -#define RSN_CIPHER_SUITE_WEP40 0x01AC0F00 -#define RSN_CIPHER_SUITE_TKIP 0x02AC0F00 -#define RSN_CIPHER_SUITE_CCMP 0x04AC0F00 -#define RSN_CIPHER_SUITE_WEP104 0x05AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_CIPHER_SUITE_AES_128_CMAC 0x06AC0F00 -#endif - -#define WPA_CIPHER_SUITE_NONE 0x00F25000 -#define WPA_CIPHER_SUITE_WEP40 0x01F25000 -#define WPA_CIPHER_SUITE_TKIP 0x02F25000 -#define WPA_CIPHER_SUITE_CCMP 0x04F25000 -#define WPA_CIPHER_SUITE_WEP104 0x05F25000 - -/* ----- Definitions for Authentication and Key Management Suite Selectors ----- */ -#define RSN_AKM_SUITE_NONE 0x00AC0F00 -#define RSN_AKM_SUITE_802_1X 0x01AC0F00 -#define RSN_AKM_SUITE_PSK 0x02AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_AKM_SUITE_802_1X_SHA256 0x05AC0F00 -#define RSN_AKM_SUITE_PSK_SHA256 0x06AC0F00 -#endif - -#define WPA_AKM_SUITE_NONE 0x00F25000 -#define WPA_AKM_SUITE_802_1X 0x01F25000 -#define WPA_AKM_SUITE_PSK 0x02F25000 - -#define ELEM_ID_RSN_LEN_FIXED 20 /* The RSN IE len for associate request */ - -#define ELEM_ID_WPA_LEN_FIXED 22 /* The RSN IE len for associate request */ - -#define MASK_RSNIE_CAP_PREAUTH BIT(0) - -#define GET_SELECTOR_TYPE(x) ((UINT_8)(((x) >> 24) & 0x000000FF)) -#define SET_SELECTOR_TYPE(x, y) x = (((x) & 0x00FFFFFF) | (((UINT_32)(y) << 24) & 0xFF000000)) - -#define AUTH_CIPHER_CCMP 0x00000008 - -/* Cihpher suite flags */ -#define CIPHER_FLAG_NONE 0x00000000 -#define CIPHER_FLAG_WEP40 0x00000001 /* BIT 1 */ -#define CIPHER_FLAG_TKIP 0x00000002 /* BIT 2 */ -#define CIPHER_FLAG_CCMP 0x00000008 /* BIT 4 */ -#define CIPHER_FLAG_WEP104 0x00000010 /* BIT 5 */ -#define CIPHER_FLAG_WEP128 0x00000020 /* BIT 6 */ - -#define WAIT_TIME_IND_PMKID_CANDICATE_SEC 6 /* seconds */ -#define TKIP_COUNTERMEASURE_SEC 60 /* seconds */ - -#if CFG_SUPPORT_802_11W -#define RSN_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define RSN_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define RSN_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Flags for PMKID Candidate list structure */ -#define EVENT_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 - - -#define CONTROL_FLAG_UC_MGMT_NO_ENC BIT(5) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RSN_IE(fp) ((P_RSN_INFO_ELEM_T) fp) -#define WPA_IE(fp) ((P_WPA_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -rsnParseRsnIE( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ); - -BOOLEAN -rsnParseWpaIE( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ); - -BOOLEAN -rsnSearchSupportedCipher( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnSearchAKMSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGenerateWpaNoneIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateWPAIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateRSNIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -rsnParseCheckForWFAInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ); - -#if CFG_SUPPORT_AAA -void -rsnParserCheckForRSNCCMPPSK ( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ); -#endif - -VOID -rsnTkipHandleMICFailure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ); - -VOID -rsnSelectPmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -rsnUpdatePmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -rsnSearchPmkidEntry( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ); - -BOOLEAN -rsnCheckPmkidCandicate( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnCheckPmkidCache( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGeneratePmkidIndication( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnIndicatePmkidCand( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); -#if CFG_SUPPORT_WPS2 -VOID -rsnGenerateWSCIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif - -#if CFG_SUPPORT_802_11W -UINT_32 -rsnCheckBipKeyInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_8 -rsnCheckSaQueryTimeout( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQueryTimer( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStopSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnSaQueryRequest( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -void -rsnSaQueryAction( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -rsnCheckRxMgmt( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ); -#endif -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RSN_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/scan.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/scan.h deleted file mode 100755 index 85ab71281b58..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/scan.h +++ /dev/null @@ -1,847 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "scan.h" - \brief - -*/ - - - -/* -** $Log: scan.h $ - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 12 2010 yuche.tsai - * NULL - * Add a functio prototype to find p2p descriptor of a bss descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Add function prototype for return channel. - * modify data structure for scan specific device ID or TYPE. (Move from P2P Connection Settings to Scan Param) - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add a option for channel time extention in scan abort command. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Scan status "FIND" is used for P2P FSM find state. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field in SCAN_PARAM_T. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * - * Add new HW CH macro support - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify scanBuildProbeReqFrameCommonIEs() to support P2P SCAN - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Simplify the process of Beacon during SCAN and remove redundant variable in PRE_BSS_DESC_T - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding variable for wapi ap - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove non-used secuirty variavle - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Refine data structure of BSS_DESC_T and PRE_BSS_DESC_T - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add eNetType to rScanParam and revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add ucAvailablePhyTypeSet to BSS_DESC_T - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aucSrcAddress to SCAN_PARAM_T for P2P's Device Address - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security related variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security ie filed for scan parsing - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function declarations of scan_fsm.c - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scan.h to source control -** -*/ - -#ifndef _SCAN_H -#define _SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! Maximum buffer size of SCAN list */ -#define SCN_MAX_BUFFER_SIZE (CFG_MAX_NUM_BSS_LIST * ALIGN_4(sizeof(BSS_DESC_T))) - -#define SCN_RM_POLICY_EXCLUDE_CONNECTED BIT(0) // Remove SCAN result except the connected one. -#define SCN_RM_POLICY_TIMEOUT BIT(1) // Remove the timeout one -#define SCN_RM_POLICY_OLDEST_HIDDEN BIT(2) // Remove the oldest one with hidden ssid -#define SCN_RM_POLICY_SMART_WEAKEST BIT(3) /* If there are more than half BSS which has the - * same ssid as connection setting, remove the weakest one from them - * Else remove the weakest one. - */ -#define SCN_RM_POLICY_ENTIRE BIT(4) // Remove entire SCAN result - -#define SCN_BSS_DESC_SAME_SSID_THRESHOLD 3 /* This is used by POLICY SMART WEAKEST, - * If exceed this value, remove weakest BSS_DESC_T - * with same SSID first in large network. - */ - -#define SCN_BSS_DESC_REMOVE_TIMEOUT_SEC 5 // Second. - /* This is used by POLICY TIMEOUT, - * If exceed this value, remove timeout BSS_DESC_T. - */ - - - - -#define SCN_PROBE_DELAY_MSEC 0 - -#define SCN_ADHOC_BSS_DESC_TIMEOUT_SEC 5 // Second. - -/*----------------------------------------------------------------------------*/ -/* MSG_SCN_SCAN_REQ */ -/*----------------------------------------------------------------------------*/ -#define SCAN_REQ_SSID_WILDCARD BIT(0) -#define SCAN_REQ_SSID_P2P_WILDCARD BIT(1) -#define SCAN_REQ_SSID_SPECIFIED BIT(2) - - -/*----------------------------------------------------------------------------*/ -/* Support Multiple SSID SCAN */ -/*----------------------------------------------------------------------------*/ -#define SCN_SSID_MAX_NUM 4 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SCAN_TYPE_T { - SCAN_TYPE_PASSIVE_SCAN = 0, - SCAN_TYPE_ACTIVE_SCAN, - SCAN_TYPE_NUM -} ENUM_SCAN_TYPE_T, *P_ENUM_SCAN_TYPE_T; - -typedef enum _ENUM_SCAN_STATE_T { - SCAN_STATE_IDLE = 0, - SCAN_STATE_SCANNING, - SCAN_STATE_NUM -} ENUM_SCAN_STATE_T; - -typedef enum _ENUM_SCAN_CHANNEL_T { - SCAN_CHANNEL_FULL = 0, - SCAN_CHANNEL_2G4, - SCAN_CHANNEL_5G, - SCAN_CHANNEL_P2P_SOCIAL, - SCAN_CHANNEL_SPECIFIED, - SCAN_CHANNEL_NUM -} ENUM_SCAN_CHANNEL, *P_ENUM_SCAN_CHANNEL; - -typedef struct _MSG_SCN_FSM_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4Dummy; -} MSG_SCN_FSM_T, *P_MSG_SCN_FSM_T; - - - -/*----------------------------------------------------------------------------*/ -/* BSS Descriptors */ -/*----------------------------------------------------------------------------*/ -struct _BSS_DESC_T { - LINK_ENTRY_T rLinkEntry; - - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ - - BOOLEAN fgIsConnecting; /* If we are going to connect to this BSS - * (JOIN or ROAMING to another BSS), don't - * remove this record from BSS List. - */ - BOOLEAN fgIsConnected; /* If we have connected to this BSS (NORMAL_TR), - * don't removed this record from BSS list. - */ - - BOOLEAN fgIsHiddenSSID; /* When this flag is TRUE, means the SSID - * of this BSS is not known yet. - */ - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - OS_SYSTIME rUpdateTime; - - ENUM_BSS_TYPE_T eBSSType; - - UINT_16 u2CapInfo; - - UINT_16 u2BeaconInterval; - UINT_16 u2ATIMWindow; - - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - BOOLEAN fgIsERPPresent; - BOOLEAN fgIsHTPresent; - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this BSS */ - - UINT_8 ucChannelNum; - - ENUM_CHNL_EXT_T eSco; /* Record bandwidth for association process - Some AP will send association resp by 40MHz BW */ - ENUM_BAND_T eBand; - - UINT_8 ucDTIMPeriod; - - BOOLEAN fgIsLargerTSF; /* This BSS's TimeStamp is larger than us(TCL == 1 in RX_STATUS_T) */ - - UINT_8 ucRCPI; - - UINT_8 ucWmmFlag; /* A flag to indicate this BSS's WMM capability */ - - /*! \brief The srbiter Search State will matched the scan result, - and saved the selected cipher and akm, and report the score, - for arbiter join state, join module will carry this target BSS - to rsn generate ie function, for gen wpa/rsn ie */ - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - - UINT_16 u2RsnCap; - - RSN_INFO_T rRSNInfo; - RSN_INFO_T rWPAInfo; -#if 1//CFG_SUPPORT_WAPI - WAPI_INFO_T rIEWAPI; - BOOL fgIEWAPI; -#endif - BOOL fgIERSN; - BOOL fgIEWPA; - - /*! \brief RSN parameters selected for connection */ - /*! \brief The Select score for final AP selection, - 0, no sec, 1,2,3 group cipher is WEP, TKIP, CCMP */ - UINT_8 ucEncLevel; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PPresent; - P_P2P_DEVICE_DESC_T prP2pDesc; - - UINT_8 aucIntendIfAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ -// UINT_8 ucDevCapabilityBitmap; /* Device Capability Attribute. (P2P_DEV_CAPABILITY_XXXX) */ -// UINT_8 ucGroupCapabilityBitmap; /* Group Capability Attribute. (P2P_GROUP_CAPABILITY_XXXX) */ - - LINK_T rP2pDeviceList; - -// P_LINK_T prP2pDeviceList; - - /* For - * 1. P2P Capability. - * 2. P2P Device ID. ( in aucSrcAddr[] ) - * 3. NOA (TODO:) - * 4. Extend Listen Timing. (Probe Rsp) (TODO:) - * 5. P2P Device Info. (Probe Rsp) - * 6. P2P Group Info. (Probe Rsp) - */ -#endif - - BOOLEAN fgIsIEOverflow; /* The received IE length exceed the maximum IE buffer size */ - UINT_16 u2IELength; /* The byte count of aucIEBuf[] */ - - ULARGE_INTEGER u8TimeStamp; /* Place u8TimeStamp before aucIEBuf[1] to force DW align */ - - UINT_8 aucIEBuf[CFG_IE_BUFFER_SIZE]; -}; - - -typedef struct _SCAN_PARAM_T { /* Used by SCAN FSM */ - /* Active or Passive */ - ENUM_SCAN_TYPE_T eScanType; - - /* Network Type */ - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - /* Specified SSID Type */ - UINT_8 ucSSIDType; - UINT_8 ucSSIDNum; - - /* Length of Specified SSID */ - UINT_8 ucSpecifiedSSIDLen[SCN_SSID_MAX_NUM]; - - /* Specified SSID */ - UINT_8 aucSpecifiedSSID[SCN_SSID_MAX_NUM][ELEM_MAX_LEN_SSID]; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgFindSpecificDev; /* P2P: Discovery Protocol */ - UINT_8 aucDiscoverDevAddr[MAC_ADDR_LEN]; - BOOLEAN fgIsDevType; - P2P_DEVICE_TYPE_T rDiscoverDevType; - - UINT_16 u2PassiveListenInterval; - // TODO: Find Specific Device Type. -#endif /* CFG_SUPPORT_P2P */ - - BOOLEAN fgIsObssScan; - BOOLEAN fgIsScanV2; - - /* Run time flags */ - UINT_16 u2ProbeDelayTime; - - /* channel information */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - - /* Feedback information */ - UINT_8 ucSeqNum; - - /* Information Element */ - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; - -} SCAN_PARAM_T, *P_SCAN_PARAM_T; - -typedef struct _SCAN_INFO_T { - ENUM_SCAN_STATE_T eCurrentState; /* Store the STATE variable of SCAN FSM */ - - OS_SYSTIME rLastScanCompletedTime; - - SCAN_PARAM_T rScanParam; - - UINT_32 u4NumOfBssDesc; - - UINT_8 aucScanBuffer[SCN_MAX_BUFFER_SIZE]; - - LINK_T rBSSDescList; - - LINK_T rFreeBSSDescList; - - LINK_T rPendingMsgList; - - /* Sparse Channel Detection */ - BOOLEAN fgIsSparseChannelValid; - RF_CHANNEL_INFO_T rSparseChannel; - -} SCAN_INFO_T, *P_SCAN_INFO_T; - - -/* Incoming Mailbox Messages */ -typedef struct _MSG_SCN_SCAN_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucSSID[PARAM_MAX_LEN_SSID]; -#if CFG_ENABLE_WIFI_DIRECT - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ -#endif - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ, *P_MSG_SCN_SCAN_REQ; - -typedef struct _MSG_SCN_SCAN_REQ_V2_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDNum; - P_PARAM_SSID_T prSsid; - UINT_16 u2ProbeDelay; - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ_V2, *P_MSG_SCN_SCAN_REQ_V2; - - -typedef struct _MSG_SCN_SCAN_CANCEL_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsChannelExt; -#endif -} MSG_SCN_SCAN_CANCEL, *P_MSG_SCN_SCAN_CANCEL; - -/* Outgoing Mailbox Messages */ -typedef enum _ENUM_SCAN_STATUS_T { - SCAN_STATUS_DONE = 0, - SCAN_STATUS_CANCELLED, - SCAN_STATUS_FAIL, - SCAN_STATUS_BUSY, - SCAN_STATUS_NUM -} ENUM_SCAN_STATUS, *P_ENUM_SCAN_STATUS; - -typedef struct _MSG_SCN_SCAN_DONE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_STATUS eScanStatus; -} MSG_SCN_SCAN_DONE, *P_MSG_SCN_SCAN_DONE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in scan.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Search */ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Search - Alternative */ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Allocation */ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Removal */ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ); - -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/* BSS-DESC State Change */ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -#if 0 -/* BSS-DESC Insertion */ -P_BSS_DESC_T -scanAddToInternalScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb, - IN P_BSS_DESC_T prBssDesc - ); -#endif - -/* BSS-DESC Insertion - ALTERNATIVE */ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -scanBuildProbeReqFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucDesiredSsid, - IN UINT_32 u4DesiredSsidLen, - IN UINT_16 u2SupportedRateSet - ); - -WLAN_STATUS -scanSendProbeReqFrames ( - IN P_ADAPTER_T prAdapter, - IN P_SCAN_PARAM_T prScanParam - ); - -VOID -scanUpdateBssDescForSearch ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in scan_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Command Routines */ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* RX Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ); - -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ); - -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Generation */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Query for sparse channel */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ); - - -#endif /* _SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/sec_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/sec_fsm.h deleted file mode 100755 index 17c651937abc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/sec_fsm.h +++ /dev/null @@ -1,284 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/sec_fsm.h#1 $ -*/ - -/*! \file sec_fsm.h - \brief Declaration of functions and finite state machine for SECURITY Module. - - Function declaration for privacy.c and SEC_STATE for SECURITY FSM. -*/ - - - -/* -** $Log: sec_fsm.h $ - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the deauth Tx done callback parameter - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the reference function declaration - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * delete non-used code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\14 2009-04-06 15:35:47 GMT mtk01088 -** add the variable to set the disable AP selection for privacy check, for wps open networking. -** \main\maintrunk.MT5921\13 2008-11-19 11:46:01 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\12 2008-08-28 20:37:11 GMT mtk01088 -** remove non-used code -** -** \main\maintrunk.MT5921\11 2008-03-18 09:51:52 GMT mtk01088 -** Add function declaration for timer to indicate pmkid candidate -** \main\maintrunk.MT5921\10 2008-02-29 15:12:08 GMT mtk01088 -** add variable for sw port control -** \main\maintrunk.MT5921\9 2008-02-29 12:37:30 GMT mtk01088 -** rename the security related function declaration -** \main\maintrunk.MT5921\8 2007-12-27 13:59:08 GMT mtk01088 -** adjust the wlan table and sec fsm init timing -** \main\maintrunk.MT5921\7 2007-11-20 10:39:49 GMT mtk01088 -** add function timer for wait EAPoL Error timeout -** \main\maintrunk.MT5921\6 2007-11-06 20:39:08 GMT mtk01088 -** rename the counter measure timer -** \main\maintrunk.MT5921\5 2007-11-06 20:14:31 GMT mtk01088 -** add a abort function -** Revision 1.5 2007/07/16 02:33:42 MTK01088 -** change the ENUM declaration structure prefix from r to e -** -** Revision 1.4 2007/07/09 06:23:10 MTK01088 -** update -** -** Revision 1.3 2007/07/04 10:09:04 MTK01088 -** adjust the state for security fsm -** change function name -** -** Revision 1.2 2007/07/03 08:13:22 MTK01088 -** change the sec fsm state -** add the event for sec fsm -** -** Revision 1.1 2007/06/27 06:20:35 MTK01088 -** add the sec fsm header file -** -** -*/ -#ifndef _SEC_FSM_H -#define _SEC_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* TKIP CounterMeasure interval for Rejoin to Network. */ -#define COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC 60 - -/* Timeout to wait the EAPoL Error Report frame Send out. */ -#define EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef UINT_32 SEC_STATUS, *P_SEC_STATUS; - -#if 0 -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; /* MAC address */ - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; -#endif - -typedef SEC_STATUS (*PFN_SEC_FSM_STATE_HANDLER)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SEC_STATE_TRANSITION_FLAG fgIsTransition -#define SEC_NEXT_STATE_VAR eNextState - -#define SEC_STATE_TRANSITION(prAdapter, prSta, eFromState, eToState) \ - { secFsmTrans_ ## eFromState ## _to_ ## eToState(prAdapter, prSta); \ - SEC_NEXT_STATE_VAR = SEC_STATE_ ## eToState; \ - SEC_STATE_TRANSITION_FLAG = (BOOLEAN)TRUE; \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle the sec check */ -/*--------------------------------------------------------------*/ -/***** Routines in sec_fsm.c *****/ -VOID -secFsmInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventStart( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secFsmEventPTKInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent2ndEapolTx( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent4ndEapolTxDone( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -VOID -secFsmEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventStartCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEndOfCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _SEC_FSM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/swcr.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/swcr.h deleted file mode 100755 index 4ea322d9763d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/swcr.h +++ /dev/null @@ -1,180 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/swcr.h#1 $ -*/ - -/*! \file "swcr.h" - \brief -*/ - - - -/* - * - */ - -#ifndef _SWCR_H -#define _SWCR_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define SWCR_VAR(x) ((VOID *)&x) -#define SWCR_FUNC(x) ((VOID *)x) - -#define SWCR_T_FUNC BIT(7) - -#define SWCR_L_32 3 -#define SWCR_L_16 2 -#define SWCR_L_8 1 - -#define SWCR_READ 0 -#define SWCR_WRITE 1 - -#define SWCR_MAP_NUM(x) (sizeof(x)/sizeof(x[0])) - -#define SWCR_CR_NUM 7 - -#define SWCR_GET_RW_INDEX(action,rw,index) \ - index = action & 0x7F; \ - rw = action >> 7; - - -extern UINT_32 g_au4SwCr[]; /*: 0: command other: data */ - -typedef VOID (*PFN_SWCR_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); -typedef VOID (*PFN_CMD_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); - -typedef struct _SWCR_MAP_ENTRY_T { - UINT_16 u2Type; - PVOID u4Addr; -} SWCR_MAP_ENTRY_T, *P_SWCR_MAP_ENTRY_T; - - -typedef struct _SWCR_MOD_MAP_ENTRY_T { - UINT_8 ucMapNum; - P_SWCR_MAP_ENTRY_T prSwCrMap; -} SWCR_MOD_MAP_ENTRY_T, *P_SWCR_MOD_MAP_ENTRY_T; - -typedef enum _ENUM_SWCR_DBG_TYPE_T { - SWCR_DBG_TYPE_ALL = 0, - SWCR_DBG_TYPE_TXRX, - SWCR_DBG_TYPE_RX_RATES, - SWCR_DBG_TYPE_PS, - SWCR_DBG_TYPE_NUM -} ENUM_SWCR_DBG_TYPE_T; - -typedef enum _ENUM_SWCR_DBG_ALL_T { - SWCR_DBG_ALL_TX_CNT = 0, - SWCR_DBG_ALL_TX_BCN_CNT, - SWCR_DBG_ALL_TX_FAILED_CNT, - SWCR_DBG_ALL_TX_RETRY_CNT, - SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT, - SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT, - SWCR_DBG_ALL_TX_MGNT_DROP_CNT, - SWCR_DBG_ALL_TX_ERROR_CNT, - - SWCR_DBG_ALL_RX_CNT, - SWCR_DBG_ALL_RX_DROP_CNT, - SWCR_DBG_ALL_RX_DUP_DROP_CNT, - SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_FCSERR_CNT, - SWCR_DBG_ALL_RX_FIFOFULL_CNT, - SWCR_DBG_ALL_RX_PFDROP_CNT, - - SWCR_DBG_ALL_PWR_PS_POLL_CNT, - SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT, - SWCR_DBG_ALL_PWR_BCN_IND_CNT, - SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT, - SWCR_DBG_ALL_PWR_PM_STATE0, - SWCR_DBG_ALL_PWR_PM_STATE1, - SWCR_DBG_ALL_PWR_CUR_PS_PROF0, - SWCR_DBG_ALL_PWR_CUR_PS_PROF1, - - SWCR_DBG_ALL_AR_STA0_RATE, - SWCR_DBG_ALL_AR_STA0_BWGI, - SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI, - - SWCR_DBG_ALL_ROAMING_ENABLE, - SWCR_DBG_ALL_ROAMING_ROAM_CNT, - SWCR_DBG_ALL_ROAMING_INT_CNT, - - SWCR_DBG_ALL_BB_RX_MDRDY_CNT, - SWCR_DBG_ALL_BB_RX_FCSERR_CNT, - SWCR_DBG_ALL_BB_CCK_PD_CNT, - SWCR_DBG_ALL_BB_OFDM_PD_CNT, - SWCR_DBG_ALL_BB_CCK_SFDERR_CNT, - SWCR_DBG_ALL_BB_CCK_SIGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT, - - SWCR_DBG_ALL_NUM -} ENUM_SWCR_DBG_ALL_T; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID swCrReadWriteCmd( - P_ADAPTER_T prAdapter, - UINT_8 ucRead, - UINT_16 u2Addr, - UINT_32 *pu4Data - ); - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType); -VOID swCrDebugInit(P_ADAPTER_T prAdapter); -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout); -VOID swCrDebugUninit(P_ADAPTER_T prAdapter); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wapi.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wapi.h deleted file mode 100755 index a47acae67778..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wapi.h +++ /dev/null @@ -1,120 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/wapi.h#1 $ -*/ - -/*! \file wapi.h - \brief The wapi related define, macro and structure are described here. -*/ - - - -/* -** $Log: wapi.h $ - * - * 07 20 2010 wh.su - * - * . - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the wapi function name and adding the generate wapi ie function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some wapi structure define - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\1 2009-10-09 17:06:29 GMT mtk01088 -** -*/ - -#ifndef _WAPI_H -#define _WAPI_H - -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define WAPI_CIPHER_SUITE_WPI 0x01721400 /* WPI_SMS4 */ -#define WAPI_AKM_SUITE_802_1X 0x01721400 /* WAI */ -#define WAPI_AKM_SUITE_PSK 0x02721400 /* WAI_PSK */ - -#define ELEM_ID_WAPI 68 /* WAPI IE */ - -#define WAPI_IE(fp) ((P_WAPI_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wapiGenerateWAPIIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ); - -BOOLEAN -wapiPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -//BOOLEAN -//wapiUpdateTxKeyIdx ( -// IN P_STA_RECORD_T prStaRec, -// IN UINT_8 ucWlanIdx -// ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif -#endif /* _WAPI_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wlan_typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wlan_typedef.h deleted file mode 100755 index bbf653aeb6df..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wlan_typedef.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/wlan_typedef.h#1 $ -*/ - -/*! \file wlan_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - - - -/* -** $Log: wlan_typedef.h $ -*/ - -#ifndef _WLAN_TYPEDEF_H -#define _WLAN_TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for BSS_INFO_T structure, to describe the attributes used in a - * common BSS. - */ -typedef struct _BSS_INFO_T BSS_INFO_T, *P_BSS_INFO_T; - -typedef BSS_INFO_T AIS_BSS_INFO_T, *P_AIS_BSS_INFO_T; -typedef BSS_INFO_T P2P_BSS_INFO_T, *P_P2P_BSS_INFO_T; -typedef BSS_INFO_T BOW_BSS_INFO_T, *P_BOW_BSS_INFO_T; - -typedef struct _AIS_SPECIFIC_BSS_INFO_T AIS_SPECIFIC_BSS_INFO_T, *P_AIS_SPECIFIC_BSS_INFO_T; -typedef struct _P2P_SPECIFIC_BSS_INFO_T P2P_SPECIFIC_BSS_INFO_T, *P_P2P_SPECIFIC_BSS_INFO_T; -typedef struct _BOW_SPECIFIC_BSS_INFO_T BOW_SPECIFIC_BSS_INFO_T, *P_BOW_SPECIFIC_BSS_INFO_T; - - -/* BSS related structures */ -/* Type definition for BSS_DESC_T structure, to describe parameter sets of a particular BSS */ -typedef struct _BSS_DESC_T BSS_DESC_T, *P_BSS_DESC_T, **PP_BSS_DESC_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _WLAN_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wnm.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wnm.h deleted file mode 100755 index ac54cbc86dfa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/mgmt/wnm.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/include/mgmt/wnm.h#1 $ -*/ - -/*! \file wnm.h - \brief This file contains the IEEE 802.11 family related 802.11v network management - for MediaTek 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wnm.h $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -#ifndef _WNM_H -#define _WNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _TIMINGMSMT_PARAM_T { - BOOLEAN fgInitiator; - UINT_8 ucTrigger; - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ -} TIMINGMSMT_PARAM_T, *P_TIMINGMSMT_PARAM_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ); - -#define WNM_UNIT_TEST 1 - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WNM_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/adapter.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/adapter.h deleted file mode 100755 index c2413fa4a012..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/adapter.h +++ /dev/null @@ -1,1404 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/adapter.h#3 $ -*/ - -/*! \file adapter.h - \brief Definition of internal data structure for driver manipulation. - - In this file we define the internal data structure - ADAPTER_T which stands - for MiniPort ADAPTER(From Windows point of view) or stands for Network ADAPTER. -*/ - - - -/* -** $Log: adapter.h $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Remove ERP member in adapter structure - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * Action frame callback for GO Device Discoverability Req. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 yuche.tsai - * [WCXRP00000533] [Volunteer Patch][MT6620][Driver] Provide a P2P function API for Legacy WiFi to query AP mode. - * Provide an API for Legacy WiFi to query the operation mode.. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Provide disconnect function for AAA module. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add CWMin CWMax for AP to generate IE. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common IE buffer in P2P INFO structure. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 yuche.tsai - * NULL - * Add an intend mode for BSS info. - * It is used to let P2P BSS Info to know which OP Mode it is going to become. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 yuche.tsai - * - * Remove BSS info which is redonedent in Wifi Var.. - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P FSM Info in adapter. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field, additional include p2p_fsm.h if p2p is enabled. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * 2) command sequence number is now increased atomically - * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * 4. correct some HAL implementation - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * and result is retrieved by get ATInfo instead - * * * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-16 18:02:03 GMT mtk02752 -** add external reference to avoid compilation error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:40:26 GMT mtk02752 -** eliminate unused member -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-08 17:36:08 GMT mtk02752 -** add RF test data members into P_ADAPTER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:45 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-28 10:29:57 GMT mtk01461 -** Add read WTSR for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:37:35 GMT mtk01461 -** Add prPendingCmdInfoOfOID for temporarily saving the CMD_INFO_T before en-queue to rCmdQueue -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:57:51 GMT mtk01461 -** Add MGMT Buffer Info -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:34:12 GMT mtk01461 -** Add SW pre test CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:41:48 GMT mtk01461 -** Add fgIsWmmAssoc flag for TC assignment -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:51 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:51:52 GMT mtk01426 -** Add #if CFG_SDIO_RX_ENHANCE related data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:17 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _ADAPTER_H -#define _ADAPTER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _ENHANCE_MODE_DATA_STRUCT_T SDIO_CTRL_T, *P_SDIO_CTRL_T; - -typedef struct _WLAN_INFO_T { - PARAM_BSSID_EX_T rCurrBssId; - - // Scan Result - PARAM_BSSID_EX_T arScanResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 apucScanResultIEs[CFG_MAX_NUM_BSS_LIST]; - UINT_32 u4ScanResultNum; - - // IE pool for Scanning Result - UINT_8 aucScanIEBuf[CFG_MAX_COMMON_IE_BUF_LEN]; - UINT_32 u4ScanIEBufferUsage; - - OS_SYSTIME u4SysTime; - - // connection parameter (for Ad-Hoc) - UINT_16 u2BeaconPeriod; - UINT_16 u2AtimWindow; - - PARAM_RATES eDesiredRates; - CMD_LINK_ATTRIB eLinkAttr; -// CMD_PS_PROFILE_T ePowerSaveMode; - CMD_PS_PROFILE_T arPowerSaveMode[NETWORK_TYPE_INDEX_NUM]; - - // trigger parameter - ENUM_RSSI_TRIGGER_TYPE eRssiTriggerType; - PARAM_RSSI rRssiTriggerValue; - - // Privacy Filter - ENUM_PARAM_PRIVACY_FILTER_T ePrivacyFilter; - - // RTS Threshold - PARAM_RTS_THRESHOLD eRtsThreshold; - - // Network Type - UINT_8 ucNetworkType; - - // Network Type In Use - UINT_8 ucNetworkTypeInUse; - -} WLAN_INFO_T, *P_WLAN_INFO_T; - -/* Session for CONNECTION SETTINGS */ -typedef struct _CONNECTION_SETTINGS_T { - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - UINT_8 ucDelayTimeOfDisconnectEvent; - - BOOLEAN fgIsConnByBssidIssued; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - - BOOLEAN fgIsConnReqIssued; - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - ENUM_PARAM_OP_MODE_T eOPMode; - - ENUM_PARAM_CONNECTION_POLICY_T eConnectionPolicy; - - ENUM_PARAM_AD_HOC_MODE_T eAdHocMode; - - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - - BOOLEAN fgIsScanReqIssued; - - - /* MIB attributes */ - UINT_16 u2BeaconPeriod; - - UINT_16 u2RTSThreshold; /* User desired setting */ - - UINT_16 u2DesiredNonHTRateSet; /* User desired setting */ - - UINT_8 ucAdHocChannelNum; /* For AdHoc */ - - ENUM_BAND_T eAdHocBand; /* For AdHoc */ - - UINT_32 u4FreqInKHz; /* Center frequency */ - - /* ATIM windows using for IBSS power saving function */ - UINT_16 u2AtimWindow; - - /* Features */ - BOOLEAN fgIsEnableRoaming; - - BOOLEAN fgIsAdHocQoSEnable; - - ENUM_PARAM_PHY_CONFIG_T eDesiredPhyConfig; - - /* Used for AP mode for desired channel and bandwidth */ - UINT_16 u2CountryCode; - UINT_8 uc2G4BandwidthMode; /* 20/40M or 20M only */ - UINT_8 uc5GBandwidthMode; /* 20/40M or 20M only */ - - BOOLEAN fgTxShortGIDisabled; - BOOLEAN fgRxShortGIDisabled; - -#if CFG_SUPPORT_802_11D - BOOLEAN fgMultiDomainCapabilityEnabled; -#endif /* CFG_SUPPORT_802_11D*/ - - -#if 1 //CFG_SUPPORT_WAPI - BOOL fgWapiMode; - UINT_32 u4WapiSelectedGroupCipher; - UINT_32 u4WapiSelectedPairwiseCipher; - UINT_32 u4WapiSelectedAKMSuite; -#endif - - /* CR1486, CR1640 */ - /* for WPS, disable the privacy check for AP selection policy */ - BOOLEAN fgPrivacyCheckDisable; - - /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 bmfgApsdEnAc; - -} CONNECTION_SETTINGS_T, *P_CONNECTION_SETTINGS_T; - -struct _BSS_INFO_T { - - ENUM_PARAM_MEDIA_STATE_T eConnectionState; /* Connected Flag used in AIS_NORMAL_TR */ - ENUM_PARAM_MEDIA_STATE_T eConnectionStateIndicated; /* The Media State that report to HOST */ - - ENUM_OP_MODE_T eCurrentOPMode; /* Current Operation Mode - Infra/IBSS */ -#if CFG_ENABLE_WIFI_DIRECT - ENUM_OP_MODE_T eIntendOPMode; -#endif - - BOOLEAN fgIsNetActive; /* TRUE if this network has been activated */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucReasonOfDisconnect; /* Used by media state indication */ - - UINT_8 ucSSIDLen; /* Length of SSID */ - -#if CFG_ENABLE_WIFI_DIRECT - ENUM_HIDDEN_SSID_TYPE_T eHiddenSsidType; /* For Hidden SSID usage. */ -#endif - - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID used in this BSS */ - - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* The BSSID of the associated BSS */ - - UINT_8 aucOwnMacAddr[MAC_ADDR_LEN];/* Owned MAC Address used in this BSS */ - - P_STA_RECORD_T prStaRecOfAP; /* For Infra Mode, and valid only if - * eConnectionState == MEDIA_STATE_CONNECTED - */ - LINK_T rStaRecOfClientList; /* For IBSS/AP Mode, all known STAs in current BSS */ - - UINT_16 u2CapInfo; /* Change Detection */ - - UINT_16 u2BeaconInterval; /* The Beacon Interval of this BSS */ - - - UINT_16 u2ATIMWindow; /* For IBSS Mode */ - - UINT_16 u2AssocId; /* For Infra Mode, it is the Assoc ID assigned by AP. - */ - - - UINT_8 ucDTIMPeriod; /* For Infra/AP Mode */ - - UINT_8 ucDTIMCount; /* For AP Mode, it is the DTIM value we should carried in - * the Beacon of next TBTT. - */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (This is deduced from received BSS_DESC_T) - */ - - UINT_8 ucNonHTBasicPhyType; /* The Basic PHY Type Index, used to setup Phy Capability */ - - UINT_8 ucConfigAdHocAPMode; /* The configuration of AdHoc/AP Mode. e.g. 11g or 11b */ - - UINT_8 ucBeaconTimeoutCount; /* For Infra/AP Mode, it is a threshold of Beacon Lost Count to - confirm connection was lost */ - - BOOLEAN fgHoldSameBssidForIBSS; /* For IBSS Mode, to keep use same BSSID to extend the life cycle of an IBSS */ - - BOOLEAN fgIsBeaconActivated; /* For AP/IBSS Mode, it is used to indicate that Beacon is sending */ - - P_MSDU_INFO_T prBeacon; /* For AP/IBSS Mode - Beacon Frame */ - - BOOLEAN fgIsIBSSMaster; /* For IBSS Mode - To indicate that we can reply ProbeResp Frame. - In current TBTT interval */ - - BOOLEAN fgIsShortPreambleAllowed; /* From Capability Info. of AssocResp Frame AND of Beacon/ProbeResp Frame */ - BOOLEAN fgUseShortPreamble; /* Short Preamble is enabled in current BSS. */ - BOOLEAN fgUseShortSlotTime; /* Short Slot Time is enabled in current BSS. */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of current BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of current BSS */ - - - UINT_8 ucAllSupportedRatesLen; /* Used for composing Beacon Frame in AdHoc or AP Mode */ - UINT_8 aucAllSupportedRates[RATE_NUM]; - - UINT_8 ucAssocClientCnt; /* TODO(Kevin): Number of associated clients */ - - BOOLEAN fgIsProtection; - BOOLEAN fgIsQBSS; /* fgIsWmmBSS; */ /* For Infra/AP/IBSS Mode, it is used to indicate if we support WMM in - * current BSS. */ - BOOLEAN fgIsNetAbsent; /* TRUE: BSS is absent, FALSE: BSS is present */ - - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - UINT_16 u2RsnSelectedCapInfo; - - /*------------------------------------------------------------------------*/ - /* Power Management related information */ - /*------------------------------------------------------------------------*/ - PM_PROFILE_SETUP_INFO_T rPmProfSetupInfo; - - - /*------------------------------------------------------------------------*/ - /* WMM/QoS related information */ - /*------------------------------------------------------------------------*/ - UINT_8 ucWmmParamSetCount; /* Used to detect the change of EDCA parameters. For AP mode, the value is used in WMM IE */ - - AC_QUE_PARMS_T arACQueParms[WMM_AC_INDEX_NUM]; - - UINT_8 aucCWminLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWminLog2 */ - UINT_8 aucCWmaxLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWmaxLog2 */ - AC_QUE_PARMS_T arACQueParmsForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the value */ - - /*------------------------------------------------------------------------*/ - /* 802.11n HT operation IE when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT)*/ - /* is true. They have the same definition with fields of */ - /* information element (CM) */ - /*------------------------------------------------------------------------*/ - ENUM_BAND_T eBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucHtOpInfo1; - UINT_16 u2HtOpInfo2; - UINT_16 u2HtOpInfo3; - - /*------------------------------------------------------------------------*/ - /* Required protection modes (CM) */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgErpProtectMode; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - ENUM_RIFS_MODE_T eRifsOperationMode; - - BOOLEAN fgObssErpProtectMode; /* GO only */ - ENUM_HT_PROTECT_MODE_T eObssHtProtectMode; /* GO only */ - ENUM_GF_MODE_T eObssGfOperationMode; /* GO only */ - BOOLEAN fgObssRifsOperationMode; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* OBSS to decide if 20/40M bandwidth is permitted. */ - /* The first member indicates the following channel list length. */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgAssoc40mBwAllowed; - BOOLEAN fg40mBwAllowed; - ENUM_CHNL_EXT_T eBssSCO; /* Real setting for HW - * 20/40M AP mode will always set 40M, - * but its OP IE can be changed. - */ - UINT_8 auc2G_20mReqChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_NonHtChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_PriChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_SecChnlList[CHNL_LIST_SZ_2G + 1]; - - UINT_8 auc5G_20mReqChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_NonHtChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_PriChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_SecChnlList[CHNL_LIST_SZ_5G + 1]; - - TIMER_T rObssScanTimer; - UINT_16 u2ObssScanInterval; /* in unit of sec */ - - BOOLEAN fgObssActionForcedTo20M; /* GO only */ - BOOLEAN fgObssBeaconForcedTo20M; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* HW Related Fields (Kevin) */ - /*------------------------------------------------------------------------*/ - UINT_8 ucHwDefaultFixedRateCode; /* The default rate code copied to MAC TX Desc */ - UINT_16 u2HwLPWakeupGuardTimeUsec; - - - UINT_8 ucBssFreeQuota; /* The value is updated from FW */ -}; - - -struct _AIS_SPECIFIC_BSS_INFO_T { - UINT_8 ucRoamingAuthTypes; /* This value indicate the roaming type used in AIS_JOIN */ - - BOOLEAN fgIsIBSSActive; - - /*! \brief Global flag to let arbiter stay at standby and not connect to any network */ - BOOLEAN fgCounterMeasure; - UINT_8 ucWEPDefaultKeyID; - BOOLEAN fgTransmitKeyExist; /* Legacy wep Transmit key exist or not */ - - /* While Do CounterMeasure procedure, check the EAPoL Error report have send out */ - BOOLEAN fgCheckEAPoLTxDone; - - UINT_32 u4RsnaLastMICFailTime; - - /* Stored the current bss wpa rsn cap filed, used for roaming policy */ - //UINT_16 u2RsnCap; - TIMER_T rPreauthenticationTimer; - - /* By the flow chart of 802.11i, - wait 60 sec before associating to same AP - or roaming to a new AP - or sending data in IBSS, - keep a timer for handle the 60 sec counterMeasure */ - TIMER_T rRsnaBlockTrafficTimer; - TIMER_T rRsnaEAPoLReportTimeoutTimer; - - /* For Keep the Tx/Rx Mic key for TKIP SW Calculate Mic */ - /* This is only one for AIS/AP */ - UINT_8 aucTxMicKey[8]; - UINT_8 aucRxMicKey[8]; - - /* Buffer for WPA2 PMKID */ - /* The PMKID cache lifetime is expire by media_disconnect_indication */ - UINT_32 u4PmkidCandicateCount; - PMKID_CANDICATE_T arPmkidCandicate[CFG_MAX_PMKID_CACHE]; - UINT_32 u4PmkidCacheCount; - PMKID_ENTRY_T arPmkidCache[CFG_MAX_PMKID_CACHE]; - BOOLEAN fgIndicatePMKID; -#if CFG_SUPPORT_802_11W - BOOLEAN fgMgmtProtection; - UINT_32 u4SaQueryStart; - UINT_32 u4SaQueryCount; - UINT_8 ucSaQueryTimedOut; - PUINT_8 pucSaQueryTransId; - TIMER_T rSaQueryTimer; - BOOLEAN fgBipKeyInstalled; -#endif -}; - -struct _BOW_SPECIFIC_BSS_INFO_T { - UINT_16 u2Reserved; /* Reserved for Data Type Check */ -}; - -#if CFG_SLT_SUPPORT -typedef struct _SLT_INFO_T { - - P_BSS_DESC_T prPseudoBssDesc; - UINT_16 u2SiteID; - UINT_8 ucChannel2G4; - UINT_8 ucChannel5G; - BOOLEAN fgIsDUT; - UINT_32 u4BeaconReceiveCnt; - /////////Deprecated///////// - P_STA_RECORD_T prPseudoStaRec; -} SLT_INFO_T, *P_SLT_INFO_T; -#endif - - -/* Major member variables for WiFi FW operation. - Variables within this region will be ready for access after WIFI function is enabled. -*/ -typedef struct _WIFI_VAR_T { - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - BOOLEAN fgDebugCmdResp; - - CONNECTION_SETTINGS_T rConnSettings; - - SCAN_INFO_T rScanInfo; - -#if CFG_SUPPORT_ROAMING - ROAMING_INFO_T rRoamingInfo; -#endif /* CFG_SUPPORT_ROAMING */ - - AIS_FSM_INFO_T rAisFsmInfo; - - ENUM_PWR_STATE_T aePwrState[NETWORK_TYPE_INDEX_NUM]; - - BSS_INFO_T arBssInfo[NETWORK_TYPE_INDEX_NUM]; - - AIS_SPECIFIC_BSS_INFO_T rAisSpecificBssInfo; - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings; - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - P_P2P_FSM_INFO_T prP2pFsmInfo; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - BOW_SPECIFIC_BSS_INFO_T rBowSpecificBssInfo; - BOW_FSM_INFO_T rBowFsmInfo; -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - DEAUTH_INFO_T arDeauthInfo[MAX_DEAUTH_INFO_COUNT]; - - /* Current Wi-Fi Settings and Flags */ - UINT_8 aucPermanentAddress[MAC_ADDR_LEN]; - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - UINT_8 aucDeviceAddress[MAC_ADDR_LEN]; - UINT_8 aucInterfaceAddress[MAC_ADDR_LEN]; - - UINT_8 ucAvailablePhyTypeSet; - - ENUM_PHY_TYPE_INDEX_T eNonHTBasicPhyType2G4; /* Basic Phy Type used by SCN according - * to the set of Available PHY Types - */ - - ENUM_PARAM_PREAMBLE_TYPE_T ePreambleType; - ENUM_REGISTRY_FIXED_RATE_T eRateSetting; - - BOOLEAN fgIsShortSlotTimeOptionEnable; - /* User desired setting, but will honor the capability of AP */ - - BOOLEAN fgEnableJoinToHiddenSSID; - BOOLEAN fgSupportWZCDisassociation; - - BOOLEAN fgSupportQoS; - BOOLEAN fgSupportAmpduTx; - BOOLEAN fgSupportAmpduRx; - BOOLEAN fgSupportTspec; - BOOLEAN fgSupportUAPSD; - BOOLEAN fgSupportULPSMP; - -#if CFG_SLT_SUPPORT - SLT_INFO_T rSltInfo; -#endif - -} WIFI_VAR_T, *P_WIFI_VAR_T;/* end of _WIFI_VAR_T */ - -/* cnm_timer module */ -typedef struct { - LINK_T rLinkHead; - OS_SYSTIME rNextExpiredSysTime; - KAL_WAKE_LOCK_T rWakeLock; - BOOLEAN fgWakeLocked; -} ROOT_TIMER, *P_ROOT_TIMER; - - -/* FW/DRV/NVRAM version information */ -typedef struct { - - /* NVRAM or Registry */ - UINT_16 u2Part1CfgOwnVersion; - UINT_16 u2Part1CfgPeerVersion; - UINT_16 u2Part2CfgOwnVersion; - UINT_16 u2Part2CfgPeerVersion; - - /* Firmware */ - UINT_16 u2FwProductID; - UINT_16 u2FwOwnVersion; - UINT_16 u2FwPeerVersion; - -} WIFI_VER_INFO_T, *P_WIFI_VER_INFO_T; - - -#if CFG_ENABLE_WIFI_DIRECT -/* -* p2p function pointer structure -*/ - -typedef struct _P2P_FUNCTION_LINKER { - P2P_REMOVE prP2pRemove; -// NIC_P2P_MEDIA_STATE_CHANGE prNicP2pMediaStateChange; -// SCAN_UPDATE_P2P_DEVICE_DESC prScanUpdateP2pDeviceDesc; -// P2P_FSM_RUN_EVENT_RX_PROBE_RESPONSE_FRAME prP2pFsmRunEventRxProbeResponseFrame; - P2P_GENERATE_P2P_IE prP2pGenerateWSC_IEForBeacon; -// P2P_CALCULATE_WSC_IE_LEN_FOR_PROBE_RSP prP2pCalculateWSC_IELenForProbeRsp; -// P2P_GENERATE_WSC_IE_FOR_PROBE_RSP prP2pGenerateWSC_IEForProbeRsp; -// SCAN_REMOVE_P2P_BSS_DESC prScanRemoveP2pBssDesc; -// P2P_HANDLE_SEC_CHECK_RSP prP2pHandleSecCheckRsp; - P2P_NET_REGISTER prP2pNetRegister; - P2P_NET_UNREGISTER prP2pNetUnregister; - P2P_CALCULATE_P2P_IE_LEN prP2pCalculateP2p_IELenForAssocReq; /* All IEs generated from supplicant. */ - P2P_GENERATE_P2P_IE prP2pGenerateP2p_IEForAssocReq; /* All IEs generated from supplicant. */ -} P2P_FUNCTION_LINKER, *P_P2P_FUNCTION_LINKER; - - -#endif - -/* - * Major ADAPTER structure - * Major data structure for driver operation - */ -struct _ADAPTER_T { - UINT_8 ucRevID; - - UINT_16 u2NicOpChnlNum; - - BOOLEAN fgIsEnableWMM; - BOOLEAN fgIsWmmAssoc; /* This flag is used to indicate that WMM is enable in current BSS */ - - UINT_32 u4OsPacketFilter; // packet filter used by OS - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_32 u4CSUMFlags; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - - ENUM_BAND_T aePreferBand[NETWORK_TYPE_INDEX_NUM]; - - /* ADAPTER flags */ - UINT_32 u4Flags; - UINT_32 u4HwFlags; - - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - ENUM_PHY_TYPE_INDEX_T eCurrentPhyType; /* Current selection basing on the set of Available PHY Types */ - -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - UINT_32 u4CoalescingBufCachedSize; - PUINT_8 pucCoalescingBufCached; -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - /* Buffer for CMD_INFO_T, Mgt packet and mailbox message */ - BUF_INFO_T rMgtBufInfo; - BUF_INFO_T rMsgBufInfo; - PUINT_8 pucMgtBufCached; - UINT_32 u4MgtBufCachedSize; - UINT_8 aucMsgBuf[MSG_BUFFER_SIZE]; -#if CFG_DBG_MGT_BUF - UINT_32 u4MemAllocDynamicCount; /* Debug only */ - UINT_32 u4MemFreeDynamicCount; /* Debug only */ -#endif - - STA_RECORD_T arStaRec[CFG_STA_REC_NUM]; - - /* Element for TX PATH */ - TX_CTRL_T rTxCtrl; - QUE_T rFreeCmdList; - CMD_INFO_T arHifCmdDesc[CFG_TX_MAX_CMD_PKT_NUM]; - - /* Element for RX PATH */ - RX_CTRL_T rRxCtrl; - - P_SDIO_CTRL_T prSDIOCtrl; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* Element for MT6620 E1 HIFSYS workaround */ - BOOLEAN fgIsClockGatingEnabled; -#endif - - /* Buffer for Authentication Event */ - /* Move to glue layer and refine the kal function */ - /* Reference to rsnGeneratePmkidIndication function at rsn.c */ - UINT_8 aucIndicationEventBuffer[(CFG_MAX_PMKID_CACHE * 20) + 8 ]; - - UINT_32 u4IntStatus; - - ENUM_ACPI_STATE_T rAcpiState; - - BOOLEAN fgIsIntEnable; - BOOLEAN fgIsIntEnableWithLPOwnSet; - - BOOLEAN fgIsFwOwn; - BOOLEAN fgWiFiInSleepyState; - - UINT_32 u4PwrCtrlBlockCnt; - - QUE_T rPendingCmdQueue; - - P_GLUE_INFO_T prGlueInfo; - - UINT_8 ucCmdSeqNum; - UINT_8 ucTxSeqNum; - -#if 1//CFG_SUPPORT_WAPI - BOOLEAN fgUseWapi; -#endif - - /* RF Test flags */ - BOOLEAN fgTestMode; - - /* WLAN Info for DRIVER_CORE OID query */ - WLAN_INFO_T rWlanInfo; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PRegistered; - ENUM_NET_REG_STATE_T rP2PNetRegState; - BOOLEAN fgIsWlanLaunched; - P_P2P_INFO_T prP2pInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - OS_SYSTIME rP2pLinkQualityUpdateTime; - BOOLEAN fgIsP2pLinkQualityValid; - EVENT_LINK_QUALITY rP2pLinkQuality; -#endif -#endif - - /* Online Scan Option */ - BOOLEAN fgEnOnlineScan; - - /* Online Scan Option */ - BOOLEAN fgDisBcnLostDetection; - - /* MAC address */ - PARAM_MAC_ADDRESS rMyMacAddr; - - /* Wake-up Event for WOL */ - UINT_32 u4WakeupEventEnable; - - /* Event Buffering */ - EVENT_STATISTICS rStatStruct; - OS_SYSTIME rStatUpdateTime; - BOOLEAN fgIsStatValid; - - EVENT_LINK_QUALITY rLinkQuality; - OS_SYSTIME rLinkQualityUpdateTime; - BOOLEAN fgIsLinkQualityValid; - OS_SYSTIME rLinkRateUpdateTime; - BOOLEAN fgIsLinkRateValid; - - /* WIFI_VAR_T */ - WIFI_VAR_T rWifiVar; - - /* MTK WLAN NIC driver IEEE 802.11 MIB */ - IEEE_802_11_MIB_T rMib; - - /* Mailboxs for inter-module communication */ - MBOX_T arMbox[MBOX_ID_TOTAL_NUM]; - - /* Timers for OID Pending Handling */ - TIMER_T rOidTimeoutTimer; - - /* Root Timer for cnm_timer module */ - ROOT_TIMER rRootTimer; - - /* RLM maintenance */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_SYS_PROTECT_MODE_T eSysProtectMode; - ENUM_GF_MODE_T eSysHtGfMode; - ENUM_RIFS_MODE_T eSysTxRifsMode; - ENUM_SYS_PCO_PHASE_T eSysPcoPhase; - - P_DOMAIN_INFO_ENTRY prDomainInfo; - - /* QM */ - QUE_MGT_T rQM; - - CNM_INFO_T rCnmInfo; - - UINT_32 u4PowerMode; - - UINT_32 u4CtiaPowerMode; - BOOLEAN fgEnCtiaPowerMode; - - UINT_32 fgEnArpFilter; - - UINT_32 u4UapsdAcBmp; - - UINT_32 u4MaxSpLen; - - UINT_32 u4PsCurrentMeasureEn; - - /* Version Information */ - WIFI_VER_INFO_T rVerInfo; - - /* 5GHz support (from F/W) */ - BOOLEAN fgIsHw5GBandDisabled; - BOOLEAN fgEnable5GBand; - BOOLEAN fgIsEepromUsed; - BOOLEAN fgIsEfuseValid; - BOOLEAN fgIsEmbbededMacAddrValid; - - /* Packet Forwarding Tracking */ - INT_32 i4PendingFwdFrameCount; - -#if CFG_SUPPORT_RDD_TEST_MODE - UINT_8 ucRddStatus; -#endif - - BOOL fgDisStaAgingTimeoutDetection; - -};/* end of _ADAPTER_T */ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros for BSS_INFO_T - Flag of Net Active */ -/*----------------------------------------------------------------------------*/ -#define IS_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive) -#define IS_BSS_ACTIVE(_prBssInfo) ((_prBssInfo)->fgIsNetActive) - -#define IS_AIS_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_AIS_INDEX) -#define IS_P2P_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_P2P_INDEX) -#define IS_BOW_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_BOW_INDEX) - -#define SET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = TRUE;} - -#define UNSET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = FALSE;} - -#define BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; \ - _prBssInfo->fgIsNetActive = FALSE; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - COPY_MAC_ADDR(_prBssInfo->aucBSSID, _aucZeroMacAddr); \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = FALSE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } - -#if CFG_ENABLE_BT_OVER_WIFI -#define BOW_BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_BOW; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = TRUE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } -#endif - -/*----------------------------------------------------------------------------*/ -/* Macros for Power State */ -/*----------------------------------------------------------------------------*/ -#define SET_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_IDLE;} - -#define SET_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_ACTIVE;} - -#define SET_NET_PWR_STATE_PS(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_PS;} - -#define IS_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_ACTIVE) - -#define IS_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_IDLE) - -#define IS_SCN_PWR_STATE_ACTIVE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_ACTIVE) - -#define IS_SCN_PWR_STATE_IDLE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_IDLE) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ADAPTER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/bow.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/bow.h deleted file mode 100755 index d0be930e2a61..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/bow.h +++ /dev/null @@ -1,323 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/bow.h#1 $ -*/ - - - -/* -** $Log: bow.h $ - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW structure. - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add Activity Report definition. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * sync. with design document for interface change. - * - * 04 02 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * Wi-Fi driver no longer needs to implement 802.11 PAL, thus replaced by wrapping command/event definitions - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * correct typo. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * update for all command/event needed to be supported by 802.11 PAL. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * -*/ - -#ifndef _BOW_H_ -#define _BOW_H_ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOWDEVNAME "bow0" - -#define MAX_BOW_NUMBER_OF_CHANNEL_2G4 14 -#define MAX_BOW_NUMBER_OF_CHANNEL_5G 4 -#define MAX_BOW_NUMBER_OF_CHANNEL 18 //(MAX_BOW_NUMBER_OF_CHANNEL_2G4 + MAX_BOW_NUMBER_OF_CHANNEL_5G) - -#define MAX_ACTIVITY_REPORT 2 -#define MAX_ACTIVITY_REPROT_TIME 660 - -#define ACTIVITY_REPORT_STATUS_SUCCESS 0 -#define ACTIVITY_REPORT_STATUS_FAILURE 1 -#define ACTIVITY_REPORT_STATUS_TIME_INVALID 2 -#define ACTIVITY_REPORT_STATUS_OTHERS 3 - -#define ACTIVITY_REPORT_SCHEDULE_UNKNOWN 0 //Does not know the schedule of the interference -#define ACTIVITY_REPORT_SCHEDULE_KNOWN 1 - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _BT_OVER_WIFI_COMMAND_HEADER_T { - UINT_8 ucCommandId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_COMMAND_HEADER_T, *P_AMPC_COMMAND_HEADER_T; - -typedef struct _BT_OVER_WIFI_COMMAND { - AMPC_COMMAND_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_COMMAND, *P_AMPC_COMMAND; - -typedef struct _BT_OVER_WIFI_EVENT_HEADER_T { - UINT_8 ucEventId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_EVENT_HEADER_T, *P_AMPC_EVENT_HEADER_T; - -typedef struct _BT_OVER_WIFI_EVENT { - AMPC_EVENT_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_EVENT, *P_AMPC_EVENT; - -typedef struct _CHANNEL_DESC_T { - UINT_8 ucChannelBand; - UINT_8 ucChannelNum; -} CHANNEL_DESC, P_CHANNEL_DESC; - -// Command Structures -typedef struct _BOW_SETUP_CONNECTION { -//Fixed to 2.4G - UINT_8 ucChannelNum; - UINT_8 ucReserved1; - UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucReserved2; - -//Pending, for future BOW 5G supporting. -/* UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucChannelListNum; - CHANNEL_DESC arChannelList[1]; -*/ -} BOW_SETUP_CONNECTION, *P_BOW_SETUP_CONNECTION; - -typedef struct _BOW_DESTROY_CONNECTION { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_DESTROY_CONNECTION, *P_BOW_DESTROY_CONNECTION; - -typedef struct _BOW_SET_PTK { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; - UINT_8 aucTemporalKey[16]; -} BOW_SET_PTK, *P_BOW_SET_PTK; - -typedef struct _BOW_READ_RSSI { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_RSSI, *P_BOW_READ_RSSI; - -typedef struct _BOW_READ_LINK_QUALITY { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_LINK_QUALITY, *P_BOW_READ_LINK_QUALITY; - -typedef struct _BOW_SHORT_RANGE_MODE { - UINT_8 aucPeerAddress[6]; - INT_8 cTxPower; - UINT_8 ucReserved; -} BOW_SHORT_RANGE_MODE, *P_BOW_SHORT_RANGE_MODE; - -// Event Structures -typedef struct _BOW_COMMAND_STATUS { - UINT_8 ucStatus; - UINT_8 ucReserved[3]; -} BOW_COMMAND_STATUS, *P_BOW_COMMAND_STATUS; - -typedef struct _BOW_MAC_STATUS { - UINT_8 aucMacAddr[6]; - UINT_8 ucAvailability; - UINT_8 ucNumOfChannel; - CHANNEL_DESC arChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; -} BOW_MAC_STATUS, *P_BOW_MAC_STATUS; - -typedef struct _BOW_LINK_CONNECTED { - CHANNEL_DESC rChannel; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_CONNECTED, *P_BOW_LINK_CONNECTED; - -typedef struct _BOW_LINK_DISCONNECTED { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_DISCONNECTED, *P_BOW_LINK_DISCONNECTED; - -typedef struct _BOW_RSSI { - INT_8 cRssi; - UINT_8 aucReserved[3]; -} BOW_RSSI, *P_BOW_RSSI; - -typedef struct _BOW_LINK_QUALITY { - UINT_8 ucLinkQuality; - UINT_8 aucReserved[3]; -} BOW_LINK_QUALITY, *P_BOW_LINK_QUALITY; - -typedef enum _ENUM_BOW_CMD_ID_T { - BOW_CMD_ID_GET_MAC_STATUS = 1, - BOW_CMD_ID_SETUP_CONNECTION, - BOW_CMD_ID_DESTROY_CONNECTION, - BOW_CMD_ID_SET_PTK, - BOW_CMD_ID_READ_RSSI, - BOW_CMD_ID_READ_LINK_QUALITY, - BOW_CMD_ID_SHORT_RANGE_MODE, - BOW_CMD_ID_GET_CHANNEL_LIST, -} ENUM_BOW_CMD_ID_T, *P_ENUM_BOW_CMD_ID_T; - -typedef enum _ENUM_BOW_EVENT_ID_T { - BOW_EVENT_ID_COMMAND_STATUS = 1, - BOW_EVENT_ID_MAC_STATUS, - BOW_EVENT_ID_LINK_CONNECTED, - BOW_EVENT_ID_LINK_DISCONNECTED, - BOW_EVENT_ID_RSSI, - BOW_EVENT_ID_LINK_QUALITY, - BOW_EVENT_ID_CHANNEL_LIST, - BOW_EVENT_ID_CHANNEL_SELECTED, -} ENUM_BOW_EVENT_ID_T, *P_ENUM_BOW_EVENT_ID_T; - -typedef enum _ENUM_BOW_DEVICE_STATE { - BOW_DEVICE_STATE_DISCONNECTED = 0, - BOW_DEVICE_STATE_DISCONNECTING, - BOW_DEVICE_STATE_ACQUIRING_CHANNEL, - BOW_DEVICE_STATE_STARTING, - BOW_DEVICE_STATE_SCANNING, - BOW_DEVICE_STATE_CONNECTING, - BOW_DEVICE_STATE_CONNECTED, - BOW_DEVICE_STATE_NUM -} ENUM_BOW_DEVICE_STATE, *P_ENUM_BOW_DEVICE_STATE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_BOW_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/cmd_buf.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/cmd_buf.h deleted file mode 100755 index 2bb10b9b1390..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/cmd_buf.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - - - -/* -** $Log: cmd_buf.h $ - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Enable change log -*/ - -#ifndef _CMD_BUF_H -#define _CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _COMMAND_TYPE { - COMMAND_TYPE_GENERAL_IOCTL, - COMMAND_TYPE_NETWORK_IOCTL, - COMMAND_TYPE_SECURITY_FRAME, - COMMAND_TYPE_MANAGEMENT_FRAME, - COMMAND_TYPE_NUM -} COMMAND_TYPE, *P_COMMAND_TYPE; - -typedef VOID (*PFN_CMD_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -typedef VOID (*PFN_CMD_TIMEOUT_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -struct _CMD_INFO_T { - QUE_ENTRY_T rQueEntry; - - COMMAND_TYPE eCmdType; - - UINT_16 u2InfoBufLen; /* This is actual CMD buffer length */ - PUINT_8 pucInfoBuffer; /* May pointer to structure in prAdapter */ - P_NATIVE_PACKET prPacket; /* only valid when it's a security frame */ - - ENUM_NETWORK_TYPE_INDEX_T eNetworkType; - UINT_8 ucStaRecIndex; /* only valid when it's a security frame */ - - PFN_CMD_DONE_HANDLER pfCmdDoneHandler; - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler; - - BOOLEAN fgIsOid; /* Used to check if we need indicate */ - - UINT_8 ucCID; - BOOLEAN fgSetQuery; - BOOLEAN fgNeedResp; - BOOLEAN fgDriverDomainMCR; /* Access Driver Domain MCR, for CMD_ID_ACCESS_REG only */ - UINT_8 ucCmdSeqNum; - UINT_32 u4SetInfoLen; /* Indicate how many byte we read for Set OID */ - - /* information indicating by OID/ioctl */ - PVOID pvInformationBuffer; - UINT_32 u4InformationBufferLength; - - /* private data */ - UINT_32 u4PrivateData; -}; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ); - -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Routines for CMDs */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hal.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hal.h deleted file mode 100755 index e67727d7653d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hal.h +++ /dev/null @@ -1,609 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hal.h#1 $ -*/ - -/*! \file "hal.h" - \brief The declaration of hal functions - - N/A -*/ - - - -/* -** $Log: hal.h $ - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-16 18:02:26 GMT mtk02752 -** include precomp.h -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:16 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 13:54:15 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-11 10:36:01 GMT mtk01084 -** modify HAL functions -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-09 22:56:28 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:50:09 GMT mtk01084 -** add new macro HAL_TX_PORT_WR -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:08:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:50 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-05-18 14:28:10 GMT mtk01084 -** fix issue in HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-11 17:26:33 GMT mtk01084 -** modify the bit definition to check driver own status -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:30:22 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:50:34 GMT mtk01461 -** Redefine HAL_PORT_RD/WR macro for SW pre test -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-24 09:46:49 GMT mtk01084 -** fix LINT error -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 16:53:38 GMT mtk01084 -** add HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:53:13 GMT mtk01426 -** Fixed lint warn -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:20 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HAL_H -#define _HAL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* Macros for flag operations for the Adapter structure */ -#define HAL_SET_FLAG(_M, _F) ((_M)->u4HwFlags |= (_F)) -#define HAL_CLEAR_FLAG(_M, _F) ((_M)->u4HwFlags &= ~(_F)) -#define HAL_TEST_FLAG(_M, _F) ((_M)->u4HwFlags & (_F)) -#define HAL_TEST_FLAGS(_M, _F) (((_M)->u4HwFlags & (_F)) == (_F)) - -#if defined(_HIF_SDIO) -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_RD access fail! 0x%x: 0x%x \n", _u4Offset, *_pu4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_RD access! 0x%x\n", _u4Offset)); \ - } \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_WR access fail! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_WR access! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_RD access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_RD access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_WR access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_BYTE_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - } \ - } \ - else { \ - DBGLOG(HAL, WARN, ("ignore HAL_BYTE_WR access! 0x%x\n", _u4Port)); \ - } \ - } - - -#define HAL_DRIVER_OWN_BY_SDIO_CMD52(_prAdapter, _pfgDriverIsOwnReady) \ - { \ - UINT_8 ucBuf = BIT(1); \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevReadAfterWriteWithSdioCmd52(_prAdapter->prGlueInfo, MCR_WHLPCR_BYTE1, &ucBuf, 1) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("kalDevReadAfterWriteWithSdioCmd52 access fail!\n")); \ - } \ - else { \ - *_pfgDriverIsOwnReady = (ucBuf & BIT(0)) ? TRUE : FALSE; \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_DRIVER_OWN_BY_SDIO_CMD52 access!\n")); \ - } \ - } - -#else /* #if defined(_HIF_SDIO) */ -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value); \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value); \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf); \ - } - -#endif /* #if defined(_HIF_SDIO) */ - - -#define HAL_READ_RX_PORT(prAdapter, u4PortId, u4Len, pvBuf, _u4ValidBufSize) \ - { \ - ASSERT(u4PortId < 2); \ - HAL_PORT_RD(prAdapter, \ - ((u4PortId == 0) ? MCR_WRDR0 : MCR_WRDR1), \ - u4Len, \ - pvBuf, \ - _u4ValidBufSize/*temp!!*//*4Kbyte*/) \ - } - -#define HAL_WRITE_TX_PORT(_prAdapter, _ucTxPortIdx, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - ASSERT(_ucTxPortIdx < 2); \ - if((_u4ValidBufSize - _u4Len) >= sizeof(UINT_32)) { \ - /* fill with single dword of zero as TX-aggregation termination */ \ - *(PUINT_32) (&((_pucBuf)[ALIGN_4(_u4Len)])) = 0; \ - } \ - HAL_PORT_WR(_prAdapter, \ - (_ucTxPortIdx == 0) ? MCR_WTDR0 : MCR_WTDR1, \ - _u4Len, \ - _pucBuf, \ - _u4ValidBufSize/*temp!!*//*4KByte*/) \ - } - -/* The macro to read the given MCR several times to check if the wait - condition come true. */ -#define HAL_MCR_RD_AND_WAIT(_pAdapter, _offset, _pReadValue, _waitCondition, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 count; \ - (_status) = FALSE; \ - for (count = 0; count < (_waitCount); count++) { \ - HAL_MCR_RD((_pAdapter), (_offset), (_pReadValue)); \ - if ((_waitCondition)) { \ - (_status) = TRUE; \ - break; \ - } \ - kalUdelay((_waitDelay)); \ - } \ - } - - -/* The macro to write 1 to a R/S bit and read it several times to check if the - command is done */ -#define HAL_MCR_WR_AND_WAIT(_pAdapter, _offset, _writeValue, _busyMask, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 u4Temp; \ - UINT_32 u4Count = _waitCount; \ - (_status) = FALSE; \ - HAL_MCR_WR((_pAdapter), (_offset), (_writeValue)); \ - do { \ - kalUdelay((_waitDelay)); \ - HAL_MCR_RD((_pAdapter), (_offset), &u4Temp); \ - if (!(u4Temp & (_busyMask))) { \ - (_status) = TRUE; \ - break; \ - } \ - u4Count--; \ - } while (u4Count); \ - } - -#define HAL_GET_CHIP_ID_VER(_prAdapter, pu2ChipId, pu2Version) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - *pu2ChipId = (UINT_16)(u4Value & WCIR_CHIP_ID); \ - *pu2Version = (UINT_16)(u4Value & WCIR_REVISION_ID) >> 16; \ - } - -#define HAL_WAIT_WIFI_FUNC_READY(_prAdapter) \ - { \ - UINT_32 u4Value; \ - UINT_32 i; \ - for (i = 0; i < 100; i++) { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - if (u4Value & WCIR_WLAN_READY) { \ - break; \ - } \ - NdisMSleep(10); \ - } \ - } - -#define HAL_INTR_DISABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_CLR) - -#define HAL_INTR_ENABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_SET) - -#define HAL_INTR_ENABLE_AND_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - (WHLPCR_INT_EN_SET | WHLPCR_FW_OWN_REQ_SET)) - -#define HAL_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_SET) - -#define HAL_LP_OWN_CLR_OK(_prAdapter, _pfgResult) \ - { \ - UINT_32 i; \ - UINT_32 u4RegValue; \ - UINT_32 u4LoopCnt = 2048 / 8; \ - *_pfgResult = TRUE; \ - /* Software get LP ownership */ \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_CLR) \ - for (i = 0; i < u4LoopCnt; i++) { \ - HAL_MCR_RD(_prAdapter, MCR_WHLPCR, &u4RegValue); \ - if (u4RegValue & WHLPCR_IS_DRIVER_OWN) { \ - break; \ - } \ - else { \ - kalUdelay(8); \ - } \ - } \ - if (i == u4LoopCnt) { \ - *_pfgResult = FALSE; \ - /*ERRORLOG(("LP cannot be own back (%ld)", u4LoopCnt));*/ \ - /* check the time of LP instructions need to perform from Sleep to On */ \ - /*ASSERT(0); */ \ - } \ - } - -#define HAL_GET_ABNORMAL_INTERRUPT_REASON_CODE(_prAdapter, pu4AbnormalReason) \ - { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WASR, \ - pu4AbnormalReason); \ - } - - -#define HAL_DISABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_ENABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_CFG_MAX_HIF_RX_LEN_NUM(_prAdapter, _ucNumOfRxLen) \ - { \ - UINT_32 u4Value, ucNum; \ - ucNum = ((_ucNumOfRxLen >= 16) ? 0 : _ucNumOfRxLen); \ - u4Value = 0; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - u4Value &= ~WHCR_MAX_HIF_RX_LEN_NUM; \ - u4Value |= ((((UINT_32)ucNum) << 4) & WHCR_MAX_HIF_RX_LEN_NUM); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value); \ - } - -#define HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = TRUE;\ - } - -#define HAL_SET_INTR_STATUS_WRITE_1_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = FALSE;\ - } - -/* Note: enhance mode structure may also carried inside the buffer, - if the length of the buffer is long enough */ -#define HAL_READ_INTR_STATUS(prAdapter, length, pvBuf) \ - HAL_PORT_RD(prAdapter, \ - MCR_WHISR, \ - length, \ - pvBuf, \ - length) - -#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, aucTxReleaseCount) \ - { \ - PUINT_32 pu4Value = (PUINT_32)aucTxReleaseCount; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR0, \ - &pu4Value[0]); \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR1, \ - &pu4Value[1]); \ - } - -#define HAL_READ_RX_LENGTH(prAdapter, pu2Rx0Len, pu2Rx1Len) \ - { \ - UINT_32 u4Value; \ - u4Value = 0; \ - HAL_MCR_RD(prAdapter, \ - MCR_WRPLR, \ - &u4Value); \ - *pu2Rx0Len = (UINT_16)u4Value; \ - *pu2Rx1Len = (UINT_16)(u4Value >> 16); \ - } - -#define HAL_GET_INTR_STATUS_FROM_ENHANCE_MODE_STRUCT(pvBuf, u2Len, pu4Status) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvBuf; \ - *pu4Status = pu4Buf[0]; \ - } - -#define HAL_GET_TX_STATUS_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4BufOut, u4LenBufOut) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT(u4LenBufOut >= 8); \ - pu4BufOut[0] = pu4Buf[1]; \ - pu4BufOut[1] = pu4Buf[2]; \ - } - -#define HAL_GET_RX_LENGTH_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu2Rx0Num, au2Rx0Len, pu2Rx1Num, au2Rx1Len) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT((sizeof(au2Rx0Len) / sizeof(UINT_16)) >= 16); \ - ASSERT((sizeof(au2Rx1Len) / sizeof(UINT_16)) >= 16); \ - *pu2Rx0Num = (UINT_16)pu4Buf[3]; \ - *pu2Rx1Num = (UINT_16)(pu4Buf[3] >> 16); \ - kalMemCopy(au2Rx0Len, &pu4Buf[4], 8); \ - kalMemCopy(au2Rx1Len, &pu4Buf[12], 8); \ - } - -#define HAL_GET_MAILBOX_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4Mailbox0, pu4Mailbox1) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - *pu4Mailbox0 = (UINT_16)pu4Buf[21]; \ - *pu4Mailbox1 = (UINT_16)pu4Buf[22]; \ - } - -#define HAL_IS_TX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_TX_DONE_INT) ? TRUE : FALSE) - -#define HAL_IS_RX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & (WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT)) ? TRUE : FALSE) - -#define HAL_IS_ABNORMAL_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_ABNORMAL_INT) ? TRUE : FALSE) - -#define HAL_IS_FW_OWNBACK_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_FW_OWN_BACK_INT) ? TRUE : FALSE) - -#define HAL_PUT_MAILBOX(prAdapter, u4MboxId, u4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_WR(prAdapter, \ - ((u4MboxId == 0) ? MCR_H2DSM0R : MCR_H2DSM1R), \ - u4Data); \ - } - -#define HAL_GET_MAILBOX(prAdapter, u4MboxId, pu4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_RD(prAdapter, \ - ((u4MboxId == 0) ? MCR_D2HRM0R : MCR_D2HRM1R), \ - pu4Data); \ - } - -#define HAL_SET_MAILBOX_READ_CLEAR(prAdapter, fgEnableReadClear) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value);\ - HAL_MCR_WR(prAdapter, MCR_WHCR, \ - (fgEnableReadClear) ? \ - (u4Value | WHCR_W_MAILBOX_RD_CLR_EN) : \ - (u4Value & ~WHCR_W_MAILBOX_RD_CLR_EN)); \ - prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear = fgEnableReadClear;\ - } - -#define HAL_GET_MAILBOX_READ_CLEAR(prAdapter) (prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hif_rx.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hif_rx.h deleted file mode 100755 index 3895a7c3fc01..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hif_rx.h +++ /dev/null @@ -1,227 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hif_rx.h#1 $ -*/ - -/*! \file "hif_rx.h" - \brief Provide HIF RX Header Information between F/W and Driver - - N/A -*/ - - -/* -** $Log: hif_rx.h $ - * - * 09 01 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * follow-ups for HIF_RX_HEADER_T update: - * 1) add TCL - * 2) add RCPI - * 3) add ChannelNumber - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:44:00 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-09 13:59:20 GMT MTK02468 -** Added HIF_RX_HDR parsing macros -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 19:54:54 GMT mtk02752 -** adopt HIF_RX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-29 19:51:19 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:33:58 GMT mtk01461 -** Add define of HW_APPENED_LEN -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:51:02 GMT mtk01461 -** Rename ENUM_HIF_RX_PKT_TYPE_T -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 12:05:03 GMT mtk01426 -** Remove __KAL_ATTRIB_PACKED__ and add hifDataTypeCheck() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:18:52 GMT mtk01426 -** Add comment to HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:23 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HIF_RX_H -#define _HIF_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! HIF_RX_HEADER_T */ -// DW 0, Byte 1 -#define HIF_RX_HDR_PACKET_TYPE_MASK BITS(0,1) - -// DW 1, Byte 0 -#define HIF_RX_HDR_HEADER_LEN BITS(2,7) -#define HIF_RX_HDR_HEADER_LEN_OFFSET 2 -#define HIF_RX_HDR_HEADER_OFFSET_MASK BITS(0,1) - -// DW 1, Byte 1 -#define HIF_RX_HDR_80211_HEADER_FORMAT BIT(0) -#define HIF_RX_HDR_DO_REORDER BIT(1) -#define HIF_RX_HDR_PAL BIT(2) -#define HIF_RX_HDR_TCL BIT(3) -#define HIF_RX_HDR_NETWORK_IDX_MASK BITS(4,7) -#define HIF_RX_HDR_NETWORK_IDX_OFFSET 4 - -// DW 1, Byte 2, 3 -#define HIF_RX_HDR_SEQ_NO_MASK BITS(0,11) -#define HIF_RX_HDR_TID_MASK BITS(12,14) -#define HIF_RX_HDR_TID_OFFSET 12 -#define HIF_RX_HDR_BAR_FRAME BIT(15) - - - -#define HIF_RX_HDR_FLAG_AMP_WDS BIT(0) -#define HIF_RX_HDR_FLAG_802_11_FORMAT BIT(1) -#define HIF_RX_HDR_FLAG_BAR_FRAME BIT(2) -#define HIF_RX_HDR_FLAG_DO_REORDERING BIT(3) -#define HIF_RX_HDR_FLAG_CTRL_WARPPER_FRAME BIT(4) - -#define HIF_RX_HW_APPENDED_LEN 4 - -// For DW 2, Byte 3 - ucHwChannelNum -#define HW_CHNL_NUM_MAX_2G4 14 -#define HW_CHNL_NUM_MAX_4G_5G (255 - HW_CHNL_NUM_MAX_2G4) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _HIF_RX_HEADER_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucHerderLenOffset; - UINT_8 uc80211_Reorder_PAL_TCL; - UINT_16 u2SeqNoTid; - UINT_8 ucStaRecIdx; - UINT_8 ucRcpi; - UINT_8 ucHwChannelNum; - UINT_8 ucReserved; -} HIF_RX_HEADER_T, *P_HIF_RX_HEADER_T; - -typedef enum _ENUM_HIF_RX_PKT_TYPE_T { - HIF_RX_PKT_TYPE_DATA = 0, - HIF_RX_PKT_TYPE_EVENT, - HIF_RX_PKT_TYPE_TX_LOOPBACK, - HIF_RX_PKT_TYPE_MANAGEMENT, - HIF_RX_PKT_TYPE_NUM -} ENUM_HIF_RX_PKT_TYPE_T, *P_ENUM_HIF_RX_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define HIF_RX_HDR_SIZE sizeof(HIF_RX_HEADER_T) - -#define HIF_RX_HDR_GET_80211_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_80211_HEADER_FORMAT) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_REORDER_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_DO_REORDER) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_PAL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_PAL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_TCL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_TCL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_NETWORK_IDX(_prHifRxHdr) \ - ((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_NETWORK_IDX_MASK)\ - >> HIF_RX_HDR_NETWORK_IDX_OFFSET) - - -#define HIF_RX_HDR_GET_TID(_prHifRxHdr) \ - ((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_TID_MASK)\ - >> HIF_RX_HDR_TID_OFFSET) -#define HIF_RX_HDR_GET_SN(_prHifRxHdr) \ - (((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_SEQ_NO_MASK) -#define HIF_RX_HDR_GET_BAR_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_BAR_FRAME)? TRUE: FALSE)) - - -#define HIF_RX_HDR_GET_CHNL_NUM(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) > HW_CHNL_NUM_MAX_4G_5G ) ? \ - ( ((_prHifRxHdr)->ucHwChannelNum) - HW_CHNL_NUM_MAX_4G_5G ) : \ - ((_prHifRxHdr)->ucHwChannelNum) ) - -/* To do: support more bands other than 2.4G and 5G */ -#define HIF_RX_HDR_GET_RF_BAND(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) <= HW_CHNL_NUM_MAX_2G4 ) ? \ - BAND_2G4 : BAND_5G) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_RX_HEADER_T) == 12); - - return; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hif_tx.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hif_tx.h deleted file mode 100755 index 3a04ce55d9be..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/hif_tx.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/hif_tx.h#1 $ -*/ - - - -/* -** $Log: hif_tx.h $ - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * 2. follow MSDN defined behavior when associates to another AP - * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:40 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-24 19:55:11 GMT mtk02752 -** adopt HIF_TX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-23 17:54:13 GMT mtk02752 -** CMD_HDR_SIZE = (sizeof(WIFI_CMD_T)) to follow up CM's CMD/EVENT documentation -** -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-17 22:41:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-17 17:34:07 GMT mtk02752 -** remove HIF_TX_BUFF_COUNT_TC0 (move to nic_tx.h) -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-17 12:14:12 GMT mtk02752 -** add initial value for HIF_TX_BUFF_COUNT_TC5 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-13 13:54:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-04 14:11:14 GMT mtk01084 -** modify SW TX data format -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-29 19:51:53 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-20 12:22:46 GMT mtk01461 -** Add SeqNum field to CMD Header -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:40:52 GMT mtk01461 -** Update the Log Sign -*/ - -#ifndef _HIF_TX_H -#define _HIF_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Maximum buffer size for individual HIF TCQ Buffer */ -#define HIF_TX_BUFF_MAX_SIZE 1552 /* Reserved field was not included */ - -/* Maximum buffer count for individual HIF TCQ */ -#define HIF_TX_BUFF_COUNT_TC0 3 -#define HIF_TX_BUFF_COUNT_TC1 3 -#define HIF_TX_BUFF_COUNT_TC2 3 -#define HIF_TX_BUFF_COUNT_TC3 3 -#define HIF_TX_BUFF_COUNT_TC4 2 - -#define TX_HDR_SIZE sizeof(HIF_TX_HEADER_T) - -#define CMD_HDR_SIZE sizeof(WIFI_CMD_T) - -#define CMD_PKT_SIZE_FOR_IMAGE 2048 /* !< 2048 Bytes CMD payload buffer */ - - -/*! NIC_HIF_TX_HEADER_T */ -// DW 0, Byte 0,1 -#define HIF_TX_HDR_TX_BYTE_COUNT_MASK BITS(0,11) -#define HIF_TX_HDR_USER_PRIORITY_OFFSET 12 - -// DW 0, Byte 2 -#define HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK BITS(0,7) - -// DW 0, Byte 3 -#define HIF_TX_HDR_IP_CSUM BIT(0) -#define HIF_TX_HDR_TCP_CSUM BIT(1) -#define HIF_TX_HDR_RESOURCE_MASK BITS(2,5) -#define HIF_TX_HDR_RESOURCE_OFFSET 2 -#define HIF_TX_HDR_PACKET_TYPE_MASK BITS(6,7) -#define HIF_TX_HDR_PACKET_TYPE_OFFSET 6 - -// DW 1, Byte 0 -#define HIF_TX_HDR_WLAN_HEADER_LEN_MASK BITS(0,5) - -// DW 1, Byte 1 -#define HIF_TX_HDR_FORMAT_ID_MASK BITS(0,2) -#define HIF_TX_HDR_NETWORK_TYPE_MASK BITS(4,5) -#define HIF_TX_HDR_NETWORK_TYPE_OFFSET 4 -#define HIF_TX_HDR_FLAG_1X_FRAME_MASK BIT(6) -#define HIF_TX_HDR_FLAG_1X_FRAME_OFFSET 6 -#define HIF_TX_HDR_FLAG_802_11_FORMAT_MASK BIT(7) -#define HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET 7 - - -// DW2, Byte 3 -#define HIF_TX_HDR_PS_FORWARDING_TYPE_MASK BITS(0,1) -#define HIF_TX_HDR_PS_SESSION_ID_MASK BITS(2,4) -#define HIF_TX_HDR_PS_SESSION_ID_OFFSET 2 -#define HIF_TX_HDR_BURST_END_MASK BIT(5) -#define HIF_TX_HDR_BURST_END_OFFSET 5 - -// DW3, Byte 1 -#define HIF_TX_HDR_NEED_ACK BIT(0) -#define HIF_TX_HDR_BIP BIT(1) -#define HIF_TX_HDR_BASIC_RATE BIT(2) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _HIF_HW_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - UINT_8 aucBuffer[0]; -} HIF_HW_TX_HEADER_T, *P_HIF_HW_TX_HEADER_T; - -typedef struct _HIF_TX_HEADER_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucWlanHeaderLength; - UINT_8 ucPktFormtId_Flags; - UINT_16 u2LLH; /* for BOW */ - UINT_16 u2SeqNo; /* for BOW */ - UINT_8 ucStaRecIdx; - UINT_8 ucForwardingType_SessionID_Reserved; - UINT_8 ucPacketSeqNo; - UINT_8 ucAck_BIP_BasicRate; - UINT_8 aucReserved[2]; -} HIF_TX_HEADER_T, *P_HIF_TX_HEADER_T; - -typedef enum _ENUM_HIF_TX_PKT_TYPE_T { - HIF_TX_PKT_TYPE_DATA = 0, - HIF_TX_PKT_TYPE_CMD, - HIF_TX_PKT_TYPE_HIF_LOOPBACK, - HIF_TX_PKT_TYPE_MANAGEMENT, - HIF_TX_PKT_TYPE_NUM -} ENUM_HIF_TX_PKT_TYPE_T, *P_ENUM_HIF_TX_PKT_TYPE_T; - -typedef enum _ENUM_HIF_OOB_CTRL_PKT_TYPE_T { - HIF_OOB_CTRL_PKT_TYPE_LOOPBACK = 1, - HIF_OOB_CTRL_PKT_TYP_NUM -} ENUM_HIF_OOB_CTRL_PKT_TYPE_T, *P_ENUM_HIF_OOB_CTRL_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define TFCB_FRAME_PAD_TO_DW(u2Length) ALIGN_4(u2Length) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - */ -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ); - -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_TX_HEADER_T) == 16); - - return; -} - -#endif /*_HIF_TX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mac.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mac.h deleted file mode 100755 index d67780a668bc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mac.h +++ /dev/null @@ -1,2183 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/mac.h#1 $ -*/ - -/*! \file "mac.h" - \brief Brief description. - - Detail description. -*/ - - - -/* -** $Log: mac.h $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * Add the length check before access the ie length filed. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * adding the length check before processing next ie.. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discover ability support. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Some action frame define is not belong to P2P. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add some service discovery MAC define, phase I. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 11 01 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * revert to previous revision. (this file is not necessary to be changed) - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * 1. Add P2P MAC define. - * 2. Add scan device found event - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add WFA specific OUI. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P IE ID & Vendor OUI TYPE for P2P. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge MAC.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added OFFSET_BAR_SSC_SN -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:00:24 GMT MTK02468 -** Added offsets and masks for the BA Parameter Set filed -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:26 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _MAC_H -#define _MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//3 /* --------------- Constants for Ethernet/802.11 MAC --------------- */ -/* MAC Address */ -#define MAC_ADDR_LEN 6 - -#define MAC_ADDR_LOCAL_ADMIN BIT(1) - -#define ETH_P_IPV4 0x0800 -#define ETH_P_IPX 0x8137 // Novell IPX -#define ETH_P_AARP 0x80F3 // AppleTalk Address Resolution Protocol (AARP) -#define ETH_P_IPV6 0x86DD - -#define IP_VERSION_4 4 -#define IP_VERSION_6 6 - -#define IP_PROTOCOL_TCP 6 -#define IP_PROTOCOL_UDP 17 - -#define IPV4_HDR_IP_PROTOCOL_OFFSET 9 -#define IPV4_HDR_IP_CSUM_OFFSET 10 - -#define IPV6_HDR_IP_PROTOCOL_OFFSET 6 - -#define TCP_HDR_TCP_CSUM_OFFSET 16 -#define UDP_HDR_UDP_CSUM_OFFSET 6 - -#define LLC_LEN 8 // LLC(3) + SNAP(3) + EtherType(2) - -#define NULL_MAC_ADDR {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} -#define BC_MAC_ADDR {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} - -/* Ethernet Frame Field Size, in byte */ -#define ETHER_HEADER_LEN 14 -#define ETHER_TYPE_LEN 2 -#define ETHER_MIN_PKT_SZ 60 -#define ETHER_MAX_PKT_SZ 1514 - -/* IEEE 802.11 WLAN Frame Field Size, in byte */ -#define WLAN_MAC_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_HEADER_A4_LEN 30 /* Address 4 included */ -#define WLAN_MAC_HEADER_QOS_LEN 26 /* QoS Control included */ -#define WLAN_MAC_HEADER_QOS_HTC_LEN 30 /* QoS Control and HTC included */ -#define WLAN_MAC_HEADER_A4_QOS_LEN 32 /* Address 4 and QoS Control included */ -#define WLAN_MAC_HEADER_A4_QOS_HTC_LEN 36 /* Address 4, QoS Control and HTC included */ -#define WLAN_MAC_MGMT_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_MGMT_HEADER_HTC_LEN 28 /* HTC included */ - -#define QOS_CTRL_LEN 2 -#define HT_CTRL_LEN 4 - -#define WLAN_MAC_CTS_ACK_LEN WLAN_MAC_CTS_ACK_FRAME_HEADER_LEN + FCS_LEN - -/* 6.2.1.1.2 Semantics of the service primitive */ -#define MSDU_MAX_LENGTH 2304 - -/* 7.1.3.3.3 Broadcast BSSID */ -#define BC_BSSID BC_MAC_ADDR - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.3.1.6 Listen Interval field */ -#define DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD 2 // In unit of AP's DTIM interval, -#define DEFAULT_LISTEN_INTERVAL 10 - -/* 7.3.2.1 Broadcast(Wildcard) SSID */ -#define BC_SSID "" -#define BC_SSID_LEN 0 - -/* 7.3.2.2 Data Rate Value */ -#define RATE_1M 2 /* 1M in unit of 500kb/s */ -#define RATE_2M 4 /* 2M */ -#define RATE_5_5M 11 /* 5.5M */ -#define RATE_11M 22 /* 11M */ -#define RATE_22M 44 /* 22M */ -#define RATE_33M 66 /* 33M */ -#define RATE_6M 12 /* 6M */ -#define RATE_9M 18 /* 9M */ -#define RATE_12M 24 /* 12M */ -#define RATE_18M 36 /* 18M */ -#define RATE_24M 48 /* 24M */ -#define RATE_36M 72 /* 36M */ -#define RATE_48M 96 /* 48M */ -#define RATE_54M 108 /* 54M */ -/* 7.3.2.14 BSS membership selector */ -#define RATE_HT_PHY 127 /* BSS Selector - Clause 20. HT PHY */ -#define RATE_MASK BITS(0,6) /* mask bits for the rate */ -#define RATE_BASIC_BIT BIT(7) /* mask bit for the rate belonging to the BSSBasicRateSet */ - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 9.2.10 DIFS */ -#define DIFS 2 /* 2 x aSlotTime */ - -/* 11.3 STA Authentication and Association */ -#define STA_STATE_1 0 /* Accept Class 1 frames */ -#define STA_STATE_2 1 /* Accept Class 1 & 2 frames */ -#define STA_STATE_3 2 /* Accept Class 1,2 & 3 frames */ - -/* 15.4.8.5 802.11k RCPI-dBm mapping*/ -#define NDBM_LOW_BOUND_FOR_RCPI 110 -#define RCPI_LOW_BOUND 0 -#define RCPI_HIGH_BOUND 220 -#define RCPI_MEASUREMENT_NOT_AVAILABLE 255 - - -/* PHY characteristics */ -/* 17.4.4/18.3.3/19.8.4 Slot Time (aSlotTime) */ -#define SLOT_TIME_LONG 20 /* Long Slot Time */ -#define SLOT_TIME_SHORT 9 /* Short Slot Time */ - -#define SLOT_TIME_HR_DSSS SLOT_TIME_LONG /* 802.11b aSlotTime */ -#define SLOT_TIME_OFDM SLOT_TIME_SHORT /* 802.11a aSlotTime(20M Spacing) */ -#define SLOT_TIME_OFDM_10M_SPACING 13 /* 802.11a aSlotTime(10M Spacing) */ -#define SLOT_TIME_ERP_LONG SLOT_TIME_LONG /* 802.11g aSlotTime(Long) */ -#define SLOT_TIME_ERP_SHORT SLOT_TIME_SHORT /* 802.11g aSlotTime(Short) */ - -/* 17.4.4/18.3.3/19.8.4 Contention Window (aCWmin & aCWmax) */ -#define CWMIN_OFDM 15 /* 802.11a aCWmin */ -#define CWMAX_OFDM 1023 /* 802.11a aCWmax */ - -#define CWMIN_HR_DSSS 31 /* 802.11b aCWmin */ -#define CWMAX_HR_DSSS 1023 /* 802.11b aCWmax */ - -#define CWMIN_ERP_0 31 /* 802.11g aCWmin(0) - for only have 1/2/5/11Mbps Rates */ -#define CWMIN_ERP_1 15 /* 802.11g aCWmin(1) */ -#define CWMAX_ERP 1023 /* 802.11g aCWmax */ - -/* Short Inter-Frame Space (aSIFSTime) */ -/* 15.3.3 802.11b aSIFSTime */ -#define SIFS_TIME_HR_DSSS 10 -/* 17.4.4 802.11a aSIFSTime */ -#define SIFS_TIME_OFDM 16 -/* 19.8.4 802.11g aSIFSTime */ -#define SIFS_TIME_ERP 10 - -/* 15.4.6.2 Number of operating channels */ -#define CH_1 0x1 -#define CH_2 0x2 -#define CH_3 0x3 -#define CH_4 0x4 -#define CH_5 0x5 -#define CH_6 0x6 -#define CH_7 0x7 -#define CH_8 0x8 -#define CH_9 0x9 -#define CH_10 0xa -#define CH_11 0xb -#define CH_12 0xc -#define CH_13 0xd -#define CH_14 0xe - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - - -//3 /* --------------- IEEE 802.11 PICS --------------- */ -/* Annex D - dot11OperationEntry 2 */ -#define DOT11_RTS_THRESHOLD_MIN 0 -#define DOT11_RTS_THRESHOLD_MAX 2347 // from Windows DDK -//#define DOT11_RTS_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_RTS_THRESHOLD_DEFAULT \ - DOT11_RTS_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 5 */ -#define DOT11_FRAGMENTATION_THRESHOLD_MIN 256 -#define DOT11_FRAGMENTATION_THRESHOLD_MAX 2346 // from Windows DDK -//#define DOT11_FRAGMENTATION_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_FRAGMENTATION_THRESHOLD_DEFAULT \ - DOT11_FRAGMENTATION_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 6 */ -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MIN 1 -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_DEFAULT 4095 // 802.11 define 512 - // MT5921 only aceept N <= 4095 - -/* Annex D - dot11OperationEntry 7 */ -#define DOT11_RECEIVE_LIFETIME_TU_MIN 1 -#define DOT11_RECEIVE_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_RECEIVE_LIFETIME_TU_DEFAULT 4096 // 802.11 define 512 - -/* Annex D - dot11StationConfigEntry 12 */ -#define DOT11_BEACON_PERIOD_MIN 1 // TU. -#define DOT11_BEACON_PERIOD_MAX 0xffff // TU. -#define DOT11_BEACON_PERIOD_DEFAULT 100 // TU. - -/* Annex D - dot11StationConfigEntry 13 */ -#define DOT11_DTIM_PERIOD_MIN 1 // TU. -#define DOT11_DTIM_PERIOD_MAX 255 // TU. -#define DOT11_DTIM_PERIOD_DEFAULT 1 // TU. - -/* Annex D - dot11RegDomainsSupportValue */ -#define REGULATION_DOMAIN_FCC 0x10 /* FCC (US) */ -#define REGULATION_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define REGULATION_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define REGULATION_DOMAIN_SPAIN 0x31 /* Spain */ -#define REGULATION_DOMAIN_FRANCE 0x32 /* France */ -#define REGULATION_DOMAIN_JAPAN 0x40 /* MKK (Japan) */ -#define REGULATION_DOMAIN_CHINA 0x50 /* China */ -#define REGULATION_DOMAIN_OTHER 0x00 /* Other */ - - - -//3 /* --------------- IEEE 802.11 MAC header fields --------------- */ -/* 7.1.3.1 Masks for the subfields in the Frame Control field */ -#define MASK_FC_PROTOCOL_VER BITS(0,1) -#define MASK_FC_TYPE BITS(2,3) -#define MASK_FC_SUBTYPE BITS(4,7) -#define MASK_FC_SUBTYPE_QOS_DATA BIT(7) -#define MASK_FC_TO_DS BIT(8) -#define MASK_FC_FROM_DS BIT(9) -#define MASK_FC_MORE_FRAG BIT(10) -#define MASK_FC_RETRY BIT(11) -#define MASK_FC_PWR_MGT BIT(12) -#define MASK_FC_MORE_DATA BIT(13) -#define MASK_FC_PROTECTED_FRAME BIT(14) -#define MASK_FC_ORDER BIT(15) - -#define MASK_FRAME_TYPE (MASK_FC_TYPE | MASK_FC_SUBTYPE) -#define MASK_TO_DS_FROM_DS (MASK_FC_TO_DS | MASK_FC_FROM_DS) - -#define MAX_NUM_OF_FC_SUBTYPES 16 -#define OFFSET_OF_FC_SUBTYPE 4 - - -/* 7.1.3.1.2 MAC frame types and subtypes */ -#define MAC_FRAME_TYPE_MGT 0 -#define MAC_FRAME_TYPE_CTRL BIT(2) -#define MAC_FRAME_TYPE_DATA BIT(3) -#define MAC_FRAME_TYPE_QOS_DATA (MAC_FRAME_TYPE_DATA | MASK_FC_SUBTYPE_QOS_DATA) - -#define MAC_FRAME_ASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0000) -#define MAC_FRAME_ASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0010) -#define MAC_FRAME_REASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0020) -#define MAC_FRAME_REASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0030) -#define MAC_FRAME_PROBE_REQ (MAC_FRAME_TYPE_MGT | 0x0040) -#define MAC_FRAME_PROBE_RSP (MAC_FRAME_TYPE_MGT | 0x0050) -#define MAC_FRAME_BEACON (MAC_FRAME_TYPE_MGT | 0x0080) -#define MAC_FRAME_ATIM (MAC_FRAME_TYPE_MGT | 0x0090) -#define MAC_FRAME_DISASSOC (MAC_FRAME_TYPE_MGT | 0x00A0) -#define MAC_FRAME_AUTH (MAC_FRAME_TYPE_MGT | 0x00B0) -#define MAC_FRAME_DEAUTH (MAC_FRAME_TYPE_MGT | 0x00C0) -#define MAC_FRAME_ACTION (MAC_FRAME_TYPE_MGT | 0x00D0) -#define MAC_FRAME_ACTION_NO_ACK (MAC_FRAME_TYPE_MGT | 0x00E0) - - -#define MAC_FRAME_CONTRL_WRAPPER (MAC_FRAME_TYPE_CTRL | 0x0070) -#define MAC_FRAME_BLOCK_ACK_REQ (MAC_FRAME_TYPE_CTRL | 0x0080) -#define MAC_FRAME_BLOCK_ACK (MAC_FRAME_TYPE_CTRL | 0x0090) -#define MAC_FRAME_PS_POLL (MAC_FRAME_TYPE_CTRL | 0x00A0) -#define MAC_FRAME_RTS (MAC_FRAME_TYPE_CTRL | 0x00B0) -#define MAC_FRAME_CTS (MAC_FRAME_TYPE_CTRL | 0x00C0) -#define MAC_FRAME_ACK (MAC_FRAME_TYPE_CTRL | 0x00D0) -#define MAC_FRAME_CF_END (MAC_FRAME_TYPE_CTRL | 0x00E0) -#define MAC_FRAME_CF_END_CF_ACK (MAC_FRAME_TYPE_CTRL | 0x00F0) - -#define MAC_FRAME_DATA (MAC_FRAME_TYPE_DATA | 0x0000) -#define MAC_FRAME_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0010) -#define MAC_FRAME_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0020) -#define MAC_FRAME_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0030) -#define MAC_FRAME_NULL (MAC_FRAME_TYPE_DATA | 0x0040) -#define MAC_FRAME_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0050) -#define MAC_FRAME_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0060) -#define MAC_FRAME_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0070) -#define MAC_FRAME_QOS_DATA (MAC_FRAME_TYPE_DATA | 0x0080) -#define MAC_FRAME_QOS_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0090) -#define MAC_FRAME_QOS_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00A0) -#define MAC_FRAME_QOS_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00B0) -#define MAC_FRAME_QOS_NULL (MAC_FRAME_TYPE_DATA | 0x00C0) -#define MAC_FRAME_QOS_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00E0) -#define MAC_FRAME_QOS_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00F0) - -/* 7.1.3.2 Mask for the AID value in the Duration/ID field */ -#define MASK_DI_DURATION BITS(0,14) -#define MASK_DI_AID BITS(0,13) -#define MASK_DI_AID_MSB BITS(14,15) -#define MASK_DI_CFP_FIXED_VALUE BIT(15) - -/* 7.1.3.4 Masks for the subfields in the Sequence Control field */ -#define MASK_SC_SEQ_NUM BITS(4,15) -#define MASK_SC_SEQ_NUM_OFFSET 4 -#define MASK_SC_FRAG_NUM BITS(0,3) -#define INVALID_SEQ_CTRL_NUM 0x000F /* According to 6.2.1.1.2 - * FRAG_NUM won't equal to 15 - */ - -/* 7.1.3.5 QoS Control field */ -#define TID_NUM 16 -#define TID_MASK BITS(0,3) -#define EOSP BIT(4) -#define ACK_POLICY BITS(5,6) -#define A_MSDU_PRESENT BIT(7) - -#define MASK_QC_TID BITS(0,3) -#define MASK_QC_EOSP BIT(4) -#define MASK_QC_EOSP_OFFSET 4 -#define MASK_QC_ACK_POLICY BITS(5, 6) -#define MASK_QC_ACK_POLICY_OFFSET 5 -#define MASK_QC_A_MSDU_PRESENT BIT(7) - -/* 7.1.3.5a HT Control field */ -#define HT_CTRL_LINK_ADAPTATION_CTRL BITS(0,15) -#define HT_CTRL_CALIBRATION_POSITION BITS(16,17) -#define HT_CTRL_CALIBRATION_SEQUENCE BITS(18,19) -#define HT_CTRL_CSI_STEERING BITS(22,23) -#define HT_CTRL_NDP_ANNOUNCEMENT BIT(24) -#define HT_CTRL_AC_CONSTRAINT BIT(30) -#define HT_CTRL_RDG_MORE_PPDU BIT(31) - -#define LINK_ADAPTATION_CTRL_TRQ BIT(1) -#define LINK_ADAPTATION_CTRL_MAI_MRQ BIT(2) -#define LINK_ADAPTATION_CTRL_MAI_MSI BITS(3,5) -#define LINK_ADAPTATION_CTRL_MFSI BITS(6,8) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_CMD BITS(9,11) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_DATA BITS(12,15) - -/* 7.1.3.5.3 Ack Policy subfield*/ -#define ACK_POLICY_NORMAL_ACK_IMPLICIT_BA_REQ 0 -#define ACK_POLICY_NO_ACK 1 -#define ACK_POLICY_NO_EXPLICIT_ACK_PSMP_ACK 2 -#define ACK_POLICY_BA 3 - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -#define PSPOLL_FRAME_LEN 16 /* w/o FCS */ - -/* 7.2.7.1 BAR */ -#define OFFSET_BAR_SSC_SN 4 - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 2009.11.30 mtk02468: Moved these definitions to the right place */ -#if 0 -/* Block Ack Parameter Set field */ -#define BA_PARM_BA_POLICY BIT(1) -#define BA_PARM_TID BITS(2,5) -#define BA_PARM_BUFFER_SIZE BITS(6,15) -#endif - -#define BA_POLICY_IMMEDIATE BIT(1) - -/* Block Ack Starting Sequence Control field */ -#define BA_START_SEQ_CTL_FRAG_NUM BITS(0,3) -#define BA_START_SEQ_CTL_SSN BITS(4,15) - -/* BAR Control field */ -#define BAR_CONTROL_NO_ACK_POLICY BIT(0) -#define BAR_CONTROL_MULTI_TID BIT(1) -#define BAR_CONTROL_COMPRESSED_BA BIT(2) -#define BAR_CONTROL_TID_INFO BITS(12,15) -#define BAR_CONTROL_TID_INFO_OFFSET 12 - -/* TID Value */ -#define BAR_INFO_TID_VALUE BITS(12,15) - -#define BAR_COMPRESSED_VARIANT_FRAME_LEN (16 + 4) - -//3 /* --------------- IEEE 802.11 frame body fields --------------- */ -//3 Management frame body components (I): Fixed Fields. -/* 7.3.1.1 Authentication Algorithm Number field */ -#define AUTH_ALGORITHM_NUM_FIELD_LEN 2 - -#define AUTH_ALGORITHM_NUM_OPEN_SYSTEM 0 /* Open System */ -#define AUTH_ALGORITHM_NUM_SHARED_KEY 1 /* Shared Key */ -#define AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION 2 /* Fast BSS Transition */ - -/* 7.3.1.2 Authentication Transaction Sequence Number field */ -#define AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN 2 -#define AUTH_TRANSACTION_SEQ_1 1 -#define AUTH_TRANSACTION_SEQ_2 2 -#define AUTH_TRANSACTION_SEQ_3 3 -#define AUTH_TRANSACTION_SEQ_4 4 - -/* 7.3.1.3 Beacon Interval field */ -#define BEACON_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.4 Capability Information field */ -#define CAP_INFO_FIELD_LEN 2 -#define CAP_INFO_ESS BIT(0) -#define CAP_INFO_IBSS BIT(1) -#define CAP_INFO_BSS_TYPE (CAP_INFO_ESS | CAP_INFO_IBSS) -#define CAP_INFO_CF_POLLABLE BIT(2) -#define CAP_INFO_CF_POLL_REQ BIT(3) -#define CAP_INFO_CF (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) -#define CAP_INFO_PRIVACY BIT(4) -#define CAP_INFO_SHORT_PREAMBLE BIT(5) -#define CAP_INFO_PBCC BIT(6) -#define CAP_INFO_CH_AGILITY BIT(7) -#define CAP_INFO_SPEC_MGT BIT(8) -#define CAP_INFO_QOS BIT(9) -#define CAP_INFO_SHORT_SLOT_TIME BIT(10) -#define CAP_INFO_APSD BIT(11) -#define CAP_INFO_RESERVED BIT(12) -#define CAP_INFO_DSSS_OFDM BIT(13) -#define CAP_INFO_DELAYED_BLOCK_ACK BIT(14) -#define CAP_INFO_IMM_BLOCK_ACK BIT(15) -/* STA usage of CF-Pollable and CF-Poll Request subfields */ -/* STA: not CF-Pollable */ -#define CAP_CF_STA_NOT_POLLABLE 0x0000 -/* STA: CF-Pollable, not requesting on the CF-Polling list */ -#define CAP_CF_STA_NOT_ON_LIST CAP_INFO_CF_POLL_REQ -/* STA: CF-Pollable, requesting on the CF-Polling list */ -#define CAP_CF_STA_ON_LIST CAP_INFO_CF_POLLABLE -/* STA: CF-Pollable, requesting never to be polled */ -#define CAP_CF_STA_NEVER_POLLED (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) - -/* AP usage of CF-Pollable and CF-Poll Request subfields */ -/* AP: No point coordinator (PC) */ -#define CAP_CF_AP_NO_PC 0x0000 -/* AP: PC at AP for delivery only (no polling) */ -#define CAP_CF_AP_DELIVERY_ONLY CAP_INFO_CF_POLL_REQ -/* AP: PC at AP for delivery and polling */ -#define CAP_CF_AP_DELIVERY_POLLING CAP_INFO_CF_POLLABLE - -/* 7.3.1.5 Current AP Address field */ -#define CURR_AP_ADDR_FIELD_LEN MAC_ADDR_LEN - -/* 7.3.1.6 Listen Interval field */ -#define LISTEN_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.7 Reason Code field */ -#define REASON_CODE_FIELD_LEN 2 - -#define REASON_CODE_RESERVED 0 /* Reseved */ -#define REASON_CODE_UNSPECIFIED 1 /* Unspecified reason */ -#define REASON_CODE_PREV_AUTH_INVALID 2 /* Previous auth no longer valid */ -#define REASON_CODE_DEAUTH_LEAVING_BSS 3 /* Deauth because sending STA is leaving BSS */ -#define REASON_CODE_DISASSOC_INACTIVITY 4 /* Disassoc due to inactivity */ -#define REASON_CODE_DISASSOC_AP_OVERLOAD 5 /* Disassoc because AP is unable to handle all assoc STAs */ -#define REASON_CODE_CLASS_2_ERR 6 /* Class 2 frame rx from nonauth STA */ -#define REASON_CODE_CLASS_3_ERR 7 /* Class 3 frame rx from nonassoc STA */ -#define REASON_CODE_DISASSOC_LEAVING_BSS 8 /* Disassoc because sending STA is leaving BSS */ -#define REASON_CODE_ASSOC_BEFORE_AUTH 9 /* STA requesting (re)assoc is not auth with responding STA */ -#define REASON_CODE_DISASSOC_PWR_CAP_UNACCEPTABLE 10 /* Disassoc because the info in Power Capability is unacceptable */ -#define REASON_CODE_DISASSOC_SUP_CHS_UNACCEPTABLE 11 /* Disassoc because the info in Supported Channels is unacceptable */ -#define REASON_CODE_INVALID_INFO_ELEM 13 /* Invalid information element */ -#define REASON_CODE_MIC_FAILURE 14 /* MIC failure */ -#define REASON_CODE_4_WAY_HANDSHAKE_TIMEOUT 15 /* 4-way handshake timeout */ -#define REASON_CODE_GROUP_KEY_UPDATE_TIMEOUT 16 /* Group key update timeout */ -#define REASON_CODE_DIFFERENT_INFO_ELEM 17 /* Info element in 4-way handshake different from (Re-)associate request/Probe response/Beacon */ -#define REASON_CODE_MULTICAST_CIPHER_NOT_VALID 18 /* Multicast Cipher is not valid */ -#define REASON_CODE_UNICAST_CIPHER_NOT_VALID 19 /* Unicast Cipher is not valid */ -#define REASON_CODE_AKMP_NOT_VALID 20 /* AKMP is not valid */ -#define REASON_CODE_UNSUPPORTED_RSNE_VERSION 21 /* Unsupported RSNE version */ -#define REASON_CODE_INVALID_RSNE_CAPABILITIES 22 /* Invalid RSNE Capabilities */ -#define REASON_CODE_IEEE_802_1X_AUTH_FAILED 23 /* IEEE 802.1X Authentication failed */ -#define REASON_CODE_CIPHER_REJECT_SEC_POLICY 24 /* Cipher suite rejected because of the security policy */ -#define REASON_CODE_DISASSOC_UNSPECIFIED_QOS 32 /* Disassoc for unspecified, QoS-related reason */ -#define REASON_CODE_DISASSOC_LACK_OF_BANDWIDTH 33 /* Disassoc because QAP lacks sufficient bandwidth for this QSTA */ -#define REASON_CODE_DISASSOC_ACK_LOST_POOR_CHANNEL 34 /* Disassoc because of too many ACKs lost for AP transmissions and/or poor channel conditions */ -#define REASON_CODE_DISASSOC_TX_OUTSIDE_TXOP_LIMIT 35 /* Disassoc because QSTA is transmitting outside the limits of its TXOPs */ -#define REASON_CODE_PEER_WHILE_LEAVING 36 /* QSTA is leaving the QBSS or resetting */ -#define REASON_CODE_PEER_REFUSE_DLP 37 /* Peer does not want to use this mechanism */ -#define REASON_CODE_PEER_SETUP_REQUIRED 38 /* Frames received but a setup is reqired */ -#define REASON_CODE_PEER_TIME_OUT 39 /* Time out */ -#define REASON_CODE_PEER_CIPHER_UNSUPPORTED 45 /* Peer does not support the requested cipher suite */ - -/* 7.3.1.8 AID field */ -#define AID_FIELD_LEN 2 -#define AID_MASK BITS(0,13) -#define AID_MSB BITS(14,15) -#define AID_MIN_VALUE 1 -#define AID_MAX_VALUE 2007 - -/* 7.3.1.9 Status Code field */ -#define STATUS_CODE_FIELD_LEN 2 - -#define STATUS_CODE_RESERVED 0 /* Reserved - Used by TX Auth */ -#define STATUS_CODE_SUCCESSFUL 0 /* Successful */ -#define STATUS_CODE_UNSPECIFIED_FAILURE 1 /* Unspecified failure */ -#define STATUS_CODE_CAP_NOT_SUPPORTED 10 /* Cannot support all requested cap in the Cap Info field */ -#define STATUS_CODE_REASSOC_DENIED_WITHOUT_ASSOC 11 /* Reassoc denied due to inability to confirm that assoc exists */ -#define STATUS_CODE_ASSOC_DENIED_OUTSIDE_STANDARD 12 /* Assoc denied due to reason outside the scope of this std. */ -#define STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED 13 /* Responding STA does not support the specified auth algorithm */ -#define STATUS_CODE_AUTH_OUT_OF_SEQ 14 /* Rx an auth frame with auth transaction seq num out of expected seq */ -#define STATUS_CODE_AUTH_REJECTED_CHAL_FAIL 15 /* Auth rejected because of challenge failure */ -#define STATUS_CODE_AUTH_REJECTED_TIMEOUT 16 /* Auth rejected due to timeout waiting for next frame in sequence */ -#define STATUS_CODE_ASSOC_DENIED_AP_OVERLOAD 17 /* Assoc denied because AP is unable to handle additional assoc STAs */ -#define STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED 18 /* Assoc denied due to requesting STA not supporting all of basic rates */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_PREAMBLE 19 /* Assoc denied due to requesting STA not supporting short preamble */ -#define STATUS_CODE_ASSOC_DENIED_NO_PBCC 20 /* Assoc denied due to requesting STA not supporting PBCC */ -#define STATUS_CODE_ASSOC_DENIED_NO_CH_AGILITY 21 /* Assoc denied due to requesting STA not supporting channel agility */ -#define STATUS_CODE_ASSOC_REJECTED_NO_SPEC_MGT 22 /* Assoc rejected because Spectrum Mgt capability is required */ -#define STATUS_CODE_ASSOC_REJECTED_PWR_CAP 23 /* Assoc rejected because the info in Power Capability is unacceptable */ -#define STATUS_CODE_ASSOC_REJECTED_SUP_CHS 24 /* Assoc rejected because the info in Supported Channels is unacceptable */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25 /* Assoc denied due to requesting STA not supporting short slot time */ -#define STATUS_CODE_ASSOC_DENIED_NO_DSSS_OFDM 26 /* Assoc denied due to requesting STA not supporting DSSS-OFDM */ -#if CFG_SUPPORT_802_11W -#define STATUS_CODE_ASSOC_REJECTED_TEMPORARILY 30 /* IEEE 802.11w, Assoc denied due to the SA query */ -#define STATUS_CODE_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31 /* IEEE 802.11w, Assoc denied due to the MFP select policy */ -#endif -#define STATUS_CODE_UNSPECIFIED_QOS_FAILURE 32 /* Unspecified, QoS-related failure */ -#define STATUS_CODE_ASSOC_DENIED_BANDWIDTH 33 /* Assoc denied due to insufficient bandwidth to handle another QSTA */ -#define STATUS_CODE_ASSOC_DENIED_POOR_CHANNEL 34 /* Assoc denied due to excessive frame loss rates and/or poor channel conditions */ -#define STATUS_CODE_ASSOC_DENIED_NO_QOS_FACILITY 35 /* Assoc denied due to requesting STA not supporting QoS facility */ -#define STATUS_CODE_REQ_DECLINED 37 /* Request has been declined */ -#define STATUS_CODE_REQ_INVALID_PARAMETER_VALUE 38 /* Request has not been successful as one or more parameters have invalid values */ -#define STATUS_CODE_REQ_NOT_HONORED_TSPEC 39 /* TS not created because request cannot be honored. Suggested TSPEC provided. */ -#define STATUS_CODE_INVALID_INFO_ELEMENT 40 /* Invalid information element */ -#define STATUS_CODE_INVALID_GROUP_CIPHER 41 /* Invalid group cipher */ -#define STATUS_CODE_INVALID_PAIRWISE_CIPHER 42 /* Invalid pairwise cipher */ -#define STATUS_CODE_INVALID_AKMP 43 /* Invalid AKMP */ -#define STATUS_CODE_UNSUPPORTED_RSN_IE_VERSION 44 /* Unsupported RSN information element version */ -#define STATUS_CODE_INVALID_RSN_IE_CAP 45 /* Invalid RSN information element capabilities */ -#define STATUS_CODE_CIPHER_SUITE_REJECTED 46 /* Cipher suite rejected because of security policy */ -#define STATUS_CODE_REQ_NOT_HONORED_TS_DELAY 47 /* TS not created becasue request cannot be honored. Attempt to create a TS later. */ -#define STATUS_CODE_DIRECT_LINK_NOT_ALLOWED 48 /* Direct Link is not allowed in the BSS by policy */ -#define STATUS_CODE_DESTINATION_STA_NOT_PRESENT 49 /* Destination STA is not present within this QBSS */ -#define STATUS_CODE_DESTINATION_STA_NOT_QSTA 50 /* Destination STA is not a QSTA */ -#define STATUS_CODE_ASSOC_DENIED_LARGE_LIS_INTERVAL 51 /* Association denied because the ListenInterval is too large */ - -/* proprietary definition of reserved field of Status Code */ -#define STATUS_CODE_JOIN_FAILURE 0xFFF0 /* Join failure */ -#define STATUS_CODE_JOIN_TIMEOUT 0xFFF1 /* Join timeout */ -#define STATUS_CODE_AUTH_TIMEOUT 0xFFF2 /* Authentication timeout */ -#define STATUS_CODE_ASSOC_TIMEOUT 0xFFF3 /* (Re)Association timeout */ -#define STATUS_CODE_CCX_CCKM_REASSOC_FAILURE 0xFFF4 /* CCX CCKM reassociation failure */ - - -/* 7.3.1.10 Timestamp field */ -#define TIMESTAMP_FIELD_LEN 8 - -/* 7.3.1.11 Category of Action field */ -#define CATEGORY_SPEC_MGT 0 -#define CATEGORY_QOS_ACTION 1 /* QoS action */ -#define CATEGORY_DLS_ACTION 2 /* Direct Link Protocol (DLP) action */ -#define CATEGORY_BLOCK_ACK_ACTION 3 /* Block ack action */ -#define CATEGORY_PUBLIC_ACTION 4 /* Public action */ -#define CATEGORY_RM_ACTION 5 /* Radio measurement action */ -#define CATEGORY_HT_ACTION 7 -#if CFG_SUPPORT_802_11W -#define CATEGORY_SA_QUERT_ACTION 8 -#endif -#define CATEGORY_WNM_ACTION 10 /* 802.11v Wireless Network Management */ -#define CATEGORY_UNPROTECTED_WNM_ACTION 11 /* 802.11v Wireless Network Management */ -#define CATEGORY_WME_MGT_NOTIFICATION 17 /* WME management notification */ -#define CATEGORY_VENDOR_SPECIFIC_ACTION 127 - - -/* 7.3.1.14 Block Ack Parameter Set field */ -#define BA_PARAM_SET_ACK_POLICY_MASK BIT(1) -#define BA_PARAM_SET_ACK_POLICY_MASK_OFFSET 1 -#define BA_PARAM_SET_TID_MASK BITS(2,5) -#define BA_PARAM_SET_TID_MASK_OFFSET 2 -#define BA_PARAM_SET_BUFFER_SIZE_MASK BITS(6,15) -#define BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET 6 - -#define BA_PARAM_SET_ACK_POLICY_IMMEDIATE_BA 1 -#define BA_PARAM_SET_ACK_POLICY_DELAYED_BA 0 - - -//3 Management frame body components (II): Information Elements. -/* 7.3.2 Element IDs of information elements */ -#define ELEM_HDR_LEN 2 - -#define ELEM_ID_SSID 0 /* SSID */ -#define ELEM_ID_SUP_RATES 1 /* Supported rates */ -#define ELEM_ID_FH_PARAM_SET 2 /* FH parameter set */ -#define ELEM_ID_DS_PARAM_SET 3 /* DS parameter set */ -#define ELEM_ID_CF_PARAM_SET 4 /* CF parameter set */ -#define ELEM_ID_TIM 5 /* TIM */ -#define ELEM_ID_IBSS_PARAM_SET 6 /* IBSS parameter set */ -#define ELEM_ID_COUNTRY_INFO 7 /* Country information */ -#define ELEM_ID_HOPPING_PATTERN_PARAM 8 /* Hopping pattern parameters */ -#define ELEM_ID_HOPPING_PATTERN_TABLE 9 /* Hopping pattern table */ -#define ELEM_ID_REQUEST 10 /* Request */ -#define ELEM_ID_BSS_LOAD 11 /* BSS load */ -#define ELEM_ID_EDCA_PARAM_SET 12 /* EDCA parameter set */ -#define ELEM_ID_TSPEC 13 /* Traffic specification (TSPEC) */ -#define ELEM_ID_TCLAS 14 /* Traffic classification (TCLAS) */ -#define ELEM_ID_SCHEDULE 15 /* Schedule */ -#define ELEM_ID_CHALLENGE_TEXT 16 /* Challenge text */ - -#define ELEM_ID_PWR_CONSTRAINT 32 /* Power constraint */ -#define ELEM_ID_PWR_CAP 33 /* Power capability */ -#define ELEM_ID_TPC_REQ 34 /* TPC request */ -#define ELEM_ID_TPC_REPORT 35 /* TPC report */ -#define ELEM_ID_SUP_CHS 36 /* Supported channels */ -#define ELEM_ID_CH_SW_ANNOUNCEMENT 37 /* Channel switch announcement */ -#define ELEM_ID_MEASUREMENT_REQ 38 /* Measurement request */ -#define ELEM_ID_MEASUREMENT_REPORT 39 /* Measurement report */ -#define ELEM_ID_QUIET 40 /* Quiet */ -#define ELEM_ID_IBSS_DFS 41 /* IBSS DFS */ -#define ELEM_ID_ERP_INFO 42 /* ERP information */ -#define ELEM_ID_TS_DELAY 43 /* TS delay */ -#define ELEM_ID_TCLAS_PROCESSING 44 /* TCLAS processing */ -#define ELEM_ID_HT_CAP 45 /* HT Capabilities subelement */ -#define ELEM_ID_QOS_CAP 46 /* QoS capability */ -#define ELEM_ID_RSN 48 /* RSN IE */ -#define ELEM_ID_EXTENDED_SUP_RATES 50 /* Extended supported rates */ -#if CFG_SUPPORT_802_11W -#define ELEM_ID_TIMEOUT_INTERVAL 56 /* 802.11w SA Timeout interval */ -#endif -#define ELEM_ID_HT_OP 61 /* HT Operation */ -#define ELEM_ID_SCO 62 /* Secondary Channel Offset */ -#define ELEM_ID_RRM_ENABLED_CAP 70 /* Radio Resource Management Enabled Capabilities */ -#define ELEM_ID_20_40_BSS_COEXISTENCE 72 /* 20/40 BSS Coexistence */ -#define ELEM_ID_20_40_INTOLERANT_CHNL_REPORT 73 /* 20/40 BSS Intolerant Channel Report */ -#define ELEM_ID_OBSS_SCAN_PARAMS 74 /* Overlapping BSS Scan Parameters */ -#define ELEM_ID_EXTENDED_CAP 127 /* Extended capabilities */ - -#define ELEM_ID_VENDOR 221 /* Vendor specific IE */ -#define ELEM_ID_WPA ELEM_ID_VENDOR /* WPA IE */ -#define ELEM_ID_WMM ELEM_ID_VENDOR /* WMM IE */ -#define ELEM_ID_P2P ELEM_ID_VENDOR /* WiFi Direct */ -#define ELEM_ID_WSC ELEM_ID_VENDOR /* WSC IE */ - -#define ELEM_ID_RESERVED 255 /* Reserved */ - - -/* 7.3.2.1 SSID element */ -#define ELEM_MAX_LEN_SSID 32 - -/* 7.3.2.2 Supported Rates */ -#define ELEM_MAX_LEN_SUP_RATES 8 - -/* 7.3.2.4 DS Parameter Set */ -#define ELEM_MAX_LEN_DS_PARAMETER_SET 1 - -/* 7.3.2.5 CF Parameter Set */ -#define ELEM_CF_PARM_LEN 8 - -/* 7.3.2.6 TIM */ -#define ELEM_MIX_LEN_TIM 4 -#define ELEM_MAX_LEN_TIM 254 - -/* 7.3.2.7 IBSS Parameter Set element */ -#define ELEM_MAX_LEN_IBSS_PARAMETER_SET 2 - -/* 7.3.2.8 Challenge Text element */ -#define ELEM_MIN_LEN_CHALLENGE_TEXT 1 -#define ELEM_MAX_LEN_CHALLENGE_TEXT 253 - -/* 7.3.2.9 Country Information element */ -/* Country IE should contain at least 3-bytes country code string and one subband triplet. */ -#define ELEM_MIN_LEN_COUNTRY_INFO 6 - -#define ELEM_ID_COUNTRY_INFO_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_SUBBAND_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_REGULATORY_TRIPLET_LEN_FIXED 3 - - -/* 7.3.2.13 ERP Information element */ -#define ELEM_MAX_LEN_ERP 1 -/* -- bits in the ERP Information element */ -#define ERP_INFO_NON_ERP_PRESENT BIT(0) /* NonERP_Present bit */ -#define ERP_INFO_USE_PROTECTION BIT(1) /* Use_Protection bit */ -#define ERP_INFO_BARKER_PREAMBLE_MODE BIT(2) /* Barker_Preamble_Mode bit */ - - -/* 7.3.2.14 Extended Supported Rates */ -#define ELEM_MAX_LEN_EXTENDED_SUP_RATES 255 - -/* 7.3.2.21 Measurement Request element */ -#define ELEM_RM_TYPE_BASIC_REQ 0 -#define ELEM_RM_TYPE_CCA_REQ 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REQ 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REQ 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REQ 4 -#define ELEM_RM_TYPE_BEACON_REQ 5 -#define ELEM_RM_TYPE_FRAME_REQ 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REQ 7 -#define ELEM_RM_TYPE_LCI_REQ 8 -#define ELEM_RM_TYPE_TS_REQ 9 -#define ELEM_RM_TYPE_MEASURE_PAUSE_REQ 255 - -/* 7.3.2.22 Measurement Report element */ -#define ELEM_RM_TYPE_BASIC_REPORT 0 -#define ELEM_RM_TYPE_CCA_REPORT 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REPORT 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REPORT 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REPORT 4 -#define ELEM_RM_TYPE_BEACON_REPORT 5 -#define ELEM_RM_TYPE_FRAME_REPORT 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REPORT 7 -#define ELEM_RM_TYPE_LCI_REPORT 8 -#define ELEM_RM_TYPE_TS_REPORT 9 - - -/* 7.3.2.25 RSN information element */ -#define ELEM_MAX_LEN_WPA 24 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_RSN 38 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_WAPI 38 /* one pairwise, one AKM suite, one BKID */ -#define ELEM_MAX_LEN_WSC 200/* one pairwise, one AKM suite, one BKID */ - -#if CFG_SUPPORT_802_11W -#define ELEM_WPA_CAP_MFPR BIT(6) -#define ELEM_WPA_CAP_MFPC BIT(7) -#endif - -/* 7.3.2.27 Extended Capabilities information element */ -#define ELEM_EXT_CAP_20_40_COEXIST_SUPPORT BIT(0) -#define ELEM_EXT_CAP_PSMP_CAP BIT(4) -#define ELEM_EXT_CAP_SERVICE_INTERVAL_GRANULARITY BIT(5) -#define ELEM_EXT_CAP_SCHEDULE_PSMP BIT(6) - -#define ELEM_MAX_LEN_EXT_CAP (3 - ELEM_HDR_LEN) - -/* 7.3.2.30 TSPEC element */ -#define TS_INFO_TRAFFIC_TYPE_MASK BIT(0) //WMM: 0 (Asynchronous TS of low-duty cycles) -#define TS_INFO_TID_OFFSET 1 -#define TS_INFO_TID_MASK BITS(1,4) -#define TS_INFO_DIRECTION_OFFSET 5 -#define TS_INFO_DIRECTION_MASK BITS(5,6) -#define TS_INFO_ACCESS_POLICY_OFFSET 7 -#define TS_INFO_ACCESS_POLICY_MASK BITS(7,8) //WMM: Bit(7,8) = (1,0) = EDCA -#define TS_INFO_AGGREGATION_MASK BIT(9) //WMM: 0 -#define TS_INFO_APSD_MASK BIT(10) -#define TS_INFO_UP_OFFSET 11 -#define TS_INFO_UP_MASK BITS(11,13) -#define TS_INFO_ACK_POLICY_OFFSET 14 -#define TS_INFO_ACK_POLICY_MASK BITS(14,15) -#define TS_INFO_SCHEDULE_MASK 16 - -/* 7.3.2.56 HT capabilities element */ -#define ELEM_MAX_LEN_HT_CAP (28 - ELEM_HDR_LEN) /* sizeof(IE_HT_CAP_T)-2 */ - -/* 7.3.2.56.2 HT capabilities Info field */ -#define HT_CAP_INFO_LDPC_CAP BIT(0) -#define HT_CAP_INFO_SUP_CHNL_WIDTH BIT(1) -#define HT_CAP_INFO_SM_POWER_SAVE BITS(2,3) -#define HT_CAP_INFO_HT_GF BIT(4) -#define HT_CAP_INFO_SHORT_GI_20M BIT(5) -#define HT_CAP_INFO_SHORT_GI_40M BIT(6) -#define HT_CAP_INFO_TX_STBC BIT(7) -#define HT_CAP_INFO_RX_STBC BITS(8,9) -#define HT_CAP_INFO_HT_DELAYED_BA BIT(10) -#define HT_CAP_INFO_MAX_AMSDU_LEN BIT(11) -#define HT_CAP_INFO_DSSS_CCK_IN_40M BIT(12) -#define HT_CAP_INFO_40M_INTOLERANT BIT(14) -#define HT_CAP_INFO_LSIG_TXOP_SUPPORT BIT(15) - -#define HT_CAP_INFO_RX_STBC_NO_SUPPORTED 0 -#define HT_CAP_INFO_RX_STBC_1_SS BIT(8) -#define HT_CAP_INFO_RX_STBC_2_SS BIT(9) -#define HT_CAP_INFO_RX_STBC_3_SS HT_CAP_INFO_RX_STBC - -/* 7.3.2.56.3 A-MPDU Parameters field */ -#define AMPDU_PARAM_MAX_AMPDU_LEN_EXP BITS(0,1) -#define AMPDU_PARAM_MIN_START_SPACING BITS(2,4) - -#define AMPDU_PARAM_MAX_AMPDU_LEN_8K 0 -#define AMPDU_PARAM_MAX_AMPDU_LEN_16K BIT(0) -#define AMPDU_PARAM_MAX_AMPDU_LEN_32K BIT(1) -#define AMPDU_PARAM_MAX_AMPDU_LEN_64K BITS(0,1) - -#define AMPDU_PARAM_MSS_NO_RESTRICIT 0 -#define AMPDU_PARAM_MSS_1_4_US BIT(2) -#define AMPDU_PARAM_MSS_1_2_US BIT(3) -#define AMPDU_PARAM_MSS_1_US BITS(2,3) -#define AMPDU_PARAM_MSS_2_US BIT(4) -#define AMPDU_PARAM_MSS_4_US (BIT(4) | BIT(2)) -#define AMPDU_PARAM_MSS_8_US (BIT(4) | BIT(3)) -#define AMPDU_PARAM_MSS_16_US BITS(2,4) - -/* 7.3.2.56.4 Supported MCS Set field (TX rate: octects 12~15) */ -#define SUP_MCS_TX_SET_DEFINED BIT(0) -#define SUP_MCS_TX_RX_SET_NOT_EQUAL BIT(1) -#define SUP_MCS_TX_MAX_NUM_SS BITS(2,3) -#define SUP_MCS_TX_UNEQUAL_MODULATION BIT(4) - -#define SUP_MCS_TX_MAX_NUM_1_SS 0 -#define SUP_MCS_TX_MAX_NUM_2_SS BIT(2) -#define SUP_MCS_TX_MAX_NUM_3_SS BIT(3) -#define SUP_MCS_TX_MAX_NUM_4_SS BITS(2,3) - -#define SUP_MCS_RX_BITMASK_OCTET_NUM 10 -#define SUP_MCS_RX_DEFAULT_HIGHEST_RATE 0 /* Not specify */ - -/* 7.3.2.56.5 HT Extended Capabilities field */ -#define HT_EXT_CAP_PCO BIT(0) -#define HT_EXT_CAP_PCO_TRANSITION_TIME BITS(1,2) -#define HT_EXT_CAP_MCS_FEEDBACK BITS(8,9) -#define HT_EXT_CAP_HTC_SUPPORT BIT(10) -#define HT_EXT_CAP_RD_RESPONDER BIT(11) - -#define HT_EXT_CAP_PCO_TRANS_TIME_NONE 0 -#define HT_EXT_CAP_PCO_TRANS_TIME_400US BIT(1) -#define HT_EXT_CAP_PCO_TRANS_TIME_1_5MS BIT(2) -#define HT_EXT_CAP_PCO_TRANS_TIME_5MS BITS(1,2) - -#define HT_EXT_CAP_MCS_FEEDBACK_NO_FB 0 -#define HT_EXT_CAP_MCS_FEEDBACK_UNSOLICITED BIT(9) -#define HT_EXT_CAP_MCS_FEEDBACK_BOTH BITS(8,9) - -/* 7.3.2.56.6 Transmit Beamforming Capabilities field */ - -/* 7.3.2.56.7 Antenna Selection Capability field */ -#define ASEL_CAP_CAPABLE BIT(0) -#define ASEL_CAP_CSI_FB_BY_TX_ASEL_CAPABLE BIT(1) -#define ASEL_CAP_ANT_INDICES_FB_BY_TX_ASEL_CAPABLE BIT(2) -#define ASEL_CAP_EXPLICIT_CSI_FB_CAPABLE BIT(3) -#define ASEL_CAP_ANT_INDICES_CAPABLE BIT(4) -#define ASEL_CAP_RX_ASEL_CAPABLE BIT(5) -#define ASEL_CAP_TX_SOUNDING_CAPABLE BIT(6) - -/* 7.3.2.57 HT Operation element */ -#define ELEM_MAX_LEN_HT_OP (24 - ELEM_HDR_LEN) /* sizeof(IE_HT_OP_T)-2 */ - -#define HT_OP_INFO1_SCO BITS(0,1) -#define HT_OP_INFO1_STA_CHNL_WIDTH BIT(2) -#define HT_OP_INFO1_RIFS_MODE BIT(3) - -#define HT_OP_INFO2_HT_PROTECTION BITS(0,1) -#define HT_OP_INFO2_NON_GF_HT_STA_PRESENT BIT(2) -#define HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT BIT(4) - -#define HT_OP_INFO3_DUAL_BEACON BIT(6) -#define HT_OP_INFO3_DUAL_CTS_PROTECTION BIT(7) -#define HT_OP_INFO3_STBC_BEACON BIT(8) -#define HT_OP_INFO3_LSIG_TXOP_FULL_SUPPORT BIT(9) -#define HT_OP_INFO3_PCO_ACTIVE BIT(10) -#define HT_OP_INFO3_PCO_PHASE BIT(11) - -/* 7.3.2.59 OBSS Scan Parameter element */ -#define ELEM_MAX_LEN_OBSS_SCAN (16 - ELEM_HDR_LEN) - -/* 7.3.2.60 20/40 BSS Coexistence element */ -#define ELEM_MAX_LEN_20_40_BSS_COEXIST (3 - ELEM_HDR_LEN) - -#define BSS_COEXIST_INFO_REQ BIT(0) -#define BSS_COEXIST_40M_INTOLERANT BIT(1) -#define BSS_COEXIST_20M_REQ BIT(2) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ BIT(3) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_GRANT BIT(4) - - -//3 Management frame body components (III): 7.4 Action frame format details. -/* 7.4.1 Spectrum Measurement Action frame details */ -#define ACTION_MEASUREMENT_REQ 0 /* Spectrum measurement request */ -#define ACTION_MEASUREMENT_REPORT 1 /* Spectrum measurement report */ -#define ACTION_TPC_REQ 2 /* TPC request */ -#define ACTION_TPC_REPORT 3 /* TPC report */ -#define ACTION_CHNL_SWITCH 4 /* Channel Switch Announcement */ - -/* 7.4.2 QoS Action frame details */ -#define ACTION_ADDTS_REQ 0 /* ADDTS request */ -#define ACTION_ADDTS_RSP 1 /* ADDTS response */ -#define ACTION_DELTS 2 /* DELTS */ -#define ACTION_SCHEDULE 3 /* Schedule */ - -#define ACTION_ADDTS_REQ_FRAME_LEN (24+3+63) /* WMM TSPEC IE: 63 */ -#define ACTION_ADDTS_RSP_FRAME_LEN (24+4+63) /* WMM Status Code: 1; WMM TSPEC IE: 63*/ - -/* 7.4.3 DLS Action frame details */ -#define ACTION_DLS_REQ 0 /* DLS request */ -#define ACTION_DLS_RSP 1 /* DLS response */ -#define ACTION_DLS_TEARDOWN 2 /* DLS teardown */ - -/* 7.4.4 Block ack Action frame details */ -#define ACTION_ADDBA_REQ 0 /* ADDBA request */ -#define ACTION_ADDBA_RSP 1 /* ADDBA response */ -#define ACTION_DELBA 2 /* DELBA */ - -#define ACTION_ADDBA_REQ_FRAME_LEN (24+9) -#define ACTION_ADDBA_RSP_FRAME_LEN (24+9) - -#define ACTION_DELBA_INITIATOR_MASK BIT(11) -#define ACTION_DELBA_TID_MASK BITS(12,15) -#define ACTION_DELBA_TID_OFFSET 12 -#define ACTION_DELBA_FRAME_LEN (24+6) - -/* 7.4.6 Radio Measurement Action frame details */ -#define ACTION_RM_REQ 0 /* Radio measurement request */ -#define ACTION_RM_REPORT 1 /* Radio measurement report */ -#define ACTION_LM_REQ 2 /* Link measurement request */ -#define ACTION_LM_REPORT 3 /* Link measurement report */ -#define ACTION_NEIGHBOR_REPORT_REQ 4 /* Neighbor report request */ -#define ACTION_NEIGHBOR_REPORT_RSP 5 /* Neighbor report response */ - -/* 7.4.7 Public Action frame details */ -#define ACTION_PUBLIC_20_40_COEXIST 0 /* 20/40 BSS coexistence */ - -#if CFG_SUPPORT_802_11W -/* SA Query Action frame (IEEE 802.11w/D8.0, 7.4.9) */ -#define ACTION_SA_QUERY_REQUEST 0 -#define ACTION_SA_QUERY_RESPONSE 1 - -#define ACTION_SA_QUERY_TR_ID_LEN 2 - -/* Timeout Interval Type */ -#define ACTION_SA_TIMEOUT_REASSOC_DEADLINE 1 -#define ACTION_SA_TIMEOUT_KEY_LIFETIME 2 -#define ACTION_SA_TIMEOUT_ASSOC_COMEBACK 3 -#endif - -/* 7.4.10.1 HT action frame details */ -#define ACTION_HT_NOTIFY_CHANNEL_WIDTH 0 /* Notify Channel Width */ -#define ACTION_HT_SM_POWER_SAVE 1 /* SM Power Save */ -#define ACTION_HT_PSMP 2 /* PSMP */ -#define ACTION_HT_SET_PCO_PHASE 3 /* Set PCO Phase */ -#define ACTION_HT_CSI 4 /* CSI */ -#define ACTION_HT_NON_COMPRESSED_BEAMFORM 5 /* Non-compressed Beamforming */ -#define ACTION_HT_COMPRESSED_BEAMFORM 6 /* Compressed Beamforming */ -#define ACTION_HT_ANT_SEL_INDICES_FB 7 /* Antenna Selection Indices Feedback */ - -/* 802.11v Wireless Network Management */ -#define ACTION_WNM_TIMING_MEASUREMENT_REQUEST 27 - -#define ACTION_UNPROTECTED_WNM_TIM 0 -#define ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT 1 - -#define ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN 12 - -//3 /* --------------- WFA frame body fields --------------- */ -#define VENDOR_OUI_WFA { 0x00, 0x50, 0xF2 } -#define VENDOR_OUI_WFA_SPECIFIC { 0x50, 0x6F, 0x9A } -#define VENDOR_OUI_TYPE_WPA 1 -#define VENDOR_OUI_TYPE_WMM 2 -#define VENDOR_OUI_TYPE_WPS 4 -#define VENDOR_OUI_TYPE_P2P 9 - -#define VENDOR_OUI_TYPE_LEN 4 /* Length of OUI and Type */ - -/* VERSION(2 octets for WPA) / SUBTYPE(1 octet)-VERSION(1 octet) fields for WMM in WFA IE */ -#define VERSION_WPA 0x0001 /* Little Endian Format */ -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_INFO 0x0100 -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_PARAM 0x0101 - -/* SUBTYPE(1 octet) for WMM */ -#define VENDOR_OUI_SUBTYPE_WMM_INFO 0x00 /* WMM Spec version 1.1 */ -#define VENDOR_OUI_SUBTYPE_WMM_PARAM 0x01 -#define VENDOR_OUI_SUBTYPE_WMM_TSPEC 0x02 - -/* VERSION(1 octet) for WMM */ -#define VERSION_WMM 0x01 /* WMM Spec version 1.1 */ - -/* WMM-2.1.6 QoS Control Field */ -#define WMM_QC_UP_MASK BITS(0,2) -#define WMM_QC_EOSP BIT(4) -#define WMM_QC_ACK_POLICY_MASK BITS(5, 6) -#define WMM_QC_ACK_POLICY_OFFSET 5 -#define WMM_QC_ACK_POLICY_ACKNOWLEDGE 0 -#define WMM_QC_ACK_POLICY_NOT_ACKNOWLEDGE (1 << WMM_QC_ACK_POLICY_OFFSET) - - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE 6 - - -//3 Control frame body -/* 7.2.1.7 BlockAckReq */ -#define CTRL_BAR_BAR_CONTROL_OFFSET 16 -#define CTRL_BAR_BAR_INFORMATION_OFFSET 18 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -typedef struct _LLC_SNAP_HEADER_T { - UINT_8 ucDSAP; - UINT_8 ucSSAP; - UINT_8 ucControl; - UINT_8 aucCode[3]; - UINT_16 u2Type; -} __KAL_ATTRIB_PACKED__ LLC_SNAP_HEADER_T, *P_LLC_SNAP_HEADER_T; - -//3 MAC Header. -/* Ethernet Frame Header */ -typedef struct _ETH_FRAME_HEADER_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_HEADER_T, *P_ETH_FRAME_HEADER_T; - -/* Ethernet Frame Structure */ -typedef struct _ETH_FRAME_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; - UINT_8 aucData[1]; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_T, *P_ETH_FRAME_T; - - -/* IEEE 802.11 WLAN Frame Structure */ -/* WLAN MAC Header (without Address 4 and QoS Control fields) */ -typedef struct _WLAN_MAC_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_T, *P_WLAN_MAC_HEADER_T; - - -/* WLAN MAC Header (QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_QOS_T, *P_WLAN_MAC_HEADER_QOS_T; - - -/* WLAN MAC Header (HT Control fields included) */ -typedef struct _WLAN_MAC_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_HT_T, *P_WLAN_MAC_HEADER_HT_T; - - -/* WLAN MAC Header (Address 4 included) */ -typedef struct _WLAN_MAC_HEADER_A4_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_T, *P_WLAN_MAC_HEADER_A4_T; - - -/* WLAN MAC Header (Address 4 and QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_A4_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_QOS_T, *P_WLAN_MAC_HEADER_A4_QOS_T; - - -typedef struct _WLAN_MAC_HEADER_A4_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_HT_T, *P_WLAN_MAC_HEADER_A4_HT_T; - - -/* 7.2.3 WLAN MAC Header for Management Frame - MMPDU */ -typedef struct _WLAN_MAC_MGMT_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2Duration; - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_T, *P_WLAN_MAC_MGMT_HEADER_T; - - -/* WLAN MAC Header for Management Frame (HT Control fields included) */ -typedef struct _WLAN_MAC_MGMT_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_HT_T, *P_WLAN_MAC_MGMT_HEADER_HT_T; - -//3 WLAN CONTROL Frame -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -typedef struct _CTRL_PSPOLL_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2AID; /* AID */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_8 aucTA[MAC_ADDR_LEN]; /* TA */ -} __KAL_ATTRIB_PACKED__ CTRL_PSPOLL_FRAME_T, *P_CTRL_PSPOLL_FRAME_T; - - -/* BAR */ -typedef struct _CTRL_BAR_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* RA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* TA */ - UINT_16 u2BarControl; - UINT_8 aucBarInfo[2]; /* Variable size */ -} __KAL_ATTRIB_PACKED__ CTRL_BAR_FRAME_T, *P_CTRL_BAR_FRAME_T; - -//3 WLAN Management Frame. -/* 7.2.3.1 WLAN Management Frame - Beacon Frame */ -typedef struct _WLAN_BEACON_FRAME_T { - /* Beacon header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_T, *P_WLAN_BEACON_FRAME_T; - -typedef struct _WLAN_BEACON_FRAME_BODY_T { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_BODY_T, *P_WLAN_BEACON_FRAME_BODY_T; - - -/* 7.2.3.3 WLAN Management Frame - Disassociation Frame */ -typedef struct _WLAN_DISASSOC_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Disassociation frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DISASSOC_FRAME_T, *P_WLAN_DISASSOC_FRAME_T; - - -/* 7.2.3.4 WLAN Management Frame - Association Request frame */ -typedef struct _WLAN_ASSOC_REQ_FRAME_T { - /* Association Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_REQ_FRAME_T, *P_WLAN_ASSOC_REQ_FRAME_T; - - -/* 7.2.3.5 WLAN Management Frame - Association Response frame */ -typedef struct _WLAN_ASSOC_RSP_FRAME_T { - /* Association Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Response frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2StatusCode; /* Status code */ - UINT_16 u2AssocId; /* Association ID */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - supported rates, and etc. */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_RSP_FRAME_T, *P_WLAN_ASSOC_RSP_FRAME_T; - - -/* 7.2.3.6 WLAN Management Frame - Reassociation Request frame */ -typedef struct _WLAN_REASSOC_REQ_FRAME_T { - /* Reassociation Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Reassociation Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucCurrentAPAddr[MAC_ADDR_LEN]; /* Current AP address */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_REASSOC_REQ_FRAME_T, *P_WLAN_REASSOC_REQ_FRAME_T; - - -/* 7.2.3.7 WLAN Management Frame - Reassociation Response frame - (the same as Association Response frame) */ -typedef WLAN_ASSOC_RSP_FRAME_T WLAN_REASSOC_RSP_FRAME_T, *P_WLAN_REASSOC_RSP_FRAME_T; - -/* 7.2.3.9 WLAN Management Frame - Probe Response Frame */ -typedef WLAN_BEACON_FRAME_T WLAN_PROBE_RSP_FRAME_T, *P_WLAN_PROBE_RSP_FRAME_T; - -/* 7.2.3.10 WLAN Management Frame - Authentication Frame */ -typedef struct _WLAN_AUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Authentication frame body */ - UINT_16 u2AuthAlgNum; /* Authentication algorithm number */ - UINT_16 u2AuthTransSeqNo; /* Authentication transaction sequence number */ - UINT_16 u2StatusCode; /* Status code */ - UINT_8 aucInfoElem[1]; /* Various IEs for Fast BSS Transition */ -} __KAL_ATTRIB_PACKED__ WLAN_AUTH_FRAME_T, *P_WLAN_AUTH_FRAME_T; - - -/* 7.2.3.11 WLAN Management Frame - Deauthentication Frame */ -typedef struct _WLAN_DEAUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Deauthentication frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DEAUTH_FRAME_T, *P_WLAN_DEAUTH_FRAME_T; - - - -//3 Information Elements. -/* 7.3.2 Generic element format */ -typedef struct _IE_HDR_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucInfo[1]; -} __KAL_ATTRIB_PACKED__ IE_HDR_T, *P_IE_HDR_T; - -/* 7.3.2.1 SSID element */ -typedef struct _IE_SSID_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; -} __KAL_ATTRIB_PACKED__ IE_SSID_T, *P_IE_SSID_T; - -/* 7.3.2.2 Supported Rates element */ -typedef struct _IE_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSupportedRates[ELEM_MAX_LEN_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_SUPPORTED_RATE_T, *P_IE_SUPPORTED_RATE_T; - -/* 7.3.2.4 DS Parameter Set element */ -typedef struct _IE_DS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCurrChnl; -} __KAL_ATTRIB_PACKED__ IE_DS_PARAM_SET_T, *P_IE_DS_PARAM_SET_T; - - -/* 7.3.2.5 CF Parameter Set element */ -typedef struct _IE_CF_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCFPCount; - UINT_8 ucCFPPeriod; - UINT_16 u2CFPMaxDur; - UINT_16 u2DurRemaining; -} __KAL_ATTRIB_PACKED__ IE_CF_PARAM_SET_T, *P_IE_CF_PARAM_SET_T; - - -/* 7.3.2.6 TIM */ -typedef struct _IE_TIM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucDTIMCount; - UINT_8 ucDTIMPeriod; - UINT_8 ucBitmapControl; - UINT_8 aucPartialVirtualMap[1]; -} __KAL_ATTRIB_PACKED__ IE_TIM_T, *P_IE_TIM_T; - -/* 7.3.2.7 IBSS Parameter Set element */ -typedef struct _IE_IBSS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ATIMWindow; -} __KAL_ATTRIB_PACKED__ IE_IBSS_PARAM_SET_T, *P_IE_IBSS_PARAM_SET_T; - -/* 7.3.2.8 Challenge Text element */ -typedef struct _IE_CHALLENGE_TEXT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucChallengeText[ELEM_MAX_LEN_CHALLENGE_TEXT]; -} __KAL_ATTRIB_PACKED__ IE_CHALLENGE_TEXT_T, *P_IE_CHALLENGE_TEXT_T; - -/* 7.3.2.9 Country information element */ -#if CFG_SUPPORT_802_11D -/*! \brief COUNTRY_INFO_TRIPLET is defined for the COUNTRY_INFO_ELEM structure. */ -typedef struct _COUNTRY_INFO_TRIPLET_T { - UINT_8 ucParam1; /*!< If param1 >= 201, this triplet is referred to as - Regulatory Triplet in 802_11J. */ - UINT_8 ucParam2; - UINT_8 ucParam3; -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_TRIPLET_T, *P_COUNTRY_INFO_TRIPLET_T; - -typedef struct _COUNTRY_INFO_SUBBAND_TRIPLET_T { - UINT_8 ucFirstChnlNum; /*!< First Channel Number */ - UINT_8 ucNumOfChnl; /*!< Number of Channels */ - INT_8 cMaxTxPwrLv; /*!< Maximum Transmit Power Level */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_SUBBAND_TRIPLET_T, *P_COUNTRY_INFO_SUBBAND_TRIPLET_T; - -typedef struct _COUNTRY_INFO_REGULATORY_TRIPLET_T { - UINT_8 ucRegExtId; /*!< Regulatory Extension Identifier, should - be greater than or equal to 201 */ - UINT_8 ucRegClass; /*!< Regulatory Class */ - UINT_8 ucCoverageClass; /*!< Coverage Class, unsigned 1-octet value 0~31 - , 32~255 reserved */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_REGULATORY_TRIPLET_T, *P_COUNTRY_INFO_REGULATORY_TRIPLET_T; - -typedef struct _IE_COUNTRY_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCountryStr[3]; - COUNTRY_INFO_SUBBAND_TRIPLET_T arCountryStr[1]; -} __KAL_ATTRIB_PACKED__ IE_COUNTRY_T, *P_IE_COUNTRY_T; -#endif /* CFG_SUPPORT_802_11D */ - -/* 7.3.2.13 ERP element */ -typedef struct _IE_ERP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucERP; -} __KAL_ATTRIB_PACKED__ IE_ERP_T, *P_IE_ERP_T; - -/* 7.3.2.14 Extended Supported Rates element */ -typedef struct _IE_EXT_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucExtSupportedRates[ELEM_MAX_LEN_EXTENDED_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_EXT_SUPPORTED_RATE_T, *P_IE_EXT_SUPPORTED_RATE_T; - -/* 7.3.2.15 Power Constraint element */ -typedef struct _IE_POWER_CONSTRAINT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucLocalPowerConstraint; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CONSTRAINT_T, *P_IE_POWER_CONSTRAINT_T; - -/* 7.3.2.16 Power Capability element */ -typedef struct _IE_POWER_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cMinTxPowerCap; /* Unit: dBm */ - INT_8 cMaxTxPowerCap; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CAP_T, *P_IE_POWER_CAP_T; - -/* 7.3.2.17 TPC request element */ -typedef struct _IE_TPC_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; -} __KAL_ATTRIB_PACKED__ IE_TPC_REQ_T, *P_IE_TPC_REQ_T; - -/* 7.3.2.18 TPC report element */ -typedef struct _IE_TPC_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cTxPower; /* Unit: dBm */ - INT_8 cLinkMargin; /* Unit: dB */ -} __KAL_ATTRIB_PACKED__ IE_TPC_REPORT_T, *P_IE_TPC_REPORT_T; - -/* 7.3.2.20 Channel Switch Announcement element */ -typedef struct _IE_CHNL_SWITCH_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucSwitchMode; - UINT_8 ucNewChannel; - UINT_8 ucSwitchCount; -} __KAL_ATTRIB_PACKED__ IE_CHNL_SWITCH_T, *P_IE_CHNL_SWITCH_T; - -/* 7.3.2.21 Measurement Request element */ -typedef struct _IE_MEASUREMENT_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucRequestMode; - UINT_8 ucMeasurementType; - UINT_8 aucRequestFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REQ_T, *P_IE_MEASUREMENT_REQ_T; - -typedef struct _SM_BASIC_REQ_T { - UINT_8 ucChannel; - UINT_32 au4StartTime[2]; - UINT_16 u2Duration; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REQ_T, *P_SM_BASIC_REQ_T; - -/* SM_COMMON_REQ_T is not specified in Spec. Use it as common structure of SM */ -typedef SM_BASIC_REQ_T SM_REQ_COMMON_T, *P_SM_REQ_COMMON_T; -typedef SM_BASIC_REQ_T SM_CCA_REQ_T, *P_SM_CCA_REQ_T; -typedef SM_BASIC_REQ_T SM_RPI_HISTOGRAM_REQ_T, *P_SM_RPI_HISTOGRAM_REQ_T; - -typedef struct _RM_CHNL_LOAD_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REQ_T, *P_RM_CHNL_LOAD_REQ_T; - -typedef RM_CHNL_LOAD_REQ_T \ - RM_NOISE_HISTOGRAM_REQ_T, *P_RM_NOISE_HISTOGRAM_REQ_T; - -typedef struct _RM_BCN_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucMeasurementMode; - UINT_8 aucBssid[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_BCN_REQ_T, *P_RM_BCN_REQ_T; - -typedef struct _RM_FRAME_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucFrameReqType; - UINT_8 aucMacAddr[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_FRAME_REQ_T, *P_RM_FRAME_REQ_T; - -typedef struct _RM_STA_STATS_REQ_T { - UINT_8 aucPeerMacAddr[6]; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucGroupID; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_STA_STATS_REQ_T, *P_RM_STA_STATS_REQ_T; - -typedef struct _RM_LCI_REQ_T { - UINT_8 ucLocationSubject; - UINT_8 ucLatitudeResolution; - UINT_8 ucLongitudeResolution; - UINT_8 ucAltitudeResolution; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_LCI_REQ_T, *P_RM_LCI_REQ_T; - -typedef struct _RM_TS_MEASURE_REQ_T { - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucPeerStaAddr[6]; - UINT_8 ucTrafficID; - UINT_8 ucBin0Range; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_TS_MEASURE_REQ_T, *P_RM_TS_MEASURE_REQ_T; - -typedef struct _RM_MEASURE_PAUSE_REQ_T { - UINT_16 u2PauseTime; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_MEASURE_PAUSE_REQ_T, *P_RM_MEASURE_PAUSE_REQ_T; - -/* 7.3.2.22 Measurement Report element */ -typedef struct _IE_MEASUREMENT_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucReportMode; - UINT_8 ucMeasurementType; - UINT_8 aucReportFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REPORT_T, *P_IE_MEASUREMENT_REPORT_T; - -typedef struct _SM_BASIC_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucMap; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REPORT_T, *P_SM_BASIC_REPORT_T; - -typedef struct _SM_CCA_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucCcaBusyFraction; -} __KAL_ATTRIB_PACKED__ SM_CCA_REPORT_T, *P_SM_CCA_REPORT_T; - -typedef struct _SM_RPI_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 aucRPI[8]; -} __KAL_ATTRIB_PACKED__ SM_RPI_REPORT_T, *P_SM_RPI_REPORT_T; - -typedef struct _RM_CHNL_LOAD_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucChnlLoad; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REPORT_T, *P_RM_CHNL_LOAD_REPORT_T; - -typedef struct _RM_IPI_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucAntennaId; - INT_8 cANPI; - UINT_8 aucIPI[11]; -} __KAL_ATTRIB_PACKED__ RM_IPI_REPORT_T, *P_RM_IPI_REPORT_T; - -/* 7.3.2.23 Quiet element */ -typedef struct _IE_QUIET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCount; - UINT_8 ucPeriod; - UINT_16 u2Duration; - UINT_16 u2Offset; -} __KAL_ATTRIB_PACKED__ IE_QUIET_T, *P_IE_QUIET_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_EXT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCapabilities[1]; -} __KAL_ATTRIB_PACKED__ IE_EXT_CAP_T, *P_EXT_CAP_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_RRM_ENABLED_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCap[5]; -} __KAL_ATTRIB_PACKED__ IE_RRM_ENABLED_CAP_T, *P_IE_RRM_ENABLED_CAP_T; - -/* 7.3.2.56 HT Capabilities element */ -typedef struct _SUP_MCS_SET_FIELD { - UINT_8 aucRxMcsBitmask[SUP_MCS_RX_BITMASK_OCTET_NUM]; - UINT_16 u2RxHighestSupportedRate; - UINT_32 u4TxRateInfo; -} __KAL_ATTRIB_PACKED__ SUP_MCS_SET_FIELD, *P_SUP_MCS_SET_FIELD; - -typedef struct _IE_HT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2HtCapInfo; - UINT_8 ucAmpduParam; - SUP_MCS_SET_FIELD rSupMcsSet; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; -} __KAL_ATTRIB_PACKED__ IE_HT_CAP_T, *P_IE_HT_CAP_T; - -/* 7.3.2.57 HT Operation element */ -typedef struct _IE_HT_OP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucPrimaryChannel; - UINT_8 ucInfo1; - UINT_16 u2Info2; - UINT_16 u2Info3; - UINT_8 aucBasicMcsSet[16]; -} __KAL_ATTRIB_PACKED__ IE_HT_OP_T, *P_IE_HT_OP_T; - -/* 7.3.2.25 RSN Information element format */ -typedef struct _RSN_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ RSN_INFO_ELEM_T, *P_RSN_INFO_ELEM_T; - -/* 7.3.2.26 WPA Information element format */ -typedef struct _WPA_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UCHAR aucOui[3]; - UCHAR ucOuiType; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ WPA_INFO_ELEM_T, *P_WPA_INFO_ELEM_T; - -/* 7.3.2.58 20/40 BSS Intolerant Channel Report element */ -typedef struct _IE_INTOLERANT_CHNL_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucRegulatoryClass; - UINT_8 aucChannelList[1]; -} __KAL_ATTRIB_PACKED__ IE_INTOLERANT_CHNL_REPORT_T, *P_IE_INTOLERANT_CHNL_REPORT_T; - -/* 7.3.2.59 OBSS Scan Parameters element */ -typedef struct _IE_OBSS_SCAN_PARAM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ScanPassiveDwell; - UINT_16 u2ScanActiveDwell; - UINT_16 u2TriggerScanInterval; - UINT_16 u2ScanPassiveTotalPerChnl; - UINT_16 u2ScanActiveTotalPerChnl; - UINT_16 u2WidthTransDelayFactor; - UINT_16 u2ScanActivityThres; -} __KAL_ATTRIB_PACKED__ IE_OBSS_SCAN_PARAM_T, *P_IE_OBSS_SCAN_PARAM_T; - -/* 7.3.2.60 20/40 BSS Coexistence element */ -typedef struct _IE_20_40_COEXIST_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucData; -} __KAL_ATTRIB_PACKED__ IE_20_40_COEXIST_T, *P_IE_20_40_COEXIST_T; - - -//3 7.4 Action Frame. -/* 7.4 Action frame format */ -typedef struct _WLAN_ACTION_FRAME { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucActionDetails[1]; /* Action details */ -} __KAL_ATTRIB_PACKED__ WLAN_ACTION_FRAME, *P_WLAN_ACTION_FRAME; - -/* 7.4.1.1 Spectrum Measurement Request frame format */ -typedef struct _ACTION_SM_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements */ -} __KAL_ATTRIB_PACKED__ ACTION_SM_REQ_FRAME, *P_ACTION_SM_REQ_FRAME; - -/* 7.4.1.2 Spectrum Measurement Report frame format */ -typedef ACTION_SM_REQ_FRAME ACTION_SM_REPORT_FRAME, *P_ACTION_SM_REPORT_FRAME; - -/* 7.4.2.1 ADDTS Request frame format */ -typedef struct _ACTION_ADDTS_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_REQ_FRAME, *P_ACTION_ADDTS_REQ_FRAME; - - -/* 7.4.2.2 ADDTS Response frame format */ -typedef struct _ACTION_ADDTS_RSP_FRAME { - /* ADDTS Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Response frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucStatusCode; /* WMM Status Code is of one byte */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_RSP_FRAME, *P_ACTION_ADDTS_RSP_FRAME; - - -/* 7.4.2.3 DELTS frame format */ -typedef struct _ACTION_DELTS_FRAME { - /* DELTS MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* DELTS frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 aucTsInfo[3]; /* TS Info */ -} __KAL_ATTRIB_PACKED__ ACTION_DELTS_FRAME, *P_ACTION_DELTS_FRAME; - - -/* 7.4.4.1 ADDBA Request frame format */ -typedef struct _ACTION_ADDBA_REQ_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; - UINT_8 aucBAStartSeqCtrl[2]; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_FRAME_T, *P_ACTION_ADDBA_REQ_FRAME_T; - -typedef struct _ACTION_ADDBA_REQ_BODY_T{ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_BODY_T, *P_ACTION_ADDBA_REQ_BODY_T; - -/* 7.4.4.2 ADDBA Response frame format */ -typedef struct _ACTION_ADDBA_RSP_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucStatusCode[2]; - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_FRAME_T, *P_ACTION_ADDBA_RSP_FRAME_T; - -typedef struct _ACTION_ADDBA_RSP_BODY_T { - UINT_16 u2StatusCode; - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_BODY_T, *P_ACTION_ADDBA_RSP_BODY_T; - -/* 7.4.4.3 DELBA frame format */ -typedef struct _ACTION_DELBA_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_16 u2DelBaParameterSet; /* Bit 11 Initiator, Bits 12-15 TID */ - UINT_16 u2ReasonCode; /* 7.3.1.7 */ -} __KAL_ATTRIB_PACKED__ ACTION_DELBA_FRAME_T, *P_ACTION_DELBA_FRAME_T; - -/* 7.4.6.1 Radio Measurement Request frame format */ -typedef struct _ACTION_RM_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_16 u2Repetitions; /* Number of repetitions */ - UINT_8 aucInfoElem[1]; /* Measurement Request elements, such as - channel load request, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REQ_FRAME, *P_ACTION_RM_REQ_FRAME; - -/* 7.4.6.2 Radio Measurement Report frame format */ -typedef struct _ACTION_RM_REPORT_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Report frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Measurement Report elements, such as - channel load report, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REPORT_FRAME, *P_ACTION_RM_REPORT_FRAME; - -/* 7.4.7.1a 20/40 BSS Coexistence Management frame format */ -typedef struct _ACTION_20_40_COEXIST_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - IE_20_40_COEXIST_T rBssCoexist;/* 20/40 BSS coexistence element */ - IE_INTOLERANT_CHNL_REPORT_T rChnlReport;/* Intolerant channel report */ - -} __KAL_ATTRIB_PACKED__ ACTION_20_40_COEXIST_FRAME, *P_ACTION_20_40_COEXIST_FRAME; - - -#if CFG_SUPPORT_802_11W -/* 7.4.9 SA Query Management frame format */ -typedef struct _ACTION_SA_QUERY_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; /* Transaction id */ - -} __KAL_ATTRIB_PACKED__ ACTION_SA_QUERY_FRAME, *P_ACTION_SA_QUERY_FRAME; -#endif - -/* 7.4.10 Notify Channel Width Management frame format */ -typedef struct _ACTION_NOTIFY_CHNL_WIDTH_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucChannelWidth; /* Channel Width */ -} __KAL_ATTRIB_PACKED__ ACTION_NOTIFY_CHNL_WIDTH_FRAME, *P_ACTION_NOTIFY_CHNL_WIDTH_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement Request */ -typedef struct _ACTION_WNM_TIMING_MEAS_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Request Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucTrigger; /* Trigger */ -} __KAL_ATTRIB_PACKED__ ACTION_WNM_TIMING_MEAS_REQ_FRAME, *P_ACTION_WNM_TIMING_MEAS_REQ_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement */ -typedef struct _ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ - UINT_8 ucMaxToDErr; /* Maximum of ToD Error [10ns] */ - UINT_8 ucMaxToAErr; /* Maximum of ToA Error [10ns] */ -} __KAL_ATTRIB_PACKED__ ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME, *P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME; - -//3 Information Elements from WFA. -typedef struct _IE_WFA_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucOui[3]; - UINT_8 ucOuiType; - UINT_8 aucOuiSubTypeVersion[2]; - /*!< Please be noted. WPA defines a 16 bit field version - instead of one subtype field and one version field*/ -} __KAL_ATTRIB_PACKED__ IE_WFA_T, *P_IE_WFA_T; - -/* WAPI Information element format */ -typedef struct _WAPI_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_16 u2AuthKeyMgtSuiteCount; - UCHAR aucAuthKeyMgtSuite1[4]; -} __KAL_ATTRIB_PACKED__ WAPI_INFO_ELEM_T, *P_WAPI_INFO_ELEM_T; - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Convert the ECWmin(max) to CWmin(max) */ -#define ECW_TO_CW(_ECW) ((1 << (_ECW)) - 1) - -/* Convert the RCPI to dBm */ -#define RCPI_TO_dBm(_rcpi) \ - ((PARAM_RSSI)(((_rcpi) > RCPI_HIGH_BOUND ? RCPI_HIGH_BOUND : (_rcpi)) >> 1) - NDBM_LOW_BOUND_FOR_RCPI) - -/* Convert the dBm to RCPI */ -#define dBm_TO_RCPI(_dbm) \ - (RCPI)( ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) > RCPI_HIGH_BOUND) ? RCPI_HIGH_BOUND : \ - ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) < RCPI_LOW_BOUND ? RCPI_LOW_BOUND : \ - (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) ) ) - -/* Convert an unsigned char pointer to an information element pointer */ -#define IE_ID(fp) (((P_IE_HDR_T) fp)->ucId) -#define IE_LEN(fp) (((P_IE_HDR_T) fp)->ucLength) -#define IE_SIZE(fp) (ELEM_HDR_LEN + IE_LEN(fp)) - -#define SSID_IE(fp) ((P_IE_SSID_T) fp) - -#define SUP_RATES_IE(fp) ((P_IE_SUPPORTED_RATE_T) fp) - -#define DS_PARAM_IE(fp) ((P_IE_DS_PARAM_SET_T) fp) - -#define TIM_IE(fp) ((P_IE_TIM_T) fp) - -#define IBSS_PARAM_IE(fp) ((P_IE_IBSS_PARAM_SET_T) fp) - -#define ERP_INFO_IE(fp) ((P_IE_ERP_T) fp) - -#define EXT_SUP_RATES_IE(fp) ((P_IE_EXT_SUPPORTED_RATE_T) fp) - -#define WFA_IE(fp) ((P_IE_WFA_T) fp) - -#if CFG_SUPPORT_802_11D -#define COUNTRY_IE(fp) ((P_IE_COUNTRY_T) fp) -#endif - -#define EXT_CAP_IE(fp) ((P_EXT_CAP_T) fp) - -#define HT_CAP_IE(fp) ((P_IE_HT_CAP_T) fp) - -#define HT_OP_IE(fp) ((P_IE_HT_OP_T) fp) - -#define OBSS_SCAN_PARAM_IE(fp) ((P_IE_OBSS_SCAN_PARAM_T) fp) - -#define BSS_20_40_COEXIST_IE(fp) ((P_IE_20_40_COEXIST_T) fp) - -#define QUIET_IE(fp) ((P_IE_QUIET_T) fp) - - - -/* The macro to check if the MAC address is B/MCAST Address */ -#define IS_BMCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) ( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to check if the MAC address is UCAST Address */ -#define IS_UCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) !( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to copy the MAC address */ -#define COPY_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - kalMemCopy(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN) - -/* The macro to check if two MAC addresses are equal */ -#define EQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (!kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - -/* The macro to check if two MAC addresses are not equal */ -#define UNEQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - - -/* The macro to check whether two SSIDs are equal */ -#define EQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 <= ELEM_MAX_LEN_SSID) && \ - (ucSsidLen2 <= ELEM_MAX_LEN_SSID) && \ - ((ucSsidLen1) == (ucSsidLen2)) && \ - !kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to check whether two SSIDs are equal */ -#define UNEQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 > ELEM_MAX_LEN_SSID) || \ - (ucSsidLen2 > ELEM_MAX_LEN_SSID) || \ - ((ucSsidLen1) != (ucSsidLen2)) || \ - kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to copy the SSID, the length of pucDestSsid should have at least 32 bytes */ -#define COPY_SSID(pucDestSsid, ucDestSsidLen, pucSrcSsid, ucSrcSsidLen) \ - do { \ - ucDestSsidLen = ucSrcSsidLen; \ - if (ucSrcSsidLen) { \ - ASSERT(ucSrcSsidLen <= ELEM_MAX_LEN_SSID); \ - kalMemCopy(pucDestSsid, pucSrcSsid, ((ucSrcSsidLen > ELEM_MAX_LEN_SSID) ? ELEM_MAX_LEN_SSID : ucSrcSsidLen)); \ - } \ - } while (FALSE) - -/* The macro to copy the IE */ -#define COPY_IE(pucDestIE, pucSrcIE) \ - do { \ - kalMemCopy((PUINT_8)pucDestIE, \ - (PUINT_8)pucSrcIE,\ - IE_SIZE(pucSrcIE)); \ - } while (FALSE) - -#define IE_FOR_EACH(_pucIEsBuf, _u2IEsBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((((_u2Offset) + 2) <= (_u2IEsBufLen)) && (((_u2Offset) + IE_SIZE(_pucIEsBuf)) <= (_u2IEsBufLen))) ; \ - (_u2Offset) += IE_SIZE(_pucIEsBuf), (_pucIEsBuf) += IE_SIZE(_pucIEsBuf)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MAC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mt5931_reg.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mt5931_reg.h deleted file mode 100755 index 6cec38d71542..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mt5931_reg.h +++ /dev/null @@ -1,336 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/include/nic/mt5931_reg.h#3 $ -*/ - -/*! \file "mt5931_reg.h" - \brief The common register definition of mt5931 - - N/A -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mt5931_reg.h $ - * - * 02 25 2011 cp.wu - * [WCXRP00000496] [MT5931][Driver] Apply host-triggered chip reset before initializing firmware download procedures - * apply host-triggered chip reset mechanism before initializing firmware download procedures. - * - * 02 18 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Add WHISR_D2H_SW_ASSERT_INFO_INT to MT5931_reg. - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * -*/ - -#ifndef _MT5931_REG_H -#define _MT5931_REG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -//1 MT5931 MCR Definition - -//2 Host Interface - -//4 CHIP ID Register -#define MCR_WCIR 0x0000 - -//4 HIF Low Power Control Register -#define MCR_WHLPCR 0x0004 - -//4 Control Status Register -#define MCR_WSDIOCSR 0x0008 -#define MCR_WSPICSR 0x0008 - -//4 HIF Control Register -#define MCR_WHCR 0x000C - -//4 HIF Interrupt Status Register -#define MCR_WHISR 0x0010 - -//4 HIF Interrupt Enable Register -#define MCR_WHIER 0x0014 - -//4 Abnormal Status Register -#define MCR_WASR 0x0018 - -//4 WLAN Software Interrupt Control Register -#define MCR_WSICR 0x001C - -//4 WLAN TX Status Register -#define MCR_WTSR0 0x0020 - -//4 WLAN TX Status Register -#define MCR_WTSR1 0x0024 - -//4 WLAN TX Data Register 0 -#define MCR_WTDR0 0x0028 - -//4 WLAN TX Data Register 1 -#define MCR_WTDR1 0x002C - -//4 WLAN RX Data Register 0 -#define MCR_WRDR0 0x0030 - -//4 WLAN RX Data Register 1 -#define MCR_WRDR1 0x0034 - -//4 Host to Device Send Mailbox 0 Register -#define MCR_H2DSM0R 0x0038 - -//4 Host to Device Send Mailbox 1 Register -#define MCR_H2DSM1R 0x003c - -//4 Device to Host Receive Mailbox 0 Register -#define MCR_D2HRM0R 0x0040 - -//4 Device to Host Receive Mailbox 1 Register -#define MCR_D2HRM1R 0x0044 - -//4 Device to Host Receive Mailbox 2 Register -#define MCR_D2HRM2R 0x0048 - -//4 WLAN RX Packet Length Register -#define MCR_WRPLR 0x0050 - -//4 EHPI Transaction Count Register -#define MCR_EHTCR 0x0054 - -//4 Firmware Download Data Register -#define MCR_FWDLDR 0x0080 - -//4 Firmware Download Destination Starting Address Register -#define MCR_FWDLDSAR 0x0084 - -//4 Firmware Download Status Register -#define MCR_FWDLSR 0x0088 - -//4 WLAN MCU Control & Status Register -#define MCR_WMCSR 0x008c - -//4 WLAN Firmware Download Configuration -#define MCR_FWCFG 0x0090 - - -//#if CFG_SDIO_INTR_ENHANCE -typedef struct _ENHANCE_MODE_DATA_STRUCT_T { - UINT_32 u4WHISR; - union { - struct { - UINT_8 ucTQ0Cnt; - UINT_8 ucTQ1Cnt; - UINT_8 ucTQ2Cnt; - UINT_8 ucTQ3Cnt; - UINT_8 ucTQ4Cnt; - UINT_8 ucTQ5Cnt; - UINT_16 u2Rsrv; - } u; - UINT_32 au4WTSR[2]; - } rTxInfo; - union { - struct { - UINT_16 u2NumValidRx0Len; - UINT_16 u2NumValidRx1Len; - UINT_16 au2Rx0Len[16]; - UINT_16 au2Rx1Len[16]; - } u; - UINT_32 au4RxStatusRaw[17]; - } rRxInfo; - UINT_32 u4RcvMailbox0; - UINT_32 u4RcvMailbox1; -} ENHANCE_MODE_DATA_STRUCT_T, *P_ENHANCE_MODE_DATA_STRUCT_T; -// #endif /* ENHANCE_MODE_DATA_STRUCT_T */ - - -//2 Definition in each register -//3 WCIR 0x0000 -#define WCIR_WLAN_READY BIT(21) -#define WCIR_POR_INDICATOR BIT(20) -#define WCIR_REVISION_ID BITS(16,19) -#define WCIR_CHIP_ID BITS(0,15) - -#define MTK_CHIP_REV 0x00005931 -#define MTK_CHIP_MP_REVERSION_ID 0x0 - -//3 WHLPCR 0x0004 -#define WHLPCR_FW_OWN_REQ_CLR BIT(9) -#define WHLPCR_FW_OWN_REQ_SET BIT(8) -#define WHLPCR_IS_DRIVER_OWN BIT(8) -#define WHLPCR_INT_EN_CLR BIT(1) -#define WHLPCR_INT_EN_SET BIT(0) - -//3 WSDIOCSR 0x0008 -#define WSDIOCSR_SDIO_RE_INIT_EN BIT(0) - -//3 WSPICSR 0x0008 -#define WCSR_SPI_MODE_SEL BITS(3,4) -#define WCSR_SPI_ENDIAN_BIG BIT(2) -#define WCSR_SPI_INT_OUT_MODE BIT(1) -#define WCSR_SPI_DATA_OUT_MODE BIT(0) - -//3 WHCR 0x000C -#define WHCR_RX_ENHANCE_MODE_EN BIT(16) -#define WHCR_MAX_HIF_RX_LEN_NUM BITS(4,7) -#define WHCR_W_MAILBOX_RD_CLR_EN BIT(2) -#define WHCR_W_INT_CLR_CTRL BIT(1) -#define WHCR_MCU_DBG_EN BIT(0) -#define WHCR_OFFSET_MAX_HIF_RX_LEN_NUM 4 - -//3 WHISR 0x0010 -#define WHISR_D2H_SW_INT BITS(8,31) -#define WHISR_D2H_SW_ASSERT_INFO_INT BIT(31) -#define WHISR_FW_OWN_BACK_INT BIT(4) -#define WHISR_ABNORMAL_INT BIT(3) -#define WHISR_RX1_DONE_INT BIT(2) -#define WHISR_RX0_DONE_INT BIT(1) -#define WHISR_TX_DONE_INT BIT(0) - - -//3 WHIER 0x0014 -#define WHIER_D2H_SW_INT BITS(8,31) -#define WHIER_FW_OWN_BACK_INT_EN BIT(4) -#define WHIER_ABNORMAL_INT_EN BIT(3) -#define WHIER_RX1_DONE_INT_EN BIT(2) -#define WHIER_RX0_DONE_INT_EN BIT(1) -#define WHIER_TX_DONE_INT_EN BIT(0) -#define WHIER_DEFAULT (WHIER_RX0_DONE_INT_EN | \ - WHIER_RX1_DONE_INT_EN | \ - WHIER_TX_DONE_INT_EN | \ - WHIER_ABNORMAL_INT_EN | \ - WHIER_D2H_SW_INT \ - ) - - -//3 WASR 0x0018 -#define WASR_FW_OWN_INVALID_ACCESS BIT(4) -#define WASR_RX1_UNDER_FLOW BIT(3) -#define WASR_RX0_UNDER_FLOW BIT(2) -#define WASR_TX1_OVER_FLOW BIT(1) -#define WASR_TX0_OVER_FLOW BIT(0) - - -//3 WSICR 0x001C -#define WSICR_H2D_SW_INT_SET BITS(16,31) - - -//3 WRPLR 0x0050 -#define WRPLR_RX1_PACKET_LENGTH BITS(16,31) -#define WRPLR_RX0_PACKET_LENGTH BITS(0,15) - - -//3 FWDLSR 0x0088 -#define FWDLSR_FWDL_RDY BIT(8) -#define FWDLSR_FWDL_MODE BIT(0) - - -//3 WMCSR 0x008c -#define WMCSR_CHIP_RST BIT(15) /* write */ -#define WMCSR_DL_OK BIT(15) /* read */ -#define WMCSR_DL_FAIL BIT(14) -#define WMCSR_PLLRDY BIT(13) -#define WMCSR_WF_ON BIT(12) -#define WMCSR_INI_RDY BIT(11) -#define WMCSR_WF_EN BIT(6) -#define WMCSR_SW_EN BIT(5) -#define WMCSR_SPLLEN BIT(4) -#define WMCSR_SPWREN BIT(3) -#define WMCSR_HSTOPIL BIT(2) -#define WMCSR_FWDLRST BIT(1) -#define WMCSR_FWDLEN BIT(0) - - -//3 FWCFG 0x0090 -#define FWCFG_KSEL BITS(14,15) -#define FWCFG_FLEN BITS(0,13) - - -#endif /* _MT5931_REG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mt6620_reg.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mt6620_reg.h deleted file mode 100755 index 3f2eacd3a1a2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/mt6620_reg.h +++ /dev/null @@ -1,286 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/mt6620_reg.h#1 $ -*/ - -/*! \file "mt6620_reg.h" - \brief The common register definition of mt6620 - - N/A -*/ - - - -/* -** $Log: mt6620_reg.h $ - * - * 01 31 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Print firmware ASSERT info at Android kernel log, driver side - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-12-10 16:44:18 GMT mtk02752 -** remove 5921 definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-09 22:56:32 GMT mtk01084 -** modify HW register definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-04 14:11:04 GMT mtk01084 -** modify default IER bits -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:52:32 GMT mtk01084 -** modify data struture -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:08:20 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:53 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-09-09 17:26:11 GMT mtk01084 -** add CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-18 20:59:57 GMT mtk01426 -** Update WHIER_DEFAULT value -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-07 16:57:36 GMT mtk01426 -** Update CHIP ID to 0x6620, and WHLPCR bit definition -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:34:57 GMT mtk01461 -** Add read WTSR and fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-24 09:46:52 GMT mtk01084 -** fix LINT error -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:32:24 GMT mtk01461 -** Define constants for TX PATH -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:54:10 GMT mtk01426 -** Add WHCR_MAX_HIF_RX_AGG_LEN_OFFSET definition -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:29 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _MT6620_REG_H -#define _MT6620_REG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -//1 MT6620 MCR Definition - -//2 Host Interface - -//4 CHIP ID Register -#define MCR_WCIR 0x0000 - -//4 HIF Low Power Control Register -#define MCR_WHLPCR 0x0004 -//#define MCR_WHLPCR_BYTE1 0x0005 - - -//4 Control Status Register -#define MCR_WSDIOCSR 0x0008 -#define MCR_WSPICSR 0x0008 - -//4 HIF Control Register -#define MCR_WHCR 0x000C - -//4 HIF Interrupt Status Register -#define MCR_WHISR 0x0010 - -//4 HIF Interrupt Enable Register -#define MCR_WHIER 0x0014 - -//4 Abnormal Status Register -#define MCR_WASR 0x0018 - -//4 WLAN Software Interrupt Control Register -#define MCR_WSICR 0x001C - -//4 WLAN TX Status Register -#define MCR_WTSR0 0x0020 - -//4 WLAN TX Status Register -#define MCR_WTSR1 0x0024 - -//4 WLAN TX Data Register 0 -#define MCR_WTDR0 0x0028 - -//4 WLAN TX Data Register 1 -#define MCR_WTDR1 0x002C - -//4 WLAN RX Data Register 0 -#define MCR_WRDR0 0x0030 - -//4 WLAN RX Data Register 1 -#define MCR_WRDR1 0x0034 - -//4 Host to Device Send Mailbox 0 Register -#define MCR_H2DSM0R 0x0038 - -//4 Host to Device Send Mailbox 1 Register -#define MCR_H2DSM1R 0x003c - -//4 Device to Host Receive Mailbox 0 Register -#define MCR_D2HRM0R 0x0040 - -//4 Device to Host Receive Mailbox 1 Register -#define MCR_D2HRM1R 0x0044 - -//4 WLAN RX Packet Length Register -#define MCR_WRPLR 0x0048 - - - - -//temp //#if CFG_SDIO_INTR_ENHANCE -typedef struct _ENHANCE_MODE_DATA_STRUCT_T { - UINT_32 u4WHISR; - union { - struct { - UINT_8 ucTQ0Cnt; - UINT_8 ucTQ1Cnt; - UINT_8 ucTQ2Cnt; - UINT_8 ucTQ3Cnt; - UINT_8 ucTQ4Cnt; - UINT_8 ucTQ5Cnt; - UINT_16 u2Rsrv; - } u; - UINT_32 au4WTSR[2]; - } rTxInfo; - union { - struct { - UINT_16 u2NumValidRx0Len; - UINT_16 u2NumValidRx1Len; - UINT_16 au2Rx0Len[16]; - UINT_16 au2Rx1Len[16]; - } u; - UINT_32 au4RxStatusRaw[17]; - } rRxInfo; - UINT_32 u4RcvMailbox0; - UINT_32 u4RcvMailbox1; -} ENHANCE_MODE_DATA_STRUCT_T, *P_ENHANCE_MODE_DATA_STRUCT_T; -// #endif /* ENHANCE_MODE_DATA_STRUCT_T */ - - -//2 Definition in each register -//3 WCIR 0x0000 -#define WCIR_WLAN_READY BIT(21) -#define WCIR_POR_INDICATOR BIT(20) -#define WCIR_REVISION_ID BITS(16,19) -#define WCIR_CHIP_ID BITS(0,15) - -#define MTK_CHIP_REV 0x00006620 -#define MTK_CHIP_MP_REVERSION_ID 0x0 - -//3 WHLPCR 0x0004 -#define WHLPCR_FW_OWN_REQ_CLR BIT(9) -#define WHLPCR_FW_OWN_REQ_SET BIT(8) -#define WHLPCR_IS_DRIVER_OWN BIT(8) -#define WHLPCR_INT_EN_CLR BIT(1) -#define WHLPCR_INT_EN_SET BIT(0) - -//3 WSDIOCSR 0x0008 -#define WSDIOCSR_SDIO_RE_INIT_EN BIT(0) - -//3 WSPICSR 0x0008 -#define WCSR_SPI_MODE_SEL BITS(3,4) -#define WCSR_SPI_ENDIAN_BIG BIT(2) -#define WCSR_SPI_INT_OUT_MODE BIT(1) -#define WCSR_SPI_DATA_OUT_MODE BIT(0) - -//3 WHCR 0x000C -#define WHCR_RX_ENHANCE_MODE_EN BIT(16) -#define WHCR_MAX_HIF_RX_LEN_NUM BITS(4,7) -#define WHCR_W_MAILBOX_RD_CLR_EN BIT(2) -#define WHCR_W_INT_CLR_CTRL BIT(1) -#define WHCR_MCU_DBG_EN BIT(0) -#define WHCR_OFFSET_MAX_HIF_RX_LEN_NUM 4 - -//3 WHISR 0x0010 -#define WHISR_D2H_SW_INT BITS(8,31) -#define WHISR_D2H_SW_ASSERT_INFO_INT BIT(31) -#define WHISR_FW_INT_INDICATOR BIT(7) -#define WHISR_FW_OWN_BACK_INT BIT(4) -#define WHISR_ABNORMAL_INT BIT(3) -#define WHISR_RX1_DONE_INT BIT(2) -#define WHISR_RX0_DONE_INT BIT(1) -#define WHISR_TX_DONE_INT BIT(0) - - -//3 WHIER 0x0014 -#define WHIER_D2H_SW_INT BITS(8,31) -#define WHIER_FW_INT_INDICATOR_EN BIT(7) -#define WHIER_FW_OWN_BACK_INT_EN BIT(4) -#define WHIER_ABNORMAL_INT_EN BIT(3) -#define WHIER_RX1_DONE_INT_EN BIT(2) -#define WHIER_RX0_DONE_INT_EN BIT(1) -#define WHIER_TX_DONE_INT_EN BIT(0) -#define WHIER_DEFAULT (WHIER_RX0_DONE_INT_EN | \ - WHIER_RX1_DONE_INT_EN | \ - WHIER_TX_DONE_INT_EN | \ - WHIER_ABNORMAL_INT_EN | \ - WHIER_D2H_SW_INT \ - ) - - -//3 WASR 0x0018 -#define WASR_FW_OWN_INVALID_ACCESS BIT(4) -#define WASR_RX1_UNDER_FLOW BIT(3) -#define WASR_RX0_UNDER_FLOW BIT(2) -#define WASR_TX1_OVER_FLOW BIT(1) -#define WASR_TX0_OVER_FLOW BIT(0) - - -//3 WSICR 0x001C -#define WSICR_H2D_SW_INT_SET BITS(16,31) - - -//3 WTSR0 0x0044 -#define WRPLR_RX1_PACKET_LENGTH BITS(16,31) -#define WRPLR_RX0_PACKET_LENGTH BITS(0,15) - -#endif /* _MT6620_REG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic.h deleted file mode 100755 index 64631384d9dc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic.h +++ /dev/null @@ -1,724 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic.h#1 $ -*/ - -/*! \file "nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - - - -/* -** $Log: nic.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-10-13 21:58:58 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-24 21:12:55 GMT mtk01104 -** Add function prototype nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:54 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:32 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_H -#define _NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -struct _REG_ENTRY_T { - UINT_32 u4Offset; - UINT_32 u4Value; -}; - -struct _TABLE_ENTRY_T { - P_REG_ENTRY_T pu4TablePtr; - UINT_16 u2Size; -}; - -/*! INT status to event map */ -typedef struct _INT_EVENT_MAP_T { - UINT_32 u4Int; - UINT_32 u4Event; -} INT_EVENT_MAP_T, *P_INT_EVENT_MAP_T; - - -enum ENUM_INT_EVENT_T { - INT_EVENT_ABNORMAL, - INT_EVENT_SW_INT, - INT_EVENT_TX, - INT_EVENT_RX, - INT_EVENT_NUM -}; - -typedef enum _ENUM_IE_UPD_METHOD_T { - IE_UPD_METHOD_UPDATE_RANDOM, - IE_UPD_METHOD_UPDATE_ALL, - IE_UPD_METHOD_DELETE_ALL, -} ENUM_IE_UPD_METHOD_T, *P_ENUM_IE_UPD_METHOD_T; - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in nic.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ); - -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ); - - -#if CFG_SDIO_INTR_ENHANCE -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ); -#endif - -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ); - -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(_HIF_SPI) -void -nicRestoreSpiDefMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data); - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data); - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ); - -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingStaMMPDU( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ); - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -/* Media State Change */ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -/* Utility function for channel number conversion */ -UINT_32 -nicChannelNum2Freq ( - IN UINT_32 u4ChannelNum - ); - -UINT_32 -nicFreq2ChannelNum ( - IN UINT_32 u4FreqInKHz - ); - -/* firmware command wrapper */ - /* NETWORK (WIFISYS) */ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - - /* BSS-INFO */ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* BSS-INFO Indication (PM) */ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* Beacon Template Update */ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ); - -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ); - -/*----------------------------------------------------------------------------*/ -/* Calibration Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ); - -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ); - -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ); - - -/*----------------------------------------------------------------------------*/ -/* PHY configuration */ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* MGMT and System Service Control */ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ); - -/*----------------------------------------------------------------------------*/ -/* Scan Result Processing */ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ); - -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/* Workaround Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Fixed Rate Hacking */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 u2HtCapInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Write registers */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ); - -/*----------------------------------------------------------------------------*/ -/* Update auto rate */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ); - -/*----------------------------------------------------------------------------*/ -/* Enable/Disable Roaming */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ); - - -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* Link Quality Updating */ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ); - -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ); - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ); -#endif - -#endif /* _NIC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic_rx.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic_rx.h deleted file mode 100755 index 49ca2991abab..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic_rx.h +++ /dev/null @@ -1,529 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_rx.h#1 $ -*/ - -/*! \file "nic_rx.h" - \brief The declaration of the nic rx functions - -*/ - - - -/* -** $Log: nic_rx.h $ - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Change prototype of API of adding P2P device to scan result. - * Additional IE buffer is saved. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 08 03 2010 cp.wu - * NULL - * newly added P2P API should be declared in header file. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * 2) firmware image length is now retrieved via NdisFileOpen - * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * 4) nicRxWaitResponse() revised - * * 5) another set of TQ counter default value is added for fw-download state - * * 6) Wi-Fi load address is now retrieved from registry too - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * and result is retrieved by get ATInfo instead - * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:49:09 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 14:02:37 GMT MTK02468 -** Added ucStaRecIdx in SW_RFB_T and HALF_SEQ_NO_COUNT definition (to replace HALF_SEQ_NO_CNOUT) -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-27 11:07:54 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 18:18:09 GMT mtk02752 -** modify nicRxAddScanResult() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-24 22:42:22 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-24 19:57:06 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 21:43:04 GMT mtk02752 -** correct ENUM_RX_PKT_DESTINATION_T definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 15:28:25 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packet are queued by RX reordering buffer/forwarding path -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 15:05:01 GMT mtk02752 -** add eTC for SW_RFB_T and structure RX_MAILBOX -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 21:16:57 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-13 16:59:30 GMT mtk02752 -** add handler for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-13 13:45:50 GMT mtk02752 -** add port param for nicRxEnhanceReadBuffer() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-11 10:12:31 GMT mtk02752 -** nicSDIOReadIntStatus() always read sizeof(ENHANCE_MODE_DATA_STRUCT_T) for int response, thus the number should be set to 0(:=16) instead of 10 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-29 19:53:32 GMT mtk01084 -** modify structure naming -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-23 16:08:23 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:01 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-20 12:23:33 GMT mtk01461 -** Add u4MaxEventBufferLen parameter to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-18 21:00:48 GMT mtk01426 -** Update SDIO_MAXIMUM_RX_STATUS value -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:36:15 GMT mtk01461 -** Remove unused define - SDIO_MAXIMUM_TX_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:17 GMT mtk01461 -** Add function for HIF_LOOPBACK_PRE_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:56:19 GMT mtk01426 -** Add to support CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:19:56 GMT mtk01426 -** Add nicRxWaitResponse function proto type -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:35 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_RX_H -#define _NIC_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SEQ_NO 4095 -#define MAX_SEQ_NO_COUNT 4096 -#define HALF_SEQ_NO_CNOUT 2048 - -#define HALF_SEQ_NO_COUNT 2048 - -#define MT6620_FIXED_WIN_SIZE 64 -#define CFG_RX_MAX_BA_ENTRY 4 -#define CFG_RX_MAX_BA_TID_NUM 8 - -#define RX_STATUS_FLAG_MORE_PACKET BIT(30) -#define RX_STATUS_CHKSUM_MASK BITS(0,10) - -#define RX_RFB_LEN_FIELD_LEN 4 -#define RX_HEADER_OFFSET 2 - - -#if defined(_HIF_SDIO) && defined (WINDOWS_DDK) -/*! On XP, maximum Tx+Rx Statue <= 64-4(HISR)*/ - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#else - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_RX_STATISTIC_COUNTER_T { - RX_MPDU_TOTAL_COUNT = 0, - RX_SIZE_ERR_DROP_COUNT, - - RX_DATA_INDICATION_COUNT, - RX_DATA_RETURNED_COUNT, - RX_DATA_RETAINED_COUNT, - - RX_DROP_TOTAL_COUNT, - RX_TYPE_ERR_DROP_COUNT, - RX_CLASS_ERR_DROP_COUNT, - RX_DST_NULL_DROP_COUNT, - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - RX_CSUM_TCP_FAILED_COUNT, - RX_CSUM_UDP_FAILED_COUNT, - RX_CSUM_IP_FAILED_COUNT, - RX_CSUM_TCP_SUCCESS_COUNT, - RX_CSUM_UDP_SUCCESS_COUNT, - RX_CSUM_IP_SUCCESS_COUNT, - RX_CSUM_UNKNOWN_L4_PKT_COUNT, - RX_CSUM_UNKNOWN_L3_PKT_COUNT, - RX_IP_V6_PKT_CCOUNT, -#endif - RX_STATISTIC_COUNTER_NUM -} ENUM_RX_STATISTIC_COUNTER_T; - -typedef enum _ENUM_RX_PKT_DESTINATION_T { - RX_PKT_DESTINATION_HOST, /* to OS */ - RX_PKT_DESTINATION_FORWARD, /* to TX queue for forward, AP mode */ - RX_PKT_DESTINATION_HOST_WITH_FORWARD, /* to both TX and OS, AP mode broadcast packet */ - RX_PKT_DESTINATION_NULL, /* packet to be freed */ - RX_PKT_DESTINATION_NUM -} ENUM_RX_PKT_DESTINATION_T; - -struct _SW_RFB_T { - QUE_ENTRY_T rQueEntry; - PVOID pvPacket; /*!< ptr to rx Packet Descriptor */ - PUINT_8 pucRecvBuff; /*!< ptr to receive data buffer */ - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4HifRxHdrFlag; - PVOID pvHeader; - UINT_16 u2PacketLen; - UINT_16 u2HeaderLen; - UINT_16 u2SSN; - UINT_8 ucTid; - UINT_8 ucWlanIdx; - UINT_8 ucPacketType; - UINT_8 ucStaRecIdx; - - ENUM_CSUM_RESULT_T aeCSUM[CSUM_TYPE_NUM]; - ENUM_RX_PKT_DESTINATION_T eDst; - ENUM_TRAFFIC_CLASS_INDEX_T eTC; /* only valid when eDst == FORWARD */ -}; - -/*! RX configuration type structure */ -typedef struct _RX_CTRL_T { - UINT_32 u4RxCachedSize; - PUINT_8 pucRxCached; - QUE_T rFreeSwRfbList; - QUE_T rReceivedRfbList; - QUE_T rIndicatedRfbList; - -#if CFG_SDIO_RX_AGG - PUINT_8 pucRxCoalescingBufPtr; -#endif - - PVOID apvIndPacket[CFG_RX_MAX_PKT_NUM]; - PVOID apvRetainedPacket[CFG_RX_MAX_PKT_NUM]; - - UINT_8 ucNumIndPacket; - UINT_8 ucNumRetainedPacket; - UINT_64 au8Statistics[RX_STATISTIC_COUNTER_NUM]; /*!< RX Counters */ - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalRxAccessNum; - UINT_32 u4TotalRxPacketNum; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - UINT_32 u4QueuedCnt; - UINT_32 u4DequeuedCnt; -#endif - -#if CFG_RX_PKTS_DUMP - UINT_32 u4RxPktsDumpTypeMask; -#endif - -} RX_CTRL_T, *P_RX_CTRL_T; - -typedef struct _RX_MAILBOX_T { - UINT_32 u4RxMailbox[2]; /* for Device-to-Host Mailbox */ -} RX_MAILBOX_T, *P_RX_MAILBOX_T; - -typedef WLAN_STATUS (*PROCESS_RX_MGT_FUNCTION)(P_ADAPTER_T, P_SW_RFB_T); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RX_INC_CNT(prRxCtrl, eCounter) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]++;} - -#define RX_ADD_CNT(prRxCtrl, eCounter, u8Amount) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter] += (UINT_64)u8Amount;} - -#define RX_GET_CNT(prRxCtrl, eCounter) \ - (((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]) - -#define RX_RESET_ALL_CNTS(prRxCtrl) \ - {kalMemZero(&prRxCtrl->au8Statistics[0], sizeof(prRxCtrl->au8Statistics));} - -#define RX_STATUS_TEST_MORE_FLAG(flag) \ - ((BOOL)((flag & RX_STATUS_FLAG_MORE_PACKET) ? TRUE : FALSE)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(MT5931) -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ); - -#if !CFG_SDIO_INTR_ENHANCE -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#else -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - -#if CFG_SDIO_RX_AGG -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus - ); - -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ); - -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -#endif /* _NIC_RX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic_tx.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic_tx.h deleted file mode 100755 index 4837da4877ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/nic_tx.h +++ /dev/null @@ -1,646 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/nic_tx.h#1 $ -*/ - -/*! \file nic_tx.h - \brief Functions that provide TX operation in NIC's point of view. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. - -*/ - - - -/* -** $Log: nic_tx.h $ - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 11 16 2010 yarco.yang - * [WCXRP00000177] [MT5931 F/W] Performance tuning for 1st connection - * Update TX buffer count - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 07 26 2010 cp.wu - * - * change TC4 initial value from 2 to 4. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Redistributed the initial TC resources for normal operation - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * 4) nicRxWaitResponse() revised - * * * 5) another set of TQ counter default value is added for fw-download state - * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * and result is retrieved by get ATInfo instead - * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:53:28 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-27 11:08:00 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-24 19:56:49 GMT mtk02752 -** remove redundant eTC -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 22:01:08 GMT mtk02468 -** Added MSDU_INFO fields for composing HIF TX header -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:51 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:35:05 GMT mtk02752 -** + nicTxMsduInfoList() for sending MsduInfoList -** + NIC_TX_BUFF_COUNT_TC[0~5] -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-17 11:07:00 GMT mtk02752 -** add nicTxAdjustTcq() API -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 22:28:30 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 21:44:50 GMT mtk02752 -** + nicTxReturnMsduInfo() -** + nicTxFillMsduInfo() -** + rFreeMsduInfoList field in TX_CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-16 18:00:43 GMT mtk02752 -** use P_PACKET_INFO_T for prPacket to avoid inventing another new structure for packet -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-16 15:28:49 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packets are queued by per STA/AC queue -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-16 10:52:01 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-14 23:39:24 GMT mtk02752 -** interface structure redefine -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-13 21:17:03 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-29 19:53:10 GMT mtk01084 -** remove strange code by Frog -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:04 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-02 13:53:03 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:36:50 GMT mtk01461 -** Add declaration of nicTxReleaseResource() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:58:39 GMT mtk01461 -** Move CMD_INFO_T related define and function to cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:53 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:33:27 GMT mtk01461 -** Define constants for TX PATH and add nicTxPollingResource -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:32 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_TX_H -#define _NIC_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NIC_TX_RESOURCE_POLLING_TIMEOUT 256 -#define NIC_TX_RESOURCE_POLLING_DELAY_MSEC 50 - -/* Maximum buffer count for individual HIF TCQ */ - -#if defined(MT6620) -#if CFG_SLT_SUPPORT - /* 20101215 mtk01725 Redistributed the initial TC resources for SLT operation */ - #define NIC_TX_BUFF_COUNT_TC0 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 16 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 0 // First connection: 0 -#else - /* 20100302 mtk02468 Redistributed the initial TC resources for normal operation */ - #define NIC_TX_BUFF_COUNT_TC0 6 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 8 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 2 // First connection: 0 -#endif -#elif defined(MT5931) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 14 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 -#elif defined(MT6628) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 20 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 - -#endif - -#define NIC_TX_BUFF_SUM (NIC_TX_BUFF_COUNT_TC0 + \ - NIC_TX_BUFF_COUNT_TC1 + \ - NIC_TX_BUFF_COUNT_TC2 + \ - NIC_TX_BUFF_COUNT_TC3 + \ - NIC_TX_BUFF_COUNT_TC4 + \ - NIC_TX_BUFF_COUNT_TC5) -#if CFG_ENABLE_FW_DOWNLOAD - - #define NIC_TX_INIT_BUFF_COUNT_TC0 8 - #define NIC_TX_INIT_BUFF_COUNT_TC1 0 - #define NIC_TX_INIT_BUFF_COUNT_TC2 0 - #define NIC_TX_INIT_BUFF_COUNT_TC3 0 - #define NIC_TX_INIT_BUFF_COUNT_TC4 0 - #define NIC_TX_INIT_BUFF_COUNT_TC5 0 - - #define NIC_TX_INIT_BUFF_SUM (NIC_TX_INIT_BUFF_COUNT_TC0 + \ - NIC_TX_INIT_BUFF_COUNT_TC1 + \ - NIC_TX_INIT_BUFF_COUNT_TC2 + \ - NIC_TX_INIT_BUFF_COUNT_TC3 + \ - NIC_TX_INIT_BUFF_COUNT_TC4 + \ - NIC_TX_INIT_BUFF_COUNT_TC5) - -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -//3 /* Session for TX QUEUES */ -/* The definition in this ENUM is used to categorize packet's Traffic Class according - * to the their TID(User Priority). - * In order to achieve QoS goal, a particular TC should not block the process of - * another packet with different TC. - * In current design we will have 5 categories(TCs) of SW resource. - */ -typedef enum _ENUM_TRAFFIC_CLASS_INDEX_T { - TC0_INDEX = 0, /* HIF TX0: AC0 packets */ - TC1_INDEX, /* HIF TX0: AC1 packets & non-QoS packets */ - TC2_INDEX, /* HIF TX0: AC2 packets */ - TC3_INDEX, /* HIF TX0: AC3 packets */ - TC4_INDEX, /* HIF TX1: Command packets or 802.1x packets */ - TC5_INDEX, /* HIF TX0: BMCAST packets */ - TC_NUM /* Maximum number of Traffic Classes. */ -} ENUM_TRAFFIC_CLASS_INDEX_T; - -typedef enum _ENUM_TX_STATISTIC_COUNTER_T { - TX_MPDU_TOTAL_COUNT = 0, - TX_INACTIVE_BSS_DROP, - TX_INACTIVE_STA_DROP, - TX_FORWARD_OVERFLOW_DROP, - TX_AP_BORADCAST_DROP, - TX_STATISTIC_COUNTER_NUM -} ENUM_TX_STATISTIC_COUNTER_T; - - -typedef struct _TX_TCQ_STATUS_T { - UINT_8 aucFreeBufferCount[TC_NUM]; - UINT_8 aucMaxNumOfBuffer[TC_NUM]; -} TX_TCQ_STATUS_T, *P_TX_TCQ_STATUS_T; - -typedef struct _TX_TCQ_ADJUST_T { - INT_8 acVariation[TC_NUM]; -} TX_TCQ_ADJUST_T, *P_TX_TCQ_ADJUST_T; - -typedef struct _TX_CTRL_T { - UINT_32 u4TxCachedSize; - PUINT_8 pucTxCached; - -/* Elements below is classified according to TC (Traffic Class) value. */ - - TX_TCQ_STATUS_T rTc; - - PUINT_8 pucTxCoalescingBufPtr; - - QUE_T rFreeMsduInfoList; - - /* Management Frame Tracking */ - /* number of management frames to be sent */ - INT_32 i4TxMgmtPendingNum; - - /* to tracking management frames need TX done callback */ - QUE_T rTxMgmtTxingQueue; - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalTxAccessNum; - UINT_32 u4TotalTxPacketNum; -#endif - UINT_32 au4Statistics[TX_STATISTIC_COUNTER_NUM]; - - /* Number to track forwarding frames */ - INT_32 i4PendingFwdFrameCount; - -} TX_CTRL_T, *P_TX_CTRL_T; - -typedef enum _ENUM_TX_PACKET_SRC_T { - TX_PACKET_OS, - TX_PACKET_OS_OID, - TX_PACKET_FORWARDING, - TX_PACKET_MGMT, - TX_PACKET_NUM -} ENUM_TX_PACKET_SRC_T; - -typedef enum _ENUM_HIF_TX_PACKET_TYPE_T { - HIF_TX_PACKET_TYPE_DATA = 0, - HIF_TX_PACKET_TYPE_COMMAND, - HIF_TX_PACKET_TYPE_HIF_LB, - HIF_TX_PACKET_TYPE_MGMT -} ENUM_HIF_TX_PACKET_TYPE_T, *P_ENUM_HIF_TX_PACKET_TYPE_T; - -typedef enum _ENUM_TX_RESULT_CODE_T { - TX_RESULT_SUCCESS = 0, - TX_RESULT_LIFE_TIMEOUT, - TX_RESULT_RTS_ERROR, - TX_RESULT_MPDU_ERROR, - TX_RESULT_AGING_TIMEOUT, - TX_RESULT_FLUSHED, - TX_RESULT_DROPPED_IN_DRIVER = 32, - TX_RESULT_NUM -} ENUM_TX_RESULT_CODE_T, *P_ENUM_TX_RESULT_CODE_T; - -/* TX Call Back Function */ -typedef WLAN_STATUS (*PFN_TX_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -/* TX transactions could be divided into 4 kinds: - * - * 1) 802.1X / Bluetooth-over-Wi-Fi Security Frames - * [CMD_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - * - * 2) MMPDU - * [CMD_INFO_T] - [prPacket] - [MSDU_INFO_T] - [prPacket] - direct buffer for frame body - * - * 3) Command Packets - * [CMD_INFO_T] - [pucInfoBuffer] - direct buffer for content of command packet - * - * 4) Normal data frame - * [MSDU_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - */ - - -/* PS_FORWARDING_TYPE_NON_PS means that the receiving STA is in Active Mode -* from the perspective of host driver (maybe not synchronized with FW --> SN is needed) -*/ - -struct _MSDU_INFO_T { - QUE_ENTRY_T rQueEntry; - P_NATIVE_PACKET prPacket; - - ENUM_TX_PACKET_SRC_T eSrc; /* specify OS/FORWARD packet */ - UINT_8 ucUserPriority; - - /* For composing HIF TX header */ - UINT_8 ucTC; /* Traffic Class: 0~4 (HIF TX0), 5 (HIF TX1) */ - UINT_8 ucPacketType; /* 0: Data, 1: Command, 2: HIF Loopback 3: Management Frame */ - UINT_8 ucStaRecIndex; - UINT_8 ucNetworkType; /* See ENUM_NETWORK_TYPE_T */ - UINT_8 ucFormatID; /* 0: MAUI, Linux, Windows NDIS 5.1 */ - BOOLEAN fgIs802_1x; /* TRUE: 802.1x frame */ - BOOLEAN fgIs802_11; /* TRUE: 802.11 header is present */ - UINT_16 u2PalLLH; /* PAL Logical Link Header (for BOW network) */ - UINT_16 u2AclSN; /* ACL Sequence Number (for BOW network) */ - UINT_8 ucPsForwardingType; /* See ENUM_PS_FORWARDING_TYPE_T */ - UINT_8 ucPsSessionID; /* PS Session ID specified by the FW for the STA */ - BOOLEAN fgIsBurstEnd; /* TRUE means this is the last packet of the burst for (STA, TID) */ - BOOLEAN fgIsBIP; /* Management Frame Protection */ - BOOLEAN fgIsBasicRate; /* Force Basic Rate Transmission */ - - /* flattened from PACKET_INFO_T */ - UINT_8 ucMacHeaderLength; - UINT_8 ucLlcLength; /* w/o EtherType */ - UINT_16 u2FrameLength; - UINT_8 aucEthDestAddr[MAC_ADDR_LEN]; /* Ethernet Destination Address */ - - /* for TX done tracking */ - UINT_8 ucTxSeqNum; - PFN_TX_DONE_HANDLER pfTxDoneHandler; -}; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define TX_INC_CNT(prTxCtrl, eCounter) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]++;} - -#define TX_ADD_CNT(prTxCtrl, eCounter, u8Amount) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter] += (UINT_32)u8Amount;} - -#define TX_GET_CNT(prTxCtrl, eCounter) \ - (((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]) - -#define TX_RESET_ALL_CNTS(prTxCtrl) \ - {kalMemZero(&prTxCtrl->au4Statistics[0], sizeof(prTxCtrl->au4Statistics));} - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ); - -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ); - -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessTxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prNdisPacket - ); - -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_ENABLE_FW_DOWNLOAD -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_TX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p.h deleted file mode 100755 index 30bae79019e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p.h +++ /dev/null @@ -1,195 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p.h#3 $ -*/ - - - -/* -** $Log: p2p.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add parameter to control: - * 1) auto group owner - * 2) P2P-PS parameter (CTWindow, NoA descriptors) - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * correct WPS Device Password ID definition. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * -*/ - -#ifndef _P2P_H -#define _P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// refer to 'Config Methods' in WPS -#define WPS_CONFIG_USBA 0x0001 -#define WPS_CONFIG_ETHERNET 0x0002 -#define WPS_CONFIG_LABEL 0x0004 -#define WPS_CONFIG_DISPLAY 0x0008 -#define WPS_CONFIG_EXT_NFC 0x0010 -#define WPS_CONFIG_INT_NFC 0x0020 -#define WPS_CONFIG_NFC 0x0040 -#define WPS_CONFIG_PBC 0x0080 -#define WPS_CONFIG_KEYPAD 0x0100 - -// refer to 'Device Password ID' in WPS -#define WPS_DEV_PASSWORD_ID_PIN 0x0000 -#define WPS_DEV_PASSWORD_ID_USER 0x0001 -#define WPS_DEV_PASSWORD_ID_MACHINE 0x0002 -#define WPS_DEV_PASSWORD_ID_REKEY 0x0003 -#define WPS_DEV_PASSWORD_ID_PUSHBUTTON 0x0004 -#define WPS_DEV_PASSWORD_ID_REGISTRAR 0x0005 - - -#define P2P_DEVICE_TYPE_NUM 2 -#define P2P_DEVICE_NAME_LENGTH 32 -#define P2P_NETWORK_NUM 8 -#define P2P_MEMBER_NUM 8 - -#define P2P_WILDCARD_SSID "DIRECT-" - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -struct _P2P_INFO_T { - UINT_32 u4DeviceNum; - EVENT_P2P_DEV_DISCOVER_RESULT_T arP2pDiscoverResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 pucCurrIePtr; - UINT_8 aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]; /* A common pool for IE of all scan results. */ -}; - -typedef enum { - ENUM_P2P_PEER_GROUP, - ENUM_P2P_PEER_DEVICE, - ENUM_P2P_PEER_NUM -} ENUM_P2P_PEER_TYPE, *P_ENUM_P2P_PEER_TYPE; - -typedef struct _P2P_DEVICE_INFO { - UINT_8 aucDevAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 aucIfAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDevCapabilityBitmap; - INT_32 i4ConfigMethod; - UINT_8 aucPrimaryDeviceType[8]; - UINT_8 aucSecondaryDeviceType[8]; - UINT_8 aucDeviceName[P2P_DEVICE_NAME_LENGTH]; -} P2P_DEVICE_INFO, *P_P2P_DEVICE_INFO; - -typedef struct _P2P_GROUP_INFO { - PARAM_SSID_T rGroupID; - P2P_DEVICE_INFO rGroupOwnerInfo; - UINT_8 ucMemberNum; - P2P_DEVICE_INFO arMemberInfo[P2P_MEMBER_NUM]; -} P2P_GROUP_INFO, *P_P2P_GROUP_INFO; - -typedef struct _P2P_NETWORK_INFO { - ENUM_P2P_PEER_TYPE eNodeType; - - union { - P2P_GROUP_INFO rGroupInfo; - P2P_DEVICE_INFO rDeviceInfo; - } node; - -} P2P_NETWORK_INFO, *P_P2P_NETWORK_INFO; - -typedef struct _P2P_NETWORK_LIST { - UINT_8 ucNetworkNum; - P2P_NETWORK_INFO rP2PNetworkInfo[P2P_NETWORK_NUM]; -} P2P_NETWORK_LIST, *P_P2P_NETWORK_LIST; - -typedef struct _P2P_DISCONNECT_INFO { - UINT_8 ucRole; - UINT_8 ucRsv[3]; -} P2P_DISCONNECT_INFO, *P_P2P_DISCONNECT_INFO; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_cmd_buf.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_cmd_buf.h deleted file mode 100755 index c59c60678d44..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_cmd_buf.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "p2p_cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - - - -/* -** $Log: p2p_cmd_buf.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks -*/ - -#ifndef _P2P_CMD_BUF_H -#define _P2P_CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - - - -#endif /* _P2P_CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_mac.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_mac.h deleted file mode 100755 index 9c022b0193b8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_mac.h +++ /dev/null @@ -1,223 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_mac.h#2 $ -*/ - -/*! \file "p2p_mac.h" - \brief Brief description. - - Detail description. -*/ - - - - - -#ifndef _P2P_MAC_H -#define _P2P_MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define ACTION_PUBLIC_WIFI_DIRECT 9 -#define ACTION_GAS_INITIAL_REQUEST 10 -#define ACTION_GAS_INITIAL_RESPONSE 11 -#define ACTION_GAS_COMEBACK_REQUEST 12 -#define ACTION_GAS_COMEBACK_RESPONSE 13 - - -/* P2P 4.2.8.1 - P2P Public Action Frame Type. */ -#define P2P_PUBLIC_ACTION_GO_NEGO_REQ 0 -#define P2P_PUBLIC_ACTION_GO_NEGO_RSP 1 -#define P2P_PUBLIC_ACTION_GO_NEGO_CFM 2 -#define P2P_PUBLIC_ACTION_INVITATION_REQ 3 -#define P2P_PUBLIC_ACTION_INVITATION_RSP 4 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_REQ 5 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_RSP 6 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_REQ 7 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_RSP 8 - -/* P2P 4.2.9.1 - P2P Action Frame Type */ -#define P2P_ACTION_NOTICE_OF_ABSENCE 0 -#define P2P_ACTION_P2P_PRESENCE_REQ 1 -#define P2P_ACTION_P2P_PRESENCE_RSP 2 -#define P2P_ACTION_GO_DISCOVER_REQ 3 - -#define P2P_PUBLIC_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+8) -#define P2P_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+7) - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/* P2P 4.2.8.2 P2P Public Action Frame Format */ -typedef struct _P2P_PUBLIC_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 aucOui[3]; /* 0x50, 0x6F, 0x9A */ - UINT_8 ucOuiType; /* 0x09 */ - UINT_8 ucOuiSubtype; /* GO Nego Req/Rsp/Cfm, P2P Invittion Req/Rsp, Device Discoverability Req/Rsp */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* P2P IE, WSC IE. */ -} __KAL_ATTRIB_PACKED__ P2P_PUBLIC_ACTION_FRAME_T, *P_P2P_PUBLIC_ACTION_FRAME_T; - - -/* P2P 4.2.9.1 - General Action Frame Format. */ -typedef struct _P2P_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Action Frame Body */ - UINT_8 ucCategory; // 0x7F - UINT_8 aucOui[3]; // 0x50, 0x6F, 0x9A - UINT_8 ucOuiType; // 0x09 - UINT_8 ucOuiSubtype; // - UINT_8 ucDialogToken; - UINT_8 aucInfoElem[1]; -} __KAL_ATTRIB_PACKED__ P2P_ACTION_FRAME_T, *P_P2P_ACTION_FRAME_T; - -/* P2P C.1 GAS Public Action Initial Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T; - -/* P2P C.2 GAS Public Action Initial Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Initial Response. */ - UINT_16 u2ComebackDelay; /* Initial Response. */ /* In unit of TU. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T; - - -/* P2P C.3-1 GAS Public Action Comeback Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T; - -/* P2P C.3-2 GAS Public Action Comeback Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Comeback Response. */ - UINT_8 ucFragmentID; /*Comeback Response. */ - UINT_16 u2ComebackDelay; /* Comeback Response. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T; - - - - -typedef struct _P2P_SD_VENDER_SPECIFIC_CONTENT_T { - /* Service Discovery Vendor-specific Content. */ - UINT_8 ucOuiSubtype; // 0x09 - UINT_16 u2ServiceUpdateIndicator; - UINT_8 aucServiceTLV[1]; -} __KAL_ATTRIB_PACKED__ P2P_SD_VENDER_SPECIFIC_CONTENT_T, *P_P2P_SD_VENDER_SPECIFIC_CONTENT_T; - - -typedef struct _P2P_SERVICE_REQUEST_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 aucQueryData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_REQUEST_TLV_T, *P_P2P_SERVICE_REQUEST_TLV_T; - - - -typedef struct _P2P_SERVICE_RESPONSE_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 ucStatusCode; - UINT_8 aucResponseData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_RESPONSE_TLV_T, *P_P2P_SERVICE_RESPONSE_TLV_T; - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_nic.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_nic.h deleted file mode 100755 index 3f1363f77d1a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_nic.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic.h#1 $ -*/ - -/*! \file "p2p_nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - - - - - -#ifndef _P2P_NIC_H -#define _P2P_NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -nicP2pMediaStateChange( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -VOID -nicRxAddP2pDevice( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_nic_cmd_event.h deleted file mode 100755 index fb056fff3598..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/p2p_nic_cmd_event.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic_cmd_event.h#1 $ -*/ - -/*! \file p2p_nic_cmd_event.h - \brief -*/ - - - -#ifndef _P2P_NIC_CMD_EVENT_H -#define _P2P_NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -typedef struct _EVENT_P2P_DEV_DISCOVER_RESULT_T { -// UINT_8 aucCommunicateAddr[MAC_ADDR_LEN]; // Deprecated. - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[2]; - UINT_16 u2NameLength; - UINT_8 aucName[32]; - PUINT_8 pucIeBuf; - UINT_16 u2IELength; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - // TODO: Service Information or PasswordID valid? -} EVENT_P2P_DEV_DISCOVER_RESULT_T, *P_EVENT_P2P_DEV_DISCOVER_RESULT_T; - -#endif \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/que_mgt.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/que_mgt.h deleted file mode 100755 index 65004743db8e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/que_mgt.h +++ /dev/null @@ -1,1150 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/que_mgt.h#1 $ -*/ - -/*! \file "que_mgt.h" - \brief TX/RX queues management header file - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - - - -/* -** $Log: que_mgt.h $ - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 06 14 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Change the parameter for WMM pass. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 19 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * By default enabling dynamic STA_REC activation and decactivation - * - * 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:04:53 GMT MTK02468 -** Added RX buffer reordering function prototypes -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-02 22:08:44 GMT MTK02468 -** Added macro QM_INIT_STA_REC for initialize a STA_REC -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 21:58:43 GMT mtk02468 -** Initial version -** -*/ - -#ifndef _QUE_MGT_H -#define _QUE_MGT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* Queue Manager Features */ -#define QM_BURST_END_INFO_ENABLED 1 /* 1: Indicate the last TX packet to the FW for each burst */ -#define QM_FORWARDING_FAIRNESS 1 /* 1: To fairly share TX resource among active STAs */ -#define QM_ADAPTIVE_TC_RESOURCE_CTRL 1 /* 1: To adaptively adjust resource for each TC */ -#define QM_PRINT_TC_RESOURCE_CTRL 0 /* 1: To print TC resource adjustment results */ -#define QM_RX_WIN_SSN_AUTO_ADVANCING 1 /* 1: If pkt with SSN is missing, auto advance the RX reordering window */ -#define QM_RX_INIT_FALL_BEHIND_PASS 1 /* 1: Indicate the packets falling behind to OS before the frame with SSN is received */ -/* Parameters */ -#define QM_INIT_TIME_TO_UPDATE_QUE_LEN 60 /* p: Update queue lengths when p TX packets are enqueued */ -#define QM_INIT_TIME_TO_ADJUST_TC_RSC 3 /* s: Adjust the TC resource every s updates of queue lengths */ -#define QM_QUE_LEN_MOVING_AVE_FACTOR 3 /* Factor for Que Len averaging */ - -#define QM_MIN_RESERVED_TC0_RESOURCE 1 -#define QM_MIN_RESERVED_TC1_RESOURCE 1 -#define QM_MIN_RESERVED_TC2_RESOURCE 1 -#define QM_MIN_RESERVED_TC3_RESOURCE 1 -#define QM_MIN_RESERVED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_MIN_RESERVED_TC5_RESOURCE 1 - -#if defined(MT6620) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 9 -#define QM_GUARANTEED_TC3_RESOURCE 11 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - -#elif defined(MT5931) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 4 -#define QM_GUARANTEED_TC3_RESOURCE 4 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 2 - -#elif defined(MT6628) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 6 -#define QM_GUARANTEED_TC3_RESOURCE 6 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - - -#else -#error -#endif - - - -#define QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY 0 - -#define QM_TOTAL_TC_RESOURCE (\ - NIC_TX_BUFF_COUNT_TC0 + NIC_TX_BUFF_COUNT_TC1 +\ - NIC_TX_BUFF_COUNT_TC2 + NIC_TX_BUFF_COUNT_TC3 +\ - NIC_TX_BUFF_COUNT_TC5) -#define QM_AVERAGE_TC_RESOURCE 6 - -/* Note: QM_INITIAL_RESIDUAL_TC_RESOURCE shall not be less than 0 */ -#define QM_INITIAL_RESIDUAL_TC_RESOURCE (QM_TOTAL_TC_RESOURCE - \ - (QM_GUARANTEED_TC0_RESOURCE +\ - QM_GUARANTEED_TC1_RESOURCE +\ - QM_GUARANTEED_TC2_RESOURCE +\ - QM_GUARANTEED_TC3_RESOURCE +\ - QM_GUARANTEED_TC5_RESOURCE \ - )) - -/* Hard-coded network type for Phase 3: NETWORK_TYPE_AIS/P2P/BOW */ -#define QM_OPERATING_NETWORK_TYPE NETWORK_TYPE_AIS - -#define QM_TEST_MODE 0 -#define QM_TEST_TRIGGER_TX_COUNT 50 -#define QM_TEST_STA_REC_DETERMINATION 0 -#define QM_TEST_STA_REC_DEACTIVATION 0 -#define QM_TEST_FAIR_FORWARDING 0 - -#define QM_DEBUG_COUNTER 0 - -/* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ -/* Per-Type Queues: [0] BMCAST */ -#define NUM_OF_PER_STA_TX_QUEUES 5 -#define NUM_OF_PER_TYPE_TX_QUEUES 1 - -/* These two constants are also used for FW to verify the STA_REC index */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE - -/* TX Queue Index */ -#define TX_QUEUE_INDEX_BMCAST 0 -#define TX_QUEUE_INDEX_NO_STA_REC 0 -#define TX_QUEUE_INDEX_AC0 0 -#define TX_QUEUE_INDEX_AC1 1 -#define TX_QUEUE_INDEX_AC2 2 -#define TX_QUEUE_INDEX_AC3 3 -#define TX_QUEUE_INDEX_802_1X 4 -#define TX_QUEUE_INDEX_NON_QOS 1 - - -//1 WMM-related -/* WMM FLAGS */ -#define WMM_FLAG_SUPPORT_WMM BIT(0) -#define WMM_FLAG_SUPPORT_WMMSA BIT(1) -#define WMM_FLAG_AC_PARAM_PRESENT BIT(2) -#define WMM_FLAG_SUPPORT_UAPSD BIT(3) - -/* WMM Admission Control Mandatory FLAGS */ -#define ACM_FLAG_ADM_NOT_REQUIRED 0 -#define ACM_FLAG_ADM_GRANTED BIT(0) -#define ACM_FLAG_ADM_REQUIRED BIT(1) - -/* WMM Power Saving FLAGS */ -#define AC_FLAG_TRIGGER_ENABLED BIT(1) -#define AC_FLAG_DELIVERY_ENABLED BIT(2) - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/* WMM-2.2.2 WMM Parameter Element */ -#define ELEM_MAX_LEN_WMM_PARAM 24 - -/* WMM-2.2.1 WMM QoS Info field */ -#define WMM_QOS_INFO_PARAM_SET_CNT BITS(0,3) /* Sent by AP */ -#define WMM_QOS_INFO_UAPSD BIT(7) - -#define WMM_QOS_INFO_VO_UAPSD BIT(0) /* Sent by non-AP STA */ -#define WMM_QOS_INFO_VI_UAPSD BIT(1) -#define WMM_QOS_INFO_BK_UAPSD BIT(2) -#define WMM_QOS_INFO_BE_UAPSD BIT(3) -#define WMM_QOS_INFO_MAX_SP_LEN_MASK BITS(5,6) -#define WMM_QOS_INFO_MAX_SP_ALL 0 -#define WMM_QOS_INFO_MAX_SP_2 BIT(5) -#define WMM_QOS_INFO_MAX_SP_4 BIT(6) -#define WMM_QOS_INFO_MAX_SP_6 BITS(5,6) - -/* -- definitions for Max SP length field */ -#define WMM_MAX_SP_LENGTH_ALL 0 -#define WMM_MAX_SP_LENGTH_2 2 -#define WMM_MAX_SP_LENGTH_4 4 -#define WMM_MAX_SP_LENGTH_6 6 - - -/* WMM-2.2.2 WMM ACI/AIFSN field */ -/* -- subfields in the ACI/AIFSN field */ -#define WMM_ACIAIFSN_AIFSN BITS(0,3) -#define WMM_ACIAIFSN_ACM BIT(4) -#define WMM_ACIAIFSN_ACI BITS(5,6) -#define WMM_ACIAIFSN_ACI_OFFSET 5 - -/* -- definitions for ACI field */ -#define WMM_ACI_AC_BE 0 -#define WMM_ACI_AC_BK BIT(5) -#define WMM_ACI_AC_VI BIT(6) -#define WMM_ACI_AC_VO BITS(5,6) - -#define WMM_ACI(_AC) (_AC << WMM_ACIAIFSN_ACI_OFFSET) - -/* -- definitions for ECWmin/ECWmax field */ -#define WMM_ECW_WMIN_MASK BITS(0,3) -#define WMM_ECW_WMAX_MASK BITS(4,7) -#define WMM_ECW_WMAX_OFFSET 4 - -#define TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME 0 /* Unit: 64 us */ - -#define QM_RX_BA_ENTRY_MISS_TIMEOUT_MS (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -enum { - QM_DBG_CNT_00=0, - QM_DBG_CNT_01, - QM_DBG_CNT_02, - QM_DBG_CNT_03, - QM_DBG_CNT_04, - QM_DBG_CNT_05, - QM_DBG_CNT_06, - QM_DBG_CNT_07, - QM_DBG_CNT_08, - QM_DBG_CNT_09, - QM_DBG_CNT_10, - QM_DBG_CNT_11, - QM_DBG_CNT_12, - QM_DBG_CNT_13, - QM_DBG_CNT_14, - QM_DBG_CNT_15, - QM_DBG_CNT_16, - QM_DBG_CNT_17, - QM_DBG_CNT_18, - QM_DBG_CNT_19, - QM_DBG_CNT_20, - QM_DBG_CNT_21, - QM_DBG_CNT_22, - QM_DBG_CNT_23, - QM_DBG_CNT_24, - QM_DBG_CNT_25, - QM_DBG_CNT_26, - QM_DBG_CNT_27, - QM_DBG_CNT_28, - QM_DBG_CNT_29, - QM_DBG_CNT_30, - QM_DBG_CNT_31, - QM_DBG_CNT_NUM -}; - - - - -/* Used for MAC TX */ -typedef enum _ENUM_MAC_TX_QUEUE_INDEX_T { - MAC_TX_QUEUE_AC0_INDEX = 0, - MAC_TX_QUEUE_AC1_INDEX, - MAC_TX_QUEUE_AC2_INDEX, - MAC_TX_QUEUE_AC3_INDEX, - MAC_TX_QUEUE_AC4_INDEX, - MAC_TX_QUEUE_AC5_INDEX, - MAC_TX_QUEUE_AC6_INDEX, - MAC_TX_QUEUE_BCN_INDEX, - MAC_TX_QUEUE_BMC_INDEX, - MAC_TX_QUEUE_NUM -} ENUM_MAC_TX_QUEUE_INDEX_T; - -typedef struct _RX_BA_ENTRY_T { - BOOLEAN fgIsValid; - QUE_T rReOrderQue; - UINT_16 u2WinStart; - UINT_16 u2WinEnd; - UINT_16 u2WinSize; - - /* For identifying the RX BA agreement */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; - - BOOLEAN fgIsWaitingForPktWithSsn; - - //UINT_8 ucTxBufferSize; - //BOOL fgIsAcConstrain; - //BOOL fgIsBaEnabled; -} RX_BA_ENTRY_T, *P_RX_BA_ENTRY_T; - -/* The mailbox message (could be used for Host-To-Device or Device-To-Host Mailbox) */ -typedef struct _MAILBOX_MSG_T{ - UINT_32 u4Msg[2]; /* [0]: D2HRM0R or H2DRM0R, [1]: D2HRM1R or H2DRM1R */ -} MAILBOX_MSG_T, *P_MAILBOX_MSG_T; - - -/* Used for adaptively adjusting TC resources */ -typedef struct _TC_RESOURCE_CTRL_T { - /* TC0, TC1, TC2, TC3, TC5 */ - UINT_32 au4AverageQueLen[TC_NUM - 1]; -} TC_RESOURCE_CTRL_T, *P_TC_RESOURCE_CTRL_T; - -typedef struct _QUE_MGT_T{ /* Queue Management Control Info */ - - /* Per-Type Queues: [0] BMCAST or UNKNOWN-STA packets */ - QUE_T arTxQueue[NUM_OF_PER_TYPE_TX_QUEUES]; - -#if 0 - /* For TX Scheduling */ - UINT_8 arRemainingTxOppt[NUM_OF_PER_STA_TX_QUEUES]; - UINT_8 arCurrentTxStaIndex[NUM_OF_PER_STA_TX_QUEUES]; - -#endif - - /* Reordering Queue Parameters */ - RX_BA_ENTRY_T arRxBaTable[CFG_NUM_OF_RX_BA_AGREEMENTS]; - - /* Current number of activated RX BA agreements <= CFG_NUM_OF_RX_BA_AGREEMENTS */ - UINT_8 ucRxBaCount; - -#if QM_TEST_MODE - UINT_32 u4PktCount; - P_ADAPTER_T prAdapter; - -#if QM_TEST_FAIR_FORWARDING - UINT_32 u4CurrentStaRecIndexToEnqueue; -#endif - -#endif - - -#if QM_FORWARDING_FAIRNESS - /* The current TX count for a STA with respect to a TC index */ - UINT_32 au4ForwardCount[NUM_OF_PER_STA_TX_QUEUES]; - - /* The current serving STA with respect to a TC index */ - UINT_32 au4HeadStaRecIndex [NUM_OF_PER_STA_TX_QUEUES]; -#endif - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 au4AverageQueLen[TC_NUM]; - UINT_32 au4CurrentTcResource[TC_NUM]; - UINT_32 au4MinReservedTcResource[TC_NUM]; /* The minimum amount of resource no matter busy or idle */ - UINT_32 au4GuaranteedTcResource[TC_NUM]; /* The minimum amount of resource when extremely busy */ - - UINT_32 u4TimeToAdjustTcResource; - UINT_32 u4TimeToUpdateQueLen; - - /* Set to TRUE if the last TC adjustment has not been completely applied (i.e., waiting more TX-Done events - to align the TC quotas to the TC resource assignment) */ - BOOLEAN fgTcResourcePostAnnealing; - -#endif - -#if QM_DEBUG_COUNTER - UINT_32 au4QmDebugCounters[QM_DBG_CNT_NUM]; -#endif - - - - -} QUE_MGT_T, *P_QUE_MGT_T; - - - -typedef struct _EVENT_RX_ADDBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - - /* Fields that are present in the received ADDBA_REQ */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ - -} EVENT_RX_ADDBA_T, *P_EVENT_RX_ADDBA_T; - -typedef struct _EVENT_RX_DELBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; -} EVENT_RX_DELBA_T, *P_EVENT_RX_DELBA_T; - - -typedef struct _EVENT_BSS_ABSENCE_PRESENCE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucNetTypeIdx; - BOOLEAN fgIsAbsent; - UINT_8 ucBssFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_BSS_ABSENCE_PRESENCE_T, *P_EVENT_BSS_ABSENCE_PRESENCE_T; - - -typedef struct _EVENT_STA_CHANGE_PS_MODE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - BOOLEAN fgIsInPs; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; -} EVENT_STA_CHANGE_PS_MODE_T, *P_EVENT_STA_CHANGE_PS_MODE_T; - -/* The free quota is used by PS only now */ -/* The event may be used by per STA flow conttrol in general */ -typedef struct _EVENT_STA_UPDATE_FREE_QUOTA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_STA_UPDATE_FREE_QUOTA_T, *P_EVENT_STA_UPDATE_FREE_QUOTA_T; - - - - -/* WMM-2.2.1 WMM Information Element */ -typedef struct _IE_WMM_INFO_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucDummy[3]; /* Dummy for pack */ -} IE_WMM_INFO_T, *P_IE_WMM_INFO_T; - -/* WMM-2.2.2 WMM Parameter Element */ -typedef struct _IE_WMM_PARAM_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - - /* IE Body */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - - /* WMM IE Body */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucReserved; - - /* AC Parameters */ - UINT_8 ucAciAifsn_BE; - UINT_8 ucEcw_BE; - UINT_8 aucTxopLimit_BE[2]; - - UINT_8 ucAciAifsn_BG; - UINT_8 ucEcw_BG; - UINT_8 aucTxopLimit_BG[2]; - - UINT_8 ucAciAifsn_VI; - UINT_8 ucEcw_VI; - UINT_8 aucTxopLimit_VI[2]; - - UINT_8 ucAciAifsn_VO; - UINT_8 ucEcw_VO; - UINT_8 aucTxopLimit_VO[2]; - -} IE_WMM_PARAM_T, *P_IE_WMM_PARAM_T; - -typedef struct _IE_WMM_TSPEC_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - /* WMM TSPEC body */ - UINT_8 aucTsInfo[3]; /* TS Info */ - UINT_8 aucTspecBodyPart[1]; /* Note: Utilize PARAM_QOS_TSPEC to fill (memory copy) */ -} IE_WMM_TSPEC_T, *P_IE_WMM_TSPEC_T; - -typedef struct _IE_WMM_HDR_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 aucBody[1]; /* IE body */ -} IE_WMM_HDR_T, *P_IE_WMM_HDR_T; - - -typedef struct _AC_QUE_PARMS_T{ - UINT_16 u2CWmin; /*!< CWmin */ - UINT_16 u2CWmax; /*!< CWmax */ - UINT_16 u2TxopLimit; /*!< TXOP limit */ - UINT_16 u2Aifsn; /*!< AIFSN */ - UINT_8 ucGuradTime; /*!< GuardTime for STOP/FLUSH. */ - BOOLEAN fgIsACMSet; -} AC_QUE_PARMS_T, *P_AC_QUE_PARMS_T; - -/* WMM ACI (AC index) */ -typedef enum _ENUM_WMM_ACI_T { - WMM_AC_BE_INDEX = 0, - WMM_AC_BK_INDEX, - WMM_AC_VI_INDEX, - WMM_AC_VO_INDEX, - WMM_AC_INDEX_NUM -} ENUM_WMM_ACI_T, *P_ENUM_WMM_ACI_T; - - -/* Used for CMD Queue Operation */ -typedef enum _ENUM_FRAME_ACTION_T { - FRAME_ACTION_DROP_PKT = 0, - FRAME_ACTION_QUEUE_PKT, - FRAME_ACTION_TX_PKT, - FRAME_ACTION_NUM -} ENUM_FRAME_ACTION_T; - - -typedef enum _ENUM_FRAME_TYPE_IN_CMD_Q_T { - FRAME_TYPE_802_1X = 0, - FRAME_TYPE_MMPDU, - FRAME_TYEP_NUM -} ENUM_FRAME_TYPE_IN_CMD_Q_T; - -typedef enum _ENUM_FREE_QUOTA_MODET_T { - FREE_QUOTA_UPDATE_MODE_INIT = 0, - FREE_QUOTA_UPDATE_MODE_OVERWRITE, - FREE_QUOTA_UPDATE_MODE_INCREASE, - FREE_QUOTA_UPDATE_MODE_DECREASE -} ENUM_FREE_QUOTA_MODET_T, *P_ENUM_FREE_QUOTA_MODET_T; - - - -typedef struct _CMD_UPDATE_WMM_PARMS_T { - AC_QUE_PARMS_T arACQueParms[AC_NUM]; - UINT_8 ucNetTypeIndex; - UINT_8 fgIsQBSS; - UINT_8 aucReserved[2]; -} CMD_UPDATE_WMM_PARMS_T, *P_CMD_UPDATE_WMM_PARMS_T; - - -typedef struct _CMD_TX_AMPDU_T { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_TX_AMPDU_T, *P_CMD_TX_AMPDU_T; - - -typedef struct _CMD_ADDBA_REJECT { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_ADDBA_REJECT_T, *P_CMD_ADDBA_REJECT_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define QM_TX_SET_NEXT_MSDU_INFO(_prMsduInfoPreceding, _prMsduInfoNext) \ - ((((_prMsduInfoPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prMsduInfoNext)) - -#define QM_TX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - - -#define QM_TX_GET_NEXT_MSDU_INFO(_prMsduInfo) \ - ((P_MSDU_INFO_T)(((_prMsduInfo)->rQueEntry).prNext)) - -#define QM_RX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - -#define QM_RX_GET_NEXT_SW_RFB(_prSwRfb) \ - ((P_SW_RFB_T)(((_prSwRfb)->rQueEntry).prNext)) - -#if 0 -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - ((((_ucIndex) != STA_REC_INDEX_BMCAST) && ((_ucIndex)!= STA_REC_INDEX_NOT_FOUND)) ?\ - &(_prAdapter->arStaRec[_ucIndex]): NULL) -#endif - -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - cnmGetStaRecByIndex(_prAdapter,_ucIndex) - - -#define QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET(\ - _prMsduInfo,\ - _ucTC,\ - _ucPacketType,\ - _ucFormatID,\ - _fgIs802_1x,\ - _fgIs802_11,\ - _u2PalLLH,\ - _u2AclSN,\ - _ucPsForwardingType,\ - _ucPsSessionID\ - ) \ -{\ - ASSERT(_prMsduInfo);\ - (_prMsduInfo)->ucTC = (_ucTC);\ - (_prMsduInfo)->ucPacketType = (_ucPacketType);\ - (_prMsduInfo)->ucFormatID = (_ucFormatID);\ - (_prMsduInfo)->fgIs802_1x = (_fgIs802_1x);\ - (_prMsduInfo)->fgIs802_11 = (_fgIs802_11);\ - (_prMsduInfo)->u2PalLLH = (_u2PalLLH);\ - (_prMsduInfo)->u2AclSN = (_u2AclSN);\ - (_prMsduInfo)->ucPsForwardingType = (_ucPsForwardingType);\ - (_prMsduInfo)->ucPsSessionID = (_ucPsSessionID);\ - (_prMsduInfo)->fgIsBurstEnd = (FALSE);\ -} - -#define QM_INIT_STA_REC(\ - _prStaRec,\ - _fgIsValid,\ - _fgIsQoS,\ - _pucMacAddr\ - )\ -{\ - ASSERT(_prStaRec);\ - (_prStaRec)->fgIsValid = (_fgIsValid);\ - (_prStaRec)->fgIsQoS = (_fgIsQoS);\ - (_prStaRec)->fgIsInPS = FALSE; \ - (_prStaRec)->ucPsSessionID = 0xFF;\ - COPY_MAC_ADDR((_prStaRec)->aucMacAddr,(_pucMacAddr));\ -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -#define QM_GET_TX_QUEUE_LEN(_prAdapter, _u4QueIdx) ((_prAdapter->rQM.au4AverageQueLen[(_u4QueIdx)] >> QM_QUE_LEN_MOVING_AVE_FACTOR)) -#endif - - -#define WMM_IE_OUI_TYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiType) -#define WMM_IE_OUI_SUBTYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiSubtype) -#define WMM_IE_OUI(fp) (((P_IE_WMM_HDR_T)(fp))->aucOui) - -#if QM_DEBUG_COUNTER -#define QM_DBG_CNT_INC(_prQM, _index) { (_prQM)->au4QmDebugCounters[(_index)]++; } -#else -#define QM_DBG_CNT_INC(_prQM, _index) {} -#endif - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Queue Management and STA_REC Initialization */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ); - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - - -/*----------------------------------------------------------------------------*/ -/* TX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ); - -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - - -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ); - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ); - -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid - ); - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ); - - -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ); - - -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ); - -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ); - -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ); - - -/* Utility function: for deciding STA-REC index */ -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -); - -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - - -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ); - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUE_MGT_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/wlan_def.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/wlan_def.h deleted file mode 100755 index 6a000d8c3532..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic/wlan_def.h +++ /dev/null @@ -1,1012 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/wlan_def.h#1 $ -*/ - -/*! \file "wlan_def.h" - \brief This file includes the basic definition of WLAN - -*/ - - - -/* -** $Log: wlan_def.h $ - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add new station type MACRO. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 11 2010 kevin.huang - * [WCXRP00000068] [MT6620 Wi-Fi][Driver][FW] Fix STA RECORD sync issue and remove unused code - * Update ENUM_STA_ROLE_INDEX_T by using a fixed base value - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 14 2010 chinghwa.yu - * NULL - * Update OP_MODE_BOW and include bow_fsm.h. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Change P2P Descriptor List to a pointer and allocate it dynamically to avoid structure corrupt by BssDescriptor free. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add a pointer in BSS Descriptor for P2P Descriptor. - * - * 08 11 2010 yuche.tsai - * NULL - * Add an Interface in BSS Descriptor. - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 07 26 2010 yuche.tsai - * - * Add an operation mode for P2P device. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P present boolean flag in BSS & Pre-BSS descriptor. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * move bss related data types to wlan_def.h to avoid recursive dependency. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:40 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_DEF_H -#define _WLAN_DEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* disconnect reason */ -#define DISCONNECT_REASON_CODE_RESERVED 0 -#define DISCONNECT_REASON_CODE_RADIO_LOST 1 -#define DISCONNECT_REASON_CODE_DEAUTHENTICATED 2 -#define DISCONNECT_REASON_CODE_DISASSOCIATED 3 -#define DISCONNECT_REASON_CODE_NEW_CONNECTION 4 - -/* The rate definitions */ -#define TX_MODE_CCK 0x00 -#define TX_MODE_OFDM 0x40 -#define TX_MODE_HT_MM 0x80 -#define TX_MODE_HT_GF 0xC0 - -#define RATE_CCK_SHORT_PREAMBLE 0x10 -#define RATE_OFDM 0x20 - -#define PHY_RATE_1M 0x0 -#define PHY_RATE_2M 0x1 -#define PHY_RATE_5_5M 0x2 -#define PHY_RATE_11M 0x3 -#define PHY_RATE_6M 0xB -#define PHY_RATE_9M 0xF -#define PHY_RATE_12M 0xA -#define PHY_RATE_18M 0xE -#define PHY_RATE_24M 0x9 -#define PHY_RATE_36M 0xD -#define PHY_RATE_48M 0x8 -#define PHY_RATE_54M 0xC -#define PHY_RATE_MCS0 0x0 -#define PHY_RATE_MCS1 0x1 -#define PHY_RATE_MCS2 0x2 -#define PHY_RATE_MCS3 0x3 -#define PHY_RATE_MCS4 0x4 -#define PHY_RATE_MCS5 0x5 -#define PHY_RATE_MCS6 0x6 -#define PHY_RATE_MCS7 0x7 -#define PHY_RATE_MCS32 0x20 - -#define RATE_CCK_1M_LONG (TX_MODE_CCK | PHY_RATE_1M) -#define RATE_CCK_2M_LONG (TX_MODE_CCK | PHY_RATE_2M) -#define RATE_CCK_5_5M_LONG (TX_MODE_CCK | PHY_RATE_5_5M) -#define RATE_CCK_11M_LONG (TX_MODE_CCK | PHY_RATE_11M) -#define RATE_CCK_2M_SHORT (TX_MODE_CCK | PHY_RATE_2M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_5_5M_SHORT (TX_MODE_CCK | PHY_RATE_5_5M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_11M_SHORT (TX_MODE_CCK | PHY_RATE_11M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_OFDM_6M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_6M) -#define RATE_OFDM_9M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_9M) -#define RATE_OFDM_12M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_12M) -#define RATE_OFDM_18M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_18M) -#define RATE_OFDM_24M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_24M) -#define RATE_OFDM_36M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_36M) -#define RATE_OFDM_48M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_48M) -#define RATE_OFDM_54M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_54M) - -#define RATE_MM_MCS_0 (TX_MODE_HT_MM | PHY_RATE_MCS0) -#define RATE_MM_MCS_1 (TX_MODE_HT_MM | PHY_RATE_MCS1) -#define RATE_MM_MCS_2 (TX_MODE_HT_MM | PHY_RATE_MCS2) -#define RATE_MM_MCS_3 (TX_MODE_HT_MM | PHY_RATE_MCS3) -#define RATE_MM_MCS_4 (TX_MODE_HT_MM | PHY_RATE_MCS4) -#define RATE_MM_MCS_5 (TX_MODE_HT_MM | PHY_RATE_MCS5) -#define RATE_MM_MCS_6 (TX_MODE_HT_MM | PHY_RATE_MCS6) -#define RATE_MM_MCS_7 (TX_MODE_HT_MM | PHY_RATE_MCS7) -#define RATE_MM_MCS_32 (TX_MODE_HT_MM | PHY_RATE_MCS32) - -#define RATE_GF_MCS_0 (TX_MODE_HT_GF | PHY_RATE_MCS0) -#define RATE_GF_MCS_1 (TX_MODE_HT_GF | PHY_RATE_MCS1) -#define RATE_GF_MCS_2 (TX_MODE_HT_GF | PHY_RATE_MCS2) -#define RATE_GF_MCS_3 (TX_MODE_HT_GF | PHY_RATE_MCS3) -#define RATE_GF_MCS_4 (TX_MODE_HT_GF | PHY_RATE_MCS4) -#define RATE_GF_MCS_5 (TX_MODE_HT_GF | PHY_RATE_MCS5) -#define RATE_GF_MCS_6 (TX_MODE_HT_GF | PHY_RATE_MCS6) -#define RATE_GF_MCS_7 (TX_MODE_HT_GF | PHY_RATE_MCS7) -#define RATE_GF_MCS_32 (TX_MODE_HT_GF | PHY_RATE_MCS32) - -#define RATE_TX_MODE_MASK BITS(6,7) -#define RATE_TX_MODE_OFFSET 6 -#define RATE_CODE_GET_TX_MODE(_ucRateCode) ((_ucRateCode & RATE_TX_MODE_MASK) >> RATE_TX_MODE_OFFSET) -#define RATE_PHY_RATE_MASK BITS(0,5) -#define RATE_PHY_RATE_OFFSET 0 -#define RATE_CODE_GET_PHY_RATE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_MASK) >> RATE_PHY_RATE_OFFSET) -#define RATE_PHY_RATE_SHORT_PREAMBLE BIT(4) -#define RATE_CODE_IS_SHORT_PREAMBLE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_SHORT_PREAMBLE)?TRUE:FALSE) - - -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - -/*! CNM(STA_RECORD_T) related definition */ -#define CFG_STA_REC_NUM 20 - -/* PHY TYPE bit definitions */ -#define PHY_TYPE_BIT_HR_DSSS BIT(PHY_TYPE_HR_DSSS_INDEX) /* HR/DSSS PHY (clause 18) */ -#define PHY_TYPE_BIT_ERP BIT(PHY_TYPE_ERP_INDEX) /* ERP PHY (clause 19) */ -#define PHY_TYPE_BIT_OFDM BIT(PHY_TYPE_OFDM_INDEX) /* OFDM 5 GHz PHY (clause 17) */ -#define PHY_TYPE_BIT_HT BIT(PHY_TYPE_HT_INDEX) /* HT PHY (clause 20) */ - - -/* PHY TYPE set definitions */ -#define PHY_TYPE_SET_802_11ABGN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11BGN (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11GN (PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11AN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11ABG (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11BG (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11A (PHY_TYPE_BIT_OFDM) - -#define PHY_TYPE_SET_802_11G (PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11B (PHY_TYPE_BIT_HR_DSSS) - -#define PHY_TYPE_SET_802_11N (PHY_TYPE_BIT_HT) - - -/* Rate set bit definitions */ -#define RATE_SET_BIT_1M BIT(RATE_1M_INDEX) /* Bit 0: 1M */ -#define RATE_SET_BIT_2M BIT(RATE_2M_INDEX) /* Bit 1: 2M */ -#define RATE_SET_BIT_5_5M BIT(RATE_5_5M_INDEX) /* Bit 2: 5.5M */ -#define RATE_SET_BIT_11M BIT(RATE_11M_INDEX) /* Bit 3: 11M */ -#define RATE_SET_BIT_22M BIT(RATE_22M_INDEX) /* Bit 4: 22M */ -#define RATE_SET_BIT_33M BIT(RATE_33M_INDEX) /* Bit 5: 33M */ -#define RATE_SET_BIT_6M BIT(RATE_6M_INDEX) /* Bit 6: 6M */ -#define RATE_SET_BIT_9M BIT(RATE_9M_INDEX) /* Bit 7: 9M */ -#define RATE_SET_BIT_12M BIT(RATE_12M_INDEX) /* Bit 8: 12M */ -#define RATE_SET_BIT_18M BIT(RATE_18M_INDEX) /* Bit 9: 18M */ -#define RATE_SET_BIT_24M BIT(RATE_24M_INDEX) /* Bit 10: 24M */ -#define RATE_SET_BIT_36M BIT(RATE_36M_INDEX) /* Bit 11: 36M */ -#define RATE_SET_BIT_48M BIT(RATE_48M_INDEX) /* Bit 12: 48M */ -#define RATE_SET_BIT_54M BIT(RATE_54M_INDEX) /* Bit 13: 54M */ -#define RATE_SET_BIT_HT_PHY BIT(RATE_HT_PHY_INDEX) /* Bit 14: BSS Selector */ - - -/* Rate set definitions */ -#define RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_HT (RATE_SET_ERP) -//#define RATE_SET_HT (RATE_SET_ERP | RATE_SET_BIT_HT_PHY) /* NOTE(Kevin): TBD */ - - -#define RATE_SET_ALL_ABG RATE_SET_ERP - -#define BASIC_RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M) - -#define BASIC_RATE_SET_HR_DSSS_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define BASIC_RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_100 RATE_SET_ALL_ABG - -#define INITIAL_RATE_SET_RCPI_80 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_60 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M) - -#define INITIAL_RATE_SET(_rcpi) (INITIAL_RATE_SET_ ## _rcpi) - -#define RCPI_100 100 /* -60 dBm */ -#define RCPI_80 80 /* -70 dBm */ -#define RCPI_60 60 /* -80 dBm */ - - -/* The number of RCPI records used to calculate their average value */ -#define MAX_NUM_RCPI_RECORDS 10 - -/* The number of RCPI records used to calculate their average value */ -#define NO_RCPI_RECORDS -128 -#define MAX_RCPI_DBM 0 -#define MIN_RCPI_DBM -100 - - -#define MAC_TX_RESERVED_FIELD 0 /* NOTE(Kevin): Should defined in tx.h */ - -#define MAX_ASSOC_ID (CFG_STA_REC_NUM) /* Available AID: 1 ~ 20(STA_REC_NUM) */ - - -#define MAX_DEAUTH_INFO_COUNT 4 /* NOTE(Kevin): Used in auth.c */ -#define MIN_DEAUTH_INTERVAL_MSEC 500 /* The minimum interval if continuously send Deauth Frame */ - -/* Authentication Type */ -#define AUTH_TYPE_OPEN_SYSTEM BIT(AUTH_ALGORITHM_NUM_OPEN_SYSTEM) -#define AUTH_TYPE_SHARED_KEY BIT(AUTH_ALGORITHM_NUM_SHARED_KEY) -#define AUTH_TYPE_FAST_BSS_TRANSITION BIT(AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION) - -/* Authentication Retry Limit */ -#define TX_AUTH_ASSOCI_RETRY_LIMIT 2 -#define TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING 1 - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_16 PHY_TYPE, *P_PHY_TYPE; -typedef UINT_8 RCPI, *P_RCPI; -typedef UINT_8 ALC_VAL, *P_ALC_VAL; - -typedef enum _ENUM_HW_BSSID_T { - BSSID_0 = 0, - BSSID_1, - BSSID_NUM -} ENUM_HW_BSSID_T; - -typedef enum _ENUM_HW_MAC_ADDR_T { - MAC_ADDR_0 = 0, - MAC_ADDR_1, - MAC_ADDR_NUM -} ENUM_HW_MAC_ADDR_T; - -typedef enum _ENUM_HW_OP_MODE_T { - HW_OP_MODE_STA = 0, - HW_OP_MODE_AP, - HW_OP_MODE_ADHOC, - HW_OP_MODE_NUM -} ENUM_HW_OP_MODE_T; - -typedef enum _ENUM_TSF_T { - ENUM_LOCAL_TSF_0, - ENUM_LOCAL_TSF_1, - ENUM_LOCAL_TSF_NUM -} ENUM_LOCAL_TSF_T, *P_ENUM_LOCAL_TSF_T; - -typedef enum _HAL_TS_HW_UPDATE_MODE { - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME, - HAL_TSF_HW_UPDATE_BY_TICK_ONLY, - HAL_TSF_HW_UPDATE_BY_RECEIVED_FRAME_ONLY, - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME_AD_HOC -} HAL_TSF_HW_UPDATE_MODE; - - -typedef enum _ENUM_AC_T { - AC0 = 0, - AC1, - AC2, - AC3, - AC_NUM -} ENUM_AC_T, *P_ENUM_AC_T; - - -/* The Type of Network been activated */ -typedef enum _ENUM_NETWORK_TYPE_INDEX_T { - NETWORK_TYPE_AIS_INDEX = 0, - NETWORK_TYPE_P2P_INDEX, - NETWORK_TYPE_BOW_INDEX, - NETWORK_TYPE_INDEX_NUM -} ENUM_NETWORK_TYPE_INDEX_T; - - -/* The Type of STA Type. */ -typedef enum _ENUM_STA_TYPE_INDEX_T { - STA_TYPE_LEGACY_INDEX = 0, - STA_TYPE_P2P_INDEX, - STA_TYPE_BOW_INDEX, - STA_TYPE_INDEX_NUM -} -ENUM_STA_TYPE_INDEX_T; - -#define STA_ROLE_BASE_INDEX 4 - -typedef enum _ENUM_STA_ROLE_INDEX_T { - STA_ROLE_ADHOC_INDEX = STA_ROLE_BASE_INDEX, //4 - STA_ROLE_CLIENT_INDEX, - STA_ROLE_AP_INDEX, - STA_ROLE_DLS_INDEX -} ENUM_STA_ROLE_INDEX_T; - -/* The Power State of a specific Network */ -typedef enum _ENUM_PWR_STATE_T { - PWR_STATE_IDLE = 0, - PWR_STATE_ACTIVE, - PWR_STATE_PS, - PWR_STATE_NUM -} ENUM_PWR_STATE_T; - -typedef enum _ENUM_PHY_TYPE_INDEX_T { - //PHY_TYPE_DSSS_INDEX, /* DSSS PHY (clause 15) -- Not used anymore */ - PHY_TYPE_HR_DSSS_INDEX = 0, /* HR/DSSS PHY (clause 18) */ - PHY_TYPE_ERP_INDEX, /* ERP PHY (clause 19) */ - PHY_TYPE_ERP_P2P_INDEX, /* ERP PHY (clause 19) w/o HR/DSSS */ - PHY_TYPE_OFDM_INDEX, /* OFDM 5 GHz PHY (clause 17) */ - PHY_TYPE_HT_INDEX, /* HT PHY (clause 20) */ - PHY_TYPE_INDEX_NUM // 5 -} ENUM_PHY_TYPE_INDEX_T, *P_ENUM_PHY_TYPE_INDEX_T; - -typedef enum _ENUM_ACPI_STATE_T { - ACPI_STATE_D0 = 0, - ACPI_STATE_D1, - ACPI_STATE_D2, - ACPI_STATE_D3 -} ENUM_ACPI_STATE_T; - -/* The operation mode of a specific Network */ -typedef enum _ENUM_OP_MODE_T { - OP_MODE_INFRASTRUCTURE = 0, /* Infrastructure/GC */ - OP_MODE_IBSS, /* AdHoc */ - OP_MODE_ACCESS_POINT, /* For GO */ - OP_MODE_P2P_DEVICE, /* P2P Device */ - OP_MODE_BOW, - OP_MODE_NUM -} ENUM_OP_MODE_T, *P_ENUM_OP_MODE_T; - -typedef enum _ENUM_CHNL_EXT_T { - CHNL_EXT_SCN = 0, - CHNL_EXT_SCA = 1, - CHNL_EXT_RES = 2, - CHNL_EXT_SCB = 3 -} ENUM_CHNL_EXT_T, *P_ENUM_CHNL_EXT_T; - -/* This starting freq of the band is unit of kHz */ -typedef enum _ENUM_BAND_T { - BAND_NULL, - BAND_2G4, - BAND_5G, - BAND_NUM -} ENUM_BAND_T, *P_ENUM_BAND_T; - -/* Provide supported channel list to other components in array format */ -typedef struct _RF_CHANNEL_INFO_T { - ENUM_BAND_T eBand; - UINT_8 ucChannelNum; -} RF_CHANNEL_INFO_T, *P_RF_CHANNEL_INFO_T; - -typedef enum _ENUM_RATE_INDEX_T { - RATE_1M_INDEX = 0, /* 1M */ - RATE_2M_INDEX, /* 2M */ - RATE_5_5M_INDEX, /* 5.5M */ - RATE_11M_INDEX, /* 11M */ - RATE_22M_INDEX, /* 22M */ - RATE_33M_INDEX, /* 33M */ - RATE_6M_INDEX, /* 6M */ - RATE_9M_INDEX, /* 9M */ - RATE_12M_INDEX, /* 12M */ - RATE_18M_INDEX, /* 18M */ - RATE_24M_INDEX, /* 24M */ - RATE_36M_INDEX, /* 36M */ - RATE_48M_INDEX, /* 48M */ - RATE_54M_INDEX, /* 54M */ - RATE_HT_PHY_INDEX, /* BSS Selector - HT PHY */ - RATE_NUM // 15 -} ENUM_RATE_INDEX_T, *P_ENUM_RATE_INDEX_T; - -typedef enum _ENUM_HT_RATE_INDEX_T { - HT_RATE_MCS0_INDEX = 0, - HT_RATE_MCS1_INDEX, - HT_RATE_MCS2_INDEX, - HT_RATE_MCS3_INDEX, - HT_RATE_MCS4_INDEX, - HT_RATE_MCS5_INDEX, - HT_RATE_MCS6_INDEX, - HT_RATE_MCS7_INDEX, - HT_RATE_MCS32_INDEX, - HT_RATE_NUM // 9 -} ENUM_HT_RATE_INDEX_T, *P_ENUM_HT_RATE_INDEX_T; - -typedef enum _ENUM_PREMABLE_OPTION_T { - PREAMBLE_DEFAULT_LONG_NONE = 0, /* LONG for PHY_TYPE_HR_DSSS, NONE for PHY_TYPE_OFDM */ - PREAMBLE_OPTION_SHORT, /* SHORT mandatory for PHY_TYPE_ERP, SHORT option for PHY_TYPE_HR_DSSS */ - PREAMBLE_HT_MIXED_MODE, - PREAMBLE_HT_GREEN_FIELD, - PREAMBLE_OPTION_NUM -} ENUM_PREMABLE_OPTION_T, *P_ENUM_PREMABLE_OPTION_T; - -typedef enum _ENUM_MODULATION_SYSTEM_T { - MODULATION_SYSTEM_CCK = 0, - MODULATION_SYSTEM_OFDM, - MODULATION_SYSTEM_HT20, - MODULATION_SYSTEM_HT40, - MODULATION_SYSTEM_NUM -} ENUM_MODULATION_SYSTEM_T, *P_ENUM_MODULATION_SYSTEM_T; - -typedef enum _ENUM_MODULATION_TYPE_T { - MODULATION_TYPE_CCK_BPSK = 0, - MODULATION_TYPE_QPSK, - MODULATION_TYPE_16QAM, - MODULATION_TYPE_64QAM, - MODULATION_TYPE_NUM -} ENUM_MODULATION_TYPE_T, *P_ENUM_MODULATION_TYPE_T; - -typedef enum _ENUM_PS_FORWARDING_TYPE_T { - PS_FORWARDING_TYPE_NON_PS = 0, - PS_FORWARDING_TYPE_DELIVERY_ENABLED, - PS_FORWARDING_TYPE_NON_DELIVERY_ENABLED, - PS_FORWARDING_MORE_DATA_ENABLED, - PS_FORWARDING_TYPE_NUM -} ENUM_PS_FORWARDING_TYPE_T, *P_ENUM_PS_FORWARDING_TYPE_T; - -typedef struct _DEAUTH_INFO_T { - UINT_8 aucRxAddr[MAC_ADDR_LEN]; - OS_SYSTIME rLastSendTime; -} DEAUTH_INFO_T, *P_DEAUTH_INFO_T; - -/*----------------------------------------------------------------------------*/ -/* Information Element (IE) handlers */ -/*----------------------------------------------------------------------------*/ -typedef VOID (*PFN_APPEND_IE_FUNC)(P_ADAPTER_T, P_MSDU_INFO_T); -typedef VOID (*PFN_HANDLE_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T); -typedef VOID (*PFN_VERIFY_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T, PUINT_16); -typedef UINT_32 (*PFN_CALCULATE_VAR_IE_LEN_FUNC)(P_ADAPTER_T, ENUM_NETWORK_TYPE_INDEX_T, P_STA_RECORD_T); - -typedef struct _APPEND_IE_ENTRY_T { - UINT_16 u2EstimatedIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_IE_ENTRY_T, *P_APPEND_IE_ENTRY_T; - -typedef struct _APPEND_VAR_IE_ENTRY_T { - UINT_16 u2EstimatedFixedIELen; /* For Fixed Length */ - PFN_CALCULATE_VAR_IE_LEN_FUNC pfnCalculateVariableIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_VAR_IE_ENTRY_T, *P_APPEND_VAR_IE_ENTRY_T; - -typedef struct _HANDLE_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_HANDLE_IE_FUNC pfnHandleIE; -} HANDLE_IE_ENTRY_T, *P_HANDLE_IE_ENTRY_T; - -typedef struct _VERIFY_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_VERIFY_IE_FUNC pfnVarifyIE; -} VERIFY_IE_ENTRY_T, *P_VERIFY_IE_ENTRY_T; - -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration */ -/*----------------------------------------------------------------------------*/ -typedef enum _ENUM_PARAM_CONNECTION_POLICY_T { - CONNECT_BY_SSID_BEST_RSSI = 0, - CONNECT_BY_SSID_GOOD_RSSI_MIN_CH_LOAD, - CONNECT_BY_SSID_ANY, /* NOTE(Kevin): Needed by WHQL */ - CONNECT_BY_BSSID, - CONNECT_BY_CUSTOMIZED_RULE /* NOTE(Kevin): TBD */ -} ENUM_PARAM_CONNECTION_POLICY_T, *P_ENUM_PARAM_CONNECTION_POLICY_T; - -typedef enum _ENUM_PARAM_PREAMBLE_TYPE_T { - PREAMBLE_TYPE_LONG = 0, - PREAMBLE_TYPE_SHORT, - PREAMBLE_TYPE_AUTO /*!< Try preamble short first, if fail tray preamble long. */ -} ENUM_PARAM_PREAMBLE_TYPE_T, *P_ENUM_PARAM_PREAMBLE_TYPE_T; - -/* This is enum defined for user to select a phy config listed in combo box */ -typedef enum _ENUM_PARAM_PHY_CONFIG_T { - PHY_CONFIG_802_11ABG = 0, /*!< Can associated with 802.11abg AP but without n capability, Scan dual band. */ - PHY_CONFIG_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11ABGN, /*!< Can associated with 802.11abgn AP, Scan dual band. */ - PHY_CONFIG_802_11BGN, /*!< Can associated with 802_11bgn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11AN, /*!< Can associated with 802_11an AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11GN, /*!< Can associated with 802_11gn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_NUM // 9 -} ENUM_PARAM_PHY_CONFIG_T, *P_ENUM_PARAM_PHY_CONFIG_T; - -/* This is enum defined for user to select an AP Mode */ -typedef enum _ENUM_PARAM_AP_MODE_T { - AP_MODE_11B = 0, /*!< Create 11b BSS if we support 802.11abg/802.11bg. */ - AP_MODE_MIXED_11BG, /*!< Create 11bg mixed BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G, /*!< Create 11g only BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G_P2P, /*!< Create 11g only BSS for P2P if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11A, /*!< Create 11a only BSS if we support 802.11abg. */ - AP_MODE_NUM // 4 -} ENUM_PARAM_AP_MODE_T, *P_ENUM_PARAM_AP_MODE_T; - - -/* Masks for determining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define NETWORK_TYPE_AIS_MASK BIT(NETWORK_TYPE_AIS_INDEX) -#define NETWORK_TYPE_P2P_MASK BIT(NETWORK_TYPE_P2P_INDEX) -#define NETWORK_TYPE_BOW_MASK BIT(NETWORK_TYPE_BOW_INDEX) -#define STA_TYPE_LEGACY_MASK BIT(STA_TYPE_LEGACY_INDEX) -#define STA_TYPE_P2P_MASK BIT(STA_TYPE_P2P_INDEX) -#define STA_TYPE_BOW_MASK BIT(STA_TYPE_BOW_INDEX) -#define STA_TYPE_ADHOC_MASK BIT(STA_ROLE_ADHOC_INDEX) -#define STA_TYPE_CLIENT_MASK BIT(STA_ROLE_CLIENT_INDEX) -#define STA_TYPE_AP_MASK BIT(STA_ROLE_AP_INDEX) -#define STA_TYPE_DLS_MASK BIT(STA_ROLE_DLS_INDEX) - -/* Macros for obtaining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define IS_STA_IN_AIS(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) -#define IS_STA_IN_P2P(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) -#define IS_STA_IN_BOW(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) -#define IS_STA_LEGACY_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_LEGACY_MASK) -#define IS_STA_P2P_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_P2P_MASK) -#define IS_STA_BOW_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_BOW_MASK) -#define IS_ADHOC_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_ADHOC_MASK) -#define IS_CLIENT_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_CLIENT_MASK) -#define IS_AP_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_AP_MASK) -#define IS_DLS_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_DLS_MASK) - -/* The ENUM_STA_TYPE_T accounts for ENUM_NETWORK_TYPE_T and ENUM_STA_ROLE_INDEX_T. - * * It is a merged version of Network Type and STA Role. - * */ -typedef enum _ENUM_STA_TYPE_T { - STA_TYPE_LEGACY_AP = (STA_TYPE_LEGACY_MASK | STA_TYPE_AP_MASK), - STA_TYPE_LEGACY_CLIENT = (STA_TYPE_LEGACY_MASK | STA_TYPE_CLIENT_MASK), - STA_TYPE_ADHOC_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_ADHOC_MASK), -#if CFG_ENABLE_WIFI_DIRECT - STA_TYPE_P2P_GO = (STA_TYPE_P2P_MASK | STA_TYPE_AP_MASK), - STA_TYPE_P2P_GC = (STA_TYPE_P2P_MASK | STA_TYPE_CLIENT_MASK), -#endif -#if CFG_ENABLE_BT_OVER_WIFI - STA_TYPE_BOW_AP = (STA_TYPE_BOW_MASK | STA_TYPE_AP_MASK), - STA_TYPE_BOW_CLIENT = (STA_TYPE_BOW_MASK | STA_TYPE_CLIENT_MASK), -#endif - STA_TYPE_DLS_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_DLS_MASK) -} ENUM_STA_TYPE_T, *P_ENUM_STA_TYPE_T; - -/* The type of BSS we discovered */ -typedef enum _ENUM_BSS_TYPE_T { - BSS_TYPE_INFRASTRUCTURE = 1, - BSS_TYPE_IBSS, - BSS_TYPE_P2P_DEVICE, - BSS_TYPE_BOW_DEVICE, - BSS_TYPE_NUM -} ENUM_BSS_TYPE_T, *P_ENUM_BSS_TYPE_T; - -/*----------------------------------------------------------------------------*/ -/* RSN structures */ -/*----------------------------------------------------------------------------*/ -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack(1) -//#endif - -#define MAX_NUM_SUPPORTED_CIPHER_SUITES 8 /* max number of supported cipher suites */ -#if CFG_SUPPORT_802_11W -#define MAX_NUM_SUPPORTED_AKM_SUITES 8 /* max number of supported AKM suites */ -#else -#define MAX_NUM_SUPPORTED_AKM_SUITES 6 /* max number of supported AKM suites */ -#endif - -/* Structure of RSN Information */ -typedef struct _RSN_INFO_T { - UINT_8 ucElemId; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_AKM_SUITES]; - UINT_16 u2RsnCap; - BOOLEAN fgRsnCapPresent; -} /*__KAL_ATTRIB_PACKED__*/ RSN_INFO_T, *P_RSN_INFO_T; - -#define MAX_NUM_SUPPORTED_WAPI_AKM_SUITES 1 /* max number of supported AKM suites */ -#define MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES 1 /* max number of supported cipher suites */ - -/* Structure of WAPI Information */ -typedef struct _WAPI_INFO_T { - UINT_8 ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_WAPI_AKM_SUITES]; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES]; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2WapiCap; - UINT_16 u2Bkid; - UINT_8 aucBkid[1][16]; -} /* __KAL_ATTRIB_PACKED__*/ WAPI_INFO_T, *P_WAPI_INFO_T; - -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack() -//#endif - - -#if CFG_ENABLE_WIFI_DIRECT - -typedef struct _P2P_DEVICE_TYPE_T { - UINT_16 u2CategoryID; - UINT_16 u2SubCategoryID; -} P2P_DEVICE_TYPE_T, *P_P2P_DEVICE_TYPE_T; - -typedef struct _P2P_DEVICE_DESC_T { - LINK_ENTRY_T rLinkEntry; - BOOLEAN fgDevInfoValid; - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Interface Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method support. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[8]; // Reference to P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT - UINT_16 u2NameLength; - UINT_8 aucName[32]; // Reference to WPS_ATTRI_MAX_LEN_DEVICE_NAME - // TODO: Service Information or PasswordID valid? -} P2P_DEVICE_DESC_T, *P_P2P_DEVICE_DESC_T; - -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static const UINT_8 aucRateIndex2RateCode[PREAMBLE_OPTION_NUM][RATE_NUM] = { - { /* Long Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_LONG, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_LONG, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_LONG, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Short Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_SHORT, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_SHORT, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_SHORT, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Mixed Mode(Option) */ - RATE_MM_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_MM_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_MM_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_MM_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_MM_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_MM_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_MM_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_MM_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_MM_MCS_32 /* RATE_MCS32_INDEX, */ - }, - { /* Green Field(Option) */ - RATE_GF_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_GF_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_GF_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_GF_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_GF_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_GF_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_GF_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_GF_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_GF_MCS_32 /* RATE_MCS32_INDEX, */ - } -}; - -static const UINT_8 aucRateTableSize[PREAMBLE_OPTION_NUM] = { - RATE_HT_PHY_INDEX, - RATE_HT_PHY_INDEX, - HT_RATE_NUM, - HT_RATE_NUM -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros to get and set the wireless LAN frame fields those are 16/32 bits in - length. */ -#define WLAN_GET_FIELD_16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0]) | ((UINT_16) __cp[1] << 8); \ - } - -#define WLAN_GET_FIELD_BE16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0] << 8) | ((UINT_16) __cp[1]); \ - } - -#define WLAN_GET_FIELD_32(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_32)(_value_p) = ((UINT_32) __cp[0]) | ((UINT_32) __cp[1] << 8) | \ - ((UINT_32) __cp[2] << 16) | ((UINT_32) __cp[3] << 24); \ - } - -#define WLAN_GET_FIELD_64(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_64)(_value_p) = \ - ((UINT_64) __cp[0]) | ((UINT_64) __cp[1] << 8) | \ - ((UINT_64) __cp[2] << 16) | ((UINT_64) __cp[3] << 24) | \ - ((UINT_64) __cp[4] << 32) | ((UINT_64) __cp[5] << 40) | \ - ((UINT_64) __cp[6] << 48) | ((UINT_64) __cp[7] << 56); \ - } - -#define WLAN_SET_FIELD_16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - } - -#define WLAN_SET_FIELD_BE16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) ((_value) >> 8); \ - __cp[1] = (UINT_8) (_value); \ - } - -#define WLAN_SET_FIELD_32(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - __cp[2] = (UINT_8) ((_value) >> 16); \ - __cp[3] = (UINT_8) ((_value) >> 24); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_DEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic_cmd_event.h deleted file mode 100755 index 3c482911d4b4..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic_cmd_event.h +++ /dev/null @@ -1,1888 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic_cmd_event.h#1 $ -*/ - -/*! \file "nic_cmd_event.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: nic_cmd_event.h $ - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * redefine the CMD_ID_SET_TXPWR_CTRL value. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 30 2011 cm.chang - * [WCXRP00001128] [MT5931 Wi-Fi][FW] Update BB/RF setting based on RF doc v0.7 for LGE spec - * 1. Add a new CMD for driver to set device mode - * 2. Update calibration parameters - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 26 2011 cp.wu - * [WCXRP00001065] [MT6620 Wi-Fi][MT5931][FW][DRV] Adding parameter for controlling minimum channel dwell time for scanning - * add interface for control minimum channel dwell time for scanning. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * add osc stable time command structure - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update cmd format of BSS INFO, always sync OwnMac to FW no matter P2P is enabled or not.. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Sync HT operation element information from host to FW - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 15 2010 cm.chang - * NULL - * Add new CMD for TX power, 5G power offset and power parameters - * - * 09 07 2010 yuche.tsai - * NULL - * Add a pointer in P2P SCAN RESULT structure. This pointer - * is pointed to a IE buffer for this P2p device. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 george.huang - * NULL - * add new CMD ID definition - * - * 08 16 2010 yuche.tsai - * NULL - * Add a field in BSS INFO cmd to change interface address for P2P. (switching between Device Addr & Interface Addr) - * - * 08 12 2010 yuche.tsai - * NULL - * Add interface address indication when indicate connection status. - * It is requested by supplicant to do 4 way handshake. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Change data structure for P2P Device scan result, all channel time for scan command. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 26 2010 yuche.tsai - * - * Add P2P Device Found Event. - * Channel extention option in scan abort command. - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 george.huang - * - * DWORD align for the CMD data structure - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 cp.wu - * - * reorder members of CMD_SET_BSS_INFO. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add BSS/STA_REC commands for integration. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * the frequency is used for adhoc connection only - * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * OID_802_11_RSSI, - * * * OID_802_11_RSSI_TRIGGER, - * * * OID_802_11_STATISTICS, - * * * OID_802_11_DISASSOCIATE, - * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * and result is retrieved by get ATInfo instead - * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-12-11 18:35:07 GMT mtk02752 -** add CMD added in CMD/EVEN document v0.8 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-12-10 16:39:37 GMT mtk02752 -** eliminate unused definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-12-10 09:55:11 GMT mtk02752 -** command ID/event ID revised -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-09 13:57:37 GMT MTK02468 -** Added event ids (EVENT_ID_RX_ADDBA and EVENT_ID_RX_DELBA) -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-08 17:35:39 GMT mtk02752 -** + add event ID for EVENT_ID_TEST_STATUS (rf test) -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-12-07 23:01:09 GMT mtk02752 -** add data structure for RF_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-12-03 16:22:56 GMT mtk01461 -** Modify the element - i4RSSI in EVENT of SCAN RESULT -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-30 10:54:44 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T, while 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-26 10:16:58 GMT mtk02752 -** resync EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-25 21:34:01 GMT mtk02752 -** sync. EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-25 21:03:48 GMT mtk02752 -** refine MGMT_FRAME -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-25 18:17:47 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result and presume max. ie length = 600 bytes -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 22:41:20 GMT mtk02752 -** add EVENT_SCAN_RESULT_T definition -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-11-23 20:29:16 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-11-23 14:46:01 GMT mtk02752 -** add new command/event structure upon CM@SD1's documentation -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-13 15:13:40 GMT mtk02752 -** add command definition for CMD_BUILD_CONNECTION and EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-20 12:22:22 GMT mtk01461 -** Add SeqNum field to Event Header -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:11 GMT mtk01461 -** Update structure of HIF_EVENT_HEADER_T and EVENT_HDR_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 12:10:36 GMT mtk01461 -** Add Common Set CMD Callback for MCR Write and other Set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:17 GMT mtk01461 -** Command Done Handler -*/ -#ifndef _NIC_CMD_EVENT_H -#define _NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CMD_STATUS_SUCCESS 0 -#define CMD_STATUS_REJECTED 1 -#define CMD_STATUS_UNKNOWN 2 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -#define MAX_IE_LENGTH (600) -#define MAX_WSC_IE_LENGTH (400) - -/* Action field in structure CMD_CH_PRIVILEGE_T */ -#define CMD_CH_ACTION_REQ 0 -#define CMD_CH_ACTION_ABORT 1 - -/* Status field in structure EVENT_CH_PRIVILEGE_T */ -#define EVENT_CH_STATUS_GRANT 0 - - -typedef enum _ENUM_CMD_ID_T { - CMD_ID_TEST_MODE = 1, /* 0x01 (Set) */ - CMD_ID_RESET_REQUEST, /* 0x02 (Set) */ - CMD_ID_BUILD_CONNECTION, /* 0x03 (Set) */ - CMD_ID_SCAN_REQ_V2, /* 0x04 (Set) */ - CMD_ID_NIC_POWER_CTRL, /* 0x05 (Set) */ - CMD_ID_POWER_SAVE_MODE, /* 0x06 (Set) */ - CMD_ID_LINK_ATTRIB, /* 0x07 (Set) */ - CMD_ID_ADD_REMOVE_KEY, /* 0x08 (Set) */ - CMD_ID_DEFAULT_KEY_ID, /* 0x09 (Set) */ - CMD_ID_INFRASTRUCTURE, /* 0x0a (Set) */ - CMD_ID_SET_RX_FILTER, /* 0x0b (Set) */ - CMD_ID_DOWNLOAD_BUF, /* 0x0c (Set) */ - CMD_ID_WIFI_START, /* 0x0d (Set) */ - CMD_ID_CMD_BT_OVER_WIFI, /* 0x0e (Set) */ - CMD_ID_SET_MEDIA_CHANGE_DELAY_TIME, /* 0x0f (Set) */ - CMD_ID_SEND_ADDBA_RSP, /* 0x10 (Set) */ - CMD_ID_WAPI_MODE, /* 0x11 (Set) (obsolete) */ - CMD_ID_WAPI_ASSOC_INFO, /* 0x12 (Set) (obsolete) */ - CMD_ID_SET_DOMAIN_INFO, /* 0x13 (Set) */ - CMD_ID_SET_IP_ADDRESS, /* 0x14 (Set) */ - CMD_ID_BSS_ACTIVATE_CTRL, /* 0x15 (Set) */ - CMD_ID_SET_BSS_INFO, /* 0x16 (Set) */ - CMD_ID_UPDATE_STA_RECORD, /* 0x17 (Set) */ - CMD_ID_REMOVE_STA_RECORD, /* 0x18 (Set) */ - CMD_ID_INDICATE_PM_BSS_CREATED, /* 0x19 (Set) */ - CMD_ID_INDICATE_PM_BSS_CONNECTED, /* 0x1a (Set) */ - CMD_ID_INDICATE_PM_BSS_ABORT, /* 0x1b (Set) */ - CMD_ID_UPDATE_BEACON_CONTENT, /* 0x1c (Set) */ - CMD_ID_SET_BSS_RLM_PARAM, /* 0x1d (Set) */ - CMD_ID_SCAN_REQ, /* 0x1e (Set) */ - CMD_ID_SCAN_CANCEL, /* 0x1f (Set) */ - CMD_ID_CH_PRIVILEGE, /* 0x20 (Set) */ - CMD_ID_UPDATE_WMM_PARMS, /* 0x21 (Set) */ - CMD_ID_SET_WMM_PS_TEST_PARMS, /* 0x22 (Set) */ - CMD_ID_TX_AMPDU, /* 0x23 (Set) */ - CMD_ID_ADDBA_REJECT, /* 0x24 (Set) */ - CMD_ID_SET_PS_PROFILE_ADV, /* 0x25 (Set) */ - CMD_ID_SET_RAW_PATTERN, /* 0x26 (Set) */ - CMD_ID_CONFIG_PATTERN_FUNC, /* 0x27 (Set) */ - CMD_ID_SET_TX_PWR, /* 0x28 (Set) */ - CMD_ID_SET_5G_PWR_OFFSET, /* 0x29 (Set) */ - CMD_ID_SET_PWR_PARAM, /* 0x2A (Set) */ - CMD_ID_P2P_ABORT, /* 0x2B (Set) */ -#if CFG_STRESS_TEST_SUPPORT - CMD_ID_RANDOM_RX_RESET_EN = 0x2C, /* 0x2C (Set ) */ - CMD_ID_RANDOM_RX_RESET_DE = 0x2D, /* 0x2D (Set ) */ - CMD_ID_SAPP_EN = 0x2E, /* 0x2E (Set ) */ - CMD_ID_SAPP_DE = 0x2F, /* 0x2F (Set ) */ -#endif - CMD_ID_ROAMING_TRANSIT = 0x30, /* 0x30 (Set) */ - CMD_ID_SET_PHY_PARAM, /* 0x31 (Set) */ - CMD_ID_SET_NOA_PARAM, /* 0x32 (Set) */ - CMD_ID_SET_OPPPS_PARAM, /* 0x33 (Set) */ - CMD_ID_SET_UAPSD_PARAM, /* 0x34 (Set) */ - CMD_ID_SET_SIGMA_STA_SLEEP, /* 0x35 (Set) */ - CMD_ID_SET_EDGE_TXPWR_LIMIT, /* 0x36 (Set) */ - CMD_ID_SET_DEVICE_MODE, /* 0x37 (Set) */ - CMD_ID_SET_TXPWR_CTRL, /* 0x38 (Set) */ - CMD_ID_SET_AUTOPWR_CTRL, /* 0x39 (Set) */ - - CMD_ID_GET_NIC_CAPABILITY = 0x80, /* 0x80 (Query) */ - CMD_ID_GET_LINK_QUALITY, /* 0x81 (Query) */ - CMD_ID_GET_STATISTICS, /* 0x82 (Query) */ - CMD_ID_GET_CONNECTION_STATUS, /* 0x83 (Query) */ - CMD_ID_GET_ASSOC_INFO, /* 0x84 (Query) (obsolete) */ - - CMD_ID_BASIC_CONFIG = 0xc1, /* 0xc1 (Set / Query) */ - CMD_ID_ACCESS_REG, /* 0xc2 (Set / Query) */ - CMD_ID_MAC_MCAST_ADDR, /* 0xc3 (Set / Query) */ - CMD_ID_802_11_PMKID, /* 0xc4 (Set / Query) */ - CMD_ID_ACCESS_EEPROM, /* 0xc5 (Set / Query) */ - CMD_ID_SW_DBG_CTRL, /* 0xc6 (Set / Query) */ -#if 1/* CFG_SUPPORT_ANTI_PIRACY */ - CMD_ID_SEC_CHECK, /* 0xc7 (Set / Query) */ -#endif - CMD_ID_DUMP_MEM, /* 0xc8 (Query) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_ID_SET_RDD_CH = 0xE1, -#endif - - CMD_ID_SET_BWCS = 0xF1, -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - CMD_ID_SET_OSC = 0xf2, -#endif - -} ENUM_CMD_ID_T, *P_ENUM_CMD_ID_T; - -typedef enum _ENUM_EVENT_ID_T { - EVENT_ID_CMD_RESULT = 1, /* 0x01 (Query) */ - EVENT_ID_NIC_CAPABILITY, /* 0x02 (Query) */ - EVENT_ID_CONNECTION_STATUS, /* 0x03 (Query / Unsolicited) (obsolete) */ - EVENT_ID_SCAN_RESULT, /* 0x04 (Query / Unsolicited) (obselete) */ - EVENT_ID_LINK_QUALITY, /* 0x05 (Query / Unsolicited) */ - EVENT_ID_STATISTICS, /* 0x06 (Query) */ - EVENT_ID_MIC_ERR_INFO, /* 0x07 (Unsolicited) */ - EVENT_ID_ASSOC_INFO, /* 0x08 (Query - CMD_ID_GET_ASSOC_INFO) */ - EVENT_ID_BASIC_CONFIG, /* 0x09 (Query - CMD_ID_BASIC_CONFIG) */ - EVENT_ID_ACCESS_REG, /* 0x0a (Query - CMD_ID_ACCESS_REG) */ - EVENT_ID_MAC_MCAST_ADDR, /* 0x0b (Query - CMD_ID_MAC_MCAST_ADDR) */ - EVENT_ID_802_11_PMKID, /* 0x0c (Query - CMD_ID_802_11_PMKID) */ - EVENT_ID_ACCESS_EEPROM, /* 0x0d (Query - CMD_ID_ACCESS_EEPROM) */ - EVENT_ID_SLEEPY_NOTIFY, /* 0x0e (Query) */ - EVENT_ID_BT_OVER_WIFI, /* 0x0f (Unsolicited) */ - EVENT_ID_TEST_STATUS, /* 0x10 (Query - CMD_ID_TEST_MODE) */ - EVENT_ID_RX_ADDBA, /* 0x11 (Unsolicited) (obsolete) */ - EVENT_ID_RX_DELBA, /* 0x12 (Unsolicited) (obsolete) */ - EVENT_ID_ACTIVATE_STA_REC_T, /* 0x13 (Unsolicited) */ - EVENT_ID_DEACTIVATE_STA_REC_T, /* 0x14 (Unsolicited) */ - EVENT_ID_SCAN_DONE, /* 0x15 (Unsoiicited) */ - EVENT_ID_RX_FLUSH, /* 0x16 (Unsolicited) */ - EVENT_ID_TX_DONE, /* 0x17 (Unsolicited) */ - EVENT_ID_CH_PRIVILEGE, /* 0x18 (Unsolicited) */ - EVENT_ID_BSS_ABSENCE_PRESENCE = 0x19, /* 0x19 (Unsolicited) */ - EVENT_ID_STA_CHANGE_PS_MODE, /* 0x1A (Unsolicited) */ - EVENT_ID_BSS_BEACON_TIMEOUT, /* 0x1B (Unsolicited) */ - EVENT_ID_UPDATE_NOA_PARAMS, /* 0x1C (Unsolicited) */ - EVENT_ID_AP_OBSS_STATUS, /* 0x1D (Unsolicited) */ - EVENT_ID_STA_UPDATE_FREE_QUOTA, /* 0x1E (Unsolicited) */ - EVENT_ID_SW_DBG_CTRL, /* 0x1F (Query - CMD_ID_SW_DBG_CTRL) */ - EVENT_ID_ROAMING_STATUS, /* 0x20 (Unsolicited) */ - EVENT_ID_STA_AGING_TIMEOUT, /* 0x21 (Unsolicited) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - EVENT_ID_SEC_CHECK_RSP, /* 0x22 (Unsolicited) */ -#endif - EVENT_ID_SEND_DEAUTH, /* 0x23 (Unsolicited) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - EVENT_ID_UPDATE_RDD_STATUS, /* 0x24 (Unsolicited) */ -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - EVENT_ID_UPDATE_BWCS_STATUS = 0x25, /* 0x25 (Unsolicited) */ - EVENT_ID_UPDATE_BCM_DEBUG, /* 0x26 (Unsolicited) */ -#endif - EVENT_ID_RX_ERR, - EVENT_ID_DUMP_MEM -} ENUM_EVENT_ID_T, *P_ENUM_EVENT_ID_T; - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#ifndef LINUX -typedef UINT_8 CMD_STATUS; -#endif -/* for Event Packet (via HIF-RX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_CMD_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucCID; - UINT_8 ucSetQuery; - UINT_8 ucSeqNum; - UINT_8 aucReserved2; - - UINT_8 aucBuffer[0]; -} WIFI_CMD_T, *P_WIFI_CMD_T; - -/* for Command Packet (via HIF-TX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_EVENT_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - UINT_8 aucBuffer[0]; -} WIFI_EVENT_T, *P_WIFI_EVENT_T; - -// CMD_ID_TEST_MODE -typedef struct _CMD_TEST_CTRL_T { - UINT_8 ucAction; - UINT_8 aucReserved[3]; - union { - UINT_32 u4OpMode; - UINT_32 u4ChannelFreq; - PARAM_MTK_WIFI_TEST_STRUC_T rRfATInfo; - } u; -} CMD_TEST_CTRL_T, *P_CMD_TEST_CTRL_T; - -// EVENT_TEST_STATUS -typedef struct _PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T { - UINT_32 u4PktSentStatus; - UINT_32 u4PktSentCount; - UINT_16 u2AvgAlc; - UINT_8 ucCckGainControl; - UINT_8 ucOfdmGainControl; -} PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T; - -typedef struct _PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T { - UINT_32 u4IntRxOk; /*!< number of packets that Rx ok from interrupt */ - UINT_32 u4IntCrcErr; /*!< number of packets that CRC error from interrupt */ - UINT_32 u4IntShort; /*!< number of packets that is short preamble from interrupt */ - UINT_32 u4IntLong; /*!< number of packets that is long preamble from interrupt */ - UINT_32 u4PauRxPktCount; /*!< number of packets that Rx ok from PAU */ - UINT_32 u4PauCrcErrCount; /*!< number of packets that CRC error from PAU */ - UINT_32 u4PauRxFifoFullCount; /*!< number of packets that is short preamble from PAU */ - UINT_32 u4PauCCACount; /*!< CCA rising edge count */ -} PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T; - -typedef union _EVENT_TEST_STATUS { - PARAM_MTK_WIFI_TEST_STRUC_T rATInfo; -// PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T rTxStatus; -// PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T rRxStatus; -} EVENT_TEST_STATUS, *P_EVENT_TEST_STATUS; - -// CMD_BUILD_CONNECTION -typedef struct _CMD_BUILD_CONNECTION { - UINT_8 ucInfraMode; - UINT_8 ucAuthMode; - UINT_8 ucEncryptStatus; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - - /* Ad-hoc mode */ - UINT_16 u2BeaconPeriod; - UINT_16 u2ATIMWindow; - UINT_8 ucJoinOnly; - UINT_8 ucReserved; - UINT_32 u4FreqInKHz; - - /* for faster connection */ - UINT_8 aucScanResult[0]; -} CMD_BUILD_CONNECTION, *P_CMD_BUILD_CONNECTION; - -//CMD_ADD_REMOVE_KEY -typedef struct _CMD_802_11_KEY { - UINT_8 ucAddRemove; - UINT_8 ucTxKey; - UINT_8 ucKeyType; - UINT_8 ucIsAuthenticator; - UINT_8 aucPeerAddr[6]; - UINT_8 ucNetType; - UINT_8 ucAlgorithmId; - UINT_8 ucKeyId; - UINT_8 ucKeyLen; - UINT_8 aucReverved[2]; - UINT_8 aucKeyMaterial[32]; - UINT_8 aucKeyRsc[16]; -} CMD_802_11_KEY, *P_CMD_802_11_KEY; - -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; - -typedef struct _CMD_802_11_PMKID -{ - ULONG u4BSSIDInfoCount; - P_PMKID_ENTRY_T arPMKIDInfo[1]; -} CMD_802_11_PMKID, *P_CMD_802_11_PMKID; - -// CMD_BASIC_CONFIG -typedef struct _CMD_CSUM_OFFLOAD { - UINT_16 u2RxChecksum; // bit0: IP, bit1: UDP, bit2: TCP - UINT_16 u2TxChecksum; // bit0: IP, bit1: UDP, bit2: TCP -} CMD_CSUM_OFFLOAD, *P_CMD_CSUM_OFFLOAD; - -typedef struct _CMD_BASIC_CONFIG { - PARAM_MAC_ADDRESS rMyMacAddr; - UINT_8 ucNative80211; - UINT_8 aucReserved[1]; - - CMD_CSUM_OFFLOAD rCsumOffload; -} CMD_BASIC_CONFIG, *P_CMD_BASIC_CONFIG, EVENT_BASIC_CONFIG, *P_EVENT_BASIC_CONFIG; - -// CMD_MAC_MCAST_ADDR -typedef struct _CMD_MAC_MCAST_ADDR { - UINT_32 u4NumOfGroupAddr; - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; - PARAM_MAC_ADDRESS arAddress[MAX_NUM_GROUP_ADDR]; -} CMD_MAC_MCAST_ADDR, *P_CMD_MAC_MCAST_ADDR, EVENT_MAC_MCAST_ADDR, *P_EVENT_MAC_MCAST_ADDR; - -// CMD_ACCESS_EEPROM -typedef struct _CMD_ACCESS_EEPROM { - UINT_16 u2Offset; - UINT_16 u2Data; -} CMD_ACCESS_EEPROM, *P_CMD_ACCESS_EEPROM, EVENT_ACCESS_EEPROM, *P_EVENT_ACCESS_EEPROM; - -typedef struct _CMD_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} CMD_CUSTOM_NOA_PARAM_STRUC_T, *P_CMD_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} CMD_CUSTOM_OPPPS_PARAM_STRUC_T, *P_CMD_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} CMD_CUSTOM_UAPSD_PARAM_STRUC_T, *P_CMD_CUSTOM_UAPSD_PARAM_STRUC_T; - -// EVENT_CONNECTION_STATUS -typedef struct _EVENT_CONNECTION_STATUS { - UINT_8 ucMediaStatus; - UINT_8 ucReasonOfDisconnect; - - UINT_8 ucInfraMode; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - UINT_8 ucAuthenMode; - UINT_8 ucEncryptStatus; - UINT_16 u2BeaconPeriod; - UINT_16 u2AID; - UINT_16 u2ATIMWindow; - UINT_8 ucNetworkType; - UINT_8 aucReserved[1]; - UINT_32 u4FreqInKHz; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucInterfaceAddr[PARAM_MAC_ADDR_LEN]; -#endif - -} EVENT_CONNECTION_STATUS, *P_EVENT_CONNECTION_STATUS; - -// EVENT_NIC_CAPABILITY -typedef struct _EVENT_NIC_CAPABILITY { - UINT_16 u2ProductID; - UINT_16 u2FwVersion; - UINT_16 u2DriverVersion; - UINT_8 ucHw5GBandDisabled; - UINT_8 ucEepromUsed; - UINT_8 ucEfuseValid; - UINT_8 ucMacAddrValid; -#if CFG_REPORT_RFBB_VERSION - UINT_8 ucRfVersion; - UINT_8 ucPhyVersion; -#endif -#if CFG_ENABLE_CAL_LOG - UINT_8 ucRfCalFail; - UINT_8 ucBbCalFail; -#endif - UINT_8 aucReserved[2]; -} EVENT_NIC_CAPABILITY, *P_EVENT_NIC_CAPABILITY; - -// modified version of WLAN_BEACON_FRAME_BODY_T for simplier buffering -typedef struct _WLAN_BEACON_FRAME_BODY_T_LOCAL { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[MAX_IE_LENGTH]; /* Various IEs, start from SSID */ - UINT_16 u2IELength; /* This field is *NOT* carried by F/W but caculated by nic_rx */ -} WLAN_BEACON_FRAME_BODY_T_LOCAL, *P_WLAN_BEACON_FRAME_BODY_T_LOCAL; - -// EVENT_SCAN_RESULT -typedef struct _EVENT_SCAN_RESULT_T { - INT_32 i4RSSI; - UINT_32 u4LinkQuality; - UINT_32 u4DSConfig; /* Center frequency */ - UINT_32 u4DomainInfo; /* Require CM opinion */ - UINT_32 u4Reserved; - UINT_8 ucNetworkType; - UINT_8 ucOpMode; - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - WLAN_BEACON_FRAME_BODY_T_LOCAL rBeaconFrameBody; -} EVENT_SCAN_RESULT_T, *P_EVENT_SCAN_RESULT_T; - -/* event of tkip mic error */ -typedef struct _EVENT_MIC_ERR_INFO -{ - UINT_32 u4Flags; -} EVENT_MIC_ERR_INFO, *P_EVENT_MIC_ERR_INFO; - -typedef struct _EVENT_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} EVENT_PMKID_CANDIDATE_LIST_T, *P_EVENT_PMKID_CANDIDATE_LIST_T; - - -typedef struct _EVENT_CMD_RESULT { - UINT_8 ucCmdID; - UINT_8 ucStatus; - UINT_8 aucReserved[2]; -} EVENT_CMD_RESULT, *P_EVENT_CMD_RESULT; - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -typedef struct _CMD_MCU_LP_PARAM_T { - UINT_16 u2OscStableTime; - UINT_8 ucReserved[6]; -} CMD_MCU_LP_PARAM_T, *P_CMD_MCU_LP_PARAM_T; -#endif - - -// CMD_ID_ACCESS_REG & EVENT_ID_ACCESS_REG -typedef struct _CMD_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} CMD_ACCESS_REG, *P_CMD_ACCESS_REG; - -// CMD_DUMP_MEMORY -typedef struct _CMD_DUMP_MEM { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} CMD_DUMP_MEM, *P_CMD_DUMP_MEM; - -typedef struct _EVENT_DUMP_MEM_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; - UINT_8 aucBuffer[1]; -} EVENT_DUMP_MEM_T, *P_EVENT_DUMP_MEM_T; - -typedef struct _CMD_SW_DBG_CTRL_T { - UINT_32 u4Id; - UINT_32 u4Data; - /* Debug Support */ - UINT_32 u4DebugCnt[64]; -} CMD_SW_DBG_CTRL_T, *P_CMD_SW_DBG_CTRL_T; - - -// CMD_ID_LINK_ATTRIB -typedef struct _CMD_LINK_ATTRIB { - INT_8 cRssiTrigger; - UINT_8 ucDesiredRateLen; - UINT_16 u2DesiredRate[32]; - UINT_8 ucMediaStreamMode; - UINT_8 aucReserved[1]; -} CMD_LINK_ATTRIB, *P_CMD_LINK_ATTRIB; - -// CMD_ID_NIC_POWER_CTRL -typedef struct _CMD_NIC_POWER_CTRL { - UINT_8 ucPowerMode; - UINT_8 aucReserved[3]; -} CMD_NIC_POWER_CTRL, *P_CMD_NIC_POWER_CTRL; - -// CMD_ID_POWER_SAVE_MODE -typedef struct _CMD_PS_PROFILE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucPsProfile; - UINT_8 aucReserved[2]; -} CMD_PS_PROFILE_T, *P_CMD_PS_PROFILE_T; - - -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; -} EVENT_LINK_QUALITY, *P_EVENT_LINK_QUALITY; - -#if CFG_SUPPORT_P2P_RSSI_QUERY -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY_EX { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; - UINT_8 ucIsLQ0Rdy; - INT_8 cRssiP2P; /* For P2P Network. */ - INT_8 cLinkQualityP2P; - UINT_16 u2LinkSpeedP2P; - UINT_8 ucMediumBusyPercentageP2P; - UINT_8 ucIsLQ1Rdy; -} EVENT_LINK_QUALITY_EX, *P_EVENT_LINK_QUALITY_EX; -#endif - -// EVENT_ID_STATISTICS -typedef struct _EVENT_STATISTICS { - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; -} EVENT_STATISTICS, *P_EVENT_STATISTICS; - -// EVENT_ID_FW_SLEEPY_NOTIFY -typedef struct _EVENT_SLEEPY_NOTIFY { - UINT_8 ucSleepyState; - UINT_8 aucReserved[3]; -} EVENT_SLEEPY_NOTIFY, *P_EVENT_SLEEPY_NOTIFY; - -typedef struct _EVENT_ACTIVATE_STA_REC_T { - UINT_8 aucMacAddr[6]; - UINT_8 ucStaRecIdx; - UINT_8 ucNetworkTypeIndex; - BOOLEAN fgIsQoS; - BOOLEAN fgIsAP; - UINT_8 aucReserved[2]; -} EVENT_ACTIVATE_STA_REC_T, *P_EVENT_ACTIVATE_STA_REC_T; - -typedef struct _EVENT_DEACTIVATE_STA_REC_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_DEACTIVATE_STA_REC_T, *P_EVENT_DEACTIVATE_STA_REC_T; - -// CMD_BT_OVER_WIFI -typedef struct _CMD_BT_OVER_WIFI { - UINT_8 ucAction; /* 0: query, 1: setup, 2: destroy */ - UINT_8 ucChannelNum; - PARAM_MAC_ADDRESS rPeerAddr; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 PAL_Capabilities; - UINT_8 cMaxTxPower; - UINT_8 ucChannelBand; - UINT_8 ucReserved[1]; -} CMD_BT_OVER_WIFI, *P_CMD_BT_OVER_WIFI; - -// EVENT_BT_OVER_WIFI -typedef struct _EVENT_BT_OVER_WIFI { - UINT_8 ucLinkStatus; - UINT_8 ucSelectedChannel; - INT_8 cRSSI; - UINT_8 ucReserved[1]; -} EVENT_BT_OVER_WIFI, *P_EVENT_BT_OVER_WIFI; - -// Same with DOMAIN_SUBBAND_INFO -typedef struct _CMD_SUBBAND_INFO { - UINT_8 ucRegClass; - UINT_8 ucBand; - UINT_8 ucChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 aucReserved[3]; -} CMD_SUBBAND_INFO, *P_CMD_SUBBAND_INFO; - -// CMD_SET_DOMAIN_INFO -typedef struct _CMD_SET_DOMAIN_INFO_T { - UINT_16 u2CountryCode; - UINT_16 u2Reserved; - CMD_SUBBAND_INFO rSubBand[6]; - - UINT_8 uc2G4Bandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 uc5GBandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 aucReserved[2]; -} CMD_SET_DOMAIN_INFO_T, *P_CMD_SET_DOMAIN_INFO_T; - -// CMD_SET_IP_ADDRESS -typedef struct _IPV4_NETWORK_ADDRESS { - UINT_8 aucIpAddr[4]; -} IPV4_NETWORK_ADDRESS, *P_IPV4_NETWORK_ADDRESS; - -typedef struct _CMD_SET_NETWORK_ADDRESS_LIST { - UINT_8 ucNetTypeIndex; - UINT_8 ucAddressCount; - UINT_8 ucReserved[2]; - IPV4_NETWORK_ADDRESS arNetAddress[1]; -} CMD_SET_NETWORK_ADDRESS_LIST, *P_CMD_SET_NETWORK_ADDRESS_LIST; - -typedef struct _PATTERN_DESCRIPTION { - UINT_8 fgCheckBcA1; - UINT_8 fgCheckMcA1; - UINT_8 ePatternHeader; - UINT_8 fgAndOp; - UINT_8 fgNotOp; - UINT_8 ucPatternMask; - UINT_16 ucPatternOffset; - UINT_8 aucPattern[8]; -} PATTERN_DESCRIPTION, *P_PATTERN_DESCRIPTION; - -typedef struct _CMD_RAW_PATTERN_CONFIGURATION_T { - PATTERN_DESCRIPTION arPatternDesc[4]; -} CMD_RAW_PATTERN_CONFIGURATION_T, *P_CMD_RAW_PATTERN_CONFIGURATION_T; - -typedef struct _CMD_PATTERN_FUNC_CONFIG { - BOOLEAN fgBcA1En; - BOOLEAN fgMcA1En; - BOOLEAN fgBcA1MatchDrop; - BOOLEAN fgMcA1MatchDrop; -} CMD_PATTERN_FUNC_CONFIG, *P_CMD_PATTERN_FUNC_CONFIG; - - -typedef struct _EVENT_TX_DONE_T { - UINT_8 ucPacketSeq; - UINT_8 ucStatus; - UINT_16 u2SequenceNumber; - UINT_32 au4Reserved1; - UINT_32 au4Reserved2; - UINT_32 au4Reserved3; -} EVENT_TX_DONE_T, *P_EVENT_TX_DONE_T; - -typedef struct _CMD_BSS_ACTIVATE_CTRL { - UINT_8 ucNetTypeIndex; - UINT_8 ucActive; - UINT_8 aucReserved[2]; -} CMD_BSS_ACTIVATE_CTRL, *P_CMD_BSS_ACTIVATE_CTRL; - -typedef struct _CMD_SET_BSS_RLM_PARAM_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucRfBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucErpProtectMode; - UINT_8 ucHtProtectMode; - UINT_8 ucGfOperationMode; - UINT_8 ucTxRifsMode; - UINT_16 u2HtOpInfo3; - UINT_16 u2HtOpInfo2; - UINT_8 ucHtOpInfo1; - UINT_8 ucUseShortPreamble; - UINT_8 ucUseShortSlotTime; - UINT_8 ucCheckId; /* Fixed value: 0x72 */ -} CMD_SET_BSS_RLM_PARAM_T, *P_CMD_SET_BSS_RLM_PARAM_T; - -typedef struct _CMD_SET_BSS_INFO { - UINT_8 ucNetTypeIndex; - UINT_8 ucConnectionState; - UINT_8 ucCurrentOPMode; - UINT_8 ucSSIDLen; - UINT_8 aucSSID[32]; - UINT_8 aucBSSID[6]; - UINT_8 ucIsQBSS; - UINT_8 ucReserved1; - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucStaRecIdxOfAP; - UINT_8 ucReserved2; - UINT_8 ucReserved3; - UINT_8 ucNonHTBasicPhyType; /* For Slot Time and CWmin */ - UINT_8 ucAuthMode; - UINT_8 ucEncStatus; - UINT_8 ucPhyTypeSet; - UINT_8 aucOwnMac[6]; - UINT_8 fgWapiMode; - UINT_8 fgIsApMode; - UINT_8 aucRsv[1]; - CMD_SET_BSS_RLM_PARAM_T rBssRlmParam; -} CMD_SET_BSS_INFO, *P_CMD_SET_BSS_INFO; - -typedef struct _CMD_UPDATE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucStaType; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - UINT_16 u2AssocId; - UINT_16 u2ListenInterval; - UINT_8 ucNetTypeIndex; - UINT_8 ucDesiredPhyTypeSet; - UINT_16 u2DesiredNonHTRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucIsQoS; - UINT_8 ucIsUapsdSupported; - UINT_8 ucStaState; - UINT_8 ucMcsSet; - UINT_8 ucSupMcs32; - UINT_8 ucAmpduParam; - UINT_16 u2HtCapInfo; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; - UINT_8 ucRCPI; - UINT_8 ucNeedResp; - UINT_8 ucUapsdAc; /* b0~3: Trigger enabled, b4~7: Delivery enabled */ - UINT_8 ucUapsdSp; /* 0: all, 1: max 2, 2: max 4, 3: max 6 */ - UINT_8 aucReserved[3]; - /* TBD */ -} CMD_UPDATE_STA_RECORD_T, *P_CMD_UPDATE_STA_RECORD_T; - -typedef struct _CMD_REMOVE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucReserved; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; -} CMD_REMOVE_STA_RECORD_T, *P_CMD_REMOVE_STA_RECORD_T; - -typedef struct _CMD_INDICATE_PM_BSS_CREATED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 aucReserved[2]; -} CMD_INDICATE_PM_BSS_CREATED, *P_CMD_INDICATE_PM_BSS_CREATED; - -typedef struct _CMD_INDICATE_PM_BSS_CONNECTED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2AssocId; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 fgIsUapsdConnection; - UINT_8 ucBmpDeliveryAC; - UINT_8 ucBmpTriggerAC; - UINT_8 aucReserved[1]; -} CMD_INDICATE_PM_BSS_CONNECTED, *P_CMD_INDICATE_PM_BSS_CONNECTED; - -typedef struct _CMD_INDICATE_PM_BSS_ABORT { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} CMD_INDICATE_PM_BSS_ABORT, *P_CMD_INDICATE_PM_BSS_ABORT; - -typedef struct _CMD_BEACON_TEMPLATE_UPDATE { - UINT_8 ucUpdateMethod; // 0: update randomly, 1: update all, 2: delete all (1 and 2 will update directly without search) - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_16 u2Capability; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_BEACON_TEMPLATE_UPDATE, *P_CMD_BEACON_TEMPLATE_UPDATE; - -typedef struct _CMD_SET_WMM_PS_TEST_STRUC_T { - UINT_8 ucNetTypeIndex; - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ -} CMD_SET_WMM_PS_TEST_STRUC_T, *P_CMD_SET_WMM_PS_TEST_STRUC_T; - - -/* Definition for CHANNEL_INFO.ucBand: - * 0: Reserved - * 1: BAND_2G4 - * 2: BAND_5G - * Others: Reserved - */ -typedef struct _CHANNEL_INFO_T { - UINT_8 ucBand; - UINT_8 ucChannelNum; -} CHANNEL_INFO_T, *P_CHANNEL_INFO_T; - -typedef struct _CMD_SCAN_REQ_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucReserved[1]; - UINT_16 u2ChannelMinDwellTime; - UINT_8 aucSSID[32]; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ, *P_CMD_SCAN_REQ; - -typedef struct _CMD_SCAN_REQ_V2_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; - PARAM_SSID_T arSSID[4]; - UINT_16 u2ProbeDelayTime; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ_V2, *P_CMD_SCAN_REQ_V2; - -typedef struct _CMD_SCAN_CANCEL_T { - UINT_8 ucSeqNum; - UINT_8 ucIsExtChannel; /* For P2P channel extention. */ - UINT_8 aucReserved[2]; -} CMD_SCAN_CANCEL, *P_CMD_SCAN_CANCEL; - -typedef struct _EVENT_SCAN_DONE_T { - UINT_8 ucSeqNum; - UINT_8 ucSparseChannelValid; - CHANNEL_INFO_T rSparseChannel; -} EVENT_SCAN_DONE, *P_EVENT_SCAN_DONE; - -typedef struct _CMD_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucAction; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} CMD_CH_PRIVILEGE_T, *P_CMD_CH_PRIVILEGE_T; - -typedef struct _CMD_TX_PWR_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} CMD_TX_PWR_T, *P_CMD_TX_PWR_T; - -typedef struct _CMD_5G_PWR_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} CMD_5G_PWR_OFFSET_T, *P_CMD_5G_PWR_OFFSET_T; - -typedef struct _CMD_PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} CMD_PWR_PARAM_T, *P_CMD_PWR_PARAM_T; - - -typedef struct _CMD_PHY_PARAM_T { - UINT_8 aucData[144]; /* eFuse content */ -} CMD_PHY_PARAM_T, *P_CMD_PHY_PARAM_T; - -typedef struct _CMD_AUTO_POWER_PARAM_T { - UINT_8 ucType; /* 0: Disable 1: Enalbe 0x10: Change paramters */ - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 aucLevelRcpiTh[3]; - UINT_8 aucReserved2[1]; - INT_8 aicLevelPowerOffset[3]; /* signed, in unit of 0.5dBm */ - UINT_8 aucReserved3[1]; - UINT_8 aucReserved4[8]; -} CMD_AUTO_POWER_PARAM_T, *P_CMD_AUTO_POWER_PARAM_T; - - -typedef struct _EVENT_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucStatus; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4GrantInterval; /* In unit of ms */ -} EVENT_CH_PRIVILEGE_T, *P_EVENT_CH_PRIVILEGE_T; - -typedef struct _EVENT_BSS_BEACON_TIMEOUT_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} EVENT_BSS_BEACON_TIMEOUT_T, *P_EVENT_BSS_BEACON_TIMEOUT_T; - -typedef struct _EVENT_STA_AGING_TIMEOUT_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_STA_AGING_TIMEOUT_T, *P_EVENT_STA_AGING_TIMEOUT_T; - -typedef struct _EVENT_NOA_TIMING_T { - UINT_8 fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} EVENT_NOA_TIMING_T, *P_EVENT_NOA_TIMING_T; - -typedef struct _EVENT_UPDATE_NOA_PARAMS_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 fgEnableOppPS; - UINT_16 u2CTWindow; - - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - EVENT_NOA_TIMING_T arEventNoaTiming[8/*P2P_MAXIMUM_NOA_COUNT*/]; -} EVENT_UPDATE_NOA_PARAMS_T, *P_EVENT_UPDATE_NOA_PARAMS_T; - -typedef struct _EVENT_AP_OBSS_STATUS_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucObssErpProtectMode; - UINT_8 ucObssHtProtectMode; - UINT_8 ucObssGfOperationMode; - UINT_8 ucObssRifsOperationMode; - UINT_8 ucObssBeaconForcedTo20M; - UINT_8 aucReserved[2]; -} EVENT_AP_OBSS_STATUS_T, *P_EVENT_AP_OBSS_STATUS_T; - -typedef struct _CMD_EDGE_TXPWR_LIMIT_T { - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - INT_8 cReserved; -} CMD_EDGE_TXPWR_LIMIT_T, *P_CMD_EDGE_TXPWR_LIMIT_T; - -typedef struct _CMD_SET_DEVICE_MODE_T { - UINT_16 u2ChipID; - UINT_16 u2Mode; -} CMD_SET_DEVICE_MODE_T, *P_CMD_SET_DEVICE_MODE_T; - - -#if CFG_SUPPORT_RDD_TEST_MODE -typedef struct _CMD_RDD_CH_T { - UINT_8 ucRddTestMode; - UINT_8 ucRddShutCh; - UINT_8 ucRddStartCh; - UINT_8 ucRddStopCh; - UINT_8 ucRddDfs; - UINT_8 ucReserved; - UINT_8 ucReserved1; - UINT_8 ucReserved2; -} CMD_RDD_CH_T, *P_CMD_RDD_CH_T; - -typedef struct _EVENT_RDD_STATUS_T { - UINT_8 ucRddStatus; - UINT_8 aucReserved[3]; -} EVENT_RDD_STATUS_T, *P_EVENT_RDD_STATUS_T; -#endif - -typedef struct _CMD_SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} CMD_SET_TXPWR_CTRL_T, *P_CMD_SET_TXPWR_CTRL_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - - - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* for timeout check */ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic_init_cmd_event.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/nic_init_cmd_event.h deleted file mode 100755 index 33886c98045a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/nic_init_cmd_event.h +++ /dev/null @@ -1,180 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic_init_cmd_event.h#1 $ -*/ - -/*! \file "nic_init_cmd_event.h" - \brief This file contains the declairation file of the WLAN initialization routines - for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: nic_init_cmd_event.h $ - * - * 09 26 2011 cp.wu - * [WCXRP00001011] [MT6628 Wi-Fi] Firmware Download Agent: make CRC validation as an optional feature - * add definition for disabling CRC32 validation (for MT6628 only) - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * -*/ -#ifndef _NIC_INIT_CMD_EVENT_H -#define _NIC_INIT_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INIT_CMD_STATUS_SUCCESS 0 -#define INIT_CMD_STATUS_REJECTED_INVALID_PARAMS 1 -#define INIT_CMD_STATUS_REJECTED_CRC_ERROR 2 -#define INIT_CMD_STATUS_REJECTED_DECRYPT_FAIL 3 -#define INIT_CMD_STATUS_UNKNOWN 4 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -typedef enum _ENUM_INIT_CMD_ID { - INIT_CMD_ID_DOWNLOAD_BUF = 1, - INIT_CMD_ID_WIFI_START, - INIT_CMD_ID_ACCESS_REG, - INIT_CMD_ID_QUERY_PENDING_ERROR -} ENUM_INIT_CMD_ID, *P_ENUM_INIT_CMD_ID; - -typedef enum _ENUM_INIT_EVENT_ID { - INIT_EVENT_ID_CMD_RESULT = 1, - INIT_EVENT_ID_ACCESS_REG, - INIT_EVENT_ID_PENDING_ERROR -} ENUM_INIT_EVENT_ID, *P_ENUM_INIT_EVENT_ID; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_8 CMD_STATUS; - -// commands -typedef struct _INIT_WIFI_CMD_T { - UINT_8 ucCID; - UINT_8 ucSeqNum; - UINT_16 u2Reserved; - UINT_8 aucBuffer[0]; -} INIT_WIFI_CMD_T, *P_INIT_WIFI_CMD_T; - -typedef struct _INIT_HIF_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - INIT_WIFI_CMD_T rInitWifiCmd; -} INIT_HIF_TX_HEADER_T, *P_INIT_HIF_TX_HEADER_T; - -#define DOWNLOAD_BUF_ENCRYPTION_MODE BIT(0) -#define DOWNLOAD_BUF_NO_CRC_CHECKING BIT(30) -#define DOWNLOAD_BUF_ACK_OPTION BIT(31) -typedef struct _INIT_CMD_DOWNLOAD_BUF { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4CRC32; - UINT_32 u4DataMode; - UINT_8 aucBuffer[0]; -} INIT_CMD_DOWNLOAD_BUF, *P_INIT_CMD_DOWNLOAD_BUF; - -typedef struct _INIT_CMD_WIFI_START { - UINT_32 u4Override; - UINT_32 u4Address; -} INIT_CMD_WIFI_START, *P_INIT_CMD_WIFI_START; - -typedef struct _INIT_CMD_ACCESS_REG { - UINT_8 ucSetQuery; - UINT_8 aucReserved[3]; - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_CMD_ACCESS_REG, *P_INIT_CMD_ACCESS_REG; - -// Events -typedef struct _INIT_WIFI_EVENT_T { - UINT_16 u2RxByteCount; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucBuffer[0]; -} INIT_WIFI_EVENT_T, *P_INIT_WIFI_EVENT_T; - -typedef struct _INIT_HIF_RX_HEADER_T { - INIT_WIFI_EVENT_T rInitWifiEvent; -} INIT_HIF_RX_HEADER_T, *P_INIT_HIF_RX_HEADER_T; - -typedef struct _INIT_EVENT_CMD_RESULT { - UINT_8 ucStatus; // 0: success - // 1: rejected by invalid param - // 2: rejected by incorrect CRC - // 3: rejected by decryption failure - // 4: unknown CMD - UINT_8 aucReserved[3]; -} INIT_EVENT_CMD_RESULT, *P_INIT_EVENT_CMD_RESULT, INIT_EVENT_PENDING_ERROR, *P_INIT_EVENT_PENDING_ERROR; - -typedef struct _INIT_EVENT_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_EVENT_ACCESS_REG, *P_INIT_EVENT_ACCESS_REG; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_INIT_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/p2p_precomp.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/p2p_precomp.h deleted file mode 100755 index 892b5b714baf..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/p2p_precomp.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/p2p_precomp.h#1 $ -*/ - -/*! \file p2p_precomp.h - \brief Collection of most compiler flags for p2p driver are described here. - - In this file we collect all compiler flags and detail the p2p driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -#ifndef _P2P_PRECOMP_H -#define _P2P_PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#include "gl_p2p_os.h" - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#include "roaming_fsm.h" - - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#include "wlan_p2p.h" - - - - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" - - -#include "aa_fsm.h" - -#include "cnm_timer.h" - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -/* Dependency: cnm_timer.h (TIMER_T) */ -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" - - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#include "gl_p2p_kal.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_PRECOMP_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/p2p_typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/p2p_typedef.h deleted file mode 100755 index c8aa47fb6297..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/p2p_typedef.h +++ /dev/null @@ -1,278 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/p2p_typedef.h#1 $ -*/ - -/*! \file p2p_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - - - - -#ifndef _P2P_TYPEDEF_H -#define _P2P_TYPEDEF_H - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* -* type definition of pointer to p2p structure -*/ -//typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; -typedef struct _P2P_INFO_T P2P_INFO_T, *P_P2P_INFO_T; - -typedef struct _P2P_FSM_INFO_T P2P_FSM_INFO_T, *P_P2P_FSM_INFO_T; - -typedef struct _P2P_CONNECTION_SETTINGS_T P2P_CONNECTION_SETTINGS_T, *P_P2P_CONNECTION_SETTINGS_T; - - -/* Type definition for function pointer to p2p function*/ -typedef BOOLEAN (*P2P_LAUNCH)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*P2P_REMOVE)( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsWlanLaunched - ); - -typedef BOOLEAN (*KAL_P2P_GET_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_TKIP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_CCMP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_WSC_MODE)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef struct net_device* (*KAL_P2P_GET_DEV_HDLR)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_SET_MULTICAST_WORK_ITEM) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_REGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_UNREGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_UPDATE_ASSOC_INFO)( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -typedef BOOLEAN (*P2P_VALIDATE_AUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -typedef BOOLEAN (*P2P_VALIDATE_ASSOC_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu4ControlFlags - ); - -typedef VOID (*P2P_RUN_EVENT_AAA_TX_FAIL) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef BOOLEAN (*P2P_PARSE_CHECK_FOR_P2P_INFO_ELEM)( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -typedef WLAN_STATUS (*P2P_RUN_EVENT_AAA_COMPLETE) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef VOID (*P2P_PROCESS_EVENT_UPDATE_NOA_PARAM) ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -typedef VOID (*SCAN_P2P_PROCESS_BEACON_AND_PROBE_RESP) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -typedef VOID (*P2P_RX_PUBLIC_ACTION_FRAME) ( - P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_RSP_GENERATE_OBSS_SCAN_IE) ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -typedef VOID (*RLM_UPDATE_BW_BY_CH_LIST_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef VOID (*RLM_PROCESS_PUBLIC_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_PROCESS_HT_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_UPDATE_PARAMS_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -typedef VOID (*RLM_HANDLE_OBSS_STATUS_EVENT_PKT) ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - - -typedef BOOLEAN (*P2P_FUNC_VALIDATE_PROBE_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -typedef VOID (*RLM_BSS_INIT_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef UINT_32 (*P2P_GET_PROB_RSP_IE_TABLE_SIZE)( - VOID - ); - -typedef PUINT_8 (*P2P_BUILD_REASSOC_REQ_FRAME_COMMON_IES) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -typedef VOID (*P2P_FUNC_DISCONNECT) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DEAUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DISASSOC) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef BOOLEAN (*P2P_FUN_IS_AP_MODE) ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_BEACON_TIMEOUT) ( - IN P_ADAPTER_T prAdapter - ); - - -typedef VOID (*P2P_FUNC_STORE_ASSOC_RSP_IE_BUFFER) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -typedef VOID (*P2P_GENERATE_P2P_IE) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -typedef UINT_32 (*P2P_CALCULATE_P2P_IE_LEN) ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /*CFG_ENABLE_WIFI_DIRECT*/ - -#endif /* _P2P_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/precomp.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/precomp.h deleted file mode 100755 index 0e5a8e372076..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/precomp.h +++ /dev/null @@ -1,380 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/precomp.h#2 $ -*/ - -/*! \file precomp.h - \brief Collection of most compiler flags are described here. - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - - - -/* -** $Log: precomp.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Isolate P2P related function for Hardware Software Bundle - * - * 09 14 2010 chinghwa.yu - * NULL - * Fix BOW_FSM_INFO_T dependence. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 11:30:58 GMT mtk02752 -** add rftest.h for implementing RF test mode in driver land -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-23 22:02:00 GMT mtk02468 -** Added que_mgt.h -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-13 21:58:36 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:40:11 GMT mtk01461 -** Add nic_cmd_event.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 20:00:26 GMT mtk01461 -** Add cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:44 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:25 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _PRECOMP_H -#define _PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#if CFG_SUPPORT_SWCR -#include "swcr.h" -#endif - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "wlan_p2p.h" -#endif - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" -#if CFG_SUPPORT_802_11V -#include "wnm.h" -#endif - -#include "aa_fsm.h" - -#include "cnm_timer.h" - - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" -#endif - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - -#if CFG_SUPPORT_ROAMING -#include "roaming_fsm.h" -#endif /* CFG_SUPPORT_ROAMING */ - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_kal.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRECOMP_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/pwr_mgt.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/pwr_mgt.h deleted file mode 100755 index 4819de0fd9bb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/pwr_mgt.h +++ /dev/null @@ -1,147 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/pwr_mgt.h#1 $ -*/ - -/*! \file "pwr_mgt.h" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - - - -/* -** $Log: pwr_mgt.h $ - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * * due to the different configurations on FPGA and ASIC -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-10 16:39:10 GMT mtk02752 -** disable PM macros temporally -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-29 19:48:37 GMT mtk01084 -** temp remove power management macro -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-08 16:51:11 GMT mtk01084 -** update for power management control macro -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-03 14:59:58 GMT mtk01426 -** Add #if CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:53:10 GMT mtk01084 -** modify ACQUIRE_POWER_CONTROL_FROM_PM() and RECLAIM_POWER_CONTROL_TO_PM() macro -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:32:47 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:20 GMT mtk01084 -** Initial version -** -*/ - -#ifndef _PWR_MGT_H -#define _PWR_MGT_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PM_UAPSD_AC0 (BIT(0)) -#define PM_UAPSD_AC1 (BIT(1)) -#define PM_UAPSD_AC2 (BIT(2)) -#define PM_UAPSD_AC3 (BIT(3)) - -#define PM_UAPSD_ALL (PM_UAPSD_AC0 | PM_UAPSD_AC1 | PM_UAPSD_AC2 | PM_UAPSD_AC3) -#define PM_UAPSD_NONE 0 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PM_PROFILE_SETUP_INFO_T { - /* Profile setup */ - UINT_8 ucBmpDeliveryAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - UINT_8 ucBmpTriggerAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - - UINT_8 ucUapsdSp; /* Number of triggered packets in UAPSD */ - -} PM_PROFILE_SETUP_INFO_T, *P_PM_PROFILE_SETUP_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if !CFG_ENABLE_FULL_PM - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) -#else - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) \ - { \ - if (_prAdapter->fgIsFwOwn) { \ - nicpmSetDriverOwn(_prAdapter); \ - } \ - /* Increase Block to Enter Low Power Semaphore count */ \ - GLUE_INC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - } - - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) \ - { \ - ASSERT(_prAdapter->u4PwrCtrlBlockCnt != 0); \ - /* Decrease Block to Enter Low Power Semaphore count */ \ - GLUE_DEC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - if (_prAdapter->fgWiFiInSleepyState && (_prAdapter->u4PwrCtrlBlockCnt == 0)) { \ - nicpmSetFWOwn(_prAdapter, _fgEnableGINT_in_IST); \ - } \ - } -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PWR_MGT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/queue.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/queue.h deleted file mode 100755 index a7773e9d592d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/queue.h +++ /dev/null @@ -1,189 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/queue.h#1 $ -*/ - -/*! \file queue.h - \brief Definition for singly queue operations. - - In this file we define the singly queue data structure and its - queue operation MACROs. -*/ - - - -/* -** $Log: queue.h $ - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:46 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _QUEUE_H -#define _QUEUE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Singly Queue Structures - Entry Part */ -typedef struct _QUE_ENTRY_T { - struct _QUE_ENTRY_T *prNext; - struct _QUE_ENTRY_T *prPrev; /* For Rx buffer reordering used only */ -} QUE_ENTRY_T, *P_QUE_ENTRY_T; - -/* Singly Queue Structures - Queue Part */ -typedef struct _QUE_T { - P_QUE_ENTRY_T prHead; - P_QUE_ENTRY_T prTail; - UINT_32 u4NumElem; -} QUE_T, *P_QUE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define QUEUE_INITIALIZE(prQueue) \ - { \ - (prQueue)->prHead = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->u4NumElem = 0; \ - } - -#define QUEUE_IS_EMPTY(prQueue) (((P_QUE_T)(prQueue))->prHead == (P_QUE_ENTRY_T)NULL) - -#define QUEUE_IS_NOT_EMPTY(prQueue) ((prQueue)->u4NumElem > 0) - -#define QUEUE_GET_HEAD(prQueue) ((prQueue)->prHead) - -#define QUEUE_GET_TAIL(prQueue) ((prQueue)->prTail) - -#define QUEUE_GET_NEXT_ENTRY(prQueueEntry) ((prQueueEntry)->prNext) - -#define QUEUE_INSERT_HEAD(prQueue, prQueueEntry) \ - { \ - ASSERT(prQueue); \ - ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (prQueue)->prHead; \ - (prQueue)->prHead = (prQueueEntry); \ - if ((prQueue)->prTail == (P_QUE_ENTRY_T)NULL) { \ - (prQueue)->prTail = (prQueueEntry); \ - } \ - ((prQueue)->u4NumElem)++; \ - } - -#define QUEUE_INSERT_TAIL(prQueue, prQueueEntry) \ - { \ - ASSERT(prQueue); \ - ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (P_QUE_ENTRY_T)NULL; \ - if ((prQueue)->prTail) { \ - ((prQueue)->prTail)->prNext = (prQueueEntry); \ - } else { \ - (prQueue)->prHead = (prQueueEntry); \ - } \ - (prQueue)->prTail = (prQueueEntry); \ - ((prQueue)->u4NumElem)++; \ - } - -/* NOTE: We assume the queue entry located at the beginning of "prQueueEntry Type", - * so that we can cast the queue entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define QUEUE_REMOVE_HEAD(prQueue, prQueueEntry, _P_TYPE) \ - { \ - ASSERT(prQueue); \ - prQueueEntry = (_P_TYPE)((prQueue)->prHead); \ - if (prQueueEntry) { \ - (prQueue)->prHead = ((P_QUE_ENTRY_T)(prQueueEntry))->prNext; \ - if ((prQueue)->prHead == (P_QUE_ENTRY_T)NULL){ \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - } \ - ((P_QUE_ENTRY_T)(prQueueEntry))->prNext = (P_QUE_ENTRY_T)NULL; \ - ((prQueue)->u4NumElem)--; \ - } \ - } - -#define QUEUE_MOVE_ALL(prDestQueue, prSrcQueue) \ - { \ - ASSERT(prDestQueue); \ - ASSERT(prSrcQueue); \ - *(P_QUE_T)prDestQueue = *(P_QUE_T)prSrcQueue; \ - QUEUE_INITIALIZE(prSrcQueue); \ - } - -#define QUEUE_CONCATENATE_QUEUES(prDestQueue, prSrcQueue) \ - { \ - ASSERT(prDestQueue); \ - ASSERT(prSrcQueue); \ - if (prSrcQueue->u4NumElem > 0) { \ - if ((prDestQueue)->prTail) { \ - ((prDestQueue)->prTail)->prNext = (prSrcQueue)->prHead; \ - } else { \ - (prDestQueue)->prHead = (prSrcQueue)->prHead; \ - } \ - (prDestQueue)->prTail = (prSrcQueue)->prTail; \ - ((prDestQueue)->u4NumElem) += ((prSrcQueue)->u4NumElem); \ - QUEUE_INITIALIZE(prSrcQueue); \ - } \ - } - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUEUE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/rftest.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/rftest.h deleted file mode 100755 index ae6541dc2e92..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/rftest.h +++ /dev/null @@ -1,317 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/rftest.h#1 $ -*/ - -/*! \file "rftest.h" - \brief definitions for RF Productino test - -*/ - - - -/* -** $Log: rftest.h $ - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-08 17:35:11 GMT mtk02752 -** * comment out RF test which is not supported on MT6620 -** + API decalre for rftest -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-12-08 11:29:07 GMT mtk02752 -** definitions for RF test mode -** -*/ -#ifndef _RFTEST_H -#define _RFTEST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -// Table Version -#define RF_AUTO_TEST_FUNCTION_TABLE_VERSION 0x01000001 - -// Power -#define RF_AT_PARAM_POWER_MASK BITS(0,7) -#define RF_AT_PARAM_POWER_MAX RF_AT_PARAM_POWER_MASK - -// Rate -#define RF_AT_PARAM_RATE_MCS_MASK BIT(31) -#define RF_AT_PARAM_RATE_MASK BITS(0,7) -#define RF_AT_PARAM_RATE_CCK_MAX 3 -#define RF_AT_PARAM_RATE_1M 0 -#define RF_AT_PARAM_RATE_2M 1 -#define RF_AT_PARAM_RATE_5_5M 2 -#define RF_AT_PARAM_RATE_11M 3 -#define RF_AT_PARAM_RATE_6M 4 -#define RF_AT_PARAM_RATE_9M 5 -#define RF_AT_PARAM_RATE_12M 6 -#define RF_AT_PARAM_RATE_18M 7 -#define RF_AT_PARAM_RATE_24M 8 -#define RF_AT_PARAM_RATE_36M 9 -#define RF_AT_PARAM_RATE_48M 10 -#define RF_AT_PARAM_RATE_54M 11 - -// Antenna -#define RF_AT_PARAM_ANTENNA_ID_MASK BITS(0,7) -#define RF_AT_PARAM_ANTENNA_ID_MAX 1 - -// Packet Length -#define RF_AT_PARAM_TX_80211HDR_BYTE_MAX (32) -#define RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX (2048) - -#define RF_AT_PARAM_TX_PKTLEN_BYTE_DEFAULT 1024 -#define RF_AT_PARAM_TX_PKTLEN_BYTE_MAX \ - ((UINT_16)(RF_AT_PARAM_TX_80211HDR_BYTE_MAX + RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX )) - -// Packet Count -#define RF_AT_PARAM_TX_PKTCNT_DEFAULT 1000 -#define RF_AT_PARAM_TX_PKTCNT_UNLIMITED 0 - -// Packet Interval -#define RF_AT_PARAM_TX_PKT_INTERVAL_US_DEFAULT 50 - -// ALC -#define RF_AT_PARAM_ALC_DISABLE 0 -#define RF_AT_PARAM_ALC_ENABLE 1 - -// TXOP -#define RF_AT_PARAM_TXOP_DEFAULT 0 -#define RF_AT_PARAM_TXOPQUE_QMASK BITS(16,31) -#define RF_AT_PARAM_TXOPQUE_TMASK BITS(0,15) -#define RF_AT_PARAM_TXOPQUE_AC0 (0<<16) -#define RF_AT_PARAM_TXOPQUE_AC1 (1<<16) -#define RF_AT_PARAM_TXOPQUE_AC2 (2<<16) -#define RF_AT_PARAM_TXOPQUE_AC3 (3<<16) -#define RF_AT_PARAM_TXOPQUE_AC4 (4<<16) -#define RF_AT_PARAM_TXOPQUE_QOFFSET 16 - -// Retry Limit -#define RF_AT_PARAM_TX_RETRY_DEFAULT 0 -#define RF_AT_PARAM_TX_RETRY_MAX 6 - -// QoS Queue -#define RF_AT_PARAM_QOSQUE_AC0 0 -#define RF_AT_PARAM_QOSQUE_AC1 1 -#define RF_AT_PARAM_QOSQUE_AC2 2 -#define RF_AT_PARAM_QOSQUE_AC3 3 -#define RF_AT_PARAM_QOSQUE_AC4 4 -#define RF_AT_PARAM_QOSQUE_DEFAULT RF_AT_PARAM_QOSQUE_AC0 - -// Bandwidth -#define RF_AT_PARAM_BANDWIDTH_20MHZ 0 -#define RF_AT_PARAM_BANDWIDTH_40MHZ 1 -#define RF_AT_PARAM_BANDWIDTH_U20_IN_40MHZ 2 -#define RF_AT_PARAM_BANDWIDTH_D20_IN_40MHZ 3 -#define RF_AT_PARAM_BANDWIDTH_DEFAULT RF_AT_PARAM_BANDWIDTH_20MHZ - -// GI (Guard Interval) -#define RF_AT_PARAM_GI_800NS 0 -#define RF_AT_PARAM_GI_400NS 1 -#define RF_AT_PARAM_GI_DEFAULT RF_AT_PARAM_GI_800NS - -// STBC -#define RF_AT_PARAM_STBC_DISABLE 0 -#define RF_AT_PARAM_STBC_ENABLE 1 - -// RIFS -#define RF_AT_PARAM_RIFS_DISABLE 0 -#define RF_AT_PARAM_RIFS_ENABLE 1 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -// Function ID List -typedef enum _ENUM_RF_AT_FUNCID_T { - RF_AT_FUNCID_VERSION = 0, - RF_AT_FUNCID_COMMAND, - RF_AT_FUNCID_POWER, - RF_AT_FUNCID_RATE, - RF_AT_FUNCID_PREAMBLE, - RF_AT_FUNCID_ANTENNA, - RF_AT_FUNCID_PKTLEN, - RF_AT_FUNCID_PKTCNT, - RF_AT_FUNCID_PKTINTERVAL, - RF_AT_FUNCID_TEMP_COMPEN, - RF_AT_FUNCID_TXOPLIMIT, - RF_AT_FUNCID_ACKPOLICY, - RF_AT_FUNCID_PKTCONTENT, - RF_AT_FUNCID_RETRYLIMIT, - RF_AT_FUNCID_QUEUE, - RF_AT_FUNCID_BANDWIDTH, - RF_AT_FUNCID_GI, - RF_AT_FUNCID_STBC, - RF_AT_FUNCID_CHNL_FREQ, - RF_AT_FUNCID_RIFS, - RF_AT_FUNCID_TRSW_TYPE, - RF_AT_FUNCID_RF_SX_SHUTDOWN, - RF_AT_FUNCID_PLL_SHUTDOWN, - RF_AT_FUNCID_SLOW_CLK_MODE, - RF_AT_FUNCID_ADC_CLK_MODE, - RF_AT_FUNCID_MEASURE_MODE, - RF_AT_FUNCID_VOLT_COMPEN, - RF_AT_FUNCID_DPD_TX_GAIN, - RF_AT_FUNCID_DPD_MODE, - RF_AT_FUNCID_TSSI_MODE, - RF_AT_FUNCID_TX_GAIN_CODE, - RF_AT_FUNCID_TX_PWR_MODE, - - /* Query command */ - RF_AT_FUNCID_TXED_COUNT = 32, - RF_AT_FUNCID_TXOK_COUNT, - RF_AT_FUNCID_RXOK_COUNT, - RF_AT_FUNCID_RXERROR_COUNT, - RF_AT_FUNCID_RESULT_INFO, - RF_AT_FUNCID_TRX_IQ_RESULT, - RF_AT_FUNCID_TSSI_RESULT, - RF_AT_FUNCID_DPD_RESULT, - RF_AT_FUNCID_RXV_DUMP, - RF_AT_FUNCID_RX_PHY_STATIS, - RF_AT_FUNCID_MEASURE_RESULT, - RF_AT_FUNCID_TEMP_SENSOR, - RF_AT_FUNCID_VOLT_SENSOR, - RF_AT_FUNCID_READ_EFUSE, - RF_AT_FUNCID_RX_RSSI, - RF_AT_FUNCID_FW_INFO, - RF_AT_FUNCID_DRV_INFO, - - /* Set command */ - RF_AT_FUNCID_SET_DPD_RESULT = 64, - RF_AT_FUNCID_SET_CW_MODE, - RF_AT_FUNCID_SET_JAPAN_CH14_FILTER, - RF_AT_FUNCID_WRITE_EFUSE, - RF_AT_FUNCID_SET_MAC_ADDRESS - -} ENUM_RF_AT_FUNCID_T; - -// Command -typedef enum _ENUM_RF_AT_COMMAND_T { - RF_AT_COMMAND_STOPTEST = 0, - RF_AT_COMMAND_STARTTX, - RF_AT_COMMAND_STARTRX, - RF_AT_COMMAND_RESET, - RF_AT_COMMAND_OUTPUT_POWER, /* Payload */ - RF_AT_COMMAND_LO_LEAKAGE, /* Local freq is renamed to Local leakage */ - RF_AT_COMMAND_CARRIER_SUPPR, /* OFDM (LTF/STF), CCK (PI,PI/2) */ - RF_AT_COMMAND_TRX_IQ_CAL, - RF_AT_COMMAND_TSSI_CAL, - RF_AT_COMMAND_DPD_CAL, - RF_AT_COMMAND_CW, - RF_AT_COMMAND_NUM -} ENUM_RF_AT_COMMAND_T; - -// Preamble -typedef enum _ENUM_RF_AT_PREAMBLE_T { - RF_AT_PREAMBLE_NORMAL = 0, - RF_AT_PREAMBLE_CCK_SHORT, - RF_AT_PREAMBLE_11N_MM, - RF_AT_PREAMBLE_11N_GF, - RF_AT_PREAMBLE_NUM -} ENUM_RF_AT_PREAMBLE_T; - -// Ack Policy -typedef enum _ENUM_RF_AT_ACK_POLICY_T { - RF_AT_ACK_POLICY_NORMAL = 0, - RF_AT_ACK_POLICY_NOACK, - RF_AT_ACK_POLICY_NOEXPLICTACK, - RF_AT_ACK_POLICY_BLOCKACK, - RF_AT_ACK_POLICY_NUM -} ENUM_RF_AT_ACK_POLICY_T; - -typedef enum _ENUM_RF_AUTOTEST_STATE_T { - RF_AUTOTEST_STATE_STANDBY = 0, - RF_AUTOTEST_STATE_TX, - RF_AUTOTEST_STATE_RX, - RF_AUTOTEST_STATE_RESET, - RF_AUTOTEST_STATE_OUTPUT_POWER, - RF_AUTOTEST_STATE_LOCA_FREQUENCY, - RF_AUTOTEST_STATE_CARRIER_SUPRRESION, - RF_AUTOTEST_STATE_NUM -} ENUM_RF_AUTOTEST_STATE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -rftestSetATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ); - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ); - -#endif /* _RFTEST_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/typedef.h deleted file mode 100755 index 2fba6fe88ec0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/typedef.h +++ /dev/null @@ -1,236 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/typedef.h#1 $ -*/ - -/*! \file typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to the GLUE Layer. -*/ - - - -/* -** $Log: typedef.h $ - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:41:37 GMT mtk01461 -** Update PACKET_INFO_INIT for TX Path -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:30:17 GMT mtk01461 -** Add parameter in PACKET_INFO_T for HIF Loopback -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:22 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:28 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:54 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _TYPEDEF_H -#define _TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* ieee80211.h of linux has duplicated definitions */ -#if defined(WLAN_STATUS_SUCCESS) -#undef WLAN_STATUS_SUCCESS -#endif - -#define WLAN_STATUS_SUCCESS ((WLAN_STATUS) 0x00000000L) -#define WLAN_STATUS_PENDING ((WLAN_STATUS) 0x00000103L) -#define WLAN_STATUS_NOT_ACCEPTED ((WLAN_STATUS) 0x00010003L) - -#define WLAN_STATUS_MEDIA_CONNECT ((WLAN_STATUS) 0x4001000BL) -#define WLAN_STATUS_MEDIA_DISCONNECT ((WLAN_STATUS) 0x4001000CL) -#define WLAN_STATUS_MEDIA_SPECIFIC_INDICATION ((WLAN_STATUS) 0x40010012L) - -#define WLAN_STATUS_SCAN_COMPLETE ((WLAN_STATUS) 0x60010001L) -#define WLAN_STATUS_MSDU_OK ((WLAN_STATUS) 0x60010002L) - -/* TODO(Kevin): double check if 0x60010001 & 0x60010002 is proprietary */ -#define WLAN_STATUS_ROAM_OUT_FIND_BEST ((WLAN_STATUS) 0x60010101L) -#define WLAN_STATUS_ROAM_DISCOVERY ((WLAN_STATUS) 0x60010102L) - -#define WLAN_STATUS_FAILURE ((WLAN_STATUS) 0xC0000001L) -#define WLAN_STATUS_RESOURCES ((WLAN_STATUS) 0xC000009AL) -#define WLAN_STATUS_NOT_SUPPORTED ((WLAN_STATUS) 0xC00000BBL) - -#define WLAN_STATUS_MULTICAST_FULL ((WLAN_STATUS) 0xC0010009L) -#define WLAN_STATUS_INVALID_PACKET ((WLAN_STATUS) 0xC001000FL) -#define WLAN_STATUS_ADAPTER_NOT_READY ((WLAN_STATUS) 0xC0010011L) -#define WLAN_STATUS_NOT_INDICATING ((WLAN_STATUS) 0xC0010013L) -#define WLAN_STATUS_INVALID_LENGTH ((WLAN_STATUS) 0xC0010014L) -#define WLAN_STATUS_INVALID_DATA ((WLAN_STATUS) 0xC0010015L) -#define WLAN_STATUS_BUFFER_TOO_SHORT ((WLAN_STATUS) 0xC0010016L) - -#define WLAN_STATUS_BWCS_UPDATE ((WLAN_STATUS) 0xC0010017L) - -/* NIC status flags */ -#define ADAPTER_FLAG_HW_ERR 0x00400000 - -/* Type Length */ -#define TL_IPV4 0x0008 -#define TL_IPV6 0xDD86 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for GLUE_INFO structure */ -typedef struct _GLUE_INFO_T GLUE_INFO_T, *P_GLUE_INFO_T; - -/* Type definition for WLAN STATUS */ -typedef UINT_32 WLAN_STATUS, *P_WLAN_STATUS; - -/* Type definition for ADAPTER structure */ -typedef struct _ADAPTER_T ADAPTER_T, *P_ADAPTER_T; - -/* Type definition for MESSAGE HEADER structure */ -typedef struct _MSG_HDR_T MSG_HDR_T, *P_MSG_HDR_T; - -/* Type definition for Pointer to OS Native Packet */ -typedef void *P_NATIVE_PACKET; - -/* Type definition for STA_RECORD_T structure to handle the connectivity and packet reception - * for a particular STA. - */ -typedef struct _STA_RECORD_T STA_RECORD_T, *P_STA_RECORD_T, **PP_STA_RECORD_T; - -/* CMD_INFO_T is used by Glue Layer to send a cluster of Command(OID) information to - * the TX Path to reduce the parameters of a function call. - */ -typedef struct _CMD_INFO_T CMD_INFO_T, *P_CMD_INFO_T; - -/* Following typedef should be removed later, because Glue Layer should not - * be aware of following data type. - */ -typedef struct _SW_RFB_T SW_RFB_T, *P_SW_RFB_T, **PP_SW_RFB_T; - -typedef struct _MSDU_INFO_T MSDU_INFO_T, *P_MSDU_INFO_T; - -typedef struct _REG_ENTRY_T REG_ENTRY_T, *P_REG_ENTRY_T; - -/* IST handler definition */ -typedef VOID (*IST_EVENT_FUNCTION)(P_ADAPTER_T); - -/* Type definition for function pointer of timer handler */ -typedef VOID (*PFN_TIMER_CALLBACK)(IN P_GLUE_INFO_T); - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_bow.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_bow.h deleted file mode 100755 index a3c4d3849a05..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_bow.h +++ /dev/null @@ -1,547 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_bow.h#1 $ -*/ - -/*! \file "wlan_bow.h" - \brief This file contains the declairations of 802.11 PAL - command processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_bow.h $ - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -#ifndef _WLAN_BOW_H -#define _WLAN_BOW_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "nic/bow.h" -#include "nic/cmd_buf.h" - -#if CFG_ENABLE_BT_OVER_WIFI -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define BOWCMD_STATUS_SUCCESS 0 -#define BOWCMD_STATUS_FAILURE 1 -#define BOWCMD_STATUS_UNACCEPTED 2 -#define BOWCMD_STATUS_INVALID 3 -#define BOWCMD_STATUS_TIMEOUT 4 - -#define BOW_WILDCARD_SSID "AMP" -#define BOW_WILDCARD_SSID_LEN 3 -#define BOW_SSID_LEN 21 - - /* 0: query, 1: setup, 2: destroy */ -#define BOW_QUERY_CMD 0 -#define BOW_SETUP_CMD 1 -#define BOW_DESTROY_CMD 2 - -#define BOW_INITIATOR 0 -#define BOW_RESPONDER 1 - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -typedef struct _BOW_TABLE_T { - UINT_8 ucAcquireID; - BOOLEAN fgIsValid; - ENUM_BOW_DEVICE_STATE eState; - UINT_8 aucPeerAddress[6]; - //UINT_8 ucRole; - //UINT_8 ucChannelNum; - UINT_16 u2Reserved; -} BOW_TABLE_T, *P_BOW_TABLE_T; - -typedef WLAN_STATUS (*PFN_BOW_CMD_HANDLE)(P_ADAPTER_T, P_AMPC_COMMAND); - -typedef struct _BOW_CMD_T { - UINT_8 uCmdID; - PFN_BOW_CMD_HANDLE pfCmdHandle; -} BOW_CMD_T, *P_BOW_CMD_T; - -typedef struct _BOW_EVENT_ACTIVITY_REPORT_T { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_EVENT_ACTIVITY_REPORT_T, *P_BOW_EVENT_ACTIVITY_REPORT_T; - -/* -ucReason: 0: success - 1: general failure - 2: too much time (> 2/3 second totally) requested for scheduling. - Others: reserved. -*/ - -typedef struct _BOW_EVENT_SYNC_TSF_T { - UINT_64 u4TsfTime; - UINT_32 u4TsfSysTime; - UINT_32 u4ScoTime; - UINT_32 u4ScoSysTime; - } BOW_EVENT_SYNC_TSF_T, *P_BOW_EVENT_SYNC_TSF_T; - -typedef struct _BOW_ACTIVITY_REPORT_BODY_T { - UINT_32 u4StartTime; - UINT_32 u4Duration; - UINT_32 u4Periodicity; - } BOW_ACTIVITY_REPORT_BODY_T, *P_BOW_ACTIVITY_REPORT_BODY_T; - -typedef struct _BOW_ACTIVITY_REPORT_T { - UINT_8 aucPeerAddress[6]; - UINT_8 ucScheduleKnown; - UINT_8 ucNumReports; - BOW_ACTIVITY_REPORT_BODY_T arBowActivityReportBody[MAX_ACTIVITY_REPORT]; - } BOW_ACTIVITY_REPORT_T, *P_BOW_ACTIVITY_REPORT_T; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ); - - -/*--------------------------------------------------------------*/ -/* Command Dispatcher */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ); - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkConnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkDisconnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter); - -VOID -bowStarting ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -BOOLEAN -bowValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ); - -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -bowRunEventAAATxFail( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventAAAComplete( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -BOOLEAN -bowValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -bowValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ); - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ); - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ); - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ); - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_BOW_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_lib.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_lib.h deleted file mode 100755 index 5141726b1fec..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_lib.h +++ /dev/null @@ -1,1042 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_lib.h#1 $ -*/ - -/*! \file "wlan_lib.h" - \brief The declaration of the functions of the wlanAdpater objects - - Detail description. -*/ - - - -/* -** $Log: wlan_lib.h $ - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * eliminate win32 native data types. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * . - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add extra 64 adjustable parameters for CoEX scenario. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * 2) add 2 kal API for later integration - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * 4) nicRxWaitResponse() revised - * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:39:55 GMT mtk02752 -** eliminate unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:58:41 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-19 10:43:06 GMT mtk01461 -** Add wlanReleasePendingOid() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-13 16:38:44 GMT mtk01084 -** add WIFI start function -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-08 16:51:14 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:57:38 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:31:02 GMT mtk01461 -** Add declaration of FW Image download reference code -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:31 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:04 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_LIB_H -#define _WLAN_LIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "CFG_Wifi_File.h" -#include "rlm_domain.h" -#include "wlan_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define MAX_NUM_GROUP_ADDR 32 /* max number of group addresses */ - - - -#define TX_CS_TCP_UDP_GEN BIT(1) -#define TX_CS_IP_GEN BIT(0) - - -#define CSUM_OFFLOAD_EN_TX_TCP BIT(0) -#define CSUM_OFFLOAD_EN_TX_UDP BIT(1) -#define CSUM_OFFLOAD_EN_TX_IP BIT(2) -#define CSUM_OFFLOAD_EN_RX_TCP BIT(3) -#define CSUM_OFFLOAD_EN_RX_UDP BIT(4) -#define CSUM_OFFLOAD_EN_RX_IPv4 BIT(5) -#define CSUM_OFFLOAD_EN_RX_IPv6 BIT(6) -#define CSUM_OFFLOAD_EN_TX_MASK BITS(0,2) -#define CSUM_OFFLOAD_EN_ALL BITS(0,6) - -/* TCP, UDP, IP Checksum */ -#define RX_CS_TYPE_UDP BIT(7) -#define RX_CS_TYPE_TCP BIT(6) -#define RX_CS_TYPE_IPv6 BIT(5) -#define RX_CS_TYPE_IPv4 BIT(4) - -#define RX_CS_STATUS_UDP BIT(3) -#define RX_CS_STATUS_TCP BIT(2) -#define RX_CS_STATUS_IP BIT(0) - -#define CSUM_NOT_SUPPORTED 0x0 - -#define TXPWR_USE_PDSLOPE 0 - -/* NVRAM error code definitions */ -#define NVRAM_ERROR_VERSION_MISMATCH BIT(1) -#define NVRAM_ERROR_INVALID_TXPWR BIT(2) -#define NVRAM_ERROR_INVALID_DPD BIT(3) -#define NVRAM_ERROR_INVALID_MAC_ADDR BIT(4) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC) ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_CSUM_TYPE_T { - CSUM_TYPE_IPV4, - CSUM_TYPE_IPV6, - CSUM_TYPE_TCP, - CSUM_TYPE_UDP, - CSUM_TYPE_NUM -} ENUM_CSUM_TYPE_T, *P_ENUM_CSUM_TYPE_T; - -typedef enum _ENUM_CSUM_RESULT_T { - CSUM_RES_NONE, - CSUM_RES_SUCCESS, - CSUM_RES_FAILED, - CSUM_RES_NUM -} ENUM_CSUM_RESULT_T, *P_ENUM_CSUM_RESULT_T; - -typedef enum _ENUM_PHY_MODE_T { - ENUM_PHY_2G4_CCK, - ENUM_PHY_2G4_OFDM_BPSK, - ENUM_PHY_2G4_OFDM_QPSK, - ENUM_PHY_2G4_OFDM_16QAM, - ENUM_PHY_2G4_OFDM_48M, - ENUM_PHY_2G4_OFDM_54M, - ENUM_PHY_2G4_HT20_BPSK, - ENUM_PHY_2G4_HT20_QPSK, - ENUM_PHY_2G4_HT20_16QAM, - ENUM_PHY_2G4_HT20_MCS5, - ENUM_PHY_2G4_HT20_MCS6, - ENUM_PHY_2G4_HT20_MCS7, - ENUM_PHY_2G4_HT40_BPSK, - ENUM_PHY_2G4_HT40_QPSK, - ENUM_PHY_2G4_HT40_16QAM, - ENUM_PHY_2G4_HT40_MCS5, - ENUM_PHY_2G4_HT40_MCS6, - ENUM_PHY_2G4_HT40_MCS7, - ENUM_PHY_5G_OFDM_BPSK, - ENUM_PHY_5G_OFDM_QPSK, - ENUM_PHY_5G_OFDM_16QAM, - ENUM_PHY_5G_OFDM_48M, - ENUM_PHY_5G_OFDM_54M, - ENUM_PHY_5G_HT20_BPSK, - ENUM_PHY_5G_HT20_QPSK, - ENUM_PHY_5G_HT20_16QAM, - ENUM_PHY_5G_HT20_MCS5, - ENUM_PHY_5G_HT20_MCS6, - ENUM_PHY_5G_HT20_MCS7, - ENUM_PHY_5G_HT40_BPSK, - ENUM_PHY_5G_HT40_QPSK, - ENUM_PHY_5G_HT40_16QAM, - ENUM_PHY_5G_HT40_MCS5, - ENUM_PHY_5G_HT40_MCS6, - ENUM_PHY_5G_HT40_MCS7, - ENUM_PHY_MODE_NUM -} ENUM_PHY_MODE_T, *P_ENUM_PHY_MODE_T; - -typedef enum _ENUM_POWER_SAVE_POLL_MODE_T { - ENUM_POWER_SAVE_POLL_DISABLE, - ENUM_POWER_SAVE_POLL_LEGACY_NULL, - ENUM_POWER_SAVE_POLL_QOS_NULL, - ENUM_POWER_SAVE_POLL_NUM -} ENUM_POWER_SAVE_POLL_MODE_T, *P_ENUM_POWER_SAVE_POLL_MODE_T; - -typedef enum _ENUM_AC_TYPE_T { - ENUM_AC_TYPE_AC0, - ENUM_AC_TYPE_AC1, - ENUM_AC_TYPE_AC2, - ENUM_AC_TYPE_AC3, - ENUM_AC_TYPE_AC4, - ENUM_AC_TYPE_AC5, - ENUM_AC_TYPE_AC6, - ENUM_AC_TYPE_BMC, - ENUM_AC_TYPE_NUM -} ENUM_AC_TYPE_T, *P_ENUM_AC_TYPE_T; - -typedef enum _ENUM_ADV_AC_TYPE_T { - ENUM_ADV_AC_TYPE_RX_NSW, - ENUM_ADV_AC_TYPE_RX_PTA, - ENUM_ADV_AC_TYPE_RX_SP, - ENUM_ADV_AC_TYPE_TX_PTA, - ENUM_ADV_AC_TYPE_TX_RSP, - ENUM_ADV_AC_TYPE_NUM -} ENUM_ADV_AC_TYPE_T, *P_ENUM_ADV_AC_TYPE_T; - -typedef enum _ENUM_REG_CH_MAP_T { - REG_CH_MAP_COUNTRY_CODE, - REG_CH_MAP_TBL_IDX, - REG_CH_MAP_CUSTOMIZED, - REG_CH_MAP_NUM -} ENUM_REG_CH_MAP_T, *P_ENUM_REG_CH_MAP_T; - -typedef struct _SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} SET_TXPWR_CTRL_T, *P_SET_TXPWR_CTRL_T; - -/* For storing driver initialization value from glue layer */ -typedef struct _REG_INFO_T { - UINT_32 u4SdBlockSize; /* SDIO block size */ - UINT_32 u4SdBusWidth; /* SDIO bus width. 1 or 4 */ - UINT_32 u4SdClockRate; /* SDIO clock rate. (in unit of HZ) */ - UINT_32 u4StartAddress; /* Starting address of Wi-Fi Firmware */ - UINT_32 u4LoadAddress; /* Load address of Wi-Fi Firmware */ - UINT_16 aucFwImgFilename[65]; /* Firmware filename */ - UINT_16 aucFwImgFilenameE6[65]; /* Firmware filename for E6 */ - UINT_32 u4StartFreq; /* Start Frequency for Ad-Hoc network : in unit of KHz */ - UINT_32 u4AdhocMode; /* Default mode for Ad-Hoc network : ENUM_PARAM_AD_HOC_MODE_T */ - UINT_32 u4RddStartFreq; - UINT_32 u4RddStopFreq; - UINT_32 u4RddTestMode; - UINT_32 u4RddShutFreq; - UINT_32 u4RddDfs; - INT_32 i4HighRssiThreshold; - INT_32 i4MediumRssiThreshold; - INT_32 i4LowRssiThreshold; - INT_32 au4TxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4RxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4AdvPriorityTag[ENUM_ADV_AC_TYPE_NUM]; - UINT_32 u4FastPSPoll; - UINT_32 u4PTA; /* 0: disable, 1: enable */ - UINT_32 u4TXLimit; /* 0: disable, 1: enable */ - UINT_32 u4SilenceWindow; /* range: 100 - 625, unit: us */ - UINT_32 u4TXLimitThreshold; /* range: 250 - 1250, unit: us */ - UINT_32 u4PowerMode; - UINT_32 fgEnArpFilter; - UINT_32 u4PsCurrentMeasureEn; - UINT_32 u4UapsdAcBmp; - UINT_32 u4MaxSpLen; - UINT_32 fgDisOnlineScan; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 fgDisBcnLostDetection; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 u4FixedRate; /* 0: automatic, non-zero: fixed rate */ - UINT_32 u4ArSysParam0; - UINT_32 u4ArSysParam1; - UINT_32 u4ArSysParam2; - UINT_32 u4ArSysParam3; - UINT_32 fgDisRoaming; /* 0:enable roaming 1:disable */ - - // NVRAM - MP Data -START- - UINT_8 aucMacAddr[6]; - UINT_16 au2CountryCode[4]; /* Country code (in ISO 3166-1 expression, ex: "US", "TW") */ - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - ENUM_REG_CH_MAP_T eRegChannelListMap; - UINT_8 ucRegChannelListIndex; - DOMAIN_INFO_ENTRY rDomainInfo; - // NVRAM - MP Data -END- - - // NVRAM - Functional Data -START- - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - // NVRAM - Functional Data -END- - -} REG_INFO_T, *P_REG_INFO_T; - -/* for divided firmware loading */ -typedef struct _FWDL_SECTION_INFO_T -{ - UINT_32 u4Offset; - UINT_32 u4Reserved; - UINT_32 u4Length; - UINT_32 u4DestAddr; -} FWDL_SECTION_INFO_T, *P_FWDL_SECTION_INFO_T; - -typedef struct _FIRMWARE_DIVIDED_DOWNLOAD_T -{ - UINT_32 u4Signature; - UINT_32 u4CRC; /* CRC calculated without first 8 bytes included */ - UINT_32 u4NumOfEntries; - UINT_32 u4Reserved; - FWDL_SECTION_INFO_T arSection[]; -} FIRMWARE_DIVIDED_DOWNLOAD_T, *P_FIRMWARE_DIVIDED_DOWNLOAD_T; - -typedef struct _PARAM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_MCR_RW_STRUC_T, *P_PARAM_MCR_RW_STRUC_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define BUILD_SIGN(ch0, ch1, ch2, ch3) \ - ((UINT_32)(UINT_8)(ch0) | ((UINT_32)(UINT_8)(ch1) << 8) | \ - ((UINT_32)(UINT_8)(ch2) << 16) | ((UINT_32)(UINT_8)(ch3) << 24 )) - -#define MTK_WIFI_SIGNATURE BUILD_SIGN('M', 'T', 'K', 'W') - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanCardEjected( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ); - -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ); - -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ); - -VOID -wlanReleasePendingCMDbyNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ); - -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ); - -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ); - -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_SUPPORT_WAPI -BOOLEAN -wlanQueryWapiMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -wlanReturnRxPacket ( - IN PVOID pvAdapter, - IN PVOID pvPacket - ); - -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ); - -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ); - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - #endif - -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ); -#else -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ); -#endif - -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ); - -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len - ); - -#endif - -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ); - -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ); - -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ); - -/* Security Frame Handling */ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ); - -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ); - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanEnableATGO( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Address Retreive by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* NIC Capability Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* PD MCR Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ); -/*----------------------------------------------------------------------------*/ -/* Loading Manufacture Data */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media Stream Mode */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Timer Timeout Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* TX Pending Packets Handling (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ); - -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ); - - -/*----------------------------------------------------------------------------*/ -/* Low Power Acquire/Release (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Pending Packets Number Reporting (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* ACPI state inquiry (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ); -#endif - -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* get ECO version from Revision ID register (for Win32) */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* set preferred band configuration corresponding to network type */ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get currently operating channel information */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get BSS Descriptor information */ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -wlanGetTargetBssDescByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* check for system configuration to generate message on scan list */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ); - - -#endif /* _WLAN_LIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_oid.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_oid.h deleted file mode 100755 index 0f5a6b6e3f25..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_oid.h +++ /dev/null @@ -1,2073 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_oid.h#2 $ -*/ - -/*! \file "wlan_oid.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_oid.h $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * OID_802_11_RSSI, - * * * * OID_802_11_RSSI_TRIGGER, - * * * * OID_802_11_STATISTICS, - * * * * OID_802_11_DISASSOCIATE, - * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-08 11:38:11 GMT mtk02752 -** add declares for RF test related APIs -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-24 22:41:53 GMT mtk02752 -** remove u4SysTime, MSDN 10-second will be implemented in FW side -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 20:30:13 GMT mtk02752 -** add u4SysTime field in PARAM_BSSID_EX_T -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-12 19:48:35 GMT mtk02752 -** allow upper layer to set a packet filter with PROMISCUOUS mode -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:12 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_OID_H -#define _WLAN_OID_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define PARAM_MAX_LEN_SSID 32 - -#define PARAM_MAC_ADDR_LEN 6 - -#define ETHERNET_HEADER_SZ 14 -#define ETHERNET_MIN_PKT_SZ 60 -#define ETHERNET_MAX_PKT_SZ 1514 - -#define PARAM_MAX_LEN_RATES 8 -#define PARAM_MAX_LEN_RATES_EX 16 - -#define PARAM_AUTH_REQUEST_REAUTH 0x01 -#define PARAM_AUTH_REQUEST_KEYUPDATE 0x02 -#define PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 -#define PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E - -#define PARAM_EEPROM_READ_METHOD_READ 1 -#define PARAM_EEPROM_READ_METHOD_GETSIZE 0 - -#define PARAM_WHQL_RSSI_MAX_DBM (-10) -#define PARAM_WHQL_RSSI_MIN_DBM (-200) - -#define PARAM_DEVICE_WAKE_UP_ENABLE 0x00000001 -#define PARAM_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002 -#define PARAM_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004 - -#define PARAM_WAKE_UP_MAGIC_PACKET 0x00000001 -#define PARAM_WAKE_UP_PATTERN_MATCH 0x00000002 -#define PARAM_WAKE_UP_LINK_CHANGE 0x00000004 - - -/* Packet filter bit definitioin (UINT_32 bit-wise definition) */ -#define PARAM_PACKET_FILTER_DIRECTED 0x00000001 -#define PARAM_PACKET_FILTER_MULTICAST 0x00000002 -#define PARAM_PACKET_FILTER_ALL_MULTICAST 0x00000004 -#define PARAM_PACKET_FILTER_BROADCAST 0x00000008 -#define PARAM_PACKET_FILTER_PROMISCUOUS 0x00000020 -#define PARAM_PACKET_FILTER_ALL_LOCAL 0x00000080 -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#define PARAM_PACKET_FILTER_P2P_MASK 0xC0000000 -#define PARAM_PACKET_FILTER_PROBE_REQ 0x80000000 -#define PARAM_PACKET_FILTER_ACTION_FRAME 0x40000000 -#endif - -#if CFG_SLT_SUPPORT -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST | \ - PARAM_PACKET_FILTER_ALL_MULTICAST) -#else -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST) -#endif - -#define PARAM_MEM_DUMP_MAX_SIZE 2048 - -#define BT_PROFILE_PARAM_LEN 8 -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration which match to NDIS5.1 */ -/*----------------------------------------------------------------------------*/ -/* NDIS_802_11_AUTHENTICATION_MODE */ -typedef enum _ENUM_PARAM_AUTH_MODE_T -{ - AUTH_MODE_OPEN, /*!< Open system */ - AUTH_MODE_SHARED, /*!< Shared key */ - AUTH_MODE_AUTO_SWITCH, /*!< Either open system or shared key */ - AUTH_MODE_WPA, - AUTH_MODE_WPA_PSK, - AUTH_MODE_WPA_NONE, /*!< For Ad hoc */ - AUTH_MODE_WPA2, - AUTH_MODE_WPA2_PSK, - AUTH_MODE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_AUTH_MODE_T, *P_ENUM_PARAM_AUTH_MODE_T; - -/* NDIS_802_11_ENCRYPTION_STATUS *//* Encryption types */ -typedef enum _ENUM_WEP_STATUS_T -{ - ENUM_WEP_ENABLED, - ENUM_ENCRYPTION1_ENABLED = ENUM_WEP_ENABLED, - ENUM_WEP_DISABLED, - ENUM_ENCRYPTION_DISABLED = ENUM_WEP_DISABLED, - ENUM_WEP_KEY_ABSENT, - ENUM_ENCRYPTION1_KEY_ABSENT = ENUM_WEP_KEY_ABSENT, - ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION_NOT_SUPPORTED = ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION2_ENABLED, - ENUM_ENCRYPTION2_KEY_ABSENT, - ENUM_ENCRYPTION3_ENABLED, - ENUM_ENCRYPTION3_KEY_ABSENT -} ENUM_PARAM_ENCRYPTION_STATUS_T, *P_ENUM_PARAM_ENCRYPTION_STATUS_T; - - - -typedef UINT_8 PARAM_MAC_ADDRESS[PARAM_MAC_ADDR_LEN]; - -typedef UINT_32 PARAM_KEY_INDEX; -typedef UINT_64 PARAM_KEY_RSC; -typedef INT_32 PARAM_RSSI; - -typedef UINT_32 PARAM_FRAGMENTATION_THRESHOLD; -typedef UINT_32 PARAM_RTS_THRESHOLD; - -typedef UINT_8 PARAM_RATES[PARAM_MAX_LEN_RATES]; -typedef UINT_8 PARAM_RATES_EX[PARAM_MAX_LEN_RATES_EX]; - -typedef enum _ENUM_PARAM_PHY_TYPE_T { - PHY_TYPE_802_11ABG = 0, /*!< Can associated with 802.11abg AP, Scan dual band. */ - PHY_TYPE_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 802_11a BSSs. */ - PHY_TYPE_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 802_11ab BSSs. */ - PHY_TYPE_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 802_11bg BSSs. */ - PHY_TYPE_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 802_11ag BSSs. */ - PHY_TYPE_NUM // 5 -} ENUM_PARAM_PHY_TYPE_T, *P_ENUM_PARAM_PHY_TYPE_T; - -typedef enum _ENUM_PARAM_OP_MODE_T { - NET_TYPE_IBSS = 0, /*!< Try to merge/establish an AdHoc, do periodic SCAN for merging. */ - NET_TYPE_INFRA, /*!< Try to join an Infrastructure, do periodic SCAN for joining. */ - NET_TYPE_AUTO_SWITCH, /*!< Try to join an Infrastructure, if fail then try to merge or - establish an AdHoc, do periodic SCAN for joining or merging. */ - NET_TYPE_DEDICATED_IBSS, /*!< Try to merge an AdHoc first, if fail then establish AdHoc permanently, no more SCAN. */ - NET_TYPE_NUM // 4 -} ENUM_PARAM_OP_MODE_T, *P_ENUM_PARAM_OP_MODE_T; - -typedef struct _PARAM_SSID_T { - UINT_32 u4SsidLen; /*!< SSID length in bytes. Zero length is broadcast(any) SSID */ - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; -} PARAM_SSID_T, *P_PARAM_SSID_T; - -/* This is enum defined for user to select an AdHoc Mode */ -typedef enum _ENUM_PARAM_AD_HOC_MODE_T { - AD_HOC_MODE_11B = 0, /*!< Create 11b IBSS if we support 802.11abg/802.11bg. */ - AD_HOC_MODE_MIXED_11BG, /*!< Create 11bg mixed IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11G, /*!< Create 11g only IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11A, /*!< Create 11a only IBSS if we support 802.11abg. */ - AD_HOC_MODE_NUM // 4 -} ENUM_PARAM_AD_HOC_MODE_T, *P_ENUM_PARAM_AD_HOC_MODE_T; - - -typedef enum _ENUM_PARAM_MEDIA_STATE_T { - PARAM_MEDIA_STATE_CONNECTED, - PARAM_MEDIA_STATE_DISCONNECTED, - PARAM_MEDIA_STATE_TO_BE_INDICATED // for following MSDN re-association behavior -} ENUM_PARAM_MEDIA_STATE_T, *P_ENUM_PARAM_MEDIA_STATE_T; - - -typedef enum _ENUM_PARAM_NETWORK_TYPE_T { - PARAM_NETWORK_TYPE_FH, - PARAM_NETWORK_TYPE_DS, - PARAM_NETWORK_TYPE_OFDM5, - PARAM_NETWORK_TYPE_OFDM24, - PARAM_NETWORK_TYPE_AUTOMODE, - PARAM_NETWORK_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_NETWORK_TYPE_T, *P_ENUM_PARAM_NETWORK_TYPE_T; - - -typedef struct _PARAM_NETWORK_TYPE_LIST { - UINT_32 NumberOfItems; /*!< At least 1 */ - ENUM_PARAM_NETWORK_TYPE_T eNetworkType [1]; -} PARAM_NETWORK_TYPE_LIST, *PPARAM_NETWORK_TYPE_LIST; - -typedef enum _ENUM_PARAM_PRIVACY_FILTER_T -{ - PRIVACY_FILTER_ACCEPT_ALL, - PRIVACY_FILTER_8021xWEP, - PRIVACY_FILTER_NUM -} ENUM_PARAM_PRIVACY_FILTER_T, *P_ENUM_PARAM_PRIVACY_FILTER_T; - -typedef enum _ENUM_RELOAD_DEFAULTS -{ - ENUM_RELOAD_WEP_KEYS -} PARAM_RELOAD_DEFAULTS, *P_PARAM_RELOAD_DEFAULTS; - -typedef struct _PARAM_PM_PACKET_PATTERN -{ - UINT_32 Priority; // Importance of the given pattern. - UINT_32 Reserved; // Context information for transports. - UINT_32 MaskSize; // Size in bytes of the pattern mask. - UINT_32 PatternOffset; // Offset from beginning of this - // structure to the pattern bytes. - UINT_32 PatternSize; // Size in bytes of the pattern. - UINT_32 PatternFlags; // Flags (TBD). -} PARAM_PM_PACKET_PATTERN, *P_PARAM_PM_PACKET_PATTERN; - -/*--------------------------------------------------------------*/ -/*! \brief Struct definition to indicate specific event. */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_STATUS_TYPE_T -{ - ENUM_STATUS_TYPE_AUTHENTICATION, - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE, - ENUM_STATUS_TYPE_CANDIDATE_LIST, - ENUM_STATUS_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_STATUS_TYPE_T, *P_ENUM_STATUS_TYPE_T; - - -typedef struct _PARAM_802_11_CONFIG_FH_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4HopPattern; /*!< Defined as 802.11 */ - UINT_32 u4HopSet; /*!< to one if non-802.11 */ - UINT_32 u4DwellTime; /*!< In unit of Kusec */ -} PARAM_802_11_CONFIG_FH_T, *P_PARAM_802_11_CONFIG_FH_T; - -typedef struct _PARAM_802_11_CONFIG_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4BeaconPeriod; /*!< In unit of Kusec */ - UINT_32 u4ATIMWindow; /*!< In unit of Kusec */ - UINT_32 u4DSConfig; /*!< Channel frequency in unit of kHz */ - PARAM_802_11_CONFIG_FH_T rFHConfig; -} PARAM_802_11_CONFIG_T, *P_PARAM_802_11_CONFIG_T; - -typedef struct _PARAM_STATUS_INDICATION_T -{ - ENUM_STATUS_TYPE_T eStatusType; -} PARAM_STATUS_INDICATION_T, *P_PARAM_STATUS_INDICATION_T; - -typedef struct _PARAM_AUTH_REQUEST_T -{ - UINT_32 u4Length; /*!< Length of this struct */ - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4Flags; /*!< Definitions are as follows */ -} PARAM_AUTH_REQUEST_T, *P_PARAM_AUTH_REQUEST_T; - -typedef struct _PARAM_AUTH_EVENT_T -{ - PARAM_STATUS_INDICATION_T rStatus; - PARAM_AUTH_REQUEST_T arRequest[1]; -} PARAM_AUTH_EVENT_T, *P_PARAM_AUTH_EVENT_T; - -/*! \brief Capabilities, privacy, rssi and IEs of each BSSID */ -typedef struct _PARAM_BSSID_EX_T { - UINT_32 u4Length; /*!< Length of structure */ - PARAM_MAC_ADDRESS arMacAddress; /*!< BSSID */ - UINT_8 Reserved[2]; - PARAM_SSID_T rSsid; /*!< SSID */ - UINT_32 u4Privacy; /*!< Need WEP encryption */ - PARAM_RSSI rRssi; /*!< in dBm */ - PARAM_RSSI AvgRssiX8; - PARAM_RSSI AvgRssi; - ENUM_PARAM_NETWORK_TYPE_T eNetworkTypeInUse; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - PARAM_RATES_EX rSupportedRates; - UINT_32 u4IELength; - UINT_8 aucIEs[1]; -} PARAM_BSSID_EX_T, *P_PARAM_BSSID_EX_T; - -/*! hold a table of mac and AvgRssiX8*/ -typedef struct _TABLE_RSSI_ { - PARAM_MAC_ADDRESS arMacAddress; /*!< BSSID */ - PARAM_RSSI AvgRssiX8; - PARAM_RSSI AvgRssi; -} TABLE_RSSI; - -#define MAX_SCAN_RSSI_NUM 128 -extern TABLE_RSSI mTABLE_RSSI[MAX_SCAN_RSSI_NUM]; - -typedef struct _PARAM_BSSID_LIST_EX { - UINT_32 u4NumberOfItems; /*!< at least 1 */ - PARAM_BSSID_EX_T arBssid[1]; -} PARAM_BSSID_LIST_EX_T, *P_PARAM_BSSID_LIST_EX_T; - - -typedef struct _PARAM_WEP_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< 0: pairwise key, others group keys */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_WEP_T, *P_PARAM_WEP_T; - -/*! \brief Key mapping of BSSID */ -typedef struct _PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_KEY_T, *P_PARAM_KEY_T; - -typedef struct _PARAM_REMOVE_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ -} PARAM_REMOVE_KEY_T, *P_PARAM_REMOVE_KEY_T; - -#if CFG_SUPPORT_WAPI -typedef enum _ENUM_KEY_TYPE { - ENUM_WPI_PAIRWISE_KEY = 0, - ENUM_WPI_GROUP_KEY -} ENUM_KEY_TYPE; - -typedef enum _ENUM_WPI_PROTECT_TYPE -{ - ENUM_WPI_NONE, - ENUM_WPI_RX, - ENUM_WPI_TX, - ENUM_WPI_RX_TX -} ENUM_WPI_PROTECT_TYPE; - -typedef struct _PARAM_WPI_KEY_T { - ENUM_KEY_TYPE eKeyType; - ENUM_WPI_PROTECT_TYPE eDirection; - UINT_8 ucKeyID; - UINT_8 aucRsv[3]; - UINT_8 aucAddrIndex[12]; - UINT_32 u4LenWPIEK; - UINT_8 aucWPIEK[256]; - UINT_32 u4LenWPICK; - UINT_8 aucWPICK[256]; - UINT_8 aucPN[16]; -} PARAM_WPI_KEY_T, *P_PARAM_WPI_KEY_T; -#endif - - -typedef enum _PARAM_POWER_MODE -{ - Param_PowerModeCAM, - Param_PowerModeMAX_PSP, - Param_PowerModeFast_PSP, - Param_PowerModeMax /* Upper bound, not real case */ -} PARAM_POWER_MODE, *PPARAM_POWER_MODE; - -typedef enum _PARAM_DEVICE_POWER_STATE -{ - ParamDeviceStateUnspecified = 0, - ParamDeviceStateD0, - ParamDeviceStateD1, - ParamDeviceStateD2, - ParamDeviceStateD3, - ParamDeviceStateMaximum -} PARAM_DEVICE_POWER_STATE, *PPARAM_DEVICE_POWER_STATE; - -#if CFG_SUPPORT_802_11D - -/*! \brief The enumeration definitions for OID_IPN_MULTI_DOMAIN_CAPABILITY */ -typedef enum _PARAM_MULTI_DOMAIN_CAPABILITY { - ParamMultiDomainCapDisabled, - ParamMultiDomainCapEnabled -} PARAM_MULTI_DOMAIN_CAPABILITY, *P_PARAM_MULTI_DOMAIN_CAPABILITY; -#endif - -typedef struct _COUNTRY_STRING_ENTRY { - UINT_8 aucCountryCode[2]; - UINT_8 aucEnvironmentCode[2]; -} COUNTRY_STRING_ENTRY, *P_COUNTRY_STRING_ENTRY; - -/* Power management related definition and enumerations */ -#define UAPSD_NONE 0 -#define UAPSD_AC0 (BIT(0) | BIT(4)) -#define UAPSD_AC1 (BIT(1) | BIT(5)) -#define UAPSD_AC2 (BIT(2) | BIT(6)) -#define UAPSD_AC3 (BIT(3) | BIT(7)) -#define UAPSD_ALL (UAPSD_AC0 | UAPSD_AC1 | UAPSD_AC2 | UAPSD_AC3) - -typedef enum _ENUM_POWER_SAVE_PROFILE_T -{ - ENUM_PSP_CONTINUOUS_ACTIVE = 0, - ENUM_PSP_CONTINUOUS_POWER_SAVE, - ENUM_PSP_FAST_SWITCH, - ENUM_PSP_NUM -} ENUM_POWER_SAVE_PROFILE_T, *PENUM_POWER_SAVE_PROFILE_T; - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query testing type. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_802_11_TEST_T -{ - UINT_32 u4Length; - UINT_32 u4Type; - union - { - PARAM_AUTH_EVENT_T AuthenticationEvent; - PARAM_RSSI RssiTrigger; - } u; -} PARAM_802_11_TEST_T, *P_PARAM_802_11_TEST_T; - - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query authentication and encryption capability. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_AUTH_ENCRYPTION_T -{ - ENUM_PARAM_AUTH_MODE_T eAuthModeSupported; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncryptStatusSupported; -} PARAM_AUTH_ENCRYPTION_T, *P_PARAM_AUTH_ENCRYPTION_T; - -typedef struct _PARAM_CAPABILITY_T -{ - UINT_32 u4Length; - UINT_32 u4Version; - UINT_32 u4NoOfPMKIDs; - UINT_32 u4NoOfAuthEncryptPairsSupported; - PARAM_AUTH_ENCRYPTION_T arAuthenticationEncryptionSupported[1]; -} PARAM_CAPABILITY_T, *P_PARAM_CAPABILITY_T; - -typedef UINT_8 PARAM_PMKID_VALUE[16]; - -typedef struct _PARAM_BSSID_INFO_T -{ - PARAM_MAC_ADDRESS arBSSID; - PARAM_PMKID_VALUE arPMKID; -} PARAM_BSSID_INFO_T, *P_PARAM_BSSID_INFO_T; - -typedef struct _PARAM_PMKID_T -{ - UINT_32 u4Length; - UINT_32 u4BSSIDInfoCount; - PARAM_BSSID_INFO_T arBSSIDInfo[1]; -} PARAM_PMKID_T, *P_PARAM_PMKID_T; - -/*! \brief PMKID candidate lists. */ -typedef struct _PARAM_PMKID_CANDIDATE_T { - PARAM_MAC_ADDRESS arBSSID; - UINT_32 u4Flags; -} PARAM_PMKID_CANDIDATE_T, *P_PARAM_PMKID_CANDIDATE_T; - -//#ifdef LINUX -typedef struct _PARAM_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} PARAM_PMKID_CANDIDATE_LIST_T, *P_PARAM_PMKID_CANDIDATE_LIST_T; -//#endif - -typedef struct _PARAM_CUSTOM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_CUSTOM_MCR_RW_STRUC_T, *P_PARAM_CUSTOM_MCR_RW_STRUC_T; - -typedef struct _PARAM_CUSTOM_MEM_DUMP_STRUC_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} PARAM_CUSTOM_MEM_DUMP_STRUC_T, *P_PARAM_CUSTOM_MEM_DUMP_STRUC_T; - - -typedef struct _PARAM_CUSTOM_SW_CTRL_STRUC_T { - UINT_32 u4Id; - UINT_32 u4Data; -} PARAM_CUSTOM_SW_CTRL_STRUC_T, *P_PARAM_CUSTOM_SW_CTRL_STRUC_T; - - -typedef struct _PARAM_CUSTOM_EEPROM_RW_STRUC_T { - UINT_8 ucEepromMethod; /* For read only read: 1, query size: 0*/ - UINT_8 ucEepromIndex; - UINT_8 reserved; - UINT_16 u2EepromData; -} PARAM_CUSTOM_EEPROM_RW_STRUC_T, *P_PARAM_CUSTOM_EEPROM_RW_STRUC_T, - PARAM_CUSTOM_NVRAM_RW_STRUCT_T, *P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T; - -typedef struct _PARAM_CUSTOM_WMM_PS_TEST_STRUC_T { - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ - UINT_8 reserved; -} PARAM_CUSTOM_WMM_PS_TEST_STRUC_T, *P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T; - -typedef struct _PARAM_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} PARAM_CUSTOM_NOA_PARAM_STRUC_T, *P_PARAM_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} PARAM_CUSTOM_OPPPS_PARAM_STRUC_T, *P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} PARAM_CUSTOM_UAPSD_PARAM_STRUC_T, *P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_P2P_SET_STRUC_T { - UINT_32 u4Enable; - UINT_32 u4Mode; -} PARAM_CUSTOM_P2P_SET_STRUC_T, *P_PARAM_CUSTOM_P2P_SET_STRUC_T; - -typedef enum _ENUM_CFG_SRC_TYPE_T { - CFG_SRC_TYPE_EEPROM, - CFG_SRC_TYPE_NVRAM, - CFG_SRC_TYPE_UNKNOWN, - CFG_SRC_TYPE_NUM -} ENUM_CFG_SRC_TYPE_T, *P_ENUM_CFG_SRC_TYPE_T; - -typedef enum _ENUM_EEPROM_TYPE_T { - EEPROM_TYPE_NO, - EEPROM_TYPE_PRESENT, - EEPROM_TYPE_NUM -} ENUM_EEPROM_TYPE_T, *P_ENUM_EEPROM_TYPE_T; - -typedef struct _PARAM_QOS_TSINFO { - UINT_8 ucTrafficType; /* Traffic Type: 1 for isochronous 0 for asynchronous */ - UINT_8 ucTid; /* TSID: must be between 8 ~ 15 */ - UINT_8 ucDirection; /* direction */ - UINT_8 ucAccessPolicy; /* access policy */ - UINT_8 ucAggregation; /* aggregation */ - UINT_8 ucApsd; /* APSD */ - UINT_8 ucuserPriority; /* user priority */ - UINT_8 ucTsInfoAckPolicy; /* TSINFO ACK policy */ - UINT_8 ucSchedule; /* Schedule */ -} PARAM_QOS_TSINFO, *P_PARAM_QOS_TSINFO; - -typedef struct _PARAM_QOS_TSPEC { - PARAM_QOS_TSINFO rTsInfo; /* TS info field */ - UINT_16 u2NominalMSDUSize; /* nominal MSDU size */ - UINT_16 u2MaxMSDUsize; /* maximum MSDU size */ - UINT_32 u4MinSvcIntv; /* minimum service interval */ - UINT_32 u4MaxSvcIntv; /* maximum service interval */ - UINT_32 u4InactIntv; /* inactivity interval */ - UINT_32 u4SpsIntv; /* suspension interval */ - UINT_32 u4SvcStartTime; /* service start time */ - UINT_32 u4MinDataRate; /* minimum Data rate */ - UINT_32 u4MeanDataRate; /* mean data rate */ - UINT_32 u4PeakDataRate; /* peak data rate */ - UINT_32 u4MaxBurstSize; /* maximum burst size */ - UINT_32 u4DelayBound; /* delay bound */ - UINT_32 u4MinPHYRate; /* minimum PHY rate */ - UINT_16 u2Sba; /* surplus bandwidth allowance */ - UINT_16 u2MediumTime; /* medium time */ -} PARAM_QOS_TSPEC, *P_PARAM_QOS_TSPEC; - -typedef struct _PARAM_QOS_ADDTS_REQ_INFO { - PARAM_QOS_TSPEC rTspec; -} PARAM_QOS_ADDTS_REQ_INFO, *P_PARAM_QOS_ADDTS_REQ_INFO; - -typedef struct _PARAM_VOIP_CONFIG { - UINT_32 u4VoipTrafficInterval; /* 0: disable VOIP configuration */ -} PARAM_VOIP_CONFIG, *P_PARAM_VOIP_CONFIG; - -/*802.11 Statistics Struct*/ -typedef struct _PARAM_802_11_STATISTICS_STRUCT_T { - UINT_32 u4Length; // Length of structure - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; - LARGE_INTEGER rTKIPLocalMICFailures; - LARGE_INTEGER rTKIPICVErrors; - LARGE_INTEGER rTKIPCounterMeasuresInvoked; - LARGE_INTEGER rTKIPReplays; - LARGE_INTEGER rCCMPFormatErrors; - LARGE_INTEGER rCCMPReplays; - LARGE_INTEGER rCCMPDecryptErrors; - LARGE_INTEGER rFourWayHandshakeFailures; - LARGE_INTEGER rWEPUndecryptableCount; - LARGE_INTEGER rWEPICVErrorCount; - LARGE_INTEGER rDecryptSuccessCount; - LARGE_INTEGER rDecryptFailureCount; -} PARAM_802_11_STATISTICS_STRUCT_T, *P_PARAM_802_11_STATISTICS_STRUCT_T; - -/* Linux Network Device Statistics Struct */ -typedef struct _PARAM_LINUX_NETDEV_STATISTICS_T { - UINT_32 u4RxPackets; - UINT_32 u4TxPackets; - UINT_32 u4RxBytes; - UINT_32 u4TxBytes; - UINT_32 u4RxErrors; - UINT_32 u4TxErrors; - UINT_32 u4Multicast; -} PARAM_LINUX_NETDEV_STATISTICS_T, *P_PARAM_LINUX_NETDEV_STATISTICS_T; - - -typedef struct _PARAM_MTK_WIFI_TEST_STRUC_T { - UINT_32 u4FuncIndex; - UINT_32 u4FuncData; -} PARAM_MTK_WIFI_TEST_STRUC_T, *P_PARAM_MTK_WIFI_TEST_STRUC_T; - - -/* 802.11 Media stream constraints */ -typedef enum _ENUM_MEDIA_STREAM_MODE { - ENUM_MEDIA_STREAM_OFF, - ENUM_MEDIA_STREAM_ON -} ENUM_MEDIA_STREAM_MODE, *P_ENUM_MEDIA_STREAM_MODE; - -/* for NDIS 5.1 Media Streaming Change */ -typedef struct _PARAM_MEDIA_STREAMING_INDICATION { - PARAM_STATUS_INDICATION_T rStatus; - ENUM_MEDIA_STREAM_MODE eMediaStreamMode; -} PARAM_MEDIA_STREAMING_INDICATION, *P_PARAM_MEDIA_STREAMING_INDICATION; - - -#define PARAM_PROTOCOL_ID_DEFAULT 0x00 -#define PARAM_PROTOCOL_ID_TCP_IP 0x02 -#define PARAM_PROTOCOL_ID_IPX 0x06 -#define PARAM_PROTOCOL_ID_NBF 0x07 -#define PARAM_PROTOCOL_ID_MAX 0x0F -#define PARAM_PROTOCOL_ID_MASK 0x0F - -/* for NDIS OID_GEN_NETWORK_LAYER_ADDRESSES */ -typedef struct _PARAM_NETWORK_ADDRESS_IP -{ - UINT_16 sin_port; - UINT_32 in_addr; - UINT_8 sin_zero[8]; -} PARAM_NETWORK_ADDRESS_IP, *P_PARAM_NETWORK_ADDRESS_IP; - -typedef struct _PARAM_NETWORK_ADDRESS { - UINT_16 u2AddressLength; // length in bytes of Address[] in this - UINT_16 u2AddressType; // type of this address (PARAM_PROTOCOL_ID_XXX above) - UINT_8 aucAddress[1]; // actually AddressLength bytes long -} PARAM_NETWORK_ADDRESS, *P_PARAM_NETWORK_ADDRESS; - -// The following is used with OID_GEN_NETWORK_LAYER_ADDRESSES to set network layer addresses on an interface - -typedef struct _PARAM_NETWORK_ADDRESS_LIST -{ - UINT_32 u4AddressCount; // number of addresses following - UINT_16 u2AddressType; // type of this address (NDIS_PROTOCOL_ID_XXX above) - PARAM_NETWORK_ADDRESS arAddress[1]; // actually AddressCount elements long -} PARAM_NETWORK_ADDRESS_LIST, *P_PARAM_NETWORK_ADDRESS_LIST; - -#if CFG_SLT_SUPPORT - -#define FIXED_BW_LG20 0x0000 -#define FIXED_BW_UL20 0x2000 -#define FIXED_BW_DL40 0x3000 - -#define FIXED_EXT_CHNL_U20 0x4000 // For AGG register. -#define FIXED_EXT_CHNL_L20 0xC000 // For AGG regsiter. - -typedef enum _ENUM_MTK_LP_TEST_MODE_T { - ENUM_MTK_LP_TEST_NORMAL, - ENUM_MTK_LP_TEST_GOLDEN_SAMPLE, - ENUM_MTK_LP_TEST_DUT, - ENUM_MTK_LP_TEST_MODE_NUM -} ENUM_MTK_LP_TEST_MODE_T, *P_ENUM_MTK_LP_TEST_MODE_T; - -typedef enum _ENUM_MTK_SLT_FUNC_IDX_T { - ENUM_MTK_SLT_FUNC_DO_NOTHING, - ENUM_MTK_SLT_FUNC_INITIAL, - ENUM_MTK_SLT_FUNC_RATE_SET, - ENUM_MTK_SLT_FUNC_LP_SET, - ENUM_MTK_SLT_FUNC_NUM -} ENUM_MTK_SLT_FUNC_IDX_T, *P_ENUM_MTK_SLT_FUNC_IDX_T; - -typedef struct _PARAM_MTK_SLT_LP_TEST_STRUC_T { - ENUM_MTK_LP_TEST_MODE_T rLpTestMode; - UINT_32 u4BcnRcvNum; -} PARAM_MTK_SLT_LP_TEST_STRUC_T, *P_PARAM_MTK_SLT_LP_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TR_TEST_STRUC_T { - ENUM_PARAM_NETWORK_TYPE_T rNetworkType; // Network Type OFDM5G or OFDM2.4G - UINT_32 u4FixedRate; // Fixed Rate including BW -} PARAM_MTK_SLT_TR_TEST_STRUC_T, *P_PARAM_MTK_SLT_TR_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_INITIAL_STRUC_T { - UINT_8 aucTargetMacAddr[PARAM_MAC_ADDR_LEN]; - UINT_16 u2SiteID; -} PARAM_MTK_SLT_INITIAL_STRUC_T, *P_PARAM_MTK_SLT_INITIAL_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TEST_STRUC_T { - ENUM_MTK_SLT_FUNC_IDX_T rSltFuncIdx; - UINT_32 u4Length; /* Length of structure, - including myself */ - UINT_32 u4FuncInfoLen; /* Include following content - field and myself */ - union { - PARAM_MTK_SLT_INITIAL_STRUC_T rMtkInitTest; - PARAM_MTK_SLT_LP_TEST_STRUC_T rMtkLpTest; - PARAM_MTK_SLT_TR_TEST_STRUC_T rMtkTRTest; - } unFuncInfoContent; - -} PARAM_MTK_SLT_TEST_STRUC_T, *P_PARAM_MTK_SLT_TEST_STRUC_T; - -#endif - -/*--------------------------------------------------------------*/ -/*! \brief For Fixed Rate Configuration (Registry) */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_REGISTRY_FIXED_RATE_T { - FIXED_RATE_NONE, - FIXED_RATE_1M, - FIXED_RATE_2M, - FIXED_RATE_5_5M, - FIXED_RATE_11M, - FIXED_RATE_6M, - FIXED_RATE_9M, - FIXED_RATE_12M, - FIXED_RATE_18M, - FIXED_RATE_24M, - FIXED_RATE_36M, - FIXED_RATE_48M, - FIXED_RATE_54M, - FIXED_RATE_MCS0_20M_800NS, - FIXED_RATE_MCS1_20M_800NS, - FIXED_RATE_MCS2_20M_800NS, - FIXED_RATE_MCS3_20M_800NS, - FIXED_RATE_MCS4_20M_800NS, - FIXED_RATE_MCS5_20M_800NS, - FIXED_RATE_MCS6_20M_800NS, - FIXED_RATE_MCS7_20M_800NS, - FIXED_RATE_MCS0_20M_400NS, - FIXED_RATE_MCS1_20M_400NS, - FIXED_RATE_MCS2_20M_400NS, - FIXED_RATE_MCS3_20M_400NS, - FIXED_RATE_MCS4_20M_400NS, - FIXED_RATE_MCS5_20M_400NS, - FIXED_RATE_MCS6_20M_400NS, - FIXED_RATE_MCS7_20M_400NS, - FIXED_RATE_MCS0_40M_800NS, - FIXED_RATE_MCS1_40M_800NS, - FIXED_RATE_MCS2_40M_800NS, - FIXED_RATE_MCS3_40M_800NS, - FIXED_RATE_MCS4_40M_800NS, - FIXED_RATE_MCS5_40M_800NS, - FIXED_RATE_MCS6_40M_800NS, - FIXED_RATE_MCS7_40M_800NS, - FIXED_RATE_MCS32_800NS, - FIXED_RATE_MCS0_40M_400NS, - FIXED_RATE_MCS1_40M_400NS, - FIXED_RATE_MCS2_40M_400NS, - FIXED_RATE_MCS3_40M_400NS, - FIXED_RATE_MCS4_40M_400NS, - FIXED_RATE_MCS5_40M_400NS, - FIXED_RATE_MCS6_40M_400NS, - FIXED_RATE_MCS7_40M_400NS, - FIXED_RATE_MCS32_400NS, - FIXED_RATE_NUM -} ENUM_REGISTRY_FIXED_RATE_T, *P_ENUM_REGISTRY_FIXED_RATE_T; - -typedef enum _ENUM_BT_CMD_T { - BT_CMD_PROFILE = 0, - BT_CMD_UPDATE, - BT_CMD_NUM -} ENUM_BT_CMD_T; - -typedef enum _ENUM_BT_PROFILE_T { - BT_PROFILE_CUSTOM = 0, - BT_PROFILE_SCO, - BT_PROFILE_ACL, - BT_PROFILE_MIXED, - BT_PROFILE_NO_CONNECTION, - BT_PROFILE_NUM -} ENUM_BT_PROFILE_T; - -typedef struct _PTA_PROFILE_T { - ENUM_BT_PROFILE_T eBtProfile; - union { - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - /* 0: sco reserved slot time, - 1: sco idle slot time, - 2: acl throughput, - 3: bt tx power, - 4: bt rssi - 5: VoIP interval - 6: BIT(0) Use this field, BIT(1) 0 apply single/ 1 dual PTA setting. - */ - UINT_32 au4Btcr[4]; - } u; -} PTA_PROFILE_T, *P_PTA_PROFILE_T; - -typedef struct _PTA_IPC_T { - UINT_8 ucCmd; - UINT_8 ucLen; - union { - PTA_PROFILE_T rProfile; - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - } u; -} PARAM_PTA_IPC_T, *P_PARAM_PTA_IPC_T, PTA_IPC_T, *P_PTA_IPC_T; - -/*--------------------------------------------------------------*/ -/*! \brief CFG80211 Scan Request Container */ -/*--------------------------------------------------------------*/ - -typedef struct _PARAM_SCAN_REQUEST_EXT_T { - PARAM_SSID_T rSsid; - UINT_32 u4IELength; - PUINT_8 pucIE; -} PARAM_SCAN_REQUEST_EXT_T, *P_PARAM_SCAN_REQUEST_EXT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Routines to set parameters or query information. */ -/*--------------------------------------------------------------*/ -/***** Routines in wlan_oid.c *****/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryNetworkTypeInUse( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScan( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssidList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetSsid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySsid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryInfrastructureMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetInfrastructureMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAuthMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAuthMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if 0 -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAddWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetAddKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetReloadDefaults( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCapability( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssi( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssiTrigger( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRssiTrigger( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID prSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPmkid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetPmkid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySupportedRates( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestRxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestTxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryVendorId( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#ifdef LINUX - -WLAN_STATUS -wlanoidQueryStatisticsForLinux ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#endif - -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetCurrentPacketFilter( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen -); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -WLAN_STATUS -wlanoidSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/* RF Test related APIs */ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_WAPI -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_SUPPORT_WPS2 -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 u4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidUpdateSLTMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#endif - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/* -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -*/ - -#if CFG_ENABLE_WIFI_DIRECT -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_OID_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_p2p.h b/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_p2p.h deleted file mode 100755 index 4dc0a46a81a3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/include/wlan_p2p.h +++ /dev/null @@ -1,424 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/wlan_p2p.h#3 $ -*/ - -/*! \file "wlan_p2p.h" - \brief This file contains the declairations of Wi-Fi Direct command - processing routines for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - - - -/* -** $Log: wlan_p2p.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * -** -*/ - -#ifndef _WLAN_P2P_H -#define _WLAN_P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* Service Discovery */ -typedef struct _PARAM_P2P_SEND_SD_RESPONSE { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucChannelNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_RESPONSE, *P_PARAM_P2P_SEND_SD_RESPONSE; - -typedef struct _PARAM_P2P_GET_SD_REQUEST { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST, *P_PARAM_P2P_GET_SD_REQUEST; - -typedef struct _PARAM_P2P_GET_SD_REQUEST_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucChannelNum; /* Channel Number Where SD Request is received. */ - UINT_8 ucSeqNum; /* Get SD Request by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST_EX, *P_PARAM_P2P_GET_SD_REQUEST_EX; - -typedef struct _PARAM_P2P_SEND_SD_REQUEST { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucVersionNum; /* Indicate the Service Discovery Supplicant Version. */ - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_REQUEST, *P_PARAM_P2P_SEND_SD_REQUEST; - -/* Service Discovery 1.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE, *P_PARAM_P2P_GET_SD_RESPONSE; - -/* Service Discovery 2.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucSeqNum; /* Get SD Response by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE_EX, *P_PARAM_P2P_GET_SD_RESPONSE_EX; - - -typedef struct _PARAM_P2P_TERMINATE_SD_PHASE { - PARAM_MAC_ADDRESS rPeerAddr; -} PARAM_P2P_TERMINATE_SD_PHASE, *P_PARAM_P2P_TERMINATE_SD_PHASE; - - -/*! \brief Key mapping of BSSID */ -typedef struct _P2P_PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} P2P_PARAM_KEY_T, *P_P2P_PARAM_KEY_T; - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_PRE_PARAMS { - UINT_16 idx_mode; - UINT_16 idx; - UINT_32 value; -} NL80211_DRIVER_TEST_PRE_PARAMS, *P_NL80211_DRIVER_TEST_PRE_PARAMS; - - -typedef struct _NL80211_DRIVER_TEST_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_PARAMS, *P_NL80211_DRIVER_TEST_PARAMS; - - -/* P2P Sigma*/ -typedef struct _NL80211_DRIVER_P2P_SIGMA_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_32 idx; - UINT_32 value; -}NL80211_DRIVER_P2P_SIGMA_PARAMS, *P_NL80211_DRIVER_P2P_SIGMA_PARAMS; - - -/* Hotspot Client Management */ -typedef struct _NL80211_DRIVER_hotspot_block_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_8 ucblocked; - UINT_8 aucBssid[MAC_ADDR_LEN]; -}NL80211_DRIVER_hotspot_block_PARAMS, *P_NL80211_DRIVER_hotspot_block_PARAMS; - -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/*--------------------------------------------------------------*/ -/* Service Discovery Subroutines */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 puQueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#if CFG_SUPPORT_ANTI_PIRACY -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pOpChannel( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_P2P_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/aaa_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/aaa_fsm.c deleted file mode 100755 index 1d1479378e3a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/aaa_fsm.c +++ /dev/null @@ -1,1490 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/aaa_fsm.c#2 $ -*/ - -/*! \file "aaa_fsm.c" - \brief This file defines the FSM for AAA MODULE. - - This file defines the FSM for AAA MODULE. -*/ - - - -/* -** $Log: aaa_fsm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 22 2012 yuche.tsai - * NULL - * Solve sigma test 5.1.3 issue, assoc response should have P2P IE. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 02 2011 eddie.chen - * [WCXRP00000759] [MT6620 Wi-Fi][DRV] Update RCPI in AAA - * Update RCPI when receiving Assoc request. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 09 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * Skip to call p2pRunEventAAAComplete to avoid indicate STA connect twice. - * - * 03 04 2011 terry.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * Remove unused variable. - * - * 02 16 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Add more check after RX assoc frame under Hot-Spot mode. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 15 2011 puff.wen - * NULL - * [On behalf of Frog] Add CFG_ENABLE_WIFI_DIRECT to p2pRunEventAAAComplete - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Fix Compile warning, type cast from UINT_32 to UINT_16. - * - * 08 26 2010 yuche.tsai - * NULL - * In P2P AT GO test mode under WinXP, we would not indicate connected event to host. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 17 2010 yuche.tsai - * NULL - * Fix bug while enabling P2P GO. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * modify due to P2P functino call prototype change. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 02 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify CFG flags - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmSendEventJoinComplete ( - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ) -{ - P_MSG_SAA_JOIN_COMP_T prJoinCompMsg; - - - ASSERT(prStaRec); - - prJoinCompMsg = cnmMemAlloc(RAM_TYPE_TCM, sizeof(MSG_SAA_JOIN_COMP_T)); - if (!prJoinCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - if (IS_STA_IN_AIS(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - } - else if (IS_STA_IN_P2P(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - } - else if (IS_STA_IN_BOW(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - } - else { - ASSERT(0); - } - - prJoinCompMsg->rJoinStatus = rJoinStatus; - prJoinCompMsg->prStaRec = prStaRec; - prJoinCompMsg->prSwRfb = prSwRfb; - - mboxSendMsg(MBOX_ID_0, - (P_MSG_HDR_T)prJoinCompMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmSendEventJoinComplete() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to AAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventStart ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_JOIN_REQ_T prJoinReqMsg; - P_STA_RECORD_T prStaRec; - P_AIS_BSS_INFO_T prAisBssInfo; - - - ASSERT(prMsgHdr); - - prJoinReqMsg = (P_MSG_SAA_JOIN_REQ_T)prMsgHdr; - prStaRec = prJoinReqMsg->prStaRec; - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM\n")); - - cnmMemFree(prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec->eStaType)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(&prStaRec->rTxReqDoneOrRxRespTimer); - - prStaRec->ucStaState = STA_STATE_1; - - /* Trigger SAA MODULE */ - saaFsmSteps(prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ -#endif - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode; - BOOLEAN fgReplyAuth = FALSE; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - - ASSERT(prAdapter); - - do { - - - //4 <1> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <1.1> Validate Auth Frame by Auth Algorithm/Transation Seq - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <1.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = p2pFuncValidateAuth( - prAdapter, - prSwRfb, - &prStaRec, - &u2StatusCode); - } - else { - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <2> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)) { - - //4 <2.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <2.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = bowValidateAuth(prAdapter, prSwRfb, &prStaRec, &u2StatusCode); - - } - else { - - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return; - } while (FALSE); - - if(prStaRec) { - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - //4 <3> Update STA_RECORD_T and reply Auth_2(Response to Auth_1) Frame - if (fgReplyAuth) { - - if (prStaRec) { - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != IDLE.\n", - prStaRec->eAuthAssocState)); - } - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - } - else { - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - prStaRec->ucAuthAlgNum = AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - /* NOTE(Kevin): We should have STA_RECORD_T if the status code was successful */ - ASSERT(!(u2StatusCode == STATUS_CODE_SUCCESSFUL)); - } - - /* NOTE: Ignore the return status for AAA */ - //4 <4> Reply Auth - authSendAuthFrame(prAdapter, - prStaRec, - eNetTypeIndex, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - u2StatusCode); - - } - - return; -} /* end of aaaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode = STATUS_CODE_RESERVED; - BOOLEAN fgReplyAssocResp = FALSE; - - - ASSERT(prAdapter); - - do { - - //4 <1> Check if we have the STA_RECORD_T for incoming Assoc Req - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - ASSERT(0); // Only for debug phase - break; - } - - if (!IS_CLIENT_STA(prStaRec)) { - break; - } - - if (prStaRec->ucStaState == STA_STATE_3) { - /* Do Reassocation */ - } - else if ((prStaRec->ucStaState == STA_STATE_2) && - (prStaRec->eAuthAssocState == AAA_STATE_SEND_AUTH2)) { - /* Normal case */ - } - else { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != SEND_AUTH2.\n", - prStaRec->eAuthAssocState)); - break; - } - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - //4 <2> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <2.1> Validate Assoc Req Frame and get Status Code - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <2.2> Validate Assoc Req Frame for Network Specific Conditions - fgReplyAssocResp = p2pFuncValidateAssocReq( - prAdapter, - prSwRfb, - (PUINT_16)&u2StatusCode); - } - else { - fgReplyAssocResp = TRUE; - } - - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <3> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)){ - - //4 <3.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <3.2> Validate Auth Frame for Network Specific Conditions - fgReplyAssocResp = bowValidateAssocReq(prAdapter, prSwRfb, &u2StatusCode); - - } - else { - - fgReplyAssocResp = TRUE; - } - - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return WLAN_STATUS_SUCCESS; // To release the SW_RFB_T - } while (FALSE); - - - //4 <4> Update STA_RECORD_T and reply Assoc Resp Frame - if (fgReplyAssocResp) { - UINT_16 u2IELength; - PUINT_8 pucIE; - - if ((((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->u2FrameCtrl & MASK_FRAME_TYPE) == - MAC_FRAME_REASSOC_REQ) { - - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - - rlmProcessAssocReq(prAdapter, prSwRfb, pucIE, u2IELength); - - //4 <4.1> Assign Association ID - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - if (p2pRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - //prStaRec->eAuthAssocState = AA_STATE_IDLE; - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if ((IS_STA_IN_BOW(prStaRec))) { - -// if (bowRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } -#if 0 - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif -#endif - } - else { - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - /* NOTE: Ignore the return status for AAA */ - //4 <4.2> Reply Assoc Resp - assocSendReAssocRespFrame(prAdapter, prStaRec); - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth2/AssocReq) Event of AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(AAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - switch (prStaRec->eAuthAssocState) { - case AAA_STATE_SEND_AUTH2: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_2) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - /* NOTE(Kevin): Change to STATE_2 at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - else { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - } - - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - - } - break; - - case AAA_STATE_SEND_ASSOC2: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocRespFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_3 at TX Done */ -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAASuccess(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - - if (IS_STA_IN_BOW(prStaRec)) - { - bowRunEventAAAComplete(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - else { - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Change to STATE_2 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventTxDone() */ -#endif /* CFG_SUPPORT_AAA */ - - -#if 0 /* TODO(Kevin): for abort event, just reset the STA_RECORD_T. */ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send ABORT Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventAbort"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: ABORT\n")); - - - /* NOTE(Kevin): when reach here, the ARB_STATE should be in ARB_STATE_JOIN. */ - ASSERT(prJoinInfo->prBssDesc); - - //4 <1> Update Flags and Elements of JOIN Module. - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel all JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rJoinTimer); - - //4 <2> Update the associated STA_RECORD_T during JOIN. - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - if (prStaRec) { - - /* Update Station Record - Class 1 Flag */ - prStaRec->ucStaState = STA_STATE_1; - } -#if DBG - else { - ASSERT(0); /* Shouldn't happened, because we already add this STA_RECORD_T at JOIN_STATE_INIT */ - } -#endif /* DBG */ - - //4 <3> Pull back to IDLE. - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - //4 <4> If we are in Roaming, recover the settings of previous BSS. - /* NOTE: JOIN FAIL - - * Restore original setting from current BSS_INFO_T. - */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - return; -} /* end of joinFsmRunEventAbort() */ -#endif - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/ais_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/ais_fsm.c deleted file mode 100755 index f903fbd65bd3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/ais_fsm.c +++ /dev/null @@ -1,4599 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/ais_fsm.c#1 $ -*/ - -/*! \file "aa_fsm.c" - \brief This file defines the FSM for SAA and AAA MODULE. - - This file defines the FSM for SAA and AAA MODULE. -*/ - - - -/* -** $Log: ais_fsm.c $ - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * correct reference to BSSID field in Association-Response frame. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 26 2011 tsaiyuan.hsu - * [WCXRP00001064] [MT6620 Wi-Fi][DRV]] add code with roaming awareness when disconnecting AIS network - * be aware roaming when disconnecting AIS network. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * STA_REC shall be NULL for Beacon's MSDU - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 08 2011 tsaiyuan.hsu - * [WCXRP00000972] [MT6620 Wi-Fi][DRV]] check if roaming occurs after join failure to avoid state incosistence. - * check if roaming occurs after join failure to avoid deactivation of network. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * EnableRoaming in registry is deprecated. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * use registry to enable or disable roaming. - * - * 07 07 2011 cp.wu - * [WCXRP00000840] [MT6620 Wi-Fi][Driver][AIS] Stop timer for joining when channel is released due to join failure count exceeding limit - * stop timer when joining operation is failed due to try count exceeds limitation - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not handle SCAN request immediately after connected to increase the probability of receiving 1st beacon frame. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * ensure DEAUTH is always sent before establish a new connection - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * typo fix: a right brace is missed. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * When RECONNECT request is identified as disconnected, it is necessary to check for pending scan request. - * - * 06 16 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * mark fgIsTransition as TRUE for state rolling. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always check for pending scan after switched into NORMAL_TR state. - * - * 06 14 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always treat connection request at higher priority over scanning request - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 18 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * change SCAN handling behavior when followed by a CONNECT/DISCONNECT requests by pending instead of dropping. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 13 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * remove assert - * - * 03 18 2011 cp.wu - * [WCXRP00000575] [MT6620 Wi-Fi][Driver][AIS] reduce memory usage when generating mailbox message for scan request - * when there is no IE needed for probe request, then request a smaller memory for mailbox message - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 03 09 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * avoid clearing fgIsScanReqIssued so as to add scan results. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * reset retry conter of attemp to connect to ap after completion of join. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 23 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * when handling reconnect request, set fgTryScan as TRUE - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 02 09 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * Check if prRegInfo is null or not before initializing roaming parameters. - * - * 02 01 2011 cp.wu - * [WCXRP00000416] [MT6620 Wi-Fi][Driver] treat "unable to find BSS" as connection trial to prevent infinite reconnection trials - * treat "unable to find BSS" as connection trial to prevent infinite reconnection trials. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 01 11 2011 cp.wu - * [WCXRP00000307] [MT6620 Wi-Fi][SQA]WHQL test .2c_wlan_adhoc case fail. - * [IBSS] when merged in, the bss state should be updated to firmware to pass WHQL adhoc failed item - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 03 2011 cp.wu - * [WCXRP00000337] [MT6620 Wi-FI][Driver] AIS-FSM not to invoke cnmStaRecResetStatus directly 'cause it frees all belonging STA-RECs - * do not invoke cnmStaRecResetStatus() directly, nicUpdateBss will do the things after bss is disconnected - * - * 12 30 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * do not need to manipulate prStaRec after indicating BSS disconnection to firmware, 'cause all STA-RECs belongs to BSS has been freed already - * - * 12 27 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * add DEBUGFUNC() macro invoking for more detailed debugging information - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 14 2010 wh.su - * [WCXRP00000097] [MT6620 Wi-Fi] [Driver] Fixed the P2P not setting the fgIsChannelExt value make scan not abort - * initial the fgIsChannelExt value. - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000049] [MT6620 Wi-Fi][Driver] Adhoc cannot be created successfully. - * keep IBSS-ALONE state retrying until further instruction is received - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 09 2010 yuche.tsai - * NULL - * Fix NULL IE Beacon issue. Sync Beacon Content to FW before enable beacon. - * Both in IBSS Create & IBSS Merge - * - * 09 09 2010 cp.wu - * NULL - * frequency is in unit of KHz thus no need to divide 1000 once more. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 12 2010 cp.wu - * NULL - * check-in missed files. - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 09 2010 cp.wu - * NULL - * reset fgIsScanReqIssued when abort request is received right after join completion. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 29 2010 cp.wu - * NULL - * allocate on MGMT packet for IBSS beaconing. - * - * 07 29 2010 cp.wu - * NULL - * [AIS-FSM] fix: when join failed, release channel privilege as well - * - * 07 28 2010 cp.wu - * NULL - * reuse join-abort sub-procedure to reduce code size. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 23 2010 cp.wu - * - * indicate scan done for linux wireless extension - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 cp.wu - * - * 1) init AIS_BSS_INFO as channel number = 1 with band = 2.4GHz - * 2) correct typo - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * for AIS scanning, driver specifies no extra IE for probe request - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 yarco.yang - * - * Remove CFG_MQM_MIGRATION - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * once STA-REC is allocated and updated, invoke cnmStaRecChangeState() to sync. with firmware. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 01 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add conditionial compiling flag to choose default available bandwidth - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile error if CFG_CMD_EVENT_VER_009 == 0 for prEventConnStatus->ucNetworkType. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 17 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Call pmAbort() and add ucNetworkType field in EVENT_CONNECTION_STATUS - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - define of MQM_WMM_PARSING was removed - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * Fix typo - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 07 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add TX Power Control RCPI function. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 25 2010 wh.su - * [BORA00000676][MT6620] Support the frequency setting and query at build connection / connection event - * modify the build connection and status event structure bu CMD_EVENT doc 0.09 draft, default is disable. - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 24 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Set / Unset POWER STATE in AIS Network - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add PHY_CONFIG to change Phy Type - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Use bcmWiFiNotify to replace wifi_send_msg to pass infomation to BCM module. - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Remove wmt_task definition and add PTA function. - * - * 03 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Init TXM and MQM testing procedures in aisFsmRunEventJoinComplete() - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Modified aisUpdateBssInfo() to call TXM's functions for setting WTBL TX parameters - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * clear the pmkid cache while indicate media disconnect. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * . - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Enabled MQM parsing WMM IEs for non-AP mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 23 2010 wh.su - * [BORA00000621][MT6620 Wi-Fi] Add the RSSI indicate to avoid XP stalled for query rssi value - * Adding the RSSI event support, using the HAL function to get the rcpi value and tranlsate to RSSI and indicate to driver - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Set max AMDPU size supported by the peer to 64 KB, removed mqmInit() and mqmTxSendAddBaReq() function calls in aisUpdateBssInfo() - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 15 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Configured the AMPDU factor to 3 for the APu1rwduu`wvpghlqg|q`mpdkb+ilp - * - * 01 14 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add WiFi BCM module for the 1st time. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Refine JOIN Complete and seperate the function of Media State indication - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sample code to update the wlan table rate, - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Different function prototype of wifi_send_msg() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlm related function to process HT info when join complete - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * default the acquired wlan table entry code off - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to acquired the wlan table entry, and a sample code to update the BA bit at table - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix the problem of prSwRfb overwrited by event packet in aisFsmRunEventJoinComplete() - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to integrate the security related code - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove redundant declaration - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add code for JOIN init and JOIN complete - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise ENUM_MEDIA_STATE to ENUM_PARAM_MEDIA_STATE - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add fgIsScanReqIssued to CONNECTION_SETTINGS_T - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise Virtual CMD handler due to structure changed - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM flag for aisFsmTest() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_ROAMING_CONNECTION_TRIAL_LIMIT 2 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAisState[AIS_STATE_NUM] = { - (PUINT_8)DISP_STRING("AIS_STATE_IDLE"), - (PUINT_8)DISP_STRING("AIS_STATE_SEARCH"), - (PUINT_8)DISP_STRING("AIS_STATE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_ONLINE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_LOOKING_FOR"), - (PUINT_8)DISP_STRING("AIS_STATE_WAIT_FOR_NEXT_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_REQ_CHANNEL_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_ALONE"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_MERGE"), - (PUINT_8)DISP_STRING("AIS_STATE_NORMAL_TR"), - (PUINT_8)DISP_STRING("AIS_STATE_DISCONNECTING") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value of the connection settings for -* AIS network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucAnyBSSID[] = BC_BSSID; - UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Setup default values for operation */ - COPY_MAC_ADDR(prConnSettings->aucMacAddress, aucZeroMacAddr); - - prConnSettings->ucDelayTimeOfDisconnectEvent = AIS_DELAY_TIME_OF_DISCONNECT_SEC; - - COPY_MAC_ADDR(prConnSettings->aucBSSID, aucAnyBSSID); - prConnSettings->fgIsConnByBssidIssued = FALSE; - - prConnSettings->fgIsConnReqIssued = FALSE; - - prConnSettings->ucSSIDLen = 0; - - prConnSettings->eOPMode = NET_TYPE_INFRA; - - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - - if(prRegInfo) { - prConnSettings->ucAdHocChannelNum = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4StartFreq); - prConnSettings->eAdHocBand = prRegInfo->u4StartFreq < 5000000 ? BAND_2G4 : BAND_5G; - prConnSettings->eAdHocMode = (ENUM_PARAM_AD_HOC_MODE_T) (prRegInfo->u4AdhocMode); - } - - prConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prConnSettings->eEncStatus = ENUM_ENCRYPTION_DISABLED; - - prConnSettings->fgIsScanReqIssued = FALSE; - - /* MIB attributes */ - prConnSettings->u2BeaconPeriod = DOT11_BEACON_PERIOD_DEFAULT; - - prConnSettings->u2RTSThreshold = DOT11_RTS_THRESHOLD_DEFAULT; - - prConnSettings->u2DesiredNonHTRateSet = RATE_SET_ALL_ABG; - - //prConnSettings->u4FreqInKHz; /* Center frequency */ - - - /* Set U-APSD AC */ - prConnSettings->bmfgApsdEnAc = PM_UAPSD_NONE; - - secInit(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Features */ - prConnSettings->fgIsEnableRoaming = FALSE; -#if CFG_SUPPORT_ROAMING - if(prRegInfo) { - prConnSettings->fgIsEnableRoaming = ((prRegInfo->fgDisRoaming > 0)?(FALSE):(TRUE)); - } -#endif /* CFG_SUPPORT_ROAMING */ - - prConnSettings->fgIsAdHocQoSEnable = FALSE; - - prConnSettings->eDesiredPhyConfig = PHY_CONFIG_802_11ABGN; - - /* Set default bandwidth modes */ - prConnSettings->uc2G4BandwidthMode = CONFIG_BW_20M; - prConnSettings->uc5GBandwidthMode = CONFIG_BW_20_40M; - - return; -} /* end of aisFsmInitializeConnectionSettings() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmInit()"); - DBGLOG(SW1, INFO, ("->aisFsmInit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Initiate FSM - prAisFsmInfo->ePreviousState = AIS_STATE_IDLE; - prAisFsmInfo->eCurrentState = AIS_STATE_IDLE; - - prAisFsmInfo->ucAvailableAuthTypes = 0; - - prAisFsmInfo->prTargetBssDesc = (P_BSS_DESC_T)NULL; - - prAisFsmInfo->ucSeqNumOfReqMsg = 0; - prAisFsmInfo->ucSeqNumOfChReq = 0; - prAisFsmInfo->ucSeqNumOfScanReq = 0; - - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - //4 <1.1> Initiate FSM - Timer INIT - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventBGSleepTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventIbssAloneTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisPostponedEventOfDisconnTimeout, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventJoinTimeout, - (UINT_32)NULL); - - //4 <1.2> Initiate PWR STATE - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_AIS_INDEX); - COPY_MAC_ADDR(prAisBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prAisBssInfo->eBand = BAND_2G4; - prAisBssInfo->ucPrimaryChannel = 1; - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - //4 <4> Allocate MSDU_INFO_T for Beacon - prAisBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prAisBssInfo->prBeacon) { - prAisBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prAisBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - } - else { - ASSERT(0); - } - -#if 0 - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - if (prAdapter->u4UapsdAcBmp == 0) { - prAdapter->u4UapsdAcBmp = CFG_INIT_UAPSD_AC_BMP; - //ASSERT(prAdapter->u4UapsdAcBmp); - } - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - - /* request list initialization */ - LINK_INITIALIZE(&prAisFsmInfo->rPendingReqList); - - //DBGPRINTF("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - //prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - //prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - //prAisBssInfo->rPmProfSetupInfo.ucUapsdSp); - - return; -} /* end of aisFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to uninitialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmUninit()"); - DBGLOG(SW1, INFO, ("->aisFsmUninit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Stop all timers - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - //4 <2> flush pending request - aisFsmFlushRequest(prAdapter); - - //4 <3> Reset driver-domain BSS-INFO - if(prAisBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prAisBssInfo->prBeacon); - prAisBssInfo->prBeacon = NULL; - } - -#if CFG_SUPPORT_802_11W - rsnStopSaQuery(prAdapter); -#endif - - return; -} /* end of aisFsmUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_JOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - ASSERT(prBssDesc); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_LEGACY_AP, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - prStaRec->fgIsReAssoc = FALSE; - - switch (prConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - - - case AUTH_MODE_SHARED: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(AIS, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - - default: - ASSERT(!(prConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(AIS, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - - /* TODO(tyhsu): Assume that Roaming Auth Type is equal to ConnSettings eAuthMode */ - prAisSpecificBssInfo->ucRoamingAuthTypes = prAisFsmInfo->ucAvailableAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - } - else { - ASSERT(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE); - ASSERT(!prBssDesc->fgIsConnected); - - DBGLOG(AIS, LOUD, ("JOIN INIT: AUTH TYPE = %d for Roaming\n", - prAisSpecificBssInfo->ucRoamingAuthTypes)); - - - prStaRec->fgIsReAssoc = TRUE; /* We do roaming while the medium is connected */ - - /* TODO(Kevin): We may call a sub function to acquire the Roaming Auth Type */ - prAisFsmInfo->ucAvailableAuthTypes = prAisSpecificBssInfo->ucRoamingAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING; - } - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prConnSettings->eConnectionPolicy == CONNECT_BY_SSID_ANY) { - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - if (1) { - int j; - P_FRAG_INFO_T prFragInfo; - for (j = 0; j < MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS; j++) { - prFragInfo = &prStaRec->rFragInfo[j]; - - if (prFragInfo->pr1stFrag) { - //nicRxReturnRFB(prAdapter, prFragInfo->pr1stFrag); - prFragInfo->pr1stFrag = (P_SW_RFB_T)NULL; - } - } - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} /* end of aisFsmInit_JOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_RetryJOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Retry other AuthType if possible */ - if (!prAisFsmInfo->ucAvailableAuthTypes) { - return FALSE; - } - - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(AIS, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - } - - prAisFsmInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return FALSE; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return TRUE; - -}/* end of aisFsmRetryJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_ALONE -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Check if IBSS was created before ? - if (prAisBssInfo->fgIsBeaconActivated) { - - //4 <2> Start IBSS Alone Timer for periodic SCAN and then SEARCH -#if !CFG_SLT_SUPPORT - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); -#endif - } - - aisFsmCreateIBSS(prAdapter); - - return; -} /* end of aisFsmStateInit_IBSS_ALONE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_MERGE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the IBSS we will try to merge with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - - ASSERT(prBssDesc); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prStaRec->fgIsMerging = TRUE; - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> IBSS-Merge - aisFsmMergeIBSS(prAdapter, prStaRec); - - return; -} /* end of aisFsmStateInit_IBSS_MERGE() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_ABORT_T prJoinAbortMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* 1. Abort JOIN process */ - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - - ASSERT(0); // Can't abort SAA FSM - return; - } - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prAisFsmInfo->prTargetStaRec; - - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisFsmInfo->prTargetStaRec->aucMacAddr); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - /* 2. Return channel privilege */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - return; -} /* end of aisFsmAbortJOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of SCAN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - - ASSERT(0); // Can't abort SCN FSM - return; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfScanReq; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - prScanCancelMsg->fgIsChannelExt = FALSE; - } -#endif - - /* unbuffered message to guarantee scan is cancelled in sequence */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_UNBUF); - - return; -} /* end of aisFsmAbortSCAN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* TODO(Kevin): Do abort other MGMT func */ - - /* 1. Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* 2.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 2.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - return; -} /* end of aisFsmAbortNORMAL_TR() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_DESC_T prBssDesc; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // reset BSS-DESC - if (prAisFsmInfo->prTargetStaRec) { - prBssDesc = scanSearchBssDescByTA(prAdapter, - prAisFsmInfo->prTargetStaRec->aucMacAddr); - - if (prBssDesc) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - } - } - - // release channel privilege - aisFsmReleaseCh(prAdapter); - - return; -} -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of AIS(Ad-hoc, Infra STA) -* -* @param[in] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - P_MSG_CH_REQ_T prMsgChReq; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_AIS_REQ_HDR_T prAisReq; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - UINT_16 u2ScanIELen; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("aisFsmSteps()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - - /* Do entering Next State */ - prAisFsmInfo->ePreviousState = prAisFsmInfo->eCurrentState; - -#if DBG - DBGLOG(AIS, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAisState[prAisFsmInfo->eCurrentState], - apucDebugAisState[eNextState])); -#else - DBGLOG(AIS, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prAisFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prAisFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case AIS_STATE_IDLE: - - prAisReq = aisFsmGetNextRequest(prAdapter); - - if(prAisReq == NULL || prAisReq->eReqType == AIS_REQUEST_RECONNECT) { - if (prConnSettings->fgIsConnReqIssued) { - - prAisFsmInfo->fgTryScan = TRUE; - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // reset trial count - prAisFsmInfo->ucConnTrialCount = 0; - - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - else { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // check for other pending request - if(prAisReq) { - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_SCAN; - - fgIsTransition = TRUE; - } - } - } - - if(prAisReq) { - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - } - else if(prAisReq->eReqType == AIS_REQUEST_SCAN) { -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - wlanClearScanningResult(prAdapter); - - eNextState = AIS_STATE_SCAN; - fgIsTransition = TRUE; - - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - else if(prAisReq->eReqType == AIS_REQUEST_ROAMING_CONNECT || prAisReq->eReqType == AIS_REQUEST_ROAMING_SEARCH) { - /* ignore */ - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - - prAisFsmInfo->u4SleepInterval = AIS_BG_SCAN_INTERVAL_MIN_SEC; - - break; - - case AIS_STATE_SEARCH: - //4 <1> Search for a matched candidate and save it to prTargetBssDesc. -#if CFG_SLT_SUPPORT - prBssDesc = prAdapter->rWifiVar.rSltInfo.prPseudoBssDesc; -#else - prBssDesc = scanSearchBssDescByPolicy(prAdapter, NETWORK_TYPE_AIS_INDEX); -#endif - - // we are under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(prAisFsmInfo->ucConnTrialCount > AIS_ROAMING_CONNECTION_TRIAL_LIMIT) { -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_CONNLIMIT); -#endif /* CFG_SUPPORT_ROAMING */ - // reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // abort connection trial - prConnSettings->fgIsConnReqIssued = FALSE; - - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - - break; - } - } - - //4 <2> We are not under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - //4 <2.a> If we have the matched one - if (prBssDesc) { - - //4 Stored the Selected BSS security cipher. For later asoc req compose IE - prAisBssInfo->u4RsnSelectedGroupCipher = - prBssDesc->u4RsnSelectedGroupCipher; - prAisBssInfo->u4RsnSelectedPairwiseCipher = - prBssDesc->u4RsnSelectedPairwiseCipher; - prAisBssInfo->u4RsnSelectedAKMSuite = - prBssDesc->u4RsnSelectedAKMSuite; - - //4 Do STATE transition and update current Operation Mode. - if (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - - // increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - } -#if CFG_SUPPORT_ADHOC - else if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - eNextState = AIS_STATE_IBSS_MERGE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - //4 <2.b> If we don't have the matched one - else { - - // increase connection trial count for infrastructure connection - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - prAisFsmInfo->ucConnTrialCount++; - } - - //4 Try to SCAN - if (prAisFsmInfo->fgTryScan) { - eNextState = AIS_STATE_LOOKING_FOR; - - fgIsTransition = TRUE; - } - //4 We've do SCAN already, now wait in some STATE. - else { - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - - /* issue reconnect request, and retreat to idle state for scheduling */ - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - eNextState = AIS_STATE_IDLE; - fgIsTransition = TRUE; - } -#if CFG_SUPPORT_ADHOC - else if ((prConnSettings->eOPMode == NET_TYPE_IBSS) - || (prConnSettings->eOPMode == NET_TYPE_AUTO_SWITCH) - || (prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS)) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - prAisFsmInfo->prTargetBssDesc = NULL; - - eNextState = AIS_STATE_IBSS_ALONE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - } - } - //4 <3> We are under Roaming Condition. - else { // prAdapter->eConnectionState == MEDIA_STATE_CONNECTED. - - //4 <3.a> This BSS_DESC_T is our AP. - /* NOTE(Kevin 2008/05/16): Following cases will go back to NORMAL_TR. - * CASE I: During Roaming, APP(WZC/NDISTEST) change the connection - * settings. That make we can NOT match the original AP, so the - * prBssDesc is NULL. - * CASE II: The same reason as CASE I. Because APP change the - * eOPMode to other network type in connection setting - * (e.g. NET_TYPE_IBSS), so the BssDesc become the IBSS node. - * (For CASE I/II, before WZC/NDISTEST set the OID_SSID, it will change - * other parameters in connection setting first. So if we do roaming - * at the same time, it will hit these cases.) - * - * CASE III: Normal case, we can't find other candidate to roam - * out, so only the current AP will be matched. - */ - if ((!prBssDesc) || /* CASE I */ - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) || /* CASE II */ - (prBssDesc->fgIsConnected) /* CASE III */) { -#if DBG - if ((prBssDesc) && - (prBssDesc->fgIsConnected)) { - ASSERT(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); - } -#endif /* DBG */ - /* We already associated with it, go back to NORMAL_TR */ - /* TODO(Kevin): Roaming Fail */ -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_NOCANDIDATE); -#endif /* CFG_SUPPORT_ROAMING */ - - /* Retreat to NORMAL_TR state */ - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - } - //4 <3.b> Try to roam out for JOIN this BSS_DESC_T. - else { -#if DBG - ASSERT(UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); -#endif /* DBG */ - - //4 Record the target BSS_DESC_T for next STATE. - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - // tyhsu: increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - - DBGLOG(AIS, LOUD, ("SCAN: Idle Begin - Current Time = %ld\n", kalGetTimeTick())); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - SEC_TO_MSEC(prAisFsmInfo->u4SleepInterval)); - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (prAisFsmInfo->u4SleepInterval < AIS_BG_SCAN_INTERVAL_MAX_SEC) { - prAisFsmInfo->u4SleepInterval <<= 1; - } - break; - - case AIS_STATE_SCAN: - case AIS_STATE_ONLINE_SCAN: - case AIS_STATE_LOOKING_FOR: - - if(!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) { - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - - /* IE length decision */ - if(prAisFsmInfo->u4ScanIELength > 0) { - u2ScanIELen = (UINT_16)prAisFsmInfo->u4ScanIELength; - } - else { -#if CFG_SUPPORT_WPS2 - u2ScanIELen = prAdapter->prGlueInfo->u2WSCIELen; -#else - u2ScanIELen = 0; -#endif - } - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - OFFSET_OF(MSG_SCN_SCAN_REQ, aucIE) + u2ScanIELen); - if (!prScanReqMsg) { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prScanReqMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - -#if CFG_SUPPORT_RDD_TEST_MODE - prScanReqMsg->eScanType = SCAN_TYPE_PASSIVE_SCAN; -#else - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; -#endif - - if(prAisFsmInfo->eCurrentState == AIS_STATE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - if(prAisFsmInfo->ucScanSSIDLen == 0) { - /* Scan for all available SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - } - else { - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen); - } - } - else { - /* Scan for determined SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - } - - /* check if tethering is running and need to fix on specific channel */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->ucChannelListNum = 1; - prScanReqMsg->arChnlInfoList[0].eBand - = eBand;; - prScanReqMsg->arChnlInfoList[0].ucChannelNum - = ucChannel; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_NULL) { - if(prAdapter->fgEnable5GBand == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_2G4) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_5G) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - ASSERT(0); - } - - if(prAisFsmInfo->u4ScanIELength > 0) { - kalMemCopy(prScanReqMsg->aucIE, prAisFsmInfo->aucScanIEBuf, prAisFsmInfo->u4ScanIELength); - } - else { -#if CFG_SUPPORT_WPS2 - if(prAdapter->prGlueInfo->u2WSCIELen > 0) { - kalMemCopy(prScanReqMsg->aucIE, &prAdapter->prGlueInfo->aucWSCIE, prAdapter->prGlueInfo->u2WSCIELen); - } - } -#endif - - prScanReqMsg->u2IELen = u2ScanIELen; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChReq->ucTokenID = ++prAisFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prMsgChReq->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = prAisFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prAisFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prAisFsmInfo->prTargetBssDesc->aucBSSID); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgIsChannelRequested = TRUE; - break; - - case AIS_STATE_JOIN: - aisFsmStateInit_JOIN(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - aisFsmStateInit_IBSS_ALONE(prAdapter); - break; - - case AIS_STATE_IBSS_MERGE: - aisFsmStateInit_IBSS_MERGE(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_NORMAL_TR: - if(prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - /* Don't do anything when rJoinTimeoutTimer is still ticking */ - } - else { - /* 1. Process for pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - fgIsTransition = TRUE; - } - /* 2. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE) == TRUE) { - eNextState = AIS_STATE_LOOKING_FOR; - fgIsTransition = TRUE; - } - /* 3. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE) == TRUE) { - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_DISCONNECTING: - /* send for deauth frame for disconnection */ - authSendDeauthFrame(prAdapter, - prAisBssInfo->prStaRecOfAP, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - aisDeauthXmitComplete); - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - - } - } - while (fgIsTransition); - - return; - -} /* end of aisFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("aisFsmRunEventScanDone()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - DBGLOG(AIS, LOUD, ("EVENT-SCAN DONE: Current Time = %ld\n", kalGetTimeTick())); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - ASSERT(prScanDoneMsg->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - cnmMemFree(prAdapter, prMsgHdr); - - eNextState = prAisFsmInfo->eCurrentState; - - if (ucSeqNumOfCompMsg != prAisFsmInfo->ucSeqNumOfScanReq) { - DBGLOG(AIS, WARN, ("SEQ NO of AIS SCN DONE MSG is not matched.\n")); - } - else { - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); - eNextState = AIS_STATE_IDLE; - - break; - - case AIS_STATE_ONLINE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_NORMAL_TR; -#endif /* CFG_SUPPORT_ROAMING */ - - break; - - case AIS_STATE_LOOKING_FOR: -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_SEARCH; -#endif /* CFG_SUPPORT_ROAMING */ - break; - - default: - break; - - } - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventScanDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; - - DEBUGFUNC("aisFsmRunEventAbort()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - //4 <1> Extract information of Abort Message and then free memory. - prAisAbortMsg = (P_MSG_AIS_ABORT_T)prMsgHdr; - ucReasonOfDisconnect = prAisAbortMsg->ucReasonOfDisconnect; - fgDelayIndication = prAisAbortMsg->fgDelayIndication; - - cnmMemFree(prAdapter, prMsgHdr); - -#if DBG - DBGLOG(AIS, LOUD, ("EVENT-ABORT: Current State %s\n", - apucDebugAisState[prAisFsmInfo->eCurrentState])); -#else - DBGLOG(AIS, LOUD, ("[%d] EVENT-ABORT: Current State [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState)); -#endif - - //4 <2> clear previous pending connection request and insert new one - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - if(prAisFsmInfo->eCurrentState != AIS_STATE_DISCONNECTING) { - //4 <3> invoke abort handler - aisFsmStateAbort(prAdapter, ucReasonOfDisconnect, fgDelayIndication); - } - - return; -} /* end of aisFsmRunEventAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handles AIS-FSM abort event/command -* -* \param[in] prAdapter Pointer of ADAPTER_T -* ucReasonOfDisconnect Reason for disonnection -* fgDelayIndication Option to delay disconnection indication -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - BOOLEAN fgIsCheckConnected; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - fgIsCheckConnected = FALSE; - - //4 <1> Save information of Abort Message and then free memory. - prAisBssInfo->ucReasonOfDisconnect = ucReasonOfDisconnect; - - //4 <2> Abort current job. - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IDLE: - case AIS_STATE_SEARCH: - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - /* Do cancel timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - break; - - case AIS_STATE_LOOKING_FOR: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_JOIN: - /* Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - case AIS_STATE_IBSS_MERGE: - aisFsmStateAbort_IBSS(prAdapter); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_ONLINE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_NORMAL_TR: - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_DISCONNECTING: - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - - break; - - default: - break; - } - - if (fgIsCheckConnected && - (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState)) { - - /* switch into DISCONNECTING state for sending DEAUTH if necessary */ - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_NEW_CONNECTION && - prAisBssInfo->prStaRecOfAP && - prAisBssInfo->prStaRecOfAP->fgIsInUse) { - aisFsmSteps(prAdapter, AIS_STATE_DISCONNECTING); - - return; - } - else { - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - } - } - - aisFsmDisconnect(prAdapter, fgDelayIndication); - - return; - -} /* end of aisFsmStateAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for AIS FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - - DEBUGFUNC("aisFsmRunEventJoinComplete()"); - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - - eNextState = prAisFsmInfo->eCurrentState; - - // Check State and SEQ NUM - if (prAisFsmInfo->eCurrentState == AIS_STATE_JOIN) { - P_BSS_INFO_T prAisBssInfo; - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prAisFsmInfo->ucSeqNumOfReqMsg) { - - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //1. Reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // Completion of roaming - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - -#if CFG_SUPPORT_ROAMING - //2. Deactivate previous BSS - aisFsmRoamingDisconnectPrevAP(prAdapter, prStaRec); - - //3. Update bss based on roaming staRec - aisUpdateBssInfoForRoamingAP(prAdapter, prStaRec, prAssocRspSwRfb); -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_AIS_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventStart(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <1.7> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - } - //4 <2> JOIN was not successful - else { - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (aisFsmStateInit_RetryJOIN(prAdapter, prStaRec) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* 1. Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* 2. release channel */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - prBssDesc = scanSearchBssDescByBssid(prAdapter, prStaRec->aucMacAddr); - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - } - - /* 3.3 Free STA-REC */ - if(prStaRec != prAisBssInfo->prStaRecOfAP) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { -#if CFG_SUPPORT_ROAMING - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - /* 4. send reconnect request */ - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - eNextState = AIS_STATE_IDLE; - } - } - } - } -#if DBG - else { - DBGLOG(AIS, WARN, ("SEQ NO of AIS JOIN COMP MSG is not matched.\n")); - } -#endif /* DBG */ - - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of aisFsmRunEventJoinComplete() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Create which was sent by -* CNM to indicate that channel was changed for creating IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - do { - // Check State - if (prAisFsmInfo->eCurrentState == AIS_STATE_IBSS_ALONE) { - aisUpdateBssInfoForCreateIBSS(prAdapter); - } - } - while (FALSE); - - return; -} /* end of aisFsmCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Merge which was sent by -* CNM to indicate that channel was changed for merging IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* @param[in] prStaRec Pointer of STA_RECORD_T for merge -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - do { - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_MERGE: - { - P_BSS_DESC_T prBssDesc; - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous Peers' STA_RECORD_T in Driver if have. - bssClearClientList(prAdapter, prAisBssInfo); - - //4 <1.3> Unmark connection flag of previous BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = FALSE; - } - - //4 <1.4> Update BSS_INFO_T - aisUpdateBssInfoForMergeIBSS(prAdapter, prStaRec); - - //4 <1.5> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - - //4 <1.6> Activate current Peer's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.7> Enable other features - - //4 <1.8> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - -#if CFG_SLT_SUPPORT - prAdapter->rWifiVar.rSltInfo.prPseudoStaRec = prStaRec; -#endif - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - } - while (FALSE); - - return; -} /* end of aisFsmMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Notification of existing IBSS was found -* from SCN. -* -* @param[in] prMsgHdr Message of Notification of an IBSS was present. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - BOOLEAN fgIsMergeIn; - - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T)prMsgHdr; - - ASSERT(prAisIbssPeerFoundMsg->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX); - - prStaRec = prAisIbssPeerFoundMsg->prStaRec; - ASSERT(prStaRec); - - fgIsMergeIn = prAisIbssPeerFoundMsg->fgIsMergeIn; - - cnmMemFree(prAdapter, prMsgHdr); - - - eNextState = prAisFsmInfo->eCurrentState; - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - { - //4 <1> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ - -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.6> sync. to firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.7> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.8> indicate PM for connected - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - } - //4 <2> We need 'merge out' to this IBSS - else { - - //4 <2.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <2.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - } - } - break; - - case AIS_STATE_NORMAL_TR: - { - - //4 <3> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <3.1> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - } - //4 <4> We need 'merge out' to this IBSS - else { - - //4 <4.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <4.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - - } - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventFoundIBSSPeer() */ -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisIndicationOfMediaStateToHost()"); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // NOTE(Kevin): Move following line to aisChangeMediaState() macro per CM's request. - //prAisBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prAisBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prAisBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prAisBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prAisBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prAisBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prAisBssInfo->ucPrimaryChannel); - - switch (prAisBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - /* Deactivate previous Peers' STA_RECORD_T in Driver if have. */ - bssClearClientList(prAdapter, prAisBssInfo); - - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prAisBssInfo->ucReasonOfDisconnect; - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_AIS_INDEX, &rEventConnStatus); - prAisBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(AIS, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} /* end of aisIndicationOfMediaStateToHost() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Deactivate previous AP's STA_RECORD_T in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - - //4 <2> Remove pending connection request - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - /* Set Connection Request Issued Flag */ - prConnSettings->fgIsConnReqIssued = FALSE; - - //4 <3> Indicate Disconnected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, FALSE); - - return; -} /* end of aisPostponedEventOfDisconnTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_BSS_DESC_T prBssDesc; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("aisUpdateBssInfoForJOIN()"); - - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - - DBGLOG(AIS, INFO, ("Update AIS_BSS_INFO_T and apply settings to MAC\n")); - - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prAisBssInfo->eBand = prAisFsmInfo->prTargetBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = prStaRec; - prAisBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prAisBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAssocRspFrame->aucBSSID); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - } - else { - // should never happen - ASSERT(0); - } - - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of aisUpdateBssInfoForJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create an Ad-Hoc network and start sending Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prAisBssInfo->fgIsBeaconActivated) { - return; - } - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prAisBssInfo->ucPrimaryChannel = prConnSettings->ucAdHocChannelNum; - prAisBssInfo->eBand = prConnSettings->eAdHocBand; - - if (prAisBssInfo->eBand == BAND_2G4) { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - //4 <1.5> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prConnSettings->u2BeaconPeriod; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = prConnSettings->u2AtimWindow; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - -#if CFG_PRIVACY_MIGRATION - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION1_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION2_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prAisBssInfo->fgIsProtection = TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } -#else - prAisBssInfo->fgIsProtection = FALSE; -#endif - - //3 <2> Update BSS_INFO_T common part - ibssInitForAdHoc(prAdapter, prAisBssInfo); - - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <3.2> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.3> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.4> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <4> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - //3 <5> Start IBSS Alone Timer - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); - - return; - -} /* end of aisCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the existing IBSS was found. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - //UINT_16 u2IELength; - //PUINT_8 pucIE; - - - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - - if (!prAisBssInfo->fgIsBeaconActivated) { - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - } - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use Peer's Cap Info as IBSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - prAisBssInfo->fgUseShortPreamble = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - prAisBssInfo->fgUseShortPreamble = FALSE; - } - - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prAisBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - prAisBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - - if (prAisBssInfo->u2CapInfo & CAP_INFO_PRIVACY) { - prAisBssInfo->fgIsProtection= TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } - - //4 <2.2> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - rateGetDataRatesFromRateSet(prAisBssInfo->u2OperationalRateSet, - prAisBssInfo->u2BSSBasicRateSet, - prAisBssInfo->aucAllSupportedRates, - &prAisBssInfo->ucAllSupportedRatesLen); - - //3 <3> X Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prBssDesc->aucBSSID); - - //4 <4.2> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prAisBssInfo->eBand = prBssDesc->eBand; - - //4 <4.3> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; /* TBD(Kevin) */ - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - } - else { - // should never happen - ASSERT(0); - } - - - //3 <5> Set MAC HW - //4 <5.1> Find Lowest Basic Rate Index for default TX Rate of MMPDU - { - UINT_8 ucLowestBasicRateIndex; - - if (!rateGetLowestRateIndexFromRateSet(prAisBssInfo->u2BSSBasicRateSet, - &ucLowestBasicRateIndex)) { - - if (prAisBssInfo->ucPhyTypeSet & PHY_TYPE_BIT_OFDM) { - ucLowestBasicRateIndex = RATE_6M_INDEX; - } - else { - ucLowestBasicRateIndex = RATE_1M_INDEX; - } - } - - prAisBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[prAisBssInfo->fgUseShortPreamble][ucLowestBasicRateIndex]; - } - - //4 <5.2> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <5.3> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.4> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.5> Update AdHoc PM parameter - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <6> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - return; -} /* end of aisUpdateBssInfoForMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, /* CURRENT SSID */ - prIeSsid->aucSSID, prIeSsid->ucLength)) ) { - fgReplyProbeResp = TRUE; - } - } - - return fgReplyProbeResp; - -} /* end of aisValidateProbeReq() */ - -#endif /* CFG_SUPPORT_ADHOC */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection handling -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ) -{ - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - -#if CFG_SUPPORT_ADHOC - if (prAisBssInfo->fgIsBeaconActivated) { - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_DELETE_ALL, - NETWORK_TYPE_AIS_INDEX, - 0, - NULL, - 0); - - prAisBssInfo->fgIsBeaconActivated = FALSE; - } -#endif - - rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - - if (prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_RADIO_LOST) { - scanRemoveBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - - /* remove from scanning results as well */ - wlanClearBssInScanningResult(prAdapter, prAisBssInfo->aucBSSID); - - /* trials for re-association */ - if (fgDelayIndication) { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - } - } - else { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - if (fgDelayIndication) { - if (OP_MODE_IBSS != prAisBssInfo->eCurrentOPMode) { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (!fgDelayIndication) { - //4 <5> Deactivate previous AP's STA_RECORD_T or all Clients in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventAbort(prAdapter); - - /* clear pending roaming connection request */ - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <6> Indicate Disconnected Event to Host - aisIndicationOfMediaStateToHost(prAdapter, - PARAM_MEDIA_STATE_DISCONNECTED, - fgDelayIndication); - - - //4 <7> Trigger AIS FSM - aisFsmSteps(prAdapter, AIS_STATE_IDLE); - - return; -} /* end of aisFsmDisconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Background Scan Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventBGSleepTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - DBGLOG(AIS, LOUD, ("EVENT - SCAN TIMER: Idle End - Current Time = %ld\n", kalGetTimeTick())); - - eNextState = AIS_STATE_LOOKING_FOR; - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - break; - - default: - break; - } - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmBGSleepTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "IBSS ALONE Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventIbssAloneTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - - /* There is no one participate in our AdHoc during this TIMEOUT Interval - * so go back to search for a valid IBSS again. - */ - - DBGLOG(AIS, LOUD, ("EVENT-IBSS ALONE TIMER: Start pairing\n")); - - prAisFsmInfo->fgTryScan = TRUE; - - /* abort timer */ - aisFsmReleaseCh(prAdapter); - - /* Pull back to SEARCH to find candidate again */ - eNextState = AIS_STATE_SEARCH; - - break; - - default: - break; - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisIbssAloneTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Join Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventJoinTimeout()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_JOIN: - DBGLOG(AIS, LOUD, ("EVENT- JOIN TIMEOUT\n")); - - /* 1. Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* 2. Increase Join Failure Count */ - prAisFsmInfo->prTargetStaRec->ucJoinFailureCount++; - - if(prAisFsmInfo->prTargetStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) { - /* 3.1 Retreat to AIS_STATE_SEARCH state for next try */ - eNextState = AIS_STATE_SEARCH; - } - else { - /* 3.2 Retreat to AIS_STATE_WAIT_FOR_NEXT_SCAN state for next try */ - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - } - break; - - case AIS_STATE_NORMAL_TR: - /* 1. release channel */ - aisFsmReleaseCh(prAdapter); - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - /* 2. process if there is pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - } - - break; - - default: - /* release channel */ - aisFsmReleaseCh(prAdapter); - break; - - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventJoinTimeout() */ - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisTest ( - VOID - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucSSID[]="pci-11n"; - UINT_8 ucSSIDLen=7; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Set Connection Request Issued Flag */ - prConnSettings->fgIsConnReqIssued = TRUE; - prConnSettings->ucSSIDLen = ucSSIDLen; - kalMemCopy(prConnSettings->aucSSID, aucSSID, ucSSIDLen); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_HEM_AIS_FSM_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - wifi_send_msg(INDX_WIFI, MSG_ID_WIFI_IST, 0); - - return; -} -#endif /* CFG_TEST_MGMT_FSM */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle OID_802_11_BSSID_LIST_SCAN -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prSsid Pointer of SSID_T if specified -* \param[in] pucIe Pointer to buffer of extra information elements to be attached -* \param[in] u4IeLength Length of information elements -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisFsmScanRequest()"); - - ASSERT(prAdapter); - ASSERT(u4IeLength <= MAX_IE_LENGTH); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (!prConnSettings->fgIsScanReqIssued) { - prConnSettings->fgIsScanReqIssued = TRUE; - - if(prSsid == NULL) { - prAisFsmInfo->ucScanSSIDLen = 0; - } - else { - COPY_SSID(prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen, - prSsid->aucSsid, - (UINT_8)prSsid->u4SsidLen); - } - - if(u4IeLength > 0 && u4IeLength <= MAX_IE_LENGTH ) { - prAisFsmInfo->u4ScanIELength = u4IeLength; - if(NULL != pucIe) - kalMemCopy(prAisFsmInfo->aucScanIEBuf, pucIe, u4IeLength); - DBGLOG(AIS, WARN, ("u4IeLength in aisFsmScanRequest is: %d\n",u4IeLength)); - } - else { - prAisFsmInfo->u4ScanIELength = 0; - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR) { - if(prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE - && prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - // 802.1x might not finished yet, pend it for later handling .. - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - else { - if(prAisFsmInfo->fgIsChannelGranted == TRUE) { - DBGLOG(AIS, WARN, ("Scan Request with channel granted for join operation: %d, %d", - prAisFsmInfo->fgIsChannelGranted, - prAisFsmInfo->fgIsChannelRequested)); - } - - /* start online scan */ - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN); - } - } - else if(prAisFsmInfo->eCurrentState == AIS_STATE_IDLE) { - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_SCAN); - } - else { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - } - else { - DBGLOG(AIS, WARN, ("Scan Request dropped. (state: %d)\n", prAisFsmInfo->eCurrentState)); - } - - return; -} /* end of aisFsmScanRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_REQ_CHANNEL_JOIN && - prAisFsmInfo->ucSeqNumOfChReq == ucTokenID) { - /* 2. channel privilege has been approved */ - prAisFsmInfo->u4ChGrantedInterval = u4GrantInterval; - - /* 3. state transition to join/ibss-alone/ibss-merge */ - /* 3.1 set timeout timer in cases join could not be completed */ - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - prAisFsmInfo->u4ChGrantedInterval - AIS_JOIN_CH_GRANT_THRESHOLD); - /* 3.2 set local variable to indicate join timer is ticking */ - prAisFsmInfo->fgIsInfraChannelFinished = FALSE; - - /* 3.3 switch to join state */ - aisFsmSteps(prAdapter, AIS_STATE_JOIN); - - prAisFsmInfo->fgIsChannelGranted = TRUE; - } - else { /* mismatched grant */ - /* 2. return channel privilege to CNM immediately */ - aisFsmReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->fgIsChannelGranted == TRUE - || prAisFsmInfo->fgIsChannelRequested == TRUE) { - - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChAbort->ucTokenID = prAisFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that corresponding beacon has not -* been received for a while and probing is not successful -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prAisBssInfo; - BOOLEAN fgDoAbortIndication = FALSE; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Diagnose Connection for Beacon Timeout Event - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - if (OP_MODE_INFRASTRUCTURE == prAisBssInfo->eCurrentOPMode) { - P_STA_RECORD_T prStaRec = prAisBssInfo->prStaRecOfAP; - - if (prStaRec) { - fgDoAbortIndication = TRUE; - } - } - else if (OP_MODE_IBSS == prAisBssInfo->eCurrentOPMode) { - fgDoAbortIndication = TRUE; - } - } - - //4 <2> invoke abort handler - if (fgDoAbortIndication) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_RADIO_LOST, TRUE); - } - - return; -} /* end of aisBssBeaconTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that DEAUTH frame has been -* sent and thus state machine could go ahead -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prMsduInfo Pointer of MSDU_INFO_T for DEAUTH frame -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_DISCONNECTING) { - if(rTxDoneStatus != TX_RESULT_DROPPED_IN_DRIVER) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_NEW_CONNECTION, FALSE); - } - } - else { - DBGLOG(AIS, WARN, ("DEAUTH frame transmitted without further handling")); - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aisDeauthXmitComplete() */ - -#if CFG_SUPPORT_ROAMING -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Looking for a candidate due to weak signal" to AIS FSM. -* -* @param[in] u4ReqScan Requesting Scan or not -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_AIS_REQUEST_TYPE_T eAisRequest; - - DBGLOG(AIS, LOUD, ("aisFsmRunEventRoamingDiscovery()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* search candidates by best rssi */ - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - - /* results are still new */ - if (!u4ReqScan) { - roamingFsmRunEventRoam(prAdapter); - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - if(prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - eAisRequest = AIS_REQUEST_ROAMING_SEARCH; - } - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR && prAisFsmInfo->fgIsInfraChannelFinished == TRUE) { - if(eAisRequest == AIS_REQUEST_ROAMING_SEARCH) { - aisFsmSteps(prAdapter, AIS_STATE_LOOKING_FOR); - } - else { - aisFsmSteps(prAdapter, AIS_STATE_SEARCH); - } - } - else { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); - - aisFsmInsertRequest(prAdapter, eAisRequest); - } - - return; -} /* end of aisFsmRunEventRoamingDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the time of ScanDone for roaming and transit to Roam state. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DBGLOG(AIS, LOUD, ("->aisFsmRoamingScanResultsUpdate()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - roamingFsmScanResultsUpdate(prAdapter); - - eNextState = prAisFsmInfo->eCurrentState; - if (prRoamingFsmInfo->eCurrentState == ROAMING_STATE_DISCOVERY) { - roamingFsmRunEventRoam(prAdapter); - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - eNextState = AIS_STATE_NORMAL_TR; - } - - return eNextState; -} /* end of aisFsmRoamingScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection of last AP before switching to roaming bss. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prTargetStaRec Target of StaRec of roaming -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisFsmRoamingDisconnectPrevAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Not invoke rlmBssAborted() here to avoid prAisBssInfo->fg40mBwAllowed - * to be reset. RLM related parameters will be reset again when handling - * association response in rlmProcessAssocRsp(). 20110413 - */ - //rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - prTargetStaRec->ucNetTypeIndex = 0xff; /* Virtial NetType */ - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - prTargetStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Virtial NetType */ - - return; -} /* end of aisFsmRoamingDisconnectPrevAP() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the roaming was completed. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prStaRec StaRec of roaming AP -* prAssocRspSwRfb -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisUpdateBssInfoForRoamingAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - return; -} /* end of aisFsmRoamingUpdateBss() */ - -#endif /* CFG_SUPPORT_ROAMING */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Check if there is any pending request and remove it (optional) -* -* @param prAdapter -* eReqType -* bRemove -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr, prPendingReqHdrNext; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* traverse through pending request list */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingReqHdr, - prPendingReqHdrNext, - &(prAisFsmInfo->rPendingReqList), - rLinkEntry, - AIS_REQ_HDR_T) { - /* check for specified type */ - if(prPendingReqHdr->eReqType == eReqType) { - /* check if need to remove */ - if(bRemove == TRUE) { - LINK_REMOVE_KNOWN_ENTRY(&(prAisFsmInfo->rPendingReqList), &(prPendingReqHdr->rLinkEntry)); - - cnmMemFree(prAdapter, prPendingReqHdr); - } - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get next pending request -* -* @param prAdapter -* -* @return P_AIS_REQ_HDR_T -*/ -/*----------------------------------------------------------------------------*/ -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - LINK_REMOVE_HEAD(&(prAisFsmInfo->rPendingReqList), prPendingReqHdr, P_AIS_REQ_HDR_T); - - return prPendingReqHdr; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Insert a new request -* -* @param prAdapter -* eReqType -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ) -{ - P_AIS_REQ_HDR_T prAisReq; - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - prAisReq = (P_AIS_REQ_HDR_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(AIS_REQ_HDR_T)); - - if(!prAisReq) { - ASSERT(0); // Can't generate new message - return FALSE; - } - - prAisReq->eReqType = eReqType; - - /* attach request into pending request list */ - LINK_INSERT_TAIL(&prAisFsmInfo->rPendingReqList, &prAisReq->rLinkEntry); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Flush all pending requests -* -* @param prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_REQ_HDR_T prAisReq; - - ASSERT(prAdapter); - - while((prAisReq = aisFsmGetNextRequest(prAdapter)) != NULL) { - cnmMemFree(prAdapter, prAisReq); - } - - return; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/assoc.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/assoc.c deleted file mode 100755 index c4d26fb100c2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/assoc.c +++ /dev/null @@ -1,2044 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/assoc.c#3 $ -*/ - -/*! \file "assoc.c" - \brief This file includes the association-related functions. - - This file includes the association-related functions. -*/ - - - -/*\ -** $Log: assoc.c $ -** -** 07 27 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Fix wifi direct connection issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 08 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * add a pair of brace for compilation success. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 03 09 2012 terry.wu - * NULL - * Fix build error. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 yuche.tsai - * NULL - * Update Driver for wifi driect gc join IE update issue. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Fix PhyTypeSet in STA_REC in AP mode - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 19 2011 yuche.tsai - * NULL - * Fix KE when enable hot-spot & any one client connect to this hot-spot. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Update workaround for Kingnet AP. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Workaround for Kingnet 710 AP wrong AID assignment. - * - * 05 02 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning[WCXRP00000672] [MT6620 Wi-Fi][FW] Fix the PS event allocation - * Check STA when rx assoc. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 14 2011 wh.su - * [WCXRP00000545] [MT6620 Wi-Fi] [Driver] Fixed the p2p not enable, received a assoc rsp cause the rx assoc execute a null function - * Modify file for avoid assert at BOW recieve a assoc response frame but no p2p fucntion. - * - * 03 08 2011 terry.wu - * [WCXRP00000524] [MT6620 Wi-Fi][Driver] Fix p2p assoc request containing wrong IE format - * Fix p2p assoc request containing wrong IE format. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix RX disassoc issue under Hot-spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Desired Non-HT Rate Set. - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Recover the code that was coverwritted.. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 yuche.tsai - * NULL - * Add SSID IE in assoc req frame which is sent by P2P GC. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RSN IE generation by CFG_RSN_MIGRATION compilation flag. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * revised. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update assocProcessRxAssocReqFrame() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - macro > 10 line, initial value of an array - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 28 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning.u1rwduu`wvpghlqg|rm+vp - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update Assoc ID for PS - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Use new constant definition ELEM_MAX_LEN_EXT_CAP - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify assoc req IE talbe for HT cap IE - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * update the assocComposeReAssocReqFrameHeader() and fix the u2EstimatedFrameLen in assocSendReAssocReqFrame() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove some space line - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sending disassoc frame function - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the txassocReq IE table, adding for WPA/RSN - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eNetType not init in send AssocReq function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate the send Assoc with TXM - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to indicate the assoc request and assoc response (now disable) - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove unused variables - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_VAR_IE_ENTRY_T txAssocReqIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmReqGenerateHtCapIE },/* 45 */ -#if CFG_SUPPORT_WPS2 - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WSC), NULL, rsnGenerateWSCIE }, /* 221 */ -#endif -#if CFG_SUPPORT_WAPI - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WAPI), NULL, wapiGenerateWAPIIE }, /* 68 */ -#endif -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE }, /* 221 */ -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmReqGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO), NULL, mqmGenerateWmmInfoIE }, /* 221 */ -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE }, /* 48 */ -#endif -}; - -#if CFG_SUPPORT_AAA -VERIFY_IE_ENTRY_T rxAssocReqIETable[] = { - { ELEM_ID_RESERVED, NULL } /* 255 */ -}; - - -APPEND_VAR_IE_ENTRY_T txAssocRespIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE }, /* 42 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE }, /* 45 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE }, /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - { (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE }, /* 74 */ - { (0), p2pFuncCalculateP2p_IELenForAssocRsp, p2pFuncGenerateP2p_IEForAssocRsp }, /* 221 */ -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose the Capability Info Field. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval Capability Info Field -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ UINT_16 -assocBuildCapabilityInfo ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - UINT_32 u4NonHTPhyType; - UINT_16 u2CapInfo; - - - ASSERT(prStaRec); - - - /* Set up our requested capabilities. */ - u2CapInfo = CAP_INFO_ESS; - u2CapInfo |= CAP_CF_STA_NOT_POLLABLE; - - if (prStaRec->u2CapInfo & CAP_INFO_PRIVACY) { - u2CapInfo |= CAP_INFO_PRIVACY; - } - - - /* 7.3.1.4 */ - if (prStaRec->fgHasBasicPhyType) { - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - if ( (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortPreambleOptionImplemented) && - ( (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO) && - (prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) ) ) { - - /* Case I: Implemented == TRUE and Short Preamble Option Enable == TRUE. - * Case II: Implemented == TRUE and Short Preamble == AUTO (depends on - * BSS_DESC_T's capability) - */ - u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortSlotTimeOptionImplemented && - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable) { - u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - } - - DBGLOG(SAA, LOUD, ("ASSOC REQ: Compose Capability = 0x%04x for Target BSS ["MACSTR"].\n", - u2CapInfo, MAC2STR(prStaRec->aucMacAddr))); - - - return u2CapInfo; - -} /* end of assocBuildCapabilityInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - PUINT_8 pucBuffer; - UINT_16 u2SupportedRateSet; - UINT_8 aucAllSupportedRates[RATE_NUM] = {0}; - UINT_8 ucAllSupportedRatesLen; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (IS_STA_IN_AIS(prStaRec)) { - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - pucBuffer = p2pBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo, pucBuffer); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } -#endif - - else { - /* TODO(Kevin): For other network */ - } - - /* NOTE(Kevin 2008/12/19): 16.3.6.3 MLME-ASSOCIATE.indication - - * SupportedRates - The set of data rates that are supported by the STA - * that is requesting association. - * Original(Portable Driver): Only send the Rates that we'll support. - * New: Send the Phy Rates if the result of following & operation == NULL. - */ - //rateGetDataRatesFromRateSet((prBssDesc->u2OperationalRateSet & - // rPhyAttributes[prBssDesc->ePhyType].u2SupportedRateSet), - - if (prStaRec->fgHasBasicPhyType) { - UINT_32 u4NonHTPhyType; - - - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - u2SupportedRateSet = (prStaRec->u2OperationalRateSet & - rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet); - - ASSERT(u2SupportedRateSet); - - if (!u2SupportedRateSet) { - u2SupportedRateSet = rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet; - } - - /* TODO(Kevin): For P2P, we shouldn't send support rate set which contains 11b rate */ - - rateGetDataRatesFromRateSet(u2SupportedRateSet, - 0, - aucAllSupportedRates, - &ucAllSupportedRatesLen); - - ucSupRatesLen = ((ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) ? - ELEM_MAX_LEN_SUP_RATES : ucAllSupportedRatesLen); - - ucExtSupRatesLen = ucAllSupportedRatesLen - ucSupRatesLen; - - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - } - - return; -} /* end of assocBuildReAssocReqFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Request frame header and -* its fixed fields -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocReqFrameHeaderAndFF ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - UINT_16 u2CapInfo; - UINT_16 u2ListenInterval; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - ASSERT(pu2PayloadLen); - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_REQ; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_REQ; - } - WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - u2CapInfo = assocBuildCapabilityInfo(prAdapter, prStaRec); - - /* Fill the Capability Information field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - - - /* Calculate the listen interval for the maximum power mode. Currently, we - set it to the value 2 times DTIM period. */ - if (prStaRec->ucDTIMPeriod) { - u2ListenInterval = prStaRec->ucDTIMPeriod * DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD; - } - else { - DBGLOG(SAA, TRACE, ("Use default listen interval\n")); - u2ListenInterval = DEFAULT_LISTEN_INTERVAL; - } - prStaRec->u2ListenInterval = u2ListenInterval; - - /* Fill the Listen Interval field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2ListenInterval, u2ListenInterval); - - - //4 <3> Compose the Current AP Address field for ReAssociation Request frame. - /* Fill the Current AP Address field. */ - if (prStaRec->fgIsReAssoc) { - if (IS_STA_IN_AIS(prStaRec)) { - - P_AIS_BSS_INFO_T prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - P_WLAN_REASSOC_REQ_FRAME_T prReAssocFrame = - (P_WLAN_REASSOC_REQ_FRAME_T)prAssocFrame; - - COPY_MAC_ADDR(prReAssocFrame->aucCurrentAPAddr, prAisBssInfo->aucBSSID); - } - else { - ASSERT(0); /* We don't support ReAssociation for other network */ - } - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN + - CURR_AP_ADDR_FIELD_LEN); - } - else { - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN); - } - - return; -} /* end of assocComposeReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Request frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - if (fgIsReAssoc) { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - CURR_AP_ADDR_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - else { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - u2EstimatedExtraIELen = p2pCalculate_IEForAssocReq(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } - } -#else - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } -#endif - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - - /* Compose Header and Fixed Field */ - assocComposeReAssocReqFrameHeaderAndFF(prAdapter, - prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucOwnMacAddr, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - p2pGenerate_IEForAssocReq(prAdapter, prMsduInfo); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - } -#else - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } -#endif - - //4 <6> Update the (Re)association request information - if (IS_STA_IN_AIS(prStaRec)) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - -#if CFG_RSN_MIGRATION - kalUpdateReAssocReqInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); -#endif - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - - kalP2PUpdateAssocInfo( - prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); - } -#endif - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Request frame for -* SAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocReqFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Response frame for -* AAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocRspFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocRespFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming (Re)Association Frame and take out -* the status code. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - UINT_16 u2RxFrameCtrl; - UINT_16 u2RxCapInfo; - UINT_16 u2RxStatusCode; - UINT_16 u2RxAssocId; - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - DBGLOG(SAA, LOUD, ("prSwRfb->u2PayloadLength = %d\n", prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the (Re)Assocation Resp Frame. - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of (Re)Assocation Resp Frame. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2RxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2RxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Parse the Fixed Fields of (Re)Assocation Resp Frame Body. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2CapInfo, &u2RxCapInfo); - u2RxCapInfo = prAssocRspFrame->u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2StatusCode, &u2RxStatusCode); - u2RxStatusCode = prAssocRspFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //4 <4> Check CAP_INFO - /* NOTE(Kevin): CM suggest to add MGMT workaround for those APs didn't check - * the CAP Privacy Bit to overcome a corner case that the Privacy Bit - * of our SCAN result didn't consist with AP's Association Resp. - */ - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - /* WAPI AP allow the customer use WZC to join mode, the privacy bit is 0 */ - /* even at WAI & WAPI_PSK mode, but the assoc respose set the privacy bit set 1 */ - DBGLOG(SEC, TRACE, ("Workaround the WAPI AP allow the customer to use WZC to join\n")); - } - else -#endif -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && 1) { - /* Todo:: Fixed this */ - } - else -#endif - { - } - -#if CFG_STRICT_CHECK_CAPINFO_PRIVACY - if ((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) ^ (u2RxCapInfo & CAP_INFO_PRIVACY)) { - u2RxStatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - } -#endif - } - - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_RSN_MIGRATION - /* Update the information in the structure used to query and set - OID_802_11_ASSOCIATION_INFORMATION. */ - kalUpdateReAssocRspInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocRspFrame->u2CapInfo, - (UINT_32)(prSwRfb->u2PacketLen)); -#endif - } - - //4 <5> Update CAP_INFO and ASSOC_ID - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { - prStaRec->u2CapInfo = u2RxCapInfo; - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2AssocId, &u2RxAssocId); - u2RxAssocId = prAssocRspFrame->u2AssocId; // NOTE(Kevin): Optimized for ARM - - /* 20110715 Workaround for Kingnet 710 AP (Realtek 8186) - * This AP raises the bit 6&7 not bit 14&15 in AID field. - * It cause wrong AID assignment. - * For AID = 2 - * Normal case: 0xC002(1100 0000 0000 0010) => 2 - * Kingnet 710: 0x00C2(0000 0000 1100 0010) => 194 - * workaround: mask bit 6&7 for this AP - */ - if((u2RxAssocId & BIT(6)) && - (u2RxAssocId & BIT(7)) && - !(u2RxAssocId & BITS(8, 15))) { - prStaRec->u2AssocId = u2RxAssocId & ~BITS(6,7); - } else { - prStaRec->u2AssocId = u2RxAssocId & ~AID_MSB; -#if CFG_SUPPORT_802_11W - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prBssSpecInfo->ucSaQueryTimedOut = 0; - } -#endif - } - } - -#if CFG_SUPPORT_802_11W - if (u2RxStatusCode == STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED){ - DBGLOG(SAA, INFO, ("AP rejected due the authentication algorithm not support\n")); - } - else if (u2RxStatusCode == STATUS_CODE_ASSOC_REJECTED_TEMPORARILY) { - PUINT_8 pucIE, pucTime; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_TIMEOUT_INTERVAL == IE_ID(pucIE) && IE_LEN(pucIE) == 5) { - pucTime = ((P_IE_HDR_T)pucIE)->aucInfo; - if (pucTime[0] == ACTION_SA_TIMEOUT_ASSOC_COMEBACK) { - UINT_32 tu; - WLAN_GET_FIELD_32(pucTime + 1, &tu); - DBGLOG(SAA, INFO, ("AP rejected association temporarily; comeback duration %u TU " - "(%u ms)\n", tu, TU_TO_MSEC(tu))); - if (tu > TX_ASSOCIATION_RETRY_TIMEOUT_TU) { - DBGLOG(SAA, INFO, ("Update timer based on comeback duration\n")); - //ieee80211_reschedule_timer(wpa_s, ms); - } - } - break; - } - } /* end of IE_FOR_EACH */ - } -#endif - *pu2StatusCode = u2RxStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckRxReAssocRspFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will compose the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2ReasonCode The reason code of disassociation -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeDisassocFrame ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisAssocFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - - prDisAssocFrame = (P_WLAN_DISASSOC_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the DisAssociation frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DISASSOC; - - WLAN_SET_FIELD_16(&prDisAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDisAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDisAssocFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Disassociation frame. - /* Fill the Reason Code field. */ - WLAN_SET_FIELD_16(&prDisAssocFrame->u2ReasonCode, u2ReasonCode); - - return; -} /* end of assocComposeDisassocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2ReasonCode The reason code of disassociation -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ) -{ - PUINT_8 pucMacAddress; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - //UINT_32 u4Status = WLAN_STATUS_SUCCESS; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Disassociation Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - REASON_CODE_FIELD_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending DisAssoc.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Disassociation frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - pucMacAddress = prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].aucOwnMacAddr; - - /* Compose Header and Fixed Field */ - assocComposeDisassocFrame(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucMacAddress, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - - prDisassocFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDisassocFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("assocSendDisAssocFrame with protection\n")); - } -#endif - - u2PayloadLen = REASON_CODE_FIELD_LEN; - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendDisAssocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Disassociation frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Disassociation Frame. - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Disassociation Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDisassocFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Disassoc Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDisassocFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDisassocFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxDisassocFrame() */ - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Association Req frame -* and return a Status Code. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code for carried in Association Response. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_RSN_INFO_ELEM_T prIeRsn = (P_RSN_INFO_ELEM_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE, pucIEStart; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_16 u2StatusCode = STATUS_CODE_SUCCESSFUL; - UINT_16 u2RxFrameCtrl; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - UINT_32 i; - - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - return WLAN_STATUS_FAILURE; - } - - //4 <1> locate the Association Req Frame. - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Association Req Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < - (CAP_INFO_FIELD_LEN + LISTEN_INTERVAL_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prAssocReqFrame->aucBSSID, prBssInfo->aucBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (MAC_FRAME_REASSOC_REQ == u2RxFrameCtrl) { - prStaRec->fgIsReAssoc = TRUE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - prStaRec->fgIsReAssoc = FALSE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = prAssocReqFrame->aucInfoElem; - } - - - //4 <3> Parse the Fixed Fields of Assoc Req Frame Body. - prStaRec->u2CapInfo = prAssocReqFrame->u2CapInfo; - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) && - !kalP2PGetCipher(prAdapter->prGlueInfo))) { - u2StatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - DBGLOG(RSN, TRACE, ("STA Assoc req privacy bit check fail\n")); - return WLAN_STATUS_SUCCESS; - } - } -#endif - - prStaRec->u2ListenInterval = prAssocReqFrame->u2ListenInterval; - prStaRec->ucPhyTypeSet = 0; - - /* Might be legacy client or p2p gc. */ - prStaRec->eStaType = STA_TYPE_LEGACY_CLIENT; - - //4 <4> Parse the IE of Assoc Req Frame Body. - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): Get SSID once */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - case ELEM_ID_HT_CAP: - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - break; - case ELEM_ID_RSN: - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - prIeRsn = RSN_IE(pucIE); - rsnParserCheckForRSNCCMPPSK(prAdapter, prIeRsn, &u2StatusCode); - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - #endif - break; - case ELEM_ID_VENDOR: - #if CFG_ENABLE_WIFI_DIRECT - { - if ((prAdapter->fgIsP2PRegistered)) { - UINT_8 ucOuiType = 0; - - p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType); - - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - DBGLOG(P2P, TRACE, ("Target Client is a P2P group client\n")); - prStaRec->eStaType = STA_TYPE_P2P_GC; - } - } - } - #endif - break; - default: - for (i = 0; i < (sizeof(rxAssocReqIETable) / sizeof(VERIFY_IE_ENTRY_T)); i++) { - - if ((IE_ID(pucIE)) == rxAssocReqIETable[i].ucElemID) { - rxAssocReqIETable[i].pfnVarifyIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIE, &u2StatusCode); - - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - } - - break; - } - } /* end of IE_FOR_EACH */ - - // parsing for WMM related information (2010/12/21) - mqmProcessAssocReq( - prAdapter, - prSwRfb, - pucIEStart, - u2IELength); - - do { - if (prIeSsid) { - if (UNEQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - } - else { - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - - prStaRec->u2OperationalRateSet = 0; - prStaRec->u2BSSBasicRateSet = 0; - - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prStaRec->u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if ((prBssInfo->u2BSSBasicRateSet & prStaRec->u2OperationalRateSet) != - prBssInfo->u2BSSBasicRateSet) { - - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - - /* Accpet the Sta, update BSSBasicRateSet from Bss */ - - prStaRec->u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = (prStaRec->u2OperationalRateSet & RATE_SET_ALL_ABG); - - if (BAND_2G4 == HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr)) { - #if 0 /* Marked by CMC 20111024 */ - /* check if support 11n */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - - if (!(u2BSSBasicRateSet & RATE_SET_OFDM)) { - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - - } - - } - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - #endif - } - else { /* (BAND_5G == prBssDesc->eBande) */ - #if 0 /* Marked by CMC 20111024 */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - ASSERT((prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) == 0); - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - #endif - } - - } - else { - ASSERT(0); - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (prIeRsn) { - if (!kalP2PGetCipher(prAdapter->prGlueInfo)) { - u2StatusCode = STATUS_CODE_CIPHER_SUITE_REJECTED; - break; - } - } - else { - prStaRec->rSecInfo.fgAllowOnly1x = FALSE; - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - //Only Allow 1x - prStaRec->rSecInfo.fgAllowOnly1x = TRUE; - break; - } - } - } -#endif - - } while (FALSE); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - #if 1 /* ICS */ - { - PUINT_8 cp = (PUINT_8)&prAssocReqFrame->u2CapInfo; - if (prStaRec->fgIsReAssoc) - cp += 10; - else - cp += 4; - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - } - prStaRec->u2AssocReqIeLen = u2IELength; - if (u2IELength) { - prStaRec->pucAssocReqIe = kalMemAlloc(u2IELength, VIR_MEM_TYPE); - kalMemCopy(prStaRec->pucAssocReqIe, cp, u2IELength); - } - } - #endif - kalP2PUpdateAssocInfo(prAdapter->prGlueInfo, (PUINT_8)&prAssocReqFrame->u2CapInfo, u2IELength + (prStaRec->fgIsReAssoc ? 10 : 4), prStaRec->fgIsReAssoc); - } -#endif - - *pu2StatusCode = u2StatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocRespFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo - ) -{ - PUINT_8 pucBuffer; - P_STA_RECORD_T prStaRec; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - ucExtSupRatesLen = 0; - } - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of assocBuildReAssocRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Response frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucBssid Given BSSID. -* @param[in] u2CapInfo Capability Field of current BSS. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocRespFrameHeaderAndFF ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucBSSID[], - IN UINT_16 u2CapInfo, - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucBSSID); - ASSERT(pu2PayloadLen); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_RSP; - } - //WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - prAssocRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target MAC Address. */ - COPY_MAC_ADDR(prAssocRspFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucSrcAddr, aucBSSID); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucBSSID, aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - prAssocRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2StatusCode, prStaRec->u2StatusCode); - prAssocRspFrame->u2StatusCode = prStaRec->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2AssocId, ((prStaRec->u2AssocId & AID_MASK) | AID_MSB)); - prAssocRspFrame->u2AssocId = - ((prStaRec->u2AssocId & AID_MASK) | AID_MSB); // NOTE(Kevin): Optimized for ARM - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - return; -} /* end of assocComposeReAssocRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Resp frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - STATUS_CODE_FIELD_LEN + \ - AID_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocRespIETable[i].u2EstimatedFixedIELen; - } - else if (txAssocRespIETable[i].pfnCalculateVariableIELen != NULL) { - u2EstimatedExtraIELen += (UINT_16)txAssocRespIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(AAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Response.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex != NETWORK_TYPE_AIS_INDEX); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and Fixed Field */ - assocComposeReAssocRespFrameHeaderAndFF(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucBSSID, - prBssInfo->u2CapInfo, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = aaaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocRespFrameCommonIEs(prAdapter, prMsduInfo, prBssInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].pfnAppendIE) { - txAssocRespIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of assocSendReAssocRespFrame() */ -#endif /* CFG_SUPPORT_AAA */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/auth.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/auth.c deleted file mode 100755 index 9938ebc09823..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/auth.c +++ /dev/null @@ -1,1350 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/auth.c#1 $ -*/ - -/*! \file "auth.c" - \brief This file includes the authentication-related functions. - - This file includes the authentication-related functions. -*/ - - - -/* -** $Log: auth.c $ - * - * 02 13 2012 cp.wu - * NULL - * show error message only instead of raise assertion when - * received authentication frame is carrying illegal parameters. - * - * 11 09 2011 yuche.tsai - * NULL - * Fix a network index & station record index issue when TX deauth frame. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 yuche.tsai - * NULL - * Fix coding error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000796] [Volunteer Patch][MT6620][Driver] Add BC deauth frame TX feature. - * BC deauth support. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 21 2011 terry.wu - * [WCXRP00000381] [MT6620 Wi-Fi][Driver] Kernel panic when replying unaccept Auth in AP mode - * In AP mode, use STA_REC_INDEX_NOT_FOUND(0xFE) instead of StaRec index when replying an unaccept Auth frame. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update authSendDeauthFrame() for correct the value of eNetTypeIndex in MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Check Net is active before sending Deauth frame. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix compile warning - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add debug message for abnormal authentication frame from AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Fix the Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the authComposeAuthFrameHeader() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the send deauth frame function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate send Auth with TXM - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_IE_ENTRY_T txAuthIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_CHALLENGE_TEXT), authAddIEChallengeText } -}; - -HANDLE_IE_ENTRY_T rxAuthIETable[] = { - { ELEM_ID_CHALLENGE_TEXT, authHandleIEChallengeText } -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Authentication frame header and fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2AuthAlgNum Authentication Algorithm Number -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[in] u2StatusCode Status Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeAuthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_16 u2AuthAlgNum, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Authentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_AUTH; - - /* If this frame is the third frame in the shared key authentication - * sequence, it shall be encrypted. - */ - if ((u2AuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3)) { - - u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; /* HW will also detect this bit for applying encryption */ - } - - //WLAN_SET_FIELD_16(&prAuthFrame->u2FrameCtrl, u2FrameCtrl); - prAuthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAuthFrame->aucSrcAddr, aucMACAddress); - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucPeerMACAddress); - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - - /* Fill the BSSID field with Current BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucMACAddress); - break; - - default: - ASSERT(0); - } - - /* Clear the SEQ/FRAG_NO field. */ - prAuthFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Authentication Algorithm Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthAlgNum, u2AuthAlgNum); - prAuthFrame->u2AuthAlgNum = u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Authentication Transaction Sequence Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, u2TransactionSeqNum); - prAuthFrame->u2AuthTransSeqNo = u2TransactionSeqNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2StatusCode, u2StatusCode); - prAuthFrame->u2StatusCode = u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeAuthFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will append Challenge Text IE to the Authentication frame -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return; - } - - ASSERT(prStaRec); - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prMsduInfo->prPacket; - - WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - - /* Only consider SEQ_3 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (prStaRec->prChallengeText != NULL)) { - - COPY_IE(((UINT_32)(prMsduInfo->prPacket) + prMsduInfo->u2FrameLength), - (prStaRec->prChallengeText)); - - prMsduInfo->u2FrameLength += IE_SIZE(prStaRec->prChallengeText); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -#if !CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame\n")); - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec->aucMacAddr, - prBssInfo->aucOwnMacAddr, - prStaRec->ucAuthAlgNum, - u2TransactionSeqNum, - STATUS_CODE_RESERVED); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#else - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - /*get from input parameter*/ - //ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - PFN_TX_DONE_HANDLER pfTxDoneHandler = (PFN_TX_DONE_HANDLER)NULL; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_16 ucAuthAlgNum; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame %d, Status Code = %d\n", - u2TransactionSeqNum, u2StatusCode)); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - if (prStaRec) { - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucReceiveAddr = prStaRec->aucMacAddr; - - ucAuthAlgNum = prStaRec->ucAuthAlgNum; - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - pfTxDoneHandler = saaFsmRunEventTxDone; - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - pfTxDoneHandler = aaaFsmRunEventTxDone; - break; - } - - } - else { /* For Error Status Code */ - P_WLAN_AUTH_FRAME_T prFalseAuthFrame; - - - ASSERT(prFalseAuthSwRfb); - prFalseAuthFrame = (P_WLAN_AUTH_FRAME_T)prFalseAuthSwRfb->pvHeader; - - ASSERT(u2StatusCode != STATUS_CODE_SUCCESSFUL); - - pucTransmitAddr = prFalseAuthFrame->aucDestAddr; - - pucReceiveAddr = prFalseAuthFrame->aucSrcAddr; - - ucAuthAlgNum = prFalseAuthFrame->u2AuthAlgNum; - - u2TransactionSeqNum = (prFalseAuthFrame->u2AuthTransSeqNo + 1); - } - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF((PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - ucAuthAlgNum, - u2TransactionSeqNum, - u2StatusCode); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - if(prStaRec) { - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; //false Auth frame - } - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#endif /* CFG_SUPPORT_AAA */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX Authentication frame for SAA/AAA event -* handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - UINT_16 u2TxAuthAlgNum; - UINT_16 u2TxTransactionSeqNum; - - - ASSERT(prMsduInfo); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAuthFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAuthFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (u2TxFrameCtrl != MAC_FRAME_AUTH) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2TxAuthAlgNum) - u2TxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2TxAuthAlgNum != (UINT_16)(prStaRec->ucAuthAlgNum)) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TxTransactionSeqNum) - u2TxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2TxTransactionSeqNum != u2TransactionSeqNum) { - return WLAN_STATUS_FAILURE; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckTxAuthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Auth Frame's Transaction Sequence -* Number before delivering it to the corresponding SAA or AAA Module. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain authentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxTransactionSeqNum; - - - ASSERT(prSwRfb); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Authentication Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_SUCCESS; - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - switch (u2RxTransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - saaFsmRunEventRxAuth(prAdapter, prSwRfb); - break; - - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: -#if CFG_SUPPORT_AAA - aaaFsmRunEventRxAuth(prAdapter, prSwRfb); -#endif /* CFG_SUPPORT_AAA */ - break; - - default: - DBGLOG(SAA, WARN, ("Strange Authentication Packet: Auth Trans Seq No = %d, Error Status Code = %d\n", - u2RxTransactionSeqNum, prAuthFrame->u2StatusCode)); - break; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameTransSeq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming Authentication Frame and take -* the status code out. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxAuthAlgNum; - UINT_16 u2RxTransactionSeqNum; - //UINT_16 u2RxStatusCode; // NOTE(Kevin): Optimized for ARM - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2RxAuthAlgNum); - u2RxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2RxAuthAlgNum != (UINT_16)prStaRec->ucAuthAlgNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with auth type = %d, current = %d\n", - u2RxAuthAlgNum, prStaRec->ucAuthAlgNum)); - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2RxTransactionSeqNum != u2TransactionSeqNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with Transaction Seq No = %d\n", - u2RxTransactionSeqNum)); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Get the Status code - //WLAN_GET_FIELD_16(&prAuthFrame->u2StatusCode, &u2RxStatusCode); - //*pu2StatusCode = u2RxStatusCode; - *pu2StatusCode = prAuthFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Challenge Text IE from the Authentication frame -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] prIEHdr Pointer to start address of IE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prSwRfb); - ASSERT(prIEHdr); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - u2TransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - /* Only consider SEQ_2 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_2) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY)) { - - /* Free previous allocated TCM memory */ - if (prStaRec->prChallengeText) { - ASSERT(0); - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - if ( ( prStaRec->prChallengeText = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, IE_SIZE(prIEHdr)) ) == NULL) { - return; - } - - /* Save the Challenge Text from Auth Seq 2 Frame, before sending Auth Seq 3 Frame */ - COPY_IE(prStaRec->prChallengeText, prIEHdr); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - PUINT_8 pucIEsBuffer; - UINT_16 u2IEsLen; - UINT_16 u2Offset; - UINT_8 ucIEID; - UINT_32 i; - - - ASSERT(prSwRfb); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - pucIEsBuffer = &prAuthFrame->aucInfoElem[0]; - u2IEsLen = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - IE_FOR_EACH(pucIEsBuffer, u2IEsLen, u2Offset) { - ucIEID = IE_ID(pucIEsBuffer); - - for (i = 0; i < (sizeof(rxAuthIETable) / sizeof(HANDLE_IE_ENTRY_T)); i++) { - - if (ucIEID == rxAuthIETable[i].ucElemID) { - rxAuthIETable[i].pfnHandleIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIEsBuffer); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth2_Auth4Frame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Deauthentication frame -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2StatusCode Status Code -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeDeauthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_8 aucBssid[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - ASSERT(aucBssid); - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Deauthentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DEAUTH; - - //WLAN_SET_FIELD_16(&prDeauthFrame->u2FrameCtrl, u2FrameCtrl); - prDeauthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDeauthFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucBSSID, aucBssid); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDeauthFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prDeauthFrame->u2ReasonCode, u2ReasonCode); - prDeauthFrame->u2ReasonCode = u2ReasonCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeDeauthFrameHeaderAndFF() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Deauthenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prClassErrSwRfb Pointer to the SW_RFB_T which is Class Error. -* @param[in] u2ReasonCode A reason code to indicate why to leave BSS. -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -* @retval WLAN_STATUS_FAILURE Didn't send Deauth frame for various reasons. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_WLAN_MAC_HEADER_A4_T prWlanMacHeader = NULL; - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - PUINT_8 pucBssid = NULL; - - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2RxFrameCtrl; - P_BSS_INFO_T prBssInfo; - - P_DEAUTH_INFO_T prDeauthInfo; - OS_SYSTIME rCurrentTime; - INT_32 i4NewEntryIndex, i; - UINT_8 ucStaRecIdx = STA_REC_INDEX_NOT_FOUND; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucBMC[] = BC_MAC_ADDR; -#endif - - /* NOTE(Kevin): The best way to reply the Deauth is according to the incoming data - * frame - */ - //4 <1> Find the Receiver Address first. - if (prClassErrSwRfb) { - BOOLEAN fgIsAbleToSendDeauth = FALSE; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_A4_T) prClassErrSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prWlanMacHeader->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prWlanMacHeader->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* TODO(Kevin): Currently we won't send Deauth for IBSS node. How about DLS ? */ - if ((prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) == 0) { - return WLAN_STATUS_FAILURE; - } - - /* Check if corresponding BSS is able to send Deauth */ - for (i = NETWORK_TYPE_AIS_INDEX; i < NETWORK_TYPE_INDEX_NUM; i++) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[i]); - - if (IS_NET_ACTIVE(prAdapter, i) && - (EQUAL_MAC_ADDR(prWlanMacHeader->aucAddr1, prBssInfo->aucOwnMacAddr))) { - { - fgIsAbleToSendDeauth = TRUE; - eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)i; - break; - } - } - } - - if (!fgIsAbleToSendDeauth) { - return WLAN_STATUS_FAILURE; - } - - pucReceiveAddr = prWlanMacHeader->aucAddr2; - - } - else if (prStaRec) { - - pucReceiveAddr = prStaRec->aucMacAddr; - } - else { -#if CFG_ENABLE_WIFI_DIRECT - pucReceiveAddr = aucBMC; -#else - return WLAN_STATUS_FAILURE; -#endif - } - - //4 <2> Check if already send a Deauth frame in MIN_DEAUTH_INTERVAL_MSEC - GET_CURRENT_SYSTIME(&rCurrentTime); - - i4NewEntryIndex = -1; - for (i = 0; i < MAX_DEAUTH_INFO_COUNT; i++) { - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i]); - - - /* For continuously sending Deauth frame, the minimum interval is - * MIN_DEAUTH_INTERVAL_MSEC. - */ - if (CHECK_FOR_TIMEOUT(rCurrentTime, - prDeauthInfo->rLastSendTime, - MSEC_TO_SYSTIME(MIN_DEAUTH_INTERVAL_MSEC))) { - - i4NewEntryIndex = i; - } - else if (EQUAL_MAC_ADDR(pucReceiveAddr, prDeauthInfo->aucRxAddr) && - (!pfTxDoneHandler)) { - - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Update information. - if (i4NewEntryIndex > 0) { - - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i4NewEntryIndex]); - - COPY_MAC_ADDR(prDeauthInfo->aucRxAddr, pucReceiveAddr); - prDeauthInfo->rLastSendTime = rCurrentTime; - } - else { - /* NOTE(Kevin): for the case of AP mode, we may encounter this case - * if deauth all the associated clients. - */ - DBGLOG(SAA, WARN, ("No unused DEAUTH_INFO_T !\n")); - } - - //4 <4> Allocate a PKT_INFO_T for Deauthentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - REASON_CODE_FIELD_LEN); - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Deauth Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <5> Find the Transmitter Address and BSSID. - if (prClassErrSwRfb) { - - /* The TA of Deauth is the A1 of RX frame */ - pucTransmitAddr = prWlanMacHeader->aucAddr1; - - switch (prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) { - - case MASK_FC_FROM_DS: - /* The BSSID of Deauth is the A2 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - case MASK_FC_TO_DS: - /* The BSSID of Deauth is the A1 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr1; - break; - - case MASK_TO_DS_FROM_DS: - /* TODO(Kevin): Consider BOW, now we set the BSSID of Deauth - * to the A2 of RX frame for temporary solution. - */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - /* No Default */ - } - - } - else if (prStaRec) { - eNetTypeIndex = prStaRec->ucNetTypeIndex; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - } -#if CFG_ENABLE_WIFI_DIRECT - else { - if (prAdapter->fgIsP2PRegistered) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ucStaRecIdx = STA_REC_INDEX_BMCAST; - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - } - else { - return WLAN_STATUS_FAILURE; - } - } - -#endif - - //4 <6> compose Deauthentication frame header and some fixed fields */ - authComposeDeauthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - pucBssid, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDeauthFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("authSendDeauthFrame with protection\n")); - } -#endif - - //4 <7> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = ((prStaRec == NULL)?ucStaRecIdx:prStaRec->ucIndex); - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + REASON_CODE_FIELD_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <8> Inform TXM to send this Deauthentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendDeauthFrame() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Deauthentication frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Deauthentication Frame. - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Deauthentication Frame. -#if 0 // Kevin: Seems redundant - WLAN_GET_FIELD_16(&prDeauthFrame->u2FrameCtrl, &u2RxFrameCtrl) - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (u2RxFrameCtrl != MAC_FRAME_DEAUTH) { - return WLAN_STATUS_FAILURE; - } -#endif - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Deauth Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDeauthFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Deauth Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDeauthFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDeauthFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxDeauthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucExpectedBSSID Given Expected BSSID. -* @param[in] u2ExpectedAuthAlgNum Given Expected Authentication Algorithm Number -* @param[in] u2ExpectedTransSeqNum Given Expected Transaction Sequence Number. -* @param[out] pu2ReturnStatusCode Return Status Code. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -* @retval WLAN_STATUS_FAILURE The frame we will ignore. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2ReturnStatusCode = STATUS_CODE_SUCCESSFUL; - - - ASSERT(prSwRfb); - ASSERT(aucExpectedBSSID); - ASSERT(pu2ReturnStatusCode); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Check the BSSID - if (UNEQUAL_MAC_ADDR(prAuthFrame->aucBSSID, aucExpectedBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - if (prAuthFrame->u2AuthAlgNum != u2ExpectedAuthAlgNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED; - } - - if (prAuthFrame->u2AuthTransSeqNo != u2ExpectedTransSeqNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_OUT_OF_SEQ; - } - - *pu2ReturnStatusCode = u2ReturnStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth1Frame() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/bss.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/bss.c deleted file mode 100755 index 263f18b88eb7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/bss.c +++ /dev/null @@ -1,2776 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/bss.c#3 $ -*/ - -/*! \file "bss.c" - \brief This file contains the functions for creating BSS(AP)/IBSS(AdHoc). - - This file contains the functions for BSS(AP)/IBSS(AdHoc). We may create a BSS/IBSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - - - -/* -** $Log: bss.c $ -** -** 08 29 2012 chinglan.wang -** [ALPS00349664] [6577JB][WIFI] Phone can not connect to AP secured with AES via WPS in 802.11n Only -** . -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 14 2012 chinglan.wang - * NULL - * Fix the losing of the HT IE in assoc request.. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 08 2012 yuche.tsai - * NULL - * Fix FW assert when start Hot-Spot. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 20 2012 chinglan.wang - * 03 02 2012 terry.wu - * NULL - * Fix the WPA-PSK TKIP and WPA2-PSK AES security mode bug. - * - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 15 2012 yuche.tsai - * NULL - * Fix wrong basic rate issue. - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Always set short slot time to TRUE initially in AP mode - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 29 2011 eddie.chen - * [WCXRP00000608] [MT6620 Wi-Fi][DRV] Change wmm parameters in beacon - * Change wmm parameters in beacon. - * - * 03 29 2011 yuche.tsai - * [WCXRP00000607] [Volunteer Patch][MT6620][Driver] Coding Style Fix for klocwork scan. - * Fix klocwork issue. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * modify to handle if beacon MSDU been released when BSS deactivated - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * bss should create station record type according to callers input. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * In p2p link function, check networktype before calling p2p function. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Modify p2p link function to avoid assert. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Fix the compile error in windows. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * .Fix typo and missing entry - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Fix prBssInfo->aucCWminLog to prBssInfo->aucCWminLogForBcast - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 16 2010 yuche.tsai - * NULL - * Before composing Beacon IE, assign network type index for msdu info, - * this information is needed by RLM module while composing some RLM related IE field. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Fix undefined pucDestAddr in bssUpdateBeaconContent() - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 26 2010 yuche.tsai - * - * Add support to RX probe response for P2P. - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fix compilation error when WIFI_DIRECT is turned on - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update bssProcessProbeRequest() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Use TX MGMT Frame API for sending PS NULL frame to avoid the TX Burst Mechanism in TX FW Frame API - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Seperate Beacon and ProbeResp IE array - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 20 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Fix restart Beacon Timeout Func after connection diagnosis - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename the CFG flags - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing beacon's TX data rate - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to define - BAND_24G and specific BSS_INFO_T was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -APPEND_VAR_IE_ENTRY_T txBcnIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - ,{ 0, p2pFuncCalculateExtra_IELenForBeacon, p2pFuncGenerateExtra_IEForBeacon } /* 221 */ -#else - ,{ 0, p2pFuncCalculateP2p_IELenForBeacon, p2pFuncGenerateP2p_IEForBeacon } /* 221 */ - ,{ 0, p2pFuncCalculateWSC_IELenForBeacon, p2pFuncGenerateWSC_IEForBeacon } /* 221 */ -#endif -#endif /* CFG_ENABLE_WIFI_DIRECT */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create or reset a STA_RECORD_T by given BSS_DESC_T for -* Infrastructure or AdHoc Mode. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eStaType Assign STA Type for this STA_RECORD_T -* @param[in] eNetTypeIndex Assign Net Type Index for this STA_RECORD_T -* @param[in] prBssDesc Received Beacon/ProbeResp from this STA -* -* @retval Pointer to STA_RECORD_T -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_STA_RECORD_T prStaRec; - UINT_8 ucNonHTPhyTypeSet; - - - ASSERT(prBssDesc); - - //4 <1> Get a valid STA_RECORD_T - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - if (!prStaRec) { - - prStaRec = cnmStaRecAlloc(prAdapter, (UINT_8) eNetTypeIndex); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - - if(!prStaRec) { - ASSERT(FALSE); - return NULL; - } - - ASSERT(prStaRec); - - prStaRec->ucJoinFailureCount = 0; - /* TODO(Kevin): If this is an old entry, we may also reset the ucJoinFailureCount to 0. - */ - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prBssDesc->aucSrcAddr); - } - - - //4 <2> Setup STA TYPE and NETWORK - prStaRec->eStaType = eStaType; - - prStaRec->ucNetTypeIndex = eNetTypeIndex; - - - //4 <3> Update information from BSS_DESC_T to current P_STA_RECORD_T - prStaRec->u2CapInfo = prBssDesc->u2CapInfo; - - prStaRec->u2OperationalRateSet = prBssDesc->u2OperationalRateSet; - prStaRec->u2BSSBasicRateSet = prBssDesc->u2BSSBasicRateSet; - - prStaRec->ucPhyTypeSet = prBssDesc->ucPhyTypeSet; - - if (!((prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_KEY_ABSENT) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION_DISABLED) || - (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) || - (prAdapter->prGlueInfo->u2WapiAssocInfoIESz))) { - DBGLOG(BSS, INFO, ("Ignore the HT Bit for TKIP as pairwise cipher configed!\n")); - prStaRec->ucPhyTypeSet &= ~PHY_TYPE_BIT_HT; - } - - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prAdapter->rWifiVar.ucAvailablePhyTypeSet; - - ucNonHTPhyTypeSet = prStaRec->ucDesiredPhyTypeSet & PHY_TYPE_SET_802_11ABG; - - /* Check for Target BSS's non HT Phy Types */ - if (ucNonHTPhyTypeSet) { - - if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_ERP) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_OFDM) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = TRUE; - } - else { - /* Use mandatory for 11N only BSS */ - ASSERT(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N); - - { - /* TODO(Kevin): which value should we set for 11n ? ERP ? */ - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = FALSE; - } - - /* Update non HT Desired Rate Set */ - { - P_CONNECTION_SETTINGS_T prConnSettings; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prStaRec->u2DesiredNonHTRateSet = - (prStaRec->u2OperationalRateSet & prConnSettings->u2DesiredNonHTRateSet); - } - - //4 <4> Update information from BSS_DESC_T to current P_STA_RECORD_T - if (IS_AP_STA(prStaRec)) { - /* do not need to parse IE for DTIM, - * which have been parsed before inserting into BSS_DESC_T - */ - if (prBssDesc->ucDTIMPeriod) { - prStaRec->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - } - else { - prStaRec->ucDTIMPeriod = 0; // Means that TIM was not parsed. - } - } - - - //4 <5> Update default value - prStaRec->fgDiagnoseConnection = FALSE; - - - //4 <6> Update default value for other Modules - /* Determine fgIsWmmSupported and fgIsUapsdSupported in STA_REC */ - mqmProcessScanResult(prAdapter, prBssDesc, prStaRec); - - return prStaRec; - -} /* end of bssCreateStaRecFromBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ) -{ - P_WLAN_MAC_HEADER_T prNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prNullFrame = (P_WLAN_MAC_HEADER_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prNullFrame->u2FrameCtrl, u2FrameCtrl); - prNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prNullFrame->u2SeqCtrl = 0; - - return; - -} /* end of bssComposeNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the QoS Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* @param[in] ucUP User Priority. -* @param[in] fgSetEOSP Set the EOSP bit. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ) -{ - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - UINT_16 u2QosControl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_QOS_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send QoS Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the QoS Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2FrameCtrl, u2FrameCtrl); - prQoSNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prQoSNullFrame->u2SeqCtrl = 0; - - u2QosControl = (UINT_16)(ucUP & WMM_QC_UP_MASK); - - if (fgSetEOSP) { - u2QosControl |= WMM_QC_EOSP; - } - - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2QosCtrl, u2QosControl); - prQoSNullFrame->u2QosCtrl = u2QosControl; // NOTE(Kevin): Optimized for ARM - - return; - -} /* end of bssComposeQoSNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Succe]ss. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeNullFrame(prAdapter, - (PUINT_8)((UINT_32)prMsduInfo->prPacket + MAC_TX_RESERVED_FIELD), - prStaRec); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ BSS_DEFAULT_CONN_TEST_NULL_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendNullFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the QoS Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - FALSE); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_QOS_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_QOS_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ TXM_DEFAULT_DATA_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendQoSNullFrame() */ - - -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate Information Elements of Extended -* Support Rate -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - PUINT_8 pucBuffer; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucExtSupRatesLen = 0; - } - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ELEM_MAX_LEN_SUP_RATES], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of bssGenerateExtSuppRate_IE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Beacon -* or Probe Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ) -{ - PUINT_8 pucBuffer; - UINT_8 ucSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - /* Compose the frame body of the Probe Response frame. */ - //4 <1> Fill the SSID element. - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - SSID_IE(pucBuffer)->ucLength = prBssInfo->ucSSIDLen; - if (prBssInfo->ucSSIDLen) { - kalMemCopy(SSID_IE(pucBuffer)->aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - } - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - - //4 <2> Fill the Supported Rates element. - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - } - - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <3> Fill the DS Parameter Set element. - if (prBssInfo->eBand == BAND_2G4) { - DS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_DS_PARAM_SET; - DS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_DS_PARAMETER_SET; - DS_PARAM_IE(pucBuffer)->ucCurrChnl = prBssInfo->ucPrimaryChannel; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <4> IBSS Parameter Set element, ID: 6 - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - IBSS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_IBSS_PARAM_SET; - IBSS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_IBSS_PARAMETER_SET; - WLAN_SET_FIELD_16(&(IBSS_PARAM_IE(pucBuffer)->u2ATIMWindow), prBssInfo->u2ATIMWindow); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <5> TIM element, ID: 5 - if ((!pucDestAddr) && // For Beacon only. - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - -#if CFG_ENABLE_WIFI_DIRECT - /*no fgIsP2PRegistered protect*/ - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { -#if 0 - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_8 ucBitmapControl = 0; - UINT_32 u4N1, u4N2; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - // Clear existing value. - prP2pSpecificBssInfo->ucBitmapCtrl = 0; - kalMemZero(prP2pSpecificBssInfo->aucPartialVirtualBitmap, - sizeof(prP2pSpecificBssInfo->aucPartialVirtualBitmap)); - - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucDTIMCount = prBssInfo->ucDTIMCount; - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount == 0) { - //3 *** pmQueryBufferedBCAST(); - } - - //3 *** pmQueryBufferedPSNode(); - /* TODO(Kevin): Call PM Module here to loop all STA_RECORD_Ts and it - * will call bssSetTIMBitmap to toggle the Bitmap. - */ - - // Set Virtual Bitmap for UCAST - u4N1 = (prP2pSpecificBssInfo->u2SmallestAID >> 4) << 1; // Find the largest even number. - u4N2 = prP2pSpecificBssInfo->u2LargestAID >> 3; // Find the smallest number. - - ASSERT(u4N2 >= u4N1); - - kalMemCopy(TIM_IE(pucBuffer)->aucPartialVirtualMap, - &prP2pSpecificBssInfo->aucPartialVirtualBitmap[u4N1], - ((u4N2 - u4N1) + 1)); - - // Set Virtual Bitmap for BMCAST - // BMC bit only indicated when DTIM count == 0. - if (prBssInfo->ucDTIMCount == 0) { - ucBitmapControl = prP2pSpecificBssInfo->ucBitmapCtrl; - } - TIM_IE(pucBuffer)->ucBitmapControl = ucBitmapControl | (UINT_8)u4N1; - - TIM_IE(pucBuffer)->ucLength = ((u4N2 - u4N1) + 4); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); -#else - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -#endif - - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - /* NOTE(Kevin): 1. AIS - Didn't Support AP Mode. - * 2. BOW - Didn't Support BCAST and PS. - */ - } - - - - } - - return; -} /* end of bssBuildBeaconProbeRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Beacon/Probe Response frame header and -* its fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* @param[in] pucOwnMACAddress Given Our MAC Address. -* @param[in] pucBSSID Given BSSID of the BSS. -* @param[in] u2BeaconInterval Given Beacon Interval. -* @param[in] u2CapInfo Given Capability Info. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ) -{ - P_WLAN_BEACON_FRAME_T prBcnProbRspFrame; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - UINT_16 u2FrameCtrl; - - DEBUGFUNC("bssComposeBeaconProbeRespFrameHeaderAndFF"); - //DBGLOG(INIT, LOUD, ("\n")); - - - ASSERT(pucBuffer); - ASSERT(pucOwnMACAddress); - ASSERT(pucBSSID); - - prBcnProbRspFrame = (P_WLAN_BEACON_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Beacon /ProbeResp frame. - /* Fill the Frame Control field. */ - if (pucDestAddr) { - u2FrameCtrl = MAC_FRAME_PROBE_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_BEACON; - pucDestAddr = aucBCAddr; - } - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2FrameCtrl, u2FrameCtrl); - prBcnProbRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with BCAST MAC ADDR or TA of ProbeReq. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucDestAddr, pucDestAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucSrcAddr, pucOwnMACAddress); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucBSSID, pucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prBcnProbRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the Beacon /ProbeResp frame. - /* MAC will update TimeStamp field */ - - /* Fill the Beacon Interval field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2BeaconInterval, u2BeaconInterval); - prBcnProbRspFrame->u2BeaconInterval = u2BeaconInterval; // NOTE(Kevin): Optimized for ARM - - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2CapInfo, u2CapInfo); - prBcnProbRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of bssComposeBeaconProbeRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the Beacon Frame Template to FW for AIS AdHoc and P2P GO. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_WLAN_BEACON_FRAME_T prBcnFrame; - UINT_32 i; - - DEBUGFUNC("bssUpdateBeaconContent"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - //4 <1> Allocate a PKT_INFO_T for Beacon Frame - /* Allocate a MSDU_INFO_T */ - // For Beacon - prMsduInfo = prBssInfo->prBeacon; - - // beacon prMsduInfo will be NULLify once BSS deactivated, so skip if it is - if (prMsduInfo == NULL) { - return WLAN_STATUS_SUCCESS; - } - - //4 <2> Compose header - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - NULL, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - - - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - prMsduInfo->ucNetworkType = eNetTypeIndex; - - //4 <3> Compose the frame body's Common IEs of the Beacon frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, NULL); - - - //4 <4> Compose IEs in MSDU_INFO_T - - /* Append IE for Beacon */ - for (i = 0; i < sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txBcnIETable[i].pfnAppendIE) { - txBcnIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - eNetTypeIndex, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - -} /* end of bssUpdateBeaconContent() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Beacon Frame(for BOW) or Probe Response Frame according to the given -* Destination Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* @param[in] pucDestAddr Pointer to the Destination Address to reply -* @param[in] u4ControlFlags Control flags for information on Probe Response. -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedFixedIELen; - UINT_16 u2EstimatedExtraIELen; - P_APPEND_VAR_IE_ENTRY_T prIeArray = NULL; - UINT_32 u4IeArraySize = 0; - UINT_32 i; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - - if (!pucDestAddr) { // For Beacon - prIeArray = &txBcnIETable[0]; - u4IeArraySize = sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - else { - prIeArray = &txProbRspIETable[0]; - u4IeArraySize = sizeof(txProbRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - - - //4 <1> Allocate a PKT_INFO_T for Beacon /Probe Response Frame - /* Allocate a MSDU_INFO_T */ - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Fields */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_IBSS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + (3 + MAX_LEN_TIM_PARTIAL_BMP)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < u4IeArraySize; i++) { - u2EstimatedFixedIELen = prIeArray[i].u2EstimatedFixedIELen; - - if (u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += u2EstimatedFixedIELen; - } - else { - ASSERT(prIeArray[i].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16) - prIeArray[i].pfnCalculateVariableIELen(prAdapter, eNetTypeIndex, NULL); - } - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending %s.\n", - ((!pucDestAddr)?"Beacon":"Probe Response"))); - return WLAN_STATUS_RESOURCES; - } - - - //4 <2> Compose Beacon/Probe Response frame header and fixed fields in MSDU_INfO_T. - /* Compose Header and Fixed Field */ -#if CFG_ENABLE_WIFI_DIRECT - if (u4ControlFlags & BSS_PROBE_RESP_USE_P2P_DEV_ADDR) { - if(prAdapter->fgIsP2PRegistered) { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prAdapter->rWifiVar.aucDeviceAddress, - prAdapter->rWifiVar.aucDeviceAddress, - DOT11_BEACON_PERIOD_DEFAULT, - (prBssInfo->u2CapInfo & ~(CAP_INFO_ESS | CAP_INFO_IBSS))); - } - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - } - - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - - //4 <4> Compose the frame body's Common IEs of the Beacon/ProbeResp frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, pucDestAddr); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < u4IeArraySize; i++) { - if (prIeArray[i].pfnAppendIE) { - prIeArray[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Beacon /Probe Response frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendBeaconProbeResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - UINT_8 aucBCBSSID[] = BC_BSSID; - BOOLEAN fgIsBcBssid; - BOOLEAN fgReplyProbeResp; - UINT_32 u4CtrlFlagsForProbeResp = 0; - ENUM_BAND_T eBand; - UINT_8 ucHwChannelNum; - - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get BSSID - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - if (EQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID)) { - fgIsBcBssid = TRUE; - } - else { - fgIsBcBssid = FALSE; - } - - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if ((!fgIsBcBssid) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - continue; - } - - eBand = HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr); - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - - if(prBssInfo->eBand != eBand) { - continue; - } - - if(prBssInfo->ucPrimaryChannel != ucHwChannelNum) { - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - -#if CFG_SUPPORT_ADHOC - fgReplyProbeResp = aisValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); -#endif - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex)) { - - fgReplyProbeResp = p2pFuncValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - fgReplyProbeResp = bowValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif - - if (fgReplyProbeResp) { - if(nicTxGetFreeCmdCount(prAdapter) > (CFG_TX_MAX_CMD_PKT_NUM/2) ){ - /* Resource margin is enough */ - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr, u4CtrlFlagsForProbeResp); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ - - -#if 0 // NOTE(Kevin): condition check should move to P2P_FSM.c -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_8 aucBCBSSID[] = BC_BSSID; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - BOOLEAN fgReplyProbeResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgP2PTargetDeviceFound; - UINT_8 aucP2PWildcardSSID[] = P2P_WILDCARD_SSID; -#endif - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get SSID IE ptr - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - prIeSsid = (P_IE_SSID_T)NULL; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - // if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SUP_RATES) { - if (IE_LEN(pucIE) <= RATE_NUM) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - -#if CFG_ENABLE_WIFI_DIRECT - // TODO: P2P IE & WCS IE parsing for P2P. - case ELEM_ID_P2P: - - break; -#endif - - /* no default */ - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (UNEQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - /* BSSID not Wildcard BSSID. */ - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - /* TODO(Kevin): Check if we are IBSS Master. */ - if (TRUE) { - - if (prIeSsid) { - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } - } - } -#if CFG_ENABLE_WIFI_DIRECT - else if (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex) { - - // TODO(Kevin): Move following lines to p2p_fsm.c - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || - (EQUAL_SSID(aucP2PWildcardSSID, - P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, - prIeSsid->ucLength)))) { -// if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prMgtHdr->aucSrcAddr, pucIE, u2IELength)) { - if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prSwRfb)) { - /* Extand channel request time & cancel scan request. */ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - // TODO: RX probe request may not caused by LISTEN state. - // TODO: It can be GO. - /* Generally speaking, cancel a non-exist scan request is fine. - * We can check P2P FSM here for only LISTEN state. - */ - - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - ASSERT(0); // Can't abort SCN FSM - continue; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prP2pFsmInfo->ucSeqNumOfScnMsg; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->fgIsChannelExt = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - /* 1. Probe Request without SSID. - * 2. Probe Request with SSID not Wildcard SSID & not P2P Wildcard SSID. - */ - continue; - } - -#if 0 // Frog - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_LISTEN) { - // P2P 2.4.1 - P2P Devices shall not respond to Probe Request frames which only contain 11b rates only. - if (prIeSupportedRate || prIeExtSupportedRate) { - UINT_16 u2OperationalRateSet, u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if (u2OperationalRateSet & ~RATE_SET_HR_DSSS) { - continue; - } - } - } - - // TODO: Check channel time before first check point to: - /* If Target device is selected: - * 1. Send XXXX request frame. - * else - * 1. Send Probe Response frame. - */ - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): During PROVISION state, can we reply Probe Response ? */ - - /* TODO(Kevin): - * If we are GO, accept legacy client --> accept Wildcard SSID - * If we are in Listen State, accept only P2P Device --> check P2P IE and WPS IE - */ - if (TRUE /* We are GO */) { - if (prIeSsid) { - UINT_8 aucSSID[]=P2P_WILDCARD_SSID; - - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength) || - EQUAL_SSID(aucSSID, P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } -// else if (FALSE /* We are in Listen State */) { -// } - - /* TODO(Kevin): Check P2P IE and WPS IE */ - } -#endif - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): TBD */ - } - } -#endif - else { - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - } - - if (fgReplyProbeResp) { - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr); - } - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to clear the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prPeerStaRec; - - LINK_FOR_EACH_ENTRY(prPeerStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - cnmStaRecChangeState(prAdapter, prPeerStaRec, STA_STATE_1); - } - - LINK_INITIALIZE(prStaRecOfClientList); - } - - return; -} /* end of bssClearClientList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Add a STA_RECORD_T to the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - DBGLOG(BSS, WARN, ("Current Client List already contains that STA_RECORD_T["MACSTR"]\n", - MAC2STR(prStaRec->aucMacAddr))); - return; - } - } - } - - LINK_INSERT_TAIL(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; -} /* end of bssAddStaRecToClientList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Remove a STA_RECORD_T from the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; - } - } - } - - DBGLOG(BSS, INFO, ("Current Client List didn't contain that STA_RECORD_T["MACSTR"] before removing.\n", - MAC2STR(prStaRec->aucMacAddr))); - - return; -} /* end of bssRemoveStaRecFromClientList() */ -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to process Beacons from current Ad-Hoc network peers. -* We also process Beacons from other Ad-Hoc network during SCAN. If it has -* the same SSID and we'll decide to merge into it if it has a larger TSF. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ) -{ - P_STA_RECORD_T prStaRec = NULL; - - BOOLEAN fgIsCheckCapability = FALSE; - BOOLEAN fgIsCheckTSF = FALSE; - BOOLEAN fgIsGoingMerging = FALSE; - BOOLEAN fgIsSameBSSID; - - - ASSERT(prBssInfo); - ASSERT(prBssDesc); - - //4 <1> Process IBSS Beacon only after we create or merge with other IBSS. - if (!prBssInfo->fgIsBeaconActivated) { - return; - } - - //4 <2> Get the STA_RECORD_T of TA. - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prBssDesc->aucSrcAddr); - - fgIsSameBSSID = UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID) ? FALSE : TRUE; - - - //4 <3> IBSS Merge Decision Flow for Processing Beacon. - if (fgIsSameBSSID) { - - /* Same BSSID: - * Case I. This is a new TA and it has decide to merged with us. - * a) If fgIsMerging == FALSE - we will send msg to notify AIS. - * b) If fgIsMerging == TRUE - already notify AIS. - * Case II. This is an old TA and we've already merged together. - */ - if (!prStaRec) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - - } - else { - - ASSERT((prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) && - IS_ADHOC_STA(prStaRec)); - - if (prStaRec->ucStaState != STA_STATE_3) { - - if (!prStaRec->fgIsMerging) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - - } - } - else { - - /* Unequal BSSID: - * Case III. This is a new TA and we need to compare the TSF and get the winner. - * Case IV. This is an old TA and it merge into a new IBSS before we do the same thing. - * We need to compare the TSF to get the winner. - * Case V. This is an old TA and it restart a new IBSS. We also need to - * compare the TSF to get the winner. - */ - - /* For Case III, IV & V - We'll always check this new IBSS's capability first - * before merging into new IBSS. - */ - fgIsCheckCapability = TRUE; - - /* If check is passed, we need to perform TSF check to decide the major BSSID */ - fgIsCheckTSF = TRUE; - - /* For Case IV & V - We won't update rExpirationTime of Sta Record */ - } - - - //4 <7> Check this BSS_DESC_T's capability. - if (fgIsCheckCapability) { - BOOLEAN fgIsCapabilityMatched = FALSE; - - do { - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unsupported Phy.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unknown Basic Rate.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - fgIsCapabilityMatched = TRUE; - } - while (FALSE); - - if (!fgIsCapabilityMatched) { - - if (prStaRec) { - /* For Case II - We merge this STA_RECORD in RX Path. - * Case IV & V - They change their BSSID after we merge with them. - */ - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - return; - } - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Peer MAC: "MACSTR" - Check capability was passed.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - - if (fgIsCheckTSF) { -#if CFG_SLT_SUPPORT - fgIsGoingMerging = TRUE; -#else - if (prBssDesc->fgIsLargerTSF) { - fgIsGoingMerging = TRUE; - } - else { - return; - } -#endif - } - - - if (fgIsGoingMerging) { - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = TRUE; - prBssDesc->fgIsConnected = FALSE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - if(!prStaRec) { - // no memory ? - return; - } - - prStaRec->fgIsMerging = TRUE; - - /* update RCPI */ - prStaRec->ucRCPI = ucRCPI; - - //4 <3> Send Merge Msg to CNM to obtain the channel privilege. - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_IBSS_PEER_FOUND_T)); - - if (!prAisIbssPeerFoundMsg) { - - ASSERT(0); // Can't send Merge Msg - return; - } - - prAisIbssPeerFoundMsg->rMsgHdr.eMsgId = MID_SCN_AIS_FOUND_IBSS; - prAisIbssPeerFoundMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - prAisIbssPeerFoundMsg->prStaRec = prStaRec; - - /* Inform AIS to do STATE TRANSITION - * For Case I - If AIS in IBSS_ALONE, let it jump to NORMAL_TR after we know the new member. - * For Case III, IV - Now this new BSSID wins the TSF, follow it. - */ - if (fgIsSameBSSID) { - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; - } - else { -#if CFG_SLT_SUPPORT - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; -#else - prAisIbssPeerFoundMsg->fgIsMergeIn = (prBssDesc->fgIsLargerTSF) ? FALSE: TRUE; -#endif - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisIbssPeerFoundMsg, - MSG_SEND_METHOD_BUF); - - } - - return; -} /* end of ibssProcessMatchedBeacon() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the Capability for Ad-Hoc to decide if we are -* able to merge with(same capability). -* -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @retval WLAN_STATUS_FAILURE Can't pass the check of Capability. -* @retval WLAN_STATUS_SUCCESS Pass the check of Capability. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - - - ASSERT(prBssDesc); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - //4 <1> Check the BSS Basic Rate Set for current AdHoc Mode - if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11B) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_HR_DSSS)) { - break; - } - else if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11A) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_OFDM)) { - break; - } - - //4 <2> Check the Short Slot Time. -#if 0 // Do not check ShortSlotTime until Wi-Fi define such policy - if (prConnSettings->eAdHocMode == AD_HOC_MODE_11G) { - if (((prConnSettings->fgIsShortSlotTimeOptionEnable) && - !(prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) || - (!(prConnSettings->fgIsShortSlotTimeOptionEnable) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME))) { - break; - } - } -#endif - - //4 <3> Check the ATIM window setting. - if (prBssDesc->u2ATIMWindow) { - DBGLOG(BSS, INFO, ("AdHoc PS was not supported(ATIM Window: %d)\n", - prBssDesc->u2ATIMWindow)); - break; - } - -#if CFG_RSN_MIGRATION - //4 <4> Check the Security setting. - if (!rsnPerformPolicySelection(prAdapter, prBssDesc)) { - break; - } -#endif - - rStatus = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - return rStatus; - -} /* end of ibssCheckCapabilityForAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for IBSS Mode. -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLowestBasicRateIndex; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - PUINT_16 pu2BSSID = (PUINT_16)&aucBSSID[0]; - UINT_32 i; - - - ASSERT(prBssInfo); - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_IBSS); - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - - //4 <2> Setup BSSID - if (!prBssInfo->fgHoldSameBssidForIBSS) { - - for (i = 0; i < sizeof(aucBSSID)/sizeof(UINT_16); i++) { - pu2BSSID[i] = (UINT_16)(kalRandomNumber() & 0xFFFF); - } - - aucBSSID[0] &= ~0x01; // 7.1.3.3.3 - The individual/group bit of the address is set to 0. - aucBSSID[0] |= 0x02; // 7.1.3.3.3 - The universal/local bit of the address is set to 1. - - COPY_MAC_ADDR(prBssInfo->aucBSSID, aucBSSID); - } - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_IBSS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - return; -} /* end of ibssInitForAdHoc() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -#if CFG_SUPPORT_AAA - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for AP Mode. -* -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ) -{ - UINT_8 ucLowestBasicRateIndex; - - P_AC_QUE_PARMS_T prACQueParms; - - ENUM_WMM_ACI_T eAci; - - UINT_8 auCWminLog2ForBcast[WMM_AC_INDEX_NUM] = { 4/*BE*/, 4 /*BK*/, 3/*VO*/, 2/*VI*/}; - UINT_8 auCWmaxLog2ForBcast[WMM_AC_INDEX_NUM] = { 10, 10, 4, 3}; - UINT_8 auAifsForBcast[WMM_AC_INDEX_NUM] = { 3, 7, 2, 2 }; - UINT_8 auTxopForBcast[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - UINT_8 auCWminLog2[WMM_AC_INDEX_NUM] = { 4 /*BE*/, 4 /*BK*/, 3 /*VO*/, 2 /*VI*/}; - UINT_8 auCWmaxLog2[WMM_AC_INDEX_NUM] = { 7, 10, 4, 3}; - UINT_8 auAifs[WMM_AC_INDEX_NUM] = { 3, 7, 1, 1 }; - UINT_8 auTxop[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - DEBUGFUNC("bssInitForAP"); - DBGLOG(BSS, LOUD,("\n")); - - ASSERT(prBssInfo); - ASSERT((prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || (prBssInfo->eCurrentOPMode == OP_MODE_BOW)); - -#if 0 - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = CONFIG_BW_20M; -#endif - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (fgIsRateUpdate) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <2> Setup BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssInfo->aucOwnMacAddr); - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - prBssInfo->fgUseShortSlotTime = TRUE; - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_ESS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - - //4 <7> Fill the EDCA - - prACQueParms = prBssInfo->arACQueParmsForBcast; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifsForBcast[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxopForBcast[eAci]; - - prBssInfo->aucCWminLog2ForBcast[eAci] = auCWminLog2ForBcast[eAci] ; /* used to send WMM IE */ - prBssInfo->aucCWmaxLog2ForBcast[eAci] = auCWmaxLog2ForBcast[eAci] ; - - DBGLOG(BSS, INFO, ("Bcast: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - - } - - prACQueParms = prBssInfo->arACQueParms; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifs[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxop[eAci]; - - DBGLOG(BSS, INFO, ("eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - } - - /* Note: Caller should update the EDCA setting to HW by nicQmUpdateWmmParms() it there is no AIS network */ - /* Note: In E2, only 4 HW queues. The the Edca parameters should be folow by AIS network */ - /* Note: In E3, 8 HW queues. the Wmm parameters should be updated to right queues according to BSS */ - - - return; -} /* end of bssInitForAP() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update DTIM Count -* -* @param[in] eNetTypeIndex Specify which network to update -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount > 0) { - prBssInfo->ucDTIMCount--; - } - else { - - ASSERT(prBssInfo->ucDTIMPeriod > 0); - - prBssInfo->ucDTIMCount = prBssInfo->ucDTIMPeriod - 1; - } - } - - return; -} /* end of bssUpdateDTIMIE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to set the Virtual Bitmap in TIM Information Elements -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] u2AssocId The association id to set in Virtual Bitmap. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ) -{ - - ASSERT(prBssInfo); - - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - /* Use Association ID == 0 for BMCAST indication */ - if (u2AssocId == 0) { - - prP2pSpecificBssInfo->ucBitmapCtrl |= (UINT_8)BIT(0); - } - else { - PUINT_8 pucPartialVirtualBitmap; - UINT_8 ucBitmapToSet; - - - pucPartialVirtualBitmap = &prP2pSpecificBssInfo->aucPartialVirtualBitmap[(u2AssocId >> 3)]; // (u2AssocId / 8) - ucBitmapToSet = (UINT_8) BIT((u2AssocId % 8)); - - if (*pucPartialVirtualBitmap & ucBitmapToSet) { - /* The virtual bitmap has been set */ - return; - } - - *pucPartialVirtualBitmap |= ucBitmapToSet; - - // Update u2SmallestAID and u2LargestAID - if ((u2AssocId < prP2pSpecificBssInfo->u2SmallestAID) || - (prP2pSpecificBssInfo->u2SmallestAID == 0)) { - prP2pSpecificBssInfo->u2SmallestAID = u2AssocId; - } - - if ((u2AssocId > prP2pSpecificBssInfo->u2LargestAID) || - (prP2pSpecificBssInfo->u2LargestAID == 0)) { - prP2pSpecificBssInfo->u2LargestAID = u2AssocId; - } - } - } - - return; -} /* end of bssSetTIMBitmap() */ -#endif - -#endif /* CFG_SUPPORT_AAA */ - - -VOID -bssCreateStaRecFromAuth ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - -VOID -bssUpdateStaRecFromAssocReq ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm.c deleted file mode 100755 index 1af871d96310..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm.c +++ /dev/null @@ -1,775 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm.c#2 $ -*/ - -/*! \file "cnm.c" - \brief Module of Concurrent Network Management - - Module of Concurrent Network Management -*/ - - - -/* -** $Log: cnm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Fix possible wrong message when P2P is unregistered - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 01 2011 cm.chang - * [WCXRP00001077] [All Wi-Fi][Driver] Fix wrong preferred channel for AP and BOW - * Only check AIS channel for P2P and BOW - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Extension channel of some 5G AP will not follow regulation requirement - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 01 2011 cm.chang - * [WCXRP00000937] [MT6620 Wi-Fi][Driver][FW] cnm.c line #848 assert when doing monkey test - * Print message only in Linux platform for monkey testing - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Check if P2P network index is Tethering AP - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 02 17 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * When P2P registried, invoke BOW deactivate function - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix wrong message ID for channel grant to requester - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set 20/40M bandwidth of AP HT OP before association process - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 21 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support TCP/UDP/IP Checksum offload feature - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 04 27 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * BMC mac address shall be ignored in basic config command - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support change of MAC address by host command - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix bug for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove conditional compiling FPGA_V5 - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before handle the message from other module, it need to obtain -* the Channel privilege from Channel Manager -* -* @param[in] prMsgHdr The message need to be handled. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_REQ_T prMsgChReq; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChReq = (P_MSG_CH_REQ_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChReq: fail to get buf (net=%d, token=%d)\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(CNM, INFO, ("ChReq net=%d token=%d b=%d c=%d s=%d\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID, - prMsgChReq->eRfBand, prMsgChReq->ucPrimaryChannel, - prMsgChReq->eRfSco)); - - prCmdBody->ucNetTypeIndex = prMsgChReq->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChReq->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_REQ; /* Request */ - prCmdBody->ucPrimaryChannel = prMsgChReq->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prMsgChReq->eRfSco; - prCmdBody->ucRfBand = (UINT_8) prMsgChReq->eRfBand; - prCmdBody->ucReqType = (UINT_8) prMsgChReq->eReqType; - prCmdBody->ucReserved = 0; - prCmdBody->u4MaxInterval= prMsgChReq->u4MaxInterval; - COPY_MAC_ADDR(prCmdBody->aucBSSID, prMsgChReq->aucBSSID); - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChReq with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrRequestPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before deliver the message to other module, it need to release -* the Channel privilege to Channel Manager. -* -* @param[in] prMsgHdr The message need to be delivered -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_ABORT_T prMsgChAbort; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChAbort = (P_MSG_CH_ABORT_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChAbort: fail to get buf (net=%d, token=%d)\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(CNM, INFO, ("ChAbort net=%d token=%d\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); - - prCmdBody->ucNetTypeIndex = prMsgChAbort->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChAbort->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_ABORT; /* Abort */ - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChAbort with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrAbortPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_CH_PRIVILEGE_T prEventBody; - P_MSG_CH_GRANT_T prChResp; - - ASSERT(prAdapter); - ASSERT(prEvent); - - prEventBody = (P_EVENT_CH_PRIVILEGE_T) (prEvent->aucBuffer); - prChResp = (P_MSG_CH_GRANT_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_GRANT_T)); - ASSERT(prChResp); - - /* To do: exception handle */ - if (!prChResp) { - DBGLOG(CNM, ERROR, ("ChGrant: fail to get buf (net=%d, token=%d)\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID)); - - return; - } - - DBGLOG(CNM, INFO, ("ChGrant net=%d token=%d ch=%d sco=%d\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID, - prEventBody->ucPrimaryChannel, prEventBody->ucRfSco)); - - ASSERT(prEventBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventBody->ucStatus == EVENT_CH_STATUS_GRANT); - - /* Decide message ID based on network and response status */ - if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_AIS_CH_GRANT; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (prEventBody->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - prChResp->rMsgHdr.eMsgId = MID_CNM_P2P_CH_GRANT; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_BOW_CH_GRANT; - } -#endif - else { - cnmMemFree(prAdapter, prChResp); - return; - } - - prChResp->ucNetTypeIndex = prEventBody->ucNetTypeIndex; - prChResp->ucTokenID = prEventBody->ucTokenID; - prChResp->ucPrimaryChannel = prEventBody->ucPrimaryChannel; - prChResp->eRfSco = (ENUM_CHNL_EXT_T) prEventBody->ucRfSco; - prChResp->eRfBand = (ENUM_BAND_T) prEventBody->ucRfBand; - prChResp->eReqType = (ENUM_CH_REQ_TYPE_T) prEventBody->ucReqType; - prChResp->u4GrantInterval = prEventBody->u4GrantInterval; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prChResp, - MSG_SEND_METHOD_BUF); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked for P2P or BOW networks -* -* @param (none) -* -* @return TRUE: suggest to adopt the returned preferred channel -* FALSE: No suggestion. Caller should adopt its preference -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prBand); - ASSERT(pucPrimaryChannel); - ASSERT(prBssSCO); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - *prBssSCO = prBssInfo->eBssSCO; - - return TRUE; - } - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: available channel is limited to return value -* FALSE: no limited -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ) -{ -#if CFG_ENABLE_WIFI_DIRECT ||(CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL) - P_BSS_INFO_T prBssInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - ASSERT(prAdapter->fgIsP2PRegistered); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - P_BSS_INFO_T prAisBssInfo, prBowBssInfo; - - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prBowBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - if (RLM_NET_PARAM_VALID(prAisBssInfo) && RLM_NET_PARAM_VALID(prBowBssInfo)){ - if (prAisBssInfo->eBand != prBowBssInfo->eBand || - prAisBssInfo->ucPrimaryChannel != prBowBssInfo->ucPrimaryChannel) { - - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 i; - - /* Note: To support real-time decision instead of current activated-time, - * the STA roaming case shall be considered about synchronization - * problem. Another variable fgAssoc40mBwAllowed is added to - * represent HT capability when association - */ - for (i = 0; i < NETWORK_TYPE_INDEX_NUM; i++) { - if (i != (UINT_8) eNetTypeIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[i]; - - if (IS_BSS_ACTIVE(prBssInfo) && (prBssInfo->fg40mBwAllowed || - prBssInfo->fgAssoc40mBwAllowed)) { - return FALSE; - } - } - } - - return TRUE; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm_mem.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm_mem.c deleted file mode 100755 index a1a50baf5382..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm_mem.c +++ /dev/null @@ -1,1292 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm_mem.c#2 $ -*/ - -/*! \file "cnm_mem.c" - \brief This file contain the management function of packet buffers and - generic memory alloc/free functioin for mailbox message. - - A data packet has a fixed size of buffer, but a management - packet can be equipped with a variable size of buffer. -*/ - - - -/* -** $Log: cnm_mem.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * initialize fgNeedResp. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 05 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix correct structure size in cnmStaSendDeactivateCmd() - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * spin lock target revised - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change inner loop index from i to k. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Notify MQM, TXM, and RXM upon disconnection . - * - * 04 26 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Call mqm, txm, rxm functions upon disconnection - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * * * and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * * Added per-TID SN cache in STA_REC - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 03 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Initialize StaRec->arStaWaitQueue - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add debug message when no available pkt buffer - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Fixed STA_REC initialization bug: prStaRec->au2CachedSeqCtrl[k] - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * * * * * * * * * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * * * * * * * * * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * MQM: BA handling - * * * * * * * TXM: Macros updates - * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * Dec 9 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed DBGPRINT - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix warning of null pointer - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and add fgIsInUse flag in STA_RECORD_T - * - * Nov 23 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Assign ucBufferSource in function cnmMgtPktAlloc() - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added packet redispatch function calls - * - * Nov 13 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * enable packet re-usable in current emulation driver - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * 1. Add new function cnmGetStaRecByIndex() - * 2. Rename STA_REC_T to STA_RECORD_T - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call cnmDataPktDispatch() in cnmPktFree() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove definition of pragma section code - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Oct 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ); - -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ); - -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -cnmMgtPktAlloc ( - P_ADAPTER_T prAdapter, - UINT_32 u4Length - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - /* Get a free MSDU_INFO_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(prQueList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if (prMsduInfo) { - prMsduInfo->prPacket = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - prMsduInfo->eSrc = TX_PACKET_MGMT; - - if (prMsduInfo->prPacket == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = NULL; - } - } - -#if DBG - if (prMsduInfo == NULL) { - DBGLOG(MEM, WARN, ("\n")); - DBGLOG(MEM, WARN, ("MgtDesc#=%ld\n", prQueList->u4NumElem)); - -#if CFG_DBG_MGT_BUF - DBGLOG(MEM, WARN, ("rMgtBufInfo: alloc#=%ld, free#=%ld, null#=%ld\n", - prAdapter->rMgtBufInfo.u4AllocCount, - prAdapter->rMgtBufInfo.u4FreeCount, - prAdapter->rMgtBufInfo.u4AllocNullCount)); -#endif - - DBGLOG(MEM, WARN, ("\n")); - } -#endif - - return prMsduInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMgtPktFree ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - ASSERT(prMsduInfo->prPacket); - if (prMsduInfo->prPacket) { - cnmMemFree(prAdapter, prMsduInfo->prPacket); - prMsduInfo->prPacket = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry) - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to initial the MGMT/MSG memory pool. -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BUF_INFO_T prBufInfo; - - /* Initialize Management buffer pool */ - prBufInfo = &prAdapter->rMgtBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMgtBufInfo)); - prBufInfo->pucBuf = prAdapter->pucMgtBufCached; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - - /* Initialize Message buffer pool */ - prBufInfo = &prAdapter->rMsgBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMsgBufInfo)); - prBufInfo->pucBuf = &prAdapter->aucMsgBuf[0]; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - return; - -} /* end of cnmMemInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate MGMT/MSG memory pool. -* -* \param[in] eRamType Target RAM type. -* TCM blk_sz= 16bytes, BUF blk_sz= 256bytes -* \param[in] u4Length Length of the buffer to allocate. -* -* \retval !NULL Pointer to the start address of allocated memory. -* \retval NULL Fail to allocat memory -*/ -/*----------------------------------------------------------------------------*/ -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ) -{ - P_BUF_INFO_T prBufInfo; - BUF_BITMAP rRequiredBitmap; - UINT_32 u4BlockNum; - UINT_32 i, u4BlkSzInPower; - PVOID pvMemory; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(u4Length); - - if (eRamType == RAM_TYPE_MSG && u4Length <= 256) { - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlkSzInPower = MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MSG_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - else { - eRamType = RAM_TYPE_BUF; - - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlkSzInPower = MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MGT_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocCount++; -#endif - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - if ((u4BlockNum > 0) && (u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS)) { - - /* Convert number of block into bit cluster */ - rRequiredBitmap = BITS(0, u4BlockNum-1); - - for (i = 0; i <= (MAX_NUM_OF_BUF_BLOCKS - u4BlockNum); i++) { - - /* Have available memory blocks */ - if ((prBufInfo->rFreeBlocksBitmap & rRequiredBitmap) - == rRequiredBitmap) { - - /* Clear corresponding bits of allocated memory blocks */ - prBufInfo->rFreeBlocksBitmap &= ~rRequiredBitmap; - - /* Store how many blocks be allocated */ - prBufInfo->aucAllocatedBlockNum[i] = (UINT_8) u4BlockNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? - SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - /* Return the start address of allocated memory */ - return (PVOID)(prBufInfo->pucBuf + (i << u4BlkSzInPower)); - - } - - rRequiredBitmap <<= 1; - } - } - -#ifdef LINUX - pvMemory = (PVOID)kalMemAlloc(u4Length, VIR_MEM_TYPE); -#else - pvMemory = (PVOID)NULL; -#endif - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocNullCount++; - - if (pvMemory) { - prAdapter->u4MemAllocDynamicCount++; - } -#endif - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return pvMemory; - -} /* end of cnmMemAlloc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release memory to MGT/MSG memory pool. -* -* \param pucMemory Start address of previous allocated memory -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ) -{ - P_BUF_INFO_T prBufInfo; - UINT_32 u4BlockIndex; - BUF_BITMAP rAllocatedBlocksBitmap; - ENUM_RAM_TYPE_T eRamType; - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(pvMemory); - if (!pvMemory) { - return; - } - - /* Judge it belongs to which RAM type */ - if ( ((UINT_32)pvMemory >= (UINT_32)&prAdapter->aucMsgBuf[0]) && - ((UINT_32)pvMemory <= (UINT_32)&prAdapter->aucMsgBuf[MSG_BUFFER_SIZE-1])) { - - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_MSG; - } - else if ( ((UINT_32)pvMemory >= (UINT_32)prAdapter->pucMgtBufCached) && - ((UINT_32)pvMemory <= ((UINT_32)prAdapter->pucMgtBufCached + MGT_BUFFER_SIZE -1))) { - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_BUF; - } - else { - #ifdef LINUX - /* For Linux, it is supported because size is not needed */ - kalMemFree(pvMemory, VIR_MEM_TYPE, 0); - #else - /* For Windows, it is not supported because of no size argument */ - ASSERT(0); - #endif - - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount++; - #endif - return; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#if CFG_DBG_MGT_BUF - prBufInfo->u4FreeCount++; -#endif - - /* Convert number of block into bit cluster */ - ASSERT(prBufInfo->aucAllocatedBlockNum[u4BlockIndex] > 0); - - rAllocatedBlocksBitmap = - BITS(0, prBufInfo->aucAllocatedBlockNum[u4BlockIndex] - 1); - rAllocatedBlocksBitmap <<= u4BlockIndex; - - /* Clear saved block count for this memory segment */ - prBufInfo->aucAllocatedBlockNum[u4BlockIndex] = 0; - - /* Set corresponding bit of released memory block */ - prBufInfo->rFreeBlocksBitmap |= rAllocatedBlocksBitmap; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return; - -} /* end of cnmMemFree() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecInit ( - P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - prStaRec->ucIndex = (UINT_8) i; - prStaRec->fgIsInUse = FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmStaRecAlloc ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i, k; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (!prStaRec->fgIsInUse) { - /*---- Initialize STA_REC_T here ----*/ - kalMemZero(prStaRec, sizeof(STA_RECORD_T)); - prStaRec->ucIndex = (UINT_8) i; - prStaRec->ucNetTypeIndex = ucNetTypeIndex; - prStaRec->fgIsInUse = TRUE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - /* Initialize the SN caches for duplicate detection */ - for (k = 0; k < TID_NUM + 1; k++) { - prStaRec->au2CachedSeqCtrl[k] = 0xFFFF; - } - - /* Initialize SW TX queues in STA_REC */ - for (k = 0; k < STA_WAIT_QUEUE_NUM; k++) { - LINK_INITIALIZE(&prStaRec->arStaWaitQueue[k]); - } - - /* Default enable TX/RX AMPDU */ - prStaRec->fgTxAmpduEn = TRUE; - prStaRec->fgRxAmpduEn = TRUE; - - for (k = 0; k < NUM_OF_PER_STA_TX_QUEUES; k++) { - QUEUE_INITIALIZE(&prStaRec->arTxQueue[k]); - } - - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecFree ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgSyncToChip - ) -{ - ASSERT(prAdapter); - ASSERT(prStaRec); - - /* To do: free related resources, e.g. timers, buffers, etc */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - prStaRec->fgTransmitKeyExist = FALSE; - prStaRec->fgSetPwrMgtBit = FALSE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - - if (fgSyncToChip) { - cnmStaSendRemoveCmd(prAdapter, prStaRec); - } - - prStaRec->fgIsInUse = FALSE; - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = (P_STA_RECORD_T) &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == (UINT_8) eNetTypeIndex) { - - cnmStaRecFree(prAdapter, prStaRec, fgSyncToChip); - } - } /* end of for loop */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByIndex ( - P_ADAPTER_T prAdapter, - UINT_8 ucIndex - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prStaRec = (ucIndex < CFG_STA_REC_NUM) ? - &prAdapter->arStaRec[ucIndex] : NULL; - - if (prStaRec && prStaRec->fgIsInUse == FALSE) { - prStaRec = NULL; - } - - return prStaRec; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get STA_RECORD_T by Peer MAC Address(Usually TA). -* -* @param[in] pucPeerMacAddr Given Peer MAC Address. -* -* @retval Pointer to STA_RECORD_T, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByAddress ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - PUINT_8 pucPeerMacAddr - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(pucPeerMacAddr); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == ucNetTypeIndex && - EQUAL_MAC_ADDR(prStaRec->aucMacAddr, pucPeerMacAddr)) { - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Reset the Status and Reason Code Field to 0 of all Station Records for -* the specified Network Type -* -* @param[in] eNetType Specify Network Type -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecResetStatus ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - cnmStaFreeAllStaByNetType(prAdapter, eNetTypeIndex, FALSE); - -#if 0 - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - if ((NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) && - IS_STA_IN_AIS(prStaRec->eStaType)) { - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - } - - /* TODO(Kevin): For P2P and BOW */ - } - } - - return; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will change the ucStaState of STA_RECORD_T and also do -* event indication to HOST to sync the STA_RECORD_T in driver. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u4NewState New STATE to change. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecChangeState ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - UINT_8 ucNewState - ) -{ - BOOLEAN fgNeedResp; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* Do nothing when following state transitions happen, - * other 6 conditions should be sync to FW, including 1-->1, 3-->3 - */ - if ((ucNewState == STA_STATE_2 && prStaRec->ucStaState != STA_STATE_3) || - (ucNewState == STA_STATE_1 && prStaRec->ucStaState == STA_STATE_2)) { - prStaRec->ucStaState = ucNewState; - return; - } - - fgNeedResp = FALSE; - if (ucNewState == STA_STATE_3) { - secFsmEventStart(prAdapter, prStaRec); - if (ucNewState != prStaRec->ucStaState) { - fgNeedResp = TRUE; - } - } - else { - if (ucNewState != prStaRec->ucStaState && - prStaRec->ucStaState == STA_STATE_3) { - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - } - fgNeedResp = FALSE; - } - prStaRec->ucStaState = ucNewState; - - cnmStaSendUpdateCmd(prAdapter, prStaRec, fgNeedResp); - -#if CFG_ENABLE_WIFI_DIRECT - /* To do: Confirm if it is invoked here or other location, but it should - * be invoked after state sync of STA_REC - * Update system operation parameters for AP mode - */ - if (prAdapter->fgIsP2PRegistered && (IS_STA_IN_P2P(prStaRec))) { - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - } - } -#endif - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ) -{ - P_EVENT_ACTIVATE_STA_REC_T prEventContent; - P_STA_RECORD_T prStaRec; - - prEventContent = (P_EVENT_ACTIVATE_STA_REC_T) pucEventBuf; - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventContent->ucStaRecIdx); - - if (prStaRec && prStaRec->ucStaState == STA_STATE_3 && - !kalMemCmp(&prStaRec->aucMacAddr[0], &prEventContent->aucMacAddr[0], - MAC_ADDR_LEN)) { - - qmActivateStaRec(prAdapter, prStaRec); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ) -{ - P_CMD_UPDATE_STA_RECORD_T prCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* To do: come out a mechanism to limit one STA_REC sync once for AP mode - * to avoid buffer empty case when many STAs are associated - * simultaneously. - */ - - /* To do: how to avoid 2 times of allocated memory. Use Stack? - * One is here, the other is in wlanSendQueryCmd() - */ - prCmdContent = cnmMemAlloc(prAdapter, - RAM_TYPE_BUF, sizeof(CMD_UPDATE_STA_RECORD_T)); - ASSERT(prCmdContent); - - /* To do: exception handle */ - if (!prCmdContent) { - return; - } - - prCmdContent->ucIndex = prStaRec->ucIndex; - prCmdContent->ucStaType = (UINT_8) prStaRec->eStaType; - kalMemCopy(&prCmdContent->aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - prCmdContent->u2AssocId = prStaRec->u2AssocId; - prCmdContent->u2ListenInterval = prStaRec->u2ListenInterval; - prCmdContent->ucNetTypeIndex = prStaRec->ucNetTypeIndex; - - prCmdContent->ucDesiredPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - prCmdContent->u2DesiredNonHTRateSet = prStaRec->u2DesiredNonHTRateSet; - prCmdContent->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - prCmdContent->ucMcsSet = prStaRec->ucMcsSet; - prCmdContent->ucSupMcs32 = (UINT_8) prStaRec->fgSupMcs32; - prCmdContent->u2HtCapInfo = prStaRec->u2HtCapInfo; - prCmdContent->ucNeedResp = (UINT_8) fgNeedResp; - -#if !CFG_SLT_SUPPORT - if(prAdapter->rWifiVar.eRateSetting != FIXED_RATE_NONE) { - /* override rate configuration */ - nicUpdateRateParams(prAdapter, - prAdapter->rWifiVar.eRateSetting, - &(prCmdContent->ucDesiredPhyTypeSet), - &(prCmdContent->u2DesiredNonHTRateSet), - &(prCmdContent->u2BSSBasicRateSet), - &(prCmdContent->ucMcsSet), - &(prCmdContent->ucSupMcs32), - &(prCmdContent->u2HtCapInfo)); - } -#endif - - prCmdContent->ucIsQoS = prStaRec->fgIsQoS; - prCmdContent->ucIsUapsdSupported = prStaRec->fgIsUapsdSupported; - prCmdContent->ucStaState = prStaRec->ucStaState; - - prCmdContent->ucAmpduParam = prStaRec->ucAmpduParam; - prCmdContent->u2HtExtendedCap = prStaRec->u2HtExtendedCap; - prCmdContent->u4TxBeamformingCap = prStaRec->u4TxBeamformingCap; - prCmdContent->ucAselCap = prStaRec->ucAselCap; - prCmdContent->ucRCPI = prStaRec->ucRCPI; - - prCmdContent->ucUapsdAc = prStaRec->ucBmpTriggerAC | (prStaRec->ucBmpDeliveryAC << 4); - prCmdContent->ucUapsdSp = prStaRec->ucUapsdSp; - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_UPDATE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - fgNeedResp, /* fgNeedResp */ - FALSE, /* fgIsOid */ - fgNeedResp? cnmStaRecHandleEventPkt : NULL, - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_UPDATE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdContent); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - CMD_REMOVE_STA_RECORD_T rCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - rCmdContent.ucIndex = prStaRec->ucIndex; - kalMemCopy(&rCmdContent.aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_REMOVE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_REMOVE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) &rCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm_timer.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm_timer.c deleted file mode 100755 index 2e8a8d7fa1b8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/cnm_timer.c +++ /dev/null @@ -1,531 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/cnm_timer.c#1 $ -*/ - -/*! \file "cnm_timer.c" - \brief - -*/ - - - -/* -** $Log: cnm_timer.c $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support sleep notification to host - * - * 05 19 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some checking assertions - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 11 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Place rRootTimer.rNextExpiredSysTime = rExpiredSysTime; before set timer - * - * Oct 30 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * In cnmTimerInitialize(), just stop timer if it was already created. - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Move the external reference for Lint to precomp.h - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] rTimeout Time out interval from current time. -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -cnmTimerSetTimer ( - IN P_ADAPTER_T prAdapter, - IN OS_SYSTIME rTimeout - ) -{ - P_ROOT_TIMER prRootTimer; - BOOLEAN fgNeedWakeLock; - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - kalSetTimer(prAdapter->prGlueInfo, rTimeout); - - if (rTimeout <= SEC_TO_SYSTIME(WAKE_LOCK_MAX_TIME)) { - fgNeedWakeLock = TRUE; - - if (!prRootTimer->fgWakeLocked) { - KAL_WAKE_LOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = TRUE; - } - } - else { - fgNeedWakeLock = FALSE; - } - - return fgNeedWakeLock; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a root timer. -* -* \param[in] prAdapter -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - /* Note: glue layer have configured timer */ - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - KAL_WAKE_LOCK_INIT(prAdapter, &prRootTimer->rWakeLock, "WLAN Timer"); - prRootTimer->fgWakeLocked = FALSE; - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to destroy a root timer. -* When WIFI is off, the token shall be returned back to system. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - if (prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - KAL_WAKE_LOCK_DESTROY(prAdapter, &prRootTimer->rWakeLock); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - /* Note: glue layer will be responsible for timer destruction */ - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] pfnFunc Pointer to the call back function. -* \param[in] u4Data Parameter for call back function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ) -{ - ASSERT(prAdapter); - - ASSERT(prTimer); - -#if DBG - /* Note: NULL function pointer is permitted for HEM POWER */ - if (pfFunc == NULL) { - DBGLOG(CNM, WARN, ("Init timer with NULL callback function!\n")); - } -#endif - -#if DBG - ASSERT(prAdapter->rRootTimer.rLinkHead.prNext); - { - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prPendingTimer; - - prTimerList = &(prAdapter->rRootTimer.rLinkHead); - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prPendingTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prPendingTimer); - ASSERT(prPendingTimer != prTimer); - } - } -#endif - - LINK_ENTRY_INITIALIZE(&prTimer->rLinkEntry); - - prTimer->pfMgmtTimeOutFunc = pfFunc; - prTimer->u4Data = u4Data; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmTimerStopTimer_impl ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN BOOLEAN fgAcquireSpinlock - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - prRootTimer = &prAdapter->rRootTimer; - - if (fgAcquireSpinlock) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - if (timerPendingTimer(prTimer)) { - LINK_REMOVE_KNOWN_ENTRY(&prRootTimer->rLinkHead, - &prTimer->rLinkEntry); - - /* Reduce dummy timeout for power saving, especially HIF activity. - * If two or more timers exist and being removed timer is smallest, - * this dummy timeout will still happen, but it is OK. - */ - if (LINK_IS_EMPTY(&prRootTimer->rLinkHead)) { - kalCancelTimer(prAdapter->prGlueInfo); - - if (fgAcquireSpinlock && prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - } - } - - if (fgAcquireSpinlock) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ) -{ - ASSERT(prAdapter); - ASSERT(prTimer); - - cnmTimerStopTimer_impl(prAdapter, prTimer, TRUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to start a timer with wake_lock. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] u4TimeoutMs Timeout to issue the timer and call back function -* (unit: ms). -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - OS_SYSTIME rExpiredSysTime, rTimeoutSystime; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - /* If timeout interval is larger than 1 minute, the mod value is set - * to the timeout value first, then per minutue. - */ - if (u4TimeoutMs > MSEC_PER_MIN) { - ASSERT(u4TimeoutMs <= ((UINT_32)0xFFFF * MSEC_PER_MIN)); - - prTimer->u2Minutes = (UINT_16)(u4TimeoutMs / MSEC_PER_MIN); - u4TimeoutMs -= (prTimer->u2Minutes * MSEC_PER_MIN); - if (u4TimeoutMs == 0) { - u4TimeoutMs = MSEC_PER_MIN; - prTimer->u2Minutes--; - } - } - else { - prTimer->u2Minutes = 0; - } - - /* The assertion check if MSEC_TO_SYSTIME() may be overflow. */ - ASSERT(u4TimeoutMs < (((UINT_32)0x80000000 - MSEC_PER_SEC) / KAL_HZ)); - rTimeoutSystime = MSEC_TO_SYSTIME(u4TimeoutMs); - rExpiredSysTime = kalGetTimeTick() + rTimeoutSystime; - - /* If no timer pending or the fast time interval is used. */ - if (LINK_IS_EMPTY(prTimerList) || - TIME_BEFORE(rExpiredSysTime, prRootTimer->rNextExpiredSysTime)) { - - prRootTimer->rNextExpiredSysTime = rExpiredSysTime; - cnmTimerSetTimer(prAdapter, rTimeoutSystime); - } - - /* Add this timer to checking list */ - prTimer->rExpiredSysTime = rExpiredSysTime; - - if (!timerPendingTimer(prTimer)) { - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to check the timer list. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prTimer; - OS_SYSTIME rCurSysTime; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; - UINT_32 u4TimeoutData; - BOOLEAN fgNeedWakeLock; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - /* acquire spin lock */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - rCurSysTime = kalGetTimeTick(); - - /* Set the permitted max timeout value for new one */ - prRootTimer->rNextExpiredSysTime = rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prTimer); - - /* Check if this entry is timeout. */ - if (!TIME_BEFORE(rCurSysTime, prTimer->rExpiredSysTime)) { - cnmTimerStopTimer_impl(prAdapter, prTimer, FALSE); - - pfMgmtTimeOutFunc = prTimer->pfMgmtTimeOutFunc; - u4TimeoutData = prTimer->u4Data; - - if (prTimer->u2Minutes > 0) { - prTimer->u2Minutes--; - prTimer->rExpiredSysTime = - rCurSysTime + MSEC_TO_SYSTIME(MSEC_PER_MIN); - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - else if (pfMgmtTimeOutFunc) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - (pfMgmtTimeOutFunc)(prAdapter, u4TimeoutData); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - /* Search entire list again because of nest del and add timers - * and current MGMT_TIMER could be volatile after stopped - */ - prLinkEntry = (P_LINK_ENTRY_T)prTimerList; - - prRootTimer->rNextExpiredSysTime = - rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - } - else if (TIME_BEFORE(prTimer->rExpiredSysTime, - prRootTimer->rNextExpiredSysTime)) { - prRootTimer->rNextExpiredSysTime = prTimer->rExpiredSysTime; - } - } /* end of for loop */ - - /* Setup the prNext timeout event. It is possible the timer was already - * set in the above timeout callback function. - */ - fgNeedWakeLock = FALSE; - if (!LINK_IS_EMPTY(prTimerList)) { - ASSERT(TIME_AFTER(prRootTimer->rNextExpiredSysTime, rCurSysTime)); - - fgNeedWakeLock = cnmTimerSetTimer(prAdapter, (OS_SYSTIME) - ((INT_32)prRootTimer->rNextExpiredSysTime - (INT_32)rCurSysTime)); - } - - if (prRootTimer->fgWakeLocked && !fgNeedWakeLock) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - - /* release spin lock */ - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/hem_mbox.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/hem_mbox.c deleted file mode 100755 index b6c627f16215..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/hem_mbox.c +++ /dev/null @@ -1,827 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/hem_mbox.c#3 $ -*/ - -/*! \file "hem_mbox.c" - \brief - -*/ - - - -/* -** $Log: hem_mbox.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 03 2012 cp.wu - * [WCXRP00001231] [MT6620 Wi-Fi][MT5931][Driver] Correct SCAN_V2 related debugging facilities within hem_mbox.c - * correct for debug message string table by adding missed scan_v2 related definitions. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 17 2012 yuche.tsai - * NULL - * Update mgmt frame filter setting. - * Please also update FW 2.1 - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 15 2011 cm.chang - * NULL - * Add exception handle for NULL function pointer of mailbox message - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 yarco.yang - * NULL - * Fixed Driver ASSERT at mboxInitMsgMap() - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Add debug message for newly add P2P message. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function entry for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some events to P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Add message box event for P2P device switch on & device discovery. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 yuche.tsai - * - * Add wifi direct scan done callback. - * - * 07 09 2010 cp.wu - * - * change handler of MID_MNY_CNM_CONNECTION_ABORT from NULL to mboxDummy. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable currently migrated message call-backs. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Updated arMsgMapTable for MID_RXM_MQM_QOS_ACTION_FRAME - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 9 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add hemRunEventScanDone() to arMsgMapTable[] - * - * Dec 4 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix mboxDummy() didn't free prMsgHdr - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add saaAisJoinComplete event handler - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the handler function name in arMsgMapTable for MID_RXM_MQM_BA_ACTION_FRAME - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME to MsgMapTable - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MSG Handler (remove dummy and add for SAA) - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventAbort() event handler - * - * Nov 11 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 10 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add more MSG_HNDL_ENTRY_T to avoid ASSERT() in mboxInitMsgMap() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN message and function entry to arMsgMapTable[] - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix sorting algorithm in mboxInitMsgMap() - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugMsg[] = { - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_ABORT"), - (PUINT_8)DISP_STRING("MID_CNM_AIS_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_P2P_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_BOW_CH_GRANT"), - - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_P2P_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_BOW_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_RLM_SCAN_DONE"), - - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_JOIN_REQ"), - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_AIS_JOIN_COMPLETE"), - -#if CFG_ENABLE_BT_OVER_WIFI - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_BOW_JOIN_COMPLETE"), -#endif - -#if CFG_ENABLE_WIFI_DIRECT - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_P2P_JOIN_COMPLETE"), - - (PUINT_8)DISP_STRING("MID_MNY_P2P_FUN_SWITCH"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_DEVICE_DISCOVERY"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_BEACON_UPDATE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_STOP_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_TX"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_GROUP_DISSOLVE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_FRAME_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_NET_DEV_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_START_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_UPDATE_IE_BUF"), - #endif - -#if CFG_SUPPORT_ADHOC - //(PUINT_8)DISP_STRING("MID_AIS_CNM_CREATE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_CREATE_IBSS_GRANT"), - //(PUINT_8)DISP_STRING("MID_AIS_CNM_MERGE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_MERGE_IBSS_GRANT"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_FOUND_IBSS"), -#endif /* CFG_SUPPORT_ADHOC */ - - (PUINT_8)DISP_STRING("MID_SAA_AIS_FSM_ABORT") -}; -/*lint -restore */ -#endif /* DBG */ - -/* This message entry will be re-ordered based on the message ID order - * by invoking mboxInitMsgMap() - */ -static MSG_HNDL_ENTRY_T arMsgMapTable[] = { - { MID_MNY_CNM_CH_REQ, cnmChMngrRequestPrivilege }, - { MID_MNY_CNM_CH_ABORT, cnmChMngrAbortPrivilege }, - { MID_CNM_AIS_CH_GRANT, aisFsmRunEventChGrant }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_CNM_P2P_CH_GRANT, p2pFsmRunEventChGrant }, /*set in gl_p2p_init.c*/ -#else - { MID_CNM_P2P_CH_GRANT, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_CNM_BOW_CH_GRANT, bowRunEventChGrant }, -#else - { MID_CNM_BOW_CH_GRANT, mboxDummy }, -#endif - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_AIS_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_P2P_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_BOW_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_RLM_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_SCN_AIS_SCAN_DONE, aisFsmRunEventScanDone }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_SCN_P2P_SCAN_DONE, p2pFsmRunEventScanDone }, /*set in gl_p2p_init.c*/ -#else - { MID_SCN_P2P_SCAN_DONE, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_SCN_BOW_SCAN_DONE, bowResponderScanDone }, -#else - { MID_SCN_BOW_SCAN_DONE, mboxDummy }, -#endif - { MID_SCN_RLM_SCAN_DONE, rlmObssScanDone }, - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_OID_AIS_FSM_JOIN_REQ, aisFsmRunEventAbort }, - { MID_OID_AIS_FSM_ABORT, aisFsmRunEventAbort }, - { MID_AIS_SAA_FSM_START, saaFsmRunEventStart }, - { MID_AIS_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_AIS_JOIN_COMPLETE, aisFsmRunEventJoinComplete }, - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_BOW_SAA_FSM_START, saaFsmRunEventStart }, - { MID_BOW_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_BOW_JOIN_COMPLETE, bowFsmRunEventJoinComplete }, -#endif - -#if CFG_ENABLE_WIFI_DIRECT /*set in gl_p2p_init.c*/ - { MID_P2P_SAA_FSM_START, saaFsmRunEventStart }, - { MID_P2P_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_P2P_JOIN_COMPLETE, p2pFsmRunEventJoinComplete },// TODO: p2pFsmRunEventJoinComplete - - { MID_MNY_P2P_FUN_SWITCH, p2pFsmRunEventSwitchOPMode }, - { MID_MNY_P2P_DEVICE_DISCOVERY, p2pFsmRunEventScanRequest }, - { MID_MNY_P2P_CONNECTION_REQ, p2pFsmRunEventConnectionRequest }, - { MID_MNY_P2P_CONNECTION_ABORT, p2pFsmRunEventConnectionAbort }, - { MID_MNY_P2P_BEACON_UPDATE, p2pFsmRunEventBeaconUpdate }, - { MID_MNY_P2P_STOP_AP, p2pFsmRunEventStopAP }, - { MID_MNY_P2P_CHNL_REQ, p2pFsmRunEventChannelRequest }, - { MID_MNY_P2P_CHNL_ABORT, p2pFsmRunEventChannelAbort }, - { MID_MNY_P2P_MGMT_TX, p2pFsmRunEventMgmtFrameTx }, - { MID_MNY_P2P_GROUP_DISSOLVE, p2pFsmRunEventDissolve }, - { MID_MNY_P2P_MGMT_FRAME_REGISTER, p2pFsmRunEventMgmtFrameRegister }, - { MID_MNY_P2P_NET_DEV_REGISTER, p2pFsmRunEventNetDeviceRegister }, - { MID_MNY_P2P_START_AP, p2pFsmRunEventStartAP }, - { MID_MNY_P2P_MGMT_FRAME_UPDATE, p2pFsmRunEventUpdateMgmtFrame }, -#endif - -#if CFG_SUPPORT_ADHOC - { MID_SCN_AIS_FOUND_IBSS, aisFsmRunEventFoundIBSSPeer }, -#endif /* CFG_SUPPORT_ADHOC */ - - { MID_SAA_AIS_FSM_ABORT, aisFsmRunEventAbort } -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if DBG -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d: %s]\n", prMsg->eMsgId, apucDebugMsg[prMsg->eMsgId])); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#else -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d]\n", prMsg->eMsgId)); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#endif -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitMsgMap ( - VOID - ) -{ - UINT_32 i, idx; - MSG_HNDL_ENTRY_T rTempEntry; - - ASSERT((sizeof(arMsgMapTable) / sizeof(MSG_HNDL_ENTRY_T)) == MID_TOTAL_NUM); - - for (i = 0; i < MID_TOTAL_NUM; i++) { - if (arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i) { - continue; - } - for (idx = i + 1; idx < MID_TOTAL_NUM; idx++) { - if (arMsgMapTable[idx].eMsgId == (ENUM_MSG_ID_T) i) { - break; - } - } - ASSERT(idx < MID_TOTAL_NUM); - if (idx >= MID_TOTAL_NUM) { - continue; - } - - /* Swap target entry and current entry */ - rTempEntry.eMsgId = arMsgMapTable[idx].eMsgId; - rTempEntry.pfMsgHndl= arMsgMapTable[idx].pfMsgHndl; - - arMsgMapTable[idx].eMsgId = arMsgMapTable[i].eMsgId; - arMsgMapTable[idx].pfMsgHndl = arMsgMapTable[i].pfMsgHndl; - - arMsgMapTable[i].eMsgId = rTempEntry.eMsgId; - arMsgMapTable[i].pfMsgHndl = rTempEntry.pfMsgHndl; - } - - /* Verify the correctness of final message map */ - for (i = 0; i < MID_TOTAL_NUM; i++) { - ASSERT(arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i); - while (arMsgMapTable[i].eMsgId != (ENUM_MSG_ID_T) i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INITIALIZE(&prMbox->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prMsg); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - switch (eMethod) { - case MSG_SEND_METHOD_BUF: - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INSERT_TAIL(&prMbox->rLinkHead, &prMsg->rLinkEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - // to wake up main service thread - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - break; - - case MSG_SEND_METHOD_UNBUF: - MBOX_HNDL_MSG(prAdapter, prMsg); - break; - - default: - ASSERT(0); - break; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - MBOX_HNDL_MSG(prAdapter, prMsg); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* Initialize Mailbox */ - mboxInitMsgMap(); - - /* Setup/initialize each mailbox */ - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - mboxSetup(prAdapter, i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - UINT_8 i; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - prMbox = &(prAdapter->arMbox[i]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - cnmMemFree(prAdapter, prMsg); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is dummy function to prevent empty arMsgMapTable[] for compiling. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - ASSERT(prAdapter); - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/mib.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/mib.c deleted file mode 100755 index 270bdf97a71e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/mib.c +++ /dev/null @@ -1,102 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/mib.c#1 $ -*/ - -/*! \file "mib.c" - \brief This file includes the mib default vale and functions. -*/ - - - -/* -** $Log: mib.c $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add mib.c. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[] = { - {RATE_SET_HR_DSSS, TRUE, FALSE }, /* For PHY_TYPE_HR_DSSS_INDEX(0) */ - {RATE_SET_ERP, TRUE, TRUE }, /* For PHY_TYPE_ERP_INDEX(1) */ - {RATE_SET_ERP_P2P, TRUE, TRUE }, /* For PHY_TYPE_ERP_P2P_INDEX(2) */ - {RATE_SET_OFDM, FALSE, FALSE }, /* For PHY_TYPE_OFDM_INDEX(3) */ -}; - -NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[AD_HOC_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AD_HOC_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AD_HOC_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AD_HOC_MODE_11G(2) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AD_HOC_MODE_11A(3) */ -}; - -NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[AP_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AP_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AP_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AP_MODE_11G(2) */ - {PHY_TYPE_ERP_P2P_INDEX, BASIC_RATE_SET_ERP_P2P}, /* For AP_MODE_11G_P2P(3) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AP_MODE_11A(4) */ -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_assoc.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_assoc.c deleted file mode 100755 index d03d8338a261..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_assoc.c +++ /dev/null @@ -1,99 +0,0 @@ -/* -** $Id: @(#) p2p_assoc.c@@ -*/ - -/*! \file "p2p_assoc.c" - \brief This file includes the Wi-Fi Direct association-related functions. - - This file includes the association-related functions. -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for P2P Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - return pucBuffer; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_bss.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_bss.c deleted file mode 100755 index d9aa1a130034..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_bss.c +++ /dev/null @@ -1,66 +0,0 @@ -/* -** $Id: @(#) p2p_bss.c@@ -*/ - -/*! \file "p2p_bss.c" - \brief This file contains the functions for creating p2p BSS(AP). - - This file contains the functions for BSS(AP). We may create a BSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_fsm.c deleted file mode 100755 index 6a72f32a5c0f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_fsm.c +++ /dev/null @@ -1,3379 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/mgmt/p2p_fsm.c#61 $ -*/ - -/*! \file "p2p_fsm.c" - \brief This file defines the FSM for P2P Module. - - This file defines the FSM for P2P Module. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: p2p_fsm.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 08 21 2012 yuche.tsai -** NULL -** fix disconnect indication. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** Fix p2p bug find on ALPS.JB trunk. -** -** 07 27 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update for driver unload KE issue. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Fix the compile flag of enhancement. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000808] [Volunteer Patch][MT6620][Driver/FW] Device discoverability issue fix - * Change device discoverability methodology. From driver SCAN to FW lock channel. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000833] [Volunteer Patch][WiFi Direct][Driver] Service Discovery Frame RX Indicate Issue - * Fix Service Discovery Race Condition Issue. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix an issue of accepting connection of GO. - * - * 06 21 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability - * Drop GAS frame when SD is not enabled. - * - * 06 20 2011 yuche.tsai - * NULL - * Fix compile error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 20 2011 yuche.tsai - * [WCXRP00000795] [Volunteer Patch][MT6620][Driver] GO can not connect second device issue - * Solve P2P GO can not formation with second device issue. - * - * 06 14 2011 yuche.tsai - * NULL - * Change disconnect feature. - * - * 06 10 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability[WCXRP00000776] [Need Patch][MT6620][Driver] MT6620 response probe request of P2P device with P2P IE under Hot Spot mode. - * 1. Dynamic enable SD capability after P2P supplicant ready. - * 2. Avoid response probe respone with p2p IE when under hot spot mode. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 26 2011 yuche.tsai - * [WCXRP00000745] Support accepting connection after one Group Connection Lost. - -After Group Formation & lost connection, if MT6620 behave as: - -1. GO: It would keep under GO state until been dissolved by supplicant. - - At this time, other P2P device can use join method to join this group. - - -2. GC: It would keep on searching target GO or target device until been dissolved by supplicant. - -At this time, it would ignore other P2P device formation request. - - --- - -Modification: Make driver to accept GO NEGO REQ at this time, to let user decide to accept new connection or not. - - * [Volunteer Patch][MT6620][Driver] - * Driver would indicate connection request, if password ID is not ready but connection request is issued. - * - * 05 18 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * A solution for both connection request & IO control. - * - * 05 16 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * Fix SD request can not send out issue. - * - * 05 09 2011 terry.wu - * [WCXRP00000711] [MT6620 Wi-Fi][Driver] Set Initial value of StaType in StaRec for Hotspot Client - * Set initial value of StaType in StaRec for hotspot client. - * - * 05 04 2011 yuche.tsai - * [WCXRP00000697] [Volunteer Patch][MT6620][Driver] - * Bug fix for p2p descriptor is NULL if BSS descriptor is found first. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 20 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Fix side effect while starting ATGO. - * - * 04 20 2011 yuche.tsai - * NULL - * Fix ASSERT issue in FW, side effect of last change. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Workaround for multiple device connection, before invitation ready. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000665] [Wifi Direct][MT6620 E4] When use Ralink's dongle to establish wifi direct connection with PBC. But 6573 always not pop accept option to establish connection. - * Support connection indication when GO NEGO REQ doesn't have configure method, instead it has PasswordID. - * - * 04 18 2011 yuche.tsai - * NULL - * Fix error. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix a connection issue. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix the channel issue of AP mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix Device discoverability related issue. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix bug for Device Discoverability. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix compile error. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 28 2011 yuche.tsai - * NULL - * Fix a possible issue for retry join when media status connected. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 24 2011 yuche.tsai - * NULL - * Assign AID before change STA_REC state to state 3. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix Response Rate Issue when TX Auth Rsp Frame under P2P Mode. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix issue of connection to one GC. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix ASSERT issue when starting Hot-spot. - * - * 03 22 2011 yuche.tsai - * NULL - * When Target Information is not available, change to passive mode. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix one connection issue while using Keypad to connect a GO. - * - * 03 22 2011 yuche.tsai - * NULL - * 1. Fix two issues that may cause kernel panic. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix GC connect to other device issue. - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 21 2011 yuche.tsai - * NULL - * Solve Listen State doesn't response probe response issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Indicate the correct Group SSID when join on Group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Support the third P2P device to join GO/GC group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000578] [Volunteer Patch][MT6620][Driver] Separate Connection Request from general IOCTL - * Separate connection request from general IOCTL. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 17 2011 yuche.tsai - * NULL - * When AIS is connect to an AP, Hot Spot would be enabled under fixed same channel. - * - * 03 17 2011 yuche.tsai - * NULL - * Solve the Group Info IE in Probe Response incorrect issue. - * - * 03 17 2011 yuche.tsai - * NULL - * Release Channel after Join Complete. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix local configure method issue. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 14 2011 yuche.tsai - * NULL - * . - * - * 03 14 2011 yuche.tsai - * NULL - * Fix password ID issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 04 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the p2p action frame type check for device request indication. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Service Discovery RX packet buffer pointer. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 21 2011 yuche.tsai - * [WCXRP00000481] [Volunteer Patch][MT6620][FW] Scan hang under concurrent case. - * Fix all BE issue of WSC or P2P IE. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the wsc config method mapping to driver used config method issue. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000479] [Volunteer Patch][MT6620][Driver] Probe Response of P2P using 11b rate. - * Update basic rate to FW, after P2P is initialed. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Use P2P Wildcard SSID when scan type of P2P_WILDCARD_SSID is set. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 16 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * If two station connected to the Hot-Spot and one disconnect, FW would get into an infinite loop - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix re-connection issue after RX deauthentication. - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix conneciton issue after disconnect with AP. - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * P2P Create Station Type according to Target BSS capability. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Disconnect every station client when disolve on P2P group. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Workaround of disable P2P network. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * 1. Fixed SSID wrong length issue. - * 2. Under Hot Spot configuration, there won't be any P2P IE. - * 3. Under Hot Spot configuration, P2P FSM won't get into LISTEN state first. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Modify Start GO flow. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix desire phy type set issue. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Add desire phy type set phase I. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix P2P Disconnect Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type Definition. - * - * 01 19 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Add P2P QoS Support. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 01 13 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Resolve Channel ZERO issue. (Uninitialized default channel) - * - * 01 13 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update P2P State Debug Message. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Fix bug when allocating message buffer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Bug of reference to NULL pointer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix bug of wrong pointer check. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Compile Error. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Add station record into client list before change it state from STATE_2 to STATE_3. - * - * 01 05 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Specify SSID Type when issue a scan request. - * - * 01 05 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * correct typo - * - * 01 05 2011 george.huang - * [WCXRP00000343] [MT6620 Wi-Fi] Add TSF reset path for concurrent operation - * modify NOA update path for preventing assertion false alarm. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 01 03 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * let the p2p ap mode acept a legacy device join. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * The order of invoking nicUpdateBss() and rlm functions - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 30 2010 yuche.tsai - * NULL - * Update RCIP value when RX assoc request frame. - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 05 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * fixed the p2p role code error. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * fixed the ASSERT check error - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 19 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine[WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * fixed the compiling error. - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * adding a code to support Direct GO with a compiling flag . - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * fixed the compiling error. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 yuche.tsai - * NULL - * Reset Common IE Buffer of P2P INFO when scan request is issued. - * If an action frame other than public action frame is received, return direcly. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 yuche.tsai - * NULL - * 1. Fix Interface Address from GO Nego Req/Rsp is not correct. - * 2. Fix GO mode does not change media state after station connected. - * 3. Fix STA don't response probe request when there is a connection request. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 20 2010 yuche.tsai - * NULL - * Add Glue Layer indication. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix compile warning under Linux. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Add random Interface Address Generation support. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Update P2P FSM code for GO Nego. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Join complete indication. - * - * 08 11 2010 yuche.tsai - * NULL - * Add two boolean in connection request. - * Based on these two boolean value, P2P FSM should - * decide to do invitation or group formation or start a GO directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Update P2P FSM, currently P2P Device Discovery is verified. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P FSM for group formation. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 03 2010 cp.wu - * NULL - * limit build always needs spin-lock declaration. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add P2P FSM code check in. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM. - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add code to test P2P GO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to BAND_24G define was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugP2pState[P2P_STATE_NUM] = { - (PUINT_8)DISP_STRING("P2P_STATE_IDLE"), - (PUINT_8)DISP_STRING("P2P_STATE_SCAN"), - (PUINT_8)DISP_STRING("P2P_STATE_AP_CHANNEL_DETECT"), - (PUINT_8)DISP_STRING("P2P_STATE_REQING_CHANNEL"), - (PUINT_8)DISP_STRING("P2P_STATE_CHNL_ON_HAND"), - (PUINT_8)DISP_STRING("P2P_STATE_GC_JOIN") -}; -/*lint -restore */ -#endif /* DBG */ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* p2pStateXXX : Processing P2P FSM related action. - * p2pFSMXXX : Control P2P FSM flow. - * p2pFuncXXX : Function for doing one thing. - */ -VOID -p2pFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ASSERT_BREAK(prP2pFsmInfo != NULL); - - LINK_INITIALIZE(&(prP2pFsmInfo->rMsgEventQueue)); - - prP2pFsmInfo->eCurrentState = prP2pFsmInfo->ePreviousState = P2P_STATE_IDLE; - prP2pFsmInfo->prTargetBss = NULL; - - cnmTimerInitTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (PFN_MGMT_TIMEOUT_FUNC)p2pFsmRunEventFsmTimeout, - (UINT_32)prP2pFsmInfo); - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - //4 <2.1> Initiate BSS_INFO_T - Setup HW ID - prP2pBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; - prP2pBssInfo->ucHwDefaultFixedRateCode = RATE_OFDM_6M; - - - prP2pBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prP2pBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prP2pBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prP2pBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prP2pBssInfo->u2OperationalRateSet, - prP2pBssInfo->u2BSSBasicRateSet, - prP2pBssInfo->aucAllSupportedRates, - &prP2pBssInfo->ucAllSupportedRatesLen); - - prP2pBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prP2pBssInfo->prBeacon) { - prP2pBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prP2pBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - prP2pBssInfo->prBeacon->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else { - /* Out of memory. */ - ASSERT(FALSE); - } - - prP2pBssInfo->eCurrentOPMode = OP_MODE_NUM; - - prP2pBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; - prP2pBssInfo->ucPrimaryChannel = P2P_DEFAULT_LISTEN_CHANNEL; - prP2pBssInfo->eBand = BAND_2G4; - prP2pBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (prAdapter->rWifiVar.fgSupportQoS) { - prP2pBssInfo->fgIsQBSS = TRUE; - } - else { - prP2pBssInfo->fgIsQBSS = FALSE; - } - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - return; -} /* p2pFsmInit */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to uninitialize the value in P2P_FSM_INFO_T for -* P2P FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DEBUGFUNC("p2pFsmUninit()"); - DBGLOG(P2P, INFO, ("->p2pFsmUninit()\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - p2pFuncSwitchOPMode(prAdapter, prP2pBssInfo, OP_MODE_P2P_DEVICE, TRUE); - - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - p2pStateAbort_IDLE(prAdapter, prP2pFsmInfo, P2P_STATE_NUM); - - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - wlanAcquirePowerControl(prAdapter); - - /* Release all pending CMD queue. */ - DBGLOG(P2P, TRACE, ("p2pFsmUninit: wlanProcessCommandQueue, num of element:%d\n", prAdapter->prGlueInfo->rCmdQueue.u4NumElem)); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - - wlanReleasePowerControl(prAdapter); - - /* Release pending mgmt frame, - * mgmt frame may be pending by CMD without resource. - */ - kalClearMgmtFramesByNetType(prAdapter->prGlueInfo, NETWORK_TYPE_P2P_INDEX); - - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - if (prP2pBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prP2pBssInfo->prBeacon); - prP2pBssInfo->prBeacon = NULL; - } - - } while (FALSE); - - return; - -} /* end of p2pFsmUninit() */ - -VOID -p2pFsmStateTransition ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - BOOLEAN fgIsTransOut = (BOOLEAN)FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (!IS_BSS_ACTIVE(prP2pBssInfo)) { - if (!cnmP2PIsPermitted(prAdapter)) { - return; - } - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - fgIsTransOut = fgIsTransOut?FALSE:TRUE; - - if (!fgIsTransOut) { - DBGLOG(P2P, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugP2pState[prP2pFsmInfo->eCurrentState], - apucDebugP2pState[eNextState])); - - /* Transition into current state. */ - prP2pFsmInfo->ePreviousState = prP2pFsmInfo->eCurrentState; - prP2pFsmInfo->eCurrentState = eNextState; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - if (fgIsTransOut) { - - p2pStateAbort_IDLE(prAdapter, - prP2pFsmInfo, - eNextState); - } - else { - fgIsTransOut = p2pStateInit_IDLE(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &eNextState); - } - - break; - case P2P_STATE_SCAN: - if (fgIsTransOut) { - - // Scan done / scan canceled. - p2pStateAbort_SCAN(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial scan request. - p2pStateInit_SCAN(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_AP_CHANNEL_DETECT: - if (fgIsTransOut) { - // Scan done - // Get sparse channel result. - p2pStateAbort_AP_CHANNEL_DETECT(prAdapter, - prP2pFsmInfo, - prP2pSpecificBssInfo, - eNextState); - } - - else { - // Initial passive scan request. - p2pStateInit_AP_CHANNEL_DETECT(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_REQING_CHANNEL: - if (fgIsTransOut) { - - // Channel on hand / Channel canceled. - p2pStateAbort_REQING_CHANNEL(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial channel request. - p2pFuncAcquireCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - break; - case P2P_STATE_CHNL_ON_HAND: - if (fgIsTransOut) { - p2pStateAbort_CHNL_ON_HAND(prAdapter, prP2pFsmInfo, prP2pBssInfo, eNextState); - } - else { - // Initial channel ready. - // Send channel ready event. - // Start a FSM timer. - p2pStateInit_CHNL_ON_HAND(prAdapter, prP2pBssInfo, prP2pFsmInfo); - } - - break; - case P2P_STATE_GC_JOIN: - if (fgIsTransOut) { - - // Join complete / join canceled. - p2pStateAbort_GC_JOIN(prAdapter, - prP2pFsmInfo, - &(prP2pFsmInfo->rJoinInfo), - eNextState); - } - else { - ASSERT(prP2pFsmInfo->prTargetBss != NULL); - - // Send request to SAA module. - p2pStateInit_GC_JOIN(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &(prP2pFsmInfo->rJoinInfo), - prP2pFsmInfo->prTargetBss); - } - - break; - default: - break; - } - - } while (fgIsTransOut); - -} /* p2pFsmStateTransition */ - - -VOID -p2pFsmRunEventSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchOpMode = (P_MSG_P2P_SWITCH_OP_MODE_T)prMsgHdr; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwitchOpMode != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventSwitchOPMode\n")); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prSwitchOpMode->eOpMode >= OP_MODE_NUM) { - ASSERT(FALSE); - break; - } - - /* P2P Device / GC. */ - p2pFuncSwitchOPMode(prAdapter, - prP2pBssInfo, - prSwitchOpMode->eOpMode, - TRUE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventSwitchOPMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle scan done event during Device Discovery. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - P_MSG_SCN_SCAN_DONE prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - - /* This scan done event is either for "SCAN" phase or "SEARCH" state or "LISTEN" state. - * The scan done for SCAN phase & SEARCH state doesn't imply Device - * Discovery over. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Done Event\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - - if (prScanDoneMsg->ucSeqNum != prScanReqInfo->ucSeqNumOfScnMsg) { - /* Scan Done message sequence number mismatch. - * Ignore this event. (P2P FSM issue two scan events.) - */ - /* The scan request has been cancelled. - * Ignore this message. It is possible. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Don SeqNum:%d <-> P2P Fsm SCAN Msg:%d\n", - prScanDoneMsg->ucSeqNum, - prScanReqInfo->ucSeqNumOfScnMsg)); - - break; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_SCAN: - { - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - prScanReqInfo->fgIsAbort = FALSE; - - if (prConnReqInfo->fgIsConnRequest) { - - if ((prP2pFsmInfo->prTargetBss = p2pFuncKeepOnConnection(prAdapter, - &prP2pFsmInfo->rConnReqInfo, - &prP2pFsmInfo->rChnlReqInfo, - &prP2pFsmInfo->rScanReqInfo)) == NULL) { - eNextState = P2P_STATE_SCAN; - } - else { - eNextState = P2P_STATE_REQING_CHANNEL; - } - - } - else { - eNextState = P2P_STATE_IDLE; - } - - } - break; - case P2P_STATE_AP_CHANNEL_DETECT: - eNextState = P2P_STATE_REQING_CHANNEL; - break; - default: - /* Unexpected channel scan done event without being chanceled. */ - ASSERT(FALSE); - break; - } - - prScanReqInfo->fgIsScanRequest = FALSE; - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanDone */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when channel is granted by CNM module from FW. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_CH_GRANT_T prMsgChGrant = (P_MSG_CH_GRANT_T)NULL; - UINT_8 ucTokenID = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Run Event Channel Grant\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - prP2pFsmInfo->u4GrantInterval = prMsgChGrant->u4GrantInterval; - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (ucTokenID == prChnlReqInfo->ucSeqNumOfChReq) { - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_REQING_CHANNEL: - switch (prChnlReqInfo->eChannelReqType) { - case CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL: - eNextState = P2P_STATE_CHNL_ON_HAND; - break; - case CHANNEL_REQ_TYPE_GC_JOIN_REQ: - eNextState = P2P_STATE_GC_JOIN; - break; - case CHANNEL_REQ_TYPE_GO_START_BSS: - eNextState = P2P_STATE_IDLE; - break; - default: - break; - } - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - break; - default: - /* Channel is granted under unexpected state. - * Driver should cancel channel privileagea before leaving the states. - */ - ASSERT(FALSE); - break; - } - - } - else { - /* Channel requsted, but released. */ - ASSERT(!prChnlReqInfo->fgIsChannelRequested); - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventChGrant */ - - -VOID -p2pFsmRunEventChannelRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelRequest\n")); - - /* Special case of time renewing for same frequency. */ - if ((prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND) && - (prChnlReqInfo->ucReqChnlNum == prP2pChnlReqMsg->rChannelInfo.ucChannelNum) && - (prChnlReqInfo->eBand == prP2pChnlReqMsg->rChannelInfo.eBand) && - (prChnlReqInfo->eChnlSco == prP2pChnlReqMsg->eChnlSco)) { - - ASSERT(prChnlReqInfo->fgIsChannelRequested == TRUE); - ASSERT(prChnlReqInfo->eChannelReqType == CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; - - /* Re-enter the state. */ - eNextState = P2P_STATE_CHNL_ON_HAND; - } - else { - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; /* Cookie can only be assign after abort.(for indication) */ - prChnlReqInfo->ucReqChnlNum = prP2pChnlReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prP2pChnlReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prP2pChnlReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL; - - eNextState = P2P_STATE_REQING_CHANNEL; - } - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, eNextState); - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelRequest */ - - -VOID -p2pFsmRunEventChannelAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelAbort\n")); - - if ((prChnlAbortMsg->u8Cookie == prChnlReqInfo->u8Cookie) && - (prChnlReqInfo->fgIsChannelRequested)) { - - ASSERT((prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL || - (prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND))); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelAbort */ - - - -VOID -p2pFsmRunEventScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - UINT_32 u4ChnlListSize = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)prMsgHdr; - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanRequest\n")); - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - ASSERT(prScanReqInfo->fgIsScanRequest == FALSE); - - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - - // Channel List - prScanReqInfo->ucNumChannelList = prP2pScanReqMsg->u4NumChannel; - DBGLOG(P2P, TRACE, ("Scan Request Channel List Number: %d\n", prScanReqInfo->ucNumChannelList)); - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - DBGLOG(P2P, TRACE, ("Channel List Number Overloaded: %d, change to: %d\n", - prScanReqInfo->ucNumChannelList, - MAXIMUM_OPERATION_CHANNEL_LIST)); - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - u4ChnlListSize = sizeof(RF_CHANNEL_INFO_T) * prScanReqInfo->ucNumChannelList; - kalMemCopy(prScanReqInfo->arScanChannelList, prP2pScanReqMsg->arChannelListInfo, u4ChnlListSize); - - // TODO: I only take the first SSID. Multiple SSID may be needed in the future. - // SSID - if (prP2pScanReqMsg->i4SsidNum >= 1) { - - kalMemCopy(&(prScanReqInfo->rSsidStruct), - prP2pScanReqMsg->prSSID, - sizeof(P2P_SSID_STRUCT_T)); - } - else { - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - } - - // IE Buffer - kalMemCopy(prScanReqInfo->aucIEBuf, - prP2pScanReqMsg->pucIEBuf, - prP2pScanReqMsg->u4IELen); - - prScanReqInfo->u4BufLength = prP2pScanReqMsg->u4IELen; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventScanRequest */ - - -VOID -p2pFsmRunEventScanAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanAbort\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanAbort */ - - - - - -VOID -p2pFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventAbort\n")); - - if (prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - } - else if (prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL) { - /* 2012/08/06: frog - * Prevent Start GO. - */ - prP2pBssInfo->eIntendOPMode = OP_MODE_NUM; - } - - // For other state, is there any special action that should be take before leaving? - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - else { - /* P2P State IDLE. */ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventAbort */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle FSM Timeout. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventFsmTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)u4Param; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - DBGLOG(P2P, TRACE, ("P2P FSM Timeout Event\n")); - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - else if (IS_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - break; - -// case P2P_STATE_SCAN: -// break; -// case P2P_STATE_AP_CHANNEL_DETECT: -// break; -// case P2P_STATE_REQING_CHANNEL: -// break; - case P2P_STATE_CHNL_ON_HAND: - { - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - break; -// case P2P_STATE_GC_JOIN: -// break; - default: - break; - } - - } while (FALSE); - - return; -} /* p2pFsmRunEventFsmTimeout */ - -VOID -p2pFsmRunEventMgmtFrameTx ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventMgmtFrameTx\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)prMsgHdr; - - p2pFuncTxMgmtFrame(prAdapter, - &prP2pFsmInfo->rMgmtTxInfo, - prMgmtTxMsg->prMgmtMsduInfo, - prMgmtTxMsg->u8Cookie); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtTx */ - - -VOID -p2pFsmRunEventStartAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStartAP\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)prMsgHdr; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - - if (prP2pStartAPMsg->u4BcnInterval) { - DBGLOG(P2P, TRACE, ("Beacon interval updated to :%ld \n", prP2pStartAPMsg->u4BcnInterval)); - prP2pBssInfo->u2BeaconInterval = (UINT_16)prP2pStartAPMsg->u4BcnInterval; - } - else if (prP2pBssInfo->u2BeaconInterval == 0) { - prP2pBssInfo->u2BeaconInterval = DOT11_BEACON_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u4DtimPeriod) { - DBGLOG(P2P, TRACE, ("DTIM interval updated to :%ld \n", prP2pStartAPMsg->u4DtimPeriod)); - prP2pBssInfo->ucDTIMPeriod = (UINT_8)prP2pStartAPMsg->u4DtimPeriod; - } - else if (prP2pBssInfo->ucDTIMPeriod == 0) { - prP2pBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u2SsidLen != 0) { - kalMemCopy(prP2pBssInfo->aucSSID, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - kalMemCopy(prP2pSpecificBssInfo->aucGroupSsid, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - prP2pBssInfo->ucSSIDLen = prP2pSpecificBssInfo->u2GroupSsidLen = prP2pStartAPMsg->u2SsidLen; - } - - - prP2pBssInfo->eHiddenSsidType = prP2pStartAPMsg->ucHiddenSsidType; - - - // TODO: JB - /* Privacy & inactive timeout. */ - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eIntendOPMode != OP_MODE_NUM)) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - ENUM_P2P_STATE_T eNextState = P2P_STATE_SCAN; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - - if(prP2pFsmInfo->eCurrentState != P2P_STATE_SCAN && - prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - } - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Leave IDLE state. */ - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - // sync with firmware - //DBGLOG(P2P, INFO, ("Activate P2P Network. \n")); - //nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - /* Key to trigger P2P FSM to allocate channel for AP mode. */ - prP2pBssInfo->eIntendOPMode = OP_MODE_ACCESS_POINT; - - /* Sparse Channel to decide which channel to use. */ - if ((cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) && (prP2pConnSettings->ucOperatingChnl == 0)) { - // Sparse Channel Detection using passive mode. - eNextState = P2P_STATE_AP_CHANNEL_DETECT; - } - else { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - -#if 1 - /* 2012-01-27: frog - Channel set from upper layer is the first priority. */ - /* Becuase the channel & beacon is decided by p2p_supplicant. */ - if (prP2pConnSettings->ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - - else { - ASSERT(ucPreferedChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } -#else - if (ucPreferedChnl) { - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } - else { - ASSERT(prP2pConnSettings->ucOperatingChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - -#endif - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - } - - /* If channel is specified, use active scan to shorten the scan time. */ - p2pFsmStateTransition(prAdapter, - prAdapter->rWifiVar.prP2pFsmInfo, - eNextState); - } - - - - } while (FALSE); - - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventStartAP */ - -VOID -p2pFsmRunEventNetDeviceRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_NETDEV_REGISTER_T prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventNetDeviceRegister\n")); - - prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)prMsgHdr; - - if (prNetDevRegisterMsg->fgIsEnable) { - p2pSetMode((prNetDevRegisterMsg->ucMode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventNetDeviceRegister */ - - -VOID -p2pFsmRunEventUpdateMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_UPDATE_T prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventUpdateMgmtFrame\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)prMsgHdr; - - switch (prP2pMgmtFrameUpdateMsg->eBufferType) { - case ENUM_FRAME_TYPE_EXTRA_IE_BEACON: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP: - break; - case ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE: - break; - case ENUM_FRAME_TYPE_BEACON_TEMPLATE: - break; - default: - break; - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventUpdateMgmtFrame */ - - -VOID -p2pFsmRunEventBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_BEACON_UPDATE_T prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconUpdate\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)prMsgHdr; - - - p2pFuncBeaconUpdate(prAdapter, - prP2pBssInfo, - &prP2pFsmInfo->rBcnContentInfo, - prBcnUpdateMsg->pucBcnHdr, - prBcnUpdateMsg->u4BcnHdrLen, - prBcnUpdateMsg->pucBcnBody, - prBcnUpdateMsg->u4BcnBodyLen); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) && - (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - //nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - -} /* p2pFsmRunEventBeaconUpdate */ - - -VOID -p2pFsmRunEventStopAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStopAP\n")); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) - && (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); - - DBGLOG(P2P, TRACE, ("Stop Beaconing\n")); - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Enter IDLE state. */ - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - DBGLOG(P2P, INFO, ("Re activate P2P Network. \n")); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmRunEventAbort(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo); -// p2pFsmStateTransition(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - -} /* p2pFsmRunEventStopAP */ - -VOID -p2pFsmRunEventConnectionRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)prMsgHdr; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventConnectionRequest\n")); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - // Update connection request information. - prConnReqInfo->fgIsConnRequest = TRUE; - COPY_MAC_ADDR(prConnReqInfo->aucBssid, prConnReqMsg->aucBssid); - kalMemCopy(&(prConnReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - kalMemCopy(prConnReqInfo->aucIEBuf, prConnReqMsg->aucIEBuf, prConnReqMsg->u4IELen); - prConnReqInfo->u4BufLength = prConnReqMsg->u4IELen; - - /* Find BSS Descriptor first. */ - prP2pFsmInfo->prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prP2pFsmInfo->prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - prScanReqInfo->arScanChannelList[0].ucChannelNum = prConnReqMsg->rChannelInfo.ucChannelNum; - kalMemCopy(&(prScanReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prConnReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prConnReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prConnReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_REQING_CHANNEL); - } - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventConnectionRequest */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle Connection Request from Supplicant. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventConnectionAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - //P_STA_RECORD_T prTargetStaRec = (P_STA_RECORD_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventConnectionAbort: Connection Abort.\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)prMsgHdr; - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - { - UINT_8 aucBCBSSID[] = BC_BSSID; - - if (!prP2pBssInfo->prStaRecOfAP) { - DBGLOG(P2P, TRACE, ("GO's StaRec is NULL\n")); - break; - } - if (UNEQUAL_MAC_ADDR(prP2pBssInfo->prStaRecOfAP->aucMacAddr, prDisconnMsg->aucTargetID) && - UNEQUAL_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCBSSID)) { - DBGLOG(P2P, TRACE, ("Unequal MAC ADDR ["MACSTR":"MACSTR"]\n", - MAC2STR(prP2pBssInfo->prStaRecOfAP->aucMacAddr), - MAC2STR(prDisconnMsg->aucTargetID))); - break; - } - - - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, NULL, NULL, 0, 0); - - /* Stop rejoin timer if it is started. */ - // TODO: If it has. - - p2pFuncDisconnect(prAdapter, prP2pBssInfo->prStaRecOfAP, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prP2pBssInfo->prStaRecOfAP; - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } - break; - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - /* Search specific client device, and disconnect. */ - /* 1. Send deauthentication frame. */ - /* 2. Indication: Device disconnect. */ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - DBGLOG(P2P, TRACE, ("Disconnecting with Target ID: "MACSTR"\n", MAC2STR(prDisconnMsg->aucTargetID))); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prDisconnMsg->aucTargetID)) { - - DBGLOG(P2P, TRACE, ("Disconnecting: "MACSTR"\n", MAC2STR(prCurrStaRec->aucMacAddr))); - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Glue layer indication. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - /* Send deauth & do indication. */ - p2pFuncDisconnect(prAdapter, prCurrStaRec, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prCurrStaRec; - - break; - } - } - - } - break; - case OP_MODE_P2P_DEVICE: - default: - ASSERT(FALSE); - break; - } - - } while (FALSE); - - //20120830 moved into p2pFuncDisconnect() - //if ((!prDisconnMsg->fgSendDeauth) && (prTargetStaRec)) { - // cnmStaRecFree(prAdapter, prTargetStaRec, TRUE); - //} - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventConnectionAbort */ - - -VOID -p2pFsmRunEventDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - // TODO: - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventDissolve\n")); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} -WLAN_STATUS -p2pFsmRunEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prMsduInfo != NULL)); - - DBGLOG(P2P, TRACE, ("Deauth TX Done\n")); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Station Record NULL, Index:%d\n", prMsduInfo->ucStaRecIndex)); - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - /**/ - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; -} /* p2pFsmRunEventDeauthTxDone */ - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo = (P_P2P_MGMT_TX_REQ_INFO_T)NULL; - BOOLEAN fgIsSuccess = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prMgmtTxReqInfo = &(prP2pFsmInfo->rMgmtTxInfo); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Fail, Status:%d.\n", rTxDoneStatus)); - } - else { - fgIsSuccess = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Done.\n")); - } - - - if (prMgmtTxReqInfo->prMgmtTxMsdu == prMsduInfo) { - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - fgIsSuccess, - prMsduInfo->prPacket, - (UINT_32)prMsduInfo->u2FrameLength); - - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* p2pFsmRunEventMgmtFrameTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when JOIN complete message event is received from SAA. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_MSG_JOIN_COMP_T prJoinCompMsg = (P_MSG_JOIN_COMP_T)NULL; - P_SW_RFB_T prAssocRspSwRfb = (P_SW_RFB_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Join Complete\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - prStaRec = prJoinCompMsg->prStaRec; - - /* Check SEQ NUM */ - if (prJoinCompMsg->ucSeqNum == prJoinInfo->ucSeqNumOfReqMsg) { - ASSERT(prStaRec == prJoinInfo->prTargetStaRec); - prJoinInfo->fgIsJoinComplete = TRUE; - - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //4 <1.1> Change FW's Media State immediately. - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prP2pBssInfo->prStaRecOfAP) && - (prP2pBssInfo->prStaRecOfAP != prStaRec)) { - cnmStaRecChangeState(prAdapter, prP2pBssInfo->prStaRecOfAP, STA_STATE_1); - - cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - prP2pBssInfo->prStaRecOfAP = NULL; - } - - //4 <1.3> Update BSS_INFO_T - p2pFuncUpdateBssInfoForJOIN(prAdapter, prP2pFsmInfo->prTargetBss, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_SUPPORT_P2P_RSSI_QUERY - //<1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); -#endif - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, prStaRec->aucMacAddr); - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - - } - else { - /* Join Fail*/ - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (p2pFuncRetryJOIN(prAdapter, prStaRec, prJoinInfo) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - prBssDesc = prP2pFsmInfo->prTargetBss; - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - prBssDesc->fgIsConnecting = FALSE; - - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - - } - - } - } - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_GC_JOIN) { - /* Return to IDLE state. */ - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventJoinComplete */ - - - -VOID -p2pFsmRunEventMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)prMsgHdr; - - p2pFuncMgmtFrameRegister(prAdapter, - prMgmtFrameRegister->u2FrameType, - prMgmtFrameRegister->fgIsRegister, - &prP2pFsmInfo->u4P2pPacketFilter); - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtFrameRegister */ - - - - -#if 0 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDeauthentication ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - if (!prStaRec) { - break; - } - - - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - if (prStaRec->ucStaState == STA_STATE_1) { - break; - } - - DBGLOG(P2P, TRACE, ("RX Deauth\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - prStaRec->u2ReasonCode = u2ReasonCode; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDeauthFrame->aucInfoElem, - u2IELength, - u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (authProcessRxDeauthFrame(prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - /* Findout why someone sent deauthentication frame to us. */ - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("Deauth Reason:%d\n", u2ReasonCode)); - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDeauthentication */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDisassociation ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prStaRec->ucStaState == STA_STATE_1) { - - break; - } - - DBGLOG(P2P, TRACE, ("RX Disassoc\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDisassocFrame->aucInfoElem, - u2IELength, - prStaRec->u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, prStaRec->u2ReasonCode); - - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - ASSERT(FALSE); - break; - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDisassociation */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when a probe request frame is received. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is accepted & need cancel scan request. -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxProbeResponseFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL) && (prBssDesc != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - /* There is a connection request. */ - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxProbeResponseFrame */ - - - - - - -VOID -p2pFsmRunEventBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconTimeout: Beacon Timeout\n")); - - /* Only client mode would have beacon lost event. */ - ASSERT(prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE); - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DISASSOC_INACTIVITY); - - if (prP2pBssInfo->prStaRecOfAP != NULL) { - P_STA_RECORD_T prStaRec = prP2pBssInfo->prStaRecOfAP; - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_DISASSOC_LEAVING_BSS); - - //20120830 moved into p2pFuncDisconnect() - //cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - - } - } - } while (FALSE); - - return; -} /* p2pFsmRunEventBeaconTimeout */ - - - - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - // TODO: - } - - } while (FALSE); - - return; - -} /* end of p2pGenerateP2P_IEForAssocReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Probe Request frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - ASSERT(prAdapter); - ASSERT(pucBuf); - - // TODO: - - return; - -} /* end of p2pGenerateP2P_IEForProbReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pCalculateP2P_IELenForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - // TODO: - - return 0; - -} /* end of p2pCalculateP2P_IELenForProbeReq() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_UNSPECIFIED); - - - //20120830 moved into p2puUncDisconnect. - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - - return; -} /* p2pRunEventAAATxFail */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaState; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - eOriMediaState = prP2pBssInfo->eConnectionState; - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem >= P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - rStatus = WLAN_STATUS_RESOURCES; - break; - } - - bssAddStaRecToClientList(prAdapter, prP2pBssInfo, prStaRec); - - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - /* Update Connected state to FW. */ - if (eOriMediaState != prP2pBssInfo->eConnectionState) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAAComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - /* Glue layer indication. */ - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, TRUE); - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAASuccess */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRxPublicActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_PUBLIC_ACTION_FRAME_T prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - ASSERT(prSwRfb); - ASSERT(prAdapter); - - - - prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)prSwRfb->pvHeader; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - DBGLOG(P2P, TRACE, ("RX Public Action Frame Token:%d.\n", prPublicActionFrame->ucDialogToken)); - - if (prPublicActionFrame->ucCategory != CATEGORY_PUBLIC_ACTION) { - return rWlanStatus; - } - - switch (prPublicActionFrame->ucAction) { - case ACTION_PUBLIC_WIFI_DIRECT: - break; - case ACTION_GAS_INITIAL_REQUEST: - case ACTION_GAS_INITIAL_RESPONSE: - case ACTION_GAS_COMEBACK_REQUEST: - case ACTION_GAS_COMEBACK_RESPONSE: - break; - default: - break; - } - - return rWlanStatus; -} /* p2pRxPublicActionFrame */ - - - -WLAN_STATUS -p2pRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_ACTION_FRAME_T prP2pActionFrame = (P_P2P_ACTION_FRAME_T)NULL; - UINT_8 aucOui[3] = VENDOR_OUI_WFA_SPECIFIC; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pActionFrame = (P_P2P_ACTION_FRAME_T)prSwRfb->pvHeader; - - if (prP2pActionFrame->ucCategory != CATEGORY_VENDOR_SPECIFIC_ACTION) { - DBGLOG(P2P, TRACE, ("RX Action Frame but not vendor specific.\n")); - break; - } - - - if ((prP2pActionFrame->ucOuiType != VENDOR_OUI_TYPE_P2P) || - (prP2pActionFrame->aucOui[0] != aucOui[0]) || - (prP2pActionFrame->aucOui[1] != aucOui[1]) || - (prP2pActionFrame->aucOui[2] != aucOui[2])) { - DBGLOG(P2P, TRACE, ("RX Vendor Specific Action Frame but not P2P Type or not WFA OUI.\n")); - break; - } - - } while (FALSE); - - return rWlanStatus; -} /* p2pRxActionFrame */ - - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ) -{ - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_32 i; - BOOLEAN fgNoaAttrExisted = FALSE; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - prP2pSpecificBssInfo->fgEnableOppPS = prEventUpdateNoaParam->fgEnableOppPS; - prP2pSpecificBssInfo->u2CTWindow = prEventUpdateNoaParam->u2CTWindow; - prP2pSpecificBssInfo->ucNoAIndex = prEventUpdateNoaParam->ucNoAIndex; - prP2pSpecificBssInfo->ucNoATimingCount = prEventUpdateNoaParam->ucNoATimingCount; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->fgEnableOppPS; - - - ASSERT(prP2pSpecificBssInfo->ucNoATimingCount <= P2P_MAXIMUM_NOA_COUNT); - - for (i = 0; i < prP2pSpecificBssInfo->ucNoATimingCount; i++) { - // in used - prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse = - prEventUpdateNoaParam->arEventNoaTiming[i].fgIsInUse; - // count - prP2pSpecificBssInfo->arNoATiming[i].ucCount = - prEventUpdateNoaParam->arEventNoaTiming[i].ucCount; - // duration - prP2pSpecificBssInfo->arNoATiming[i].u4Duration = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Duration; - // interval - prP2pSpecificBssInfo->arNoATiming[i].u4Interval = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Interval; - // start time - prP2pSpecificBssInfo->arNoATiming[i].u4StartTime = - prEventUpdateNoaParam->arEventNoaTiming[i].u4StartTime; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse; - } - - prP2pSpecificBssInfo->fgIsNoaAttrExisted = fgNoaAttrExisted; - - // update beacon content by the change - bssUpdateBeaconContent(prAdapter, ucNetTypeIndex); -} - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_func.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_func.c deleted file mode 100755 index 0a61d7591c59..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_func.c +++ /dev/null @@ -1,3378 +0,0 @@ -#include "precomp.h" - -APPEND_VAR_ATTRI_ENTRY_T txAssocRspAttributesTable[] = { - { (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS) , NULL, p2pFuncAppendAttriStatusForAssocRsp } /* 0 */ // Status - ,{ (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING), NULL, p2pFuncAppendAttriExtListenTiming } /* 8 */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbeRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for requesting scan. There is an option to do ACTIVE or PASSIVE scan. -* -* @param eScanType - Specify the scan type of the scan request. It can be an ACTIVE/PASSIVE -* Scan. -* eChannelSet - Specify the prefered channel set. -* A FULL scan would request a legacy full channel normal scan.(usually ACTIVE). -* A P2P_SOCIAL scan would scan 1+6+11 channels.(usually ACTIVE) -* A SPECIFIC scan would only 1/6/11 channels scan. (Passive Listen/Specific Search) -* ucChannelNum - A specific channel number. (Only when channel is specified) -* eBand - A specific band. (Only when channel is specified) -* -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncRequestScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - - P_MSG_SCN_SCAN_REQ prScanReq = (P_MSG_SCN_SCAN_REQ)NULL; - - DEBUGFUNC("p2pFuncRequestScan()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prScanReqInfo != NULL)); - - if (prScanReqInfo->eChannelSet == SCAN_CHANNEL_SPECIFIED) { - ASSERT_BREAK(prScanReqInfo->ucNumChannelList > 0); - DBGLOG(P2P, LOUD, ("P2P Scan Request Channel:%d\n", prScanReqInfo->arScanChannelList[0].ucChannelNum)); - } - - prScanReq = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - if (!prScanReq) { - ASSERT(0); // Can't trigger SCAN FSM - break; - } - - prScanReq->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_REQ; - prScanReq->ucSeqNum = ++prScanReqInfo->ucSeqNumOfScnMsg; - prScanReq->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanReq->eScanType = prScanReqInfo->eScanType; - prScanReq->eScanChannel = prScanReqInfo->eChannelSet; - prScanReq->u2IELen = 0; - - /* Copy IE for Probe Request. */ - kalMemCopy(prScanReq->aucIE, prScanReqInfo->aucIEBuf, prScanReqInfo->u4BufLength); - prScanReq->u2IELen = (UINT_16)prScanReqInfo->u4BufLength; - - prScanReq->u2ChannelDwellTime = prScanReqInfo->u2PassiveDewellTime; - - switch (prScanReqInfo->eChannelSet) { - case SCAN_CHANNEL_SPECIFIED: - { - UINT_32 u4Idx = 0; - P_RF_CHANNEL_INFO_T prDomainInfo = (P_RF_CHANNEL_INFO_T)prScanReqInfo->arScanChannelList; - - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - - for (u4Idx = 0; u4Idx < prScanReqInfo->ucNumChannelList; u4Idx++) { - prScanReq->arChnlInfoList[u4Idx].ucChannelNum = prDomainInfo->ucChannelNum; - prScanReq->arChnlInfoList[u4Idx].eBand = prDomainInfo->eBand; - prDomainInfo++; - } - - prScanReq->ucChannelListNum = prScanReqInfo->ucNumChannelList; - } - case SCAN_CHANNEL_FULL: - case SCAN_CHANNEL_2G4: - case SCAN_CHANNEL_P2P_SOCIAL: - { - UINT_8 aucP2pSsid[] = P2P_WILDCARD_SSID; - - COPY_SSID(prScanReq->aucSSID, - prScanReq->ucSSIDLength, - prScanReqInfo->rSsidStruct.aucSsid, - prScanReqInfo->rSsidStruct.ucSsidLen); - - /* For compatible. */ - if (EQUAL_SSID(aucP2pSsid, P2P_WILDCARD_SSID_LEN, prScanReq->aucSSID, prScanReq->ucSSIDLength)) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_P2P_WILDCARD; - } - else if (prScanReq->ucSSIDLength != 0) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - } - } - break; - default: - /* Currently there is no other scan channel set. */ - ASSERT(FALSE); - break; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanReq, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncRequestScan */ - -VOID -p2pFuncCancelScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanInfo - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prScanInfo != NULL)); - - if (!prScanInfo->fgIsScanRequest) { - break; - } - - - if (prScanInfo->ucSeqNumOfScnMsg) { - /* There is a channel privilege on hand. */ - DBGLOG(P2P, TRACE, ("P2P Cancel Scan\n")); - - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->ucSeqNum = prScanInfo->ucSeqNumOfScnMsg++; - prScanCancelMsg->fgIsChannelExt = FALSE; - prScanInfo->fgIsScanRequest = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancelMsg, - MSG_SEND_METHOD_BUF); - - - } - - - } while (FALSE); - - return; -} /* p2pFuncCancelScan */ - - -VOID -p2pFuncSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (eOpMode < OP_MODE_NUM)); - - if (prP2pBssInfo->eCurrentOPMode != eOpMode) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to from %d, to %d.\n", prP2pBssInfo->eCurrentOPMode, eOpMode)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); - - p2pFsmRunEventStopAP(prAdapter, NULL); - break; - default: - break; - } - - - prP2pBssInfo->eIntendOPMode = eOpMode; - prP2pBssInfo->eCurrentOPMode = eOpMode; - switch (eOpMode) { - case OP_MODE_INFRASTRUCTURE: - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to Client.\n")); - case OP_MODE_ACCESS_POINT: -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - /* Change interface address. */ - if (eOpMode == OP_MODE_ACCESS_POINT) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to AP.\n")); - prP2pBssInfo->ucSSIDLen = 0; - } - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucInterfaceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucInterfaceAddress); - - - break; - case OP_MODE_P2P_DEVICE: - { - /* Change device address. */ - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch back to P2P Device.\n")); - -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - - - } - break; - default: -// if (IS_BSS_ACTIVE(prP2pBssInfo)) { -// UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - -// nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - ASSERT(FALSE); - break; - } - - if (1) { - P2P_DISCONNECT_INFO rP2PDisInfo; - - rP2PDisInfo.ucRole = 2; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_P2P_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(P2P_DISCONNECT_INFO), - (PUINT_8)&rP2PDisInfo, - NULL, - 0); - } - - - DBGLOG(P2P, TRACE, ("The device address is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucOwnMacAddr))); - DBGLOG(P2P, TRACE, ("The BSSID is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucBSSID))); - - /* Update BSS INFO to FW. */ - if ((fgSyncToFW) && (eOpMode != OP_MODE_ACCESS_POINT)) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - } - - } while (FALSE); - - return; -} /* p2pFuncSwitchOPMode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will start a P2P Group Owner and send Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncStartGO ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && (prBssInfo != NULL)); - - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - DBGLOG(P2P, TRACE, ("p2pFuncStartGO:\n")); - - /* AP mode started. */ - p2pFuncSwitchOPMode(prAdapter, prBssInfo, prBssInfo->eIntendOPMode, FALSE); - - prBssInfo->eIntendOPMode = OP_MODE_NUM; - - //4 <1.1> Assign SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - pucSsidBuf, - ucSsidLen); - - DBGLOG(P2P, TRACE, ("GO SSID:%s \n", prBssInfo->aucSSID)); - - //4 <1.2> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - - //4 <1.3> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = ucChannelNum; - prBssInfo->eBand = eBand; - prBssInfo->eBssSCO = eSco; - - DBGLOG(P2P, TRACE, ("GO Channel:%d \n", ucChannelNum)); - - - if (prBssInfo->eBand == BAND_5G) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else if (fgIsPureAP) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11GN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (prBssInfo->ucAllSupportedRatesLen == 0) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - if (!fgIsPureAP) { - prBssInfo->fgIsProtection = TRUE; /* Always enable protection at P2P GO */ - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - } - else { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) - prBssInfo->fgIsProtection = TRUE; - } - - // 20120106 frog: I want separate OP_Mode & Beacon TX Function. - //p2pFuncSwitchOPMode(prAdapter, prBssInfo, OP_MODE_ACCESS_POINT, FALSE); - - bssInitForAP(prAdapter, prBssInfo, FALSE); - - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif /* CFG_SUPPORT_AAA */ - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - - //4 <3.2> Reset HW TSF Update Mode and Beacon Mode - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.3> Update Beacon again for network phy type confirmed. - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.4> Setup BSSID - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - - } while (FALSE); - - return; -} /* p2pFuncStartGO() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncReleaseCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_ABORT_T prMsgChRelease = (P_MSG_CH_ABORT_T)NULL; - - DEBUGFUNC("p2pFuncReleaseCh()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - if (!prChnlReqInfo->fgIsChannelRequested) { - break; - } - else { - DBGLOG(P2P, TRACE, ("P2P Release Channel\n")); - prChnlReqInfo->fgIsChannelRequested = FALSE; - } - - /* 1. return channel privilege to CNM immediately */ - prMsgChRelease = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChRelease) { - ASSERT(0); // Can't release Channel to CNM - break; - } - - prMsgChRelease->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChRelease->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChRelease->ucTokenID = prChnlReqInfo->ucSeqNumOfChReq++; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChRelease, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncReleaseCh */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of CHANNEL_REQ_JOIN Initial. Enter CHANNEL_REQ_JOIN State. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncAcquireCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_REQ_T prMsgChReq = (P_MSG_CH_REQ_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - break; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChReq->ucTokenID = ++prChnlReqInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = prChnlReqInfo->u4MaxInterval; - - prMsgChReq->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prMsgChReq->eRfSco = prChnlReqInfo->eChnlSco; - prMsgChReq->eRfBand = prChnlReqInfo->eBand; - - kalMemZero(prMsgChReq->aucBSSID, MAC_ADDR_LEN); - - /* Channel request join BSSID. */ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prChnlReqInfo->fgIsChannelRequested = TRUE; - - } while (FALSE); - - return; -} /* p2pFuncAcquireCh */ - -#if 0 -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnHdr, - IN UINT_32 u4HdrLen, - IN PUINT_8 pucBcnBody, - IN UINT_32 u4BodyLen, - IN UINT_32 u4DtimPeriod, - IN UINT_32 u4BcnInterval) -{ - WLAN_STATUS rResultStatus = WLAN_STATUS_INVALID_DATA; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucTIMBody = (PUINT_8)NULL; - UINT_16 u2FrameLength = 0, UINT_16 u2OldBodyLen = 0; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnMsduInfo = prP2pBssInfo->prBeacon - - ASSERT_BREAK(prBcnMsduInfo != NULL); - - /* TODO: Find TIM IE pointer. */ - prBcnFrame = prBcnMsduInfo->prPacket; - - ASSERT_BREAK(prBcnFrame != NULL); - - do { - /* Ori header. */ - UINT_16 u2IELength = 0, u2Offset = 0; - PUINT_8 pucIEBuf = prBcnFrame->aucInfoElem; - - u2IELength = prBcnMsduInfo->u2FrameLength - prBcnMsduInfo->ucMacHeaderLength; - - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - if ((IE_ID(pucIEBuf) == ELEM_ID_TIM) || - ((IE_ID(pucIEBuf) > ELEM_ID_IBSS_PARAM_SET)) { - pucTIMBody = pucIEBuf; - break - } - u2FrameLength += IE_SIZE(pucIEBuf); - } - - if (pucTIMBody == NULL) { - pucTIMBody = pucIEBuf; - } - - /* Body not change. */ - u2OldBodyLen = (UINT_16)((UINT_32)pucTIMBody - (UINT_32)prBcnFrame->aucInfoElem); - - // Move body. - kalMemCmp(aucIEBuf, pucTIMBody, u2OldBodyLen); - } while (FALSE); - - - if (pucBcnHdr) { - kalMemCopy(prBcnMsduInfo->prPacket, pucBcnHdr, u4HdrLen); - - pucTIMBody = (PUINT_8)((UINT_32)prBcnMsduInfo->prPacket + u4HdrLen); - - prBcnMsduInfo->ucMacHeaderLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - u2FrameLength = u4HdrLen; /* Header + Partial Body. */ - - } - else { - /* Header not change. */ - u2FrameLength += prBcnMsduInfo->ucMacHeaderLength; - } - - - if (pucBcnBody) { - kalMemCopy(pucTIMBody, pucBcnBody, u4BodyLen); - u2FrameLength += (UINT_16)u4BodyLen; - } - else { - kalMemCopy(pucTIMBody, aucIEBuf, u2OldBodyLen); - u2FrameLength += u2OldBodyLen; - } - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = u2FrameLength; - - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - prP2pBssInfo->u2BeaconInterval = (UINT_16)u4BcnInterval; - prP2pBssInfo->ucDTIMPeriod = (UINT_8)u4DtimPeriod; - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - prBcnMsduInfo->ucPacketType = 3; - - rResultStatus = nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prP2pBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* AP is created, Beacon Update. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rResultStatus; -} /* p2pFuncBeaconUpdate */ - -#else -WLAN_STATUS -p2pFuncBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (prBcnUpdateInfo != NULL)); - - prBcnMsduInfo = prP2pBssInfo->prBeacon; - -#if DBG - if (prBcnUpdateInfo->pucBcnHdr != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnHdr == ((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD)); - } - - if (prBcnUpdateInfo->pucBcnBody != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnBody == ((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen)); - } -#endif - prBcnFrame = (P_WLAN_BEACON_FRAME_T)((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD); - - if (!pucNewBcnBody) { - /* Old body. */ - pucNewBcnBody = prBcnUpdateInfo->pucBcnBody; - ASSERT(u4NewBodyLen == 0); - u4NewBodyLen = prBcnUpdateInfo->u4BcnBodyLen; - } - else { - prBcnUpdateInfo->u4BcnBodyLen = u4NewBodyLen; - } - - /* Temp buffer body part. */ - kalMemCopy(aucIEBuf, pucNewBcnBody, u4NewBodyLen); - - if (pucNewBcnHdr) { - kalMemCopy(prBcnFrame, pucNewBcnHdr, u4NewHdrLen); - prBcnUpdateInfo->pucBcnHdr = (PUINT_8)prBcnFrame; - prBcnUpdateInfo->u4BcnHdrLen = u4NewHdrLen; - } - - pucIEBuf = (PUINT_8)((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen); - kalMemCopy(pucIEBuf, aucIEBuf, u4NewBodyLen); - prBcnUpdateInfo->pucBcnBody = pucIEBuf; - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = (UINT_16)(prBcnUpdateInfo->u4BcnHdrLen + prBcnUpdateInfo->u4BcnBodyLen); - - prBcnMsduInfo->ucPacketType = 3; - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - - /* Update BSS INFO related information. */ - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prBcnFrame->aucSrcAddr); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prBcnFrame->aucBSSID); - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - - p2pFuncParseBeaconContent(prAdapter, - prP2pBssInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); - -#if 1 - //bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); -#else - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBcnFrame->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); -#endif - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncBeaconUpdate */ - -#endif - -// TODO: We do not apply IE in deauth frame set from upper layer now. -WLAN_STATUS -p2pFuncDeauth ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDeauth - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDeauth, u2ReasonCode); - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDeauth */ - -// TODO: We do not apply IE in disassoc frame set from upper layer now. -WLAN_STATUS -p2pFuncDisassoc ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDisassoc - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - //20120830 moved into p2pFuncDisconnect(). - //cnmStaRecFree(prAdapter, prCliStaRec, TRUE); - - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDisassoc */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - DEBUGFUNC("p2pFuncDissolve()"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pBssInfo != NULL)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - /* Reset station record status. */ - if (prP2pBssInfo->prStaRecOfAP) { - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DEAUTH_LEAVING_BSS); - - // 2012/02/14 frog: After formation before join group, prStaRecOfAP is NULL. - p2pFuncDisconnect(prAdapter, - prP2pBssInfo->prStaRecOfAP, - fgSendDeauth, - u2ReasonCode); - } - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - break; - case OP_MODE_ACCESS_POINT: - /* Under AP mode, we would net send deauthentication frame to each STA. - * We only stop the Beacon & let all stations timeout. - */ - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - NULL, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)NULL); - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - while (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_REMOVE_HEAD(prStaRecOfClientList, prCurrStaRec, P_STA_RECORD_T); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - p2pFuncDisconnect(prAdapter, prCurrStaRec, TRUE, u2ReasonCode); - - } - - } - - break; - default: - return; // 20110420 -- alreay in Device Mode. - } - - /* Make the deauth frame send to FW ASAP. */ - wlanAcquirePowerControl(prAdapter); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - wlanReleasePowerControl(prAdapter); - - kalMdelay(100); - - /* Change Connection Status. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - } while (FALSE); - - return; -} /* p2pFuncDissolve */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDisconnect ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - DBGLOG(P2P, TRACE, ("p2pFuncDisconnect()")); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - /* Indicate disconnect. */ - // TODO: -// kalP2PGOStationUpdate -// kalP2PGCIndicateConnectionStatus - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, prStaRec->aucMacAddr); - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - } - - if (fgSendDeauth) { - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - prStaRec, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)p2pFsmRunEventDeauthTxDone); - } - else { - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* GO: It would stop Beacon TX. GC: Stop all BSS related PS function. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - } while (FALSE); - - return; - -} /* p2pFuncDisconnect */ - - - - - - -WLAN_STATUS -p2pFuncTxMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prTxMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxReqInfo != NULL)); - - if (prMgmtTxReqInfo->fgIsMgmtTxRequested) { - - // 1. prMgmtTxReqInfo->prMgmtTxMsdu != NULL - /* Packet on driver, not done yet, drop it. */ - if ((prTxMsduInfo = prMgmtTxReqInfo->prMgmtTxMsdu) != NULL) { - - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - FALSE, - prTxMsduInfo->prPacket, - (UINT_32)prTxMsduInfo->u2FrameLength); - - // Leave it to TX Done handler. - //cnmMgtPktFree(prAdapter, prTxMsduInfo); - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - // 2. prMgmtTxReqInfo->prMgmtTxMsdu == NULL - /* Packet transmitted, wait tx done. (cookie issue) */ - // 20120105 frog - use another u8cookie to store this value. - - } - - ASSERT(prMgmtTxReqInfo->prMgmtTxMsdu == NULL); - - - - prWlanHdr = (P_WLAN_MAC_HEADER_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - prStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_P2P_INDEX, prWlanHdr->aucAddr1); - prMgmtTxMsdu->ucNetworkType = (UINT_8)NETWORK_TYPE_P2P_INDEX; - - switch (prWlanHdr->u2FrameCtrl & MASK_FRAME_TYPE) { - case MAC_FRAME_PROBE_RSP: - prMgmtTxMsdu = p2pFuncProcessP2pProbeRsp(prAdapter, prMgmtTxMsdu); - break; - default: - break; - } - - - prMgmtTxReqInfo->u8Cookie = u8Cookie; - prMgmtTxReqInfo->prMgmtTxMsdu = prMgmtTxMsdu; - prMgmtTxReqInfo->fgIsMgmtTxRequested = TRUE; - - prMgmtTxMsdu->eSrc = TX_PACKET_MGMT; - prMgmtTxMsdu->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMgmtTxMsdu->ucStaRecIndex = (prStaRec != NULL)?(prStaRec->ucIndex):(0xFF); - if (prStaRec != NULL) { - DBGLOG(P2P, TRACE, ("Mgmt with station record: "MACSTR" .\n", MAC2STR(prStaRec->aucMacAddr))); - } - - prMgmtTxMsdu->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; // TODO: undcertain. - prMgmtTxMsdu->fgIs802_1x = FALSE; - prMgmtTxMsdu->fgIs802_11 = TRUE; - prMgmtTxMsdu->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMgmtTxMsdu->pfTxDoneHandler = p2pFsmRunEventMgmtFrameTxDone; - prMgmtTxMsdu->fgIsBasicRate = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt seq NO. %d .\n", prMgmtTxMsdu->ucTxSeqNum)); - - nicTxEnqueueMsdu(prAdapter, prMgmtTxMsdu); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncTxMgmtFrame */ - - - -VOID -p2pFuncSetChannel ( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prRfChannelInfo != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnSettings->ucOperatingChnl = prRfChannelInfo->ucChannelNum; - prP2pConnSettings->eBand = prRfChannelInfo->eBand; - - - } while (FALSE); - - return; -} -/* p2pFuncSetChannel */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncRetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - BOOLEAN fgRetValue = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prStaRec != NULL) && - (prJoinInfo != NULL)); - - /* Retry other AuthType if possible */ - if (!prJoinInfo->ucAvailableAuthTypes) { - break; - } - - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(P2P, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - break; - } - - prJoinInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - ASSERT(0); // Can't trigger SAA FSM - break; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - fgRetValue = TRUE; - } while (FALSE); - - return fgRetValue; - - - -}/* end of p2pFuncRetryJOIN() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("p2pUpdateBssInfoForJOIN()"); - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - DBGLOG(P2P, INFO, ("Update P2P_BSS_INFO_T and apply settings to MAC\n")); - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prP2pBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - if (prBssDesc == NULL) { - /* Target BSS NULL. */ - DBGLOG(P2P, TRACE,("Target BSS NULL\n")); - return; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAssocRspFrame->aucBSSID)) { - ASSERT(FALSE); - } - - //4 <1.3> Setup Channel, Band - prP2pBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prP2pBssInfo->eBand = prBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prP2pBssInfo->prStaRecOfAP = prStaRec; - prP2pBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prP2pBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prP2pBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prP2pBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prP2pBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prP2pBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prP2pBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prP2pBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prP2pBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prP2pBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - ASSERT(prBssDesc); - - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prP2pBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prP2pBssInfo->ucDTIMPeriod = 0; - prP2pBssInfo->u2ATIMWindow = 0; - - prP2pBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of p2pUpdateBssInfoForJOIN() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = TRUE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - - DBGLOG(P2P, TRACE, ("p2pValidate Authentication Frame\n")) - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pprStaRec != NULL) && - (pu2StatusCode != NULL)); - - /* P2P 3.2.8 */ - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* We are not under AP Mode yet. */ - fgReplyAuth = FALSE; - DBGLOG(P2P, WARN, ("Current OP mode is not under AP mode. (%d)\n", prP2pBssInfo->eCurrentOPMode)); - break; - } - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX, - prAuthFrame->aucSrcAddr); - - if (!prStaRec) { - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - /* Sent a message event to clean un-used STA_RECORD_T. */ - ASSERT(prStaRec); - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - prStaRec->u2BSSBasicRateSet = prP2pBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = RATE_SET_ERP_P2P; - - prStaRec->u2OperationalRateSet = RATE_SET_ERP_P2P; - prStaRec->ucPhyTypeSet = PHY_TYPE_SET_802_11GN; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - else { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - if ((prStaRec->ucStaState > STA_STATE_1) && (IS_STA_IN_P2P(prStaRec))) { - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - } - - } - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem >= P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - /* GROUP limit full. */ - /* P2P 3.2.8 */ - DBGLOG(P2P, WARN, ("Group Limit Full. (%d)\n", (INT_16)prP2pBssInfo->rStaRecOfClientList.u4NumElem)); - cnmStaRecFree(prAdapter, prStaRec, FALSE); - break; - } - else { - /* Hotspot Blacklist */ - if(prAuthFrame->aucSrcAddr) { - if(kalP2PCmpBlackList(prAdapter->prGlueInfo, prAuthFrame->aucSrcAddr)) { - fgReplyAuth = FALSE; - return fgReplyAuth; - } - } - } - - //prStaRec->eStaType = STA_TYPE_INFRA_CLIENT; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - prStaRec->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - prStaRec->ucJoinFailureCount = 0; - - *pprStaRec = prStaRec; - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - - - return fgReplyAuth; - -} /* p2pFuncValidateAuth */ - - - - -VOID -p2pFuncResetStaRecStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - do { - if ((prAdapter == NULL) || (prStaRec == NULL)) { - ASSERT(FALSE); - break; - } - - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - - } while (FALSE); - - return; -} /* p2pFuncResetStaRecStatus */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to initialize the value of the connection settings for -* P2P network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncInitConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ) -{ - P_DEVICE_TYPE_T prDevType; - UINT_8 aucDefaultDevName[] = P2P_DEFAULT_DEV_NAME; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - ASSERT(prP2PConnSettings); - - /* Setup Default Device Name */ - prP2PConnSettings->ucDevNameLen = P2P_DEFAULT_DEV_NAME_LEN; - kalMemCopy(prP2PConnSettings->aucDevName, aucDefaultDevName, sizeof(aucDefaultDevName)); - - /* Setup Primary Device Type (Big-Endian) */ - prDevType = &prP2PConnSettings->rPrimaryDevTypeBE; - - prDevType->u2CategoryId = HTONS(P2P_DEFAULT_PRIMARY_CATEGORY_ID); - prDevType->u2SubCategoryId = HTONS(P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID); - - prDevType->aucOui[0] = aucWfaOui[0]; - prDevType->aucOui[1] = aucWfaOui[1]; - prDevType->aucOui[2] = aucWfaOui[2]; - prDevType->aucOui[3] = VENDOR_OUI_TYPE_WPS; - - /* Setup Secondary Device Type */ - prP2PConnSettings->ucSecondaryDevTypeCount = 0; - - /* Setup Default Config Method */ - prP2PConnSettings->eConfigMethodSelType = ENUM_CONFIG_METHOD_SEL_AUTO; - prP2PConnSettings->u2ConfigMethodsSupport = P2P_DEFAULT_CONFIG_METHOD; - prP2PConnSettings->u2TargetConfigMethod = 0; - prP2PConnSettings->u2LocalConfigMethod = 0; - prP2PConnSettings->fgIsPasswordIDRdy = FALSE; - - /* For Device Capability */ - prP2PConnSettings->fgSupportServiceDiscovery = FALSE; - prP2PConnSettings->fgSupportClientDiscoverability = TRUE; - prP2PConnSettings->fgSupportConcurrentOperation = TRUE; - prP2PConnSettings->fgSupportInfraManaged = FALSE; - prP2PConnSettings->fgSupportInvitationProcedure = FALSE; - - /* For Group Capability */ -#if CFG_SUPPORT_PERSISTENT_GROUP - prP2PConnSettings->fgSupportPersistentP2PGroup = TRUE; -#else - prP2PConnSettings->fgSupportPersistentP2PGroup = FALSE; -#endif - prP2PConnSettings->fgSupportIntraBSSDistribution = TRUE; - prP2PConnSettings->fgSupportCrossConnection = TRUE; - prP2PConnSettings->fgSupportPersistentReconnect = FALSE; - - prP2PConnSettings->fgSupportOppPS = FALSE; - prP2PConnSettings->u2CTWindow = P2P_CTWINDOW_DEFAULT; - - /* For Connection Settings. */ - prP2PConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prP2PConnSettings->prTargetP2pDesc = NULL; - prP2PConnSettings->ucSSIDLen = 0; - - /* Misc */ - prP2PConnSettings->fgIsScanReqIssued = FALSE; - prP2PConnSettings->fgIsServiceDiscoverIssued = FALSE; - prP2PConnSettings->fgP2pGroupLimit = FALSE; - prP2PConnSettings->ucOperatingChnl = 0; - prP2PConnSettings->ucListenChnl = 0; - prP2PConnSettings->ucTieBreaker = (UINT_8)(kalRandomNumber() & 0x1); - - prP2PConnSettings->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - return; -} /* p2pFuncInitConnectionSettings */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = TRUE; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - /* TODO(Kevin): Call P2P functions to check .. - 2. Check we can accept connection from thsi peer - a. If we are in PROVISION state, only accept the peer we do the GO formation previously. - b. If we are in OPERATION state, only accept the other peer when P2P_GROUP_LIMIT is 0. - 3. Check Black List here. - */ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pu2StatusCode != NULL)); - - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)prSwRfb->pvHeader; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - /* Station record should be ready while RX AUTH frame. */ - fgReplyAssocResp = FALSE; - ASSERT(FALSE); - break; - } - else { - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - prStaRec->u2DesiredNonHTRateSet &= prP2pBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prP2pBssInfo->ucPhyTypeSet; - - if (prStaRec->ucDesiredPhyTypeSet == 0) { - /* The station only support 11B rate. */ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - - return fgReplyAssocResp; - -} /* p2pFuncValidateAssocReq */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to check the P2P IE -* -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncParseCheckForP2PInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - P_IE_WFA_T prWfaIE = (P_IE_WFA_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pucOuiType != NULL)); - - prWfaIE = (P_IE_WFA_T)pucBuf; - - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - - return TRUE; - } while (FALSE); - - return FALSE; -} /* p2pFuncParseCheckForP2PInfoElem */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - BOOLEAN fgIsReplyProbeRsp = FALSE; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_PROBE_REQ) { - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return fgIsReplyProbeRsp; - -} /* end of p2pFuncValidateProbeReq() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncValidateRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_ACTION_FRAME) { - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return; - -} /* p2pFuncValidateRxMgmtFrame */ - - - - -BOOLEAN -p2pFuncIsAPMode ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - if (prP2pFsmInfo) { - return prP2pFsmInfo->fgIsApMode; - } - else { - return FALSE; - } -} -/* p2pFuncIsAPMode */ - - - -VOID -p2pFuncParseBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ) -{ - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - BOOL ucNewSecMode = FALSE; - BOOL ucOldSecMode = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL)); - - if (u4IELen == 0) { - break; - } - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pSpecificBssInfo->u2AttributeLen = 0; - - ASSERT_BREAK(pucIEInfo != NULL); - - pucIE = pucIEInfo; - - ucOldSecMode = kalP2PGetCipher(prAdapter->prGlueInfo); - - IE_FOR_EACH(pucIE, u4IELen, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: /* 0 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("SSID update\n")); - - /* Update when starting GO. */ - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - COPY_SSID(prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - } - break; - case ELEM_ID_SUP_RATES: /* 1 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("Support Rate IE\n")); - kalMemCopy(prP2pBssInfo->aucAllSupportedRates, - SUP_RATES_IE(pucIE)->aucSupportedRates, - SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen = SUP_RATES_IE(pucIE)->ucLength; - - DBGLOG_MEM8(P2P, TRACE, SUP_RATES_IE(pucIE)->aucSupportedRates, SUP_RATES_IE(pucIE)->ucLength); - } - break; - case ELEM_ID_DS_PARAM_SET: /* 3 */ /* V */ /* Done */ - { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("DS PARAM IE\n")); - - ASSERT(prP2pConnSettings->ucOperatingChnl == DS_PARAM_IE(pucIE)->ucCurrChnl); - - if (prP2pConnSettings->eBand != BAND_2G4) { - ASSERT(FALSE); - break; - } - - //prP2pBssInfo->ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - - //prP2pBssInfo->eBand = BAND_2G4; - } - break; - case ELEM_ID_TIM: /* 5 */ /* V */ - DBGLOG(P2P, TRACE, ("TIM IE\n")); - TIM_IE(pucIE)->ucDTIMPeriod = prP2pBssInfo->ucDTIMPeriod; - break; - case ELEM_ID_ERP_INFO: /* 42 */ /* V */ - { -#if 1 - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE will be over write by driver\n")); - DBGLOG(P2P, TRACE, (" ucERP: %x. \n", ERP_INFO_IE(pucIE)->ucERP)); - -#else - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE.\n")); - - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11GN; - - ASSERT(prP2pBssInfo->eBand == BAND_2G4); - - prP2pBssInfo->fgObssErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & ERP_INFO_USE_PROTECTION)? TRUE : FALSE); - - prP2pBssInfo->fgErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & (ERP_INFO_USE_PROTECTION | ERP_INFO_NON_ERP_PRESENT))? TRUE : FALSE); -#endif - - } - break; - case ELEM_ID_HT_CAP: /* 45 */ /* V */ - { -#if 1 - DBGLOG(P2P, TRACE, ("HT CAP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, ("HT Cap Info:%x, AMPDU Param:%x\n", HT_CAP_IE(pucIE)->u2HtCapInfo, HT_CAP_IE(pucIE)->ucAmpduParam)); - - DBGLOG(P2P, TRACE, ("HT Extended Cap Info:%x, TX Beamforming Cap Info:%lx, Ant Selection Cap Info%x \n", - HT_CAP_IE(pucIE)->u2HtExtendedCap, - HT_CAP_IE(pucIE)->u4TxBeamformingCap, - HT_CAP_IE(pucIE)->ucAselCap)); -#else - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - /* u2HtCapInfo */ - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SUP_CHNL_WIDTH | HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M)) == 0) { - prP2pBssInfo->fgAssoc40mBwAllowed = FALSE; - } - else { - prP2pBssInfo->fgAssoc40mBwAllowed = TRUE; - } - - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M)) == 0) { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - } - else { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = FALSE; - } - - /* ucAmpduParam */ - DBGLOG(P2P, TRACE, ("AMPDU setting from supplicant:0x%x, & default value:0x%x\n", (UINT_8)HT_CAP_IE(pucIE)->ucAmpduParam, (UINT_8)AMPDU_PARAM_DEFAULT_VAL)); - - /* rSupMcsSet */ - /* Can do nothing. the field is default value from other configuration. */ - //HT_CAP_IE(pucIE)->rSupMcsSet; - - /* u2HtExtendedCap */ - ASSERT(HT_CAP_IE(pucIE)->u2HtExtendedCap == (HT_EXT_CAP_DEFAULT_VAL & ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE))); - - /* u4TxBeamformingCap */ - ASSERT(HT_CAP_IE(pucIE)->u4TxBeamformingCap == TX_BEAMFORMING_CAP_DEFAULT_VAL); - - /* ucAselCap */ - ASSERT(HT_CAP_IE(pucIE)->ucAselCap == ASEL_CAP_DEFAULT_VAL); -#endif - } - break; - case ELEM_ID_RSN: /* 48 */ /* V */ - { - RSN_INFO_T rRsnIe; - - DBGLOG(P2P, TRACE, ("RSN IE\n")); - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - ucNewSecMode = TRUE; - - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &rRsnIe)) { - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - prP2pBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; - prP2pBssInfo->u2RsnSelectedCapInfo = rRsnIe.u2RsnCap; - } - } - break; - case ELEM_ID_EXTENDED_SUP_RATES: /* 50 */ /* V */ - /* Be attention, ELEM_ID_SUP_RATES should be placed before ELEM_ID_EXTENDED_SUP_RATES. */ - DBGLOG(P2P, TRACE, ("Ex Support Rate IE\n")); - kalMemCopy(&(prP2pBssInfo->aucAllSupportedRates[prP2pBssInfo->ucAllSupportedRatesLen]), - EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, - EXT_SUP_RATES_IE(pucIE)->ucLength); - - DBGLOG_MEM8(P2P, TRACE, EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, EXT_SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen += EXT_SUP_RATES_IE(pucIE)->ucLength; - break; - case ELEM_ID_HT_OP: /* 61 */ /* V */ // TODO: - { -#if 1 - DBGLOG(P2P, TRACE, ("HT OP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, (" Primary Channel: %x, Info1: %x, Info2: %x, Info3: %x\n", - HT_OP_IE(pucIE)->ucPrimaryChannel, - HT_OP_IE(pucIE)->ucInfo1, - HT_OP_IE(pucIE)->u2Info2, - HT_OP_IE(pucIE)->u2Info3)); -#else - UINT_16 u2Info2 = 0; - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - DBGLOG(P2P, TRACE, ("HT OP IE\n")); - - /* ucPrimaryChannel. */ - ASSERT(HT_OP_IE(pucIE)->ucPrimaryChannel == prP2pBssInfo->ucPrimaryChannel); - - /* ucInfo1 */ - prP2pBssInfo->ucHtOpInfo1 = HT_OP_IE(pucIE)->ucInfo1; - - /* u2Info2 */ - u2Info2 = HT_OP_IE(pucIE)->u2Info2; - - if (u2Info2 & HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - ASSERT(prP2pBssInfo->eGfOperationMode != GF_MODE_NORMAL); - u2Info2 &= ~HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (u2Info2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) { - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - u2Info2 &= ~HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - switch (u2Info2 & HT_OP_INFO2_HT_PROTECTION) { - case HT_PROTECT_MODE_NON_HT: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NON_HT; - break; - case HT_PROTECT_MODE_NON_MEMBER: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - break; - default: - prP2pBssInfo->eHtProtectMode = HT_OP_IE(pucIE)->u2Info2; - break; - } - - /* u2Info3 */ - prP2pBssInfo->u2HtOpInfo3 = HT_OP_IE(pucIE)->u2Info3; - - /* aucBasicMcsSet */ - DBGLOG_MEM8(P2P, TRACE, HT_OP_IE(pucIE)->aucBasicMcsSet, 16); -#endif - } - break; - case ELEM_ID_OBSS_SCAN_PARAMS: /* 74 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_OBSS_SCAN_PARAMS IE would be replaced by driver\n")); - } - break; - case ELEM_ID_EXTENDED_CAP: /* 127 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_EXTENDED_CAP IE would be replaced by driver\n")); - } - break; - case ELEM_ID_VENDOR: /* 221 */ /* V */ - DBGLOG(P2P, TRACE, ("Vender Specific IE\n")); - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_TKIP); - ucNewSecMode = TRUE; - } - else if ((ucOuiType == VENDOR_OUI_TYPE_WPS)) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 0, pucIE, IE_SIZE(pucIE)); - } - - // WMM here. - } - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - // TODO Store the whole P2P IE & generate later. - // Be aware that there may be one or more P2P IE. - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - } - } - else { - - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - DBGLOG(P2P, TRACE, ("Driver unprocessed Vender Specific IE\n")); - ASSERT(FALSE); - } - - // TODO: Store other Vender IE except for WMM Param. - } - break; - default: - DBGLOG(P2P, TRACE, ("Unprocessed element ID:%d \n", IE_ID(pucIE))); - break; - } - } - - if (!ucNewSecMode && ucOldSecMode) - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_NONE); - - } while (FALSE); - - return; -} /* p2pFuncParseBeaconContent */ - - - - -P_BSS_DESC_T -p2pFuncKeepOnConnection ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - P_BSS_DESC_T prTargetBss = (P_BSS_DESC_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prConnReqInfo != NULL) && - (prChnlReqInfo != NULL) && - (prScanReqInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - // Update connection request information. - ASSERT(prConnReqInfo->fgIsConnRequest == TRUE); - - /* Find BSS Descriptor first. */ - prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_FULL; - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prTargetBss->ucChannelNum; - prChnlReqInfo->eBand = prTargetBss->eBand; - prChnlReqInfo->eChnlSco = prTargetBss->eSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - } - - } while (FALSE); - - return prTargetBss; -} /* p2pFuncKeepOnConnection */ - -/* Currently Only for ASSOC Response Frame. */ -VOID -p2pFuncStoreAssocRspIEBuffer ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - INT_16 i2IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)prSwRfb->pvHeader; - - if (prAssocRspFrame->u2FrameCtrl != MAC_FRAME_ASSOC_RSP) { - break; - } - - i2IELen = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + - CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - - if (i2IELen <= 0) { - break; - } - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinInfo->u4BufLength = (UINT_32)i2IELen; - - kalMemCopy(prJoinInfo->aucIEBuf, prAssocRspFrame->aucInfoElem, prJoinInfo->u4BufLength); - - } while (FALSE); - - - return; -} /* p2pFuncStoreAssocRspIEBuffer */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ) -{ - UINT_32 u4NewPacketFilter = 0; - - DEBUGFUNC("p2pFuncMgmtFrameRegister"); - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (pu4P2pPacketFilter) { - u4NewPacketFilter = *pu4P2pPacketFilter; - } - - switch (u2FrameType) { - case MAC_FRAME_PROBE_REQ: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, TRACE, ("Ask frog to add code for mgmt:%x\n", u2FrameType)); - break; - } - - if (pu4P2pPacketFilter) { - *pu4P2pPacketFilter = u4NewPacketFilter; - } - -// u4NewPacketFilter |= prAdapter->u4OsPacketFilter; - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4NewPacketFilter, - sizeof(u4NewPacketFilter) - ); - - } while (FALSE); - - return; -} /* p2pFuncMgmtFrameRegister */ - - -VOID -p2pFuncUpdateMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ) -{ - - do { - - prAdapter->rWifiVar.prP2pFsmInfo->u4P2pPacketFilter = u4OsFilter; - - if ((prAdapter->u4OsPacketFilter & PARAM_PACKET_FILTER_P2P_MASK) ^ u4OsFilter) { - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - - prAdapter->u4OsPacketFilter |= (u4OsFilter & PARAM_PACKET_FILTER_P2P_MASK); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4OsFilter, - sizeof(u4OsFilter) - ); - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - } - - } while (FALSE); - - - - - return; -} /* p2pFuncUpdateMgmtFrameRegister */ - - -VOID -p2pFuncGetStationInfo ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ) -{ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (pucMacAddr != NULL) && - (prStaInfo != NULL)); - - prStaInfo->u4InactiveTime = 0; - prStaInfo->u4RxBytes = 0; - prStaInfo->u4TxBytes = 0; - prStaInfo->u4RxPackets = 0; - prStaInfo->u4TxPackets = 0; - // TODO: - - } while (FALSE); - - return; -} /* p2pFuncGetStationInfo */ - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ) -{ - P_MSDU_INFO_T prRetMsduInfo = prMgmtTxMsdu; - P_WLAN_PROBE_RSP_FRAME_T prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_16 u2Offset = 0, u2IELength = 0, u2ProbeRspHdrLen = 0; - BOOLEAN fgIsP2PIE = FALSE, fgIsWSCIE = FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2EstimateSize = 0, u2EstimatedExtraIELen = 0; - UINT_32 u4IeArraySize = 0, u4Idx = 0; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxMsdu != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - //3 Make sure this is probe response frame. - prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - ASSERT_BREAK((prProbeRspFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_PROBE_RSP); - - //3 Get the importent P2P IE. - u2ProbeRspHdrLen = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - pucIEBuf = prProbeRspFrame->aucInfoElem; - u2IELength = prMgmtTxMsdu->u2FrameLength - u2ProbeRspHdrLen; - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - switch (IE_ID(pucIEBuf)) { - case ELEM_ID_SSID: - { - - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIEBuf)->aucSSID, - SSID_IE(pucIEBuf)->ucLength); - } - break; - case ELEM_ID_VENDOR: - { - UINT_8 ucOuiType = 0; - UINT_16 u2SubTypeVersion = 0; - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIEBuf, &ucOuiType, &u2SubTypeVersion)) { - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 2, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsWSCIE = TRUE; - } - - } - - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIEBuf, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - //2 Note(frog): I use WSC IE buffer for Probe Request to store the P2P IE for Probe Response. - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 1, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsP2PIE = TRUE; - } - - } - - } - break; - default: - break; - } - - } - - - //3 Check the total size & current frame. - u2EstimateSize = WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET); - - u2EstimatedExtraIELen = 0; - - u4IeArraySize = sizeof(txProbeRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += txProbeRspIETable[u4Idx].u2EstimatedFixedIELen; - } - - else { - ASSERT(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16)(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen(prAdapter, - NETWORK_TYPE_P2P_INDEX, - NULL)); - } - - } - - - if (fgIsWSCIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - - - - - if ((u2EstimateSize += u2EstimatedExtraIELen) > (prRetMsduInfo->u2FrameLength)) { - prRetMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimateSize); - - if (prRetMsduInfo == NULL) { - DBGLOG(P2P, WARN, ("No packet for sending new probe response, use original one\n")); - prRetMsduInfo = prMgmtTxMsdu; - break; - } - - - prRetMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - - - //3 Compose / Re-compose probe response frame. - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prRetMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prProbeRspFrame->aucDestAddr, - prProbeRspFrame->aucSrcAddr, - prProbeRspFrame->aucBSSID, - prProbeRspFrame->u2BeaconInterval, - prProbeRspFrame->u2CapInfo); - - prRetMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - - bssBuildBeaconProbeRespFrameCommonIEs(prRetMsduInfo, - prP2pBssInfo, - prProbeRspFrame->aucDestAddr); - - - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].pfnAppendIE) { - txProbeRspIETable[u4Idx].pfnAppendIE(prAdapter, prRetMsduInfo); - } - - } - - - if (fgIsWSCIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 2, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 1, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - - - } while (FALSE); - - if (prRetMsduInfo != prMgmtTxMsdu) { - cnmMgtPktFree(prAdapter, prMgmtTxMsdu); - } - - - return prRetMsduInfo; -} /* p2pFuncProcessP2pProbeRsp */ - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - -VOID -p2pFuncGenerateExtra_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucBeaconIECache, prP2pSpeBssInfo->u2IELenForBCN); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return; -} /* p2pFuncGenerateExtra_IEForBeacon */ - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateP2p_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucAttributesCache, prP2pSpeBssInfo->u2AttributeLen); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - - - - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateWSC_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - UINT_16 u2IELen = 0; - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_P2P_INDEX) { - return; - } - - u2IELen = (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - // TODO: Check P2P FSM State. - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 0, - pucBuffer); - - prMsduInfo->u2FrameLength += u2IELen; - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return p2pFuncCalculateP2P_IELen(prAdapter, - eNetTypeIndex, - prStaRec, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - -} /* p2pFuncCalculateP2p_IELenForAssocRsp */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncGenerateP2p_IEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - DBGLOG(P2P, TRACE, ("Generate NULL P2P IE for Assoc Rsp.\n")); - - p2pFuncGenerateP2P_IE(prAdapter, - TRUE, - &prMsduInfo->u2FrameLength, - prMsduInfo->prPacket, - 1500, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - } - else { - - DBGLOG(P2P, TRACE, ("Legacy device, no P2P IE.\n")); - } - - } while (FALSE); - - return; - -} /* p2pFuncGenerateP2p_IEForAssocRsp */ - - - - -UINT_32 -p2pFuncCalculateP2P_IELen ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - - UINT_32 u4OverallAttriLen, u4Dummy; - UINT_16 u2EstimatedFixedAttriLen; - UINT_32 i; - - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - for (i = 0; i < u4AttriTableSize; i++) { - u2EstimatedFixedAttriLen = arAppendAttriTable[i].u2EstimatedFixedAttriLen; - - if (u2EstimatedFixedAttriLen) { - u4OverallAttriLen += u2EstimatedFixedAttriLen; - } - else { - ASSERT(arAppendAttriTable[i].pfnCalculateVariableAttriLen); - - u4OverallAttriLen += - arAppendAttriTable[i].pfnCalculateVariableAttriLen(prAdapter, prStaRec); - } - } - - u4Dummy = u4OverallAttriLen; - u4OverallAttriLen += P2P_IE_OUI_HDR; - - for (;(u4Dummy > P2P_MAXIMUM_ATTRIBUTE_LEN);) { - u4OverallAttriLen += P2P_IE_OUI_HDR; - u4Dummy -= P2P_MAXIMUM_ATTRIBUTE_LEN; - } - - return u4OverallAttriLen; -} /* p2pFuncCalculateP2P_IELen */ - - -VOID -p2pFuncGenerateP2P_IE ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_P2P_T prIeP2P = (P_IE_P2P_T)NULL; - UINT_32 u4OverallAttriLen; - UINT_32 u4AttriLen; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN]; - UINT_32 i; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - /* Check buffer length is still enough. */ - ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= P2P_IE_OUI_HDR); - - prIeP2P = (P_IE_P2P_T)pucBuffer; - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - (*pu2Offset) += P2P_IE_OUI_HDR; - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - - for (i = 0; i < u4AttriTableSize; i++) { - - if (arAppendAttriTable[i].pfnAppendAttri) { - u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize); - - u4OverallAttriLen += u4AttriLen; - - if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) { - u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN; - - prIeP2P->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN); - - pucBuffer = (PUINT_8)((UINT_32)prIeP2P + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - prIeP2P = (P_IE_P2P_T)((UINT_32)prIeP2P + - (ELEM_HDR_LEN + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN))); - - kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen); - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - kalMemCopy(prIeP2P->aucP2PAttributes, aucTempBuffer, u4OverallAttriLen); - (*pu2Offset) += P2P_IE_OUI_HDR; - } - - } - - } - - prIeP2P->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen); - - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2P_IE */ - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - PUINT_8 pucBuffer; - P_P2P_ATTRI_STATUS_T prAttriStatus; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 u4AttriLen = 0; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For assoc request P2P IE check in driver & return status in P2P IE. - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - prAttriStatus = (P_P2P_ATTRI_STATUS_T)pucBuffer; - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - - - - prAttriStatus->ucId = P2P_ATTRI_ID_STATUS; - WLAN_SET_FIELD_16(&prAttriStatus->u2Length, P2P_ATTRI_MAX_LEN_STATUS); - - prAttriStatus->ucStatusCode = P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriStatusForAssocRsp */ - -UINT_32 -p2pFuncAppendAttriExtListenTiming ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - P_P2P_ATTRI_EXT_LISTEN_TIMING_T prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucBuffer = NULL; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For extend listen timing. - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - - prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)pucBuffer; - - prP2pExtListenTiming->ucId = P2P_ATTRI_ID_EXT_LISTEN_TIMING; - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2Length, P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailInterval, prP2pSpecificBssInfo->u2AvailabilityInterval); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailPeriod, prP2pSpecificBssInfo->u2AvailabilityPeriod); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriExtListenTiming */ - - -P_IE_HDR_T -p2pFuncGetSpecIE ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ) -{ - P_IE_HDR_T prTargetIE = (P_IE_HDR_T)NULL; - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - pucIE = pucIEBuf; - - if (pfgIsMore) { - *pfgIsMore = FALSE; - } - - - IE_FOR_EACH(pucIE, u2BufferLen, u2Offset) { - if (IE_ID(pucIE) == ucElemID) { - if ((prTargetIE) && (pfgIsMore)) { - - *pfgIsMore = TRUE; - break; - } - else { - prTargetIE = (P_IE_HDR_T)pucIE; - - if (pfgIsMore == NULL) { - break; - } - - } - - } - } - - } while (FALSE); - - return prTargetIE; -} /* p2pFuncGetSpecIE */ - - - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucAttriID - ) -{ - P_IE_P2P_T prP2pIE = (P_IE_P2P_T)NULL; - P_ATTRIBUTE_HDR_T prTargetAttri = (P_ATTRIBUTE_HDR_T)NULL; - BOOLEAN fgIsMore = FALSE; - PUINT_8 pucIE = (PUINT_8)NULL, pucAttri = (PUINT_8)NULL; - UINT_16 u2OffsetAttri = 0; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - pucIE = pucIEBuf; - - do { - prP2pIE = (P_IE_P2P_T)p2pFuncGetSpecIE(prAdapter, - pucIE, - u2BufferLen, - ELEM_ID_VENDOR, - &fgIsMore); - - if (prP2pIE) { - if (prP2pIE->ucOuiType == ucOuiType) { - switch (ucOuiType) { - case VENDOR_OUI_TYPE_WPS: - aucWfaOui[0] = 0x00; - aucWfaOui[1] = 0x50; - aucWfaOui[2] = 0xF2; - break; - case VENDOR_OUI_TYPE_P2P: - break; - case VENDOR_OUI_TYPE_WPA: - case VENDOR_OUI_TYPE_WMM: - default: - break; - } - - - if ((prP2pIE->aucOui[0] == aucWfaOui[0]) && - (prP2pIE->aucOui[1] == aucWfaOui[1]) && - (prP2pIE->aucOui[2] == aucWfaOui[2])) { - - pucAttri = prP2pIE->aucP2PAttributes; - - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - WSC_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_IE_OUI_HDR), u2OffsetAttri) { - if (WSC_ATTRI_ID(pucAttri) == ucAttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - - } - - else if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - P2P_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_IE_OUI_HDR), u2OffsetAttri) { - if (ATTRI_ID(pucAttri) == ucAttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - - } - - else { - // Possible WiFi Display or else. - ASSERT(FALSE); - } - } - - - } - - } - - - pucIE = (PUINT_8)((UINT_32)prP2pIE + IE_LEN(prP2pIE)); - - } while (fgIsMore); - - } while (FALSE); - - return prTargetAttri; -} -/* p2pFuncGetSpecAttri */ - - -WLAN_STATUS -p2pFuncGenerateBeaconProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_MSDU_INFO_T prMsduInfo, - IN BOOLEAN fgIsProbeRsp - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; -// P_APPEND_VAR_IE_ENTRY_T prAppendIeTable = (P_APPEND_VAR_IE_ENTRY_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prBssInfo != NULL) && - (prMsduInfo != NULL)); - - -// txBcnIETable - -// txProbeRspIETable - - - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncGenerateBeaconProbeRsp */ - - -WLAN_STATUS -p2pFuncComposeBeaconProbeRspTemplate ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnBuffer, - IN UINT_32 u4BcnBufLen, - IN BOOLEAN fgIsProbeRsp, - IN P_P2P_PROBE_RSP_UPDATE_INFO_T prP2pProbeRspInfo, - IN BOOLEAN fgSynToFW - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - PUINT_8 pucBuffer = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBcnBuffer != NULL)); - - prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)pucBcnBuffer; - - if ((prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_BEACON) && (!fgIsProbeRsp)) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - else if (prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_PROBE_RSP) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - - - if (fgIsProbeRsp) { - ASSERT_BREAK(prP2pProbeRspInfo != NULL); - - if (!prP2pProbeRspInfo->prProbeRspMsduTemplate) { - cnmMgtPktFree(prAdapter, prP2pProbeRspInfo->prProbeRspMsduTemplate); - } - - prP2pProbeRspInfo->prProbeRspMsduTemplate = cnmMgtPktAlloc(prAdapter, u4BcnBufLen); - - prMsduInfo = prP2pProbeRspInfo->prProbeRspMsduTemplate; - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - } - else { - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prMsduInfo = prP2pBssInfo->prBeacon; - - if (prMsduInfo == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - - if (u4BcnBufLen > (OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH)) { - /* Unexpected error, buffer overflow. */ - ASSERT(FALSE); - break; - } - - } - - - pucBuffer = (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucBuffer, pucBcnBuffer, u4BcnBufLen); - - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (UINT_16)u4BcnBufLen; - - if (fgSynToFW) { - rWlanStatus = p2pFuncGenerateBeaconProbeRsp(prAdapter, prP2pBssInfo, prMsduInfo, fgIsProbeRsp); - } - - } while (FALSE); - - return rWlanStatus; - -} /* p2pFuncComposeBeaconTemplate */ - - - - - - - - - - - - - - - - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_ie.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_ie.c deleted file mode 100755 index 6a658df56efe..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_ie.c +++ /dev/null @@ -1,72 +0,0 @@ -#include "p2p_precomp.h" - - - -UINT_32 -p2pCalculate_IEForAssocReq ( - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - UINT_32 u4RetValue = 0; - - do { - ASSERT_BREAK((eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) && (prAdapter != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - u4RetValue = prConnReqInfo->u4BufLength; - - } -while (FALSE); - - return u4RetValue; -} /* p2pCalculate_IEForAssocReq */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerate_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prConnReqInfo->aucIEBuf, prConnReqInfo->u4BufLength); - - prMsduInfo->u2FrameLength += prConnReqInfo->u4BufLength; - - } while (FALSE); - - return; - -} /* p2pGenerate_IEForAssocReq */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_rlm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_rlm.c deleted file mode 100755 index 98941d1414e1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_rlm.c +++ /dev/null @@ -1,1014 +0,0 @@ -/* -** $Id: @(#) p2p_rlm.c@@ -*/ - -/*! \file "p2p_rlm.c" - \brief - -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -extern VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init AP Bss -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ENUM_BAND_T eBand; - UINT_8 ucChannel; - ENUM_CHNL_EXT_T eSCO; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - /* Operation band, channel shall be ready before invoking this function. - * Bandwidth may be ready if other network is connected - */ - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (RLM_AP_IS_BW_40_ALLOWED(prAdapter, prBssInfo)) { - /* In this case, the first BSS's SCO is 40MHz and known, so AP can - * apply 40MHz bandwidth, but the first BSS's SCO may be changed - * later if its Beacon lost timeout occurs - */ - if (cnmPreferredChannel(prAdapter, &eBand, &ucChannel, &eSCO) && - eSCO != CHNL_EXT_SCN && ucChannel == prBssInfo->ucPrimaryChannel && - eBand == prBssInfo->eBand) { - prBssInfo->eBssSCO = eSCO; - } - else if (cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex)) { - prBssInfo->eBssSCO = rlmDecideScoForAP(prAdapter, prBssInfo); - } - - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - prBssInfo->fg40mBwAllowed = TRUE; - prBssInfo->fgAssoc40mBwAllowed = TRUE; - - prBssInfo->ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - - rlmUpdateBwByChListForAP(prAdapter, prBssInfo); - } - } - - DBGLOG(RLM, INFO, ("WLAN AP SCO=%d\n", prBssInfo->eBssSCO)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_IE_OBSS_SCAN_PARAM_T prObssScanIe; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && !RLM_NET_IS_BOW(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) && - prBssInfo->eBand == BAND_2G4 && - prBssInfo->eBssSCO != CHNL_EXT_SCN) { - - prObssScanIe = (P_IE_OBSS_SCAN_PARAM_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add 20/40 BSS coexistence IE */ - prObssScanIe->ucId = ELEM_ID_OBSS_SCAN_PARAMS; - prObssScanIe->ucLength = sizeof(IE_OBSS_SCAN_PARAM_T) - ELEM_HDR_LEN; - - prObssScanIe->u2ScanPassiveDwell = - dot11OBSSScanPassiveDwell; - prObssScanIe->u2ScanActiveDwell = - dot11OBSSScanActiveDwell; - prObssScanIe->u2TriggerScanInterval = - dot11BSSWidthTriggerScanInterval; - prObssScanIe->u2ScanPassiveTotalPerChnl = - dot11OBSSScanPassiveTotalPerChannel; - prObssScanIe->u2ScanActiveTotalPerChnl = - dot11OBSSScanActiveTotalPerChannel; - prObssScanIe->u2WidthTransDelayFactor = - dot11BSSWidthChannelTransitionDelayFactor; - prObssScanIe->u2ScanActivityThres = - dot11OBSSScanActivityThreshold; - - ASSERT(IE_SIZE(prObssScanIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_OBSS_SCAN)); - - prMsduInfo->u2FrameLength += IE_SIZE(prObssScanIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P GO. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLevel; - BOOLEAN fgBwChange; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - fgBwChange = FALSE; - - if (prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return fgBwChange; - } - - ucLevel = rlmObssChnlLevel(prBssInfo, prBssInfo->eBand, - prBssInfo->ucPrimaryChannel, prBssInfo->eBssSCO); - - if (ucLevel == CHNL_LEVEL0) { - /* Forced to 20MHz, so extended channel is SCN and STA width is zero */ - prBssInfo->fgObssActionForcedTo20M = TRUE; - - if (prBssInfo->ucHtOpInfo1 != (UINT_8) CHNL_EXT_SCN) { - prBssInfo->ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - fgBwChange = TRUE; - } - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - OBSS_20_40M_TIMEOUT * MSEC_PER_SEC); - } - - /* Clear up all channel lists */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - return fgBwChange; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_20_40_COEXIST_FRAME prRxFrame; - P_IE_20_40_COEXIST_T prCoexist; - P_IE_INTOLERANT_CHNL_REPORT_T prChnlReport; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - PUINT_8 pucIE; - UINT_16 u2IELength, u2Offset; - UINT_8 i, j; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_PUBLIC_20_40_COEXIST || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < (WLAN_MAC_MGMT_HEADER_LEN + 5) || - HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr) != - NETWORK_TYPE_P2P_INDEX) { - return; - } - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT || - prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return; - } - - prCoexist = &prRxFrame->rBssCoexist; - if (prCoexist->ucData & (BSS_COEXIST_40M_INTOLERANT|BSS_COEXIST_20M_REQ)) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == - prBssInfo->ucPrimaryChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = prBssInfo->ucPrimaryChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - - /* Process intolerant channel report IE */ - pucIE = (PUINT_8) &prRxFrame->rChnlReport; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_MGMT_HEADER_LEN + 5); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_20_40_INTOLERANT_CHNL_REPORT: - prChnlReport = (P_IE_INTOLERANT_CHNL_REPORT_T) pucIE; - - if (prChnlReport->ucLength <= 1) { - break; - } - - /* To do: process regulatory class. Now we assume 2.4G band */ - - for (j = 0; j < prChnlReport->ucLength - 1; j++) { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == - prChnlReport->aucChannelList[j]) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = - prChnlReport->aucChannelList[j]; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - } - break; - - default: - break; - } - } /* end of IE_FOR_EACH */ - - if (rlmUpdateBwByChListForAP(prAdapter, prBssInfo)) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - rlmSyncOperationParams(prAdapter, prBssInfo); - } - - /* Check if OBSS scan exemption response should be sent */ - if (prCoexist->ucData & BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ) { - rlmObssScanExemptionRsp(prAdapter, prBssInfo, prSwRfb); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_NOTIFY_CHNL_WIDTH_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_NOTIFY_CHNL_WIDTH_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_HT_NOTIFY_CHANNEL_WIDTH || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < sizeof(ACTION_NOTIFY_CHNL_WIDTH_FRAME)) { - return; - } - - /* To do: depending regulation class 13 and 14 based on spec - * Note: (ucChannelWidth==1) shall restored back to original capability, - * not current setting to 40MHz BW here - */ - if (prRxFrame->ucChannelWidth == 0) { - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - } - else if (prRxFrame->ucChannelWidth == 1) { - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prObssStatus); - ASSERT(prObssStatus->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prObssStatus->ucNetTypeIndex]; - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - prBssInfo->fgObssErpProtectMode = - (BOOLEAN) prObssStatus->ucObssErpProtectMode; - prBssInfo->eObssHtProtectMode = - (ENUM_HT_PROTECT_MODE_T) prObssStatus->ucObssHtProtectMode; - prBssInfo->eObssGfOperationMode = - (ENUM_GF_MODE_T) prObssStatus->ucObssGfOperationMode; - prBssInfo->fgObssRifsOperationMode = - (BOOLEAN) prObssStatus->ucObssRifsOperationMode; - prBssInfo->fgObssBeaconForcedTo20M = - (BOOLEAN) prObssStatus->ucObssBeaconForcedTo20M; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, TRUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is only for AP mode in NETWORK_TYPE_P2P_INDEX. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ) -{ - P_LINK_T prStaList; - P_STA_RECORD_T prStaRec; - BOOLEAN fgErpProtectMode, fgSta40mIntolerant; - BOOLEAN fgUseShortPreamble, fgUseShortSlotTime; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - UINT_8 ucHtOpInfo1; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - fgErpProtectMode = FALSE; - eHtProtectMode = HT_PROTECT_MODE_NONE; - eGfOperationMode = GF_MODE_NORMAL; - fgSta40mIntolerant = FALSE; - fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - fgUseShortSlotTime = TRUE; - ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - - prStaList = &prBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH_ENTRY(prStaRec, prStaList, rLinkEntry, STA_RECORD_T) { - ASSERT(prStaRec); - if (prStaRec->fgIsInUse && prStaRec->ucStaState == STA_STATE_3 && - prStaRec->ucNetTypeIndex == prBssInfo->ucNetTypeIndex) { - if (!(prStaRec->ucPhyTypeSet & - (PHY_TYPE_SET_802_11GN | PHY_TYPE_SET_802_11A))) { - /* B-only mode, so mode 1 (ERP protection) */ - fgErpProtectMode = TRUE; - } - - if (!(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - /* BG-only or A-only */ - eHtProtectMode = HT_PROTECT_MODE_NON_HT; - } - else if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - /* 20MHz-only */ - if (eHtProtectMode == HT_PROTECT_MODE_NONE) { - eHtProtectMode = HT_PROTECT_MODE_20M; - } - } - - if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_HT_GF)) { - eGfOperationMode = GF_MODE_PROTECT; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) { - fgUseShortPreamble = FALSE; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) { - fgUseShortSlotTime = FALSE; - } - - if (prStaRec->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fgSta40mIntolerant = TRUE; - } - } - } /* end of LINK_FOR_EACH_ENTRY */ - - /* Check if HT operation IE about 20/40M bandwidth shall be updated */ - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - if (/*!LINK_IS_EMPTY(prStaList) && */ !fgSta40mIntolerant && - !prBssInfo->fgObssActionForcedTo20M && - !prBssInfo->fgObssBeaconForcedTo20M) { - - ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - } - } - - /* Check if any new parameter may be updated */ - if (prBssInfo->fgErpProtectMode != fgErpProtectMode || - prBssInfo->eHtProtectMode != eHtProtectMode || - prBssInfo->eGfOperationMode != eGfOperationMode || - prBssInfo->ucHtOpInfo1 != ucHtOpInfo1 || - prBssInfo->fgUseShortPreamble != fgUseShortPreamble || - prBssInfo->fgUseShortSlotTime != fgUseShortSlotTime) { - - prBssInfo->fgErpProtectMode = fgErpProtectMode; - prBssInfo->eHtProtectMode = eHtProtectMode; - prBssInfo->eGfOperationMode = eGfOperationMode; - prBssInfo->ucHtOpInfo1 = ucHtOpInfo1; - prBssInfo->fgUseShortPreamble = fgUseShortPreamble; - prBssInfo->fgUseShortSlotTime = fgUseShortSlotTime; - - if (fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - else { - prBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - } - - rlmSyncOperationParams(prAdapter, prBssInfo); - fgUpdateBeacon = TRUE; - } - - /* Update Beacon content if related IE content is changed */ - if (fgUpdateBeacon) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initial the channel list from the domain information. -* This function is called after P2P initial and Domain information changed. -* Make sure the device is disconnected while changing domain information. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncInitialChannelList ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_DOMAIN_INFO_ENTRY prDomainInfoEntry = (P_DOMAIN_INFO_ENTRY)NULL; - P_DOMAIN_SUBBAND_INFO prDomainSubBand = (P_DOMAIN_SUBBAND_INFO)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0, u4IdxII = 0; - UINT_8 ucBufferSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE; -#if 0 - UINT_8 ucSocialChnlSupport = 0, ucAutoChnl = 0; -#endif - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; -#if 0 - ucAutoChnl = prP2pConnSetting->ucOperatingChnl; -#endif - - prDomainInfoEntry = rlmDomainGetDomainInfo(prAdapter); - - ASSERT_BREAK((prDomainInfoEntry != NULL) && (prP2pConnSetting != NULL)); - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - for (u4Idx = 0; u4Idx < MAX_SUBBAND_NUM; u4Idx++) { - prDomainSubBand = &prDomainInfoEntry->rSubBand[u4Idx]; - - - if (((prDomainSubBand->ucBand == BAND_5G) && (!prAdapter->fgEnable5GBand)) || - (prDomainSubBand->ucBand == BAND_NULL)) { - continue; - } - - - if (ucBufferSize < (P2P_ATTRI_LEN_CHANNEL_ENTRY + prDomainSubBand->ucNumChannels)) { - /* Buffer is not enough to include all supported channels. */ - break; // for - } - - prChannelEntryField->ucRegulatoryClass = prDomainSubBand->ucRegClass; - prChannelEntryField->ucNumberOfChannels = prDomainSubBand->ucNumChannels; - - for (u4IdxII = 0; u4IdxII < prDomainSubBand->ucNumChannels; u4IdxII++) { - prChannelEntryField->aucChannelList[u4IdxII] = prDomainSubBand->ucFirstChannelNum + - (u4IdxII * prDomainSubBand->ucChannelSpan); - -#if 0 - switch (prChannelEntryField->aucChannelList[u4IdxII]) { - case 1: - ucSocialChnlSupport = 1; - break; - case 6: - ucSocialChnlSupport = 6; - break; - case 11: - ucSocialChnlSupport = 11; - break; - default: - break; - } - -#endif - } - - if (ucBufferSize >= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels)) { - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - else { - break; - } - - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - } - -#if 0 - if (prP2pConnSetting->ucListenChnl == 0) { - prP2pConnSetting->ucListenChnl = P2P_DEFAULT_LISTEN_CHANNEL; - - if (ucSocialChnlSupport != 0) { - /* 1. User Not Set LISTEN channel. - * 2. Social channel is not empty. - */ - prP2pConnSetting->ucListenChnl = ucSocialChnlSupport; - } - } - -#endif - - // TODO: 20110921 frog - - /* If LISTEN channel is not set, - * a random supported channel would be set. - * If no social channel is supported, DEFAULT channel would be set. - */ - - prP2pConnSetting->ucRfChannelListSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - ucBufferSize; - -#if 0 - if (prP2pConnSetting->ucOperatingChnl == 0) { /* User not set OPERATE channel. */ - - if (scnQuerySparseChannel(prAdapter, NULL, &ucAutoChnl)) { - break; // while - } - - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - if (prChannelEntryField->ucNumberOfChannels != 0) { - ucAutoChnl = prChannelEntryField->aucChannelList[0]; - break; // while - } - - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - - } - -#endif - /* We assume user would not set a channel not in the channel list. - * If so, the operating channel still depends on target deivce supporting capability. - */ - - // TODO: 20110921 frog - - /* If the Operating channel is not set, a channel from supported channel list is set automatically. - * If there is no supported channel in channel list, a DEFAULT channel is set. - */ - - } while (FALSE); - -#if 0 - prP2pConnSetting->ucOperatingChnl = ucAutoChnl; -#endif - return; -} /* rlmFuncInitialChannelList */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find a common channel list from the local channel list info & target channel list info. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncCommonChannelList ( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)NULL, prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_8 aucCommonChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; - UINT_8 ucOriChnlSize = 0, ucNewChnlSize = 0; - - - do { - - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)aucCommonChannelList; - - while (ucChannelListSize > 0) { - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - ucOriChnlSize = prP2pConnSetting->ucRfChannelListSize; - - while (ucOriChnlSize > 0) { - if (prChannelEntryI->ucRegulatoryClass == prChannelEntryII->ucRegulatoryClass) { - prChannelEntryIII->ucRegulatoryClass = prChannelEntryI->ucRegulatoryClass; - // TODO: Currently we assume that the regulatory class the same, the channels are the same. - kalMemCopy(prChannelEntryIII->aucChannelList, prChannelEntryII->aucChannelList, prChannelEntryII->ucNumberOfChannels); - prChannelEntryIII->ucNumberOfChannels = prChannelEntryII->ucNumberOfChannels; - - ucNewChnlSize += P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryIII->ucNumberOfChannels; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryIII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryIII->ucNumberOfChannels); - } - - ucOriChnlSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryI->ucNumberOfChannels); - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryI + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryI->ucNumberOfChannels); - - - } - - - ucChannelListSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryII->ucNumberOfChannels); - - prChannelEntryII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryII->ucNumberOfChannels); - - - } - - - kalMemCopy(prP2pConnSetting->aucChannelEntriesField, aucCommonChannelList, ucNewChnlSize); - prP2pConnSetting->ucRfChannelListSize = ucNewChnlSize; - - } while (FALSE); - - return; -} /* rlmFuncCommonChannelList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmFuncFindOperatingClass ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ) -{ - UINT_8 ucRegulatoryClass = 0, ucBufferSize = 0; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - - for (u4Idx = 0; u4Idx < prChannelEntryField->ucNumberOfChannels; u4Idx++) { - if (prChannelEntryField->aucChannelList[u4Idx] == ucChannelNum) { - ucRegulatoryClass = prChannelEntryField->ucRegulatoryClass; - break; - } - - } - - - if (ucRegulatoryClass != 0) { - break; //while - } - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - } while (FALSE); - - return ucRegulatoryClass; -} /* rlmFuncFindOperatingClass */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmFuncFindAvailableChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ) -{ - BOOLEAN fgIsResultAvailable = FALSE; - P_CHANNEL_ENTRY_FIELD_T prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_8 ucBufferSize = 0, ucIdx = 0, ucChannelSelected = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (fgIsDefaultChannel) { - ucChannelSelected = P2P_DEFAULT_LISTEN_CHANNEL; - } - - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while ((ucBufferSize != 0) && (!fgIsResultAvailable)) { - - for (ucIdx = 0; ucIdx < prChannelEntry->ucNumberOfChannels; ucIdx++) { - if ((!fgIsSocialChannel) || - (prChannelEntry->aucChannelList[ucIdx] == 1) || - (prChannelEntry->aucChannelList[ucIdx] == 6) || - (prChannelEntry->aucChannelList[ucIdx] == 11)) { - - if (prChannelEntry->aucChannelList[ucIdx] <= 11) { - /* 2.4G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - else if ((prChannelEntry->aucChannelList[ucIdx] < 52) && - (prChannelEntry->aucChannelList[ucIdx] > 14)) { - /* 2.4G + 5G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - - if (ucChannelSelected == ucCheckChnl) { - fgIsResultAvailable = TRUE; - break; - } - } - - } - - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntry->ucNumberOfChannels); - - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntry + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntry->ucNumberOfChannels); - - } - - - - if ((!fgIsResultAvailable) && (pucSuggestChannel != NULL)) { - DBGLOG(P2P, TRACE, ("The request channel %d is not available, sugguested channel:%d\n", ucCheckChnl, ucChannelSelected)); - // Given a suggested channel. - *pucSuggestChannel = ucChannelSelected; - } - - - } while (FALSE); - - return fgIsResultAvailable; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - UINT_8 ucSecondChannel, i, j; - ENUM_CHNL_EXT_T eSCO; - - eSCO = CHNL_EXT_SCN; - - if (prBssInfo->eBand == BAND_2G4) { - if (prBssInfo->ucPrimaryChannel != 14) { - eSCO = (prBssInfo->ucPrimaryChannel > 7) ? - CHNL_EXT_SCB : CHNL_EXT_SCA; - } - } - else { - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - if (prSubband->ucBand == prBssInfo->eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == prBssInfo->ucPrimaryChannel) { - eSCO = (j & 1) ? CHNL_EXT_SCB : CHNL_EXT_SCA; - break; - } - } - - if (j < prSubband->ucNumChannels) { - break; /* Found */ - } - } - } - } - - /* Check if it is boundary channel and 40MHz BW is permitted */ - if (eSCO != CHNL_EXT_SCN) { - ucSecondChannel = (eSCO == CHNL_EXT_SCA) ? - (prBssInfo->ucPrimaryChannel+ 4) : (prBssInfo->ucPrimaryChannel- 4); - - if (!rlmDomainIsLegalChannel(prAdapter, prBssInfo->eBand, ucSecondChannel)){ - eSCO = CHNL_EXT_SCN; - } - } - - return eSCO; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_rlm_obss.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_rlm_obss.c deleted file mode 100755 index f9045373157b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_rlm_obss.c +++ /dev/null @@ -1,374 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#include "precomp.h" - - -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Different concurrent network has itself channel lists, and -* concurrent networks should have been recorded in channel lists. -* If role of active P2P is GO, assume associated AP of AIS will -* record our Beacon for P2P GO because of same channel. -* -* Note: If we have scenario of different channel in the future, -* the internal FW communication channel shall be established. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 ucChannelLevel; - - ASSERT(prBssInfo); - - if (eBand == BAND_2G4) { - ucChannelLevel = rlmObssChnlLevelIn2G4(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else if (eBand == BAND_5G) { - ucChannelLevel = rlmObssChnlLevelIn5G(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else { - ucChannelLevel = CHNL_LEVEL0; - } - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel, ucCenterChannel; - UINT_8 ucAffectedChnl_L, ucAffectedChnl_H; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucCenterChannel = ucPriChannel + 2; - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucCenterChannel = ucPriChannel - 2; - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucCenterChannel >= 1 && ucCenterChannel <= 14); - - /* Calculated low/upper channels in affected freq range */ - ucAffectedChnl_L = (ucCenterChannel <= AFFECTED_CHNL_OFFSET) ? - 1 : (ucCenterChannel - AFFECTED_CHNL_OFFSET); - - ucAffectedChnl_H = (ucCenterChannel >= (14 - AFFECTED_CHNL_OFFSET)) ? - 14 : (ucCenterChannel + AFFECTED_CHNL_OFFSET); - - - /* Check intolerant (Non-HT) channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_NonHtChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_NonHtChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_NonHtChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 20M BW request channel list */ - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_20mReqChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_20mReqChnlList[i] <= ucAffectedChnl_H)) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G primary channel list */ - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_PriChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_PriChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_PriChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G secondary channel list */ - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_SecChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_SecChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_SecChnlList[i] != ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - -L_2G4_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucSecChannel >= 36); - - /* Check 5G primary channel list */ - ASSERT(prBssInfo->auc5G_PriChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_PriChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_PriChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_PriChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check non-HT channel list */ - ASSERT(prBssInfo->auc5G_NonHtChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_NonHtChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_NonHtChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check secondary channel list */ - ASSERT(prBssInfo->auc5G_SecChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_SecChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_SecChnlList[i] == ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - } - -L_5G_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - - /* To do: need an algorithm to do judgement. Now always reject request */ - - prMsduInfo = (P_MSDU_INFO_T) - cnmMgtPktAlloc(prAdapter, PUBLIC_ACTION_MAX_LEN); - if (prMsduInfo == NULL) { - return; - } - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence rsp frame!\n")); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) prMsduInfo->prPacket; - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, - ((P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader)->aucSrcAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = 0; - - ASSERT((WLAN_MAC_HEADER_LEN + 5) <= PUBLIC_ACTION_MAX_LEN); - - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex =prSwRfb->ucStaRecIdx; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_HTC_LEN + 5; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - /* Send them to HW queue */ - nicTxEnqueueMsdu(prAdapter, prMsduInfo); -} - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_scan.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_scan.c deleted file mode 100755 index 6e7a18e87aa0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_scan.c +++ /dev/null @@ -1,831 +0,0 @@ -/* -** $Id: @(#) p2p_scan.c@@ -*/ - -/*! \file "p2p_scan.c" - \brief This file defines the p2p scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_SCAN_INFO_T prScanInfo = (P_SCAN_INFO_T)NULL; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucDeviceID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* Loop for each prBssDesc */ - prTargetP2pDesc = scanFindP2pDeviceDesc(prAdapter, - prBssDesc, - aucDeviceID, - TRUE, - FALSE); - - if (prTargetP2pDesc != NULL) { - break; - } - } - - if ((pprBssDesc) && (prTargetP2pDesc != NULL)) { - /* Only valid if prTargetP2pDesc is not NULL. */ - *pprBssDesc = prBssDesc; - } - - return prTargetP2pDesc; -} /* scanSearchTargetP2pDesc */ - - - - -VOID -scanInvalidAllP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (prTargetDesc->fgDevInfoValid) { - prTargetDesc->fgDevInfoValid = FALSE; - } - } - - return; -} /* scanRenewP2pClientDevice */ - -VOID -scanRemoveInvalidP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL, prNexEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - LINK_FOR_EACH_SAFE(prLinkEntry, prNexEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (!prTargetDesc->fgDevInfoValid) { - LINK_REMOVE_KNOWN_ENTRY(&prBssDesc->rP2pDeviceList, prLinkEntry); - if ((prP2pConnSettings) && - (prP2pConnSettings->prTargetP2pDesc == prTargetDesc)) { - prP2pConnSettings->prTargetP2pDesc = NULL; - } - kalMemFree(prTargetDesc, VIR_MEM_TYPE, sizeof(P2P_DEVICE_DESC_T)); - } - } - - return; -} /* scanRenewP2pClientDevice */ - - - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prBssDesc != NULL) && - (aucMacAddr != NULL)); - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (fgIsDeviceAddr) { - if (EQUAL_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr)) { - break; - } - } - else { - if (EQUAL_MAC_ADDR(prTargetDesc->aucInterfaceAddr, aucMacAddr)) { - break; - } - } - - prTargetDesc = NULL; - } - - if ((fgAddIfNoFound) && (prTargetDesc == NULL)) { - /* Target Not Found. */ - // TODO: Use memory pool in the future. - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - } - else { - ASSERT(FALSE); - } - } - - } while (FALSE); - - return prTargetDesc; -} /* scanFindP2pDeviceDesc */ - - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - ASSERT(prAdapter); - ASSERT(prBssDesc); - - if (prBssDesc->prP2pDesc == NULL) { - - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - prBssDesc->prP2pDesc = prTargetDesc; - /* We are not sure the SrcAddr is Device Address or Interface Address. */ - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, prBssDesc->aucSrcAddr); - COPY_MAC_ADDR(prTargetDesc->aucInterfaceAddr, prBssDesc->aucSrcAddr); - } - else { - - ASSERT(FALSE); - } - } - else { - prTargetDesc = prBssDesc->prP2pDesc; - } - - - return prTargetDesc; - -} /* scanFindP2pDeviceDesc */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_DEVICE_DESC_T prP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - BOOLEAN fgUpdateDevInfo = FALSE; - - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - - ASSERT(prAdapter); - - prP2pDesc = scanGetP2pDeviceDesc(prAdapter, prBssDesc); - - if (!prP2pDesc) { - ASSERT(FALSE); - return fgUpdateDevInfo; - } - - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: /* Beacon, Probe Response */ - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - - prP2pDesc->ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - prP2pDesc->ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: /* Beacon */ - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == P2P_ATTRI_MAX_LEN_P2P_DEV_ID); - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: /* Probe Response */ - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - UINT_16 u2NameLen = 0, u2Id = 0; - - fgUpdateDevInfo = TRUE; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &prP2pDesc->rPriDevType; - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); // TODO: Fixme if secondary device type is more than 2. - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)((PUINT_8)prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &u2NameLen); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Id, &u2Id); - ASSERT(u2Id == WPS_ATTRI_ID_DEVICE_NAME); - if (u2NameLen > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - u2NameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - prP2pDesc->u2NameLength = u2NameLen; - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: /* Probe Response */ - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - case P2P_ATTRI_ID_NOTICE_OF_ABSENCE: - break; - case P2P_ATTRI_ID_EXT_LISTEN_TIMING: - // TODO: Not implement yet. - //ASSERT(FALSE); - break; - default: - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - scanInvalidAllP2pClientDevice(prAdapter, prBssDesc); - - /* GO/Device itself. */ - prP2pDesc->fgDevInfoValid = TRUE; - - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - - while (u2AttributeLen > 0) { - prP2pDesc = scanFindP2pDeviceDesc(prAdapter, prBssDesc, prClientInfoDesc->aucDevAddr, TRUE, TRUE); - - if (!prP2pDesc) { - ASSERT(FALSE); - break; /* while */ - } - - prP2pDesc->fgDevInfoValid = TRUE; - - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - if (u2AttributeLen < 25) { - DBGLOG(P2P, WARN, ("Length incorrect warning.\n")); - break; - } - COPY_MAC_ADDR(prP2pDesc->aucInterfaceAddr, prClientInfoDesc->aucIfAddr); - - prP2pDesc->ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - - WLAN_GET_FIELD_BE16(&prClientInfoDesc->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &(prP2pDesc->rPriDevType); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &prP2pDesc->u2NameLength); - if (prP2pDesc->u2NameLength > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prP2pDesc->u2NameLength = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - - u2AttributeLen -= (prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)((UINT_32)prClientInfoDesc + (UINT_32)prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - } - - scanRemoveInvalidP2pClientDevice(prAdapter, prBssDesc); - } - - return fgUpdateDevInfo; -} /* end of scanAddP2pDeviceInfo() */ - -#endif - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - EVENT_P2P_DEV_DISCOVER_RESULT_T rEventDevInfo; -#if 1 - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - COPY_MAC_ADDR(rEventDevInfo.aucDeviceAddr, prTargetDesc->aucDeviceAddr); - COPY_MAC_ADDR(rEventDevInfo.aucInterfaceAddr, prTargetDesc->aucInterfaceAddr); - - rEventDevInfo.ucDeviceCapabilityBitmap = prTargetDesc->ucDeviceCapabilityBitmap; - rEventDevInfo.ucGroupCapabilityBitmap = prTargetDesc->ucGroupCapabilityBitmap; - rEventDevInfo.u2ConfigMethod = prTargetDesc->u2ConfigMethod; - - kalMemCopy(&rEventDevInfo.rPriDevType, - &prTargetDesc->rPriDevType, - sizeof(P2P_DEVICE_TYPE_T)); - - kalMemCopy(rEventDevInfo.arSecDevType, - prTargetDesc->arSecDevType, - (prTargetDesc->ucSecDevTypeNum * sizeof(P2P_DEVICE_TYPE_T))); - - rEventDevInfo.ucSecDevTypeNum = prTargetDesc->ucSecDevTypeNum; - - rEventDevInfo.u2NameLength = prTargetDesc->u2NameLength; - kalMemCopy(rEventDevInfo.aucName, - prTargetDesc->aucName, - prTargetDesc->u2NameLength); - - COPY_MAC_ADDR(rEventDevInfo.aucBSSID, prBssDesc->aucBSSID); - - if (prTargetDesc == prBssDesc->prP2pDesc) { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - prBssDesc->aucIEBuf, - prBssDesc->u2IELength); - } - else { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - NULL, - 0); - } - } - - kalP2PIndicateFound(prAdapter->prGlueInfo); - -#else - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - - ASSERT(prAdapter); - - prP2pSpecificBssInfo = &prAdapter->rWifiVar.rP2pSpecificBssInfo; - -#if 1 - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); -#else - prP2pAttribute = (P_P2P_ATTRIBUTE_T)&prP2pSpecificBssInfo->aucAttributesCache[0]; - u2AttributeLen = prP2pSpecificBssInfo->u2AttributeLen; -#endif - rEventDevInfo.fgDevInfoValid = FALSE; - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - rEventDevInfo.ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - rEventDevInfo.ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == 6); - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - rEventDevInfo.u2ConfigMethod = prP2pAttriDevInfo->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prClientInfoDesc = prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - while (u2AttributeLen > 0) { - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prClientInfoDesc->aucIfAddr, MAC_ADDR_LEN); - rEventDevInfo.ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - rEventDevInfo.u2ConfigMethod = prClientInfoDesc->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(&rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - u2AttributeLen -= prP2pAttriGroupInfo->u2Length; - prP2pAttriGroupInfo = prP2pAttriGroupInfo + prP2pAttriGroupInfo->u2Length + 1; - } - - } -#endif - return WLAN_STATUS_SUCCESS; -} /* scanSendDeviceDiscoverEvent */ - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->fgIsP2PPresent) { - - if ((!prP2pBssInfo->ucDTIMPeriod) && // First time. - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && // P2P GC - (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && // Connected - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON) && // TX Beacon - EQUAL_SSID(prBssDesc->aucSSID, // SSID Match - prBssDesc->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen)) { - - - prP2pBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - do { - RF_CHANNEL_INFO_T rChannelInfo; - - ASSERT_BREAK((prSwRfb != NULL) && (prBssDesc != NULL)); - - if (((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) != MAC_FRAME_PROBE_RSP)) { - // Only report Probe Response frame to supplicant. - /* Probe response collect much more information. */ - break; - } - - rChannelInfo.ucChannelNum = prBssDesc->ucChannelNum; - rChannelInfo.eBand = prBssDesc->eBand; - - kalP2PIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - &rChannelInfo, - RCPI_TO_dBm(prBssDesc->ucRCPI)); - - - } while (FALSE); - } -} - -VOID -scnEventReturnChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ) -{ - - CMD_SCAN_CANCEL rCmdScanCancel; - - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = ucScnSeqNum; - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - return; -} /* scnEventReturnChannel */ - -VOID -scanRemoveAllP2pBssDesc( - IN P_ADAPTER_T prAdapter - ) -{ - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prBSSDescNext; - - ASSERT(prAdapter); - - prBSSDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - scanRemoveP2pBssDesc(prAdapter, prBssDesc); - } -} /* scanRemoveAllP2pBssDesc */ - -VOID -scanRemoveP2pBssDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - return; -} /* scanRemoveP2pBssDesc */ - - -P_BSS_DESC_T -scanP2pSearchDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ) -{ - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL, prBssDesc = (P_BSS_DESC_T)NULL; - P_LINK_T prBssDescList = (P_LINK_T)NULL; - - do { - if ((prAdapter == NULL) || - (prP2pBssInfo == NULL) || - (prConnReqInfo == NULL)) { - break; - } - - - prBssDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - DBGLOG(P2P, LOUD, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, LOUD, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - - LINK_FOR_EACH_ENTRY(prBssDesc, prBssDescList, rLinkEntry, BSS_DESC_T) { - DBGLOG(P2P, LOUD, ("Checking BSS: "MACSTR"\n", MAC2STR(prBssDesc->aucBSSID))); - - if (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSS type.\n")); - continue; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnReqInfo->aucBssid)) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSSID.\n")); - continue; - } - - - /* SSID should be the same? SSID is vary for each connection. so... */ - if (UNEQUAL_SSID(prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)) { - - DBGLOG(P2P, TRACE, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, TRACE, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - DBGLOG(P2P, TRACE, ("Checking SSID:%s, length:%d\n", - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)); - DBGLOG(P2P, TRACE, ("Ignore mismatch SSID, (But BSSID match).\n")); - ASSERT(FALSE); - break; - } - - /* Final decision. */ - prCandidateBssDesc = prBssDesc; - break; - } - - - - } while (FALSE); - - return prCandidateBssDesc; -} /* scanP2pSearchDesc */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_state.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_state.c deleted file mode 100755 index da30ecff152b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/p2p_state.c +++ /dev/null @@ -1,575 +0,0 @@ -#include "p2p_precomp.h" - - -BOOLEAN -p2pStateInit_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ) -{ - BOOLEAN fgIsTransOut = FALSE; -// P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (peNextState != NULL)); - - if ((prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) && IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - fgIsTransOut = TRUE; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - *peNextState = P2P_STATE_REQING_CHANNEL; - - } - else { -#if 0 - else if (IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - - ASSERT((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Start a timer for return channel. */ - DBGLOG(P2P, TRACE, ("start a GO channel timer.\n")); - } - - } - -#endif - cnmTimerStartTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer), 5000); - } - - } while (FALSE); - - return fgIsTransOut; -} /* p2pStateInit_IDLE */ - - -VOID -p2pStateAbort_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Release channel before timeout. */ - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - - /* Stop timer for leaving this state. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - } while (FALSE); - - return; -} /* p2pStateAbort_IDLE */ - - - -VOID -p2pStateInit_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Store the original channel info. */ - prChnlReqInfo->ucOriChnlNum = prP2pBssInfo->ucPrimaryChannel; - prChnlReqInfo->eOriBand = prP2pBssInfo->eBand; - prChnlReqInfo->eOriChnlSco = prP2pBssInfo->eBssSCO; - - /* RX Probe Request would check primary channel.*/ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eChnlSco; - - - DBGLOG(P2P, TRACE, ("start a channel on hand timer.\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - prChnlReqInfo->u4MaxInterval); - - kalP2PIndicateChannelReady(prAdapter->prGlueInfo, - prChnlReqInfo->u8Cookie, - prChnlReqInfo->ucReqChnlNum, - prChnlReqInfo->eBand, - prChnlReqInfo->eChnlSco, - prChnlReqInfo->u4MaxInterval); - - } while (FALSE); - - return; -} /* p2pStateInit_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Restore the original channel info. */ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucOriChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eOriBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eOriChnlSco; - - if (eNextState != P2P_STATE_CHNL_ON_HAND) { - /* Indicate channel return. */ - kalP2PIndicateChannelExpired(prAdapter->prGlueInfo, &prP2pFsmInfo->rChnlReqInfo); - - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } while (FALSE); - return; -} /* p2pStateAbort_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_REQING_CHANNEL ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (eNextState < P2P_STATE_NUM)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (eNextState == P2P_STATE_IDLE) { - if (prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) { - /* Intend to be AP. */ - /* Setup for AP mode. */ - p2pFuncStartGO(prAdapter, - prP2pBssInfo, - prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - prP2pSpecificBssInfo->ucPreferredChannel, - prP2pSpecificBssInfo->eRfBand, - prP2pSpecificBssInfo->eRfSco, - prP2pFsmInfo->fgIsApMode); - - } - else { - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } - - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->eScanType = SCAN_TYPE_PASSIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_2G4; - prScanReqInfo->u2PassiveDewellTime = 50; // 50ms for passive channel load detection - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->fgIsScanRequest = TRUE; - prScanReqInfo->ucNumChannelList = 0; - prScanReqInfo->u4BufLength = 0; - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - - -VOID -p2pStateAbort_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - - if (eNextState == P2P_STATE_REQING_CHANNEL) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Determine the channel for AP. */ - if (cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) { - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if ((ucPreferedChnl = prP2pConnSettings->ucOperatingChnl) == 0) { - - if (scnQuerySparseChannel(prAdapter, &eBand, &ucPreferedChnl) == FALSE) { - - // What to do? - ASSERT(FALSE); - // TODO: Pick up a valid channel from channel list. - } - } - } - - - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand = eBand; - prChnlReqInfo->eChnlSco = prP2pSpecificBssInfo->eRfSco = eSco; - } - else { - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - } - - - } while (FALSE); - - return; -} /* p2pStateAbort_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_SCAN ( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &prP2pFsmInfo->rScanReqInfo; - - prScanReqInfo->fgIsScanRequest = TRUE; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - return; -} /* p2pStateInit_SCAN */ - - -VOID -p2pStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - do { - ASSERT_BREAK(prAdapter != NULL); - - // 1. Scan cancel. (Make sure the scan request is invalid. - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - - // Scan done indication. - kalP2PIndicateScanDone(prAdapter->prGlueInfo, prP2pFsmInfo->rScanReqInfo.fgIsAbort); - } while (FALSE); - - return; -} /* p2pStateAbort_SCAN */ - - -VOID -p2pStateInit_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (prJoinInfo != NULL) && - (prBssDesc != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - - // Setup a join timer. - DBGLOG(P2P, TRACE, ("Start a join init timer\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (prP2pFsmInfo->u4GrantInterval - AIS_JOIN_CH_GRANT_THRESHOLD)); - - //2 <1> We are goin to connect to this BSS - prBssDesc->fgIsConnecting = TRUE; - - //2 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - (prBssDesc->fgIsP2PPresent?(STA_TYPE_P2P_GO):(STA_TYPE_LEGACY_AP)), - NETWORK_TYPE_P2P_INDEX, - prBssDesc); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Create station record fail\n")); - break; - } - - - prJoinInfo->prTargetStaRec = prStaRec; - prJoinInfo->fgIsJoinComplete = FALSE; - prJoinInfo->u4BufLength = 0; - - //2 <2.1> Sync. to FW domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prStaRec->fgIsReAssoc = FALSE; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - switch (prP2pConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - case AUTH_MODE_SHARED: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(P2P, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prJoinInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - default: - ASSERT(!(prP2pConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(P2P, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prP2pConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - } - else { - ASSERT(FALSE); - // TODO: Shall we considering ROAMIN case for P2P Device?. - } - - - //2 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes. - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prJoinInfo->rSsidStruct.aucSsid, - prJoinInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - //2 <5> Backup desired channel. - - //2 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - - if (!prJoinReqMsg) { - DBGLOG(P2P, TRACE, ("Allocation Join Message Fail\n")); - ASSERT(FALSE); - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - // TODO: Consider fragmentation info in station record. - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - - - } while (FALSE); - - return; -} /* p2pStateInit_GC_JOIN */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort. Leave JOIN State & Abort JOIN. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pStateAbort_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_MSG_JOIN_ABORT_T prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL) && (prJoinInfo != NULL)); - - if (prJoinInfo->fgIsJoinComplete == FALSE) { - - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - DBGLOG(P2P, TRACE, ("Fail to allocate join abort message buffer\n")); - ASSERT(FALSE); - return; - } - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prJoinInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prJoinInfo->prTargetStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - } - - /* Stop Join Timer. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Release channel requested. */ - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - - } while (FALSE); - - return; - -} /* p2pStateAbort_GC_JOIN */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/privacy.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/privacy.c deleted file mode 100755 index 66b33a631b71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/privacy.c +++ /dev/null @@ -1,1024 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/privacy.c#1 $ -*/ - -/*! \file "privacy.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from rsn.c and nic_privacy.c - -*/ - - - -/* -** $Log: privacy.c $ - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2011 terry.wu - * NULL - * Fix Hotspot deauth send failed. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 28 2011 tsaiyuan.hsu - * [WCXRP00000819] [MT6620 Wi-Fi][Driver] check if staRec is NULL or not in secCheckClassError - * check if staRec is NULL or not in secCheckClassError. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for migration. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 22 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the wpi same key id rx issue and fixed the remove wep key issue. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * remove the assert code for allow ad-hoc pkt. - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * change the waning message shown level, and clear the global transmit flag for CMD INFRASTRUCTURE. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * * * MQM: BA handling - * * * * * * * * * TXM: Macros updates - * * * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * modify the cmd with result return - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the value not initialize issue - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to update the auth mode and encryption status for cmd build connection - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some code for wapi mode - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the call to check the 4th and eapol error report frame - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function name - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for parsing the EAPoL frame, and do some code refine - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the class error check - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the cmd_802_11_pmkid code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * doing some function rename, and adding the code for cmd CMD_ADD_REMOVE_KEY - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the clear pmkid function - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eStaType check for AIS - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection related code - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_PRIVACY_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the privacy-related -* parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] ucNetTypeIdx Pointer to netowrk type index -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secInit ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ) -{ - UINT_8 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secInit"); - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prBssInfo->u4RsnSelectedGroupCipher = 0; - prBssInfo->u4RsnSelectedPairwiseCipher = 0; - prBssInfo->u4RsnSelectedAKMSuite = 0; - -#if CFG_ENABLE_WIFI_DIRECT - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[0].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[1].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[2].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[3].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP104; - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[4].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[5].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[6].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[7].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP104; - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[0].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[1].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[2].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_PSK; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[3].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[4].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[5].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK; - -#if CFG_SUPPORT_802_11W - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[6].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X_SHA256; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[7].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK_SHA256; -#endif - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i].dot11RSNAConfigAuthenticationSuiteEnabled = - FALSE; - } - - secClearPmkid(prAdapter); - - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rPreauthenticationTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnIndicatePmkidCand, - (UINT_32)NULL); - -#if CFG_SUPPORT_802_11W - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rSaQueryTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnStartSaQueryTimer, - (UINT_32)NULL); -#endif - - prAisSpecBssInfo->fgCounterMeasure = FALSE; - prAisSpecBssInfo->ucWEPDefaultKeyID = 0; - - - #if 0 - for (i=0;iarWtbl[i].fgUsed = FALSE; - g_prWifiVar->arWtbl[i].prSta = NULL; - g_prWifiVar->arWtbl[i].ucNetTypeIdx = NETWORK_TYPE_INDEX_NUM; - - } - nicPrivacyInitialize((UINT_8)NETWORK_TYPE_INDEX_NUM); - #endif -} /* secInit */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Rx Class Error" to SEC_FSM for -* JOIN Module. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSwRfb Pointer to the SW RFB. -* -* \return FALSE Class Error -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secCheckClassError ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prSwRfb); - //ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prSwRfb->ucStaRecIdx]); - - if ((prStaRec) && 1 /* RXM_IS_DATA_FRAME(prSwRfb) */) { - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = prStaRec->ucNetTypeIndex; - - if (IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - P_BSS_INFO_T prBssInfo; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]; - - if ((STA_STATE_3 != prStaRec->ucStaState) && - IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->fgIsNetAbsent == FALSE) { - /*(IS_AP_STA(prStaRec) || IS_CLIENT_STA(prStaRec))) {*/ - - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - prStaRec, - NULL, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - - DBGLOG(RSN, INFO, ("Send Deauth to MAC:["MACSTR"] for Rx Class 3 Error.\n", - MAC2STR(prStaRec->aucMacAddr))); - } - - return FALSE; - } - - return secRxPortControlCheck(prAdapter, prSwRfb); - } - } - - return FALSE; -} /* end of secCheckClassError() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to setting the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[in] fgPortBlock The port status -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetPortBlocked ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPortBlock - ) -{ - if (prSta == NULL) - return ; - - prSta->fgPortBlock = fgPortBlock; - - DBGLOG(RSN, TRACE, ("The STA "MACSTR" port %s\n", MAC2STR(prSta->aucMacAddr), fgPortBlock == TRUE ? "BLOCK" :" OPEN")); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to report the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[out] fgPortBlock The port status -* -* \return TRUE sta exist, FALSE sta not exist -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secGetPortStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - OUT PBOOLEAN pfgPortStatus - ) -{ - if (prSta == NULL) - return FALSE; - - *pfgPortStatus = prSta->fgPortBlock; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle Peer device Tx Security process MSDU. -* -* \param[in] prMsduInfo pointer to the packet info pointer -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port blocked -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL /* ENUM_PORT_CONTROL_RESULT */ -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - if (prStaRec) { - - /* Todo:: */ - if (prMsduInfo->fgIs802_1x) - return TRUE; - - if (prStaRec->fgPortBlock == TRUE) { - DBGLOG(INIT, TRACE, ("Drop Tx packet due Port Control!\n")); - return FALSE; - } - -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - return TRUE; - } -#endif - if (IS_STA_IN_AIS(prStaRec)) { - if (!prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist && - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED)){ - DBGLOG(INIT, TRACE, ("Drop Tx packet due the key is removed!!!\n")); - return FALSE; - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The Rx Security process MSDU. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSWRfb SW rfb pinter -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRxPortControlCheck ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ) -{ - ASSERT(prSWRfb); - -#if 0 - /* whsu:Todo: Process MGMT and DATA */ - if (prSWRfb->prStaRec) { - if (prSWRfb->prStaRec->fgPortBlock == TRUE) { - if (1 /* prSWRfb->fgIsDataFrame and not 1x*/ && - (g_prWifiVar->rConnSettings.eAuthMode >= AUTH_MODE_WPA)){ - //DBGLOG(SEC, WARN, ("Drop Rx data due port control !\r\n")); - return TRUE; /* Todo: whsu FALSE; */ - } - //if (!RX_STATUS_IS_PROTECT(prSWRfb->prRxStatus)) { - // DBGLOG(RSN, WARN, ("Drop rcv non-encrypted data frame!\n")); - // return FALSE; - //} - } - } - else { - } -#endif - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will enable/disable the cipher suite -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4CipherSuitesFlags flag for cipher suite -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetCipherSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ) -{ - UINT_32 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - P_IEEE_802_11_MIB_T prMib; - - ASSERT(prAdapter); - - prMib = &prAdapter->rMib; - - ASSERT(prMib); - - if (u4CipherSuitesFlags == CIPHER_FLAG_NONE) { - /* Disable all the pairwise cipher suites. */ - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prMib->dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - /* Update the group cipher suite. */ - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - - return; - } - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prMib->dot11RSNAConfigPairwiseCiphersTable[i]; - - switch (prEntry->dot11RSNAConfigPairwiseCipher) { - case WPA_CIPHER_SUITE_WEP40: - case RSN_CIPHER_SUITE_WEP40: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP40) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (u4CipherSuitesFlags & CIPHER_FLAG_TKIP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (u4CipherSuitesFlags & CIPHER_FLAG_CCMP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_WEP104: - case RSN_CIPHER_SUITE_WEP104: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP104) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - default: - break; - } - } - - /* Update the group cipher suite. */ - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP40; - } - else { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - } - -} /* secSetCipherSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The 2nd Tx EAPoL Frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsduInfo pointer to the packet info pointer -* \param[in] pucPayload pointer to the 1x hdr -* \param[in] u2PayloadLen the 1x payload length -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secProcessEAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen -) -{ - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - P_IEEE_802_1X_HDR pr1xHdr; - UINT_16 u2KeyInfo; - - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prMsduInfo->ucStaRecIndex]); - ASSERT(prStaRec); - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)pucPayload; - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)((PUINT_32)(pucPayload + 4)); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (u2KeyInfo & WPA_KEY_INFO_SECURE) { - /* 4th EAPoL check at secHandleTxDoneCallback() */ - //DBGLOG(RSN, TRACE, ("Tx 4th EAPoL frame\r\n")); - } - else if (u2PayloadLen == 123 /* Not include LLC */) { - DBGLOG(RSN, INFO, ("Tx 2nd EAPoL frame\r\n")); - secFsmEvent2ndEapolTx(prAdapter, prStaRec); - } - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will handle the 4th EAPoL Tx done and mic Error Report frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ) -{ - PUINT_8 pucPayload; - P_IEEE_802_1X_HDR pr1xHdr = (P_IEEE_802_1X_HDR)NULL; - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - UINT_16 u2KeyInfo; - UINT_16 u2PayloadLen; - - DEBUGFUNC("secHandleTxDoneCallback"); - - ASSERT(prMsduInfo); - //Todo:: Notice if using the TX free immediate after send to firmware, the payload may not correcttly!!!! - - ASSERT(prStaRec); - - //Todo:: This call back may not need because the order of set key and send 4th 1x can be make sure - //Todo:: Notice the LLC offset - #if 1 - pucPayload = (PUINT_8)prMsduInfo->prPacket; - ASSERT(pucPayload); - - u2PayloadLen = prMsduInfo->u2FrameLength; - - if (0 /* prMsduInfo->fgIs1xFrame */) { - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)(PUINT_32)(pucPayload + 8); - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)(PUINT_32)(pucPayload + 12); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (prStaRec->rSecInfo.fg2nd1xSend == TRUE && u2PayloadLen == 107 /* include LLC *//* u2KeyInfo & WPA_KEY_INFO_SECURE */) { - DBGLOG(RSN, INFO, ("Tx 4th EAPoL frame\r\n")); - secFsmEvent4ndEapolTxDone(prAdapter, prStaRec); - } - else if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone){ - DBGLOG(RSN, INFO, ("Tx EAPoL Error report frame\r\n")); - //secFsmEventEapolTxDone(prAdapter, (UINT_32)prMsduInfo->prStaRec); - } - } - } - } - - } - #endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the pmkid parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secClearPmkid ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secClearPmkid"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("secClearPmkid\n")); - prAisSpecBssInfo->u4PmkidCandicateCount = 0; - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCandicate, sizeof(PMKID_CANDICATE_T) * CFG_MAX_PMKID_CACHE); - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether WPA, or WPA2 but not WPA-None is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRsnKeyHandshakeEnabled ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - - ASSERT(prConnSettings); - - ASSERT(prConnSettings->eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION_DISABLED) { - return FALSE; - } - - ASSERT(prConnSettings->eAuthMode < AUTH_MODE_NUM); - if ((prConnSettings->eAuthMode >= AUTH_MODE_WPA) && - (prConnSettings->eAuthMode != AUTH_MODE_WPA_NONE)) { - return TRUE; - } - - return FALSE; -} /* secRsnKeyHandshakeEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return whether the transmit key alread installed. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer the sta record -* -* \retval TRUE Default key or Transmit key installed -* FALSE Default key or Transmit key not installed -* -* \note: -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secTransmitKeyExist ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prSta); - - if (prSta->fgTransmitKeyExist){ - return TRUE; - } - else { - return FALSE; - } -} /* secTransmitKeyExist */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether 802.11 privacy is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secEnabledInAis ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("secEnabled"); - - ASSERT(prAdapter->rWifiVar.rConnSettings.eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION_DISABLED: - return FALSE; - case ENUM_ENCRYPTION1_ENABLED: - case ENUM_ENCRYPTION2_ENABLED: - case ENUM_ENCRYPTION3_ENABLED: - return TRUE; - default: - DBGLOG(RSN, TRACE, ("Unknown encryption setting %d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - break; - } - return FALSE; -} /* secEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the privacy bit at mac header for TxM -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsdu the msdu for known the sta record -* -* \return TRUE the privacy need to set -* FALSE the privacy no need to set -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - - ASSERT(prMsdu); - - ASSERT(prStaRec); - //prStaRec = &(g_arStaRec[prMsdu->ucStaRecIndex]); - - if (prStaRec == NULL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist) - return TRUE; - return FALSE; /* No privacy bit */ - } - - /* Todo:: */ - if (0 /* prMsdu->fgIs1xFrame */){ - if (IS_STA_IN_AIS(prStaRec) && - prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - DBGLOG(RSN, LOUD, ("For AIS Legacy 1x, always not encryped\n")); - return FALSE; - } - else if (!prStaRec->fgTransmitKeyExist) { - DBGLOG(RSN, LOUD, ("1x Not Protected.\n")); - return FALSE; - } - else if (prStaRec->rSecInfo.fgKeyStored) { - DBGLOG(RSN, LOUD, ("1x not Protected due key stored!\n")); - return FALSE; - } - else { - DBGLOG(RSN, LOUD, ("1x Protected.\n")); - return TRUE; - } - } - else { - if (!prStaRec->fgTransmitKeyExist) { - /* whsu , check for AIS only */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist){ - DBGLOG(RSN, LOUD, ("Protected\n")); - return TRUE; - } - } - else { - DBGLOG(RSN, LOUD, ("Protected.\n")); - return TRUE; - } - } - - /* No sec or key is removed!!! */ - return FALSE; -} -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rate.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rate.c deleted file mode 100755 index c63fe7b7d641..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rate.c +++ /dev/null @@ -1,547 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rate.c#1 $ -*/ - -/*! \file "rate.c" - \brief This file contains the transmission rate handling routines. - - This file contains the transmission rate handling routines for setting up - ACK/CTS Rate, Highest Tx Rate, Lowest Tx Rate, Initial Tx Rate and do - conversion between Rate Set and Data Rates. -*/ - - - -/* -** $Log: rate.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add rate.c. - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comments - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix DBGLOG - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** \main\maintrunk.MT5921\12 2008-12-19 17:19:32 GMT mtk01461 -** Fix the problem that do not ASSERT the length of Supported Rate IE == 8 -** \main\maintrunk.MT5921\11 2008-12-01 18:17:42 GMT mtk01088 -** fixed the lint "possible using null pointer" warning -** \main\maintrunk.MT5921\10 2008-08-20 00:16:36 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\9 2008-04-13 21:17:13 GMT mtk01461 -** Revise GEN Link Speed OID -** \main\maintrunk.MT5921\8 2008-03-28 10:40:13 GMT mtk01461 -** Add rateGetRateSetFromDataRates() for set desired rate OID -** \main\maintrunk.MT5921\7 2008-03-26 09:16:20 GMT mtk01461 -** Add adopt operational rate as ACK rate if BasicRateSet was not found -** Add comments -** \main\maintrunk.MT5921\6 2008-02-21 15:01:39 GMT mtk01461 -** Add initial rate according rx signal quality support -** \main\maintrunk.MT5921\5 2008-01-07 15:06:44 GMT mtk01461 -** Fix typo of rate adaptation of CtrlResp Frame -** \main\maintrunk.MT5921\4 2007-10-25 18:05:12 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* The list of valid data rates. */ -const UINT_8 aucDataRate[] = { - RATE_1M, /* RATE_1M_INDEX = 0 */ - RATE_2M, /* RATE_2M_INDEX */ - RATE_5_5M, /* RATE_5_5M_INDEX */ - RATE_11M, /* RATE_11M_INDEX */ - RATE_22M, /* RATE_22M_INDEX */ - RATE_33M, /* RATE_33M_INDEX */ - RATE_6M, /* RATE_6M_INDEX */ - RATE_9M, /* RATE_9M_INDEX */ - RATE_12M, /* RATE_12M_INDEX */ - RATE_18M, /* RATE_18M_INDEX */ - RATE_24M, /* RATE_24M_INDEX */ - RATE_36M, /* RATE_36M_INDEX */ - RATE_48M, /* RATE_48M_INDEX */ - RATE_54M, /* RATE_54M_INDEX */ - RATE_HT_PHY /* RATE_HT_PHY_INDEX */ -}; - -static const UINT_8 aucDefaultAckCtsRateIndex[RATE_NUM] = { - RATE_1M_INDEX, /* RATE_1M_INDEX = 0 */ - RATE_2M_INDEX, /* RATE_2M_INDEX */ - RATE_5_5M_INDEX, /* RATE_5_5M_INDEX */ - RATE_11M_INDEX, /* RATE_11M_INDEX */ - RATE_1M_INDEX, /* RATE_22M_INDEX - Not supported */ - RATE_1M_INDEX, /* RATE_33M_INDEX - Not supported */ - RATE_6M_INDEX, /* RATE_6M_INDEX */ - RATE_6M_INDEX, /* RATE_9M_INDEX */ - RATE_12M_INDEX, /* RATE_12M_INDEX */ - RATE_12M_INDEX, /* RATE_18M_INDEX */ - RATE_24M_INDEX, /* RATE_24M_INDEX */ - RATE_24M_INDEX, /* RATE_36M_INDEX */ - RATE_24M_INDEX, /* RATE_48M_INDEX */ - RATE_24M_INDEX /* RATE_54M_INDEX */ -}; - -const BOOLEAN afgIsOFDMRate[RATE_NUM] = { - FALSE, /* RATE_1M_INDEX = 0 */ - FALSE, /* RATE_2M_INDEX */ - FALSE, /* RATE_5_5M_INDEX */ - FALSE, /* RATE_11M_INDEX */ - FALSE, /* RATE_22M_INDEX - Not supported */ - FALSE, /* RATE_33M_INDEX - Not supported */ - TRUE, /* RATE_6M_INDEX */ - TRUE, /* RATE_9M_INDEX */ - TRUE, /* RATE_12M_INDEX */ - TRUE, /* RATE_18M_INDEX */ - TRUE, /* RATE_24M_INDEX */ - TRUE, /* RATE_36M_INDEX */ - TRUE, /* RATE_48M_INDEX */ - TRUE /* RATE_54M_INDEX */ -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Supported Rate & Extended Supported Rate IE to the -* Operational Rate Set and Basic Rate Set, and also check if any Basic -* Rate Code is unknown by driver. -* -* @param[in] prIeSupportedRate Pointer to the Supported Rate IE -* @param[in] prIeExtSupportedRate Pointer to the Ext Supported Rate IE -* @param[out] pu2OperationalRateSet Pointer to the Operational Rate Set -* @param[out] pu2BSSBasicRateSet Pointer to the Basic Rate Set -* @param[out] pfgIsUnknownBSSBasicRate Pointer to a Flag to indicate that Basic -* Rate Set has unknown Rate Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ) -{ - UINT_16 u2OperationalRateSet = 0; - UINT_16 u2BSSBasicRateSet = 0; - BOOLEAN fgIsUnknownBSSBasicRate = FALSE; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pu2OperationalRateSet); - ASSERT(pu2BSSBasicRateSet); - ASSERT(pfgIsUnknownBSSBasicRate); - - if (prIeSupportedRate) { - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - //ASSERT(prIeSupportedRate->ucLength <= ELEM_MAX_LEN_SUP_RATES); - ASSERT(prIeSupportedRate->ucLength <= RATE_NUM); - - for (i = 0; i < prIeSupportedRate->ucLength; i++) { - ucRate = prIeSupportedRate->aucSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - - if (prIeExtSupportedRate) { - //ASSERT(prIeExtSupportedRate->ucLength <= ELEM_MAX_LEN_EXTENDED_SUP_RATES); - - for (i = 0; i < prIeExtSupportedRate->ucLength; i++) { - ucRate = prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - *pu2OperationalRateSet = u2OperationalRateSet; - *pu2BSSBasicRateSet = u2BSSBasicRateSet; - *pfgIsUnknownBSSBasicRate = fgIsUnknownBSSBasicRate; - - return; - -} /* end of rateGetRateSetFromIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Operational Rate Set & Basic Rate Set to the Rate Code -* Format for used in (Ext)Supportec Rate IE. -* -* @param[in] u2OperationalRateSet Operational Rate Set -* @param[in] u2BSSBasicRateSet Basic Rate Set -* @param[out] pucDataRates Pointer to the Data Rate Buffer -* @param[out] pucDataRatesLen Pointer to the Data Rate Buffer Length -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ) -{ - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pucDataRatesLen); - - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - for (i = RATE_1M_INDEX, j = 0; i < RATE_NUM; i++) { - if (u2OperationalRateSet & BIT(i)) { - - *(pucDataRates + j) = aucDataRate[i]; - - if (u2BSSBasicRateSet & BIT(i)) { - *(pucDataRates + j) |= RATE_BASIC_BIT; - } - - j++; - } - } - - *pucDataRatesLen = (UINT_8)j; - - return; - -} /* end of rateGetDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the highest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucHighestRateIndex Pointer to buffer of the Highest Rate Index -* -* \retval TRUE Highest Rate Index was found -* \retval FALSE Highest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ) -{ - INT_32 i; - - - ASSERT(pucHighestRateIndex); - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucHighestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetHighestRateIndexFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the lowest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucLowestRateIndex Pointer to buffer of the Lowest Rate Index -* -* \retval TRUE Lowest Rate Index was found -* \retval FALSE Lowest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ) -{ - UINT_32 i; - - ASSERT(pucLowestRateIndex); - - for (i = RATE_1M_INDEX; i <= RATE_54M_INDEX; i++) { - if (u2RateSet & BIT(i)) { - *pucLowestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetLowestRateIndexFromRateSet() */ - - -#if 0 // NOTE(Kevin): For reference -/*----------------------------------------------------------------------------*/ -/*! -* \brief Convert the given Data Rates to the Rate Set. -* -* \param[in] pucDataRates Pointer to the Data Rates -* \param[in] ucDataRatesLen Length of given Data Rates -* \param[out] pu2RateSet Pointer to the Rate Set -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromDataRates ( - IN PUINT_8 pucDataRates, - IN UINT_8 ucDataRatesLen, - OUT PUINT_16 pu2RateSet - ) -{ - UINT_16 u2RateSet = 0; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pu2RateSet); - - if (pucDataRates) { - for (i = 0; i < ucDataRatesLen; i++) { - ucRate = pucDataRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2RateSet |= BIT(j); - break; - } - } - } - } - - *pu2RateSet = u2RateSet; - - return; - -} /* end of rateGetRateSetFromDataRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the Operational Rate Set and Basic Rate Set to get the corresponding -* ACK/CTS(Respnose) TX Rates. -* -* \param[in] u2OperationalRateSet Operational Rate Set -* \param[in] u2BSSBasicRateSet Basic Rate Set -* \param[out] aucAckCtsRateIndex Pointer to the Ack/Cts Data Rate Buffer -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateSetAckCtsDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - IN OUT UINT_8 aucAckCtsRateIndex[] - ) -{ - INT_32 i,j; - - - ASSERT(aucAckCtsRateIndex); - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - /* Setup default ACK/CTS response rate */ - kalMemCopy(aucAckCtsRateIndex, (PVOID)aucDefaultAckCtsRateIndex, sizeof(aucDefaultAckCtsRateIndex)); - - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2OperationalRateSet & BIT(i)) { - for (j = i; j >= RATE_1M_INDEX; j--) { - if (u2BSSBasicRateSet & BIT(j)) { - if ((afgIsOFDMRate[i] && afgIsOFDMRate[j]) || (!afgIsOFDMRate[i] && !afgIsOFDMRate[j])) // Reply ACK Frame at the same Modulation Scheme. - aucAckCtsRateIndex[i] = (UINT_8)j; - break; - } - } - - /* NOTE(Kevin 2008/03/25): Following code is used for those AP which has - * NULL BasicRateSet. - * e.g. If input Operational Rate Set = [18M 12M 9M], Basic Rate Set = NULL. - * Originally we'll get Ack Rate for [18M 12M 9M] is [12M 12M "6M"]. - * Now we'll get Ack Rate for [18M 12M 9M] is [12M 12M 9M], - * The Ack Rate for Tx Rates which are not list in Operational Rate Set is still - * use highest mandatory rate as default. - */ - if (j < RATE_1M_INDEX) { /* The ACK/CTS rate was not found in BasicRateSet */ - if (!(BIT(aucAckCtsRateIndex[i]) & u2OperationalRateSet)) { - aucAckCtsRateIndex[i] = (UINT_8)i; - } - } - } - } - - return; - -} /* end of rateSetAckCtsDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the proper initial rate from Rate Set according to given RCPI value -* -* \param[in] u2RateSet Rate Set -* \param[in] rRcpi RCPI value from AP or Peer STA -* \param[out] pucInitialRateIndex Pointer to buffer of the initial Rate Index -* -* \retval TRUE Initial Rate Index was found -* \retval FALSE Initial Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetBestInitialRateIndex ( - IN UINT_16 u2RateSet, - IN RCPI rRcpi, - OUT PUINT_8 pucInitialRateIndex - ) -{ - UINT_16 u2InitRateSet; - INT_32 i; - - - ASSERT(pucInitialRateIndex); - - DBGLOG(MGT, TRACE, ("rRcpi = %d\n", rRcpi)); - - if (rRcpi >= RCPI_100) { /* Best Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_100); - } - else if (rRcpi >= RCPI_80) { /* Better Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_80); - } - else if (rRcpi >= RCPI_60) { /* Good Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_60); - } - else { /* Worse Signal */ - /* NOTE(Kevin): If return FALSE, we should assign the BSS Basic Rate Index - * (prBssInfo->ucBasicRateIndex) to the initial rate. It was determined in - * function - bssUpdateTxRateForControlFrame(). - */ - return FALSE; - } - - u2RateSet &= u2InitRateSet; - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucInitialRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetBestInitialRateIndex() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm.c deleted file mode 100755 index 1954f88e48dd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm.c +++ /dev/null @@ -1,1723 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm.c#2 $ -*/ - -/*! \file "rlm.c" - \brief - -*/ - - - -/* -** $Log: rlm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Check length HT cap IE about RX associate request frame - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Fix preamble type of STA mode - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Not send ERP IE if peer STA is 802.11b-only - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 28 2011 cm.chang - * NULL - * Add length check to reduce possibility to adopt wrong IE - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 01 2011 cm.chang - * [WCXRP00000971] [MT6620 Wi-Fi][Driver][FW] Not set Beacon timeout interval when CPTT - * Final channel number only adopts the field from assoc response - * - * 06 10 2011 cm.chang - * [WCXRP00000773] [MT6620 Wi-Fi][Driver] Workaround some AP fill primary channel field with its secondary channel - * If DS IE exists, ignore the primary channel field in HT OP IE - * - * 05 03 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Fix compiling error - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 15 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when no mgmt buffer in free build - * - * 10 08 2010 cm.chang - * NULL - * When 20M only setting, ignore OBSS IE - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Temporary add rlmUpdateParamByStaForBow() and rlmBssInitForBow(). - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix channel ID definition in RFB status to primary channel instead of center channel - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add TX short GI compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Utilize status of swRfb to know channel number and band - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 04 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process Beacon only ready for infra STA now - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 15 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide draft measurement and quiet functions - * - * 03 09 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * If bss is not 11n network, zero WTBL HT parameters - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Generate HT IE only depending on own phyTypeSet - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not fill HT related IE if BssInfo does not include 11n phySet - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RDG RX, but disable RDG TX for IOT and LongNAV - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Modify the parameter of rlmRecAssocRspHtInfo function - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix prBssInfo->ucPrimaryChannel handle for assoc resp - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add some function to process HT operation - * - * Nov 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlmStatisticsInit() to handle MIB counters - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Note: assume TIMER_T structures are reset to zero or stopped - * before invoking this function. - */ - - /* Initialize OBSS FSM */ - rlmObssInit(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - /* Note: all RLM timers will also be stopped. - * Now only one OBSS scan timer. - */ - rlmBssReset(prAdapter, prBssInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtOpIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_IE_ERP_T prErpIe; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11GN(prBssInfo) && prBssInfo->eBand == BAND_2G4 && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11GN))) { - prErpIe = (P_IE_ERP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add ERP IE */ - prErpIe->ucId = ELEM_ID_ERP_INFO; - prErpIe->ucLength = 1; - - prErpIe->ucERP = prBssInfo->fgObssErpProtectMode ? - ERP_INFO_USE_PROTECTION : 0; - - if (prBssInfo->fgErpProtectMode) { - prErpIe->ucERP |= - (ERP_INFO_NON_ERP_PRESENT | ERP_INFO_USE_PROTECTION); - } - - /* Handle barker preamble */ - if (!prBssInfo->fgUseShortPreamble) { - prErpIe->ucERP |= ERP_INFO_BARKER_PREAMBLE_MODE; - } - - ASSERT(IE_SIZE(prErpIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_ERP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prErpIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_CAP_T prHtCap; - P_SUP_MCS_SET_FIELD prSupMcsSet; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - prHtCap = (P_IE_HT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT capabilities IE */ - prHtCap->ucId = ELEM_ID_HT_CAP; - prHtCap->ucLength = sizeof(IE_HT_CAP_T) - ELEM_HDR_LEN; - - prHtCap->u2HtCapInfo = HT_CAP_INFO_DEFAULT_VAL; - if (!fg40mAllowed) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH | - HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M); - } - if (prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled) { - prHtCap->u2HtCapInfo &= - ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - } - - prHtCap->ucAmpduParam = AMPDU_PARAM_DEFAULT_VAL; - - prSupMcsSet = &prHtCap->rSupMcsSet; - kalMemZero((PVOID)&prSupMcsSet->aucRxMcsBitmask[0], - SUP_MCS_RX_BITMASK_OCTET_NUM); - - prSupMcsSet->aucRxMcsBitmask[0] = BITS(0, 7); - - if (fg40mAllowed) { - prSupMcsSet->aucRxMcsBitmask[32/8] = BIT(0); /* MCS32 */ - } - prSupMcsSet->u2RxHighestSupportedRate = SUP_MCS_RX_DEFAULT_HIGHEST_RATE; - prSupMcsSet->u4TxRateInfo = SUP_MCS_TX_DEFAULT_VAL; - - prHtCap->u2HtExtendedCap = HT_EXT_CAP_DEFAULT_VAL; - if (!fg40mAllowed || prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prHtCap->u2HtExtendedCap &= - ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE); - } - - prHtCap->u4TxBeamformingCap = TX_BEAMFORMING_CAP_DEFAULT_VAL; - - prHtCap->ucAselCap = ASEL_CAP_DEFAULT_VAL; - - - ASSERT(IE_SIZE(prHtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_EXT_CAP_T prExtCap; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - /* Add Extended Capabilities IE */ - prExtCap = (P_EXT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - prExtCap->ucId = ELEM_ID_EXTENDED_CAP; - prExtCap->ucLength = 1; - prExtCap->aucCapabilities[0] = ELEM_EXT_CAP_DEFAULT_VAL; - - if (!fg40mAllowed) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_20_40_COEXIST_SUPPORT; - } - - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_PSMP_CAP; - } - - ASSERT(IE_SIZE(prExtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prExtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_OP_T prHtOp; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - - prHtOp = (P_IE_HT_OP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT operation IE */ - prHtOp->ucId = ELEM_ID_HT_OP; - prHtOp->ucLength = sizeof(IE_HT_OP_T) - ELEM_HDR_LEN; - - /* RIFS and 20/40 bandwidth operations are included */ - prHtOp->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prHtOp->ucInfo1 = prBssInfo->ucHtOpInfo1; - - /* Decide HT protection mode field */ - if (prBssInfo->eHtProtectMode == HT_PROTECT_MODE_NON_HT) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_HT; - } - else if (prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_MEMBER; - } - else { - /* It may be SYS_PROTECT_MODE_NONE or SYS_PROTECT_MODE_20M */ - prHtOp->u2Info2 = (UINT_8) prBssInfo->eHtProtectMode; - } - - if (prBssInfo->eGfOperationMode != GF_MODE_NORMAL) { - /* It may be GF_MODE_PROTECT or GF_MODE_DISALLOWED - * Note: it will also be set in ad-hoc network - */ - prHtOp->u2Info2 |= HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (0 /* Regulatory class 16 */ && - prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - /* (TBD) It is HT_PROTECT_MODE_NON_MEMBER, so require protection - * although it is possible to have no protection by spec. - */ - prHtOp->u2Info2 |= HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - prHtOp->u2Info3 = prBssInfo->u2HtOpInfo3; /* To do: handle L-SIG TXOP */ - - /* No basic MCSx are needed temporarily */ - for (i = 0; i < 16; i++) { - prHtOp->aucBasicMcsSet[i] = 0; - } - - ASSERT(IE_SIZE(prHtOp) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtOp); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked to update parameters of associated AP. -* (Association response and Beacon) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset; - P_STA_RECORD_T prStaRec; - P_IE_HT_CAP_T prHtCap; - P_IE_HT_OP_T prHtOp; - P_IE_OBSS_SCAN_PARAM_T prObssScnParam; - UINT_8 ucERP, ucPrimaryChannel; -#if CFG_SUPPORT_QUIET && 0 - BOOLEAN fgHasQuietIE = FALSE; -#endif - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(pucIE); - - prStaRec = prBssInfo->prStaRecOfAP; - ASSERT(prStaRec); - if (!prStaRec) { - return 0; - } - - prBssInfo->fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - ucPrimaryChannel = 0; - prObssScnParam = NULL; - - /* Note: HT-related members in staRec may not be zero before, so - * if following IE does not exist, they are still not zero. - * These HT-related parameters are vaild only when the corresponding - * BssInfo supports 802.11n, i.e., RLM_NET_IS_11N() - */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - case ELEM_ID_HT_OP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPrimaryChannel == 0) { - ucPrimaryChannel = prHtOp->ucPrimaryChannel; - } - prBssInfo->ucHtOpInfo1 = prHtOp->ucInfo1; - prBssInfo->u2HtOpInfo2 = prHtOp->u2Info2; - prBssInfo->u2HtOpInfo3 = prHtOp->u2Info3; - - if (!prBssInfo->fg40mBwAllowed) { - prBssInfo->ucHtOpInfo1 &= - ~(HT_OP_INFO1_SCO | HT_OP_INFO1_STA_CHNL_WIDTH); - } - - if ((prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssInfo->eBssSCO = (ENUM_CHNL_EXT_T) - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO); - } - - prBssInfo->eHtProtectMode = (ENUM_HT_PROTECT_MODE_T) - (prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_HT_PROTECTION); - - /* To do: process regulatory class 16 */ - if ((prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) - && 0 /* && regulatory class is 16 */) { - prBssInfo->eGfOperationMode = GF_MODE_DISALLOWED; - } - else if (prBssInfo->u2HtOpInfo2&HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - prBssInfo->eGfOperationMode = GF_MODE_PROTECT; - } - else { - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - } - - prBssInfo->eRifsOperationMode = - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_RIFS_MODE) ? - RIFS_MODE_NORMAL : RIFS_MODE_DISALLOWED; - - break; - - case ELEM_ID_20_40_BSS_COEXISTENCE: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store if scanning exemption grant to BssInfo */ - break; - - case ELEM_ID_OBSS_SCAN_PARAMS: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_OBSS_SCAN_PARAM_T) - 2)) { - break; - } - /* Store OBSS parameters to BssInfo */ - prObssScnParam = (P_IE_OBSS_SCAN_PARAM_T) pucIE; - break; - - case ELEM_ID_EXTENDED_CAP: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store extended capability (PSMP, coexist) to BssInfo */ - break; - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) != (sizeof(IE_ERP_T) - 2) || - prBssInfo->eBand != BAND_2G4) { - break; - } - ucERP = ERP_INFO_IE(pucIE)->ucERP; - prBssInfo->fgErpProtectMode = - (ucERP & ERP_INFO_USE_PROTECTION) ? TRUE : FALSE; - - if (ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - - #if CFG_SUPPORT_QUIET && 0 - /* Note: RRM code should be moved to independent RRM function by - * component design rule. But we attach it to RLM temporarily - */ - case ELEM_ID_QUIET: - rrmQuietHandleQuietIE(prBssInfo, (P_IE_QUIET_T) pucIE); - fgHasQuietIE = TRUE; - break; - #endif - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ - - /* Some AP will have wrong channel number (255) when running time. - * Check if correct channel number information. 20110501 - */ - if ((prBssInfo->eBand == BAND_2G4 && ucPrimaryChannel > 14) || - (prBssInfo->eBand != BAND_2G4 && (ucPrimaryChannel >= 200 || - ucPrimaryChannel <= 14))) { - ucPrimaryChannel = 0; - } - -#if CFG_SUPPORT_QUIET && 0 - if (!fgHasQuietIE) { - rrmQuietIeNotExist(prAdapter, prBssInfo); - } -#endif - - /* Check if OBSS scan process will launch */ - if (!prAdapter->fgEnOnlineScan || !prObssScnParam || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH) || - prBssInfo->eBand != BAND_2G4 || !prBssInfo->fg40mBwAllowed) { - - /* Note: it is ok not to stop rObssScanTimer() here */ - prBssInfo->u2ObssScanInterval = 0; - } - else { - if (prObssScnParam->u2TriggerScanInterval < OBSS_SCAN_MIN_INTERVAL) { - prObssScnParam->u2TriggerScanInterval = OBSS_SCAN_MIN_INTERVAL; - } - if (prBssInfo->u2ObssScanInterval != - prObssScnParam->u2TriggerScanInterval) { - - prBssInfo->u2ObssScanInterval = - prObssScnParam->u2TriggerScanInterval; - - /* Start timer to trigger OBSS scanning */ - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } - } - - return ucPrimaryChannel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset, i; - UINT_8 ucPriChannel, ucSecChannel; - ENUM_CHNL_EXT_T eSCO; - BOOLEAN fgHtBss, fg20mReq; - - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - - /* Record it to channel list to change 20/40 bandwidth */ - ucPriChannel = 0; - eSCO = CHNL_EXT_SCN; - - fgHtBss = FALSE; - fg20mReq = FALSE; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - { - P_IE_HT_CAP_T prHtCap; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - - prHtCap = (P_IE_HT_CAP_T) pucIE; - if (prHtCap->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fg20mReq = TRUE; - } - fgHtBss = TRUE; - break; - } - case ELEM_ID_HT_OP: - { - P_IE_HT_OP_T prHtOp; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPriChannel == 0) { - ucPriChannel = prHtOp->ucPrimaryChannel; - } - - if ((prHtOp->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - eSCO = (ENUM_CHNL_EXT_T) (prHtOp->ucInfo1 & HT_OP_INFO1_SCO); - } - break; - } - case ELEM_ID_20_40_BSS_COEXISTENCE: - { - P_IE_20_40_COEXIST_T prCoexist; - - if (IE_LEN(pucIE) != (sizeof(IE_20_40_COEXIST_T) - 2)) { - break; - } - - prCoexist = (P_IE_20_40_COEXIST_T) pucIE; - if (prCoexist->ucData & BSS_COEXIST_40M_INTOLERANT) { - fg20mReq = TRUE; - } - break; - } - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) != (sizeof(IE_DS_PARAM_SET_T) - 2)) { - break; - } - ucPriChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - break; - - default: - break; - } - } - - - /* To do: Update channel list and 5G band. All channel lists have the same - * update procedure. We should give it the entry pointer of desired - * channel list. - */ - if (HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr) != BAND_2G4) { - return FALSE; - } - - if (ucPriChannel == 0 || ucPriChannel > 14) { - ucPriChannel = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - } - - if (fgHtBss) { - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_PriChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_PriChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_PriChnlList[i] = ucPriChannel; - prBssInfo->auc2G_PriChnlList[0]++; - } - - /* Update secondary channel */ - if (eSCO != CHNL_EXT_SCN) { - ucSecChannel = (eSCO == CHNL_EXT_SCA) ? - (ucPriChannel + 4) : (ucPriChannel - 4); - - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_SecChnlList[i] == ucSecChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_SecChnlList[0])&& (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_SecChnlList[i] = ucSecChannel; - prBssInfo->auc2G_SecChnlList[0]++; - } - } - - /* Update 20M bandwidth request channels */ - if (fg20mReq) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = ucPriChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - } - else { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = ucPriChannel; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - -#if 0 /* SW migration 2010/8/20 */ - /* Note: we shall not update parameters when scanning, otherwise - * channel and bandwidth will not be correct or asserted failure - * during scanning. - * Note: remove channel checking. All received Beacons should be processed - * if measurement or other actions are executed in adjacent channels - * and Beacon content checking mechanism is not disabled. - */ - if (IS_SCAN_ACTIVE() - /* || prBssInfo->ucPrimaryChannel != CHNL_NUM_BY_SWRFB(prSwRfb) */) { - return FALSE; - } -#endif - - /* Handle change of slot time */ - prBssInfo->u2CapInfo = - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->u2CapInfo; - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength); - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgNewParameter; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - fgNewParameter = FALSE; - - /* When concurrent networks exist, GO shall have the same handle as - * the other BSS, so the Beacon shall be procesed for bandwidth and - * protection mechanism. - * Note1: we do not have 2 AP (GO) cases simultaneously now. - * Note2: If we are GO, concurrent AIS AP should detect it and reflect - * action in its Beacon, so AIS STA just follows Beacon from AP. - */ - RLM_NET_FOR_EACH_NO_BOW(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - if (IS_BSS_ACTIVE(prBssInfo)) { - if (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* P2P client or AIS infra STA */ - if (EQUAL_MAC_ADDR(prBssInfo->aucBSSID, - ((P_WLAN_MAC_MGMT_HEADER_T) - (prSwRfb->pvHeader))->aucBSSID)) { - - fgNewParameter = rlmRecBcnInfoForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - else { - fgNewParameter = rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - } - #if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT || - prBssInfo->eCurrentOPMode == OP_MODE_P2P_DEVICE)) { - /* AP scan to check if 20/40M bandwidth is permitted */ - rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - #endif - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - /* To do: Ad-hoc */ - } - - /* Appy new parameters if necessary */ - if (fgNewParameter) { - rlmSyncOperationParams(prAdapter, prBssInfo); - fgNewParameter = FALSE; - } - } /* end of IS_BSS_ACTIVE() */ - } /* end of RLM_NET_FOR_EACH_NO_BOW */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_8 ucPriChannel; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prStaRec == prBssInfo->prStaRecOfAP); - - /* To do: the invoked function is used to clear all members. It may be - * done by center mechanism in invoker. - */ - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - if ((ucPriChannel = - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength)) > 0) { - prBssInfo->ucPrimaryChannel = ucPriChannel; - } - - if (!RLM_NET_IS_11N(prBssInfo) || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - prBssInfo->fg40mBwAllowed = FALSE; - } - - /* Note: Update its capabilities to WTBL by cnmStaRecChangeState(), which - * shall be invoked afterwards. - * Update channel, bandwidth and protection mode by nicUpdateBss() - */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prCmdBody && prBssInfo); - if (!prCmdBody || !prBssInfo) { - return; - } - - prCmdBody->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prCmdBody->ucRfBand = (UINT_8) prBssInfo->eBand; - prCmdBody->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prBssInfo->eBssSCO; - prCmdBody->ucErpProtectMode = (UINT_8) prBssInfo->fgErpProtectMode; - prCmdBody->ucHtProtectMode = (UINT_8) prBssInfo->eHtProtectMode; - prCmdBody->ucGfOperationMode = (UINT_8) prBssInfo->eGfOperationMode; - prCmdBody->ucTxRifsMode = (UINT_8) prBssInfo->eRifsOperationMode; - prCmdBody->u2HtOpInfo3 = prBssInfo->u2HtOpInfo3; - prCmdBody->u2HtOpInfo2 = prBssInfo->u2HtOpInfo2; - prCmdBody->ucHtOpInfo1 = prBssInfo->ucHtOpInfo1; - prCmdBody->ucUseShortPreamble = prBssInfo->fgUseShortPreamble; - prCmdBody->ucUseShortSlotTime = prBssInfo->fgUseShortSlotTime; - prCmdBody->ucCheckId = 0x72; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - DBGLOG(RLM, INFO, ("N=%d b=%d c=%d s=%d e=%d h=%d I=0x%02x l=%d p=%d\n", - prCmdBody->ucNetTypeIndex, prCmdBody->ucRfBand, - prCmdBody->ucPrimaryChannel, prCmdBody->ucRfSco, - prCmdBody->ucErpProtectMode, prCmdBody->ucHtProtectMode, - prCmdBody->ucHtOpInfo1, prCmdBody->ucUseShortSlotTime, - prCmdBody->ucUseShortPreamble)); - } - else { - DBGLOG(RLM, INFO, ("N=%d closed\n", prCmdBody->ucNetTypeIndex)); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will operation parameters based on situations of -* concurrent networks. Channel, bandwidth, protection mode, supported -* rate will be modified. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - prCmdBody = (P_CMD_SET_BSS_RLM_PARAM_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_BSS_RLM_PARAM_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(RLM, WARN, ("No buf for sync RLM params (Net=%d)\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmFillSyncCmdParam(prCmdBody, prBssInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_BSS_RLM_PARAM, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_BSS_RLM_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); -} - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - P_IE_HT_CAP_T prHtCap; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ -} -#endif /* CFG_SUPPORT_AAA */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - rlmBssInitForAP(prAdapter, prBssInfo); - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - - /* Assume FW state is updated by CMD_ID_SET_BSS_INFO, so - * the sync CMD is not needed here. - */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief All RLM timers will also be stopped. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - /* HT related parameters */ - prBssInfo->ucHtOpInfo1 = 0; /* RIFS disabled. 20MHz */ - prBssInfo->u2HtOpInfo2 = 0; - prBssInfo->u2HtOpInfo3 = 0; - - prBssInfo->eBssSCO = 0; - prBssInfo->fgErpProtectMode = 0; - prBssInfo->eHtProtectMode = 0; - prBssInfo->eGfOperationMode = 0; - prBssInfo->eRifsOperationMode = 0; - - /* OBSS related parameters */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - /* All RLM timers will also be stopped */ - cnmTimerStopTimer(prAdapter, &prBssInfo->rObssScanTimer); - prBssInfo->u2ObssScanInterval = 0; - - prBssInfo->fgObssErpProtectMode = 0; /* GO only */ - prBssInfo->eObssHtProtectMode = 0; /* GO only */ - prBssInfo->eObssGfOperationMode = 0; /* GO only */ - prBssInfo->fgObssRifsOperationMode = 0; /* GO only */ - prBssInfo->fgObssActionForcedTo20M = 0; /* GO only */ - prBssInfo->fgObssBeaconForcedTo20M = 0; /* GO only */ -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_domain.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_domain.c deleted file mode 100755 index b5f34388469b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_domain.c +++ /dev/null @@ -1,681 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_domain.c#1 $ -*/ - -/*! \file "rlm_domain.c" - \brief - -*/ - - - -/* -** $Log: rlm_domain.c $ - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 23 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Let channel number to zero if band is illegal - * - * 09 22 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Exclude channel list with illegal band - * - * 09 15 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use defined country group to have a change to add new group - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 02 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export rlmDomainGetDomainInfo for p2p driver. - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Filter out not supported RF freq when reporting available chnl list - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* The following country or domain shall be set from host driver. - * And host driver should pass specified DOMAIN_INFO_ENTRY to MT6620 as - * the channel list of being a STA to do scanning/searching AP or being an - * AP to choose an adequate channel if auto-channel is set. - */ - -/* Define mapping tables between country code and its channel set - */ -static const UINT_16 g_u2CountryGroup0[] = -{ - COUNTRY_CODE_US, COUNTRY_CODE_BS, COUNTRY_CODE_BB, COUNTRY_CODE_BO, COUNTRY_CODE_DM, - COUNTRY_CODE_DO, COUNTRY_CODE_HT, COUNTRY_CODE_PR, COUNTRY_CODE_TH, COUNTRY_CODE_TW, - COUNTRY_CODE_AI, COUNTRY_CODE_AG, COUNTRY_CODE_AW, COUNTRY_CODE_BM, COUNTRY_CODE_CU, - COUNTRY_CODE_GD, COUNTRY_CODE_GY, COUNTRY_CODE_JM, COUNTRY_CODE_KN, COUNTRY_CODE_LC, - COUNTRY_CODE_VC, COUNTRY_CODE_TT, COUNTRY_CODE_SR -}; -static const UINT_16 g_u2CountryGroup1[] = -{ - COUNTRY_CODE_BR, COUNTRY_CODE_EC, COUNTRY_CODE_HK, COUNTRY_CODE_MX, COUNTRY_CODE_PE, - COUNTRY_CODE_CR, COUNTRY_CODE_MD, COUNTRY_CODE_NI, COUNTRY_CODE_PZ -}; -static const UINT_16 g_u2CountryGroup2[] = {COUNTRY_CODE_CO, COUNTRY_CODE_PY}; -static const UINT_16 g_u2CountryGroup3[] = {COUNTRY_CODE_JP}; -static const UINT_16 g_u2CountryGroup4[] = -{ - COUNTRY_CODE_CN, COUNTRY_CODE_UY, COUNTRY_CODE_MA -}; -static const UINT_16 g_u2CountryGroup5[] = {COUNTRY_CODE_AR}; -static const UINT_16 g_u2CountryGroup6[] = {COUNTRY_CODE_AU, COUNTRY_CODE_NZ}; -static const UINT_16 g_u2CountryGroup7[] = {COUNTRY_CODE_RU}; -static const UINT_16 g_u2CountryGroup8[] = -{ - COUNTRY_CODE_ID, COUNTRY_CODE_HN, COUNTRY_CODE_PG, COUNTRY_CODE_PK -}; -static const UINT_16 g_u2CountryGroup9[] = {COUNTRY_CODE_CA}; -static const UINT_16 g_u2CountryGroup10[] = -{ - COUNTRY_CODE_CL, COUNTRY_CODE_IN, COUNTRY_CODE_SA, COUNTRY_CODE_SG, COUNTRY_CODE_VE, - COUNTRY_CODE_MY, COUNTRY_CODE_VN, COUNTRY_CODE_EG -}; -static const UINT_16 g_u2CountryGroup11[] = {COUNTRY_CODE_IL, COUNTRY_CODE_UA}; -static const UINT_16 g_u2CountryGroup12[] = {COUNTRY_CODE_JO, COUNTRY_CODE_KW}; -static const UINT_16 g_u2CountryGroup13[] = {COUNTRY_CODE_KR, COUNTRY_CODE_OM}; -static const UINT_16 g_u2CountryGroup14[] = -{ - COUNTRY_CODE_EU - /* When country code is not found, this domain info will be used. - * So mark all country codes to reduce search time. 20110908 - */ - /*, COUNTRY_CODE_PH, COUNTRY_CODE_TR, COUNTRY_CODE_IR, COUNTRY_CODE_BY, - COUNTRY_CODE_LK */ -}; - - -DOMAIN_INFO_ENTRY arSupportedRegDomains[] = { - { - (PUINT_16) g_u2CountryGroup0, sizeof(g_u2CountryGroup0) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup1, sizeof(g_u2CountryGroup1) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup2, sizeof(g_u2CountryGroup2) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup3, sizeof(g_u2CountryGroup3) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_14 */ - { 82, BAND_2G4, CHNL_SPAN_5, 14, 1, FALSE }, - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE } /* CH_SET_UNII_UPPER_NA */ - } - }, - { - (PUINT_16) g_u2CountryGroup4, sizeof(g_u2CountryGroup4) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup5, sizeof(g_u2CountryGroup5) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup6, sizeof(g_u2CountryGroup6) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup7, sizeof(g_u2CountryGroup7) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup8, sizeof(g_u2CountryGroup8) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup9, sizeof(g_u2CountryGroup9) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 5, FALSE }, /* CH_SET_UNII_WW_100_116_132_140 */ - { 121, BAND_5G, CHNL_SPAN_20, 132, 5, FALSE }, - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - } - }, - { - (PUINT_16) g_u2CountryGroup10, sizeof(g_u2CountryGroup10) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup11, sizeof(g_u2CountryGroup11) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup12, sizeof(g_u2CountryGroup12) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup13, sizeof(g_u2CountryGroup13) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 8, FALSE }, /* CH_SET_UNII_WW_100_128 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - /* Note: The final one is for Europe union now. */ - (PUINT_16) g_u2CountryGroup14, sizeof(g_u2CountryGroup14) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 7, FALSE }, /* CH_SET_UNII_UPPER_149_173 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - } -}; - -#if 0 -COUNTRY_CH_SET_T arCountryChSets[] = { - /* idx=0: US, Bahamas, Barbados, Bolivia(Voluntary), Dominica (the Commonwealth of Dominica), - The Dominican Republic, Haiti */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=1: Brazil, Ecuador, Hong Kong, Mexico, Peru */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=2: JP1, Colombia(Voluntary), Paraguay */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=3: JP2 */ - {CH_SET_2G4_1_14, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=4: CN, Uruguay, Morocco */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=5: Argentina */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=6: Australia, New Zealand */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=7: Russia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=8: Indonesia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_161}, - /* idx=9: Canada */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_116_132_140, CH_SET_UNII_UPPER_149_165}, - /* idx=10: Chile, India, Saudi Arabia, Singapore */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=11: Israel, Ukraine */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=12: Jordan, Kuwait */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=13: South Korea */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_128, CH_SET_UNII_UPPER_149_165}, - /* idx=14: Taiwan */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=15: EU all countries */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_173} -}; -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ) -{ -#define REG_DOMAIN_DEF_IDX 14 /* EU (Europe Union) */ -#define REG_DOMAIN_GROUP_NUM \ - (sizeof(arSupportedRegDomains) / sizeof(DOMAIN_INFO_ENTRY)) - - UINT_16 i, j; - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_REG_INFO_T prRegInfo; - UINT_16 u2TargetCountryCode; - - ASSERT(prAdapter); - - if (prAdapter->prDomainInfo) { - return prAdapter->prDomainInfo; - } - - prRegInfo = &prAdapter->prGlueInfo->rRegInfo; - - DBGLOG(RLM, INFO, ("Domain: map=%d, idx=%d, code=0x%04x\n", - prRegInfo->eRegChannelListMap, prRegInfo->ucRegChannelListIndex, - prAdapter->rWifiVar.rConnSettings.u2CountryCode)); - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_TBL_IDX && - prRegInfo->ucRegChannelListIndex < REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[prRegInfo->ucRegChannelListIndex]; - goto L_set_domain_info; - } - else if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - prDomainInfo = &prRegInfo->rDomainInfo; - goto L_set_domain_info; - } - - u2TargetCountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - - /* If no matched country code, the final one will be used - * The final one is for Europe union now. - */ - for (i = 0; i < REG_DOMAIN_GROUP_NUM; i++) { - prDomainInfo = &arSupportedRegDomains[i]; - - ASSERT((prDomainInfo->u4CountryNum && prDomainInfo->pu2CountryGroup) || - prDomainInfo->u4CountryNum == 0); - - for (j = 0; j < prDomainInfo->u4CountryNum; j++) { - if (prDomainInfo->pu2CountryGroup[j] == u2TargetCountryCode) { - break; - } - } - if (j < prDomainInfo->u4CountryNum) { - break; /* Found */ - } - } - - DATA_STRUC_INSPECTING_ASSERT(REG_DOMAIN_DEF_IDX < REG_DOMAIN_GROUP_NUM); - - if (i >= REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[REG_DOMAIN_DEF_IDX]; - } - -L_set_domain_info: - - prAdapter->prDomainInfo = prDomainInfo; - return prDomainInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] The input variable pointed by pucNumOfChannel is the max -* arrary size. The return value indciates meaning list size. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - UINT_8 i, j, ucNum; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - ASSERT(prAdapter); - ASSERT(paucChannelList); - ASSERT(pucNumOfChannel); - - /* If no matched country code, the final one will be used */ - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - ucNum = 0; - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_NULL || prSubband->ucBand >= BAND_NUM || - (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand)) { - continue; - } - - if (eSpecificBand == BAND_NULL || prSubband->ucBand == eSpecificBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if (ucNum >= ucMaxChannelNum) { - break; - } - paucChannelList[ucNum].eBand = prSubband->ucBand; - paucChannelList[ucNum].ucChannelNum = - prSubband->ucFirstChannelNum + j * prSubband->ucChannelSpan; - ucNum++; - } - } - } - - *pucNumOfChannel = ucNum; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ) -{ - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_CMD_SET_DOMAIN_INFO_T prCmd; - WLAN_STATUS rStatus; - UINT_8 i; - P_DOMAIN_SUBBAND_INFO prSubBand; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_DOMAIN_INFO_T)); - ASSERT(prCmd); - - /* To do: exception handle */ - if (!prCmd) { - DBGLOG(RLM, ERROR, ("Domain: no buf to send cmd\n")); - return; - } - kalMemZero(prCmd, sizeof(CMD_SET_DOMAIN_INFO_T)); - - prCmd->u2CountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - prCmd->u2Reserved = 0; - prCmd->uc2G4Bandwidth = - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode; - prCmd->uc5GBandwidth = - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode; - - for (i = 0; i < 6; i++) { - prSubBand = &prDomainInfo->rSubBand[i]; - - prCmd->rSubBand[i].ucRegClass = prSubBand->ucRegClass; - prCmd->rSubBand[i].ucBand = prSubBand->ucBand; - - if (prSubBand->ucBand != BAND_NULL && prSubBand->ucBand < BAND_NUM) { - prCmd->rSubBand[i].ucChannelSpan = prSubBand->ucChannelSpan; - prCmd->rSubBand[i].ucFirstChannelNum = prSubBand->ucFirstChannelNum; - prCmd->rSubBand[i].ucNumChannels = prSubBand->ucNumChannels; - } - } - - /* Update domain info to chip */ - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_DOMAIN_INFO, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - fgIsOid, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_DOMAIN_INFO_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmd, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmd); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return TRUE Legal channel -* FALSE Illegal channel for current regulatory domain -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ) -{ - UINT_8 i, j; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand) { - continue; - } - - if (prSubband->ucBand == eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == ucChannel) { - return TRUE; - } - } - } - } - - return FALSE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_obss.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_obss.c deleted file mode 100755 index 143d72104a24..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_obss.c +++ /dev/null @@ -1,461 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_obss.c#2 $ -*/ - -/*! \file "rlm_obss.c" - \brief - -*/ - - - -/* -** $Log: rlm_obss.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Avoid possible OBSS scan when BSS is switched - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Regulation class is changed to 81 in 20_40_coexistence action frame - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add more ASSERT to check exception - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - cnmTimerInitTimer(prAdapter, &prBssInfo->rObssScanTimer, - rlmObssScanTimeout, (UINT_32) prBssInfo); - } /* end of RLM_NET_FOR_EACH */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmObssUpdateChnlLists ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - UINT_16 i, u2PayloadLen; - - ASSERT(prMsgHdr); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prScanDoneMsg->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(RLM, INFO, ("OBSS Scan Done (NetIdx=%d, Mode=%d)\n", - prScanDoneMsg->ucNetTypeIndex, prBssInfo->eCurrentOPMode)); - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_ENABLE_WIFI_DIRECT - /* AP mode */ - if ((prAdapter->fgIsP2PRegistered) && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex)) && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - return; - } -#endif - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan Done (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - /* To do: check 2.4G channel list to decide if obss mgmt should be - * sent to associated AP. Note: how to handle concurrent network? - * To do: invoke rlmObssChnlLevel() to decide if 20/40 BSS coexistence - * management frame is needed. - */ - if ((prBssInfo->auc2G_20mReqChnlList[0] > 0 || - prBssInfo->auc2G_NonHtChnlList[0] > 0) && - (prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN)) != NULL) { - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence mgmt(20mReq=%d, NonHt=%d)\n", - prBssInfo->auc2G_20mReqChnlList[0], - prBssInfo->auc2G_NonHtChnlList[0])); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = - (prBssInfo->auc2G_20mReqChnlList[0] > 0) ? BSS_COEXIST_20M_REQ : 0; - - u2PayloadLen = 2 + 3; - - if (prBssInfo->auc2G_NonHtChnlList[0] > 0) { - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - - prTxFrame->rChnlReport.ucId = ELEM_ID_20_40_INTOLERANT_CHNL_REPORT; - prTxFrame->rChnlReport.ucLength = - prBssInfo->auc2G_NonHtChnlList[0] + 1; - prTxFrame->rChnlReport.ucRegulatoryClass = 81; /* 2.4GHz, ch1~13 */ - for (i = 0; i < prBssInfo->auc2G_NonHtChnlList[0] && - i < CHNL_LIST_SZ_2G; i++) { - prTxFrame->rChnlReport.aucChannelList[i] = - prBssInfo->auc2G_NonHtChnlList[i+1]; - } - - u2PayloadLen += IE_SIZE(&prTxFrame->rChnlReport); - } - ASSERT((WLAN_MAC_HEADER_LEN + u2PayloadLen) <= PUBLIC_ACTION_MAX_LEN); - - /* Clear up channel lists in 2.4G band */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - } /* end of prMsduInfo != NULL */ - - if (prBssInfo->u2ObssScanInterval > 0) { - DBGLOG(RLM, INFO, ("Set OBSS timer (NetIdx=%d, %d sec)\n", - prBssInfo->ucNetTypeIndex, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = (P_BSS_INFO_T) u4Data; - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - /* AP mode */ - if (prAdapter->fgIsP2PRegistered && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex)) && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - - prBssInfo->fgObssActionForcedTo20M = FALSE; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - - return; - } -#endif /* end of CFG_ENABLE_WIFI_DIRECT */ - - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan timeout (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmObssTriggerScan(prAdapter, prBssInfo); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_MSG_SCN_SCAN_REQ prScanReqMsg; - - ASSERT(prBssInfo); - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - ASSERT(prScanReqMsg); - - if (!prScanReqMsg) { - DBGLOG(RLM, WARN, ("No buf for OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - return; - } - - /* It is ok that ucSeqNum is set to fixed value because the same network - * OBSS scan interval is limited to OBSS_SCAN_MIN_INTERVAL (min 10 sec) - * and scan module don't care seqNum of OBSS scanning - */ - prScanReqMsg->rMsgHdr.eMsgId = MID_RLM_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = 0x33; - prScanReqMsg->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - prScanReqMsg->ucSSIDLength = 0; - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - prScanReqMsg->u2IELen = 0; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - DBGLOG(RLM, INFO, ("Timeout to trigger OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_protection.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_protection.c deleted file mode 100755 index 27ffda023bf8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rlm_protection.c +++ /dev/null @@ -1,108 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_protection.c#1 $ -*/ - -/*! \file "rlm_protection.c" - \brief - -*/ - - - -/* -** $Log: rlm_protection.c $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 03 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RTS threshold temporarily for AMPDU - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/roaming_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/roaming_fsm.c deleted file mode 100755 index c941873eb8f3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/roaming_fsm.c +++ /dev/null @@ -1,583 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.c" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - - - -/* -** $Log: roaming_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_ROAMING -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugRoamingState[ROAMING_STATE_NUM] = { - (PUINT_8)DISP_STRING("ROAMING_STATE_IDLE"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DECISION"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DISCOVERY"), - (PUINT_8)DISP_STRING("ROAMING_STATE_ROAM") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define ROAMING_ENABLE_CHECK(_roam) \ - { \ - if (!(_roam->fgIsEnableRoaming)) {return;} \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the value in ROAMING_FSM_INFO_T for ROAMING FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmInit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Initiate FSM - prRoamingFsmInfo->fgIsEnableRoaming = prConnSettings->fgIsEnableRoaming; - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - prRoamingFsmInfo->rRoamingDiscoveryUpdateTime = 0; - - return; -} /* end of roamingFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the value in AIS_FSM_INFO_T for AIS FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmUninit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - - return; -} /* end of roamingFsmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send commands to firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - WLAN_STATUS rStatus; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmSendCmd(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_ROAMING_TRANSIT, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(ROAMING_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prParam, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} /* end of roamingFsmSendCmd() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the recent time when ScanDone occurred -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, LOUD, ("->roamingFsmScanResultsUpdate(): Current Time = %ld\n", kalGetTimeTick())); - - GET_CURRENT_SYSTIME(&prRoamingFsmInfo->rRoamingDiscoveryUpdateTime); - - return; -} /* end of roamingFsmScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of ROAMING for AIS Infra. -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN ENUM_ROAMING_STATE_T] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T ePreviousState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - do { - - /* Do entering Next State */ -#if DBG - DBGLOG(ROAMING, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugRoamingState[prRoamingFsmInfo->eCurrentState], - apucDebugRoamingState[eNextState])); -#else - DBGLOG(ROAMING, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_ROAMING_IDX, - prRoamingFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - ePreviousState = prRoamingFsmInfo->eCurrentState; - prRoamingFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prRoamingFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case ROAMING_STATE_IDLE: - case ROAMING_STATE_DECISION: - break; - - case ROAMING_STATE_DISCOVERY: - { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prRoamingFsmInfo->rRoamingDiscoveryUpdateTime, - SEC_TO_SYSTIME(ROAMING_DISCOVERY_TIMEOUT_SEC))) { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Timeout")); - aisFsmRunEventRoamingDiscovery(prAdapter, TRUE); - } - else { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Updated")); - aisFsmRunEventRoamingDiscovery(prAdapter, FALSE); - } - } - break; - - case ROAMING_STATE_ROAM: - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - } - } - while (fgIsTransition); - - return; - -} /* end of roamingFsmSteps() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state after join completion -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - if (prAisBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - return; - } - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING START: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as DECISION, DISCOVERY -> DECISION */ - if (!(prRoamingFsmInfo->eCurrentState == ROAMING_STATE_IDLE - || prRoamingFsmInfo->eCurrentState == ROAMING_STATE_ROAM)) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_START; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventStart() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Discovery state when deciding to find a candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING DISCOVERY: Current Time = %ld\n", kalGetTimeTick())); - - /* DECISION -> DISCOVERY */ - /* Errors as IDLE, DISCOVERY, ROAM -> DISCOVERY */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DECISION) { - return; - } - - eNextState = ROAMING_STATE_DISCOVERY; - /* DECISION -> DISCOVERY */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - - // sync. rcpi with firmware - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - if (prBssDesc) { - prBssDesc->ucRCPI = (UINT_8)(u4Param&0xff); - } - - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Roam state after Scan Done -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ROAM: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, ROAM -> ROAM */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DISCOVERY) { - return; - } - - eNextState = ROAMING_STATE_ROAM; - /* DISCOVERY -> ROAM */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ROAM; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventRoam() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state as being failed to find out any candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING FAIL: reason %x Current Time = %ld\n", u4Param, kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, DISCOVERY -> DECISION */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_ROAM) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - /* ROAM -> DECISION */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_FAIL; - rParam.u2Data = (UINT_16)(u4Param&0xffff); - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventFail() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Idle state as beging aborted by other moduels, AIS -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ABORT: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = ROAMING_STATE_IDLE; - /* IDLE, DECISION, DISCOVERY, ROAM -> IDLE */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ABORT; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventAbort() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process events from firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - DBGLOG(ROAMING, LOUD, ("ROAMING Process Events: Current Time = %ld\n", kalGetTimeTick())); - - if (ROAMING_EVENT_DISCOVERY == prParam->u2Event) { - roamingFsmRunEventDiscovery(prAdapter, prParam->u2Data); - } - - return WLAN_STATUS_SUCCESS; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rsn.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rsn.c deleted file mode 100755 index ea3e8a10e70a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/rsn.c +++ /dev/null @@ -1,2617 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rsn.c#2 $ -*/ - -/*! \file "rsn.c" - \brief This file including the 802.11i, wpa and wpa2(rsn) related function. - - This file provided the macros and functions library support the wpa/rsn ie parsing, - cipher and AKM check to help the AP seleced deciding, tkip mic error handler and rsn PMKID support. -*/ - - - -/* -** $Log: rsn.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 09 2012 chinglan.wang - * NULL - * Fix the condition error. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 12 24 2010 chinglan.wang - * NULL - * [MT6620][Wi-Fi] Modify the key management in the driver for WPS function. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 yuche.tsai - * NULL - * Fix compile error, remove unused pointer in rsnGenerateRSNIE(). - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * [WPD00003840] [MT6620 5931] Security migration - * migration from firmware. - * - * 05 27 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * not indiate pmkid candidate while no new one scaned. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the name - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * using the Rx0 port to indicate event - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code for generate the WPA/RSN IE for assoc req - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust code for pmkid event - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for event (mic error and pmkid indicate) and do some function rename - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security feature, including pmkid - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -//extern PHY_ATTRIBUTE_T rPhyAttributes[]; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse RSN IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** RSN information from the given RSN IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseRsnIE ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ) -{ - UINT_32 i; - INT_32 u4RemainRsnIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = RSN_CIPHER_SUITE_CCMP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUINT_8 pucPairSuite = NULL; - PUINT_8 pucAuthSuite = NULL; - PUINT_8 cp; - - DEBUGFUNC("rsnParseRsnIE"); - - ASSERT(prInfoElem); - ASSERT(prRsnInfo); - - /* Verify the length of the RSN IE. */ - if (prInfoElem->ucLength < 2) { - DBGLOG(RSN, TRACE, ("RSN IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check RSN version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE,("Unsupported RSN IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainRsnIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainRsnIeLen < 4) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainRsnIeLen -= 4; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the RSN u2Capabilities field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in RSN capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - } while (FALSE); - - /* Save the RSN information for the BSS. */ - prRsnInfo->ucElemId = ELEM_ID_RSN; - - prRsnInfo->u2Version = u2Version; - - prRsnInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("RSN: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prRsnInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prRsnInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for RSN: CCMP. */ - prRsnInfo->u4PairwiseKeyCipherSuiteCount = 1; - prRsnInfo->au4PairwiseKeyCipherSuite[0] = RSN_CIPHER_SUITE_CCMP; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prRsnInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prRsnInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for RSN. */ - prRsnInfo->u4AuthKeyMgtSuiteCount = 1; - prRsnInfo->au4AuthKeyMgtSuite[0] = RSN_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prRsnInfo->u2RsnCap = u2Cap; -#if CFG_SUPPORT_802_11W - prRsnInfo->fgRsnCapPresent = TRUE; -#endif - DBGLOG(RSN, LOUD, ("RSN cap: 0x%04x\n", prRsnInfo->u2RsnCap)); - - return TRUE; -} /* rsnParseRsnIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WPA IE. -* -* \param[in] prInfoElem Pointer to the WPA IE. -* \param[out] prWpaInfo Pointer to the BSSDescription structure to store the -* WPA information from the given WPA IE. -* -* \retval TRUE Succeeded. -* \retval FALSE Failed. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseWpaIE ( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWpaIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WPA_CIPHER_SUITE_TKIP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - BOOLEAN fgCapPresent = FALSE; - - DEBUGFUNC("rsnParseWpaIE"); - - ASSERT(prInfoElem); - ASSERT(prWpaInfo); - - /* Verify the length of the WPA IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(RSN, TRACE,("WPA IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WPA version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE, ("Unsupported WPA IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainWpaIeLen = (INT_32) prInfoElem->ucLength - 6; - - do { - if (u4RemainWpaIeLen == 0) { - break; - } - - /* WPA_OUI : 4 - Version : 2 - GroupSuite : 4 - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - Cap : 2 */ - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWpaIeLen < 4) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWpaIeLen -= 4; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the WPA u2Capabilities field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in WPA capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - fgCapPresent = TRUE; - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWpaIeLen -= 2; - } while (FALSE); - - /* Save the WPA information for the BSS. */ - - prWpaInfo->ucElemId = ELEM_ID_WPA; - - prWpaInfo->u2Version = u2Version; - - prWpaInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("WPA: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prWpaInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWpaInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WPA: TKIP. */ - prWpaInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWpaInfo->au4PairwiseKeyCipherSuite[0] = WPA_CIPHER_SUITE_TKIP; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prWpaInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWpaInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WPA. */ - prWpaInfo->u4AuthKeyMgtSuiteCount = 1; - prWpaInfo->au4AuthKeyMgtSuite[0] = WPA_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - if (fgCapPresent) { - prWpaInfo->fgRsnCapPresent = TRUE; - prWpaInfo->u2RsnCap = u2Cap; - DBGLOG(RSN, LOUD, ("WPA: RSN cap: 0x%04x\n", prWpaInfo->u2RsnCap)); - } - else { - prWpaInfo->fgRsnCapPresent = FALSE; - prWpaInfo->u2RsnCap = 0; - } - - return TRUE; -} /* rsnParseWpaIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired pairwise -* cipher suite from the MIB Pairwise Cipher Suite -* configuration table. -* -* \param[in] u4Cipher The desired pairwise cipher suite to be searched -* \param[out] pu4Index Pointer to the index of the desired pairwise cipher in -* the table -* -* \retval TRUE - The desired pairwise cipher suite is found in the table. -* \retval FALSE - The desired pairwise cipher suite is not found in the -* table. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchSupportedCipher ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - - DEBUGFUNC("rsnSearchSupportedCipher"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i]; - if (prEntry->dot11RSNAConfigPairwiseCipher == u4Cipher && - prEntry->dot11RSNAConfigPairwiseCipherEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchSupportedCipher */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to search the desired -* authentication and key management (AKM) suite from the -* MIB Authentication and Key Management Suites table. -* -* \param[in] u4AkmSuite The desired AKM suite to be searched -* \param[out] pu4Index Pointer to the index of the desired AKM suite in the -* table -* -* \retval TRUE The desired AKM suite is found in the table. -* \retval FALSE The desired AKM suite is not found in the table. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchAKMSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("rsnSearchAKMSuite"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite && - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchAKMSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform RSNA or TSN policy -* selection for a given BSS. -* -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The RSNA/TSN policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The RSNA/TSN policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ -#if CFG_SUPPORT_802_11W - INT_32 i; - UINT_32 j; -#else - UINT_32 i, j; -#endif - BOOLEAN fgSuiteSupported; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_RSN_INFO_T prBssRsnInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetwotkType; - BOOLEAN fgIsWpsActive = (BOOLEAN)FALSE; - - DEBUGFUNC("rsnPerformPolicySelection"); - - ASSERT(prBss); - - DBGLOG(RSN, TRACE, ("rsnPerformPolicySelection\n")); - //Todo:: - eNetwotkType = NETWORK_TYPE_AIS_INDEX; - - prBss->u4RsnSelectedPairwiseCipher = 0; - prBss->u4RsnSelectedGroupCipher = 0; - prBss->u4RsnSelectedAKMSuite = 0; - prBss->ucEncLevel = 0; - -#if CFG_SUPPORT_WPS - fgIsWpsActive = kalWSCGetActiveState(prAdapter->prGlueInfo); - - /* CR1640, disable the AP select privacy check */ - if ( fgIsWpsActive && - (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) && - (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA)) { - DBGLOG(RSN, TRACE,("-- Skip the Protected BSS check\n")); - return TRUE; - } -#endif - - /* Protection is not required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) == 0 ) { - - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - /* Protection is required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) != 0) { - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - - if (prBss->fgIEWPA) { - prBssRsnInfo = &prBss->rWPAInfo; - } - else { - DBGLOG(RSN, TRACE, ("WPA Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2 || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK) { - - if (prBss->fgIERSN) { - prBssRsnInfo = &prBss->rRSNInfo; - } - else { - DBGLOG(RSN, TRACE, ("RSN Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus != ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, ignore this BSS. */ - DBGLOG(RSN, TRACE, ("-- Not WEP-only legacy BSS\n")); - return FALSE; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, use this BSS. */ - DBGLOG(RSN, TRACE, ("-- WEP-only legacy BSS\n")); - return TRUE; - } - - if (prBssRsnInfo->u4PairwiseKeyCipherSuiteCount == 1 && - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[0]) == - CIPHER_SUITE_NONE) { - /* Since the pairwise cipher use the same cipher suite as the group - cipher in the BSS, we check the group cipher suite against the - current encryption status. */ - fgSuiteSupported = FALSE; - - switch (prBssRsnInfo->u4GroupKeyCipherSuite) { - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION3_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION2_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_WEP40: - case WPA_CIPHER_SUITE_WEP104: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION1_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - } - - if (fgSuiteSupported) { - u4PairwiseCipher = WPA_CIPHER_SUITE_NONE; - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } -#if DBG - else { - DBGLOG(RSN, TRACE, ("Inproper encryption status %d for group-key-only BSS\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } -#endif - } - else { - fgSuiteSupported = FALSE; - - DBGLOG(RSN, TRACE, ("eEncStatus %d %d 0x%x\n", prAdapter->rWifiVar.rConnSettings.eEncStatus, - prBssRsnInfo->u4PairwiseKeyCipherSuiteCount, - prBssRsnInfo->au4PairwiseKeyCipherSuite[0])); - /* Select pairwise/group ciphers */ - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) - { - case ENUM_ENCRYPTION3_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_CCMP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - break; - - case ENUM_ENCRYPTION2_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_TKIP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP104) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP || - GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_TKIP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP/TKIP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - default: - break; - } - } - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (eNetwotkType == NETWORK_TYPE_P2P_INDEX)) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for P2P network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (eNetwotkType == NETWORK_TYPE_BOW_INDEX) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - } - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for BT over Wi-Fi network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } -#endif - - - /* Verify if selected pairwisse cipher is supported */ - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4PairwiseCipher, &i); - - /* Verify if selected group cipher is supported */ - if (fgSuiteSupported) { - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4GroupCipher, &i); - } - - if (!fgSuiteSupported) { - DBGLOG(RSN, TRACE, ("Failed to support selected pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ -#if CFG_SUPPORT_802_11W - if (i != 0) - for (i = (prBssRsnInfo->u4AuthKeyMgtSuiteCount - 1); i >= 0; i--) -#else - for (i = 0; i < prBssRsnInfo->u4AuthKeyMgtSuiteCount; i++) -#endif - { - if (rsnSearchAKMSuite(prAdapter, - prBssRsnInfo->au4AuthKeyMgtSuite[i], - &j)) { - u4AkmSuite = prBssRsnInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(RSN, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(RSN, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(RSN, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - -#if CFG_SUPPORT_802_11W - DBGLOG(RSN, TRACE, ("MFP setting = %d\n ", kalGetMfpSetting(prAdapter->prGlueInfo))); - - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - if (!prBssRsnInfo->fgRsnCapPresent) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability.\n")); - return FALSE; - } - else if (!(prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - if (prBssRsnInfo->u2RsnCap && ((prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR) || - (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC))) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - } - else { - if (prBssRsnInfo->fgRsnCapPresent && (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - DBGLOG(RSN, TRACE, ("fgMgmtProtection = %d\n ", prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection)); -#endif - - if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_CCMP){ - prBss->ucEncLevel = 3; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_TKIP){ - prBss->ucEncLevel = 2; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP104) { - prBss->ucEncLevel = 1; - } - else { - ASSERT(FALSE); - } - prBss->u4RsnSelectedPairwiseCipher = u4PairwiseCipher; - prBss->u4RsnSelectedGroupCipher = u4GroupCipher; - prBss->u4RsnSelectedAKMSuite = u4AkmSuite; - - return TRUE; - -} /* rsnPerformPolicySelection */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate WPA IE for beacon frame. -* -* \param[in] pucIeStartAddr Pointer to put the generated WPA IE. -* -* \return The append WPA-None IE length -* \note -* Called by: JOIN module, compose beacon IE -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWpaNoneIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - P_WPA_INFO_ELEM_T prWpaIE; - UINT_32 u4Suite; - UINT_16 u2SuiteCount; - PUINT_8 cp, cp2; - UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWpaNoneIE"); - - ASSERT(prMsduInfo); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode != AUTH_MODE_WPA_NONE) { - return; - } - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - prWpaIE = (P_WPA_INFO_ELEM_T)(pucBuffer); - - /* Start to construct a WPA IE. */ - /* Fill the Element ID field. */ - prWpaIE->ucElemId = ELEM_ID_WPA; - - /* Fill the OUI and OUI Type fields. */ - prWpaIE->aucOui[0] = 0x00; - prWpaIE->aucOui[1] = 0x50; - prWpaIE->aucOui[2] = 0xF2; - prWpaIE->ucOuiType = VENDOR_OUI_TYPE_WPA; - - /* Fill the Version field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2Version, 1); /* version 1 */ - ucExpendedLen = 6; - - /* Fill the Pairwise Key Cipher Suite List field. */ - u2SuiteCount = 0; - cp = (PUINT_8)&prWpaIE->aucPairwiseKeyCipherSuite1[0]; - - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - u4Suite = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP40; - } - else { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Group Key Cipher Suite field as the same in pair-wise key. */ - WLAN_SET_FIELD_32(&prWpaIE->u4GroupKeyCipherSuite, u4Suite); - ucExpendedLen += 4; - - /* Fill the Pairwise Key Cipher Suite Count field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2PairwiseKeyCipherSuiteCount, u2SuiteCount); - ucExpendedLen += 2; - - cp2 = cp; - - /* Fill the Authentication and Key Management Suite List field. */ - u2SuiteCount = 0; - cp += 2; - - if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_802_1X, &i)) { - u4Suite = WPA_AKM_SUITE_802_1X; - } - else if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_PSK, &i)) { - u4Suite = WPA_AKM_SUITE_PSK; - } - else { - u4Suite = WPA_AKM_SUITE_NONE; - } - - /* This shall be the only avaiable value for current implementation */ - ASSERT(u4Suite == WPA_AKM_SUITE_NONE); - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Authentication and Key Management Suite Count field. */ - WLAN_SET_FIELD_16(cp2, u2SuiteCount); - ucExpendedLen += 2; - - /* Fill the Length field. */ - prWpaIE->ucLength = (UINT_8)ucExpendedLen; - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -} /* rsnGenerateWpaNoneIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWPAIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUCHAR cp; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWPAIE"); - - ASSERT(prMsduInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - //if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - // return; - -#if CFG_ENABLE_WIFI_DIRECT - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetTkipCipher(prAdapter->prGlueInfo)))) || - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK))) -#else - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK)))) -#endif - { - /* Construct a WPA IE for association request frame. */ - WPA_IE(pucBuffer)->ucElemId = ELEM_ID_WPA; - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - WPA_IE(pucBuffer)->aucOui[0] = 0x00; - WPA_IE(pucBuffer)->aucOui[1] = 0x50; - WPA_IE(pucBuffer)->aucOui[2] = 0xF2; - WPA_IE(pucBuffer)->ucOuiType = VENDOR_OUI_TYPE_WPA; - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2Version, 1); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedGroupCipher); - - cp = (PUCHAR) &WPA_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedPairwiseCipher); - cp += 4; - - WLAN_SET_FIELD_16(cp, 1); - cp += 2; -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_AKM_SUITE_PSK); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedAKMSuite); - cp += 4; - - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateWPAIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate RSN IE for -* associate request frame. -* -* \param[in] prMsduInfo The Selected BSS description -* -* \retval The append RSN IE length -* -* \note -* Called by: AIS module, P2P module, BOW module Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateRSNIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 u4Entry; - PUCHAR cp; - //UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("rsnGenerateRSNIE"); - - ASSERT(prMsduInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - /* Todo:: network id */ - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if ( -#if CFG_ENABLE_WIFI_DIRECT - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetCcmpCipher(prAdapter->prGlueInfo))) || -#endif -#if CFG_ENABLE_BT_OVER_WIFI - (eNetworkId == NETWORK_TYPE_BOW_INDEX) || -#endif - (eNetworkId == NETWORK_TYPE_AIS_INDEX /* prCurrentBss->fgIERSN */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK)))) - { - /* Construct a RSN IE for association request frame. */ - RSN_IE(pucBuffer)->ucElemId = ELEM_ID_RSN; - RSN_IE(pucBuffer)->ucLength = ELEM_ID_RSN_LEN_FIXED; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2Version, 1); // Version - WLAN_SET_FIELD_32(&RSN_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedGroupCipher); // Group key suite - cp = (PUCHAR) &RSN_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedPairwiseCipher); - cp += 4; - WLAN_SET_FIELD_16(cp, 1); // AKM suite count - cp += 2; - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedAKMSuite); // AKM suite - cp += 4; - WLAN_SET_FIELD_16(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u2RsnSelectedCapInfo); // Capabilities -#if CFG_SUPPORT_802_11W - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection) { - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC | ELEM_WPA_CAP_MFPR); // Capabilities - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC); // Capabilities - } - } -#endif - cp += 2; - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX) - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && - rsnSearchPmkidEntry(prAdapter, prStaRec->aucMacAddr, &u4Entry)) { - //DBGLOG(RSN, TRACE, ("Add Pmk at assoc req\n")); - //DBGLOG(RSN, TRACE, ("addr " MACSTR" PMKID "MACSTR"\n", - // MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arBSSID), MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - if (prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].fgPmkidExist) { - RSN_IE(pucBuffer)->ucLength = 38; - WLAN_SET_FIELD_16(cp, 1); // PMKID count - cp += 2; - DBGLOG(RSN, TRACE, ("BSSID "MACSTR" ind=%d\n", MAC2STR(prStaRec->aucMacAddr), u4Entry)); - DBGLOG(RSN, TRACE, ("use PMKID "MACSTR"\n", MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - kalMemCopy(cp, (PVOID)prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - //ucExpendedLen = 40; - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - -#if CFG_SUPPORT_802_11W - if ((eNetworkId == NETWORK_TYPE_AIS_INDEX) && (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) /* (mgmt_group_cipher == WPA_CIPHER_AES_128_CMAC) */ ) { - WLAN_SET_FIELD_32(cp, RSN_CIPHER_SUITE_AES_128_CMAC); - cp += 4; - RSN_IE(pucBuffer)->ucLength += 4; - } -#endif - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateRSNIE */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is WFA IE and return Type and -* SubType for further process. -* -* \param[in] pucBuf Pointer to the buffer of WFA Information Element. -* \param[out] pucOuiType Pointer to the storage of OUI Type. -* \param[out] pu2SubTypeVersion Pointer to the storage of OUI SubType and Version. - -* \retval TRUE Parse IE ok -* \retval FALSE Parse IE fail -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseCheckForWFAInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WFA_T prWfaIE; - - ASSERT(pucBuf); - ASSERT(pucOuiType); - ASSERT(pu2SubTypeVersion); - prWfaIE = (P_IE_WFA_T)pucBuf; - - do { - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - WLAN_GET_FIELD_16(&prWfaIE->aucOuiSubTypeVersion[0], pu2SubTypeVersion); - - return TRUE; - } - while (FALSE); - - return FALSE; - -} /* end of rsnParseCheckForWFAInfoElem() */ - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is RSN IE with CCMP PSK -* -* \param[in] prAdapter Pointer to Adapter -* \param[in] prSwRfb Pointer to the rx buffer -* \param[in] pIE Pointer rthe buffer of Information Element. -* \param[out] prStatusCode Pointer to the return status code. - -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -rsnParserCheckForRSNCCMPPSK( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ) -{ - - RSN_INFO_T rRsnIe; - - ASSERT(prAdapter); - ASSERT(prIe); - ASSERT(pu2StatusCode); - - *pu2StatusCode = STATUS_CODE_INVALID_INFO_ELEMENT; - - if (rsnParseRsnIE(prAdapter, prIe, &rRsnIe)) { - if ((rRsnIe.u4PairwiseKeyCipherSuiteCount != 1) || (rRsnIe.au4PairwiseKeyCipherSuite[0] != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_PAIRWISE_CIPHER; - return; - } - if ((rRsnIe.u4GroupKeyCipherSuite != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_GROUP_CIPHER; - return; - } - if ((rRsnIe.u4AuthKeyMgtSuiteCount != 1) || (rRsnIe.au4AuthKeyMgtSuite[0] != RSN_AKM_SUITE_PSK)) { - *pu2StatusCode = STATUS_CODE_INVALID_AKMP; - return; - } - - DBGLOG(RSN, TRACE, ("RSN with CCMP-PSK\n" )); - *pu2StatusCode = WLAN_STATUS_SUCCESS; - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an authentication event to NDIS. -* -* \param[in] u4Flags Authentication event: \n -* PARAM_AUTH_REQUEST_REAUTH 0x01 \n -* PARAM_AUTH_REQUEST_KEYUPDATE 0x02 \n -* PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 \n -* PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E \n -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenMicErrorEvent ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgFlags - ) -{ - P_PARAM_AUTH_EVENT_T prAuthEvent; - - DEBUGFUNC("rsnGenMicErrorEvent"); - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, (PVOID)prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucBSSID, MAC_ADDR_LEN); - - if (fgFlags == TRUE) - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - else - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); - -} /* rsnGenMicErrorEvent */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle TKIP MIC failures. -* -* \param[in] adapter_p Pointer to the adapter object data area. -* \param[in] prSta Pointer to the STA which occur MIC Error -* \param[in] fgErrorKeyType type of error key -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnTkipHandleMICFailure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ) -{ - //UINT_32 u4RsnaCurrentMICFailTime; - //P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnTkipHandleMICFailure"); - - ASSERT(prAdapter); -#if 1 - rsnGenMicErrorEvent(prAdapter,/* prSta,*/ fgErrorKeyType); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); -#else - ASSERT(prSta); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Record the MIC error occur time. */ - GET_CURRENT_SYSTIME(&u4RsnaCurrentMICFailTime); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); - - /* If less than 60 seconds have passed since a previous TKIP MIC failure, - disassociate from the AP and wait for 60 seconds before (re)associating - with the same AP. */ - if (prAisSpecBssInfo->u4RsnaLastMICFailTime != 0 && - !CHECK_FOR_TIMEOUT(u4RsnaCurrentMICFailTime, - prAisSpecBssInfo->u4RsnaLastMICFailTime, - SEC_TO_SYSTIME(TKIP_COUNTERMEASURE_SEC))) { - /* If less than 60 seconds expired since last MIC error, we have to - block traffic. */ - - DBGLOG(RSN, INFO, ("Start blocking traffic!\n")); - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - - secFsmEventStartCounterMeasure(prAdapter, prSta); - } - else { - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - DBGLOG(RSN, INFO, ("First TKIP MIC error!\n")); - } - - COPY_SYSTIME(prAisSpecBssInfo->u4RsnaLastMICFailTime, u4RsnaCurrentMICFailTime); -#endif -} /* rsnTkipHandleMICFailure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS Desc at scan result list -* \param[out] pu4CandidateCount Pointer to the number of selected candidates. -* It is set to zero if no BSSID matches our requirement. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnSelectPmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("rsnSelectPmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - /* Search a BSS with the same SSID from the given BSS description set. */ - //DBGLOG(RSN, TRACE, ("Check scan result ["MACSTR"]\n", - // MAC2STR(prBssDesc->aucBSSID))); - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - -#if 0 - if ((prBssDesc->u2BSSBasicRateSet & - ~(rPhyAttributes[prAisBssInfo->ePhyType].u2SupportedRateSet)) || - prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(RSN, TRACE, ("-- Rate set not matched\n")); - return; - } - - if (/* prBssDesc->u4RsnSelectedPairwiseCipher != prAisBssInfo->u4RsnSelectedPairwiseCipher ||*/ - prBssDesc->u4RsnSelectedGroupCipher != prAisBssInfo->u4RsnSelectedGroupCipher /*|| - prBssDesc->u4RsnSelectedAKMSuite != prAisBssInfo->u4RsnSelectedAKMSuite */) { - DBGLOG(RSN, TRACE, ("-- Encrypt status not matched for PMKID \n")); - return; - } -#endif - - rsnUpdatePmkidCandidateList(prAdapter, prBssDesc); - -} /* rsnSelectPmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS DESC at scan result list -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnUpdatePmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - UINT_32 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnUpdatePmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - - for (i = 0; i < CFG_MAX_PMKID_CACHE; i++) { - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisSpecBssInfo->arPmkidCandicate[i].aucBssid)) - return; - } - - /* If the number of selected BSSID exceed MAX_NUM_PMKID_CACHE(16), - then we only store MAX_NUM_PMKID_CACHE(16) in PMKID cache */ - if ((prAisSpecBssInfo->u4PmkidCandicateCount + 1) > CFG_MAX_PMKID_CACHE) { - prAisSpecBssInfo->u4PmkidCandicateCount --; - } - - i = prAisSpecBssInfo->u4PmkidCandicateCount; - - COPY_MAC_ADDR((PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - (PVOID)prBssDesc->aucBSSID); - - if (prBssDesc->u2RsnCap & MASK_RSNIE_CAP_PREAUTH) { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 1; - DBGLOG(RSN, TRACE, ("Add " MACSTR " with pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - else { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 0; - DBGLOG(RSN, TRACE, ("Add " MACSTR " without pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - - prAisSpecBssInfo->u4PmkidCandicateCount ++; - -} /* rsnUpdatePmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired entry in -* PMKID cache according to the BSSID -* -* \param[in] pucBssid Pointer to the BSSID -* \param[out] pu4EntryIndex Pointer to place the found entry index -* -* \retval TRUE, if found one entry for specified BSSID -* \retval FALSE, if not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchPmkidEntry ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ) -{ - UINT_32 i; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnSearchPmkidEntry"); - - ASSERT(pucBssid); - ASSERT(pu4EntryIndex); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (prAisSpecBssInfo->u4PmkidCacheCount > CFG_MAX_PMKID_CACHE) { - return FALSE; - } - - ASSERT(prAisSpecBssInfo->u4PmkidCacheCount <= CFG_MAX_PMKID_CACHE); - - /* Search for desired BSSID */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, pucBssid, - MAC_ADDR_LEN)) { - break; - } - } - - /* If desired BSSID is found, then set the PMKID */ - if (i < prAisSpecBssInfo->u4PmkidCacheCount) { - *pu4EntryIndex = i; - - return TRUE; - } - - return FALSE; -} /* rsnSearchPmkidEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check if there is difference -* between PMKID candicate list and PMKID cache. If there -* is new candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \retval TRUE, if new member in the PMKID candicate list -* \retval FALSe, if no new member in the PMKID candicate list -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckPmkidCandicate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - UINT_32 i; // Index for PMKID candicate - UINT_32 j; // Indix for PMKID cache - BOOLEAN status = FALSE; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Check for each candicate */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecBssInfo->u4PmkidCacheCount; j++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN)) { - //DBGLOG(RSN, TRACE, (MACSTR" at PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - break; - } - } - - /* No entry found in PMKID cache for the candicate, add new one */ - if (j == prAisSpecBssInfo->u4PmkidCacheCount && prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE) { - DBGLOG(RSN, TRACE, ("Add "MACSTR" to PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - kalMemCopy((PVOID)prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.arBSSID, - (PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN); - prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].fgPmkidExist = FALSE; - prAisSpecBssInfo->u4PmkidCacheCount++; - - status = TRUE; - } - } - - return status; -} /* rsnCheckPmkidCandicate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to wait a duration to indicate the pre-auth AP candicate -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnIndicatePmkidCand ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - DBGLOG(RSN, EVENT, ("Security - Time to indicate the PMKID cand.\n")); - - /* If the authentication mode is WPA2 and indication PMKID flag - is available, then we indicate the PMKID candidate list to NDIS and - clear the flag, indicatePMKID */ - - if (prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnGeneratePmkidIndication(prAdapter); - } - - return; -} /* end of rsnIndicatePmkidCand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check the BSS Desc at scan result -* with pre-auth cap at wpa2 mode. If there -* is candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \param[in] prBss The BSS Desc at scan result -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnCheckPmkidCache ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - P_AIS_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - ASSERT(prBss); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if ((prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && - (prConnSettings->eAuthMode == AUTH_MODE_WPA2)) { - rsnSelectPmkidCandidateList(prAdapter, prBss); - - /* Set indication flag of PMKID to TRUE, and then connHandleNetworkConnection() - will indicate this later */ - if (rsnCheckPmkidCandicate(prAdapter)) { - DBGLOG(RSN, TRACE, ("Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an PMKID candidate list -* indication to NDIS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4Flags PMKID candidate list event: -* PARAM_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGeneratePmkidIndication ( - IN P_ADAPTER_T prAdapter - ) -{ - P_PARAM_STATUS_INDICATION_T prStatusEvent; - P_PARAM_PMKID_CANDIDATE_LIST_T prPmkidEvent; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - UINT_8 i, j = 0, count = 0; - UINT_32 u4LenOfUsedBuffer; - - DEBUGFUNC("rsnGeneratePmkidIndication"); - - ASSERT(prAdapter); - - prStatusEvent = - (P_PARAM_STATUS_INDICATION_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: PMKID Candidatelist Event */ - prStatusEvent->eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - ASSERT(prStatusEvent); - - prPmkidEvent = (P_PARAM_PMKID_CANDIDATE_LIST_T)(&prStatusEvent->eStatusType + 1); - ASSERT(prPmkidEvent); - - prAisSpecificBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prAisSpecificBssInfo); - - for (i = 0; i < prAisSpecificBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecificBssInfo->u4PmkidCacheCount; j++) { - if (EQUAL_MAC_ADDR( prAisSpecificBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid) && - (prAisSpecificBssInfo->arPmkidCache[j].fgPmkidExist == TRUE)){ - break; - } - } - if (count >= CFG_MAX_PMKID_CACHE) { - break; - } - - if (j == prAisSpecificBssInfo->u4PmkidCacheCount) { - kalMemCopy((PVOID)prPmkidEvent->arCandidateList[count].arBSSID, - (PVOID)prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid, - PARAM_MAC_ADDR_LEN); - prPmkidEvent->arCandidateList[count].u4Flags = - prAisSpecificBssInfo->arPmkidCandicate[i].u4PreAuthFlags; - DBGLOG(RSN, TRACE, (MACSTR" %d\n", MAC2STR(prPmkidEvent->arCandidateList[count].arBSSID), - prPmkidEvent->arCandidateList[count].u4Flags)); - count++; - } - } - - /* PMKID Candidate List */ - prPmkidEvent->u4Version = 1; - prPmkidEvent->u4NumCandidates = count; - DBGLOG(RSN, TRACE, ("rsnGeneratePmkidIndication #%d\n", prPmkidEvent->u4NumCandidates)); - u4LenOfUsedBuffer = sizeof(ENUM_STATUS_TYPE_T) + (2 * sizeof(UINT_32)) + - (count * sizeof(PARAM_PMKID_CANDIDATE_T)); - //dumpMemory8((PUINT_8)prAdapter->aucIndicationEventBuffer, u4LenOfUsedBuffer); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) prAdapter->aucIndicationEventBuffer, - u4LenOfUsedBuffer); - -} /* rsnGeneratePmkidIndication */ -#endif - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WSC IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WSC IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWSCIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 221 :0xDD */ - if (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWSCAssocInfoIE, prAdapter->prGlueInfo->u2WSCAssocInfoIELen); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WSCAssocInfoIELen; - } - -} -#endif - - -#if CFG_SUPPORT_802_11W - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the Bip Key installed or not -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -rsnCheckBipKeyInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - if (prStaRec && prStaRec->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX) - return prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled; - else - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to check the Sa query timeout. -* -* -* \note -* Called by: AIS module, Handle by Sa Quert timeout -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rsnCheckSaQueryTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - UINT_32 now; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - GET_CURRENT_SYSTIME(&now); - - if (CHECK_FOR_TIMEOUT(now, - prBssSpecInfo->u4SaQueryStart, - TU_TO_MSEC(1000))) { - LOG_FUNC("association SA Query timed out\n"); - - prBssSpecInfo->ucSaQueryTimedOut = 1; - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - /* Re-connect */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - return 1; - } - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query timer. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQueryTimer ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prTxFrame; - UINT_16 u2PayloadLen; - PUINT_8 pucTmp = NULL; - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - LOG_FUNC("MFP: Start Sa Query\n"); - - if (prBssSpecInfo->u4SaQueryCount > 0 && - rsnCheckSaQueryTimeout(prAdapter)) { - LOG_FUNC("MFP: u4SaQueryCount count =%d\n", prBssSpecInfo->u4SaQueryCount); - return; - } - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_REQUEST; - - if (prBssSpecInfo->u4SaQueryCount == 0) { - GET_CURRENT_SYSTIME(&prBssSpecInfo->u4SaQueryStart); - } - - if (prBssSpecInfo->u4SaQueryCount) { - pucTmp = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!pucTmp) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc tmp buffer for backup sa query id\n")); - return; - } - kalMemCopy(pucTmp, prBssSpecInfo->pucSaQueryTransId, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - } - - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - - ucTransId[0] = (UINT_8)(kalRandomNumber() & 0xFF); - ucTransId[1] = (UINT_8)(kalRandomNumber() & 0xFF); - - kalMemCopy(prTxFrame->ucTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - - prBssSpecInfo->u4SaQueryCount++; - - prBssSpecInfo->pucSaQueryTransId = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!prBssSpecInfo->pucSaQueryTransId) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc buffer for sa query id list\n")); - return; - } - - if (pucTmp) { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, pucTmp, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - kalMemCopy(&prBssSpecInfo->pucSaQueryTransId[(prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN], - ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - kalMemFree(pucTmp, VIR_MEM_TYPE, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - } - else { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - } - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - DBGLOG(RSN, TRACE, ("Set SA Query timer %d (%d sec)\n", prBssSpecInfo->u4SaQueryCount, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer, - TU_TO_MSEC(201)); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - rsnStartSaQueryTimer(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to stop the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStopSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame = NULL; - UINT_16 u2PayloadLen; - P_STA_RECORD_T prStaRec; - P_ACTION_SA_QUERY_FRAME prTxFrame; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Ignore SA Query Request " - "from unassociated STA " MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - return; - } - DBGLOG(RSN, TRACE, ("IEEE 802.11: Sending SA Query Response to " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - /* SA Query always with protected */ - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_RESPONSE; - - kalMemCopy(prTxFrame->ucTransId, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - UINT_32 i; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prSwRfb->u2PacketLen < ACTION_SA_QUERY_TR_ID_LEN) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Too short SA Query Action " - "frame (len=%lu)\n", (unsigned long) prSwRfb->u2PacketLen)); - return; - } - - if (prRxFrame->ucAction == ACTION_SA_QUERY_REQUEST) { - rsnSaQueryRequest(prAdapter, prSwRfb); - return; - } - - if (prRxFrame->ucAction != ACTION_SA_QUERY_RESPONSE) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Unexpected SA Query " - "Action %d\n", prRxFrame->ucAction)); - return; - } - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Response from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - /* MLME-SAQuery.confirm */ - - for (i = 0; i < prBssSpecInfo->u4SaQueryCount; i++) { - if (kalMemCmp(prBssSpecInfo->pucSaQueryTransId + - i * ACTION_SA_QUERY_TR_ID_LEN, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN) == 0) - break; - } - - if (i >= prBssSpecInfo->u4SaQueryCount) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: No matching SA Query " - "transaction identifier found\n")); - return; - } - - DBGLOG(RSN, TRACE, ("Reply to pending SA Query received\n")); - - rsnStopSaQuery(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w mgmt frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckRxMgmt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - BOOLEAN fgUnicast = TRUE; - BOOLEAN fgRobustAction = FALSE; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */) { - - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - if (prAssocReqFrame->aucDestAddr[0] & BIT(0)) - fgUnicast = FALSE; - - LOG_FUNC("QM RX MGT: rsnCheckRxMgmt = %d 0x%x %d ucSubtype=%x\n", fgUnicast, prHifRxHdr->ucReserved, (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC), ucSubtype); - - if (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC) { - /* "Dropped unprotected Robust Action frame from an MFP STA" */ - /* exclude Public Action */ - if (ucSubtype == 13 /* 0x1011: MAC_FRAME_ACTION */) - { - UINT_8 ucAction = *prSwRfb->pucRecvBuff; - if (ucAction != CATEGORY_PUBLIC_ACTION && ucAction != CATEGORY_HT_ACTION) { -#if DBG && CFG_RX_PKTS_DUMP - LOG_FUNC("QM RX MGT: UnProtected Robust Action frame = %d\n", ucAction); -#endif - fgRobustAction = TRUE; - return TRUE; - } - } - if (fgUnicast && ((ucSubtype == 10 /* 0x1010: MAC_FRAME_DISASSOC */) || (ucSubtype == 12 /* 0x1100: MAC_FRAME_DEAUTH */))) { - LOG_FUNC("QM RX MGT: rsnStartSaQuery\n"); - /* MFP test plan 5.3.3.5 */ - rsnStartSaQuery(prAdapter); - return TRUE; - } - } -#if 0 - else { - if (fgUnicast && ((ucSubtype == MAC_FRAME_DISASSOC) || (ucSubtype == MAC_FRAME_DEAUTH))) { - /* This done by function handler */ - //kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - // WLAN_STATUS_MEDIA_DISCONNECT, - // NULL, - // 0); - } - } -#endif - } - return FALSE; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/saa_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/saa_fsm.c deleted file mode 100755 index 65eee2b53fe3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/saa_fsm.c +++ /dev/null @@ -1,2022 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/saa_fsm.c#2 $ -*/ - -/*! \file "saa_fsm.c" - \brief This file defines the FSM for SAA MODULE. - - This file defines the FSM for SAA MODULE. -*/ - - - -/* -** $Log: saa_fsm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * Add debug message about 40MHz bandwidth allowed - * - * 05 12 2011 cp.wu - * [WCXRP00000720] [MT6620 Wi-Fi][Driver] Do not do any further operation in case STA-REC has been invalidated before SAA-FSM starts to roll - * check for valid STA-REC before SAA-FSM starts to roll. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error of after Station Type Macro modification. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * Add support for P2P join event start. - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with main branch for reseting to state 1 when associating with another AP - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable WiFi Direct function. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * * * Add Connection Policy - Any and Rx Burst Deauth Support for WHQL - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 12 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix compile warning due to declared but not used - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Refine Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAAState[AA_STATE_NUM] = { - (PUINT_8)DISP_STRING("AA_STATE_IDLE"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH2"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH3"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH4"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_ASSOC1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_ASSOC2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH4"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_ASSOC2"), - (PUINT_8)DISP_STRING("AA_STATE_RESOURCE") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of SAA Module. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] eNextState The value of Next State -* @param[in] prRetainedSwRfb Pointer to the retained SW_RFB_T for JOIN Success -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ) -{ - ENUM_AA_STATE_T ePreviousState; - BOOLEAN fgIsTransition; - - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - do { - -#if DBG - DBGLOG(SAA, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAAState[prStaRec->eAuthAssocState], - apucDebugAAState[eNextState])); -#else - DBGLOG(SAA, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SAA_IDX, - prStaRec->eAuthAssocState, - eNextState)); -#endif - ePreviousState = prStaRec->eAuthAssocState; - - /* NOTE(Kevin): This is the only place to change the eAuthAssocState(except initial) */ - prStaRec->eAuthAssocState = eNextState; - - - fgIsTransition = (BOOLEAN)FALSE; - switch (prStaRec->eAuthAssocState) { - case AA_STATE_IDLE: - { - if (ePreviousState != prStaRec->eAuthAssocState) { /* Only trigger this event once */ - - if (prRetainedSwRfb) { - - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_SUCCESS, - prStaRec, - prRetainedSwRfb) == WLAN_STATUS_SUCCESS) { - } - else { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - else { - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_FAILURE, - prStaRec, - NULL) == WLAN_STATUS_RESOURCES) { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - - } - - /* Free allocated TCM memory */ - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - } - break; - - case SAA_STATE_SEND_AUTH1: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - /* Update Station Record - Class 1 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame( - prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_1, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH2: - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame(prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_3, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH4: - break; - - case SAA_STATE_SEND_ASSOC1: - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - if (assocSendReAssocReqFrame(prAdapter, prStaRec) != WLAN_STATUS_SUCCESS) { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_ASSOCIATION_RETRY_TIMEOUT_TU)); - } - } - - break; - - case SAA_STATE_WAIT_ASSOC2: - break; - - case AA_STATE_RESOURCE: - /* TODO(Kevin) Can setup a timer and send message later */ - break; - - default: - DBGLOG(SAA, ERROR, ("Unknown AA STATE\n")); - ASSERT(0); - break; - } - - } - while (fgIsTransition); - - return; - -} /* end of saaFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rJoinStatus, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prStaRec); - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - /* Store limitation about 40Mhz bandwidth capability during association */ - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (rJoinStatus == WLAN_STATUS_SUCCESS) { - prBssInfo->fg40mBwAllowed = prBssInfo->fgAssoc40mBwAllowed; - } - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //@TODO: BOW handler - - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - -} /* end of saaFsmSendEventJoinComplete() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_START_T prSaaFsmStartMsg; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prSaaFsmStartMsg = (P_MSG_SAA_FSM_START_T)prMsgHdr; - prStaRec = prSaaFsmStartMsg->prStaRec; - - if((!prStaRec) || (prStaRec->fgIsInUse == FALSE)) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM.\n")); - - /* record sequence number of request message */ - prStaRec->ucAuthAssocReqSeqNum = prSaaFsmStartMsg->ucSeqNum; - - cnmMemFree(prAdapter, prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(prAdapter, WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - -#if CFG_PRIVACY_MIGRATION - //4 <4> Init the sec fsm - secFsmInit(prAdapter, prStaRec); -#endif - - //4 <5> Reset the STA STATE - /* Update Station Record - Class 1 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for Reconnect issue - - * We won't deactivate the same STA_RECORD_T and then activate it again for the - * case of reconnection. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_1); - - //4 <6> Decide if this BSS 20/40M bandwidth is allowed - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) - && (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - prBssInfo->fgAssoc40mBwAllowed = - cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex); - } - else { - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - DBGLOG(RLM, INFO, ("STA 40mAllowed=%d\n", prBssInfo->fgAssoc40mBwAllowed)); - } - - //4 <7> Trigger SAA FSM - saaFsmSteps(prAdapter, prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth1/Auth3/AssocReq) Event of SAA FSM. -* -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH2; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Strictly check the outgoing frame is matched with current JOIN STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH4; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_ASSOC1: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocReqFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_ASSOC2; - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &(prStaRec->rTxReqDoneOrRxRespTimer), - TU_TO_MSEC(DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventTxDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Tx Request Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: TX REQ TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_SEND_ASSOC1: - saaFsmSteps(prAdapter, prStaRec, prStaRec->eAuthAssocState, (P_SW_RFB_T)NULL); - break; - - default: - return; - } - - return; -} /* end of saaFsmRunEventTxReqTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Rx Response Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ENUM_AA_STATE_T eNextState; - - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: RX RESP TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_WAIT_AUTH2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH1; - break; - - case SAA_STATE_WAIT_AUTH4: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH3; - break; - - case SAA_STATE_WAIT_ASSOC2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_ASSOC1; - break; - - default: - break; /* Ignore other cases */ - } - - - if (eNextState != prStaRec->eAuthAssocState) { - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - - return; -} /* end of saaFsmRunEventRxRespTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - ASSERT(0); - return; - } - - if (!IS_AP_STA(prStaRec)) { - return; - } - - switch(prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_WAIT_AUTH2: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); - - if (prStaRec->ucAuthAlgNum == - (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY) { - - eNextState = SAA_STATE_SEND_AUTH3; - } - else { - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_WAIT_AUTH4: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_4, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); /* Add for 802.11r handling */ - - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - return; -} /* end of saaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if the status code was not success -* @retval WLAN_STATUS_BUFFER_RETAINED if the status code was success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - P_SW_RFB_T prRetainedSwRfb = (P_SW_RFB_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - ASSERT(0); - return rStatus; - } - - if (!IS_AP_STA(prStaRec)) { - return rStatus; - } - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_ASSOC1: - case SAA_STATE_WAIT_ASSOC2: - /* TRUE if the incoming frame is what we are waiting for */ - if (assocCheckRxReAssocRspFrameStatus(prAdapter, - prSwRfb, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - /* Update Station Record - Class 3 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for roaming issue - - * We should deactivate the STA_RECORD_T of previous AP before - * activate new one in Driver. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_3); - - prStaRec->ucJoinFailureCount = 0; // Clear history. - - prRetainedSwRfb = prSwRfb; - rStatus = WLAN_STATUS_PENDING; - } - else { - DBGLOG(SAA, INFO, ("Assoc Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - eNextState = AA_STATE_IDLE; - - saaFsmSteps(prAdapter, prStaRec, eNextState, prRetainedSwRfb); - } - break; - - default: - break; /* Ignore other cases */ - } - - return rStatus; - -} /* end of saaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Deauth Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain deauthentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Deauth frame from BSSID=["MACSTR"].\n", - MAC2STR(prDeauthFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DEAUTHENTICATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDeauthentication(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventRxDeAuth(prAdapter, prStaRec, prSwRfb); - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDeauth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Disassociation Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain disassociation frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Disassoc frame from BSSID=["MACSTR"].\n", - MAC2STR(prDisassocFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DISASSOCIATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDisassociation(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - /* TODO(Kevin) */ - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDisassoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Abort Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Abort Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_ABORT_T prSaaFsmAbortMsg; - P_STA_RECORD_T prStaRec; - - - ASSERT(prMsgHdr); - - prSaaFsmAbortMsg = (P_MSG_SAA_FSM_ABORT_T)prMsgHdr; - prStaRec = prSaaFsmAbortMsg->prStaRec; - - ASSERT(prStaRec); - if(!prStaRec) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Stop SAA FSM.\n")); - - cnmMemFree(prAdapter, prMsgHdr); - - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* Cancel JOIN relative Timer */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { -#if DBG - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %s.\n", - apucDebugAAState[prStaRec->eAuthAssocState])); -#else - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %d.\n", - prStaRec->eAuthAssocState)); -#endif - } - -#if 0 - /* For the Auth/Assoc State to IDLE */ - prStaRec->eAuthAssocState = AA_STATE_IDLE; -#else - /* Free this StaRec */ - cnmStaRecFree(prAdapter, prStaRec, FALSE); -#endif - - return; -} /* end of saaFsmRunEventAbort() */ - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/scan.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/scan.c deleted file mode 100755 index 0e89b493497a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/scan.c +++ /dev/null @@ -1,3025 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/scan.c#3 $ -*/ - -/*! \file "scan.c" - \brief This file defines the scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - - - -/* -** $Log: scan.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 25 2012 cp.wu - * [WCXRP00001258] [MT6620][MT5931][MT6628][Driver] Do not use stale scan result for deciding connection target - * drop off scan result which is older than 5 seconds when choosing which BSS to join - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct typo. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 04 2011 cp.wu - * [WCXRP00001085] [MT6628 Wi-Fi][Driver] deprecate old BSS-DESC if timestamp is reset with received beacon/probe response frames - * deprecate old BSS-DESC when timestamp in received beacon/probe response frames showed a smaller value than before - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 30 2011 cp.wu - * [WCXRP00001021] [MT5931][Driver] Correct scan result generation for conversion between BSS type and operation mode - * correct type casting issue. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 10 2011 cp.wu - * [WCXRP00000922] [MT6620 Wi-Fi][Driver] traverse whole BSS-DESC list for removing - * traverse whole BSS-DESC list because BSSID is not unique anymore. - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * for multiple BSS descriptior detecting issue: - * 1) check BSSID for infrastructure network - * 2) check SSID for AdHoc network - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * check for BSSID for beacons used to update DTIM - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not check BSS descriptor for connected flag due to linksys's hidden SSID will use another BSS descriptor and never connected - * - * 07 11 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * just pass beacons with the same BSSID. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * Do not check for SSID as beacon content change due to the existence of single BSSID with multiple SSID AP configuration - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * remove unused temporal variable reference. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 06 02 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * filter out BSS in disallowed channel by - * 1. do not add to scan result array if BSS is at disallowed channel - * 2. do not allow to search for BSS-DESC in disallowed channels - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Take parsed result for channel information instead of hardware channel number passed from firmware domain - * take parsed result for generating scanning result with channel information. - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 25 2011 yuche.tsai - * NULL - * Always update Bss Type, for Bss Type for P2P Network is changing every time. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix concurrent issue when AIS scan result would overwrite p2p scan result. - * - * 03 14 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * filtering out other BSS coming from adjacent channels - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * implement beacon change detection by checking SSID and supported rate. - * - * 02 22 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC big endian issue. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 21 2011 cp.wu - * [WCXRP00000380] [MT6620 Wi-Fi][Driver] SSID information should come from buffered BSS_DESC_T rather than using beacon-carried information - * SSID should come from buffered prBssDesc rather than beacon-carried information - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Memfree for P2P Descriptor & P2P Descriptor List. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Free P2P Descriptor List & Descriptor under BSS Descriptor. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 21 2010 cp.wu - * [WCXRP00000280] [MT6620 Wi-Fi][Driver] Enable BSS selection with best RCPI policy in SCN module - * SCN: enable BEST RSSI selection policy support - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 12 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * trust HT IE if available for 5GHz band - * - * 10 11 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * add timing and strenght constraint for filtering out beacons with same SSID/TA but received on different channels - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 01 2010 yuche.tsai - * NULL - * [MT6620 P2P] Fix Big Endian Issue when parse P2P device name TLV. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * When indicate scan result, append IE buffer information in the scan result. - * - * 09 03 2010 yuche.tsai - * NULL - * 1. Update Beacon RX count when running SLT. - * 2. Ignore Beacon when running SLT, would not update information from Beacon. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * 1. Fix P2P Descriptor List to be a link list, to avoid link corrupt after Bss Descriptor Free. - * 2.. Fix P2P Device Name Length BE issue. - * - * 08 23 2010 yuche.tsai - * NULL - * Add P2P Device Found Indication to supplicant - * - * 08 20 2010 cp.wu - * NULL - * reset BSS_DESC_T variables before parsing IE due to peer might have been reconfigured. - * - * 08 20 2010 yuche.tsai - * NULL - * Workaround for P2P Descriptor Infinite loop issue. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 yuche.tsai - * NULL - * Modify code of processing Probe Resonse frame for P2P. - * - * 08 12 2010 yuche.tsai - * NULL - * Add function to get P2P descriptor of BSS descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Modify Scan result processing for P2P module. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P Device Discovery result add function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add support for Probe Request & Response parsing. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 21 2010 yuche.tsai - * - * Fix compile error for SCAN module while disabling P2P feature. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct BSS_DESC_T initialization after allocated. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * if beacon/probe-resp is received in 2.4GHz bands and there is ELEM_ID_DS_PARAM_SET IE available, - * trust IE instead of RMAC information - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable P2P function. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the TKIP disallow join a HT AP code. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add more chance of JOIN retry for BG_SCAN - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * let the rsn wapi IE always parsing. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Solve the compile warning for 'return non-void' function - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix No PKT_INFO_T issue - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing ProbeRequest Frame's TX data rate - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Refine Beacon processing, add read RF channel from RX Status - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify u2EstimatedExtraIELen for probe request - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap IE to probe request - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the process of SCAN Result by adding more Phy Attributes - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function and code for meet the new define - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Report event of scan result to host - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix SCAN Record update - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status and Integrate with TXM - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add (Ext)Support Rate Set IE to ProbeReq - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed the use of SW_RFB->u2FrameLength - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix uninitial aucMacAddress[] for ProbeReq - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Send Probe Request Frame - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define REPLICATED_BEACON_TIME_THRESHOLD (3000) -#define REPLICATED_BEACON_FRESH_PERIOD (10000) -#define REPLICATED_BEACON_STRENGTH_THRESHOLD (32) - -#define ROAMING_NO_SWING_RCPI_STEP (10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to initialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBSSDesc; - PUINT_8 pucBSSBuff; - UINT_32 i; - - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - pucBSSBuff = &prScanInfo->aucScanBuffer[0]; - - - DBGLOG(SCN, INFO, ("->scnInit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - LINK_INITIALIZE(&prScanInfo->rPendingMsgList); - - - //4 <2> Reset link list of BSS_DESC_T - kalMemZero((PVOID) pucBSSBuff, SCN_MAX_BUFFER_SIZE); - - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - for (i = 0; i < CFG_MAX_NUM_BSS_LIST; i++) { - - prBSSDesc = (P_BSS_DESC_T)pucBSSBuff; - - LINK_INSERT_TAIL(&prScanInfo->rFreeBSSDescList, &prBSSDesc->rLinkEntry); - - pucBSSBuff += ALIGN_4(sizeof(BSS_DESC_T)); - } - /* Check if the memory allocation consist with this initialization function */ - ASSERT(((UINT_32)pucBSSBuff - (UINT_32)&prScanInfo->aucScanBuffer[0]) == SCN_MAX_BUFFER_SIZE); - - /* reset freest channel information */ - prScanInfo->fgIsSparseChannelValid = FALSE; - - return; -} /* end of scnInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to uninitialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - DBGLOG(SCN, INFO, ("->scnUninit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - /* NOTE(Kevin): Check rPendingMsgList ? */ - - //4 <2> Reset link list of BSS_DESC_T - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - return; -} /* end of scnUninit() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - return scanSearchBssDescByBssidAndSsid(prAdapter, - aucBSSID, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - else { - /* 20120206 frog: Equal BSSID but not SSID, SSID not hidden, SSID must be updated. */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - return prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchBssDescByTAAndSsid(prAdapter, - aucSrcAddr, - FALSE, - NULL); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucSrcAddr, aucSrcAddr)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByTA() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - aucBSSID, - aucSrcAddr, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBssDesc, prIBSSBssDesc; - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - - switch (eBSSType) { - case BSS_TYPE_P2P_DEVICE: - fgCheckSsid = FALSE; - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_BOW_DEVICE: - { - prBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - - /* if (eBSSType == prBssDesc->eBSSType) */ - - return prBssDesc; - } - - case BSS_TYPE_IBSS: - { - prIBSSBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - prBssDesc = scanSearchBssDescByTAAndSsid(prAdapter, aucSrcAddr, fgCheckSsid, prSsid); - - /* NOTE(Kevin): - * Rules to maintain the SCAN Result: - * For AdHoc - - * CASE I We have TA1(BSSID1), but it change its BSSID to BSSID2 - * -> Update TA1 entry's BSSID. - * CASE II We have TA1(BSSID1), and get TA1(BSSID1) again - * -> Update TA1 entry's contain. - * CASE III We have a SCAN result TA1(BSSID1), and TA2(BSSID2). Sooner or - * later, TA2 merge into TA1, we get TA2(BSSID1) - * -> Remove TA2 first and then replace TA1 entry's TA with TA2, Still have only one entry of BSSID. - * CASE IV We have a SCAN result TA1(BSSID1), and another TA2 also merge into BSSID1. - * -> Replace TA1 entry's TA with TA2, Still have only one entry. - * CASE V New IBSS - * -> Add this one to SCAN result. - */ - if (prBssDesc) { - if ((!prIBSSBssDesc) || // CASE I - (prBssDesc == prIBSSBssDesc)) { // CASE II - - return prBssDesc; - } - else { // CASE III - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - - - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - return prIBSSBssDesc; - } - } - - if (prIBSSBssDesc) { // CASE IV - - return prIBSSBssDesc; - } - - // CASE V - break; // Return NULL; - } - - default: - break; - } - - - return (P_BSS_DESC_T)NULL; - -} /* end of scanSearchExistingBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given Remove Policy. -* -* @param[in] u4RemovePolicy Remove Policy. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - //DBGLOG(SCN, TRACE, ("Before Remove - Number Of SCAN Result = %ld\n", - //prBSSDescList->u4NumElem)); - - if (u4RemovePolicy & SCN_RM_POLICY_TIMEOUT) { - P_BSS_DESC_T prBSSDescNext; - OS_SYSTIME rCurrentTime; - - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - //DBGLOG(SCN, TRACE, ("Remove TIMEOUT BSS DESC(%#x): MAC: "MACSTR", Current Time = %08lx, Update Time = %08lx\n", - //prBssDesc, MAC2STR(prBssDesc->aucBSSID), rCurrentTime, prBssDesc->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_OLDEST_HIDDEN) { - P_BSS_DESC_T prBssDescOldest = (P_BSS_DESC_T)NULL; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (!prBssDesc->fgIsHiddenSSID) { - continue; - } - - if (!prBssDescOldest) { /* 1st element */ - prBssDescOldest = prBssDesc; - continue; - } - - if (TIME_BEFORE(prBssDesc->rUpdateTime, prBssDescOldest->rUpdateTime)) { - prBssDescOldest = prBssDesc; - } - } - - if (prBssDescOldest) { - - //DBGLOG(SCN, TRACE, ("Remove OLDEST HIDDEN BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescOldest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescOldest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_SMART_WEAKEST) { - P_BSS_DESC_T prBssDescWeakest = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBssDescWeakestSameSSID = (P_BSS_DESC_T)NULL; - UINT_32 u4SameSSIDCount = 0; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if ((!prBssDesc->fgIsHiddenSSID) && - (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen))) { - - u4SameSSIDCount++; - - if (!prBssDescWeakestSameSSID) { - prBssDescWeakestSameSSID = prBssDesc; - } - else if (prBssDesc->ucRCPI < prBssDescWeakestSameSSID->ucRCPI) { - prBssDescWeakestSameSSID = prBssDesc; - } - } - - if (!prBssDescWeakest) { /* 1st element */ - prBssDescWeakest = prBssDesc; - continue; - } - - if (prBssDesc->ucRCPI < prBssDescWeakest->ucRCPI) { - prBssDescWeakest = prBssDesc; - } - - } - - if ((u4SameSSIDCount >= SCN_BSS_DESC_SAME_SSID_THRESHOLD) && - (prBssDescWeakestSameSSID)) { - prBssDescWeakest = prBssDescWeakestSameSSID; - } - - if (prBssDescWeakest) { - - //DBGLOG(SCN, TRACE, ("Remove WEAKEST BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescWeakest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescWeakest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_ENTIRE) { - P_BSS_DESC_T prBSSDescNext; - - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - - } - - return; - -} /* end of scanRemoveBssDescsByPolicy() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given BSSID. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; -} /* end of scanRemoveBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given band configuration -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBand Given band -* @param[in] eNetTypeIndex AIS - Remove IBSS/Infrastructure BSS -* BOW - Remove BOW BSS -* P2P - Remove P2P BSS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - BOOLEAN fgToRemove; - - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - - if(eBand == BAND_NULL) { - return; /* no need to do anything, keep all scan result */ - } - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - fgToRemove = FALSE; - - if(prBssDesc->eBand == eBand) { - switch (eNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - if((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS)) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_P2P_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_BOW_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_BOW_DEVICE) { - fgToRemove = TRUE; - } - break; - - default: - ASSERT(0); - break; - } - } - - if(fgToRemove == TRUE) { - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - - return; -} /* end of scanRemoveBssDescByBand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear the CONNECTION FLAG of a specified BSS Descriptor. -* -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; - -} /* end of scanRemoveConnectionFlagOfBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate new BSS_DESC_T -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @return Pointer to BSS Descriptor, if has free space. NULL, if has no space. -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - LINK_REMOVE_HEAD(prFreeBSSDescList, prBssDesc, P_BSS_DESC_T); - - if (prBssDesc) { - P_LINK_T prBSSDescList; - - kalMemZero(prBssDesc, sizeof(BSS_DESC_T)); - -#if CFG_ENABLE_WIFI_DIRECT - LINK_INITIALIZE(&(prBssDesc->rP2pDeviceList)); - prBssDesc->fgIsP2PPresent = FALSE; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* NOTE(Kevin): In current design, this new empty BSS_DESC_T will be - * inserted to BSSDescList immediately. - */ - LINK_INSERT_TAIL(prBSSDescList, &prBssDesc->rLinkEntry); - } - - return prBssDesc; - -} /* end of scanAllocateBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This API parses Beacon/ProbeResp frame and insert extracted BSS_DESC_T -* with IEs into prAdapter->rWifiVar.rScanInfo.aucScanBuffer -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the receiving frame buffer. -* -* @return Pointer to BSS Descriptor -* NULL if the Beacon/ProbeResp frame is invalid -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_DESC_T prBssDesc = NULL; - UINT_16 u2CapInfo; - ENUM_BSS_TYPE_T eBSSType = BSS_TYPE_INFRASTRUCTURE; - - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_8 ucHwChannelNum = 0; - UINT_8 ucIeDsChannelNum = 0; - UINT_8 ucIeHtChannelNum = 0; - BOOLEAN fgIsValidSsid = FALSE, fgEscape = FALSE; - PARAM_SSID_T rSsid; - UINT_64 u8Timestamp; - - UINT_32 i; - UINT_8 ucSSIDChar; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2CapInfo, &u2CapInfo); - WLAN_GET_FIELD_64(&prWlanBeaconFrame->au4Timestamp[0], &u8Timestamp); - - // decide BSS type - switch (u2CapInfo & CAP_INFO_BSS_TYPE) { - case CAP_INFO_ESS: - /* It can also be Group Owner of P2P Group. */ - eBSSType = BSS_TYPE_INFRASTRUCTURE; - break; - - case CAP_INFO_IBSS: - eBSSType = BSS_TYPE_IBSS; - break; - case 0: - /* The P2P Device shall set the ESS bit of the Capabilities field in the Probe Response fame to 0 and IBSS bit to 0. (3.1.2.1.1) */ - eBSSType = BSS_TYPE_P2P_DEVICE; - break; - -#if CFG_ENABLE_BT_OVER_WIFI - // @TODO: add rule to identify BOW beacons -#endif - - default: - return NULL; - } - - //4 <1.1> Pre-parse SSID IE - pucIE = prWlanBeaconFrame->aucInfoElem; - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - } - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID) { - ucSSIDChar = '\0'; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsValidSsid = FALSE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (ucSSIDChar) { - fgIsValidSsid = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (fgIsValidSsid == TRUE) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - } - fgEscape = TRUE; - break; - default: - break; - } - - if(fgEscape == TRUE) { - break; - } - } - - - //4 <1.2> Replace existing BSS_DESC_T or allocate a new one - prBssDesc = scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - (PUINT_8)prWlanBeaconFrame->aucBSSID, - (PUINT_8)prWlanBeaconFrame->aucSrcAddr, - fgIsValidSsid, - fgIsValidSsid == TRUE ? &rSsid : NULL); - - if (prBssDesc == (P_BSS_DESC_T)NULL) { - do { - //4 <1.2.1> First trial of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.2> Hidden is useless, remove the oldest hidden ssid. (for passive scan) - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_OLDEST_HIDDEN)); - - //4 <1.2.3> Second tail of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.4> Remove the weakest one - /* If there are more than half of BSS which has the same ssid as connection - * setting, remove the weakest one from them. - * Else remove the weakest one. - */ - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_SMART_WEAKEST)); - - //4 <1.2.5> reallocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.6> no space, should not happen - //ASSERT(0); // still no space available ? - return NULL; - - } - while(FALSE); - - } - else { - OS_SYSTIME rCurrentTime; - - // WCXRP00000091 - // if the received strength is much weaker than the original one, - // ignore it due to it might be received on the folding frequency - - GET_CURRENT_SYSTIME(&rCurrentTime); - - prBssDesc->eBSSType = eBSSType; - - if(HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr) != prBssDesc->ucChannelNum && - prBssDesc->ucRCPI > prSwRfb->prHifRxHdr->ucRcpi) { - - // for signal strength is too much weaker and previous beacon is not stale - if((prBssDesc->ucRCPI - prSwRfb->prHifRxHdr->ucRcpi) >= REPLICATED_BEACON_STRENGTH_THRESHOLD && - rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_FRESH_PERIOD) { - return prBssDesc; - } - // for received beacons too close in time domain - else if(rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_TIME_THRESHOLD) { - return prBssDesc; - } - } - - /* if Timestamp has been reset, re-generate BSS DESC 'cause AP should have reset itself */ - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && u8Timestamp < prBssDesc->u8TimeStamp.QuadPart) { - scanRemoveBssDescByBssid(prAdapter, prBssDesc->aucBSSID); - - prBssDesc = scanAllocateBssDesc(prAdapter); - if (!prBssDesc) { - return NULL; - } - } - } - - /* NOTE: Keep consistency of Scan Record during JOIN process */ - if (prBssDesc->fgIsConnecting) { - return prBssDesc; - } - - //4 <2> Get information from Fixed Fields - prBssDesc->eBSSType = eBSSType; /* Update the latest BSS type information. */ - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prWlanBeaconFrame->aucSrcAddr); - - COPY_MAC_ADDR(prBssDesc->aucBSSID, prWlanBeaconFrame->aucBSSID); - - prBssDesc->u8TimeStamp.QuadPart = u8Timestamp; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2BeaconInterval, &prBssDesc->u2BeaconInterval); - - prBssDesc->u2CapInfo = u2CapInfo; - - - //4 <2.1> Retrieve IEs for later parsing - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - prBssDesc->fgIsIEOverflow = TRUE; - } - else { - prBssDesc->fgIsIEOverflow = FALSE; - } - prBssDesc->u2IELength = u2IELength; - - kalMemCopy(prBssDesc->aucIEBuf, prWlanBeaconFrame->aucInfoElem, u2IELength); - - //4 <2.2> reset prBssDesc variables in case that AP has been reconfigured - prBssDesc->fgIsERPPresent = FALSE; - prBssDesc->fgIsHTPresent = FALSE; - prBssDesc->eSco = CHNL_EXT_SCN; - prBssDesc->fgIEWAPI = FALSE; -#if CFG_RSN_MIGRATION - prBssDesc->fgIERSN = FALSE; -#endif -#if CFG_PRIVACY_MIGRATION - prBssDesc->fgIEWPA = FALSE; -#endif - - - //4 <3.1> Full IE parsing on SW_RFB_T - pucIE = prWlanBeaconFrame->aucInfoElem; - - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): for Atheros IOT #1 */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - BOOLEAN fgIsHiddenSSID = FALSE; - ucSSIDChar = '\0'; - - - prIeSsid = (P_IE_SSID_T)pucIE; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsHiddenSSID = TRUE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (!ucSSIDChar) { - fgIsHiddenSSID = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (!fgIsHiddenSSID) { - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - /* TP-LINK will set extra and incorrect ie with ELEM_ID_SUP_RATES */ - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucIeDsChannelNum = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - - case ELEM_ID_TIM: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_TIM) { - prBssDesc->ucDTIMPeriod = TIM_IE(pucIE)->ucDTIMPeriod; - } - break; - - case ELEM_ID_IBSS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_IBSS_PARAMETER_SET){ - prBssDesc->u2ATIMWindow = IBSS_PARAM_IE(pucIE)->u2ATIMWindow; - } - break; - -#if 0 //CFG_SUPPORT_802_11D - case ELEM_ID_COUNTRY_INFO: - prBssDesc->prIECountry = (P_IE_COUNTRY_T)pucIE; - break; -#endif - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_ERP) { - prBssDesc->fgIsERPPresent = TRUE; - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) { - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - } - break; - -#if CFG_RSN_MIGRATION - case ELEM_ID_RSN: - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &prBssDesc->rRSNInfo)) { - prBssDesc->fgIERSN = TRUE; - prBssDesc->u2RsnCap = prBssDesc->rRSNInfo.u2RsnCap; - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnCheckPmkidCache(prAdapter, prBssDesc); - } - } - break; -#endif - - case ELEM_ID_HT_CAP: - prBssDesc->fgIsHTPresent = TRUE; - break; - - case ELEM_ID_HT_OP: - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - if ((((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssDesc->eSco = (ENUM_CHNL_EXT_T) - (((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO); - } - ucIeHtChannelNum = ((P_IE_HT_OP_T) pucIE)->ucPrimaryChannel; - - break; - -#if CFG_SUPPORT_WAPI - case ELEM_ID_WAPI: - if (wapiParseWapiIE(WAPI_IE(pucIE), &prBssDesc->rIEWAPI)) { - prBssDesc->fgIEWAPI = TRUE; - } - break; -#endif - - case ELEM_ID_VENDOR: // ELEM_ID_P2P, ELEM_ID_WMM - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; -#if CFG_PRIVACY_MIGRATION - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - - if (rsnParseWpaIE(prAdapter, WPA_IE(pucIE), &prBssDesc->rWPAInfo)) { - prBssDesc->fgIEWPA = TRUE; - } - } - } -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - prBssDesc->fgIsP2PPresent = TRUE; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } - break; - - /* no default */ - } - } - - - //4 <3.2> Save information from IEs - SSID - /* Update Flag of Hidden SSID for used in SEARCH STATE. */ - - /* NOTE(Kevin): in current driver, the ucSSIDLen == 0 represent - * all cases of hidden SSID. - * If the fgIsHiddenSSID == TRUE, it means we didn't get the ProbeResp with - * valid SSID. - */ - if (prBssDesc->ucSSIDLen == 0) { - prBssDesc->fgIsHiddenSSID = TRUE; - } - else { - prBssDesc->fgIsHiddenSSID = FALSE; - } - - - //4 <3.3> Check rate information in related IEs. - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prBssDesc->u2OperationalRateSet, - &prBssDesc->u2BSSBasicRateSet, - &prBssDesc->fgIsUnknownBssBasicRate); - } - - - //4 <4> Update information from HIF RX Header - { - prHifRxHdr = prSwRfb->prHifRxHdr; - - ASSERT(prHifRxHdr); - - //4 <4.1> Get TSF comparison result - prBssDesc->fgIsLargerTSF = HIF_RX_HDR_GET_TCL_FLAG(prHifRxHdr); - - //4 <4.2> Get Band information - prBssDesc->eBand = HIF_RX_HDR_GET_RF_BAND(prHifRxHdr); - - //4 <4.2> Get channel and RCPI information - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prHifRxHdr); - - if (BAND_2G4 == prBssDesc->eBand) { - - /* Update RCPI if in right channel */ - if (ucIeDsChannelNum >= 1 && ucIeDsChannelNum <= 14) { - - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeDsChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeDsChannelNum; - } - else if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum <= 14) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - // 5G Band - else { - if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum < 200) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - /* Always update RCPI */ - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - } - - - //4 <5> PHY type setting - prBssDesc->ucPhyTypeSet = 0; - - if (BAND_2G4 == prBssDesc->eBand) { - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* check if support 11g */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) || - prBssDesc->fgIsERPPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - /* if not 11g only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_OFDM)) { - /* check if support 11b */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - } - } - } - else { /* (BAND_5G == prBssDesc->eBande) */ - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* Support 11a definitely */ - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - - ASSERT(!(prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)); - } - } - - - //4 <6> Update BSS_DESC_T's Last Update TimeStamp. - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - - return prBssDesc; -} - -#if RSSI_ENHANCE - -extern int numOfTblRssi; -extern TABLE_RSSI mTABLE_RSSI[MAX_SCAN_RSSI_NUM]; -extern int mTblRssiStatus[MAX_SCAN_RSSI_NUM]; - -#define RSSI_DEG(x...) //printk(x) - -PARAM_RSSI processAvgRssi(UINT_8 ucRCPI, PARAM_MAC_ADDRESS rMacAddr) -{ - int bFound, i; - PARAM_RSSI rRssi = RCPI_TO_dBm(ucRCPI); - PARAM_RSSI rRssi2 = rRssi; - PARAM_RSSI AvgRssiX8, AvgRssi; - - if(rRssi < -40) - rRssi += 8; - - RSSI_DEG("---- processAvgRssi ---- \n"); - - bFound = FALSE; - for(i = 0; i < numOfTblRssi; i++) { - RSSI_DEG("-%02x:%02x:%02x:%02x:%02x:%02x\n", - mTABLE_RSSI[i].arMacAddress[0], mTABLE_RSSI[i].arMacAddress[1], mTABLE_RSSI[i].arMacAddress[2], mTABLE_RSSI[i].arMacAddress[3], mTABLE_RSSI[i].arMacAddress[4], mTABLE_RSSI[i].arMacAddress[5]); - if(EQUAL_MAC_ADDR(rMacAddr, mTABLE_RSSI[i].arMacAddress)) { - bFound = TRUE; - AvgRssiX8 = mTABLE_RSSI[i].AvgRssiX8; - AvgRssi = mTABLE_RSSI[i].AvgRssi; - mTblRssiStatus[i] = 1; - break; - } - } - - if(!bFound) { - AvgRssiX8 = rRssi << 3; - AvgRssi = rRssi; - } else { - AvgRssiX8 = (AvgRssiX8 - AvgRssi) + rRssi; - } - - AvgRssi = AvgRssiX8 >> 3; - - if(!bFound) { - COPY_MAC_ADDR(mTABLE_RSSI[numOfTblRssi].arMacAddress, rMacAddr); - mTABLE_RSSI[numOfTblRssi].AvgRssi = AvgRssi; - mTABLE_RSSI[numOfTblRssi].AvgRssiX8 = AvgRssiX8; - numOfTblRssi++; - mTblRssiStatus[i] = 1; - } else { - mTABLE_RSSI[i].AvgRssi = AvgRssi; - mTABLE_RSSI[i].AvgRssiX8 = AvgRssiX8; - } - - RSSI_DEG("results : %02x:%02x:%02x:%02x:%02x:%02x %d -> %d\n", - rMacAddr[0], rMacAddr[1], rMacAddr[2], rMacAddr[3], rMacAddr[4], rMacAddr[5], rRssi2, AvgRssi); - - return AvgRssi; -} - -void sortAvgRssi(void) -{ - int i, index = 0; - - RSSI_DEG("---- sortAvgRssi numOfTblRssi = %d ---- \n", numOfTblRssi); - - for(i = 0; i < numOfTblRssi; i++) { - if(mTblRssiStatus[i] == 1) { - memmove(&mTABLE_RSSI[index++], &mTABLE_RSSI[i], sizeof(TABLE_RSSI)); - } - } - numOfTblRssi = index; - - RSSI_DEG("--numOfTblRssi = %d.\n", numOfTblRssi); - - for(i = 0; i < numOfTblRssi; i++) { - mTblRssiStatus[i] = 0; - } -} - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to scan result for query -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SCAN_INFO_T prScanInfo; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame; - PARAM_MAC_ADDRESS rMacAddr; - PARAM_SSID_T rSsid; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_8 ucRateLen = 0; - UINT_32 i; - PARAM_RSSI AvgRssi; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if (prBssDesc->eBand == BAND_2G4) { - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) - || prBssDesc->fgIsERPPresent) { - eNetworkType = PARAM_NETWORK_TYPE_OFDM24; - } - else { - eNetworkType = PARAM_NETWORK_TYPE_DS; - } - } - else { - ASSERT(prBssDesc->eBand == BAND_5G); - eNetworkType = PARAM_NETWORK_TYPE_OFDM5; - } - - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - /* NOTE(Kevin): Not supported by WZC(TBD) */ - return WLAN_STATUS_FAILURE; - } - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - COPY_MAC_ADDR(rMacAddr, prWlanBeaconFrame->aucBSSID); - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = (UINT_32) prWlanBeaconFrame->u2BeaconInterval; - rConfiguration.u4ATIMWindow = prBssDesc->u2ATIMWindow; - rConfiguration.u4DSConfig = nicChannelNum2Freq(prBssDesc->ucChannelNum); - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - rateGetDataRatesFromRateSet(prBssDesc->u2OperationalRateSet, - 0, - aucRatesEx, - &ucRateLen); - - /* NOTE(Kevin): Set unused entries, if any, at the end of the array to 0. - * from OID_802_11_BSSID_LIST - */ - for (i = ucRateLen; i < sizeof(aucRatesEx) / sizeof(aucRatesEx[0]) ; i++) { - aucRatesEx[i] = 0; - } - - switch(prBssDesc->eBSSType) { - case BSS_TYPE_IBSS: - eOpMode = NET_TYPE_IBSS; - break; - - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_P2P_DEVICE: - case BSS_TYPE_BOW_DEVICE: - default: - eOpMode = NET_TYPE_INFRA; - break; - } - -#if RSSI_ENHANCE - AvgRssi = processAvgRssi(prBssDesc->ucRCPI, rMacAddr); -#endif - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - prBssDesc->ucChannelNum, -#if RSSI_ENHANCE - AvgRssi); -#else - RCPI_TO_dBm(prBssDesc->ucRCPI)); -#endif - - nicAddScanResult(prAdapter, - rMacAddr, - &rSsid, - prWlanBeaconFrame->u2CapInfo & CAP_INFO_PRIVACY ? 1 : 0, - RCPI_TO_dBm(prBssDesc->ucRCPI), - eNetworkType, - &rConfiguration, - eOpMode, - aucRatesEx, - prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen, - (PUINT_8)((UINT_32)(prSwRfb->pvHeader) + WLAN_MAC_MGMT_HEADER_LEN)); - - return WLAN_STATUS_SUCCESS; - -} /* end of scanAddScanResult() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Parse the content of given Beacon or ProbeResp Frame. -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if not report this SW_RFB_T to host -* @retval WLAN_STATUS_PENDING if report this SW_RFB_T to host as scan result -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prAisBssInfo; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; -#if CFG_SLT_SUPPORT - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; -#endif - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - //4 <0> Ignore invalid Beacon Frame - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)) { -#ifndef _lint - ASSERT(0); -#endif /* _lint */ - return rStatus; - } - -#if CFG_SLT_SUPPORT - prSltInfo = &prAdapter->rWifiVar.rSltInfo; - - if (prSltInfo->fgIsDUT) { - DBGLOG(P2P, INFO, ("\n\rBCN: RX\n")); - prSltInfo->u4BeaconReceiveCnt++; - return WLAN_STATUS_SUCCESS; - } - else { - return WLAN_STATUS_SUCCESS; - } -#endif - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - //4 <1> Parse and add into BSS_DESC_T - prBssDesc = scanAddToBssDesc(prAdapter, prSwRfb); - - if (prBssDesc) { - - //4 <1.1> Beacon Change Detection for Connected BSS - if(prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA)) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - EQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, prAisBssInfo->aucSSID, prAisBssInfo->ucSSIDLen)) { - BOOLEAN fgNeedDisconnect = FALSE; - -#if CFG_SUPPORT_BEACON_CHANGE_DETECTION - // <1.1.2> check if supported rate differs - if(prAisBssInfo->u2OperationalRateSet != prBssDesc->u2OperationalRateSet) { - fgNeedDisconnect = TRUE; - } -#endif - - // <1.1.3> beacon content change detected, disconnect immediately - if(fgNeedDisconnect == TRUE) { - aisBssBeaconTimeout(prAdapter); - } - } - - //4 <1.1> Update AIS_BSS_INFO - if(((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA))) { - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - - /* *not* checking prBssDesc->fgIsConnected anymore, - * due to Linksys AP uses " " as hidden SSID, and would have different BSS descriptor */ - if ((!prAisBssInfo->ucDTIMPeriod) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON)) { - - prAisBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - - /* sync with firmware for beacon information */ - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - } - -#if CFG_SUPPORT_ADHOC - if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen) && - (prBssDesc->eBSSType == BSS_TYPE_IBSS) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS)) { - - ibssProcessMatchedBeacon(prAdapter, prAisBssInfo, prBssDesc, prSwRfb->prHifRxHdr->ucRcpi); - } -#endif /* CFG_SUPPORT_ADHOC */ - } - - rlmProcessBcn(prAdapter, - prSwRfb, - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem, - (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]))); - - //4 <3> Send SW_RFB_T to HIF when we perform SCAN for HOST - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE - || prBssDesc->eBSSType == BSS_TYPE_IBSS) { - /* for AIS, send to host */ - if (prConnSettings->fgIsScanReqIssued && - rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == TRUE) { - ENUM_BAND_T eBand; - UINT_8 ucChannel; - BOOLEAN fgAddToScanResult; - - /* check ucChannelNum/eBand for adjacement channel filtering */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE && - (eBand != prBssDesc->eBand || ucChannel != prBssDesc->ucChannelNum)) { - fgAddToScanResult = FALSE; - } - else { - fgAddToScanResult = TRUE; - } - - if(fgAddToScanResult == TRUE) { - rStatus = scanAddScanResult(prAdapter, prBssDesc, prSwRfb); - } - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - scanP2pProcessBeaconAndProbeResp( - prAdapter, - prSwRfb, - &rStatus, - prBssDesc, - prWlanBeaconFrame); - } -#endif - } - - return rStatus; - -} /* end of scanProcessBeaconAndProbeResp() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Search the Candidate of BSS Descriptor for JOIN(Infrastructure) or -* MERGE(AdHoc) according to current Connection Policy. -* -* \return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_SCAN_INFO_T prScanInfo; - - P_LINK_T prBSSDescList; - - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL; - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_STA_RECORD_T prPrimaryStaRec; - P_STA_RECORD_T prCandidateStaRec = (P_STA_RECORD_T)NULL; - - OS_SYSTIME rCurrentTime; - - /* The first one reach the check point will be our candidate */ - BOOLEAN fgIsFindFirst = (BOOLEAN)FALSE; - - BOOLEAN fgIsFindBestRSSI = (BOOLEAN)FALSE; - BOOLEAN fgIsFindBestEncryptionLevel = (BOOLEAN)FALSE; - //BOOLEAN fgIsFindMinChannelLoad = (BOOLEAN)FALSE; - - /* TODO(Kevin): Support Min Channel Load */ - //UINT_8 aucChannelLoad[CHANNEL_NUM] = {0}; - - BOOLEAN fgIsFixedChannel; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - prAisSpecBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* check for fixed channel operation */ - if(eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - fgIsFixedChannel = cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel); - } - else { - fgIsFixedChannel = FALSE; - } - -#if DBG - if (prConnSettings->ucSSIDLen < ELEM_MAX_LEN_SSID) { - prConnSettings->aucSSID[prConnSettings->ucSSIDLen] = '\0'; - } -#endif - - DBGLOG(SCN, INFO, ("SEARCH: Num Of BSS_DESC_T = %d, Look for SSID: %s\n", - prBSSDescList->u4NumElem, prConnSettings->aucSSID)); - - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* TODO(Kevin): Update Minimum Channel Load Information here */ - - DBGLOG(SCN, INFO, ("SEARCH: ["MACSTR"], SSID:%s\n", - MAC2STR(prBssDesc->aucBSSID), prBssDesc->aucSSID)); - - - //4 <2> Check PHY Type and attributes - //4 <2.1> Check Unsupported BSS PHY Type - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore unsupported ucPhyTypeSet = %x\n", - prBssDesc->ucPhyTypeSet)); - continue; - } - - //4 <2.2> Check if has unknown NonHT BSS Basic Rate Set. - if (prBssDesc->fgIsUnknownBssBasicRate) { - - continue; - } - - //4 <2.3> Check if fixed operation cases should be aware - if (fgIsFixedChannel == TRUE && - (prBssDesc->eBand != eBand || prBssDesc->ucChannelNum != ucChannel)) { - continue; - } - - //4 <2.4> Check if the channel is legal under regulatory domain - if(rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == FALSE) { - continue; - } - - //4 <2.5> Check if this BSS_DESC_T is stale - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - continue; - } - - //4 <3> Check if reach the excessive join retry limit - /* NOTE(Kevin): STA_RECORD_T is recorded by TA. */ - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - - if (prStaRec) { - /* NOTE(Kevin): - * The Status Code is the result of a Previous Connection Request, we use this as SCORE for choosing a proper - * candidate (Also used for compare see <6>) - * The Reason Code is an indication of the reason why AP reject us, we use this Code for "Reject" - * a SCAN result to become our candidate(Like a blacklist). - */ -#if 0 /* TODO(Kevin): */ - if (prStaRec->u2ReasonCode != REASON_CODE_RESERVED) { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS with previous Reason Code = %d\n", - prStaRec->u2ReasonCode)); - continue; - } - else -#endif - if (prStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - /* NOTE(Kevin): greedy association - after timeout, we'll still - * try to associate to the AP whose STATUS of conection attempt - * was not success. - * We may also use (ucJoinFailureCount x JOIN_RETRY_INTERVAL_SEC) for - * time bound. - */ - if ((prStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) || - (CHECK_FOR_TIMEOUT(rCurrentTime, - prStaRec->rLastJoinTime, - SEC_TO_SYSTIME(JOIN_RETRY_INTERVAL_SEC)))) { - - /* NOTE(Kevin): Every JOIN_RETRY_INTERVAL_SEC interval, we can retry - * JOIN_MAX_RETRY_FAILURE_COUNT times. - */ - if (prStaRec->ucJoinFailureCount >= JOIN_MAX_RETRY_FAILURE_COUNT) { - prStaRec->ucJoinFailureCount = 0; - } - DBGLOG(SCN, INFO, ("SEARCH: Try to join BSS again which has Status Code = %d (Curr = %ld/Last Join = %ld)\n", - prStaRec->u2StatusCode, rCurrentTime, prStaRec->rLastJoinTime)); - } - else { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS which reach maximum Join Retry Count = %d \n", - JOIN_MAX_RETRY_FAILURE_COUNT)); - continue; - } - - } - } - - - //4 <4> Check for various NETWORK conditions - if (eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - - //4 <4.1> Check BSS Type for the corresponding Operation Mode in Connection Setting - /* NOTE(Kevin): For NET_TYPE_AUTO_SWITCH, we will always pass following check. */ - if (((prConnSettings->eOPMode == NET_TYPE_INFRA) && - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE)) || - ((prConnSettings->eOPMode == NET_TYPE_IBSS || prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS) && - (prBssDesc->eBSSType != BSS_TYPE_IBSS))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore eBSSType = %s\n", - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) ? - "INFRASTRUCTURE" : "IBSS"))); - continue; - } - - //4 <4.2> Check AP's BSSID if OID_802_11_BSSID has been set. - if ((prConnSettings->fgIsConnByBssidIssued) && - (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE)) { - - if (UNEQUAL_MAC_ADDR(prConnSettings->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore due to BSSID was not matched!\n")); - continue; - } - } - -#if CFG_SUPPORT_ADHOC - //4 <4.3> Check for AdHoc Mode - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - //4 <4.3.1> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS - e.g. IPN2220, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_ADHOC_BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCN, LOUD, ("SEARCH: Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - - //4 <4.3.2> Check Peer's capability - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4.3.3> Compare TSF - if (prBssInfo->fgIsBeaconActivated && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, LOUD, - ("SEARCH: prBssDesc->fgIsLargerTSF = %d\n", - prBssDesc->fgIsLargerTSF)); - - if (!prBssDesc->fgIsLargerTSF) { - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: ["MACSTR"], Smaller TSF\n", MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - } -#endif /* CFG_SUPPORT_ADHOC */ - - } - - - - -#if 0 /* TODO(Kevin): For IBSS */ - //4 <2.c> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - if ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) && - (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED)) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - - //4 <4B> Check for IBSS AdHoc Mode. - /* Skip if one or more BSS Basic Rate are not supported by current AdHocMode */ - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_IBSS) { - //4 <4B.1> Check if match the Capability of current IBSS AdHoc Mode. - if (ibssCheckCapabilityForAdHocMode(prAdapter, prPrimaryBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4B.2> IBSS Merge Decision Flow for SEARCH STATE. - if (prAdapter->fgIsIBSSActive && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prPrimaryBssDesc->aucBSSID)) { - - if (!fgIsLocalTSFRead) { - NIC_GET_CURRENT_TSF(prAdapter, &rCurrentTsf); - - DBGLOG(SCAN, TRACE, - ("\n\nCurrent TSF : %08lx-%08lx\n\n", - rCurrentTsf.u.HighPart, rCurrentTsf.u.LowPart)); - } - - if (rCurrentTsf.QuadPart > prPrimaryBssDesc->u8TimeStamp.QuadPart) { - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: ["MACSTR"], Current BSSID: ["MACSTR"].\n", - MAC2STR(prPrimaryBssDesc->aucBSSID), MAC2STR(prBssInfo->aucBSSID))); - - DBGLOG(SCAN, TRACE, - ("\n\nBSS's TSF : %08lx-%08lx\n\n", - prPrimaryBssDesc->u8TimeStamp.u.HighPart, prPrimaryBssDesc->u8TimeStamp.u.LowPart)); - - prPrimaryBssDesc->fgIsLargerTSF = FALSE; - continue; - } - else { - prPrimaryBssDesc->fgIsLargerTSF = TRUE; - } - - } - } - - //4 <5> Check the Encryption Status. - if (rsnPerformPolicySelection(prPrimaryBssDesc)) { - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - - /* For RSN Pre-authentication, update the PMKID canidate list for - same SSID and encrypt status */ - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAdapter->rWifiVar.rAisBssInfo.u4PmkidCandicateCount) { - prAdapter->rWifiVar.rAisBssInfo.fgIndicatePMKID = rsnCheckPmkidCandicate(); - } - } - -#endif - - - prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - - //4 <6> Check current Connection Policy. - switch (prConnSettings->eConnectionPolicy) { - case CONNECT_BY_SSID_BEST_RSSI: - /* Choose Hidden SSID to join only if the `fgIsEnableJoin...` is TRUE */ - if (prAdapter->rWifiVar.fgEnableJoinToHiddenSSID && prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): following if () statement means that - * If Target is hidden, then we won't connect when user specify SSID_ANY policy. - */ - if (prConnSettings->ucSSIDLen) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - - } - else if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen)) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - break; - - case CONNECT_BY_SSID_ANY: - /* NOTE(Kevin): In this policy, we don't know the desired - * SSID from user, so we should exclude the Hidden SSID from scan list. - * And because we refuse to connect to Hidden SSID node at the beginning, so - * when the JOIN Module deal with a BSS_DESC_T which has fgIsHiddenSSID == TRUE, - * then the Connection Settings must be valid without doubt. - */ - if (!prBssDesc->fgIsHiddenSSID) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindFirst = TRUE; - } - break; - - case CONNECT_BY_BSSID: - if(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnSettings->aucBSSID)) { - prPrimaryBssDesc = prBssDesc; - } - break; - - default: - break; - } - - - /* Primary Candidate was not found */ - if (prPrimaryBssDesc == NULL) { - continue; - } - - //4 <7> Check the Encryption Status. - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - if (wapiPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - fgIsFindFirst = TRUE; - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - } - else -#endif -#if CFG_RSN_MIGRATION - if (rsnPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - if (prAisSpecBssInfo->fgCounterMeasure) { - DBGLOG(RSN, INFO, ("Skip while at counter measure period!!!\n")); - continue; - } - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - -#if 0 - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAisSpecBssInfo->u4PmkidCandicateCount) { - if (rsnCheckPmkidCandicate()) { - DBGLOG(RSN, WARN, ("Prepare a timer to indicate candidate "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.aucBssid))); - cnmTimerStopTimer(&prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(&prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } - } -#endif - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } -#endif - } - else { - /* Todo:: P2P and BOW Policy Selection */ - } - - prPrimaryStaRec = prStaRec; - - //4 <8> Compare the Candidate and the Primary Scan Record. - if (!prCandidateBssDesc) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - - //4 <8.1> Condition - Get the first matched one. - if (fgIsFindFirst) { - break; - } - } - else { -#if 0 /* TODO(Kevin): For security(TBD) */ - //4 <6B> Condition - Choose the one with best Encryption Score. - if (fgIsFindBestEncryptionLevel) { - if (prCandidateBssDesc->ucEncLevel < - prPrimaryBssDesc->ucEncLevel) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - - /* If reach here, that means they have the same Encryption Score. - */ - - //4 <6C> Condition - Give opportunity to the one we didn't connect before. - // For roaming, only compare the candidates other than current associated BSSID. - if (!prCandidateBssDesc->fgIsConnected && !prPrimaryBssDesc->fgIsConnected) { - if ((prCandidateStaRec != (P_STA_RECORD_T)NULL) && - (prCandidateStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - - DBGLOG(SCAN, TRACE, ("So far -BSS DESC MAC: "MACSTR" has nonzero Status Code = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateStaRec->u2StatusCode)); - - if (prPrimaryStaRec != (P_STA_RECORD_T)NULL) { - if (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - - /* Give opportunity to the one with smaller rLastJoinTime */ - if (TIME_BEFORE(prCandidateStaRec->rLastJoinTime, - prPrimaryStaRec->rLastJoinTime)) { - continue; - } - /* We've connect to CANDIDATE recently, let us try PRIMARY now */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY's u2StatusCode = 0 */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY has no StaRec - We didn't connet to PRIMARY before */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if ((prPrimaryStaRec != (P_STA_RECORD_T)NULL) && - (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - continue; - } - } - } -#endif - - - //4 <6D> Condition - Visible SSID win Hidden SSID. - if (prCandidateBssDesc->fgIsHiddenSSID) { - if (!prPrimaryBssDesc->fgIsHiddenSSID) { - prCandidateBssDesc = prPrimaryBssDesc; /* The non Hidden SSID win. */ - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if (prPrimaryBssDesc->fgIsHiddenSSID) { - continue; - } - } - - - //4 <6E> Condition - Choose the one with better RCPI(RSSI). - if (fgIsFindBestRSSI) { - /* TODO(Kevin): We shouldn't compare the actual value, we should - * allow some acceptable tolerance of some RSSI percentage here. - */ - DBGLOG(SCN, TRACE, ("Candidate ["MACSTR"]: RCPI = %d, Primary ["MACSTR"]: RCPI = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateBssDesc->ucRCPI, - MAC2STR(prPrimaryBssDesc->aucBSSID), prPrimaryBssDesc->ucRCPI)); - - ASSERT(!(prCandidateBssDesc->fgIsConnected && - prPrimaryBssDesc->fgIsConnected)); - - /* NOTE: To prevent SWING, we do roaming only if target AP has at least 5dBm larger than us. */ - if (prCandidateBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP <= prPrimaryBssDesc->ucRCPI) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prPrimaryBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - -#if 0 - /* If reach here, that means they have the same Encryption Score, and - * both RSSI value are close too. - */ - //4 <6F> Seek the minimum Channel Load for less interference. - if (fgIsFindMinChannelLoad) { - - /* TODO(Kevin): Check which one has minimum channel load in its channel */ - } -#endif - } - } - - return prCandidateBssDesc; - -} /* end of scanSearchBssDescByPolicy() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/scan_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/scan_fsm.c deleted file mode 100755 index 98a97aaac135..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/scan_fsm.c +++ /dev/null @@ -1,1113 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/scan_fsm.c#1 $ -*/ - -/*! \file "scan_fsm.c" - \brief This file defines the state transition function for SCAN FSM. - - The SCAN FSM is part of SCAN MODULE and responsible for performing basic SCAN - behavior as metioned in IEEE 802.11 2007 11.1.3.1 & 11.1.3.2 . -*/ - - - -/* -** $Log: scan_fsm.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001095] [Volunteer Patch][Driver] Always Scan before enable Hot-Spot. - * Fix bug when unregister P2P network.. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * free mailbox message afte parsing is completed. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Take P2P wildcard SSID into consideration. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix bug for processing queued scan request. - * - * 08 11 2010 yuche.tsai - * NULL - * Add a function for returning channel. - * - * 08 05 2010 yuche.tsai - * NULL - * Update SCAN FSM for support P2P Device discovery scan. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add option of channel extension while cancelling scan request. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 cp.wu - * - * due to FW/DRV won't be sync. precisely, some strict assertions should be eased. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * when returning to SCAN_IDLE state, send a correct message to source FSM. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine the order of Stop TX Queue and Switch Channel - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update pause/resume/flush API to new Bitmap API - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Ignore the PROBE_DELAY state if the value of Probe Delay == 0 - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add set RX Filter to receive BCN from different BSSID during SCAN - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove flag of CFG_TEST_MGMT_FSM - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Change parameter of scanSendProbeReqFrames() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update scnFsmSteps() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugScanState[SCAN_STATE_NUM] = { - (PUINT_8)DISP_STRING("SCAN_STATE_IDLE"), - (PUINT_8)DISP_STRING("SCAN_STATE_SCANNING"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prMsgHdr; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - do { - -#if DBG - DBGLOG(SCN, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugScanState[prScanInfo->eCurrentState], - apucDebugScanState[eNextState])); -#else - DBGLOG(SCN, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SCN_IDX, - prScanInfo->eCurrentState, - eNextState)); -#endif - - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prScanInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - switch (prScanInfo->eCurrentState) { - case SCAN_STATE_IDLE: - /* check for pending scanning requests */ - if(!LINK_IS_EMPTY(&(prScanInfo->rPendingMsgList))) { - // load next message from pending list as scan parameters - LINK_REMOVE_HEAD(&(prScanInfo->rPendingMsgList), prMsgHdr, P_MSG_HDR_T); - - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - - /* switch to next state */ - eNextState = SCAN_STATE_SCANNING; - fgIsTransition = TRUE; - - cnmMemFree(prAdapter, prMsgHdr); - } - break; - - case SCAN_STATE_SCANNING: - if(prScanParam->fgIsScanV2 == FALSE) { - scnSendScanReq(prAdapter); - } - else { - scnSendScanReqV2(prAdapter); - } - break; - - default: - ASSERT(0); - break; - - } - } - while (fgIsTransition); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - if(prScanParam->ucSSIDNum == 1) { - COPY_SSID(rCmdScanReq.aucSSID, - rCmdScanReq.ucSSIDLength, - prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0]); - } - - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif -#if RSSI_ENHANCE - //add by gwl - rCmdScanReq.u2ChannelDwellTime = 200; - rCmdScanReq.u2ChannelMinDwellTime = 200; -#endif - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ_V2 command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ_V2 rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ_V2)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - for (i = 0 ; i < prScanParam->ucSSIDNum; i++) { - COPY_SSID(rCmdScanReq.arSSID[i].aucSsid, - rCmdScanReq.arSSID[i].u4SsidLen, - prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i]); - } - - rCmdScanReq.u2ProbeDelayTime = (UINT_8)prScanParam->u2ProbeDelayTime; - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif - - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ_V2, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ_V2, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - ASSERT(prMsgHdr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - - if (prScanInfo->eCurrentState == SCAN_STATE_IDLE) { - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - else { - // should not deliver to this function - ASSERT(0); - } - - cnmMemFree(prAdapter, prMsgHdr); - scnFsmSteps(prAdapter, SCAN_STATE_SCANNING); - } - else { - LINK_INSERT_TAIL(&prScanInfo->rPendingMsgList, &prMsgHdr->rLinkEntry); - } - - return; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancel; - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_CANCEL rCmdScanCancel; - - ASSERT(prMsgHdr); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)prMsgHdr; - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - if (prScanInfo->eCurrentState != SCAN_STATE_IDLE) { - if(prScanCancel->ucSeqNum == prScanParam->ucSeqNum && - prScanCancel->ucNetTypeIndex == (UINT_8)prScanParam->eNetTypeIndex) { - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = prScanParam->ucSeqNum; - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanCancel.ucIsExtChannel = (UINT_8) prScanCancel->fgIsChannelExt; - } - else { - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - } -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - scnFsmRemovePendingMsg(prAdapter, prScanCancel->ucSeqNum, prScanCancel->ucNetTypeIndex); - } - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing (Legacy) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - if (prScanParam->ucSSIDType & (SCAN_REQ_SSID_SPECIFIED | SCAN_REQ_SSID_P2P_WILDCARD)) { - prScanParam->ucSSIDNum = 1; - - COPY_SSID(prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0], - prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength); - - // reset SSID length to zero for rest array entries - for(i = 1 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - else { - prScanParam->ucSSIDNum = 0; - - for(i = 0 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - - prScanParam->u2ProbeDelayTime = 0; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = FALSE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing - V2 with multiple SSID support -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - ASSERT(prScanReqMsg->ucSSIDNum <= SCN_SSID_MAX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - prScanParam->ucSSIDNum = prScanReqMsg->ucSSIDNum; - - for(i = 0 ; i < prScanReqMsg->ucSSIDNum ; i++) { - COPY_SSID(prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i], - prScanReqMsg->prSsid[i].aucSsid, - (UINT_8)prScanReqMsg->prSsid[i].u4SsidLen); - } - - prScanParam->u2ProbeDelayTime = prScanReqMsg->u2ProbeDelay; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = TRUE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Remove pending scan request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prPendingMsgHdr, prPendingMsgHdrNext, prRemoveMsgHdr = NULL; - P_LINK_ENTRY_T prRemoveLinkEntry = NULL; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - /* traverse through rPendingMsgList for removal */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingMsgHdr, - prPendingMsgHdrNext, - &(prScanInfo->rPendingMsgList), - rLinkEntry, - MSG_HDR_T) { - if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - P_MSG_SCN_SCAN_REQ prScanReqMsg = (P_MSG_SCN_SCAN_REQ)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsg->ucSeqNum && - ucNetTypeIndex == prScanReqMsg->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsg->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - else if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - P_MSG_SCN_SCAN_REQ_V2 prScanReqMsgV2 = (P_MSG_SCN_SCAN_REQ_V2)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsgV2->ucSeqNum && - ucNetTypeIndex == prScanReqMsgV2->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsgV2->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - - if(prRemoveLinkEntry) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - ucSeqNum, - ucNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* remove from pending list */ - LINK_REMOVE_KNOWN_ENTRY(&(prScanInfo->rPendingMsgList), prRemoveLinkEntry); - cnmMemFree(prAdapter, prRemoveMsgHdr); - - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // buffer empty channel information - if(prScanParam->eScanChannel == SCAN_CHANNEL_FULL - || prScanParam->eScanChannel == SCAN_CHANNEL_2G4) { - if(prScanDone->ucSparseChannelValid) { - prScanInfo->fgIsSparseChannelValid = TRUE; - prScanInfo->rSparseChannel.eBand = (ENUM_BAND_T)prScanDone->rSparseChannel.ucBand; - prScanInfo->rSparseChannel.ucChannelNum = prScanDone->rSparseChannel.ucChannelNum; - } - else { - prScanInfo->fgIsSparseChannelValid = FALSE; - } - } - - if(prScanInfo->eCurrentState == SCAN_STATE_SCANNING && - prScanDone->ucSeqNum == prScanParam->ucSeqNum) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_DONE); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - DBGLOG(SCN, LOUD, ("Unexpected SCAN-DONE event: SeqNum = %d, Current State = %d\n", - prScanDone->ucSeqNum, - prScanInfo->eCurrentState)); - } - - return; -} /* end of scnEventScanDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_DONE)); - if (!prScanDoneMsg) { - ASSERT(0); // Can't indicate SCAN FSM Complete - return; - } - - if(prScanParam->fgIsObssScan == TRUE) { - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_RLM_SCAN_DONE; - } - else { - switch((ENUM_NETWORK_TYPE_INDEX_T)ucNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_AIS_SCAN_DONE; - break; - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_P2P_SCAN_DONE; - break; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_BOW_SCAN_DONE; - break; -#endif - - default: - DBGLOG(SCN, LOUD, ("Unexpected Network Type: %d\n", ucNetTypeIndex)); - ASSERT(0); - break; - } - } - - prScanDoneMsg->ucSeqNum = ucSeqNum; - prScanDoneMsg->ucNetTypeIndex = ucNetTypeIndex; - prScanDoneMsg->eScanStatus = eScanStatus; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanDoneMsg, - MSG_SEND_METHOD_BUF); - -} /* end of scnFsmGenerateScanDoneMsg() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Query for most sparse channel -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ) -{ - P_SCAN_INFO_T prScanInfo; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if(prScanInfo->fgIsSparseChannelValid == TRUE) { - if(prSparseBand) { - *prSparseBand = prScanInfo->rSparseChannel.eBand; - } - - if(pucSparseChannel) { - *pucSparseChannel = prScanInfo->rSparseChannel.ucChannelNum; - } - - return TRUE; - } - else { - return FALSE; - } -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/sec_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/sec_fsm.c deleted file mode 100755 index 862b9fa64661..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/sec_fsm.c +++ /dev/null @@ -1,1255 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/sec_fsm.c#1 $ -*/ - -/*! \file "sec_fsm.c" - \brief This is the file implement security check state machine. - - In security module, do the port control check after success join to an AP, - and the path to NORMAL TR, the state machine handle these state transition. -*/ - - - -/* -** $Log: sec_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 19 2010 wh.su - * - * fixed the compilng error at debug mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 13 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine some code - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * code refine - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function name - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the state machine, to meet the firmware security design v1.1 - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugSecState[SEC_STATE_NUM] = { - (PUINT_8)DISP_STRING("SEC_STATE_INIT"), - (PUINT_8)DISP_STRING("SEC_STATE_INITIATOR_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_RESPONDER_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_CHECK_OK"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_EAPOL"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_DEAUTH"), - (PUINT_8)DISP_STRING("SEC_STATE_COUNTERMEASURE"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - #if 1 /* MT6620 */ - //At MT5921, is ok, but at MT6620, firmware base ASIC, the firmware - //will lost these data, thus, driver have to keep the wep material and - //setting to firmware while awake from D3. - #endif - - prSecInfo->eCurrentState = SEC_STATE_INIT; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - if (IS_STA_IN_AIS(prSta)) { - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prAisSpecBssInfo->u4RsnaLastMICFailTime = 0; - prAisSpecBssInfo->fgCheckEAPoLTxDone = FALSE; - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEapolTxTimeout, - (UINT_32)prSta); - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEndOfCounterMeasure, - (UINT_32)prSta); - - } - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do uninitialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID /* whsu:Todo: */ -secFsmUnInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - //nicPrivacyRemoveWlanTable(prSta->ucWTEntry); - - if (IS_STA_IN_AIS(prSta)) { - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer); - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* STANDBY to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to INITIATOR_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_INITIATOR_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to RESPONDER_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_RESPONDER_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INITIATOR_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INITIATOR_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* RESPONDER_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_RESPONDER_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* CHECK_OK to SEND_EAPOL -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_CHECK_OK_to_SEND_EAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - ASSERT(prSta); - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo->fgCheckEAPoLTxDone = TRUE; - - //cnmTimerStartTimer(prAdapter, - // &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer, - // SEC_TO_MSEC(EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_EAPOL to SEND_DEAUTH. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_EAPOL_to_SEND_DEAUTH ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - /* Compose deauth frame to AP, a call back function for tx done */ - if (authSendDeauthFrame(prAdapter, - prSta, - (P_SW_RFB_T)NULL, - REASON_CODE_MIC_FAILURE, - (PFN_TX_DONE_HANDLER)secFsmEventDeauthTxDone) != WLAN_STATUS_SUCCESS) { - ASSERT(FALSE); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_DEAUTH_to_COUNTERMEASURE ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prAdapter); - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - //Start the 60 sec timer - cnmTimerStartTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - SEC_TO_MSEC(COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_COUNTERMEASURE_to_INIT ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - //Clear the counter measure flag - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The Core FSM engine of security module. -* -* \param[in] prSta Pointer to the Sta record -* \param[in] eNextState Enum value of next sec STATE -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN ENUM_SEC_STATE_T eNextState - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - ASSERT(prSecInfo); - - DEBUGFUNC("secFsmSteps"); - do { - /* Do entering Next State */ - prSecInfo->ePreviousState = prSecInfo->eCurrentState; - - /* Do entering Next State */ -#if DBG - DBGLOG(RSN, STATE, ("\n"MACSTR" TRANSITION: [%s] -> [%s]\n\n", - MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState], - apucDebugSecState[eNextState])); -#else - DBGLOG(RSN, STATE, ("\n"MACSTR" [%d] TRANSITION: [%d] -> [%d]\n\n", - MAC2STR(prSta->aucMacAddr), - DBG_RSN_IDX, - prSecInfo->eCurrentState, - eNextState)); -#endif - prSecInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; -#if 0 - /* Do tasks of the State that we just entered */ - switch (prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - break; - case SEC_STATE_INITIATOR_PORT_BLOCKED: - break; - case SEC_STATE_RESPONDER_PORT_BLOCKED: - break; - case SEC_STATE_CHECK_OK: - break; - case SEC_STATE_SEND_EAPOL: - break; - case SEC_STATE_SEND_DEAUTH: - break; - case SEC_STATE_COUNTERMEASURE: - break; - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - } -#endif - } - while (fgIsTransition); - - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - ENUM_SEC_STATE_T eNextState; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart\n")); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - //prSta->fgTransmitKeyExist = FALSE; - //whsu:: nicPrivacySetStaDefaultWTIdx(prSta); - -#if 1 /* Since the 1x and key can set to firmware in order, always enter the check ok state */ - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); -#else - if (IS_STA_IN_AIS(prSta->eStaType)) { - if (secRsnKeyHandshakeEnabled(prAdapter) == TRUE -#if CFG_SUPPORT_WAPI - || (prAdapter->rWifiVar.rConnSettings.fgWapiMode) -#endif - ) { - prSta->fgTransmitKeyExist = FALSE; - //nicPrivacyInitialize(prSta->ucNetTypeIndex); - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); - } - } -#if CFG_ENABLE_WIFI_DIRECT || CFG_ENABLE_BT_OVER_WIFI - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_BT_OVER_WIFI - else if ((prSta->eStaType == STA_TYPE_BOW_CLIENT) || - (prSta->eStaType == STA_TYPE_P2P_GC)) - #elif CFG_ENABLE_WIFI_DIRECT - else if (prSta->eStaType == STA_TYPE_P2P_GC) - #elif CFG_ENABLE_BT_OVER_WIFI - else if (prSta->eStaType == STA_TYPE_BOW_CLIENT) - #endif - { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, RESPONDER_PORT_BLOCKED); - } -#endif - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } -#endif - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -} /* secFsmRunEventStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function called by reset procedure to force the sec fsm enter -* idle state -* -* \param[in] ucNetTypeIdx The Specific Network type index -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - DBGLOG(RSN, TRACE, ("secFsmEventAbort for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - prSta->fgTransmitKeyExist = FALSE; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - if (prSecInfo == NULL) - return; - - if (IS_STA_IN_AIS(prSta)) { - - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - if (prSecInfo->eCurrentState == SEC_STATE_SEND_EAPOL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone == FALSE) { - DBGLOG(RSN, TRACE, ("EAPOL STATE not match the flag\n")); - //cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - } - } - } - prSecInfo->eCurrentState = SEC_STATE_INIT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "2nd EAPoL Tx is sending" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent2ndEapolTx ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - //BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEvent2ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR" Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR" Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = TRUE; - break; - default: -#if DBG - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent2ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "4th EAPoL Tx is Tx done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent4ndEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_CMD_802_11_KEY prStoredKey; - - DEBUGFUNC("secFsmRunEvent4ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = FALSE; - if (prSecInfo->fgKeyStored) { - prStoredKey = (P_CMD_802_11_KEY)prSecInfo->aucStoredKey; - - //prSta = rxmLookupStaRecIndexFromTA(prStoredKey->aucPeerAddr); - //if (nicPrivacySetKeyEntry(prStoredKey, prSta->ucWTEntry) == FALSE) - // DBGLOG(RSN, WARN, ("nicPrivacySetKeyEntry() fail,..\n")); - - //key update - prSecInfo->fgKeyStored = FALSE; - prSta->fgTransmitKeyExist = TRUE; - } - if (prSecInfo->eCurrentState == SEC_STATE_INITIATOR_PORT_BLOCKED) { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - default: - -#if DBG - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent4ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Pairwise key installed" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \retval TRUE The key can be installed to HW -* \retval FALSE The kay conflict with the current key, abort it -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secFsmEventPTKInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgStatus = TRUE; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - if (prSecInfo == NULL) - return TRUE; /* Not PTK */ - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - eNextState = prSecInfo->eCurrentState; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - /* Legacy wep, wpa-none */ - break; - - case SEC_STATE_INITIATOR_PORT_BLOCKED: - if (prSecInfo->fg2nd1xSend) { - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - - case SEC_STATE_RESPONDER_PORT_BLOCKED: - SEC_STATE_TRANSITION(prAdapter, prSta, RESPONDER_PORT_BLOCKED, CHECK_OK); - break; - - - case SEC_STATE_CHECK_OK: - break; - - default: - fgStatus = FALSE; - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return fgStatus; - -} /* end of secFsmRunEventPTKInstalled() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Counter Measure" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStartCounterMeasure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventStartCounterMeasure"); - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - prAdapter->rWifiVar.rAisSpecificBssInfo.u4RsnaLastMICFailTime = 0; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_CHECK_OK: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = TRUE; - - // dls port control - SEC_STATE_TRANSITION(prAdapter, prSta, CHECK_OK, SEND_EAPOL); - } - break; - - default: - break; - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -} /* secFsmRunEventStartCounterMeasure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "802.1x EAPoL Tx Done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("secFsmRunEventEapolTxDone"); - - ASSERT(prStaRec); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(RSN, INFO, ("Error EAPoL fram fail to send!!\n")); - //ASSERT(0); - return; - } - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - prSecInfo = &prStaRec->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_EAPOL: - if (prAisBssInfo->fgCheckEAPoLTxDone == FALSE) { - ASSERT(0); - } - - prAisBssInfo->fgCheckEAPoLTxDone = FALSE; - //cnmTimerStopTimer(prAdapter, &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_EAPOL, SEND_DEAUTH); - break; - default: - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prStaRec, eNextState); - } - - return; - -}/* secFsmRunEventEapolTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Deauth frame Tx Done" to Sec FSM. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventDeauthTxDone"); - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - - if (!prStaRec) - return; - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = (P_SEC_INFO_T)&prStaRec->rSecInfo; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - - DBGLOG(RSN, TRACE, ("Set timer %d\n", COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_DEAUTH, COUNTERMEASURE); - - break; - - default: - ASSERT(0); - break; - } - - return; -}/* secFsmRunEventDeauthTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check the eapol error frame fail to send issue. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("secFsmRunEventEapolTxTimeout"); - - prStaRec = (P_STA_RECORD_T)u4Parm; - - ASSERT(prStaRec); - - /* Todo:: How to handle the Eapol Error fail to send case? */ - ASSERT(0); - - return; - -}/* secFsmEventEapolTxTimeout */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will stop the counterMeasure duration. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEndOfCounterMeasure ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prSta; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventEndOfCounterMeasure"); - - prSta = (P_STA_RECORD_T)u4Parm; - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = FALSE; - - SEC_STATE_TRANSITION(prAdapter, prSta, COUNTERMEASURE, INIT); - } - break; - - default: - ASSERT(0); - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -}/* end of secFsmRunEventEndOfCounterMeasure */ -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/swcr.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/swcr.c deleted file mode 100755 index 0a65bb0b579f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/swcr.c +++ /dev/null @@ -1,1268 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/swcr.c#1 $ -*/ - -/*! \file "swcr.c" - \brief - -*/ - - - -/* -** $Log: swcr.c $ - * - * 06 04 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined". - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * fix debug counters of rx in driver. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add swcr for test. - * -* -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_SWCR - -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if 0 -extern SWCR_MAP_ENTRY_T g_arRlmArSwCrMap[]; -SWCR_MOD_MAP_ENTRY_T g_arSwCrAllMaps[] = { - { SWCR_MAP_NUM(g_arRlmArSwCrMap), g_arRlmArSwCrMap}, /* 0x00nn */ - {0,NULL} -}; -#endif - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -void testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); - -/* Support Debug */ -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl); -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param); -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo); - -UINT_32 g_au4SwCr[SWCR_CR_NUM]; /*: 0: command other: data */ - -/* JB mDNS Filter*/ -UINT_32 g_u4mDNSRXFilter = 0; /* [31] 0: stop 1: start, [3] IPv6 [2] IPv4*/ - -static TIMER_T g_rSwcrDebugTimer; -static BOOLEAN g_fgSwcrDebugTimer = FALSE; -static UINT_32 g_u4SwcrDebugCheckTimeout = 0; -static ENUM_SWCR_DBG_TYPE_T g_ucSwcrDebugCheckType = 0; -static UINT_32 g_u4SwcrDebugFrameDumpType = 0; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#define TEST_PS 1 - -const static PFN_CMD_RW_T g_arSwCtrlCmd[] ={ - swCtrlCmdCategory0, - swCtrlCmdCategory1 -#if TEST_PS - , testPsCmdCategory0 - , testPsCmdCategory1 -#endif -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) - , testWNMCmdCategory0 -#endif -#endif -}; - - -const PFN_SWCR_RW_T g_arSwCrModHandle[] = { - swCtrlSwCr, - NULL -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -enum { - SWCTRL_MAGIC, - SWCTRL_DEBUG, - SWCTRL_WIFI_VAR, - SWCTRL_ENABLE_INT, - SWCTRL_DISABLE_INT, - SWCTRL_TXM_INFO, - SWCTRL_RXM_INFO, - SWCTRL_DUMP_BSS, - SWCTRL_QM_INFO, - SWCTRL_DUMP_ALL_QUEUE_LEN, - SWCTRL_DUMP_MEM, - SWCTRL_TX_CTRL_INFO, - SWCTRL_DUMP_QUEUE, - SWCTRL_DUMP_QM_DBG_CNT, - SWCTRL_QM_DBG_CNT, - SWCTRL_RX_PKTS_DUMP, - SWCTRL_RX_MDNS_FILTER, - SWCTRL_CATA0_INDEX_NUM -}; - -enum { - SWCTRL_STA_INFO, - SWCTRL_DUMP_STA, - SWCTRL_STA_QUE_INFO, - SWCTRL_CATA1_INDEX_NUM -}; - -/* JB mDNS Filter*/ -#define RX_MDNS_FILTER_START (1<<31) -#define RX_MDNS_FILTER_IPV4 (1<<2) -#define RX_MDNS_FILTER_IPV6 (1<<3) -typedef enum _ENUM_SWCR_RX_MDNS_FILTER_CMD_T { - SWCR_RX_MDNS_FILTER_CMD_STOP = 0, - SWCR_RX_MDNS_FILTER_CMD_START, - SWCR_RX_MDNS_FILTER_CMD_ADD, - SWCR_RX_MDNS_FILTER_CMD_REMOVE, - SWCR_RX_MDNS_FILTER_NUM -} ENUM_SWCR_RX_MDNS_FILTER_CMD_T; - -#if TEST_PS -enum { - TEST_PS_MAGIC, - TEST_PS_SETUP_BSS, - TEST_PS_ENABLE_BEACON, - TEST_PS_TRIGGER_BMC, - TEST_PS_SEND_NULL, - TEST_PS_BUFFER_BMC, - TEST_PS_UPDATE_BEACON, - TEST_PS_CATA0_INDEX_NUM -}; - -enum { - TEST_PS_STA_PS, - TEST_PS_STA_ENTER_PS, - TEST_PS_STA_EXIT_PS, - TEST_PS_STA_TRIGGER_PSPOLL, - TEST_PS_STA_TRIGGER_FRAME, - TEST_PS_CATA1_INDEX_NUM -}; -#endif - -#if CFG_SUPPORT_802_11V -#if WNM_UNIT_TEST -enum { - TEST_WNM_TIMING_MEAS, - TEST_WNM_CATA0_INDEX_NUM -}; -#endif -#endif - - -#define _SWCTRL_MAGIC 0x66201642 - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -void dumpQueue(P_ADAPTER_T prAdapter) -{ - - P_TX_CTRL_T prTxCtrl; - P_QUE_MGT_T prQM; - P_GLUE_INFO_T prGlueInfo; - UINT_32 i; - UINT_32 j; - - - DEBUGFUNC("dumpQueue"); - - prTxCtrl = &prAdapter->rTxCtrl; - prQM = &prAdapter->rQM; - prGlueInfo = prAdapter->prGlueInfo; - - for(i = TC0_INDEX; i<=TC5_INDEX; i++) { - DBGLOG(SW4, INFO,( "TC %u\n",i)); - DBGLOG(SW4, INFO,( "Max %u Free %u\n", - prTxCtrl->rTc.aucMaxNumOfBuffer[i], prTxCtrl->rTc.aucFreeBufferCount[i])); - - DBGLOG(SW4, INFO,("Average %u minReserved %u CurrentTcResource %u GuaranteedTcResource %u\n", - QM_GET_TX_QUEUE_LEN(prAdapter, i), - prQM->au4MinReservedTcResource[i], - prQM->au4CurrentTcResource[i], - prQM->au4GuaranteedTcResource[i])); - - } - - - for(i = 0; iau4HeadStaRecIndex[i],prQM->au4ForwardCount[i])); - } - - DBGLOG(SW4, INFO,( "BMC or unknown TxQueue Len %u\n",prQM->arTxQueue[0].u4NumElem)); - DBGLOG(SW4, INFO,( "Pending %d\n",prGlueInfo->i4TxPendingFrameNum)); - DBGLOG(SW4, INFO,( "Pending Security %d\n",prGlueInfo->i4TxPendingSecurityFrameNum)); -#if defined(LINUX) - for(i=0;i<4;i++){ - for(j=0;jai4TxPendingFrameNumPerQueue[i][j])); - } - } -#endif - - DBGLOG(SW4, INFO,( " rFreeSwRfbList %u\n", prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rReceivedRfbList %u\n", prAdapter->rRxCtrl.rReceivedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rIndicatedRfbList %u\n", prAdapter->rRxCtrl.rIndicatedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " ucNumIndPacket %u\n", prAdapter->rRxCtrl.ucNumIndPacket)); - DBGLOG(SW4, INFO,( " ucNumRetainedPacket %u\n", prAdapter->rRxCtrl.ucNumRetainedPacket)); - - -} - - -void dumpSTA(P_ADAPTER_T prAdapter, P_STA_RECORD_T prStaRec) -{ - UINT_8 ucWTEntry; - UINT_32 i; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("dumpSTA"); - - ASSERT(prStaRec); - ucWTEntry = prStaRec->ucWTEntry; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(SW4, INFO,("Mac address: " MACSTR " Rcpi %u" "\n", MAC2STR(prStaRec->aucMacAddr),prStaRec->ucRCPI)); - - DBGLOG(SW4, INFO,("Idx %u Wtbl %u Used %u State %u Bss Phy 0x%x Sta DesiredPhy 0x%x\n", - prStaRec->ucIndex, ucWTEntry, - prStaRec->fgIsInUse,prStaRec->ucStaState, - prBssInfo->ucPhyTypeSet, - prStaRec->ucDesiredPhyTypeSet)); - - DBGLOG(SW4, INFO,("Sta Operation 0x%x DesiredNontHtRateSet 0x%x Mcs 0x%x u2HtCapInfo 0x%x\n", - prStaRec->u2OperationalRateSet,prStaRec->u2DesiredNonHTRateSet,prStaRec->ucMcsSet, prStaRec->u2HtCapInfo)); - - - for(i = 0; iarTxQueue[i].u4NumElem)); - } - - DBGLOG(SW4, INFO, ("BmpDeliveryAC %x\n",prStaRec->ucBmpDeliveryAC)); - DBGLOG(SW4, INFO, ("BmpTriggerAC %x\n",prStaRec->ucBmpTriggerAC)); - DBGLOG(SW4, INFO, ("UapsdSpSupproted %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("IsQoS %u\n",prStaRec->fgIsQoS)); - DBGLOG(SW4, INFO, ("AssocId %u\n",prStaRec->u2AssocId)); - - DBGLOG(SW4, INFO, ("fgIsInPS %u\n",prStaRec->fgIsInPS)); - DBGLOG(SW4, INFO, ("ucFreeQuota %u\n",prStaRec->ucFreeQuota)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForDelivery %u\n",prStaRec->ucFreeQuotaForDelivery)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForNonDelivery %u\n",prStaRec->ucFreeQuotaForNonDelivery)); - - -#if 0 - DBGLOG(SW4, INFO, ("IsQmmSup %u\n",prStaRec->fgIsWmmSupported)); - DBGLOG(SW4, INFO, ("IsUapsdSup %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("AvailabaleDeliverPkts %u\n",prStaRec->ucAvailableDeliverPkts)); - DBGLOG(SW4, INFO, ("BmpDeliverPktsAC %u\n",prStaRec->u4BmpDeliverPktsAC)); - DBGLOG(SW4, INFO, ("BmpBufferAC %u\n",prStaRec->u4BmpBufferAC)); - DBGLOG(SW4, INFO, ("BmpNonDeliverPktsAC %u\n",prStaRec->u4BmpNonDeliverPktsAC)); -#endif - - for(i=0;iaprRxReorderParamRefTbl[i]){ - DBGLOG(SW4, INFO,("RxReorder fgIsValid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->fgIsValid)); - DBGLOG(SW4, INFO,("RxReorder Tid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->ucTid)); - DBGLOG(SW4, INFO,("RxReorder rReOrderQue Len: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->rReOrderQue.u4NumElem)); - DBGLOG(SW4, INFO,("RxReorder WinStart: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinStart)); - DBGLOG(SW4, INFO,("RxReorder WinEnd: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinEnd)); - DBGLOG(SW4, INFO,("RxReorder WinSize: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinSize)); - } - } - -} - - -VOID dumpBss(P_ADAPTER_T prAdapter, P_BSS_INFO_T prBssInfo) -{ - - DBGLOG(SW4, INFO, ("SSID %s\n",prBssInfo->aucSSID)); - DBGLOG(SW4, INFO, ("OWN " MACSTR"\n",MAC2STR(prBssInfo->aucOwnMacAddr))); - DBGLOG(SW4, INFO, ("BSSID " MACSTR"\n",MAC2STR(prBssInfo->aucBSSID))); - DBGLOG(SW4, INFO, ("ucNetTypeIndex %u\n",prBssInfo->ucNetTypeIndex)); - DBGLOG(SW4, INFO, ("eConnectionState %u\n",prBssInfo->eConnectionState)); - DBGLOG(SW4, INFO, ("eCurrentOPMode %u\n",prBssInfo->eCurrentOPMode)); - DBGLOG(SW4, INFO, ("fgIsQBSS %u\n",prBssInfo->fgIsQBSS)); - DBGLOG(SW4, INFO, ("fgIsShortPreambleAllowed %u\n",prBssInfo->fgIsShortPreambleAllowed)); - DBGLOG(SW4, INFO, ("fgUseShortPreamble %u\n",prBssInfo->fgUseShortPreamble)); - DBGLOG(SW4, INFO, ("fgUseShortSlotTime %u\n",prBssInfo->fgUseShortSlotTime)); - DBGLOG(SW4, INFO, ("ucNonHTBasicPhyType %x\n",prBssInfo->ucNonHTBasicPhyType)); - DBGLOG(SW4, INFO, ("u2OperationalRateSet %x\n",prBssInfo->u2OperationalRateSet)); - DBGLOG(SW4, INFO, ("u2BSSBasicRateSet %x\n",prBssInfo->u2BSSBasicRateSet)); - DBGLOG(SW4, INFO, ("ucPhyTypeSet %x\n",prBssInfo->ucPhyTypeSet)); - DBGLOG(SW4, INFO, ("rStaRecOfClientList %d\n",prBssInfo->rStaRecOfClientList.u4NumElem)); - DBGLOG(SW4, INFO, ("u2CapInfo %x\n",prBssInfo->u2CapInfo)); - DBGLOG(SW4, INFO, ("u2ATIMWindow %x\n",prBssInfo->u2ATIMWindow)); - DBGLOG(SW4, INFO, ("u2AssocId %x\n",prBssInfo->u2AssocId)); - DBGLOG(SW4, INFO, ("ucDTIMPeriod %x\n",prBssInfo->ucDTIMPeriod)); - DBGLOG(SW4, INFO, ("ucDTIMCount %x\n",prBssInfo->ucDTIMCount)); - DBGLOG(SW4, INFO, ("fgIsNetAbsent %x\n", prBssInfo->fgIsNetAbsent)); - DBGLOG(SW4, INFO, ("eBand %d\n", prBssInfo->eBand)); - DBGLOG(SW4, INFO, ("ucPrimaryChannel %d\n", prBssInfo->ucPrimaryChannel)); - DBGLOG(SW4, INFO, ("ucHtOpInfo1 %d\n", prBssInfo->ucHtOpInfo1)); - DBGLOG(SW4, INFO, ("ucHtOpInfo2 %d\n", prBssInfo->u2HtOpInfo2)); - DBGLOG(SW4, INFO, ("ucHtOpInfo3 %d\n", prBssInfo->u2HtOpInfo3)); - DBGLOG(SW4, INFO, ("fgErpProtectMode %d\n", prBssInfo->fgErpProtectMode)); - DBGLOG(SW4, INFO, ("eHtProtectMode %d\n", prBssInfo->eHtProtectMode)); - DBGLOG(SW4, INFO, ("eGfOperationMode %d\n", prBssInfo->eGfOperationMode)); - DBGLOG(SW4, INFO, ("eRifsOperationMode %d\n", prBssInfo->eRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgObssErpProtectMode %d\n", prBssInfo->fgObssErpProtectMode)); - DBGLOG(SW4, INFO, ("eObssHtProtectMode %d\n", prBssInfo->eObssHtProtectMode)); - DBGLOG(SW4, INFO, ("eObssGfProtectMode %d\n", prBssInfo->eObssGfOperationMode)); - DBGLOG(SW4, INFO, ("fgObssRifsOperationMode %d\n", prBssInfo->fgObssRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgAssoc40mBwAllowed %d\n", prBssInfo->fgAssoc40mBwAllowed)); - DBGLOG(SW4, INFO, ("fg40mBwAllowed %d\n", prBssInfo->fg40mBwAllowed)); - DBGLOG(SW4, INFO, ("eBssSCO %d\n", prBssInfo->eBssSCO)); - - -} - - - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_32 i; - - DEBUGFUNC("swCtrlCmdCategory0"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - i=0; - - if(ucIndex>=SWCTRL_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case SWCTRL_DEBUG: -#if DBG - aucDebugModule[ucOpt0] = (UINT_8)g_au4SwCr[1]; -#endif - break; - case SWCTRL_WIFI_VAR: - break; - -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i] = 0; - } - break; - case SWCTRL_QM_DBG_CNT: - prAdapter->rQM.au4QmDebugCounters[ucOpt0] = g_au4SwCr[1]; - - break; -#endif -#if CFG_RX_PKTS_DUMP - case SWCTRL_RX_PKTS_DUMP: - //DBGLOG(SW4, INFO,("SWCTRL_RX_PKTS_DUMP: mask %x\n", g_au4SwCr[1])); - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = g_au4SwCr[1]; - break; -#endif - case SWCTRL_RX_MDNS_FILTER: - { - UINT_32 u4rxfilter; - BOOLEAN fgUpdate = FALSE; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_STOP) { - g_u4mDNSRXFilter &= ~(RX_MDNS_FILTER_START); - - u4rxfilter = prAdapter->u4OsPacketFilter; - fgUpdate = TRUE; - } - else if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_START) { - g_u4mDNSRXFilter |= (RX_MDNS_FILTER_START); - - u4rxfilter = prAdapter->u4OsPacketFilter; - if ((g_u4mDNSRXFilter & RX_MDNS_FILTER_IPV4) && - (g_u4mDNSRXFilter & RX_MDNS_FILTER_IPV6)) { - u4rxfilter &= ~(PARAM_PACKET_FILTER_ALL_MULTICAST| - PARAM_PACKET_FILTER_MULTICAST); - } - else { - u4rxfilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - fgUpdate = TRUE; - } - else if (ucOpt0 == SWCR_RX_MDNS_FILTER_CMD_ADD) { - if (ucOpt1 < 31) { - g_u4mDNSRXFilter |= (1<rQM; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = (QM_GET_TX_QUEUE_LEN(prAdapter, ucOpt1)) ; - g_au4SwCr[2] = prQM->au4MinReservedTcResource[ucOpt1] ; - g_au4SwCr[3] = prQM->au4CurrentTcResource[ucOpt1]; - g_au4SwCr[4] = prQM->au4GuaranteedTcResource[ucOpt1]; - break; - - case 1: - g_au4SwCr[1] = prQM->au4ForwardCount[ucOpt1]; - g_au4SwCr[2] = prQM->au4HeadStaRecIndex[ucOpt1]; - break; - - case 2: - g_au4SwCr[1] = prQM->arTxQueue[ucOpt1].u4NumElem; /* only one */ - - - break; - } - - } - case SWCTRL_TX_CTRL_INFO: - { - P_TX_CTRL_T prTxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = prAdapter->rTxCtrl.rTc.aucFreeBufferCount[ucOpt1]; - g_au4SwCr[2] = prAdapter->rTxCtrl.rTc.aucMaxNumOfBuffer[ucOpt1]; - break; - } - - } - break; - case SWCTRL_DUMP_QUEUE: - dumpQueue(prAdapter); - - break; -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i])); - } - break; - - case SWCTRL_QM_DBG_CNT: - g_au4SwCr[1] = prAdapter->rQM.au4QmDebugCounters[ucOpt0]; - break; -#endif - case SWCTRL_DUMP_BSS: - { - dumpBss(prAdapter, &(prAdapter->rWifiVar.arBssInfo[ucOpt0])) ; - } - break; - - default: - break; - } - - } -} - - -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("swCtrlCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - //prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - prStaRec = &prAdapter->arStaRec[ucOpt0]; - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - } - else { - /* Read */ - switch(ucIndex) { - case SWCTRL_STA_QUE_INFO: - { - g_au4SwCr[1] = prStaRec->arTxQueue[ucOpt1].u4NumElem; - } - break; - case SWCTRL_STA_INFO: - switch(ucOpt1) { - case 0: - g_au4SwCr[1] = prStaRec->fgIsInPS; - break; - } - - break; - - case SWCTRL_DUMP_STA: - { - dumpSTA(prAdapter, prStaRec); - } - break; - - default: - - break; - } - } - - -} - -#if TEST_PS - -VOID -testPsSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN UINT_8 ucNetTypeIndex, - IN BOOLEAN fgBMC, - IN BOOLEAN fgIsBurstEnd, - IN BOOLEAN ucPacketType, - IN BOOLEAN ucPsSessionID, - IN BOOLEAN fgSetEOSP - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - - - DEBUGFUNC("testPsSendQoSNullFrame"); - DBGLOG(SW4, LOUD, ("\n")); - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SW4, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return ; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - fgSetEOSP); - - - prMsduInfo->eSrc = TX_PACKET_MGMT; - //prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucPacketType = ucPacketType; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - prMsduInfo->fgIsBurstEnd = fgIsBurstEnd; - prMsduInfo->ucUserPriority = ucUP; - prMsduInfo->ucPsSessionID = ucPsSessionID /* 0~7 Test 7 means NOACK*/; - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)( (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD) ); - - if(fgBMC) { - prQoSNullFrame->aucAddr1[0] = 0xfd; - } - else { - prQoSNullFrame->aucAddr1[5] = 0xdd; - } - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - - -VOID -testPsSetupBss( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetworkTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; - - DEBUGFUNC("testPsSetupBss()"); - DBGLOG(SW4, INFO, ("index %d\n", ucNetworkTypeIndex)); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetworkTypeIndex]); - - //4 <1.2> Initiate PWR STATE - //SET_NET_PWR_STATE_IDLE(prAdapter, ucNetworkTypeIndex); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, ucNetworkTypeIndex); - - prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eCurrentOPMode = OP_MODE_ACCESS_POINT; - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->ucNetTypeIndex = (ucNetworkTypeIndex); - prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->u2BSSBasicRateSet = RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->fgIsQBSS = TRUE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = 100; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - - prBssInfo->ucBeaconTimeoutCount = 0; - - - bssInitForAP (prAdapter,prBssInfo, TRUE); - - COPY_MAC_ADDR(prBssInfo->aucBSSID, _aucZeroMacAddr); - LINK_INITIALIZE(&prBssInfo->rStaRecOfClientList); - prBssInfo->fgIsBeaconActivated = TRUE; - prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; - - - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 1; - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - - //prBssInfo->fgErpProtectMode = eErpProectMode; - //prBssInfo->eHtProtectMode = eHtProtectMode; - //prBssInfo->eGfOperationMode = eGfOperationMode; - - - //4 <4> Allocate MSDU_INFO_T for Beacon - prBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prBssInfo->prBeacon) { - prBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prBssInfo->prBeacon->ucNetworkType = ucNetworkTypeIndex; - } - else { - DBGLOG(SW4, INFO, ("prBeacon allocation fail\n")); - } - -#if 0 - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - -#if 0 - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prBssInfo->arACQueParms[eAci].fgIsACMSet = FALSE; - prBssInfo->arACQueParms[eAci].u2Aifsn = (UINT_16) eAci; - prBssInfo->arACQueParms[eAci].u2CWmin = 7; - prBssInfo->arACQueParms[eAci].u2CWmax = 31; - prBssInfo->arACQueParms[eAci].u2TxopLimit = eAci+1; - DBGLOG(SW4, INFO, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prBssInfo->arACQueParms[eAci].fgIsACMSet , - prBssInfo->arACQueParms[eAci].u2Aifsn, - prBssInfo->arACQueParms[eAci].u2CWmin, - prBssInfo->arACQueParms[eAci].u2CWmax, - prBssInfo->arACQueParms[eAci].u2TxopLimit)); - - } -#endif - - - DBGLOG(SW4, INFO, ("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - prBssInfo->rPmProfSetupInfo.ucUapsdSp)); - - return; -} - - - - -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, LOUD, ("Read %u Index %u\n",ucRead,ucIndex)); - - prStaRec = cnmGetStaRecByIndex (prAdapter, 0); - - if(ucIndex>=TEST_PS_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_PS_SETUP_BSS: - testPsSetupBss(prAdapter, ucOpt0) ; - break; - - case TEST_PS_ENABLE_BEACON: - break; - - case TEST_PS_TRIGGER_BMC: - //txmForwardQueuedBmcPkts (ucOpt0); - break; - case TEST_PS_SEND_NULL: - { - - testPsSendQoSNullFrame (prAdapter,prStaRec, - (UINT_8)(g_au4SwCr[1] & 0xFF), /* UP */ - ucOpt0, - (BOOLEAN)((g_au4SwCr[1] >>8)& 0xFF), /* BMC*/ - (BOOLEAN)((g_au4SwCr[1] >>16)& 0xFF), /* BurstEnd*/ - (BOOLEAN)((g_au4SwCr[1] >>24)& 0xFF), /* Packet type*/ - (UINT_8)((g_au4SwCr[2] )& 0xFF), /* PS sesson ID 7: NOACK */ - FALSE /* EOSP */ - ); - } - break; - case TEST_PS_BUFFER_BMC: - //g_aprBssInfo[ucOpt0]->fgApToBufferBMC = (g_au4SwCr[1] & 0xFF); - break; - case TEST_PS_UPDATE_BEACON: - bssUpdateBeaconContent(prAdapter, ucOpt0 /*networktype*/ ); - break; - - default: - break; - } - } - else { - switch(ucIndex) { - - case TEST_PS_MAGIC: - g_au4SwCr[1] = 0x88660011 ; - break; - - } - } -} - -#endif //TEST_PS - -#if TEST_PS - -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - - switch(ucIndex) { - case TEST_PS_STA_PS: - prStaRec->fgIsInPS = (BOOLEAN) (g_au4SwCr[1] & 0x1); - prStaRec->fgIsQoS = (BOOLEAN) (g_au4SwCr[1] >>8 & 0xFF); - prStaRec->fgIsUapsdSupported = (BOOLEAN) (g_au4SwCr[1] >>16 & 0xFF); - prStaRec->ucBmpDeliveryAC = (BOOLEAN) (g_au4SwCr[1] >>24 & 0xFF); - break; - - } - - } - else { - /* Read */ - switch(ucIndex) { - default: - break; - } - } - - -} - -#endif //TEST_PS - -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) -VOID testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testWNMCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, INFO, ("Read %u Index %u\n",ucRead,ucIndex)); - - if(ucIndex>=TEST_WNM_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_WNM_TIMING_MEAS: - wnmTimingMeasUnitTest1(prAdapter, ucOpt0) ; - break; - - default: - break; - } - } -} -#endif //TEST_WNM -#endif //CFG_SUPPORT_802_11V - -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - /* According other register STAIDX */ - UINT_8 ucOffset; - ucOffset = (u2Addr>>2) & 0x3F; - - if(ucOffset>= SWCR_CR_NUM) return; - - if(ucRead==SWCR_WRITE) { - g_au4SwCr[ucOffset] = *pu4Data; - if(ucOffset==0x0) { - /* Commmand [31:24]: Category */ - /* Commmand [23:23]: 1(W) 0(R) */ - /* Commmand [22:16]: Index */ - /* Commmand [15:08]: Option0 */ - /* Commmand [07:00]: Option1 */ - UINT_8 ucCate; - UINT_32 u4Cmd; - u4Cmd = g_au4SwCr[0]; - ucCate = (UINT_8)(u4Cmd >> 24) ; - if(ucCate < sizeof(g_arSwCtrlCmd)/sizeof(g_arSwCtrlCmd[0])) { - if(g_arSwCtrlCmd[ucCate]!=NULL) { - g_arSwCtrlCmd[ucCate](prAdapter, ucCate, (UINT_8)(u4Cmd>>16 & 0xFF),(UINT_8)((u4Cmd>>8) & 0xFF), (UINT_8)(u4Cmd&0xFF)); - } - } - } - } - else { - *pu4Data = g_au4SwCr[ucOffset]; - } -} - -VOID swCrReadWriteCmd(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - UINT_8 ucMod; - - ucMod = u2Addr >>8; - /* Address [15:8] MOD ID */ - /* Address [7:0] OFFSET */ - - DEBUGFUNC("swCrReadWriteCmd"); - DBGLOG(SW4, INFO, ("%u addr 0x%x data 0x%x\n",ucRead,u2Addr,*pu4Data)); - - if(ucMod < (sizeof(g_arSwCrModHandle)/sizeof(g_arSwCrModHandle[0])) ) { - - if(g_arSwCrModHandle[ucMod]!=NULL) { - g_arSwCrModHandle[ucMod](prAdapter, ucRead, u2Addr, pu4Data); - } - } /* ucMod */ -} - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType) -{ - g_u4SwcrDebugFrameDumpType = u4DumpType; - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = u4DumpType; -} - -VOID swCrDebugInit(P_ADAPTER_T prAdapter) -{ - // frame dump - if (g_u4SwcrDebugFrameDumpType) { - swCrFrameCheckEnable(prAdapter, g_u4SwcrDebugFrameDumpType); - } - - // debug counter - g_fgSwcrDebugTimer = FALSE; - - cnmTimerInitTimer(prAdapter, - &g_rSwcrDebugTimer, - (PFN_MGMT_TIMEOUT_FUNC)swCrDebugCheckTimeout, - (UINT_32) NULL); - - if (g_u4SwcrDebugCheckTimeout) { - swCrDebugCheckEnable(prAdapter, TRUE, g_ucSwcrDebugCheckType, g_u4SwcrDebugCheckTimeout); - } -} - -VOID swCrDebugUninit(P_ADAPTER_T prAdapter) -{ - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - - g_fgSwcrDebugTimer = FALSE; -} - -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout) -{ - if (fgIsEnable) { - g_ucSwcrDebugCheckType = ucType; - g_u4SwcrDebugCheckTimeout = u4Timeout; - if (g_fgSwcrDebugTimer == FALSE) { - swCrDebugCheckTimeout(prAdapter, 0); - } - } - else { - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - g_u4SwcrDebugCheckTimeout = 0; - } - - g_fgSwcrDebugTimer = fgIsEnable; -} - -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - // dump counters - if (prCmdSwCtrl) { - if (prCmdSwCtrl->u4Data == SWCR_DBG_TYPE_ALL) { - - // TX Counter from fw - DBGLOG(SW4, INFO, ("TX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_BCN_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_FAILED_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_RETRY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_MGNT_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_ERROR_CNT])); -#if 1 - // TX Counter from drv - DBGLOG(SW4, INFO, ("TX1\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_BSS_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_STA_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_FORWARD_OVERFLOW_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_AP_BORADCAST_DROP))); -#endif - - // RX Counter - DBGLOG(SW4, INFO, ("RX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DUP_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FIFOFULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_PFDROP_CNT])); - - DBGLOG(SW4, INFO, ("RX1\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)RX_GET_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT))); - - DBGLOG(SW4, INFO, ("PWR\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PS_POLL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_IND_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE1], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF1])); - - DBGLOG(SW4, INFO, ("ARM\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RATE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_BWGI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ENABLE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ROAM_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_INT_CNT])); - - DBGLOG(SW4, INFO, ("BB\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_MDRDY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SFDERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SIGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT])); - - } - } - - // start the next check - if (g_u4SwcrDebugCheckTimeout) { - cnmTimerStartTimer(prAdapter, &g_rSwcrDebugTimer, g_u4SwcrDebugCheckTimeout * MSEC_PER_SEC); - } -} - -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param) -{ - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rStatus; - - rCmdSwCtrl.u4Id = (0xb000<<16) + g_ucSwcrDebugCheckType; - rCmdSwCtrl.u4Data = 0; - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SW_DBG_CTRL, /* ucCID */ - FALSE, /* fgSetQuery */ - TRUE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - swCrDebugQuery, /* pfCmdDoneHandler */ - swCrDebugQueryTimeout, /* pfCmdTimeoutHandler */ - sizeof(CMD_SW_DBG_CTRL_T), /* u4SetQueryInfoLen */ - (PUINT_8)&rCmdSwCtrl, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} - -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, (P_CMD_SW_DBG_CTRL_T)(pucEventBuf)); -} - -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, NULL); -} - -#endif /* CFG_SUPPORT_SWCR */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/wapi.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/wapi.c deleted file mode 100755 index abf807d31193..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/wapi.c +++ /dev/null @@ -1,514 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/wapi.c#1 $ -*/ - -/*! \file "wapi.c" - \brief This file including the WAPI related function. - - This file provided the macros and functions library support the wapi ie parsing, - cipher and AKM check to help the AP seleced deciding. -*/ - - - -/* -** $Log: wapi.c $ - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * fixed the network type - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 20 2010 wh.su - * - * . - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to check and update the default wapi tx - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the generate wapi ie function, and replace the tabe by space - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wapiGenerateWAPIIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 68 :0x44 */ - if (/* prWlanInfo->fgWapiMode && */ prAdapter->prGlueInfo->u2WapiAssocInfoIESz) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWapiAssocInfoIEs, prAdapter->prGlueInfo->u2WapiAssocInfoIESz); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WapiAssocInfoIESz; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WAPI IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** WAPI information from the given WAPI IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWapiIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WAPI_CIPHER_SUITE_WPI; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - - DEBUGFUNC("wapiParseWapiIE"); - - ASSERT(prInfoElem); - ASSERT(prWapiInfo); - - /* Verify the length of the WAPI IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(SEC, TRACE, ("WAPI IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WAPI version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(SEC, TRACE, ("Unsupported WAPI IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u2AuthKeyMgtSuiteCount; - u4RemainWapiIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainWapiIeLen == 0) { - break; - } - - /* - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - GroupSuite : 4 - Cap : 2 */ - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - if (u4RemainWapiIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWapiIeLen < 4) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWapiIeLen -= 4; - - /* Parse the WAPI u2Capabilities field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in WAPI capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWapiIeLen -= 2; - - /* Todo:: BKID support */ - } while (FALSE); - - /* Save the WAPI information for the BSS. */ - - prWapiInfo->ucElemId = ELEM_ID_WAPI; - - prWapiInfo->u2Version = u2Version; - - prWapiInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(SEC, LOUD, ("WAPI: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prWapiInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWapiInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(SEC, LOUD,("WAPI: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WAPI: WPI. */ - prWapiInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWapiInfo->au4PairwiseKeyCipherSuite[0] = WAPI_CIPHER_SUITE_WPI; - - DBGLOG(SEC, LOUD, ("WAPI: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prWapiInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWapiInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WAPI. */ - prWapiInfo->u4AuthKeyMgtSuiteCount = 1; - prWapiInfo->au4AuthKeyMgtSuite[0] = WAPI_AKM_SUITE_802_1X; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prWapiInfo->u2WapiCap = u2Cap; - DBGLOG(SEC, LOUD, ("WAPI: cap: 0x%04x\n", prWapiInfo->u2WapiCap)); - - return TRUE; -} /* wapiParseWapiIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform WAPI policy selection for a given BSS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The WAPI policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The WAPI policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - UINT_32 i; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_WAPI_INFO_T prBssWapiInfo; - P_WLAN_INFO_T prWlanInfo; - - DEBUGFUNC("wapiPerformPolicySelection"); - - ASSERT(prBss); - - /* Notice!!!! WAPI AP not set the privacy bit for WAI and WAI-PSK at WZC configuration mode */ - prWlanInfo = &prAdapter->rWlanInfo; - - if (prBss->fgIEWAPI) { - prBssWapiInfo = &prBss->rIEWAPI; - } - else { - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode == FALSE) { - DBGLOG(SEC, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(SEC, TRACE, ("WAPI Information Element does not exist.\n")); - return FALSE; - } - } - - /* Select pairwise/group ciphers */ - for (i = 0; i < prBssWapiInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (prBssWapiInfo->au4PairwiseKeyCipherSuite[i] == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher) { - u4PairwiseCipher = prBssWapiInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (prBssWapiInfo->u4GroupKeyCipherSuite == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher) - u4GroupCipher = prBssWapiInfo->u4GroupKeyCipherSuite; - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(SEC, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ - for (i = 0; i < prBssWapiInfo->u4AuthKeyMgtSuiteCount; i++) { - if (prBssWapiInfo->au4AuthKeyMgtSuite[i] == prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite) { - u4AkmSuite = prBssWapiInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(SEC, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(SEC, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(SEC, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - - return TRUE; -} /* wapiPerformPolicySelection */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is use for wapi mode, to update the current wpi tx idx ? 0 :1 . -* -* \param[in] prStaRec Pointer to the Sta record -* \param[out] ucWlanIdx The Rx status->wlanidx field -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiUpdateTxKeyIdx ( - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucWlanIdx - ) -{ - UINT_8 ucKeyId; - - if ((ucWlanIdx & BITS(0, 3)) == CIPHER_SUITE_WPI) { - - ucKeyId = ((ucWlanIdx & BITS(4, 5)) >> 4); - - if (ucKeyId != g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey) { - DBGLOG(RSN, STATE, ("Change wapi key index from %d->%d\n", g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey, ucKeyId)); - g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey = ucKeyId; - - prStaRec->ucWTEntry = - (ucKeyId == WTBL_AIS_BSSID_WAPI_IDX_0) ? WTBL_AIS_BSSID_WAPI_IDX_0 : WTBL_AIS_BSSID_WAPI_IDX_1; - } - } -} -#endif -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/wnm.c b/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/wnm.c deleted file mode 100755 index c6871df87ce7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/mgmt/wnm.c +++ /dev/null @@ -1,349 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/mgmt/wnm.c#1 $ -*/ - -/*! \file "wnm.c" - \brief This file includes the 802.11v default vale and functions. -*/ - - - -/* -** $Log: wnm.c $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_802_11V - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define WNM_MAX_TOD_ERROR 0 -#define WNM_MAX_TOA_ERROR 0 -#define MICRO_TO_10NANO(x) ((x)*100) -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -static UINT_8 ucTimingMeasToken = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v wnm category action frame. -* -* -* \note -* Called by: Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prRxFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - if (prRxFrame->ucAction == ACTION_WNM_TIMING_MEASUREMENT_REQUEST) { - wnmTimingMeasRequest(prAdapter, prSwRfb); - return; - } -#endif - - DBGLOG(WNM, TRACE, ("Unsupport WNM action frame: %d\n", prRxFrame->ucAction)); -} - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to report timing measurement data. -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("wnmReportTimingMeas: u4ToD %x u4ToA %x", u4ToD, u4ToA)); - - if (!prStaRec->rWNMTimingMsmt.ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.u4ToD = MICRO_TO_10NANO(u4ToD); - prStaRec->rWNMTimingMsmt.u4ToA = MICRO_TO_10NANO(u4ToA); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(TimingMeasurement) Event. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Timing Measurement frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(WNM, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - DBGLOG(WNM, TRACE, ("wnmRunEventTimgingMeasTxDone: ucDialog %d ucFollowUp %d u4ToD %x u4ToA %x", - prStaRec->rWNMTimingMsmt.ucDialogToken, - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken, - prStaRec->rWNMTimingMsmt.u4ToD, - prStaRec->rWNMTimingMsmt.u4ToA)); - - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, NULL); - - return WLAN_STATUS_SUCCESS; - -} /* end of wnmRunEventTimgingMeasTxDone() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Timing Measurement frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME prTxFrame; - UINT_16 u2PayloadLen; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prStaRec->aucMacAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_UNPROTECTED_WNM_ACTION; - prTxFrame->ucAction = ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT; - - //3 Compose the frame body's frame. - prTxFrame->ucDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prTxFrame->ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken; - prTxFrame->u4ToD = prStaRec->rWNMTimingMsmt.u4ToD; - prTxFrame->u4ToA = prStaRec->rWNMTimingMsmt.u4ToA; - prTxFrame->ucMaxToDErr = WNM_MAX_TOD_ERROR; - prTxFrame->ucMaxToAErr = WNM_MAX_TOA_ERROR; - - u2PayloadLen = 2 + ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - DBGLOG(WNM, TRACE, ("wnmComposeTimingMeasFrame: ucDialogToken %d ucFollowUpDialogToken %d u4ToD %x u4ToA %x\n", - prTxFrame->ucDialogToken, prTxFrame->ucFollowUpDialogToken, - prTxFrame->u4ToD, prTxFrame->u4ToA)); - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return; - -} /* end of wnmComposeTimingMeasFrame() */ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v timing measurement request. -* -* -* \note -* Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_WNM_TIMING_MEAS_REQ_FRAME prRxFrame = NULL; - P_STA_RECORD_T prStaRec; - - prRxFrame = (P_ACTION_WNM_TIMING_MEAS_REQ_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("IEEE 802.11: Received Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - // reset timing msmt - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = prRxFrame->ucTrigger; - if (!prRxFrame->ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, INFO, ("IEEE 802.11v: Test Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = 1; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} -#endif - -#endif /* CFG_SUPPORT_802_11V_TIMING_MEASUREMENT */ - -#endif /* CFG_SUPPORT_802_11V */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/cmd_buf.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/cmd_buf.c deleted file mode 100755 index 62653abf608a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/cmd_buf.c +++ /dev/null @@ -1,218 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/cmd_buf.c#1 $ -*/ - -/*! \file "cmd_buf.c" - \brief This file contain the management function of internal Command Buffer - for CMD_INFO_T. - - We'll convert the OID into Command Packet and then send to FW. Thus we need - to copy the OID information to Command Buffer for following reasons. - 1. The data structure of OID information may not equal to the data structure of - Command, we cannot use the OID buffer directly. - 2. If the Command was not generated by driver we also need a place to store the - information. - 3. Because the CMD is NOT FIFO when doing memory allocation (CMD will be generated - from OID or interrupt handler), thus we'll use the Block style of Memory Allocation - here. -*/ - - - -/* -** $Log: cmd_buf.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-13 21:59:08 GMT mtk01084 -** remove un-neceasary spaces -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-05-20 12:24:26 GMT mtk01461 -** Increase CMD Buffer - HIF_RX_HW_APPENDED_LEN when doing CMD_INFO_T allocation -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 09:41:08 GMT mtk01461 -** Add init of Driver Domain MCR flag and fix lint MTK WARN -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-17 19:51:45 GMT mtk01461 -** allocation function of CMD_INFO_T -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initial the MGMT memory pool for CMD Packet. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - UINT_32 i; - - ASSERT(prAdapter); - - QUEUE_INITIALIZE(&prAdapter->rFreeCmdList); - - for (i = 0; i < CFG_TX_MAX_CMD_PKT_NUM; i++) { - prCmdInfo = &prAdapter->arHifCmdDesc[i]; - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - } - -} /* end of cmdBufInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate CMD_INFO_T from a free list and MGMT memory pool. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] u4Length Length of the frame buffer to allocate. -* -* @retval NULL Pointer to the valid CMD Packet handler -* @retval !NULL Fail to allocat CMD Packet -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ) -{ - P_CMD_INFO_T prCmdInfo; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufAllocateCmdInfo"); - - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - /* Setup initial value in CMD_INFO_T */ - /* Start address of allocated memory */ - prCmdInfo->pucInfoBuffer = - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - - if (prCmdInfo->pucInfoBuffer == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - prCmdInfo = NULL; - } - else { - prCmdInfo->u2InfoBufLen = 0; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - } - } - - return prCmdInfo; - -} /* end of cmdBufAllocateCmdInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to free the CMD Packet to the MGMT memory pool. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo CMD Packet handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufFreeCmdInfo"); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo) { - if (prCmdInfo->pucInfoBuffer) { - cnmMemFree(prAdapter, prCmdInfo->pucInfoBuffer); - prCmdInfo->pucInfoBuffer = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - } - - return; - -} /* end of cmdBufFreeCmdPacket() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic.c deleted file mode 100755 index 139c71bae6af..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic.c +++ /dev/null @@ -1,4421 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic.c#2 $ -*/ - -/*! \file nic.c - \brief Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - - - -/* -** $Log: nic.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 02 2012 terry.wu - * NULL - * Set the default value of AP StaRec index to "STA_REC_INDEX_NOT_FOUND" in update firmware bss command. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 04 2011 cp.wu - * [WCXRP00001079] [MT5931][Driver] Release pending MMPDU only when BSS is being deactivated - * pre-check for NULL before calling MMPDU free function - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 11 2011 terry.wu - * NULL - * Rewrite Assert Dump Function for Portability. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 05 12 2011 puff.wen - * NULL - * FW Assert information dump to driver - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 cp.wu - * [WCXRP00000651] [MT6620 Wi-Fi][Driver] Refine RSSI buffering mechanism - * ROLLBACK due to the special design is to workaround incorrect initial RCPI value coming from firmware domain. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 12 2011 wh.su - * NULL - * enable the p2p check the cipher to set the bssInfo auth mode. - * - * 04 12 2011 wh.su - * NULL - * prepare the code for sync the auth mode and encryption status for P2P and BOW. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 10 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * Fix compiler issue. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * . - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * implementation of internal error handling of nicAllocateAdapterMemory. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 08 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Use kalPrint to print firmware assert info. - * - * 02 01 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * . - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 31 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Print firmware ASSERT info at Android kernel log, driver side - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000372] [MT6620 Wi-Fi][Driver] Check bus access failure inside nicProcessIST() - * check bus error and/or card removal when retrieving interrupt status from HAL - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 02 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add more control value but dont use it now. - * - * 11 30 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add auto rate check window in registry - * - * 11 10 2010 eddie.chen - * [WCXRP00000156] [MT6620][FW] Change Auto rate window to 64 and add throughput swcr - * Use autorate parameter 1 as phy rate mask. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 18 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * reset ptrs when IEs are going to be dropped - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 26 2010 yuche.tsai - * NULL - * Fix someones coding error while enable WIFI_DIRECT. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 yuche.tsai - * NULL - * Add state change indication. - * - * 08 16 2010 yuche.tsai - * NULL - * Add support for P2P BSS update info. - * - * 08 12 2010 cp.wu - * NULL - * [removing debugging] not to dump beacon content. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * FIX: structure of CMD_SET_BSS_INFO has been changed but no follow-ups are done. - * - * 07 22 2010 george.huang - * - * . - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill fgIsUapsdConnection when indicating BSS-CREATE with AIS-STA mode. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * correct nicProcessIST_impl() for interrupt status brought up by RX enhanced response - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-16 18:03:43 GMT mtk02752 -** handling enhanced response which fields are fetched at different moments -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-15 17:00:29 GMT mtk02752 -** if RX enhanced response is used, D2H interrupt status should be coming from buffered result as well -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-15 12:01:55 GMT mtk02752 -** if TX_DONE bit is not set but WTSR0/WTSR1 is non-zero, then set TX_DONE bit due to time latency of interrupt status enhanced response -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:52:52 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-24 20:51:01 GMT mtk02752 -** integrate with SD1 by invoking qmHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-16 17:32:33 GMT mtk02752 -** prepare code for invoking rxHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:08 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-09 22:56:41 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:20 GMT mtk01084 -** prevent warning -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:54:57 GMT mtk01084 -** init HIF -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:30 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:12 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-09-09 17:26:15 GMT mtk01084 -** modify for CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-19 10:55:22 GMT mtk01461 -** Unmask the unused HISR -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-18 15:59:13 GMT mtk01084 -** remove debug purpose code -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 14:05:02 GMT mtk01084 -** update for WIFI ownback part on initial -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-04 21:32:57 GMT mtk01084 -** add temporarily code to set driver own on adapter initialization -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:35:41 GMT mtk01461 -** Add init of TX aggregation and fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-24 21:12:10 GMT mtk01104 -** Add function nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:43:31 GMT mtk01461 -** Revise for MTK coding style - nicInitializeAdapter() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:52:47 GMT mtk01461 -** Update allocate Adapter Memory for MGMT Memory pool -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:57:08 GMT mtk01461 -** Refine the order of release memory from pucRxCoalescingBufCached -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-19 18:32:57 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:00:14 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:27 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:25:59 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const UINT_8 aucPhyCfg2PhyTypeSet[PHY_CONFIG_NUM] = -{ - PHY_TYPE_SET_802_11ABG, /* PHY_CONFIG_802_11ABG */ - PHY_TYPE_SET_802_11BG, /* PHY_CONFIG_802_11BG */ - PHY_TYPE_SET_802_11G, /* PHY_CONFIG_802_11G */ - PHY_TYPE_SET_802_11A, /* PHY_CONFIG_802_11A */ - PHY_TYPE_SET_802_11B, /* PHY_CONFIG_802_11B */ - PHY_TYPE_SET_802_11ABGN, /* PHY_CONFIG_802_11ABGN */ - PHY_TYPE_SET_802_11BGN, /* PHY_CONFIG_802_11BGN */ - PHY_TYPE_SET_802_11AN, /* PHY_CONFIG_802_11AN */ - PHY_TYPE_SET_802_11GN /* PHY_CONFIG_802_11GN */ -}; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - #define REQ_GATING_ENABLE_H2D_INT BIT(31) - #define REQ_GATING_DISABLE_H2D_INT BIT(30) - #define ACK_GATING_ENABLE_D2H_INT BIT(31) - #define ACK_GATING_DISABLE_D2H_INT BIT(30) - - #define GATING_CONTROL_POLL_LIMIT 64 -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -static INT_EVENT_MAP_T arIntEventMapTable[] = { - {WHISR_ABNORMAL_INT, INT_EVENT_ABNORMAL}, - {WHISR_D2H_SW_INT, INT_EVENT_SW_INT}, - {WHISR_TX_DONE_INT, INT_EVENT_TX}, - {(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT), INT_EVENT_RX} -}; - -static const UINT_8 ucIntEventMapSize = (sizeof(arIntEventMapTable) / sizeof(INT_EVENT_MAP_T)); - -static IST_EVENT_FUNCTION apfnEventFuncTable[] = { - nicProcessAbnormalInterrupt, /*!< INT_EVENT_ABNORMAL */ - nicProcessSoftwareInterrupt, /*!< INT_EVENT_SW_INT */ - nicProcessTxInterrupt, /*!< INT_EVENT_TX */ - nicProcessRxInterrupt, /*!< INT_EVENT_RX */ -}; -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*! This macro is used to reduce coding errors inside nicAllocateAdapterMemory() - * and also enhance the readability. - */ -#define LOCAL_NIC_ALLOCATE_MEMORY(pucMem, u4Size, eMemType, pucComment) \ - { \ - DBGLOG(INIT, INFO, ("Allocating %ld bytes for %s.\n", u4Size, pucComment)); \ - if ((pucMem = (PUINT_8)kalMemAlloc(u4Size, eMemType)) == (PUINT_8)NULL) { \ - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for %s.\n", u4Size, pucComment)); \ - break; \ - } \ - ASSERT(((UINT_32)pucMem % 4) == 0); \ - DBGLOG(INIT, INFO, ("Virtual Address = %08lx for %s.\n", (UINT_32)pucMem, pucComment)); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for the allocation of the data structures -* inside the Adapter structure, include: -* 1. SW_RFB_Ts -* 2. Common coalescing buffer for TX PATH. -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @retval WLAN_STATUS_SUCCESS - Has enough memory. -* @retval WLAN_STATUS_RESOURCES - Memory is not enough. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS status = WLAN_STATUS_RESOURCES; - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicAllocateAdapterMemory"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - - do { - //4 <0> Reset all Memory Handler - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount = 0; - prAdapter->u4MemAllocDynamicCount = 0; - #endif - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - prRxCtrl->pucRxCached = (PUINT_8)NULL; - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - - - //4 <1> Memory for Management Memory Pool and CMD_INFO_T - /* Allocate memory for the CMD_INFO_T and its MGMT memory pool. */ - prAdapter->u4MgtBufCachedSize = MGT_BUFFER_SIZE; - - LOCAL_NIC_ALLOCATE_MEMORY(prAdapter->pucMgtBufCached, - prAdapter->u4MgtBufCachedSize, - VIR_MEM_TYPE, - "COMMON MGMT MEMORY POOL"); - - //4 <2> Memory for RX Descriptor - /* Initialize the number of rx buffers we will have in our queue. */ - /* We may setup ucRxPacketDescriptors by GLUE Layer, and using - * this variable directly. - */ - /* Allocate memory for the SW receive structures. */ - prRxCtrl->u4RxCachedSize = CFG_RX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(SW_RFB_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prRxCtrl->pucRxCached, - prRxCtrl->u4RxCachedSize, - VIR_MEM_TYPE, - "SW_RFB_T"); - - //4 <3> Memory for TX DEscriptor - prTxCtrl->u4TxCachedSize = CFG_TX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(MSDU_INFO_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prTxCtrl->pucTxCached, - prTxCtrl->u4TxCachedSize, - VIR_MEM_TYPE, - "MSDU_INFO_T"); - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - - /* Allocate memory for the common coalescing buffer. */ - prAdapter->u4CoalescingBufCachedSize = CFG_COALESCING_BUFFER_SIZE > CFG_RX_COALESCING_BUFFER_SIZE ? - CFG_COALESCING_BUFFER_SIZE : CFG_RX_COALESCING_BUFFER_SIZE; - - prAdapter->pucCoalescingBufCached = - kalAllocateIOBuffer(prAdapter->u4CoalescingBufCachedSize); - - if(prAdapter->pucCoalescingBufCached == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for coalescing buffer.\n", prAdapter->u4CoalescingBufCachedSize)); - break; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <5> Memory for enhanced interrupt response - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T) - kalAllocateIOBuffer(sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(prAdapter->prSDIOCtrl == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for interrupt response.\n", sizeof(ENHANCE_MODE_DATA_STRUCT_T))); - break; - } - - status = WLAN_STATUS_SUCCESS; - - } - while(FALSE); - - if(status != WLAN_STATUS_SUCCESS) { - nicReleaseAdapterMemory(prAdapter); - } - - return status; - -} /* end of nicAllocateAdapterMemory() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for releasing the allocated memory by -* nicAllocatedAdapterMemory(). -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <5> Memory for enhanced interrupt response - if (prAdapter->prSDIOCtrl) { - kalReleaseIOBuffer((PVOID)prAdapter->prSDIOCtrl, sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - } - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - if (prAdapter->pucCoalescingBufCached) { - kalReleaseIOBuffer((PVOID)prAdapter->pucCoalescingBufCached, prAdapter->u4CoalescingBufCachedSize); - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <3> Memory for TX Descriptor - if (prTxCtrl->pucTxCached) { - kalMemFree((PVOID)prTxCtrl->pucTxCached, - VIR_MEM_TYPE, - prTxCtrl->u4TxCachedSize); - prTxCtrl->pucTxCached = (PUINT_8)NULL; - } - - //4 <2> Memory for RX Descriptor - if (prRxCtrl->pucRxCached) { - kalMemFree((PVOID)prRxCtrl->pucRxCached, - VIR_MEM_TYPE, - prRxCtrl->u4RxCachedSize); - prRxCtrl->pucRxCached = (PUINT_8)NULL; - } - - //4 <1> Memory for Management Memory Pool - if (prAdapter->pucMgtBufCached) { - kalMemFree((PVOID)prAdapter->pucMgtBufCached, - VIR_MEM_TYPE, - prAdapter->u4MgtBufCachedSize); - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - } - -#if CFG_DBG_MGT_BUF - /* Check if all allocated memories are free */ - ASSERT(prAdapter->u4MemFreeDynamicCount == - prAdapter->u4MemAllocDynamicCount); -#endif - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief disable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - prAdapter->fgIsIntEnable = FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief enable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgIsIntEnableCache; - - - ASSERT(prAdapter); - fgIsIntEnableCache = prAdapter->fgIsIntEnable; - - prAdapter->fgIsIntEnable = TRUE; // NOTE(Kevin): It must be placed before MCR GINT write. - - /* If need enable INT and also set LPOwn at the same time. */ - if (prAdapter->fgIsIntEnableWithLPOwnSet) { - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; /* NOTE(Kevin): It's better to place it - * before MCR GINT write. - */ - /* If INT was enabled, only set LPOwn */ - if (fgIsIntEnableCache) { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - prAdapter->fgIsFwOwn = TRUE; - } - /* If INT was not enabled, enable it and also set LPOwn now */ - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET | - WHLPCR_INT_EN_SET); - prAdapter->fgIsFwOwn = TRUE; - } - } - /* If INT was not enabled, enable it now */ - else if (!fgIsIntEnableCache) { - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_SET); - } - - return; -} /* end of nicEnableInterrupt() */ - - -#if CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief For SDIO enhance mode, set the max rx len and tx status -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value = 0; - - ASSERT(prAdapter); - - //4 <1> Check STATUS Buffer is DW alignment. - ASSERT( IS_ALIGN_4( (UINT_32)&prAdapter->prSDIOCtrl->u4WHISR ) ); - - //4 <2> Setup STATUS count. - { - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value); - - //4 <2.1> Setup the number of maximum RX length to be report - u4Value &= ~(WHCR_MAX_HIF_RX_LEN_NUM); - u4Value |= ((SDIO_MAXIMUM_RX_LEN_NUM << WHCR_OFFSET_MAX_HIF_RX_LEN_NUM)); - - //4 <2.2> Setup RX enhancement mode -#if CFG_SDIO_RX_ENHANCE - u4Value |= WHCR_RX_ENHANCE_MODE_EN; -#else - u4Value &= ~WHCR_RX_ENHANCE_MODE_EN; -#endif /* CFG_SDIO_RX_AGG */ - - HAL_MCR_WR(prAdapter, MCR_WHCR, u4Value); - } - - return; - -} /* end of nicSDIOInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read interrupt status from hardware -* -* @param prAdapter pointer to the Adapter handler -* @param the interrupts -* -* @return N/A -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - - DEBUGFUNC("nicSDIOReadIntStatus"); - - ASSERT(prAdapter); - ASSERT(pu4IntStatus); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - HAL_PORT_RD(prAdapter, - MCR_WHISR, - sizeof(ENHANCE_MODE_DATA_STRUCT_T), - (PUINT_8)prSDIOCtrl, - sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - *pu4IntStatus = 0; - return; - } - - /* workaround */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - *pu4IntStatus = prSDIOCtrl->u4WHISR; - - return; -} /* end of nicSDIOReadIntStatus() */ -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to read interrupt status and then invoking -* dispatching procedure for the appropriate functions -* corresponding to specific interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4IntStatus = 0; - UINT_32 i; - - DEBUGFUNC("nicProcessIST"); - //DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set nicProcessIST! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - for (i = 0; i < CFG_IST_LOOP_COUNT; i++) { - -#if CFG_SDIO_INTR_ENHANCE - nicSDIOReadIntStatus(prAdapter, &u4IntStatus); -#else - HAL_MCR_RD(prAdapter, MCR_WHISR, &u4IntStatus); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - //DBGLOG(INIT, TRACE, ("u4IntStatus: 0x%x\n", u4IntStatus)); - - if (u4IntStatus & ~(WHIER_DEFAULT | WHIER_FW_OWN_BACK_INT_EN)) { - DBGLOG(INTR, WARN, ("Un-handled HISR %#x, HISR = %#x (HIER:0x%x)\n", - (u4IntStatus & ~WHIER_DEFAULT), u4IntStatus, WHIER_DEFAULT)); - u4IntStatus &= WHIER_DEFAULT; - } - - nicProcessIST_impl(prAdapter, u4IntStatus); - - if(u4IntStatus == 0) { - if(i == 0) { - u4Status = WLAN_STATUS_NOT_INDICATING; - } - break; - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return u4Status; -} /* end of nicProcessIST() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to dispatch the appropriate functions for specific -* interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* u4IntStatus interrupt status bits -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ) -{ - UINT_32 u4IntCount = 0; - P_INT_EVENT_MAP_T prIntEventMap = NULL; - - ASSERT(prAdapter); - - prAdapter->u4IntStatus = u4IntStatus; - - /* Process each of the interrupt status consequently */ - prIntEventMap = &arIntEventMapTable[0]; - for (u4IntCount = 0; u4IntCount < ucIntEventMapSize; prIntEventMap++, u4IntCount++) { - if (prIntEventMap->u4Int & prAdapter->u4IntStatus) { - if(prIntEventMap->u4Event == INT_EVENT_RX && - prAdapter->fgIsEnterD3ReqIssued == TRUE) { - // ignore - } - else if (apfnEventFuncTable[prIntEventMap->u4Event] != NULL) { - apfnEventFuncTable[prIntEventMap->u4Event](prAdapter); - } - else { - DBGLOG(INTR , WARN, - ("Empty INTR handler! ISAR bit#: %ld, event:%d, func: 0x%x\n", - prIntEventMap->u4Int, prIntEventMap->u4Event, apfnEventFuncTable[prIntEventMap->u4Event])); - - ASSERT(0); // to trap any NULL interrupt handler - } - prAdapter->u4IntStatus &= ~prIntEventMap->u4Int; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of nicProcessIST_impl() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Verify the CHIP ID -* -* @param prAdapter a pointer to adapter private data structure. -* -* -* @retval TRUE CHIP ID is the same as the setting compiled -* @retval FALSE CHIP ID is different from the setting compiled -*/ -/*----------------------------------------------------------------------------*/ -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4CIR = 0; - - ASSERT(prAdapter); - - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4CIR ); - - DBGLOG(INIT, TRACE,("Chip ID: 0x%x\n", u4CIR & WCIR_CHIP_ID)); - DBGLOG(INIT, TRACE,("Revision ID: 0x%x\n", ((u4CIR & WCIR_REVISION_ID) >> 16))); - - if ((u4CIR & WCIR_CHIP_ID) != MTK_CHIP_REV) { - return FALSE; - } - - prAdapter->ucRevID = (UINT_8)(((u4CIR & WCIR_REVISION_ID) >> 16) & 0xF) ; - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the MCR to the appropriate init value, and verify the init -* value -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); - - //4 <0> Initial value -} - -VOID -nicHifInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); -#if 0 - /* reset event */ - nicPutMailbox(prAdapter, 0, 0x52455345); // RESE - nicPutMailbox(prAdapter, 1, 0x545F5746); // T_WF - nicSetSwIntr(prAdapter, BIT(16)); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the Adapter soft variable -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; - - do { - if (!nicVerifyChipID(prAdapter)) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> MCR init - nicMCRInit(prAdapter); - - #if CFG_SDIO_INTR_ENHANCE - nicSDIOInit(prAdapter); - #endif /* CFG_SDIO_INTR_ENHANCE */ - - HAL_MCR_WR(prAdapter, MCR_WHIER, WHIER_DEFAULT); - - - //4 <2> init FW HIF - nicHifInit(prAdapter); - } - while (FALSE); - - - return u4Status; -} - - -#if defined(_HIF_SPI) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Restore the SPI Mode Select to default mode, -* this is important while driver is unload, and this must be last mcr -* since the operation will let the hif use 8bit mode access -* -* \param[in] prAdapter a pointer to adapter private data structure. -* \param[in] eGPIO2_Mode GPIO2 operation mode -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -void -nicRestoreSpiDefMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_MCR_WR(prAdapter, MCR_WCSR, SPICSR_8BIT_MODE_DATA); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value; - - HAL_MCR_RD(prAdapter, MCR_WASR, &u4Value); - DBGLOG(REQ, WARN, ("MCR_WASR: 0x%x \n", u4Value)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessFwOwnBackInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - - return; -} /* end of nicProcessFwOwnBackInterrupt() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4IntrBits; - - ASSERT(prAdapter); - - u4IntrBits = prAdapter->u4IntStatus & BITS(8, 31); - - if((u4IntrBits & WHISR_D2H_SW_ASSERT_INFO_INT) != 0) { - nicPrintFirmwareAssertInfo(prAdapter); -#if CFG_CHIP_RESET_SUPPORT - glSendResetRequest(); -#endif - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - ASSERT((u4IntrBits & (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)) - != (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)); - - if(u4IntrBits & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - } - - if(u4IntrBits & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - - // Indicate Service Thread for TX - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } -#endif - - DBGLOG(REQ, WARN, ("u4IntrBits: 0x%x \n", u4IntrBits)); - - return; -} /* end of nicProcessSoftwareInterrupt() */ - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_WR(prAdapter, MCR_H2DSM0R, u4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_WR(prAdapter, MCR_H2DSM1R, u4Data); - } else { - ASSERT(0); - } -} - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_RD(prAdapter, MCR_D2HRM0R, pu4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_RD(prAdapter, MCR_D2HRM1R, pu4Data); - } else { - ASSERT(0); - } -} - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ) -{ - /* NOTE: - * SW interrup in HW bit 16 is mapping to SW bit 0 (shift 16bit in HW transparancy) - * SW interrupt valid from b0~b15 - */ - ASSERT((u4SwIntrBitmap & BITS(0, 15)) == 0); -// DBGLOG(INIT, TRACE, ("u4SwIntrBitmap: 0x%08x\n", u4SwIntrBitmap)); - - HAL_MCR_WR(prAdapter, MCR_WSICR, u4SwIntrBitmap); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rPendingCmdQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_CMD_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if(prCmdInfo->ucCmdSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - - prCmdInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - return prCmdInfo; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rTxCtrl.rTxMgmtTxingQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_MSDU_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if(prMsduInfo->ucTxSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - return prMsduInfo; -} - -P_MSDU_INFO_T -nicGetPendingStaMMPDU ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ) -{ - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_QUE_T prTxingQue = (P_QUE_T)NULL; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - do { - if (prAdapter == NULL) { - - ASSERT(FALSE); - break; - } - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if ((prMsduInfo->ucStaRecIndex == ucStaRecIdx) && (prMsduInfo->pfTxDoneHandler != NULL)) { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfo, - prMsduInfoListHead); - prMsduInfoListHead = prMsduInfo; - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - - } while (FALSE); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - - return prMsduInfoListHead; -} /* nicGetPendingStaMMPDU */ - - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfoListTail = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if((ENUM_NETWORK_TYPE_INDEX_T)(prMsduInfo->ucNetworkType) == eNetworkType) { - if(prMsduInfoListHead == NULL) { - prMsduInfoListHead = prMsduInfoListTail = prMsduInfo; - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, prMsduInfo); - prMsduInfoListTail = prMsduInfo; - } - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - /* free */ - if(prMsduInfoListHead) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - } - - return; - -} /* end of nicFreePendingTxMsduInfoByNetwork() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a CMD sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - prAdapter->ucCmdSeqNum++; - ucRetval = prAdapter->ucCmdSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - return ucRetval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a TX sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - prAdapter->ucTxSeqNum++; - ucRetval = prAdapter->ucTxSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - return ucRetval; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to handle -* media state change event -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ) -{ - P_GLUE_INFO_T prGlueInfo; - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - switch(eNetworkType) { - case NETWORK_TYPE_AIS_INDEX: - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - - /* reset buffered link quality information */ - prAdapter->fgIsLinkQualityValid = FALSE; - prAdapter->fgIsLinkRateValid = FALSE; - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - prAdapter->rWlanInfo.rCurrBssId.eOpMode - = (ENUM_PARAM_OP_MODE_T) prConnectionStatus->ucInfraMode; - - // always indicate to OS according to MSDN (re-association/roaming) - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - else { - /* connected -> connected : roaming ? */ - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_ROAM_OUT_FIND_BEST, - NULL, - 0); - } - } - break; - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - break; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - break; -#endif - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} /* nicMediaStateChange */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4ChannelNum -* -* @retval - Frequency in unit of KHz, 0 for invalid channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicChannelNum2Freq ( - UINT_32 u4ChannelNum - ) -{ - UINT_32 u4ChannelInMHz; - - if(u4ChannelNum >= 1 && u4ChannelNum <= 13) { - u4ChannelInMHz = 2412 + (u4ChannelNum - 1) * 5; - } - else if(u4ChannelNum == 14) { - u4ChannelInMHz = 2484; - } - else if(u4ChannelNum == 133) { - u4ChannelInMHz = 3665; // 802.11y - } - else if(u4ChannelNum == 137) { - u4ChannelInMHz = 3685; // 802.11y - } - else if(u4ChannelNum >= 34 && u4ChannelNum <= 165) { - u4ChannelInMHz = 5000 + u4ChannelNum * 5; - } - else if(u4ChannelNum >= 183 && u4ChannelNum <= 196) { - u4ChannelInMHz = 4000 + u4ChannelNum * 5; - } - else { - u4ChannelInMHz = 0; - } - - return 1000 * u4ChannelInMHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4FreqInKHz -* -* @retval - Frequency Number, 0 for invalid freqency -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicFreq2ChannelNum ( - UINT_32 u4FreqInKHz - ) -{ - switch(u4FreqInKHz) { - case 2412000: - return 1; - case 2417000: - return 2; - case 2422000: - return 3; - case 2427000: - return 4; - case 2432000: - return 5; - case 2437000: - return 6; - case 2442000: - return 7; - case 2447000: - return 8; - case 2452000: - return 9; - case 2457000: - return 10; - case 2462000: - return 11; - case 2467000: - return 12; - case 2472000: - return 13; - case 2484000: - return 14; - case 3665000: - return 133; // 802.11y - case 3685000: - return 137; // 802.11y - case 4915000: - return 183; - case 4920000: - return 184; - case 4925000: - return 185; - case 4930000: - return 186; - case 4935000: - return 187; - case 4940000: - return 188; - case 4945000: - return 189; - case 4960000: - return 192; - case 4980000: - return 196; - case 5170000: - return 34; - case 5180000: - return 36; - case 5190000: - return 38; - case 5200000: - return 40; - case 5210000: - return 42; - case 5220000: - return 44; - case 5230000: - return 46; - case 5240000: - return 48; - case 5250000: - return 50; - case 5260000: - return 52; - case 5270000: - return 54; - case 5280000: - return 56; - case 5290000: - return 58; - case 5300000: - return 60; - case 5320000: - return 64; - case 5500000: - return 100; - case 5520000: - return 104; - case 5540000: - return 108; - case 5560000: - return 112; - case 5580000: - return 116; - case 5600000: - return 120; - case 5620000: - return 124; - case 5640000: - return 128; - case 5660000: - return 132; - case 5680000: - return 136; - case 5700000: - return 140; - case 5745000: - return 149; - case 5765000: - return 153; - case 5785000: - return 157; - case 5805000: - return 161; - case 5825000: - return 165; - default: - return 0; - } -} - - -/* firmware command wrapper */ -/* NETWORK (WIFISYS) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to activate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 1; - - if (((UINT_8) eNetworkTypeIdx) < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]; - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to deactivate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 0; - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - nicFreePendingTxMsduInfoByNetwork(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - - return u4Status; -} - - -/* BSS-INFO */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to sync bss info with firmware -* when a new BSS has been connected or disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - P_BSS_INFO_T prBssInfo; - CMD_SET_BSS_INFO rCmdSetBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - kalMemZero(&rCmdSetBssInfo, sizeof(CMD_SET_BSS_INFO)); - - rCmdSetBssInfo.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdSetBssInfo.ucConnectionState = (UINT_8)prBssInfo->eConnectionState; - rCmdSetBssInfo.ucCurrentOPMode = (UINT_8)prBssInfo->eCurrentOPMode; - rCmdSetBssInfo.ucSSIDLen = (UINT_8)prBssInfo->ucSSIDLen; - kalMemCopy(rCmdSetBssInfo.aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - COPY_MAC_ADDR(rCmdSetBssInfo.aucBSSID, prBssInfo->aucBSSID); - rCmdSetBssInfo.ucIsQBSS = (UINT_8)prBssInfo->fgIsQBSS; - rCmdSetBssInfo.ucNonHTBasicPhyType = prBssInfo->ucNonHTBasicPhyType; - rCmdSetBssInfo.u2OperationalRateSet = prBssInfo->u2OperationalRateSet; - rCmdSetBssInfo.u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - rCmdSetBssInfo.ucPhyTypeSet = prBssInfo->ucPhyTypeSet; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(rCmdSetBssInfo.aucOwnMac, prBssInfo->aucOwnMacAddr); - } -#endif - - rlmFillSyncCmdParam(&rCmdSetBssInfo.rBssRlmParam, prBssInfo); - - rCmdSetBssInfo.fgWapiMode = (UINT_8)FALSE; - - if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - rCmdSetBssInfo.ucAuthMode = (UINT_8)prConnSettings->eAuthMode; - rCmdSetBssInfo.ucEncStatus = (UINT_8)prConnSettings->eEncStatus; - rCmdSetBssInfo.fgWapiMode = (UINT_8)prConnSettings->fgWapiMode; - } -#if CFG_ENABLE_BT_OVER_WIFI - else if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } -#endif - else { -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } - else { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_OPEN; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION_DISABLED; - } - rCmdSetBssInfo.fgIsApMode = p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo); - } -#else - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; -#endif - } - - if(eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - - cnmAisInfraConnectNotify(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && - (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - (prBssInfo->prStaRecOfAP != NULL)) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - else if (eNetworkTypeIdx == NETWORK_TYPE_BOW_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_BOW && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - else { - rCmdSetBssInfo.ucStaRecIdxOfAP = STA_REC_INDEX_NOT_FOUND; - } - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BSS_INFO, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SET_BSS_INFO), - (PUINT_8)&rCmdSetBssInfo, - NULL, - 0); - - /* if BSS-INFO is going to be disconnected state, free all correlated station records */ - if(prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - /* clear client list */ - bssClearClientList(prAdapter, prBssInfo); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - } - - return u4Status; -} - - -/* BSS-INFO Indication (PM) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been created. (for AdHoc / P2P-GO) -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CREATED rCmdIndicatePmBssCreated; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssCreated.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssCreated.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssCreated.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssCreated.u2AtimWindow = prBssInfo->u2ATIMWindow; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CREATED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CREATED), - (PUINT_8)&rCmdIndicatePmBssCreated, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been connected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CONNECTED rCmdIndicatePmBssConnected; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssConnected.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssConnected.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssConnected.u2AssocId = prBssInfo->u2AssocId; - rCmdIndicatePmBssConnected.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssConnected.u2AtimWindow = prBssInfo->u2ATIMWindow; - - rCmdIndicatePmBssConnected.ucBmpDeliveryAC = prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC; - rCmdIndicatePmBssConnected.ucBmpTriggerAC = prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC; - - //DBGPRINTF("nicPmIndicateBssConnected: ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x", - //rCmdIndicatePmBssConnected.ucBmpDeliveryAC, - //rCmdIndicatePmBssConnected.ucBmpTriggerAC); - - if ((eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX) -#if CFG_ENABLE_WIFI_DIRECT - || ((eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && (prAdapter->fgIsP2PRegistered)) -#endif - ) { - if(prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = (UINT_8)prBssInfo->prStaRecOfAP->fgIsUapsdSupported; - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; //@FIXME - } - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CONNECTED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CONNECTED), - (PUINT_8)&rCmdIndicatePmBssConnected, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_INDICATE_PM_BSS_ABORT rCmdIndicatePmBssAbort; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdIndicatePmBssAbort.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_ABORT), - (PUINT_8)&rCmdIndicatePmBssAbort, - NULL, - 0); -} - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ) -{ - DEBUGFUNC("nicConfigPowerSaveProfile"); - DBGLOG(INIT, TRACE, ("eNetTypeIndex:%d, ePwrMode:%d, fgEnCmdEvent:%d\n", - eNetTypeIndex, ePwrMode, fgEnCmdEvent)); - - ASSERT(prAdapter); - - if (eNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - ASSERT(0); - return WLAN_STATUS_NOT_SUPPORTED; - } - -// prAdapter->rWlanInfo.ePowerSaveMode.ucNetTypeIndex = eNetTypeIndex; -// prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile = (UINT_8)ePwrMode; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucNetTypeIndex = eNetTypeIndex; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucPsProfile = (UINT_8)ePwrMode; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_POWER_SAVE_MODE, - TRUE, - FALSE, - TRUE, - (fgEnCmdEvent ? nicCmdEventSetCommon : NULL), - (fgEnCmdEvent ? nicOidCmdTimeoutCommon : NULL), - sizeof(CMD_PS_PROFILE_T), - (PUINT_8)&(prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex]), - NULL, - sizeof(PARAM_POWER_MODE) - ); - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate firmware domain -* for beacon generation parameters -* -* @param prAdapter Pointer of ADAPTER_T -* eIeUpdMethod, Update Method -* eNetTypeIndex Index of Network -* u2Capability Capability -* aucIe Pointer to buffer of IEs -* u2IELen Length of IEs -* -* @retval - WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* WLAN_STATUS_PENDING -* WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ) -{ - P_CMD_BEACON_TEMPLATE_UPDATE prCmdBcnUpdate; - UINT_16 u2CmdBufLen = 0; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanUpdateBeaconIETemplate"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - if (u2IELen > MAX_IE_LENGTH) { - return WLAN_STATUS_INVALID_DATA; - } - - if (eIeUpdMethod == IE_UPD_METHOD_UPDATE_RANDOM - || eIeUpdMethod == IE_UPD_METHOD_UPDATE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, aucIE) + u2IELen; - } - else if (eIeUpdMethod == IE_UPD_METHOD_DELETE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, u2IELen); - } - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - // prepare command info - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u2CmdBufLen)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = eNetTypeIndex; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u2CmdBufLen); - prCmdInfo->pfCmdDoneHandler = NULL; //@FIXME - prCmdInfo->pfCmdTimeoutHandler = NULL; //@FIXME - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_UPDATE_BEACON_CONTENT; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u2CmdBufLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdBcnUpdate = (P_CMD_BEACON_TEMPLATE_UPDATE)(prWifiCmd->aucBuffer); - - // fill beacon updating command - prCmdBcnUpdate->ucUpdateMethod = (UINT_8) eIeUpdMethod; - prCmdBcnUpdate->ucNetTypeIndex = (UINT_8) eNetTypeIndex; - prCmdBcnUpdate->u2Capability = u2Capability; - prCmdBcnUpdate->u2IELen = u2IELen; - if(u2IELen > 0 ) { - kalMemCopy(prCmdBcnUpdate->aucIE, aucIe, u2IELen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to initialization PHY related -* varaibles -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prConnSettings->eDesiredPhyConfig >= PHY_CONFIG_NUM) { - ASSERT(0); - return; - } - - prAdapter->rWifiVar.ucAvailablePhyTypeSet = - aucPhyCfg2PhyTypeSet[prConnSettings->eDesiredPhyConfig]; - - if (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_BIT_ERP) { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_ERP_INDEX; - } - /* NOTE(Kevin): Because we don't have N only mode, TBD */ - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_HR_DSSS_INDEX; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_UPDATE_WMM_PARMS_T rCmdUpdateWmmParms; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - DBGLOG(QM, EVENT, ("sizeof(AC_QUE_PARMS_T): %d \n", sizeof(AC_QUE_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(CMD_UPDATE_WMM_PARMS): %d \n", sizeof(CMD_UPDATE_WMM_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(WIFI_CMD_T): %d \n", sizeof(WIFI_CMD_T))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - rCmdUpdateWmmParms.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - kalMemCopy(&rCmdUpdateWmmParms.arACQueParms[0], &prBssInfo->arACQueParms[0], - (sizeof(AC_QUE_PARMS_T)*AC_NUM)); - - rCmdUpdateWmmParms.fgIsQBSS = prBssInfo->fgIsQBSS; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_UPDATE_WMM_PARMS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_UPDATE_WMM_PARMS_T), - (PUINT_8)&rCmdUpdateWmmParms, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to set auto tx power parameter -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of Auto TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ) -{ - DEBUGFUNC("nicSetAutoTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_AUTOPWR_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_AUTO_POWER_PARAM_T), - (PUINT_8)prAutoPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPowerControl( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update power offset around 5GHz band -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of 5GHz power offset parameter -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ) -{ - DEBUGFUNC("nicUpdate5GOffset"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_5G_PWR_OFFSET, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_5G_PWR_OFFSET_T), - (PUINT_8)pr5GPwrOffset, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update DPD calibration result -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of parameter for DPD calibration result -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ) -{ - DEBUGFUNC("nicUpdateDPD"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PWR_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PWR_PARAM_T), - (PUINT_8)prDpdCalResult, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function starts system service such as timer and -* memory pools -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - // <1> Initialize MGMT Memory pool and STA_REC - cnmMemInit(prAdapter); - cnmStaRecInit(prAdapter); - cmdBufInitialize(prAdapter); - - // <2> Mailbox Initialization - mboxInitialize(prAdapter); - - // <3> Timer Initialization - cnmTimerInitialize(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function reset some specific system service, -* such as STA-REC -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Timer Destruction */ - cnmTimerDestroy(prAdapter); - - /* Mailbox Destruction */ - mboxDestroy(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - ASSERT(prAdapter); - - /* CNM Module - initialization */ - cnmInit(prAdapter); - - /* RLM Module - initialization */ - rlmFsmEventInit(prAdapter); - - /* SCN Module - initialization */ - scnInit(prAdapter); - - /* AIS Module - intiailization */ - aisInitializeConnectionSettings(prAdapter, prRegInfo); - aisFsmInit(prAdapter); - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - intiailization */ - roamingFsmInit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - -#if CFG_SUPPORT_SWCR - swCrDebugInit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SUPPORT_SWCR - swCrDebugUninit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - unintiailization */ - roamingFsmUninit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - /* AIS Module - unintiailization */ - aisFsmUninit(prAdapter); - - /* SCN Module - unintiailization */ - scnUninit(prAdapter); - - /* RLM Module - uninitialization */ - rlmFsmEventUninit(prAdapter); - - /* CNM Module - uninitialization */ - cnmUninit(prAdapter); - - return; -} - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to enable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_ENABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to disable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_DISABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param rMacAddr BSSID -* @param prSsid Pointer to SSID -* @param u4Privacy Privacy settings (0: Open / 1: WEP/WPA/WPA2 enabled) -* @param rRssi Received Strength (-10 ~ -200 dBm) -* @param eNetworkType Network Type (a/b/g) -* @param prConfiguration Network Parameter -* @param eOpMode Infra/Ad-Hoc -* @param rSupportedRates Supported basic rates -* @param u2IELength IE Length -* @param pucIEBuf Pointer to Information Elements(IEs) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ) -{ - BOOLEAN bReplace; - UINT_32 i; - UINT_32 u4IdxWeakest = 0; - PARAM_RSSI rWeakestRssi; - UINT_32 u4BufferSize; - - ASSERT(prAdapter); - - rWeakestRssi = (PARAM_RSSI)INT_MAX; - u4BufferSize = sizeof(prAdapter->rWlanInfo.aucScanIEBuf) / sizeof(prAdapter->rWlanInfo.aucScanIEBuf[0]); - - bReplace = FALSE; - - // decide to replace or add - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - // find weakest entry && not connected one - if(UNEQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, prAdapter->rWlanInfo.rCurrBssId.arMacAddress) - && prAdapter->rWlanInfo.arScanResult[i].rRssi < rWeakestRssi) { - u4IdxWeakest = i; - rWeakestRssi = prAdapter->rWlanInfo.arScanResult[i].rRssi; - } - - if(prAdapter->rWlanInfo.arScanResult[i].eOpMode == eOpMode && - EQUAL_MAC_ADDR(&(prAdapter->rWlanInfo.arScanResult[i].arMacAddress), rMacAddr) && - (EQUAL_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen) - || prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen == 0)) { - // replace entry - bReplace = TRUE; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - break; - } - } - - if (bReplace == FALSE) { - if (prAdapter->rWlanInfo.u4ScanResultNum < (CFG_MAX_NUM_BSS_LIST - 1)) { - i = prAdapter->rWlanInfo.u4ScanResultNum; - - // zero - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - prAdapter->rWlanInfo.u4ScanResultNum++; - } - else if(rWeakestRssi != (PARAM_RSSI)INT_MAX) { - // replace weakest one - i = u4IdxWeakest; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - if(u2IELength > 0) { - // IE - allocate buffer and update pointer - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to free IE buffer for dedicated scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4Idx Index of Scan Result -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ) -{ - UINT_32 i; - PUINT_8 pucPivot, pucMovePivot; - UINT_32 u4MoveSize, u4FreeSize, u4ReserveSize; - - ASSERT(prAdapter); - ASSERT(u4Idx < CFG_MAX_NUM_BSS_LIST); - - if(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength == 0 - || prAdapter->rWlanInfo.apucScanResultIEs[u4Idx] == NULL) { - return; - } - - u4FreeSize = ALIGN_4(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength); - - pucPivot = prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]; - pucMovePivot = (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]) + u4FreeSize); - - u4ReserveSize = ((UINT_32)pucPivot) - (UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])); - u4MoveSize = prAdapter->rWlanInfo.u4ScanIEBufferUsage - u4ReserveSize - u4FreeSize; - - // 1. rest of buffer to move forward - kalMemCopy(pucPivot, pucMovePivot, u4MoveSize); - - // 1.1 modify pointers - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(i != u4Idx) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] >= pucMovePivot) { - prAdapter->rWlanInfo.apucScanResultIEs[i] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[i]) - u4FreeSize); - } - } - } - - // 1.2 reset the freed one - prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - - // 2. reduce IE buffer usage - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4FreeSize; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to hack parameters for WLAN TABLE for -* fixed rate settings -* -* @param prAdapter Pointer to the Adapter structure. -* @param eRateSetting -* @param pu2DesiredNonHTRateSet, -* @param pu2BSSBasicRateSet, -* @param pucMcsSet -* @param pucSupMcs32 -* @param pu2HtCapInfo -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 pu2HtCapInfo - ) -{ - ASSERT(prAdapter); - ASSERT(eRateSetting > FIXED_RATE_NONE && eRateSetting < FIXED_RATE_NUM); - - switch(prAdapter->rWifiVar.eRateSetting) { - case FIXED_RATE_1M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_1M; - *pu2BSSBasicRateSet = RATE_SET_BIT_1M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_2M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_2M; - *pu2BSSBasicRateSet = RATE_SET_BIT_2M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_5_5M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_5_5M; - *pu2BSSBasicRateSet = RATE_SET_BIT_5_5M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_11M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_11M; - *pu2BSSBasicRateSet = RATE_SET_BIT_11M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_6M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_6M; - *pu2BSSBasicRateSet = RATE_SET_BIT_6M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_9M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_9M; - *pu2BSSBasicRateSet = RATE_SET_BIT_9M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_12M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_12M; - *pu2BSSBasicRateSet = RATE_SET_BIT_12M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_18M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_18M; - *pu2BSSBasicRateSet = RATE_SET_BIT_18M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_24M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_24M; - *pu2BSSBasicRateSet = RATE_SET_BIT_24M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_36M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_36M; - *pu2BSSBasicRateSet = RATE_SET_BIT_36M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_48M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_48M; - *pu2BSSBasicRateSet = RATE_SET_BIT_48M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_54M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_54M; - *pu2BSSBasicRateSet = RATE_SET_BIT_54M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_MCS0_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS1_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS2_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS3_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS4_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS5_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS6_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS7_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS0_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS1_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS2_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS3_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS4_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS5_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS6_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS7_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS0_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS1_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS2_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS3_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS4_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS5_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS6_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS7_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS32_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS0_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS1_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS2_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS3_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS4_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS5_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS6_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS7_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS32_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to write the register -* -* @param u4Address Register address -* u4Value the value to be written -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ) -{ - CMD_ACCESS_REG rCmdAccessReg; - - rCmdAccessReg.u4Address = u4Address; - rCmdAccessReg.u4Data = u4Value; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - NULL, - 0 - ); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to modify the auto rate parameters -* -* @param u4ArSysParam0 see description below -* u4ArSysParam1 -* u4ArSysParam2 -* u4ArSysParam3 -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* ArSysParam0[0:3] -> auto rate version (0:disable 1:version1 2:version2) -* ArSysParam0[4:5]-> auto bw version (0:disable 1:version1 2:version2) -* ArSysParam0[6:7]-> auto gi version (0:disable 1:version1 2:version2) -* ArSysParam0[8:15]-> HT rate clear mask -* ArSysParam0[16:31]-> Legacy rate clear mask -* ArSysParam1[0:7]-> Auto Rate check weighting window -* ArSysParam1[8:15]-> Auto Rate v1 Force Rate down -* ArSysParam1[16:23]-> Auto Rate v1 PerH -* ArSysParam1[24:31]-> Auto Rate v1 PerL -* -* Examples -* ArSysParam0 = 1, -* Enable auto rate version 1 -* -* ArSysParam0 = 983041, -* Enable auto rate version 1 -* Remove CCK 1M, 2M, 5.5M, 11M -* -* ArSysParam0 = 786433 -* Enable auto rate version 1 -* Remove CCK 5.5M 11M -*/ -/*----------------------------------------------------------------------------*/ - - -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ) -{ - UINT_8 ucArVer,ucAbwVer,ucAgiVer; - UINT_16 u2HtClrMask; - UINT_16 u2LegacyClrMask; - UINT_8 ucArCheckWindow; - UINT_8 ucArPerL; - UINT_8 ucArPerH; - UINT_8 ucArPerForceRateDownPer; - - ucArVer = (UINT_8)(u4ArSysParam0 & BITS(0,3)); - ucAbwVer = (UINT_8)((u4ArSysParam0 & BITS(4,5)) >>4); - ucAgiVer = (UINT_8)((u4ArSysParam0 & BITS(6,7)) >>6); - u2HtClrMask = (UINT_16) ((u4ArSysParam0 & BITS(8,15)) >> 8); - u2LegacyClrMask = (UINT_16) ((u4ArSysParam0 & BITS(16,31)) >> 16); - -#if 0 - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) ((u4ArSysParam1 & BITS(8,15)>>8)); - ucArPerH = (UINT_8) ((u4ArSysParam1 & BITS(16,23)) >>16); - ucArPerL = (UINT_8) ((u4ArSysParam1 & BITS(24,31)) >>24); -#endif - - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) (((u4ArSysParam1>>8) & BITS(0,7))); - ucArPerH = (UINT_8) (((u4ArSysParam1>>16) & BITS(0,7))); - ucArPerL = (UINT_8) (((u4ArSysParam1>>24) & BITS(0,7))); - - - DBGLOG(INIT, INFO, ("ArParam %u %u %u %u\n", u4ArSysParam0, u4ArSysParam1, u4ArSysParam2, u4ArSysParam3)); - DBGLOG(INIT, INFO, ("ArVer %u AbwVer %u AgiVer %u\n", ucArVer, ucAbwVer, ucAgiVer)); - DBGLOG(INIT, INFO, ("HtMask %x LegacyMask %x\n", u2HtClrMask, u2LegacyClrMask)); - DBGLOG(INIT, INFO, ("CheckWin %u RateDownPer %u PerH %u PerL %u\n", ucArCheckWindow, ucArPerForceRateDownPer, ucArPerH, ucArPerL)); - -#define SWCR_DATA_ADDR(MOD,ADDR) (0x90000000+(MOD<<8)+(ADDR)) -#define SWCR_DATA_CMD(CATE,WRITE,INDEX,OPT0,OPT1) ( (CATE<<24) | (WRITE<<23) | (INDEX<<16) | (OPT0 <<8) | OPT1 ) -#define SWCR_DATA0 0x0 -#define SWCR_DATA1 0x4 -#define SWCR_DATA2 0x8 -#define SWCR_DATA3 0xC -#define SWCR_DATA4 0x10 -#define SWCR_WRITE 1 -#define SWCR_READ 0 - - if(ucArVer > 0) { - /* dummy = WiFi.WriteMCR(&h90000104, &h00000001) */ - /* dummy = WiFi.WriteMCR(&h90000100, &h00850000)*/ - - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),1); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)); - } - else { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),0); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)) ; - } - - /* ucArVer 0: none 1:PER 2:Rcpi */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArVer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,7,0,0)); - - /* Candidate rate Ht mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2HtClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1c,0,0)); - - /* Candidate rate legacy mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2LegacyClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1d,0,0)); - -#if 0 - if(ucArCheckWindow!=0) { - /* TX DONE MCS INDEX CHECK STA RATE DOWN TH */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x14,0,0)); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0xc,0,0)); - } - - if(ucArPerForceRateDownPer !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerForceRateDownPer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x18,0,0)); - } - if(ucArPerH !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerH); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1,0,0)); - } - if(ucArPerL !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerL); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x2,0,0)); - } -#endif - - - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to enable roaming -* -* @param u4EnableRoaming -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* u4EnableRoaming -> Enable Romaing -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prConnSettings->fgIsEnableRoaming = ((u4EnableRoaming>0)?(TRUE):(FALSE)); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief dump firmware Assert message -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4MailBox0, u4MailBox1; - UINT_32 line = 0; - UINT_8 aucAssertFile[7]; - UINT_32 u4ChipId; - -#if CFG_SDIO_INTR_ENHANCE - u4MailBox0 = prAdapter->prSDIOCtrl->u4RcvMailbox0; - u4MailBox1 = prAdapter->prSDIOCtrl->u4RcvMailbox1; -#else - nicGetMailbox(prAdapter, 0, &u4MailBox0); - nicGetMailbox(prAdapter, 1, &u4MailBox1); -#endif - - line = u4MailBox0 & 0x0000FFFF; - - u4MailBox0 = ((u4MailBox0 >> 16) & 0x0000FFFF); - - kalMemCopy(&aucAssertFile[0], &u4MailBox0, 2); - kalMemCopy(&aucAssertFile[2], &u4MailBox1, 4); - - aucAssertFile[6] = '\0'; - -#if defined(MT6620) - u4ChipId = 6620; -#elif defined(MT5931) - u4ChipId = 5931; -#elif defined(MT6628) - u4ChipId = 6628; -#endif - - kalPrint("\n[MT%ld][wifi][Firmware] Assert at \"%s\" #%ld\n\n", - u4ChipId, - aucAssertFile, - line); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventLinkQuality); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* check is to prevent RSSI to be updated by incorrect initial RSSI from hardware */ - /* buffer statistics for further query */ - if(prAdapter->fgIsLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateRSSI(prAdapter, eNetTypeIdx, prEventLinkQuality->cRssi, prEventLinkQuality->cLinkQuality); - } - - if(prAdapter->fgIsLinkRateValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateLinkSpeed(prAdapter, eNetTypeIdx, prEventLinkQuality->u2LinkSpeed); - } - } - break; -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - if (prAdapter->fgIsP2pLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - P_EVENT_LINK_QUALITY_EX prEventLQEx = (P_EVENT_LINK_QUALITY_EX)prEventLinkQuality; - - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, prEventLQEx->cRssiP2P, prEventLQEx->cLinkQualityP2P); - } - break; -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update RSSI and Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - prAdapter->fgIsLinkQualityValid = TRUE; - prAdapter->rLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.cRssi = cRssi; - prAdapter->rLinkQuality.cLinkQuality = cLinkQuality; - - /* indicate to glue layer */ - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_AIS_INDEX, - prAdapter->rLinkQuality.cRssi, - prAdapter->rLinkQuality.cLinkQuality); - } - - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - prAdapter->fgIsP2pLinkQualityValid = TRUE; - prAdapter->rP2pLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rP2pLinkQuality.cRssi= cRssi; - prAdapter->rP2pLinkQuality.cLinkQuality= cLinkQuality; - - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_P2P_INDEX, - cRssi, - cLinkQuality); - break; -#endif -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* buffer statistics for further query */ - prAdapter->fgIsLinkRateValid = TRUE; - prAdapter->rLinkRateUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.u2LinkSpeed = u2LinkSpeed; - } - break; - - default: - break; - - } - - return; -} - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ) -{ - DEBUGFUNC("nicUpdateRddTestMode.\n"); - - ASSERT(prAdapter); - -// aisFsmScanRequest(prAdapter, NULL); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RDD_CH, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_RDD_CH_T), - (PUINT_8)prRddChParam, - NULL, - 0); -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_cmd_event.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_cmd_event.c deleted file mode 100755 index c9743946d88c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_cmd_event.c +++ /dev/null @@ -1,1651 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_cmd_event.c#1 $ -*/ - -/*! \file nic_cmd_event.c - \brief Callback functions for Command packets. - - Various Event packet handlers which will be setup in the callback function of - a command packet. -*/ - - - -/* -** $Log: nic_cmd_event.c $ - * - * 04 10 2012 yuche.tsai - * NULL - * Update address for wifi direct connection issue. - * - * 06 15 2011 cm.chang - * [WCXRP00000785] [MT6620 Wi-Fi][Driver][FW] P2P/BOW MAC address is XOR with AIS MAC address - * P2P/BOW mac address XOR with local bit instead of OR - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 24 2011 cp.wu - * [WCXRP00000493] [MT6620 Wi-Fi][Driver] Do not indicate redundant disconnection to host when entering into RF test mode - * only indicate DISCONNECTION to host when entering RF test if necessary (connected -> disconnected cases) - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 01 2010 cp.wu - * [WCXRP00000223] MT6620 Wi-Fi][Driver][FW] Adopt NVRAM parameters when enter/exit RF test mode - * reload NVRAM settings before entering RF test mode and leaving from RF test mode. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 15 2010 yuche.tsai - * NULL - * Start to test AT GO only when P2P state is not IDLE. - * - * 09 09 2010 yuche.tsai - * NULL - * Add AT GO Test mode after MAC address available. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 yuche.tsai - * NULL - * Add support for P2P Device Address query from FW. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 08 02 2010 cp.wu - * NULL - * reset FSMs before entering RF test mode. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change upon request: indicate as disconnected in driver domain when leaving from RF test mode - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not clear scanning list array after disassociation - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glude code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * limit RSSI return value to microsoft defined range. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * block until firmware finished RF test enter/leave then indicate completion to upper layer - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when entering RF test mode and leaving from RF test mode, wait for W_FUNC_RDY bit to be asserted forever until it is set or card is removed. - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * OID_802_11_RSSI, - * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * OID_802_11_STATISTICS, - * * * * * OID_802_11_DISASSOCIATE, - * * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:47:47 GMT mtk02752 -** only handle MCR read when accessing FW domain register -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 17:37:28 GMT mtk02752 -** * refine nicCmdEventQueryMcrRead -** + add TxStatus/RxStatus for RF test QueryInformation OIDs -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 22:05:45 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-01 23:02:57 GMT mtk02752 -** remove unnecessary spin locks -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-01 22:51:18 GMT mtk02752 -** maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-30 10:55:03 GMT mtk02752 -** modify for compatibility -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 14:46:32 GMT mtk02752 -** add another version of command-done handler upon new event structure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:33 GMT mtk01461 -** Add comment -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 19:32:42 GMT mtk01461 -** Add nicCmdEventSetCommon() for general set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:35 GMT mtk01461 -** Command Done Handler -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_ACCESS_REG prCmdAccessReg; - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdAccessReg = (P_CMD_ACCESS_REG)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prMcrRdInfo->u4McrOffset = prCmdAccessReg->u4Address; - prMcrRdInfo->u4McrData = prCmdAccessReg->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_SW_DBG_CTRL_T prCmdSwCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdSwCtrl = (P_CMD_SW_DBG_CTRL_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T) prCmdInfo->pvInformationBuffer; - prSwCtrlInfo->u4Id = prCmdSwCtrl->u4Id; - prSwCtrlInfo->u4Data = prCmdSwCtrl->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4InformationBufferLength, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_SUCCESS); - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return; -} - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4Count; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - u4Count = (prCmdInfo->u4SetInfoLen - OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress)) - / sizeof(IPV4_NETWORK_ADDRESS) ; - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress) + u4Count * - (OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP)), - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_TEST_STATUS prTestStatus, prQueryBuffer; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTestStatus = (P_EVENT_TEST_STATUS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prQueryBuffer = (P_EVENT_TEST_STATUS) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prQueryBuffer, prTestStatus, sizeof(EVENT_TEST_STATUS)); - - u4QueryInfoLen = sizeof(EVENT_TEST_STATUS); - - /* Update Query Infomation Length */ - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_RSSI rRssi, *prRssi; - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - rRssi = (PARAM_RSSI)prLinkQuality->cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - else { - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prRssi = (PARAM_RSSI *) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prRssi, &rRssi, sizeof(PARAM_RSSI)); - u4QueryInfoLen = sizeof(PARAM_RSSI); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is in response of OID_GEN_LINK_SPEED query request -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the pending command info -* @param pucEventBuf -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4LinkSpeed; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - pu4LinkSpeed = (PUINT_32)(prCmdInfo->pvInformationBuffer); - - if(prLinkQuality->u2LinkSpeed == 0) { - *pu4LinkSpeed = 10000; /* 10K * 100bps = 1Mbps */ - } - else { - *pu4LinkSpeed = prLinkQuality->u2LinkSpeed * 5000; - } - - u4QueryInfoLen = sizeof(UINT_32); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - u4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) prCmdInfo->pvInformationBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prEventStatistics->rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prEventStatistics->rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prEventStatistics->rFailedCount; - prStatistics->rRetryCount - = prEventStatistics->rRetryCount; - prStatistics->rMultipleRetryCount - = prEventStatistics->rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prEventStatistics->rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prEventStatistics->rRTSFailureCount; - prStatistics->rACKFailureCount - = prEventStatistics->rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prEventStatistics->rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prEventStatistics->rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prEventStatistics->rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prEventStatistics->rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // [driver-land] - prAdapter->fgTestMode = TRUE; - - // 0. always indicate disconnection - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - // 1. Remove pending TX - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. Reset driver-domain FSMs - nicUninitMGMT(prAdapter); - - nicResetSystemService(prAdapter); - nicInitMGMT(prAdapter, NULL); - - // 3. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 4. Block til firmware completed entering into RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else - kalMsleep(10); - } - - // 5. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 6. Reset TX Counter - nicTxResetResource(prAdapter); - - // 7. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 8. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - -#if CFG_SUPPORT_NVRAM - // 9. load manufacture data - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - return; -} - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // 1. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 2. Block til firmware completed leaving from RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else { - kalMsleep(10); - } - } - - // 3. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 4. Reset TX Counter - nicTxResetResource(prAdapter); - - // 5. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 6. set driver-land variable - prAdapter->fgTestMode = FALSE; - - // 7. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - /* 8. Indicate as disconnected */ - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - -#if CFG_SUPPORT_NVRAM - /* 9. load manufacture data */ - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - /* 10. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - return; -} - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(pucEventBuf); - - // copy to adapter - kalMemCopy(&(prAdapter->rMyMacAddr), &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - kalMemCopy(prCmdInfo->pvInformationBuffer, &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - u4QueryInfoLen = MAC_ADDR_LEN; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - //4 <3> Update new MAC address and all 3 networks - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, prAdapter->rMyMacAddr); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucDeviceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucDeviceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucInterfaceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucInterfaceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucOwnMacAddr, - prAdapter->rMyMacAddr); - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); -#endif - -#if CFG_TEST_WIFI_DIRECT_GO - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_IDLE) { - wlanEnableP2pFunction(prAdapter); - - wlanEnableATGO(prAdapter); - } -#endif - - kalUpdateMACAddress(prAdapter->prGlueInfo, prAdapter->rWifiVar.aucMacAddress); - - return; -} - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_MAC_MCAST_ADDR prEventMacMcastAddr; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventMacMcastAddr = (P_EVENT_MAC_MCAST_ADDR)(pucEventBuf); - - u4QueryInfoLen = prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN; - - // buffer length check - if (prCmdInfo->u4InformationBufferLength < u4QueryInfoLen) { - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_BUFFER_TOO_SHORT); - } - else { - kalMemCopy(prCmdInfo->pvInformationBuffer, - prEventMacMcastAddr->arAddress, - prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN); - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - } -} - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_ACCESS_EEPROM prEventAccessEeprom; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventAccessEeprom = (P_EVENT_ACCESS_EEPROM)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - prEepromRdInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prEepromRdInfo->ucEepromIndex = (UINT_8)(prEventAccessEeprom->u2Offset); - prEepromRdInfo->u2EepromData = prEventAccessEeprom->u2Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_MEDIA_STREAMING_INDICATION rParamMediaStreamIndication; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - rParamMediaStreamIndication.rStatus.eStatusType = - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE; - rParamMediaStreamIndication.eMediaStreamMode = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)&rParamMediaStreamIndication, - sizeof(PARAM_MEDIA_STREAMING_INDICATION)); -} - - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rReceivedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rReceivedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = 0; // @FIXME? - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME? - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) 0; //@FIXME - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rMultipleRetryCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rMultipleRetryCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command by OID/ioctl has been timeout -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a generic command timeout handler -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for entering RF test has -* failed sending due to timeout (highly possibly by firmware crash) -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - // 1. Remove pending TX frames - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. indiate for OID failure - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for memory dump has -* replied a event. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* @param pucEventBuf Pointer to event buffer -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_DUMP_MEM_T prEventDumpMem; - static UINT_8 aucPath[256]; - static UINT_32 u4CurTimeTick; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventDumpMem = (P_EVENT_DUMP_MEM_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(P_PARAM_CUSTOM_MEM_DUMP_STRUC_T); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T) prCmdInfo->pvInformationBuffer; - prMemDumpInfo->u4Address = prEventDumpMem->u4Address; - prMemDumpInfo->u4Length = prEventDumpMem->u4Length; - prMemDumpInfo->u4RemainLength = prEventDumpMem->u4RemainLength; - prMemDumpInfo->ucFragNum = prEventDumpMem->ucFragNum; - -#if 0 - do{ - UINT_32 i = 0; - printk("Rx dump address 0x%X, Length %d, FragNum %d, remain %d\n", - prEventDumpMem->u4Address, - prEventDumpMem->u4Length, - prEventDumpMem->ucFragNum, - prEventDumpMem->u4RemainLength); -#if 0 - for(i = 0; i < prEventDumpMem->u4Length; i++) { - printk("%02X ", prEventDumpMem->aucBuffer[i]); - if(i % 32 == 31) { - printk("\n"); - } - } -#endif - }while(FALSE); -#endif - - if(prEventDumpMem->ucFragNum == 1) { - /* Store memory dump into sdcard, - * path /sdcard/dump___.hex - */ - u4CurTimeTick = kalGetTimeTick(); - sprintf(aucPath, "/sdcard/dump_%ld_0x%08lX_%ld.hex", - u4CurTimeTick, - prEventDumpMem->u4Address, - prEventDumpMem->u4Length + prEventDumpMem->u4RemainLength); - kalWriteToFile(aucPath, FALSE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - else { - /* Append current memory dump to the hex file */ - kalWriteToFile(aucPath, TRUE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - - if(prEventDumpMem->u4RemainLength == 0 || - prEventDumpMem->u4Address == 0xFFFFFFFF) { - /* The request is finished or firmware response a error */ - /* Reply time tick to iwpriv */ - *((PUINT_32)prCmdInfo->pvInformationBuffer) = u4CurTimeTick; - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - else { - /* The memory dump request is not finished, Send next command*/ - wlanSendMemDumpCmd( - prAdapter, - prCmdInfo->pvInformationBuffer, - prCmdInfo->u4InformationBufferLength); - } - } - - return; - -} - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_pwr_mgt.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_pwr_mgt.c deleted file mode 100755 index c7f30fbe9e50..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_pwr_mgt.c +++ /dev/null @@ -1,801 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_pwr_mgt.c#1 $ -*/ - -/*! \file "nic_pwr_mgt.c" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - - - -/* -** $Log: nic_pwr_mgt.c $ - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 29 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * fix for compilation error when applied with FW_DOWNLOAD = 0 - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * refine for MT5931/MT6620 logic separation. - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * bugfix: firmware download procedure for ACPI state transition is not complete. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * check success or failure for setting fw-own - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 30 2010 cp.wu - * NULL - * reset ACPI power state before waking up MT6620 Wi-Fi firmware. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sleepy notify is only used for sleepy state, - * while wake-up state is automatically set when host needs to access device - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct hibernation problem. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * are now handled in glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct typo. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-13 21:59:15 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-09-09 17:26:36 GMT mtk01084 -** remove CMD52 access -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-18 14:50:29 GMT mtk01084 -** modify lines in nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:55:37 GMT mtk01084 -** modify nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:33:00 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:32 GMT mtk01084 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER ON procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ) -{ - UINT_32 u4RegValue; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == TRUE) { - return; - } - else { - if(nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - // pending interrupts - return; - } - } - - if (fgEnableGlobalInt) { - prAdapter->fgIsIntEnableWithLPOwnSet = TRUE; - } - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - if(u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - // if set firmware own not successful (possibly pending interrupts), - // indicate an own clear event - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - return; - } - - prAdapter->fgIsFwOwn = TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER OFF procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ) -{ -#define LP_OWN_BACK_TOTAL_DELAY_MS 8192 //exponential of 2 -#define LP_OWN_BACK_LOOP_DELAY_MS 1 //exponential of 2 -#define LP_OWN_BACK_CLR_OWN_ITERATION 256 //exponential of 2 - - BOOLEAN fgStatus = TRUE; - UINT_32 i, u4CurrTick, u4RegValue = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == FALSE) - return fgStatus; - - u4CurrTick = kalGetTimeTick(); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - - if (u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - prAdapter->fgIsFwOwn = FALSE; - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (kalGetTimeTick() - u4CurrTick) > LP_OWN_BACK_TOTAL_DELAY_MS) { - //ERRORLOG(("LP cannot be own back (for %ld ms)", kalGetTimeTick() - u4CurrTick)); - fgStatus = FALSE; - break; - } - else { - if((i & (LP_OWN_BACK_CLR_OWN_ITERATION - 1)) == 0) { - /* Software get LP ownership - per 256 iterations */ - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - } - - /* Delay for LP engine to complete its operation. */ - kalMsleep(LP_OWN_BACK_LOOP_DELAY_MS); - i++; - } - } - - return fgStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set ACPI power mode to D0. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4Value = 0, u4WHISR = 0; - UINT_8 aucTxCount[8]; - UINT_32 i; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwImgLength, u4FwLoadAddr, u4ImgSecSize; - PVOID prFwMappingHandle; - PVOID pvFwImageMapFile = NULL; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif - - DEBUGFUNC("nicpmSetAcpiPowerD0"); - - ASSERT(prAdapter); - - do { - /* 0. Reset variables in ADAPTER_T */ - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - -#if defined(MT6620) || defined(MT6628) - /* 1. Request Ownership to enter F/W download state */ - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - #if CFG_ENABLE_FW_DOWNLOAD - prFwMappingHandle = kalFirmwareImageMapping(prAdapter->prGlueInfo, &pvFwImageMapFile, &u4FwImgLength); - if(!prFwMappingHandle) { - DBGLOG(INIT, ERROR,("Fail to load FW image from file!\n")); - pvFwImageMapFile = NULL; - } - - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 3.1 disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 3.2 Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3.3 FW download here */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImgLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImgLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanImageSectionDownload failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - } - else { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - kalGetFwStartAddress(prAdapter->prGlueInfo)); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", kalGetFwLoadAddress(prAdapter->prGlueInfo))); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImgLength)); - - do { - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImgLength >> 6); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - #endif - #endif - - /* 5. check Wi-Fi FW asserts ready bit */ - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 6.1 reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 6.2 reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - - /* 6.3 Enable interrupt */ - nicEnableInterrupt(prAdapter); - - /* 6.4 Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6.5 indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, NULL); - - } while(FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - return FALSE; - } - else { - return TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is used to set ACPI power mode to D3. -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* 1. MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - /* 2. Disable Interrupt */ - nicDisableInterrupt(prAdapter); - - /* 3. emit CMD_NIC_POWER_CTRL command packet */ - wlanSendNicPowerCtrlCmd(prAdapter, 1); - - /* 4. Clear Interrupt Status */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 5. Remove pending TX */ - nicTxRelease(prAdapter); - - // 5.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 5.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - /* 6. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - - /* 7. Set variables */ - prAdapter->rAcpiState = ACPI_STATE_D3; - - return TRUE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_rx.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_rx.c deleted file mode 100755 index f1799ff7f4b6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_rx.c +++ /dev/null @@ -1,3529 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_rx.c#3 $ -*/ - -/*! \file nic_rx.c - \brief Functions that provide many rx-related functions - - This file includes the functions used to process RFB and dispatch RFBs to - the appropriate related rx functions for protocols. -*/ - - - -/* -** $Log: nic_rx.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 14 2012 cp.wu - * NULL - * remove another assertion by error message dump - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 08 26 2011 cp.wu - * [WCXRP00000958] [MT6620 Wi-Fi][Driver] Extend polling timeout from 25ms to 1sec due to RF calibration might took up to 600ms - * extend polling RX response timeout period from 25ms to 1000ms. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * correct comment. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * take use of QUE_MGT exported function to estimate currently RX buffer usage count. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support for GO. - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Remove Station Record after Aging timeout. - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add MLME deauthentication support for Hot-Spot mode. - * - * 02 09 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Adjust variable order. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update beacon for NoA - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 20 2010 wh.su - * NULL - * add a cmd to reset the p2p key - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed compilier error. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * release RX packet to packet pool when in RF test mode - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common buffer, store the IE of a P2P device in this common buffer. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 yuche.tsai - * NULL - * When enable WiFi Direct function, check each packet to tell which interface to indicate. - * - * 08 05 2010 yuche.tsai - * NULL - * Add P2P Device Discovery Function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * Add support API for RX public action frame. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 yuche.tsai - * - * Update Device Capability Bitmap & Group Capability Bitmap from 16 bits to 8 bits. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill ucStaRecIdx into SW_RFB_T. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync with MT6620 driver for scan result replacement policy - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 04 29 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * fixing the PMKID candicate indicate code. - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * nicRxProcessEvent packet doesn't access spin-lock directly from now on. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * do not need to release the spin lock due to it is done inside nicGetPendingCmdInfo() - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * 2) add KAPI for handling association info - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve Linux supplicant compliance - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * the frequency is used for adhoc connection only - * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct fgSetQuery/fgNeedResp check - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Updated API interfaces for qmHandleEventRxAddBa() and qmHandleEventRxDelBa() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * 4) nicRxWaitResponse() revised - * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * * OID_802_11_RSSI, - * * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * * OID_802_11_STATISTICS, - * * * * * * OID_802_11_DISASSOCIATE, - * * * * * * OID_802_11_POWER_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * 2) add 4 counter for recording aggregation statistics - * - * 12 23 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a precheck: if free sw rfb is not enough, do not invoke read transactionu1rwduu`wvpghlqg|fu+rp - * - * 12 22 2009 cp.wu - * [WPD00003809][Bug] Host driver will crash when processing reordered MSDUs - * The root cause is pointer accessing by mistake. After dequeued from reordering-buffer, handling logic should access returned pointer instead of pointer which has been passed in before. -** \main\maintrunk.MT6620WiFiDriver_Prj\58 2009-12-17 13:40:33 GMT mtk02752 -** always update prAdapter->rSDIOCtrl when enhanced response is read by RX -** \main\maintrunk.MT6620WiFiDriver_Prj\57 2009-12-16 18:01:38 GMT mtk02752 -** if interrupt enhanced response is fetched by RX enhanced response, RX needs to invoke interrupt handlers too -** \main\maintrunk.MT6620WiFiDriver_Prj\56 2009-12-16 14:16:52 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\55 2009-12-15 20:03:12 GMT mtk02752 -** ASSERT when RX FreeSwRfb is not enough -** \main\maintrunk.MT6620WiFiDriver_Prj\54 2009-12-15 17:01:29 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is enabled, after enhanced response is read, rx procedure should process 1) TX_DONE_INT 2) D2H INT as well -** \main\maintrunk.MT6620WiFiDriver_Prj\53 2009-12-14 20:45:28 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is set, TC counter must be updated each time RX enhance response is read -** -** \main\maintrunk.MT6620WiFiDriver_Prj\52 2009-12-14 11:34:16 GMT mtk02752 -** correct a trivial logic issue -** \main\maintrunk.MT6620WiFiDriver_Prj\51 2009-12-14 10:28:25 GMT mtk02752 -** add a protection to avoid out-of-boundary access -** \main\maintrunk.MT6620WiFiDriver_Prj\50 2009-12-10 16:55:18 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\49 2009-12-09 14:06:47 GMT MTK02468 -** Added parsing event packets with EVENT_ID_RX_ADDBA or EVENT_ID_RX_DELBA -** \main\maintrunk.MT6620WiFiDriver_Prj\48 2009-12-08 17:37:51 GMT mtk02752 -** handle EVENT_ID_TEST_STATUS as well -** \main\maintrunk.MT6620WiFiDriver_Prj\47 2009-12-04 17:59:11 GMT mtk02752 -** to pass free-build compilation check -** \main\maintrunk.MT6620WiFiDriver_Prj\46 2009-12-04 12:09:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\45 2009-12-04 11:53:37 GMT mtk02752 -** all API should be compilable under SD1_SD3_DATAPATH_INTEGRATION == 0 -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-03 16:19:48 GMT mtk01461 -** Fix the Connected Event -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-11-30 10:56:18 GMT mtk02752 -** 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-11-30 10:11:27 GMT mtk02752 -** implement replacement for bss scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-11-27 11:08:05 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-11-26 09:38:59 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-11-26 09:29:40 GMT mtk02752 -** enable packet forwarding path (for AP mode) -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-11-25 21:37:00 GMT mtk02752 -** sync. with EVENT_SCAN_RESULT_T change, and add an assert for checking event size -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-25 20:17:41 GMT mtk02752 -** fill HIF_TX_HEADER_T.u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-25 18:18:57 GMT mtk02752 -** buffer scan result to prGlueInfo->rWlanInfo.arScanResult directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-24 22:42:45 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event (not implemented yet) -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-24 20:51:41 GMT mtk02752 -** integrate with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-24 19:56:17 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T in new path -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-23 20:31:21 GMT mtk02752 -** payload to send into pfCmdDoneHandler() will not include WIFI_EVENT_T -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-23 17:51:34 GMT mtk02752 -** when event packet corresponding to some pendingOID is received, pendingOID should be cleared -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 14:46:54 GMT mtk02752 -** implement nicRxProcessEventPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-17 22:40:54 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-16 21:48:22 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-16 15:41:18 GMT mtk01084 -** modify the length to be read in emu mode -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-13 17:00:12 GMT mtk02752 -** add blank function for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-13 13:54:24 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 14:41:51 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-11 14:33:46 GMT mtk02752 -** add protection when there is no packet avilable -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 12:33:36 GMT mtk02752 -** add RX1 read path for aggregated/enhanced/normal packet read procedures -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-04 14:11:08 GMT mtk01084 -** modify lines in RX aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:23 GMT mtk01084 -** modify RX aggregation handling -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:56:12 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:34 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:20 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-02 13:59:08 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-21 23:39:05 GMT mtk01461 -** Fix the paste error of RX STATUS in OOB of HIF Loopback CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-20 12:25:32 GMT mtk01461 -** Fix process of Read Done, and add u4MaxEventBufferLen to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 21:13:18 GMT mtk01426 -** Fixed compiler error -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:05:29 GMT mtk01426 -** Fixed nicRxSDIOAggReceiveRFBs() ASSERT issue -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:38:43 GMT mtk01461 -** Fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode and refine nicRxSDIOAggeceiveRFBs() for RX Aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-22 09:12:17 GMT mtk01461 -** Fix nicRxProcessHIFLoopbackPacket(), the size of HIF CTRL LENTH field is 1 byte -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-14 15:51:26 GMT mtk01426 -** Update RX OOB Setting -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-03 14:58:58 GMT mtk01426 -** Fixed logical error -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:58:31 GMT mtk01461 -** Rename the HIF_PKT_TYPE_DATA -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:51:18 GMT mtk01461 -** Fix u4HeaderOffset in nicRxProcessHIFLoopbackPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:02:58 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE and CFG_HIF_LOOPBACK support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:20:59 GMT mtk01426 -** Add nicRxWaitResponse function -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:01 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#ifndef LINUX -#include -#else -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define RX_RESPONSE_TIMEOUT (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_MGMT_FRAME_HANDLING -static PROCESS_RX_MGT_FUNCTION apfnProcessRxMgtFrame[MAX_NUM_OF_FC_SUBTYPES] = { - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0000: Association request */ - #else - NULL, /* subtype 0000: Association request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0001: Association response */ - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0010: Reassociation request */ - #else - NULL, /* subtype 0010: Reassociation request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0011: Reassociation response */ - #if CFG_SUPPORT_ADHOC - bssProcessProbeRequest, /* subtype 0100: Probe request */ - #else - NULL, /* subtype 0100: Probe request */ - #endif /* CFG_SUPPORT_ADHOC */ - scanProcessBeaconAndProbeResp, /* subtype 0101: Probe response */ - NULL, /* subtype 0110: reserved */ - NULL, /* subtype 0111: reserved */ - scanProcessBeaconAndProbeResp, /* subtype 1000: Beacon */ - NULL, /* subtype 1001: ATIM */ - saaFsmRunEventRxDisassoc, /* subtype 1010: Disassociation */ - authCheckRxAuthFrameTransSeq, /* subtype 1011: Authentication */ - saaFsmRunEventRxDeauth, /* subtype 1100: Deauthentication */ - nicRxProcessActionFrame, /* subtype 1101: Action */ - NULL, /* subtype 1110: reserved */ - NULL /* subtype 1111: reserved */ -}; -#endif - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucMemHandle; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i; - - DEBUGFUNC("nicRxInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <0> Clear allocated memory. - kalMemZero((PVOID) prRxCtrl->pucRxCached, prRxCtrl->u4RxCachedSize); - - //4 <1> Initialize the RFB lists - QUEUE_INITIALIZE(&prRxCtrl->rFreeSwRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rReceivedRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rIndicatedRfbList); - - pucMemHandle = prRxCtrl->pucRxCached; - for (i = CFG_RX_MAX_PKT_NUM; i != 0; i--) { - prSwRfb = (P_SW_RFB_T)pucMemHandle; - - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - - pucMemHandle += ALIGN_4(sizeof(SW_RFB_T)); - } - - ASSERT(prRxCtrl->rFreeSwRfbList.u4NumElem == CFG_RX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prRxCtrl->pucRxCached) == prRxCtrl->u4RxCachedSize); - - //4 <2> Clear all RX counters - RX_RESET_ALL_CNTS(prRxCtrl); - -#if CFG_SDIO_RX_AGG - prRxCtrl->pucRxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); - #endif -#else - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); - #endif -#endif - -#if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum = 0; - prRxCtrl->u4TotalRxPacketNum = 0; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt = 0; - prRxCtrl->u4DequeuedCnt = 0; -#endif - - return; -} /* end of nicRxInitialize() */ - - -#if defined(MT5931) -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize HIF RX control registers explicitly -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - DEBUGFUNC("nicRxPostInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - -#if CFG_SDIO_RX_AGG - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); -#else - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); -#endif - -} /* end of nicRxPostInitialize() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - nicRxFlush(prAdapter); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - return; -} /* end of nicRxUninitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb specify the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4PktLen = 0; - UINT_32 u4MacHeaderLen; - UINT_32 u4HeaderOffset; - - DEBUGFUNC("nicRxFillRFB"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - u4PktLen= prHifRxHdr->u2PacketLen; - - u4HeaderOffset = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_OFFSET_MASK); - u4MacHeaderLen = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_LEN) - >> HIF_RX_HDR_HEADER_LEN_OFFSET; - - //DBGLOG(RX, TRACE, ("u4HeaderOffset = %d, u4MacHeaderLen = %d\n", - // u4HeaderOffset, u4MacHeaderLen)); - - prSwRfb->u2HeaderLen = (UINT_16)u4MacHeaderLen; - prSwRfb->pvHeader = (PUINT_8)prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset; - prSwRfb->u2PacketLen = (UINT_16)(u4PktLen - (HIF_RX_HDR_SIZE + u4HeaderOffset)); - - //DBGLOG(RX, TRACE, ("Dump Rx packet, u2PacketLen = %d\n", prSwRfb->u2PacketLen)); - //DBGLOG_MEM8(RX, TRACE, prSwRfb->pvHeader, prSwRfb->u2PacketLen); - -#if 0 - if (prHifRxHdr->ucReorder & HIF_RX_HDR_80211_HEADER_FORMAT){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_802_11_FORMAT; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_802_11_FORMAT\n")); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_DO_REORDER){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_DO_REORDERING; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_DO_REORDERING\n")); - - /* Get Seq. No and TID, Wlan Index info */ - if (prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_BAR_FRAME){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_BAR_FRAME; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_BAR_FRAME\n")); - } - - prSwRfb->u2SSN = prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_SEQ_NO_MASK; - prSwRfb->ucTid = (UINT_8)((prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_TID_MASK) - >> HIF_RX_HDR_TID_OFFSET); - DBGLOG(RX, TRACE, ("u2SSN = %d, ucTid = %d\n", - prSwRfb->u2SSN, prSwRfb->ucTid)); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_WDS){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_AMP_WDS; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_AMP_WDS\n")); - } -#endif -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill checksum status in RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* @param u4TcpUdpIpCksStatus specify the Checksum status -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus -) -{ - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prAdapter->u4CSUMFlags != CSUM_NOT_SUPPORTED){ - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv4) { // IPv4 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_IP) { //IP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_SUCCESS; - } - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv6) {//IPv6 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_SUCCESS; - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - } - } - -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process packet doesn't need to do buffer reordering -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - BOOL fgIsRetained = FALSE; - UINT_32 u4CurrentRxBufferCount; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - DEBUGFUNC("nicRxProcessPktWithoutReorder"); - //DBGLOG(RX, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - u4CurrentRxBufferCount = prRxCtrl->rFreeSwRfbList.u4NumElem; - /* QM USED = $A, AVAILABLE COUNT = $B, INDICATED TO OS = $C - * TOTAL = $A + $B + $C - * - * Case #1 (Retain) - * ------------------------------------------------------- - * $A + $B < THRESHOLD := $A + $B + $C < THRESHOLD + $C := $TOTAL - THRESHOLD < $C - * => $C used too much, retain - * - * Case #2 (Non-Retain) - * ------------------------------------------------------- - * $A + $B > THRESHOLD := $A + $B + $C > THRESHOLD + $C := $TOTAL - THRESHOLD > $C - * => still availble for $C to use - * - */ - fgIsRetained = (((u4CurrentRxBufferCount + - qmGetRxReorderQueuedBufferCount(prAdapter) + - prTxCtrl->i4PendingFwdFrameCount) < CFG_RX_RETAINED_PKT_THRESHOLD) ? - TRUE : FALSE); - - //DBGLOG(RX, INFO, ("fgIsRetained = %d\n", fgIsRetained)); - - if (kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - fgIsRetained, - prSwRfb->aeCSUM) != WLAN_STATUS_SUCCESS) { - DBGLOG(RX, ERROR, ("kalProcessRxPacket return value != WLAN_STATUS_SUCCESS\n")); - ASSERT(0); - - nicRxReturnRFB(prAdapter, prSwRfb); - return; - } - else { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec) { -#if CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX && - prAdapter->fgIsP2PRegistered == TRUE) { - GLUE_SET_PKT_FLAG_P2P(prSwRfb->pvPacket); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - GLUE_SET_PKT_FLAG_PAL(prSwRfb->pvPacket); - } -#endif - } - prRxCtrl->apvIndPacket[prRxCtrl->ucNumIndPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumIndPacket++; - } - - if (fgIsRetained) { - prRxCtrl->apvRetainedPacket[prRxCtrl->ucNumRetainedPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumRetainedPacket++; - /* TODO : error handling of nicRxSetupRFB */ - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - } - else{ - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process forwarding data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo, prRetMsduInfoList; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessForwardPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo && kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - prRxCtrl->rFreeSwRfbList.u4NumElem < CFG_RX_RETAINED_PKT_THRESHOLD ? TRUE : FALSE, - prSwRfb->aeCSUM) == WLAN_STATUS_SUCCESS) { - - prMsduInfo->eSrc = TX_PACKET_FORWARDING; - // pack into MSDU_INFO_T - nicTxFillMsduInfo(prAdapter, prMsduInfo, (P_NATIVE_PACKET)(prSwRfb->pvPacket)); - // Overwrite the ucNetworkType - prMsduInfo->ucNetworkType = HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr); - - // release RX buffer (to rIndicatedRfbList) - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - - // increase forward frame counter - GLUE_INC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - - // send into TX queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfoList = qmEnqueueTxPackets(prAdapter, prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prRetMsduInfoList != NULL) { // TX queue refuses queuing the packet - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfoList); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfoList); - } - /* indicate service thread for sending */ - if(prTxCtrl->i4PendingFwdFrameCount > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } - else { // no TX resource - nicRxReturnRFB(prAdapter, prSwRfb); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process broadcast data packet for both host and forwarding -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SW_RFB_T prSwRfbDuplicated; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - P_HIF_RX_HEADER_T prHifRxHdr; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessGOBroadcastPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - ASSERT(CFG_NUM_OF_QM_RX_PKT_NUM >= 16); - - if( prRxCtrl->rFreeSwRfbList.u4NumElem - >= (CFG_RX_MAX_PKT_NUM - (CFG_NUM_OF_QM_RX_PKT_NUM - 16 /* Reserved for others */) ) ) { - - /* 1. Duplicate SW_RFB_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfbDuplicated, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if(prSwRfbDuplicated){ - kalMemCopy(prSwRfbDuplicated->pucRecvBuff, - prSwRfb->pucRecvBuff, - ALIGN_4(prHifRxHdr->u2PacketLen + HIF_RX_HW_APPENDED_LEN)); - - prSwRfbDuplicated->ucPacketType = HIF_RX_PKT_TYPE_DATA; - prSwRfbDuplicated->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - nicRxFillRFB(prAdapter, prSwRfbDuplicated); - - /* 2. Modify eDst */ - prSwRfbDuplicated->eDst = RX_PKT_DESTINATION_FORWARD; - - /* 4. Forward */ - nicRxProcessForwardPkt(prAdapter, prSwRfbDuplicated); - } - } - else { - DBGLOG(RX, WARN, ("Stop to forward BMC packet due to less free Sw Rfb %u\n", prRxCtrl->rFreeSwRfbList.u4NumElem)); - } - - /* 3. Indicate to host */ - prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prRetSwRfb, prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("nicRxProcessDataPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prRxCtrl = &prAdapter->rRxCtrl; - - nicRxFillRFB(prAdapter, prSwRfb); - -#if 1 /* Check 1x Pkt */ - if (prSwRfb->u2PacketLen > 14) { - PUINT_8 pc = (PUINT_8)prSwRfb->pvHeader; - UINT_16 u2Etype = 0; - - u2Etype = (pc[ETH_TYPE_LEN_OFFSET] << 8) | (pc[ETH_TYPE_LEN_OFFSET + 1]); - -#if CFG_SUPPORT_WAPI - if (u2Etype == ETH_P_1X || u2Etype == ETH_WPI_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#else - if (u2Etype == ETH_P_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#endif - else if (u2Etype == ETH_P_PRE_1X) { - DBGLOG(RSN, INFO, ("Pre R1X len=%d\n", prSwRfb->u2PacketLen)); - } - } -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - { - UINT_32 u4TcpUdpIpCksStatus; - - u4TcpUdpIpCksStatus = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - nicRxFillChksumStatus(prAdapter, prSwRfb, u4TcpUdpIpCksStatus); - - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - prStaRec = cnmGetStaRecByIndex(prAdapter, prHifRxHdr->ucStaRecIdx); - if(secCheckClassError(prAdapter, prSwRfb, prStaRec) == TRUE && - prAdapter->fgTestMode == FALSE) { -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt++; -#endif - - if((prRetSwRfb = qmHandleRxPackets(prAdapter, prSwRfb)) != NULL) { - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prRetSwRfb); - - switch(prRetSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prRetSwRfb); - RX_INC_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - break; - - default: - break; - } -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prRetSwRfb = prNextSwRfb; - } while(prRetSwRfb); - } - } - else { - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF event packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - P_WIFI_EVENT_T prEvent; - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("nicRxProcessEventPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prEvent = (P_WIFI_EVENT_T) prSwRfb->pucRecvBuff; - prGlueInfo = prAdapter->prGlueInfo; - - // Event Handling - switch(prEvent->ucEID) { - case EVENT_ID_CMD_RESULT: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - P_EVENT_CMD_RESULT prCmdResult; - prCmdResult = (P_EVENT_CMD_RESULT) ((PUINT_8)prEvent + EVENT_HDR_SIZE); - - /* CMD_RESULT should be only in response to Set commands */ - ASSERT(prCmdInfo->fgSetQuery == FALSE || prCmdInfo->fgNeedResp == TRUE); - - if(prCmdResult->ucStatus == 0) { // success - if(prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid == TRUE) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - } - else if(prCmdResult->ucStatus == 1) { // reject - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_FAILURE); - } - else if(prCmdResult->ucStatus == 2) { // unknown CMD - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_NOT_SUPPORTED); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - -#if 0 - case EVENT_ID_CONNECTION_STATUS: - /* OBSELETE */ - { - P_EVENT_CONNECTION_STATUS prConnectionStatus; - prConnectionStatus = (P_EVENT_CONNECTION_STATUS) (prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_CONNECTION_STATUS = %d\n", prConnectionStatus->ucMediaStatus); - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - - switch(prConnectionStatus->ucInfraMode) { - case 0: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_IBSS; - break; - case 1: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_INFRA; - break; - case 2: - default: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_AUTO_SWITCH; - break; - } - // always indicate to OS according to MSDN (re-association/roaming) - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - } - break; - - case EVENT_ID_SCAN_RESULT: - /* OBSELETE */ - break; -#endif - - case EVENT_ID_RX_ADDBA: - /* The FW indicates that an RX BA agreement will be established */ - qmHandleEventRxAddBa(prAdapter, prEvent); - break; - - case EVENT_ID_RX_DELBA: - /* The FW indicates that an RX BA agreement has been deleted */ - qmHandleEventRxDelBa(prAdapter, prEvent); - break; - - case EVENT_ID_LINK_QUALITY: -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - if (prEvent->u2PacketLen == EVENT_HDR_SIZE + sizeof(EVENT_LINK_QUALITY_EX)) { - P_EVENT_LINK_QUALITY_EX prLqEx = (P_EVENT_LINK_QUALITY_EX)(prEvent->aucBuffer); - - if (prLqEx->ucIsLQ0Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - if (prLqEx->ucIsLQ1Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_P2P_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - } - else { - /* For old FW, P2P may invoke link quality query, and make driver flag becone TRUE. */ - DBGLOG(P2P, WARN, ("Old FW version, not support P2P RSSI query.\n")); - - /* Must not use NETWORK_TYPE_P2P_INDEX, cause the structure is mismatch. */ - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); - } -#else - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); -#endif - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - #ifndef LINUX - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_GREATER && - prAdapter->rWlanInfo.rRssiTriggerValue >= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - else if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_LESS && - prAdapter->rWlanInfo.rRssiTriggerValue <= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - #endif - - break; - - case EVENT_ID_MIC_ERR_INFO: - { - P_EVENT_MIC_ERR_INFO prMicError; - //P_PARAM_AUTH_EVENT_T prAuthEvent; - P_STA_RECORD_T prStaRec; - - DBGLOG(RSN, EVENT, ("EVENT_ID_MIC_ERR_INFO\n")); - - prMicError = (P_EVENT_MIC_ERR_INFO)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - ASSERT(prStaRec); - - if (prStaRec) { - rsnTkipHandleMICFailure(prAdapter, prStaRec, (BOOLEAN)prMicError->u4Flags); - } - else { - DBGLOG(RSN, INFO, ("No STA rec!!\n")); - } -#if 0 - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, - (PVOID)prAdapter->rWlanInfo.rCurrBssId.arMacAddress, /* whsu:Todo? */ - PARAM_MAC_ADDR_LEN); - - if (prMicError->u4Flags != 0) { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - } - else { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); -#endif - } - break; - - case EVENT_ID_ASSOC_INFO: - { - P_EVENT_ASSOC_INFO prAssocInfo; - prAssocInfo = (P_EVENT_ASSOC_INFO)(prEvent->aucBuffer); - - kalHandleAssocInfo(prAdapter->prGlueInfo, prAssocInfo); - } - break; - - case EVENT_ID_802_11_PMKID: - { - P_PARAM_AUTH_EVENT_T prAuthEvent; - PUINT_8 cp; - UINT_32 u4LenOfUsedBuffer; - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - - u4LenOfUsedBuffer = (UINT_32)(prEvent->u2PacketLen - 8); - - prAuthEvent->arRequest[0].u4Length = u4LenOfUsedBuffer; - - cp = (PUINT_8)&prAuthEvent->arRequest[0]; - - /* Status type: PMKID Candidatelist Event */ - kalMemCopy(cp, (P_EVENT_PMKID_CANDIDATE_LIST_T)(prEvent->aucBuffer), prEvent->u2PacketLen - 8); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + u4LenOfUsedBuffer); - } - break; - -#if 0 - case EVENT_ID_ACTIVATE_STA_REC_T: - { - P_EVENT_ACTIVATE_STA_REC_T prActivateStaRec; - prActivateStaRec = (P_EVENT_ACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_ACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prActivateStaRec->ucStaRecIdx, - MAC2STR(prActivateStaRec->aucMacAddr)); - - qmActivateStaRec(prAdapter, - (UINT_32)prActivateStaRec->ucStaRecIdx, - ((prActivateStaRec->fgIsQoS) ? TRUE: FALSE), - prActivateStaRec->ucNetworkTypeIndex, - ((prActivateStaRec->fgIsAP) ? TRUE: FALSE), - prActivateStaRec->aucMacAddr); - - } - break; - - case EVENT_ID_DEACTIVATE_STA_REC_T: - { - P_EVENT_DEACTIVATE_STA_REC_T prDeactivateStaRec; - prDeactivateStaRec = (P_EVENT_DEACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_DEACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prDeactivateStaRec->ucStaRecIdx); - - qmDeactivateStaRec(prAdapter, - prDeactivateStaRec->ucStaRecIdx); - } - break; -#endif - - case EVENT_ID_SCAN_DONE: - scnEventScanDone(prAdapter, (P_EVENT_SCAN_DONE)(prEvent->aucBuffer)); - break; - - case EVENT_ID_TX_DONE: - { - P_EVENT_TX_DONE_T prTxDone; - prTxDone = (P_EVENT_TX_DONE_T)(prEvent->aucBuffer); - - DBGLOG(INIT, TRACE,("EVENT_ID_TX_DONE PacketSeq:%u ucStatus: %u SN: %u\n", - prTxDone->ucPacketSeq, prTxDone->ucStatus, prTxDone->u2SequenceNumber)); - - /* call related TX Done Handler */ - prMsduInfo = nicGetPendingTxMsduInfo(prAdapter, prTxDone->ucPacketSeq); - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - DBGLOG(INIT, TRACE, ("EVENT_ID_TX_DONE u4TimeStamp = %x u2AirDelay = %x\n", - prTxDone->au4Reserved1, prTxDone->au4Reserved2)); - - wnmReportTimingMeas(prAdapter, prMsduInfo->ucStaRecIndex, - prTxDone->au4Reserved1, prTxDone->au4Reserved1 + prTxDone->au4Reserved2); -#endif - - if(prMsduInfo) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, (ENUM_TX_RESULT_CODE_T)(prTxDone->ucStatus)); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - } - break; - - case EVENT_ID_SLEEPY_NOTIFY: - { - P_EVENT_SLEEPY_NOTIFY prEventSleepyNotify; - prEventSleepyNotify = (P_EVENT_SLEEPY_NOTIFY)(prEvent->aucBuffer); - - //DBGLOG(RX, INFO, ("ucSleepyState = %d\n", prEventSleepyNotify->ucSleepyState)); - - prAdapter->fgWiFiInSleepyState = (BOOLEAN)(prEventSleepyNotify->ucSleepyState); - } - break; - case EVENT_ID_BT_OVER_WIFI: -#if CFG_ENABLE_BT_OVER_WIFI - { - UINT_8 aucTmp[sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)]; - P_EVENT_BT_OVER_WIFI prEventBtOverWifi; - P_AMPC_EVENT prBowEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - - prEventBtOverWifi = (P_EVENT_BT_OVER_WIFI)(prEvent->aucBuffer); - - // construct event header - prBowEvent = (P_AMPC_EVENT)aucTmp; - - if(prEventBtOverWifi->ucLinkStatus == 0) { - // Connection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prBowEvent->aucPayload); - prBowLinkConnected->rChannel.ucChannelNum = prEventBtOverWifi->ucSelectedChannel; - kalMemZero(prBowLinkConnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - else { - // Disconnection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prBowEvent->aucPayload); - prBowLinkDisconnected->ucReason = 0; //@FIXME - kalMemZero(prBowLinkDisconnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - } - break; -#endif - case EVENT_ID_STATISTICS: - /* buffer statistics for further query */ - prAdapter->fgIsStatValid = TRUE; - prAdapter->rStatUpdateTime = kalGetTimeTick(); - kalMemCopy(&prAdapter->rStatStruct, prEvent->aucBuffer, sizeof(EVENT_STATISTICS)); - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - - case EVENT_ID_CH_PRIVILEGE: - cnmChMngrHandleChEvent(prAdapter, prEvent); - break; - - case EVENT_ID_BSS_ABSENCE_PRESENCE: - qmHandleEventBssAbsencePresence(prAdapter, prEvent); - break; - - case EVENT_ID_STA_CHANGE_PS_MODE: - qmHandleEventStaChangePsMode(prAdapter, prEvent); - break; -#if CFG_ENABLE_WIFI_DIRECT - case EVENT_ID_STA_UPDATE_FREE_QUOTA: - qmHandleEventStaUpdateFreeQuota(prAdapter, prEvent); - break; -#endif - case EVENT_ID_BSS_BEACON_TIMEOUT: - DBGLOG(INIT, INFO,("EVENT_ID_BSS_BEACON_TIMEOUT\n")); - - if (prAdapter->fgDisBcnLostDetection == FALSE) { - P_EVENT_BSS_BEACON_TIMEOUT_T prEventBssBeaconTimeout; - prEventBssBeaconTimeout = (P_EVENT_BSS_BEACON_TIMEOUT_T)(prEvent->aucBuffer); - - if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - aisBssBeaconTimeout(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - - p2pFsmRunEventBeaconTimeout(prAdapter); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - } -#endif - else { - DBGLOG(RX, ERROR, ("EVENT_ID_BSS_BEACON_TIMEOUT: (ucNetTypeIdx = %d)\n", - prEventBssBeaconTimeout->ucNetTypeIndex)); - } - } - - break; - case EVENT_ID_UPDATE_NOA_PARAMS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam; - prEventUpdateNoaParam = (P_EVENT_UPDATE_NOA_PARAMS_T)(prEvent->aucBuffer); - - if (prEventUpdateNoaParam->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - p2pProcessEvent_UpdateNOAParam(prAdapter, - prEventUpdateNoaParam->ucNetTypeIndex, - prEventUpdateNoaParam); - } else { - ASSERT(0); - } - } -#else - ASSERT(0); -#endif - break; - - case EVENT_ID_STA_AGING_TIMEOUT: -#if CFG_ENABLE_WIFI_DIRECT - { - if (prAdapter->fgDisStaAgingTimeoutDetection == FALSE) { - P_EVENT_STA_AGING_TIMEOUT_T prEventStaAgingTimeout; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - prEventStaAgingTimeout = (P_EVENT_STA_AGING_TIMEOUT_T)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventStaAgingTimeout->ucStaRecIdx); - if (prStaRec == NULL) { - break; - } - - DBGLOG(INIT, INFO,("EVENT_ID_STA_AGING_TIMEOUT %u " MACSTR "\n", - prEventStaAgingTimeout->ucStaRecIdx, MAC2STR(prStaRec->aucMacAddr))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - /* Call False Auth */ - if (prAdapter->fgIsP2PRegistered) { - p2pFuncDisconnect(prAdapter, prStaRec, TRUE, REASON_CODE_DISASSOC_INACTIVITY); - } - - - } /* gDisStaAgingTimeoutDetection */ - - } -#endif - break; - - case EVENT_ID_AP_OBSS_STATUS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - rlmHandleObssStatusEventPkt(prAdapter, (P_EVENT_AP_OBSS_STATUS_T) prEvent->aucBuffer); - } -#endif - break; - - case EVENT_ID_ROAMING_STATUS: -#if CFG_SUPPORT_ROAMING - { - P_ROAMING_PARAM_T prParam; - - prParam = (P_ROAMING_PARAM_T)(prEvent->aucBuffer); - roamingFsmProcessEvent(prAdapter, prParam); - } -#endif /* CFG_SUPPORT_ROAMING */ - break; - case EVENT_ID_SEND_DEAUTH: -#if DBG - { - P_WLAN_MAC_HEADER_T prWlanMacHeader; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - DBGLOG(RX, INFO, ("nicRx: aucAddr1: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr1))); - DBGLOG(RX, INFO, ("nicRx: aucAddr2: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr2))); - } -#endif - /* receive packets without StaRec */ - prSwRfb->pvHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - NULL, - prSwRfb, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - DBGLOG(RX, INFO, ("Send Deauth Error\n")); - } - break; - -#if CFG_SUPPORT_RDD_TEST_MODE - case EVENT_ID_UPDATE_RDD_STATUS: - { - P_EVENT_RDD_STATUS_T prEventRddStatus; - - prEventRddStatus = (P_EVENT_RDD_STATUS_T) (prEvent->aucBuffer); - - prAdapter->ucRddStatus = prEventRddStatus->ucRddStatus; - } - - break; -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case EVENT_ID_UPDATE_BWCS_STATUS: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS Event: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS Event: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_BWCS_UPDATE, - (PVOID) prEventBwcsStatus, - sizeof(PTA_IPC_T)); - } - - break; - - case EVENT_ID_UPDATE_BCM_DEBUG: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM FW status: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM FW status: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - } - - break; -#endif - - case EVENT_ID_ACCESS_REG: - case EVENT_ID_NIC_CAPABILITY: - case EVENT_ID_BASIC_CONFIG: - case EVENT_ID_MAC_MCAST_ADDR: - case EVENT_ID_ACCESS_EEPROM: - case EVENT_ID_TEST_STATUS: - default: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicRxProcessMgmtPacket is used to dispatch management frames -* to corresponding modules -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - UINT_8 ucSubtype; -#if CFG_SUPPORT_802_11W - BOOL fgMfgDrop = FALSE; -#endif - ASSERT(prAdapter); - ASSERT(prSwRfb); - - nicRxFillRFB(prAdapter, prSwRfb); - - ucSubtype = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FC_SUBTYPE )>> OFFSET_OF_FC_SUBTYPE; - -#if CFG_RX_PKTS_DUMP - { - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_16 u2TxFrameCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - u2TxFrameCtrl = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FRAME_TYPE); - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_MANAGEMENT)) { - if (u2TxFrameCtrl == MAC_FRAME_BEACON || - u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - - DBGLOG(SW4, INFO, ("QM RX MGT: net %u sta idx %u wlan idx %u ssn %u ptype %u subtype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - prSwRfb->ucPacketType, - ucSubtype, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prSwRfb->pvHeader, prSwRfb->u2PacketLen); - } - } - } -#endif - - if(prAdapter->fgTestMode == FALSE) { -#if CFG_MGMT_FRAME_HANDLING -#if CFG_SUPPORT_802_11W - fgMfgDrop = rsnCheckRxMgmt(prAdapter, prSwRfb, ucSubtype); - if (fgMfgDrop) { - #if DBG - LOG_FUNC("QM RX MGT: Drop Unprotected Mgmt frame!!!\n"); - #endif - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - return; - } - else -#endif - if(apfnProcessRxMgtFrame[ucSubtype]) { - switch(apfnProcessRxMgtFrame[ucSubtype](prAdapter, prSwRfb)){ - case WLAN_STATUS_PENDING: - return; - case WLAN_STATUS_SUCCESS: - case WLAN_STATUS_FAILURE: - break; - - default: - DBGLOG(RX, WARN, ("Unexpected MMPDU(0x%02X) returned with abnormal status\n", ucSubtype)); - break; - } - } -#endif - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicProcessRFBs is used to process RFBs in the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prRxCtrl->ucNumIndPacket = 0; - prRxCtrl->ucNumRetainedPacket = 0; - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb){ - switch(prSwRfb->ucPacketType){ - case HIF_RX_PKT_TYPE_DATA: - nicRxProcessDataPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_EVENT: - nicRxProcessEventPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_TX_LOOPBACK: - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - - case HIF_RX_PKT_TYPE_MANAGEMENT: - nicRxProcessMgmtPacket(prAdapter, prSwRfb); - break; - - default: - RX_INC_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - } - } - else { - break; - } - }while(TRUE); - - if (prRxCtrl->ucNumIndPacket > 0) { - RX_ADD_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT, prRxCtrl->ucNumIndPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT, prRxCtrl->ucNumRetainedPacket); - - //DBGLOG(RX, INFO, ("%d packets indicated, Retained cnt = %d\n", - // prRxCtrl->ucNumIndPacket, prRxCtrl->ucNumRetainedPacket)); - #if CFG_NATIVE_802_11 - kalRxIndicatePkts(prAdapter->prGlueInfo, (UINT_32)prRxCtrl->ucNumIndPacket, (UINT_32)prRxCtrl->ucNumRetainedPacket); - #else - kalRxIndicatePkts(prAdapter->prGlueInfo, prRxCtrl->apvIndPacket, (UINT_32)prRxCtrl->ucNumIndPacket); - #endif - } - -} /* end of nicRxProcessRFBs() */ - - -#if !CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the rx data from data port and setup RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @retval WLAN_STATUS_SUCCESS: SUCCESS -* @retval WLAN_STATUS_FAILURE: FAILURE -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0, u4ReadBytes; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4RegValue; - UINT_32 rxNum; - - DEBUGFUNC("nicRxReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(pucBuf); - DBGLOG(RX, TRACE, ("pucBuf= 0x%x, prHifRxHdr= 0x%x\n", pucBuf, prHifRxHdr)); - - do { - /* Read the RFB DW length and packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4RegValue); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - return WLAN_STATUS_FAILURE; - } - - //20091021 move the line to get the HIF RX header (for RX0/1) - if(u4RegValue == 0) { - DBGLOG(RX, ERROR, ("No RX packet\n")); - return WLAN_STATUS_FAILURE; - } - - u4PktLen = u4RegValue & BITS(0, 15); - if(u4PktLen != 0) { - rxNum = 0; - } - else { - rxNum = 1; - u4PktLen = (u4RegValue & BITS(16, 31)) >> 16; - } - - DBGLOG(RX, TRACE, ("RX%d: u4PktLen = %d\n", rxNum, u4PktLen)); - - //4 <4> Read Entire RFB and packet, include HW appended DW (Checksum Status) - u4ReadBytes = ALIGN_4(u4PktLen) + 4; - HAL_READ_RX_PORT(prAdapter, rxNum, u4ReadBytes, pucBuf, CFG_RX_MAX_PKT_SIZE); - - //20091021 move the line to get the HIF RX header - //u4PktLen = (UINT_32)prHifRxHdr->u2PacketLen; - if (u4PktLen != (UINT_32)prHifRxHdr->u2PacketLen) { - DBGLOG(RX, ERROR, ("Read u4PktLen = %d, prHifRxHdr->u2PacketLen: %d\n", - u4PktLen, prHifRxHdr->u2PacketLen)); - #if DBG - dumpMemory8((PUINT_8)prHifRxHdr, (prHifRxHdr->u2PacketLen > 4096) ? 4096 : prHifRxHdr->u2PacketLen); - #endif - ASSERT(0); - } - /* u4PktLen is byte unit, not inlude HW appended DW */ - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - return WLAN_STATUS_FAILURE; - } - - DBGLOG(RX, TRACE, ("Dump RX buffer, length = 0x%x\n", u4ReadBytes)); - DBGLOG_MEM8(RX, TRACE, pucBuf, u4ReadBytes); - }while(FALSE); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4HwAppendDW; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxReceiveRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - - // need to consider - if (nicRxReadBuffer(prAdapter, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("halRxFillRFB failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - prHifRxHdr = prSwRfb->prHifRxHdr; - u4HwAppendDW = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - DBGLOG(RX, TRACE, ("u4HwAppendDW = 0x%x\n", u4HwAppendDW)); - DBGLOG(RX, TRACE, ("u2PacketLen = 0x%x\n", prHifRxHdr->u2PacketLen)); - } -// while (RX_STATUS_TEST_MORE_FLAG(u4HwAppendDW)); - while (FALSE); - - return; - -} /* end of nicReceiveRFBs() */ - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4DataPort Specify which port to read -* @param u2RxLength Specify to the the rx packet length in Byte. -* @param prSwRfb the RFB to receive rx data. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - BOOL fgResult = TRUE; - - DEBUGFUNC("nicRxEnhanceReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - ASSERT(pucBuf); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - //DBGLOG(RX, TRACE, ("u2RxLength = %d\n", u2RxLength)); - - do { - //4 <1> Read RFB frame from MCR_WRDR0, include HW appended DW - HAL_READ_RX_PORT(prAdapter, - u4DataPort, - ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN), - pucBuf, - CFG_RX_MAX_PKT_SIZE); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - break; - } - - u4PktLen = (UINT_32)(prHifRxHdr->u2PacketLen); - //DBGLOG(RX, TRACE, ("u4PktLen = %d\n", u4PktLen)); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - //4 <2> if the RFB dw size or packet size is zero - if (u4PktLen == 0) { - DBGLOG(RX, ERROR, ("Packet Length = %d\n", u4PktLen)); - ASSERT(0); - break; - } - - //4 <3> if the packet is too large or too small - if (u4PktLen > CFG_RX_MAX_PKT_SIZE) { - DBGLOG(RX, TRACE, ("Read RX Packet Lentgh Error (%d)\n", u4PktLen)); - ASSERT(0); - break; - } - - u4Status = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - DBGLOG_MEM8(RX, TRACE, pucBuf, ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN)); - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i, rxNum; - UINT_16 u2RxPktNum, u2RxLength = 0, u2Tmp = 0; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOReceiveRFBs"); - - ASSERT(prAdapter); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - for (rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len : prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len); - - if(u2RxPktNum == 0) { - continue; - } - - for (i = 0; i < u2RxPktNum; i++) { - if(rxNum == 0) { - HAL_READ_RX_LENGTH(prAdapter, &u2RxLength, &u2Tmp); - } - else if(rxNum == 1) { - HAL_READ_RX_LENGTH(prAdapter, &u2Tmp, &u2RxLength); - } - - if (!u2RxLength) { - break; - } - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - ASSERT(prSwRfb); - - if (nicRxEnhanceReadBuffer(prAdapter, rxNum, u2RxLength, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("nicRxEnhanceRxReadBuffer failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - //prSDIOCtrl->au4RxLength[i] = 0; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - } - } - - prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len = 0; - prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len = 0; - - return; -}/* end of nicRxSDIOReceiveRFBs() */ - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - - -#if CFG_SDIO_RX_AGG -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO with Rx aggregation enabled -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ENHANCE_MODE_DATA_STRUCT_T prEnhDataStr; - P_RX_CTRL_T prRxCtrl; - P_SDIO_CTRL_T prSDIOCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 u4RxLength; - UINT_32 i, rxNum; - UINT_32 u4RxAggCount = 0, u4RxAggLength = 0; - UINT_32 u4RxAvailAggLen, u4CurrAvailFreeRfbCnt; - PUINT_8 pucSrcAddr; - P_HIF_RX_HEADER_T prHifRxHdr; - BOOL fgResult = TRUE; - BOOLEAN fgIsRxEnhanceMode; - UINT_16 u2RxPktNum; -#if CFG_SDIO_RX_ENHANCE - UINT_32 u4MaxLoopCount = CFG_MAX_RX_ENHANCE_LOOP_COUNT; -#endif - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOAggReceiveRFBs"); - - ASSERT(prAdapter); - prEnhDataStr = prAdapter->prSDIOCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - prSDIOCtrl = prAdapter->prSDIOCtrl; - -#if CFG_SDIO_RX_ENHANCE - fgIsRxEnhanceMode = TRUE; -#else - fgIsRxEnhanceMode = FALSE; -#endif - - do { -#if CFG_SDIO_RX_ENHANCE - /* to limit maximum loop for RX */ - u4MaxLoopCount--; - if (u4MaxLoopCount == 0) { - break; - } -#endif - - if(prEnhDataStr->rRxInfo.u.u2NumValidRx0Len == 0 && - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len == 0) { - break; - } - - for(rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prEnhDataStr->rRxInfo.u.u2NumValidRx0Len : prEnhDataStr->rRxInfo.u.u2NumValidRx1Len); - //DBGLOG(RX, TRACE, ("RxPktNum %d in rxPort %d\n", u2RxPktNum, rxNum)); - - // if this assertion happened, it is most likely a F/W bug - ASSERT(u2RxPktNum <= 16); - - if (u2RxPktNum > 16) - continue; - - if(u2RxPktNum == 0) - continue; - - #if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum++; - prRxCtrl->u4TotalRxPacketNum += u2RxPktNum; - #endif - - u4CurrAvailFreeRfbCnt = prRxCtrl->rFreeSwRfbList.u4NumElem; - - // if SwRfb is not enough, abort reading this time - if(u4CurrAvailFreeRfbCnt < u2RxPktNum) { - #if CFG_HIF_RX_STARVATION_WARNING - DbgPrint("FreeRfb is not enough: %d available, need %d\n", u4CurrAvailFreeRfbCnt, u2RxPktNum); - DbgPrint("Queued Count: %d / Dequeud Count: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt); - #endif - continue; - } - -#if CFG_SDIO_RX_ENHANCE - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE - (sizeof(ENHANCE_MODE_DATA_STRUCT_T) + 4/* extra HW padding */); -#else - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE; -#endif - u4RxAggCount = 0; - - for (i = 0; i < u2RxPktNum ; i++) { - u4RxLength = (rxNum == 0 ? - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - if (!u4RxLength) { - ASSERT(0); - break; - } - - if (ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN) < u4RxAvailAggLen) { - if (u4RxAggCount < u4CurrAvailFreeRfbCnt) { - u4RxAvailAggLen -= ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN); - u4RxAggCount++; - } - else { - // no FreeSwRfb for rx packet - ASSERT(0); - break; - } - } - else { - // CFG_RX_COALESCING_BUFFER_SIZE is not large enough - ASSERT(0); - break; - } - } - - u4RxAggLength = (CFG_RX_COALESCING_BUFFER_SIZE - u4RxAvailAggLen); - //DBGLOG(RX, INFO, ("u4RxAggCount = %d, u4RxAggLength = %d\n", - // u4RxAggCount, u4RxAggLength)); - - HAL_READ_RX_PORT(prAdapter, - rxNum, - u4RxAggLength, - prRxCtrl->pucRxCoalescingBufPtr, - CFG_RX_COALESCING_BUFFER_SIZE); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Agg Packet Error\n")); - continue; - } - - pucSrcAddr = prRxCtrl->pucRxCoalescingBufPtr; - for (i = 0; i < u4RxAggCount; i++) { - UINT_16 u2PktLength; - - u2PktLength = (rxNum == 0 ? - prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - ASSERT(prSwRfb); - kalMemCopy(prSwRfb->pucRecvBuff, pucSrcAddr, - ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN)); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - pucSrcAddr += ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN); - //prEnhDataStr->au4RxLength[i] = 0; - } - -#if CFG_SDIO_RX_ENHANCE - kalMemCopy(prAdapter->prSDIOCtrl, (pucSrcAddr + 4), sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - /* do the same thing what nicSDIOReadIntStatus() does */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - /* dispatch to interrupt handler with RX bits masked */ - nicProcessIST_impl(prAdapter, prSDIOCtrl->u4WHISR & (~(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT))); -#endif - } - -#if !CFG_SDIO_RX_ENHANCE - prEnhDataStr->rRxInfo.u.u2NumValidRx0Len = 0; - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len = 0; -#endif - } - while ((prEnhDataStr->rRxInfo.u.u2NumValidRx0Len - || prEnhDataStr->rRxInfo.u.u2NumValidRx1Len) - && fgIsRxEnhanceMode); - - return; -} -#endif /* CFG_SDIO_RX_AGG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Setup a RFB and allocate the os packet to the RFB -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_RESOURCES -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - PVOID pvPacket; - PUINT_8 pucRecvBuff; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (!prSwRfb->pvPacket) { - kalMemZero(prSwRfb, sizeof(SW_RFB_T)); - pvPacket = kalPacketAlloc(prAdapter->prGlueInfo, CFG_RX_MAX_PKT_SIZE, - &pucRecvBuff); - if (pvPacket == NULL) { - return WLAN_STATUS_RESOURCES; - } - - prSwRfb->pvPacket = pvPacket; - prSwRfb->pucRecvBuff= (PVOID)pucRecvBuff; - } - else { - kalMemZero(((PUINT_8)prSwRfb + OFFSET_OF(SW_RFB_T, prHifRxHdr)), - (sizeof(SW_RFB_T)-OFFSET_OF(SW_RFB_T, prHifRxHdr))); - } - - prSwRfb->prHifRxHdr = (P_HIF_RX_HEADER_T)(prSwRfb->pucRecvBuff); - - return WLAN_STATUS_SUCCESS; - -} /* end of nicRxSetupRFB() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to put a RFB back onto the "RFB with Buffer" list -* or "RFB without buffer" list according to pvPacket. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_QUE_ENTRY_T prQueEntry; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - prRxCtrl = &prAdapter->rRxCtrl; - prQueEntry = &prSwRfb->rQueEntry; - - ASSERT(prQueEntry); - - /* The processing on this RFB is done, so put it back on the tail of - our list */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb->pvPacket) { - QUEUE_INSERT_TAIL(&prRxCtrl->rFreeSwRfbList, prQueEntry); - } - else { - QUEUE_INSERT_TAIL(&prRxCtrl->rIndicatedRfbList, prQueEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - return; -} /* end of nicRxReturnRFB() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SDIO_INTR_ENHANCE - #if CFG_SDIO_RX_AGG - nicRxSDIOAggReceiveRFBs(prAdapter); - #else - nicRxSDIOReceiveRFBs(prAdapter); - #endif -#else - nicRxReceiveRFBs(prAdapter); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicRxProcessRFBs(prAdapter); - - return; - -} /* end of nicProcessRxInterrupt() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* @brief Used to update IP/TCP/UDP checksum statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param aeCSUM The array of checksum result. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(aeCSUM); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_SUCCESS_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_FAILED)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L3_PKT_COUNT); - } - else { - ASSERT(0); - } - - if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_FAILED_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L4_PKT_COUNT); - } - else { - ASSERT(0); - } - - return; -} /* end of nicRxUpdateCSUMStatistics() */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current status of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - - SPRINTF(pucCurrBuf, ("\n\nRX CTRL STATUS:")); - SPRINTF(pucCurrBuf, ("\n===============")); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/i BUF LIST :%9ld", prRxCtrl->rFreeSwRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/o BUF LIST :%9ld", prRxCtrl->rIndicatedRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nRECEIVED RFB LIST :%9ld", prRxCtrl->rReceivedRfbList.u4NumElem)); - - SPRINTF(pucCurrBuf, ("\n\n")); - - //*pu4Count = (UINT_32)((UINT_32)pucCurrBuf - (UINT_32)pucBuffer); - - return; -} /* end of nicRxQueryStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear RX related counters -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return - (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - RX_RESET_ALL_CNTS(prRxCtrl); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - -#define SPRINTF_RX_COUNTER(eCounter) \ - SPRINTF(pucCurrBuf, ("%-30s : %ld\n", #eCounter, (UINT_32)prRxCtrl->au8Statistics[eCounter])) - - SPRINTF_RX_COUNTER(RX_MPDU_TOTAL_COUNT); - SPRINTF_RX_COUNTER(RX_SIZE_ERR_DROP_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_INDICATION_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETURNED_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETAINED_COUNT); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - SPRINTF_RX_COUNTER(RX_CSUM_TCP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_TCP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L4_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L3_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_IP_V6_PKT_CCOUNT); -#endif - - //*pu4Count = (UINT_32)(pucCurrBuf - pucBuffer); - - nicRxClearStatistics(prAdapter); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the Response data from data port -* -* @param prAdapter pointer to the Adapter handler -* @param pucRspBuffer pointer to the Response buffer -* -* @retval WLAN_STATUS_SUCCESS: Response packet has been read -* @retval WLAN_STATUS_FAILURE: Read Response packet timeout or error occurred -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ) -{ - UINT_32 u4Value = 0, u4PktLen = 0, i = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4Time, u4Current; - - DEBUGFUNC("nicRxWaitResponse"); - - ASSERT(prAdapter); - ASSERT(pucRspBuffer); - ASSERT(ucPortIdx < 2); - - u4Time = (UINT_32)kalGetTimeTick(); - - do { - /* Read the packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4Value); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - if(ucPortIdx == 0) { - u4PktLen = u4Value & 0xFFFF; - } - else { - u4PktLen = (u4Value >> 16) & 0xFFFF; - } - - DBGLOG(RX, TRACE, ("i = %d, u4PktLen = %d\n", i, u4PktLen)); - - if (u4PktLen == 0) { - /* timeout exceeding check */ - u4Current = (UINT_32)kalGetTimeTick(); - - if((u4Current > u4Time) && ((u4Current - u4Time) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - else if(u4Current < u4Time && ((u4Current + (0xFFFFFFFF - u4Time)) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - - /* Response packet is not ready */ - kalUdelay(50); - - i++; - } - else if (u4PktLen > u4MaxRespBufferLen) { - DBGLOG(RX, WARN, ("Not enough Event Buffer: required length = 0x%x, available buffer length = %d\n", - u4PktLen, u4MaxRespBufferLen)); - - return WLAN_STATUS_FAILURE; - } - else { - HAL_PORT_RD(prAdapter, - ucPortIdx == 0 ? MCR_WRDR0 : MCR_WRDR1, - u4PktLen, - pucRspBuffer, - u4MaxRespBufferLen); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - DBGLOG(RX, TRACE, ("Dump Response buffer, length = 0x%x\n", - u4PktLen)); - DBGLOG_MEM8(RX, TRACE, pucRspBuffer, u4PktLen); - - *pu4Length = u4PktLen; - break; - } - } while(TRUE); - - return u4Status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to enable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxEnablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to disable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxDisablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in reordering module -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SW_RFB_T prSwRfb; - - ASSERT(prAdapter); - - if((prSwRfb = qmFlushRxQueues(prAdapter)) != NULL) { - do { - P_SW_RFB_T prNextSwRfb; - - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - // free - nicRxReturnRFB(prAdapter, prSwRfb); - - prSwRfb = prNextSwRfb; - } while(prSwRfb); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prActFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prSwRfb->u2PacketLen < sizeof(WLAN_ACTION_FRAME) - 1) { - return WLAN_STATUS_INVALID_PACKET; - } - prActFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - - switch (prActFrame->ucCategory) { - case CATEGORY_PUBLIC_ACTION: - - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessPublicAction(prAdapter, prSwRfb); - - p2pFuncValidateRxActionFrame( - prAdapter, prSwRfb); - - } - #endif - break; - - case CATEGORY_HT_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessHtAction(prAdapter, prSwRfb); - } - #endif - break; - case CATEGORY_VENDOR_SPECIFIC_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - p2pFuncValidateRxActionFrame(prAdapter, prSwRfb); - } - #endif - break; -#if CFG_SUPPORT_802_11W - case CATEGORY_SA_QUERT_ACTION: - { - P_HIF_RX_HEADER_T prHifRxHdr; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */ - ) { - if (!(prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC)) { - /* MFP test plan 5.3.3.4 */ - rsnSaQueryAction(prAdapter, prSwRfb); - } - else { - DBGLOG(RSN, TRACE, ("Un-Protected SA Query, do nothing\n")); - } - } - } - break; -#endif -#if CFG_SUPPORT_802_11V - case CATEGORY_WNM_ACTION: - { - wnmWNMAction(prAdapter, prSwRfb); - } - break; -#endif - default: - break; - } /* end of switch case */ - - return WLAN_STATUS_SUCCESS; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_tx.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_tx.c deleted file mode 100755 index 5f626798b1e6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/nic_tx.c +++ /dev/null @@ -1,1981 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/nic_tx.c#1 $ -*/ - -/*! \file nic_tx.c - \brief Functions that provide TX operation in NIC Layer. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. -*/ - - - -/* -** $Log: nic_tx.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * remove unused variables. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 27 2010 wh.su - * NULL - * since the u2TxByteCount_UserPriority will or another setting, keep the overall buffer for avoid error - * - * 09 24 2010 wh.su - * NULL - * [WCXRP000000058][MT6620 Wi-Fi][Driver] Fail to handshake with WAPI AP due the 802.1x frame send to fw with extra bytes padding. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 05 2010 yuche.tsai - * NULL - * . - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add checking for TX descriptor poll. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * * - * -* 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * avoid refering to NDIS-specific data structure directly from non-glue layer. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * * 4) nicRxWaitResponse() revised - * * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-10 16:52:15 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-12-07 22:44:24 GMT mtk02752 -** correct assertion criterion -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-12-07 21:15:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-12-04 15:47:21 GMT mtk02752 -** + always append a dword of zero on TX path to avoid TX aggregation to triggered on uninitialized data -** + add more assertion for packet size check -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-12-04 14:51:55 GMT mtk02752 -** nicTxMsduInfo(): save ptr for next entry before attaching to qDataPort -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-12-04 11:54:54 GMT mtk02752 -** add 2 assertion for size check -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-12-03 16:20:35 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-30 10:57:10 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-30 09:20:43 GMT mtk02752 -** use TC4 instead of TC5 for command packet -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-27 11:08:11 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-26 20:31:22 GMT mtk02752 -** fill prMsduInfo->ucUserPriority -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-25 21:04:33 GMT mtk02752 -** fill u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-24 20:52:12 GMT mtk02752 -** integration with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-24 19:54:25 GMT mtk02752 -** nicTxRetransmitOfOsSendQue & nicTxData but changed to use nicTxMsduInfoList -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 17:53:18 GMT mtk02752 -** add nicTxCmd() for SD1_SD3_DATAPATH_INTEGRATION, which will append only HIF_TX_HEADER. seqNum, WIFI_CMD_T will be created inside oid handler -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-20 15:10:24 GMT mtk02752 -** use TxAccquireResource instead of accessing TCQ directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-17 22:40:57 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-17 17:35:40 GMT mtk02752 -** add nicTxMsduInfoList () implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-17 11:07:10 GMT mtk02752 -** add nicTxAdjustTcq() implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-16 22:28:38 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-16 21:45:32 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-13 13:29:56 GMT mtk01084 -** modify TX hdr format, fix tx retransmission issue -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 10:36:21 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-04 14:11:11 GMT mtk01084 -** modify TX SW data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-10-29 19:56:17 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-13 21:59:23 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-02 14:00:18 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-05-20 12:26:06 GMT mtk01461 -** Assign SeqNum to CMD Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-05-19 10:54:04 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-05-12 09:41:55 GMT mtk01461 -** Fix Query Command need resp issue -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-29 15:44:38 GMT mtk01461 -** Move OS dependent code to kalQueryTxOOBData() -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-28 10:40:03 GMT mtk01461 -** Add nicTxReleaseResource() for SDIO_STATUS_ENHANCE, and also fix the TX aggregation issue for 1x packet to TX1 port -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-21 09:50:47 GMT mtk01461 -** Update nicTxCmd() for moving wait RESP function call to wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-17 19:56:32 GMT mtk01461 -** Move the CMD_INFO_T related function to cmd_buf.c -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-17 18:14:40 GMT mtk01426 -** Update OOB query for TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:51:32 GMT mtk01426 -** Support PKGUIO -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-02 17:26:40 GMT mtk01461 -** Add virtual OOB for HIF LOOPBACK SW PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:54:43 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:53:47 GMT mtk01461 -** Add code for retransmit of rOsSendQueue, mpSendPacket(), and add code for TX Checksum offload, Loopback Test. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:33:51 GMT mtk01461 -** Add code for TX Data & Cmd Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:40 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:30 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:04 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial all variables in regard to SW TX Queues and -* all free lists of MSDU_INFO_T and SW_TFCB_T. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - PUINT_8 pucMemHandle; - P_MSDU_INFO_T prMsduInfo; - UINT_32 i; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxInitialize"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - //4 <1> Initialization of Traffic Class Queue Parameters - nicTxResetResource(prAdapter); - -#if CFG_SDIO_TX_AGG - prTxCtrl->pucTxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; -#endif /* CFG_SDIO_TX_AGG */ - - // allocate MSDU_INFO_T and link it into rFreeMsduInfoList - QUEUE_INITIALIZE(&prTxCtrl->rFreeMsduInfoList); - - pucMemHandle = prTxCtrl->pucTxCached; - for (i = 0 ; i < CFG_TX_MAX_PKT_NUM ; i++) { - prMsduInfo = (P_MSDU_INFO_T)pucMemHandle; - kalMemZero(prMsduInfo, sizeof(MSDU_INFO_T)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - pucMemHandle += ALIGN_4(sizeof(MSDU_INFO_T)); - } - - ASSERT(prTxCtrl->rFreeMsduInfoList.u4NumElem == CFG_TX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prTxCtrl->pucTxCached) == prTxCtrl->u4TxCachedSize); - - QUEUE_INITIALIZE(&prTxCtrl->rTxMgmtTxingQueue); - prTxCtrl->i4TxMgmtPendingNum = 0; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum = 0; - prTxCtrl->u4TotalTxPacketNum = 0; -#endif - - prTxCtrl->i4PendingFwdFrameCount = 0; - - qmInit(prAdapter); - - TX_RESET_ALL_CNTS(prTxCtrl); - - return; -} /* end of nicTxInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will check if has enough TC Buffer for incoming -* packet and then update the value after promise to provide the resources. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucTC Specify the resource of TC -* -* \retval WLAN_STATUS_SUCCESS Resource is available and been assigned. -* \retval WLAN_STATUS_RESOURCES Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_RESOURCES; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - -// DbgPrint("nicTxAcquireResource prTxCtrl->rTc.aucFreeBufferCount[%d]=%d\n", ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC]); - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC]) { - - prTxCtrl->rTc.aucFreeBufferCount[ucTC]--; - - DBGLOG(TX, EVENT, ("Acquire: TC = %d aucFreeBufferCount = %d\n", - ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC])); - - u4Status = WLAN_STATUS_SUCCESS; - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return u4Status; - -}/* end of nicTxAcquireResourceAndTFCBs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will do polling if FW has return the resource. -* Used when driver start up before enable interrupt. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Resource is available. -* @retval WLAN_STATUS_FAILURE Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - INT_32 i = NIC_TX_RESOURCE_POLLING_TIMEOUT; - UINT_32 au4WTSR[2]; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - if (ucTC >= TC_NUM) { - return WLAN_STATUS_FAILURE; - } - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - return WLAN_STATUS_SUCCESS; - } - - while (i-- > 0) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, au4WTSR); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if (nicTxReleaseResource(prAdapter, (PUINT_8)au4WTSR)) { - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - u4Status = WLAN_STATUS_SUCCESS; - break; - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - -#if DBG - { - INT_32 i4Times = NIC_TX_RESOURCE_POLLING_TIMEOUT - (i+1); - - if (i4Times) { - DBGLOG(TX, TRACE, ("Polling MCR_WTSR delay %d times, %d msec\n", - i4Times, (i4Times * NIC_TX_RESOURCE_POLLING_DELAY_MSEC))); - } - } -#endif /* DBG */ - - return u4Status; - -} /* end of nicTxPollingResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will release TC Buffer count according to -* the given TX_STATUS COUNTER after TX Done. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] u4TxStatusCnt Value of TX STATUS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ) -{ - PUINT_32 pu4Tmp = (PUINT_32)aucTxRlsCnt; - P_TX_CTRL_T prTxCtrl; - BOOLEAN bStatus = FALSE; - UINT_32 i; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - // DBGLOG(TX, TRACE, ("\n")); - - if (pu4Tmp[0] | pu4Tmp[1]) { - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - for (i = 0; i < TC_NUM; i++) { - prTxCtrl->rTc.aucFreeBufferCount[i] += aucTxRlsCnt[i]; - - if ((i==1) || (i==5)){ - DBGLOG(TX, EVENT, ("Release: i = %d aucFreeBufferCount = %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i])); - } - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); -#if 0 - for (i = 0; i < TC_NUM; i++) { - DBGLOG(INIT, TRACE, ("aucFreeBufferCount[%d]: %d, aucMaxNumOfBuffer[%d]: %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i], i, prTxCtrl->rTc.aucMaxNumOfBuffer[i])); - } - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[0]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[0]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[1]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[1]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[2]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[2]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[3]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[3]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[4]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[4]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[5]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[5]); -#endif - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX]); - bStatus = TRUE; - } - - return bStatus; -} /* end of nicTxReleaseResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reset TC Buffer Count to initialized value -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will return the value for other component -* which needs this information for making decisions -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval UINT_8 The number of corresponding TC number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(prTxCtrl); - - if (ucTC >= TC_NUM) { - return 0; - } - else { - return prTxCtrl->rTc.aucFreeBufferCount[ucTC]; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll aggregate frame(PACKET_INFO_T) -* corresponding to HIF TX port -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoListHead a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - QUE_T qDataPort0, qDataPort1; - WLAN_STATUS status; - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prMsduInfo = prMsduInfoListHead; - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - // Separate MSDU_INFO_T lists into 2 categories: for Port#0 & Port#1 - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); -#if DBG && 0 - LOG_FUNC("nicTxMsduInfoList Acquire TC %d net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prMsduInfo->ucTC, - prMsduInfo->ucNetworkType, - prMsduInfo->ucMacHeaderLength, - prMsduInfo->u2FrameLength, - prMsduInfo->ucPacketType, - prMsduInfo->fgIs802_1x, - prMsduInfo->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prMsduInfo->aucEthDestAddr)); -#endif - - switch(prMsduInfo->ucTC) { - case TC0_INDEX: - case TC1_INDEX: - case TC2_INDEX: - case TC3_INDEX: - case TC5_INDEX: // Broadcast/multicast data packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - case TC4_INDEX: // Command or 802.1x packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - default: - ASSERT(0); - break; - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 0, &qDataPort0); - } - - if(qDataPort1.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 1, &qDataPort1); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll write frame(PACKET_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucPortIdx Port Number -* @param prQue a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_16 u2OverallBufferLength; - UINT_8 ucEtherTypeOffsetInWord; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4TxHdrSize; - UINT_32 u4ValidBufSize; - UINT_32 u4TotalLength; - P_TX_CTRL_T prTxCtrl; - QUE_T rFreeQueue; -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_8 ucChksumFlag; -#endif - - ASSERT(prAdapter); - ASSERT(ucPortIdx < 2); - ASSERT(prQue); - - prTxCtrl = &prAdapter->rTxCtrl; - u4ValidBufSize = prAdapter->u4CoalescingBufCachedSize; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum++; - prTxCtrl->u4TotalTxPacketNum += prQue->u4NumElem; -#endif - - QUEUE_INITIALIZE(&rFreeQueue); - - if(prQue->u4NumElem > 0) { - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_HEAD(prQue); - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - u4TotalLength = 0; - - while(prMsduInfo) { - - // DBGLOG(TX, TRACE, ("SN %d, len %d\n", prMsduInfo->ucTxSeqNum, prMsduInfo->u2FrameLength)); - - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prMsduInfo->prPacket; - - ASSERT(prNativePacket); - - u4TxHdrSize = TX_HDR_SIZE; - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - if (prMsduInfo->fgIs802_11) { - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - } - else { - ucEtherTypeOffsetInWord = - ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - } - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - if (prAdapter->u4CSUMFlags & - (CSUM_OFFLOAD_EN_TX_TCP | - CSUM_OFFLOAD_EN_TX_UDP | - CSUM_OFFLOAD_EN_TX_IP)) { - kalQueryTxChksumOffloadParam(prNativePacket, &ucChksumFlag); - - if (ucChksumFlag & TX_CS_IP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_IP_CSUM; - } - - if (ucChksumFlag & TX_CS_TCP_UDP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_TCP_CSUM; - } - } - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - -#if CFG_SDIO_TX_AGG - // attach to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, &rHwTxHeader, u4TxHdrSize); - u4TotalLength += u4TxHdrSize; - - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TotalLength); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TotalLength, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - u4TotalLength += ALIGN_4(prMsduInfo->u2FrameLength); - -#else - kalMemCopy(pucOutputBuf, &rHwTxHeader, u4TxHdrSize); - - /* Copy Frame Body */ - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TxHdrSize); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TxHdrSize, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - ASSERT(u2OverallBufferLength <= u4ValidBufSize); - - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); - - // send immediately -#endif - prNextMsduInfo = (P_MSDU_INFO_T) - QUEUE_GET_NEXT_ENTRY(&prMsduInfo->rQueEntry); - - if (prMsduInfo->eSrc == TX_PACKET_MGMT) { - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - KAL_SPIN_LOCK_DECLARATION(); - DBGLOG(INIT, TRACE,("Wait TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - /* only free MSDU when it is not a MGMT frame */ - QUEUE_INSERT_TAIL(&rFreeQueue, (P_QUE_ENTRY_T)prMsduInfo); - - if (prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_SUCCESS); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - } - - prMsduInfo = prNextMsduInfo; - } - -#if CFG_SDIO_TX_AGG - ASSERT(u4TotalLength <= u4ValidBufSize); - - #if CFG_DBG_GPIO_PINS - { - /* Start port write */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_HIGH); - } - #endif - - // send coalescing buffer - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - u4TotalLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); -#endif - - // return - nicTxReturnMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_WIFI_CMD_T prWifiCmd; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_8 ucPortIdx; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_8 ucEtherTypeOffsetInWord; - P_MSDU_INFO_T prMsduInfo; - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - - // <1> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { - // Broadcast/multicast data frames, 1x frames, command packets, MMPDU - ucPortIdx = 1; - } - - if(prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prCmdInfo->prPacket; - - ASSERT(prNativePacket); - - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = ((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - ucEtherTypeOffsetInWord = ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET); - - rHwTxHeader.ucStaRecIdx = prCmdInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = HIF_TX_HDR_BURST_END_MASK; - - rHwTxHeader.ucWlanHeaderLength = (ETH_HLEN & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (((UINT_8)(prCmdInfo->eNetworkType) << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((1 << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK); - - rHwTxHeader.u2SeqNo = 0; - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body Copy - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + TX_HDR_SIZE); - } - else if(prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - ASSERT(prMsduInfo->fgIs802_11 == TRUE); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body - kalMemCopy(pucOutputBuf + TX_HDR_SIZE, - prMsduInfo->prPacket, - prMsduInfo->u2FrameLength); - - // <4> Management Frame Post-Processing - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - - DBGLOG(INIT, TRACE,("Wait Cmd TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - prWifiCmd = (P_WIFI_CMD_T)prCmdInfo->pucInfoBuffer; - - // <2> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prWifiCmd->u2TxByteCount_UserPriority = u2OverallBufferLength; - prWifiCmd->ucEtherTypeOffset = 0; - prWifiCmd->ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET) - | (UINT_8)((HIF_TX_PKT_TYPE_CMD << HIF_TX_HDR_PACKET_TYPE_OFFSET) & (HIF_TX_HDR_PACKET_TYPE_MASK)); - - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - } - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} /* end of nicTxCmd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will clean up all the pending frames in internal SW Queues -* by return the pending TX packet to the system. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - nicTxFlush(prAdapter); - - // free MSDU_INFO_T from rTxMgmtMsduInfoList - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rTxMgmtTxingQueue, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - if(prMsduInfo) { - // the packet must be mgmt frame with tx done callback - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - ASSERT(prMsduInfo->pfTxDoneHandler != NULL); - - // invoke done handler - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_LIFE_TIMEOUT); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - break; - } - } while(TRUE); - - return; -} /* end of nicTxRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process the TX Done interrupt and pull in more pending frames in SW -* Queues for transmission. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessTxInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; -#if CFG_SDIO_INTR_ENHANCE - P_SDIO_CTRL_T prSDIOCtrl; -#else - UINT_32 au4TxCount[2]; -#endif /* CFG_SDIO_INTR_ENHANCE */ - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - /* Get the TX STATUS */ -#if CFG_SDIO_INTR_ENHANCE - - prSDIOCtrl = prAdapter->prSDIOCtrl; - #if DBG - //dumpMemory8((PUINT_8)prSDIOCtrl, sizeof(SDIO_CTRL_T)); - #endif - - nicTxReleaseResource(prAdapter, (PUINT_8)&prSDIOCtrl->rTxInfo); - kalMemZero(&prSDIOCtrl->rTxInfo, sizeof(prSDIOCtrl->rTxInfo)); - -#else - - HAL_MCR_RD(prAdapter, MCR_WTSR0, &au4TxCount[0]); - HAL_MCR_RD(prAdapter, MCR_WTSR1, &au4TxCount[1]); - DBGLOG(EMU, TRACE, ("MCR_WTSR0: 0x%x, MCR_WTSR1: 0x%x\n", au4TxCount[0], au4TxCount[1])); - - nicTxReleaseResource(prAdapter, (PUINT_8)au4TxCount); - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicTxAdjustTcq(prAdapter); - - // Indicate Service Thread - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return; -} /* end of nicProcessTxInterrupt() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function frees packet of P_MSDU_INFO_T linked-list -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_NATIVE_PACKET prNativePacket; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead; - P_TX_CTRL_T prTxCtrl; - - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - - while(prMsduInfo) { - prNativePacket = prMsduInfo->prPacket; - - if(prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_FAILURE); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - if (prMsduInfo->pfTxDoneHandler) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - cnmMemFree(prAdapter, prNativePacket); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function returns P_MSDU_INFO_T of MsduInfoList to TxCtrl->rfreeMsduInfoList -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead, prNextMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - switch(prMsduInfo->eSrc) { - case TX_PACKET_FORWARDING: - wlanReturnPacket(prAdapter, prMsduInfo->prPacket); - break; - case TX_PACKET_OS: - case TX_PACKET_OS_OID: - case TX_PACKET_MGMT: - default: - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = prNextMsduInfo; - }; - - return; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function fills packet information to P_MSDU_INFO_T -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfo P_MSDU_INFO_T -* @param prPacket P_NATIVE_PACKET -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_8 ucPriorityParam; - UINT_8 ucMacHeaderLen; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - if (kalQoSFrameClassifierAndPacketInfo(prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == FALSE) { - return FALSE; - } - - /* Save the value of Priority Parameter */ - GLUE_SET_PKT_TID(prPacket, ucPriorityParam); - - if (fgIs1x) { - GLUE_SET_PKT_FLAG_1X(prPacket); - } - - if (fgIsPAL) { - GLUE_SET_PKT_FLAG_PAL(prPacket); - } - - ucMacHeaderLen = ETH_HLEN; - - /* Save the value of Header Length */ - GLUE_SET_PKT_HEADER_LEN(prPacket, ucMacHeaderLen); - - /* Save the value of Frame Length */ - GLUE_SET_PKT_FRAME_LEN(prPacket, (UINT_16)u4PacketLen); - - /* Save the value of Arrival Time*/ - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - prMsduInfo->prPacket = prPacket; - prMsduInfo->fgIs802_1x = fgIs1x; - prMsduInfo->fgIs802_11 = FALSE; - prMsduInfo->ucNetworkType = ucNetworkType; - prMsduInfo->ucUserPriority = ucPriorityParam; - prMsduInfo->ucMacHeaderLength = ucMacHeaderLen; - prMsduInfo->u2FrameLength = (UINT_16)u4PacketLen; - COPY_MAC_ADDR(prMsduInfo->aucEthDestAddr, aucEthDestAddr); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function update TCQ values by passing current status to txAdjustTcQuotas -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Updated successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Num; - TX_TCQ_ADJUST_T rTcqAdjust; - P_TX_CTRL_T prTxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - qmAdjustTcQuotas(prAdapter, &rTcqAdjust, &prTxCtrl->rTc); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - for (u4Num = 0 ; u4Num < TC_NUM ; u4Num++) { - prTxCtrl->rTc.aucFreeBufferCount[u4Num] += rTcqAdjust.acVariation[u4Num]; - prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] += rTcqAdjust.acVariation[u4Num]; - - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[u4Num] >= 0); - ASSERT(prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] >= 0); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in STA/AC queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MSDU_INFO_T prMsduInfo; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - // ask Per STA/AC queue to be fllushed and return all queued packets - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmFlushTxQueues(prAdapter); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfo); - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - } - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_ENABLE_FW_DOWNLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* However this function is used for INIT_CMD. -* -* In order to avoid further maintainance issues, these 2 functions are separated -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_INIT_HIF_TX_HEADER_T prInitTxHeader; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 ucPortIdx; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(ucTC == TC0_INDEX); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - prInitTxHeader = (P_INIT_HIF_TX_HEADER_T)prCmdInfo->pucInfoBuffer; - - // <1> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prInitTxHeader->u2TxByteCount = u2OverallBufferLength; - prInitTxHeader->ucEtherTypeOffset = 0; - prInitTxHeader->ucCSflags = 0; - - // <2> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { // Broadcast/multicast data packets - ucPortIdx = 1; - } - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll reset TX resource counter to initial value used -* in F/W download state -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicTxInitResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - - return WLAN_STATUS_SUCCESS; - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function enqueues MSDU_INFO_T into queue management, -* or command queue -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfo Pointer to MSDU -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prNextMsduInfo, prRetMsduInfo, prMsduInfoHead; - QUE_T qDataPort0, qDataPort1; - P_CMD_INFO_T prCmdInfo; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - /* check how many management frame are being queued */ - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - - if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - // MMPDU: force stick to TC4 - prMsduInfo->ucTC = TC4_INDEX; - - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem) { - /* send to QM */ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfo = qmEnqueueTxPackets(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort0)); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - /* post-process for dropped packets */ - if(prRetMsduInfo != NULL) { // unable to enqueue - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfo); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfo); - } - } - - if(qDataPort1.u4NumElem) { - prMsduInfoHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort1); - - if(qDataPort1.u4NumElem > nicTxGetFreeCmdCount(prAdapter)) { - // not enough descriptors for sending - u4Status = WLAN_STATUS_FAILURE; - - // free all MSDUs - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - if (prMsduInfoHead->pfTxDoneHandler != NULL) { - prMsduInfoHead->pfTxDoneHandler(prAdapter, prMsduInfoHead, TX_RESULT_DROPPED_IN_DRIVER); - } - - - cnmMgtPktFree(prAdapter, prMsduInfoHead); - - prMsduInfoHead = prNextMsduInfo; - } - } - else { - /* send to command queue */ - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - GLUE_INC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_MANAGEMENT_FRAME; - prCmdInfo->u2InfoBufLen = prMsduInfoHead->u2FrameLength; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = (P_NATIVE_PACKET)prMsduInfoHead; - prCmdInfo->ucStaRecIndex = prMsduInfoHead->ucStaRecIndex; - prCmdInfo->eNetworkType = prMsduInfoHead->ucNetworkType; - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - } - else { - /* Cmd free count is larger than expected, but allocation fail. */ - ASSERT(0); - - u4Status = WLAN_STATUS_FAILURE; - cnmMgtPktFree(prAdapter, prMsduInfoHead); - } - - prMsduInfoHead = prNextMsduInfo; - } - } - } - - /* indicate service thread for sending */ - if(prTxCtrl->i4TxMgmtPendingNum > 0 - || kalGetTxPendingFrameCount(prAdapter->prGlueInfo) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function returns available count in command queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rFreeCmdList.u4NumElem; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/p2p_nic.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/p2p_nic.c deleted file mode 100755 index 592318b00454..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/p2p_nic.c +++ /dev/null @@ -1,203 +0,0 @@ -/* -** $Id: @(#) p2p_nic.c@@ -*/ - -/*! \file p2p_nic.c - \brief Wi-Fi Direct Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief When Probe Rsp & Beacon frame is received and decide a P2P device, -* this function will be invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param prEventScanResult Pointer of EVENT_SCAN_RESULT_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxAddP2pDevice ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ) -{ - P_P2P_INFO_T prP2pInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - UINT_32 u4Idx = 0; - BOOLEAN bUpdate = FALSE; - - PUINT_8 pucIeBuf = (PUINT_8)NULL; - UINT_16 u2IELength = 0; - UINT_8 zeroMac[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - - ASSERT(prAdapter); - - prP2pInfo = prAdapter->prP2pInfo; - - for (u4Idx = 0; u4Idx < prP2pInfo->u4DeviceNum; u4Idx++) { - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - if (EQUAL_MAC_ADDR(prTargetResult->aucDeviceAddr, prP2pResult->aucDeviceAddr)) { - bUpdate = TRUE; - - /* Backup OLD buffer result. */ - pucIeBuf = prTargetResult->pucIeBuf; - u2IELength = prTargetResult->u2IELength; - - /* Update Device Info. */ - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - /* See if new IE length is longer or not. */ - if ((u2RxIELength > u2IELength) && (u2IELength != 0)) { - /* Buffer is not enough. */ - u2RxIELength = u2IELength; - } - else if ((u2IELength == 0) && (u2RxIELength != 0)) { - /* RX new IE buf. */ - ASSERT(pucIeBuf == NULL); - pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2RxIELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - - /* Step to next buffer address. */ - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength); - } - - /* Restore buffer pointer. */ - prTargetResult->pucIeBuf = pucIeBuf; - - if (pucRxIEBuf) { - /* If new received IE is availabe. - * Replace the old one & update new IE length. - */ - kalMemCopy(pucIeBuf, pucRxIEBuf, u2RxIELength); - prTargetResult->u2IELength = u2RxIELength; - } - else { - /* There is no new IE information, keep the old one. */ - prTargetResult->u2IELength = u2IELength; - } - } - } - - if (!bUpdate) { - /* We would flush the whole scan result after each scan request is issued. - * If P2P device is too many, it may over the scan list. - */ - if ((u4Idx < CFG_MAX_NUM_BSS_LIST) && (UNEQUAL_MAC_ADDR(zeroMac, prP2pResult->aucDeviceAddr))) { /* whsu:XXX */ - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - //printk("DVC FND %d " MACSTR", " MACSTR "\n", prP2pInfo->u4DeviceNum, MAC2STR(prP2pResult->aucDeviceAddr), MAC2STR(prTargetResult->aucDeviceAddr)); - - if (u2RxIELength) { - prTargetResult->pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2IELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - else { - u2IELength = u2RxIELength; - } - - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2IELength); - - kalMemCopy((PVOID)prTargetResult->pucIeBuf, (PVOID)pucRxIEBuf, (UINT_32)u2IELength); - prTargetResult->u2IELength = u2IELength; - } - else { - prTargetResult->pucIeBuf = NULL; - prTargetResult->u2IELength = 0; - } - - prP2pInfo->u4DeviceNum++; - - } - else { - // TODO: Fixme to replace an old one. (?) - ASSERT(FALSE); - } - } -} /* nicRxAddP2pDevice */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/nic/que_mgt.c b/drivers/net/wireless/rockchip_wlan/mt5931/nic/que_mgt.c deleted file mode 100755 index 74ae5aba8126..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/nic/que_mgt.c +++ /dev/null @@ -1,4802 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/nic/que_mgt.c#1 $ -*/ - -/*! \file "que_mgt.c" - \brief TX/RX queues management - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - - - -/* -** $Log: que_mgt.c $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 23 2012 eddie.chen - * [WCXRP00001194] [MT6620][DRV/FW] follow admission control bit to change the enqueue rule - * Change the enqueue policy when ACM = 1. - * - * 11 22 2011 yuche.tsai - * NULL - * Code refine, remove one #if 0 code. - * - * 11 19 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for tx - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Fix xlog format to hex format - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug msg for xlog. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Use short name for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 chinglan.wang - * NULL - * [WiFi WPS]Can't switch to new AP via WPS PBC when there existing a connection to another AP. - * - * 11 09 2011 chinglan.wang - * NULL - * [WiFi direct]Can't make P2P connect via PBC. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 25 2011 wh.su - * [WCXRP00001059] [MT6620 Wi-Fi][Driver][P2P] Fixed sometimes data (1x) will not indicate to upper layer due ba check un-expect - * let the Rx BA accept even the sta not valid. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 09 01 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * set rx window size as twice buffer size. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 03 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * force window size at least 16. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 07 07 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Add setEvent when free quota is updated. - * - * 07 05 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Send 1x when peer STA is in PS. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 yuche.tsai - * [WCXRP00000712] [Volunteer Patch][MT6620][Driver] Sending deauth issue when Hot spot is disabled. (GO is dissolved) - * Deauthentication frame is not bound to network active status. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 14 2011 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out[WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * Allow 802.1x can be send even the net is not active due the drver / fw sync issue. - * - * 01 13 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix typo and compile error. - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix WMM parameter condition for STA - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 01 12 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Update MQM for WMM IE generation method - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add per STA flow control when STA is in PS mode - * - * 01 03 2011 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update prStaRec->fgIsUapsdSupported flag. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * use the #14 and modify the add code for check MMPDU. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * only MMPDU not check the netActive flag. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * not check the netActive flag for mgmt . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 30 2010 yarco.yang - * NULL - * Fixed klockwork error message - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 10 2010 yarco.yang - * NULL - * Code refine - * - * 08 06 2010 yarco.yang - * NULL - * Update qmGetFrameAction() to allow P2P MGMT frame w/o STA_Record still can perform TX action - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 20 2010 yarco.yang - * - * Add to SetEvent when BSS is from Absent to Present or STA from PS to Awake - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * . - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Use fgInUse instead of fgIsValid for De-queue judgement - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * For MMPDU, STA_REC will be decided by caller module - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined the debug msg - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * comment out one assertion which refer to undefined data member. - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * -* 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * For TX packets with STA_REC index = STA_REC_INDEX_NOT_FOUND, use TC5 - * - * 03 01 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed STA_REC index determination bug (fgIsValid shall be checked) - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined function qmDetermineStaRecIndex() for BMCAST packets - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the 802.1x path - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-14 15:01:37 GMT MTK02468 -** Fixed casting for qmAddRxBaEntry() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:51:03 GMT mtk02752 -** remove SD1_SD3.. flag -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-09 14:07:25 GMT MTK02468 -** Added RX buffer reordering functions -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-04 13:34:16 GMT MTK02468 -** Modified Flush Queue function to let queues be reinitialized -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-04 13:18:25 GMT MTK02468 -** Added flushing per-Type queues code -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 23:39:49 GMT MTK02468 -** Added Debug msgs and fixed incorrect assert -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-26 23:50:27 GMT MTK02468 -** Bug fixing (qmDequeueTxPackets local variable initialization) -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-26 09:39:25 GMT mtk02752 -** correct and surpress PREfast warning -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-11-23 22:10:55 GMT mtk02468 -** Used SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 22:02:30 GMT mtk02468 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -OS_SYSTIME g_arMissTimeout[CFG_STA_REC_NUM][CFG_RX_MAX_BA_TID_NUM]; -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentAvailableQuota, - IN UINT_8 ucTotalQuota - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for TX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4QueArrayIdx; - UINT_32 i; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmInit()\n"); -#if CFG_SUPPORT_QOS - prAdapter->rWifiVar.fgSupportQoS = TRUE; -#else - prAdapter->rWifiVar.fgSupportQoS = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_RX - prAdapter->rWifiVar.fgSupportAmpduRx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduRx = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_TX - prAdapter->rWifiVar.fgSupportAmpduTx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduTx = FALSE; -#endif - -#if CFG_SUPPORT_TSPEC - prAdapter->rWifiVar.fgSupportTspec = TRUE; -#else - prAdapter->rWifiVar.fgSupportTspec = FALSE; -#endif - -#if CFG_SUPPORT_UAPSD - prAdapter->rWifiVar.fgSupportUAPSD= TRUE; -#else - prAdapter->rWifiVar.fgSupportUAPSD = FALSE; -#endif - -#if CFG_SUPPORT_UL_PSMP - prAdapter->rWifiVar.fgSupportULPSMP = TRUE; -#else - prAdapter->rWifiVar.fgSupportULPSMP = FALSE; -#endif - - //4 <2> Initialize other TX queues (queues not in STA_RECs) - for(u4QueArrayIdx = 0; u4QueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; u4QueArrayIdx++){ - QUEUE_INITIALIZE(&(prQM->arTxQueue[u4QueArrayIdx])); - } - - //4 <3> Initialize the RX BA table and RX queues - /* Initialize the RX Reordering Parameters and Queues */ - for(u4QueArrayIdx = 0; u4QueArrayIdx < CFG_NUM_OF_RX_BA_AGREEMENTS; u4QueArrayIdx++){ - prQM->arRxBaTable[u4QueArrayIdx].fgIsValid = FALSE; - QUEUE_INITIALIZE(&(prQM->arRxBaTable[u4QueArrayIdx].rReOrderQue)); - prQM->arRxBaTable[u4QueArrayIdx].u2WinStart = 0xFFFF; - prQM->arRxBaTable[u4QueArrayIdx].u2WinEnd = 0xFFFF; - - prQM->arRxBaTable[u4QueArrayIdx].fgIsWaitingForPktWithSsn = FALSE; - - } - prQM->ucRxBaCount = 0; - kalMemSet(&g_arMissTimeout, 0, sizeof(g_arMissTimeout)); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - //4 <4> Initialize TC resource control variables - for(i = 0; i < TC_NUM; i++){ - prQM->au4AverageQueLen[i] = 0; - } - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - -// ASSERT(prQM->u4TimeToAdjust && prQM->u4TimeToUpdateQueLen); - - prQM->au4CurrentTcResource[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prQM->au4CurrentTcResource[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prQM->au4CurrentTcResource[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prQM->au4CurrentTcResource[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prQM->au4CurrentTcResource[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; /* Not adjustable (TX port 1)*/ - prQM->au4CurrentTcResource[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - prQM->au4MinReservedTcResource[TC0_INDEX] = QM_MIN_RESERVED_TC0_RESOURCE; - prQM->au4MinReservedTcResource[TC1_INDEX] = QM_MIN_RESERVED_TC1_RESOURCE; - prQM->au4MinReservedTcResource[TC2_INDEX] = QM_MIN_RESERVED_TC2_RESOURCE; - prQM->au4MinReservedTcResource[TC3_INDEX] = QM_MIN_RESERVED_TC3_RESOURCE; - prQM->au4MinReservedTcResource[TC4_INDEX] = QM_MIN_RESERVED_TC4_RESOURCE; /* Not adjustable (TX port 1)*/ - prQM->au4MinReservedTcResource[TC5_INDEX] = QM_MIN_RESERVED_TC5_RESOURCE; - - - prQM->au4GuaranteedTcResource[TC0_INDEX] = QM_GUARANTEED_TC0_RESOURCE; - prQM->au4GuaranteedTcResource[TC1_INDEX] = QM_GUARANTEED_TC1_RESOURCE; - prQM->au4GuaranteedTcResource[TC2_INDEX] = QM_GUARANTEED_TC2_RESOURCE; - prQM->au4GuaranteedTcResource[TC3_INDEX] = QM_GUARANTEED_TC3_RESOURCE; - prQM->au4GuaranteedTcResource[TC4_INDEX] = QM_GUARANTEED_TC4_RESOURCE; - prQM->au4GuaranteedTcResource[TC5_INDEX] = QM_GUARANTEED_TC5_RESOURCE; - - prQM->fgTcResourcePostAnnealing = FALSE; - - ASSERT(QM_INITIAL_RESIDUAL_TC_RESOURCE < 64); -#endif - -#if QM_TEST_MODE - prQM->u4PktCount = 0; - -#if QM_TEST_FAIR_FORWARDING - - prQM->u4CurrentStaRecIndexToEnqueue = 0; - { - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - P_STA_RECORD_T prStaRec; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - prStaRec = &prAdapter->arStaRec[1]; - ASSERT(prStaRec); - - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prStaRec->fgIsAp = TRUE; - COPY_MAC_ADDR((prStaRec)->aucMacAddr,aucMacAddr); - - } - -#endif - -#endif - -#if QM_FORWARDING_FAIRNESS -{ - UINT_32 i; - for (i=0; i < NUM_OF_PER_STA_TX_QUEUES; i++){ - prQM->au4ForwardCount[i] = 0; - prQM->au4HeadStaRecIndex[i] = 0; - } -} -#endif - -} - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ) -{ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DbgPrint("QM: ** TEST MODE **\n"); - - if(QM_TEST_STA_REC_DETERMINATION){ - if(prAdapter->arStaRec[0].fgIsValid){ - prAdapter->arStaRec[0].fgIsValid = FALSE; - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - } - else{ - prAdapter->arStaRec[0].fgIsValid = TRUE; - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - } - } - - if(QM_TEST_STA_REC_DEACTIVATION){ - /* Note that QM_STA_REC_HARD_CODING shall be set to 1 for this test */ - - if(prAdapter->arStaRec[0].fgIsValid){ - - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - qmDeactivateStaRec(prAdapter,0); - } - else{ - - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - qmActivateStaRec( - prAdapter, /* Adapter pointer */ - 0, /* STA_REC index from FW */ - TRUE, /* fgIsQoS */ - NETWORK_TYPE_AIS_INDEX, /* Network type */ - TRUE, /* fgIsAp */ - aucMacAddr /* MAC address */ - ); - } - } - - if(QM_TEST_FAIR_FORWARDING){ - if(prAdapter->arStaRec[1].fgIsValid){ - prQM->u4CurrentStaRecIndexToEnqueue ++; - prQM->u4CurrentStaRecIndexToEnqueue %= 2; - DbgPrint("QM: (Test) Switch to STA_REC[%ld]\n", prQM->u4CurrentStaRecIndexToEnqueue); - } - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Activate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* \param[in] fgIsQoS Set to TRUE if this is a QoS STA -* \param[in] pucMacAddr The MAC address of the STA -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - - //4 <1> Deactivate first - ASSERT(prStaRec); - - if(prStaRec->fgIsValid){ /* The STA_REC has been activated */ - DBGLOG(QM, WARN, ("QM: (WARNING) Activating a STA_REC which has been activated \n")); - DBGLOG(QM, WARN, ("QM: (WARNING) Deactivating a STA_REC before re-activating \n")); - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); // To flush TX/RX queues and del RX BA agreements - } - - //4 <2> Activate the STA_REC - /* Init the STA_REC */ - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->fgIsAp = (IS_AP_STA(prStaRec)) ? TRUE : FALSE;; - - /* Done in qmInit() or qmDeactivateStaRec() */ -#if 0 - /* At the beginning, no RX BA agreements have been established */ - for(i =0; iaprRxReorderParamRefTbl)[i] = NULL; - } -#endif - - DBGLOG(QM, INFO, ("QM: +STA[%ld]\n", prStaRec->ucIndex)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - P_STA_RECORD_T prStaRec; - UINT_32 i; - P_MSDU_INFO_T prFlushedTxPacketList = NULL; - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - //4<1> Flush TX queues - prFlushedTxPacketList = qmFlushStaTxQueues(prAdapter, u4StaRecIdx); - - if(prFlushedTxPacketList){ - wlanProcessQueuedMsduInfo(prAdapter, prFlushedTxPacketList); - } - - //4 <2> Flush RX queues and delete RX BA agreements - for(i =0; i < CFG_RX_MAX_BA_TID_NUM; i++){ - /* Delete the RX BA entry with TID = i */ - qmDelRxBaEntry(prAdapter, (UINT_8)u4StaRecIdx, (UINT_8)i, FALSE); - } - - //4 <3> Deactivate the STA_REC - prStaRec->fgIsValid = FALSE; - prStaRec->fgIsInPS = FALSE; - - DBGLOG(QM, INFO, ("QM: -STA[%ld]\n", u4StaRecIdx)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the network -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - - P_QUE_MGT_T prQM; - P_QUE_T prQue; - QUE_T rNeedToFreeQue; - QUE_T rTempQue; - P_QUE_T prNeedToFreeQue; - P_QUE_T prTempQue; - P_MSDU_INFO_T prMsduInfo; - - - prQM = &prAdapter->rQM; - prQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - - QUEUE_INITIALIZE(&rNeedToFreeQue); - QUEUE_INITIALIZE(&rTempQue); - - prNeedToFreeQue = &rNeedToFreeQue; - prTempQue = &rTempQue; - - QUEUE_MOVE_ALL(prTempQue, prQue); - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - while (prMsduInfo) { - - if(prMsduInfo->ucNetworkType == eNetworkTypeIdx) { - QUEUE_INSERT_TAIL(prNeedToFreeQue, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(prQue, (P_QUE_ENTRY_T)prMsduInfo); - } - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - } - if(QUEUE_IS_NOT_EMPTY(prNeedToFreeQue)) { - wlanProcessQueuedMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(prNeedToFreeQue)); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush all TX queues -* -* \param[in] (none) -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucStaArrayIdx; - UINT_8 ucQueArrayIdx; - - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushTxQueues()\n")); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - /* Concatenate all MSDU_INFOs in per-STA queues */ - for(ucStaArrayIdx = 0; ucStaArrayIdx < CFG_NUM_OF_STA_RECORD; ucStaArrayIdx++){ - - /* Always check each STA_REC when flushing packets no matter it is inactive or active */ - #if 0 - if(!prAdapter->arStaRec[ucStaArrayIdx].fgIsValid){ - continue; /* Continue to check the next STA_REC */ - } - #endif - - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - } - - /* Flush per-Type queues */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; ucQueArrayIdx++){ - - if(QUEUE_IS_EMPTY(&(prQM->arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prQM->arTxQueue[ucQueArrayIdx]); - - } - - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, NULL); - } - - return prMsduInfoListHead; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush TX packets for a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - UINT_8 ucQueArrayIdx; - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaTxQueues(%ld)\n", u4StaRecIdx)); - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Concatenate all MSDU_INFOs in TX queues of this STA_REC */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prStaRec->arTxQueue[ucQueArrayIdx]))){ - continue; - } - - if(!prMsduInfoListHead){ - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = - (P_MSDU_INFO_T)QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prStaRec->arTxQueue[ucQueArrayIdx]); - - } - -#if 0 - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx)); - } - else { - prMsduInfoListHead = nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx); - } -#endif - - return prMsduInfoListHead; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets -* -* \param[in] (none) -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - prSwRfbListHead = prSwRfbListTail = NULL; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushRxQueues()\n")); - - for(i =0; iarRxBaTable[i].rReOrderQue))){ - if(!prSwRfbListHead){ - - /* The first MSDU_INFO is found */ - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prSwRfbListTail, - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue))); - - prSwRfbListTail = (P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - - QUEUE_INITIALIZE(&(prQM->arRxBaTable[i].rReOrderQue)); - - } - else{ - continue; - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets with respect to a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* \param[in] u4Tid TID -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushStaRxQueue( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx, - IN UINT_32 u4Tid - ) -{ - //UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_RX_BA_ENTRY_T prReorderQueParm; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaRxQueues(%ld)\n", u4StaRecIdx)); - - prSwRfbListHead = prSwRfbListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Obtain the RX BA Entry pointer */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[u4Tid]); - - /* Note: For each queued packet, prCurrSwRfb->eDst equals RX_PKT_DESTINATION_HOST */ - if(prReorderQueParm){ - - if(QUEUE_IS_NOT_EMPTY(&(prReorderQueParm->rReOrderQue))){ - - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prReorderQueParm->rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prReorderQueParm->rReOrderQue)); - - - QUEUE_INITIALIZE(&(prReorderQueParm->rReOrderQue)); - - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enqueue TX packets -* -* \param[in] prMsduInfoListHead Pointer to the list of TX packets -* -* \return The freed packets, which are not enqueued -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfoReleaseList; - P_MSDU_INFO_T prCurrentMsduInfo; - P_MSDU_INFO_T prNextMsduInfo; - - P_STA_RECORD_T prStaRec; - P_QUE_T prTxQue; - QUE_T rNotEnqueuedQue; - - - UINT_8 ucPacketType; - UINT_8 ucTC; - P_QUE_MGT_T prQM = &prAdapter->rQM; - UINT_8 aucNextUP[WMM_AC_INDEX_NUM] = { 1 /* BEtoBK*/, 1 /*na*/, 0/*VItoBE*/ , 4 /*VOtoVI*/}; - - DBGLOG(QM, LOUD, ("Enter qmEnqueueTxPackets\n")); - - ASSERT(prMsduInfoListHead); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - { - //UINT_32 i; - //4 <0> Update TC resource control related variables - /* Keep track of the queue length */ - if (--prQM->u4TimeToUpdateQueLen == 0){ - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - qmUpdateAverageTxQueLen(prAdapter); - } - } -#endif - - /* Push TX packets into STA_REC (for UNICAST) or prAdapter->rQM (for BMCAST) */ - prStaRec = NULL; - prMsduInfoReleaseList = NULL; - prCurrentMsduInfo = NULL; - QUEUE_INITIALIZE(&rNotEnqueuedQue); - prNextMsduInfo = prMsduInfoListHead; - - do{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgCheckACMAgain; - ENUM_WMM_ACI_T eAci = WMM_AC_BE_INDEX; - prCurrentMsduInfo = prNextMsduInfo; - prNextMsduInfo = QM_TX_GET_NEXT_MSDU_INFO(prCurrentMsduInfo); - ucTC = TC1_INDEX; - - //4 <1> Lookup the STA_REC index - /* The ucStaRecIndex will be set in this function */ - qmDetermineStaRecIndex(prAdapter, prCurrentMsduInfo); - ucPacketType = HIF_TX_PACKET_TYPE_DATA; - - DBGLOG(QM, LOUD , ("***** ucStaRecIndex = %d *****\n", - prCurrentMsduInfo->ucStaRecIndex)); - - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prCurrentMsduInfo->ucNetworkType]); - - if(IS_NET_ACTIVE(prAdapter, prCurrentMsduInfo->ucNetworkType)) { - - switch (prCurrentMsduInfo->ucStaRecIndex){ - case STA_REC_INDEX_BMCAST: - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucTC = TC5_INDEX; -#if 0 - if(prCurrentMsduInfo->ucNetworkType == NETWORK_TYPE_P2P_INDEX - && prCurrentMsduInfo->eSrc != TX_PACKET_MGMT - ) { - if(LINK_IS_EMPTY(&prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].rStaRecOfClientList)) { - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_AP_BORADCAST_DROP); - } - } -#endif - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_23); - break; - - case STA_REC_INDEX_NOT_FOUND: - ucTC = TC5_INDEX; - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - - /* if the packet is the forward type. the packet should be freed */ - DBGLOG(QM, TRACE, ("Forwarding packet but Sta is STA_REC_INDEX_NOT_FOUND\n")); - //prTxQue = &rNotEnqueuedQue; - } - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_NO_STA_REC]; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_24); - - break; - - default: - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prCurrentMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsValid); - - if(prCurrentMsduInfo->ucUserPriority < 8) { - QM_DBG_CNT_INC(prQM, prCurrentMsduInfo->ucUserPriority + 15); - /* QM_DBG_CNT_15 */ /* QM_DBG_CNT_16 */ /* QM_DBG_CNT_17 */ /* QM_DBG_CNT_18 */ - /* QM_DBG_CNT_19 */ /* QM_DBG_CNT_20 */ /* QM_DBG_CNT_21 */ /* QM_DBG_CNT_22 */ - } - - eAci = WMM_AC_BE_INDEX; - do { - fgCheckACMAgain = FALSE; - if (prStaRec->fgIsQoS){ - switch(prCurrentMsduInfo->ucUserPriority){ - case 1: - case 2: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC0]; - ucTC = TC0_INDEX; - eAci = WMM_AC_BK_INDEX; - break; - case 0: - case 3: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - break; - case 4: - case 5: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC2]; - ucTC = TC2_INDEX; - eAci = WMM_AC_VI_INDEX; - break; - case 6: - case 7: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC3]; - ucTC = TC3_INDEX; - eAci = WMM_AC_VO_INDEX; - break; - default: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - ASSERT(0); - break; - } - if(prBssInfo->arACQueParms[eAci].fgIsACMSet && eAci != WMM_AC_BK_INDEX) { - prCurrentMsduInfo->ucUserPriority = aucNextUP[eAci]; - fgCheckACMAgain = TRUE; - } - } - else{ - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - } - } - while(fgCheckACMAgain); - - //LOG_FUNC ("QoS %u UP %u TC %u",prStaRec->fgIsQoS,prCurrentMsduInfo->ucUserPriority, ucTC); - - break; /*default */ - } /* switch (prCurrentMsduInfo->ucStaRecIndex) */ - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - if(prTxQue->u4NumElem > 32) { - DBGLOG(QM, INFO, ("Drop the Packet for full Tx queue (forwarding) Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_FORWARD_OVERFLOW_DROP); - } - } - - } - else { - - DBGLOG(QM, INFO, ("Drop the Packet for inactive Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_31); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_INACTIVE_BSS_DROP); - } - - //4 <3> Fill the MSDU_INFO for constructing HIF TX header - - /* TODO: Fill MSDU_INFO according to the network type, - * EtherType, and STA status (for PS forwarding control). - */ - - /* Note that the Network Type Index and STA_REC index are determined in - * qmDetermineStaRecIndex(prCurrentMsduInfo). - */ - QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET( - prCurrentMsduInfo, /* MSDU_INFO ptr */ - ucTC, /* TC tag */ - ucPacketType, /* Packet Type */ - 0, /* Format ID */ - prCurrentMsduInfo->fgIs802_1x, /* Flag 802.1x */ - prCurrentMsduInfo->fgIs802_11, /* Flag 802.11 */ - 0, /* PAL LLH */ - 0, /* ACL SN */ - PS_FORWARDING_TYPE_NON_PS, /* PS Forwarding Type */ - 0 /* PS Session ID */ - ); - - //4 <4> Enqueue the packet - QUEUE_INSERT_TAIL(prTxQue, (P_QUE_ENTRY_T)prCurrentMsduInfo); - - -#if QM_TEST_MODE - if (++prQM->u4PktCount == QM_TEST_TRIGGER_TX_COUNT){ - prQM->u4PktCount = 0; - qmTestCases(prAdapter); - } - -#endif - - DBGLOG(QM, LOUD, ("Current queue length = %u\n", prTxQue->u4NumElem)); - }while(prNextMsduInfo); - - if( QUEUE_IS_NOT_EMPTY(&rNotEnqueuedQue) ) { - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rNotEnqueuedQue), NULL); - prMsduInfoReleaseList = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rNotEnqueuedQue); - } - - - return prMsduInfoReleaseList; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Determine the STA_REC index for a packet -* -* \param[in] prMsduInfo Pointer to the packet -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - - P_STA_RECORD_T prTempStaRec; - //P_QUE_MGT_T prQM = &prAdapter->rQM; - - prTempStaRec = NULL; - - ASSERT(prMsduInfo); - - //4 <1> DA = BMCAST - if (IS_BMCAST_MAC_ADDR(prMsduInfo->aucEthDestAddr)){ - /* For intrastructure mode and P2P (playing as a GC), BMCAST frames shall be sent to the AP. - * FW shall take care of this. The host driver is not able to distinguish these cases. */ - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_BMCAST; - DBGLOG(QM, LOUD, ("TX with DA = BMCAST\n")); - return; - } - - - //4 <2> Check if an AP STA is present - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - - if((prTempStaRec->ucNetTypeIndex == prMsduInfo->ucNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - - - - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if (prTempStaRec->fgIsValid){ - if (EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, prMsduInfo->aucEthDestAddr)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - DBGLOG(QM, LOUD, ("QM: TX with STA_REC_INDEX_NOT_FOUND\n")); - - -#if (QM_TEST_MODE && QM_TEST_FAIR_FORWARDING) - prMsduInfo->ucStaRecIndex = (UINT_8)prQM->u4CurrentStaRecIndexToEnqueue; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a STA_REC for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (TC0_INDEX to TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentQuota, - IN UINT_8 ucTotalQuota - ) -{ - -#if QM_FORWARDING_FAIRNESS - UINT_32 i; /* Loop for */ - - PUINT_32 pu4HeadStaRecIndex; /* The Head STA index */ - PUINT_32 pu4HeadStaRecForwardCount; /* The total forwarded packets for the head STA */ - - P_STA_RECORD_T prStaRec; /* The current focused STA */ - P_BSS_INFO_T prBssInfo; /* The Bss for current focused STA */ - P_QUE_T prCurrQueue; /* The current TX queue to dequeue */ - P_MSDU_INFO_T prDequeuedPkt; /* The dequeued packet */ - - UINT_32 u4ForwardCount; /* To remember the total forwarded packets for a STA */ - UINT_32 u4MaxForwardCount; /* The maximum number of packets a STA can forward */ - UINT_32 u4Resource; /* The TX resource amount */ - - BOOLEAN fgChangeHeadSta; /* Whether a new head STA shall be determined at the end of the function */ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - PUINT_8 pucFreeQuota; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - - if(!ucCurrentQuota){ - DBGLOG(TX, LOUD, ("@@@@@ TC = %u ucCurrentQuota = %u @@@@@\n", - ucTC, ucCurrentQuota)); - return; - } - - u4Resource = ucCurrentQuota; - - //4 <1> Determine the head STA - /* The head STA shall be an active STA */ - - pu4HeadStaRecIndex = &(prQM->au4HeadStaRecIndex[ucTC]); - pu4HeadStaRecForwardCount = &(prQM->au4ForwardCount[ucTC]); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Init Head STA = %u Resource = %u\n", - ucTC, *pu4HeadStaRecIndex, u4Resource)); - - - /* From STA[x] to STA[x+1] to STA[x+2] to ... to STA[x] */ - for (i=0; i < CFG_NUM_OF_STA_RECORD + 1; i++){ - prStaRec = &prAdapter->arStaRec[(*pu4HeadStaRecIndex)]; - ASSERT(prStaRec); - - /* Only Data frame (1x was not included) will be queued in */ - if (prStaRec->fgIsValid){ - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - /* Determine how many packets the head STA is allowed to send in a round */ - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_25); - u4MaxForwardCount = ucTotalQuota; -#if CFG_ENABLE_WIFI_DIRECT - - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } /* fgIsInPS */ -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - /* Determine whether the head STA can continue to forward packets in this round */ - if((*pu4HeadStaRecForwardCount) < u4MaxForwardCount){ - break; - } - - } /* prStaRec->fgIsValid */ - else{ - /* The current Head STA has been deactivated, so search for a new head STA */ - prStaRec = NULL; - prBssInfo = NULL; - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - - /* Reset the forwarding count before searching (since this is for a new selected STA) */ - (*pu4HeadStaRecForwardCount) = 0; - } - } /* i < CFG_NUM_OF_STA_RECORD + 1 */ - - /* All STA_RECs are inactive, so exit */ - if (!prStaRec){ - /* Under concurrent, it is possible that there is no candidcated STA.*/ - //DBGLOG(TX, EVENT, ("All STA_RECs are inactive\n")); - return; - } - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Round Head STA = %lu\n", - ucTC, *pu4HeadStaRecIndex)); - - //4 <2> Dequeue packets from the head STA - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - prDequeuedPkt = NULL; - fgChangeHeadSta = FALSE; - - while(prCurrQueue){ - - -#if QM_DEBUG_COUNTER - - if(ucTC <= TC4_INDEX) { - if(QUEUE_IS_EMPTY(prCurrQueue)) { - QM_DBG_CNT_INC(prQM, ucTC); - /* QM_DBG_CNT_00 */ /* QM_DBG_CNT_01 */ /* QM_DBG_CNT_02 */ /* QM_DBG_CNT_03 */ /* QM_DBG_CNT_04 */ - } - if(u4Resource == 0) { - QM_DBG_CNT_INC(prQM, ucTC + 5); - /* QM_DBG_CNT_05 */ /* QM_DBG_CNT_06 */ /* QM_DBG_CNT_07 */ /* QM_DBG_CNT_08 */ /* QM_DBG_CNT_09 */ - } - if(((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)) { - QM_DBG_CNT_INC(prQM, ucTC + 10); - /* QM_DBG_CNT_10 */ /* QM_DBG_CNT_11 */ /* QM_DBG_CNT_12 */ /* QM_DBG_CNT_13 */ /* QM_DBG_CNT_14 */ - } - } -#endif - - - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if (QUEUE_IS_EMPTY(prCurrQueue) || ((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)){ - fgChangeHeadSta = TRUE; - break; - } - else if (u4Resource == 0){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); -#if DBG && 0 - LOG_FUNC("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - /* XXX: check all queues for STA */ - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - (*pu4HeadStaRecForwardCount) ++; - - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - - if (*pu4HeadStaRecForwardCount){ - DBGLOG(QM, LOUD, ("TC = %u Round Head STA = %lu, u4HeadStaRecForwardCount = %lu\n", ucTC, *pu4HeadStaRecIndex, (*pu4HeadStaRecForwardCount))); - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - - - //4 <3> Dequeue from the other STAs if there is residual TX resource - - /* Check all of the STAs to continue forwarding packets (including the head STA) */ - for (i= 0; i< CFG_NUM_OF_STA_RECORD; i++){ - /* Break in case no reasource is available */ - if (u4Resource == 0){ - break; - } - - /* The current head STA will be examined when i = CFG_NUM_OF_STA_RECORD-1 */ - prStaRec = &prAdapter->arStaRec[((*pu4HeadStaRecIndex) + i + 1) % CFG_NUM_OF_STA_RECORD]; - ASSERT(prStaRec); - - if (prStaRec->fgIsValid) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Sharing STA = %u Resource = %lu\n", - ucTC, prStaRec->ucIndex, u4Resource)); - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - u4ForwardCount = 0; - u4MaxForwardCount = ucTotalQuota; - -#if CFG_ENABLE_WIFI_DIRECT - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } /* prStaRec->fgIsValid */ - else{ - prBssInfo = NULL; - /* Invalid STA, so check the next STA */ - continue; - } - - while(prCurrQueue){ - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if ((u4Resource == 0) || QUEUE_IS_EMPTY(prCurrQueue) || (u4ForwardCount >= u4MaxForwardCount)){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - -#if DBG && 0 - DBGLOG(QM, LOUD, ("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 )); - - DBGLOG(QM, LOUD,("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr))); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - u4ForwardCount ++; - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - -#if CFG_ENABLE_WIFI_DIRECT - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (u4ForwardCount){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - } - - - if (fgChangeHeadSta){ - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - (*pu4HeadStaRecForwardCount) = 0; - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Scheduled Head STA = %lu Left Resource = %lu\n", - ucTC, (*pu4HeadStaRecIndex), u4Resource)); - } - - -/***************************************************************************************/ -#else - UINT_8 ucStaRecIndex; - P_STA_RECORD_T prStaRec; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - if (ucCurrentQuota == 0){ - return; - } - - //4 <1> Determine the queue index and the head STA - - /* The head STA */ - ucStaRecIndex = 0; /* TODO: Get the current head STA */ - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - /* The queue to pull out packets */ - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - - ucPktCount = ucCurrentQuota; - prDequeuedPkt = NULL; - - //4 <2> Dequeue packets for the head STA - while(TRUE){ - if (!(prStaRec->fgIsValid) || ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - //DbgPrint("QM: Remove Queue Head, TC= %d\n", prDequeuedPkt->ucTC); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - ucPktCount--; - } - } - - //DbgPrint("QM: Remaining number of queued packets = %d\n", prCurrQueue->u4NumElem); - -#if QM_BURST_END_INFO_ENABLED - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } - -#endif - - //4 <3> Update scheduling info - /* TODO */ - - //4 <4> Utilize the remainaing TX opportunities for non-head STAs - /* TODO */ -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a per-Type-based Queue for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (Shall always be TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ) -{ - //UINT_8 ucQueIndex; - //UINT_8 ucStaRecIndex; - P_BSS_INFO_T prBssInfo; - P_BSS_INFO_T parBssInfo; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - P_MSDU_INFO_T prBurstEndPkt; - QUE_T rMergeQue; - P_QUE_T prMergeQue; - P_QUE_MGT_T prQM; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerTypeQueues (TC = %d, Max = %d)\n", ucTC, ucMaxNum)); - - /* TC5: Broadcast/Multicast data packets */ - ASSERT(ucTC == TC5_INDEX); - - if (ucMaxNum == 0){ - return; - } - - prQM = &prAdapter->rQM; - //4 <1> Determine the queue - - prCurrQueue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucPktCount = ucMaxNum; - prDequeuedPkt = NULL; - prBurstEndPkt = NULL; - - parBssInfo = prAdapter->rWifiVar.arBssInfo; - - QUEUE_INITIALIZE(&rMergeQue); - prMergeQue = &rMergeQue; - - //4 <2> Dequeue packets - while(TRUE){ - if(ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - } - else{ - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - ASSERT(prDequeuedPkt->ucNetworkType < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &parBssInfo[prDequeuedPkt->ucNetworkType]; - - if(IS_BSS_ACTIVE(prBssInfo)) { - if( !prBssInfo->fgIsNetAbsent){ - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - prBurstEndPkt = prDequeuedPkt; - ucPktCount--; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_26); -#if DBG && 0 - LOG_FUNC("DeqType TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - } - else { - QUEUE_INSERT_TAIL(prMergeQue,(P_QUE_ENTRY_T)prDequeuedPkt); - } - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prDequeuedPkt, NULL); - wlanProcessQueuedMsduInfo(prAdapter,prDequeuedPkt); - } - } - } - - if(QUEUE_IS_NOT_EMPTY(prMergeQue)) { - QUEUE_CONCATENATE_QUEUES(prMergeQue, prCurrQueue); - QUEUE_MOVE_ALL(prCurrQueue, prMergeQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(prCurrQueue), NULL); - } - -#if QM_BURST_END_INFO_ENABLED - if (prBurstEndPkt){ - prBurstEndPkt->fgIsBurstEnd = TRUE; - } -#endif -} /* qmDequeueTxPacketsFromPerTypeQueues */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets to send to HIF TX -* -* \param[in] prTcqStatus Info about the maximum amount of dequeued packets -* -* \return The list of dequeued TX packets -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ - - INT_32 i; - P_MSDU_INFO_T prReturnedPacketListHead; - QUE_T rReturnedQue; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPackets\n")); - - QUEUE_INITIALIZE(&rReturnedQue); - - prReturnedPacketListHead = NULL; - - /* TC0 to TC4: AC0~AC3, 802.1x (commands packets are not handled by QM) */ - for(i = TC4_INDEX; i >= TC0_INDEX; i--){ - DBGLOG(QM, LOUD, ("Dequeue packets from Per-STA queue[%u]\n", i)); - - qmDequeueTxPacketsFromPerStaQueues( - prAdapter, - &rReturnedQue, - (UINT_8)i, - prTcqStatus->aucFreeBufferCount[i], - prTcqStatus->aucMaxNumOfBuffer[i] - ); - - /* The aggregate number of dequeued packets */ - DBGLOG(QM, LOUD, ("DQA)[%u](%lu)\n", i, rReturnedQue.u4NumElem)); - } - - - /* TC5 (BMCAST or STA-NOT-FOUND packets) */ - qmDequeueTxPacketsFromPerTypeQueues( - prAdapter, - &rReturnedQue, - TC5_INDEX, - prTcqStatus->aucFreeBufferCount[TC5_INDEX] - ); - - DBGLOG(QM, LOUD, ("Current total number of dequeued packets = %u\n", rReturnedQue.u4NumElem)); - - if (QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - prReturnedPacketListHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rReturnedQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return prReturnedPacketListHead; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Adjust the TC quotas according to traffic demands -* -* \param[out] prTcqAdjust The resulting adjustment -* \param[in] prTcqStatus Info about the current TC quotas and counters -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Must initialize */ - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - - //4 <1> If TC resource is not just adjusted, exit directly - if (!prQM->fgTcResourcePostAnnealing){ - return; - } - - //4 <2> Adjust TcqStatus according to the updated prQM->au4CurrentTcResource - else{ - INT_32 i4TotalExtraQuota = 0; - INT_32 ai4ExtraQuota[TC_NUM]; - BOOLEAN fgResourceRedistributed = TRUE; - - /* Obtain the free-to-distribute resource */ - for (i = 0; i < TC_NUM; i++){ - ai4ExtraQuota[i] = (INT_32)prTcqStatus->aucMaxNumOfBuffer[i] - (INT_32)prQM->au4CurrentTcResource[i]; - - if (ai4ExtraQuota[i] > 0){ /* The resource shall be reallocated to other TCs */ - if (ai4ExtraQuota[i] > prTcqStatus->aucFreeBufferCount[i]){ - ai4ExtraQuota[i] = prTcqStatus->aucFreeBufferCount[i]; - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* Distribute quotas to TCs which need extra resource according to prQM->au4CurrentTcResource */ - for (i = 0; i < TC_NUM; i++){ - if (ai4ExtraQuota[i] < 0){ - if ((-ai4ExtraQuota[i]) > i4TotalExtraQuota){ - ai4ExtraQuota[i] = (-i4TotalExtraQuota); - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* In case some TC is waiting for TX Done, continue to adjust TC quotas upon TX Done */ - prQM->fgTcResourcePostAnnealing = (!fgResourceRedistributed); - -#if QM_PRINT_TC_RESOURCE_CTRL - DBGLOG(QM, LOUD, ("QM: Curr Quota [0]=%u [1]=%u [2]=%u [3]=%u [4]=%u [5]=%u\n", - prTcqStatus->aucFreeBufferCount[0], - prTcqStatus->aucFreeBufferCount[1], - prTcqStatus->aucFreeBufferCount[2], - prTcqStatus->aucFreeBufferCount[3], - prTcqStatus->aucFreeBufferCount[4], - prTcqStatus->aucFreeBufferCount[5] - )); -#endif - } - -#else - UINT_32 i; - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - -#endif -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update the average TX queue length for the TC resource control mechanism -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 u4CurrQueLen, i, k; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //4 <1> Update the queue lengths for TC0 to TC3 (skip TC4) and TC5 */ - for (i = 0; i < NUM_OF_PER_STA_TX_QUEUES - 1; i++){ - u4CurrQueLen = 0; - - for (k = 0; k < CFG_NUM_OF_STA_RECORD; k++){ - prStaRec = &prAdapter->arStaRec[k]; - ASSERT(prStaRec); - - /* If the STA is activated, get the queue length */ - if (prStaRec->fgIsValid && - (!prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].fgIsNetAbsent) - ) - { - - u4CurrQueLen += (prStaRec->arTxQueue[i].u4NumElem); - } - } - - if (prQM->au4AverageQueLen[i] == 0){ - prQM->au4AverageQueLen[i] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[i] -= (prQM->au4AverageQueLen[i] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[i] += (u4CurrQueLen); - } - - } - - /* Update the queue length for TC5 (BMCAST) */ - u4CurrQueLen = prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST].u4NumElem; - - if (prQM->au4AverageQueLen[TC_NUM-1] == 0){ - prQM->au4AverageQueLen[TC_NUM-1] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[TC_NUM-1] -= (prQM->au4AverageQueLen[TC_NUM-1] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[TC_NUM-1] += (u4CurrQueLen); - } - - - //4 <2> Adjust TC resource assignment - /* Check whether it is time to adjust the TC resource assignment */ - if (--prQM->u4TimeToAdjustTcResource == 0){ - /* The last assignment has not been completely applied */ - if (prQM->fgTcResourcePostAnnealing){ - /* Upon the next qmUpdateAverageTxQueLen function call, do this check again */ - prQM->u4TimeToAdjustTcResource = 1; - } - - /* The last assignment has been applied */ - else{ - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - qmReassignTcResource(prAdapter); - } - } - - /* Debug */ -#if QM_PRINT_TC_RESOURCE_CTRL - for (i=0; i= 100){ - DBGLOG(QM, LOUD, ("QM: QueLen [%ld %ld %ld %ld %ld %ld]\n", - QM_GET_TX_QUEUE_LEN(prAdapter, 0), - QM_GET_TX_QUEUE_LEN(prAdapter, 1), - QM_GET_TX_QUEUE_LEN(prAdapter, 2), - QM_GET_TX_QUEUE_LEN(prAdapter, 3), - QM_GET_TX_QUEUE_LEN(prAdapter, 4), - QM_GET_TX_QUEUE_LEN(prAdapter, 5) - )); - break; - } - } -#endif - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Assign TX resource for each TC according to TX queue length and current assignment -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 i4TotalResourceDemand = 0; - UINT_32 u4ResidualResource = 0; - UINT_32 i; - INT_32 ai4PerTcResourceDemand[TC_NUM]; - UINT_32 u4ShareCount = 0; - UINT_32 u4Share = 0 ; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Note: After the new assignment is obtained, set prQM->fgTcResourcePostAnnealing to TRUE to - * start the TC-quota adjusting procedure, which will be invoked upon every TX Done - */ - - //4 <1> Determine the demands - /* Determine the amount of extra resource to fulfill all of the demands */ - for (i=0; iau4MinReservedTcResource[i] - prQM->au4CurrentTcResource[i]); - - /* If there are queued packets, allocate extra resource for the TC (for TCP consideration) */ - if (QM_GET_TX_QUEUE_LEN(prAdapter, i)){ - ai4PerTcResourceDemand[i] += QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY; - } - - i4TotalResourceDemand += ai4PerTcResourceDemand[i]; - } - - //4 <2> Case 1: Demand <= Total Resource - if (i4TotalResourceDemand <= 0){ - //4 <2.1> Satisfy every TC - for (i = 0; i < TC_NUM; i++){ - /* Skip TC4 (not adjustable) */ - if (i == TC4_INDEX) { - continue; - } - - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - } - - //4 <2.2> Share the residual resource evenly - u4ShareCount= (TC_NUM - 1); /* excluding TC4 */ - u4ResidualResource = (UINT_32)(-i4TotalResourceDemand); - u4Share = (u4ResidualResource/u4ShareCount); - - for (i=0; iau4CurrentTcResource[i] += u4Share; - - /* Every TC is fully satisfied */ - ai4PerTcResourceDemand[i] = 0; - - /* The left resource will be allocated to TC3 */ - u4ResidualResource -= u4Share; - } - - //4 <2.3> Allocate the left resource to TC3 (VO) - prQM->au4CurrentTcResource[TC3_INDEX] += (u4ResidualResource); - - } - - //4 <3> Case 2: Demand > Total Resource --> Guarantee a minimum amount of resource for each TC - else{ - u4ResidualResource = QM_INITIAL_RESIDUAL_TC_RESOURCE; - - //4 <3.1> Allocated resouce amount = minimum of (guaranteed, total demand) - for (i=0; iau4CurrentTcResource[i] + ai4PerTcResourceDemand[i] < prQM->au4GuaranteedTcResource[i]){ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource += (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - ai4PerTcResourceDemand[i] = 0; - } - - /* The demand can not be fulfilled with the guaranteed resource amount */ - else{ - ai4PerTcResourceDemand[i] -= (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - prQM->au4CurrentTcResource[i] = prQM->au4GuaranteedTcResource[i]; - u4ShareCount++; - } - } - - //4 <3.2> Allocate the residual resource - do{ - /* If there is no resource left, exit directly */ - if (u4ResidualResource == 0){ - break; - } - - /* This shall not happen */ - if (u4ShareCount == 0){ - prQM->au4CurrentTcResource[TC1_INDEX] += u4ResidualResource; - DBGLOG(QM, ERROR, ("QM: (Error) u4ShareCount = 0\n")); - break; - } - - /* Share the residual resource evenly */ - u4Share = (u4ResidualResource / u4ShareCount); - if(u4Share){ - for (i=0; iau4CurrentTcResource[i] += u4Share; - u4ResidualResource -= u4Share; - ai4PerTcResourceDemand[i] -= u4Share; - } - else{ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource -= ai4PerTcResourceDemand[i]; - ai4PerTcResourceDemand[i] = 0; - } - } - } - } - - /* By priority, allocate the left resource that is not divisible by u4Share */ - if (u4ResidualResource == 0){ - break; - } - - if (ai4PerTcResourceDemand[TC3_INDEX]){ /* VO */ - prQM->au4CurrentTcResource[TC3_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC2_INDEX]){ /* VI */ - prQM->au4CurrentTcResource[TC2_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC5_INDEX]){ /* BMCAST */ - prQM->au4CurrentTcResource[TC5_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC1_INDEX]){ /* BE */ - prQM->au4CurrentTcResource[TC1_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC0_INDEX]){ /* BK */ - prQM->au4CurrentTcResource[TC0_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - /* Allocate the left resource */ - prQM->au4CurrentTcResource[TC3_INDEX] += u4ResidualResource; - - }while(FALSE); - } - - prQM->fgTcResourcePostAnnealing = TRUE; - -#if QM_PRINT_TC_RESOURCE_CTRL - /* Debug print */ - DBGLOG(QM, LOUD, ("QM: TC Rsc %ld %ld %ld %ld %ld %ld\n", - prQM->au4CurrentTcResource[0], - prQM->au4CurrentTcResource[1], - prQM->au4CurrentTcResource[2], - prQM->au4CurrentTcResource[3], - prQM->au4CurrentTcResource[4], - prQM->au4CurrentTcResource[5] - )); -#endif - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for RX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - //DbgPrint("QM: Enter qmInitRxQueues()\n"); - /* TODO */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle RX packets (buffer reordering) -* -* \param[in] prSwRfbListHead The list of RX packets -* -* \return The list of packets which are not buffered for reordering -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - -#if CFG_RX_REORDERING_ENABLED - //UINT_32 i; - P_SW_RFB_T prCurrSwRfb; - P_SW_RFB_T prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - QUE_T rReturnedQue; - PUINT_8 pucEthDestAddr; - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - - DEBUGFUNC("qmHandleRxPackets"); - - ASSERT(prSwRfbListHead); - - QUEUE_INITIALIZE(&rReturnedQue); - prNextSwRfb = prSwRfbListHead; - - do{ - prCurrSwRfb = prNextSwRfb; - prNextSwRfb = QM_RX_GET_NEXT_SW_RFB(prCurrSwRfb); - - prHifRxHdr = prCurrSwRfb->prHifRxHdr; // TODO: (Tehuang) Use macro to obtain the pointer - - /* TODO: (Tehuang) Check if relaying */ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Decide the Destination */ -#if CFG_RX_PKTS_DUMP - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_DATA)) { - DBGLOG(SW4, INFO, ("QM RX DATA: net %u sta idx %u wlan idx %u ssn %u tid %u ptype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prCurrSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - HIF_RX_HDR_GET_TID(prHifRxHdr), - prCurrSwRfb->ucPacketType, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prCurrSwRfb->pvHeader, prCurrSwRfb->u2PacketLen); - } -#endif - // DBGLOG(RX, TRACE, ("SN=%d, TID=%d\n", HIF_RX_HDR_GET_SN(prHifRxHdr), HIF_RX_HDR_GET_TID(prHifRxHdr))); - - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - //DBGLOG_MEM8(QM, TRACE,prCurrSwRfb->pvHeader, 16); - // - - if( prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem - > (CFG_RX_MAX_PKT_NUM - CFG_NUM_OF_QM_RX_PKT_NUM) ) { - - if(IS_BSS_ACTIVE(prBssInfo)) { - if(OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode) { - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - else if(UNEQUAL_MAC_ADDR(prBssInfo->aucOwnMacAddr,pucEthDestAddr)) { - prCurrSwRfb->eDst = RX_PKT_DESTINATION_FORWARD; - /* TODO : need to check the dst mac is valid */ - /* If src mac is invalid, the packet will be freed in fw */ - } - } /* OP_MODE_ACCESS_POINT */ - } - else { - DBGLOG(QM, TRACE, ("Mark NULL the Packet for inactive Bss %u\n",ucNetTypeIdx)); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - else { - /* Dont not occupy other SW RFB */ - DBGLOG(QM, TRACE, ("Mark NULL the Packet for less Free Sw Rfb\n")); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - - /* BAR frame */ - if(HIF_RX_HDR_GET_BAR_FLAG(prHifRxHdr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - qmProcessBarFrame(prAdapter, prCurrSwRfb, &rReturnedQue); - } - /* Reordering is not required for this packet, return it without buffering */ - else if(!HIF_RX_HDR_GET_REORDER_FLAG(prHifRxHdr)){ -#if 0 - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr) && (OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - } -#endif - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - } - /* Reordering is required for this packet */ - else{ - /* If this packet should dropped or indicated to the host immediately, - * it should be enqueued into the rReturnedQue with specific flags. If - * this packet should be buffered for reordering, it should be enqueued - * into the reordering queue in the STA_REC rather than into the - * rReturnedQue. - */ - qmProcessPktWithReordering(prAdapter, prCurrSwRfb, &rReturnedQue); - - } - }while(prNextSwRfb); - - - /* The returned list of SW_RFBs must end with a NULL pointer */ - if(QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - QM_TX_SET_NEXT_MSDU_INFO((P_SW_RFB_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return (P_SW_RFB_T)QUEUE_GET_HEAD(&rReturnedQue); - -#else - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - return prSwRfbListHead; - -#endif - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reorder the received packet -* -* \param[in] prSwRfb The RX packet to process -* \param[out] prReturnedQue The queue for indicating packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SeqNo; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - DEBUGFUNC("qmProcessPktWithReordering"); - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SN of the frame */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - //prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN, ("Reordering for an invalid STA_REC \n")); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - - /* Start to reorder packets */ - u4SeqNo = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - /* Debug */ - //DbgPrint("QM:(R)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - - /* Case 1: Fall within */ - if /* 0 - start - sn - end - 4095 */ - (((u4WinStart <= u4SeqNo) && (u4SeqNo <= u4WinEnd)) - /* 0 - end - start - sn - 4095 */ - || ((u4WinEnd < u4WinStart) && (u4WinStart <= u4SeqNo)) - /* 0 - sn - end - start - 4095 */ - || ((u4SeqNo <= u4WinEnd) && (u4WinEnd < u4WinStart))){ - - qmInsertFallWithinReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - /* Let the first received packet pass the reorder check */ - DBGLOG(QM, LOUD, ("QM:(A)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd)); - - prReorderQueParm->u2WinStart = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - - qmPopOutDueToFallWithin(prReorderQueParm, prReturnedQue); - } - /* Case 2: Fall ahead */ - else if - /* 0 - start - end - sn - (start+2048) - 4095 */ - (((u4WinStart < u4WinEnd) - && (u4WinEnd < u4SeqNo) - && (u4SeqNo < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - sn - (start+2048) - start - end - 4095 */ - || ((u4SeqNo < u4WinStart) - && (u4WinStart < u4WinEnd) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - end - sn - (start+2048) - start - 4095 */ - || ((u4WinEnd < u4SeqNo) - && (u4SeqNo < u4WinStart) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT)))){ - - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - qmInsertFallAheadReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - - /* Advance the window after inserting a new tail */ - prReorderQueParm->u2WinEnd = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinStart = - (((prReorderQueParm->u2WinEnd) - (prReorderQueParm->u2WinSize) + MAX_SEQ_NO_COUNT + 1) - % MAX_SEQ_NO_COUNT); - - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - - } - /* Case 3: Fall behind */ - else{ - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - #if QM_RX_INIT_FALL_BEHIND_PASS - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - //?? prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(P)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - #endif -#endif - - /* An erroneous packet */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(D)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - - return; - -} - - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SSN; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SSN */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - DbgPrint("QM: (Warning) BAR for an invalid STA_REC \n"); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - u4SSN = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - if(qmCompareSnIsLessThan(u4WinStart,u4SSN)){ - prReorderQueParm->u2WinStart = (UINT_16)u4SSN; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - DBGLOG(QM, TRACE, ("QM:(BAR)[%d](%ld){%d,%d}\n", prSwRfb->ucTid, u4SSN, prReorderQueParm->u2WinStart, prReorderQueParm->u2WinEnd)); - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - } - else{ - DBGLOG(QM, TRACE, ("QM:(BAR)(%d)(%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SSN, u4WinStart, u4WinEnd)); - } -} - - - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prExaminedQueuedSwRfb; - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - prExaminedQueuedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - - /* There are no packets queued in the Reorder Queue */ - if(prExaminedQueuedSwRfb == NULL){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - } - - /* Determine the insert position */ - else{ - do{ - /* Case 1: Terminate. A duplicate packet */ - if(((prExaminedQueuedSwRfb->u2SSN) == (prSwRfb->u2SSN))){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - return; - } - - /* Case 2: Terminate. The insert point is found */ - else if(qmCompareSnIsLessThan( - (prSwRfb->u2SSN),(prExaminedQueuedSwRfb->u2SSN))){ - break; - } - - /* Case 3: Insert point not found. Check the next SW_RFB in the Reorder Queue */ - else{ - prExaminedQueuedSwRfb = - (P_SW_RFB_T)(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prNext); - } - }while(prExaminedQueuedSwRfb); - - /* Update the Reorder Queue Parameters according to the found insert position */ - if(prExaminedQueuedSwRfb == NULL){ - /* The received packet shall be placed at the tail */ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - prReorderQue->prTail = (P_QUE_ENTRY_T)(prSwRfb); - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = (P_QUE_ENTRY_T)prExaminedQueuedSwRfb; - if(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb) == (prReorderQue->prHead)){ - /* The received packet will become the head */ - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - (((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev)->prNext = (P_QUE_ENTRY_T)prSwRfb; - } - ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev = (P_QUE_ENTRY_T)prSwRfb; - } - - prReorderQue->u4NumElem ++; - - } - -} - - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* There are no packets queued in the Reorder Queue */ - if(QUEUE_IS_EMPTY(prReorderQue)){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - } - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - -} - - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead, fgMissing; - OS_SYSTIME rCurrentTime, *prMissTimeout; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - fgMissing = FALSE; - rCurrentTime = 0; - prMissTimeout = &(g_arMissTimeout[prReorderQueParm->ucStaRecIdx][prReorderQueParm->ucTid]); - if (*prMissTimeout) { - fgMissing = TRUE; - GET_CURRENT_SYSTIME(&rCurrentTime); - } - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - /* SN > WinStart, break to update WinEnd */ - else{ - if (TRUE == fgMissing && - CHECK_FOR_TIMEOUT(rCurrentTime, (*prMissTimeout), - //MSEC_TO_SEC(QM_RX_BA_ENTRY_MISS_TIMEOUT_MS))) { - MSEC_TO_SYSTIME(QM_RX_BA_ENTRY_MISS_TIMEOUT_MS))) { - DBGLOG(QM, TRACE, ("RX BA timeout, next tid %d, SSN %d\n", - prReorderQueParm->ucTid, prReorderedSwRfb->u2SSN)); - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = (((prReorderedSwRfb->u2SSN) + 1) % MAX_SEQ_NO_COUNT); - fgMissing = FALSE; - - } - else { - break; - } - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - if (QUEUE_IS_EMPTY(prReorderQue)) { - *prMissTimeout = 0; - } - else { - if (FALSE == fgMissing) { - GET_CURRENT_SYSTIME(prMissTimeout); - } - } - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1 )% MAX_SEQ_NO_COUNT); - -} - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - - /* SN < WinStart, so the head packet shall be indicated (do not advance the window) */ - else if(qmCompareSnIsLessThan( - (UINT_32)(prReorderedSwRfb->u2SSN), - (UINT_32)(prReorderQueParm->u2WinStart))){ - - fgDequeuHead = TRUE; - - } - - /* SN > WinStart, break to update WinEnd */ - else{ - break; - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1)% MAX_SEQ_NO_COUNT); - -} - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ) -{ - /* 0 <---> SnLess <--(gap>2048)--> SnGreater : SnLess > SnGreater */ - if((u4SnLess + HALF_SEQ_NO_COUNT) <= u4SnGreater){ /* Shall be <= */ - return FALSE; - } - - /* 0 <---> SnGreater <--(gap>2048)--> SnLess : SnLess < SnGreater */ - else if((u4SnGreater + HALF_SEQ_NO_COUNT) < u4SnLess){ - return TRUE; - } - - /* 0 <---> SnGreater <--(gap<2048)--> SnLess : SnLess > SnGreater */ - /* 0 <---> SnLess <--(gap<2048)--> SnGreater : SnLess < SnGreater */ - else{ - return (u4SnLess < u4SnGreater); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle Mailbox RX messages -* -* \param[in] prMailboxRxMsg The received Mailbox message from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ) -{ - //DbgPrint("QM: Enter qmHandleMailboxRxMessage()\n"); - /* TODO */ -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle ADD RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_ADDBA_T prEventRxAddBa; - P_STA_RECORD_T prStaRec; - UINT_32 u4Tid; - UINT_32 u4WinSize; - - DBGLOG(QM, INFO, ("QM:Event +RxBa\n")); - - prEventRxAddBa = (P_EVENT_RX_ADDBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxAddBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - DBGLOG(QM, INFO, ("QM: (Warning) RX ADDBA Event for a NULL STA_REC\n")); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - DBGLOG(QM, WARN, ("QM: (Warning) RX ADDBA Event for an invalid STA_REC\n")); - //ASSERT(0); - //return; - } -#endif - - u4Tid = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_TID_MASK) - >> BA_PARAM_SET_TID_MASK_OFFSET); - - u4WinSize = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_BUFFER_SIZE_MASK) - >> BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET); - - if(!qmAddRxBaEntry( - prAdapter, - prStaRec->ucIndex, - (UINT_8)u4Tid, - (prEventRxAddBa->u2BAStartSeqCtrl >> OFFSET_BAR_SSC_SN), - (UINT_16)u4WinSize)){ - - /* FW shall ensure the availabiilty of the free-to-use BA entry */ - DBGLOG(QM, ERROR, ("QM: (Error) qmAddRxBaEntry() failure\n")); - ASSERT(0); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle DEL RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_DELBA_T prEventRxDelBa; - P_STA_RECORD_T prStaRec; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventRxDelBa = (P_EVENT_RX_DELBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxDelBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - //ASSERT(0); - return; - } -#endif - - qmDelRxBaEntry(prAdapter, prStaRec->ucIndex, prEventRxDelBa->ucTid, TRUE); - -} - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - UINT_8 ucStaRecIdx, - UINT_8 ucTid - ) -{ - int i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmLookupRxBaEntry()\n"); - - for(i=0; iarRxBaTable[i].fgIsValid){ - if((prQM->arRxBaTable[i].ucStaRecIdx == ucStaRecIdx) && - (prQM->arRxBaTable[i].ucTid == ucTid)){ - return &prQM->arRxBaTable[i]; - } - } - } - return NULL; -} - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ) -{ - int i; - P_RX_BA_ENTRY_T prRxBaEntry = NULL; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - if(ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - /* Invalid STA_REC index, discard the event packet */ - DBGLOG(QM, WARN, ("QM: (WARNING) RX ADDBA Event for a invalid ucStaRecIdx = %d\n", ucStaRecIdx)); - return FALSE; - } - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - - //if(!(prStaRec->fgIsValid)){ - // DbgPrint("QM: (WARNING) Invalid STA when adding an RX BA \n"); - // return FALSE; - //} - - //4 <1> Delete before adding - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - if(qmLookupRxBaEntry(prAdapter, ucStaRecIdx,ucTid)){ - qmDelRxBaEntry(prAdapter, ucStaRecIdx, ucTid, TRUE); /* prQM->ucRxBaCount-- */ - } - - //4 <2> Add a new BA entry - /* No available entry to store the BA agreement info. Retrun FALSE. */ - if(prQM->ucRxBaCount >= CFG_NUM_OF_RX_BA_AGREEMENTS){ - DBGLOG(QM, ERROR, ("QM: **failure** (limited resource, ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - else{ - /* Find the free-to-use BA entry */ - for(i=0; iarRxBaTable[i].fgIsValid){ - prRxBaEntry = &(prQM->arRxBaTable[i]); - prQM->ucRxBaCount++; - DBGLOG(QM, LOUD, ("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount)); - break; - } - } - - /* If a free-to-use entry is found, configure it and associate it with the STA_REC */ - u2WinSize += CFG_RX_BA_INC_SIZE; - if(prRxBaEntry){ - prRxBaEntry->ucStaRecIdx = ucStaRecIdx; - prRxBaEntry->ucTid = ucTid; - prRxBaEntry->u2WinStart = u2WinStart; - prRxBaEntry->u2WinSize= u2WinSize; - prRxBaEntry->u2WinEnd = ((u2WinStart + u2WinSize - 1) % MAX_SEQ_NO_COUNT); - prRxBaEntry->fgIsValid = TRUE; - prRxBaEntry->fgIsWaitingForPktWithSsn = TRUE; - - g_arMissTimeout[ucStaRecIdx][ucTid] = 0; - - DBGLOG(QM, INFO, ("QM: +RxBA(STA=%d TID=%d WinStart=%d WinEnd=%d WinSize=%d)\n", - ucStaRecIdx, ucTid, - prRxBaEntry->u2WinStart, prRxBaEntry->u2WinEnd, prRxBaEntry->u2WinSize)); - - /* Update the BA entry reference table for per-packet lookup */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = prRxBaEntry; - } - else{ - /* This shall not happen because FW should keep track of the usage of RX BA entries */ - DBGLOG(QM, ERROR, ("QM: **AddBA Error** (ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - } - - return TRUE; -} -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ) -{ - P_RX_BA_ENTRY_T prRxBaEntry; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prFlushedPacketList = NULL; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - DbgPrint("QM: (WARNING) Invalid STA when deleting an RX BA \n"); - return; - } -#endif - - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - prRxBaEntry = prStaRec->aprRxReorderParamRefTbl[ucTid]; - - if(prRxBaEntry){ - - prFlushedPacketList = qmFlushStaRxQueue(prAdapter, ucStaRecIdx, ucTid); - - if(prFlushedPacketList){ - - if(fgFlushToHost) { - wlanProcessQueuedSwRfb(prAdapter, prFlushedPacketList); - } - else { - - P_SW_RFB_T prSwRfb; - P_SW_RFB_T prNextSwRfb; - prSwRfb = prFlushedPacketList; - - do { - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - } - - - } -#if ((QM_TEST_MODE == 0) && (QM_TEST_STA_REC_DEACTIVATION == 0)) - /* Update RX BA entry state. Note that RX queue flush is not done here */ - prRxBaEntry->fgIsValid = FALSE; - prQM->ucRxBaCount--; - - /* Debug */ - #if 0 - DbgPrint("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount); - #endif - - /* Update STA RX BA table */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = NULL; -#endif - - DBGLOG(QM, INFO, ("QM: -RxBA(STA=%d,TID=%d)\n", ucStaRecIdx, ucTid)); - - } - - - /* Debug */ - #if CFG_HIF_RX_STARVATION_WARNING - { - P_RX_CTRL_T prRxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - DBGLOG(QM, TRACE, ("QM: (RX DEBUG) Enqueued: %d / Dequeued: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt)); - } - #endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WMM_INFO_T prIeWmmInfo; - - DEBUGFUNC("mqmProcessAssocReq"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - pucIEStart = pucIE; - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - if (!prAdapter->rWifiVar.fgSupportQoS) { - return; - } - - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_INFO: - { - - UINT_8 ucQosInfo; - UINT_8 ucQosInfoAC; - UINT_8 ucBmpAC; - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsWmmSupported = TRUE; - - prIeWmmInfo = (P_IE_WMM_INFO_T)pucIE; - ucQosInfo = prIeWmmInfo->ucQosInfo; - ucQosInfoAC = ucQosInfo & BITS(0, 3); - - prStaRec->fgIsUapsdSupported = ((ucQosInfoAC)? TRUE: FALSE) & - prAdapter->rWifiVar.fgSupportUAPSD; - - ucBmpAC = 0; - - if( ucQosInfoAC & WMM_QOS_INFO_VO_UAPSD) { - ucBmpAC |= BIT(ACI_VO); - } - if( ucQosInfoAC & WMM_QOS_INFO_VI_UAPSD) { - ucBmpAC |= BIT(ACI_VI); - } - if( ucQosInfoAC & WMM_QOS_INFO_BE_UAPSD) { - ucBmpAC |= BIT(ACI_BE); - } - if( ucQosInfoAC & WMM_QOS_INFO_BK_UAPSD) { - ucBmpAC |= BIT(ACI_BK); - } - - prStaRec->ucBmpTriggerAC = prStaRec->ucBmpDeliveryAC = ucBmpAC; - - prStaRec->ucUapsdSp = (ucQosInfo & WMM_QOS_INFO_MAX_SP_LEN_MASK) >> 5; - - } - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - - break; - - case ELEM_ID_HT_CAP: - /* Some client won't put the WMM IE if client is 802.11n */ - if (IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Req Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessAssocRsp"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - - pucIEStart = pucIE; - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgSupportQoS=%d)\n", - prStaRec->fgIsWmmSupported, prAdapter->rWifiVar.fgSupportQoS)); - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - //if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported)) - if((!prAdapter->rWifiVar.fgSupportQoS)) - { - return; - } - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - break; - - case ELEM_ID_HT_CAP: - /* Some AP won't put the WMM IE if client is 802.11n */ - if ( IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - /* Parse AC parameters and write to HW CRs */ - if((prStaRec->fgIsQoS) && (prStaRec->eStaType == STA_TYPE_LEGACY_AP)){ - mqmParseEdcaParameters(prAdapter, prSwRfb, pucIEStart, u2IELength, TRUE); - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Rsp Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - if(prStaRec->fgIsWmmSupported) { - nicQmUpdateWmmParms(prAdapter, prStaRec->ucNetTypeIndex); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM Parameter IE (in BCN or Assoc_Rsp) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* \param[in] fgForceOverride TRUE: If EDCA parameters are found, always set to HW CRs. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("mqmParseEdcaParameters"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgIsQoS=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsQoS)); - - if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported) || (!prStaRec->fgIsQoS)){ - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Goal: Obtain the EDCA parameters */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - P_AC_QUE_PARMS_T prAcQueParams; - P_IE_WMM_PARAM_T prIeWmmParam; - ENUM_WMM_ACI_T eAci; - PUINT_8 pucWmmParamSetCount; - //int i; - - pucWmmParamSetCount = &(prBssInfo->ucWmmParamSetCount); - - prIeWmmParam = (P_IE_WMM_PARAM_T)pucIE; - - /* Check the Parameter Set Count to determine whether EDCA parameters have been changed */ - if(!fgForceOverride){ - if(*pucWmmParamSetCount == (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT)){ - break; /* Ignore the IE without updating HW CRs */ - } - } - - /* Update Parameter Set Count */ - *pucWmmParamSetCount = (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT); - - /* Update EDCA parameters */ - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prAcQueParams = &prBssInfo->arACQueParms[eAci]; - mqmFillAcQueParam(prIeWmmParam, eAci, prAcQueParams); - - prAcQueParams->fgIsACMSet = - (prAcQueParams->u2Aifsn & WMM_ACIAIFSN_ACM) ? TRUE : FALSE; - prAcQueParams->u2Aifsn &= WMM_ACIAIFSN_AIFSN; - - DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci, prAcQueParams->fgIsACMSet, - prAcQueParams->u2Aifsn, prAcQueParams->u2CWmin, - prAcQueParams->u2CWmax, prAcQueParams->u2TxopLimit)); - } - } - break; - - default: - /* Other WMM QoS IEs. Ignore */ - break; - } - - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - break; - default: - break; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used for parsing EDCA parameters specified in the WMM Parameter IE -* -* \param[in] prAdapter Adapter pointer -* \param[in] prIeWmmParam The pointer to the WMM Parameter IE -* \param[in] u4AcOffset The offset specifying the AC queue for parsing -* \param[in] prHwAcParams The parameter structure used to configure the HW CRs -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ) -{ - prAcQueParams->u2Aifsn = *((PUINT_8)(&(prIeWmmParam->ucAciAifsn_BE)) + (u4AcOffset * 4)); - - prAcQueParams->u2CWmax = - BIT(((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMAX_MASK) - >> WMM_ECW_WMAX_OFFSET)-1; - - prAcQueParams->u2CWmin = - BIT((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMIN_MASK)-1; - - WLAN_GET_FIELD_16(((PUINT_8)(&(prIeWmmParam->aucTxopLimit_BE)) + (u4AcOffset * 4)),&(prAcQueParams->u2TxopLimit)); - - prAcQueParams->ucGuradTime = TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM/11n related IEs in scan results (only for AP peers) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prScanResult The scan result which shall be parsed to obtain needed info -* \param[out] prStaRec The obtained info is stored in the STA_REC -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ) -{ - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessScanResult"); - - ASSERT(prScanResult); - ASSERT(prStaRec); - - /* Reset the flag before parsing */ - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - if (!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - u2IELength = prScanResult->u2IELength; - pucIE = prScanResult->aucIEBuf; - - /* Goal: Determine whether the peer supports WMM/QoS and UAPSDU */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_PARAM_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_INFO_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - default: - /* A WMM QoS IE that doesn't matter. Ignore it. */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - - break; - - default: - /* A WMM IE that doesn't matter. Ignore it. */ - break; - } - } - DBGLOG(QM, LOUD, ("MQM: Scan Result Parsing (WMM=%d, UAPSD=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsUapsdSupported)); - -} - -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - UINT_32 i; - P_STA_RECORD_T prTempStaRec; - - prTempStaRec = NULL; - - ASSERT(prAdapter); - - //4 <1> DA = BMCAST - if(IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - return STA_REC_INDEX_BMCAST; - } - - - //4 <2> Check if an AP STA is present - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if((prTempStaRec->ucNetTypeIndex == eNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - return prTempStaRec->ucIndex; - } - } - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if(prTempStaRec->fgIsValid){ - if(EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, pucEthDestAddr)){ - return prTempStaRec->ucIndex; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - return STA_REC_INDEX_NOT_FOUND; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Info IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_INFO_T prIeWmmInfo; - UINT_32 ucUapsd[] = { - WMM_QOS_INFO_BE_UAPSD, - WMM_QOS_INFO_BK_UAPSD, - WMM_QOS_INFO_VI_UAPSD, - WMM_QOS_INFO_VO_UAPSD - }; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("mqmGenerateWmmInfoIE"); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - if(!prStaRec->fgIsWmmSupported) { - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prIeWmmInfo = (P_IE_WMM_INFO_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmInfo->ucId = ELEM_ID_WMM; - prIeWmmInfo->ucLength = ELEM_MAX_LEN_WMM_INFO; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmInfo->aucOui[0] = aucWfaOui[0]; - prIeWmmInfo->aucOui[1] = aucWfaOui[1]; - prIeWmmInfo->aucOui[2] = aucWfaOui[2]; - prIeWmmInfo->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmInfo->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_INFO; - - prIeWmmInfo->ucVersion = VERSION_WMM; - prIeWmmInfo->ucQosInfo = 0; - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ -// if(prAdapter->rWifiVar.fgSupportUAPSD){ - if(prAdapter->rWifiVar.fgSupportUAPSD && prStaRec->fgIsUapsdSupported){ - - UINT_8 ucQosInfo = 0; - UINT_8 i; - - - /* Static U-APSD setting */ - for(i = ACI_BE; i <= ACI_VO; i++){ - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC & BIT(i)){ - ucQosInfo |= (UINT_8)ucUapsd[i]; - } - } - - - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC) { - switch (prPmProfSetupInfo->ucUapsdSp) { - case WMM_MAX_SP_LENGTH_ALL: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_ALL; - break; - - case WMM_MAX_SP_LENGTH_2: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - - case WMM_MAX_SP_LENGTH_4: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_4; - break; - - case WMM_MAX_SP_LENGTH_6: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_6; - break; - - default: - DBGLOG(QM, INFO, ("MQM: Incorrect SP length \n")); - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - } - } - prIeWmmInfo->ucQosInfo = ucQosInfo; - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmInfo); - -} - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief log2 calculation for CW -* -* @param[in] val value -* -* @return log2(val) -*/ -/*----------------------------------------------------------------------------*/ - -UINT_32 cwlog2(UINT_32 val) { - - UINT_32 n; - n=0; - - while (val >= 512) { n+= 9; val = val >> 9; } - while (val >= 16) { n+= 4; val >>= 4; } - while (val >= 2) { n+= 1; val >>= 1; } - return n; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Param IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_PARAM_T prIeWmmParam; - - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - UINT_8 aucACI[] = { - WMM_ACI_AC_BE, - WMM_ACI_AC_BK, - WMM_ACI_AC_VI, - WMM_ACI_AC_VO - }; - - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - ENUM_WMM_ACI_T eAci; - - DEBUGFUNC("mqmGenerateWmmParamIE"); - DBGLOG(QM, LOUD,("\n")); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(prStaRec) { - if(!prStaRec->fgIsQoS) { - return; - } - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - - if(!prBssInfo->fgIsQBSS) { return; } - -#if 0 // 20120220 frog: update beacon content & change OP mode is a separate event for P2P network. - if( prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT && - prBssInfo->eCurrentOPMode != OP_MODE_BOW) - { - return; - } -#endif - - prIeWmmParam = (P_IE_WMM_PARAM_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmParam->ucId = ELEM_ID_WMM; - prIeWmmParam->ucLength = ELEM_MAX_LEN_WMM_PARAM; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmParam->aucOui[0] = aucWfaOui[0]; - prIeWmmParam->aucOui[1] = aucWfaOui[1]; - prIeWmmParam->aucOui[2] = aucWfaOui[2]; - prIeWmmParam->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmParam->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_PARAM; - - prIeWmmParam->ucVersion = VERSION_WMM; - prIeWmmParam->ucQosInfo = (prBssInfo->ucWmmParamSetCount & WMM_QOS_INFO_PARAM_SET_CNT); - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ - if(prAdapter->rWifiVar.fgSupportUAPSD){ - - prIeWmmParam->ucQosInfo |= WMM_QOS_INFO_UAPSD; - - } - - /* EDCA parameter */ - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - //DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - // eAci,prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet , - // prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmin, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmax, - // prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit)); - - *( ((PUINT_8)(&prIeWmmParam->ucAciAifsn_BE)) + (eAci <<2) ) = (UINT_8) (aucACI[eAci] - | (prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet ? WMM_ACIAIFSN_ACM:0 ) - | (prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn & (WMM_ACIAIFSN_AIFSN))); -#if 1 - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (((prBssInfo->aucCWminLog2ForBcast[eAci] )) & WMM_ECW_WMIN_MASK) - | ((((prBssInfo->aucCWmaxLog2ForBcast[eAci] )) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#else - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmin + 1)) & WMM_ECW_WMIN_MASK) - | ((cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmax + 1)) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#endif - - WLAN_SET_FIELD_16( ((PUINT_8)(prIeWmmParam->aucTxopLimit_BE)) + (eAci<<2) - , prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit); - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmParam); - -} - - - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_WLAN_MAC_HEADER_T prWlanFrame; - UINT_16 u2TxFrameCtrl; - - DEBUGFUNC("qmGetFrameAction"); - -#if (NIC_TX_BUFF_COUNT_TC4 > 2) -#define QM_MGMT_QUUEUD_THRESHOLD 2 -#else -#define QM_MGMT_QUUEUD_THRESHOLD 1 -#endif - - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD <= (NIC_TX_BUFF_COUNT_TC4)); - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD > 0); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkType]); - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIdx); - - /* XXX Check BOW P2P AIS time ot set active */ - if (!IS_BSS_ACTIVE(prBssInfo)) { - if (eFrameType == FRAME_TYPE_MMPDU) { - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - if ((u2TxFrameCtrl == MAC_FRAME_DEAUTH) && (prMsduInfo->pfTxDoneHandler == NULL)) { - return FRAME_ACTION_TX_PKT; - } - - } - - DBGLOG(QM, INFO, ("Drop packets Action (Inactive %u).\n",prBssInfo->ucNetTypeIndex)); - TX_INC_CNT(&prAdapter->rTxCtrl, TX_INACTIVE_BSS_DROP); - return FRAME_ACTION_DROP_PKT; - } - - /* TODO Handle disconnect issue */ - - /* P2P probe Request frame */ - do { - if(eFrameType == FRAME_TYPE_MMPDU) { - ASSERT(prMsduInfo!=NULL); - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - - if (u2TxFrameCtrl == MAC_FRAME_BEACON ) { - if( prBssInfo->fgIsNetAbsent) { - return FRAME_ACTION_DROP_PKT; - } - } - else if (u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - if( prBssInfo->fgIsNetAbsent) { - break; - } - } - else if (u2TxFrameCtrl == MAC_FRAME_DEAUTH) { - if( prBssInfo->fgIsNetAbsent) { - break; - } - DBGLOG(P2P, LOUD, ("Sending DEAUTH Frame\n")); - return FRAME_ACTION_TX_PKT; - } - /* MMPDU with prStaRec && fgIsInUse not check fgIsNetActive */ - else if(u2TxFrameCtrl == MAC_FRAME_ASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_AUTH - || u2TxFrameCtrl == MAC_FRAME_REASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_PROBE_REQ - || u2TxFrameCtrl == MAC_FRAME_ACTION) { - - if(prStaRec){ - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - return FRAME_ACTION_TX_PKT; - } - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - } - - } /* FRAME_TYPE_MMPDU */ - else if ((eFrameType == FRAME_TYPE_802_1X)){ - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - - } /* FRAME_TYPE_802_1X */ - else if ((!IS_BSS_ACTIVE(prBssInfo)) - || (!prStaRec) - || (!prStaRec->fgIsInUse)){ - return FRAME_ACTION_DROP_PKT; - } - }while(0); - - if (prBssInfo->fgIsNetAbsent){ - DBGLOG(QM, LOUD, ("Queue packets (Absent %u).\n",prBssInfo->ucNetTypeIndex)); - return FRAME_ACTION_QUEUE_PKT; - } - - if (prStaRec && prStaRec->fgIsInPS){ - DBGLOG(QM, LOUD, ("Queue packets (PS %u).\n",prStaRec->fgIsInPS)); - return FRAME_ACTION_QUEUE_PKT; - } - else { - switch (eFrameType){ - case FRAME_TYPE_802_1X: - if (!prStaRec->fgIsValid){ - return FRAME_ACTION_QUEUE_PKT; - } - break; - - case FRAME_TYPE_MMPDU: - break; - - default: - ASSERT(0); - } - } - - return FRAME_ACTION_TX_PKT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle BSS change operation Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_BSS_ABSENCE_PRESENCE_T prEventBssStatus; - P_BSS_INFO_T prBssInfo; - BOOLEAN fgIsNetAbsentOld; - - prEventBssStatus = (P_EVENT_BSS_ABSENCE_PRESENCE_T)prEvent; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prEventBssStatus->ucNetTypeIdx]); - fgIsNetAbsentOld = prBssInfo->fgIsNetAbsent; - prBssInfo->fgIsNetAbsent = prEventBssStatus->fgIsAbsent; - prBssInfo->ucBssFreeQuota = prEventBssStatus->ucBssFreeQuota; - - //DBGLOG(QM, TRACE, ("qmHandleEventBssAbsencePresence (ucNetTypeIdx=%d, fgIsAbsent=%d, FreeQuota=%d)\n", - // prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); - - DBGLOG(QM, TRACE, ("NAF=%d,%d,%d\n", - prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); - - if(!prBssInfo->fgIsNetAbsent) { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_27); - } - else { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_28); - } - /* From Absent to Present */ - if ((fgIsNetAbsentOld) && (!prBssInfo->fgIsNetAbsent)){ - kalSetEvent(prAdapter->prGlueInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle STA change PS mode Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_CHANGE_PS_MODE_T prEventStaChangePsMode; - P_STA_RECORD_T prStaRec; - BOOLEAN fgIsInPSOld; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventStaChangePsMode = (P_EVENT_STA_CHANGE_PS_MODE_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaChangePsMode->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec) { - - fgIsInPSOld = prStaRec->fgIsInPS; - prStaRec->fgIsInPS = prEventStaChangePsMode->fgIsInPs; - - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaChangePsMode->ucUpdateMode, - prEventStaChangePsMode->ucFreeQuota); - - //DBGLOG(QM, TRACE, ("qmHandleEventStaChangePsMode (ucStaRecIdx=%d, fgIsInPs=%d)\n", - // prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - - //DBGLOG(QM, TRACE, ("PS=%d,%d\n", - // prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - /* From PS to Awake */ - if ((fgIsInPSOld) && (!prStaRec->fgIsInPS)){ - kalSetEvent(prAdapter->prGlueInfo); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota Event from FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_UPDATE_FREE_QUOTA_T prEventStaUpdateFreeQuota; - P_STA_RECORD_T prStaRec; - - - prEventStaUpdateFreeQuota = (P_EVENT_STA_UPDATE_FREE_QUOTA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaUpdateFreeQuota->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec) { - if(prStaRec->fgIsInPS) { - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota); - - kalSetEvent(prAdapter->prGlueInfo); - } -#if 0 - DBGLOG(QM, TRACE, ("qmHandleEventStaUpdateFreeQuota (ucStaRecIdx=%d, ucUpdateMode=%d, ucFreeQuota=%d)\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); -#endif - - DBGLOG(QM, TRACE, ("UFQ=%d,%d,%d\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); - - - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota -* -* \param[in] prStaRec the STA -* \param[in] ucUpdateMode the method to update free quota -* \param[in] ucFreeQuota the value for update -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ) -{ - - UINT_8 ucFreeQuotaForNonDelivery; - UINT_8 ucFreeQuotaForDelivery; - - ASSERT(prStaRec); - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota orig ucFreeQuota=%d Mode %u New %u\n", - prStaRec->ucFreeQuota, ucUpdateMode, ucFreeQuota )); - - if(!prStaRec->fgIsInPS)return; - - switch (ucUpdateMode) { - case FREE_QUOTA_UPDATE_MODE_INIT: - case FREE_QUOTA_UPDATE_MODE_OVERWRITE: - prStaRec->ucFreeQuota = ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_INCREASE: - prStaRec->ucFreeQuota += ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_DECREASE: - prStaRec->ucFreeQuota -= ucFreeQuota; - break; - default: - ASSERT(0); - } - - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota new ucFreeQuota=%d)\n", - prStaRec->ucFreeQuota )); - - ucFreeQuota = prStaRec->ucFreeQuota; - - ucFreeQuotaForNonDelivery = 0; - ucFreeQuotaForDelivery = 0; - - if(ucFreeQuota > 0) { - if( prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - /* XXX We should assign quota to aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES] */ - - if(prStaRec->ucFreeQuotaForNonDelivery > 0 && prStaRec->ucFreeQuotaForDelivery > 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery == 0 && prStaRec->ucFreeQuotaForDelivery == 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery > 0) { - /* NonDelivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForNonDelivery = 2; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery ; - } - else { - ucFreeQuotaForDelivery = ucFreeQuota; - ucFreeQuotaForNonDelivery = 0; - } - } - else if(prStaRec->ucFreeQuotaForDelivery > 0) { - /* Delivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForDelivery = 2; - ucFreeQuotaForNonDelivery = ucFreeQuota - ucFreeQuotaForDelivery; - } - else { - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } - - } - else { - /* !prStaRec->fgIsUapsdSupported */ - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } /* ucFreeQuota > 0 */ - - prStaRec->ucFreeQuotaForDelivery = ucFreeQuotaForDelivery; - prStaRec->ucFreeQuotaForNonDelivery = ucFreeQuotaForNonDelivery; - - DBGLOG(QM, LOUD, ("new QuotaForDelivery = %d QuotaForNonDelivery = %d\n", - prStaRec->ucFreeQuotaForDelivery, prStaRec->ucFreeQuotaForNonDelivery )); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the reorder queued RX packets -* -* \param[in] (none) -* -* \return The number of queued RX packets -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Total; - P_QUE_MGT_T prQM = &prAdapter->rQM; - u4Total = 0; - /* XXX The summation may impact the performance */ - for(i =0; iarRxBaTable[i].rReOrderQue.u4NumElem; -#if DBG && 0 - if(QUEUE_IS_EMPTY(&(prQM->arRxBaTable[i].rReOrderQue))){ - ASSERT(prQM->arRxBaTable[i].rReOrderQue == 0); - } -#endif - } - ASSERT(u4Total <=( CFG_NUM_OF_QM_RX_PKT_NUM*2)); - return u4Total; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_bow.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_bow.c deleted file mode 100755 index bdd30aa9ee72..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_bow.c +++ /dev/null @@ -1,1369 +0,0 @@ -/* -** $Id: @(#) gl_bow.c@@ -*/ - -/*! \file gl_bow.c - \brief Main routines of Linux driver interface for 802.11 PAL (BT 3.0 + HS) - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_bow.c $ - * - * 02 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00235223] [Rose][ICS][Cross Feature][AEE-IPANIC]The device reboot automatically and then the "KE" pops up after you turn on the "Airplane mode".(once) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered or when wlan GLUE_FLAG_HALT is set. - * - * This is a workaround for BOW driver robustness, happens only in ICS. - * - * Root cause should be fixed by CR [ALPS00231570] - * - * 02 03 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00118114] [Rose][ICS][Free Test][Bluetooth]The "KE" pops up after you turn on the airplane mode.(5/5) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered. - * - * Happens only in ICS. - * - * Notified PAL owener to reivew MTKBT/PAL closing BOW char dev procedure. - * - * [Side Effect] - * None. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 25 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Modify ampc0 char device for major number 151 for all MT6575 projects. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * unlocked_ioctl returns as long instead of int. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * migrate to unlocked ioctl interface - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * replace alloc_netdev to alloc_netdev_mq for BoW - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update net register and BOW for concurrent features. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * correct typo: POLLOUT instead of POLL_OUT - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * multiple BoW interfaces need to compare with peer address - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * fix kalIndicateBOWEvent. - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include "bss.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* @FIXME if there is command/event with payload length > 28 */ -#define MAX_BUFFER_SIZE (64) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_BOW_TEST - UINT_32 g_u4PrevSysTime = 0; - UINT_32 g_u4CurrentSysTime = 0; - UINT_32 g_arBowRevPalPacketTime[11]; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -// forward declarations -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg); - -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait); - -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp); - -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp); - - -// character file operations -static const struct file_operations mt6620_ampc_fops = { - //.owner = THIS_MODULE, - .read = mt6620_ampc_read, - .write = mt6620_ampc_write, - .unlocked_ioctl = mt6620_ampc_ioctl, - .poll = mt6620_ampc_poll, - .open = mt6620_ampc_open, - .release = mt6620_ampc_release, -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for character device to communicate with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == TRUE) { - return FALSE; - } - else { -#if 0 - // 1. allocate major number dynamically - - if(alloc_chrdev_region(&(prGlueInfo->rBowInfo.u4DeviceNumber), - 0, // first minor number - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - -#if 1 - -#if defined (CONFIG_AMPC_CDEV_NUM) - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(CONFIG_AMPC_CDEV_NUM, 0); -#else - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(226, 0); -#endif - - if(register_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - - // 2. spin-lock initialization - // spin_lock_init(&(prGlueInfo->rBowInfo.rSpinLock)); - - // 3. initialize kfifo -/* prGlueInfo->rBowInfo.prKfifo = kfifo_alloc(GLUE_BOW_KFIFO_DEPTH, - GFP_KERNEL, - &(prGlueInfo->rBowInfo.rSpinLock));*/ - if ((kfifo_alloc((struct kfifo *) &(prGlueInfo->rBowInfo.rKfifo), GLUE_BOW_KFIFO_DEPTH, GFP_KERNEL))) - goto fail_kfifo_alloc; - -// if(prGlueInfo->rBowInfo.prKfifo == NULL) - if(&(prGlueInfo->rBowInfo.rKfifo) == NULL) - goto fail_kfifo_alloc; - - // 4. initialize cdev - cdev_init(&(prGlueInfo->rBowInfo.cdev), &mt6620_ampc_fops); - // prGlueInfo->rBowInfo.cdev.owner = THIS_MODULE; - prGlueInfo->rBowInfo.cdev.ops = &mt6620_ampc_fops; - - // 5. add character device - if(cdev_add(&(prGlueInfo->rBowInfo.cdev), - prGlueInfo->rBowInfo.u4DeviceNumber, - 1)) - goto fail_cdev_add; - - - // 6. in queue initialization - init_waitqueue_head(&(prGlueInfo->rBowInfo.outq)); - - // 7. finish - prGlueInfo->rBowInfo.fgIsRegistered = TRUE; - return TRUE; - -fail_cdev_add: - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); -fail_kfifo_alloc: - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - return FALSE; - } -} /* end of glRegisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister character device for communicating with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == FALSE) { - return FALSE; - } - else { - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - - // 1. free netdev if necessary -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prGlueInfo); -#endif - - // 2. removal of character device - cdev_del(&(prGlueInfo->rBowInfo.cdev)); - - // 3. free kfifo -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// prGlueInfo->rBowInfo.prKfifo = NULL; -// prGlueInfo->rBowInfo.rKfifo = NULL; - - // 4. free device number - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - - return TRUE; - } -} /* end of glUnregisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief read handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - ssize_t retval; - - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // size check -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) >= size) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) >= size) - retval = size; - else - retval = kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); -// retval = kfifo_len(prGlueInfo->rBowInfo.prKfifo); - -// kfifo_get(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); -// kfifo_out(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); - if (!(kfifo_out(&(prGlueInfo->rBowInfo.rKfifo), aucBuffer, retval))) - retval = -EIO; - - if(copy_to_user(buf, aucBuffer, retval)) - retval = -EIO; - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief write handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ -#if CFG_BOW_TEST - UINT_8 i; -#endif - - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - P_AMPC_COMMAND prCmd; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - if(size > MAX_BUFFER_SIZE) - return -EINVAL; - else if(copy_from_user(aucBuffer, buf, size)) - return -EIO; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP driver CMD buffer size : %d.\n", size)); - - for(i = 0; i < MAX_BUFFER_SIZE; i++) - { - DBGLOG(BOW, EVENT, ("AMP write content : 0x%x.\n", aucBuffer[i])); - } - - DBGLOG(BOW, EVENT, ("BoW CMD write.\n")); -#endif - - prCmd = (P_AMPC_COMMAND) aucBuffer; - - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP write content payload length : %d.\n", prCmd->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("AMP write content header length : %d.\n", sizeof(AMPC_COMMAND_HEADER_T))); - #endif - - // size check - if(prCmd->rHeader.u2PayloadLength + sizeof(AMPC_COMMAND_HEADER_T) != size) - { - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Wrong CMD total length.\n")); - #endif - - return -EINVAL; - } - - if(wlanbowHandleCommand(prGlueInfo->prAdapter, prCmd) == WLAN_STATUS_SUCCESS) - return size; - else - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg) -{ - int err = 0; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // permission check - if(_IOC_DIR(cmd) & _IOC_READ) - err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd)); - else if (_IOC_DIR(cmd) & _IOC_WRITE) - err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd)); - if (err) - return -EFAULT; - - // no ioctl is implemented yet - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait) -{ - unsigned int retval; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - poll_wait(filp, &prGlueInfo->rBowInfo.outq, wait); - - retval = (POLLOUT | POLLWRNORM); // always accepts incoming command packets - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLOUT | POLLWRNORM, %x\n", retval)); - -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) > 0) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) > 0) - { - retval |= (POLLIN | POLLRDNORM); - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLIN | POLLRDNORM, %x\n", retval)); - - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief open handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - P_GL_BOW_INFO prBowInfo; - - prBowInfo = container_of(inodep->i_cdev, GL_BOW_INFO, cdev); - ASSERT(prBowInfo); - - prGlueInfo = container_of(prBowInfo, GLUE_INFO_T, rBowInfo); - ASSERT(prGlueInfo); - - // set-up private data - filp->private_data = prGlueInfo; - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief close handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to indicate event for Bluetooth over Wi-Fi -* -* \param[in] -* prGlueInfo -* prEvent -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ) -{ - size_t u4AvailSize, u4EventSize; - - ASSERT(prGlueInfo); - ASSERT(prEvent); - - // check device - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return; - } - -/* u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(prGlueInfo->rBowInfo.prKfifo);*/ - - u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); - - - u4EventSize = - prEvent->rHeader.u2PayloadLength + sizeof(AMPC_EVENT_HEADER_T); - - // check kfifo availability - if(u4AvailSize < u4EventSize) { - DBGLOG(BOW, EVENT, ("[bow] no space for event: %d/%d\n", - u4EventSize, - u4AvailSize)); - return; - } - - // queue into kfifo -// kfifo_put(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); -// kfifo_in(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); - kfifo_in(&(prGlueInfo->rBowInfo.rKfifo), (PUINT_8)prEvent, u4EventSize); - wake_up_interruptible(&(prGlueInfo->rBowInfo.outq)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState.\n")); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalGetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); - -#endif - - return prGlueInfo->rBowInfo.aeState[i]; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState.\n")); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.arPeerAddr, %x:%x:%x:%x:%x:%x.\n", - prGlueInfo->rBowInfo.arPeerAddr[0], - prGlueInfo->rBowInfo.arPeerAddr[1], - prGlueInfo->rBowInfo.arPeerAddr[2], - prGlueInfo->rBowInfo.arPeerAddr[3], - prGlueInfo->rBowInfo.arPeerAddr[4], - prGlueInfo->rBowInfo.arPeerAddr[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - prGlueInfo->rBowInfo.aeState[i] = eBowState; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); -#endif - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi global state -* -* \param[in] -* prGlueInfo -* -* \return -* BOW_DEVICE_STATE_DISCONNECTED -* in case there is no BoW connection or -* BoW connection under initialization -* -* BOW_DEVICE_STATE_STARTING -* in case there is no BoW connection but -* some BoW connection under initialization -* -* BOW_DEVICE_STATE_CONNECTED -* in case there is any BoW connection available -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - -//Henry, can reduce this logic to indentify state change - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_CONNECTED) { - return BOW_DEVICE_STATE_CONNECTED; - } - } - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_STARTING) { - return BOW_DEVICE_STATE_STARTING; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rBowInfo.u4FreqInKHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: Responder -* 1: Initiator -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - return prGlueInfo->rBowInfo.aucRole[i]; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* ucRole -* 0: Responder -* 1: Initiator -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 1); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - prGlueInfo->rBowInfo.aucRole[i] = ucRole; //Henry, 0 : Responder, 1 : Initiator - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get available Bluetooth-over-Wi-Fi physical link number -* -* \param[in] -* prGlueInfo -* \return -* UINT_32 -* how many physical links are aviailable -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i; - UINT_8 ucLinkCount = 0; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_DISCONNECTED) { - ucLinkCount++; - } - } - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowAvailablePhysicalLinkCount, ucLinkCount, %c.\n", ucLinkCount)); -#endif - - return ucLinkCount; -} - -#if CFG_BOW_SEPARATE_DATA_PATH - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowOpen( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); - - /* 2. turn of carrier */ - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -}; - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is TX entry point of NET DEVICE. - * - * \param[in] prSkb Pointer of the sk_buff to be sent - * \param[in] prDev Pointer to struct net_device - * - * \retval NETDEV_TX_OK - on success. - * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - */ -/*----------------------------------------------------------------------------*/ -static int -bowHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - PUINT_8 aucLookAheadBuf = NULL; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - aucLookAheadBuf = prSkb->data; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if (!(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) || (prSkb->len > 1514)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Invalid BOW packet, skip tx\n")); -#endif - - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(BOW, TRACE, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Tx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n"); -#endif - -#if CFG_BOW_TEST -// g_u4CurrentSysTime = (OS_SYSTIME)kalGetTimeTick(); - - g_u4CurrentSysTime = (OS_SYSTIME) jiffies_to_usecs(jiffies); - - i = g_u4CurrentSysTime - g_u4PrevSysTime; - - if ( (i >> 10) > 0) - { - i = 10; - } - else - { - i = i >> 7; - } - - g_arBowRevPalPacketTime[i]++; - - g_u4PrevSysTime = g_u4CurrentSysTime; - -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} - - -// callbacks for netdevice -static const struct net_device_ops bow_netdev_ops = { - .ndo_open = bowOpen, - .ndo_stop = bowStop, - .ndo_start_xmit = bowHardStartXmit, -}; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief initialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* prDevName -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ) -{ - P_ADAPTER_T prAdapter; - P_GL_HIF_INFO_T prHif; - PARAM_MAC_ADDRESS rMacAddr; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == FALSE) { - prGlueInfo->rBowInfo.prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - - if (!prGlueInfo->rBowInfo.prDevHandler) { - return FALSE; - } - else { - /* 1. setup netdev */ - /* 1.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->rBowInfo.prDevHandler)) = prGlueInfo; - - /* 1.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] |= 0x2; // change to local administrated address - memcpy(prGlueInfo->rBowInfo.prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->rBowInfo.prDevHandler->perm_addr, prGlueInfo->rBowInfo.prDevHandler->dev_addr, ETH_ALEN); - - /* 1.3 register callback functions */ - prGlueInfo->rBowInfo.prDevHandler->netdev_ops = &bow_netdev_ops; - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->rBowInfo.prDevHandler, &(prHif->func->dev)); -#endif - - register_netdev(prGlueInfo->rBowInfo.prDevHandler); - - /* 2. net device initialize */ - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* 3. finish */ - prGlueInfo->rBowInfo.fgIsNetRegistered = TRUE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief uninitialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - //ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == TRUE) { - - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - - if(netif_carrier_ok(prGlueInfo->rBowInfo.prDevHandler)) { - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->rBowInfo.prDevHandler); - free_netdev(prGlueInfo->rBowInfo.prDevHandler); - prGlueInfo->rBowInfo.prDevHandler = NULL; - - return TRUE; - - } - else { - return FALSE; - } -} - -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_cfg80211.c deleted file mode 100755 index 8c8649b45443..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_cfg80211.c +++ /dev/null @@ -1,1661 +0,0 @@ -/* -** $Id: @(#) gl_cfg80211.c@@ -*/ - -/*! \file gl_cfg80211.c - \brief Main routines for supporintg MT6620 cfg80211 control interface - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_cfg80211.c $ -** -** 08 29 2012 chinglan.wang -** [ALPS00349655] [Need Patch] [Volunteer Patch] [ALPS.JB] Daily build warning on [mt6575_phone_mhl-eng] -** . - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_SUPPORT_WAPI - extern UINT_8 keyStructBuf[1024]; /* add/remove key shared buffer */ -#else - extern UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if RSSI_ENHANCE - -#define RSSI_DEG(x...) //printk(x) - -#define RSSI_ENHANCE_VALUE (10) -#define MAX_COUNT_OF_RSSI_HISTORY (8) -typedef struct _RSSI_HISTORY_T -{ - int counts; - int history[MAX_COUNT_OF_RSSI_HISTORY]; -} RSSI_HISTORY_T, *P_RSSI_HISTORY_T; - -RSSI_HISTORY_T gRssiHistory; - -extern void initScanRssiHistory(void); -void initRssiHistory(void) -{ - printk("initRssiHistory.\n"); - memset(&gRssiHistory, 0, sizeof(RSSI_HISTORY_T)); -} - -int processRssiHistory(int newRssi) -{ - int rstRssi, i, total = 0; - int index = gRssiHistory.counts; - int *history = &gRssiHistory.history[0]; - - RSSI_DEG("---- newRssi = %d\n", newRssi); - - if(index != 0) { - if(abs(newRssi-history[index-1]) >= 10) { // rssi change too much, discard history rssi - index = 0; - } - } - - // save new rssi - if(index >= MAX_COUNT_OF_RSSI_HISTORY) { - memmove(&history[0], &history[1], (MAX_COUNT_OF_RSSI_HISTORY-1)*sizeof(int)); - history[MAX_COUNT_OF_RSSI_HISTORY-1] = newRssi; - } else { - history[index++] = newRssi; - } - gRssiHistory.counts = index; - - // calc result rssi - for(i = 0; i < index; i++) { - RSSI_DEG("%d, ", history[i]); - total += history[i]; - } - RSSI_DEG("\n"); - - rstRssi = total/gRssiHistory.counts; - rstRssi += RSSI_ENHANCE_VALUE; - RSSI_DEG("---- rstRssi = %d\n", rstRssi); - - if(rstRssi > -10) - rstRssi = -10; - - return rstRssi; -} - -#endif - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for change STA type between - * 1. Infrastructure Client (Non-AP STA) - * 2. Ad-Hoc IBSS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(type == NL80211_IFTYPE_STATION) { - eOpMode = NET_TYPE_INFRA; - } - else if(type == NL80211_IFTYPE_ADHOC) { - eOpMode = NET_TYPE_IBSS; - } - else { - return -EINVAL; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set infrastructure mode error:%lx\n", rStatus)); - } - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for adding key - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - PARAM_KEY_T rKey; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - INT_32 i4Rslt = -EINVAL; - UINT_32 u4BufLen = 0; - UINT_8 tmp1[8]; - UINT_8 tmp2[8]; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rKey, sizeof(PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - - if(mac_addr) { - COPY_MAC_ADDR(rKey.arBSSID, mac_addr); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - //rKey.u4KeyIndex |= BIT(31); //Enable BIT 31 will make tx use bc key id, should use pairwise key id 0 - } - - if(params->key) { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - if (params->key_len == 32) { - kalMemCopy(tmp1, ¶ms->key[16], 8); - kalMemCopy(tmp2, ¶ms->key[24], 8); - kalMemCopy(&rKey.aucKeyMaterial[16], tmp2, 8); - kalMemCopy(&rKey.aucKeyMaterial[24], tmp1, 8); - } - } - - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for removing key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_32 u4BufLen = 0; - INT_32 i4Rslt = -EINVAL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - COPY_MAC_ADDR(rRemoveKey.arBSSID, mac_addr); - rRemoveKey.u4KeyIndex = key_index; - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - &rRemoveKey, - rRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("remove key error:%lx\n", rStatus)); - } - else { - i4Rslt = 0; - } - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for setting default key on an interface - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting station information such as RSSI - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4BufLen, u4Rate; - INT_32 i4Rssi; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(arBssid, MAC_ADDR_LEN); - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &u4BufLen); - - /* 1. check BSSID */ - if(UNEQUAL_MAC_ADDR(arBssid, mac)) { - /* wrong MAC address */ - DBGLOG(REQ, WARN, ("incorrect BSSID: ["MACSTR"] currently connected BSSID["MACSTR"]\n", - MAC2STR(mac), MAC2STR(arBssid))); - return -ENOENT; - } - - /* 2. fill TX rate */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - sinfo->filled |= STATION_INFO_TX_BITRATE; - sinfo->txrate.legacy = u4Rate / 1000; /* convert from 100bps to 100kbps */ - } - - if(prGlueInfo->eParamMediaStateIndicated != PARAM_MEDIA_STATE_CONNECTED) { - /* not connected */ - DBGLOG(REQ, WARN, ("not yet connected\n")); - } - else { - /* 3. fill RSSI */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - #if RSSI_ENHANCE - i4Rssi = processRssiHistory(i4Rssi); - #endif - sinfo->filled |= STATION_INFO_SIGNAL; - sinfo->signal = i4Rssi; /* dBm */ - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to do a scan - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PARAM_SCAN_REQUEST_EXT_T rScanRequest; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rScanRequest, sizeof(PARAM_SCAN_REQUEST_EXT_T)); - - /* check if there is any pending scan not yet finished */ - if(prGlueInfo->prScanRequest != NULL) { - return -EBUSY; - } - - if(request->n_ssids == 0) { - rScanRequest.rSsid.u4SsidLen = 0; - } - else if(request->n_ssids == 1) { - COPY_SSID(rScanRequest.rSsid.aucSsid, rScanRequest.rSsid.u4SsidLen, request->ssids[0].ssid, request->ssids[0].ssid_len); - } - else { - return -EINVAL; - } - - if(request->ie_len > 0) { - rScanRequest.u4IELength = request->ie_len; - rScanRequest.pucIE = (PUINT_8)(request->ie); - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScanExt, - &rScanRequest, - sizeof(PARAM_SCAN_REQUEST_EXT_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("scan error:%lx\n", rStatus)); - return -EINVAL; - } - - prGlueInfo->prScanRequest = request; - - return 0; -} - -static UINT_8 wepBuf[48]; - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to connect to - * the ESS with the specified parameters - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - UINT_32 cipher; - PARAM_SSID_T rNewSsid; - BOOLEAN fgCarryWPSIE = FALSE; - ENUM_PARAM_OP_MODE_T eOpMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if RSSI_ENHANCE - initRssiHistory(); -#endif - - if (prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode > NET_TYPE_AUTO_SWITCH) - eOpMode = NET_TYPE_AUTO_SWITCH; - else - eOpMode = prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetInfrastructureMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_1) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA; - else if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_2) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA2; - else - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - - switch (sme->auth_type) { - case NL80211_AUTHTYPE_OPEN_SYSTEM: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - break; - case NL80211_AUTHTYPE_SHARED_KEY: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY; - break; - default: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM | IW_AUTH_ALG_SHARED_KEY; - break; - } - - if (sme->crypto.n_ciphers_pairwise) { - switch (sme->crypto.ciphers_pairwise[0]) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher pairwise (%d)\n", - sme->crypto.ciphers_pairwise[0])); - return -EINVAL; - } - } - - if (sme->crypto.cipher_group) { - switch (sme->crypto.cipher_group) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - - if (sme->crypto.n_akm_suites) { - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } else if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA2; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - } - - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - } - - prGlueInfo->rWpaInfo.fgPrivacyInvoke = sme->privacy; - - //prGlueInfo->prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - prGlueInfo->fgWpsActive = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; - - if (sme->ie && sme->ie_len > 0) { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PUINT_8 prDesiredIE = NULL; - -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - sme->ie, - sme->ie_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("[wapi] set wapi assoc info error:%lx\n", rStatus)); - } -#endif -#if CFG_SUPPORT_WPS2 - if (wextSrchDesiredWPSIE(sme->ie, - sme->ie_len, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - prGlueInfo->fgWpsActive = TRUE; - fgCarryWPSIE = TRUE; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("WSC] set WSC assoc info error:%lx\n", rStatus)); - } - } -#endif - } - - /* clear WSC Assoc IE buffer in case WPS IE is not detected */ - if(fgCarryWPSIE == FALSE) { - kalMemZero(&prGlueInfo->aucWSCAssocInfoIE, 200); - prGlueInfo->u2WSCAssocInfoIELen = 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set auth mode error:%lx\n", rStatus)); - } - - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | prGlueInfo->rWpaInfo.u4CipherPairwise; - - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) { - if (cipher & IW_AUTH_CIPHER_CCMP) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set encryption mode error:%lx\n", rStatus)); - } - - if (sme->key_len != 0 && prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - kalMemSet(prWepKey, 0, sizeof(prWepKey)); - prWepKey->u4Length = 12 + sme->key_len; - prWepKey->u4KeyLength = (UINT_32) sme->key_len; - prWepKey->u4KeyIndex = (UINT_32) sme->key_idx; - prWepKey->u4KeyIndex |= BIT(31); - if (prWepKey->u4KeyLength > 32) { - DBGLOG(REQ, WARN, ("Too long key length (%u)\n", prWepKey->u4KeyLength)); - return -EINVAL; - } - kalMemCopy(prWepKey->aucKeyMaterial, sme->key, prWepKey->u4KeyLength); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - } - - if(sme->ssid_len > 0) { - /* connect by SSID */ - COPY_SSID(rNewSsid.aucSsid, rNewSsid.u4SsidLen, sme->ssid, sme->ssid_len); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EINVAL; - } - } - else { - /* connect by BSSID */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssid, - (PVOID) sme->bssid, - sizeof(MAC_ADDR_LEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set BSSID:%lx\n", rStatus)); - return -EINVAL; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to disconnect from - * currently connected ESS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if RSSI_ENHANCE - initRssiHistory(); - initScanRssiHistory(); -#endif - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to join an IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ) -{ - PARAM_SSID_T rNewSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - UINT_32 u4BufLen = 0; - WLAN_STATUS rStatus; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - /* set channel */ - if(params->channel) { - u4ChnlFreq = nicChannelNum2Freq(params->channel->hw_value); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - } - - /* set SSID */ - kalMemCopy(rNewSsid.aucSsid, params->ssid, params->ssid_len); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; - - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to leave from IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to configure - * WLAN power managemenet - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PARAM_POWER_MODE ePowerMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(enabled) { - if(timeout == -1) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - ePowerMode = Param_PowerModeMAX_PSP; - } - } - else { - ePowerMode = Param_PowerModeCAM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set_power_mgmt error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cache - * a PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, pmksa->bssid, 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, pmksa->pmkid, IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to remove - * a cached PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to flush - * all cached PMKID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to stay on a - * specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel staying - * on a specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to send a management frame - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel the wait time - * from transmitting a management frame on another channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -#if CONFIG_NL80211_TESTMODE - -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SET_KEY_EXTS prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)NULL; - struct iw_encode_exts *prIWEncExt = (struct iw_encode_exts *)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4BufLen = 0; - - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) { - prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)data; - } - - if(prParams) { - prIWEncExt = (struct iw_encode_exts *) &prParams->ext; - } - - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - /* KeyID */ - prWpiKey->ucKeyID = prParams->key_index; - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - -//#if CFG_SUPPORT_WAPI - //handle_sec_msg_final(prIWEncExt->key, 32, prIWEncExt->key, NULL); -//#endif - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rstatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rstatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - fgIsValid = -EFAULT; - } - - } - return fgIsValid; -} -#endif - - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SW_CMD_PARAMS prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4SetInfoLen = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) - prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)data; - - if(prParams) { - if(prParams->set == 1){ - rstatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)wlanoidSetSwCtrlWrite, - &prParams->adr, - (UINT_32)8, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - } - - if (WLAN_STATUS_SUCCESS != rstatus) { - fgIsValid = -EFAULT; - } - - return fgIsValid; -} - -int mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_MODE_PARAMS prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)NULL; - BOOLEAN fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)data; - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* SW cmd */ - if(mtk_cfg80211_testmode_sw_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - case 2: /* WAPI */ -#if CFG_SUPPORT_WAPI - if(mtk_cfg80211_testmode_set_key_ext(wiphy, data, len)) - fgIsValid = TRUE; -#endif - break; - default: - fgIsValid = TRUE; - break; - } - } - - - return fgIsValid; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_init.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_init.c deleted file mode 100755 index d7a817fbae13..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_init.c +++ /dev/null @@ -1,3399 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_init.c#7 $ -*/ - -/*! \file gl_init.c - \brief Main routines of Linux driver - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_init.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 25 2012 yuche.tsai - * NULL - * Fix reset KE issue. - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 02 2012 terry.wu - * NULL - * EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem);. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 12 22 2011 george.huang - * [WCXRP00000905] [MT6628 Wi-Fi][FW] Code refinement for ROM/ RAM module dependency - * using global variable instead of stack for setting wlanoidSetNetworkAddress(), due to buffer may be released before TX thread handling - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 06 2011 eddie.chen - * [WCXRP00001027] [MT6628 Wi-Fi][Firmware/Driver] Tx fragmentation - * Add rlmDomainGetChnlList symbol. - * - * 09 22 2011 cm.chang - * NULL - * Safer writng stype to avoid unitialized regitry structure - * - * 09 21 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Avoid possible structure alignment problem - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * expose scnQuerySparseChannel() for P2P-FSM. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 07 2011 wh.su - * [WCXRP00000839] [MT6620 Wi-Fi][Driver] Add the dumpMemory8 and dumpMemory32 EXPORT_SYMBOL - * Add the dumpMemory8 symbol export for debug mode. - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Export one symbol for enhancement. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Modify some driver connection flow or behavior to pass Sigma test more easier.. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 11 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * export wlan functions to p2p - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * glBusFreeIrq() should use the same pvCookie as glBusSetIrq() or request_irq()/free_irq() won't work as a pair. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * fix typo. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * reverse order to prevent probing racing. - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine the queue_select function - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export nicQmUpdateWmmParms. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 24 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Support ARP filter during suspended - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 17 2011 terry.wu - * [WCXRP00000459] [MT6620 Wi-Fi][Driver] Fix deference null pointer problem in wlanRemove - * Fix deference a null pointer problem in wlanRemove. - * - * 02 16 2011 jeffrey.chang - * NULL - * fix compilig error - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add one more export symbol. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * Export Deactivation Network. - * - * 02 01 2011 jeffrey.chang - * [WCXRP00000414] KAL Timer is not unregistered when driver not loaded - * Unregister the KAL timer during driver unloading - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 15 2010 cp.wu - * [WCXRP00000265] [MT6620 Wi-Fi][Driver] Remove set_mac_address routine from legacy Wi-Fi Android driver - * remove set MAC address. MAC address is always loaded from NVRAM instead. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 21 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * . - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000106] [MT6620 Wi-Fi][Driver] Enable setting multicast callback in Android - * . - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 yarco.yang - * NULL - * Support Linux x86 - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 jeffrey.chang - * NULL - * fix memory leak for module unloading - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Query statistics from firmware - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify tcp/ip checksum offload flags - * - * 04 16 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix tcp/ip checksum offload bug - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * * (2) disable set Multicast address during atomic context - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding debug module - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix f/w download start and load address by using config.h - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download support - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\52 2009-10-27 22:49:59 GMT mtk01090 -** Fix compile error for Linux EHPI driver -** \main\maintrunk.MT5921\51 2009-10-20 17:38:22 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\50 2009-10-08 10:33:11 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\49 2009-09-28 20:19:05 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\48 2009-09-03 13:58:46 GMT mtk01088 -** remove non-used code -** \main\maintrunk.MT5921\47 2009-09-03 11:40:25 GMT mtk01088 -** adding the module parameter for wapi -** \main\maintrunk.MT5921\46 2009-08-18 22:56:41 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\45 2009-07-06 20:53:00 GMT mtk01088 -** adding the code to check the wapi 1x frame -** \main\maintrunk.MT5921\44 2009-06-23 23:18:55 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\43 2009-02-16 23:46:51 GMT mtk01461 -** Revise the order of increasing u4TxPendingFrameNum because of CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\42 2009-01-22 13:11:59 GMT mtk01088 -** set the tid and 1x value at same packet reserved field -** \main\maintrunk.MT5921\41 2008-10-20 22:43:53 GMT mtk01104 -** Fix wrong variable name "prDev" in wlanStop() -** \main\maintrunk.MT5921\40 2008-10-16 15:37:10 GMT mtk01461 -** add handle WLAN_STATUS_SUCCESS in wlanHardStartXmit() for CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\39 2008-09-25 15:56:21 GMT mtk01461 -** Update driver for Code review -** \main\maintrunk.MT5921\38 2008-09-05 17:25:07 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\37 2008-09-02 10:57:06 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\36 2008-08-05 01:53:28 GMT mtk01461 -** Add support for linux statistics -** \main\maintrunk.MT5921\35 2008-08-04 16:52:58 GMT mtk01461 -** Fix ASSERT if removing module in BG_SSID_SCAN state -** \main\maintrunk.MT5921\34 2008-06-13 22:52:24 GMT mtk01461 -** Revise status code handling in wlanHardStartXmit() for WLAN_STATUS_SUCCESS -** \main\maintrunk.MT5921\33 2008-05-30 18:56:53 GMT mtk01461 -** Not use wlanoidSetCurrentAddrForLinux() -** \main\maintrunk.MT5921\32 2008-05-30 14:39:40 GMT mtk01461 -** Remove WMM Assoc Flag -** \main\maintrunk.MT5921\31 2008-05-23 10:26:40 GMT mtk01084 -** modify wlanISR interface -** \main\maintrunk.MT5921\30 2008-05-03 18:52:36 GMT mtk01461 -** Fix Unset Broadcast filter when setMulticast -** \main\maintrunk.MT5921\29 2008-05-03 15:17:26 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\28 2008-04-24 22:48:21 GMT mtk01461 -** Revise set multicast function by using windows oid style for LP own back -** \main\maintrunk.MT5921\27 2008-04-24 12:00:08 GMT mtk01461 -** Fix multicast setting in Linux and add comment -** \main\maintrunk.MT5921\26 2008-03-28 10:40:22 GMT mtk01461 -** Fix set mac address func in Linux -** \main\maintrunk.MT5921\25 2008-03-26 15:37:26 GMT mtk01461 -** Add set MAC Address -** \main\maintrunk.MT5921\24 2008-03-26 14:24:53 GMT mtk01461 -** For Linux, set net_device has feature with checksum offload by default -** \main\maintrunk.MT5921\23 2008-03-11 14:50:52 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT5921\22 2008-02-29 15:35:20 GMT mtk01088 -** add 1x decide code for sw port control -** \main\maintrunk.MT5921\21 2008-02-21 15:01:54 GMT mtk01461 -** Rearrange the set off place of GLUE spin lock in HardStartXmit -** \main\maintrunk.MT5921\20 2008-02-12 23:26:50 GMT mtk01461 -** Add debug option - Packet Order for Linux and add debug level - Event -** \main\maintrunk.MT5921\19 2007-12-11 00:11:12 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\18 2007-11-30 17:02:25 GMT mtk01425 -** 1. Set Rx multicast packets mode before setting the address list -** \main\maintrunk.MT5921\17 2007-11-26 19:44:24 GMT mtk01461 -** Add OS_TIMESTAMP to packet -** \main\maintrunk.MT5921\16 2007-11-21 15:47:20 GMT mtk01088 -** fixed the unload module issue -** \main\maintrunk.MT5921\15 2007-11-07 18:37:38 GMT mtk01461 -** Fix compile warnning -** \main\maintrunk.MT5921\14 2007-11-02 01:03:19 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\13 2007-10-30 10:42:33 GMT mtk01425 -** 1. Refine for multicast list -** \main\maintrunk.MT5921\12 2007-10-25 18:08:13 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "gl_cfg80211.h" -#include "precomp.h" - -#if defined(CONFIG_WIFI_CONTROL_FUNC) -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) -#include -#else -#include -#endif -#endif /* CONFIG_WIFI_CONTROL_FUNC */ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define MAX_IOREQ_NUM 10 -#if 1//def RK2818 - int driver_start_ok = 0; -#endif - -BOOLEAN fgIsUnderEarlierSuspend = false; - -struct semaphore g_halt_sem; -int g_u4HaltFlag = 0; - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Tasklet mechanism is like buttom-half in Linux. We just want to - * send a signal to OS for interrupt defer processing. All resources - * are NOT allowed reentry, so txPacket, ISR-DPC and ioctl must avoid preempty. - */ -typedef struct _WLANDEV_INFO_T { - struct net_device *prDev; -} WLANDEV_INFO_T, *P_WLANDEV_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -MODULE_AUTHOR(NIC_AUTHOR); -MODULE_DESCRIPTION(NIC_DESC); -MODULE_SUPPORTED_DEVICE(NIC_NAME); - -/* WCNCR 00002676, -keep OS wake up for 100ms after sdio interrupt happen, -make sure that RX & TX procedure isn't suspended -*/ -KAL_WAKE_LOCK_T isr_wakelock; - -#if 0 - MODULE_LICENSE("MTK Propietary"); -#else - MODULE_LICENSE("GPL"); -#endif - -#define NIC_INF_NAME "wlan%d" /* interface name */ - -#if DBG - UINT_8 aucDebugModule[DBG_MODULE_NUM]; - UINT_32 u4DebugModule = 0; -#endif /* DBG */ - -//4 2007/06/26, mikewu, now we don't use this, we just fix the number of wlan device to 1 -static WLANDEV_INFO_T arWlanDevInfo[CFG_MAX_WLAN_DEVICES] = {{0}}; -static UINT_32 u4WlanDevNum = 0; /* How many NICs coexist now */ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if CFG_ENABLE_WIFI_DIRECT -static SUB_MODULE_HANDLER rSubModHandler[SUB_MODULE_NUM] = {{NULL}}; -#endif - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_5ghz_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 mtk_cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_wlan_ops = { - .change_virtual_intf = mtk_cfg80211_change_iface, - .add_key = mtk_cfg80211_add_key, - .get_key = mtk_cfg80211_get_key, - .del_key = mtk_cfg80211_del_key, - .set_default_key = mtk_cfg80211_set_default_key, - .get_station = mtk_cfg80211_get_station, - .scan = mtk_cfg80211_scan, - .connect = mtk_cfg80211_connect, - .disconnect = mtk_cfg80211_disconnect, - .join_ibss = mtk_cfg80211_join_ibss, - .leave_ibss = mtk_cfg80211_leave_ibss, - .set_power_mgmt = mtk_cfg80211_set_power_mgmt, - .set_pmksa = mtk_cfg80211_set_pmksa, - .del_pmksa = mtk_cfg80211_del_pmksa, - .flush_pmksa = mtk_cfg80211_flush_pmksa, - - /* Action Frame TX/RX */ - .remain_on_channel = mtk_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_cfg80211_mgmt_tx, - .mgmt_tx_cancel_wait = mtk_cfg80211_mgmt_tx_cancel_wait, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_cfg80211_testmode_cmd, - #endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/** - * Functions for Android WiFi card detection - */ -#if defined(CONFIG_WIFI_CONTROL_FUNC) - -static int g_wifidev_registered = 0; -static struct semaphore wifi_control_sem; -static struct wifi_platform_data *wifi_control_data = NULL; -static struct resource *wifi_irqres = NULL; - -static int wifi_add_dev(void); -static void wifi_del_dev(void); - -#define ANDROID_ERR(x) printk x -#define ANDROID_TRACE(x) printk x - -int wl_android_wifictrl_func_add(void) -{ - int ret = 0; - sema_init(&wifi_control_sem, 0); - - ret = wifi_add_dev(); - if (ret) { - ANDROID_ERR(("%s: platform_driver_register failed\n", __FUNCTION__)); - return ret; - } - g_wifidev_registered = 1; - - /* Waiting callback after platform_driver_register is done or exit with error */ - if (down_timeout(&wifi_control_sem, msecs_to_jiffies(1000)) != 0) { - ret = -EINVAL; - ANDROID_ERR(("%s: platform_driver_register timeout\n", __FUNCTION__)); - } - - printk("wl_android_wifictrl_func_add success.\n"); - return ret; -} - -void wl_android_wifictrl_func_del(void) -{ - if (g_wifidev_registered) - { - wifi_del_dev(); - g_wifidev_registered = 0; - } -} - -int wifi_set_power(int on, unsigned long msec) -{ - ANDROID_ERR(("%s = %d\n", __FUNCTION__, on)); - if (wifi_control_data && wifi_control_data->set_power) { - wifi_control_data->set_power(on); - } - if (msec) - msleep(msec); - return 0; -} - -int wifi_set_reset(int on, unsigned long msec) -{ - ANDROID_ERR(("%s = %d\n", __FUNCTION__, on)); - if (wifi_control_data && wifi_control_data->set_reset) { - wifi_control_data->set_reset(on); - } - if (msec) - msleep(msec); - return 0; -} - -static int wifi_set_carddetect(int on) -{ - ANDROID_ERR(("%s = %d\n", __FUNCTION__, on)); - if (wifi_control_data && wifi_control_data->set_carddetect) { - wifi_control_data->set_carddetect(on); - } - return 0; -} - -static int wifi_probe(struct platform_device *pdev) -{ - struct wifi_platform_data *wifi_ctrl = - (struct wifi_platform_data *)(pdev->dev.platform_data); - - ANDROID_ERR(("## %s\n", __FUNCTION__)); - wifi_irqres = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "bcmdhd_wlan_irq"); - if (wifi_irqres == NULL) - wifi_irqres = platform_get_resource_byname(pdev, - IORESOURCE_IRQ, "bcm4329_wlan_irq"); - wifi_control_data = wifi_ctrl; - - //wifi_set_power(0, 0); - //wifi_set_reset(0, 10); - - wifi_set_power(1, 0); - //wifi_set_reset(1, 12); /* Power On */ - - wifi_set_carddetect(1); /* CardDetect (0->1) */ - - up(&wifi_control_sem); - return 0; -} - -static int wifi_remove(struct platform_device *pdev) -{ - struct wifi_platform_data *wifi_ctrl = - (struct wifi_platform_data *)(pdev->dev.platform_data); - - ANDROID_ERR(("## %s\n", __FUNCTION__)); - wifi_control_data = wifi_ctrl; - - wifi_set_power(0, 0); /* Power Off */ - //wifi_set_reset(0, 0); - - wifi_set_carddetect(0); /* CardDetect (1->0) */ - - return 0; -} - -static int wifi_suspend(struct platform_device *pdev, pm_message_t state) -{ - ANDROID_TRACE(("##> %s\n", __FUNCTION__)); - return 0; -} - -static int wifi_resume(struct platform_device *pdev) -{ - ANDROID_TRACE(("##> %s\n", __FUNCTION__)); - return 0; -} - -static struct platform_driver wifi_device = { - .probe = wifi_probe, - .remove = wifi_remove, - .suspend = wifi_suspend, - .resume = wifi_resume, - .driver = { - .name = "bcmdhd_wlan", - } -}; - -static struct platform_driver wifi_device_legacy = { - .probe = wifi_probe, - .remove = wifi_remove, - .suspend = wifi_suspend, - .resume = wifi_resume, - .driver = { - .name = "bcm4329_wlan", - } -}; - -static int wifi_add_dev(void) -{ - ANDROID_TRACE(("## Calling platform_driver_register\n")); - platform_driver_register(&wifi_device); - platform_driver_register(&wifi_device_legacy); - return 0; -} - -static void wifi_del_dev(void) -{ - ANDROID_TRACE(("## Unregister platform_driver_register\n")); - platform_driver_unregister(&wifi_device); - platform_driver_unregister(&wifi_device_legacy); -} -#endif /* defined(CONFIG_WIFI_CONTROL_FUNC) */ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -unsigned int _cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -wlanSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Load NVRAM data and translate it into REG_INFO_T -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* \param[out] prRegInfo Pointer to struct REG_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -glLoadNvram ( - IN P_GLUE_INFO_T prGlueInfo, - OUT P_REG_INFO_T prRegInfo - ) -{ - UINT_32 i, j; - UINT_8 aucTmp[2]; - PUINT_8 pucDest; - - ASSERT(prGlueInfo); - ASSERT(prRegInfo); - - if((!prGlueInfo) || (!prRegInfo)) { - return; - } - - if(kalCfgDataRead16(prGlueInfo, - sizeof(WIFI_CFG_PARAM_STRUCT) - sizeof(UINT_16), - (PUINT_16)aucTmp) == TRUE) { - prGlueInfo->fgNvramAvailable = TRUE; - - // load MAC Address - for (i = 0 ; i < sizeof(PARAM_MAC_ADDR_LEN) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prRegInfo->aucMacAddr) + i)); - } - - // load country code - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucCountryCode[0]), - (PUINT_16)aucTmp); - - // cast to wide characters - prRegInfo->au2CountryCode[0] = (UINT_16) aucTmp[0]; - prRegInfo->au2CountryCode[1] = (UINT_16) aucTmp[1]; - - // load default normal TX power - for (i = 0 ; i < sizeof(TX_PWR_PARAM_T) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, rTxPwr) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->rTxPwr)) + i)); - } - - // load feature flags - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucTxPwrValid), - (PUINT_16)aucTmp); - prRegInfo->ucTxPwrValid = aucTmp[0]; - prRegInfo->ucSupport5GBand = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, uc2G4BwFixed20M), - (PUINT_16)aucTmp); - prRegInfo->uc2G4BwFixed20M = aucTmp[0]; - prRegInfo->uc5GBwFixed20M = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucEnable5GBand), - (PUINT_16)aucTmp); - prRegInfo->ucEnable5GBand = aucTmp[0]; - - /* load EFUSE overriding part */ - for (i = 0 ; i < sizeof(prRegInfo->aucEFUSE) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->aucEFUSE)) + i)); - } - - /* load band edge tx power control */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, fg2G4BandEdgePwrUsed), - (PUINT_16)aucTmp); - prRegInfo->fg2G4BandEdgePwrUsed = (BOOLEAN)aucTmp[0]; - if (aucTmp[0]) { - prRegInfo->cBandEdgeMaxPwrCCK = (INT_8)aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, cBandEdgeMaxPwrOFDM20), - (PUINT_16)aucTmp); - prRegInfo->cBandEdgeMaxPwrOFDM20 = (INT_8)aucTmp[0]; - prRegInfo->cBandEdgeMaxPwrOFDM40 = (INT_8)aucTmp[1]; - } - - /* load regulation subbands */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucRegChannelListMap), - (PUINT_16)aucTmp); - prRegInfo->eRegChannelListMap = (ENUM_REG_CH_MAP_T) aucTmp[0]; - prRegInfo->ucRegChannelListIndex = aucTmp[1]; - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - for (i = 0 ; i < MAX_SUBBAND_NUM; i++) { - pucDest = (PUINT_8) &prRegInfo->rDomainInfo.rSubBand[i]; - for (j = 0; j < 6; j += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) - + (i * 6 + j), - (PUINT_16)aucTmp); - - *pucDest++ = aucTmp[0]; - *pucDest++ = aucTmp[1]; - } - } - } - } - else { - prGlueInfo->fgNvramAvailable = FALSE; - } - - return; -} - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module init function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == FALSE) { - rSubModHandler[P2P_MODULE].subModInit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = TRUE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module exit function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == TRUE) { - rSubModHandler[P2P_MODULE].subModExit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = FALSE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module init flag, force TxThread to run sub modle init -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_INIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module INIT*/ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetRegister(prGlueInfo); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module exit flag, force TxThread to run sub modle exit -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ) -{ -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo); - } -#endif - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_EXIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module EXIT */ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set by sub module, indicate sub module is already inserted -* -* \param[in] rSubModInit, function pointer point to sub module init function -* \param[in] rSubModExit, function pointer point to sub module exit function -* \param[in] eSubModIdx, sub module index -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ) -{ - rSubModHandler[eSubModIdx].subModInit = rSubModInit; - rSubModHandler[eSubModIdx].subModExit = rSubModExit; - rSubModHandler[eSubModIdx].fgIsInited = FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief check wlan is launched or not -* -* \param[in] (none) -* -* \return TRUE, wlan is already started -* FALSE, wlan is not started yet -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsLaunched( - VOID - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - - ASSERT(prDev); - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - return FALSE; - } - - return prGlueInfo->prAdapter->fgIsWlanLaunched; -} - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Export wlan GLUE_INFO_T pointer to p2p module -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return TRUE: get GlueInfo pointer successfully -* FALSE: wlan is not started yet -*/ -/*---------------------------------------------------------------------------*/ -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (NULL == prGlueInfo) { - return FALSE; - } - - if(FALSE == prGlueInfo->prAdapter->fgIsWlanLaunched) { - return FALSE; - } - - *prGlueInfoExpAddr = prGlueInfo; - return TRUE; -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release prDev from wlandev_array and free tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanClearDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == prDev) { - arWlanDevInfo[i].prDev = NULL; - u4WlanDevNum--; - } - } - - return; -} /* end of wlanClearDevIdx() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate an unique interface index, net_device::ifindex member for this -* wlan device. Store the net_device in wlandev_array, and initialize -* tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \retval >= 0 The device number. -* \retval -1 Fail to get index. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanGetDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == (struct net_device *) NULL) { - /* Reserve 2 bytes space to store one digit of - * device number and NULL terminator. - */ - arWlanDevInfo[i].prDev = prDev; - u4WlanDevNum++; - return i; - } - } - - return -1; -} /* end of wlanGetDevIdx() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, a primary SOCKET interface to configure -* the interface lively. Handle an ioctl call on one of our devices. -* Everything Linux ioctl specific is done here. Then we pass the contents -* of the ifr->data to the request message handler. -* -* \param[in] prDev Linux kernel netdevice -* -* \param[in] prIFReq Our private ioctl request structure, typed for the generic -* struct ifreq so we can use ptr to function -* -* \param[in] cmd Command ID -* -* \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. -* \retval OTHER The execution of IOCTL command is failed. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - - /* Verify input parameters for the following functions */ - ASSERT(prDev && prIFReq); - if (!prDev || !prIFReq) { - DBGLOG(INIT, WARN, ("%s Invalid input data\n", __FUNCTION__)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("%s No glue info\n", __FUNCTION__)); - return -EFAULT; - } - - if (prGlueInfo->u4ReadyFlag == 0) { - return -EINVAL; - } - - printk ("ioctl %x\n", i4Cmd); - - if (i4Cmd == SIOCGIWPRIV) { - /* 0x8B0D, get private ioctl table */ - ret = wext_get_priv(prDev, prIFReq); - } - else if ((i4Cmd >= SIOCIWFIRST) && (i4Cmd < SIOCIWFIRSTPRIV)) { - /* 0x8B00 ~ 0x8BDF, wireless extension region */ - ret = wext_support_ioctl(prDev, prIFReq, i4Cmd); - } - else if ((i4Cmd >= SIOCIWFIRSTPRIV) && (i4Cmd < SIOCIWLASTPRIV)) { - /* 0x8BE0 ~ 0x8BFF, private ioctl region */ - ret = priv_support_ioctl(prDev, prIFReq, i4Cmd); - } - else { - DBGLOG(INIT, WARN, ("Unexpected ioctl command: 0x%04x\n", i4Cmd)); - /* return 0 for safe? */ - } - - return ret; -} /* end of wlanDoIOCTL() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to set multicast list and set rx mode. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -static struct delayed_work workq; -static struct net_device *gPrDev; - -static void -wlanSetMulticastList (struct net_device *prDev) -{ - gPrDev = prDev; - schedule_delayed_work(&workq, 0); -} - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -static void -wlanSetMulticastListWorkQueue (struct work_struct *work) { - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4PacketFilter = 0; - UINT_32 u4SetInfoLen; - struct net_device *prDev = gPrDev; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", - prDev, prGlueInfo)); - up(&g_halt_sem); - return; - } - - if (prDev->flags & IFF_PROMISC) { - u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - - u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - up(&g_halt_sem); - - if (kalIoctl(prGlueInfo, - wlanoidSetCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen) != WLAN_STATUS_SUCCESS) { - return; - } - - - if (u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - PUINT_8 prMCAddrList = NULL; - UINT_32 i = 0; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prMCAddrList = kalMemAlloc(MAX_NUM_GROUP_ADDR * ETH_ALEN, VIR_MEM_TYPE); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - memcpy((prMCAddrList + i * ETH_ALEN), ha->addr, ETH_ALEN); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - memcpy((prMCAddrList + i * ETH_ALEN), prMcList->dmi_addr, ETH_ALEN); - } -#endif - - up(&g_halt_sem); - - kalIoctl(prGlueInfo, - wlanoidSetMulticastList, - prMCAddrList, - (i * ETH_ALEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - kalMemFree(prMCAddrList, VIR_MEM_TYPE, MAX_NUM_GROUP_ADDR * ETH_ALEN); - } - - return; -} /* end of wlanSetMulticastList() */ - - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -void -p2pSetMulticastListWorkQueueWrapper (P_GLUE_INFO_T prGlueInfo) { - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prGlueInfo(0x%p)\n", - prGlueInfo)); - return; - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - mtk_p2p_wext_set_Multicastlist(prGlueInfo); - } -#endif - - return; -} /* end of p2pSetMulticastListWorkQueueWrapper() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is TX entry point of NET DEVICE. -* -* \param[in] prSkb Pointer of the sk_buff to be sent -* \param[in] prDev Pointer to struct net_device -* -* \retval NETDEV_TX_OK - on success. -* \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanHardStartXmit( - struct sk_buff *prSkb, - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("sk_buff->data:\n")); - - for(i = 0; i < prSkb->len && i < 64; i++) - { - LOG_FUNC("%02x ", prSkb->data[i]); - - if((i+1)%16 ==0) - { - LOG_FUNC("\n"); - } - } - - LOG_FUNC("\n"); -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - #if CFG_DBG_GPIO_PINS - { - /* TX request from OS */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_HIGH); - } - #endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); -#endif - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx]); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum >= CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_stop_queue(prDev); - } -#endif - } else { - //printk("is security frame\n"); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - DBGLOG(TX, EVENT, ("\n+++++ pending frame %d len = %d +++++\n", prGlueInfo->i4TxPendingFrameNum, prSkb->len)); - prGlueInfo->rNetDevStats.tx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.tx_packets++; - - //pr->u4Flag |= GLUE_FLAG_TXREQ; - //wake_up_interruptible(&prGlueInfo->waitq); - kalSetEvent(prGlueInfo); - - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} /* end of wlanHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] prDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -*/ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -wlanGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - #if 0 - WLAN_STATUS rStatus; - UINT_32 u4XmitError = 0; - UINT_32 u4XmitOk = 0; - UINT_32 u4RecvError = 0; - UINT_32 u4RecvOk = 0; - UINT_32 u4BufLen; - - ASSERT(prDev); - - /* @FIX ME: need a more clear way to do this */ - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitError, - &u4XmitError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitOk, - &u4XmitOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvOk, - &u4RecvOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvError, - &u4RecvError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - prGlueInfo->rNetDevStats.rx_packets = u4RecvOk; - prGlueInfo->rNetDevStats.tx_packets = u4XmitOk; - prGlueInfo->rNetDevStats.tx_errors = u4XmitError; - prGlueInfo->rNetDevStats.rx_errors = u4RecvError; - //prGlueInfo->rNetDevStats.rx_bytes = rCustomNetDevStats.u4RxBytes; - //prGlueInfo->rNetDevStats.tx_bytes = rCustomNetDevStats.u4TxBytes; - //prGlueInfo->rNetDevStats.rx_errors = rCustomNetDevStats.u4RxErrors; - //prGlueInfo->rNetDevStats.multicast = rCustomNetDevStats.u4Multicast; - #endif - //prGlueInfo->rNetDevStats.rx_packets = 0; - //prGlueInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - //prGlueInfo->rNetDevStats.rx_bytes = 0; - //prGlueInfo->rNetDevStats.tx_bytes = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->rNetDevStats; - -} /* end of wlanGetStats() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanInit( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - if (!prDev) { - return -ENXIO; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue); -#else - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue, NULL); -#endif - - return 0; /* success */ -} /* end of wlanInit() */ - -void mtk_init_delayed_work(struct delayed_work *work, void *func) -{ -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - INIT_DELAYED_WORK(work, func); -#else - INIT_DELAYED_WORK(work, func, NULL); -#endif -} -EXPORT_SYMBOL(mtk_init_delayed_work); - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanUninit( - struct net_device *prDev - ) -{ - return; -} /* end of wlanUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->open -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanOpen succeeds. -* \retval < 0 The execution of wlanOpen failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanOpen( - struct net_device *prDev - ) -{ - ASSERT(prDev); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_start_all_queues(prDev); -#else - netif_start_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->stop -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanStop succeeds. -* \retval < 0 The execution of wlanStop failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanStop( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* CFG80211 down */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(prScanRequest) { - cfg80211_scan_done(prScanRequest, TRUE); - } - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_stop_all_queues(prDev); -#else - netif_stop_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code - * - * \param[in] prGlueInfo Pointer to glue info - * - * \return none - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanUpdateChannelTable( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, j; - UINT_8 ucNumOfChannel; - RF_CHANNEL_INFO_T aucChannelList[ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels)]; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_channels); i++) { - mtk_5ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, - BAND_NULL, - ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels), - &ucNumOfChannel, - aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - for(j = 0 ; j < ARRAY_SIZE(mtk_2ghz_channels) ; j++) { - if(mtk_2ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_2ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - case BAND_5G: - for(j = 0 ; j < ARRAY_SIZE(mtk_5ghz_channels) ; j++) { - if(mtk_5ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_5ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - default: - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register the device to the kernel and return the index. -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanNetRegister succeeds. -* \retval < 0 The execution of wlanNetRegister failed. -*/ -/*----------------------------------------------------------------------------*/ -static INT_32 -wlanNetRegister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - INT_32 i4DevIdx = -1; - - ASSERT(prWdev); - - - do { - if (!prWdev) { - break; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - if ((i4DevIdx = wlanGetDevIdx(prWdev->netdev)) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device number exceeds.\n")); - break; - } - - /* adjust channel support status */ - wlanUpdateChannelTable((P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy)); - - if (wiphy_register(prWdev->wiphy) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: wiphy context is not registered.\n")); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(register_netdev(prWdev->netdev) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device context is not registered.\n")); - - wiphy_unregister(prWdev->wiphy); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(i4DevIdx != -1) { - prGlueInfo->fgIsRegistered = TRUE; - } - } - while(FALSE); - - return i4DevIdx; /* success */ -} /* end of wlanNetRegister() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister the device from the kernel -* -* \param[in] prWdev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetUnregister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetUnregister: The device context is NULL\n")); - return; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - wlanClearDevIdx(prWdev->netdev); - unregister_netdev(prWdev->netdev); - wiphy_unregister(prWdev->wiphy); - - prGlueInfo->fgIsRegistered = FALSE; - - DBGLOG(INIT, INFO, ("unregister wireless_dev(0x%p)\n", prWdev)); - - return; -} /* end of wlanNetUnregister() */ - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops wlan_netdev_ops = { - .ndo_open = wlanOpen, - .ndo_stop = wlanStop, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = wlanSetMulticastList, -#else - .ndo_set_multicast_list = wlanSetMulticastList, -#endif - .ndo_get_stats = wlanGetStats, - .ndo_do_ioctl = wlanDoIOCTL, - .ndo_start_xmit = wlanHardStartXmit, - .ndo_init = wlanInit, - .ndo_uninit = wlanUninit, - .ndo_select_queue = wlanSelectQueue, -}; -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method for creating Linux NET4 struct net_device object and the -* private data(prGlueInfo and prAdapter). Setup the IO address to the HIF. -* Assign the function pointer to the net_device object -* -* \param[in] pvData Memory address for the device -* -* \retval Not null The wireless_dev object. -* \retval NULL Fail to create wireless_dev object -*/ -/*----------------------------------------------------------------------------*/ -static struct wireless_dev * -wlanNetCreate( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - UINT_32 i; - struct device *prDev; - - //4 <1.1> Create wireless_dev - prWdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL); - DBGLOG(INIT, INFO, ("wireless_dev prWdev(0x%p) allocated\n", prWdev)); - if (!prWdev) { - DBGLOG(INIT, ERROR, ("Allocating memory to wireless_dev context failed\n")); - return NULL; - } - - //4 <1.2> Create wiphy - prWdev->wiphy = wiphy_new(&mtk_wlan_ops, sizeof(GLUE_INFO_T)); - DBGLOG(INIT, INFO, ("wiphy (0x%p) allocated\n", prWdev->wiphy)); - if (!prWdev->wiphy) { - DBGLOG(INIT, ERROR, ("Allocating memory to wiphy device failed\n")); - kfree(prWdev); - return NULL; - } - - //4 <1.3> co-relate wiphy & prDev -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(*((MTK_WCN_HIF_SDIO_CLTCTX *)pvData), &prDev); -#else - prDev = & ((struct sdio_func *) pvData)->dev; //mark skynine add "&" -#endif - if (!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for wlan\n"); - } - set_wiphy_dev(prWdev->wiphy, prDev); - - //4 <1.4> configure wireless_dev & wiphy - prWdev->iftype = NL80211_IFTYPE_STATION; - prWdev->wiphy->max_scan_ssids = 1; /* FIXME: for combo scan */ - prWdev->wiphy->max_scan_ie_len = 512; - prWdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); - prWdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - prWdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; - prWdev->wiphy->cipher_suites = (const u32 *)mtk_cipher_suites; - prWdev->wiphy->n_cipher_suites = ARRAY_SIZE(mtk_cipher_suites); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_SUPPORTS_FW_ROAM; - #else - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY; - #endif - //4 <2> Create Glue structure - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - if (!prGlueInfo) { - DBGLOG(INIT, ERROR, ("Allocating memory to glue layer failed\n")); - goto netcreate_err; - } - - //4 <3> Initial Glue structure - //4 <3.1> create net device - prGlueInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), NIC_INF_NAME, ether_setup, CFG_MAX_TXQ_NUM); - - DBGLOG(INIT, INFO, ("net_device prDev(0x%p) allocated\n", prGlueInfo->prDevHandler)); - if (!prGlueInfo->prDevHandler) { - DBGLOG(INIT, ERROR, ("Allocating memory to net_device context failed\n")); - goto netcreate_err; - } - - //4 <3.1.1> initialize net device varaiables - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prDevHandler)) = prGlueInfo; - - prGlueInfo->prDevHandler->netdev_ops = &wlan_netdev_ops; -#ifdef CONFIG_WIRELESS_EXT - prGlueInfo->prDevHandler->wireless_handlers = &wext_handler_def; -#endif - netif_carrier_off(prGlueInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prDevHandler); - - //4 <3.1.2> co-relate with wiphy bi-directionally - prGlueInfo->prDevHandler->ieee80211_ptr = prWdev; - prWdev->netdev = prGlueInfo->prDevHandler; - - //4 <3.1.3> co-relate net device & prDev - SET_NETDEV_DEV(prGlueInfo->prDevHandler, wiphy_dev(prWdev->wiphy)); - - //4 <3.2> initiali glue variables - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prGlueInfo->ePowerState = ParamDeviceStateD0; - prGlueInfo->fgIsMacAddrOverride = FALSE; - prGlueInfo->fgIsRegistered = FALSE; - prGlueInfo->prScanRequest = NULL; - - init_completion(&prGlueInfo->rScanComp); - init_completion(&prGlueInfo->rHaltComp); - init_completion(&prGlueInfo->rPendComp); -#if CFG_ENABLE_WIFI_DIRECT - init_completion(&prGlueInfo->rSubModComp); -#endif - - /* initialize timer for OID timeout checker */ - kalOsTimerInitialize(prGlueInfo, kalTimeoutHandler); - - for (i = 0; i < SPIN_LOCK_NUM; i++) { - spin_lock_init(&prGlueInfo->rSpinLock[i]); - } - - /* initialize semaphore for ioctl */ - sema_init(&prGlueInfo->ioctl_sem, 1); - - /* initialize semaphore for ioctl */ - sema_init(&g_halt_sem, 1); - g_u4HaltFlag = 0; - - //4 <4> Create Adapter structure - prAdapter = (P_ADAPTER_T) wlanAdapterCreate(prGlueInfo); - - if (!prAdapter) { - DBGLOG(INIT, ERROR, ("Allocating memory to adapter failed\n")); - goto netcreate_err; - } - - prGlueInfo->prAdapter = prAdapter; - -#ifdef CONFIG_CFG80211_WEXT - //4 <5> Use wireless extension to replace IOCTL - prWdev->wiphy->wext = &wext_handler_def; -#endif - - goto netcreate_done; - -netcreate_err: - if (NULL != prAdapter) { - wlanAdapterDestroy(prAdapter); - prAdapter = NULL; - } - - if (NULL != prGlueInfo->prDevHandler) { - free_netdev(prGlueInfo->prDevHandler); - prGlueInfo->prDevHandler = NULL; - } - - if (NULL != prWdev->wiphy) { - wiphy_free(prWdev->wiphy); - prWdev->wiphy = NULL; - } - - if (NULL != prWdev) { - /* Free net_device and private data, which are allocated by - * alloc_netdev(). - */ - kfree(prWdev); - prWdev = NULL; - } - -netcreate_done: - - return prWdev; -} /* end of wlanNetCreate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroying the struct net_device object and the private data. -* -* \param[in] prWdev Pointer to struct wireless_dev. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetDestroy( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prWdev); - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetDestroy: The device context is NULL\n")); - return; - } - - /* prGlueInfo is allocated with net_device */ - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - ASSERT(prGlueInfo); - - /* destroy kal OS timer */ - kalCancelTimer(prGlueInfo); - - glClearHifInfo(prGlueInfo); - - wlanAdapterDestroy(prGlueInfo->prAdapter); - prGlueInfo->prAdapter = NULL; - - /* Free net_device and private data, which are allocated by alloc_netdev(). - */ - free_netdev(prWdev->netdev); - wiphy_free(prWdev->wiphy); - - kfree(prWdev); - - return; -} /* end of wlanNetDestroy() */ - -#ifndef CONFIG_X86 -UINT_8 g_aucBufIpAddr[32] = {0}; - -static void wlanEarlySuspend(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - - DBGLOG(INIT, INFO, ("*********wlanEarlySuspend************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if(u4WlanDevNum == 0){ - DBGLOG(INIT, ERROR, ("wlanEarlySuspend u4WlanDevNum==0 invalid!!\n")); - return; - } - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - ASSERT(prDev); - -fgIsUnderEarlierSuspend = true; - - // <2> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - - // <3> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(INIT, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - DBGLOG(INIT, INFO, ("ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - )); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - //u4NumIPv6++; - } - -#endif - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -#ifdef CONFIG_IPV6 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -static void wlanLateResume(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - - DBGLOG(INIT, INFO, ("*********wlanLateResume************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - - if(u4WlanDevNum == 0){ - DBGLOG(INIT, ERROR, ("wlanLateResume u4WlanDevNum==0 invalid!!\n")); - return; - } - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - ASSERT(prDev); - -fgIsUnderEarlierSuspend = false; - - // <2> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - - // <3> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(INIT, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - DBGLOG(INIT, INFO, ("ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - )); -#endif - // <7> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void wlan_early_suspend(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_early_suspend************\n")); - wlanEarlySuspend(); -} - -static void wlan_late_resume(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_late_resume************\n")); - wlanLateResume(); -} -#endif //defined(CONFIG_HAS_EARLYSUSPEND) -#endif //! CONFIG_X86 - -extern void wlanRegisterNotifier(void); -extern void wlanUnregisterNotifier(void); - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Wlan probe function. This function probes and initializes the device. -* -* \param[in] pvData data passed by bus driver init function -* _HIF_EHPI: NULL -* _HIF_SDIO: sdio bus driver handle -* -* \retval 0 Success -* \retval negative value Failed -*/ -/*----------------------------------------------------------------------------*/ -static INT_32 -wlanProbe( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - INT_32 i4DevIdx = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - INT_32 i4Status = 0; - BOOL bRet = FALSE; - - - do { -#if DBG - int i; - /* Initialize DEBUG CLASS of each module */ - for (i = 0; i < DBG_MODULE_NUM; i++) { - aucDebugModule[i] = DBG_CLASS_ERROR | \ - DBG_CLASS_WARN | \ - DBG_CLASS_STATE | \ - DBG_CLASS_TRACE | \ - DBG_CLASS_EVENT; - //aucDebugModule[i] = 0; - } -#if 0 - aucDebugModule[DBG_INIT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_ARB_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_JOIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_RX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_TX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_NIC_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_HAL_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_KEVIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO | DBG_CLASS_TEMP; - aucDebugModule[DBG_SCAN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_REQ_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_MGT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_RSN_IDX] |= DBG_CLASS_TRACE; - aucDebugModule[DBG_ROAMING_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; -#endif -#endif /* DBG */ - - //4 <1> Initialize the IO port of the interface - /* GeorgeKuo: pData has different meaning for _HIF_XXX: - * _HIF_EHPI: pointer to memory base variable, which will be - * initialized by glBusInit(). - * _HIF_SDIO: bus driver handle - */ - - bRet = glBusInit(pvData); - - /* Cannot get IO address from interface */ - if (FALSE == bRet) { - DBGLOG(INIT, ERROR, (KERN_ALERT "wlanProbe: glBusInit() fail\n")); - i4Status = -EIO; - break; - } - - //4 <2> Create network device, Adapter, KalInfo, prDevHandler(netdev) - if ((prWdev = wlanNetCreate(pvData)) == NULL) { - DBGLOG(INIT, ERROR, ("wlanProbe: No memory for dev and its private\n")); - i4Status = -ENOMEM; - break; - } - - //4 <2.5> Set the ioaddr to HIF Info - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - gPrDev = prGlueInfo->prDevHandler; - glSetHifInfo(prGlueInfo, (UINT_32) pvData); - - - /* main thread is created in this function */ - init_waitqueue_head(&prGlueInfo->waitq); - // - - QUEUE_INITIALIZE(&prGlueInfo->rCmdQueue); - QUEUE_INITIALIZE(&prGlueInfo->rTxQueue); - - - - //prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - //4 <4> Setup IRQ - prWlandevInfo = &arWlanDevInfo[i4DevIdx]; - - //i4Status = glBusSetIrq(prWdev->netdev, NULL, *((P_GLUE_INFO_T *) netdev_priv(prWdev->netdev))); - - if (i4Status != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanProbe: Set IRQ error\n")); - break; - } - - prGlueInfo->i4DevIdx = i4DevIdx; - - prAdapter = prGlueInfo->prAdapter; - - prGlueInfo->u4ReadyFlag = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prAdapter->u4CSUMFlags = (CSUM_OFFLOAD_EN_TX_TCP | CSUM_OFFLOAD_EN_TX_UDP | CSUM_OFFLOAD_EN_TX_IP); -#endif - - //4 <5> Start Device - // -#if CFG_ENABLE_FW_DOWNLOAD - /* before start adapter, we need to open and load firmware */ - { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(prRegInfo, 0, sizeof(REG_INFO_T)); - prRegInfo->u4StartAddress = CFG_FW_START_ADDRESS; - prRegInfo->u4LoadAddress = CFG_FW_LOAD_ADDRESS; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - //kalMemCopy(&prGlueInfo->rRegInfo, prRegInfo, sizeof(REG_INFO_T)); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - prRegInfo->fgEnArpFilter = TRUE; - - if (kalFirmwareImageMapping(prGlueInfo, &prFwBuffer, &u4FwSize) == NULL) { - i4Status = -EIO; - goto bailout; - } else { - if (wlanAdapterStart(prAdapter, prRegInfo, prFwBuffer, u4FwSize) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - } - } - - kalFirmwareImageUnmapping(prGlueInfo, NULL, prFwBuffer); - -bailout: - //kfree(prRegInfo); - - if (i4Status < 0) { - break; - } - } -#else - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(&prGlueInfo->rRegInfo, 0, sizeof(REG_INFO_T)); - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - - if (wlanAdapterStart(prAdapter, prRegInfo, NULL, 0) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - break; - } -#endif - prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - /* set MAC address */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - struct sockaddr MacAddr; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryCurrentAddr, - &MacAddr.sa_data, - PARAM_MAC_ADDR_LEN, - TRUE, - TRUE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set MAC addr fail 0x%lx\n", rStatus)); - prGlueInfo->u4ReadyFlag = 0; - } else { - memcpy(prGlueInfo->prDevHandler->dev_addr, &MacAddr.sa_data, ETH_ALEN); - memcpy(prGlueInfo->prDevHandler->perm_addr, prGlueInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* card is ready */ - prGlueInfo->u4ReadyFlag = 1; -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("MAC address: "MACSTR, MAC2STR(&MacAddr.sa_data))); -#endif - } - } - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - /* set HW checksum offload */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set HW checksum offload fail 0x%lx\n", rStatus)); - } - } -#endif - - //4 <3> Register the card - if ((i4DevIdx = wlanNetRegister(prWdev)) < 0){ - i4Status = -ENXIO; - DBGLOG(INIT, ERROR, ("wlanProbe: Cannot register the net_device context to the kernel\n")); - break; - } - - glRegisterEarlySuspend(&mt6620_early_suspend_desc, wlan_early_suspend, wlan_late_resume); - wlanRegisterNotifier(); - //4 <6> Initialize /proc filesystem -#ifdef WLAN_INCLUDE_PROC - if ( (i4Status = procInitProcfs(prDev, NIC_DEVICE_ID_LOW)) < 0) { - DBGLOG(INIT, ERROR, ("wlanProbe: init procfs failed\n")); - break; - } -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - glRegisterAmpc(prGlueInfo); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*wlan is launched*/ - prGlueInfo->prAdapter->fgIsWlanLaunched = TRUE; - /*if p2p module is inserted, notify tx_thread to init p2p network*/ - if(rSubModHandler[P2P_MODULE].subModInit) { - wlanSubModInit(prGlueInfo); - } -#endif - } - while (FALSE); - -#if 1//def RK2818 - if (i4Status < 0) - driver_start_ok = -1; - else - driver_start_ok = 1; -#endif - - return i4Status; -} /* end of wlanProbe() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method to stop driver operation and release all resources. Following -* this call, no frame should go up or down through this interface. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanRemove( - VOID - ) -{ - struct net_device *prDev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - DBGLOG(INIT, INFO, ("Remove wlan!\n")); - - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - DBGLOG(INIT, INFO, ("0 == u4WlanDevNum\n")); - return; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - prWlandevInfo = &arWlanDevInfo[u4WlanDevNum-1]; - - ASSERT(prDev); - if (NULL == prDev) { - DBGLOG(INIT, INFO, ("NULL == prDev\n")); - return; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - DBGLOG(INIT, INFO, ("NULL == prGlueInfo\n")); - free_netdev(prDev); - return; - } - - -#if CFG_ENABLE_WIFI_DIRECT - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo, FALSE); - p2pRemove(prGlueInfo); - } - -#if 0 - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - //if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - if (prGlueInfo->prP2PInfo) { - //p2pRemove(prGlueInfo); - if (prGlueInfo->prP2PInfo->prDevHandler) { - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - - } - - - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return; - } - } -#endif -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsNetRegistered) { - bowNotifyAllLinkDisconnected(prGlueInfo->prAdapter); - /*wait 300ms for BoW module to send deauth*/ - kalMsleep(300); - } -#endif - - //4 <1> Stopping handling interrupt and free IRQ - glBusFreeIrq(prDev, *((P_GLUE_INFO_T *) netdev_priv(prDev))); - - kalMemSet(&(prGlueInfo->prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - flush_delayed_work_sync(&workq); - - down(&g_halt_sem); - g_u4HaltFlag = 1; - - //4 <2> Mark HALT, notify main thread to stop, and clean up queued requests - prGlueInfo->u4Flag |= GLUE_FLAG_HALT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread stops */ - wait_for_completion_interruptible(&prGlueInfo->rHaltComp); - - DBGLOG(INIT, INFO, ("mtk_sdiod stopped\n")); - - //prGlueInfo->rHifInfo.main_thread = NULL; - prGlueInfo->main_thread = NULL; - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsRegistered) { - glUnregisterAmpc(prGlueInfo); - } -#endif - - - //4 <3> Remove /proc filesystem. -#ifdef WLAN_INCLUDE_PROC - procRemoveProcfs(prDev, NIC_DEVICE_ID_LOW); -#endif /* WLAN_INCLUDE_PROC */ - - //4 <4> wlanAdapterStop - prAdapter = prGlueInfo->prAdapter; - - wlanAdapterStop(prAdapter); - DBGLOG(INIT, INFO, ("Number of Stalled Packets = %ld\n", prGlueInfo->i4TxPendingFrameNum)); - - //4 <5> Release the Bus - glBusRelease(prDev); - - up(&g_halt_sem); - - //4 <6> Unregister the card - wlanNetUnregister(prDev->ieee80211_ptr); - - //4 <7> Destroy the device - wlanNetDestroy(prDev->ieee80211_ptr); - prDev = NULL; - - glUnregisterEarlySuspend(&mt6620_early_suspend_desc); - wlanUnregisterNotifier(); - return; -} /* end of wlanRemove() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Entry Point - -#include "wifi_version.h" - -extern void initRssiHistory(void); -extern void initScanRssiHistory(void); -extern VOID exitWlan(void); -/*static */int initWlan(void) -{ - int ret = 0, timeout = 0; - int count = 3; - driver_start_ok = 0; - -#if RSSI_ENHANCE - initRssiHistory(); - initScanRssiHistory(); -#endif -retry_initwlan: - - //printk("=======================================================\n"); - //printk("==== Launching Wi-Fi driver! (Powered by Rockchip) ====\n"); - //printk("=======================================================\n"); - printk("MT5931 SDIO WiFi driver (Powered by Rockchip,Ver %s) init.\n", MT5931_DRV_VERSION); - - DBGLOG(INIT, INFO, ("initWlan\n")); - - -#if defined(CONFIG_WIFI_CONTROL_FUNC) - if (wl_android_wifictrl_func_add() < 0) { - ret = -1; - goto fail; - } -#endif - - /* memory pre-allocation */ - kalInitIOBuffer(); - - //return ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - ret = ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - - if (ret == -EIO) { - kalUninitIOBuffer(); - ret = -1; - goto fail; - } - -#if (CFG_CHIP_RESET_SUPPORT) - glResetInit(); -#endif - - /*WCNCR00002676, keep OS wake up for 100ms*/ - KAL_WAKE_LOCK_INIT(NULL, &isr_wakelock, "WLAN TIME 2"); - - /*for (timeout = 50; timeout >=0; timeout--) - { - if (driver_start_ok == 1) - return ret; - msleep(100); - } - if (timeout <= 0 && count > 0) - { - count--; - if (driver_start_ok == 0) - printk("No WiFi function card has been attached (5s). retry!\n"); - else if (driver_start_ok < 0) - printk("wifi driver probe processing fail. retry!\n"); - exitWlan(); - goto retry_initwlan; - }*/ - - return ret; - -fail: - -#if defined(CONFIG_WIFI_CONTROL_FUNC) - wl_android_wifictrl_func_del(); -#endif - - return ret; -} /* end of initWlan() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -/*static */VOID exitWlan(void) -{ - //printk("=======================================================\n"); - //printk("== Dis-launching Wi-Fi driver! (Powered by Rockchip) ==\n"); - //printk("=======================================================\n"); - - //printk("remove %p\n", wlanRemove); -#if CFG_CHIP_RESET_SUPPORT - glResetUninit(); -#endif - - glUnregisterBus(wlanRemove); - - /*WCNCR00002676*/ - KAL_WAKE_LOCK_DESTROY(NULL, &isr_wakelock); - - /* free pre-allocated memory */ - kalUninitIOBuffer(); - -#if defined(CONFIG_WIFI_CONTROL_FUNC) - wl_android_wifictrl_func_del(); -#endif /* CONFIG_WIFI_CONTROL_FUNC */ - - DBGLOG(INIT, INFO, ("exitWlan\n")); - - return; -} /* end of exitWlan() */ - -int rockchip_wifi_init_module(void) -{ - initWlan(); -} - -int rockchip_wifi_exit_module(void) -{ - exitWlan(); -} - -EXPORT_SYMBOL(rockchip_wifi_init_module); -EXPORT_SYMBOL(rockchip_wifi_exit_module); - -//module_init(initWlan); -//module_exit(exitWlan); -#if 0 -/* export necessary symbol for p2p driver using */ -#if CFG_ENABLE_WIFI_DIRECT -EXPORT_SYMBOL(wlanSubModRegisterInitExit); -EXPORT_SYMBOL(wlanSubModExit); -EXPORT_SYMBOL(wlanSubModInit); - -EXPORT_SYMBOL(nicPmIndicateBssCreated); -EXPORT_SYMBOL(rlmProcessAssocRsp); -EXPORT_SYMBOL(kalSetEvent); -EXPORT_SYMBOL(rlmBssInitForAPandIbss); -EXPORT_SYMBOL(kalEnqueueCommand); -EXPORT_SYMBOL(nicIncreaseTxSeqNum); -EXPORT_SYMBOL(nicCmdEventQueryAddress); -EXPORT_SYMBOL(bssCreateStaRecFromBssDesc); -EXPORT_SYMBOL(rlmBssAborted); -EXPORT_SYMBOL(cnmStaRecResetStatus); -EXPORT_SYMBOL(mqmProcessAssocRsp); -EXPORT_SYMBOL(nicTxReturnMsduInfo); -EXPORT_SYMBOL(nicTxEnqueueMsdu); -EXPORT_SYMBOL(wlanProcessSecurityFrame); -EXPORT_SYMBOL(nicChannelNum2Freq); -EXPORT_SYMBOL(nicUpdateBss); -EXPORT_SYMBOL(wlanSendSetQueryCmd); -EXPORT_SYMBOL(cnmStaRecAlloc); -EXPORT_SYMBOL(cnmTimerInitTimer); -EXPORT_SYMBOL(rateGetRateSetFromIEs); -EXPORT_SYMBOL(nicOidCmdTimeoutCommon); -EXPORT_SYMBOL(cnmStaRecChangeState); -EXPORT_SYMBOL(rateGetDataRatesFromRateSet); -EXPORT_SYMBOL(cnmMgtPktAlloc); -EXPORT_SYMBOL(cnmMgtPktFree); -EXPORT_SYMBOL(wextSrchDesiredWPAIE); -EXPORT_SYMBOL(nicRxReturnRFB); -EXPORT_SYMBOL(cnmTimerStartTimer); -EXPORT_SYMBOL(cmdBufAllocateCmdInfo); -EXPORT_SYMBOL(cnmGetStaRecByAddress); -EXPORT_SYMBOL(nicMediaStateChange); -EXPORT_SYMBOL(bssUpdateBeaconContent); -EXPORT_SYMBOL(kalIoctl); -EXPORT_SYMBOL(nicActivateNetwork); -EXPORT_SYMBOL(nicDeactivateNetwork); -EXPORT_SYMBOL(kalRandomNumber); -EXPORT_SYMBOL(nicCmdEventSetCommon); -EXPORT_SYMBOL(cnmTimerStopTimer); -EXPORT_SYMBOL(nicIncreaseCmdSeqNum); -EXPORT_SYMBOL(authSendDeauthFrame); -EXPORT_SYMBOL(cnmMemAlloc); -EXPORT_SYMBOL(nicPmIndicateBssAbort); -EXPORT_SYMBOL(nicCmdEventSetIpAddress); -EXPORT_SYMBOL(mboxSendMsg); -EXPORT_SYMBOL(scanSearchBssDescByBssid); -EXPORT_SYMBOL(bssRemoveStaRecFromClientList); -EXPORT_SYMBOL(assocProcessRxDisassocFrame); -EXPORT_SYMBOL(authProcessRxDeauthFrame); -EXPORT_SYMBOL(cnmStaRecFree); -EXPORT_SYMBOL(rNonHTPhyAttributes); -EXPORT_SYMBOL(rNonHTApModeAttributes); -EXPORT_SYMBOL(cnmMemFree); -EXPORT_SYMBOL(wlanExportGlueInfo); -EXPORT_SYMBOL(bssInitForAP); -EXPORT_SYMBOL(nicPmIndicateBssConnected); -EXPORT_SYMBOL(rlmRspGenerateHtOpIE); -EXPORT_SYMBOL(bssGenerateExtSuppRate_IE); -EXPORT_SYMBOL(rlmRspGenerateErpIE); -EXPORT_SYMBOL(rlmRspGenerateHtCapIE); -EXPORT_SYMBOL(cnmGetStaRecByIndex); -EXPORT_SYMBOL(rsnGenerateWpaNoneIE); -EXPORT_SYMBOL(rlmRspGenerateExtCapIE); -EXPORT_SYMBOL(rsnGenerateRSNIE); -EXPORT_SYMBOL(rsnParseRsnIE); -#if CFG_SUPPORT_WPS -EXPORT_SYMBOL(wextSrchDesiredWPSIE); -#endif -EXPORT_SYMBOL(mboxDummy); -EXPORT_SYMBOL(saaFsmRunEventStart); -EXPORT_SYMBOL(saaFsmRunEventAbort); -EXPORT_SYMBOL(cnmP2PIsPermitted); -EXPORT_SYMBOL(cnmBss40mBwPermitted); -EXPORT_SYMBOL(mqmGenerateWmmParamIE); -EXPORT_SYMBOL(cnmPreferredChannel); -EXPORT_SYMBOL(bssAddStaRecToClientList); -EXPORT_SYMBOL(nicQmUpdateWmmParms); -EXPORT_SYMBOL(qmFreeAllByNetType); -EXPORT_SYMBOL(wlanQueryInformation); -EXPORT_SYMBOL(nicConfigPowerSaveProfile); -EXPORT_SYMBOL(scanSearchExistingBssDesc); -EXPORT_SYMBOL(scanAllocateBssDesc); -EXPORT_SYMBOL(wlanProcessCommandQueue); -EXPORT_SYMBOL(wlanAcquirePowerControl); -EXPORT_SYMBOL(wlanReleasePowerControl); -EXPORT_SYMBOL(wlanReleasePendingCMDbyNetwork); -#if DBG -EXPORT_SYMBOL(aucDebugModule); -EXPORT_SYMBOL(fgIsBusAccessFailed); -EXPORT_SYMBOL(allocatedMemSize); -EXPORT_SYMBOL(dumpMemory8); -EXPORT_SYMBOL(dumpMemory32); -#endif -EXPORT_SYMBOL(rlmDomainIsLegalChannel); -EXPORT_SYMBOL(scnQuerySparseChannel); -EXPORT_SYMBOL(rlmDomainGetChnlList); -EXPORT_SYMBOL(p2pSetMulticastListWorkQueueWrapper); -EXPORT_SYMBOL(nicUpdateRSSI); -EXPORT_SYMBOL(nicCmdEventQueryLinkQuality); -EXPORT_SYMBOL(kalGetMediaStateIndicated); -EXPORT_SYMBOL(nicFreq2ChannelNum); -EXPORT_SYMBOL(assocSendDisAssocFrame); -EXPORT_SYMBOL(nicUpdateBeaconIETemplate); -EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem); -EXPORT_SYMBOL(kalClearMgmtFramesByNetType); -EXPORT_SYMBOL(kalClearSecurityFramesByNetType); -EXPORT_SYMBOL(nicFreePendingTxMsduInfoByNetwork); -EXPORT_SYMBOL(bssComposeBeaconProbeRespFrameHeaderAndFF); -EXPORT_SYMBOL(bssBuildBeaconProbeRespFrameCommonIEs); -EXPORT_SYMBOL(wlanoidSetWapiAssocInfo); -EXPORT_SYMBOL(wlanoidSetWSCAssocInfo); -#endif -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_kal.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_kal.c deleted file mode 100755 index f1aa99622afd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_kal.c +++ /dev/null @@ -1,3916 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_kal.c#3 $ -*/ - -/*! \file gl_kal.c - \brief GLUE Layer will export the required procedures here for internal driver stack. - - This file contains all routines which are exported from GLUE Layer to internal - driver stack. -*/ - - - -/* -** $Log: gl_kal.c $ -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 31 2012 terry.wu - * NULL - * . - * - * 03 26 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * invoke put_cred() after get_current_cred() calls. - * - * 03 07 2012 yuche.tsai - * NULL - * Fix compile error when WiFi Direct is off. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 20 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * do not need to invoke free() while firmware image file doesn't exist - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 yuche.tsai - * [WCXRP00000998] [Volunteer Patch][WiFi Direct][FW] P2P Social Channel & country domain issue - * Regulation domain feature check in. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * correct i4TxPendingFrameNum decreasing. - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * refix ... - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * correct compiling warning/error. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * add more robust fault tolerance design when pre-allocation failed. (rarely happen) - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 14 2011 jeffrey.chang - * [WCXRP00000546] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] fix kernel build warning message - * fix kernel build warning message - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 11 02 2010 jeffrey.chang - * [WCXRP00000145] [MT6620 Wi-Fi][Driver] fix issue of byte endian in packet classifier which discards BoW packets - * . - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant code which cause mismatch of power control release - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant GLUE_HALT condfition to avoid unmatched release of power control - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * if there is NVRAM, then use MAC address on NVRAM as default MAC address. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 20 2010 yuche.tsai - * NULL - * Support second interface indicate when enabling P2P. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 jeffrey.chang - * NULL - * remove redundant code which cause kernel panic - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add spinlock for pending security frame count - * - * 07 19 2010 jeffrey.chang - * - * adjust the timer unit to microsecond - * - * 07 19 2010 jeffrey.chang - * - * timer should return value greater than zero - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove unused files. - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * workaround for fixing request_firmware() failure on android 2.1 - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix kernel panic when debug mode enabled - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Disable network interface after disassociation - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * flush pending TX packets while unloading driver - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set driver own before handling cmd queue - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * 2) fix ioctl - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add spinlock for i4TxPendingFrameNum access - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. free cmdinfo after command is emiited. - * 2. for BoW frames, user priority is extracted from sk_buff directly. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * (2) fix spin lock - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * 2) add 2 kal API for later integration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * raising the priority of processing interrupt - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Bug fix: the tx thread will cause starvation of MMC thread, and the interrupt will never come in - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding secondary command queue for improving non-glue code portability - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download kal api - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\50 2009-09-28 20:19:08 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\49 2009-08-18 22:56:44 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\48 2009-06-23 23:18:58 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\47 2008-11-19 11:55:43 GMT mtk01088 -** fixed some lint warning, and rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\46 2008-09-02 21:07:42 GMT mtk01461 -** Remove ASSERT(pvBuf) in kalIndicateStatusAndComplete(), this parameter can be NULL -** \main\maintrunk.MT5921\45 2008-08-29 16:03:21 GMT mtk01088 -** remove non-used code for code review, add assert check -** \main\maintrunk.MT5921\44 2008-08-21 00:32:49 GMT mtk01461 -** \main\maintrunk.MT5921\43 2008-05-30 20:27:02 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\42 2008-05-30 15:47:29 GMT mtk01461 -** \main\maintrunk.MT5921\41 2008-05-30 15:13:04 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\40 2008-05-29 14:15:14 GMT mtk01084 -** remove un-used KAL function -** \main\maintrunk.MT5921\39 2008-05-03 15:17:30 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\38 2008-04-24 11:59:44 GMT mtk01461 -** change awake queue threshold and remove code which mark #if 0 -** \main\maintrunk.MT5921\37 2008-04-17 23:06:35 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\36 2008-04-08 15:38:56 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\35 2008-04-01 23:53:13 GMT mtk01461 -** Add comment -** \main\maintrunk.MT5921\34 2008-03-26 15:36:48 GMT mtk01461 -** Add update MAC Address for Linux -** \main\maintrunk.MT5921\33 2008-03-18 11:49:34 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\32 2008-03-18 10:25:22 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\31 2008-03-06 23:43:08 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\30 2008-02-26 09:47:57 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\29 2008-02-12 23:26:53 GMT mtk01461 -** Add debug option - Packet Order for Linux -** \main\maintrunk.MT5921\28 2008-01-09 17:54:43 GMT mtk01084 -** modify the argument of kalQueryPacketInfo() -** \main\maintrunk.MT5921\27 2007-12-24 16:02:03 GMT mtk01425 -** 1. Revise csum offload -** \main\maintrunk.MT5921\26 2007-11-30 17:03:36 GMT mtk01425 -** 1. Fix bugs -** -** \main\maintrunk.MT5921\25 2007-11-29 01:57:17 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\24 2007-11-20 11:24:07 GMT mtk01088 -** CR90, not doing the netif_carrier_off to let supplicant 1x pkt can be rcv at hardstattXmit -** \main\maintrunk.MT5921\23 2007-11-09 16:36:44 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\22 2007-11-07 18:37:39 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\21 2007-11-06 19:34:06 GMT mtk01088 -** add the WPS code, indicate the mgmt frame to upper layer -** \main\maintrunk.MT5921\20 2007-11-02 01:03:21 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\19 2007-10-30 11:59:38 GMT MTK01425 -** 1. Update wlanQueryInformation -** \main\maintrunk.MT5921\18 2007-10-30 10:44:57 GMT mtk01425 -** 1. Refine multicast list code -** 2. Refine TCP/IP csum offload code -** -** Revision 1.5 2007/07/17 13:01:18 MTK01088 -** add associate req and rsp function -** -** Revision 1.4 2007/07/13 05:19:19 MTK01084 -** provide timer set functions -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if DBG -int allocatedMemSize = 0; -#endif - -extern struct semaphore g_halt_sem; -extern int g_u4HaltFlag; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static PVOID pvIoBuffer = NULL; -static UINT_32 pvIoBufferSize = 0; -static UINT_32 pvIoBufferUsage = 0; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(MT6620) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_WMTHWVER_TYPE_T{ - WMTHWVER_MT6620_E1 = 0x0, - WMTHWVER_MT6620_E2 = 0x1, - WMTHWVER_MT6620_E3 = 0x2, - WMTHWVER_MT6620_E4 = 0x3, - WMTHWVER_MT6620_E5 = 0x4, - WMTHWVER_MT6620_E6 = 0x5, - WMTHWVER_MT6620_MAX, - WMTHWVER_INVALID = 0xff -} ENUM_WMTHWVER_TYPE_T, *P_ENUM_WMTHWVER_TYPE_T; - -extern ENUM_WMTHWVER_TYPE_T -mtk_wcn_wmt_hwver_get( - VOID - ); -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_HWVER_TYPE_T{ - HWVER_MT5931_E1 = 0x1, - HWVER_MT5931_E2 = 0x2, - HWVER_MT5931_E3 = 0x3, - HWVER_MT5931_MAX, - HWVER_INVALID = 0xff -} ENUM_HWVER_TYPE_T, *P_ENUM_HWVER_TYPE_T; -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_ENABLE_FW_DOWNLOAD - -static struct file *filp = NULL; -static uid_t orgfsuid; -static gid_t orgfsgid; -static mm_segment_t orgfs; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* open firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareOpen ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - /* FIX ME: since we don't have hotplug script in the filesystem - * , so the request_firmware() KAPI can not work properly - */ - - /* save uid and gid used for filesystem access. - * set user and group to 0(root) */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - orgfsuid = current->fsuid; - orgfsgid = current->fsgid; - current->fsuid = current->fsgid = 0; -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#else - struct cred *cred = get_task_cred(current); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#endif - - ASSERT(prGlueInfo); - - - orgfs = get_fs(); - set_fs(get_ds()); - - - /* open the fw file */ -#if defined(MT6620) & CFG_MULTI_ECOVER_SUPPORT - switch(mtk_wcn_wmt_hwver_get()) { - case WMTHWVER_MT6620_E1: - case WMTHWVER_MT6620_E2: - case WMTHWVER_MT6620_E3: - case WMTHWVER_MT6620_E4: - case WMTHWVER_MT6620_E5: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - - case WMTHWVER_MT6620_E6: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E6", O_RDONLY, 0); - break; - } -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT - switch (wlanGetEcoVersion(prGlueInfo->prAdapter)) { - case HWVER_MT5931_E1: - case HWVER_MT5931_E2: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E2", O_RDONLY, 0); - break; - case HWVER_MT5931_E3: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - } -#elif defined(MT6628) - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_MT6628", O_RDONLY, 0); -#else - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); -#endif - if (IS_ERR(filp)) { - DBGLOG(INIT, INFO, ("Open FW image: %s failed\n", CFG_FW_FILENAME)); - goto error_open; - } - DBGLOG(INIT, INFO, ("Open FW image: %s done\n", CFG_FW_FILENAME)); - return WLAN_STATUS_SUCCESS; - -error_open: - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif -#endif - return WLAN_STATUS_FAILURE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* release firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareClose ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if ((filp != NULL) && !IS_ERR(filp)) { - /* close firmware file */ - filp_close(filp, NULL); - - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - { -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); -#else - struct cred *cred = get_task_cred(current); -#endif - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif - } -#endif - filp = NULL; - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* load firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareLoad ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID prBuf, - IN UINT_32 u4Offset, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - ASSERT(prBuf); - - //l = filp->f_path.dentry->d_inode->i_size; - - /* the object must have a read method */ - if ((filp == NULL) || IS_ERR(filp) || (filp->f_op == NULL) || (filp->f_op->read == NULL)) { - goto error_read; - } else { - filp->f_pos = u4Offset; - *pu4Size = filp->f_op->read(filp, prBuf, *pu4Size, &filp->f_pos); - } - - return WLAN_STATUS_SUCCESS; - -error_read: - return WLAN_STATUS_FAILURE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* query firmware image size in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -kalFirmwareSize ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - *pu4Size = filp->f_path.dentry->d_inode->i_size; -#else - *pu4Size = filp->f_dentry->d_inode->i_size; -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - /* <1> Open firmware */ - if (kalFirmwareOpen(prGlueInfo) != WLAN_STATUS_SUCCESS) { - break; - } else { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - /* <2> Query firmare size */ - kalFirmwareSize(prGlueInfo, &u4FwSize); - /* <3> Use vmalloc for allocating large memory trunk */ - prFwBuffer = vmalloc(ALIGN_4(u4FwSize)); - /* <4> Load image binary into buffer */ - if (kalFirmwareLoad(prGlueInfo, prFwBuffer, 0, &u4FwSize) != WLAN_STATUS_SUCCESS) { - vfree(prFwBuffer); - kalFirmwareClose(prGlueInfo); - break; - } - /* <5> write back info */ - *pu4FileLength = u4FwSize; - *ppvMapFileBuf = prFwBuffer; - - return prFwBuffer; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - - /* pvMapFileBuf might be NULL when file doesn't exist */ - if(pvMapFileBuf) { - vfree(pvMapFileBuf); - } - - kalFirmwareClose(prGlueInfo); -} - -#endif - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - INT_32 i4Ret = 0; - - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - GL_HIF_INFO_T *prHifInfo = &prGlueInfo->rHifInfo; - prGlueInfo->prFw = NULL; - - /* <1> Open firmware */ - i4Ret = request_firmware(&prGlueInfo->prFw, CFG_FW_FILENAME, &prHifInfo->func->dev); - - if (i4Ret) { - printk (KERN_INFO DRV_NAME"fw %s:request failed %d\n", CFG_FW_FILENAME, i4Ret); - break; - } else { - *pu4FileLength = prGlueInfo->prFw->size; - *ppvMapFileBuf = prGlueInfo->prFw->data; - return prGlueInfo->prFw->data; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - ASSERT(pvMapFileBuf); - - release_firmware(prGlueInfo->prFw); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to acquire -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[out] pu4Flags Pointer of a variable for saving IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ) -{ - UINT_32 u4Flags = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Flags); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_lock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_lock_irqsave(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - *pu4Flags = u4Flags; - } - - return; -} /* end of kalAcquireSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to release -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[in] u4Flags Saved IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ) -{ - ASSERT(prGlueInfo); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_unlock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_unlock_irqrestore(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - } - - return; -} /* end of kalReleaseSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to update -* current MAC address. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pucMacAddr Pointer of current MAC address -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateMACAddress ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ) -{ - ASSERT(prGlueInfo); - ASSERT(pucMacAddr); - - if(UNEQUAL_MAC_ADDR(prGlueInfo->prDevHandler->dev_addr, pucMacAddr)) { - memcpy(prGlueInfo->prDevHandler->dev_addr, pucMacAddr, PARAM_MAC_ADDR_LEN); - } - - return; -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief To query the packet information for offload related parameters. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryTxChksumOffloadParam ( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag - ) -{ - struct sk_buff *skb = (struct sk_buff *) pvPacket; - UINT_8 ucFlag = 0; - - ASSERT(pvPacket); - ASSERT(pucFlag); - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) - if (skb->ip_summed == CHECKSUM_HW) -#else - if (skb->ip_summed == CHECKSUM_PARTIAL) -#endif - { - -#if DBG - /* Kevin: do double check, we can remove this part in Normal Driver. - * Because we register NIC feature with NETIF_F_IP_CSUM for MT5912B MAC, so - * we'll process IP packet only. - */ - if (skb->protocol != __constant_htons(ETH_P_IP)) { - //printk("Wrong skb->protocol( = %08x) for TX Checksum Offload.\n", skb->protocol); - } - else -#endif - ucFlag |= (TX_CS_IP_GEN | TX_CS_TCP_UDP_GEN); - } - - *pucFlag = ucFlag; - - return; -} /* kalQueryChksumOffloadParam */ - - -//4 2007/10/8, mikewu, this is rewritten by Mike -/*----------------------------------------------------------------------------*/ -/*! -* \brief To update the checksum offload status to the packet to be indicated to OS. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRxCSUMOffloadParam ( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - ASSERT(pvPacket); - - if ( (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS || aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)&& - ( (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) || (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS)) ) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - } - else { - skb->ip_summed = CHECKSUM_NONE; -#if DBG - if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE && aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE) { - DBGLOG(RX, TRACE, ("RX: \"non-IPv4/IPv6\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad IP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad TCP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad UDP Checksum\" Packet\n")); - } - else { - - } -#endif - } - -} /* kalUpdateRxCSUMOffloadParam */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to free packet allocated from kalPacketAlloc. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of the packet descriptor -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - dev_kfree_skb((struct sk_buff *) pvPacket); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Only handles driver own creating packet (coalescing buffer). -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param u4Size Pointer of Packet Handle -* \param ppucData Status Code for OS upper layer -* -* \return NULL: Failed to allocate skb, Not NULL get skb -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalPacketAlloc ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ) -{ - struct sk_buff *prSkb = dev_alloc_skb(u4Size); - - if (prSkb) { - *ppucData = (PUINT_8) (prSkb->data); - } -#if DBG -{ - PUINT_32 pu4Head = (PUINT_32)&prSkb->cb[0]; - *pu4Head = (UINT_32)prSkb->head; - DBGLOG(RX, TRACE, ("prSkb->head = %#lx, prSkb->cb = %#lx\n", (UINT_32)prSkb->head, *pu4Head)); -} -#endif - return (PVOID) prSkb; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Process the received packet for indicating to OS. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] pvPacket Pointer of the packet descriptor -* \param[in] pucPacketStart The starting address of the buffer of Rx packet. -* \param[in] u4PacketLen The packet length. -* \param[in] pfgIsRetain Is the packet to be retained. -* \param[in] aerCSUM The result of TCP/ IP checksum offload. -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalProcessRxPacket ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aerCSUM[] - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - - skb->data = (unsigned char *)pucPacketStart; - skb->tail = (unsigned char *) ((UINT_32) (pucPacketStart + u4PacketLen)); - skb->len = (unsigned int)u4PacketLen; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - kalUpdateRxCSUMOffloadParam(skb, aerCSUM); -#endif - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate an array of received packets is available for higher -* level protocol uses. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] apvPkts The packet array to be indicated -* \param[in] ucPktNum The number of packets to be indicated -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalRxIndicatePkts ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ) -{ - UINT_8 ucIdx = 0; - struct net_device *prNetDev = prGlueInfo->prDevHandler; - struct sk_buff *prSkb = NULL; - - ASSERT(prGlueInfo); - ASSERT(apvPkts); - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - for(ucIdx = 0; ucIdx < ucPktNum; ucIdx++) { - prSkb = apvPkts[ucIdx]; -#if DBG - do { - PUINT_8 pu4Head = (PUINT_8)&prSkb->cb[0]; - UINT_32 u4HeadValue = 0; - kalMemCopy(&u4HeadValue, pu4Head, sizeof(u4HeadValue)); - DBGLOG(RX, TRACE, ("prSkb->head = 0x%p, prSkb->cb = 0x%lx\n", pu4Head, u4HeadValue)); - } while (0); -#endif - - if (GLUE_GET_PKT_IS_P2P(prSkb)) { - /* P2P */ -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - prNetDev = kalP2PGetDevHdlr(prGlueInfo); - } - - prNetDev->stats.rx_bytes += prSkb->len; - prNetDev->stats.rx_packets++; - -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else if (GLUE_GET_PKT_IS_PAL(prSkb)) { - /* BOW */ -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_SEPARATE_DATA_PATH - if (prGlueInfo->rBowInfo.fgIsNetRegistered) { - prNetDev = prGlueInfo->rBowInfo.prDevHandler; - } -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else { - /* AIS */ - prNetDev = prGlueInfo->prDevHandler; - prGlueInfo->rNetDevStats.rx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.rx_packets++; - - } - - prNetDev->last_rx = jiffies; - prSkb->protocol = eth_type_trans(prSkb, prNetDev); - prSkb->dev = prNetDev; - //DBGLOG_MEM32(RX, TRACE, (PUINT_32)prSkb->data, prSkb->len); - DBGLOG(RX, EVENT, ("kalRxIndicatePkts len = %d\n", prSkb->len)); - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Rx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len && i < 64; i++) - { - LOG_FUNC("%02x ", prSkb->data[i]); - - if((i+1)%16 ==0) - { - LOG_FUNC("\n"); - } - } - - LOG_FUNC("\n"); -#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) - if(!in_interrupt()){ - netif_rx_ni(prSkb); /* only in non-interrupt context */ - } - else { - netif_rx(prSkb); - } -#else - netif_rx(prSkb); -#endif - - wlanReturnPacket(prGlueInfo->prAdapter, NULL); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Called by driver to indicate event to upper layer, for example, the wpa -* supplicant or wireless tools. -* -* \param[in] pvAdapter Pointer to the adapter descriptor. -* \param[in] eStatus Indicated status. -* \param[in] pvBuf Indicated message buffer. -* \param[in] u4BufLen Indicated message buffer size. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateStatusAndComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ) -{ - UINT_32 bufLen; - P_PARAM_STATUS_INDICATION_T pStatus = (P_PARAM_STATUS_INDICATION_T) pvBuf; - P_PARAM_AUTH_EVENT_T pAuth = (P_PARAM_AUTH_EVENT_T) pStatus; - P_PARAM_PMKID_CANDIDATE_LIST_T pPmkid = - (P_PARAM_PMKID_CANDIDATE_LIST_T) (pStatus + 1); - PARAM_MAC_ADDRESS arBssid; - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - kalMemZero(arBssid, MAC_ADDR_LEN); - - ASSERT(prGlueInfo); - - switch (eStatus) { - case WLAN_STATUS_ROAM_OUT_FIND_BEST: - case WLAN_STATUS_MEDIA_CONNECT: - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_CONNECTED; - - /* indicate assoc event */ - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &bufLen); - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, arBssid, bufLen); - - /* switch netif on */ - netif_carrier_on(prGlueInfo->prDevHandler); - - do { - /* print message on console */ - PARAM_SSID_T ssid; - - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuerySsid, - &ssid, - sizeof(ssid), - &bufLen); - - ssid.aucSsid[(ssid.u4SsidLen >= PARAM_MAX_LEN_SSID) ? - (PARAM_MAX_LEN_SSID - 1) : ssid.u4SsidLen ] = '\0'; - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_on [ssid:%s " MACSTR "]\n", - prGlueInfo->prDevHandler->name, - ssid.aucSsid, - MAC2STR(arBssid))); - } while(0); - - if(prGlueInfo->fgIsRegistered == TRUE) { - /* CFG80211 Indication */ - if(eStatus == WLAN_STATUS_MEDIA_CONNECT - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTING) { - cfg80211_connect_result(prGlueInfo->prDevHandler, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - WLAN_STATUS_SUCCESS, - GFP_KERNEL); - } - else if(eStatus == WLAN_STATUS_ROAM_OUT_FIND_BEST - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { - struct ieee80211_channel *prChannel = NULL; - UINT_8 ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - cfg80211_roamed(prGlueInfo->prDevHandler, - prChannel, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - GFP_KERNEL); - } - } - - break; - - case WLAN_STATUS_MEDIA_DISCONNECT: - /* indicate disassoc event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, NULL, 0); - /* For CR 90 and CR99, While supplicant do reassociate, driver will do netif_carrier_off first, - after associated success, at joinComplete(), do netif_carier_on, - but for unknown reason, the supplicant 1x pkt will not called the driver - hardStartXmit, for template workaround these bugs, add this compiling flag - */ - /* switch netif off */ - -#if 1 /* CONSOLE_MESSAGE */ - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_off\n", prGlueInfo->prDevHandler->name)); -#endif - - netif_carrier_off(prGlueInfo->prDevHandler); - - if(prGlueInfo->fgIsRegistered == TRUE - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { - /* CFG80211 Indication */ - cfg80211_disconnected(prGlueInfo->prDevHandler, 0, NULL, 0, GFP_KERNEL); - } - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - - break; - - case WLAN_STATUS_SCAN_COMPLETE: - /* indicate scan complete event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWSCAN, NULL, 0); - - /* 1. reset first for newly incoming request */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - /* 2. then CFG80211 Indication */ - if(prScanRequest != NULL) { - cfg80211_scan_done(prScanRequest, FALSE); - } - break; - - #if 0 - case WLAN_STATUS_MSDU_OK: - if (netif_running(prGlueInfo->prDevHandler)) { - netif_wake_queue(prGlueInfo->prDevHandler); - } - break; - #endif - - case WLAN_STATUS_MEDIA_SPECIFIC_INDICATION: - if (pStatus) { - switch (pStatus->eStatusType) { - case ENUM_STATUS_TYPE_AUTHENTICATION: - /* - printk(KERN_NOTICE "ENUM_STATUS_TYPE_AUTHENTICATION: L(%ld) [" MACSTR "] F:%lx\n", - pAuth->Request[0].Length, - MAC2STR(pAuth->Request[0].Bssid), - pAuth->Request[0].Flags); - */ - /* indicate (UC/GC) MIC ERROR event only */ - if ((pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_PAIRWISE_ERROR) || - (pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_GROUP_ERROR)) { - cfg80211_michael_mic_failure(prGlueInfo->prDevHandler, NULL, - (pAuth->arRequest[0].u4Flags == PARAM_AUTH_REQUEST_PAIRWISE_ERROR) ? NL80211_KEYTYPE_PAIRWISE : NL80211_KEYTYPE_GROUP, - 0, NULL, GFP_KERNEL); - wext_indicate_wext_event(prGlueInfo, - IWEVMICHAELMICFAILURE, - (unsigned char *)&pAuth->arRequest[0], - pAuth->arRequest[0].u4Length); - } - break; - - case ENUM_STATUS_TYPE_CANDIDATE_LIST: - /* - printk(KERN_NOTICE "Param_StatusType_PMKID_CandidateList: Ver(%ld) Num(%ld)\n", - pPmkid->u2Version, - pPmkid->u4NumCandidates); - if (pPmkid->u4NumCandidates > 0) { - printk(KERN_NOTICE "candidate[" MACSTR "] preAuth Flag:%lx\n", - MAC2STR(pPmkid->arCandidateList[0].rBSSID), - pPmkid->arCandidateList[0].fgFlags); - } - */ - { - UINT_32 i = 0; - - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)&pPmkid->arCandidateList[0]; - - for (i=0; iu4NumCandidates; i++) { - wext_indicate_wext_event(prGlueInfo, - IWEVPMKIDCAND, - (unsigned char *)&pPmkid->arCandidateList[i], - pPmkid->u4NumCandidates); - prPmkidCand += sizeof(PARAM_PMKID_CANDIDATE_T); - } - } - break; - - default: - /* case ENUM_STATUS_TYPE_MEDIA_STREAM_MODE */ - /* - printk(KERN_NOTICE "unknown media specific indication type:%x\n", - pStatus->StatusType); - */ - break; - } - } - else { - /* - printk(KERN_WARNING "media specific indication buffer NULL\n"); - */ - } - break; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case WLAN_STATUS_BWCS_UPDATE: - { - wext_indicate_wext_event(prGlueInfo, IWEVCUSTOM, pvBuf, sizeof(PTA_IPC_T)); - } - - break; - -#endif - - default: - /* - printk(KERN_WARNING "unknown indication:%lx\n", eStatus); - */ - break; - } -} /* kalIndicateStatusAndComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to update the (re)association request -* information to the structure used to query and set -* OID_802_11_ASSOCIATION_INFORMATION. -* -* \param[in] prGlueInfo Pointer to the Glue structure. -* \param[in] pucFrameBody Pointer to the frame body of the last (Re)Association -* Request frame from the AP. -* \param[in] u4FrameBodyLen The length of the frame body of the last -* (Re)Association Request frame. -* \param[in] fgReassocRequest TRUE, if it is a Reassociation Request frame. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocReqInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - PUINT_8 cp; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4ReqIeLength = 0; - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - wext_indicate_wext_event(prGlueInfo, IWEVASSOCREQIE, cp, u4FrameBodyLen); - - if(u4FrameBodyLen <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4ReqIeLength = u4FrameBodyLen; - kalMemCopy(prGlueInfo->aucReqIe, cp, u4FrameBodyLen); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to update the (re)association -* response information to the structure used to reply with -* cfg80211_connect_result -* -* @param prGlueInfo Pointer to adapter descriptor -* @param pucFrameBody Pointer to the frame body of the last (Re)Association -* Response frame from the AP -* @param u4FrameBodyLen The length of the frame body of the last -* (Re)Association Response frame -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ) -{ - UINT_32 u4IEOffset = 6; /* cap_info, status_code & assoc_id */ - UINT_32 u4IELength = u4FrameBodyLen - u4IEOffset; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4RspIeLength = 0; - - if(u4IELength <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4RspIeLength = u4IELength; - kalMemCopy(prGlueInfo->aucRspIe, pucFrameBody + u4IEOffset, u4IELength); - } - -} /* kalUpdateReAssocRspInfo */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSendCompleteAndAwakeQueue ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - - struct net_device *prDev = NULL; - struct sk_buff *prSkb = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucNetworkType = 0; - BOOLEAN fgIsValidDevice = TRUE; - - - ASSERT(pvPacket); - ASSERT(prGlueInfo->i4TxPendingFrameNum); - - prSkb = (struct sk_buff *) pvPacket; -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); -#endif - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (GLUE_GET_PKT_IS_PAL(prSkb)) { - ucNetworkType = NETWORK_TYPE_BOW_INDEX; - } else if (GLUE_GET_PKT_IS_P2P(prSkb)) { - ucNetworkType = NETWORK_TYPE_P2P_INDEX; - -#if CFG_ENABLE_WIFI_DIRECT - /* in case packet was sent after P2P device is unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - fgIsValidDevice = FALSE; - } -#endif - } else { - ucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_DEC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx]); - prDev = prSkb->dev; - - ASSERT(prDev); - - if(fgIsValidDevice == TRUE) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (netif_subqueue_stopped(prDev, prSkb) && - prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx] <= CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD) { - netif_wake_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum < CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_wake_queue(prGlueInfo->prDevHandler); - } -#endif - } - - - dev_kfree_skb((struct sk_buff *) pvPacket); - - DBGLOG(TX, EVENT, ("----- pending frame %d -----\n", prGlueInfo->i4TxPendingFrameNum)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Copy Mac Address setting from registry. It's All Zeros in Linux. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \param[out] paucMacAddr Pointer to the Mac Address buffer -* -* \retval WLAN_STATUS_SUCCESS -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryRegistryMacAddr ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_8 paucMacAddr - ) -{ - UINT_8 aucZeroMac[MAC_ADDR_LEN] = {0,0,0,0,0,0} - DEBUGFUNC("kalQueryRegistryMacAddr"); - - ASSERT(prGlueInfo); - ASSERT(paucMacAddr); - - kalMemCopy((PVOID) paucMacAddr, (PVOID)aucZeroMac, MAC_ADDR_LEN); - - return; -} /* end of kalQueryRegistryMacAddr() */ - -#if CFG_SUPPORT_EXT_CONFIG -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read external configuration, ex. NVRAM or file -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - /* External data is given from user space by ioctl or /proc, not read by - driver. - */ - if (0 != prGlueInfo->u4ExtCfgLength) { - DBGLOG(INIT, TRACE, ("Read external configuration data -- OK\n")); - } - else { - DBGLOG(INIT, TRACE, ("Read external configuration data -- fail\n")); - } - - return prGlueInfo->u4ExtCfgLength; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This inline function is to extract some packet information, including -* user priority, packet length, destination address, 802.1x and BT over Wi-Fi -* or not. -* -* @param prGlueInfo Pointer to the glue structure -* @param prNdisPacket Packet descriptor -* @param pucPriorityParam User priority -* @param pu4PacketLen Packet length -* @param pucEthDestAddr Destination address -* @param pfgIs1X 802.1x packet or not -* @param pfgIsPAL BT over Wi-Fi packet or not -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType - ) -{ - - UINT_32 u4PacketLen; - - - UINT_8 ucUserPriority = USER_PRIORITY_DEFAULT; /* Default */ - UINT_16 u2EtherTypeLen; - struct sk_buff *prSkb = (struct sk_buff *) prPacket; - PUINT_8 aucLookAheadBuf = NULL; - - DEBUGFUNC("kalQoSFrameClassifierAndPacketInfo"); - - u4PacketLen = prSkb->len; - - if (u4PacketLen < ETH_HLEN) { - DBGLOG(INIT, WARN, ("Invalid Ether packet length: %d\n", u4PacketLen)); - return FALSE; - } - - aucLookAheadBuf = prSkb->data; - - *pfgIs1X = FALSE; - *pfgIsPAL = FALSE; - //4 <3> Obtain the User Priority for WMM - u2EtherTypeLen = (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET] << 8) | (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET + 1]); - - if ((u2EtherTypeLen == ETH_P_IP) && - (u4PacketLen >= LOOK_AHEAD_LEN)) { - PUINT_8 pucIpHdr = &aucLookAheadBuf[ETH_HLEN]; - UINT_8 ucIpVersion; - - ucIpVersion = (pucIpHdr[0] & IPVH_VERSION_MASK) >> IPVH_VERSION_OFFSET; - //printk ("ip version %x\n", ucIpVersion); - if (ucIpVersion == IPVERSION) { - UINT_8 ucIpTos; - /* Get the DSCP value from the header of IP packet. */ - ucIpTos = pucIpHdr[1]; - ucUserPriority = ((ucIpTos & IPTOS_PREC_MASK) >> IPTOS_PREC_OFFSET); - } - - /* TODO(Kevin): Add TSPEC classifier here */ - } - else if (u2EtherTypeLen == ETH_P_1X) { /* For Port Control */ - //DBGLOG(REQ, TRACE, ("Tx 1x\n")); - *pfgIs1X = TRUE; - } - else if (u2EtherTypeLen == ETH_P_PRE_1X) { /* For Pre 1x pkt */ - //DBGLOG(REQ, TRACE, ("Tx Pre-1x\n")); - *pfgIs1X = TRUE; - } -#if CFG_SUPPORT_WAPI - else if (u2EtherTypeLen == ETH_WPI_1X) { - *pfgIs1X = TRUE; - } -#endif - else if (u2EtherTypeLen <= 1500) { /* 802.3 Frame */ - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) { - - UINT_16 tmp = ((aucLookAheadBuf[ETH_SNAP_OFFSET + 3] << 8) | aucLookAheadBuf[ETH_SNAP_OFFSET + 4]); - - *pfgIsPAL = TRUE; - ucUserPriority = (UINT_8)prSkb->priority; - - if (tmp == BOW_PROTOCOL_ID_SECURITY_FRAME) { - *pfgIs1X = TRUE; - } - } - } - - //4 <4> Return the value of Priority Parameter. - *pucPriorityParam = ucUserPriority; - - //4 <5> Retrieve Packet Information - DA - /* Packet Length/ Destination Address */ - *pu4PacketLen = u4PacketLen; - - kalMemCopy(pucEthDestAddr, aucLookAheadBuf, PARAM_MAC_ADDR_LEN); - - - //<6> Network type -#if CFG_ENABLE_BT_OVER_WIFI - if(*pfgIsPAL == TRUE) { - *pucNetworkType = NETWORK_TYPE_BOW_INDEX; - } - else -#endif - { -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered && GLUE_GET_PKT_IS_P2P(prPacket)) { - *pucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else -#endif - { - *pucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - } - return TRUE; -} /* end of kalQoSFrameClassifier() */ - -VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ) -{ - - ASSERT(prGlueInfo); - /* remove timeout check timer */ - wlanoidClearTimeoutCheck(prGlueInfo->prAdapter); - - //if (prGlueInfo->u4TimeoutFlag != 1) { - prGlueInfo->rPendStatus = rOidStatus; - complete(&prGlueInfo->rPendComp); - prGlueInfo->u4OidCompleteFlag = 1; - //} - /* else let it timeout on kalIoctl entry */ -} - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - //if (prGlueInfo->u4TimeoutFlag != 1) { - //clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - if (prGlueInfo->u4OidCompleteFlag != 1) { - complete(&prGlueInfo->rPendComp); - } - //} -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to transfer linux ioctl to OID, and we -* need to specify the behavior of the OID by ourself -* -* @param prGlueInfo Pointer to the glue structure -* @param pvInfoBuf Data buffer -* @param u4InfoBufLen Data buffer length -* @param fgRead Is this a read OID -* @param fgWaitResp does this OID need to wait for values -* @param fgCmd does this OID compose command packet -* @param pu4QryInfoLen The data length of the return values -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -// todo: enqueue the i/o requests for multiple processes access -// -// currently, return -1 -// - -//static GL_IO_REQ_T OidEntry; - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ) -{ - P_GL_IO_REQ_T prIoReq = NULL; - WLAN_STATUS ret = WLAN_STATUS_SUCCESS; - - //GLUE_SPIN_LOCK_DECLARATION(); - ASSERT(prGlueInfo); - - /* <1> Check if driver is halt */ - - //if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - // return WLAN_STATUS_ADAPTER_NOT_READY; - //} - - if (down_interruptible(&g_halt_sem)) { - return WLAN_STATUS_FAILURE; - } - - - if (g_u4HaltFlag) { - up(&g_halt_sem); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if(down_interruptible(&prGlueInfo->ioctl_sem)) { - up(&g_halt_sem); - return WLAN_STATUS_FAILURE; - } - - /* <2> TODO: thread-safe */ - - /* <3> point to the OidEntry of Glue layer */ - - prIoReq = &(prGlueInfo->OidEntry); - - ASSERT(prIoReq); - - /* <4> Compose the I/O request */ - prIoReq->prAdapter = prGlueInfo->prAdapter; - prIoReq->pfnOidHandler = pfnOidHandler; - prIoReq->pvInfoBuf = pvInfoBuf; - prIoReq->u4InfoBufLen = u4InfoBufLen; - prIoReq->pu4QryInfoLen = pu4QryInfoLen; - prIoReq->fgRead = fgRead; - prIoReq->fgWaitResp= fgWaitResp; - prIoReq->rStatus = WLAN_STATUS_FAILURE; -#if CFG_ENABLE_WIFI_DIRECT - prIoReq->fgIsP2pOid = fgIsP2pOid; -#endif - - /* <5> Reset the status of pending OID */ - prGlueInfo->rPendStatus = WLAN_STATUS_FAILURE; - //prGlueInfo->u4TimeoutFlag = 0; - prGlueInfo->u4OidCompleteFlag = 0; - - /* <6> Check if we use the command queue */ - prIoReq->u4Flag = fgCmd; - - /* <7> schedule the OID bit */ - set_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - - /* <8> Wake up tx thread to handle kick start the I/O request */ - wake_up_interruptible(&prGlueInfo->waitq); - - /* <9> Block and wait for event or timeout, current the timeout is 5 secs */ - //if (wait_for_completion_interruptible_timeout(&prGlueInfo->rPendComp, 5 * KAL_HZ)) { - //if (!wait_for_completion_interruptible(&prGlueInfo->rPendComp)) { - wait_for_completion(&prGlueInfo->rPendComp); { - /* Case 1: No timeout. */ - /* if return WLAN_STATUS_PENDING, the status of cmd is stored in prGlueInfo */ - if (prIoReq->rStatus == WLAN_STATUS_PENDING) { - ret = prGlueInfo->rPendStatus; - } else { - ret = prIoReq->rStatus; - } - } - #if 0 - else { - /* Case 2: timeout */ - /* clear pending OID's cmd in CMD queue */ - if (fgCmd) { - prGlueInfo->u4TimeoutFlag = 1; - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - } - ret = WLAN_STATUS_FAILURE; - } - #endif - - up(&prGlueInfo->ioctl_sem); - up(&g_halt_sem); - - return ret; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending security frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending security frames -* belongs to dedicated network type -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param eNetworkTypeIdx Network Type Index -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* belongs to dedicated network type -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFramesByNetType ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} /* kalClearMgmtFramesByNetType */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a kernel thread function for handling command packets -* Tx requests and interrupt events -* -* @param data data pointer to private data of tx_thread -* -* @retval If the function succeeds, the return value is 0. -* Otherwise, an error code is returned. -* -*/ -/*----------------------------------------------------------------------------*/ - -int tx_thread(void *data) -{ - struct net_device *dev = data; - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(dev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_GL_IO_REQ_T prIoReq = NULL; - P_QUE_T prTxQueue = NULL; - P_QUE_T prCmdQue = NULL; - - int ret = 0; - - BOOLEAN fgNeedHwAccess = FALSE; - - struct sk_buff *prSkb = NULL; - - /* for spin lock acquire and release */ - GLUE_SPIN_LOCK_DECLARATION(); - - prTxQueue = &prGlueInfo->rTxQueue; - prCmdQue = &prGlueInfo->rCmdQueue; - - current->flags |= PF_NOFREEZE; - - DBGLOG(INIT, INFO, ("tx_thread starts running... \n")); - - while (TRUE) { - -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } -#endif - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("tx_thread should stop now...\n")); - break; - } - - /* - * sleep on waitqueue if no events occurred. Event contain (1) GLUE_FLAG_INT - * (2) GLUE_FLAG_OID (3) GLUE_FLAG_TXREQ (4) GLUE_FLAG_HALT - * - */ - - ret = wait_event_interruptible(prGlueInfo->waitq, - (prGlueInfo->u4Flag != 0)); - -#if CFG_DBG_GPIO_PINS - /* TX thread Wake up */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_LOW); -#endif -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } - - if (test_and_clear_bit(GLUE_FLAG_FRAME_FILTER_BIT, &prGlueInfo->u4Flag)) { - p2pFuncUpdateMgmtFrameRegister(prGlueInfo->prAdapter, prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter); - } - - -#endif - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("<1>tx_thread should stop now...\n")); - break; - } - - fgNeedHwAccess = FALSE; - - /* Handle Interrupt */ - if (test_and_clear_bit(GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag)) { - - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - - /* the Wi-Fi interrupt is already disabled in mmc thread, - so we set the flag only to enable the interrupt later */ - prGlueInfo->prAdapter->fgIsIntEnable = FALSE; - //wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - DBGLOG(INIT, INFO, ("ignore pending interrupt\n")); - } - else { - - wlanIST(prGlueInfo->prAdapter); - } - } - - /* transfer ioctl to OID request */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<2>tx_thread should stop now...\n"); - break; - } - #endif - - do { - if (test_and_clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag)) { - /* get current prIoReq */ - prIoReq = &(prGlueInfo->OidEntry); -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE - && prIoReq->fgIsP2pOid == TRUE) { - /* if this Oid belongs to p2p and p2p module is removed - * do nothing, - */ - } - else -#endif - { - if (FALSE == prIoReq->fgRead) { - prIoReq->rStatus = wlanSetInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } else { - prIoReq->rStatus = wlanQueryInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } - - if (prIoReq->rStatus != WLAN_STATUS_PENDING) { - complete(&prGlueInfo->rPendComp); - } - else { - wlanoidTimeoutCheck(prGlueInfo->prAdapter, prIoReq->pfnOidHandler); - } - } - } - - } while (FALSE); - - - /* - * - * if TX request, clear the TXREQ flag. TXREQ set by kalSetEvent/GlueSetEvent - * indicates the following requests occur - * - */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<3>tx_thread should stop now...\n"); - break; - } - #endif - - if (test_and_clear_bit(GLUE_FLAG_TXREQ_BIT, &prGlueInfo->u4Flag)) - { - - /* Process Mailbox Messages */ - wlanProcessMboxMessage(prGlueInfo->prAdapter); - - /* Process CMD request */ - do { - if (prCmdQue->u4NumElem > 0) { - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - wlanProcessCommandQueue(prGlueInfo->prAdapter, prCmdQue); - } - } while (FALSE); - - /* Handle Packet Tx */ - { - while (QUEUE_IS_NOT_EMPTY(prTxQueue)) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQueue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - ASSERT(prQueueEntry); - if (NULL == prQueueEntry) { - break; - } - - prSkb = (struct sk_buff *) GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - ASSERT(prSkb); - if (NULL == prSkb) { - DBGLOG(INIT, WARN, ("prSkb == NULL in tx\n")); - continue; - } - - if(wlanEnqueueTxPacket(prGlueInfo->prAdapter, - (P_NATIVE_PACKET)prSkb) == WLAN_STATUS_RESOURCES) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_HEAD(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - break; - } - } - - if (wlanGetTxPendingFrameCount(prGlueInfo->prAdapter) > 0) { - wlanTxPendingPackets(prGlueInfo->prAdapter, &fgNeedHwAccess); - } - } - - } - - /* Process RX, In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't do reset */ - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - - /* handle cnmTimer time out */ - if (test_and_clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag)) { - wlanTimerTimeoutCheck(prGlueInfo->prAdapter); - } - - #if CFG_DBG_GPIO_PINS - /* TX thread go to sleep */ - if (!prGlueInfo->u4Flag){ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_HIGH); - } - #endif - } - - #if 0 - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - #endif - - /* flush the pending TX packets */ - if (prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prGlueInfo); - } - - /* flush pending security frames */ - if (prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prGlueInfo); - } - - /* remove pending oid */ - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - - - /* In linux, we don't need to free sk_buff by ourself */ - - DBGLOG(INIT, INFO, ("mtk_sdiod stops\n")); - complete(&prGlueInfo->rHaltComp); - - return 0; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to check if card is removed -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval TRUE: card is removed -* FALSE: card is still attached -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return FALSE; - // Linux MMC doesn't have removal notification yet -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This routine is used to send command to firmware for overriding netweork address - * - * \param pvGlueInfo Pointer of GLUE Data Structure - - * \retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->fgIsMacAddrOverride == FALSE) { - #if !defined(CONFIG_X86) - UINT_32 i; - BOOLEAN fgIsReadError = FALSE; - - for(i = 0 ; i < MAC_ADDR_LEN ; i+=2) { - if(kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prMacAddr) + i)) == FALSE) { - fgIsReadError = TRUE; - break; - } - } - - if(fgIsReadError == TRUE) { - return FALSE; - } - else { - return TRUE; - } - #else - /* x86 Linux doesn't need to override network address so far */ - return FALSE; - #endif - } - else { - COPY_MAC_ADDR(prMacAddr, prGlueInfo->rMacAddrOverride); - - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to flush pending TX packets in glue layer -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prTxQue; - P_QUE_ENTRY_T prQueueEntry; - PVOID prPacket; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prTxQue = &(prGlueInfo->rTxQueue); - - if (prGlueInfo->i4TxPendingFrameNum) { - while (TRUE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - if (prQueueEntry == NULL) { - break; - } - - prPacket = GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - - kalSendComplete(prGlueInfo, - prPacket, - WLAN_STATUS_NOT_ACCEPTED); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is get indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->eParamMediaStateIndicated; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ) -{ - ASSERT(prGlueInfo); - - prGlueInfo->eParamMediaStateIndicated = eParamMediaStateIndicate; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending OID staying in command queue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - - if (((P_CMD_INFO_T)prQueueEntry)->fgIsOid) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - break; - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - - if (prCmdInfo) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - } - else { - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_NOT_ACCEPTED); - } - - prGlueInfo->u4OidCompleteFlag = 1; - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to insert command into prCmdQueue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* prQueueEntry Pointer of queue entry to be inserted -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ) -{ - P_QUE_T prCmdQue; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prQueueEntry); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Handle EVENT_ID_ASSOC_INFO event packet by indicating to OS with -* proper information -* -* @param pvGlueInfo Pointer of GLUE Data Structure -* @param prAssocInfo Pointer of EVENT_ID_ASSOC_INFO Packet -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ) -{ - // to do -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware load address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4LoadAddress; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware start address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4StartAddress; -} - -/*----------------------------------------------------------------------------*/ -/*! - * * @brief Notify OS with SendComplete event of the specific packet. Linux should - * * free packets here. - * * - * * @param pvGlueInfo Pointer of GLUE Data Structure - * * @param pvPacket Pointer of Packet Handle - * * @param status Status Code for OS upper layer - * * - * * @return none - * */ -/*----------------------------------------------------------------------------*/ - -/// Todo -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ) -{ - ASSERT(pvPacket); - - dev_kfree_skb((struct sk_buff *) pvPacket); - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); -} - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (UINT_32)(prGlueInfo->i4TxPendingFrameNum); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to retrieve the number of pending commands -* (including MMPDU, 802.1X and command packets) -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - - ASSERT(prGlueInfo); - prCmdQue = &prGlueInfo->rCmdQueue; - - return prCmdQue->u4NumElem; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Timer Initialization Procedure -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] prTimerHandler Pointer to timer handling function, whose only -* argument is "prAdapter" -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ - -//static struct timer_list tickfn; - -VOID -kalOsTimerInitialize ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ) -{ - - ASSERT(prGlueInfo); - - init_timer(&(prGlueInfo->tickfn)); - prGlueInfo->tickfn.function = prTimerHandler; - prGlueInfo->tickfn.data = (unsigned long) prGlueInfo; -} - -// Todo -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] rInterval Time out interval from current time. -* -* \retval TRUE Success. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ) -{ - ASSERT(prGlueInfo); - del_timer_sync(&(prGlueInfo->tickfn)); - - prGlueInfo->tickfn.expires = jiffies + u4Interval * HZ / MSEC_PER_SEC; - add_timer(&(prGlueInfo->tickfn)); - - return TRUE; /* success */ -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to cancel -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval TRUE : Timer has been canceled -* FALAE : Timer doens't exist -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - - if (del_timer_sync(&(prGlueInfo->tickfn)) >=0) { - return TRUE; - } else { - return FALSE; - } -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is a callback function for scanning done -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ) -{ - ASSERT(prGlueInfo); - - /* check for system configuration for generating error message on scan list */ - //wlanCheckSystemConfiguration(prGlueInfo->prAdapter); - - kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to generate a random number -* -* \param none -* -* \retval UINT_32 -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalRandomNumber( - VOID - ) -{ - UINT_32 number = 0; - - get_random_bytes(&number, 4); - - return number; -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief command timeout call-back function - * - * \param[in] prGlueInfo Pointer to the GLUE data structure. - * - * \retval (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -kalTimeoutHandler (unsigned long arg) -{ - - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T) arg; - - ASSERT(prGlueInfo); - - /* Notify tx thread for timeout event */ - set_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - wake_up_interruptible(&prGlueInfo->waitq); - - return; -} - - -VOID -kalSetEvent (P_GLUE_INFO_T pr) { - set_bit(GLUE_FLAG_TXREQ_BIT, &pr->u4Flag); - wake_up_interruptible(&pr->waitq); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if configuration file (NVRAM/Registry) exists -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if !defined(CONFIG_X86) - ASSERT(prGlueInfo); - - return prGlueInfo->fgNvramAvailable; -#else - /* there is no configuration data for x86-linux */ - return FALSE; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Registry information -* -* \param[in] -* prGlueInfo -* -* \return -* Pointer of REG_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return &(prGlueInfo->rRegInfo); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve version information of corresponding configuration file -* -* \param[in] -* prGlueInfo -* -* \param[out] -* pu2Part1CfgOwnVersion -* pu2Part1CfgPeerVersion -* pu2Part2CfgOwnVersion -* pu2Part2CfgPeerVersion -* -* \return -* NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ) -{ - ASSERT(prGlueInfo); - - ASSERT(pu2Part1CfgOwnVersion); - ASSERT(pu2Part1CfgPeerVersion); - ASSERT(pu2Part2CfgOwnVersion); - ASSERT(pu2Part2CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1OwnVersion), - pu2Part1CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1PeerVersion), - pu2Part1CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion), - pu2Part2CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2PeerVersion), - pu2Part2CfgPeerVersion); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the WPS is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->fgWpsActive); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief update RSSI and LinkQuality to GLUE layer -* -* \param[in] -* prGlueInfo -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* \return -* None -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - struct iw_statistics *pStats = (struct iw_statistics *)NULL; - - ASSERT(prGlueInfo); - - switch(eNetTypeIdx) { - case KAL_NETWORK_TYPE_AIS_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case KAL_NETWORK_TYPE_P2P_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - break; -#endif -#endif - default: - break; - - } - - if (pStats) { - pStats->qual.qual = cLinkQuality; - pStats->qual.noise = 0; - pStats->qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_NOISE_UPDATED; - pStats->qual.level = 0x100 + cRssi; - pStats->qual.updated |= IW_QUAL_LEVEL_UPDATED; - } - - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Pre-allocate I/O buffer -* -* \param[in] -* none -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ) -{ - UINT_32 u4Size; - - if(CFG_COALESCING_BUFFER_SIZE >= CFG_RX_COALESCING_BUFFER_SIZE) { - u4Size = CFG_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - else { - u4Size = CFG_RX_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - - pvIoBuffer = kmalloc(u4Size, GFP_KERNEL); - if(pvIoBuffer) { - pvIoBufferSize = u4Size; - pvIoBufferUsage = 0; - - return TRUE; - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free pre-allocated I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUninitIOBuffer( - VOID - ) -{ - if(pvIoBuffer) { - kfree(pvIoBuffer); - - pvIoBuffer = (PVOID) NULL; - pvIoBufferSize = 0; - pvIoBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatch pre-allocated I/O buffer -* -* \param[in] -* u4AllocSize -* -* \return -* PVOID for pointer of pre-allocated I/O buffer -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ) -{ - PVOID ret = (PVOID)NULL; - - if(pvIoBuffer) { - if(u4AllocSize <= (pvIoBufferSize - pvIoBufferUsage)) { - ret = (PVOID)&(((PUINT_8)(pvIoBuffer))[pvIoBufferUsage]); - pvIoBufferUsage += u4AllocSize; - } - } - else { - /* fault tolerance */ - ret = (PVOID) kalMemAlloc(u4AllocSize, PHY_MEM_TYPE); - } - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release all dispatched I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ) -{ - if(pvIoBuffer) { - pvIoBufferUsage -= u4Size; - } - else { - /* fault tolerance */ - kalMemFree(pvAddr, PHY_MEM_TYPE, u4Size); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo)) - return TRUE; -#endif - - return FALSE; -} - - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the MFP is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->rWpaInfo.u4Mfp); -} -#endif - -struct file* -kalFileOpen( - const char* path, - int flags, - int rights) -{ - struct file* filp = NULL; - mm_segment_t oldfs; - int err = 0; - - oldfs = get_fs(); - set_fs(get_ds()); - filp = filp_open(path, flags, rights); - set_fs(oldfs); - if(IS_ERR(filp)) { - err = PTR_ERR(filp); - return NULL; - } - return filp; -} - -VOID -kalFileClose( - struct file* file) -{ - filp_close(file, NULL); -} - -UINT_32 -kalFileRead( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_read(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalFileWrite( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_write(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size) -{ - struct file* file = NULL; - UINT_32 ret; - UINT_32 u4Flags = 0; - - if(fgDoAppend) { - u4Flags = O_APPEND; - } - - file = kalFileOpen(pucPath, O_WRONLY | O_CREAT | u4Flags, S_IRWXU); - ret = kalFileWrite(file, 0, pucData, u4Size); - kalFileClose(file); - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate BSS-INFO to NL80211 as scanning result -* -* \param[in] -* prGlueInfo -* pucBeaconProbeResp -* u4FrameLen -* -* -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucBeaconProbeResp, - IN UINT_32 u4FrameLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ) -{ - struct wiphy *wiphy; - struct ieee80211_channel *prChannel = NULL; - - ASSERT(prGlueInfo); - wiphy = priv_to_wiphy(prGlueInfo); - - /* search through channel entries */ - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - if(prChannel != NULL && prGlueInfo->prScanRequest != NULL) { - struct cfg80211_bss *bss; - - /* indicate to NL80211 subsystem */ - bss = cfg80211_inform_bss_frame(wiphy, - prChannel, - (struct ieee80211_mgmt *)pucBeaconProbeResp, - u4FrameLen, - i4SignalStrength * 100, - GFP_KERNEL); - - if(!bss) { - DBGLOG(REQ, WARN, ("cfg80211_inform_bss_frame() returned with NULL\n")); - } - else { - cfg80211_put_bss(bss); - } - } - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p.c deleted file mode 100755 index 602d43a973bf..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p.c +++ /dev/null @@ -1,5498 +0,0 @@ -/* -** $Id: @(#) gl_p2p.c@@ -*/ - -/*! \file gl_p2p.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_p2p.c $ -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** FPB from ALPS.JB to phase 2 release. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 09 2012 terry.wu - * [WCXRP00001166] [Wi-Fi] [Driver] cfg80211 integration for p2p newtork - * cfg80211 integration for p2p network. - * - * 12 19 2011 terry.wu - * [WCXRP00001142] [Wi-Fi] [P2P Driver] XOR local admin bit to generate p2p net device MAC - * XOR local administrated bit to generate net device MAC of p2p network. - * - * 12 02 2011 yuche.tsai - * NULL - * Fix possible KE when unload p2p. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 16 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Avoid using work thread in set p2p multicast address callback. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 11 07 2011 yuche.tsai - * NULL - * [ALPS 00087243] KE in worker thread. - * The multicast address list is scheduled in worker thread. - * Before the worker thread is excuted, if P2P is unloaded, a KE may occur. - * - * 10 26 2011 terry.wu - * [WCXRP00001066] [MT6620 Wi-Fi] [P2P Driver] Fix P2P Oid Issue - * Fix some P2P OID functions didn't raise its flag "fgIsP2pOid" issue. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 26 2011 yuche.tsai - * NULL - * Fix bug of parsing secondary device list type issue. - * - * 08 24 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Abort. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue of P2P. - * - * 08 22 2011 chinglan.wang - * NULL - * Fix invitation indication bug.. - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 05 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Add Password ID check for quick connection. - * Also modify some connection policy. - * - * 07 18 2011 chinglan.wang - * NULL - * Add IOC_P2P_GO_WSC_IE (p2p capability). - * - * 06 14 2011 yuche.tsai - * NULL - * Add compile flag to disable persistent group support. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 21 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * 1. Revise P2P power mode setting. - * 2. Revise fast-PS for concurrent - * - * 04 19 2011 wh.su - * NULL - * Adding length check before doing WPA RSN IE parsing for scan results indicate. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 07 2011 terry.wu - * [WCXRP00000619] [MT6620 Wi-Fi][Driver] fix kernel panic may occur when removing wlan - * Fix kernel panic may occur when removing wlan driver. - * - * 03 31 2011 wh.su - * [WCXRP00000614] [MT6620 Wi-Fi][Driver] P2P: Update beacon content while setting WSC IE - * Update the wsc ie to beacon content. - * - * 03 25 2011 wh.su - * NULL - * add the sample code for set power mode and get power mode. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Modify formation policy. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 wh.su - * [WCXRP00000563] [MT6620 Wi-Fi] [P2P] Set local config method while set password Id ready - * set lccal config method method while set password Id ready. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine queue_select function - * - * 03 13 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * add code for avoid compiling warning. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * support the power save related p2p setting. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify P2P's netdevice functions to support multiple H/W queues - * - * 03 03 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * for get request, the buffer length to be copied is header + payload. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * add a missed break. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 02 25 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * add the Operation channel setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the set int ioctl set index and value map to driver issue. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * modify the structure pointer for set WSC IE. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 09 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * fix typo - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 20 2010 cp.wu - * NULL - * correct typo. - * - * 08 20 2010 yuche.tsai - * NULL - * Invert Connection request provision status parameter. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 18 2010 cp.wu - * NULL - * modify pwp ioctls attribution by removing FIXED_SIZE. - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 17 2010 cp.wu - * NULL - * correct p2p net device registration with NULL pointer access issue. - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * add basic support for ioctl of getting scan result. (only address and SSID are reporterd though) - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement private io controls for Wi-Fi Direct - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include - -#include -//#include -#include "gl_p2p_ioctl.h" - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ARGV_MAX_NUM (4) - -/*For CFG80211 - wiphy parameters*/ -#define MAX_SCAN_LIST_NUM (1) -#define MAX_SCAN_IE_LEN (512) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -/* for cfg80211 - frequency table */ -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -static struct ieee80211_channel mtk_5ghz_a_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - /* MCS1~7*/ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#if 0 -/*Bandwidth 20Mhz Only*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#else -/*Bandwidth 20/40Mhz*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#endif - -static struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_a_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_a_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_p2p_config_ops = { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) - /* Froyo */ - .change_virtual_intf = mtk_p2p_cfg80211_change_iface, // 1 st - .change_bss = mtk_p2p_cfg80211_change_bss, - .scan = mtk_p2p_cfg80211_scan, - .remain_on_channel = mtk_p2p_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_p2p_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_p2p_cfg80211_mgmt_tx, - .connect = mtk_p2p_cfg80211_connect, - .disconnect = mtk_p2p_cfg80211_disconnect, - .deauth = mtk_p2p_cfg80211_deauth, - .disassoc = mtk_p2p_cfg80211_disassoc, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .start_ap = mtk_p2p_cfg80211_start_ap, - .change_beacon = mtk_p2p_cfg80211_change_beacon, - .stop_ap = mtk_p2p_cfg80211_stop_ap, -#else - .add_beacon = mtk_p2p_cfg80211_add_set_beacon, - .set_beacon = mtk_p2p_cfg80211_add_set_beacon, - .del_beacon = mtk_p2p_cfg80211_stop_ap, -#endif - .set_wiphy_params = mtk_p2p_cfg80211_set_wiphy_params, - .del_station = mtk_p2p_cfg80211_del_station, - .set_channel = mtk_p2p_cfg80211_set_channel, - .set_bitrate_mask = mtk_p2p_cfg80211_set_bitrate_mask, - .mgmt_frame_register = mtk_p2p_cfg80211_mgmt_frame_register, - .get_station = mtk_p2p_cfg80211_get_station, - // ================ - .add_key = mtk_p2p_cfg80211_add_key, - .get_key = mtk_p2p_cfg80211_get_key, - .del_key = mtk_p2p_cfg80211_del_key, - .set_default_key = mtk_p2p_cfg80211_set_default_key, - .join_ibss = mtk_p2p_cfg80211_join_ibss, - .leave_ibss = mtk_p2p_cfg80211_leave_ibss, - .set_tx_power = mtk_p2p_cfg80211_set_txpower, - .get_tx_power = mtk_p2p_cfg80211_get_txpower, - .set_power_mgmt = mtk_p2p_cfg80211_set_power_mgmt, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_p2p_cfg80211_testmode_cmd, - #endif -#endif -}; - - - -/* There isn't a lot of sense in it, but you can transmit anything you like */ -static const struct ieee80211_txrx_stypes -mtk_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = { - [NL80211_IFTYPE_ADHOC] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_STATION] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_AP] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_AP_VLAN] = { - /* copy AP */ - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_DISASSOC >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_P2P_CLIENT] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_P2P_GO] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - } -}; - - - -#endif - -/* the legacy wireless extension stuff */ -static const iw_handler rP2PIwStandardHandler[] = { - [SIOCGIWPRIV - SIOCIWFIRST] = mtk_p2p_wext_get_priv, - [SIOCGIWSCAN - SIOCIWFIRST] = mtk_p2p_wext_discovery_results, - [SIOCSIWESSID - SIOCIWFIRST] = mtk_p2p_wext_reconnect, - [SIOCSIWAUTH - SIOCIWFIRST] = mtk_p2p_wext_set_auth, - [SIOCSIWENCODEEXT - SIOCIWFIRST] = mtk_p2p_wext_set_key, - [SIOCSIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_set_powermode, - [SIOCGIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_get_powermode, - [SIOCSIWTXPOW - SIOCIWFIRST] = mtk_p2p_wext_set_txpow, -#if CFG_SUPPORT_P2P_RSSI_QUERY - [SIOCGIWSTATS - SIOCIWFIRST] = mtk_p2p_wext_get_rssi, -#endif - [SIOCSIWMLME - SIOCIWFIRST] = mtk_p2p_wext_mlme_handler, -}; - -static const iw_handler rP2PIwPrivHandler[] = { - [IOC_P2P_CFG_DEVICE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_local_dev_info, - [IOC_P2P_PROVISION_COMPLETE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_provision_complete, - [IOC_P2P_START_STOP_DISCOVERY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_start_stop_discovery, - [IOC_P2P_DISCOVERY_RESULTS - SIOCIWFIRSTPRIV] = mtk_p2p_wext_discovery_results, - [IOC_P2P_WSC_BEACON_PROBE_RSP_IE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_wsc_ie, - [IOC_P2P_CONNECT_DISCONNECT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_connect_disconnect, - [IOC_P2P_PASSWORD_READY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_password_ready, -// [IOC_P2P_SET_PWR_MGMT_PARAM - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_pm_param, - [IOC_P2P_SET_INT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_int, - [IOC_P2P_GET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_get_struct, - [IOC_P2P_SET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_struct, - [IOC_P2P_GET_REQ_DEVICE_INFO - SIOCIWFIRSTPRIV] = mtk_p2p_wext_request_dev_info, -}; - - -static const struct iw_priv_args rP2PIwPrivTable[] = { - { - .cmd = IOC_P2P_CFG_DEVICE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CFG_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CFG_DEVICE" - }, - { - .cmd = IOC_P2P_START_STOP_DISCOVERY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_REQ_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_DISCOVERY" - }, - { - .cmd = IOC_P2P_DISCOVERY_RESULTS, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_RESULT" - }, - { - .cmd = IOC_P2P_WSC_BEACON_PROBE_RSP_IE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_HOSTAPD_PARAM), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_WSC_IE" - }, - { - .cmd = IOC_P2P_CONNECT_DISCONNECT, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CONNECT_DEVICE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CONNECT" - }, - { - .cmd = IOC_P2P_PASSWORD_READY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_PASSWORD_READY), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_PASSWD_RDY" - }, - { - .cmd = IOC_P2P_GET_STRUCT, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "P2P_GET_STRUCT" - }, - { - .cmd = IOC_P2P_SET_STRUCT, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_SET_STRUCT" - }, - { - .cmd = IOC_P2P_GET_REQ_DEVICE_INFO, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_DEVICE_REQ), - .name = "P2P_GET_REQDEV" - }, - { - /* SET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "set_oid" - }, - { - /* GET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "get_oid" - } -}; - -const struct iw_handler_def mtk_p2p_wext_handler_def = { - .num_standard = (__u16)sizeof(rP2PIwStandardHandler)/sizeof(iw_handler), - .num_private = (__u16)sizeof(rP2PIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args), - .standard = rP2PIwStandardHandler, - .private = rP2PIwPrivHandler, - .private_args = rP2PIwPrivTable, -#if CFG_SUPPORT_P2P_RSSI_QUERY - .get_wireless_stats = mtk_p2p_wext_get_wireless_stats, -#else - .get_wireless_stats = NULL, -#endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* for IE Searching */ -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/* Net Device Hooks */ -static int -p2pOpen( - IN struct net_device *prDev - ); - -static int -p2pStop( - IN struct net_device *prDev - ); - -static struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ); - -static void -p2pSetMulticastList( - IN struct net_device *prDev - ); - -static int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ); - -static int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ); - -static int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -unsigned int _p2p_cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -p2pSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _p2p_cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} - -static struct net_device *g_P2pPrDev; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -p2pInit( - struct net_device *prDev - ) -{ - if (!prDev) { - return -ENXIO; - } - - return 0; /* success */ -} /* end of p2pInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -p2pUninit ( - IN struct net_device *prDev - ) -{ - - - return; -} /* end of p2pUninit() */ - - - - - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops p2p_netdev_ops = { - .ndo_open = p2pOpen, - .ndo_stop = p2pStop, - .ndo_set_mac_address = p2pSetMACAddress, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = p2pSetMulticastList, -#else - .ndo_set_multicast_list = p2pSetMulticastList, -#endif - .ndo_get_stats = p2pGetStats, - .ndo_do_ioctl = p2pDoIOCTL, - .ndo_start_xmit = p2pHardStartXmit, - .ndo_select_queue = p2pSelectQueue, - .ndo_init = p2pInit, - .ndo_uninit = p2pUninit, -}; - - -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PAllocInfo ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_WIFI_VAR_T prWifiVar = NULL; - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - prWifiVar = &(prAdapter->rWifiVar); - - ASSERT(prAdapter); - ASSERT(prWifiVar); - - do { - if (prGlueInfo == NULL) { - break; - } - - if (prGlueInfo->prP2PInfo == NULL) { - /*alloc memory for p2p info */ - prGlueInfo->prP2PInfo = - kalMemAlloc(sizeof(GL_P2P_INFO_T), VIR_MEM_TYPE); - prAdapter->prP2pInfo = - kalMemAlloc(sizeof(P2P_INFO_T), VIR_MEM_TYPE); - prWifiVar->prP2PConnSettings = - kalMemAlloc(sizeof(P2P_CONNECTION_SETTINGS_T),VIR_MEM_TYPE); - prWifiVar->prP2pFsmInfo = - kalMemAlloc(sizeof(P2P_FSM_INFO_T),VIR_MEM_TYPE); - prWifiVar->prP2pSpecificBssInfo = - kalMemAlloc(sizeof(P2P_SPECIFIC_BSS_INFO_T),VIR_MEM_TYPE); - } - else { - ASSERT(prAdapter->prP2pInfo != NULL); - ASSERT(prWifiVar->prP2PConnSettings != NULL); - ASSERT(prWifiVar->prP2pFsmInfo != NULL); - ASSERT(prWifiVar->prP2pSpecificBssInfo != NULL); - } - /*MUST set memory to 0 */ - kalMemZero(prGlueInfo->prP2PInfo, sizeof(GL_P2P_INFO_T)); - kalMemZero(prAdapter->prP2pInfo, sizeof(P2P_INFO_T)); - kalMemZero(prWifiVar->prP2PConnSettings, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemZero(prWifiVar->prP2pFsmInfo, sizeof(P2P_FSM_INFO_T)); - kalMemZero(prWifiVar->prP2pSpecificBssInfo, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - } while (FALSE); - - - /* chk if alloc successful or not*/ - if (prGlueInfo->prP2PInfo && - prAdapter->prP2pInfo && - prWifiVar->prP2PConnSettings && - prWifiVar->prP2pFsmInfo && - prWifiVar->prP2pSpecificBssInfo) { - return TRUE; - } - else { - - if (prWifiVar->prP2pSpecificBssInfo) { - kalMemFree(prWifiVar->prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - prWifiVar->prP2pSpecificBssInfo = NULL; - } - if (prWifiVar->prP2pFsmInfo) { - kalMemFree(prWifiVar->prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - - prWifiVar->prP2pFsmInfo = NULL; - } - if (prWifiVar->prP2PConnSettings) { - kalMemFree(prWifiVar->prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - - prWifiVar->prP2PConnSettings = NULL; - } - if (prGlueInfo->prP2PInfo) { - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - - prGlueInfo->prP2PInfo = NULL; - } - if (prAdapter->prP2pInfo) { - kalMemFree(prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - - prAdapter->prP2pInfo = NULL; - } - return FALSE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ) -{ - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - /* free memory after p2p module is ALREADY unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - - kalMemFree(prGlueInfo->prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - /*Reomve p2p bss scan list*/ - scanRemoveAllP2pBssDesc(prGlueInfo->prAdapter); - - /*reset all pointer to NULL */ - prGlueInfo->prP2PInfo = NULL; - prGlueInfo->prAdapter->prP2pInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo = NULL; - - return TRUE; - } - else { - return FALSE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enable Channel for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pEnableChannel( - PUINT_8 pucChIdx, - UINT_8 ucChannelNum, - struct ieee80211_channel *mtk_channels, - UINT_8 mtk_channel_sz -) -{ - UINT_8 ucCurChIdx = *pucChIdx; - - while(TRUE) { - (*pucChIdx)++; - (*pucChIdx) %= mtk_channel_sz; - - if(ucChannelNum == mtk_channels[*pucChIdx].hw_value) { - mtk_channels[*pucChIdx].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - - if(*pucChIdx == ucCurChIdx) { - printk(KERN_ALERT DRV_NAME "Orphan channel [%d]\n", ucChannelNum); - break; - } - } -} - - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoRegister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - BOOLEAN ret; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_UNREGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERING; - fgDoRegister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoRegister) { - return TRUE; - } - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - - /* Here are functions which need rtnl_lock */ - wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy); - - /* net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - ret = FALSE; - } - else { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERED; - ret = TRUE; - } - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - return ret; -} - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoUnregister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_REGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERING; - fgDoUnregister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoUnregister) { - return TRUE; - } - - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - /* Here are functions which need rtnl_lock */ - - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pUpdateChannelTableByDomain( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, uc2gChIdx, uc5gChIdx; - UINT_8 ucMaxChannelNum = ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_a_channels); - UINT_8 ucNumOfChannel = ucMaxChannelNum; - RF_CHANNEL_INFO_T aucChannelList[ucMaxChannelNum]; - - uc2gChIdx = uc5gChIdx = 0; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_a_channels); i++) { - mtk_5ghz_a_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, BAND_NULL, ucMaxChannelNum, &ucNumOfChannel, aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - p2pEnableChannel(&uc2gChIdx, aucChannelList[i].ucChannelNum, mtk_2ghz_channels, ARRAY_SIZE(mtk_2ghz_channels)); - break; - - case BAND_5G: - p2pEnableChannel(&uc5gChIdx, aucChannelList[i].ucChannelNum, mtk_5ghz_a_channels, ARRAY_SIZE(mtk_5ghz_a_channels)); - break; - - default: - printk(KERN_ALERT DRV_NAME "Unknow band.\n"); - break; - - } - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for cfg80211 for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GL_HIF_INFO_T prHif = NULL; - PARAM_MAC_ADDRESS rMacAddr; -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - struct device *prDev; -#endif - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - printk("glRegisterP2P\n"); - - /*0. allocate p2pinfo */ - if(!p2PAllocInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Allocate memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* 1. allocate WIPHY */ - prGlueInfo->prP2PInfo->wdev.wiphy = wiphy_new(&mtk_p2p_config_ops, sizeof(P_GLUE_INFO_T)); - if (!prGlueInfo->prP2PInfo->wdev.wiphy) { - printk(KERN_ALERT DRV_NAME "unable to allocate wiphy for p2p\n"); - - goto err_alloc_wiphy; - } - - /* 1.1 fill wiphy parameters */ -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(prHif->cltCtx, &prDev); - if(!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for p2p\n"); - } -#else - prDev = &(prHif->func->dev); -#endif - set_wiphy_dev(prGlueInfo->prP2PInfo->wdev.wiphy, prDev); - - prGlueInfo->prP2PInfo->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_AP) - | BIT(NL80211_IFTYPE_P2P_CLIENT) - | BIT(NL80211_IFTYPE_P2P_GO) - | BIT(NL80211_IFTYPE_STATION); - - p2pUpdateChannelTableByDomain(prGlueInfo); - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - if(prAdapter->fgEnable5GBand) { - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - } - - prGlueInfo->prP2PInfo->wdev.wiphy->mgmt_stypes = mtk_cfg80211_default_mgmt_stypes; - prGlueInfo->prP2PInfo->wdev.wiphy->max_remain_on_channel_duration = 5000; - prGlueInfo->prP2PInfo->wdev.wiphy->n_cipher_suites = 5; - prGlueInfo->prP2PInfo->wdev.wiphy->cipher_suites = (const u32*)cipher_suites; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; -#else - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY; -#endif - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ssids = MAX_SCAN_LIST_NUM; - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ie_len = MAX_SCAN_IE_LEN; - prGlueInfo->prP2PInfo->wdev.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; -#endif - -#if 0 - /* 2. Register WIPHY */ - if(wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy) < 0) { - printk(KERN_ALERT DRV_NAME "Couldn't register wiphy device for p2p\n"); - - goto err_reg_wiphy; - } -#endif - - /* 2.1 set priv as pointer to glue structure */ - *((P_GLUE_INFO_T *) wiphy_priv(prGlueInfo->prP2PInfo->wdev.wiphy)) = prGlueInfo; - - /* 2.2 wdev initialization */ - if(fgIsApMode) { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_AP; - } else { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_P2P_CLIENT; - } - -#endif /* CFG_ENABLE_WIFI_DIRECT_CFG_80211 */ - - /* 3. allocate netdev */ - prGlueInfo->prP2PInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - if (!prGlueInfo->prP2PInfo->prDevHandler) { - printk(KERN_ALERT DRV_NAME "unable to allocate netdevice for p2p\n"); - - printk("unable to allocate netdevice for p2p\n"); - - goto err_alloc_netdev; - } - - /* 4. setup netdev */ - /* 4.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prP2PInfo->prDevHandler)) = prGlueInfo; - - /* 4.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] ^= 0x2; // change to local administrated address - memcpy(prGlueInfo->prP2PInfo->prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->prP2PInfo->prDevHandler->perm_addr, prGlueInfo->prP2PInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* 4.3 register callback functions */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) - prGlueInfo->prP2PInfo->prDevHandler->netdev_ops = &p2p_netdev_ops; -#else - prGlueInfo->prP2PInfo->prDevHandler->open = p2pOpen; - prGlueInfo->prP2PInfo->prDevHandler->stop = p2pStop; - prGlueInfo->prP2PInfo->prDevHandler->get_stats = p2pGetStats; - prGlueInfo->prP2PInfo->prDevHandler->set_multicast_list = p2pSetMulticastList; - prGlueInfo->prP2PInfo->prDevHandler->hard_start_xmit = p2pHardStartXmit; - prGlueInfo->prP2PInfo->prDevHandler->do_ioctl = p2pDoIOCTL; - prGlueInfo->prP2PInfo->prDevHandler->set_mac_address = p2pSetMACAddress; -#endif -// prGlueInfo->prP2PInfo->prDevHandler->wireless_handlers = &mtk_p2p_wext_handler_def; - - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->prP2PInfo->prDevHandler, &(prHif->func->dev)); -#endif - - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - prGlueInfo->prP2PInfo->prDevHandler->ieee80211_ptr = &(prGlueInfo->prP2PInfo->wdev); - prGlueInfo->prP2PInfo->wdev.netdev = prGlueInfo->prP2PInfo->prDevHandler; -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prGlueInfo->prP2PInfo->prDevHandler->features = NETIF_F_IP_CSUM; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#if 0 - /* 7. net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* 8. register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - goto err_reg_netdev; - } -#endif - - /* 8. set p2p net device register state */ - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - /* 9. setup running mode*/ - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo->fgIsApMode = fgIsApMode; - - /* 10. finish */ - p2pFsmInit(prAdapter); - - p2pFuncInitConnectionSettings(prAdapter, prAdapter->rWifiVar.prP2PConnSettings); - - /* Active network too early would cause HW not able to sleep. - * Defer the network active time. - */ -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - return TRUE; -#if 0 -err_reg_netdev: - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif -err_alloc_netdev: -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -// wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - -//err_reg_wiphy: - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; - -err_alloc_wiphy: -#endif - - return FALSE; -} /* end of glRegisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister Net Device for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - p2pFsmUninit(prGlueInfo->prAdapter); - - nicDeactivateNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - -#if 0 - /* Release command, mgmt and security frame belong to P2P network in - * prGlueInfo->prCmdQue - * prAdapter->rPendingCmdQueue - * prAdapter->rTxCtrl.rTxMgmtTxingQueue - * To ensure there is no pending CmdDone/TxDone handler to be executed after p2p module is removed. - */ - - /* Clear CmdQue*/ - kalClearMgmtFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - kalClearSecurityFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingTxMsdu */ - nicFreePendingTxMsduInfoByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif - -#if 0 - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#if 0 - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); -#endif - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; -#endif - - /* Free p2p memory */ -#if 1 - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#endif - return TRUE; - -} /* end of glUnregisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for stop p2p fsm immediate - * - * \param[in] prGlueInfo Pointer to struct P_GLUE_INFO_T. - * - * \retval TRUE The execution succeeds. - * \retval FALSE The execution failed. - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ) -{ -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prGlueInfo); - -// prAdapter = prGlueInfo->prAdapter; -// ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - -#if 0 - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - printk(KERN_ALERT DRV_NAME "Allocate for p2p mesasage FAILED\n"); - //return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_UNBUF); - -#endif - - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - return TRUE; -} /* end of p2pStop() */ - - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pOpen( - IN struct net_device *prDev - ) -{ -// P_GLUE_INFO_T prGlueInfo = NULL; -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prDev); - -#if 0 // Move after device name set. (mtk_p2p_set_local_dev_info) - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} /* end of p2pOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); -#if 0 - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - netif_tx_stop_all_queues(prDev); - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -} /* end of p2pStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, to get the network interface statistical - * information. - * - * Whenever an application needs to get statistics for the interface, this method - * is called. This happens, for example, when ifconfig or netstat -i is run. - * - * \param[in] prDev Pointer to struct net_device. - * - * \return net_device_stats buffer pointer. - */ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - -#if 1 // frog temp fix - //@FIXME - //prDev->stats.rx_packets = 0; - //prDev->stats.tx_packets = 0; - prDev->stats.tx_errors = 0; - prDev->stats.rx_errors = 0; - //prDev->stats.rx_bytes = 0; - //prDev->stats.tx_bytes = 0; - prDev->stats.multicast = 0; - - return &prDev->stats; - -#else - prGlueInfo->prP2PInfo->rNetDevStats.rx_packets = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_bytes = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_bytes = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->prP2PInfo->rNetDevStats; -#endif -} /* end of p2pGetStats() */ - - - - -static void -p2pSetMulticastList ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - g_P2pPrDev = prDev; - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_MULTICAST; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - -} /* p2pSetMulticastList */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is to set multicast list and set rx mode. - * - * \param[in] prDev Pointer to struct net_device - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -void -mtk_p2p_wext_set_Multicastlist ( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 u4SetInfoLen = 0; - struct net_device *prDev = g_P2pPrDev; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - if (prDev->flags & IFF_PROMISC) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - if (prGlueInfo->prP2PInfo->u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - UINT_32 i = 0; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), ha->addr); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), prMcList->dmi_addr); - } -#endif - - DBGLOG(P2P, TRACE, ("SEt Multicast Address List\n")); - - if (i >= MAX_NUM_GROUP_ADDR) { - return; - } - wlanoidSetP2PMulticastList(prGlueInfo->prAdapter, - &(prGlueInfo->prP2PInfo->aucMCAddrList[0]), - (i * ETH_ALEN), - &u4SetInfoLen); - - } - - return; -} /* end of p2pSetMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * * \brief This function is TX entry point of NET DEVICE. - * * - * * \param[in] prSkb Pointer of the sk_buff to be sent - * * \param[in] prDev Pointer to struct net_device - * * - * * \retval NETDEV_TX_OK - on success. - * * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - * */ -/*----------------------------------------------------------------------------*/ -int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_16 u2QueueIdx = 0; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip tx\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - // mark as P2P packets - GLUE_SET_PKT_FLAG_P2P(prSkb); - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (u2QueueIdx >= CFG_MAX_TXQ_NUM) { - printk(KERN_INFO DRV_NAME"Incorrect queue index, skip this frame\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* Statistic usage. */ - prDev->stats.tx_bytes += prSkb->len; - prDev->stats.tx_packets++; - - return NETDEV_TX_OK; -} /* end of p2pHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, a primary SOCKET interface to configure - * the interface lively. Handle an ioctl call on one of our devices. - * Everything Linux ioctl specific is done here. Then we pass the contents - * of the ifr->data to the request message handler. - * - * \param[in] prDev Linux kernel netdevice - * - * \param[in] prIFReq Our private ioctl request structure, typed for the generic - * struct ifreq so we can use ptr to function - * - * \param[in] cmd Command ID - * - * \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. - * \retval OTHER The execution of IOCTL command is failed. - */ -/*----------------------------------------------------------------------------*/ -int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - struct iwreq *prIwReq = (struct iwreq *)prIFReq; - struct iw_request_info rIwReqInfo; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4ReadyFlag == 0) { - // adapter not ready yet - return -EINVAL; - } - - // fill rIwReqInfo - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch(i4Cmd) { - case SIOCSIWENCODEEXT: - /* Set Encryption Material after 4-way handshaking is done */ - if (prIwReq->u.encoding.pointer) { - u4ExtraSize = prIwReq->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - prIwReq->u.encoding.pointer, - prIwReq->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (prIwReq->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if(ret == 0) { - ret = mtk_p2p_wext_set_key(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - break; - - case SIOCSIWMLME: - /* IW_MLME_DISASSOC used for disconnection*/ - if (prIwReq->u.data.length != sizeof(struct iw_mlme)) { - printk(KERN_INFO "MLME buffer strange:%d\n", prIwReq->u.data.length); - ret = -EINVAL; - break; - } - - if (!prIwReq->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, prIwReq->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = mtk_p2p_wext_mlme_handler(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - case SIOCGIWPRIV: - /* This ioctl is used to list all IW privilege ioctls */ - ret = mtk_p2p_wext_get_priv(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCGIWSCAN: - ret = mtk_p2p_wext_discovery_results(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCSIWAUTH: - ret = mtk_p2p_wext_set_auth(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case IOC_P2P_CFG_DEVICE: - case IOC_P2P_PROVISION_COMPLETE: - case IOC_P2P_START_STOP_DISCOVERY: - case IOC_P2P_DISCOVERY_RESULTS: - case IOC_P2P_WSC_BEACON_PROBE_RSP_IE: - case IOC_P2P_CONNECT_DISCONNECT: - case IOC_P2P_PASSWORD_READY: - case IOC_P2P_GET_STRUCT: - case IOC_P2P_SET_STRUCT: - case IOC_P2P_GET_REQ_DEVICE_INFO: - ret = rP2PIwPrivHandler[i4Cmd - SIOCIWFIRSTPRIV](prDev, &rIwReqInfo, &(prIwReq->u), (char *)&(prIwReq->u)); - break; -#if CFG_SUPPORT_P2P_RSSI_QUERY - case SIOCGIWSTATS: - ret = mtk_p2p_wext_get_rssi(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; -#endif - default: - ret = -ENOTTY; - } - - return ret; -} /* end of p2pDoIOCTL() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To report the private supported IOCTLs table to user space. - * - * \param[in] prDev Net device requested. - * \param[out] prIfReq Pointer to ifreq structure, content is copied back to - * user space buffer in gl_iwpriv_table. - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - - ASSERT(prDev); - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rP2PIwPrivTable, sizeof(rP2PIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* end of mtk_p2p_wext_get_priv() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To indicate P2P-FSM for re-associate to the connecting device - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 For success. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_reconnect: P2P Reconnect\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_reconnect() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief MLME command handler -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_mlme *mlme = (struct iw_mlme *)extra; - P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_mlme_handler:\n")); - - switch (mlme->cmd) { - case IW_MLME_DISASSOC: - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, mlme->addr.sa_data); - - prMsgP2PConnAbt->u2ReasonCode = mlme->reason_code; - - - if (EQUAL_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prP2pBssInfo->aucOwnMacAddr)) { - DBGLOG(P2P, TRACE, ("P2P Connection Abort:\n")); - - /* 1.2 fill message */ - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - } - else { - DBGLOG(P2P, TRACE, ("P2P Connection Pause:\n")); - - /* 1.2 fill message */ - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); - - break; - - default: - return -EOPNOTSUPP; - } -#endif - return 0; -} /* end of mtk_p2p_wext_mlme_handler() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PROVISION_COMPLETE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - switch(prData->flags) { - case P2P_PROVISIONING_SUCCESS: - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - prGlueInfo->prP2PInfo->u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - - break; - - case P2P_PROVISIONING_FAIL: - - break; - - default: - return -EOPNOTSUPP; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_set_provision_complete() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_START_STOP_DISCOVERY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_IW_P2P_REQ_DEVICE_TYPE prReqDeviceType = (P_IW_P2P_REQ_DEVICE_TYPE) extra; - UINT_8 au4IeBuf[MAX_IE_LENGTH]; - P_MSG_HDR_T prMsgHdr; - P_MSG_P2P_DEVICE_DISCOVER_T prDiscoverMsg; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if(prData->flags == P2P_STOP_DISCOVERY) { - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_HDR_T)); - - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - } - else if(prData->flags == P2P_START_DISCOVERY) { - - /* retrieve IE for Probe Response */ - if(prReqDeviceType->probe_rsp_len > 0) { - if(prReqDeviceType->probe_rsp_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prReqDeviceType->probe_rsp_ie, prReqDeviceType->probe_rsp_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prReqDeviceType->probe_rsp_len; - } - else { - return -E2BIG; - } - } - - /* retrieve IE for Probe Request */ - if(prReqDeviceType->probe_req_len > 0) { - if(prReqDeviceType->probe_req_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prReqDeviceType->probe_req_ie, prReqDeviceType->probe_req_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prReqDeviceType->probe_req_len; - } - else { - return -E2BIG; - } - } - /* update IE for Probe Request */ - - if(prReqDeviceType->scan_type == P2P_LISTEN) { - /* update listening parameter */ - - /* @TODO: update prConnSettings for Probe Response IE */ - } - else { - // indicate P2P-FSM with MID_MNY_P2P_DEVICE_DISCOVERY - prDiscoverMsg = (P_MSG_P2P_DEVICE_DISCOVER_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_DEVICE_DISCOVER_T)); - - if (!prDiscoverMsg) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - prDiscoverMsg->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - prDiscoverMsg->u4DevDiscoverTime = 0; // unlimited - prDiscoverMsg->fgIsSpecificType = TRUE; - prDiscoverMsg->rTargetDeviceType.u2CategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[0])); - prDiscoverMsg->rTargetDeviceType.u2SubCategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[6]));; - COPY_MAC_ADDR(prDiscoverMsg->aucTargetDeviceID, aucNullAddr); - - /* @FIXME: parameter to be refined, where to pass IE buffer ? */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prDiscoverMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - return -EINVAL; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_start_stop_discovery() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_INVITATION_STRUCT prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - if (prIoctlInvitation->ucReinvoke == 1) { - // TODO: Set Group ID - p2pFuncSetGroupID(prAdapter, prIoctlInvitation->aucGroupID, prIoctlInvitation->aucSsid, prIoctlInvitation->u4SsidLen); - } - - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - // TODO: Do Invitation. - prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - if (!prMsgP2PInvitationReq) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationReq->aucDeviceID, prIoctlInvitation->aucDeviceID, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationReq, - MSG_SEND_METHOD_BUF); - - } - - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_request */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_abort ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_ABORT_INVITATION prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)NULL; - - UINT_8 bssid[MAC_ADDR_LEN]; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - - if (!prMsgP2PInvitationAbort) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationAbort->aucDeviceID, prIoctlInvitationAbort->dev_addr, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationAbort, - MSG_SEND_METHOD_BUF); - - } - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_abort */ - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To override p2p interface address - * - * \param[in] prDev Net device requested. - * \param[in] addr Pointer to address - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@FIXME - return eth_mac_addr(prDev, addr); -} - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher suite -* -* \param[in] prDev Net device requested. -* \param[out] -* -* \retval 0 Success. -* \retval -EINVAL Invalid parameter -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_param *prAuth = (struct iw_param *)wrqu; - - ASSERT(prDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prDev, prAuth)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: - break; - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->prP2PInfo->u4CipherPairwise = prAuth->value; - break; - case IW_AUTH_CIPHER_GROUP: - case IW_AUTH_KEY_MGMT: - case IW_AUTH_TKIP_COUNTERMEASURES: - case IW_AUTH_DROP_UNENCRYPTED: - case IW_AUTH_80211_AUTH_ALG: - case IW_AUTH_WPA_ENABLED: - case IW_AUTH_RX_UNENCRYPTED_EAPOL: - case IW_AUTH_ROAMING_CONTROL: - case IW_AUTH_PRIVACY_INVOKED: - default: - //@TODO - break; - } - - return 0; -} /* end of mtk_p2p_wext_set_auth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_key( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int ret = 0; - struct iw_encode_ext *prIWEncExt; - struct iw_point *prEnc; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - UINT_8 keyStructBuf[100]; - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - do { - if (wrqu->encoding.pointer) { - u4ExtraSize = wrqu->encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - wrqu->encoding.pointer, - wrqu->encoding.length)) { - ret = -EFAULT; - break; - } - } - else if (wrqu->encoding.length != 0) { - ret = -EINVAL; - break; - } - - prEnc = &wrqu->encoding; - prIWEncExt = (struct iw_encode_ext *) prExtraBuf; - - if (GLUE_CHK_PR3(prDev, prEnc, prExtraBuf) == TRUE) { - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - if ((prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { // Key Removal - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if(rStatus != WLAN_STATUS_SUCCESS) - ret = -EFAULT; - } - else { - if(prIWEncExt->alg == IW_ENCODE_ALG_CCMP) { - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - ((prEnc->flags & IW_ENCODE_INDEX) - 1) : 0; - if (prKey->u4KeyIndex <= 3) { - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - ret = -EFAULT; - } - } - else { - ret = -EINVAL; - } - } - else { - ret = -EINVAL; - } - } - } - else - ret = -EINVAL; - - } while(FALSE); - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - - return ret; -} /* end of mtk_p2p_wext_set_key() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("set_powermode = %d, value = %d\n", wrqu->power.disabled, wrqu->power.value); - struct iw_param *prPower = (struct iw_param*)&wrqu->power; -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - printk(KERN_DEBUG "%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief get the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("mtk_p2p_wext_get_powermode\n"); - //wrqu->power.disabled = 0; - //wrqu->power.value = 1; - - struct iw_param *prPower = (struct iw_param*)&wrqu->power; - PARAM_POWER_MODE ePowerMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - - -#if 1 - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CFG_DEVICE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_CFG_DEVICE_TYPE prDeviceCfg = (P_IW_P2P_CFG_DEVICE_TYPE) extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - //P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - // update connection settings for P2P-FSM - // 1. update SSID - if(prDeviceCfg->ssid_len > ELEM_MAX_LEN_SSID) { - prConnSettings->ucSSIDLen = ELEM_MAX_LEN_SSID; - } - else { - prConnSettings->ucSSIDLen = prDeviceCfg->ssid_len; - } - - if(copy_from_user(prConnSettings->aucSSID, prDeviceCfg->ssid, prConnSettings->ucSSIDLen)) { - return -EFAULT; - } - - // 2. update device type (WPS IE) - kalMemCopy(&(prConnSettings->rPrimaryDevTypeBE), &(prDeviceCfg->pri_device_type), sizeof(DEVICE_TYPE_T)); -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - kalMemCopy(&(prConnSettings->arSecondaryDevTypeBE[0]), &(prDeviceCfg->snd_device_type), sizeof(DEVICE_TYPE_T)); -#endif - - // 3. update device name - if(prDeviceCfg->device_name_len > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prConnSettings->ucDevNameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - else { - prConnSettings->ucDevNameLen = prDeviceCfg->device_name_len; - } - if(copy_from_user(prConnSettings->aucDevName, prDeviceCfg->device_name, prConnSettings->ucDevNameLen)) { - return -EFAULT; - } - - // 4. update GO intent - prConnSettings->ucGoIntent = prDeviceCfg->intend; - - - /* Preferred channel bandwidth */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - -#if 0 - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_set_local_dev_info() */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief I/O Control handler for both - * IOC_P2P_START_STOP_DISCOVERY & SIOCGIWSCAN - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 Success. - * \retval -EFAULT Setting parameters to driver fail. - * \retval -EOPNOTSUPP Key size not supported. - * - * \note - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_event iwe; - char *current_ev = extra; - UINT_32 i; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - P_P2P_INFO_T prP2PInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2PInfo = prAdapter->prP2pInfo; - - for(i = 0 ; i < prP2PInfo->u4DeviceNum ; i++) { - prTargetResult = &prP2PInfo->arP2pDiscoverResult[i]; - - /* SIOCGIWAP */ - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, - prTargetResult->aucInterfaceAddr, - 6); - - current_ev = iwe_stream_add_event(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, IW_EV_ADDR_LEN); - - - /* SIOCGIWESSID */ - iwe.cmd = SIOCGIWESSID; - iwe.u.data.flags = 1; - iwe.u.data.length = prTargetResult->u2NameLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, prTargetResult->aucName); - - /* IWEVGENIE for WPA IE */ - if(prTargetResult->u2IELength <= 600 && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#if CFG_SUPPORT_WPS - - /* IWEVGENIE for WPS IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPSIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#endif - - /* IWEVGENIE for RSN IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - - /* IOC_P2P_GO_WSC_IE */ -#if 1 - /* device capability */ - if (1) { - UINT_8 data[40]; - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 8 + sizeof("p2p_cap="); - - snprintf(data, iwe.u.data.length, "p2p_cap=%02x%02x%02x%02x%c", - prTargetResult->ucDeviceCapabilityBitmap, prTargetResult->ucGroupCapabilityBitmap, - (UINT_8)prTargetResult->u2ConfigMethod, (UINT_8)(prTargetResult->u2ConfigMethod >> 8), '\0' ); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - - //printk("%s\n", data); - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 12 + sizeof("p2p_dev_type="); - - snprintf(data, iwe.u.data.length, "p2p_dev_type=%02x%02x%02x%02x%02x%02x%c", - (UINT_8)prTargetResult->rPriDevType.u2CategoryID,(UINT_8)prTargetResult->rPriDevType.u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[0].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[0].u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[1].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[1].u2SubCategoryID, - '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 17 + sizeof("p2p_grp_bssid="); - - snprintf(data, iwe.u.data.length, "p2p_grp_bssid="MACSTR"%c", - MAC2STR(prTargetResult->aucBSSID), '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - } -#endif - } - - /* Length of data */ - wrqu->data.length = (current_ev - extra); - wrqu->data.flags = 0; - - return 0; -} /* end of mtk_p2p_wext_discovery_results() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_WSC_BEACON_PROBE_RSP_IE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_HOSTAPD_PARAM prHostapdParam = (P_IW_P2P_HOSTAPD_PARAM)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (prHostapdParam->len > 0) { - if (prHostapdParam->len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[0], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[0] = prHostapdParam->len; - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prHostapdParam->len; - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //@TODO: send message to P2P-FSM - - return 0; -} /* end of mtk_p2p_wext_wsc_ie() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CONNECT_DISCONNECT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; -// P_IW_P2P_CONNECT_DEVICE prConnectDevice = (P_IW_P2P_CONNECT_DEVICE)extra; -// P_MSG_HDR_T prMsgHdr; -// P_MSG_P2P_CONNECTION_REQUEST_T prMsgP2PConnReq; -// P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt; -// UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - if (prData->flags == P2P_CONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_REQ - prMsgP2PConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (!prMsgP2PConnReq) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnReq, - MSG_SEND_METHOD_BUF); -#endif - } - else if(prData->flags == P2P_DISCONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_ABORT - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prConnectDevice->sta_addr); - - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); -#endif - } - else { - return -EINVAL; - } - - return 0; -} /* end of mtk_p2p_wext_connect_disconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PASSWORD_READY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_PASSWORD_READY prPasswordReady = (P_IW_P2P_PASSWORD_READY)extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* retrieve IE for Probe Request */ - if (prPasswordReady->probe_req_len > 0) { - if (prPasswordReady->probe_req_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prPasswordReady->probe_req_ie, prPasswordReady->probe_req_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prPasswordReady->probe_req_len; - - /* retrieve IE for Probe Response */ - if (prPasswordReady->probe_rsp_len > 0) { - if (prPasswordReady->probe_rsp_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prPasswordReady->probe_rsp_ie, prPasswordReady->probe_rsp_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prPasswordReady->probe_rsp_len; - - switch (prPasswordReady->active_config_method) { - case 1: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_PUSH_BUTTON; - break; - case 2: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_KEYPAD; - break; - case 3: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_DISPLAY; - break; - default: - break; - } - - prConnSettings->fgIsPasswordIDRdy = TRUE; - return 0; -} /* end of mtk_p2p_wext_password_ready() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_REQ_DEVICE_INFO) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_DEVICE_REQ prDeviceReq = (P_IW_P2P_DEVICE_REQ)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_DEVICE_REQ); - - // copy to upper-layer supplied buffer - kalMemCopy(prDeviceReq->name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - prDeviceReq->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prDeviceReq->name[prDeviceReq->name_len]='\0'; - COPY_MAC_ADDR(prDeviceReq->device_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prDeviceReq->device_type = prGlueInfo->prP2PInfo->ucConnReqDevType; - prDeviceReq->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prDeviceReq->active_config_method = prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod; - - return 0; -} /* end of mtk_p2p_wext_request_dev_info() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_INDICATE prInvIndicate = (P_IW_P2P_IOCTL_INVITATION_INDICATE)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_INDICATE); - - // copy to upper-layer supplied buffer - kalMemCopy(prInvIndicate->dev_name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - kalMemCopy(prInvIndicate->group_bssid, prGlueInfo->prP2PInfo->rConnReqGroupAddr, MAC_ADDR_LEN); - prInvIndicate->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prInvIndicate->dev_name[prInvIndicate->name_len]='\0'; - COPY_MAC_ADDR(prInvIndicate->dev_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prInvIndicate->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prInvIndicate->operating_channel = prGlueInfo->prP2PInfo->ucOperatingChnl; - prInvIndicate->invitation_type = prGlueInfo->prP2PInfo->ucInvitationType; - - return 0; -} /* end of mtk_p2p_wext_invitation_indicate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_STATUS prInvStatus = (P_IW_P2P_IOCTL_INVITATION_STATUS)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_STATUS); - - // copy to upper-layer supplied buffer - prInvStatus->status_code = prGlueInfo->prP2PInfo->u4InvStatus; - - return 0; -} /* end of mtk_p2p_wext_invitation_status() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device found -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval TRUE Success. -* \retval FALSE Failure -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_FND"); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PDVCFND event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return FALSE; -} /* end of kalP2PIndicateFound() */ - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pNetworkAddress, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_formation ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; -// struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_START_FORMATION prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - } while (FALSE); - - return i4Status; - -} -/* mtk_p2p_wext_start_formation */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 index; - INT_32 value; - PUINT_32 pu4IntBuf; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - UINT_32 u4Leng; - - ASSERT(prDev); - ASSERT(wrqu); - - //printk("mtk_p2p_wext_set_int\n"); - pu4IntBuf = (PUINT_32) extra; - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - - u4SubCmd = (UINT_32) wrqu->mode; - index = pu4IntBuf[1]; - value = pu4IntBuf[2]; - - printk("set parameter, u4SubCmd=%d idx=%d value=%lu\n", (INT_16)u4SubCmd, (INT_16)index, value); - - switch (u4SubCmd) { - case PRIV_CMD_INT_P2P_SET: - switch (index) { - case 0: /* Listen CH */ - { - UINT_8 ucSuggestChnl = 0; - - prP2pConnSettings->ucListenChnl = value; - - // 20110920 - frog: User configurations are placed in ConnSettings. - if (rlmFuncFindAvailableChannel(prGlueInfo->prAdapter, value, &ucSuggestChnl, TRUE, TRUE)) { - prP2pSpecificBssInfo->ucListenChannel = value; - } - else { - prP2pSpecificBssInfo->ucListenChannel = ucSuggestChnl; - } - - - break; - } - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - //prP2pConnSettings->u2LocalConfigMethod; - break; - case 102: /* Sigma P2p reset */ - kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - - default: - break; - } - break; - default: - break; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&prGlueInfo->prP2PInfo->aucOidBuf[0], - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEND_SD_RESPONSE: - status = mtk_p2p_wext_send_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_SEND_SD_REQUEST: - status = mtk_p2p_wext_send_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_TERMINATE_SD_PHASE: - status = mtk_p2p_wext_terminate_service_discovery_phase(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_INVITATION_STRUCT)) { -// status = mtk_p2p_wext_invitation_request(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_INVITATION_ABORT: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_ABORT_INVITATION)) { -// status = mtk_p2p_wext_invitation_abort(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_START_FORMATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_START_FORMATION)) { - status = mtk_p2p_wext_start_formation(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_set_sec_check_request(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_set_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - break; - default: - status = -EOPNOTSUPP; - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (!prDev || !wrqu) { - printk(KERN_INFO DRV_NAME "%s(): invalid param(0x%p, 0x%p)\n", - __func__, - prDev, - wrqu); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_GET_SD_REQUEST: - status = mtk_p2p_wext_get_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_GET_SD_RESPONSE: - status = mtk_p2p_wext_get_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION_INDICATE: - { - status = mtk_p2p_wext_invitation_indicate(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_INVITATION_STATUS: - { - status = mtk_p2p_wext_invitation_status(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - UINT_8 ucMaxChannelNum = 50; - PUINT_8 pucChnlList = (PUINT_8)prP2PReq->aucBuffer; - - kalGetChnlList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - prP2PReq->outBufferLength = NumOfChannel; - - for (i=0; iaucBuffer[i] = aucChannelList[i].ucChannelNum; -#else - *pucChnlList = aucChannelList[i].ucChannelNum; - pucChnlList++; -#endif - } - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - NumOfChannel + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - - case P2P_CMD_ID_GET_OP_CH: - { - prP2PReq->inBufferLength = 4; - - status = wlanoidQueryP2pOpChannel(prGlueInfo->prAdapter, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - &prP2PReq->outBufferLength); - - if (status == 0) { // WLAN_STATUS_SUCCESS - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - else { - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - break; - } - - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_get_sec_check_response(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_get_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - - - /* Copy queried data to user. */ - if (status == 0) { // WLAN_STATUS_SUCCESS - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - else { - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - break; - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery request frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery response frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery request frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery response frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSecCheckRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_get_sec_check_response\n"); - rStatus = kalIoctl(prGlueInfo, - wlanoidGetSecCheckResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - prP2PReq->aucBuffer, - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* terminating service discovery phase -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2PTerminateSDPhase, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - //P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_set_noa_param\n"); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNoaParam, - prNoaParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T),//prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; -// P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_set_oppps_param\n"); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetOppPsParam, - prOppPsParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T), //prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -int -mtk_p2p_wext_set_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - UINT_32 u4SetInfoLen; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSupplicantVersion, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} -/* mtk_p2p_wext_set_p2p_version */ - -int -mtk_p2p_wext_get_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pVersion, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} /* mtk_p2p_wext_get_p2p_version */ - -#if CFG_SUPPORT_P2P_RSSI_QUERY - -int -mtk_p2p_wext_get_rssi ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rssi; - struct iw_statistics *pStats = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - rStatus = WLAN_STATUS_FAILURE; - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &u4QueryInfoLen); - - u2BufferSize = prData->length; - - if (u2BufferSize < sizeof(struct iw_statistics)) { - return -E2BIG; - } - - - if (copy_to_user(prData->pointer, pStats, sizeof(struct iw_statistics))) { - rStatus = WLAN_STATUS_FAILURE; - } - - -stat_out: - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - -} /* mtk_p2p_wext_get_rssi */ - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &bufLen); - -stat_out: - return pStats; -} /* mtk_p2p_wext_get_wireless_stats */ - - -#endif /* CFG_SUPPORT_P2P_RSSI_QUERY */ - - -int -mtk_p2p_wext_set_txpow ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; -#endif - int i4Ret = 0; - - ASSERT(prDev); - ASSERT(prTxPow); - - do { - if ((!prDev) || (!prTxPow)) { - i4Ret = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - - if (!prGlueInfo) { - i4Ret = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; -#if 0 - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(0); - return -ENOMEM; - } - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - if (prTxPow->disabled) { - /* Dissolve. */ - prMsgFuncSwitch->fgIsFuncOn = FALSE; - } - else { - - /* Re-enable function. */ - prMsgFuncSwitch->fgIsFuncOn = TRUE; - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - } while (FALSE); - - return i4Ret; -} /* mtk_p2p_wext_set_txpow */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_cfg80211.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_cfg80211.c deleted file mode 100755 index f3488998fbbd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_cfg80211.c +++ /dev/null @@ -1,2226 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_p2p_cfg80211.c $ -** -** 08 31 2012 yuche.tsai -** [ALPS00349585] [6577JB][WiFi direct][KE]Establish p2p connection while both device have connected to AP previously,one device reboots automatically with KE -** Fix possible KE when concurrent & disconnect. -** -** 08 21 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 14 2012 yuche.tsai -** NULL -** Fix p2p bug find on ALPS.JB trunk. -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#include -#include -#include - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - P2P_PARAM_KEY_T rKey; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rKey, sizeof(P2P_PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - if(mac_addr) { - memcpy(rKey.arBSSID, mac_addr, ETH_ALEN); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - else { - rKey.u4KeyIndex |= BIT(31); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - rKey.u4KeyIndex |= BIT(31); //???? - } - if(params->key) - { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - } - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - PARAM_REMOVE_KEY_T prRemoveKey; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&prRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - memcpy(prRemoveKey.arBSSID, mac_addr, PARAM_MAC_ADDR_LEN); - prRemoveKey.u4KeyIndex = key_index; - prRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - &prRemoveKey, - prRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int -mtk_p2p_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - INT_32 i4RetRslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P2P_STATION_INFO_T rP2pStaInfo; - - ASSERT(wiphy); - - do { - if ((wiphy == NULL) || - (ndev == NULL) || - (sinfo == NULL) || - (mac == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_get_station\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - sinfo->filled = 0; - - /* Get station information. */ - /* 1. Inactive time? */ - p2pFuncGetStationInfo(prGlueInfo->prAdapter, - mac, - &rP2pStaInfo); - - /* Inactive time. */ - sinfo->filled |= STATION_INFO_INACTIVE_TIME; - sinfo->inactive_time = rP2pStaInfo.u4InactiveTime; - sinfo->generation = prP2pGlueInfo->i4Generation; - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} - -int -mtk_p2p_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prMsgScanRequest = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - UINT_32 u4MsgSize = 0, u4Idx = 0; - INT_32 i4RetRslt = -EINVAL; - P_RF_CHANNEL_INFO_T prRfChannelInfo = (P_RF_CHANNEL_INFO_T)NULL; - P_P2P_SSID_STRUCT_T prSsidStruct = (P_P2P_SSID_STRUCT_T)NULL; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_ssid *prSsid = NULL; - - /* [---------Channel---------] [---------SSID---------][---------IE---------] */ - - - do { - if ((wiphy == NULL) || (request == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (prP2pGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_scan.\n")); - - - if (prP2pGlueInfo->prScanRequest != NULL) { - /* There have been a scan request on-going processing. */ - DBGLOG(P2P, TRACE, ("There have been a scan request on-going processing.\n")); - break; - } - - prP2pGlueInfo->prScanRequest = request; - - /* Should find out why the n_channels so many? */ - if (request->n_channels > MAXIMUM_OPERATION_CHANNEL_LIST) { - request->n_channels = MAXIMUM_OPERATION_CHANNEL_LIST; - DBGLOG(P2P, TRACE, ("Channel list exceed the maximun support.\n")); - } - - u4MsgSize = sizeof(MSG_P2P_SCAN_REQUEST_T) + - (request->n_channels * sizeof(RF_CHANNEL_INFO_T)) + - (request->n_ssids * sizeof(PARAM_SSID_T)) + - request->ie_len; - - prMsgScanRequest = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, u4MsgSize); - - if (prMsgScanRequest == NULL) { - ASSERT(FALSE); - i4RetRslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("Generating scan request message.\n")); - - prMsgScanRequest->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - - - - DBGLOG(P2P, TRACE, ("Requesting channel number:%d.\n", request->n_channels)); - - for (u4Idx = 0; u4Idx < request->n_channels; u4Idx++) { - /* Translate Freq from MHz to channel number. */ - prRfChannelInfo = &(prMsgScanRequest->arChannelListInfo[u4Idx]); - prChannel = request->channels[u4Idx]; - - prRfChannelInfo->ucChannelNum = nicFreq2ChannelNum(prChannel->center_freq * 1000); - DBGLOG(P2P, TRACE, ("Scanning Channel:%d, freq: %d\n", - prRfChannelInfo->ucChannelNum, - prChannel->center_freq)); - switch (prChannel->band) { - case IEEE80211_BAND_2GHZ: - prRfChannelInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChannelInfo->eBand = BAND_5G; - break; - default: - DBGLOG(P2P, TRACE, ("UNKNOWN Band info from supplicant\n")); - prRfChannelInfo->eBand = BAND_NULL; - break; - } - - /* Iteration. */ - prRfChannelInfo++; - } - prMsgScanRequest->u4NumChannel = request->n_channels; - - DBGLOG(P2P, TRACE, ("Finish channel list.\n")); - - /* SSID */ - prSsid = request->ssids; - prSsidStruct = (P_P2P_SSID_STRUCT_T)prRfChannelInfo; - if (request->n_ssids) { - ASSERT(prSsidStruct == &(prMsgScanRequest->arChannelListInfo[u4Idx])); - prMsgScanRequest->prSSID = prSsidStruct; - } - - for (u4Idx = 0; u4Idx < request->n_ssids; u4Idx++) { - COPY_SSID(prSsidStruct->aucSsid, - prSsidStruct->ucSsidLen, - request->ssids->ssid, - request->ssids->ssid_len); - - prSsidStruct++; - prSsid++; - } - - prMsgScanRequest->i4SsidNum = request->n_ssids; - - DBGLOG(P2P, TRACE, ("Finish SSID list:%d.\n", request->n_ssids)); - - /* IE BUFFERS */ - prMsgScanRequest->pucIEBuf = (PUINT_8)prSsidStruct; - if (request->ie_len) { - kalMemCopy(prMsgScanRequest->pucIEBuf, request->ie, request->ie_len); - prMsgScanRequest->u4IELen = request->ie_len; - } - - DBGLOG(P2P, TRACE, ("Finish IE Buffer.\n")); - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgScanRequest, - MSG_SEND_METHOD_BUF); - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} /* mtk_p2p_cfg80211_scan */ - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - - - do { - if (wiphy == NULL) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_wiphy_params\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if (changed & WIPHY_PARAM_RETRY_SHORT) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY short param is changed.\n")); - } - - if (changed & WIPHY_PARAM_RETRY_LONG) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY long param is changed.\n")); - } - - - if (changed & WIPHY_PARAM_FRAG_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY fragmentation threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_RTS_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY RTS threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_COVERAGE_CLASS) { - // TODO: - DBGLOG(P2P, TRACE, ("The coverage class is changed???\n")); - } - - i4Rslt = 0; - } while (FALSE); - - - - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_wiphy_params */ - - - -int -mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - // TODO: for JB. - - return -EINVAL; -} - -//&&&&&&&&&&&&&&&&&&&&&&&&&& Add for ICS Wi-Fi Direct Support. &&&&&&&&&&&&&&&&&&&&&&& -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -int -mtk_p2p_cfg80211_start_ap ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; -// P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - - do { - if ((wiphy == NULL) || (settings == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_start_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + settings->beacon.head_len + settings->beacon.tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (settings->beacon.head_len != 0) { - kalMemCopy(pucBuffer, settings->beacon.head, settings->beacon.head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = settings->beacon.head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)settings->beacon.head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (settings->beacon.tail_len != 0) { - UINT_8 ucLen = settings->beacon.tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, settings->beacon.tail, settings->beacon.tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - - prP2pStartAPMsg->fgIsPrivacy = settings->privacy; - - prP2pStartAPMsg->u4BcnInterval = settings->beacon_interval; - - prP2pStartAPMsg->u4DtimPeriod = settings->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = settings->hidden_ssid; - - COPY_SSID(prP2pStartAPMsg->aucSsid, - prP2pStartAPMsg->u2SsidLen, - settings->ssid, - settings->ssid_len); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; - - -///////////////////////// - /** - * struct cfg80211_ap_settings - AP configuration - * - * Used to configure an AP interface. - * - * @beacon: beacon data - * @beacon_interval: beacon interval - * @dtim_period: DTIM period - * @ssid: SSID to be used in the BSS (note: may be %NULL if not provided from - * user space) - * @ssid_len: length of @ssid - * @hidden_ssid: whether to hide the SSID in Beacon/Probe Response frames - * @crypto: crypto settings - * @privacy: the BSS uses privacy - * @auth_type: Authentication type (algorithm) - * @inactivity_timeout: time in seconds to determine station's inactivity. - */ -// struct cfg80211_ap_settings { -// struct cfg80211_beacon_data beacon; -// -// int beacon_interval, dtim_period; -// const u8 *ssid; -// size_t ssid_len; -// enum nl80211_hidden_ssid hidden_ssid; -// struct cfg80211_crypto_settings crypto; -// bool privacy; -// enum nl80211_auth_type auth_type; -// int inactivity_timeout; -// }; -//////////////////// - - return i4Rslt; -} /* mtk_p2p_cfg80211_start_ap */ - - -int -mtk_p2p_cfg80211_change_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_change_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - -//////////////////////////// -/** - * struct cfg80211_beacon_data - beacon data - * @head: head portion of beacon (before TIM IE) - * or %NULL if not changed - * @tail: tail portion of beacon (after TIM IE) - * or %NULL if not changed - * @head_len: length of @head - * @tail_len: length of @tail - * @beacon_ies: extra information element(s) to add into Beacon frames or %NULL - * @beacon_ies_len: length of beacon_ies in octets - * @proberesp_ies: extra information element(s) to add into Probe Response - * frames or %NULL - * @proberesp_ies_len: length of proberesp_ies in octets - * @assocresp_ies: extra information element(s) to add into (Re)Association - * Response frames or %NULL - * @assocresp_ies_len: length of assocresp_ies in octets - * @probe_resp_len: length of probe response template (@probe_resp) - * @probe_resp: probe response template (AP mode only) - */ -//struct cfg80211_beacon_data { -// const u8 *head, *tail; -// const u8 *beacon_ies; -// const u8 *proberesp_ies; -// const u8 *assocresp_ies; -// const u8 *probe_resp; - -// size_t head_len, tail_len; -// size_t beacon_ies_len; -// size_t proberesp_ies_len; -// size_t assocresp_ies_len; -// size_t probe_resp_len; -//}; - -//////////////////////////// - - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_beacon */ - -#else -int -mtk_p2p_cfg80211_add_set_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_add_set_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - - prP2pStartAPMsg->fgIsPrivacy = FALSE; - - prP2pStartAPMsg->u4BcnInterval = info->interval; - - prP2pStartAPMsg->u4DtimPeriod = info->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = ENUM_HIDDEN_SSID_NONE; - -#if 0 - if (info->head_len > OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)) { - P_WLAN_BEACON_FRAME_T prWlanBcnFrame = info->head; - - prSsidIE = (P_IE_HDR_T)p2pFuncGetSpecIE(prGlueInfo->prAdapter, - (PUINT_8)prWlanBcnFrame->aucInfoElem, - (info->head_len - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)), - ELEM_ID_SSID, - NULL); - - kalMemCopy(prP2pStartAPMsg->aucSsid, SSID_IE(prSsidIE)->aucSSID, IE_LEN(prSsidIE)); - - } -#endif - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; -} -/* mtk_p2p_cfg80211_add_set_beacon */ -#endif - -int -mtk_p2p_cfg80211_stop_ap ( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prP2pSwitchMode = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if (wiphy == NULL) { - break; - } - - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_stop_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // Switch OP MOde. - prP2pSwitchMode = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prP2pSwitchMode == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pSwitchMode->rMsgHdr.eMsgId = MID_MNY_P2P_STOP_AP; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pSwitchMode, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} /* mtk_p2p_cfg80211_stop_ap */ - -// TODO: -int -mtk_p2p_cfg80211_deauth ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_deauth_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_deauth.\n")); - - return -EINVAL; -} /* mtk_p2p_cfg80211_deauth */ - - -// TODO: -int -mtk_p2p_cfg80211_disassoc ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_disassoc_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_disassoc.\n")); - - // not implemented yet - - return -EINVAL; -} /* mtk_p2p_cfg80211_disassoc */ - - -int -mtk_p2p_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prMsgChnlReq = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL) || - (cookie == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - prMsgChnlReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_REQUEST_T)); - - if (prMsgChnlReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_remain_on_channel\n")); - - prMsgChnlReq->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_REQ; - prMsgChnlReq->u8Cookie = *cookie; - prMsgChnlReq->u4Duration = duration; - - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &prMsgChnlReq->rChannelInfo, - &prMsgChnlReq->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} -/* mtk_p2p_cfg80211_remain_on_channel */ - - -int -mtk_p2p_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - u64 cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prMsgChnlAbort = (P_MSG_P2P_CHNL_ABORT_T)NULL; - - do { - if ((wiphy == NULL) || (dev == NULL)) { - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prMsgChnlAbort = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_ABORT_T)); - - if (prMsgChnlAbort == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_cancel_remain_on_channel\n")); - - prMsgChnlAbort->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_ABORT; - prMsgChnlAbort->u8Cookie = cookie; - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlAbort, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_cancel_remain_on_channel */ - -int -mtk_p2p_cfg80211_mgmt_tx ( - struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, - size_t len, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - bool no_cck, - bool dont_wait_for_ack, -#endif - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - P_MSDU_INFO_T prMgmtFrame = (P_MSDU_INFO_T)NULL; - PUINT_8 pucFrameBuf = (PUINT_8)NULL; - - do { - if ((wiphy == NULL) || - (buf == NULL) || - (len == 0) || - (dev == NULL) || - (cookie == NULL)) { - break; - } - - //DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_mgmt_tx\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - /* Channel & Channel Type & Wait time are ignored. */ - prMsgTxReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_MGMT_TX_REQUEST_T)); - - if (prMsgTxReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->fgNoneCckRate = FALSE; - prMsgTxReq->fgIsWaitRsp = TRUE; - - prMgmtFrame = cnmMgtPktAlloc(prGlueInfo->prAdapter, (UINT_32)(len + MAC_TX_RESERVED_FIELD)); - - if ((prMsgTxReq->prMgmtMsduInfo = prMgmtFrame) == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->u8Cookie = *cookie; - prMsgTxReq->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_TX; - - pucFrameBuf = (PUINT_8)((UINT_32)prMgmtFrame->prPacket + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucFrameBuf, buf, len); - - prMgmtFrame->u2FrameLength = len; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - if ((i4Rslt != 0) && (prMsgTxReq != NULL)) { - if (prMsgTxReq->prMgmtMsduInfo != NULL) { - cnmMgtPktFree(prGlueInfo->prAdapter, prMsgTxReq->prMgmtMsduInfo); - } - - cnmMemFree(prGlueInfo->prAdapter, prMsgTxReq); - } - - return i4Rslt; -} /* mtk_p2p_cfg80211_mgmt_tx */ - - - -int -mtk_p2p_cfg80211_change_bss ( - struct wiphy *wiphy, - struct net_device *dev, - struct bss_parameters *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - switch (params->use_cts_prot) { - case -1: - DBGLOG(P2P, TRACE, ("CTS protection no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("CTS protection disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("CTS protection enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("CTS protection unknown\n")); - break; - } - - - - switch (params->use_short_preamble) { - case -1: - DBGLOG(P2P, TRACE, ("Short prreamble no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("Short prreamble disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("Short prreamble enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("Short prreamble unknown\n")); - break; - } - - - -#if 0 - // not implemented yet - p2pFuncChangeBssParam(prGlueInfo->prAdapter, - prBssInfo->fgIsProtection, - prBssInfo->fgIsShortPreambleAllowed, - prBssInfo->fgUseShortSlotTime, - // Basic rates - // basic rates len - // ap isolate - // ht opmode. - ); -#else - i4Rslt = 0; -#endif - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_bss */ - - - -int -mtk_p2p_cfg80211_del_station ( - struct wiphy *wiphy, - struct net_device *dev, - u8 *mac - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBcMac[] = BC_MAC_ADDR; - - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - if (mac == NULL) { - mac = aucBcMac; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_del_station.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - //prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnectMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnectMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - COPY_MAC_ADDR(prDisconnectMsg->aucTargetID, mac); - prDisconnectMsg->u2ReasonCode = REASON_CODE_UNSPECIFIED; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnectMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_del_station */ - - -int -mtk_p2p_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (sme == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_connect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, (sizeof(MSG_P2P_CONNECTION_REQUEST_T) + sme->ie_len)); - - if (prConnReqMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prConnReqMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - COPY_SSID(prConnReqMsg->rSsid.aucSsid, - prConnReqMsg->rSsid.ucSsidLen, - sme->ssid, - sme->ssid_len); - - COPY_MAC_ADDR(prConnReqMsg->aucBssid, sme->bssid); - - DBGLOG(P2P, TRACE, ("Assoc Req IE Buffer Length:%d\n", sme->ie_len)); - kalMemCopy(prConnReqMsg->aucIEBuf, sme->ie, sme->ie_len); - prConnReqMsg->u4IELen = sme->ie_len; - - mtk_p2p_cfg80211func_channel_format_switch(sme->channel, - NL80211_CHAN_NO_HT, - &prConnReqMsg->rChannelInfo, - &prConnReqMsg->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prConnReqMsg, - MSG_SEND_METHOD_BUF); - - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_connect */ - -int -mtk_p2p_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_disconnect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - -// prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(P_MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - prDisconnMsg->u2ReasonCode = reason_code; - prDisconnMsg->fgSendDeauth = TRUE; - COPY_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCAddr); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnMsg, - MSG_SEND_METHOD_UNBUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_disconnect */ - - -int -mtk_p2p_cfg80211_change_iface ( - IN struct wiphy *wiphy, - IN struct net_device *ndev, - IN enum nl80211_iftype type, - IN u32 *flags, - IN struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if ((wiphy == NULL) || - (ndev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_change_iface.\n")); - - if (ndev->ieee80211_ptr) { - ndev->ieee80211_ptr->iftype = type; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - // Switch OP MOde. - prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prSwitchModeMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prSwitchModeMsg->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - switch (type) { - case NL80211_IFTYPE_P2P_CLIENT: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_CLIENT.\n")); - case NL80211_IFTYPE_STATION: - if (type == NL80211_IFTYPE_STATION) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_STATION.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_INFRASTRUCTURE; - break; - case NL80211_IFTYPE_AP: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_AP.\n")); - case NL80211_IFTYPE_P2P_GO: - if (type == NL80211_IFTYPE_P2P_GO) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_GO not AP.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_ACCESS_POINT; - break; - default: - DBGLOG(P2P, TRACE, ("Other type :%d .\n", type)); - prSwitchModeMsg->eOpMode = OP_MODE_P2P_DEVICE; - break; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSwitchModeMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_change_iface */ - - -int -mtk_p2p_cfg80211_set_channel ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN struct ieee80211_channel *chan, - IN enum nl80211_channel_type channel_type) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - RF_CHANNEL_INFO_T rRfChnlInfo; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_channel.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &rRfChnlInfo, - NULL); - - p2pFuncSetChannel(prGlueInfo->prAdapter, &rRfChnlInfo); - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; - -} -/* mtk_p2p_cfg80211_set_channel */ - -int -mtk_p2p_cfg80211_set_bitrate_mask ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (mask == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_bitrate_mask\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // TODO: Set bitrate mask of the peer? - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_bitrate_mask */ - - -void -mtk_p2p_cfg80211_mgmt_frame_register ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ) -{ -#if 0 - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; -#endif - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_mgmt_frame_register\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - switch (frame_type) { - case MAC_FRAME_PROBE_REQ: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, ERROR, ("Ask frog to add code for mgmt:%x\n", frame_type)); - break; - } - - - - prGlueInfo->u4Flag |= GLUE_FLAG_FRAME_FILTER; - - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - - if (in_interrupt()) { - DBGLOG(P2P, TRACE, ("It is in interrupt level\n")); - } - - - -#if 0 - - - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_MGMT_FRAME_REGISTER_T)); - - if (prMgmtFrameRegister == NULL) { - ASSERT(FALSE); - break; - } - - prMgmtFrameRegister->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_FRAME_REGISTER; - - prMgmtFrameRegister->u2FrameType = frame_type; - prMgmtFrameRegister->fgIsRegister = reg; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMgmtFrameRegister, - MSG_SEND_METHOD_BUF); - -#endif - - } while (FALSE); - - - return; -} /* mtk_p2p_cfg80211_mgmt_frame_register */ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch ( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel == NULL) { - break; - } - - if (prRfChnlInfo) { - prRfChnlInfo->ucChannelNum = nicFreq2ChannelNum(channel->center_freq * 1000); - - switch (channel->band) { - case IEEE80211_BAND_2GHZ: - prRfChnlInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChnlInfo->eBand = BAND_5G; - break; - default: - prRfChnlInfo->eBand = BAND_2G4; - break; - } - - } - - - if (prChnlSco) { - - switch (channel_type) { - case NL80211_CHAN_NO_HT: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT20: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT40MINUS: - *prChnlSco = CHNL_EXT_SCA; - break; - case NL80211_CHAN_HT40PLUS: - *prChnlSco = CHNL_EXT_SCB; - break; - default: - ASSERT(FALSE); - *prChnlSco = CHNL_EXT_SCN; - break; - } - } - - fgIsValid = TRUE; - } -while (FALSE); - - return fgIsValid; -} -/* mtk_p2p_cfg80211func_channel_format_switch */ - - -#if CONFIG_NL80211_TESTMODE -int mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_PARAMS prParams = (P_NL80211_DRIVER_TEST_PARAMS)NULL; - BOOLEAN fgIsValid = FALSE; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_cmd\n")); - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_PARAMS)data; - - if(prParams->index >> 24 == 0x01) { - /* New version */ - prParams->index = prParams->index & ~ BITS(24,31); - } - else { - /* Old version*/ - mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd(wiphy, data, len); - } - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* P2P Simga */ - if(mtk_p2p_cfg80211_testmode_p2p_sigma_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - case 2: /* WFD */ - break; - case 3: /* Hotspot Client Management */ - if(mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - default: - fgIsValid = TRUE; - break; - } - } - - return fgIsValid; - -} - - -int mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - NL80211_DRIVER_TEST_PRE_PARAMS rParams; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index_mode; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rParams, sizeof(NL80211_DRIVER_TEST_PRE_PARAMS)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_cmd\n")); - - if(data && len) - memcpy(&rParams, data, len); - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA,idx_mode=%d idx=%d value=%lu\n", - (INT_16)rParams.idx_mode, (INT_16)rParams.idx, rParams.value)); - - index_mode = rParams.idx_mode; - index = rParams.idx; - value = rParams.value; - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - p2pFsmUninit(prGlueInfo->prAdapter); - p2pFsmInit(prGlueInfo->prAdapter); - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - default: - break; - } - - return status; - -} - - -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_P2P_SIGMA_PARAMS prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_p2p_sigma_cmd\n")); - - if(data && len) - prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)data; - - index = (INT_32)prParams->idx; - value = (INT_32)prParams->value; - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA, idx=%lu value=%lu\n", - (INT_32)prParams->idx, (INT_32)prParams->value)); - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - case 109: /* Max Clients*/ - kalP2PSetMaxClients(prGlueInfo, value); - break; - default: - break; - } - - return status; - -} - - -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_hotspot_block_PARAMS prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)NULL; - int fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if(data && len) - prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)data; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd\n")); - - fgIsValid = kalP2PSetBlackList(prGlueInfo, prParams->aucBssid, prParams->ucblocked); - - return fgIsValid; - -} - -#endif - - -#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - -#endif // CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_init.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_init.c deleted file mode 100755 index 8fd89a40f35a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_init.c +++ /dev/null @@ -1,518 +0,0 @@ -/* -** $Id: @(#) gl_p2p_init.c@@ -*/ - -/*! \file gl_p2p_init.c - \brief init and exit routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define P2P_MODE_INF_NAME "p2p%d"; -#define AP_MODE_INF_NAME "ap%d"; -//#define MAX_INF_NAME_LEN 15 -//#define MIN_INF_NAME_LEN 1 - -#define RUNNING_P2P_MODE 0 -#define RUNNING_AP_MODE 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/* Get interface name and running mode from module insertion parameter -* Usage: insmod p2p.ko mode=1 -* default: interface name is p2p%d -* running mode is P2P -*/ -static PUCHAR ifname = P2P_MODE_INF_NAME; -static UINT_16 mode = RUNNING_P2P_MODE; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief check interface name parameter is valid or not -* if invalid, set ifname to P2P_MODE_INF_NAME -* -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pCheckInterfaceName( - VOID - ) -{ - - if(mode) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } -#if 0 - UINT_32 ifLen = 0; - - if(ifname) { - ifLen = strlen(ifname); - - if(ifLen > MAX_INF_NAME_LEN) { - ifname[MAX_INF_NAME_LEN] = '\0'; - } - else if( ifLen < MIN_INF_NAME_LEN ) { - ifname = P2P_MODE_INF_NAME; - } - } else { - ifname = P2P_MODE_INF_NAME; - } -#endif -} - - -extern UINT_8 g_aucBufIpAddr[32]; - -static void wlanP2PEarlySuspend(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - - printk(KERN_INFO "*********p2pEarlySuspend************\n"); - - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pEarlySuspend ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ip is not avaliable.\n"); - return; - } - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - // todo: traverse between list to find whole sets of IPv6 addresses - - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - } - -#endif - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); // TODO: frog. The pointer is not right. - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP); -#endif - } -#ifdef CONFIG_IPV6 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - - -static void wlanP2PLateResume(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - - printk(KERN_INFO "*********wlanP2PLateResume************\n"); - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pLateResume ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ip is not avaliable.\n"); - return; - } - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); -#endif - // <7> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_p2p_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void p2p_early_suspend(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_early_suspend************\n"); - wlanP2PEarlySuspend(); -} - -static void p2p_late_resume(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_late_resume************\n"); - wlanP2PLateResume(); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p init procedure, include register pointer to wlan -* glue register p2p -* set p2p registered flag -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ) -{ - - printk("p2p Launch\n"); - - if(prGlueInfo->prAdapter->fgIsP2PRegistered == TRUE) { - printk("p2p already registered\n"); - return FALSE; - } - else if(glRegisterP2P(prGlueInfo, ifname, (BOOLEAN)mode)) { - prGlueInfo->prAdapter->fgIsP2PRegistered = TRUE; - - printk("Launch success, fgIsP2PRegistered TRUE.\n"); - -#if defined(CONFIG_HAS_EARLYSUSPEND) - /* Here, we register the early suspend and resume callback */ - glRegisterEarlySuspend(&mt6620_p2p_early_suspend_desc, p2p_early_suspend, p2p_late_resume); -#endif - - return TRUE; - } - else { - printk("Launch Fail\n"); - } - - return FALSE; -} - - -VOID -p2pSetMode ( - IN BOOLEAN fgIsAPMOde - ) -{ - if (fgIsAPMOde) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } - else { - mode = RUNNING_P2P_MODE; - ifname = P2P_MODE_INF_NAME; - } - - return; -} /* p2pSetMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p exit procedure, include unregister pointer to wlan -* glue unregister p2p -* set p2p registered flag - -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ) -{ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - printk("p2p is not Registered.\n"); - return FALSE; - } - else { - -#if defined(CONFIG_HAS_EARLYSUSPEND) - glUnregisterEarlySuspend(&mt6620_p2p_early_suspend_desc); -#endif - /*Check p2p fsm is stop or not. If not then stop now*/ - if(IS_P2P_ACTIVE(prGlueInfo->prAdapter)) { - p2pStopImmediate(prGlueInfo); - } - prGlueInfo->prAdapter->fgIsP2PRegistered = FALSE; - glUnregisterP2P(prGlueInfo); - /*p2p is removed successfully*/ - return TRUE; - } - return FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -static int initP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - /*check interface name validation*/ - p2pCheckInterfaceName(); - - printk( KERN_INFO DRV_NAME "InitP2P, Ifname: %s, Mode: %s\n", ifname, mode ? "AP":"P2P"); - - /*register p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(p2pLaunch, p2pRemove, P2P_MODULE); - - /*if wlan is not start yet, do nothing - * p2pLaunch will be called by txthread while wlan start - */ - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModInit(prGlueInfo); - return ( prGlueInfo->prAdapter->fgIsP2PRegistered? 0: -EIO); - } - - return 0; -} /* end of initP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -static VOID __exit exitP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - printk( KERN_INFO DRV_NAME "ExitP2P\n"); - - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModExit(prGlueInfo); - } - /*UNregister p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(NULL, NULL, P2P_MODULE); -} /* end of exitP2P() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_kal.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_kal.c deleted file mode 100755 index 08a5f9b271b6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_p2p_kal.c +++ /dev/null @@ -1,1629 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_kal.c - \brief - -*/ - - - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "net/cfg80211.h" -#include "precomp.h" - -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ); - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->eState; -} /* end of kalP2PGetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to update the assoc req to p2p -* -* \param[in] -* prGlueInfo -* pucFrameBody -* u4FrameBodyLen -* fgReassocRequest -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PUpdateAssocInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; - unsigned char *pucDesiredIE = NULL; -// unsigned char aucExtraInfoBuf[200]; - PUINT_8 cp; - - memset(&wrqu, 0, sizeof(wrqu)); - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPSIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPSIE!!\n"); - /* WPS IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0x30, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* RSN IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* WPA IE found */ - } - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVASSOCREQIE, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - if(eState == PARAM_MEDIA_STATE_CONNECTED) { - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_CONNECTED; - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_CONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - } - else if(eState == PARAM_MEDIA_STATE_DISCONNECTED) { - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_DISCONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - } - else { - ASSERT(0); - } - - return; -} /* end of kalP2PSetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->u4FreqInKHz; -} /* end of kalP2PGetFreqInKHz() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->ucRole; -} /* end of kalP2PGetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct role -* -* \param[in] -* prGlueInfo -* ucResult -* 0: successful -* 1: error -* ucRole -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 2); - - memset(&evt, 0, sizeof(evt)); - - if(ucResult == 0) { - prGlueInfo->prP2PInfo->ucRole = ucRole; - } - - if (pucSSID) - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, pucSSID[7], pucSSID[8]); - else - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, '0', '0'); - - evt.data.length = strlen(aucBuffer); - - //if (pucSSID) - // printk("P2P GO SSID DIRECT-%c%c\n", pucSSID[7], pucSSID[8]); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PSetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the cipher for p2p -* -* \param[in] -* prGlueInfo -* u4Cipher -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->u4CipherPairwise = u4Cipher; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the cipher, return for cipher is ccmp -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE: cipher is ccmp -* FALSE: cipher is none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PGetCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -BOOLEAN -kalP2PGetCcmpCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return FALSE; - - return FALSE; -} - - -BOOLEAN -kalP2PGetTkipCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return FALSE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->ucWSCRunning = ucWscMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetWscMode ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - return (prGlueInfo->prP2PInfo->ucWSCRunning); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the wsc ie length -* -* \param[in] -* prGlueInfo -* ucType : 0 for beacon, 1 for probe req, 2 for probe resp -* -* \return -* The WSC IE length -*/ -/*----------------------------------------------------------------------------*/ -UINT_16 -kalP2PCalWSC_IELen ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ) -{ - ASSERT(prGlueInfo); - - ASSERT(ucType < 3); - - return prGlueInfo->prP2PInfo->u2WSCIELen[ucType]; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to copy the wsc ie setting from p2p supplicant -* -* \param[in] -* prGlueInfo -* -* \return -* The WPS IE length -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PGenWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - (pucBuffer == NULL)) { - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(pucBuffer, prGlP2pInfo->aucWSCIE[ucType], prGlP2pInfo->u2WSCIELen[ucType]); - - } while (FALSE); - - return; -} - - -VOID -kalP2PUpdateWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - ((u2BufferLength > 0) && (pucBuffer == NULL))) { - break; - } - - - if (u2BufferLength > 400) { - DBGLOG(P2P, ERROR, ("Buffer length is not enough, GLUE only 400 bytes but %d received\n", u2BufferLength)); - ASSERT(FALSE); - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(prGlP2pInfo->aucWSCIE[ucType], pucBuffer, u2BufferLength); - - prGlP2pInfo->u2WSCIELen[ucType] = u2BufferLength; - - - } while (FALSE); - - return; -} /* kalP2PUpdateWSC_IE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device connection request -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_REQ_DEVICE_INFO access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = u4NameLength > 32 ? 32 : u4NameLength; - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - pucDevName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, rPeerAddr); - prGlueInfo->prP2PInfo->ucConnReqDevType = ucDevType; - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = i4ConfigMethod; - prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod = i4ActiveConfigMethod; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_REQ"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateConnReq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for device connection request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] pucGroupBssid Only valid when invitation Type equals to 0. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationIndication ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ) -{ -#if 1 - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = (UINT_32)((prP2pDevDesc->u2NameLength > 32)? 32 : prP2pDevDesc->u2NameLength); - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - prP2pDevDesc->aucName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, prP2pDevDesc->aucDeviceAddr); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqGroupAddr, pucGroupBssid); - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = (INT_32)(prP2pDevDesc->u2ConfigMethod); - prGlueInfo->prP2PInfo->ucOperatingChnl = ucOperatingChnl; - prGlueInfo->prP2PInfo->ucInvitationType = ucInvitationType; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_INDICATE"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; - -#else - P_MSG_P2P_CONNECTION_REQUEST_T prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prGlueInfo != NULL) && (prP2pDevDesc != NULL)); - - - // Not a real solution - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (prP2pConnReq == NULL) { - break; - } - - - kalMemZero(prP2pConnReq, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - prP2pConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - prP2pConnReq->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - COPY_MAC_ADDR(prP2pConnReq->aucDeviceID, prP2pDevDesc->aucDeviceAddr); - - prP2pConnReq->u2ConfigMethod = prP2pDevDesc->u2ConfigMethod; - - if (ucInvitationType == P2P_INVITATION_TYPE_INVITATION) { - prP2pConnReq->fgIsPersistentGroup = FALSE; - prP2pConnReq->fgIsTobeGO = FALSE; - - } - - else if (ucInvitationType == P2P_INVITATION_TYPE_REINVOKE) { - DBGLOG(P2P, TRACE, ("Re-invoke Persistent Group\n")); - prP2pConnReq->fgIsPersistentGroup = TRUE; - prP2pConnReq->fgIsTobeGO = (prGlueInfo->prP2PInfo->ucRole == 2)?TRUE:FALSE; - - } - - - p2pFsmRunEventDeviceDiscoveryAbort(prGlueInfo->prAdapter, NULL); - - if (ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = ucOperatingChnl; - } - - if ((ucSsidLen < 32) && (pucSsid != NULL)) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - pucSsid, - ucSsidLen); - } - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pConnReq, - MSG_SEND_METHOD_BUF); - - - - } while (FALSE); - - // frog add. - // TODO: Invitation Indication - - return; -#endif - -} /* kalP2PInvitationIndication */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an status to supplicant for device invitation status. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4InvStatus = u4InvStatus; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_STATUS"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* kalP2PInvitationStatus */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_REQ %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery response -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_RESP %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery TX Done -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] ucSeqNum Sequence number of the frame -* \param[in] ucStatus Status code for TX -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_XMITTED: %d %d", ucSeqNum, ucStatus); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - return prGlueInfo->prP2PInfo->prDevHandler; -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSecCheckRsp ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SEC_CHECK_RSP="); - - kalMemCopy(prGlueInfo->prP2PInfo->aucSecCheckRsp, pucRsp, u2RspLen); - evt.data.length = strlen(aucBuffer); - -#if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u2RspLen); -#endif - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; -} /* p2pFsmRunEventRxDisassociation */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} /* kalGetChnlList */ - -//////////////////////////////////////ICS SUPPORT////////////////////////////////////// - -VOID -kalP2PIndicateChannelReady ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ) -{ - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - RF_CHANNEL_INFO_T rChannelInfo; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; - - do { - if (prGlueInfo == NULL) { - break; - } - - - kalMemZero(&rChannelInfo, sizeof(RF_CHANNEL_INFO_T)); - - rChannelInfo.ucChannelNum = u4ChannelNum; - rChannelInfo.eBand = eBand; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueInfo->prP2PInfo, &rChannelInfo); - - kalP2pFuncGetChannelType(eSco, &eChnlType); - - cfg80211_ready_on_channel(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - u8SeqNum, //u64 cookie, - prIEEE80211ChnlStruct, //struct ieee80211_channel * chan, - eChnlType, //enum nl80211_channel_type channel_type, - u4Duration, //unsigned int duration, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - - } while (FALSE); - -} /* kalP2PIndicateChannelReady */ - -VOID -kalP2PIndicateChannelExpired ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; - RF_CHANNEL_INFO_T rRfChannelInfo; - - do { - if ((prGlueInfo == NULL) || (prChnlReqInfo == NULL)) { - - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - DBGLOG(P2P, TRACE, ("kalP2PIndicateChannelExpired\n")); - - rRfChannelInfo.eBand = prChnlReqInfo->eBand; - rRfChannelInfo.ucChannelNum = prChnlReqInfo->ucReqChnlNum; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueP2pInfo, &rRfChannelInfo); - - - kalP2pFuncGetChannelType(prChnlReqInfo->eChnlSco, - &eChnlType); - - - cfg80211_remain_on_channel_expired(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prChnlReqInfo->u8Cookie, - prIEEE80211ChnlStruct, - eChnlType, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateChannelExpired */ - -VOID -kalP2PIndicateScanDone ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if (prGlueInfo == NULL) { - - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - if (prGlueP2pInfo->prScanRequest) { - cfg80211_scan_done(prGlueP2pInfo->prScanRequest, - fgIsAbort); - - prGlueP2pInfo->prScanRequest = NULL; - } - - } while (FALSE); - - -} /* kalP2PIndicateScanDone */ - -VOID -kalP2PIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prChannelEntry = (struct ieee80211_channel *)NULL; - struct ieee80211_mgmt *prBcnProbeRspFrame = (struct ieee80211_mgmt *)pucFrameBuf; - struct cfg80211_bss *prCfg80211Bss = (struct cfg80211_bss *)NULL; - - do { - if ((prGlueInfo == NULL) || (pucFrameBuf == NULL) || (prChannelInfo == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prChannelEntry = kalP2pFuncGetChannelEntry(prGlueP2pInfo, prChannelInfo); - - if (prChannelEntry == NULL) { - DBGLOG(P2P, TRACE, ("Unknown channel info\n")); - break; - } - - - //rChannelInfo.center_freq = nicChannelNum2Freq((UINT_32)prChannelInfo->ucChannelNum) / 1000; - - prCfg80211Bss = cfg80211_inform_bss_frame(prGlueP2pInfo->wdev.wiphy, //struct wiphy * wiphy, - prChannelEntry, - prBcnProbeRspFrame, - u4BufLen, - i4SignalStrength, - GFP_KERNEL); - - - /* Return this structure. */ - cfg80211_put_bss(prCfg80211Bss); - - } while (FALSE); - - return; - -} /* kalP2PIndicateBssInfo */ - -VOID -kalP2PIndicateMgmtTxStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (pucFrameBuf == NULL) || - (u4FrameLen == 0)) { - DBGLOG(P2P, TRACE, ("Unexpected pointer PARAM. 0x%lx, 0x%lx, %ld.", prGlueInfo, pucFrameBuf, u4FrameLen)); - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - cfg80211_mgmt_tx_status(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u8Cookie, - pucFrameBuf, - u4FrameLen, - fgIsAck, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateMgmtTxStatus */ - -VOID -kalP2PIndicateRxMgmtFrame ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ) -{ -#define DBG_P2P_MGMT_FRAME_INDICATION 0 - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Freq = 0; - UINT_8 ucChnlNum = 0; -#if DBG_P2P_MGMT_FRAME_INDICATION - P_WLAN_MAC_HEADER_T prWlanHeader = (P_WLAN_MAC_HEADER_T)NULL; -#endif - - - do { - if ((prGlueInfo == NULL) || (prSwRfb == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - ucChnlNum = prSwRfb->prHifRxHdr->ucHwChannelNum; - -#if DBG_P2P_MGMT_FRAME_INDICATION - - prWlanHeader = (P_WLAN_MAC_HEADER_T)prSwRfb->pvHeader; - - switch (prWlanHeader->u2FrameCtrl) { - case MAC_FRAME_PROBE_REQ: - DBGLOG(P2P, TRACE, ("RX Probe Req at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_PROBE_RSP: - DBGLOG(P2P, TRACE, ("RX Probe Rsp at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_ACTION: - DBGLOG(P2P, TRACE, ("RX Action frame at channel %d ", ucChnlNum)); - break; - default: - DBGLOG(P2P, TRACE, ("RX Packet:%d at channel %d ", prWlanHeader->u2FrameCtrl, ucChnlNum)); - break; - } - - DBGLOG(P2P, TRACE, ("from: "MACSTR"\n", MAC2STR(prWlanHeader->aucAddr2))); -#endif - i4Freq = nicChannelNum2Freq(ucChnlNum) / 1000; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - RCPI_TO_dBm(prSwRfb->prHifRxHdr->ucRcpi), - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_ATOMIC); -#else - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_ATOMIC); -#endif - - } while (FALSE); - -} /* kalP2PIndicateRxMgmtFrame */ - -VOID -kalP2PGCIndicateConnectionStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if (prGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prP2pConnInfo) { - cfg80211_connect_result(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prP2pConnInfo->aucBssid, - prP2pConnInfo->aucIEBuf, - prP2pConnInfo->u4BufLength, - pucRxIEBuf, - u2RxIELen, - u2StatusReason, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - prP2pConnInfo->fgIsConnRequest = FALSE; - } - else { - /* Disconnect, what if u2StatusReason == 0? */ - cfg80211_disconnected(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u2StatusReason, - pucRxIEBuf, - u2RxIELen, - GFP_KERNEL); - } - - - - } while (FALSE); - - -} /* kalP2PGCIndicateConnectionStatus */ - - -VOID -kalP2PGOStationUpdate ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ) -{ - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - struct station_info rStationInfo; - - do { - if ((prGlueInfo == NULL) || (prCliStaRec == NULL)) { - break; - } - - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (fgIsNew) { - rStationInfo.filled = STATION_INFO_ASSOC_REQ_IES; - rStationInfo.generation = ++prP2pGlueInfo->i4Generation; - - rStationInfo.assoc_req_ies = prCliStaRec->pucAssocReqIe; - rStationInfo.assoc_req_ies_len = prCliStaRec->u2AssocReqIeLen; -// rStationInfo.filled |= STATION_INFO_ASSOC_REQ_IES; - - cfg80211_new_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - &rStationInfo, - GFP_KERNEL); - } - else { - ++prP2pGlueInfo->i4Generation; - - cfg80211_del_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - GFP_KERNEL); - } - - - } while (FALSE); - - return; - -} /* kalP2PGOStationUpdate */ - - - - -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel_type) { - - switch (rChnlSco) { - case CHNL_EXT_SCN: - *channel_type = NL80211_CHAN_NO_HT; - break; - case CHNL_EXT_SCA: - *channel_type = NL80211_CHAN_HT40MINUS; - break; - case CHNL_EXT_SCB: - *channel_type = NL80211_CHAN_HT40PLUS; - break; - default: - ASSERT(FALSE); - *channel_type = NL80211_CHAN_NO_HT; - break; - } - - } - - fgIsValid = TRUE; - } while (FALSE); - - return fgIsValid; -} /* kalP2pFuncGetChannelType */ - - - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry ( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ) -{ - struct ieee80211_channel *prTargetChannelEntry = (struct ieee80211_channel *)NULL; - UINT_32 u4TblSize = 0, u4Idx = 0; - - do { - if ((prP2pInfo == NULL) || (prChannelInfo == NULL)) { - break; - } - - - switch (prChannelInfo->eBand) { - case BAND_2G4: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->n_channels; - break; - case BAND_5G: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels; - break; - default: - break; - } - - - if (prTargetChannelEntry == NULL) { - break; - } - - - - for (u4Idx = 0; u4Idx < u4TblSize; u4Idx++, prTargetChannelEntry++) { - if (prTargetChannelEntry->hw_value == prChannelInfo->ucChannelNum) { - break; - } - - } - - - if (u4Idx == u4TblSize) { - prTargetChannelEntry = NULL; - break; - } - - - } while (FALSE); - - return prTargetChannelEntry; -} /* kalP2pFuncGetChannelEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the block list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsValid = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(fgIsblock) { - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)) { - if(UNEQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - if(EQUAL_MAC_ADDR (&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - } - } - else { - for(i = 0; i < 8; i++) { - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - - return fgIsValid; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to compare the black list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsExsit = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)){ - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - fgIsExsit = TRUE; - return fgIsExsit; - } - } - } - - return fgIsExsit; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(u4MaxClient == 0 || prGlueInfo->prP2PInfo->ucMaxClients >= P2P_MAXIMUM_CLIENT_COUNT) - prGlueInfo->prP2PInfo->ucMaxClients = P2P_MAXIMUM_CLIENT_COUNT; - else - prGlueInfo->prP2PInfo->ucMaxClients = u4MaxClient; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(prGlueInfo->prP2PInfo->ucMaxClients) { - if((UINT_8)u4NumClient >= prGlueInfo->prP2PInfo->ucMaxClients) - return TRUE; - else - return FALSE; - } - - return FALSE; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_proc.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_proc.c deleted file mode 100755 index 3e53176c8991..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_proc.c +++ /dev/null @@ -1,811 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_proc.c#1 $ -*/ - -/*! \file "gl_proc.c" - \brief This file defines the interface which can interact with users in /proc fs. - - Detail description. -*/ - - - -/* -** $Log: gl_proc.c $ - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support -** \main\maintrunk.MT5921\19 2008-09-02 21:08:37 GMT mtk01461 -** Fix the compile error of SPRINTF() -** \main\maintrunk.MT5921\18 2008-08-10 18:48:28 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\17 2008-08-04 16:52:01 GMT mtk01461 -** Add proc dbg print message of DOMAIN_INDEX level -** \main\maintrunk.MT5921\16 2008-07-10 00:45:16 GMT mtk01461 -** Remove the check of MCR offset, we may use the MCR address which is not align to DW boundary or proprietary usage. -** \main\maintrunk.MT5921\15 2008-06-03 20:49:44 GMT mtk01461 -** \main\maintrunk.MT5921\14 2008-06-02 22:56:00 GMT mtk01461 -** Rename some functions for linux proc -** \main\maintrunk.MT5921\13 2008-06-02 20:23:18 GMT mtk01461 -** Revise PROC mcr read / write for supporting TELNET -** \main\maintrunk.MT5921\12 2008-03-28 10:40:25 GMT mtk01461 -** Remove temporary set desired rate in linux proc -** \main\maintrunk.MT5921\11 2008-01-07 15:07:29 GMT mtk01461 -** Add User Update Desired Rate Set for QA in Linux -** \main\maintrunk.MT5921\10 2007-12-11 00:11:14 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\9 2007-12-04 18:07:57 GMT mtk01461 -** Add additional debug category to proc -** \main\maintrunk.MT5921\8 2007-11-02 01:03:23 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\7 2007-10-25 18:08:14 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.3 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.2 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_kal.h" - -#include "wlan_lib.h" -#include "debug.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PROC_MCR_ACCESS "mcr" -#define PROC_DRV_STATUS "status" -#define PROC_RX_STATISTICS "rx_statistics" -#define PROC_TX_STATISTICS "tx_statistics" -#define PROC_DBG_LEVEL "dbg_level" - -#define PROC_MCR_ACCESS_MAX_USER_INPUT_LEN 20 -#define PROC_RX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_TX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_DBG_LEVEL_MAX_USER_INPUT_LEN 20 -#define PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN 30 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 u4McrOffset = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading MCR register to User Space, the offset of -* the MCR is specified in u4McrOffset. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - char *p = page; - UINT_32 u4Count; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - rMcrInfo.u4McrOffset = u4McrOffset; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryMcrRead, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - - - SPRINTF(p, ("MCR (0x%08lxh): 0x%08lx\n", - rMcrInfo.u4McrOffset, rMcrInfo.u4McrData)); - - u4Count = (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procMCRRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for writing MCR register to HW or update u4McrOffset -* for reading MCR later. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - char acBuf[PROC_MCR_ACCESS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - int i4CopySize; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - i4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - if (copy_from_user(acBuf, buffer, i4CopySize)) { - return 0; - } - acBuf[i4CopySize] = '\0'; - - switch (sscanf(acBuf, "0x%lx 0x%lx", - &rMcrInfo.u4McrOffset, &rMcrInfo.u4McrData)) { - case 2: - /* NOTE: Sometimes we want to test if bus will still be ok, after accessing - * the MCR which is not align to DW boundary. - */ - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - u4McrOffset = rMcrInfo.u4McrOffset; - - //printk("Write 0x%lx to MCR 0x%04lx\n", - //rMcrInfo.u4McrOffset, rMcrInfo.u4McrData); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetMcrWrite, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - } - break; - - case 1: - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - u4McrOffset = rMcrInfo.u4McrOffset; - } - break; - - default: - break; - } - - return count; - -} /* end of procMCRWrite() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver Status to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDrvStatusRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("GLUE LAYER STATUS:")); - SPRINTF(p, ("\n==================")); - - SPRINTF(p, ("\n* Number of Pending Frames: %ld\n", - prGlueInfo->u4TxPendingFrameNum)); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryDrvStatusForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procDrvStatusRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver RX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("RX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryRxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procRxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver RX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetRxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procRxStatisticsWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver TX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("TX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryTxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procTxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver TX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetTxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procTxStatisticsWrite() */ -#endif - - -#if DBG -static UINT_8 aucDbModuleName[][PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN] = { - "DBG_INIT_IDX", - "DBG_HAL_IDX", - "DBG_INTR_IDX", - "DBG_REQ_IDX", - "DBG_TX_IDX", - "DBG_RX_IDX", - "DBG_RFTEST_IDX", - "DBG_EMU_IDX", - "DBG_SW1_IDX", - "DBG_SW2_IDX", - "DBG_SW3_IDX", - "DBG_SW4_IDX", - "DBG_HEM_IDX", - "DBG_AIS_IDX", - "DBG_RLM_IDX", - "DBG_MEM_IDX", - "DBG_CNM_IDX", - "DBG_RSN_IDX", - "DBG_BSS_IDX", - "DBG_SCN_IDX", - "DBG_SAA_IDX", - "DBG_AAA_IDX", - "DBG_P2P_IDX", - "DBG_QM_IDX", - "DBG_SEC_IDX", - "DBG_BOW_IDX" - }; - -extern UINT_8 aucDebugModule[]; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for displaying current Debug Level. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - char *p = page; - int i; - - - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - for (i = 0; i < (sizeof(aucDbModuleName)/PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN); i++) { - SPRINTF(p, ("%c %-15s(0x%02x): %02x\n", - ((i == u4DebugModule) ? '*' : ' '), - &aucDbModuleName[i][0], - i, - aucDebugModule[i])); - } - - *eof = 1; - return (int)(p - page); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for adjusting Debug Level to turn on/off debugging message. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - char acBuf[PROC_DBG_LEVEL_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4NewDbgModule, u4NewDbgLevel; - - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "0x%lx 0x%lx", &u4NewDbgModule, &u4NewDbgLevel) == 2) { - if (u4NewDbgModule < DBG_MODULE_NUM) { - u4DebugModule = u4NewDbgModule; - u4NewDbgLevel &= DBG_CLASS_MASK; - aucDebugModule[u4DebugModule] = (UINT_8)u4NewDbgLevel; - } - } - - return count; -} -#endif /* DBG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function create a PROC fs in linux /proc/net subdirectory. -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo; - struct proc_dir_entry *prEntry; - - - ASSERT(prDev); - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, INFO, ("init proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("The OS context is NULL\n")); - return -ENOENT; - } - - - /* - /proc/net/wlan0 - |-- mcr (PROC_MCR_ACCESS) - |-- status (PROC_DRV_STATUS) - |-- rx_statistics (PROC_RX_STATISTICS) - |-- tx_statistics (PROC_TX_STATISTICS) - |-- dbg_level (PROC_DBG_LEVEL) - |-- (end) - */ - - /* - * Directory: Root (/proc/net/wlan0) - */ - - prGlueInfo->pProcRoot = proc_mkdir(pucDevName, init_net.proc_net); - if (prGlueInfo->pProcRoot == NULL) { - return -ENOENT; - } - - /* File Root/mcr (RW) */ - prEntry = create_proc_entry(PROC_MCR_ACCESS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procMCRRead; - prEntry->write_proc = procMCRWrite; - prEntry->data = (void *)prDev; - } - -#if 0 - /* File Root/status (RW) */ - prEntry = create_proc_read_entry(PROC_DRV_STATUS, 0, prGlueInfo->pProcRoot, - procDrvStatusRead, prDev); - - /* File Root/rx_statistics (RW) */ - prEntry = create_proc_entry(PROC_RX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procRxStatisticsRead; - prEntry->write_proc = procRxStatisticsWrite; - prEntry->data = (void *)prDev; - } - - /* File Root/tx_statistics (RW) */ - prEntry = create_proc_entry(PROC_TX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procTxStatisticsRead; - prEntry->write_proc = procTxStatisticsWrite; - prEntry->data = (void *)prDev; - } - -#if DBG - /* File Root/dbg_level (RW) */ - prEntry = create_proc_entry(PROC_DBG_LEVEL, 0644, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procDbgLevelRead; - prEntry->write_proc = procDbgLevelWrite; - } -#endif /* DBG */ -#endif - return 0; - -} /* end of procInitProcfs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clean up a PROC fs created by procInitProcfs(). -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - - ASSERT(prDev); - - if (!prDev) { - return -ENOENT; - } - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, WARN, ("remove proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (!prGlueInfo->pProcRoot) { - DBGLOG(INIT, WARN, ("The procfs root is NULL\n")); - return -ENOENT; - } -#if 0 -#if DBG - remove_proc_entry(PROC_DBG_LEVEL, prGlueInfo->pProcRoot); -#endif /* DBG */ - remove_proc_entry(PROC_TX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_RX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_DRV_STATUS, prGlueInfo->pProcRoot); -#endif - remove_proc_entry(PROC_MCR_ACCESS, prGlueInfo->pProcRoot); - - /* remove root directory (proc/net/wlan0) */ - remove_proc_entry(pucDevName, init_net.proc_net); - - return 0; - -} /* end of procRemoveProcfs() */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_rst.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_rst.c deleted file mode 100755 index 80d6e6ba205c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_rst.c +++ /dev/null @@ -1,473 +0,0 @@ -/* -** $Id: @(#) gl_rst.c@@ -*/ - -/*! \file gl_rst.c - \brief Main routines for supporintg MT6620 whole-chip reset mechanism - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - - - -/* -** $Log: gl_rst.c $ - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 03 30 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * use netlink unicast instead of broadcast - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include -#include - -#if CFG_CHIP_RESET_SUPPORT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_BIND_PROCESS (4) - -#define MTK_WIFI_FAMILY_NAME "MTK_WIFI" -#define MTK_WIFI_RESET_START_NAME "RESET_START" -#define MTK_WIFI_RESET_END_NAME "RESET_END" -#define MTK_WIFI_RESET_TEST_NAME "GENETLINK_START" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -enum { - __MTK_WIFI_ATTR_INVALID, - MTK_WIFI_ATTR_MSG, - __MTK_WIFI_ATTR_MAX, -}; -#define MTK_WIFI_ATTR_MAX (__MTK_WIFI_ATTR_MAX - 1) - - -enum { - __MTK_WIFI_COMMAND_INVALID, - MTK_WIFI_COMMAND_BIND, - MTK_WIFI_COMMAND_RESET, - __MTK_WIFI_COMMAND_MAX, -}; -#define MTK_WIFI_COMMAND_MAX (__MTK_WIFI_COMMAND_MAX - 1) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 mtk_wifi_seqnum = 0; -static int num_bind_process = 0; -static pid_t bind_pid[MAX_BIND_PROCESS]; -static BOOLEAN fgIsResetting = FALSE; - -/* attribute policy */ -static struct nla_policy mtk_wifi_genl_policy[MTK_WIFI_ATTR_MAX + 1] = { - [MTK_WIFI_ATTR_MSG] = { .type = NLA_NUL_STRING }, -}; - -/* family definition */ -static struct genl_family mtk_wifi_gnl_family = { - .id = GENL_ID_GENERATE, - .hdrsize = 0, - .name = MTK_WIFI_FAMILY_NAME, - .version = 1, - .maxattr = MTK_WIFI_ATTR_MAX, -}; - -/* forward declaration */ -static int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ); - -static int mtk_wifi_reset( - struct sk_buff *skb, - struct genl_info *info - ); - -/* operation definition */ -static struct genl_ops mtk_wifi_gnl_ops_bind = { - .cmd = MTK_WIFI_COMMAND_BIND, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_bind, - .dumpit = NULL, -}; - -static struct genl_ops mtk_wifi_gnl_ops_reset = { - .cmd = MTK_WIFI_COMMAND_RESET, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_reset, - .dumpit = NULL, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -extern int -mtk_wcn_wmt_msgcb_reg( - ENUM_WMTDRV_TYPE_T eType, - PF_WMT_CB pCb); - -extern int -mtk_wcn_wmt_msgcb_unreg( - ENUM_WMTDRV_TYPE_T eType - ); - -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ); - -static BOOLEAN -glResetSendMessage ( - char *aucMsg, - u8 cmd - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. registering for reset callbacks - * 2. initialize netlink socket - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ) -{ - /* 1. register for reset callback */ - mtk_wcn_wmt_msgcb_reg(WMTDRV_TYPE_WIFI, (PF_WMT_CB)glResetCallback); - - /* 2.1 registration for NETLINK_GENERIC family */ - if(genl_register_family(&mtk_wifi_gnl_family) != 0) { - DBGLOG(INIT, WARN, ("%s(): GE_NELINK family registration fail\n", __func__)); - } - else { - /* 2.2 operation registration */ - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_bind) != 0) { - DBGLOG(INIT, WARN, ("%s(): BIND operation registration fail\n", __func__)); - } - - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_reset) != 0) { - DBGLOG(INIT, WARN, ("%s(): RESET operation registration fail\n", __func__)); - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. uninitialize netlink socket - * 2. deregistering for reset callbacks - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetUninit( - VOID - ) -{ - /* 1. release NETLINK_GENERIC family */ - genl_unregister_family(&mtk_wifi_gnl_family); - - /* 2. deregister for reset callback */ - mtk_wcn_wmt_msgcb_unreg(WMTDRV_TYPE_WIFI); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is invoked when there is reset messages indicated - * - * @param eSrcType - * eDstType - * eMsgType - * prMsgBody - * u4MsgLength - * - * @retval - */ -/*----------------------------------------------------------------------------*/ -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ) -{ - switch(eMsgType) { - case WMTMSG_TYPE_RESET: - if(u4MsgLength == sizeof(ENUM_WMTRSTMSG_TYPE_T)) { - P_ENUM_WMTRSTMSG_TYPE_T prRstMsg = (P_ENUM_WMTRSTMSG_TYPE_T) prMsgBody; - - switch(*prRstMsg) { - case WMTRSTMSG_RESET_START: - fgIsResetting = TRUE; - glResetSendMessage(MTK_WIFI_RESET_START_NAME, MTK_WIFI_COMMAND_RESET); - break; - - case WMTRSTMSG_RESET_END: - glResetSendMessage(MTK_WIFI_RESET_END_NAME, MTK_WIFI_COMMAND_RESET); - fgIsResetting = FALSE; - break; - - default: - break; - } - } - - break; - - default: - break; - } - - return NULL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine send out message via netlink socket - * - * @param aucMsg - * u4MsgLength - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -glResetSendMessage( - char * aucMsg, - u8 cmd - ) -{ - struct sk_buff *skb = NULL; - void *msg_head = NULL; - int rc = -1; - int i; - - if(num_bind_process == 0) { - /* no listening process */ - return FALSE; - } - - for(i = 0 ; i < num_bind_process ; i++) { - skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); - - if(skb) { - msg_head = genlmsg_put(skb, 0, mtk_wifi_seqnum++, &mtk_wifi_gnl_family, 0, cmd); - - if(msg_head == NULL) { - nlmsg_free(skb); - return FALSE; - } - - rc = nla_put_string(skb, MTK_WIFI_ATTR_MSG, aucMsg); - if(rc != 0) { - nlmsg_free(skb); - return FALSE; - } - - /* finalize the message */ - genlmsg_end(skb, msg_head); - - /* sending message */ - rc = genlmsg_unicast(&init_net, skb, bind_pid[i]); - if(rc != 0) { - return FALSE; - } - } - else { - return FALSE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called to identify PID for process binding - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ) -{ - struct nlattr *na; - char * mydata; - - if (info == NULL) { - goto out; - } - - /*for each attribute there is an index in info->attrs which points to a nlattr structure - *in this structure the data is given - */ - - na = info->attrs[MTK_WIFI_ATTR_MSG]; - if (na) { - mydata = (char *)nla_data(na); - - /* no need to parse mydata */ - } - - /* collect PID */ - if(num_bind_process < MAX_BIND_PROCESS) { - bind_pid[num_bind_process] = info->snd_pid; - num_bind_process++; - } - else { - DBGLOG(INIT, WARN, ("%s(): exceeding binding limit %d\n", __func__, MAX_BIND_PROCESS)); - } - -out: - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for reset, shout not happen - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_reset( - struct sk_buff *skb, - struct genl_info *info - ) -{ - DBGLOG(INIT, WARN, ("%s(): should not be invoked\n", __func__)); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for generating reset request to WMT - * - * @param None - * - * @retval None - */ -/*----------------------------------------------------------------------------*/ -VOID -glSendResetRequest( - VOID - ) -{ - // WMT thread would trigger whole chip resetting itself - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for checking if MT6620 is resetting - * - * @param None - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsResetting( - VOID - ) -{ - return fgIsResetting; -} - - -#endif // CFG_CHIP_RESET_SUPPORT diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_wext.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_wext.c deleted file mode 100755 index 17e3460a6a48..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_wext.c +++ /dev/null @@ -1,4527 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_wext.c#3 $ -*/ - -/*! \file gl_wext.c - \brief ioctl() (mostly Linux Wireless Extensions) routines for STA driver. -*/ - - - -/* -** $Log: gl_wext.c $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 tsaiyuan.hsu - * [WCXRP00000979] [MT6620 Wi-Fi][DRV]] stop attempting to connect to config AP after D3 state - * avoid entering D3 state after deep sleep. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 wh.su - * [WCXRP00000877] [MT6620 Wi-Fi][Driver] Remove the netif_carry_ok check for avoid the wpa_supplicant fail to query the ap address - * Remove the netif check while query bssid and ssid - * - * 07 26 2011 chinglan.wang - * NULL - * [MT6620][WiFi Driver] Do not include the WSC IE in the association info packet when not do the wps connection.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 17 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Initilize the vairlabes. - * - * 05 11 2011 jeffrey.chang - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * modify set_tx_pow ioctl - * - * 03 29 2011 terry.wu - * [WCXRP00000610] [MT 6620 Wi-Fi][Driver] Fix klocwork waring - * [MT6620 Wi-Fi][Driver] Fix klocwork warning. Add Null pointer check on wext_get_essid. Limit the upper bound of essid storage array. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 21 2011 wh.su - * [WCXRP00000483] [MT6620 Wi-Fi][Driver] Check the kalIoctl return value before doing the memory copy at linux get essid - * fixed the potential error to do a larget memory copy while wlanoid get essid not actually running. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 01 29 2011 wh.su - * [WCXRP00000408] [MT6620 Wi-Fi][Driver] Not doing memory alloc while ioctl set ie with length 0 - * not doing mem alloc. while set ie length already 0 - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Remove debug text. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous types - * to ease slab system pressure - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Allow change PS profile function (throught wext_set_power()). - * - * 12 14 2010 jeffrey.chang - * [WCXRP00000262] [MT6620 Wi-Fi][Driver] modify the scan request ioctl to handle hidden SSID - * handle hidden SSID - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * Fix compiling error - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000121] [MT6620 Wi-Fi][Driver] Temporarily disable set power mode ioctl which may cause 6620 to enter power saving - * Temporarily disable set power mode ioctl which may cause MT6620 to enter power saving - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 01 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * add the scan result with wapi ie. - * - * 09 30 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed the wapi ie assigned issue. - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 02 2010 jeffrey.chang - * NULL - * enable remove key ioctl - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) enable encyption ioctls - * 2) temporarily disable remove keys ioctl to prevent TX1 busy - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove unused macro and debug messages - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassoication support for wpa supplicant - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * * 2) fix ioctl - * - * 04 12 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug messages for pre-release - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * are done in adapter layer. - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl type - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * enable pmksa cache operation - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\38 2009-10-08 10:33:22 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\37 2009-09-29 16:49:48 GMT mtk01090 -** Remove unused variables -** \main\maintrunk.MT5921\36 2009-09-28 20:19:11 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\35 2009-09-03 11:42:30 GMT mtk01088 -** adding the wapi ioctl support -** \main\maintrunk.MT5921\34 2009-08-18 22:56:50 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\33 2009-05-14 22:43:47 GMT mtk01089 -** fix compiling warning -** \main\maintrunk.MT5921\32 2009-05-07 22:26:18 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\31 2009-02-07 15:11:14 GMT mtk01088 -** fixed the compiling error -** \main\maintrunk.MT5921\30 2009-02-07 14:46:51 GMT mtk01088 -** add the privacy setting from linux supplicant ap selection -** \main\maintrunk.MT5921\29 2008-11-19 15:18:50 GMT mtk01088 -** fixed the compling error -** \main\maintrunk.MT5921\28 2008-11-19 11:56:18 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\27 2008-08-29 16:59:43 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\26 2008-08-29 14:55:53 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\25 2008-06-02 11:15:19 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\24 2008-05-30 15:13:12 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\23 2008-03-28 10:40:28 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\22 2008-03-18 10:31:24 GMT mtk01088 -** add pmkid ioctl and indicate -** \main\maintrunk.MT5921\21 2008-03-11 15:21:24 GMT mtk01461 -** \main\maintrunk.MT5921\20 2008-03-11 14:50:55 GMT mtk01461 -** Refine WPS related priv ioctl for unified interface -** -** \main\maintrunk.MT5921\19 2008-03-06 16:30:41 GMT mtk01088 -** move the configuration code from set essid function, -** remove the non-used code -** \main\maintrunk.MT5921\18 2008-02-21 15:47:09 GMT mtk01461 -** Fix CR[489] -** \main\maintrunk.MT5921\17 2008-02-12 23:38:31 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\16 2008-01-24 12:07:34 GMT mtk01461 -** \main\maintrunk.MT5921\15 2008-01-24 12:00:10 GMT mtk01461 -** Modify the wext_essid for set up correct information for IBSS, and fix the wrong input ptr for prAdapter -** \main\maintrunk.MT5921\14 2007-12-06 09:30:12 GMT mtk01425 -** 1. Branch Test -** \main\maintrunk.MT5921\13 2007-12-04 18:07:59 GMT mtk01461 -** fix typo -** \main\maintrunk.MT5921\12 2007-11-30 17:10:21 GMT mtk01425 -** 1. Fix compiling erros -** -** \main\maintrunk.MT5921\11 2007-11-27 10:43:22 GMT mtk01425 -** 1. Add WMM-PS setting -** \main\maintrunk.MT5921\10 2007-11-06 20:33:32 GMT mtk01088 -** fixed the compiler error -** \main\maintrunk.MT5921\9 2007-11-06 19:33:15 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\8 2007-10-30 12:00:44 GMT MTK01425 -** 1. Update wlanQueryInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#include "config.h" -#include "wlan_oid.h" - -#include "gl_wext.h" -#include "gl_wext_priv.h" - -#include "precomp.h" - -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif - -/* compatibility to wireless extensions */ -#ifdef WIRELESS_EXT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const long channel_freq[] = { - 2412, 2417, 2422, 2427, 2432, 2437, 2442, - 2447, 2452, 2457, 2462, 2467, 2472, 2484 -}; - -#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \ - switch (ch) \ - { \ - case 1: khz = 2412000; break; \ - case 2: khz = 2417000; break; \ - case 3: khz = 2422000; break; \ - case 4: khz = 2427000; break; \ - case 5: khz = 2432000; break; \ - case 6: khz = 2437000; break; \ - case 7: khz = 2442000; break; \ - case 8: khz = 2447000; break; \ - case 9: khz = 2452000; break; \ - case 10: khz = 2457000; break; \ - case 11: khz = 2462000; break; \ - case 12: khz = 2467000; break; \ - case 13: khz = 2472000; break; \ - case 14: khz = 2484000; break; \ - case 36: /* UNII */ khz = 5180000; break; \ - case 40: /* UNII */ khz = 5200000; break; \ - case 44: /* UNII */ khz = 5220000; break; \ - case 48: /* UNII */ khz = 5240000; break; \ - case 52: /* UNII */ khz = 5260000; break; \ - case 56: /* UNII */ khz = 5280000; break; \ - case 60: /* UNII */ khz = 5300000; break; \ - case 64: /* UNII */ khz = 5320000; break; \ - case 149: /* UNII */ khz = 5745000; break; \ - case 153: /* UNII */ khz = 5765000; break; \ - case 157: /* UNII */ khz = 5785000; break; \ - case 161: /* UNII */ khz = 5805000; break; \ - case 165: /* UNII */ khz = 5825000; break; \ - case 100: /* HiperLAN2 */ khz = 5500000; break; \ - case 104: /* HiperLAN2 */ khz = 5520000; break; \ - case 108: /* HiperLAN2 */ khz = 5540000; break; \ - case 112: /* HiperLAN2 */ khz = 5560000; break; \ - case 116: /* HiperLAN2 */ khz = 5580000; break; \ - case 120: /* HiperLAN2 */ khz = 5600000; break; \ - case 124: /* HiperLAN2 */ khz = 5620000; break; \ - case 128: /* HiperLAN2 */ khz = 5640000; break; \ - case 132: /* HiperLAN2 */ khz = 5660000; break; \ - case 136: /* HiperLAN2 */ khz = 5680000; break; \ - case 140: /* HiperLAN2 */ khz = 5700000; break; \ - case 34: /* Japan MMAC */ khz = 5170000; break; \ - case 38: /* Japan MMAC */ khz = 5190000; break; \ - case 42: /* Japan MMAC */ khz = 5210000; break; \ - case 46: /* Japan MMAC */ khz = 5230000; break; \ - case 184: /* Japan */ khz = 4920000; break; \ - case 188: /* Japan */ khz = 4940000; break; \ - case 192: /* Japan */ khz = 4960000; break; \ - case 196: /* Japan */ khz = 4980000; break; \ - case 208: /* Japan, means J08 */ khz = 5040000; break; \ - case 212: /* Japan, means J12 */ khz = 5060000; break; \ - case 216: /* Japan, means J16 */ khz = 5080000; break; \ - default: khz = 2412000; break; \ - } \ - } - - -#define NUM_CHANNELS (sizeof(channel_freq) / sizeof(channel_freq[0])) - -#define MAX_SSID_LEN 32 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -/* NOTE: name in iwpriv_args only have 16 bytes */ -static const struct iw_priv_args rIwPrivTable[] = { - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, ""}, - - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - - {IOCTL_SET_INTS, IW_PRIV_TYPE_INT | 4, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | 50, ""}, - - /* added for set_oid and get_oid */ - {IOCTL_SET_STRUCT, 256, 0, ""}, - {IOCTL_GET_STRUCT, 0, 256, ""}, - - /* sub-ioctl definitions */ -#if 0 - {PRIV_CMD_REG_DOMAIN, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_reg_domain" }, - {PRIV_CMD_REG_DOMAIN, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_reg_domain" }, -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - {PRIV_CMD_CSUM_OFFLOAD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_tcp_csum" }, -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - {PRIV_CMD_POWER_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_power_mode" }, - {PRIV_CMD_POWER_MODE, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_power_mode" }, - - {PRIV_CMD_WMM_PS, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "set_wmm_ps" }, - - {PRIV_CMD_TEST_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_test_mode" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_test_cmd" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_test_result" }, -#if CFG_SUPPORT_PRIV_MCR_RW - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_mcr" }, - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mcr" }, -#endif - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_sw_ctrl" }, - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_sw_ctrl" }, - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_bwcs"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_bwcs"}, -#endif - - /* SET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 256, 0, "set_oid"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 0, 256, "get_oid"}, - - {PRIV_CMD_BAND_CONFIG, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_band" }, - {PRIV_CMD_BAND_CONFIG, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_band" }, - - {PRIV_CMD_SET_TX_POWER, IW_PRIV_TYPE_INT | 4, 0, "set_txpower" }, - {PRIV_CMD_GET_CH_LIST, 0, IW_PRIV_TYPE_INT | 50, "get_ch_list" }, - {PRIV_CMD_DUMP_MEM, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mem" }, - -#if CFG_ENABLE_WIFI_DIRECT - {PRIV_CMD_P2P_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_p2p_mode" }, -#endif -}; - -static const iw_handler rIwPrivHandler[] = { - [IOCTL_SET_INT - SIOCIWFIRSTPRIV] = priv_set_int, - [IOCTL_GET_INT - SIOCIWFIRSTPRIV] = priv_get_int, - [IOCTL_SET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STRUCT - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_GET_STRUCT - SIOCIWFIRSTPRIV] = priv_get_struct, - [IOCTL_SET_STRUCT_FOR_EM - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_SET_INTS - SIOCIWFIRSTPRIV] = priv_set_ints, - [IOCTL_GET_INTS - SIOCIWFIRSTPRIV] = priv_get_ints, -}; - -const struct iw_handler_def wext_handler_def = { - .num_standard = 0, - .num_private = (__u16)sizeof(rIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args), - .standard = (iw_handler *) NULL, - .private = rIwPrivHandler, - .private_args = rIwPrivTable, - .get_wireless_stats = wext_get_wireless_stats, -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPA/RSN Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPA IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x01", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPA IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPAIE */ - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WAPI Information Element . -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWAPIIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ELEM_ID_WAPI && i4InfoElemLen <= i4TotalIeLen) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* wextSrchDesiredWAPIIE */ -#endif - - -#if CFG_SUPPORT_WPS -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPS Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPS IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x04", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPS IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPSIE */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the name of the protocol used on the air. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] pcName Buffer to store protocol name string -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note If netif_carrier_ok, protocol name is returned; -* otherwise, "disconnected" is returned. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_name ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT char *pcName, - IN char *pcExtra - ) -{ - ENUM_PARAM_NETWORK_TYPE_T eNetWorkType; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcName); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcName)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (netif_carrier_ok(prNetDev)) { - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryNetworkTypeInUse, - &eNetWorkType, - sizeof(eNetWorkType), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - switch(eNetWorkType) { - case PARAM_NETWORK_TYPE_DS: - strcpy(pcName, "IEEE 802.11b"); - break; - case PARAM_NETWORK_TYPE_OFDM24: - strcpy(pcName, "IEEE 802.11bgn"); - break; - case PARAM_NETWORK_TYPE_AUTOMODE: - case PARAM_NETWORK_TYPE_OFDM5: - strcpy(pcName, "IEEE 802.11abgn"); - break; - case PARAM_NETWORK_TYPE_FH: - default: - strcpy(pcName, "IEEE 802.11"); - break; - } - } - else { - strcpy(pcName, "Disconnected"); - } - - return 0; -} /* wext_get_name */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL -* \param[in] prFreq Buffer to store frequency information -* \param[in] pcExtra NULL -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If infrastructure mode is not NET NET_TYPE_IBSS. -* \retval -EINVAL Invalid channel frequency. -* -* \note If infrastructure mode is IBSS, new channel frequency is set to device. -* The range of channel number depends on different regulatory domain. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - -#if 0 - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("set m:%d, e:%d, i:%d, flags:%d\n", - prIwFreq->m, prIwFreq->e, prIwFreq->i, prIwFreq->flags); - */ - - /* If setting by frequency, convert to a channel */ - if ((prIwFreq->e == 1) && - (prIwFreq->m >= (int) 2.412e8) && - (prIwFreq->m <= (int) 2.484e8)) { - - /* Change to KHz format */ - u4ChnlFreq = (UINT_32)(prIwFreq->m / (KILO / 10)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - /* Setting by channel number */ - else if ((prIwFreq->m > KILO) || (prIwFreq->e > 0)) { - return -EOPNOTSUPP; - } - else { - /* Change to channel number format */ - u4ChnlFreq = (UINT_32)prIwFreq->m; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetChannel, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - -#endif - - return 0; - -} /* wext_set_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFreq Buffer to store frequency information. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise -* -* \note If netif_carrier_ok, channel frequency information is stored in pFreq. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - UINT_32 u4Channel = 0; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: TODO skip checking in IBSS mode */ - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryFrequency, - &u4Channel, - sizeof(u4Channel), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - prIwFreq->m = (int) u4Channel; /* freq in KHz */ - prIwFreq->e = 3; - - return 0; - -} /* wext_get_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set operating mode. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - switch (*pu4Mode) { - case IW_MODE_AUTO: - eOpMode = NET_TYPE_AUTO_SWITCH; - break; - - case IW_MODE_ADHOC: - eOpMode = NET_TYPE_IBSS; - break; - - case IW_MODE_INFRA: - eOpMode = NET_TYPE_INFRA; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Set UNSUPPORTED Mode = %d.\n", __FUNCTION__, *pu4Mode)); - return -EOPNOTSUPP; - } - - //printk("%s(): Set Mode = %d\n", __FUNCTION__, *pu4Mode); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} /* wext_set_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get operating mode. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo NULL. -* \param[out] pu4Mode Buffer to store operating mode information. -* \param[in] pcExtra NULL. -* -* \retval 0 If data is valid. -* \retval -EINVAL Otherwise. -* -* \note If netif_carrier_ok, operating mode information is stored in pu4Mode. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - OUT unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch (eOpMode){ - case NET_TYPE_IBSS: - *pu4Mode = IW_MODE_ADHOC; - break; - - case NET_TYPE_INFRA: - *pu4Mode = IW_MODE_INFRA; - break; - - case NET_TYPE_AUTO_SWITCH: - *pu4Mode = IW_MODE_AUTO; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Get UNKNOWN Mode.\n", __FUNCTION__)); - return -EINVAL; - } - - return 0; -} /* wext_get_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the valid range for each configurable STA setting value. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer to iw_point structure, not used. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 If data is valid. -* -* \note The extra buffer (pcExtra) is filled with information from driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_range ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - OUT char *pcExtra - ) -{ - struct iw_range *prRange = NULL; - PARAM_RATES_EX aucSuppRate = {0}; /* data buffers */ - int i = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prRange = (struct iw_range *) pcExtra; - - memset(prRange, 0, sizeof(*prRange)); - prRange->throughput = 20000000; /* 20Mbps */ - prRange->min_nwid = 0; /* not used */ - prRange->max_nwid = 0; /* not used */ - - /* scan_capa not implemented */ - - /* event_capa[6]: kernel + driver capabilities */ - prRange->event_capa[0] = (IW_EVENT_CAPA_K_0 - | IW_EVENT_CAPA_MASK(SIOCGIWAP) - | IW_EVENT_CAPA_MASK(SIOCGIWSCAN) - /* can't display meaningful string in iwlist - | IW_EVENT_CAPA_MASK(SIOCGIWTXPOW) - | IW_EVENT_CAPA_MASK(IWEVMICHAELMICFAILURE) - | IW_EVENT_CAPA_MASK(IWEVASSOCREQIE) - | IW_EVENT_CAPA_MASK(IWEVPMKIDCAND) - */ - ); - prRange->event_capa[1] = IW_EVENT_CAPA_K_1; - - /* report 2.4G channel and frequency only */ - prRange->num_channels = (__u16) NUM_CHANNELS; - prRange->num_frequency = (__u8) NUM_CHANNELS; - for (i = 0; i < NUM_CHANNELS; i++) { - /* iwlib takes this number as channel number */ - prRange->freq[i].i = i + 1; - prRange->freq[i].m = channel_freq[i]; - prRange->freq[i].e = 6; /* Values in table in MHz */ - } - - rStatus = kalIoctl( - prGlueInfo, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - for (i = 0; i < IW_MAX_BITRATES && i < PARAM_MAX_LEN_RATES_EX ; i++) { - if (aucSuppRate[i] == 0) { - break; - } - prRange->bitrate[i] = (aucSuppRate[i] & 0x7F) * 500000; /* 0.5Mbps */ - } - prRange->num_bitrates = i; - - prRange->min_rts = 0; - prRange->max_rts = 2347; - prRange->min_frag = 256; - prRange->max_frag = 2346; - - prRange->min_pmp = 0; /* power management by driver */ - prRange->max_pmp = 0; /* power management by driver */ - prRange->min_pmt = 0; /* power management by driver */ - prRange->max_pmt = 0; /* power management by driver */ - prRange->pmp_flags = IW_POWER_RELATIVE; /* pm default flag */ - prRange->pmt_flags = IW_POWER_ON; /* pm timeout flag */ - prRange->pm_capa = IW_POWER_ON; /* power management by driver */ - - prRange->encoding_size[0] = 5; /* wep40 */ - prRange->encoding_size[1] = 16; /* tkip */ - prRange->encoding_size[2] = 16; /* ckip */ - prRange->encoding_size[3] = 16; /* ccmp */ - prRange->encoding_size[4] = 13; /* wep104 */ - prRange->encoding_size[5] = 16; /* wep128 */ - prRange->num_encoding_sizes = 6; - prRange->max_encoding_tokens = 6; /* token? */ - -#if WIRELESS_EXT < 17 - prRange->txpower_capa = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prRange->txpower_capa = IW_TXPOW_RELATIVE; -#endif - prRange->num_txpower = 5; - prRange->txpower[0] = 0; /* minimum */ - prRange->txpower[1] = 25; /* 25% */ - prRange->txpower[2] = 50; /* 50% */ - prRange->txpower[3] = 100; /* 100% */ - - prRange->we_version_compiled = WIRELESS_EXT; - prRange->we_version_source = WIRELESS_EXT; - - prRange->retry_capa = IW_RETRY_LIMIT; - prRange->retry_flags = IW_RETRY_LIMIT; - prRange->min_retry = 7; - prRange->max_retry = 7; - prRange->r_time_flags = IW_RETRY_ON; - prRange->min_r_time = 0; - prRange->max_r_time = 0; - - /* signal strength and link quality */ - /* Just define range here, reporting value moved to wext_get_stats() */ - prRange->sensitivity = -83; /* fixed value */ - prRange->max_qual.qual = 100; /* max 100% */ - prRange->max_qual.level = (__u8)(0x100 - 0); /* max 0 dbm */ - prRange->max_qual.noise = (__u8)(0x100 - 0); /* max 0 dbm */ - - /* enc_capa */ -#if WIRELESS_EXT > 17 - prRange->enc_capa = IW_ENC_CAPA_WPA | - IW_ENC_CAPA_WPA2 | - IW_ENC_CAPA_CIPHER_TKIP | - IW_ENC_CAPA_CIPHER_CCMP; -#endif - - /* min_pms; Minimal PM saving */ - /* max_pms; Maximal PM saving */ - /* pms_flags; How to decode max/min PM saving */ - - /* modul_capa; IW_MODUL_* bit field */ - /* bitrate_capa; Types of bitrates supported */ - - return 0; -} /* wext_get_range */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set BSSID of AP to connect. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prAddr Pointer to struct sockaddr structure containing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note Desired AP's BSSID is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_ap ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - return 0; -} /* wext_set_ap */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get AP MAC address. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prAddr Pointer to struct sockaddr structure storing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, AP's mac address is stored in pAddr->sa_data. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_ap ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prAddr); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAddr)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - if(prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_DISCONNECTED){ - memset(prAddr, 0, 6); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssid, - prAddr->sa_data, - ETH_ALEN, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; -} /* wext_get_ap */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set mlme operation request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer of iw_point header. -* \param[in] pcExtra Pointer to iw_mlme structure mlme request information. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP unsupported IW_MLME_ command. -* \retval -EINVAL Set MLME Fail, different bssid. -* -* \note Driver will start mlme operation if valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mlme ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - IN char *pcExtra - ) -{ - struct iw_mlme *prMlme = NULL; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prMlme = (struct iw_mlme *)pcExtra; - if (prMlme->cmd == IW_MLME_DEAUTH || prMlme->cmd == IW_MLME_DISASSOC) { - if (!netif_carrier_ok(prNetDev)) { - DBGLOG(INIT, INFO, ("[wifi] Set MLME Deauth/Disassoc, but netif_carrier_off\n")); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - return 0; - } - else { - DBGLOG(INIT, INFO, ("[wifi] unsupported IW_MLME_ command :%d\n", prMlme->cmd)); - return -EOPNOTSUPP; - } -} /* wext_set_mlme */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To issue scan request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData NULL. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EFAULT Tx power is off. -* -* \note Device will start scanning. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN union iwreq_data *prData, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - int essid_len = 0; - - ASSERT(prNetDev); - if (FALSE == GLUE_CHK_DEV(prNetDev)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if WIRELESS_EXT > 17 - /* retrieve SSID */ - if(prData) { - essid_len = ((struct iw_scan_req *)(((struct iw_point*)prData)->pointer))->essid_len; - } -#endif - - init_completion(&prGlueInfo->rScanComp); - - // TODO: parse flags and issue different scan requests? - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScan, - pcExtra, - essid_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 2 * KAL_HZ); - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - - - return 0; -} /* wext_set_scan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To write the ie to buffer -* -*/ -/*----------------------------------------------------------------------------*/ -static inline int snprintf_hex(char *buf, size_t buf_size, const u8 *data, - size_t len) -{ - size_t i; - char *pos = buf, *end = buf + buf_size; - int ret; - - if (buf_size == 0) - return 0; - - for (i = 0; i < len; i++) { - ret = snprintf(pos, end - pos, "%02x", - data[i]); - if (ret < 0 || ret >= end - pos) { - end[-1] = '\0'; - return pos - buf; - } - pos += ret; - } - end[-1] = '\0'; - return pos - buf; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get scan results, transform results from driver's format to WE's. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prData Pointer to iw_point structure, pData->length is the size of -* pcExtra buffer before used, and is updated after filling scan -* results. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 For success. -* \retval -ENOMEM If dynamic memory allocation fail. -* \retval -E2BIG Invalid length. -* -* \note Scan results is filled into pcExtra buffer, data size is updated in -* pData->length. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN OUT struct iw_point *prData, - IN char *pcExtra - ) -{ - UINT_32 i = 0; - UINT_32 j = 0; - P_PARAM_BSSID_LIST_EX_T prList = NULL; - P_PARAM_BSSID_EX_T prBss = NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - struct iw_event iwEvent; /* local iw_event buffer */ - - /* write pointer of extra buffer */ - char *pcCur = NULL; - /* pointer to the end of last full entry in extra buffer */ - char *pcValidEntryEnd = NULL; - char *pcEnd = NULL; /* end of extra buffer */ - - UINT_32 u4AllocBufLen = 0; - - /* arrange rate information */ - UINT_32 u4HighestRate = 0; - char aucRatesBuf[64]; - UINT_32 u4BufIndex; - - /* return value */ - int ret = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Initialize local variables */ - pcCur = pcExtra; - pcValidEntryEnd = pcExtra; - pcEnd = pcExtra + prData->length; /* end of extra buffer */ - - /* Allocate another query buffer with the same size of extra buffer */ - u4AllocBufLen = prData->length; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for scan list:%d\n", prData->length)); - ret = -ENOMEM; - goto error; - } - prList->u4NumberOfItems = 0; - - /* wait scan done */ - //printk ("wait for scan results\n"); - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 4 * KAL_HZ); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - /* Buffer length is not large enough. */ - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - -#if WIRELESS_EXT >= 17 - /* This feature is supported in WE-17 or above, limited by iwlist. - ** Return -E2BIG and iwlist will request again with a larger buffer. - */ - ret = -E2BIG; - /* Update length to give application a hint on result length */ - prData->length = (__u16)u4BufLen; - goto error; -#else - /* Realloc a larger query buffer here, but don't write too much to extra - ** buffer when filling it later. - */ - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - - u4AllocBufLen = u4BufLen; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for larger scan list :%ld\n", u4BufLen)); - ret = -ENOMEM; - goto error; - } - prList->NumberOfItems = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - DBGLOG(INIT, INFO, ("[wifi] larger buf:%d result:%ld\n", u4AllocBufLen, u4BufLen)); - ret = -E2BIG; - prData->length = (__u16)u4BufLen; - goto error; - } -#endif /* WIRELESS_EXT >= 17 */ - - } - - - if (prList->u4NumberOfItems > CFG_MAX_NUM_BSS_LIST) { - DBGLOG(INIT, INFO, ("[wifi] strange scan result count:%ld\n", - prList->u4NumberOfItems)); - goto error; - } - - /* Copy required data from pList to pcExtra */ - prBss = &prList->arBssid[0]; /* set to the first entry */ - for (i = 0; i < prList->u4NumberOfItems; ++i) { - /* BSSID */ - iwEvent.cmd = SIOCGIWAP; - iwEvent.len = IW_EV_ADDR_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwEvent.u.ap_addr.sa_data, prBss->arMacAddress, ETH_ALEN); - memcpy(pcCur, &iwEvent, IW_EV_ADDR_LEN); - pcCur += IW_EV_ADDR_LEN; - - /* SSID */ - iwEvent.cmd = SIOCGIWESSID; - /* Modification to user space pointer(essid.pointer) is not needed. */ - iwEvent.u.essid.length = (__u16)prBss->rSsid.u4SsidLen; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.essid.length; - - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.essid.flags = 1; - iwEvent.u.essid.pointer = NULL; - -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, iwEvent.len); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prBss->rSsid.aucSsid, iwEvent.u.essid.length); - pcCur += iwEvent.len; - /* Frequency */ - iwEvent.cmd = SIOCGIWFREQ; - iwEvent.len = IW_EV_FREQ_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.freq.m = prBss->rConfiguration.u4DSConfig; - iwEvent.u.freq.e = 3; /* (in KHz) */ - iwEvent.u.freq.i = 0; - memcpy(pcCur, &iwEvent, IW_EV_FREQ_LEN); - pcCur += IW_EV_FREQ_LEN; - - /* Operation Mode */ - iwEvent.cmd = SIOCGIWMODE; - iwEvent.len = IW_EV_UINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - if (prBss->eOpMode == NET_TYPE_IBSS) { - iwEvent.u.mode = IW_MODE_ADHOC; - } - else if (prBss->eOpMode == NET_TYPE_INFRA) { - iwEvent.u.mode = IW_MODE_INFRA; - } - else { - iwEvent.u.mode = IW_MODE_AUTO; - } - memcpy(pcCur, &iwEvent, IW_EV_UINT_LEN); - pcCur += IW_EV_UINT_LEN; - - /* Quality */ - iwEvent.cmd = IWEVQUAL; - iwEvent.len = IW_EV_QUAL_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.qual.qual = 0; /* Quality not available now */ - /* -100 < Rssi < -10, normalized by adding 0x100 */ - iwEvent.u.qual.level = 0x100 + prBss->rRssi; - iwEvent.u.qual.noise = 0; /* Noise not available now */ - iwEvent.u.qual.updated = IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_UPDATED \ - | IW_QUAL_NOISE_INVALID; - memcpy(pcCur, &iwEvent, IW_EV_QUAL_LEN); - pcCur += IW_EV_QUAL_LEN; - - /* Security Mode*/ - iwEvent.cmd = SIOCGIWENCODE; - iwEvent.len = IW_EV_POINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.pointer = NULL; - iwEvent.u.data.flags = 0; - iwEvent.u.data.length = 0; - if(!prBss->u4Privacy) { - iwEvent.u.data.flags |= IW_ENCODE_DISABLED; - } -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - pcCur += IW_EV_POINT_LEN; - - /* rearrange rate information */ - u4BufIndex = sprintf(aucRatesBuf, "Rates (Mb/s):"); - u4HighestRate = 0; - for (j = 0; j < PARAM_MAX_LEN_RATES_EX; ++j) { - UINT_8 curRate = prBss->rSupportedRates[j] & 0x7F; - if (curRate == 0) { - break; - } - - if (curRate > u4HighestRate) { - u4HighestRate = curRate; - } - - if (curRate == RATE_5_5M) { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " 5.5"); - } - else { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " %d", curRate / 2); - } - #if DBG - if (u4BufIndex > sizeof(aucRatesBuf)) { - //printk("rate info too long\n"); - break; - } - #endif - } - /* Report Highest Rates */ - iwEvent.cmd = SIOCGIWRATE; - iwEvent.len = IW_EV_PARAM_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.bitrate.value = u4HighestRate * 500000; - iwEvent.u.bitrate.fixed = 0; - iwEvent.u.bitrate.disabled = 0; - iwEvent.u.bitrate.flags = 0; - memcpy(pcCur, &iwEvent, iwEvent.len); - pcCur += iwEvent.len; - - #if WIRELESS_EXT >= 15 /* IWEVCUSTOM is available in WE-15 or above */ - /* Report Residual Rates */ - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = u4BufIndex; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 0; - #if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); - #else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - #endif - memcpy(pcCur + IW_EV_POINT_LEN, aucRatesBuf, u4BufIndex); - pcCur += iwEvent.len; - #endif /* WIRELESS_EXT >= 15 */ - - - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WPS /* search WPS IE (0xDD, 221, OUI: 0x0050f204 ) */ - if (wextSrchDesiredWPSIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } -#endif - - - /* Search RSN IE (0x30, 48). pBss->IEs starts from timestamp. */ - /* pBss->IEs starts from timestamp */ - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WAPI /* Android+ */ - if (wextSrchDesiredWAPIIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - (PUINT_8 *)&prDesiredIE)) { - -#if 0 - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; -#else - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = (2 + prDesiredIE->ucLength) * 2 + 8 /* wapi_ie= */; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 1; - - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - - pcCur += (IW_EV_POINT_LEN); - - pcCur += sprintf(pcCur, "wapi_ie="); - - snprintf_hex(pcCur, pcEnd - pcCur, (UINT_8 *)prDesiredIE, prDesiredIE->ucLength + 2); - - pcCur += (2 + prDesiredIE->ucLength) * 2 /* iwEvent.len */; -#endif - } -#endif - /* Complete an entry. Update end of valid entry */ - pcValidEntryEnd = pcCur; - /* Extract next bss */ - prBss = (P_PARAM_BSSID_EX_T)((char *)prBss + prBss->u4Length); - } - - /* Update valid data length for caller function and upper layer - * applications. - */ - prData->length = (pcValidEntryEnd - pcExtra); - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - -error: - /* free local query buffer */ - if (prList) { - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - } - - return ret; -} /* wext_get_scan */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set desired network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer of iw_point header. -* \param[in] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -E2BIG Essid string length is too big. -* \retval -EINVAL pcExtra is null pointer. -* \retval -EFAULT Driver fail to set new essid. -* -* \note If string lengh is ok, device will try connecting to the new network. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - IN char *pcExtra - ) -{ - PARAM_SSID_T rNewSsid; - UINT_32 cipher; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prEssid->length > IW_ESSID_MAX_SIZE) { - return -E2BIG; - } - - - /* set auth mode */ - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - //printk(KERN_INFO "IW_AUTH_WPA_VERSION_DISABLED->Param_AuthMode%s\n", - // (eAuthMode == AUTH_MODE_OPEN) ? "Open" : "Shared"); - } - else { - /* set auth mode */ - switch(prGlueInfo->rWpaInfo.u4KeyMgmt) { - case IW_AUTH_KEY_MGMT_802_1X: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA : AUTH_MODE_WPA2; - //printk("IW_AUTH_KEY_MGMT_802_1X->AUTH_MODE_WPA%s\n", - // (eAuthMode == AUTH_MODE_WPA) ? "" : "2"); - break; - case IW_AUTH_KEY_MGMT_PSK: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA_PSK: AUTH_MODE_WPA2_PSK; - //printk("IW_AUTH_KEY_MGMT_PSK->AUTH_MODE_WPA%sPSK\n", - // (eAuthMode == AUTH_MODE_WPA_PSK) ? "" : "2"); - break; -#if CFG_SUPPORT_WAPI /* Android+ */ - case IW_AUTH_KEY_MGMT_WAPI_PSK: - break; - case IW_AUTH_KEY_MGMT_WAPI_CERT: - break; -#endif - -//#if defined (IW_AUTH_KEY_MGMT_WPA_NONE) -// case IW_AUTH_KEY_MGMT_WPA_NONE: -// eAuthMode = AUTH_MODE_WPA_NONE; -// //printk("IW_AUTH_KEY_MGMT_WPA_NONE->AUTH_MODE_WPA_NONE\n"); -// break; -//#endif -#if CFG_SUPPORT_802_11W - case IW_AUTH_KEY_MGMT_802_1X_SHA256: - eAuthMode = AUTH_MODE_WPA2; - break; - case IW_AUTH_KEY_MGMT_PSK_SHA256: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; -#endif - default: - //printk(KERN_INFO DRV_NAME"strange IW_AUTH_KEY_MGMT : %ld set auto switch\n", - // prGlueInfo->rWpaInfo.u4KeyMgmt); - eAuthMode = AUTH_MODE_AUTO_SWITCH; - break; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - /* set encryption status */ - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | - prGlueInfo->rWpaInfo.u4CipherPairwise; - if (cipher & IW_AUTH_CIPHER_CCMP) { - //printk("IW_AUTH_CIPHER_CCMP->ENUM_ENCRYPTION3_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - //printk("IW_AUTH_CIPHER_TKIP->ENUM_ENCRYPTION2_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - //printk("IW_AUTH_CIPHER_WEPx->ENUM_ENCRYPTION1_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - //printk("IW_AUTH_CIPHER_NONE->ENUM_ENCRYPTION_DISABLED\n"); - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - //printk("unknown IW_AUTH_CIPHER->Param_EncryptionDisabled\n"); - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - -#if WIRELESS_EXT < 21 - /* GeorgeKuo: a length error bug exists in (WE < 21) cases, kernel before - ** 2.6.19. Cut the trailing '\0'. - */ - rNewSsid.u4SsidLen = (prEssid->length) ? prEssid->length - 1 : 0; -#else - rNewSsid.u4SsidLen = prEssid->length; -#endif - kalMemCopy(rNewSsid.aucSsid, pcExtra, rNewSsid.u4SsidLen); - - /* - rNewSsid.aucSsid[rNewSsid.u4SsidLen] = '\0'; - printk("set ssid(%lu): %s\n", rNewSsid.u4SsidLen, rNewSsid.aucSsid); - */ - - if (kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING "Fail to set ssid\n"); - return -EFAULT; - } - - - return 0; -} /* wext_set_essid */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer to iw_point structure containing essid information. -* \param[out] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, network essid is stored in pcExtra. -*/ -/*----------------------------------------------------------------------------*/ -//static PARAM_SSID_T ssid; -static int -wext_get_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - OUT char *pcExtra - ) -{ - //PARAM_SSID_T ssid; - - P_PARAM_SSID_T prSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - prSsid = kalMemAlloc(sizeof(PARAM_SSID_T), VIR_MEM_TYPE); - - if(!prSsid) { - return -ENOMEM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQuerySsid, - prSsid, - sizeof(PARAM_SSID_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if ((rStatus == WLAN_STATUS_SUCCESS) && (prSsid->u4SsidLen <= MAX_SSID_LEN)) { - kalMemCopy(pcExtra, prSsid->aucSsid, prSsid->u4SsidLen); - prEssid->length = prSsid->u4SsidLen; - prEssid->flags = 1; - } - - kalMemFree(prSsid, VIR_MEM_TYPE, sizeof(PARAM_SSID_T)); - - return 0; -} /* wext_get_essid */ - - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set tx desired bit rate. Three cases here -* iwconfig wlan0 auto -> Set to origianl supported rate set. -* iwconfig wlan0 18M -> Imply "fixed" case, set to 18Mbps as desired rate. -* iwconfig wlan0 18M auto -> Set to auto rate lower and equal to 18Mbps -* -* \param[in] prNetDev Pointer to the net_device handler. -* \param[in] prIwReqInfo Pointer to the Request Info. -* \param[in] prRate Pointer to the Rate Parameter. -* \param[in] pcExtra Pointer to the extra buffer. -* -* \retval 0 Update desired rate. -* \retval -EINVAL Wrong parameter -*/ -/*----------------------------------------------------------------------------*/ -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ) -{ - PARAM_RATES_EX aucSuppRate = {0}; - PARAM_RATES_EX aucNewRate = {0}; - UINT_32 u4NewRateLen = 0; - UINT_32 i; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("value = %d, fixed = %d, disable = %d, flags = %d\n", - prRate->value, prRate->fixed, prRate->disabled, prRate->flags); - */ - - rStatus = wlanQueryInformation( - prGlueInfo->prAdapter, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - - /* Case: AUTO */ - if (prRate->value < 0) { - if (prRate->fixed == 0) { - /* iwconfig wlan0 rate auto */ - - /* set full supported rate to device */ - /* printk("wlanoidQuerySupportedRates():u4BufLen = %ld\n", u4BufLen); */ - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - return 0; - } - else { - /* iwconfig wlan0 rate fixed */ - - /* fix rate to what? DO NOTHING */ - return -EINVAL; - } - } - - - aucNewRate[0] = prRate->value / 500000; /* In unit of 500k */ - - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; i++) { - /* check the given value is supported */ - if (aucSuppRate[i] == 0) { - break; - } - - if (aucNewRate[0] == aucSuppRate[i]) { - u4NewRateLen = 1; - break; - } - } - - if (u4NewRateLen == 0) { - /* the given value is not supported */ - /* return error or use given rate as upper bound? */ - return -EINVAL; - } - - if (prRate->fixed == 0) { - /* add all rates lower than desired rate */ - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; ++i) { - if (aucSuppRate[i] == 0) { - break; - } - - if (aucSuppRate[i] < aucNewRate[0]) { - aucNewRate[u4NewRateLen++] = aucSuppRate[i]; - } - } - } - - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucNewRate, - sizeof(aucNewRate), - &u4BufLen); - return 0; -} /* wext_set_rate */ - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current tx bit rate. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRate Pointer to iw_param structure to store current tx rate. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, current tx rate is stored in pRate. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRate, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - UINT_32 u4Rate = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prRate->value = u4Rate * 100; /* u4Rate is in unit of 100bps */ - prRate->fixed = 0; - - return 0; -} /* wext_get_rate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EINVAL Given value is out of range. -* -* \note If given value is valid, device will follow the new setting. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prRts->disabled == 1) { - u4RtsThresh = 2347; - } - else if (prRts->value < 0 || prRts->value > 2347) { - return -EINVAL; - } - else { - u4RtsThresh = (PARAM_RTS_THRESHOLD)prRts->value; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_set_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pRts. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347 || prRts->value < 0) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_get_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get fragmentation threshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFrag Pointer to iw_param structure containing frag threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pFrag. Fragmentation is disabled. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_frag ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prFrag, - IN char *pcExtra - ) -{ - ASSERT(prFrag); - - prFrag->value = 2346; - prFrag->fixed = 1; - prFrag->disabled = 1; - return 0; -} /* wext_get_frag */ - -#if 1 -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set TX power, or enable/disable the radio. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. iwconfig wlan0 txpow on/off are used -* to enable/disable the radio. -*/ -/*----------------------------------------------------------------------------*/ - -static int -wext_set_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - int ret = 0; - //PARAM_DEVICE_POWER_STATE ePowerState; - ENUM_ACPI_STATE_T ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if(prTxPow->disabled){ - /* <1> disconnect */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("######set disassoc failed\n")); - } else { - DBGLOG(INIT, INFO, ("######set assoc ok\n")); - } - - /* <2> mark to power state flag*/ - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d3(0)\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - - } - else { - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d0\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - } - - prGlueInfo->ePowerState = ePowerState; - - return ret; -} /* wext_set_txpow */ - - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get TX power. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - //PARAM_DEVICE_POWER_STATE ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: wlanoidQueryAcpiDevicePowerState() reports capability, not - * current state. Use GLUE_INFO_T to store state. - */ - //ePowerState = prGlueInfo->ePowerState; - - /* TxPow parameters: Fixed at relative 100% */ -#if WIRELESS_EXT < 17 - prTxPow->flags = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prTxPow->flags = IW_TXPOW_RELATIVE; -#endif - prTxPow->value = 100; - prTxPow->fixed = 1; - //prTxPow->disabled = (ePowerState != ParamDeviceStateD3) ? FALSE : TRUE; - prTxPow->disabled = TRUE; - - return 0; -} /* wext_get_txpow */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Buffer to store key content. -* -* \retval 0 Success. -* -* \note Securiry information is stored in pEnc except key content. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - //ENUM_ENCRYPTION_STATUS_T eEncMode; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR2(prNetDev, prEnc)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryEncryptionStatus, - &eEncMode, - sizeof(eEncMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch(eEncMode) { - case ENUM_WEP_DISABLED: - prEnc->flags = IW_ENCODE_DISABLED; - break; - case ENUM_WEP_ENABLED: - prEnc->flags = IW_ENCODE_ENABLED; - break; - case ENUM_WEP_KEY_ABSENT: - prEnc->flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - break; - default: - prEnc->flags = IW_ENCODE_ENABLED; - break; - } - - /* Cipher, Key Content, Key ID can't be queried */ - prEnc->flags |= IW_ENCODE_NOKEY; -#endif - return 0; -} /* wext_get_encode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 wepBuf[48]; - -static int -wext_set_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //UINT_8 wepBuf[48]; - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* reset to default mode */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - /* iwconfig wlan0 key off */ - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED ) { - eAuthMode = AUTH_MODE_OPEN; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - eEncStatus = ENUM_ENCRYPTION_DISABLED; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; - } - - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prEnc->length == 5 || prEnc->length == 13 || prEnc->length == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prEnc->length; - prWepKey->u4KeyLength = prEnc->length; - kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prEnc->length); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetAuthMode fail 0x%lx\n", rStatus); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus); - return -EFAULT; - } - - return 0; - } -#endif - return -EOPNOTSUPP; -} /* wext_set_encode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note New Power Management Mode is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prPower, - IN char *pcExtra - ) -{ -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - DBGLOG(INIT, INFO, ("%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value)); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - return 0; -} /* wext_set_power */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Power management mode is stored in pTxPow->value. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prPower, - IN char *pcExtra - ) -{ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - PARAM_POWER_MODE ePowerMode = Param_PowerModeCAM; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if 0 -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - //printk(KERN_INFO "wext_get_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - return 0; -} /* wext_get_power */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set authentication parameters. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] rpAuth Pointer to iw_param structure containing authentication information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_auth ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prAuth, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAuth)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: -#if CFG_SUPPORT_WAPI - if (wlanQueryWapiMode(prGlueInfo->prAdapter)){ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - } - else { - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; - } -#else - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; -#endif - break; - - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->rWpaInfo.u4CipherPairwise = prAuth->value; - break; - - case IW_AUTH_CIPHER_GROUP: - prGlueInfo->rWpaInfo.u4CipherGroup = prAuth->value; - break; - - case IW_AUTH_KEY_MGMT: - prGlueInfo->rWpaInfo.u4KeyMgmt = prAuth->value; -#if CFG_SUPPORT_WAPI - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_PSK || - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_CERT) { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - } -#endif - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WPS) - prGlueInfo->fgWpsActive = TRUE; - else - prGlueInfo->fgWpsActive = FALSE; - break; - - case IW_AUTH_80211_AUTH_ALG: - prGlueInfo->rWpaInfo.u4AuthAlg = prAuth->value; - break; - - case IW_AUTH_PRIVACY_INVOKED: - prGlueInfo->rWpaInfo.fgPrivacyInvoke = prAuth->value; - break; -#if CFG_SUPPORT_802_11W - case IW_AUTH_MFP: - //printk("wext_set_auth IW_AUTH_MFP=%d\n", prAuth->value); - prGlueInfo->rWpaInfo.u4Mfp = prAuth->value; - break; -#endif -#if CFG_SUPPORT_WAPI - case IW_AUTH_WAPI_ENABLED: - { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - break; -#endif - default: - /* - printk(KERN_INFO "[wifi] unsupported IW_AUTH_INDEX :%d\n", prAuth->flags); - */ - break; - } - return 0; -} /* wext_set_auth */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -#if CFG_SUPPORT_WAPI - UINT_8 keyStructBuf[320]; /* add/remove key shared buffer */ -#else - UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -static int -wext_set_encode_ext ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - - - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - struct iw_encode_ext *prIWEncExt = (struct iw_encode_ext *) pcExtra; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //ENUM_PARAM_OP_MODE_T eOpMode = NET_TYPE_AUTO_SWITCH; - -#if CFG_SUPPORT_WAPI - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; -#endif - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - -#if CFG_SUPPORT_WAPI - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - if (prEnc->flags & IW_ENCODE_DISABLED) { - //printk(KERN_INFO "[wapi] IW_ENCODE_DISABLED\n"); - return 0; - } - /* KeyID */ - prWpiKey->ucKeyID = (prEnc->flags & IW_ENCODE_INDEX); - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr.sa_data, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - } - - } - else -#endif - { - - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - /* - printk("IW_ENCODE_DISABLED: ID:%d, Addr:[" MACSTR "]\n", - prRemoveKey->KeyIndex, MAC2STR(prRemoveKey->BSSID)); - */ - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("remove key error:%lx\n", rStatus)); - } - return 0; - } - - //return 0; - //printk ("alg %x\n", prIWEncExt->alg); - - switch (prIWEncExt->alg) { - case IW_ENCODE_ALG_NONE: - break; - case IW_ENCODE_ALG_WEP: - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prIWEncExt->key_len == 5 || prIWEncExt->key_len == 13 || prIWEncExt->key_len == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prIWEncExt->key_len; - prWepKey->u4KeyLength = prIWEncExt->key_len; - //kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prIWEncExt->key_len); - kalMemCopy(prWepKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAuthMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - } else { - DBGLOG(INIT, INFO, ("key length %x\n", prIWEncExt->key_len)); - DBGLOG(INIT, INFO, ("key error\n")); - } - - break; - case IW_ENCODE_ALG_TKIP: - case IW_ENCODE_ALG_CCMP: -#if CFG_SUPPORT_802_11W - case IW_ENCODE_ALG_AES_CMAC: -#endif - { - - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1: 0; -#if CFG_SUPPORT_802_11W - if (prKey->u4KeyIndex > 5) -#else - if (prKey->u4KeyIndex > 3) -#endif - { - DBGLOG(INIT, INFO, ("key index error:0x%lx\n", prKey->u4KeyIndex)); - /* key id is out of range */ - return -EINVAL; - } - - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - } - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - /* switch tx/rx MIC key for sta */ - if (prIWEncExt->alg == IW_ENCODE_ALG_TKIP && prIWEncExt->key_len == 32) { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, 16); - memcpy(((PUINT_8)prKey->aucKeyMaterial) + 16, prIWEncExt->key + 24, 8); - memcpy((prKey->aucKeyMaterial) + 24, prIWEncExt->key + 16, 8); - } - else { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - } - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add key error:%lx\n", rStatus)); - return -EFAULT; - } - break; - } - } - - return 0; -} /* wext_set_encode_ext */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set country code -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_country ( - IN struct net_device *prNetDev, - IN struct iwreq *iwr - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - UINT_8 aucCountry[2]; - - ASSERT(prNetDev); - - /* iwr->u.data.pointer should be like "COUNTRY US", "COUNTRY EU" - * and "COUNTRY JP" - */ - if (FALSE == GLUE_CHK_PR2(prNetDev, iwr) || - !iwr->u.data.pointer || iwr->u.data.length < 10) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - aucCountry[0] = *((PUINT_8)iwr->u.data.pointer + 8); - aucCountry[1] = *((PUINT_8)iwr->u.data.pointer + 9); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCountryCode, - &aucCountry[0], - 2, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl() (Linux Wireless Extensions) routines -* -* \param[in] prDev Net device requested. -* \param[in] ifr The ifreq structure for seeting the wireless extension. -* \param[in] i4Cmd The wireless extension ioctl command. -* -* \retval zero On success. -* \retval -EOPNOTSUPP If the cmd is not supported. -* \retval -EFAULT If copy_to_user goes wrong. -* \retval -EINVAL If any value's out of range. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -wext_support_ioctl ( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *iwr = (struct iwreq*)prIfReq; - struct iw_request_info rIwReqInfo; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - printk("%d CMD:0x%x\n", jiffies_to_msecs(jiffies), i4Cmd); - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case SIOCGIWNAME: /* 0x8B01, get wireless protocol name */ - ret = wext_get_name(prDev, &rIwReqInfo, (char *)&iwr->u.name, NULL); - break; - - /* case SIOCSIWNWID: 0x8B02, deprecated */ - /* case SIOCGIWNWID: 0x8B03, deprecated */ - - case SIOCSIWFREQ: /* 0x8B04, set channel */ - ret = wext_set_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCGIWFREQ: /* 0x8B05, get channel */ - ret = wext_get_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCSIWMODE: /* 0x8B06, set operation mode */ - ret = wext_set_mode(prDev, NULL, &iwr->u.mode, NULL); - //ret = 0; - break; - - case SIOCGIWMODE: /* 0x8B07, get operation mode */ - ret = wext_get_mode(prDev, NULL, &iwr->u.mode, NULL); - break; - - /* case SIOCSIWSENS: 0x8B08, unsupported */ - /* case SIOCGIWSENS: 0x8B09, unsupported */ - - /* case SIOCSIWRANGE: 0x8B0A, unused */ - case SIOCGIWRANGE: /* 0x8B0B, get range of parameters */ - if (iwr->u.data.pointer != NULL) { - /* Buffer size shoule be large enough */ - if (iwr->u.data.length < sizeof(struct iw_range)) { - ret = -E2BIG; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_range), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* reset all fields */ - memset(prExtraBuf, 0, sizeof(struct iw_range)); - iwr->u.data.length = sizeof(struct iw_range); - - ret = wext_get_range(prDev, NULL, &iwr->u.data, prExtraBuf); - /* Push up to the caller */ - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_range)); - prExtraBuf = NULL; - } - else { - ret = -EINVAL; - } - break; - - case SIOCSIWPRIV: /* 0x8B0C, Country */ - ret = wext_set_country(prDev, iwr); - break; - - /* case SIOCGIWPRIV: 0x8B0D, handled in wlan_do_ioctl() */ - /* caes SIOCSIWSTATS: 0x8B0E, unused */ - /* case SIOCGIWSTATS: - get statistics, intercepted by wireless_process_ioctl() in wireless.c, - redirected to dev_iwstats(), dev->get_wireless_stats(). - */ - /* case SIOCSIWSPY: 0x8B10, unsupported */ - /* case SIOCGIWSPY: 0x8B11, unsupported*/ - /* case SIOCSIWTHRSPY: 0x8B12, unsupported */ - /* case SIOCGIWTHRSPY: 0x8B13, unsupported*/ - - case SIOCSIWAP: /* 0x8B14, set access point MAC addresses (BSSID) */ - if (iwr->u.ap_addr.sa_data[0] == 0 && - iwr->u.ap_addr.sa_data[1] == 0 && - iwr->u.ap_addr.sa_data[2] == 0 && - iwr->u.ap_addr.sa_data[3] == 0 && - iwr->u.ap_addr.sa_data[4] == 0 && - iwr->u.ap_addr.sa_data[5] == 0) { - /* WPA Supplicant will set 000000000000 in - ** wpa_driver_wext_deinit(), do nothing here or disassoc again? - */ - ret = 0; - break; - } - else { - ret = wext_set_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - } - break; - - case SIOCGIWAP: /* 0x8B15, get access point MAC addresses (BSSID) */ - ret = wext_get_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - break; - - case SIOCSIWMLME: /* 0x8B16, request MLME operation */ - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_mlme)) { - DBGLOG(INIT, INFO, ("MLME buffer strange:%d\n", iwr->u.data.length)); - ret = -EINVAL; - break; - } - - if (!iwr->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, iwr->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = wext_set_mlme(prDev, NULL, &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - /* case SIOCGIWAPLIST: 0x8B17, deprecated */ - case SIOCSIWSCAN: /* 0x8B18, scan request */ - if (iwr->u.data.pointer == NULL) { - ret = wext_set_scan(prDev, NULL, NULL, NULL); - } -#if WIRELESS_EXT > 17 - else if (iwr->u.data.length == sizeof(struct iw_scan_req)) { - prExtraBuf = kalMemAlloc(MAX_SSID_LEN, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, ((struct iw_scan_req *) (iwr->u.data.pointer))->essid, - ((struct iw_scan_req *) (iwr->u.data.pointer))->essid_len)) { - ret = -EFAULT; - } else { - ret = wext_set_scan(prDev, NULL, (union iwreq_data *) &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, MAX_SSID_LEN); - prExtraBuf = NULL; - } -#endif - else { - ret = -EINVAL; - } - break; -#if 1 - case SIOCGIWSCAN: /* 0x8B19, get scan results */ - if (!iwr->u.data.pointer|| !iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - u4ExtraSize = iwr->u.data.length; - /* allocate the same size of kernel buffer to store scan results. */ - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* iwr->u.data.length may be updated by wext_get_scan() */ - ret = wext_get_scan(prDev, NULL, &iwr->u.data, prExtraBuf); - if (ret != 0) { - if (ret == -E2BIG) { - DBGLOG(INIT, INFO, ("[wifi] wext_get_scan -E2BIG\n")); - } - } - else { - /* check updated length is valid */ - ASSERT(iwr->u.data.length <= u4ExtraSize); - if (iwr->u.data.length > u4ExtraSize) { - DBGLOG(INIT, INFO, ("Updated result length is larger than allocated (%d > %ld)\n", - iwr->u.data.length, u4ExtraSize)); - iwr->u.data.length = u4ExtraSize; - } - - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - - break; - -#endif - -#if 1 - case SIOCSIWESSID: /* 0x8B1A, set SSID (network name) */ - if (iwr->u.essid.length > IW_ESSID_MAX_SIZE) { - ret = -E2BIG; - break; - } - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE + 4, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.essid.pointer, - iwr->u.essid.length)) { - ret = -EFAULT; - } - else { - /* Add trailing '\0' for printk */ - //prExtraBuf[iwr->u.essid.length] = 0; - //printk(KERN_INFO "wext_set_essid: %s (%d)\n", prExtraBuf, iwr->u.essid.length); - ret = wext_set_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - //printk ("set essid %d\n", ret); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE + 4); - prExtraBuf = NULL; - break; - -#endif - - case SIOCGIWESSID: /* 0x8B1B, get SSID */ - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - if (iwr->u.essid.length < IW_ESSID_MAX_SIZE) { - DBGLOG(INIT, INFO, ("[wifi] iwr->u.essid.length:%d too small\n", - iwr->u.essid.length)); - ret = -E2BIG; /* let caller try larger buffer */ - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - /* iwr->u.essid.length is updated by wext_get_essid() */ - - ret = wext_get_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - if (ret == 0) { - if (copy_to_user(iwr->u.essid.pointer, prExtraBuf, iwr->u.essid.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE); - prExtraBuf = NULL; - - break; - - /* case SIOCSIWNICKN: 0x8B1C, not supported */ - /* case SIOCGIWNICKN: 0x8B1D, not supported */ - - case SIOCSIWRATE: /* 0x8B20, set default bit rate (bps) */ - //ret = wext_set_rate(prDev, &rIwReqInfo, &iwr->u.bitrate, NULL); - break; - - case SIOCGIWRATE: /* 0x8B21, get current bit rate (bps) */ - ret = wext_get_rate(prDev, NULL, &iwr->u.bitrate, NULL); - break; - - case SIOCSIWRTS: /* 0x8B22, set rts/cts threshold */ - ret = wext_set_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - case SIOCGIWRTS: /* 0x8B23, get rts/cts threshold */ - ret = wext_get_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - /* case SIOCSIWFRAG: 0x8B24, unsupported */ - case SIOCGIWFRAG: /* 0x8B25, get frag threshold */ - ret = wext_get_frag(prDev, NULL, &iwr->u.frag, NULL); - break; - - case SIOCSIWTXPOW: /* 0x8B26, set relative tx power (in %) */ - ret = wext_set_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - case SIOCGIWTXPOW: /* 0x8B27, get relative tx power (in %) */ - ret = wext_get_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - /* case SIOCSIWRETRY: 0x8B28, unsupported */ - /* case SIOCGIWRETRY: 0x8B29, unsupported */ - -#if 1 - case SIOCSIWENCODE: /* 0x8B2A, set encoding token & mode */ - /* Only DISABLED case has NULL pointer and length == 0 */ - if (iwr->u.encoding.pointer) { - if (iwr->u.encoding.length > 16) { - ret = -E2BIG; - break; - } - - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - case SIOCGIWENCODE: /* 0x8B2B, get encoding token & mode */ - /* check pointer */ - ret = wext_get_encode(prDev, NULL, &iwr->u.encoding, NULL); - break; - - case SIOCSIWPOWER: /* 0x8B2C, set power management */ - ret = wext_set_power(prDev, NULL, &iwr->u.power, NULL); - break; - - case SIOCGIWPOWER: /* 0x8B2D, get power management */ - ret = wext_get_power(prDev, NULL, &iwr->u.power, NULL); - break; - -#if WIRELESS_EXT > 17 - case SIOCSIWGENIE: /* 0x8B30, set gen ie */ - if (iwr->u.data.pointer) { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (1 /* wlanQueryWapiMode(prGlueInfo->prAdapter) */) { - /* Fixed length structure */ -#if CFG_SUPPORT_WAPI - if (iwr->u.data.length > 42 /* The max wapi ie buffer */) { - ret = -EINVAL; - break; - } -#endif - u4ExtraSize = iwr->u.data.length; - if (u4ExtraSize) { - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - iwr->u.data.length)) { - ret = -EFAULT; - } - else { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - prExtraBuf, - u4ExtraSize, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] set wapi assoc info error:%lx\n", rStatus); -#endif -#if CFG_SUPPORT_WPS2 - PUINT_8 prDesiredIE = NULL; - if (wextSrchDesiredWPSIE(prExtraBuf, - u4ExtraSize, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[WSC] set WSC assoc info error:%lx\n", rStatus); - } - } -#endif -#if CFG_SUPPORT_WAPI - } -#endif - } - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - } - break; - - case SIOCGIWGENIE: /* 0x8B31, get gen ie, unused */ - break; - -#endif - - case SIOCSIWAUTH: /* 0x8B32, set auth mode params */ - ret = wext_set_auth(prDev, NULL, &iwr->u.param, NULL); - break; - - /* case SIOCGIWAUTH: 0x8B33, unused? */ - case SIOCSIWENCODEEXT: /* 0x8B34, set extended encoding token & mode */ - if (iwr->u.encoding.pointer) { - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode_ext(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - /* case SIOCGIWENCODEEXT: 0x8B35, unused? */ - - case SIOCSIWPMKSA: /* 0x8B36, pmksa cache operation */ - #if 1 - if (iwr->u.data.pointer) { - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_pmksa)) { - ret = -EINVAL; - break; - } - - u4ExtraSize = sizeof(struct iw_pmksa); - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - sizeof(struct iw_pmksa))) { - ret = -EFAULT; - } - else { - switch(((struct iw_pmksa *)prExtraBuf)->cmd) { - case IW_PMKSA_ADD: - /* - printk(KERN_INFO "IW_PMKSA_ADD [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)pExtraBuf)->bssid.sa_data)); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, - ((struct iw_pmksa *)prExtraBuf)->bssid.sa_data, - 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, - ((struct iw_pmksa *)prExtraBuf)->pmkid, - IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - } - break; - case IW_PMKSA_REMOVE: - /* - printk(KERN_INFO "IW_PMKSA_REMOVE [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)buf)->bssid.sa_data)); - */ - break; - case IW_PMKSA_FLUSH: - /* - printk(KERN_INFO "IW_PMKSA_FLUSH\n"); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - } - break; - default: - DBGLOG(INIT, INFO, ("UNKNOWN iw_pmksa command:%d\n", - ((struct iw_pmksa *)prExtraBuf)->cmd)); - ret = -EFAULT; - break; - } - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - else if (iwr->u.data.length != 0) { - ret = -EINVAL; - break; - } - #endif - break; - -#endif - - default: - /* printk(KERN_NOTICE "unsupported IOCTL: 0x%x\n", i4Cmd); */ - ret = -EOPNOTSUPP; - break; - } - - //printk("%ld CMD:0x%x ret:%d\n", jiffies_to_msecs(jiffies), i4Cmd, ret); - - return ret; -} /* wext_support_ioctl */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To send an event (RAW socket pacekt) to user process actively. -* -* \param[in] prGlueInfo Glue layer info. -* \param[in] u4cmd Whcih event command we want to indicate to user process. -* \param[in] pData Data buffer to be indicated. -* \param[in] dataLen Available data size in pData. -* -* \return (none) -* -* \note Event is indicated to upper layer if cmd is supported and data is valid. -* Using of kernel symbol wireless_send_event(), which is defined in -* after WE-14 (2.4.20). -*/ -/*----------------------------------------------------------------------------*/ -void -wext_indicate_wext_event ( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4dataLen - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; -#if WIRELESS_EXT >= 15 - unsigned char *pucDesiredIE = NULL; - unsigned char aucExtraInfoBuf[200]; -#endif -#if WIRELESS_EXT < 18 - int i; -#endif - - memset(&wrqu, 0, sizeof(wrqu)); - - switch (u4Cmd) { - case SIOCGIWTXPOW: - memcpy(&wrqu.power, pucData, u4dataLen); - break; - case SIOCGIWSCAN: - complete_all(&prGlueInfo->rScanComp); - break; - - case SIOCGIWAP: - if (pucData) { - memcpy(&wrqu.ap_addr.sa_data, pucData, ETH_ALEN); - } - else { - memset(&wrqu.ap_addr.sa_data, 0, ETH_ALEN); - } - break; - - case IWEVASSOCREQIE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0x30, &pucDesiredIE)) { - /* RSN IE found */ - } -#if 0 - else if (wextSrchDesiredWPSIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPS IE found */ - } -#endif - else if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPA IE found */ - } -#if CFG_SUPPORT_WAPI /* Android+ */ - else if (wextSrchDesiredWAPIIE(pucData, u4dataLen, &pucDesiredIE)) { - //printk("wextSrchDesiredWAPIIE!!\n"); - /* WAPI IE found */ - } -#endif - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - #if WIRELESS_EXT < 18 - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, "ASSOCINFO(ReqIEs="); - /* printk(KERN_DEBUG "assoc info buffer size needed:%d\n", infoElemLen * 2 + 17); */ - /* translate binary string to hex string, requirement of IWEVCUSTOM */ - for (i = 0; i < pucDesiredIE[1] + 2 ; ++i) { - pucExtraInfo += sprintf(pucExtraInfo, "%02x", pucDesiredIE[i]); - } - pucExtraInfo = aucExtraInfoBuf; - wrqu.data.length = 17 + (pucDesiredIE[1] + 2) * 2; - #else - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - #endif -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVMICHAELMICFAILURE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - if (pucData) { - P_PARAM_AUTH_REQUEST_T pAuthReq = (P_PARAM_AUTH_REQUEST_T)pucData; - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, - "MLME-MICHAELMICFAILURE.indication "); - pucExtraInfo += sprintf(pucExtraInfo, - "%s", - (pAuthReq->u4Flags == PARAM_AUTH_REQUEST_GROUP_ERROR) ? - "groupcast " : "unicast "); - - wrqu.data.length = pucExtraInfo - aucExtraInfoBuf; - pucExtraInfo = aucExtraInfoBuf; - } -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVPMKIDCAND: - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2 && - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_802_1X) { - - /* only used in WPA2 */ -#if WIRELESS_EXT >= 18 - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)pucData; - - struct iw_pmkid_cand rPmkidCand; - pucExtraInfo = aucExtraInfoBuf; - - rPmkidCand.flags = prPmkidCand->u4Flags; - rPmkidCand.index = 0; - kalMemCopy(rPmkidCand.bssid.sa_data, prPmkidCand->arBSSID, 6); - - kalMemCopy(pucExtraInfo, (PUINT_8)&rPmkidCand, sizeof(struct iw_pmkid_cand)); - wrqu.data.length = sizeof(struct iw_pmkid_cand); - - /* pmkid canadidate list is supported after WE-18 */ - /* indicate struct iw_pmkid_cand */ -#else - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, WE < 18\n"); */ - goto skip_indicate_event; -#endif - } - else { - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, NOT WPA2\n"); */ - goto skip_indicate_event; - } - break; - - case IWEVCUSTOM: - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - kalMemCopy(pucExtraInfo, pucData, sizeof(PTA_IPC_T)); - wrqu.data.length = sizeof(PTA_IPC_T); - break; - - default: - /* printk(KERN_INFO "Unsupported wext event:%x\n", cmd); */ - goto skip_indicate_event; - } - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prDevHandler, u4Cmd, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; -} /* wext_indicate_wext_event */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] pDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -* -*/ -/*----------------------------------------------------------------------------*/ -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - FALSE, - &bufLen); - -stat_out: - return pStats; -} /* wlan_get_wireless_stats */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To report the private supported IOCTLs table to user space. -* -* \param[in] prNetDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 For success. -* \retval -E2BIG For user's buffer size is too small. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_point *prData= (struct iw_point *)&prIwReq->u.data; - UINT_16 u2BufferSize = 0; - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rIwPrivTable, sizeof(rIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* wext_get_priv */ - -#endif /* WIRELESS_EXT */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_wext_priv.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_wext_priv.c deleted file mode 100755 index aafe5696310a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/gl_wext_priv.c +++ /dev/null @@ -1,2238 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/gl_wext_priv.c#4 $ -*/ - -/*! \file gl_wext_priv.c - \brief This file includes private ioctl support. -*/ - - - -/* -** $Log: gl_wext_priv.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 20 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function[WCXRP00001202] [MT6628 Wi-Fi][FW] Adding the New PN init code - * use return to avoid the ioctl return not supported - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Fixed typo. - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 24 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * correct typo for NVRAM access. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable OID_CUSTOM_MTK_WIFI_TEST for RFTest & META tool - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support -** \main\maintrunk.MT5921\32 2009-10-08 10:33:25 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\31 2009-09-29 16:46:21 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\30 2009-09-29 14:46:47 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\29 2009-09-29 14:28:48 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\28 2009-09-28 22:21:38 GMT mtk01090 -** Refine lines to supress compile warning -** \main\maintrunk.MT5921\27 2009-09-28 20:19:14 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\26 2009-08-18 22:56:53 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\25 2009-05-07 22:26:15 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\24 2009-04-29 10:07:05 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\23 2009-04-24 09:09:45 GMT mtk01088 -** mark the code not used at linux supplicant v0.6.7 -** \main\maintrunk.MT5921\22 2008-11-24 21:03:51 GMT mtk01425 -** 1. Add PTA_ENABLED flag -** \main\maintrunk.MT5921\21 2008-08-29 14:55:59 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\20 2008-07-16 15:23:20 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\19 2008-07-15 17:43:11 GMT mtk01084 -** modify variable name -** \main\maintrunk.MT5921\18 2008-07-14 14:37:58 GMT mtk01104 -** Add exception handle about length in function priv_set_struct() -** \main\maintrunk.MT5921\17 2008-07-14 13:55:32 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\16 2008-07-09 00:20:15 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\15 2008-06-02 11:15:22 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\14 2008-05-30 19:31:07 GMT mtk01461 -** Add IOCTL for Power Mode -** \main\maintrunk.MT5921\13 2008-05-30 18:57:15 GMT mtk01461 -** Not use wlanoidSetCSUMOffloadForLinux() -** \main\maintrunk.MT5921\12 2008-05-30 15:13:18 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\11 2008-05-29 14:16:31 GMT mtk01084 -** rename for wlanoidSetBeaconIntervalForLinux -** \main\maintrunk.MT5921\10 2008-04-17 23:06:37 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\9 2008-03-31 21:00:55 GMT mtk01461 -** Add priv IOCTL for VOIP setting -** \main\maintrunk.MT5921\8 2008-03-31 13:49:43 GMT mtk01461 -** Add priv ioctl to turn on / off roaming -** \main\maintrunk.MT5921\7 2008-03-26 15:35:14 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\6 2008-03-11 14:50:59 GMT mtk01461 -** Unify priv ioctl -** \main\maintrunk.MT5921\5 2007-11-06 19:32:30 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\4 2007-10-30 12:01:39 GMT MTK01425 -** 1. Update wlanQueryInformation and wlanSetInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext_priv.h" -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NUM_SUPPORTED_OIDS (sizeof(arWlanOidReqTable) / sizeof(WLAN_REQ_ENTRY)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -#if 0 /* CFG_SUPPORT_WPS */ -static int -priv_set_appie ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); - -static int -priv_set_filter ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); -#endif /* CFG_SUPPORT_WPS */ - -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ); - -#if 0 -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_8 aucOidBuf[4096] = {0}; - -/* OID processing table */ -/* Order is important here because the OIDs should be in order of - increasing value for binary searching. */ -static WLAN_REQ_ENTRY arWlanOidReqTable[] = { - /* - {(NDIS_OID)rOid, - (PUINT_8)pucOidName, - fgQryBufLenChecking, fgSetBufLenChecking, fgIsHandleInGlueLayerOnly, u4InfoBufLen, - pfOidQueryHandler, - pfOidSetHandler} - */ - /* General Operational Characteristics */ - - /* Ethernet Operational Characteristics */ - {OID_802_3_CURRENT_ADDRESS, - DISP_STRING("OID_802_3_CURRENT_ADDRESS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 6, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentAddr, - NULL}, - - /* OID_802_3_MULTICAST_LIST */ - /* OID_802_3_MAXIMUM_LIST_SIZE */ - /* Ethernet Statistics */ - - /* NDIS 802.11 Wireless LAN OIDs */ - {OID_802_11_SUPPORTED_RATES, - DISP_STRING("OID_802_11_SUPPORTED_RATES"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_RATES_EX), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySupportedRates, - NULL}, - /* - {OID_802_11_CONFIGURATION, - DISP_STRING("OID_802_11_CONFIGURATION"), - TRUE, TRUE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_802_11_CONFIG_T), - (PFN_OID_HANDLER_FUNC_REQ)reqExtQueryConfiguration, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetConfiguration}, - */ - {OID_PNP_SET_POWER, - DISP_STRING("OID_PNP_SET_POWER"), - TRUE, FALSE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_DEVICE_POWER_STATE), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetAcpiDevicePowerState}, - - /* Custom OIDs */ - {OID_CUSTOM_OID_INTERFACE_VERSION, - DISP_STRING("OID_CUSTOM_OID_INTERFACE_VERSION"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryOidInterfaceVersion, - NULL}, - - /* -#if PTA_ENABLED - {OID_CUSTOM_BT_COEXIST_CTRL, - DISP_STRING("OID_CUSTOM_BT_COEXIST_CTRL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_BT_COEXIST_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtCoexistCtrl}, -#endif - */ - - /* - {OID_CUSTOM_POWER_MANAGEMENT_PROFILE, - DISP_STRING("OID_CUSTOM_POWER_MANAGEMENT_PROFILE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPwrMgmtProfParam, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPwrMgmtProfParam}, - {OID_CUSTOM_PATTERN_CONFIG, - DISP_STRING("OID_CUSTOM_PATTERN_CONFIG"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_PATTERN_SEARCH_CONFIG_STRUC_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPatternConfig}, - {OID_CUSTOM_BG_SSID_SEARCH_CONFIG, - DISP_STRING("OID_CUSTOM_BG_SSID_SEARCH_CONFIG"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBgSsidParam}, - {OID_CUSTOM_VOIP_SETUP, - DISP_STRING("OID_CUSTOM_VOIP_SETUP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryVoipConnectionStatus, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetVoipConnectionStatus}, - {OID_CUSTOM_ADD_TS, - DISP_STRING("OID_CUSTOM_ADD_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidAddTS}, - {OID_CUSTOM_DEL_TS, - DISP_STRING("OID_CUSTOM_DEL_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidDelTS}, - */ - - /* -#if CFG_LP_PATTERN_SEARCH_SLT - {OID_CUSTOM_SLT, - DISP_STRING("OID_CUSTOM_SLT"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySltResult, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSltMode}, -#endif - - {OID_CUSTOM_ROAMING_EN, - DISP_STRING("OID_CUSTOM_ROAMING_EN"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRoamingFunction, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetRoamingFunction}, - {OID_CUSTOM_WMM_PS_TEST, - DISP_STRING("OID_CUSTOM_WMM_PS_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWiFiWmmPsTest}, - {OID_CUSTOM_COUNTRY_STRING, - DISP_STRING("OID_CUSTOM_COUNTRY_STRING"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentCountry, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetCurrentCountry}, - -#if CFG_SUPPORT_802_11D - {OID_CUSTOM_MULTI_DOMAIN_CAPABILITY, - DISP_STRING("OID_CUSTOM_MULTI_DOMAIN_CAPABILITY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMultiDomainCap, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMultiDomainCap}, -#endif - - {OID_CUSTOM_GPIO2_MODE, - DISP_STRING("OID_CUSTOM_GPIO2_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_PARAM_GPIO2_MODE_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetGPIO2Mode}, - {OID_CUSTOM_CONTINUOUS_POLL, - DISP_STRING("OID_CUSTOM_CONTINUOUS_POLL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CONTINUOUS_POLL_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryContinuousPollInterval, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetContinuousPollProfile}, - {OID_CUSTOM_DISABLE_BEACON_DETECTION, - DISP_STRING("OID_CUSTOM_DISABLE_BEACON_DETECTION"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryDisableBeaconDetectionFunc, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisableBeaconDetectionFunc}, - */ - - /* WPS */ - /* - {OID_CUSTOM_DISABLE_PRIVACY_CHECK, - DISP_STRING("OID_CUSTOM_DISABLE_PRIVACY_CHECK"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisablePriavcyCheck}, - */ - - {OID_CUSTOM_MCR_RW, - DISP_STRING("OID_CUSTOM_MCR_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMcrRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMcrWrite}, - - {OID_CUSTOM_EEPROM_RW, - DISP_STRING("OID_CUSTOM_EEPROM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetEepromWrite}, - - {OID_CUSTOM_SW_CTRL, - DISP_STRING("OID_CUSTOM_SW_CTRL"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySwCtrlRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSwCtrlWrite}, - - {OID_CUSTOM_MEM_DUMP, - DISP_STRING("OID_CUSTOM_MEM_DUMP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MEM_DUMP_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMemDump, - NULL}, - - {OID_CUSTOM_TEST_MODE, - DISP_STRING("OID_CUSTOM_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetTestMode}, - - /* - {OID_CUSTOM_TEST_RX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_RX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestRxStatus, - NULL}, - {OID_CUSTOM_TEST_TX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_TX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestTxStatus, - NULL}, - */ - {OID_CUSTOM_ABORT_TEST_MODE, - DISP_STRING("OID_CUSTOM_ABORT_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAbortTestMode}, - {OID_CUSTOM_MTK_WIFI_TEST, - DISP_STRING("OID_CUSTOM_MTK_WIFI_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_MTK_WIFI_TEST_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestQueryAutoTest, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAutoTest}, - - /* OID_CUSTOM_EMULATION_VERSION_CONTROL */ - - /* BWCS */ -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {OID_CUSTOM_BWCS_CMD, - DISP_STRING("OID_CUSTOM_BWCS_CMD"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PTA_IPC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBT, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBT}, -#endif - -/* {OID_CUSTOM_SINGLE_ANTENNA, - DISP_STRING("OID_CUSTOM_SINGLE_ANTENNA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBtSingleAntenna, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtSingleAntenna}, - {OID_CUSTOM_SET_PTA, - DISP_STRING("OID_CUSTOM_SET_PTA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPta, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPta}, - */ - - { OID_CUSTOM_MTK_NVRAM_RW, - DISP_STRING("OID_CUSTOM_MTK_NVRAM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryNvramRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetNvramWrite }, - - { OID_CUSTOM_CFG_SRC_TYPE, - DISP_STRING("OID_CUSTOM_CFG_SRC_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_CFG_SRC_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCfgSrcType, - NULL }, - - { OID_CUSTOM_EEPROM_TYPE, - DISP_STRING("OID_CUSTOM_EEPROM_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_EEPROM_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromType, - NULL }, - -#if CFG_SUPPORT_WAPI - {OID_802_11_WAPI_MODE, - DISP_STRING("OID_802_11_WAPI_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiMode}, - {OID_802_11_WAPI_ASSOC_INFO, - DISP_STRING("OID_802_11_WAPI_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiAssocInfo}, - {OID_802_11_SET_WAPI_KEY, - DISP_STRING("OID_802_11_SET_WAPI_KEY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_WPI_KEY_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiKey}, -#endif - -#if CFG_SUPPORT_WPS2 - {OID_802_11_WSC_ASSOC_INFO, - DISP_STRING("OID_802_11_WSC_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWSCAssocInfo}, -#endif -}; - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatching function for private ioctl region (SIOCIWFIRSTPRIV ~ -* SIOCIWLASTPRIV). -* -* \param[in] prNetDev Net device requested. -* \param[in] prIfReq Pointer to ifreq structure. -* \param[in] i4Cmd Command ID between SIOCIWFIRSTPRIV and SIOCIWLASTPRIV. -* -* \retval 0 for success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_support_ioctl ( - IN struct net_device *prNetDev, - IN OUT struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_request_info rIwReqInfo; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case IOCTL_SET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_set_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_GET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_get_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_SET_STRUCT: - case IOCTL_SET_STRUCT_FOR_EM: - return priv_set_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - case IOCTL_GET_STRUCT: - return priv_get_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - default: - return -EOPNOTSUPP; - - } /* end of switch */ - -}/* priv_support_ioctl */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_PTA_IPC_T prPtaIpc; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_MODE: - //printk("TestMode=%ld\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY) { - prNdisReq->ndisOidCmd = OID_CUSTOM_TEST_MODE; - } - else if (pu4IntBuf[1] == 0) { - prNdisReq->ndisOidCmd = OID_CUSTOM_ABORT_TEST_MODE; - } - else { - status = 0; - break; - } - prNdisReq->inNdisOidlength = 0; - prNdisReq->outNdisOidLength = 0; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY && - pu4IntBuf[2] == PRIV_CMD_TEST_MAGIC_KEY) { - prGlueInfo->fgMcrAccessAllowed = TRUE; - } - status = 0; - break; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; -#endif - - case PRIV_CMD_SW_CTRL: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - case PRIV_CMD_CSUM_OFFLOAD: - { - UINT_32 u4CSUMFlags; - - - if (pu4IntBuf[1] == 1) { - u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - } - else if (pu4IntBuf[1] == 0) { - u4CSUMFlags = 0; - } - else { - return -EINVAL; - } - - if (kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen - ) == WLAN_STATUS_SUCCESS) { - if (pu4IntBuf[1] == 1) { - prNetDev->features |= NETIF_F_HW_CSUM; - } else if (pu4IntBuf[1] == 0) { - prNetDev->features &= ~NETIF_F_HW_CSUM; - } - } - } - break; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - case PRIV_CMD_POWER_MODE: - kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - break; - - case PRIV_CMD_WMM_PS: - { - PARAM_CUSTOM_WMM_PS_TEST_STRUC_T rWmmPsTest; - - rWmmPsTest.bmfgApsdEnAc = (UINT_8)pu4IntBuf[1]; - rWmmPsTest.ucIsEnterPsAtOnce = (UINT_8)pu4IntBuf[2]; - rWmmPsTest.ucIsDisableUcTrigger = (UINT_8)pu4IntBuf[3]; - rWmmPsTest.reserved = 0; - - kalIoctl(prGlueInfo, - wlanoidSetWiFiWmmPsTest, - (PVOID)&rWmmPsTest, - sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - break; - - #if 0 - case PRIV_CMD_ADHOC_MODE: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAdHocMode, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - - case PRIV_CUSTOM_BWCS_CMD: - - DBGLOG(REQ, INFO, ("pu4IntBuf[1] = %x, size of PTA_IPC_T = %d.\n", pu4IntBuf[1], sizeof(PARAM_PTA_IPC_T))); - - prPtaIpc = (P_PTA_IPC_T) aucOidBuf; - prPtaIpc->u.aucBTPParams[0] = (UINT_8) (pu4IntBuf[1] >> 24); - prPtaIpc->u.aucBTPParams[1] = (UINT_8) (pu4IntBuf[1] >> 16); - prPtaIpc->u.aucBTPParams[2] = (UINT_8) (pu4IntBuf[1] >> 8); - prPtaIpc->u.aucBTPParams[3] = (UINT_8) (pu4IntBuf[1]); - - DBGLOG(REQ, INFO, ("BCM BWCS CMD : PRIV_CUSTOM_BWCS_CMD : aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3])); - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - sizeof(PARAM_PTA_IPC_T), - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - - case PRIV_CMD_BAND_CONFIG: - { - DBGLOG(INIT, INFO, ("CMD set_band=%u\n", pu4IntBuf[1])); - } - break; - -#if CFG_ENABLE_WIFI_DIRECT - case PRIV_CMD_P2P_MODE: - { - PARAM_CUSTOM_P2P_SET_STRUC_T rSetP2P; - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - - rSetP2P.u4Enable = pu4IntBuf[1]; - rSetP2P.u4Mode = pu4IntBuf[2]; - - if(!rSetP2P.u4Enable) { - p2pNetUnregister(prGlueInfo, TRUE); - } - - rWlanStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pMode, - (PVOID)&rSetP2P, /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if(rSetP2P.u4Enable) { - p2pNetRegister(prGlueInfo, TRUE); - } - - - } - break; -#endif - - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - /* - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], 4)) { - printk(KERN_NOTICE "priv_get_int() copy_to_user oidBuf fail(3)\n"); - return -EFAULT; - } - */ - } - return status; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; -#endif - - case PRIV_CMD_DUMP_MEM: - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - -#if 1 - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } -#endif - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MEM_DUMP; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[0]; - } - return status; - - case PRIV_CMD_SW_CTRL: - //printk(" addr=0x%08lx\n", pu4IntBuf[1]); - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_POWER_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_ADHOC_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAdHocMode, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - #endif - - case PRIV_CMD_BAND_CONFIG: - DBGLOG(INIT, INFO, ("CMD get_band=\n")); - prIwReqData->mode = 0; - return status; - - default: - break; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i, j = 0; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - if (kalIsAPmode(prGlueInfo)) { - for (i = 0; i < NumOfChannel; i++) { - if ((aucChannelList[i].ucChannelNum <= 13) || - (aucChannelList[i].ucChannelNum == 36 || aucChannelList[i].ucChannelNum == 40 || - aucChannelList[i].ucChannelNum == 44 || aucChannelList[i].ucChannelNum == 48)) { - ch[j] = (INT_32)aucChannelList[i].ucChannelNum; - j++; - } - } - } - else { - for (j = 0; j < NumOfChannel; j++) { - ch[j] = (INT_32)aucChannelList[j].ucChannelNum; - } - } - - prIwReqData->data.length = j; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } - default: - return -EOPNOTSUPP; - } - - return status; -} /* priv_get_int */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int array handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd, u4BufLen; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_SET_TX_POWER: - { - INT_32 *setting = prIwReqData->data.pointer; - UINT_16 i; - -#if 0 - printk("Tx power num = %d\n", prIwReqData->data.length); - - printk("Tx power setting = %d %d %d %d\n", - setting[0], setting[1], setting[2], setting[3]); -#endif - prTxpwr = &prGlueInfo->rTxPwr; - if (setting[0] == 0 && prIwReqData->data.length == 4 /* argc num */) { - /* 0 (All networks), 1 (legacy STA), 2 (Hotspot AP), 3 (P2P), 4 (BT over Wi-Fi) */ - if (setting[1] == 1 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GLegacyStaPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GLegacyStaPwrOffset = setting[3]; - } - if (setting[1] == 2 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GHotspotPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GHotspotPwrOffset = setting[3]; - } - if (setting[1] == 3 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GP2pPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GP2pPwrOffset = setting[3]; - } - if (setting[1] == 4 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GBowPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GBowPwrOffset = setting[3]; - } - } - else if (setting[0] == 1 && prIwReqData->data.length == 2) { - prTxpwr->ucConcurrencePolicy = setting[1]; - } - else if (setting[0] == 2 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<14; i++) - prTxpwr->acTxPwrLimit2G[i] = setting[2]; - } - else if (setting[1] <= 14) - prTxpwr->acTxPwrLimit2G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 3 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<4; i++) - prTxpwr->acTxPwrLimit5G[i] = setting[2]; - } - else if (setting[1] <= 4) - prTxpwr->acTxPwrLimit5G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 4 && prIwReqData->data.length == 2) { - if (setting[1] == 0) { - wlanDefTxPowerCfg(prGlueInfo->prAdapter); - } - rStatus = kalIoctl(prGlueInfo, - wlanoidSetTxPower, - prTxpwr, - sizeof(SET_TXPWR_CTRL_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - } - else - return -EFAULT; - } - return status; - default: - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int array handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - for (i = 0; i < NumOfChannel; i++) { - ch[i] = (INT_32)aucChannelList[i].ucChannelNum; - } - - prIwReqData->data.length = NumOfChannel; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } - default: - break; - } - - return status; -} /* priv_get_int */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set structure handler. -* -* \param[in] pDev Net device requested. -* \param[in] prIwReqData Pointer to iwreq_data structure. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - int status = 0; - //WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4CmdLen = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - PUINT_32 pu4IntBuf = NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - //ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - //ASSERT(pcExtra); - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwReqData)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - - switch (u4SubCmd) { -#if 0 //PTA_ENABLED - case PRIV_CMD_BT_COEXIST: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_CUSTOM_BT_COEXIST_T) >= u4CmdLen); - if (sizeof(PARAM_CUSTOM_BT_COEXIST_T) < u4CmdLen) { - return -EFAULT; - } - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } - - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBtCoexistCtrl, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); - if (WLAN_STATUS_SUCCESS != rStatus) { - status = -EFAULT; - } - break; -#endif - - case PRIV_CUSTOM_BWCS_CMD: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_PTA_IPC_T) >= u4CmdLen); - if (sizeof(PARAM_PTA_IPC_T) < u4CmdLen) { - return -EFAULT; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("ucCmdLen = %d, size of PTA_IPC_T = %d, prIwReqData->data = 0x%x.\n", u4CmdLen, sizeof(PARAM_PTA_IPC_T), prIwReqData->data)); - - DBGLOG(REQ, INFO, ("priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - )); - - DBGLOG(REQ, INFO, ("*pcExtra = 0x%x\n", *pcExtra)); - #endif - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("priv_set_struct(): BWCS CMD = %02x%02x%02x%02x\n", - aucOidBuf[2], aucOidBuf[3], aucOidBuf[4], aucOidBuf[5])); -#endif - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - -#if 1 - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - -#if CFG_SUPPORT_WPS2 - case PRIV_CMD_WSC_PROBE_REQ: - { - /* retrieve IE for Probe Request */ - if (prIwReqData->data.length > 0) { - if (copy_from_user(prGlueInfo->aucWSCIE, prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prGlueInfo->u2WSCIELen = prIwReqData->data.length; - } - else { - prGlueInfo->u2WSCIELen = 0; - } - } - break; -#endif - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - if (!kalMemCmp(&aucOidBuf[0], pcExtra, prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("pcExtra buffer is valid\n")); - } - else - DBGLOG(REQ, INFO, ("pcExtra 0x%p\n", pcExtra)); - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0], &u4BufLen); - /* Copy result to user space */ - ((P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0])->outNdisOidLength = u4BufLen; - - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("copy_to_user oidBuf fail\n")); - status = -EFAULT; - } - - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - //kalMemCopy(&prNdisReq->ndisOidContent[0], prIwReqData->data.pointer, 8); - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - default: - return -EOPNOTSUPP; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get struct handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] cmd Private sub-command. -* -* \retval 0 For success. -* \retval -EFAULT If copy from user space buffer fail. -* \retval -EOPNOTSUPP Parameter "cmd" not recognized. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq= NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - PUINT_32 pu4IntBuf = NULL; - int status = 0; - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - ASSERT(prNetDev); - ASSERT(prIwReqData); - if (!prNetDev || !prIwReqData) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid param(0x%p, 0x%p)\n", - prNetDev, prIwReqData)); - return -EINVAL; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - memset(aucOidBuf, 0, sizeof(aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - sizeof(NDIS_TRANSPORT_STRUCT))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0]; -#if 0 - printk(KERN_NOTICE "\n priv_get_struct cmd 0x%02x len:%d OID:0x%08x OID Len:%d\n", - cmd, - pIwReq->u.data.length, - ndisReq->ndisOidCmd, - ndisReq->inNdisOidlength); -#endif - if (priv_get_ndis(prNetDev, prNdisReq, &u4BufLen) == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - u4BufLen + sizeof(NDIS_TRANSPORT_STRUCT) - sizeof(prNdisReq->ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(1)\n")); - return -EFAULT; - } - return 0; - } - else { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - return -EFAULT; - } - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - //printk("len=%d Result=%08lx\n", u4BufLen, *(PUINT_32)&prNdisReq->ndisOidContent[4]); - - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], - 4 /* OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent)*/)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - } - return 0; - break; - default: - DBGLOG(REQ, WARN, ("get struct cmd:0x%lx\n", u4SubCmd)); - return -EOPNOTSUPP; - } -} /* priv_get_struct */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a set operation for a single OID. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4SetInfoLen = 0; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Set OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - if (NULL == prWlanReqEntry->pfOidSetHandler) { - //WARNLOG(("Set %s: Null set handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgSetBufLenChecking) { - if (prNdisReq->inNdisOidlength != prWlanReqEntry->u4InfoBufLen) { - DBGLOG(REQ, WARN, ("Set %s: Invalid length (current=%ld, needed=%ld)\n", - prWlanReqEntry->pucOidName, - prNdisReq->inNdisOidlength, - prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - return -EINVAL; - } - } - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidSetHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4SetInfoLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4SetInfoLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EFAULT; - } - - return 0; -} /* priv_set_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a query operation for a single OID. Basically we -* return information about the current state of the OID in question. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL invalid input parameters -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - UINT_32 u4BufLen = 0; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Query OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - - if (NULL == prWlanReqEntry->pfOidQueryHandler) { - //WARNLOG(("Query %s: Null query handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgQryBufLenChecking) { - if (prNdisReq->inNdisOidlength < prWlanReqEntry->u4InfoBufLen) { - /* Not enough room in InformationBuffer. Punt */ - //WARNLOG(("Query %s: Buffer too short (current=%ld, needed=%ld)\n", - //prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - - status = WLAN_STATUS_INVALID_LENGTH; - return -EINVAL; - } - } - - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidQueryHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4BufLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4BufLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EOPNOTSUPP; - } - - return 0; -} /* priv_get_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search desired OID. -* -* \param rOid[in] Desired NDIS_OID -* \param ppWlanReqEntry[out] Found registered OID entry -* -* \retval TRUE: Matched OID is found -* \retval FALSE: No matched OID is found -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ) -{ - INT_32 i, j, k; - - i = 0; - j = NUM_SUPPORTED_OIDS - 1; - - while (i <= j) { - k = (i + j) / 2; - - if (rOid == arWlanOidReqTable[k].rOid) { - *ppWlanReqEntry = &arWlanOidReqTable[k]; - return TRUE; - } else if (rOid < arWlanOidReqTable[k].rOid) { - j = k - 1; - } else { - i = k + 1; - } - } - - return FALSE; -} /* reqSearchSupportedOidEntry */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the radio configuration used in IBSS -* mode and RF test mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[out] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_802_11_CONFIG_T prQueryConfig = (P_PARAM_802_11_CONFIG_T)pvQueryBuffer; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen = 0; - - DEBUGFUNC("wlanoidQueryConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_CONFIG_T); - if (u4QueryBufferLen < sizeof(PARAM_802_11_CONFIG_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - kalMemZero(prQueryConfig, sizeof(PARAM_802_11_CONFIG_T)); - - /* Update the current radio configuration. */ - prQueryConfig->u4Length = sizeof(PARAM_802_11_CONFIG_T); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - prQueryConfig->rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - return rStatus; - -} /* end of reqExtQueryConfiguration() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the radio configuration used in IBSS -* mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_PARAM_802_11_CONFIG_T prNewConfig = (P_PARAM_802_11_CONFIG_T)pvSetBuffer; - UINT_32 u4SetInfoLen = 0; - - DEBUGFUNC("wlanoidSetConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_802_11_CONFIG_T); - - if (u4SetBufferLen < *pu4SetInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* OID_802_11_CONFIGURATION. If associated, NOT_ACCEPTED shall be returned. */ - if (prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - ASSERT(pvSetBuffer); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - return rStatus; - -} /* end of reqExtSetConfiguration() */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set beacon detection function enable/disable state -* This is mainly designed for usage under BT inquiry state (disable function). -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prGlueInfo); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - /* WIFI is enabled, when ACPI is D0 (ParamDeviceStateD0 = 1). And vice versa */ - - //rStatus = wlanSetInformation(prGlueInfo->prAdapter, - // wlanoidSetAcpiDevicePowerState, - // pvSetBuffer, - // u4SetBufferLen, - // pu4SetInfoLen); - return rStatus; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/arm.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/arm.c deleted file mode 100755 index 4322fa303a71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/arm.c +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** -*[File] mt6516-evb.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* dummy file for build system -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: mt6516-evb.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/hif.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/hif.h deleted file mode 100755 index 23eac4684d56..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/hif.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif.h#1 $ -*/ - -/*! \file "hif.h" - \brief Functions for the driver to register bus and setup the IRQ - - Functions for the driver to register bus and setup the IRQ -*/ - - - -/* -** $Log: hif.h $ - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 17 2010 cp.wu - * NULL - * add ENE SDIO host workaround for x86 linux platform. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\4 2009-10-20 17:38:28 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\3 2009-09-28 20:19:20 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\2 2009-08-18 22:57:05 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\2 2008-09-22 23:18:17 GMT mtk01461 -** Update driver for code review -** Revision 1.1 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -*/ - -#ifndef _HIF_H -#define _HIF_H - - -#if MTK_WCN_HIF_SDIO -#include "hif_sdio.h" -#endif - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define SDIO_X86_WORKAROUND_WRITE_MCR 0x00C4 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* host interface's private data structure, which is attached to os glue -** layer info structure. - */ -typedef struct _GL_HIF_INFO_T { -#if MTK_WCN_HIF_SDIO - MTK_WCN_HIF_SDIO_CLTCTX cltCtx; - const MTK_WCN_HIF_SDIO_FUNCINFO *prFuncInfo; -#else - struct sdio_func *func; -#endif - BOOLEAN fgIntReadClear; - BOOLEAN fgMbxReadClear; -} GL_HIF_INFO_T, *P_GL_HIF_INFO_T; - - -#if CFG_DBG_GPIO_PINS - -extern void -mtk_wcn_stp_debug_gpio_assert(UINT_32 dwIndex, UINT_32 dwMethod); - - -/* Platform DEPENDENT configurations: MT6516 GPIO pin name */ -#define GPIO_6516(x) (GPIO##x) -#define GPIO_PLATFORM(x) GPIO_6516(x) - -/* Platform independent configurations */ -#define DBG_TIE_DIR 0x40000000UL -#define DBG_LOW 0x0UL -#define DBG_HIGH 0x1UL -#define DBG_TIE_LOW (DBG_TIE_DIR | DBG_LOW) -#define DBG_TIE_HIGH (DBG_TIE_DIR | DBG_HIGH) - -#define DBG_TOGGLE(x) (0x80000000UL | x) -#define DBG_TOGGLE_NUM(x) (x & 0xFFF) -#define GPIO_INVALID 0xFFFF - -typedef enum { - IDX_ERR = 0, - IDX_TX_THREAD, - IDX_TX_REQ, - IDX_TX_PORT_WRITE, - IDX_STP_MTX_BT, - IDX_STP_MTX_FM, /* 5 */ - IDX_STP_MTX_GPS, - IDX_STP_MTX_WIFI, - IDX_STP_MTX_WMT, - IDX_LOOP_CNT, - IDX_NO_BUF, /*10 */ - IDX_BT_TX, - IDX_BT_RX, - IDX_GPS_RX, - IDX_GPS_2, - IDX_GPS_3, - IDX_GPS_TX, - IDX_STP_MAX -} DBG_PIN; - -#define DBG_MTX_OFFSET (IDX_STP_MTX_BT) /* index of mutex0 */ -#endif -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -glRegisterBus( - probe_card pfProbe, - remove_card pfRemove - ); - -VOID -glUnregisterBus( - remove_card pfRemove - ); - -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ); - -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ); - -BOOL -glBusInit ( - PVOID pvData - ); - -VOID -glBusRelease ( - PVOID pData - ); - -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ); - -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ); - -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _HIF_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/hif_sdio.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/hif_sdio.h deleted file mode 100755 index 0ee1060276e3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/hif_sdio.h +++ /dev/null @@ -1,286 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif_sdio.h#2 $ -*/ - -/*! \file "hif_sdio.h" - \brief - - -*/ - -/* -** $Log: $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 02 2012 terry.wu - * NULL - * Fix build error if HAVE_AEE_FEATURE = n - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 07 25 2010 george.kuo - * - * Move hif_sdio driver to linux directory. - * - * 07 23 2010 george.kuo - * - * Add MT6620 driver source tree - * , including char device driver (wmt, bt, gps), stp driver, interface driver (tty ldisc and hif_sdio), and bt hci driver. -** -** -*/ - -#ifndef _HIF_SDIO_H -#define _HIF_SDIO_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#define HIF_SDIO_DEBUG (0) /* 0:trun off debug msg and assert, 1:trun off debug msg and assert */ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "mtk_porting.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CFG_CLIENT_COUNT (9) - -#define HIF_DEFAULT_BLK_SIZE (256) -#define HIF_DEFAULT_VENDOR (0x037A) - -#define HIF_SDIO_LOG_LOUD 4 -#define HIF_SDIO_LOG_DBG 3 -#define HIF_SDIO_LOG_INFO 2 -#define HIF_SDIO_LOG_WARN 1 -#define HIF_SDIO_LOG_ERR 0 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Function info provided by client driver */ -typedef struct _MTK_WCN_HIF_SDIO_FUNCINFO MTK_WCN_HIF_SDIO_FUNCINFO; - -/* Client context provided by hif_sdio driver for the following function call */ -typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX; - -/* Callback functions provided by client driver */ -typedef INT32 (*MTK_WCN_HIF_SDIO_PROBE)(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *); -typedef INT32 (*MTK_WCN_HIF_SDIO_REMOVE)(MTK_WCN_HIF_SDIO_CLTCTX); -typedef INT32 (*MTK_WCN_HIF_SDIO_IRQ)(MTK_WCN_HIF_SDIO_CLTCTX); - -/* Function info provided by client driver */ -struct _MTK_WCN_HIF_SDIO_FUNCINFO { - UINT16 manf_id; /* TPLMID_MANF: manufacturer ID */ - UINT16 card_id; /* TPLMID_CARD: card ID */ - UINT16 func_num; /* Function Number */ - UINT16 blk_sz; /* Function block size */ -}; - -/* Client info provided by client driver */ -typedef struct _MTK_WCN_HIF_SDIO_CLTINFO { - const MTK_WCN_HIF_SDIO_FUNCINFO *func_tbl; /* supported function info table */ - UINT32 func_tbl_size; /* supported function table info element number */ - MTK_WCN_HIF_SDIO_PROBE hif_clt_probe; /* callback function for probing */ - MTK_WCN_HIF_SDIO_REMOVE hif_clt_remove; /* callback function for removing */ - MTK_WCN_HIF_SDIO_IRQ hif_clt_irq; /* callback function for interrupt handling */ -} MTK_WCN_HIF_SDIO_CLTINFO; - -/* function info provided by registed function */ -typedef struct _MTK_WCN_HIF_SDIO_REGISTINFO { - const MTK_WCN_HIF_SDIO_CLTINFO *sdio_cltinfo; /* client's MTK_WCN_HIF_SDIO_CLTINFO pointer */ - const MTK_WCN_HIF_SDIO_FUNCINFO *func_info; /* supported function info pointer */ -} MTK_WCN_HIF_SDIO_REGISTINFO; - -/* Card info provided by probed function */ -typedef struct _MTK_WCN_HIF_SDIO_PROBEINFO { - struct sdio_func* func; /* probed sdio function pointer */ - void* private_data_p; /* clt's private data pointer */ - MTK_WCN_BOOL on_by_wmt; /* TRUE: on by wmt, FALSE: not on by wmt */ - /* added for sdio irq sync and mmc single_irq workaround */ - MTK_WCN_BOOL sdio_irq_enabled; /* TRUE: can handle sdio irq; FALSE: no sdio irq handling */ - INT8 clt_idx; /* registered function table info element number (initial value is -1) */ -} MTK_WCN_HIF_SDIO_PROBEINFO; - -/* work queue info needed by worker */ -typedef struct _MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO { - struct work_struct probe_work; /* work queue structure */ - MTK_WCN_HIF_SDIO_REGISTINFO *registinfo_p; /* MTK_WCN_HIF_SDIO_REGISTINFO pointer of the client */ - INT8 probe_idx; /* probed function table info element number (initial value is -1) */ -} MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO; - -/* error code returned by hif_sdio driver (use NEGATIVE number) */ -typedef enum { - HIF_SDIO_ERR_SUCCESS = 0, - HIF_SDIO_ERR_FAIL = HIF_SDIO_ERR_SUCCESS - 1, /* generic error */ - HIF_SDIO_ERR_INVALID_PARAM = HIF_SDIO_ERR_FAIL - 1, - HIF_SDIO_ERR_DUPLICATED = HIF_SDIO_ERR_INVALID_PARAM - 1, - HIF_SDIO_ERR_UNSUP_MANF_ID = HIF_SDIO_ERR_DUPLICATED - 1, - HIF_SDIO_ERR_UNSUP_CARD_ID = HIF_SDIO_ERR_UNSUP_MANF_ID - 1, - HIF_SDIO_ERR_INVALID_FUNC_NUM = HIF_SDIO_ERR_UNSUP_CARD_ID - 1, - HIF_SDIO_ERR_INVALID_BLK_SZ = HIF_SDIO_ERR_INVALID_FUNC_NUM - 1, - HIF_SDIO_ERR_NOT_PROBED = HIF_SDIO_ERR_INVALID_BLK_SZ - 1, - HIF_SDIO_ERR_ALRDY_ON = HIF_SDIO_ERR_NOT_PROBED -1, - HIF_SDIO_ERR_ALRDY_OFF = HIF_SDIO_ERR_ALRDY_ON -1, - HIF_SDIO_ERR_CLT_NOT_REG = HIF_SDIO_ERR_ALRDY_OFF - 1, -} MTK_WCN_HIF_SDIO_ERR ; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/*! - * \brief A macro used to describe an SDIO function - * - * Fill an MTK_WCN_HIF_SDIO_FUNCINFO structure with function-specific information - * - * \param manf the 16 bit manufacturer id - * \param card the 16 bit card id - * \param func the 16 bit function number - * \param b_sz the 16 bit function block size - */ -#define MTK_WCN_HIF_SDIO_FUNC(manf, card, func, b_sz) \ - .manf_id = (manf), .card_id = (card), .func_num = (func), .blk_sz = (b_sz) - -#define HIF_SDIO_LOUD_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_LOUD) { printk(KERN_INFO SDIO_TAG"[L]%s:" fmt, __FUNCTION__ ,##arg);} -#define HIF_SDIO_DBG_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_DBG) { printk(KERN_INFO SDIO_TAG"[D]%s:" fmt, __FUNCTION__ ,##arg);} -#define HIF_SDIO_INFO_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_INFO) { printk(KERN_INFO SDIO_TAG"[I]%s:" fmt, __FUNCTION__ ,##arg);} -#define HIF_SDIO_WARN_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_WARN) { printk(KERN_WARNING SDIO_TAG"[W]%s(%d):" fmt, __FUNCTION__ , __LINE__, ##arg);} -#define HIF_SDIO_ERR_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_ERR) { printk(KERN_WARNING SDIO_TAG"[E]%s(%d):" fmt, __FUNCTION__ , __LINE__, ##arg);} - -/*! - * \brief ASSERT function definition. - * - */ -#if HIF_SDIO_DEBUG -#define HIF_SDIO_ASSERT(expr) if ( !(expr) ) { \ - printk("assertion failed! %s[%d]: %s\n",\ - __FUNCTION__, __LINE__, #expr); \ - BUG_ON( !(expr) );\ - } -#else -#define HIF_SDIO_ASSERT(expr) do {} while(0) -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*! - * \brief MTK hif sdio client registration function - * - * Client uses this function to do hif sdio registration - * - * \param pinfo a pointer of client's information - * - * \retval 0 register successfully - * \retval < 0 error code - */ -extern INT32 mtk_wcn_hif_sdio_client_reg ( - const MTK_WCN_HIF_SDIO_CLTINFO *pinfo - ); - -extern INT32 mtk_wcn_hif_sdio_client_unreg ( - const MTK_WCN_HIF_SDIO_CLTINFO *pinfo - ); - -extern INT32 mtk_wcn_hif_sdio_readb ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT8 pvb - ); - -extern INT32 mtk_wcn_hif_sdio_writeb ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - UINT8 vb - ); - -extern INT32 mtk_wcn_hif_sdio_readl ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pvl - ); - -extern INT32 mtk_wcn_hif_sdio_writel ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - UINT32 vl - ); - -extern INT32 mtk_wcn_hif_sdio_read_buf ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pbuf, - UINT32 len - ); - -extern INT32 mtk_wcn_hif_sdio_write_buf ( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - UINT32 offset, - PUINT32 pbuf, - UINT32 len - ); - -extern void mtk_wcn_hif_sdio_set_drvdata( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - void* private_data_p - ); - -extern void* mtk_wcn_hif_sdio_get_drvdata( - MTK_WCN_HIF_SDIO_CLTCTX ctx - ); - -extern void mtk_wcn_hif_sdio_get_dev( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - struct device **dev - ); - -extern void mtk_wcn_hif_sdio_enable_irq( - MTK_WCN_HIF_SDIO_CLTCTX ctx, - MTK_WCN_BOOL enable - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _HIF_SDIO_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/mtk_porting.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/mtk_porting.h deleted file mode 100755 index 37f96be599e0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/include/mtk_porting.h +++ /dev/null @@ -1,52 +0,0 @@ -/* porting layer */ -/* Android */ - -#ifndef _MTK_PORTING_H_ -#define _MTK_PORTING_H_ - -#include /* include stddef.h for NULL */ - -/* Type definition for signed integers */ -typedef signed char INT8, *PINT8; -typedef signed short INT16, *PINT16; -typedef signed int INT32, *PINT32; - -/* Type definition for unsigned integers */ -typedef unsigned char UINT8, *PUINT8; -typedef unsigned short UINT16, *PUINT16; -typedef unsigned int UINT32, *PUINT32; - -//typedef void VOID, *PVOID; - -typedef int MTK_WCN_BOOL; -#ifndef MTK_WCN_BOOL_TRUE -#define MTK_WCN_BOOL_FALSE ((MTK_WCN_BOOL) 0) -#define MTK_WCN_BOOL_TRUE ((MTK_WCN_BOOL) 1) -#endif - -typedef int MTK_WCN_MUTEX; - -typedef int MTK_WCN_TIMER; - -/* system APIs */ -/* mutex */ -typedef MTK_WCN_MUTEX (*MUTEX_CREATE)(const char * const name); -typedef INT32 (*MUTEX_DESTROY)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_LOCK)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_UNLOCK)(MTK_WCN_MUTEX mtx, unsigned long flags); -/* debug */ -typedef INT32 (*DBG_PRINT)(const char *str, ...); -typedef INT32 (*DBG_ASSERT)(INT32 expr, const char *file, INT32 line); -/* timer */ -typedef void (*MTK_WCN_TIMER_CB)(void); -typedef MTK_WCN_TIMER (*TIMER_CREATE)(const char * const name); -typedef INT32 (*TIMER_DESTROY)(MTK_WCN_TIMER tmr); -typedef INT32 (*TIMER_START)(MTK_WCN_TIMER tmr, UINT32 timeout, MTK_WCN_TIMER_CB tmr_cb, void *param); -typedef INT32 (*TIMER_STOP)(MTK_WCN_TIMER tmr); -/* kernel lib */ -typedef void* (*SYS_MEMCPY)(void *dest, const void *src, UINT32 n); -typedef void* (*SYS_MEMSET)(void *s, INT32 c, UINT32 n); -typedef INT32 (*SYS_SPRINTF)(char *str, const char *format, ...); - -#endif /* _MTK_PORTING_H_ */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/sdio.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/sdio.c deleted file mode 100755 index ebfedf3c4a47..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/sdio.c +++ /dev/null @@ -1,1353 +0,0 @@ -/****************************************************************************** -*[File] sdio.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* The program provides SDIO HIF driver -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: sdio.c $ - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 02 14 2012 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * include correct header file upon setting. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 17 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628 related definitions for Linux/Android driver. - * - * 05 18 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add device ID for MT5931. - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 15 2010 jeffrey.chang - * [WCXRP00000181] [MT6620 Wi-Fi][Driver] fix the driver message "GLUE_FLAG_HALT skip INT" during unloading - * Fix GLUE_FALG_HALT message which cause driver to hang - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * correct typo - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 18 2010 cp.wu - * NULL - * #if defined(__X86__) is not working, change to use #ifdef CONFIG_X86. - * - * 08 17 2010 cp.wu - * NULL - * add ENE SDIO host workaround for x86 linux platform. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Fix hotplug bug - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * clear sdio interrupt - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#if MTK_WCN_HIF_SDIO -#include "hif_sdio.h" -#else -#include -#include -#include -#include /* sdio_readl(), etc */ -#include -#endif - -#include -//#ifndef CONFIG_X86 modify by Nicolas Luo -#ifdef CONFIG_ARM -#include -#endif - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#if CFG_DBG_GPIO_PINS/* FIXME: move to platform or custom header */ -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define HIF_SDIO_ERR_TITLE_STR "["CHIP_NAME"] SDIO Access Error!" -#define HIF_SDIO_ERR_DESC_STR "**SDIO Access Error**\n" - -#if MTK_WCN_HIF_SDIO - - -/* - * function prototypes - * - */ - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *); - -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX); -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX); - -/* - * sdio function info table - */ - -static MTK_WCN_HIF_SDIO_FUNCINFO funcInfo[] = { -#if defined(MT6620) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020c, 0x2, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018c, 0x2, 512) }, -#elif defined(MT5931) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x5931, 0x1, 512) }, -#elif defined(MT6628) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x6628, 0x1, 512) }, -#endif -}; - - -static MTK_WCN_HIF_SDIO_CLTINFO cltInfo = { - .func_tbl = funcInfo, - .func_tbl_size = sizeof(funcInfo)/sizeof(MTK_WCN_HIF_SDIO_FUNCINFO), - .hif_clt_probe = mtk_sdio_probe, - .hif_clt_remove = mtk_sdio_remove, - .hif_clt_irq = mtk_sdio_interrupt, -}; - -#else - -static const struct sdio_device_id mtk_sdio_ids[] = { -#if defined(MT6620) - { SDIO_DEVICE(0x037a, 0x020a) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020b) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020c) }, /* Not an SDIO standard class device */ -#elif defined(MT5931) - { SDIO_DEVICE(0x037a, 0x5931) }, /* Not an SDIO standard class device */ -#elif defined(MT6628) - { SDIO_DEVICE(0x037a, 0x6628) }, /* Not an SDIO standard class device */ -#endif - { /* end: all zeroes */ }, -}; - -MODULE_DEVICE_TABLE(sdio, mtk_sdio_ids); - -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern KAL_WAKE_LOCK_T isr_wakelock; -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static probe_card pfWlanProbe = NULL; -static remove_card pfWlanRemove = NULL; - - -#if (MTK_WCN_HIF_SDIO == 0) -static struct sdio_driver mtk_sdio_driver = { - .name = "wlan", /* "MTK SDIO WLAN Driver" */ - .id_table = mtk_sdio_ids, - .probe = NULL, - .remove = NULL, -}; -#endif - - -#if CFG_DBG_GPIO_PINS - -/* debug pins */ -UINT_32 dbgPinSTP[] = { - GPIO_PLATFORM(33)/* CMFLASH, IDX_ERR J613 */ - , GPIO_PLATFORM(62)/* EINT3, IDX_TX_THREAD */ - , GPIO_PLATFORM(80)/* SPI_CS_N, IDX_TX_REQ J613 */ - , GPIO_PLATFORM(81)/* SPI_SCK, IDX_TX_PORT_WRITE J613 */ - , GPIO_PLATFORM(17) /* CMRST, IDX_STP_MTX_BT J618 */ - , GPIO_PLATFORM(18) /* CMPDN, IDX_STP_MTX_FM J613 */ - , GPIO_PLATFORM(19) /* CMVREF,IDX_STP_MTX_GPS J613 */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WIFI */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WMT */ - , GPIO_PLATFORM(135) /* SCL2, IDX_LOOP_CNT J616 */ - , GPIO_PLATFORM(136) /* SDA2, IDX_NO_BUF J616 */ - , GPIO_PLATFORM(30) /* CAM_MECHSH0, IDX_BT_TX, J613 low-active */ - , GPIO_PLATFORM(31) /* CAM_MECHSH1, IDX_BT_RX, J613 low-active */ - , GPIO_PLATFORM(124) /* GPS_PWR_EN, ThreadDSPIn [GPS] */ - , GPIO_PLATFORM(125) /* GPS_SYNC, mtk_sys_msg_recv [GPS] */ - , GPIO_PLATFORM(21) /* GPS_EINT8, dump_nmea_data [GPS] */ - , GPIO_PLATFORM(29) /* CAM_STROBE, IDX_GPS_TX, J613 low-active */ - , GPIO_PLATFORM(20) /*CMHREF, J613 UNUSED */ -// , GPIO_6516(64) /* EINT5, REMOVED!!! for MT6620-Wi-Fi Int */ -// , GPIO_6516(122) /* BT_PWR_EN, REMOVED!!! for MT6620-PMU_EN */ -// , GPIO_6516(123) /* BT_RESET, REMOVED!!! for MT6620-RST */ -}; -#endif -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_DBG_GPIO_PINS -void debug_gpio_init(void) -{ - int i; - - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_pull_enable(dbgPinSTP[i], 0); /* disable pull */ - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_OUT); /* set output */ - mt_set_gpio_mode(dbgPinSTP[i], GPIO_MODE_00); /* set gpio mode */ - - /* toggle twice to check if ok: */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - } - //printk(KERN_INFO "[%s] initialization ok \n", __FUNCTION__); -} - -void debug_gpio_deinit(void) -{ - int i; - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_IN); - } - - //printk(KERN_INFO "[%s] k\n", __FUNCTION__); -} - -void mtk_wcn_stp_debug_gpio_assert(UINT_32 dwIndex, UINT_32 dwMethod) -{ - unsigned int i; - - if (dwIndex >= (sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]))) { - //printk(KERN_INFO "[%s] invalid dwIndex(%ld) \n", __FUNCTION__, dwIndex); - return; - } - - if (dwIndex > IDX_STP_MAX) { - //printk(KERN_INFO "[%s] dwIndex(%ld) > IDX_STP_MAX(%d) \n", __FUNCTION__, dwIndex, IDX_STP_MAX); - } - - if (GPIO_INVALID == dbgPinSTP[dwIndex]) { - return; - } - - if (dwMethod & DBG_TIE_DIR) { - if (dwMethod & DBG_HIGH) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - else { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - } - return; - } - - if (dwMethod & DBG_TOGGLE(0)) { - for (i = 0; i < DBG_TOGGLE_NUM(dwMethod); ++i) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - return; - } - - return; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO interrupt callback function -* -* \param[in] func pointer to SDIO handle -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT32 ret = 0; - - prGlueInfo = mtk_wcn_hif_sdio_get_drvdata(cltCtx); - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return (-HIF_SDIO_ERR_FAIL); - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - return ret; - } - - /*WCNCR 00002676*/ - KAL_WAKE_UNLOCK(NULL, &isr_wakelock); - KAL_WAKE_LOCK_TIMEOUT(NULL, &isr_wakelock, KAL_HZ/10); - - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); - - return ret; -} - -#else - -static unsigned int in_interrupt = 0; - -static void mtk_sdio_interrupt(struct sdio_func *func) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - int ret = 0; - - prGlueInfo = sdio_get_drvdata(func); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - return; - } - - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - - #if 0 - wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - //printk(KERN_INFO DRV_NAME"ignore pending interrupt\n"); - } - else { - wlanIST(prGlueInfo->prAdapter); - } - #endif - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO probe function -* -* \param[in] func pointer to SDIO handle -* \param[in] id pointer to SDIO device id table -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -// FIXME: global variable -static const MTK_WCN_HIF_SDIO_FUNCINFO *prFunc; - - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX cltCtx, const MTK_WCN_HIF_SDIO_FUNCINFO *prFuncInfo) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - - prFunc = prFuncInfo; - - if (pfWlanProbe((PVOID) &cltCtx) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -(HIF_SDIO_ERR_FAIL); - } else { - //printk(KERN_INFO DRV_NAME"mtk_wifi_sdio_probe() done(%d)\n", ret); - } - return ret; -} -#else -static int mtk_sdio_probe ( - struct sdio_func *func, - const struct sdio_device_id *id - ) -{ - int ret = 0; - int i = 0; - - //printk(KERN_INFO DRV_NAME "mtk_sdio_probe()\n"); - - ASSERT(func); - ASSERT(id); - - //printk(KERN_INFO DRV_NAME "Basic struct size checking...\n"); - //printk(KERN_INFO DRV_NAME "sizeof(struct device) = %d\n", sizeof(struct device)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_host) = %d\n", sizeof(struct mmc_host)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_card) = %d\n", sizeof(struct mmc_card)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_driver) = %d\n", sizeof(struct mmc_driver)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_data) = %d\n", sizeof(struct mmc_data)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_command) = %d\n", sizeof(struct mmc_command)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_request) = %d\n", sizeof(struct mmc_request)); - //printk(KERN_INFO DRV_NAME "sizeof(struct sdio_func) = %d\n", sizeof(struct sdio_func)); - - //printk(KERN_INFO DRV_NAME "Card information checking...\n"); - //printk(KERN_INFO DRV_NAME "func = 0x%p\n", func); - //printk(KERN_INFO DRV_NAME "Number of info = %d:\n", func->card->num_info); - - for (i = 0; i < func->card->num_info; i++) { - //printk(KERN_INFO DRV_NAME "info[%d]: %s\n", i, func->card->info[i]); - } - - sdio_claim_host(func); - ret = sdio_enable_func(func); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_enable_func failed!\n"); - goto out; - } - //printk(KERN_INFO DRV_NAME"sdio_enable_func done!\n"); - - if (pfWlanProbe((PVOID)func) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -1; - } - else { -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] init debug gpio, 20100815 \n", __FUNCTION__); - /* Debug pins initialization */ - debug_gpio_init(); -#endif - } - -out: - //printk(KERN_INFO DRV_NAME"mtk_sdio_probe() done(%d)\n", ret); - return ret; -} -#endif - - -#if MTK_WCN_HIF_SDIO -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - return ret; -} -#else -static void -mtk_sdio_remove ( - struct sdio_func *func - ) -{ - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove()\n"); - -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] deinit debug gpio \n", __FUNCTION__); - debug_gpio_deinit(); -#endif - - ASSERT(func); - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - sdio_claim_host(func); - sdio_disable_func(func); - //printk(KERN_INFO DRV_NAME"sdio_disable_func() done\n"); - sdio_release_host(func); - - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove() done\n"); -} -#endif - -#if (MTK_WCN_HIF_SDIO == 0) -static int -mtk_sdio_suspend ( - struct device * pDev, - pm_message_t state - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_suspend dev(0x%p)\n", pDev); - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - - return 0; -} - -int mtk_sdio_resume ( - struct device * pDev - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_resume dev(0x%p)\n", pDev); - - return 0; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register sdio bus to the os -* -* \param[in] pfProbe Function pointer to detect card -* \param[in] pfRemove Function pointer to remove card -* -* \return The result of registering sdio bus -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -glRegisterBus ( - probe_card pfProbe, - remove_card pfRemove - ) -{ - int ret = 0; - - ASSERT(pfProbe); - ASSERT(pfRemove); - - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - //printk(KERN_INFO "mtk_sdio: Copyright MediaTek Inc.\n"); - - pfWlanProbe = pfProbe; - pfWlanRemove = pfRemove; - -#if MTK_WCN_HIF_SDIO - /* register MTK sdio client */ - ret = ((mtk_wcn_hif_sdio_client_reg(&cltInfo) == HIF_SDIO_ERR_SUCCESS) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE); -#else - mtk_sdio_driver.probe = mtk_sdio_probe; - mtk_sdio_driver.remove = mtk_sdio_remove; - - mtk_sdio_driver.drv.suspend = mtk_sdio_suspend; - mtk_sdio_driver.drv.resume = mtk_sdio_resume; - - ret = (sdio_register_driver(&mtk_sdio_driver) == 0) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE; -#endif - - return ret; -} /* end of glRegisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will unregister sdio bus to the os -* -* \param[in] pfRemove Function pointer to remove card -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glUnregisterBus( - remove_card pfRemove - ) -{ - ASSERT(pfRemove); - pfRemove(); - -#if MTK_WCN_HIF_SDIO - /* unregister MTK sdio client */ - mtk_wcn_hif_sdio_client_unreg(&cltInfo); -#else - sdio_unregister_driver(&mtk_sdio_driver); -#endif - - return; -} /* end of glUnregisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function stores hif related info, which is initialized before. -* -* \param[in] prGlueInfo Pointer to glue info structure -* \param[in] u4Cookie Pointer to UINT_32 memory base variable for _HIF_HPI -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - - prHif = &prGlueInfo->rHifInfo; - -#if MTK_WCN_HIF_SDIO - //prHif->prFuncInfo = ((MTK_WCN_HIF_SDIO_FUNCINFO *) u4Cookie); - prHif->prFuncInfo = prFunc; - prHif->cltCtx = *((MTK_WCN_HIF_SDIO_CLTCTX *) u4Cookie); - mtk_wcn_hif_sdio_set_drvdata(prHif->cltCtx, prGlueInfo); - -#else - prHif->func = (struct sdio_func *) u4Cookie; - - //printk(KERN_INFO DRV_NAME"prHif->func->dev = 0x%p\n", &prHif->func->dev); - //printk(KERN_INFO DRV_NAME"prHif->func->vendor = 0x%04X\n", prHif->func->vendor); - //printk(KERN_INFO DRV_NAME"prHif->func->device = 0x%04X\n", prHif->func->device); - //printk(KERN_INFO DRV_NAME"prHif->func->func = 0x%04X\n", prHif->func->num); - - sdio_set_drvdata(prHif->func, prGlueInfo); - - SET_NETDEV_DEV(prGlueInfo->prDevHandler, &prHif->func->dev); -#endif - - return; -} /* end of glSetHifInfo() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clears hif related info. -* -* \param[in] prGlueInfo Pointer to glue info structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ) -{ - //P_GL_HIF_INFO_T prHif = NULL; - //ASSERT(prGlueInfo); - //prHif = &prGlueInfo->rHifInfo; - - return; -} /* end of glClearHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize bus operation and hif related information, request resources. -* -* \param[out] pvData A pointer to HIF-specific data type buffer. -* For eHPI, pvData is a pointer to UINT_32 type and stores a -* mapped base address. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOL -glBusInit ( - PVOID pvData - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - int ret = 0; - struct sdio_func *func = NULL; - - ASSERT(pvData); - - func = (struct sdio_func *) pvData; - - sdio_claim_host(func); - ret = sdio_set_block_size(func, 512); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 failed!\n"); - } - else { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 done!\n"); - } - - //printk(KERN_INFO DRV_NAME"param: func->cur_blksize(%d)\n", func->cur_blksize); - //printk(KERN_INFO DRV_NAME"param: func->max_blksize(%d)\n", func->max_blksize); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_size(%d)\n", func->card->host->max_blk_size); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_count(%d)\n", func->card->host->max_blk_count); -#endif - return TRUE; -} /* end of glBusInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus operation and release resources. -* -* \param[in] pvData A pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusRelease ( - PVOID pvData - ) -{ - - return; -} /* end of glBusRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup bus interrupt operation and interrupt handler for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pfnIsr A pointer to interrupt handler function. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \retval WLAN_STATUS_SUCCESS if success -* NEGATIVE_VALUE if fail -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - return -1; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - return -1; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_claim_irq(prHifInfo->func, mtk_sdio_interrupt); - sdio_release_host(prHifInfo->func); -#else - /* hif_sdio case */ - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - return -1; - } - prNetDevice = (struct net_device *) pvData; - - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - return -1; - } - - mtk_wcn_hif_sdio_enable_irq(prGlueInfo->rHifInfo.cltCtx, MTK_WCN_BOOL_TRUE); - -#endif - return ret; -} /* end of glBusSetIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus interrupt operation and disable interrupt handling for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - int ret = 0; - - ASSERT(pvData); - if (!pvData) { - //printk(KERN_INFO DRV_NAME"%s null pvData\n", __FUNCTION__); - return; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"%s no glue info\n", __FUNCTION__); - return; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_release_irq(prHifInfo->func); - sdio_release_host(prHifInfo->func); -#else - /* hif_sdio case */ - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - //printk(KERN_INFO DRV_NAME"%s null pvData\n", __FUNCTION__); - return; - } - prNetDevice = (struct net_device *) pvData; - - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"%s no glue info\n", __FUNCTION__); - return; - } - - mtk_wcn_hif_sdio_enable_irq(prGlueInfo->rHifInfo.cltCtx, MTK_WCN_BOOL_FALSE); -#endif - - return; -} /* end of glBusreeIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] pu4Value Pointer to variable used to store read value -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ) -{ - int ret = 0; - int a = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Value); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_readl(prGlueInfo->rHifInfo.cltCtx, u4Register, (PUINT32) pu4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - -retry: - *pu4Value = sdio_readl(prGlueInfo->rHifInfo.func, u4Register, &ret); - if (ret && a < 10) { - a++; - printk("gwl =-==============> sdio_readl retry %d!\n", a); - msleep(1); - goto retry; - } - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readl() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readl() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] u4Value Value to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ) -{ - int ret = 0; - int a = 0; - - ASSERT(prGlueInfo); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_writel(prGlueInfo->rHifInfo.cltCtx, u4Register, u4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - -retry: - sdio_writel(prGlueInfo->rHifInfo.func, u4Value, u4Register, &ret); - if (ret && a < 10) { - a++; - printk("gwl =-==============> sdio_writel retry %d!\n", a); - msleep(1); - goto retry; - } - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writel() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writel() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be read -* \param[out] pucBuf Pointer to read buffer -* \param[in] u2ValidOutBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucDst = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortRead++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucDst = pucBuf; - - ASSERT(u2Len <= u2ValidOutBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { - if(count & 0x3L) { - int aligned_count = (count+3) & (~0x3L); - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, aligned_count); - } else { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, count); - } - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= (prGlueInfo->rHifInfo).prFuncInfo->blk_sz) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, count); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readsb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readsb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be write -* \param[in] pucBuf Pointer to write buffer -* \param[in] u2ValidInBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucSrc = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortWrite++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucSrc = pucBuf; - - ASSERT(u2Len <= u2ValidInBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { // block mode - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { // byte mode - if(count & 0x3L) { - int aligned_count = (count+3) & (~0x3L); - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, aligned_count); - } else { - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, count); - } - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz)) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { // block mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { // byte mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, count); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writesb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writesb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port in byte with CMD52 -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Addr I/O port offset -* \param[in] ucData Single byte of data to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - sdio_writeb(prGlueInfo->rHifInfo.func, ucData, u4Addr, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#else - ret = mtk_wcn_hif_sdio_writeb(prGlueInfo->rHifInfo.cltCtx, u4Addr, ucData); -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writeb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writeb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; - -} /* end of kalDevWriteWithSdioCmd52() */ - - -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ) -{ - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/x86.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/x86.c deleted file mode 100755 index 4322fa303a71..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/hif/sdio/x86.c +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** -*[File] mt6516-evb.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* dummy file for build system -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - - -/* -** $Log: mt6516-evb.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_cfg80211.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_cfg80211.h deleted file mode 100755 index 15db319c0deb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_cfg80211.h +++ /dev/null @@ -1,319 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_cfg80211.h#1 $ -*/ - -/*! \file gl_cfg80211.h - \brief This file is for Portable Driver linux cfg80211 support. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_cfg80211.h $ -** -** 08 29 2012 chinglan.wang -** [ALPS00349655] [Need Patch] [Volunteer Patch] [ALPS.JB] Daily build warning on [mt6575_phone_mhl-eng] -** . - * -*/ - -#ifndef _GL_CFG80211_H -#define _GL_CFG80211_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#include "gl_os.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* cfg80211 hooks */ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ); - - -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - - -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - - -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - - -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - - -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - - -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ); - - -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ); - - -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ); - - -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ); - - -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ); - - -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - - -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ); - - -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#endif -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_CFG80211_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_kal.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_kal.h deleted file mode 100755 index 6df16d4ef1dd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_kal.h +++ /dev/null @@ -1,2250 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_kal.h#1 $ -*/ - -/*! \file gl_kal.h - \brief Declaration of KAL functions - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - - - -/* -** $Log: gl_kal.h $ - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 06 2012 wh.su - * [WCXRP00001177] [MT6620 Wi-Fi][Driver][2.2] Adding the query channel filter for AP mode - * adding the channel query filter for AP mode. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adjust the code for Non-DBG and no XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * include link.h for linux's port. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 jeffrey.chang - * [WCXRP00000332] [MT6620 Wi-Fi][Driver] add kal sleep function for delay which use blocking call - * modify the implementation of kalDelay to msleep - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * modify kalSetEvent declaration - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * fix kal header file - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * gl_kal merged - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify kalMemAlloc method - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * * 2) add 2 kal API for later integration - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download KAPI - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\41 2009-09-28 20:19:23 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\40 2009-08-18 22:57:09 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\39 2009-06-23 23:19:15 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\38 2009-02-09 14:03:17 GMT mtk01090 -** Add KAL function kalDevSetPowerState(). It is not implemented yet. Only add an empty macro. -** -** \main\maintrunk.MT5921\37 2009-01-22 13:05:59 GMT mtk01088 -** new defeine to got 1x value at packet reserved field -** \main\maintrunk.MT5921\36 2008-12-08 16:15:02 GMT mtk01461 -** Add kalQueryValidBufferLength() macro -** \main\maintrunk.MT5921\35 2008-11-13 20:33:15 GMT mtk01104 -** Remove lint warning -** \main\maintrunk.MT5921\34 2008-10-22 11:05:52 GMT mtk01461 -** Remove unused macro -** \main\maintrunk.MT5921\33 2008-10-16 15:48:17 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\32 2008-09-02 11:50:51 GMT mtk01461 -** SPIN_LOCK_SDIO_DDK_TX_QUE -** \main\maintrunk.MT5921\31 2008-08-29 15:58:30 GMT mtk01088 -** remove non-used function for code refine -** \main\maintrunk.MT5921\30 2008-08-21 00:33:29 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\29 2008-06-19 13:29:14 GMT mtk01425 -** 1. Add declaration of SPIN_LOCK_SDIO_DDK_TX_QUE and SPIN_LOCK_SDIO_DDK_RX_QUE -** \main\maintrunk.MT5921\28 2008-05-30 20:27:34 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\27 2008-05-30 14:42:05 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\26 2008-05-29 14:15:18 GMT mtk01084 -** remove un-used function -** \main\maintrunk.MT5921\25 2008-04-23 14:02:20 GMT mtk01084 -** modify KAL port access function prototype -** \main\maintrunk.MT5921\24 2008-04-17 23:06:41 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\23 2008-04-08 15:38:50 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\22 2008-03-26 15:34:48 GMT mtk01461 -** Add update MAC address func -** \main\maintrunk.MT5921\21 2008-03-18 15:56:15 GMT mtk01084 -** update ENUM_NIC_INITIAL_PARAM_E -** \main\maintrunk.MT5921\20 2008-03-18 11:49:28 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\19 2008-03-18 10:21:31 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\18 2008-03-14 18:03:41 GMT mtk01084 -** refine register and port access function -** \main\maintrunk.MT5921\17 2008-03-11 14:51:02 GMT mtk01461 -** Add copy_to(from)_user macro -** \main\maintrunk.MT5921\16 2008-03-06 23:42:21 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\15 2008-02-26 09:48:04 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\14 2008-01-09 17:54:58 GMT mtk01084 -** Modify the argument of kalQueryPacketInfo -** \main\maintrunk.MT5921\13 2007-11-29 02:05:20 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\12 2007-11-26 19:43:45 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\11 2007-11-09 16:36:15 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\10 2007-11-07 18:38:37 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\9 2007-11-06 19:36:50 GMT mtk01088 -** add the WPS related code -** \main\maintrunk.MT5921\8 2007-11-02 01:03:57 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:23 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - - -#ifndef _GL_KAL_H -#define _GL_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "link.h" -#include "nic/mac.h" -#include "nic/wlan_def.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "gl_wext_priv.h" - - -#if CFG_ENABLE_BT_OVER_WIFI - #include "nic/bow.h" -#endif - -#if DBG -extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define USEC_PER_MSEC (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SPIN_LOCK_CATEGORY_E { - SPIN_LOCK_FSM = 0, - - /* FIX ME */ - SPIN_LOCK_RX_QUE, - SPIN_LOCK_TX_QUE, - SPIN_LOCK_CMD_QUE, - SPIN_LOCK_TX_RESOURCE, - SPIN_LOCK_CMD_RESOURCE, - SPIN_LOCK_QM_TX_QUEUE, - SPIN_LOCK_CMD_PENDING, - SPIN_LOCK_CMD_SEQ_NUM, - SPIN_LOCK_TX_MSDU_INFO_LIST, - SPIN_LOCK_TXING_MGMT_LIST, - SPIN_LOCK_TX_SEQ_NUM, - SPIN_LOCK_TX_COUNT, - SPIN_LOCK_TXS_COUNT, - /* end */ - SPIN_LOCK_TX, - SPIN_LOCK_IO_REQ, - SPIN_LOCK_INT, - - SPIN_LOCK_MGT_BUF, - SPIN_LOCK_MSG_BUF, - SPIN_LOCK_STA_REC, - - SPIN_LOCK_MAILBOX, - SPIN_LOCK_TIMER, - - SPIN_LOCK_BOW_TABLE, - - SPIN_LOCK_EHPI_BUS, /* only for EHPI */ - SPIN_LOCK_NET_DEV, - SPIN_LOCK_NUM -} ENUM_SPIN_LOCK_CATEGORY_E; - -/* event for assoc infomation update */ -typedef struct _EVENT_ASSOC_INFO { - UINT_8 ucAssocReq; /* 1 for assoc req, 0 for assoc rsp */ - UINT_8 ucReassoc; /* 0 for assoc, 1 for reassoc */ - UINT_16 u2Length; - PUINT_8 pucIe; -} EVENT_ASSOC_INFO, *P_EVENT_ASSOC_INFO; - -typedef enum _ENUM_KAL_NETWORK_TYPE_INDEX_T { - KAL_NETWORK_TYPE_AIS_INDEX = 0, -#if CFG_ENABLE_WIFI_DIRECT - KAL_NETWORK_TYPE_P2P_INDEX, -#endif -#if CFG_ENABLE_BT_OVER_WIFI - KAL_NETWORK_TYPE_BOW_INDEX, -#endif - KAL_NETWORK_TYPE_INDEX_NUM -} ENUM_KAL_NETWORK_TYPE_INDEX_T; - -typedef enum _ENUM_KAL_MEM_ALLOCATION_TYPE_E { - PHY_MEM_TYPE, /* physically continuous */ - VIR_MEM_TYPE, /* virtually continous */ - MEM_TYPE_NUM -} ENUM_KAL_MEM_ALLOCATION_TYPE; - -#if CONFIG_ANDROID /* Defined in Android kernel source */ -typedef struct wake_lock KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#else -typedef UINT_32 KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#define KAL_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags - -#define KAL_ACQUIRE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalAcquireSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, &__u4Flags) - -#define KAL_RELEASE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalReleaseSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, __u4Flags) - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define KAL_GET_PKT_QUEUE_ENTRY(_p) GLUE_GET_PKT_QUEUE_ENTRY(_p) -#define KAL_GET_PKT_DESCRIPTOR(_prQueueEntry) GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) -#define KAL_GET_PKT_TID(_p) GLUE_GET_PKT_TID(_p) -#define KAL_GET_PKT_IS1X(_p) GLUE_GET_PKT_IS1X(_p) -#define KAL_GET_PKT_HEADER_LEN(_p) GLUE_GET_PKT_HEADER_LEN(_p) -#define KAL_GET_PKT_PAYLOAD_LEN(_p) GLUE_GET_PKT_PAYLOAD_LEN(_p) -#define KAL_GET_PKT_ARRIVAL_TIME(_p) GLUE_GET_PKT_ARRIVAL_TIME(_p) - -/*----------------------------------------------------------------------------*/ -/* Macros of wake_lock operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#if CONFIG_ANDROID /* Defined in Android kernel source */ -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) \ - wake_lock_init(_prWakeLock, WAKE_LOCK_SUSPEND, _pcName) - -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) \ - wake_lock_destroy(_prWakeLock) - -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) \ - wake_lock(_prWakeLock) - -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) \ - wake_lock_timeout(_prWakeLock, _u4Timeout) - -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) \ - wake_unlock(_prWakeLock) - -#else -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Cache memory allocation -* -* \param[in] u4Size Required memory size. -* \param[in] eMemType Memory allocation type -* -* \return Pointer to allocated memory -* or NULL -*/ -/*----------------------------------------------------------------------------*/ -#if DBG -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - if (pvAddr) { \ - allocatedMemSize += u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) allocated (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - pvAddr; \ - }) -#else -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - pvAddr; \ - }) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free allocated cache memory -* -* \param[in] pvAddr Required memory size. -* \param[in] eMemType Memory allocation type -* \param[in] u4Size Allocated memory size. -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#if DBG -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if (pvAddr) { \ - allocatedMemSize -= u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) freed (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -#else -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -#endif - -#define kalUdelay(u4USec) udelay(u4USec) - -#define kalMdelay(u4MSec) mdelay(u4MSec) -#define kalMsleep(u4MSec) msleep(u4MSec) - -/* Copy memory from user space to kernel space */ -#define kalMemCopyFromUser(_pvTo, _pvFrom, _u4N) copy_from_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory from kernel space to user space */ -#define kalMemCopyToUser(_pvTo, _pvFrom, _u4N) copy_to_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory block with specific size */ -#define kalMemCopy(pvDst, pvSrc, u4Size) memcpy(pvDst, pvSrc, u4Size) - -/* Set memory block with specific pattern */ -#define kalMemSet(pvAddr, ucPattern, u4Size) memset(pvAddr, ucPattern, u4Size) - -/* Compare two memory block with specific length. - * Return zero if they are the same. - */ -#define kalMemCmp(pvAddr1, pvAddr2, u4Size) memcmp(pvAddr1, pvAddr2, u4Size) - -/* Zero specific memory block */ -#define kalMemZero(pvAddr, u4Size) memset(pvAddr, 0, u4Size) - -/* defined for wince sdio driver only */ -#if defined(_HIF_SDIO) -#define kalDevSetPowerState(prGlueInfo, ePowerMode) glSetPowerState(prGlueInfo, ePowerMode) -#else -#define kalDevSetPowerState(prGlueInfo, ePowerMode) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalSendComplete(prGlueInfo, pvPacket, status) \ - kalSendCompleteAndAwakeQueue(prGlueInfo, pvPacket) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to locate the starting address of incoming ethernet -* frame for skb. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryBufferPointer(prGlueInfo, pvPacket) \ - ((PUINT_8)((struct sk_buff *)pvPacket)->data) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to query the length of valid buffer which is accessible during -* port read/write. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryValidBufferLength(prGlueInfo, pvPacket) \ - ((UINT_32)((struct sk_buff *)pvPacket)->end - \ - (UINT_32)((struct sk_buff *)pvPacket)->data) - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to copy the entire frame from skb to the destination -* address in the input parameter. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] pucDestBuffer Destination Address -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalCopyFrame(prGlueInfo, pvPacket, pucDestBuffer) \ - {struct sk_buff *skb = (struct sk_buff *)pvPacket; \ - memcpy(pucDestBuffer, skb->data, skb->len);} - -#define kalGetTimeTick() jiffies_to_msecs(jiffies) - -#define kalPrint printk - -#if !DBG -#if CFG_SUPPORT_XLOG -#define XLOG_TAG "wlan" - -#define XLOG_FUNC(__LEVEL, __FMT...)\ - if (__LEVEL == ANDROID_LOG_ERROR) {\ - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_WARN) {\ - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_INFO) {\ - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_DEBUG) {\ - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_VERBOSE) {\ - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, ##__FMT);\ - } - -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define AIS_ERROR_LOGDUMP8(x, y) -#define AIS_WARN_LOGDUMP8(x, y) -#define AIS_INFO_LOGDUMP8(x, y) -#define AIS_STATE_LOGDUMP8(x, y) -#define AIS_EVENT_LOGDUMP8(x, y) -#define AIS_TRACE_LOGDUMP8(x, y) -#define AIS_LOUD_LOGDUMP8(x, y) -#define AIS_TEMP_LOGDUMP8(x, y) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGDUMP8(x, y) -#define INTR_WARN_LOGDUMP8(x, y) -#define INTR_INFO_LOGDUMP8(x, y) -#define INTR_STATE_LOGDUMP8(x, y) -#define INTR_EVENT_LOGDUMP8(x, y) -#define INTR_TRACE_LOGDUMP8(x, y) -#define INTR_LOUD_LOGDUMP8(x, y) -#define INTR_TEMP_LOGDUMP8(x, y) - -#define INIT_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGDUMP8(x, y) -#define INIT_WARN_LOGDUMP8(x, y) -#define INIT_INFO_LOGDUMP8(x, y) -#define INIT_STATE_LOGDUMP8(x, y) -#define INIT_EVENT_LOGDUMP8(x, y) -#define INIT_TRACE_LOGDUMP8(x, y) -#define INIT_LOUD_LOGDUMP8(x, y) -#define INIT_TEMP_LOGDUMP8(x, y) - -#define AAA_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGDUMP8(x, y) -#define AAA_WARN_LOGDUMP8(x, y) -#define AAA_INFO_LOGDUMP8(x, y) -#define AAA_STATE_LOGDUMP8(x, y) -#define AAA_EVENT_LOGDUMP8(x, y) -#define AAA_TRACE_LOGDUMP8(x, y) -#define AAA_LOUD_LOGDUMP8(x, y) -#define AAA_TEMP_LOGDUMP8(x, y) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define ROAMING_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define ROAMING_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGDUMP8(x, y) -#define ROAMING_WARN_LOGDUMP8(x, y) -#define ROAMING_INFO_LOGDUMP8(x, y) -#define ROAMING_STATE_LOGDUMP8(x, y) -#define ROAMING_EVENT_LOGDUMP8(x, y) -#define ROAMING_TRACE_LOGDUMP8(x, y) -#define ROAMING_LOUD_LOGDUMP8(x, y) -#define ROAMING_TEMP_LOGDUMP8(x, y) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGDUMP8(x, y) -#define REQ_WARN_LOGDUMP8(x, y) -#define REQ_INFO_LOGDUMP8(x, y) -#define REQ_STATE_LOGDUMP8(x, y) -#define REQ_EVENT_LOGDUMP8(x, y) -#define REQ_TRACE_LOGDUMP8(x, y) -#define REQ_LOUD_LOGDUMP8(x, y) -#define REQ_TEMP_LOGDUMP8(x, y) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGDUMP8(x, y) -#define TX_WARN_LOGDUMP8(x, y) -#define TX_INFO_LOGDUMP8(x, y) -#define TX_STATE_LOGDUMP8(x, y) -#define TX_EVENT_LOGDUMP8(x, y) -#define TX_TRACE_LOGDUMP8(x, y) -#define TX_LOUD_LOGDUMP8(x, y) -#define TX_TEMP_LOGDUMP8(x, y) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGDUMP8(x, y) -#define RX_WARN_LOGDUMP8(x, y) -#define RX_INFO_LOGDUMP8(x, y) -#define RX_STATE_LOGDUMP8(x, y) -#define RX_EVENT_LOGDUMP8(x, y) -#define RX_TRACE_LOGDUMP8(x, y) -#define RX_LOUD_LOGDUMP8(x, y) -#define RX_TEMP_LOGDUMP8(x, y) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGDUMP8(x, y) -#define RFTEST_WARN_LOGDUMP8(x, y) -#define RFTEST_INFO_LOGDUMP8(x, y) -#define RFTEST_STATE_LOGDUMP8(x, y) -#define RFTEST_EVENT_LOGDUMP8(x, y) -#define RFTEST_TRACE_LOGDUMP8(x, y) -#define RFTEST_LOUD_LOGDUMP8(x, y) -#define RFTEST_TEMP_LOGDUMP8(x, y) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGDUMP8(x, y) -#define EMU_WARN_LOGDUMP8(x, y) -#define EMU_INFO_LOGDUMP8(x, y) -#define EMU_STATE_LOGDUMP8(x, y) -#define EMU_EVENT_LOGDUMP8(x, y) -#define EMU_TRACE_LOGDUMP8(x, y) -#define EMU_LOUD_LOGDUMP8(x, y) -#define EMU_TEMP_LOGDUMP8(x, y) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGDUMP8(x, y) -#define HEM_WARN_LOGDUMP8(x, y) -#define HEM_INFO_LOGDUMP8(x, y) -#define HEM_STATE_LOGDUMP8(x, y) -#define HEM_EVENT_LOGDUMP8(x, y) -#define HEM_TRACE_LOGDUMP8(x, y) -#define HEM_LOUD_LOGDUMP8(x, y) -#define HEM_TEMP_LOGDUMP8(x, y) - -#define RLM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RLM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RLM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGDUMP8(x, y) -#define RLM_WARN_LOGDUMP8(x, y) -#define RLM_INFO_LOGDUMP8(x, y) -#define RLM_STATE_LOGDUMP8(x, y) -#define RLM_EVENT_LOGDUMP8(x, y) -#define RLM_TRACE_LOGDUMP8(x, y) -#define RLM_LOUD_LOGDUMP8(x, y) -#define RLM_TEMP_LOGDUMP8(x, y) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGDUMP8(x, y) -#define MEM_WARN_LOGDUMP8(x, y) -#define MEM_INFO_LOGDUMP8(x, y) -#define MEM_STATE_LOGDUMP8(x, y) -#define MEM_EVENT_LOGDUMP8(x, y) -#define MEM_TRACE_LOGDUMP8(x, y) -#define MEM_LOUD_LOGDUMP8(x, y) -#define MEM_TEMP_LOGDUMP8(x, y) - -#define CNM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGDUMP8(x, y) -#define CNM_WARN_LOGDUMP8(x, y) -#define CNM_INFO_LOGDUMP8(x, y) -#define CNM_STATE_LOGDUMP8(x, y) -#define CNM_EVENT_LOGDUMP8(x, y) -#define CNM_TRACE_LOGDUMP8(x, y) -#define CNM_LOUD_LOGDUMP8(x, y) -#define CNM_TEMP_LOGDUMP8(x, y) - -#define RSN_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RSN_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RSN_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGDUMP8(x, y) -#define RSN_WARN_LOGDUMP8(x, y) -#define RSN_INFO_LOGDUMP8(x, y) -#define RSN_STATE_LOGDUMP8(x, y) -#define RSN_EVENT_LOGDUMP8(x, y) -#define RSN_TRACE_LOGDUMP8(x, y) -#define RSN_LOUD_LOGDUMP8(x, y) -#define RSN_TEMP_LOGDUMP8(x, y) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGDUMP8(x, y) -#define BSS_WARN_LOGDUMP8(x, y) -#define BSS_INFO_LOGDUMP8(x, y) -#define BSS_STATE_LOGDUMP8(x, y) -#define BSS_EVENT_LOGDUMP8(x, y) -#define BSS_TRACE_LOGDUMP8(x, y) -#define BSS_LOUD_LOGDUMP8(x, y) -#define BSS_TEMP_LOGDUMP8(x, y) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGDUMP8(x, y) -#define SCN_WARN_LOGDUMP8(x, y) -#define SCN_INFO_LOGDUMP8(x, y) -#define SCN_STATE_LOGDUMP8(x, y) -#define SCN_EVENT_LOGDUMP8(x, y) -#define SCN_TRACE_LOGDUMP8(x, y) -#define SCN_LOUD_LOGDUMP8(x, y) -#define SCN_TEMP_LOGDUMP8(x, y) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGDUMP8(x, y) -#define SAA_WARN_LOGDUMP8(x, y) -#define SAA_INFO_LOGDUMP8(x, y) -#define SAA_STATE_LOGDUMP8(x, y) -#define SAA_EVENT_LOGDUMP8(x, y) -#define SAA_TRACE_LOGDUMP8(x, y) -#define SAA_LOUD_LOGDUMP8(x, y) -#define SAA_TEMP_LOGDUMP8(x, y) - -#define P2P_ERROR_LOGFUNC(_Fmt...) -#define P2P_WARN_LOGFUNC(_Fmt...) -#define P2P_INFO_LOGFUNC(_Fmt...) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGDUMP8(x, y) -#define P2P_WARN_LOGDUMP8(x, y) -#define P2P_INFO_LOGDUMP8(x, y) -#define P2P_STATE_LOGDUMP8(x, y) -#define P2P_EVENT_LOGDUMP8(x, y) -#define P2P_TRACE_LOGDUMP8(x, y) -#define P2P_LOUD_LOGDUMP8(x, y) -#define P2P_TEMP_LOGDUMP8(x, y) - -#define QM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGDUMP8(x, y) -#define QM_WARN_LOGDUMP8(x, y) -#define QM_INFO_LOGDUMP8(x, y) -#define QM_STATE_LOGDUMP8(x, y) -#define QM_EVENT_LOGDUMP8(x, y) -#define QM_TRACE_LOGDUMP8(x, y) -#define QM_LOUD_LOGDUMP8(x, y) -#define QM_TEMP_LOGDUMP8(x, y) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGDUMP8(x, y) -#define SEC_WARN_LOGDUMP8(x, y) -#define SEC_INFO_LOGDUMP8(x, y) -#define SEC_STATE_LOGDUMP8(x, y) -#define SEC_EVENT_LOGDUMP8(x, y) -#define SEC_TRACE_LOGDUMP8(x, y) -#define SEC_LOUD_LOGDUMP8(x, y) -#define SEC_TEMP_LOGDUMP8(x, y) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGDUMP8(x, y) -#define BOW_WARN_LOGDUMP8(x, y) -#define BOW_INFO_LOGDUMP8(x, y) -#define BOW_STATE_LOGDUMP8(x, y) -#define BOW_EVENT_LOGDUMP8(x, y) -#define BOW_TRACE_LOGDUMP8(x, y) -#define BOW_LOUD_LOGDUMP8(x, y) -#define BOW_TEMP_LOGDUMP8(x, y) - -#define HAL_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGDUMP8(x, y) -#define HAL_WARN_LOGDUMP8(x, y) -#define HAL_INFO_LOGDUMP8(x, y) -#define HAL_STATE_LOGDUMP8(x, y) -#define HAL_EVENT_LOGDUMP8(x, y) -#define HAL_TRACE_LOGDUMP8(x, y) -#define HAL_LOUD_LOGDUMP8(x, y) -#define HAL_TEMP_LOGDUMP8(x, y) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGDUMP8(x, y) -#define WAPI_WARN_LOGDUMP8(x, y) -#define WAPI_INFO_LOGDUMP8(x, y) -#define WAPI_STATE_LOGDUMP8(x, y) -#define WAPI_EVENT_LOGDUMP8(x, y) -#define WAPI_TRACE_LOGDUMP8(x, y) -#define WAPI_LOUD_LOGDUMP8(x, y) -#define WAPI_TEMP_LOGDUMP8(x, y) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGDUMP8(x, y) -#define SW1_WARN_LOGDUMP8(x, y) -#define SW1_INFO_LOGDUMP8(x, y) -#define SW1_STATE_LOGDUMP8(x, y) -#define SW1_EVENT_LOGDUMP8(x, y) -#define SW1_TRACE_LOGDUMP8(x, y) -#define SW1_LOUD_LOGDUMP8(x, y) -#define SW1_TEMP_LOGDUMP8(x, y) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGDUMP8(x, y) -#define SW2_WARN_LOGDUMP8(x, y) -#define SW2_INFO_LOGDUMP8(x, y) -#define SW2_STATE_LOGDUMP8(x, y) -#define SW2_EVENT_LOGDUMP8(x, y) -#define SW2_TRACE_LOGDUMP8(x, y) -#define SW2_LOUD_LOGDUMP8(x, y) -#define SW2_TEMP_LOGDUMP8(x, y) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGDUMP8(x, y) -#define SW3_WARN_LOGDUMP8(x, y) -#define SW3_INFO_LOGDUMP8(x, y) -#define SW3_STATE_LOGDUMP8(x, y) -#define SW3_EVENT_LOGDUMP8(x, y) -#define SW3_TRACE_LOGDUMP8(x, y) -#define SW3_LOUD_LOGDUMP8(x, y) -#define SW3_TEMP_LOGDUMP8(x, y) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGDUMP8(x, y) -#define SW4_WARN_LOGDUMP8(x, y) -#define SW4_INFO_LOGDUMP8(x, y) -#define SW4_STATE_LOGDUMP8(x, y) -#define SW4_EVENT_LOGDUMP8(x, y) -#define SW4_TRACE_LOGDUMP8(x, y) dumpMemory8(ANDROID_LOG_DEBUG, x, y) -#define SW4_LOUD_LOGDUMP8(x, y) -#define SW4_TEMP_LOGDUMP8(x, y) -#else -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) -#define ROAMING_WARN_LOGFUNC(_Fmt...) -#define ROAMING_INFO_LOGFUNC(_Fmt...) -#define ROAMING_STATE_LOGFUNC(_Fmt...) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGFUNC(_Fmt...) -#define RLM_WARN_LOGFUNC(_Fmt...) -#define RLM_INFO_LOGFUNC(_Fmt...) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGFUNC(_Fmt...) -#define RSN_WARN_LOGFUNC(_Fmt...) -#define RSN_INFO_LOGFUNC(_Fmt...) -#define RSN_STATE_LOGFUNC(_Fmt...) -#define RSN_EVENT_LOGFUNC(_Fmt...) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGFUNC(_Fmt...) -#define P2P_WARN_LOGFUNC(_Fmt...) -#define P2P_INFO_LOGFUNC(_Fmt...) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) -#endif -#endif - -#define kalBreakPoint() \ - do { \ - BUG(); \ - panic("Oops"); \ - } while(0) - -#if CFG_ENABLE_AEE_MSG -#define kalSendAeeException aee_kernel_exception -#define kalSendAeeWarning aee_kernel_warning -#define kalSendAeeReminding aee_kernel_reminding -#else -#define kalSendAeeException(_module, _desc, ...) -#define kalSendAeeWarning(_module, _desc, ...) -#define kalSendAeeReminding(_module, _desc, ...) -#endif - -#define PRINTF_ARG(...) __VA_ARGS__ -#define SPRINTF(buf, arg) {buf += sprintf((char *)(buf), PRINTF_ARG arg);} - -#define USEC_TO_SYSTIME(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_SYSTIME(_msec) (_msec) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in gl_kal.c */ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ); - -VOID -kalReleaseSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ); - -VOID -kalUpdateMACAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ); - -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -PVOID -kalPacketAlloc( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ); - -VOID -kalOsTimerInitialize( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ); - -BOOL -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN OS_SYSTIME rInterval - ); - -WLAN_STATUS -kalProcessRxPacket( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ); - -WLAN_STATUS -kalRxIndicatePkts( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ); - -VOID -kalIndicateStatusAndComplete( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ); - -VOID -kalUpdateReAssocReqInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ); - -#if CFG_TX_FRAGMENT -BOOLEAN -kalQueryTxPacketHeader( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - OUT PUINT_16 pu2EtherTypeLen, - OUT PUINT_8 pucEthDestAddr - ); -#endif /* CFG_TX_FRAGMENT */ - -VOID -kalSendCompleteAndAwakeQueue( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -kalQueryTxChksumOffloadParam( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag); - -VOID -kalUpdateRxCSUMOffloadParam( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T eCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines in interface - ehpi/sdio.c */ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ); - -BOOL -kalDevRegWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ); - -BOOL -kalDevPortRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ); - -BOOL -kalDevPortWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ); - -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ); - - - #if CFG_SUPPORT_EXT_CONFIG -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ); - #endif - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType -); - -inline VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ); - - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ); - -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ); - -#if CFG_ENABLE_FW_DOWNLOAD - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ); - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Card Removal Check */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* TX */ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media State Indication */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ); - - -/*----------------------------------------------------------------------------*/ -/* OID handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ); - -#if CFG_ENABLE_BT_OVER_WIFI -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - PARAM_MAC_ADDRESS rPeerAddr - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_BOW_SEPARATE_DATA_PATH -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi Net Device Init/Uninit */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ); - -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - - -/*----------------------------------------------------------------------------*/ -/* Firmware Download Handling */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Security Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ); - - -/*----------------------------------------------------------------------------*/ -/* Management Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearMgmtFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ); - -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ); - -UINT_32 -kalRandomNumber( - VOID - ); - -VOID -kalTimeoutHandler (unsigned long arg); - -VOID -kalSetEvent (P_GLUE_INFO_T pr); - - -/*----------------------------------------------------------------------------*/ -/* NVRAM/Registry Service */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ); - -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ); - -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ); - -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - IN UINT_16 u2Data - ); - -/*----------------------------------------------------------------------------*/ -/* WSC Connection */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* RSSI Updating */ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - - -/*----------------------------------------------------------------------------*/ -/* I/O Buffer Pre-allocation */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ); - -VOID -kalUninitIOBuffer( - VOID - ); - -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ); - -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ); - -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/* 802.11W */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size - ); - - -/*----------------------------------------------------------------------------*/ -/* NL80211 */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ); - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -int tx_thread(void *data); - -#endif /* _GL_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_os.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_os.h deleted file mode 100755 index 99559dfcce79..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_os.h +++ /dev/null @@ -1,1139 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_os.h#2 $ -*/ - -/*! \file gl_os.h - \brief List the external reference to OS for GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - - - -/* -** $Log: gl_os.h $ -** -** 08 20 2012 yuche.tsai -** NULL -** Fix possible KE issue. -** -** 08 20 2012 yuche.tsai -** [ALPS00339327] [Rose][6575JB][BSP Package][Free Test][KE][WIFI]There is no response when you tap the turn off/on button,wait a minutes, the device will reboot automatically and "KE" will pop up. -** Fix possible KE when netlink operate mgmt frame register. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 29 2011 terry.wu - * NULL - * Show DRV_NAME by chip id. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 19 2010 jeffrey.chang - * - * add security frame pending count - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * supporting power management - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * pvInformationBuffer and u4InformationBufferLength are no longer in glue - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * * are done in adapter layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * * (2) fix spin lock - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download related data type - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * * the frequency is used for adhoc connection only - * * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\30 2009-10-20 17:38:31 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\29 2009-10-08 10:33:33 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\28 2009-09-28 20:19:26 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\27 2009-08-18 22:57:12 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\26 2009-07-06 21:42:25 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\25 2009-07-06 20:51:46 GMT mtk01088 -** adding the wapi 1x ether type define -** \main\maintrunk.MT5921\24 2009-06-23 23:19:18 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\23 2009-02-07 15:05:06 GMT mtk01088 -** add the privacy flag to ingo driver the supplicant selected ap's security -** \main\maintrunk.MT5921\22 2009-02-05 15:34:09 GMT mtk01088 -** fixed the compiling error for using bits marco for only one parameter -** \main\maintrunk.MT5921\21 2009-01-22 13:02:13 GMT mtk01088 -** data frame is or not 802.1x value share with tid, using the same reserved byte, provide the function to set and get -** \main\maintrunk.MT5921\20 2008-10-24 12:04:16 GMT mtk01088 -** move the config.h from precomp.h to here for lint check -** \main\maintrunk.MT5921\19 2008-09-22 23:19:02 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\18 2008-09-05 17:25:13 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\17 2008-08-01 13:32:47 GMT mtk01084 -** Prevent redundent driver assertion in driver logic when BUS is detached -** \main\maintrunk.MT5921\16 2008-05-30 14:41:43 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\15 2008-05-29 14:16:25 GMT mtk01084 -** remoev un-used variable -** \main\maintrunk.MT5921\14 2008-05-03 15:17:14 GMT mtk01461 -** Add Media Status variable in Glue Layer -** \main\maintrunk.MT5921\13 2008-04-24 11:58:41 GMT mtk01461 -** change threshold to 256 -** \main\maintrunk.MT5921\12 2008-03-11 14:51:05 GMT mtk01461 -** Remove redundant GL_CONN_INFO_T -** \main\maintrunk.MT5921\11 2008-01-07 15:07:41 GMT mtk01461 -** Adjust the netif stop threshold to 150 -** \main\maintrunk.MT5921\10 2007-11-26 19:43:46 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\9 2007-11-07 18:38:38 GMT mtk01461 -** Move definition -** \main\maintrunk.MT5921\8 2007-11-02 01:04:00 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.5 2007/07/12 11:04:28 MTK01084 -** update macro to delay for ms order -** -** Revision 1.4 2007/07/05 07:25:34 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_OS_H -#define _GL_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/*------------------------------------------------------------------------------ - * Flags for LINUX(OS) dependent - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_WLAN_DEVICES 1 /* number of wlan card will coexist*/ - -#define CFG_MAX_TXQ_NUM 4 /* number of tx queue for support multi-queue h/w */ - - -#define CFG_USE_SPIN_LOCK_BOTTOM_HALF 0 /* 1: Enable use of SPIN LOCK Bottom Half for LINUX - 0: Disable - use SPIN LOCK IRQ SAVE instead */ - -#define CFG_TX_PADDING_SMALL_ETH_PACKET 0 /* 1: Enable - Drop ethernet packet if it < 14 bytes. - And pad ethernet packet with dummy 0 if it < 60 bytes. - 0: Disable */ - -#define CFG_TX_STOP_NETIF_QUEUE_THRESHOLD 256 /* packets */ - -#define CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD 64 /* packets */ -#define CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD 32 /* packets */ - - -#define ETH_P_1X 0x888E -#define IPTOS_PREC_OFFSET 5 -#define USER_PRIORITY_DEFAULT 0 - -#define ETH_WPI_1X 0x88B4 - -#define ETH_HLEN 14 -#define ETH_TYPE_LEN_OFFSET 12 -#define ETH_P_IP 0x0800 -#define ETH_P_1X 0x888E -#define ETH_P_PRE_1X 0x88C7 - -#define IPVERSION 4 -#define IP_HEADER_LEN 20 - -#define IPVH_VERSION_OFFSET 4 // For Little-Endian -#define IPVH_VERSION_MASK 0xF0 -#define IPTOS_PREC_OFFSET 5 -#define IPTOS_PREC_MASK 0xE0 - -#define SOURCE_PORT_LEN 2 -/* NOTE(Kevin): Without IP Option Length */ -#define LOOK_AHEAD_LEN (ETH_HLEN + IP_HEADER_LEN + SOURCE_PORT_LEN) - -/* 802.2 LLC/SNAP */ -#define ETH_LLC_OFFSET (ETH_HLEN) -#define ETH_LLC_LEN 3 -#define ETH_LLC_DSAP_SNAP 0xAA -#define ETH_LLC_SSAP_SNAP 0xAA -#define ETH_LLC_CONTROL_UNNUMBERED_INFORMATION 0x03 - -/* Bluetooth SNAP */ -#define ETH_SNAP_OFFSET (ETH_HLEN + ETH_LLC_LEN) -#define ETH_SNAP_LEN 5 -#define ETH_SNAP_BT_SIG_OUI_0 0x00 -#define ETH_SNAP_BT_SIG_OUI_1 0x19 -#define ETH_SNAP_BT_SIG_OUI_2 0x58 - -#define BOW_PROTOCOL_ID_SECURITY_FRAME 0x0003 - - -#if defined(MT6620) - #define CHIP_NAME "MT6620" -#elif defined(MT5931) - #define CHIP_NAME "MT5931" -#elif defined(MT6628) - #define CHIP_NAME "MT6628" -#endif - -#define DRV_NAME "["CHIP_NAME"]: " - -/* Define if target platform is Android. - * It should already be defined in Android kernel source - */ -#ifndef CONFIG_ANDROID -#define CONFIG_ANDROID 0 -#endif - -/* for CFG80211 IE buffering mechanism */ -#define CFG_CFG80211_IE_BUF_LEN (512) - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include /* constant of kernel version */ - -#include /* bitops.h */ - -#include /* struct timer_list */ -#include /* jiffies */ -#include /* udelay and mdelay macro */ - -#if CONFIG_ANDROID -#include -#endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) -#include /* IRQT_FALLING */ -#include /*for in_interrupt*/ -#endif - -#include /* struct net_device, struct net_device_stats */ -#include /* for eth_type_trans() function */ -#include /* struct iw_statistics */ -#include -#include /* struct in_device */ - -#include /* struct iphdr */ - -#include /* for memcpy()/memset() function */ -#include /* for offsetof() macro */ - -#include /* The proc filesystem constants/structures */ - -#include /* for rtnl_lock() and rtnl_unlock() */ -#include /* kthread_should_stop(), kthread_run() */ -#include /* for copy_from_user() */ -#include /* for firmware download */ -#include - -#include /* for kfifo interface */ -#include /* for cdev interface */ - -#include /* for firmware download */ - -#if defined(_HIF_SDIO) -#include -#include -#endif - -#include - - -#include /* readw and writew */ - -#if WIRELESS_EXT > 12 -#include -#endif - -#include "version.h" -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#endif - -#include - -#include "gl_typedef.h" -#include "typedef.h" -#include "queue.h" -#include "gl_kal.h" -#if CFG_CHIP_RESET_SUPPORT - #include "gl_rst.h" -#endif -#include "hif.h" - - -#include "debug.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" - -#if CFG_ENABLE_AEE_MSG -#include -#endif - -extern BOOLEAN fgIsBusAccessFailed; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define GLUE_FLAG_HALT BIT(0) -#define GLUE_FLAG_INT BIT(1) -#define GLUE_FLAG_OID BIT(2) -#define GLUE_FLAG_TIMEOUT BIT(3) -#define GLUE_FLAG_TXREQ BIT(4) -#define GLUE_FLAG_SUB_MOD_INIT BIT(5) -#define GLUE_FLAG_SUB_MOD_EXIT BIT(6) -#define GLUE_FLAG_SUB_MOD_MULTICAST BIT(7) -#define GLUE_FLAG_FRAME_FILTER BIT(8) -#define GLUE_FLAG_HALT_BIT (0) -#define GLUE_FLAG_INT_BIT (1) -#define GLUE_FLAG_OID_BIT (2) -#define GLUE_FLAG_TIMEOUT_BIT (3) -#define GLUE_FLAG_TXREQ_BIT (4) -#define GLUE_FLAG_SUB_MOD_INIT_BIT (5) -#define GLUE_FLAG_SUB_MOD_EXIT_BIT (6) -#define GLUE_FLAG_SUB_MOD_MULTICAST_BIT (7) -#define GLUE_FLAG_FRAME_FILTER_BIT (8) - - - -#define GLUE_BOW_KFIFO_DEPTH (1024) -//#define GLUE_BOW_DEVICE_NAME "MT6620 802.11 AMP" -#define GLUE_BOW_DEVICE_NAME "ampc0" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _GL_WPA_INFO_T { - UINT_32 u4WpaVersion; - UINT_32 u4KeyMgmt; - UINT_32 u4CipherGroup; - UINT_32 u4CipherPairwise; - UINT_32 u4AuthAlg; - BOOLEAN fgPrivacyInvoke; -#if CFG_SUPPORT_802_11W - UINT_32 u4Mfp; -#endif -} GL_WPA_INFO_T, *P_GL_WPA_INFO_T; - -typedef enum _ENUM_RSSI_TRIGGER_TYPE { - ENUM_RSSI_TRIGGER_NONE, - ENUM_RSSI_TRIGGER_GREATER, - ENUM_RSSI_TRIGGER_LESS, - ENUM_RSSI_TRIGGER_TRIGGERED, - ENUM_RSSI_TRIGGER_NUM -} ENUM_RSSI_TRIGGER_TYPE; - -#if CFG_ENABLE_WIFI_DIRECT -typedef enum _ENUM_SUB_MODULE_IDX_T { - P2P_MODULE = 0, - SUB_MODULE_NUM -} ENUM_SUB_MODULE_IDX_T; - -typedef enum _ENUM_NET_REG_STATE_T { - ENUM_NET_REG_STATE_UNREGISTERED, - ENUM_NET_REG_STATE_REGISTERING, - ENUM_NET_REG_STATE_REGISTERED, - ENUM_NET_REG_STATE_UNREGISTERING, - ENUM_NET_REG_STATE_NUM -} ENUM_NET_REG_STATE_T; - -#endif - -typedef struct _GL_IO_REQ_T { - QUE_ENTRY_T rQueEntry; - //wait_queue_head_t cmdwait_q; - BOOL fgRead; - BOOL fgWaitResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOL fgIsP2pOid; -#endif - P_ADAPTER_T prAdapter; - PFN_OID_HANDLER_FUNC pfnOidHandler; - PVOID pvInfoBuf; - UINT_32 u4InfoBufLen; - PUINT_32 pu4QryInfoLen; - WLAN_STATUS rStatus; - UINT_32 u4Flag; -} GL_IO_REQ_T, *P_GL_IO_REQ_T; - -#if CFG_ENABLE_BT_OVER_WIFI -typedef struct _GL_BOW_INFO { - BOOLEAN fgIsRegistered; - dev_t u4DeviceNumber; /* dynamic device number */ -// struct kfifo *prKfifo; /* for buffering indicated events */ - struct kfifo rKfifo; /* for buffering indicated events */ - spinlock_t rSpinLock; /* spin lock for kfifo */ - struct cdev cdev; - UINT_32 u4FreqInKHz; /* frequency */ - - UINT_8 aucRole[CFG_BOW_PHYSICAL_LINK_NUM]; /* 0: Responder, 1: Initiator */ - ENUM_BOW_DEVICE_STATE aeState[CFG_BOW_PHYSICAL_LINK_NUM]; - PARAM_MAC_ADDRESS arPeerAddr[CFG_BOW_PHYSICAL_LINK_NUM]; - - wait_queue_head_t outq; - - #if CFG_BOW_SEPARATE_DATA_PATH - /* Device handle */ - struct net_device *prDevHandler; - BOOLEAN fgIsNetRegistered; - #endif - -} GL_BOW_INFO, *P_GL_BOW_INFO; -#endif - -/* -* type definition of pointer to p2p structure -*/ -typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; - -struct _GLUE_INFO_T { - /* Device handle */ - struct net_device *prDevHandler; - - /* Device Index(index of arWlanDevInfo[]) */ - INT_32 i4DevIdx; - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* Wireless statistics struct net_device */ - struct iw_statistics rIwStats; - - /* spinlock to sync power save mechanism */ - spinlock_t rSpinLock[SPIN_LOCK_NUM]; - - /* semaphore for ioctl */ - struct semaphore ioctl_sem; - - UINT_32 u4Flag; /* GLUE_FLAG_XXX */ - UINT_32 u4PendFlag; - //UINT_32 u4TimeoutFlag; - UINT_32 u4OidCompleteFlag; - UINT_32 u4ReadyFlag; /* check if card is ready */ - - /* Number of pending frames, also used for debuging if any frame is - * missing during the process of unloading Driver. - * - * NOTE(Kevin): In Linux, we also use this variable as the threshold - * for manipulating the netif_stop(wake)_queue() func. - */ - INT_32 ai4TxPendingFrameNumPerQueue[4][CFG_MAX_TXQ_NUM]; - INT_32 i4TxPendingFrameNum; - INT_32 i4TxPendingSecurityFrameNum; - - /* current IO request for kalIoctl */ - GL_IO_REQ_T OidEntry; - - /* registry info*/ - REG_INFO_T rRegInfo; - - /* firmware */ - struct firmware *prFw; - - /* Host interface related information */ - /* defined in related hif header file */ - GL_HIF_INFO_T rHifInfo; - - /*! \brief wext wpa related information */ - GL_WPA_INFO_T rWpaInfo; - - - /* Pointer to ADAPTER_T - main data structure of internal protocol stack */ - P_ADAPTER_T prAdapter; - -#ifdef WLAN_INCLUDE_PROC - struct proc_dir_entry *pProcRoot; -#endif /* WLAN_INCLUDE_PROC */ - - /* Indicated media state */ - ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicated; - - /* Device power state D0~D3 */ - PARAM_DEVICE_POWER_STATE ePowerState; - - struct completion rScanComp; /* indicate scan complete */ - struct completion rHaltComp; /* indicate main thread halt complete */ - struct completion rPendComp; /* indicate main thread halt complete */ -#if CFG_ENABLE_WIFI_DIRECT - struct completion rSubModComp; /*indicate sub module init or exit complete*/ -#endif - WLAN_STATUS rPendStatus; - - QUE_T rTxQueue; - - - /* OID related */ - QUE_T rCmdQueue; - //PVOID pvInformationBuffer; - //UINT_32 u4InformationBufferLength; - //PVOID pvOidEntry; - //PUINT_8 pucIOReqBuff; - //QUE_T rIOReqQueue; - //QUE_T rFreeIOReqQueue; - - wait_queue_head_t waitq; - struct task_struct *main_thread; - - struct timer_list tickfn; - - -#if CFG_SUPPORT_EXT_CONFIG - UINT_16 au2ExtCfg[256]; /* NVRAM data buffer */ - UINT_32 u4ExtCfgLength; /* 0 means data is NOT valid */ -#endif - -#if 1//CFG_SUPPORT_WAPI - /* Should be large than the PARAM_WAPI_ASSOC_INFO_T */ - UINT_8 aucWapiAssocInfoIEs[42]; - UINT_16 u2WapiAssocInfoIESz; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - GL_BOW_INFO rBowInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - P_GL_P2P_INFO_T prP2PInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - /* Wireless statistics struct net_device */ - struct iw_statistics rP2pIwStats; -#endif -#endif - BOOLEAN fgWpsActive; - UINT_8 aucWSCIE[500]; /*for probe req*/ - UINT_16 u2WSCIELen; - UINT_8 aucWSCAssocInfoIE[200]; /*for Assoc req*/ - UINT_16 u2WSCAssocInfoIELen; - - /* NVRAM availability */ - BOOLEAN fgNvramAvailable; - - BOOLEAN fgMcrAccessAllowed; - - /* MAC Address Overriden by IOCTL */ - BOOLEAN fgIsMacAddrOverride; - PARAM_MAC_ADDRESS rMacAddrOverride; - - SET_TXPWR_CTRL_T rTxPwr; - - /* for cfg80211 scan done indication */ - struct cfg80211_scan_request *prScanRequest; - - /* to indicate registered or not */ - BOOLEAN fgIsRegistered; - - /* for cfg80211 connected indication */ - UINT_32 u4RspIeLength; - UINT_8 aucRspIe[CFG_CFG80211_IE_BUF_LEN]; - - UINT_32 u4ReqIeLength; - UINT_8 aucReqIe[CFG_CFG80211_IE_BUF_LEN]; -}; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) - /* linux 2.4 */ - typedef void (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#else - typedef irqreturn_t (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#endif - -typedef void (*PFN_LINUX_TIMER_FUNC)(unsigned long); - - -/* generic sub module init/exit handler -* now, we only have one sub module, p2p -*/ -#if CFG_ENABLE_WIFI_DIRECT -typedef BOOLEAN (*SUB_MODULE_INIT)(P_GLUE_INFO_T prGlueInfo); -typedef BOOLEAN (*SUB_MODULE_EXIT)(P_GLUE_INFO_T prGlueInfo); - -typedef struct _SUB_MODULE_HANDLER { - SUB_MODULE_INIT subModInit; - SUB_MODULE_EXIT subModExit; - BOOLEAN fgIsInited; -} SUB_MODULE_HANDLER, *P_SUB_MODULE_HANDLER; - -#endif - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_MODE_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_MODE_PARAMS, *P_NL80211_DRIVER_TEST_MODE_PARAMS; - -/*SW CMD */ -typedef struct _NL80211_DRIVER_SW_CMD_PARAMS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 set; - unsigned long adr; - unsigned long data; -}NL80211_DRIVER_SW_CMD_PARAMS, *P_NL80211_DRIVER_SW_CMD_PARAMS; - -struct iw_encode_exts { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 addr[MAC_ADDR_LEN]; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[32]; -}; - -/*SET KEY EXT */ -typedef struct _NL80211_DRIVER_SET_KEY_EXTS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 key_index; - UINT_8 key_len; - struct iw_encode_exts ext; -}NL80211_DRIVER_SET_KEY_EXTS, *P_NL80211_DRIVER_SET_KEY_EXTS; - - -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Glue Layer */ -/*----------------------------------------------------------------------------*/ -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - #define GLUE_SPIN_LOCK_DECLARATION() - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - #define GLUE_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags = 0 - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_irqsave(&(prGlueInfo)->rSpinLock[rLockCategory], __u4Flags); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_irqrestore(&(prGlueInfo->rSpinLock[rLockCategory]), __u4Flags); \ - } -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define GLUE_GET_PKT_QUEUE_ENTRY(_p) \ - (&( ((struct sk_buff *)(_p))->cb[0] )) - -#define GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) \ - ((P_NATIVE_PACKET) ((UINT_32)_prQueueEntry - offsetof(struct sk_buff, cb[0])) ) - -#define GLUE_SET_PKT_FLAG_802_11(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(7)) - -#define GLUE_SET_PKT_FLAG_1X(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(6)) - -#define GLUE_SET_PKT_FLAG_PAL(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(5)) - -#define GLUE_SET_PKT_FLAG_P2P(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(4)) - - - -#define GLUE_SET_PKT_TID(_p, _tid) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= (((UINT_8)((_tid) & (BITS(0,3)))))) - - -#define GLUE_SET_PKT_FRAME_LEN(_p, _u2PayloadLen) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) = (UINT_16)(_u2PayloadLen)) - -#define GLUE_GET_PKT_FRAME_LEN(_p) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) ) - - -#define GLUE_GET_PKT_IS_802_11(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(7))) - -#define GLUE_GET_PKT_IS_1X(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(6))) - -#define GLUE_GET_PKT_TID(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BITS(0,3))) - - -#define GLUE_GET_PKT_IS_PAL(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(5))) - -#define GLUE_GET_PKT_IS_P2P(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(4))) - - -#define GLUE_SET_PKT_HEADER_LEN(_p, _ucMacHeaderLen) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) = (UINT_8)(_ucMacHeaderLen)) - -#define GLUE_GET_PKT_HEADER_LEN(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) ) - -#define GLUE_SET_PKT_ARRIVAL_TIME(_p, _rSysTime) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) = (OS_SYSTIME)(_rSysTime)) - -#define GLUE_GET_PKT_ARRIVAL_TIME(_p) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) ) - -/* Check validity of prDev, private data, and pointers */ -#define GLUE_CHK_DEV(prDev) \ - ((prDev && *((P_GLUE_INFO_T *) netdev_priv(prDev))) ? TRUE : FALSE) - -#define GLUE_CHK_PR2(prDev, pr2) \ - ((GLUE_CHK_DEV(prDev) && pr2) ? TRUE : FALSE) - -#define GLUE_CHK_PR3(prDev, pr2, pr3) \ - ((GLUE_CHK_PR2(prDev, pr2) && pr3) ? TRUE : FALSE) - -#define GLUE_CHK_PR4(prDev, pr2, pr3, pr4) \ - ((GLUE_CHK_PR3(prDev, pr2, pr3) && pr4) ? TRUE : FALSE) - -#define GLUE_SET_EVENT(pr) \ - kalSetEvent(pr) - -#define GLUE_INC_REF_CNT(_refCount) atomic_inc((atomic_t *)&(_refCount)) -#define GLUE_DEC_REF_CNT(_refCount) atomic_dec((atomic_t *)&(_refCount)) - - -#define DbgPrint(...) -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#ifdef WLAN_INCLUDE_PROC -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ); - -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ); -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI -BOOLEAN -glRegisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -glUnregisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ); - -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ); - -BOOLEAN -wlanIsLaunched( - VOID - ); - -void -p2pSetMulticastListWorkQueueWrapper( - P_GLUE_INFO_T prGlueInfo - ); - - - -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_OS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_ioctl.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_ioctl.h deleted file mode 100755 index 6e8bd2a3bbf1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_ioctl.h +++ /dev/null @@ -1,1088 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_ioctl.h#9 $ -*/ - -/*! \file gl_p2p_ioctl.h - \brief This file is for custom ioctls for Wi-Fi Direct only -*/ - - - -/* -** $Log: gl_p2p_ioctl.h $ -** -** 07 26 2012 yuche.tsai -** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot -** Update driver code of ALPS.JB for hot-spot. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 03 25 2011 wh.su - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 03 29 2011 wh.su - * [WCXRP00000095] [MT6620 Wi-Fi] [FW] Refine the P2P GO send broadcast protected code - * add the set power and get power function sample. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 01 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the ioctl sumcmd to meet the p2p_supplicant setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int define for p2p parameter. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * adjust the set wsc ie structure. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 07 2010 cp.wu - * [WCXRP00000237] [MT6620 Wi-Fi][Wi-Fi Direct][Driver] Add interface for supporting service discovery - * define a pair of i/o control for multiplexing layer - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 20 2010 yuche.tsai - * NULL - * Refine a function parameter name. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * -*/ - -#ifndef _GL_P2P_IOCTL_H -#define _GL_P2P_IOCTL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - #include - #include -#endif - -#include "wlan_oid.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// (WirelessExtension) Private I/O Controls -#define IOC_P2P_CFG_DEVICE (SIOCIWFIRSTPRIV+0) -#define IOC_P2P_PROVISION_COMPLETE (SIOCIWFIRSTPRIV+2) -#define IOC_P2P_START_STOP_DISCOVERY (SIOCIWFIRSTPRIV+4) -#define IOC_P2P_DISCOVERY_RESULTS (SIOCIWFIRSTPRIV+5) -#define IOC_P2P_WSC_BEACON_PROBE_RSP_IE (SIOCIWFIRSTPRIV+6) -#define IOC_P2P_GO_WSC_IE IOC_P2P_WSC_BEACON_PROBE_RSP_IE -#define IOC_P2P_CONNECT_DISCONNECT (SIOCIWFIRSTPRIV+8) -#define IOC_P2P_PASSWORD_READY (SIOCIWFIRSTPRIV+10) -//#define IOC_P2P_SET_PWR_MGMT_PARAM (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_SET_INT (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_GET_STRUCT (SIOCIWFIRSTPRIV+13) -#define IOC_P2P_SET_STRUCT (SIOCIWFIRSTPRIV+14) -#define IOC_P2P_GET_REQ_DEVICE_INFO (SIOCIWFIRSTPRIV+15) - -#define PRIV_CMD_INT_P2P_SET 0 - -// IOC_P2P_PROVISION_COMPLETE (iw_point . flags) -#define P2P_PROVISIONING_SUCCESS 0 -#define P2P_PROVISIONING_FAIL 1 - -// IOC_P2P_START_STOP_DISCOVERY (iw_point . flags) -#define P2P_STOP_DISCOVERY 0 -#define P2P_START_DISCOVERY 1 - -// IOC_P2P_CONNECT_DISCONNECT (iw_point . flags) -#define P2P_CONNECT 0 -#define P2P_DISCONNECT 1 - -// IOC_P2P_START_STOP_DISCOVERY (scan_type) -#define P2P_SCAN_FULL_AND_FIND 0 -#define P2P_SCAN_FULL 1 -#define P2P_SCAN_SEARCH_AND_LISTEN 2 -#define P2P_LISTEN 3 - -// IOC_P2P_GET_STRUCT/IOC_P2P_SET_STRUCT -#define P2P_SEND_SD_RESPONSE 0 -#define P2P_GET_SD_REQUEST 1 -#define P2P_SEND_SD_REQUEST 2 -#define P2P_GET_SD_RESPONSE 3 -#define P2P_TERMINATE_SD_PHASE 4 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Wireless Extension: Private I/O Control */ -/*----------------------------------------------------------------------------*/ -typedef struct iw_p2p_cfg_device_type { - void __user *ssid; - UINT_8 ssid_len; - UINT_8 pri_device_type[8]; - UINT_8 snd_device_type[8]; - void __user *device_name; - UINT_8 device_name_len; - UINT_8 intend; - UINT_8 persistence; - UINT_8 sec_mode; - UINT_8 ch; - UINT_8 ch_width; /* 0: 20 Mhz 1:20/40 Mhz auto */ - UINT_8 max_scb; -} IW_P2P_CFG_DEVICE_TYPE, *P_IW_P2P_CFG_DEVICE_TYPE; - -typedef struct iw_p2p_hostapd_param { - UINT_8 cmd; - UINT_8 rsv[3]; - UINT_8 sta_addr[6]; - void __user *data; - UINT_16 len; -} IW_P2P_HOSTAPD_PARAM, *P_IW_P2P_HOSTAPD_PARAM; - -typedef struct iw_p2p_req_device_type { - UINT_8 scan_type; /* 0: Full scan + Find - * 1: Full scan - * 2: Scan (Search +Listen) - * 3: Listen - * other : reserved - */ - UINT_8 pri_device_type[8]; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_REQ_DEVICE_TYPE, *P_IW_P2P_REQ_DEVICE_TYPE; - -typedef struct iw_p2p_connect_device { - UINT_8 sta_addr[6]; - UINT_8 p2pRole; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 authPeer; /* 1: auth peer invitation request */ - UINT_8 intend_config_method; /* Request Peer Device used config method */ -} IW_P2P_CONNECT_DEVICE, *P_IW_P2P_CONNECT_DEVICE; - -typedef struct iw_p2p_password_ready { - UINT_8 active_config_method; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_PASSWORD_READY, *P_IW_P2P_PASSWORD_READY; - -typedef struct iw_p2p_device_req { - UINT_8 name[33]; - UINT_32 name_len; - UINT_8 device_addr[6]; - UINT_8 device_type; - INT_32 config_method; - INT_32 active_config_method; -} IW_P2P_DEVICE_REQ, *P_IW_P2P_DEVICE_REQ; - -typedef struct iw_p2p_transport_struct { - UINT_32 u4CmdId; - UINT_32 inBufferLength; - UINT_32 outBufferLength; - UINT_8 aucBuffer[16]; -} IW_P2P_TRANSPORT_STRUCT, *P_IW_P2P_TRANSPORT_STRUCT; - -// For Invitation -typedef struct iw_p2p_ioctl_invitation_struct { - UINT_8 aucDeviceID[6]; - UINT_8 aucGroupID[6]; // BSSID - UINT_8 aucSsid[32]; - UINT_32 u4SsidLen; - UINT_8 ucReinvoke; -} IW_P2P_IOCTL_INVITATION_STRUCT, *P_IW_P2P_IOCTL_INVITATION_STRUCT; - -typedef struct iw_p2p_ioctl_abort_invitation { - UINT_8 dev_addr[6]; -} IW_P2P_IOCTL_ABORT_INVITATION, *P_IW_P2P_IOCTL_ABORT_INVITATION; - -typedef struct iw_p2p_ioctl_invitation_indicate { - UINT_8 dev_addr[6]; - UINT_8 group_bssid[6]; - INT_32 config_method; /* peer device supported config method */ - UINT_8 dev_name[32]; /* for reinvoke */ - UINT_32 name_len; - UINT_8 operating_channel; /* for re-invoke, target operating channel */ - UINT_8 invitation_type; /* invitation or re-invoke */ -} IW_P2P_IOCTL_INVITATION_INDICATE, *P_IW_P2P_IOCTL_INVITATION_INDICATE; - -typedef struct iw_p2p_ioctl_invitation_status { - UINT_32 status_code; -} IW_P2P_IOCTL_INVITATION_STATUS, *P_IW_P2P_IOCTL_INVITATION_STATUS; - -//For Formation -typedef struct iw_p2p_ioctl_start_formation { - UINT_8 dev_addr[6]; /* bssid */ - UINT_8 role; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 auth; /* 1: auth peer invitation request */ - UINT_8 config_method; /* Request Peer Device used config method */ -}IW_P2P_IOCTL_START_FORMATION, *P_IW_P2P_IOCTL_START_FORMATION; - -/* SET_STRUCT / GET_STRUCT */ -typedef enum _ENUM_P2P_CMD_ID_T { - P2P_CMD_ID_SEND_SD_RESPONSE = 0, /* 0x00 (Set) */ - P2P_CMD_ID_GET_SD_REQUEST, /* 0x01 (Get) */ - P2P_CMD_ID_SEND_SD_REQUEST, /* 0x02 (Set) */ - P2P_CMD_ID_GET_SD_RESPONSE, /* 0x03 (Get) */ - P2P_CMD_ID_TERMINATE_SD_PHASE, /* 0x04 (Set) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - P2P_CMD_ID_SEC_CHECK, /* 0x05(Set) */ -#endif - P2P_CMD_ID_INVITATION, /* 0x06 (Set) */ - P2P_CMD_ID_INVITATION_INDICATE, /* 0x07 (Get) */ - P2P_CMD_ID_INVITATION_STATUS, /* 0x08 (Get) */ - P2P_CMD_ID_INVITATION_ABORT, /* 0x09 (Set) */ - P2P_CMD_ID_START_FORMATION, /* 0x0A (Set) */ - P2P_CMD_ID_P2P_VERSION, /* 0x0B (Set/Get) */ - P2P_CMD_ID_GET_CH_LIST = 12, /* 0x0C (Get) */ - P2P_CMD_ID_GET_OP_CH = 14 /* 0x0E (Get) */ -} ENUM_P2P_CMD_ID_T, *P_ENUM_P2P_CMD_ID_T; - -/* Service Discovery */ -typedef struct iw_p2p_cmd_send_sd_response { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_RESPONSE, *P_IW_P2P_CMD_SEND_SD_RESPONSE; - -typedef struct iw_p2p_cmd_get_sd_request { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_REQUEST, *P_IW_P2P_CMD_GET_SD_REQUEST; - -typedef struct iw_p2p_cmd_send_service_discovery_request { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_REQUEST, *P_IW_P2P_CMD_SEND_SD_REQUEST; - -typedef struct iw_p2p_cmd_get_sd_response { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_RESPONSE, *P_IW_P2P_CMD_GET_SD_RESPONSE; - -typedef struct iw_p2p_cmd_terminate_sd_phase { - PARAM_MAC_ADDRESS rPeerAddr; -} IW_P2P_CMD_TERMINATE_SD_PHASE, *P_IW_P2P_CMD_TERMINATE_SD_PHASE; - -typedef struct iw_p2p_version { - UINT_32 u4Version; -} IW_P2P_VERSION, *P_IW_P2P_VERSION; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros used for cfg80211 */ -#define RATETAB_ENT(_rate, _rateid, _flags) \ - { \ - .bitrate = (_rate), \ - .hw_value = (_rateid), \ - .flags = (_flags), \ - } - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) -int mtk_p2p_cfg80211_change_iface( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, u32 *flags, - struct vif_params *params - ); - -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - -int -mtk_p2p_cfg80211_set_default_key( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - -int mtk_p2p_cfg80211_scan( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ); - -int mtk_p2p_cfg80211_connect( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ); - -int mtk_p2p_cfg80211_disconnect( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ); - -int mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ); - -int mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ); - -int mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ); - -int mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ); - -int mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ); - -int -mtk_p2p_cfg80211_change_bss( - struct wiphy * wiphy, - struct net_device * dev, - struct bss_parameters * params - ); - -int -mtk_p2p_cfg80211_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - struct ieee80211_channel * chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 * cookie - ); - -int -mtk_p2p_cfg80211_cancel_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - u64 cookie - ); - -int -mtk_p2p_cfg80211_deauth( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_deauth_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); - - -int -mtk_p2p_cfg80211_disassoc( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_disassoc_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - -int -mtk_p2p_cfg80211_start_ap( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ); - - -int -mtk_p2p_cfg80211_change_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ); - -int -mtk_p2p_cfg80211_mgmt_tx( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie); - -#else -int -mtk_p2p_cfg80211_add_set_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ); - -int -mtk_p2p_cfg80211_mgmt_tx( - struct wiphy * wiphy, - struct net_device * dev, - struct ieee80211_channel * chan, - bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 * buf, - size_t len, - u64 *cookie - ); - -#endif - - -int -mtk_p2p_cfg80211_stop_ap( - struct wiphy * wiphy, - struct net_device * dev - ); - - - -int -mtk_p2p_cfg80211_del_station( - struct wiphy * wiphy, - struct net_device * dev, - u8 * mac - ); - -int -mtk_p2p_cfg80211_set_channel( - IN struct wiphy * wiphy, - IN struct net_device * dev, - IN struct ieee80211_channel * chan, - IN enum nl80211_channel_type channel_type - ); - -int -mtk_p2p_cfg80211_set_bitrate_mask( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ); - - -void -mtk_p2p_cfg80211_mgmt_frame_register( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - -#endif - -/* I/O control handlers */ - -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_key ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls takes use of iw_handler */ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls for IOC_SET_STRUCT/IOC_GET_STRUCT */ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* IOC_SET_STRUCT/IOC_GET_STRUCT: Service Discovery */ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -#if CFG_SUPPORT_ANTI_PIRACY -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); -#endif - -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - - -void -mtk_p2p_wext_set_Multicastlist( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -int -mtk_p2p_wext_get_rssi( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats( - struct net_device *prDev - ); - -#endif - -int -mtk_p2p_wext_set_txpow( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_P2P_IOCTL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_kal.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_kal.h deleted file mode 100755 index 9a20c26b406f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_kal.h +++ /dev/null @@ -1,395 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_kal.h#2 $ -*/ - -/*! \file gl_p2p_kal.h - \brief Declaration of KAL functions for Wi-Fi Direct support - - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - - - -/* -** $Log: gl_p2p_kal.h $ -** -** 08 29 2012 chinglan.wang -** [ALPS00349655] [Need Patch] [Volunteer Patch] [ALPS.JB] Daily build warning on [mt6575_phone_mhl-eng] -** . - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 15 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Add group BSSID in invitation request indication. - * The BSSID is used for APP to decide the configure method. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 03 19 2011 terry.wu - * [WCXRP00000577] [MT6620 Wi-Fi][Driver][FW] Create V2.0 branch for firmware and driver - * create V2.0 p2p driver release based on label "MT6620_WIFI_P2P_DRIVER_V2_0_2100_0319_2011" from main trunk. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * -*/ - -#ifndef _GL_P2P_KAL_H -#define _GL_P2P_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_p2p.h" -#include "gl_kal.h" -#include "gl_wext_priv.h" -#include "gl_p2p_ioctl.h" -#include "nic/p2p.h" - - -#if DBG - extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/* Service Discovery */ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Wi-Fi Direct handling */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ); - -VOID -kalP2PUpdateAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ); - -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ); - -BOOLEAN -kalP2PGetCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalP2PGetTkipCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -BOOLEAN -kalP2PGetCcmpCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ); - -UINT_8 -kalP2PGetWscMode( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_16 -kalP2PCalWSC_IELen( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ); - -VOID -kalP2PGenWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ); - - -VOID -kalP2PUpdateWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ); - - - -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ); - -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ); - -VOID -kalP2PInvitationIndication( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ); - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -#if CFG_SUPPORT_ANTI_PIRACY -VOID -kalP2PIndicateSecCheckRsp( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID -kalP2PIndicateChannelReady( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ); - -VOID -kalP2PIndicateScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ); - -VOID -kalP2PIndicateBssInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ); - -VOID -kalP2PIndicateRxMgmtFrame( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ); - -VOID -kalP2PIndicateMgmtTxStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ); - -VOID -kalP2PIndicateChannelExpired( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -kalP2PGCIndicateConnectionStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ); - - -VOID -kalP2PGOStationUpdate( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ); - -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ); - -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ); - -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ); - -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ); - -#endif /* _GL_P2P_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_os.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_os.h deleted file mode 100755 index 49a90732c123..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_p2p_os.h +++ /dev/null @@ -1,194 +0,0 @@ -/* -** $Id: -//Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/os/linux/include/gl_p2p_os.h#28 $ -*/ - -/*! \file gl_p2p_os.h - \brief List the external reference to OS for p2p GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - - - - - -#ifndef _GL_P2P_OS_H -#define _GL_P2P_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -struct _GL_P2P_INFO_T { - - /* Device handle */ - struct net_device *prDevHandler; - - #if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* cfg80211 */ - struct wireless_dev wdev; - - struct cfg80211_scan_request *prScanRequest; - - UINT_64 u8Cookie; - - /* Generation for station list update. */ - INT_32 i4Generation; - - UINT_32 u4OsMgmtFrameFilter; - - #endif - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* glue layer variables */ - /*move to glueinfo->adapter*/ - // BOOLEAN fgIsRegistered; - UINT_32 u4FreqInKHz; /* frequency */ - UINT_8 ucRole; /* 0: P2P Device, 1: Group Client, 2: Group Owner */ - UINT_8 ucIntent; /* range: 0-15 */ - UINT_8 ucScanMode; /* 0: Search & Listen, 1: Scan without probe response */ - - ENUM_PARAM_MEDIA_STATE_T eState; - UINT_32 u4PacketFilter; - PARAM_MAC_ADDRESS aucMCAddrList[MAX_NUM_GROUP_ADDR]; - - /* connection-requested peer information */ - UINT_8 aucConnReqDevName[32]; - INT_32 u4ConnReqNameLength; - PARAM_MAC_ADDRESS rConnReqPeerAddr; - PARAM_MAC_ADDRESS rConnReqGroupAddr; /* For invitation group. */ - UINT_8 ucConnReqDevType; - INT_32 i4ConnReqConfigMethod; - INT_32 i4ConnReqActiveConfigMethod; - - UINT_32 u4CipherPairwise; - UINT_8 ucWSCRunning; - - UINT_8 aucWSCIE[3][400]; /* 0 for beacon, 1 for probe req, 2 for probe response */ - UINT_16 u2WSCIELen[3]; - - UINT_8 ucOperatingChnl; - UINT_8 ucInvitationType; - - UINT_32 u4InvStatus; - - /* For SET_STRUCT/GET_STRUCT */ - UINT_8 aucOidBuf[4096]; - -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - UINT_8 aucSecCheck[256]; - UINT_8 aucSecCheckRsp[256]; -#endif - - /* Hotspot Client Management */ - PARAM_MAC_ADDRESS aucblackMACList[8]; - UINT_8 ucMaxClients; - -}; - - -BOOLEAN -p2pRegisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pUnregisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -p2pSetMode( - IN BOOLEAN fgIsAPMOde - ); - - -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ); - -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_rst.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_rst.h deleted file mode 100755 index b85978a80e76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_rst.h +++ /dev/null @@ -1,131 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_rst.h#1 $ -*/ - -/*! \file gl_rst.h - \brief Declaration of functions and finite state machine for - MT6620 Whole-Chip Reset Mechanism -*/ - - - - -#ifndef _GL_RST_H -#define _GL_RST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* duplicated from wmt_exp.h for better driver isolation */ -typedef enum _ENUM_WMTDRV_TYPE_T { - WMTDRV_TYPE_BT = 0, - WMTDRV_TYPE_FM = 1, - WMTDRV_TYPE_GPS = 2, - WMTDRV_TYPE_WIFI = 3, - WMTDRV_TYPE_WMT = 4, - WMTDRV_TYPE_STP = 5, - WMTDRV_TYPE_SDIO1 = 6, - WMTDRV_TYPE_SDIO2 = 7, - WMTDRV_TYPE_LPBK = 8, - WMTDRV_TYPE_MAX -} ENUM_WMTDRV_TYPE_T, *P_ENUM_WMTDRV_TYPE_T; - -typedef enum _ENUM_WMTMSG_TYPE_T { - WMTMSG_TYPE_POWER_ON = 0, - WMTMSG_TYPE_POWER_OFF = 1, - WMTMSG_TYPE_RESET = 2, - WMTMSG_TYPE_STP_RDY= 3, - WMTMSG_TYPE_HW_FUNC_ON= 4, - WMTMSG_TYPE_MAX -} ENUM_WMTMSG_TYPE_T, *P_ENUM_WMTMSG_TYPE_T; - -typedef enum _ENUM_WMTRSTMSG_TYPE_T{ - WMTRSTMSG_RESET_START = 0x0, - WMTRSTMSG_RESET_END = 0x1, - WMTRSTMSG_RESET_MAX, - WMTRSTMSG_RESET_INVALID = 0xff -} ENUM_WMTRSTMSG_TYPE_T, *P_ENUM_WMTRSTMSG_TYPE_T; - -typedef void (*PF_WMT_CB)( - ENUM_WMTDRV_TYPE_T, /* Source driver type */ - ENUM_WMTDRV_TYPE_T, /* Destination driver type */ - ENUM_WMTMSG_TYPE_T, /* Message type */ - void *, /* READ-ONLY buffer. Buffer is allocated and freed by WMT_drv. Client - can't touch this buffer after this function return. */ - unsigned int /* Buffer size in unit of byte */ - ); - - -typedef enum _ENUM_WIFI_NETLINK_GRP_T{ - WIFI_NETLINK_GRP_RESET, - WIFI_NETLINK_GRP_MAX -} ENUM_WIFI_NETLINK_GRP_T, *P_ENUM_WIFI_NETLINK_GRP_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/* Reset Initialization/Uninitialization */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ); - -VOID -glResetUninit( - VOID - ); - -VOID -glSendResetRequest( - VOID - ); - -BOOLEAN -kalIsResetting( - VOID - ); - - -#endif /* _GL_RST_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_sec.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_sec.h deleted file mode 100755 index 16f0af93be89..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_sec.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_sec.h#1 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - - - - -#ifndef _GL_SEC_H -#define _GL_SEC_H - -extern void handle_sec_msg_1(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_2(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_3(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_4(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_5(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_final(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); - -#endif /* _GL_SEC_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_typedef.h deleted file mode 100755 index e220b43c36ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_typedef.h +++ /dev/null @@ -1,279 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_typedef.h#1 $ -*/ - -/*! \file gl_typedef.h - \brief Definition of basic data type(os dependent). - - In this file we define the basic data type. -*/ - - - -/* -** $Log: gl_typedef.h $ - * - * 06 22 2012 cp.wu - * [WCXRP00001257] [MT6620][MT5931][MT6628][Driver][Linux] Modify KAL_HZ to align ms accuracy - * modify KAL_HZ to (1000) for correct definition. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\6 2009-08-18 22:57:14 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\5 2008-09-22 23:19:30 GMT mtk01461 -** Update comment for code review -** \main\maintrunk.MT5921\4 2008-09-05 17:25:16 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\3 2007-11-09 11:00:50 GMT mtk01425 -** 1. Use macro to unify network-to-host and host-to-network related functions -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_TYPEDEF_H -#define _GL_TYPEDEF_H - -#if defined(CONFIG_HAS_EARLYSUSPEND) -#include -#endif - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define HZ of timer tick for function kalGetTimeTick() */ -#define KAL_HZ (1000) - -/* Miscellaneous Equates */ -#ifndef FALSE - #define FALSE ((BOOL) 0) - #define TRUE ((BOOL) 1) -#endif /* FALSE */ - -#ifndef NULL - #if defined(__cplusplus) - #define NULL 0 - #else - #define NULL ((void *) 0) - #endif -#endif - -#if defined(CONFIG_HAS_EARLYSUSPEND) -typedef void (*early_suspend_callback)(struct early_suspend *h); -typedef void (*late_resume_callback) (struct early_suspend *h); -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for void */ -typedef void VOID, *PVOID, **PPVOID; - -/* Type definition for Boolean */ -typedef unsigned char BOOL, *PBOOL, BOOLEAN, *PBOOLEAN; - -/* Type definition for signed integers */ -typedef signed char CHAR, *PCHAR, **PPCHAR; -typedef signed char INT_8, *PINT_8, **PPINT_8; -typedef signed short INT_16, *PINT_16, **PPINT_16; -typedef signed long INT_32, *PINT_32, **PPINT_32; -typedef signed long long INT_64, *PINT_64, **PPINT_64; - -/* Type definition for unsigned integers */ -typedef unsigned char UCHAR, *PUCHAR, **PPUCHAR; -typedef unsigned char UINT_8, *PUINT_8, **PPUINT_8, *P_UINT_8; -typedef unsigned short UINT_16, *PUINT_16, **PPUINT_16; -typedef unsigned long ULONG, UINT_32, *PUINT_32, **PPUINT_32; -typedef unsigned long long UINT_64, *PUINT_64, **PPUINT_64; - -typedef unsigned long OS_SYSTIME, *POS_SYSTIME, **PPOS_SYSTIME; - - -/* Type definition of large integer (64bits) union to be comptaible with - * Windows definition, so we won't apply our own coding style to these data types. - * NOTE: LARGE_INTEGER must NOT be floating variable. - * : Check for big-endian compatibility. - */ -typedef union _LARGE_INTEGER { - struct { - UINT_32 LowPart; - INT_32 HighPart; - } u; - INT_64 QuadPart; -} LARGE_INTEGER, *PLARGE_INTEGER; - -typedef union _ULARGE_INTEGER { - struct { - UINT_32 LowPart; - UINT_32 HighPart; - } u; - UINT_64 QuadPart; -} ULARGE_INTEGER, *PULARGE_INTEGER; - - -typedef INT_32 (*probe_card)(PVOID pvData); -typedef VOID (*remove_card)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define IN //volatile -#define OUT //volatile - -#define __KAL_INLINE__ static __inline__ -#define __KAL_ATTRIB_PACKED__ __attribute__((__packed__)) -#define __KAL_ATTRIB_ALIGN_4__ __attribute__ ((aligned (4))) - - -#ifndef BIT -#define BIT(n) ((UINT_32) 1UL << (n)) -#endif /* BIT */ - -#ifndef BITS -/* bits range: for example BITS(16,23) = 0xFF0000 - * ==> (BIT(m)-1) = 0x0000FFFF ~(BIT(m)-1) => 0xFFFF0000 - * ==> (BIT(n+1)-1) = 0x00FFFFFF - */ -#define BITS(m,n) (~(BIT(m)-1) & ((BIT(n) - 1) | BIT(n))) -#endif /* BIT */ - - -/* This macro returns the byte offset of a named field in a known structure - type. - _type - structure name, - _field - field name of the structure */ -#ifndef OFFSET_OF - #define OFFSET_OF(_type, _field) ((UINT_32)&(((_type *)0)->_field)) -#endif /* OFFSET_OF */ - - -/* This macro returns the base address of an instance of a structure - * given the type of the structure and the address of a field within the - * containing structure. - * _addrOfField - address of current field of the structure, - * _type - structure name, - * _field - field name of the structure - */ -#ifndef ENTRY_OF - #define ENTRY_OF(_addrOfField, _type, _field) \ - ((_type *)((PINT_8)(_addrOfField) - (PINT_8)OFFSET_OF(_type, _field))) -#endif /* ENTRY_OF */ - - -/* This macro align the input value to the DW boundary. - * _value - value need to check - */ -#ifndef ALIGN_4 - #define ALIGN_4(_value) (((_value) + 3) & ~3u) -#endif /* ALIGN_4 */ - -/* This macro check the DW alignment of the input value. - * _value - value of address need to check - */ -#ifndef IS_ALIGN_4 - #define IS_ALIGN_4(_value) (((_value) & 0x3) ? FALSE : TRUE) -#endif /* IS_ALIGN_4 */ - -#ifndef IS_NOT_ALIGN_4 - #define IS_NOT_ALIGN_4(_value) (((_value) & 0x3) ? TRUE : FALSE) -#endif /* IS_NOT_ALIGN_4 */ - - -/* This macro evaluate the input length in unit of Double Word(4 Bytes). - * _value - value in unit of Byte, output will round up to DW boundary. - */ -#ifndef BYTE_TO_DWORD - #define BYTE_TO_DWORD(_value) ((_value + 3) >> 2) -#endif /* BYTE_TO_DWORD */ - -/* This macro evaluate the input length in unit of Byte. - * _value - value in unit of DW, output is in unit of Byte. - */ -#ifndef DWORD_TO_BYTE - #define DWORD_TO_BYTE(_value) ((_value) << 2) -#endif /* DWORD_TO_BYTE */ - -#if 1 // Little-Endian - #define CONST_NTOHS(_x) __constant_ntohs(_x) - - #define CONST_HTONS(_x) __constant_htons(_x) - - #define NTOHS(_x) ntohs(_x) - - #define HTONS(_x) htons(_x) - - #define NTOHL(_x) ntohl(_x) - - #define HTONL(_x) htonl(_x) - -#else // Big-Endian - - #define CONST_NTOHS(_x) - - #define CONST_HTONS(_x) - - #define NTOHS(_x) - - #define HTONS(_x) - -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_TYPEDEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_wext.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_wext.h deleted file mode 100755 index 7a5129f7a54d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_wext.h +++ /dev/null @@ -1,376 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_wext.h#1 $ -*/ - -/*! \file gl_wext.h - \brief This file is for Portable Driver linux wireless extension support. -*/ - - - -/* -** $Log: gl_wext.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\12 2009-10-20 17:38:33 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\11 2009-09-28 20:19:28 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\10 2009-09-03 12:12:35 GMT mtk01088 -** adding the function declaration -** \main\maintrunk.MT5921\9 2009-08-18 22:57:17 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\8 2008-08-29 16:59:07 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\7 2008-08-29 14:13:28 GMT mtk01088 -** adjust the header file for code refine -** \main\maintrunk.MT5921\6 2008-03-28 10:40:31 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\5 2008-03-11 14:51:08 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\4 2008-02-12 23:45:45 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\3 2007-11-06 19:36:19 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_H -#define _GL_WEXT_H - -#ifdef WIRELESS_EXT -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define KILO 1000 -#define RATE_5_5M 11 /* 5.5M */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PARAM_FIXED_IEs { - UINT_8 aucTimestamp[8]; - UINT_16 u2BeaconInterval; - UINT_16 u2Capabilities; -} PARAM_FIXED_IEs; - -typedef struct _PARAM_VARIABLE_IE_T { - UINT_8 ucElementID; - UINT_8 ucLength; - UINT_8 aucData[1]; -} PARAM_VARIABLE_IE_T, *P_PARAM_VARIABLE_IE_T; - - -#if WIRELESS_EXT < 18 - -#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses struct iw_mlme */ -/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ -#define IW_MLME_DEAUTH 0 -#define IW_MLME_DISASSOC 1 - -/*! \brief SIOCSIWMLME data */ -struct iw_mlme { - __u16 cmd; /*!< IW_MLME_* */ - __u16 reason_code; - struct sockaddr addr; -}; - -#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */ -#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */ -/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ -#define IW_AUTH_INDEX 0x0FFF -#define IW_AUTH_FLAGS 0xF000 -/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) - * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the - * parameter that is being set/get to; value will be read/written to - * struct iw_param value field) */ -#define IW_AUTH_WPA_VERSION 0 -#define IW_AUTH_CIPHER_PAIRWISE 1 -#define IW_AUTH_CIPHER_GROUP 2 -#define IW_AUTH_KEY_MGMT 3 -#define IW_AUTH_TKIP_COUNTERMEASURES 4 -#define IW_AUTH_DROP_UNENCRYPTED 5 -#define IW_AUTH_80211_AUTH_ALG 6 -#define IW_AUTH_WPA_ENABLED 7 -#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 -#define IW_AUTH_ROAMING_CONTROL 9 -#define IW_AUTH_PRIVACY_INVOKED 10 -#if CFG_SUPPORT_802_11W -#define IW_AUTH_MFP 12 - -#define IW_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define IW_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define IW_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/* IW_AUTH_WPA_VERSION values (bit field) */ -#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 -#define IW_AUTH_WPA_VERSION_WPA 0x00000002 -#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 - -/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ -#define IW_AUTH_CIPHER_NONE 0x00000001 -#define IW_AUTH_CIPHER_WEP40 0x00000002 -#define IW_AUTH_CIPHER_TKIP 0x00000004 -#define IW_AUTH_CIPHER_CCMP 0x00000008 -#define IW_AUTH_CIPHER_WEP104 0x00000010 - -/* IW_AUTH_KEY_MGMT values (bit field) */ -#define IW_AUTH_KEY_MGMT_802_1X 1 -#define IW_AUTH_KEY_MGMT_PSK 2 -#define IW_AUTH_KEY_MGMT_WPA_NONE 4 - -/* IW_AUTH_80211_AUTH_ALG values (bit field) */ -#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 -#define IW_AUTH_ALG_SHARED_KEY 0x00000002 -#define IW_AUTH_ALG_LEAP 0x00000004 - -/* IW_AUTH_ROAMING_CONTROL values */ -#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ -#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming - * control */ - -#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */ -#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */ -/* SIOCSIWENCODEEXT definitions */ -#define IW_ENCODE_SEQ_MAX_SIZE 8 -/* struct iw_encode_ext ->alg */ -#define IW_ENCODE_ALG_NONE 0 -#define IW_ENCODE_ALG_WEP 1 -#define IW_ENCODE_ALG_TKIP 2 -#define IW_ENCODE_ALG_CCMP 3 -#if CFG_SUPPORT_802_11W -#define IW_ENCODE_ALG_AES_CMAC 5 -#endif - -/* struct iw_encode_ext ->ext_flags */ -#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 -#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 -#define IW_ENCODE_EXT_GROUP_KEY 0x00000004 -#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008 - -struct iw_encode_ext { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - struct sockaddr addr; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[0]; -}; - -#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */ -#define IW_PMKSA_ADD 1 -#define IW_PMKSA_REMOVE 2 -#define IW_PMKSA_FLUSH 3 - -#define IW_PMKID_LEN 16 - -struct iw_pmksa { - __u32 cmd; /*!< IW_PMKSA_* */ - struct sockaddr bssid; - __u8 pmkid[IW_PMKID_LEN]; -}; - -#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..) - * (scan results); This includes id and - * length fields. One IWEVGENIE may - * contain more than one IE. Scan - * results may contain one or more - * IWEVGENIE events. */ -#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure - * (struct iw_michaelmicfailure) - */ -#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request. - * The data includes id and length - * fields and may contain more than one - * IE. This event is required in - * Managed mode if the driver - * generates its own WPA/RSN IE. This - * should be sent just before - * IWEVREGISTERED event for the - * association. */ -#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association - * Response. The data includes id and - * length fields and may contain more - * than one IE. This may be sent - * between IWEVASSOCREQIE and - * IWEVREGISTERED events for the - * association. */ -#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN - * pre-authentication - * (struct iw_pmkid_cand) */ - -#endif /* WIRELESS_EXT < 18 */ - -#if WIRELESS_EXT < 17 -/* Statistics flags (bitmask in updated) */ -#define IW_QUAL_QUAL_UPDATED 0x1 /* Value was updated since last read */ -#define IW_QUAL_LEVEL_UPDATED 0x2 -#define IW_QUAL_NOISE_UPDATED 0x4 -#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ -#define IW_QUAL_LEVEL_INVALID 0x20 -#define IW_QUAL_NOISE_INVALID 0x40 -#endif - -enum { - IEEE80211_FILTER_TYPE_BEACON = 1<<0, - IEEE80211_FILTER_TYPE_PROBE_REQ = 1<<1, - IEEE80211_FILTER_TYPE_PROBE_RESP = 1<<2, - IEEE80211_FILTER_TYPE_ASSOC_REQ = 1<<3, - IEEE80211_FILTER_TYPE_ASSOC_RESP = 1<<4, - IEEE80211_FILTER_TYPE_AUTH = 1<<5, - IEEE80211_FILTER_TYPE_DEAUTH = 1<<6, - IEEE80211_FILTER_TYPE_DISASSOC = 1<<7, - IEEE80211_FILTER_TYPE_ALL = 0xFF /* used to check the valid filter bits */ -}; - -#if CFG_SUPPORT_WAPI -#define IW_AUTH_WAPI_ENABLED 0x20 -#define IW_ENCODE_ALG_SMS4 0x20 -#endif - -#if CFG_SUPPORT_WAPI /* Android+ */ -#define IW_AUTH_KEY_MGMT_WAPI_PSK 3 -#define IW_AUTH_KEY_MGMT_WAPI_CERT 4 -#endif -#define IW_AUTH_KEY_MGMT_WPS 5 - -#if CFG_SUPPORT_802_11W -#define IW_AUTH_KEY_MGMT_802_1X_SHA256 7 -#define IW_AUTH_KEY_MGMT_PSK_SHA256 8 -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern const struct iw_handler_def wext_handler_def; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* wireless extensions' ioctls */ -int -wext_support_ioctl( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ); - -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ); - -void -wext_indicate_wext_event( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4DataLen - ); - -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ); - -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ); - -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* WIRELESS_EXT */ - -#endif /* _GL_WEXT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_wext_priv.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_wext_priv.h deleted file mode 100755 index 4a40ce491bae..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/include/gl_wext_priv.h +++ /dev/null @@ -1,396 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_wext_priv.h#3 $ -*/ - -/*! \file gl_wext_priv.h - \brief This file includes private ioctl support. -*/ - - - -/* -** $Log: gl_wext_priv.h $ - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add a CMD ID for P2P driver version query. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\16 2009-09-29 16:47:23 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\15 2009-09-28 20:19:31 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\14 2009-05-07 22:26:06 GMT mtk01089 -** add private IO control for Linux BWCS -** \main\maintrunk.MT5921\13 2008-08-29 14:55:20 GMT mtk01088 -** adjust the code to meet coding style -** \main\maintrunk.MT5921\12 2008-07-16 15:23:45 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\11 2008-07-14 13:55:58 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\10 2008-07-09 00:20:24 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\9 2008-05-30 20:27:24 GMT mtk01461 -** Add POWER_MODE Private IOCTL cmd -** \main\maintrunk.MT5921\8 2008-04-17 23:06:44 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\7 2008-03-31 21:01:24 GMT mtk01461 -** Add priv IOCTL for VOIP settings -** \main\maintrunk.MT5921\6 2008-03-31 13:49:47 GMT mtk01461 -** add priv ioctl arg definition for turning on / off roaming -** \main\maintrunk.MT5921\5 2008-03-26 15:35:09 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\4 2008-03-11 14:51:11 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\3 2007-11-06 19:36:25 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_PRIV_H -#define _GL_WEXT_PRIV_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/* If it is set to 1, iwpriv will support register read/write */ -#define CFG_SUPPORT_PRIV_MCR_RW 1 - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* New wireless extensions API - SET/GET convention (even ioctl numbers are - * root only) - */ -#define IOCTL_SET_INT (SIOCIWFIRSTPRIV + 0) -#define IOCTL_GET_INT (SIOCIWFIRSTPRIV + 1) - -#define IOCTL_SET_ADDRESS (SIOCIWFIRSTPRIV + 2) -#define IOCTL_GET_ADDRESS (SIOCIWFIRSTPRIV + 3) -#define IOCTL_SET_STR (SIOCIWFIRSTPRIV + 4) -#define IOCTL_GET_STR (SIOCIWFIRSTPRIV + 5) -#define IOCTL_SET_KEY (SIOCIWFIRSTPRIV + 6) -#define IOCTL_GET_KEY (SIOCIWFIRSTPRIV + 7) -#define IOCTL_SET_STRUCT (SIOCIWFIRSTPRIV + 8) -#define IOCTL_GET_STRUCT (SIOCIWFIRSTPRIV + 9) -#define IOCTL_SET_STRUCT_FOR_EM (SIOCIWFIRSTPRIV + 11) -#define IOCTL_SET_INTS (SIOCIWFIRSTPRIV + 12) -#define IOCTL_GET_INTS (SIOCIWFIRSTPRIV + 13) - -#define PRIV_CMD_REG_DOMAIN 0 -#define PRIV_CMD_BEACON_PERIOD 1 -#define PRIV_CMD_ADHOC_MODE 2 - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - #define PRIV_CMD_CSUM_OFFLOAD 3 -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#define PRIV_CMD_ROAMING 4 -#define PRIV_CMD_VOIP_DELAY 5 -#define PRIV_CMD_POWER_MODE 6 - -#define PRIV_CMD_WMM_PS 7 -#define PRIV_CMD_BT_COEXIST 8 -#define PRIV_GPIO2_MODE 9 - -#define PRIV_CUSTOM_SET_PTA 10 -#define PRIV_CUSTOM_CONTINUOUS_POLL 11 -#define PRIV_CUSTOM_SINGLE_ANTENNA 12 -#define PRIV_CUSTOM_BWCS_CMD 13 -#define PRIV_CUSTOM_DISABLE_BEACON_DETECTION 14//later -#define PRIV_CMD_OID 15 -#define PRIV_SEC_MSG_OID 16 - -#define PRIV_CMD_TEST_MODE 17 -#define PRIV_CMD_TEST_CMD 18 -#define PRIV_CMD_ACCESS_MCR 19 -#define PRIV_CMD_SW_CTRL 20 - -#if 1 /* ANTI_PRIVCY */ -#define PRIV_SEC_CHECK_OID 21 -#endif - -#define PRIV_CMD_WSC_PROBE_REQ 22 - -#define PRIV_CMD_P2P_VERSION 23 - -#define PRIV_CMD_GET_CH_LIST 24 - -#define PRIV_CMD_SET_TX_POWER 25 - -#define PRIV_CMD_BAND_CONFIG 26 - -#define PRIV_CMD_DUMP_MEM 27 - -#define PRIV_CMD_P2P_MODE 28 - -/* 802.3 Objects (Ethernet) */ -#define OID_802_3_CURRENT_ADDRESS 0x01010102 - -/* IEEE 802.11 OIDs */ -#define OID_802_11_SUPPORTED_RATES 0x0D01020E -#define OID_802_11_CONFIGURATION 0x0D010211 - -/* PnP and PM OIDs, NDIS default OIDS */ -#define OID_PNP_SET_POWER 0xFD010101 - -#define OID_CUSTOM_OID_INTERFACE_VERSION 0xFFA0C000 - -/* MT5921 specific OIDs */ -#define OID_CUSTOM_BT_COEXIST_CTRL 0xFFA0C580 -#define OID_CUSTOM_POWER_MANAGEMENT_PROFILE 0xFFA0C581 -#define OID_CUSTOM_PATTERN_CONFIG 0xFFA0C582 -#define OID_CUSTOM_BG_SSID_SEARCH_CONFIG 0xFFA0C583 -#define OID_CUSTOM_VOIP_SETUP 0xFFA0C584 -#define OID_CUSTOM_ADD_TS 0xFFA0C585 -#define OID_CUSTOM_DEL_TS 0xFFA0C586 -#define OID_CUSTOM_SLT 0xFFA0C587 -#define OID_CUSTOM_ROAMING_EN 0xFFA0C588 -#define OID_CUSTOM_WMM_PS_TEST 0xFFA0C589 -#define OID_CUSTOM_COUNTRY_STRING 0xFFA0C58A -#define OID_CUSTOM_MULTI_DOMAIN_CAPABILITY 0xFFA0C58B -#define OID_CUSTOM_GPIO2_MODE 0xFFA0C58C -#define OID_CUSTOM_CONTINUOUS_POLL 0xFFA0C58D -#define OID_CUSTOM_DISABLE_BEACON_DETECTION 0xFFA0C58E - -/* CR1460, WPS privacy bit check disable */ -#define OID_CUSTOM_DISABLE_PRIVACY_CHECK 0xFFA0C600 - -/* Precedent OIDs */ -#define OID_CUSTOM_MCR_RW 0xFFA0C801 -#define OID_CUSTOM_EEPROM_RW 0xFFA0C803 -#define OID_CUSTOM_SW_CTRL 0xFFA0C805 -#define OID_CUSTOM_MEM_DUMP 0xFFA0C807 - - -/* RF Test specific OIDs */ -#define OID_CUSTOM_TEST_MODE 0xFFA0C901 -#define OID_CUSTOM_TEST_RX_STATUS 0xFFA0C903 -#define OID_CUSTOM_TEST_TX_STATUS 0xFFA0C905 -#define OID_CUSTOM_ABORT_TEST_MODE 0xFFA0C906 -#define OID_CUSTOM_MTK_WIFI_TEST 0xFFA0C911 - -/* BWCS */ -#define OID_CUSTOM_BWCS_CMD 0xFFA0C931 -#define OID_CUSTOM_SINGLE_ANTENNA 0xFFA0C932 -#define OID_CUSTOM_SET_PTA 0xFFA0C933 - -/* NVRAM */ -#define OID_CUSTOM_MTK_NVRAM_RW 0xFFA0C941 -#define OID_CUSTOM_CFG_SRC_TYPE 0xFFA0C942 -#define OID_CUSTOM_EEPROM_TYPE 0xFFA0C943 - - -#if CFG_SUPPORT_WAPI -#define OID_802_11_WAPI_MODE 0xFFA0CA00 -#define OID_802_11_WAPI_ASSOC_INFO 0xFFA0CA01 -#define OID_802_11_SET_WAPI_KEY 0xFFA0CA02 -#endif - -#if CFG_SUPPORT_WPS2 -#define OID_802_11_WSC_ASSOC_INFO 0xFFA0CB00 -#endif - - -/* Define magic key of test mode (Don't change it for future compatibity) */ -#define PRIV_CMD_TEST_MAGIC_KEY 2011 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* NIC BBCR configuration entry structure */ -typedef struct _PRIV_CONFIG_ENTRY { - UINT_8 ucOffset; - UINT_8 ucValue; -} PRIV_CONFIG_ENTRY, *PPRIV_CONFIG_ENTRY; - -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC_REQ) ( - IN PVOID prAdapter, - IN OUT PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_OID_METHOD_T { - ENUM_OID_GLUE_ONLY, - ENUM_OID_GLUE_EXTENSION, - ENUM_OID_DRIVER_CORE -} ENUM_OID_METHOD_T, *P_ENUM_OID_METHOD_T; - -/* OID set/query processing entry */ -typedef struct _WLAN_REQ_ENTRY { - UINT_32 rOid; /* OID */ - PUINT_8 pucOidName; /* OID name text */ - BOOLEAN fgQryBufLenChecking; - BOOLEAN fgSetBufLenChecking; - ENUM_OID_METHOD_T eOidMethod; - UINT_32 u4InfoBufLen; - PFN_OID_HANDLER_FUNC_REQ pfOidQueryHandler; /* PFN_OID_HANDLER_FUNC*/ - PFN_OID_HANDLER_FUNC_REQ pfOidSetHandler; /* PFN_OID_HANDLER_FUNC */ -} WLAN_REQ_ENTRY, *P_WLAN_REQ_ENTRY; - -typedef struct _NDIS_TRANSPORT_STRUCT { - UINT_32 ndisOidCmd; - UINT_32 inNdisOidlength; - UINT_32 outNdisOidLength; - UINT_8 ndisOidContent[16]; -} NDIS_TRANSPORT_STRUCT, *P_NDIS_TRANSPORT_STRUCT; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -int -priv_set_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_struct( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_support_ioctl ( - IN struct net_device *prDev, - IN OUT struct ifreq *prReq, - IN int i4Cmd - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_WEXT_PRIV_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/platform.c b/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/platform.c deleted file mode 100755 index 9eecea20333f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/linux/platform.c +++ /dev/null @@ -1,620 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/platform.c#1 $ -*/ - -/*! \file "platform.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from wlan_oid.c and for parse.c and - rsn.c and nic_privacy.c - -*/ - - - -/* -** $Log: platform.c $ - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 13 2011 jeffrey.chang - * [WCXRP00000983] [MT6620][Wi-Fi Driver] invalid pointer casting causes kernel panic during p2p connection - * fix the pointer casting - * - * 06 29 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * . - * - * 06 28 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * remove un-used code - * - * 05 11 2011 jeffrey.chang - * NULL - * fix build error - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 03 2011 jeffrey.chang - * NULL - * add the ARP filter callback - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 01 2011 cp.wu - * [WCXRP00000413] [MT6620 Wi-Fi][Driver] Merge 1103 changes on NVRAM file path change to DaVinci main trunk and V1.1 branch - * upon Jason Zhang(NVRAM owner)'s change, ALPS has modified its NVRAM storage from /nvram/... to /data/nvram/... - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * -** -*/ -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - #include -#endif - -#include "gl_os.h" - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLY_SUSPEND) - #include -#endif -#endif - - -extern BOOLEAN fgIsUnderEarlierSuspend; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define WIFI_NVRAM_FILE_NAME "/data/nvram/APCFG/APRDEB/WIFI" -#define WIFI_NVRAM_CUSTOM_NAME "/data/nvram/APCFG/APRDEB/WIFI_CUSTOM" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -static int netdev_event(struct notifier_block *nb, unsigned long notification, void *ptr) -{ - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -//#ifdef CONFIG_IPV6 -#if 0 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - struct in_ifaddr *ifa = (struct in_ifaddr *) ptr; - struct net_device *prDev = ifa->ifa_dev->dev; - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (prDev == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: device is empty.\n")); - return NOTIFY_DONE; - } - - if ((strncmp(prDev->name, "p2p", 3) != 0) && (strncmp(prDev->name, "wlan", 4) != 0)) { - DBGLOG(REQ, INFO, ("netdev_event: xxx\n")); - return NOTIFY_DONE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: prGlueInfo is empty.\n")); - return NOTIFY_DONE; - } - ASSERT(prGlueInfo); - - if (fgIsUnderEarlierSuspend == false) { - DBGLOG(REQ, INFO, ("netdev_event: PARAM_MEDIA_STATE_DISCONNECTED. (%d)\n", prGlueInfo->eParamMediaStateIndicated)); - return NOTIFY_DONE; - } - - - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(REQ, INFO, ("ip is not avaliable.\n")); - return NOTIFY_DONE; - } - - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(REQ, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -//#ifdef CONFIG_IPV6 -#if 0 - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return NOTIFY_DONE; - } - - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - //u4NumIPv6++; - } -#endif - - // here we can compare the dev with other network's netdev to - // set the proper arp filter - // - // IMPORTANT: please make sure if the context can sleep, if the context can't sleep - // we should schedule a kernel thread to do this for us - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; - UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - -//#ifdef CONFIG_IPV6 -#if 0 - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; -#else - prParamNetAddrList->u4AddressCount = u4NumIPv4; -#endif - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -//#ifdef CONFIG_IPV6 -#if 0 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(aucBuf)); - - DBGLOG(REQ, INFO, ("kalIoctl (0x%x, 0x%x)\n", prGlueInfo, prParamNetAddrList)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } - - return NOTIFY_DONE; - -} - -static struct notifier_block inetaddr_notifier = { - .notifier_call = netdev_event, -}; - -void wlanRegisterNotifier(void) -{ - register_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanRegisterNotifier); - -void wlanUnregisterNotifier(void) -{ - unregister_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanUnregisterNotifier); - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLYSUSPEND) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register platform driver to os -* -* \param[in] wlanSuspend Function pointer to platform suspend function -* \param[in] wlanResume Function pointer to platform resume function -* -* \return The result of registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume) -{ - int ret = 0; - - if(NULL != wlanSuspend) - prDesc->suspend = wlanSuspend; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanSuspend ERROR.\n")); - ret = -1; - } - - if(NULL != wlanResume) - prDesc->resume = wlanResume; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanResume ERROR.\n")); - ret = -1; - } - - register_early_suspend(prDesc); - return ret; -} - -//EXPORT_SYMBOL(glRegisterEarlySuspend); - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will un-register platform driver to os -* -* \return The result of un-registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glUnregisterEarlySuspend(struct early_suspend *prDesc) -{ - int ret = 0; - - unregister_early_suspend(prDesc); - - prDesc->suspend = NULL; - prDesc->resume = NULL; - - return ret; -} - -//EXPORT_SYMBOL(glUnregisterEarlySuspend); -#endif -#endif // !CONFIG_X86 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for reading data from files on NVRAM-FS -* -* \param[in] -* filename -* len -* offset -* \param[out] -* buf -* \return -* actual length of data being read -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_read( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_RDONLY, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to open!!\n")); - return -1; - } - - do { - if ((fd->f_op == NULL) || (fd->f_op->read == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : file can not be read!!\n")); - break; - } - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->read(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAM - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for writing data to files on NVRAM-FS -* -* \param[in] -* filename -* buf -* len -* offset -* \return -* actual length of data being written -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_write ( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_WRONLY|O_CREAT, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to open!!\n")); - return -1; - } - - do{ - if ((fd->f_op == NULL) || (fd->f_op->write == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : file can not be write!!\n")); - break; - } /* End of if */ - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->write(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAMS - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for reading data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* \param[out] -* pu2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ) -{ - if(pu2Data == NULL) { - return FALSE; - } - - if(nvram_read(WIFI_NVRAM_FILE_NAME, - (char *)pu2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for writing data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* u2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Offset, - UINT_16 u2Data - ) -{ - if(nvram_write(WIFI_NVRAM_FILE_NAME, - (char *)&u2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/version.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/version.h deleted file mode 100755 index 716a0628d755..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/version.h +++ /dev/null @@ -1,200 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/version.h#1 $ -*/ - -/*! \file "version.h" - \brief Driver's version definition - -*/ - - - -/* -** $Log: version.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.1.1. - * - * 08 26 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.9.. - * - * 08 23 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.8. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * correct typo. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * for building MT6628 Win32 driver environment - * - * 08 03 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.7. - * - * 07 24 2011 puff.wen - * NULL - * [MT5931][Beta 5]Change the version number to v0.2.2.0 - * - * 06 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.6.. - * - * 05 09 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.5.. - * - * 04 19 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.4. - * - * 04 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.3. - * - * 03 25 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.2. - * - * 03 21 2011 chinglan.wang - * NULL - * Change the version number to 2.0.0.1. - * - * 03 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.0. - * - * 02 11 2011 chinglan.wang - * NULL - * Change to the version 1.2.0.2. - * - * 02 10 2011 chinglan.wang - * NULL - * Change the version to 1.2.0.1. - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * [WINDDK] build system changes for MT5931 - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-12-14 14:10:55 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-17 22:41:00 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-13 16:20:33 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:27:13 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _VERSION_H -#define _VERSION_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef NIC_AUTHOR -#define NIC_AUTHOR "NIC_AUTHOR" -#endif -#ifndef NIC_DESC -#define NIC_DESC "NIC_DESC" -#endif - -#ifndef NIC_NAME - #if defined(MT6620) - #define NIC_NAME "MT6620" - #define NIC_DEVICE_ID "MT6620" - #define NIC_DEVICE_ID_LOW "mt6620" - #elif defined(MT5931) - #define NIC_NAME "MT5931" - #define NIC_DEVICE_ID "MT5931" - #define NIC_DEVICE_ID_LOW "mt5931" - #elif defined(MT6628) - #define NIC_NAME "MT6628" - #define NIC_DEVICE_ID "MT6628" - #define NIC_DEVICE_ID_LOW "mt6628" - #endif -#endif - -/* NIC driver information */ -#define NIC_VENDOR "MediaTek Inc." -#define NIC_VENDOR_OUI {0x00, 0x0C, 0xE7} - -#if defined(MT6620) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter Driver" -#elif defined(MT5931) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter Driver" -#elif defined(MT6628) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter Driver" -#endif - -/* Define our driver version */ -#define NIC_DRIVER_MAJOR_VERSION 2 -#define NIC_DRIVER_MINOR_VERSION 0 -#define NIC_DRIVER_VERSION 2,0,1,1 -#define NIC_DRIVER_VERSION_STRING "2.0.1.1" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#endif /* _VERSION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931/os/wifi_version.h b/drivers/net/wireless/rockchip_wlan/mt5931/os/wifi_version.h deleted file mode 100755 index 11a0557ebd5f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931/os/wifi_version.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Yongle Lai @ Rockchip - */ -#ifndef WIFI_VERSION_H -#define WIFI_VERSION_H - -/* - * Marvell MV8686 driver version. - */ -#define MT5931_DRV_VERSION "2.14" - -#endif /* WIFI_VERSION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/Kconfig b/drivers/net/wireless/rockchip_wlan/mt5931_kk/Kconfig deleted file mode 100755 index 2be141e83e7f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/Kconfig +++ /dev/null @@ -1,31 +0,0 @@ -menuconfig MTK_MT5931 - bool "MediaTek MT5931 Config" - help - Config MTK WLAN chip mt5931 - - -config MTK_MT5931_WIFI - tristate "MT5931 Wi-Fi" - depends on MTK_MT5931 - depends on MMC - depends on IPV6 - select WIRELESS_EXT - select WEXT_PRIV - select NL80211_TESTMODE - default y - help - This module adds support for wireless adapters based on - MTK MT5931 chipset. - - This driver uses the kernel's wireless extensions subsystem. - - If you choose to build a module, it'll be called dhd. Say M if - unsure. - -config MTK_MT5931_POWER - tristate "MT5931 power" - depends on MTK_MT5931 - default y - help - MT5931 power control - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/Makefile b/drivers/net/wireless/rockchip_wlan/mt5931_kk/Makefile deleted file mode 100755 index edef4c4bb6db..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright Statement: -# -# This software/firmware and related documentation ("MediaTek Software") are -# protected under relevant copyright laws. The information contained herein -# is confidential and proprietary to MediaTek Inc. and/or its licensors. -# Without the prior written permission of MediaTek inc. and/or its licensors, -# any reproduction, modification, use or disclosure of MediaTek Software, -# and information contained herein, in whole or in part, shall be strictly prohibited. -# -# MediaTek Inc. (C) 2010. All rights reserved. -# -# BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES -# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") -# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON -# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. -# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE -# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR -# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH -# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES -# THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES -# CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK -# SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR -# STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND -# CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, -# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, -# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO -# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -# -# The following software/firmware and/or related documentation ("MediaTek Software") -# have been modified by MediaTek Inc. All revisions are subject to any receiver's -# applicable license agreements with MediaTek Inc. - - -# combo driver: MT6620 -# If KERNELRELEASE is defined, we've been invoked from the -# kernel build system and can use its language. -ifneq ($(KERNELRELEASE),) - #subdir-ccflags-y can be used in 2.6.34 in the future - #subdir-ccflags-y += -I$(src)/common/include -I$(src)/common/linux/include - #used for binary release script - #KERNEL_PATH := $(pwd) - #OBJ_PATH := $(pwd) - - obj-$(CONFIG_MTK_MT5931) += drv_wlan/ - -#obj-n += gps/ - -# Otherwise we were called directly from the command -# line; invoke the kernel build system. -else - KERNELDIR ?= /lib/modules/$(shell uname -r)/build - PWD := $(shell pwd) -default: - $(MAKE) -C $(KERNELDIR) M=$(PWD) modules -endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/GNUmakefile b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/GNUmakefile deleted file mode 100755 index cdf60c9904cd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/GNUmakefile +++ /dev/null @@ -1,64 +0,0 @@ -# -------------------------------------------------------------------- -# Copyright (c) 2010 MediaTek Inc. -# -# All rights reserved. Copying, compilation, modification, distribution -# or any other use whatsoever of this material is strictly prohibited -# except in accordance with a Software License Agreement with -# MediaTek Inc. -# -------------------------------------------------------------------- - -# -------------------------------------------------------------------- -# This Makefile is major entrance for compiling driver module for -# Linux Kernel 2.6 -# -------------------------------------------------------------------- - -DRV_SRC_DIR := $(shell pwd) -export DRV_SRC_DIR - -include $(DRV_SRC_DIR)/config.mk -include $(DRV_SRC_DIR)/GNUmakefile.inc - -# Objects List for Linux 2.6 -COMMON_OBJS := $(patsubst %.o,$(COMMON_DIR)%.o,$(strip $(COMMON_OBJS))) -NIC_OBJS := $(patsubst %.o,$(NIC_DIR)%.o,$(strip $(NIC_OBJS))) -OS_OBJS := $(patsubst %.o,$(OS_DIR)%.o,$(strip $(OS_OBJS))) -HIF_OBJS := $(patsubst %.o,$(HIF_DIR)%.o,$(strip $(HIF_OBJS))) -MGMT_OBJS := $(patsubst %.o,$(MGMT_DIR)%.o,$(strip $(MGMT_OBJS))) - - -.PHONY: all clean install info build -all: build install - -build: info - @$(MAKE) -C $(LINUX_SRC) M=$(DRV_SRC_DIR) modules - @echo - @$(SIZE) -d $(patsubst %.o,%.ko,$(MTK_WLAN_MODULE)) - @echo - - -clean: - @$(MAKE) -C $(LINUX_SRC) M=$(DRV_SRC_DIR) clean - - -install: -ifneq ($(INSTALL_PATH),) - @echo Install $(patsubst %.o,%.ko,$(MTK_WLAN_MODULE)) to $(INSTALL_PATH)/$(INSTALL_MODULE_NAME) - @cp $(patsubst %.o,%.ko,$(MTK_WLAN_MODULE)) $(INSTALL_PATH)/$(INSTALL_MODULE_NAME) -else - @echo Warning INSTALL_PATH must be defined for 'make install' - check config.mk ! -endif - @echo - - -info: - @echo "" - @echo "The following settings will be used for compilation:" - @echo "----------------------------------------------------" - @echo "PLATFORM : $(ARCH)" - @echo "COMPILE : $(LINUX26_CC)" - @echo "KERNEL PATH : $(LINUX_SRC)" - @echo "KERNEL VERSION : $(KERNEL_RELEASE)" - @echo "INSTALL PATH : $(INSTALL_PATH)" - @echo "INSTALL MODULE NAME : $(INSTALL_MODULE_NAME)" - @echo "----------------------------------------------------" - @echo "" diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/GNUmakefile.inc b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/GNUmakefile.inc deleted file mode 100755 index caa2f1af6e90..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/GNUmakefile.inc +++ /dev/null @@ -1,53 +0,0 @@ -# -------------------------------------------------------------------- -# Copyright (c) 2007 MediaTek Inc. -# -# All rights reserved. Copying, compilation, modification, distribution -# or any other use whatsoever of this material is strictly prohibited -# except in accordance with a Software License Agreement with -# MediaTek Inc. -# -------------------------------------------------------------------- - -# -------------------------------------------------------------------- -# This file is used for identifying version of Linux Kernel -# -------------------------------------------------------------------- - -KCHECK_DIR := $(DRV_SRC_DIR)/os/linux/.kcheck - -ifndef LINUX_SRC -$(error LINUX_SRC must be defined - check config.mk !) -endif - -FULL_PATH_CC := $(shell which $(CC) 2> /dev/null) -ifeq ($(FULL_PATH_CC), ) -$(error $(CC) is missing - check config.mk !) -endif - -ifeq ($(shell cd $(LINUX_SRC) 2> /dev/null && pwd), ) -$(error $(LINUX_SRC) is missing - check config.mk !) -endif - -ifndef KERNEL_RELEASE -KERNEL_RELEASE := $(shell $(CC) -E -I $(LINUX_SRC)/include $(KCHECK_DIR)/.kversion.c | grep uts_release | cut -f2 -d'"') -endif - -ifeq ($(filter-out 2.4%, $(KERNEL_RELEASE)), ) -LINUX24 = yes -endif - -ifndef LINUX24 -LINUX26_CC := $(shell $(MAKE) -n -C $(LINUX_SRC) M=$(KCHECK_DIR) 2> /dev/null | grep cc) -LINUX26_CC := $(filter-out -% '% "%,$(LINUX26_CC)) -LINUX26_CC := $(sort $(filter %cc,$(LINUX26_CC))) -FULL_PATH_LINUX26_CC := $(shell which $(LINUX26_CC) 2> /dev/null) -ifeq ($(FULL_PATH_LINUX26_CC), ) -LINUX26_CC := "\"$(LINUX26_CC)\" not found, check $(LINUX_SRC)/Makefile or \$$PATH in current SHELL !" -else -LINUX26_CC := $(FULL_PATH_LINUX26_CC) -endif -endif - -ifneq ($(INSTALL_PATH), ) -ifeq ($(shell cd $(INSTALL_PATH) 2> /dev/null && pwd), ) -INSTALL_PATH := -endif -endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/Makefile b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/Makefile deleted file mode 100755 index a53e58d5a654..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/Makefile +++ /dev/null @@ -1,154 +0,0 @@ -# --------------------------------------------------- -# Compile Options -# --------------------------------------------------- - -#include $(MTK_PATH_BUILD)/Makefile -ccflags-y += -DLINUX -DMT5931 - -ifeq ($(CONFIG_MTK_MT5931_WAPI_SUPPORT), y) - ccflags-y += -DCFG_SUPPORT_WAPI=1 -else - ccflags-y += -DCFG_SUPPORT_WAPI=0 -endif - -ifeq ($(CONFIG_MTK_MT5931_SUPPORT_XLOG), y) - ccflags-y += -DCFG_SUPPORT_XLOG=1 -else - ccflags-y += -DCFG_SUPPORT_XLOG=0 -endif - -ifeq ($(CONFIG_MTK_MT5931_SUPPORT_AEE), y) - ccflags-y += -DCFG_SUPPORT_AEE=1 -else - ccflags-y += -DCFG_SUPPORT_AEE=0 -endif - -ifeq ($(CONFIG_MTK_MT5931_WLAN_PROC), y) - ccflags-y += -DWLAN_INCLUDE_PROC -endif - -#ifeq ($(CONFIG_MTK_MT5931_WIFI_HIF_SDIO1), y) -# ccflags-y += -D_HIF_SDIO=1 -#endif - -ccflags-y += -D_HIF_SDIO=1 - -MODULE_NAME := wlan_mt5931 - -ifeq ($(CONFIG_MTK_MT5931_DEBUG), yes) - ccflags-y += -DDBG=1 -else - ccflags-y += -DDBG=0 -endif - -ccflags-y += -I$(src)/os -I$(src)/os/linux/include -I$(src)/os/linux/hif/sdio/include -ccflags-y += -I$(src)/include -I$(src)/include/nic -I$(src)/include/mgmt - -obj-$(CONFIG_MTK_MT5931_WIFI) += $(MODULE_NAME).o -obj-$(CONFIG_MTK_MT5931_POWER) += mtk_wmt_wifi.o -mtk_wmt_wifi-objs := wmt_chrdev_wifi.o -#obj-m += $(MODULE_NAME).o - -# --------------------------------------------------- -# Directory List -# --------------------------------------------------- -COMMON_DIR := common/ -OS_DIR := os/linux/ -HIF_DIR := os/linux/hif/sdio/ -NIC_DIR := nic/ -MGMT_DIR := mgmt/ - - -# --------------------------------------------------- -# Objects List -# --------------------------------------------------- - -COMMON_OBJS := $(COMMON_DIR)dump.o \ - $(COMMON_DIR)wlan_lib.o \ - $(COMMON_DIR)wlan_oid.o \ - $(COMMON_DIR)wlan_bow.o \ - $(COMMON_DIR)dual_ant_bwcs.o - -NIC_OBJS := $(NIC_DIR)nic.o \ - $(NIC_DIR)nic_tx.o \ - $(NIC_DIR)nic_rx.o \ - $(NIC_DIR)nic_pwr_mgt.o \ - $(NIC_DIR)cmd_buf.o \ - $(NIC_DIR)que_mgt.o \ - $(NIC_DIR)nic_cmd_event.o - -OS_OBJS := $(OS_DIR)gl_init.o \ - $(OS_DIR)gl_kal.o \ - $(OS_DIR)gl_bow.o \ - $(OS_DIR)gl_wext.o \ - $(OS_DIR)gl_wext_priv.o \ - $(OS_DIR)gl_rst.o \ - $(OS_DIR)gl_cfg80211.o \ - $(OS_DIR)platform.o - -MGMT_OBJS := $(MGMT_DIR)ais_fsm.o \ - $(MGMT_DIR)aaa_fsm.o \ - $(MGMT_DIR)assoc.o \ - $(MGMT_DIR)auth.o \ - $(MGMT_DIR)bss.o \ - $(MGMT_DIR)cnm.o \ - $(MGMT_DIR)cnm_timer.o \ - $(MGMT_DIR)cnm_mem.o \ - $(MGMT_DIR)hem_mbox.o \ - $(MGMT_DIR)mib.o \ - $(MGMT_DIR)privacy.o \ - $(MGMT_DIR)rate.o \ - $(MGMT_DIR)rlm.o \ - $(MGMT_DIR)rlm_domain.o \ - $(MGMT_DIR)rlm_obss.o \ - $(MGMT_DIR)rlm_protection.o \ - $(MGMT_DIR)rsn.o \ - $(MGMT_DIR)saa_fsm.o \ - $(MGMT_DIR)scan.o \ - $(MGMT_DIR)scan_fsm.o \ - $(MGMT_DIR)sec_fsm.o \ - $(MGMT_DIR)swcr.o \ - $(MGMT_DIR)roaming_fsm.o - -# --------------------------------------------------- -# P2P Objects List -# --------------------------------------------------- - -COMMON_OBJS += $(COMMON_DIR)wlan_p2p.o - -NIC_OBJS += $(NIC_DIR)p2p_nic.o - -OS_OBJS += $(OS_DIR)gl_p2p.o \ - $(OS_DIR)gl_p2p_cfg80211.o \ - $(OS_DIR)gl_p2p_init.o \ - $(OS_DIR)gl_p2p_kal.o - -MGMT_OBJS += $(MGMT_DIR)p2p_assoc.o \ - $(MGMT_DIR)p2p_bss.o \ - $(MGMT_DIR)p2p_fsm.o \ - $(MGMT_DIR)p2p_func.o \ - $(MGMT_DIR)p2p_rlm.o \ - $(MGMT_DIR)p2p_rlm_obss.o \ - $(MGMT_DIR)p2p_scan.o \ - $(MGMT_DIR)p2p_ie.o \ - $(MGMT_DIR)p2p_state.o - - -ifeq ($(CONFIG_MTK_WAPI_SUPPORT), yes) -MGMT_OBJS += $(MGMT_DIR)wapi.o -endif - -ifeq ($(CONFIG_MTK_MT5931_WLAN_PROC), y) -OS_OBJS += gl_proc.o -endif - -HIF_OBJS := $(HIF_DIR)arm.o \ - $(HIF_DIR)sdio.o - -$(MODULE_NAME)-objs += $(COMMON_OBJS) -$(MODULE_NAME)-objs += $(NIC_OBJS) -$(MODULE_NAME)-objs += $(OS_OBJS) -$(MODULE_NAME)-objs += $(HIF_OBJS) -$(MODULE_NAME)-objs += $(MGMT_OBJS) - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/dual_ant_bwcs.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/dual_ant_bwcs.c deleted file mode 100755 index dd250447f600..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/dual_ant_bwcs.c +++ /dev/null @@ -1,312 +0,0 @@ -/**************************************************************************** - * Ralink Tech Inc. - * 4F, No. 2 Technology 5th Rd. - * Science-based Industrial Park - * Hsin-chu, Taiwan, R.O.C. - * (c) Copyright 2002-2010, Ralink Technology, Inc. - * - * All rights reserved. Ralink's source code is an unpublished work and the - * use of a copyright notice does not imply otherwise. This source code - * contains confidential trade secret material of Ralink Tech. Any attemp - * or participation in deciphering, decoding, reverse engineering or in any - * way altering the source code is stricitly prohibited, unless the prior - * written consent of Ralink Technology, Inc. is obtained. - **************************************************************************** - - Module Name: - rt_bwcs.c - - Abstract: - - Revision History: - Who When What - jinchuan 20130827 initialize rt_bwcs.c - --------- ---------- ---------------------------------------------- - */ -#include "precomp.h" -#include "mtk_porting.h" -#include "dual_ant_bwcs.h" - -#ifdef CFG_DUAL_ANTENNA - -/* - ======================================================================== - - Routine Description: - Send channel event to upper layer - - Arguments: - IN pNetDev, Net Device - IN eventType, Channel Event type - IN flags, flags - IN pSrcMac, Source Mac - IN pData, Event Data - IN dataLen Event Data Length - - Return Value: - 0 OK - -1 Failure - - IRQL = PASSIVE_LEVEL - - Note: - This function only can be used if the driver supports: P2P and STA are - coexisting with the same channel - - If the driver supports P2P and STA are coexisting with difference channels , - we need another method to management the channel events which will be - sent to upper layer - - ======================================================================== -*/ - -static UINT32 RtmpOSWirelessEventTranslate(IN UINT32 eventType) - { - switch (eventType) { - case RT_WLAN_EVENT_CUSTOM: - eventType = IWEVCUSTOM; - break; - - case RT_WLAN_EVENT_CGIWAP: - eventType = SIOCGIWAP; - break; - -#if WIRELESS_EXT > 17 - case RT_WLAN_EVENT_ASSOC_REQ_IE: - eventType = IWEVASSOCREQIE; - break; -#endif /* WIRELESS_EXT */ - -#if WIRELESS_EXT >= 14 - case RT_WLAN_EVENT_SCAN: - eventType = SIOCGIWSCAN; - break; -#endif /* WIRELESS_EXT */ - - case RT_WLAN_EVENT_EXPIRED: - eventType = IWEVEXPIRED; - break; -#ifdef P2P_SUPPORT - case RT_WLAN_EVENT_SHOWPIN: - eventType = 0x8C05; /* IWEVP2PKEYSHOWPIN; */ - break; - case RT_WLAN_EVENT_PIN: - eventType = 0x8C06; /* IWEVP2PKEYPIN; */ - break; -#endif /* P2P_SUPPORT */ - - default: - printk("Unknown event: 0x%x\n", eventType); - break; - } - - return eventType; -} - - -int RtmpOSWrielessEventSend( - IN PNET_DEV pNetDev, - IN UINT32 eventType, - IN INT flags, - IN PUCHAR pSrcMac, - IN PUCHAR pData, - IN UINT32 dataLen) -{ - union iwreq_data wrqu; - - /* translate event type */ - eventType = RtmpOSWirelessEventTranslate(eventType); - - memset(&wrqu, 0, sizeof (wrqu)); - - if (flags > -1) - wrqu.data.flags = flags; - - if (pSrcMac) - memcpy(wrqu.ap_addr.sa_data, pSrcMac, MAC_ADDR_LEN); - - if ((pData != NULL) && (dataLen > 0)) - wrqu.data.length = dataLen; - else - wrqu.data.length = 0; - - wireless_send_event(pNetDev, eventType, &wrqu, (char *)pData); - return 0; -} - - -int RtmpWirelessChannelNotify( - IN PNET_DEV pNetDev, - IN UINT32 eventType, - IN INT flags, - IN PUCHAR pSrcMac, - IN PUCHAR pData, - IN UINT32 dataLen) -{ - BOOLEAN send = FALSE; - USHORT type_idx = WIFI_CONTYPE_MAX; - USHORT i = 0; - BWCS_WIFI *pBwcsEvent = NULL; - - static UCHAR ch_sent[WIFI_CONTYPE_MAX] = {0}; - - DBGPRINT(RT_DEBUG_TRACE, ("[RT_BWCS] ==> %s,%d\n", __FUNCTION__,__LINE__)); - - if (pData == NULL) { - DBGPRINT(RT_DEBUG_ERROR, ("Error: pData is NULL Pointer in %s\n", - __FUNCTION__)); - return -1; - } - - pBwcsEvent = (BWCS_WIFI *)pData; - - /*Transfer the event*/ - switch(pBwcsEvent->event) { - case WIFI_EVENT_STA_CONN_NEW: - case WIFI_EVENT_STA_CONN_DEL: - type_idx = WIFI_CONTYPE_STA; - break; - case WIFI_EVENT_P2P_GO_CONN_NEW: - case WIFI_EVENT_P2P_GO_CONN_DEL: - case WIFI_EVENT_P2P_GC_CONN_NEW: - case WIFI_EVENT_P2P_GC_CONN_DEL: - type_idx = WIFI_CONTYPE_P2P; - break; - case WIFI_EVENT_SOFTAP_CONN_NEW: - case WIFI_EVENT_SOFTAP_CONN_DEL: - type_idx = WIFI_CONTYPE_SOFTAP; - break; - default: - type_idx = WIFI_CONTYPE_MAX; - break; - } - - DBGPRINT(RT_DEBUG_TRACE, ("[RT_BWCS] %s,%d, typeid=%d \n", __FUNCTION__,__LINE__, type_idx)); - - /*do nothing*/ - if (type_idx == WIFI_CONTYPE_MAX) - return 0; - - /*Transfer the event*/ - switch (pBwcsEvent->event) { - case WIFI_EVENT_STA_CONN_NEW: - case WIFI_EVENT_P2P_GO_CONN_NEW: - case WIFI_EVENT_P2P_GC_CONN_NEW: - case WIFI_EVENT_SOFTAP_CONN_NEW: - { - for (i=0; i 0) && - (ch_sent[i] == pBwcsEvent->para[WIFI_EVENT_PARAM_CH])) - break; - i++; - } - ch_sent[type_idx] = pBwcsEvent->para[WIFI_EVENT_PARAM_CH]; - - /*if the channel */ - if (i == WIFI_CONTYPE_MAX) { - pBwcsEvent->event = WIFI_EVENT_CONN_NEW; - send = TRUE; - } - } - break; - case WIFI_EVENT_STA_CONN_DEL: - case WIFI_EVENT_P2P_GO_CONN_DEL: - case WIFI_EVENT_P2P_GC_CONN_DEL: - case WIFI_EVENT_SOFTAP_CONN_DEL: - { - ch_sent[type_idx] = 0; - for (i=0; i 0) && - (ch_sent[i] == pBwcsEvent->para[WIFI_EVENT_PARAM_CH])) - break; - i++; - } - if (i == WIFI_CONTYPE_MAX) { - pBwcsEvent->event = WIFI_EVENT_CONN_DEL; - send = TRUE; - } - } - break; - default: - break; - } - - DBGPRINT(RT_DEBUG_TRACE, ("[RT_BWCS] %s,%d, send=%d \n", __FUNCTION__,__LINE__, send)); - - if (send) { - RtmpOSWrielessEventSend(pNetDev, - eventType, - flags, - pSrcMac, - pData, - dataLen); - } - return 0; -} - -void wifi2bwcs_connection_event_ind_handler(P_GLUE_INFO_T prGlueInfo, USHORT event) -{ - - BWCS_WIFI BwcsEvent; - UINT_8 ucNetTypeIndex; - struct net_device *gPrDev = prGlueInfo->prDevHandler; - UINT_8 ucChannelNum; - BOOLEAN fg40mBwAllowed; - UINT_8 ucBandWidth; - ENUM_CHNL_EXT_T eRfSco; - - if(event == WIFI_EVENT_STA_CONN_NEW || event == WIFI_EVENT_STA_CONN_DEL) - { - ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - ucChannelNum = prGlueInfo->prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex].ucPrimaryChannel; - fg40mBwAllowed = prGlueInfo->prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex].fgAssoc40mBwAllowed; - ucBandWidth = (fg40mBwAllowed) ? WIFI_BW_40:WIFI_BW_20; - } - else if(event == WIFI_EVENT_P2P_GC_CONN_NEW || event == WIFI_EVENT_P2P_GC_CONN_DEL) - { - ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - ucChannelNum = prGlueInfo->prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex].ucPrimaryChannel; - fg40mBwAllowed = prGlueInfo->prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex].fgAssoc40mBwAllowed; - ucBandWidth = (fg40mBwAllowed) ? WIFI_BW_40:WIFI_BW_20; - } - else if(event == WIFI_EVENT_P2P_GO_CONN_NEW || event == WIFI_EVENT_P2P_GO_CONN_DEL) - { - ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - ucChannelNum = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo->ucPreferredChannel; - eRfSco = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo->eRfSco; - if(eRfSco == CHNL_EXT_SCN) - ucBandWidth = WIFI_BW_20; - else if(eRfSco == CHNL_EXT_SCA || eRfSco == CHNL_EXT_SCB) - ucBandWidth = WIFI_BW_40; - } - - else if(event == WIFI_EVENT_SOFTAP_CONN_NEW || event == WIFI_EVENT_SOFTAP_CONN_DEL) - { - ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - ucChannelNum = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo->ucPreferredChannel; - eRfSco = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo->eRfSco; - if(eRfSco == CHNL_EXT_SCN) - ucBandWidth = WIFI_BW_20; - else if(eRfSco == CHNL_EXT_SCA || eRfSco == CHNL_EXT_SCB) - ucBandWidth = WIFI_BW_40; - } - - printk("wifi2bwcs_connection_event_ind_handler event,ucChannelNum,ucBandWidth: %d,%d,%d\n", event,ucChannelNum,ucBandWidth); - memset(&BwcsEvent, 0, sizeof(BWCS_WIFI)); - - /*send a bwcs event to upper layer */ - snprintf(BwcsEvent.name, sizeof(BwcsEvent.name), BWCS_NAME); - BwcsEvent.event = event; - BwcsEvent.para[WIFI_EVENT_PARAM_CH] = ucChannelNum; - BwcsEvent.para[WIFI_EVENT_PARAM_BW] = ucBandWidth; - RtmpWirelessChannelNotify(gPrDev, - RT_WLAN_EVENT_CUSTOM, - -1, - NULL, - (PUCHAR)&BwcsEvent, - sizeof(BWCS_WIFI)); - -} - - -#endif /* CFG_DUAL_ANTENNA */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/dump.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/dump.c deleted file mode 100755 index 5269877ff802..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/dump.c +++ /dev/null @@ -1,579 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/common/dump.c#1 $ -*/ - -/*! \file "dump.c" - \brief Provide memory dump function for debugging. - - Provide memory dump function for debugging. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: dump.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 19:58:51 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if DBG -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - LOG_FUNC("DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - LOG_FUNC("(%08lx) %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - LOG_FUNC("(%08lx) %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - LOG_FUNC("(%08lx) %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - LOG_FUNC("(%08lx) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - (UINT_32)pucStartAddr, - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - LOG_FUNC("\n"); - - return; -} /* end of dumpMemory8() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in double words. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length) -{ - PUINT_8 pucAddr; - - - ASSERT(pu4StartAddr); - - LOG_FUNC("DUMP32 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pu4StartAddr, u4Length); - - if (IS_NOT_ALIGN_4((UINT_32)pu4StartAddr)) { - UINT_32 u4ProtrudeLen = sizeof(UINT_32) - ((UINT_32)pu4StartAddr % 4); - - - u4ProtrudeLen = ((u4Length < u4ProtrudeLen) ? u4Length: u4ProtrudeLen); - LOG_FUNC("pu4StartAddr is not at DW boundary.\n"); - pucAddr = (PUINT_8) &pu4StartAddr[0]; - - switch (u4ProtrudeLen) { - case 1: - LOG_FUNC("(%08lx) %02x------\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - LOG_FUNC("(%08lx) %02x%02x----\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - LOG_FUNC("(%08lx) %02x%02x%02x--\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - - u4Length -= u4ProtrudeLen; - pu4StartAddr = (PUINT_32)((UINT_32)pu4StartAddr + u4ProtrudeLen); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - LOG_FUNC("(%08lx) %08lx %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], pu4StartAddr[3]); - pu4StartAddr += 4; - u4Length -= 16; - } - else { - switch (u4Length) { - case 1: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ------%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[0]); - break; - case 2: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[1], pucAddr[0]); - break; - case 3: - pucAddr = (PUINT_8) &pu4StartAddr[0]; - LOG_FUNC("(%08lx) --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 4: - LOG_FUNC("(%08lx) %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0]); - break; - case 5: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[0]); - break; - case 6: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[1], pucAddr[0]); - break; - case 7: - pucAddr = (PUINT_8) &pu4StartAddr[1]; - LOG_FUNC("(%08lx) %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 8: - LOG_FUNC("(%08lx) %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1]); - break; - case 9: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[0]); - break; - case 10: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[1], pucAddr[0]); - break; - case 11: - pucAddr = (PUINT_8) &pu4StartAddr[2]; - LOG_FUNC("(%08lx) %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - case 12: - LOG_FUNC("(%08lx) %08lx %08lx %08lx\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2]); - break; - case 13: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ------%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[0]); - break; - case 14: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx ----%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[1], pucAddr[0]); - break; - case 15: - pucAddr = (PUINT_8) &pu4StartAddr[3]; - LOG_FUNC("(%08lx) %08lx %08lx %08lx --%02x%02x%02x\n", - (UINT_32)pu4StartAddr, - pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2], - pucAddr[2], pucAddr[1], pucAddr[0]); - break; - default: - break; - } - u4Length = 0; - } - } - - return; -} /* end of dumpMemory32() */ -#elif CFG_SUPPORT_XLOG - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump a segment of memory in bytes. -* -* \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped. -* \param[in] u4Length Length of the memory to be dumped. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ) -{ - ASSERT(pucStartAddr); - - if (log_level == ANDROID_LOG_ERROR) { - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_WARN) { - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_INFO) { - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_DEBUG) { - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - else if (log_level == ANDROID_LOG_VERBOSE) { - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, "DUMP8 ADDRESS: %08lx, Length: %ld\n", (UINT_32)pucStartAddr, u4Length); - } - - while (u4Length > 0) { - if (u4Length >= 16) { - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]); - u4Length -= 16; - pucStartAddr += 16; - } - else { - switch (u4Length) { - case 1: - XLOG_FUNC(log_level, "%02x\n", - pucStartAddr[ 0]); - break; - case 2: - XLOG_FUNC(log_level, "%02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1]); - break; - case 3: - XLOG_FUNC(log_level, "%02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2]); - break; - case 4: - XLOG_FUNC(log_level, "%02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3]); - break; - case 5: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4]); - break; - case 6: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5]); - break; - case 7: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6]); - break; - case 8: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7]); - break; - case 9: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8]); - break; - case 10: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9]); - break; - case 11: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10]); - break; - case 12: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11]); - break; - case 13: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12]); - break; - case 14: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13]); - break; - case 15: - XLOG_FUNC(log_level, "%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n", - pucStartAddr[ 0], pucStartAddr[ 1], pucStartAddr[ 2], pucStartAddr[ 3], - pucStartAddr[ 4], pucStartAddr[ 5], pucStartAddr[ 6], pucStartAddr[ 7], - pucStartAddr[ 8], pucStartAddr[ 9], pucStartAddr[10], pucStartAddr[11], - pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]); - break; - default: - break; - } - u4Length = 0; - } - } - - - return; -} /* end of dumpMemory8() */ -#endif /* DBG */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/makefile b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/makefile deleted file mode 100755 index 89b63909cac9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source -# file to this component. This file merely indirects to the real make file -# that is shared by all the driver components of the Windows NT DDK -#!INCLUDE $(NTMAKEENV)\makefile.def - -#!INCLUDE $(_MAKEENVROOT)\makefile.def -!INCLUDE $(_WINDOW_MAKE_ROOT)\makefile.def diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/sources.ce b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/sources.ce deleted file mode 100755 index 59b0b291e680..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/sources.ce +++ /dev/null @@ -1,11 +0,0 @@ -TARGETNAME=$(DRIVER_NAME)_cmn_$(WINCEDEBUG)_51 -TARGETTYPE=LIBRARY - -INCLUDES=$(_INCLUDES_DIRS) - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER - -C_DEFINES=$(C_DEFINES) -DNDIS51_MINIPORT=1 -D_WIN2K_COMPAT_SLIST_USAGE=1 -CDEFINES=$(CDEFINES) -D$(DEVICE_ID) -DNDIS51_MINIPORT=1 $(_BUILD_MODULE_DEF) - -SOURCES= $(_COMMON_FILES) diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/sources.ddk b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/sources.ddk deleted file mode 100755 index d20e1b94fb82..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/sources.ddk +++ /dev/null @@ -1,11 +0,0 @@ -TARGETPATH=$(_LIB_PATH) -TARGETNAME=$(DRIVER_NAME)_cmn_51 -TARGETTYPE=DRIVER_LIBRARY - -INCLUDES=$(_INCLUDES_DIRS) - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS51_MINIPORT=1 -C_DEFINES=$(C_DEFINES) -D_WIN2K_COMPAT_SLIST_USAGE=1 -C_DEFINES=$(C_DEFINES) -DNDIS_WDM=1 $(_BUILD_MODULE_DEF) - -SOURCES= $(_COMMON_FILES) diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_bow.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_bow.c deleted file mode 100755 index d8abd6254eaa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_bow.c +++ /dev/null @@ -1,3938 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/common/wlan_bow.c#1 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the 802.11 PAL commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/****************************************************************************** -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************* -*/ - -/****************************************************************************** -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************* -*/ - -/* -** $Log: wlan_bow.c $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 01 09 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00110632] [Rose][LCA42][Cross Feature][Bluetooth]The "KE" pops up after the device reboots automatically.(once) - * - * Fix bow link disconnected event dereference. - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 terry.wu - * NULL - * Fix BoW KE. - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * aware more compile options. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * . - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Only reply probe response to its peer or mached SSID for BoW AP. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW SAA retry and disable disconnect event when AAA fail . - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 17 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix wrong StaRec state of BoW . - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix prAssocRspSwRfb casting. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 28 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Simplify link disconnected routine, remove link disconnected other routine. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add new feature - multiple physical link support. - * - * 02 22 2011 wh.su - * [WCXRP00000486] [MT6620 Wi-Fi][BOW] Fixed the bow send frame but not encrypted issue - * fixed the BOW packet sending without encrypted issue. - * - * 02 21 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BOW link disconnection bug. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting. - * - * 02 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW channel granted function. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW to support multiple physical link. - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix for event returnning Band. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 chinghwa.yu - * NULL - * Fix bowResponderScanDone error when prBssDesc is NULL. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * indicate correct AIS network information for PAL. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Initialize nicActivateNetwork(prAdapter as soon as bow is starting.. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * 2) command sequence number is now increased atomically - * * 3) private data could be hold and taken use for other purpose -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -#if CFG_BOW_TEST -extern UINT_32 g_arBowRevPalPacketTime[32]; -#endif - - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -static UINT_32 g_u4LinkCount = 0; -static UINT_32 g_u4Beaconing = 0; -static BOW_TABLE_T arBowTable[CFG_BOW_PHYSICAL_LINK_NUM]; - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -const BOW_CMD_T arBowCmdTable[] = { - {BOW_CMD_ID_GET_MAC_STATUS, bowCmdGetMacStatus}, - {BOW_CMD_ID_SETUP_CONNECTION, bowCmdSetupConnection}, - {BOW_CMD_ID_DESTROY_CONNECTION, bowCmdDestroyConnection}, - {BOW_CMD_ID_SET_PTK, bowCmdSetPTK}, - {BOW_CMD_ID_READ_RSSI, bowCmdReadRSSI}, - {BOW_CMD_ID_READ_LINK_QUALITY, bowCmdReadLinkQuality}, - {BOW_CMD_ID_SHORT_RANGE_MODE, bowCmdShortRangeMode}, - {BOW_CMD_ID_GET_CHANNEL_LIST, bowCmdGetChannelList}, -}; - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCID, - IN BOOLEAN fgSetQuery, - IN BOOLEAN fgNeedResp, - IN PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - IN PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - IN UINT_32 u4SetQueryInfoLen, - IN PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_BOW_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - prCmdInfo->u4PrivateData = (UINT_32) ucSeqNumber; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dispatch command coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - WLAN_STATUS retval = WLAN_STATUS_FAILURE; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < sizeof(arBowCmdTable) / sizeof(BOW_CMD_T); i++) { - if ((arBowCmdTable[i].uCmdID == prCmd->rHeader.ucCommandId) && - arBowCmdTable[i].pfCmdHandle) { - retval = arBowCmdTable[i].pfCmdHandle(prAdapter, prCmd); - break; - } - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_MAC_STATUS -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_MAC_STATUS prMacStatus; - UINT_8 idx = 0; - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eBssSCO; - UINT_8 ucNumOfChannel = 0;//MAX_BOW_NUMBER_OF_CHANNEL; - - RF_CHANNEL_INFO_T aucChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; - - ASSERT(prAdapter); - - //3 <1> If LinkCount != 0 -> OK (optional) - - eBand = BAND_2G4; - eBssSCO = CHNL_EXT_SCN; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS)), VIR_MEM_TYPE); - - prEvent->rHeader.ucEventId = BOW_EVENT_ID_MAC_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_MAC_STATUS); - - // fill event body - prMacStatus = (P_BOW_MAC_STATUS)(prEvent->aucPayload); - kalMemZero(prMacStatus, sizeof(BOW_MAC_STATUS)); - - //3 <2> Call CNM to decide if BOW available. - if (cnmBowIsPermitted(prAdapter)) - { - prMacStatus->ucAvailability = TRUE; - } - else - { - prMacStatus->ucAvailability = FALSE; - } - - memcpy(prMacStatus->aucMacAddr, prAdapter->rWifiVar.aucDeviceAddress, PARAM_MAC_ADDR_LEN); - - if (cnmPreferredChannel(prAdapter, &eBand, &ucPrimaryChannel, &eBssSCO)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get preferred channel.\n")); -#endif - - prMacStatus->ucNumOfChannel = 1; - prMacStatus->arChannelList[0].ucChannelBand = eBand; - prMacStatus->arChannelList[0].ucChannelNum = ucPrimaryChannel; - } - else - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdGetMacStatus, Get channel list. Current number of channel, %d.\n", ucNumOfChannel)); -#endif - - rlmDomainGetChnlList(prAdapter, BAND_2G4, MAX_BOW_NUMBER_OF_CHANNEL_2G4, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_2G4*/; idx++) - { - prMacStatus->arChannelList[idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = ucNumOfChannel; - } - - rlmDomainGetChnlList(prAdapter, BAND_5G, MAX_BOW_NUMBER_OF_CHANNEL_5G, &ucNumOfChannel, aucChannelList); - - if (ucNumOfChannel > 0) { - for (idx = 0; idx < ucNumOfChannel/*MAX_BOW_NUMBER_OF_CHANNEL_5G*/; idx++) - { - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelBand = aucChannelList[idx].eBand; - prMacStatus->arChannelList[prMacStatus->ucNumOfChannel + idx].ucChannelNum = aucChannelList[idx].ucChannelNum; - } - - prMacStatus->ucNumOfChannel = prMacStatus->ucNumOfChannel + ucNumOfChannel; - - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("ucNumOfChannel, eBand, aucChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - ucNumOfChannel, - aucChannelList[0].eBand, - aucChannelList[0].ucChannelNum, - aucChannelList[1].ucChannelNum, - aucChannelList[2].ucChannelNum, - aucChannelList[3].ucChannelNum, - aucChannelList[4].ucChannelNum, - aucChannelList[5].ucChannelNum, - aucChannelList[6].ucChannelNum, - aucChannelList[7].ucChannelNum, - aucChannelList[8].ucChannelNum, - aucChannelList[9].ucChannelNum, - aucChannelList[10].ucChannelNum, - aucChannelList[11].ucChannelNum, - aucChannelList[12].ucChannelNum, - aucChannelList[13].ucChannelNum, - aucChannelList[14].ucChannelNum, - aucChannelList[15].ucChannelNum, - aucChannelList[16].ucChannelNum, - aucChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, eBand, prMacStatus->arChannelList, %x, %x, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prMacStatus->ucNumOfChannel, - prMacStatus->arChannelList[0].ucChannelBand, - prMacStatus->arChannelList[0].ucChannelNum, - prMacStatus->arChannelList[1].ucChannelNum, - prMacStatus->arChannelList[2].ucChannelNum, - prMacStatus->arChannelList[3].ucChannelNum, - prMacStatus->arChannelList[4].ucChannelNum, - prMacStatus->arChannelList[5].ucChannelNum, - prMacStatus->arChannelList[6].ucChannelNum, - prMacStatus->arChannelList[7].ucChannelNum, - prMacStatus->arChannelList[8].ucChannelNum, - prMacStatus->arChannelList[9].ucChannelNum, - prMacStatus->arChannelList[10].ucChannelNum, - prMacStatus->arChannelList[11].ucChannelNum, - prMacStatus->arChannelList[12].ucChannelNum, - prMacStatus->arChannelList[13].ucChannelNum, - prMacStatus->arChannelList[14].ucChannelNum, - prMacStatus->arChannelList[15].ucChannelNum, - prMacStatus->arChannelList[16].ucChannelNum, - prMacStatus->arChannelList[17].ucChannelNum)); - - DBGLOG(BOW, EVENT, ("prMacStatus->ucNumOfChannel, %x.\n", prMacStatus->ucNumOfChannel)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelBand, %x.\n", prMacStatus->arChannelList[0].ucChannelBand)); - DBGLOG(BOW, EVENT, ("prMacStatus->arChannelList[0].ucChannelNum, %x.\n", prMacStatus->arChannelList[0].ucChannelNum)); - DBGLOG(BOW, EVENT, ("prMacStatus->ucAvailability, %x.\n", prMacStatus->ucAvailability)); - DBGLOG(BOW, EVENT, ("prMacStatus->aucMacAddr, %x:%x:%x:%x:%x:%x.\n", - prMacStatus->aucMacAddr[0], - prMacStatus->aucMacAddr[1], - prMacStatus->aucMacAddr[2], - prMacStatus->aucMacAddr[3], - prMacStatus->aucMacAddr[4], - prMacStatus->aucMacAddr[5])); -#endif - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_MAC_STATUS))); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SETUP_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SETUP_CONNECTION prBowSetupConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - - UINT_8 ucBowTableIdx = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowSetupConnection = (P_BOW_SETUP_CONNECTION) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SETUP_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <1> If ucLinkCount >= 4 -> Fail. - if (g_u4LinkCount >= CFG_BOW_PHYSICAL_LINK_NUM) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <2> Call CNM, check if BOW is available. - if (!cnmBowIsPermitted(prAdapter)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - //3 <3> Lookup BOW Table, if Peer MAC address exist and valid -> Fail. - if (bowCheckBowTableIfVaild(prAdapter, prBowSetupConnection->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if(EQUAL_MAC_ADDR(prBowSetupConnection->aucPeerAddress, prAdapter->rWifiVar.aucDeviceAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_INVALID); - return WLAN_STATUS_NOT_ACCEPTED; - } - - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = BOW_SETUP_CMD; - rCmdBtOverWifi.ucChannelNum = prBowSetupConnection->ucChannelNum; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowSetupConnection->aucPeerAddress); - rCmdBtOverWifi.u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - rCmdBtOverWifi.ucTimeoutDiscovery = prBowSetupConnection->ucTimeoutDiscovery; - rCmdBtOverWifi.ucTimeoutInactivity = prBowSetupConnection->ucTimeoutInactivity; - rCmdBtOverWifi.ucRole = prBowSetupConnection->ucRole; - rCmdBtOverWifi.PAL_Capabilities = prBowSetupConnection->ucPAL_Capabilities; - rCmdBtOverWifi.cMaxTxPower = prBowSetupConnection->cMaxTxPower; - - if (prBowSetupConnection->ucChannelNum > 14) { - rCmdBtOverWifi.ucChannelBand = BAND_5G; - } - else { - rCmdBtOverWifi.ucChannelBand = BAND_2G4; - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowSetupConnection->aucPeerAddress); - -#if CFG_BOW_PHYSICAL_LINK_NUM > 1 - /*Channel check for supporting multiple physical link*/ - if(g_u4LinkCount > 0) { - if (prBowSetupConnection->ucChannelNum != prBowFsmInfo->ucPrimaryChannel) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - } -#endif - - prBowFsmInfo->ucPrimaryChannel = prBowSetupConnection->ucChannelNum; - prBowFsmInfo->eBand = rCmdBtOverWifi.ucChannelBand; - prBowFsmInfo->u2BeaconInterval = prBowSetupConnection->u2BeaconInterval; - prBowFsmInfo->ucRole = prBowSetupConnection->ucRole; - - if (prBowSetupConnection->ucPAL_Capabilities > 0) - { - prBowFsmInfo->fgSupportQoS = TRUE; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection.\n")); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Channel Number - 0x%x.\n", rCmdBtOverWifi.ucChannelNum)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Peer address - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Beacon interval - 0x%x.\n", rCmdBtOverWifi.u2BeaconInterval)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout activity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutDiscovery)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Timeout inactivity - 0x%x.\n", rCmdBtOverWifi.ucTimeoutInactivity)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Role - 0x%x.\n", rCmdBtOverWifi.ucRole)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi PAL capability - 0x%x.\n", rCmdBtOverWifi.PAL_Capabilities)); - DBGLOG(BOW, EVENT, ("rCmdBtOverWifi Max Tx power - 0x%x.\n", rCmdBtOverWifi.cMaxTxPower)); -#endif - - //3 <4> Get a free BOW entry, mark as Valid, fill in Peer MAC address, LinkCount += 1, state == Starting. - if (!bowGetBowTableFreeEntry(prAdapter, &ucBowTableIdx)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - prBowFsmInfo->prTargetBssDesc = NULL; - - COPY_MAC_ADDR(rBowTable.aucPeerAddress, prBowSetupConnection->aucPeerAddress); - //owTable.eState = BOW_DEVICE_STATE_ACQUIRING_CHANNEL; - rBowTable.fgIsValid = TRUE; - rBowTable.ucAcquireID = prBowFsmInfo->ucSeqNumOfChReq; - //rBowTable.ucRole = prBowSetupConnection->ucRole; - //rBowTable.ucChannelNum = prBowSetupConnection->ucChannelNum; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - kalSetBowRole(prAdapter->prGlueInfo, rCmdBtOverWifi.ucRole, prBowSetupConnection->aucPeerAddress); - - GLUE_INC_REF_CNT(g_u4LinkCount); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting, cnmTimerInitTimer.\n")); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->u2BeaconInterval, %d.\n", prBowFsmInfo->u2BeaconInterval)); -#endif - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rStartingBeaconTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowSendBeacon, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - (PFN_MGMT_TIMEOUT_FUNC)bowChGrantedTimeout, - (UINT_32)NULL); - - //Reset Global Variable - g_u4Beaconing = 0; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdSetupConnection, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("kalInitBowDevice, bow0\n")); -#endif -#if CFG_BOW_SEPARATE_DATA_PATH - kalInitBowDevice(prAdapter->prGlueInfo, BOWDEVNAME); -#endif - - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - if(rCmdBtOverWifi.ucRole == BOW_INITIATOR) { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } else { - bowSetBowTableState(prAdapter, prBowSetupConnection->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - bowResponderScan(prAdapter); - } - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_DESTROY_CONNECTION -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_DESTROY_CONNECTION prBowDestroyConnection; - CMD_BT_OVER_WIFI rCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; -#if CFG_BOW_TEST - UINT_8 ucIdx; -#endif - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - //3 <1> If LinkCount == 0 ->Fail (Optional) - if (g_u4LinkCount == 0) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_DESTROY_CONNECTION)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - //3 <2> Lookup BOW table, check if is not exist (Valid and Peer MAC address) -> Fail - prBowDestroyConnection = (P_BOW_DESTROY_CONNECTION) &(prCmd->aucPayload[0]); - - if (!bowCheckBowTableIfVaild(prAdapter, prBowDestroyConnection->aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, bowCheckIfVaild, not accepted.\n")); -#endif - return WLAN_STATUS_NOT_ACCEPTED; - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, destroy Peer address - %x:%x:%x:%x:%x:%x.\n", prBowDestroyConnection->aucPeerAddress[0], - prBowDestroyConnection->aucPeerAddress[1], - prBowDestroyConnection->aucPeerAddress[2], - prBowDestroyConnection->aucPeerAddress[3], - prBowDestroyConnection->aucPeerAddress[4], - prBowDestroyConnection->aucPeerAddress[5])); -#endif - - // fill CMD_BT_OVER_WIFI - rCmdBtOverWifi.ucAction = 2; - COPY_MAC_ADDR(rCmdBtOverWifi.rPeerAddr, prBowDestroyConnection->aucPeerAddress); - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prBowDestroyConnection->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdDestroyConnection, rCmdBtOverWifi.rPeerAddr - %x:%x:%x:%x:%x:%x.\n", rCmdBtOverWifi.rPeerAddr[0], - rCmdBtOverWifi.rPeerAddr[1], - rCmdBtOverWifi.rPeerAddr[2], - rCmdBtOverWifi.rPeerAddr[3], - rCmdBtOverWifi.rPeerAddr[4], - rCmdBtOverWifi.rPeerAddr[5])); -#endif - -#if CFG_BOW_TEST - for (ucIdx = 0; ucIdx < 11; ucIdx++) - { - DBGLOG(BOW, EVENT, ("BoW receiving PAL packet delta time vs packet number -- %d ms vs %x.\n", ucIdx, g_arBowRevPalPacketTime[ucIdx])); - } -#endif - - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - sizeof(CMD_BT_OVER_WIFI), - (PUINT_8) &rCmdBtOverWifi, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SET_PTK -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SET_PTK prBowSetPTK; - CMD_802_11_KEY rCmdKey; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SET_PTK)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowSetPTK = (P_BOW_SET_PTK) &(prCmd->aucPayload[0]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucPeerAddress[0], - prBowSetPTK->aucPeerAddress[1], - prBowSetPTK->aucPeerAddress[2], - prBowSetPTK->aucPeerAddress[3], - prBowSetPTK->aucPeerAddress[4], - prBowSetPTK->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("rCmdKey.ucIsAuthenticator, %x.\n", kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress))); -#endif - - if (!bowCheckBowTableIfVaild(prAdapter, prBowSetPTK->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowSetPTK->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - - return WLAN_STATUS_NOT_ACCEPTED; - } - - // fill CMD_802_11_KEY - rCmdKey.ucAddRemove = 1; // add - rCmdKey.ucTxKey = 1; - rCmdKey.ucKeyType = 1; - rCmdKey.ucIsAuthenticator = kalGetBowRole(prAdapter->prGlueInfo, prBowSetPTK->aucPeerAddress); - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prBowSetPTK->aucPeerAddress); - rCmdKey.ucNetType = NETWORK_TYPE_BOW_INDEX; // BT Over Wi-Fi - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - rCmdKey.ucKeyId = 0; - rCmdKey.ucKeyLen = 16; // AES = 128bit - kalMemCopy(rCmdKey.aucKeyMaterial, prBowSetPTK->aucTemporalKey, 16); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowSetPTK->aucTemporalKey, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - prBowSetPTK->aucTemporalKey[0], - prBowSetPTK->aucTemporalKey[1], - prBowSetPTK->aucTemporalKey[2], - prBowSetPTK->aucTemporalKey[3], - prBowSetPTK->aucTemporalKey[4], - prBowSetPTK->aucTemporalKey[5], - prBowSetPTK->aucTemporalKey[6], - prBowSetPTK->aucTemporalKey[7], - prBowSetPTK->aucTemporalKey[8], - prBowSetPTK->aucTemporalKey[9], - prBowSetPTK->aucTemporalKey[10], - prBowSetPTK->aucTemporalKey[11], - prBowSetPTK->aucTemporalKey[12], - prBowSetPTK->aucTemporalKey[13], - prBowSetPTK->aucTemporalKey[14], - prBowSetPTK->aucTemporalKey[15])); - - DBGLOG(BOW, EVENT, ("rCmdKey.aucKeyMaterial, %x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x:%x.\n", - rCmdKey.aucKeyMaterial[0], - rCmdKey.aucKeyMaterial[1], - rCmdKey.aucKeyMaterial[2], - rCmdKey.aucKeyMaterial[3], - rCmdKey.aucKeyMaterial[4], - rCmdKey.aucKeyMaterial[5], - rCmdKey.aucKeyMaterial[6], - rCmdKey.aucKeyMaterial[7], - rCmdKey.aucKeyMaterial[8], - rCmdKey.aucKeyMaterial[9], - rCmdKey.aucKeyMaterial[10], - rCmdKey.aucKeyMaterial[11], - rCmdKey.aucKeyMaterial[12], - rCmdKey.aucKeyMaterial[13], - rCmdKey.aucKeyMaterial[14], - rCmdKey.aucKeyMaterial[15])); -#endif - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - wlanbowCmdEventSetCommon, - wlanbowCmdTimeoutHandler, - sizeof(CMD_802_11_KEY), - (PUINT_8) &rCmdKey, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_RSSI -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_RSSI prBowReadRSSI; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_READ_RSSI)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadRSSI = (P_BOW_READ_RSSI) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadRssi, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_READ_LINK_QUALITY -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_READ_LINK_QUALITY prBowReadLinkQuality; - - ASSERT(prAdapter); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(P_BOW_READ_LINK_QUALITY)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prBowReadLinkQuality = (P_BOW_READ_LINK_QUALITY) &(prCmd->aucPayload[0]); - - return wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - wlanbowCmdEventReadLinkQuality, - wlanbowCmdTimeoutHandler, - 0, - NULL, - prCmd->rHeader.ucSeqNumber - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_SHORT_RANGE_MODE -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - P_BOW_SHORT_RANGE_MODE prBowShortRangeMode; - CMD_TX_PWR_T rTxPwrParam; - - ASSERT(prAdapter); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode.\n")); -#endif - - prBowShortRangeMode = (P_BOW_SHORT_RANGE_MODE) &(prCmd->aucPayload[0]); - - // parameter size check - if(prCmd->rHeader.u2PayloadLength != sizeof(BOW_SHORT_RANGE_MODE)) { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (!bowCheckBowTableIfVaild(prAdapter, prBowShortRangeMode->aucPeerAddress)) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_UNACCEPTED); - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (bowGetBowTableState(prAdapter, prBowShortRangeMode->aucPeerAddress) != BOW_DEVICE_STATE_CONNECTED) - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_NOT_ACCEPTED; - } - - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowShortRangeMode->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowShortRangeMode->aucPeerAddress[0], - prBowShortRangeMode->aucPeerAddress[1], - prBowShortRangeMode->aucPeerAddress[2], - prBowShortRangeMode->aucPeerAddress[3], - prBowShortRangeMode->aucPeerAddress[4], - prBowShortRangeMode->aucPeerAddress[5])); -#endif - - rTxPwrParam.cTxPwr2G4Cck = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4OFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4OFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr2G4HT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr2G4HT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GOFDM_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_48Mbps = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GOFDM_54Mbps = (prBowShortRangeMode->cTxPower << 1); - - rTxPwrParam.cTxPwr5GHT20_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT20_MCS7 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_BPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_QPSK = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_16QAM = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS5 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS6 = (prBowShortRangeMode->cTxPower << 1); - rTxPwrParam.cTxPwr5GHT40_MCS7 = (prBowShortRangeMode->cTxPower << 1); - - if (nicUpdateTxPower(prAdapter, &rTxPwrParam) == WLAN_STATUS_SUCCESS) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowCmdShortRangeMode, %x.\n", WLAN_STATUS_SUCCESS)); -#endif - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_SUCCESS); - return WLAN_STATUS_SUCCESS; - } - else - { - wlanbowCmdEventSetStatus(prAdapter, prCmd, BOWCMD_STATUS_FAILURE); - return WLAN_STATUS_FAILURE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is command handler for BOW_CMD_ID_GET_CHANNEL_LIST -* coming from 802.11 PAL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmd Pointer to the buffer that holds the command -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ) -{ - ASSERT(prAdapter); - - // not supported yet - return WLAN_STATUS_FAILURE; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = prCmd->rHeader.ucSeqNumber; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = ucEventBuf; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is generic command done handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkConnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkConnected, sizeof(BOW_LINK_CONNECTED)); - prBowLinkConnected->rChannel.ucChannelNum = prBssInfo->ucPrimaryChannel; - prBowLinkConnected->rChannel.ucChannelBand = prBssInfo->eBand; - COPY_MAC_ADDR(prBowLinkConnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelNum, 0x%x\n", prBowLinkConnected->rChannel.ucChannelNum)); - DBGLOG(BOW, EVENT, ("prBowLinkConnected->rChannel.ucChannelBand, 0x%x\n", prBowLinkConnected->rChannel.ucChannelBand)); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, prBowLinkConnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkConnected->aucPeerAddress[0], - prBowLinkConnected->aucPeerAddress[1], - prBowLinkConnected->aucPeerAddress[2], - prBowLinkConnected->aucPeerAddress[3], - prBowLinkConnected->aucPeerAddress[4], - prBowLinkConnected->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkConnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate Event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_CONNECTED))); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - //bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - } - - /* set to connected status*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTED); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventLinkDisconnected( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - P_BOW_FSM_INFO_T prBowFsmInfo; - BOW_TABLE_T rBowTable; - UINT_8 ucBowTableIdx; - ENUM_BOW_DEVICE_STATE eFsmState; - BOOL fgSendDeauth = FALSE; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return; - } - /*Cancel scan*/ - else if(eFsmState == BOW_DEVICE_STATE_SCANNING && - !(prBowFsmInfo->fgIsChannelRequested)) { - bowResponderCancelScan(prAdapter, FALSE); - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_DISCONNECTING); - return; - } - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - if ((prCmdInfo->u4PrivateData)) - { - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - } - else - { - prEvent->rHeader.ucSeqNumber = 0; - } - - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prEvent->aucPayload); - kalMemZero(prBowLinkDisconnected, sizeof(BOW_LINK_DISCONNECTED)); - prBowLinkDisconnected->ucReason = 0x0; - COPY_MAC_ADDR(prBowLinkDisconnected->aucPeerAddress, prBowFsmInfo->aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucEventId, 0x%x\n", prEvent->rHeader.ucEventId)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.ucSeqNumber, 0x%x\n", prEvent->rHeader.ucSeqNumber)); - DBGLOG(BOW, EVENT, ("prEvent->rHeader.u2PayloadLength, 0x%x\n", prEvent->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, prBowLinkDisconnected->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowLinkDisconnected->aucPeerAddress[0], - prBowLinkDisconnected->aucPeerAddress[1], - prBowLinkDisconnected->aucPeerAddress[2], - prBowLinkDisconnected->aucPeerAddress[3], - prBowLinkDisconnected->aucPeerAddress[4], - prBowLinkDisconnected->aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Indicate BoW event to PAL*/ -#if 0 - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); -#endif - - // set to disconnected status - prBowFsmInfo->prTargetStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_BOW_INDEX, prBowLinkDisconnected->aucPeerAddress); - - /*Release channel if granted*/ - if(prBowFsmInfo->fgIsChannelGranted) { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - /*Requested, not granted yet*/ - } else if(prBowFsmInfo->fgIsChannelRequested) { - prBowFsmInfo->fgIsChannelRequested = FALSE; - //bowReleaseCh(prAdapter); - } - -#if 1 - /*Send Deauth to connected peer*/ - if (eFsmState == BOW_DEVICE_STATE_CONNECTED && - (prBowFsmInfo->prTargetStaRec->ucStaState == STA_STATE_3)) - { - fgSendDeauth = TRUE; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("wlanbowCmdEventLinkDisconnected, bowGetBowTableState, %x.\n", bowGetBowTableState(prAdapter, prBowLinkDisconnected->aucPeerAddress))); -#endif - authSendDeauthFrame(prAdapter, - prBowFsmInfo->prTargetStaRec, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - (PFN_TX_DONE_HANDLER)bowDisconnectLink); - } -#endif - -#if 0 - //3 <3>Stop this link; flush Tx; send deAuthentication -> abort. SAA, AAA. need to check BOW table state == Connected. - if (prAdapter->prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - } - - /* flush pending security frames */ - if (prAdapter->prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prAdapter->prGlueInfo); - } -#endif - - /*Update BoW table*/ - bowGetBowTableEntryByPeerAddress(prAdapter, prBowLinkDisconnected->aucPeerAddress, &ucBowTableIdx); - rBowTable.fgIsValid = FALSE; - rBowTable.eState = BOW_DEVICE_STATE_DISCONNECTED; - bowSetBowTableContent(prAdapter, ucBowTableIdx, &rBowTable); - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED))); - - /*Decrease link count*/ - GLUE_DEC_REF_CNT(g_u4LinkCount); - - /*If no need to send deauth, DO disconnect now*/ - /*If need to send deauth, DO disconnect at deauth Tx done*/ - if(!fgSendDeauth){ - bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command done handler for CMD_ID_CMD_BT_OVER_WIFI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BT_OVER_WIFI prCmdBtOverWifi; - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // restore original command for rPeerAddr - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prCmdBtOverWifi = (P_CMD_BT_OVER_WIFI)(prWifiCmd->aucBuffer); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - prBowCmdStatus->ucStatus = BOWCMD_STATUS_SUCCESS; - - /*Indicate BoW event to PAL*/ - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - // set to starting status - kalSetBowState(prAdapter->prGlueInfo, - BOW_DEVICE_STATE_STARTING, - prCmdBtOverWifi->rPeerAddr); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_LINK_QUALITY -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_LINK_QUALITY prBowLinkQuality; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_QUALITY; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_QUALITY); - - // fill event body - prBowLinkQuality = (P_BOW_LINK_QUALITY)(prEvent->aucPayload); - kalMemZero(prBowLinkQuality, sizeof(BOW_LINK_QUALITY)); - prBowLinkQuality->ucLinkQuality = (UINT_8)prLinkQuality->cLinkQuality; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the command done handler for BOW_CMD_ID_READ_RSSI -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* \param[in] pucEventBuf Pointer to the set buffer OR event buffer -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_AMPC_EVENT prEvent; - P_BOW_RSSI prBowRssi; - - ASSERT(prAdapter); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_RSSI; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_RSSI); - - // fill event body - prBowRssi = (P_BOW_RSSI)(prEvent->aucPayload); - kalMemZero(prBowRssi, sizeof(BOW_RSSI)); - prBowRssi->cRssi = (INT_8) prLinkQuality->cRssi; - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_LINK_QUALITY))); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is the default command timeout handler -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] prCmdInfo Pointer to the buffer that holds the command info -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_AMPC_EVENT prEvent; - P_BOW_COMMAND_STATUS prBowCmdStatus; - - ASSERT(prAdapter); - - // fill event header - prEvent = (P_AMPC_EVENT) kalMemAlloc((sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS)), VIR_MEM_TYPE); - prEvent->rHeader.ucEventId = BOW_EVENT_ID_COMMAND_STATUS; - prEvent->rHeader.ucSeqNumber = (UINT_8) prCmdInfo->u4PrivateData; - prEvent->rHeader.u2PayloadLength = sizeof(BOW_COMMAND_STATUS); - - // fill event body - prBowCmdStatus = (P_BOW_COMMAND_STATUS)(prEvent->aucPayload); - kalMemZero(prBowCmdStatus, sizeof(BOW_COMMAND_STATUS)); - - prBowCmdStatus->ucStatus = BOWCMD_STATUS_TIMEOUT; // timeout - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prEvent); - - kalMemFree(prEvent, VIR_MEM_TYPE, (sizeof(AMPC_EVENT) + sizeof(BOW_COMMAND_STATUS))); - - return; -} - - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBowBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStoping.\n")); - DBGLOG(BOW, EVENT, ("bowStoping, SSID %s.\n", prBowBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("bowStoping, prBowBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucBSSID[0], - prBowBssInfo->aucBSSID[1], - prBowBssInfo->aucBSSID[2], - prBowBssInfo->aucBSSID[3], - prBowBssInfo->aucBSSID[4], - prBowBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBowBssInfo->aucOwnMacAddr[0], - prBowBssInfo->aucOwnMacAddr[1], - prBowBssInfo->aucOwnMacAddr[2], - prBowBssInfo->aucOwnMacAddr[3], - prBowBssInfo->aucOwnMacAddr[4], - prBowBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("bowStoping, prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); - DBGLOG(BOW, EVENT, ("bowStopping, g_u4LinkCount, %x.\n", g_u4LinkCount)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - kalPrint("BoW Stoping,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); -#endif - - if (g_u4LinkCount == 0) - { - /*Stop beaconing*/ - GLUE_DEC_REF_CNT(g_u4Beaconing); - - /*Deactive BoW network*/ - //prBowBssInfo->fgIsNetActive = FALSE; - //prBowBssInfo->fgIsBeaconActivated = FALSE; - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - /*temp solution for FW hal_pwr_mgt.c#3037 ASSERT*/ - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_BOW_INDEX); - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - - } - - return; -} - - -VOID -bowStarting( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (g_u4LinkCount == 1) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("BoW Starting.\n")); - DBGLOG(BOW, EVENT, ("BoW channel granted.\n")); -#endif - -#if 0 - /*Active BoW Network*/ - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBssInfo->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prBssInfo->eCurrentOPMode = OP_MODE_BOW; - - //4 <1.2> Setup SSID - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - prBssInfo->ucSSIDLen = BOW_SSID_LEN; - bowAssignSsid(prBssInfo->aucSSID, prBssInfo->aucOwnMacAddr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("SSID %s.\n", prBssInfo->aucSSID)); - DBGLOG(BOW, EVENT, ("prBssInfo->aucBSSID, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucBSSID[0], - prBssInfo->aucBSSID[1], - prBssInfo->aucBSSID[2], - prBssInfo->aucBSSID[3], - prBssInfo->aucBSSID[4], - prBssInfo->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("prBssInfo->aucOwnMacAddr, %x:%x:%x:%x:%x:%x.\n", - prBssInfo->aucOwnMacAddr[0], - prBssInfo->aucOwnMacAddr[1], - prBssInfo->aucOwnMacAddr[2], - prBssInfo->aucOwnMacAddr[3], - prBssInfo->aucOwnMacAddr[4], - prBssInfo->aucOwnMacAddr[5])); - DBGLOG(BOW, EVENT, ("prAdapter->rWifiVar.aucDeviceAddress, %x:%x:%x:%x:%x:%x.\n", - prAdapter->rWifiVar.aucDeviceAddress[0], - prAdapter->rWifiVar.aucDeviceAddress[1], - prAdapter->rWifiVar.aucDeviceAddress[2], - prAdapter->rWifiVar.aucDeviceAddress[3], - prAdapter->rWifiVar.aucDeviceAddress[4], - prAdapter->rWifiVar.aucDeviceAddress[5])); -#endif - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; - if (prBowFsmInfo->eBand == BAND_2G4) - { - prBssInfo->eBand = BAND_2G4; - } - else - { - prBssInfo->eBand = BAND_5G; - } - -#if CFG_BOW_SUPPORT_11N - prBssInfo->ucPhyTypeSet = prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - -#else - if (prBssInfo->eBand == BAND_2G4) - { - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else - { - //prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - //prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11A; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - - //prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_ERP; //RATE_SET_ERP; - //prBssInfo->u2OperationalRateSet = RATE_SET_ERP; - - prBssInfo->u2BSSBasicRateSet = BASIC_RATE_SET_OFDM; //RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - - -#endif - prBssInfo->fgErpProtectMode = FALSE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = prBowFsmInfo->u2BeaconInterval; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - if (prBowFsmInfo->fgSupportQoS) - { - prAdapter->rWifiVar.fgSupportQoS = TRUE; - prBssInfo->fgIsQBSS = TRUE; - } - - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - bssInitForAP(prAdapter, prBssInfo, TRUE); - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_BOW_INDEX); -#endif /* CFG_SUPPORT_AAA */ - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->fgIsBeaconActivated = TRUE; - - //3 <3> Set MAC HW - - //4 <2> Initiate BSS_INFO_T - common part - BOW_BSS_INFO_INIT(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); -#endif - - //4 <3.1> use command packets to inform firmware - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.2> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_BOW_INDEX); - - //4 <3.1> Reset HW TSF Update Mode and Beacon Mode - - //4 <3.2> Setup BSSID - // TODO: rxmSetRxFilterBSSID0 -// rxmSetRxFilterBSSID0(prBssInfo->ucHwBssidId, prBssInfo->aucBSSID); - - //4 <3.3> Setup RX Filter to accept Probe Request - // TODO: f get/set RX filter. - -#if 0 - { - UINT_32 u4RxFilter; - if (halMacRxGetRxFilters(&u4RxFilter)== HAL_STATUS_SUCCESS) { - - u4RxFilter &= ~BIT(RXFILTER_DROP_PROBE_REQ); - - halMacRxSetRxFilters(u4RxFilter); - } - } -#endif - } - - /*Update BoW Table*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_STARTING); - -#if CFG_BOW_TEST - kalPrint("BoW Starting,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - DBGLOG(BOW, EVENT, ("bowStarting, g_u4LinkCount, %x.\n", g_u4LinkCount)); -#endif - - /*Start beaconing*/ - if (g_u4Beaconing < 1) - { - GLUE_INC_REF_CNT(g_u4Beaconing); - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } - -#if 0 - /*Responder: Start to scan Initiator*/ - if (prBowFsmInfo->ucRole == BOW_RESPONDER) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowStarting responder, start scan result searching.\n")); -#endif - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rChGrantedTimer); - bowReleaseCh(prAdapter); - bowResponderScan(prAdapter); - } - /*Initiator: Request channel, wait for responder*/ - else { - //bowRequestCh(prAdapter); - } -#endif - return; -} - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 puOwnMacAddr - ) -{ - UINT_8 i; - UINT_8 aucSSID[]=BOW_WILDCARD_SSID; - - kalMemCopy(pucSsid, aucSSID, BOW_WILDCARD_SSID_LEN); - - for (i = 0; i < 6; i++) - { - pucSsid[(3 * i) + 3] = 0x2D; - if ((*(puOwnMacAddr + i) >> 4) < 0xA) - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x30; - } - else - { - *(pucSsid + (3 * i) + 4) = (*(puOwnMacAddr + i) >> 4) + 0x57; - } - - if ((*(puOwnMacAddr + i) & 0x0F) < 0xA) - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x30; - } - else - { - pucSsid[(3 * i) + 5] = (*(puOwnMacAddr + i) & 0x0F) + 0x57; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateProbeReq.\n")); -#endif - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - /*If BoW AP is beaconing*/ - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW && - g_u4Beaconing > 0) { - - /*Check the probe requset sender is our peer*/ - if(bowCheckBowTableIfVaild(prAdapter, prMgtHdr->aucSrcAddr)) { - fgReplyProbeResp = TRUE; - } - /*Check the probe request target SSID is our SSID*/ - else if ((prIeSsid) && - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - else { - fgReplyProbeResp = FALSE; - } - } - - return fgReplyProbeResp; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if ((g_u4Beaconing != 0) && (g_u4LinkCount > 0) && (g_u4LinkCount < CFG_BOW_PHYSICAL_LINK_NUM)) - { - //Send beacon - bssSendBeaconProbeResponse(prAdapter, NETWORK_TYPE_BOW_INDEX, NULL, 0); - cnmTimerStartTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer, prBowFsmInfo->u2BeaconInterval); - } -#if CFG_BOW_TEST - else { - kalPrint("BoW Send Beacon,[%d,%d]\n", g_u4LinkCount, g_u4Beaconing); - } -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScan.\n")); - kalPrint("BOW SCAN [REQ:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq+1); -#endif - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - - if (!prScanReqMsg) - { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - /*Fill scan message*/ - prScanReqMsg->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_BOW_INDEX; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - prScanReqMsg->ucSSIDLength = BOW_SSID_LEN; - bowAssignSsid(prScanReqMsg->aucSSID, prBowFsmInfo->aucPeerAddress); - prScanReqMsg->ucChannelListNum = 1; - - if (prBowFsmInfo->eBand == BAND_2G4) - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_2G4; - } - else - { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - prScanReqMsg->arChnlInfoList[0].eBand = BAND_5G; - } - - prScanReqMsg->arChnlInfoList[0].ucChannelNum = prBowFsmInfo->ucPrimaryChannel; - prScanReqMsg->u2IELen = 0; - - /*Send scan message*/ - mboxSendMsg(prAdapter, MBOX_ID_0, (P_MSG_HDR_T) prScanReqMsg, MSG_SEND_METHOD_BUF); - - /*Change state to SCANNING*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_SCANNING); - - //prBowFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_DESC_T prBssDesc; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_BOW_DEVICE_STATE eFsmState; - ENUM_SCAN_STATUS eScanStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - ASSERT(prScanDoneMsg->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - eScanStatus = prScanDoneMsg->eScanStatus; - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderScanDone.\n")); - kalPrint("BOW SCAN [DONE:%d]\n", ucSeqNumOfCompMsg); -#endif - - if( eScanStatus == SCAN_STATUS_CANCELLED) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCELLED:%d]\n", ucSeqNumOfCompMsg); -#endif - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTING) { - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - return; - } - else if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - //bowDisconnectLink(prAdapter, NULL, TX_RESULT_SUCCESS); - return; - } - else if (ucSeqNumOfCompMsg != prBowFsmInfo->ucSeqNumOfScanReq) - { - DBGLOG(BOW, EVENT, ("Sequence no. of BOW Responder scan done is not matched.\n")); - return; - } - else - { - prConnSettings->fgIsScanReqIssued = FALSE; - prBssDesc = scanSearchBssDescByBssid(prAdapter, prBowFsmInfo->aucPeerAddress); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("End scan result searching.\n")); -#endif - - /*Initiator is FOUND*/ - if (prBssDesc != NULL)// (prBssDesc->aucBSSID != NULL)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Search Bow Peer address - %x:%x:%x:%x:%x:%x.\n", prBssDesc->aucBSSID[0], - prBssDesc->aucBSSID[1], - prBssDesc->aucBSSID[2], - prBssDesc->aucBSSID[3], - prBssDesc->aucBSSID[4], - prBssDesc->aucBSSID[5])); - DBGLOG(BOW, EVENT, ("Starting to join initiator.\n")); -#endif - /*Set target BssDesc*/ - prBowFsmInfo->prTargetBssDesc = prBssDesc; - /*Request channel to do JOIN*/ - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_ACQUIRING_CHANNEL); - bowRequestCh(prAdapter); - } - /*Initiator is NOT FOUND*/ - else - { - /*Scan again, until PAL timeout*/ - bowResponderScan(prAdapter); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for cancelling scan request. There is another option to extend channel privilige -* for another purpose. -* -* @param fgIsChannelExtention - Keep the channel previlege, but can cancel scan timer. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ) -{ - - P_MSG_SCN_SCAN_CANCEL prScanCancel = (P_MSG_SCN_SCAN_CANCEL)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo = (P_BOW_FSM_INFO_T)NULL; - - DEBUGFUNC("bowResponderCancelScan()"); - - do { - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (TRUE) { -#if CFG_BOW_TEST - kalPrint("BOW SCAN [CANCEL:%d]\n", prBowFsmInfo->ucSeqNumOfScanReq); -#endif - /* There is a channel privilege on hand. */ - - DBGLOG(P2P, TRACE, ("BOW Cancel Scan\n")); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancel) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancel->rMsgHdr.eMsgId = MID_BOW_SCN_SCAN_CANCEL; - prScanCancel->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prScanCancel->ucSeqNum = prBowFsmInfo->ucSeqNumOfScanReq; -#if CFG_ENABLE_WIFI_DIRECT - prScanCancel->fgIsChannelExt = fgIsChannelExtention; -#endif - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancel, - MSG_SEND_METHOD_BUF); - - } - - } while (FALSE); - -} /* bowResponderCancelScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - ASSERT(prBssDesc); - ASSERT(prAdapter); - - DBGLOG(BOW, EVENT, ("Starting bowResponderJoin.\n")); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - bowSetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress, BOW_DEVICE_STATE_CONNECTING); - - //4 <2> Setup corresponding STA_RECORD_T - /*Support First JOIN and retry*/ - prStaRec = bssCreateStaRecFromBssDesc( - prAdapter, - STA_TYPE_BOW_AP, - NETWORK_TYPE_BOW_INDEX, - prBssDesc); - - prBowFsmInfo->prTargetStaRec = prStaRec; - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - prStaRec->fgIsReAssoc = FALSE; - prBowFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prBowFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(BOW, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prBowFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - ASSERT(0); - } - - //4 <4.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <5> Overwrite Connection Setting for eConnectionPolicy - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prBssDesc->aucSSID)); - DBGLOG(BOW, EVENT, ("bowResponderJoin, SSID %s.\n", prConnSettings->aucSSID)); -#endif - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_BOW_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prBowFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - prBssInfo->prStaRecOfAP = prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - printk("BoW trigger SAA ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for BOW FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - P_BSS_INFO_T prBssInfo; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete.\n")); - DBGLOG(BOW, EVENT, ("bowfsmRunEventJoinComplete ptr check\n")); - DBGLOG(BOW, EVENT, ("prMsgHdr %x\n", prMsgHdr)); - DBGLOG(BOW, EVENT, ("prAdapter %x\n", prAdapter)); - DBGLOG(BOW, EVENT, ("prBowFsmInfo %x\n", prBowFsmInfo)); - DBGLOG(BOW, EVENT, ("prStaRec %x\n", prStaRec)); -#endif - - ASSERT(prStaRec); - ASSERT(prBowFsmInfo); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prBowFsmInfo->ucSeqNumOfReqMsg) { - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - prStaRec->eStaType = STA_TYPE_BOW_AP; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; -#if CFG_BOW_RATE_LIMITATION - //4 <1.2>Update Rate Set - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } - } -#endif - - //4 <1.1> Change FW's Media State immediately. - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <1.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ -#if CFG_BOW_SUPPORT_11N - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); -#endif - - //4 <1.3> Update BSS_INFO_T - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Finish bowUpdateBssInfoForJOIN.\n")); -#endif - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowFsmRunEventJoinComplete, qmActivateStaRec.\n")); -#endif - - //4 <1.7> Set the Next State of BOW FSM - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - } - //4 <2> JOIN was not successful - else - { - /*Retry*/ - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); -#if 0 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#endif -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Start bowfsmRunEventJoinComplete -- Join failed.\n")); - printk("BoW trigger SAA REJOIN\n"); -#endif - } - } - - cnmMemFree(prAdapter, prMsgHdr); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - // NOTE(Kevin): Move following line to bowChangeMediaState() macro per CM's request. - //prBowBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prBssInfo->eCurrentOPMode == OP_MODE_BOW) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prBssInfo->ucPrimaryChannel); - - switch (prBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prBssInfo->ucReasonOfDisconnect; - - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_BOW_INDEX, &rEventConnStatus); - prBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(BOW, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAATxFail , bssRemoveStaRecFromClientList.\n")); - printk("BoW AAA TxFail, target state %d\n", prStaRec->ucStaState+1); -#endif - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bowRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - - ASSERT(prStaRec); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowRunEventAAAComplete, cnmStaRecChangeState, STA_STATE_3.\n")); - printk("BoW AAA complete ["MACSTR"]\n", MAC2STR(prStaRec->aucMacAddr)); -#endif - - /*Update BssInfo to connected*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*Update StaRec to State3*/ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - /*Connected*/ - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkConnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle RxDeauth -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if(!IS_STA_IN_BOW(prStaRec)) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - eFsmState = bowGetBowTableState(prAdapter, prStaRec->aucMacAddr); - - if(eFsmState == BOW_DEVICE_STATE_DISCONNECTED) { - /*do nothing*/ - return WLAN_STATUS_NOT_ACCEPTED; - } - - if (prStaRec->ucStaState > STA_STATE_1) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - //P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - COPY_MAC_ADDR(prBowFsmInfo->aucPeerAddress, prStaRec->aucMacAddr); - - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); - - return WLAN_STATUS_SUCCESS; - } - - return WLAN_STATUS_NOT_ACCEPTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handle BoW Link disconnect. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - /*Free target StaRec*/ - if(prMsduInfo) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - } - else { - prStaRec = prBowFsmInfo->prTargetStaRec; - } - - if(prStaRec) { - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - kalPrint("bowDisconnectLink\n"); - /*No one connected*/ - if (g_u4LinkCount == 0 && g_u4Beaconing != 0) - { - cnmTimerStopTimer(prAdapter, &prBowFsmInfo->rStartingBeaconTimer); - bowStopping(prAdapter); - kalPrint("bowStopping\n"); - /*Restore TxPower from Short range mode*/ -#if CFG_SUPPORT_NVRAM && 0 - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - /*Uninit BoW Interface*/ -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prAdapter->prGlueInfo); -#endif - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAssocTime = 0; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, prAssocReqFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAssocReqFrame->aucSrcAddr[0], - prAssocReqFrame->aucSrcAddr[1], - prAssocReqFrame->aucSrcAddr[2], - prAssocReqFrame->aucSrcAddr[3], - prAssocReqFrame->aucSrcAddr[4], - prAssocReqFrame->aucSrcAddr[5])); -#endif - - /*Assoc Accept*/ - while(EQUAL_MAC_ADDR(prAssocReqFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAssocReq, return wlanbowCmdEventLinkConnected.\n")); -#endif - /*Update StaRec*/ - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAssocReqFrame->aucSrcAddr); - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->u2DesiredNonHTRateSet &= prBowBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prBowBssInfo->ucPhyTypeSet; - -#if CFG_BOW_RATE_LIMITATION - /*Limit Rate Set to 24M, 48M, 54M */ - prStaRec->u2DesiredNonHTRateSet &= (RATE_SET_BIT_24M | - RATE_SET_BIT_48M | - RATE_SET_BIT_54M); - /*If peer cannot support the above rate set, fix on the avaliable highest rate*/ - if(prStaRec->u2DesiredNonHTRateSet == 0) { - UINT_8 ucHighestRateIndex; - if (rateGetHighestRateIndexFromRateSet(prBowBssInfo->u2OperationalRateSet, &ucHighestRateIndex)) { - prStaRec->u2DesiredNonHTRateSet = BIT(ucHighestRateIndex); - } else { - /*If no avaliable rate is found, DECLINE the association*/ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - } -#endif - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - - /*Undpate BssInfo to FW*/ - bowChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - - /*reply successful*/ - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAssocResp = TRUE; - break; - } - - /*Reject Assoc*/ - if(*pu2StatusCode != STATUS_CODE_SUCCESSFUL) { - /*Reply Assoc with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAssocTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAssocTime == 0 - ) { - fgReplyAssocResp = TRUE; - rLastRejectAssocTime = rCurrentTime; - } - } - - return fgReplyAssocResp; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -bowValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = FALSE; - P_BSS_INFO_T prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - OS_SYSTIME rCurrentTime; - static OS_SYSTIME rLastRejectAuthTime = 0; - - /* TODO(Kevin): Call BoW functions to check .. - 1. Check we are BoW now. - 2. Check we can accept connection from thsi peer - 3. Check Black List here. - */ - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prBowFsmInfo->aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - prBowFsmInfo->aucPeerAddress[0], - prBowFsmInfo->aucPeerAddress[1], - prBowFsmInfo->aucPeerAddress[2], - prBowFsmInfo->aucPeerAddress[3], - prBowFsmInfo->aucPeerAddress[4], - prBowFsmInfo->aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prAuthFrame->aucSrcAddr, %x:%x:%x:%x:%x:%x.\n", - prAuthFrame->aucSrcAddr[0], - prAuthFrame->aucSrcAddr[1], - prAuthFrame->aucSrcAddr[2], - prAuthFrame->aucSrcAddr[3], - prAuthFrame->aucSrcAddr[4], - prAuthFrame->aucSrcAddr[5])); -#endif - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX, - prAuthFrame->aucSrcAddr); - if (!prStaRec) { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecAlloc.\n")); -#endif - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_BOW_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - ASSERT(prStaRec); - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - prBowBssInfo->prStaRecOfAP = prStaRec; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, cnmStaRecChangeState.\n")); -#endif - } - else - { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucIndex, %x.\n", prStaRec->ucIndex)); -#endif - bssRemoveStaRecFromClientList(prAdapter, prBowBssInfo, prStaRec); - } - - if (EQUAL_MAC_ADDR(prAuthFrame->aucSrcAddr, prBowFsmInfo->aucPeerAddress)) { - - prStaRec->eStaType = STA_TYPE_BOW_CLIENT; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->eStaType, %x.\n", prStaRec->eStaType)); - DBGLOG(BOW, EVENT, ("bowValidateAuth, prStaRec->ucNetTypeIndex, %x.\n", prStaRec->ucNetTypeIndex)); -#endif - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->ucJoinFailureCount = 0; - *pprStaRec = prStaRec; - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - fgReplyAuth = TRUE; - } - else { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - /*Reply auth with reject every 5s*/ - rCurrentTime = kalGetTimeTick(); - if(CHECK_FOR_TIMEOUT(rCurrentTime, rLastRejectAuthTime, MSEC_TO_SYSTIME(5000)) || - rLastRejectAuthTime == 0 - ) { - fgReplyAuth = TRUE; - rLastRejectAuthTime = rCurrentTime; - } - } - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowValidateAuth, fgReplyAuth, %x.\n", fgReplyAuth)); -#endif - return fgReplyAuth; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prBowBssInfo; - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prBowBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - prBowFsmInfo->fgIsChannelGranted = TRUE; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Entering bowRunEventChGrant.\n")); -#endif - - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*Release channel*/ - if((!prBowFsmInfo->fgIsChannelRequested) || - (prBowFsmInfo->ucSeqNumOfChReq != ucTokenID) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTED) || - (eFsmState == BOW_DEVICE_STATE_DISCONNECTING)){ -#if CFG_BOW_TEST - printk("BoW Channel [GIVE UP:%d]\n", ucTokenID); - printk("[Requested:%d][ucSeqNumOfChReq:%d][eFsmState:%d]\n", - prBowFsmInfo->fgIsChannelRequested, prBowFsmInfo->ucSeqNumOfChReq, eFsmState); -#endif - bowReleaseCh(prAdapter); - return; - } - - /* 2. channel privilege has been approved */ - prBowFsmInfo->u4ChGrantedInterval = u4GrantInterval; - -#if 0 - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - prBowFsmInfo->u4ChGrantedInterval - BOW_JOIN_CH_GRANT_THRESHOLD); -#else - cnmTimerStartTimer(prAdapter, - &prBowFsmInfo->rChGrantedTimer, - BOW_JOIN_CH_REQUEST_INTERVAL - BOW_JOIN_CH_GRANT_THRESHOLD); -#endif - - /* 3.2 set local variable to indicate join timer is ticking */ - prBowFsmInfo->fgIsInfraChannelFinished = FALSE; - -#if CFG_BOW_TEST - printk("BoW Channel [GRANTED:%d].\n", ucTokenID); -#endif - - if(eFsmState == BOW_DEVICE_STATE_ACQUIRING_CHANNEL) { - bowStarting(prAdapter); - bowReleaseCh(prAdapter); - if(prBowFsmInfo->ucRole == BOW_RESPONDER) { - bowResponderJoin(prAdapter, prBowFsmInfo->prTargetBssDesc); - } - } - else { - /*update bssinfo*/ - nicUpdateBss(prAdapter, NETWORK_TYPE_BOW_INDEX); - bowReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM for channel privilege requesting -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_REQ_T prMsgChReq; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if (prBowFsmInfo->fgIsChannelGranted == FALSE) - { - -#if CFG_BOW_TEST - printk("BoW channel [REQUEST:%d], %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq+1, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChReq->ucTokenID = ++prBowFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; -#if 0 - prMsgChReq->u4MaxInterval = BOW_JOIN_CH_REQUEST_INTERVAL; -#else - prMsgChReq->u4MaxInterval = 1; -#endif - prMsgChReq->ucPrimaryChannel = prBowFsmInfo->ucPrimaryChannel; //prBowFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = CHNL_EXT_SCN; //prBowFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prBowFsmInfo->eBand; //prBowFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prBowFsmInfo->aucPeerAddress); - - - prBowFsmInfo->fgIsChannelRequested = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform BOW that channel privilege is granted -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - - if(prBowFsmInfo->fgIsChannelGranted != FALSE || prBowFsmInfo->fgIsChannelRequested != FALSE) - { -#if CFG_BOW_TEST - printk("BoW channel [RELEASE:%d] %d, %d.\n", prBowFsmInfo->ucSeqNumOfChReq, prBowFsmInfo->ucPrimaryChannel, prBowFsmInfo->eBand); -#endif - - prBowFsmInfo->fgIsChannelRequested = FALSE; - prBowFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - prMsgChAbort->ucTokenID = prBowFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_BOW_FSM_INFO_T prBowFsmInfo; - ENUM_BOW_DEVICE_STATE eFsmState; - - ASSERT(prAdapter); - - prBowFsmInfo = &(prAdapter->rWifiVar.rBowFsmInfo); - -#if CFG_BOW_TEST - printk("BoW Channel [TIMEOUT]\n"); -#endif -#if 1 - //bowReleaseCh(prAdapter); - eFsmState = bowGetBowTableState(prAdapter, prBowFsmInfo->aucPeerAddress); - - /*If connecting is not completed, request CH again*/ - if((eFsmState == BOW_DEVICE_STATE_CONNECTING) || - (eFsmState == BOW_DEVICE_STATE_STARTING)) - { - bowRequestCh(prAdapter); - } -#endif -} - - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucBowTableIdx = 0; - CMD_INFO_T rCmdInfo; - - ASSERT(prAdapter); - - kalMemZero(&rCmdInfo, sizeof(CMD_INFO_T)); - - while (ucBowTableIdx < CFG_BOW_PHYSICAL_LINK_NUM) - { - if (arBowTable[ucBowTableIdx].fgIsValid) - { - COPY_MAC_ADDR(prAdapter->rWifiVar.rBowFsmInfo.aucPeerAddress, arBowTable[ucBowTableIdx].aucPeerAddress); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", ucBowTableIdx, - arBowTable[ucBowTableIdx].aucPeerAddress[0], - arBowTable[ucBowTableIdx].aucPeerAddress[1], - arBowTable[ucBowTableIdx].aucPeerAddress[2], - arBowTable[ucBowTableIdx].aucPeerAddress[3], - arBowTable[ucBowTableIdx].aucPeerAddress[4], - arBowTable[ucBowTableIdx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowNotifyAllLinkDisconnected, arBowTable[%x].fgIsValid, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif -#if 1 - wlanoidSendSetQueryBowCmd(prAdapter, - CMD_ID_CMD_BT_OVER_WIFI, - TRUE, - FALSE, - wlanbowCmdEventLinkDisconnected, - wlanbowCmdTimeoutHandler, - 0, - NULL, - 0 - ); -#else - wlanbowCmdEventLinkDisconnected(prAdapter, &rCmdInfo, NULL); -#endif - } - - ucBowTableIdx += 1; - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - return FALSE; -} - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - if (arBowTable[ucBowTableIdx].fgIsValid) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableContent, arBowTable[idx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); - printk("GET State [%d]\n", arBowTable[ucBowTableIdx].eState); -#endif - prBowTable = &(arBowTable[ucBowTableIdx]); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - COPY_MAC_ADDR(arBowTable[ucBowTableIdx].aucPeerAddress, prBowTable->aucPeerAddress); - arBowTable[ucBowTableIdx].eState = prBowTable->eState; - arBowTable[ucBowTableIdx].fgIsValid = prBowTable->fgIsValid; - arBowTable[ucBowTableIdx].ucAcquireID = prBowTable->ucAcquireID; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, prBowTable->eState, prBowTable->aucPeerAddress); - //kalSetBowRole(prAdapter->prGlueInfo, prBowTable->ucRole, prBowTable->aucPeerAddress); - -#if CFG_BOW_TEST - printk("SET State [%d]\n", arBowTable[ucBowTableIdx].eState); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[ucBowTableIdx].fgIsValid, %x, %x.\n", ucBowTableIdx, arBowTable[ucBowTableIdx].fgIsValid)); -#endif - - return TRUE; - -} - - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("kalCheckBowifVaild, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - *pucBowTableIdx = idx; - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if(!arBowTable[idx].fgIsValid) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetBowTableFreeEntry, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); -#endif - *pucBowTableIdx = idx; - arBowTable[idx].fgIsValid = TRUE; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return TRUE; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return FALSE; -} - - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 idx; - - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - for(idx = 0 ; idx < CFG_BOW_PHYSICAL_LINK_NUM ; idx++) - { - if( arBowTable[idx].fgIsValid && - EQUAL_MAC_ADDR(arBowTable[idx].aucPeerAddress, aucPeerAddress)) - { -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("bowGetState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", idx, - arBowTable[idx].aucPeerAddress[0], - arBowTable[idx].aucPeerAddress[1], - arBowTable[idx].aucPeerAddress[2], - arBowTable[idx].aucPeerAddress[3], - arBowTable[idx].aucPeerAddress[4], - arBowTable[idx].aucPeerAddress[5])); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].fgIsValid, %x, %x.\n", idx, arBowTable[idx].fgIsValid)); - DBGLOG(BOW, EVENT, ("bowGetState, arBowTable[idx].eState;, %x, %x.\n", idx, arBowTable[idx].eState)); - printk("GET State [%d]\n", arBowTable[idx].eState); -#endif - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return arBowTable[idx].eState; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ) -{ - UINT_8 ucBowTableIdx; - - if(bowGetBowTableEntryByPeerAddress(prAdapter, aucPeerAddress, &ucBowTableIdx)) { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - arBowTable[ucBowTableIdx].eState = eState; -#if CFG_BOW_TEST - printk("SET State [%d]\n", eState); -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_BOW_TABLE); - - kalSetBowState(prAdapter->prGlueInfo, eState, aucPeerAddress); - return TRUE; - } - return FALSE; -} - - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_lib.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_lib.c deleted file mode 100755 index 07a60f1f2af3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_lib.c +++ /dev/null @@ -1,5609 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/common/wlan_lib.c#1 $ -*/ -/*! \file wlan_lib.c - \brief Internal driver stack will export the required procedures here for GLUE Layer. - - This file contains all routines which are exported from MediaTek 802.11 Wireless - LAN driver stack to GLUE Layer. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ -/* -** $Log: wlan_lib.c $ -** -** 09 14 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync changes on roaming to an unindicated BSS under cfg80211. -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync for NVRAM warning scan result generation for CFG80211. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 08 15 2012 eason.tsai -** NULL -** fix build warning. - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 11 2012 cp.wu - * [WCXRP00001252] [MT6620 Wi-Fi][Driver] Add debug message while encountering firmware response timeout - * output message while timeout event occurs - * - * 06 11 2012 eason.tsai - * NULL - * change from binay to hex code - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct scan result removing policy. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 14 2011 cm.chang - * [WCXRP00001104] [All Wi-Fi][FW] Show init process by HW mail-box register - * Show FW initial ID when timeout to wait for ready bit - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * when powering off, always clear pending interrupts, then wait for RDY to be de-asserted - * - * 10 14 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * shorten the packet length for firmware download if no more than 2048 bytes. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 26 2011 cm.chang - * [WCXRP00000952] [MT5931 Wi-Fi][FW] Handshake with BWCS before DPD/TX power calibration - * Fix compiling error for WinXP MT5931 driver - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS Sync ready for WinXP. - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 19 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * escape from normal path if any error is occured. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 24 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * if there is no valid address in chip, generate a new one from driver domain instead of firmware domain due to sufficient randomness - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 20 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * disable whole-chip resetting mechanism due to the need of further ECO to work as expected. - * - * 05 31 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * changed to use non-zero checking for valid bit in NVRAM content - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * correct assertion. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 05 11 2011 cm.chang - * [WCXRP00000717] [MT5931 Wi-Fi][Driver] Handle wrong NVRAM content about AP bandwidth setting - * . - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * change delay from 100ms to 120ms upon DE's suggestion. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 15 2011 cp.wu - * [WCXRP00000654] [MT6620 Wi-Fi][Driver] Add loop termination criterion for wlanAdapterStop(). - * add loop termination criteria for wlanAdapterStop(). - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 04 06 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * invoke nicReleaseAdapterMemory() as failure handling in case wlanAdapterStart() failed unexpectedly - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 25 2011 cp.wu - * [WCXRP00000496] [MT5931][Driver] Apply host-triggered chip reset before initializing firmware download procedures - * apply host-triggered chip reset mechanism before initializing firmware download procedures. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 01 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * init variable for CTIA. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 22 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Remove controling auto rate from initial setting. The initial setting is defined by FW code. - * - * 12 15 2010 cp.wu - * NULL - * sync. with ALPS code by enabling interrupt just before leaving wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * Change Param name for invitation connection. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * for MT5931, adapter initialization is done *after* firmware is downloaded. - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * correct MT5931 firmware download procedure: - * MT5931 will download firmware first then acquire LP-OWN - * - * 11 02 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) update MT5931 firmware encryption tool. (using 64-bytes unit) - * 2) update MT5931 firmware download procedure - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 15 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * bugfix: always reset pointer to IEbuf to zero when keeping scanning result for the connected AP - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 13 2010 cp.wu - * NULL - * acquire & release power control in oid handing wrapper. - * - * 09 09 2010 cp.wu - * NULL - * move IE to buffer head when the IE pointer is not pointed at head. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 13 2010 cp.wu - * NULL - * correction issue: desired phy type not initialized as ABGN mode. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 10 2010 cm.chang - * NULL - * Support EEPROM read/write in RF test mode - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Reduce unnecessary type casting - * - * 07 13 2010 cp.wu - * - * use multiple queues to keep 1x/MMPDU/CMD's strict order even when there is incoming 1x frames. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * initialize mbox & ais_fsm in wlanAdapterStart() - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable interrupt then send power control command packet. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when stopping adapter, wait til RDY bit has been cleaerd. - * 2) set TASK_OFFLOAD as driver-core OIDs - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * roll-back to rev.60. - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always set fw-own before driver is unloaded. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * 2) command sequence number is now increased atomically - * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * 2) add 2 kal API for later integration - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * 2) ready bit will be polled for limited iteration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * kalOidComplete is not necessary in linux - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use pass-in prRegInfo instead of accessing prGlueInfo directly - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding none-glue code portability - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding non-glue code portability - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve non-glue code portability - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * only send CMD_NIC_POWER_CTRL in wlanAdapterStop() when card is not removed and is not in D3 state - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when starting adapter, read local adminsitrated address from registry and send to firmware via CMD_BASIC_CONFIG. - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for QM_TEST_MODE - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct function name .. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanAdapterStart - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * 2) firmware image length is now retrieved via NdisFileOpen - * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * 4) nicRxWaitResponse() revised - * 5) another set of TQ counter default value is added for fw-download state - * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * 2. follow MSDN defined behavior when associates to another AP - * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * wlanoidSetFrequency is now implemented by RF test command. - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * QueryRssi is no longer w/o hardware access, it is now implemented by command/event handling loop - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. - * - * 01 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * allow MCR read/write OIDs in RF test mode - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * 2. block TX/ordinary OID when RF test mode is engaged - * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-12-10 16:54:36 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-12-09 20:04:59 GMT mtk02752 -** only report as connected when CFG_HIF_EMULATION_TEST is set to 1 -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-12-08 17:39:41 GMT mtk02752 -** wlanoidRftestQueryAutoTest could be executed without touching hardware -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-12-03 16:10:26 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-02 22:05:33 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-01 23:02:36 GMT mtk02752 -** remove unnecessary spinlock -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-01 22:50:38 GMT mtk02752 -** use TC4 for command, maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-27 12:45:34 GMT mtk02752 -** prCmdInfo should be freed when invoking wlanReleasePendingOid() to clear pending oid -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-24 19:55:51 GMT mtk02752 -** wlanSendPacket & wlanRetransmitOfPendingFrames is only used in old data path -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-23 17:59:55 GMT mtk02752 -** clear prPendingOID inside wlanSendCommand() when the OID didn't need to be replied. -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-23 14:45:29 GMT mtk02752 -** add another version of wlanSendCommand() for command-sending only without blocking for response -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-17 22:40:44 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 10:14:56 GMT mtk01084 -** modify place to invoke wlanIst -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-10-30 18:17:07 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-10-29 19:46:15 GMT mtk01084 -** invoke interrupt process routine -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-10-13 21:58:24 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-09-09 17:26:01 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-05-20 12:21:27 GMT mtk01461 -** Add SeqNum check when process Event Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-05-19 10:38:44 GMT mtk01461 -** Add wlanReleasePendingOid() for mpReset() if there is a pending OID and no available TX resource to send it. -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-04-29 15:41:34 GMT mtk01461 -** Add handle of EVENT of CMD Result in wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-04-22 09:11:23 GMT mtk01461 -** Fix wlanSendCommand() for Driver Domain CR -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-04-21 09:33:56 GMT mtk01461 -** Update wlanSendCommand() for Driver Domain Response and handle Event Packet, wlanQuery/SetInformation() for enqueue CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-17 20:00:08 GMT mtk01461 -** Update wlanImageSectionDownload for optimized CMD process -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-14 20:50:51 GMT mtk01426 -** Fixed compile error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-13 16:38:40 GMT mtk01084 -** add wifi start function -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-13 14:26:44 GMT mtk01084 -** modify a parameter about FW download length -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-10 21:53:42 GMT mtk01461 -** Update wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-08 16:51:04 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-01 10:32:47 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-03-23 21:44:13 GMT mtk01461 -** Refine TC assignment for WmmAssoc flag -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 16:51:57 GMT mtk01084 -** modify the input argument of caller to RECLAIM_POWER_CONTROL_TO_PM() -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:27:13 GMT mtk01461 -** Add reference code of FW Image Download -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:37 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:08 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 16:28:45 GMT mtk01426 -** Init develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" -#include "mgmt/ais_fsm.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* 6.1.1.2 Interpretation of priority parameter in MAC service primitives */ -/* Static convert the Priority Parameter/TID(User Priority/TS Identifier) to Traffic Class */ -const UINT_8 aucPriorityParam2TC[] = { - TC1_INDEX, - TC0_INDEX, - TC0_INDEX, - TC1_INDEX, - TC2_INDEX, - TC2_INDEX, - TC3_INDEX, - TC3_INDEX -}; - -#if QM_TEST_MODE -extern QUE_MGT_T g_rQM; -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _CODE_MAPPING_T { - UINT_32 u4RegisterValue; - INT_32 u4TxpowerOffset; -} CODE_MAPPING_T, *P_CODE_MAPPING_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -BOOLEAN fgIsBusAccessFailed = FALSE; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SIGNED_EXTEND(n, _sValue) \ - (((_sValue) & BIT((n)-1)) ? ((_sValue) | BITS(n,31)) : \ - ((_sValue) & ~BITS(n,31))) - -// TODO: Check -/* OID set handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerWOHwAccess[] = { - wlanoidSetChannel, - wlanoidSetBeaconInterval, - wlanoidSetAtimWindow, - wlanoidSetFrequency, -}; - -// TODO: Check -/* OID query handlers without the need to access HW register */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerWOHwAccess[] = { - wlanoidQueryBssid, - wlanoidQuerySsid, - wlanoidQueryInfrastructureMode, - wlanoidQueryAuthMode, - wlanoidQueryEncryptionStatus, - wlanoidQueryPmkid, - wlanoidQueryNetworkTypeInUse, - wlanoidQueryBssidList, - wlanoidQueryAcpiDevicePowerState, - wlanoidQuerySupportedRates, - wlanoidQueryDesiredRates, - wlanoidQuery802dot11PowerSaveProfile, - wlanoidQueryBeaconInterval, - wlanoidQueryAtimWindow, - wlanoidQueryFrequency, -}; - -/* OID set handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidSetHandlerAllowedInRFTest[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidRftestSetAutoTest, - wlanoidSetMcrWrite, - wlanoidSetEepromWrite -}; - -/* OID query handlers allowed in RF test mode */ -PFN_OID_HANDLER_FUNC apfnOidQueryHandlerAllowedInRFTest[] = { - wlanoidRftestQueryAutoTest, - wlanoidQueryMcrRead, - wlanoidQueryEepromRead -} -; - -PFN_OID_HANDLER_FUNC apfnOidWOTimeoutCheck[] = { - wlanoidRftestSetTestMode, - wlanoidRftestSetAbortTestMode, - wlanoidSetAcpiDevicePowerState, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -extern int sprintf(char * buf, const char * fmt, ...); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is a private routine, which is used to check if HW access is needed -* for the OID query/ set handlers. -* -* \param[IN] pfnOidHandler Pointer to the OID handler. -* \param[IN] fgSetInfo It is a Set information handler. -* -* \retval TRUE This function needs HW access -* \retval FALSE This function does not need HW access -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOHwAccess; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerWOHwAccess = apfnOidSetHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidSetHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerWOHwAccess = apfnOidQueryHandlerWOHwAccess; - u4NumOfElem = sizeof(apfnOidQueryHandlerWOHwAccess) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOHwAccess[i] == pfnOidHandler) { - return FALSE; - } - } - - return TRUE; -} /* wlanIsHandlerNeedHwAccess */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set flag for later handling card -* ejected event. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -* -* \note When surprised removal happens, Glue layer should invoke this -* function to notify WPDD not to do any hw access. -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanCardEjected ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("wlanCardEjected"); - //INITLOG(("\n")); - - ASSERT(prAdapter); - - /* mark that the card is being ejected, NDIS will shut us down soon */ - nicTxRelease(prAdapter); - -} /* wlanCardEjected */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Create adapter object -* -* \param prAdapter This routine is call to allocate the driver software objects. -* If fails, return NULL. -* \retval NULL If it fails, NULL is returned. -* \retval NOT NULL If the adapter was initialized successfully. -*/ -/*----------------------------------------------------------------------------*/ -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdpater = (P_ADAPTER_T)NULL; - - DEBUGFUNC("wlanAdapterCreate"); - - do { - prAdpater = (P_ADAPTER_T) kalMemAlloc(sizeof(ADAPTER_T), VIR_MEM_TYPE); - - if (!prAdpater) { - DBGLOG(INIT, ERROR, ("Allocate ADAPTER memory ==> FAILED\n")); - break; - } - -#if QM_TEST_MODE - g_rQM.prAdapter = prAdpater; -#endif - kalMemZero(prAdpater, sizeof(ADAPTER_T)); - prAdpater->prGlueInfo = prGlueInfo; - - } while(FALSE); - - return prAdpater; -} /* wlanAdapterCreate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroy adapter object -* -* \param prAdapter This routine is call to destroy the driver software objects. -* If fails, return NULL. -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - - if (!prAdapter) { - return; - } - - kalMemFree(prAdapter, VIR_MEM_TYPE, sizeof(ADAPTER_T)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize the adapter. The sequence is -* 1. Disable interrupt -* 2. Read adapter configuration from EEPROM and registry, verify chip ID. -* 3. Create NIC Tx/Rx resource. -* 4. Initialize the chip -* 5. Initialize the protocol -* 6. Enable Interrupt -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 i, u4Value = 0; - UINT_32 u4WHISR = 0; - UINT_8 aucTxCount[8]; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwLoadAddr, u4ImgSecSize; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - PARAM_PTA_IPC_T rBwcsPta; - UINT_32 u4SetInfoLen; -#endif - - ASSERT(prAdapter); - - DEBUGFUNC("wlanAdapterStart"); - - //4 <0> Reset variables in ADAPTER_T - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - - QUEUE_INITIALIZE(&(prAdapter->rPendingCmdQueue)); - - /* Initialize rWlanInfo */ - kalMemSet(&(prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - //4 <0.1> reset fgIsBusAccessFailed - fgIsBusAccessFailed = FALSE; - - do { - if ( (u4Status = nicAllocateAdapterMemory(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicAllocateAdapterMemory Error!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - prAdapter->u4OsPacketFilter = PARAM_PACKET_FILTER_SUPPORTED; - -#if defined(MT6620) || defined(MT6628) - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - //4 <2> Initialize System Service (MGMT Memory pool and STA_REC) - nicInitSystemService(prAdapter); - - //4 <3> Initialize Tx - nicTxInitialize(prAdapter); - wlanDefTxPowerCfg(prAdapter); - - //4 <4> Initialize Rx - nicRxInitialize(prAdapter); - -#if CFG_ENABLE_FW_DOWNLOAD - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 1. disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 2. Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3. FW download here */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImageFileLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImageFileLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - prRegInfo->u4StartAddress); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", prRegInfo->u4LoadAddress)); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImageFileLength)); - - do { -#if CFG_SUPPORT_WHOLE_CHIP_RESET -#define RESET_RDY_INTERVAL (120) - - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.0.1 delay for EEIF ready */ - kalMsleep(RESET_RDY_INTERVAL); -#endif - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImageFileLength >> 6); - - kalMsleep(100); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = prRegInfo->u4LoadAddress; - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImageFileLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImageFileLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImageFileLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* 5. disable interrupt */ - nicDisableInterrupt(prAdapter); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif -#endif - - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - //4 <5> check Wi-Fi FW asserts ready bit - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - UINT_32 u4MailBox0; - - nicGetMailbox(prAdapter, 0, &u4MailBox0); - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout, ID=%d\n", - (u4MailBox0 & 0x0000FFFF))); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Acquiring LP-OWN\n")); - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - if(prAdapter->fgIsFwOwn == TRUE) { - DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> Initialize the Adapter - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* post initialization for MT5931 due to some CR is only accessible after driver own */ - nicRxPostInitialize(prAdapter); -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 1. reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 2. reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - wlanSetMcuOscStableTime(prAdapter, 0); -#endif - - /* 3. query for permanent address by polling */ - wlanQueryPermanentAddress(prAdapter); - -#if (CFG_SUPPORT_NIC_CAPABILITY == 1) - /* 4. query for NIC capability */ - wlanQueryNicCapability(prAdapter); -#endif - - /* 5. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6. indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - break; - } - - /* OID timeout timer initialize */ - cnmTimerInitTimer(prAdapter, - &prAdapter->rOidTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)wlanReleasePendingOid, - (UINT_32)NULL); - - /* Power state initialization */ - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - - /* Online scan option */ - if(prRegInfo->fgDisOnlineScan == 0) { - prAdapter->fgEnOnlineScan = TRUE; - } - else { - prAdapter->fgEnOnlineScan = FALSE; - } - - /* Beacon lost detection option */ - if(prRegInfo->fgDisBcnLostDetection != 0) { - prAdapter->fgDisBcnLostDetection = TRUE; - } - - /* Load compile time constant */ - prAdapter->rWlanInfo.u2BeaconPeriod = CFG_INIT_ADHOC_BEACON_INTERVAL; - prAdapter->rWlanInfo.u2AtimWindow = CFG_INIT_ADHOC_ATIM_WINDOW; - -#if 1// set PM parameters - prAdapter->fgEnArpFilter = prRegInfo->fgEnArpFilter; - prAdapter->u4PsCurrentMeasureEn = prRegInfo->u4PsCurrentMeasureEn; - - prAdapter->u4UapsdAcBmp = prRegInfo->u4UapsdAcBmp; - - prAdapter->u4MaxSpLen = prRegInfo->u4MaxSpLen; - - DBGLOG(INIT, TRACE, ("[1] fgEnArpFilter:0x%x, u4UapsdAcBmp:0x%x, u4MaxSpLen:0x%x", - prAdapter->fgEnArpFilter, - prAdapter->u4UapsdAcBmp, - prAdapter->u4MaxSpLen)); - - prAdapter->fgEnCtiaPowerMode = FALSE; - -#endif - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, prRegInfo); - - /* Enable WZC Disassociation */ - prAdapter->rWifiVar.fgSupportWZCDisassociation = TRUE; - - /* Apply Rate Setting */ - if((ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prRegInfo->u4FixedRate); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* Disable Hidden SSID Join */ - prAdapter->rWifiVar.fgEnableJoinToHiddenSSID = FALSE; - - /* Enable Short Slot Time */ - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable = TRUE; - - /* configure available PHY type set */ - nicSetAvailablePhyTypeSet(prAdapter); - -#if 1// set PM parameters - { -#if CFG_SUPPORT_PWR_MGT - prAdapter->u4PowerMode = prRegInfo->u4PowerMode; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile = ENUM_PSP_FAST_SWITCH; -#else - prAdapter->u4PowerMode = ENUM_PSP_CONTINUOUS_ACTIVE; -#endif - - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, //FIXIT - prAdapter->u4PowerMode, - FALSE); - } - -#endif - -#if CFG_SUPPORT_NVRAM - /* load manufacture data */ - wlanLoadManufactureData(prAdapter, prRegInfo); -#endif - -#if (defined(MT5931) && (!CFG_SUPPORT_BCM_BWCS)) - //Enable DPD calibration. - rBwcsPta.u.aucBTPParams[0] = 0x00; - rBwcsPta.u.aucBTPParams[1] = 0x01; - rBwcsPta.u.aucBTPParams[2] = 0x00; - rBwcsPta.u.aucBTPParams[3] = 0x80; - - wlanoidSetBT(prAdapter, - (PVOID)&rBwcsPta, - sizeof(PARAM_PTA_IPC_T), - &u4SetInfoLen); -#endif - -#if 0 - /* Update Auto rate parameters in FW */ - nicRlmArUpdateParms(prAdapter, - prRegInfo->u4ArSysParam0, - prRegInfo->u4ArSysParam1, - prRegInfo->u4ArSysParam2, - prRegInfo->u4ArSysParam3); -#endif - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* clock gating workaround */ - prAdapter->fgIsClockGatingEnabled = FALSE; -#endif - - } while(FALSE); - - if(u4Status == WLAN_STATUS_SUCCESS) { - // restore to hardware default - HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter); - HAL_SET_MAILBOX_READ_CLEAR(prAdapter, FALSE); - - /* Enable interrupt */ - nicEnableInterrupt(prAdapter); - - } - else { - // release allocated memory - nicReleaseAdapterMemory(prAdapter); - } - - return u4Status; -} /* wlanAdapterStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Uninitialize the adapter -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Value = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - /* MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - if(prAdapter->rAcpiState == ACPI_STATE_D0 && -#if (CFG_CHIP_RESET_SUPPORT == 1) - kalIsResetting() == FALSE && -#endif - kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - - /* 0. Disable interrupt, this can be done without Driver own */ - nicDisableInterrupt(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* 1. Set CMD to FW to tell WIFI to stop (enter power off state) */ - if(prAdapter->fgIsFwOwn == FALSE && - wlanSendNicPowerCtrlCmd(prAdapter, 1) == WLAN_STATUS_SUCCESS) { - /* 2. Clear pending interrupt */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 3. Wait til RDY bit has been cleaerd */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if ((u4Value & WCIR_WLAN_READY) == 0) - break; - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || i >= CFG_RESPONSE_POLLING_TIMEOUT) { - break; - } - else { - i++; - kalMsleep(10); - } - } - } - - /* 4. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - -#if CFG_FORCE_RESET_UNDER_BUS_ERROR - if(HAL_TEST_FLAG(prAdapter, ADAPTER_FLAG_HW_ERR) == TRUE) { - /* force acquire firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - /* delay for 10ms */ - kalMdelay(10); - - /* force firmware reset via software interrupt */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WSICR, WSICR_H2D_SW_INT_SET); - - /* force release firmware own */ - kalDevRegWrite(prAdapter->prGlueInfo, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - } -#endif - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - - nicRxUninitialize(prAdapter); - - nicTxRelease(prAdapter); - - /* System Service Uninitialization */ - nicUninitSystemService(prAdapter); - - nicReleaseAdapterMemory(prAdapter); - -#if defined(_HIF_SPI) - /* Note: restore the SPI Mode Select from 32 bit to default */ - nicRestoreSpiDefMode(prAdapter); -#endif - - return u4Status; -} /* wlanAdapterStop */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by ISR (interrupt). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \retval TRUE: NIC's interrupt -* \retval FALSE: Not NIC's interrupt -*/ -/*----------------------------------------------------------------------------*/ -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ) -{ - ASSERT(prAdapter); - - if (fgGlobalIntrCtrl) { - nicDisableInterrupt(prAdapter); - - //wlanIST(prAdapter); - } - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called by IST (task_let). -* -* \param prAdapter Pointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - nicProcessIST(prAdapter); - - nicEnableInterrupt(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check command queue to find out if any could be dequeued -* and/or send to HIF to MT6620 -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdQue Pointer of Command Queue (in Glue Layer) -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ) -{ - WLAN_STATUS rStatus; - QUE_T rTempCmdQue, rMergeCmdQue, rStandInCmdQue; - P_QUE_T prTempCmdQue, prMergeCmdQue, prStandInCmdQue; - P_QUE_ENTRY_T prQueueEntry; - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - ENUM_FRAME_ACTION_T eFrameAction = FRAME_ACTION_DROP_PKT; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prCmdQue); - - prTempCmdQue = &rTempCmdQue; - prMergeCmdQue = &rMergeCmdQue; - prStandInCmdQue = &rStandInCmdQue; - - QUEUE_INITIALIZE(prTempCmdQue); - QUEUE_INITIALIZE(prMergeCmdQue); - QUEUE_INITIALIZE(prStandInCmdQue); - - //4 <1> Move whole list of CMD_INFO to temp queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - //4 <2> Dequeue from head and check it is able to be sent - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while(prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - /* command packet will be always sent */ - eFrameAction = FRAME_ACTION_TX_PKT; - break; - - case COMMAND_TYPE_SECURITY_FRAME: - /* inquire with QM */ - eFrameAction = qmGetFrameAction(prAdapter, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - NULL, - FRAME_TYPE_802_1X); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - /* inquire with QM */ - prMsduInfo = (P_MSDU_INFO_T)(prCmdInfo->prPacket); - - eFrameAction = qmGetFrameAction(prAdapter, - prMsduInfo->ucNetworkType, - prMsduInfo->ucStaRecIndex, - prMsduInfo, - FRAME_TYPE_MMPDU); - break; - - default: - ASSERT(0); - break; - } - - //4 <3> handling upon dequeue result - if(eFrameAction == FRAME_ACTION_DROP_PKT) { - wlanReleaseCommand(prAdapter, prCmdInfo); - } - else if(eFrameAction == FRAME_ACTION_QUEUE_PKT) { - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - } - else if(eFrameAction == FRAME_ACTION_TX_PKT) { - //4 <4> Send the command - rStatus = wlanSendCommand(prAdapter, prCmdInfo); - - if(rStatus == WLAN_STATUS_RESOURCES) { - // no more TC4 resource for further transmission - QUEUE_INSERT_TAIL(prMergeCmdQue, prQueueEntry); - break; - } - else if(rStatus == WLAN_STATUS_PENDING) { - // command packet which needs further handling upon response - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - QUEUE_INSERT_TAIL(&(prAdapter->rPendingCmdQueue), prQueueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - } - else { - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (rStatus == WLAN_STATUS_SUCCESS) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prCmdInfo->pucInfoBuffer); - } - } - else { - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, prCmdInfo->u4SetInfoLen, rStatus); - } - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - } - else { - ASSERT(0); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - //4 <3> Merge back to original queue - //4 <3.1> Merge prMergeCmdQue & prTempCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prTempCmdQue); - - //4 <3.2> Move prCmdQue to prStandInQue, due to prCmdQue might differ due to incoming 802.1X frames - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prStandInCmdQue, prCmdQue); - - //4 <3.3> concatenate prStandInQue to prMergeCmdQue - QUEUE_CONCATENATE_QUEUES(prMergeCmdQue, prStandInCmdQue); - - //4 <3.4> then move prMergeCmdQue to prCmdQue - QUEUE_MOVE_ALL(prCmdQue, prMergeCmdQue); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_QUE); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanProcessCommandQueue() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will take CMD_INFO_T which carry some informations of -* incoming OID and notify the NIC_TX to send CMD. -* -* \param prAdapter Pointer of Adapter Data Structure -* \param prCmdInfo Pointer of P_CMD_INFO_T -* -* \retval WLAN_STATUS_SUCCESS : CMD was written to HIF and be freed(CMD Done) immediately. -* \retval WLAN_STATUS_RESOURCE : No resource for current command, need to wait for previous -* frame finishing their transmission. -* \retval WLAN_STATUS_FAILURE : Get failure while access HIF or been rejected. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_8 ucTC; /* "Traffic Class" SW(Driver) resource classification */ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - prTxCtrl = &prAdapter->rTxCtrl; - - //DbgPrint("wlanSendCommand()\n"); - // - // -#if DBG && 0 - LOG_FUNC("wlanSendCommand()\n"); - LOG_FUNC("CmdType %u NetworkType %u StaRecIndex %u Oid %u CID 0x%x SetQuery %u NeedResp %u CmdSeqNum %u\n", - prCmdInfo->eCmdType, - prCmdInfo->eNetworkType, - prCmdInfo->ucStaRecIndex, - prCmdInfo->fgIsOid, - prCmdInfo->ucCID, - prCmdInfo->fgSetQuery, - prCmdInfo->fgNeedResp, - prCmdInfo->ucCmdSeqNum); -#endif - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - do { - // <0> card removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - rStatus = WLAN_STATUS_FAILURE; - break; - } - - // <1> Normal case of sending CMD Packet - if (!prCmdInfo->fgDriverDomainMCR) { - // <1.1> Assign Traffic Class(TC) = TC4. - ucTC = TC4_INDEX; - - // <1.2> Check if pending packet or resource was exhausted - if ((rStatus = nicTxAcquireResource(prAdapter, ucTC)) == WLAN_STATUS_RESOURCES) { - DbgPrint("NO Resource:%d\n", ucTC); - break; - } - - // <1.3> Forward CMD_INFO_T to NIC Layer - rStatus = nicTxCmd(prAdapter, prCmdInfo, ucTC); - - // <1.4> Set Pending in response to Query Command/Need Response - if (rStatus == WLAN_STATUS_SUCCESS) { - if ((!prCmdInfo->fgSetQuery) || (prCmdInfo->fgNeedResp)) { - rStatus = WLAN_STATUS_PENDING; - } - } - } - // <2> Special case for access Driver Domain MCR - else { - P_CMD_ACCESS_REG prCmdAccessReg; - prCmdAccessReg = (P_CMD_ACCESS_REG)(prCmdInfo->pucInfoBuffer + CMD_HDR_SIZE); - - if (prCmdInfo->fgSetQuery) { - HAL_MCR_WR(prAdapter, - (prCmdAccessReg->u4Address & BITS(2,31)), //address is in DWORD unit - prCmdAccessReg->u4Data); - } - else { - P_CMD_ACCESS_REG prEventAccessReg; - UINT_32 u4Address; - - u4Address = prCmdAccessReg->u4Address; - prEventAccessReg = (P_CMD_ACCESS_REG)prCmdInfo->pucInfoBuffer; - prEventAccessReg->u4Address = u4Address; - - HAL_MCR_RD(prAdapter, - prEventAccessReg->u4Address & BITS(2,31), //address is in DWORD unit - &prEventAccessReg->u4Data); - } - } - - } - while (FALSE); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return rStatus; -} /* end of wlanSendCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function will release thd CMD_INFO upon its attribution - * - * \param prAdapter Pointer of Adapter Data Structure - * \param prCmdInfo Pointer of CMD_INFO_T - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - - switch(prCmdInfo->eCmdType) { - case COMMAND_TYPE_GENERAL_IOCTL: - case COMMAND_TYPE_NETWORK_IOCTL: - if (prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_FAILURE); - } - break; - - case COMMAND_TYPE_SECURITY_FRAME: - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); - break; - - case COMMAND_TYPE_MANAGEMENT_FRAME: - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - /* invoke callbacks */ - if(prMsduInfo->pfTxDoneHandler != NULL) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - cnmMgtPktFree(prAdapter, prMsduInfo); - break; - - default: - ASSERT(0); - break; - } - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - -} /* end of wlanReleaseCommand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending OID and -* compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReleasePendingOid"); - - ASSERT(prAdapter); - - DBGLOG(INIT, ERROR, ("OID Timeout! Releasing pending OIDs ..\n")); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->fgIsOid) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - // 2: Clear pending OID in glue layer command queue - kalOidCmdClearance(prAdapter->prGlueInfo); - - // 3: Clear pending OID queued in pvOidEntry with REQ_FLAG_OID set - kalOidClearance(prAdapter->prGlueInfo); - - } while(FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will search the CMD Queue to look for the pending CMD/OID for specific -* NETWORK TYPE and compelete it immediately when system request a reset. -* -* \param prAdapter ointer of Adapter Data Structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReleasePendingCMDbyNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - do { - // 1: Clear Pending OID in prAdapter->rPendingCmdQueue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - DBGLOG(P2P, TRACE, ("Pending CMD for Network Type:%d \n", prCmdInfo->eNetworkType)); - - if (prCmdInfo->eNetworkType == eNetworkType) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prAdapter, prCmdInfo); - } - else - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); - - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - - } while(FALSE); - - return; -} /* wlanReleasePendingCMDbyNetwork */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the packet buffer and reallocate one to the RFB -* -* \param prAdapter Pointer of Adapter Data Structure -* \param pvPacket Pointer of returned packet -* -* \retval WLAN_STATUS_SUCCESS: Success -* \retval WLAN_STATUS_FAILURE: Failed -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("wlanReturnPacket"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if (pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, pvPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT, 1); -#if CFG_NATIVE_802_11 - if (GLUE_TEST_FLAG(prAdapter->prGlueInfo, GLUE_FLAG_HALT)) { - } -#endif - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rIndicatedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (!prSwRfb){ - ASSERT(0); - return; - } - - if (nicRxSetupRFB(prAdapter, prSwRfb)){ - ASSERT(0); - return; - } - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that returns information about -* the capabilities and status of the driver and/or its network adapter. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] pfnOidQryHandler Function pointer for the OID query handler. -* \param[IN] pvInfoBuf Points to a buffer for return the query information. -* \param[IN] u4QueryBufferLen Specifies the number of bytes at pvInfoBuf. -* \param[OUT] pu4QueryInfoLen Points to the number of bytes it written or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4QryInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet */ - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidQryHandler, FALSE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidQryHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4QryInfoLen); - } -#endif - - return status; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a required function that allows bound protocol drivers, -* or NDIS, to request changes in the state information that the miniport -* maintains for particular object identifiers, such as changes in multicast -* addresses. -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* \param[IN] pfnOidSetHandler Points to the OID set handlers. -* \param[IN] pvInfoBuf Points to a buffer containing the OID-specific data for the set. -* \param[IN] u4InfoBufLen Specifies the number of bytes at prSetBuffer. -* \param[OUT] pu4SetInfoLen Points to the number of bytes it read or is needed. -* -* \retval WLAN_STATUS_xxx Different WLAN_STATUS code returned by different handlers. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status = WLAN_STATUS_FAILURE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - // ignore any OID request after connected, under PS current measurement mode - if (prAdapter->u4PsCurrentMeasureEn && - (prAdapter->prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED)) { - return WLAN_STATUS_SUCCESS; // note: return WLAN_STATUS_FAILURE or WLAN_STATUS_SUCCESS for blocking OIDs during current measurement ?? - } - -#if 1 - /* most OID handler will just queue a command packet - * for power state transition OIDs, handler will acquire power control by itself - */ - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); -#else - if (wlanIsHandlerNeedHwAccess(pfnOidSetHandler, TRUE)) { - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - } - else { - status = pfnOidSetHandler(prAdapter, - pvInfoBuf, - u4InfoBufLen, - pu4SetInfoLen); - } -#endif - - return status; -} - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a used to query driver's config wapi mode or not -* -* \param[IN] prAdapter Pointer to the Glue info structure. -* -* \retval TRUE for use wapi mode -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryWapiMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rWifiVar.rConnSettings.fgWapiMode; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to Promiscuous Mode. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnablePromiscuousMode Enable/ disable RX Promiscuous Mode. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ) -{ - ASSERT(prAdapter); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to set RX filter to allow to receive -* broadcast address packets. -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ) -{ - ASSERT(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to send out CMD_NIC_POWER_CTRL command packet -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] ucPowerMode refer to CMD/EVENT document -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ) -{ - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - /* 1. Prepare CMD */ - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL))); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - /* 2.1 increase command sequence number */ - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - /* 2.2 Setup common CMD Info Packet */ - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_NIC_POWER_CTRL)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_NIC_POWER_CTRL; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_NIC_POWER_CTRL); - - /* 2.3 Setup WIFI_CMD_T */ - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - kalMemZero(prWifiCmd->aucBuffer, sizeof(CMD_NIC_POWER_CTRL)); - ((P_CMD_NIC_POWER_CTRL)(prWifiCmd->aucBuffer))->ucPowerMode = ucPowerMode; - - /* 3. Issue CMD for entering specific power mode */ - ucTC = TC4_INDEX; - - while(1) { - // 3.0 Removal check - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - status = WLAN_STATUS_FAILURE; - break; - } - - // 3.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - status = WLAN_STATUS_FAILURE; - break; - } - else { - continue; - } - } - - // 3.2 Send CMD Info Packet - if (nicTxCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR,("Fail to transmit CMD_NIC_POWER_CTRL command\n")); - status = WLAN_STATUS_FAILURE; - } - - break; - }; - - // 4. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - // 5. Add flag - if(ucPowerMode == 1) { - prAdapter->fgIsEnterD3ReqIssued = TRUE; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to check if it is RF test mode and -* the OID is allowed to be called or not -* -* \param[IN] prAdapter Pointer to the Adapter structure. -* \param[IN] fgEnableBroadcast Enable/ disable broadcast packet to be received. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerAllowedInRFTest; - UINT_32 i; - UINT_32 u4NumOfElem; - - if (fgSetInfo) { - apfnOidHandlerAllowedInRFTest = apfnOidSetHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidSetHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - else { - apfnOidHandlerAllowedInRFTest = apfnOidQueryHandlerAllowedInRFTest; - u4NumOfElem = sizeof(apfnOidQueryHandlerAllowedInRFTest) / sizeof(PFN_OID_HANDLER_FUNC); - } - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerAllowedInRFTest[i] == pfnOidHandler) { - return TRUE; - } - } - - return FALSE; -} - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image in an aggregated way -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4PktCnt, u4Offset, u4Length; - UINT_32 u4TotalLength; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - - pucOutputBuf = prAdapter->rTxCtrl.pucTxCoalescingBufPtr; - - DEBUGFUNC("wlanImageSectionDownloadAggregated"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and Pre-fill Headers - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + CMD_PKT_SIZE_FOR_IMAGE; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->ucEtherTypeOffset = 0; - prInitHifTxHeader->ucCSflags = 0; - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - - // 4. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - - // 5.0 reset loop control variable - u4TotalLength = 0; - u4Offset = u4PktCnt = 0; - - // 5.1 main loop for maximize transmission count per access - while(u4Offset < u4ImgSecSize) { - if(nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_SUCCESS) { - // 5.1.1 calculate u4Length - if(u4Offset + CMD_PKT_SIZE_FOR_IMAGE < u4ImgSecSize) { - u4Length = CMD_PKT_SIZE_FOR_IMAGE; - } - else { - u4Length = u4ImgSecSize - u4Offset; - } - - // 5.1.1 increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5.1.2 update HIF TX hardware header - prInitHifTxHeader->u2TxByteCount = ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4Length); - - // 5.1.3 fill command header - prInitCmdDownloadBuf->u4Address = u4DestAddr + u4Offset; - prInitCmdDownloadBuf->u4Length = u4Length; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf + u4Offset, u4Length); - - // 5.1.4.1 copy header to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, - (PVOID)prCmdInfo->pucInfoBuffer, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF)); - - // 5.1.4.2 copy payload to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength + sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF), - pucImgSecBuf + u4Offset, - u4Length); - - // 5.1.4.3 update length and other variables - u4TotalLength += ALIGN_4(sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4Length); - u4Offset += u4Length; - u4PktCnt++; - - if(u4Offset < u4ImgSecSize) { - continue; - } - } - else if(u4PktCnt == 0) { - /* no resource, so get some back */ - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - } - - if(u4PktCnt != 0) { - // start transmission - HAL_WRITE_TX_PORT(prAdapter, - 0, - u4TotalLength, - (PUINT_8)pucOutputBuf, - prAdapter->u4CoalescingBufCachedSize); - - // reset varaibles - u4PktCnt = 0; - u4TotalLength = 0; - } - } - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #else - #error "Only MT6620/MT6628 supports firmware download in an aggregated way" - - return WLAN_STATUS_FAILURE; - - #endif -} - - #endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to download FW image. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ) -{ - #if defined(MT6620) || defined(MT6628) - - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_DOWNLOAD_BUF prInitCmdDownloadBuf; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + u4ImgSecSize); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_DOWNLOAD_BUF) + (UINT_16)u4ImgSecSize; - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_DOWNLOAD_BUF; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Setup CMD_DOWNLOAD_BUF - prInitCmdDownloadBuf = (P_INIT_CMD_DOWNLOAD_BUF)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdDownloadBuf->u4Address = u4DestAddr; - prInitCmdDownloadBuf->u4Length = u4ImgSecSize; - prInitCmdDownloadBuf->u4CRC32 = wlanCRC32(pucImgSecBuf, u4ImgSecSize); - prInitCmdDownloadBuf->u4DataMode = 0 - #if CFG_ENABLE_FW_DOWNLOAD_ACK - | DOWNLOAD_BUF_ACK_OPTION // ACK needed - #endif - #if CFG_ENABLE_FW_ENCRYPTION - | DOWNLOAD_BUF_ENCRYPTION_MODE - #endif - ; - kalMemCopy(prInitCmdDownloadBuf->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 6. Send FW_Download command - while(1) { - // 6.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 6.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - #if CFG_ENABLE_FW_DOWNLOAD_ACK - // 7. Wait for INIT_EVENT_ID_CMD_RESULT - u4Status = wlanImageSectionDownloadStatus(prAdapter, ucCmdSeqNum); - #endif - - // 8. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; - - #elif defined(MT5931) - - UINT_32 i, u4Value; - P_HIF_HW_TX_HEADER_T prHifTxHeader; - - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - ASSERT(pucImgSecBuf); - ASSERT(u4ImgSecSize <= CMD_PKT_SIZE_FOR_IMAGE); - - DEBUGFUNC("wlanImageSectionDownload"); - DBGLOG(INIT, TRACE, ("Destination: 0x%08X / Length: 0x%08X\n", u4DestAddr, u4ImgSecSize)); - - if (u4ImgSecSize == 0) { - return WLAN_STATUS_SUCCESS; - } - - // 1. Use TX coalescing buffer - prHifTxHeader = (P_HIF_HW_TX_HEADER_T) prAdapter->pucCoalescingBufCached; - - // 2. Setup HIF_TX_HEADER - prHifTxHeader->u2TxByteCount = (UINT_16)(ALIGN_4(sizeof(HIF_HW_TX_HEADER_T) + u4ImgSecSize)); - prHifTxHeader->ucEtherTypeOffset = 0; - prHifTxHeader->ucCSflags = 0; - - // 3. Copy payload - kalMemCopy(prHifTxHeader->aucBuffer, pucImgSecBuf, u4ImgSecSize); - - // 3.1 add 4-bytes zero tail - kalMemZero(&(prHifTxHeader->aucBuffer[ALIGN_4(u4ImgSecSize)]), sizeof(HIF_HW_TX_HEADER_T)); - - // 4. Poll til FWDL_RDY = 1 - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_FWDLSR, &u4Value); - - if (u4Value & FWDLSR_FWDL_RDY) { - DBGLOG(INIT, TRACE, ("FWDL_RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for FWDL_RDY: Timeout (0x%08X)\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - // 5. Send firmware - HAL_PORT_WR(prAdapter, - MCR_FWDLDR, - prHifTxHeader->u2TxByteCount, - (PUINT_8)prHifTxHeader, - prAdapter->u4CoalescingBufCachedSize); - - return u4Status; - - #endif -} - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm previously firmware download is done without error -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR)]; - UINT_32 u4RxPktLength; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_PENDING_ERROR prEventPendingError; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_8 ucTC, ucCmdSeqNum; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanImageQueryStatus"); - - // 1. Allocate CMD Info Packet and it Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, sizeof(INIT_HIF_TX_HEADER_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T)); - prCmdInfo->u2InfoBufLen = sizeof(INIT_HIF_TX_HEADER_T); - - // 2. Use TC0's resource to download image. (only TC0 is allowed) - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_QUERY_PENDING_ERROR; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - // 5. Send command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit image download command\n")); - } - - break; - }; - - // 6. Wait for INIT_EVENT_ID_PENDING_ERROR - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_PENDING_ERROR), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_PENDING_ERROR) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prEventPendingError = (P_INIT_EVENT_PENDING_ERROR) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventPendingError->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - // 7. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to confirm the status of -* previously downloaded firmware scatter -* -* @param prAdapter Pointer to the Adapter structure. -* ucCmdSeqNum Sequence number of previous firmware scatter -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ) -{ - UINT_8 aucBuffer[sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT)]; - P_INIT_HIF_RX_HEADER_T prInitHifRxHeader; - P_INIT_EVENT_CMD_RESULT prEventCmdResult; - UINT_32 u4RxPktLength; - WLAN_STATUS u4Status; - - ASSERT(prAdapter); - - do { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(nicRxWaitResponse(prAdapter, - 0, - aucBuffer, - sizeof(INIT_HIF_RX_HEADER_T) + sizeof(INIT_EVENT_CMD_RESULT), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prInitHifRxHeader = (P_INIT_HIF_RX_HEADER_T) aucBuffer; - - // EID / SeqNum check - if(prInitHifRxHeader->rInitWifiEvent.ucEID != INIT_EVENT_ID_CMD_RESULT) { - u4Status = WLAN_STATUS_FAILURE; - } - else if(prInitHifRxHeader->rInitWifiEvent.ucSeqNum != ucCmdSeqNum) { - u4Status = WLAN_STATUS_FAILURE; - } - else { - prEventCmdResult = (P_INIT_EVENT_CMD_RESULT) (prInitHifRxHeader->rInitWifiEvent.aucBuffer); - if(prEventCmdResult->ucStatus != 0) { // 0 for download success - u4Status = WLAN_STATUS_FAILURE; - } - else { - u4Status = WLAN_STATUS_SUCCESS; - } - } - } - } while (FALSE); - - return u4Status; -} - - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to start FW normal operation. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ) -{ - P_CMD_INFO_T prCmdInfo; - P_INIT_HIF_TX_HEADER_T prInitHifTxHeader; - P_INIT_CMD_WIFI_START prInitCmdWifiStart; - UINT_8 ucTC, ucCmdSeqNum; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanConfigWifiFunc"); - - // 1. Allocate CMD Info Packet and its Buffer. - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - kalMemZero(prCmdInfo, sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START)); - prCmdInfo->u2InfoBufLen = - sizeof(INIT_HIF_TX_HEADER_T) + sizeof(INIT_CMD_WIFI_START); - - // 2. Always use TC0 - ucTC = TC0_INDEX; - - // 3. increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // 4. Setup common CMD Info Packet - prInitHifTxHeader = (P_INIT_HIF_TX_HEADER_T)(prCmdInfo->pucInfoBuffer); - prInitHifTxHeader->rInitWifiCmd.ucCID = INIT_CMD_ID_WIFI_START; - prInitHifTxHeader->rInitWifiCmd.ucSeqNum = ucCmdSeqNum; - - prInitCmdWifiStart = (P_INIT_CMD_WIFI_START)(prInitHifTxHeader->rInitWifiCmd.aucBuffer); - prInitCmdWifiStart->u4Override = (fgEnable == TRUE ? 1 : 0); - prInitCmdWifiStart->u4Address = u4StartAddress; - - // 5. Seend WIFI start command - while(1) { - // 5.1 Acquire TX Resource - if (nicTxAcquireResource(prAdapter, ucTC) == WLAN_STATUS_RESOURCES) { - if (nicTxPollingResource(prAdapter, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to get TX resource return within timeout\n")); - break; - } - else { - continue; - } - } - - // 5.2 Send CMD Info Packet - if (nicTxInitCmd(prAdapter, prCmdInfo, ucTC) != WLAN_STATUS_SUCCESS) { - u4Status = WLAN_STATUS_FAILURE; - DBGLOG(INIT, ERROR,("Fail to transmit WIFI start command\n")); - } - - break; - }; - - // 6. Free CMD Info Packet. - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate CRC32 checksum -* -* @param buf Pointer to the data. -* @param len data length -* -* @return crc32 value -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len) -{ - UINT_32 i, crc32 = 0xFFFFFFFF; - const UINT_32 crc32_ccitt_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d }; - - for (i = 0; i < len; i++) - crc32 = crc32_ccitt_table[(crc32 ^ buf[i]) & 0xff] ^ (crc32 >> 8); - - return ( ~crc32 ); -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to process queued RX packets -* -* @param prAdapter Pointer to the Adapter structure. -* prSwRfbListHead Pointer to head of RX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - P_SW_RFB_T prSwRfb, prNextSwRfb; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(prSwRfbListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prSwRfb = prSwRfbListHead; - - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - switch(prSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prSwRfb); - break; - - default: - break; - } - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to purge queued TX packets -* by indicating failure to OS and returned to free list -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfoListHead Pointer to head of TX packets link list -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - nicTxReturnMsduInfo(prAdapter, prMsduInfoListHead); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the OID handler needs timeout -* -* @param prAdapter Pointer to the Adapter structure. -* pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ) -{ - PFN_OID_HANDLER_FUNC* apfnOidHandlerWOTimeoutCheck; - UINT_32 i; - UINT_32 u4NumOfElem; - - apfnOidHandlerWOTimeoutCheck = apfnOidWOTimeoutCheck; - u4NumOfElem = sizeof(apfnOidWOTimeoutCheck) / sizeof(PFN_OID_HANDLER_FUNC); - - for (i = 0; i < u4NumOfElem; i++) { - if (apfnOidHandlerWOTimeoutCheck[i] == pfnOidHandler) { - return FALSE; - } - } - - // set timer if need timeout check - //cnmTimerStartTimer(prAdapter, - // &(prAdapter->rOidTimeoutTimer), - // 1000); - cnmTimerStartTimer(prAdapter, - &(prAdapter->rOidTimeoutTimer), - 2000); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to clear any pending OID timeout check -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerStopTimer(prAdapter, &(prAdapter->rOidTimeoutTimer)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to set up the MCUSYS's OSC stable time -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ) -{ - UINT_8 ucCmdSeqNum = 0; - P_CMD_INFO_T prCmdInfo = NULL; - P_WIFI_CMD_T prWifiCmd = NULL; - P_CMD_MCU_LP_PARAM_T prMcuSetOscCmd = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_MCU_LP_PARAM_T cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_MCU_LP_PARAM_T); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_SET_OSC; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_MCU_LP_PARAM_T); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_MCU_LP_PARAM_T - prMcuSetOscCmd = (P_CMD_MCU_LP_PARAM_T)(prWifiCmd->aucBuffer); - prMcuSetOscCmd->u2OscStableTime = u2OscStableTime; - - status = wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return status; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update network address in firmware domain -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_FAILURE The request could not be processed -* WLAN_STATUS_PENDING The request has been queued for later processing -* WLAN_STATUS_SUCCESS The request has been processed -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ) -{ - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - PARAM_MAC_ADDRESS rMacAddr; - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_BASIC_CONFIG prCmdBasicConfig; - UINT_32 u4SysTime; - - DEBUGFUNC("wlanUpdateNetworkAddress"); - - ASSERT(prAdapter); - - if(kalRetrieveNetworkAddress(prAdapter->prGlueInfo, &rMacAddr) == FALSE - || IS_BMCAST_MAC_ADDR(rMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, rMacAddr)) { - // eFUSE has a valid address, don't do anything - if(prAdapter->fgIsEmbbededMacAddrValid == TRUE) { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using embedded MAC address")); -#endif - return WLAN_STATUS_SUCCESS; - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using dynamically generated MAC address")); -#endif - // dynamic generate - u4SysTime = (UINT_32) kalGetTimeTick(); - - rMacAddr[0] = 0x00; - rMacAddr[1] = 0x08; - rMacAddr[2] = 0x22; - - kalMemCopy(&rMacAddr[3], &u4SysTime, 3); - } - } - else { -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("Using host-supplied MAC address")); -#endif - } - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, - CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - // configure CMD_BASIC_CONFIG - prCmdBasicConfig = (P_CMD_BASIC_CONFIG)(prWifiCmd->aucBuffer); - kalMemCopy(&(prCmdBasicConfig->rMyMacAddr), &rMacAddr, PARAM_MAC_ADDR_LEN); - prCmdBasicConfig->ucNative80211 = 0; - prCmdBasicConfig->rCsumOffload.u2RxChecksum = 0; - prCmdBasicConfig->rCsumOffload.u2TxChecksum = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - prCmdBasicConfig->rCsumOffload.u2TxChecksum |= BIT(0); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(2); - - if(prAdapter->u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(1); - - if(prAdapter->u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - prCmdBasicConfig->rCsumOffload.u2RxChecksum |= BIT(0); -#endif - - if(wlanSendCommand(prAdapter, prCmdInfo) == WLAN_STATUS_RESOURCES) { - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryAddress; - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return WLAN_STATUS_PENDING; - } - else { - nicCmdEventQueryAddress(prAdapter, prCmdInfo, (PUINT_8)prCmdBasicConfig); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - return WLAN_STATUS_SUCCESS; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if the device is in RF test mode -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->fgTestMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to identify 802.1x and Bluetooth-over-Wi-Fi -* security frames, and queued into command queue for strict ordering -* due to 802.1x frames before add-key OIDs are not to be encrypted -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prPacket Pointer of native packet -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ) -{ - UINT_8 ucPriorityParam; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - P_CMD_INFO_T prCmdInfo; - - ASSERT(prAdapter); - ASSERT(prPacket); - - if (kalQoSFrameClassifierAndPacketInfo(prAdapter->prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == TRUE) { - if(fgIs1x == FALSE) { - return FALSE; - } - else { - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - DBGLOG(RSN, INFO, ("T1X len=%d\n", u4PacketLen)); - - if (prCmdInfo) { - P_STA_RECORD_T prStaRec; - // fill arrival time - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_SECURITY_FRAME; - prCmdInfo->u2InfoBufLen = (UINT_16)u4PacketLen; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = prPacket; -#if 0 - prCmdInfo->ucStaRecIndex = qmGetStaRecIdx(prAdapter, - aucEthDestAddr, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType); -#endif - prStaRec = cnmGetStaRecByAddress(prAdapter, - (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType, - aucEthDestAddr); - if(prStaRec) { - prCmdInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prCmdInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - } - - prCmdInfo->eNetworkType = (ENUM_NETWORK_TYPE_INDEX_T)ucNetworkType; - prCmdInfo->pfCmdDoneHandler = wlanSecurityFrameTxDone; - prCmdInfo->pfCmdTimeoutHandler = wlanSecurityFrameTxTimeout; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - return TRUE; - } - else { - ASSERT(0); - return FALSE; - } - } - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has been sent to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* @param pucEventBuf meaningless, only for API compatibility -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - if (prCmdInfo->eNetworkType == NETWORK_TYPE_AIS_INDEX && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure) { - P_STA_RECORD_T prSta = cnmGetStaRecByIndex(prAdapter, prCmdInfo->ucStaRecIndex); - if (prSta) { - kalMsleep(10); - secFsmEventEapolTxDone(prAdapter, prSta, TX_RESULT_SUCCESS); - } - } - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_SUCCESS); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when 802.1x or Bluetooth-over-Wi-Fi -* security frames has failed sending to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prCmdInfo Pointer of CMD_INFO_T -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - kalSecurityFrameSendComplete(prAdapter->prGlueInfo, - prCmdInfo->prPacket, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called before AIS is starting a new scan -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgKeepCurrOne = FALSE; - UINT_32 i; - - ASSERT(prAdapter); - - // clear scanning result - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - fgKeepCurrOne = TRUE; - - if(i != 0) { - // copy structure - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[0]), - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] != &(prAdapter->rWlanInfo.aucScanIEBuf[0])) { - // move IEs to head - kalMemCopy(prAdapter->rWlanInfo.aucScanIEBuf, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // modify IE pointer - prAdapter->rWlanInfo.apucScanResultIEs[0] = &(prAdapter->rWlanInfo.aucScanIEBuf[0]); - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[0] = NULL; - } - - break; - } - } - } - - if(fgKeepCurrOne == TRUE) { - prAdapter->rWlanInfo.u4ScanResultNum = 1; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = - ALIGN_4(prAdapter->rWlanInfo.arScanResult[0].u4IELength); - } - else { - prAdapter->rWlanInfo.u4ScanResultNum = 0; - prAdapter->rWlanInfo.u4ScanIEBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when AIS received a beacon timeout event -* -* @param prAdapter Pointer of Adapter Data Structure -* @param arBSSID MAC address of the specified BSS -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ) -{ - UINT_32 i, j, u4IELength = 0, u4IEMoveLength; - PUINT_8 pucIEPtr; - - ASSERT(prAdapter); - - // clear scanning result - i = 0; - while(1) { - if(i >= prAdapter->rWlanInfo.u4ScanResultNum) { - break; - } - - if(EQUAL_MAC_ADDR(arBSSID, prAdapter->rWlanInfo.arScanResult[i].arMacAddress)) { - // backup current IE length - u4IELength = ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4IELength); - pucIEPtr = prAdapter->rWlanInfo.apucScanResultIEs[i]; - - // removed from middle - for(j = i + 1 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[j-1]), - &(prAdapter->rWlanInfo.arScanResult[j]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - prAdapter->rWlanInfo.apucScanResultIEs[j-1] = - prAdapter->rWlanInfo.apucScanResultIEs[j]; - } - - prAdapter->rWlanInfo.u4ScanResultNum--; - - // remove IE buffer if needed := move rest of IE buffer - if(u4IELength > 0) { - u4IEMoveLength = prAdapter->rWlanInfo.u4ScanIEBufferUsage - - (((UINT_32)pucIEPtr) + u4IELength - ((UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])))); - - kalMemCopy(pucIEPtr, - (PUINT_8)(((UINT_32)pucIEPtr) + u4IELength), - u4IEMoveLength); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4IELength; - - // correction of pointers to IE buffer - for(j = 0 ; j < prAdapter->rWlanInfo.u4ScanResultNum ; j++) { - if(prAdapter->rWlanInfo.apucScanResultIEs[j] > pucIEPtr) { - prAdapter->rWlanInfo.apucScanResultIEs[j] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[j]) - u4IELength); - } - } - } - } - - i++; - } - - return; -} - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction ( - IN P_ADAPTER_T prAdapter - ) -{ -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(FALSE); - return; - } - - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prMsgFuncSwitch->fgIsFuncOn = TRUE; - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return; -} - -VOID -wlanEnableATGO ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_MSG_P2P_CONNECTION_REQUEST_T prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - prMsgConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - if (!prMsgConnReq) { - ASSERT(FALSE); - return; - } - - prMsgConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - /*=====Param Modified for test=====*/ - COPY_MAC_ADDR(prMsgConnReq->aucDeviceID, aucTargetDeviceID); - prMsgConnReq->fgIsTobeGO = TRUE; - prMsgConnReq->fgIsPersistentGroup = FALSE; - - /*=====Param Modified for test=====*/ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgConnReq, - MSG_SEND_METHOD_BUF); - - return; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve permanent address from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryPermanentAddress"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_BASIC_CONFIG); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_BASIC_CONFIG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_BASIC_CONFIG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_BASIC_CONFIG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_BASIC_CONFIG) { - return WLAN_STATUS_FAILURE; - } - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(prEvent->aucBuffer); - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucPermanentAddress, &(prEventBasicConfig->rMyMacAddr)); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, &(prEventBasicConfig->rMyMacAddr)); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to retrieve NIC capability from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_EVENT_NIC_CAPABILITY prEventNicCapability; - - ASSERT(prAdapter); - - DEBUGFUNC("wlanQueryNicCapability"); - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(EVENT_NIC_CAPABILITY); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_GET_NIC_CAPABILITY; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = 0; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(EVENT_NIC_CAPABILITY), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - if(prEvent->ucEID != EVENT_ID_NIC_CAPABILITY) { - return WLAN_STATUS_FAILURE; - } - - prEventNicCapability = (P_EVENT_NIC_CAPABILITY)(prEvent->aucBuffer); - - prAdapter->rVerInfo.u2FwProductID = prEventNicCapability->u2ProductID; - prAdapter->rVerInfo.u2FwOwnVersion = prEventNicCapability->u2FwVersion; - prAdapter->rVerInfo.u2FwPeerVersion = prEventNicCapability->u2DriverVersion; - prAdapter->fgIsHw5GBandDisabled = (BOOLEAN)prEventNicCapability->ucHw5GBandDisabled; - prAdapter->fgIsEepromUsed = (BOOLEAN)prEventNicCapability->ucEepromUsed; - prAdapter->fgIsEfuseValid = (BOOLEAN)prEventNicCapability->ucEfuseValid; - prAdapter->fgIsEmbbededMacAddrValid = (BOOLEAN)prEventNicCapability->ucMacAddrValid; - - -#if CFG_ENABLE_CAL_LOG - DBGLOG(INIT, INFO, (" RF CAL FAIL = (%d),BB CAL FAIL = (%d)\n", - prEventNicCapability->ucRfCalFail ,prEventNicCapability->ucBbCalFail )); -#endif - return WLAN_STATUS_SUCCESS; -} - -#ifdef MT6628 -static INT_32 wlanChangeCodeWord(INT_32 au4Input){ - - UINT_16 i; -#if TXPWR_USE_PDSLOPE - CODE_MAPPING_T arCodeTable[] = { - {0X100, -40}, - {0X104, -35}, - {0X128, -30}, - {0X14C, -25}, - {0X170, -20}, - {0X194, -15}, - {0X1B8, -10}, - {0X1DC, - 5}, - {0 , 0}, - {0X24 , 5}, - {0X48 , 10}, - {0X6C , 15}, - {0X90 , 20}, - {0XB4 , 25}, - {0XD8 , 30}, - {0XFC , 35}, - {0XFF , 40}, - - }; -#else - CODE_MAPPING_T arCodeTable[] = { - {0X100, 0x80}, - {0X104, 0x80}, - {0X128, 0x80}, - {0X14C, 0x80}, - {0X170, 0x80}, - {0X194, 0x94}, - {0X1B8, 0XB8}, - {0X1DC, 0xDC}, - {0 , 0}, - {0X24 , 0x24}, - {0X48 , 0x48}, - {0X6C , 0x6c}, - {0X90 , 0x7F}, - {0XB4 , 0x7F}, - {0XD8 , 0x7F}, - {0XFC , 0x7F}, - {0XFF , 0x7F}, - - }; -#endif - - for (i = 0; i < sizeof(arCodeTable) / sizeof(CODE_MAPPING_T); i++) { - - if (arCodeTable[i].u4RegisterValue == au4Input){ - return arCodeTable[i] .u4TxpowerOffset; - } - } - - - return 0; -} -#endif -#if TXPWR_USE_PDSLOPE - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ) -{ - UINT_8 ucCmdSeqNum; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_32 u4RxPktLength; - UINT_8 aucBuffer[sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG)]; - P_HIF_RX_HEADER_T prHifRxHdr; - P_WIFI_EVENT_T prEvent; - P_CMD_ACCESS_REG prCmdMcrQuery; - ASSERT(prAdapter); - - - // 1. Allocate CMD Info Packet and its Buffer - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + sizeof(CMD_ACCESS_REG)); - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_ACCESS_REG; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_ACCESS_REG); - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - kalMemCopy(prWifiCmd->aucBuffer, prMcrRdInfo, sizeof(CMD_ACCESS_REG)); - - wlanSendCommand(prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - - if(nicRxWaitResponse(prAdapter, - 1, - aucBuffer, - sizeof(WIFI_EVENT_T) + sizeof(CMD_ACCESS_REG), - &u4RxPktLength) != WLAN_STATUS_SUCCESS) { - return WLAN_STATUS_FAILURE; - } - - // header checking .. - prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer; - if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) { - return WLAN_STATUS_FAILURE; - } - - - prEvent = (P_WIFI_EVENT_T)aucBuffer; - - if(prEvent->ucEID != EVENT_ID_ACCESS_REG) { - return WLAN_STATUS_FAILURE; - } - - prCmdMcrQuery = (P_CMD_ACCESS_REG)(prEvent->aucBuffer); - prMcrRdInfo->u4McrOffset = prCmdMcrQuery->u4Address; - prMcrRdInfo->u4McrData = prCmdMcrQuery->u4Data; - - return WLAN_STATUS_SUCCESS; -} - -static INT_32 wlanIntRound(INT_32 au4Input) -{ - - - if (au4Input >= 0){ - if((au4Input%10) == 5){ - au4Input = au4Input + 5; - return au4Input; - } - } - - if (au4Input < 0){ - if((au4Input%10) == -5){ - au4Input = au4Input - 5; - return au4Input; - } - } - - return au4Input; -} - -static INT_32 wlanCal6628EfuseForm(IN P_ADAPTER_T prAdapter,INT_32 au4Input){ - - PARAM_MCR_RW_STRUC_T rMcrRdInfo; - INT_32 au4PdSlope,au4TxPwrOffset,au4TxPwrOffset_Round; - INT_8 auTxPwrOffset_Round; - - rMcrRdInfo.u4McrOffset = 0x60205c68; - rMcrRdInfo.u4McrData = 0; - au4TxPwrOffset = au4Input; - wlanQueryPdMcr(prAdapter,&rMcrRdInfo); - - au4PdSlope = (rMcrRdInfo.u4McrData) & BITS(0,6); - au4TxPwrOffset_Round = wlanIntRound((au4TxPwrOffset*au4PdSlope))/10; - - au4TxPwrOffset_Round = -au4TxPwrOffset_Round; - - if(au4TxPwrOffset_Round < -128) { - au4TxPwrOffset_Round = 128; - } - else if (au4TxPwrOffset_Round < 0){ - au4TxPwrOffset_Round += 256; - } - else if (au4TxPwrOffset_Round > 127){ - au4TxPwrOffset_Round = 127; - } - - auTxPwrOffset_Round = (UINT8) au4TxPwrOffset_Round ; - - return au4TxPwrOffset_Round; -} - -#endif - -#ifdef MT6628 -static VOID wlanChangeNvram6620to6628(PUINT_8 pucEFUSE){ - - - #define EFUSE_CH_OFFSET1_L_MASK_6620 BITS(0,8) - #define EFUSE_CH_OFFSET1_L_SHIFT_6620 0 - #define EFUSE_CH_OFFSET1_M_MASK_6620 BITS(9,17) - #define EFUSE_CH_OFFSET1_M_SHIFT_6620 9 - #define EFUSE_CH_OFFSET1_H_MASK_6620 BITS(18,26) - #define EFUSE_CH_OFFSET1_H_SHIFT_6620 18 - #define EFUSE_CH_OFFSET1_VLD_MASK_6620 BIT(27) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_6620 27 - - #define EFUSE_CH_OFFSET1_L_MASK_5931 BITS(0,7) - #define EFUSE_CH_OFFSET1_L_SHIFT_5931 0 - #define EFUSE_CH_OFFSET1_M_MASK_5931 BITS(8,15) - #define EFUSE_CH_OFFSET1_M_SHIFT_5931 8 - #define EFUSE_CH_OFFSET1_H_MASK_5931 BITS(16,23) - #define EFUSE_CH_OFFSET1_H_SHIFT_5931 16 - #define EFUSE_CH_OFFSET1_VLD_MASK_5931 BIT(24) - #define EFUSE_CH_OFFSET1_VLD_SHIFT_5931 24 - #define EFUSE_ALL_CH_OFFSET1_MASK_5931 BITS(25,27) - #define EFUSE_ALL_CH_OFFSET1_SHIFT_5931 25 - - - - - INT_32 au4ChOffset; - INT_16 au2ChOffsetL,au2ChOffsetM,au2ChOffsetH; - - - au4ChOffset = *(UINT_32*)(pucEFUSE + 72); - - if((au4ChOffset & EFUSE_CH_OFFSET1_VLD_MASK_6620) && ((*(UINT_32*)(pucEFUSE + 28)) == 0)) { - - - au2ChOffsetL = ((au4ChOffset & EFUSE_CH_OFFSET1_L_MASK_6620) >> - EFUSE_CH_OFFSET1_L_SHIFT_6620); - - au2ChOffsetM = ((au4ChOffset & EFUSE_CH_OFFSET1_M_MASK_6620) >> - EFUSE_CH_OFFSET1_M_SHIFT_6620); - - au2ChOffsetH = ((au4ChOffset & EFUSE_CH_OFFSET1_H_MASK_6620) >> - EFUSE_CH_OFFSET1_H_SHIFT_6620); - - au2ChOffsetL = wlanChangeCodeWord(au2ChOffsetL); - au2ChOffsetM = wlanChangeCodeWord(au2ChOffsetM); - au2ChOffsetH = wlanChangeCodeWord(au2ChOffsetH); - - au4ChOffset = 0; - au4ChOffset |= *(UINT_32*)(pucEFUSE + 72) - >> (EFUSE_CH_OFFSET1_VLD_SHIFT_6620 - EFUSE_CH_OFFSET1_VLD_SHIFT_5931 )& EFUSE_CH_OFFSET1_VLD_MASK_5931 ; - - - - au4ChOffset |= ((((UINT_32)au2ChOffsetL) << EFUSE_CH_OFFSET1_L_SHIFT_5931) & EFUSE_CH_OFFSET1_L_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetM) << EFUSE_CH_OFFSET1_M_SHIFT_5931) & EFUSE_CH_OFFSET1_M_MASK_5931); - au4ChOffset |= ((((UINT_32)au2ChOffsetH) << EFUSE_CH_OFFSET1_H_SHIFT_5931) & EFUSE_CH_OFFSET1_H_MASK_5931); - - *((INT_32 *)((pucEFUSE + 28))) = au4ChOffset ; - - - - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to load manufacture data from NVRAM -* if available and valid -* -* @param prAdapter Pointer of Adapter Data Structure -* @param prRegInfo Pointer of REG_INFO_T -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_RDD_CH_T rRddParam; -#endif - - ASSERT(prAdapter); - - /* 1. Version Check */ - kalGetConfigurationVersion(prAdapter->prGlueInfo, - &(prAdapter->rVerInfo.u2Part1CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part1CfgPeerVersion), - &(prAdapter->rVerInfo.u2Part2CfgOwnVersion), - &(prAdapter->rVerInfo.u2Part2CfgPeerVersion)); - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - if(CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION) { - return WLAN_STATUS_FAILURE; - } -#endif - - // MT6620 E1/E2 would be ignored directly - if(prAdapter->rVerInfo.u2Part1CfgOwnVersion == 0x0001) { - prRegInfo->ucTxPwrValid = 1; - } - else { - /* 2. Load TX power gain parameters if valid */ - if(prRegInfo->ucTxPwrValid != 0) { - // send to F/W - nicUpdateTxPower(prAdapter, (P_CMD_TX_PWR_T)(&(prRegInfo->rTxPwr))); - } - } - - /* 3. Check if needs to support 5GHz */ - if(prRegInfo->ucEnable5GBand) { - // check if it is disabled by hardware - if(prAdapter->fgIsHw5GBandDisabled - || prRegInfo->ucSupport5GBand == 0) { - prAdapter->fgEnable5GBand = FALSE; - } - else { - prAdapter->fgEnable5GBand = TRUE; - } - } - else { - prAdapter->fgEnable5GBand = FALSE; - } - - /* 4. Send EFUSE data */ -#if defined(MT6628) - wlanChangeNvram6620to6628(prRegInfo->aucEFUSE); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PHY_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PHY_PARAM_T), - (PUINT_8)(prRegInfo->aucEFUSE), - NULL, - 0); - -#if CFG_SUPPORT_RDD_TEST_MODE - rRddParam.ucRddTestMode = (UINT_8) prRegInfo->u4RddTestMode; - rRddParam.ucRddShutCh = (UINT_8) prRegInfo->u4RddShutFreq; - rRddParam.ucRddStartCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStartFreq); - rRddParam.ucRddStopCh = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4RddStopFreq); - rRddParam.ucRddDfs = (UINT_8) prRegInfo->u4RddDfs; - prAdapter->ucRddStatus = 0; - nicUpdateRddTestMode(prAdapter, (P_CMD_RDD_CH_T)(&rRddParam)); -#endif - - /* 5. Get 16-bits Country Code and Bandwidth */ - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) prRegInfo->au2CountryCode[0]) << 8) | - (((UINT_16) prRegInfo->au2CountryCode[1]) & BITS(0,7)); - -#if 0 /* Bandwidth control will be controlled by GUI. 20110930 - * So ignore the setting from registry/NVRAM - */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prRegInfo->uc2G4BwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prRegInfo->uc5GBwFixed20M ? CONFIG_BW_20M : CONFIG_BW_20_40M; -#endif - - /* 6. Set domain and channel information to chip */ - rlmDomainSendCmd(prAdapter, FALSE); - - /* 7. set band edge tx power if available */ - if(prRegInfo->fg2G4BandEdgePwrUsed) { - CMD_EDGE_TXPWR_LIMIT_T rCmdEdgeTxPwrLimit; - - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrCCK - = prRegInfo->cBandEdgeMaxPwrCCK; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM20 - = prRegInfo->cBandEdgeMaxPwrOFDM20; - rCmdEdgeTxPwrLimit.cBandEdgeMaxPwrOFDM40 - = prRegInfo->cBandEdgeMaxPwrOFDM40; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_EDGE_TXPWR_LIMIT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_EDGE_TXPWR_LIMIT_T), - (PUINT_8)&rCmdEdgeTxPwrLimit, - NULL, - 0); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check -* Media Stream Mode is set to non-default value or not, -* and clear to default value if above criteria is met -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return TRUE -* The media stream mode was non-default value and has been reset -* FALSE -* The media stream mode is default value -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode != 0) { - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - - return TRUE; - } - else { - return FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending timer has expired -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - cnmTimerDoTimeOutCheck(prAdapter); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to check if any pending mailbox message -* to be handled -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - for(i = 0 ; i < MBOX_ID_TOTAL_NUM ; i++) { - mboxRcvAllMsg(prAdapter , (ENUM_MBOX_ID_T)i); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to enqueue a single TX packet into CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* prNativePacket Pointer of Native Packet -* -* @return WLAN_STATUS_SUCCESS -* WLAN_STATUS_RESOURCES -* WLAN_STATUS_INVALID_PACKET -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo == NULL) { - return WLAN_STATUS_RESOURCES; - } - else { - prMsduInfo->eSrc = TX_PACKET_OS; - - if(nicTxFillMsduInfo(prAdapter, - prMsduInfo, - prNativePacket) == FALSE) { // packet is not extractable - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_INVALID_PACKET); - - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - - return WLAN_STATUS_INVALID_PACKET; - } - else { - // enqueue to QM - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to flush pending TX packets in CORE -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return nicTxFlush(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function sends pending MSDU_INFO_T to MT6620 -* -* @param prAdapter Pointer to the Adapter structure. -* @param pfgHwAccess Pointer for tracking LP-OWN status -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(pfgHwAccess); - - // <1> dequeue packet by txDequeuTxPackets() - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmDequeueTxPackets(prAdapter, &prTxCtrl->rTc); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == FALSE) { - /* <2> Acquire LP-OWN if necessary */ - if(*pfgHwAccess == FALSE) { - *pfgHwAccess = TRUE; - - wlanAcquirePowerControl(prAdapter); - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - // <3> send packets - nicTxMsduInfoList(prAdapter, prMsduInfo); - - // <4> update TC by txAdjustTcQuotas() - nicTxAdjustTcq(prAdapter); - } - else { - wlanProcessQueuedMsduInfo(prAdapter, prMsduInfo); - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to acquire power control from firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - - /* Reset sleepy state */ - if(prAdapter->fgWiFiInSleepyState == TRUE) { - prAdapter->fgWiFiInSleepyState = FALSE; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to release power control to firmware -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to report currently pending TX frames count -* (command packets are not included) -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return number of pending TX frames -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - UINT_32 u4Num; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - u4Num = kalGetTxPendingFrameCount(prAdapter->prGlueInfo) + (UINT_32)(prTxCtrl->i4PendingFwdFrameCount); - - return u4Num; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to report current ACPI state -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -*/ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rAcpiState; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to update current ACPI state only -* -* @param prAdapter Pointer of Adapter Data Structure -* @param ePowerState ACPI_STATE_D0 Normal Operation Mode -* ACPI_STATE_D3 Suspend Mode -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ) -{ - ASSERT(prAdapter); - ASSERT(ePowerState <= ACPI_STATE_D3); - - prAdapter->rAcpiState = ePowerState; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to query ECO version from HIFSYS CR -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - if(nicVerifyChipID(prAdapter) == TRUE) { - return (prAdapter->ucRevID + 1); - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to setting the default Tx Power configuration -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return zero Unable to retrieve ECO version information -* non-zero ECO version (1-based) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 i; - P_GLUE_INFO_T prGlueInfo = prAdapter->prGlueInfo; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prGlueInfo); - - prTxpwr = &prGlueInfo->rTxPwr; - - prTxpwr->c2GLegacyStaPwrOffset = 0; - prTxpwr->c2GHotspotPwrOffset = 0; - prTxpwr->c2GP2pPwrOffset = 0; - prTxpwr->c2GBowPwrOffset = 0; - prTxpwr->c5GLegacyStaPwrOffset = 0; - prTxpwr->c5GHotspotPwrOffset = 0; - prTxpwr->c5GP2pPwrOffset = 0; - prTxpwr->c5GBowPwrOffset = 0; - prTxpwr->ucConcurrencePolicy = 0; - for (i=0; i<3;i++) - prTxpwr->acReserved1[i] = 0; - - for (i=0; i<14;i++) - prTxpwr->acTxPwrLimit2G[i] = 63; - - for (i=0; i<4;i++) - prTxpwr->acTxPwrLimit5G[i] = 63; - - for (i=0; i<2;i++) - prTxpwr->acReserved2[i] = 0; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* set preferred band configuration corresponding to network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eBand Given band -* @param eNetTypeIndex Given Network Type -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - /* 1. set prefer band according to network type */ - prAdapter->aePreferBand[eNetTypeIndex] = eBand; - - /* 2. remove buffered BSS descriptors correspondingly */ - if(eBand == BAND_2G4) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_5G, eNetTypeIndex); - } - else if(eBand == BAND_5G) { - scanRemoveBssDescByBandAndNetwork(prAdapter, BAND_2G4, eNetTypeIndex); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* get channel information corresponding to specified network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eNetTypeIndex Given Network Type -* -* @return channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - return prBssInfo->ucPrimaryChannel; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* get BSS descriptor information corresponding to specified network type -* -* @param prAdapter Pointer of Adapter Data Structure -* @param eNetTypeIndex Given Network Type -* -* @return pointer to BSS_DESC_T -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -wlanGetTargetBssDescByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - return prAdapter->rWifiVar.rAisFsmInfo.prTargetBssDesc; - - case NETWORK_TYPE_P2P_INDEX: - return (prAdapter->rWifiVar.prP2pFsmInfo)->prTargetBss; - //return NULL; - - case NETWORK_TYPE_BOW_INDEX: - return prAdapter->rWifiVar.rBowFsmInfo.prTargetBssDesc; - - default: - return NULL; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to -* check unconfigured system properties and generate related message on -* scan list to notify users -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ) -{ -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) || (CFG_SW_NVRAM_VERSION_CHECK == 1) - const UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - const UINT_8 aucBCAddr[] = BC_MAC_ADDR; - BOOLEAN fgIsConfExist = TRUE; - BOOLEAN fgGenErrMsg = FALSE; - P_REG_INFO_T prRegInfo = NULL; - P_WLAN_BEACON_FRAME_T prBeacon = NULL; - P_IE_SSID_T prSsid = NULL; - UINT_32 u4ErrCode = 0; - UINT_8 aucErrMsg[32]; - PARAM_SSID_T rSsid; - PARAM_802_11_CONFIG_T rConfiguration; - PARAM_RATES_EX rSupportedRates; -#endif - - DEBUGFUNC("wlanCheckSystemConfiguration"); - - ASSERT(prAdapter); - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - fgIsConfExist = FALSE; - fgGenErrMsg = TRUE; - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - prRegInfo = kalGetConfiguration(prAdapter->prGlueInfo); - - if(fgIsConfExist == TRUE && - (CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION - || (prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) - || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) - || prRegInfo->ucTxPwrValid == 0)) { - fgGenErrMsg = TRUE; - } -#endif - - if(fgGenErrMsg == TRUE) { - prBeacon = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // initialization - kalMemZero(prBeacon, sizeof(WLAN_BEACON_FRAME_T) + sizeof(IE_SSID_T)); - - // prBeacon initialization - prBeacon->u2FrameCtrl = MAC_FRAME_BEACON; - COPY_MAC_ADDR(prBeacon->aucDestAddr, aucBCAddr); - COPY_MAC_ADDR(prBeacon->aucSrcAddr, aucZeroMacAddr); - COPY_MAC_ADDR(prBeacon->aucBSSID, aucZeroMacAddr); - prBeacon->u2BeaconInterval = 100; - prBeacon->u2CapInfo = CAP_INFO_ESS; - - // prSSID initialization - prSsid = (P_IE_SSID_T)(&prBeacon->aucInfoElem[0]); - prSsid->ucId = ELEM_ID_SSID; - - // rConfiguration initialization - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = 100; - rConfiguration.u4ATIMWindow = 1; - rConfiguration.u4DSConfig = 2412; - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - // rSupportedRates initialization - kalMemZero(rSupportedRates, sizeof(PARAM_RATES_EX)); - } - -#if (CFG_NVRAM_EXISTENCE_CHECK == 1) - #define NVRAM_ERR_MSG "NVRAM WARNING: Err = 0x01" - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == FALSE) { - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - NVRAM_ERR_MSG, - strlen(NVRAM_ERR_MSG)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, NVRAM_ERR_MSG, strlen(NVRAM_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } -#endif - -#if (CFG_SW_NVRAM_VERSION_CHECK == 1) - #define VER_ERR_MSG "NVRAM WARNING: Err = 0x%02X" - if(fgIsConfExist == TRUE) { - if((CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part1CfgPeerVersion - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2Part2CfgPeerVersion - || prAdapter->rVerInfo.u2Part1CfgOwnVersion < CFG_DRV_PEER_VERSION - || prAdapter->rVerInfo.u2Part2CfgOwnVersion < CFG_DRV_PEER_VERSION /* NVRAM */ - || CFG_DRV_OWN_VERSION < prAdapter->rVerInfo.u2FwPeerVersion - || prAdapter->rVerInfo.u2FwOwnVersion < CFG_DRV_PEER_VERSION)) { - u4ErrCode |= NVRAM_ERROR_VERSION_MISMATCH; - } - - - if(prRegInfo->ucTxPwrValid == 0) { - u4ErrCode |= NVRAM_ERROR_INVALID_TXPWR; - } - - if(prAdapter->fgIsEmbbededMacAddrValid == FALSE && - (IS_BMCAST_MAC_ADDR(prRegInfo->aucMacAddr) || EQUAL_MAC_ADDR(aucZeroMacAddr, prRegInfo->aucMacAddr))) { - u4ErrCode |= NVRAM_ERROR_INVALID_MAC_ADDR; - } - - if(u4ErrCode != 0) { - sprintf(aucErrMsg, VER_ERR_MSG, (unsigned int)u4ErrCode); - COPY_SSID(prSsid->aucSSID, - prSsid->ucLength, - aucErrMsg, - strlen(aucErrMsg)); - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prBeacon, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength, - 1, - 0); - - COPY_SSID(rSsid.aucSsid, rSsid.u4SsidLen, VER_ERR_MSG, strlen(VER_ERR_MSG)); - nicAddScanResult(prAdapter, - prBeacon->aucBSSID, - &rSsid, - 0, - 0, - PARAM_NETWORK_TYPE_FH, - &rConfiguration, - NET_TYPE_INFRA, - rSupportedRates, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem) + OFFSET_OF(IE_SSID_T, aucSSID) + prSsid->ucLength - WLAN_MAC_MGMT_HEADER_LEN, - (PUINT_8)((UINT_32)(prBeacon) + WLAN_MAC_MGMT_HEADER_LEN)); - } - } -#endif - - if(fgGenErrMsg == TRUE) { - cnmMemFree(prAdapter, prBeacon); - } - - return WLAN_STATUS_SUCCESS; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_oid.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_oid.c deleted file mode 100755 index 3cefd51e3301..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_oid.c +++ /dev/null @@ -1,10902 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/common/wlan_oid.c#1 $ -*/ - -/*! \file wlanoid.c - \brief This file contains the WLAN OID processing routines of Windows driver for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/****************************************************************************** -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************* -*/ - -/****************************************************************************** -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************* -*/ - -/* -** $Log: wlan_oid.c $ -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync for NVRAM warning scan result generation for CFG80211. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * using the wlanSendSetQueryCmd to set the tx power control cmd. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * change the set tx power cmd name. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 09 2011 george.huang - * [WCXRP00000871] [MT6620 Wi-Fi][FW] Include additional wakeup condition, which is by consequent DTIM unicast indication - * add XLOG for Set PS mode entry - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add RDD certification features. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 15 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * correct fifo full control from query to set operation for CTIA. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 17 2011 tsaiyuan.hsu - * [WCXRP00000938] [MT6620 Wi-Fi][FW] add system config for CTIA - * add system config for CTIA. - * - * 08 15 2011 george.huang - * [MT6620 Wi-Fi][FW] handle TSF drift for connection detection - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 05 02 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Fix compile warning. - * - * 04 29 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * . - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * add more debug message - * - * 04 26 2011 eddie.chen - * [WCXRP00000373] [MT6620 Wi-Fi][FW] SW debug control - * Add rx path profiling. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 03 29 2011 puff.wen - * NULL - * Add chennel switch for stress test - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 24 2011 wh.su - * [WCXRP00000595] [MT6620 Wi-Fi][Driver] at CTIA indicate disconnect to make the ps profile can apply - * use disconnect event instead of ais abort for CTIA testing. - * - * 03 23 2011 george.huang - * [WCXRP00000586] [MT6620 Wi-Fi][FW] Modify for blocking absence request right after connected - * revise for CTIA power mode setting - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 15 2011 george.huang - * [WCXRP00000557] [MT6620 Wi-Fi] Support current consumption test mode commands - * Support current consumption measurement mode command - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 03 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the enter ctia test mode issue. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Update sigma CAPI for U-APSD setting - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 25 2011 cp.wu - * [WCXRP00000394] [MT6620 Wi-Fi][Driver] Count space needed for generating error message in scanning list into buffer size checking - * when doing size prechecking, check illegal MAC address as well - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * check if allow to switch to IBSS mode via concurrent module before setting to IBSS mode - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 01 04 2011 cp.wu - * [WCXRP00000342] [MT6620 Wi-Fi][Driver] show error code in scanning list when MAC address is not correctly configured in NVRAM - * show error code 0x10 when MAC address in NVRAM is not configured correctly. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 28 2010 george.huang - * [WCXRP00000232] [MT5931 Wi-Fi][FW] Modifications for updated HW power on sequence and related design - * support WMM-PS U-APSD AC assignment. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 16 2010 cp.wu - * [WCXRP00000268] [MT6620 Wi-Fi][Driver] correction for WHQL failed items - * correction for OID_802_11_NETWORK_TYPES_SUPPORTED handlers - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 21 2010 wh.su - * [WCXRP00000192] [MT6620 Wi-Fi][Driver] Fixed fail trying to build connection with Security AP while enable WAPI message check - * Not set the wapi mode while the wapi assoc info set non-wapi ie. - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 22 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * dos2unix conversion. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 yuche.tsai - * NULL - * Update SLT 5G Test Channel Set. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 06 2010 yuche.tsai - * NULL - * Update For SLT 5G Test Channel Selection Rule. - * - * 10 05 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Query buffer size needs to be enlarged due to result is filled in 4-bytes alignment boundary - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 10 04 2010 cp.wu - * [WCXRP00000075] [MT6620 Wi-Fi][Driver] Fill query buffer for OID_802_11_BSSID_LIST in 4-bytes aligned form - * Extend result length to multiples of 4-bytes - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Update SLT due to API change of SCAN module. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 yuche.tsai - * NULL - * Refine SLT IO control handler. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 chinglan.wang - * NULL - * Modify the rescan condition. - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * upate params defined in CMD_SET_NETWORK_ADDRESS_LIST - * - * 08 04 2010 cp.wu - * NULL - * fix for check build WHQL testing: - * 1) do not assert query buffer if indicated buffer length is zero - * 2) sdio.c has bugs which cause freeing same pointer twice - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 08 04 2010 cp.wu - * NULL - * bypass u4FuncData for RF-Test query request as well. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 19 2010 wh.su - * - * modify the auth and encry status variable. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement SCAN-REQUEST oid as mailbox message dispatching. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for oid pmkid. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 28 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * simplify cmd packet sending for RF test and MCR access OIDs - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable radio even when STA is not associated. - * - * 05 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct 2 OID behaviour to meet WHQL requirement. - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct BSSID_LIST oid when radio if turned off. - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * disable wlanoidSetNetworkAddress() temporally. - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * some OIDs should be DRIVER_CORE instead of GLUE_EXTENSION - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct wlanoidSet802dot11PowerSaveProfile implementation. - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassocation support for wpa supplicant - * - * 05 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct return value. - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, still use parameter with current setting. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * for disassociation, generate a WZC-compatible invalid SSID. - * - * 05 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * associate to illegal SSID when handling OID_802_11_DISASSOCIATE - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * 2) command sequence number is now increased atomically - * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_CONFIGURATION query for infrastructure mode. - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) remove unused spin lock declaration - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * (2) disable set Multicast address during atomic context - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve glue code portability - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * the frequency is used for adhoc connection only - * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * adding the check for pass WHQL test item. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * -* 03 16 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * fixed some whql pre-test fail case. - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 24 2010 wh.su - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Don't needed to check the auth mode, WHQL testing not specific at auth wpa2. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not check SSID validity anymore. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * 2. follow MSDN defined behavior when associates to another AP - * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 02 04 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when OID_CUSTOM_OID_INTERFACE_VERSION is queried, do modify connection states - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * 2. block TX/ordinary OID when RF test mode is engaged - * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * OID_802_11_RSSI, - * OID_802_11_RSSI_TRIGGER, - * OID_802_11_STATISTICS, - * OID_802_11_DISASSOCIATE, - * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not fill ucJoinOnly currently - * - * 01 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable to connect to ad-hoc network - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .implement Set/Query BeaconInterval/AtimWindow - * - * 01 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * .Set/Get AT Info is not blocked even when driver is not in fg test mode - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * and result is retrieved by get ATInfo instead - * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-12-16 22:13:36 GMT mtk02752 -** change hard-coded MAC address to match with FW (temporally) -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-12-10 16:49:50 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-12-08 17:38:49 GMT mtk02752 -** + add OID for RF test -** * MCR RD/WR are modified to match with cmd/event definition -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-12-08 11:32:20 GMT mtk02752 -** add skeleton for RF test implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-12-03 16:43:24 GMT mtk01461 -** Modify query SCAN list oid by adding prEventScanResult -** -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-03 16:39:27 GMT mtk01461 -** Sync CMD data structure in set ssid oid -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-03 16:28:22 GMT mtk01461 -** Add invalid check of set SSID oid and fix query scan list oid -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-30 17:33:08 GMT mtk02752 -** implement wlanoidSetInfrastructureMode/wlanoidQueryInfrastructureMode -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-30 10:53:49 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-30 09:22:48 GMT mtk02752 -** correct wifi cmd length mismatch -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-25 21:34:33 GMT mtk02752 -** sync EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 21:03:27 GMT mtk02752 -** implement wlanoidQueryBssidList() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-25 18:17:17 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-23 20:28:51 GMT mtk02752 -** some OID will be set to WLAN_STATUS_PENDING until it is sent via wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-23 17:56:36 GMT mtk02752 -** implement wlanoidSetBssidListScan(), wlanoidSetBssid() and wlanoidSetSsid() -** -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-13 17:20:53 GMT mtk02752 -** add Set BSSID/SSID path but disabled temporally due to FW is not ready yet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 12:28:58 GMT mtk02752 -** add wlanoidSetBssidListScan -> cmd_info path -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-09 22:48:07 GMT mtk01084 -** modify test cases entry -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-04 14:10:58 GMT mtk01084 -** add new test interfaces -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-30 18:17:10 GMT mtk01084 -** fix compiler warning -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:46:26 GMT mtk01084 -** add test functions -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:07:56 GMT mtk01084 -** include new file -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:29 GMT mtk01084 -** modify for new HW architecture -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-02 13:48:49 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-09-09 17:26:04 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-21 12:09:50 GMT mtk01461 -** Update for MCR Write OID -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:35:18 GMT mtk01461 -** Update wlanoidQueryMcrRead() for composing CMD_INFO_T -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 18:09:51 GMT mtk01426 -** Remove kalIndicateStatusAndComplete() in wlanoidQueryOidInterfaceVersion() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-14 15:51:50 GMT mtk01426 -** Add MCR read/write support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:40 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:06:31 GMT mtk01426 -** Init for develop -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" -#include "mgmt/rsn.h" - -#include - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ -#if DBG -extern UINT_8 aucDebugModule[DBG_MODULE_NUM]; -extern UINT_32 u4DebugModule; -UINT_32 u4DebugModuleTemp; -#endif /* DBG */ - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ -extern int sprintf(char * buf, const char * fmt, ...); - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -#if CFG_ENABLE_STATISTICS_BUFFERING -static BOOLEAN -IsBufferedStatisticsUsable( - P_ADAPTER_T prAdapter) -{ - ASSERT(prAdapter); - - if(prAdapter->fgIsStatValid == TRUE && - (kalGetTimeTick() - prAdapter->rStatUpdateTime) <= CFG_STATISTICS_VALID_CYCLE) - return TRUE; - else - return FALSE; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the supported physical layer network -* type that can be used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 u4NumItem = 0; - ENUM_PARAM_NETWORK_TYPE_T eSupportedNetworks[PARAM_NETWORK_TYPE_NUM]; - PPARAM_NETWORK_TYPE_LIST prSupported; - - /* The array of all physical layer network subtypes that the driver supports. */ - - DEBUGFUNC("wlanoidQueryNetworkTypesSupported"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - /* Init. */ - for (u4NumItem = 0; u4NumItem < PARAM_NETWORK_TYPE_NUM ; u4NumItem++) { - eSupportedNetworks[u4NumItem] = 0; - } - - u4NumItem = 0; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_DS; - u4NumItem ++; - - eSupportedNetworks[u4NumItem] = PARAM_NETWORK_TYPE_OFDM24; - u4NumItem ++; - - *pu4QueryInfoLen = - (UINT_32)OFFSET_OF(PARAM_NETWORK_TYPE_LIST, eNetworkType) + - (u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSupported = (PPARAM_NETWORK_TYPE_LIST)pvQueryBuffer; - prSupported->NumberOfItems = u4NumItem; - kalMemCopy(prSupported->eNetworkType, - eSupportedNetworks, - u4NumItem * sizeof(ENUM_PARAM_NETWORK_TYPE_T)); - - DBGLOG(REQ, TRACE, ("NDIS supported network type list: %ld\n", - prSupported->NumberOfItems)); - DBGLOG_MEM8(REQ, INFO, prSupported, *pu4QueryInfoLen); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypesSupported */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current physical layer network -* type used by the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T rCurrentNetworkTypeInUse = PARAM_NETWORK_TYPE_OFDM24; - - DEBUGFUNC("wlanoidQueryNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkType); - } - else { - rCurrentNetworkTypeInUse = - (ENUM_PARAM_NETWORK_TYPE_T)(prAdapter->rWlanInfo.ucNetworkTypeInUse); - } - - *(P_ENUM_PARAM_NETWORK_TYPE_T)pvQueryBuffer = rCurrentNetworkTypeInUse; - *pu4QueryInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, TRACE, ("Network type in use: %d\n", rCurrentNetworkTypeInUse)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the physical layer network type used -* by the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS The given network type is supported and accepted. -* \retval WLAN_STATUS_INVALID_DATA The given network type is not in the -* supported list. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - // TODO: need to check the OID handler content again!! - - ENUM_PARAM_NETWORK_TYPE_T eNewNetworkType; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - DEBUGFUNC("wlanoidSetNetworkTypeInUse"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_NETWORK_TYPE_T)) { - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - return WLAN_STATUS_INVALID_LENGTH; - } - - eNewNetworkType = *(P_ENUM_PARAM_NETWORK_TYPE_T)pvSetBuffer; - *pu4SetInfoLen = sizeof(ENUM_PARAM_NETWORK_TYPE_T); - - DBGLOG(REQ, - INFO, - ("New network type: %d mode\n", eNewNetworkType)); - - switch (eNewNetworkType) { - - case PARAM_NETWORK_TYPE_DS: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_DS; - break; - - case PARAM_NETWORK_TYPE_OFDM5: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM5; - break; - - case PARAM_NETWORK_TYPE_OFDM24: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_OFDM24; - break; - - case PARAM_NETWORK_TYPE_AUTOMODE: - prAdapter->rWlanInfo.ucNetworkTypeInUse = (UINT_8) PARAM_NETWORK_TYPE_AUTOMODE; - break; - - case PARAM_NETWORK_TYPE_FH: - DBGLOG(REQ, INFO, ("Not support network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - - default: - DBGLOG(REQ, INFO, ("Unknown network type: %d\n", eNewNetworkType)); - rStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - /* Verify if we support the new network type. */ - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("Unknown network type: %d\n", eNewNetworkType)); - } - - return rStatus; -} /* wlanoidSetNetworkTypeInUse */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current BSSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryBssid"); - - ASSERT(prAdapter); - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - ASSERT(pu4QueryInfoLen); - *pu4QueryInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(u4QueryBufferLen >= MAC_ADDR_LEN); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalMemCopy(pvQueryBuffer, prAdapter->rWlanInfo.rCurrBssId.arMacAddress, MAC_ADDR_LEN); - } - else if(prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS) { - PARAM_MAC_ADDRESS aucTemp; /*!< BSSID */ - COPY_MAC_ADDR(aucTemp, prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - aucTemp[0] &= ~BIT(0); - aucTemp[1] |= BIT(1); - COPY_MAC_ADDR(pvQueryBuffer, aucTemp); - } - else { - rStatus = WLAN_STATUS_ADAPTER_NOT_READY; - } - - *pu4QueryInfoLen = MAC_ADDR_LEN; - return rStatus; -} /* wlanoidQueryBssid */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the list of all BSSIDs detected by -* the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBssidList ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_32 i, u4BssidListExLen; - P_PARAM_BSSID_LIST_EX_T prList; - P_PARAM_BSSID_EX_T prBssidEx; - PUINT_8 cp; - - DEBUGFUNC("wlanoidQueryBssidList"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - - if(!pvQueryBuffer) { - return WLAN_STATUS_INVALID_DATA; - } - } - - prGlueInfo = prAdapter->prGlueInfo; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in qeury BSSID list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - u4BssidListExLen = 0; - - if(prAdapter->fgIsRadioOff == FALSE) { - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - u4BssidListExLen += ALIGN_4(prAdapter->rWlanInfo.arScanResult[i].u4Length); - } - } - - if(u4BssidListExLen) { - u4BssidListExLen += 4; // u4NumberOfItems. - } - else { - u4BssidListExLen = sizeof(PARAM_BSSID_LIST_EX_T); - } - - *pu4QueryInfoLen = u4BssidListExLen; - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Clear the buffer */ - kalMemZero(pvQueryBuffer, u4BssidListExLen); - - prList = (P_PARAM_BSSID_LIST_EX_T) pvQueryBuffer; - cp = (PUINT_8)&prList->arBssid[0]; - - if(prAdapter->fgIsRadioOff == FALSE && prAdapter->rWlanInfo.u4ScanResultNum > 0) { - // fill up for each entry - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - prBssidEx = (P_PARAM_BSSID_EX_T)cp; - - // copy structure - kalMemCopy(prBssidEx, - &(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - /*For WHQL test, Rssi should be in range -10 ~ -200 dBm*/ - if(prBssidEx->rRssi > PARAM_WHQL_RSSI_MAX_DBM) { - prBssidEx->rRssi = PARAM_WHQL_RSSI_MAX_DBM; - } - - if(prAdapter->rWlanInfo.arScanResult[i].u4IELength > 0) { - // copy IEs - kalMemCopy(prBssidEx->aucIEs, - prAdapter->rWlanInfo.apucScanResultIEs[i], - prAdapter->rWlanInfo.arScanResult[i].u4IELength); - } - - // 4-bytes alignement - prBssidEx->u4Length = ALIGN_4(prBssidEx->u4Length); - - cp += prBssidEx->u4Length; - prList->u4NumberOfItems++; - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryBssidList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScan ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SSID_T prSsid; - PARAM_SSID_T rSsid; - - DEBUGFUNC("wlanoidSetBssidListScan()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - pvSetBuffer, - u4SetBufferLen); - prSsid = &rSsid; - } - else { - prSsid = NULL; - } - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED){ - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, NULL, 0); - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetBssidListScan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to perform -* scanning with attaching information elements(IEs) specified from user space -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_SCAN_REQUEST_EXT_T prScanRequest; - P_PARAM_SSID_T prSsid; - PUINT_8 pucIe; - UINT_32 u4IeLength; - - DEBUGFUNC("wlanoidSetBssidListScanExt()"); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set BSSID list scan! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = 0; - - if(u4SetBufferLen != sizeof(PARAM_SCAN_REQUEST_EXT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->fgIsRadioOff) { - DBGLOG(REQ, WARN, ("Return from BSSID list scan! (radio off). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_SUCCESS; - } - - if(pvSetBuffer != NULL && u4SetBufferLen != 0) { - prScanRequest = (P_PARAM_SCAN_REQUEST_EXT_T)pvSetBuffer; - prSsid = &(prScanRequest->rSsid); - pucIe = prScanRequest->pucIE; - u4IeLength = prScanRequest->u4IELength; - } - else { - prScanRequest = NULL; - prSsid = NULL; - pucIe = NULL; - u4IeLength = 0; - } - -#if CFG_SUPPORT_RDD_TEST_MODE - if (prAdapter->prGlueInfo->rRegInfo.u4RddTestMode) { - if((prAdapter->fgEnOnlineScan == TRUE) && (prAdapter->ucRddStatus)){ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - } - } - else -#endif - { - if(prAdapter->fgEnOnlineScan == TRUE) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - else if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - aisFsmScanRequest(prAdapter, prSsid, pucIe, u4IeLength); - } - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetBssidListScanWithIE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt to associate -* with the specified BSSID. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBssid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_UINT_8 pAddr; - UINT_32 i; - INT_32 i4Idx = -1; - P_MSG_AIS_ABORT_T prAisAbortMsg; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = MAC_ADDR_LEN;; - if (u4SetBufferLen != MAC_ADDR_LEN){ - *pu4SetInfoLen = MAC_ADDR_LEN; - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prGlueInfo = prAdapter->prGlueInfo; - pAddr = (P_UINT_8)pvSetBuffer; - - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, pAddr)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the BSSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(EQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, pAddr)) { - i4Idx = (INT_32)i; - break; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - /* Set Connection Request Issued Flag */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_BSSID; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - prAdapter->rWifiVar.rConnSettings.ucSSIDLen = 0; - prAdapter->rWifiVar.rConnSettings.aucSSID[0] = '\0'; - - COPY_MAC_ADDR(prAdapter->rWifiVar.rConnSettings.aucBSSID, pAddr); - prAisAbortMsg->fgDelayIndication = FALSE; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will initiate the join procedure to attempt -* to associate with the new SSID. If the previous scanning -* result is aged, we will scan the channels at first. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSsid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_PARAM_SSID_T pParamSsid; - UINT_32 i; - INT_32 i4Idx = -1, i4MaxRSSI = INT_MIN; - P_MSG_AIS_ABORT_T prAisAbortMsg; - BOOLEAN fgIsValidSsid = TRUE; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* MSDN: - * Powering on the radio if the radio is powered off through a setting of OID_802_11_DISASSOCIATE - */ - if(prAdapter->fgIsRadioOff == TRUE) { - prAdapter->fgIsRadioOff = FALSE; - } - - if(u4SetBufferLen < sizeof(PARAM_SSID_T) || u4SetBufferLen > sizeof(PARAM_SSID_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - else if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set ssid! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - pParamSsid = (P_PARAM_SSID_T) pvSetBuffer; - - if (pParamSsid->u4SsidLen > 32) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prGlueInfo = prAdapter->prGlueInfo; - - // prepare for CMD_BUILD_CONNECTION & CMD_GET_CONNECTION_STATUS - // re-association check - if(kalGetMediaStateIndicated(prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if(EQUAL_SSID(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - kalSetMediaStateIndicated(prGlueInfo, PARAM_MEDIA_STATE_TO_BE_INDICATED); - } - else { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - } - - // check if any scanned result matchs with the SSID - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - PUINT_8 aucSsid = prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid; - UINT_8 ucSsidLength = (UINT_8) prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen; - INT_32 i4RSSI = prAdapter->rWlanInfo.arScanResult[i].rRssi; - - if(EQUAL_SSID(aucSsid, ucSsidLength, pParamSsid->aucSsid, pParamSsid->u4SsidLen) && - i4RSSI >= i4MaxRSSI) { - i4Idx = (INT_32)i; - i4MaxRSSI = i4RSSI; - } - } - - /* prepare message to AIS */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_IBSS - || prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_DEDICATED_IBSS) { - /* IBSS */ /* beacon period */ - prAdapter->rWifiVar.rConnSettings.u2BeaconPeriod = prAdapter->rWlanInfo.u2BeaconPeriod; - prAdapter->rWifiVar.rConnSettings.u2AtimWindow = prAdapter->rWlanInfo.u2AtimWindow; - } - - if (prAdapter->rWifiVar.fgSupportWZCDisassociation) { - if (pParamSsid->u4SsidLen == ELEM_MAX_LEN_SSID) { - fgIsValidSsid = FALSE; - - for (i = 0; i < ELEM_MAX_LEN_SSID; i++) { - if ( !((0 < pParamSsid->aucSsid[i]) && (pParamSsid->aucSsid[i] <= 0x1F)) ) { - fgIsValidSsid = TRUE; - break; - } - } - } - } - - /* Set Connection Request Issued Flag */ - if (fgIsValidSsid) { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = TRUE; - - if(pParamSsid->u4SsidLen) { - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - } - else { - // wildcard SSID - prAdapter->rWifiVar.rConnSettings.eConnectionPolicy = CONNECT_BY_SSID_ANY; - } - } - else { - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - } - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - - if (EQUAL_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - pParamSsid->u4SsidLen)) { - prAisAbortMsg->fgDelayIndication = TRUE; - } - else { - /* Update the information to CONNECTION_SETTINGS_T */ - COPY_SSID(prAdapter->rWifiVar.rConnSettings.aucSSID, - prAdapter->rWifiVar.rConnSettings.ucSSIDLen, - pParamSsid->aucSsid, - (UINT_8)pParamSsid->u4SsidLen); - - prAisAbortMsg->fgDelayIndication = FALSE; - } - DBGLOG(SCN, INFO, ("SSID %s\n", prAdapter->rWifiVar.rConnSettings.aucSSID)); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidSetSsid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the currently associated SSID. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySsid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_SSID_T prAssociatedSsid; - - DEBUGFUNC("wlanoidQuerySsid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_SSID_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prAssociatedSsid = (P_PARAM_SSID_T)pvQueryBuffer; - - kalMemZero(prAssociatedSsid->aucSsid, sizeof(prAssociatedSsid->aucSsid)); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - prAssociatedSsid->u4SsidLen = prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen; - - if (prAssociatedSsid->u4SsidLen) { - kalMemCopy(prAssociatedSsid->aucSsid, - prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prAssociatedSsid->u4SsidLen); - } - } - else { - prAssociatedSsid->u4SsidLen = 0; - - DBGLOG(REQ, TRACE, ("Null SSID\n")); - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQuerySsid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 network type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eOPMode; - - /* - ** According to OID_802_11_INFRASTRUCTURE_MODE - ** If there is no prior OID_802_11_INFRASTRUCTURE_MODE, - ** NDIS_STATUS_ADAPTER_NOT_READY shall be returned. - */ -#if DBG - switch (*(P_ENUM_PARAM_OP_MODE_T)pvQueryBuffer) { - case NET_TYPE_IBSS: - DBGLOG(REQ, INFO, ("IBSS mode\n")); - break; - case NET_TYPE_INFRA: - DBGLOG(REQ, INFO, ("Infrastructure mode\n")); - break; - default: - DBGLOG(REQ, INFO, ("Automatic mode\n")); - } -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set mode to infrastructure or -* IBSS, or automatic switch between the two. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid -* length of the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetInfrastructureMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - ENUM_PARAM_OP_MODE_T eOpMode; - - DEBUGFUNC("wlanoidSetInfrastructureMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - if (u4SetBufferLen < sizeof(ENUM_PARAM_OP_MODE_T)) - return WLAN_STATUS_BUFFER_TOO_SHORT; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_OP_MODE_T); - - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set infrastructure mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eOpMode = *(P_ENUM_PARAM_OP_MODE_T)pvSetBuffer; - /* Verify the new infrastructure mode. */ - if (eOpMode >= NET_TYPE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid mode value %d\n", eOpMode)); - return WLAN_STATUS_INVALID_DATA; - } - - /* check if possible to switch to AdHoc mode */ - if(eOpMode == NET_TYPE_IBSS || eOpMode == NET_TYPE_DEDICATED_IBSS) { - if(cnmAisIbssIsPermitted(prAdapter) == FALSE) { - DBGLOG(REQ, TRACE, ("Mode value %d unallowed\n", eOpMode)); - return WLAN_STATUS_FAILURE; - } - } - - /* Save the new infrastructure mode setting. */ - prAdapter->rWifiVar.rConnSettings.eOPMode = eOpMode; - - /* Clean up the Tx key flag */ - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; -#if CFG_SUPPORT_WAPI - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - kalMemZero(&prAdapter->prGlueInfo->aucWapiAssocInfoIEs, 42); -#endif - -#if CFG_SUPPORT_802_11W - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled = FALSE; -#endif - -#if CFG_SUPPORT_WPS2 - kalMemZero(&prAdapter->prGlueInfo->aucWSCAssocInfoIE, 200); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; -#endif - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INFRASTRUCTURE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetInfrastructureMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 authentication -* mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAuthMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAuthMode"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer = prAdapter->rWifiVar.rConnSettings.eAuthMode; - -#if DBG - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer) { - case AUTH_MODE_OPEN: - DBGLOG(REQ, INFO, ("Current auth mode: Open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(REQ, INFO, ("Current auth mode: Shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(REQ, INFO, ("Current auth mode: Auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(REQ, INFO, ("Current auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(REQ, INFO, ("Current auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(REQ, INFO, ("Current auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryAuthMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 authentication mode -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAuthMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_32 i, u4AkmSuite; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("wlanoidSetAuthMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_AUTH_MODE_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_AUTH_MODE_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* RF Test */ - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer >= AUTH_MODE_NUM) { - DBGLOG(REQ, TRACE, ("Invalid auth mode %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer) { - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - /* infrastructure mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_INFRA) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - case AUTH_MODE_WPA_NONE: - /* ad hoc mode only */ - if (prAdapter->rWifiVar.rConnSettings.eOPMode != NET_TYPE_IBSS) { - return WLAN_STATUS_NOT_ACCEPTED; - } - break; - - default: - ; - } - - /* Save the new authentication mode. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = *(P_ENUM_PARAM_AUTH_MODE_T)pvSetBuffer; - -#if DBG - switch (prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_OPEN: - DBGLOG(RSN, TRACE, ("New auth mode: open\n")); - break; - - case AUTH_MODE_SHARED: - DBGLOG(RSN, TRACE, ("New auth mode: shared\n")); - break; - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(RSN, TRACE, ("New auth mode: auto-switch\n")); - break; - - case AUTH_MODE_WPA: - DBGLOG(RSN, TRACE, ("New auth mode: WPA\n")); - break; - - case AUTH_MODE_WPA_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA PSK\n")); - break; - - case AUTH_MODE_WPA_NONE: - DBGLOG(RSN, TRACE, ("New auth mode: WPA None\n")); - break; - - case AUTH_MODE_WPA2: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2\n")); - break; - - case AUTH_MODE_WPA2_PSK: - DBGLOG(RSN, TRACE, ("New auth mode: WPA2 PSK\n")); - break; - - default: - DBGLOG(RSN, TRACE, ("New auth mode: unknown (%d)\n", - prAdapter->rWifiVar.rConnSettings.eAuthMode)); - } -#endif - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode >= AUTH_MODE_WPA) { - switch(prAdapter->rWifiVar.rConnSettings.eAuthMode) { - case AUTH_MODE_WPA: - u4AkmSuite = WPA_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA_PSK: - u4AkmSuite = WPA_AKM_SUITE_PSK; - break; - - case AUTH_MODE_WPA_NONE: - u4AkmSuite = WPA_AKM_SUITE_NONE; - break; - - case AUTH_MODE_WPA2: - u4AkmSuite = RSN_AKM_SUITE_802_1X; - break; - - case AUTH_MODE_WPA2_PSK: - u4AkmSuite = RSN_AKM_SUITE_PSK; - break; - - default: - u4AkmSuite = 0; - } - } - else { - u4AkmSuite = 0; - } - - /* Enable the specific AKM suite only. */ - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite) { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = FALSE; - } -#if CFG_SUPPORT_802_11W - if (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) { - if ((u4AkmSuite == RSN_AKM_SUITE_PSK) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_PSK_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_PSK_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - - } - if ((u4AkmSuite == RSN_AKM_SUITE_802_1X) && - prEntry->dot11RSNAConfigAuthenticationSuite == RSN_AKM_SUITE_802_1X_SHA256) { - DBGLOG(RSN, TRACE, ("Enable RSN_AKM_SUITE_802_1X_SHA256 AKM support\n")); - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled = TRUE; - } - } -#endif - } - - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetAuthMode */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current 802.11 privacy filter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPrivacyFilter"); - - ASSERT(prAdapter); - - ASSERT(pvQueryBuffer); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4QueryBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer = prAdapter->rWlanInfo.ePrivacyFilter; - -#if DBG - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvQueryBuffer) { - case PRIVACY_FILTER_ACCEPT_ALL: - DBGLOG(REQ, INFO, ("Current privacy mode: open mode\n")); - break; - - case PRIVACY_FILTER_8021xWEP: - DBGLOG(REQ, INFO, ("Current privacy mode: filtering mode\n")); - break; - - default: - DBGLOG(REQ, INFO, ("Current auth mode: %d\n", - *(P_ENUM_PARAM_AUTH_MODE_T)pvQueryBuffer)); - } -#endif - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPrivacyFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the IEEE 802.11 privacy filter -* to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("wlanoidSetPrivacyFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_PRIVACY_FILTER_T); - - if (u4SetBufferLen < sizeof(ENUM_PARAM_PRIVACY_FILTER_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Authentication mode! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* Check if the new authentication mode is valid. */ - if (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer >= PRIVACY_FILTER_NUM) { - DBGLOG(REQ, TRACE, ("Invalid privacy filter %d\n", - *(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - switch (*(P_ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer) { - default: - break; - } - - /* Save the new authentication mode. */ - prAdapter->rWlanInfo.ePrivacyFilter = *(ENUM_PARAM_PRIVACY_FILTER_T)pvSetBuffer; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPrivacyFilter */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to reload the available default settings for -* the specified type field. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetReloadDefaults ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - UINT_32 u4Len; - UINT_8 ucCmdSeqNum; - - - DEBUGFUNC("wlanoidSetReloadDefaults"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - *pu4SetInfoLen = sizeof(PARAM_RELOAD_DEFAULTS); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set Reload default! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - /* Verify the available reload options and reload the settings. */ - switch (*(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer) { - case ENUM_RELOAD_WEP_KEYS: - /* Reload available default WEP keys from the permanent - storage. */ - prAdapter->rWifiVar.rConnSettings.eAuthMode = AUTH_MODE_OPEN; - prAdapter->rWifiVar.rConnSettings.eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT;//ENUM_ENCRYPTION_DISABLED; - { - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_802_11_KEY prCmdKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = 0;//(UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, aucBCAddr, MAC_ADDR_LEN); - - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); - - prCmdKey->ucKeyType = 0; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; - } - - break; - - default: - DBGLOG(REQ, TRACE, ("Invalid reload option %d\n", - *(P_PARAM_RELOAD_DEFAULTS)pvSetBuffer)); - rStatus = WLAN_STATUS_INVALID_DATA; - } - - /* OID_802_11_RELOAD_DEFAULTS requiest to reset to auto mode */ - eNetworkType = PARAM_NETWORK_TYPE_AUTOMODE; - wlanoidSetNetworkTypeInUse(prAdapter, &eNetworkType, sizeof(eNetworkType), &u4Len); - - return rStatus; -} /* wlanoidSetReloadDefaults */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a WEP key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -#ifdef LINUX -UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; -UINT_8 aucBCAddr[] = BC_MAC_ADDR; -#endif -WLAN_STATUS -wlanoidSetAddWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - #ifndef LINUX - UINT_8 keyBuffer[sizeof(PARAM_KEY_T) + 16 /* LEGACY_KEY_MAX_LEN*/]; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - #endif - P_PARAM_WEP_T prNewWepKey; - P_PARAM_KEY_T prParamKey = (P_PARAM_KEY_T)keyBuffer; - UINT_32 u4KeyId, u4SetLen; - - DEBUGFUNC("wlanoidSetAddWep"); - - ASSERT(prAdapter); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial)) { - ASSERT(pu4SetInfoLen); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewWepKey = (P_PARAM_WEP_T)pvSetBuffer; - - /* Verify the total buffer for minimum length. */ - if (u4SetBufferLen < OFFSET_OF(PARAM_WEP_T, aucKeyMaterial) + prNewWepKey->u4KeyLength) { - DBGLOG(REQ, WARN, ("Invalid total buffer length (%d) than minimum length (%d)\n", - (UINT_8)u4SetBufferLen, - (UINT_8)OFFSET_OF(PARAM_WEP_T, aucKeyMaterial))); - - *pu4SetInfoLen = OFFSET_OF(PARAM_WEP_T, aucKeyMaterial); - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key structure length. */ - if (prNewWepKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewWepKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Verify the key material length for maximum key material length:16 */ - if (prNewWepKey->u4KeyLength > 16 /* LEGACY_KEY_MAX_LEN */) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d) greater than maximum key material length (16)\n", - (UINT_8)prNewWepKey->u4KeyLength)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = u4SetBufferLen; - - u4KeyId = prNewWepKey->u4KeyIndex & BITS(0,29) /* WEP_KEY_ID_FIELD */; - - /* Verify whether key index is valid or not, current version - driver support only 4 global WEP keys setting by this OID */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("Error, invalid WEP key ID: %d\n", (UINT_8)u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - prParamKey->u4KeyIndex = u4KeyId; - - /* Transmit key */ - if (prNewWepKey->u4KeyIndex & IS_TRANSMIT_KEY) { - prParamKey->u4KeyIndex |= IS_TRANSMIT_KEY; - } - - /* Per client key */ - if (prNewWepKey->u4KeyIndex & IS_UNICAST_KEY) { - prParamKey->u4KeyIndex |= IS_UNICAST_KEY; - } - - prParamKey->u4KeyLength = prNewWepKey->u4KeyLength; - - kalMemCopy(prParamKey->arBSSID, aucBCAddr, MAC_ADDR_LEN); - - kalMemCopy(prParamKey->aucKeyMaterial, - prNewWepKey->aucKeyMaterial, - prNewWepKey->u4KeyLength); - - prParamKey->u4Length = OFFSET_OF(PARAM_KEY_T, aucKeyMaterial) + prNewWepKey->u4KeyLength; - - wlanoidSetAddKey(prAdapter, - (PVOID)prParamKey, - prParamKey->u4Length, - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the WEP key -* at the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveWep ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4KeyId, u4SetLen; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - DEBUGFUNC("wlanoidSetRemoveWep"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_KEY_INDEX); - - if (u4SetBufferLen < sizeof(PARAM_KEY_INDEX)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4KeyId = *(PUINT_32)pvSetBuffer; - - /* Dump PARAM_WEP content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_KEY_INDEX content\n")); - DBGLOG(REQ, INFO, ("Index : 0x%08lx\n", u4KeyId)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove WEP! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if (u4KeyId & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("Invalid WEP key index: 0x%08lx\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - u4KeyId &= BITS(0,7); - - /* Verify whether key index is valid or not. Current version - driver support only 4 global WEP keys. */ - if (u4KeyId > MAX_KEY_NUM - 1) { - DBGLOG(REQ, ERROR, ("invalid WEP key ID %lu\n", u4KeyId)); - return WLAN_STATUS_INVALID_DATA; - } - - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - rRemoveKey.u4KeyIndex = *(PUINT_32)pvSetBuffer; - - kalMemCopy(rRemoveKey.arBSSID, aucBCAddr, MAC_ADDR_LEN); - - wlanoidSetRemoveKey(prAdapter, - (PVOID)&rRemoveKey, - sizeof(PARAM_REMOVE_KEY_T), - &u4SetLen); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveWep */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer PARAM_KEY_T, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetAddKey"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Verify the key material length for key material buffer */ - if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check */ - if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - - if (!(prNewKey->u4KeyLength == WEP_40_LEN || prNewKey->u4KeyLength == WEP_104_LEN || - prNewKey->u4KeyLength == CCMP_KEY_LEN || prNewKey->u4KeyLength == TKIP_KEY_LEN)) - { - return WLAN_STATUS_INVALID_DATA; - } - - /* Exception check, pairwise key must with transmit bit enabled */ - if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Dump PARAM_KEY content. */ - DBGLOG(REQ, TRACE, ("Set: Dump PARAM_KEY content\n")); - DBGLOG(REQ, TRACE, ("Length : 0x%08lx\n", prNewKey->u4Length)); - DBGLOG(REQ, TRACE, ("Key Index : 0x%08lx\n", prNewKey->u4KeyIndex)); - DBGLOG(REQ, TRACE, ("Key Length: 0x%08lx\n", prNewKey->u4KeyLength)); - DBGLOG(REQ, TRACE, ("BSSID:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->arBSSID, sizeof(PARAM_MAC_ADDRESS)); - DBGLOG(REQ, TRACE, ("Key RSC:\n")); - DBGLOG_MEM8(REQ, TRACE, &prNewKey->rKeyRSC, sizeof(PARAM_KEY_RSC)); - DBGLOG(REQ, TRACE, ("Key Material:\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucKeyMaterial, prNewKey->u4KeyLength); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - /* Todo:: Store the legacy wep key for OID_802_11_RELOAD_DEFAULTS */ - } - - if (prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = TRUE; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, INFO, ("ucCmdSeqNum = %d\n", ucCmdSeqNum)); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - prCmdKey->ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - prCmdKey->ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - prCmdKey->ucIsAuthenticator = ((prNewKey->u4KeyIndex & IS_AUTHENTICATOR) == IS_AUTHENTICATOR) ? 1 : 0; - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->arBSSID, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - - /* Note: adjust the key length for WPA-None */ - prCmdKey->ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, prCmdKey->ucKeyLen); - - if (prNewKey->u4KeyLength == 5) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP40; - } - else if (prNewKey->u4KeyLength == 13) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP104; - } - else if (prNewKey->u4KeyLength == 16) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WEP128; - else { -#if CFG_SUPPORT_802_11W - if (prCmdKey->ucKeyId >= 4) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_BIP; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - prAisSpecBssInfo->fgBipKeyInstalled = TRUE; - } - else -#endif - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - } - } - else if (prNewKey->u4KeyLength == 32) { - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION2_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prCmdKey->ucAlgorithmId = CIPHER_SUITE_CCMP; - prCmdKey->ucKeyLen = CCMP_KEY_LEN; - } - } - else { - if (rsnCheckPmkidCandicate(prAdapter)) { - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("Add key: Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - prCmdKey->ucAlgorithmId = CIPHER_SUITE_TKIP; - } - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request the driver to remove the key at -* the specified key index. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_REMOVE_KEY_T prRemovedKey; - P_CMD_802_11_KEY prCmdKey; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetRemoveKey"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set remove key! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Dump PARAM_REMOVE_KEY content. */ - DBGLOG(REQ, INFO, ("Set: Dump PARAM_REMOVE_KEY content\n")); - DBGLOG(REQ, INFO, ("Length : 0x%08lx\n", prRemovedKey->u4Length)); - DBGLOG(REQ, INFO, ("Key Index : 0x%08lx\n", prRemovedKey->u4KeyIndex)); - DBGLOG(REQ, INFO, ("BSSID:\n")); - DBGLOG_MEM8(REQ, INFO, prRemovedKey->arBSSID, MAC_ADDR_LEN); - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Clean up the Tx key flag */ - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - } - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_802_11_KEY))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_802_11_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(PARAM_REMOVE_KEY_T); - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero((PUINT_8)prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 0; /* Remove */ - prCmdKey->ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - -#if CFG_SUPPORT_802_11W - ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM + 2); -#else - //ASSERT(prCmdKey->ucKeyId < MAX_KEY_NUM); -#endif - - if (prRemovedKey->u4KeyIndex & IS_UNICAST_KEY) { - prCmdKey->ucKeyType = 1; - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetRemoveKey */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current encryption status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - BOOLEAN fgTransmitKeyAvailable = TRUE; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus = 0; - - DEBUGFUNC("wlanoidQueryEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - fgTransmitKeyAvailable = prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist; - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION3_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION3_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION2_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - break; - } - else { - eEncStatus = ENUM_ENCRYPTION2_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - if (fgTransmitKeyAvailable) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION1_KEY_ABSENT; - } - break; - - case ENUM_ENCRYPTION_DISABLED: - eEncStatus = ENUM_ENCRYPTION_DISABLED; - break; - - default: - DBGLOG(REQ, ERROR, ("Unknown Encryption Status Setting:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } - -#if DBG - DBGLOG(REQ, INFO, - ("Encryption status: %d Return:%d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus, - eEncStatus)); -#endif - - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvQueryBuffer = eEncStatus; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the encryption status to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_NOT_SUPPORTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEncryptionStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_ENCRYPTION_STATUS_T eEewEncrypt; - - DEBUGFUNC("wlanoidSetEncryptionStatus"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prGlueInfo = prAdapter->prGlueInfo; - - *pu4SetInfoLen = sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T); - - //if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - // return WLAN_STATUS_SUCCESS; - //} - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set encryption status! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - eEewEncrypt = *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - DBGLOG(REQ, TRACE, ("ENCRYPTION_STATUS %d\n", eEewEncrypt)); - - switch (eEewEncrypt) { - case ENUM_ENCRYPTION_DISABLED: /* Disable WEP, TKIP, AES */ - DBGLOG(RSN, TRACE, ("Disable Encryption\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION1_ENABLED: /* Enable WEP. Disable TKIP, AES */ - DBGLOG(RSN, TRACE, ("Enable Encryption1\n")); - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128); - break; - - case ENUM_ENCRYPTION2_ENABLED: /* Enable WEP, TKIP. Disable AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP); - DBGLOG(RSN, TRACE, ("Enable Encryption2\n")); - break; - - case ENUM_ENCRYPTION3_ENABLED: /* Enable WEP, TKIP, AES */ - secSetCipherSuite(prAdapter, - CIPHER_FLAG_WEP40 | - CIPHER_FLAG_WEP104 | - CIPHER_FLAG_WEP128 | - CIPHER_FLAG_TKIP | - CIPHER_FLAG_CCMP); - DBGLOG(RSN, TRACE, ("Enable Encryption3\n")); - break; - - default: - DBGLOG(RSN, WARN, ("Unacceptible encryption status: %d\n", - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer)); - - rStatus = WLAN_STATUS_NOT_SUPPORTED; - } - - if (rStatus == WLAN_STATUS_SUCCESS) { - /* Save the new encryption status. */ - prAdapter->rWifiVar.rConnSettings.eEncStatus = - *(P_ENUM_PARAM_ENCRYPTION_STATUS_T)pvSetBuffer; - } - - return rStatus; -} /* wlanoidSetEncryptionStatus */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to test the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_802_11_TEST_T prTest; - PVOID pvTestData; - PVOID pvStatusBuffer; - UINT_32 u4StatusBufferSize; - - DEBUGFUNC("wlanoidSetTest"); - - ASSERT(prAdapter); - - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - *pu4SetInfoLen = u4SetBufferLen; - - prTest = (P_PARAM_802_11_TEST_T)pvSetBuffer; - - DBGLOG(REQ, TRACE, ("Test - Type %ld\n", prTest->u4Type)); - - switch (prTest->u4Type) { - case 1: /* Type 1: generate an authentication event */ - pvTestData = (PVOID)&prTest->u.AuthenticationEvent; - pvStatusBuffer = (PVOID)prAdapter->aucIndicationEventBuffer; - u4StatusBufferSize = prTest->u4Length - 8; - break; - - case 2: /* Type 2: generate an RSSI status indication */ - pvTestData = (PVOID)&prTest->u.RssiTrigger; - pvStatusBuffer = (PVOID)&prAdapter->rWlanInfo.rCurrBssId.rRssi; - u4StatusBufferSize = sizeof(PARAM_RSSI); - break; - - default: - return WLAN_STATUS_INVALID_DATA; - } - - ASSERT(u4StatusBufferSize <= 180); - if (u4StatusBufferSize > 180) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* Get the contents of the StatusBuffer from the test structure. */ - kalMemCopy(pvStatusBuffer, pvTestData, u4StatusBufferSize); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - pvStatusBuffer, - u4StatusBufferSize); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the driver's WPA2 status. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCapability ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CAPABILITY_T prCap; - P_PARAM_AUTH_ENCRYPTION_T prAuthenticationEncryptionSupported; - - DEBUGFUNC("wlanoidQueryCapability"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = 4 * sizeof(UINT_32) + 14 * sizeof(PARAM_AUTH_ENCRYPTION_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prCap = (P_PARAM_CAPABILITY_T)pvQueryBuffer; - - prCap->u4Length = *pu4QueryInfoLen; - prCap->u4Version = 2; /* WPA2 */ - prCap->u4NoOfPMKIDs = CFG_MAX_PMKID_CACHE; - prCap->u4NoOfAuthEncryptPairsSupported = 14; - - prAuthenticationEncryptionSupported = - &prCap->arAuthenticationEncryptionSupported[0]; - - // fill 14 entries of supported settings - prAuthenticationEncryptionSupported[0].eAuthModeSupported = - AUTH_MODE_OPEN; - - prAuthenticationEncryptionSupported[0].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[1].eAuthModeSupported = - AUTH_MODE_OPEN; - prAuthenticationEncryptionSupported[1].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[2].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[2].eEncryptStatusSupported = - ENUM_ENCRYPTION_DISABLED; - - prAuthenticationEncryptionSupported[3].eAuthModeSupported = - AUTH_MODE_SHARED; - prAuthenticationEncryptionSupported[3].eEncryptStatusSupported = - ENUM_ENCRYPTION1_ENABLED; - - prAuthenticationEncryptionSupported[4].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[4].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[5].eAuthModeSupported = - AUTH_MODE_WPA; - prAuthenticationEncryptionSupported[5].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[6].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[6].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[7].eAuthModeSupported = - AUTH_MODE_WPA_PSK; - prAuthenticationEncryptionSupported[7].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[8].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[8].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[9].eAuthModeSupported = - AUTH_MODE_WPA_NONE; - prAuthenticationEncryptionSupported[9].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[10].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[10].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[11].eAuthModeSupported = - AUTH_MODE_WPA2; - prAuthenticationEncryptionSupported[11].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - prAuthenticationEncryptionSupported[12].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[12].eEncryptStatusSupported = - ENUM_ENCRYPTION2_ENABLED; - - prAuthenticationEncryptionSupported[13].eAuthModeSupported = - AUTH_MODE_WPA2_PSK; - prAuthenticationEncryptionSupported[13].eEncryptStatusSupported = - ENUM_ENCRYPTION3_ENABLED; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryCapability */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the PMKID in the PMK cache. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPmkid ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - UINT_32 i; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidQueryPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - *pu4QueryInfoLen = OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo) + - prAisSpecBssInfo->u4PmkidCacheCount * sizeof(PARAM_BSSID_INFO_T); - - if (u4QueryBufferLen < *pu4QueryInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prPmkid = (P_PARAM_PMKID_T)pvQueryBuffer; - - prPmkid->u4Length = *pu4QueryInfoLen; - prPmkid->u4BSSIDInfoCount = prAisSpecBssInfo->u4PmkidCacheCount; - - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - kalMemCopy(prPmkid->arBSSIDInfo[i].arBSSID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - kalMemCopy(prPmkid->arBSSIDInfo[i].arPMKID, - prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - } - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the PMKID to the PMK cache in the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetPmkid ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, j; - P_PARAM_PMKID_T prPmkid; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("wlanoidSetPmkid"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = u4SetBufferLen; - - /* It's possibble BSSIDInfoCount is zero, because OS wishes to clean PMKID */ - if (u4SetBufferLen < OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - ASSERT(pvSetBuffer); - prPmkid = (P_PARAM_PMKID_T)pvSetBuffer; - - if (u4SetBufferLen < - ((prPmkid->u4BSSIDInfoCount * sizeof(PARAM_BSSID_INFO_T)) + - OFFSET_OF(PARAM_PMKID_T, arBSSIDInfo))) { - return WLAN_STATUS_INVALID_DATA; - } - - if (prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE) { - return WLAN_STATUS_INVALID_DATA; - } - - DBGLOG(REQ, INFO, ("Count %lu\n", prPmkid->u4BSSIDInfoCount)); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* This OID replace everything in the PMKID cache. */ - if (prPmkid->u4BSSIDInfoCount == 0) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - if ((prAisSpecBssInfo->u4PmkidCacheCount + prPmkid->u4BSSIDInfoCount > CFG_MAX_PMKID_CACHE)) { - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero(prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); - } - - /* - The driver can only clear its PMKID cache whenever it make a media disconnect - indication. Otherwise, it must change the PMKID cache only when set through this OID. - */ -#if CFG_RSN_MIGRATION - for (i = 0; i < prPmkid->u4BSSIDInfoCount; i++) { - /* Search for desired BSSID. If desired BSSID is found, - then set the PMKID */ - if (!rsnSearchPmkidEntry(prAdapter, - (PUINT_8)prPmkid->arBSSIDInfo[i].arBSSID, - &j)) { - /* No entry found for the specified BSSID, so add one entry */ - if (prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE - 1) { - j = prAisSpecBssInfo->u4PmkidCacheCount; - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prPmkid->arBSSIDInfo[i].arBSSID, - sizeof(PARAM_MAC_ADDRESS)); - prAisSpecBssInfo->u4PmkidCacheCount++; - } - else { - j = CFG_MAX_PMKID_CACHE; - } - } - - if (j < CFG_MAX_PMKID_CACHE) { - kalMemCopy(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID, - prPmkid->arBSSIDInfo[i].arPMKID, - sizeof(PARAM_PMKID_VALUE)); - DBGLOG(RSN, TRACE, ("Add BSSID "MACSTR" idx=%d PMKID value "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID),j, MAC2STR(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arPMKID))); - prAisSpecBssInfo->arPmkidCache[j].fgPmkidExist = TRUE; - } - } -#endif - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetPmkid */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the set of supported data rates that -* the radio is capable of running -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query -* \param[in] u4QueryBufferLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number -* of bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySupportedRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PARAM_RATES eRate = { - // BSSBasicRateSet for 802.11n Non-HT rates - 0x8C, // 6M - 0x92, // 9M - 0x98, // 12M - 0xA4, // 18M - 0xB0, // 24M - 0xC8, // 36M - 0xE0, // 48M - 0xEC // 54M - }; - - DEBUGFUNC("wlanoidQuerySupportedRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&eRate, - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQuerySupportedRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RATES_EX); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, - (PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - sizeof(PARAM_RATES)); - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the desired rates. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i; - DEBUGFUNC("wlanoidSetDesiredRates"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(PARAM_RATES); - - if (u4SetBufferLen < sizeof(PARAM_RATES)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy((PVOID)&(prAdapter->rWlanInfo.eDesiredRates), - pvSetBuffer, - sizeof(PARAM_RATES)); - - prAdapter->rWlanInfo.eLinkAttr.ucDesiredRateLen = PARAM_MAX_LEN_RATES; - for (i = 0 ; i < PARAM_MAX_LEN_RATES ; i++) { - prAdapter->rWlanInfo.eLinkAttr.u2DesiredRate[i] = - (UINT_16) (prAdapter->rWlanInfo.eDesiredRates[i]); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetDesiredRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum frame size in bytes, -* not including the header. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxFrameSize"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ - ETHERNET_HEADER_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxFrameSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the maximum total packet length -* in bytes. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMaxTotalSize"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(PUINT_32)pvQueryBuffer = ETHERNET_MAX_PKT_SZ; - *pu4QueryInfoLen = sizeof(UINT_32); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryMaxTotalSize */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the vendor ID of the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryVendorId ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PUINT_8 cp; -#endif - DEBUGFUNC("wlanoidQueryVendorId"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - kalMemCopy(pvQueryBuffer, prAdapter->aucMacAddress, 3); - *((PUINT_8)pvQueryBuffer + 3) = 1; - *pu4QueryInfoLen = sizeof(UINT_32); - -#if DBG - cp = (PUINT_8)pvQueryBuffer; - DBGLOG(REQ, LOUD, ("Vendor ID=%02x-%02x-%02x-%02x\n", cp[0], cp[1], cp[2], cp[3])); -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryVendorId */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssi ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (prAdapter->fgIsLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* end of wlanoidQueryRssi() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RSSI trigger value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call failed due to invalid length of -* the query buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRssiTrigger ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_NONE) - return WLAN_STATUS_ADAPTER_NOT_READY; - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *(PARAM_RSSI *) pvQueryBuffer = prAdapter->rWlanInfo.rRssiTriggerValue; - DBGLOG(REQ, INFO, ("RSSI trigger: %ld dBm\n", *(PARAM_RSSI *) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a trigger value of the RSSI event. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns the -* amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRssiTrigger ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RSSI rRssiTriggerValue; - DEBUGFUNC("wlanoidSetRssiTrigger"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_RSSI); - rRssiTriggerValue = *(PARAM_RSSI *) pvSetBuffer; - - if(rRssiTriggerValue > PARAM_WHQL_RSSI_MAX_DBM - || rRssiTriggerValue < PARAM_WHQL_RSSI_MIN_DBM) - return - - /* Save the RSSI trigger value to the Adapter structure */ - prAdapter->rWlanInfo.rRssiTriggerValue = rRssiTriggerValue; - - /* If the RSSI trigger value is equal to the current RSSI value, the - * indication triggers immediately. We need to indicate the protocol - * that an RSSI status indication event triggers. */ - if (rRssiTriggerValue == (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &prAdapter->rWlanInfo.rRssiTriggerValue, sizeof(PARAM_RSSI)); - } - else if(rRssiTriggerValue < (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_GREATER; - else if(rRssiTriggerValue > (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_LESS; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetRssiTrigger */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a suggested value for the number of -* bytes of received packet data that will be indicated to the protocol -* driver. We just accept the set and ignore this value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetCurrentLookahead"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetCurrentLookahead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* receives but does not indicate to the protocols due to errors. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* cannot receive due to lack of NIC receive buffer space. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvNoBuffer"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) 0; //@FIXME - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) 0; //@FIXME - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvNoBuffer, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvNoBuffer */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the number of frames that the NIC -* received and it is CRC error. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS If success; -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvCrcError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFCSErrorCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvCrcError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvCrcError */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the current 802.11 statistics. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryStatistics"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(PARAM_802_11_STATISTICS_STRUCT_T)) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - - *pu4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) pvQueryBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prAdapter->rStatStruct.rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prAdapter->rStatStruct.rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prAdapter->rStatStruct.rFailedCount; - prStatistics->rRetryCount - = prAdapter->rStatStruct.rRetryCount; - prStatistics->rMultipleRetryCount - = prAdapter->rStatStruct.rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prAdapter->rStatStruct.rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prAdapter->rStatStruct.rRTSFailureCount; - prStatistics->rACKFailureCount - = prAdapter->rStatStruct.rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prAdapter->rStatStruct.rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prAdapter->rStatStruct.rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prAdapter->rStatStruct.rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prAdapter->rStatStruct.rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryStatistics, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryStatistics */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query current media streaming status. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - if (u4QueryBufferLen < *pu4QueryInfoLen ) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *(P_ENUM_MEDIA_STREAM_MODE)pvQueryBuffer = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to enter media streaming mode or exit media streaming mode -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ENUM_MEDIA_STREAM_MODE eStreamMode; - - DEBUGFUNC("wlanoidSetMediaStreamMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(ENUM_MEDIA_STREAM_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = sizeof(ENUM_MEDIA_STREAM_MODE); - - eStreamMode = *(P_ENUM_MEDIA_STREAM_MODE)pvSetBuffer; - - if(eStreamMode == ENUM_MEDIA_STREAM_OFF) - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 0; - else - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode = 1; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_LINK_ATTRIB, - TRUE, - FALSE, - TRUE, - nicCmdEventSetMediaStreamMode, - nicOidCmdTimeoutCommon, - sizeof(CMD_LINK_ATTRIB), - (PUINT_8)&(prAdapter->rWlanInfo.eLinkAttr), - pvSetBuffer, - u4SetBufferLen - ); -} /* wlanoidSetMediaStreamMode */ - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the permanent MAC address of the NIC. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryPermanentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - COPY_MAC_ADDR(pvQueryBuffer, prAdapter->rWifiVar.aucPermanentAddress); - *pu4QueryInfoLen = MAC_ADDR_LEN; - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryPermanentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query the MAC address the NIC is currently using. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidQueryCurrentAddr"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < MAC_ADDR_LEN) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryAddress, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryCurrentAddr */ - - -/*----------------------------------------------------------------------------*/ -/*! \brief This routine is called to query NIC link speed. -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvQueryBuf A pointer to the buffer that holds the result of the -* query buffer -* \param[in] u4QueryBufLen The length of the query buffer -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryLinkSpeed"); - - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = 10000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else if (prAdapter->fgIsLinkRateValid == TRUE && - (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - *(PUINT_32)pvQueryBuffer = prAdapter->rLinkQuality.u2LinkSpeed * 5000; // change to unit of 100bps - return WLAN_STATUS_SUCCESS; - } - else { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkSpeed, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* end of wlanoidQueryLinkSpeed() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query MCR value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - CMD_ACCESS_REG rCmdAccessReg; - - DEBUGFUNC("wlanoidQueryMcrRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvQueryBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrRdInfo->u4McrOffset >>16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_READ, - (UINT_16) (prMcrRdInfo->u4McrOffset & BITS(0,15)), - &prMcrRdInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - /* Check if access F/W Domain MCR (due to WiFiSYS is placed from 0x6000-0000*/ - if (prMcrRdInfo->u4McrOffset & 0xFFFF0000){ - // fill command - rCmdAccessReg.u4Address = prMcrRdInfo->u4McrOffset; - rCmdAccessReg.u4Data = 0; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcrRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvQueryBuffer, - u4QueryBufferLen - ); - } - else { - HAL_MCR_RD(prAdapter, - prMcrRdInfo->u4McrOffset & BITS(2,31), //address is in DWORD unit - &prMcrRdInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Read: Offset = %#08lx, Data = %#08lx\n", - prMcrRdInfo->u4McrOffset, prMcrRdInfo->u4McrData)); - return WLAN_STATUS_SUCCESS; - } -} /* end of wlanoidQueryMcrRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write MCR and enable specific function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrWrInfo; - CMD_ACCESS_REG rCmdAccessReg; - -#if CFG_STRESS_TEST_SUPPORT - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - P_STA_RECORD_T prStaRec = prBssInfo->prStaRecOfAP; - UINT_32 u4McrOffset, u4McrData; -#endif - - DEBUGFUNC("wlanoidSetMcrWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMcrWrInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T)pvSetBuffer; - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - - // -- Puff Stress Test Begin -#if CFG_STRESS_TEST_SUPPORT - - // 0xFFFFFFFE for Control Rate - if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFE){ - if(prMcrWrInfo->u4McrData < FIXED_RATE_NUM && prMcrWrInfo->u4McrData > 0){ - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(prMcrWrInfo->u4McrData); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - DEBUGFUNC("[Stress Test]Complete Rate is Changed...\n"); - DBGLOG(INIT, TRACE, ("[Stress Test] Rate is Changed to index %d...\n", prAdapter->rWifiVar.eRateSetting)); - } - - // 0xFFFFFFFD for Switch Channel - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFD){ - if(prMcrWrInfo->u4McrData <= 11 && prMcrWrInfo->u4McrData >= 1){ - prBssInfo->ucPrimaryChannel = prMcrWrInfo->u4McrData; - } - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - DBGLOG(INIT, TRACE, ("[Stress Test] Channel is switched to %d ...\n", prBssInfo->ucPrimaryChannel)); - - return WLAN_STATUS_SUCCESS; - } - - // 0xFFFFFFFFC for Control RF Band and SCO - else if(prMcrWrInfo->u4McrOffset == 0xFFFFFFFC){ - // Band - if(prMcrWrInfo->u4McrData & 0x80000000){ - //prBssInfo->eBand = BAND_5G; - //prBssInfo->ucPrimaryChannel = 52; // Bond to Channel 52 - } else { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 8; // Bond to Channel 6 - } - - // Bandwidth - if(prMcrWrInfo->u4McrData & 0x00010000){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - - if(prMcrWrInfo->u4McrData == 0x00010002){ - prBssInfo->eBssSCO = CHNL_EXT_SCB; // U20 - prBssInfo->ucPrimaryChannel += 2; - } else if (prMcrWrInfo->u4McrData == 0x00010001){ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // L20 - prBssInfo->ucPrimaryChannel -= 2; - } else { - prBssInfo->eBssSCO = CHNL_EXT_SCA; // 40 - } - } - - if(prMcrWrInfo->u4McrData & 0x00000000){ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - } - - // 0xFFFFFFFB for HT Capability - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFB){ - /* Enable HT Capability */ - if(prMcrWrInfo->u4McrData & 0x00000001){ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - DEBUGFUNC("[Stress Test]Enable HT capability...\n"); - }else{ - prStaRec->u2HtCapInfo &= (~HT_CAP_INFO_HT_GF); - DEBUGFUNC("[Stress Test]Disable HT capability...\n"); - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - - // 0xFFFFFFFA for Enable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFFA){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF9 for Disable Random Rx Reset - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF9){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_RANDOM_RX_RESET_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF8 for Enable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF8){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_EN, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - // 0xFFFFFFF7 for Disable SAPP - else if (prMcrWrInfo->u4McrOffset == 0xFFFFFFF7){ - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd( - prAdapter, - CMD_ID_SAPP_DE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - - else -#endif - // -- Puff Stress Test End - - - /* Check if access F/W Domain MCR */ - if (prMcrWrInfo->u4McrOffset & 0xFFFF0000){ - - /* 0x9000 - 0x9EFF reserved for FW */ -#if CFG_SUPPORT_SWCR - if((prMcrWrInfo->u4McrOffset >> 16) == 0x9F00) { - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) (prMcrWrInfo->u4McrOffset & BITS(0,15)), - &prMcrWrInfo->u4McrData); - return WLAN_STATUS_SUCCESS; - } -#endif /* CFG_SUPPORT_SWCR */ - - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } -#endif - - #if 1 - // low power test special command - if (prMcrWrInfo->u4McrOffset == 0x11111110){ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - //DbgPrint("Enter test mode\n"); - prAdapter->fgTestMode = TRUE; - return rStatus; - } - if (prMcrWrInfo->u4McrOffset == 0x11111111){ - //DbgPrint("nicpmSetAcpiPowerD3\n"); - - nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - return WLAN_STATUS_SUCCESS; - } - if (prMcrWrInfo->u4McrOffset == 0x11111112){ - - //DbgPrint("LP enter sleep\n"); - - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - -#endif - // fill command - rCmdAccessReg.u4Address = prMcrWrInfo->u4McrOffset; - rCmdAccessReg.u4Data = prMcrWrInfo->u4McrData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - HAL_MCR_WR(prAdapter, - (prMcrWrInfo->u4McrOffset & BITS(2,31)), //address is in DWORD unit - prMcrWrInfo->u4McrData); - - DBGLOG(INIT, TRACE, ("MCR Write: Offset = %#08lx, Data = %#08lx\n", - prMcrWrInfo->u4McrOffset, prMcrWrInfo->u4McrData)); - - return WLAN_STATUS_SUCCESS; - } -} /* wlanoidSetMcrWrite */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query SW CTRL -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - - DEBUGFUNC("wlanoidQuerySwCtrlRead"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvQueryBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = 0; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_READ/* Read */, - (UINT_16) u2SubId , - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0xFFFF: - { - u4Data = 0x5AA56620; - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = 0; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - FALSE, - TRUE, - TRUE, - nicCmdEventQuerySwCtrlRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvQueryBuffer, - u4QueryBufferLen - ); - } - } /* switch(u2Id)*/ - - prSwCtrlInfo->u4Data = u4Data; - - return rWlanStatus; - -} - /* end of wlanoidQuerySwCtrlRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write SW CTRL -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rWlanStatus; - UINT_16 u2Id, u2SubId; - UINT_32 u4Data; - - DEBUGFUNC("wlanoidSetSwCtrlWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T)pvSetBuffer; - - u2Id = (UINT_16)(prSwCtrlInfo->u4Id >> 16); - u2SubId = (UINT_16)(prSwCtrlInfo->u4Id & BITS(0,15)); - u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = WLAN_STATUS_SUCCESS; - - switch(u2Id) { - - /* 0x9000 - 0x9EFF reserved for FW */ - /* 0xFFFE reserved for FW */ - -#if CFG_SUPPORT_SWCR - case 0x9F00: - swCrReadWriteCmd(prAdapter, - SWCR_WRITE, - (UINT_16) u2SubId, - &u4Data); - break; -#endif /* CFG_SUPPORT_SWCR */ - - case 0x1000: - if (u2SubId == 0x8000) { - // CTIA power save mode setting (code: 0x10008000) - prAdapter->u4CtiaPowerMode = u4Data; - prAdapter->fgEnCtiaPowerMode = TRUE; - - // - { - PARAM_POWER_MODE ePowerMode; - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else { - ePowerMode = Param_PowerModeFast_PSP; - } - - nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - } - break; - case 0x1001: - if(u2SubId == 0x0) { - prAdapter->fgEnOnlineScan = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x1) { - prAdapter->fgDisBcnLostDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x2) { - prAdapter->rWifiVar.fgSupportUAPSD = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x3) { - prAdapter->u4UapsdAcBmp = u4Data & BITS(0,15); - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAdapter->rWifiVar.arBssInfo[u4Data>>16].rPmProfSetupInfo.ucBmpTriggerAC = (UINT_8)prAdapter->u4UapsdAcBmp; - } - else if(u2SubId == 0x4) { - prAdapter->fgDisStaAgingTimeoutDetection = (BOOLEAN)u4Data; - } - else if(u2SubId == 0x5) { - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = (UINT_8)u4Data; - } - - - break; - -#if CFG_SUPPORT_SWCR - case 0x1002: - if(u2SubId == 0x0) { - if (u4Data) { - u4Data = BIT(HIF_RX_PKT_TYPE_MANAGEMENT); - } - swCrFrameCheckEnable(prAdapter, u4Data); - } - else if(u2SubId == 0x1) { - BOOLEAN fgIsEnable; - UINT_8 ucType; - UINT_32 u4Timeout; - - fgIsEnable = (BOOLEAN)(u4Data & 0xff); - ucType = 0;//((u4Data>>4) & 0xf); - u4Timeout = ((u4Data>>8) & 0xff); - swCrDebugCheckEnable(prAdapter, fgIsEnable, ucType, u4Timeout); - } - break; -#endif - -#if CFG_SUPPORT_802_11W - case 0x2000: - DBGLOG(RSN, INFO, ("802.11w test 0x%x\n", u2SubId)); - if (u2SubId == 0x0) { - rsnStartSaQuery(prAdapter); - } - if (u2SubId == 0x1) { - rsnStopSaQuery(prAdapter); - } - if (u2SubId == 0x2) { - rsnSaQueryRequest(prAdapter, NULL); - } - if (u2SubId == 0x3) { - P_BSS_INFO_T prBssInfo = &(prAdapter->rWifiVar.arBssInfo[(NETWORK_TYPE_AIS_INDEX)]); - authSendDeauthFrame(prAdapter, prBssInfo->prStaRecOfAP , NULL, 7, NULL); - } - /* wext_set_mode */ - /* - if (u2SubId == 0x3) { - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_DISABLED; - } - if (u2SubId == 0x4) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_OPTIONAL; - } - if (u2SubId == 0x5) { - //prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - prAdapter->prGlueInfo->rWpaInfo.u4Mfp = RSN_AUTH_MFP_REQUIRED; - } - */ - break; -#endif - case 0xFFFF: - { - CMD_ACCESS_REG rCmdAccessReg; -#if 1 //CFG_MT6573_SMT_TEST - if (u2SubId == 0x0123) { - - DBGLOG(HAL, INFO, ("set smt fixed rate: %d \n", u4Data)); - - if((ENUM_REGISTRY_FIXED_RATE_T)(u4Data) < FIXED_RATE_NUM) { - prAdapter->rWifiVar.eRateSetting = (ENUM_REGISTRY_FIXED_RATE_T)(u4Data); - } - else { - prAdapter->rWifiVar.eRateSetting = FIXED_RATE_NONE; - } - - if(prAdapter->rWifiVar.eRateSetting == FIXED_RATE_NONE) { - /* Enable Auto (Long/Short) Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_AUTO; - } - else if((prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_20M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS7_20M_400NS) - || (prAdapter->rWifiVar.eRateSetting >= FIXED_RATE_MCS0_40M_400NS && - prAdapter->rWifiVar.eRateSetting <= FIXED_RATE_MCS32_400NS)) { - /* Force Short Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_SHORT; - } - else { - /* Force Long Preamble */ - prAdapter->rWifiVar.ePreambleType = PREAMBLE_TYPE_LONG; - } - - /* abort to re-connect */ -#if 1 - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); -#else - aisBssBeaconTimeout(prAdapter); -#endif - - return WLAN_STATUS_SUCCESS; - - } - else if (u2SubId == 0x1234) { - // 1. Disable On-Lin Scan - prAdapter->fgEnOnlineScan = FALSE; - - // 3. Disable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x904; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - 0 - ); - - // 4. Disable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - // Disalbe auto tx power - // - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x0; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - - - // 2. Keep at CAM mode - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 0; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeCAM; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - - // 5. Disable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = TRUE; - } - else if (u2SubId == 0x1235) { - - // 1. Enaable On-Lin Scan - prAdapter->fgEnOnlineScan = TRUE; - - // 3. Enable FIFO FULL no ack - rCmdAccessReg.u4Address = 0x60140028; - rCmdAccessReg.u4Data = 0x905; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, //FALSE, - FALSE, //TRUE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - pvSetBuffer, - 0 - ); - - // 4. Enable Roaming - rCmdSwCtrl.u4Id = 0x90000204; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - rCmdSwCtrl.u4Id = 0x90000200; - rCmdSwCtrl.u4Data = 0x820000; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - // Enable auto tx power - // - - rCmdSwCtrl.u4Id = 0xa0100003; - rCmdSwCtrl.u4Data = 0x1; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - - - // 2. Keep at Fast PS - { - PARAM_POWER_MODE ePowerMode; - - prAdapter->u4CtiaPowerMode = 2; - prAdapter->fgEnCtiaPowerMode = TRUE; - - ePowerMode = Param_PowerModeFast_PSP; - rWlanStatus = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - } - - // 5. Enable Beacon Timeout Detection - prAdapter->fgDisBcnLostDetection = FALSE; - } -#endif - } - break; - - case 0x9000: - default: - { - rCmdSwCtrl.u4Id = prSwCtrlInfo->u4Id; - rCmdSwCtrl.u4Data = prSwCtrlInfo->u4Data; - rWlanStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SW_DBG_CTRL, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_SW_DBG_CTRL_T), - (PUINT_8)&rCmdSwCtrl, - pvSetBuffer, - u4SetBufferLen - ); - } - } /* switch(u2Id) */ - - return rWlanStatus; -} - /* wlanoidSetSwCtrlWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query EEPROM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidQueryEepromRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvQueryBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryEepromRead, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* wlanoidQueryEepromRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write EEPROM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRwInfo; - CMD_ACCESS_EEPROM rCmdAccessEeprom; - - DEBUGFUNC("wlanoidSetEepromWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prEepromRwInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdAccessEeprom, sizeof(CMD_ACCESS_EEPROM)); - rCmdAccessEeprom.u2Offset = prEepromRwInfo->ucEepromIndex; - rCmdAccessEeprom.u2Data = prEepromRwInfo->u2EepromData; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_EEPROM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_ACCESS_EEPROM), - (PUINT_8)&rCmdAccessEeprom, - pvSetBuffer, - u4SetBufferLen - ); - -} /* wlanoidSetEepromWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully transmitted -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rTransmittedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of the successfully received -* packets. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRcvOk ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRcvOk"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rReceivedFragmentCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryRecvOk, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryRcvOk */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames that the driver -* fails to transmit. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitError"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitError, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitError */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after exactly one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitOneCollision"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) - (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart - prAdapter->rStatStruct.rRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitOneCollision, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitOneCollision */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames successfully -* transmitted after more than one collision. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMoreCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) (prAdapter->rStatStruct.rMultipleRetryCount.QuadPart); - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMoreCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMoreCollisions */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the number of frames -* not transmitted due to excessive collisions. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryXmitMaxCollisions"); - DBGLOG(REQ, LOUD, ("\n")); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in query receive error! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - *pu4QueryInfoLen = sizeof(UINT_32); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - else if (u4QueryBufferLen < sizeof(UINT_32) - || (u4QueryBufferLen > sizeof(UINT_32) && u4QueryBufferLen < sizeof(UINT_64))) { - *pu4QueryInfoLen = sizeof(UINT_64); - return WLAN_STATUS_INVALID_LENGTH; - } - -#if CFG_ENABLE_STATISTICS_BUFFERING - if(IsBufferedStatisticsUsable(prAdapter) == TRUE) { - if(u4QueryBufferLen == sizeof(UINT_32)) { - *pu4QueryInfoLen = sizeof(UINT_32); - *(PUINT_32) pvQueryBuffer = (UINT_32) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - else { - *pu4QueryInfoLen = sizeof(UINT_64); - *(PUINT_64) pvQueryBuffer = (UINT_64) prAdapter->rStatStruct.rFailedCount.QuadPart; - } - - return WLAN_STATUS_SUCCESS; - } - else -#endif - { - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_STATISTICS, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryXmitMaxCollisions, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - } -} /* wlanoidQueryXmitMaxCollisions */ - - -#define MTK_CUSTOM_OID_INTERFACE_VERSION 0x00006620 // for WPDWifi DLL -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current the OID interface version, -* which is the interface between the application and driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen) -{ - DEBUGFUNC("wlanoidQueryOidInterfaceVersion"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *(PUINT_32) pvQueryBuffer = MTK_CUSTOM_OID_INTERFACE_VERSION ; - *pu4QueryInfoLen = sizeof(UINT_32); - - DBGLOG(REQ, WARN, ("Custom OID interface version: %#08lX\n", - *(PUINT_32) pvQueryBuffer)); - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryOidInterfaceVersion */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#ifndef LINUX - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMcastAddr, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); -#else - return WLAN_STATUS_SUCCESS; -#endif -} /* end of wlanoidQueryMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ - WLAN_STATUS - wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) - { - UINT_8 ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Caller should provide this information */ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = ucNetTypeIndex; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); -} /* end of wlanoidSetMulticastList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 u4NewPacketFilter; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidSetCurrentPacketFilter"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen < sizeof(UINT_32)) { - *pu4SetInfoLen = sizeof(UINT_32); - return WLAN_STATUS_INVALID_LENGTH; - } - ASSERT(pvSetBuffer); - - /* Set the new packet filter. */ - u4NewPacketFilter = *(PUINT_32) pvSetBuffer; - - DBGLOG(REQ, INFO, ("New packet filter: %#08lx\n", u4NewPacketFilter)); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set current packet filter! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - do { - /* Verify the bits of the new packet filter. If any bits are set that - we don't support, leave. */ - if (u4NewPacketFilter & ~(PARAM_PACKET_FILTER_SUPPORTED)) { - rStatus = WLAN_STATUS_NOT_SUPPORTED; - break; - } - -#if DBG - /* Need to enable or disable promiscuous support depending on the new - filter. */ - if (u4NewPacketFilter & PARAM_PACKET_FILTER_PROMISCUOUS) { - DBGLOG(REQ, INFO, ("Enable promiscuous mode\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable promiscuous mode\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_ALL_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable all-multicast mode\n")); - } - else if (u4NewPacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - DBGLOG(REQ, INFO, ("Enable multicast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable multicast\n")); - } - - if (u4NewPacketFilter & PARAM_PACKET_FILTER_BROADCAST) { - DBGLOG(REQ, INFO, ("Enable Broadcast\n")); - } - else { - DBGLOG(REQ, INFO, ("Disable Broadcast\n")); - } -#endif - } while (FALSE); - - if(rStatus == WLAN_STATUS_SUCCESS) { - // Store the packet filter - - prAdapter->u4OsPacketFilter &= PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - pvSetBuffer, - u4SetBufferLen - ); - } - else { - return rStatus; - } -} /* wlanoidSetCurrentPacketFilter */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current packet filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryCurrentPacketFilter"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen >= sizeof(UINT_32)) { - ASSERT(pvQueryBuffer); - *(PUINT_32) pvQueryBuffer = prAdapter->u4OsPacketFilter; - } - - return WLAN_STATUS_SUCCESS; -} /* wlanoidQueryCurrentPacketFilter */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query ACPI device power state. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -#if DBG - PPARAM_DEVICE_POWER_STATE prPowerState; -#endif - - DEBUGFUNC("wlanoidQueryAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - -#if DBG - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvQueryBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Query Power State: D0\n")); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Query Power State: D1\n")); - break; - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Query Power State: D2\n")); - break; - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Query Power State: D3\n")); - break; - default: - break; - } -#endif - - /* Since we will disconnect the newwork, therefore we do not - need to check queue empty */ - *(PPARAM_DEVICE_POWER_STATE) pvQueryBuffer = ParamDeviceStateD3; - //WARNLOG(("Ready to transition to D3\n")); - return WLAN_STATUS_SUCCESS; - -} /* pwrmgtQueryPower */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set ACPI device power state. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PPARAM_DEVICE_POWER_STATE prPowerState; - BOOLEAN fgRetValue = TRUE; - - DEBUGFUNC("wlanoidSetAcpiDevicePowerState"); - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_DEVICE_POWER_STATE); - - ASSERT(pvSetBuffer); - prPowerState = (PPARAM_DEVICE_POWER_STATE) pvSetBuffer; - switch (*prPowerState) { - case ParamDeviceStateD0: - DBGLOG(REQ, INFO, ("Set Power State: D0\n")); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD0); - fgRetValue = nicpmSetAcpiPowerD0(prAdapter); - break; - case ParamDeviceStateD1: - DBGLOG(REQ, INFO, ("Set Power State: D1\n")); - /* no break here */ - case ParamDeviceStateD2: - DBGLOG(REQ, INFO, ("Set Power State: D2\n")); - /* no break here */ - case ParamDeviceStateD3: - DBGLOG(REQ, INFO, ("Set Power State: D3\n")); - fgRetValue = nicpmSetAcpiPowerD3(prAdapter); - kalDevSetPowerState(prAdapter->prGlueInfo, (UINT_32)ParamDeviceStateD3); - break; - default: - break; - } - - if(fgRetValue == TRUE) - return WLAN_STATUS_SUCCESS; - else - return WLAN_STATUS_FAILURE; -} /* end of wlanoidSetAcpiDevicePowerState() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current fragmentation threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFragThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidQueryFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new fragmentation threshold to the -* driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ -#if CFG_TX_FRAGMENT - - return WLAN_STATUS_SUCCESS; - -#else - - return WLAN_STATUS_NOT_SUPPORTED; -#endif /* CFG_TX_FRAGMENT */ - -} /* end of wlanoidSetFragThreshold() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the current RTS threshold. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryRtsThreshold"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - DBGLOG(REQ, LOUD, ("\n")); - - if (u4QueryBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - *pu4QueryInfoLen = sizeof(PARAM_RTS_THRESHOLD); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - *((PARAM_RTS_THRESHOLD *)pvQueryBuffer) = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidQueryRtsThreshold */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a new RTS threshold to the driver. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PARAM_RTS_THRESHOLD *prRtsThreshold; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_RTS_THRESHOLD); - if (u4SetBufferLen < sizeof(PARAM_RTS_THRESHOLD)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRtsThreshold = (PARAM_RTS_THRESHOLD *)pvSetBuffer; - *prRtsThreshold = prAdapter->rWlanInfo.eRtsThreshold; - - return WLAN_STATUS_SUCCESS; - -} /* wlanoidSetRtsThreshold */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to turn radio off. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - - DEBUGFUNC("wlanoidSetDisassociate"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set disassociate! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - /* prepare message to AIS */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - /* Send AIS Abort Message */ - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_OID_AIS_FSM_JOIN_REQ; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_NEW_CONNECTION; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - /* indicate for disconnection */ - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return WLAN_STATUS_SUCCESS; -} /* wlanoidSetDisassociate */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQuery802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - -// *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile); - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_AIS_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - - // hack for CTIA power mode setting function - if (prAdapter->fgEnCtiaPowerMode) { - // set to non-zero value (to prevent MMI query 0, before it intends to set 0, which will skip its following state machine) - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)2; - } - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSet802dot11PowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - //WARNLOG(("Invalid power mode %d\n", - //*(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_AIS_INDEX, - ePowerMode, - TRUE); - - switch (ePowerMode) { - case Param_PowerModeCAM: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to CAM (%d)\n", ePowerMode)); - break; - case Param_PowerModeMAX_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to MAX PS (%d)\n", ePowerMode)); - break; - case Param_PowerModeFast_PSP: - DBGLOG(INIT, INFO, ("Set Wi-Fi PS mode to FAST PS (%d)\n", ePowerMode)); - break; - default: - DBGLOG(INIT, INFO, ("invalid Wi-Fi PS mode setting (%d)\n", ePowerMode)); - break; - } - - return status; - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current status of AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set AdHoc Mode. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query RF frequency. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].ucPrimaryChannel); - } - else { - *(PUINT_32)pvQueryBuffer = 0; - } - } - else { - *(PUINT_32)pvQueryBuffer = - nicChannelNum2Freq(prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum); - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set RF frequency by User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4FreqInKHz; - - DEBUGFUNC("wlanoidSetFrequency"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4FreqInKHz = (PUINT_32)pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.ucAdHocChannelNum - = (UINT_8)nicFreq2ChannelNum(*pu4FreqInKHz); - prAdapter->rWifiVar.rConnSettings.eAdHocBand - = *pu4FreqInKHz < 5000000 ? BAND_2G4 : BAND_5G; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetFrequency() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set 802.11 channel of the radio frequency. -* This is a proprietary function call to Lunux currently. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the Beacon Interval from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryBeaconInterval"); - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_CONNECTED) { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - else { - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2BeaconPeriod; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidQueryBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the Beacon Interval to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4BeaconInterval; - - DEBUGFUNC("wlanoidSetBeaconInterval"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4BeaconInterval = (PUINT_32)pvSetBuffer; - - if ((*pu4BeaconInterval < DOT11_BEACON_PERIOD_MIN) || - (*pu4BeaconInterval > DOT11_BEACON_PERIOD_MAX)) { - DBGLOG(REQ, TRACE, ("Invalid Beacon Interval = %ld\n", *pu4BeaconInterval)); - return WLAN_STATUS_INVALID_DATA; - } - - prAdapter->rWlanInfo.u2BeaconPeriod = (UINT_16)*pu4BeaconInterval; - - DBGLOG(REQ, INFO, ("Set beacon interval: %d\n", - prAdapter->rWlanInfo.u2BeaconPeriod)); - - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetBeaconInterval() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the ATIM window from User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA) { - *(PUINT_32)pvQueryBuffer = 0; - } - else { - *(PUINT_32)pvQueryBuffer = - (UINT_32) prAdapter->rWlanInfo.u2AtimWindow; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of wlanoidQueryAtimWindow() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the ATIM window to User Settings. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4AtimWindow; - - DEBUGFUNC("wlanoidSetAtimWindow"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - pu4AtimWindow = (PUINT_32)pvSetBuffer; - - prAdapter->rWlanInfo.u2AtimWindow = (UINT_16)*pu4AtimWindow; - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetAtimWindow() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to Set the MAC address which is currently used by the NIC. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(0); //// - - return WLAN_STATUS_SUCCESS; -} /* end of wlanoidSetCurrentAddr() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the checksum offload function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - UINT_32 i, u4CSUMFlags; - CMD_BASIC_CONFIG rCmdBasicConfig; - - DEBUGFUNC("wlanoidSetCSUMOffload"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - u4CSUMFlags = *(PUINT_32)pvSetBuffer; - - kalMemZero(&rCmdBasicConfig, sizeof(CMD_BASIC_CONFIG)); - - for(i = 0 ; i < 6 ; i++) { // set to broadcast address for not-specified - rCmdBasicConfig.rMyMacAddr[i] = 0xff; - } - - rCmdBasicConfig.ucNative80211 = 0; //@FIXME: for Vista - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_TCP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_UDP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(1); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_TX_IP) - rCmdBasicConfig.rCsumOffload.u2TxChecksum |= BIT(0); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_TCP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(2); - - if(u4CSUMFlags & CSUM_OFFLOAD_EN_RX_UDP) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(1); - - if(u4CSUMFlags & (CSUM_OFFLOAD_EN_RX_IPv4 | CSUM_OFFLOAD_EN_RX_IPv6)) - rCmdBasicConfig.rCsumOffload.u2RxChecksum |= BIT(0); - - prAdapter->u4CSUMFlags = u4CSUMFlags; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BASIC_CONFIG, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_BASIC_CONFIG), - (PUINT_8)&rCmdBasicConfig, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetNetworkAddress"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - DBGLOG(REQ, INFO, ("u4IpAddressCount (%d)\n", u4IpAddressCount)); - - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - DBGLOG(REQ, INFO, ("prNetAddrIp->in_addr:%d:%d:%d:%d\n", pucBuf[0], pucBuf[1],pucBuf[2],pucBuf[3])); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set, -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == FALSE) { - // switch to RF Test mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 1; // RF test mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventEnterRfTest, - nicOidCmdEnterRFTestTimeout, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in test mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set driver to switch into normal operation mode from RF test mode -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* should be NULL -* \param[in] u4SetBufferLen The length of the set buffer, should be 0 -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_DATA -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus; - CMD_TEST_CTRL_T rCmdTestCtrl; - - DEBUGFUNC("wlanoidRftestSetTestMode"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 0; - - if(u4SetBufferLen == 0) { - if(prAdapter->fgTestMode == TRUE) { - // switch to normal mode - rCmdTestCtrl.ucAction = 0; // Switch mode - rCmdTestCtrl.u.u4OpMode = 0; // normal mode - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventLeaveRfTest, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - pvSetBuffer, - u4SetBufferLen); - } - else { - // already in normal mode .. - rStatus = WLAN_STATUS_SUCCESS; - } - } - else { - rStatus = WLAN_STATUS_INVALID_DATA; - } - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief query for RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_BUFFER_TOO_SHORT -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestQueryAutoTest"); - - ASSERT(prAdapter); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4QueryBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. QueryBufferLen: %ld.\n", - u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvQueryBuffer; - rStatus = rftestQueryATInfo(prAdapter, - prRfATInfo->u4FuncIndex, - prRfATInfo->u4FuncData, - pvQueryBuffer, - u4QueryBufferLen); - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set RF test parameter -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_MTK_WIFI_TEST_STRUC_T prRfATInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidRftestSetAutoTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_WIFI_TEST_STRUC_T); - - if (u4SetBufferLen != sizeof(PARAM_MTK_WIFI_TEST_STRUC_T)) { - DBGLOG(REQ, ERROR, ("Invalid data. SetBufferLen: %ld.\n", - u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prRfATInfo = (P_PARAM_MTK_WIFI_TEST_STRUC_T)pvSetBuffer; - rStatus = rftestSetATInfo(prAdapter, prRfATInfo->u4FuncIndex, prRfATInfo->u4FuncData); - - return rStatus; -} - -/* RF test OID set handler */ -WLAN_STATUS -rftestSetATInfo ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 1; // Set ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; -} - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_CMD_TEST_CTRL_T pCmdTestCtrl; - UINT_8 ucCmdSeqNum; - P_EVENT_TEST_STATUS prTestStatus; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - - if(u4FuncIndex == RF_AT_FUNCID_FW_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = - (prAdapter->rVerInfo.u2FwProductID << 16) | (prAdapter->rVerInfo.u2FwOwnVersion); - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else if(u4FuncIndex == RF_AT_FUNCID_DRV_INFO) { - /* driver implementation */ - prTestStatus = (P_EVENT_TEST_STATUS)pvQueryBuffer; - - prTestStatus->rATInfo.u4FuncData = CFG_DRV_OWN_VERSION; - u4QueryBufferLen = sizeof(EVENT_TEST_STATUS); - - return WLAN_STATUS_SUCCESS; - } - else { - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T))); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_GENERAL_IOCTL; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pfCmdDoneHandler = nicCmdEventQueryRfTestATInfo; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_TEST_MODE; - prCmdInfo->fgSetQuery = FALSE; - prCmdInfo->fgNeedResp = TRUE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = sizeof(CMD_TEST_CTRL_T); - prCmdInfo->pvInformationBuffer = pvQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4QueryBufferLen; - - // Setup WIFI_CMD_T (payload = CMD_TEST_CTRL_T) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - pCmdTestCtrl = (P_CMD_TEST_CTRL_T)(prWifiCmd->aucBuffer); - pCmdTestCtrl->ucAction = 2; // Get ATInfo - pCmdTestCtrl->u.rRfATInfo.u4FuncIndex = u4FuncIndex; - pCmdTestCtrl->u.rRfATInfo.u4FuncData = u4FuncData; - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - return WLAN_STATUS_PENDING; - } -} - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ) -{ - CMD_TEST_CTRL_T rCmdTestCtrl; - - ASSERT(prAdapter); - - rCmdTestCtrl.ucAction = 5; // Set Channel Frequency - rCmdTestCtrl.u.u4ChannelFreq = u4FreqInKHz; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_TEST_MODE, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_TEST_CTRL_T), - (PUINT_8)&rCmdTestCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - prGlueInfo = prAdapter->prGlueInfo; - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - DEBUGFUNC("wlanSendSetQueryCmd"); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI ui to set wapi mode, which is needed to info the the driver -* to operation at WAPI mode while driver initialize. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - DEBUGFUNC("wlanoidSetWapiMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - ASSERT(pvSetBuffer); - - /* Todo:: For support WAPI and Wi-Fi at same driver, use the set wapi assoc ie at the check point */ - /* The Adapter Connection setting fgUseWapi will cleat whil oid set mode (infra), */ - /* And set fgUseWapi True while set wapi assoc ie */ - /* policay selection, add key all depend on this flag, */ - /* The fgUseWapi may remove later */ - if (*(PUINT_32)pvSetBuffer) { - prAdapter->fgUseWapi = TRUE; - } - else { - prAdapter->fgUseWapi = FALSE; - } - -#if 0 - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + 4)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_BUILD_CONNECTION cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + 4; - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_WAPI_MODE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - cp = (PUINT_8)(prWifiCmd->aucBuffer); - - kalMemCopy(cp, (PUINT_8)pvSetBuffer, 4); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -#else - return WLAN_STATUS_SUCCESS; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WAPI to set the assoc info, which is needed to add to -* Association request frame while join WAPI AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_WAPI_INFO_ELEM_T prWapiInfo; - PUINT_8 cp; - UINT_16 u2AuthSuiteCount = 0; - UINT_16 u2PairSuiteCount = 0; - UINT_32 u4AuthKeyMgtSuite = 0; - UINT_32 u4PairSuite = 0; - UINT_32 u4GroupSuite = 0; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWapiAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if (u4SetBufferLen < 20 /* From EID to Group cipher */) { - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - prAdapter->rWifiVar.rConnSettings.fgWapiMode = TRUE; - - //if (prWapiInfo->ucElemId != ELEM_ID_WAPI) - // DBGLOG(SEC, TRACE, ("Not WAPI IE ?!\n")); - - //if (prWapiInfo->ucLength < 18) - // return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - prWapiInfo = (P_WAPI_INFO_ELEM_T)pvSetBuffer; - - if (prWapiInfo->ucElemId != ELEM_ID_WAPI) { - DBGLOG(SEC, TRACE, ("Not WAPI IE ?! u4SetBufferLen = %d\n", u4SetBufferLen)); - prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prWapiInfo->ucLength < 18) - return WLAN_STATUS_INVALID_LENGTH; - - /* Skip Version check */ - cp = (PUINT_8)&prWapiInfo->u2AuthKeyMgtSuiteCount; - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - - if (u2AuthSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4AuthKeyMgtSuite); - - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info auth mgt suite [%d]: %02x-%02x-%02x-%02x\n", - u2AuthSuiteCount, - (UCHAR) (u4AuthKeyMgtSuite & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 8) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 16) & 0x000000FF), - (UCHAR) ((u4AuthKeyMgtSuite >> 24) & 0x000000FF))); - - if (u4AuthKeyMgtSuite != WAPI_AKM_SUITE_802_1X && - u4AuthKeyMgtSuite != WAPI_AKM_SUITE_PSK) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - if (u2PairSuiteCount>1) - return WLAN_STATUS_INVALID_LENGTH; - - cp += 2; - WLAN_GET_FIELD_32(cp, &u4PairSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info pairwise cipher suite [%d]: %02x-%02x-%02x-%02x\n", - u2PairSuiteCount, - (UCHAR) (u4PairSuite & 0x000000FF), - (UCHAR) ((u4PairSuite >> 8) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 16) & 0x000000FF), - (UCHAR) ((u4PairSuite >> 24) & 0x000000FF))); - - if (u4PairSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - cp += 4; - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - DBGLOG(SEC, TRACE, ("WAPI: Assoc Info group cipher suite : %02x-%02x-%02x-%02x\n", - (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (u4GroupSuite != WAPI_CIPHER_SUITE_WPI) - ASSERT(FALSE); - - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite = u4AuthKeyMgtSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher = u4PairSuite; - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher = u4GroupSuite; - - kalMemCopy(prAdapter->prGlueInfo->aucWapiAssocInfoIEs, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WapiAssocInfoIESz = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the wpi key to the driver. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -* -* \note The setting buffer P_PARAM_WPI_KEY, which is set by NDIS, is unpacked. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWapiKey ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - P_PARAM_WPI_KEY_T prNewKey; - P_CMD_802_11_KEY prCmdKey; - PUINT_8 pc; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanoidSetWapiKey"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set add key! (Adapter not ready). ACPI=D%d, Radio=%d\r\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - prNewKey = (P_PARAM_WPI_KEY_T) pvSetBuffer; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)pvSetBuffer, 560); - pc = (PUINT_8)pvSetBuffer; - - *pu4SetInfoLen = u4SetBufferLen; - - /* Exception check */ - if (prNewKey->ucKeyID != 0x1 || - prNewKey->ucKeyID != 0x0) { - prNewKey->ucKeyID = prNewKey->ucKeyID & BIT(0); - //DBGLOG(SEC, INFO, ("Invalid WAPI key ID (%d)\r\n", prNewKey->ucKeyID)); - } - - /* Dump P_PARAM_WPI_KEY_T content. */ - DBGLOG(REQ, TRACE, ("Set: Dump P_PARAM_WPI_KEY_T content\r\n")); - DBGLOG(REQ, TRACE, ("TYPE : %d\r\n", prNewKey->eKeyType)); - DBGLOG(REQ, TRACE, ("Direction : %d\r\n", prNewKey->eDirection)); - DBGLOG(REQ, TRACE, ("KeyID : %d\r\n", prNewKey->ucKeyID)); - DBGLOG(REQ, TRACE, ("AddressIndex:\r\n")); - DBGLOG_MEM8(REQ, TRACE, prNewKey->aucAddrIndex, 12); - prNewKey->u4LenWPIEK = 16; - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPIEK, (UINT_8)prNewKey->u4LenWPIEK); - prNewKey->u4LenWPICK = 16; - - DBGLOG(REQ, TRACE, ("CK Key(%d):\r\n", (UINT_8)prNewKey->u4LenWPICK)); - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucWPICK, (UINT_8)prNewKey->u4LenWPICK); - DBGLOG(REQ, TRACE, ("PN:\r\n")); - if (prNewKey->eKeyType == 0){ - prNewKey->aucPN[0] = 0x5c; - prNewKey->aucPN[1] = 0x36; - prNewKey->aucPN[2] = 0x5c; - prNewKey->aucPN[3] = 0x36; - prNewKey->aucPN[4] = 0x5c; - prNewKey->aucPN[5] = 0x36; - prNewKey->aucPN[6] = 0x5c; - prNewKey->aucPN[7] = 0x36; - prNewKey->aucPN[8] = 0x5c; - prNewKey->aucPN[9] = 0x36; - prNewKey->aucPN[10] = 0x5c; - prNewKey->aucPN[11] = 0x36; - prNewKey->aucPN[12] = 0x5c; - prNewKey->aucPN[13] = 0x36; - prNewKey->aucPN[14] = 0x5c; - prNewKey->aucPN[15] = 0x36; - } - - DBGLOG_MEM8(REQ, TRACE, (PUINT_8)prNewKey->aucPN, 16); - - prGlueInfo = prAdapter->prGlueInfo; - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetBufferLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - - // compose CMD_ID_ADD_REMOVE_KEY cmd pkt - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_AIS_INDEX; - prCmdInfo->u2InfoBufLen = CMD_HDR_SIZE + sizeof(CMD_802_11_KEY); - prCmdInfo->pfCmdDoneHandler = nicCmdEventSetCommon; - prCmdInfo->pfCmdTimeoutHandler = nicOidCmdTimeoutCommon; - prCmdInfo->fgIsOid = TRUE; - prCmdInfo->ucCID = CMD_ID_ADD_REMOVE_KEY; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetBufferLen; - prCmdInfo->pvInformationBuffer = pvSetBuffer; - prCmdInfo->u4InformationBufferLength = u4SetBufferLen; - - // Setup WIFI_CMD_T - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdKey = (P_CMD_802_11_KEY)(prWifiCmd->aucBuffer); - - kalMemZero(prCmdKey, sizeof(CMD_802_11_KEY)); - - prCmdKey->ucAddRemove = 1; /* Add */ - - if (prNewKey->eKeyType == ENUM_WPI_PAIRWISE_KEY) { - prCmdKey->ucTxKey = 1; - prCmdKey->ucKeyType = 1; - } - - kalMemCopy(prCmdKey->aucPeerAddr, (PUINT_8)prNewKey->aucAddrIndex, MAC_ADDR_LEN); - - prCmdKey->ucNetType = 0; /* AIS */ - - prCmdKey->ucKeyId = prNewKey->ucKeyID; - - prCmdKey->ucKeyLen = 32; - - prCmdKey->ucAlgorithmId = CIPHER_SUITE_WPI; - - kalMemCopy(prCmdKey->aucKeyMaterial, (PUINT_8)prNewKey->aucWPIEK, 16); - - kalMemCopy(prCmdKey->aucKeyMaterial+16, (PUINT_8)prNewKey->aucWPICK, 16); - - kalMemCopy(prCmdKey->aucKeyRsc, (PUINT_8)prNewKey->aucPN, 16); - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - - return WLAN_STATUS_PENDING; -} /* wlanoidSetAddKey */ -#endif - - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called by WSC to set the assoc info, which is needed to add to -* Association request frame while join WPS AP. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - DEBUGFUNC("wlanoidSetWSCAssocInfo"); - DBGLOG(REQ, LOUD, ("\r\n")); - - if(u4SetBufferLen == 0) - return WLAN_STATUS_INVALID_LENGTH; - - *pu4SetInfoLen = u4SetBufferLen; - - kalMemCopy(prAdapter->prGlueInfo->aucWSCAssocInfoIE, pvSetBuffer, u4SetBufferLen); - prAdapter->prGlueInfo->u2WSCAssocInfoIELen = (UINT_16)u4SetBufferLen; - DBGLOG(SEC, TRACE, ("Assoc Info IE sz %ld\n", u4SetBufferLen)); - - return WLAN_STATUS_SUCCESS; - -} -#endif - - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_PM_PACKET_PATTERN prPacketPattern; - - DEBUGFUNC("wlanoidSetAddWakeupPattern"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_PM_PACKET_PATTERN); - - if (u4SetBufferLen < sizeof(PARAM_PM_PACKET_PATTERN)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prPacketPattern = (P_PARAM_PM_PACKET_PATTERN) pvSetBuffer; - - /* FIXME: - * Send the struct to firmware */ - - return WLAN_STATUS_FAILURE; -} - - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidQueryEnableWakeup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - if (u4QueryBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - pu4WakeupEventEnable = (PUINT_32)pvQueryBuffer; - - *pu4WakeupEventEnable = prAdapter->u4WakeupEventEnable; - - return WLAN_STATUS_SUCCESS; -} - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4WakeupEventEnable; - - DEBUGFUNC("wlanoidSetEnableWakup"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - - if (u4SetBufferLen < sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - pu4WakeupEventEnable = (PUINT_32)pvSetBuffer; - prAdapter->u4WakeupEventEnable = *pu4WakeupEventEnable; - - /* FIXME: - * Send Command Event for setting wakeup-pattern / Magic Packet to firmware - * */ - - return WLAN_STATUS_FAILURE; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure PS related settings for WMM-PS test. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T prWmmPsTestInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_SET_WMM_PS_TEST_STRUC_T rSetWmmPsTestParam; - UINT_16 u2CmdBufLen; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("wlanoidSetWiFiWmmPsTest"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T); - - prWmmPsTestInfo = (P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T) pvSetBuffer; - - rSetWmmPsTestParam.ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - rSetWmmPsTestParam.bmfgApsdEnAc = prWmmPsTestInfo->bmfgApsdEnAc; - rSetWmmPsTestParam.ucIsEnterPsAtOnce = prWmmPsTestInfo->ucIsEnterPsAtOnce; - rSetWmmPsTestParam.ucIsDisableUcTrigger = prWmmPsTestInfo->ucIsDisableUcTrigger; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[rSetWmmPsTestParam.ucNetTypeIndex]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - prPmProfSetupInfo->ucBmpDeliveryAC = (rSetWmmPsTestParam.bmfgApsdEnAc >> 4) & BITS(0, 3); - prPmProfSetupInfo->ucBmpTriggerAC = rSetWmmPsTestParam.bmfgApsdEnAc & BITS(0, 3); - - u2CmdBufLen = sizeof(CMD_SET_WMM_PS_TEST_STRUC_T); - -#if 0 - /* it will apply the disable trig or not immediately */ - if (prPmInfo->ucWmmPsDisableUcPoll && prPmInfo->ucWmmPsConnWithTrig) { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, TRUE); - } - else { -// NIC_PM_WMM_PS_DISABLE_UC_TRIG(prAdapter, FALSE); - } -#endif - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_WMM_PS_TEST_PARMS, - TRUE, - FALSE, - TRUE, - NULL, // TODO? - NULL, - u2CmdBufLen, - (PUINT_8)&rSetWmmPsTestParam, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetWiFiWmmPsTest */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure enable/disable TX A-MPDU feature. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_TX_AMPDU_T rTxAmpdu; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetTxAmpdu"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rTxAmpdu.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_TX_AMPDU_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_TX_AMPDU, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rTxAmpdu, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetTxAmpdu */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to configure reject/accept ADDBA Request. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - CMD_ADDBA_REJECT_T rAddbaReject; - UINT_16 u2CmdBufLen; - PBOOLEAN pfgEnable; - - DEBUGFUNC("wlanoidSetAddbaReject"); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - - *pu4SetInfoLen = sizeof(BOOLEAN); - - pfgEnable = (PBOOLEAN) pvSetBuffer; - - rAddbaReject.fgEnable = *pfgEnable; - - u2CmdBufLen = sizeof(CMD_ADDBA_REJECT_T); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_ADDBA_REJECT, - TRUE, - FALSE, - TRUE, - NULL, - NULL, - u2CmdBufLen, - (PUINT_8)&rAddbaReject, - NULL, - 0); - - - return rStatus; -} /* wlanoidSetAddbaReject */ - - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - - DEBUGFUNC("wlanoidQuerySLTStatus"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4QueryBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)pvQueryBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_LP_SET: - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - prLpSetting->u4BcnRcvNum = prSltInfo->u4BeaconReceiveCnt; - } - break; - default: - // TBD... - break; - } - - return rWlanStatus; -} /* wlanoidQuerySLTStatus */ - -WLAN_STATUS -wlanoidUpdateSLTMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_MTK_SLT_TEST_STRUC_T prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T)NULL; - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - /* 1. Action: Update or Initial Set - * 2. Role. - * 3. Target MAC address. - * 4. RF BW & Rate Settings - */ - - DEBUGFUNC("wlanoidUpdateSLTMode"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_MTK_SLT_TEST_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_MTK_SLT_TEST_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prMtkSltInfo = (P_PARAM_MTK_SLT_TEST_STRUC_T) pvSetBuffer; - - prSltInfo = &(prAdapter->rWifiVar.rSltInfo); - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - switch (prMtkSltInfo->rSltFuncIdx) { - case ENUM_MTK_SLT_FUNC_INITIAL: /* Initialize */ - { - P_PARAM_MTK_SLT_INITIAL_STRUC_T prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_INITIAL_STRUC_T)); - - prMtkSltInit = (P_PARAM_MTK_SLT_INITIAL_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoStaRec != NULL) { - /* The driver has been initialized. */ - prSltInfo->prPseudoStaRec = NULL; - } - - - prSltInfo->prPseudoBssDesc = scanSearchExistingBssDesc(prAdapter, - BSS_TYPE_IBSS, - prMtkSltInit->aucTargetMacAddr, - prMtkSltInit->aucTargetMacAddr); - - prSltInfo->u2SiteID = prMtkSltInit->u2SiteID; - - /* Bandwidth 2.4G: Channel 1~14 - * Bandwidth 5G: *36, 40, 44, 48, 52, 56, 60, 64, - * *100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, - * 149, 153, *157, 161, - * 184, 188, 192, 196, 200, 204, 208, 212, *216 - */ - prSltInfo->ucChannel2G4 = 1 + (prSltInfo->u2SiteID % 4) * 5; - - switch (prSltInfo->ucChannel2G4) { - case 1: - prSltInfo->ucChannel5G = 36; - break; - case 6: - prSltInfo->ucChannel5G = 52; - break; - case 11: - prSltInfo->ucChannel5G = 104; - break; - case 16: - prSltInfo->ucChannel2G4 = 14; - prSltInfo->ucChannel5G = 161; - break; - default: - ASSERT(FALSE); - } - - if (prSltInfo->prPseudoBssDesc == NULL) { - do { - prSltInfo->prPseudoBssDesc = scanAllocateBssDesc(prAdapter); - - if (prSltInfo->prPseudoBssDesc == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - } while (FALSE); - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - if (prBssDesc) { - prBssDesc->eBSSType = BSS_TYPE_IBSS; - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prMtkSltInit->aucTargetMacAddr); - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - - prBssDesc->u2BeaconInterval = 100; - prBssDesc->u2ATIMWindow = 0; - prBssDesc->ucDTIMPeriod = 1; - - prBssDesc->u2IELength = 0; - - prBssDesc->fgIsERPPresent = TRUE; - prBssDesc->fgIsHTPresent = TRUE; - - prBssDesc->u2OperationalRateSet = BIT(RATE_36M_INDEX); - prBssDesc->u2BSSBasicRateSet = BIT(RATE_36M_INDEX); - prBssDesc->fgIsUnknownBssBasicRate = FALSE; - - prBssDesc->fgIsLargerTSF = TRUE; - - prBssDesc->eBand = BAND_2G4; - - prBssDesc->ucChannelNum = prSltInfo->ucChannel2G4; - - prBssDesc->ucPhyTypeSet = PHY_TYPE_SET_802_11ABGN; - - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - } - } - break; - case ENUM_MTK_SLT_FUNC_RATE_SET: /* Update RF Settings. */ - if (prSltInfo->prPseudoStaRec == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - } - else { - P_PARAM_MTK_SLT_TR_TEST_STRUC_T prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_TR_TEST_STRUC_T)); - - prStaRec = prSltInfo->prPseudoStaRec; - prTRSetting = (P_PARAM_MTK_SLT_TR_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->eBand = BAND_5G; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel5G; - } - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM24) { - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = prSltInfo->ucChannel2G4; - } - - if ((prTRSetting->u4FixedRate & FIXED_BW_DL40) != 0) { - /* RF 40 */ - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; /* It would controls RFBW capability in WTBL. */ - prStaRec->ucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; /* This controls RF BW, RF BW would be 40 only if - * 1. PHY_TYPE_BIT_HT is TRUE. - * 2. SCO is SCA/SCB. - */ - - /* U20/L20 Control. */ - switch (prTRSetting->u4FixedRate & 0xC000) { - case FIXED_EXT_CHNL_U20: - prBssInfo->eBssSCO = CHNL_EXT_SCB; // +2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel += 2; - } - else { - if (prBssInfo->ucPrimaryChannel <5) { - prBssInfo->ucPrimaryChannel = 8; // For channel 1, testing L20 at channel 8. - } - } - break; - case FIXED_EXT_CHNL_L20: - default: /* 40M */ - prBssInfo->eBssSCO = CHNL_EXT_SCA; // -2 - if (prTRSetting->rNetworkType == PARAM_NETWORK_TYPE_OFDM5) { - prBssInfo->ucPrimaryChannel -= 2; - } - else { - if (prBssInfo->ucPrimaryChannel > 10) { - prBssInfo->ucPrimaryChannel = 3; // For channel 11 / 14. testing U20 at channel 3. - } - } - break; - } - } - else { - /* RF 20 */ - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - } - - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - - nicUpdateBss(prAdapter, prBssInfo->ucNetTypeIndex); - - prStaRec->u2HtCapInfo &= ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - - switch (prTRSetting->u4FixedRate & 0xFF) { - case RATE_OFDM_54M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_54M_INDEX); - break; - case RATE_OFDM_48M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_48M_INDEX); - break; - case RATE_OFDM_36M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - case RATE_OFDM_24M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_24M_INDEX); - break; - case RATE_OFDM_6M: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_6M_INDEX); - break; - case RATE_CCK_11M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_11M_INDEX); - break; - case RATE_CCK_1M_LONG: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_1M_INDEX); - break; - case RATE_GF_MCS_0: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - case RATE_MM_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_HT_GF; -#if 0 // Only for Current Measurement Mode. - prStaRec->u2HtCapInfo |= (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); -#endif - break; - case RATE_GF_MCS_7: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_HT_PHY_INDEX); - prStaRec->u2HtCapInfo |= HT_CAP_INFO_HT_GF; - break; - default: - prStaRec->u2DesiredNonHTRateSet = BIT(RATE_36M_INDEX); - break; - } - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - } - break; - case ENUM_MTK_SLT_FUNC_LP_SET: /* Reset LP Test Result. */ - { - P_PARAM_MTK_SLT_LP_TEST_STRUC_T prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)NULL; - - ASSERT(prMtkSltInfo->u4FuncInfoLen == sizeof(PARAM_MTK_SLT_LP_TEST_STRUC_T)); - - prLpSetting = (P_PARAM_MTK_SLT_LP_TEST_STRUC_T)&prMtkSltInfo->unFuncInfoContent; - - if (prSltInfo->prPseudoBssDesc == NULL) { - /* Please initial SLT Mode first. */ - break; - } - else { - prBssDesc = prSltInfo->prPseudoBssDesc; - } - - switch (prLpSetting->rLpTestMode) { - case ENUM_MTK_LP_TEST_NORMAL: - /* In normal mode, we would use target MAC address to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - prSltInfo->fgIsDUT = FALSE; - break; - case ENUM_MTK_LP_TEST_GOLDEN_SAMPLE: - /* 1. Lower AIFS of BCN queue. - * 2. Fixed Random Number tobe 0. - */ - prSltInfo->fgIsDUT = FALSE; - /* In LP test mode, we would use MAC address of Golden Sample to be the BSSID. */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssInfo->aucOwnMacAddr); - break; - case ENUM_MTK_LP_TEST_DUT: - /* 1. Enter Sleep Mode. - * 2. Fix random number a large value & enlarge AIFN of BCN queue. - */ - COPY_MAC_ADDR(prBssDesc->aucBSSID, prBssDesc->aucSrcAddr); - prSltInfo->u4BeaconReceiveCnt = 0; - prSltInfo->fgIsDUT = TRUE; - break; - } - - } - - break; - default: - break; - } - - - - - return WLAN_STATUS_FAILURE; - - - return rWlanStatus; -} /* wlanoidUpdateSLTMode */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query NVRAM value. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - UINT_16 u2Data; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - DEBUGFUNC("wlanoidQueryNvramRead"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4QueryBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvQueryBuffer; - - if(prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_READ) { - fgStatus = kalCfgDataRead16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - &u2Data); - - if(fgStatus) { - prNvramRwInfo->u2EepromData = u2Data; - DBGLOG(REQ, INFO, ("NVRAM Read: index=%#X, data=%#02X\r\n", - prNvramRwInfo->ucEepromIndex, u2Data)); - } - else{ - DBGLOG(REQ, ERROR, ("NVRAM Read Failed: index=%#x.\r\n", - prNvramRwInfo->ucEepromIndex)); - rStatus = WLAN_STATUS_FAILURE; - } - } - else if (prNvramRwInfo->ucEepromMethod == PARAM_EEPROM_READ_METHOD_GETSIZE) { - prNvramRwInfo->u2EepromData = CFG_FILE_WIFI_REC_SIZE; - DBGLOG(REQ, INFO, ("EEPROM size =%d\r\n", prNvramRwInfo->u2EepromData)); - } - - *pu4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - return rStatus; -} /* wlanoidQueryNvramRead */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to write NVRAM value. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T prNvramRwInfo; - BOOLEAN fgStatus; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - DEBUGFUNC("wlanoidSetNvramWrite"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNvramRwInfo = (P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T)pvSetBuffer; - - fgStatus = kalCfgDataWrite16(prAdapter->prGlueInfo, - prNvramRwInfo->ucEepromIndex << 1, /* change to byte offset */ - prNvramRwInfo->u2EepromData - ); - - if(fgStatus == FALSE){ - DBGLOG(REQ, ERROR, ("NVRAM Write Failed.\r\n")); - rStatus = WLAN_STATUS_FAILURE; - } - - return rStatus; -} /* wlanoidSetNvramWrite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(ENUM_CFG_SRC_TYPE_T); - - if(kalIsConfigurationExist(prAdapter->prGlueInfo) == TRUE) { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_NVRAM; - } - else { - *(P_ENUM_CFG_SRC_TYPE_T)pvQueryBuffer = CFG_SRC_TYPE_EEPROM; - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - ASSERT(prAdapter); - - *pu4QueryInfoLen = sizeof(P_ENUM_EEPROM_TYPE_T); - -#if CFG_SUPPORT_NIC_CAPABILITY - if(prAdapter->fgIsEepromUsed == TRUE) { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_PRESENT; - } - else { - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; - } -#else - *( P_ENUM_EEPROM_TYPE_T )pvQueryBuffer = EEPROM_TYPE_NO; -#endif - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get the config data source type. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_8 pucCountry; - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(u4SetBufferLen == 2); - - *pu4SetInfoLen = 2; - - pucCountry = pvSetBuffer; - - prAdapter->rWifiVar.rConnSettings.u2CountryCode = - (((UINT_16) pucCountry[0]) << 8) | ((UINT_16) pucCountry[1]) ; - - prAdapter->prDomainInfo = NULL; /* Force to re-search country code */ - rlmDomainSendCmd(prAdapter, TRUE); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set BT profile or BT information and the -* driver will set the built-in PTA configuration into chip. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - P_PTA_IPC_T prPtaIpc; - - DEBUGFUNC("wlanoidSetBT.\n"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PTA_IPC_T); - if (u4SetBufferLen != sizeof(PTA_IPC_T)) { - WARNLOG(("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT profile because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - prPtaIpc = (P_PTA_IPC_T)pvSetBuffer; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: BWCS CMD = %02x%02x%02x%02x\n", - prPtaIpc->u.aucBTPParams[0], prPtaIpc->u.aucBTPParams[1], prPtaIpc->u.aucBTPParams[2], prPtaIpc->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS CMD: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3]); -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BWCS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(PTA_IPC_T), - (PUINT_8)prPtaIpc, - NULL, - 0); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query current BT profile and BTCR values -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvQueryBuffer Pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ -// P_PARAM_PTA_IPC_T prPtaIpc; -// UINT_32 u4QueryBuffLen; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PTA_IPC_T); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(PTA_IPC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); -// prPtaIpc = (P_PTA_IPC_T)pvQueryBuffer; -// prPtaIpc->ucCmd = BT_CMD_PROFILE; -// prPtaIpc->ucLen = sizeof(prPtaIpc->u); -// nicPtaGetProfile(prAdapter, (PUINT_8)&prPtaIpc->u, &u4QueryBuffLen); - - return WLAN_STATUS_SUCCESS; -} - -#if 0 -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4SingleAntenna; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4SingleAntenna = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgSingleAntenna) { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 1\r\n"); - *pu4SingleAntenna = 1; - } else { - //printk(KERN_WARNING DRV_NAME"Q Single Ant = 0\r\n"); - *pu4SingleAntenna = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - - PUINT_32 pu4SingleAntenna; - UINT_32 u4SingleAntenna; - P_PTA_INFO_T prPtaInfo; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - prPtaInfo = &prAdapter->rPtaInfo; - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set antenna because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4SingleAntenna = (PUINT_32)pvSetBuffer; - u4SingleAntenna = *pu4SingleAntenna; - - if (u4SingleAntenna == 0) { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 0\r\n"); - prPtaInfo->fgSingleAntenna = FALSE; - } else { - //printk(KERN_WARNING DRV_NAME"Set Single Ant = 1\r\n"); - prPtaInfo->fgSingleAntenna = TRUE; - } - ptaFsmRunEventSetConfig(prAdapter, &prPtaInfo->rPtaParam); - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PTA_INFO_T prPtaInfo; - PUINT_32 pu4Pta; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - /* Check for query buffer length */ - if (u4QueryBufferLen != sizeof(UINT_32)) { - DBGLOG(REQ, WARN, ("Invalid length %lu\n", u4QueryBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - prPtaInfo = &prAdapter->rPtaInfo; - pu4Pta = (PUINT_32)pvQueryBuffer; - - if(prPtaInfo->fgEnabled) { - //printk(KERN_WARNING DRV_NAME"PTA = 1\r\n"); - *pu4Pta = 1; - } else { - //printk(KERN_WARNING DRV_NAME"PTA = 0\r\n"); - *pu4Pta = 0; - } - - return WLAN_STATUS_SUCCESS; -} - - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - PUINT_32 pu4PtaCtrl; - UINT_32 u4PtaCtrl; - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(UINT_32); - if (u4SetBufferLen != sizeof(UINT_32)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - if (IS_ARB_IN_RFTEST_STATE(prAdapter)) { - return WLAN_STATUS_SUCCESS; - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail to set BT setting because of ACPI_D3\n")); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - ASSERT(pvSetBuffer); - pu4PtaCtrl = (PUINT_32)pvSetBuffer; - u4PtaCtrl = *pu4PtaCtrl; - - if (u4PtaCtrl == 0) { - //printk(KERN_WARNING DRV_NAME"Set Pta= 0\r\n"); - nicPtaSetFunc(prAdapter, FALSE); - } else { - //printk(KERN_WARNING DRV_NAME"Set Pta= 1\r\n"); - nicPtaSetFunc(prAdapter, TRUE); - } - - return WLAN_STATUS_SUCCESS; -} -#endif - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Tx power profile. -* -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - //P_SET_TXPWR_CTRL_T pTxPwr = (P_SET_TXPWR_CTRL_T)pvSetBuffer; - //UINT_32 i; - WLAN_STATUS rStatus; - - DEBUGFUNC("wlanoidSetTxPower"); - DBGLOG(REQ, LOUD, ("\r\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - -#if 0 - printk("c2GLegacyStaPwrOffset=%d\n", pTxPwr->c2GLegacyStaPwrOffset); - printk("c2GHotspotPwrOffset=%d\n", pTxPwr->c2GHotspotPwrOffset); - printk("c2GP2pPwrOffset=%d\n", pTxPwr->c2GP2pPwrOffset); - printk("c2GBowPwrOffset=%d\n", pTxPwr->c2GBowPwrOffset); - printk("c5GLegacyStaPwrOffset=%d\n", pTxPwr->c5GLegacyStaPwrOffset); - printk("c5GHotspotPwrOffset=%d\n", pTxPwr->c5GHotspotPwrOffset); - printk("c5GP2pPwrOffset=%d\n", pTxPwr->c5GP2pPwrOffset); - printk("c5GBowPwrOffset=%d\n", pTxPwr->c5GBowPwrOffset); - printk("ucConcurrencePolicy=%d\n", pTxPwr->ucConcurrencePolicy); - - for (i=0; i<14;i++) - printk("acTxPwrLimit2G[%d]=%d\n", i, pTxPwr->acTxPwrLimit2G[i]); - - for (i=0; i<4;i++) - printk("acTxPwrLimit5G[%d]=%d\n", i, pTxPwr->acTxPwrLimit5G[i]); -#endif - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_TXPWR_CTRL, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - TRUE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - u4SetBufferLen, /* u4SetQueryInfoLen */ - (PUINT_8) pvSetBuffer, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return rStatus; - -} - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_CMD_DUMP_MEM prCmdDumpMem; - CMD_DUMP_MEM rCmdDumpMem; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4MemSize = PARAM_MEM_DUMP_MAX_SIZE; - - UINT_32 u4RemainLeng = 0; - UINT_32 u4CurAddr = 0; - UINT_8 ucFragNum = 0; - - prCmdDumpMem = &rCmdDumpMem; - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - - u4RemainLeng = prMemDumpInfo->u4RemainLength; - u4CurAddr = prMemDumpInfo->u4Address + prMemDumpInfo->u4Length; - ucFragNum = prMemDumpInfo->ucFragNum + 1; - - /* Query. If request length is larger than max length, do it as ping pong. - * Send a command and wait for a event. Send next command while the event is received. - * - */ - do{ - UINT_32 u4CurLeng = 0; - - if(u4RemainLeng > u4MemSize) { - u4CurLeng = u4MemSize; - u4RemainLeng -= u4MemSize; - } else { - u4CurLeng = u4RemainLeng; - u4RemainLeng = 0; - } - - prCmdDumpMem->u4Address = u4CurAddr; - prCmdDumpMem->u4Length = u4CurLeng; - prCmdDumpMem->u4RemainLength = u4RemainLeng; - prCmdDumpMem->ucFragNum = ucFragNum; - - DBGLOG(REQ, TRACE, ("[%d] 0x%X, len %d, remain len %d\n", - ucFragNum, - prCmdDumpMem->u4Address, - prCmdDumpMem->u4Length, - prCmdDumpMem->u4RemainLength)); - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_DUMP_MEM, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryMemDump, - nicOidCmdTimeoutCommon, - sizeof(CMD_DUMP_MEM), - (PUINT_8)prCmdDumpMem, - pvQueryBuffer, - u4QueryBufferLen - ); - - }while(FALSE); - - return rStatus; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to dump memory. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - - DEBUGFUNC("wlanoidQueryMemDump"); - DBGLOG(INIT, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_32); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T)pvQueryBuffer; - DBGLOG(REQ, TRACE, ("Dump 0x%X, len %d\n", prMemDumpInfo->u4Address, prMemDumpInfo->u4Length)); - - prMemDumpInfo->u4RemainLength = prMemDumpInfo->u4Length; - prMemDumpInfo->u4Length = 0; - prMemDumpInfo->ucFragNum = 0; - - return wlanSendMemDumpCmd( - prAdapter, - pvQueryBuffer, - u4QueryBufferLen); - -} /* end of wlanoidQueryMcrRead() */ - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the p2p mode. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - P_PARAM_CUSTOM_P2P_SET_STRUC_T prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T)NULL; - //P_MSG_P2P_NETDEV_REGISTER_T prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - DEBUGFUNC("wlanoidSetP2pMode"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T); - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - - prSetP2P = (P_PARAM_CUSTOM_P2P_SET_STRUC_T) pvSetBuffer; - - DBGLOG(P2P, INFO, ("Set P2P enable[%ld] mode[%ld]\n", prSetP2P->u4Enable, prSetP2P->u4Mode)); - - /* - * enable = 1, mode = 0 => init P2P network - * enable = 1, mode = 1 => init Soft AP network - * enable = 0 => uninit P2P/AP network - */ - - if (prSetP2P->u4Enable) { - p2pSetMode((prSetP2P->u4Mode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - - -#if 0 - prP2pNetdevRegMsg = (P_MSG_P2P_NETDEV_REGISTER_T)cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_NETDEV_REGISTER_T))); - - if (prP2pNetdevRegMsg == NULL) { - ASSERT(FALSE); - status = WLAN_STATUS_RESOURCES; - return status; - } - - - prP2pNetdevRegMsg->rMsgHdr.eMsgId = MID_MNY_P2P_NET_DEV_REGISTER; - prP2pNetdevRegMsg->fgIsEnable = (prSetP2P->u4Enable == 1)?TRUE:FALSE; - prP2pNetdevRegMsg->ucMode = (UINT_8)prSetP2P->u4Mode; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pNetdevRegMsg, - MSG_SEND_METHOD_BUF); -#endif - - return status; - -} -#endif - - -#if CFG_SUPPORT_BUILD_DATE_CODE -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query build date code information from firmware -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryBuildDateCode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - CMD_GET_BUILD_DATE_CODE rCmdGetBuildDateCode; - - DEBUGFUNC("wlanoidQueryBuildDateCode"); - DBGLOG(REQ, LOUD,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(UINT_8) * 16; - - if (u4QueryBufferLen < sizeof(UINT_8) * 16) { - return WLAN_STATUS_INVALID_LENGTH; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_BUILD_DATE_CODE, - FALSE, - TRUE, - TRUE, - nicCmdEventBuildDateCode, - nicOidCmdTimeoutCommon, - sizeof(CMD_GET_BUILD_DATE_CODE), - (PUINT_8)&rCmdGetBuildDateCode, - pvQueryBuffer, - u4QueryBufferLen - ); - -} /* end of wlanoidQueryBuildDateCode() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_p2p.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_p2p.c deleted file mode 100755 index 77e6fcfec5ad..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/common/wlan_p2p.c +++ /dev/null @@ -1,1851 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/common/wlan_p2p.c#8 $ -*/ - -/*! \file wlan_bow.c - \brief This file contains the Wi-Fi Direct commands processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/****************************************************************************** -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************* -*/ - -/****************************************************************************** -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************* -*/ - -/* -** $Log: wlan_p2p.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 23 2011 yuche.tsai - * NULL - * Fix Multicast Issue of P2P. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 wh.su - * [WCXRP00000571] [MT6620 Wi-Fi] [Driver] Not check the p2p role during set key - * Skip the p2p role for adding broadcast key issue. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * fixed compiling error while enable dbg. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix SD Request Query Length issue. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Service Discovery Request. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Wlan OID related function. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * . - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * -** -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ - -/****************************************************************************** -* E X T E R N A L R E F E R E N C E S -******************************************************************************* -*/ -#include "precomp.h" - -/****************************************************************************** -* C O N S T A N T S -******************************************************************************* -*/ - -/****************************************************************************** -* D A T A T Y P E S -******************************************************************************* -*/ - -/****************************************************************************** -* P U B L I C D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* P R I V A T E D A T A -******************************************************************************* -*/ - -/****************************************************************************** -* M A C R O S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************* -*/ - -/****************************************************************************** -* F U N C T I O N S -******************************************************************************* -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief command packet generation utility -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucCID Command ID -* \param[in] fgSetQuery Set or Query -* \param[in] fgNeedResp Need for response -* \param[in] pfCmdDoneHandler Function pointer when command is done -* \param[in] u4SetQueryInfoLen The length of the set/query buffer -* \param[in] pucInfoBuffer Pointer to set/query buffer -* -* -* \retval WLAN_STATUS_PENDING -* \retval WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ) -{ - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - DEBUGFUNC("wlanoidSendSetQueryP2PCmd"); - DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); - - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); - - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = NETWORK_TYPE_P2P_INDEX; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u4SetQueryInfoLen); - prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; - prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; - prCmdInfo->fgIsOid = fgIsOid; - prCmdInfo->ucCID = ucCID; - prCmdInfo->fgSetQuery = fgSetQuery; - prCmdInfo->fgNeedResp = fgNeedResp; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; - prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; - prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - if(u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { - kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set a key to Wi-Fi Direct driver -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_KEY_T prNewKey; - - DEBUGFUNC("wlanoidSetAddP2PKey"); - DBGLOG(REQ, INFO, ("\n")); - - ASSERT(prAdapter); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - prNewKey = (P_PARAM_KEY_T) pvSetBuffer; - - /* Verify the key structure length. */ - if (prNewKey->u4Length > u4SetBufferLen) { - DBGLOG(REQ, WARN, ("Invalid key structure length (%d) greater than total buffer length (%d)\n", - (UINT_8)prNewKey->u4Length, - (UINT_8)u4SetBufferLen)); - - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_LENGTH; - } - /* Verify the key material length for key material buffer */ - else if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) { - DBGLOG(REQ, WARN, ("Invalid key material length (%d)\n", (UINT_8)prNewKey->u4KeyLength)); - *pu4SetInfoLen = u4SetBufferLen; - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check */ - else if (prNewKey->u4KeyIndex & 0x0fffff00) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == IS_UNICAST_KEY) { - return WLAN_STATUS_INVALID_DATA; - } - else if (!(prNewKey->u4KeyLength == CCMP_KEY_LEN) && !(prNewKey->u4KeyLength == TKIP_KEY_LEN)) { - return WLAN_STATUS_INVALID_DATA; - } - /* Exception check, pairwise key must with transmit bit enabled */ - else if ((prNewKey->u4KeyIndex & BITS(30,31)) == BITS(30,31)) { - if (((prNewKey->u4KeyIndex & 0xff) != 0) || - ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff) && - (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff) && (prNewKey->arBSSID[5] == 0xff))) { - return WLAN_STATUS_INVALID_DATA; - } - } - - *pu4SetInfoLen = u4SetBufferLen; - - // fill CMD_802_11_KEY - kalMemZero(&rCmdKey, sizeof(CMD_802_11_KEY)); - rCmdKey.ucAddRemove = 1; /* add */ - rCmdKey.ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0; - rCmdKey.ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0; - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prNewKey->arBSSID); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - if(prNewKey->u4KeyLength == CCMP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; // AES - else if(prNewKey->u4KeyLength == TKIP_KEY_LEN) - rCmdKey.ucAlgorithmId = CIPHER_SUITE_TKIP; // TKIP - rCmdKey.ucKeyId = (UINT_8)(prNewKey->u4KeyIndex & 0xff); - rCmdKey.ucKeyLen = (UINT_8)prNewKey->u4KeyLength; - kalMemCopy(rCmdKey.aucKeyMaterial, (PUINT_8)prNewKey->aucKeyMaterial, rCmdKey.ucKeyLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to request Wi-Fi Direct driver to remove keys -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_802_11_KEY rCmdKey; - P_PARAM_REMOVE_KEY_T prRemovedKey; - - DEBUGFUNC("wlanoidSetRemoveP2PKey"); - ASSERT(prAdapter); - - if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - prRemovedKey = (P_PARAM_REMOVE_KEY_T)pvSetBuffer; - - /* Check bit 31: this bit should always 0 */ - if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* Check bits 8 ~ 29 should always be 0 */ - if (prRemovedKey->u4KeyIndex & BITS(8, 29)) { - /* Bit 31 should not be set */ - DBGLOG(REQ, ERROR, ("invalid key index: 0x%08lx\n", - prRemovedKey->u4KeyIndex)); - return WLAN_STATUS_INVALID_DATA; - } - - /* There should not be any key operation for P2P Device */ - if(kalP2PGetRole(prAdapter->prGlueInfo) == 0) { - // return WLAN_STATUS_NOT_ACCEPTED; - } - - kalMemZero((PUINT_8)&rCmdKey, sizeof(CMD_802_11_KEY)); - - rCmdKey.ucAddRemove = 0; // remove - if(kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */ - rCmdKey.ucIsAuthenticator = 0; - } - else { /* group owner */ - rCmdKey.ucIsAuthenticator = 1; - } - kalMemCopy(rCmdKey.aucPeerAddr, (PUINT_8)prRemovedKey->arBSSID, MAC_ADDR_LEN); - rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX; - rCmdKey.ucKeyId = (UINT_8)(prRemovedKey->u4KeyIndex & 0x000000ff); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_ADD_REMOVE_KEY, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - NULL, - sizeof(CMD_802_11_KEY), - (PUINT_8)&rCmdKey, - pvSetBuffer, - u4SetBufferLen - ); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setting the IP address for pattern search function. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -* \return WLAN_STATUS_ADAPTER_NOT_READY -* \return WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - - DEBUGFUNC("wlanoidSetP2pNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to query the power save profile. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuf A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen!=0) { - ASSERT(pvQueryBuffer); - - *(PPARAM_POWER_MODE) pvQueryBuffer = (PARAM_POWER_MODE)(prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile); - *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS status; - PARAM_POWER_MODE ePowerMode; - DEBUGFUNC("wlanoidSetP2pPowerSaveProfile"); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_POWER_MODE); - if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) { - DBGLOG(REQ, WARN, ("Invalid length %ld\n", u4SetBufferLen)); - return WLAN_STATUS_INVALID_LENGTH; - } - else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) { - WARNLOG(("Invalid power mode %d\n", - *(PPARAM_POWER_MODE) pvSetBuffer)); - return WLAN_STATUS_INVALID_DATA; - } - - ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer; - - if (prAdapter->fgEnCtiaPowerMode) { - if (ePowerMode == Param_PowerModeCAM) { - - } else { - // User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) - - if (prAdapter->u4CtiaPowerMode == 0) { - // force to keep in CAM mode - ePowerMode = Param_PowerModeCAM; - } else if (prAdapter->u4CtiaPowerMode == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (prAdapter->u4CtiaPowerMode == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - } - } - - status = nicConfigPowerSaveProfile( - prAdapter, - NETWORK_TYPE_P2P_INDEX, - ePowerMode, - TRUE); - return status; -} /* end of wlanoidSetP2pPowerSaveProfile() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set the power save profile. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 i, j; - P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList; - P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST)pvSetBuffer; - P_PARAM_NETWORK_ADDRESS prNetworkAddress; - P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp; - UINT_32 u4IpAddressCount, u4CmdSize; - PUINT_8 pucBuf = (PUINT_8)pvSetBuffer; - - DEBUGFUNC("wlanoidSetP2pSetNetworkAddress"); - DBGLOG(INIT, TRACE, ("\n")); - printk("wlanoidSetP2pSetNetworkAddress (%d)\n", (INT_16)u4SetBufferLen); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = 4; - - if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST)) { - return WLAN_STATUS_INVALID_DATA; - } - - *pu4SetInfoLen = 0; - u4IpAddressCount = 0; - - prNetworkAddress = prNetworkAddressList->arAddress; - for ( i = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - u4IpAddressCount++; - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - // construct payload of command packet - u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) + - sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount; - - if (u4IpAddressCount == 0) { - u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST); - } - - prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE); - - if(prCmdNetworkAddressList == NULL) - return WLAN_STATUS_FAILURE; - - // fill P_CMD_SET_NETWORK_ADDRESS_LIST - prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* only to set IP address to FW once ARP filter is enabled */ - if (prAdapter->fgEnArpFilter) { - prCmdNetworkAddressList->ucAddressCount = (UINT_8)u4IpAddressCount; - prNetworkAddress = prNetworkAddressList->arAddress; - - printk("u4IpAddressCount (%ld) \n", (INT_32)u4IpAddressCount); - for (i = 0, j = 0 ; i < prNetworkAddressList->u4AddressCount ; i++) { - if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP && - prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) { - prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP)prNetworkAddress->aucAddress; - - kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr, - &(prNetAddrIp->in_addr), - sizeof(UINT_32)); - - j++; - - pucBuf = (PUINT_8)&prNetAddrIp->in_addr; - printk("prNetAddrIp->in_addr:%d:%d:%d:%d\n", (UINT_8)pucBuf[0], (UINT_8)pucBuf[1], (UINT_8)pucBuf[2], (UINT_8)pucBuf[3]); - } - - prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prNetworkAddress + - (UINT_32) (prNetworkAddress->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - } - - } else { - prCmdNetworkAddressList->ucAddressCount = 0; - } - - rStatus = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_IP_ADDRESS, - TRUE, - FALSE, - TRUE, - nicCmdEventSetIpAddress, - nicOidCmdTimeoutCommon, - u4CmdSize, - (PUINT_8)prCmdNetworkAddressList, - pvSetBuffer, - u4SetBufferLen - ); - - kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize); - return rStatus; -} /* end of wlanoidSetP2pSetNetworkAddress() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Multicast Address List. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - CMD_MAC_MCAST_ADDR rCmdMacMcastAddr; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - /* The data must be a multiple of the Ethernet address size. */ - if ((u4SetBufferLen % MAC_ADDR_LEN)) { - DBGLOG(REQ, WARN, ("Invalid MC list length %ld\n", u4SetBufferLen)); - - *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / - MAC_ADDR_LEN) * MAC_ADDR_LEN; - - return WLAN_STATUS_INVALID_LENGTH; - } - - *pu4SetInfoLen = u4SetBufferLen; - - /* Verify if we can support so many multicast addresses. */ - if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) { - DBGLOG(REQ, WARN, ("Too many MC addresses\n")); - - return WLAN_STATUS_MULTICAST_FULL; - } - - /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 && - * pvSetBuffer == NULL to clear exist Multicast List. - */ - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN; - rCmdMacMcastAddr.ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen); - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_MAC_MCAST_ADDR, - TRUE, - FALSE, - FALSE, // This CMD response is no need to complete the OID. Or the event would unsync. - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_MAC_MCAST_ADDR), - (PUINT_8)&rCmdMacMcastAddr, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetP2PMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_REQUEST)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDRequest(prAdapter, (P_PARAM_P2P_SEND_SD_REQUEST)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidSendP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to send GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_RESPONSE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - -// rWlanStatus = p2pFsmRunEventSDResponse(prAdapter, (P_PARAM_P2P_SEND_SD_RESPONSE)pvSetBuffer); - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Request -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - PUINT_8 pucPacketBuffer = NULL, pucTA = NULL; -// PUINT_8 pucChannelNum = NULL; - PUINT_16 pu2PacketLength = NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - UINT_8 ucVersionNum = 0; -// UINT_8 ucChannelNum = 0, ucSeqNum = 0; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_REQUEST)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_REQUEST); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Request\n")); -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_REQUEST prP2pGetSdReq = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - - pucPacketBuffer = prP2pGetSdReq->aucPacketContent; - pu2PacketLength = &prP2pGetSdReq->u2PacketLength; - pucTA = &prP2pGetSdReq->rTransmitterAddr; - } - else { - P_PARAM_P2P_GET_SD_REQUEST_EX prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST_EX)NULL; - - prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketBuffer = prP2pGetSdReqEx->aucPacketContent; - pu2PacketLength = &prP2pGetSdReqEx->u2PacketLength; - pucTA = &prP2pGetSdReqEx->rTransmitterAddr; - pucChannelNum = &prP2pGetSdReqEx->ucChannelNum; - ucSeqNum = prP2pGetSdReqEx->ucSeqNum; - } - - - rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, - pucPacketBuffer, - (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_REQUEST)), - (PUINT_32)pu2PacketLength, - pucChannelNum, - ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketBuffer; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST) + (*pu2PacketLength)); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_REQUEST_EX) + (*pu2PacketLength)); - } - - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to get GAS frame for P2P Service Discovery Response -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - //UINT_8 ucSeqNum = 0, - UINT_8 ucVersionNum = 0; - PUINT_8 pucPacketContent = (PUINT_8)NULL, pucTA = (PUINT_8)NULL; - PUINT_16 pu2PacketLength = (PUINT_16)NULL; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_RESPONSE)) { - *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_RESPONSE); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - DBGLOG(P2P, TRACE, ("Get Service Discovery Response\n")); - -#if 0 - if ((ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter)) == 0) { - P_PARAM_P2P_GET_SD_RESPONSE prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_RESPONSE)NULL; - - prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_REQUEST)pvQueryBuffer; - pucPacketContent = prP2pGetSdRsp->aucPacketContent; - pucTA = &prP2pGetSdRsp->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRsp->u2PacketLength; - } - else { - P_PARAM_P2P_GET_SD_RESPONSE_EX prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)NULL; - - prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX)pvQueryBuffer; - pucPacketContent = prP2pGetSdRspEx->aucPacketContent; - pucTA = &prP2pGetSdRspEx->rTransmitterAddr; - pu2PacketLength = &prP2pGetSdRspEx->u2PacketLength; - ucSeqNum = prP2pGetSdRspEx->ucSeqNum; - } - - -// rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, -// pucPacketContent, -// (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_RESPONSE)), -// (PUINT_32)pu2PacketLength, -// NULL, -// ucSeqNum); -#else - *pu4QueryInfoLen = 0; - return rWlanStatus; -#endif - prWlanHdr = (P_WLAN_MAC_HEADER_T)pucPacketContent; - - kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN); - - - if (pu4QueryInfoLen) { - if (ucVersionNum == 0) { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE) + *pu2PacketLength); - } - else { - *pu4QueryInfoLen = (UINT_32)(sizeof(PARAM_P2P_GET_SD_RESPONSE_EX) + *pu2PacketLength); - } - } - - return rWlanStatus; -} /* end of wlanoidGetP2PSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to terminate P2P Service Discovery Phase -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_PARAM_P2P_TERMINATE_SD_PHASE prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)NULL; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - break; - } - - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - break; - } - - if (u4SetBufferLen < sizeof(PARAM_P2P_TERMINATE_SD_PHASE)) { - *pu4SetInfoLen = sizeof(PARAM_P2P_TERMINATE_SD_PHASE); - rWlanStatus = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE)pvSetBuffer; - - if (EQUAL_MAC_ADDR(prP2pTerminateSD->rPeerAddr, aucNullAddr)) { - DBGLOG(P2P, TRACE, ("Service Discovery Version 2.0\n")); -// p2pFuncSetVersionNumOfSD(prAdapter, 2); - } - - //rWlanStatus = p2pFsmRunEventSDAbort(prAdapter); - - } while (FALSE); - - - - - - return rWlanStatus; -} /* end of wlanoidSetP2PTerminateSDPhase() */ - - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - if (u4SetBufferLen) { - ASSERT(pvSetBuffer); - } - - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SEC_CHECK, - FALSE, - TRUE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - u4SetBufferLen, - (PUINT_8)pvSetBuffer, - pvSetBuffer, - u4SetBufferLen - ); - -} /* end of wlanoidSetSecCheckRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[out] pvQueryBuffer A pointer to the buffer that holds the result of -* the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_ADAPTER_NOT_READY -* \retval WLAN_STATUS_MULTICAST_FULL -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - //P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = prAdapter->prGlueInfo; - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - if (u4QueryBufferLen > 256) { - u4QueryBufferLen = 256; - } - - *pu4QueryInfoLen = u4QueryBufferLen; - - #if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - #endif - kalMemCopy((PUINT_8)(pvQueryBuffer + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer)), prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen); - - return rWlanStatus; -} /* end of wlanoidGetSecCheckResponse() */ -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam; - CMD_CUSTOM_NOA_PARAM_STRUC_T rCmdNoaParam; - - DEBUGFUNC("wlanoidSetNoaParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T)); - rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs; - rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs; - rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_NOA_PARAM_STRUC_T), - (PUINT_8)&rCmdNoaParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam; - CMD_CUSTOM_OPPPS_PARAM_STRUC_T rCmdOppPsParam; - - DEBUGFUNC("wlanoidSetOppPsParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_OPPPS_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); -#else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_NOA_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdOppPsParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif - -} - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T prUapsdParam; - CMD_CUSTOM_UAPSD_PARAM_STRUC_T rCmdUapsdParam; - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - - - DEBUGFUNC("wlanoidSetUApsdParam"); - DBGLOG(INIT, TRACE,("\n")); - - ASSERT(prAdapter); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T); - - if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvSetBuffer); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T)pvSetBuffer; - - kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T)); - rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD; - prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD; - - rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe; - rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk; - rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo; - rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi; - prPmProfSetupInfo->ucBmpDeliveryAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - prPmProfSetupInfo->ucBmpTriggerAC = - ((prUapsdParam->fgEnAPSD_AcBe << 0) | - (prUapsdParam->fgEnAPSD_AcBk << 1) | - (prUapsdParam->fgEnAPSD_AcVi << 2) | - (prUapsdParam->fgEnAPSD_AcVo << 3)); - - rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen; - prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen; - -#if 0 - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - #else - return wlanoidSendSetQueryP2PCmd(prAdapter, - CMD_ID_SET_UAPSD_PARAM, - TRUE, - FALSE, - TRUE, - NULL, - nicOidCmdTimeoutCommon, - sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUC_T), - (PUINT_8)&rCmdUapsdParam, - pvSetBuffer, - u4SetBufferLen - ); - -#endif -} - - - -WLAN_STATUS -wlanoidQueryP2pOpChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucOpChnl = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - -#if 0 - if (!p2pFuncGetCurrentOpChnl(prAdapter, pucOpChnl)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } -#else - rResult = WLAN_STATUS_INVALID_DATA; - break; -#endif - - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_SUCCESS; - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pOpChannel */ - -WLAN_STATUS -wlanoidQueryP2pVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; -// PUINT_8 pucVersionNum = (PUINT_8)pvQueryBuffer; - - do { - if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL)) { - break; - } - - - if ((u4QueryBufferLen) && (pvQueryBuffer == NULL)) { - break; - } - - if (u4QueryBufferLen < sizeof(UINT_8)) { - *pu4QueryInfoLen = sizeof(UINT_8); - rResult = WLAN_STATUS_BUFFER_TOO_SHORT; - break; - } - - } while (FALSE); - - return rResult; -} /* wlanoidQueryP2pVersion */ - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rResult = WLAN_STATUS_FAILURE; - UINT_8 ucVersionNum; - - do { - if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) { - - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - if ((u4SetBufferLen) && (pvSetBuffer == NULL)) { - rResult = WLAN_STATUS_INVALID_DATA; - break; - } - - *pu4SetInfoLen = sizeof(UINT_8); - - if (u4SetBufferLen < sizeof(UINT_8)) { - rResult = WLAN_STATUS_INVALID_LENGTH; - break; - } - - - ucVersionNum = *((PUINT_8)pvSetBuffer); - - - rResult = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rResult; -} /* wlanoidSetP2pSupplicantVersion */ - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - DEBUGFUNC("wlanoidQueryP2pRssi"); - - ASSERT(prAdapter); - ASSERT(pu4QueryInfoLen); - if (u4QueryBufferLen) { - ASSERT(pvQueryBuffer); - } - - *pu4QueryInfoLen = sizeof(PARAM_RSSI); - - /* Check for query buffer length */ - if (u4QueryBufferLen < *pu4QueryInfoLen) { - DBGLOG(REQ, WARN, ("Too short length %ld\n", u4QueryBufferLen)); - return WLAN_STATUS_BUFFER_TOO_SHORT; - } - - if (prAdapter->fgIsP2pLinkQualityValid == TRUE && - (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) { - PARAM_RSSI rRssi; - - rRssi = (PARAM_RSSI)prAdapter->rP2pLinkQuality.cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - - kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI)); - return WLAN_STATUS_SUCCESS; - } - - #ifdef LINUX - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - *pu4QueryInfoLen, - pvQueryBuffer, - pvQueryBuffer, - u4QueryBufferLen - ); - #else - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_GET_LINK_QUALITY, - FALSE, - TRUE, - TRUE, - nicCmdEventQueryLinkQuality, - nicOidCmdTimeoutCommon, - 0, - NULL, - pvQueryBuffer, - u4QueryBufferLen - ); - - #endif -} /* wlanoidQueryP2pRssi */ -#endif - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/dirs b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/dirs deleted file mode 100755 index b023688b8146..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/dirs +++ /dev/null @@ -1,6 +0,0 @@ -OPTIONAL_DIRS= \ - common \ - os \ - nic \ - mgmt - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/CFG_Wifi_File.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/CFG_Wifi_File.h deleted file mode 100755 index fd73c8973134..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/CFG_Wifi_File.h +++ /dev/null @@ -1,291 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/CFG_Wifi_File.h#1 $ -*/ - -/*! \file CFG_Wifi_File.h - \brief Collection of NVRAM structure used for YuSu project - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: CFG_Wifi_File.h $ - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * update NVRAM data structure definition. - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * -*/ - -#ifndef _CFG_WIFI_FILE_H -#define _CFG_WIFI_FILE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -// duplicated from nic_cmd_event.h to avoid header dependency -typedef struct _TX_PWR_PARAM_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} TX_PWR_PARAM_T, *P_TX_PWR_PARAM_T; - -typedef struct _PWR_5G_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} PWR_5G_OFFSET_T, *P_PWR_5G_OFFSET_T; - -typedef struct _PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} PWR_PARAM_T, *P_PWR_PARAM_T; - -typedef struct _MT6620_CFG_PARAM_STRUCT { - /* 256 bytes of MP data */ - UINT_16 u2Part1OwnVersion; - UINT_16 u2Part1PeerVersion; - UINT_8 aucMacAddress[6]; - UINT_8 aucCountryCode[2]; - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - - UINT_8 ucRegChannelListMap; - UINT_8 ucRegChannelListIndex; - UINT_8 aucRegSubbandInfo[36]; - - UINT_8 aucReserved2[256-240]; - - /* 256 bytes of function data */ - UINT_16 u2Part2OwnVersion; - UINT_16 u2Part2PeerVersion; - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - UINT_8 aucPreTailReserved; - UINT_8 aucTailReserved[256-8]; -} MT6620_CFG_PARAM_STRUCT, *P_MT6620_CFG_PARAM_STRUCT, - WIFI_CFG_PARAM_STRUCT, *P_WIFI_CFG_PARAM_STRUCT; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -#define CFG_FILE_WIFI_REC_SIZE sizeof(WIFI_CFG_PARAM_STRUCT) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -nvramOffsetCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion) == 256); - - DATA_STRUC_INSPECTING_ASSERT( - sizeof(WIFI_CFG_PARAM_STRUCT) == 512); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) & 0x0001) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - (OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) & 0x0001) == 0); -} -#endif - -#endif /* _CFG_WIFI_FILE_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/config.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/config.h deleted file mode 100755 index ea3c308dda78..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/config.h +++ /dev/null @@ -1,1567 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/config.h#2 $ -*/ - -/*! \file "config.h" - \brief This file includes the various configurable parameters for customers - - This file ncludes the configurable parameters except the paramters indicate the turning-on/off of some features -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: config.h $ - * - * 07 13 2012 cp.wu - * [WCXRP00001259] [MT6620 Wi-Fi][Driver][Firmware] Send a signal to firmware for termination after SDIO error has happened - * [driver domain] add force reset by host-to-device interrupt mechanism - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 05 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined".. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 10 28 2011 cp.wu - * [MT6620 Wi-Fi][Win32 Driver] Enable 5GHz support as default - * enable 5GHz as default for DaVinci trunk and V2.1 driver release . - * - * 10 18 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * surpress compiler warning for MT6628 build - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * enable divided firmware downloading. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 08 09 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS definition for MT6620. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 24 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * increase RX buffer number to have a 2:1 ping-pong ratio - * - * 06 23 2011 eddie.chen - * [WCXRP00000810] [MT5931][DRV/FW] Adjust TxRx Buffer number and Rx buffer size - * 1. Different TX RX buffer - * 2. Enlarge RX buffer and increase the number 8->11 - * 3. Seperate the WINSZIE and RX buffer number - * 4. Fix RX maximum size in MAC - * - * 06 20 2011 terry.wu - * NULL - * Add BoW Rate Limitation. - * - * 06 17 2011 terry.wu - * NULL - * . - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add compile flag for persistent group support. - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * Enable RX STBC capability - * - * 04 11 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * . - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. correction: RX aggregation is not limited to SDIO but for all host interface options - * 2. add forward declarations for DBG-only symbols - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * enable roaming feature. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 01 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Fix compile issue - * - * 02 25 2011 george.huang - * [WCXRP00000497] [MT6620 Wi-Fi][FW] Change default UAPSD AC assignment - * Assign all AC default to be U-APSD enabled. - * - * 02 14 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * Let the privacy check at hotspot mode default enable. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 02 01 2011 yarco.yang - * [WCXRP00000417] [MT6620 Driver] Chnage CFG_HANDLE_IST_IN_SDIO_CALLBACK from 1 to 0 for Interoperability - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 19 2011 wh.su - * [WCXRP00000370] [MT6620 Wi-Fi][Driver] Disable Rx RDG for workaround pre-N ccmp issue - * Not announce support Rx RDG for wokaround pre-N ccmp construct AAD issue.. - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW only for Linux. - * - * 01 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Enable BOW and 4 physical links. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Modify CFG_SLT_SUPPORT default value. - * - * 01 08 2011 yuche.tsai - * [WCXRP00000341] [MT6620][SLT] Create Branch for SLT SW. - * Update configure flag. - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 11 23 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Enable PM function by default - * - * 11 15 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use config.mk WAPI config define. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * use the config.mk define. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add option for enable/disable TX PWR gain adjustment (default: off) - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * enable the WAPI compiling flag as default - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * Add a define CFG_TEST_ANDROID_DIRECT_GO compiling flag - * - * 10 08 2010 cm.chang - * NULL - * Remove unused compiling flags (TX_RDG and TX_SGI) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 05 2010 yarco.yang - * [WCXRP00000082] [MT6620 Wi-Fi][Driver]High throughput performance tuning - * Change CFG_IST_LOOP_COUNT from 2 to 1 to reduce unnecessary SDIO bus access - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 20 2010 cm.chang - * NULL - * Disable RX STBC by BB HEC based on MT6620E1_PHY_BUG v05.docx - * - * 09 17 2010 chinglan.wang - * NULL - * Add performance test option - * - * 09 10 2010 chinglan.wang - * NULL - * Modify for Software Migration Phase 2.10 for E2 FPGA - * - * 09 07 2010 yuche.tsai - * NULL - * Add a CFG for max common IE buffer size. - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 chinglan.wang - * NULL - * Enable the MT6620_FPGA_BWCS value. - * - * 08 30 2010 chinglan.wang - * NULL - * Disable the FW encryption. - * - * 08 27 2010 chinglan.wang - * NULL - * Update configuration for MT6620_E1_PRE_ALPHA_1832_0827_2010 - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cp.wu - * NULL - * 1) initialize variable for enabling short premable/short time slot. - * 2) add compile option for disabling online scan - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Disable BOW Test. - * - * 08 23 2010 jeffrey.chang - * NULL - * fix config.h typo - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 09 2010 wh.su - * NULL - * let the firmware download default enabled. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Add a configure flag for P2P unitest. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 yuche.tsai - * - * Add for SLT support. - * - * 07 16 2010 cp.wu - * - * remove work-around in case SCN is not available. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add SCN compilation option. - * 2) when SCN is not turned on, BSSID_SCAN will generate a fake entry for 1st connection - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * set default compiling flag for security disable. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add config option for cfg80211. - * - * 05 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set ATIMwindow default value to zero. - * - * 05 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add option for FPGA_BWCS & FPGA_V5 - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) enable CMD/EVENT ver 0.9 definition. - * 2) abandon use of ENUM_MEDIA_STATE - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change firmware name to WIFI_RAM_CODE. - * - * 05 07 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * disable bt-over-wifi configuration, turn it on after firmware finished implementation - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * re-enable power management - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable TCP/IP checksum offloading by default. - * - * 04 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * set CFG_ENABLE_FULL_PM to 1 as default to - * 1) acquire own before hardware access - * 2) set own back after hardware access - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 07 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * disable RX-enhanced response temporally, it seems the CQ is not resolved yet. - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * re-enable RX enhanced mode as WPD00003827 is resolved. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn off RX_ENHANCE mode by default. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) eliminate unused definitions - * * 2) ready bit will be polled for limited iteration - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * firmware download: Linux uses different firmware path - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * due to the different configurations on FPGA and ASIC - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add options for full PM support. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * turn on FW-DOWNLOAD as default for release. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 05 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * change CFG_NUM_OF_QM_RX_PKT_NUM to 120 - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * . - * - * 03 04 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * increase RX buffer number to avoid RX buffer starvation. - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed the number of STA_RECs to 20 - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * and result is retrieved by get ATInfo instead - * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-16 22:12:28 GMT mtk02752 -** enable interrupt enhanced response, TX/RX Aggregation as default -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:38:43 GMT mtk02752 -** eliminate compile options which are obsolete or for emulation purpose -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 13:56:26 GMT MTK02468 -** Added RX buffer reordering configurations -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-12-04 12:09:09 GMT mtk02752 -** once enhanced intr/rx reponse is taken, RX must be access in aggregated basis -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 17:54:50 GMT mtk02752 -** correct a typo -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:47 GMT mtk01084 -** add defines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:33:37 GMT mtk02752 -** add coalescing buffer definition for SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 20:32:40 GMT mtk02752 -** add CFG_TX_MAX_PKT_NUM for limiting queued TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 13:34:44 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION define for source control -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-13 13:54:11 GMT mtk01084 -** enable INT enhance mode by default -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-30 18:17:14 GMT mtk01084 -** add new define -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-10-29 19:47:36 GMT mtk01084 -** not use HIF loopback mode -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-10-13 21:58:33 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-09-09 17:26:08 GMT mtk01084 -** add CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:02:30 GMT mtk01426 -** Update CFG_RX_COALESCING_BUFFER_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-21 09:35:51 GMT mtk01461 -** Add CFG_TX_DBG_MGT_BUF to debug MGMT Buffer depth -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:52:21 GMT mtk01426 -** Add OOB_DATA_PRE_FIXED_LEN define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-08 16:51:08 GMT mtk01084 -** update for FW download part -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:33:37 GMT mtk01461 -** Add SW pre test flag CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 00:29:18 GMT mtk01461 -** Fix CFG_COALESCING_BUFFER_SIZE if enable the CFG_TX_FRAGMENT -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-18 20:58:34 GMT mtk01426 -** Add CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-17 20:17:36 GMT mtk01426 -** Add CMD/Response related configure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:21 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:21 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _CONFIG_H -#define _CONFIG_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#undef MT6620 -#undef MT6628 - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//2 Flags for OS capability - -#ifdef LINUX - #ifdef CONFIG_X86 - #define MTK_WCN_HIF_SDIO 0 - #else - #define MTK_WCN_HIF_SDIO 0 - #endif -#else - #define MTK_WCN_HIF_SDIO 0 -#endif - -#if (CFG_SUPPORT_AEE == 1) - #define CFG_ENABLE_AEE_MSG 1 -#else - #define CFG_ENABLE_AEE_MSG 0 -#endif - -//2 Flags for Driver Features -#define CFG_TX_FRAGMENT 1 /*!< 1: Enable TX fragmentation - 0: Disable */ -#define CFG_SUPPORT_PERFORMANCE_TEST 0 /*Only for performance Test*/ - -#define CFG_COUNTRY_CODE NULL //"US" - -#ifndef LINUX - #define CFG_FW_FILENAME L"WIFI_RAM_CODE_MT5931" - #define CFG_FW_FILENAME_E6 L"WIFI_RAM_CODE_MT5931_E6" -#else - #define CFG_FW_FILENAME "WIFI_RAM_CODE_MT5931" -#endif - -#define CFG_SUPPORT_802_11D 1 /*!< 1(default): Enable 802.11d - 0: Disable */ - -#define CFG_SUPPORT_SPEC_MGMT 0 /* Spectrum Management (802.11h): TPC and DFS */ -#define CFG_SUPPORT_RRM 0 /* Radio Reasource Measurement (802.11k) */ -#define CFG_SUPPORT_QUIET 0 /* Quiet (802.11h) */ - - -#define CFG_SUPPORT_RX_RDG 0 /* 11n feature. RX RDG capability */ -#define CFG_SUPPORT_MFB 0 /* 802.11n MCS Feedback responder */ -#define CFG_SUPPORT_RX_STBC 1 /* 802.11n RX STBC (1SS) */ -#define CFG_SUPPORT_RX_SGI 1 /* 802.11n RX short GI for both 20M and 40M BW */ -#define CFG_SUPPORT_RX_HT_GF 1 /* 802.11n RX HT green-field capability */ - -/*------------------------------------------------------------------------------ - * SLT Option - *------------------------------------------------------------------------------ - */ -#define CFG_SLT_SUPPORT 0 - -//#define CFG_DUAL_ANTENNA 0 - -#define CFG_SUPPORT_RSSI_SMOOTH 0 - - -#ifdef NDIS60_MINIPORT - #define CFG_NATIVE_802_11 1 - - #define CFG_TX_MAX_PKT_SIZE 2304 - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD 0 - #define CFG_WHQL_DOT11_STATISTICS 1 - #define CFG_WHQL_ADD_REMOVE_KEY 1 - #define CFG_WHQL_CUSTOM_IE 1 - #define CFG_WHQL_SAFE_MODE_ENABLED 1 - -#else - #define CFG_TCP_IP_CHKSUM_OFFLOAD 1 /* !< 1: Enable TCP/IP header checksum offload - 0: Disable */ - #define CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 0 - #define CFG_TX_MAX_PKT_SIZE 1600 - #define CFG_NATIVE_802_11 0 -#endif - - -//2 Flags for Driver Parameters -/*------------------------------------------------------------------------------ - * Flags for EHPI Interface in Colibri Platform - *------------------------------------------------------------------------------ - */ -#define CFG_EHPI_FASTER_BUS_TIMING 0 /*!< 1: Do workaround for faster bus timing - 0(default): Disable */ - -/*------------------------------------------------------------------------------ - * Flags for HIFSYS Interface - *------------------------------------------------------------------------------ - */ -#ifdef _lint - #define _HIF_SDIO 1 -#endif - -#define CFG_SDIO_INTR_ENHANCE 1 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_RX_ENHANCE 0 /*!< 1(default): Enable SDIO ISR & TX/RX status enhance mode - 0: Disable */ -#define CFG_SDIO_TX_AGG 1 /*!< 1: Enable SDIO TX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#define CFG_SDIO_RX_AGG 1 /*!< 1: Enable SDIO RX enhance mode(Multiple frames in single BLOCK CMD) - 0(default): Disable */ - -#if (CFG_SDIO_RX_AGG == 1) && (CFG_SDIO_INTR_ENHANCE == 0) - #error "CFG_SDIO_INTR_ENHANCE should be 1 once CFG_SDIO_RX_AGG equals to 1" -#elif (CFG_SDIO_INTR_ENHANCE == 1 || CFG_SDIO_RX_ENHANCE == 1) && (CFG_SDIO_RX_AGG == 0) - #error "CFG_SDIO_RX_AGG should be 1 once CFG_SDIO_INTR_ENHANCE and/or CFG_SDIO_RX_ENHANCE equals to 1" -#endif - -#define CFG_SDIO_MAX_RX_AGG_NUM 0 /*!< 1: Setting the maximum RX aggregation number - 0(default): no limited */ - -#ifdef WINDOWS_CE - #define CFG_SDIO_PATHRU_MODE 1 /*!< 1: Suport pass through (PATHRU) mode - 0: Disable */ -#else - #define CFG_SDIO_PATHRU_MODE 0 /*!< 0: Always disable if WINDOWS_CE is not defined */ -#endif - -#define CFG_MAX_RX_ENHANCE_LOOP_COUNT 3 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Integration - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) - #define MT6620_FPGA_BWCS 0 - #define MT6620_FPGA_V5 0 - - #if (MT6620_FPGA_BWCS == 1) && (MT6620_FPGA_V5 == 1) - #error - #endif - - #if (MTK_WCN_HIF_SDIO == 1) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #elif !defined(LINUX) - #define CFG_MULTI_ECOVER_SUPPORT 1 - #else - #define CFG_MULTI_ECOVER_SUPPORT 0 - #endif - - #define CFG_ENABLE_CAL_LOG 0 - #define CFG_REPORT_RFBB_VERSION 0 -#elif defined(MT5931) - -#define CFG_MULTI_ECOVER_SUPPORT 0 -#define CFG_ENABLE_CAL_LOG 0 -#define CFG_REPORT_RFBB_VERSION 0 - -#elif defined(MT6628) - -#define CFG_MULTI_ECOVER_SUPPORT 0 - -#define CFG_ENABLE_CAL_LOG 1 -#define CFG_REPORT_RFBB_VERSION 1 - -#endif - -#define CFG_CHIP_RESET_SUPPORT 0 - - -/*------------------------------------------------------------------------------ - * Flags for workaround - *------------------------------------------------------------------------------ - */ -#if defined(MT6620) && (MT6620_FPGA_BWCS == 0) && (MT6620_FPGA_V5 == 0) - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#else - #define MT6620_E1_ASIC_HIFSYS_WORKAROUND 0 -#endif - -/*------------------------------------------------------------------------------ - * Flags for driver version - *------------------------------------------------------------------------------ - */ -#define CFG_DRV_OWN_VERSION ((UINT_16)((NIC_DRIVER_MAJOR_VERSION << 8) | (NIC_DRIVER_MINOR_VERSION))) -#define CFG_DRV_PEER_VERSION ((UINT_16)0x0000) - - -/*------------------------------------------------------------------------------ - * Flags for TX path which are OS dependent - *------------------------------------------------------------------------------ - */ -/*! NOTE(Kevin): If the Network buffer is non-scatter-gather like structure(without - * NETIF_F_FRAGLIST in LINUX), then we can set CFG_TX_BUFFER_IS_SCATTER_LIST to "0" - * for zero copy TX packets. - * For scatter-gather like structure, we set "1", driver will do copy frame to - * internal coalescing buffer before write it to FIFO. - */ -#if defined(LINUX) - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 /*!< 1: Do frame copy before write to TX FIFO. - Used when Network buffer is scatter-gather. - 0(default): Do not copy frame */ -#else /* WINDOWS/WINCE */ - #define CFG_TX_BUFFER_IS_SCATTER_LIST 1 -#endif /* LINUX */ - - -#if CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE * NIC_TX_BUFF_SUM) -#else - #define CFG_COALESCING_BUFFER_SIZE (CFG_TX_MAX_PKT_SIZE) -#endif /* CFG_SDIO_TX_AGG || CFG_TX_BUFFER_IS_SCATTER_LIST */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for TX path - *------------------------------------------------------------------------------ - */ - -/*! Maximum number of SW TX packet queue */ -#define CFG_TX_MAX_PKT_NUM 256 - -/*! Maximum number of SW TX CMD packet buffer */ -#define CFG_TX_MAX_CMD_PKT_NUM 32 - -/*! Maximum number of associated STAs */ -#define CFG_NUM_OF_STA_RECORD 20 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for RX path - *------------------------------------------------------------------------------ - */ - -/*! Max. descriptor number - sync. with firmware */ -#if CFG_SLT_SUPPORT -#define CFG_NUM_OF_RX0_HIF_DESC 42 -#else -#define CFG_NUM_OF_RX0_HIF_DESC 16 -#endif -#define CFG_NUM_OF_RX1_HIF_DESC 2 - -/*! Max. buffer hold by QM */ -#define CFG_NUM_OF_QM_RX_PKT_NUM 120 - -/*! Maximum number of SW RX packet buffer */ -#define CFG_RX_MAX_PKT_NUM ((CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC) * 3 \ - + CFG_NUM_OF_QM_RX_PKT_NUM) - -#define CFG_RX_REORDER_Q_THRESHOLD 8 - -#ifndef LINUX -#define CFG_RX_RETAINED_PKT_THRESHOLD (CFG_NUM_OF_RX0_HIF_DESC + CFG_NUM_OF_RX1_HIF_DESC + CFG_NUM_OF_QM_RX_PKT_NUM) -#else -#define CFG_RX_RETAINED_PKT_THRESHOLD 0 -#endif - -/*! Maximum RX packet size, if exceed this value, drop incoming packet */ -/* 7.2.3 Maganement frames */ -#define CFG_RX_MAX_PKT_SIZE ( 28 + 2312 + 12 /*HIF_RX_HEADER_T*/ ) //TODO: it should be 4096 under emulation mode - -/*! Minimum RX packet size, if lower than this value, drop incoming packet */ -#define CFG_RX_MIN_PKT_SIZE 10 /*!< 802.11 Control Frame is 10 bytes */ - -#if CFG_SDIO_RX_AGG - /* extra size for CS_STATUS and enhanced response */ - #define CFG_RX_COALESCING_BUFFER_SIZE ((CFG_NUM_OF_RX0_HIF_DESC + 1) \ - * CFG_RX_MAX_PKT_SIZE) -#else - #define CFG_RX_COALESCING_BUFFER_SIZE (CFG_RX_MAX_PKT_SIZE) -#endif - -/*! RX BA capability */ -#define CFG_NUM_OF_RX_BA_AGREEMENTS 8 -#define CFG_RX_BA_MAX_WINSIZE 16 -#define CFG_RX_BA_INC_SIZE 4 -#define CFG_RX_MAX_BA_TID_NUM 8 -#define CFG_RX_REORDERING_ENABLED 1 - -/*------------------------------------------------------------------------------ - * Flags and Parameters for CMD/RESPONSE - *------------------------------------------------------------------------------ - */ -#define CFG_RESPONSE_POLLING_TIMEOUT 512 - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Protocol Stack - *------------------------------------------------------------------------------ - */ -/*! Maximum number of BSS in the SCAN list */ -#define CFG_MAX_NUM_BSS_LIST 64 - -#define CFG_MAX_COMMON_IE_BUF_LEN (1500 * CFG_MAX_NUM_BSS_LIST) / 3 - -/*! Maximum size of IE buffer of each SCAN record */ -#define CFG_IE_BUFFER_SIZE 512 - -/*! Maximum number of STA records */ -#define CFG_MAX_NUM_STA_RECORD 32 - - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Power management - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FULL_PM 1 -#define CFG_ENABLE_WAKEUP_ON_LAN 0 - -#define CFG_INIT_POWER_SAVE_PROF ENUM_PSP_FAST_SWITCH - -#define CFG_INIT_ENABLE_PATTERN_FILTER_ARP 0 - -#define CFG_INIT_UAPSD_AC_BMP 0//(BIT(3) | BIT(2) | BIT(1) | BIT(0)) - -//#define CFG_SUPPORT_WAPI 0 -#define CFG_SUPPORT_WPS 1 -#define CFG_SUPPORT_WPS2 1 - -/*------------------------------------------------------------------------------ - * 802.11i RSN Pre-authentication PMKID cahce maximun number - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_PMKID_CACHE 16 /*!< max number of PMKID cache - 16(default) : The Max PMKID cache */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Ad-Hoc - *------------------------------------------------------------------------------ - */ -#define CFG_INIT_ADHOC_FREQ (2462000) -#define CFG_INIT_ADHOC_MODE AD_HOC_MODE_MIXED_11BG -#define CFG_INIT_ADHOC_BEACON_INTERVAL (100) -#define CFG_INIT_ADHOC_ATIM_WINDOW (0) - - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Load Setup Default - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags for enable 802.11A Band setting - *------------------------------------------------------------------------------ - */ - -/*------------------------------------------------------------------------------ - * Flags and Parameters for Interrupt Process - *------------------------------------------------------------------------------ - */ -#if defined(_HIF_SDIO) && defined(WINDOWS_CE) - #define CFG_IST_LOOP_COUNT 1 -#else - #define CFG_IST_LOOP_COUNT 1 -#endif /* _HIF_SDIO */ - -#define CFG_INT_WRITE_CLEAR 0 - -#if defined(LINUX) -#define CFG_DBG_GPIO_PINS 0 /* if 1, use MT6516 GPIO pin to log TX behavior */ -#endif - -//2 Flags for Driver Debug Options -/*------------------------------------------------------------------------------ - * Flags of TX Debug Option. NOTE(Kevin): Confirm with SA before modifying following flags. - *------------------------------------------------------------------------------ - */ -#define CFG_DBG_MGT_BUF 1 /*!< 1: Debug statistics usage of MGMT Buffer - 0: Disable */ - -#define CFG_HIF_STATISTICS 0 - -#define CFG_HIF_RX_STARVATION_WARNING 0 - -#define CFG_STARTUP_DEBUG 0 - -#define CFG_RX_PKTS_DUMP 1 - -/*------------------------------------------------------------------------------ - * Flags of Firmware Download Option. - *------------------------------------------------------------------------------ - */ -#define CFG_ENABLE_FW_DOWNLOAD 1 - -#define CFG_ENABLE_FW_DOWNLOAD_ACK 1 -#define CFG_ENABLE_FW_ENCRYPTION 1 - -#if defined(MT6620) || defined(MT6628) - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 1 -#else - #define CFG_ENABLE_FW_DOWNLOAD_AGGREGATION 0 - #define CFG_ENABLE_FW_DIVIDED_DOWNLOAD 0 -#endif - - - -#if defined(MT6620) - #if MT6620_FPGA_BWCS - #define CFG_FW_LOAD_ADDRESS 0x10014000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10014001 - #elif MT6620_FPGA_V5 - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #else - #define CFG_FW_LOAD_ADDRESS 0x10008000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x10008001 - #endif -#elif defined(MT5931) - #define CFG_FW_LOAD_ADDRESS 0xFF900000 - #define CFG_FW_START_ADDRESS 0x00000000 -#elif defined(MT6628) - #define CFG_FW_LOAD_ADDRESS 0x00060000 - #define CFG_OVERRIDE_FW_START_ADDRESS 0 - #define CFG_FW_START_ADDRESS 0x00060000 -#endif - - -/*------------------------------------------------------------------------------ - * Flags of Bluetooth-over-WiFi (BT 3.0 + HS) support - *------------------------------------------------------------------------------ - */ - -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_BT_OVER_WIFI 0 - #else - #define CFG_ENABLE_BT_OVER_WIFI 1 - #endif -#else - #define CFG_ENABLE_BT_OVER_WIFI 0 -#endif - -#define CFG_BOW_SEPARATE_DATA_PATH 1 - -#define CFG_BOW_PHYSICAL_LINK_NUM 4 - -#define CFG_BOW_TEST 0 - -#define CFG_BOW_LIMIT_AIS_CHNL 1 - -#define CFG_BOW_SUPPORT_11N 0 - -#define CFG_BOW_RATE_LIMITATION 1 - -/*------------------------------------------------------------------------------ - * Flags of Wi-Fi Direct support - *------------------------------------------------------------------------------ - */ -#ifdef LINUX - #ifdef CONFIG_X86 - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 - #else - #define CFG_ENABLE_WIFI_DIRECT 1 - #define CFG_SUPPORT_802_11W 0 /*!< 0(default): Disable 802.11W */ - #endif -#else - #define CFG_ENABLE_WIFI_DIRECT 0 - #define CFG_SUPPORT_802_11W 0 /* Not support at WinXP */ -#endif - -#define CFG_SUPPORT_PERSISTENT_GROUP 0 - -#define CFG_TEST_WIFI_DIRECT_GO 0 - -#define CFG_TEST_ANDROID_DIRECT_GO 0 - -#define CFG_UNITEST_P2P 0 - -/* - * Enable cfg80211 option after Android 2.2(Froyo) is suggested, - * cfg80211 on linux 2.6.29 is not mature yet - */ -#define CFG_ENABLE_WIFI_DIRECT_CFG_80211 1 - -/*------------------------------------------------------------------------------ - * Configuration Flags (Linux Only) - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_EXT_CONFIG 0 - -/*------------------------------------------------------------------------------ - * Statistics Buffering Mechanism - *------------------------------------------------------------------------------ - */ -#if CFG_SUPPORT_PERFORMANCE_TEST -#define CFG_ENABLE_STATISTICS_BUFFERING 1 -#else -#define CFG_ENABLE_STATISTICS_BUFFERING 0 -#endif -#define CFG_STATISTICS_VALID_CYCLE 2000 -#define CFG_LINK_QUALITY_VALID_PERIOD 5000 - -/*------------------------------------------------------------------------------ - * Migration Option - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_ADHOC 1 -#define CFG_SUPPORT_AAA 1 - - -#if (defined(MT5931) && defined(LINUX)) -#define CFG_SUPPORT_BCM 1 -#define CFG_SUPPORT_BCM_BWCS 1 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 1 -#else -#define CFG_SUPPORT_BCM 0 -#define CFG_SUPPORT_BCM_BWCS 0 -#define CFG_SUPPORT_BCM_BWCS_DEBUG 0 -#endif - -#define CFG_SUPPORT_RDD_TEST_MODE 0 - -#define CFG_SUPPORT_PWR_MGT 1 - -#define CFG_RSN_MIGRATION 1 - -#define CFG_PRIVACY_MIGRATION 1 - -#define CFG_ENABLE_HOTSPOT_PRIVACY_CHECK 1 - -#define CFG_MGMT_FRAME_HANDLING 1 - -#define CFG_MGMT_HW_ACCESS_REPLACEMENT 0 - -#if CFG_SUPPORT_PERFORMANCE_TEST - -#else - -#endif - -#define CFG_SUPPORT_AIS_5GHZ 1 -#define CFG_SUPPORT_BEACON_CHANGE_DETECTION 0 - -/*------------------------------------------------------------------------------ - * Option for NVRAM and Version Checking - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_NVRAM 1 -#define CFG_NVRAM_EXISTENCE_CHECK 1 -#define CFG_SW_NVRAM_VERSION_CHECK 1 -#define CFG_SUPPORT_NIC_CAPABILITY 1 - - -/*------------------------------------------------------------------------------ - * CONFIG_TITLE : Stress Test Option - * OWNER : Puff Wen - * Description : For stress test only. DO NOT enable it while normal operation - *------------------------------------------------------------------------------ - */ -#define CFG_STRESS_TEST_SUPPORT 0 - -/*------------------------------------------------------------------------------ - * Flags for LINT - *------------------------------------------------------------------------------ - */ -#define LINT_SAVE_AND_DISABLE /*lint -save -e* */ - -#define LINT_RESTORE /*lint -restore */ - -#define LINT_EXT_HEADER_BEGIN LINT_SAVE_AND_DISABLE - -#define LINT_EXT_HEADER_END LINT_RESTORE - -/*------------------------------------------------------------------------------ - * Flags of Features - *------------------------------------------------------------------------------ - */ - -#define CFG_SUPPORT_QOS 1 /* Enable/disable QoS TX, AMPDU */ -#define CFG_SUPPORT_AMPDU_TX 1 -#define CFG_SUPPORT_AMPDU_RX 1 -#define CFG_SUPPORT_TSPEC 0 /* Enable/disable TS-related Action frames handling */ -#define CFG_SUPPORT_UAPSD 1 -#define CFG_SUPPORT_UL_PSMP 0 - -#define CFG_SUPPORT_ROAMING 1 /* Roaming System */ -#define CFG_SUPPORT_SWCR 1 - -#define CFG_SUPPORT_ANTI_PIRACY 1 - -#define CFG_SUPPORT_OSC_SETTING 1 - -#if defined(MT5931) -#define CFG_SUPPORT_WHOLE_CHIP_RESET 0 /* for e3 chip only */ -#endif - -#define CFG_SUPPORT_P2P_RSSI_QUERY 0 - -#define CFG_SHOW_MACADDR_SOURCE 1 - -#define CFG_SUPPORT_802_11V 0 /* Support 802.11v Wireless Network Management */ -#define CFG_SUPPORT_802_11V_TIMING_MEASUREMENT 0 -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT == 1) && (CFG_SUPPORT_802_11V == 0) - #error "CFG_SUPPORT_802_11V should be 1 once CFG_SUPPORT_802_11V_TIMING_MEASUREMENT equals to 1" -#endif -#if (CFG_SUPPORT_802_11V == 0) -#define WNM_UNIT_TEST 0 -#endif - -#define CFG_DRIVER_COMPOSE_ASSOC_REQ 1 - -#define CFG_STRICT_CHECK_CAPINFO_PRIVACY 0 - -#define CFG_SUPPORT_WFD 1 - -#define CFG_SUPPORT_WFD_COMPOSE_IE 1 - -#define CFG_ENABLE_PKT_LIFETIME_PROFILE 0 - -/*------------------------------------------------------------------------------ - * Flags of bus error tolerance - *------------------------------------------------------------------------------ - */ -#define CFG_FORCE_RESET_UNDER_BUS_ERROR 0 - -/*------------------------------------------------------------------------------ - * Build Date Code Integration - *------------------------------------------------------------------------------ - */ -#define CFG_SUPPORT_BUILD_DATE_CODE 0 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CONFIG_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/debug.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/debug.h deleted file mode 100755 index 79ce933dfd66..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/debug.h +++ /dev/null @@ -1,557 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/debug.h#1 $ -*/ - -/*! \file debug.h - \brief Definition of SW debugging level. - - In this file, it describes the definition of various SW debugging levels and - assert functions. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: debug.h $ - * - * 12 16 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * fixed the Windows DDK free build compiling error. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 07 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * . - * - * 09 23 2010 cp.wu - * NULL - * add BOW index for debugging message and passing compilation - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add one more debug moduel for P2P. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add debug module index for cnm and ais. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add CFG_STARTUP_DEBUG for debugging starting up issue. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-29 19:47:50 GMT mtk01084 -** add emu catagory -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-17 18:12:04 GMT mtk01426 -** Don't use dynamic memory allocate for debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:29 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _DEBUG_H -#define _DEBUG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#ifndef BUILD_QA_DBG -#define BUILD_QA_DBG 0 -#endif - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" -#if CFG_SUPPORT_XLOG -#include "linux/xlog.h" -#endif - -extern UINT_8 aucDebugModule[]; -extern UINT_32 u4DebugModule; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define debug category (class): - * (1) ERROR (2) WARN (3) STATE (4) EVENT (5) TRACE (6) INFO (7) LOUD (8) TEMP - */ -#define DBG_CLASS_ERROR BIT(0) -#define DBG_CLASS_WARN BIT(1) -#define DBG_CLASS_STATE BIT(2) -#define DBG_CLASS_EVENT BIT(3) -#define DBG_CLASS_TRACE BIT(4) -#define DBG_CLASS_INFO BIT(5) -#define DBG_CLASS_LOUD BIT(6) -#define DBG_CLASS_TEMP BIT(7) -#define DBG_CLASS_MASK BITS(0,7) - - -#if defined(LINUX) -#define DBG_PRINTF_64BIT_DEC "lld" - -#else //Windows -#define DBG_PRINTF_64BIT_DEC "I64d" - -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Define debug module index */ -typedef enum _ENUM_DBG_MODULE_T { - DBG_INIT_IDX = 0, /* For driver initial */ - DBG_HAL_IDX, /* For HAL(HW) Layer */ - DBG_INTR_IDX, /* For Interrupt */ - DBG_REQ_IDX, - DBG_TX_IDX, - DBG_RX_IDX, - DBG_RFTEST_IDX, /* For RF test mode*/ - DBG_EMU_IDX, /* Developer specific */ - - DBG_SW1_IDX, /* Developer specific */ - DBG_SW2_IDX, /* Developer specific */ - DBG_SW3_IDX, /* Developer specific */ - DBG_SW4_IDX, /* Developer specific */ - - DBG_HEM_IDX, /* HEM */ - DBG_AIS_IDX, /* AIS */ - DBG_RLM_IDX, /* RLM */ - DBG_MEM_IDX, /* RLM */ - DBG_CNM_IDX, /* CNM */ - DBG_RSN_IDX, /* RSN */ - DBG_BSS_IDX, /* BSS */ - DBG_SCN_IDX, /* SCN */ - DBG_SAA_IDX, /* SAA */ - DBG_AAA_IDX, /* AAA */ - DBG_P2P_IDX, /* P2P */ - DBG_QM_IDX, /* QUE_MGT */ - DBG_SEC_IDX, /* SEC */ - DBG_BOW_IDX, /* BOW */ - DBG_WAPI_IDX, /* WAPI */ - DBG_ROAMING_IDX, /* ROAMING */ - - DBG_MODULE_NUM /* Notice the XLOG check */ -} ENUM_DBG_MODULE_T; - -//XLOG -//#define XLOG_DBG_MODULE_IDX 28 /* DBG_MODULE_NUM */ -//#if (XLOG_DBG_MODULE_IDX != XLOG_DBG_MODULE_IDX) -//#error "Please modify the DBG_MODULE_NUM and make sure this include at XLOG" -//#endif - -/* Define who owns developer specific index */ -#define DBG_YARCO_IDX DBG_SW1_IDX -#define DBG_KEVIN_IDX DBG_SW2_IDX -#define DBG_CMC_IDX DBG_SW3_IDX -#define DBG_GEORGE_IDX DBG_SW4_IDX - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Debug print format string for the OS system time */ -#define OS_SYSTIME_DBG_FORMAT "0x%08x" - -/* Debug print argument for the OS system time */ -#define OS_SYSTIME_DBG_ARGUMENT(systime) (systime) - -/* Debug print format string for the MAC Address */ -#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" - -/* Debug print argument for the MAC Address */ -#define MAC2STR(a) ((PUINT_8)a)[0], ((PUINT_8)a)[1], ((PUINT_8)a)[2], \ - ((PUINT_8)a)[3], ((PUINT_8)a)[4], ((PUINT_8)a)[5] - -/* The pre-defined format to dump the value of a varaible with its name shown. */ -#define DUMPVAR(variable, format) (#variable " = " format "\n", variable) - -/* The pre-defined format to dump the MAC type value with its name shown. */ -#define DUMPMACADDR(addr) (#addr " = " MACSTR "\n", MAC2STR(addr)) - - -/* Basiclly, we just do renaming of KAL functions although they should - * be defined as "Nothing to do" if DBG=0. But in some compiler, the macro - * syntax does not support #define LOG_FUNC(x,...) - * - * A caller shall not invoke these three macros when DBG=0. - */ -#define LOG_FUNC_TIME kalPrint -#define LOG_FUNC kalPrint - -#if DBG - - #define TMP_BUF_LEN 256 - #define TMP_WBUF_LEN (TMP_BUF_LEN * 2) - - extern PINT_16 g_wbuf_p; - extern PINT_8 g_buf_p; - - /* If __FUNCTION__ is already defined by compiler, we just use it. */ - #if defined(__FUNCTION__) - #define DEBUGFUNC(_Func) - #else - #define DEBUGFUNC(_Func) static const char __FUNCTION__[] = _Func; - #endif - - /* The following macros are used for future debug message. */ - /* TODO(Kevin): We should remove INITLOG/ERRORLOG/WARNLOG macro sooner or later */ - #define INITLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_TRACE) { \ - LOG_FUNC("%s: ", __FUNCTION__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define ERRORLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_ERROR) { \ - LOG_FUNC("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - #define WARNLOG(_Fmt) \ - { \ - if (aucDebugModule[DBG_INIT_IDX] & DBG_CLASS_WARN) { \ - LOG_FUNC("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC _Fmt; \ - } \ - } - - /*lint -save -e960 Multiple use of '#/##' */ - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - if (DBG_CLASS_##_Class == DBG_CLASS_ERROR) { \ - LOG_FUNC_TIME("**Error[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_WARN) { \ - LOG_FUNC_TIME("**Warning[%s:%d]-", __FILE__, __LINE__); \ - LOG_FUNC("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - else if (DBG_CLASS_##_Class == DBG_CLASS_EVENT) { \ - } \ - else { \ - LOG_FUNC_TIME("%s: (" #_Module " " #_Class ") ", __FUNCTION__); \ - } \ - LOG_FUNC _Fmt; \ - } \ - } - - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory8((PUINT_8) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) \ - { \ - if (aucDebugModule[DBG_##_Module##_IDX] & DBG_CLASS_##_Class) { \ - LOG_FUNC("%s: (" #_Module " " #_Class ")\n", __FUNCTION__); \ - dumpMemory32((PUINT_32) (_StartAddr), (UINT_32) (_Length)); \ - } \ - } - /*lint -restore */ - - /*lint -save -e961 use of '#undef' is discouraged */ - #undef ASSERT - /*lint -restore */ - - #ifdef _lint - #define ASSERT(_exp) \ - { \ - if (!(_exp)) {do {} while (1);} \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - #endif /* _lint */ - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d %s\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - - #define DISP_STRING(_str) _str - -#else /* !DBG */ - - #define DEBUGFUNC(_Func) - #define INITLOG(_Fmt) - #define ERRORLOG(_Fmt) - #define WARNLOG(_Fmt) - -#if defined(LINUX) - #define DBGLOG(_Module, _Class, _Fmt) \ - { \ - _Module##_##_Class##_LOGFUNC _Fmt; \ - } -#else - #define DBGLOG(_Module, _Class, _Fmt) -#endif - -#if CFG_SUPPORT_XLOG - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) \ - { \ - _Module##_##_Class##_LOGFUNC (__FUNCTION__);\ - _Module##_##_Class##_LOGDUMP8(_StartAddr, _Length); \ - } -#else - #define DBGLOG_MEM8(_Module, _Class, _StartAddr, _Length) -#endif - #define DBGLOG_MEM32(_Module, _Class, _StartAddr, _Length) - - #undef ASSERT - -#if BUILD_QA_DBG - #if defined(LINUX) /* For debugging in Linux w/o GDB */ - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - LOG_FUNC("Assertion failed: %s:%d (%s)\n", __FILE__, __LINE__, #_exp); \ - LOG_FUNC _fmt; \ - kalBreakPoint(); \ - } \ - } - #else - #ifdef WINDOWS_CE - #define UNICODE_TEXT(_msg) TEXT(_msg) - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - TCHAR rUbuf[256]; \ - kalBreakPoint(); \ - _stprintf(rUbuf, TEXT("Assertion failed: %s:%d %s\n"), \ - UNICODE_TEXT(__FILE__), \ - __LINE__, \ - UNICODE_TEXT(#_exp)); \ - MessageBox(NULL, rUbuf, TEXT("ASSERT!"), MB_OK); \ - } \ - } - #else - #define ASSERT(_exp) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - - #define ASSERT_REPORT(_exp, _fmt) \ - { \ - if (!(_exp) && !fgIsBusAccessFailed) { \ - kalBreakPoint(); \ - } \ - } - #endif /* WINDOWS_CE */ - #endif /* LINUX */ -#else - #define ASSERT(_exp) - #define ASSERT_REPORT(_exp, _fmt) -#endif /* BUILD_QA_DBG */ - - #define DISP_STRING(_str) "" - -#endif /* DBG */ - -#if CFG_STARTUP_DEBUG - #if defined(LINUX) -#define DBGPRINTF kalPrint - #else -#define DBGPRINTF DbgPrint - #endif -#else -#define DBGPRINTF(...) -#endif - - -/* The following macro is used for debugging packed structures. */ -#ifndef DATA_STRUC_INSPECTING_ASSERT -#define DATA_STRUC_INSPECTING_ASSERT(expr) \ - switch (0) {case 0: case (expr): default:;} -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if DBG -VOID -dumpMemory8 ( - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); - -VOID -dumpMemory32 ( - IN PUINT_32 pu4StartAddr, - IN UINT_32 u4Length - ); -#elif CFG_SUPPORT_XLOG -VOID -dumpMemory8 ( - IN UINT_32 log_level, - IN PUINT_8 pucStartAddr, - IN UINT_32 u4Length - ); -#endif /* DBG */ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _DEBUG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/dual_ant_bwcs.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/dual_ant_bwcs.h deleted file mode 100755 index 69e2464c4775..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/dual_ant_bwcs.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef DUAL_ANT_BWCS_H -#define DUAL_ANT_BWCS_H -typedef unsigned long DWORD; -typedef unsigned short USHORT; -typedef unsigned char UCHAR; -typedef unsigned char BYTE; -typedef unsigned char BOOL; -typedef unsigned char BOOLEAN; -typedef signed int INT; -typedef void * PNET_DEV; -#define DBGPRINT(Level, Fmt) printk Fmt - -#define RT_WLAN_EVENT_CUSTOM 0x01 -#define RT_WLAN_EVENT_CGIWAP 0x02 -#define RT_WLAN_EVENT_ASSOC_REQ_IE 0x03 -#define RT_WLAN_EVENT_SCAN 0x04 -#define RT_WLAN_EVENT_EXPIRED 0x05 -#define RT_WLAN_EVENT_SHOWPIN 0x06 -#define RT_WLAN_EVENT_PIN 0x07 - - - -/* WiFi Driver events to bwcs */ -#define WIFI_EVENT_WIFI_OPEN (DWORD)(1<<0) -#define WIFI_EVENT_WIFI_CLOSE (DWORD)(1<<1) -#define WIFI_EVENT_CONN_NEW (DWORD)(1<<2) -#define WIFI_EVENT_CONN_DEL (DWORD)(1<<3) -#define WIFI_EVENT_STA_CONN_NEW (DWORD)(1<<4) -#define WIFI_EVENT_STA_CONN_DEL (DWORD)(1<<5) -#define WIFI_EVENT_P2P_GO_CONN_NEW (DWORD)(1<<6) -#define WIFI_EVENT_P2P_GO_CONN_DEL (DWORD)(1<<7) -#define WIFI_EVENT_P2P_GC_CONN_NEW (DWORD)(1<<8) -#define WIFI_EVENT_P2P_GC_CONN_DEL (DWORD)(1<<9) -#define WIFI_EVENT_SOFTAP_CONN_NEW (DWORD)(1<<10) -#define WIFI_EVENT_SOFTAP_CONN_DEL (DWORD)(1<<11) - -/* WiFi events from bwcs */ -#define WIFI_ACTION_CUSTOM_1 0x1001 -#define WIFI_ACTION_CUSTOM_2 0x1002 -#define WIFI_ACTION_CUSTOM_3 0x1003 -#define WIFI_ACTION_CUSTOM_4 0x1004 - -enum { - WIFI_CONTYPE_STA = 0, - WIFI_CONTYPE_P2P, - WIFI_CONTYPE_SOFTAP, - WIFI_CONTYPE_MAX -}; - -enum { - WIFI_EVENT_PARAM_CH = 0, - WIFI_EVENT_PARAM_BW, - WIFI_EVENT_PARAM_FREQ, /*no used*/ - WIFI_EVENT_PARAM_MAX -}; - -/* BW -- The Bandwidth of WIFI_EVENT_PARAM_BW*/ -#define WIFI_BW_20 0 -#define WIFI_BW_40 1 -#define WIFI_BW_80 2 -#define WIFI_BW_10 4 /* 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field. */ - - -#define BWCS_NAME_MAX_LEN 32 -#define BWCS_NAME "BWCS" - -typedef struct __BWCS_WIFI { - char name[BWCS_NAME_MAX_LEN]; /*BWCS*/ - USHORT event; - UCHAR para[WIFI_EVENT_PARAM_MAX]; -} BWCS_WIFI; - -void wifi2bwcs_connection_event_ind_handler (P_GLUE_INFO_T prGlueInfo, USHORT event); - -/*This API is only used by 7601 Wifi driver*/ -int RtmpWirelessChannelNotify( - IN PNET_DEV pNetDev, - IN UINT32 eventType, - IN INT flags, - IN PUCHAR pSrcMac, - IN PUCHAR pData, - IN UINT32 dataLen); - -#endif //DUAL_ANT_BWCS_H diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/link.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/link.h deleted file mode 100755 index 7139ecf2af39..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/link.h +++ /dev/null @@ -1,454 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/link.h#1 $ -*/ - -/*! \file link.h - \brief Definition for simple doubly linked list operations. - - In this file we define the simple doubly linked list data structure and its - operation MACROs and INLINE functions. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: link.h $ - * - * 08 05 2010 yuche.tsai - * NULL - * Modify a MACRO of LINK_FOR_EACH_SAFE for compile error. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833] [MT6620 and MT5931] Driver migration - * . - * - * - * - * - * May 4 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add WIFI to BORA source control -** \main\maintrunk.MT5921\8 2008-10-16 15:57:11 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\7 2008-08-10 18:47:53 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\6 2007-12-11 00:09:00 GMT mtk01461 -** Add macro for checking valid list -** \main\maintrunk.MT5921\5 2007-11-13 14:27:01 GMT mtk01461 -** Add LINK_IS_INVALID macro -** Revision 1.1.1.1 2007/06/22 08:09:05 MTK01461 -** no message -** -*/ - -#ifndef _LINK_H -#define _LINK_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INVALID_LINK_POISON1 ((VOID *) 0x00100101) // May cause page fault & unalignment issue (data abort) -#define INVALID_LINK_POISON2 ((VOID *) 0x00100201) // Used to verify that nonbody uses non-initialized link entries. - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Simple Doubly Linked List Structures - Entry Part */ -typedef struct _LINK_ENTRY_T { - struct _LINK_ENTRY_T *prNext, *prPrev; -} LINK_ENTRY_T, *P_LINK_ENTRY_T; - -/* Simple Doubly Linked List Structures - List Part */ -typedef struct _LINK_T { - P_LINK_ENTRY_T prNext; - P_LINK_ENTRY_T prPrev; - UINT_32 u4NumElem; -} LINK_T, *P_LINK_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#if 0 // No one use it, temporarily mark it for [Lint - Info 773] -#define LINK_ADDR(rLink) { (P_LINK_ENTRY_T)(&(rLink)), (P_LINK_ENTRY_T)(&(rLink)), 0 } - -#define LINK_DECLARATION(rLink) \ - struct _LINK_T rLink = LINK_ADDR(rLink) -#endif - -#define LINK_INITIALIZE(prLink) \ - do { \ - ((P_LINK_T)(prLink))->prNext = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->prPrev = (P_LINK_ENTRY_T)(prLink); \ - ((P_LINK_T)(prLink))->u4NumElem = 0; \ - } while (0) - -#define LINK_ENTRY_INITIALIZE(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)NULL; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)NULL; \ - } while (0) - -#define LINK_ENTRY_INVALID(prEntry) \ - do { \ - ((P_LINK_ENTRY_T)(prEntry))->prNext = (P_LINK_ENTRY_T)INVALID_LINK_POISON1; \ - ((P_LINK_ENTRY_T)(prEntry))->prPrev = (P_LINK_ENTRY_T)INVALID_LINK_POISON2; \ - } while (0) - -#define LINK_IS_EMPTY(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)(prLink)) - -/* NOTE: We should do memory zero before any LINK been initiated, so we can check - * if it is valid before parsing the LINK. - */ -#define LINK_IS_INVALID(prLink) (((P_LINK_T)(prLink))->prNext == (P_LINK_ENTRY_T)NULL) - -#define LINK_IS_VALID(prLink) (((P_LINK_T)(prLink))->prNext != (P_LINK_ENTRY_T)NULL) - - -#define LINK_ENTRY(ptr, type, member) ENTRY_OF(ptr, type, member) - -/* Insert an entry into a link list's head */ -#define LINK_INSERT_HEAD(prLink, prEntry) \ - { \ - linkAdd(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - - -/* Append an entry into a link list's tail */ -#define LINK_INSERT_TAIL(prLink, prEntry) \ - { \ - linkAddTail(prEntry, prLink); \ - ((prLink)->u4NumElem)++; \ - } - -/* Peek head entry, but keep still in link list */ -#define LINK_PEEK_HEAD(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prNext, _type, _member) \ - ) - -/* Peek tail entry, but keep still in link list */ -#define LINK_PEEK_TAIL(prLink, _type, _member) \ - ( \ - LINK_IS_EMPTY(prLink) ? \ - NULL : LINK_ENTRY((prLink)->prPrev, _type, _member) \ - ) - -/* Get first entry from a link list */ -/* NOTE: We assume the link entry located at the beginning of "prEntry Type", - * so that we can cast the link entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define LINK_REMOVE_HEAD(prLink, prEntry, _P_TYPE) \ - { \ - ASSERT(prLink); \ - if (LINK_IS_EMPTY(prLink)) { \ - prEntry = (_P_TYPE)NULL; \ - } \ - else { \ - prEntry = (_P_TYPE)(((P_LINK_T)(prLink))->prNext); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } \ - } - -/* Assume the link entry located at the beginning of prEntry Type. - * And also decrease the total entry count. - */ -#define LINK_REMOVE_KNOWN_ENTRY(prLink, prEntry) \ - { \ - ASSERT(prLink); \ - ASSERT(prEntry); \ - linkDel((P_LINK_ENTRY_T)prEntry); \ - ((prLink)->u4NumElem)--; \ - } - -/* Iterate over a link list */ -#define LINK_FOR_EACH(prEntry, prLink) \ - for (prEntry = (prLink)->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prNext) - -/* Iterate over a link list backwards */ -#define LINK_FOR_EACH_PREV(prEntry, prLink) \ - for (prEntry = (prLink)->prPrev; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = (P_LINK_ENTRY_T)prEntry->prPrev) - -/* Iterate over a link list safe against removal of link entry */ -#define LINK_FOR_EACH_SAFE(prEntry, prNextEntry, prLink) \ - for (prEntry = (prLink)->prNext, prNextEntry = prEntry->prNext; \ - prEntry != (P_LINK_ENTRY_T)(prLink); \ - prEntry = prNextEntry, prNextEntry = prEntry->prNext) - -/* Iterate over a link list of given type */ -#define LINK_FOR_EACH_ENTRY(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember)) - -/* Iterate backwards over a link list of given type */ -#define LINK_FOR_EACH_ENTRY_PREV(prObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prPrev, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = LINK_ENTRY(prObj->rMember.prPrev, _TYPE, rMember)) - -/* Iterate over a link list of given type safe against removal of link entry */ -#define LINK_FOR_EACH_ENTRY_SAFE(prObj, prNextObj, prLink, rMember, _TYPE) \ - for (prObj = LINK_ENTRY((prLink)->prNext, _TYPE, rMember), \ - prNextObj = LINK_ENTRY(prObj->rMember.prNext, _TYPE, rMember); \ - &prObj->rMember != (P_LINK_ENTRY_T)(prLink); \ - prObj = prNextObj, \ - prNextObj = LINK_ENTRY(prNextObj->rMember.prNext, _TYPE, rMember)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prNew Pointer of new link head -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prNew; - prNew->prNext = prNext; - prNew->prPrev = prPrev; - prPrev->prNext = prNew; - - return; -} /* end of __linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry after the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAdd ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, (P_LINK_ENTRY_T)prLink, prLink->prNext); - - return; -} /* end of linkAdd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will add a new entry before the specified link head. -* -* \param[in] prNew New entry to be added -* \param[in] prHead Specified link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkAddTail ( - IN P_LINK_ENTRY_T prNew, - IN P_LINK_T prLink - ) -{ - __linkAdd(prNew, prLink->prPrev, (P_LINK_ENTRY_T)prLink); - - return; -} /* end of linkAddTail() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is only for internal link list manipulation. -* -* \param[in] prPrev Pointer of previous link head -* \param[in] prNext Pointer of next link head -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -__linkDel ( - IN P_LINK_ENTRY_T prPrev, - IN P_LINK_ENTRY_T prNext - ) -{ - prNext->prPrev = prPrev; - prPrev->prNext = prNext; - - return; -} /* end of __linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list. -* NOTE: the entry is in an initial state. -* -* \param prEntry Specified link head(entry) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkDel ( - IN P_LINK_ENTRY_T prEntry - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - - LINK_ENTRY_INITIALIZE(prEntry); - - return; -} /* end of linkDel() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* after the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it after -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMove ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAdd(prEntry, prLink); - - return; -} /* end of linkMove() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will delete a specified entry from link list and then add it -* before the specified link head. -* -* \param[in] prEntry Specified link head(entry) -* \param[in] prOtherHead Another link head to add it before -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -linkMoveTail ( - IN P_LINK_ENTRY_T prEntry, - IN P_LINK_T prLink - ) -{ - __linkDel(prEntry->prPrev, prEntry->prNext); - linkAddTail(prEntry, prLink); - - return; -} /* end of linkMoveTail() */ - -#endif /* _LINK_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/aa_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/aa_fsm.h deleted file mode 100755 index 05132c445af8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/aa_fsm.h +++ /dev/null @@ -1,291 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/aa_fsm.h#1 $ -*/ - -/*! \file aa_fsm.h - \brief Declaration of functions and finite state machine for SAA/AAA Module. - - Declaration of functions and finite state machine for SAA/AAA Module. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: aa_fsm.h $ - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - - -#ifndef _AA_FSM_H -#define _AA_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Retry interval for retransmiting authentication-request MMPDU. */ -#define TX_AUTHENTICATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Retry interval for retransmiting association-request MMPDU. */ -#define TX_ASSOCIATION_RETRY_TIMEOUT_TU 100 // TU. - -/* Wait for a response to a transmitted authentication-request MMPDU. */ -#define DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* Wait for a response to a transmitted association-request MMPDU. */ -#define DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU 512 // TU. - -/* The maximum time to wait for JOIN process complete. */ -#define JOIN_FAILURE_TIMEOUT_BEACON_INTERVAL 20 // Beacon Interval, 20 * 100TU = 2 sec. - -/* Retry interval for next JOIN request. */ -#define JOIN_RETRY_INTERVAL_SEC 10 // Seconds - -/* Maximum Retry Count for accept a JOIN request. */ -#define JOIN_MAX_RETRY_FAILURE_COUNT 2 // Times - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AA_STATE_T { - AA_STATE_IDLE = 0, - SAA_STATE_SEND_AUTH1, - SAA_STATE_WAIT_AUTH2, - SAA_STATE_SEND_AUTH3, - SAA_STATE_WAIT_AUTH4, - SAA_STATE_SEND_ASSOC1, - SAA_STATE_WAIT_ASSOC2, - AAA_STATE_SEND_AUTH2, - AAA_STATE_SEND_AUTH4, // We may not use, because P2P GO didn't support WEP and 11r - AAA_STATE_SEND_ASSOC2, - AA_STATE_RESOURCE, // A state for debugging the case of out of msg buffer. - AA_STATE_NUM -} ENUM_AA_STATE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in saa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ); - -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in aaa_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AA_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/ais_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/ais_fsm.h deleted file mode 100755 index bfd567c15647..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/ais_fsm.h +++ /dev/null @@ -1,728 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/ais_fsm.h#1 $ -*/ - -/*! \file ais_fsm.h - \brief Declaration of functions and finite state machine for AIS Module. - - Declaration of functions and finite state machine for AIS Module. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: ais_fsm.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 04 25 2011 cp.wu - * [WCXRP00000676] [MT6620 Wi-Fi][Driver] AIS to reduce request channel period from 5 seconds to 2 seconds - * channel interval for joining is shortened to 2 seconds to avoid interruption of concurrent operating network. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 23 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * reduce the backgroud ssid idle time min and max value - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Media disconnect indication and related postpone functions - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventJoinComplete() - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM for aisFsmTest() - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of aisFsmInit() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _AIS_FSM_H -#define _AIS_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define AIS_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define AIS_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define AIS_IBSS_ALONE_TIMEOUT_SEC 20 // seconds - -#define AIS_BEACON_TIMEOUT_COUNT_ADHOC 30 -#define AIS_BEACON_TIMEOUT_COUNT_INFRA 10 -#define AIS_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define AIS_BEACON_MAX_TIMEOUT_TU 100 -#define AIS_BEACON_MIN_TIMEOUT_TU 5 -#define AIS_BEACON_MAX_TIMEOUT_VALID TRUE -#define AIS_BEACON_MIN_TIMEOUT_VALID TRUE - -#define AIS_BMC_MAX_TIMEOUT_TU 100 -#define AIS_BMC_MIN_TIMEOUT_TU 5 -#define AIS_BMC_MAX_TIMEOUT_VALID TRUE -#define AIS_BMC_MIN_TIMEOUT_VALID TRUE - -#define AIS_JOIN_CH_GRANT_THRESHOLD 10 -#define AIS_JOIN_CH_REQUEST_INTERVAL 2000 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_AIS_STATE_T { - AIS_STATE_IDLE = 0, - AIS_STATE_SEARCH, - AIS_STATE_SCAN, - AIS_STATE_ONLINE_SCAN, - AIS_STATE_LOOKING_FOR, - AIS_STATE_WAIT_FOR_NEXT_SCAN, - AIS_STATE_REQ_CHANNEL_JOIN, - AIS_STATE_JOIN, - AIS_STATE_IBSS_ALONE, - AIS_STATE_IBSS_MERGE, - AIS_STATE_NORMAL_TR, - AIS_STATE_DISCONNECTING, - AIS_STATE_NUM -} ENUM_AIS_STATE_T; - - -typedef struct _MSG_AIS_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; -} MSG_AIS_ABORT_T, *P_MSG_AIS_ABORT_T; - - -typedef struct _MSG_AIS_IBSS_PEER_FOUND_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - BOOLEAN fgIsMergeIn; /* TRUE: Merge In, FALSE: Merge Out */ - P_STA_RECORD_T prStaRec; -} MSG_AIS_IBSS_PEER_FOUND_T, *P_MSG_AIS_IBSS_PEER_FOUND_T; - -typedef enum _ENUM_AIS_REQUEST_TYPE_T { - AIS_REQUEST_SCAN, - AIS_REQUEST_RECONNECT, - AIS_REQUEST_ROAMING_SEARCH, - AIS_REQUEST_ROAMING_CONNECT, - AIS_REQUEST_NUM -} ENUM_AIS_REQUEST_TYPE_T; - -typedef struct _AIS_REQ_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_AIS_REQUEST_TYPE_T eReqType; -} AIS_REQ_HDR_T, *P_AIS_REQ_HDR_T; - - -typedef struct _AIS_FSM_INFO_T { - ENUM_AIS_STATE_T ePreviousState; - ENUM_AIS_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - -#if CFG_SUPPORT_ROAMING - BOOLEAN fgIsRoamingScanPending; -#endif /* CFG_SUPPORT_ROAMING */ - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - P_STA_RECORD_T prTargetStaRec; /* For JOIN Abort */ - - UINT_32 u4SleepInterval; - - TIMER_T rBGScanTimer; - - TIMER_T rIbssAloneTimer; - - TIMER_T rIndicationOfDisconnectTimer; - - TIMER_T rJoinTimeoutTimer; - - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfScanReq; - - UINT_32 u4ChGrantedInterval; - - UINT_8 ucConnTrialCount; - - UINT_8 ucScanSSIDLen; - UINT_8 aucScanSSID[ELEM_MAX_LEN_SSID]; - - UINT_32 u4ScanIELength; - UINT_8 aucScanIEBuf[MAX_IE_LENGTH]; - - /* Pending Request List */ - LINK_T rPendingReqList; - -} AIS_FSM_INFO_T, *P_AIS_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define aisChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState = (_eNewMediaState)); - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ); - -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -/*----------------------------------------------------------------------------*/ -/* Handling for Ad-Hoc Network */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/*----------------------------------------------------------------------------*/ -/* Handling of Incoming Mailbox Message from CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -/*----------------------------------------------------------------------------*/ -/* Generating Outgoing Mailbox Message to CNM */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Indication */ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ); - -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -/*----------------------------------------------------------------------------*/ -/* Disconnection Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ); - - -/*----------------------------------------------------------------------------*/ -/* Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -#if CFG_SUPPORT_ROAMING -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ); - -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ); - -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); -#endif /*CFG_SUPPORT_ROAMING */ - -/*----------------------------------------------------------------------------*/ -/* Timeout Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ); - -/*----------------------------------------------------------------------------*/ -/* Internal State Checking */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ); - -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ); - -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ); - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -VOID -aisTest ( - VOID - ); -#endif /* CFG_TEST_MGMT_FSM */ -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AIS_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/assoc.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/assoc.h deleted file mode 100755 index c5423c06b266..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/assoc.h +++ /dev/null @@ -1,187 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/assoc.h#1 $ -*/ - -/*! \file assoc.h - \brief This file contains the ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: assoc.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add assocCheckTxReAssocRespFrame() proto type for P2P usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _ASSOC_H -#define _ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in assoc.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckTxReAssocRespFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ); - -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ASSOC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/auth.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/auth.h deleted file mode 100755 index 3ccd5443b179..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/auth.h +++ /dev/null @@ -1,215 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/auth.h#1 $ -*/ - -/*! \file auth.h - \brief This file contains the authentication REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: auth.h $ - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _AUTH_H -#define _AUTH_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in auth.c */ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ); - -#if !CFG_SUPPORT_AAA -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ); -#else -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ); -#endif /* CFG_SUPPORT_AAA */ - -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ); - -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ); - -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ); - -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ); - -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _AUTH_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/bow_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/bow_fsm.h deleted file mode 100755 index 959f3789ba57..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/bow_fsm.h +++ /dev/null @@ -1,230 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/bow_fsm.h#1 $ -*/ - -/*! \file bow_fsm.h - \brief Declaration of functions and finite state machine for BOW Module. - - Declaration of functions and finite state machine for BOW Module. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: bow_fsm.h $ - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add channel previledge into _BOW_FSM_INFO_T. - * - * 09 16 2010 chinghwa.yu - * NULL - * update bowChangeMediaState. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - */ - -#ifndef _BOW_FSM_H -#define _BOW_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOW_BG_SCAN_INTERVAL_MIN_SEC 2 //30 // exponential to 960 -#define BOW_BG_SCAN_INTERVAL_MAX_SEC 2 //960 // 16min - -#define BOW_DELAY_TIME_OF_DISCONNECT_SEC 10 - -#define BOW_BEACON_TIMEOUT_COUNT_STARTING 10 -#define BOW_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */ - -#define BOW_BEACON_MAX_TIMEOUT_TU 100 -#define BOW_BEACON_MIN_TIMEOUT_TU 5 -#define BOW_BEACON_MAX_TIMEOUT_VALID TRUE -#define BOW_BEACON_MIN_TIMEOUT_VALID TRUE - -#define BOW_BMC_MAX_TIMEOUT_TU 100 -#define BOW_BMC_MIN_TIMEOUT_TU 5 -#define BOW_BMC_MAX_TIMEOUT_VALID TRUE -#define BOW_BMC_MIN_TIMEOUT_VALID TRUE - -#define BOW_JOIN_CH_GRANT_THRESHOLD 10 -#define BOW_JOIN_CH_REQUEST_INTERVAL 2000 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_BOW_STATE_T { - BOW_STATE_IDLE = 0, - BOW_STATE_SEARCH, - BOW_STATE_SCAN, - BOW_STATE_ONLINE_SCAN, - BOW_STATE_LOOKING_FOR, - BOW_STATE_WAIT_FOR_NEXT_SCAN, - BOW_STATE_REQ_CHANNEL_JOIN, - BOW_STATE_REQ_CHANNEL_ALONE, - BOW_STATE_REQ_CHANNEL_MERGE, - BOW_STATE_JOIN, - BOW_STATE_IBSS_ALONE, - BOW_STATE_IBSS_MERGE, - BOW_STATE_NORMAL_TR, - BOW_STATE_NUM -} ENUM_BOW_STATE_T; - -typedef struct _BOW_FSM_INFO_T { - ENUM_BOW_STATE_T ePreviousState; - ENUM_BOW_STATE_T eCurrentState; - - BOOLEAN fgTryScan; - - /* Channel Privilege */ - - BOOLEAN fgIsInfraChannelFinished; - BOOLEAN fgIsChannelRequested; - BOOLEAN fgIsChannelGranted; - BOOLEAN fgIsScanPending; - UINT_32 u4ChGrantedInterval; - - - UINT_8 ucPrimaryChannel; - ENUM_BAND_T eBand; - UINT_16 u2BeaconInterval; - - ENUM_BOW_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - ENUM_BOW_STATE_T eForwardState; /* Step to next state if ACTION frame is TX successfully. */ - - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - P_BSS_DESC_T prTargetBssDesc; /* For destination */ - - UINT_8 aucPeerAddress[6]; - - UINT_8 ucRole; - - BOOLEAN fgSupportQoS; - - BOOLEAN fgIsRsponseProbe; /* Indicate if BOW can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfChReq; - UINT_8 ucSeqNumOfReqMsg; - UINT_8 ucSeqNumOfScnMsg; - UINT_8 ucSeqNumOfScanReq; - - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - - /* Timer */ - TIMER_T rStartingBeaconTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rStartingDiscoveryTimer; - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - TIMER_T rIndicationOfDisconnectTimer; - TIMER_T rChGrantedTimer; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - -} BOW_FSM_INFO_T, *P_BOW_FSM_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define bowChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].eConnectionState = (_eNewMediaState)); - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/bss.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/bss.h deleted file mode 100755 index 300c89c3daf5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/bss.h +++ /dev/null @@ -1,393 +0,0 @@ -/* -** $Id: @(#) bss.h -*/ - -/*! \file "bss.h" - \brief In this file we define the function prototype used in BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: bss.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 01 31 2011 george.huang - * [WCXRP00000333] [MT5931][FW] support SRAM power control drivers - * Extend TIM PVB, from 2 to 3 octets. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 12 2010 kevin.huang - * NULL - * Update bssProcessProbeRequest() and bssSendBeaconProbeResponse() declarations - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add CTRL FLAGS for Probe Response. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Remove unused typedef. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * and will send Null frame to diagnose connection - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _BSS_H -#define _BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//NOTE(Kevin): change define for george -//#define MAX_LEN_TIM_PARTIAL_BMP (((MAX_ASSOC_ID + 1) + 7) / 8) /* Required bits = (MAX_ASSOC_ID + 1) */ -#define MAX_LEN_TIM_PARTIAL_BMP ((CFG_STA_REC_NUM + 7) / 8) /* reserve length greater than maximum size of STA_REC */ //obsoleted: Assume we only use AID:1~15 - -/* CTRL FLAGS for Probe Response */ -#define BSS_PROBE_RESP_USE_P2P_DEV_ADDR BIT(0) -#define BSS_PROBE_RESP_INCLUDE_P2P_IE BIT(1) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define bssAssignAssocID(_prStaRec) ((_prStaRec)->ucIndex + 1) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ); - -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ); - -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ); - -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ); - -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ); - -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ); - -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ); - -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ); - - -/*link function to p2p module for txBcnIETable*/ - -/* WMM-2.2.2 WMM ACI to AC coding */ -typedef enum _ENUM_ACI_T { - ACI_BE = 0, - ACI_BK = 1, - ACI_VI = 2, - ACI_VO = 3, - ACI_NUM -} ENUM_ACI_T, *P_ENUM_ACI_T; - -typedef enum _ENUM_AC_PRIORITY_T { - AC_BK_PRIORITY = 0, - AC_BE_PRIORITY, - AC_VI_PRIORITY, - AC_VO_PRIORITY -} ENUM_AC_PRIORITY_T, *P_ENUM_AC_PRIORITY_T; - - -#endif /* _BSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm.h deleted file mode 100755 index 6fd840652dda..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm.h +++ /dev/null @@ -1,363 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1 $ -*/ - -/*! \file "cnm.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cnm.h $ - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Need bandwidth info when requesting channel privilege - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add prototype of cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_H -#define _CNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _ENUM_CH_REQ_TYPE_T { - CH_REQ_TYPE_JOIN, - CH_REQ_TYPE_P2P_LISTEN, - - CH_REQ_TYPE_NUM -} ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T; - -typedef struct _MSG_CH_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} MSG_CH_REQ_T, *P_MSG_CH_REQ_T; - -typedef struct _MSG_CH_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; -} MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T; - -typedef struct _MSG_CH_GRANT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; - UINT_32 u4GrantInterval; /* In unit of ms */ -} MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T; - -typedef struct _MSG_CH_REOCVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucPrimaryChannel; - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - ENUM_CH_REQ_TYPE_T eReqType; -} MSG_CH_RECOVER_T, *P_MSG_CH_RECOVER_T; - - -typedef struct _CNM_INFO_T { - UINT_32 u4Reserved; -} CNM_INFO_T, *P_CNM_INFO_T; - -#if CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -typedef struct _DEVICE_TYPE_T { - UINT_16 u2CategoryId; /* Category ID */ - UINT_8 aucOui[4]; /* OUI */ - UINT_16 u2SubCategoryId; /* Sub Category ID */ -} __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T, *P_DEVICE_TYPE_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ); - -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ); - -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ); - -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ); - -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* We don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this to guarantee the same member order in different structures - * to simply handling effort in some functions. - */ -__KAL_INLINE__ VOID -cnmMsgDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == - OFFSET_OF(MSG_CH_RECOVER_T,rMsgHdr)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucNetTypeIndex) == - OFFSET_OF(MSG_CH_RECOVER_T,ucNetTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucTokenID) == - OFFSET_OF(MSG_CH_RECOVER_T,ucTokenID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,ucPrimaryChannel) == - OFFSET_OF(MSG_CH_RECOVER_T,ucPrimaryChannel)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfSco) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfSco)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eRfBand) == - OFFSET_OF(MSG_CH_RECOVER_T,eRfBand)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSG_CH_GRANT_T,eReqType) == - OFFSET_OF(MSG_CH_RECOVER_T,eReqType)); - - return; -} -#endif /* _lint */ - -#endif /* _CNM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_mem.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_mem.h deleted file mode 100755 index b8f8c97a0a05..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_mem.h +++ /dev/null @@ -1,1199 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/cnm_mem.h#1 $ -*/ - -/*! \file "cnm_mem.h" - \brief In this file we define the structure of the control unit of - packet buffer and MGT/MSG Memory Buffer. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cnm_mem.h $ - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add per STA flow control when STA is in PS mode - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error for P2P related defination. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related fields. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [BORA00000678] [MT6620]WiFi LP integration - * 1. add u8TimeStamp in MSDU_INFO - * 2. move fgIsRxTSFUpdated/fgIsTxTSFUpdated from static to BSS_INFO - * 3. add new member for supporting PM in STA_RECORD, which is for AP PS mode - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 19 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fixed MAC RX Desc be overwritten issue - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 10 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support Rx header translation for A-MSDU subframe - * - * 05 07 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * add more sanity check about setting timer - * - * 04 29 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * modify the compiling flag for RAM usage - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * Added per-TID SN cache in STA_REC - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 11 2010 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * . - * - * 03 05 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove Emulation definition - * - * 03 04 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * eliminate HIF_EMULATION in cnm_mem.h - * - * 03 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add cnmStaRecChangeState() declaration. - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning for some emulation flags - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 10 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Renamed MSDU_INFO.ucFixedRateIndex as MSDU_INFO.ucFixedRateCode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 02 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added SN info in MSDU_INFO_T - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) surpress debug message emitted from hal_hif.c - * 2) add two set of field for recording buffer process time - * - * 12 31 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1. move wifi task initialization from wifi_task.c(rom) to wifi_init.c (TCM) for integrating F/W download later - * * * * * 2. WIFI_Event_Dispatcher() prototype changed to return to suspend mode from normal operation mode - * * * * * 2. HIF emulation logic revised - * - * 12 29 2009 yuche.tsai - * [BORA00000343][MT6620] Emulation For TX - * .Using global buffer declaring by SD1 instead of using another one. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * MQM: BA handling - * * TXM: Macros updates - * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 23 2009 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * allocating SRAM for emulation purpose by ruducing MEM_BANK3_BUF_SZ - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove individual DATA_BUF_BLOCK_NUM definition for emulation compiling flagsu1rwduu`wvpghlqg|fh+fmdkb - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 17 2009 george.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 17 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified the DATA_BLOCK_SIZE from 1620 to 2048 - * - * Dec 16 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_SEC_EMULATION flag - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap to sta record - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the buffer for key handshake 1x and cmd key order issue - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the tx call back function proto type to typedef.h - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and modify variable in STA_RECORD_T - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the port block flag - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add variables to STA_RECORD_T for assoc/auth - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the value of STA_WAIT_QUEUE_NUM (from 7 to 5) - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed u2FrameLength from SW_RFB - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed indenting - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Updated MSDU_INFO and SW_RFB - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * update the variable for security - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove the variable to make the compiler ok - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the variable for security module - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo in define of MSG_BUF_BLOCK_SIZE - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Let typedef STA_REC_T precede typedef MSDU_INFO_T and SW_RFB_T - * - * Nov 13 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Modified MSDU_INFO and STA_REC for TXM and MQM - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename STA_REC_T to STA_RECORD_T and add ucIndex member - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Make sure ucBufferSource the same offset in MSDU_INFO and SW_RFB - * - * Nov 6 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add draft content of MSDU_INFO_T and SW_RFB_T - * - * Oct 30 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 21 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_RX_EMULATION flag - * - * Oct 20 2009 mtk01426 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 9 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added field ucTC to MSDU_INFO_T and field pucHifRxPacket to SW_RFB_T - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_MEM_H -#define _CNM_MEM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef POWER_OF_2 -#define POWER_OF_2(n) BIT(n) -#endif - -/* Size of a basic management buffer block in power of 2 */ -#define MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2 7 /* 7 to the power of 2 = 128 */ -#define MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2 5 /* 5 to the power of 2 = 32 */ - -/* Size of a basic management buffer block */ -#define MGT_BUF_BLOCK_SIZE POWER_OF_2(MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCK_SIZE POWER_OF_2(MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Total size of (n) basic management buffer blocks */ -#define MGT_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2) -#define MSG_BUF_BLOCKS_SIZE(n) ((UINT_32)(n) << MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2) - -/* Number of management buffer block */ -#define MAX_NUM_OF_BUF_BLOCKS 32 /* Range: 1~32 */ - -/* Size of overall management frame buffer */ -#define MGT_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MGT_BUF_BLOCK_SIZE) -#define MSG_BUFFER_SIZE (MAX_NUM_OF_BUF_BLOCKS * MSG_BUF_BLOCK_SIZE) - - -/* STA_REC related definitions */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE -#define STA_WAIT_QUEUE_NUM 5 /* Number of SW queues in each STA_REC: AC0~AC4 */ -#define SC_CACHE_INDEX_NUM 5 /* Number of SC caches in each STA_REC: AC0~AC4 */ - - -/* P2P related definitions */ -#ifdef CFG_ENABLE_WIFI_DIRECT -/* Moved from p2p_fsm.h */ -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if ((MAX_NUM_OF_BUF_BLOCKS > 32) || (MAX_NUM_OF_BUF_BLOCKS <= 0)) - #error > #define MAX_NUM_OF_MGT_BUF_BLOCKS : Out of boundary ! -#elif MAX_NUM_OF_BUF_BLOCKS > 16 - typedef UINT_32 BUF_BITMAP; -#elif MAX_NUM_OF_BUF_BLOCKS > 8 - typedef UINT_16 BUF_BITMAP; -#else - typedef UINT_8 BUF_BITMAP; -#endif /* MAX_NUM_OF_MGT_BUF_BLOCKS */ - - -/* Control variable of TX management memory pool */ -typedef struct _BUF_INFO_T { - PUINT_8 pucBuf; - -#if CFG_DBG_MGT_BUF - UINT_32 u4AllocCount; - UINT_32 u4FreeCount; - UINT_32 u4AllocNullCount; -#endif /* CFG_DBG_MGT_BUF */ - - BUF_BITMAP rFreeBlocksBitmap; - UINT_8 aucAllocatedBlockNum[MAX_NUM_OF_BUF_BLOCKS]; -} BUF_INFO_T, *P_BUF_INFO_T; - - -/* Wi-Fi divides RAM into three types - * MSG: Mailbox message (Small size) - * BUF: HW DMA buffers (HIF/MAC) - */ -typedef enum _ENUM_RAM_TYPE_T { - RAM_TYPE_MSG = 0, - RAM_TYPE_BUF -} ENUM_RAM_TYPE_T, P_ENUM_RAM_TYPE_T; - -typedef enum _ENUM_BUFFER_SOURCE_T { - BUFFER_SOURCE_HIF_TX0 =0, - BUFFER_SOURCE_HIF_TX1, - BUFFER_SOURCE_MAC_RX, - BUFFER_SOURCE_MNG, - BUFFER_SOURCE_BCN, - BUFFER_SOURCE_NUM -} ENUM_BUFFER_SOURCE_T, *P_ENUM_BUFFER_SOURCE_T; - - -typedef enum _ENUM_SEC_STATE_T { - SEC_STATE_INIT, - SEC_STATE_INITIATOR_PORT_BLOCKED, - SEC_STATE_RESPONDER_PORT_BLOCKED, - SEC_STATE_CHECK_OK, - SEC_STATE_SEND_EAPOL, - SEC_STATE_SEND_DEAUTH, - SEC_STATE_COUNTERMEASURE, - SEC_STATE_NUM -} ENUM_SEC_STATE_T; - -typedef struct _TSPEC_ENTRY_T { - UINT_8 ucStatus; - UINT_8 ucToken; /* Dialog Token in ADDTS_REQ or ADDTS_RSP */ - UINT_16 u2MediumTime; - UINT_32 u4TsInfo; - //PARAM_QOS_TS_INFO rParamTsInfo; - /* Add other retained QoS parameters below */ -} TSPEC_ENTRY_T, *P_TSPEC_ENTRY_T, TSPEC_TABLE_ENTRY_T, *P_TSPEC_TABLE_ENTRY_T; - -typedef struct _SEC_INFO_T { - - ENUM_SEC_STATE_T ePreviousState; - ENUM_SEC_STATE_T eCurrentState; - - BOOL fg2nd1xSend; - BOOL fgKeyStored; - - UINT_8 aucStoredKey[64]; - - BOOL fgAllowOnly1x; -} SEC_INFO_T, *P_SEC_INFO_T; - -#define MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS 3 - -#define UPDATE_BSS_RSSI_INTERVAL_SEC 3 // Seconds - -/* Fragment information structure */ -typedef struct _FRAG_INFO_T { - UINT_16 u2NextFragSeqCtrl; - PUINT_8 pucNextFragStart; - P_SW_RFB_T pr1stFrag; - OS_SYSTIME rReceiveLifetimeLimit; /* The receive time of 1st fragment */ -} FRAG_INFO_T, *P_FRAG_INFO_T; - - -/* Define STA record structure */ -struct _STA_RECORD_T { - LINK_ENTRY_T rLinkEntry; - UINT_8 ucIndex; /* Not modify it except initializing */ - - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 aucMacAddr[MAC_ADDR_LEN]; /* MAC address */ - - /* SAA/AAA */ - ENUM_AA_STATE_T eAuthAssocState; /* Store STATE Value used in SAA/AAA */ - UINT_8 ucAuthAssocReqSeqNum; - - ENUM_STA_TYPE_T eStaType; /* Indicate the role of this STA in - * the network (for example, P2P GO) - */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucStaState; /* STATE_1,2,3 */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (may deduced from received BSS_DESC_T) - */ - UINT_8 ucDesiredPhyTypeSet; /* The match result by AND operation of peer's - * PhyTypeSet and ours. - */ - BOOLEAN fgHasBasicPhyType; /* A flag to indicate a Basic Phy Type which - * is used to generate some Phy Attribute IE - * (e.g. capability, MIB) during association. - */ - UINT_8 ucNonHTBasicPhyType; /* The Basic Phy Type choosen among the - * ucDesiredPhyTypeSet. - */ - - UINT_16 u2CapInfo; /* For Infra Mode, to store Capability Info. from Association Resp(SAA). - * For AP Mode, to store Capability Info. from Association Req(AAA). - */ - UINT_16 u2AssocId; /* For Infra Mode, to store AID from Association Resp(SAA). - * For AP Mode, to store the Assigned AID(AAA). - */ - - UINT_16 u2ListenInterval; /* Listen Interval from STA(AAA) */ - - UINT_16 u2DesiredNonHTRateSet; /* Our Current Desired Rate Set after - * match with STA's Operational Rate Set - */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of peer BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of peer BSS */ - - BOOLEAN fgIsMerging; /* For IBSS Mode, to indicate that Merge is ongoing */ - - BOOLEAN fgDiagnoseConnection; /* For Infra/AP Mode, to diagnose the Connection with - * this peer by sending ProbeReq/Null frame */ - - /*------------------------------------------------------------------------------------------*/ - /* 802.11n HT capabilities when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT) is true */ - /* They have the same definition with fields of information element */ - /*------------------------------------------------------------------------------------------*/ - UINT_8 ucMcsSet; /* MCS0~7 rate set of peer BSS */ - BOOLEAN fgSupMcs32; /* MCS32 is supported by peer BSS */ - UINT_16 u2HtCapInfo; /* HT cap info field by HT cap IE */ - UINT_8 ucAmpduParam; /* Field A-MPDU Parameters in HT cap IE */ - UINT_16 u2HtExtendedCap; /* HT extended cap field by HT cap IE */ - UINT_32 u4TxBeamformingCap; /* TX beamforming cap field by HT cap IE */ - UINT_8 ucAselCap; /* ASEL cap field by HT cap IE */ - - UINT_8 ucRCPI; /* RCPI of peer */ - - UINT_8 ucDTIMPeriod; /* Target BSS's DTIM Period, we use this - * value for setup Listen Interval - * TODO(Kevin): TBD - */ - UINT_8 ucAuthAlgNum; /* For Infra/AP Mode, the Auth Alogrithm Num used in Authentication(SAA/AAA) */ - BOOLEAN fgIsReAssoc; /* For Infra/AP Mode, to indicate ReAssoc Frame was in used(SAA/AAA) */ - - UINT_8 ucTxAuthAssocRetryCount;/* For Infra Mode, the Retry Count of TX Auth/Assod Frame(SAA) */ - UINT_8 ucTxAuthAssocRetryLimit;/* For Infra Mode, the Retry Limit of TX Auth/Assod Frame(SAA) */ - - UINT_16 u2StatusCode; /* Status of Auth/Assoc Req */ - UINT_16 u2ReasonCode; /* Reason that been Deauth/Disassoc */ - - - P_IE_CHALLENGE_TEXT_T prChallengeText; /* Point to an allocated buffer for storing Challenge Text for Shared Key Authentication */ - - TIMER_T rTxReqDoneOrRxRespTimer;/* For Infra Mode, a timer used to send a timeout event - * while waiting for TX request done or RX response. - */ - - /*------------------------------------------------------------------------------------------*/ - /* Power Management related fields (for STA/ AP/ P2P/ BOW power saving mode) */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgSetPwrMgtBit; /* For Infra Mode, to indicate that outgoing frame need toggle - * the Pwr Mgt Bit in its Frame Control Field. - */ - - BOOLEAN fgIsInPS; /* For AP Mode, to indicate the client PS state(PM). - * TRUE: In PS Mode; FALSE: In Active Mode. */ - - BOOLEAN fgIsInPsPollSP; /* For Infra Mode, to indicate we've sent a PS POLL to AP and start - * the PS_POLL Service Period(LP) - */ - - BOOLEAN fgIsInTriggerSP; /* For Infra Mode, to indicate we've sent a Trigger Frame to AP and start - * the Delivery Service Period(LP) - */ - - UINT_8 ucBmpDeliveryAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucBmpTriggerAC; /* 0: AC0, 1: AC1, 2: AC2, 3: AC3 */ - - UINT_8 ucUapsdSp; /* Max SP length */ - - /*------------------------------------------------------------------------------------------*/ - - BOOLEAN fgIsRtsEnabled; - - OS_SYSTIME rUpdateTime; /* (4) System Timestamp of Successful TX and RX */ - - OS_SYSTIME rLastJoinTime; /* (4) System Timestamp of latest JOIN process */ - - UINT_8 ucJoinFailureCount; /* Retry Count of JOIN process */ - - LINK_T arStaWaitQueue[STA_WAIT_QUEUE_NUM]; /* For TXM to defer pkt forwarding to MAC TX DMA */ - - UINT_16 au2CachedSeqCtrl[TID_NUM + 1]; /* Duplicate removal for HT STA on a per-TID basis ("+1" is for MMPDU and non-QoS) */ - -#if 0 - /* RXM */ - P_RX_BA_ENTRY_T aprRxBaTable[TID_NUM]; - - /* TXM */ - P_TX_BA_ENTRY_T aprTxBaTable[TID_NUM]; -#endif - - FRAG_INFO_T rFragInfo[MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS]; - - SEC_INFO_T rSecInfo; /* The security state machine */ - - BOOLEAN fgPortBlock; /* The 802.1x Port Control flag */ - - BOOLEAN fgTransmitKeyExist; /* Unicast key exist for this STA */ - - UINT_8 ucWTEntry; - - BOOLEAN fgTxAmpduEn; /* Enable TX AMPDU for this Peer */ - BOOLEAN fgRxAmpduEn; /* Enable RX AMPDU for this Peer */ - - PUINT_8 pucAssocReqIe; - UINT_16 u2AssocReqIeLen; - /*------------------------------------------------------------------------------------------*/ - /* WMM/QoS related fields */ - /*------------------------------------------------------------------------------------------*/ - BOOLEAN fgIsQoS; /* If the STA is associated as a QSTA or QAP (for TX/RX) */ - BOOLEAN fgIsWmmSupported; /* If the peer supports WMM, set to TRUE (for association)*/ - BOOLEAN fgIsUapsdSupported; /* Set according to the scan result (for association) */ - - /*------------------------------------------------------------------------------------------*/ - /* P2P related fields */ - /*------------------------------------------------------------------------------------------*/ -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 u2DevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - - UINT_16 u2ConfigMethods; - - UINT_8 ucDeviceCap; - - UINT_8 ucSecondaryDevTypeCount; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT]; -#endif /* CFG_SUPPORT_P2P */ - - - /*------------------------------------------------------------------------------------------*/ - /* QM related fields */ - /*------------------------------------------------------------------------------------------*/ - - UINT_8 ucFreeQuota; /* Per Sta flow controal. Valid when fgIsInPS is TRUE. Chnage it for per Queue flow control */ - //UINT_8 aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES]; /* used in future */ - UINT_8 ucFreeQuotaForDelivery; - UINT_8 ucFreeQuotaForNonDelivery; - -#if 1 - /*------------------------------------------------------------------------------------------*/ - /* To be removed, this is to make que_mgt compilation success only */ - /*------------------------------------------------------------------------------------------*/ - /* When this STA_REC is in use, set to TRUE. */ - BOOLEAN fgIsValid; - - /* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ - QUE_T arTxQueue[NUM_OF_PER_STA_TX_QUEUES]; - - /* When this STA is in PS Mode, set to TRUE. */ - //BOOLEAN fgIsPS; - - /* When this STA enters Power-Saving, FW will notify the driver with a Session ID */ - UINT_8 ucPsSessionID; - - BOOLEAN fgIsAp; - - /* Reorder Parameter reference table */ - P_RX_BA_ENTRY_T aprRxReorderParamRefTbl[CFG_RX_MAX_BA_TID_NUM]; -#endif - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - TIMINGMSMT_PARAM_T rWNMTimingMsmt; -#endif -}; - -#if 0 -/* use nic_tx.h instead */ -/* MSDU_INFO and SW_RFB structure */ -typedef struct _MSDU_INFO_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - /* TODO: move flags to ucControlFlag */ - - BOOLEAN fgIs1xFrame; /* Set to TRUE for 802.1x frame */ - - /* TXM: For TX Done handling, callback function & parameter (5) */ - BOOLEAN fgIsTxFailed; /* Set to TRUE if transmission failure */ - - PFN_TX_DONE_HANDLER pfTxDoneHandler; - - UINT_64 u8TimeStamp; /* record the TX timestamp */ - - /* TXM: For PS forwarding control (per-STA flow control) */ - UINT_8 ucPsForwardingType; /* Delivery-enabled, non-delivery-enabled, non-PS */ - UINT_8 ucPsSessionID; /* The Power Save session id for PS forwarding control*/ - - /* TXM: For MAC TX DMA operations */ - UINT_8 ucMacTxQueIdx; /* MAC TX queue: AC0-AC6, BCM, or BCN */ - BOOLEAN fgNoAck; /* Set to true if Ack is not requred for this packet */ - BOOLEAN fgBIP; /* Set to true if BIP is used for this packet */ - UINT_8 ucFragTotalCount; - UINT_8 ucFragFinishedCount; - UINT_16 u2FragThreshold; /* Fragmentation threshold without WLAN Header & FCS */ - BOOLEAN fgFixedRate; /* If a fixed rate is used, set to TRUE. */ - UINT_8 ucFixedRateCode; /* The rate code copied to MAC TX Desc */ - UINT_8 ucFixedRateRetryLimit; /* The retry limit when a fixed rate is used */ - BOOLEAN fgIsBmcQueueEnd; /* Set to true if this packet is the end of BMC */ - - /* TXM: For flushing ACL frames */ - UINT_16 u2PalLLH; /* 802.11 PAL LLH */ - //UINT_16 u2LLH; - UINT_16 u2ACLSeq; /* u2LLH+u2ACLSeq for AM HCI flush ACL frame */ - - /* TXM for retransmitting a flushed packet */ - BOOLEAN fgIsSnAssigned; - UINT_16 u2SequenceNumber; /* To remember the Sequence Control field of this MPDU */ - -} MSDU_INFO_T, *P_MSDU_INFO_T; -#endif - -#if 0 -/* nic_rx.h */ -typedef struct _SW_RFB_T { - - //4 /* ----------------MSDU_INFO and SW_RFB Common Fields------------------ */ - - LINK_ENTRY_T rLinkEntry; - PUINT_8 pucBuffer; /* Pointer to the associated buffer */ - - UINT_8 ucBufferSource; /* HIF TX0, HIF TX1, MAC RX, or MNG Pool */ - UINT_8 ucNetworkTypeIndex; /* Network type index that this TX packet is assocaited with */ - UINT_8 ucTC; /* 0 to 5 (used by HIF TX to increment the corresponding TC counter) */ - UINT_8 ucTID; /* Traffic Identification */ - - BOOLEAN fgIs802_11Frame; /* Set to TRUE for 802.11 frame */ - UINT_8 ucMacHeaderLength; - UINT_16 u2PayloadLength; - PUINT_8 pucMacHeader; /* 802.11 header */ - PUINT_8 pucPayload; /* 802.11 payload */ - - OS_SYSTIME rArrivalTime; /* System Timestamp (4) */ - P_STA_RECORD_T prStaRec; - -#if CFG_PROFILE_BUFFER_TRACING - ENUM_BUFFER_ACTIVITY_TYPE_T eActivity[2]; - UINT_32 rActivityTime[2]; -#endif -#if DBG && CFG_BUFFER_FREE_CHK - BOOLEAN fgBufferInSource; -#endif - - UINT_8 ucControlFlag; /* For specify some Control Flags, e.g. Basic Rate */ - - //4 /* -----------------------Non-Common ------------------------- */ - - /* For composing the HIF RX Header (TODO: move flags to ucControlFlag) */ - PUINT_8 pucHifRxPacket; /* Pointer to the Response packet to HIF RX0 or RX1 */ - UINT_16 u2HifRxPacketLength; - UINT_8 ucHeaderOffset; - UINT_8 ucHifRxPortIndex; - - UINT_16 u2SequenceControl; - BOOLEAN fgIsA4Frame; /* (For MAC RX packet parsing) set to TRUE if 4 addresses are present */ - BOOLEAN fgIsBAR; - BOOLEAN fgIsQoSData; - BOOLEAN fgIsAmsduSubframe; /* Set to TRUE for A-MSDU Subframe */ - - /* For HIF RX DMA Desc */ - BOOLEAN fgTUChecksumCheckRequired; - BOOLEAN fgIPChecksumCheckRequired; - UINT_8 ucEtherTypeOffset; - -} SW_RFB_T, *P_SW_RFB_T; -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_MSDU_INFO_T -cnmMgtPktAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cnmMgtPktFree ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -cnmMemInit ( - IN P_ADAPTER_T prAdapter - ); - -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ); - -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ); - -VOID -cnmStaRecInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ); - -P_STA_RECORD_T -cnmStaRecAlloc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex - ); - -VOID -cnmStaRecFree ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSyncToChip - ); - -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ); - -P_STA_RECORD_T -cnmGetStaRecByIndex ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucIndex - ); - -P_STA_RECORD_T -cnmGetStaRecByAddress ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIndex, - IN UINT_8 aucPeerMACAddress[] - ); - -VOID -cnmStaRecResetStatus ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -VOID -cnmStaRecChangeState ( - IN P_ADAPTER_T prAdapter, - IN OUT P_STA_RECORD_T prStaRec, - IN UINT_8 ucNewState - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -cnmMemDataTypeCheck ( - VOID - ) -{ -#if 0 - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == 0); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rLinkEntry) == OFFSET_OF(SW_RFB_T,rLinkEntry)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucBuffer) == OFFSET_OF(SW_RFB_T,pucBuffer)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucBufferSource) == - OFFSET_OF(SW_RFB_T,ucBufferSource)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucMacHeader) == - OFFSET_OF(SW_RFB_T,pucMacHeader)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucMacHeaderLength) == - OFFSET_OF(SW_RFB_T,ucMacHeaderLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,pucPayload) == - OFFSET_OF(SW_RFB_T,pucPayload)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,u2PayloadLength) == - OFFSET_OF(SW_RFB_T,u2PayloadLength)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,prStaRec) == - OFFSET_OF(SW_RFB_T,prStaRec)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucNetworkTypeIndex) == - OFFSET_OF(SW_RFB_T,ucNetworkTypeIndex)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTID) == - OFFSET_OF(SW_RFB_T,ucTID)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgIs802_11Frame) == - OFFSET_OF(SW_RFB_T,fgIs802_11Frame)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucControlFlag) == - OFFSET_OF(SW_RFB_T,ucControlFlag)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rArrivalTime) == - OFFSET_OF(SW_RFB_T,rArrivalTime)); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,ucTC) == - OFFSET_OF(SW_RFB_T,ucTC)); - -#if CFG_PROFILE_BUFFER_TRACING - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,eActivity[0]) == - OFFSET_OF(SW_RFB_T,eActivity[0])); - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,rActivityTime[0]) == - OFFSET_OF(SW_RFB_T,rActivityTime[0])); -#endif - -#if DBG && CFG_BUFFER_FREE_CHK - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(MSDU_INFO_T,fgBufferInSource) == - OFFSET_OF(SW_RFB_T,fgBufferInSource)); -#endif - - - DATA_STRUC_INSPECTING_ASSERT( - OFFSET_OF(STA_RECORD_T,rLinkEntry) == 0); - - return; -#endif -} -#endif /* _lint */ - -#endif /* _CNM_MEM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_scan.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_scan.h deleted file mode 100755 index 4f0f70679088..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_scan.h +++ /dev/null @@ -1,246 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "cnm_scan.h" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cnm_scan.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function prototype of cnmScanInit() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_SCAN_H -#define _CNM_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define SCN_CHANNEL_DWELL_TIME_MIN_MSEC 12 -#define SCN_CHANNEL_DWELL_TIME_EXT_MSEC 98 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_FULL 3 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_FULL 1 - -#define SCN_TOTAL_PROBEREQ_NUM_FOR_PARTIAL 2 -#define SCN_SPECIFIC_PROBEREQ_NUM_FOR_PARTIAL 1 - - -#define SCN_INTERLACED_CHANNEL_GROUPS_NUM 3 /* Used by partial scan */ - -#define SCN_PARTIAL_SCAN_NUM 3 - -#define SCN_PARTIAL_SCAN_IDLE_MSEC 100 - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* The type of Scan Source */ -typedef enum _ENUM_SCN_REQ_SOURCE_T { - SCN_REQ_SOURCE_HEM = 0, - SCN_REQ_SOURCE_NET_FSM, - SCN_REQ_SOURCE_ROAMING, /* ROAMING Module is independent of AIS FSM */ - SCN_REQ_SOURCE_OBSS, /* 2.4G OBSS scan */ - SCN_REQ_SOURCE_NUM -} ENUM_SCN_REQ_SOURCE_T, *P_ENUM_SCN_REQ_SOURCE_T; - -typedef enum _ENUM_SCAN_PROFILE_T { - SCAN_PROFILE_FULL = 0, - SCAN_PROFILE_PARTIAL, - SCAN_PROFILE_VOIP, - SCAN_PROFILE_FULL_2G4, - SCAN_PROFILE_NUM -} ENUM_SCAN_PROFILE_T, *P_ENUM_SCAN_PROFILE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -VOID -cnmScanInit ( - VOID - ); - -VOID -cnmScanRunEventScanRequest ( - IN P_MSG_HDR_T prMsgHdr - ); - -BOOLEAN -cnmScanRunEventScanAbort ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanProfileSelection ( - VOID - ); - -VOID -cnmScanProcessStart ( - VOID - ); - -VOID -cnmScanProcessStop ( - VOID - ); - -VOID -cnmScanRunEventReqAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanRunEventCancelAISAbsDone ( - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -cnmScanPartialScanTimeout ( - UINT_32 u4Param - ); - -VOID -cnmScanRunEventScnFsmComplete ( - IN P_MSG_HDR_T prMsgHdr - ); -#endif - - - -#endif /* _CNM_SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_timer.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_timer.h deleted file mode 100755 index 04739658ff91..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/cnm_timer.h +++ /dev/null @@ -1,314 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/cnm_timer.h#1 $ -*/ - -/*! \file cnm_timer.h - \brief Declaration of timer obj and related timer macro for setup time out - event. - - In this file we declare the timer object and provide several macro for - Protocol functional blocks to setup their own time out event. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cnm_timer.h $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * add the copy time function - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix LINT warnning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -#ifndef _CNM_TIMER_H -#define _CNM_TIMER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#undef MSEC_PER_SEC -#define MSEC_PER_SEC 1000 -#undef USEC_PER_MSEC -#define USEC_PER_MSEC 1000 -#define USEC_PER_TU 1024 /* microsecond */ - -#define MSEC_PER_MIN (60 * MSEC_PER_SEC) - - -#define MGMT_MAX_TIMEOUT_INTERVAL ((UINT_32)0x7fffffff) - -#define WAKE_LOCK_MAX_TIME 5 /* Unit: sec */ - -/* If WAKE_LOCK_MAX_TIME is too large, the whole system may always keep awake - * because of periodic timer of OBSS scanning - */ -#if (WAKE_LOCK_MAX_TIME >= OBSS_SCAN_MIN_INTERVAL) - #error WAKE_LOCK_MAX_TIME is too large -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef VOID (*PFN_MGMT_TIMEOUT_FUNC)(P_ADAPTER_T, UINT_32); - -typedef struct _TIMER_T { - LINK_ENTRY_T rLinkEntry; - OS_SYSTIME rExpiredSysTime; - UINT_16 u2Minutes; - UINT_16 u2Reserved; - UINT_32 u4Data; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; -} TIMER_T, *P_TIMER_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Check if time "a" is before time "b" */ -/* In 32-bit variable, 0x00000001~0x7fffffff -> positive number, - * 0x80000000~0xffffffff -> negative number - */ -#define TIME_BEFORE_64bit(a,b) (a < b) - -#define TIME_BEFORE(a,b) ((UINT_32)((UINT_32)(a) - (UINT_32)(b)) > 0x7fffffff) - -/* #define TIME_BEFORE(a,b) ((INT_32)((INT_32)(b) - (INT_32)(a)) > 0) - * may cause UNexpect result between Free build and Check build for WinCE - */ - -#define TIME_AFTER(a,b) TIME_BEFORE(b,a) - -#define SYSTIME_TO_SEC(_systime) ((_systime) / KAL_HZ) -#define SEC_TO_SYSTIME(_sec) ((_sec) * KAL_HZ) - - -/* The macros to convert second & millisecond */ -#define MSEC_TO_SEC(_msec) ((_msec) / MSEC_PER_SEC) -#define SEC_TO_MSEC(_sec) ((UINT_32)(_sec) * MSEC_PER_SEC) - - -/* The macros to convert millisecond & microsecond */ -#define USEC_TO_MSEC(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_USEC(_msec) ((UINT_32)(_msec) * USEC_PER_MSEC) - - -/* The macros to convert TU & microsecond, TU & millisecond */ -#define TU_TO_USEC(_tu) ((_tu) * USEC_PER_TU) -#define TU_TO_MSEC(_tu) USEC_TO_MSEC( TU_TO_USEC(_tu) ) - - -/* The macros to convert TU & & OS system time, round up by 0.5 */ -#define TU_TO_SYSTIME(_tu) MSEC_TO_SYSTIME( TU_TO_MSEC(_tu) ) -#define SYSTIME_TO_TU(_systime) \ - ((SYSTIME_TO_USEC(_systime) + ((USEC_PER_TU / 2) - 1)) / USEC_PER_TU) - - -/* The macros to convert OS system time & microsecond */ -#define SYSTIME_TO_USEC(_systime) (SYSTIME_TO_MSEC(_systime) * USEC_PER_MSEC) - - -/* The macro to get the current OS system time */ -#define GET_CURRENT_SYSTIME(_systime_p) {*(_systime_p) = kalGetTimeTick();} - -/* The macro to copy the system time */ -#define COPY_SYSTIME(_destTime, _srcTime) (_destTime) = (_srcTime) - -/* The macro to get the system time difference between t1 and t2 (t1 - t2) */ -/* #define GET_SYSTIME_DIFFERENCE(_time1, _time2, _diffTime) \ - (_diffTime) = (_time1) - (_time2) */ - -/* The macro to check for the expiration, if TRUE means _currentTime >= _expirationTime */ -#define CHECK_FOR_EXPIRATION(_currentTime, _expirationTime) \ - ( ((UINT_32)(_currentTime) - (UINT_32)(_expirationTime)) <= 0x7fffffffUL) - -/* The macro to check for the timeout */ -#define CHECK_FOR_TIMEOUT(_currentTime, _timeoutStartingTime, _timeout) \ - CHECK_FOR_EXPIRATION((_currentTime), ((_timeoutStartingTime) + (_timeout))) - -/* The macro to set the expiration time with a specified timeout *//* Watch out for round up.*/ -#define SET_EXPIRATION_TIME(_expirationTime, _timeout) \ - { \ - GET_CURRENT_SYSTIME(&(_expirationTime)); \ - (_expirationTime) += (OS_SYSTIME)(_timeout); \ - } - -#define timerRenewTimer(adapter,tmr,interval) \ - timerStartTimer(adapter,tmr,interval,(tmr)->function,(tmr)->data) - -#define MGMT_INIT_TIMER(_adapter_p, _timer, _callbackFunc) \ - timerInitTimer(_adapter_p, &(_timer), (UINT_32)(_callbackFunc)) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ); - -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ); - -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ); - -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ -INT_32 -timerPendingTimer ( - IN P_TIMER_T prTimer - ) -{ - ASSERT(prTimer); - - return prTimer->rLinkEntry.prNext != NULL; -} - -#endif /* _CNM_TIMER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/hem_mbox.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/hem_mbox.h deleted file mode 100755 index aa319a44e8e8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/hem_mbox.h +++ /dev/null @@ -1,484 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/hem_mbox.h#1 $ -*/ - -/*! \file hem_mbox.h - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: hem_mbox.h $ -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some message ID for P2P FSM under provisioning phase. - * - * 08 11 2010 yuche.tsai - * NULL - * Add Message Event ID for P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added MID_RXM_MQM_QOS_ACTION_FRAME for RXM to indicate QoS Action frames to MQM - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename the parameter of mboxDummy() - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove Dummy MSG ID - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add JOIN REQ related MSG ID - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add AIS ABORT MSG ID - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN MSG IDs - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _HEM_MBOX_H -#define _HEM_MBOX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Message IDs */ -typedef enum _ENUM_MSG_ID_T { - MID_MNY_CNM_CH_REQ, /* MANY notify CNM to obtain channel privilege */ - MID_MNY_CNM_CH_ABORT, /* MANY notify CNM to abort/release channel privilege */ - - MID_CNM_AIS_CH_GRANT, /* CNM notify AIS for indicating channel granted */ - MID_CNM_P2P_CH_GRANT, /* CNM notify P2P for indicating channel granted */ - MID_CNM_BOW_CH_GRANT, /* CNM notify BOW for indicating channel granted */ - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_AIS_SCN_SCAN_REQ, /* AIS notify SCN for starting scan */ - MID_AIS_SCN_SCAN_REQ_V2, /* AIS notify SCN for starting scan with multiple SSID support */ - MID_AIS_SCN_SCAN_CANCEL, /* AIS notify SCN for cancelling scan */ - MID_P2P_SCN_SCAN_REQ, /* P2P notify SCN for starting scan */ - MID_P2P_SCN_SCAN_REQ_V2, /* P2P notify SCN for starting scan with multiple SSID support */ - MID_P2P_SCN_SCAN_CANCEL, /* P2P notify SCN for cancelling scan */ - MID_BOW_SCN_SCAN_REQ, /* BOW notify SCN for starting scan */ - MID_BOW_SCN_SCAN_REQ_V2, /* BOW notify SCN for starting scan with multiple SSID support */ - MID_BOW_SCN_SCAN_CANCEL, /* BOW notify SCN for cancelling scan */ - MID_RLM_SCN_SCAN_REQ, /* RLM notify SCN for starting scan (OBSS-SCAN) */ - MID_RLM_SCN_SCAN_REQ_V2, /* RLM notify SCN for starting scan (OBSS-SCAN) with multiple SSID support */ - MID_RLM_SCN_SCAN_CANCEL, /* RLM notify SCN for cancelling scan (OBSS-SCAN)*/ - MID_SCN_AIS_SCAN_DONE, /* SCN notify AIS for scan completion */ - MID_SCN_P2P_SCAN_DONE, /* SCN notify P2P for scan completion */ - MID_SCN_BOW_SCAN_DONE, /* SCN notify BOW for scan completion */ - MID_SCN_RLM_SCAN_DONE, /* SCN notify RLM for scan completion (OBSS-SCAN) */ - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_OID_AIS_FSM_JOIN_REQ, /* OID/IOCTL notify AIS for join */ - MID_OID_AIS_FSM_ABORT, /* OID/IOCTL notify AIS for abort */ - MID_AIS_SAA_FSM_START, /* AIS notify SAA for Starting authentication/association fsm */ - MID_AIS_SAA_FSM_ABORT, /* AIS notify SAA for Aborting authentication/association fsm */ - MID_SAA_AIS_JOIN_COMPLETE, /* SAA notify AIS for indicating join complete */ - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_BOW_SAA_FSM_START, /* BOW notify SAA for Starting authentication/association fsm */ - MID_BOW_SAA_FSM_ABORT, /* BOW notify SAA for Aborting authentication/association fsm */ - MID_SAA_BOW_JOIN_COMPLETE, /* SAA notify BOW for indicating join complete */ -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*--------------------------------------------------*/ - /* P2P Module Mailbox Messages */ - /*--------------------------------------------------*/ - MID_P2P_SAA_FSM_START, /* P2P notify SAA for Starting authentication/association fsm */ - MID_P2P_SAA_FSM_ABORT, /* P2P notify SAA for Aborting authentication/association fsm */ - MID_SAA_P2P_JOIN_COMPLETE, /* SAA notify P2P for indicating join complete */ - - MID_MNY_P2P_FUN_SWITCH, /* Enable P2P FSM. */ - MID_MNY_P2P_DEVICE_DISCOVERY, /* Start device discovery. */ - MID_MNY_P2P_CONNECTION_REQ, /* Connection request. */ - MID_MNY_P2P_CONNECTION_ABORT, /* Abort connection request, P2P FSM return to IDLE. */ - MID_MNY_P2P_BEACON_UPDATE, - MID_MNY_P2P_STOP_AP, - MID_MNY_P2P_CHNL_REQ, - MID_MNY_P2P_CHNL_ABORT, - MID_MNY_P2P_MGMT_TX, - MID_MNY_P2P_GROUP_DISSOLVE, - MID_MNY_P2P_MGMT_FRAME_REGISTER, - MID_MNY_P2P_NET_DEV_REGISTER, - MID_MNY_P2P_START_AP, - MID_MNY_P2P_MGMT_FRAME_UPDATE, -#if CFG_SUPPORT_WFD - MID_MNY_P2P_WFD_CFG_UPDATE, -#endif -#endif - -#if CFG_SUPPORT_ADHOC - MID_SCN_AIS_FOUND_IBSS, /* SCN notify AIS that an IBSS Peer has been found and can merge into */ -#endif /* CFG_SUPPORT_ADHOC */ - - MID_SAA_AIS_FSM_ABORT, /* SAA notify AIS for indicating deauthentication/disassociation */ - - MID_TOTAL_NUM -} ENUM_MSG_ID_T, *P_ENUM_MSG_ID_T; - -/* Message header of inter-components */ -struct _MSG_HDR_T { - LINK_ENTRY_T rLinkEntry; - ENUM_MSG_ID_T eMsgId; -}; - -typedef VOID (*PFN_MSG_HNDL_FUNC)(P_ADAPTER_T, P_MSG_HDR_T); - -typedef struct _MSG_HNDL_ENTRY { - ENUM_MSG_ID_T eMsgId; - PFN_MSG_HNDL_FUNC pfMsgHndl; -} MSG_HNDL_ENTRY_T, *P_MSG_HNDL_ENTRY_T; - -typedef enum _EUNM_MSG_SEND_METHOD_T { - MSG_SEND_METHOD_BUF = 0, /* Message is put in the queue and will be - executed when mailbox is checked. */ - MSG_SEND_METHOD_UNBUF /* The handler function is called immediately - in the same context of the sender */ -} EUNM_MSG_SEND_METHOD_T, *P_EUNM_MSG_SEND_METHOD_T; - - -typedef enum _ENUM_MBOX_ID_T { - MBOX_ID_0 = 0, - MBOX_ID_TOTAL_NUM -} ENUM_MBOX_ID_T, *P_ENUM_MBOX_ID_T; - -/* Define Mailbox structure */ -typedef struct _MBOX_T { - LINK_T rLinkHead; -} MBOX_T, *P_MBOX_T; - -typedef struct _MSG_SAA_FSM_START_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_START_T, *P_MSG_SAA_FSM_START_T; - -typedef struct _MSG_SAA_FSM_COMP_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - WLAN_STATUS rJoinStatus; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prSwRfb; -} MSG_SAA_FSM_COMP_T, *P_MSG_SAA_FSM_COMP_T; - -typedef struct _MSG_SAA_FSM_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - P_STA_RECORD_T prStaRec; -} MSG_SAA_FSM_ABORT_T, *P_MSG_SAA_FSM_ABORT_T; - -typedef struct _MSG_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucNetTypeIndex; -} MSG_CONNECTION_ABORT_T, *P_MSG_CONNECTION_ABORT_T; - - - -/* specific message data types */ -typedef MSG_SAA_FSM_START_T MSG_JOIN_REQ_T, *P_MSG_JOIN_REQ_T; -typedef MSG_SAA_FSM_COMP_T MSG_JOIN_COMP_T, *P_MSG_JOIN_COMP_T; -typedef MSG_SAA_FSM_ABORT_T MSG_JOIN_ABORT_T, *P_MSG_JOIN_ABORT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - - -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ); - -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ); - -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HEM_MBOX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/mib.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/mib.h deleted file mode 100755 index 7af8409598d5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/mib.h +++ /dev/null @@ -1,197 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/mib.h#1 $ -*/ - -/*! \file mib.h - \brief This file contains the IEEE 802.11 family related MIB definition - for MediaTek 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mib.h $ - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -#ifndef _MIB_H -#define _MIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Entry in SMT AuthenticationAlgorithms Table: dot11AuthenticationAlgorithmsEntry */ -typedef struct _DOT11_AUTHENTICATION_ALGORITHMS_ENTRY { - BOOLEAN dot11AuthenticationAlgorithmsEnable; /* dot11AuthenticationAlgorithmsEntry 3 */ -} DOT11_AUTHENTICATION_ALGORITHMS_ENTRY, *P_DOT11_AUTHENTICATION_ALGORITHMS_ENTRY; - -/* Entry in SMT dot11RSNAConfigPairwiseCiphersTalbe Table: dot11RSNAConfigPairwiseCiphersEntry */ -typedef struct _DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY -{ - UINT_32 dot11RSNAConfigPairwiseCipher; /* dot11RSNAConfigPairwiseCiphersEntry 2 */ - BOOLEAN dot11RSNAConfigPairwiseCipherEnabled; /* dot11RSNAConfigPairwiseCiphersEntry 3 */ -} DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY, *P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY; - -/* Entry in SMT dot11RSNAConfigAuthenticationSuitesTalbe Table: dot11RSNAConfigAuthenticationSuitesEntry */ -typedef struct _DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY -{ - UINT_32 dot11RSNAConfigAuthenticationSuite; /* dot11RSNAConfigAuthenticationSuitesEntry 2 */ - BOOLEAN dot11RSNAConfigAuthenticationSuiteEnabled; /* dot11RSNAConfigAuthenticationSuitesEntry 3 */ -} DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY, *P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY; - -/* ----- IEEE 802.11 MIB Major sections ----- */ -typedef struct _IEEE_802_11_MIB_T { - /* dot11PrivacyTable (dot11smt 5) */ - UINT_8 dot11WEPDefaultKeyID; /* dot11PrivacyEntry 2 */ - BOOLEAN dot11TranmitKeyAvailable; - UINT_32 dot11WEPICVErrorCount; /* dot11PrivacyEntry 5 */ - UINT_32 dot11WEPExcludedCount; /* dot11PrivacyEntry 6 */ - - /* dot11RSNAConfigTable (dot11smt 8) */ - UINT_32 dot11RSNAConfigGroupCipher; /* dot11RSNAConfigEntry 4 */ - - /* dot11RSNAConfigPairwiseCiphersTable (dot11smt 9) */ - DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY dot11RSNAConfigPairwiseCiphersTable[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - - /* dot11RSNAConfigAuthenticationSuitesTable (dot11smt 10) */ - DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY dot11RSNAConfigAuthenticationSuitesTable[MAX_NUM_SUPPORTED_AKM_SUITES]; - -#if 0 //SUPPORT_WAPI - BOOLEAN fgWapiKeyInstalled; - PARAM_WPI_KEY_T rWapiPairwiseKey[2]; - BOOLEAN fgPairwiseKeyUsed[2]; - UINT_8 ucWpiActivedPWKey; /* Must be 0 or 1, by wapi spec */ - PARAM_WPI_KEY_T rWapiGroupKey[2]; - BOOLEAN fgGroupKeyUsed[2]; -#endif -} IEEE_802_11_MIB_T, *P_IEEE_802_11_MIB_T; - -/* ------------------ IEEE 802.11 non HT PHY characteristics ---------------- */ -typedef const struct _NON_HT_PHY_ATTRIBUTE_T { - UINT_16 u2SupportedRateSet; - - BOOLEAN fgIsShortPreambleOptionImplemented; - - BOOLEAN fgIsShortSlotTimeOptionImplemented; - -} NON_HT_PHY_ATTRIBUTE_T, *P_NON_HT_PHY_ATTRIBUTE_T; - -typedef const struct _NON_HT_ADHOC_MODE_ATTRIBUTE_T { - - ENUM_PHY_TYPE_INDEX_T ePhyTypeIndex; - - UINT_16 u2BSSBasicRateSet; - -} NON_HT_ADHOC_MODE_ATTRIBUTE_T, *P_NON_HT_ADHOC_MODE_ATTRIBUTE_T; - -typedef NON_HT_ADHOC_MODE_ATTRIBUTE_T NON_HT_AP_MODE_ATTRIBUTE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[]; -extern NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[]; -extern NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[]; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_assoc.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_assoc.h deleted file mode 100755 index a21d71c5daec..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_assoc.h +++ /dev/null @@ -1,104 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_assoc.h#1 $ -*/ - -/*! \file p2p_assoc.h - \brief This file contains the Wi-Fi Direct ASSOC REQ/RESP of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -#ifndef _P2P_ASSOC_H -#define _P2P_ASSOC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_bss.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_bss.h deleted file mode 100755 index 90f138477b2d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_bss.h +++ /dev/null @@ -1,105 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_bss.h#2 $ -*/ - -/*! \file "p2p_bss.h" - \brief In this file we define the function prototype used in p2p BSS/IBSS. - - The file contains the function declarations and defines for used in BSS/IBSS. -*/ - - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _P2P_BSS_H -#define _P2P_BSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -UINT_32 -p2pGetTxProbRspIeTableSize( - VOID - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_fsm.h deleted file mode 100755 index 4b86f33256f7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_fsm.h +++ /dev/null @@ -1,2844 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_fsm.h#23 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: p2p_fsm.h $ -** -** 08 24 2012 yuche.tsai -** NULL -** Fix bug of invitation request. -** -** 07 31 2012 yuche.tsai -** NULL -** Update Active/Deactive network policy for P2P network. -** Highly related to power saving. -** -** 07 25 2012 yuche.tsai -** NULL -** Bug fix for TX mgmt frame. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 18 2012 yuche.tsai - * NULL - * add one file. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve class 3 error issue under AP mode. - * - * data frame may TX before Assoc Response TX. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 09 2011 yuche.tsai - * [WCXRP00001093] [Need Patch][Volunteer Patch] Service Discovery 2.0 state transition issue. - * Fix SD2.0 issue which may cause KE. (Monkey test) - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 09 01 2011 yuche.tsai - * NULL - * Fix channel stay interval. - * Sync channel stay interval & channel request interval under AP mode.. - * - * 08 30 2011 yuche.tsai - * [WCXRP00000953] [Volunteer Patch][Driver] Hot Spot Channel ASSERT issue. - * Fix hot spot FW assert issue when under concurrent case. (DBG enable only) - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 yuche.tsai - * NULL - * Fix scan policy for Active LISTEN scan. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Support TX Deauth Issue. - * - * 07 26 2011 yuche.tsai - * [WCXRP00000875] [Volunteer Patch][WiFi Direct][Driver] MT6620 IOT issue with realtek test bed solution. - * Turn off persistent group support for V2.0 release. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix compile error. - * - * 07 18 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Fix MT6620 WiFi Direct IOT Issue with BCM solution. - * - * 07 11 2011 yuche.tsai - * [WCXRP00000845] [Volunteer Patch][WiFi Direct] WiFi Direct Device Connection Robustness - * Enhance Connection Robustness. - * - * 07 08 2011 yuche.tsai - * [WCXRP00000841] [Volunteer Patch][WiFi Direct] Group Owner Setting. - * Update GO configure parameter. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Disable enhancement II for debugging. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Refine compile flag. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 04 20 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove CFG_WIFI_DIRECT_MOVED. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add two function prototype. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. - -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add connection abort message event prototype. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 16 2010 yuche.tsai - * NULL - * Fix P2P Intended Interface Address Bug. - * Extend GO Nego Timeout Time. - * - * 08 16 2010 yuche.tsai - * NULL - * Extend Listen Interval default value & remove deprecated variable. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add function prototype for join complete. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function proto type for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Change P2P data structure for supporting - * 1. P2P Device discovery. - * 2. P2P Group Negotiation. - * 3. P2P JOIN - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM header file. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix some P2P function prototype. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify parameter of p2pStartGO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -#ifndef _P2P_FSM_H -#define _P2P_FSM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -#define CID52_53_54 0 - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - - - - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_P2P_STATE_T { - P2P_STATE_IDLE = 0, - P2P_STATE_SCAN, - P2P_STATE_AP_CHANNEL_DETECT, - P2P_STATE_REQING_CHANNEL, - P2P_STATE_CHNL_ON_HAND, /* Requesting Channel to Send Specific Frame. */ - P2P_STATE_GC_JOIN, /* Sending Specific Frame. May extending channel by other event. */ - P2P_STATE_NUM -} ENUM_P2P_STATE_T, *P_ENUM_P2P_STATE_T; - - -typedef enum _ENUM_CHANNEL_REQ_TYPE_T { - CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL, - CHANNEL_REQ_TYPE_GC_JOIN_REQ, - CHANNEL_REQ_TYPE_GO_START_BSS -} -ENUM_CHANNEL_REQ_TYPE_T, *P_ENUM_CHANNEL_REQ_TYPE_T; - - -typedef enum _ENUM_BUFFER_TYPE_T { - ENUM_FRAME_TYPE_EXTRA_IE_BEACON, - ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP, - ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP, - ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE, - ENUM_FRAME_TYPE_BEACON_TEMPLATE, - ENUM_FRAME_IE_NUM -} ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T; - -typedef enum _ENUM_HIDDEN_SSID_TYPE_T { - ENUM_HIDDEN_SSID_NONE, - ENUM_HIDDEN_SSID_LEN, - ENUM_HIDDEN_SSID_ZERO_CONTENT, - ENUM_HIDDEN_SSID_NUM -} -ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T; - -typedef struct _P2P_SSID_STRUCT_T { - UINT_8 aucSsid[32]; - UINT_8 ucSsidLen; -} P2P_SSID_STRUCT_T, *P_P2P_SSID_STRUCT_T; - -typedef struct _P2P_STATION_INFO_T { - UINT_32 u4InactiveTime; - UINT_32 u4RxBytes; // TODO: - UINT_32 u4TxBytes; // TODO: - UINT_32 u4RxPackets; // TODO: - UINT_32 u4TxPackets; // TODO: - // TODO: Add more for requirement. -} -P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T; - - -typedef struct _AP_CRYPTO_SETTINGS_T { - UINT_32 u4WpaVersion; - UINT_32 u4CipherGroup; - INT_32 i4NumOfCiphers; - UINT_32 aucCiphersPairwise[5]; - INT_32 i4NumOfAkmSuites; - UINT_32 aucAkmSuites[2]; - BOOLEAN fgIsControlPort; - UINT_16 u2ControlPortBE; - BOOLEAN fgIsControlPortEncrypt; -} AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T; - -typedef struct _MSG_P2P_MGMT_TX_REQUEST_T { - MSG_HDR_T rMsgHdr; - P_MSDU_INFO_T prMgmtMsduInfo; - UINT_64 u8Cookie; /* For indication. */ - BOOLEAN fgNoneCckRate; - BOOLEAN fgIsWaitRsp; -} MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T; - - -/*-------------------- P2P FSM ACTION STRUCT ---------------------*/ -typedef struct _P2P_CHNL_REQ_INFO_T { - BOOLEAN fgIsChannelRequested; - UINT_8 ucSeqNumOfChReq; - UINT_64 u8Cookie; - UINT_8 ucReqChnlNum; - ENUM_BAND_T eBand; - ENUM_CHNL_EXT_T eChnlSco; - UINT_32 u4MaxInterval; - ENUM_CHANNEL_REQ_TYPE_T eChannelReqType; - - UINT_8 ucOriChnlNum; - ENUM_BAND_T eOriBand; - ENUM_CHNL_EXT_T eOriChnlSco; -#if 0//LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq; - BOOLEAN fgNeedIndSupp; -#endif - -} P2P_CHNL_REQ_INFO_T, *P_P2P_CHNL_REQ_INFO_T; - -typedef struct _P2P_SCAN_REQ_INFO_T { - ENUM_SCAN_TYPE_T eScanType; - ENUM_SCAN_CHANNEL eChannelSet; - UINT_16 u2PassiveDewellTime; - UINT_8 ucSeqNumOfScnMsg; - BOOLEAN fgIsAbort; - BOOLEAN fgIsScanRequest; - UINT_8 ucNumChannelList; - RF_CHANNEL_INFO_T arScanChannelList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - P2P_SSID_STRUCT_T rSsidStruct; // Currently we can only take one SSID scan request -} -P2P_SCAN_REQ_INFO_T, *P_P2P_SCAN_REQ_INFO_T; - -typedef struct _P2P_CONNECTION_REQ_INFO_T { - - BOOLEAN fgIsConnRequest; - P2P_SSID_STRUCT_T rSsidStruct; - UINT_8 aucBssid[MAC_ADDR_LEN]; - /* For ASSOC Req. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T; - -typedef struct _P2P_MGMT_TX_REQ_INFO_T { - BOOLEAN fgIsMgmtTxRequested; - P_MSDU_INFO_T prMgmtTxMsdu; - UINT_64 u8Cookie; -} P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T; - -typedef struct _P2P_BEACON_UPDATE_INFO_T { - PUINT_8 pucBcnHdr; - UINT_32 u4BcnHdrLen; - PUINT_8 pucBcnBody; - UINT_32 u4BcnBodyLen; -} -P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T; - -typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T { - P_MSDU_INFO_T prProbeRspMsduTemplate; -} P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T; - -typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T { - PUINT_8 pucAssocRspExtIE; - UINT_16 u2AssocIELen; -} P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T; - -typedef struct _P2P_JOIN_INFO_T { - UINT_32 ucSeqNumOfReqMsg; - UINT_8 ucAvailableAuthTypes; - P_STA_RECORD_T prTargetStaRec; - P2P_SSID_STRUCT_T rSsidStruct; - BOOLEAN fgIsJoinComplete; - /* For ASSOC Rsp. */ - UINT_32 u4BufLength; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; -} -P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T; - -#if CFG_SUPPORT_WFD - -#define WFD_FLAGS_DEV_INFO_VALID BIT(0) /* 1. WFD_DEV_INFO, 2. WFD_CTRL_PORT, 3. WFD_MAT_TP. */ -#define WFD_FLAGS_SINK_INFO_VALID BIT(1) /* 1. WFD_SINK_STATUS, 2. WFD_SINK_MAC. */ -#define WFD_FLAGS_ASSOC_MAC_VALID BIT(2) /* 1. WFD_ASSOC_MAC. */ -#define WFD_FLAGS_EXT_CAPABILITY_VALID BIT(3) /* 1. WFD_EXTEND_CAPABILITY. */ - - - -struct _WFD_CFG_SETTINGS_T { - UINT_32 u4WfdCmdType; - UINT_8 ucWfdEnable; - UINT_8 ucWfdCoupleSinkStatus; - UINT_8 ucWfdSessionAvailable; /* 0: NA 1:Set 2:Clear */ - UINT_8 ucWfdSigmaMode; - UINT_16 u2WfdDevInfo; - UINT_16 u2WfdControlPort; - UINT_16 u2WfdMaximumTp; - UINT_16 u2WfdExtendCap; - UINT_8 aucWfdCoupleSinkAddress[MAC_ADDR_LEN]; - UINT_8 aucWfdAssociatedBssid[MAC_ADDR_LEN]; - UINT_8 aucWfdVideolp[4]; - UINT_8 aucWfdAudiolp[4]; - UINT_16 u2WfdVideoPort; - UINT_16 u2WfdAudioPort; - UINT_32 u4WfdFlag; - UINT_32 u4WfdPolicy; - UINT_32 u4WfdState; - UINT_8 aucWfdSessionInformationIE[24*8]; - UINT_16 u2WfdSessionInformationIELen; - UINT_8 aucReserved1[2]; - UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN]; - UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN]; - UINT_32 u4WfdAdvancedFlag; - /* Group 1 64 bytes */ - UINT_8 aucWfdLocalIp[4]; - UINT_16 u2WfdLifetimeAc2; /* Unit is 2 TU */ - UINT_16 u2WfdLifetimeAc3; /* Unit is 2 TU */ - UINT_8 aucReverved2[56]; - /* Group 2 64 bytes */ - UINT_8 aucReverved3[64]; - /* Group 3 64 bytes */ - UINT_8 aucReverved4[64]; - -}; - -#endif - - - -struct _P2P_FSM_INFO_T { - /* State related. */ - ENUM_P2P_STATE_T ePreviousState; - ENUM_P2P_STATE_T eCurrentState; - - /* Channel related. */ - P2P_CHNL_REQ_INFO_T rChnlReqInfo; - - /* Scan related. */ - P2P_SCAN_REQ_INFO_T rScanReqInfo; - - /* Connection related. */ - P2P_CONNECTION_REQ_INFO_T rConnReqInfo; - - /* Mgmt tx related. */ - P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo; - - /* Beacon related. */ - P2P_BEACON_UPDATE_INFO_T rBcnContentInfo; - - /* Probe Response related. */ - P2P_PROBE_RSP_UPDATE_INFO_T rProbeRspContentInfo; - - /* Assoc Rsp related. */ - P2P_ASSOC_RSP_UPDATE_INFO_T rAssocRspContentInfo; - - /* GC Join related. */ - P2P_JOIN_INFO_T rJoinInfo; - - /* FSM Timer */ - TIMER_T rP2pFsmTimeoutTimer; - - - /* GC Target BSS. */ - P_BSS_DESC_T prTargetBss; - - /* GC Connection Request. */ - BOOLEAN fgIsConnectionRequested; - - BOOLEAN fgIsApMode; - - /* Channel grant interval. */ - UINT_32 u4GrantInterval; - - /* Packet filter for P2P module. */ - UINT_32 u4P2pPacketFilter; - - //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Prepare for use vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - /* Msg event queue. */ - LINK_T rMsgEventQueue; - -#if CFG_SUPPORT_WFD - WFD_CFG_SETTINGS_T rWfdConfigureSettings; -#endif - -}; - - -/*---------------- Messages -------------------*/ -typedef struct _MSG_P2P_SCAN_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P_P2P_SSID_STRUCT_T prSSID; - INT_32 i4SsidNum; - UINT_32 u4NumChannel; - PUINT_8 pucIEBuf; - UINT_32 u4IELen; - BOOLEAN fgIsAbort; - RF_CHANNEL_INFO_T arChannelListInfo[1]; -} MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; - UINT_32 u4Duration; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; -#if 0//LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) - BOOLEAN fgNeedIndSupp; -#endif -} MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T; - -typedef struct _MSG_P2P_CHNL_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_64 u8Cookie; -} MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T; - - -typedef struct _MSG_P2P_CONNECTION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P2P_SSID_STRUCT_T rSsid; - UINT_8 aucBssid[MAC_ADDR_LEN]; - ENUM_CHNL_EXT_T eChnlSco; - RF_CHANNEL_INFO_T rChannelInfo; - UINT_32 u4IELen; - UINT_8 aucIEBuf[1]; - // TODO: Auth Type, OPEN, SHARED, FT, EAP... -} MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T; - - -typedef struct _MSG_P2P_CONNECTION_ABORT_T { - MSG_HDR_T rMsgHdr; /* Must be the first member. */ - UINT_8 aucTargetID[MAC_ADDR_LEN]; - UINT_16 u2ReasonCode; - BOOLEAN fgSendDeauth; -} MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T; -#if 0 -typedef struct _MSG_P2P_MGMT_TX_REQUEST_T { - MSG_HDR_T rMsgHdr; - P_MSDU_INFO_T prMgmtMsduInfo; - UINT_64 u8Cookie; /* For indication. */ - BOOLEAN fgNoneCckRate; - BOOLEAN fgIsWaitRsp; -} MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T; -#endif - -typedef struct _MSG_P2P_START_AP_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4DtimPeriod; - UINT_32 u4BcnInterval; - UINT_8 aucSsid[32]; - UINT_16 u2SsidLen; - UINT_8 ucHiddenSsidType; - BOOLEAN fgIsPrivacy; - AP_CRYPTO_SETTINGS_T rEncryptionSettings; - INT_32 i4InactiveTimeout; -} -MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T; - - -typedef struct _MSG_P2P_BEACON_UPDATE_T { - MSG_HDR_T rMsgHdr; - UINT_32 u4BcnHdrLen; - UINT_32 u4BcnBodyLen; - PUINT_8 pucBcnHdr; - PUINT_8 pucBcnBody; - UINT_8 aucBuffer[1]; /* Header & Body are put here. */ -} -MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T { - MSG_HDR_T rMsgHdr; - ENUM_BUFFER_TYPE_T eBufferType; - UINT_32 u4BufferLen; - UINT_8 aucBuffer[1]; -} MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T; - - -typedef struct _MSG_P2P_SWITCH_OP_MODE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - ENUM_OP_MODE_T eOpMode; -} MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T; - -typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_16 u2FrameType; - BOOLEAN fgIsRegister; -} -MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T; - -typedef struct _MSG_P2P_NETDEV_REGISTER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsEnable; - UINT_8 ucMode; -} MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T; - -#if CFG_SUPPORT_WFD -typedef struct _MSG_WFD_CONFIG_SETTINGS_CHANGED_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - P_WFD_CFG_SETTINGS_T prWfdCfgSettings; -} MSG_WFD_CONFIG_SETTINGS_CHANGED_T, *P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T; -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -p2pFsmStateTransition( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - - -VOID -p2pFsmRunEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFsmRunEventScanRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventMgmtFrameTx( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStartAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventNetDeviceRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventUpdateMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventStopAP( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChannelRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventChannelAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventDissolve( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -VOID -p2pFsmRunEventMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -#if CFG_SUPPORT_WFD -VOID -p2pFsmRunEventWfdSettingUpdate( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); -#endif - -#if 0 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - -//3 /* --------------- WFA P2P DEFAULT PARAMETERS --------------- */ -#define P2P_WILDCARD_SSID "DIRECT-" -#define P2P_WILDCARD_SSID_LEN 7 -#define P2P_GROUP_ID_LEN 9 - -#define P2P_DRIVER_VERSION 2 /* Update when needed. */ - -#define P2P_DEFAULT_DEV_NAME "Wireless Client" -#define P2P_DEFAULT_DEV_NAME_LEN 15 -#define P2P_DEFAULT_PRIMARY_CATEGORY_ID 10 -#define P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID 5 -#define P2P_DEFAULT_CONFIG_METHOD (WPS_ATTRI_CFG_METHOD_PUSH_BUTTON | WPS_ATTRI_CFG_METHOD_KEYPAD | WPS_ATTRI_CFG_METHOD_DISPLAY) -#define P2P_DEFAULT_LISTEN_CHANNEL 1 - -#define P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT 0 /* NOTE(Kevin): Shall <= 16 */ -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT 13 - -#define P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE 51 /* Contains 6 sub-band. */ - -#define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */ - -#define P2P_MAXIMUM_CLIENT_COUNT 8 -#define P2P_MAXIMUM_NOA_COUNT 8 - - -#define P2P_MAXIMUM_ATTRIBUTE_LEN 251 - -#define P2P_CTWINDOW_DEFAULT 25 /* in TU=(1024usec) */ - -#define P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE 768 - -/* P2P 3.1.2.1.3 - Find Phase */ -#define P2P_MAX_DISCOVERABLE_INTERVAL 8 //3//3 -#define P2P_MIN_DISCOVERABLE_INTERVAL 5 // 1 - -#define P2P_LISTEN_SCAN_UNIT 100 // MS - -/* FSM Time Related constrain. */ -#define P2P_SERACH_STATE_PERIOD_MS 1000 // Deprecated. - -#define P2P_GO_CHANNEL_STAY_INTERVAL 1000 - -#define P2P_GO_NEGO_TIMEOUT_MS 500 -#define P2P_CONNECTION_TIMEOUT_SEC 120 - -#define P2P_INVITAION_TIMEOUT_MS 500 /* Timeout Wait Invitation Resonse. */ -#define P2P_PROVISION_DISCOVERY_TIMEOUT_MS 500 /* Timeout Wait Provision Discovery Resonse. */ - -//3 /* --------------- WFA P2P IE --------------- */ -/* P2P 4.1.1 - P2P IE format */ -#define P2P_OUI_TYPE_LEN 4 -#define P2P_IE_OUI_HDR (ELEM_HDR_LEN + P2P_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */ - -/* P2P 4.1.1 - General P2P Attribute */ -#define P2P_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */ - -/* P2P 4.1.1 - P2P Attribute ID definitions */ -#define P2P_ATTRI_ID_STATUS 0 -#define P2P_ATTRI_ID_REASON_CODE 1 -#define P2P_ATTRI_ID_P2P_CAPABILITY 2 -#define P2P_ATTRI_ID_P2P_DEV_ID 3 -#define P2P_ATTRI_ID_GO_INTENT 4 -#define P2P_ATTRI_ID_CFG_TIMEOUT 5 -#define P2P_ATTRI_ID_LISTEN_CHANNEL 6 -#define P2P_ATTRI_ID_P2P_GROUP_BSSID 7 -#define P2P_ATTRI_ID_EXT_LISTEN_TIMING 8 -#define P2P_ATTRI_ID_INTENDED_P2P_IF_ADDR 9 -#define P2P_ATTRI_ID_P2P_MANAGEABILITY 10 -#define P2P_ATTRI_ID_CHANNEL_LIST 11 -#define P2P_ATTRI_ID_NOTICE_OF_ABSENCE 12 -#define P2P_ATTRI_ID_P2P_DEV_INFO 13 -#define P2P_ATTRI_ID_P2P_GROUP_INFO 14 -#define P2P_ATTRI_ID_P2P_GROUP_ID 15 -#define P2P_ATTRI_ID_P2P_INTERFACE 16 -#define P2P_ATTRI_ID_OPERATING_CHANNEL 17 -#define P2P_ATTRI_ID_INVITATION_FLAG 18 -#define P2P_ATTRI_ID_VENDOR_SPECIFIC 221 - -/* Maximum Length of P2P Attributes */ -#define P2P_ATTRI_MAX_LEN_STATUS 1 /* 0 */ -#define P2P_ATTRI_MAX_LEN_REASON_CODE 1 /* 1 */ -#define P2P_ATTRI_MAX_LEN_P2P_CAPABILITY 2 /* 2 */ -#define P2P_ATTRI_MAX_LEN_P2P_DEV_ID 6 /* 3 */ -#define P2P_ATTRI_MAX_LEN_GO_INTENT 1 /* 4 */ -#define P2P_ATTRI_MAX_LEN_CFG_TIMEOUT 2 /* 5 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#else - #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */ -#endif -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_BSSID 6 /* 7 */ -#define P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING 4 /* 8 */ -#define P2P_ATTRI_MAX_LEN_INTENDED_P2P_IF_ADDR 6 /* 9 */ -#define P2P_ATTRI_MAX_LEN_P2P_MANAGEABILITY 1 /* 10 */ -//#define P2P_ATTRI_MAX_LEN_CHANNEL_LIST 3 + (n* (2 + num_of_ch)) /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_LIST 3 /* 11 */ -#define P2P_ATTRI_LEN_CHANNEL_ENTRY 2 /* 11 */ - - -//#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE 2 + (n* (13)) /* 12 */ -#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE (2 + (P2P_MAXIMUM_NOA_COUNT*(13))) /* 12 */ - -#define P2P_ATTRI_MAX_LEN_P2P_DEV_INFO 17 + (8 * (8)) + 36 /* 13 */ -//#define P2P_ATTRI_MAX_LEN_P2P_GROUP_INFO n* (25 + (m* (8)) + 32) /* 14 */ -#define P2P_ATTRI_MAX_LEN_P2P_GROUP_ID 38 /* 15 */ -#define P2P_ATTRI_MAX_LEN_P2P_INTERFACE 253 // 7 + 6* [0~41] /* 16 */ -#if CID52_53_54 - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#else - #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */ -#endif -#define P2P_ATTRI_MAX_LEN_INVITATION_FLAGS 1 /* 18 */ - -/* P2P 4.1.2 - P2P Status definitions */ -#define P2P_STATUS_SUCCESS 0 -#define P2P_STATUS_FAIL_INFO_IS_CURRENTLY_UNAVAILABLE 1 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 2 -#define P2P_STATUS_FAIL_LIMIT_REACHED 3 -#define P2P_STATUS_FAIL_INVALID_PARAM 4 -#define P2P_STATUS_FAIL_UNABLE_ACCOMMODATE_REQ 5 -#define P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR 6 -#define P2P_STATUS_FAIL_NO_COMMON_CHANNELS 7 -#define P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP 8 -#define P2P_STATUS_FAIL_SAME_INTENT_VALUE_15 9 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD 10 -#define P2P_STATUS_FAIL_REJECTED_BY_USER 11 - - -/* P2P 4.1.3 - P2P Minor Reason Code definitions */ -#define P2P_REASON_SUCCESS 0 -#define P2P_REASON_DISASSOCIATED_DUE_CROSS_CONNECTION 1 -#define P2P_REASON_DISASSOCIATED_DUE_UNMANAGEABLE 2 -#define P2P_REASON_DISASSOCIATED_DUE_NO_P2P_COEXIST_PARAM 3 -#define P2P_REASON_DISASSOCIATED_DUE_MANAGEABLE 4 - - -/* P2P 4.1.4 - Device Capability Bitmap definitions */ -#define P2P_DEV_CAPABILITY_SERVICE_DISCOVERY BIT(0) -#define P2P_DEV_CAPABILITY_CLIENT_DISCOVERABILITY BIT(1) -#define P2P_DEV_CAPABILITY_CONCURRENT_OPERATION BIT(2) -#define P2P_DEV_CAPABILITY_P2P_INFRA_MANAGED BIT(3) -#define P2P_DEV_CAPABILITY_P2P_DEVICE_LIMIT BIT(4) -#define P2P_DEV_CAPABILITY_P2P_INVITATION_PROCEDURE BIT(5) - - -/* P2P 4.1.4 - Group Capability Bitmap definitions */ -#define P2P_GROUP_CAPABILITY_P2P_GROUP_OWNER BIT(0) -#define P2P_GROUP_CAPABILITY_PERSISTENT_P2P_GROUP BIT(1) -#define P2P_GROUP_CAPABILITY_P2P_GROUP_LIMIT BIT(2) -#define P2P_GROUP_CAPABILITY_INTRA_BSS_DISTRIBUTION BIT(3) -#define P2P_GROUP_CAPABILITY_CROSS_CONNECTION BIT(4) -#define P2P_GROUP_CAPABILITY_PERSISTENT_RECONNECT BIT(5) -#define P2P_GROUP_CAPABILITY_GROUP_FORMATION BIT(6) - -/* P2P 4.1.6 - GO Intent field definitions */ -#define P2P_GO_INTENT_TIE_BREAKER_FIELD BIT(0) -#define P2P_GO_INTENT_VALUE_MASK BITS(1,7) -#define P2P_GO_INTENT_VALUE_OFFSET 1 - -/* P2P 4.1.12 - Manageability Bitmap definitions */ -#define P2P_DEVICE_MANAGEMENT BIT(0) - -/* P2P 4.1.14 - CTWindow and OppPS Parameters definitions */ -#define P2P_CTW_OPPPS_PARAM_OPPPS_FIELD BIT(7) -#define P2P_CTW_OPPPS_PARAM_CTWINDOW_MASK BITS(0,6) - - -#define ELEM_MAX_LEN_P2P_FOR_PROBE_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_ID) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL)) - -#define ELEM_MAX_LEN_P2P_FOR_ASSOC_REQ \ - (P2P_OUI_TYPE_LEN + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING) + \ - (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_INFO)) - - -/* P2P 4.1.16 - P2P Client Infor Descriptor */ -#define P2P_CLIENT_INFO_DESC_HDR_LEN 1 /* Length(1 octets) */ - -/* P2P 4.1.20 - P2P Invitation Flags Attribute*/ -#define P2P_INVITATION_FLAGS_INVITATION_TYPE BIT(0) -#define P2P_INVITATION_TYPE_INVITATION 0 -#define P2P_INVITATION_TYPE_REINVOKE 1 -//3 /* --------------- WPS Data Element Definitions --------------- */ -/* P2P 4.2.2 - General WSC Attribute */ -#define WSC_ATTRI_HDR_LEN 4 /* ID(2 octet) + Length(2 octets) */ -#define WSC_ATTRI_MAX_LEN_VERSION 1 -#define WSC_ATTRI_MAX_LEN_DEVICE_PASSWORD_ID 2 -#define WSC_ATTRI_LEN_CONFIG_METHOD 2 - -/* WPS 11 - Data Element Definitions */ -#define WPS_ATTRI_ID_VERSION 0x104A -#define WPS_ATTRI_ID_CONFIGURATION_METHODS 0x1008 -#define WPS_ATTRI_ID_DEVICE_PASSWORD 0x1012 -#define WPS_ATTRI_ID_DEVICE_NAME 0x1011 -#define WPS_ATTRI_ID_PRI_DEVICE_TYPE 0x1054 -#define WPS_ATTRI_ID_SEC_DEVICE_TYPE 0x1055 - -#define WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE 300 - -#define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */ - -#define WPS_ATTRI_CFG_METHOD_USBA BIT(0) -#define WPS_ATTRI_CFG_METHOD_ETHERNET BIT(1) -#define WPS_ATTRI_CFG_METHOD_LABEL BIT(2) -#define WPS_ATTRI_CFG_METHOD_DISPLAY BIT(3) -#define WPS_ATTRI_CFG_METHOD_EXT_NFC BIT(4) -#define WPS_ATTRI_CFG_METHOD_INT_NFC BIT(5) -#define WPS_ATTRI_CFG_METHOD_NFC_IF BIT(6) -#define WPS_ATTRI_CFG_METHOD_PUSH_BUTTON BIT(7) -#define WPS_ATTRI_CFG_METHOD_KEYPAD BIT(8) - - -#define P2P_FLAGS_PROVISION_COMPLETE 0x00000001 -#define P2P_FLAGS_PROVISION_DISCOVERY_COMPLETE 0x00000002 -#define P2P_FLAGS_PROVISION_DISCOVERY_WAIT_RESPONSE 0x00000004 -#define P2P_FLAGS_PROVISION_DISCOVERY_RESPONSE_WAIT 0x00000008 -#define P2P_FLAGS_MASK_PROVISION 0x00000017 -#define P2P_FLAGS_MASK_PROVISION_COMPLETE 0x00000015 -#define P2P_FLAGS_PROVISION_DISCOVERY_INDICATED 0x00000010 -#define P2P_FLAGS_INVITATION_TOBE_GO 0x00000100 -#define P2P_FLAGS_INVITATION_TOBE_GC 0x00000200 -#define P2P_FLAGS_INVITATION_SUCCESS 0x00000400 -#define P2P_FLAGS_INVITATION_WAITING_TARGET 0x00000800 -#define P2P_FLAGS_MASK_INVITATION 0x00000F00 -#define P2P_FLAGS_FORMATION_ON_GOING 0x00010000 -#define P2P_FLAGS_FORMATION_LOCAL_PWID_RDY 0x00020000 -#define P2P_FLAGS_FORMATION_TARGET_PWID_RDY 0x00040000 -#define P2P_FLAGS_FORMATION_COMPLETE 0x00080000 -#define P2P_FLAGS_MASK_FORMATION 0x000F0000 -#define P2P_FLAGS_DEVICE_DISCOVER_REQ 0x00100000 -#define P2P_FLAGS_DEVICE_DISCOVER_DONE 0x00200000 -#define P2P_FLAGS_DEVICE_INVITATION_WAIT 0x00400000 -#define P2P_FLAGS_DEVICE_SERVICE_DISCOVER_WAIT 0x00800000 -#define P2P_FLAGS_MASK_DEVICE_DISCOVER 0x00F00000 - -#define P2P_FLAGS_DEVICE_FORMATION_REQUEST 0x01000000 - - -/* MACRO for flag operation */ -#define SET_FLAGS(_FlagsVar, _BitsToSet) \ - (_FlagsVar) = ((_FlagsVar) | (_BitsToSet)) - -#define TEST_FLAGS(_FlagsVar, _BitsToCheck) \ - (((_FlagsVar) & (_BitsToCheck)) == (_BitsToCheck)) - -#define CLEAR_FLAGS(_FlagsVar, _BitsToClear) \ - (_FlagsVar) &= ~(_BitsToClear) - - - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_I 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_II 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_III 0 - -#define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_IV 0 - -#define CFG_DISABLE_DELAY_PROVISION_DISCOVERY 0 - -#define CFG_CONNECTION_POLICY_2_0 0 - -/* Device Password ID */ -enum wps_dev_password_id { - DEV_PW_DEFAULT = 0x0000, - DEV_PW_USER_SPECIFIED = 0x0001, - DEV_PW_MACHINE_SPECIFIED = 0x0002, - DEV_PW_REKEY = 0x0003, - DEV_PW_PUSHBUTTON = 0x0004, - DEV_PW_REGISTRAR_SPECIFIED = 0x0005 -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -//3 /* --------------- WFA P2P IE and Attributes --------------- */ - -/* P2P 4.1.1 - P2P Information Element */ -typedef struct _IE_P2P_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 aucP2PAttributes[1]; /* P2P Attributes */ -} __KAL_ATTRIB_PACKED__ IE_P2P_T, *P_IE_P2P_T; - -/* P2P 4.1.1 - General P2P Attribute */ -typedef struct _P2P_ATTRIBUTE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRIBUTE_T, ATTRIBUTE_HDR_T, *P_P2P_ATTRIBUTE_T, *P_ATTRIBUTE_HDR_T; - - -/* P2P 4.1.2 - P2P Status Attribute */ -typedef struct _P2P_ATTRI_STATUS_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucStatusCode; /* Status Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_STATUS_T, *P_P2P_ATTRI_STATUS_T; - - -/* P2P 4.1.3 - P2P Minor Reason Code Attribute */ -typedef struct _P2P_ATTRI_REASON_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucMinorReasonCode; /* Minor Reason Code */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_REASON_T, *P_P2P_ATTRI_REASON_T; - - -/* P2P 4.1.4 - P2P Capability Attribute */ -typedef struct _P2P_ATTRI_CAPABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_8 ucGroupCap; /* Group Capability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CAPABILITY_T, *P_P2P_ATTRI_CAPABILITY_T; - - -/* P2P 4.1.5 - P2P Device ID Attribute */ -typedef struct _P2P_ATTRI_DEV_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_ID_T, *P_P2P_ATTRI_DEV_ID_T; - - -/* P2P 4.1.6 - Group Owner Intent Attribute */ -typedef struct _P2P_ATTRI_GO_INTENT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOIntent; /* Group Owner Intent */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GO_INTENT_T, *P_P2P_ATTRI_GO_INTENT_T; - - -/* P2P 4.1.7 - Configuration Timeout Attribute */ -typedef struct _P2P_ATTRI_CFG_TIMEOUT_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucGOCfgTimeout; /* GO Configuration Timeout */ - UINT_8 ucClientCfgTimeout; /* Client Configuration Timeout */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CFG_TIMEOUT_T, *P_P2P_ATTRI_CFG_TIMEOUT_T; - - -/* P2P 4.1.8 - Listen Channel Attribute */ -typedef struct _P2P_ATTRI_LISTEN_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_LISTEN_CHANNEL_T, *P_P2P_ATTRI_LISTEN_CHANNEL_T; - - -/* P2P 4.1.9 - P2P Group BSSID Attribute */ -typedef struct _P2P_ATTRI_GROUP_BSSID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBssid[MAC_ADDR_LEN]; /* P2P Group BSSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_BSSID_T, *P_P2P_ATTRI_GROUP_BSSID_T; - - -/* P2P 4.1.10 - Extended Listen Timing Attribute */ -typedef struct _P2P_ATTRI_EXT_LISTEN_TIMING_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2AvailPeriod; /* Availability Period */ - UINT_16 u2AvailInterval; /* Availability Interval */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_EXT_LISTEN_TIMING_T, *P_P2P_ATTRI_EXT_LISTEN_TIMING_T; - - -/* P2P 4.1.11 - Intended P2P Interface Address Attribute */ -typedef struct _P2P_ATTRI_INTENDED_IF_ADDR_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucIfAddr[MAC_ADDR_LEN];/* P2P Interface Address */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTENDED_IF_ADDR_T, *P_P2P_ATTRI_INTENDED_IF_ADDR_T; - - -/* P2P 4.1.12 - P2P Manageability Attribute */ -typedef struct _P2P_ATTRI_MANAGEABILITY_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucManageability; /* P2P Manageability Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_MANAGEABILITY_T, *P_P2P_ATTRI_MANAGEABILITY_T; - - -/* P2P 4.1.13 - Channel List Attribute */ -typedef struct _P2P_ATTRI_CHANNEL_LIST_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 aucChannelEntry[1]; /* Channel Entry List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_CHANNEL_T, *P_P2P_ATTRI_CHANNEL_T; - -typedef struct _CHANNEL_ENTRY_FIELD_T { - UINT_8 ucRegulatoryClass; /* Regulatory Class */ - UINT_8 ucNumberOfChannels; /* Number Of Channels */ - UINT_8 aucChannelList[1]; /* Channel List */ -} __KAL_ATTRIB_PACKED__ CHANNEL_ENTRY_FIELD_T, *P_CHANNEL_ENTRY_FIELD_T; - - -/* P2P 4.1.14 - Notice of Absence Attribute */ -typedef struct _P2P_ATTRI_NOA_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucIndex; /* Index */ - UINT_8 ucCTWOppPSParam; /* CTWindow and OppPS Parameters */ - UINT_8 aucNoADesc[1]; /* NoA Descriptor */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_NOA_T, *P_P2P_ATTRI_NOA_T; - -typedef struct _NOA_DESCRIPTOR_T { - UINT_8 ucCountType; /* Count/Type */ - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} __KAL_ATTRIB_PACKED__ NOA_DESCRIPTOR_T, *P_NOA_DESCRIPTOR_T; - -typedef struct _P2P_ATTRI_DEV_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_INFO_T, *P_P2P_ATTRI_DEV_INFO_T; - -/* WPS 7.1 & 11 WPS TLV Data Format - Device Name */ -typedef struct _DEVICE_NAME_TLV_T { - UINT_16 u2Id; /* WPS Attribute Type */ - UINT_16 u2Length; /* Data Length */ - UINT_8 aucName[32]; /* Device Name */ // TODO: Fixme -} __KAL_ATTRIB_PACKED__ DEVICE_NAME_TLV_T, *P_DEVICE_NAME_TLV_T; - - -/* P2P 4.1.16 - P2P Group Info Attribute */ -typedef struct _P2P_CLIENT_INFO_DESC_T { - UINT_8 ucLength; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucIfAddr[MAC_ADDR_LEN]; /* P2P Interface Address */ - UINT_8 ucDeviceCap; /* Device Capability Bitmap */ - UINT_16 u2ConfigMethodsBE; /* Config Method */ - DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */ - UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */ - DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */ -} __KAL_ATTRIB_PACKED__ P2P_CLIENT_INFO_DESC_T, *P_P2P_CLIENT_INFO_DESC_T; - -typedef struct _P2P_ATTRI_GROUP_INFO_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - P2P_CLIENT_INFO_DESC_T arClientDesc[1]; /* P2P Client Info Descriptors */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_INFO_T, *P_P2P_ATTRI_GROUP_INFO_T; - - -/* P2P 4.1.17 - P2P Group ID Attribute */ -typedef struct _P2P_ATTRI_GROUP_ID_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_ID_T, *P_P2P_ATTRI_GROUP_ID_T; - - -/* P2P 4.1.18 - P2P Interface Attribute */ -typedef struct _P2P_ATTRI_INTERFACE_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */ - UINT_8 ucIfAddrCount; /* P2P Interface Address Count */ - UINT_8 aucIfAddrList[MAC_ADDR_LEN];/* P2P Interface Address List */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTERFACE_T, *P_P2P_ATTRI_INTERFACE_T; - - -/* P2P 4.1.19 - Operating Channel Attribute */ -typedef struct _P2P_ATTRI_OPERATING_CHANNEL_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucCountryString[3]; /* Country String */ - UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */ - UINT_8 ucChannelNumber; /* Channel Number */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_OPERATING_CHANNEL_T, *P_P2P_ATTRI_OPERATING_CHANNEL_T; - -/* P2P 4.1.20 - Invitation Flags Attribute */ -typedef struct _P2P_ATTRI_INVITATION_FLAG_T { - UINT_8 ucId; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucInviteFlagsBitmap; /* Invitation Flags Bitmap */ -} __KAL_ATTRIB_PACKED__ P2P_ATTRI_INVITATION_FLAG_T, *P_P2P_ATTRI_INVITATION_FLAG_T; - - - -/* P2P 4.1.1 - General WSC Attribute */ -typedef struct _WSC_ATTRIBUTE_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRIBUTE_T, *P_WSC_ATTRIBUTE_T; - -/* WSC 1.0 Table 28 */ -typedef struct _WSC_ATTRI_VERSION_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_8 ucVersion; /* Version 1.0 or 1.1 */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_VERSION_T, *P_WSC_ATTRI_VERSION_T; - -typedef struct _WSC_ATTRI_DEVICE_PASSWORD_ID_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2DevPasswordId; /* Device Password ID */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_DEVICE_PASSWORD_ID_T, *P_WSC_ATTRI_DEVICE_PASSWORD_ID_T; - - -typedef struct _WSC_ATTRI_CONFIGURATION_METHOD_T { - UINT_16 u2Id; /* Attribute ID */ - UINT_16 u2Length; /* Length */ - UINT_16 u2ConfigMethods; /* Configure Methods */ -} __KAL_ATTRIB_PACKED__ WSC_ATTRI_CONFIGURATION_METHOD_T, *P_WSC_ATTRI_CONFIGURATION_METHOD_T; - - - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - - -//3 /* --------------- WFA P2P Attributes Handler prototype --------------- */ -typedef UINT_32 (*PFN_APPEND_ATTRI_FUNC)(P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16); - -typedef VOID (*PFN_HANDLE_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T); - -typedef VOID (*PFN_VERIFY_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T, PUINT_16); - -typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC)(P_ADAPTER_T, P_STA_RECORD_T); - - -typedef struct _APPEND_VAR_ATTRI_ENTRY_T { - UINT_16 u2EstimatedFixedAttriLen; /* For fixed length */ - PFN_CALCULATE_VAR_ATTRI_LEN_FUNC pfnCalculateVariableAttriLen; - PFN_APPEND_ATTRI_FUNC pfnAppendAttri; -} APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T; - -typedef enum _ENUM_CONFIG_METHOD_SEL { - ENUM_CONFIG_METHOD_SEL_AUTO, - ENUM_CONFIG_METHOD_SEL_USER, - ENUM_CONFIG_METHOD_SEL_NUM -} ENUM_CONFIG_METHOD_SEL, *P_ENUM_CONFIG_METHOD_SEL; - -typedef enum _ENUM_P2P_FORMATION_POLICY { - ENUM_P2P_FORMATION_POLICY_AUTO = 0, - ENUM_P2P_FORMATION_POLICY_PASSIVE, /* Device would wait GO NEGO REQ instead of sending it actively. */ - ENUM_P2P_FORMATION_POLICY_NUM -} ENUM_P2P_FORMATION_POLICY, P_ENUM_P2P_FORMATION_POLICY; - -typedef enum _ENUM_P2P_INVITATION_POLICY { - ENUM_P2P_INVITATION_POLICY_USER = 0, - ENUM_P2P_INVITATION_POLICY_ACCEPT_FIRST, - ENUM_P2P_INVITATION_POLICY_DENY_ALL, - ENUM_P2P_INVITATION_POLICY_NUM -} ENUM_P2P_INVITATION_POLICY, P_ENUM_P2P_INVITATION_POLICY; - -//3 /* --------------- Data Structure for P2P Operation --------------- */ -//3 /* Session for CONNECTION SETTINGS of P2P */ -struct _P2P_CONNECTION_SETTINGS_T { - UINT_8 ucDevNameLen; - UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME]; - - DEVICE_TYPE_T rPrimaryDevTypeBE; - - ENUM_P2P_FORMATION_POLICY eFormationPolicy; /* Formation Policy. */ - - /*------------WSC Related Param---------------*/ - UINT_16 u2ConfigMethodsSupport; /* Prefered configure method. - * Some device may not have keypad. - */ - ENUM_CONFIG_METHOD_SEL eConfigMethodSelType; - UINT_16 u2TargetConfigMethod; /* Configure method selected by user or auto. */ - UINT_16 u2LocalConfigMethod; /* Configure method of target. */ - BOOLEAN fgIsPasswordIDRdy; - /*------------WSC Related Param---------------*/ - - UINT_8 ucClientConfigTimeout; - UINT_8 ucGoConfigTimeout; - - UINT_8 ucSecondaryDevTypeCount; -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT]; -#endif - - -#if 0 - UINT_8 ucRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ - -#endif -#else - UINT_8 ucRfChannelListSize; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - UINT_8 aucChannelEntriesField[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; -#endif -#endif - - /* Go Intent */ - UINT_8 ucTieBreaker; - UINT_8 ucGoIntent; - - /* For Device Capability */ - BOOLEAN fgSupportServiceDiscovery; - BOOLEAN fgSupportClientDiscoverability; - BOOLEAN fgSupportConcurrentOperation; - BOOLEAN fgSupportInfraManaged; - BOOLEAN fgSupportInvitationProcedure; - - /* For Group Capability */ - BOOLEAN fgSupportPersistentP2PGroup; - BOOLEAN fgSupportIntraBSSDistribution; - BOOLEAN fgSupportCrossConnection; - BOOLEAN fgSupportPersistentReconnect; - - BOOLEAN fgP2pGroupLimit; - - BOOLEAN fgSupportOppPS; - UINT_16 u2CTWindow; - - BOOLEAN fgIsScanReqIssued; - BOOLEAN fgIsServiceDiscoverIssued; - - - /*============ Target Device Connection Settings ============*/ - - /* Discover Target Device Info. */ - BOOLEAN fgIsDevId; - BOOLEAN fgIsDevType; - - /* Encryption mode of Target Device */ - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - /* SSID - * 1. AP Mode, this is the desired SSID user specified. - * 2. Client Mode, this is the target SSID to be connected to. - */ - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - UINT_8 ucSSIDLen; - - /* Operating channel requested. */ - UINT_8 ucOperatingChnl; - ENUM_BAND_T eBand; - - /* Linten channel requested. */ - UINT_8 ucListenChnl; - - /* For device discover address/type. */ - UINT_8 aucTargetDevAddr[MAC_ADDR_LEN]; /* P2P Device Address, for P2P Device Discovery & P2P Connection. */ - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_DEVICE_DESC_T prTargetP2pDesc; -#endif - - UINT_8 ucLastStatus; /* P2P FSM would append status attribute according to this field. */ - - -#if !CFG_DISABLE_DELAY_PROVISION_DISCOVERY - UINT_8 ucLastDialogToken; - UINT_8 aucIndicateDevAddr[MAC_ADDR_LEN]; -#endif - -#if 0 - UINT_8 ucTargetRfChannelListCount; -#if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT - UINT_8 aucTargetChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */ -#endif -#endif - -}; - - -typedef struct _NOA_TIMING_T { - BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} NOA_TIMING_T, *P_NOA_TIMING_T; - -typedef enum _ENUM_P2P_IOCTL_T { - P2P_IOCTL_IDLE = 0, - P2P_IOCTL_DEV_DISCOVER, - P2P_IOCTL_INVITATION_REQ, - P2P_IOCTL_SERV_DISCOVER, - P2P_IOCTL_WAITING, - P2P_IOCTL_NUM -} ENUM_P2P_IOCTL_T; - - - -/*---------------- Service Discovery Related -------------------*/ -typedef enum _ENUM_SERVICE_TX_TYPE_T { - ENUM_SERVICE_TX_TYPE_BY_DA, - ENUM_SERVICE_TX_TYPE_BY_CHNL, - ENUM_SERVICE_TX_TYPE_NUM -} ENUM_SERVICE_TX_TYPE_T; - - -typedef struct _SERVICE_DISCOVERY_FRAME_DATA_T { - QUE_ENTRY_T rQueueEntry; - P_MSDU_INFO_T prSDFrame; - ENUM_SERVICE_TX_TYPE_T eServiceType; - UINT_8 ucSeqNum; - union { - - UINT_8 ucChannelNum; - UINT_8 aucPeerAddr[MAC_ADDR_LEN]; - } uTypeData; - BOOLEAN fgIsTxDoneIndicate; -} SERVICE_DISCOVERY_FRAME_DATA_T, *P_SERVICE_DISCOVERY_FRAME_DATA_T; - - - - -struct _P2P_FSM_INFO_T_DEPRECATED { - /* P2P FSM State */ - ENUM_P2P_STATE_T eCurrentState; - - /* Channel */ - BOOLEAN fgIsChannelRequested; - - - - - - - - - - - ENUM_P2P_STATE_T ePreviousState; - - ENUM_P2P_STATE_T eReturnState; /* Return state after current activity finished or abort. */ - - UINT_8 aucTargetIfAddr[PARAM_MAC_ADDR_LEN]; - P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */ - - P_STA_RECORD_T prTargetStaRec; - - BOOLEAN fgIsRsponseProbe; /* Indicate if P2P FSM can response probe request frame. */ - - /* Sequence number of requested message. */ - UINT_8 ucSeqNumOfReqMsg; /* Used for SAA FSM request message. */ - - /* Channel Privilege */ - UINT_8 ucSeqNumOfChReq; /* Used for Channel Request message. */ - - - UINT_8 ucSeqNumOfScnMsg; /* Used for SCAN FSM request message. */ - UINT_8 ucSeqNumOfCancelMsg; - - UINT_8 ucDialogToken; - UINT_8 ucRxDialogToken; - - /* Timer */ - TIMER_T rDeviceDiscoverTimer; /* For device discovery time of each discovery request from user.*/ - TIMER_T rOperationListenTimer; /* For Find phase under operational state. */ - TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */ - - TIMER_T rRejoinTimer; /* A timer used for Action frame timeout usage. */ - - - /* Flag to indicate Provisioning */ - BOOLEAN fgIsConnectionRequested; - - /* Current IOCTL. */ - ENUM_P2P_IOCTL_T eP2pIOCTL; - - UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */ - - /*--------SERVICE DISCOVERY--------*/ - QUE_T rQueueGASRx; /* Input Request/Response. */ - QUE_T rQueueGASTx; /* Output Response. */ - P_SERVICE_DISCOVERY_FRAME_DATA_T prSDRequest; - UINT_8 ucVersionNum; /* GAS packet sequence number for...Action Frame? */ - UINT_8 ucGlobalSeqNum; /* Sequence Number of RX SD packet. */ - /*--------Service DISCOVERY--------*/ - - /*--------DEVICE DISCOVERY---------*/ - UINT_8 aucTargetGroupID[PARAM_MAC_ADDR_LEN]; - UINT_16 u2TargetGroupSsidLen; - UINT_8 aucTargetSsid[32]; - UINT_8 aucSearchingP2pDevice[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDLToken; - /*----------------------------------*/ - - /* Indicating Peer Status. */ - UINT_32 u4Flags; - - /*Indicating current running mode.*/ - BOOLEAN fgIsApMode; - - - /*------------INVITATION------------*/ - ENUM_P2P_INVITATION_POLICY eInvitationRspPolicy; - /*----------------------------------*/ - -}; - - - -struct _P2P_SPECIFIC_BSS_INFO_T { - /* For GO(AP) Mode - Compose TIM IE */ - UINT_16 u2SmallestAID; - UINT_16 u2LargestAID; - UINT_8 ucBitmapCtrl; - //UINT_8 aucPartialVirtualBitmap[MAX_LEN_TIM_PARTIAL_BMP]; - - /* For GC/GO OppPS */ - BOOLEAN fgEnableOppPS; - UINT_16 u2CTWindow; - - /* For GC/GO NOA */ - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - NOA_TIMING_T arNoATiming[P2P_MAXIMUM_NOA_COUNT]; - - BOOLEAN fgIsNoaAttrExisted; - - /* For P2P Device */ - UINT_8 ucRegClass; /* Regulatory Class for channel. */ - UINT_8 ucListenChannel; /* Linten Channel only on channels 1, 6 and 11 in the 2.4 GHz. */ - - UINT_8 ucPreferredChannel; /* Operating Channel, should be one of channel list in p2p connection settings. */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_BAND_T eRfBand; - - /* Extened Listen Timing. */ - UINT_16 u2AvailabilityPeriod; - UINT_16 u2AvailabilityInterval; - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - UINT_16 u2IELenForBCN; - UINT_8 aucBeaconIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -// UINT_16 u2IELenForProbeRsp; -// UINT_8 aucProbeRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2IELenForAssocRsp; - UINT_8 aucAssocRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - -#else - UINT_16 u2AttributeLen; - UINT_8 aucAttributesCache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; - - UINT_16 u2WscAttributeLen; - UINT_8 aucWscAttributesCache[WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; -#endif - UINT_8 aucGroupID[MAC_ADDR_LEN]; - UINT_16 u2GroupSsidLen; - UINT_8 aucGroupSsid[ELEM_MAX_LEN_SSID]; - - PARAM_CUSTOM_NOA_PARAM_STRUC_T rNoaParam; - PARAM_CUSTOM_OPPPS_PARAM_STRUC_T rOppPsParam; - - UINT_16 u2WpaIeLen; - UINT_8 aucWpaIeBuffer[ELEM_HDR_LEN + ELEM_MAX_LEN_WPA]; - -}; - - - - - - - -typedef struct _MSG_P2P_DEVICE_DISCOVER_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4DevDiscoverTime; /* 0: Infinite, 1~X: in unit of MS. */ - BOOLEAN fgIsSpecificType; -#if CFG_ENABLE_WIFI_DIRECT - P2P_DEVICE_TYPE_T rTargetDeviceType; -#endif - UINT_8 aucTargetDeviceID[MAC_ADDR_LEN]; -} MSG_P2P_DEVICE_DISCOVER_T, *P_MSG_P2P_DEVICE_DISCOVER_T; - - - -typedef struct _MSG_P2P_INVITATION_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; /* Target Device ID to be invited. */ -} MSG_P2P_INVITATION_REQUEST_T, *P_MSG_P2P_INVITATION_REQUEST_T; - -typedef struct _MSG_P2P_FUNCTION_SWITCH_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - BOOLEAN fgIsFuncOn; -} MSG_P2P_FUNCTION_SWITCH_T, *P_MSG_P2P_FUNCTION_SWITCH_T; - -typedef struct _MSG_P2P_SERVICE_DISCOVERY_REQUEST_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 aucDeviceID[MAC_ADDR_LEN]; - BOOLEAN fgNeedTxDoneIndicate; - UINT_8 ucSeqNum; -} MSG_P2P_SERVICE_DISCOVERY_REQUEST_T, *P_MSG_P2P_SERVICE_DISCOVERY_REQUEST_T; - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define p2pChangeMediaState(_prAdapter, _eNewMediaState) \ - (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState = (_eNewMediaState)); - -#define ATTRI_ID(_fp) (((P_P2P_ATTRIBUTE_T) _fp)->ucId) -#define ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[0]) | \ - ((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[1] << 8)) - - -#define ATTRI_SIZE(_fp) (P2P_ATTRI_HDR_LEN + ATTRI_LEN(_fp)) - -#define P2P_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += ATTRI_SIZE(_pucAttriBuf)) ) - - -#define P2P_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WSC_ATTRI_ID(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[1])) - -#define WSC_ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[1])) - - -#define WSC_ATTRI_SIZE(_fp) (WSC_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp)) - -#define WSC_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WSC_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WSC_ATTRI_SIZE(_pucAttriBuf)) ) - -#define WSC_IE(_fp) ((P_IE_P2P_T) _fp) - - -#define WFD_ATTRI_ID(_fp) (((P_WFD_ATTRIBUTE_T) _fp)->ucElemID) - -#define WFD_ATTRI_LEN(_fp) \ - (((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \ - ((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[1])) - -#define WFD_ATTRI_SIZE(_fp) (WFD_ATTRI_HDR_LEN + WFD_ATTRI_LEN(_fp)) - -#define WFD_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \ - (_u2Offset) += WFD_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WFD_ATTRI_SIZE(_pucAttriBuf)) ) - - - - -#if DBG - #define ASSERT_BREAK(_exp) \ - { \ - if (!(_exp)) { \ - ASSERT(FALSE); \ - break; \ - } \ - } - -#else - #define ASSERT_BREAK(_exp) -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*======P2P State======*/ -VOID -p2pStateInit_LISTEN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prSP2pBssInfo, - IN UINT_8 ucListenChannel - ); - -VOID -p2pStateAbort_LISTEN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_SEARCH_SCAN( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtenstion - ); - -VOID -p2pStateAbort_GO_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_GC_OPERATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_CONFIGURATION( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecBssInfo - ); - -VOID -p2pStateAbort_CONFIGURATION( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateInit_JOIN( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pStateAbort_JOIN( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P Functions ======*/ - - -VOID -p2pFuncInitGO( - IN P_ADAPTER_T prAdapter - ); - - - - - -VOID -p2pFuncDisconnect( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -VOID -p2pFuncSwitchOPMode( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ); - -VOID -p2pFuncRunEventProvisioningComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -WLAN_STATUS -p2pFuncSetGroupID( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucGroupID, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen - ); - - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityReqFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - -WLAN_STATUS -p2pFuncSendDeviceDiscoverabilityRspFrame( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDestAddr[], - IN UINT_8 ucDialogToken - ); - - -UINT_8 -p2pFuncGetVersionNumOfSD( - IN P_ADAPTER_T prAdapter - ); - -/*====== P2P FSM ======*/ -VOID -p2pFsmRunEventConnectionRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryRequest( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventDeviceDiscoveryAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventRxGroupNegotiationReqFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventGroupNegotiationConfirmTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryRequestTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -WLAN_STATUS -p2pFsmRunEventProvisionDiscoveryResponseTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -WLAN_STATUS -p2pFsmRunEventInvitationRequestTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - - -VOID -p2pFsmRunEventRxDeauthentication( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxDisassociation( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventBeaconTimeout( - IN P_ADAPTER_T prAdapter - ); - - - -WLAN_STATUS -p2pFsmRunEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - - -#if 1 -#endif - - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmRunEventConnectionAbort( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionTrigger( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - - -VOID -p2pFsmRunEventP2PFunctionSwitch( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventChGrant( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventConnectionPause( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, - IN UINT_8 aucTargetAddr[] - ); - -VOID -p2pUpdateBssInfoForJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - -/*======Mail Box Event Message=====*/ - - -VOID -p2pFsmInit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmUninit( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pFsmSteps( - IN P_ADAPTER_T prAdapter, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStartGO( - IN P_ADAPTER_T prAdapter - ); - -VOID -p2pAssignSsid( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -VOID -p2pFsmRunEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -p2pFsmRunEventIOReqTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventSearchPeriodTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventFsmTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -p2pFsmRunEventRejoinTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - - - - -/*=============== P2P Function Related ================*/ - -/*=============== P2P Function Related ================*/ - - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -p2pTest( - IN P_ADAPTER_T prAdapter - ); -#endif /* CFG_TEST_WIFI_DIRECT_GO */ - - - - -VOID -p2pGenerateP2P_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateP2P_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -VOID -p2pGenerateP2P_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - - -UINT_32 -p2pCalculateP2P_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pCalculateP2P_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pCalculateP2P_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -VOID -p2pGenerateWSC_IEForProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -p2pGenerateWSC_IEForProbeReq( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_16 -p2pCalculateWSC_IELenForProbeReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -UINT_32 -p2pCalculateWSC_IELenForProbeResp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriStatus( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - - -UINT_32 -p2pAppendAttriCapability( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGoIntent( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriCfgTimeout( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriGroupBssid( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriDeviceIDForBeacon( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForProbeReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceIDForDeviceDiscoveryReq( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriListenChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriIntendP2pIfAddr( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pAppendAttriChannelList( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenChannelList( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriNoA( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenDeviceInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -p2pAppendAttriGroupInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pCalculateAttriLenGroupInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -UINT_32 -p2pAppendAttriP2pGroupID( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriOperatingChannel( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriInvitationFlag( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -VOID -p2pGenerateWscIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -UINT_32 -p2pAppendAttriWSCConfigMethod ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCVersion ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegReqDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -p2pAppendAttriWSCGONegRspDevPasswordId ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -WLAN_STATUS -p2pGetWscAttriList( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -WLAN_STATUS -p2pGetAttriList ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - - -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -p2pSendProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFsmRunEventRxProbeRequestFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxProbeResponseFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ); - -WLAN_STATUS -p2pRxPublicActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -p2pRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationRspFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -p2pFsmRunEventRxGroupNegotiationCfmFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -#if 0 // frog -BOOLEAN -scanMatchFilterOfP2P ( - IN P_SW_RFB_T prSWRfb, - IN PP_BSS_DESC_T pprBssDesc - ); -#endif // frog - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -VOID -p2pFuncCompleteIOCTL( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rWlanStatus - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#ifndef _lint -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -p2pDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(IE_P2P_T) == (2+4+1)); // all UINT_8 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRIBUTE_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_STATUS_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_REASON_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CAPABILITY_T) == (3+2)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_ID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GO_INTENT_T) == (3+1)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CFG_TIMEOUT_T) == (3+2)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5)); -#endif - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_BSSID_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_EXT_LISTEN_TIMING_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTENDED_IF_ADDR_T) == (3+6)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_MANAGEABILITY_T) == (3+1)); - - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CHANNEL_T) == (3+4)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(CHANNEL_ENTRY_FIELD_T) == 3); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_NOA_T) == (3+3)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(NOA_DESCRIPTOR_T) == 13); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_TYPE_T) == 8); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_INFO_T) == (3+6+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_NAME_TLV_T) == (4+32)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_CLIENT_INFO_DESC_T) == (1+6+6+1+2+8+1+8)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_INFO_T) == (3+(1+6+6+1+2+8+1+8))); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_ID_T) == (3+38)); - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTERFACE_T) == (3+13)); -#if CID52_53_54 - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#else - DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5)); -#endif - - - return; -} -#endif /* _lint */ - -#endif /* _P2P_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_func.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_func.h deleted file mode 100755 index 8f476e88c490..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_func.h +++ /dev/null @@ -1,340 +0,0 @@ -#ifndef _P2P_FUNC_H -#define _P2P_FUNC_H - - -VOID -p2pFuncRequestScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - -VOID -p2pFuncCancelScan( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - - -VOID -p2pFuncStartGO( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ); - - - -VOID -p2pFuncAcquireCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - - -VOID -p2pFuncReleaseCh( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -p2pFuncSetChannel( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ); - - -BOOLEAN -p2pFuncRetryJOIN( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ); - -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ); - - -WLAN_STATUS -p2pFuncTxMgmtFrame( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ); - -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ); - - -BOOLEAN -p2pFuncValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -p2pFuncValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - - -VOID -p2pFuncResetStaRecStatus( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncInitConnectionSettings( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ); - - -BOOLEAN -p2pFuncParseCheckForP2PInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -BOOLEAN -p2pFuncValidateProbeReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -p2pFuncValidateRxActionFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -p2pFuncIsAPMode( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - - -VOID -p2pFuncParseBeaconContent( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ); - - -P_BSS_DESC_T -p2pFuncKeepOnConnection( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ); - - -VOID -p2pFuncStoreAssocRspIEBuffer( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -p2pFuncMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ); - -VOID -p2pFuncUpdateMgmtFrameRegister( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ); - - -VOID -p2pFuncGetStationInfo( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ); - -BOOLEAN -p2pFuncGetAttriList( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ); - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ); - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateExtra_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pFuncGenerateP2p_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateWSC_IEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -p2pFuncGenerateP2p_IEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -p2pFuncCalculateP2P_IELen( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - -VOID -p2pFuncGenerateP2P_IE( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ); - - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - - -UINT_32 -p2pFuncAppendAttriExtListenTiming( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -VOID -p2pFuncDissolve( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - - -P_IE_HDR_T -p2pFuncGetSpecIE( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ); - - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_16 u2AttriID - ); - -BOOLEAN -p2pFuncIsChannelGrant( - IN P_ADAPTER_T prAdapter - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_ie.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_ie.h deleted file mode 100755 index fcd216b79e82..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_ie.h +++ /dev/null @@ -1,234 +0,0 @@ -#ifndef _P2P_IE_H -#define _P2P_IE_H - -#if CFG_SUPPORT_WFD - -#define ELEM_MAX_LEN_WFD 62 // TODO: Move to appropriate place - - -/*---------------- WFD Data Element Definitions ----------------*/ -/* WFD 4.1.1 - WFD IE format */ -#define WFD_OUI_TYPE_LEN 4 -#define WFD_IE_OUI_HDR (ELEM_HDR_LEN + WFD_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */ - -/* WFD 4.1.1 - General WFD Attribute */ -#define WFD_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */ - -/* WFD Attribute Code */ -#define WFD_ATTRI_ID_DEV_INFO 0 -#define WFD_ATTRI_ID_ASSOC_BSSID 1 -#define WFD_ATTRI_ID_COUPLED_SINK_INFO 6 -#define WFD_ATTRI_ID_EXT_CAPABILITY 7 -#define WFD_ATTRI_ID_SESSION_INFO 9 -#define WFD_ATTRI_ID_ALTER_MAC_ADDRESS 10 - -/* Maximum Length of WFD Attributes */ -#define WFD_ATTRI_MAX_LEN_DEV_INFO 6 /* 0 */ -#define WFD_ATTRI_MAX_LEN_ASSOC_BSSID 6 /* 1 */ -#define WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO 7 /* 6 */ -#define WFD_ATTRI_MAX_LEN_EXT_CAPABILITY 2 /* 7 */ -#define WFD_ATTRI_MAX_LEN_SESSION_INFO 0 /* 9 */ /* 24 * #Clients */ -#define WFD_ATTRI_MAX_LEN_ALTER_MAC_ADDRESS 6 /* 10 */ - - - - - -/* WFD 1.10 5.1.1 */ -typedef struct _IE_WFD_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 aucWFDAttributes[1]; /* WFD Subelement */ -} __KAL_ATTRIB_PACKED__ IE_WFD_T, *P_IE_WFD_T; - -typedef struct _WFD_ATTRIBUTE_T { - UINT_8 ucElemID; /* Subelement ID */ - UINT_16 u2Length; /* Length */ - UINT_8 aucBody[1]; /* Body field */ -} __KAL_ATTRIB_PACKED__ WFD_ATTRIBUTE_T, *P_WFD_ATTRIBUTE_T; - -typedef struct _WFD_DEVICE_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_16 u2WfdDevInfo; - UINT_16 u2SessionMgmtCtrlPort; - UINT_16 u2WfdDevMaxSpeed; -} __KAL_ATTRIB_PACKED__ WFD_DEVICE_INFORMATION_IE_T, *P_WFD_DEVICE_INFORMATION_IE_T; - -typedef struct _WFD_ASSOCIATED_BSSID_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_8 aucAssocBssid[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_ASSOCIATED_BSSID_IE_T, *P_WFD_ASSOCIATED_BSSID_IE_T; - -typedef struct _WFD_COUPLE_SINK_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_8 ucCoupleSinkStatusBp; - UINT_8 aucCoupleSinkMac[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_COUPLE_SINK_INFORMATION_IE_T, *P_WFD_COUPLE_SINK_INFORMATION_IE_T; - -typedef struct _WFD_EXTENDED_CAPABILITY_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - UINT_16 u2WfdExtCapabilityBp; -} -__KAL_ATTRIB_PACKED__ WFD_EXTENDED_CAPABILITY_IE_T, *P_WFD_EXTENDED_CAPABILITY_IE_T; - -typedef struct _WFD_SESSION_INFORMATION_IE_T { - UINT_8 ucElemID; - UINT_16 u2Length; - PUINT_8 pucWfdDevInfoDesc[1]; -} __KAL_ATTRIB_PACKED__ WFD_SESSION_INFORMATION_IE_T, *P_WFD_SESSION_INFORMATION_IE_T; - -typedef struct _WFD_DEVICE_INFORMATION_DESCRIPTOR_T { - UINT_8 ucLength; - UINT_8 aucDevAddr[MAC_ADDR_LEN]; - UINT_8 aucAssocBssid[MAC_ADDR_LEN]; - UINT_16 u2WfdDevInfo; - UINT_16 u2WfdDevMaxSpeed; - UINT_8 ucCoupleSinkStatusBp; - UINT_8 aucCoupleSinkMac[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WFD_DEVICE_INFORMATION_DESCRIPTOR_T, *P_WFD_DEVICE_INFORMATION_DESCRIPTOR_T; - - -#endif - - -UINT_32 -p2pCalculate_IEForAssocReq( - - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -p2pGenerate_IEForAssocReq( - - - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#if CFG_SUPPORT_WFD - -UINT_32 -wfdFuncAppendAttriDevInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriAssocBssid( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriCoupledSinkInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncAppendAttriExtCapability( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncCalculateAttriLenSessionInfo( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_32 -wfdFuncAppendAttriSessionInfo( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ); - -UINT_32 -wfdFuncCalculateWfdIELenForProbeResp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - -VOID -wfdFuncGenerateWfdIEForProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -wfdFuncCalculateWfdIELenForAssocReq( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -UINT_32 -wfdFuncCalculateWfdIELenForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForAssocRsp( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -UINT_32 -wfdFuncCalculateWfdIELenForBeacon( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - -VOID -wfdFuncGenerateWfdIEForBeacon( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -#endif - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_rlm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_rlm.h deleted file mode 100755 index 1dcd6201a0d4..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_rlm.h +++ /dev/null @@ -1,149 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm.h#1 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _P2P_RLM_H -#define _P2P_RLM_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -VOID -rlmFuncInitialChannelList( - IN P_ADAPTER_T prAdapter - ); - -VOID -rlmFuncCommonChannelList( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ); - -UINT_8 -rlmFuncFindOperatingClass( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ); - -BOOLEAN -rlmFuncFindAvailableChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ); - -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_rlm_obss.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_rlm_obss.h deleted file mode 100755 index 9d3534fa359c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_rlm_obss.h +++ /dev/null @@ -1,133 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -#ifndef _P2P_RLM_OBSS_H -#define _P2P_RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_scan.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_scan.h deleted file mode 100755 index 1837c52fd31f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_scan.h +++ /dev/null @@ -1,167 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_scan.h#1 $ -*/ - -/*! \file "scan.h" - \brief - -*/ - - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -#ifndef _P2P_SCAN_H -#define _P2P_SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ); - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ); - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scnEventReturnChannel( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ); - -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -VOID -scanRemoveAllP2pBssDesc( - P_ADAPTER_T prAdapter - ); - -VOID -scanRemoveP2pBssDesc( - P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - - -P_BSS_DESC_T -scanP2pSearchDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ); - - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_state.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_state.h deleted file mode 100755 index 22bcf1798ce3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/p2p_state.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef _P2P_STATE_H -#define _P2P_STATE_H - -BOOLEAN -p2pStateInit_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ); - - -VOID -p2pStateAbort_IDLE( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_SCAN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_AP_CHANNEL_DETECT( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -VOID -p2pStateInit_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -VOID -p2pStateAbort_CHNL_ON_HAND( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateAbort_REQING_CHANNEL( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ); - - -VOID -p2pStateInit_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -p2pStateAbort_GC_JOIN( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/privacy.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/privacy.h deleted file mode 100755 index 9114d4a94179..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/privacy.h +++ /dev/null @@ -1,328 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/privacy.h#1 $ -*/ - -/*! \file privacy.h - \brief This file contains the function declaration for privacy.c. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: privacy.h $ - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for auth mode and encryption status setting from build connection command - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for wapi - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the tx done callback handle function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function declaration for mac header privacy bit setting - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the structure for parsing the EAPoL frame - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the class error function parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection structure - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _PRIVACY_H -#define _PRIVACY_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_KEY_NUM 4 -#define WEP_40_LEN 5 -#define WEP_104_LEN 13 -#define LEGACY_KEY_MAX_LEN 16 -#define CCMP_KEY_LEN 16 -#define TKIP_KEY_LEN 32 -#define MAX_KEY_LEN 32 -#define MIC_RX_KEY_OFFSET 16 -#define MIC_TX_KEY_OFFSET 24 -#define MIC_KEY_LEN 8 - -#define WEP_KEY_ID_FIELD BITS(0,29) -#define KEY_ID_FIELD BITS(0,7) - -#define IS_TRANSMIT_KEY BIT(31) -#define IS_UNICAST_KEY BIT(30) -#define IS_AUTHENTICATOR BIT(28) - -#define CIPHER_SUITE_NONE 0 -#define CIPHER_SUITE_WEP40 1 -#define CIPHER_SUITE_TKIP 2 -#define CIPHER_SUITE_TKIP_WO_MIC 3 -#define CIPHER_SUITE_CCMP 4 -#define CIPHER_SUITE_WEP104 5 -#define CIPHER_SUITE_BIP 6 -#define CIPHER_SUITE_WEP128 7 -#define CIPHER_SUITE_WPI 8 - -#define WPA_KEY_INFO_KEY_TYPE BIT(3) /* 1 = Pairwise, 0 = Group key */ -#define WPA_KEY_INFO_MIC BIT(8) -#define WPA_KEY_INFO_SECURE BIT(9) - -#define MASK_2ND_EAPOL (WPA_KEY_INFO_KEY_TYPE | WPA_KEY_INFO_MIC) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _IEEE_802_1X_HDR { - UINT_8 ucVersion; - UINT_8 ucType; - UINT_16 u2Length; - /* followed by length octets of data */ -} IEEE_802_1X_HDR, *P_IEEE_802_1X_HDR; - -typedef struct _EAPOL_KEY { - UINT_8 ucType; - /* Note: key_info, key_length, and key_data_length are unaligned */ - UINT_8 aucKeyInfo[2]; /* big endian */ - UINT_8 aucKeyLength[2]; /* big endian */ - UINT_8 aucReplayCounter[8]; - UINT_8 aucKeyNonce[16]; - UINT_8 aucKeyIv[16]; - UINT_8 aucKeyRsc[8]; - UINT_8 aucKeyId[8]; /* Reserved in IEEE 802.11i/RSN */ - UINT_8 aucKeyMic[16]; - UINT_8 aucKeyDataLength[2]; /* big endian */ - /* followed by key_data_length bytes of key_data */ -} EAPOL_KEY, *P_EAPOL_KEY; - -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; - -#if 0 -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -secInit( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ); - -VOID -secSetPortBlocked( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPort - ); - -BOOL -secCheckClassError( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ); - -BOOL -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ); - -BOOLEAN -secRxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -secSetCipherSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ); - -BOOL -secProcessEAPOL( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen - ); - -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T pMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ); - -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ); - -VOID -secClearPmkid( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secRsnKeyHandshakeEnabled( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -secTransmitKeyExist( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secEnabledInAis( - IN P_ADAPTER_T prAdapter - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRIVACY_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rate.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rate.h deleted file mode 100755 index be6db88575cb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rate.h +++ /dev/null @@ -1,151 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/rate.h#1 $ -*/ - -/*! \file rate.h - \brief This file contains the rate utility function of - IEEE 802.11 family for MediaTek 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rate.h $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * -*/ - -#ifndef _RATE_H -#define _RATE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in rate.c */ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ); - -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ); - -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ); - -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RATE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm.h deleted file mode 100755 index c2419e7a2fd7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm.h +++ /dev/null @@ -1,491 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/rlm.h#1 $ -*/ - -/*! \file "rlm.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cm.chang - * [WCXRP00000114] [MT6620 Wi-Fi] [Driver] Fix compiling warning in Linux about RLM network index checking - * Enum member cannot be used as compiling option decision in Linux - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX HT GF compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 17 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * MT6620 does not support L-SIG TXOP - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Move default value of HT capability to rlm.h - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Modify the prototype of rlmRecAssocRspHtInfo() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add several function prototypes for HT operation - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -#ifndef _RLM_H -#define _RLM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ELEM_EXT_CAP_DEFAULT_VAL \ - (ELEM_EXT_CAP_20_40_COEXIST_SUPPORT /*| ELEM_EXT_CAP_PSMP_CAP*/) - - -#if CFG_SUPPORT_RX_STBC - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_1_SS -#else - #define FIELD_HT_CAP_INFO_RX_STBC HT_CAP_INFO_RX_STBC_NO_SUPPORTED -#endif - -#if CFG_SUPPORT_RX_SGI - #define FIELD_HT_CAP_INFO_SGI_20M HT_CAP_INFO_SHORT_GI_20M - #define FIELD_HT_CAP_INFO_SGI_40M HT_CAP_INFO_SHORT_GI_40M -#else - #define FIELD_HT_CAP_INFO_SGI_20M 0 - #define FIELD_HT_CAP_INFO_SGI_40M 0 -#endif - -#if CFG_SUPPORT_RX_HT_GF - #define FIELD_HT_CAP_INFO_HT_GF HT_CAP_INFO_HT_GF -#else - #define FIELD_HT_CAP_INFO_HT_GF 0 -#endif - -#define HT_CAP_INFO_DEFAULT_VAL \ - (HT_CAP_INFO_SUP_CHNL_WIDTH | FIELD_HT_CAP_INFO_HT_GF | \ - FIELD_HT_CAP_INFO_SGI_20M | FIELD_HT_CAP_INFO_SGI_40M | \ - FIELD_HT_CAP_INFO_RX_STBC | HT_CAP_INFO_DSSS_CCK_IN_40M) - - - -#define AMPDU_PARAM_DEFAULT_VAL \ - (AMPDU_PARAM_MAX_AMPDU_LEN_64K | AMPDU_PARAM_MSS_NO_RESTRICIT) - - -#define SUP_MCS_TX_DEFAULT_VAL \ - SUP_MCS_TX_SET_DEFINED /* TX defined and TX/RX equal (TBD) */ - -#if CFG_SUPPORT_MFB - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_BOTH -#else - #define FIELD_HT_EXT_CAP_MFB HT_EXT_CAP_MCS_FEEDBACK_NO_FB -#endif - -#if CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_RDR HT_EXT_CAP_RD_RESPONDER -#else - #define FIELD_HT_EXT_CAP_RDR 0 -#endif - -#if CFG_SUPPORT_MFB || CFG_SUPPORT_RX_RDG - #define FIELD_HT_EXT_CAP_HTC HT_EXT_CAP_HTC_SUPPORT -#else - #define FIELD_HT_EXT_CAP_HTC 0 -#endif - -#define HT_EXT_CAP_DEFAULT_VAL \ - (HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE | \ - FIELD_HT_EXT_CAP_MFB | FIELD_HT_EXT_CAP_HTC | \ - FIELD_HT_EXT_CAP_RDR) - -#define TX_BEAMFORMING_CAP_DEFAULT_VAL 0 -#define ASEL_CAP_DEFAULT_VAL 0 - - -/* Define bandwidth from user setting */ -#define CONFIG_BW_20_40M 0 -#define CONFIG_BW_20M 1 /* 20MHz only */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* It is used for RLM module to judge if specific network is valid - * Note: Ad-hoc mode of AIS is not included now. (TBD) - */ -#define RLM_NET_PARAM_VALID(_prBssInfo) \ - (IS_BSS_ACTIVE(_prBssInfo) && \ - ((_prBssInfo)->eConnectionState == PARAM_MEDIA_STATE_CONNECTED || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_ACCESS_POINT || \ - (_prBssInfo)->eCurrentOPMode == OP_MODE_IBSS || \ - RLM_NET_IS_BOW(_prBssInfo)) \ - ) - -#define RLM_NET_IS_11N(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11N) -#define RLM_NET_IS_11GN(_prBssInfo) \ - ((_prBssInfo)->ucPhyTypeSet & PHY_TYPE_SET_802_11GN) - - -/* This macro is used to sweep all 3 networks */ -#define RLM_NET_FOR_EACH(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_INDEX_NUM; \ - (_ucNetIdx)++) - -/* This macro is used to sweep all networks excluding BOW */ -#if CFG_ENABLE_BT_OVER_WIFI - /* Note: value of enum NETWORK_TYPE_BOW_INDEX is validated in - * rlmStuctureCheck(). - */ - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) \ - for ((_ucNetIdx) = 0; \ - (_ucNetIdx) < NETWORK_TYPE_BOW_INDEX; \ - (_ucNetIdx)++) - - #define RLM_NET_IS_BOW(_prBssInfo) \ - ((_prBssInfo)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) - -#else - #define RLM_NET_FOR_EACH_NO_BOW(_ucNetIdx) RLM_NET_FOR_EACH(_ucNetIdx) - #define RLM_NET_IS_BOW(_prBssInfo) (FALSE) - -#endif /* end of CFG_ENABLE_BT_OVER_WIFI */ - - -/* The bandwidth modes are not used anymore. They represent if AP - * can use 20/40 bandwidth, not all modes. (20110411) - */ -#define RLM_AP_IS_BW_40_ALLOWED(_prAdapter, _prBssInfo) \ - (((_prBssInfo)->eBand == BAND_2G4 && \ - (_prAdapter)->rWifiVar.rConnSettings.uc2G4BandwidthMode \ - == CONFIG_BW_20_40M) || \ - ((_prBssInfo)->eBand == BAND_5G && \ - (_prAdapter)->rWifiVar.rConnSettings.uc5GBandwidthMode \ - == CONFIG_BW_20_40M)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#ifndef _lint -__KAL_INLINE__ VOID -rlmDataTypeCheck ( - VOID - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_AIS_INDEX < NETWORK_TYPE_BOW_INDEX); - - #if CFG_ENABLE_WIFI_DIRECT - DATA_STRUC_INSPECTING_ASSERT( - NETWORK_TYPE_P2P_INDEX < NETWORK_TYPE_BOW_INDEX); - #endif -#endif - - return; -} -#endif /* _lint */ - -#endif /* _RLM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_domain.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_domain.h deleted file mode 100755 index 73f57d62c215..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_domain.h +++ /dev/null @@ -1,398 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/rlm_domain.h#1 $ -*/ - -/*! \file "rlm_domain.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm_domain.h $ - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Declare public rDomainInfo - * -** -*/ - -#ifndef _RLM_DOMAIN_H -#define _RLM_DOMAIN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SUBBAND_NUM 6 - - -#define COUNTRY_CODE_NULL ((UINT_16)0x0) - -/* ISO/IEC 3166-1 two-character country codes */ -#define COUNTRY_CODE_AG (((UINT_16) 'A' << 8) | (UINT_16) 'G') /* Antigua/Barbuda */ -#define COUNTRY_CODE_AI (((UINT_16) 'A' << 8) | (UINT_16) 'I') /* Anguilla */ -#define COUNTRY_CODE_AR (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Argentina */ -#define COUNTRY_CODE_AT (((UINT_16) 'A' << 8) | (UINT_16) 'T') /* Austria */ -#define COUNTRY_CODE_AU (((UINT_16) 'A' << 8) | (UINT_16) 'U') /* Australia */ -#define COUNTRY_CODE_AW (((UINT_16) 'A' << 8) | (UINT_16) 'W') /* Aruba */ -#define COUNTRY_CODE_BB (((UINT_16) 'B' << 8) | (UINT_16) 'B') /* Barbados */ -#define COUNTRY_CODE_BE (((UINT_16) 'B' << 8) | (UINT_16) 'E') /* Belgium */ -#define COUNTRY_CODE_BM (((UINT_16) 'B' << 8) | (UINT_16) 'M') /* Bermuda */ -#define COUNTRY_CODE_BO (((UINT_16) 'B' << 8) | (UINT_16) 'O') /* Bolivia */ -#define COUNTRY_CODE_BR (((UINT_16) 'B' << 8) | (UINT_16) 'R') /* Brazil */ -#define COUNTRY_CODE_BS (((UINT_16) 'B' << 8) | (UINT_16) 'S') /* Bahamas */ -#define COUNTRY_CODE_BY (((UINT_16) 'B' << 8) | (UINT_16) 'Y') /* Belarus */ -#define COUNTRY_CODE_CA (((UINT_16) 'C' << 8) | (UINT_16) 'A') /* Canada */ -#define COUNTRY_CODE_CH (((UINT_16) 'C' << 8) | (UINT_16) 'H') /* Switzerland */ -#define COUNTRY_CODE_CL (((UINT_16) 'C' << 8) | (UINT_16) 'L') /* Chile */ -#define COUNTRY_CODE_CN (((UINT_16) 'C' << 8) | (UINT_16) 'N') /* China */ -#define COUNTRY_CODE_CO (((UINT_16) 'C' << 8) | (UINT_16) 'O') /* Colombia */ -#define COUNTRY_CODE_CR (((UINT_16) 'C' << 8) | (UINT_16) 'R') /* Costa Rica */ -#define COUNTRY_CODE_CU (((UINT_16) 'C' << 8) | (UINT_16) 'U') /* Cuba */ -#define COUNTRY_CODE_DE (((UINT_16) 'D' << 8) | (UINT_16) 'E') /* Germany */ -#define COUNTRY_CODE_DK (((UINT_16) 'D' << 8) | (UINT_16) 'K') /* Denmark */ -#define COUNTRY_CODE_DM (((UINT_16) 'D' << 8) | (UINT_16) 'M') /* Dominica */ -#define COUNTRY_CODE_DO (((UINT_16) 'D' << 8) | (UINT_16) 'O') /* Dominican Republic */ -#define COUNTRY_CODE_EC (((UINT_16) 'E' << 8) | (UINT_16) 'C') /* Ecuador */ -#define COUNTRY_CODE_EG (((UINT_16) 'E' << 8) | (UINT_16) 'G') /* Egypt */ -#define COUNTRY_CODE_ES (((UINT_16) 'E' << 8) | (UINT_16) 'S') /* Spain */ -#define COUNTRY_CODE_EU (((UINT_16) 'E' << 8) | (UINT_16) 'U') /* ETSI (Europe) */ -#define COUNTRY_CODE_FI (((UINT_16) 'F' << 8) | (UINT_16) 'I') /* Finland */ -#define COUNTRY_CODE_FR (((UINT_16) 'F' << 8) | (UINT_16) 'R') /* France */ -#define COUNTRY_CODE_GB (((UINT_16) 'G' << 8) | (UINT_16) 'B') /* United Kingdom */ -#define COUNTRY_CODE_GD (((UINT_16) 'G' << 8) | (UINT_16) 'D') /* Grenada */ -#define COUNTRY_CODE_GR (((UINT_16) 'G' << 8) | (UINT_16) 'R') /* Greece */ -#define COUNTRY_CODE_GY (((UINT_16) 'G' << 8) | (UINT_16) 'Y') /* Guyana */ -#define COUNTRY_CODE_HK (((UINT_16) 'H' << 8) | (UINT_16) 'K') /* Hong Kong */ -#define COUNTRY_CODE_HT (((UINT_16) 'H' << 8) | (UINT_16) 'T') /* Haiti */ -#define COUNTRY_CODE_HN (((UINT_16) 'H' << 8) | (UINT_16) 'N') /* Honduras */ -#define COUNTRY_CODE_ID (((UINT_16) 'I' << 8) | (UINT_16) 'D') /* Indonesia */ -#define COUNTRY_CODE_IE (((UINT_16) 'I' << 8) | (UINT_16) 'E') /* Ireland */ -#define COUNTRY_CODE_IL (((UINT_16) 'I' << 8) | (UINT_16) 'L') /* Israel */ -#define COUNTRY_CODE_IN (((UINT_16) 'I' << 8) | (UINT_16) 'N') /* India */ -#define COUNTRY_CODE_IR (((UINT_16) 'I' << 8) | (UINT_16) 'R') /* Iran */ -#define COUNTRY_CODE_IS (((UINT_16) 'I' << 8) | (UINT_16) 'S') /* Iceland */ -#define COUNTRY_CODE_IT (((UINT_16) 'I' << 8) | (UINT_16) 'T') /* Italy */ -#define COUNTRY_CODE_JM (((UINT_16) 'J' << 8) | (UINT_16) 'M') /* Jamaica */ -#define COUNTRY_CODE_JO (((UINT_16) 'J' << 8) | (UINT_16) 'O') /* Jordan */ -#define COUNTRY_CODE_JP (((UINT_16) 'J' << 8) | (UINT_16) 'P') /* Japan */ -#define COUNTRY_CODE_KN (((UINT_16) 'K' << 8) | (UINT_16) 'N') /* Saint Kitts and Nevis */ -#define COUNTRY_CODE_KR (((UINT_16) 'K' << 8) | (UINT_16) 'R') /* South Korea */ -#define COUNTRY_CODE_KW (((UINT_16) 'K' << 8) | (UINT_16) 'W') /* Kuwait */ -#define COUNTRY_CODE_LC (((UINT_16) 'L' << 8) | (UINT_16) 'C') /* Saint Lucia */ -#define COUNTRY_CODE_LI (((UINT_16) 'L' << 8) | (UINT_16) 'I') /* Liechtenstein */ -#define COUNTRY_CODE_LK (((UINT_16) 'L' << 8) | (UINT_16) 'K') /* Sri Lanka */ -#define COUNTRY_CODE_LU (((UINT_16) 'L' << 8) | (UINT_16) 'U') /* Luxembourg */ -#define COUNTRY_CODE_MA (((UINT_16) 'M' << 8) | (UINT_16) 'A') /* Morocco */ -#define COUNTRY_CODE_MD (((UINT_16) 'M' << 8) | (UINT_16) 'D') /* Moldova */ -#define COUNTRY_CODE_MX (((UINT_16) 'M' << 8) | (UINT_16) 'X') /* Mexico */ -#define COUNTRY_CODE_MY (((UINT_16) 'M' << 8) | (UINT_16) 'Y') /* Malaysia */ -#define COUNTRY_CODE_NI (((UINT_16) 'N' << 8) | (UINT_16) 'I') /* Nicaragua */ -#define COUNTRY_CODE_NL (((UINT_16) 'N' << 8) | (UINT_16) 'L') /* Netherlands */ -#define COUNTRY_CODE_NO (((UINT_16) 'N' << 8) | (UINT_16) 'O') /* Norway */ -#define COUNTRY_CODE_NZ (((UINT_16) 'N' << 8) | (UINT_16) 'Z') /* New Zealand */ -#define COUNTRY_CODE_OM (((UINT_16) 'O' << 8) | (UINT_16) 'M') /* Oman */ -#define COUNTRY_CODE_PE (((UINT_16) 'P' << 8) | (UINT_16) 'E') /* Peru */ -#define COUNTRY_CODE_PG (((UINT_16) 'P' << 8) | (UINT_16) 'G') /* Papua New Guinea */ -#define COUNTRY_CODE_PH (((UINT_16) 'P' << 8) | (UINT_16) 'H') /* Philippines */ -#define COUNTRY_CODE_PK (((UINT_16) 'P' << 8) | (UINT_16) 'K') /* Pakistan */ -#define COUNTRY_CODE_PR (((UINT_16) 'P' << 8) | (UINT_16) 'R') /* Puerto Rico */ -#define COUNTRY_CODE_PT (((UINT_16) 'P' << 8) | (UINT_16) 'T') /* Portugal */ -#define COUNTRY_CODE_PY (((UINT_16) 'P' << 8) | (UINT_16) 'Y') /* Paraguay */ -#define COUNTRY_CODE_PZ (((UINT_16) 'P' << 8) | (UINT_16) 'Z') /* Panama */ -#define COUNTRY_CODE_RU (((UINT_16) 'R' << 8) | (UINT_16) 'U') /* Russian */ -#define COUNTRY_CODE_SA (((UINT_16) 'S' << 8) | (UINT_16) 'A') /* Saudi Arabia */ -#define COUNTRY_CODE_SE (((UINT_16) 'S' << 8) | (UINT_16) 'E') /* Sweden */ -#define COUNTRY_CODE_SG (((UINT_16) 'S' << 8) | (UINT_16) 'G') /* Singapore */ -#define COUNTRY_CODE_SR (((UINT_16) 'S' << 8) | (UINT_16) 'R') /* Suriname */ -#define COUNTRY_CODE_TW (((UINT_16) 'T' << 8) | (UINT_16) 'W') /* Taiwan */ -#define COUNTRY_CODE_TH (((UINT_16) 'T' << 8) | (UINT_16) 'H') /* Thailand */ -#define COUNTRY_CODE_TR (((UINT_16) 'T' << 8) | (UINT_16) 'R') /* Turkey */ -#define COUNTRY_CODE_TT (((UINT_16) 'T' << 8) | (UINT_16) 'T') /* Trinidad */ -#define COUNTRY_CODE_UA (((UINT_16) 'U' << 8) | (UINT_16) 'A') /* Ukraine */ -#define COUNTRY_CODE_US (((UINT_16) 'U' << 8) | (UINT_16) 'S') /* United States */ -#define COUNTRY_CODE_UY (((UINT_16) 'U' << 8) | (UINT_16) 'Y') /* Uruguay */ -#define COUNTRY_CODE_VC (((UINT_16) 'V' << 8) | (UINT_16) 'C') /* Saint Vincent */ -#define COUNTRY_CODE_VE (((UINT_16) 'V' << 8) | (UINT_16) 'E') /* Venezuela */ -#define COUNTRY_CODE_VN (((UINT_16) 'V' << 8) | (UINT_16) 'N') /* Vietnam */ - -/* dot11RegDomainsSupportValue */ -#define MIB_REG_DOMAIN_FCC 0x10 /* FCC (US) */ -#define MIB_REG_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define MIB_REG_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define MIB_REG_DOMAIN_SPAIN 0x31 /* Spain */ -#define MIB_REG_DOMAIN_FRANCE 0x32 /* France */ -#define MIB_REG_DOMAIN_JAPAN 0x40 /* MPHPT (Japan) */ -#define MIB_REG_DOMAIN_OTHER 0x00 /* other */ - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Define channel offset in unit of 5MHz bandwidth */ -typedef enum _ENUM_CHNL_SPAN_T { - CHNL_SPAN_5 = 1, - CHNL_SPAN_10 = 2, - CHNL_SPAN_20 = 4, - CHNL_SPAN_40 = 8 -} ENUM_CHNL_SPAN_T, *P_ENUM_CHNL_SPAN_T; - -/* Define BSS operating bandwidth */ -typedef enum _ENUM_CHNL_BW_T { - CHNL_BW_20, - CHNL_BW_20_40, - CHNL_BW_10, - CHNL_BW_5 -} ENUM_CHNL_BW_T, *P_ENUM_CHNL_BW_T; - -#if 0 -/* If channel width is CHNL_BW_20_40, the first channel will be SCA and - * the second channel is SCB, then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - UINT_8 ucRegClass; - ENUM_BAND_T eBand; - ENUM_CHNL_SPAN_T eChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - ENUM_CHNL_BW_T eChannelBw; - BOOLEAN fgDfsNeeded; - BOOLEAN fgIbssProhibited; -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - UINT_16 u2CountryCode; - UINT_16 u2MibRegDomainValue; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; - -#else /* New definition 20110830 */ - -/* In all bands, the first channel will be SCA and the second channel is SCB, - * then iteratively. - * Note the final channel will not be SCA. - */ -typedef struct _DOMAIN_SUBBAND_INFO { - /* Note1: regulation class depends on operation bandwidth and RF band. - * For example: 2.4GHz, 1~13, 20MHz ==> regulation class = 81 - * 2.4GHz, 1~13, SCA ==> regulation class = 83 - * 2.4GHz, 1~13, SCB ==> regulation class = 84 - * Note2: TX power limit is not specified here because path loss is unknown - */ - UINT_8 ucRegClass; /* Regulation class for 20MHz */ - UINT_8 ucBand; /* Type: ENUM_BAND_T */ - UINT_8 ucChannelSpan; /* Type: ENUM_CHNL_SPAN_T */ - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 ucReserved; /* Type: BOOLEAN (fgDfsNeeded) */ -} DOMAIN_SUBBAND_INFO, *P_DOMAIN_SUBBAND_INFO; - -/* Use it as all available channel list for STA */ -typedef struct _DOMAIN_INFO_ENTRY { - PUINT_16 pu2CountryGroup; - UINT_32 u4CountryNum; - - /* If different attributes, put them into different rSubBands. - * For example, DFS shall be used or not. - */ - DOMAIN_SUBBAND_INFO rSubBand[MAX_SUBBAND_NUM]; -} DOMAIN_INFO_ENTRY, *P_DOMAIN_INFO_ENTRY; -#endif - -/* The following definitions are not used yet */ -typedef enum _ENUM_CH_SET_2G4_T { - CH_SET_2G4_NA, - CH_SET_2G4_1_11, - CH_SET_2G4_1_13, - CH_SET_2G4_1_14, - CH_SET_2G4_NUM -} ENUM_CH_SET_2G4_T, *P_ENUM_CH_SET_2G4_T; - -typedef enum _ENUM_CH_SET_UNII_LOW_T { - CH_SET_UNII_LOW_NA, - CH_SET_UNII_LOW_36_48, - CH_SET_UNII_LOW_NUM -} ENUM_CH_SET_UNII_LOW_T, *P_ENUM_CH_SET_UNII_LOW_T; - -typedef enum _ENUM_CH_SET_UNII_MID_T { - CH_SET_UNII_MID_NA, - CH_SET_UNII_MID_52_64, - CH_SET_UNII_MID_NUM -} ENUM_CH_SET_UNII_MID_T, *P_ENUM_CH_SET_UNII_MID_T; - -typedef enum _ENUM_CH_SET_UNII_WW_T { - CH_SET_UNII_WW_NA, - CH_SET_UNII_WW_100_128, - CH_SET_UNII_WW_100_140, - CH_SET_UNII_WW_100_116_132_140, - CH_SET_UNII_WW_NUM -} ENUM_CH_SET_UNII_WW_T, *P_ENUM_CH_SET_UNII_WW_T; - -typedef enum _ENUM_CH_SET_UNII_UPPER_T { - CH_SET_UNII_UPPER_NA, - CH_SET_UNII_UPPER_149_161, - CH_SET_UNII_UPPER_149_165, - CH_SET_UNII_UPPER_149_173, - CH_SET_UNII_UPPER_NUM -} ENUM_CH_SET_UNII_UPPER_T, *P_ENUM_CH_SET_UNII_UPPER_T; - -typedef struct _COUNTRY_CH_SET_T { - ENUM_CH_SET_2G4_T e2G4; - ENUM_CH_SET_UNII_LOW_T eUniiLow; - ENUM_CH_SET_UNII_MID_T eUniiMid; - ENUM_CH_SET_UNII_WW_T eUniiWw; - ENUM_CH_SET_UNII_UPPER_T eUniiUpper; -} COUNTRY_CH_SET_T, *P_COUNTRY_CH_SET_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ); - -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ); - -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_DOMAIN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_obss.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_obss.h deleted file mode 100755 index 61d099b11a86..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_obss.h +++ /dev/null @@ -1,204 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/rlm_obss.h#1 $ -*/ - -/*! \file "rlm_obss.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm_obss.h $ - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_OBSS_H -#define _RLM_OBSS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - - -#define CHNL_LEVEL0 0 -#define CHNL_LEVEL1 1 -#define CHNL_LEVEL2 2 - -#define AFFECTED_CHNL_OFFSET 5 - -#define OBSS_SCAN_MIN_INTERVAL 10 /* In unit of sec */ - -#define PUBLIC_ACTION_MAX_LEN 200 /* In unit of byte */ - -/* P2P GO only */ -/* Define default OBSS Scan parameters (from MIB in spec.) */ -#define dot11OBSSScanPassiveDwell 20 -#define dot11OBSSScanActiveDwell 10 -#define dot11OBSSScanPassiveTotalPerChannel 200 -#define dot11OBSSScanActiveTotalPerChannel 20 -#define dot11BSSWidthTriggerScanInterval 300 /* Unit: sec */ -#define dot11BSSWidthChannelTransitionDelayFactor 5 -#define dot11OBSSScanActivityThreshold 25 - -#define OBSS_20_40M_TIMEOUT (dot11BSSWidthTriggerScanInterval + 10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Control MAC PCO function */ -typedef enum _ENUM_SYS_PCO_PHASE_T { - SYS_PCO_PHASE_DISABLED = 0, - SYS_PCO_PHASE_20M, - SYS_PCO_PHASE_40M -} ENUM_SYS_PCO_PHASE_T, *P_ENUM_SYS_PCO_PHASE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ); - -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ); - -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_OBSS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_protection.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_protection.h deleted file mode 100755 index 29af6f87a9e0..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rlm_protection.h +++ /dev/null @@ -1,166 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/rlm_protection.h#1 $ -*/ - -/*! \file "rlm_protection.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm_protection.h $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -#ifndef _RLM_PROTECTION_H -#define _RLM_PROTECTION_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SYS_PROTECT_MODE_T { - SYS_PROTECT_MODE_NONE = 0, /* Mode 0 */ - SYS_PROTECT_MODE_ERP, /* Mode 1 */ - SYS_PROTECT_MODE_NON_HT, /* Mode 2 */ - SYS_PROTECT_MODE_20M, /* Mode 3 */ - - SYS_PROTECT_MODE_NUM -} ENUM_SYS_PROTECT_MODE_T, *P_ENUM_SYS_PROTECT_MODE_T; - -/* This definition follows HT Protection field of HT Operation IE */ -typedef enum _ENUM_HT_PROTECT_MODE_T { - HT_PROTECT_MODE_NONE = 0, - HT_PROTECT_MODE_NON_MEMBER, - HT_PROTECT_MODE_20M, - HT_PROTECT_MODE_NON_HT, - - HT_PROTECT_MODE_NUM -} ENUM_HT_PROTECT_MODE_T, *P_ENUM_HT_PROTECT_MODE_T; - - -typedef enum _ENUM_GF_MODE_T { - GF_MODE_NORMAL = 0, - GF_MODE_PROTECT, - GF_MODE_DISALLOWED, - - GF_MODE_NUM -} ENUM_GF_MODE_T, *P_ENUM_GF_MODE_T; - -typedef enum _ENUM_RIFS_MODE_T { - RIFS_MODE_NORMAL = 0, - RIFS_MODE_DISALLOWED, - - RIFS_MODE_NUM -} ENUM_RIFS_MODE_T, *P_ENUM_RIFS_MODE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RLM_PROTECTION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/roaming_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/roaming_fsm.h deleted file mode 100755 index 955c271da081..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/roaming_fsm.h +++ /dev/null @@ -1,249 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.h" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: roaming_fsm.h $ - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -#ifndef _ROAMING_FSM_H -#define _ROAMING_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Roaming Discovery interval, SCAN result need to be updated */ -#define ROAMING_DISCOVERY_TIMEOUT_SEC 5 // Seconds. - -//#define ROAMING_NO_SWING_RCPI_STEP 5 //rcpi -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_ROAMING_FAIL_REASON_T { - ROAMING_FAIL_REASON_CONNLIMIT = 0, - ROAMING_FAIL_REASON_NOCANDIDATE, - ROAMING_FAIL_REASON_NUM -} ENUM_ROAMING_FAIL_REASON_T; - -/* events of roaming between driver and firmware */ -typedef enum _ENUM_ROAMING_EVENT_T { - ROAMING_EVENT_START = 0, - ROAMING_EVENT_DISCOVERY, - ROAMING_EVENT_ROAM, - ROAMING_EVENT_FAIL, - ROAMING_EVENT_ABORT, - ROAMING_EVENT_NUM -} ENUM_ROAMING_EVENT_T; - -typedef struct _ROAMING_PARAM_T { - UINT_16 u2Event; - UINT_16 u2Data; -} ROAMING_PARAM_T, *P_ROAMING_PARAM_T; - -/**/ -typedef enum _ENUM_ROAMING_STATE_T { - ROAMING_STATE_IDLE = 0, - ROAMING_STATE_DECISION, - ROAMING_STATE_DISCOVERY, - ROAMING_STATE_ROAM, - ROAMING_STATE_NUM -} ENUM_ROAMING_STATE_T; - -typedef struct _ROAMING_INFO_T { - BOOLEAN fgIsEnableRoaming; - - ENUM_ROAMING_STATE_T eCurrentState; - - OS_SYSTIME rRoamingDiscoveryUpdateTime; - -} ROAMING_INFO_T, *P_ROAMING_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if CFG_SUPPORT_ROAMING -#define IS_ROAMING_ACTIVE(prAdapter) \ - (prAdapter->rWifiVar.rRoamingInfo.eCurrentState == ROAMING_STATE_ROAM) -#else -#define IS_ROAMING_ACTIVE(prAdapter) FALSE -#endif /* CFG_SUPPORT_ROAMING */ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ); - -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ); - -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Reason - ); - -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ROAMING_FSM_H */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rsn.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rsn.h deleted file mode 100755 index 89d1a80d71e2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/rsn.h +++ /dev/null @@ -1,420 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/rsn.h#1 $ -*/ - -/*! \file rsn.h - \brief The wpa/rsn related define, macro and structure are described here. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rsn.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype for generate wap/rsn ie - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function input parameter - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some event function declaration - * - * Nov 26 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * move the internal data structure for pmkid to rsn.h - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the port control and class error function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the pmkid candidate - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -#ifndef _RSN_H -#define _RSN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* ----- Definitions for Cipher Suite Selectors ----- */ -#define RSN_CIPHER_SUITE_USE_GROUP_KEY 0x00AC0F00 -#define RSN_CIPHER_SUITE_WEP40 0x01AC0F00 -#define RSN_CIPHER_SUITE_TKIP 0x02AC0F00 -#define RSN_CIPHER_SUITE_CCMP 0x04AC0F00 -#define RSN_CIPHER_SUITE_WEP104 0x05AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_CIPHER_SUITE_AES_128_CMAC 0x06AC0F00 -#endif - -#define WPA_CIPHER_SUITE_NONE 0x00F25000 -#define WPA_CIPHER_SUITE_WEP40 0x01F25000 -#define WPA_CIPHER_SUITE_TKIP 0x02F25000 -#define WPA_CIPHER_SUITE_CCMP 0x04F25000 -#define WPA_CIPHER_SUITE_WEP104 0x05F25000 - -/* ----- Definitions for Authentication and Key Management Suite Selectors ----- */ -#define RSN_AKM_SUITE_NONE 0x00AC0F00 -#define RSN_AKM_SUITE_802_1X 0x01AC0F00 -#define RSN_AKM_SUITE_PSK 0x02AC0F00 -#if CFG_SUPPORT_802_11W -#define RSN_AKM_SUITE_802_1X_SHA256 0x05AC0F00 -#define RSN_AKM_SUITE_PSK_SHA256 0x06AC0F00 -#endif - -#define WPA_AKM_SUITE_NONE 0x00F25000 -#define WPA_AKM_SUITE_802_1X 0x01F25000 -#define WPA_AKM_SUITE_PSK 0x02F25000 - -#define ELEM_ID_RSN_LEN_FIXED 20 /* The RSN IE len for associate request */ - -#define ELEM_ID_WPA_LEN_FIXED 22 /* The RSN IE len for associate request */ - -#define MASK_RSNIE_CAP_PREAUTH BIT(0) - -#define GET_SELECTOR_TYPE(x) ((UINT_8)(((x) >> 24) & 0x000000FF)) -#define SET_SELECTOR_TYPE(x, y) x = (((x) & 0x00FFFFFF) | (((UINT_32)(y) << 24) & 0xFF000000)) - -#define AUTH_CIPHER_CCMP 0x00000008 - -/* Cihpher suite flags */ -#define CIPHER_FLAG_NONE 0x00000000 -#define CIPHER_FLAG_WEP40 0x00000001 /* BIT 1 */ -#define CIPHER_FLAG_TKIP 0x00000002 /* BIT 2 */ -#define CIPHER_FLAG_CCMP 0x00000008 /* BIT 4 */ -#define CIPHER_FLAG_WEP104 0x00000010 /* BIT 5 */ -#define CIPHER_FLAG_WEP128 0x00000020 /* BIT 6 */ - -#define WAIT_TIME_IND_PMKID_CANDICATE_SEC 6 /* seconds */ -#define TKIP_COUNTERMEASURE_SEC 60 /* seconds */ - -#if CFG_SUPPORT_802_11W -#define RSN_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define RSN_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define RSN_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* Flags for PMKID Candidate list structure */ -#define EVENT_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 - - -#define CONTROL_FLAG_UC_MGMT_NO_ENC BIT(5) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RSN_IE(fp) ((P_RSN_INFO_ELEM_T) fp) -#define WPA_IE(fp) ((P_WPA_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -rsnParseRsnIE( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ); - -BOOLEAN -rsnParseWpaIE( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ); - -BOOLEAN -rsnSearchSupportedCipher( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnSearchAKMSuite( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ); - -BOOLEAN -rsnPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGenerateWpaNoneIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateWPAIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -rsnGenerateRSNIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -rsnParseCheckForWFAInfoElem( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ); - -#if CFG_SUPPORT_AAA -void -rsnParserCheckForRSNCCMPPSK ( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ); -#endif - -VOID -rsnTkipHandleMICFailure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ); - -VOID -rsnSelectPmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -VOID -rsnUpdatePmkidCandidateList( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -BOOLEAN -rsnSearchPmkidEntry( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ); - -BOOLEAN -rsnCheckPmkidCandicate( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnCheckPmkidCache( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -VOID -rsnGeneratePmkidIndication( - IN P_ADAPTER_T prAdapter - ); - -VOID -rsnIndicatePmkidCand( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); -#if CFG_SUPPORT_WPS2 -VOID -rsnGenerateWSCIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); -#endif - -#if CFG_SUPPORT_802_11W -UINT_32 -rsnCheckBipKeyInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -UINT_8 -rsnCheckSaQueryTimeout( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQueryTimer( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStartSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnStopSaQuery( - IN P_ADAPTER_T prAdapter - ); - -void -rsnSaQueryRequest( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -void -rsnSaQueryAction( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -BOOLEAN -rsnCheckRxMgmt( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ); -#endif -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _RSN_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/scan.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/scan.h deleted file mode 100755 index bc6ded567e78..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/scan.h +++ /dev/null @@ -1,893 +0,0 @@ -/* -** $Id: @(#) -*/ - -/*! \file "scan.h" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: scan.h $ - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 12 2010 yuche.tsai - * NULL - * Add a functio prototype to find p2p descriptor of a bss descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Add function prototype for return channel. - * modify data structure for scan specific device ID or TYPE. (Move from P2P Connection Settings to Scan Param) - * - * 08 05 2010 yuche.tsai - * NULL - * Check-in P2P Device Discovery Feature. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add a option for channel time extention in scan abort command. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Scan status "FIND" is used for P2P FSM find state. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field in SCAN_PARAM_T. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * - * Add new HW CH macro support - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify scanBuildProbeReqFrameCommonIEs() to support P2P SCAN - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Simplify the process of Beacon during SCAN and remove redundant variable in PRE_BSS_DESC_T - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding variable for wapi ap - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove non-used secuirty variavle - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Refine data structure of BSS_DESC_T and PRE_BSS_DESC_T - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add eNetType to rScanParam and revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add ucAvailablePhyTypeSet to BSS_DESC_T - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aucSrcAddress to SCAN_PARAM_T for P2P's Device Address - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security related variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security ie filed for scan parsing - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function declarations of scan_fsm.c - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scan.h to source control -** -*/ - -#ifndef _SCAN_H -#define _SCAN_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! Maximum buffer size of SCAN list */ -#define SCN_MAX_BUFFER_SIZE (CFG_MAX_NUM_BSS_LIST * ALIGN_4(sizeof(BSS_DESC_T))) - -#define SCN_RM_POLICY_EXCLUDE_CONNECTED BIT(0) // Remove SCAN result except the connected one. -#define SCN_RM_POLICY_TIMEOUT BIT(1) // Remove the timeout one -#define SCN_RM_POLICY_OLDEST_HIDDEN BIT(2) // Remove the oldest one with hidden ssid -#define SCN_RM_POLICY_SMART_WEAKEST BIT(3) /* If there are more than half BSS which has the - * same ssid as connection setting, remove the weakest one from them - * Else remove the weakest one. - */ -#define SCN_RM_POLICY_ENTIRE BIT(4) // Remove entire SCAN result - -#define SCN_BSS_DESC_SAME_SSID_THRESHOLD 3 /* This is used by POLICY SMART WEAKEST, - * If exceed this value, remove weakest BSS_DESC_T - * with same SSID first in large network. - */ - -#define SCN_BSS_DESC_REMOVE_TIMEOUT_SEC 5 // Second. - /* This is used by POLICY TIMEOUT, - * If exceed this value, remove timeout BSS_DESC_T. - */ - - - - -#define SCN_PROBE_DELAY_MSEC 0 - -#define SCN_ADHOC_BSS_DESC_TIMEOUT_SEC 5 // Second. - -/*----------------------------------------------------------------------------*/ -/* MSG_SCN_SCAN_REQ */ -/*----------------------------------------------------------------------------*/ -#define SCAN_REQ_SSID_WILDCARD BIT(0) -#define SCAN_REQ_SSID_P2P_WILDCARD BIT(1) -#define SCAN_REQ_SSID_SPECIFIED BIT(2) - - -/*----------------------------------------------------------------------------*/ -/* Support Multiple SSID SCAN */ -/*----------------------------------------------------------------------------*/ -#define SCN_SSID_MAX_NUM 4 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SCAN_TYPE_T { - SCAN_TYPE_PASSIVE_SCAN = 0, - SCAN_TYPE_ACTIVE_SCAN, - SCAN_TYPE_NUM -} ENUM_SCAN_TYPE_T, *P_ENUM_SCAN_TYPE_T; - -typedef enum _ENUM_SCAN_STATE_T { - SCAN_STATE_IDLE = 0, - SCAN_STATE_SCANNING, - SCAN_STATE_NUM -} ENUM_SCAN_STATE_T; - -typedef enum _ENUM_SCAN_CHANNEL_T { - SCAN_CHANNEL_FULL = 0, - SCAN_CHANNEL_2G4, - SCAN_CHANNEL_5G, - SCAN_CHANNEL_P2P_SOCIAL, - SCAN_CHANNEL_SPECIFIED, - SCAN_CHANNEL_NUM -} ENUM_SCAN_CHANNEL, *P_ENUM_SCAN_CHANNEL; - -typedef struct _MSG_SCN_FSM_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_32 u4Dummy; -} MSG_SCN_FSM_T, *P_MSG_SCN_FSM_T; - - - -/*----------------------------------------------------------------------------*/ -/* BSS Descriptors */ -/*----------------------------------------------------------------------------*/ -struct _BSS_DESC_T { - LINK_ENTRY_T rLinkEntry; - - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ - - BOOLEAN fgIsConnecting; /* If we are going to connect to this BSS - * (JOIN or ROAMING to another BSS), don't - * remove this record from BSS List. - */ - BOOLEAN fgIsConnected; /* If we have connected to this BSS (NORMAL_TR), - * don't removed this record from BSS list. - */ - - BOOLEAN fgIsHiddenSSID; /* When this flag is TRUE, means the SSID - * of this BSS is not known yet. - */ - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - OS_SYSTIME rUpdateTime; - - ENUM_BSS_TYPE_T eBSSType; - - UINT_16 u2CapInfo; - - UINT_16 u2BeaconInterval; - UINT_16 u2ATIMWindow; - - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - BOOLEAN fgIsERPPresent; - BOOLEAN fgIsHTPresent; - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this BSS */ - - UINT_8 ucChannelNum; - - ENUM_CHNL_EXT_T eSco; /* Record bandwidth for association process - Some AP will send association resp by 40MHz BW */ - ENUM_BAND_T eBand; - - UINT_8 ucDTIMPeriod; - - BOOLEAN fgIsLargerTSF; /* This BSS's TimeStamp is larger than us(TCL == 1 in RX_STATUS_T) */ - - UINT_8 ucRCPI; -#if CFG_SUPPORT_RSSI_SMOOTH -//------------------------------- jbx add 0508------------------------------------------------- - UINT_8 ucRCPI_pre_real; - - UINT_8 ucRCPI_pre_fake; -//------------------------------- jbx add 0508------------------------------------------------- -#endif - UINT_8 ucWmmFlag; /* A flag to indicate this BSS's WMM capability */ - - /*! \brief The srbiter Search State will matched the scan result, - and saved the selected cipher and akm, and report the score, - for arbiter join state, join module will carry this target BSS - to rsn generate ie function, for gen wpa/rsn ie */ - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - - UINT_16 u2RsnCap; - - RSN_INFO_T rRSNInfo; - RSN_INFO_T rWPAInfo; -#if 1//CFG_SUPPORT_WAPI - WAPI_INFO_T rIEWAPI; - BOOL fgIEWAPI; -#endif - BOOL fgIERSN; - BOOL fgIEWPA; - - /*! \brief RSN parameters selected for connection */ - /*! \brief The Select score for final AP selection, - 0, no sec, 1,2,3 group cipher is WEP, TKIP, CCMP */ - UINT_8 ucEncLevel; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PPresent; - P_P2P_DEVICE_DESC_T prP2pDesc; - - UINT_8 aucIntendIfAddr[MAC_ADDR_LEN]; /* For IBSS, the SrcAddr is different from BSSID */ -// UINT_8 ucDevCapabilityBitmap; /* Device Capability Attribute. (P2P_DEV_CAPABILITY_XXXX) */ -// UINT_8 ucGroupCapabilityBitmap; /* Group Capability Attribute. (P2P_GROUP_CAPABILITY_XXXX) */ - - LINK_T rP2pDeviceList; - -// P_LINK_T prP2pDeviceList; - - /* For - * 1. P2P Capability. - * 2. P2P Device ID. ( in aucSrcAddr[] ) - * 3. NOA (TODO:) - * 4. Extend Listen Timing. (Probe Rsp) (TODO:) - * 5. P2P Device Info. (Probe Rsp) - * 6. P2P Group Info. (Probe Rsp) - */ -#endif - - BOOLEAN fgIsIEOverflow; /* The received IE length exceed the maximum IE buffer size */ - UINT_16 u2IELength; /* The byte count of aucIEBuf[] */ - - ULARGE_INTEGER u8TimeStamp; /* Place u8TimeStamp before aucIEBuf[1] to force DW align */ - - UINT_8 aucIEBuf[CFG_IE_BUFFER_SIZE]; -}; - - -typedef struct _SCAN_PARAM_T { /* Used by SCAN FSM */ - /* Active or Passive */ - ENUM_SCAN_TYPE_T eScanType; - - /* Network Type */ - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - /* Specified SSID Type */ - UINT_8 ucSSIDType; - UINT_8 ucSSIDNum; - - /* Length of Specified SSID */ - UINT_8 ucSpecifiedSSIDLen[SCN_SSID_MAX_NUM]; - - /* Specified SSID */ - UINT_8 aucSpecifiedSSID[SCN_SSID_MAX_NUM][ELEM_MAX_LEN_SSID]; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgFindSpecificDev; /* P2P: Discovery Protocol */ - UINT_8 aucDiscoverDevAddr[MAC_ADDR_LEN]; - BOOLEAN fgIsDevType; - P2P_DEVICE_TYPE_T rDiscoverDevType; - - UINT_16 u2PassiveListenInterval; - // TODO: Find Specific Device Type. -#endif /* CFG_SUPPORT_P2P */ - - BOOLEAN fgIsObssScan; - BOOLEAN fgIsScanV2; - - /* Run time flags */ - UINT_16 u2ProbeDelayTime; - - /* channel information */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - - /* Feedback information */ - UINT_8 ucSeqNum; - - /* Information Element */ - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; - -} SCAN_PARAM_T, *P_SCAN_PARAM_T; - -typedef struct _SCAN_INFO_T { - ENUM_SCAN_STATE_T eCurrentState; /* Store the STATE variable of SCAN FSM */ - - OS_SYSTIME rLastScanCompletedTime; - - SCAN_PARAM_T rScanParam; - - UINT_32 u4NumOfBssDesc; - - UINT_8 aucScanBuffer[SCN_MAX_BUFFER_SIZE]; - - LINK_T rBSSDescList; - - LINK_T rFreeBSSDescList; - - LINK_T rPendingMsgList; - - /* Sparse Channel Detection */ - BOOLEAN fgIsSparseChannelValid; - RF_CHANNEL_INFO_T rSparseChannel; - -} SCAN_INFO_T, *P_SCAN_INFO_T; - - -/* Incoming Mailbox Messages */ -typedef struct _MSG_SCN_SCAN_REQ_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucSSID[PARAM_MAX_LEN_SSID]; -#if CFG_ENABLE_WIFI_DIRECT - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ -#endif - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ, *P_MSG_SCN_SCAN_REQ; - -typedef struct _MSG_SCN_SCAN_REQ_V2_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_TYPE_T eScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDNum; - P_PARAM_SSID_T prSsid; - UINT_16 u2ProbeDelay; - UINT_16 u2ChannelDwellTime; /* In TU. 1024us. */ - ENUM_SCAN_CHANNEL eScanChannel; - UINT_8 ucChannelListNum; - RF_CHANNEL_INFO_T arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} MSG_SCN_SCAN_REQ_V2, *P_MSG_SCN_SCAN_REQ_V2; - - -typedef struct _MSG_SCN_SCAN_CANCEL_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsChannelExt; -#endif -} MSG_SCN_SCAN_CANCEL, *P_MSG_SCN_SCAN_CANCEL; - -/* Outgoing Mailbox Messages */ -typedef enum _ENUM_SCAN_STATUS_T { - SCAN_STATUS_DONE = 0, - SCAN_STATUS_CANCELLED, - SCAN_STATUS_FAIL, - SCAN_STATUS_BUSY, - SCAN_STATUS_NUM -} ENUM_SCAN_STATUS, *P_ENUM_SCAN_STATUS; - -typedef struct _MSG_SCN_SCAN_DONE_T { - MSG_HDR_T rMsgHdr; /* Must be the first member */ - UINT_8 ucSeqNum; - UINT_8 ucNetTypeIndex; - ENUM_SCAN_STATUS eScanStatus; -} MSG_SCN_SCAN_DONE, *P_MSG_SCN_SCAN_DONE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in scan.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Search */ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Search - Alternative */ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ); - -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ); - - -/* BSS-DESC Allocation */ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ); - -/* BSS-DESC Removal */ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ); - -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/* BSS-DESC State Change */ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ); - -#if 0 -/* BSS-DESC Insertion */ -P_BSS_DESC_T -scanAddToInternalScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb, - IN P_BSS_DESC_T prBssDesc - ); -#endif - -/* BSS-DESC Insertion - ALTERNATIVE */ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ); - -VOID -scanBuildProbeReqFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucDesiredSsid, - IN UINT_32 u4DesiredSsidLen, - IN UINT_16 u2SupportedRateSet - ); - -WLAN_STATUS -scanSendProbeReqFrames ( - IN P_ADAPTER_T prAdapter, - IN P_SCAN_PARAM_T prScanParam - ); - -VOID -scanUpdateBssDescForSearch ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ); - -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ); - -/*----------------------------------------------------------------------------*/ -/* Routines in scan_fsm.c */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ); - -/*----------------------------------------------------------------------------*/ -/* Command Routines */ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ); - -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* RX Event Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Handling */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ); - -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ); - -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Generation */ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Query for sparse channel */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ); - - -#endif /* _SCAN_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/sec_fsm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/sec_fsm.h deleted file mode 100755 index 4cefe71a1535..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/sec_fsm.h +++ /dev/null @@ -1,324 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/sec_fsm.h#1 $ -*/ - -/*! \file sec_fsm.h - \brief Declaration of functions and finite state machine for SECURITY Module. - - Function declaration for privacy.c and SEC_STATE for SECURITY FSM. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: sec_fsm.h $ - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the deauth Tx done callback parameter - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the reference function declaration - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * delete non-used code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function prototype - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function declaration - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the security variable - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\14 2009-04-06 15:35:47 GMT mtk01088 -** add the variable to set the disable AP selection for privacy check, for wps open networking. -** \main\maintrunk.MT5921\13 2008-11-19 11:46:01 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\12 2008-08-28 20:37:11 GMT mtk01088 -** remove non-used code -** -** \main\maintrunk.MT5921\11 2008-03-18 09:51:52 GMT mtk01088 -** Add function declaration for timer to indicate pmkid candidate -** \main\maintrunk.MT5921\10 2008-02-29 15:12:08 GMT mtk01088 -** add variable for sw port control -** \main\maintrunk.MT5921\9 2008-02-29 12:37:30 GMT mtk01088 -** rename the security related function declaration -** \main\maintrunk.MT5921\8 2007-12-27 13:59:08 GMT mtk01088 -** adjust the wlan table and sec fsm init timing -** \main\maintrunk.MT5921\7 2007-11-20 10:39:49 GMT mtk01088 -** add function timer for wait EAPoL Error timeout -** \main\maintrunk.MT5921\6 2007-11-06 20:39:08 GMT mtk01088 -** rename the counter measure timer -** \main\maintrunk.MT5921\5 2007-11-06 20:14:31 GMT mtk01088 -** add a abort function -** Revision 1.5 2007/07/16 02:33:42 MTK01088 -** change the ENUM declaration structure prefix from r to e -** -** Revision 1.4 2007/07/09 06:23:10 MTK01088 -** update -** -** Revision 1.3 2007/07/04 10:09:04 MTK01088 -** adjust the state for security fsm -** change function name -** -** Revision 1.2 2007/07/03 08:13:22 MTK01088 -** change the sec fsm state -** add the event for sec fsm -** -** Revision 1.1 2007/06/27 06:20:35 MTK01088 -** add the sec fsm header file -** -** -*/ -#ifndef _SEC_FSM_H -#define _SEC_FSM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* TKIP CounterMeasure interval for Rejoin to Network. */ -#define COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC 60 - -/* Timeout to wait the EAPoL Error Report frame Send out. */ -#define EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef UINT_32 SEC_STATUS, *P_SEC_STATUS; - -#if 0 -/* WPA2 PMKID candicate structure */ -typedef struct _PMKID_CANDICATE_T { - UINT_8 aucBssid[MAC_ADDR_LEN]; /* MAC address */ - UINT_32 u4PreAuthFlags; -} PMKID_CANDICATE_T, *P_PMKID_CANDICATE_T; -#endif - -typedef SEC_STATUS (*PFN_SEC_FSM_STATE_HANDLER)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define SEC_STATE_TRANSITION_FLAG fgIsTransition -#define SEC_NEXT_STATE_VAR eNextState - -#define SEC_STATE_TRANSITION(prAdapter, prSta, eFromState, eToState) \ - { secFsmTrans_ ## eFromState ## _to_ ## eToState(prAdapter, prSta); \ - SEC_NEXT_STATE_VAR = SEC_STATE_ ## eToState; \ - SEC_STATE_TRANSITION_FLAG = (BOOLEAN)TRUE; \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle the sec check */ -/*--------------------------------------------------------------*/ -/***** Routines in sec_fsm.c *****/ -VOID -secFsmInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventInit( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventStart( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventAbort( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -BOOLEAN -secFsmEventPTKInstalled( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent2ndEapolTx( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEvent4ndEapolTxDone( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -VOID -secFsmEventDeauthTxDone( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -secFsmEventStartCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ); - -VOID -secFsmEventEndOfCounterMeasure( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _SEC_FSM_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/swcr.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/swcr.h deleted file mode 100755 index 4d70b87bfe3b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/swcr.h +++ /dev/null @@ -1,220 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/swcr.h#1 $ -*/ - -/*! \file "swcr.h" - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* - * - */ - -#ifndef _SWCR_H -#define _SWCR_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define SWCR_VAR(x) ((VOID *)&x) -#define SWCR_FUNC(x) ((VOID *)x) - -#define SWCR_T_FUNC BIT(7) - -#define SWCR_L_32 3 -#define SWCR_L_16 2 -#define SWCR_L_8 1 - -#define SWCR_READ 0 -#define SWCR_WRITE 1 - -#define SWCR_MAP_NUM(x) (sizeof(x)/sizeof(x[0])) - -#define SWCR_CR_NUM 7 - -#define SWCR_GET_RW_INDEX(action,rw,index) \ - index = action & 0x7F; \ - rw = action >> 7; - - -extern UINT_32 g_au4SwCr[]; /*: 0: command other: data */ - -typedef VOID (*PFN_SWCR_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); -typedef VOID (*PFN_CMD_RW_T)(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); - -typedef struct _SWCR_MAP_ENTRY_T { - UINT_16 u2Type; - PVOID u4Addr; -} SWCR_MAP_ENTRY_T, *P_SWCR_MAP_ENTRY_T; - - -typedef struct _SWCR_MOD_MAP_ENTRY_T { - UINT_8 ucMapNum; - P_SWCR_MAP_ENTRY_T prSwCrMap; -} SWCR_MOD_MAP_ENTRY_T, *P_SWCR_MOD_MAP_ENTRY_T; - -typedef enum _ENUM_SWCR_DBG_TYPE_T { - SWCR_DBG_TYPE_ALL = 0, - SWCR_DBG_TYPE_TXRX, - SWCR_DBG_TYPE_RX_RATES, - SWCR_DBG_TYPE_PS, - SWCR_DBG_TYPE_NUM -} ENUM_SWCR_DBG_TYPE_T; - -typedef enum _ENUM_SWCR_DBG_ALL_T { - SWCR_DBG_ALL_TX_CNT = 0, - SWCR_DBG_ALL_TX_BCN_CNT, - SWCR_DBG_ALL_TX_FAILED_CNT, - SWCR_DBG_ALL_TX_RETRY_CNT, - SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT, - SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT, - SWCR_DBG_ALL_TX_MGNT_DROP_CNT, - SWCR_DBG_ALL_TX_ERROR_CNT, - - SWCR_DBG_ALL_RX_CNT, - SWCR_DBG_ALL_RX_DROP_CNT, - SWCR_DBG_ALL_RX_DUP_DROP_CNT, - SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT, - SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT, - - SWCR_DBG_ALL_RX_FCSERR_CNT, - SWCR_DBG_ALL_RX_FIFOFULL_CNT, - SWCR_DBG_ALL_RX_PFDROP_CNT, - - SWCR_DBG_ALL_PWR_PS_POLL_CNT, - SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT, - SWCR_DBG_ALL_PWR_BCN_IND_CNT, - SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT, - SWCR_DBG_ALL_PWR_PM_STATE0, - SWCR_DBG_ALL_PWR_PM_STATE1, - SWCR_DBG_ALL_PWR_CUR_PS_PROF0, - SWCR_DBG_ALL_PWR_CUR_PS_PROF1, - - SWCR_DBG_ALL_AR_STA0_RATE, - SWCR_DBG_ALL_AR_STA0_BWGI, - SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI, - - SWCR_DBG_ALL_ROAMING_ENABLE, - SWCR_DBG_ALL_ROAMING_ROAM_CNT, - SWCR_DBG_ALL_ROAMING_INT_CNT, - - SWCR_DBG_ALL_BB_RX_MDRDY_CNT, - SWCR_DBG_ALL_BB_RX_FCSERR_CNT, - SWCR_DBG_ALL_BB_CCK_PD_CNT, - SWCR_DBG_ALL_BB_OFDM_PD_CNT, - SWCR_DBG_ALL_BB_CCK_SFDERR_CNT, - SWCR_DBG_ALL_BB_CCK_SIGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT, - SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT, - - SWCR_DBG_ALL_NUM -} ENUM_SWCR_DBG_ALL_T; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID swCrReadWriteCmd( - P_ADAPTER_T prAdapter, - UINT_8 ucRead, - UINT_16 u2Addr, - UINT_32 *pu4Data - ); - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType); -VOID swCrDebugInit(P_ADAPTER_T prAdapter); -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout); -VOID swCrDebugUninit(P_ADAPTER_T prAdapter); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wapi.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wapi.h deleted file mode 100755 index b40b0c66c344..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wapi.h +++ /dev/null @@ -1,160 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/wapi.h#1 $ -*/ - -/*! \file wapi.h - \brief The wapi related define, macro and structure are described here. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wapi.h $ - * - * 07 20 2010 wh.su - * - * . - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the wapi function name and adding the generate wapi ie function - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some wapi structure define - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** \main\maintrunk.MT5921\1 2009-10-09 17:06:29 GMT mtk01088 -** -*/ - -#ifndef _WAPI_H -#define _WAPI_H - -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define WAPI_CIPHER_SUITE_WPI 0x01721400 /* WPI_SMS4 */ -#define WAPI_AKM_SUITE_802_1X 0x01721400 /* WAI */ -#define WAPI_AKM_SUITE_PSK 0x02721400 /* WAI_PSK */ - -#define ELEM_ID_WAPI 68 /* WAPI IE */ - -#define WAPI_IE(fp) ((P_WAPI_INFO_ELEM_T) fp) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wapiGenerateWAPIIE( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ); - -BOOLEAN -wapiPerformPolicySelection( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ); - -//BOOLEAN -//wapiUpdateTxKeyIdx ( -// IN P_STA_RECORD_T prStaRec, -// IN UINT_8 ucWlanIdx -// ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif -#endif /* _WAPI_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wlan_typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wlan_typedef.h deleted file mode 100755 index d4b6d62910ec..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wlan_typedef.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/mgmt/wlan_typedef.h#1 $ -*/ - -/*! \file wlan_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wlan_typedef.h $ -*/ - -#ifndef _WLAN_TYPEDEF_H -#define _WLAN_TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for BSS_INFO_T structure, to describe the attributes used in a - * common BSS. - */ -typedef struct _BSS_INFO_T BSS_INFO_T, *P_BSS_INFO_T; - -typedef BSS_INFO_T AIS_BSS_INFO_T, *P_AIS_BSS_INFO_T; -typedef BSS_INFO_T P2P_BSS_INFO_T, *P_P2P_BSS_INFO_T; -typedef BSS_INFO_T BOW_BSS_INFO_T, *P_BOW_BSS_INFO_T; - -typedef struct _AIS_SPECIFIC_BSS_INFO_T AIS_SPECIFIC_BSS_INFO_T, *P_AIS_SPECIFIC_BSS_INFO_T; -typedef struct _P2P_SPECIFIC_BSS_INFO_T P2P_SPECIFIC_BSS_INFO_T, *P_P2P_SPECIFIC_BSS_INFO_T; -typedef struct _BOW_SPECIFIC_BSS_INFO_T BOW_SPECIFIC_BSS_INFO_T, *P_BOW_SPECIFIC_BSS_INFO_T; -/* CFG_SUPPORT_WFD */ -typedef struct _WFD_CFG_SETTINGS_T WFD_CFG_SETTINGS_T, *P_WFD_CFG_SETTINGS_T; - - -/* BSS related structures */ -/* Type definition for BSS_DESC_T structure, to describe parameter sets of a particular BSS */ -typedef struct _BSS_DESC_T BSS_DESC_T, *P_BSS_DESC_T, **PP_BSS_DESC_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _WLAN_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wnm.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wnm.h deleted file mode 100755 index a9660442b6c6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/mgmt/wnm.h +++ /dev/null @@ -1,140 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/include/mgmt/wnm.h#1 $ -*/ - -/*! \file wnm.h - \brief This file contains the IEEE 802.11 family related 802.11v network management - for MediaTek 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wnm.h $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -#ifndef _WNM_H -#define _WNM_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _TIMINGMSMT_PARAM_T { - BOOLEAN fgInitiator; - UINT_8 ucTrigger; - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ -} TIMINGMSMT_PARAM_T, *P_TIMINGMSMT_PARAM_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ); - -#define WNM_UNIT_TEST 1 - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WNM_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/adapter.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/adapter.h deleted file mode 100755 index d299eaa17a26..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/adapter.h +++ /dev/null @@ -1,1454 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/adapter.h#1 $ -*/ - -/*! \file adapter.h - \brief Definition of internal data structure for driver manipulation. - - In this file we define the internal data structure - ADAPTER_T which stands - for MiniPort ADAPTER(From Windows point of view) or stands for Network ADAPTER. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: adapter.h $ -** -** 10 31 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** to sync with CFG80211 behavior for CFG80211 will block disconnect request while not staying in connected state -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Remove ERP member in adapter structure - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * Action frame callback for GO Device Discoverability Req. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 yuche.tsai - * [WCXRP00000533] [Volunteer Patch][MT6620][Driver] Provide a P2P function API for Legacy WiFi to query AP mode. - * Provide an API for Legacy WiFi to query the operation mode.. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Provide disconnect function for AAA module. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000400] [MT6620 Wi-Fi] support CTIA power mode setting - * Support CTIA power mode setting. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add CWMin CWMax for AP to generate IE. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common IE buffer in P2P INFO structure. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 cp.wu - * NULL - * restore configuration as before. - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 yuche.tsai - * NULL - * Add an intend mode for BSS info. - * It is used to let P2P BSS Info to know which OP Mode it is going to become. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 yuche.tsai - * - * Remove BSS info which is redonedent in Wifi Var.. - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P FSM Info in adapter. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P related field, additional include p2p_fsm.h if p2p is enabled. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 04 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * reserve field of privacy filter and RTS threshold setting. - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * 2) command sequence number is now increased atomically - * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move ucCmdSeqNum as instance variable - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * 4. correct some HAL implementation - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * and result is retrieved by get ATInfo instead - * * * 2) add 4 counter for recording aggregation statistics - * - * 12 28 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate redundant variables for connection_state -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-16 18:02:03 GMT mtk02752 -** add external reference to avoid compilation error -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:40:26 GMT mtk02752 -** eliminate unused member -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-08 17:36:08 GMT mtk02752 -** add RF test data members into P_ADAPTER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:45 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-28 10:29:57 GMT mtk01461 -** Add read WTSR for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:37:35 GMT mtk01461 -** Add prPendingCmdInfoOfOID for temporarily saving the CMD_INFO_T before en-queue to rCmdQueue -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:57:51 GMT mtk01461 -** Add MGMT Buffer Info -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:34:12 GMT mtk01461 -** Add SW pre test CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:41:48 GMT mtk01461 -** Add fgIsWmmAssoc flag for TC assignment -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:51 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:51:52 GMT mtk01426 -** Add #if CFG_SDIO_RX_ENHANCE related data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:17 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _ADAPTER_H -#define _ADAPTER_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _ENHANCE_MODE_DATA_STRUCT_T SDIO_CTRL_T, *P_SDIO_CTRL_T; - -typedef struct _WLAN_INFO_T { - PARAM_BSSID_EX_T rCurrBssId; - - // Scan Result - PARAM_BSSID_EX_T arScanResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 apucScanResultIEs[CFG_MAX_NUM_BSS_LIST]; - UINT_32 u4ScanResultNum; - - // IE pool for Scanning Result - UINT_8 aucScanIEBuf[CFG_MAX_COMMON_IE_BUF_LEN]; - UINT_32 u4ScanIEBufferUsage; - - OS_SYSTIME u4SysTime; - - // connection parameter (for Ad-Hoc) - UINT_16 u2BeaconPeriod; - UINT_16 u2AtimWindow; - - PARAM_RATES eDesiredRates; - CMD_LINK_ATTRIB eLinkAttr; -// CMD_PS_PROFILE_T ePowerSaveMode; - CMD_PS_PROFILE_T arPowerSaveMode[NETWORK_TYPE_INDEX_NUM]; - - // trigger parameter - ENUM_RSSI_TRIGGER_TYPE eRssiTriggerType; - PARAM_RSSI rRssiTriggerValue; - - // Privacy Filter - ENUM_PARAM_PRIVACY_FILTER_T ePrivacyFilter; - - // RTS Threshold - PARAM_RTS_THRESHOLD eRtsThreshold; - - // Network Type - UINT_8 ucNetworkType; - - // Network Type In Use - UINT_8 ucNetworkTypeInUse; - -} WLAN_INFO_T, *P_WLAN_INFO_T; - -/* Session for CONNECTION SETTINGS */ -typedef struct _CONNECTION_SETTINGS_T { - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - UINT_8 ucDelayTimeOfDisconnectEvent; - - BOOLEAN fgIsConnByBssidIssued; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - - BOOLEAN fgIsConnReqIssued; - BOOLEAN fgIsDisconnectedByNonRequest; - - UINT_8 ucSSIDLen; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; - - ENUM_PARAM_OP_MODE_T eOPMode; - - ENUM_PARAM_CONNECTION_POLICY_T eConnectionPolicy; - - ENUM_PARAM_AD_HOC_MODE_T eAdHocMode; - - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - - BOOLEAN fgIsScanReqIssued; - - - /* MIB attributes */ - UINT_16 u2BeaconPeriod; - - UINT_16 u2RTSThreshold; /* User desired setting */ - - UINT_16 u2DesiredNonHTRateSet; /* User desired setting */ - - UINT_8 ucAdHocChannelNum; /* For AdHoc */ - - ENUM_BAND_T eAdHocBand; /* For AdHoc */ - - UINT_32 u4FreqInKHz; /* Center frequency */ - - /* ATIM windows using for IBSS power saving function */ - UINT_16 u2AtimWindow; - - /* Features */ - BOOLEAN fgIsEnableRoaming; - - BOOLEAN fgIsAdHocQoSEnable; - - ENUM_PARAM_PHY_CONFIG_T eDesiredPhyConfig; - - /* Used for AP mode for desired channel and bandwidth */ - UINT_16 u2CountryCode; - UINT_8 uc2G4BandwidthMode; /* 20/40M or 20M only */ - UINT_8 uc5GBandwidthMode; /* 20/40M or 20M only */ - - BOOLEAN fgTxShortGIDisabled; - BOOLEAN fgRxShortGIDisabled; - -#if CFG_SUPPORT_802_11D - BOOLEAN fgMultiDomainCapabilityEnabled; -#endif /* CFG_SUPPORT_802_11D*/ - - -#if 1 //CFG_SUPPORT_WAPI - BOOL fgWapiMode; - UINT_32 u4WapiSelectedGroupCipher; - UINT_32 u4WapiSelectedPairwiseCipher; - UINT_32 u4WapiSelectedAKMSuite; -#endif - - /* CR1486, CR1640 */ - /* for WPS, disable the privacy check for AP selection policy */ - BOOLEAN fgPrivacyCheckDisable; - - /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 bmfgApsdEnAc; - -} CONNECTION_SETTINGS_T, *P_CONNECTION_SETTINGS_T; - -struct _BSS_INFO_T { - - ENUM_PARAM_MEDIA_STATE_T eConnectionState; /* Connected Flag used in AIS_NORMAL_TR */ - ENUM_PARAM_MEDIA_STATE_T eConnectionStateIndicated; /* The Media State that report to HOST */ - - ENUM_OP_MODE_T eCurrentOPMode; /* Current Operation Mode - Infra/IBSS */ -#if CFG_ENABLE_WIFI_DIRECT - ENUM_OP_MODE_T eIntendOPMode; -#endif - - BOOLEAN fgIsNetActive; /* TRUE if this network has been activated */ - - UINT_8 ucNetTypeIndex; /* ENUM_NETWORK_TYPE_INDEX_T */ - - UINT_8 ucReasonOfDisconnect; /* Used by media state indication */ - - UINT_8 ucSSIDLen; /* Length of SSID */ - -#if CFG_ENABLE_WIFI_DIRECT - ENUM_HIDDEN_SSID_TYPE_T eHiddenSsidType; /* For Hidden SSID usage. */ -#endif - - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID used in this BSS */ - - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* The BSSID of the associated BSS */ - - UINT_8 aucOwnMacAddr[MAC_ADDR_LEN];/* Owned MAC Address used in this BSS */ - - P_STA_RECORD_T prStaRecOfAP; /* For Infra Mode, and valid only if - * eConnectionState == MEDIA_STATE_CONNECTED - */ - LINK_T rStaRecOfClientList; /* For IBSS/AP Mode, all known STAs in current BSS */ - - UINT_16 u2CapInfo; /* Change Detection */ - - UINT_16 u2BeaconInterval; /* The Beacon Interval of this BSS */ - - - UINT_16 u2ATIMWindow; /* For IBSS Mode */ - - UINT_16 u2AssocId; /* For Infra Mode, it is the Assoc ID assigned by AP. - */ - - - UINT_8 ucDTIMPeriod; /* For Infra/AP Mode */ - - UINT_8 ucDTIMCount; /* For AP Mode, it is the DTIM value we should carried in - * the Beacon of next TBTT. - */ - - UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer - * (This is deduced from received BSS_DESC_T) - */ - - UINT_8 ucNonHTBasicPhyType; /* The Basic PHY Type Index, used to setup Phy Capability */ - - UINT_8 ucConfigAdHocAPMode; /* The configuration of AdHoc/AP Mode. e.g. 11g or 11b */ - - UINT_8 ucBeaconTimeoutCount; /* For Infra/AP Mode, it is a threshold of Beacon Lost Count to - confirm connection was lost */ - - BOOLEAN fgHoldSameBssidForIBSS; /* For IBSS Mode, to keep use same BSSID to extend the life cycle of an IBSS */ - - BOOLEAN fgIsBeaconActivated; /* For AP/IBSS Mode, it is used to indicate that Beacon is sending */ - - P_MSDU_INFO_T prBeacon; /* For AP/IBSS Mode - Beacon Frame */ - - BOOLEAN fgIsIBSSMaster; /* For IBSS Mode - To indicate that we can reply ProbeResp Frame. - In current TBTT interval */ - - BOOLEAN fgIsShortPreambleAllowed; /* From Capability Info. of AssocResp Frame AND of Beacon/ProbeResp Frame */ - BOOLEAN fgUseShortPreamble; /* Short Preamble is enabled in current BSS. */ - BOOLEAN fgUseShortSlotTime; /* Short Slot Time is enabled in current BSS. */ - - UINT_16 u2OperationalRateSet; /* Operational Rate Set of current BSS */ - UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of current BSS */ - - - UINT_8 ucAllSupportedRatesLen; /* Used for composing Beacon Frame in AdHoc or AP Mode */ - UINT_8 aucAllSupportedRates[RATE_NUM]; - - UINT_8 ucAssocClientCnt; /* TODO(Kevin): Number of associated clients */ - - BOOLEAN fgIsProtection; - BOOLEAN fgIsQBSS; /* fgIsWmmBSS; */ /* For Infra/AP/IBSS Mode, it is used to indicate if we support WMM in - * current BSS. */ - BOOLEAN fgIsNetAbsent; /* TRUE: BSS is absent, FALSE: BSS is present */ - - UINT_32 u4RsnSelectedGroupCipher; - UINT_32 u4RsnSelectedPairwiseCipher; - UINT_32 u4RsnSelectedAKMSuite; - UINT_16 u2RsnSelectedCapInfo; - - /*------------------------------------------------------------------------*/ - /* Power Management related information */ - /*------------------------------------------------------------------------*/ - PM_PROFILE_SETUP_INFO_T rPmProfSetupInfo; - - - /*------------------------------------------------------------------------*/ - /* WMM/QoS related information */ - /*------------------------------------------------------------------------*/ - UINT_8 ucWmmParamSetCount; /* Used to detect the change of EDCA parameters. For AP mode, the value is used in WMM IE */ - - AC_QUE_PARMS_T arACQueParms[WMM_AC_INDEX_NUM]; - - UINT_8 aucCWminLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWminLog2 */ - UINT_8 aucCWmaxLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWmaxLog2 */ - AC_QUE_PARMS_T arACQueParmsForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the value */ - - /*------------------------------------------------------------------------*/ - /* 802.11n HT operation IE when (prStaRec->ucPhyTypeSet & PHY_TYPE_BIT_HT)*/ - /* is true. They have the same definition with fields of */ - /* information element (CM) */ - /*------------------------------------------------------------------------*/ - ENUM_BAND_T eBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucHtOpInfo1; - UINT_16 u2HtOpInfo2; - UINT_16 u2HtOpInfo3; - - /*------------------------------------------------------------------------*/ - /* Required protection modes (CM) */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgErpProtectMode; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - ENUM_RIFS_MODE_T eRifsOperationMode; - - BOOLEAN fgObssErpProtectMode; /* GO only */ - ENUM_HT_PROTECT_MODE_T eObssHtProtectMode; /* GO only */ - ENUM_GF_MODE_T eObssGfOperationMode; /* GO only */ - BOOLEAN fgObssRifsOperationMode; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* OBSS to decide if 20/40M bandwidth is permitted. */ - /* The first member indicates the following channel list length. */ - /*------------------------------------------------------------------------*/ - BOOLEAN fgAssoc40mBwAllowed; - BOOLEAN fg40mBwAllowed; - ENUM_CHNL_EXT_T eBssSCO; /* Real setting for HW - * 20/40M AP mode will always set 40M, - * but its OP IE can be changed. - */ - UINT_8 auc2G_20mReqChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_NonHtChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_PriChnlList[CHNL_LIST_SZ_2G + 1]; - UINT_8 auc2G_SecChnlList[CHNL_LIST_SZ_2G + 1]; - - UINT_8 auc5G_20mReqChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_NonHtChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_PriChnlList[CHNL_LIST_SZ_5G + 1]; - UINT_8 auc5G_SecChnlList[CHNL_LIST_SZ_5G + 1]; - - TIMER_T rObssScanTimer; - UINT_16 u2ObssScanInterval; /* in unit of sec */ - - BOOLEAN fgObssActionForcedTo20M; /* GO only */ - BOOLEAN fgObssBeaconForcedTo20M; /* GO only */ - - /*------------------------------------------------------------------------*/ - /* HW Related Fields (Kevin) */ - /*------------------------------------------------------------------------*/ - UINT_8 ucHwDefaultFixedRateCode; /* The default rate code copied to MAC TX Desc */ - UINT_16 u2HwLPWakeupGuardTimeUsec; - - - UINT_8 ucBssFreeQuota; /* The value is updated from FW */ -}; - - -struct _AIS_SPECIFIC_BSS_INFO_T { - UINT_8 ucRoamingAuthTypes; /* This value indicate the roaming type used in AIS_JOIN */ - - BOOLEAN fgIsIBSSActive; - - /*! \brief Global flag to let arbiter stay at standby and not connect to any network */ - BOOLEAN fgCounterMeasure; - UINT_8 ucWEPDefaultKeyID; - BOOLEAN fgTransmitKeyExist; /* Legacy wep Transmit key exist or not */ - - /* While Do CounterMeasure procedure, check the EAPoL Error report have send out */ - BOOLEAN fgCheckEAPoLTxDone; - - UINT_32 u4RsnaLastMICFailTime; - - /* Stored the current bss wpa rsn cap filed, used for roaming policy */ - //UINT_16 u2RsnCap; - TIMER_T rPreauthenticationTimer; - - /* By the flow chart of 802.11i, - wait 60 sec before associating to same AP - or roaming to a new AP - or sending data in IBSS, - keep a timer for handle the 60 sec counterMeasure */ - TIMER_T rRsnaBlockTrafficTimer; - TIMER_T rRsnaEAPoLReportTimeoutTimer; - - /* For Keep the Tx/Rx Mic key for TKIP SW Calculate Mic */ - /* This is only one for AIS/AP */ - UINT_8 aucTxMicKey[8]; - UINT_8 aucRxMicKey[8]; - - /* Buffer for WPA2 PMKID */ - /* The PMKID cache lifetime is expire by media_disconnect_indication */ - UINT_32 u4PmkidCandicateCount; - PMKID_CANDICATE_T arPmkidCandicate[CFG_MAX_PMKID_CACHE]; - UINT_32 u4PmkidCacheCount; - PMKID_ENTRY_T arPmkidCache[CFG_MAX_PMKID_CACHE]; - BOOLEAN fgIndicatePMKID; -#if CFG_SUPPORT_802_11W - BOOLEAN fgMgmtProtection; - UINT_32 u4SaQueryStart; - UINT_32 u4SaQueryCount; - UINT_8 ucSaQueryTimedOut; - PUINT_8 pucSaQueryTransId; - TIMER_T rSaQueryTimer; - BOOLEAN fgBipKeyInstalled; -#endif -}; - -struct _BOW_SPECIFIC_BSS_INFO_T { - UINT_16 u2Reserved; /* Reserved for Data Type Check */ -}; - -#if CFG_SLT_SUPPORT -typedef struct _SLT_INFO_T { - - P_BSS_DESC_T prPseudoBssDesc; - UINT_16 u2SiteID; - UINT_8 ucChannel2G4; - UINT_8 ucChannel5G; - BOOLEAN fgIsDUT; - UINT_32 u4BeaconReceiveCnt; - /////////Deprecated///////// - P_STA_RECORD_T prPseudoStaRec; -} SLT_INFO_T, *P_SLT_INFO_T; -#endif - - -/* Major member variables for WiFi FW operation. - Variables within this region will be ready for access after WIFI function is enabled. -*/ -typedef struct _WIFI_VAR_T { - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - BOOLEAN fgDebugCmdResp; - - CONNECTION_SETTINGS_T rConnSettings; - - SCAN_INFO_T rScanInfo; - -#if CFG_SUPPORT_ROAMING - ROAMING_INFO_T rRoamingInfo; -#endif /* CFG_SUPPORT_ROAMING */ - - AIS_FSM_INFO_T rAisFsmInfo; - - ENUM_PWR_STATE_T aePwrState[NETWORK_TYPE_INDEX_NUM]; - - BSS_INFO_T arBssInfo[NETWORK_TYPE_INDEX_NUM]; - - AIS_SPECIFIC_BSS_INFO_T rAisSpecificBssInfo; - -#if CFG_ENABLE_WIFI_DIRECT - P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings; - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - P_P2P_FSM_INFO_T prP2pFsmInfo; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - BOW_SPECIFIC_BSS_INFO_T rBowSpecificBssInfo; - BOW_FSM_INFO_T rBowFsmInfo; -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - DEAUTH_INFO_T arDeauthInfo[MAX_DEAUTH_INFO_COUNT]; - - /* Current Wi-Fi Settings and Flags */ - UINT_8 aucPermanentAddress[MAC_ADDR_LEN]; - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - UINT_8 aucDeviceAddress[MAC_ADDR_LEN]; - UINT_8 aucInterfaceAddress[MAC_ADDR_LEN]; - - UINT_8 ucAvailablePhyTypeSet; - - ENUM_PHY_TYPE_INDEX_T eNonHTBasicPhyType2G4; /* Basic Phy Type used by SCN according - * to the set of Available PHY Types - */ - - ENUM_PARAM_PREAMBLE_TYPE_T ePreambleType; - ENUM_REGISTRY_FIXED_RATE_T eRateSetting; - - BOOLEAN fgIsShortSlotTimeOptionEnable; - /* User desired setting, but will honor the capability of AP */ - - BOOLEAN fgEnableJoinToHiddenSSID; - BOOLEAN fgSupportWZCDisassociation; - - BOOLEAN fgSupportQoS; - BOOLEAN fgSupportAmpduTx; - BOOLEAN fgSupportAmpduRx; - BOOLEAN fgSupportTspec; - BOOLEAN fgSupportUAPSD; - BOOLEAN fgSupportULPSMP; - -#if CFG_SLT_SUPPORT - SLT_INFO_T rSltInfo; -#endif - -} WIFI_VAR_T, *P_WIFI_VAR_T;/* end of _WIFI_VAR_T */ - -/* cnm_timer module */ -typedef struct { - LINK_T rLinkHead; - OS_SYSTIME rNextExpiredSysTime; - KAL_WAKE_LOCK_T rWakeLock; - BOOLEAN fgWakeLocked; -} ROOT_TIMER, *P_ROOT_TIMER; - - -/* FW/DRV/NVRAM version information */ -typedef struct { - - /* NVRAM or Registry */ - UINT_16 u2Part1CfgOwnVersion; - UINT_16 u2Part1CfgPeerVersion; - UINT_16 u2Part2CfgOwnVersion; - UINT_16 u2Part2CfgPeerVersion; - - /* Firmware */ - UINT_16 u2FwProductID; - UINT_16 u2FwOwnVersion; - UINT_16 u2FwPeerVersion; - -} WIFI_VER_INFO_T, *P_WIFI_VER_INFO_T; - - -#if CFG_ENABLE_WIFI_DIRECT -/* -* p2p function pointer structure -*/ - -typedef struct _P2P_FUNCTION_LINKER { - P2P_REMOVE prP2pRemove; -// NIC_P2P_MEDIA_STATE_CHANGE prNicP2pMediaStateChange; -// SCAN_UPDATE_P2P_DEVICE_DESC prScanUpdateP2pDeviceDesc; -// P2P_FSM_RUN_EVENT_RX_PROBE_RESPONSE_FRAME prP2pFsmRunEventRxProbeResponseFrame; - P2P_GENERATE_P2P_IE prP2pGenerateWSC_IEForBeacon; -// P2P_CALCULATE_WSC_IE_LEN_FOR_PROBE_RSP prP2pCalculateWSC_IELenForProbeRsp; -// P2P_GENERATE_WSC_IE_FOR_PROBE_RSP prP2pGenerateWSC_IEForProbeRsp; -// SCAN_REMOVE_P2P_BSS_DESC prScanRemoveP2pBssDesc; -// P2P_HANDLE_SEC_CHECK_RSP prP2pHandleSecCheckRsp; - P2P_NET_REGISTER prP2pNetRegister; - P2P_NET_UNREGISTER prP2pNetUnregister; - P2P_CALCULATE_P2P_IE_LEN prP2pCalculateP2p_IELenForAssocReq; /* All IEs generated from supplicant. */ - P2P_GENERATE_P2P_IE prP2pGenerateP2p_IEForAssocReq; /* All IEs generated from supplicant. */ -} P2P_FUNCTION_LINKER, *P_P2P_FUNCTION_LINKER; - - -#endif - -/* - * Major ADAPTER structure - * Major data structure for driver operation - */ -struct _ADAPTER_T { - UINT_8 ucRevID; - - UINT_16 u2NicOpChnlNum; - - BOOLEAN fgIsEnableWMM; - BOOLEAN fgIsWmmAssoc; /* This flag is used to indicate that WMM is enable in current BSS */ - - UINT_32 u4OsPacketFilter; // packet filter used by OS - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_32 u4CSUMFlags; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - - ENUM_BAND_T aePreferBand[NETWORK_TYPE_INDEX_NUM]; - - /* ADAPTER flags */ - UINT_32 u4Flags; - UINT_32 u4HwFlags; - - BOOLEAN fgIsRadioOff; - - BOOLEAN fgIsEnterD3ReqIssued; - - UINT_8 aucMacAddress[MAC_ADDR_LEN]; - - ENUM_PHY_TYPE_INDEX_T eCurrentPhyType; /* Current selection basing on the set of Available PHY Types */ - -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - UINT_32 u4CoalescingBufCachedSize; - PUINT_8 pucCoalescingBufCached; -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - /* Buffer for CMD_INFO_T, Mgt packet and mailbox message */ - BUF_INFO_T rMgtBufInfo; - BUF_INFO_T rMsgBufInfo; - PUINT_8 pucMgtBufCached; - UINT_32 u4MgtBufCachedSize; - UINT_8 aucMsgBuf[MSG_BUFFER_SIZE]; -#if CFG_DBG_MGT_BUF - UINT_32 u4MemAllocDynamicCount; /* Debug only */ - UINT_32 u4MemFreeDynamicCount; /* Debug only */ -#endif - - STA_RECORD_T arStaRec[CFG_STA_REC_NUM]; - - /* Element for TX PATH */ - TX_CTRL_T rTxCtrl; - QUE_T rFreeCmdList; - CMD_INFO_T arHifCmdDesc[CFG_TX_MAX_CMD_PKT_NUM]; - - /* Element for RX PATH */ - RX_CTRL_T rRxCtrl; - - P_SDIO_CTRL_T prSDIOCtrl; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - /* Element for MT6620 E1 HIFSYS workaround */ - BOOLEAN fgIsClockGatingEnabled; -#endif - - /* Buffer for Authentication Event */ - /* Move to glue layer and refine the kal function */ - /* Reference to rsnGeneratePmkidIndication function at rsn.c */ - UINT_8 aucIndicationEventBuffer[(CFG_MAX_PMKID_CACHE * 20) + 8 ]; - - UINT_32 u4IntStatus; - - ENUM_ACPI_STATE_T rAcpiState; - - BOOLEAN fgIsIntEnable; - BOOLEAN fgIsIntEnableWithLPOwnSet; - - BOOLEAN fgIsFwOwn; - BOOLEAN fgWiFiInSleepyState; - - UINT_32 u4PwrCtrlBlockCnt; - - QUE_T rPendingCmdQueue; - - P_GLUE_INFO_T prGlueInfo; - - UINT_8 ucCmdSeqNum; - UINT_8 ucTxSeqNum; - -#if 1//CFG_SUPPORT_WAPI - BOOLEAN fgUseWapi; -#endif - - /* RF Test flags */ - BOOLEAN fgTestMode; - - /* WLAN Info for DRIVER_CORE OID query */ - WLAN_INFO_T rWlanInfo; - -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgIsP2PRegistered; - ENUM_NET_REG_STATE_T rP2PNetRegState; - BOOLEAN fgIsWlanLaunched; - P_P2P_INFO_T prP2pInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - OS_SYSTIME rP2pLinkQualityUpdateTime; - BOOLEAN fgIsP2pLinkQualityValid; - EVENT_LINK_QUALITY rP2pLinkQuality; -#endif -#endif - - /* Online Scan Option */ - BOOLEAN fgEnOnlineScan; - - /* Online Scan Option */ - BOOLEAN fgDisBcnLostDetection; - - /* MAC address */ - PARAM_MAC_ADDRESS rMyMacAddr; - - /* Wake-up Event for WOL */ - UINT_32 u4WakeupEventEnable; - - /* Event Buffering */ - EVENT_STATISTICS rStatStruct; - OS_SYSTIME rStatUpdateTime; - BOOLEAN fgIsStatValid; - - EVENT_LINK_QUALITY rLinkQuality; - OS_SYSTIME rLinkQualityUpdateTime; - BOOLEAN fgIsLinkQualityValid; - OS_SYSTIME rLinkRateUpdateTime; - BOOLEAN fgIsLinkRateValid; - - /* WIFI_VAR_T */ - WIFI_VAR_T rWifiVar; - - /* MTK WLAN NIC driver IEEE 802.11 MIB */ - IEEE_802_11_MIB_T rMib; - - /* Mailboxs for inter-module communication */ - MBOX_T arMbox[MBOX_ID_TOTAL_NUM]; - - /* Timers for OID Pending Handling */ - TIMER_T rOidTimeoutTimer; - - /* Root Timer for cnm_timer module */ - ROOT_TIMER rRootTimer; - - /* RLM maintenance */ - ENUM_CHNL_EXT_T eRfSco; - ENUM_SYS_PROTECT_MODE_T eSysProtectMode; - ENUM_GF_MODE_T eSysHtGfMode; - ENUM_RIFS_MODE_T eSysTxRifsMode; - ENUM_SYS_PCO_PHASE_T eSysPcoPhase; - - P_DOMAIN_INFO_ENTRY prDomainInfo; - - /* QM */ - QUE_MGT_T rQM; - - CNM_INFO_T rCnmInfo; - - UINT_32 u4PowerMode; - - UINT_32 u4CtiaPowerMode; - BOOLEAN fgEnCtiaPowerMode; - - UINT_32 fgEnArpFilter; - - UINT_32 u4UapsdAcBmp; - - UINT_32 u4MaxSpLen; - - UINT_32 u4PsCurrentMeasureEn; - - /* Version Information */ - WIFI_VER_INFO_T rVerInfo; - - /* 5GHz support (from F/W) */ - BOOLEAN fgIsHw5GBandDisabled; - BOOLEAN fgEnable5GBand; - BOOLEAN fgIsEepromUsed; - BOOLEAN fgIsEfuseValid; - BOOLEAN fgIsEmbbededMacAddrValid; - - /* Packet Forwarding Tracking */ - INT_32 i4PendingFwdFrameCount; - -#if CFG_SUPPORT_RDD_TEST_MODE - UINT_8 ucRddStatus; -#endif - - BOOL fgDisStaAgingTimeoutDetection; - -};/* end of _ADAPTER_T */ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros for BSS_INFO_T - Flag of Net Active */ -/*----------------------------------------------------------------------------*/ -#define IS_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive) -#define IS_BSS_ACTIVE(_prBssInfo) ((_prBssInfo)->fgIsNetActive) - -#define IS_AIS_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_AIS_INDEX) -#define IS_P2P_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_P2P_INDEX) -#define IS_BOW_ACTIVE(_prAdapter) IS_NET_ACTIVE(_prAdapter, NETWORK_TYPE_BOW_INDEX) - -#define SET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = TRUE;} - -#define UNSET_NET_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)].fgIsNetActive = FALSE;} - -#define BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; \ - _prBssInfo->fgIsNetActive = FALSE; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - COPY_MAC_ADDR(_prBssInfo->aucBSSID, _aucZeroMacAddr); \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = FALSE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } - -#if CFG_ENABLE_BT_OVER_WIFI -#define BOW_BSS_INFO_INIT(_prAdapter, _NetTypeIndex) \ - { \ - P_BSS_INFO_T _prBssInfo = &(_prAdapter->rWifiVar.arBssInfo[(_NetTypeIndex)]); \ - \ - _prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; \ - _prBssInfo->eCurrentOPMode = OP_MODE_BOW; \ - _prBssInfo->ucNetTypeIndex = (_NetTypeIndex); \ - _prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \ - LINK_INITIALIZE(&_prBssInfo->rStaRecOfClientList); \ - _prBssInfo->fgIsBeaconActivated = TRUE; \ - _prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; \ - _prBssInfo->fgIsNetAbsent = FALSE; \ - } -#endif - -/*----------------------------------------------------------------------------*/ -/* Macros for Power State */ -/*----------------------------------------------------------------------------*/ -#define SET_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_IDLE;} - -#define SET_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_ACTIVE;} - -#define SET_NET_PWR_STATE_PS(_prAdapter, _NetTypeIndex) \ - {_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] = PWR_STATE_PS;} - -#define IS_NET_PWR_STATE_ACTIVE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_ACTIVE) - -#define IS_NET_PWR_STATE_IDLE(_prAdapter, _NetTypeIndex) \ - (_prAdapter->rWifiVar.aePwrState[(_NetTypeIndex)] == PWR_STATE_IDLE) - -#define IS_SCN_PWR_STATE_ACTIVE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_ACTIVE) - -#define IS_SCN_PWR_STATE_IDLE(_prAdapter) \ - (_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_IDLE) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _ADAPTER_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/bow.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/bow.h deleted file mode 100755 index f062b6f0418e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/bow.h +++ /dev/null @@ -1,363 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/bow.h#1 $ -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: bow.h $ - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 22 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Submit missing BoW header files. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW structure. - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add Activity Report definition. - * - * 10 18 2010 chinghwa.yu - * [WCXRP00000110] [MT6620 Wi-Fi] [Driver] Fix BoW Connected event size - * Fix wrong BoW event size. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * sync. with design document for interface change. - * - * 04 02 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * Wi-Fi driver no longer needs to implement 802.11 PAL, thus replaced by wrapping command/event definitions - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * correct typo. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * update for all command/event needed to be supported by 802.11 PAL. - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * -*/ - -#ifndef _BOW_H_ -#define _BOW_H_ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define BOWDEVNAME "bow0" - -#define MAX_BOW_NUMBER_OF_CHANNEL_2G4 14 -#define MAX_BOW_NUMBER_OF_CHANNEL_5G 4 -#define MAX_BOW_NUMBER_OF_CHANNEL 18 //(MAX_BOW_NUMBER_OF_CHANNEL_2G4 + MAX_BOW_NUMBER_OF_CHANNEL_5G) - -#define MAX_ACTIVITY_REPORT 2 -#define MAX_ACTIVITY_REPROT_TIME 660 - -#define ACTIVITY_REPORT_STATUS_SUCCESS 0 -#define ACTIVITY_REPORT_STATUS_FAILURE 1 -#define ACTIVITY_REPORT_STATUS_TIME_INVALID 2 -#define ACTIVITY_REPORT_STATUS_OTHERS 3 - -#define ACTIVITY_REPORT_SCHEDULE_UNKNOWN 0 //Does not know the schedule of the interference -#define ACTIVITY_REPORT_SCHEDULE_KNOWN 1 - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _BT_OVER_WIFI_COMMAND_HEADER_T { - UINT_8 ucCommandId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_COMMAND_HEADER_T, *P_AMPC_COMMAND_HEADER_T; - -typedef struct _BT_OVER_WIFI_COMMAND { - AMPC_COMMAND_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_COMMAND, *P_AMPC_COMMAND; - -typedef struct _BT_OVER_WIFI_EVENT_HEADER_T { - UINT_8 ucEventId; - UINT_8 ucSeqNumber; - UINT_16 u2PayloadLength; -} AMPC_EVENT_HEADER_T, *P_AMPC_EVENT_HEADER_T; - -typedef struct _BT_OVER_WIFI_EVENT { - AMPC_EVENT_HEADER_T rHeader; - UINT_8 aucPayload[0]; -} AMPC_EVENT, *P_AMPC_EVENT; - -typedef struct _CHANNEL_DESC_T { - UINT_8 ucChannelBand; - UINT_8 ucChannelNum; -} CHANNEL_DESC, P_CHANNEL_DESC; - -// Command Structures -typedef struct _BOW_SETUP_CONNECTION { -//Fixed to 2.4G - UINT_8 ucChannelNum; - UINT_8 ucReserved1; - UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucReserved2; - -//Pending, for future BOW 5G supporting. -/* UINT_8 aucPeerAddress[6]; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 ucPAL_Capabilities; - INT_8 cMaxTxPower; - UINT_8 ucChannelListNum; - CHANNEL_DESC arChannelList[1]; -*/ -} BOW_SETUP_CONNECTION, *P_BOW_SETUP_CONNECTION; - -typedef struct _BOW_DESTROY_CONNECTION { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_DESTROY_CONNECTION, *P_BOW_DESTROY_CONNECTION; - -typedef struct _BOW_SET_PTK { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; - UINT_8 aucTemporalKey[16]; -} BOW_SET_PTK, *P_BOW_SET_PTK; - -typedef struct _BOW_READ_RSSI { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_RSSI, *P_BOW_READ_RSSI; - -typedef struct _BOW_READ_LINK_QUALITY { - UINT_8 aucPeerAddress[6]; - UINT_8 aucReserved[2]; -} BOW_READ_LINK_QUALITY, *P_BOW_READ_LINK_QUALITY; - -typedef struct _BOW_SHORT_RANGE_MODE { - UINT_8 aucPeerAddress[6]; - INT_8 cTxPower; - UINT_8 ucReserved; -} BOW_SHORT_RANGE_MODE, *P_BOW_SHORT_RANGE_MODE; - -// Event Structures -typedef struct _BOW_COMMAND_STATUS { - UINT_8 ucStatus; - UINT_8 ucReserved[3]; -} BOW_COMMAND_STATUS, *P_BOW_COMMAND_STATUS; - -typedef struct _BOW_MAC_STATUS { - UINT_8 aucMacAddr[6]; - UINT_8 ucAvailability; - UINT_8 ucNumOfChannel; - CHANNEL_DESC arChannelList[MAX_BOW_NUMBER_OF_CHANNEL]; -} BOW_MAC_STATUS, *P_BOW_MAC_STATUS; - -typedef struct _BOW_LINK_CONNECTED { - CHANNEL_DESC rChannel; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_CONNECTED, *P_BOW_LINK_CONNECTED; - -typedef struct _BOW_LINK_DISCONNECTED { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_LINK_DISCONNECTED, *P_BOW_LINK_DISCONNECTED; - -typedef struct _BOW_RSSI { - INT_8 cRssi; - UINT_8 aucReserved[3]; -} BOW_RSSI, *P_BOW_RSSI; - -typedef struct _BOW_LINK_QUALITY { - UINT_8 ucLinkQuality; - UINT_8 aucReserved[3]; -} BOW_LINK_QUALITY, *P_BOW_LINK_QUALITY; - -typedef enum _ENUM_BOW_CMD_ID_T { - BOW_CMD_ID_GET_MAC_STATUS = 1, - BOW_CMD_ID_SETUP_CONNECTION, - BOW_CMD_ID_DESTROY_CONNECTION, - BOW_CMD_ID_SET_PTK, - BOW_CMD_ID_READ_RSSI, - BOW_CMD_ID_READ_LINK_QUALITY, - BOW_CMD_ID_SHORT_RANGE_MODE, - BOW_CMD_ID_GET_CHANNEL_LIST, -} ENUM_BOW_CMD_ID_T, *P_ENUM_BOW_CMD_ID_T; - -typedef enum _ENUM_BOW_EVENT_ID_T { - BOW_EVENT_ID_COMMAND_STATUS = 1, - BOW_EVENT_ID_MAC_STATUS, - BOW_EVENT_ID_LINK_CONNECTED, - BOW_EVENT_ID_LINK_DISCONNECTED, - BOW_EVENT_ID_RSSI, - BOW_EVENT_ID_LINK_QUALITY, - BOW_EVENT_ID_CHANNEL_LIST, - BOW_EVENT_ID_CHANNEL_SELECTED, -} ENUM_BOW_EVENT_ID_T, *P_ENUM_BOW_EVENT_ID_T; - -typedef enum _ENUM_BOW_DEVICE_STATE { - BOW_DEVICE_STATE_DISCONNECTED = 0, - BOW_DEVICE_STATE_DISCONNECTING, - BOW_DEVICE_STATE_ACQUIRING_CHANNEL, - BOW_DEVICE_STATE_STARTING, - BOW_DEVICE_STATE_SCANNING, - BOW_DEVICE_STATE_CONNECTING, - BOW_DEVICE_STATE_CONNECTED, - BOW_DEVICE_STATE_NUM -} ENUM_BOW_DEVICE_STATE, *P_ENUM_BOW_DEVICE_STATE; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_BOW_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/cmd_buf.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/cmd_buf.h deleted file mode 100755 index 0ef997319ea2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/cmd_buf.h +++ /dev/null @@ -1,216 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cmd_buf.h $ - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Enable change log -*/ - -#ifndef _CMD_BUF_H -#define _CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef enum _COMMAND_TYPE { - COMMAND_TYPE_GENERAL_IOCTL, - COMMAND_TYPE_NETWORK_IOCTL, - COMMAND_TYPE_SECURITY_FRAME, - COMMAND_TYPE_MANAGEMENT_FRAME, - COMMAND_TYPE_NUM -} COMMAND_TYPE, *P_COMMAND_TYPE; - -typedef VOID (*PFN_CMD_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -typedef VOID (*PFN_CMD_TIMEOUT_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -struct _CMD_INFO_T { - QUE_ENTRY_T rQueEntry; - - COMMAND_TYPE eCmdType; - - UINT_16 u2InfoBufLen; /* This is actual CMD buffer length */ - PUINT_8 pucInfoBuffer; /* May pointer to structure in prAdapter */ - P_NATIVE_PACKET prPacket; /* only valid when it's a security frame */ - - ENUM_NETWORK_TYPE_INDEX_T eNetworkType; - UINT_8 ucStaRecIndex; /* only valid when it's a security frame */ - - PFN_CMD_DONE_HANDLER pfCmdDoneHandler; - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler; - - BOOLEAN fgIsOid; /* Used to check if we need indicate */ - - UINT_8 ucCID; - BOOLEAN fgSetQuery; - BOOLEAN fgNeedResp; - BOOLEAN fgDriverDomainMCR; /* Access Driver Domain MCR, for CMD_ID_ACCESS_REG only */ - UINT_8 ucCmdSeqNum; - UINT_32 u4SetInfoLen; /* Indicate how many byte we read for Set OID */ - - /* information indicating by OID/ioctl */ - PVOID pvInformationBuffer; - UINT_32 u4InformationBufferLength; - - /* private data */ - UINT_32 u4PrivateData; -}; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ); - -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ); - -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Routines for CMDs */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanSendSetQueryCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hal.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hal.h deleted file mode 100755 index 47906fd91aa2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hal.h +++ /dev/null @@ -1,649 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/hal.h#1 $ -*/ - -/*! \file "hal.h" - \brief The declaration of hal functions - - N/A -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: hal.h $ - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 09 01 2010 cp.wu - * NULL - * move HIF CR initialization from where after sdioSetupCardFeature() to wlanAdapterStart() - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-16 18:02:26 GMT mtk02752 -** include precomp.h -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:16 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 13:54:15 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-11 10:36:01 GMT mtk01084 -** modify HAL functions -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-09 22:56:28 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:50:09 GMT mtk01084 -** add new macro HAL_TX_PORT_WR -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:08:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:50 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-05-18 14:28:10 GMT mtk01084 -** fix issue in HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-11 17:26:33 GMT mtk01084 -** modify the bit definition to check driver own status -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:30:22 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:50:34 GMT mtk01461 -** Redefine HAL_PORT_RD/WR macro for SW pre test -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-24 09:46:49 GMT mtk01084 -** fix LINT error -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 16:53:38 GMT mtk01084 -** add HAL_DRIVER_OWN_BY_SDIO_CMD52() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:53:13 GMT mtk01426 -** Fixed lint warn -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:20 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HAL_H -#define _HAL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/* Macros for flag operations for the Adapter structure */ -#define HAL_SET_FLAG(_M, _F) ((_M)->u4HwFlags |= (_F)) -#define HAL_CLEAR_FLAG(_M, _F) ((_M)->u4HwFlags &= ~(_F)) -#define HAL_TEST_FLAG(_M, _F) ((_M)->u4HwFlags & (_F)) -#define HAL_TEST_FLAGS(_M, _F) (((_M)->u4HwFlags & (_F)) == (_F)) - -#if defined(_HIF_SDIO) -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_RD access fail! 0x%x: 0x%x \n", _u4Offset, *_pu4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_RD access! 0x%x\n", _u4Offset)); \ - } \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_MCR_WR access fail! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_MCR_WR access! 0x%x: 0x%x \n", _u4Offset, _u4Value)); \ - } \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_RD access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_RD access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - /*fgResult = FALSE; */\ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_PORT_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - /*fgResult = TRUE;*/ } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_PORT_WR access! 0x%x\n", _u4Port)); \ - } \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("HAL_BYTE_WR access fail! 0x%x\n", _u4Port)); \ - } \ - else { \ - } \ - } \ - else { \ - DBGLOG(HAL, WARN, ("ignore HAL_BYTE_WR access! 0x%x\n", _u4Port)); \ - } \ - } - - -#define HAL_DRIVER_OWN_BY_SDIO_CMD52(_prAdapter, _pfgDriverIsOwnReady) \ - { \ - UINT_8 ucBuf = BIT(1); \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \ - if (kalDevReadAfterWriteWithSdioCmd52(_prAdapter->prGlueInfo, MCR_WHLPCR_BYTE1, &ucBuf, 1) == FALSE) {\ - HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \ - fgIsBusAccessFailed = TRUE; \ - DBGLOG(HAL, ERROR, ("kalDevReadAfterWriteWithSdioCmd52 access fail!\n")); \ - } \ - else { \ - *_pfgDriverIsOwnReady = (ucBuf & BIT(0)) ? TRUE : FALSE; \ - } \ - } else { \ - DBGLOG(HAL, WARN, ("ignore HAL_DRIVER_OWN_BY_SDIO_CMD52 access!\n")); \ - } \ - } - -#else /* #if defined(_HIF_SDIO) */ -#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value); \ - } - -#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value); \ - } - -#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize); \ - } - -#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \ - { \ - if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \ - ASSERT(0); \ - } \ - kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, _u4Port, _ucBuf); \ - } - -#endif /* #if defined(_HIF_SDIO) */ - - -#define HAL_READ_RX_PORT(prAdapter, u4PortId, u4Len, pvBuf, _u4ValidBufSize) \ - { \ - ASSERT(u4PortId < 2); \ - HAL_PORT_RD(prAdapter, \ - ((u4PortId == 0) ? MCR_WRDR0 : MCR_WRDR1), \ - u4Len, \ - pvBuf, \ - _u4ValidBufSize/*temp!!*//*4Kbyte*/) \ - } - -#define HAL_WRITE_TX_PORT(_prAdapter, _ucTxPortIdx, _u4Len, _pucBuf, _u4ValidBufSize) \ - { \ - ASSERT(_ucTxPortIdx < 2); \ - if((_u4ValidBufSize - _u4Len) >= sizeof(UINT_32)) { \ - /* fill with single dword of zero as TX-aggregation termination */ \ - *(PUINT_32) (&((_pucBuf)[ALIGN_4(_u4Len)])) = 0; \ - } \ - HAL_PORT_WR(_prAdapter, \ - (_ucTxPortIdx == 0) ? MCR_WTDR0 : MCR_WTDR1, \ - _u4Len, \ - _pucBuf, \ - _u4ValidBufSize/*temp!!*//*4KByte*/) \ - } - -/* The macro to read the given MCR several times to check if the wait - condition come true. */ -#define HAL_MCR_RD_AND_WAIT(_pAdapter, _offset, _pReadValue, _waitCondition, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 count; \ - (_status) = FALSE; \ - for (count = 0; count < (_waitCount); count++) { \ - HAL_MCR_RD((_pAdapter), (_offset), (_pReadValue)); \ - if ((_waitCondition)) { \ - (_status) = TRUE; \ - break; \ - } \ - kalUdelay((_waitDelay)); \ - } \ - } - - -/* The macro to write 1 to a R/S bit and read it several times to check if the - command is done */ -#define HAL_MCR_WR_AND_WAIT(_pAdapter, _offset, _writeValue, _busyMask, _waitDelay, _waitCount, _status) \ - { \ - UINT_32 u4Temp; \ - UINT_32 u4Count = _waitCount; \ - (_status) = FALSE; \ - HAL_MCR_WR((_pAdapter), (_offset), (_writeValue)); \ - do { \ - kalUdelay((_waitDelay)); \ - HAL_MCR_RD((_pAdapter), (_offset), &u4Temp); \ - if (!(u4Temp & (_busyMask))) { \ - (_status) = TRUE; \ - break; \ - } \ - u4Count--; \ - } while (u4Count); \ - } - -#define HAL_GET_CHIP_ID_VER(_prAdapter, pu2ChipId, pu2Version) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - *pu2ChipId = (UINT_16)(u4Value & WCIR_CHIP_ID); \ - *pu2Version = (UINT_16)(u4Value & WCIR_REVISION_ID) >> 16; \ - } - -#define HAL_WAIT_WIFI_FUNC_READY(_prAdapter) \ - { \ - UINT_32 u4Value; \ - UINT_32 i; \ - for (i = 0; i < 100; i++) { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WCIR, \ - &u4Value); \ - if (u4Value & WCIR_WLAN_READY) { \ - break; \ - } \ - NdisMSleep(10); \ - } \ - } - -#define HAL_INTR_DISABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_CLR) - -#define HAL_INTR_ENABLE(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_INT_EN_SET) - -#define HAL_INTR_ENABLE_AND_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - (WHLPCR_INT_EN_SET | WHLPCR_FW_OWN_REQ_SET)) - -#define HAL_LP_OWN_SET(_prAdapter) \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_SET) - -#define HAL_LP_OWN_CLR_OK(_prAdapter, _pfgResult) \ - { \ - UINT_32 i; \ - UINT_32 u4RegValue; \ - UINT_32 u4LoopCnt = 2048 / 8; \ - *_pfgResult = TRUE; \ - /* Software get LP ownership */ \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHLPCR, \ - WHLPCR_FW_OWN_REQ_CLR) \ - for (i = 0; i < u4LoopCnt; i++) { \ - HAL_MCR_RD(_prAdapter, MCR_WHLPCR, &u4RegValue); \ - if (u4RegValue & WHLPCR_IS_DRIVER_OWN) { \ - break; \ - } \ - else { \ - kalUdelay(8); \ - } \ - } \ - if (i == u4LoopCnt) { \ - *_pfgResult = FALSE; \ - /*ERRORLOG(("LP cannot be own back (%ld)", u4LoopCnt));*/ \ - /* check the time of LP instructions need to perform from Sleep to On */ \ - /*ASSERT(0); */ \ - } \ - } - -#define HAL_GET_ABNORMAL_INTERRUPT_REASON_CODE(_prAdapter, pu4AbnormalReason) \ - { \ - HAL_MCR_RD(_prAdapter, \ - MCR_WASR, \ - pu4AbnormalReason); \ - } - - -#define HAL_DISABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_ENABLE_RX_ENHANCE_MODE(_prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_RX_ENHANCE_MODE_EN); \ - } - -#define HAL_CFG_MAX_HIF_RX_LEN_NUM(_prAdapter, _ucNumOfRxLen) \ - { \ - UINT_32 u4Value, ucNum; \ - ucNum = ((_ucNumOfRxLen >= 16) ? 0 : _ucNumOfRxLen); \ - u4Value = 0; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - u4Value &= ~WHCR_MAX_HIF_RX_LEN_NUM; \ - u4Value |= ((((UINT_32)ucNum) << 4) & WHCR_MAX_HIF_RX_LEN_NUM); \ - HAL_MCR_WR(_prAdapter, \ - MCR_WHCR, \ - u4Value); \ - } - -#define HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value & ~WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = TRUE;\ - } - -#define HAL_SET_INTR_STATUS_WRITE_1_CLEAR(prAdapter) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, \ - MCR_WHCR, \ - &u4Value); \ - HAL_MCR_WR(prAdapter, \ - MCR_WHCR, \ - u4Value | WHCR_W_INT_CLR_CTRL); \ - prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = FALSE;\ - } - -/* Note: enhance mode structure may also carried inside the buffer, - if the length of the buffer is long enough */ -#define HAL_READ_INTR_STATUS(prAdapter, length, pvBuf) \ - HAL_PORT_RD(prAdapter, \ - MCR_WHISR, \ - length, \ - pvBuf, \ - length) - -#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, aucTxReleaseCount) \ - { \ - PUINT_32 pu4Value = (PUINT_32)aucTxReleaseCount; \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR0, \ - &pu4Value[0]); \ - HAL_MCR_RD(_prAdapter, \ - MCR_WTSR1, \ - &pu4Value[1]); \ - } - -#define HAL_READ_RX_LENGTH(prAdapter, pu2Rx0Len, pu2Rx1Len) \ - { \ - UINT_32 u4Value; \ - u4Value = 0; \ - HAL_MCR_RD(prAdapter, \ - MCR_WRPLR, \ - &u4Value); \ - *pu2Rx0Len = (UINT_16)u4Value; \ - *pu2Rx1Len = (UINT_16)(u4Value >> 16); \ - } - -#define HAL_GET_INTR_STATUS_FROM_ENHANCE_MODE_STRUCT(pvBuf, u2Len, pu4Status) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvBuf; \ - *pu4Status = pu4Buf[0]; \ - } - -#define HAL_GET_TX_STATUS_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4BufOut, u4LenBufOut) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT(u4LenBufOut >= 8); \ - pu4BufOut[0] = pu4Buf[1]; \ - pu4BufOut[1] = pu4Buf[2]; \ - } - -#define HAL_GET_RX_LENGTH_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu2Rx0Num, au2Rx0Len, pu2Rx1Num, au2Rx1Len) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - ASSERT((sizeof(au2Rx0Len) / sizeof(UINT_16)) >= 16); \ - ASSERT((sizeof(au2Rx1Len) / sizeof(UINT_16)) >= 16); \ - *pu2Rx0Num = (UINT_16)pu4Buf[3]; \ - *pu2Rx1Num = (UINT_16)(pu4Buf[3] >> 16); \ - kalMemCopy(au2Rx0Len, &pu4Buf[4], 8); \ - kalMemCopy(au2Rx1Len, &pu4Buf[12], 8); \ - } - -#define HAL_GET_MAILBOX_FROM_ENHANCE_MODE_STRUCT(pvInBuf, pu4Mailbox0, pu4Mailbox1) \ - { \ - PUINT_32 pu4Buf = (PUINT_32)pvInBuf; \ - *pu4Mailbox0 = (UINT_16)pu4Buf[21]; \ - *pu4Mailbox1 = (UINT_16)pu4Buf[22]; \ - } - -#define HAL_IS_TX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_TX_DONE_INT) ? TRUE : FALSE) - -#define HAL_IS_RX_DONE_INTR(u4IntrStatus) \ - ((u4IntrStatus & (WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT)) ? TRUE : FALSE) - -#define HAL_IS_ABNORMAL_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_ABNORMAL_INT) ? TRUE : FALSE) - -#define HAL_IS_FW_OWNBACK_INTR(u4IntrStatus) \ - ((u4IntrStatus & WHISR_FW_OWN_BACK_INT) ? TRUE : FALSE) - -#define HAL_PUT_MAILBOX(prAdapter, u4MboxId, u4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_WR(prAdapter, \ - ((u4MboxId == 0) ? MCR_H2DSM0R : MCR_H2DSM1R), \ - u4Data); \ - } - -#define HAL_GET_MAILBOX(prAdapter, u4MboxId, pu4Data) \ - { \ - ASSERT(u4MboxId < 2); \ - HAL_MCR_RD(prAdapter, \ - ((u4MboxId == 0) ? MCR_D2HRM0R : MCR_D2HRM1R), \ - pu4Data); \ - } - -#define HAL_SET_MAILBOX_READ_CLEAR(prAdapter, fgEnableReadClear) \ - { \ - UINT_32 u4Value; \ - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value);\ - HAL_MCR_WR(prAdapter, MCR_WHCR, \ - (fgEnableReadClear) ? \ - (u4Value | WHCR_W_MAILBOX_RD_CLR_EN) : \ - (u4Value & ~WHCR_W_MAILBOX_RD_CLR_EN)); \ - prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear = fgEnableReadClear;\ - } - -#define HAL_GET_MAILBOX_READ_CLEAR(prAdapter) (prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear) - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _HAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hif_rx.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hif_rx.h deleted file mode 100755 index 1f2d6d23d3b5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hif_rx.h +++ /dev/null @@ -1,267 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/hif_rx.h#1 $ -*/ - -/*! \file "hif_rx.h" - \brief Provide HIF RX Header Information between F/W and Driver - - N/A -*/ -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: hif_rx.h $ - * - * 09 01 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * follow-ups for HIF_RX_HEADER_T update: - * 1) add TCL - * 2) add RCPI - * 3) add ChannelNumber - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:44:00 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-09 13:59:20 GMT MTK02468 -** Added HIF_RX_HDR parsing macros -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 19:54:54 GMT mtk02752 -** adopt HIF_RX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-29 19:51:19 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:33:58 GMT mtk01461 -** Add define of HW_APPENED_LEN -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:51:02 GMT mtk01461 -** Rename ENUM_HIF_RX_PKT_TYPE_T -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 12:05:03 GMT mtk01426 -** Remove __KAL_ATTRIB_PACKED__ and add hifDataTypeCheck() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:18:52 GMT mtk01426 -** Add comment to HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:23 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _HIF_RX_H -#define _HIF_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/*! HIF_RX_HEADER_T */ -// DW 0, Byte 1 -#define HIF_RX_HDR_PACKET_TYPE_MASK BITS(0,1) - -// DW 1, Byte 0 -#define HIF_RX_HDR_HEADER_LEN BITS(2,7) -#define HIF_RX_HDR_HEADER_LEN_OFFSET 2 -#define HIF_RX_HDR_HEADER_OFFSET_MASK BITS(0,1) - -// DW 1, Byte 1 -#define HIF_RX_HDR_80211_HEADER_FORMAT BIT(0) -#define HIF_RX_HDR_DO_REORDER BIT(1) -#define HIF_RX_HDR_PAL BIT(2) -#define HIF_RX_HDR_TCL BIT(3) -#define HIF_RX_HDR_NETWORK_IDX_MASK BITS(4,7) -#define HIF_RX_HDR_NETWORK_IDX_OFFSET 4 - -// DW 1, Byte 2, 3 -#define HIF_RX_HDR_SEQ_NO_MASK BITS(0,11) -#define HIF_RX_HDR_TID_MASK BITS(12,14) -#define HIF_RX_HDR_TID_OFFSET 12 -#define HIF_RX_HDR_BAR_FRAME BIT(15) - - - -#define HIF_RX_HDR_FLAG_AMP_WDS BIT(0) -#define HIF_RX_HDR_FLAG_802_11_FORMAT BIT(1) -#define HIF_RX_HDR_FLAG_BAR_FRAME BIT(2) -#define HIF_RX_HDR_FLAG_DO_REORDERING BIT(3) -#define HIF_RX_HDR_FLAG_CTRL_WARPPER_FRAME BIT(4) - -#define HIF_RX_HW_APPENDED_LEN 4 - -// For DW 2, Byte 3 - ucHwChannelNum -#define HW_CHNL_NUM_MAX_2G4 14 -#define HW_CHNL_NUM_MAX_4G_5G (255 - HW_CHNL_NUM_MAX_2G4) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -typedef struct _HIF_RX_HEADER_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucHerderLenOffset; - UINT_8 uc80211_Reorder_PAL_TCL; - UINT_16 u2SeqNoTid; - UINT_8 ucStaRecIdx; - UINT_8 ucRcpi; - UINT_8 ucHwChannelNum; - UINT_8 ucReserved; -} HIF_RX_HEADER_T, *P_HIF_RX_HEADER_T; - -typedef enum _ENUM_HIF_RX_PKT_TYPE_T { - HIF_RX_PKT_TYPE_DATA = 0, - HIF_RX_PKT_TYPE_EVENT, - HIF_RX_PKT_TYPE_TX_LOOPBACK, - HIF_RX_PKT_TYPE_MANAGEMENT, - HIF_RX_PKT_TYPE_NUM -} ENUM_HIF_RX_PKT_TYPE_T, *P_ENUM_HIF_RX_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define HIF_RX_HDR_SIZE sizeof(HIF_RX_HEADER_T) - -#define HIF_RX_HDR_GET_80211_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_80211_HEADER_FORMAT) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_REORDER_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_DO_REORDER) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_PAL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_PAL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_TCL_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_TCL) ? TRUE : FALSE)) -#define HIF_RX_HDR_GET_NETWORK_IDX(_prHifRxHdr) \ - ((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_NETWORK_IDX_MASK)\ - >> HIF_RX_HDR_NETWORK_IDX_OFFSET) - - -#define HIF_RX_HDR_GET_TID(_prHifRxHdr) \ - ((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_TID_MASK)\ - >> HIF_RX_HDR_TID_OFFSET) -#define HIF_RX_HDR_GET_SN(_prHifRxHdr) \ - (((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_SEQ_NO_MASK) -#define HIF_RX_HDR_GET_BAR_FLAG(_prHifRxHdr) \ - (((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_BAR_FRAME)? TRUE: FALSE)) - - -#define HIF_RX_HDR_GET_CHNL_NUM(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) > HW_CHNL_NUM_MAX_4G_5G ) ? \ - ( ((_prHifRxHdr)->ucHwChannelNum) - HW_CHNL_NUM_MAX_4G_5G ) : \ - ((_prHifRxHdr)->ucHwChannelNum) ) - -/* To do: support more bands other than 2.4G and 5G */ -#define HIF_RX_HDR_GET_RF_BAND(_prHifRxHdr) \ - ( ( ((_prHifRxHdr)->ucHwChannelNum) <= HW_CHNL_NUM_MAX_2G4 ) ? \ - BAND_2G4 : BAND_5G) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - * We'll need this for porting driver to different RTOS. - */ -__KAL_INLINE__ VOID -hifDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_RX_HEADER_T) == 12); - - return; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hif_tx.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hif_tx.h deleted file mode 100755 index 755e7abe8d15..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/hif_tx.h +++ /dev/null @@ -1,265 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/hif_tx.h#1 $ -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: hif_tx.h $ - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * 2. follow MSDN defined behavior when associates to another AP - * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-10 16:43:40 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-24 19:55:11 GMT mtk02752 -** adopt HIF_TX_HEADER_T in new data path -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-23 17:54:13 GMT mtk02752 -** CMD_HDR_SIZE = (sizeof(WIFI_CMD_T)) to follow up CM's CMD/EVENT documentation -** -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-17 22:41:10 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-17 17:34:07 GMT mtk02752 -** remove HIF_TX_BUFF_COUNT_TC0 (move to nic_tx.h) -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-17 12:14:12 GMT mtk02752 -** add initial value for HIF_TX_BUFF_COUNT_TC5 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-13 13:54:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-04 14:11:14 GMT mtk01084 -** modify SW TX data format -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-29 19:51:53 GMT mtk01084 -** modify FW/ driver interface -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-20 12:22:46 GMT mtk01461 -** Add SeqNum field to CMD Header -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:40:52 GMT mtk01461 -** Update the Log Sign -*/ - -#ifndef _HIF_TX_H -#define _HIF_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Maximum buffer size for individual HIF TCQ Buffer */ -#define HIF_TX_BUFF_MAX_SIZE 1552 /* Reserved field was not included */ - -/* Maximum buffer count for individual HIF TCQ */ -#define HIF_TX_BUFF_COUNT_TC0 3 -#define HIF_TX_BUFF_COUNT_TC1 3 -#define HIF_TX_BUFF_COUNT_TC2 3 -#define HIF_TX_BUFF_COUNT_TC3 3 -#define HIF_TX_BUFF_COUNT_TC4 2 - -#define TX_HDR_SIZE sizeof(HIF_TX_HEADER_T) - -#define CMD_HDR_SIZE sizeof(WIFI_CMD_T) - -#define CMD_PKT_SIZE_FOR_IMAGE 2048 /* !< 2048 Bytes CMD payload buffer */ - - -/*! NIC_HIF_TX_HEADER_T */ -// DW 0, Byte 0,1 -#define HIF_TX_HDR_TX_BYTE_COUNT_MASK BITS(0,11) -#define HIF_TX_HDR_USER_PRIORITY_OFFSET 12 - -// DW 0, Byte 2 -#define HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK BITS(0,7) - -// DW 0, Byte 3 -#define HIF_TX_HDR_IP_CSUM BIT(0) -#define HIF_TX_HDR_TCP_CSUM BIT(1) -#define HIF_TX_HDR_RESOURCE_MASK BITS(2,5) -#define HIF_TX_HDR_RESOURCE_OFFSET 2 -#define HIF_TX_HDR_PACKET_TYPE_MASK BITS(6,7) -#define HIF_TX_HDR_PACKET_TYPE_OFFSET 6 - -// DW 1, Byte 0 -#define HIF_TX_HDR_WLAN_HEADER_LEN_MASK BITS(0,5) - -// DW 1, Byte 1 -#define HIF_TX_HDR_FORMAT_ID_MASK BITS(0,2) -#define HIF_TX_HDR_NETWORK_TYPE_MASK BITS(4,5) -#define HIF_TX_HDR_NETWORK_TYPE_OFFSET 4 -#define HIF_TX_HDR_FLAG_1X_FRAME_MASK BIT(6) -#define HIF_TX_HDR_FLAG_1X_FRAME_OFFSET 6 -#define HIF_TX_HDR_FLAG_802_11_FORMAT_MASK BIT(7) -#define HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET 7 - - -// DW2, Byte 3 -#define HIF_TX_HDR_PS_FORWARDING_TYPE_MASK BITS(0,1) -#define HIF_TX_HDR_PS_SESSION_ID_MASK BITS(2,4) -#define HIF_TX_HDR_PS_SESSION_ID_OFFSET 2 -#define HIF_TX_HDR_BURST_END_MASK BIT(5) -#define HIF_TX_HDR_BURST_END_OFFSET 5 - -// DW3, Byte 1 -#define HIF_TX_HDR_NEED_ACK BIT(0) -#define HIF_TX_HDR_BIP BIT(1) -#define HIF_TX_HDR_BASIC_RATE BIT(2) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _HIF_HW_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - UINT_8 aucBuffer[0]; -} HIF_HW_TX_HEADER_T, *P_HIF_HW_TX_HEADER_T; - -typedef struct _HIF_TX_HEADER_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucWlanHeaderLength; - UINT_8 ucPktFormtId_Flags; - UINT_16 u2LLH; /* for BOW */ - UINT_16 u2SeqNo; /* for BOW */ - UINT_8 ucStaRecIdx; - UINT_8 ucForwardingType_SessionID_Reserved; - UINT_8 ucPacketSeqNo; - UINT_8 ucAck_BIP_BasicRate; - UINT_8 aucReserved[2]; -} HIF_TX_HEADER_T, *P_HIF_TX_HEADER_T; - -typedef enum _ENUM_HIF_TX_PKT_TYPE_T { - HIF_TX_PKT_TYPE_DATA = 0, - HIF_TX_PKT_TYPE_CMD, - HIF_TX_PKT_TYPE_HIF_LOOPBACK, - HIF_TX_PKT_TYPE_MANAGEMENT, - HIF_TX_PKT_TYPE_NUM -} ENUM_HIF_TX_PKT_TYPE_T, *P_ENUM_HIF_TX_PKT_TYPE_T; - -typedef enum _ENUM_HIF_OOB_CTRL_PKT_TYPE_T { - HIF_OOB_CTRL_PKT_TYPE_LOOPBACK = 1, - HIF_OOB_CTRL_PKT_TYP_NUM -} ENUM_HIF_OOB_CTRL_PKT_TYPE_T, *P_ENUM_HIF_OOB_CTRL_PKT_TYPE_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define TFCB_FRAME_PAD_TO_DW(u2Length) ALIGN_4(u2Length) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* Kevin: we don't have to call following function to inspect the data structure. - * It will check automatically while at compile time. - */ -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ); - -__KAL_INLINE__ VOID -hif_txDataTypeCheck ( - VOID - ) -{ - DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_TX_HEADER_T) == 16); - - return; -} - -#endif /*_HIF_TX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mac.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mac.h deleted file mode 100755 index a6c3994ff808..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mac.h +++ /dev/null @@ -1,2226 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/mac.h#2 $ -*/ - -/*! \file "mac.h" - \brief Brief description. - - Detail description. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mac.h $ - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * Add the length check before access the ie length filed. - * - * 05 06 2011 wh.su - * [WCXRP00000699] [MT6620 Wi-Fi][Driver] Add the ie pointer check for avoid TP-LINK AP send the wrong beacon make driver got incorrect support rate set - * adding the length check before processing next ie.. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discover ability support. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Some action frame define is not belong to P2P. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add some service discovery MAC define, phase I. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 13 2010 cp.wu - * [WCXRP00000256] [MT6620 Wi-Fi][Driver] Eliminate potential issues which is identified by Klockwork - * suppress warning reported by Klockwork. - * - * 11 01 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * revert to previous revision. (this file is not necessary to be changed) - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * 1. Add P2P MAC define. - * 2. Add scan device found event - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add WFA specific OUI. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P IE ID & Vendor OUI TYPE for P2P. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge MAC.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added OFFSET_BAR_SSC_SN -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:00:24 GMT MTK02468 -** Added offsets and masks for the BA Parameter Set filed -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:26 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _MAC_H -#define _MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//3 /* --------------- Constants for Ethernet/802.11 MAC --------------- */ -/* MAC Address */ -#define MAC_ADDR_LEN 6 - -#define MAC_ADDR_LOCAL_ADMIN BIT(1) - -#define ETH_P_IPV4 0x0800 -#define ETH_P_IPX 0x8137 // Novell IPX -#define ETH_P_AARP 0x80F3 // AppleTalk Address Resolution Protocol (AARP) -#define ETH_P_IPV6 0x86DD - -#define IP_VERSION_4 4 -#define IP_VERSION_6 6 - -#define IP_PROTOCOL_TCP 6 -#define IP_PROTOCOL_UDP 17 - -#define IPV4_HDR_IP_IDENTIFICATION_OFFSET 4 -#define IPV4_HDR_IP_PROTOCOL_OFFSET 9 -#define IPV4_HDR_IP_CSUM_OFFSET 10 - -#define IPV6_HDR_IP_PROTOCOL_OFFSET 6 - -#define TCP_HDR_TCP_CSUM_OFFSET 16 -#define UDP_HDR_UDP_CSUM_OFFSET 6 - -#define LLC_LEN 8 // LLC(3) + SNAP(3) + EtherType(2) - -#define NULL_MAC_ADDR {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} -#define BC_MAC_ADDR {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} - -/* Ethernet Frame Field Size, in byte */ -#define ETHER_HEADER_LEN 14 -#define ETHER_TYPE_LEN 2 -#define ETHER_MIN_PKT_SZ 60 -#define ETHER_MAX_PKT_SZ 1514 - -/* IEEE 802.11 WLAN Frame Field Size, in byte */ -#define WLAN_MAC_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_HEADER_A4_LEN 30 /* Address 4 included */ -#define WLAN_MAC_HEADER_QOS_LEN 26 /* QoS Control included */ -#define WLAN_MAC_HEADER_QOS_HTC_LEN 30 /* QoS Control and HTC included */ -#define WLAN_MAC_HEADER_A4_QOS_LEN 32 /* Address 4 and QoS Control included */ -#define WLAN_MAC_HEADER_A4_QOS_HTC_LEN 36 /* Address 4, QoS Control and HTC included */ -#define WLAN_MAC_MGMT_HEADER_LEN 24 /* Address 4 excluded */ -#define WLAN_MAC_MGMT_HEADER_HTC_LEN 28 /* HTC included */ - -#define QOS_CTRL_LEN 2 -#define HT_CTRL_LEN 4 - -#define WLAN_MAC_CTS_ACK_LEN WLAN_MAC_CTS_ACK_FRAME_HEADER_LEN + FCS_LEN - -/* 6.2.1.1.2 Semantics of the service primitive */ -#define MSDU_MAX_LENGTH 2304 - -/* 7.1.3.3.3 Broadcast BSSID */ -#define BC_BSSID BC_MAC_ADDR - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.3.1.6 Listen Interval field */ -#define DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD 2 // In unit of AP's DTIM interval, -#define DEFAULT_LISTEN_INTERVAL 10 - -/* 7.3.2.1 Broadcast(Wildcard) SSID */ -#define BC_SSID "" -#define BC_SSID_LEN 0 - -/* 7.3.2.2 Data Rate Value */ -#define RATE_1M 2 /* 1M in unit of 500kb/s */ -#define RATE_2M 4 /* 2M */ -#define RATE_5_5M 11 /* 5.5M */ -#define RATE_11M 22 /* 11M */ -#define RATE_22M 44 /* 22M */ -#define RATE_33M 66 /* 33M */ -#define RATE_6M 12 /* 6M */ -#define RATE_9M 18 /* 9M */ -#define RATE_12M 24 /* 12M */ -#define RATE_18M 36 /* 18M */ -#define RATE_24M 48 /* 24M */ -#define RATE_36M 72 /* 36M */ -#define RATE_48M 96 /* 48M */ -#define RATE_54M 108 /* 54M */ -/* 7.3.2.14 BSS membership selector */ -#define RATE_HT_PHY 127 /* BSS Selector - Clause 20. HT PHY */ -#define RATE_MASK BITS(0,6) /* mask bits for the rate */ -#define RATE_BASIC_BIT BIT(7) /* mask bit for the rate belonging to the BSSBasicRateSet */ - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 9.2.10 DIFS */ -#define DIFS 2 /* 2 x aSlotTime */ - -/* 11.3 STA Authentication and Association */ -#define STA_STATE_1 0 /* Accept Class 1 frames */ -#define STA_STATE_2 1 /* Accept Class 1 & 2 frames */ -#define STA_STATE_3 2 /* Accept Class 1,2 & 3 frames */ - -/* 15.4.8.5 802.11k RCPI-dBm mapping*/ -#define NDBM_LOW_BOUND_FOR_RCPI 110 -#define RCPI_LOW_BOUND 0 -#define RCPI_HIGH_BOUND 220 -#define RCPI_MEASUREMENT_NOT_AVAILABLE 255 - - -/* PHY characteristics */ -/* 17.4.4/18.3.3/19.8.4 Slot Time (aSlotTime) */ -#define SLOT_TIME_LONG 20 /* Long Slot Time */ -#define SLOT_TIME_SHORT 9 /* Short Slot Time */ - -#define SLOT_TIME_HR_DSSS SLOT_TIME_LONG /* 802.11b aSlotTime */ -#define SLOT_TIME_OFDM SLOT_TIME_SHORT /* 802.11a aSlotTime(20M Spacing) */ -#define SLOT_TIME_OFDM_10M_SPACING 13 /* 802.11a aSlotTime(10M Spacing) */ -#define SLOT_TIME_ERP_LONG SLOT_TIME_LONG /* 802.11g aSlotTime(Long) */ -#define SLOT_TIME_ERP_SHORT SLOT_TIME_SHORT /* 802.11g aSlotTime(Short) */ - -/* 17.4.4/18.3.3/19.8.4 Contention Window (aCWmin & aCWmax) */ -#define CWMIN_OFDM 15 /* 802.11a aCWmin */ -#define CWMAX_OFDM 1023 /* 802.11a aCWmax */ - -#define CWMIN_HR_DSSS 31 /* 802.11b aCWmin */ -#define CWMAX_HR_DSSS 1023 /* 802.11b aCWmax */ - -#define CWMIN_ERP_0 31 /* 802.11g aCWmin(0) - for only have 1/2/5/11Mbps Rates */ -#define CWMIN_ERP_1 15 /* 802.11g aCWmin(1) */ -#define CWMAX_ERP 1023 /* 802.11g aCWmax */ - -/* Short Inter-Frame Space (aSIFSTime) */ -/* 15.3.3 802.11b aSIFSTime */ -#define SIFS_TIME_HR_DSSS 10 -/* 17.4.4 802.11a aSIFSTime */ -#define SIFS_TIME_OFDM 16 -/* 19.8.4 802.11g aSIFSTime */ -#define SIFS_TIME_ERP 10 - -/* 15.4.6.2 Number of operating channels */ -#define CH_1 0x1 -#define CH_2 0x2 -#define CH_3 0x3 -#define CH_4 0x4 -#define CH_5 0x5 -#define CH_6 0x6 -#define CH_7 0x7 -#define CH_8 0x8 -#define CH_9 0x9 -#define CH_10 0xa -#define CH_11 0xb -#define CH_12 0xc -#define CH_13 0xd -#define CH_14 0xe - -#define MAXIMUM_OPERATION_CHANNEL_LIST 32 - - -//3 /* --------------- IEEE 802.11 PICS --------------- */ -/* Annex D - dot11OperationEntry 2 */ -#define DOT11_RTS_THRESHOLD_MIN 0 -#define DOT11_RTS_THRESHOLD_MAX 2347 // from Windows DDK -//#define DOT11_RTS_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_RTS_THRESHOLD_DEFAULT \ - DOT11_RTS_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 5 */ -#define DOT11_FRAGMENTATION_THRESHOLD_MIN 256 -#define DOT11_FRAGMENTATION_THRESHOLD_MAX 2346 // from Windows DDK -//#define DOT11_FRAGMENTATION_THRESHOLD_MAX 3000 // from Annex D - -#define DOT11_FRAGMENTATION_THRESHOLD_DEFAULT \ - DOT11_FRAGMENTATION_THRESHOLD_MAX - -/* Annex D - dot11OperationEntry 6 */ -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MIN 1 -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_TRANSMIT_MSDU_LIFETIME_TU_DEFAULT 4095 // 802.11 define 512 - // MT5921 only aceept N <= 4095 - -/* Annex D - dot11OperationEntry 7 */ -#define DOT11_RECEIVE_LIFETIME_TU_MIN 1 -#define DOT11_RECEIVE_LIFETIME_TU_MAX 0xFFFFffff -#define DOT11_RECEIVE_LIFETIME_TU_DEFAULT 4096 // 802.11 define 512 - -/* Annex D - dot11StationConfigEntry 12 */ -#define DOT11_BEACON_PERIOD_MIN 1 // TU. -#define DOT11_BEACON_PERIOD_MAX 0xffff // TU. -#define DOT11_BEACON_PERIOD_DEFAULT 100 // TU. - -/* Annex D - dot11StationConfigEntry 13 */ -#define DOT11_DTIM_PERIOD_MIN 1 // TU. -#define DOT11_DTIM_PERIOD_MAX 255 // TU. -#define DOT11_DTIM_PERIOD_DEFAULT 1 // TU. - -/* Annex D - dot11RegDomainsSupportValue */ -#define REGULATION_DOMAIN_FCC 0x10 /* FCC (US) */ -#define REGULATION_DOMAIN_IC 0x20 /* IC or DOC (Canada) */ -#define REGULATION_DOMAIN_ETSI 0x30 /* ETSI (Europe) */ -#define REGULATION_DOMAIN_SPAIN 0x31 /* Spain */ -#define REGULATION_DOMAIN_FRANCE 0x32 /* France */ -#define REGULATION_DOMAIN_JAPAN 0x40 /* MKK (Japan) */ -#define REGULATION_DOMAIN_CHINA 0x50 /* China */ -#define REGULATION_DOMAIN_OTHER 0x00 /* Other */ - - - -//3 /* --------------- IEEE 802.11 MAC header fields --------------- */ -/* 7.1.3.1 Masks for the subfields in the Frame Control field */ -#define MASK_FC_PROTOCOL_VER BITS(0,1) -#define MASK_FC_TYPE BITS(2,3) -#define MASK_FC_SUBTYPE BITS(4,7) -#define MASK_FC_SUBTYPE_QOS_DATA BIT(7) -#define MASK_FC_TO_DS BIT(8) -#define MASK_FC_FROM_DS BIT(9) -#define MASK_FC_MORE_FRAG BIT(10) -#define MASK_FC_RETRY BIT(11) -#define MASK_FC_PWR_MGT BIT(12) -#define MASK_FC_MORE_DATA BIT(13) -#define MASK_FC_PROTECTED_FRAME BIT(14) -#define MASK_FC_ORDER BIT(15) - -#define MASK_FRAME_TYPE (MASK_FC_TYPE | MASK_FC_SUBTYPE) -#define MASK_TO_DS_FROM_DS (MASK_FC_TO_DS | MASK_FC_FROM_DS) - -#define MAX_NUM_OF_FC_SUBTYPES 16 -#define OFFSET_OF_FC_SUBTYPE 4 - - -/* 7.1.3.1.2 MAC frame types and subtypes */ -#define MAC_FRAME_TYPE_MGT 0 -#define MAC_FRAME_TYPE_CTRL BIT(2) -#define MAC_FRAME_TYPE_DATA BIT(3) -#define MAC_FRAME_TYPE_QOS_DATA (MAC_FRAME_TYPE_DATA | MASK_FC_SUBTYPE_QOS_DATA) - -#define MAC_FRAME_ASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0000) -#define MAC_FRAME_ASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0010) -#define MAC_FRAME_REASSOC_REQ (MAC_FRAME_TYPE_MGT | 0x0020) -#define MAC_FRAME_REASSOC_RSP (MAC_FRAME_TYPE_MGT | 0x0030) -#define MAC_FRAME_PROBE_REQ (MAC_FRAME_TYPE_MGT | 0x0040) -#define MAC_FRAME_PROBE_RSP (MAC_FRAME_TYPE_MGT | 0x0050) -#define MAC_FRAME_BEACON (MAC_FRAME_TYPE_MGT | 0x0080) -#define MAC_FRAME_ATIM (MAC_FRAME_TYPE_MGT | 0x0090) -#define MAC_FRAME_DISASSOC (MAC_FRAME_TYPE_MGT | 0x00A0) -#define MAC_FRAME_AUTH (MAC_FRAME_TYPE_MGT | 0x00B0) -#define MAC_FRAME_DEAUTH (MAC_FRAME_TYPE_MGT | 0x00C0) -#define MAC_FRAME_ACTION (MAC_FRAME_TYPE_MGT | 0x00D0) -#define MAC_FRAME_ACTION_NO_ACK (MAC_FRAME_TYPE_MGT | 0x00E0) - - -#define MAC_FRAME_CONTRL_WRAPPER (MAC_FRAME_TYPE_CTRL | 0x0070) -#define MAC_FRAME_BLOCK_ACK_REQ (MAC_FRAME_TYPE_CTRL | 0x0080) -#define MAC_FRAME_BLOCK_ACK (MAC_FRAME_TYPE_CTRL | 0x0090) -#define MAC_FRAME_PS_POLL (MAC_FRAME_TYPE_CTRL | 0x00A0) -#define MAC_FRAME_RTS (MAC_FRAME_TYPE_CTRL | 0x00B0) -#define MAC_FRAME_CTS (MAC_FRAME_TYPE_CTRL | 0x00C0) -#define MAC_FRAME_ACK (MAC_FRAME_TYPE_CTRL | 0x00D0) -#define MAC_FRAME_CF_END (MAC_FRAME_TYPE_CTRL | 0x00E0) -#define MAC_FRAME_CF_END_CF_ACK (MAC_FRAME_TYPE_CTRL | 0x00F0) - -#define MAC_FRAME_DATA (MAC_FRAME_TYPE_DATA | 0x0000) -#define MAC_FRAME_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0010) -#define MAC_FRAME_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0020) -#define MAC_FRAME_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0030) -#define MAC_FRAME_NULL (MAC_FRAME_TYPE_DATA | 0x0040) -#define MAC_FRAME_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0050) -#define MAC_FRAME_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0060) -#define MAC_FRAME_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x0070) -#define MAC_FRAME_QOS_DATA (MAC_FRAME_TYPE_DATA | 0x0080) -#define MAC_FRAME_QOS_DATA_CF_ACK (MAC_FRAME_TYPE_DATA | 0x0090) -#define MAC_FRAME_QOS_DATA_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00A0) -#define MAC_FRAME_QOS_DATA_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00B0) -#define MAC_FRAME_QOS_NULL (MAC_FRAME_TYPE_DATA | 0x00C0) -#define MAC_FRAME_QOS_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00E0) -#define MAC_FRAME_QOS_CF_ACK_CF_POLL (MAC_FRAME_TYPE_DATA | 0x00F0) - -/* 7.1.3.2 Mask for the AID value in the Duration/ID field */ -#define MASK_DI_DURATION BITS(0,14) -#define MASK_DI_AID BITS(0,13) -#define MASK_DI_AID_MSB BITS(14,15) -#define MASK_DI_CFP_FIXED_VALUE BIT(15) - -/* 7.1.3.4 Masks for the subfields in the Sequence Control field */ -#define MASK_SC_SEQ_NUM BITS(4,15) -#define MASK_SC_SEQ_NUM_OFFSET 4 -#define MASK_SC_FRAG_NUM BITS(0,3) -#define INVALID_SEQ_CTRL_NUM 0x000F /* According to 6.2.1.1.2 - * FRAG_NUM won't equal to 15 - */ - -/* 7.1.3.5 QoS Control field */ -#define TID_NUM 16 -#define TID_MASK BITS(0,3) -#define EOSP BIT(4) -#define ACK_POLICY BITS(5,6) -#define A_MSDU_PRESENT BIT(7) - -#define MASK_QC_TID BITS(0,3) -#define MASK_QC_EOSP BIT(4) -#define MASK_QC_EOSP_OFFSET 4 -#define MASK_QC_ACK_POLICY BITS(5, 6) -#define MASK_QC_ACK_POLICY_OFFSET 5 -#define MASK_QC_A_MSDU_PRESENT BIT(7) - -/* 7.1.3.5a HT Control field */ -#define HT_CTRL_LINK_ADAPTATION_CTRL BITS(0,15) -#define HT_CTRL_CALIBRATION_POSITION BITS(16,17) -#define HT_CTRL_CALIBRATION_SEQUENCE BITS(18,19) -#define HT_CTRL_CSI_STEERING BITS(22,23) -#define HT_CTRL_NDP_ANNOUNCEMENT BIT(24) -#define HT_CTRL_AC_CONSTRAINT BIT(30) -#define HT_CTRL_RDG_MORE_PPDU BIT(31) - -#define LINK_ADAPTATION_CTRL_TRQ BIT(1) -#define LINK_ADAPTATION_CTRL_MAI_MRQ BIT(2) -#define LINK_ADAPTATION_CTRL_MAI_MSI BITS(3,5) -#define LINK_ADAPTATION_CTRL_MFSI BITS(6,8) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_CMD BITS(9,11) -#define LINK_ADAPTATION_CTRL_MFB_ASELC_DATA BITS(12,15) - -/* 7.1.3.5.3 Ack Policy subfield*/ -#define ACK_POLICY_NORMAL_ACK_IMPLICIT_BA_REQ 0 -#define ACK_POLICY_NO_ACK 1 -#define ACK_POLICY_NO_EXPLICIT_ACK_PSMP_ACK 2 -#define ACK_POLICY_BA 3 - -/* 7.1.3.7 FCS field */ -#define FCS_LEN 4 - -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -#define PSPOLL_FRAME_LEN 16 /* w/o FCS */ - -/* 7.2.7.1 BAR */ -#define OFFSET_BAR_SSC_SN 4 - -/* 8.3.2.2 TKIP MPDU formats */ -#define TKIP_MIC_LEN 8 - -/* 2009.11.30 mtk02468: Moved these definitions to the right place */ -#if 0 -/* Block Ack Parameter Set field */ -#define BA_PARM_BA_POLICY BIT(1) -#define BA_PARM_TID BITS(2,5) -#define BA_PARM_BUFFER_SIZE BITS(6,15) -#endif - -#define BA_POLICY_IMMEDIATE BIT(1) - -/* Block Ack Starting Sequence Control field */ -#define BA_START_SEQ_CTL_FRAG_NUM BITS(0,3) -#define BA_START_SEQ_CTL_SSN BITS(4,15) - -/* BAR Control field */ -#define BAR_CONTROL_NO_ACK_POLICY BIT(0) -#define BAR_CONTROL_MULTI_TID BIT(1) -#define BAR_CONTROL_COMPRESSED_BA BIT(2) -#define BAR_CONTROL_TID_INFO BITS(12,15) -#define BAR_CONTROL_TID_INFO_OFFSET 12 - -/* TID Value */ -#define BAR_INFO_TID_VALUE BITS(12,15) - -#define BAR_COMPRESSED_VARIANT_FRAME_LEN (16 + 4) - -//3 /* --------------- IEEE 802.11 frame body fields --------------- */ -//3 Management frame body components (I): Fixed Fields. -/* 7.3.1.1 Authentication Algorithm Number field */ -#define AUTH_ALGORITHM_NUM_FIELD_LEN 2 - -#define AUTH_ALGORITHM_NUM_OPEN_SYSTEM 0 /* Open System */ -#define AUTH_ALGORITHM_NUM_SHARED_KEY 1 /* Shared Key */ -#define AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION 2 /* Fast BSS Transition */ - -/* 7.3.1.2 Authentication Transaction Sequence Number field */ -#define AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN 2 -#define AUTH_TRANSACTION_SEQ_1 1 -#define AUTH_TRANSACTION_SEQ_2 2 -#define AUTH_TRANSACTION_SEQ_3 3 -#define AUTH_TRANSACTION_SEQ_4 4 - -/* 7.3.1.3 Beacon Interval field */ -#define BEACON_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.4 Capability Information field */ -#define CAP_INFO_FIELD_LEN 2 -#define CAP_INFO_ESS BIT(0) -#define CAP_INFO_IBSS BIT(1) -#define CAP_INFO_BSS_TYPE (CAP_INFO_ESS | CAP_INFO_IBSS) -#define CAP_INFO_CF_POLLABLE BIT(2) -#define CAP_INFO_CF_POLL_REQ BIT(3) -#define CAP_INFO_CF (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) -#define CAP_INFO_PRIVACY BIT(4) -#define CAP_INFO_SHORT_PREAMBLE BIT(5) -#define CAP_INFO_PBCC BIT(6) -#define CAP_INFO_CH_AGILITY BIT(7) -#define CAP_INFO_SPEC_MGT BIT(8) -#define CAP_INFO_QOS BIT(9) -#define CAP_INFO_SHORT_SLOT_TIME BIT(10) -#define CAP_INFO_APSD BIT(11) -#define CAP_INFO_RESERVED BIT(12) -#define CAP_INFO_DSSS_OFDM BIT(13) -#define CAP_INFO_DELAYED_BLOCK_ACK BIT(14) -#define CAP_INFO_IMM_BLOCK_ACK BIT(15) -/* STA usage of CF-Pollable and CF-Poll Request subfields */ -/* STA: not CF-Pollable */ -#define CAP_CF_STA_NOT_POLLABLE 0x0000 -/* STA: CF-Pollable, not requesting on the CF-Polling list */ -#define CAP_CF_STA_NOT_ON_LIST CAP_INFO_CF_POLL_REQ -/* STA: CF-Pollable, requesting on the CF-Polling list */ -#define CAP_CF_STA_ON_LIST CAP_INFO_CF_POLLABLE -/* STA: CF-Pollable, requesting never to be polled */ -#define CAP_CF_STA_NEVER_POLLED (CAP_INFO_CF_POLLABLE | CAP_INFO_CF_POLL_REQ) - -/* AP usage of CF-Pollable and CF-Poll Request subfields */ -/* AP: No point coordinator (PC) */ -#define CAP_CF_AP_NO_PC 0x0000 -/* AP: PC at AP for delivery only (no polling) */ -#define CAP_CF_AP_DELIVERY_ONLY CAP_INFO_CF_POLL_REQ -/* AP: PC at AP for delivery and polling */ -#define CAP_CF_AP_DELIVERY_POLLING CAP_INFO_CF_POLLABLE - -/* 7.3.1.5 Current AP Address field */ -#define CURR_AP_ADDR_FIELD_LEN MAC_ADDR_LEN - -/* 7.3.1.6 Listen Interval field */ -#define LISTEN_INTERVAL_FIELD_LEN 2 - -/* 7.3.1.7 Reason Code field */ -#define REASON_CODE_FIELD_LEN 2 - -#define REASON_CODE_RESERVED 0 /* Reseved */ -#define REASON_CODE_UNSPECIFIED 1 /* Unspecified reason */ -#define REASON_CODE_PREV_AUTH_INVALID 2 /* Previous auth no longer valid */ -#define REASON_CODE_DEAUTH_LEAVING_BSS 3 /* Deauth because sending STA is leaving BSS */ -#define REASON_CODE_DISASSOC_INACTIVITY 4 /* Disassoc due to inactivity */ -#define REASON_CODE_DISASSOC_AP_OVERLOAD 5 /* Disassoc because AP is unable to handle all assoc STAs */ -#define REASON_CODE_CLASS_2_ERR 6 /* Class 2 frame rx from nonauth STA */ -#define REASON_CODE_CLASS_3_ERR 7 /* Class 3 frame rx from nonassoc STA */ -#define REASON_CODE_DISASSOC_LEAVING_BSS 8 /* Disassoc because sending STA is leaving BSS */ -#define REASON_CODE_ASSOC_BEFORE_AUTH 9 /* STA requesting (re)assoc is not auth with responding STA */ -#define REASON_CODE_DISASSOC_PWR_CAP_UNACCEPTABLE 10 /* Disassoc because the info in Power Capability is unacceptable */ -#define REASON_CODE_DISASSOC_SUP_CHS_UNACCEPTABLE 11 /* Disassoc because the info in Supported Channels is unacceptable */ -#define REASON_CODE_INVALID_INFO_ELEM 13 /* Invalid information element */ -#define REASON_CODE_MIC_FAILURE 14 /* MIC failure */ -#define REASON_CODE_4_WAY_HANDSHAKE_TIMEOUT 15 /* 4-way handshake timeout */ -#define REASON_CODE_GROUP_KEY_UPDATE_TIMEOUT 16 /* Group key update timeout */ -#define REASON_CODE_DIFFERENT_INFO_ELEM 17 /* Info element in 4-way handshake different from (Re-)associate request/Probe response/Beacon */ -#define REASON_CODE_MULTICAST_CIPHER_NOT_VALID 18 /* Multicast Cipher is not valid */ -#define REASON_CODE_UNICAST_CIPHER_NOT_VALID 19 /* Unicast Cipher is not valid */ -#define REASON_CODE_AKMP_NOT_VALID 20 /* AKMP is not valid */ -#define REASON_CODE_UNSUPPORTED_RSNE_VERSION 21 /* Unsupported RSNE version */ -#define REASON_CODE_INVALID_RSNE_CAPABILITIES 22 /* Invalid RSNE Capabilities */ -#define REASON_CODE_IEEE_802_1X_AUTH_FAILED 23 /* IEEE 802.1X Authentication failed */ -#define REASON_CODE_CIPHER_REJECT_SEC_POLICY 24 /* Cipher suite rejected because of the security policy */ -#define REASON_CODE_DISASSOC_UNSPECIFIED_QOS 32 /* Disassoc for unspecified, QoS-related reason */ -#define REASON_CODE_DISASSOC_LACK_OF_BANDWIDTH 33 /* Disassoc because QAP lacks sufficient bandwidth for this QSTA */ -#define REASON_CODE_DISASSOC_ACK_LOST_POOR_CHANNEL 34 /* Disassoc because of too many ACKs lost for AP transmissions and/or poor channel conditions */ -#define REASON_CODE_DISASSOC_TX_OUTSIDE_TXOP_LIMIT 35 /* Disassoc because QSTA is transmitting outside the limits of its TXOPs */ -#define REASON_CODE_PEER_WHILE_LEAVING 36 /* QSTA is leaving the QBSS or resetting */ -#define REASON_CODE_PEER_REFUSE_DLP 37 /* Peer does not want to use this mechanism */ -#define REASON_CODE_PEER_SETUP_REQUIRED 38 /* Frames received but a setup is reqired */ -#define REASON_CODE_PEER_TIME_OUT 39 /* Time out */ -#define REASON_CODE_PEER_CIPHER_UNSUPPORTED 45 /* Peer does not support the requested cipher suite */ - -/* 7.3.1.8 AID field */ -#define AID_FIELD_LEN 2 -#define AID_MASK BITS(0,13) -#define AID_MSB BITS(14,15) -#define AID_MIN_VALUE 1 -#define AID_MAX_VALUE 2007 - -/* 7.3.1.9 Status Code field */ -#define STATUS_CODE_FIELD_LEN 2 - -#define STATUS_CODE_RESERVED 0 /* Reserved - Used by TX Auth */ -#define STATUS_CODE_SUCCESSFUL 0 /* Successful */ -#define STATUS_CODE_UNSPECIFIED_FAILURE 1 /* Unspecified failure */ -#define STATUS_CODE_CAP_NOT_SUPPORTED 10 /* Cannot support all requested cap in the Cap Info field */ -#define STATUS_CODE_REASSOC_DENIED_WITHOUT_ASSOC 11 /* Reassoc denied due to inability to confirm that assoc exists */ -#define STATUS_CODE_ASSOC_DENIED_OUTSIDE_STANDARD 12 /* Assoc denied due to reason outside the scope of this std. */ -#define STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED 13 /* Responding STA does not support the specified auth algorithm */ -#define STATUS_CODE_AUTH_OUT_OF_SEQ 14 /* Rx an auth frame with auth transaction seq num out of expected seq */ -#define STATUS_CODE_AUTH_REJECTED_CHAL_FAIL 15 /* Auth rejected because of challenge failure */ -#define STATUS_CODE_AUTH_REJECTED_TIMEOUT 16 /* Auth rejected due to timeout waiting for next frame in sequence */ -#define STATUS_CODE_ASSOC_DENIED_AP_OVERLOAD 17 /* Assoc denied because AP is unable to handle additional assoc STAs */ -#define STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED 18 /* Assoc denied due to requesting STA not supporting all of basic rates */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_PREAMBLE 19 /* Assoc denied due to requesting STA not supporting short preamble */ -#define STATUS_CODE_ASSOC_DENIED_NO_PBCC 20 /* Assoc denied due to requesting STA not supporting PBCC */ -#define STATUS_CODE_ASSOC_DENIED_NO_CH_AGILITY 21 /* Assoc denied due to requesting STA not supporting channel agility */ -#define STATUS_CODE_ASSOC_REJECTED_NO_SPEC_MGT 22 /* Assoc rejected because Spectrum Mgt capability is required */ -#define STATUS_CODE_ASSOC_REJECTED_PWR_CAP 23 /* Assoc rejected because the info in Power Capability is unacceptable */ -#define STATUS_CODE_ASSOC_REJECTED_SUP_CHS 24 /* Assoc rejected because the info in Supported Channels is unacceptable */ -#define STATUS_CODE_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25 /* Assoc denied due to requesting STA not supporting short slot time */ -#define STATUS_CODE_ASSOC_DENIED_NO_DSSS_OFDM 26 /* Assoc denied due to requesting STA not supporting DSSS-OFDM */ -#if CFG_SUPPORT_802_11W -#define STATUS_CODE_ASSOC_REJECTED_TEMPORARILY 30 /* IEEE 802.11w, Assoc denied due to the SA query */ -#define STATUS_CODE_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31 /* IEEE 802.11w, Assoc denied due to the MFP select policy */ -#endif -#define STATUS_CODE_UNSPECIFIED_QOS_FAILURE 32 /* Unspecified, QoS-related failure */ -#define STATUS_CODE_ASSOC_DENIED_BANDWIDTH 33 /* Assoc denied due to insufficient bandwidth to handle another QSTA */ -#define STATUS_CODE_ASSOC_DENIED_POOR_CHANNEL 34 /* Assoc denied due to excessive frame loss rates and/or poor channel conditions */ -#define STATUS_CODE_ASSOC_DENIED_NO_QOS_FACILITY 35 /* Assoc denied due to requesting STA not supporting QoS facility */ -#define STATUS_CODE_REQ_DECLINED 37 /* Request has been declined */ -#define STATUS_CODE_REQ_INVALID_PARAMETER_VALUE 38 /* Request has not been successful as one or more parameters have invalid values */ -#define STATUS_CODE_REQ_NOT_HONORED_TSPEC 39 /* TS not created because request cannot be honored. Suggested TSPEC provided. */ -#define STATUS_CODE_INVALID_INFO_ELEMENT 40 /* Invalid information element */ -#define STATUS_CODE_INVALID_GROUP_CIPHER 41 /* Invalid group cipher */ -#define STATUS_CODE_INVALID_PAIRWISE_CIPHER 42 /* Invalid pairwise cipher */ -#define STATUS_CODE_INVALID_AKMP 43 /* Invalid AKMP */ -#define STATUS_CODE_UNSUPPORTED_RSN_IE_VERSION 44 /* Unsupported RSN information element version */ -#define STATUS_CODE_INVALID_RSN_IE_CAP 45 /* Invalid RSN information element capabilities */ -#define STATUS_CODE_CIPHER_SUITE_REJECTED 46 /* Cipher suite rejected because of security policy */ -#define STATUS_CODE_REQ_NOT_HONORED_TS_DELAY 47 /* TS not created becasue request cannot be honored. Attempt to create a TS later. */ -#define STATUS_CODE_DIRECT_LINK_NOT_ALLOWED 48 /* Direct Link is not allowed in the BSS by policy */ -#define STATUS_CODE_DESTINATION_STA_NOT_PRESENT 49 /* Destination STA is not present within this QBSS */ -#define STATUS_CODE_DESTINATION_STA_NOT_QSTA 50 /* Destination STA is not a QSTA */ -#define STATUS_CODE_ASSOC_DENIED_LARGE_LIS_INTERVAL 51 /* Association denied because the ListenInterval is too large */ - -/* proprietary definition of reserved field of Status Code */ -#define STATUS_CODE_JOIN_FAILURE 0xFFF0 /* Join failure */ -#define STATUS_CODE_JOIN_TIMEOUT 0xFFF1 /* Join timeout */ -#define STATUS_CODE_AUTH_TIMEOUT 0xFFF2 /* Authentication timeout */ -#define STATUS_CODE_ASSOC_TIMEOUT 0xFFF3 /* (Re)Association timeout */ -#define STATUS_CODE_CCX_CCKM_REASSOC_FAILURE 0xFFF4 /* CCX CCKM reassociation failure */ - - -/* 7.3.1.10 Timestamp field */ -#define TIMESTAMP_FIELD_LEN 8 - -/* 7.3.1.11 Category of Action field */ -#define CATEGORY_SPEC_MGT 0 -#define CATEGORY_QOS_ACTION 1 /* QoS action */ -#define CATEGORY_DLS_ACTION 2 /* Direct Link Protocol (DLP) action */ -#define CATEGORY_BLOCK_ACK_ACTION 3 /* Block ack action */ -#define CATEGORY_PUBLIC_ACTION 4 /* Public action */ -#define CATEGORY_RM_ACTION 5 /* Radio measurement action */ -#define CATEGORY_HT_ACTION 7 -#if CFG_SUPPORT_802_11W -#define CATEGORY_SA_QUERT_ACTION 8 -#endif -#define CATEGORY_WNM_ACTION 10 /* 802.11v Wireless Network Management */ -#define CATEGORY_UNPROTECTED_WNM_ACTION 11 /* 802.11v Wireless Network Management */ -#define CATEGORY_WME_MGT_NOTIFICATION 17 /* WME management notification */ -#define CATEGORY_VENDOR_SPECIFIC_ACTION 127 - - -/* 7.3.1.14 Block Ack Parameter Set field */ -#define BA_PARAM_SET_ACK_POLICY_MASK BIT(1) -#define BA_PARAM_SET_ACK_POLICY_MASK_OFFSET 1 -#define BA_PARAM_SET_TID_MASK BITS(2,5) -#define BA_PARAM_SET_TID_MASK_OFFSET 2 -#define BA_PARAM_SET_BUFFER_SIZE_MASK BITS(6,15) -#define BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET 6 - -#define BA_PARAM_SET_ACK_POLICY_IMMEDIATE_BA 1 -#define BA_PARAM_SET_ACK_POLICY_DELAYED_BA 0 - - -//3 Management frame body components (II): Information Elements. -/* 7.3.2 Element IDs of information elements */ -#define ELEM_HDR_LEN 2 - -#define ELEM_ID_SSID 0 /* SSID */ -#define ELEM_ID_SUP_RATES 1 /* Supported rates */ -#define ELEM_ID_FH_PARAM_SET 2 /* FH parameter set */ -#define ELEM_ID_DS_PARAM_SET 3 /* DS parameter set */ -#define ELEM_ID_CF_PARAM_SET 4 /* CF parameter set */ -#define ELEM_ID_TIM 5 /* TIM */ -#define ELEM_ID_IBSS_PARAM_SET 6 /* IBSS parameter set */ -#define ELEM_ID_COUNTRY_INFO 7 /* Country information */ -#define ELEM_ID_HOPPING_PATTERN_PARAM 8 /* Hopping pattern parameters */ -#define ELEM_ID_HOPPING_PATTERN_TABLE 9 /* Hopping pattern table */ -#define ELEM_ID_REQUEST 10 /* Request */ -#define ELEM_ID_BSS_LOAD 11 /* BSS load */ -#define ELEM_ID_EDCA_PARAM_SET 12 /* EDCA parameter set */ -#define ELEM_ID_TSPEC 13 /* Traffic specification (TSPEC) */ -#define ELEM_ID_TCLAS 14 /* Traffic classification (TCLAS) */ -#define ELEM_ID_SCHEDULE 15 /* Schedule */ -#define ELEM_ID_CHALLENGE_TEXT 16 /* Challenge text */ - -#define ELEM_ID_PWR_CONSTRAINT 32 /* Power constraint */ -#define ELEM_ID_PWR_CAP 33 /* Power capability */ -#define ELEM_ID_TPC_REQ 34 /* TPC request */ -#define ELEM_ID_TPC_REPORT 35 /* TPC report */ -#define ELEM_ID_SUP_CHS 36 /* Supported channels */ -#define ELEM_ID_CH_SW_ANNOUNCEMENT 37 /* Channel switch announcement */ -#define ELEM_ID_MEASUREMENT_REQ 38 /* Measurement request */ -#define ELEM_ID_MEASUREMENT_REPORT 39 /* Measurement report */ -#define ELEM_ID_QUIET 40 /* Quiet */ -#define ELEM_ID_IBSS_DFS 41 /* IBSS DFS */ -#define ELEM_ID_ERP_INFO 42 /* ERP information */ -#define ELEM_ID_TS_DELAY 43 /* TS delay */ -#define ELEM_ID_TCLAS_PROCESSING 44 /* TCLAS processing */ -#define ELEM_ID_HT_CAP 45 /* HT Capabilities subelement */ -#define ELEM_ID_QOS_CAP 46 /* QoS capability */ -#define ELEM_ID_RSN 48 /* RSN IE */ -#define ELEM_ID_EXTENDED_SUP_RATES 50 /* Extended supported rates */ -#if CFG_SUPPORT_802_11W -#define ELEM_ID_TIMEOUT_INTERVAL 56 /* 802.11w SA Timeout interval */ -#endif -#define ELEM_ID_HT_OP 61 /* HT Operation */ -#define ELEM_ID_SCO 62 /* Secondary Channel Offset */ -#define ELEM_ID_RRM_ENABLED_CAP 70 /* Radio Resource Management Enabled Capabilities */ -#define ELEM_ID_20_40_BSS_COEXISTENCE 72 /* 20/40 BSS Coexistence */ -#define ELEM_ID_20_40_INTOLERANT_CHNL_REPORT 73 /* 20/40 BSS Intolerant Channel Report */ -#define ELEM_ID_OBSS_SCAN_PARAMS 74 /* Overlapping BSS Scan Parameters */ -#define ELEM_ID_EXTENDED_CAP 127 /* Extended capabilities */ - -#define ELEM_ID_VENDOR 221 /* Vendor specific IE */ -#define ELEM_ID_WPA ELEM_ID_VENDOR /* WPA IE */ -#define ELEM_ID_WMM ELEM_ID_VENDOR /* WMM IE */ -#define ELEM_ID_P2P ELEM_ID_VENDOR /* WiFi Direct */ -#define ELEM_ID_WFD ELEM_ID_VENDOR /* WiFi Direct */ -#define ELEM_ID_WSC ELEM_ID_VENDOR /* WSC IE */ - -#define ELEM_ID_RESERVED 255 /* Reserved */ - - -/* 7.3.2.1 SSID element */ -#define ELEM_MAX_LEN_SSID 32 - -/* 7.3.2.2 Supported Rates */ -#define ELEM_MAX_LEN_SUP_RATES 8 - -/* 7.3.2.4 DS Parameter Set */ -#define ELEM_MAX_LEN_DS_PARAMETER_SET 1 - -/* 7.3.2.5 CF Parameter Set */ -#define ELEM_CF_PARM_LEN 8 - -/* 7.3.2.6 TIM */ -#define ELEM_MIX_LEN_TIM 4 -#define ELEM_MAX_LEN_TIM 254 - -/* 7.3.2.7 IBSS Parameter Set element */ -#define ELEM_MAX_LEN_IBSS_PARAMETER_SET 2 - -/* 7.3.2.8 Challenge Text element */ -#define ELEM_MIN_LEN_CHALLENGE_TEXT 1 -#define ELEM_MAX_LEN_CHALLENGE_TEXT 253 - -/* 7.3.2.9 Country Information element */ -/* Country IE should contain at least 3-bytes country code string and one subband triplet. */ -#define ELEM_MIN_LEN_COUNTRY_INFO 6 - -#define ELEM_ID_COUNTRY_INFO_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_SUBBAND_TRIPLET_LEN_FIXED 3 -#define ELEM_ID_COUNTRY_INFO_REGULATORY_TRIPLET_LEN_FIXED 3 - - -/* 7.3.2.13 ERP Information element */ -#define ELEM_MAX_LEN_ERP 1 -/* -- bits in the ERP Information element */ -#define ERP_INFO_NON_ERP_PRESENT BIT(0) /* NonERP_Present bit */ -#define ERP_INFO_USE_PROTECTION BIT(1) /* Use_Protection bit */ -#define ERP_INFO_BARKER_PREAMBLE_MODE BIT(2) /* Barker_Preamble_Mode bit */ - - -/* 7.3.2.14 Extended Supported Rates */ -#define ELEM_MAX_LEN_EXTENDED_SUP_RATES 255 - -/* 7.3.2.21 Measurement Request element */ -#define ELEM_RM_TYPE_BASIC_REQ 0 -#define ELEM_RM_TYPE_CCA_REQ 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REQ 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REQ 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REQ 4 -#define ELEM_RM_TYPE_BEACON_REQ 5 -#define ELEM_RM_TYPE_FRAME_REQ 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REQ 7 -#define ELEM_RM_TYPE_LCI_REQ 8 -#define ELEM_RM_TYPE_TS_REQ 9 -#define ELEM_RM_TYPE_MEASURE_PAUSE_REQ 255 - -/* 7.3.2.22 Measurement Report element */ -#define ELEM_RM_TYPE_BASIC_REPORT 0 -#define ELEM_RM_TYPE_CCA_REPORT 1 -#define ELEM_RM_TYPE_RPI_HISTOGRAM_REPORT 2 -#define ELEM_RM_TYPE_CHNL_LOAD_REPORT 3 -#define ELEM_RM_TYPE_NOISE_HISTOGRAM_REPORT 4 -#define ELEM_RM_TYPE_BEACON_REPORT 5 -#define ELEM_RM_TYPE_FRAME_REPORT 6 -#define ELEM_RM_TYPE_STA_STATISTICS_REPORT 7 -#define ELEM_RM_TYPE_LCI_REPORT 8 -#define ELEM_RM_TYPE_TS_REPORT 9 - - -/* 7.3.2.25 RSN information element */ -#define ELEM_MAX_LEN_WPA 34 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_RSN 38 /* one pairwise, one AKM suite, one PMKID */ -#define ELEM_MAX_LEN_WAPI 38 /* one pairwise, one AKM suite, one BKID */ -#define ELEM_MAX_LEN_WSC 200/* one pairwise, one AKM suite, one BKID */ - -#if CFG_SUPPORT_802_11W -#define ELEM_WPA_CAP_MFPR BIT(6) -#define ELEM_WPA_CAP_MFPC BIT(7) -#endif - -/* 7.3.2.27 Extended Capabilities information element */ -#define ELEM_EXT_CAP_20_40_COEXIST_SUPPORT BIT(0) -#define ELEM_EXT_CAP_PSMP_CAP BIT(4) -#define ELEM_EXT_CAP_SERVICE_INTERVAL_GRANULARITY BIT(5) -#define ELEM_EXT_CAP_SCHEDULE_PSMP BIT(6) - -#define ELEM_MAX_LEN_EXT_CAP (3 - ELEM_HDR_LEN) - -/* 7.3.2.30 TSPEC element */ -#define TS_INFO_TRAFFIC_TYPE_MASK BIT(0) //WMM: 0 (Asynchronous TS of low-duty cycles) -#define TS_INFO_TID_OFFSET 1 -#define TS_INFO_TID_MASK BITS(1,4) -#define TS_INFO_DIRECTION_OFFSET 5 -#define TS_INFO_DIRECTION_MASK BITS(5,6) -#define TS_INFO_ACCESS_POLICY_OFFSET 7 -#define TS_INFO_ACCESS_POLICY_MASK BITS(7,8) //WMM: Bit(7,8) = (1,0) = EDCA -#define TS_INFO_AGGREGATION_MASK BIT(9) //WMM: 0 -#define TS_INFO_APSD_MASK BIT(10) -#define TS_INFO_UP_OFFSET 11 -#define TS_INFO_UP_MASK BITS(11,13) -#define TS_INFO_ACK_POLICY_OFFSET 14 -#define TS_INFO_ACK_POLICY_MASK BITS(14,15) -#define TS_INFO_SCHEDULE_MASK 16 - -/* 7.3.2.56 HT capabilities element */ -#define ELEM_MAX_LEN_HT_CAP (28 - ELEM_HDR_LEN) /* sizeof(IE_HT_CAP_T)-2 */ - -/* 7.3.2.56.2 HT capabilities Info field */ -#define HT_CAP_INFO_LDPC_CAP BIT(0) -#define HT_CAP_INFO_SUP_CHNL_WIDTH BIT(1) -#define HT_CAP_INFO_SM_POWER_SAVE BITS(2,3) -#define HT_CAP_INFO_HT_GF BIT(4) -#define HT_CAP_INFO_SHORT_GI_20M BIT(5) -#define HT_CAP_INFO_SHORT_GI_40M BIT(6) -#define HT_CAP_INFO_TX_STBC BIT(7) -#define HT_CAP_INFO_RX_STBC BITS(8,9) -#define HT_CAP_INFO_HT_DELAYED_BA BIT(10) -#define HT_CAP_INFO_MAX_AMSDU_LEN BIT(11) -#define HT_CAP_INFO_DSSS_CCK_IN_40M BIT(12) -#define HT_CAP_INFO_40M_INTOLERANT BIT(14) -#define HT_CAP_INFO_LSIG_TXOP_SUPPORT BIT(15) - -#define HT_CAP_INFO_RX_STBC_NO_SUPPORTED 0 -#define HT_CAP_INFO_RX_STBC_1_SS BIT(8) -#define HT_CAP_INFO_RX_STBC_2_SS BIT(9) -#define HT_CAP_INFO_RX_STBC_3_SS HT_CAP_INFO_RX_STBC - -/* 7.3.2.56.3 A-MPDU Parameters field */ -#define AMPDU_PARAM_MAX_AMPDU_LEN_EXP BITS(0,1) -#define AMPDU_PARAM_MIN_START_SPACING BITS(2,4) - -#define AMPDU_PARAM_MAX_AMPDU_LEN_8K 0 -#define AMPDU_PARAM_MAX_AMPDU_LEN_16K BIT(0) -#define AMPDU_PARAM_MAX_AMPDU_LEN_32K BIT(1) -#define AMPDU_PARAM_MAX_AMPDU_LEN_64K BITS(0,1) - -#define AMPDU_PARAM_MSS_NO_RESTRICIT 0 -#define AMPDU_PARAM_MSS_1_4_US BIT(2) -#define AMPDU_PARAM_MSS_1_2_US BIT(3) -#define AMPDU_PARAM_MSS_1_US BITS(2,3) -#define AMPDU_PARAM_MSS_2_US BIT(4) -#define AMPDU_PARAM_MSS_4_US (BIT(4) | BIT(2)) -#define AMPDU_PARAM_MSS_8_US (BIT(4) | BIT(3)) -#define AMPDU_PARAM_MSS_16_US BITS(2,4) - -/* 7.3.2.56.4 Supported MCS Set field (TX rate: octects 12~15) */ -#define SUP_MCS_TX_SET_DEFINED BIT(0) -#define SUP_MCS_TX_RX_SET_NOT_EQUAL BIT(1) -#define SUP_MCS_TX_MAX_NUM_SS BITS(2,3) -#define SUP_MCS_TX_UNEQUAL_MODULATION BIT(4) - -#define SUP_MCS_TX_MAX_NUM_1_SS 0 -#define SUP_MCS_TX_MAX_NUM_2_SS BIT(2) -#define SUP_MCS_TX_MAX_NUM_3_SS BIT(3) -#define SUP_MCS_TX_MAX_NUM_4_SS BITS(2,3) - -#define SUP_MCS_RX_BITMASK_OCTET_NUM 10 -#define SUP_MCS_RX_DEFAULT_HIGHEST_RATE 0 /* Not specify */ - -/* 7.3.2.56.5 HT Extended Capabilities field */ -#define HT_EXT_CAP_PCO BIT(0) -#define HT_EXT_CAP_PCO_TRANSITION_TIME BITS(1,2) -#define HT_EXT_CAP_MCS_FEEDBACK BITS(8,9) -#define HT_EXT_CAP_HTC_SUPPORT BIT(10) -#define HT_EXT_CAP_RD_RESPONDER BIT(11) - -#define HT_EXT_CAP_PCO_TRANS_TIME_NONE 0 -#define HT_EXT_CAP_PCO_TRANS_TIME_400US BIT(1) -#define HT_EXT_CAP_PCO_TRANS_TIME_1_5MS BIT(2) -#define HT_EXT_CAP_PCO_TRANS_TIME_5MS BITS(1,2) - -#define HT_EXT_CAP_MCS_FEEDBACK_NO_FB 0 -#define HT_EXT_CAP_MCS_FEEDBACK_UNSOLICITED BIT(9) -#define HT_EXT_CAP_MCS_FEEDBACK_BOTH BITS(8,9) - -/* 7.3.2.56.6 Transmit Beamforming Capabilities field */ - -/* 7.3.2.56.7 Antenna Selection Capability field */ -#define ASEL_CAP_CAPABLE BIT(0) -#define ASEL_CAP_CSI_FB_BY_TX_ASEL_CAPABLE BIT(1) -#define ASEL_CAP_ANT_INDICES_FB_BY_TX_ASEL_CAPABLE BIT(2) -#define ASEL_CAP_EXPLICIT_CSI_FB_CAPABLE BIT(3) -#define ASEL_CAP_ANT_INDICES_CAPABLE BIT(4) -#define ASEL_CAP_RX_ASEL_CAPABLE BIT(5) -#define ASEL_CAP_TX_SOUNDING_CAPABLE BIT(6) - -/* 7.3.2.57 HT Operation element */ -#define ELEM_MAX_LEN_HT_OP (24 - ELEM_HDR_LEN) /* sizeof(IE_HT_OP_T)-2 */ - -#define HT_OP_INFO1_SCO BITS(0,1) -#define HT_OP_INFO1_STA_CHNL_WIDTH BIT(2) -#define HT_OP_INFO1_RIFS_MODE BIT(3) - -#define HT_OP_INFO2_HT_PROTECTION BITS(0,1) -#define HT_OP_INFO2_NON_GF_HT_STA_PRESENT BIT(2) -#define HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT BIT(4) - -#define HT_OP_INFO3_DUAL_BEACON BIT(6) -#define HT_OP_INFO3_DUAL_CTS_PROTECTION BIT(7) -#define HT_OP_INFO3_STBC_BEACON BIT(8) -#define HT_OP_INFO3_LSIG_TXOP_FULL_SUPPORT BIT(9) -#define HT_OP_INFO3_PCO_ACTIVE BIT(10) -#define HT_OP_INFO3_PCO_PHASE BIT(11) - -/* 7.3.2.59 OBSS Scan Parameter element */ -#define ELEM_MAX_LEN_OBSS_SCAN (16 - ELEM_HDR_LEN) - -/* 7.3.2.60 20/40 BSS Coexistence element */ -#define ELEM_MAX_LEN_20_40_BSS_COEXIST (3 - ELEM_HDR_LEN) - -#define BSS_COEXIST_INFO_REQ BIT(0) -#define BSS_COEXIST_40M_INTOLERANT BIT(1) -#define BSS_COEXIST_20M_REQ BIT(2) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ BIT(3) -#define BSS_COEXIST_OBSS_SCAN_EXEMPTION_GRANT BIT(4) - - -//3 Management frame body components (III): 7.4 Action frame format details. -/* 7.4.1 Spectrum Measurement Action frame details */ -#define ACTION_MEASUREMENT_REQ 0 /* Spectrum measurement request */ -#define ACTION_MEASUREMENT_REPORT 1 /* Spectrum measurement report */ -#define ACTION_TPC_REQ 2 /* TPC request */ -#define ACTION_TPC_REPORT 3 /* TPC report */ -#define ACTION_CHNL_SWITCH 4 /* Channel Switch Announcement */ - -/* 7.4.2 QoS Action frame details */ -#define ACTION_ADDTS_REQ 0 /* ADDTS request */ -#define ACTION_ADDTS_RSP 1 /* ADDTS response */ -#define ACTION_DELTS 2 /* DELTS */ -#define ACTION_SCHEDULE 3 /* Schedule */ - -#define ACTION_ADDTS_REQ_FRAME_LEN (24+3+63) /* WMM TSPEC IE: 63 */ -#define ACTION_ADDTS_RSP_FRAME_LEN (24+4+63) /* WMM Status Code: 1; WMM TSPEC IE: 63*/ - -/* 7.4.3 DLS Action frame details */ -#define ACTION_DLS_REQ 0 /* DLS request */ -#define ACTION_DLS_RSP 1 /* DLS response */ -#define ACTION_DLS_TEARDOWN 2 /* DLS teardown */ - -/* 7.4.4 Block ack Action frame details */ -#define ACTION_ADDBA_REQ 0 /* ADDBA request */ -#define ACTION_ADDBA_RSP 1 /* ADDBA response */ -#define ACTION_DELBA 2 /* DELBA */ - -#define ACTION_ADDBA_REQ_FRAME_LEN (24+9) -#define ACTION_ADDBA_RSP_FRAME_LEN (24+9) - -#define ACTION_DELBA_INITIATOR_MASK BIT(11) -#define ACTION_DELBA_TID_MASK BITS(12,15) -#define ACTION_DELBA_TID_OFFSET 12 -#define ACTION_DELBA_FRAME_LEN (24+6) - -/* 7.4.6 Radio Measurement Action frame details */ -#define ACTION_RM_REQ 0 /* Radio measurement request */ -#define ACTION_RM_REPORT 1 /* Radio measurement report */ -#define ACTION_LM_REQ 2 /* Link measurement request */ -#define ACTION_LM_REPORT 3 /* Link measurement report */ -#define ACTION_NEIGHBOR_REPORT_REQ 4 /* Neighbor report request */ -#define ACTION_NEIGHBOR_REPORT_RSP 5 /* Neighbor report response */ - -/* 7.4.7 Public Action frame details */ -#define ACTION_PUBLIC_20_40_COEXIST 0 /* 20/40 BSS coexistence */ - -#if CFG_SUPPORT_802_11W -/* SA Query Action frame (IEEE 802.11w/D8.0, 7.4.9) */ -#define ACTION_SA_QUERY_REQUEST 0 -#define ACTION_SA_QUERY_RESPONSE 1 - -#define ACTION_SA_QUERY_TR_ID_LEN 2 - -/* Timeout Interval Type */ -#define ACTION_SA_TIMEOUT_REASSOC_DEADLINE 1 -#define ACTION_SA_TIMEOUT_KEY_LIFETIME 2 -#define ACTION_SA_TIMEOUT_ASSOC_COMEBACK 3 -#endif - -/* 7.4.10.1 HT action frame details */ -#define ACTION_HT_NOTIFY_CHANNEL_WIDTH 0 /* Notify Channel Width */ -#define ACTION_HT_SM_POWER_SAVE 1 /* SM Power Save */ -#define ACTION_HT_PSMP 2 /* PSMP */ -#define ACTION_HT_SET_PCO_PHASE 3 /* Set PCO Phase */ -#define ACTION_HT_CSI 4 /* CSI */ -#define ACTION_HT_NON_COMPRESSED_BEAMFORM 5 /* Non-compressed Beamforming */ -#define ACTION_HT_COMPRESSED_BEAMFORM 6 /* Compressed Beamforming */ -#define ACTION_HT_ANT_SEL_INDICES_FB 7 /* Antenna Selection Indices Feedback */ - -/* 802.11v Wireless Network Management */ -#define ACTION_WNM_TIMING_MEASUREMENT_REQUEST 27 - -#define ACTION_UNPROTECTED_WNM_TIM 0 -#define ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT 1 - -#define ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN 12 - -//3 /* --------------- WFA frame body fields --------------- */ -#define VENDOR_OUI_WFA { 0x00, 0x50, 0xF2 } -#define VENDOR_OUI_WFA_SPECIFIC { 0x50, 0x6F, 0x9A } -#define VENDOR_OUI_TYPE_WPA 1 -#define VENDOR_OUI_TYPE_WMM 2 -#define VENDOR_OUI_TYPE_WPS 4 -#define VENDOR_OUI_TYPE_P2P 9 -#define VENDOR_OUI_TYPE_WFD 10 - -#define VENDOR_OUI_TYPE_LEN 4 /* Length of OUI and Type */ - -/* VERSION(2 octets for WPA) / SUBTYPE(1 octet)-VERSION(1 octet) fields for WMM in WFA IE */ -#define VERSION_WPA 0x0001 /* Little Endian Format */ -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_INFO 0x0100 -#define VENDOR_OUI_SUBTYPE_VERSION_WMM_PARAM 0x0101 - -/* SUBTYPE(1 octet) for WMM */ -#define VENDOR_OUI_SUBTYPE_WMM_INFO 0x00 /* WMM Spec version 1.1 */ -#define VENDOR_OUI_SUBTYPE_WMM_PARAM 0x01 -#define VENDOR_OUI_SUBTYPE_WMM_TSPEC 0x02 - -/* VERSION(1 octet) for WMM */ -#define VERSION_WMM 0x01 /* WMM Spec version 1.1 */ - -/* WMM-2.1.6 QoS Control Field */ -#define WMM_QC_UP_MASK BITS(0,2) -#define WMM_QC_EOSP BIT(4) -#define WMM_QC_ACK_POLICY_MASK BITS(5, 6) -#define WMM_QC_ACK_POLICY_OFFSET 5 -#define WMM_QC_ACK_POLICY_ACKNOWLEDGE 0 -#define WMM_QC_ACK_POLICY_NOT_ACKNOWLEDGE (1 << WMM_QC_ACK_POLICY_OFFSET) - - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE 6 - - -//3 Control frame body -/* 7.2.1.7 BlockAckReq */ -#define CTRL_BAR_BAR_CONTROL_OFFSET 16 -#define CTRL_BAR_BAR_INFORMATION_OFFSET 18 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack(1) -#endif - -typedef struct _LLC_SNAP_HEADER_T { - UINT_8 ucDSAP; - UINT_8 ucSSAP; - UINT_8 ucControl; - UINT_8 aucCode[3]; - UINT_16 u2Type; -} __KAL_ATTRIB_PACKED__ LLC_SNAP_HEADER_T, *P_LLC_SNAP_HEADER_T; - -//3 MAC Header. -/* Ethernet Frame Header */ -typedef struct _ETH_FRAME_HEADER_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_HEADER_T, *P_ETH_FRAME_HEADER_T; - -/* Ethernet Frame Structure */ -typedef struct _ETH_FRAME_T { - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_16 u2TypeLen; - UINT_8 aucData[1]; -} __KAL_ATTRIB_PACKED__ ETH_FRAME_T, *P_ETH_FRAME_T; - - -/* IEEE 802.11 WLAN Frame Structure */ -/* WLAN MAC Header (without Address 4 and QoS Control fields) */ -typedef struct _WLAN_MAC_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_T, *P_WLAN_MAC_HEADER_T; - - -/* WLAN MAC Header (QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_QOS_T, *P_WLAN_MAC_HEADER_QOS_T; - - -/* WLAN MAC Header (HT Control fields included) */ -typedef struct _WLAN_MAC_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_HT_T, *P_WLAN_MAC_HEADER_HT_T; - - -/* WLAN MAC Header (Address 4 included) */ -typedef struct _WLAN_MAC_HEADER_A4_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_T, *P_WLAN_MAC_HEADER_A4_T; - - -/* WLAN MAC Header (Address 4 and QoS Control fields included) */ -typedef struct _WLAN_MAC_HEADER_A4_QOS_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_QOS_T, *P_WLAN_MAC_HEADER_A4_QOS_T; - - -typedef struct _WLAN_MAC_HEADER_A4_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_8 aucAddr4[MAC_ADDR_LEN]; - UINT_16 u2QosCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_HEADER_A4_HT_T, *P_WLAN_MAC_HEADER_A4_HT_T; - - -/* 7.2.3 WLAN MAC Header for Management Frame - MMPDU */ -typedef struct _WLAN_MAC_MGMT_HEADER_T { - UINT_16 u2FrameCtrl; - UINT_16 u2Duration; - UINT_8 aucDestAddr[MAC_ADDR_LEN]; - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_T, *P_WLAN_MAC_MGMT_HEADER_T; - - -/* WLAN MAC Header for Management Frame (HT Control fields included) */ -typedef struct _WLAN_MAC_MGMT_HEADER_HT_T { - UINT_16 u2FrameCtrl; - UINT_16 u2DurationID; - UINT_8 aucAddr1[MAC_ADDR_LEN]; - UINT_8 aucAddr2[MAC_ADDR_LEN]; - UINT_8 aucAddr3[MAC_ADDR_LEN]; - UINT_16 u2SeqCtrl; - UINT_32 u4HtCtrl; -} __KAL_ATTRIB_PACKED__ WLAN_MAC_MGMT_HEADER_HT_T, *P_WLAN_MAC_MGMT_HEADER_HT_T; - -//3 WLAN CONTROL Frame -/* 7.2.1.4 WLAN Control Frame - PS-POLL Frame */ -typedef struct _CTRL_PSPOLL_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2AID; /* AID */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_8 aucTA[MAC_ADDR_LEN]; /* TA */ -} __KAL_ATTRIB_PACKED__ CTRL_PSPOLL_FRAME_T, *P_CTRL_PSPOLL_FRAME_T; - - -/* BAR */ -typedef struct _CTRL_BAR_FRAME_T { - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* RA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* TA */ - UINT_16 u2BarControl; - UINT_8 aucBarInfo[2]; /* Variable size */ -} __KAL_ATTRIB_PACKED__ CTRL_BAR_FRAME_T, *P_CTRL_BAR_FRAME_T; - -//3 WLAN Management Frame. -/* 7.2.3.1 WLAN Management Frame - Beacon Frame */ -typedef struct _WLAN_BEACON_FRAME_T { - /* Beacon header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_T, *P_WLAN_BEACON_FRAME_T; - -typedef struct _WLAN_BEACON_FRAME_BODY_T { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[1]; /* Various IEs, start from SSID */ -} __KAL_ATTRIB_PACKED__ WLAN_BEACON_FRAME_BODY_T, *P_WLAN_BEACON_FRAME_BODY_T; - - -/* 7.2.3.3 WLAN Management Frame - Disassociation Frame */ -typedef struct _WLAN_DISASSOC_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Disassociation frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DISASSOC_FRAME_T, *P_WLAN_DISASSOC_FRAME_T; - - -/* 7.2.3.4 WLAN Management Frame - Association Request frame */ -typedef struct _WLAN_ASSOC_REQ_FRAME_T { - /* Association Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_REQ_FRAME_T, *P_WLAN_ASSOC_REQ_FRAME_T; - - -/* 7.2.3.5 WLAN Management Frame - Association Response frame */ -typedef struct _WLAN_ASSOC_RSP_FRAME_T { - /* Association Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Association Response frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2StatusCode; /* Status code */ - UINT_16 u2AssocId; /* Association ID */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - supported rates, and etc. */ -} __KAL_ATTRIB_PACKED__ WLAN_ASSOC_RSP_FRAME_T, *P_WLAN_ASSOC_RSP_FRAME_T; - - -/* 7.2.3.6 WLAN Management Frame - Reassociation Request frame */ -typedef struct _WLAN_REASSOC_REQ_FRAME_T { - /* Reassociation Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Reassociation Request frame body */ - UINT_16 u2CapInfo; /* Capability information */ - UINT_16 u2ListenInterval; /* Listen interval */ - UINT_8 aucCurrentAPAddr[MAC_ADDR_LEN]; /* Current AP address */ - UINT_8 aucInfoElem[1]; /* Information elements, include WPA IE */ -} __KAL_ATTRIB_PACKED__ WLAN_REASSOC_REQ_FRAME_T, *P_WLAN_REASSOC_REQ_FRAME_T; - - -/* 7.2.3.7 WLAN Management Frame - Reassociation Response frame - (the same as Association Response frame) */ -typedef WLAN_ASSOC_RSP_FRAME_T WLAN_REASSOC_RSP_FRAME_T, *P_WLAN_REASSOC_RSP_FRAME_T; - -/* 7.2.3.9 WLAN Management Frame - Probe Response Frame */ -typedef WLAN_BEACON_FRAME_T WLAN_PROBE_RSP_FRAME_T, *P_WLAN_PROBE_RSP_FRAME_T; - -/* 7.2.3.10 WLAN Management Frame - Authentication Frame */ -typedef struct _WLAN_AUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Authentication frame body */ - UINT_16 u2AuthAlgNum; /* Authentication algorithm number */ - UINT_16 u2AuthTransSeqNo; /* Authentication transaction sequence number */ - UINT_16 u2StatusCode; /* Status code */ - UINT_8 aucInfoElem[1]; /* Various IEs for Fast BSS Transition */ -} __KAL_ATTRIB_PACKED__ WLAN_AUTH_FRAME_T, *P_WLAN_AUTH_FRAME_T; - - -/* 7.2.3.11 WLAN Management Frame - Deauthentication Frame */ -typedef struct _WLAN_DEAUTH_FRAME_T { - /* Authentication MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Deauthentication frame body */ - UINT_16 u2ReasonCode; /* Reason code */ - UINT_8 aucInfoElem[1]; /* Various IEs, possible no. */ -} __KAL_ATTRIB_PACKED__ WLAN_DEAUTH_FRAME_T, *P_WLAN_DEAUTH_FRAME_T; - - - -//3 Information Elements. -/* 7.3.2 Generic element format */ -typedef struct _IE_HDR_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucInfo[1]; -} __KAL_ATTRIB_PACKED__ IE_HDR_T, *P_IE_HDR_T; - -/* 7.3.2.1 SSID element */ -typedef struct _IE_SSID_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; -} __KAL_ATTRIB_PACKED__ IE_SSID_T, *P_IE_SSID_T; - -/* 7.3.2.2 Supported Rates element */ -typedef struct _IE_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucSupportedRates[ELEM_MAX_LEN_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_SUPPORTED_RATE_T, *P_IE_SUPPORTED_RATE_T; - -/* 7.3.2.4 DS Parameter Set element */ -typedef struct _IE_DS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCurrChnl; -} __KAL_ATTRIB_PACKED__ IE_DS_PARAM_SET_T, *P_IE_DS_PARAM_SET_T; - - -/* 7.3.2.5 CF Parameter Set element */ -typedef struct _IE_CF_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCFPCount; - UINT_8 ucCFPPeriod; - UINT_16 u2CFPMaxDur; - UINT_16 u2DurRemaining; -} __KAL_ATTRIB_PACKED__ IE_CF_PARAM_SET_T, *P_IE_CF_PARAM_SET_T; - - -/* 7.3.2.6 TIM */ -typedef struct _IE_TIM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucDTIMCount; - UINT_8 ucDTIMPeriod; - UINT_8 ucBitmapControl; - UINT_8 aucPartialVirtualMap[1]; -} __KAL_ATTRIB_PACKED__ IE_TIM_T, *P_IE_TIM_T; - -/* 7.3.2.7 IBSS Parameter Set element */ -typedef struct _IE_IBSS_PARAM_SET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ATIMWindow; -} __KAL_ATTRIB_PACKED__ IE_IBSS_PARAM_SET_T, *P_IE_IBSS_PARAM_SET_T; - -/* 7.3.2.8 Challenge Text element */ -typedef struct _IE_CHALLENGE_TEXT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucChallengeText[ELEM_MAX_LEN_CHALLENGE_TEXT]; -} __KAL_ATTRIB_PACKED__ IE_CHALLENGE_TEXT_T, *P_IE_CHALLENGE_TEXT_T; - -/* 7.3.2.9 Country information element */ -#if CFG_SUPPORT_802_11D -/*! \brief COUNTRY_INFO_TRIPLET is defined for the COUNTRY_INFO_ELEM structure. */ -typedef struct _COUNTRY_INFO_TRIPLET_T { - UINT_8 ucParam1; /*!< If param1 >= 201, this triplet is referred to as - Regulatory Triplet in 802_11J. */ - UINT_8 ucParam2; - UINT_8 ucParam3; -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_TRIPLET_T, *P_COUNTRY_INFO_TRIPLET_T; - -typedef struct _COUNTRY_INFO_SUBBAND_TRIPLET_T { - UINT_8 ucFirstChnlNum; /*!< First Channel Number */ - UINT_8 ucNumOfChnl; /*!< Number of Channels */ - INT_8 cMaxTxPwrLv; /*!< Maximum Transmit Power Level */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_SUBBAND_TRIPLET_T, *P_COUNTRY_INFO_SUBBAND_TRIPLET_T; - -typedef struct _COUNTRY_INFO_REGULATORY_TRIPLET_T { - UINT_8 ucRegExtId; /*!< Regulatory Extension Identifier, should - be greater than or equal to 201 */ - UINT_8 ucRegClass; /*!< Regulatory Class */ - UINT_8 ucCoverageClass; /*!< Coverage Class, unsigned 1-octet value 0~31 - , 32~255 reserved */ -} __KAL_ATTRIB_PACKED__ COUNTRY_INFO_REGULATORY_TRIPLET_T, *P_COUNTRY_INFO_REGULATORY_TRIPLET_T; - -typedef struct _IE_COUNTRY_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCountryStr[3]; - COUNTRY_INFO_SUBBAND_TRIPLET_T arCountryStr[1]; -} __KAL_ATTRIB_PACKED__ IE_COUNTRY_T, *P_IE_COUNTRY_T; -#endif /* CFG_SUPPORT_802_11D */ - -/* 7.3.2.13 ERP element */ -typedef struct _IE_ERP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucERP; -} __KAL_ATTRIB_PACKED__ IE_ERP_T, *P_IE_ERP_T; - -/* 7.3.2.14 Extended Supported Rates element */ -typedef struct _IE_EXT_SUPPORTED_RATE_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucExtSupportedRates[ELEM_MAX_LEN_EXTENDED_SUP_RATES]; -} __KAL_ATTRIB_PACKED__ IE_EXT_SUPPORTED_RATE_T, *P_IE_EXT_SUPPORTED_RATE_T; - -/* 7.3.2.15 Power Constraint element */ -typedef struct _IE_POWER_CONSTRAINT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucLocalPowerConstraint; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CONSTRAINT_T, *P_IE_POWER_CONSTRAINT_T; - -/* 7.3.2.16 Power Capability element */ -typedef struct _IE_POWER_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cMinTxPowerCap; /* Unit: dBm */ - INT_8 cMaxTxPowerCap; /* Unit: dBm */ -} __KAL_ATTRIB_PACKED__ IE_POWER_CAP_T, *P_IE_POWER_CAP_T; - -/* 7.3.2.17 TPC request element */ -typedef struct _IE_TPC_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; -} __KAL_ATTRIB_PACKED__ IE_TPC_REQ_T, *P_IE_TPC_REQ_T; - -/* 7.3.2.18 TPC report element */ -typedef struct _IE_TPC_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - INT_8 cTxPower; /* Unit: dBm */ - INT_8 cLinkMargin; /* Unit: dB */ -} __KAL_ATTRIB_PACKED__ IE_TPC_REPORT_T, *P_IE_TPC_REPORT_T; - -/* 7.3.2.20 Channel Switch Announcement element */ -typedef struct _IE_CHNL_SWITCH_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucSwitchMode; - UINT_8 ucNewChannel; - UINT_8 ucSwitchCount; -} __KAL_ATTRIB_PACKED__ IE_CHNL_SWITCH_T, *P_IE_CHNL_SWITCH_T; - -/* 7.3.2.21 Measurement Request element */ -typedef struct _IE_MEASUREMENT_REQ_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucRequestMode; - UINT_8 ucMeasurementType; - UINT_8 aucRequestFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REQ_T, *P_IE_MEASUREMENT_REQ_T; - -typedef struct _SM_BASIC_REQ_T { - UINT_8 ucChannel; - UINT_32 au4StartTime[2]; - UINT_16 u2Duration; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REQ_T, *P_SM_BASIC_REQ_T; - -/* SM_COMMON_REQ_T is not specified in Spec. Use it as common structure of SM */ -typedef SM_BASIC_REQ_T SM_REQ_COMMON_T, *P_SM_REQ_COMMON_T; -typedef SM_BASIC_REQ_T SM_CCA_REQ_T, *P_SM_CCA_REQ_T; -typedef SM_BASIC_REQ_T SM_RPI_HISTOGRAM_REQ_T, *P_SM_RPI_HISTOGRAM_REQ_T; - -typedef struct _RM_CHNL_LOAD_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REQ_T, *P_RM_CHNL_LOAD_REQ_T; - -typedef RM_CHNL_LOAD_REQ_T \ - RM_NOISE_HISTOGRAM_REQ_T, *P_RM_NOISE_HISTOGRAM_REQ_T; - -typedef struct _RM_BCN_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucMeasurementMode; - UINT_8 aucBssid[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_BCN_REQ_T, *P_RM_BCN_REQ_T; - -typedef struct _RM_FRAME_REQ_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucFrameReqType; - UINT_8 aucMacAddr[6]; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_FRAME_REQ_T, *P_RM_FRAME_REQ_T; - -typedef struct _RM_STA_STATS_REQ_T { - UINT_8 aucPeerMacAddr[6]; - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 ucGroupID; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_STA_STATS_REQ_T, *P_RM_STA_STATS_REQ_T; - -typedef struct _RM_LCI_REQ_T { - UINT_8 ucLocationSubject; - UINT_8 ucLatitudeResolution; - UINT_8 ucLongitudeResolution; - UINT_8 ucAltitudeResolution; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_LCI_REQ_T, *P_RM_LCI_REQ_T; - -typedef struct _RM_TS_MEASURE_REQ_T { - UINT_16 u2RandomInterval; - UINT_16 u2Duration; - UINT_8 aucPeerStaAddr[6]; - UINT_8 ucTrafficID; - UINT_8 ucBin0Range; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_TS_MEASURE_REQ_T, *P_RM_TS_MEASURE_REQ_T; - -typedef struct _RM_MEASURE_PAUSE_REQ_T { - UINT_16 u2PauseTime; - UINT_8 aucSubElements[1]; -} __KAL_ATTRIB_PACKED__ RM_MEASURE_PAUSE_REQ_T, *P_RM_MEASURE_PAUSE_REQ_T; - -/* 7.3.2.22 Measurement Report element */ -typedef struct _IE_MEASUREMENT_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucToken; - UINT_8 ucReportMode; - UINT_8 ucMeasurementType; - UINT_8 aucReportFields[1]; -} __KAL_ATTRIB_PACKED__ IE_MEASUREMENT_REPORT_T, *P_IE_MEASUREMENT_REPORT_T; - -typedef struct _SM_BASIC_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucMap; -} __KAL_ATTRIB_PACKED__ SM_BASIC_REPORT_T, *P_SM_BASIC_REPORT_T; - -typedef struct _SM_CCA_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucCcaBusyFraction; -} __KAL_ATTRIB_PACKED__ SM_CCA_REPORT_T, *P_SM_CCA_REPORT_T; - -typedef struct _SM_RPI_REPORT_T { - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 aucRPI[8]; -} __KAL_ATTRIB_PACKED__ SM_RPI_REPORT_T, *P_SM_RPI_REPORT_T; - -typedef struct _RM_CHNL_LOAD_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucChnlLoad; -} __KAL_ATTRIB_PACKED__ RM_CHNL_LOAD_REPORT_T, *P_RM_CHNL_LOAD_REPORT_T; - -typedef struct _RM_IPI_REPORT_T { - UINT_8 ucRegulatoryClass; - UINT_8 ucChannel; - UINT_32 u4StartTime[2]; - UINT_16 u2Duration; - UINT_8 ucAntennaId; - INT_8 cANPI; - UINT_8 aucIPI[11]; -} __KAL_ATTRIB_PACKED__ RM_IPI_REPORT_T, *P_RM_IPI_REPORT_T; - -/* 7.3.2.23 Quiet element */ -typedef struct _IE_QUIET_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucCount; - UINT_8 ucPeriod; - UINT_16 u2Duration; - UINT_16 u2Offset; -} __KAL_ATTRIB_PACKED__ IE_QUIET_T, *P_IE_QUIET_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_EXT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCapabilities[1]; -} __KAL_ATTRIB_PACKED__ IE_EXT_CAP_T, *P_EXT_CAP_T; - -/* 7.3.2.27 Extended Capabilities element */ -typedef struct _IE_RRM_ENABLED_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucCap[5]; -} __KAL_ATTRIB_PACKED__ IE_RRM_ENABLED_CAP_T, *P_IE_RRM_ENABLED_CAP_T; - -/* 7.3.2.56 HT Capabilities element */ -typedef struct _SUP_MCS_SET_FIELD { - UINT_8 aucRxMcsBitmask[SUP_MCS_RX_BITMASK_OCTET_NUM]; - UINT_16 u2RxHighestSupportedRate; - UINT_32 u4TxRateInfo; -} __KAL_ATTRIB_PACKED__ SUP_MCS_SET_FIELD, *P_SUP_MCS_SET_FIELD; - -typedef struct _IE_HT_CAP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2HtCapInfo; - UINT_8 ucAmpduParam; - SUP_MCS_SET_FIELD rSupMcsSet; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; -} __KAL_ATTRIB_PACKED__ IE_HT_CAP_T, *P_IE_HT_CAP_T; - -/* 7.3.2.57 HT Operation element */ -typedef struct _IE_HT_OP_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucPrimaryChannel; - UINT_8 ucInfo1; - UINT_16 u2Info2; - UINT_16 u2Info3; - UINT_8 aucBasicMcsSet[16]; -} __KAL_ATTRIB_PACKED__ IE_HT_OP_T, *P_IE_HT_OP_T; - -/* 7.3.2.25 RSN Information element format */ -typedef struct _RSN_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ RSN_INFO_ELEM_T, *P_RSN_INFO_ELEM_T; - -/* 7.3.2.26 WPA Information element format */ -typedef struct _WPA_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UCHAR aucOui[3]; - UCHAR ucOuiType; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2PairwiseKeyCipherSuiteCount; - UCHAR aucPairwiseKeyCipherSuite1[4]; -} __KAL_ATTRIB_PACKED__ WPA_INFO_ELEM_T, *P_WPA_INFO_ELEM_T; - -/* 7.3.2.58 20/40 BSS Intolerant Channel Report element */ -typedef struct _IE_INTOLERANT_CHNL_REPORT_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucRegulatoryClass; - UINT_8 aucChannelList[1]; -} __KAL_ATTRIB_PACKED__ IE_INTOLERANT_CHNL_REPORT_T, *P_IE_INTOLERANT_CHNL_REPORT_T; - -/* 7.3.2.59 OBSS Scan Parameters element */ -typedef struct _IE_OBSS_SCAN_PARAM_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_16 u2ScanPassiveDwell; - UINT_16 u2ScanActiveDwell; - UINT_16 u2TriggerScanInterval; - UINT_16 u2ScanPassiveTotalPerChnl; - UINT_16 u2ScanActiveTotalPerChnl; - UINT_16 u2WidthTransDelayFactor; - UINT_16 u2ScanActivityThres; -} __KAL_ATTRIB_PACKED__ IE_OBSS_SCAN_PARAM_T, *P_IE_OBSS_SCAN_PARAM_T; - -/* 7.3.2.60 20/40 BSS Coexistence element */ -typedef struct _IE_20_40_COEXIST_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 ucData; -} __KAL_ATTRIB_PACKED__ IE_20_40_COEXIST_T, *P_IE_20_40_COEXIST_T; - - -//3 7.4 Action Frame. -/* 7.4 Action frame format */ -typedef struct _WLAN_ACTION_FRAME { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucActionDetails[1]; /* Action details */ -} __KAL_ATTRIB_PACKED__ WLAN_ACTION_FRAME, *P_WLAN_ACTION_FRAME; - -/* 7.4.1.1 Spectrum Measurement Request frame format */ -typedef struct _ACTION_SM_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements */ -} __KAL_ATTRIB_PACKED__ ACTION_SM_REQ_FRAME, *P_ACTION_SM_REQ_FRAME; - -/* 7.4.1.2 Spectrum Measurement Report frame format */ -typedef ACTION_SM_REQ_FRAME ACTION_SM_REPORT_FRAME, *P_ACTION_SM_REPORT_FRAME; - -/* 7.4.2.1 ADDTS Request frame format */ -typedef struct _ACTION_ADDTS_REQ_FRAME { - /* ADDTS Request MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_REQ_FRAME, *P_ACTION_ADDTS_REQ_FRAME; - - -/* 7.4.2.2 ADDTS Response frame format */ -typedef struct _ACTION_ADDTS_RSP_FRAME { - /* ADDTS Response MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* ADDTS Response frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucStatusCode; /* WMM Status Code is of one byte */ - UINT_8 aucInfoElem[1]; /* Information elements, such as - TS Delay, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDTS_RSP_FRAME, *P_ACTION_ADDTS_RSP_FRAME; - - -/* 7.4.2.3 DELTS frame format */ -typedef struct _ACTION_DELTS_FRAME { - /* DELTS MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* DELTS frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 aucTsInfo[3]; /* TS Info */ -} __KAL_ATTRIB_PACKED__ ACTION_DELTS_FRAME, *P_ACTION_DELTS_FRAME; - - -/* 7.4.4.1 ADDBA Request frame format */ -typedef struct _ACTION_ADDBA_REQ_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; - UINT_8 aucBAStartSeqCtrl[2]; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_FRAME_T, *P_ACTION_ADDBA_REQ_FRAME_T; - -typedef struct _ACTION_ADDBA_REQ_BODY_T{ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_REQ_BODY_T, *P_ACTION_ADDBA_REQ_BODY_T; - -/* 7.4.4.2 ADDBA Response frame format */ -typedef struct _ACTION_ADDBA_RSP_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_8 aucStatusCode[2]; - UINT_8 aucBAParameterSet[2]; /* BA policy, TID, buffer size */ - UINT_8 aucBATimeoutValue[2]; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_FRAME_T, *P_ACTION_ADDBA_RSP_FRAME_T; - -typedef struct _ACTION_ADDBA_RSP_BODY_T { - UINT_16 u2StatusCode; - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; -} __KAL_ATTRIB_PACKED__ ACTION_ADDBA_RSP_BODY_T, *P_ACTION_ADDBA_RSP_BODY_T; - -/* 7.4.4.3 DELBA frame format */ -typedef struct _ACTION_DELBA_FRAME_T { - /* Action MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2DurationID; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Action frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_16 u2DelBaParameterSet; /* Bit 11 Initiator, Bits 12-15 TID */ - UINT_16 u2ReasonCode; /* 7.3.1.7 */ -} __KAL_ATTRIB_PACKED__ ACTION_DELBA_FRAME_T, *P_ACTION_DELBA_FRAME_T; - -/* 7.4.6.1 Radio Measurement Request frame format */ -typedef struct _ACTION_RM_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Request frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_16 u2Repetitions; /* Number of repetitions */ - UINT_8 aucInfoElem[1]; /* Measurement Request elements, such as - channel load request, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REQ_FRAME, *P_ACTION_RM_REQ_FRAME; - -/* 7.4.6.2 Radio Measurement Report frame format */ -typedef struct _ACTION_RM_REPORT_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Radio Measurement Report frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 aucInfoElem[1]; /* Measurement Report elements, such as - channel load report, and etc. */ -} __KAL_ATTRIB_PACKED__ ACTION_RM_REPORT_FRAME, *P_ACTION_RM_REPORT_FRAME; - -/* 7.4.7.1a 20/40 BSS Coexistence Management frame format */ -typedef struct _ACTION_20_40_COEXIST_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - IE_20_40_COEXIST_T rBssCoexist;/* 20/40 BSS coexistence element */ - IE_INTOLERANT_CHNL_REPORT_T rChnlReport;/* Intolerant channel report */ - -} __KAL_ATTRIB_PACKED__ ACTION_20_40_COEXIST_FRAME, *P_ACTION_20_40_COEXIST_FRAME; - - -#if CFG_SUPPORT_802_11W -/* 7.4.9 SA Query Management frame format */ -typedef struct _ACTION_SA_QUERY_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; /* Transaction id */ - -} __KAL_ATTRIB_PACKED__ ACTION_SA_QUERY_FRAME, *P_ACTION_SA_QUERY_FRAME; -#endif - -/* 7.4.10 Notify Channel Width Management frame format */ -typedef struct _ACTION_NOTIFY_CHNL_WIDTH_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* BSS Coexistence Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucChannelWidth; /* Channel Width */ -} __KAL_ATTRIB_PACKED__ ACTION_NOTIFY_CHNL_WIDTH_FRAME, *P_ACTION_NOTIFY_CHNL_WIDTH_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement Request */ -typedef struct _ACTION_WNM_TIMING_MEAS_REQ_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Request Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucTrigger; /* Trigger */ -} __KAL_ATTRIB_PACKED__ ACTION_WNM_TIMING_MEAS_REQ_FRAME, *P_ACTION_WNM_TIMING_MEAS_REQ_FRAME; - -/* 802.11v Wireless Network Management: Timing Measurement */ -typedef struct _ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* Timing Measurement Management frame body */ - UINT_8 ucCategory; /* Category */ - UINT_8 ucAction; /* Action Value */ - UINT_8 ucDialogToken; /* Dialog Token */ - UINT_8 ucFollowUpDialogToken; /* Follow Up Dialog Token */ - UINT_32 u4ToD; /* Timestamp of Departure [10ns] */ - UINT_32 u4ToA; /* Timestamp of Arrival [10ns] */ - UINT_8 ucMaxToDErr; /* Maximum of ToD Error [10ns] */ - UINT_8 ucMaxToAErr; /* Maximum of ToA Error [10ns] */ -} __KAL_ATTRIB_PACKED__ ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME, *P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME; - -//3 Information Elements from WFA. -typedef struct _IE_WFA_T { - UINT_8 ucId; - UINT_8 ucLength; - UINT_8 aucOui[3]; - UINT_8 ucOuiType; - UINT_8 aucOuiSubTypeVersion[2]; - /*!< Please be noted. WPA defines a 16 bit field version - instead of one subtype field and one version field*/ -} __KAL_ATTRIB_PACKED__ IE_WFA_T, *P_IE_WFA_T; - -/* WAPI Information element format */ -typedef struct _WAPI_INFO_ELEM_T { - UCHAR ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_16 u2AuthKeyMgtSuiteCount; - UCHAR aucAuthKeyMgtSuite1[4]; -} __KAL_ATTRIB_PACKED__ WAPI_INFO_ELEM_T, *P_WAPI_INFO_ELEM_T; - -#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -#pragma pack() -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Convert the ECWmin(max) to CWmin(max) */ -#define ECW_TO_CW(_ECW) ((1 << (_ECW)) - 1) - -/* Convert the RCPI to dBm */ -#define RCPI_TO_dBm(_rcpi) \ - ((PARAM_RSSI)(((_rcpi) > RCPI_HIGH_BOUND ? RCPI_HIGH_BOUND : (_rcpi)) >> 1) - NDBM_LOW_BOUND_FOR_RCPI) - -/* Convert the dBm to RCPI */ -#define dBm_TO_RCPI(_dbm) \ - (RCPI)( ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) > RCPI_HIGH_BOUND) ? RCPI_HIGH_BOUND : \ - ( (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) < RCPI_LOW_BOUND ? RCPI_LOW_BOUND : \ - (((PARAM_RSSI)(_dbm) + NDBM_LOW_BOUND_FOR_RCPI) << 1) ) ) - -/* Convert an unsigned char pointer to an information element pointer */ -#define IE_ID(fp) (((P_IE_HDR_T) fp)->ucId) -#define IE_LEN(fp) (((P_IE_HDR_T) fp)->ucLength) -#define IE_SIZE(fp) (ELEM_HDR_LEN + IE_LEN(fp)) - -#define SSID_IE(fp) ((P_IE_SSID_T) fp) - -#define SUP_RATES_IE(fp) ((P_IE_SUPPORTED_RATE_T) fp) - -#define DS_PARAM_IE(fp) ((P_IE_DS_PARAM_SET_T) fp) - -#define TIM_IE(fp) ((P_IE_TIM_T) fp) - -#define IBSS_PARAM_IE(fp) ((P_IE_IBSS_PARAM_SET_T) fp) - -#define ERP_INFO_IE(fp) ((P_IE_ERP_T) fp) - -#define EXT_SUP_RATES_IE(fp) ((P_IE_EXT_SUPPORTED_RATE_T) fp) - -#define WFA_IE(fp) ((P_IE_WFA_T) fp) - -#if CFG_SUPPORT_802_11D -#define COUNTRY_IE(fp) ((P_IE_COUNTRY_T) fp) -#endif - -#define EXT_CAP_IE(fp) ((P_EXT_CAP_T) fp) - -#define HT_CAP_IE(fp) ((P_IE_HT_CAP_T) fp) - -#define HT_OP_IE(fp) ((P_IE_HT_OP_T) fp) - -#define OBSS_SCAN_PARAM_IE(fp) ((P_IE_OBSS_SCAN_PARAM_T) fp) - -#define BSS_20_40_COEXIST_IE(fp) ((P_IE_20_40_COEXIST_T) fp) - -#define QUIET_IE(fp) ((P_IE_QUIET_T) fp) - - - -/* The macro to check if the MAC address is B/MCAST Address */ -#define IS_BMCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) ( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to check if the MAC address is UCAST Address */ -#define IS_UCAST_MAC_ADDR(_pucDestAddr) \ - ((BOOLEAN) !( ((PUINT_8)(_pucDestAddr))[0] & BIT(0) )) - -/* The macro to copy the MAC address */ -#define COPY_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - kalMemCopy(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN) - -/* The macro to check if two MAC addresses are equal */ -#define EQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (!kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - -/* The macro to check if two MAC addresses are not equal */ -#define UNEQUAL_MAC_ADDR(_pucDestAddr, _pucSrcAddr) \ - (kalMemCmp(_pucDestAddr, _pucSrcAddr, MAC_ADDR_LEN)) - - -/* The macro to check whether two SSIDs are equal */ -#define EQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 <= ELEM_MAX_LEN_SSID) && \ - (ucSsidLen2 <= ELEM_MAX_LEN_SSID) && \ - ((ucSsidLen1) == (ucSsidLen2)) && \ - !kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to check whether two SSIDs are equal */ -#define UNEQUAL_SSID(pucSsid1, ucSsidLen1, pucSsid2, ucSsidLen2) \ - ((ucSsidLen1 > ELEM_MAX_LEN_SSID) || \ - (ucSsidLen2 > ELEM_MAX_LEN_SSID) || \ - ((ucSsidLen1) != (ucSsidLen2)) || \ - kalMemCmp(pucSsid1, pucSsid2, ucSsidLen1)) - -/* The macro to copy the SSID, the length of pucDestSsid should have at least 32 bytes */ -#define COPY_SSID(pucDestSsid, ucDestSsidLen, pucSrcSsid, ucSrcSsidLen) \ - do { \ - ucDestSsidLen = ucSrcSsidLen; \ - if (ucSrcSsidLen) { \ - ASSERT(ucSrcSsidLen <= ELEM_MAX_LEN_SSID); \ - kalMemCopy(pucDestSsid, pucSrcSsid, ((ucSrcSsidLen > ELEM_MAX_LEN_SSID) ? ELEM_MAX_LEN_SSID : ucSrcSsidLen)); \ - } \ - } while (FALSE) - -/* The macro to copy the IE */ -#define COPY_IE(pucDestIE, pucSrcIE) \ - do { \ - kalMemCopy((PUINT_8)pucDestIE, \ - (PUINT_8)pucSrcIE,\ - IE_SIZE(pucSrcIE)); \ - } while (FALSE) - -#define IE_FOR_EACH(_pucIEsBuf, _u2IEsBufLen, _u2Offset) \ - for ((_u2Offset) = 0; ((((_u2Offset) + 2) <= (_u2IEsBufLen)) && (((_u2Offset) + IE_SIZE(_pucIEsBuf)) <= (_u2IEsBufLen))) ; \ - (_u2Offset) += IE_SIZE(_pucIEsBuf), (_pucIEsBuf) += IE_SIZE(_pucIEsBuf)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _MAC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt5931_reg.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt5931_reg.h deleted file mode 100755 index 0b8cf46f3baa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt5931_reg.h +++ /dev/null @@ -1,336 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/mt5931_reg.h#1 $ -*/ - -/*! \file "mt5931_reg.h" - \brief The common register definition of mt5931 - - N/A -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mt5931_reg.h $ - * - * 02 25 2011 cp.wu - * [WCXRP00000496] [MT5931][Driver] Apply host-triggered chip reset before initializing firmware download procedures - * apply host-triggered chip reset mechanism before initializing firmware download procedures. - * - * 02 18 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Add WHISR_D2H_SW_ASSERT_INFO_INT to MT5931_reg. - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * -*/ - -#ifndef _MT5931_REG_H -#define _MT5931_REG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -//1 MT5931 MCR Definition - -//2 Host Interface - -//4 CHIP ID Register -#define MCR_WCIR 0x0000 - -//4 HIF Low Power Control Register -#define MCR_WHLPCR 0x0004 - -//4 Control Status Register -#define MCR_WSDIOCSR 0x0008 -#define MCR_WSPICSR 0x0008 - -//4 HIF Control Register -#define MCR_WHCR 0x000C - -//4 HIF Interrupt Status Register -#define MCR_WHISR 0x0010 - -//4 HIF Interrupt Enable Register -#define MCR_WHIER 0x0014 - -//4 Abnormal Status Register -#define MCR_WASR 0x0018 - -//4 WLAN Software Interrupt Control Register -#define MCR_WSICR 0x001C - -//4 WLAN TX Status Register -#define MCR_WTSR0 0x0020 - -//4 WLAN TX Status Register -#define MCR_WTSR1 0x0024 - -//4 WLAN TX Data Register 0 -#define MCR_WTDR0 0x0028 - -//4 WLAN TX Data Register 1 -#define MCR_WTDR1 0x002C - -//4 WLAN RX Data Register 0 -#define MCR_WRDR0 0x0030 - -//4 WLAN RX Data Register 1 -#define MCR_WRDR1 0x0034 - -//4 Host to Device Send Mailbox 0 Register -#define MCR_H2DSM0R 0x0038 - -//4 Host to Device Send Mailbox 1 Register -#define MCR_H2DSM1R 0x003c - -//4 Device to Host Receive Mailbox 0 Register -#define MCR_D2HRM0R 0x0040 - -//4 Device to Host Receive Mailbox 1 Register -#define MCR_D2HRM1R 0x0044 - -//4 Device to Host Receive Mailbox 2 Register -#define MCR_D2HRM2R 0x0048 - -//4 WLAN RX Packet Length Register -#define MCR_WRPLR 0x0050 - -//4 EHPI Transaction Count Register -#define MCR_EHTCR 0x0054 - -//4 Firmware Download Data Register -#define MCR_FWDLDR 0x0080 - -//4 Firmware Download Destination Starting Address Register -#define MCR_FWDLDSAR 0x0084 - -//4 Firmware Download Status Register -#define MCR_FWDLSR 0x0088 - -//4 WLAN MCU Control & Status Register -#define MCR_WMCSR 0x008c - -//4 WLAN Firmware Download Configuration -#define MCR_FWCFG 0x0090 - - -//#if CFG_SDIO_INTR_ENHANCE -typedef struct _ENHANCE_MODE_DATA_STRUCT_T { - UINT_32 u4WHISR; - union { - struct { - UINT_8 ucTQ0Cnt; - UINT_8 ucTQ1Cnt; - UINT_8 ucTQ2Cnt; - UINT_8 ucTQ3Cnt; - UINT_8 ucTQ4Cnt; - UINT_8 ucTQ5Cnt; - UINT_16 u2Rsrv; - } u; - UINT_32 au4WTSR[2]; - } rTxInfo; - union { - struct { - UINT_16 u2NumValidRx0Len; - UINT_16 u2NumValidRx1Len; - UINT_16 au2Rx0Len[16]; - UINT_16 au2Rx1Len[16]; - } u; - UINT_32 au4RxStatusRaw[17]; - } rRxInfo; - UINT_32 u4RcvMailbox0; - UINT_32 u4RcvMailbox1; -} ENHANCE_MODE_DATA_STRUCT_T, *P_ENHANCE_MODE_DATA_STRUCT_T; -// #endif /* ENHANCE_MODE_DATA_STRUCT_T */ - - -//2 Definition in each register -//3 WCIR 0x0000 -#define WCIR_WLAN_READY BIT(21) -#define WCIR_POR_INDICATOR BIT(20) -#define WCIR_REVISION_ID BITS(16,19) -#define WCIR_CHIP_ID BITS(0,15) - -#define MTK_CHIP_REV 0x00005931 -#define MTK_CHIP_MP_REVERSION_ID 0x0 - -//3 WHLPCR 0x0004 -#define WHLPCR_FW_OWN_REQ_CLR BIT(9) -#define WHLPCR_FW_OWN_REQ_SET BIT(8) -#define WHLPCR_IS_DRIVER_OWN BIT(8) -#define WHLPCR_INT_EN_CLR BIT(1) -#define WHLPCR_INT_EN_SET BIT(0) - -//3 WSDIOCSR 0x0008 -#define WSDIOCSR_SDIO_RE_INIT_EN BIT(0) - -//3 WSPICSR 0x0008 -#define WCSR_SPI_MODE_SEL BITS(3,4) -#define WCSR_SPI_ENDIAN_BIG BIT(2) -#define WCSR_SPI_INT_OUT_MODE BIT(1) -#define WCSR_SPI_DATA_OUT_MODE BIT(0) - -//3 WHCR 0x000C -#define WHCR_RX_ENHANCE_MODE_EN BIT(16) -#define WHCR_MAX_HIF_RX_LEN_NUM BITS(4,7) -#define WHCR_W_MAILBOX_RD_CLR_EN BIT(2) -#define WHCR_W_INT_CLR_CTRL BIT(1) -#define WHCR_MCU_DBG_EN BIT(0) -#define WHCR_OFFSET_MAX_HIF_RX_LEN_NUM 4 - -//3 WHISR 0x0010 -#define WHISR_D2H_SW_INT BITS(8,31) -#define WHISR_D2H_SW_ASSERT_INFO_INT BIT(31) -#define WHISR_FW_OWN_BACK_INT BIT(4) -#define WHISR_ABNORMAL_INT BIT(3) -#define WHISR_RX1_DONE_INT BIT(2) -#define WHISR_RX0_DONE_INT BIT(1) -#define WHISR_TX_DONE_INT BIT(0) - - -//3 WHIER 0x0014 -#define WHIER_D2H_SW_INT BITS(8,31) -#define WHIER_FW_OWN_BACK_INT_EN BIT(4) -#define WHIER_ABNORMAL_INT_EN BIT(3) -#define WHIER_RX1_DONE_INT_EN BIT(2) -#define WHIER_RX0_DONE_INT_EN BIT(1) -#define WHIER_TX_DONE_INT_EN BIT(0) -#define WHIER_DEFAULT (WHIER_RX0_DONE_INT_EN | \ - WHIER_RX1_DONE_INT_EN | \ - WHIER_TX_DONE_INT_EN | \ - WHIER_ABNORMAL_INT_EN | \ - WHIER_D2H_SW_INT \ - ) - - -//3 WASR 0x0018 -#define WASR_FW_OWN_INVALID_ACCESS BIT(4) -#define WASR_RX1_UNDER_FLOW BIT(3) -#define WASR_RX0_UNDER_FLOW BIT(2) -#define WASR_TX1_OVER_FLOW BIT(1) -#define WASR_TX0_OVER_FLOW BIT(0) - - -//3 WSICR 0x001C -#define WSICR_H2D_SW_INT_SET BITS(16,31) - - -//3 WRPLR 0x0050 -#define WRPLR_RX1_PACKET_LENGTH BITS(16,31) -#define WRPLR_RX0_PACKET_LENGTH BITS(0,15) - - -//3 FWDLSR 0x0088 -#define FWDLSR_FWDL_RDY BIT(8) -#define FWDLSR_FWDL_MODE BIT(0) - - -//3 WMCSR 0x008c -#define WMCSR_CHIP_RST BIT(15) /* write */ -#define WMCSR_DL_OK BIT(15) /* read */ -#define WMCSR_DL_FAIL BIT(14) -#define WMCSR_PLLRDY BIT(13) -#define WMCSR_WF_ON BIT(12) -#define WMCSR_INI_RDY BIT(11) -#define WMCSR_WF_EN BIT(6) -#define WMCSR_SW_EN BIT(5) -#define WMCSR_SPLLEN BIT(4) -#define WMCSR_SPWREN BIT(3) -#define WMCSR_HSTOPIL BIT(2) -#define WMCSR_FWDLRST BIT(1) -#define WMCSR_FWDLEN BIT(0) - - -//3 FWCFG 0x0090 -#define FWCFG_KSEL BITS(14,15) -#define FWCFG_FLEN BITS(0,13) - - -#endif /* _MT5931_REG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt6620_reg.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt6620_reg.h deleted file mode 100755 index 2d3bb9345c44..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt6620_reg.h +++ /dev/null @@ -1,326 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/mt6620_reg.h#1 $ -*/ - -/*! \file "mt6620_reg.h" - \brief The common register definition of mt6620 - - N/A -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mt6620_reg.h $ - * - * 01 31 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Print firmware ASSERT info at Android kernel log, driver side - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-12-10 16:44:18 GMT mtk02752 -** remove 5921 definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-09 22:56:32 GMT mtk01084 -** modify HW register definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-04 14:11:04 GMT mtk01084 -** modify default IER bits -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-10-29 19:52:32 GMT mtk01084 -** modify data struture -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-23 16:08:20 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-13 21:58:53 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-09-09 17:26:11 GMT mtk01084 -** add CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-18 20:59:57 GMT mtk01426 -** Update WHIER_DEFAULT value -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-07 16:57:36 GMT mtk01426 -** Update CHIP ID to 0x6620, and WHLPCR bit definition -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:34:57 GMT mtk01461 -** Add read WTSR and fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-24 09:46:52 GMT mtk01084 -** fix LINT error -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:32:24 GMT mtk01461 -** Define constants for TX PATH -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-18 20:54:10 GMT mtk01426 -** Add WHCR_MAX_HIF_RX_AGG_LEN_OFFSET definition -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:29 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _MT6620_REG_H -#define _MT6620_REG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -//1 MT6620 MCR Definition - -//2 Host Interface - -//4 CHIP ID Register -#define MCR_WCIR 0x0000 - -//4 HIF Low Power Control Register -#define MCR_WHLPCR 0x0004 -//#define MCR_WHLPCR_BYTE1 0x0005 - - -//4 Control Status Register -#define MCR_WSDIOCSR 0x0008 -#define MCR_WSPICSR 0x0008 - -//4 HIF Control Register -#define MCR_WHCR 0x000C - -//4 HIF Interrupt Status Register -#define MCR_WHISR 0x0010 - -//4 HIF Interrupt Enable Register -#define MCR_WHIER 0x0014 - -//4 Abnormal Status Register -#define MCR_WASR 0x0018 - -//4 WLAN Software Interrupt Control Register -#define MCR_WSICR 0x001C - -//4 WLAN TX Status Register -#define MCR_WTSR0 0x0020 - -//4 WLAN TX Status Register -#define MCR_WTSR1 0x0024 - -//4 WLAN TX Data Register 0 -#define MCR_WTDR0 0x0028 - -//4 WLAN TX Data Register 1 -#define MCR_WTDR1 0x002C - -//4 WLAN RX Data Register 0 -#define MCR_WRDR0 0x0030 - -//4 WLAN RX Data Register 1 -#define MCR_WRDR1 0x0034 - -//4 Host to Device Send Mailbox 0 Register -#define MCR_H2DSM0R 0x0038 - -//4 Host to Device Send Mailbox 1 Register -#define MCR_H2DSM1R 0x003c - -//4 Device to Host Receive Mailbox 0 Register -#define MCR_D2HRM0R 0x0040 - -//4 Device to Host Receive Mailbox 1 Register -#define MCR_D2HRM1R 0x0044 - -//4 WLAN RX Packet Length Register -#define MCR_WRPLR 0x0048 - - - - -//temp //#if CFG_SDIO_INTR_ENHANCE -typedef struct _ENHANCE_MODE_DATA_STRUCT_T { - UINT_32 u4WHISR; - union { - struct { - UINT_8 ucTQ0Cnt; - UINT_8 ucTQ1Cnt; - UINT_8 ucTQ2Cnt; - UINT_8 ucTQ3Cnt; - UINT_8 ucTQ4Cnt; - UINT_8 ucTQ5Cnt; - UINT_16 u2Rsrv; - } u; - UINT_32 au4WTSR[2]; - } rTxInfo; - union { - struct { - UINT_16 u2NumValidRx0Len; - UINT_16 u2NumValidRx1Len; - UINT_16 au2Rx0Len[16]; - UINT_16 au2Rx1Len[16]; - } u; - UINT_32 au4RxStatusRaw[17]; - } rRxInfo; - UINT_32 u4RcvMailbox0; - UINT_32 u4RcvMailbox1; -} ENHANCE_MODE_DATA_STRUCT_T, *P_ENHANCE_MODE_DATA_STRUCT_T; -// #endif /* ENHANCE_MODE_DATA_STRUCT_T */ - - -//2 Definition in each register -//3 WCIR 0x0000 -#define WCIR_WLAN_READY BIT(21) -#define WCIR_POR_INDICATOR BIT(20) -#define WCIR_REVISION_ID BITS(16,19) -#define WCIR_CHIP_ID BITS(0,15) - -#define MTK_CHIP_REV 0x00006620 -#define MTK_CHIP_MP_REVERSION_ID 0x0 - -//3 WHLPCR 0x0004 -#define WHLPCR_FW_OWN_REQ_CLR BIT(9) -#define WHLPCR_FW_OWN_REQ_SET BIT(8) -#define WHLPCR_IS_DRIVER_OWN BIT(8) -#define WHLPCR_INT_EN_CLR BIT(1) -#define WHLPCR_INT_EN_SET BIT(0) - -//3 WSDIOCSR 0x0008 -#define WSDIOCSR_SDIO_RE_INIT_EN BIT(0) - -//3 WSPICSR 0x0008 -#define WCSR_SPI_MODE_SEL BITS(3,4) -#define WCSR_SPI_ENDIAN_BIG BIT(2) -#define WCSR_SPI_INT_OUT_MODE BIT(1) -#define WCSR_SPI_DATA_OUT_MODE BIT(0) - -//3 WHCR 0x000C -#define WHCR_RX_ENHANCE_MODE_EN BIT(16) -#define WHCR_MAX_HIF_RX_LEN_NUM BITS(4,7) -#define WHCR_W_MAILBOX_RD_CLR_EN BIT(2) -#define WHCR_W_INT_CLR_CTRL BIT(1) -#define WHCR_MCU_DBG_EN BIT(0) -#define WHCR_OFFSET_MAX_HIF_RX_LEN_NUM 4 - -//3 WHISR 0x0010 -#define WHISR_D2H_SW_INT BITS(8,31) -#define WHISR_D2H_SW_ASSERT_INFO_INT BIT(31) -#define WHISR_FW_INT_INDICATOR BIT(7) -#define WHISR_FW_OWN_BACK_INT BIT(4) -#define WHISR_ABNORMAL_INT BIT(3) -#define WHISR_RX1_DONE_INT BIT(2) -#define WHISR_RX0_DONE_INT BIT(1) -#define WHISR_TX_DONE_INT BIT(0) - - -//3 WHIER 0x0014 -#define WHIER_D2H_SW_INT BITS(8,31) -#define WHIER_FW_INT_INDICATOR_EN BIT(7) -#define WHIER_FW_OWN_BACK_INT_EN BIT(4) -#define WHIER_ABNORMAL_INT_EN BIT(3) -#define WHIER_RX1_DONE_INT_EN BIT(2) -#define WHIER_RX0_DONE_INT_EN BIT(1) -#define WHIER_TX_DONE_INT_EN BIT(0) -#define WHIER_DEFAULT (WHIER_RX0_DONE_INT_EN | \ - WHIER_RX1_DONE_INT_EN | \ - WHIER_TX_DONE_INT_EN | \ - WHIER_ABNORMAL_INT_EN | \ - WHIER_D2H_SW_INT \ - ) - - -//3 WASR 0x0018 -#define WASR_FW_OWN_INVALID_ACCESS BIT(4) -#define WASR_RX1_UNDER_FLOW BIT(3) -#define WASR_RX0_UNDER_FLOW BIT(2) -#define WASR_TX1_OVER_FLOW BIT(1) -#define WASR_TX0_OVER_FLOW BIT(0) - - -//3 WSICR 0x001C -#define WSICR_H2D_SW_INT_SET BITS(16,31) - - -//3 WTSR0 0x0044 -#define WRPLR_RX1_PACKET_LENGTH BITS(16,31) -#define WRPLR_RX0_PACKET_LENGTH BITS(0,15) - -#endif /* _MT6620_REG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt6628_reg.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt6628_reg.h deleted file mode 100755 index 9dac42360baa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/mt6628_reg.h +++ /dev/null @@ -1,288 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/mt6628_reg.h#1 $ -*/ - -/*! \file "mt6628_reg.h" - \brief The common register definition of mt5931 - - N/A -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mt6628_reg.h $ - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 07 13 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add initial version for MT6628 driver support. - * -*/ - -#ifndef _MT6628_REG_H -#define _MT6628_REG_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -//1 MT6628 MCR Definition - -//2 Host Interface - -//4 CHIP ID Register -#define MCR_WCIR 0x0000 - -//4 HIF Low Power Control Register -#define MCR_WHLPCR 0x0004 - -//4 Control Status Register -#define MCR_WSDIOCSR 0x0008 -#define MCR_WSPICSR 0x0008 - -//4 HIF Control Register -#define MCR_WHCR 0x000C - -//4 HIF Interrupt Status Register -#define MCR_WHISR 0x0010 - -//4 HIF Interrupt Enable Register -#define MCR_WHIER 0x0014 - -//4 Abnormal Status Register -#define MCR_WASR 0x0018 - -//4 WLAN Software Interrupt Control Register -#define MCR_WSICR 0x001C - -//4 WLAN TX Status Register -#define MCR_WTSR0 0x0020 - -//4 WLAN TX Status Register -#define MCR_WTSR1 0x0024 - -//4 WLAN TX Data Register 0 -#define MCR_WTDR0 0x0028 - -//4 WLAN TX Data Register 1 -#define MCR_WTDR1 0x002C - -//4 WLAN RX Data Register 0 -#define MCR_WRDR0 0x0030 - -//4 WLAN RX Data Register 1 -#define MCR_WRDR1 0x0034 - -//4 Host to Device Send Mailbox 0 Register -#define MCR_H2DSM0R 0x0038 - -//4 Host to Device Send Mailbox 1 Register -#define MCR_H2DSM1R 0x003c - -//4 Device to Host Receive Mailbox 0 Register -#define MCR_D2HRM0R 0x0040 - -//4 Device to Host Receive Mailbox 1 Register -#define MCR_D2HRM1R 0x0044 - -//4 Device to Host Receive Mailbox 2 Register -#define MCR_D2HRM2R 0x0048 - -//4 WLAN RX Packet Length Register -#define MCR_WRPLR 0x0050 - - -//#if CFG_SDIO_INTR_ENHANCE -typedef struct _ENHANCE_MODE_DATA_STRUCT_T { - UINT_32 u4WHISR; - union { - struct { - UINT_8 ucTQ0Cnt; - UINT_8 ucTQ1Cnt; - UINT_8 ucTQ2Cnt; - UINT_8 ucTQ3Cnt; - UINT_8 ucTQ4Cnt; - UINT_8 ucTQ5Cnt; - UINT_16 u2Rsrv; - } u; - UINT_32 au4WTSR[2]; - } rTxInfo; - union { - struct { - UINT_16 u2NumValidRx0Len; - UINT_16 u2NumValidRx1Len; - UINT_16 au2Rx0Len[16]; - UINT_16 au2Rx1Len[16]; - } u; - UINT_32 au4RxStatusRaw[17]; - } rRxInfo; - UINT_32 u4RcvMailbox0; - UINT_32 u4RcvMailbox1; -} ENHANCE_MODE_DATA_STRUCT_T, *P_ENHANCE_MODE_DATA_STRUCT_T; -// #endif /* ENHANCE_MODE_DATA_STRUCT_T */ - - -//2 Definition in each register -//3 WCIR 0x0000 -#define WCIR_WLAN_READY BIT(21) -#define WCIR_POR_INDICATOR BIT(20) -#define WCIR_REVISION_ID BITS(16,19) -#define WCIR_CHIP_ID BITS(0,15) - -#define MTK_CHIP_REV 0x00006628 -#define MTK_CHIP_MP_REVERSION_ID 0x0 - -//3 WHLPCR 0x0004 -#define WHLPCR_FW_OWN_REQ_CLR BIT(9) -#define WHLPCR_FW_OWN_REQ_SET BIT(8) -#define WHLPCR_IS_DRIVER_OWN BIT(8) -#define WHLPCR_INT_EN_CLR BIT(1) -#define WHLPCR_INT_EN_SET BIT(0) - -//3 WSDIOCSR 0x0008 -#define WSDIOCSR_SDIO_RE_INIT_EN BIT(0) - -//3 WSPICSR 0x0008 -#define WCSR_SPI_MODE_SEL BITS(3,4) -#define WCSR_SPI_ENDIAN_BIG BIT(2) -#define WCSR_SPI_INT_OUT_MODE BIT(1) -#define WCSR_SPI_DATA_OUT_MODE BIT(0) - -//3 WHCR 0x000C -#define WHCR_RX_ENHANCE_MODE_EN BIT(16) -#define WHCR_MAX_HIF_RX_LEN_NUM BITS(4,7) -#define WHCR_W_MAILBOX_RD_CLR_EN BIT(2) -#define WHCR_W_INT_CLR_CTRL BIT(1) -#define WHCR_MCU_DBG_EN BIT(0) -#define WHCR_OFFSET_MAX_HIF_RX_LEN_NUM 4 - -//3 WHISR 0x0010 -#define WHISR_D2H_SW_INT BITS(8,31) -#define WHISR_D2H_SW_ASSERT_INFO_INT BIT(31) -#define WHISR_FW_OWN_BACK_INT BIT(4) -#define WHISR_ABNORMAL_INT BIT(3) -#define WHISR_RX1_DONE_INT BIT(2) -#define WHISR_RX0_DONE_INT BIT(1) -#define WHISR_TX_DONE_INT BIT(0) - - -//3 WHIER 0x0014 -#define WHIER_D2H_SW_INT BITS(8,31) -#define WHIER_FW_OWN_BACK_INT_EN BIT(4) -#define WHIER_ABNORMAL_INT_EN BIT(3) -#define WHIER_RX1_DONE_INT_EN BIT(2) -#define WHIER_RX0_DONE_INT_EN BIT(1) -#define WHIER_TX_DONE_INT_EN BIT(0) -#define WHIER_DEFAULT (WHIER_RX0_DONE_INT_EN | \ - WHIER_RX1_DONE_INT_EN | \ - WHIER_TX_DONE_INT_EN | \ - WHIER_ABNORMAL_INT_EN | \ - WHIER_D2H_SW_INT \ - ) - - -//3 WASR 0x0018 -#define WASR_FW_OWN_INVALID_ACCESS BIT(4) -#define WASR_RX1_UNDER_FLOW BIT(3) -#define WASR_RX0_UNDER_FLOW BIT(2) -#define WASR_TX1_OVER_FLOW BIT(1) -#define WASR_TX0_OVER_FLOW BIT(0) - - -//3 WSICR 0x001C -#define WSICR_H2D_SW_INT_SET BITS(16,31) - - -//3 WRPLR 0x0050 -#define WRPLR_RX1_PACKET_LENGTH BITS(16,31) -#define WRPLR_RX0_PACKET_LENGTH BITS(0,15) - - -#endif /* _MT6628_REG_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic.h deleted file mode 100755 index 1452b3cd922b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic.h +++ /dev/null @@ -1,764 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/nic.h#1 $ -*/ - -/*! \file "nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-10-13 21:58:58 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-24 21:12:55 GMT mtk01104 -** Add function prototype nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-19 18:32:54 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:32 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_H -#define _NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -struct _REG_ENTRY_T { - UINT_32 u4Offset; - UINT_32 u4Value; -}; - -struct _TABLE_ENTRY_T { - P_REG_ENTRY_T pu4TablePtr; - UINT_16 u2Size; -}; - -/*! INT status to event map */ -typedef struct _INT_EVENT_MAP_T { - UINT_32 u4Int; - UINT_32 u4Event; -} INT_EVENT_MAP_T, *P_INT_EVENT_MAP_T; - - -enum ENUM_INT_EVENT_T { - INT_EVENT_ABNORMAL, - INT_EVENT_SW_INT, - INT_EVENT_TX, - INT_EVENT_RX, - INT_EVENT_NUM -}; - -typedef enum _ENUM_IE_UPD_METHOD_T { - IE_UPD_METHOD_UPDATE_RANDOM, - IE_UPD_METHOD_UPDATE_ALL, - IE_UPD_METHOD_DELETE_ALL, -} ENUM_IE_UPD_METHOD_T, *P_ENUM_IE_UPD_METHOD_T; - - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in nic.c */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ); - -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ); - - -#if CFG_SDIO_INTR_ENHANCE -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ); -#endif - -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ); - -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(_HIF_SPI) -void -nicRestoreSpiDefMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data); - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data); - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ); - -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ); - -P_MSDU_INFO_T -nicGetPendingStaMMPDU( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ); - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ); - -/* Media State Change */ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -/* Utility function for channel number conversion */ -UINT_32 -nicChannelNum2Freq ( - IN UINT_32 u4ChannelNum - ); - -UINT_32 -nicFreq2ChannelNum ( - IN UINT_32 u4FreqInKHz - ); - -/* firmware command wrapper */ - /* NETWORK (WIFISYS) */ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - - /* BSS-INFO */ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* BSS-INFO Indication (PM) */ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - - /* Beacon Template Update */ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ); - -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ); - -/*----------------------------------------------------------------------------*/ -/* Calibration Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ); - -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ); - -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ); - - -/*----------------------------------------------------------------------------*/ -/* PHY configuration */ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* MGMT and System Service Control */ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ); - -/*----------------------------------------------------------------------------*/ -/* Scan Result Processing */ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ); - -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ); - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/* Workaround Control */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Fixed Rate Hacking */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 u2HtCapInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Write registers */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ); - -/*----------------------------------------------------------------------------*/ -/* Update auto rate */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ); - -/*----------------------------------------------------------------------------*/ -/* Enable/Disable Roaming */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ); - - -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* Link Quality Updating */ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ); - -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ); - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ); -#endif - -#endif /* _NIC_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic_rx.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic_rx.h deleted file mode 100755 index 464ddf7dc7f7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic_rx.h +++ /dev/null @@ -1,569 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/nic_rx.h#1 $ -*/ - -/*! \file "nic_rx.h" - \brief The declaration of the nic rx functions - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_rx.h $ - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Change prototype of API of adding P2P device to scan result. - * Additional IE buffer is saved. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 08 03 2010 cp.wu - * NULL - * newly added P2P API should be declared in header file. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * 2) firmware image length is now retrieved via NdisFileOpen - * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * 4) nicRxWaitResponse() revised - * * 5) another set of TQ counter default value is added for fw-download state - * * 6) Wi-Fi load address is now retrieved from registry too - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * and result is retrieved by get ATInfo instead - * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:49:09 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-12-09 14:02:37 GMT MTK02468 -** Added ucStaRecIdx in SW_RFB_T and HALF_SEQ_NO_COUNT definition (to replace HALF_SEQ_NO_CNOUT) -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-27 11:07:54 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-25 18:18:09 GMT mtk02752 -** modify nicRxAddScanResult() -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-24 22:42:22 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-24 19:57:06 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-16 21:43:04 GMT mtk02752 -** correct ENUM_RX_PKT_DESTINATION_T definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 15:28:25 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packet are queued by RX reordering buffer/forwarding path -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 15:05:01 GMT mtk02752 -** add eTC for SW_RFB_T and structure RX_MAILBOX -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-13 21:16:57 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-13 16:59:30 GMT mtk02752 -** add handler for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-13 13:45:50 GMT mtk02752 -** add port param for nicRxEnhanceReadBuffer() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-11 10:12:31 GMT mtk02752 -** nicSDIOReadIntStatus() always read sizeof(ENHANCE_MODE_DATA_STRUCT_T) for int response, thus the number should be set to 0(:=16) instead of 10 -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-10-29 19:53:32 GMT mtk01084 -** modify structure naming -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-23 16:08:23 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:01 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-20 12:23:33 GMT mtk01461 -** Add u4MaxEventBufferLen parameter to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-05-18 21:00:48 GMT mtk01426 -** Update SDIO_MAXIMUM_RX_STATUS value -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:36:15 GMT mtk01461 -** Remove unused define - SDIO_MAXIMUM_TX_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:17 GMT mtk01461 -** Add function for HIF_LOOPBACK_PRE_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:56:19 GMT mtk01426 -** Add to support CFG_HIF_LOOPBACK and CFG_SDIO_RX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:19:56 GMT mtk01426 -** Add nicRxWaitResponse function proto type -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:35 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_RX_H -#define _NIC_RX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_SEQ_NO 4095 -#define MAX_SEQ_NO_COUNT 4096 -#define HALF_SEQ_NO_CNOUT 2048 - -#define HALF_SEQ_NO_COUNT 2048 - -#define MT6620_FIXED_WIN_SIZE 64 -#define CFG_RX_MAX_BA_ENTRY 4 -#define CFG_RX_MAX_BA_TID_NUM 8 - -#define RX_STATUS_FLAG_MORE_PACKET BIT(30) -#define RX_STATUS_CHKSUM_MASK BITS(0,10) - -#define RX_RFB_LEN_FIELD_LEN 4 -#define RX_HEADER_OFFSET 2 - - -#if defined(_HIF_SDIO) && defined (WINDOWS_DDK) -/*! On XP, maximum Tx+Rx Statue <= 64-4(HISR)*/ - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#else - #define SDIO_MAXIMUM_RX_LEN_NUM 0 /*!< 0~15 (0: un-limited) */ -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_RX_STATISTIC_COUNTER_T { - RX_MPDU_TOTAL_COUNT = 0, - RX_SIZE_ERR_DROP_COUNT, - - RX_DATA_INDICATION_COUNT, - RX_DATA_RETURNED_COUNT, - RX_DATA_RETAINED_COUNT, - - RX_DROP_TOTAL_COUNT, - RX_TYPE_ERR_DROP_COUNT, - RX_CLASS_ERR_DROP_COUNT, - RX_DST_NULL_DROP_COUNT, - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - RX_CSUM_TCP_FAILED_COUNT, - RX_CSUM_UDP_FAILED_COUNT, - RX_CSUM_IP_FAILED_COUNT, - RX_CSUM_TCP_SUCCESS_COUNT, - RX_CSUM_UDP_SUCCESS_COUNT, - RX_CSUM_IP_SUCCESS_COUNT, - RX_CSUM_UNKNOWN_L4_PKT_COUNT, - RX_CSUM_UNKNOWN_L3_PKT_COUNT, - RX_IP_V6_PKT_CCOUNT, -#endif - RX_STATISTIC_COUNTER_NUM -} ENUM_RX_STATISTIC_COUNTER_T; - -typedef enum _ENUM_RX_PKT_DESTINATION_T { - RX_PKT_DESTINATION_HOST, /* to OS */ - RX_PKT_DESTINATION_FORWARD, /* to TX queue for forward, AP mode */ - RX_PKT_DESTINATION_HOST_WITH_FORWARD, /* to both TX and OS, AP mode broadcast packet */ - RX_PKT_DESTINATION_NULL, /* packet to be freed */ - RX_PKT_DESTINATION_NUM -} ENUM_RX_PKT_DESTINATION_T; - -struct _SW_RFB_T { - QUE_ENTRY_T rQueEntry; - PVOID pvPacket; /*!< ptr to rx Packet Descriptor */ - PUINT_8 pucRecvBuff; /*!< ptr to receive data buffer */ - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4HifRxHdrFlag; - PVOID pvHeader; - UINT_16 u2PacketLen; - UINT_16 u2HeaderLen; - UINT_16 u2SSN; - UINT_8 ucTid; - UINT_8 ucWlanIdx; - UINT_8 ucPacketType; - UINT_8 ucStaRecIdx; - - ENUM_CSUM_RESULT_T aeCSUM[CSUM_TYPE_NUM]; - ENUM_RX_PKT_DESTINATION_T eDst; - ENUM_TRAFFIC_CLASS_INDEX_T eTC; /* only valid when eDst == FORWARD */ -}; - -/*! RX configuration type structure */ -typedef struct _RX_CTRL_T { - UINT_32 u4RxCachedSize; - PUINT_8 pucRxCached; - QUE_T rFreeSwRfbList; - QUE_T rReceivedRfbList; - QUE_T rIndicatedRfbList; - -#if CFG_SDIO_RX_AGG - PUINT_8 pucRxCoalescingBufPtr; -#endif - - PVOID apvIndPacket[CFG_RX_MAX_PKT_NUM]; - PVOID apvRetainedPacket[CFG_RX_MAX_PKT_NUM]; - - UINT_8 ucNumIndPacket; - UINT_8 ucNumRetainedPacket; - UINT_64 au8Statistics[RX_STATISTIC_COUNTER_NUM]; /*!< RX Counters */ - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalRxAccessNum; - UINT_32 u4TotalRxPacketNum; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - UINT_32 u4QueuedCnt; - UINT_32 u4DequeuedCnt; -#endif - -#if CFG_RX_PKTS_DUMP - UINT_32 u4RxPktsDumpTypeMask; -#endif - -} RX_CTRL_T, *P_RX_CTRL_T; - -typedef struct _RX_MAILBOX_T { - UINT_32 u4RxMailbox[2]; /* for Device-to-Host Mailbox */ -} RX_MAILBOX_T, *P_RX_MAILBOX_T; - -typedef WLAN_STATUS (*PROCESS_RX_MGT_FUNCTION)(P_ADAPTER_T, P_SW_RFB_T); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define RX_INC_CNT(prRxCtrl, eCounter) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]++;} - -#define RX_ADD_CNT(prRxCtrl, eCounter, u8Amount) \ - {((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter] += (UINT_64)u8Amount;} - -#define RX_GET_CNT(prRxCtrl, eCounter) \ - (((P_RX_CTRL_T)prRxCtrl)->au8Statistics[eCounter]) - -#define RX_RESET_ALL_CNTS(prRxCtrl) \ - {kalMemZero(&prRxCtrl->au8Statistics[0], sizeof(prRxCtrl->au8Statistics));} - -#define RX_STATUS_TEST_MORE_FLAG(flag) \ - ((BOOL)((flag & RX_STATUS_FLAG_MORE_PACKET) ? TRUE : FALSE)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -#if defined(MT5931) -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ); - -#if !CFG_SDIO_INTR_ENHANCE -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#else -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - -#if CFG_SDIO_RX_AGG -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prRfb - ); - -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus - ); - -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ); - -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ); - -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ); - - -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -#endif /* _NIC_RX_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic_tx.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic_tx.h deleted file mode 100755 index a5d664724bff..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/nic_tx.h +++ /dev/null @@ -1,728 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/nic_tx.h#2 $ -*/ - -/*! \file nic_tx.h - \brief Functions that provide TX operation in NIC's point of view. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_tx.h $ - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 15 2010 yuche.tsai - * NULL - * Update SLT Descriptor number configure in driver. - * - * 11 16 2010 yarco.yang - * [WCXRP00000177] [MT5931 F/W] Performance tuning for 1st connection - * Update TX buffer count - * - * 11 03 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * 1) use 8 buffers for MT5931 which is equipped with less memory - * 2) modify MT5931 debug level to TRACE when download is successful - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 07 26 2010 cp.wu - * - * change TC4 initial value from 2 to 4. - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add flag on MSDU_INFO_T for indicating BIP frame and forceBasicRate - * 2) add packet type for indicating management frames - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Redistributed the initial TC resources for normal operation - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * 4) nicRxWaitResponse() revised - * * * 5) another set of TQ counter default value is added for fw-download state - * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * and result is retrieved by get ATInfo instead - * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:53:28 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-27 11:08:00 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-24 19:56:49 GMT mtk02752 -** remove redundant eTC -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-23 22:01:08 GMT mtk02468 -** Added MSDU_INFO fields for composing HIF TX header -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-17 22:40:51 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-11-17 17:35:05 GMT mtk02752 -** + nicTxMsduInfoList() for sending MsduInfoList -** + NIC_TX_BUFF_COUNT_TC[0~5] -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-11-17 11:07:00 GMT mtk02752 -** add nicTxAdjustTcq() API -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-11-16 22:28:30 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-11-16 21:44:50 GMT mtk02752 -** + nicTxReturnMsduInfo() -** + nicTxFillMsduInfo() -** + rFreeMsduInfoList field in TX_CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-11-16 18:00:43 GMT mtk02752 -** use P_PACKET_INFO_T for prPacket to avoid inventing another new structure for packet -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-11-16 15:28:49 GMT mtk02752 -** add ucQueuedPacketNum for indicating how many packets are queued by per STA/AC queue -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-16 10:52:01 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-14 23:39:24 GMT mtk02752 -** interface structure redefine -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-13 21:17:03 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-10-29 19:53:10 GMT mtk01084 -** remove strange code by Frog -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:59:04 GMT mtk01084 -** update for new HW architecture design -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-10-02 13:53:03 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-28 10:36:50 GMT mtk01461 -** Add declaration of nicTxReleaseResource() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-17 19:58:39 GMT mtk01461 -** Move CMD_INFO_T related define and function to cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:53:53 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:33:27 GMT mtk01461 -** Define constants for TX PATH and add nicTxPollingResource -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:09:32 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _NIC_TX_H -#define _NIC_TX_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NIC_TX_RESOURCE_POLLING_TIMEOUT 256 -#define NIC_TX_RESOURCE_POLLING_DELAY_MSEC 50 - -/* Maximum buffer count for individual HIF TCQ */ - -#if defined(MT6620) -#if CFG_SLT_SUPPORT - /* 20101215 mtk01725 Redistributed the initial TC resources for SLT operation */ - #define NIC_TX_BUFF_COUNT_TC0 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 16 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 0 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 0 // First connection: 0 -#else - /* 20100302 mtk02468 Redistributed the initial TC resources for normal operation */ - #define NIC_TX_BUFF_COUNT_TC0 6 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 8 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 8 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 2 // First connection: 0 -#endif -#elif defined(MT5931) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 14 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 -#elif defined(MT6628) - #define NIC_TX_BUFF_COUNT_TC0 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC1 20 // First connection: 32 - #define NIC_TX_BUFF_COUNT_TC2 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC3 1 // First connection: 0 - #define NIC_TX_BUFF_COUNT_TC4 4 // First connection: 2 - #define NIC_TX_BUFF_COUNT_TC5 1 // First connection: 0 - -#endif - -#define NIC_TX_BUFF_SUM (NIC_TX_BUFF_COUNT_TC0 + \ - NIC_TX_BUFF_COUNT_TC1 + \ - NIC_TX_BUFF_COUNT_TC2 + \ - NIC_TX_BUFF_COUNT_TC3 + \ - NIC_TX_BUFF_COUNT_TC4 + \ - NIC_TX_BUFF_COUNT_TC5) -#if CFG_ENABLE_FW_DOWNLOAD - - #define NIC_TX_INIT_BUFF_COUNT_TC0 8 - #define NIC_TX_INIT_BUFF_COUNT_TC1 0 - #define NIC_TX_INIT_BUFF_COUNT_TC2 0 - #define NIC_TX_INIT_BUFF_COUNT_TC3 0 - #define NIC_TX_INIT_BUFF_COUNT_TC4 0 - #define NIC_TX_INIT_BUFF_COUNT_TC5 0 - - #define NIC_TX_INIT_BUFF_SUM (NIC_TX_INIT_BUFF_COUNT_TC0 + \ - NIC_TX_INIT_BUFF_COUNT_TC1 + \ - NIC_TX_INIT_BUFF_COUNT_TC2 + \ - NIC_TX_INIT_BUFF_COUNT_TC3 + \ - NIC_TX_INIT_BUFF_COUNT_TC4 + \ - NIC_TX_INIT_BUFF_COUNT_TC5) - -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -//3 /* Session for TX QUEUES */ -/* The definition in this ENUM is used to categorize packet's Traffic Class according - * to the their TID(User Priority). - * In order to achieve QoS goal, a particular TC should not block the process of - * another packet with different TC. - * In current design we will have 5 categories(TCs) of SW resource. - */ -typedef enum _ENUM_TRAFFIC_CLASS_INDEX_T { - TC0_INDEX = 0, /* HIF TX0: AC0 packets */ - TC1_INDEX, /* HIF TX0: AC1 packets & non-QoS packets */ - TC2_INDEX, /* HIF TX0: AC2 packets */ - TC3_INDEX, /* HIF TX0: AC3 packets */ - TC4_INDEX, /* HIF TX1: Command packets or 802.1x packets */ - TC5_INDEX, /* HIF TX0: BMCAST packets */ - TC_NUM /* Maximum number of Traffic Classes. */ -} ENUM_TRAFFIC_CLASS_INDEX_T; - -typedef enum _ENUM_TX_STATISTIC_COUNTER_T { - TX_MPDU_TOTAL_COUNT = 0, - TX_INACTIVE_BSS_DROP, - TX_INACTIVE_STA_DROP, - TX_FORWARD_OVERFLOW_DROP, - TX_AP_BORADCAST_DROP, - TX_STATISTIC_COUNTER_NUM -} ENUM_TX_STATISTIC_COUNTER_T; - - -typedef struct _TX_TCQ_STATUS_T { - UINT_8 aucFreeBufferCount[TC_NUM]; - UINT_8 aucMaxNumOfBuffer[TC_NUM]; -} TX_TCQ_STATUS_T, *P_TX_TCQ_STATUS_T; - -typedef struct _TX_TCQ_ADJUST_T { - INT_8 acVariation[TC_NUM]; -} TX_TCQ_ADJUST_T, *P_TX_TCQ_ADJUST_T; - -typedef struct _TX_CTRL_T { - UINT_32 u4TxCachedSize; - PUINT_8 pucTxCached; - -/* Elements below is classified according to TC (Traffic Class) value. */ - - TX_TCQ_STATUS_T rTc; - - PUINT_8 pucTxCoalescingBufPtr; - - QUE_T rFreeMsduInfoList; - - /* Management Frame Tracking */ - /* number of management frames to be sent */ - INT_32 i4TxMgmtPendingNum; - - /* to tracking management frames need TX done callback */ - QUE_T rTxMgmtTxingQueue; - -#if CFG_HIF_STATISTICS - UINT_32 u4TotalTxAccessNum; - UINT_32 u4TotalTxPacketNum; -#endif - UINT_32 au4Statistics[TX_STATISTIC_COUNTER_NUM]; - - /* Number to track forwarding frames */ - INT_32 i4PendingFwdFrameCount; - -} TX_CTRL_T, *P_TX_CTRL_T; - -typedef enum _ENUM_TX_PACKET_SRC_T { - TX_PACKET_OS, - TX_PACKET_OS_OID, - TX_PACKET_FORWARDING, - TX_PACKET_MGMT, - TX_PACKET_NUM -} ENUM_TX_PACKET_SRC_T; - -typedef enum _ENUM_HIF_TX_PACKET_TYPE_T { - HIF_TX_PACKET_TYPE_DATA = 0, - HIF_TX_PACKET_TYPE_COMMAND, - HIF_TX_PACKET_TYPE_HIF_LB, - HIF_TX_PACKET_TYPE_MGMT -} ENUM_HIF_TX_PACKET_TYPE_T, *P_ENUM_HIF_TX_PACKET_TYPE_T; - -typedef enum _ENUM_TX_RESULT_CODE_T { - TX_RESULT_SUCCESS = 0, - TX_RESULT_LIFE_TIMEOUT, - TX_RESULT_RTS_ERROR, - TX_RESULT_MPDU_ERROR, - TX_RESULT_AGING_TIMEOUT, - TX_RESULT_FLUSHED, - TX_RESULT_DROPPED_IN_DRIVER = 32, - TX_RESULT_NUM -} ENUM_TX_RESULT_CODE_T, *P_ENUM_TX_RESULT_CODE_T; - -/* TX Call Back Function */ -typedef WLAN_STATUS (*PFN_TX_DONE_HANDLER) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE -typedef struct _PKT_PROFILE_T { - BOOLEAN fgIsValid; - BOOLEAN fgIsPrinted; - UINT_16 u2IpSn; - UINT_16 u2RtpSn; - OS_SYSTIME rHardXmitArrivalTimestamp; - OS_SYSTIME rEnqueueTimestamp; - OS_SYSTIME rDequeueTimestamp; - OS_SYSTIME rHifTxDoneTimestamp; -}PKT_PROFILE_T, *P_PKT_PROFILE_T; -#endif - -/* TX transactions could be divided into 4 kinds: - * - * 1) 802.1X / Bluetooth-over-Wi-Fi Security Frames - * [CMD_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - * - * 2) MMPDU - * [CMD_INFO_T] - [prPacket] - [MSDU_INFO_T] - [prPacket] - direct buffer for frame body - * - * 3) Command Packets - * [CMD_INFO_T] - [pucInfoBuffer] - direct buffer for content of command packet - * - * 4) Normal data frame - * [MSDU_INFO_T] - [prPacket] - in skb or NDIS_PACKET form - */ - - -/* PS_FORWARDING_TYPE_NON_PS means that the receiving STA is in Active Mode -* from the perspective of host driver (maybe not synchronized with FW --> SN is needed) -*/ - -struct _MSDU_INFO_T { - QUE_ENTRY_T rQueEntry; - P_NATIVE_PACKET prPacket; - - ENUM_TX_PACKET_SRC_T eSrc; /* specify OS/FORWARD packet */ - UINT_8 ucUserPriority; - - /* For composing HIF TX header */ - UINT_8 ucTC; /* Traffic Class: 0~4 (HIF TX0), 5 (HIF TX1) */ - UINT_8 ucPacketType; /* 0: Data, 1: Command, 2: HIF Loopback 3: Management Frame */ - UINT_8 ucStaRecIndex; - UINT_8 ucNetworkType; /* See ENUM_NETWORK_TYPE_T */ - UINT_8 ucFormatID; /* 0: MAUI, Linux, Windows NDIS 5.1 */ - BOOLEAN fgIs802_1x; /* TRUE: 802.1x frame */ - BOOLEAN fgIs802_11; /* TRUE: 802.11 header is present */ - UINT_16 u2PalLLH; /* PAL Logical Link Header (for BOW network) */ - UINT_16 u2AclSN; /* ACL Sequence Number (for BOW network) */ - UINT_8 ucPsForwardingType; /* See ENUM_PS_FORWARDING_TYPE_T */ - UINT_8 ucPsSessionID; /* PS Session ID specified by the FW for the STA */ - BOOLEAN fgIsBurstEnd; /* TRUE means this is the last packet of the burst for (STA, TID) */ - BOOLEAN fgIsBIP; /* Management Frame Protection */ - BOOLEAN fgIsBasicRate; /* Force Basic Rate Transmission */ - - /* flattened from PACKET_INFO_T */ - UINT_8 ucMacHeaderLength; - UINT_8 ucLlcLength; /* w/o EtherType */ - UINT_16 u2FrameLength; - UINT_8 aucEthDestAddr[MAC_ADDR_LEN]; /* Ethernet Destination Address */ - - /* for TX done tracking */ - UINT_8 ucTxSeqNum; - PFN_TX_DONE_HANDLER pfTxDoneHandler; - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - PKT_PROFILE_T rPktProfile; -#endif -}; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define TX_INC_CNT(prTxCtrl, eCounter) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]++;} - -#define TX_ADD_CNT(prTxCtrl, eCounter, u8Amount) \ - {((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter] += (UINT_32)u8Amount;} - -#define TX_GET_CNT(prTxCtrl, eCounter) \ - (((P_TX_CTRL_T)prTxCtrl)->au4Statistics[eCounter]) - -#define TX_RESET_ALL_CNTS(prTxCtrl) \ - {kalMemZero(&prTxCtrl->au4Statistics[0], sizeof(prTxCtrl->au4Statistics));} - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE -#define PRINT_PKT_PROFILE(_pkt_profile, _note) \ - { \ - if(!(_pkt_profile)->fgIsPrinted) { \ - kalPrint("X[%lu] E[%lu] D[%lu] HD[%lu] IP[%d] RTP[%d] %s\n", \ - (UINT_32)((_pkt_profile)->rHardXmitArrivalTimestamp), \ - (UINT_32)((_pkt_profile)->rEnqueueTimestamp), \ - (UINT_32)((_pkt_profile)->rDequeueTimestamp), \ - (UINT_32)((_pkt_profile)->rHifTxDoneTimestamp), \ - (UINT_16)((_pkt_profile)->u2IpSn), \ - (UINT_16)((_pkt_profile)->u2RtpSn), \ - (_note)); \ - (_pkt_profile)->fgIsPrinted = TRUE; \ - } \ - } - -#define CHK_PROFILES_DELTA(_pkt1, _pkt2, _delta) \ - (CHECK_FOR_TIMEOUT((_pkt1)->rHardXmitArrivalTimestamp, (_pkt2)->rHardXmitArrivalTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt1)->rEnqueueTimestamp, (_pkt2)->rEnqueueTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt1)->rDequeueTimestamp, (_pkt2)->rDequeueTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt1)->rHifTxDoneTimestamp, (_pkt2)->rHifTxDoneTimestamp, (_delta))) - -#define CHK_PROFILE_DELTA(_pkt, _delta) \ - (CHECK_FOR_TIMEOUT((_pkt)->rEnqueueTimestamp, (_pkt)->rHardXmitArrivalTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt)->rDequeueTimestamp, (_pkt)->rEnqueueTimestamp, (_delta)) || \ - CHECK_FOR_TIMEOUT((_pkt)->rHifTxDoneTimestamp, (_pkt)->rDequeueTimestamp, (_delta))) -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ); - -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ); - -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ); - -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicProcessTxInterrupt ( - IN P_ADAPTER_T prAdapter - ); - -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prNdisPacket - ); - -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_ENABLE_FW_DOWNLOAD -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ); - -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ); -#endif - -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_TX_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p.h deleted file mode 100755 index 3864f00c2bec..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p.h +++ /dev/null @@ -1,235 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p.h#3 $ -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: p2p.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add parameter to control: - * 1) auto group owner - * 2) P2P-PS parameter (CTWindow, NoA descriptors) - * - * 05 18 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * correct WPS Device Password ID definition. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * -*/ - -#ifndef _P2P_H -#define _P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// refer to 'Config Methods' in WPS -#define WPS_CONFIG_USBA 0x0001 -#define WPS_CONFIG_ETHERNET 0x0002 -#define WPS_CONFIG_LABEL 0x0004 -#define WPS_CONFIG_DISPLAY 0x0008 -#define WPS_CONFIG_EXT_NFC 0x0010 -#define WPS_CONFIG_INT_NFC 0x0020 -#define WPS_CONFIG_NFC 0x0040 -#define WPS_CONFIG_PBC 0x0080 -#define WPS_CONFIG_KEYPAD 0x0100 - -// refer to 'Device Password ID' in WPS -#define WPS_DEV_PASSWORD_ID_PIN 0x0000 -#define WPS_DEV_PASSWORD_ID_USER 0x0001 -#define WPS_DEV_PASSWORD_ID_MACHINE 0x0002 -#define WPS_DEV_PASSWORD_ID_REKEY 0x0003 -#define WPS_DEV_PASSWORD_ID_PUSHBUTTON 0x0004 -#define WPS_DEV_PASSWORD_ID_REGISTRAR 0x0005 - - -#define P2P_DEVICE_TYPE_NUM 2 -#define P2P_DEVICE_NAME_LENGTH 32 -#define P2P_NETWORK_NUM 8 -#define P2P_MEMBER_NUM 8 - -#define P2P_WILDCARD_SSID "DIRECT-" - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -struct _P2P_INFO_T { - UINT_32 u4DeviceNum; - EVENT_P2P_DEV_DISCOVER_RESULT_T arP2pDiscoverResult[CFG_MAX_NUM_BSS_LIST]; - PUINT_8 pucCurrIePtr; - UINT_8 aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]; /* A common pool for IE of all scan results. */ -}; - -typedef enum { - ENUM_P2P_PEER_GROUP, - ENUM_P2P_PEER_DEVICE, - ENUM_P2P_PEER_NUM -} ENUM_P2P_PEER_TYPE, *P_ENUM_P2P_PEER_TYPE; - -typedef struct _P2P_DEVICE_INFO { - UINT_8 aucDevAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 aucIfAddr[PARAM_MAC_ADDR_LEN]; - UINT_8 ucDevCapabilityBitmap; - INT_32 i4ConfigMethod; - UINT_8 aucPrimaryDeviceType[8]; - UINT_8 aucSecondaryDeviceType[8]; - UINT_8 aucDeviceName[P2P_DEVICE_NAME_LENGTH]; -} P2P_DEVICE_INFO, *P_P2P_DEVICE_INFO; - -typedef struct _P2P_GROUP_INFO { - PARAM_SSID_T rGroupID; - P2P_DEVICE_INFO rGroupOwnerInfo; - UINT_8 ucMemberNum; - P2P_DEVICE_INFO arMemberInfo[P2P_MEMBER_NUM]; -} P2P_GROUP_INFO, *P_P2P_GROUP_INFO; - -typedef struct _P2P_NETWORK_INFO { - ENUM_P2P_PEER_TYPE eNodeType; - - union { - P2P_GROUP_INFO rGroupInfo; - P2P_DEVICE_INFO rDeviceInfo; - } node; - -} P2P_NETWORK_INFO, *P_P2P_NETWORK_INFO; - -typedef struct _P2P_NETWORK_LIST { - UINT_8 ucNetworkNum; - P2P_NETWORK_INFO rP2PNetworkInfo[P2P_NETWORK_NUM]; -} P2P_NETWORK_LIST, *P_P2P_NETWORK_LIST; - -typedef struct _P2P_DISCONNECT_INFO { - UINT_8 ucRole; - UINT_8 ucRsv[3]; -} P2P_DISCONNECT_INFO, *P_P2P_DISCONNECT_INFO; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_cmd_buf.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_cmd_buf.h deleted file mode 100755 index 3bfc62fa52ca..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_cmd_buf.h +++ /dev/null @@ -1,133 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "p2p_cmd_buf.h" - \brief In this file we define the structure for Command Packet. - - In this file we define the structure for Command Packet and the control unit - of MGMT Memory Pool. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: p2p_cmd_buf.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks -*/ - -#ifndef _P2P_CMD_BUF_H -#define _P2P_CMD_BUF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryP2PCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - BOOLEAN fgIsOid, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - OUT PVOID pvSetQueryBuffer, - IN UINT_32 u4SetQueryBufferLen - ); - - - - -#endif /* _P2P_CMD_BUF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_mac.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_mac.h deleted file mode 100755 index b803fc98652f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_mac.h +++ /dev/null @@ -1,263 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_mac.h#2 $ -*/ - -/*! \file "p2p_mac.h" - \brief Brief description. - - Detail description. -*/ - - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _P2P_MAC_H -#define _P2P_MAC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define ACTION_PUBLIC_WIFI_DIRECT 9 -#define ACTION_GAS_INITIAL_REQUEST 10 -#define ACTION_GAS_INITIAL_RESPONSE 11 -#define ACTION_GAS_COMEBACK_REQUEST 12 -#define ACTION_GAS_COMEBACK_RESPONSE 13 - - -/* P2P 4.2.8.1 - P2P Public Action Frame Type. */ -#define P2P_PUBLIC_ACTION_GO_NEGO_REQ 0 -#define P2P_PUBLIC_ACTION_GO_NEGO_RSP 1 -#define P2P_PUBLIC_ACTION_GO_NEGO_CFM 2 -#define P2P_PUBLIC_ACTION_INVITATION_REQ 3 -#define P2P_PUBLIC_ACTION_INVITATION_RSP 4 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_REQ 5 -#define P2P_PUBLIC_ACTION_DEV_DISCOVER_RSP 6 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_REQ 7 -#define P2P_PUBLIC_ACTION_PROV_DISCOVERY_RSP 8 - -/* P2P 4.2.9.1 - P2P Action Frame Type */ -#define P2P_ACTION_NOTICE_OF_ABSENCE 0 -#define P2P_ACTION_P2P_PRESENCE_REQ 1 -#define P2P_ACTION_P2P_PRESENCE_RSP 2 -#define P2P_ACTION_GO_DISCOVER_REQ 3 - -#define P2P_PUBLIC_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+8) -#define P2P_ACTION_FRAME_LEN (WLAN_MAC_MGMT_HEADER_LEN+7) - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/* P2P 4.2.8.2 P2P Public Action Frame Format */ -typedef struct _P2P_PUBLIC_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 aucOui[3]; /* 0x50, 0x6F, 0x9A */ - UINT_8 ucOuiType; /* 0x09 */ - UINT_8 ucOuiSubtype; /* GO Nego Req/Rsp/Cfm, P2P Invittion Req/Rsp, Device Discoverability Req/Rsp */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* P2P IE, WSC IE. */ -} __KAL_ATTRIB_PACKED__ P2P_PUBLIC_ACTION_FRAME_T, *P_P2P_PUBLIC_ACTION_FRAME_T; - - -/* P2P 4.2.9.1 - General Action Frame Format. */ -typedef struct _P2P_ACTION_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Action Frame Body */ - UINT_8 ucCategory; // 0x7F - UINT_8 aucOui[3]; // 0x50, 0x6F, 0x9A - UINT_8 ucOuiType; // 0x09 - UINT_8 ucOuiSubtype; // - UINT_8 ucDialogToken; - UINT_8 aucInfoElem[1]; -} __KAL_ATTRIB_PACKED__ P2P_ACTION_FRAME_T, *P_P2P_ACTION_FRAME_T; - -/* P2P C.1 GAS Public Action Initial Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_REQUEST_FRAME_T; - -/* P2P C.2 GAS Public Action Initial Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Initial Response. */ - UINT_16 u2ComebackDelay; /* Initial Response. */ /* In unit of TU. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_INITIAL_RESPONSE_FRAME_T; - - -/* P2P C.3-1 GAS Public Action Comeback Request Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_REQUEST_FRAME_T; - -/* P2P C.3-2 GAS Public Action Comeback Response Frame Format */ -typedef struct _GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T { - /* MAC header */ - UINT_16 u2FrameCtrl; /* Frame Control */ - UINT_16 u2Duration; /* Duration */ - UINT_8 aucDestAddr[MAC_ADDR_LEN]; /* DA */ - UINT_8 aucSrcAddr[MAC_ADDR_LEN]; /* SA */ - UINT_8 aucBSSID[MAC_ADDR_LEN]; /* BSSID */ - UINT_16 u2SeqCtrl; /* Sequence Control */ - /* P2P Public Action Frame Body */ - UINT_8 ucCategory; /* Category, 0x04 */ - UINT_8 ucAction; /* Action Value, 0x09 */ - UINT_8 ucDialogToken; /* Dialog Token. */ - UINT_16 u2StatusCode; /* Comeback Response. */ - UINT_8 ucFragmentID; /*Comeback Response. */ - UINT_16 u2ComebackDelay; /* Comeback Response. */ - UINT_8 aucInfoElem[1]; /* Advertisement IE. */ -} __KAL_ATTRIB_PACKED__ GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T, *P_GAS_PUBLIC_ACTION_COMEBACK_RESPONSE_FRAME_T; - - - - -typedef struct _P2P_SD_VENDER_SPECIFIC_CONTENT_T { - /* Service Discovery Vendor-specific Content. */ - UINT_8 ucOuiSubtype; // 0x09 - UINT_16 u2ServiceUpdateIndicator; - UINT_8 aucServiceTLV[1]; -} __KAL_ATTRIB_PACKED__ P2P_SD_VENDER_SPECIFIC_CONTENT_T, *P_P2P_SD_VENDER_SPECIFIC_CONTENT_T; - - -typedef struct _P2P_SERVICE_REQUEST_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 aucQueryData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_REQUEST_TLV_T, *P_P2P_SERVICE_REQUEST_TLV_T; - - - -typedef struct _P2P_SERVICE_RESPONSE_TLV_T { - UINT_16 u2Length; - UINT_8 ucServiceProtocolType; - UINT_8 ucServiceTransID; - UINT_8 ucStatusCode; - UINT_8 aucResponseData[1]; -} __KAL_ATTRIB_PACKED__ P2P_SERVICE_RESPONSE_TLV_T, *P_P2P_SERVICE_RESPONSE_TLV_T; - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_nic.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_nic.h deleted file mode 100755 index 412c7b3989c8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_nic.h +++ /dev/null @@ -1,114 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic.h#1 $ -*/ - -/*! \file "p2p_nic.h" - \brief The declaration of nic functions - - Detail description. -*/ - - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _P2P_NIC_H -#define _P2P_NIC_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -VOID -nicP2pMediaStateChange( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ); - -VOID -nicRxAddP2pDevice( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_nic_cmd_event.h deleted file mode 100755 index e165b5b70c96..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/p2p_nic_cmd_event.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/nic/p2p_nic_cmd_event.h#1 $ -*/ - -/*! \file p2p_nic_cmd_event.h - \brief -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -#ifndef _P2P_NIC_CMD_EVENT_H -#define _P2P_NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -typedef struct _EVENT_P2P_DEV_DISCOVER_RESULT_T { -// UINT_8 aucCommunicateAddr[MAC_ADDR_LEN]; // Deprecated. - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[2]; - UINT_16 u2NameLength; - UINT_8 aucName[32]; - PUINT_8 pucIeBuf; - UINT_16 u2IELength; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - // TODO: Service Information or PasswordID valid? -} EVENT_P2P_DEV_DISCOVER_RESULT_T, *P_EVENT_P2P_DEV_DISCOVER_RESULT_T; - -#endif \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/que_mgt.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/que_mgt.h deleted file mode 100755 index a9d5c0b8ac5b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/que_mgt.h +++ /dev/null @@ -1,1190 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/que_mgt.h#1 $ -*/ - -/*! \file "que_mgt.h" - \brief TX/RX queues management header file - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: que_mgt.h $ - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 06 14 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Change the parameter for WMM pass. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 19 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * By default enabling dynamic STA_REC activation and decactivation - * - * 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:04:53 GMT MTK02468 -** Added RX buffer reordering function prototypes -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-02 22:08:44 GMT MTK02468 -** Added macro QM_INIT_STA_REC for initialize a STA_REC -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 21:58:43 GMT mtk02468 -** Initial version -** -*/ - -#ifndef _QUE_MGT_H -#define _QUE_MGT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* Queue Manager Features */ -#define QM_BURST_END_INFO_ENABLED 1 /* 1: Indicate the last TX packet to the FW for each burst */ -#define QM_FORWARDING_FAIRNESS 1 /* 1: To fairly share TX resource among active STAs */ -#define QM_ADAPTIVE_TC_RESOURCE_CTRL 1 /* 1: To adaptively adjust resource for each TC */ -#define QM_PRINT_TC_RESOURCE_CTRL 0 /* 1: To print TC resource adjustment results */ -#define QM_RX_WIN_SSN_AUTO_ADVANCING 1 /* 1: If pkt with SSN is missing, auto advance the RX reordering window */ -#define QM_RX_INIT_FALL_BEHIND_PASS 1 /* 1: Indicate the packets falling behind to OS before the frame with SSN is received */ -/* Parameters */ -#define QM_INIT_TIME_TO_UPDATE_QUE_LEN 60 /* p: Update queue lengths when p TX packets are enqueued */ -#define QM_INIT_TIME_TO_ADJUST_TC_RSC 3 /* s: Adjust the TC resource every s updates of queue lengths */ -#define QM_QUE_LEN_MOVING_AVE_FACTOR 3 /* Factor for Que Len averaging */ - -#define QM_MIN_RESERVED_TC0_RESOURCE 1 -#define QM_MIN_RESERVED_TC1_RESOURCE 1 -#define QM_MIN_RESERVED_TC2_RESOURCE 1 -#define QM_MIN_RESERVED_TC3_RESOURCE 1 -#define QM_MIN_RESERVED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_MIN_RESERVED_TC5_RESOURCE 1 - -#if defined(MT6620) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 9 -#define QM_GUARANTEED_TC3_RESOURCE 11 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - -#elif defined(MT5931) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 4 -#define QM_GUARANTEED_TC3_RESOURCE 4 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 2 - -#elif defined(MT6628) - -#define QM_GUARANTEED_TC0_RESOURCE 4 -#define QM_GUARANTEED_TC1_RESOURCE 4 -#define QM_GUARANTEED_TC2_RESOURCE 6 -#define QM_GUARANTEED_TC3_RESOURCE 6 -#define QM_GUARANTEED_TC4_RESOURCE 2 /* Resource for TC4 is not adjustable */ -#define QM_GUARANTEED_TC5_RESOURCE 4 - - -#else -#error -#endif - - - -#define QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY 0 - -#define QM_TOTAL_TC_RESOURCE (\ - NIC_TX_BUFF_COUNT_TC0 + NIC_TX_BUFF_COUNT_TC1 +\ - NIC_TX_BUFF_COUNT_TC2 + NIC_TX_BUFF_COUNT_TC3 +\ - NIC_TX_BUFF_COUNT_TC5) -#define QM_AVERAGE_TC_RESOURCE 6 - -/* Note: QM_INITIAL_RESIDUAL_TC_RESOURCE shall not be less than 0 */ -#define QM_INITIAL_RESIDUAL_TC_RESOURCE (QM_TOTAL_TC_RESOURCE - \ - (QM_GUARANTEED_TC0_RESOURCE +\ - QM_GUARANTEED_TC1_RESOURCE +\ - QM_GUARANTEED_TC2_RESOURCE +\ - QM_GUARANTEED_TC3_RESOURCE +\ - QM_GUARANTEED_TC5_RESOURCE \ - )) - -/* Hard-coded network type for Phase 3: NETWORK_TYPE_AIS/P2P/BOW */ -#define QM_OPERATING_NETWORK_TYPE NETWORK_TYPE_AIS - -#define QM_TEST_MODE 0 -#define QM_TEST_TRIGGER_TX_COUNT 50 -#define QM_TEST_STA_REC_DETERMINATION 0 -#define QM_TEST_STA_REC_DEACTIVATION 0 -#define QM_TEST_FAIR_FORWARDING 0 - -#define QM_DEBUG_COUNTER 0 - -/* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */ -/* Per-Type Queues: [0] BMCAST */ -#define NUM_OF_PER_STA_TX_QUEUES 5 -#define NUM_OF_PER_TYPE_TX_QUEUES 1 - -/* These two constants are also used for FW to verify the STA_REC index */ -#define STA_REC_INDEX_BMCAST 0xFF -#define STA_REC_INDEX_NOT_FOUND 0xFE - -/* TX Queue Index */ -#define TX_QUEUE_INDEX_BMCAST 0 -#define TX_QUEUE_INDEX_NO_STA_REC 0 -#define TX_QUEUE_INDEX_AC0 0 -#define TX_QUEUE_INDEX_AC1 1 -#define TX_QUEUE_INDEX_AC2 2 -#define TX_QUEUE_INDEX_AC3 3 -#define TX_QUEUE_INDEX_802_1X 4 -#define TX_QUEUE_INDEX_NON_QOS 1 - - -//1 WMM-related -/* WMM FLAGS */ -#define WMM_FLAG_SUPPORT_WMM BIT(0) -#define WMM_FLAG_SUPPORT_WMMSA BIT(1) -#define WMM_FLAG_AC_PARAM_PRESENT BIT(2) -#define WMM_FLAG_SUPPORT_UAPSD BIT(3) - -/* WMM Admission Control Mandatory FLAGS */ -#define ACM_FLAG_ADM_NOT_REQUIRED 0 -#define ACM_FLAG_ADM_GRANTED BIT(0) -#define ACM_FLAG_ADM_REQUIRED BIT(1) - -/* WMM Power Saving FLAGS */ -#define AC_FLAG_TRIGGER_ENABLED BIT(1) -#define AC_FLAG_DELIVERY_ENABLED BIT(2) - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/* WMM-2.2.2 WMM Parameter Element */ -#define ELEM_MAX_LEN_WMM_PARAM 24 - -/* WMM-2.2.1 WMM QoS Info field */ -#define WMM_QOS_INFO_PARAM_SET_CNT BITS(0,3) /* Sent by AP */ -#define WMM_QOS_INFO_UAPSD BIT(7) - -#define WMM_QOS_INFO_VO_UAPSD BIT(0) /* Sent by non-AP STA */ -#define WMM_QOS_INFO_VI_UAPSD BIT(1) -#define WMM_QOS_INFO_BK_UAPSD BIT(2) -#define WMM_QOS_INFO_BE_UAPSD BIT(3) -#define WMM_QOS_INFO_MAX_SP_LEN_MASK BITS(5,6) -#define WMM_QOS_INFO_MAX_SP_ALL 0 -#define WMM_QOS_INFO_MAX_SP_2 BIT(5) -#define WMM_QOS_INFO_MAX_SP_4 BIT(6) -#define WMM_QOS_INFO_MAX_SP_6 BITS(5,6) - -/* -- definitions for Max SP length field */ -#define WMM_MAX_SP_LENGTH_ALL 0 -#define WMM_MAX_SP_LENGTH_2 2 -#define WMM_MAX_SP_LENGTH_4 4 -#define WMM_MAX_SP_LENGTH_6 6 - - -/* WMM-2.2.2 WMM ACI/AIFSN field */ -/* -- subfields in the ACI/AIFSN field */ -#define WMM_ACIAIFSN_AIFSN BITS(0,3) -#define WMM_ACIAIFSN_ACM BIT(4) -#define WMM_ACIAIFSN_ACI BITS(5,6) -#define WMM_ACIAIFSN_ACI_OFFSET 5 - -/* -- definitions for ACI field */ -#define WMM_ACI_AC_BE 0 -#define WMM_ACI_AC_BK BIT(5) -#define WMM_ACI_AC_VI BIT(6) -#define WMM_ACI_AC_VO BITS(5,6) - -#define WMM_ACI(_AC) (_AC << WMM_ACIAIFSN_ACI_OFFSET) - -/* -- definitions for ECWmin/ECWmax field */ -#define WMM_ECW_WMIN_MASK BITS(0,3) -#define WMM_ECW_WMAX_MASK BITS(4,7) -#define WMM_ECW_WMAX_OFFSET 4 - -#define TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME 0 /* Unit: 64 us */ - -#define QM_RX_BA_ENTRY_MISS_TIMEOUT_MS (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -enum { - QM_DBG_CNT_00=0, - QM_DBG_CNT_01, - QM_DBG_CNT_02, - QM_DBG_CNT_03, - QM_DBG_CNT_04, - QM_DBG_CNT_05, - QM_DBG_CNT_06, - QM_DBG_CNT_07, - QM_DBG_CNT_08, - QM_DBG_CNT_09, - QM_DBG_CNT_10, - QM_DBG_CNT_11, - QM_DBG_CNT_12, - QM_DBG_CNT_13, - QM_DBG_CNT_14, - QM_DBG_CNT_15, - QM_DBG_CNT_16, - QM_DBG_CNT_17, - QM_DBG_CNT_18, - QM_DBG_CNT_19, - QM_DBG_CNT_20, - QM_DBG_CNT_21, - QM_DBG_CNT_22, - QM_DBG_CNT_23, - QM_DBG_CNT_24, - QM_DBG_CNT_25, - QM_DBG_CNT_26, - QM_DBG_CNT_27, - QM_DBG_CNT_28, - QM_DBG_CNT_29, - QM_DBG_CNT_30, - QM_DBG_CNT_31, - QM_DBG_CNT_NUM -}; - - - - -/* Used for MAC TX */ -typedef enum _ENUM_MAC_TX_QUEUE_INDEX_T { - MAC_TX_QUEUE_AC0_INDEX = 0, - MAC_TX_QUEUE_AC1_INDEX, - MAC_TX_QUEUE_AC2_INDEX, - MAC_TX_QUEUE_AC3_INDEX, - MAC_TX_QUEUE_AC4_INDEX, - MAC_TX_QUEUE_AC5_INDEX, - MAC_TX_QUEUE_AC6_INDEX, - MAC_TX_QUEUE_BCN_INDEX, - MAC_TX_QUEUE_BMC_INDEX, - MAC_TX_QUEUE_NUM -} ENUM_MAC_TX_QUEUE_INDEX_T; - -typedef struct _RX_BA_ENTRY_T { - BOOLEAN fgIsValid; - QUE_T rReOrderQue; - UINT_16 u2WinStart; - UINT_16 u2WinEnd; - UINT_16 u2WinSize; - - /* For identifying the RX BA agreement */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; - - BOOLEAN fgIsWaitingForPktWithSsn; - - //UINT_8 ucTxBufferSize; - //BOOL fgIsAcConstrain; - //BOOL fgIsBaEnabled; -} RX_BA_ENTRY_T, *P_RX_BA_ENTRY_T; - -/* The mailbox message (could be used for Host-To-Device or Device-To-Host Mailbox) */ -typedef struct _MAILBOX_MSG_T{ - UINT_32 u4Msg[2]; /* [0]: D2HRM0R or H2DRM0R, [1]: D2HRM1R or H2DRM1R */ -} MAILBOX_MSG_T, *P_MAILBOX_MSG_T; - - -/* Used for adaptively adjusting TC resources */ -typedef struct _TC_RESOURCE_CTRL_T { - /* TC0, TC1, TC2, TC3, TC5 */ - UINT_32 au4AverageQueLen[TC_NUM - 1]; -} TC_RESOURCE_CTRL_T, *P_TC_RESOURCE_CTRL_T; - -typedef struct _QUE_MGT_T{ /* Queue Management Control Info */ - - /* Per-Type Queues: [0] BMCAST or UNKNOWN-STA packets */ - QUE_T arTxQueue[NUM_OF_PER_TYPE_TX_QUEUES]; - -#if 0 - /* For TX Scheduling */ - UINT_8 arRemainingTxOppt[NUM_OF_PER_STA_TX_QUEUES]; - UINT_8 arCurrentTxStaIndex[NUM_OF_PER_STA_TX_QUEUES]; - -#endif - - /* Reordering Queue Parameters */ - RX_BA_ENTRY_T arRxBaTable[CFG_NUM_OF_RX_BA_AGREEMENTS]; - - /* Current number of activated RX BA agreements <= CFG_NUM_OF_RX_BA_AGREEMENTS */ - UINT_8 ucRxBaCount; - -#if QM_TEST_MODE - UINT_32 u4PktCount; - P_ADAPTER_T prAdapter; - -#if QM_TEST_FAIR_FORWARDING - UINT_32 u4CurrentStaRecIndexToEnqueue; -#endif - -#endif - - -#if QM_FORWARDING_FAIRNESS - /* The current TX count for a STA with respect to a TC index */ - UINT_32 au4ForwardCount[NUM_OF_PER_STA_TX_QUEUES]; - - /* The current serving STA with respect to a TC index */ - UINT_32 au4HeadStaRecIndex [NUM_OF_PER_STA_TX_QUEUES]; -#endif - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 au4AverageQueLen[TC_NUM]; - UINT_32 au4CurrentTcResource[TC_NUM]; - UINT_32 au4MinReservedTcResource[TC_NUM]; /* The minimum amount of resource no matter busy or idle */ - UINT_32 au4GuaranteedTcResource[TC_NUM]; /* The minimum amount of resource when extremely busy */ - - UINT_32 u4TimeToAdjustTcResource; - UINT_32 u4TimeToUpdateQueLen; - - /* Set to TRUE if the last TC adjustment has not been completely applied (i.e., waiting more TX-Done events - to align the TC quotas to the TC resource assignment) */ - BOOLEAN fgTcResourcePostAnnealing; - -#endif - -#if QM_DEBUG_COUNTER - UINT_32 au4QmDebugCounters[QM_DBG_CNT_NUM]; -#endif - - - - -} QUE_MGT_T, *P_QUE_MGT_T; - - - -typedef struct _EVENT_RX_ADDBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - - /* Fields that are present in the received ADDBA_REQ */ - UINT_8 ucDialogToken; /* Dialog Token chosen by the sender */ - UINT_16 u2BAParameterSet; /* BA policy, TID, buffer size */ - UINT_16 u2BATimeoutValue; - UINT_16 u2BAStartSeqCtrl; /* SSN */ - -} EVENT_RX_ADDBA_T, *P_EVENT_RX_ADDBA_T; - -typedef struct _EVENT_RX_DELBA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Fields not present in the received ADDBA_REQ */ - UINT_8 ucStaRecIdx; - UINT_8 ucTid; -} EVENT_RX_DELBA_T, *P_EVENT_RX_DELBA_T; - - -typedef struct _EVENT_BSS_ABSENCE_PRESENCE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucNetTypeIdx; - BOOLEAN fgIsAbsent; - UINT_8 ucBssFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_BSS_ABSENCE_PRESENCE_T, *P_EVENT_BSS_ABSENCE_PRESENCE_T; - - -typedef struct _EVENT_STA_CHANGE_PS_MODE_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - BOOLEAN fgIsInPs; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; -} EVENT_STA_CHANGE_PS_MODE_T, *P_EVENT_STA_CHANGE_PS_MODE_T; - -/* The free quota is used by PS only now */ -/* The event may be used by per STA flow conttrol in general */ -typedef struct _EVENT_STA_UPDATE_FREE_QUOTA_T { - /* Event header */ - UINT_16 u2Length; - UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */ - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - /* Event Body */ - UINT_8 ucStaRecIdx; - UINT_8 ucUpdateMode; - UINT_8 ucFreeQuota; - UINT_8 aucReserved[1]; -} EVENT_STA_UPDATE_FREE_QUOTA_T, *P_EVENT_STA_UPDATE_FREE_QUOTA_T; - - - - -/* WMM-2.2.1 WMM Information Element */ -typedef struct _IE_WMM_INFO_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucDummy[3]; /* Dummy for pack */ -} IE_WMM_INFO_T, *P_IE_WMM_INFO_T; - -/* WMM-2.2.2 WMM Parameter Element */ -typedef struct _IE_WMM_PARAM_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - - /* IE Body */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - - /* WMM IE Body */ - UINT_8 ucQosInfo; /* QoS Info field */ - UINT_8 ucReserved; - - /* AC Parameters */ - UINT_8 ucAciAifsn_BE; - UINT_8 ucEcw_BE; - UINT_8 aucTxopLimit_BE[2]; - - UINT_8 ucAciAifsn_BG; - UINT_8 ucEcw_BG; - UINT_8 aucTxopLimit_BG[2]; - - UINT_8 ucAciAifsn_VI; - UINT_8 ucEcw_VI; - UINT_8 aucTxopLimit_VI[2]; - - UINT_8 ucAciAifsn_VO; - UINT_8 ucEcw_VO; - UINT_8 aucTxopLimit_VO[2]; - -} IE_WMM_PARAM_T, *P_IE_WMM_PARAM_T; - -typedef struct _IE_WMM_TSPEC_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - /* WMM TSPEC body */ - UINT_8 aucTsInfo[3]; /* TS Info */ - UINT_8 aucTspecBodyPart[1]; /* Note: Utilize PARAM_QOS_TSPEC to fill (memory copy) */ -} IE_WMM_TSPEC_T, *P_IE_WMM_TSPEC_T; - -typedef struct _IE_WMM_HDR_T { - UINT_8 ucId; /* Element ID */ - UINT_8 ucLength; /* Length */ - UINT_8 aucOui[3]; /* OUI */ - UINT_8 ucOuiType; /* OUI Type */ - UINT_8 ucOuiSubtype; /* OUI Subtype */ - UINT_8 ucVersion; /* Version */ - UINT_8 aucBody[1]; /* IE body */ -} IE_WMM_HDR_T, *P_IE_WMM_HDR_T; - - -typedef struct _AC_QUE_PARMS_T{ - UINT_16 u2CWmin; /*!< CWmin */ - UINT_16 u2CWmax; /*!< CWmax */ - UINT_16 u2TxopLimit; /*!< TXOP limit */ - UINT_16 u2Aifsn; /*!< AIFSN */ - UINT_8 ucGuradTime; /*!< GuardTime for STOP/FLUSH. */ - BOOLEAN fgIsACMSet; -} AC_QUE_PARMS_T, *P_AC_QUE_PARMS_T; - -/* WMM ACI (AC index) */ -typedef enum _ENUM_WMM_ACI_T { - WMM_AC_BE_INDEX = 0, - WMM_AC_BK_INDEX, - WMM_AC_VI_INDEX, - WMM_AC_VO_INDEX, - WMM_AC_INDEX_NUM -} ENUM_WMM_ACI_T, *P_ENUM_WMM_ACI_T; - - -/* Used for CMD Queue Operation */ -typedef enum _ENUM_FRAME_ACTION_T { - FRAME_ACTION_DROP_PKT = 0, - FRAME_ACTION_QUEUE_PKT, - FRAME_ACTION_TX_PKT, - FRAME_ACTION_NUM -} ENUM_FRAME_ACTION_T; - - -typedef enum _ENUM_FRAME_TYPE_IN_CMD_Q_T { - FRAME_TYPE_802_1X = 0, - FRAME_TYPE_MMPDU, - FRAME_TYEP_NUM -} ENUM_FRAME_TYPE_IN_CMD_Q_T; - -typedef enum _ENUM_FREE_QUOTA_MODET_T { - FREE_QUOTA_UPDATE_MODE_INIT = 0, - FREE_QUOTA_UPDATE_MODE_OVERWRITE, - FREE_QUOTA_UPDATE_MODE_INCREASE, - FREE_QUOTA_UPDATE_MODE_DECREASE -} ENUM_FREE_QUOTA_MODET_T, *P_ENUM_FREE_QUOTA_MODET_T; - - - -typedef struct _CMD_UPDATE_WMM_PARMS_T { - AC_QUE_PARMS_T arACQueParms[AC_NUM]; - UINT_8 ucNetTypeIndex; - UINT_8 fgIsQBSS; - UINT_8 aucReserved[2]; -} CMD_UPDATE_WMM_PARMS_T, *P_CMD_UPDATE_WMM_PARMS_T; - - -typedef struct _CMD_TX_AMPDU_T { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_TX_AMPDU_T, *P_CMD_TX_AMPDU_T; - - -typedef struct _CMD_ADDBA_REJECT { - BOOLEAN fgEnable; - UINT_8 aucReserved[3]; -} CMD_ADDBA_REJECT_T, *P_CMD_ADDBA_REJECT_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define QM_TX_SET_NEXT_MSDU_INFO(_prMsduInfoPreceding, _prMsduInfoNext) \ - ((((_prMsduInfoPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prMsduInfoNext)) - -#define QM_TX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - - -#define QM_TX_GET_NEXT_MSDU_INFO(_prMsduInfo) \ - ((P_MSDU_INFO_T)(((_prMsduInfo)->rQueEntry).prNext)) - -#define QM_RX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \ - ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext)) - -#define QM_RX_GET_NEXT_SW_RFB(_prSwRfb) \ - ((P_SW_RFB_T)(((_prSwRfb)->rQueEntry).prNext)) - -#if 0 -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - ((((_ucIndex) != STA_REC_INDEX_BMCAST) && ((_ucIndex)!= STA_REC_INDEX_NOT_FOUND)) ?\ - &(_prAdapter->arStaRec[_ucIndex]): NULL) -#endif - -#define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \ - cnmGetStaRecByIndex(_prAdapter,_ucIndex) - - -#define QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET(\ - _prMsduInfo,\ - _ucTC,\ - _ucPacketType,\ - _ucFormatID,\ - _fgIs802_1x,\ - _fgIs802_11,\ - _u2PalLLH,\ - _u2AclSN,\ - _ucPsForwardingType,\ - _ucPsSessionID\ - ) \ -{\ - ASSERT(_prMsduInfo);\ - (_prMsduInfo)->ucTC = (_ucTC);\ - (_prMsduInfo)->ucPacketType = (_ucPacketType);\ - (_prMsduInfo)->ucFormatID = (_ucFormatID);\ - (_prMsduInfo)->fgIs802_1x = (_fgIs802_1x);\ - (_prMsduInfo)->fgIs802_11 = (_fgIs802_11);\ - (_prMsduInfo)->u2PalLLH = (_u2PalLLH);\ - (_prMsduInfo)->u2AclSN = (_u2AclSN);\ - (_prMsduInfo)->ucPsForwardingType = (_ucPsForwardingType);\ - (_prMsduInfo)->ucPsSessionID = (_ucPsSessionID);\ - (_prMsduInfo)->fgIsBurstEnd = (FALSE);\ -} - -#define QM_INIT_STA_REC(\ - _prStaRec,\ - _fgIsValid,\ - _fgIsQoS,\ - _pucMacAddr\ - )\ -{\ - ASSERT(_prStaRec);\ - (_prStaRec)->fgIsValid = (_fgIsValid);\ - (_prStaRec)->fgIsQoS = (_fgIsQoS);\ - (_prStaRec)->fgIsInPS = FALSE; \ - (_prStaRec)->ucPsSessionID = 0xFF;\ - COPY_MAC_ADDR((_prStaRec)->aucMacAddr,(_pucMacAddr));\ -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -#define QM_GET_TX_QUEUE_LEN(_prAdapter, _u4QueIdx) ((_prAdapter->rQM.au4AverageQueLen[(_u4QueIdx)] >> QM_QUE_LEN_MOVING_AVE_FACTOR)) -#endif - - -#define WMM_IE_OUI_TYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiType) -#define WMM_IE_OUI_SUBTYPE(fp) (((P_IE_WMM_HDR_T)(fp))->ucOuiSubtype) -#define WMM_IE_OUI(fp) (((P_IE_WMM_HDR_T)(fp))->aucOui) - -#if QM_DEBUG_COUNTER -#define QM_DBG_CNT_INC(_prQM, _index) { (_prQM)->au4QmDebugCounters[(_index)]++; } -#else -#define QM_DBG_CNT_INC(_prQM, _index) {} -#endif - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Queue Management and STA_REC Initialization */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ); - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - - -/*----------------------------------------------------------------------------*/ -/* TX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ); - -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ); - - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ); - -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ - -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ); - -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ); - - -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ); - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ); - -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid - ); - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ); - - -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ); - - -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ); - -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ); - -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ); - - -/* Utility function: for deciding STA-REC index */ -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -); - -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ); - -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ); - - -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ); - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUE_MGT_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/wlan_def.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/wlan_def.h deleted file mode 100755 index 085691cbfac5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic/wlan_def.h +++ /dev/null @@ -1,1052 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/wlan_def.h#1 $ -*/ - -/*! \file "wlan_def.h" - \brief This file includes the basic definition of WLAN - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wlan_def.h $ - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 wh.su - * [WCXRP00000806] [MT6620 Wi-Fi][Driver] Move the WPA/RSN IE and WAPI IE structure to mac.h and let the sw structure not align at byte - * Move the WAPI/RSN IE to mac.h and SW structure not align to byte, - * Notice needed update P2P.ko. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 17 2011 yuche.tsai - * NULL - * Resize the Secondary Device Type array when WiFi Direct is enabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Add new station type MACRO. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 11 2010 kevin.huang - * [WCXRP00000068] [MT6620 Wi-Fi][Driver][FW] Fix STA RECORD sync issue and remove unused code - * Update ENUM_STA_ROLE_INDEX_T by using a fixed base value - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 14 2010 chinghwa.yu - * NULL - * Update OP_MODE_BOW and include bow_fsm.h. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * Change P2P Descriptor List to a pointer and allocate it dynamically to avoid structure corrupt by BssDescriptor free. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Add a pointer in BSS Descriptor for P2P Descriptor. - * - * 08 11 2010 yuche.tsai - * NULL - * Add an Interface in BSS Descriptor. - * - * 08 05 2010 yuche.tsai - * NULL - * Modify data structure for P2P Scan result. - * - * 07 26 2010 yuche.tsai - * - * Add an operation mode for P2P device. - * - * 07 23 2010 cp.wu - * - * P2P/RSN/WAPI IEs need to be declared with compact structure. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Add P2P present boolean flag in BSS & Pre-BSS descriptor. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * move bss related data types to wlan_def.h to avoid recursive dependency. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:40 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_DEF_H -#define _WLAN_DEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* disconnect reason */ -#define DISCONNECT_REASON_CODE_RESERVED 0 -#define DISCONNECT_REASON_CODE_RADIO_LOST 1 -#define DISCONNECT_REASON_CODE_DEAUTHENTICATED 2 -#define DISCONNECT_REASON_CODE_DISASSOCIATED 3 -#define DISCONNECT_REASON_CODE_NEW_CONNECTION 4 - -/* The rate definitions */ -#define TX_MODE_CCK 0x00 -#define TX_MODE_OFDM 0x40 -#define TX_MODE_HT_MM 0x80 -#define TX_MODE_HT_GF 0xC0 - -#define RATE_CCK_SHORT_PREAMBLE 0x10 -#define RATE_OFDM 0x20 - -#define PHY_RATE_1M 0x0 -#define PHY_RATE_2M 0x1 -#define PHY_RATE_5_5M 0x2 -#define PHY_RATE_11M 0x3 -#define PHY_RATE_6M 0xB -#define PHY_RATE_9M 0xF -#define PHY_RATE_12M 0xA -#define PHY_RATE_18M 0xE -#define PHY_RATE_24M 0x9 -#define PHY_RATE_36M 0xD -#define PHY_RATE_48M 0x8 -#define PHY_RATE_54M 0xC -#define PHY_RATE_MCS0 0x0 -#define PHY_RATE_MCS1 0x1 -#define PHY_RATE_MCS2 0x2 -#define PHY_RATE_MCS3 0x3 -#define PHY_RATE_MCS4 0x4 -#define PHY_RATE_MCS5 0x5 -#define PHY_RATE_MCS6 0x6 -#define PHY_RATE_MCS7 0x7 -#define PHY_RATE_MCS32 0x20 - -#define RATE_CCK_1M_LONG (TX_MODE_CCK | PHY_RATE_1M) -#define RATE_CCK_2M_LONG (TX_MODE_CCK | PHY_RATE_2M) -#define RATE_CCK_5_5M_LONG (TX_MODE_CCK | PHY_RATE_5_5M) -#define RATE_CCK_11M_LONG (TX_MODE_CCK | PHY_RATE_11M) -#define RATE_CCK_2M_SHORT (TX_MODE_CCK | PHY_RATE_2M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_5_5M_SHORT (TX_MODE_CCK | PHY_RATE_5_5M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_CCK_11M_SHORT (TX_MODE_CCK | PHY_RATE_11M | RATE_CCK_SHORT_PREAMBLE) -#define RATE_OFDM_6M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_6M) -#define RATE_OFDM_9M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_9M) -#define RATE_OFDM_12M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_12M) -#define RATE_OFDM_18M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_18M) -#define RATE_OFDM_24M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_24M) -#define RATE_OFDM_36M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_36M) -#define RATE_OFDM_48M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_48M) -#define RATE_OFDM_54M (TX_MODE_OFDM | RATE_OFDM | PHY_RATE_54M) - -#define RATE_MM_MCS_0 (TX_MODE_HT_MM | PHY_RATE_MCS0) -#define RATE_MM_MCS_1 (TX_MODE_HT_MM | PHY_RATE_MCS1) -#define RATE_MM_MCS_2 (TX_MODE_HT_MM | PHY_RATE_MCS2) -#define RATE_MM_MCS_3 (TX_MODE_HT_MM | PHY_RATE_MCS3) -#define RATE_MM_MCS_4 (TX_MODE_HT_MM | PHY_RATE_MCS4) -#define RATE_MM_MCS_5 (TX_MODE_HT_MM | PHY_RATE_MCS5) -#define RATE_MM_MCS_6 (TX_MODE_HT_MM | PHY_RATE_MCS6) -#define RATE_MM_MCS_7 (TX_MODE_HT_MM | PHY_RATE_MCS7) -#define RATE_MM_MCS_32 (TX_MODE_HT_MM | PHY_RATE_MCS32) - -#define RATE_GF_MCS_0 (TX_MODE_HT_GF | PHY_RATE_MCS0) -#define RATE_GF_MCS_1 (TX_MODE_HT_GF | PHY_RATE_MCS1) -#define RATE_GF_MCS_2 (TX_MODE_HT_GF | PHY_RATE_MCS2) -#define RATE_GF_MCS_3 (TX_MODE_HT_GF | PHY_RATE_MCS3) -#define RATE_GF_MCS_4 (TX_MODE_HT_GF | PHY_RATE_MCS4) -#define RATE_GF_MCS_5 (TX_MODE_HT_GF | PHY_RATE_MCS5) -#define RATE_GF_MCS_6 (TX_MODE_HT_GF | PHY_RATE_MCS6) -#define RATE_GF_MCS_7 (TX_MODE_HT_GF | PHY_RATE_MCS7) -#define RATE_GF_MCS_32 (TX_MODE_HT_GF | PHY_RATE_MCS32) - -#define RATE_TX_MODE_MASK BITS(6,7) -#define RATE_TX_MODE_OFFSET 6 -#define RATE_CODE_GET_TX_MODE(_ucRateCode) ((_ucRateCode & RATE_TX_MODE_MASK) >> RATE_TX_MODE_OFFSET) -#define RATE_PHY_RATE_MASK BITS(0,5) -#define RATE_PHY_RATE_OFFSET 0 -#define RATE_CODE_GET_PHY_RATE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_MASK) >> RATE_PHY_RATE_OFFSET) -#define RATE_PHY_RATE_SHORT_PREAMBLE BIT(4) -#define RATE_CODE_IS_SHORT_PREAMBLE(_ucRateCode) ((_ucRateCode & RATE_PHY_RATE_SHORT_PREAMBLE)?TRUE:FALSE) - - -#define CHNL_LIST_SZ_2G 14 -#define CHNL_LIST_SZ_5G 14 - -/*! CNM(STA_RECORD_T) related definition */ -#define CFG_STA_REC_NUM 20 - -/* PHY TYPE bit definitions */ -#define PHY_TYPE_BIT_HR_DSSS BIT(PHY_TYPE_HR_DSSS_INDEX) /* HR/DSSS PHY (clause 18) */ -#define PHY_TYPE_BIT_ERP BIT(PHY_TYPE_ERP_INDEX) /* ERP PHY (clause 19) */ -#define PHY_TYPE_BIT_OFDM BIT(PHY_TYPE_OFDM_INDEX) /* OFDM 5 GHz PHY (clause 17) */ -#define PHY_TYPE_BIT_HT BIT(PHY_TYPE_HT_INDEX) /* HT PHY (clause 20) */ - - -/* PHY TYPE set definitions */ -#define PHY_TYPE_SET_802_11ABGN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11BGN (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11GN (PHY_TYPE_BIT_ERP | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11AN (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HT) - -#define PHY_TYPE_SET_802_11ABG (PHY_TYPE_BIT_OFDM | \ - PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11BG (PHY_TYPE_BIT_HR_DSSS | \ - PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11A (PHY_TYPE_BIT_OFDM) - -#define PHY_TYPE_SET_802_11G (PHY_TYPE_BIT_ERP) - -#define PHY_TYPE_SET_802_11B (PHY_TYPE_BIT_HR_DSSS) - -#define PHY_TYPE_SET_802_11N (PHY_TYPE_BIT_HT) - - -/* Rate set bit definitions */ -#define RATE_SET_BIT_1M BIT(RATE_1M_INDEX) /* Bit 0: 1M */ -#define RATE_SET_BIT_2M BIT(RATE_2M_INDEX) /* Bit 1: 2M */ -#define RATE_SET_BIT_5_5M BIT(RATE_5_5M_INDEX) /* Bit 2: 5.5M */ -#define RATE_SET_BIT_11M BIT(RATE_11M_INDEX) /* Bit 3: 11M */ -#define RATE_SET_BIT_22M BIT(RATE_22M_INDEX) /* Bit 4: 22M */ -#define RATE_SET_BIT_33M BIT(RATE_33M_INDEX) /* Bit 5: 33M */ -#define RATE_SET_BIT_6M BIT(RATE_6M_INDEX) /* Bit 6: 6M */ -#define RATE_SET_BIT_9M BIT(RATE_9M_INDEX) /* Bit 7: 9M */ -#define RATE_SET_BIT_12M BIT(RATE_12M_INDEX) /* Bit 8: 12M */ -#define RATE_SET_BIT_18M BIT(RATE_18M_INDEX) /* Bit 9: 18M */ -#define RATE_SET_BIT_24M BIT(RATE_24M_INDEX) /* Bit 10: 24M */ -#define RATE_SET_BIT_36M BIT(RATE_36M_INDEX) /* Bit 11: 36M */ -#define RATE_SET_BIT_48M BIT(RATE_48M_INDEX) /* Bit 12: 48M */ -#define RATE_SET_BIT_54M BIT(RATE_54M_INDEX) /* Bit 13: 54M */ -#define RATE_SET_BIT_HT_PHY BIT(RATE_HT_PHY_INDEX) /* Bit 14: BSS Selector */ - - -/* Rate set definitions */ -#define RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_18M | \ - RATE_SET_BIT_24M | \ - RATE_SET_BIT_36M | \ - RATE_SET_BIT_48M | \ - RATE_SET_BIT_54M) - -#define RATE_SET_HT (RATE_SET_ERP) -//#define RATE_SET_HT (RATE_SET_ERP | RATE_SET_BIT_HT_PHY) /* NOTE(Kevin): TBD */ - - -#define RATE_SET_ALL_ABG RATE_SET_ERP - -#define BASIC_RATE_SET_HR_DSSS (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M) - -#define BASIC_RATE_SET_HR_DSSS_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M) - -#define BASIC_RATE_SET_ERP (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_OFDM (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define BASIC_RATE_SET_ERP_P2P (RATE_SET_BIT_6M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_100 RATE_SET_ALL_ABG - -#define INITIAL_RATE_SET_RCPI_80 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M | \ - RATE_SET_BIT_9M | \ - RATE_SET_BIT_12M | \ - RATE_SET_BIT_24M) - -#define INITIAL_RATE_SET_RCPI_60 (RATE_SET_BIT_1M | \ - RATE_SET_BIT_2M | \ - RATE_SET_BIT_5_5M | \ - RATE_SET_BIT_11M | \ - RATE_SET_BIT_6M) - -#define INITIAL_RATE_SET(_rcpi) (INITIAL_RATE_SET_ ## _rcpi) - -#define RCPI_100 100 /* -60 dBm */ -#define RCPI_80 80 /* -70 dBm */ -#define RCPI_60 60 /* -80 dBm */ - - -/* The number of RCPI records used to calculate their average value */ -#define MAX_NUM_RCPI_RECORDS 10 - -/* The number of RCPI records used to calculate their average value */ -#define NO_RCPI_RECORDS -128 -#define MAX_RCPI_DBM 0 -#define MIN_RCPI_DBM -100 - - -#define MAC_TX_RESERVED_FIELD 0 /* NOTE(Kevin): Should defined in tx.h */ - -#define MAX_ASSOC_ID (CFG_STA_REC_NUM) /* Available AID: 1 ~ 20(STA_REC_NUM) */ - - -#define MAX_DEAUTH_INFO_COUNT 4 /* NOTE(Kevin): Used in auth.c */ -#define MIN_DEAUTH_INTERVAL_MSEC 500 /* The minimum interval if continuously send Deauth Frame */ - -/* Authentication Type */ -#define AUTH_TYPE_OPEN_SYSTEM BIT(AUTH_ALGORITHM_NUM_OPEN_SYSTEM) -#define AUTH_TYPE_SHARED_KEY BIT(AUTH_ALGORITHM_NUM_SHARED_KEY) -#define AUTH_TYPE_FAST_BSS_TRANSITION BIT(AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION) - -/* Authentication Retry Limit */ -#define TX_AUTH_ASSOCI_RETRY_LIMIT 6 -#define TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING 1 - -/* WMM-2.2.1 WMM Information Element */ -#define ELEM_MAX_LEN_WMM_INFO 7 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_16 PHY_TYPE, *P_PHY_TYPE; -typedef UINT_8 RCPI, *P_RCPI; -typedef UINT_8 ALC_VAL, *P_ALC_VAL; - -typedef enum _ENUM_HW_BSSID_T { - BSSID_0 = 0, - BSSID_1, - BSSID_NUM -} ENUM_HW_BSSID_T; - -typedef enum _ENUM_HW_MAC_ADDR_T { - MAC_ADDR_0 = 0, - MAC_ADDR_1, - MAC_ADDR_NUM -} ENUM_HW_MAC_ADDR_T; - -typedef enum _ENUM_HW_OP_MODE_T { - HW_OP_MODE_STA = 0, - HW_OP_MODE_AP, - HW_OP_MODE_ADHOC, - HW_OP_MODE_NUM -} ENUM_HW_OP_MODE_T; - -typedef enum _ENUM_TSF_T { - ENUM_LOCAL_TSF_0, - ENUM_LOCAL_TSF_1, - ENUM_LOCAL_TSF_NUM -} ENUM_LOCAL_TSF_T, *P_ENUM_LOCAL_TSF_T; - -typedef enum _HAL_TS_HW_UPDATE_MODE { - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME, - HAL_TSF_HW_UPDATE_BY_TICK_ONLY, - HAL_TSF_HW_UPDATE_BY_RECEIVED_FRAME_ONLY, - HAL_TSF_HW_UPDATE_BY_TICK_AND_RECEIVED_FRAME_AD_HOC -} HAL_TSF_HW_UPDATE_MODE; - - -typedef enum _ENUM_AC_T { - AC0 = 0, - AC1, - AC2, - AC3, - AC_NUM -} ENUM_AC_T, *P_ENUM_AC_T; - - -/* The Type of Network been activated */ -typedef enum _ENUM_NETWORK_TYPE_INDEX_T { - NETWORK_TYPE_AIS_INDEX = 0, - NETWORK_TYPE_P2P_INDEX, - NETWORK_TYPE_BOW_INDEX, - NETWORK_TYPE_INDEX_NUM -} ENUM_NETWORK_TYPE_INDEX_T; - - -/* The Type of STA Type. */ -typedef enum _ENUM_STA_TYPE_INDEX_T { - STA_TYPE_LEGACY_INDEX = 0, - STA_TYPE_P2P_INDEX, - STA_TYPE_BOW_INDEX, - STA_TYPE_INDEX_NUM -} -ENUM_STA_TYPE_INDEX_T; - -#define STA_ROLE_BASE_INDEX 4 - -typedef enum _ENUM_STA_ROLE_INDEX_T { - STA_ROLE_ADHOC_INDEX = STA_ROLE_BASE_INDEX, //4 - STA_ROLE_CLIENT_INDEX, - STA_ROLE_AP_INDEX, - STA_ROLE_DLS_INDEX -} ENUM_STA_ROLE_INDEX_T; - -/* The Power State of a specific Network */ -typedef enum _ENUM_PWR_STATE_T { - PWR_STATE_IDLE = 0, - PWR_STATE_ACTIVE, - PWR_STATE_PS, - PWR_STATE_NUM -} ENUM_PWR_STATE_T; - -typedef enum _ENUM_PHY_TYPE_INDEX_T { - //PHY_TYPE_DSSS_INDEX, /* DSSS PHY (clause 15) -- Not used anymore */ - PHY_TYPE_HR_DSSS_INDEX = 0, /* HR/DSSS PHY (clause 18) */ - PHY_TYPE_ERP_INDEX, /* ERP PHY (clause 19) */ - PHY_TYPE_ERP_P2P_INDEX, /* ERP PHY (clause 19) w/o HR/DSSS */ - PHY_TYPE_OFDM_INDEX, /* OFDM 5 GHz PHY (clause 17) */ - PHY_TYPE_HT_INDEX, /* HT PHY (clause 20) */ - PHY_TYPE_INDEX_NUM // 5 -} ENUM_PHY_TYPE_INDEX_T, *P_ENUM_PHY_TYPE_INDEX_T; - -typedef enum _ENUM_ACPI_STATE_T { - ACPI_STATE_D0 = 0, - ACPI_STATE_D1, - ACPI_STATE_D2, - ACPI_STATE_D3 -} ENUM_ACPI_STATE_T; - -/* The operation mode of a specific Network */ -typedef enum _ENUM_OP_MODE_T { - OP_MODE_INFRASTRUCTURE = 0, /* Infrastructure/GC */ - OP_MODE_IBSS, /* AdHoc */ - OP_MODE_ACCESS_POINT, /* For GO */ - OP_MODE_P2P_DEVICE, /* P2P Device */ - OP_MODE_BOW, - OP_MODE_NUM -} ENUM_OP_MODE_T, *P_ENUM_OP_MODE_T; - -typedef enum _ENUM_CHNL_EXT_T { - CHNL_EXT_SCN = 0, - CHNL_EXT_SCA = 1, - CHNL_EXT_RES = 2, - CHNL_EXT_SCB = 3 -} ENUM_CHNL_EXT_T, *P_ENUM_CHNL_EXT_T; - -/* This starting freq of the band is unit of kHz */ -typedef enum _ENUM_BAND_T { - BAND_NULL, - BAND_2G4, - BAND_5G, - BAND_NUM -} ENUM_BAND_T, *P_ENUM_BAND_T; - -/* Provide supported channel list to other components in array format */ -typedef struct _RF_CHANNEL_INFO_T { - ENUM_BAND_T eBand; - UINT_8 ucChannelNum; -} RF_CHANNEL_INFO_T, *P_RF_CHANNEL_INFO_T; - -typedef enum _ENUM_RATE_INDEX_T { - RATE_1M_INDEX = 0, /* 1M */ - RATE_2M_INDEX, /* 2M */ - RATE_5_5M_INDEX, /* 5.5M */ - RATE_11M_INDEX, /* 11M */ - RATE_22M_INDEX, /* 22M */ - RATE_33M_INDEX, /* 33M */ - RATE_6M_INDEX, /* 6M */ - RATE_9M_INDEX, /* 9M */ - RATE_12M_INDEX, /* 12M */ - RATE_18M_INDEX, /* 18M */ - RATE_24M_INDEX, /* 24M */ - RATE_36M_INDEX, /* 36M */ - RATE_48M_INDEX, /* 48M */ - RATE_54M_INDEX, /* 54M */ - RATE_HT_PHY_INDEX, /* BSS Selector - HT PHY */ - RATE_NUM // 15 -} ENUM_RATE_INDEX_T, *P_ENUM_RATE_INDEX_T; - -typedef enum _ENUM_HT_RATE_INDEX_T { - HT_RATE_MCS0_INDEX = 0, - HT_RATE_MCS1_INDEX, - HT_RATE_MCS2_INDEX, - HT_RATE_MCS3_INDEX, - HT_RATE_MCS4_INDEX, - HT_RATE_MCS5_INDEX, - HT_RATE_MCS6_INDEX, - HT_RATE_MCS7_INDEX, - HT_RATE_MCS32_INDEX, - HT_RATE_NUM // 9 -} ENUM_HT_RATE_INDEX_T, *P_ENUM_HT_RATE_INDEX_T; - -typedef enum _ENUM_PREMABLE_OPTION_T { - PREAMBLE_DEFAULT_LONG_NONE = 0, /* LONG for PHY_TYPE_HR_DSSS, NONE for PHY_TYPE_OFDM */ - PREAMBLE_OPTION_SHORT, /* SHORT mandatory for PHY_TYPE_ERP, SHORT option for PHY_TYPE_HR_DSSS */ - PREAMBLE_HT_MIXED_MODE, - PREAMBLE_HT_GREEN_FIELD, - PREAMBLE_OPTION_NUM -} ENUM_PREMABLE_OPTION_T, *P_ENUM_PREMABLE_OPTION_T; - -typedef enum _ENUM_MODULATION_SYSTEM_T { - MODULATION_SYSTEM_CCK = 0, - MODULATION_SYSTEM_OFDM, - MODULATION_SYSTEM_HT20, - MODULATION_SYSTEM_HT40, - MODULATION_SYSTEM_NUM -} ENUM_MODULATION_SYSTEM_T, *P_ENUM_MODULATION_SYSTEM_T; - -typedef enum _ENUM_MODULATION_TYPE_T { - MODULATION_TYPE_CCK_BPSK = 0, - MODULATION_TYPE_QPSK, - MODULATION_TYPE_16QAM, - MODULATION_TYPE_64QAM, - MODULATION_TYPE_NUM -} ENUM_MODULATION_TYPE_T, *P_ENUM_MODULATION_TYPE_T; - -typedef enum _ENUM_PS_FORWARDING_TYPE_T { - PS_FORWARDING_TYPE_NON_PS = 0, - PS_FORWARDING_TYPE_DELIVERY_ENABLED, - PS_FORWARDING_TYPE_NON_DELIVERY_ENABLED, - PS_FORWARDING_MORE_DATA_ENABLED, - PS_FORWARDING_TYPE_NUM -} ENUM_PS_FORWARDING_TYPE_T, *P_ENUM_PS_FORWARDING_TYPE_T; - -typedef struct _DEAUTH_INFO_T { - UINT_8 aucRxAddr[MAC_ADDR_LEN]; - OS_SYSTIME rLastSendTime; -} DEAUTH_INFO_T, *P_DEAUTH_INFO_T; - -/*----------------------------------------------------------------------------*/ -/* Information Element (IE) handlers */ -/*----------------------------------------------------------------------------*/ -typedef VOID (*PFN_APPEND_IE_FUNC)(P_ADAPTER_T, P_MSDU_INFO_T); -typedef VOID (*PFN_HANDLE_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T); -typedef VOID (*PFN_VERIFY_IE_FUNC)(P_ADAPTER_T, P_SW_RFB_T, P_IE_HDR_T, PUINT_16); -typedef UINT_32 (*PFN_CALCULATE_VAR_IE_LEN_FUNC)(P_ADAPTER_T, ENUM_NETWORK_TYPE_INDEX_T, P_STA_RECORD_T); - -typedef struct _APPEND_IE_ENTRY_T { - UINT_16 u2EstimatedIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_IE_ENTRY_T, *P_APPEND_IE_ENTRY_T; - -typedef struct _APPEND_VAR_IE_ENTRY_T { - UINT_16 u2EstimatedFixedIELen; /* For Fixed Length */ - PFN_CALCULATE_VAR_IE_LEN_FUNC pfnCalculateVariableIELen; - PFN_APPEND_IE_FUNC pfnAppendIE; -} APPEND_VAR_IE_ENTRY_T, *P_APPEND_VAR_IE_ENTRY_T; - -typedef struct _HANDLE_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_HANDLE_IE_FUNC pfnHandleIE; -} HANDLE_IE_ENTRY_T, *P_HANDLE_IE_ENTRY_T; - -typedef struct _VERIFY_IE_ENTRY_T { - UINT_8 ucElemID; - PFN_VERIFY_IE_FUNC pfnVarifyIE; -} VERIFY_IE_ENTRY_T, *P_VERIFY_IE_ENTRY_T; - -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration */ -/*----------------------------------------------------------------------------*/ -typedef enum _ENUM_PARAM_CONNECTION_POLICY_T { - CONNECT_BY_SSID_BEST_RSSI = 0, - CONNECT_BY_SSID_GOOD_RSSI_MIN_CH_LOAD, - CONNECT_BY_SSID_ANY, /* NOTE(Kevin): Needed by WHQL */ - CONNECT_BY_BSSID, - CONNECT_BY_CUSTOMIZED_RULE /* NOTE(Kevin): TBD */ -} ENUM_PARAM_CONNECTION_POLICY_T, *P_ENUM_PARAM_CONNECTION_POLICY_T; - -typedef enum _ENUM_PARAM_PREAMBLE_TYPE_T { - PREAMBLE_TYPE_LONG = 0, - PREAMBLE_TYPE_SHORT, - PREAMBLE_TYPE_AUTO /*!< Try preamble short first, if fail tray preamble long. */ -} ENUM_PARAM_PREAMBLE_TYPE_T, *P_ENUM_PARAM_PREAMBLE_TYPE_T; - -/* This is enum defined for user to select a phy config listed in combo box */ -typedef enum _ENUM_PARAM_PHY_CONFIG_T { - PHY_CONFIG_802_11ABG = 0, /*!< Can associated with 802.11abg AP but without n capability, Scan dual band. */ - PHY_CONFIG_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11ABGN, /*!< Can associated with 802.11abgn AP, Scan dual band. */ - PHY_CONFIG_802_11BGN, /*!< Can associated with 802_11bgn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_802_11AN, /*!< Can associated with 802_11an AP, Scan single band and not report 2.4G BSSs. */ - PHY_CONFIG_802_11GN, /*!< Can associated with 802_11gn AP, Scan single band and not report 5G BSSs. */ - PHY_CONFIG_NUM // 9 -} ENUM_PARAM_PHY_CONFIG_T, *P_ENUM_PARAM_PHY_CONFIG_T; - -/* This is enum defined for user to select an AP Mode */ -typedef enum _ENUM_PARAM_AP_MODE_T { - AP_MODE_11B = 0, /*!< Create 11b BSS if we support 802.11abg/802.11bg. */ - AP_MODE_MIXED_11BG, /*!< Create 11bg mixed BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G, /*!< Create 11g only BSS if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11G_P2P, /*!< Create 11g only BSS for P2P if we support 802.11abg/802.11bg/802.11g. */ - AP_MODE_11A, /*!< Create 11a only BSS if we support 802.11abg. */ - AP_MODE_NUM // 4 -} ENUM_PARAM_AP_MODE_T, *P_ENUM_PARAM_AP_MODE_T; - - -/* Masks for determining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define NETWORK_TYPE_AIS_MASK BIT(NETWORK_TYPE_AIS_INDEX) -#define NETWORK_TYPE_P2P_MASK BIT(NETWORK_TYPE_P2P_INDEX) -#define NETWORK_TYPE_BOW_MASK BIT(NETWORK_TYPE_BOW_INDEX) -#define STA_TYPE_LEGACY_MASK BIT(STA_TYPE_LEGACY_INDEX) -#define STA_TYPE_P2P_MASK BIT(STA_TYPE_P2P_INDEX) -#define STA_TYPE_BOW_MASK BIT(STA_TYPE_BOW_INDEX) -#define STA_TYPE_ADHOC_MASK BIT(STA_ROLE_ADHOC_INDEX) -#define STA_TYPE_CLIENT_MASK BIT(STA_ROLE_CLIENT_INDEX) -#define STA_TYPE_AP_MASK BIT(STA_ROLE_AP_INDEX) -#define STA_TYPE_DLS_MASK BIT(STA_ROLE_DLS_INDEX) - -/* Macros for obtaining the Network Type or the Station Role, given the ENUM_STA_TYPE_T */ -#define IS_STA_IN_AIS(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) -#define IS_STA_IN_P2P(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) -#define IS_STA_IN_BOW(_prStaRec) ((_prStaRec)->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) -#define IS_STA_LEGACY_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_LEGACY_MASK) -#define IS_STA_P2P_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_P2P_MASK) -#define IS_STA_BOW_TYPE(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_BOW_MASK) -#define IS_ADHOC_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_ADHOC_MASK) -#define IS_CLIENT_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_CLIENT_MASK) -#define IS_AP_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_AP_MASK) -#define IS_DLS_STA(_prStaRec) ((_prStaRec->eStaType) & STA_TYPE_DLS_MASK) - -/* The ENUM_STA_TYPE_T accounts for ENUM_NETWORK_TYPE_T and ENUM_STA_ROLE_INDEX_T. - * * It is a merged version of Network Type and STA Role. - * */ -typedef enum _ENUM_STA_TYPE_T { - STA_TYPE_LEGACY_AP = (STA_TYPE_LEGACY_MASK | STA_TYPE_AP_MASK), - STA_TYPE_LEGACY_CLIENT = (STA_TYPE_LEGACY_MASK | STA_TYPE_CLIENT_MASK), - STA_TYPE_ADHOC_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_ADHOC_MASK), -#if CFG_ENABLE_WIFI_DIRECT - STA_TYPE_P2P_GO = (STA_TYPE_P2P_MASK | STA_TYPE_AP_MASK), - STA_TYPE_P2P_GC = (STA_TYPE_P2P_MASK | STA_TYPE_CLIENT_MASK), -#endif -#if CFG_ENABLE_BT_OVER_WIFI - STA_TYPE_BOW_AP = (STA_TYPE_BOW_MASK | STA_TYPE_AP_MASK), - STA_TYPE_BOW_CLIENT = (STA_TYPE_BOW_MASK | STA_TYPE_CLIENT_MASK), -#endif - STA_TYPE_DLS_PEER = (STA_TYPE_LEGACY_MASK | STA_TYPE_DLS_MASK) -} ENUM_STA_TYPE_T, *P_ENUM_STA_TYPE_T; - -/* The type of BSS we discovered */ -typedef enum _ENUM_BSS_TYPE_T { - BSS_TYPE_INFRASTRUCTURE = 1, - BSS_TYPE_IBSS, - BSS_TYPE_P2P_DEVICE, - BSS_TYPE_BOW_DEVICE, - BSS_TYPE_NUM -} ENUM_BSS_TYPE_T, *P_ENUM_BSS_TYPE_T; - -/*----------------------------------------------------------------------------*/ -/* RSN structures */ -/*----------------------------------------------------------------------------*/ -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack(1) -//#endif - -#define MAX_NUM_SUPPORTED_CIPHER_SUITES 8 /* max number of supported cipher suites */ -#if CFG_SUPPORT_802_11W -#define MAX_NUM_SUPPORTED_AKM_SUITES 8 /* max number of supported AKM suites */ -#else -#define MAX_NUM_SUPPORTED_AKM_SUITES 6 /* max number of supported AKM suites */ -#endif - -/* Structure of RSN Information */ -typedef struct _RSN_INFO_T { - UINT_8 ucElemId; - UINT_16 u2Version; - UINT_32 u4GroupKeyCipherSuite; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_CIPHER_SUITES]; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_AKM_SUITES]; - UINT_16 u2RsnCap; - BOOLEAN fgRsnCapPresent; -} /*__KAL_ATTRIB_PACKED__*/ RSN_INFO_T, *P_RSN_INFO_T; - -#define MAX_NUM_SUPPORTED_WAPI_AKM_SUITES 1 /* max number of supported AKM suites */ -#define MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES 1 /* max number of supported cipher suites */ - -/* Structure of WAPI Information */ -typedef struct _WAPI_INFO_T { - UINT_8 ucElemId; - UCHAR ucLength; - UINT_16 u2Version; - UINT_32 u4AuthKeyMgtSuiteCount; - UINT_32 au4AuthKeyMgtSuite[MAX_NUM_SUPPORTED_WAPI_AKM_SUITES]; - UINT_32 u4PairwiseKeyCipherSuiteCount; - UINT_32 au4PairwiseKeyCipherSuite[MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES]; - UINT_32 u4GroupKeyCipherSuite; - UINT_16 u2WapiCap; - UINT_16 u2Bkid; - UINT_8 aucBkid[1][16]; -} /* __KAL_ATTRIB_PACKED__*/ WAPI_INFO_T, *P_WAPI_INFO_T; - -//#if defined(WINDOWS_DDK) || defined(WINDOWS_CE) -//#pragma pack() -//#endif - - -#if CFG_ENABLE_WIFI_DIRECT - -typedef struct _P2P_DEVICE_TYPE_T { - UINT_16 u2CategoryID; - UINT_16 u2SubCategoryID; -} P2P_DEVICE_TYPE_T, *P_P2P_DEVICE_TYPE_T; - -typedef struct _P2P_DEVICE_DESC_T { - LINK_ENTRY_T rLinkEntry; - BOOLEAN fgDevInfoValid; - UINT_8 aucDeviceAddr[MAC_ADDR_LEN]; /* Device Address. */ - UINT_8 aucInterfaceAddr[MAC_ADDR_LEN]; /* Interface Address. */ - UINT_8 ucDeviceCapabilityBitmap; - UINT_8 ucGroupCapabilityBitmap; - UINT_16 u2ConfigMethod; /* Configure Method support. */ - P2P_DEVICE_TYPE_T rPriDevType; - UINT_8 ucSecDevTypeNum; - P2P_DEVICE_TYPE_T arSecDevType[8]; // Reference to P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT - UINT_16 u2NameLength; - UINT_8 aucName[32]; // Reference to WPS_ATTRI_MAX_LEN_DEVICE_NAME - // TODO: Service Information or PasswordID valid? -} P2P_DEVICE_DESC_T, *P_P2P_DEVICE_DESC_T; - -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static const UINT_8 aucRateIndex2RateCode[PREAMBLE_OPTION_NUM][RATE_NUM] = { - { /* Long Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_LONG, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_LONG, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_LONG, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Short Preamble */ - RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */ - RATE_CCK_2M_SHORT, /* RATE_2M_INDEX */ - RATE_CCK_5_5M_SHORT, /* RATE_5_5M_INDEX */ - RATE_CCK_11M_SHORT, /* RATE_11M_INDEX */ - RATE_CCK_1M_LONG, /* RATE_22M_INDEX - Not supported */ - RATE_CCK_1M_LONG, /* RATE_33M_INDEX - Not supported */ - RATE_OFDM_6M, /* RATE_6M_INDEX */ - RATE_OFDM_9M, /* RATE_9M_INDEX */ - RATE_OFDM_12M, /* RATE_12M_INDEX */ - RATE_OFDM_18M, /* RATE_18M_INDEX */ - RATE_OFDM_24M, /* RATE_24M_INDEX */ - RATE_OFDM_36M, /* RATE_36M_INDEX */ - RATE_OFDM_48M, /* RATE_48M_INDEX */ - RATE_OFDM_54M, /* RATE_54M_INDEX */ - }, - { /* Mixed Mode(Option) */ - RATE_MM_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_MM_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_MM_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_MM_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_MM_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_MM_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_MM_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_MM_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_MM_MCS_32 /* RATE_MCS32_INDEX, */ - }, - { /* Green Field(Option) */ - RATE_GF_MCS_0, /* RATE_MCS0_INDEX, */ - RATE_GF_MCS_1, /* RATE_MCS1_INDEX, */ - RATE_GF_MCS_2, /* RATE_MCS2_INDEX, */ - RATE_GF_MCS_3, /* RATE_MCS3_INDEX, */ - RATE_GF_MCS_4, /* RATE_MCS4_INDEX, */ - RATE_GF_MCS_5, /* RATE_MCS5_INDEX, */ - RATE_GF_MCS_6, /* RATE_MCS6_INDEX, */ - RATE_GF_MCS_7, /* RATE_MCS7_INDEX, */ - RATE_GF_MCS_32 /* RATE_MCS32_INDEX, */ - } -}; - -static const UINT_8 aucRateTableSize[PREAMBLE_OPTION_NUM] = { - RATE_HT_PHY_INDEX, - RATE_HT_PHY_INDEX, - HT_RATE_NUM, - HT_RATE_NUM -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros to get and set the wireless LAN frame fields those are 16/32 bits in - length. */ -#define WLAN_GET_FIELD_16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0]) | ((UINT_16) __cp[1] << 8); \ - } - -#define WLAN_GET_FIELD_BE16(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_16)(_value_p) = ((UINT_16) __cp[0] << 8) | ((UINT_16) __cp[1]); \ - } - -#define WLAN_GET_FIELD_32(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_32)(_value_p) = ((UINT_32) __cp[0]) | ((UINT_32) __cp[1] << 8) | \ - ((UINT_32) __cp[2] << 16) | ((UINT_32) __cp[3] << 24); \ - } - -#define WLAN_GET_FIELD_64(_memAddr_p, _value_p) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - *(PUINT_64)(_value_p) = \ - ((UINT_64) __cp[0]) | ((UINT_64) __cp[1] << 8) | \ - ((UINT_64) __cp[2] << 16) | ((UINT_64) __cp[3] << 24) | \ - ((UINT_64) __cp[4] << 32) | ((UINT_64) __cp[5] << 40) | \ - ((UINT_64) __cp[6] << 48) | ((UINT_64) __cp[7] << 56); \ - } - -#define WLAN_SET_FIELD_16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - } - -#define WLAN_SET_FIELD_BE16(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) ((_value) >> 8); \ - __cp[1] = (UINT_8) (_value); \ - } - -#define WLAN_SET_FIELD_32(_memAddr_p, _value) \ - { \ - PUINT_8 __cp = (PUINT_8) (_memAddr_p); \ - __cp[0] = (UINT_8) (_value); \ - __cp[1] = (UINT_8) ((_value) >> 8); \ - __cp[2] = (UINT_8) ((_value) >> 16); \ - __cp[3] = (UINT_8) ((_value) >> 24); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_DEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic_cmd_event.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic_cmd_event.h deleted file mode 100755 index a5cd0010f51b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic_cmd_event.h +++ /dev/null @@ -1,1957 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic_cmd_event.h#1 $ -*/ - -/*! \file "nic_cmd_event.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_cmd_event.h $ - * - * 03 29 2012 eason.tsai - * [WCXRP00001216] [MT6628 Wi-Fi][Driver]add conditional define - * add conditional define. - * - * 03 04 2012 eason.tsai - * NULL - * modify the cal fail report code. - * - * 01 06 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * redefine the CMD_ID_SET_TXPWR_CTRL value. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 11 30 2011 cm.chang - * [WCXRP00001128] [MT5931 Wi-Fi][FW] Update BB/RF setting based on RF doc v0.7 for LGE spec - * 1. Add a new CMD for driver to set device mode - * 2. Update calibration parameters - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add TX_DONE status detail information. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * check if CFG_SUPPORT_SWCR is defined to aoid compiler error. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 26 2011 cp.wu - * [WCXRP00001065] [MT6620 Wi-Fi][MT5931][FW][DRV] Adding parameter for controlling minimum channel dwell time for scanning - * add interface for control minimum channel dwell time for scanning. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 09 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC[WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * add CCK-DSSS TX-PWR control field in NVRAM and CMD definition for MT5931-MP - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * add osc stable time command structure - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 23 2011 cp.wu - * [WCXRP00000812] [MT6620 Wi-Fi][Driver] not show NVRAM when there is no valid MAC address in NVRAM content - * check with firmware for valid MAC address. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 03 17 2011 yarco.yang - * [WCXRP00000569] [MT6620 Wi-Fi][F/W][Driver] Set multicast address support current network usage - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 02 16 2011 cm.chang - * [WCXRP00000447] [MT6620 Wi-Fi][FW] Support new NVRAM update mechanism - * . - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update cmd format of BSS INFO, always sync OwnMac to FW no matter P2P is enabled or not.. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 15 2011 puff.wen - * NULL - * Add Stress test - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Sync HT operation element information from host to FW - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * report EEPROM used flag via NIC_CAPABILITY - * - * 12 28 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * integrate with 'EEPROM used' flag for reporting correct capability to Engineer Mode/META and other tools - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 cp.wu - * [WCXRP00000133] [MT6620 Wi-Fi] [FW][Driver] Change TX power offset band definition - * follow-up for CMD_5G_PWR_OFFSET_T definition change - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 15 2010 cm.chang - * NULL - * Add new CMD for TX power, 5G power offset and power parameters - * - * 09 07 2010 yuche.tsai - * NULL - * Add a pointer in P2P SCAN RESULT structure. This pointer - * is pointed to a IE buffer for this P2p device. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 16 2010 george.huang - * NULL - * add new CMD ID definition - * - * 08 16 2010 yuche.tsai - * NULL - * Add a field in BSS INFO cmd to change interface address for P2P. (switching between Device Addr & Interface Addr) - * - * 08 12 2010 yuche.tsai - * NULL - * Add interface address indication when indicate connection status. - * It is requested by supplicant to do 4 way handshake. - * - * 08 07 2010 wh.su - * NULL - * adding the privacy related code for P2P network - * - * 08 05 2010 yuche.tsai - * NULL - * Change data structure for P2P Device scan result, all channel time for scan command. - * - * 08 04 2010 george.huang - * NULL - * handle change PS mode OID/ CMD - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 26 2010 yuche.tsai - * - * Add P2P Device Found Event. - * Channel extention option in scan abort command. - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add for P2P Scan Result Parsing & Saving. - * - * 07 20 2010 george.huang - * - * DWORD align for the CMD data structure - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 09 2010 cp.wu - * - * reorder members of CMD_SET_BSS_INFO. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add BSS/STA_REC commands for integration. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * the frequency is used for adhoc connection only - * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00003824][MT6620 Wi-Fi][New Feature] Add support of large scan list - * Implement feature needed by CR: WPD00003824: refining association command by pasting scanning result - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * send CMD_ID_INFRASTRUCTURE when handling OID_802_11_INFRASTRUCTURE_MODE set. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * 4. correct some HAL implementation - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * OID_802_11_RSSI, - * * * OID_802_11_RSSI_TRIGGER, - * * * OID_802_11_STATISTICS, - * * * OID_802_11_DISASSOCIATE, - * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * and result is retrieved by get ATInfo instead - * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-12-11 18:35:07 GMT mtk02752 -** add CMD added in CMD/EVEN document v0.8 -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-12-10 16:39:37 GMT mtk02752 -** eliminate unused definitions -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-12-10 09:55:11 GMT mtk02752 -** command ID/event ID revised -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-12-09 13:57:37 GMT MTK02468 -** Added event ids (EVENT_ID_RX_ADDBA and EVENT_ID_RX_DELBA) -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-12-08 17:35:39 GMT mtk02752 -** + add event ID for EVENT_ID_TEST_STATUS (rf test) -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-12-07 23:01:09 GMT mtk02752 -** add data structure for RF_TEST -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-12-03 16:22:56 GMT mtk01461 -** Modify the element - i4RSSI in EVENT of SCAN RESULT -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-11-30 10:54:44 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T, while 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-11-26 10:16:58 GMT mtk02752 -** resync EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-11-25 21:34:01 GMT mtk02752 -** sync. EVENT_SCAN_RESULT_T with firmware -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-11-25 21:03:48 GMT mtk02752 -** refine MGMT_FRAME -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-11-25 18:17:47 GMT mtk02752 -** refine GL_WLAN_INFO_T for buffering scan result and presume max. ie length = 600 bytes -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 22:41:20 GMT mtk02752 -** add EVENT_SCAN_RESULT_T definition -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-11-23 20:29:16 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-11-23 14:46:01 GMT mtk02752 -** add new command/event structure upon CM@SD1's documentation -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-13 15:13:40 GMT mtk02752 -** add command definition for CMD_BUILD_CONNECTION and EVENT_CONNECTION_STATUS -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-20 12:22:22 GMT mtk01461 -** Add SeqNum field to Event Header -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:11 GMT mtk01461 -** Update structure of HIF_EVENT_HEADER_T and EVENT_HDR_SIZE -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 12:10:36 GMT mtk01461 -** Add Common Set CMD Callback for MCR Write and other Set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:17 GMT mtk01461 -** Command Done Handler -*/ -#ifndef _NIC_CMD_EVENT_H -#define _NIC_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define CMD_STATUS_SUCCESS 0 -#define CMD_STATUS_REJECTED 1 -#define CMD_STATUS_UNKNOWN 2 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -#define MAX_IE_LENGTH (600) -#define MAX_WSC_IE_LENGTH (400) - -/* Action field in structure CMD_CH_PRIVILEGE_T */ -#define CMD_CH_ACTION_REQ 0 -#define CMD_CH_ACTION_ABORT 1 - -/* Status field in structure EVENT_CH_PRIVILEGE_T */ -#define EVENT_CH_STATUS_GRANT 0 - - -typedef enum _ENUM_CMD_ID_T { - CMD_ID_TEST_MODE = 1, /* 0x01 (Set) */ - CMD_ID_RESET_REQUEST, /* 0x02 (Set) */ - CMD_ID_BUILD_CONNECTION, /* 0x03 (Set) */ - CMD_ID_SCAN_REQ_V2, /* 0x04 (Set) */ - CMD_ID_NIC_POWER_CTRL, /* 0x05 (Set) */ - CMD_ID_POWER_SAVE_MODE, /* 0x06 (Set) */ - CMD_ID_LINK_ATTRIB, /* 0x07 (Set) */ - CMD_ID_ADD_REMOVE_KEY, /* 0x08 (Set) */ - CMD_ID_DEFAULT_KEY_ID, /* 0x09 (Set) */ - CMD_ID_INFRASTRUCTURE, /* 0x0a (Set) */ - CMD_ID_SET_RX_FILTER, /* 0x0b (Set) */ - CMD_ID_DOWNLOAD_BUF, /* 0x0c (Set) */ - CMD_ID_WIFI_START, /* 0x0d (Set) */ - CMD_ID_CMD_BT_OVER_WIFI, /* 0x0e (Set) */ - CMD_ID_SET_MEDIA_CHANGE_DELAY_TIME, /* 0x0f (Set) */ - CMD_ID_SEND_ADDBA_RSP, /* 0x10 (Set) */ - CMD_ID_WAPI_MODE, /* 0x11 (Set) (obsolete) */ - CMD_ID_WAPI_ASSOC_INFO, /* 0x12 (Set) (obsolete) */ - CMD_ID_SET_DOMAIN_INFO, /* 0x13 (Set) */ - CMD_ID_SET_IP_ADDRESS, /* 0x14 (Set) */ - CMD_ID_BSS_ACTIVATE_CTRL, /* 0x15 (Set) */ - CMD_ID_SET_BSS_INFO, /* 0x16 (Set) */ - CMD_ID_UPDATE_STA_RECORD, /* 0x17 (Set) */ - CMD_ID_REMOVE_STA_RECORD, /* 0x18 (Set) */ - CMD_ID_INDICATE_PM_BSS_CREATED, /* 0x19 (Set) */ - CMD_ID_INDICATE_PM_BSS_CONNECTED, /* 0x1a (Set) */ - CMD_ID_INDICATE_PM_BSS_ABORT, /* 0x1b (Set) */ - CMD_ID_UPDATE_BEACON_CONTENT, /* 0x1c (Set) */ - CMD_ID_SET_BSS_RLM_PARAM, /* 0x1d (Set) */ - CMD_ID_SCAN_REQ, /* 0x1e (Set) */ - CMD_ID_SCAN_CANCEL, /* 0x1f (Set) */ - CMD_ID_CH_PRIVILEGE, /* 0x20 (Set) */ - CMD_ID_UPDATE_WMM_PARMS, /* 0x21 (Set) */ - CMD_ID_SET_WMM_PS_TEST_PARMS, /* 0x22 (Set) */ - CMD_ID_TX_AMPDU, /* 0x23 (Set) */ - CMD_ID_ADDBA_REJECT, /* 0x24 (Set) */ - CMD_ID_SET_PS_PROFILE_ADV, /* 0x25 (Set) */ - CMD_ID_SET_RAW_PATTERN, /* 0x26 (Set) */ - CMD_ID_CONFIG_PATTERN_FUNC, /* 0x27 (Set) */ - CMD_ID_SET_TX_PWR, /* 0x28 (Set) */ - CMD_ID_SET_5G_PWR_OFFSET, /* 0x29 (Set) */ - CMD_ID_SET_PWR_PARAM, /* 0x2A (Set) */ - CMD_ID_P2P_ABORT, /* 0x2B (Set) */ -#if CFG_STRESS_TEST_SUPPORT - CMD_ID_RANDOM_RX_RESET_EN = 0x2C, /* 0x2C (Set ) */ - CMD_ID_RANDOM_RX_RESET_DE = 0x2D, /* 0x2D (Set ) */ - CMD_ID_SAPP_EN = 0x2E, /* 0x2E (Set ) */ - CMD_ID_SAPP_DE = 0x2F, /* 0x2F (Set ) */ -#endif - CMD_ID_ROAMING_TRANSIT = 0x30, /* 0x30 (Set) */ - CMD_ID_SET_PHY_PARAM, /* 0x31 (Set) */ - CMD_ID_SET_NOA_PARAM, /* 0x32 (Set) */ - CMD_ID_SET_OPPPS_PARAM, /* 0x33 (Set) */ - CMD_ID_SET_UAPSD_PARAM, /* 0x34 (Set) */ - CMD_ID_SET_SIGMA_STA_SLEEP, /* 0x35 (Set) */ - CMD_ID_SET_EDGE_TXPWR_LIMIT, /* 0x36 (Set) */ - CMD_ID_SET_DEVICE_MODE, /* 0x37 (Set) */ - CMD_ID_SET_TXPWR_CTRL, /* 0x38 (Set) */ - CMD_ID_SET_AUTOPWR_CTRL, /* 0x39 (Set) */ - CMD_ID_SET_WFD_CTRL = 0x3A, /* 0x3A (Set) */ - - CMD_ID_GET_NIC_CAPABILITY = 0x80, /* 0x80 (Query) */ - CMD_ID_GET_LINK_QUALITY, /* 0x81 (Query) */ - CMD_ID_GET_STATISTICS, /* 0x82 (Query) */ - CMD_ID_GET_CONNECTION_STATUS, /* 0x83 (Query) */ - CMD_ID_GET_ASSOC_INFO, /* 0x84 (Query) (obsolete) */ - CMD_ID_GET_STA_STATISTICS = 0x85, /* 0x85 (Query) */ - - CMD_ID_BASIC_CONFIG = 0xc1, /* 0xc1 (Set / Query) */ - CMD_ID_ACCESS_REG, /* 0xc2 (Set / Query) */ - CMD_ID_MAC_MCAST_ADDR, /* 0xc3 (Set / Query) */ - CMD_ID_802_11_PMKID, /* 0xc4 (Set / Query) */ - CMD_ID_ACCESS_EEPROM, /* 0xc5 (Set / Query) */ - CMD_ID_SW_DBG_CTRL, /* 0xc6 (Set / Query) */ -#if 1/* CFG_SUPPORT_ANTI_PIRACY */ - CMD_ID_SEC_CHECK, /* 0xc7 (Set / Query) */ -#endif - CMD_ID_DUMP_MEM, /* 0xc8 (Query) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - CMD_ID_SET_RDD_CH = 0xE1, -#endif - - CMD_ID_SET_BWCS = 0xF1, -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) - CMD_ID_SET_OSC = 0xf2, -#endif -#if CFG_SUPPORT_BUILD_DATE_CODE - CMD_ID_GET_BUILD_DATE_CODE = 0xF8, -#endif -} ENUM_CMD_ID_T, *P_ENUM_CMD_ID_T; - -typedef enum _ENUM_EVENT_ID_T { - EVENT_ID_CMD_RESULT = 1, /* 0x01 (Query) */ - EVENT_ID_NIC_CAPABILITY, /* 0x02 (Query) */ - EVENT_ID_CONNECTION_STATUS, /* 0x03 (Query / Unsolicited) (obsolete) */ - EVENT_ID_SCAN_RESULT, /* 0x04 (Query / Unsolicited) (obselete) */ - EVENT_ID_LINK_QUALITY, /* 0x05 (Query / Unsolicited) */ - EVENT_ID_STATISTICS, /* 0x06 (Query) */ - EVENT_ID_MIC_ERR_INFO, /* 0x07 (Unsolicited) */ - EVENT_ID_ASSOC_INFO, /* 0x08 (Query - CMD_ID_GET_ASSOC_INFO) */ - EVENT_ID_BASIC_CONFIG, /* 0x09 (Query - CMD_ID_BASIC_CONFIG) */ - EVENT_ID_ACCESS_REG, /* 0x0a (Query - CMD_ID_ACCESS_REG) */ - EVENT_ID_MAC_MCAST_ADDR, /* 0x0b (Query - CMD_ID_MAC_MCAST_ADDR) */ - EVENT_ID_802_11_PMKID, /* 0x0c (Query - CMD_ID_802_11_PMKID) */ - EVENT_ID_ACCESS_EEPROM, /* 0x0d (Query - CMD_ID_ACCESS_EEPROM) */ - EVENT_ID_SLEEPY_NOTIFY, /* 0x0e (Query) */ - EVENT_ID_BT_OVER_WIFI, /* 0x0f (Unsolicited) */ - EVENT_ID_TEST_STATUS, /* 0x10 (Query - CMD_ID_TEST_MODE) */ - EVENT_ID_RX_ADDBA, /* 0x11 (Unsolicited) (obsolete) */ - EVENT_ID_RX_DELBA, /* 0x12 (Unsolicited) (obsolete) */ - EVENT_ID_ACTIVATE_STA_REC_T, /* 0x13 (Unsolicited) */ - EVENT_ID_DEACTIVATE_STA_REC_T, /* 0x14 (Unsolicited) */ - EVENT_ID_SCAN_DONE, /* 0x15 (Unsoiicited) */ - EVENT_ID_RX_FLUSH, /* 0x16 (Unsolicited) */ - EVENT_ID_TX_DONE, /* 0x17 (Unsolicited) */ - EVENT_ID_CH_PRIVILEGE, /* 0x18 (Unsolicited) */ - EVENT_ID_BSS_ABSENCE_PRESENCE = 0x19, /* 0x19 (Unsolicited) */ - EVENT_ID_STA_CHANGE_PS_MODE, /* 0x1A (Unsolicited) */ - EVENT_ID_BSS_BEACON_TIMEOUT, /* 0x1B (Unsolicited) */ - EVENT_ID_UPDATE_NOA_PARAMS, /* 0x1C (Unsolicited) */ - EVENT_ID_AP_OBSS_STATUS, /* 0x1D (Unsolicited) */ - EVENT_ID_STA_UPDATE_FREE_QUOTA, /* 0x1E (Unsolicited) */ - EVENT_ID_SW_DBG_CTRL, /* 0x1F (Query - CMD_ID_SW_DBG_CTRL) */ - EVENT_ID_ROAMING_STATUS, /* 0x20 (Unsolicited) */ - EVENT_ID_STA_AGING_TIMEOUT, /* 0x21 (Unsolicited) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - EVENT_ID_SEC_CHECK_RSP, /* 0x22 (Unsolicited) */ -#endif - EVENT_ID_SEND_DEAUTH, /* 0x23 (Unsolicited) */ - -#if CFG_SUPPORT_RDD_TEST_MODE - EVENT_ID_UPDATE_RDD_STATUS, /* 0x24 (Unsolicited) */ -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - EVENT_ID_UPDATE_BWCS_STATUS = 0x25, /* 0x25 (Unsolicited) */ - EVENT_ID_UPDATE_BCM_DEBUG, /* 0x26 (Unsolicited) */ -#endif - EVENT_ID_RX_ERR, - EVENT_ID_DUMP_MEM, - EVENT_ID_STA_STATISTICS= 0x29, /* 0x29 (Query ) */ - EVENT_ID_STA_STATISTICS_UPDATE, /* 0x2A (Unsolicited) */ - -#if CFG_SUPPORT_BUILD_DATE_CODE - EVENT_ID_BUILD_DATE_CODE = 0xF8, -#endif -} ENUM_EVENT_ID_T, *P_ENUM_EVENT_ID_T; - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -#ifndef LINUX -typedef UINT_8 CMD_STATUS; -#endif -/* for Event Packet (via HIF-RX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_CMD_T { - UINT_16 u2TxByteCount_UserPriority; - UINT_8 ucEtherTypeOffset; - UINT_8 ucResource_PktType_CSflags; - UINT_8 ucCID; - UINT_8 ucSetQuery; - UINT_8 ucSeqNum; - UINT_8 aucReserved2; - - UINT_8 aucBuffer[0]; -} WIFI_CMD_T, *P_WIFI_CMD_T; - -/* for Command Packet (via HIF-TX) */ - /* following CM's documentation v0.7 */ -typedef struct _WIFI_EVENT_T { - UINT_16 u2PacketLen; - UINT_16 u2PacketType; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucReserved2[2]; - - UINT_8 aucBuffer[0]; -} WIFI_EVENT_T, *P_WIFI_EVENT_T; - -// CMD_ID_TEST_MODE -typedef struct _CMD_TEST_CTRL_T { - UINT_8 ucAction; - UINT_8 aucReserved[3]; - union { - UINT_32 u4OpMode; - UINT_32 u4ChannelFreq; - PARAM_MTK_WIFI_TEST_STRUC_T rRfATInfo; - } u; -} CMD_TEST_CTRL_T, *P_CMD_TEST_CTRL_T; - -// EVENT_TEST_STATUS -typedef struct _PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T { - UINT_32 u4PktSentStatus; - UINT_32 u4PktSentCount; - UINT_16 u2AvgAlc; - UINT_8 ucCckGainControl; - UINT_8 ucOfdmGainControl; -} PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T; - -typedef struct _PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T { - UINT_32 u4IntRxOk; /*!< number of packets that Rx ok from interrupt */ - UINT_32 u4IntCrcErr; /*!< number of packets that CRC error from interrupt */ - UINT_32 u4IntShort; /*!< number of packets that is short preamble from interrupt */ - UINT_32 u4IntLong; /*!< number of packets that is long preamble from interrupt */ - UINT_32 u4PauRxPktCount; /*!< number of packets that Rx ok from PAU */ - UINT_32 u4PauCrcErrCount; /*!< number of packets that CRC error from PAU */ - UINT_32 u4PauRxFifoFullCount; /*!< number of packets that is short preamble from PAU */ - UINT_32 u4PauCCACount; /*!< CCA rising edge count */ -} PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T, *P_PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T; - -typedef union _EVENT_TEST_STATUS { - PARAM_MTK_WIFI_TEST_STRUC_T rATInfo; -// PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T rTxStatus; -// PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T rRxStatus; -} EVENT_TEST_STATUS, *P_EVENT_TEST_STATUS; - -// CMD_BUILD_CONNECTION -typedef struct _CMD_BUILD_CONNECTION { - UINT_8 ucInfraMode; - UINT_8 ucAuthMode; - UINT_8 ucEncryptStatus; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - - /* Ad-hoc mode */ - UINT_16 u2BeaconPeriod; - UINT_16 u2ATIMWindow; - UINT_8 ucJoinOnly; - UINT_8 ucReserved; - UINT_32 u4FreqInKHz; - - /* for faster connection */ - UINT_8 aucScanResult[0]; -} CMD_BUILD_CONNECTION, *P_CMD_BUILD_CONNECTION; - -//CMD_ADD_REMOVE_KEY -typedef struct _CMD_802_11_KEY { - UINT_8 ucAddRemove; - UINT_8 ucTxKey; - UINT_8 ucKeyType; - UINT_8 ucIsAuthenticator; - UINT_8 aucPeerAddr[6]; - UINT_8 ucNetType; - UINT_8 ucAlgorithmId; - UINT_8 ucKeyId; - UINT_8 ucKeyLen; - UINT_8 aucReverved[2]; - UINT_8 aucKeyMaterial[32]; - UINT_8 aucKeyRsc[16]; -} CMD_802_11_KEY, *P_CMD_802_11_KEY; - -/* WPA2 PMKID cache structure */ -typedef struct _PMKID_ENTRY_T { - PARAM_BSSID_INFO_T rBssidInfo; - BOOLEAN fgPmkidExist; -} PMKID_ENTRY_T, *P_PMKID_ENTRY_T; - -typedef struct _CMD_802_11_PMKID -{ - ULONG u4BSSIDInfoCount; - P_PMKID_ENTRY_T arPMKIDInfo[1]; -} CMD_802_11_PMKID, *P_CMD_802_11_PMKID; - -// CMD_BASIC_CONFIG -typedef struct _CMD_CSUM_OFFLOAD { - UINT_16 u2RxChecksum; // bit0: IP, bit1: UDP, bit2: TCP - UINT_16 u2TxChecksum; // bit0: IP, bit1: UDP, bit2: TCP -} CMD_CSUM_OFFLOAD, *P_CMD_CSUM_OFFLOAD; - -typedef struct _CMD_BASIC_CONFIG { - PARAM_MAC_ADDRESS rMyMacAddr; - UINT_8 ucNative80211; - UINT_8 aucReserved[1]; - - CMD_CSUM_OFFLOAD rCsumOffload; -} CMD_BASIC_CONFIG, *P_CMD_BASIC_CONFIG, EVENT_BASIC_CONFIG, *P_EVENT_BASIC_CONFIG; - -// CMD_MAC_MCAST_ADDR -typedef struct _CMD_MAC_MCAST_ADDR { - UINT_32 u4NumOfGroupAddr; - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; - PARAM_MAC_ADDRESS arAddress[MAX_NUM_GROUP_ADDR]; -} CMD_MAC_MCAST_ADDR, *P_CMD_MAC_MCAST_ADDR, EVENT_MAC_MCAST_ADDR, *P_EVENT_MAC_MCAST_ADDR; - -// CMD_ACCESS_EEPROM -typedef struct _CMD_ACCESS_EEPROM { - UINT_16 u2Offset; - UINT_16 u2Data; -} CMD_ACCESS_EEPROM, *P_CMD_ACCESS_EEPROM, EVENT_ACCESS_EEPROM, *P_EVENT_ACCESS_EEPROM; - -typedef struct _CMD_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} CMD_CUSTOM_NOA_PARAM_STRUC_T, *P_CMD_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} CMD_CUSTOM_OPPPS_PARAM_STRUC_T, *P_CMD_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _CMD_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} CMD_CUSTOM_UAPSD_PARAM_STRUC_T, *P_CMD_CUSTOM_UAPSD_PARAM_STRUC_T; - -// EVENT_CONNECTION_STATUS -typedef struct _EVENT_CONNECTION_STATUS { - UINT_8 ucMediaStatus; - UINT_8 ucReasonOfDisconnect; - - UINT_8 ucInfraMode; - UINT_8 ucSsidLen; - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; - UINT_8 aucBssid[PARAM_MAC_ADDR_LEN]; - UINT_8 ucAuthenMode; - UINT_8 ucEncryptStatus; - UINT_16 u2BeaconPeriod; - UINT_16 u2AID; - UINT_16 u2ATIMWindow; - UINT_8 ucNetworkType; - UINT_8 aucReserved[1]; - UINT_32 u4FreqInKHz; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucInterfaceAddr[PARAM_MAC_ADDR_LEN]; -#endif - -} EVENT_CONNECTION_STATUS, *P_EVENT_CONNECTION_STATUS; - -// EVENT_NIC_CAPABILITY -typedef struct _EVENT_NIC_CAPABILITY { - UINT_16 u2ProductID; - UINT_16 u2FwVersion; - UINT_16 u2DriverVersion; - UINT_8 ucHw5GBandDisabled; - UINT_8 ucEepromUsed; - UINT_8 ucEfuseValid; - UINT_8 ucMacAddrValid; -#if CFG_REPORT_RFBB_VERSION - UINT_8 ucRfVersion; - UINT_8 ucPhyVersion; -#endif -#if CFG_ENABLE_CAL_LOG - UINT_8 ucRfCalFail; - UINT_8 ucBbCalFail; -#endif - UINT_8 aucReserved[2]; -} EVENT_NIC_CAPABILITY, *P_EVENT_NIC_CAPABILITY; - -// modified version of WLAN_BEACON_FRAME_BODY_T for simplier buffering -typedef struct _WLAN_BEACON_FRAME_BODY_T_LOCAL { - /* Beacon frame body */ - UINT_32 au4Timestamp[2]; /* Timestamp */ - UINT_16 u2BeaconInterval; /* Beacon Interval */ - UINT_16 u2CapInfo; /* Capability */ - UINT_8 aucInfoElem[MAX_IE_LENGTH]; /* Various IEs, start from SSID */ - UINT_16 u2IELength; /* This field is *NOT* carried by F/W but caculated by nic_rx */ -} WLAN_BEACON_FRAME_BODY_T_LOCAL, *P_WLAN_BEACON_FRAME_BODY_T_LOCAL; - -// EVENT_SCAN_RESULT -typedef struct _EVENT_SCAN_RESULT_T { - INT_32 i4RSSI; - UINT_32 u4LinkQuality; - UINT_32 u4DSConfig; /* Center frequency */ - UINT_32 u4DomainInfo; /* Require CM opinion */ - UINT_32 u4Reserved; - UINT_8 ucNetworkType; - UINT_8 ucOpMode; - UINT_8 aucBssid[MAC_ADDR_LEN]; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - WLAN_BEACON_FRAME_BODY_T_LOCAL rBeaconFrameBody; -} EVENT_SCAN_RESULT_T, *P_EVENT_SCAN_RESULT_T; - -/* event of tkip mic error */ -typedef struct _EVENT_MIC_ERR_INFO -{ - UINT_32 u4Flags; -} EVENT_MIC_ERR_INFO, *P_EVENT_MIC_ERR_INFO; - -typedef struct _EVENT_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} EVENT_PMKID_CANDIDATE_LIST_T, *P_EVENT_PMKID_CANDIDATE_LIST_T; - - -typedef struct _EVENT_CMD_RESULT { - UINT_8 ucCmdID; - UINT_8 ucStatus; - UINT_8 aucReserved[2]; -} EVENT_CMD_RESULT, *P_EVENT_CMD_RESULT; - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -typedef struct _CMD_MCU_LP_PARAM_T { - UINT_16 u2OscStableTime; - UINT_8 ucReserved[6]; -} CMD_MCU_LP_PARAM_T, *P_CMD_MCU_LP_PARAM_T; -#endif - - -// CMD_ID_ACCESS_REG & EVENT_ID_ACCESS_REG -typedef struct _CMD_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} CMD_ACCESS_REG, *P_CMD_ACCESS_REG; - -// CMD_DUMP_MEMORY -typedef struct _CMD_DUMP_MEM { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} CMD_DUMP_MEM, *P_CMD_DUMP_MEM; - -typedef struct _EVENT_DUMP_MEM_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; - UINT_8 aucBuffer[1]; -} EVENT_DUMP_MEM_T, *P_EVENT_DUMP_MEM_T; - -typedef struct _CMD_SW_DBG_CTRL_T { - UINT_32 u4Id; - UINT_32 u4Data; - /* Debug Support */ - UINT_32 u4DebugCnt[64]; -} CMD_SW_DBG_CTRL_T, *P_CMD_SW_DBG_CTRL_T; - - -// CMD_ID_LINK_ATTRIB -typedef struct _CMD_LINK_ATTRIB { - INT_8 cRssiTrigger; - UINT_8 ucDesiredRateLen; - UINT_16 u2DesiredRate[32]; - UINT_8 ucMediaStreamMode; - UINT_8 aucReserved[1]; -} CMD_LINK_ATTRIB, *P_CMD_LINK_ATTRIB; - -// CMD_ID_NIC_POWER_CTRL -typedef struct _CMD_NIC_POWER_CTRL { - UINT_8 ucPowerMode; - UINT_8 aucReserved[3]; -} CMD_NIC_POWER_CTRL, *P_CMD_NIC_POWER_CTRL; - -// CMD_ID_POWER_SAVE_MODE -typedef struct _CMD_PS_PROFILE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucPsProfile; - UINT_8 aucReserved[2]; -} CMD_PS_PROFILE_T, *P_CMD_PS_PROFILE_T; - - -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; -} EVENT_LINK_QUALITY, *P_EVENT_LINK_QUALITY; - -#if CFG_SUPPORT_P2P_RSSI_QUERY -// EVENT_LINK_QUALITY -typedef struct _EVENT_LINK_QUALITY_EX { - INT_8 cRssi; - INT_8 cLinkQuality; - UINT_16 u2LinkSpeed; - UINT_8 ucMediumBusyPercentage; - UINT_8 ucIsLQ0Rdy; - INT_8 cRssiP2P; /* For P2P Network. */ - INT_8 cLinkQualityP2P; - UINT_16 u2LinkSpeedP2P; - UINT_8 ucMediumBusyPercentageP2P; - UINT_8 ucIsLQ1Rdy; -} EVENT_LINK_QUALITY_EX, *P_EVENT_LINK_QUALITY_EX; -#endif - -// EVENT_ID_STATISTICS -typedef struct _EVENT_STATISTICS { - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; -} EVENT_STATISTICS, *P_EVENT_STATISTICS; - -// EVENT_ID_FW_SLEEPY_NOTIFY -typedef struct _EVENT_SLEEPY_NOTIFY { - UINT_8 ucSleepyState; - UINT_8 aucReserved[3]; -} EVENT_SLEEPY_NOTIFY, *P_EVENT_SLEEPY_NOTIFY; - -typedef struct _EVENT_ACTIVATE_STA_REC_T { - UINT_8 aucMacAddr[6]; - UINT_8 ucStaRecIdx; - UINT_8 ucNetworkTypeIndex; - BOOLEAN fgIsQoS; - BOOLEAN fgIsAP; - UINT_8 aucReserved[2]; -} EVENT_ACTIVATE_STA_REC_T, *P_EVENT_ACTIVATE_STA_REC_T; - -typedef struct _EVENT_DEACTIVATE_STA_REC_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_DEACTIVATE_STA_REC_T, *P_EVENT_DEACTIVATE_STA_REC_T; - -// CMD_BT_OVER_WIFI -typedef struct _CMD_BT_OVER_WIFI { - UINT_8 ucAction; /* 0: query, 1: setup, 2: destroy */ - UINT_8 ucChannelNum; - PARAM_MAC_ADDRESS rPeerAddr; - UINT_16 u2BeaconInterval; - UINT_8 ucTimeoutDiscovery; - UINT_8 ucTimeoutInactivity; - UINT_8 ucRole; - UINT_8 PAL_Capabilities; - UINT_8 cMaxTxPower; - UINT_8 ucChannelBand; - UINT_8 ucReserved[1]; -} CMD_BT_OVER_WIFI, *P_CMD_BT_OVER_WIFI; - -// EVENT_BT_OVER_WIFI -typedef struct _EVENT_BT_OVER_WIFI { - UINT_8 ucLinkStatus; - UINT_8 ucSelectedChannel; - INT_8 cRSSI; - UINT_8 ucReserved[1]; -} EVENT_BT_OVER_WIFI, *P_EVENT_BT_OVER_WIFI; - -// Same with DOMAIN_SUBBAND_INFO -typedef struct _CMD_SUBBAND_INFO { - UINT_8 ucRegClass; - UINT_8 ucBand; - UINT_8 ucChannelSpan; - UINT_8 ucFirstChannelNum; - UINT_8 ucNumChannels; - UINT_8 aucReserved[3]; -} CMD_SUBBAND_INFO, *P_CMD_SUBBAND_INFO; - -// CMD_SET_DOMAIN_INFO -typedef struct _CMD_SET_DOMAIN_INFO_T { - UINT_16 u2CountryCode; - UINT_16 u2Reserved; - CMD_SUBBAND_INFO rSubBand[6]; - - UINT_8 uc2G4Bandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 uc5GBandwidth; /* CONFIG_BW_20_40M or CONFIG_BW_20M */ - UINT_8 aucReserved[2]; -} CMD_SET_DOMAIN_INFO_T, *P_CMD_SET_DOMAIN_INFO_T; - -// CMD_SET_IP_ADDRESS -typedef struct _IPV4_NETWORK_ADDRESS { - UINT_8 aucIpAddr[4]; -} IPV4_NETWORK_ADDRESS, *P_IPV4_NETWORK_ADDRESS; - -typedef struct _CMD_SET_NETWORK_ADDRESS_LIST { - UINT_8 ucNetTypeIndex; - UINT_8 ucAddressCount; - UINT_8 ucReserved[2]; - IPV4_NETWORK_ADDRESS arNetAddress[1]; -} CMD_SET_NETWORK_ADDRESS_LIST, *P_CMD_SET_NETWORK_ADDRESS_LIST; - -typedef struct _PATTERN_DESCRIPTION { - UINT_8 fgCheckBcA1; - UINT_8 fgCheckMcA1; - UINT_8 ePatternHeader; - UINT_8 fgAndOp; - UINT_8 fgNotOp; - UINT_8 ucPatternMask; - UINT_16 ucPatternOffset; - UINT_8 aucPattern[8]; -} PATTERN_DESCRIPTION, *P_PATTERN_DESCRIPTION; - -typedef struct _CMD_RAW_PATTERN_CONFIGURATION_T { - PATTERN_DESCRIPTION arPatternDesc[4]; -} CMD_RAW_PATTERN_CONFIGURATION_T, *P_CMD_RAW_PATTERN_CONFIGURATION_T; - -typedef struct _CMD_PATTERN_FUNC_CONFIG { - BOOLEAN fgBcA1En; - BOOLEAN fgMcA1En; - BOOLEAN fgBcA1MatchDrop; - BOOLEAN fgMcA1MatchDrop; -} CMD_PATTERN_FUNC_CONFIG, *P_CMD_PATTERN_FUNC_CONFIG; - - -typedef struct _EVENT_TX_DONE_T { - UINT_8 ucPacketSeq; - UINT_8 ucStatus; - UINT_16 u2SequenceNumber; - UINT_32 au4Reserved1; - UINT_32 au4Reserved2; - UINT_32 au4Reserved3; -} EVENT_TX_DONE_T, *P_EVENT_TX_DONE_T; - -typedef struct _CMD_BSS_ACTIVATE_CTRL { - UINT_8 ucNetTypeIndex; - UINT_8 ucActive; - UINT_8 aucReserved[2]; -} CMD_BSS_ACTIVATE_CTRL, *P_CMD_BSS_ACTIVATE_CTRL; - -typedef struct _CMD_SET_BSS_RLM_PARAM_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucRfBand; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucErpProtectMode; - UINT_8 ucHtProtectMode; - UINT_8 ucGfOperationMode; - UINT_8 ucTxRifsMode; - UINT_16 u2HtOpInfo3; - UINT_16 u2HtOpInfo2; - UINT_8 ucHtOpInfo1; - UINT_8 ucUseShortPreamble; - UINT_8 ucUseShortSlotTime; - UINT_8 ucCheckId; /* Fixed value: 0x72 */ -} CMD_SET_BSS_RLM_PARAM_T, *P_CMD_SET_BSS_RLM_PARAM_T; - -typedef struct _CMD_SET_BSS_INFO { - UINT_8 ucNetTypeIndex; - UINT_8 ucConnectionState; - UINT_8 ucCurrentOPMode; - UINT_8 ucSSIDLen; - UINT_8 aucSSID[32]; - UINT_8 aucBSSID[6]; - UINT_8 ucIsQBSS; - UINT_8 ucReserved1; - UINT_16 u2OperationalRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucStaRecIdxOfAP; - UINT_8 ucReserved2; - UINT_8 ucReserved3; - UINT_8 ucNonHTBasicPhyType; /* For Slot Time and CWmin */ - UINT_8 ucAuthMode; - UINT_8 ucEncStatus; - UINT_8 ucPhyTypeSet; - UINT_8 aucOwnMac[6]; - UINT_8 fgWapiMode; - UINT_8 fgIsApMode; - UINT_8 aucRsv[1]; - CMD_SET_BSS_RLM_PARAM_T rBssRlmParam; -} CMD_SET_BSS_INFO, *P_CMD_SET_BSS_INFO; - -typedef struct _CMD_UPDATE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucStaType; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - UINT_16 u2AssocId; - UINT_16 u2ListenInterval; - UINT_8 ucNetTypeIndex; - UINT_8 ucDesiredPhyTypeSet; - UINT_16 u2DesiredNonHTRateSet; - UINT_16 u2BSSBasicRateSet; - UINT_8 ucIsQoS; - UINT_8 ucIsUapsdSupported; - UINT_8 ucStaState; - UINT_8 ucMcsSet; - UINT_8 ucSupMcs32; - UINT_8 ucAmpduParam; - UINT_16 u2HtCapInfo; - UINT_16 u2HtExtendedCap; - UINT_32 u4TxBeamformingCap; - UINT_8 ucAselCap; - UINT_8 ucRCPI; - UINT_8 ucNeedResp; - UINT_8 ucUapsdAc; /* b0~3: Trigger enabled, b4~7: Delivery enabled */ - UINT_8 ucUapsdSp; /* 0: all, 1: max 2, 2: max 4, 3: max 6 */ - UINT_8 aucReserved[3]; - /* TBD */ -} CMD_UPDATE_STA_RECORD_T, *P_CMD_UPDATE_STA_RECORD_T; - -typedef struct _CMD_REMOVE_STA_RECORD_T { - UINT_8 ucIndex; - UINT_8 ucReserved; - UINT_8 aucMacAddr[MAC_ADDR_LEN]; -} CMD_REMOVE_STA_RECORD_T, *P_CMD_REMOVE_STA_RECORD_T; - -typedef struct _CMD_INDICATE_PM_BSS_CREATED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 aucReserved[2]; -} CMD_INDICATE_PM_BSS_CREATED, *P_CMD_INDICATE_PM_BSS_CREATED; - -typedef struct _CMD_INDICATE_PM_BSS_CONNECTED_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucDtimPeriod; - UINT_16 u2AssocId; - UINT_16 u2BeaconInterval; - UINT_16 u2AtimWindow; - UINT_8 fgIsUapsdConnection; - UINT_8 ucBmpDeliveryAC; - UINT_8 ucBmpTriggerAC; - UINT_8 aucReserved[1]; -} CMD_INDICATE_PM_BSS_CONNECTED, *P_CMD_INDICATE_PM_BSS_CONNECTED; - -typedef struct _CMD_INDICATE_PM_BSS_ABORT { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} CMD_INDICATE_PM_BSS_ABORT, *P_CMD_INDICATE_PM_BSS_ABORT; - -typedef struct _CMD_BEACON_TEMPLATE_UPDATE { - UINT_8 ucUpdateMethod; // 0: update randomly, 1: update all, 2: delete all (1 and 2 will update directly without search) - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_16 u2Capability; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_BEACON_TEMPLATE_UPDATE, *P_CMD_BEACON_TEMPLATE_UPDATE; - -typedef struct _CMD_SET_WMM_PS_TEST_STRUC_T { - UINT_8 ucNetTypeIndex; - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ -} CMD_SET_WMM_PS_TEST_STRUC_T, *P_CMD_SET_WMM_PS_TEST_STRUC_T; - - -/* Definition for CHANNEL_INFO.ucBand: - * 0: Reserved - * 1: BAND_2G4 - * 2: BAND_5G - * Others: Reserved - */ -typedef struct _CHANNEL_INFO_T { - UINT_8 ucBand; - UINT_8 ucChannelNum; -} CHANNEL_INFO_T, *P_CHANNEL_INFO_T; - -typedef struct _CMD_SCAN_REQ_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; /* BIT(0) wildcard / BIT(1) P2P-wildcard / BIT(2) specific */ - UINT_8 ucSSIDLength; - UINT_8 aucReserved[1]; - UINT_16 u2ChannelMinDwellTime; - UINT_8 aucSSID[32]; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ, *P_CMD_SCAN_REQ; - -typedef struct _CMD_SCAN_REQ_V2_T { - UINT_8 ucSeqNum; - UINT_8 ucNetworkType; - UINT_8 ucScanType; - UINT_8 ucSSIDType; - PARAM_SSID_T arSSID[4]; - UINT_16 u2ProbeDelayTime; - UINT_16 u2ChannelDwellTime; /* For P2P */ - UINT_8 ucChannelType; - UINT_8 ucChannelListNum; - CHANNEL_INFO_T arChannelList[32]; - UINT_16 u2IELen; - UINT_8 aucIE[MAX_IE_LENGTH]; -} CMD_SCAN_REQ_V2, *P_CMD_SCAN_REQ_V2; - -typedef struct _CMD_SCAN_CANCEL_T { - UINT_8 ucSeqNum; - UINT_8 ucIsExtChannel; /* For P2P channel extention. */ - UINT_8 aucReserved[2]; -} CMD_SCAN_CANCEL, *P_CMD_SCAN_CANCEL; - -typedef struct _EVENT_SCAN_DONE_T { - UINT_8 ucSeqNum; - UINT_8 ucSparseChannelValid; - CHANNEL_INFO_T rSparseChannel; -} EVENT_SCAN_DONE, *P_EVENT_SCAN_DONE; - -typedef struct _CMD_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucAction; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4MaxInterval; /* In unit of ms */ - UINT_8 aucBSSID[6]; - UINT_8 aucReserved[2]; -} CMD_CH_PRIVILEGE_T, *P_CMD_CH_PRIVILEGE_T; - -typedef struct _CMD_TX_PWR_T { - INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */ -#if defined(MT6620) - INT_8 acReserved[3]; -#elif defined(MT5931) || defined(MT6628) - INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */ - INT_8 acReserved[2]; -#else - #error "No valid definition!" -#endif - - INT_8 cTxPwr2G4OFDM_BPSK; - INT_8 cTxPwr2G4OFDM_QPSK; - INT_8 cTxPwr2G4OFDM_16QAM; - INT_8 cTxPwr2G4OFDM_Reserved; - INT_8 cTxPwr2G4OFDM_48Mbps; - INT_8 cTxPwr2G4OFDM_54Mbps; - - INT_8 cTxPwr2G4HT20_BPSK; - INT_8 cTxPwr2G4HT20_QPSK; - INT_8 cTxPwr2G4HT20_16QAM; - INT_8 cTxPwr2G4HT20_MCS5; - INT_8 cTxPwr2G4HT20_MCS6; - INT_8 cTxPwr2G4HT20_MCS7; - - INT_8 cTxPwr2G4HT40_BPSK; - INT_8 cTxPwr2G4HT40_QPSK; - INT_8 cTxPwr2G4HT40_16QAM; - INT_8 cTxPwr2G4HT40_MCS5; - INT_8 cTxPwr2G4HT40_MCS6; - INT_8 cTxPwr2G4HT40_MCS7; - - INT_8 cTxPwr5GOFDM_BPSK; - INT_8 cTxPwr5GOFDM_QPSK; - INT_8 cTxPwr5GOFDM_16QAM; - INT_8 cTxPwr5GOFDM_Reserved; - INT_8 cTxPwr5GOFDM_48Mbps; - INT_8 cTxPwr5GOFDM_54Mbps; - - INT_8 cTxPwr5GHT20_BPSK; - INT_8 cTxPwr5GHT20_QPSK; - INT_8 cTxPwr5GHT20_16QAM; - INT_8 cTxPwr5GHT20_MCS5; - INT_8 cTxPwr5GHT20_MCS6; - INT_8 cTxPwr5GHT20_MCS7; - - INT_8 cTxPwr5GHT40_BPSK; - INT_8 cTxPwr5GHT40_QPSK; - INT_8 cTxPwr5GHT40_16QAM; - INT_8 cTxPwr5GHT40_MCS5; - INT_8 cTxPwr5GHT40_MCS6; - INT_8 cTxPwr5GHT40_MCS7; -} CMD_TX_PWR_T, *P_CMD_TX_PWR_T; - -typedef struct _CMD_5G_PWR_OFFSET_T { - INT_8 cOffsetBand0; /* 4.915-4.980G */ - INT_8 cOffsetBand1; /* 5.000-5.080G */ - INT_8 cOffsetBand2; /* 5.160-5.180G */ - INT_8 cOffsetBand3; /* 5.200-5.280G */ - INT_8 cOffsetBand4; /* 5.300-5.340G */ - INT_8 cOffsetBand5; /* 5.500-5.580G */ - INT_8 cOffsetBand6; /* 5.600-5.680G */ - INT_8 cOffsetBand7; /* 5.700-5.825G */ -} CMD_5G_PWR_OFFSET_T, *P_CMD_5G_PWR_OFFSET_T; - -typedef struct _CMD_PWR_PARAM_T { - UINT_32 au4Data[28]; - UINT_32 u4RefValue1; - UINT_32 u4RefValue2; -} CMD_PWR_PARAM_T, *P_CMD_PWR_PARAM_T; - - -typedef struct _CMD_PHY_PARAM_T { - UINT_8 aucData[144]; /* eFuse content */ -} CMD_PHY_PARAM_T, *P_CMD_PHY_PARAM_T; - -typedef struct _CMD_AUTO_POWER_PARAM_T { - UINT_8 ucType; /* 0: Disable 1: Enalbe 0x10: Change paramters */ - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 aucLevelRcpiTh[3]; - UINT_8 aucReserved2[1]; - INT_8 aicLevelPowerOffset[3]; /* signed, in unit of 0.5dBm */ - UINT_8 aucReserved3[1]; - UINT_8 aucReserved4[8]; -} CMD_AUTO_POWER_PARAM_T, *P_CMD_AUTO_POWER_PARAM_T; - - -typedef struct _EVENT_CH_PRIVILEGE_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucTokenID; - UINT_8 ucStatus; - UINT_8 ucPrimaryChannel; - UINT_8 ucRfSco; - UINT_8 ucRfBand; - UINT_8 ucReqType; - UINT_8 ucReserved; - UINT_32 u4GrantInterval; /* In unit of ms */ -} EVENT_CH_PRIVILEGE_T, *P_EVENT_CH_PRIVILEGE_T; - -typedef struct _EVENT_BSS_BEACON_TIMEOUT_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[3]; -} EVENT_BSS_BEACON_TIMEOUT_T, *P_EVENT_BSS_BEACON_TIMEOUT_T; - -typedef struct _EVENT_STA_AGING_TIMEOUT_T { - UINT_8 ucStaRecIdx; - UINT_8 aucReserved[3]; -} EVENT_STA_AGING_TIMEOUT_T, *P_EVENT_STA_AGING_TIMEOUT_T; - -typedef struct _EVENT_NOA_TIMING_T { - UINT_8 fgIsInUse; /* Indicate if this entry is in use or not */ - UINT_8 ucCount; /* Count */ - UINT_8 aucReserved[2]; - - UINT_32 u4Duration; /* Duration */ - UINT_32 u4Interval; /* Interval */ - UINT_32 u4StartTime; /* Start Time */ -} EVENT_NOA_TIMING_T, *P_EVENT_NOA_TIMING_T; - -typedef struct _EVENT_UPDATE_NOA_PARAMS_T { - UINT_8 ucNetTypeIndex; - UINT_8 aucReserved[2]; - UINT_8 fgEnableOppPS; - UINT_16 u2CTWindow; - - UINT_8 ucNoAIndex; - UINT_8 ucNoATimingCount; /* Number of NoA Timing */ - EVENT_NOA_TIMING_T arEventNoaTiming[8/*P2P_MAXIMUM_NOA_COUNT*/]; -} EVENT_UPDATE_NOA_PARAMS_T, *P_EVENT_UPDATE_NOA_PARAMS_T; - -typedef struct _EVENT_AP_OBSS_STATUS_T { - UINT_8 ucNetTypeIndex; - UINT_8 ucObssErpProtectMode; - UINT_8 ucObssHtProtectMode; - UINT_8 ucObssGfOperationMode; - UINT_8 ucObssRifsOperationMode; - UINT_8 ucObssBeaconForcedTo20M; - UINT_8 aucReserved[2]; -} EVENT_AP_OBSS_STATUS_T, *P_EVENT_AP_OBSS_STATUS_T; - -typedef struct _CMD_EDGE_TXPWR_LIMIT_T { - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - INT_8 cReserved; -} CMD_EDGE_TXPWR_LIMIT_T, *P_CMD_EDGE_TXPWR_LIMIT_T; - -typedef struct _CMD_SET_DEVICE_MODE_T { - UINT_16 u2ChipID; - UINT_16 u2Mode; -} CMD_SET_DEVICE_MODE_T, *P_CMD_SET_DEVICE_MODE_T; - - -#if CFG_SUPPORT_RDD_TEST_MODE -typedef struct _CMD_RDD_CH_T { - UINT_8 ucRddTestMode; - UINT_8 ucRddShutCh; - UINT_8 ucRddStartCh; - UINT_8 ucRddStopCh; - UINT_8 ucRddDfs; - UINT_8 ucReserved; - UINT_8 ucReserved1; - UINT_8 ucReserved2; -} CMD_RDD_CH_T, *P_CMD_RDD_CH_T; - -typedef struct _EVENT_RDD_STATUS_T { - UINT_8 ucRddStatus; - UINT_8 aucReserved[3]; -} EVENT_RDD_STATUS_T, *P_EVENT_RDD_STATUS_T; -#endif - -typedef struct _CMD_SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} CMD_SET_TXPWR_CTRL_T, *P_CMD_SET_TXPWR_CTRL_T; - -#if CFG_SUPPORT_BUILD_DATE_CODE -typedef struct _CMD_GET_BUILD_DATE_CODE { - UINT_8 aucReserved[4]; -} CMD_GET_BUILD_DATE_CODE, *P_CMD_GET_BUILD_DATE_CODE; - -typedef struct _EVENT_BUILD_DATE_CODE { - UINT_8 aucDateCode[16]; -} EVENT_BUILD_DATE_CODE, *P_EVENT_BUILD_DATE_CODE; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - - - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -/* for timeout check */ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -#if CFG_SUPPORT_BUILD_DATE_CODE -VOID -nicCmdEventBuildDateCode ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic_init_cmd_event.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic_init_cmd_event.h deleted file mode 100755 index 705b028d9dc6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/nic_init_cmd_event.h +++ /dev/null @@ -1,220 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic_init_cmd_event.h#1 $ -*/ - -/*! \file "nic_init_cmd_event.h" - \brief This file contains the declairation file of the WLAN initialization routines - for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_init_cmd_event.h $ - * - * 09 26 2011 cp.wu - * [WCXRP00001011] [MT6628 Wi-Fi] Firmware Download Agent: make CRC validation as an optional feature - * add definition for disabling CRC32 validation (for MT6628 only) - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 03 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add command/event definitions for initial states - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * -*/ -#ifndef _NIC_INIT_CMD_EVENT_H -#define _NIC_INIT_CMD_EVENT_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define INIT_CMD_STATUS_SUCCESS 0 -#define INIT_CMD_STATUS_REJECTED_INVALID_PARAMS 1 -#define INIT_CMD_STATUS_REJECTED_CRC_ERROR 2 -#define INIT_CMD_STATUS_REJECTED_DECRYPT_FAIL 3 -#define INIT_CMD_STATUS_UNKNOWN 4 - -#define EVENT_HDR_SIZE OFFSET_OF(WIFI_EVENT_T, aucBuffer[0]) - -typedef enum _ENUM_INIT_CMD_ID { - INIT_CMD_ID_DOWNLOAD_BUF = 1, - INIT_CMD_ID_WIFI_START, - INIT_CMD_ID_ACCESS_REG, - INIT_CMD_ID_QUERY_PENDING_ERROR -} ENUM_INIT_CMD_ID, *P_ENUM_INIT_CMD_ID; - -typedef enum _ENUM_INIT_EVENT_ID { - INIT_EVENT_ID_CMD_RESULT = 1, - INIT_EVENT_ID_ACCESS_REG, - INIT_EVENT_ID_PENDING_ERROR -} ENUM_INIT_EVENT_ID, *P_ENUM_INIT_EVENT_ID; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef UINT_8 CMD_STATUS; - -// commands -typedef struct _INIT_WIFI_CMD_T { - UINT_8 ucCID; - UINT_8 ucSeqNum; - UINT_16 u2Reserved; - UINT_8 aucBuffer[0]; -} INIT_WIFI_CMD_T, *P_INIT_WIFI_CMD_T; - -typedef struct _INIT_HIF_TX_HEADER_T { - UINT_16 u2TxByteCount; - UINT_8 ucEtherTypeOffset; - UINT_8 ucCSflags; - INIT_WIFI_CMD_T rInitWifiCmd; -} INIT_HIF_TX_HEADER_T, *P_INIT_HIF_TX_HEADER_T; - -#define DOWNLOAD_BUF_ENCRYPTION_MODE BIT(0) -#define DOWNLOAD_BUF_NO_CRC_CHECKING BIT(30) -#define DOWNLOAD_BUF_ACK_OPTION BIT(31) -typedef struct _INIT_CMD_DOWNLOAD_BUF { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4CRC32; - UINT_32 u4DataMode; - UINT_8 aucBuffer[0]; -} INIT_CMD_DOWNLOAD_BUF, *P_INIT_CMD_DOWNLOAD_BUF; - -typedef struct _INIT_CMD_WIFI_START { - UINT_32 u4Override; - UINT_32 u4Address; -} INIT_CMD_WIFI_START, *P_INIT_CMD_WIFI_START; - -typedef struct _INIT_CMD_ACCESS_REG { - UINT_8 ucSetQuery; - UINT_8 aucReserved[3]; - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_CMD_ACCESS_REG, *P_INIT_CMD_ACCESS_REG; - -// Events -typedef struct _INIT_WIFI_EVENT_T { - UINT_16 u2RxByteCount; - UINT_8 ucEID; - UINT_8 ucSeqNum; - UINT_8 aucBuffer[0]; -} INIT_WIFI_EVENT_T, *P_INIT_WIFI_EVENT_T; - -typedef struct _INIT_HIF_RX_HEADER_T { - INIT_WIFI_EVENT_T rInitWifiEvent; -} INIT_HIF_RX_HEADER_T, *P_INIT_HIF_RX_HEADER_T; - -typedef struct _INIT_EVENT_CMD_RESULT { - UINT_8 ucStatus; // 0: success - // 1: rejected by invalid param - // 2: rejected by incorrect CRC - // 3: rejected by decryption failure - // 4: unknown CMD - UINT_8 aucReserved[3]; -} INIT_EVENT_CMD_RESULT, *P_INIT_EVENT_CMD_RESULT, INIT_EVENT_PENDING_ERROR, *P_INIT_EVENT_PENDING_ERROR; - -typedef struct _INIT_EVENT_ACCESS_REG { - UINT_32 u4Address; - UINT_32 u4Data; -} INIT_EVENT_ACCESS_REG, *P_INIT_EVENT_ACCESS_REG; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _NIC_INIT_CMD_EVENT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/p2p_precomp.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/p2p_precomp.h deleted file mode 100755 index 62db15b8137d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/p2p_precomp.h +++ /dev/null @@ -1,265 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/p2p_precomp.h#1 $ -*/ - -/*! \file p2p_precomp.h - \brief Collection of most compiler flags for p2p driver are described here. - - In this file we collect all compiler flags and detail the p2p driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -#ifndef _P2P_PRECOMP_H -#define _P2P_PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#include "gl_p2p_os.h" - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#include "roaming_fsm.h" - - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#include "wlan_p2p.h" - - - - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" - - -#include "aa_fsm.h" - -#include "cnm_timer.h" - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -/* Dependency: cnm_timer.h (TIMER_T) */ -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" - - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#include "gl_p2p_kal.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /*_P2P_PRECOMP_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/p2p_typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/p2p_typedef.h deleted file mode 100755 index b8e0a391d919..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/p2p_typedef.h +++ /dev/null @@ -1,318 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/p2p_typedef.h#1 $ -*/ - -/*! \file p2p_typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to all MGMT Protocol Stack. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _P2P_TYPEDEF_H -#define _P2P_TYPEDEF_H - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/* -* type definition of pointer to p2p structure -*/ -//typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; -typedef struct _P2P_INFO_T P2P_INFO_T, *P_P2P_INFO_T; - -typedef struct _P2P_FSM_INFO_T P2P_FSM_INFO_T, *P_P2P_FSM_INFO_T; - -typedef struct _P2P_CONNECTION_SETTINGS_T P2P_CONNECTION_SETTINGS_T, *P_P2P_CONNECTION_SETTINGS_T; - - -/* Type definition for function pointer to p2p function*/ -typedef BOOLEAN (*P2P_LAUNCH)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*P2P_REMOVE)( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsWlanLaunched - ); - -typedef BOOLEAN (*KAL_P2P_GET_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_TKIP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_CCMP_CIPHER)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef BOOLEAN (*KAL_P2P_GET_WSC_MODE)( - IN P_GLUE_INFO_T prGlueInfo - ); - -typedef struct net_device* (*KAL_P2P_GET_DEV_HDLR)( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_SET_MULTICAST_WORK_ITEM) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_REGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*P2P_NET_UNREGISTER) ( - P_GLUE_INFO_T prGlueInfo - ); - -typedef VOID (*KAL_P2P_UPDATE_ASSOC_INFO)( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -typedef BOOLEAN (*P2P_VALIDATE_AUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -typedef BOOLEAN (*P2P_VALIDATE_ASSOC_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu4ControlFlags - ); - -typedef VOID (*P2P_RUN_EVENT_AAA_TX_FAIL) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef BOOLEAN (*P2P_PARSE_CHECK_FOR_P2P_INFO_ELEM)( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ); - - -typedef WLAN_STATUS (*P2P_RUN_EVENT_AAA_COMPLETE) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -typedef VOID (*P2P_PROCESS_EVENT_UPDATE_NOA_PARAM) ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ); - -typedef VOID (*SCAN_P2P_PROCESS_BEACON_AND_PROBE_RESP) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ); - -typedef VOID (*P2P_RX_PUBLIC_ACTION_FRAME) ( - P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_RSP_GENERATE_OBSS_SCAN_IE) ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ); - -typedef VOID (*RLM_UPDATE_BW_BY_CH_LIST_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef VOID (*RLM_PROCESS_PUBLIC_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_PROCESS_HT_ACTION)( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ); - -typedef VOID (*RLM_UPDATE_PARAMS_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ); - -typedef VOID (*RLM_HANDLE_OBSS_STATUS_EVENT_PKT) ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ); - - -typedef BOOLEAN (*P2P_FUNC_VALIDATE_PROBE_REQ) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -typedef VOID (*RLM_BSS_INIT_FOR_AP)( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -typedef UINT_32 (*P2P_GET_PROB_RSP_IE_TABLE_SIZE)( - VOID - ); - -typedef PUINT_8 (*P2P_BUILD_REASSOC_REQ_FRAME_COMMON_IES) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ); - - -typedef VOID (*P2P_FUNC_DISCONNECT) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DEAUTH) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_RX_DISASSOC) ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -typedef BOOLEAN (*P2P_FUN_IS_AP_MODE) ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ); - -typedef VOID (*P2P_FSM_RUN_EVENT_BEACON_TIMEOUT) ( - IN P_ADAPTER_T prAdapter - ); - - -typedef VOID (*P2P_FUNC_STORE_ASSOC_RSP_IE_BUFFER) ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); - - -typedef VOID (*P2P_GENERATE_P2P_IE) ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -typedef UINT_32 (*P2P_CALCULATE_P2P_IE_LEN) ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ); - - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /*CFG_ENABLE_WIFI_DIRECT*/ - -#endif /* _P2P_TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/precomp.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/precomp.h deleted file mode 100755 index 9359694df951..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/precomp.h +++ /dev/null @@ -1,420 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/precomp.h#1 $ -*/ - -/*! \file precomp.h - \brief Collection of most compiler flags are described here. - - In this file we collect all compiler flags and detail the driver behavior if - enable/disable such switch or adjust numeric parameters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: precomp.h $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628-specific definitions. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Isolate P2P related function for Hardware Software Bundle - * - * 09 14 2010 chinghwa.yu - * NULL - * Fix BOW_FSM_INFO_T dependence. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 28 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * 1st draft code for RLM module - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge cnm_scan.h and hem_mbox.h - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 03 16 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * build up basic data structure and definitions to support BT-over-WiFi - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 11:30:58 GMT mtk02752 -** add rftest.h for implementing RF test mode in driver land -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-23 22:02:00 GMT mtk02468 -** Added que_mgt.h -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-13 21:58:36 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-21 09:40:11 GMT mtk01461 -** Add nic_cmd_event.h -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-17 20:00:26 GMT mtk01461 -** Add cmd_buf.h -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 18:32:44 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:25 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:38 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _PRECOMP_H -#define _PRECOMP_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" // Include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -#include "debug.h" - -#include "link.h" -#include "queue.h" - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ -#include "wlan_typedef.h" - -#include "mac.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "wlan_def.h" - -#if CFG_SUPPORT_SWCR -#include "swcr.h" -#endif - -/*------------------------------------------------------------------------------ - * .\include\nic - *------------------------------------------------------------------------------ - */ -/* Dependency: wlan_def.h (ENUM_NETWORK_TYPE_T) */ -#include "cmd_buf.h" - -/* Dependency: mac.h (MAC_ADDR_LEN) */ -#include "nic_cmd_event.h" - -/* Dependency: nic_cmd_event.h (P_EVENT_CONNECTION_STATUS) */ -#include "nic.h" - -#include "nic_init_cmd_event.h" - -#include "hif_rx.h" -#include "hif_tx.h" - -#include "nic_tx.h" - -/* Dependency: hif_rx.h (P_HIF_RX_HEADER_T) */ -#include "nic_rx.h" - -#include "que_mgt.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_typedef.h" -#include "p2p_cmd_buf.h" -#include "p2p_nic_cmd_event.h" -#include "p2p_mac.h" -#include "p2p_nic.h" -#endif - - -/*------------------------------------------------------------------------------ - * .\include\mgmt - *------------------------------------------------------------------------------ - */ - -#include "hem_mbox.h" - -#include "scan.h" -#include "bss.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_bow.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "wlan_p2p.h" -#endif - -#include "hal.h" - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#include "rlm.h" -#include "rlm_domain.h" -#include "rlm_protection.h" -#include "rlm_obss.h" -#include "rate.h" -#if CFG_SUPPORT_802_11V -#include "wnm.h" -#endif - -#include "aa_fsm.h" - -#include "cnm_timer.h" - - -#if CFG_ENABLE_BT_OVER_WIFI -#include "bow.h" -#include "bow_fsm.h" -#endif - -#include "pwr_mgt.h" - - -#include "cnm.h" -/* Dependency: aa_fsm.h (ENUM_AA_STATE_T), p2p_fsm.h (WPS_ATTRI_MAX_LEN_DEVICE_NAME) */ -#include "cnm_mem.h" -#include "cnm_scan.h" - - -#if CFG_ENABLE_WIFI_DIRECT -#include "p2p_rlm_obss.h" -#include "p2p_bss.h" -#include "p2p.h" -#include "p2p_fsm.h" -#include "p2p_scan.h" -#include "p2p_state.h" -#include "p2p_func.h" -#include "p2p_rlm.h" -#include "p2p_assoc.h" -#include "p2p_ie.h" -#endif - -#include "privacy.h" - -#include "mib.h" - -#include "auth.h" -#include "assoc.h" - -#if CFG_SUPPORT_ROAMING -#include "roaming_fsm.h" -#endif /* CFG_SUPPORT_ROAMING */ - -#include "ais_fsm.h" - - -#include "adapter.h" - - -#include "que_mgt.h" -#include "rftest.h" - - -#if CFG_RSN_MIGRATION -#include "rsn.h" -#include "sec_fsm.h" -#endif - -#if CFG_SUPPORT_WAPI -#include "wapi.h" -#endif - -/*------------------------------------------------------------------------------ - * NVRAM structure - *------------------------------------------------------------------------------ - */ -#include "CFG_Wifi_File.h" - -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_kal.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PRECOMP_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/pwr_mgt.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/pwr_mgt.h deleted file mode 100755 index 4ee428876cee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/pwr_mgt.h +++ /dev/null @@ -1,187 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/pwr_mgt.h#1 $ -*/ - -/*! \file "pwr_mgt.h" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: pwr_mgt.h $ - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * firmware download load adress & start address are now configured from config.h - * * * due to the different configurations on FPGA and ASIC -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-10 16:39:10 GMT mtk02752 -** disable PM macros temporally -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-29 19:48:37 GMT mtk01084 -** temp remove power management macro -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-08 16:51:11 GMT mtk01084 -** update for power management control macro -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-04-03 14:59:58 GMT mtk01426 -** Add #if CFG_HIF_LOOPBACK_PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:53:10 GMT mtk01084 -** modify ACQUIRE_POWER_CONTROL_FROM_PM() and RECLAIM_POWER_CONTROL_TO_PM() macro -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:32:47 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:20 GMT mtk01084 -** Initial version -** -*/ - -#ifndef _PWR_MGT_H -#define _PWR_MGT_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PM_UAPSD_AC0 (BIT(0)) -#define PM_UAPSD_AC1 (BIT(1)) -#define PM_UAPSD_AC2 (BIT(2)) -#define PM_UAPSD_AC3 (BIT(3)) - -#define PM_UAPSD_ALL (PM_UAPSD_AC0 | PM_UAPSD_AC1 | PM_UAPSD_AC2 | PM_UAPSD_AC3) -#define PM_UAPSD_NONE 0 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PM_PROFILE_SETUP_INFO_T { - /* Profile setup */ - UINT_8 ucBmpDeliveryAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - UINT_8 ucBmpTriggerAC; /* 0: AC_BE, 1: AC_BK, 2: AC_VI, 3: AC_VO */ - - UINT_8 ucUapsdSp; /* Number of triggered packets in UAPSD */ - -} PM_PROFILE_SETUP_INFO_T, *P_PM_PROFILE_SETUP_INFO_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if !CFG_ENABLE_FULL_PM - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) -#else - #define ACQUIRE_POWER_CONTROL_FROM_PM(_prAdapter) \ - { \ - if (_prAdapter->fgIsFwOwn) { \ - nicpmSetDriverOwn(_prAdapter); \ - } \ - /* Increase Block to Enter Low Power Semaphore count */ \ - GLUE_INC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - } - - #define RECLAIM_POWER_CONTROL_TO_PM(_prAdapter, _fgEnableGINT_in_IST) \ - { \ - ASSERT(_prAdapter->u4PwrCtrlBlockCnt != 0); \ - /* Decrease Block to Enter Low Power Semaphore count */ \ - GLUE_DEC_REF_CNT(_prAdapter->u4PwrCtrlBlockCnt); \ - if (_prAdapter->fgWiFiInSleepyState && (_prAdapter->u4PwrCtrlBlockCnt == 0)) { \ - nicpmSetFWOwn(_prAdapter, _fgEnableGINT_in_IST); \ - } \ - } -#endif - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _PWR_MGT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/queue.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/queue.h deleted file mode 100755 index 45cf96e33005..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/queue.h +++ /dev/null @@ -1,229 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/queue.h#1 $ -*/ - -/*! \file queue.h - \brief Definition for singly queue operations. - - In this file we define the singly queue data structure and its - queue operation MACROs. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: queue.h $ - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:46 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _QUEUE_H -#define _QUEUE_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Singly Queue Structures - Entry Part */ -typedef struct _QUE_ENTRY_T { - struct _QUE_ENTRY_T *prNext; - struct _QUE_ENTRY_T *prPrev; /* For Rx buffer reordering used only */ -} QUE_ENTRY_T, *P_QUE_ENTRY_T; - -/* Singly Queue Structures - Queue Part */ -typedef struct _QUE_T { - P_QUE_ENTRY_T prHead; - P_QUE_ENTRY_T prTail; - UINT_32 u4NumElem; -} QUE_T, *P_QUE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define QUEUE_INITIALIZE(prQueue) \ - { \ - (prQueue)->prHead = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - (prQueue)->u4NumElem = 0; \ - } - -#define QUEUE_IS_EMPTY(prQueue) (((P_QUE_T)(prQueue))->prHead == (P_QUE_ENTRY_T)NULL) - -#define QUEUE_IS_NOT_EMPTY(prQueue) ((prQueue)->u4NumElem > 0) - -#define QUEUE_GET_HEAD(prQueue) ((prQueue)->prHead) - -#define QUEUE_GET_TAIL(prQueue) ((prQueue)->prTail) - -#define QUEUE_GET_NEXT_ENTRY(prQueueEntry) ((prQueueEntry)->prNext) - -#define QUEUE_INSERT_HEAD(prQueue, prQueueEntry) \ - { \ - ASSERT(prQueue); \ - ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (prQueue)->prHead; \ - (prQueue)->prHead = (prQueueEntry); \ - if ((prQueue)->prTail == (P_QUE_ENTRY_T)NULL) { \ - (prQueue)->prTail = (prQueueEntry); \ - } \ - ((prQueue)->u4NumElem)++; \ - } - -#define QUEUE_INSERT_TAIL(prQueue, prQueueEntry) \ - { \ - ASSERT(prQueue); \ - ASSERT(prQueueEntry); \ - (prQueueEntry)->prNext = (P_QUE_ENTRY_T)NULL; \ - if ((prQueue)->prTail) { \ - ((prQueue)->prTail)->prNext = (prQueueEntry); \ - } else { \ - (prQueue)->prHead = (prQueueEntry); \ - } \ - (prQueue)->prTail = (prQueueEntry); \ - ((prQueue)->u4NumElem)++; \ - } - -/* NOTE: We assume the queue entry located at the beginning of "prQueueEntry Type", - * so that we can cast the queue entry to other data type without doubts. - * And this macro also decrease the total entry count at the same time. - */ -#define QUEUE_REMOVE_HEAD(prQueue, prQueueEntry, _P_TYPE) \ - { \ - ASSERT(prQueue); \ - prQueueEntry = (_P_TYPE)((prQueue)->prHead); \ - if (prQueueEntry) { \ - (prQueue)->prHead = ((P_QUE_ENTRY_T)(prQueueEntry))->prNext; \ - if ((prQueue)->prHead == (P_QUE_ENTRY_T)NULL){ \ - (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \ - } \ - ((P_QUE_ENTRY_T)(prQueueEntry))->prNext = (P_QUE_ENTRY_T)NULL; \ - ((prQueue)->u4NumElem)--; \ - } \ - } - -#define QUEUE_MOVE_ALL(prDestQueue, prSrcQueue) \ - { \ - ASSERT(prDestQueue); \ - ASSERT(prSrcQueue); \ - *(P_QUE_T)prDestQueue = *(P_QUE_T)prSrcQueue; \ - QUEUE_INITIALIZE(prSrcQueue); \ - } - -#define QUEUE_CONCATENATE_QUEUES(prDestQueue, prSrcQueue) \ - { \ - ASSERT(prDestQueue); \ - ASSERT(prSrcQueue); \ - if (prSrcQueue->u4NumElem > 0) { \ - if ((prDestQueue)->prTail) { \ - ((prDestQueue)->prTail)->prNext = (prSrcQueue)->prHead; \ - } else { \ - (prDestQueue)->prHead = (prSrcQueue)->prHead; \ - } \ - (prDestQueue)->prTail = (prSrcQueue)->prTail; \ - ((prDestQueue)->u4NumElem) += ((prSrcQueue)->u4NumElem); \ - QUEUE_INITIALIZE(prSrcQueue); \ - } \ - } - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _QUEUE_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/rftest.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/rftest.h deleted file mode 100755 index 19dd2c0520f1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/rftest.h +++ /dev/null @@ -1,357 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/rftest.h#1 $ -*/ - -/*! \file "rftest.h" - \brief definitions for RF Productino test - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rftest.h $ - * - * 12 20 2011 cp.wu - * [WCXRP00001144] [MT6620 Wi-Fi][Driver][Firmware] Add RF_FUNC_ID for exposing device and related version information - * add driver implementations for RF_AT_FUNCID_FW_INFO & RF_AT_FUNCID_DRV_INFO - * to expose version information - * - * 08 04 2010 cp.wu - * NULL - * add an extra parameter to rftestQueryATInfo 'cause it's necessary to pass u4FuncData for query request. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-08 17:35:11 GMT mtk02752 -** * comment out RF test which is not supported on MT6620 -** + API decalre for rftest -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-12-08 11:29:07 GMT mtk02752 -** definitions for RF test mode -** -*/ -#ifndef _RFTEST_H -#define _RFTEST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -// Table Version -#define RF_AUTO_TEST_FUNCTION_TABLE_VERSION 0x01000001 - -// Power -#define RF_AT_PARAM_POWER_MASK BITS(0,7) -#define RF_AT_PARAM_POWER_MAX RF_AT_PARAM_POWER_MASK - -// Rate -#define RF_AT_PARAM_RATE_MCS_MASK BIT(31) -#define RF_AT_PARAM_RATE_MASK BITS(0,7) -#define RF_AT_PARAM_RATE_CCK_MAX 3 -#define RF_AT_PARAM_RATE_1M 0 -#define RF_AT_PARAM_RATE_2M 1 -#define RF_AT_PARAM_RATE_5_5M 2 -#define RF_AT_PARAM_RATE_11M 3 -#define RF_AT_PARAM_RATE_6M 4 -#define RF_AT_PARAM_RATE_9M 5 -#define RF_AT_PARAM_RATE_12M 6 -#define RF_AT_PARAM_RATE_18M 7 -#define RF_AT_PARAM_RATE_24M 8 -#define RF_AT_PARAM_RATE_36M 9 -#define RF_AT_PARAM_RATE_48M 10 -#define RF_AT_PARAM_RATE_54M 11 - -// Antenna -#define RF_AT_PARAM_ANTENNA_ID_MASK BITS(0,7) -#define RF_AT_PARAM_ANTENNA_ID_MAX 1 - -// Packet Length -#define RF_AT_PARAM_TX_80211HDR_BYTE_MAX (32) -#define RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX (2048) - -#define RF_AT_PARAM_TX_PKTLEN_BYTE_DEFAULT 1024 -#define RF_AT_PARAM_TX_PKTLEN_BYTE_MAX \ - ((UINT_16)(RF_AT_PARAM_TX_80211HDR_BYTE_MAX + RF_AT_PARAM_TX_80211PAYLOAD_BYTE_MAX )) - -// Packet Count -#define RF_AT_PARAM_TX_PKTCNT_DEFAULT 1000 -#define RF_AT_PARAM_TX_PKTCNT_UNLIMITED 0 - -// Packet Interval -#define RF_AT_PARAM_TX_PKT_INTERVAL_US_DEFAULT 50 - -// ALC -#define RF_AT_PARAM_ALC_DISABLE 0 -#define RF_AT_PARAM_ALC_ENABLE 1 - -// TXOP -#define RF_AT_PARAM_TXOP_DEFAULT 0 -#define RF_AT_PARAM_TXOPQUE_QMASK BITS(16,31) -#define RF_AT_PARAM_TXOPQUE_TMASK BITS(0,15) -#define RF_AT_PARAM_TXOPQUE_AC0 (0<<16) -#define RF_AT_PARAM_TXOPQUE_AC1 (1<<16) -#define RF_AT_PARAM_TXOPQUE_AC2 (2<<16) -#define RF_AT_PARAM_TXOPQUE_AC3 (3<<16) -#define RF_AT_PARAM_TXOPQUE_AC4 (4<<16) -#define RF_AT_PARAM_TXOPQUE_QOFFSET 16 - -// Retry Limit -#define RF_AT_PARAM_TX_RETRY_DEFAULT 0 -#define RF_AT_PARAM_TX_RETRY_MAX 6 - -// QoS Queue -#define RF_AT_PARAM_QOSQUE_AC0 0 -#define RF_AT_PARAM_QOSQUE_AC1 1 -#define RF_AT_PARAM_QOSQUE_AC2 2 -#define RF_AT_PARAM_QOSQUE_AC3 3 -#define RF_AT_PARAM_QOSQUE_AC4 4 -#define RF_AT_PARAM_QOSQUE_DEFAULT RF_AT_PARAM_QOSQUE_AC0 - -// Bandwidth -#define RF_AT_PARAM_BANDWIDTH_20MHZ 0 -#define RF_AT_PARAM_BANDWIDTH_40MHZ 1 -#define RF_AT_PARAM_BANDWIDTH_U20_IN_40MHZ 2 -#define RF_AT_PARAM_BANDWIDTH_D20_IN_40MHZ 3 -#define RF_AT_PARAM_BANDWIDTH_DEFAULT RF_AT_PARAM_BANDWIDTH_20MHZ - -// GI (Guard Interval) -#define RF_AT_PARAM_GI_800NS 0 -#define RF_AT_PARAM_GI_400NS 1 -#define RF_AT_PARAM_GI_DEFAULT RF_AT_PARAM_GI_800NS - -// STBC -#define RF_AT_PARAM_STBC_DISABLE 0 -#define RF_AT_PARAM_STBC_ENABLE 1 - -// RIFS -#define RF_AT_PARAM_RIFS_DISABLE 0 -#define RF_AT_PARAM_RIFS_ENABLE 1 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -// Function ID List -typedef enum _ENUM_RF_AT_FUNCID_T { - RF_AT_FUNCID_VERSION = 0, - RF_AT_FUNCID_COMMAND, - RF_AT_FUNCID_POWER, - RF_AT_FUNCID_RATE, - RF_AT_FUNCID_PREAMBLE, - RF_AT_FUNCID_ANTENNA, - RF_AT_FUNCID_PKTLEN, - RF_AT_FUNCID_PKTCNT, - RF_AT_FUNCID_PKTINTERVAL, - RF_AT_FUNCID_TEMP_COMPEN, - RF_AT_FUNCID_TXOPLIMIT, - RF_AT_FUNCID_ACKPOLICY, - RF_AT_FUNCID_PKTCONTENT, - RF_AT_FUNCID_RETRYLIMIT, - RF_AT_FUNCID_QUEUE, - RF_AT_FUNCID_BANDWIDTH, - RF_AT_FUNCID_GI, - RF_AT_FUNCID_STBC, - RF_AT_FUNCID_CHNL_FREQ, - RF_AT_FUNCID_RIFS, - RF_AT_FUNCID_TRSW_TYPE, - RF_AT_FUNCID_RF_SX_SHUTDOWN, - RF_AT_FUNCID_PLL_SHUTDOWN, - RF_AT_FUNCID_SLOW_CLK_MODE, - RF_AT_FUNCID_ADC_CLK_MODE, - RF_AT_FUNCID_MEASURE_MODE, - RF_AT_FUNCID_VOLT_COMPEN, - RF_AT_FUNCID_DPD_TX_GAIN, - RF_AT_FUNCID_DPD_MODE, - RF_AT_FUNCID_TSSI_MODE, - RF_AT_FUNCID_TX_GAIN_CODE, - RF_AT_FUNCID_TX_PWR_MODE, - - /* Query command */ - RF_AT_FUNCID_TXED_COUNT = 32, - RF_AT_FUNCID_TXOK_COUNT, - RF_AT_FUNCID_RXOK_COUNT, - RF_AT_FUNCID_RXERROR_COUNT, - RF_AT_FUNCID_RESULT_INFO, - RF_AT_FUNCID_TRX_IQ_RESULT, - RF_AT_FUNCID_TSSI_RESULT, - RF_AT_FUNCID_DPD_RESULT, - RF_AT_FUNCID_RXV_DUMP, - RF_AT_FUNCID_RX_PHY_STATIS, - RF_AT_FUNCID_MEASURE_RESULT, - RF_AT_FUNCID_TEMP_SENSOR, - RF_AT_FUNCID_VOLT_SENSOR, - RF_AT_FUNCID_READ_EFUSE, - RF_AT_FUNCID_RX_RSSI, - RF_AT_FUNCID_FW_INFO, - RF_AT_FUNCID_DRV_INFO, - - /* Set command */ - RF_AT_FUNCID_SET_DPD_RESULT = 64, - RF_AT_FUNCID_SET_CW_MODE, - RF_AT_FUNCID_SET_JAPAN_CH14_FILTER, - RF_AT_FUNCID_WRITE_EFUSE, - RF_AT_FUNCID_SET_MAC_ADDRESS - -} ENUM_RF_AT_FUNCID_T; - -// Command -typedef enum _ENUM_RF_AT_COMMAND_T { - RF_AT_COMMAND_STOPTEST = 0, - RF_AT_COMMAND_STARTTX, - RF_AT_COMMAND_STARTRX, - RF_AT_COMMAND_RESET, - RF_AT_COMMAND_OUTPUT_POWER, /* Payload */ - RF_AT_COMMAND_LO_LEAKAGE, /* Local freq is renamed to Local leakage */ - RF_AT_COMMAND_CARRIER_SUPPR, /* OFDM (LTF/STF), CCK (PI,PI/2) */ - RF_AT_COMMAND_TRX_IQ_CAL, - RF_AT_COMMAND_TSSI_CAL, - RF_AT_COMMAND_DPD_CAL, - RF_AT_COMMAND_CW, - RF_AT_COMMAND_NUM -} ENUM_RF_AT_COMMAND_T; - -// Preamble -typedef enum _ENUM_RF_AT_PREAMBLE_T { - RF_AT_PREAMBLE_NORMAL = 0, - RF_AT_PREAMBLE_CCK_SHORT, - RF_AT_PREAMBLE_11N_MM, - RF_AT_PREAMBLE_11N_GF, - RF_AT_PREAMBLE_NUM -} ENUM_RF_AT_PREAMBLE_T; - -// Ack Policy -typedef enum _ENUM_RF_AT_ACK_POLICY_T { - RF_AT_ACK_POLICY_NORMAL = 0, - RF_AT_ACK_POLICY_NOACK, - RF_AT_ACK_POLICY_NOEXPLICTACK, - RF_AT_ACK_POLICY_BLOCKACK, - RF_AT_ACK_POLICY_NUM -} ENUM_RF_AT_ACK_POLICY_T; - -typedef enum _ENUM_RF_AUTOTEST_STATE_T { - RF_AUTOTEST_STATE_STANDBY = 0, - RF_AUTOTEST_STATE_TX, - RF_AUTOTEST_STATE_RX, - RF_AUTOTEST_STATE_RESET, - RF_AUTOTEST_STATE_OUTPUT_POWER, - RF_AUTOTEST_STATE_LOCA_FREQUENCY, - RF_AUTOTEST_STATE_CARRIER_SUPRRESION, - RF_AUTOTEST_STATE_NUM -} ENUM_RF_AUTOTEST_STATE_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -rftestSetATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData - ); - -WLAN_STATUS -rftestQueryATInfo( - IN P_ADAPTER_T prAdapter, - UINT_32 u4FuncIndex, - UINT_32 u4FuncData, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -WLAN_STATUS -rftestSetFrequency( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4FreqInKHz, - IN PUINT_32 pu4SetInfoLen - ); - -#endif /* _RFTEST_H */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/typedef.h deleted file mode 100755 index 45c6bd6c6281..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/typedef.h +++ /dev/null @@ -1,277 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/typedef.h#1 $ -*/ - -/*! \file typedef.h - \brief Declaration of data type and return values of internal protocol stack. - - In this file we declare the data type and return values which will be exported - to the GLUE Layer. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: typedef.h $ - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add necessary changes to driver data paths. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add definitions for module migration. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add aa_fsm.h, ais_fsm.h, bss.h, mib.h and scan.h. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:41:37 GMT mtk01461 -** Update PACKET_INFO_INIT for TX Path -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:30:17 GMT mtk01461 -** Add parameter in PACKET_INFO_T for HIF Loopback -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:22 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:28 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:54 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _TYPEDEF_H -#define _TYPEDEF_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/* ieee80211.h of linux has duplicated definitions */ -#if defined(WLAN_STATUS_SUCCESS) -#undef WLAN_STATUS_SUCCESS -#endif - -#define WLAN_STATUS_SUCCESS ((WLAN_STATUS) 0x00000000L) -#define WLAN_STATUS_PENDING ((WLAN_STATUS) 0x00000103L) -#define WLAN_STATUS_NOT_ACCEPTED ((WLAN_STATUS) 0x00010003L) - -#define WLAN_STATUS_MEDIA_CONNECT ((WLAN_STATUS) 0x4001000BL) -#define WLAN_STATUS_MEDIA_DISCONNECT ((WLAN_STATUS) 0x4001000CL) -#define WLAN_STATUS_MEDIA_SPECIFIC_INDICATION ((WLAN_STATUS) 0x40010012L) - -#define WLAN_STATUS_SCAN_COMPLETE ((WLAN_STATUS) 0x60010001L) -#define WLAN_STATUS_MSDU_OK ((WLAN_STATUS) 0x60010002L) - -/* TODO(Kevin): double check if 0x60010001 & 0x60010002 is proprietary */ -#define WLAN_STATUS_ROAM_OUT_FIND_BEST ((WLAN_STATUS) 0x60010101L) -#define WLAN_STATUS_ROAM_DISCOVERY ((WLAN_STATUS) 0x60010102L) - -#define WLAN_STATUS_FAILURE ((WLAN_STATUS) 0xC0000001L) -#define WLAN_STATUS_RESOURCES ((WLAN_STATUS) 0xC000009AL) -#define WLAN_STATUS_NOT_SUPPORTED ((WLAN_STATUS) 0xC00000BBL) - -#define WLAN_STATUS_MULTICAST_FULL ((WLAN_STATUS) 0xC0010009L) -#define WLAN_STATUS_INVALID_PACKET ((WLAN_STATUS) 0xC001000FL) -#define WLAN_STATUS_ADAPTER_NOT_READY ((WLAN_STATUS) 0xC0010011L) -#define WLAN_STATUS_NOT_INDICATING ((WLAN_STATUS) 0xC0010013L) -#define WLAN_STATUS_INVALID_LENGTH ((WLAN_STATUS) 0xC0010014L) -#define WLAN_STATUS_INVALID_DATA ((WLAN_STATUS) 0xC0010015L) -#define WLAN_STATUS_BUFFER_TOO_SHORT ((WLAN_STATUS) 0xC0010016L) - -#define WLAN_STATUS_BWCS_UPDATE ((WLAN_STATUS) 0xC0010017L) - -#define WLAN_STATUS_CONNECT_INDICATION ((WLAN_STATUS) 0xC0010018L) -/* NIC status flags */ -#define ADAPTER_FLAG_HW_ERR 0x00400000 - -/* Type Length */ -#define TL_IPV4 0x0008 -#define TL_IPV6 0xDD86 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for GLUE_INFO structure */ -typedef struct _GLUE_INFO_T GLUE_INFO_T, *P_GLUE_INFO_T; - -/* Type definition for WLAN STATUS */ -typedef UINT_32 WLAN_STATUS, *P_WLAN_STATUS; - -/* Type definition for ADAPTER structure */ -typedef struct _ADAPTER_T ADAPTER_T, *P_ADAPTER_T; - -/* Type definition for MESSAGE HEADER structure */ -typedef struct _MSG_HDR_T MSG_HDR_T, *P_MSG_HDR_T; - -/* Type definition for Pointer to OS Native Packet */ -typedef void *P_NATIVE_PACKET; - -/* Type definition for STA_RECORD_T structure to handle the connectivity and packet reception - * for a particular STA. - */ -typedef struct _STA_RECORD_T STA_RECORD_T, *P_STA_RECORD_T, **PP_STA_RECORD_T; - -/* CMD_INFO_T is used by Glue Layer to send a cluster of Command(OID) information to - * the TX Path to reduce the parameters of a function call. - */ -typedef struct _CMD_INFO_T CMD_INFO_T, *P_CMD_INFO_T; - -/* Following typedef should be removed later, because Glue Layer should not - * be aware of following data type. - */ -typedef struct _SW_RFB_T SW_RFB_T, *P_SW_RFB_T, **PP_SW_RFB_T; - -typedef struct _MSDU_INFO_T MSDU_INFO_T, *P_MSDU_INFO_T; - -typedef struct _REG_ENTRY_T REG_ENTRY_T, *P_REG_ENTRY_T; - -/* IST handler definition */ -typedef VOID (*IST_EVENT_FUNCTION)(P_ADAPTER_T); - -/* Type definition for function pointer of timer handler */ -typedef VOID (*PFN_TIMER_CALLBACK)(IN P_GLUE_INFO_T); - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#endif /* _TYPEDEF_H */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_bow.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_bow.h deleted file mode 100755 index bfa579b6ce9c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_bow.h +++ /dev/null @@ -1,587 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/wlan_bow.h#1 $ -*/ - -/*! \file "wlan_bow.h" - \brief This file contains the declairations of 802.11 PAL - command processing routines for - MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wlan_bow.h $ - * - * 05 25 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add BoW Cancel Scan Request and Turn On deactive network function. - * - * 05 23 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Add some BoW error handling. - * - * 05 21 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Protect BoW connection establishment. - * - * 05 17 2011 terry.wu - * [WCXRP00000730] [MT6620 Wi-Fi][BoW] Send deauth while disconnecting - * Send deauth while disconnecting BoW link. - * - * 05 06 2011 terry.wu - * [WCXRP00000707] [MT6620 Wi-Fi][Driver] Fix BoW Multiple Physical Link connect/disconnect issue - * Fix BoW Multiple Physical Link connect/disconnect issue. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 02 16 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add bowNotifyAllLinkDisconnected interface and change channel grant procedure for bow starting.. - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 11 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update BOW Activity Report structure and bug fix. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * 1) all BT physical handles shares the same RSSI/Link Quality. - * 2) simplify BT command composing - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -#ifndef _WLAN_BOW_H -#define _WLAN_BOW_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "nic/bow.h" -#include "nic/cmd_buf.h" - -#if CFG_ENABLE_BT_OVER_WIFI -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define BOWCMD_STATUS_SUCCESS 0 -#define BOWCMD_STATUS_FAILURE 1 -#define BOWCMD_STATUS_UNACCEPTED 2 -#define BOWCMD_STATUS_INVALID 3 -#define BOWCMD_STATUS_TIMEOUT 4 - -#define BOW_WILDCARD_SSID "AMP" -#define BOW_WILDCARD_SSID_LEN 3 -#define BOW_SSID_LEN 21 - - /* 0: query, 1: setup, 2: destroy */ -#define BOW_QUERY_CMD 0 -#define BOW_SETUP_CMD 1 -#define BOW_DESTROY_CMD 2 - -#define BOW_INITIATOR 0 -#define BOW_RESPONDER 1 - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -typedef struct _BOW_TABLE_T { - UINT_8 ucAcquireID; - BOOLEAN fgIsValid; - ENUM_BOW_DEVICE_STATE eState; - UINT_8 aucPeerAddress[6]; - //UINT_8 ucRole; - //UINT_8 ucChannelNum; - UINT_16 u2Reserved; -} BOW_TABLE_T, *P_BOW_TABLE_T; - -typedef WLAN_STATUS (*PFN_BOW_CMD_HANDLE)(P_ADAPTER_T, P_AMPC_COMMAND); - -typedef struct _BOW_CMD_T { - UINT_8 uCmdID; - PFN_BOW_CMD_HANDLE pfCmdHandle; -} BOW_CMD_T, *P_BOW_CMD_T; - -typedef struct _BOW_EVENT_ACTIVITY_REPORT_T { - UINT_8 ucReason; - UINT_8 aucReserved; - UINT_8 aucPeerAddress[6]; -} BOW_EVENT_ACTIVITY_REPORT_T, *P_BOW_EVENT_ACTIVITY_REPORT_T; - -/* -ucReason: 0: success - 1: general failure - 2: too much time (> 2/3 second totally) requested for scheduling. - Others: reserved. -*/ - -typedef struct _BOW_EVENT_SYNC_TSF_T { - UINT_64 u4TsfTime; - UINT_32 u4TsfSysTime; - UINT_32 u4ScoTime; - UINT_32 u4ScoSysTime; - } BOW_EVENT_SYNC_TSF_T, *P_BOW_EVENT_SYNC_TSF_T; - -typedef struct _BOW_ACTIVITY_REPORT_BODY_T { - UINT_32 u4StartTime; - UINT_32 u4Duration; - UINT_32 u4Periodicity; - } BOW_ACTIVITY_REPORT_BODY_T, *P_BOW_ACTIVITY_REPORT_BODY_T; - -typedef struct _BOW_ACTIVITY_REPORT_T { - UINT_8 aucPeerAddress[6]; - UINT_8 ucScheduleKnown; - UINT_8 ucNumReports; - BOW_ACTIVITY_REPORT_BODY_T arBowActivityReportBody[MAX_ACTIVITY_REPORT]; - } BOW_ACTIVITY_REPORT_T, *P_BOW_ACTIVITY_REPORT_T; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Firmware Command Packer */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendSetQueryBowCmd ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucCID, - BOOLEAN fgSetQuery, - BOOLEAN fgNeedResp, - PFN_CMD_DONE_HANDLER pfCmdDoneHandler, - PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, - UINT_32 u4SetQueryInfoLen, - PUINT_8 pucInfoBuffer, - IN UINT_8 ucSeqNumber - ); - - -/*--------------------------------------------------------------*/ -/* Command Dispatcher */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanbowHandleCommand( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -bowCmdGetMacStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetupConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdDestroyConnection( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdSetPTK( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadRSSI( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdReadLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdShortRangeMode( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -WLAN_STATUS -bowCmdGetChannelList( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd - ); - -VOID -wlanbowCmdEventSetStatus( - IN P_ADAPTER_T prAdapter, - IN P_AMPC_COMMAND prCmd, - IN UINT_8 ucEventBuf - ); - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ -VOID -wlanbowCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkConnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventLinkDisconnected ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventSetSetupConnection ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadLinkQuality ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdEventReadRssi ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanbowCmdTimeoutHandler ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -bowStopping( - IN P_ADAPTER_T prAdapter); - -VOID -bowStarting ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowAssignSsid ( - IN PUINT_8 pucSsid, - IN PUINT_8 pucSsidLen - ); - -BOOLEAN -bowValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ); - -VOID -bowSendBeacon( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ); - -VOID -bowResponderScan( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowResponderScanDone( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowResponderCancelScan ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsChannelExtention - ); - -VOID -bowResponderJoin( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ); - -VOID -bowFsmRunEventJoinComplete( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowIndicationOfMediaStateToHost( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ); - -VOID -bowRunEventAAATxFail( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventAAAComplete( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ); - -WLAN_STATUS -bowRunEventRxDeAuth ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ); - -VOID -bowDisconnectLink ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -BOOLEAN -bowValidateAssocReq( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ); - -BOOLEAN -bowValidateAuth( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ); - -VOID -bowRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ); - -VOID -bowRequestCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowReleaseCh ( - IN P_ADAPTER_T prAdapter - ); - -VOID -bowChGrantedTimeout( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ); - -BOOLEAN -bowNotifyAllLinkDisconnected ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -bowCheckBowTableIfVaild( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowGetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - OUT P_BOW_TABLE_T prBowTable - ); - -BOOLEAN -bowGetBowTableEntryByPeerAddress( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - OUT PUINT_8 pucBowTableIdx - ); - -BOOLEAN -bowGetBowTableFreeEntry( - IN P_ADAPTER_T prAdapter, - OUT PUINT_8 pucBowTableIdx - ); - -ENUM_BOW_DEVICE_STATE -bowGetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6] - ); - -BOOLEAN -bowSetBowTableState( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucPeerAddress[6], - IN ENUM_BOW_DEVICE_STATE eState - ); - - -BOOLEAN -bowSetBowTableContent( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucBowTableIdx, - IN P_BOW_TABLE_T prBowTable - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_BOW_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_lib.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_lib.h deleted file mode 100755 index bf307a6d0948..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_lib.h +++ /dev/null @@ -1,1098 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/wlan_lib.h#1 $ -*/ - -/*! \file "wlan_lib.h" - \brief The declaration of the functions of the wlanAdpater objects - - Detail description. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wlan_lib.h $ -** -** 09 14 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync changes on roaming to an unindicated BSS under cfg80211. -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync for NVRAM warning scan result generation for CFG80211. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 06 08 2012 eason.tsai - * NULL - * Nvram context covert from 6620 to 6628 for old 6620 meta tool - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * eliminate win32 native data types. - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 10 03 2011 cp.wu - * [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware downloading aggregated path. - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 25 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add DFS switch. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 15 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * support to load different firmware image for E3/E4/E5 and E6 ASIC on win32 platforms. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 22 2011 jeffrey.chang - * [WCXRP00000864] [MT5931] Add command to adjust OSC stable time - * modify driver to set OSC stable time after f/w download - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Support current measure mode, assigned by registry (XP only). - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * divide a single function into 2 part to surpress a weird compiler warning from gcc-4.4.0 - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 09 24 2010 cp.wu - * [WCXRP00000057] [MT6620 Wi-Fi][Driver] Modify online scan to a run-time switchable feature - * Modify online scan as a run-time adjustable option (for Windows, in registry) - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 26 2010 yuche.tsai - * NULL - * Add AT GO test configure mode under WinXP. - * Please enable 1. CFG_ENABLE_WIFI_DIRECT, 2. CFG_TEST_WIFI_DIRECT_GO, 3. CFG_SUPPORT_AAA - * - * 08 25 2010 george.huang - * NULL - * . - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * simplify timer usage. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add extra 64 adjustable parameters for CoEX scenario. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * 2) add 2 kal API for later integration - * - * 04 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change to use WIFI_TCM_ALWAYS_ON as firmware image - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add two option for ACK and ENCRYPTION for firmware download - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * separate wlanProcesQueuePacket() into 2 APIs upon request - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add new API: wlanProcessQueuedPackets() - * - * 02 11 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. add logic for firmware download - * * * 2. firmware image filename and start/load address are now retrieved from registry - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * 4) nicRxWaitResponse() revised - * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * 4. correct some HAL implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:39:55 GMT mtk02752 -** eliminate unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-10-13 21:58:41 GMT mtk01084 -** update for new macro define -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-05-19 10:43:06 GMT mtk01461 -** Add wlanReleasePendingOid() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-13 16:38:44 GMT mtk01084 -** add WIFI start function -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-08 16:51:14 GMT mtk01084 -** Update for the image download part -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:57:38 GMT mtk01461 -** Add wlanSendLeftClusteredFrames() for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-23 00:31:02 GMT mtk01461 -** Add declaration of FW Image download reference code -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:08:31 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:04 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_LIB_H -#define _WLAN_LIB_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "CFG_Wifi_File.h" -#include "rlm_domain.h" -#include "wlan_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define MAX_NUM_GROUP_ADDR 32 /* max number of group addresses */ - - - -#define TX_CS_TCP_UDP_GEN BIT(1) -#define TX_CS_IP_GEN BIT(0) - - -#define CSUM_OFFLOAD_EN_TX_TCP BIT(0) -#define CSUM_OFFLOAD_EN_TX_UDP BIT(1) -#define CSUM_OFFLOAD_EN_TX_IP BIT(2) -#define CSUM_OFFLOAD_EN_RX_TCP BIT(3) -#define CSUM_OFFLOAD_EN_RX_UDP BIT(4) -#define CSUM_OFFLOAD_EN_RX_IPv4 BIT(5) -#define CSUM_OFFLOAD_EN_RX_IPv6 BIT(6) -#define CSUM_OFFLOAD_EN_TX_MASK BITS(0,2) -#define CSUM_OFFLOAD_EN_ALL BITS(0,6) - -/* TCP, UDP, IP Checksum */ -#define RX_CS_TYPE_UDP BIT(7) -#define RX_CS_TYPE_TCP BIT(6) -#define RX_CS_TYPE_IPv6 BIT(5) -#define RX_CS_TYPE_IPv4 BIT(4) - -#define RX_CS_STATUS_UDP BIT(3) -#define RX_CS_STATUS_TCP BIT(2) -#define RX_CS_STATUS_IP BIT(0) - -#define CSUM_NOT_SUPPORTED 0x0 - -#define TXPWR_USE_PDSLOPE 0 - -/* NVRAM error code definitions */ -#define NVRAM_ERROR_VERSION_MISMATCH BIT(1) -#define NVRAM_ERROR_INVALID_TXPWR BIT(2) -#define NVRAM_ERROR_INVALID_DPD BIT(3) -#define NVRAM_ERROR_INVALID_MAC_ADDR BIT(4) - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC) ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_CSUM_TYPE_T { - CSUM_TYPE_IPV4, - CSUM_TYPE_IPV6, - CSUM_TYPE_TCP, - CSUM_TYPE_UDP, - CSUM_TYPE_NUM -} ENUM_CSUM_TYPE_T, *P_ENUM_CSUM_TYPE_T; - -typedef enum _ENUM_CSUM_RESULT_T { - CSUM_RES_NONE, - CSUM_RES_SUCCESS, - CSUM_RES_FAILED, - CSUM_RES_NUM -} ENUM_CSUM_RESULT_T, *P_ENUM_CSUM_RESULT_T; - -typedef enum _ENUM_PHY_MODE_T { - ENUM_PHY_2G4_CCK, - ENUM_PHY_2G4_OFDM_BPSK, - ENUM_PHY_2G4_OFDM_QPSK, - ENUM_PHY_2G4_OFDM_16QAM, - ENUM_PHY_2G4_OFDM_48M, - ENUM_PHY_2G4_OFDM_54M, - ENUM_PHY_2G4_HT20_BPSK, - ENUM_PHY_2G4_HT20_QPSK, - ENUM_PHY_2G4_HT20_16QAM, - ENUM_PHY_2G4_HT20_MCS5, - ENUM_PHY_2G4_HT20_MCS6, - ENUM_PHY_2G4_HT20_MCS7, - ENUM_PHY_2G4_HT40_BPSK, - ENUM_PHY_2G4_HT40_QPSK, - ENUM_PHY_2G4_HT40_16QAM, - ENUM_PHY_2G4_HT40_MCS5, - ENUM_PHY_2G4_HT40_MCS6, - ENUM_PHY_2G4_HT40_MCS7, - ENUM_PHY_5G_OFDM_BPSK, - ENUM_PHY_5G_OFDM_QPSK, - ENUM_PHY_5G_OFDM_16QAM, - ENUM_PHY_5G_OFDM_48M, - ENUM_PHY_5G_OFDM_54M, - ENUM_PHY_5G_HT20_BPSK, - ENUM_PHY_5G_HT20_QPSK, - ENUM_PHY_5G_HT20_16QAM, - ENUM_PHY_5G_HT20_MCS5, - ENUM_PHY_5G_HT20_MCS6, - ENUM_PHY_5G_HT20_MCS7, - ENUM_PHY_5G_HT40_BPSK, - ENUM_PHY_5G_HT40_QPSK, - ENUM_PHY_5G_HT40_16QAM, - ENUM_PHY_5G_HT40_MCS5, - ENUM_PHY_5G_HT40_MCS6, - ENUM_PHY_5G_HT40_MCS7, - ENUM_PHY_MODE_NUM -} ENUM_PHY_MODE_T, *P_ENUM_PHY_MODE_T; - -typedef enum _ENUM_POWER_SAVE_POLL_MODE_T { - ENUM_POWER_SAVE_POLL_DISABLE, - ENUM_POWER_SAVE_POLL_LEGACY_NULL, - ENUM_POWER_SAVE_POLL_QOS_NULL, - ENUM_POWER_SAVE_POLL_NUM -} ENUM_POWER_SAVE_POLL_MODE_T, *P_ENUM_POWER_SAVE_POLL_MODE_T; - -typedef enum _ENUM_AC_TYPE_T { - ENUM_AC_TYPE_AC0, - ENUM_AC_TYPE_AC1, - ENUM_AC_TYPE_AC2, - ENUM_AC_TYPE_AC3, - ENUM_AC_TYPE_AC4, - ENUM_AC_TYPE_AC5, - ENUM_AC_TYPE_AC6, - ENUM_AC_TYPE_BMC, - ENUM_AC_TYPE_NUM -} ENUM_AC_TYPE_T, *P_ENUM_AC_TYPE_T; - -typedef enum _ENUM_ADV_AC_TYPE_T { - ENUM_ADV_AC_TYPE_RX_NSW, - ENUM_ADV_AC_TYPE_RX_PTA, - ENUM_ADV_AC_TYPE_RX_SP, - ENUM_ADV_AC_TYPE_TX_PTA, - ENUM_ADV_AC_TYPE_TX_RSP, - ENUM_ADV_AC_TYPE_NUM -} ENUM_ADV_AC_TYPE_T, *P_ENUM_ADV_AC_TYPE_T; - -typedef enum _ENUM_REG_CH_MAP_T { - REG_CH_MAP_COUNTRY_CODE, - REG_CH_MAP_TBL_IDX, - REG_CH_MAP_CUSTOMIZED, - REG_CH_MAP_NUM -} ENUM_REG_CH_MAP_T, *P_ENUM_REG_CH_MAP_T; - -typedef struct _SET_TXPWR_CTRL_T{ - INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c2GHotspotPwrOffset; - INT_8 c2GP2pPwrOffset; - INT_8 c2GBowPwrOffset; - INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0*/ - INT_8 c5GHotspotPwrOffset; - INT_8 c5GP2pPwrOffset; - INT_8 c5GBowPwrOffset; - UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence - in the same channel - 0: Highest power has priority - 1: Lowest power has priority */ - INT_8 acReserved1[3]; /* Must be zero */ - - /* Power limit by channel for all data rates */ - INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm*/ - INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */ - INT_8 acReserved2[2]; /* Must be zero */ -} SET_TXPWR_CTRL_T, *P_SET_TXPWR_CTRL_T; - -/* For storing driver initialization value from glue layer */ -typedef struct _REG_INFO_T { - UINT_32 u4SdBlockSize; /* SDIO block size */ - UINT_32 u4SdBusWidth; /* SDIO bus width. 1 or 4 */ - UINT_32 u4SdClockRate; /* SDIO clock rate. (in unit of HZ) */ - UINT_32 u4StartAddress; /* Starting address of Wi-Fi Firmware */ - UINT_32 u4LoadAddress; /* Load address of Wi-Fi Firmware */ - UINT_16 aucFwImgFilename[65]; /* Firmware filename */ - UINT_16 aucFwImgFilenameE6[65]; /* Firmware filename for E6 */ - UINT_32 u4StartFreq; /* Start Frequency for Ad-Hoc network : in unit of KHz */ - UINT_32 u4AdhocMode; /* Default mode for Ad-Hoc network : ENUM_PARAM_AD_HOC_MODE_T */ - UINT_32 u4RddStartFreq; - UINT_32 u4RddStopFreq; - UINT_32 u4RddTestMode; - UINT_32 u4RddShutFreq; - UINT_32 u4RddDfs; - INT_32 i4HighRssiThreshold; - INT_32 i4MediumRssiThreshold; - INT_32 i4LowRssiThreshold; - INT_32 au4TxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4RxPriorityTag[ENUM_AC_TYPE_NUM]; - INT_32 au4AdvPriorityTag[ENUM_ADV_AC_TYPE_NUM]; - UINT_32 u4FastPSPoll; - UINT_32 u4PTA; /* 0: disable, 1: enable */ - UINT_32 u4TXLimit; /* 0: disable, 1: enable */ - UINT_32 u4SilenceWindow; /* range: 100 - 625, unit: us */ - UINT_32 u4TXLimitThreshold; /* range: 250 - 1250, unit: us */ - UINT_32 u4PowerMode; - UINT_32 fgEnArpFilter; - UINT_32 u4PsCurrentMeasureEn; - UINT_32 u4UapsdAcBmp; - UINT_32 u4MaxSpLen; - UINT_32 fgDisOnlineScan; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 fgDisBcnLostDetection; /* 0: enable online scan, non-zero: disable online scan*/ - UINT_32 u4FixedRate; /* 0: automatic, non-zero: fixed rate */ - UINT_32 u4ArSysParam0; - UINT_32 u4ArSysParam1; - UINT_32 u4ArSysParam2; - UINT_32 u4ArSysParam3; - UINT_32 fgDisRoaming; /* 0:enable roaming 1:disable */ - - // NVRAM - MP Data -START- - UINT_8 aucMacAddr[6]; - UINT_16 au2CountryCode[4]; /* Country code (in ISO 3166-1 expression, ex: "US", "TW") */ - TX_PWR_PARAM_T rTxPwr; - UINT_8 aucEFUSE[144]; - UINT_8 ucTxPwrValid; - UINT_8 ucSupport5GBand; - UINT_8 fg2G4BandEdgePwrUsed; - INT_8 cBandEdgeMaxPwrCCK; - INT_8 cBandEdgeMaxPwrOFDM20; - INT_8 cBandEdgeMaxPwrOFDM40; - ENUM_REG_CH_MAP_T eRegChannelListMap; - UINT_8 ucRegChannelListIndex; - DOMAIN_INFO_ENTRY rDomainInfo; - // NVRAM - MP Data -END- - - // NVRAM - Functional Data -START- - UINT_8 uc2G4BwFixed20M; - UINT_8 uc5GBwFixed20M; - UINT_8 ucEnable5GBand; - // NVRAM - Functional Data -END- - -} REG_INFO_T, *P_REG_INFO_T; - -/* for divided firmware loading */ -typedef struct _FWDL_SECTION_INFO_T -{ - UINT_32 u4Offset; - UINT_32 u4Reserved; - UINT_32 u4Length; - UINT_32 u4DestAddr; -} FWDL_SECTION_INFO_T, *P_FWDL_SECTION_INFO_T; - -typedef struct _FIRMWARE_DIVIDED_DOWNLOAD_T -{ - UINT_32 u4Signature; - UINT_32 u4CRC; /* CRC calculated without first 8 bytes included */ - UINT_32 u4NumOfEntries; - UINT_32 u4Reserved; - FWDL_SECTION_INFO_T arSection[]; -} FIRMWARE_DIVIDED_DOWNLOAD_T, *P_FIRMWARE_DIVIDED_DOWNLOAD_T; - -typedef struct _PARAM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_MCR_RW_STRUC_T, *P_PARAM_MCR_RW_STRUC_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define BUILD_SIGN(ch0, ch1, ch2, ch3) \ - ((UINT_32)(UINT_8)(ch0) | ((UINT_32)(UINT_8)(ch1) << 8) | \ - ((UINT_32)(UINT_8)(ch2) << 16) | ((UINT_32)(UINT_8)(ch3) << 24 )) - -#define MTK_WIFI_SIGNATURE BUILD_SIGN('M', 'T', 'K', 'W') - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -P_ADAPTER_T -wlanAdapterCreate ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanAdapterDestroy ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanCardEjected( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanIST ( - IN P_ADAPTER_T prAdapter - ); - -BOOL -wlanISR ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgGlobalIntrCtrl - ); - -WLAN_STATUS -wlanProcessCommandQueue ( - IN P_ADAPTER_T prAdapter, - IN P_QUE_T prCmdQue - ); - -WLAN_STATUS -wlanSendCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleaseCommand ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -VOID -wlanReleasePendingOid ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Data - ); - -VOID -wlanReleasePendingCMDbyNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ); - -VOID -wlanReturnPacket ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvPacket - ); - -WLAN_STATUS -wlanQueryInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidQryHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4QryInfoLen - ); - -WLAN_STATUS -wlanSetInformation ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfOidSetHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanAdapterStart ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo, - IN PVOID pvFwImageMapFile, - IN UINT_32 u4FwImageFileLength - ); - -WLAN_STATUS -wlanAdapterStop ( - IN P_ADAPTER_T prAdapter - ); - -#if CFG_SUPPORT_WAPI -BOOLEAN -wlanQueryWapiMode( - IN P_ADAPTER_T prAdapter - ); -#endif - -VOID -wlanReturnRxPacket ( - IN PVOID pvAdapter, - IN PVOID pvPacket - ); - -VOID -wlanRxSetBroadcast ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableBroadcast - ); - -BOOLEAN -wlanIsHandlerNeedHwAccess ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -VOID -wlanSetPromiscuousMode ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnablePromiscuousMode - ); - -#if CFG_ENABLE_FW_DOWNLOAD - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION -WLAN_STATUS -wlanImageSectionDownloadAggregated ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - #endif - -WLAN_STATUS -wlanImageSectionDownload ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DestAddr, - IN UINT_32 u4ImgSecSize, - IN PUINT_8 pucImgSecBuf - ); - -#if !CFG_ENABLE_FW_DOWNLOAD_ACK -WLAN_STATUS -wlanImageQueryStatus( - IN P_ADAPTER_T prAdapter - ); -#else -WLAN_STATUS -wlanImageSectionDownloadStatus ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCmdSeqNum - ); -#endif - -WLAN_STATUS -wlanConfigWifiFunc ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnable, - IN UINT_32 u4StartAddress - ); - -UINT_32 wlanCRC32( - PUINT_8 buf, - UINT_32 len - ); - -#endif - -WLAN_STATUS -wlanSendNicPowerCtrlCmd ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPowerMode - ); - -BOOLEAN -wlanIsHandlerAllowedInRFTest ( - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN BOOLEAN fgSetInfo - ); - -WLAN_STATUS -wlanProcessQueuedSwRfb ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ); - -WLAN_STATUS -wlanProcessQueuedMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ); - -BOOLEAN -wlanoidTimeoutCheck ( - IN P_ADAPTER_T prAdapter, - IN PFN_OID_HANDLER_FUNC pfnOidHandler - ); - -VOID -wlanoidClearTimeoutCheck ( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanUpdateNetworkAddress ( - IN P_ADAPTER_T prAdapter - ); - -BOOLEAN -wlanQueryTestMode( - IN P_ADAPTER_T prAdapter - ); - -/* Security Frame Handling */ -BOOLEAN -wlanProcessSecurityFrame( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prPacket - ); - -VOID -wlanSecurityFrameTxDone( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); - -VOID -wlanSecurityFrameTxTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ); - -/*----------------------------------------------------------------------------*/ -/* OID/IOCTL Handling */ -/*----------------------------------------------------------------------------*/ -VOID -wlanClearScanningResult( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanClearBssInScanningResult( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 arBSSID - ); - -#if CFG_TEST_WIFI_DIRECT_GO -VOID -wlanEnableP2pFunction( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanEnableATGO( - IN P_ADAPTER_T prAdapter - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Address Retreive by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPermanentAddress( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* NIC Capability Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryNicCapability( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* PD MCR Retrieve by Polling */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanQueryPdMcr( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_MCR_RW_STRUC_T prMcrRdInfo - ); -/*----------------------------------------------------------------------------*/ -/* Loading Manufacture Data */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanLoadManufactureData ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media Stream Mode */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanResetMediaStreamMode( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Timer Timeout Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanTimerTimeoutCheck( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Mailbox Message Check (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanProcessMboxMessage( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* TX Pending Packets Handling (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanEnqueueTxPacket ( - IN P_ADAPTER_T prAdapter, - IN P_NATIVE_PACKET prNativePacket - ); - -WLAN_STATUS -wlanFlushTxPendingPackets( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanTxPendingPackets ( - IN P_ADAPTER_T prAdapter, - IN OUT PBOOLEAN pfgHwAccess - ); - - -/*----------------------------------------------------------------------------*/ -/* Low Power Acquire/Release (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanAcquirePowerControl( - IN P_ADAPTER_T prAdapter - ); - -WLAN_STATUS -wlanReleasePowerControl( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* Pending Packets Number Reporting (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -UINT_32 -wlanGetTxPendingFrameCount ( - IN P_ADAPTER_T prAdapter - ); - - -/*----------------------------------------------------------------------------*/ -/* ACPI state inquiry (for Glue Layer) */ -/*----------------------------------------------------------------------------*/ -ENUM_ACPI_STATE_T -wlanGetAcpiState ( - IN P_ADAPTER_T prAdapter - ); - -VOID -wlanSetAcpiState ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ACPI_STATE_T ePowerState - ); - -#if CFG_SUPPORT_OSC_SETTING && defined(MT5931) -WLAN_STATUS -wlanSetMcuOscStableTime ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2OscStableTime - ); -#endif - -VOID -wlanDefTxPowerCfg ( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* get ECO version from Revision ID register (for Win32) */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetEcoVersion( - IN P_ADAPTER_T prAdapter - ); - -/*----------------------------------------------------------------------------*/ -/* set preferred band configuration corresponding to network type */ -/*----------------------------------------------------------------------------*/ -VOID -wlanSetPreferBandByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get currently operating channel information */ -/*----------------------------------------------------------------------------*/ -UINT_8 -wlanGetChannelNumberByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* get BSS Descriptor information */ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -wlanGetTargetBssDescByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ); - -/*----------------------------------------------------------------------------*/ -/* check for system configuration to generate message on scan list */ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanCheckSystemConfiguration ( - IN P_ADAPTER_T prAdapter - ); - - -#endif /* _WLAN_LIB_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_oid.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_oid.h deleted file mode 100755 index df15f295c9dc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_oid.h +++ /dev/null @@ -1,2120 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/wlan_oid.h#1 $ -*/ - -/*! \file "wlan_oid.h" - \brief This file contains the declairation file of the WLAN OID processing routines - of Windows driver for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wlan_oid.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * Support UAPSD/OppPS/NoA parameter setting - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wifi_var.h, precomp.h, cnm_timer.h (data type only) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move timer callback to glue layer. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 18 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement Wakeup-on-LAN except firmware integration part - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add NULL OID implementation for WOL-related OIDs. - * - * 04 22 2010 cp.wu - * [WPD00003830]add OID_802_11_PRIVACY_FILTER support - * enable RX filter OID - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) implement timeout mechanism when OID is pending for longer than 1 second - * * * 2) allow OID_802_11_CONFIGURATION to be executed when RF test mode is turned on - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * OID_802_11_RSSI, - * * * * OID_802_11_RSSI_TRIGGER, - * * * * OID_802_11_STATISTICS, - * * * * OID_802_11_DISASSOCIATE, - * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_SUPPORTED_RATES / OID_802_11_DESIRED_RATES -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-08 11:38:11 GMT mtk02752 -** add declares for RF test related APIs -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-24 22:41:53 GMT mtk02752 -** remove u4SysTime, MSDN 10-second will be implemented in FW side -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 20:30:13 GMT mtk02752 -** add u4SysTime field in PARAM_BSSID_EX_T -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-12 19:48:35 GMT mtk02752 -** allow upper layer to set a packet filter with PROMISCUOUS mode -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:12:12 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _WLAN_OID_H -#define _WLAN_OID_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define PARAM_MAX_LEN_SSID 32 - -#define PARAM_MAC_ADDR_LEN 6 - -#define ETHERNET_HEADER_SZ 14 -#define ETHERNET_MIN_PKT_SZ 60 -#define ETHERNET_MAX_PKT_SZ 1514 - -#define PARAM_MAX_LEN_RATES 8 -#define PARAM_MAX_LEN_RATES_EX 16 - -#define PARAM_AUTH_REQUEST_REAUTH 0x01 -#define PARAM_AUTH_REQUEST_KEYUPDATE 0x02 -#define PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 -#define PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E - -#define PARAM_EEPROM_READ_METHOD_READ 1 -#define PARAM_EEPROM_READ_METHOD_GETSIZE 0 - -#define PARAM_WHQL_RSSI_MAX_DBM (-10) -#define PARAM_WHQL_RSSI_MIN_DBM (-200) - -#define PARAM_DEVICE_WAKE_UP_ENABLE 0x00000001 -#define PARAM_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002 -#define PARAM_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004 - -#define PARAM_WAKE_UP_MAGIC_PACKET 0x00000001 -#define PARAM_WAKE_UP_PATTERN_MATCH 0x00000002 -#define PARAM_WAKE_UP_LINK_CHANGE 0x00000004 - - -/* Packet filter bit definitioin (UINT_32 bit-wise definition) */ -#define PARAM_PACKET_FILTER_DIRECTED 0x00000001 -#define PARAM_PACKET_FILTER_MULTICAST 0x00000002 -#define PARAM_PACKET_FILTER_ALL_MULTICAST 0x00000004 -#define PARAM_PACKET_FILTER_BROADCAST 0x00000008 -#define PARAM_PACKET_FILTER_PROMISCUOUS 0x00000020 -#define PARAM_PACKET_FILTER_ALL_LOCAL 0x00000080 -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#define PARAM_PACKET_FILTER_P2P_MASK 0xC0000000 -#define PARAM_PACKET_FILTER_PROBE_REQ 0x80000000 -#define PARAM_PACKET_FILTER_ACTION_FRAME 0x40000000 -#endif - -#if CFG_SLT_SUPPORT -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST | \ - PARAM_PACKET_FILTER_ALL_MULTICAST) -#else -#define PARAM_PACKET_FILTER_SUPPORTED (PARAM_PACKET_FILTER_DIRECTED | \ - PARAM_PACKET_FILTER_MULTICAST | \ - PARAM_PACKET_FILTER_BROADCAST) -#endif - -#define PARAM_MEM_DUMP_MAX_SIZE 2048 - -#define BT_PROFILE_PARAM_LEN 8 -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Parameters of User Configuration which match to NDIS5.1 */ -/*----------------------------------------------------------------------------*/ -/* NDIS_802_11_AUTHENTICATION_MODE */ -typedef enum _ENUM_PARAM_AUTH_MODE_T -{ - AUTH_MODE_OPEN, /*!< Open system */ - AUTH_MODE_SHARED, /*!< Shared key */ - AUTH_MODE_AUTO_SWITCH, /*!< Either open system or shared key */ - AUTH_MODE_WPA, - AUTH_MODE_WPA_PSK, - AUTH_MODE_WPA_NONE, /*!< For Ad hoc */ - AUTH_MODE_WPA2, - AUTH_MODE_WPA2_PSK, - AUTH_MODE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_AUTH_MODE_T, *P_ENUM_PARAM_AUTH_MODE_T; - -/* NDIS_802_11_ENCRYPTION_STATUS *//* Encryption types */ -typedef enum _ENUM_WEP_STATUS_T -{ - ENUM_WEP_ENABLED, - ENUM_ENCRYPTION1_ENABLED = ENUM_WEP_ENABLED, - ENUM_WEP_DISABLED, - ENUM_ENCRYPTION_DISABLED = ENUM_WEP_DISABLED, - ENUM_WEP_KEY_ABSENT, - ENUM_ENCRYPTION1_KEY_ABSENT = ENUM_WEP_KEY_ABSENT, - ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION_NOT_SUPPORTED = ENUM_WEP_NOT_SUPPORTED, - ENUM_ENCRYPTION2_ENABLED, - ENUM_ENCRYPTION2_KEY_ABSENT, - ENUM_ENCRYPTION3_ENABLED, - ENUM_ENCRYPTION3_KEY_ABSENT -} ENUM_PARAM_ENCRYPTION_STATUS_T, *P_ENUM_PARAM_ENCRYPTION_STATUS_T; - - - -typedef UINT_8 PARAM_MAC_ADDRESS[PARAM_MAC_ADDR_LEN]; - -typedef UINT_32 PARAM_KEY_INDEX; -typedef UINT_64 PARAM_KEY_RSC; -typedef INT_32 PARAM_RSSI; - -typedef UINT_32 PARAM_FRAGMENTATION_THRESHOLD; -typedef UINT_32 PARAM_RTS_THRESHOLD; - -typedef UINT_8 PARAM_RATES[PARAM_MAX_LEN_RATES]; -typedef UINT_8 PARAM_RATES_EX[PARAM_MAX_LEN_RATES_EX]; - -typedef enum _ENUM_PARAM_PHY_TYPE_T { - PHY_TYPE_802_11ABG = 0, /*!< Can associated with 802.11abg AP, Scan dual band. */ - PHY_TYPE_802_11BG, /*!< Can associated with 802_11bg AP, Scan single band and not report 802_11a BSSs. */ - PHY_TYPE_802_11G, /*!< Can associated with 802_11g only AP, Scan single band and not report 802_11ab BSSs. */ - PHY_TYPE_802_11A, /*!< Can associated with 802_11a only AP, Scan single band and not report 802_11bg BSSs. */ - PHY_TYPE_802_11B, /*!< Can associated with 802_11b only AP, Scan single band and not report 802_11ag BSSs. */ - PHY_TYPE_NUM // 5 -} ENUM_PARAM_PHY_TYPE_T, *P_ENUM_PARAM_PHY_TYPE_T; - -typedef enum _ENUM_PARAM_OP_MODE_T { - NET_TYPE_IBSS = 0, /*!< Try to merge/establish an AdHoc, do periodic SCAN for merging. */ - NET_TYPE_INFRA, /*!< Try to join an Infrastructure, do periodic SCAN for joining. */ - NET_TYPE_AUTO_SWITCH, /*!< Try to join an Infrastructure, if fail then try to merge or - establish an AdHoc, do periodic SCAN for joining or merging. */ - NET_TYPE_DEDICATED_IBSS, /*!< Try to merge an AdHoc first, if fail then establish AdHoc permanently, no more SCAN. */ - NET_TYPE_NUM // 4 -} ENUM_PARAM_OP_MODE_T, *P_ENUM_PARAM_OP_MODE_T; - -typedef struct _PARAM_SSID_T { - UINT_32 u4SsidLen; /*!< SSID length in bytes. Zero length is broadcast(any) SSID */ - UINT_8 aucSsid[PARAM_MAX_LEN_SSID]; -} PARAM_SSID_T, *P_PARAM_SSID_T; - -/* This is enum defined for user to select an AdHoc Mode */ -typedef enum _ENUM_PARAM_AD_HOC_MODE_T { - AD_HOC_MODE_11B = 0, /*!< Create 11b IBSS if we support 802.11abg/802.11bg. */ - AD_HOC_MODE_MIXED_11BG, /*!< Create 11bg mixed IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11G, /*!< Create 11g only IBSS if we support 802.11abg/802.11bg/802.11g. */ - AD_HOC_MODE_11A, /*!< Create 11a only IBSS if we support 802.11abg. */ - AD_HOC_MODE_NUM // 4 -} ENUM_PARAM_AD_HOC_MODE_T, *P_ENUM_PARAM_AD_HOC_MODE_T; - - -typedef enum _ENUM_PARAM_MEDIA_STATE_T { - PARAM_MEDIA_STATE_CONNECTED, - PARAM_MEDIA_STATE_DISCONNECTED, - PARAM_MEDIA_STATE_TO_BE_INDICATED // for following MSDN re-association behavior -} ENUM_PARAM_MEDIA_STATE_T, *P_ENUM_PARAM_MEDIA_STATE_T; - - -typedef enum _ENUM_PARAM_NETWORK_TYPE_T { - PARAM_NETWORK_TYPE_FH, - PARAM_NETWORK_TYPE_DS, - PARAM_NETWORK_TYPE_OFDM5, - PARAM_NETWORK_TYPE_OFDM24, - PARAM_NETWORK_TYPE_AUTOMODE, - PARAM_NETWORK_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_PARAM_NETWORK_TYPE_T, *P_ENUM_PARAM_NETWORK_TYPE_T; - - -typedef struct _PARAM_NETWORK_TYPE_LIST { - UINT_32 NumberOfItems; /*!< At least 1 */ - ENUM_PARAM_NETWORK_TYPE_T eNetworkType [1]; -} PARAM_NETWORK_TYPE_LIST, *PPARAM_NETWORK_TYPE_LIST; - -typedef enum _ENUM_PARAM_PRIVACY_FILTER_T -{ - PRIVACY_FILTER_ACCEPT_ALL, - PRIVACY_FILTER_8021xWEP, - PRIVACY_FILTER_NUM -} ENUM_PARAM_PRIVACY_FILTER_T, *P_ENUM_PARAM_PRIVACY_FILTER_T; - -typedef enum _ENUM_RELOAD_DEFAULTS -{ - ENUM_RELOAD_WEP_KEYS -} PARAM_RELOAD_DEFAULTS, *P_PARAM_RELOAD_DEFAULTS; - -typedef struct _PARAM_PM_PACKET_PATTERN -{ - UINT_32 Priority; // Importance of the given pattern. - UINT_32 Reserved; // Context information for transports. - UINT_32 MaskSize; // Size in bytes of the pattern mask. - UINT_32 PatternOffset; // Offset from beginning of this - // structure to the pattern bytes. - UINT_32 PatternSize; // Size in bytes of the pattern. - UINT_32 PatternFlags; // Flags (TBD). -} PARAM_PM_PACKET_PATTERN, *P_PARAM_PM_PACKET_PATTERN; - -/*--------------------------------------------------------------*/ -/*! \brief Struct definition to indicate specific event. */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_STATUS_TYPE_T -{ - ENUM_STATUS_TYPE_AUTHENTICATION, - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE, - ENUM_STATUS_TYPE_CANDIDATE_LIST, - ENUM_STATUS_TYPE_NUM /*!< Upper bound, not real case */ -} ENUM_STATUS_TYPE_T, *P_ENUM_STATUS_TYPE_T; - - -typedef struct _PARAM_802_11_CONFIG_FH_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4HopPattern; /*!< Defined as 802.11 */ - UINT_32 u4HopSet; /*!< to one if non-802.11 */ - UINT_32 u4DwellTime; /*!< In unit of Kusec */ -} PARAM_802_11_CONFIG_FH_T, *P_PARAM_802_11_CONFIG_FH_T; - -typedef struct _PARAM_802_11_CONFIG_T { - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4BeaconPeriod; /*!< In unit of Kusec */ - UINT_32 u4ATIMWindow; /*!< In unit of Kusec */ - UINT_32 u4DSConfig; /*!< Channel frequency in unit of kHz */ - PARAM_802_11_CONFIG_FH_T rFHConfig; -} PARAM_802_11_CONFIG_T, *P_PARAM_802_11_CONFIG_T; - -typedef struct _PARAM_STATUS_INDICATION_T -{ - ENUM_STATUS_TYPE_T eStatusType; -} PARAM_STATUS_INDICATION_T, *P_PARAM_STATUS_INDICATION_T; - -typedef struct _PARAM_AUTH_REQUEST_T -{ - UINT_32 u4Length; /*!< Length of this struct */ - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4Flags; /*!< Definitions are as follows */ -} PARAM_AUTH_REQUEST_T, *P_PARAM_AUTH_REQUEST_T; - -typedef struct _PARAM_AUTH_EVENT_T -{ - PARAM_STATUS_INDICATION_T rStatus; - PARAM_AUTH_REQUEST_T arRequest[1]; -} PARAM_AUTH_EVENT_T, *P_PARAM_AUTH_EVENT_T; - -/*! \brief Capabilities, privacy, rssi and IEs of each BSSID */ -typedef struct _PARAM_BSSID_EX_T { - UINT_32 u4Length; /*!< Length of structure */ - PARAM_MAC_ADDRESS arMacAddress; /*!< BSSID */ - UINT_8 Reserved[2]; - PARAM_SSID_T rSsid; /*!< SSID */ - UINT_32 u4Privacy; /*!< Need WEP encryption */ - PARAM_RSSI rRssi; /*!< in dBm */ - ENUM_PARAM_NETWORK_TYPE_T eNetworkTypeInUse; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - PARAM_RATES_EX rSupportedRates; - UINT_32 u4IELength; - UINT_8 aucIEs[1]; -} PARAM_BSSID_EX_T, *P_PARAM_BSSID_EX_T; - -typedef struct _PARAM_BSSID_LIST_EX { - UINT_32 u4NumberOfItems; /*!< at least 1 */ - PARAM_BSSID_EX_T arBssid[1]; -} PARAM_BSSID_LIST_EX_T, *P_PARAM_BSSID_LIST_EX_T; - - -typedef struct _PARAM_WEP_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< 0: pairwise key, others group keys */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_WEP_T, *P_PARAM_WEP_T; - -/*! \brief Key mapping of BSSID */ -typedef struct _PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} PARAM_KEY_T, *P_PARAM_KEY_T; - -typedef struct _PARAM_REMOVE_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ -} PARAM_REMOVE_KEY_T, *P_PARAM_REMOVE_KEY_T; - -#if CFG_SUPPORT_WAPI -typedef enum _ENUM_KEY_TYPE { - ENUM_WPI_PAIRWISE_KEY = 0, - ENUM_WPI_GROUP_KEY -} ENUM_KEY_TYPE; - -typedef enum _ENUM_WPI_PROTECT_TYPE -{ - ENUM_WPI_NONE, - ENUM_WPI_RX, - ENUM_WPI_TX, - ENUM_WPI_RX_TX -} ENUM_WPI_PROTECT_TYPE; - -typedef struct _PARAM_WPI_KEY_T { - ENUM_KEY_TYPE eKeyType; - ENUM_WPI_PROTECT_TYPE eDirection; - UINT_8 ucKeyID; - UINT_8 aucRsv[3]; - UINT_8 aucAddrIndex[12]; - UINT_32 u4LenWPIEK; - UINT_8 aucWPIEK[256]; - UINT_32 u4LenWPICK; - UINT_8 aucWPICK[256]; - UINT_8 aucPN[16]; -} PARAM_WPI_KEY_T, *P_PARAM_WPI_KEY_T; -#endif - - -typedef enum _PARAM_POWER_MODE -{ - Param_PowerModeCAM, - Param_PowerModeMAX_PSP, - Param_PowerModeFast_PSP, - Param_PowerModeMax /* Upper bound, not real case */ -} PARAM_POWER_MODE, *PPARAM_POWER_MODE; - -typedef enum _PARAM_DEVICE_POWER_STATE -{ - ParamDeviceStateUnspecified = 0, - ParamDeviceStateD0, - ParamDeviceStateD1, - ParamDeviceStateD2, - ParamDeviceStateD3, - ParamDeviceStateMaximum -} PARAM_DEVICE_POWER_STATE, *PPARAM_DEVICE_POWER_STATE; - -#if CFG_SUPPORT_802_11D - -/*! \brief The enumeration definitions for OID_IPN_MULTI_DOMAIN_CAPABILITY */ -typedef enum _PARAM_MULTI_DOMAIN_CAPABILITY { - ParamMultiDomainCapDisabled, - ParamMultiDomainCapEnabled -} PARAM_MULTI_DOMAIN_CAPABILITY, *P_PARAM_MULTI_DOMAIN_CAPABILITY; -#endif - -typedef struct _COUNTRY_STRING_ENTRY { - UINT_8 aucCountryCode[2]; - UINT_8 aucEnvironmentCode[2]; -} COUNTRY_STRING_ENTRY, *P_COUNTRY_STRING_ENTRY; - -/* Power management related definition and enumerations */ -#define UAPSD_NONE 0 -#define UAPSD_AC0 (BIT(0) | BIT(4)) -#define UAPSD_AC1 (BIT(1) | BIT(5)) -#define UAPSD_AC2 (BIT(2) | BIT(6)) -#define UAPSD_AC3 (BIT(3) | BIT(7)) -#define UAPSD_ALL (UAPSD_AC0 | UAPSD_AC1 | UAPSD_AC2 | UAPSD_AC3) - -typedef enum _ENUM_POWER_SAVE_PROFILE_T -{ - ENUM_PSP_CONTINUOUS_ACTIVE = 0, - ENUM_PSP_CONTINUOUS_POWER_SAVE, - ENUM_PSP_FAST_SWITCH, - ENUM_PSP_NUM -} ENUM_POWER_SAVE_PROFILE_T, *PENUM_POWER_SAVE_PROFILE_T; - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query testing type. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_802_11_TEST_T -{ - UINT_32 u4Length; - UINT_32 u4Type; - union - { - PARAM_AUTH_EVENT_T AuthenticationEvent; - PARAM_RSSI RssiTrigger; - } u; -} PARAM_802_11_TEST_T, *P_PARAM_802_11_TEST_T; - - - -/*--------------------------------------------------------------*/ -/*! \brief Set/Query authentication and encryption capability. */ -/*--------------------------------------------------------------*/ -typedef struct _PARAM_AUTH_ENCRYPTION_T -{ - ENUM_PARAM_AUTH_MODE_T eAuthModeSupported; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncryptStatusSupported; -} PARAM_AUTH_ENCRYPTION_T, *P_PARAM_AUTH_ENCRYPTION_T; - -typedef struct _PARAM_CAPABILITY_T -{ - UINT_32 u4Length; - UINT_32 u4Version; - UINT_32 u4NoOfPMKIDs; - UINT_32 u4NoOfAuthEncryptPairsSupported; - PARAM_AUTH_ENCRYPTION_T arAuthenticationEncryptionSupported[1]; -} PARAM_CAPABILITY_T, *P_PARAM_CAPABILITY_T; - -typedef UINT_8 PARAM_PMKID_VALUE[16]; - -typedef struct _PARAM_BSSID_INFO_T -{ - PARAM_MAC_ADDRESS arBSSID; - PARAM_PMKID_VALUE arPMKID; -} PARAM_BSSID_INFO_T, *P_PARAM_BSSID_INFO_T; - -typedef struct _PARAM_PMKID_T -{ - UINT_32 u4Length; - UINT_32 u4BSSIDInfoCount; - PARAM_BSSID_INFO_T arBSSIDInfo[1]; -} PARAM_PMKID_T, *P_PARAM_PMKID_T; - -/*! \brief PMKID candidate lists. */ -typedef struct _PARAM_PMKID_CANDIDATE_T { - PARAM_MAC_ADDRESS arBSSID; - UINT_32 u4Flags; -} PARAM_PMKID_CANDIDATE_T, *P_PARAM_PMKID_CANDIDATE_T; - -//#ifdef LINUX -typedef struct _PARAM_PMKID_CANDIDATE_LIST_T -{ - UINT_32 u4Version; /*!< Version */ - UINT_32 u4NumCandidates; /*!< How many candidates follow */ - PARAM_PMKID_CANDIDATE_T arCandidateList[1]; -} PARAM_PMKID_CANDIDATE_LIST_T, *P_PARAM_PMKID_CANDIDATE_LIST_T; -//#endif - -typedef struct _PARAM_CUSTOM_MCR_RW_STRUC_T { - UINT_32 u4McrOffset; - UINT_32 u4McrData; -} PARAM_CUSTOM_MCR_RW_STRUC_T, *P_PARAM_CUSTOM_MCR_RW_STRUC_T; - -typedef struct _PARAM_CUSTOM_MEM_DUMP_STRUC_T { - UINT_32 u4Address; - UINT_32 u4Length; - UINT_32 u4RemainLength; - UINT_8 ucFragNum; -} PARAM_CUSTOM_MEM_DUMP_STRUC_T, *P_PARAM_CUSTOM_MEM_DUMP_STRUC_T; - - -typedef struct _PARAM_CUSTOM_SW_CTRL_STRUC_T { - UINT_32 u4Id; - UINT_32 u4Data; -} PARAM_CUSTOM_SW_CTRL_STRUC_T, *P_PARAM_CUSTOM_SW_CTRL_STRUC_T; - - -typedef struct _PARAM_CUSTOM_EEPROM_RW_STRUC_T { - UINT_8 ucEepromMethod; /* For read only read: 1, query size: 0*/ - UINT_8 ucEepromIndex; - UINT_8 reserved; - UINT_16 u2EepromData; -} PARAM_CUSTOM_EEPROM_RW_STRUC_T, *P_PARAM_CUSTOM_EEPROM_RW_STRUC_T, - PARAM_CUSTOM_NVRAM_RW_STRUCT_T, *P_PARAM_CUSTOM_NVRAM_RW_STRUCT_T; - -typedef struct _PARAM_CUSTOM_WMM_PS_TEST_STRUC_T { - UINT_8 bmfgApsdEnAc; /* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */ - UINT_8 ucIsEnterPsAtOnce; /* enter PS immediately without 5 second guard after connected */ - UINT_8 ucIsDisableUcTrigger; /* not to trigger UC on beacon TIM is matched (under U-APSD) */ - UINT_8 reserved; -} PARAM_CUSTOM_WMM_PS_TEST_STRUC_T, *P_PARAM_CUSTOM_WMM_PS_TEST_STRUC_T; - -typedef struct _PARAM_CUSTOM_NOA_PARAM_STRUC_T { - UINT_32 u4NoaDurationMs; - UINT_32 u4NoaIntervalMs; - UINT_32 u4NoaCount; -} PARAM_CUSTOM_NOA_PARAM_STRUC_T, *P_PARAM_CUSTOM_NOA_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_OPPPS_PARAM_STRUC_T { - UINT_32 u4CTwindowMs; -} PARAM_CUSTOM_OPPPS_PARAM_STRUC_T, *P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_UAPSD_PARAM_STRUC_T { - UINT_8 fgEnAPSD; - UINT_8 fgEnAPSD_AcBe; - UINT_8 fgEnAPSD_AcBk; - UINT_8 fgEnAPSD_AcVo; - UINT_8 fgEnAPSD_AcVi; - UINT_8 ucMaxSpLen; - UINT_8 aucResv[2]; -} PARAM_CUSTOM_UAPSD_PARAM_STRUC_T, *P_PARAM_CUSTOM_UAPSD_PARAM_STRUC_T; - -typedef struct _PARAM_CUSTOM_P2P_SET_STRUC_T { - UINT_32 u4Enable; - UINT_32 u4Mode; -} PARAM_CUSTOM_P2P_SET_STRUC_T, *P_PARAM_CUSTOM_P2P_SET_STRUC_T; - -typedef enum _ENUM_CFG_SRC_TYPE_T { - CFG_SRC_TYPE_EEPROM, - CFG_SRC_TYPE_NVRAM, - CFG_SRC_TYPE_UNKNOWN, - CFG_SRC_TYPE_NUM -} ENUM_CFG_SRC_TYPE_T, *P_ENUM_CFG_SRC_TYPE_T; - -typedef enum _ENUM_EEPROM_TYPE_T { - EEPROM_TYPE_NO, - EEPROM_TYPE_PRESENT, - EEPROM_TYPE_NUM -} ENUM_EEPROM_TYPE_T, *P_ENUM_EEPROM_TYPE_T; - -typedef struct _PARAM_QOS_TSINFO { - UINT_8 ucTrafficType; /* Traffic Type: 1 for isochronous 0 for asynchronous */ - UINT_8 ucTid; /* TSID: must be between 8 ~ 15 */ - UINT_8 ucDirection; /* direction */ - UINT_8 ucAccessPolicy; /* access policy */ - UINT_8 ucAggregation; /* aggregation */ - UINT_8 ucApsd; /* APSD */ - UINT_8 ucuserPriority; /* user priority */ - UINT_8 ucTsInfoAckPolicy; /* TSINFO ACK policy */ - UINT_8 ucSchedule; /* Schedule */ -} PARAM_QOS_TSINFO, *P_PARAM_QOS_TSINFO; - -typedef struct _PARAM_QOS_TSPEC { - PARAM_QOS_TSINFO rTsInfo; /* TS info field */ - UINT_16 u2NominalMSDUSize; /* nominal MSDU size */ - UINT_16 u2MaxMSDUsize; /* maximum MSDU size */ - UINT_32 u4MinSvcIntv; /* minimum service interval */ - UINT_32 u4MaxSvcIntv; /* maximum service interval */ - UINT_32 u4InactIntv; /* inactivity interval */ - UINT_32 u4SpsIntv; /* suspension interval */ - UINT_32 u4SvcStartTime; /* service start time */ - UINT_32 u4MinDataRate; /* minimum Data rate */ - UINT_32 u4MeanDataRate; /* mean data rate */ - UINT_32 u4PeakDataRate; /* peak data rate */ - UINT_32 u4MaxBurstSize; /* maximum burst size */ - UINT_32 u4DelayBound; /* delay bound */ - UINT_32 u4MinPHYRate; /* minimum PHY rate */ - UINT_16 u2Sba; /* surplus bandwidth allowance */ - UINT_16 u2MediumTime; /* medium time */ -} PARAM_QOS_TSPEC, *P_PARAM_QOS_TSPEC; - -typedef struct _PARAM_QOS_ADDTS_REQ_INFO { - PARAM_QOS_TSPEC rTspec; -} PARAM_QOS_ADDTS_REQ_INFO, *P_PARAM_QOS_ADDTS_REQ_INFO; - -typedef struct _PARAM_VOIP_CONFIG { - UINT_32 u4VoipTrafficInterval; /* 0: disable VOIP configuration */ -} PARAM_VOIP_CONFIG, *P_PARAM_VOIP_CONFIG; - -/*802.11 Statistics Struct*/ -typedef struct _PARAM_802_11_STATISTICS_STRUCT_T { - UINT_32 u4Length; // Length of structure - LARGE_INTEGER rTransmittedFragmentCount; - LARGE_INTEGER rMulticastTransmittedFrameCount; - LARGE_INTEGER rFailedCount; - LARGE_INTEGER rRetryCount; - LARGE_INTEGER rMultipleRetryCount; - LARGE_INTEGER rRTSSuccessCount; - LARGE_INTEGER rRTSFailureCount; - LARGE_INTEGER rACKFailureCount; - LARGE_INTEGER rFrameDuplicateCount; - LARGE_INTEGER rReceivedFragmentCount; - LARGE_INTEGER rMulticastReceivedFrameCount; - LARGE_INTEGER rFCSErrorCount; - LARGE_INTEGER rTKIPLocalMICFailures; - LARGE_INTEGER rTKIPICVErrors; - LARGE_INTEGER rTKIPCounterMeasuresInvoked; - LARGE_INTEGER rTKIPReplays; - LARGE_INTEGER rCCMPFormatErrors; - LARGE_INTEGER rCCMPReplays; - LARGE_INTEGER rCCMPDecryptErrors; - LARGE_INTEGER rFourWayHandshakeFailures; - LARGE_INTEGER rWEPUndecryptableCount; - LARGE_INTEGER rWEPICVErrorCount; - LARGE_INTEGER rDecryptSuccessCount; - LARGE_INTEGER rDecryptFailureCount; -} PARAM_802_11_STATISTICS_STRUCT_T, *P_PARAM_802_11_STATISTICS_STRUCT_T; - -/* Linux Network Device Statistics Struct */ -typedef struct _PARAM_LINUX_NETDEV_STATISTICS_T { - UINT_32 u4RxPackets; - UINT_32 u4TxPackets; - UINT_32 u4RxBytes; - UINT_32 u4TxBytes; - UINT_32 u4RxErrors; - UINT_32 u4TxErrors; - UINT_32 u4Multicast; -} PARAM_LINUX_NETDEV_STATISTICS_T, *P_PARAM_LINUX_NETDEV_STATISTICS_T; - - -typedef struct _PARAM_MTK_WIFI_TEST_STRUC_T { - UINT_32 u4FuncIndex; - UINT_32 u4FuncData; -} PARAM_MTK_WIFI_TEST_STRUC_T, *P_PARAM_MTK_WIFI_TEST_STRUC_T; - - -/* 802.11 Media stream constraints */ -typedef enum _ENUM_MEDIA_STREAM_MODE { - ENUM_MEDIA_STREAM_OFF, - ENUM_MEDIA_STREAM_ON -} ENUM_MEDIA_STREAM_MODE, *P_ENUM_MEDIA_STREAM_MODE; - -/* for NDIS 5.1 Media Streaming Change */ -typedef struct _PARAM_MEDIA_STREAMING_INDICATION { - PARAM_STATUS_INDICATION_T rStatus; - ENUM_MEDIA_STREAM_MODE eMediaStreamMode; -} PARAM_MEDIA_STREAMING_INDICATION, *P_PARAM_MEDIA_STREAMING_INDICATION; - - -#define PARAM_PROTOCOL_ID_DEFAULT 0x00 -#define PARAM_PROTOCOL_ID_TCP_IP 0x02 -#define PARAM_PROTOCOL_ID_IPX 0x06 -#define PARAM_PROTOCOL_ID_NBF 0x07 -#define PARAM_PROTOCOL_ID_MAX 0x0F -#define PARAM_PROTOCOL_ID_MASK 0x0F - -/* for NDIS OID_GEN_NETWORK_LAYER_ADDRESSES */ -typedef struct _PARAM_NETWORK_ADDRESS_IP -{ - UINT_16 sin_port; - UINT_32 in_addr; - UINT_8 sin_zero[8]; -} PARAM_NETWORK_ADDRESS_IP, *P_PARAM_NETWORK_ADDRESS_IP; - -typedef struct _PARAM_NETWORK_ADDRESS { - UINT_16 u2AddressLength; // length in bytes of Address[] in this - UINT_16 u2AddressType; // type of this address (PARAM_PROTOCOL_ID_XXX above) - UINT_8 aucAddress[1]; // actually AddressLength bytes long -} PARAM_NETWORK_ADDRESS, *P_PARAM_NETWORK_ADDRESS; - -// The following is used with OID_GEN_NETWORK_LAYER_ADDRESSES to set network layer addresses on an interface - -typedef struct _PARAM_NETWORK_ADDRESS_LIST -{ - UINT_32 u4AddressCount; // number of addresses following - UINT_16 u2AddressType; // type of this address (NDIS_PROTOCOL_ID_XXX above) - PARAM_NETWORK_ADDRESS arAddress[1]; // actually AddressCount elements long -} PARAM_NETWORK_ADDRESS_LIST, *P_PARAM_NETWORK_ADDRESS_LIST; - -#if CFG_SLT_SUPPORT - -#define FIXED_BW_LG20 0x0000 -#define FIXED_BW_UL20 0x2000 -#define FIXED_BW_DL40 0x3000 - -#define FIXED_EXT_CHNL_U20 0x4000 // For AGG register. -#define FIXED_EXT_CHNL_L20 0xC000 // For AGG regsiter. - -typedef enum _ENUM_MTK_LP_TEST_MODE_T { - ENUM_MTK_LP_TEST_NORMAL, - ENUM_MTK_LP_TEST_GOLDEN_SAMPLE, - ENUM_MTK_LP_TEST_DUT, - ENUM_MTK_LP_TEST_MODE_NUM -} ENUM_MTK_LP_TEST_MODE_T, *P_ENUM_MTK_LP_TEST_MODE_T; - -typedef enum _ENUM_MTK_SLT_FUNC_IDX_T { - ENUM_MTK_SLT_FUNC_DO_NOTHING, - ENUM_MTK_SLT_FUNC_INITIAL, - ENUM_MTK_SLT_FUNC_RATE_SET, - ENUM_MTK_SLT_FUNC_LP_SET, - ENUM_MTK_SLT_FUNC_NUM -} ENUM_MTK_SLT_FUNC_IDX_T, *P_ENUM_MTK_SLT_FUNC_IDX_T; - -typedef struct _PARAM_MTK_SLT_LP_TEST_STRUC_T { - ENUM_MTK_LP_TEST_MODE_T rLpTestMode; - UINT_32 u4BcnRcvNum; -} PARAM_MTK_SLT_LP_TEST_STRUC_T, *P_PARAM_MTK_SLT_LP_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TR_TEST_STRUC_T { - ENUM_PARAM_NETWORK_TYPE_T rNetworkType; // Network Type OFDM5G or OFDM2.4G - UINT_32 u4FixedRate; // Fixed Rate including BW -} PARAM_MTK_SLT_TR_TEST_STRUC_T, *P_PARAM_MTK_SLT_TR_TEST_STRUC_T; - -typedef struct _PARAM_MTK_SLT_INITIAL_STRUC_T { - UINT_8 aucTargetMacAddr[PARAM_MAC_ADDR_LEN]; - UINT_16 u2SiteID; -} PARAM_MTK_SLT_INITIAL_STRUC_T, *P_PARAM_MTK_SLT_INITIAL_STRUC_T; - -typedef struct _PARAM_MTK_SLT_TEST_STRUC_T { - ENUM_MTK_SLT_FUNC_IDX_T rSltFuncIdx; - UINT_32 u4Length; /* Length of structure, - including myself */ - UINT_32 u4FuncInfoLen; /* Include following content - field and myself */ - union { - PARAM_MTK_SLT_INITIAL_STRUC_T rMtkInitTest; - PARAM_MTK_SLT_LP_TEST_STRUC_T rMtkLpTest; - PARAM_MTK_SLT_TR_TEST_STRUC_T rMtkTRTest; - } unFuncInfoContent; - -} PARAM_MTK_SLT_TEST_STRUC_T, *P_PARAM_MTK_SLT_TEST_STRUC_T; - -#endif - -/*--------------------------------------------------------------*/ -/*! \brief For Fixed Rate Configuration (Registry) */ -/*--------------------------------------------------------------*/ -typedef enum _ENUM_REGISTRY_FIXED_RATE_T { - FIXED_RATE_NONE, - FIXED_RATE_1M, - FIXED_RATE_2M, - FIXED_RATE_5_5M, - FIXED_RATE_11M, - FIXED_RATE_6M, - FIXED_RATE_9M, - FIXED_RATE_12M, - FIXED_RATE_18M, - FIXED_RATE_24M, - FIXED_RATE_36M, - FIXED_RATE_48M, - FIXED_RATE_54M, - FIXED_RATE_MCS0_20M_800NS, - FIXED_RATE_MCS1_20M_800NS, - FIXED_RATE_MCS2_20M_800NS, - FIXED_RATE_MCS3_20M_800NS, - FIXED_RATE_MCS4_20M_800NS, - FIXED_RATE_MCS5_20M_800NS, - FIXED_RATE_MCS6_20M_800NS, - FIXED_RATE_MCS7_20M_800NS, - FIXED_RATE_MCS0_20M_400NS, - FIXED_RATE_MCS1_20M_400NS, - FIXED_RATE_MCS2_20M_400NS, - FIXED_RATE_MCS3_20M_400NS, - FIXED_RATE_MCS4_20M_400NS, - FIXED_RATE_MCS5_20M_400NS, - FIXED_RATE_MCS6_20M_400NS, - FIXED_RATE_MCS7_20M_400NS, - FIXED_RATE_MCS0_40M_800NS, - FIXED_RATE_MCS1_40M_800NS, - FIXED_RATE_MCS2_40M_800NS, - FIXED_RATE_MCS3_40M_800NS, - FIXED_RATE_MCS4_40M_800NS, - FIXED_RATE_MCS5_40M_800NS, - FIXED_RATE_MCS6_40M_800NS, - FIXED_RATE_MCS7_40M_800NS, - FIXED_RATE_MCS32_800NS, - FIXED_RATE_MCS0_40M_400NS, - FIXED_RATE_MCS1_40M_400NS, - FIXED_RATE_MCS2_40M_400NS, - FIXED_RATE_MCS3_40M_400NS, - FIXED_RATE_MCS4_40M_400NS, - FIXED_RATE_MCS5_40M_400NS, - FIXED_RATE_MCS6_40M_400NS, - FIXED_RATE_MCS7_40M_400NS, - FIXED_RATE_MCS32_400NS, - FIXED_RATE_NUM -} ENUM_REGISTRY_FIXED_RATE_T, *P_ENUM_REGISTRY_FIXED_RATE_T; - -typedef enum _ENUM_BT_CMD_T { - BT_CMD_PROFILE = 0, - BT_CMD_UPDATE, - BT_CMD_NUM -} ENUM_BT_CMD_T; - -typedef enum _ENUM_BT_PROFILE_T { - BT_PROFILE_CUSTOM = 0, - BT_PROFILE_SCO, - BT_PROFILE_ACL, - BT_PROFILE_MIXED, - BT_PROFILE_NO_CONNECTION, - BT_PROFILE_NUM -} ENUM_BT_PROFILE_T; - -typedef struct _PTA_PROFILE_T { - ENUM_BT_PROFILE_T eBtProfile; - union { - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - /* 0: sco reserved slot time, - 1: sco idle slot time, - 2: acl throughput, - 3: bt tx power, - 4: bt rssi - 5: VoIP interval - 6: BIT(0) Use this field, BIT(1) 0 apply single/ 1 dual PTA setting. - */ - UINT_32 au4Btcr[4]; - } u; -} PTA_PROFILE_T, *P_PTA_PROFILE_T; - -typedef struct _PTA_IPC_T { - UINT_8 ucCmd; - UINT_8 ucLen; - union { - PTA_PROFILE_T rProfile; - UINT_8 aucBTPParams[BT_PROFILE_PARAM_LEN]; - } u; -} PARAM_PTA_IPC_T, *P_PARAM_PTA_IPC_T, PTA_IPC_T, *P_PTA_IPC_T; - -/*--------------------------------------------------------------*/ -/*! \brief CFG80211 Scan Request Container */ -/*--------------------------------------------------------------*/ - -typedef struct _PARAM_SCAN_REQUEST_EXT_T { - PARAM_SSID_T rSsid; - UINT_32 u4IELength; - PUINT_8 pucIE; -} PARAM_SCAN_REQUEST_EXT_T, *P_PARAM_SCAN_REQUEST_EXT_T; - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*--------------------------------------------------------------*/ -/* Routines to set parameters or query information. */ -/*--------------------------------------------------------------*/ -/***** Routines in wlan_oid.c *****/ -WLAN_STATUS -wlanoidQueryNetworkTypesSupported( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryNetworkTypeInUse( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkTypeInUse ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScan( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetBssidListScanExt ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBssidList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBssid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetSsid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySsid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryInfrastructureMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetInfrastructureMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAuthMode( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAuthMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if 0 -WLAN_STATUS -wlanoidQueryPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetPrivacyFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEncryptionStatus( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAddWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWep( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetAddKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetReloadDefaults( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCapability( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryFrequency ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFrequency ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAtimWindow ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAtimWindow ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidSetChannel ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssi( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRssiTrigger( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRssiTrigger( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRtsThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetRtsThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuery802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSet802dot11PowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID prSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPmkid( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetPmkid( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQuerySupportedRates( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryDesiredRates ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetDesiredRates ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryPermanentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuf, - IN UINT_32 u4QueryBufLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMcrWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetSwCtrlWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryEepromRead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEepromWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestRxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRfTestTxStatus ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryOidInterfaceVersion ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryVendorId( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMulticastList( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvNoBuffer ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvCrcError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#ifdef LINUX - -WLAN_STATUS -wlanoidQueryStatisticsForLinux ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#endif - -WLAN_STATUS -wlanoidQueryMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryRcvOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitError ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitOneCollision ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMoreCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryXmitMaxCollisions ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetCurrentPacketFilter( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCurrentPacketFilter ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryAcpiDevicePowerState ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - - -WLAN_STATUS -wlanoidSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryFragThreshold ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetFragThreshold ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - - -WLAN_STATUS -wlanoidQueryAdHocMode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBeaconInterval ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBeaconInterval ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentAddr ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -WLAN_STATUS -wlanoidSetCSUMOffload ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen -); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -WLAN_STATUS -wlanoidSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxFrameSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryMaxTotalSize ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCurrentLookahead ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/* RF Test related APIs */ -WLAN_STATUS -wlanoidRftestSetTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAbortTestMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidRftestQueryAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidRftestSetAutoTest ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_WAPI -WLAN_STATUS -wlanoidSetWapiMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetWapiKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_SUPPORT_WPS2 -WLAN_STATUS -wlanoidSetWSCAssocInfo ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -#if CFG_ENABLE_WAKEUP_ON_LAN -WLAN_STATUS -wlanoidSetAddWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveWakeupPattern ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryEnableWakeup ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 u4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetEnableWakeup ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetWiFiWmmPsTest ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetTxAmpdu ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetAddbaReject( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryNvramRead ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetNvramWrite ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryCfgSrcType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryEepromType( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetCountryCode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanSendMemDumpCmd ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen - ); - -#if CFG_SLT_SUPPORT - -WLAN_STATUS -wlanoidQuerySLTStatus( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidUpdateSLTMode( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#endif - -#if 0 -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetBT ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryBT ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetTxPower ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_BUILD_DATE_CODE -WLAN_STATUS -wlanoidQueryBuildDateCode ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#endif - -/* -WLAN_STATUS -wlanoidQueryBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetBtSingleAntenna ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetPta ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryPta ( - IN P_ADAPTER_T prAdapter, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -*/ - -#if CFG_ENABLE_WIFI_DIRECT -WLAN_STATUS -wlanoidSetP2pMode ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _WLAN_OID_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_p2p.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_p2p.h deleted file mode 100755 index fa24244ee76e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/include/wlan_p2p.h +++ /dev/null @@ -1,509 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/wlan_p2p.h#3 $ -*/ - -/*! \file "wlan_p2p.h" - \brief This file contains the declairations of Wi-Fi Direct command - processing routines for MediaTek Inc. 802.11 Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wlan_p2p.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * support wlanoidSetP2pPowerSaveProfile() in P2P - * - * 08 16 2010 george.huang - * NULL - * Support wlanoidSetNetworkAddress() for P2P - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * MT6620 is not supporting NDIS_PACKET_TYPE_PROMISCUOUS. - * - - * -** -*/ - -#ifndef _WLAN_P2P_H -#define _WLAN_P2P_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* Service Discovery */ -typedef struct _PARAM_P2P_SEND_SD_RESPONSE { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucChannelNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_RESPONSE, *P_PARAM_P2P_SEND_SD_RESPONSE; - -typedef struct _PARAM_P2P_GET_SD_REQUEST { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST, *P_PARAM_P2P_GET_SD_REQUEST; - -typedef struct _PARAM_P2P_GET_SD_REQUEST_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucChannelNum; /* Channel Number Where SD Request is received. */ - UINT_8 ucSeqNum; /* Get SD Request by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_REQUEST_EX, *P_PARAM_P2P_GET_SD_REQUEST_EX; - -typedef struct _PARAM_P2P_SEND_SD_REQUEST { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucVersionNum; /* Indicate the Service Discovery Supplicant Version. */ - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_SEND_SD_REQUEST, *P_PARAM_P2P_SEND_SD_REQUEST; - -/* Service Discovery 1.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE, *P_PARAM_P2P_GET_SD_RESPONSE; - -/* Service Discovery 2.0. */ -typedef struct _PARAM_P2P_GET_SD_RESPONSE_EX { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 ucSeqNum; /* Get SD Response by sequence number. */ - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} PARAM_P2P_GET_SD_RESPONSE_EX, *P_PARAM_P2P_GET_SD_RESPONSE_EX; - - -typedef struct _PARAM_P2P_TERMINATE_SD_PHASE { - PARAM_MAC_ADDRESS rPeerAddr; -} PARAM_P2P_TERMINATE_SD_PHASE, *P_PARAM_P2P_TERMINATE_SD_PHASE; - - -/*! \brief Key mapping of BSSID */ -typedef struct _P2P_PARAM_KEY_T -{ - UINT_32 u4Length; /*!< Length of structure */ - UINT_32 u4KeyIndex; /*!< KeyID */ - UINT_32 u4KeyLength; /*!< Key length in bytes */ - PARAM_MAC_ADDRESS arBSSID; /*!< MAC address */ - PARAM_KEY_RSC rKeyRSC; - UINT_8 aucKeyMaterial[32]; /*!< Key content by above setting */ -} P2P_PARAM_KEY_T, *P_P2P_PARAM_KEY_T; - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_PRE_PARAMS { - UINT_16 idx_mode; - UINT_16 idx; - UINT_32 value; -} NL80211_DRIVER_TEST_PRE_PARAMS, *P_NL80211_DRIVER_TEST_PRE_PARAMS; - - -typedef struct _NL80211_DRIVER_TEST_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_PARAMS, *P_NL80211_DRIVER_TEST_PARAMS; - - -/* P2P Sigma*/ -typedef struct _NL80211_DRIVER_P2P_SIGMA_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_32 idx; - UINT_32 value; -}NL80211_DRIVER_P2P_SIGMA_PARAMS, *P_NL80211_DRIVER_P2P_SIGMA_PARAMS; - - -/* Hotspot Client Management */ -typedef struct _NL80211_DRIVER_hotspot_block_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_8 ucblocked; - UINT_8 aucBssid[MAC_ADDR_LEN]; -}NL80211_DRIVER_hotspot_block_PARAMS, *P_NL80211_DRIVER_hotspot_block_PARAMS; - - -#if CFG_SUPPORT_WFD -typedef struct _NL80211_DRIVER_WFD_PARAMS { - NL80211_DRIVER_TEST_PARAMS hdr; - UINT_32 WfdCmdType; - UINT_8 WfdEnable; - UINT_8 WfdCoupleSinkStatus; - UINT_8 WfdSessionAvailable; - UINT_8 WfdSigmaMode; - UINT_16 WfdDevInfo; - UINT_16 WfdControlPort; - UINT_16 WfdMaximumTp; - UINT_16 WfdExtendCap; - UINT_8 WfdCoupleSinkAddress[MAC_ADDR_LEN]; - UINT_8 WfdAssociatedBssid[MAC_ADDR_LEN]; - UINT_8 WfdVideoIp[4]; - UINT_8 WfdAudioIp[4]; - UINT_16 WfdVideoPort; - UINT_16 WfdAudioPort; - UINT_32 WfdFlag; - UINT_32 WfdPolicy; - UINT_32 WfdState; - UINT_8 WfdSessionInformationIE[24*8]; // Include Subelement ID, length - UINT_16 WfdSessionInformationIELen; - UINT_8 aucReserved1[2]; - UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN]; - UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN]; - UINT_32 WfdAdvanceFlag; - UINT_8 aucWfdLocalIp[4]; - UINT_8 aucReserved2[64]; - UINT_8 aucReserved3[64]; - UINT_8 aucReserved4[64]; -}NL80211_DRIVER_WFD_PARAMS, *P_NL80211_DRIVER_WFD_PARAMS; -#endif - - - -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/*--------------------------------------------------------------*/ -/* Routines to handle command */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSetAddP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetRemoveP2PKey( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetNetworkAddress( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PMulticastList( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/*--------------------------------------------------------------*/ -/* Service Discovery Subroutines */ -/*--------------------------------------------------------------*/ -WLAN_STATUS -wlanoidSendP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSendP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetP2PSDResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 puQueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2PTerminateSDPhase( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -#if CFG_SUPPORT_ANTI_PIRACY -WLAN_STATUS -wlanoidSetSecCheckRequest( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidGetSecCheckResponse( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - -WLAN_STATUS -wlanoidSetNoaParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetOppPsParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetUApsdParam ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSetNetworkAddress ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pOpChannel( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidQueryP2pVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -WLAN_STATUS -wlanoidSetP2pSupplicantVersion( - IN P_ADAPTER_T prAdapter, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -WLAN_STATUS -wlanoidQueryP2pRssi( - IN P_ADAPTER_T prAdapter, - IN PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); -#endif - - -/*--------------------------------------------------------------*/ -/* Callbacks for event indication */ -/*--------------------------------------------------------------*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif -#endif /* _WLAN_P2P_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/aaa_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/aaa_fsm.c deleted file mode 100755 index d407ee7bbf76..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/aaa_fsm.c +++ /dev/null @@ -1,1534 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/aaa_fsm.c#1 $ -*/ - -/*! \file "aaa_fsm.c" - \brief This file defines the FSM for AAA MODULE. - - This file defines the FSM for AAA MODULE. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: aaa_fsm.c $ -** -** 08 24 2012 yuche.tsai -** [WCXRP00001119] [Volunteer Patch][WiFi Direct][Driver] Connection Policy Set for WFD SIGMA test -** Bug fix for Assoc Req rx check len. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 22 2012 yuche.tsai - * NULL - * Solve sigma test 5.1.3 issue, assoc response should have P2P IE. - * - * 12 02 2011 yuche.tsai - * NULL - * Resolve inorder issue under AP mode. - * - * data frame may TX before assoc response frame. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 06 17 2011 terry.wu - * NULL - * Add BoW 11N support. - * - * 06 02 2011 eddie.chen - * [WCXRP00000759] [MT6620 Wi-Fi][DRV] Update RCPI in AAA - * Update RCPI when receiving Assoc request. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 09 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * Skip to call p2pRunEventAAAComplete to avoid indicate STA connect twice. - * - * 03 04 2011 terry.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * Remove unused variable. - * - * 02 16 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Add more check after RX assoc frame under Hot-Spot mode. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 15 2011 puff.wen - * NULL - * [On behalf of Frog] Add CFG_ENABLE_WIFI_DIRECT to p2pRunEventAAAComplete - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 29 2010 yuche.tsai - * NULL - * Fix Compile warning, type cast from UINT_32 to UINT_16. - * - * 08 26 2010 yuche.tsai - * NULL - * In P2P AT GO test mode under WinXP, we would not indicate connected event to host. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 17 2010 yuche.tsai - * NULL - * Fix bug while enabling P2P GO. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * modify due to P2P functino call prototype change. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 02 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify CFG flags - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmSendEventJoinComplete ( - WLAN_STATUS rJoinStatus, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prSwRfb - ) -{ - P_MSG_SAA_JOIN_COMP_T prJoinCompMsg; - - - ASSERT(prStaRec); - - prJoinCompMsg = cnmMemAlloc(RAM_TYPE_TCM, sizeof(MSG_SAA_JOIN_COMP_T)); - if (!prJoinCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - if (IS_STA_IN_AIS(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - } - else if (IS_STA_IN_P2P(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - } - else if (IS_STA_IN_BOW(prStaRec)) { - prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - } - else { - ASSERT(0); - } - - prJoinCompMsg->rJoinStatus = rJoinStatus; - prJoinCompMsg->prStaRec = prStaRec; - prJoinCompMsg->prSwRfb = prSwRfb; - - mboxSendMsg(MBOX_ID_0, - (P_MSG_HDR_T)prJoinCompMsg, - MSG_SEND_METHOD_BUF); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmSendEventJoinComplete() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to AAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventStart ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_JOIN_REQ_T prJoinReqMsg; - P_STA_RECORD_T prStaRec; - P_AIS_BSS_INFO_T prAisBssInfo; - - - ASSERT(prMsgHdr); - - prJoinReqMsg = (P_MSG_SAA_JOIN_REQ_T)prMsgHdr; - prStaRec = prJoinReqMsg->prStaRec; - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM\n")); - - cnmMemFree(prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec->eStaType)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(&prStaRec->rTxReqDoneOrRxRespTimer); - - prStaRec->ucStaState = STA_STATE_1; - - /* Trigger SAA MODULE */ - saaFsmSteps(prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ -#endif - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aaaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode; - BOOLEAN fgReplyAuth = FALSE; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - - - ASSERT(prAdapter); - - do { - - - //4 <1> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <1.1> Validate Auth Frame by Auth Algorithm/Transation Seq - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <1.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = p2pFuncValidateAuth( - prAdapter, - prSwRfb, - &prStaRec, - &u2StatusCode); - } - else { - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <2> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)) { - - //4 <2.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - authProcessRxAuth1Frame(prAdapter, - prSwRfb, - prBssInfo->aucBSSID, - AUTH_ALGORITHM_NUM_OPEN_SYSTEM, - AUTH_TRANSACTION_SEQ_1, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <2.2> Validate Auth Frame for Network Specific Conditions - fgReplyAuth = bowValidateAuth(prAdapter, prSwRfb, &prStaRec, &u2StatusCode); - - } - else { - - fgReplyAuth = TRUE; - } - eNetTypeIndex = NETWORK_TYPE_BOW_INDEX; - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return; - } while (FALSE); - - if(prStaRec) { - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - //4 <3> Update STA_RECORD_T and reply Auth_2(Response to Auth_1) Frame - if (fgReplyAuth) { - - if (prStaRec) { - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != IDLE.\n", - prStaRec->eAuthAssocState)); - } - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - } - else { - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - prStaRec->ucAuthAlgNum = AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else { - /* NOTE(Kevin): We should have STA_RECORD_T if the status code was successful */ - ASSERT(!(u2StatusCode == STATUS_CODE_SUCCESSFUL)); - } - - /* NOTE: Ignore the return status for AAA */ - //4 <4> Reply Auth - authSendAuthFrame(prAdapter, - prStaRec, - eNetTypeIndex, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - u2StatusCode); - - } - - return; -} /* end of aaaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Request Frame and then -* trigger AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - UINT_16 u2StatusCode = STATUS_CODE_RESERVED; - BOOLEAN fgReplyAssocResp = FALSE; - - - ASSERT(prAdapter); - - do { - - //4 <1> Check if we have the STA_RECORD_T for incoming Assoc Req - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - ASSERT(0); // Only for debug phase - break; - } - - if (!IS_CLIENT_STA(prStaRec)) { - break; - } - - if (prStaRec->ucStaState == STA_STATE_3) { - /* Do Reassocation */ - } - else if ((prStaRec->ucStaState == STA_STATE_2) && - (prStaRec->eAuthAssocState == AAA_STATE_SEND_AUTH2)) { - /* Normal case */ - } - else { - DBGLOG(AAA, WARN, ("Previous AuthAssocState (%d) != SEND_AUTH2.\n", - prStaRec->eAuthAssocState)); - break; - } - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - //4 <2> Check P2P network conditions -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prBssInfo->fgIsNetActive) { - - //4 <2.1> Validate Assoc Req Frame and get Status Code - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - //4 <2.2> Validate Assoc Req Frame for Network Specific Conditions - fgReplyAssocResp = p2pFuncValidateAssocReq( - prAdapter, - prSwRfb, - (PUINT_16)&u2StatusCode); - } - else { - fgReplyAssocResp = TRUE; - } - - break; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - //4 <3> Check BOW network conditions -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]); - - if ((prBssInfo->fgIsNetActive) && - (OP_MODE_BOW == prBssInfo->eCurrentOPMode)){ - - //4 <3.1> Validate Auth Frame by Auth Algorithm/Transation Seq - /* Check if for this BSSID */ - if (WLAN_STATUS_SUCCESS == - assocProcessRxAssocReqFrame(prAdapter, - prSwRfb, - &u2StatusCode)) { - - if (STATUS_CODE_SUCCESSFUL == u2StatusCode) { - - //4 <3.2> Validate Auth Frame for Network Specific Conditions - fgReplyAssocResp = bowValidateAssocReq(prAdapter, prSwRfb, &u2StatusCode); - - } - else { - - fgReplyAssocResp = TRUE; - } - - /* TODO(Kevin): Allocate a STA_RECORD_T for new client */ - break; - } - } - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - return WLAN_STATUS_SUCCESS; // To release the SW_RFB_T - } while (FALSE); - - - //4 <4> Update STA_RECORD_T and reply Assoc Resp Frame - if (fgReplyAssocResp) { - UINT_16 u2IELength; - PUINT_8 pucIE; - - if ((((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->u2FrameCtrl & MASK_FRAME_TYPE) == - MAC_FRAME_REASSOC_REQ) { - - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - u2IELength = prSwRfb->u2PacketLen - - (UINT_16)OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]); - - pucIE = ((P_WLAN_ASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - - rlmProcessAssocReq(prAdapter, prSwRfb, pucIE, u2IELength); - - //4 <4.1> Assign Association ID - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - if (p2pRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - //prStaRec->eAuthAssocState = AA_STATE_IDLE; - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if ((IS_STA_IN_BOW(prStaRec))) { - -// if (bowRunEventAAAComplete(prAdapter, prStaRec) == WLAN_STATUS_SUCCESS) { - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - prStaRec->eAuthAssocState = AAA_STATE_SEND_ASSOC2; // NOTE(Kevin): for TX done - - /* NOTE(Kevin): Method A: Change to STATE_3 before handle TX Done */ - //cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - } -#if 0 - else { - /* Client List FULL. */ - u2StatusCode = STATUS_CODE_REQ_DECLINED; - - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - } -#endif -#endif - } - else { - prStaRec->u2AssocId = 0; /* Invalid Assocation ID */ - - /* If (Re)association fail, the peer can try Assocation w/o Auth immediately */ - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = u2StatusCode; - - /* NOTE: Ignore the return status for AAA */ - //4 <4.2> Reply Assoc Resp - assocSendReAssocRespFrame(prAdapter, prStaRec); - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth2/AssocReq) Event of AAA FSM. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aaaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(AAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - switch (prStaRec->eAuthAssocState) { - case AAA_STATE_SEND_AUTH2: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_2) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - /* NOTE(Kevin): Change to STATE_2 at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - } - else { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_1 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - } - - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - - } - break; - - case AAA_STATE_SEND_ASSOC2: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocRespFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (STATUS_CODE_SUCCESSFUL == prStaRec->u2StatusCode) { - if (TX_RESULT_SUCCESS == rTxDoneStatus) { - - prStaRec->eAuthAssocState = AA_STATE_IDLE; - - /* NOTE(Kevin): Change to STATE_3 at TX Done */ -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAASuccess(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - - if (IS_STA_IN_BOW(prStaRec)) - { - bowRunEventAAAComplete(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - else { - - prStaRec->eAuthAssocState = AAA_STATE_SEND_AUTH2; - - /* NOTE(Kevin): Change to STATE_2 */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - p2pRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventAAATxFail(prAdapter, prStaRec); - } -#endif /* CFG_ENABLE_BT_OVER_WIFI */ - - } - } - /* NOTE(Kevin): Ignore the TX Done Event of Auth Frame with Error Status Code */ - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of aaaFsmRunEventTxDone() */ -#endif /* CFG_SUPPORT_AAA */ - - -#if 0 /* TODO(Kevin): for abort event, just reset the STA_RECORD_T. */ -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send ABORT Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventAbort"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: ABORT\n")); - - - /* NOTE(Kevin): when reach here, the ARB_STATE should be in ARB_STATE_JOIN. */ - ASSERT(prJoinInfo->prBssDesc); - - //4 <1> Update Flags and Elements of JOIN Module. - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel all JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rJoinTimer); - - //4 <2> Update the associated STA_RECORD_T during JOIN. - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - if (prStaRec) { - - /* Update Station Record - Class 1 Flag */ - prStaRec->ucStaState = STA_STATE_1; - } -#if DBG - else { - ASSERT(0); /* Shouldn't happened, because we already add this STA_RECORD_T at JOIN_STATE_INIT */ - } -#endif /* DBG */ - - //4 <3> Pull back to IDLE. - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - //4 <4> If we are in Roaming, recover the settings of previous BSS. - /* NOTE: JOIN FAIL - - * Restore original setting from current BSS_INFO_T. - */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - return; -} /* end of joinFsmRunEventAbort() */ -#endif - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/ais_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/ais_fsm.c deleted file mode 100755 index 1ade1240ac47..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/ais_fsm.c +++ /dev/null @@ -1,4679 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/ais_fsm.c#1 $ -*/ - -/*! \file "aa_fsm.c" - \brief This file defines the FSM for SAA and AAA MODULE. - - This file defines the FSM for SAA and AAA MODULE. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: ais_fsm.c $ -** -** 10 31 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** to sync with CFG80211 behavior for CFG80211 will block disconnect request while not staying in connected state -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 08 07 2012 cp.wu -** [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework -** remove unnecessary driver workaround for WEP key change detection - it should be done by framework instead - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * correct reference to BSSID field in Association-Response frame. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 26 2011 tsaiyuan.hsu - * [WCXRP00001064] [MT6620 Wi-Fi][DRV]] add code with roaming awareness when disconnecting AIS network - * be aware roaming when disconnecting AIS network. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * STA_REC shall be NULL for Beacon's MSDU - * - * 10 13 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Reduce join failure count limit to 2 for faster re-join for other BSS - * 1. short join failure count limit to 2 - * 2. treat join timeout as kind of join failure as well - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 20 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * change window registry of driver for roaming. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 08 2011 tsaiyuan.hsu - * [WCXRP00000972] [MT6620 Wi-Fi][DRV]] check if roaming occurs after join failure to avoid state incosistence. - * check if roaming occurs after join failure to avoid deactivation of network. - * - * 08 24 2011 chinghwa.yu - * [WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Update RDD test mode cases. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * EnableRoaming in registry is deprecated. - * - * 08 16 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * use registry to enable or disable roaming. - * - * 07 07 2011 cp.wu - * [WCXRP00000840] [MT6620 Wi-Fi][Driver][AIS] Stop timer for joining when channel is released due to join failure count exceeding limit - * stop timer when joining operation is failed due to try count exceeds limitation - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not handle SCAN request immediately after connected to increase the probability of receiving 1st beacon frame. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * ensure DEAUTH is always sent before establish a new connection - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * typo fix: a right brace is missed. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * When RECONNECT request is identified as disconnected, it is necessary to check for pending scan request. - * - * 06 16 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * mark fgIsTransition as TRUE for state rolling. - * - * 06 16 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always check for pending scan after switched into NORMAL_TR state. - * - * 06 14 2011 cp.wu - * [WCXRP00000782] [MT6620 Wi-Fi][AIS] Treat connection at higher priority over scanning to avoid WZC connection timeout - * always treat connection request at higher priority over scanning request - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 18 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * change SCAN handling behavior when followed by a CONNECT/DISCONNECT requests by pending instead of dropping. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 13 2011 george.huang - * [WCXRP00000628] [MT6620 Wi-Fi][FW][Driver] Modify U-APSD setting to default OFF - * remove assert - * - * 03 18 2011 cp.wu - * [WCXRP00000575] [MT6620 Wi-Fi][Driver][AIS] reduce memory usage when generating mailbox message for scan request - * when there is no IE needed for probe request, then request a smaller memory for mailbox message - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 03 09 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * avoid clearing fgIsScanReqIssued so as to add scan results. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 04 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * reset retry conter of attemp to connect to ap after completion of join. - * - * 03 04 2011 cp.wu - * [WCXRP00000515] [MT6620 Wi-Fi][Driver] Surpress compiler warning which is identified by GNU compiler collection - * surpress compile warning occured when compiled by GNU compiler collection. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 02 23 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * when handling reconnect request, set fgTryScan as TRUE - * - * 02 22 2011 cp.wu - * [WCXRP00000487] [MT6620 Wi-Fi][Driver][AIS] Serve scan and connect request with a queue-based approach to improve response time for scanning request - * handle SCAN and RECONNECT with a FIFO approach. - * - * 02 09 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * Check if prRegInfo is null or not before initializing roaming parameters. - * - * 02 01 2011 cp.wu - * [WCXRP00000416] [MT6620 Wi-Fi][Driver] treat "unable to find BSS" as connection trial to prevent infinite reconnection trials - * treat "unable to find BSS" as connection trial to prevent infinite reconnection trials. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 14 2011 cp.wu - * [WCXRP00000359] [MT6620 Wi-Fi][Driver] add an extra state to ensure DEAUTH frame is always sent - * Add an extra state to guarantee DEAUTH frame is sent then connect to new BSS. - * This change is due to WAPI AP needs DEAUTH frame as a necessary step in handshaking protocol. - * - * 01 11 2011 cp.wu - * [WCXRP00000307] [MT6620 Wi-Fi][SQA]WHQL test .2c_wlan_adhoc case fail. - * [IBSS] when merged in, the bss state should be updated to firmware to pass WHQL adhoc failed item - * - * 01 10 2011 cp.wu - * [WCXRP00000351] [MT6620 Wi-Fi][Driver] remove from scanning result in OID handling layer when the corresponding BSS is disconnected due to beacon timeout - * remove from scanning result when the BSS is disconnected due to beacon timeout. - * - * 01 03 2011 cp.wu - * [WCXRP00000337] [MT6620 Wi-FI][Driver] AIS-FSM not to invoke cnmStaRecResetStatus directly 'cause it frees all belonging STA-RECs - * do not invoke cnmStaRecResetStatus() directly, nicUpdateBss will do the things after bss is disconnected - * - * 12 30 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * do not need to manipulate prStaRec after indicating BSS disconnection to firmware, 'cause all STA-RECs belongs to BSS has been freed already - * - * 12 27 2010 cp.wu - * [WCXRP00000269] [MT6620 Wi-Fi][Driver][Firmware] Prepare for v1.1 branch release - * add DEBUGFUNC() macro invoking for more detailed debugging information - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 11 25 2010 cp.wu - * [WCXRP00000208] [MT6620 Wi-Fi][Driver] Add scanning with specified SSID to AIS FSM - * add scanning with specified SSID facility to AIS-FSM - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 14 2010 wh.su - * [WCXRP00000097] [MT6620 Wi-Fi] [Driver] Fixed the P2P not setting the fgIsChannelExt value make scan not abort - * initial the fgIsChannelExt value. - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000049] [MT6620 Wi-Fi][Driver] Adhoc cannot be created successfully. - * keep IBSS-ALONE state retrying until further instruction is received - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 09 2010 yuche.tsai - * NULL - * Fix NULL IE Beacon issue. Sync Beacon Content to FW before enable beacon. - * Both in IBSS Create & IBSS Merge - * - * 09 09 2010 cp.wu - * NULL - * frequency is in unit of KHz thus no need to divide 1000 once more. - * - * 09 06 2010 cp.wu - * NULL - * 1) initialize for correct parameter even for disassociation. - * 2) AIS-FSM should have a limit on trials to build connection - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 25 2010 cp.wu - * NULL - * add option for enabling AIS 5GHz scan - * - * 08 25 2010 cp.wu - * NULL - * [AIS-FSM] IBSS no longer needs to acquire channel for beaconing, RLM/CNM will handle the channel switching when BSS information is updated - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 12 2010 cp.wu - * NULL - * check-in missed files. - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 09 2010 cp.wu - * NULL - * reset fgIsScanReqIssued when abort request is received right after join completion. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 cp.wu - * NULL - * comment out deprecated members in BSS_INFO, which are only used by firmware rather than driver. - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 29 2010 cp.wu - * NULL - * eliminate u4FreqInKHz usage, combined into rConnections.ucAdHoc* - * - * 07 29 2010 cp.wu - * NULL - * allocate on MGMT packet for IBSS beaconing. - * - * 07 29 2010 cp.wu - * NULL - * [AIS-FSM] fix: when join failed, release channel privilege as well - * - * 07 28 2010 cp.wu - * NULL - * reuse join-abort sub-procedure to reduce code size. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 26 2010 cp.wu - * - * AIS-FSM: when scan request is coming in the 1st 5 seconds of channel privilege period, just pend it til 5-sec. period finishes - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 26 2010 cp.wu - * - * re-commit code logic being overwriten. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 cp.wu - * - * 1) enable Ad-Hoc - * 2) disable beacon timeout handling temporally due to unexpected beacon timeout event. - * - * 07 23 2010 cp.wu - * - * indicate scan done for linux wireless extension - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 21 2010 cp.wu - * - * separate AIS-FSM states into different cases of channel request. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 20 2010 cp.wu - * - * 1) [AIS] when new scan is issued, clear currently available scanning result except the connected one - * 2) refine disconnection behaviour when issued during BG-SCAN process - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 cp.wu - * - * 1) init AIS_BSS_INFO as channel number = 1 with band = 2.4GHz - * 2) correct typo - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * for AIS scanning, driver specifies no extra IE for probe request - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 yarco.yang - * - * Remove CFG_MQM_MIGRATION - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Refine AIS-FSM by divided into more states - * - * 07 13 2010 cm.chang - * - * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * for first connection, if connecting failed do not enter into scan state. - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * once STA-REC is allocated and updated, invoke cnmStaRecChangeState() to sync. with firmware. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * remove unused definitions. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 01 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add conditionial compiling flag to choose default available bandwidth - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile error if CFG_CMD_EVENT_VER_009 == 0 for prEventConnStatus->ucNetworkType. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 17 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Call pmAbort() and add ucNetworkType field in EVENT_CONNECTION_STATUS - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - define of MQM_WMM_PARSING was removed - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * Fix typo - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 07 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add TX Power Control RCPI function. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 25 2010 wh.su - * [BORA00000676][MT6620] Support the frequency setting and query at build connection / connection event - * modify the build connection and status event structure bu CMD_EVENT doc 0.09 draft, default is disable. - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 24 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Set / Unset POWER STATE in AIS Network - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add PHY_CONFIG to change Phy Type - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Use bcmWiFiNotify to replace wifi_send_msg to pass infomation to BCM module. - * - * 03 03 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Remove wmt_task definition and add PTA function. - * - * 03 02 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Init TXM and MQM testing procedures in aisFsmRunEventJoinComplete() - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Modified aisUpdateBssInfo() to call TXM's functions for setting WTBL TX parameters - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * clear the pmkid cache while indicate media disconnect. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * . - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Enabled MQM parsing WMM IEs for non-AP mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Remove CFG_TEST_VIRTUAL_CMD and add support of Driver STA_RECORD_T activation - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Support dynamic channel selection - * - * 02 23 2010 wh.su - * [BORA00000621][MT6620 Wi-Fi] Add the RSSI indicate to avoid XP stalled for query rssi value - * Adding the RSSI event support, using the HAL function to get the rcpi value and tranlsate to RSSI and indicate to driver - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Set max AMDPU size supported by the peer to 64 KB, removed mqmInit() and mqmTxSendAddBaReq() function calls in aisUpdateBssInfo() - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 15 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Configured the AMPDU factor to 3 for the APu1rwduu`wvpghlqg|q`mpdkb+ilp - * - * 01 14 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Add WiFi BCM module for the 1st time. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Refine JOIN Complete and seperate the function of Media State indication - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sample code to update the wlan table rate, - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Different function prototype of wifi_send_msg() - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlm related function to process HT info when join complete - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * default the acquired wlan table entry code off - * - * Dec 9 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to acquired the wlan table entry, and a sample code to update the BA bit at table - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix the problem of prSwRfb overwrited by event packet in aisFsmRunEventJoinComplete() - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to integrate the security related code - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove redundant declaration - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add code for JOIN init and JOIN complete - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise ENUM_MEDIA_STATE to ENUM_PARAM_MEDIA_STATE - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add fgIsScanReqIssued to CONNECTION_SETTINGS_T - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise Virtual CMD handler due to structure changed - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Virtual CMD & RESP for testing CMD PATH - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmInitializeConnectionSettings() - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add CFG_TEST_MGMT_FSM flag for aisFsmTest() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define AIS_ROAMING_CONNECTION_TRIAL_LIMIT 2 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAisState[AIS_STATE_NUM] = { - (PUINT_8)DISP_STRING("AIS_STATE_IDLE"), - (PUINT_8)DISP_STRING("AIS_STATE_SEARCH"), - (PUINT_8)DISP_STRING("AIS_STATE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_ONLINE_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_LOOKING_FOR"), - (PUINT_8)DISP_STRING("AIS_STATE_WAIT_FOR_NEXT_SCAN"), - (PUINT_8)DISP_STRING("AIS_STATE_REQ_CHANNEL_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_JOIN"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_ALONE"), - (PUINT_8)DISP_STRING("AIS_STATE_IBSS_MERGE"), - (PUINT_8)DISP_STRING("AIS_STATE_NORMAL_TR"), - (PUINT_8)DISP_STRING("AIS_STATE_DISCONNECTING") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value of the connection settings for -* AIS network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisInitializeConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucAnyBSSID[] = BC_BSSID; - UINT_8 aucZeroMacAddr[] = NULL_MAC_ADDR; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Setup default values for operation */ - COPY_MAC_ADDR(prConnSettings->aucMacAddress, aucZeroMacAddr); - - prConnSettings->ucDelayTimeOfDisconnectEvent = AIS_DELAY_TIME_OF_DISCONNECT_SEC; - - COPY_MAC_ADDR(prConnSettings->aucBSSID, aucAnyBSSID); - prConnSettings->fgIsConnByBssidIssued = FALSE; - - prConnSettings->fgIsConnReqIssued = FALSE; - prConnSettings->fgIsDisconnectedByNonRequest = FALSE; - - prConnSettings->ucSSIDLen = 0; - - prConnSettings->eOPMode = NET_TYPE_INFRA; - - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - - if(prRegInfo) { - prConnSettings->ucAdHocChannelNum = (UINT_8) nicFreq2ChannelNum(prRegInfo->u4StartFreq); - prConnSettings->eAdHocBand = prRegInfo->u4StartFreq < 5000000 ? BAND_2G4 : BAND_5G; - prConnSettings->eAdHocMode = (ENUM_PARAM_AD_HOC_MODE_T) (prRegInfo->u4AdhocMode); - } - - prConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prConnSettings->eEncStatus = ENUM_ENCRYPTION_DISABLED; - - prConnSettings->fgIsScanReqIssued = FALSE; - - /* MIB attributes */ - prConnSettings->u2BeaconPeriod = DOT11_BEACON_PERIOD_DEFAULT; - - prConnSettings->u2RTSThreshold = DOT11_RTS_THRESHOLD_DEFAULT; - - prConnSettings->u2DesiredNonHTRateSet = RATE_SET_ALL_ABG; - - //prConnSettings->u4FreqInKHz; /* Center frequency */ - - - /* Set U-APSD AC */ - prConnSettings->bmfgApsdEnAc = PM_UAPSD_NONE; - - secInit(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Features */ - prConnSettings->fgIsEnableRoaming = FALSE; -#if CFG_SUPPORT_ROAMING - if(prRegInfo) { - prConnSettings->fgIsEnableRoaming = ((prRegInfo->fgDisRoaming > 0)?(FALSE):(TRUE)); - } -#endif /* CFG_SUPPORT_ROAMING */ - - prConnSettings->fgIsAdHocQoSEnable = FALSE; - - prConnSettings->eDesiredPhyConfig = PHY_CONFIG_802_11ABGN; - - /* Set default bandwidth modes */ - prConnSettings->uc2G4BandwidthMode = CONFIG_BW_20M; - prConnSettings->uc5GBandwidthMode = CONFIG_BW_20_40M; - - return; -} /* end of aisFsmInitializeConnectionSettings() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to initialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmInit()"); - DBGLOG(SW1, INFO, ("->aisFsmInit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Initiate FSM - prAisFsmInfo->ePreviousState = AIS_STATE_IDLE; - prAisFsmInfo->eCurrentState = AIS_STATE_IDLE; - - prAisFsmInfo->ucAvailableAuthTypes = 0; - - prAisFsmInfo->prTargetBssDesc = (P_BSS_DESC_T)NULL; - - prAisFsmInfo->ucSeqNumOfReqMsg = 0; - prAisFsmInfo->ucSeqNumOfChReq = 0; - prAisFsmInfo->ucSeqNumOfScanReq = 0; - - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - //4 <1.1> Initiate FSM - Timer INIT - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventBGSleepTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventIbssAloneTimeOut, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisPostponedEventOfDisconnTimeout, - (UINT_32)NULL); - - cnmTimerInitTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)aisFsmRunEventJoinTimeout, - (UINT_32)NULL); - - //4 <1.2> Initiate PWR STATE - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_AIS_INDEX); - COPY_MAC_ADDR(prAisBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prAisBssInfo->eBand = BAND_2G4; - prAisBssInfo->ucPrimaryChannel = 1; - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - //4 <4> Allocate MSDU_INFO_T for Beacon - prAisBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prAisBssInfo->prBeacon) { - prAisBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prAisBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - } - else { - ASSERT(0); - } - -#if 0 - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - if (prAdapter->u4UapsdAcBmp == 0) { - prAdapter->u4UapsdAcBmp = CFG_INIT_UAPSD_AC_BMP; - //ASSERT(prAdapter->u4UapsdAcBmp); - } - prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prAisBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - - /* request list initialization */ - LINK_INITIALIZE(&prAisFsmInfo->rPendingReqList); - - //DBGPRINTF("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - //prAisBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - //prAisBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - //prAisBssInfo->rPmProfSetupInfo.ucUapsdSp); - - return; -} /* end of aisFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief the function is used to uninitialize the value in AIS_FSM_INFO_T for -* AIS FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - - DEBUGFUNC("aisFsmUninit()"); - DBGLOG(SW1, INFO, ("->aisFsmUninit()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - //4 <1> Stop all timers - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - //4 <2> flush pending request - aisFsmFlushRequest(prAdapter); - - //4 <3> Reset driver-domain BSS-INFO - if(prAisBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prAisBssInfo->prBeacon); - prAisBssInfo->prBeacon = NULL; - } - -#if CFG_SUPPORT_802_11W - rsnStopSaQuery(prAdapter); -#endif - - return; -} /* end of aisFsmUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialization of JOIN STATE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the BSS we will try to join with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_JOIN ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_JOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisSpecificBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - ASSERT(prBssDesc); - - //4 <1> We are going to connect to this BSS. - prBssDesc->fgIsConnecting = TRUE; - - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_LEGACY_AP, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> Update ucAvailableAuthTypes which we can choice during SAA - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - prStaRec->fgIsReAssoc = FALSE; - - switch (prConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - - - case AUTH_MODE_SHARED: - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - - - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(AIS, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prAisFsmInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - - default: - ASSERT(!(prConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(AIS, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - - /* TODO(tyhsu): Assume that Roaming Auth Type is equal to ConnSettings eAuthMode */ - prAisSpecificBssInfo->ucRoamingAuthTypes = prAisFsmInfo->ucAvailableAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - - } - else { - ASSERT(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE); - ASSERT(!prBssDesc->fgIsConnected); - - DBGLOG(AIS, LOUD, ("JOIN INIT: AUTH TYPE = %d for Roaming\n", - prAisSpecificBssInfo->ucRoamingAuthTypes)); - - - prStaRec->fgIsReAssoc = TRUE; /* We do roaming while the medium is connected */ - - /* TODO(Kevin): We may call a sub function to acquire the Roaming Auth Type */ - prAisFsmInfo->ucAvailableAuthTypes = prAisSpecificBssInfo->ucRoamingAuthTypes; - - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT_FOR_ROAMING; - } - - - //4 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(AIS, LOUD, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prConnSettings->eConnectionPolicy == CONNECT_BY_SSID_ANY) { - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prConnSettings->aucSSID, - prConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - } - - //4 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - if (1) { - int j; - P_FRAG_INFO_T prFragInfo; - for (j = 0; j < MAX_NUM_CONCURRENT_FRAGMENTED_MSDUS; j++) { - prFragInfo = &prStaRec->rFragInfo[j]; - - if (prFragInfo->pr1stFrag) { - //nicRxReturnRFB(prAdapter, prFragInfo->pr1stFrag); - prFragInfo->pr1stFrag = (P_SW_RFB_T)NULL; - } - } - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return; -} /* end of aisFsmInit_JOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmStateInit_RetryJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_REQ_T prJoinReqMsg; - - DEBUGFUNC("aisFsmStateInit_RetryJOIN()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Retry other AuthType if possible */ - if (!prAisFsmInfo->ucAvailableAuthTypes) { - return FALSE; - } - - if (prAisFsmInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(AIS, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prAisFsmInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(AIS, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - } - - prAisFsmInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - - ASSERT(0); // Can't trigger SAA FSM - return FALSE; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - return TRUE; - -}/* end of aisFsmRetryJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_ALONE -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_ALONE ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Check if IBSS was created before ? - if (prAisBssInfo->fgIsBeaconActivated) { - - //4 <2> Start IBSS Alone Timer for periodic SCAN and then SEARCH -#if !CFG_SLT_SUPPORT - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); -#endif - } - - aisFsmCreateIBSS(prAdapter); - - return; -} /* end of aisFsmStateInit_IBSS_ALONE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief State Initialization of AIS_STATE_IBSS_MERGE -* -* @param[in] prBssDesc The pointer of BSS_DESC_T which is the IBSS we will try to merge with. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateInit_IBSS_MERGE ( - IN P_ADAPTER_T prAdapter, - P_BSS_DESC_T prBssDesc - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - - ASSERT(prBssDesc); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - prStaRec->fgIsMerging = TRUE; - - prAisFsmInfo->prTargetStaRec = prStaRec; - - //4 <2.1> sync. to firmware domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - //4 <3> IBSS-Merge - aisFsmMergeIBSS(prAdapter, prStaRec); - - return; -} /* end of aisFsmStateInit_IBSS_MERGE() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_JOIN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_JOIN_ABORT_T prJoinAbortMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* 1. Abort JOIN process */ - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - - ASSERT(0); // Can't abort SAA FSM - return; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_CONNECT_INDICATION, - NULL, - 0); - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_AIS_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prAisFsmInfo->prTargetStaRec; - - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisFsmInfo->prTargetStaRec->aucMacAddr); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - /* 2. Return channel privilege */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - return; -} /* end of aisFsmAbortJOIN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of SCAN Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - - ASSERT(0); // Can't abort SCN FSM - return; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prAisFsmInfo->ucSeqNumOfScanReq; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - prScanCancelMsg->fgIsChannelExt = FALSE; - } -#endif - - /* unbuffered message to guarantee scan is cancelled in sequence */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_UNBUF); - - return; -} /* end of aisFsmAbortSCAN() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_NORMAL_TR ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* TODO(Kevin): Do abort other MGMT func */ - - /* 1. Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* 2.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 2.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - return; -} /* end of aisFsmAbortNORMAL_TR() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of NORMAL_TR Abort -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort_IBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_DESC_T prBssDesc; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // reset BSS-DESC - if (prAisFsmInfo->prTargetStaRec) { - prBssDesc = scanSearchBssDescByTA(prAdapter, - prAisFsmInfo->prTargetStaRec->aucMacAddr); - - if (prBssDesc) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - } - } - - // release channel privilege - aisFsmReleaseCh(prAdapter); - - return; -} -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of AIS(Ad-hoc, Infra STA) -* -* @param[in] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmSteps ( - IN P_ADAPTER_T prAdapter, - ENUM_AIS_STATE_T eNextState - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - P_MSG_CH_REQ_T prMsgChReq; - P_MSG_SCN_SCAN_REQ prScanReqMsg; - P_AIS_REQ_HDR_T prAisReq; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - UINT_16 u2ScanIELen; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("aisFsmSteps()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - - /* Do entering Next State */ - prAisFsmInfo->ePreviousState = prAisFsmInfo->eCurrentState; - -#if DBG - DBGLOG(AIS, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAisState[prAisFsmInfo->eCurrentState], - apucDebugAisState[eNextState])); -#else - DBGLOG(AIS, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prAisFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prAisFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case AIS_STATE_IDLE: - - prAisReq = aisFsmGetNextRequest(prAdapter); - - if(prAisReq == NULL || prAisReq->eReqType == AIS_REQUEST_RECONNECT) { - if (prConnSettings->fgIsConnReqIssued == TRUE && - prConnSettings->fgIsDisconnectedByNonRequest == FALSE) { - - prAisFsmInfo->fgTryScan = TRUE; - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // reset trial count - prAisFsmInfo->ucConnTrialCount = 0; - - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - else { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // check for other pending request - if(prAisReq) { - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_SCAN; - - fgIsTransition = TRUE; - } - } - } - - if(prAisReq) { - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - } - else if(prAisReq->eReqType == AIS_REQUEST_SCAN) { -#if CFG_SUPPORT_ROAMING - prAisFsmInfo->fgIsRoamingScanPending = FALSE; -#endif /* CFG_SUPPORT_ROAMING */ - wlanClearScanningResult(prAdapter); - - eNextState = AIS_STATE_SCAN; - fgIsTransition = TRUE; - - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - else if(prAisReq->eReqType == AIS_REQUEST_ROAMING_CONNECT || prAisReq->eReqType == AIS_REQUEST_ROAMING_SEARCH) { - /* ignore */ - /* free the message */ - cnmMemFree(prAdapter, prAisReq); - } - - prAisFsmInfo->u4SleepInterval = AIS_BG_SCAN_INTERVAL_MIN_SEC; - - break; - - case AIS_STATE_SEARCH: - //4 <1> Search for a matched candidate and save it to prTargetBssDesc. -#if CFG_SLT_SUPPORT - prBssDesc = prAdapter->rWifiVar.rSltInfo.prPseudoBssDesc; -#else - prBssDesc = scanSearchBssDescByPolicy(prAdapter, NETWORK_TYPE_AIS_INDEX); -#endif - - // we are under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(prAisFsmInfo->ucConnTrialCount > AIS_ROAMING_CONNECTION_TRIAL_LIMIT) { -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_CONNLIMIT); -#endif /* CFG_SUPPORT_ROAMING */ - // reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // abort connection trial - prConnSettings->fgIsConnReqIssued = FALSE; - - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - - break; - } - } - - //4 <2> We are not under Roaming Condition. - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - - //4 <2.a> If we have the matched one - if (prBssDesc) { - - //4 Stored the Selected BSS security cipher. For later asoc req compose IE - prAisBssInfo->u4RsnSelectedGroupCipher = - prBssDesc->u4RsnSelectedGroupCipher; - prAisBssInfo->u4RsnSelectedPairwiseCipher = - prBssDesc->u4RsnSelectedPairwiseCipher; - prAisBssInfo->u4RsnSelectedAKMSuite = - prBssDesc->u4RsnSelectedAKMSuite; - - //4 Do STATE transition and update current Operation Mode. - if (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - - // increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - } -#if CFG_SUPPORT_ADHOC - else if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - /* Record the target BSS_DESC_T for next STATE. */ - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - eNextState = AIS_STATE_IBSS_MERGE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - //4 <2.b> If we don't have the matched one - else { - - // increase connection trial count for infrastructure connection - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - prAisFsmInfo->ucConnTrialCount++; - } - - //4 Try to SCAN - if (prAisFsmInfo->fgTryScan) { - eNextState = AIS_STATE_LOOKING_FOR; - - fgIsTransition = TRUE; - } - //4 We've do SCAN already, now wait in some STATE. - else { - if (prConnSettings->eOPMode == NET_TYPE_INFRA) { - - /* issue reconnect request, and retreat to idle state for scheduling */ - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - eNextState = AIS_STATE_IDLE; - fgIsTransition = TRUE; - } -#if CFG_SUPPORT_ADHOC - else if ((prConnSettings->eOPMode == NET_TYPE_IBSS) - || (prConnSettings->eOPMode == NET_TYPE_AUTO_SWITCH) - || (prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS)) { - - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - prAisFsmInfo->prTargetBssDesc = NULL; - - eNextState = AIS_STATE_IBSS_ALONE; - fgIsTransition = TRUE; - } -#endif /* CFG_SUPPORT_ADHOC */ - else { - ASSERT(0); - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - fgIsTransition = TRUE; - } - } - } - } - //4 <3> We are under Roaming Condition. - else { // prAdapter->eConnectionState == MEDIA_STATE_CONNECTED. - - //4 <3.a> This BSS_DESC_T is our AP. - /* NOTE(Kevin 2008/05/16): Following cases will go back to NORMAL_TR. - * CASE I: During Roaming, APP(WZC/NDISTEST) change the connection - * settings. That make we can NOT match the original AP, so the - * prBssDesc is NULL. - * CASE II: The same reason as CASE I. Because APP change the - * eOPMode to other network type in connection setting - * (e.g. NET_TYPE_IBSS), so the BssDesc become the IBSS node. - * (For CASE I/II, before WZC/NDISTEST set the OID_SSID, it will change - * other parameters in connection setting first. So if we do roaming - * at the same time, it will hit these cases.) - * - * CASE III: Normal case, we can't find other candidate to roam - * out, so only the current AP will be matched. - * - * CASE VI: Timestamp of the current AP might be reset - */ - if ((!prBssDesc) || /* CASE I */ - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) || /* CASE II */ - (prBssDesc->fgIsConnected) || /* CASE III */ - (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)) /* CASE VI */) { -#if DBG - if ((prBssDesc) && - (prBssDesc->fgIsConnected)) { - ASSERT(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); - } -#endif /* DBG */ - /* We already associated with it, go back to NORMAL_TR */ - /* TODO(Kevin): Roaming Fail */ -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventFail(prAdapter, ROAMING_FAIL_REASON_NOCANDIDATE); -#endif /* CFG_SUPPORT_ROAMING */ - - /* Retreat to NORMAL_TR state */ - eNextState = AIS_STATE_NORMAL_TR; - fgIsTransition = TRUE; - } - //4 <3.b> Try to roam out for JOIN this BSS_DESC_T. - else { -#if DBG - ASSERT(UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID)); -#endif /* DBG */ - - //4 Record the target BSS_DESC_T for next STATE. - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - // tyhsu: increase connection trial count - prAisFsmInfo->ucConnTrialCount++; - - /* Transit to channel acquire */ - eNextState = AIS_STATE_REQ_CHANNEL_JOIN; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - - DBGLOG(AIS, LOUD, ("SCAN: Idle Begin - Current Time = %ld\n", kalGetTimeTick())); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rBGScanTimer, - SEC_TO_MSEC(prAisFsmInfo->u4SleepInterval)); - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (prAisFsmInfo->u4SleepInterval < AIS_BG_SCAN_INTERVAL_MAX_SEC) { - prAisFsmInfo->u4SleepInterval <<= 1; - } - break; - - case AIS_STATE_SCAN: - case AIS_STATE_ONLINE_SCAN: - case AIS_STATE_LOOKING_FOR: - - if(!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) { - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - // sync with firmware - nicActivateNetwork(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - - /* IE length decision */ - if(prAisFsmInfo->u4ScanIELength > 0) { - u2ScanIELen = (UINT_16)prAisFsmInfo->u4ScanIELength; - } - else { -#if CFG_SUPPORT_WPS2 - u2ScanIELen = prAdapter->prGlueInfo->u2WSCIELen; -#else - u2ScanIELen = 0; -#endif - } - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - OFFSET_OF(MSG_SCN_SCAN_REQ, aucIE) + u2ScanIELen); - if (!prScanReqMsg) { - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prScanReqMsg->rMsgHdr.eMsgId = MID_AIS_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = ++prAisFsmInfo->ucSeqNumOfScanReq; - prScanReqMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - -#if CFG_SUPPORT_RDD_TEST_MODE - prScanReqMsg->eScanType = SCAN_TYPE_PASSIVE_SCAN; -#else - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; -#endif - - if(prAisFsmInfo->eCurrentState == AIS_STATE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - if(prAisFsmInfo->ucScanSSIDLen == 0) { - /* Scan for all available SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - } - else { - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen); - } - } - else { - /* Scan for determined SSID */ - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - COPY_SSID(prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - } - - /* check if tethering is running and need to fix on specific channel */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_SPECIFIED; - prScanReqMsg->ucChannelListNum = 1; - prScanReqMsg->arChnlInfoList[0].eBand - = eBand;; - prScanReqMsg->arChnlInfoList[0].ucChannelNum - = ucChannel; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_NULL) { - if(prAdapter->fgEnable5GBand == TRUE) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_2G4) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - } - else if(prAdapter->aePreferBand[NETWORK_TYPE_AIS_INDEX] == BAND_5G) { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_5G; - } - else { - prScanReqMsg->eScanChannel = SCAN_CHANNEL_FULL; - ASSERT(0); - } - - if(prAisFsmInfo->u4ScanIELength > 0) { - kalMemCopy(prScanReqMsg->aucIE, prAisFsmInfo->aucScanIEBuf, prAisFsmInfo->u4ScanIELength); - } - else { -#if CFG_SUPPORT_WPS2 - if(prAdapter->prGlueInfo->u2WSCIELen > 0) { - kalMemCopy(prScanReqMsg->aucIE, &prAdapter->prGlueInfo->aucWSCIE, prAdapter->prGlueInfo->u2WSCIELen); - } - } -#endif - - prScanReqMsg->u2IELen = u2ScanIELen; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgTryScan = FALSE; /* Will enable background sleep for infrastructure */ - - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - return; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChReq->ucTokenID = ++prAisFsmInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prMsgChReq->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prMsgChReq->eRfSco = prAisFsmInfo->prTargetBssDesc->eSco; - prMsgChReq->eRfBand = prAisFsmInfo->prTargetBssDesc->eBand; - COPY_MAC_ADDR(prMsgChReq->aucBSSID, prAisFsmInfo->prTargetBssDesc->aucBSSID); - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prAisFsmInfo->fgIsChannelRequested = TRUE; - break; - - case AIS_STATE_JOIN: - aisFsmStateInit_JOIN(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - aisFsmStateInit_IBSS_ALONE(prAdapter); - break; - - case AIS_STATE_IBSS_MERGE: - aisFsmStateInit_IBSS_MERGE(prAdapter, prAisFsmInfo->prTargetBssDesc); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_NORMAL_TR: - if(prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - /* Don't do anything when rJoinTimeoutTimer is still ticking */ - } - else { - /* 1. Process for pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - fgIsTransition = TRUE; - } - /* 2. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE) == TRUE) { - eNextState = AIS_STATE_LOOKING_FOR; - fgIsTransition = TRUE; - } - /* 3. Process for pending roaming scan */ - else if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE) == TRUE) { - eNextState = AIS_STATE_SEARCH; - fgIsTransition = TRUE; - } - } - - break; - - case AIS_STATE_DISCONNECTING: - /* send for deauth frame for disconnection */ - authSendDeauthFrame(prAdapter, - prAisBssInfo->prStaRecOfAP, - (P_SW_RFB_T)NULL, - REASON_CODE_DEAUTH_LEAVING_BSS, - aisDeauthXmitComplete); - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - - } - } - while (fgIsTransition); - - return; - -} /* end of aisFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - UINT_8 ucSeqNumOfCompMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("aisFsmRunEventScanDone()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - DBGLOG(AIS, LOUD, ("EVENT-SCAN DONE: Current Time = %ld\n", kalGetTimeTick())); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - ASSERT(prScanDoneMsg->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX); - - ucSeqNumOfCompMsg = prScanDoneMsg->ucSeqNum; - cnmMemFree(prAdapter, prMsgHdr); - - eNextState = prAisFsmInfo->eCurrentState; - - if (ucSeqNumOfCompMsg != prAisFsmInfo->ucSeqNumOfScanReq) { - DBGLOG(AIS, WARN, ("SEQ NO of AIS SCN DONE MSG is not matched.\n")); - } - else { - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); - eNextState = AIS_STATE_IDLE; - - break; - - case AIS_STATE_ONLINE_SCAN: - prConnSettings->fgIsScanReqIssued = FALSE; - - /* reset scan IE buffer */ - prAisFsmInfo->u4ScanIELength = 0; - - kalScanDone(prAdapter->prGlueInfo, KAL_NETWORK_TYPE_AIS_INDEX, WLAN_STATUS_SUCCESS); -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_NORMAL_TR; -#endif /* CFG_SUPPORT_ROAMING */ - - break; - - case AIS_STATE_LOOKING_FOR: -#if CFG_SUPPORT_ROAMING - eNextState = aisFsmRoamingScanResultsUpdate(prAdapter); -#else - eNextState = AIS_STATE_SEARCH; -#endif /* CFG_SUPPORT_ROAMING */ - break; - - default: - break; - - } - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventScanDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - UINT_8 ucReasonOfDisconnect; - BOOLEAN fgDelayIndication; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("aisFsmRunEventAbort()"); - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Extract information of Abort Message and then free memory. - prAisAbortMsg = (P_MSG_AIS_ABORT_T)prMsgHdr; - ucReasonOfDisconnect = prAisAbortMsg->ucReasonOfDisconnect; - fgDelayIndication = prAisAbortMsg->fgDelayIndication; - - cnmMemFree(prAdapter, prMsgHdr); - -#if DBG - DBGLOG(AIS, LOUD, ("EVENT-ABORT: Current State %s\n", - apucDebugAisState[prAisFsmInfo->eCurrentState])); -#else - DBGLOG(AIS, LOUD, ("[%d] EVENT-ABORT: Current State [%d]\n", - DBG_AIS_IDX, - prAisFsmInfo->eCurrentState)); -#endif - - //4 <2> clear previous pending connection request and insert new one - if(ucReasonOfDisconnect == DISCONNECT_REASON_CODE_DEAUTHENTICATED - || ucReasonOfDisconnect == DISCONNECT_REASON_CODE_DISASSOCIATED) { - prConnSettings->fgIsDisconnectedByNonRequest = TRUE; - } - else { - prConnSettings->fgIsDisconnectedByNonRequest = FALSE; - } - - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - - if(prAisFsmInfo->eCurrentState != AIS_STATE_DISCONNECTING) { - //4 <3> invoke abort handler - aisFsmStateAbort(prAdapter, ucReasonOfDisconnect, fgDelayIndication); - } - - return; -} /* end of aisFsmRunEventAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function handles AIS-FSM abort event/command -* -* \param[in] prAdapter Pointer of ADAPTER_T -* ucReasonOfDisconnect Reason for disonnection -* fgDelayIndication Option to delay disconnection indication -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmStateAbort ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucReasonOfDisconnect, - BOOLEAN fgDelayIndication - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - BOOLEAN fgIsCheckConnected; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - fgIsCheckConnected = FALSE; - - //4 <1> Save information of Abort Message and then free memory. - prAisBssInfo->ucReasonOfDisconnect = ucReasonOfDisconnect; - - //4 <2> Abort current job. - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IDLE: - case AIS_STATE_SEARCH: - break; - - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - /* Do cancel timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rBGScanTimer); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - break; - - case AIS_STATE_LOOKING_FOR: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_REQ_CHANNEL_JOIN: - /* Release channel to CNM */ - aisFsmReleaseCh(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_JOIN: - /* Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* in case roaming is triggered */ - fgIsCheckConnected = TRUE; - break; - -#if CFG_SUPPORT_ADHOC - case AIS_STATE_IBSS_ALONE: - case AIS_STATE_IBSS_MERGE: - aisFsmStateAbort_IBSS(prAdapter); - break; -#endif /* CFG_SUPPORT_ADHOC */ - - case AIS_STATE_ONLINE_SCAN: - /* Do abort SCAN */ - aisFsmStateAbort_SCAN(prAdapter); - - /* queue for later handling */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, FALSE) == FALSE) { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_NORMAL_TR: - fgIsCheckConnected = TRUE; - break; - - case AIS_STATE_DISCONNECTING: - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - - break; - - default: - break; - } - - if (fgIsCheckConnected && - (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState)) { - - /* switch into DISCONNECTING state for sending DEAUTH if necessary */ - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_NEW_CONNECTION && - prAisBssInfo->prStaRecOfAP && - prAisBssInfo->prStaRecOfAP->fgIsInUse) { - aisFsmSteps(prAdapter, AIS_STATE_DISCONNECTING); - - return; - } - else { - /* Do abort NORMAL_TR */ - aisFsmStateAbort_NORMAL_TR(prAdapter); - } - } - - aisFsmDisconnect(prAdapter, fgDelayIndication); - - return; - -} /* end of aisFsmStateAbort() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Join Complete Event from SAA FSM for AIS FSM -* -* @param[in] prMsgHdr Message of Join Complete of SAA FSM. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_JOIN_COMP_T prJoinCompMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prAssocRspSwRfb; - - DEBUGFUNC("aisFsmRunEventJoinComplete()"); - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prStaRec = prJoinCompMsg->prStaRec; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - - eNextState = prAisFsmInfo->eCurrentState; - - // Check State and SEQ NUM - if (prAisFsmInfo->eCurrentState == AIS_STATE_JOIN) { - P_BSS_INFO_T prAisBssInfo; - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - // Check SEQ NUM - if (prJoinCompMsg->ucSeqNum == prAisFsmInfo->ucSeqNumOfReqMsg) { - - - //4 <1> JOIN was successful - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //1. Reset retry count - prAisFsmInfo->ucConnTrialCount = 0; - - // Completion of roaming - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - -#if CFG_SUPPORT_ROAMING - //2. Deactivate previous BSS - aisFsmRoamingDisconnectPrevAP(prAdapter, prStaRec); - - //3. Update bss based on roaming staRec - aisUpdateBssInfoForRoamingAP(prAdapter, prStaRec, prAssocRspSwRfb); -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_AIS_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventStart(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <1.7> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - } - //4 <2> JOIN was not successful - else { - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (aisFsmStateInit_RetryJOIN(prAdapter, prStaRec) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* 1. Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* 2. release channel */ - aisFsmReleaseCh(prAdapter); - - /* 3.1 stop join timeout timer */ - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rJoinTimeoutTimer); - - /* 3.2 reset local variable */ - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - prBssDesc = scanSearchBssDescByBssid(prAdapter, prStaRec->aucMacAddr); - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - } - - /* 3.3 Free STA-REC */ - if(prStaRec != prAisBssInfo->prStaRecOfAP) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { -#if CFG_SUPPORT_ROAMING - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; -#endif /* CFG_SUPPORT_ROAMING */ - } - else { - /* 4. send reconnect request */ - prAdapter->rWifiVar.rConnSettings.fgIsConnReqIssued = FALSE; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_CONNECT_INDICATION, - NULL, - 0); - - eNextState = AIS_STATE_IDLE; - } - } - } - } -#if DBG - else { - DBGLOG(AIS, WARN, ("SEQ NO of AIS JOIN COMP MSG is not matched.\n")); - } -#endif /* DBG */ - - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of aisFsmRunEventJoinComplete() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Create which was sent by -* CNM to indicate that channel was changed for creating IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - do { - // Check State - if (prAisFsmInfo->eCurrentState == AIS_STATE_IBSS_ALONE) { - aisUpdateBssInfoForCreateIBSS(prAdapter); - } - } - while (FALSE); - - return; -} /* end of aisFsmCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Grant Msg of IBSS Merge which was sent by -* CNM to indicate that channel was changed for merging IBSS. -* -* @param[in] prAdapter Pointer of ADAPTER_T -* @param[in] prStaRec Pointer of STA_RECORD_T for merge -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - do { - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_MERGE: - { - P_BSS_DESC_T prBssDesc; - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous Peers' STA_RECORD_T in Driver if have. - bssClearClientList(prAdapter, prAisBssInfo); - - //4 <1.3> Unmark connection flag of previous BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = FALSE; - } - - //4 <1.4> Update BSS_INFO_T - aisUpdateBssInfoForMergeIBSS(prAdapter, prStaRec); - - //4 <1.5> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - - //4 <1.6> Activate current Peer's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.7> Enable other features - - //4 <1.8> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - -#if CFG_SLT_SUPPORT - prAdapter->rWifiVar.rSltInfo.prPseudoStaRec = prStaRec; -#endif - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - } - while (FALSE); - - return; -} /* end of aisFsmMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Notification of existing IBSS was found -* from SCN. -* -* @param[in] prMsgHdr Message of Notification of an IBSS was present. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventFoundIBSSPeer ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - BOOLEAN fgIsMergeIn; - - - ASSERT(prMsgHdr); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T)prMsgHdr; - - ASSERT(prAisIbssPeerFoundMsg->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX); - - prStaRec = prAisIbssPeerFoundMsg->prStaRec; - ASSERT(prStaRec); - - fgIsMergeIn = prAisIbssPeerFoundMsg->fgIsMergeIn; - - cnmMemFree(prAdapter, prMsgHdr); - - - eNextState = prAisFsmInfo->eCurrentState; - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - { - //4 <1> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <1.3> Mark connection flag of BSS_DESC_T. - if ((prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID)) != NULL) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - } - else { - ASSERT(0); // Should be able to find a BSS_DESC_T here. - } - - - //4 <1.4> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ - -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - //4 <1.6> sync. to firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.7> Indicate Connected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - //4 <1.8> indicate PM for connected - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <1.9> Set the Next State of AIS FSM - eNextState = AIS_STATE_NORMAL_TR; - - //4 <1.10> Release channel privilege - aisFsmReleaseCh(prAdapter); - } - //4 <2> We need 'merge out' to this IBSS - else { - - //4 <2.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <2.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - } - } - break; - - case AIS_STATE_NORMAL_TR: - { - - //4 <3> An IBSS Peer 'merged in'. - if (fgIsMergeIn) { - - //4 <3.1> Add Peers' STA_RECORD_T to Client List - bssAddStaRecToClientList(prAdapter, prAisBssInfo, prStaRec); - -#if CFG_SLT_SUPPORT - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = TRUE; /* TODO(Kevin): TBD */ -#else - //4 <3.2> Activate current Peer's STA_RECORD_T in Driver. - prStaRec->fgIsQoS = FALSE; /* TODO(Kevin): TBD */ -#endif - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - prStaRec->fgIsMerging = FALSE; - - } - //4 <4> We need 'merge out' to this IBSS - else { - - //4 <4.1> Get corresponding BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - - prAisFsmInfo->prTargetBssDesc = prBssDesc; - - //4 <4.2> Set the Next State of AIS FSM - eNextState = AIS_STATE_IBSS_MERGE; - - } - } - break; - - default: - break; - } - - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventFoundIBSSPeer() */ -#endif /* CFG_SUPPORT_ADHOC */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate the Media State to HOST -* -* @param[in] eConnectionState Current Media State -* @param[in] fgDelayIndication Set TRUE for postponing the Disconnect Indication. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisIndicationOfMediaStateToHost ( - IN P_ADAPTER_T prAdapter, - ENUM_PARAM_MEDIA_STATE_T eConnectionState, - BOOLEAN fgDelayIndication - ) -{ - EVENT_CONNECTION_STATUS rEventConnStatus; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisIndicationOfMediaStateToHost()"); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - // NOTE(Kevin): Move following line to aisChangeMediaState() macro per CM's request. - //prAisBssInfo->eConnectionState = eConnectionState; - - /* For indicating the Disconnect Event only if current media state is - * disconnected and we didn't do indication yet. - */ - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - if (prAisBssInfo->eConnectionStateIndicated == eConnectionState) { - return; - } - } - - if (!fgDelayIndication) { - //4 <0> Cancel Delay Timer - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIndicationOfDisconnectTimer); - - //4 <1> Fill EVENT_CONNECTION_STATUS - rEventConnStatus.ucMediaStatus = (UINT_8)eConnectionState; - - if (eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - rEventConnStatus.ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - if (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_INFRA; - rEventConnStatus.u2AID = prAisBssInfo->u2AssocId; - rEventConnStatus.u2ATIMWindow = 0; - } - else if (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - rEventConnStatus.ucInfraMode = (UINT_8)NET_TYPE_IBSS; - rEventConnStatus.u2AID = 0; - rEventConnStatus.u2ATIMWindow = prAisBssInfo->u2ATIMWindow; - } - else { - ASSERT(0); - } - - COPY_SSID(rEventConnStatus.aucSsid, - rEventConnStatus.ucSsidLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - COPY_MAC_ADDR(rEventConnStatus.aucBssid, prAisBssInfo->aucBSSID); - - rEventConnStatus.u2BeaconPeriod = prAisBssInfo->u2BeaconInterval; - rEventConnStatus.u4FreqInKHz = nicChannelNum2Freq(prAisBssInfo->ucPrimaryChannel); - - switch (prAisBssInfo->ucNonHTBasicPhyType) { - case PHY_TYPE_HR_DSSS_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - - case PHY_TYPE_ERP_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM24; - break; - - case PHY_TYPE_OFDM_INDEX: - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_OFDM5; - break; - - default: - ASSERT(0); - rEventConnStatus.ucNetworkType = (UINT_8)PARAM_NETWORK_TYPE_DS; - break; - } - } - else { - /* Deactivate previous Peers' STA_RECORD_T in Driver if have. */ - bssClearClientList(prAdapter, prAisBssInfo); - - #if CFG_PRIVACY_MIGRATION - /* Clear the pmkid cache while media disconnect */ - secClearPmkid(prAdapter); - #endif - - rEventConnStatus.ucReasonOfDisconnect = prAisBssInfo->ucReasonOfDisconnect; - } - - //4 <2> Indication - nicMediaStateChange(prAdapter, NETWORK_TYPE_AIS_INDEX, &rEventConnStatus); - prAisBssInfo->eConnectionStateIndicated = eConnectionState; - } - else { - /* NOTE: Only delay the Indication of Disconnect Event */ - ASSERT(eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED); - - DBGLOG(AIS, INFO, ("Postpone the indication of Disconnect for %d seconds\n", - prConnSettings->ucDelayTimeOfDisconnectEvent)); - - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIndicationOfDisconnectTimer, - SEC_TO_MSEC(prConnSettings->ucDelayTimeOfDisconnectEvent)); - } - - return; -} /* end of aisIndicationOfMediaStateToHost() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Media Disconnect" to HOST -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisPostponedEventOfDisconnTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Deactivate previous AP's STA_RECORD_T in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - - //4 <2> Remove pending connection request - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - prConnSettings->fgIsDisconnectedByNonRequest = TRUE; - - //4 <3> Indicate Disconnected Event to Host immediately. - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, FALSE); - - return; -} /* end of aisPostponedEventOfDisconnTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_BSS_DESC_T prBssDesc; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("aisUpdateBssInfoForJOIN()"); - - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - - DBGLOG(AIS, INFO, ("Update AIS_BSS_INFO_T and apply settings to MAC\n")); - - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prAisFsmInfo->prTargetBssDesc->ucChannelNum; - prAisBssInfo->eBand = prAisFsmInfo->prTargetBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = prStaRec; - prAisBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prAisBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAssocRspFrame->aucBSSID); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - } - else { - // should never happen - ASSERT(0); - } - - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of aisUpdateBssInfoForJOIN() */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create an Ad-Hoc network and start sending Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForCreateIBSS ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prAisBssInfo->fgIsBeaconActivated) { - return; - } - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - - //4 <1.4> Setup Channel, Band and Phy Attributes - prAisBssInfo->ucPrimaryChannel = prConnSettings->ucAdHocChannelNum; - prAisBssInfo->eBand = prConnSettings->eAdHocBand; - - if (prAisBssInfo->eBand == BAND_2G4) { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - - prAisBssInfo->ucPhyTypeSet = - prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN; /* Depend on eBand */ - - prAisBssInfo->ucConfigAdHocAPMode = AD_HOC_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - //4 <1.5> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prConnSettings->u2BeaconPeriod; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = prConnSettings->u2AtimWindow; - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - -#if CFG_PRIVACY_MIGRATION - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION1_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION2_ENABLED || - prConnSettings->eEncStatus == ENUM_ENCRYPTION3_ENABLED) { - prAisBssInfo->fgIsProtection = TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } -#else - prAisBssInfo->fgIsProtection = FALSE; -#endif - - //3 <2> Update BSS_INFO_T common part - ibssInitForAdHoc(prAdapter, prAisBssInfo); - - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <3.2> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.3> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <3.4> Update AdHoc PM parameter - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <4> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - //3 <5> Start IBSS Alone Timer - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rIbssAloneTimer, - SEC_TO_MSEC(AIS_IBSS_ALONE_TIMEOUT_SEC)); - - return; - -} /* end of aisCreateIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the existing IBSS was found. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForMergeIBSS ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_BSS_INFO_T prAisBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc; - //UINT_16 u2IELength; - //PUINT_8 pucIE; - - - ASSERT(prStaRec); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - cnmTimerStopTimer(prAdapter, &prAisFsmInfo->rIbssAloneTimer); - - if (!prAisBssInfo->fgIsBeaconActivated) { - - //3 <1> Update BSS_INFO_T per Network Basis - //4 <1.1> Setup Operation Mode - prAisBssInfo->eCurrentOPMode = OP_MODE_IBSS; - - //4 <1.2> Setup SSID - COPY_SSID(prAisBssInfo->aucSSID, - prAisBssInfo->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - //4 <1.3> Clear current AP's STA_RECORD_T and current AID - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prAisBssInfo->u2AssocId = 0; - } - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Setup Capability - prAisBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use Peer's Cap Info as IBSS Cap Info */ - - if (prAisBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prAisBssInfo->fgIsShortPreambleAllowed = TRUE; - prAisBssInfo->fgUseShortPreamble = TRUE; - } - else { - prAisBssInfo->fgIsShortPreambleAllowed = FALSE; - prAisBssInfo->fgUseShortPreamble = FALSE; - } - - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prAisBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - prAisBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - - if (prAisBssInfo->u2CapInfo & CAP_INFO_PRIVACY) { - prAisBssInfo->fgIsProtection= TRUE; - } - else { - prAisBssInfo->fgIsProtection = FALSE; - } - - //4 <2.2> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prAisBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prAisBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prAisBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prAisBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - rateGetDataRatesFromRateSet(prAisBssInfo->u2OperationalRateSet, - prAisBssInfo->u2BSSBasicRateSet, - prAisBssInfo->aucAllSupportedRates, - &prAisBssInfo->ucAllSupportedRatesLen); - - //3 <3> X Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - prBssDesc = scanSearchBssDescByTA(prAdapter, prStaRec->aucMacAddr); - if(prBssDesc) { - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup BSSID - COPY_MAC_ADDR(prAisBssInfo->aucBSSID, prBssDesc->aucBSSID); - - //4 <4.2> Setup Channel, Band - prAisBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prAisBssInfo->eBand = prBssDesc->eBand; - - //4 <4.3> Setup MIB for current BSS - prAisBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - prAisBssInfo->ucDTIMPeriod = 0; - prAisBssInfo->u2ATIMWindow = 0; /* TBD(Kevin) */ - - prAisBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_ADHOC; - } - else { - // should never happen - ASSERT(0); - } - - - //3 <5> Set MAC HW - //4 <5.1> Find Lowest Basic Rate Index for default TX Rate of MMPDU - { - UINT_8 ucLowestBasicRateIndex; - - if (!rateGetLowestRateIndexFromRateSet(prAisBssInfo->u2BSSBasicRateSet, - &ucLowestBasicRateIndex)) { - - if (prAisBssInfo->ucPhyTypeSet & PHY_TYPE_BIT_OFDM) { - ucLowestBasicRateIndex = RATE_6M_INDEX; - } - else { - ucLowestBasicRateIndex = RATE_1M_INDEX; - } - } - - prAisBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[prAisBssInfo->fgUseShortPreamble][ucLowestBasicRateIndex]; - } - - //4 <5.2> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prAisBssInfo); - - //4 <5.3> use command packets to inform firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.4> enable beaconing - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //4 <5.5> Update AdHoc PM parameter - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - - //3 <6> Set ACTIVE flag. - prAisBssInfo->fgIsBeaconActivated = TRUE; - prAisBssInfo->fgHoldSameBssidForIBSS = TRUE; - - return; -} /* end of aisUpdateBssInfoForMergeIBSS() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - BOOLEAN fgReplyProbeResp = FALSE; - - - ASSERT(prSwRfb); - ASSERT(pu4ControlFlags); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Parse Probe Req IE and Get IE ptr (SSID, Supported Rate IE, ...) - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_SSID == IE_ID(pucIE)) { - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, /* CURRENT SSID */ - prIeSsid->aucSSID, prIeSsid->ucLength)) ) { - fgReplyProbeResp = TRUE; - } - } - - return fgReplyProbeResp; - -} /* end of aisValidateProbeReq() */ - -#endif /* CFG_SUPPORT_ADHOC */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection handling -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmDisconnect ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgDelayIndication - ) -{ - P_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - -#if CFG_SUPPORT_ADHOC - if (prAisBssInfo->fgIsBeaconActivated) { - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_DELETE_ALL, - NETWORK_TYPE_AIS_INDEX, - 0, - NULL, - 0); - - prAisBssInfo->fgIsBeaconActivated = FALSE; - } -#endif - - rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - - if (prAisBssInfo->ucReasonOfDisconnect == DISCONNECT_REASON_CODE_RADIO_LOST) { - scanRemoveBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - - /* remove from scanning results as well */ - wlanClearBssInScanningResult(prAdapter, prAisBssInfo->aucBSSID); - - /* trials for re-association */ - if (fgDelayIndication) { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_RECONNECT, TRUE); - aisFsmInsertRequest(prAdapter, AIS_REQUEST_RECONNECT); - } - } - else { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - if (fgDelayIndication) { - if (OP_MODE_IBSS != prAisBssInfo->eCurrentOPMode) { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - } - else { - prAisBssInfo->fgHoldSameBssidForIBSS = FALSE; - } - - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - - if (!fgDelayIndication) { - //4 <5> Deactivate previous AP's STA_RECORD_T or all Clients in Driver if have. - if (prAisBssInfo->prStaRecOfAP) { - //cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - - prAisBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - } - } - -#if CFG_SUPPORT_ROAMING - roamingFsmRunEventAbort(prAdapter); - - /* clear pending roaming connection request */ - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); -#endif /* CFG_SUPPORT_ROAMING */ - - //4 <6> Indicate Disconnected Event to Host - aisIndicationOfMediaStateToHost(prAdapter, - PARAM_MEDIA_STATE_DISCONNECTED, - fgDelayIndication); - - - //4 <7> Trigger AIS FSM - aisFsmSteps(prAdapter, AIS_STATE_IDLE); - - return; -} /* end of aisFsmDisconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Background Scan Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventBGSleepTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventBGSleepTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - eNextState = prAisFsmInfo->eCurrentState; - - switch (prAisFsmInfo->eCurrentState) { - case AIS_STATE_WAIT_FOR_NEXT_SCAN: - DBGLOG(AIS, LOUD, ("EVENT - SCAN TIMER: Idle End - Current Time = %ld\n", kalGetTimeTick())); - - eNextState = AIS_STATE_LOOKING_FOR; - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX); - - break; - - default: - break; - } - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmBGSleepTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "IBSS ALONE Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventIbssAloneTimeOut ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventIbssAloneTimeOut()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_IBSS_ALONE: - - /* There is no one participate in our AdHoc during this TIMEOUT Interval - * so go back to search for a valid IBSS again. - */ - - DBGLOG(AIS, LOUD, ("EVENT-IBSS ALONE TIMER: Start pairing\n")); - - prAisFsmInfo->fgTryScan = TRUE; - - /* abort timer */ - aisFsmReleaseCh(prAdapter); - - /* Pull back to SEARCH to find candidate again */ - eNextState = AIS_STATE_SEARCH; - - break; - - default: - break; - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisIbssAloneTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Join Time-Out" to AIS FSM. -* -* @param[in] u4Param Unused timer parameter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventJoinTimeout ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DEBUGFUNC("aisFsmRunEventJoinTimeout()"); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - eNextState = prAisFsmInfo->eCurrentState; - - switch(prAisFsmInfo->eCurrentState) { - case AIS_STATE_JOIN: - DBGLOG(AIS, LOUD, ("EVENT- JOIN TIMEOUT\n")); - - /* 1. Do abort JOIN */ - aisFsmStateAbort_JOIN(prAdapter); - - /* 2. Increase Join Failure Count */ - prAisFsmInfo->prTargetStaRec->ucJoinFailureCount++; -// For JB nl802.11 -#if 0 - if(prAisFsmInfo->prTargetStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) { - /* 3.1 Retreat to AIS_STATE_SEARCH state for next try */ - eNextState = AIS_STATE_SEARCH; - } - else { - /* 3.2 Retreat to AIS_STATE_WAIT_FOR_NEXT_SCAN state for next try */ - eNextState = AIS_STATE_WAIT_FOR_NEXT_SCAN; - } -#endif - eNextState = AIS_STATE_IDLE; - break; - - case AIS_STATE_NORMAL_TR: - /* 1. release channel */ - aisFsmReleaseCh(prAdapter); - prAisFsmInfo->fgIsInfraChannelFinished = TRUE; - - /* 2. process if there is pending scan */ - if(aisFsmIsRequestPending(prAdapter, AIS_REQUEST_SCAN, TRUE) == TRUE) { - wlanClearScanningResult(prAdapter); - eNextState = AIS_STATE_ONLINE_SCAN; - } - - break; - - default: - /* release channel */ - aisFsmReleaseCh(prAdapter); - break; - - } - - - /* Call aisFsmSteps() when we are going to change AIS STATE */ - if (eNextState != prAisFsmInfo->eCurrentState) { - aisFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of aisFsmRunEventJoinTimeout() */ - - -#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0) -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisTest ( - VOID - ) -{ - P_MSG_AIS_ABORT_T prAisAbortMsg; - P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucSSID[]="pci-11n"; - UINT_8 ucSSIDLen=7; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* Set Connection Request Issued Flag */ - prConnSettings->fgIsConnReqIssued = TRUE; - prConnSettings->ucSSIDLen = ucSSIDLen; - kalMemCopy(prConnSettings->aucSSID, aucSSID, ucSSIDLen); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - - ASSERT(0); // Can't trigger SCAN FSM - return; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_HEM_AIS_FSM_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - - wifi_send_msg(INDX_WIFI, MSG_ID_WIFI_IST, 0); - - return; -} -#endif /* CFG_TEST_MGMT_FSM */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle OID_802_11_BSSID_LIST_SCAN -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prSsid Pointer of SSID_T if specified -* \param[in] pucIe Pointer to buffer of extra information elements to be attached -* \param[in] u4IeLength Length of information elements -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_PARAM_SSID_T prSsid, - IN PUINT_8 pucIe, - IN UINT_32 u4IeLength - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - - DEBUGFUNC("aisFsmScanRequest()"); - - ASSERT(prAdapter); - ASSERT(u4IeLength <= MAX_IE_LENGTH); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (!prConnSettings->fgIsScanReqIssued) { - prConnSettings->fgIsScanReqIssued = TRUE; - - if(prSsid == NULL) { - prAisFsmInfo->ucScanSSIDLen = 0; - } - else { - COPY_SSID(prAisFsmInfo->aucScanSSID, - prAisFsmInfo->ucScanSSIDLen, - prSsid->aucSsid, - (UINT_8)prSsid->u4SsidLen); - } - - if(u4IeLength > 0 && u4IeLength <= MAX_IE_LENGTH ) { - prAisFsmInfo->u4ScanIELength = u4IeLength; - kalMemCopy(prAisFsmInfo->aucScanIEBuf, pucIe, u4IeLength); - } - else { - prAisFsmInfo->u4ScanIELength = 0; - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR) { - if(prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE - && prAisFsmInfo->fgIsInfraChannelFinished == FALSE) { - // 802.1x might not finished yet, pend it for later handling .. - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - else { - if(prAisFsmInfo->fgIsChannelGranted == TRUE) { - DBGLOG(AIS, WARN, ("Scan Request with channel granted for join operation: %d, %d", - prAisFsmInfo->fgIsChannelGranted, - prAisFsmInfo->fgIsChannelRequested)); - } - - /* start online scan */ - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN); - } - } - else if(prAisFsmInfo->eCurrentState == AIS_STATE_IDLE) { - wlanClearScanningResult(prAdapter); - aisFsmSteps(prAdapter, AIS_STATE_SCAN); - } - else { - aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCAN); - } - } - else { - DBGLOG(AIS, WARN, ("Scan Request dropped. (state: %d)\n", prAisFsmInfo->eCurrentState)); - } - - return; -} /* end of aisFsmScanRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is invoked when CNM granted channel privilege -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prAisBssInfo; - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_GRANT_T prMsgChGrant; - UINT_8 ucTokenID; - UINT_32 u4GrantInterval; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - - ucTokenID = prMsgChGrant->ucTokenID; - u4GrantInterval = prMsgChGrant->u4GrantInterval; - - /* 1. free message */ - cnmMemFree(prAdapter, prMsgHdr); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_REQ_CHANNEL_JOIN && - prAisFsmInfo->ucSeqNumOfChReq == ucTokenID) { - /* 2. channel privilege has been approved */ - prAisFsmInfo->u4ChGrantedInterval = u4GrantInterval; - - /* 3. state transition to join/ibss-alone/ibss-merge */ - /* 3.1 set timeout timer in cases join could not be completed */ - cnmTimerStartTimer(prAdapter, - &prAisFsmInfo->rJoinTimeoutTimer, - prAisFsmInfo->u4ChGrantedInterval - AIS_JOIN_CH_GRANT_THRESHOLD); - /* 3.2 set local variable to indicate join timer is ticking */ - prAisFsmInfo->fgIsInfraChannelFinished = FALSE; - - /* 3.3 switch to join state */ - aisFsmSteps(prAdapter, AIS_STATE_JOIN); - - prAisFsmInfo->fgIsChannelGranted = TRUE; - } - else { /* mismatched grant */ - /* 2. return channel privilege to CNM immediately */ - aisFsmReleaseCh(prAdapter); - } - - return; -} /* end of aisFsmRunEventChGrant() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmReleaseCh ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_MSG_CH_ABORT_T prMsgChAbort; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->fgIsChannelGranted == TRUE - || prAisFsmInfo->fgIsChannelRequested == TRUE) { - - prAisFsmInfo->fgIsChannelRequested = FALSE; - prAisFsmInfo->fgIsChannelGranted = FALSE; - - /* 1. return channel privilege to CNM immediately */ - prMsgChAbort = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChAbort) { - ASSERT(0); // Can't release Channel to CNM - return; - } - - prMsgChAbort->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChAbort->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prMsgChAbort->ucTokenID = prAisFsmInfo->ucSeqNumOfChReq; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChAbort, - MSG_SEND_METHOD_BUF); - } - - return; -} /* end of aisFsmReleaseCh() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that corresponding beacon has not -* been received for a while and probing is not successful -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisBssBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prAisBssInfo; - BOOLEAN fgDoAbortIndication = FALSE; - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1> Diagnose Connection for Beacon Timeout Event - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - if (OP_MODE_INFRASTRUCTURE == prAisBssInfo->eCurrentOPMode) { - P_STA_RECORD_T prStaRec = prAisBssInfo->prStaRecOfAP; - - if (prStaRec) { - fgDoAbortIndication = TRUE; - } - } - else if (OP_MODE_IBSS == prAisBssInfo->eCurrentOPMode) { - fgDoAbortIndication = TRUE; - } - } - - //4 <2> invoke abort handler - if (fgDoAbortIndication) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_RADIO_LOST, TRUE); - } - - return; -} /* end of aisBssBeaconTimeout() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform AIS that DEAUTH frame has been -* sent and thus state machine could go ahead -* -* \param[in] prAdapter Pointer of ADAPTER_T -* \param[in] prMsduInfo Pointer of MSDU_INFO_T for DEAUTH frame -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -aisDeauthXmitComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - if(prAisFsmInfo->eCurrentState == AIS_STATE_DISCONNECTING) { - if(rTxDoneStatus != TX_RESULT_DROPPED_IN_DRIVER) { - aisFsmStateAbort(prAdapter, DISCONNECT_REASON_CODE_NEW_CONNECTION, FALSE); - } - } - else { - DBGLOG(AIS, WARN, ("DEAUTH frame transmitted without further handling")); - } - - return WLAN_STATUS_SUCCESS; - -} /* end of aisDeauthXmitComplete() */ - -#if CFG_SUPPORT_ROAMING -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indicate an Event of "Looking for a candidate due to weak signal" to AIS FSM. -* -* @param[in] u4ReqScan Requesting Scan or not -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRunEventRoamingDiscovery ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4ReqScan - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - ENUM_AIS_REQUEST_TYPE_T eAisRequest; - - DBGLOG(AIS, LOUD, ("aisFsmRunEventRoamingDiscovery()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - /* search candidates by best rssi */ - prConnSettings->eConnectionPolicy = CONNECT_BY_SSID_BEST_RSSI; - - /* results are still new */ - if (!u4ReqScan) { - roamingFsmRunEventRoam(prAdapter); - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - if(prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN - || prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eAisRequest = AIS_REQUEST_ROAMING_CONNECT; - } - else { - eAisRequest = AIS_REQUEST_ROAMING_SEARCH; - } - } - - if(prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR && prAisFsmInfo->fgIsInfraChannelFinished == TRUE) { - if(eAisRequest == AIS_REQUEST_ROAMING_SEARCH) { - aisFsmSteps(prAdapter, AIS_STATE_LOOKING_FOR); - } - else { - aisFsmSteps(prAdapter, AIS_STATE_SEARCH); - } - } - else { - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_SEARCH, TRUE); - aisFsmIsRequestPending(prAdapter, AIS_REQUEST_ROAMING_CONNECT, TRUE); - - aisFsmInsertRequest(prAdapter, eAisRequest); - } - - return; -} /* end of aisFsmRunEventRoamingDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the time of ScanDone for roaming and transit to Roam state. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -ENUM_AIS_STATE_T -aisFsmRoamingScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_AIS_STATE_T eNextState; - - DBGLOG(AIS, LOUD, ("->aisFsmRoamingScanResultsUpdate()\n")); - - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - roamingFsmScanResultsUpdate(prAdapter); - - eNextState = prAisFsmInfo->eCurrentState; - if (prRoamingFsmInfo->eCurrentState == ROAMING_STATE_DISCOVERY) { - roamingFsmRunEventRoam(prAdapter); - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_LOOKING_FOR) { - eNextState = AIS_STATE_SEARCH; - } - else if (prAisFsmInfo->eCurrentState == AIS_STATE_ONLINE_SCAN) { - eNextState = AIS_STATE_NORMAL_TR; - } - - return eNextState; -} /* end of aisFsmRoamingScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will modify and update necessary information to firmware -* for disconnection of last AP before switching to roaming bss. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prTargetStaRec Target of StaRec of roaming -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmRoamingDisconnectPrevAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prTargetStaRec - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisFsmRoamingDisconnectPrevAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_AIS_INDEX); - - /* Not invoke rlmBssAborted() here to avoid prAisBssInfo->fg40mBwAllowed - * to be reset. RLM related parameters will be reset again when handling - * association response in rlmProcessAssocRsp(). 20110413 - */ - //rlmBssAborted(prAdapter, prAisBssInfo); - - //4 <3> Unset the fgIsConnected flag of BSS_DESC_T and send Deauth if needed. - if (PARAM_MEDIA_STATE_CONNECTED == prAisBssInfo->eConnectionState) { - scanRemoveConnFlagOfBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - } - - //4 <4> Change Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - //4 <4.1> sync. with firmware - prTargetStaRec->ucNetTypeIndex = 0xff; /* Virtial NetType */ - nicUpdateBss(prAdapter, NETWORK_TYPE_AIS_INDEX); - prTargetStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; /* Virtial NetType */ - - return; -} /* end of aisFsmRoamingDisconnectPrevAP() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the roaming was completed. -* -* @param IN prAdapter Pointer to the Adapter structure. -* prStaRec StaRec of roaming AP -* prAssocRspSwRfb -* -* @retval None -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisUpdateBssInfoForRoamingAP ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prAisBssInfo; - - DBGLOG(AIS, LOUD, ("aisUpdateBssInfoForRoamingAP()")); - - ASSERT(prAdapter); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - //4 <1.1> Change FW's Media State immediately. - aisChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prAisBssInfo->prStaRecOfAP) && - (prAisBssInfo->prStaRecOfAP != prStaRec) && - (prAisBssInfo->prStaRecOfAP->fgIsInUse)) { - cnmStaRecChangeState(prAdapter, prAisBssInfo->prStaRecOfAP, STA_STATE_1); - } - - //4 <1.3> Update BSS_INFO_T - aisUpdateBssInfoForJOIN(prAdapter, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - aisIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, FALSE); - - return; -} /* end of aisFsmRoamingUpdateBss() */ - -#endif /* CFG_SUPPORT_ROAMING */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Check if there is any pending request and remove it (optional) -* -* @param prAdapter -* eReqType -* bRemove -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmIsRequestPending ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType, - IN BOOLEAN bRemove - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr, prPendingReqHdrNext; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - /* traverse through pending request list */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingReqHdr, - prPendingReqHdrNext, - &(prAisFsmInfo->rPendingReqList), - rLinkEntry, - AIS_REQ_HDR_T) { - /* check for specified type */ - if(prPendingReqHdr->eReqType == eReqType) { - /* check if need to remove */ - if(bRemove == TRUE) { - LINK_REMOVE_KNOWN_ENTRY(&(prAisFsmInfo->rPendingReqList), &(prPendingReqHdr->rLinkEntry)); - - cnmMemFree(prAdapter, prPendingReqHdr); - } - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get next pending request -* -* @param prAdapter -* -* @return P_AIS_REQ_HDR_T -*/ -/*----------------------------------------------------------------------------*/ -P_AIS_REQ_HDR_T -aisFsmGetNextRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_FSM_INFO_T prAisFsmInfo; - P_AIS_REQ_HDR_T prPendingReqHdr; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - LINK_REMOVE_HEAD(&(prAisFsmInfo->rPendingReqList), prPendingReqHdr, P_AIS_REQ_HDR_T); - - return prPendingReqHdr; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Insert a new request -* -* @param prAdapter -* eReqType -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -aisFsmInsertRequest ( - IN P_ADAPTER_T prAdapter, - IN ENUM_AIS_REQUEST_TYPE_T eReqType - ) -{ - P_AIS_REQ_HDR_T prAisReq; - P_AIS_FSM_INFO_T prAisFsmInfo; - - ASSERT(prAdapter); - prAisFsmInfo = &(prAdapter->rWifiVar.rAisFsmInfo); - - prAisReq = (P_AIS_REQ_HDR_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(AIS_REQ_HDR_T)); - - if(!prAisReq) { - ASSERT(0); // Can't generate new message - return FALSE; - } - - prAisReq->eReqType = eReqType; - - /* attach request into pending request list */ - LINK_INSERT_TAIL(&prAisFsmInfo->rPendingReqList, &prAisReq->rLinkEntry); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Flush all pending requests -* -* @param prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -aisFsmFlushRequest ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_REQ_HDR_T prAisReq; - - ASSERT(prAdapter); - - while((prAisReq = aisFsmGetNextRequest(prAdapter)) != NULL) { - cnmMemFree(prAdapter, prAisReq); - } - - return; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/assoc.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/assoc.c deleted file mode 100755 index 004530b47c04..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/assoc.c +++ /dev/null @@ -1,2102 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/assoc.c#1 $ -*/ - -/*! \file "assoc.c" - \brief This file includes the association-related functions. - - This file includes the association-related functions. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/*\ -** $Log: assoc.c $ -** -** 08 08 2012 wh.su -** [WCXRP00001262] [MT6620 Wi-Fi][Driver] Fixed the update assoc info pkt length issue -** fixed the assoc request update ie length. -** -** 07 27 2012 yuche.tsai -** NULL -** Fix wifi direct connection issue. -** Assoc Req no P2P IE. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 06 08 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * add a pair of brace for compilation success. - * - * 06 04 2012 cp.wu - * [WCXRP00001245] [MT6620 Wi-Fi][Driver][Firmware] NPS Software Development - * discussed with WH, privacy bit in associate response is not necessary to be checked, and identified as association failure when mismatching with beacon/probe response - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 03 09 2012 terry.wu - * NULL - * Fix build error. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 yuche.tsai - * NULL - * Update Driver for wifi driect gc join IE update issue. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Fix PhyTypeSet in STA_REC in AP mode - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 19 2011 yuche.tsai - * NULL - * Fix KE when enable hot-spot & any one client connect to this hot-spot. - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Update workaround for Kingnet AP. - * - * 07 15 2011 terry.wu - * [WCXRP00000855] [MT6620 Wi-Fi] [Driver] Workaround for Kingnet 710 AP wrong AID assignment - * Workaround for Kingnet 710 AP wrong AID assignment. - * - * 05 02 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning[WCXRP00000672] [MT6620 Wi-Fi][FW] Fix the PS event allocation - * Check STA when rx assoc. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 14 2011 wh.su - * [WCXRP00000545] [MT6620 Wi-Fi] [Driver] Fixed the p2p not enable, received a assoc rsp cause the rx assoc execute a null function - * Modify file for avoid assert at BOW recieve a assoc response frame but no p2p fucntion. - * - * 03 08 2011 terry.wu - * [WCXRP00000524] [MT6620 Wi-Fi][Driver] Fix p2p assoc request containing wrong IE format - * Fix p2p assoc request containing wrong IE format. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix RX disassoc issue under Hot-spot mode. - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Desired Non-HT Rate Set. - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Recover the code that was coverwritted.. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 yuche.tsai - * NULL - * Add SSID IE in assoc req frame which is sent by P2P GC. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RSN IE generation by CFG_RSN_MIGRATION compilation flag. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * revised. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update assocProcessRxAssocReqFrame() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix compile warning - macro > 10 line, initial value of an array - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 28 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning.u1rwduu`wvpghlqg|rm+vp - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update Assoc ID for PS - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Use new constant definition ELEM_MAX_LEN_EXT_CAP - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify assoc req IE talbe for HT cap IE - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * update the assocComposeReAssocReqFrameHeader() and fix the u2EstimatedFrameLen in assocSendReAssocReqFrame() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * remove some space line - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the sending disassoc frame function - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the txassocReq IE table, adding for WPA/RSN - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eNetType not init in send AssocReq function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate the send Assoc with TXM - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code to indicate the assoc request and assoc response (now disable) - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove unused variables - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_VAR_IE_ENTRY_T txAssocReqIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmReqGenerateHtCapIE },/* 45 */ -#if CFG_SUPPORT_WPS2 - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WSC), NULL, rsnGenerateWSCIE }, /* 221 */ -#endif -#if CFG_SUPPORT_WAPI - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WAPI), NULL, wapiGenerateWAPIIE }, /* 68 */ -#endif -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE }, /* 221 */ -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmReqGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO), NULL, mqmGenerateWmmInfoIE }, /* 221 */ -#if CFG_RSN_MIGRATION - { (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE }, /* 48 */ -#endif -}; - -#if CFG_SUPPORT_AAA -VERIFY_IE_ENTRY_T rxAssocReqIETable[] = { - { ELEM_ID_RESERVED, NULL } /* 255 */ -}; - - -APPEND_VAR_IE_ENTRY_T txAssocRespIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE }, /* 42 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE }, /* 45 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE }, /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - { (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE }, /* 74 */ - { (0), p2pFuncCalculateP2p_IELenForAssocRsp, p2pFuncGenerateP2p_IEForAssocRsp }, /* 221 */ -#if CFG_SUPPORT_WFD - { (0), wfdFuncCalculateWfdIELenForAssocRsp, wfdFuncGenerateWfdIEForAssocRsp }, /* 221 */ -#endif -#endif - { (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE }, /* 127 */ - { (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose the Capability Info Field. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval Capability Info Field -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ UINT_16 -assocBuildCapabilityInfo ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - UINT_32 u4NonHTPhyType; - UINT_16 u2CapInfo; - - - ASSERT(prStaRec); - - - /* Set up our requested capabilities. */ - u2CapInfo = CAP_INFO_ESS; - u2CapInfo |= CAP_CF_STA_NOT_POLLABLE; - - if (prStaRec->u2CapInfo & CAP_INFO_PRIVACY) { - u2CapInfo |= CAP_INFO_PRIVACY; - } - - - /* 7.3.1.4 */ - if (prStaRec->fgHasBasicPhyType) { - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - if ( (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortPreambleOptionImplemented) && - ( (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO) && - (prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) ) ) { - - /* Case I: Implemented == TRUE and Short Preamble Option Enable == TRUE. - * Case II: Implemented == TRUE and Short Preamble == AUTO (depends on - * BSS_DESC_T's capability) - */ - u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (rNonHTPhyAttributes[u4NonHTPhyType].fgIsShortSlotTimeOptionImplemented && - prAdapter->rWifiVar.fgIsShortSlotTimeOptionEnable) { - u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - } - - DBGLOG(SAA, LOUD, ("ASSOC REQ: Compose Capability = 0x%04x for Target BSS ["MACSTR"].\n", - u2CapInfo, MAC2STR(prStaRec->aucMacAddr))); - - - return u2CapInfo; - -} /* end of assocBuildCapabilityInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocReqFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - PUINT_8 pucBuffer; - UINT_16 u2SupportedRateSet; - UINT_8 aucAllSupportedRates[RATE_NUM] = {0}; - UINT_8 ucAllSupportedRatesLen; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (IS_STA_IN_AIS(prStaRec)) { - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - pucBuffer = p2pBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo, pucBuffer); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } -#endif - - else { - /* TODO(Kevin): For other network */ - } - - /* NOTE(Kevin 2008/12/19): 16.3.6.3 MLME-ASSOCIATE.indication - - * SupportedRates - The set of data rates that are supported by the STA - * that is requesting association. - * Original(Portable Driver): Only send the Rates that we'll support. - * New: Send the Phy Rates if the result of following & operation == NULL. - */ - //rateGetDataRatesFromRateSet((prBssDesc->u2OperationalRateSet & - // rPhyAttributes[prBssDesc->ePhyType].u2SupportedRateSet), - - if (prStaRec->fgHasBasicPhyType) { - UINT_32 u4NonHTPhyType; - - - u4NonHTPhyType = prStaRec->ucNonHTBasicPhyType; - - u2SupportedRateSet = (prStaRec->u2OperationalRateSet & - rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet); - - ASSERT(u2SupportedRateSet); - - if (!u2SupportedRateSet) { - u2SupportedRateSet = rNonHTPhyAttributes[u4NonHTPhyType].u2SupportedRateSet; - } - - /* TODO(Kevin): For P2P, we shouldn't send support rate set which contains 11b rate */ - - rateGetDataRatesFromRateSet(u2SupportedRateSet, - 0, - aucAllSupportedRates, - &ucAllSupportedRatesLen); - - ucSupRatesLen = ((ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) ? - ELEM_MAX_LEN_SUP_RATES : ucAllSupportedRatesLen); - - ucExtSupRatesLen = ucAllSupportedRatesLen - ucSupRatesLen; - - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - } - - return; -} /* end of assocBuildReAssocReqFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Request frame header and -* its fixed fields -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocReqFrameHeaderAndFF ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - UINT_16 u2CapInfo; - UINT_16 u2ListenInterval; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - ASSERT(pu2PayloadLen); - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_REQ; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_REQ; - } - WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - u2CapInfo = assocBuildCapabilityInfo(prAdapter, prStaRec); - - /* Fill the Capability Information field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - - - /* Calculate the listen interval for the maximum power mode. Currently, we - set it to the value 2 times DTIM period. */ - if (prStaRec->ucDTIMPeriod) { - u2ListenInterval = prStaRec->ucDTIMPeriod * DEFAULT_LISTEN_INTERVAL_BY_DTIM_PERIOD; - } - else { - DBGLOG(SAA, TRACE, ("Use default listen interval\n")); - u2ListenInterval = DEFAULT_LISTEN_INTERVAL; - } - prStaRec->u2ListenInterval = u2ListenInterval; - - /* Fill the Listen Interval field. */ - WLAN_SET_FIELD_16(&prAssocFrame->u2ListenInterval, u2ListenInterval); - - - //4 <3> Compose the Current AP Address field for ReAssociation Request frame. - /* Fill the Current AP Address field. */ - if (prStaRec->fgIsReAssoc) { - if (IS_STA_IN_AIS(prStaRec)) { - - P_AIS_BSS_INFO_T prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - P_WLAN_REASSOC_REQ_FRAME_T prReAssocFrame = - (P_WLAN_REASSOC_REQ_FRAME_T)prAssocFrame; - - COPY_MAC_ADDR(prReAssocFrame->aucCurrentAPAddr, prAisBssInfo->aucBSSID); - } - else { - ASSERT(0); /* We don't support ReAssociation for other network */ - } - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN + - CURR_AP_ADDR_FIELD_LEN); - } - else { - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - LISTEN_INTERVAL_FIELD_LEN); - } - - return; -} /* end of assocComposeReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Request frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - if (fgIsReAssoc) { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - CURR_AP_ADDR_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - else { - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - LISTEN_INTERVAL_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - } - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - u2EstimatedExtraIELen = p2pCalculate_IEForAssocReq(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } - } -#else - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocReqIETable[i].u2EstimatedFixedIELen; - } - else { - u2EstimatedExtraIELen += (UINT_16)txAssocReqIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - } -#endif - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - - /* Compose Header and Fixed Field */ - assocComposeReAssocReqFrameHeaderAndFF(prAdapter, - prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucOwnMacAddr, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocReqFrameCommonIEs(prAdapter, prMsduInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 && CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - if ((prAdapter->fgIsP2PRegistered)) { - p2pGenerate_IEForAssocReq(prAdapter, prMsduInfo); - } - else { - DBGLOG(P2P, TRACE, ("Function Linker Lost.\n")); - ASSERT(FALSE); - } - } - else { - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - } -#else - /* Append IE */ - for (i = 0; i < sizeof(txAssocReqIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocReqIETable[i].pfnAppendIE) { - txAssocReqIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } -#endif - - //4 <6> Update the (Re)association request information - if (IS_STA_IN_AIS(prStaRec)) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - -#if CFG_RSN_MIGRATION - kalUpdateReAssocReqInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); -#endif - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && (IS_STA_IN_P2P(prStaRec))) { - P_WLAN_ASSOC_REQ_FRAME_T prAssocFrame; - - prAssocFrame = (P_WLAN_ASSOC_REQ_FRAME_T)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - - kalP2PUpdateAssocInfo( - prAdapter->prGlueInfo, - (PUINT_8)&prAssocFrame->u2CapInfo, - prMsduInfo->u2FrameLength - offsetof(WLAN_ASSOC_REQ_FRAME_T, u2CapInfo), - fgIsReAssoc); - } -#endif - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Request frame for -* SAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocReqFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_REQ) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX (Re)Association Response frame for -* AAA event handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckTxReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAssocRspFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAssocFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2TxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2TxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckTxReAssocRespFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming (Re)Association Frame and take out -* the status code. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocCheckRxReAssocRspFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - UINT_16 u2RxFrameCtrl; - UINT_16 u2RxCapInfo; - UINT_16 u2RxStatusCode; - UINT_16 u2RxAssocId; - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - DBGLOG(SAA, LOUD, ("prSwRfb->u2PayloadLength = %d\n", prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the (Re)Assocation Resp Frame. - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of (Re)Assocation Resp Frame. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocRspFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (prStaRec->fgIsReAssoc) { - if (u2RxFrameCtrl != MAC_FRAME_REASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - else { - if (u2RxFrameCtrl != MAC_FRAME_ASSOC_RSP) { - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Parse the Fixed Fields of (Re)Assocation Resp Frame Body. - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2CapInfo, &u2RxCapInfo); - u2RxCapInfo = prAssocRspFrame->u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2StatusCode, &u2RxStatusCode); - u2RxStatusCode = prAssocRspFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //4 <4> Check CAP_INFO - /* NOTE(Kevin): CM suggest to add MGMT workaround for those APs didn't check - * the CAP Privacy Bit to overcome a corner case that the Privacy Bit - * of our SCAN result didn't consist with AP's Association Resp. - */ - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - /* WAPI AP allow the customer use WZC to join mode, the privacy bit is 0 */ - /* even at WAI & WAPI_PSK mode, but the assoc respose set the privacy bit set 1 */ - DBGLOG(SEC, TRACE, ("Workaround the WAPI AP allow the customer to use WZC to join\n")); - } - else -#endif -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && 1) { - /* Todo:: Fixed this */ - } - else -#endif - { - } - -#if CFG_STRICT_CHECK_CAPINFO_PRIVACY - if ((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) ^ (u2RxCapInfo & CAP_INFO_PRIVACY)) { - u2RxStatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - } -#endif - } - - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { -#if CFG_RSN_MIGRATION - /* Update the information in the structure used to query and set - OID_802_11_ASSOCIATION_INFORMATION. */ - kalUpdateReAssocRspInfo(prAdapter->prGlueInfo, - (PUINT_8)&prAssocRspFrame->u2CapInfo, - (UINT_32)(prSwRfb->u2PacketLen)); -#endif - } - - //4 <5> Update CAP_INFO and ASSOC_ID - if (u2RxStatusCode == STATUS_CODE_SUCCESSFUL) { - prStaRec->u2CapInfo = u2RxCapInfo; - - //WLAN_GET_FIELD_16(&prAssocRspFrame->u2AssocId, &u2RxAssocId); - u2RxAssocId = prAssocRspFrame->u2AssocId; // NOTE(Kevin): Optimized for ARM - - /* 20110715 Workaround for Kingnet 710 AP (Realtek 8186) - * This AP raises the bit 6&7 not bit 14&15 in AID field. - * It cause wrong AID assignment. - * For AID = 2 - * Normal case: 0xC002(1100 0000 0000 0010) => 2 - * Kingnet 710: 0x00C2(0000 0000 1100 0010) => 194 - * workaround: mask bit 6&7 for this AP - */ - if((u2RxAssocId & BIT(6)) && - (u2RxAssocId & BIT(7)) && - !(u2RxAssocId & BITS(8, 15))) { - prStaRec->u2AssocId = u2RxAssocId & ~BITS(6,7); - } else { - prStaRec->u2AssocId = u2RxAssocId & ~AID_MSB; -#if CFG_SUPPORT_802_11W - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prBssSpecInfo->ucSaQueryTimedOut = 0; - } -#endif - } - } - -#if CFG_SUPPORT_802_11W - if (u2RxStatusCode == STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED){ - DBGLOG(SAA, INFO, ("AP rejected due the authentication algorithm not support\n")); - } - else if (u2RxStatusCode == STATUS_CODE_ASSOC_REJECTED_TEMPORARILY) { - PUINT_8 pucIE, pucTime; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_TIMEOUT_INTERVAL == IE_ID(pucIE) && IE_LEN(pucIE) == 5) { - pucTime = ((P_IE_HDR_T)pucIE)->aucInfo; - if (pucTime[0] == ACTION_SA_TIMEOUT_ASSOC_COMEBACK) { - UINT_32 tu; - WLAN_GET_FIELD_32(pucTime + 1, &tu); - DBGLOG(SAA, INFO, ("AP rejected association temporarily; comeback duration %u TU " - "(%u ms)\n", tu, TU_TO_MSEC(tu))); - if (tu > TX_ASSOCIATION_RETRY_TIMEOUT_TU) { - DBGLOG(SAA, INFO, ("Update timer based on comeback duration\n")); - //ieee80211_reschedule_timer(wpa_s, ms); - } - } - break; - } - } /* end of IE_FOR_EACH */ - } -#endif - *pu2StatusCode = u2RxStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocCheckRxReAssocRspFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will compose the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2ReasonCode The reason code of disassociation -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeDisassocFrame ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucMACAddress[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisAssocFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(pucBuffer); - ASSERT(aucMACAddress); - - prDisAssocFrame = (P_WLAN_DISASSOC_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the DisAssociation frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DISASSOC; - - WLAN_SET_FIELD_16(&prDisAssocFrame->u2FrameCtrl, u2FrameCtrl); - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDisAssocFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDisAssocFrame->aucBSSID, prStaRec->aucMacAddr); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDisAssocFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Disassociation frame. - /* Fill the Reason Code field. */ - WLAN_SET_FIELD_16(&prDisAssocFrame->u2ReasonCode, u2ReasonCode); - - return; -} /* end of assocComposeDisassocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Disassociation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2ReasonCode The reason code of disassociation -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendDisAssocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2ReasonCode - ) -{ - PUINT_8 pucMacAddress; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - //UINT_32 u4Status = WLAN_STATUS_SUCCESS; - - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Disassociation Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - REASON_CODE_FIELD_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending DisAssoc.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Disassociation frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - pucMacAddress = prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].aucOwnMacAddr; - - /* Compose Header and Fixed Field */ - assocComposeDisassocFrame(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucMacAddress, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - - prDisassocFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDisassocFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("assocSendDisAssocFrame with protection\n")); - } -#endif - - u2PayloadLen = REASON_CODE_FIELD_LEN; - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of assocSendDisAssocFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Disassociation frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxDisassocFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Disassociation Frame. - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Disassociation Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDisassocFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Disassoc Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDisassocFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDisassocFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxDisassocFrame() */ - - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Association Req frame -* and return a Status Code. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode Pointer to store the Status Code for carried in Association Response. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocProcessRxAssocReqFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_RSN_INFO_ELEM_T prIeRsn = (P_RSN_INFO_ELEM_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE, pucIEStart; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_16 u2StatusCode = STATUS_CODE_SUCCESSFUL; - UINT_16 u2RxFrameCtrl; - UINT_16 u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - UINT_32 i; - UINT_8 ucFixedFieldLength; - - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - return WLAN_STATUS_FAILURE; - } - - //4 <1> locate the Association Req Frame. - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prAssocReqFrame->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prAssocReqFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2RxFrameCtrl &= MASK_FRAME_TYPE; - - //4 <2> Parse the Header of Association Req Frame. - if (MAC_FRAME_REASSOC_REQ == u2RxFrameCtrl) { - ucFixedFieldLength = CAP_INFO_FIELD_LEN + LISTEN_INTERVAL_FIELD_LEN + CURR_AP_ADDR_FIELD_LEN; - } - else { - ucFixedFieldLength = CAP_INFO_FIELD_LEN + LISTEN_INTERVAL_FIELD_LEN; - } - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) <= ucFixedFieldLength) { - /* Length of this (re)association req is invalid, ignore it */ - return WLAN_STATUS_FAILURE; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Check if this Disassoc Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prAssocReqFrame->aucBSSID, prBssInfo->aucBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - if (MAC_FRAME_REASSOC_REQ == u2RxFrameCtrl) { - prStaRec->fgIsReAssoc = TRUE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_REASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = ((P_WLAN_REASSOC_REQ_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem; - } - else { - prStaRec->fgIsReAssoc = FALSE; - - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN); - - pucIEStart = pucIE = prAssocReqFrame->aucInfoElem; - } - - - //4 <3> Parse the Fixed Fields of Assoc Req Frame Body. - prStaRec->u2CapInfo = prAssocReqFrame->u2CapInfo; - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (((prStaRec->u2CapInfo & CAP_INFO_PRIVACY) && - !kalP2PGetCipher(prAdapter->prGlueInfo))) { - u2StatusCode = STATUS_CODE_CAP_NOT_SUPPORTED; - DBGLOG(RSN, TRACE, ("STA Assoc req privacy bit check fail\n")); - return WLAN_STATUS_SUCCESS; - } - } -#endif - - prStaRec->u2ListenInterval = prAssocReqFrame->u2ListenInterval; - prStaRec->ucPhyTypeSet = 0; - - /* Might be legacy client or p2p gc. */ - prStaRec->eStaType = STA_TYPE_LEGACY_CLIENT; - - //4 <4> Parse the IE of Assoc Req Frame Body. - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): Get SSID once */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - case ELEM_ID_HT_CAP: - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - kalMemCopy(&prStaRec->u2HtCapInfo, &(HT_CAP_IE(pucIE)->u2HtCapInfo), 2); - break; - case ELEM_ID_RSN: - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - prIeRsn = RSN_IE(pucIE); - rsnParserCheckForRSNCCMPPSK(prAdapter, prIeRsn, &u2StatusCode); - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - #endif - break; - case ELEM_ID_VENDOR: - #if CFG_ENABLE_WIFI_DIRECT - { - if ((prAdapter->fgIsP2PRegistered)) { - UINT_8 ucOuiType = 0; - - p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType); - - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - DBGLOG(P2P, TRACE, ("Target Client is a P2P group client\n")); - prStaRec->eStaType = STA_TYPE_P2P_GC; - } - } - } - #endif - break; - default: - for (i = 0; i < (sizeof(rxAssocReqIETable) / sizeof(VERIFY_IE_ENTRY_T)); i++) { - - if (((IE_ID(pucIE)) == rxAssocReqIETable[i].ucElemID) && - (rxAssocReqIETable[i].pfnVarifyIE != NULL)) { - rxAssocReqIETable[i].pfnVarifyIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIE, &u2StatusCode); - - if (u2StatusCode != STATUS_CODE_SUCCESSFUL) { - *pu2StatusCode = u2StatusCode; - return WLAN_STATUS_SUCCESS; - } - } - } - - break; - } - } /* end of IE_FOR_EACH */ - - // parsing for WMM related information (2010/12/21) - mqmProcessAssocReq( - prAdapter, - prSwRfb, - pucIEStart, - u2IELength); - - do { - if (prIeSsid) { - if (UNEQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - } - else { - u2StatusCode = STATUS_CODE_UNSPECIFIED_FAILURE; - break; - } - - prStaRec->u2OperationalRateSet = 0; - prStaRec->u2BSSBasicRateSet = 0; - - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prStaRec->u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if ((prBssInfo->u2BSSBasicRateSet & prStaRec->u2OperationalRateSet) != - prBssInfo->u2BSSBasicRateSet) { - - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - - /* Accpet the Sta, update BSSBasicRateSet from Bss */ - - prStaRec->u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = (prStaRec->u2OperationalRateSet & RATE_SET_ALL_ABG); - - if (BAND_2G4 == HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr)) { - #if 0 /* Marked by CMC 20111024 */ - /* check if support 11n */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - - if (!(u2BSSBasicRateSet & RATE_SET_OFDM)) { - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - - } - - } - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - if (prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - #endif - } - else { /* (BAND_5G == prBssDesc->eBande) */ - #if 0 /* Marked by CMC 20111024 */ - if (!(u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - ASSERT((prStaRec->u2OperationalRateSet & RATE_SET_HR_DSSS) == 0); - #else - if (prStaRec->u2OperationalRateSet & RATE_SET_OFDM) { - prStaRec->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - } - #endif - } - - } - else { - ASSERT(0); - u2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_HOTSPOT_PRIVACY_CHECK - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - if (prIeRsn) { - if (!kalP2PGetCipher(prAdapter->prGlueInfo)) { - u2StatusCode = STATUS_CODE_CIPHER_SUITE_REJECTED; - break; - } - } - else { - prStaRec->rSecInfo.fgAllowOnly1x = FALSE; - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - //Only Allow 1x - prStaRec->rSecInfo.fgAllowOnly1x = TRUE; - break; - } - } - } -#endif - - } while (FALSE); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - #if 1 /* ICS */ - { - PUINT_8 cp = (PUINT_8)&prAssocReqFrame->u2CapInfo; - if (prStaRec->fgIsReAssoc) - cp += 10; - else - cp += 4; - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - } - prStaRec->u2AssocReqIeLen = u2IELength; - if (u2IELength) { - prStaRec->pucAssocReqIe = kalMemAlloc(u2IELength, VIR_MEM_TYPE); - kalMemCopy(prStaRec->pucAssocReqIe, cp, u2IELength); - } - } - #endif - kalP2PUpdateAssocInfo(prAdapter->prGlueInfo, (PUINT_8)&prAssocReqFrame->u2CapInfo, u2IELength + (prStaRec->fgIsReAssoc ? 10 : 4), prStaRec->fgIsReAssoc); - } -#endif - - *pu2StatusCode = u2StatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of assocProcessRxAssocReqFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Association -* Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocBuildReAssocRespFrameCommonIEs ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo - ) -{ - PUINT_8 pucBuffer; - P_STA_RECORD_T prStaRec; - UINT_8 ucSupRatesLen; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - ucExtSupRatesLen = 0; - } - - /* Fill the Supported Rates element. */ - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ucSupRatesLen], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of assocBuildReAssocRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the (Re)Association Response frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucBssid Given BSSID. -* @param[in] u2CapInfo Capability Field of current BSS. -* @param[in out] pu2PayloadLen Return the length of the composed fixed fields -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -assocComposeReAssocRespFrameHeaderAndFF ( - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucBuffer, - IN UINT_8 aucBSSID[], - IN UINT_16 u2CapInfo, - IN OUT PUINT_16 pu2PayloadLen - ) -{ - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame; - BOOLEAN fgIsReAssoc; - - UINT_16 u2FrameCtrl; - - - ASSERT(prStaRec); - ASSERT(pucBuffer); - ASSERT(aucBSSID); - ASSERT(pu2PayloadLen); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)pucBuffer; - fgIsReAssoc = prStaRec->fgIsReAssoc; - - //4 <1> Compose the frame header of the (Re)Association Request frame. - /* Fill the Frame Control field. */ - if (fgIsReAssoc) { - u2FrameCtrl = MAC_FRAME_REASSOC_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_ASSOC_RSP; - } - //WLAN_SET_FIELD_16(&prAssocFrame->u2FrameCtrl, u2FrameCtrl); - prAssocRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target MAC Address. */ - COPY_MAC_ADDR(prAssocRspFrame->aucDestAddr, prStaRec->aucMacAddr); - - /* Fill the SA field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucSrcAddr, aucBSSID); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prAssocRspFrame->aucBSSID, aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prAssocRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the (Re)Association Request frame. - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prAssocFrame->u2CapInfo, u2CapInfo); - prAssocRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2StatusCode, prStaRec->u2StatusCode); - prAssocRspFrame->u2StatusCode = prStaRec->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - //WLAN_SET_FIELD_16(&prAssocFrame->u2AssocId, ((prStaRec->u2AssocId & AID_MASK) | AID_MSB)); - prAssocRspFrame->u2AssocId = - ((prStaRec->u2AssocId & AID_MASK) | AID_MSB); // NOTE(Kevin): Optimized for ARM - - *pu2PayloadLen = (CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - return; -} /* end of assocComposeReAssocRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the (Re)Association Resp frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -assocSendReAssocRespFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - - UINT_16 u2PayloadLen; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - BOOLEAN fgIsReAssoc; - UINT_32 i; - - - ASSERT(prStaRec); - - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - fgIsReAssoc = prStaRec->fgIsReAssoc; - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - CAP_INFO_FIELD_LEN + \ - STATUS_CODE_FIELD_LEN + \ - AID_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].u2EstimatedFixedIELen != 0) { - u2EstimatedExtraIELen += txAssocRespIETable[i].u2EstimatedFixedIELen; - } - else if (txAssocRespIETable[i].pfnCalculateVariableIELen != NULL) { - u2EstimatedExtraIELen += (UINT_16)txAssocRespIETable[i].pfnCalculateVariableIELen(prAdapter, - prStaRec->ucNetTypeIndex, - prStaRec); - } - - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(AAA, WARN, ("No PKT_INFO_T for sending (Re)Assoc Response.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose (Re)Association Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex != NETWORK_TYPE_AIS_INDEX); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and Fixed Field */ - assocComposeReAssocRespFrameHeaderAndFF(prStaRec, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prBssInfo->aucBSSID, - prBssInfo->u2CapInfo, - &u2PayloadLen); - - //4 <3> Update information of MSDU_INFO_T - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = aaaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose the frame body's IEs of the (Re)Association Request frame. - assocBuildReAssocRespFrameCommonIEs(prAdapter, prMsduInfo, prBssInfo); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < sizeof(txAssocRespIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txAssocRespIETable[i].pfnAppendIE) { - txAssocRespIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Enqueue the frame to send this (Re)Association request frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of assocSendReAssocRespFrame() */ -#endif /* CFG_SUPPORT_AAA */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/auth.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/auth.c deleted file mode 100755 index bdf0c3590572..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/auth.c +++ /dev/null @@ -1,1391 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/auth.c#1 $ -*/ - -/*! \file "auth.c" - \brief This file includes the authentication-related functions. - - This file includes the authentication-related functions. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: auth.c $ - * - * 02 13 2012 cp.wu - * NULL - * show error message only instead of raise assertion when - * received authentication frame is carrying illegal parameters. - * - * 11 09 2011 yuche.tsai - * NULL - * Fix a network index & station record index issue when TX deauth frame. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 22 2011 yuche.tsai - * NULL - * Fix coding error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000796] [Volunteer Patch][MT6620][Driver] Add BC deauth frame TX feature. - * BC deauth support. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 21 2011 terry.wu - * [WCXRP00000381] [MT6620 Wi-Fi][Driver] Kernel panic when replying unaccept Auth in AP mode - * In AP mode, use STA_REC_INDEX_NOT_FOUND(0xFE) instead of StaRec index when replying an unaccept Auth frame. - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update authSendDeauthFrame() for correct the value of eNetTypeIndex in MSDU_INFO_T - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Check Net is active before sending Deauth frame. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix compile warning - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add debug message for abnormal authentication frame from AP - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * Fix the Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the authComposeAuthFrameHeader() - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the send deauth frame function - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Integrate send Auth with TXM - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -APPEND_IE_ENTRY_T txAuthIETable[] = { - { (ELEM_HDR_LEN + ELEM_MAX_LEN_CHALLENGE_TEXT), authAddIEChallengeText } -}; - -HANDLE_IE_ENTRY_T rxAuthIETable[] = { - { ELEM_ID_CHALLENGE_TEXT, authHandleIEChallengeText } -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Authentication frame header and fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2AuthAlgNum Authentication Algorithm Number -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[in] u2StatusCode Status Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeAuthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_16 u2AuthAlgNum, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Authentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_AUTH; - - /* If this frame is the third frame in the shared key authentication - * sequence, it shall be encrypted. - */ - if ((u2AuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3)) { - - u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; /* HW will also detect this bit for applying encryption */ - } - - //WLAN_SET_FIELD_16(&prAuthFrame->u2FrameCtrl, u2FrameCtrl); - prAuthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prAuthFrame->aucSrcAddr, aucMACAddress); - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucPeerMACAddress); - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - - /* Fill the BSSID field with Current BSSID. */ - COPY_MAC_ADDR(prAuthFrame->aucBSSID, aucMACAddress); - break; - - default: - ASSERT(0); - } - - /* Clear the SEQ/FRAG_NO field. */ - prAuthFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Authentication Algorithm Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthAlgNum, u2AuthAlgNum); - prAuthFrame->u2AuthAlgNum = u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Authentication Transaction Sequence Number field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, u2TransactionSeqNum); - prAuthFrame->u2AuthTransSeqNo = u2TransactionSeqNum; // NOTE(Kevin): Optimized for ARM - - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prAuthFrame->u2StatusCode, u2StatusCode); - prAuthFrame->u2StatusCode = u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeAuthFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will append Challenge Text IE to the Authentication frame -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authAddIEChallengeText ( - IN P_ADAPTER_T prAdapter, - IN OUT P_MSDU_INFO_T prMsduInfo - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return; - } - - ASSERT(prStaRec); - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prMsduInfo->prPacket; - - WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - - /* Only consider SEQ_3 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && - (prStaRec->prChallengeText != NULL)) { - - COPY_IE(((UINT_32)(prMsduInfo->prPacket) + prMsduInfo->u2FrameLength), - (prStaRec->prChallengeText)); - - prMsduInfo->u2FrameLength += IE_SIZE(prStaRec->prChallengeText); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -#if !CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame\n")); - - ASSERT(prStaRec); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec->aucMacAddr, - prBssInfo->aucOwnMacAddr, - prStaRec->ucAuthAlgNum, - u2TransactionSeqNum, - STATUS_CODE_RESERVED); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = saaFsmRunEventTxDone; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#else - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Authenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_SW_RFB_T prFalseAuthSwRfb, - IN UINT_16 u2TransactionSeqNum, - IN UINT_16 u2StatusCode - ) -{ - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - /*get from input parameter*/ - //ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - PFN_TX_DONE_HANDLER pfTxDoneHandler = (PFN_TX_DONE_HANDLER)NULL; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedExtraIELen; - UINT_16 u2PayloadLen; - UINT_16 ucAuthAlgNum; - UINT_32 i; - - - DBGLOG(SAA, LOUD, ("Send Auth Frame %d, Status Code = %d\n", - u2TransactionSeqNum, u2StatusCode)); - - //4 <1> Allocate a PKT_INFO_T for Authentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - u2EstimatedExtraIELen += txAuthIETable[i].u2EstimatedIELen; - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Auth Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Authentication Request frame header and fixed fields in MSDU_INfO_T. - if (prStaRec) { - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucReceiveAddr = prStaRec->aucMacAddr; - - ucAuthAlgNum = prStaRec->ucAuthAlgNum; - - switch (u2TransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: - pfTxDoneHandler = saaFsmRunEventTxDone; - break; - - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - pfTxDoneHandler = aaaFsmRunEventTxDone; - break; - } - - } - else { /* For Error Status Code */ - P_WLAN_AUTH_FRAME_T prFalseAuthFrame; - - - ASSERT(prFalseAuthSwRfb); - prFalseAuthFrame = (P_WLAN_AUTH_FRAME_T)prFalseAuthSwRfb->pvHeader; - - ASSERT(u2StatusCode != STATUS_CODE_SUCCESSFUL); - - pucTransmitAddr = prFalseAuthFrame->aucDestAddr; - - pucReceiveAddr = prFalseAuthFrame->aucSrcAddr; - - ucAuthAlgNum = prFalseAuthFrame->u2AuthAlgNum; - - u2TransactionSeqNum = (prFalseAuthFrame->u2AuthTransSeqNo + 1); - } - - /* Compose Header and some Fixed Fields */ - authComposeAuthFrameHeaderAndFF((PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - ucAuthAlgNum, - u2TransactionSeqNum, - u2StatusCode); - - u2PayloadLen = (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - if(prStaRec) { - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - } - else { - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; //false Auth frame - } - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Compose IEs in MSDU_INFO_T - for (i = 0; i < sizeof(txAuthIETable)/sizeof(APPEND_IE_ENTRY_T); i++) { - if (txAuthIETable[i].pfnAppendIE) { - txAuthIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Authentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendAuthFrame() */ - -#endif /* CFG_SUPPORT_AAA */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will strictly check the TX Authentication frame for SAA/AAA event -* handling. -* -* @param[in] prMsduInfo Pointer of MSDU_INFO_T -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckTxAuthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN UINT_16 u2TransactionSeqNum - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TxFrameCtrl; - UINT_16 u2TxAuthAlgNum; - UINT_16 u2TxTransactionSeqNum; - - - ASSERT(prMsduInfo); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T)(prMsduInfo->prPacket); - ASSERT(prAuthFrame); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2FrameCtrl, &u2TxFrameCtrl) - u2TxFrameCtrl = prAuthFrame->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - u2TxFrameCtrl &= MASK_FRAME_TYPE; - if (u2TxFrameCtrl != MAC_FRAME_AUTH) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2TxAuthAlgNum) - u2TxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2TxAuthAlgNum != (UINT_16)(prStaRec->ucAuthAlgNum)) { - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TxTransactionSeqNum) - u2TxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2TxTransactionSeqNum != u2TransactionSeqNum) { - return WLAN_STATUS_FAILURE; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckTxAuthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Auth Frame's Transaction Sequence -* Number before delivering it to the corresponding SAA or AAA Module. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain authentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameTransSeq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxTransactionSeqNum; - - - ASSERT(prSwRfb); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Authentication Frame. - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN)) { - ASSERT(0); - return WLAN_STATUS_SUCCESS; - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - switch (u2RxTransactionSeqNum) { - case AUTH_TRANSACTION_SEQ_2: - case AUTH_TRANSACTION_SEQ_4: - saaFsmRunEventRxAuth(prAdapter, prSwRfb); - break; - - case AUTH_TRANSACTION_SEQ_1: - case AUTH_TRANSACTION_SEQ_3: -#if CFG_SUPPORT_AAA - aaaFsmRunEventRxAuth(prAdapter, prSwRfb); -#endif /* CFG_SUPPORT_AAA */ - break; - - default: - DBGLOG(SAA, WARN, ("Strange Authentication Packet: Auth Trans Seq No = %d, Error Status Code = %d\n", - u2RxTransactionSeqNum, prAuthFrame->u2StatusCode)); - break; - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameTransSeq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the incoming Authentication Frame and take -* the status code out. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] u2TransactionSeqNum Transaction Sequence Number -* @param[out] pu2StatusCode Pointer to store the Status Code from Authentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authCheckRxAuthFrameStatus ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_16 u2TransactionSeqNum, - OUT PUINT_16 pu2StatusCode - ) -{ - P_STA_RECORD_T prStaRec; - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2RxAuthAlgNum; - UINT_16 u2RxTransactionSeqNum; - //UINT_16 u2RxStatusCode; // NOTE(Kevin): Optimized for ARM - - - ASSERT(prSwRfb); - ASSERT(pu2StatusCode); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Fixed Fields of Authentication Frame Body. - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthAlgNum, &u2RxAuthAlgNum); - u2RxAuthAlgNum = prAuthFrame->u2AuthAlgNum; // NOTE(Kevin): Optimized for ARM - if (u2RxAuthAlgNum != (UINT_16)prStaRec->ucAuthAlgNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with auth type = %d, current = %d\n", - u2RxAuthAlgNum, prStaRec->ucAuthAlgNum)); - return WLAN_STATUS_FAILURE; - } - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2RxTransactionSeqNum); - u2RxTransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - if (u2RxTransactionSeqNum != u2TransactionSeqNum) { - DBGLOG(SAA, LOUD, ("Discard Auth frame with Transaction Seq No = %d\n", - u2RxTransactionSeqNum)); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Get the Status code - //WLAN_GET_FIELD_16(&prAuthFrame->u2StatusCode, &u2RxStatusCode); - //*pu2StatusCode = u2RxStatusCode; - *pu2StatusCode = prAuthFrame->u2StatusCode; // NOTE(Kevin): Optimized for ARM - - return WLAN_STATUS_SUCCESS; - -} /* end of authCheckRxAuthFrameStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Challenge Text IE from the Authentication frame -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] prIEHdr Pointer to start address of IE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -authHandleIEChallengeText ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - P_IE_HDR_T prIEHdr - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - P_STA_RECORD_T prStaRec; - UINT_16 u2TransactionSeqNum; - - - ASSERT(prSwRfb); - ASSERT(prIEHdr); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(!prStaRec) { - return; - } - - /* For Management, frame header and payload are in a continuous buffer */ - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) - u2TransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM - - /* Only consider SEQ_2 for Challenge Text */ - if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_2) && - (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY)) { - - /* Free previous allocated TCM memory */ - if (prStaRec->prChallengeText) { - ASSERT(0); - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - if ( ( prStaRec->prChallengeText = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, IE_SIZE(prIEHdr)) ) == NULL) { - return; - } - - /* Save the Challenge Text from Auth Seq 2 Frame, before sending Auth Seq 3 Frame */ - COPY_IE(prStaRec->prChallengeText, prIEHdr); - } - - return; - -} /* end of authAddIEChallengeText() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth2_Auth4Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - PUINT_8 pucIEsBuffer; - UINT_16 u2IEsLen; - UINT_16 u2Offset; - UINT_8 ucIEID; - UINT_32 i; - - - ASSERT(prSwRfb); - - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - pucIEsBuffer = &prAuthFrame->aucInfoElem[0]; - u2IEsLen = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (AUTH_ALGORITHM_NUM_FIELD_LEN + - AUTH_TRANSACTION_SEQENCE_NUM_FIELD_LEN + - STATUS_CODE_FIELD_LEN); - - IE_FOR_EACH(pucIEsBuffer, u2IEsLen, u2Offset) { - ucIEID = IE_ID(pucIEsBuffer); - - for (i = 0; i < (sizeof(rxAuthIETable) / sizeof(HANDLE_IE_ENTRY_T)); i++) { - - if ((ucIEID == rxAuthIETable[i].ucElemID) && - (rxAuthIETable[i].pfnHandleIE != NULL)) { - rxAuthIETable[i].pfnHandleIE(prAdapter, prSwRfb, (P_IE_HDR_T)pucIEsBuffer); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth2_Auth4Frame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Deauthentication frame -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] aucPeerMACAddress Given Peer MAC Address. -* @param[in] aucMACAddress Given Our MAC Address. -* @param[in] u2StatusCode Status Code -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -authComposeDeauthFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN UINT_8 aucPeerMACAddress[], - IN UINT_8 aucMACAddress[], - IN UINT_8 aucBssid[], - IN UINT_16 u2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2FrameCtrl; - - ASSERT(pucBuffer); - ASSERT(aucPeerMACAddress); - ASSERT(aucMACAddress); - ASSERT(aucBssid); - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Deauthentication frame. - /* Fill the Frame Control field. */ - u2FrameCtrl = MAC_FRAME_DEAUTH; - - //WLAN_SET_FIELD_16(&prDeauthFrame->u2FrameCtrl, u2FrameCtrl); - prDeauthFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucDestAddr, aucPeerMACAddress); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prDeauthFrame->aucSrcAddr, aucMACAddress); - - /* Fill the BSSID field with Target BSSID. */ - COPY_MAC_ADDR(prDeauthFrame->aucBSSID, aucBssid); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prDeauthFrame->u2SeqCtrl = 0; - - //4 <2> Compose the frame body's fixed field part of the Authentication frame. - /* Fill the Status Code field. */ - //WLAN_SET_FIELD_16(&prDeauthFrame->u2ReasonCode, u2ReasonCode); - prDeauthFrame->u2ReasonCode = u2ReasonCode; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of authComposeDeauthFrameHeaderAndFF() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send the Deauthenticiation frame -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prClassErrSwRfb Pointer to the SW_RFB_T which is Class Error. -* @param[in] u2ReasonCode A reason code to indicate why to leave BSS. -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCES No available resource for frame composing. -* @retval WLAN_STATUS_SUCCESS Successfully send frame to TX Module -* @retval WLAN_STATUS_FAILURE Didn't send Deauth frame for various reasons. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authSendDeauthFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prClassErrSwRfb, - IN UINT_16 u2ReasonCode, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_WLAN_MAC_HEADER_A4_T prWlanMacHeader = NULL; - PUINT_8 pucReceiveAddr; - PUINT_8 pucTransmitAddr; - PUINT_8 pucBssid = NULL; - - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2RxFrameCtrl; - P_BSS_INFO_T prBssInfo; - - P_DEAUTH_INFO_T prDeauthInfo; - OS_SYSTIME rCurrentTime; - INT_32 i4NewEntryIndex, i; - UINT_8 ucStaRecIdx = STA_REC_INDEX_NOT_FOUND; - -#if CFG_ENABLE_WIFI_DIRECT - UINT_8 aucBMC[] = BC_MAC_ADDR; -#endif - - /* NOTE(Kevin): The best way to reply the Deauth is according to the incoming data - * frame - */ - //4 <1> Find the Receiver Address first. - if (prClassErrSwRfb) { - BOOLEAN fgIsAbleToSendDeauth = FALSE; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_A4_T) prClassErrSwRfb->pvHeader; - - //WLAN_GET_FIELD_16(&prWlanMacHeader->u2FrameCtrl, &u2RxFrameCtrl); - u2RxFrameCtrl = prWlanMacHeader->u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* TODO(Kevin): Currently we won't send Deauth for IBSS node. How about DLS ? */ - if ((prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) == 0) { - return WLAN_STATUS_FAILURE; - } - - /* Check if corresponding BSS is able to send Deauth */ - for (i = NETWORK_TYPE_AIS_INDEX; i < NETWORK_TYPE_INDEX_NUM; i++) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[i]); - - if (IS_NET_ACTIVE(prAdapter, i) && - (EQUAL_MAC_ADDR(prWlanMacHeader->aucAddr1, prBssInfo->aucOwnMacAddr))) { - { - fgIsAbleToSendDeauth = TRUE; - eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)i; - break; - } - } - } - - if (!fgIsAbleToSendDeauth) { - return WLAN_STATUS_FAILURE; - } - - pucReceiveAddr = prWlanMacHeader->aucAddr2; - - } - else if (prStaRec) { - - pucReceiveAddr = prStaRec->aucMacAddr; - } - else { -#if CFG_ENABLE_WIFI_DIRECT - pucReceiveAddr = aucBMC; -#else - return WLAN_STATUS_FAILURE; -#endif - } - - //4 <2> Check if already send a Deauth frame in MIN_DEAUTH_INTERVAL_MSEC - GET_CURRENT_SYSTIME(&rCurrentTime); - - i4NewEntryIndex = -1; - for (i = 0; i < MAX_DEAUTH_INFO_COUNT; i++) { - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i]); - - - /* For continuously sending Deauth frame, the minimum interval is - * MIN_DEAUTH_INTERVAL_MSEC. - */ - if (CHECK_FOR_TIMEOUT(rCurrentTime, - prDeauthInfo->rLastSendTime, - MSEC_TO_SYSTIME(MIN_DEAUTH_INTERVAL_MSEC))) { - - i4NewEntryIndex = i; - } - else if (EQUAL_MAC_ADDR(pucReceiveAddr, prDeauthInfo->aucRxAddr) && - (!pfTxDoneHandler)) { - - return WLAN_STATUS_FAILURE; - } - } - - //4 <3> Update information. - if (i4NewEntryIndex > 0) { - - prDeauthInfo = &(prAdapter->rWifiVar.arDeauthInfo[i4NewEntryIndex]); - - COPY_MAC_ADDR(prDeauthInfo->aucRxAddr, pucReceiveAddr); - prDeauthInfo->rLastSendTime = rCurrentTime; - } - else { - /* NOTE(Kevin): for the case of AP mode, we may encounter this case - * if deauth all the associated clients. - */ - DBGLOG(SAA, WARN, ("No unused DEAUTH_INFO_T !\n")); - } - - //4 <4> Allocate a PKT_INFO_T for Deauthentication Frame - /* Init with MGMT Header Length + Length of Fixed Fields + IE Length */ - u2EstimatedFrameLen = (MAC_TX_RESERVED_FIELD + - WLAN_MAC_MGMT_HEADER_LEN + - REASON_CODE_FIELD_LEN); - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SAA, WARN, ("No PKT_INFO_T for sending Deauth Request.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <5> Find the Transmitter Address and BSSID. - if (prClassErrSwRfb) { - - /* The TA of Deauth is the A1 of RX frame */ - pucTransmitAddr = prWlanMacHeader->aucAddr1; - - switch (prWlanMacHeader->u2FrameCtrl & MASK_TO_DS_FROM_DS) { - - case MASK_FC_FROM_DS: - /* The BSSID of Deauth is the A2 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - case MASK_FC_TO_DS: - /* The BSSID of Deauth is the A1 of RX frame */ - pucBssid = prWlanMacHeader->aucAddr1; - break; - - case MASK_TO_DS_FROM_DS: - /* TODO(Kevin): Consider BOW, now we set the BSSID of Deauth - * to the A2 of RX frame for temporary solution. - */ - pucBssid = prWlanMacHeader->aucAddr2; - break; - - /* No Default */ - } - - } - else if (prStaRec) { - eNetTypeIndex = prStaRec->ucNetTypeIndex; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - } -#if CFG_ENABLE_WIFI_DIRECT - else { - if (prAdapter->fgIsP2PRegistered) { - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ucStaRecIdx = STA_REC_INDEX_BMCAST; - - pucTransmitAddr = prBssInfo->aucOwnMacAddr; - - pucBssid = prBssInfo->aucBSSID; - - eNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - } - else { - return WLAN_STATUS_FAILURE; - } - } - -#endif - - //4 <6> compose Deauthentication frame header and some fixed fields */ - authComposeDeauthFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucReceiveAddr, - pucTransmitAddr, - pucBssid, - u2ReasonCode); - -#if CFG_SUPPORT_802_11W - if (rsnCheckBipKeyInstalled(prAdapter, prStaRec)) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)(PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prDeauthFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - DBGLOG(TX, WARN, ("authSendDeauthFrame with protection\n")); - } -#endif - - //4 <7> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = ((prStaRec == NULL)?ucStaRecIdx:prStaRec->ucIndex); - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + REASON_CODE_FIELD_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <8> Inform TXM to send this Deauthentication frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; -} /* end of authSendDeauthFrame() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Deauthentication frame -* if the given BSSID is matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucBSSID Given BSSID -* @param[out] pu2ReasonCode Pointer to store the Reason Code from Deauthentication. -* -* @retval WLAN_STATUS_FAILURE This is not the frame we should handle at current state. -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxDeauthFrame ( - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucBSSID[], - OUT PUINT_16 pu2ReasonCode - ) -{ - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; - UINT_16 u2RxReasonCode; - - - ASSERT(prSwRfb); - ASSERT(aucBSSID); - ASSERT(pu2ReasonCode); - - //4 <1> locate the Deauthentication Frame. - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Parse the Header of Deauthentication Frame. -#if 0 // Kevin: Seems redundant - WLAN_GET_FIELD_16(&prDeauthFrame->u2FrameCtrl, &u2RxFrameCtrl) - u2RxFrameCtrl &= MASK_FRAME_TYPE; - if (u2RxFrameCtrl != MAC_FRAME_DEAUTH) { - return WLAN_STATUS_FAILURE; - } -#endif - - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < REASON_CODE_FIELD_LEN) { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - /* Check if this Deauth Frame is coming from Target BSSID */ - if (UNEQUAL_MAC_ADDR(prDeauthFrame->aucBSSID, aucBSSID)) { - DBGLOG(SAA, LOUD, ("Ignore Deauth Frame from other BSS ["MACSTR"]\n", - MAC2STR(prDeauthFrame->aucSrcAddr))); - return WLAN_STATUS_FAILURE; - } - - //4 <3> Parse the Fixed Fields of Deauthentication Frame Body. - WLAN_GET_FIELD_16(&prDeauthFrame->u2ReasonCode, &u2RxReasonCode); - *pu2ReasonCode = u2RxReasonCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxDeauthFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will parse and process the incoming Authentication frame. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] aucExpectedBSSID Given Expected BSSID. -* @param[in] u2ExpectedAuthAlgNum Given Expected Authentication Algorithm Number -* @param[in] u2ExpectedTransSeqNum Given Expected Transaction Sequence Number. -* @param[out] pu2ReturnStatusCode Return Status Code. -* -* @retval WLAN_STATUS_SUCCESS This is the frame we should handle. -* @retval WLAN_STATUS_FAILURE The frame we will ignore. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -authProcessRxAuth1Frame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 aucExpectedBSSID[], - IN UINT_16 u2ExpectedAuthAlgNum, - IN UINT_16 u2ExpectedTransSeqNum, - OUT PUINT_16 pu2ReturnStatusCode - ) -{ - P_WLAN_AUTH_FRAME_T prAuthFrame; - UINT_16 u2ReturnStatusCode = STATUS_CODE_SUCCESSFUL; - - - ASSERT(prSwRfb); - ASSERT(aucExpectedBSSID); - ASSERT(pu2ReturnStatusCode); - - //4 <1> locate the Authentication Frame. - prAuthFrame = (P_WLAN_AUTH_FRAME_T) prSwRfb->pvHeader; - - //4 <2> Check the BSSID - if (UNEQUAL_MAC_ADDR(prAuthFrame->aucBSSID, aucExpectedBSSID)) { - return WLAN_STATUS_FAILURE; /* Just Ignore this MMPDU */ - } - - //4 <3> Parse the Fixed Fields of Authentication Frame Body. - if (prAuthFrame->u2AuthAlgNum != u2ExpectedAuthAlgNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_ALGORITHM_NOT_SUPPORTED; - } - - if (prAuthFrame->u2AuthTransSeqNo != u2ExpectedTransSeqNum) { - u2ReturnStatusCode = STATUS_CODE_AUTH_OUT_OF_SEQ; - } - - *pu2ReturnStatusCode = u2ReturnStatusCode; - - return WLAN_STATUS_SUCCESS; - -} /* end of authProcessRxAuth1Frame() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/bss.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/bss.c deleted file mode 100755 index 5fdeecbfa982..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/bss.c +++ /dev/null @@ -1,2820 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/bss.c#1 $ -*/ - -/*! \file "bss.c" - \brief This file contains the functions for creating BSS(AP)/IBSS(AdHoc). - - This file contains the functions for BSS(AP)/IBSS(AdHoc). We may create a BSS/IBSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: bss.c $ -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync for NVRAM warning scan result generation for CFG80211. -** -** 08 31 2012 chinglan.wang -** NULL -** Phone can not connect to AP secured with AES via WAPI in 802.11n Only. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 14 2012 chinglan.wang - * NULL - * Fix the losing of the HT IE in assoc request.. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 08 2012 yuche.tsai - * NULL - * Fix FW assert when start Hot-Spot. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 20 2012 chinglan.wang - * 03 02 2012 terry.wu - * NULL - * Fix the WPA-PSK TKIP and WPA2-PSK AES security mode bug. - * - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 15 2012 yuche.tsai - * NULL - * Fix wrong basic rate issue. - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Always set short slot time to TRUE initially in AP mode - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 09 14 2011 yuche.tsai - * NULL - * Add P2P IE in assoc response. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 29 2011 eddie.chen - * [WCXRP00000608] [MT6620 Wi-Fi][DRV] Change wmm parameters in beacon - * Change wmm parameters in beacon. - * - * 03 29 2011 yuche.tsai - * [WCXRP00000607] [Volunteer Patch][MT6620][Driver] Coding Style Fix for klocwork scan. - * Fix klocwork issue. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Make assoc req to append P2P IE if wifi direct is enabled. - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * . - * - * 03 03 2011 george.huang - * [WCXRP00000508] [MT6620 Wi-Fi][Driver] aware of beacon MSDU will be free, after BSS deactivated - * modify to handle if beacon MSDU been released when BSS deactivated - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * Add code to send beacon and probe response WSC IE at Auto GO. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * bss should create station record type according to callers input. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * In p2p link function, check networktype before calling p2p function. - * - * 02 11 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Modify p2p link function to avoid assert. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 25 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Fix the compile error in windows. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * .Fix typo and missing entry - * - * 12 30 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Fix prBssInfo->aucCWminLog to prBssInfo->aucCWminLogForBcast - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, - -Add per station flow control when STA is in PS - - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 29 2010 yuche.tsai - * NULL - * Finish SLT TX/RX & Rate Changing Support. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 16 2010 yuche.tsai - * NULL - * Before composing Beacon IE, assign network type index for msdu info, - * this information is needed by RLM module while composing some RLM related IE field. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Fix undefined pucDestAddr in bssUpdateBeaconContent() - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 08 02 2010 george.huang - * NULL - * add WMM-PS test related OID/ CMD handlers - * - * 07 26 2010 yuche.tsai - * - * Add support to RX probe response for P2P. - * - * 07 20 2010 cp.wu - * - * 1) bugfix: do not stop timer for join after switched into normal_tr state, for providing chance for DHCP handshasking - * 2) modify rsnPerformPolicySelection() invoking - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * when IBSS is being merged-in, send command packet to PM for connected indication - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * auth.c is migrated. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fix compilation error when WIFI_DIRECT is turned on - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add bss.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add ClientList handling API - bssClearClientList, bssAddStaRecToClientList - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update bssProcessProbeRequest() to avoid redundant SSID IE {0,0} for IOT. - * - * 05 21 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine txmInitWtblTxRateTable() - set TX initial rate according to AP's operation rate set - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Use TX MGMT Frame API for sending PS NULL frame to avoid the TX Burst Mechanism in TX FW Frame API - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Seperate Beacon and ProbeResp IE array - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed the use of compiling flag MQM_WMM_PARSING - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 20 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Fix restart Beacon Timeout Func after connection diagnosis - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the protected bit at cap info for ad-hoc. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename the CFG flags - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing beacon's TX data rate - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add DTIM count update while TX Beacon - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to define - BAND_24G and specific BSS_INFO_T was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -APPEND_VAR_IE_ENTRY_T txBcnIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWPAIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - ,{ 0, p2pFuncCalculateExtra_IELenForBeacon, p2pFuncGenerateExtra_IEForBeacon } /* 221 */ -#else - ,{ 0, p2pFuncCalculateP2p_IELenForBeacon, p2pFuncGenerateP2p_IEForBeacon } /* 221 */ - ,{ 0, p2pFuncCalculateWSC_IELenForBeacon, p2pFuncGenerateWSC_IEForBeacon } /* 221 */ -#endif -#endif /* CFG_ENABLE_WIFI_DIRECT */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ -#if CFG_ENABLE_WIFI_DIRECT - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ -#endif - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines for all Operation Modes */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will create or reset a STA_RECORD_T by given BSS_DESC_T for -* Infrastructure or AdHoc Mode. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eStaType Assign STA Type for this STA_RECORD_T -* @param[in] eNetTypeIndex Assign Net Type Index for this STA_RECORD_T -* @param[in] prBssDesc Received Beacon/ProbeResp from this STA -* -* @retval Pointer to STA_RECORD_T -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -bssCreateStaRecFromBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_STA_TYPE_T eStaType, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_STA_RECORD_T prStaRec; - UINT_8 ucNonHTPhyTypeSet; - - - ASSERT(prBssDesc); - - //4 <1> Get a valid STA_RECORD_T - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - if (!prStaRec) { - - prStaRec = cnmStaRecAlloc(prAdapter, (UINT_8) eNetTypeIndex); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - - if(!prStaRec) { - ASSERT(FALSE); - return NULL; - } - - ASSERT(prStaRec); - - prStaRec->ucJoinFailureCount = 0; - /* TODO(Kevin): If this is an old entry, we may also reset the ucJoinFailureCount to 0. - */ - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prBssDesc->aucSrcAddr); - } - - - //4 <2> Setup STA TYPE and NETWORK - prStaRec->eStaType = eStaType; - - prStaRec->ucNetTypeIndex = eNetTypeIndex; - - - //4 <3> Update information from BSS_DESC_T to current P_STA_RECORD_T - prStaRec->u2CapInfo = prBssDesc->u2CapInfo; - - prStaRec->u2OperationalRateSet = prBssDesc->u2OperationalRateSet; - prStaRec->u2BSSBasicRateSet = prBssDesc->u2BSSBasicRateSet; - - prStaRec->ucPhyTypeSet = prBssDesc->ucPhyTypeSet; - - if (!((prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_ENABLED) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION3_KEY_ABSENT) || - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION_DISABLED) || - (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) || - (prAdapter->prGlueInfo->u2WapiAssocInfoIESz))) { - DBGLOG(BSS, INFO, ("Ignore the HT Bit for TKIP as pairwise cipher configed!\n")); - prStaRec->ucPhyTypeSet &= ~PHY_TYPE_BIT_HT; - } - - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prAdapter->rWifiVar.ucAvailablePhyTypeSet; - - ucNonHTPhyTypeSet = prStaRec->ucDesiredPhyTypeSet & PHY_TYPE_SET_802_11ABG; - - /* Check for Target BSS's non HT Phy Types */ - if (ucNonHTPhyTypeSet) { - - if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_ERP) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_ERP_INDEX; - } - else if (ucNonHTPhyTypeSet & PHY_TYPE_BIT_OFDM) { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_OFDM_INDEX; - } - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = TRUE; - } - else { - /* Use mandatory for 11N only BSS */ - ASSERT(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N); - - { - /* TODO(Kevin): which value should we set for 11n ? ERP ? */ - prStaRec->ucNonHTBasicPhyType = PHY_TYPE_HR_DSSS_INDEX; - } - - prStaRec->fgHasBasicPhyType = FALSE; - } - - /* Update non HT Desired Rate Set */ - { - P_CONNECTION_SETTINGS_T prConnSettings; - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - prStaRec->u2DesiredNonHTRateSet = - (prStaRec->u2OperationalRateSet & prConnSettings->u2DesiredNonHTRateSet); - } - - //4 <4> Update information from BSS_DESC_T to current P_STA_RECORD_T - if (IS_AP_STA(prStaRec)) { - /* do not need to parse IE for DTIM, - * which have been parsed before inserting into BSS_DESC_T - */ - if (prBssDesc->ucDTIMPeriod) { - prStaRec->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - } - else { - prStaRec->ucDTIMPeriod = 0; // Means that TIM was not parsed. - } - } - - - //4 <5> Update default value - prStaRec->fgDiagnoseConnection = FALSE; - - - //4 <6> Update default value for other Modules - /* Determine fgIsWmmSupported and fgIsUapsdSupported in STA_REC */ - mqmProcessScanResult(prAdapter, prBssDesc, prStaRec); - - return prStaRec; - -} /* end of bssCreateStaRecFromBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec - ) -{ - P_WLAN_MAC_HEADER_T prNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prNullFrame = (P_WLAN_MAC_HEADER_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prNullFrame->u2FrameCtrl, u2FrameCtrl); - prNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prNullFrame->u2SeqCtrl = 0; - - return; - -} /* end of bssComposeNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the QoS Null Data frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* @param[in] ucUP User Priority. -* @param[in] fgSetEOSP Set the EOSP bit. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN BOOLEAN fgSetEOSP - ) -{ - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - P_BSS_INFO_T prBssInfo; - UINT_16 u2FrameCtrl; - UINT_16 u2QosControl; - - - ASSERT(pucBuffer); - ASSERT(prStaRec); - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo); - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)pucBuffer; - - //4 <1> Decide the Frame Control Field - u2FrameCtrl = MAC_FRAME_QOS_NULL; - - if (IS_AP_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_TO_DS; - - if (prStaRec->fgSetPwrMgtBit) { - u2FrameCtrl |= MASK_FC_PWR_MGT; - } - } - else if (IS_CLIENT_STA(prStaRec)) { - u2FrameCtrl |= MASK_FC_FROM_DS; - } - else if (IS_DLS_STA(prStaRec)) { - /* TODO(Kevin) */ - } - else { - /* NOTE(Kevin): We won't send QoS Null frame for IBSS */ - ASSERT(0); - return; - } - - //4 <2> Compose the QoS Null frame - /* Fill the Frame Control field. */ - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2FrameCtrl, u2FrameCtrl); - prQoSNullFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the Address 1 field with Target Peer Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr1, prStaRec->aucMacAddr); - - /* Fill the Address 2 field with our MAC Address. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr2, prBssInfo->aucOwnMacAddr); - - /* Fill the Address 3 field with Target BSSID. */ - COPY_MAC_ADDR(prQoSNullFrame->aucAddr3, prBssInfo->aucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prQoSNullFrame->u2SeqCtrl = 0; - - u2QosControl = (UINT_16)(ucUP & WMM_QC_UP_MASK); - - if (fgSetEOSP) { - u2QosControl |= WMM_QC_EOSP; - } - - //WLAN_SET_FIELD_16(&prQoSNullFrame->u2QosCtrl, u2QosControl); - prQoSNullFrame->u2QosCtrl = u2QosControl; // NOTE(Kevin): Optimized for ARM - - return; - -} /* end of bssComposeQoSNullFrameHeader() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Succe]ss. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeNullFrame(prAdapter, - (PUINT_8)((UINT_32)prMsduInfo->prPacket + MAC_TX_RESERVED_FIELD), - prStaRec); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ BSS_DEFAULT_CONN_TEST_NULL_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendNullFrame() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the QoS Null Frame -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] pfTxDoneHandler TX Done call back function -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return WLAN_STATUS_RESOURCES; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - FALSE); -#if 0 - //4 <3> Update information of MSDU_INFO_T - TXM_SET_DATA_PACKET( \ - /* STA_REC ptr */ prStaRec, \ - /* MSDU_INFO ptr */ prMsduInfo, \ - /* MAC HDR ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD), \ - /* MAC HDR length */ WLAN_MAC_HEADER_QOS_LEN, \ - /* PAYLOAD ptr */ (prMsduInfo->pucBuffer + MAC_TX_RESERVED_FIELD + WLAN_MAC_HEADER_QOS_LEN), \ - /* PAYLOAD length */ 0, \ - /* Network Type Index */(UINT_8)prStaRec->ucNetTypeIndex, \ - /* TID */ 0 /* BE: AC1 */, \ - /* Flag 802.11 */ TRUE,\ - /* Pkt arrival time */ 0 /* TODO: Obtain the system time */, \ - /* Resource TC */ 0 /* Irrelevant */, \ - /* Flag 802.1x */ FALSE,\ - /* TX-done callback */ pfTxDoneHandler, \ - /* PS forwarding type*/ PS_FORWARDING_TYPE_NON_PS, \ - /* PS Session ID */ 0 /* Irrelevant */, \ - /* Flag fixed rate */ TRUE, \ - /* Fixed tx rate */ g_aprBssInfo[prStaRec->ucNetTypeIndex]->ucHwDefaultFixedRateCode, \ - /* Fixed-rate retry */ TXM_DEFAULT_DATA_FRAME_RETRY_LIMIT, \ - /* PAL LLH */ 0 /* Irrelevant */,\ - /* ACL SN */ 0 /* Irrelevant */,\ - /* Flag No Ack */ FALSE \ - ); - - /* Terminate with a NULL pointer */ - NIC_HIF_TX_SET_NEXT_MSDU_INFO(prMsduInfo,NULL); - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - /* Indicate the packet to TXM */ - //4 <4> Inform TXM to send this Null frame. - txmSendFwDataPackets(prMsduInfo); -#endif - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = TRUE; - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendQoSNullFrame() */ - - -#if (CFG_SUPPORT_ADHOC) || (CFG_SUPPORT_AAA) -/*----------------------------------------------------------------------------*/ -/* Routines for both IBSS(AdHoc) and BSS(AP) */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate Information Elements of Extended -* Support Rate -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssGenerateExtSuppRate_IE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - PUINT_8 pucBuffer; - UINT_8 ucExtSupRatesLen; - - - ASSERT(prMsduInfo); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucExtSupRatesLen = prBssInfo->ucAllSupportedRatesLen - ELEM_MAX_LEN_SUP_RATES; - } - else { - ucExtSupRatesLen = 0; - } - - /* Fill the Extended Supported Rates element. */ - if (ucExtSupRatesLen) { - - EXT_SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_EXTENDED_SUP_RATES; - EXT_SUP_RATES_IE(pucBuffer)->ucLength = ucExtSupRatesLen; - - kalMemCopy(EXT_SUP_RATES_IE(pucBuffer)->aucExtSupportedRates, - &prBssInfo->aucAllSupportedRates[ELEM_MAX_LEN_SUP_RATES], - ucExtSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - - return; -} /* end of bssGenerateExtSuppRate_IE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for Beacon -* or Probe Response Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssBuildBeaconProbeRespFrameCommonIEs ( - IN P_MSDU_INFO_T prMsduInfo, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucDestAddr - ) -{ - PUINT_8 pucBuffer; - UINT_8 ucSupRatesLen; - - - ASSERT(prMsduInfo); - ASSERT(prBssInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - ASSERT(pucBuffer); - - /* Compose the frame body of the Probe Response frame. */ - //4 <1> Fill the SSID element. - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - SSID_IE(pucBuffer)->ucLength = prBssInfo->ucSSIDLen; - if (prBssInfo->ucSSIDLen) { - kalMemCopy(SSID_IE(pucBuffer)->aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - } - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - - //4 <2> Fill the Supported Rates element. - if (prBssInfo->ucAllSupportedRatesLen > ELEM_MAX_LEN_SUP_RATES) { - - ucSupRatesLen = ELEM_MAX_LEN_SUP_RATES; - } - else { - ucSupRatesLen = prBssInfo->ucAllSupportedRatesLen; - } - - if (ucSupRatesLen) { - SUP_RATES_IE(pucBuffer)->ucId = ELEM_ID_SUP_RATES; - SUP_RATES_IE(pucBuffer)->ucLength = ucSupRatesLen; - kalMemCopy(SUP_RATES_IE(pucBuffer)->aucSupportedRates, - prBssInfo->aucAllSupportedRates, - ucSupRatesLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <3> Fill the DS Parameter Set element. - if (prBssInfo->eBand == BAND_2G4) { - DS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_DS_PARAM_SET; - DS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_DS_PARAMETER_SET; - DS_PARAM_IE(pucBuffer)->ucCurrChnl = prBssInfo->ucPrimaryChannel; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <4> IBSS Parameter Set element, ID: 6 - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - IBSS_PARAM_IE(pucBuffer)->ucId = ELEM_ID_IBSS_PARAM_SET; - IBSS_PARAM_IE(pucBuffer)->ucLength = ELEM_MAX_LEN_IBSS_PARAMETER_SET; - WLAN_SET_FIELD_16(&(IBSS_PARAM_IE(pucBuffer)->u2ATIMWindow), prBssInfo->u2ATIMWindow); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - } - - - //4 <5> TIM element, ID: 5 - if ((!pucDestAddr) && // For Beacon only. - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - -#if CFG_ENABLE_WIFI_DIRECT - /*no fgIsP2PRegistered protect*/ - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { -#if 0 - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_8 ucBitmapControl = 0; - UINT_32 u4N1, u4N2; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - // Clear existing value. - prP2pSpecificBssInfo->ucBitmapCtrl = 0; - kalMemZero(prP2pSpecificBssInfo->aucPartialVirtualBitmap, - sizeof(prP2pSpecificBssInfo->aucPartialVirtualBitmap)); - - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucDTIMCount = prBssInfo->ucDTIMCount; - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount == 0) { - //3 *** pmQueryBufferedBCAST(); - } - - //3 *** pmQueryBufferedPSNode(); - /* TODO(Kevin): Call PM Module here to loop all STA_RECORD_Ts and it - * will call bssSetTIMBitmap to toggle the Bitmap. - */ - - // Set Virtual Bitmap for UCAST - u4N1 = (prP2pSpecificBssInfo->u2SmallestAID >> 4) << 1; // Find the largest even number. - u4N2 = prP2pSpecificBssInfo->u2LargestAID >> 3; // Find the smallest number. - - ASSERT(u4N2 >= u4N1); - - kalMemCopy(TIM_IE(pucBuffer)->aucPartialVirtualMap, - &prP2pSpecificBssInfo->aucPartialVirtualBitmap[u4N1], - ((u4N2 - u4N1) + 1)); - - // Set Virtual Bitmap for BMCAST - // BMC bit only indicated when DTIM count == 0. - if (prBssInfo->ucDTIMCount == 0) { - ucBitmapControl = prP2pSpecificBssInfo->ucBitmapCtrl; - } - TIM_IE(pucBuffer)->ucBitmapControl = ucBitmapControl | (UINT_8)u4N1; - - TIM_IE(pucBuffer)->ucLength = ((u4N2 - u4N1) + 4); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); -#else - - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = prBssInfo->ucDTIMPeriod; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -#endif - - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - /* NOTE(Kevin): 1. AIS - Didn't Support AP Mode. - * 2. BOW - Didn't Support BCAST and PS. - */ - } - - - - } - - return; -} /* end of bssBuildBeaconProbeRespFrameCommonIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Beacon/Probe Response frame header and -* its fixed fields. -* -* @param[in] pucBuffer Pointer to the frame buffer. -* @param[in] pucDestAddr Pointer to the Destination Address, if NULL, means Beacon. -* @param[in] pucOwnMACAddress Given Our MAC Address. -* @param[in] pucBSSID Given BSSID of the BSS. -* @param[in] u2BeaconInterval Given Beacon Interval. -* @param[in] u2CapInfo Given Capability Info. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssComposeBeaconProbeRespFrameHeaderAndFF ( - IN PUINT_8 pucBuffer, - IN PUINT_8 pucDestAddr, - IN PUINT_8 pucOwnMACAddress, - IN PUINT_8 pucBSSID, - IN UINT_16 u2BeaconInterval, - IN UINT_16 u2CapInfo - ) -{ - P_WLAN_BEACON_FRAME_T prBcnProbRspFrame; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - UINT_16 u2FrameCtrl; - - DEBUGFUNC("bssComposeBeaconProbeRespFrameHeaderAndFF"); - //DBGLOG(INIT, LOUD, ("\n")); - - - ASSERT(pucBuffer); - ASSERT(pucOwnMACAddress); - ASSERT(pucBSSID); - - prBcnProbRspFrame = (P_WLAN_BEACON_FRAME_T)pucBuffer; - - //4 <1> Compose the frame header of the Beacon /ProbeResp frame. - /* Fill the Frame Control field. */ - if (pucDestAddr) { - u2FrameCtrl = MAC_FRAME_PROBE_RSP; - } - else { - u2FrameCtrl = MAC_FRAME_BEACON; - pucDestAddr = aucBCAddr; - } - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2FrameCtrl, u2FrameCtrl); - prBcnProbRspFrame->u2FrameCtrl = u2FrameCtrl; // NOTE(Kevin): Optimized for ARM - - /* Fill the DA field with BCAST MAC ADDR or TA of ProbeReq. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucDestAddr, pucDestAddr); - - /* Fill the SA field with our MAC Address. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucSrcAddr, pucOwnMACAddress); - - /* Fill the BSSID field with current BSSID. */ - COPY_MAC_ADDR(prBcnProbRspFrame->aucBSSID, pucBSSID); - - /* Clear the SEQ/FRAG_NO field(HW won't overide the FRAG_NO, so we need to clear it). */ - prBcnProbRspFrame->u2SeqCtrl = 0; - - - //4 <2> Compose the frame body's common fixed field part of the Beacon /ProbeResp frame. - /* MAC will update TimeStamp field */ - - /* Fill the Beacon Interval field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2BeaconInterval, u2BeaconInterval); - prBcnProbRspFrame->u2BeaconInterval = u2BeaconInterval; // NOTE(Kevin): Optimized for ARM - - /* Fill the Capability Information field. */ - //WLAN_SET_FIELD_16(&prBcnProbRspFrame->u2CapInfo, u2CapInfo); - prBcnProbRspFrame->u2CapInfo = u2CapInfo; // NOTE(Kevin): Optimized for ARM - - return; -} /* end of bssComposeBeaconProbeRespFrameHeaderAndFF() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the Beacon Frame Template to FW for AIS AdHoc and P2P GO. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssUpdateBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_WLAN_BEACON_FRAME_T prBcnFrame; - UINT_32 i; - - DEBUGFUNC("bssUpdateBeaconContent"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - //4 <1> Allocate a PKT_INFO_T for Beacon Frame - /* Allocate a MSDU_INFO_T */ - // For Beacon - prMsduInfo = prBssInfo->prBeacon; - - // beacon prMsduInfo will be NULLify once BSS deactivated, so skip if it is - if (prMsduInfo == NULL) { - return WLAN_STATUS_SUCCESS; - } - - //4 <2> Compose header - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - NULL, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - - - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - prMsduInfo->ucNetworkType = eNetTypeIndex; - - //4 <3> Compose the frame body's Common IEs of the Beacon frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, NULL); - - - //4 <4> Compose IEs in MSDU_INFO_T - - /* Append IE for Beacon */ - for (i = 0; i < sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); i++) { - if (txBcnIETable[i].pfnAppendIE) { - txBcnIETable[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - eNetTypeIndex, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - -} /* end of bssUpdateBeaconContent() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send the Beacon Frame(for BOW) or Probe Response Frame according to the given -* Destination Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eNetTypeIndex Specify which network reply the Probe Response. -* @param[in] pucDestAddr Pointer to the Destination Address to reply -* @param[in] u4ControlFlags Control flags for information on Probe Response. -* -* @retval WLAN_STATUS_RESOURCE No available resources to send frame. -* @retval WLAN_STATUS_SUCCESS Success. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssSendBeaconProbeResponse ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN PUINT_8 pucDestAddr, - IN UINT_32 u4ControlFlags - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - UINT_16 u2EstimatedFixedIELen; - UINT_16 u2EstimatedExtraIELen; - P_APPEND_VAR_IE_ENTRY_T prIeArray = NULL; - UINT_32 u4IeArraySize = 0; - UINT_32 i; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - - if (!pucDestAddr) { // For Beacon - prIeArray = &txBcnIETable[0]; - u4IeArraySize = sizeof(txBcnIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - else { - prIeArray = &txProbRspIETable[0]; - u4IeArraySize = sizeof(txProbRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - } - - - //4 <1> Allocate a PKT_INFO_T for Beacon /Probe Response Frame - /* Allocate a MSDU_INFO_T */ - - /* Init with MGMT Header Length + Length of Fixed Fields + Common IE Fields */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_IBSS_PARAMETER_SET) + \ - (ELEM_HDR_LEN + (3 + MAX_LEN_TIM_PARTIAL_BMP)); - - /* + Extra IE Length */ - u2EstimatedExtraIELen = 0; - - for (i = 0; i < u4IeArraySize; i++) { - u2EstimatedFixedIELen = prIeArray[i].u2EstimatedFixedIELen; - - if (u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += u2EstimatedFixedIELen; - } - else { - ASSERT(prIeArray[i].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16) - prIeArray[i].pfnCalculateVariableIELen(prAdapter, eNetTypeIndex, NULL); - } - } - - u2EstimatedFrameLen += u2EstimatedExtraIELen; - - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(BSS, WARN, ("No PKT_INFO_T for sending %s.\n", - ((!pucDestAddr)?"Beacon":"Probe Response"))); - return WLAN_STATUS_RESOURCES; - } - - - //4 <2> Compose Beacon/Probe Response frame header and fixed fields in MSDU_INfO_T. - /* Compose Header and Fixed Field */ -#if CFG_ENABLE_WIFI_DIRECT - if (u4ControlFlags & BSS_PROBE_RESP_USE_P2P_DEV_ADDR) { - if(prAdapter->fgIsP2PRegistered) { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prAdapter->rWifiVar.aucDeviceAddress, - prAdapter->rWifiVar.aucDeviceAddress, - DOT11_BEACON_PERIOD_DEFAULT, - (prBssInfo->u2CapInfo & ~(CAP_INFO_ESS | CAP_INFO_IBSS))); - } - } - else -#endif /* CFG_ENABLE_WIFI_DIRECT */ - { - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - pucDestAddr, - prBssInfo->aucOwnMacAddr, - prBssInfo->aucBSSID, - prBssInfo->u2BeaconInterval, - prBssInfo->u2CapInfo); - } - - - //4 <3> Update information of MSDU_INFO_T - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = (UINT_8)eNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + - TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - - - //4 <4> Compose the frame body's Common IEs of the Beacon/ProbeResp frame. - bssBuildBeaconProbeRespFrameCommonIEs(prMsduInfo, prBssInfo, pucDestAddr); - - - //4 <5> Compose IEs in MSDU_INFO_T - - /* Append IE */ - for (i = 0; i < u4IeArraySize; i++) { - if (prIeArray[i].pfnAppendIE) { - prIeArray[i].pfnAppendIE(prAdapter, prMsduInfo); - } - } - - /* TODO(Kevin): Also release the unused tail room of the composed MMPDU */ - - //4 <6> Inform TXM to send this Beacon /Probe Response frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return WLAN_STATUS_SUCCESS; - -} /* end of bssSendBeaconProbeResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - UINT_8 aucBCBSSID[] = BC_BSSID; - BOOLEAN fgIsBcBssid; - BOOLEAN fgReplyProbeResp; - UINT_32 u4CtrlFlagsForProbeResp = 0; - ENUM_BAND_T eBand; - UINT_8 ucHwChannelNum; - - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get BSSID - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - if (EQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID)) { - fgIsBcBssid = TRUE; - } - else { - fgIsBcBssid = FALSE; - } - - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if ((!fgIsBcBssid) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - continue; - } - - eBand = HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr); - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - - if(prBssInfo->eBand != eBand) { - continue; - } - - if(prBssInfo->ucPrimaryChannel != ucHwChannelNum) { - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - -#if CFG_SUPPORT_ADHOC - fgReplyProbeResp = aisValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); -#endif - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex)) { - - fgReplyProbeResp = p2pFuncValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - fgReplyProbeResp = bowValidateProbeReq(prAdapter, prSwRfb, &u4CtrlFlagsForProbeResp); - } -#endif - - if (fgReplyProbeResp) { - if(nicTxGetFreeCmdCount(prAdapter) > (CFG_TX_MAX_CMD_PKT_NUM/2) ){ - /* Resource margin is enough */ - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr, u4CtrlFlagsForProbeResp); - } - } - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ - - -#if 0 // NOTE(Kevin): condition check should move to P2P_FSM.c -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Probe Request Frame and then send -* back the corresponding Probe Response Frame if the specified conditions -* were matched. -* -* @param[in] prSwRfb Pointer to SW RFB data structure. -* -* @retval WLAN_STATUS_SUCCESS Always return success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -bssProcessProbeRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr; - P_BSS_INFO_T prBssInfo; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - UINT_8 aucBCBSSID[] = BC_BSSID; - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex; - BOOLEAN fgReplyProbeResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOLEAN fgP2PTargetDeviceFound; - UINT_8 aucP2PWildcardSSID[] = P2P_WILDCARD_SSID; -#endif - - ASSERT(prSwRfb); - - //4 <1> Parse Probe Req and Get SSID IE ptr - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - u2IELength = prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen; - pucIE = (PUINT_8)((UINT_32)prSwRfb->pvHeader + prSwRfb->u2HeaderLen); - - prIeSsid = (P_IE_SSID_T)NULL; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - prIeSsid = (P_IE_SSID_T)pucIE; - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - // if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SUP_RATES) { - if (IE_LEN(pucIE) <= RATE_NUM) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - break; - -#if CFG_ENABLE_WIFI_DIRECT - // TODO: P2P IE & WCS IE parsing for P2P. - case ELEM_ID_P2P: - - break; -#endif - - /* no default */ - } - } /* end of IE_FOR_EACH */ - - //4 <2> Check network conditions before reply Probe Response Frame (Consider Concurrent) - for (eNetTypeIndex = NETWORK_TYPE_AIS_INDEX; eNetTypeIndex < NETWORK_TYPE_INDEX_NUM; eNetTypeIndex++) { - - if (!IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - continue; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (UNEQUAL_MAC_ADDR(aucBCBSSID, prMgtHdr->aucBSSID) && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prMgtHdr->aucBSSID)) { - /* BSSID not Wildcard BSSID. */ - continue; - } - - fgReplyProbeResp = FALSE; - - if (NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - - /* TODO(Kevin): Check if we are IBSS Master. */ - if (TRUE) { - - if (prIeSsid) { - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } - } - } -#if CFG_ENABLE_WIFI_DIRECT - else if (NETWORK_TYPE_P2P_INDEX == eNetTypeIndex) { - - // TODO(Kevin): Move following lines to p2p_fsm.c - - if ((prIeSsid) && - ((prIeSsid->ucLength == BC_SSID_LEN) || - (EQUAL_SSID(aucP2PWildcardSSID, - P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, - prIeSsid->ucLength)))) { -// if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prMgtHdr->aucSrcAddr, pucIE, u2IELength)) { - if (p2pFsmRunEventRxProbeRequestFrame(prAdapter, prSwRfb)) { - /* Extand channel request time & cancel scan request. */ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - // TODO: RX probe request may not caused by LISTEN state. - // TODO: It can be GO. - /* Generally speaking, cancel a non-exist scan request is fine. - * We can check P2P FSM here for only LISTEN state. - */ - - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg; - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - /* Abort JOIN process. */ - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - ASSERT(0); // Can't abort SCN FSM - continue; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucSeqNum = prP2pFsmInfo->ucSeqNumOfScnMsg; - prScanCancelMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->fgIsChannelExt = TRUE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanCancelMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - /* 1. Probe Request without SSID. - * 2. Probe Request with SSID not Wildcard SSID & not P2P Wildcard SSID. - */ - continue; - } - -#if 0 // Frog - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_LISTEN) { - // P2P 2.4.1 - P2P Devices shall not respond to Probe Request frames which only contain 11b rates only. - if (prIeSupportedRate || prIeExtSupportedRate) { - UINT_16 u2OperationalRateSet, u2BSSBasicRateSet; - BOOLEAN fgIsUnknownBssBasicRate; - - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &u2OperationalRateSet, - &u2BSSBasicRateSet, /* Ignore any Basic Bit */ - &fgIsUnknownBssBasicRate); - - if (u2OperationalRateSet & ~RATE_SET_HR_DSSS) { - continue; - } - } - } - - // TODO: Check channel time before first check point to: - /* If Target device is selected: - * 1. Send XXXX request frame. - * else - * 1. Send Probe Response frame. - */ - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): During PROVISION state, can we reply Probe Response ? */ - - /* TODO(Kevin): - * If we are GO, accept legacy client --> accept Wildcard SSID - * If we are in Listen State, accept only P2P Device --> check P2P IE and WPS IE - */ - if (TRUE /* We are GO */) { - if (prIeSsid) { - UINT_8 aucSSID[]=P2P_WILDCARD_SSID; - - if ((prIeSsid->ucLength == BC_SSID_LEN) || /* WILDCARD SSID */ - EQUAL_SSID(prBssInfo->aucSSID, prBssInfo->ucSSIDLen, - prIeSsid->aucSSID, prIeSsid->ucLength) || - EQUAL_SSID(aucSSID, P2P_WILDCARD_SSID_LEN, - prIeSsid->aucSSID, prIeSsid->ucLength)) { - fgReplyProbeResp = TRUE; - } - } - } -// else if (FALSE /* We are in Listen State */) { -// } - - /* TODO(Kevin): Check P2P IE and WPS IE */ - } -#endif - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (NETWORK_TYPE_BOW_INDEX == eNetTypeIndex) { - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* TODO(Kevin): TBD */ - } - } -#endif - else { - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - } - - if (fgReplyProbeResp) { - bssSendBeaconProbeResponse(prAdapter, eNetTypeIndex, prMgtHdr->aucSrcAddr); - } - - } - - return WLAN_STATUS_SUCCESS; - -} /* end of bssProcessProbeRequest() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to clear the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssClearClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prPeerStaRec; - - LINK_FOR_EACH_ENTRY(prPeerStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - cnmStaRecChangeState(prAdapter, prPeerStaRec, STA_STATE_1); - } - - LINK_INITIALIZE(prStaRecOfClientList); - } - - return; -} /* end of bssClearClientList() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Add a STA_RECORD_T to the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Given related BSS_INFO_T. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssAddStaRecToClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - DBGLOG(BSS, WARN, ("Current Client List already contains that STA_RECORD_T["MACSTR"]\n", - MAC2STR(prStaRec->aucMacAddr))); - return; - } - } - } - - LINK_INSERT_TAIL(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; -} /* end of bssAddStaRecToClientList() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to Remove a STA_RECORD_T from the client list for AdHoc or AP Mode -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssRemoveStaRecFromClientList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - P_LINK_T prStaRecOfClientList; - - - ASSERT(prBssInfo); - - prStaRecOfClientList = &prBssInfo->rStaRecOfClientList; - - if (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_FOR_EACH_ENTRY(prCurrStaRec, prStaRecOfClientList, rLinkEntry, STA_RECORD_T) { - - if (prCurrStaRec == prStaRec) { - - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prStaRec->rLinkEntry); - - return; - } - } - } - - DBGLOG(BSS, INFO, ("Current Client List didn't contain that STA_RECORD_T["MACSTR"] before removing.\n", - MAC2STR(prStaRec->aucMacAddr))); - - return; -} /* end of bssRemoveStaRecFromClientList() */ -#endif /* CFG_SUPPORT_ADHOC || CFG_SUPPORT_AAA */ - - -#if CFG_SUPPORT_ADHOC -/*----------------------------------------------------------------------------*/ -/* Routines for IBSS(AdHoc) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to process Beacons from current Ad-Hoc network peers. -* We also process Beacons from other Ad-Hoc network during SCAN. If it has -* the same SSID and we'll decide to merge into it if it has a larger TSF. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssProcessMatchedBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 ucRCPI - ) -{ - P_STA_RECORD_T prStaRec = NULL; - - BOOLEAN fgIsCheckCapability = FALSE; - BOOLEAN fgIsCheckTSF = FALSE; - BOOLEAN fgIsGoingMerging = FALSE; - BOOLEAN fgIsSameBSSID; - - - ASSERT(prBssInfo); - ASSERT(prBssDesc); - - //4 <1> Process IBSS Beacon only after we create or merge with other IBSS. - if (!prBssInfo->fgIsBeaconActivated) { - return; - } - - //4 <2> Get the STA_RECORD_T of TA. - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prBssDesc->aucSrcAddr); - - fgIsSameBSSID = UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID) ? FALSE : TRUE; - - - //4 <3> IBSS Merge Decision Flow for Processing Beacon. - if (fgIsSameBSSID) { - - /* Same BSSID: - * Case I. This is a new TA and it has decide to merged with us. - * a) If fgIsMerging == FALSE - we will send msg to notify AIS. - * b) If fgIsMerging == TRUE - already notify AIS. - * Case II. This is an old TA and we've already merged together. - */ - if (!prStaRec) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - - } - else { - - ASSERT((prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) && - IS_ADHOC_STA(prStaRec)); - - if (prStaRec->ucStaState != STA_STATE_3) { - - if (!prStaRec->fgIsMerging) { - - /* For Case I - Check this IBSS's capability first before adding this Sta Record. */ - fgIsCheckCapability = TRUE; - - /* If check is passed, then we perform merging with this new IBSS */ - fgIsGoingMerging = TRUE; - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - } - else { - /* For Case II - Update rExpirationTime of Sta Record */ - GET_CURRENT_SYSTIME(&prStaRec->rUpdateTime); - } - - } - } - else { - - /* Unequal BSSID: - * Case III. This is a new TA and we need to compare the TSF and get the winner. - * Case IV. This is an old TA and it merge into a new IBSS before we do the same thing. - * We need to compare the TSF to get the winner. - * Case V. This is an old TA and it restart a new IBSS. We also need to - * compare the TSF to get the winner. - */ - - /* For Case III, IV & V - We'll always check this new IBSS's capability first - * before merging into new IBSS. - */ - fgIsCheckCapability = TRUE; - - /* If check is passed, we need to perform TSF check to decide the major BSSID */ - fgIsCheckTSF = TRUE; - - /* For Case IV & V - We won't update rExpirationTime of Sta Record */ - } - - - //4 <7> Check this BSS_DESC_T's capability. - if (fgIsCheckCapability) { - BOOLEAN fgIsCapabilityMatched = FALSE; - - do { - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unsupported Phy.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Unknown Basic Rate.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - - break; - } - - fgIsCapabilityMatched = TRUE; - } - while (FALSE); - - if (!fgIsCapabilityMatched) { - - if (prStaRec) { - /* For Case II - We merge this STA_RECORD in RX Path. - * Case IV & V - They change their BSSID after we merge with them. - */ - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Ignore Peer MAC: "MACSTR" - Capability is not matched.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - return; - } - - DBGLOG(BSS, LOUD, - ("IBSS MERGE: Peer MAC: "MACSTR" - Check capability was passed.\n", - MAC2STR(prBssDesc->aucSrcAddr))); - } - - - if (fgIsCheckTSF) { -#if CFG_SLT_SUPPORT - fgIsGoingMerging = TRUE; -#else - if (prBssDesc->fgIsLargerTSF) { - fgIsGoingMerging = TRUE; - } - else { - return; - } -#endif - } - - - if (fgIsGoingMerging) { - P_MSG_AIS_IBSS_PEER_FOUND_T prAisIbssPeerFoundMsg; - - - //4 <1> We will merge with to this BSS immediately. - prBssDesc->fgIsConnecting = TRUE; - prBssDesc->fgIsConnected = FALSE; - - //4 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - STA_TYPE_ADHOC_PEER, - NETWORK_TYPE_AIS_INDEX, - prBssDesc); - - if(!prStaRec) { - // no memory ? - return; - } - - prStaRec->fgIsMerging = TRUE; - - /* update RCPI */ - prStaRec->ucRCPI = ucRCPI; - - //4 <3> Send Merge Msg to CNM to obtain the channel privilege. - prAisIbssPeerFoundMsg = (P_MSG_AIS_IBSS_PEER_FOUND_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_IBSS_PEER_FOUND_T)); - - if (!prAisIbssPeerFoundMsg) { - - ASSERT(0); // Can't send Merge Msg - return; - } - - prAisIbssPeerFoundMsg->rMsgHdr.eMsgId = MID_SCN_AIS_FOUND_IBSS; - prAisIbssPeerFoundMsg->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_AIS_INDEX; - prAisIbssPeerFoundMsg->prStaRec = prStaRec; - - /* Inform AIS to do STATE TRANSITION - * For Case I - If AIS in IBSS_ALONE, let it jump to NORMAL_TR after we know the new member. - * For Case III, IV - Now this new BSSID wins the TSF, follow it. - */ - if (fgIsSameBSSID) { - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; - } - else { -#if CFG_SLT_SUPPORT - prAisIbssPeerFoundMsg->fgIsMergeIn = TRUE; -#else - prAisIbssPeerFoundMsg->fgIsMergeIn = (prBssDesc->fgIsLargerTSF) ? FALSE: TRUE; -#endif - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisIbssPeerFoundMsg, - MSG_SEND_METHOD_BUF); - - } - - return; -} /* end of ibssProcessMatchedBeacon() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the Capability for Ad-Hoc to decide if we are -* able to merge with(same capability). -* -* @param[in] prBSSDesc Pointer to the BSS Descriptor. -* -* @retval WLAN_STATUS_FAILURE Can't pass the check of Capability. -* @retval WLAN_STATUS_SUCCESS Pass the check of Capability. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -ibssCheckCapabilityForAdHocMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - - - ASSERT(prBssDesc); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - do { - //4 <1> Check the BSS Basic Rate Set for current AdHoc Mode - if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11B) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_HR_DSSS)) { - break; - } - else if ((prConnSettings->eAdHocMode == AD_HOC_MODE_11A) && - (prBssDesc->u2BSSBasicRateSet & ~RATE_SET_OFDM)) { - break; - } - - //4 <2> Check the Short Slot Time. -#if 0 // Do not check ShortSlotTime until Wi-Fi define such policy - if (prConnSettings->eAdHocMode == AD_HOC_MODE_11G) { - if (((prConnSettings->fgIsShortSlotTimeOptionEnable) && - !(prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) || - (!(prConnSettings->fgIsShortSlotTimeOptionEnable) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME))) { - break; - } - } -#endif - - //4 <3> Check the ATIM window setting. - if (prBssDesc->u2ATIMWindow) { - DBGLOG(BSS, INFO, ("AdHoc PS was not supported(ATIM Window: %d)\n", - prBssDesc->u2ATIMWindow)); - break; - } - -#if CFG_RSN_MIGRATION - //4 <4> Check the Security setting. - if (!rsnPerformPolicySelection(prAdapter, prBssDesc)) { - break; - } -#endif - - rStatus = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - return rStatus; - -} /* end of ibssCheckCapabilityForAdHocMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for IBSS Mode. -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -ibssInitForAdHoc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLowestBasicRateIndex; - UINT_8 aucBSSID[MAC_ADDR_LEN]; - PUINT_16 pu2BSSID = (PUINT_16)&aucBSSID[0]; - UINT_32 i; - - - ASSERT(prBssInfo); - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_IBSS); - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTAdHocModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - - //4 <2> Setup BSSID - if (!prBssInfo->fgHoldSameBssidForIBSS) { - - for (i = 0; i < sizeof(aucBSSID)/sizeof(UINT_16); i++) { - pu2BSSID[i] = (UINT_16)(kalRandomNumber() & 0xFFFF); - } - - aucBSSID[0] &= ~0x01; // 7.1.3.3.3 - The individual/group bit of the address is set to 0. - aucBSSID[0] |= 0x02; // 7.1.3.3.3 - The universal/local bit of the address is set to 1. - - COPY_MAC_ADDR(prBssInfo->aucBSSID, aucBSSID); - } - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - // 7.3.1.4 For IBSS, the Short Slot Time subfield shall be set to 0. - prBssInfo->fgUseShortSlotTime = FALSE; /* Set to FALSE for AdHoc */ - - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_IBSS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - return; -} /* end of ibssInitForAdHoc() */ - -#endif /* CFG_SUPPORT_ADHOC */ - - -#if CFG_SUPPORT_AAA - -/*----------------------------------------------------------------------------*/ -/* Routines for BSS(AP) only */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial the BSS_INFO_T for AP Mode. -* -* @param[in] prBssInfo Given related BSS_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssInitForAP ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN BOOLEAN fgIsRateUpdate - ) -{ - UINT_8 ucLowestBasicRateIndex; - - P_AC_QUE_PARMS_T prACQueParms; - - ENUM_WMM_ACI_T eAci; - - UINT_8 auCWminLog2ForBcast[WMM_AC_INDEX_NUM] = { 4/*BE*/, 4 /*BK*/, 3/*VO*/, 2/*VI*/}; - UINT_8 auCWmaxLog2ForBcast[WMM_AC_INDEX_NUM] = { 10, 10, 4, 3}; - UINT_8 auAifsForBcast[WMM_AC_INDEX_NUM] = { 3, 7, 2, 2 }; - UINT_8 auTxopForBcast[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - UINT_8 auCWminLog2[WMM_AC_INDEX_NUM] = { 4 /*BE*/, 4 /*BK*/, 3 /*VO*/, 2 /*VI*/}; - UINT_8 auCWmaxLog2[WMM_AC_INDEX_NUM] = { 7, 10, 4, 3}; - UINT_8 auAifs[WMM_AC_INDEX_NUM] = { 3, 7, 1, 1 }; - UINT_8 auTxop[WMM_AC_INDEX_NUM] = { 0, 0, 94, 47 }; /* If the AP is OFDM */ - - DEBUGFUNC("bssInitForAP"); - DBGLOG(BSS, LOUD,("\n")); - - ASSERT(prBssInfo); - ASSERT((prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || (prBssInfo->eCurrentOPMode == OP_MODE_BOW)); - -#if 0 - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = CONFIG_BW_20M; -#endif - - - //4 <1> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (fgIsRateUpdate) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <2> Setup BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssInfo->aucOwnMacAddr); - - - //4 <3> Setup Capability - Short Preamble - if (rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].fgIsShortPreambleOptionImplemented && - ((prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - (prAdapter->rWifiVar.ePreambleType == PREAMBLE_TYPE_AUTO)) ) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - prBssInfo->fgUseShortPreamble = TRUE; - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - - - //4 <4> Setup Capability - Short Slot Time - prBssInfo->fgUseShortSlotTime = TRUE; - - //4 <5> Compoase Capability - prBssInfo->u2CapInfo = CAP_INFO_ESS; - - if (prBssInfo->fgIsProtection) { - prBssInfo->u2CapInfo |= CAP_INFO_PRIVACY; - } - - if (prBssInfo->fgIsShortPreambleAllowed) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_PREAMBLE; - } - - if (prBssInfo->fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - - - //4 <6> Find Lowest Basic Rate Index for default TX Rate of MMPDU - rateGetLowestRateIndexFromRateSet(prBssInfo->u2BSSBasicRateSet, &ucLowestBasicRateIndex); - - prBssInfo->ucHwDefaultFixedRateCode = - aucRateIndex2RateCode[PREAMBLE_DEFAULT_LONG_NONE][ucLowestBasicRateIndex]; - - - //4 <7> Fill the EDCA - - prACQueParms = prBssInfo->arACQueParmsForBcast; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifsForBcast[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2ForBcast[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxopForBcast[eAci]; - - prBssInfo->aucCWminLog2ForBcast[eAci] = auCWminLog2ForBcast[eAci] ; /* used to send WMM IE */ - prBssInfo->aucCWmaxLog2ForBcast[eAci] = auCWmaxLog2ForBcast[eAci] ; - - DBGLOG(BSS, INFO, ("Bcast: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - - } - - prACQueParms = prBssInfo->arACQueParms; - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prACQueParms[eAci].fgIsACMSet = FALSE; - prACQueParms[eAci].u2Aifsn = auAifs[eAci]; - prACQueParms[eAci].u2CWmin = BIT(auCWminLog2[eAci])-1; - prACQueParms[eAci].u2CWmax = BIT(auCWmaxLog2[eAci])-1; - prACQueParms[eAci].u2TxopLimit = auTxop[eAci]; - - DBGLOG(BSS, INFO, ("eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prACQueParms[eAci].fgIsACMSet , - prACQueParms[eAci].u2Aifsn, - prACQueParms[eAci].u2CWmin, - prACQueParms[eAci].u2CWmax, - prACQueParms[eAci].u2TxopLimit)); - } - - /* Note: Caller should update the EDCA setting to HW by nicQmUpdateWmmParms() it there is no AIS network */ - /* Note: In E2, only 4 HW queues. The the Edca parameters should be folow by AIS network */ - /* Note: In E3, 8 HW queues. the Wmm parameters should be updated to right queues according to BSS */ - - - return; -} /* end of bssInitForAP() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update DTIM Count -* -* @param[in] eNetTypeIndex Specify which network to update -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssUpdateDTIMCount ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(eNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - // Setup DTIM Count for next TBTT. - if (prBssInfo->ucDTIMCount > 0) { - prBssInfo->ucDTIMCount--; - } - else { - - ASSERT(prBssInfo->ucDTIMPeriod > 0); - - prBssInfo->ucDTIMCount = prBssInfo->ucDTIMPeriod - 1; - } - } - - return; -} /* end of bssUpdateDTIMIE() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to set the Virtual Bitmap in TIM Information Elements -* -* @param[in] prBssInfo Pointer to the BSS_INFO_T. -* @param[in] u2AssocId The association id to set in Virtual Bitmap. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -bssSetTIMBitmap ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN UINT_16 u2AssocId - ) -{ - - ASSERT(prBssInfo); - - if (prBssInfo->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - - - prP2pSpecificBssInfo = &(prAdapter->rWifiVar.rP2pSpecificBssInfo); - - /* Use Association ID == 0 for BMCAST indication */ - if (u2AssocId == 0) { - - prP2pSpecificBssInfo->ucBitmapCtrl |= (UINT_8)BIT(0); - } - else { - PUINT_8 pucPartialVirtualBitmap; - UINT_8 ucBitmapToSet; - - - pucPartialVirtualBitmap = &prP2pSpecificBssInfo->aucPartialVirtualBitmap[(u2AssocId >> 3)]; // (u2AssocId / 8) - ucBitmapToSet = (UINT_8) BIT((u2AssocId % 8)); - - if (*pucPartialVirtualBitmap & ucBitmapToSet) { - /* The virtual bitmap has been set */ - return; - } - - *pucPartialVirtualBitmap |= ucBitmapToSet; - - // Update u2SmallestAID and u2LargestAID - if ((u2AssocId < prP2pSpecificBssInfo->u2SmallestAID) || - (prP2pSpecificBssInfo->u2SmallestAID == 0)) { - prP2pSpecificBssInfo->u2SmallestAID = u2AssocId; - } - - if ((u2AssocId > prP2pSpecificBssInfo->u2LargestAID) || - (prP2pSpecificBssInfo->u2LargestAID == 0)) { - prP2pSpecificBssInfo->u2LargestAID = u2AssocId; - } - } - } - - return; -} /* end of bssSetTIMBitmap() */ -#endif - -#endif /* CFG_SUPPORT_AAA */ - - -VOID -bssCreateStaRecFromAuth ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - -VOID -bssUpdateStaRecFromAssocReq ( - IN P_ADAPTER_T prAdapter - ) -{ - -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm.c deleted file mode 100755 index be1e2d99b654..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm.c +++ /dev/null @@ -1,813 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/cnm.c#1 $ -*/ - -/*! \file "cnm.c" - \brief Module of Concurrent Network Management - - Module of Concurrent Network Management -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cnm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Fix possible wrong message when P2P is unregistered - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 01 2011 cm.chang - * [WCXRP00001077] [All Wi-Fi][Driver] Fix wrong preferred channel for AP and BOW - * Only check AIS channel for P2P and BOW - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Extension channel of some 5G AP will not follow regulation requirement - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * . - * - * 09 01 2011 cm.chang - * [WCXRP00000937] [MT6620 Wi-Fi][Driver][FW] cnm.c line #848 assert when doing monkey test - * Print message only in Linux platform for monkey testing - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Limit AIS to fixed channel same with BOW - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Check if P2P network index is Tethering AP - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 02 17 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * When P2P registried, invoke BOW deactivate function - * - * 01 12 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Provide function to decide if BSS can be activated or not - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix wrong message ID for channel grant to requester - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set 20/40M bandwidth of AP HT OP before association process - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 21 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support TCP/UDP/IP Checksum offload feature - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add a new function to send abort message - * - * 04 27 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * BMC mac address shall be ignored in basic config command - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support change of MAC address by host command - * - * 04 16 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the wpa-none for ibss beacon. - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix bug for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 25 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * use the Rx0 dor event indicate. - * - * 02 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support partial part about cmd basic configuration - * - * Dec 10 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove conditional compiling FPGA_V5 - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add function cnmFsmEventInit() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmInit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initialize variables in CNM_INFO_T. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmUninit ( - P_ADAPTER_T prAdapter - ) -{ - return; -} /* end of cnmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before handle the message from other module, it need to obtain -* the Channel privilege from Channel Manager -* -* @param[in] prMsgHdr The message need to be handled. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrRequestPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_REQ_T prMsgChReq; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChReq = (P_MSG_CH_REQ_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChReq: fail to get buf (net=%d, token=%d)\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } -#if 0 // p2p have timing issue, we must ensrure print less log - DBGLOG(CNM, INFO, ("ChReq net=%d token=%d b=%d c=%d s=%d\n", - prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID, - prMsgChReq->eRfBand, prMsgChReq->ucPrimaryChannel, - prMsgChReq->eRfSco)); -#endif - prCmdBody->ucNetTypeIndex = prMsgChReq->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChReq->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_REQ; /* Request */ - prCmdBody->ucPrimaryChannel = prMsgChReq->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prMsgChReq->eRfSco; - prCmdBody->ucRfBand = (UINT_8) prMsgChReq->eRfBand; - prCmdBody->ucReqType = (UINT_8) prMsgChReq->eReqType; - prCmdBody->ucReserved = 0; - prCmdBody->u4MaxInterval= prMsgChReq->u4MaxInterval; - COPY_MAC_ADDR(prCmdBody->aucBSSID, prMsgChReq->aucBSSID); - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChReq with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrRequestPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Before deliver the message to other module, it need to release -* the Channel privilege to Channel Manager. -* -* @param[in] prMsgHdr The message need to be delivered -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrAbortPrivilege ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_CH_ABORT_T prMsgChAbort; - P_CMD_CH_PRIVILEGE_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prMsgChAbort = (P_MSG_CH_ABORT_T) prMsgHdr; - - prCmdBody = (P_CMD_CH_PRIVILEGE_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(CNM, ERROR, ("ChAbort: fail to get buf (net=%d, token=%d)\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); - - cnmMemFree(prAdapter, prMsgHdr); - return; - } -#if 0 - DBGLOG(CNM, INFO, ("ChAbort net=%d token=%d\n", - prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID)); -#endif - prCmdBody->ucNetTypeIndex = prMsgChAbort->ucNetTypeIndex; - prCmdBody->ucTokenID = prMsgChAbort->ucTokenID; - prCmdBody->ucAction = CMD_CH_ACTION_ABORT; /* Abort */ - - ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - /* For monkey testing 20110901 */ - if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - DBGLOG(CNM, ERROR, ("CNM: ChAbort with wrong netIdx=%d\n\n", - prCmdBody->ucNetTypeIndex)); - } - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_CH_PRIVILEGE, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); - cnmMemFree(prAdapter, prMsgHdr); - - return; -} /* end of cnmChMngrAbortPrivilege() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmChMngrHandleChEvent ( - P_ADAPTER_T prAdapter, - P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_CH_PRIVILEGE_T prEventBody; - P_MSG_CH_GRANT_T prChResp; - - ASSERT(prAdapter); - ASSERT(prEvent); - - prEventBody = (P_EVENT_CH_PRIVILEGE_T) (prEvent->aucBuffer); - prChResp = (P_MSG_CH_GRANT_T) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_GRANT_T)); - ASSERT(prChResp); - - /* To do: exception handle */ - if (!prChResp) { - DBGLOG(CNM, ERROR, ("ChGrant: fail to get buf (net=%d, token=%d)\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID)); - - return; - } - DBGLOG(CNM, INFO, ("ChGrant net=%d token=%d ch=%d sco=%d\n", - prEventBody->ucNetTypeIndex, prEventBody->ucTokenID, - prEventBody->ucPrimaryChannel, prEventBody->ucRfSco)); - ASSERT(prEventBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventBody->ucStatus == EVENT_CH_STATUS_GRANT); - - /* Decide message ID based on network and response status */ - if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_AIS_CH_GRANT; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (prEventBody->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - prChResp->rMsgHdr.eMsgId = MID_CNM_P2P_CH_GRANT; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - prChResp->rMsgHdr.eMsgId = MID_CNM_BOW_CH_GRANT; - } -#endif - else { - cnmMemFree(prAdapter, prChResp); - return; - } - - prChResp->ucNetTypeIndex = prEventBody->ucNetTypeIndex; - prChResp->ucTokenID = prEventBody->ucTokenID; - prChResp->ucPrimaryChannel = prEventBody->ucPrimaryChannel; - prChResp->eRfSco = (ENUM_CHNL_EXT_T) prEventBody->ucRfSco; - prChResp->eRfBand = (ENUM_BAND_T) prEventBody->ucRfBand; - prChResp->eReqType = (ENUM_CH_REQ_TYPE_T) prEventBody->ucReqType; - prChResp->u4GrantInterval = prEventBody->u4GrantInterval; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prChResp, - MSG_SEND_METHOD_BUF); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked for P2P or BOW networks -* -* @param (none) -* -* @return TRUE: suggest to adopt the returned preferred channel -* FALSE: No suggestion. Caller should adopt its preference -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmPreferredChannel ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel, - P_ENUM_CHNL_EXT_T prBssSCO - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prBand); - ASSERT(pucPrimaryChannel); - ASSERT(prBssSCO); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - *prBssSCO = prBssInfo->eBssSCO; - - return TRUE; - } - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: available channel is limited to return value -* FALSE: no limited -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisInfraChannelFixed ( - P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prBand, - PUINT_8 pucPrimaryChannel - ) -{ -#if CFG_ENABLE_WIFI_DIRECT ||(CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL) - P_BSS_INFO_T prBssInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - ASSERT(prAdapter->fgIsP2PRegistered); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - *prBand = prBssInfo->eBand; - *pucPrimaryChannel = prBssInfo->ucPrimaryChannel; - - return TRUE; - } -#endif - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmAisInfraConnectNotify ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_BT_OVER_WIFI - P_BSS_INFO_T prAisBssInfo, prBowBssInfo; - - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prBowBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - if (RLM_NET_PARAM_VALID(prAisBssInfo) && RLM_NET_PARAM_VALID(prBowBssInfo)){ - if (prAisBssInfo->eBand != prBowBssInfo->eBand || - prAisBssInfo->ucPrimaryChannel != prBowBssInfo->ucPrimaryChannel) { - - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmAisIbssIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmP2PIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_BT_OVER_WIFI - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) { - /* Notify BOW to do deactivation */ - bowNotifyAllLinkDisconnected(prAdapter); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBowIsPermitted ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - if (IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - return FALSE; - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param (none) -* -* @return TRUE: permitted -* FALSE: Not permitted -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -cnmBss40mBwPermitted ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 i; - - /* Note: To support real-time decision instead of current activated-time, - * the STA roaming case shall be considered about synchronization - * problem. Another variable fgAssoc40mBwAllowed is added to - * represent HT capability when association - */ - for (i = 0; i < NETWORK_TYPE_INDEX_NUM; i++) { - if (i != (UINT_8) eNetTypeIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[i]; - - if (IS_BSS_ACTIVE(prBssInfo) && (prBssInfo->fg40mBwAllowed || - prBssInfo->fgAssoc40mBwAllowed)) { - return FALSE; - } - } - } - - return TRUE; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm_mem.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm_mem.c deleted file mode 100755 index 12302ed9f221..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm_mem.c +++ /dev/null @@ -1,1337 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/cnm_mem.c#1 $ -*/ - -/*! \file "cnm_mem.c" - \brief This file contain the management function of packet buffers and - generic memory alloc/free functioin for mailbox message. - - A data packet has a fixed size of buffer, but a management - packet can be equipped with a variable size of buffer. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cnm_mem.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 14 2012 wh.su - * [WCXRP00001173] [MT6620 Wi-Fi][Driver] Adding the ICS Tethering WPA2-PSK supporting - * Add code from 2.2 - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * initialize fgNeedResp. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 11 29 2010 cm.chang - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * Sync RCPI of STA_REC to FW as reference of initial TX rate - * - * 11 25 2010 yuche.tsai - * NULL - * Update SLT Function for QoS Support and not be affected by fixed rate function. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 13 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when cmd buffer is not available - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 07 07 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support state of STA record change from 1 to 1 - * - * 07 05 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Fix correct structure size in cnmStaSendDeactivateCmd() - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * spin lock target revised - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change inner loop index from i to k. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 05 31 2010 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support checking of duplicated buffer free - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 28 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Move define of STA_REC_NUM to config.h and rename to CFG_STA_REC_NUM - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 28 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Modified some MQM-related data structures (SN counter, TX/RX BA table) - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Added new TX/RX BA tables in STA_REC - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Notify MQM, TXM, and RXM upon disconnection . - * - * 04 26 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Call mqm, txm, rxm functions upon disconnection - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support - * * * * * * * * * * and will send Null frame to diagnose connection - * - * 04 09 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * [BORA00000644] WiFi phase 4 integration - * * Added per-TID SN cache in STA_REC - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * move the wlan table alloc / free to change state function. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support power control - * - * 03 03 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Initialize StaRec->arStaWaitQueue - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add debug message when no available pkt buffer - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Fixed STA_REC initialization bug: prStaRec->au2CachedSeqCtrl[k] - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsWmmSupported in STA_RECORD_T. - * - * 02 26 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added fgIsUapsdSupported in STA_RECORD_T - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * add support of Driver STA_RECORD_T activation - * - * 02 13 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added arTspecTable in STA_REC for TSPEC management - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable mgmt buffer debug by default - * - * 02 12 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Added BUFFER_SOURCE_BCN - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 cp.wu - * [BORA00000368]Integrate HIF part into BORA - * 1) separate wifi_var_emu.c/.h from wifi_var.c/.h - * * * * * * * * * 2) eliminate HIF_EMULATION code sections appeared in wifi_var/cnm_mem - * * * * * * * * * 3) use cnmMemAlloc() instead to allocate SRAM buffer - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * MQM: BA handling - * * * * * * * TXM: Macros updates - * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 24 2009 yarco.yang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * 12 21 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support several data buffer banks. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * .For new FPGA memory size - * - * Dec 9 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed DBGPRINT - * - * Dec 9 2009 mtk02752 - * [BORA00000368] Integrate HIF part into BORA - * add cnmDataPktFree() for emulation loopback purpose - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix warning of null pointer - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add cnmGetStaRecByAddress() and add fgIsInUse flag in STA_RECORD_T - * - * Nov 23 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Assign ucBufferSource in function cnmMgtPktAlloc() - * - * Nov 23 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added packet redispatch function calls - * - * Nov 13 2009 mtk01084 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * enable packet re-usable in current emulation driver - * - * Nov 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * 1. Add new function cnmGetStaRecByIndex() - * 2. Rename STA_REC_T to STA_RECORD_T - * - * Nov 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call cnmDataPktDispatch() in cnmPktFree() - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove definition of pragma section code - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Oct 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * - * Oct 8 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ); - -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ); - -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -cnmMgtPktAlloc ( - P_ADAPTER_T prAdapter, - UINT_32 u4Length - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - /* Get a free MSDU_INFO_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(prQueList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if (prMsduInfo) { - prMsduInfo->prPacket = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - prMsduInfo->eSrc = TX_PACKET_MGMT; - - if (prMsduInfo->prPacket == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = NULL; - } - } - -#if DBG - if (prMsduInfo == NULL) { - DBGLOG(MEM, WARN, ("\n")); - DBGLOG(MEM, WARN, ("MgtDesc#=%ld\n", prQueList->u4NumElem)); - -#if CFG_DBG_MGT_BUF - DBGLOG(MEM, WARN, ("rMgtBufInfo: alloc#=%ld, free#=%ld, null#=%ld\n", - prAdapter->rMgtBufInfo.u4AllocCount, - prAdapter->rMgtBufInfo.u4FreeCount, - prAdapter->rMgtBufInfo.u4AllocNullCount)); -#endif - - DBGLOG(MEM, WARN, ("\n")); - } -#endif - - return prMsduInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMgtPktFree ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_QUE_T prQueList; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prQueList = &prAdapter->rTxCtrl.rFreeMsduInfoList; - - ASSERT(prMsduInfo->prPacket); - if (prMsduInfo->prPacket) { - cnmMemFree(prAdapter, prMsduInfo->prPacket); - prMsduInfo->prPacket = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(prQueList, &prMsduInfo->rQueEntry) - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to initial the MGMT/MSG memory pool. -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BUF_INFO_T prBufInfo; - - /* Initialize Management buffer pool */ - prBufInfo = &prAdapter->rMgtBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMgtBufInfo)); - prBufInfo->pucBuf = prAdapter->pucMgtBufCached; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - - /* Initialize Message buffer pool */ - prBufInfo = &prAdapter->rMsgBufInfo; - kalMemZero(prBufInfo, sizeof(prAdapter->rMsgBufInfo)); - prBufInfo->pucBuf = &prAdapter->aucMsgBuf[0]; - - /* Setup available memory blocks. 1 indicates FREE */ - prBufInfo->rFreeBlocksBitmap = - (BUF_BITMAP) BITS(0, MAX_NUM_OF_BUF_BLOCKS - 1); - - return; - -} /* end of cnmMemInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate MGMT/MSG memory pool. -* -* \param[in] eRamType Target RAM type. -* TCM blk_sz= 16bytes, BUF blk_sz= 256bytes -* \param[in] u4Length Length of the buffer to allocate. -* -* \retval !NULL Pointer to the start address of allocated memory. -* \retval NULL Fail to allocat memory -*/ -/*----------------------------------------------------------------------------*/ -PVOID -cnmMemAlloc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_RAM_TYPE_T eRamType, - IN UINT_32 u4Length - ) -{ - P_BUF_INFO_T prBufInfo; - BUF_BITMAP rRequiredBitmap; - UINT_32 u4BlockNum; - UINT_32 i, u4BlkSzInPower; - PVOID pvMemory; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(u4Length); - - if (eRamType == RAM_TYPE_MSG && u4Length <= 256) { - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlkSzInPower = MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MSG_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - else { - eRamType = RAM_TYPE_BUF; - - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlkSzInPower = MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - u4Length += (MGT_BUF_BLOCK_SIZE - 1); - u4BlockNum = u4Length >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - - ASSERT(u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS); - } - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocCount++; -#endif - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - if ((u4BlockNum > 0) && (u4BlockNum <= MAX_NUM_OF_BUF_BLOCKS)) { - - /* Convert number of block into bit cluster */ - rRequiredBitmap = BITS(0, u4BlockNum-1); - - for (i = 0; i <= (MAX_NUM_OF_BUF_BLOCKS - u4BlockNum); i++) { - - /* Have available memory blocks */ - if ((prBufInfo->rFreeBlocksBitmap & rRequiredBitmap) - == rRequiredBitmap) { - - /* Clear corresponding bits of allocated memory blocks */ - prBufInfo->rFreeBlocksBitmap &= ~rRequiredBitmap; - - /* Store how many blocks be allocated */ - prBufInfo->aucAllocatedBlockNum[i] = (UINT_8) u4BlockNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? - SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - /* Return the start address of allocated memory */ - return (PVOID)(prBufInfo->pucBuf + (i << u4BlkSzInPower)); - - } - - rRequiredBitmap <<= 1; - } - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#ifdef LINUX - pvMemory = (PVOID)kalMemAlloc(u4Length, VIR_MEM_TYPE); -#else - pvMemory = (PVOID)NULL; -#endif - -KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#if CFG_DBG_MGT_BUF - prBufInfo->u4AllocNullCount++; - - if (pvMemory) { - prAdapter->u4MemAllocDynamicCount++; - } -#endif - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return pvMemory; - -} /* end of cnmMemAlloc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release memory to MGT/MSG memory pool. -* -* \param pucMemory Start address of previous allocated memory -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmMemFree ( - IN P_ADAPTER_T prAdapter, - IN PVOID pvMemory - ) -{ - P_BUF_INFO_T prBufInfo; - UINT_32 u4BlockIndex; - BUF_BITMAP rAllocatedBlocksBitmap; - ENUM_RAM_TYPE_T eRamType; - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(pvMemory); - if (!pvMemory) { - return; - } - - /* Judge it belongs to which RAM type */ - if ( ((UINT_32)pvMemory >= (UINT_32)&prAdapter->aucMsgBuf[0]) && - ((UINT_32)pvMemory <= (UINT_32)&prAdapter->aucMsgBuf[MSG_BUFFER_SIZE-1])) { - - prBufInfo = &prAdapter->rMsgBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MSG_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_MSG; - } - else if ( ((UINT_32)pvMemory >= (UINT_32)prAdapter->pucMgtBufCached) && - ((UINT_32)pvMemory <= ((UINT_32)prAdapter->pucMgtBufCached + MGT_BUFFER_SIZE -1))) { - prBufInfo = &prAdapter->rMgtBufInfo; - u4BlockIndex = ((UINT_32)pvMemory - (UINT_32)prBufInfo->pucBuf) - >> MGT_BUF_BLOCK_SIZE_IN_POWER_OF_2; - ASSERT(u4BlockIndex < MAX_NUM_OF_BUF_BLOCKS); - eRamType = RAM_TYPE_BUF; - } - else { - #ifdef LINUX - /* For Linux, it is supported because size is not needed */ - kalMemFree(pvMemory, VIR_MEM_TYPE, 0); - #else - /* For Windows, it is not supported because of no size argument */ - ASSERT(0); - #endif - - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount++; - #endif - return; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - -#if CFG_DBG_MGT_BUF - prBufInfo->u4FreeCount++; -#endif - - /* Convert number of block into bit cluster */ - ASSERT(prBufInfo->aucAllocatedBlockNum[u4BlockIndex] > 0); - - rAllocatedBlocksBitmap = - BITS(0, prBufInfo->aucAllocatedBlockNum[u4BlockIndex] - 1); - rAllocatedBlocksBitmap <<= u4BlockIndex; - - /* Clear saved block count for this memory segment */ - prBufInfo->aucAllocatedBlockNum[u4BlockIndex] = 0; - - /* Set corresponding bit of released memory block */ - prBufInfo->rFreeBlocksBitmap |= rAllocatedBlocksBitmap; - - KAL_RELEASE_SPIN_LOCK(prAdapter, - eRamType == RAM_TYPE_MSG ? SPIN_LOCK_MSG_BUF : SPIN_LOCK_MGT_BUF); - - return; - -} /* end of cnmMemFree() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecInit ( - P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - prStaRec->ucIndex = (UINT_8) i; - prStaRec->fgIsInUse = FALSE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - cnmStaRecFree(prAdapter, prStaRec, FALSE); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmStaRecAlloc ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i, k; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (!prStaRec->fgIsInUse) { - /*---- Initialize STA_REC_T here ----*/ - kalMemZero(prStaRec, sizeof(STA_RECORD_T)); - prStaRec->ucIndex = (UINT_8) i; - prStaRec->ucNetTypeIndex = ucNetTypeIndex; - prStaRec->fgIsInUse = TRUE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - /* Initialize the SN caches for duplicate detection */ - for (k = 0; k < TID_NUM + 1; k++) { - prStaRec->au2CachedSeqCtrl[k] = 0xFFFF; - } - - /* Initialize SW TX queues in STA_REC */ - for (k = 0; k < STA_WAIT_QUEUE_NUM; k++) { - LINK_INITIALIZE(&prStaRec->arStaWaitQueue[k]); - } - - /* Default enable TX/RX AMPDU */ - prStaRec->fgTxAmpduEn = TRUE; - prStaRec->fgRxAmpduEn = TRUE; - - for (k = 0; k < NUM_OF_PER_STA_TX_QUEUES; k++) { - QUEUE_INITIALIZE(&prStaRec->arTxQueue[k]); - } - - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecFree ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgSyncToChip - ) -{ - ASSERT(prAdapter); - ASSERT(prStaRec); - - /* To do: free related resources, e.g. timers, buffers, etc */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - prStaRec->fgTransmitKeyExist = FALSE; - prStaRec->fgSetPwrMgtBit = FALSE; - - if (prStaRec->pucAssocReqIe) { - kalMemFree(prStaRec->pucAssocReqIe, VIR_MEM_TYPE, prStaRec->u2AssocReqIeLen); - prStaRec->pucAssocReqIe = NULL; - prStaRec->u2AssocReqIeLen = 0; - } - - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - - if (fgSyncToChip) { - cnmStaSendRemoveCmd(prAdapter, prStaRec); - } - - prStaRec->fgIsInUse = FALSE; - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaFreeAllStaByNetType ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - BOOLEAN fgSyncToChip - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = (P_STA_RECORD_T) &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == (UINT_8) eNetTypeIndex) { - - cnmStaRecFree(prAdapter, prStaRec, fgSyncToChip); - } - } /* end of for loop */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByIndex ( - P_ADAPTER_T prAdapter, - UINT_8 ucIndex - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - - prStaRec = (ucIndex < CFG_STA_REC_NUM) ? - &prAdapter->arStaRec[ucIndex] : NULL; - - if (prStaRec && prStaRec->fgIsInUse == FALSE) { - prStaRec = NULL; - } - - return prStaRec; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Get STA_RECORD_T by Peer MAC Address(Usually TA). -* -* @param[in] pucPeerMacAddr Given Peer MAC Address. -* -* @retval Pointer to STA_RECORD_T, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_STA_RECORD_T -cnmGetStaRecByAddress ( - P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - PUINT_8 pucPeerMacAddr - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(pucPeerMacAddr); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse && - prStaRec->ucNetTypeIndex == ucNetTypeIndex && - EQUAL_MAC_ADDR(prStaRec->aucMacAddr, pucPeerMacAddr)) { - break; - } - } - - return (i < CFG_STA_REC_NUM) ? prStaRec : NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Reset the Status and Reason Code Field to 0 of all Station Records for -* the specified Network Type -* -* @param[in] eNetType Specify Network Type -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecResetStatus ( - P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - cnmStaFreeAllStaByNetType(prAdapter, eNetTypeIndex, FALSE); - -#if 0 - P_STA_RECORD_T prStaRec; - UINT_16 i; - - ASSERT(prAdapter); - - for (i = 0; i < CFG_STA_REC_NUM; i++) { - prStaRec = &prAdapter->arStaRec[i]; - - if (prStaRec->fgIsInUse) { - if ((NETWORK_TYPE_AIS_INDEX == eNetTypeIndex) && - IS_STA_IN_AIS(prStaRec->eStaType)) { - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - } - - /* TODO(Kevin): For P2P and BOW */ - } - } - - return; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will change the ucStaState of STA_RECORD_T and also do -* event indication to HOST to sync the STA_RECORD_T in driver. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] u4NewState New STATE to change. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmStaRecChangeState ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - UINT_8 ucNewState - ) -{ - BOOLEAN fgNeedResp; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* Do nothing when following state transitions happen, - * other 6 conditions should be sync to FW, including 1-->1, 3-->3 - */ - if ((ucNewState == STA_STATE_2 && prStaRec->ucStaState != STA_STATE_3) || - (ucNewState == STA_STATE_1 && prStaRec->ucStaState == STA_STATE_2)) { - prStaRec->ucStaState = ucNewState; - return; - } - - fgNeedResp = FALSE; - if (ucNewState == STA_STATE_3) { - secFsmEventStart(prAdapter, prStaRec); - if (ucNewState != prStaRec->ucStaState) { - fgNeedResp = TRUE; - } - } - else { - if (ucNewState != prStaRec->ucStaState && - prStaRec->ucStaState == STA_STATE_3) { - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); - } - fgNeedResp = FALSE; - } - prStaRec->ucStaState = ucNewState; - - cnmStaSendUpdateCmd(prAdapter, prStaRec, fgNeedResp); - -#if CFG_ENABLE_WIFI_DIRECT - /* To do: Confirm if it is invoked here or other location, but it should - * be invoked after state sync of STA_REC - * Update system operation parameters for AP mode - */ - if (prAdapter->fgIsP2PRegistered && (IS_STA_IN_P2P(prStaRec))) { - P_BSS_INFO_T prBssInfo; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - } - } -#endif - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaRecHandleEventPkt ( - P_ADAPTER_T prAdapter, - P_CMD_INFO_T prCmdInfo, - PUINT_8 pucEventBuf - ) -{ - P_EVENT_ACTIVATE_STA_REC_T prEventContent; - P_STA_RECORD_T prStaRec; - - prEventContent = (P_EVENT_ACTIVATE_STA_REC_T) pucEventBuf; - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventContent->ucStaRecIdx); - - if (prStaRec && prStaRec->ucStaState == STA_STATE_3 && - !kalMemCmp(&prStaRec->aucMacAddr[0], &prEventContent->aucMacAddr[0], - MAC_ADDR_LEN)) { - - qmActivateStaRec(prAdapter, prStaRec); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendUpdateCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec, - BOOLEAN fgNeedResp - ) -{ - P_CMD_UPDATE_STA_RECORD_T prCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsInUse); - - /* To do: come out a mechanism to limit one STA_REC sync once for AP mode - * to avoid buffer empty case when many STAs are associated - * simultaneously. - */ - - /* To do: how to avoid 2 times of allocated memory. Use Stack? - * One is here, the other is in wlanSendQueryCmd() - */ - prCmdContent = cnmMemAlloc(prAdapter, - RAM_TYPE_BUF, sizeof(CMD_UPDATE_STA_RECORD_T)); - ASSERT(prCmdContent); - - /* To do: exception handle */ - if (!prCmdContent) { - return; - } - - prCmdContent->ucIndex = prStaRec->ucIndex; - prCmdContent->ucStaType = (UINT_8) prStaRec->eStaType; - kalMemCopy(&prCmdContent->aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - prCmdContent->u2AssocId = prStaRec->u2AssocId; - prCmdContent->u2ListenInterval = prStaRec->u2ListenInterval; - prCmdContent->ucNetTypeIndex = prStaRec->ucNetTypeIndex; - - prCmdContent->ucDesiredPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - prCmdContent->u2DesiredNonHTRateSet = prStaRec->u2DesiredNonHTRateSet; - prCmdContent->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - prCmdContent->ucMcsSet = prStaRec->ucMcsSet; - prCmdContent->ucSupMcs32 = (UINT_8) prStaRec->fgSupMcs32; - prCmdContent->u2HtCapInfo = prStaRec->u2HtCapInfo; - prCmdContent->ucNeedResp = (UINT_8) fgNeedResp; - -#if !CFG_SLT_SUPPORT - if(prAdapter->rWifiVar.eRateSetting != FIXED_RATE_NONE) { - /* override rate configuration */ - nicUpdateRateParams(prAdapter, - prAdapter->rWifiVar.eRateSetting, - &(prCmdContent->ucDesiredPhyTypeSet), - &(prCmdContent->u2DesiredNonHTRateSet), - &(prCmdContent->u2BSSBasicRateSet), - &(prCmdContent->ucMcsSet), - &(prCmdContent->ucSupMcs32), - &(prCmdContent->u2HtCapInfo)); - } -#endif - - prCmdContent->ucIsQoS = prStaRec->fgIsQoS; - prCmdContent->ucIsUapsdSupported = prStaRec->fgIsUapsdSupported; - prCmdContent->ucStaState = prStaRec->ucStaState; - - prCmdContent->ucAmpduParam = prStaRec->ucAmpduParam; - prCmdContent->u2HtExtendedCap = prStaRec->u2HtExtendedCap; - prCmdContent->u4TxBeamformingCap = prStaRec->u4TxBeamformingCap; - prCmdContent->ucAselCap = prStaRec->ucAselCap; - prCmdContent->ucRCPI = prStaRec->ucRCPI; - - prCmdContent->ucUapsdAc = prStaRec->ucBmpTriggerAC | (prStaRec->ucBmpDeliveryAC << 4); - prCmdContent->ucUapsdSp = prStaRec->ucUapsdSp; - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_UPDATE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - fgNeedResp, /* fgNeedResp */ - FALSE, /* fgIsOid */ - fgNeedResp? cnmStaRecHandleEventPkt : NULL, - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_UPDATE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdContent); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmStaSendRemoveCmd ( - P_ADAPTER_T prAdapter, - P_STA_RECORD_T prStaRec - ) -{ - CMD_REMOVE_STA_RECORD_T rCmdContent; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prStaRec); - - rCmdContent.ucIndex = prStaRec->ucIndex; - kalMemCopy(&rCmdContent.aucMacAddr[0], &prStaRec->aucMacAddr[0], - MAC_ADDR_LEN); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_REMOVE_STA_RECORD, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_REMOVE_STA_RECORD_T), /* u4SetQueryInfoLen */ - (PUINT_8) &rCmdContent, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm_timer.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm_timer.c deleted file mode 100755 index 2e5bf0096006..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/cnm_timer.c +++ /dev/null @@ -1,571 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/cnm_timer.c#1 $ -*/ - -/*! \file "cnm_timer.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cnm_timer.c $ - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support sleep notification to host - * - * 05 19 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some checking assertions - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Return timer token back to COS when entering wait off state - * - * 01 11 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Remove compiling warning - * - * 01 08 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support longer timeout interval to 45 days from 65secu1rwduu`wvpghlqg|fh+fmdkb - * - * 01 06 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix system time is 32KHz instead of 1ms - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Place rRootTimer.rNextExpiredSysTime = rExpiredSysTime; before set timer - * - * Oct 30 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * In cnmTimerInitialize(), just stop timer if it was already created. - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Move the external reference for Lint to precomp.h - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] rTimeout Time out interval from current time. -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -cnmTimerSetTimer ( - IN P_ADAPTER_T prAdapter, - IN OS_SYSTIME rTimeout - ) -{ - P_ROOT_TIMER prRootTimer; - BOOLEAN fgNeedWakeLock; - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - kalSetTimer(prAdapter->prGlueInfo, rTimeout); - - if (rTimeout <= SEC_TO_SYSTIME(WAKE_LOCK_MAX_TIME)) { - fgNeedWakeLock = TRUE; - - if (!prRootTimer->fgWakeLocked) { - KAL_WAKE_LOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = TRUE; - } - } - else { - fgNeedWakeLock = FALSE; - } - - return fgNeedWakeLock; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a root timer. -* -* \param[in] prAdapter -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - /* Note: glue layer have configured timer */ - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - KAL_WAKE_LOCK_INIT(prAdapter, &prRootTimer->rWakeLock, "WLAN Timer"); - prRootTimer->fgWakeLocked = FALSE; - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to destroy a root timer. -* When WIFI is off, the token shall be returned back to system. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prRootTimer = &prAdapter->rRootTimer; - - if (prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - KAL_WAKE_LOCK_DESTROY(prAdapter, &prRootTimer->rWakeLock); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - LINK_INITIALIZE(&prRootTimer->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - /* Note: glue layer will be responsible for timer destruction */ - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to initialize a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] pfnFunc Pointer to the call back function. -* \param[in] u4Data Parameter for call back function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerInitTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN PFN_MGMT_TIMEOUT_FUNC pfFunc, - IN UINT_32 u4Data - ) -{ - ASSERT(prAdapter); - - ASSERT(prTimer); - -#if DBG - /* Note: NULL function pointer is permitted for HEM POWER */ - if (pfFunc == NULL) { - DBGLOG(CNM, WARN, ("Init timer with NULL callback function!\n")); - } -#endif - -#if DBG - ASSERT(prAdapter->rRootTimer.rLinkHead.prNext); - { - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prPendingTimer; - - prTimerList = &(prAdapter->rRootTimer.rLinkHead); - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prPendingTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prPendingTimer); - ASSERT(prPendingTimer != prTimer); - } - } -#endif - - LINK_ENTRY_INITIALIZE(&prTimer->rLinkEntry); - - prTimer->pfMgmtTimeOutFunc = pfFunc; - prTimer->u4Data = u4Data; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -cnmTimerStopTimer_impl ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN BOOLEAN fgAcquireSpinlock - ) -{ - P_ROOT_TIMER prRootTimer; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - prRootTimer = &prAdapter->rRootTimer; - - if (fgAcquireSpinlock) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - if (timerPendingTimer(prTimer)) { - LINK_REMOVE_KNOWN_ENTRY(&prRootTimer->rLinkHead, - &prTimer->rLinkEntry); - - /* Reduce dummy timeout for power saving, especially HIF activity. - * If two or more timers exist and being removed timer is smallest, - * this dummy timeout will still happen, but it is OK. - */ - if (LINK_IS_EMPTY(&prRootTimer->rLinkHead)) { - kalCancelTimer(prAdapter->prGlueInfo); - - if (fgAcquireSpinlock && prRootTimer->fgWakeLocked) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - } - } - - if (fgAcquireSpinlock) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to stop a timer. -* -* \param[in] prTimer Pointer to a timer structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStopTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer - ) -{ - ASSERT(prAdapter); - ASSERT(prTimer); - - cnmTimerStopTimer_impl(prAdapter, prTimer, TRUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to start a timer with wake_lock. -* -* \param[in] prTimer Pointer to a timer structure. -* \param[in] u4TimeoutMs Timeout to issue the timer and call back function -* (unit: ms). -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerStartTimer ( - IN P_ADAPTER_T prAdapter, - IN P_TIMER_T prTimer, - IN UINT_32 u4TimeoutMs - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - OS_SYSTIME rExpiredSysTime, rTimeoutSystime; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prTimer); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - /* If timeout interval is larger than 1 minute, the mod value is set - * to the timeout value first, then per minutue. - */ - if (u4TimeoutMs > MSEC_PER_MIN) { - ASSERT(u4TimeoutMs <= ((UINT_32)0xFFFF * MSEC_PER_MIN)); - - prTimer->u2Minutes = (UINT_16)(u4TimeoutMs / MSEC_PER_MIN); - u4TimeoutMs -= (prTimer->u2Minutes * MSEC_PER_MIN); - if (u4TimeoutMs == 0) { - u4TimeoutMs = MSEC_PER_MIN; - prTimer->u2Minutes--; - } - } - else { - prTimer->u2Minutes = 0; - } - - /* The assertion check if MSEC_TO_SYSTIME() may be overflow. */ - ASSERT(u4TimeoutMs < (((UINT_32)0x80000000 - MSEC_PER_SEC) / KAL_HZ)); - rTimeoutSystime = MSEC_TO_SYSTIME(u4TimeoutMs); - rExpiredSysTime = kalGetTimeTick() + rTimeoutSystime; - - /* If no timer pending or the fast time interval is used. */ - if (LINK_IS_EMPTY(prTimerList) || - TIME_BEFORE(rExpiredSysTime, prRootTimer->rNextExpiredSysTime)) { - - prRootTimer->rNextExpiredSysTime = rExpiredSysTime; - cnmTimerSetTimer(prAdapter, rTimeoutSystime); - } - - /* Add this timer to checking list */ - prTimer->rExpiredSysTime = rExpiredSysTime; - - if (!timerPendingTimer(prTimer)) { - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routines is called to check the timer list. -* -* \param[in] -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cnmTimerDoTimeOutCheck ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROOT_TIMER prRootTimer; - P_LINK_T prTimerList; - P_LINK_ENTRY_T prLinkEntry; - P_TIMER_T prTimer; - OS_SYSTIME rCurSysTime; - PFN_MGMT_TIMEOUT_FUNC pfMgmtTimeOutFunc; - UINT_32 u4TimeoutData; - BOOLEAN fgNeedWakeLock; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - /* acquire spin lock */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - - prRootTimer = &prAdapter->rRootTimer; - prTimerList= &prRootTimer->rLinkHead; - - rCurSysTime = kalGetTimeTick(); - - /* Set the permitted max timeout value for new one */ - prRootTimer->rNextExpiredSysTime = rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - - LINK_FOR_EACH(prLinkEntry, prTimerList) { - prTimer = LINK_ENTRY(prLinkEntry, TIMER_T, rLinkEntry); - ASSERT(prTimer); - - /* Check if this entry is timeout. */ - if (!TIME_BEFORE(rCurSysTime, prTimer->rExpiredSysTime)) { - cnmTimerStopTimer_impl(prAdapter, prTimer, FALSE); - - pfMgmtTimeOutFunc = prTimer->pfMgmtTimeOutFunc; - u4TimeoutData = prTimer->u4Data; - - if (prTimer->u2Minutes > 0) { - prTimer->u2Minutes--; - prTimer->rExpiredSysTime = - rCurSysTime + MSEC_TO_SYSTIME(MSEC_PER_MIN); - LINK_INSERT_TAIL(prTimerList, &prTimer->rLinkEntry); - } - else if (pfMgmtTimeOutFunc) { - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - (pfMgmtTimeOutFunc)(prAdapter, u4TimeoutData); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); - } - - /* Search entire list again because of nest del and add timers - * and current MGMT_TIMER could be volatile after stopped - */ - prLinkEntry = (P_LINK_ENTRY_T)prTimerList; - - prRootTimer->rNextExpiredSysTime = - rCurSysTime + MGMT_MAX_TIMEOUT_INTERVAL; - } - else if (TIME_BEFORE(prTimer->rExpiredSysTime, - prRootTimer->rNextExpiredSysTime)) { - prRootTimer->rNextExpiredSysTime = prTimer->rExpiredSysTime; - } - } /* end of for loop */ - - /* Setup the prNext timeout event. It is possible the timer was already - * set in the above timeout callback function. - */ - fgNeedWakeLock = FALSE; - if (!LINK_IS_EMPTY(prTimerList)) { - ASSERT(TIME_AFTER(prRootTimer->rNextExpiredSysTime, rCurSysTime)); - - fgNeedWakeLock = cnmTimerSetTimer(prAdapter, (OS_SYSTIME) - ((INT_32)prRootTimer->rNextExpiredSysTime - (INT_32)rCurSysTime)); - } - - if (prRootTimer->fgWakeLocked && !fgNeedWakeLock) { - KAL_WAKE_UNLOCK(prAdapter, &prRootTimer->rWakeLock); - prRootTimer->fgWakeLocked = FALSE; - } - - /* release spin lock */ - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TIMER); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/hem_mbox.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/hem_mbox.c deleted file mode 100755 index 2087225c3702..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/hem_mbox.c +++ /dev/null @@ -1,879 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/hem_mbox.c#1 $ -*/ - -/*! \file "hem_mbox.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: hem_mbox.c $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 03 2012 cp.wu - * [WCXRP00001231] [MT6620 Wi-Fi][MT5931][Driver] Correct SCAN_V2 related debugging facilities within hem_mbox.c - * correct for debug message string table by adding missed scan_v2 related definitions. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 17 2012 yuche.tsai - * NULL - * Update mgmt frame filter setting. - * Please also update FW 2.1 - * - * 01 13 2012 yuche.tsai - * NULL - * WiFi Hot Spot Tethering for ICS ALPHA testing version. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 15 2011 cm.chang - * NULL - * Add exception handle for NULL function pointer of mailbox message - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 06 07 2011 yuche.tsai - * [WCXRP00000696] [Volunteer Patch][MT6620][Driver] Infinite loop issue when RX invitation response.[WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Add invitation support. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update bowString and channel grant. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 12 08 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support concurrent networks. - * - * 11 08 2010 cm.chang - * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID - * Remove CNM channel reover message ID - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 16 2010 cm.chang - * NULL - * Remove unused message ID - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 yarco.yang - * NULL - * Fixed Driver ASSERT at mboxInitMsgMap() - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Add debug message for newly add P2P message. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some function entry for P2P FSM under provisioning phase.. - * - * 08 11 2010 yuche.tsai - * NULL - * Add some events to P2P Module. - * - * 08 05 2010 yuche.tsai - * NULL - * Add message box event for P2P device switch on & device discovery. - * - * 08 04 2010 cp.wu - * NULL - * remove unused mailbox message definitions. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * message table should not be commented out by compilation option without modifying header file - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 yuche.tsai - * - * Add wifi direct scan done callback. - * - * 07 09 2010 cp.wu - * - * change handler of MID_MNY_CNM_CONNECTION_ABORT from NULL to mboxDummy. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Modify CNM message handler for new flow - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable currently migrated message call-backs. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * restore utility function invoking via hem_mbox to direct calls - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add buildable & linkable ais_fsm.c - * - * related reference are still waiting to be resolved - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * hem_mbox is migrated. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Fix file merge error - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_QOS_ACTION_FRAME - * - * 04 29 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * Removed MID_RXM_MQM_BA_ACTION_FRAME - * - * 04 27 2010 tehuang.liu - * [BORA00000605][WIFISYS] Phase3 Integration - * MID_RXM_MQM_BA_ACTION_FRAME - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Develop partial DPD code - * - * 02 11 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Updated arMsgMapTable for MID_RXM_MQM_QOS_ACTION_FRAME - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * Dec 9 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add hemRunEventScanDone() to arMsgMapTable[] - * - * Dec 4 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix mboxDummy() didn't free prMsgHdr - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add saaAisJoinComplete event handler - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Fixed the handler function name in arMsgMapTable for MID_RXM_MQM_BA_ACTION_FRAME - * - * Dec 2 2009 MTK02468 - * [BORA00000337] To check in codes for FPGA emulation - * Added MID_RXM_MQM_BA_ACTION_FRAME to MsgMapTable - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MSG Handler (remove dummy and add for SAA) - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add aisFsmRunEventAbort() event handler - * - * Nov 11 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 10 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add more MSG_HNDL_ENTRY_T to avoid ASSERT() in mboxInitMsgMap() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add SCN message and function entry to arMsgMapTable[] - * - * Nov 2 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix sorting algorithm in mboxInitMsgMap() - * - * Oct 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugMsg[] = { - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_CNM_CH_ABORT"), - (PUINT_8)DISP_STRING("MID_CNM_AIS_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_P2P_CH_GRANT"), - (PUINT_8)DISP_STRING("MID_CNM_BOW_CH_GRANT"), - - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_AIS_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_P2P_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_BOW_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_REQ_V2"), - (PUINT_8)DISP_STRING("MID_RLM_SCN_SCAN_CANCEL"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_P2P_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_BOW_SCAN_DONE"), - (PUINT_8)DISP_STRING("MID_SCN_RLM_SCAN_DONE"), - - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_JOIN_REQ"), - (PUINT_8)DISP_STRING("MID_OID_AIS_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_AIS_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_AIS_JOIN_COMPLETE"), - -#if CFG_ENABLE_BT_OVER_WIFI - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_BOW_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_BOW_JOIN_COMPLETE"), -#endif - -#if CFG_ENABLE_WIFI_DIRECT - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_START"), - (PUINT_8)DISP_STRING("MID_P2P_SAA_FSM_ABORT"), - (PUINT_8)DISP_STRING("MID_SAA_P2P_JOIN_COMPLETE"), - - (PUINT_8)DISP_STRING("MID_MNY_P2P_FUN_SWITCH"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_DEVICE_DISCOVERY"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CONNECTION_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_BEACON_UPDATE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_STOP_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_REQ"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_CHNL_ABORT"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_TX"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_GROUP_DISSOLVE"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_MGMT_FRAME_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_NET_DEV_REGISTER"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_START_AP"), - (PUINT_8)DISP_STRING("MID_MNY_P2P_UPDATE_IE_BUF"), - #endif - -#if CFG_SUPPORT_ADHOC - //(PUINT_8)DISP_STRING("MID_AIS_CNM_CREATE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_CREATE_IBSS_GRANT"), - //(PUINT_8)DISP_STRING("MID_AIS_CNM_MERGE_IBSS_REQ"), - //(PUINT_8)DISP_STRING("MID_CNM_AIS_MERGE_IBSS_GRANT"), - (PUINT_8)DISP_STRING("MID_SCN_AIS_FOUND_IBSS"), -#endif /* CFG_SUPPORT_ADHOC */ - - (PUINT_8)DISP_STRING("MID_SAA_AIS_FSM_ABORT") -}; -/*lint -restore */ -#endif /* DBG */ - -/* This message entry will be re-ordered based on the message ID order - * by invoking mboxInitMsgMap() - */ -static MSG_HNDL_ENTRY_T arMsgMapTable[] = { - { MID_MNY_CNM_CH_REQ, cnmChMngrRequestPrivilege }, - { MID_MNY_CNM_CH_ABORT, cnmChMngrAbortPrivilege }, - { MID_CNM_AIS_CH_GRANT, aisFsmRunEventChGrant }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_CNM_P2P_CH_GRANT, p2pFsmRunEventChGrant }, /*set in gl_p2p_init.c*/ -#else - { MID_CNM_P2P_CH_GRANT, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_CNM_BOW_CH_GRANT, bowRunEventChGrant }, -#else - { MID_CNM_BOW_CH_GRANT, mboxDummy }, -#endif - - /*--------------------------------------------------*/ - /* SCN Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_AIS_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_AIS_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_P2P_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_P2P_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_BOW_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_BOW_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_RLM_SCN_SCAN_REQ, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_REQ_V2, scnFsmMsgStart }, - { MID_RLM_SCN_SCAN_CANCEL, scnFsmMsgAbort }, - { MID_SCN_AIS_SCAN_DONE, aisFsmRunEventScanDone }, -#if CFG_ENABLE_WIFI_DIRECT - { MID_SCN_P2P_SCAN_DONE, p2pFsmRunEventScanDone }, /*set in gl_p2p_init.c*/ -#else - { MID_SCN_P2P_SCAN_DONE, mboxDummy }, -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - { MID_SCN_BOW_SCAN_DONE, bowResponderScanDone }, -#else - { MID_SCN_BOW_SCAN_DONE, mboxDummy }, -#endif - { MID_SCN_RLM_SCAN_DONE, rlmObssScanDone }, - - /*--------------------------------------------------*/ - /* AIS Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_OID_AIS_FSM_JOIN_REQ, aisFsmRunEventAbort }, - { MID_OID_AIS_FSM_ABORT, aisFsmRunEventAbort }, - { MID_AIS_SAA_FSM_START, saaFsmRunEventStart }, - { MID_AIS_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_AIS_JOIN_COMPLETE, aisFsmRunEventJoinComplete }, - -#if CFG_ENABLE_BT_OVER_WIFI - /*--------------------------------------------------*/ - /* BOW Module Mailbox Messages */ - /*--------------------------------------------------*/ - { MID_BOW_SAA_FSM_START, saaFsmRunEventStart }, - { MID_BOW_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_BOW_JOIN_COMPLETE, bowFsmRunEventJoinComplete }, -#endif - -#if CFG_ENABLE_WIFI_DIRECT /*set in gl_p2p_init.c*/ - { MID_P2P_SAA_FSM_START, saaFsmRunEventStart }, - { MID_P2P_SAA_FSM_ABORT, saaFsmRunEventAbort }, - { MID_SAA_P2P_JOIN_COMPLETE, p2pFsmRunEventJoinComplete },// TODO: p2pFsmRunEventJoinComplete - - { MID_MNY_P2P_FUN_SWITCH, p2pFsmRunEventSwitchOPMode }, - { MID_MNY_P2P_DEVICE_DISCOVERY, p2pFsmRunEventScanRequest }, - { MID_MNY_P2P_CONNECTION_REQ, p2pFsmRunEventConnectionRequest }, - { MID_MNY_P2P_CONNECTION_ABORT, p2pFsmRunEventConnectionAbort }, - { MID_MNY_P2P_BEACON_UPDATE, p2pFsmRunEventBeaconUpdate }, - { MID_MNY_P2P_STOP_AP, p2pFsmRunEventStopAP }, - { MID_MNY_P2P_CHNL_REQ, p2pFsmRunEventChannelRequest }, - { MID_MNY_P2P_CHNL_ABORT, p2pFsmRunEventChannelAbort }, - { MID_MNY_P2P_MGMT_TX, p2pFsmRunEventMgmtFrameTx }, - { MID_MNY_P2P_GROUP_DISSOLVE, p2pFsmRunEventDissolve }, - { MID_MNY_P2P_MGMT_FRAME_REGISTER, p2pFsmRunEventMgmtFrameRegister }, - { MID_MNY_P2P_NET_DEV_REGISTER, p2pFsmRunEventNetDeviceRegister }, - { MID_MNY_P2P_START_AP, p2pFsmRunEventStartAP }, - { MID_MNY_P2P_MGMT_FRAME_UPDATE, p2pFsmRunEventUpdateMgmtFrame }, -#if CFG_SUPPORT_WFD - { MID_MNY_P2P_WFD_CFG_UPDATE, p2pFsmRunEventWfdSettingUpdate }, -#endif - -#endif - -#if CFG_SUPPORT_ADHOC - { MID_SCN_AIS_FOUND_IBSS, aisFsmRunEventFoundIBSSPeer }, -#endif /* CFG_SUPPORT_ADHOC */ - - { MID_SAA_AIS_FSM_ABORT, aisFsmRunEventAbort } -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#if DBG -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d: %s]\n", prMsg->eMsgId, apucDebugMsg[prMsg->eMsgId])); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#else -#define MBOX_HNDL_MSG(prAdapter, prMsg) do { \ - ASSERT(arMsgMapTable[prMsg->eMsgId].pfMsgHndl); \ - if (arMsgMapTable[prMsg->eMsgId].pfMsgHndl) { \ - DBGLOG(CNM, LOUD, ("DO MSG [%d]\n", prMsg->eMsgId)); \ - arMsgMapTable[prMsg->eMsgId].pfMsgHndl(prAdapter, prMsg); \ - } \ - else { \ - DBGLOG(CNM, ERROR, ("NULL fptr for MSG [%d]\n", prMsg->eMsgId)); \ - cnmMemFree(prAdapter, prMsg); \ - } \ -} while (0) -#endif -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitMsgMap ( - VOID - ) -{ - UINT_32 i, idx; - MSG_HNDL_ENTRY_T rTempEntry; - - ASSERT((sizeof(arMsgMapTable) / sizeof(MSG_HNDL_ENTRY_T)) == MID_TOTAL_NUM); - - for (i = 0; i < MID_TOTAL_NUM; i++) { - if (arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i) { - continue; - } - for (idx = i + 1; idx < MID_TOTAL_NUM; idx++) { - if (arMsgMapTable[idx].eMsgId == (ENUM_MSG_ID_T) i) { - break; - } - } - ASSERT(idx < MID_TOTAL_NUM); - if (idx >= MID_TOTAL_NUM) { - continue; - } - - /* Swap target entry and current entry */ - rTempEntry.eMsgId = arMsgMapTable[idx].eMsgId; - rTempEntry.pfMsgHndl= arMsgMapTable[idx].pfMsgHndl; - - arMsgMapTable[idx].eMsgId = arMsgMapTable[i].eMsgId; - arMsgMapTable[idx].pfMsgHndl = arMsgMapTable[i].pfMsgHndl; - - arMsgMapTable[i].eMsgId = rTempEntry.eMsgId; - arMsgMapTable[i].pfMsgHndl = rTempEntry.pfMsgHndl; - } - - /* Verify the correctness of final message map */ - for (i = 0; i < MID_TOTAL_NUM; i++) { - ASSERT(arMsgMapTable[i].eMsgId == (ENUM_MSG_ID_T) i); - while (arMsgMapTable[i].eMsgId != (ENUM_MSG_ID_T) i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSetup ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INITIALIZE(&prMbox->rLinkHead); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxSendMsg ( - IN P_ADAPTER_T prAdapter, - IN ENUM_MBOX_ID_T eMboxId, - IN P_MSG_HDR_T prMsg, - IN EUNM_MSG_SEND_METHOD_T eMethod - ) -{ - P_MBOX_T prMbox; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prMsg); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - switch (eMethod) { - case MSG_SEND_METHOD_BUF: - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_INSERT_TAIL(&prMbox->rLinkHead, &prMsg->rLinkEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - // to wake up main service thread - GLUE_SET_EVENT(prAdapter->prGlueInfo); - - break; - - case MSG_SEND_METHOD_UNBUF: - MBOX_HNDL_MSG(prAdapter, prMsg); - break; - - default: - ASSERT(0); - break; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxRcvAllMsg ( - IN P_ADAPTER_T prAdapter, - ENUM_MBOX_ID_T eMboxId - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); - ASSERT(prAdapter); - - prMbox = &(prAdapter->arMbox[eMboxId]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - MBOX_HNDL_MSG(prAdapter, prMsg); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* Initialize Mailbox */ - mboxInitMsgMap(); - - /* Setup/initialize each mailbox */ - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - mboxSetup(prAdapter, i); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDestroy ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MBOX_T prMbox; - P_MSG_HDR_T prMsg; - UINT_8 i; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - for (i = 0; i < MBOX_ID_TOTAL_NUM; i++) { - prMbox = &(prAdapter->arMbox[i]); - - while (!LINK_IS_EMPTY(&prMbox->rLinkHead) ) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - LINK_REMOVE_HEAD(&prMbox->rLinkHead, prMsg, P_MSG_HDR_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); - - ASSERT(prMsg); - cnmMemFree(prAdapter, prMsg); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This is dummy function to prevent empty arMsgMapTable[] for compiling. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mboxDummy ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - ASSERT(prAdapter); - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/makefile b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/makefile deleted file mode 100755 index 89b63909cac9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source -# file to this component. This file merely indirects to the real make file -# that is shared by all the driver components of the Windows NT DDK -#!INCLUDE $(NTMAKEENV)\makefile.def - -#!INCLUDE $(_MAKEENVROOT)\makefile.def -!INCLUDE $(_WINDOW_MAKE_ROOT)\makefile.def diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/mib.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/mib.c deleted file mode 100755 index 684abb6d112f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/mib.c +++ /dev/null @@ -1,142 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/mib.c#1 $ -*/ - -/*! \file "mib.c" - \brief This file includes the mib default vale and functions. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mib.c $ - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add mib.c. - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -NON_HT_PHY_ATTRIBUTE_T rNonHTPhyAttributes[] = { - {RATE_SET_HR_DSSS, TRUE, FALSE }, /* For PHY_TYPE_HR_DSSS_INDEX(0) */ - {RATE_SET_ERP, TRUE, TRUE }, /* For PHY_TYPE_ERP_INDEX(1) */ - {RATE_SET_ERP_P2P, TRUE, TRUE }, /* For PHY_TYPE_ERP_P2P_INDEX(2) */ - {RATE_SET_OFDM, FALSE, FALSE }, /* For PHY_TYPE_OFDM_INDEX(3) */ -}; - -NON_HT_ADHOC_MODE_ATTRIBUTE_T rNonHTAdHocModeAttributes[AD_HOC_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AD_HOC_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AD_HOC_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AD_HOC_MODE_11G(2) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AD_HOC_MODE_11A(3) */ -}; - -NON_HT_AP_MODE_ATTRIBUTE_T rNonHTApModeAttributes[AP_MODE_NUM] = { - {PHY_TYPE_HR_DSSS_INDEX, BASIC_RATE_SET_HR_DSSS}, /* For AP_MODE_11B(0) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_HR_DSSS_ERP}, /* For AP_MODE_MIXED_11BG(1) */ - {PHY_TYPE_ERP_INDEX, BASIC_RATE_SET_ERP}, /* For AP_MODE_11G(2) */ - {PHY_TYPE_ERP_P2P_INDEX, BASIC_RATE_SET_ERP_P2P}, /* For AP_MODE_11G_P2P(3) */ - {PHY_TYPE_OFDM_INDEX, BASIC_RATE_SET_OFDM}, /* For AP_MODE_11A(4) */ -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_assoc.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_assoc.c deleted file mode 100755 index f44c2dc0fbfc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_assoc.c +++ /dev/null @@ -1,139 +0,0 @@ -/* -** $Id: @(#) p2p_assoc.c@@ -*/ - -/*! \file "p2p_assoc.c" - \brief This file includes the Wi-Fi Direct association-related functions. - - This file includes the association-related functions. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to compose Common Information Elements for P2P Association -* Request Frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -PUINT_8 -p2pBuildReAssocReqFrameCommonIEs( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN PUINT_8 pucBuffer - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* Fill the SSID element. */ - SSID_IE(pucBuffer)->ucId = ELEM_ID_SSID; - - /* NOTE(Kevin): We copy the SSID from CONNECTION_SETTINGS for the case of - * Passive Scan and the target BSS didn't broadcast SSID on its Beacon Frame. - */ - - COPY_SSID(SSID_IE(pucBuffer)->aucSSID, - SSID_IE(pucBuffer)->ucLength, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - return pucBuffer; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_bss.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_bss.c deleted file mode 100755 index bd92be32ccbd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_bss.c +++ /dev/null @@ -1,106 +0,0 @@ -/* -** $Id: @(#) p2p_bss.c@@ -*/ - -/*! \file "p2p_bss.c" - \brief This file contains the functions for creating p2p BSS(AP). - - This file contains the functions for BSS(AP). We may create a BSS - network, or merge with exist IBSS network and sending Beacon Frame or reply - the Probe Response Frame for received Probe Request Frame. -*/ - - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_fsm.c deleted file mode 100755 index 747d92d9b271..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_fsm.c +++ /dev/null @@ -1,3514 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/mgmt/p2p_fsm.c#61 $ -*/ - -/*! \file "p2p_fsm.c" - \brief This file defines the FSM for P2P Module. - - This file defines the FSM for P2P Module. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: p2p_fsm.c $ -** -** 08 30 2012 yuche.tsai -** NULL -** Fix disconnect issue possible leads KE. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 08 24 2012 yuche.tsai -** NULL -** Fix bug of invitation request. -** -** 08 20 2012 yuche.tsai -** NULL -** Try to fix frame register KE issue. -** -** 08 15 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 07 2012 yuche.tsai -** NULL -** Disable BOW when p2p is active. -** -** 08 06 2012 yuche.tsai -** NULL -** Bug fix for KE when load/unload AP mode. -** -** 08 03 2012 yuche.tsai -** NULL -** Fix possible KE when load & unload driver. -** -** 07 31 2012 yuche.tsai -** NULL -** Update Active/Deactive network policy for P2P network. -** Highly related to power saving. -** -** 07 27 2012 yuche.tsai -** NULL -** Fix bug for KE when unload.. -** -** 07 25 2012 yuche.tsai -** NULL -** Buf fix for starting AP mode. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Fix the compile flag of enhancement. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000808] [Volunteer Patch][MT6620][Driver/FW] Device discoverability issue fix - * Change device discoverability methodology. From driver SCAN to FW lock channel. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Add wifi direct connection enhancement method I, II & VI. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000833] [Volunteer Patch][WiFi Direct][Driver] Service Discovery Frame RX Indicate Issue - * Fix Service Discovery Race Condition Issue. - * - * 06 23 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * change parameter name from PeerAddr to BSSID - * - * 06 21 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix an issue of accepting connection of GO. - * - * 06 21 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability - * Drop GAS frame when SD is not enabled. - * - * 06 20 2011 yuche.tsai - * NULL - * Fix compile error. - * - * 06 20 2011 yuche.tsai - * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue. - * Fix connection indication twice issue. - * - * 06 20 2011 cp.wu - * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module - * 1. specify target's BSSID when requesting channel privilege. - * 2. pass BSSID information to firmware domain - * - * 06 20 2011 yuche.tsai - * [WCXRP00000795] [Volunteer Patch][MT6620][Driver] GO can not connect second device issue - * Solve P2P GO can not formation with second device issue. - * - * 06 14 2011 yuche.tsai - * NULL - * Change disconnect feature. - * - * 06 10 2011 yuche.tsai - * [WCXRP00000775] [Volunteer Patch][MT6620][Driver] Dynamic enable SD capability[WCXRP00000776] [Need Patch][MT6620][Driver] MT6620 response probe request of P2P device with P2P IE under Hot Spot mode. - * 1. Dynamic enable SD capability after P2P supplicant ready. - * 2. Avoid response probe respone with p2p IE when under hot spot mode. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 06 02 2011 cp.wu - * [WCXRP00000681] [MT5931][Firmware] HIF code size reduction - * eliminate unused parameters for SAA-FSM - * - * 05 26 2011 yuche.tsai - * [WCXRP00000745] Support accepting connection after one Group Connection Lost. - -After Group Formation & lost connection, if MT6620 behave as: - -1. GO: It would keep under GO state until been dissolved by supplicant. - - At this time, other P2P device can use join method to join this group. - - -2. GC: It would keep on searching target GO or target device until been dissolved by supplicant. - -At this time, it would ignore other P2P device formation request. - - --- - -Modification: Make driver to accept GO NEGO REQ at this time, to let user decide to accept new connection or not. - - * [Volunteer Patch][MT6620][Driver] - * Driver would indicate connection request, if password ID is not ready but connection request is issued. - * - * 05 18 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * A solution for both connection request & IO control. - * - * 05 16 2011 yuche.tsai - * [WCXRP00000728] [Volunteer Patch][MT6620][Driver] Service Discovery Request TX issue. - * Fix SD request can not send out issue. - * - * 05 09 2011 terry.wu - * [WCXRP00000711] [MT6620 Wi-Fi][Driver] Set Initial value of StaType in StaRec for Hotspot Client - * Set initial value of StaType in StaRec for hotspot client. - * - * 05 04 2011 yuche.tsai - * [WCXRP00000697] [Volunteer Patch][MT6620][Driver] - * Bug fix for p2p descriptor is NULL if BSS descriptor is found first. - * - * 05 04 2011 yuche.tsai - * NULL - * Support partial persistent group function. - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 20 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Fix side effect while starting ATGO. - * - * 04 20 2011 yuche.tsai - * NULL - * Fix ASSERT issue in FW, side effect of last change. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000668] [Volunteer Patch][MT6620][Driver] Possible race condition when add scan & query scan result at the same time. - * Workaround for multiple device connection, before invitation ready. - * - * 04 19 2011 yuche.tsai - * [WCXRP00000665] [Wifi Direct][MT6620 E4] When use Ralink's dongle to establish wifi direct connection with PBC. But 6573 always not pop accept option to establish connection. - * Support connection indication when GO NEGO REQ doesn't have configure method, instead it has PasswordID. - * - * 04 18 2011 yuche.tsai - * NULL - * Fix error. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix a connection issue. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Fix the channel issue of AP mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix Device discoverability related issue. - * - * 04 09 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix bug for Device Discoverability. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Fix compile error. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 03 28 2011 yuche.tsai - * NULL - * Fix a possible issue for retry join when media status connected. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 24 2011 yuche.tsai - * NULL - * Assign AID before change STA_REC state to state 3. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix Response Rate Issue when TX Auth Rsp Frame under P2P Mode. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix issue of connection to one GC. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix ASSERT issue when starting Hot-spot. - * - * 03 22 2011 yuche.tsai - * NULL - * When Target Information is not available, change to passive mode. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix one connection issue while using Keypad to connect a GO. - * - * 03 22 2011 yuche.tsai - * NULL - * 1. Fix two issues that may cause kernel panic. - * - * 03 22 2011 yuche.tsai - * NULL - * Fix GC connect to other device issue. - * - * 03 22 2011 yuche.tsai - * NULL - * 1.Shorten the LISTEN interval. - * 2. Fix IF address issue when we are GO - * 3. Fix LISTEN channel issue. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 21 2011 yuche.tsai - * NULL - * Solve Listen State doesn't response probe response issue. - * - * 03 21 2011 yuche.tsai - * NULL - * Change P2P Connection Request Flow. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Indicate the correct Group SSID when join on Group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000583] [Volunteer Patch][MT6620][Driver] P2P connection of the third peer issue - * Support the third P2P device to join GO/GC group. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue - * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000578] [Volunteer Patch][MT6620][Driver] Separate Connection Request from general IOCTL - * Separate connection request from general IOCTL. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 17 2011 yuche.tsai - * NULL - * When AIS is connect to an AP, Hot Spot would be enabled under fixed same channel. - * - * 03 17 2011 yuche.tsai - * NULL - * Solve the Group Info IE in Probe Response incorrect issue. - * - * 03 17 2011 yuche.tsai - * NULL - * Release Channel after Join Complete. - * - * 03 16 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the protected while at P2P start GO, and skip some security check . - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix local configure method issue. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 14 2011 yuche.tsai - * NULL - * . - * - * 03 14 2011 yuche.tsai - * NULL - * Fix password ID issue. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 08 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module. - * . - * - * 03 07 2011 yuche.tsai - * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation. - * . - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 04 2011 wh.su - * [WCXRP00000510] [MT6620 Wi-Fi] [Driver] Fixed the CTIA enter test mode issue - * fixed the p2p action frame type check for device request indication. - * - * 03 02 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Service Discovery RX packet buffer pointer. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Update Service Discovery Related wlanoid function. - * - * 02 21 2011 yuche.tsai - * [WCXRP00000481] [Volunteer Patch][MT6620][FW] Scan hang under concurrent case. - * Fix all BE issue of WSC or P2P IE. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the wsc config method mapping to driver used config method issue. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000479] [Volunteer Patch][MT6620][Driver] Probe Response of P2P using 11b rate. - * Update basic rate to FW, after P2P is initialed. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Use P2P Wildcard SSID when scan type of P2P_WILDCARD_SSID is set. - * - * 02 18 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC IE BE format issue. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 16 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * If two station connected to the Hot-Spot and one disconnect, FW would get into an infinite loop - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix re-connection issue after RX deauthentication. - * - * 02 15 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Fix conneciton issue after disconnect with AP. - * - * 02 12 2011 yuche.tsai - * [WCXRP00000441] [Volunteer Patch][MT6620][Driver] BoW can not create desired station type when Hot Spot is enabled. - * P2P Create Station Type according to Target BSS capability. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Support Disassoc & Deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Indication Related code. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue - * Fix Client Limit Issue. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Disconnect every station client when disolve on P2P group. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * 1. Fix Service Disocvery Logical issue. - * 2. Fix a NULL pointer access violation issue when sending deauthentication packet to a class error station. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Workaround of disable P2P network. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * 1. Fixed SSID wrong length issue. - * 2. Under Hot Spot configuration, there won't be any P2P IE. - * 3. Under Hot Spot configuration, P2P FSM won't get into LISTEN state first. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Modify Start GO flow. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix desire phy type set issue. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Add desire phy type set phase I. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix P2P Disconnect Issue. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Add Service Discovery Function. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type Definition. - * - * 01 19 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Add P2P QoS Support. - * - * 01 19 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Null NOA attribute setting when no related parameters. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify AAA flow according to CM's comment. - * - * 01 13 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Resolve Channel ZERO issue. (Uninitialized default channel) - * - * 01 13 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Update P2P State Debug Message. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Fix bug when allocating message buffer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000353] [Volunteer Patch][MT6620][Driver] Desired Non-HT Rate Set update when STA record is created under AP Mode. - * Update Phy Type Set. When legacy client is connected, it can use 11b rate, - * but if the P2P device is connected, 11b rate is not allowed. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Bug of reference to NULL pointer. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Modify some behavior of AP mode. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix bug of wrong pointer check. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix Compile Error. - * - * 01 11 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Add station record into client list before change it state from STATE_2 to STATE_3. - * - * 01 05 2011 yuche.tsai - * [WCXRP00000345] [MT6620][Volunteer Patch] P2P may issue a SSID specified scan request, but the SSID length is still invalid. - * Specify SSID Type when issue a scan request. - * - * 01 05 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * correct typo - * - * 01 05 2011 george.huang - * [WCXRP00000343] [MT6620 Wi-Fi] Add TSF reset path for concurrent operation - * modify NOA update path for preventing assertion false alarm. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 01 03 2011 wh.su - * [WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * let the p2p ap mode acept a legacy device join. - * - * 12 22 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Fix Compile Error. - * - * 12 15 2010 yuche.tsai - * [WCXRP00000245] 1. Invitation Request/Response. -2. Provision Discovery Request/Response - - * Refine Connection Flow. - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 12 08 2010 yuche.tsai - * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode. - * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame. - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * The order of invoking nicUpdateBss() and rlm functions - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation. - * - * 12 02 2010 yuche.tsai - * NULL - * Update P2P Connection Policy for Invitation & Provision Discovery. - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 30 2010 yuche.tsai - * NULL - * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ - * - * 11 30 2010 yuche.tsai - * NULL - * Update RCIP value when RX assoc request frame. - * - * 11 29 2010 yuche.tsai - * NULL - * Update P2P related function for INVITATION & PROVISION DISCOVERY. - * - * 11 26 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Update P2P PS for NOA function. - * - * 11 25 2010 yuche.tsai - * NULL - * Update Code for Invitation Related Function. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 05 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * fixed the p2p role code error. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * fixed the ASSERT check error - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 19 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine[WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * fixed the compiling error. - * - * 10 14 2010 wh.su - * [WCXRP00000102] [MT6620 Wi-Fi] [FW] Add a compiling flag and code for support Direct GO at Android - * adding a code to support Direct GO with a compiling flag . - * - * 10 08 2010 cp.wu - * [WCXRP00000087] [MT6620 Wi-Fi][Driver] Cannot connect to 5GHz AP, driver will cause FW assert. - * correct erroneous logic: specifying eBand with incompatible eSco - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * fixed the compiling error. - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at WinXP. - * - * 09 07 2010 yuche.tsai - * NULL - * Reset Common IE Buffer of P2P INFO when scan request is issued. - * If an action frame other than public action frame is received, return direcly. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 26 2010 yuche.tsai - * NULL - * Add P2P Connection Abort Event Message handler. - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 yuche.tsai - * NULL - * 1. Fix Interface Address from GO Nego Req/Rsp is not correct. - * 2. Fix GO mode does not change media state after station connected. - * 3. Fix STA don't response probe request when there is a connection request. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 kevin.huang - * NULL - * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete() - * - * 08 20 2010 yuche.tsai - * NULL - * Add Glue Layer indication. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix compile warning under Linux. - * - * 08 17 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Add random Interface Address Generation support. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix some P2P FSM bug. - * - * 08 16 2010 yuche.tsai - * NULL - * Update P2P FSM code for GO Nego. - * - * 08 16 2010 kevin.huang - * NULL - * Refine AAA functions - * - * 08 12 2010 kevin.huang - * NULL - * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse() - * - * 08 12 2010 yuche.tsai - * NULL - * Join complete indication. - * - * 08 11 2010 yuche.tsai - * NULL - * Add two boolean in connection request. - * Based on these two boolean value, P2P FSM should - * decide to do invitation or group formation or start a GO directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Update P2P FSM, currently P2P Device Discovery is verified. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P FSM for group formation. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 03 2010 cp.wu - * NULL - * limit build always needs spin-lock declaration. - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Add P2P FSM code check in. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 yuche.tsai - * - * Update P2P FSM. - * - * 07 09 2010 george.huang - * - * [WPD00001556] Migrate PM variables from FW to driver: for composing QoS Info - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error while enable WIFI_DIRECT support. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * First draft for migration P2P FSM from FW to Driver. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Rename CFG flag for P2P - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add code to test P2P GO - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add Wi-Fi Direct SSID and P2P GO Test Mode - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Modify code due to BAND_24G define was changed - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Revise data structure to share the same BSS_INFO_T for avoiding coding error - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" -#ifdef CFG_DUAL_ANTENNA -#include "mtk_porting.h" -#include "dual_ant_bwcs.h" -#endif - - - -#if CFG_ENABLE_WIFI_DIRECT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugP2pState[P2P_STATE_NUM] = { - (PUINT_8)DISP_STRING("P2P_STATE_IDLE"), - (PUINT_8)DISP_STRING("P2P_STATE_SCAN"), - (PUINT_8)DISP_STRING("P2P_STATE_AP_CHANNEL_DETECT"), - (PUINT_8)DISP_STRING("P2P_STATE_REQING_CHANNEL"), - (PUINT_8)DISP_STRING("P2P_STATE_CHNL_ON_HAND"), - (PUINT_8)DISP_STRING("P2P_STATE_GC_JOIN") -}; -/*lint -restore */ -#endif /* DBG */ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/* p2pStateXXX : Processing P2P FSM related action. - * p2pFSMXXX : Control P2P FSM flow. - * p2pFuncXXX : Function for doing one thing. - */ -VOID -p2pFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - ASSERT_BREAK(prP2pFsmInfo != NULL); - - LINK_INITIALIZE(&(prP2pFsmInfo->rMsgEventQueue)); - LINK_INITIALIZE(&(prP2pBssInfo->rStaRecOfClientList)); - - prP2pFsmInfo->eCurrentState = prP2pFsmInfo->ePreviousState = P2P_STATE_IDLE; - prP2pFsmInfo->prTargetBss = NULL; - - cnmTimerInitTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (PFN_MGMT_TIMEOUT_FUNC)p2pFsmRunEventFsmTimeout, - (UINT_32)prP2pFsmInfo); - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - //4 <2.1> Initiate BSS_INFO_T - Setup HW ID - prP2pBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; - prP2pBssInfo->ucHwDefaultFixedRateCode = RATE_OFDM_6M; - - - prP2pBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prP2pBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prP2pBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - - prP2pBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prP2pBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - rateGetDataRatesFromRateSet(prP2pBssInfo->u2OperationalRateSet, - prP2pBssInfo->u2BSSBasicRateSet, - prP2pBssInfo->aucAllSupportedRates, - &prP2pBssInfo->ucAllSupportedRatesLen); - - prP2pBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prP2pBssInfo->prBeacon) { - prP2pBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prP2pBssInfo->prBeacon->ucStaRecIndex = 0xFF; /* NULL STA_REC */ - prP2pBssInfo->prBeacon->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else { - /* Out of memory. */ - ASSERT(FALSE); - } - - prP2pBssInfo->eCurrentOPMode = OP_MODE_NUM; - - prP2pBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prP2pBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; - prP2pBssInfo->ucPrimaryChannel = P2P_DEFAULT_LISTEN_CHANNEL; - prP2pBssInfo->eBand = BAND_2G4; - prP2pBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (prAdapter->rWifiVar.fgSupportQoS) { - prP2pBssInfo->fgIsQBSS = TRUE; - } - else { - prP2pBssInfo->fgIsQBSS = FALSE; - } - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - return; -} /* p2pFsmInit */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to uninitialize the value in P2P_FSM_INFO_T for -* P2P FSM operation -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DEBUGFUNC("p2pFsmUninit()"); - DBGLOG(P2P, INFO, ("->p2pFsmUninit()\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - p2pFuncSwitchOPMode(prAdapter, prP2pBssInfo, OP_MODE_P2P_DEVICE, TRUE); - - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - p2pStateAbort_IDLE(prAdapter, prP2pFsmInfo, P2P_STATE_NUM); - - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - wlanAcquirePowerControl(prAdapter); - - /* Release all pending CMD queue. */ - DBGLOG(P2P, TRACE, ("p2pFsmUninit: wlanProcessCommandQueue, num of element:%d\n", prAdapter->prGlueInfo->rCmdQueue.u4NumElem)); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - - wlanReleasePowerControl(prAdapter); - - /* Release pending mgmt frame, - * mgmt frame may be pending by CMD without resource. - */ - kalClearMgmtFramesByNetType(prAdapter->prGlueInfo, NETWORK_TYPE_P2P_INDEX); - - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - if (prP2pBssInfo->prBeacon) { - cnmMgtPktFree(prAdapter, prP2pBssInfo->prBeacon); - prP2pBssInfo->prBeacon = NULL; - } - - } while (FALSE); - - return; - -} /* end of p2pFsmUninit() */ - -VOID -p2pFsmStateTransition ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - BOOLEAN fgIsTransOut = (BOOLEAN)FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (!IS_BSS_ACTIVE(prP2pBssInfo)) { - if (!cnmP2PIsPermitted(prAdapter)) { - return; - } - - SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - fgIsTransOut = fgIsTransOut?FALSE:TRUE; - - if (!fgIsTransOut) { - DBGLOG(P2P, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugP2pState[prP2pFsmInfo->eCurrentState], - apucDebugP2pState[eNextState])); - - /* Transition into current state. */ - prP2pFsmInfo->ePreviousState = prP2pFsmInfo->eCurrentState; - prP2pFsmInfo->eCurrentState = eNextState; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - if (fgIsTransOut) { - - p2pStateAbort_IDLE(prAdapter, - prP2pFsmInfo, - eNextState); - } - else { - fgIsTransOut = p2pStateInit_IDLE(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &eNextState); - } - - break; - case P2P_STATE_SCAN: - if (fgIsTransOut) { - - // Scan done / scan canceled. - p2pStateAbort_SCAN(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial scan request. - p2pStateInit_SCAN(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_AP_CHANNEL_DETECT: - if (fgIsTransOut) { - // Scan done - // Get sparse channel result. - p2pStateAbort_AP_CHANNEL_DETECT(prAdapter, - prP2pFsmInfo, - prP2pSpecificBssInfo, - eNextState); - } - - else { - // Initial passive scan request. - p2pStateInit_AP_CHANNEL_DETECT(prAdapter, prP2pFsmInfo); - } - - break; - case P2P_STATE_REQING_CHANNEL: - if (fgIsTransOut) { - - // Channel on hand / Channel canceled. - p2pStateAbort_REQING_CHANNEL(prAdapter, prP2pFsmInfo, eNextState); - } - else { - // Initial channel request. - p2pFuncAcquireCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - break; - case P2P_STATE_CHNL_ON_HAND: - if (fgIsTransOut) { - p2pStateAbort_CHNL_ON_HAND(prAdapter, prP2pFsmInfo, prP2pBssInfo, eNextState); - } - else { - // Initial channel ready. - // Send channel ready event. - // Start a FSM timer. - p2pStateInit_CHNL_ON_HAND(prAdapter, prP2pBssInfo, prP2pFsmInfo); - } - - break; - case P2P_STATE_GC_JOIN: - if (fgIsTransOut) { - - // Join complete / join canceled. - p2pStateAbort_GC_JOIN(prAdapter, - prP2pFsmInfo, - &(prP2pFsmInfo->rJoinInfo), - eNextState); - } - else { - ASSERT(prP2pFsmInfo->prTargetBss != NULL); - - // Send request to SAA module. - p2pStateInit_GC_JOIN(prAdapter, - prP2pFsmInfo, - prP2pBssInfo, - &(prP2pFsmInfo->rJoinInfo), - prP2pFsmInfo->prTargetBss); - } - - break; - default: - break; - } - - } while (fgIsTransOut); - -} /* p2pFsmStateTransition */ - - -VOID -p2pFsmRunEventSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchOpMode = (P_MSG_P2P_SWITCH_OP_MODE_T)prMsgHdr; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwitchOpMode != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventSwitchOPMode\n")); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prSwitchOpMode->eOpMode >= OP_MODE_NUM) { - ASSERT(FALSE); - break; - } - - /* P2P Device / GC. */ - p2pFuncSwitchOPMode(prAdapter, - prP2pBssInfo, - prSwitchOpMode->eOpMode, - TRUE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventSwitchOPMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle scan done event during Device Discovery. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - P_MSG_SCN_SCAN_DONE prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - - /* This scan done event is either for "SCAN" phase or "SEARCH" state or "LISTEN" state. - * The scan done for SCAN phase & SEARCH state doesn't imply Device - * Discovery over. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Done Event\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)prMsgHdr; - - if (prScanDoneMsg->ucSeqNum != prScanReqInfo->ucSeqNumOfScnMsg) { - /* Scan Done message sequence number mismatch. - * Ignore this event. (P2P FSM issue two scan events.) - */ - /* The scan request has been cancelled. - * Ignore this message. It is possible. - */ - DBGLOG(P2P, TRACE, ("P2P Scan Don SeqNum:%d <-> P2P Fsm SCAN Msg:%d\n", - prScanDoneMsg->ucSeqNum, - prScanReqInfo->ucSeqNumOfScnMsg)); - - break; - } - - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_SCAN: - { - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - prScanReqInfo->fgIsAbort = FALSE; - - if (prConnReqInfo->fgIsConnRequest) { - - if ((prP2pFsmInfo->prTargetBss = p2pFuncKeepOnConnection(prAdapter, - &prP2pFsmInfo->rConnReqInfo, - &prP2pFsmInfo->rChnlReqInfo, - &prP2pFsmInfo->rScanReqInfo)) == NULL) { - eNextState = P2P_STATE_SCAN; - } - else { - eNextState = P2P_STATE_REQING_CHANNEL; - } - - } - else { - eNextState = P2P_STATE_IDLE; - } - - } - break; - case P2P_STATE_AP_CHANNEL_DETECT: - eNextState = P2P_STATE_REQING_CHANNEL; - break; - default: - /* Unexpected channel scan done event without being chanceled. */ - ASSERT(FALSE); - break; - } - - prScanReqInfo->fgIsScanRequest = FALSE; - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanDone */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when channel is granted by CNM module from FW. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventChGrant ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_CH_GRANT_T prMsgChGrant = (P_MSG_CH_GRANT_T)NULL; - UINT_8 ucTokenID = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Run Event Channel Grant\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMsgChGrant = (P_MSG_CH_GRANT_T)prMsgHdr; - ucTokenID = prMsgChGrant->ucTokenID; - prP2pFsmInfo->u4GrantInterval = prMsgChGrant->u4GrantInterval; - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (ucTokenID == prChnlReqInfo->ucSeqNumOfChReq) { - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_REQING_CHANNEL: - switch (prChnlReqInfo->eChannelReqType) { - case CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL: - eNextState = P2P_STATE_CHNL_ON_HAND; - break; - case CHANNEL_REQ_TYPE_GC_JOIN_REQ: - eNextState = P2P_STATE_GC_JOIN; - break; - case CHANNEL_REQ_TYPE_GO_START_BSS: - eNextState = P2P_STATE_IDLE; - break; - default: - break; - } - - p2pFsmStateTransition(prAdapter, - prP2pFsmInfo, - eNextState); - break; - default: - /* Channel is granted under unexpected state. - * Driver should cancel channel privileagea before leaving the states. - */ - ASSERT(FALSE); - break; - } - - } - else { - /* Channel requsted, but released. */ - ASSERT(!prChnlReqInfo->fgIsChannelRequested); - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventChGrant */ - - -VOID -p2pFsmRunEventChannelRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - ENUM_P2P_STATE_T eNextState = P2P_STATE_NUM; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pChnlReqMsg = (P_MSG_P2P_CHNL_REQUEST_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelRequest\n")); - - /* Special case of time renewing for same frequency. */ - if ((prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND) && - (prChnlReqInfo->ucReqChnlNum == prP2pChnlReqMsg->rChannelInfo.ucChannelNum) && - (prChnlReqInfo->eBand == prP2pChnlReqMsg->rChannelInfo.eBand) && - (prChnlReqInfo->eChnlSco == prP2pChnlReqMsg->eChnlSco)) { - - ASSERT(prChnlReqInfo->fgIsChannelRequested == TRUE); - ASSERT(prChnlReqInfo->eChannelReqType == CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; -#if 0//LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) - prChnlReqInfo->fgNeedIndSupp = prP2pChnlReqMsg->fgNeedIndSupp; -#endif - /* Re-enter the state. */ - eNextState = P2P_STATE_CHNL_ON_HAND; - } - else { - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - prChnlReqInfo->u8Cookie = prP2pChnlReqMsg->u8Cookie; /* Cookie can only be assign after abort.(for indication) */ - prChnlReqInfo->ucReqChnlNum = prP2pChnlReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prP2pChnlReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prP2pChnlReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = prP2pChnlReqMsg->u4Duration; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL; -#if 0//LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) - prChnlReqInfo->fgNeedIndSupp = prP2pChnlReqMsg->fgNeedIndSupp; -#endif - eNextState = P2P_STATE_REQING_CHANNEL; - } - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, eNextState); - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelRequest */ - - -VOID -p2pFsmRunEventChannelAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prChnlAbortMsg = (P_MSG_P2P_CHNL_ABORT_T)prMsgHdr; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventChannelAbort\n")); - - if ((prChnlAbortMsg->u8Cookie == prChnlReqInfo->u8Cookie) && - (prChnlReqInfo->fgIsChannelRequested)) { - - ASSERT((prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL || - (prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND))); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventChannelAbort */ - - - -VOID -p2pFsmRunEventScanRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - UINT_32 u4ChnlListSize = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pScanReqMsg = (P_MSG_P2P_SCAN_REQUEST_T)prMsgHdr; - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanRequest\n")); - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - ASSERT(prScanReqInfo->fgIsScanRequest == FALSE); - - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - - // Channel List - prScanReqInfo->ucNumChannelList = prP2pScanReqMsg->u4NumChannel; - DBGLOG(P2P, TRACE, ("Scan Request Channel List Number: %d\n", prScanReqInfo->ucNumChannelList)); - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - DBGLOG(P2P, TRACE, ("Channel List Number Overloaded: %d, change to: %d\n", - prScanReqInfo->ucNumChannelList, - MAXIMUM_OPERATION_CHANNEL_LIST)); - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - u4ChnlListSize = sizeof(RF_CHANNEL_INFO_T) * prScanReqInfo->ucNumChannelList; - kalMemCopy(prScanReqInfo->arScanChannelList, prP2pScanReqMsg->arChannelListInfo, u4ChnlListSize); - - // TODO: I only take the first SSID. Multiple SSID may be needed in the future. - // SSID - if (prP2pScanReqMsg->i4SsidNum >= 1) { - - kalMemCopy(&(prScanReqInfo->rSsidStruct), - prP2pScanReqMsg->prSSID, - sizeof(P2P_SSID_STRUCT_T)); - } - else { - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - } - - // IE Buffer - kalMemCopy(prScanReqInfo->aucIEBuf, - prP2pScanReqMsg->pucIEBuf, - prP2pScanReqMsg->u4IELen); - - prScanReqInfo->u4BufLength = prP2pScanReqMsg->u4IELen; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - -} /* p2pFsmRunEventScanRequest */ - - -VOID -p2pFsmRunEventScanAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventScanAbort\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventScanAbort */ - - - - - -VOID -p2pFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventAbort\n")); - - if (prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_SCAN) { - - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->fgIsAbort = TRUE; - } - else if (prP2pFsmInfo->eCurrentState == P2P_STATE_REQING_CHANNEL) { - /* 2012/08/06: frog - * Prevent Start GO. - */ - prP2pBssInfo->eIntendOPMode = OP_MODE_NUM; - } - - // For other state, is there any special action that should be take before leaving? - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - else { - /* P2P State IDLE. */ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventAbort */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle FSM Timeout. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventFsmTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)u4Param; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - DBGLOG(P2P, TRACE, ("P2P FSM Timeout Event\n")); - - switch (prP2pFsmInfo->eCurrentState) { - case P2P_STATE_IDLE: - { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - if (prChnlReqInfo->fgIsChannelRequested) { - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - else if (IS_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - break; - -// case P2P_STATE_SCAN: -// break; -// case P2P_STATE_AP_CHANNEL_DETECT: -// break; -// case P2P_STATE_REQING_CHANNEL: -// break; - case P2P_STATE_CHNL_ON_HAND: - { - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - break; -// case P2P_STATE_GC_JOIN: -// break; - default: - break; - } - - } while (FALSE); - - return; -} /* p2pFsmRunEventFsmTimeout */ - -VOID -p2pFsmRunEventMgmtFrameTx ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventMgmtFrameTx\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtTxMsg = (P_MSG_P2P_MGMT_TX_REQUEST_T)prMsgHdr; - - p2pFuncTxMgmtFrame(prAdapter, - &prP2pFsmInfo->rMgmtTxInfo, - prMgmtTxMsg->prMgmtMsduInfo, - prMgmtTxMsg->u8Cookie); - - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtTx */ - - -VOID -p2pFsmRunEventStartAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStartAP\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)prMsgHdr; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - - if (prP2pStartAPMsg->u4BcnInterval) { - DBGLOG(P2P, TRACE, ("Beacon interval updated to :%ld \n", prP2pStartAPMsg->u4BcnInterval)); - prP2pBssInfo->u2BeaconInterval = (UINT_16)prP2pStartAPMsg->u4BcnInterval; - } - else if (prP2pBssInfo->u2BeaconInterval == 0) { - prP2pBssInfo->u2BeaconInterval = DOT11_BEACON_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u4DtimPeriod) { - DBGLOG(P2P, TRACE, ("DTIM interval updated to :%ld \n", prP2pStartAPMsg->u4DtimPeriod)); - prP2pBssInfo->ucDTIMPeriod = (UINT_8)prP2pStartAPMsg->u4DtimPeriod; - } - else if (prP2pBssInfo->ucDTIMPeriod == 0) { - prP2pBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - } - - if (prP2pStartAPMsg->u2SsidLen != 0) { - kalMemCopy(prP2pBssInfo->aucSSID, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - kalMemCopy(prP2pSpecificBssInfo->aucGroupSsid, prP2pStartAPMsg->aucSsid, prP2pStartAPMsg->u2SsidLen); - prP2pBssInfo->ucSSIDLen = prP2pSpecificBssInfo->u2GroupSsidLen = prP2pStartAPMsg->u2SsidLen; - } - - - prP2pBssInfo->eHiddenSsidType = prP2pStartAPMsg->ucHiddenSsidType; - - - // TODO: JB - /* Privacy & inactive timeout. */ - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eIntendOPMode != OP_MODE_NUM)) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - ENUM_P2P_STATE_T eNextState = P2P_STATE_SCAN; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - - if(prP2pFsmInfo->eCurrentState != P2P_STATE_SCAN && - prP2pFsmInfo->eCurrentState != P2P_STATE_IDLE) { - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - } - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Leave IDLE state. */ - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - // sync with firmware - //DBGLOG(P2P, INFO, ("Activate P2P Network. \n")); - //nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - /* Key to trigger P2P FSM to allocate channel for AP mode. */ - prP2pBssInfo->eIntendOPMode = OP_MODE_ACCESS_POINT; - - /* Sparse Channel to decide which channel to use. */ - if ((cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) && (prP2pConnSettings->ucOperatingChnl == 0)) { - // Sparse Channel Detection using passive mode. - eNextState = P2P_STATE_AP_CHANNEL_DETECT; - } - else { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - -#if 1 - /* 2012-01-27: frog - Channel set from upper layer is the first priority. */ - /* Becuase the channel & beacon is decided by p2p_supplicant. */ - if (prP2pConnSettings->ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - - else { - ASSERT(ucPreferedChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } -#else - if (ucPreferedChnl) { - prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prP2pSpecificBssInfo->eRfBand = eBand; - } - else { - ASSERT(prP2pConnSettings->ucOperatingChnl != 0); - prP2pSpecificBssInfo->ucPreferredChannel = prP2pConnSettings->ucOperatingChnl; - prP2pSpecificBssInfo->eRfBand = prP2pConnSettings->eBand; - } - -#endif - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - } - - /* If channel is specified, use active scan to shorten the scan time. */ - p2pFsmStateTransition(prAdapter, - prAdapter->rWifiVar.prP2pFsmInfo, - eNextState); - } - - - - } while (FALSE); - - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } -extern bool start_beacon; -#ifdef CFG_DUAL_ANTENNA - if(start_beacon == true) - { - if(p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) - wifi2bwcs_connection_event_ind_handler(prAdapter->prGlueInfo, WIFI_EVENT_SOFTAP_CONN_NEW); - else - wifi2bwcs_connection_event_ind_handler(prAdapter->prGlueInfo, WIFI_EVENT_P2P_GO_CONN_NEW); - start_beacon = false; - } -#endif - - return; -} /* p2pFsmRunEventStartAP */ - -VOID -p2pFsmRunEventNetDeviceRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_NETDEV_REGISTER_T prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventNetDeviceRegister\n")); - - prNetDevRegisterMsg = (P_MSG_P2P_NETDEV_REGISTER_T)prMsgHdr; - - if (prNetDevRegisterMsg->fgIsEnable) { - p2pSetMode((prNetDevRegisterMsg->ucMode == 1)?TRUE:FALSE); - - if (p2pLaunch(prAdapter->prGlueInfo)) { - ASSERT(prAdapter->fgIsP2PRegistered); - } - - } - else { - if (prAdapter->fgIsP2PRegistered) { - p2pRemove(prAdapter->prGlueInfo); - } - - } - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventNetDeviceRegister */ - - -VOID -p2pFsmRunEventUpdateMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_UPDATE_T prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventUpdateMgmtFrame\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pMgmtFrameUpdateMsg = (P_MSG_P2P_MGMT_FRAME_UPDATE_T)prMsgHdr; - - switch (prP2pMgmtFrameUpdateMsg->eBufferType) { - case ENUM_FRAME_TYPE_EXTRA_IE_BEACON: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP: - break; - case ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP: - break; - case ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE: - break; - case ENUM_FRAME_TYPE_BEACON_TEMPLATE: - break; - default: - break; - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventUpdateMgmtFrame */ - - -VOID -p2pFsmRunEventBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_BEACON_UPDATE_T prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconUpdate\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)prMsgHdr; - - - p2pFuncBeaconUpdate(prAdapter, - prP2pBssInfo, - &prP2pFsmInfo->rBcnContentInfo, - prBcnUpdateMsg->pucBcnHdr, - prBcnUpdateMsg->u4BcnHdrLen, - prBcnUpdateMsg->pucBcnBody, - prBcnUpdateMsg->u4BcnBodyLen); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) && - (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - //nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - - - } while (FALSE); - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - -} /* p2pFsmRunEventBeaconUpdate */ - - -VOID -p2pFsmRunEventStopAP ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventStopAP\n")); - - if ((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) - && (prP2pBssInfo->eIntendOPMode == OP_MODE_NUM)) { - /* AP is created, Beacon Update. */ - - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); - - DBGLOG(P2P, TRACE, ("Stop Beaconing\n")); - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - - - // 20120118: Moved to p2pFuncSwitchOPMode(). - //UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Enter IDLE state. */ - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - DBGLOG(P2P, INFO, ("Re activate P2P Network. \n")); - nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - -#if CFG_SUPPORT_WFD - p2pFsmRunEventWfdSettingUpdate(prAdapter, NULL); -#endif - - p2pFsmRunEventAbort(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo); -// p2pFsmStateTransition(prAdapter, prAdapter->rWifiVar.prP2pFsmInfo, P2P_STATE_IDLE); - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - printk("p2pFsmRunEventStopAP->p2pFsmRunEventStopAP\n"); - -} /* p2pFsmRunEventStopAP */ - -VOID -p2pFsmRunEventConnectionRequest ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)prMsgHdr; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventConnectionRequest\n")); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - SET_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - - // Make sure the state is in IDLE state. - p2pFsmRunEventAbort(prAdapter, prP2pFsmInfo); - - // Update connection request information. - prConnReqInfo->fgIsConnRequest = TRUE; - COPY_MAC_ADDR(prConnReqInfo->aucBssid, prConnReqMsg->aucBssid); - kalMemCopy(&(prConnReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - kalMemCopy(prConnReqInfo->aucIEBuf, prConnReqMsg->aucIEBuf, prConnReqMsg->u4IELen); - prConnReqInfo->u4BufLength = prConnReqMsg->u4IELen; - - /* Find BSS Descriptor first. */ - prP2pFsmInfo->prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prP2pFsmInfo->prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_SPECIFIED; - prScanReqInfo->arScanChannelList[0].ucChannelNum = prConnReqMsg->rChannelInfo.ucChannelNum; - kalMemCopy(&(prScanReqInfo->rSsidStruct), &(prConnReqMsg->rSsid), sizeof(P2P_SSID_STRUCT_T)); - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prConnReqMsg->rChannelInfo.ucChannelNum; - prChnlReqInfo->eBand = prConnReqMsg->rChannelInfo.eBand; - prChnlReqInfo->eChnlSco = prConnReqMsg->eChnlSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_REQING_CHANNEL); - } - - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventConnectionRequest */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to handle Connection Request from Supplicant. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventConnectionAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - //P_STA_RECORD_T prTargetStaRec = (P_STA_RECORD_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventConnectionAbort: Connection Abort.\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)prMsgHdr; - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - { - UINT_8 aucBCBSSID[] = BC_BSSID; - - if (!prP2pBssInfo->prStaRecOfAP) { - DBGLOG(P2P, TRACE, ("GO's StaRec is NULL\n")); - break; - } - if (UNEQUAL_MAC_ADDR(prP2pBssInfo->prStaRecOfAP->aucMacAddr, prDisconnMsg->aucTargetID) && - UNEQUAL_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCBSSID)) { - DBGLOG(P2P, TRACE, ("Unequal MAC ADDR ["MACSTR":"MACSTR"]\n", - MAC2STR(prP2pBssInfo->prStaRecOfAP->aucMacAddr), - MAC2STR(prDisconnMsg->aucTargetID))); - break; - } - - - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, NULL, NULL, 0, 0); - - /* Stop rejoin timer if it is started. */ - // TODO: If it has. - - p2pFuncDisconnect(prAdapter, prP2pBssInfo->prStaRecOfAP, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prP2pBssInfo->prStaRecOfAP; - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - SET_NET_PWR_STATE_IDLE(prAdapter, NETWORK_TYPE_P2P_INDEX); - - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - - } - break; - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - /* Search specific client device, and disconnect. */ - /* 1. Send deauthentication frame. */ - /* 2. Indication: Device disconnect. */ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - DBGLOG(P2P, TRACE, ("Disconnecting with Target ID: "MACSTR"\n", MAC2STR(prDisconnMsg->aucTargetID))); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prDisconnMsg->aucTargetID)) { - - DBGLOG(P2P, TRACE, ("Disconnecting: "MACSTR"\n", MAC2STR(prCurrStaRec->aucMacAddr))); - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Glue layer indication. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - /* Send deauth & do indication. */ - p2pFuncDisconnect(prAdapter, prCurrStaRec, prDisconnMsg->fgSendDeauth, prDisconnMsg->u2ReasonCode); - - //prTargetStaRec = prCurrStaRec; - - break; - } - } - - } - break; - case OP_MODE_P2P_DEVICE: - default: - //ASSERT(FALSE); - break; - } - - } while (FALSE); - - //20120830 moved into p2pFuncDisconnect() - //if ((!prDisconnMsg->fgSendDeauth) && (prTargetStaRec)) { - // cnmStaRecFree(prAdapter, prTargetStaRec, TRUE); - //} - - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} /* p2pFsmRunEventConnectionAbort */ - - -VOID -p2pFsmRunEventDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - - // TODO: - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventDissolve\n")); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; -} -WLAN_STATUS -p2pFsmRunEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prMsduInfo != NULL)); - - DBGLOG(P2P, TRACE, ("Deauth TX Done\n")); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Station Record NULL, Index:%d\n", prMsduInfo->ucStaRecIndex)); - break; - } - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - /**/ - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - /* Because the eConnectionState is changed before Deauth TxDone. Dont Check eConnectionState */ - //if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - //} - - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; -} /* p2pFsmRunEventDeauthTxDone */ - - -WLAN_STATUS -p2pFsmRunEventMgmtFrameTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo = (P_P2P_MGMT_TX_REQ_INFO_T)NULL; - BOOLEAN fgIsSuccess = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prMgmtTxReqInfo = &(prP2pFsmInfo->rMgmtTxInfo); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Fail, Status:%d.\n", rTxDoneStatus)); - } - else { - fgIsSuccess = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt Frame TX Done.\n")); - } - - - if (prMgmtTxReqInfo->prMgmtTxMsdu == prMsduInfo) { - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - fgIsSuccess, - prMsduInfo->prPacket, - (UINT_32)prMsduInfo->u2FrameLength); - - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* p2pFsmRunEventMgmtFrameTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when JOIN complete message event is received from SAA. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_MSG_JOIN_COMP_T prJoinCompMsg = (P_MSG_JOIN_COMP_T)NULL; - P_SW_RFB_T prAssocRspSwRfb = (P_SW_RFB_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - DBGLOG(P2P, TRACE, ("P2P Join Complete\n")); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinCompMsg = (P_MSG_JOIN_COMP_T)prMsgHdr; - prAssocRspSwRfb = prJoinCompMsg->prSwRfb; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - prStaRec = prJoinCompMsg->prStaRec; - - /* Check SEQ NUM */ - if (prJoinCompMsg->ucSeqNum == prJoinInfo->ucSeqNumOfReqMsg) { - ASSERT(prStaRec == prJoinInfo->prTargetStaRec); - prJoinInfo->fgIsJoinComplete = TRUE; - - if (prJoinCompMsg->rJoinStatus == WLAN_STATUS_SUCCESS) { - - //4 <1.1> Change FW's Media State immediately. - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - //4 <1.2> Deactivate previous AP's STA_RECORD_T in Driver if have. - if ((prP2pBssInfo->prStaRecOfAP) && - (prP2pBssInfo->prStaRecOfAP != prStaRec)) { - cnmStaRecChangeState(prAdapter, prP2pBssInfo->prStaRecOfAP, STA_STATE_1); - - cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - prP2pBssInfo->prStaRecOfAP = NULL; - } - - //4 <1.3> Update BSS_INFO_T - p2pFuncUpdateBssInfoForJOIN(prAdapter, prP2pFsmInfo->prTargetBss, prStaRec, prAssocRspSwRfb); - - //4 <1.4> Activate current AP's STA_RECORD_T in Driver. - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - -#if CFG_SUPPORT_P2P_RSSI_QUERY - //<1.5> Update RSSI if necessary - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, (INT_8)(RCPI_TO_dBm(prStaRec->ucRCPI)), 0); -#endif - - //4 <1.6> Indicate Connected Event to Host immediately. - /* Require BSSID, Association ID, Beacon Interval.. from AIS_BSS_INFO_T */ - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_CONNECTED, prStaRec->aucMacAddr); - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - - } - else { - /* Join Fail*/ - //4 <2.1> Redo JOIN process with other Auth Type if possible - if (p2pFuncRetryJOIN(prAdapter, prStaRec, prJoinInfo) == FALSE) { - P_BSS_DESC_T prBssDesc; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - prBssDesc = prP2pFsmInfo->prTargetBss; - - ASSERT(prBssDesc); - ASSERT(prBssDesc->fgIsConnecting); - - prBssDesc->fgIsConnecting = FALSE; - - if( prStaRec->ucJoinFailureCount >=3) { - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - &prP2pFsmInfo->rConnReqInfo, - prJoinInfo->aucIEBuf, - prJoinInfo->u4BufLength, - prStaRec->u2StatusCode); - } - else { - /* Sometime the GO is not ready to response auth. Connect it again*/ - prP2pFsmInfo->prTargetBss = NULL; - } - - - } - - } - } - } - - if (prAssocRspSwRfb) { - nicRxReturnRFB(prAdapter, prAssocRspSwRfb); - } - - if (prP2pFsmInfo->eCurrentState == P2P_STATE_GC_JOIN) { - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* Return to IDLE state. */ - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - } - else { - //p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_IDLE); - /* one more scan */ - p2pFsmStateTransition(prAdapter, prP2pFsmInfo, P2P_STATE_SCAN); - } - } - - } while (FALSE); - - if (prMsgHdr) { - cnmMemFree(prAdapter, prMsgHdr); - } - - return; - -} /* p2pFsmRunEventJoinComplete */ - - - -VOID -p2pFsmRunEventMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsgHdr != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo == NULL) { - break; - } - - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)prMsgHdr; - - p2pFuncMgmtFrameRegister(prAdapter, - prMgmtFrameRegister->u2FrameType, - prMgmtFrameRegister->fgIsRegister, - &prP2pFsmInfo->u4P2pPacketFilter); - - - } while (FALSE); - - if (prMsgHdr) { - //cnmMemFree(prAdapter, prMsgHdr); - kfree(prMsgHdr); - } - - return; - -} /* p2pFsmRunEventMgmtFrameRegister */ - - - - -#if 0 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#endif - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDeauthentication ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - if (!prStaRec) { - break; - } - - - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - if (prStaRec->ucStaState == STA_STATE_1) { - break; - } - - DBGLOG(P2P, TRACE, ("RX Deauth\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DEAUTH_FRAME_T prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - prStaRec->u2ReasonCode = u2ReasonCode; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDeauthFrame->aucInfoElem, - u2IELength, - u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (authProcessRxDeauthFrame(prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - /* Findout why someone sent deauthentication frame to us. */ - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("Deauth Reason:%d\n", u2ReasonCode)); - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDeauthentication */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is call when RX deauthentication frame from the AIR. -* If we are under STA mode, we would go back to P2P Device. -* If we are under AP mode, we would stay in AP mode until disconnect event from HOST. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxDisassociation ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2ReasonCode = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - if (prStaRec == NULL) { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - } - - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prStaRec->ucStaState == STA_STATE_1) { - - break; - } - - DBGLOG(P2P, TRACE, ("RX Disassoc\n")); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_WLAN_DISASSOC_FRAME_T prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T)prSwRfb->pvHeader; - UINT_16 u2IELength = 0; - - ASSERT(prP2pBssInfo->prStaRecOfAP == prStaRec); - - if (prP2pBssInfo->prStaRecOfAP != prStaRec) { - break; - } - - - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + REASON_CODE_FIELD_LEN); - - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - prDisassocFrame->aucInfoElem, - u2IELength, - prStaRec->u2ReasonCode); - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, prStaRec->u2ReasonCode); - - } - break; - case OP_MODE_ACCESS_POINT: - /* Delete client from client list. */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prP2pBssInfo->aucBSSID, - &u2ReasonCode) == WLAN_STATUS_SUCCESS) { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_STA_RECORD_T prCurrStaRec = (P_STA_RECORD_T)NULL; - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - prCurrStaRec = LINK_ENTRY(prLinkEntry, STA_RECORD_T, rLinkEntry); - - ASSERT(prCurrStaRec); - - if (EQUAL_MAC_ADDR(prCurrStaRec->aucMacAddr, prStaRec->aucMacAddr)) { - - /* Remove STA from client list. */ - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCurrStaRec->rLinkEntry); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - - /* Indicate disconnect to Host. */ - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, u2ReasonCode); - - break; - } - } - } - break; - case OP_MODE_P2P_DEVICE: - default: - ASSERT(FALSE); - break; - } - - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxDisassociation */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called when a probe request frame is received. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is accepted & need cancel scan request. -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFsmRunEventRxProbeResponseFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_MAC_MGMT_HEADER_T prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL) && (prBssDesc != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - /* There is a connection request. */ - prMgtHdr = (P_WLAN_MAC_MGMT_HEADER_T)prSwRfb->pvHeader; - - } while (FALSE); - - return; -} /* p2pFsmRunEventRxProbeResponseFrame */ - - - - - - -VOID -p2pFsmRunEventBeaconTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("p2pFsmRunEventBeaconTimeout: Beacon Timeout\n")); - - /* Only client mode would have beacon lost event. */ - ASSERT(prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE); - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* Indicate disconnect to Host. */ - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DISASSOC_INACTIVITY); - - if (prP2pBssInfo->prStaRecOfAP != NULL) { - P_STA_RECORD_T prStaRec = prP2pBssInfo->prStaRecOfAP; - - prP2pBssInfo->prStaRecOfAP = NULL; - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_DISASSOC_LEAVING_BSS); - - //20120830 moved into p2pFuncDisconnect() - //cnmStaRecFree(prAdapter, prP2pBssInfo->prStaRecOfAP, TRUE); - - - } - } - } while (FALSE); - - return; -} /* p2pFsmRunEventBeaconTimeout */ - - - - -#if CFG_SUPPORT_WFD -VOID -p2pFsmRunEventWfdSettingUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgSettings = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - WLAN_STATUS rStatus; - - - DBGLOG(P2P, INFO,("p2pFsmRunEventWfdSettingUpdate\n")); - - do { - ASSERT_BREAK((prAdapter != NULL)); - - if (prMsgHdr != NULL) { - prMsgWfdCfgSettings = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)prMsgHdr; - prWfdCfgSettings = prMsgWfdCfgSettings->prWfdCfgSettings; - } - else { - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - } - - DBGLOG(P2P, INFO,("WFD Enalbe %x info %x state %x flag %x adv %x\n", - prWfdCfgSettings->ucWfdEnable, - prWfdCfgSettings->u2WfdDevInfo, - prWfdCfgSettings->u4WfdState, - prWfdCfgSettings->u4WfdFlag, - prWfdCfgSettings->u4WfdAdvancedFlag)); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_WFD_CTRL, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, - NULL, /* pfCmdTimeoutHandler */ - sizeof(WFD_CFG_SETTINGS_T), /* u4SetQueryInfoLen */ - (PUINT_8)prWfdCfgSettings, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - } while (FALSE); - - return; - -} -/* p2pFsmRunEventWfdSettingUpdate */ - -#endif - - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - // TODO: - } - - } while (FALSE); - - return; - -} /* end of p2pGenerateP2P_IEForAssocReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Probe Request frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerateP2P_IEForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - ASSERT(prAdapter); - ASSERT(pucBuf); - - // TODO: - - return; - -} /* end of p2pGenerateP2P_IEForProbReq() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pCalculateP2P_IELenForProbeReq ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - // TODO: - - return 0; - -} /* end of p2pCalculateP2P_IELenForProbeReq() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Tx Fail of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pRunEventAAATxFail ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - ASSERT(prStaRec); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - p2pFuncDisconnect(prAdapter, prStaRec, FALSE, REASON_CODE_UNSPECIFIED); - - - //20120830 moved into p2puUncDisconnect. - //cnmStaRecFree(prAdapter, prStaRec, TRUE); - - return; -} /* p2pRunEventAAATxFail */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAAComplete ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaState; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - eOriMediaState = prP2pBssInfo->eConnectionState; - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem > P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - rStatus = WLAN_STATUS_RESOURCES; - break; - } - - bssAddStaRecToClientList(prAdapter, prP2pBssInfo, prStaRec); - - prStaRec->u2AssocId = bssAssignAssocID(prStaRec); - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem > P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - rStatus = WLAN_STATUS_RESOURCES; - break; - } - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_CONNECTED); - - /* Update Connected state to FW. */ - if (eOriMediaState != prP2pBssInfo->eConnectionState) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAAComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will indiate the Event of Successful Completion of AAA Module. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRunEventAAASuccess ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - /* Glue layer indication. */ - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, TRUE); - - } while (FALSE); - - return rStatus; -} /* p2pRunEventAAASuccess */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -p2pRxPublicActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_PUBLIC_ACTION_FRAME_T prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - ASSERT(prSwRfb); - ASSERT(prAdapter); - - - - prPublicActionFrame = (P_P2P_PUBLIC_ACTION_FRAME_T)prSwRfb->pvHeader; - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - DBGLOG(P2P, TRACE, ("RX Public Action Frame Token:%d.\n", prPublicActionFrame->ucDialogToken)); - - if (prPublicActionFrame->ucCategory != CATEGORY_PUBLIC_ACTION) { - return rWlanStatus; - } - - switch (prPublicActionFrame->ucAction) { - case ACTION_PUBLIC_WIFI_DIRECT: - break; - case ACTION_GAS_INITIAL_REQUEST: - case ACTION_GAS_INITIAL_RESPONSE: - case ACTION_GAS_COMEBACK_REQUEST: - case ACTION_GAS_COMEBACK_RESPONSE: - break; - default: - break; - } - - return rWlanStatus; -} /* p2pRxPublicActionFrame */ - - - -WLAN_STATUS -p2pRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_P2P_ACTION_FRAME_T prP2pActionFrame = (P_P2P_ACTION_FRAME_T)NULL; - UINT_8 aucOui[3] = VENDOR_OUI_WFA_SPECIFIC; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pActionFrame = (P_P2P_ACTION_FRAME_T)prSwRfb->pvHeader; - - if (prP2pActionFrame->ucCategory != CATEGORY_VENDOR_SPECIFIC_ACTION) { - DBGLOG(P2P, TRACE, ("RX Action Frame but not vendor specific.\n")); - break; - } - - - if ((prP2pActionFrame->ucOuiType != VENDOR_OUI_TYPE_P2P) || - (prP2pActionFrame->aucOui[0] != aucOui[0]) || - (prP2pActionFrame->aucOui[1] != aucOui[1]) || - (prP2pActionFrame->aucOui[2] != aucOui[2])) { - DBGLOG(P2P, TRACE, ("RX Vendor Specific Action Frame but not P2P Type or not WFA OUI.\n")); - break; - } - - } while (FALSE); - - return rWlanStatus; -} /* p2pRxActionFrame */ - - -VOID -p2pProcessEvent_UpdateNOAParam ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucNetTypeIndex, - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam - ) -{ - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo; - UINT_32 i; - BOOLEAN fgNoaAttrExisted = FALSE; - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIndex]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - prP2pSpecificBssInfo->fgEnableOppPS = prEventUpdateNoaParam->fgEnableOppPS; - prP2pSpecificBssInfo->u2CTWindow = prEventUpdateNoaParam->u2CTWindow; - prP2pSpecificBssInfo->ucNoAIndex = prEventUpdateNoaParam->ucNoAIndex; - prP2pSpecificBssInfo->ucNoATimingCount = prEventUpdateNoaParam->ucNoATimingCount; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->fgEnableOppPS; - - - ASSERT(prP2pSpecificBssInfo->ucNoATimingCount <= P2P_MAXIMUM_NOA_COUNT); - - for (i = 0; i < prP2pSpecificBssInfo->ucNoATimingCount; i++) { - // in used - prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse = - prEventUpdateNoaParam->arEventNoaTiming[i].fgIsInUse; - // count - prP2pSpecificBssInfo->arNoATiming[i].ucCount = - prEventUpdateNoaParam->arEventNoaTiming[i].ucCount; - // duration - prP2pSpecificBssInfo->arNoATiming[i].u4Duration = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Duration; - // interval - prP2pSpecificBssInfo->arNoATiming[i].u4Interval = - prEventUpdateNoaParam->arEventNoaTiming[i].u4Interval; - // start time - prP2pSpecificBssInfo->arNoATiming[i].u4StartTime = - prEventUpdateNoaParam->arEventNoaTiming[i].u4StartTime; - - fgNoaAttrExisted |= prP2pSpecificBssInfo->arNoATiming[i].fgIsInUse; - } - - prP2pSpecificBssInfo->fgIsNoaAttrExisted = fgNoaAttrExisted; - - // update beacon content by the change - bssUpdateBeaconContent(prAdapter, ucNetTypeIndex); -} - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_func.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_func.c deleted file mode 100755 index 8feb6f545153..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_func.c +++ /dev/null @@ -1,3861 +0,0 @@ -#include "precomp.h" -#ifdef CFG_DUAL_ANTENNA -#include "mtk_porting.h" -#include "dual_ant_bwcs.h" -#endif - - -APPEND_VAR_ATTRI_ENTRY_T txAssocRspAttributesTable[] = { - { (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS) , NULL, p2pFuncAppendAttriStatusForAssocRsp } /* 0 */ // Status - ,{ (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING), NULL, p2pFuncAppendAttriExtListenTiming } /* 8 */ -}; - - -APPEND_VAR_IE_ENTRY_T txProbeRspIETable[] = { - { (ELEM_HDR_LEN + (RATE_NUM - ELEM_MAX_LEN_SUP_RATES)), NULL, bssGenerateExtSuppRate_IE } /* 50 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_ERP), NULL, rlmRspGenerateErpIE } /* 42 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP), NULL, rlmRspGenerateHtCapIE } /* 45 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP), NULL, rlmRspGenerateHtOpIE } /* 61 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_RSN), NULL, rsnGenerateRSNIE } /* 48 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_OBSS_SCAN), NULL, rlmRspGenerateObssScanIE } /* 74 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP), NULL, rlmRspGenerateExtCapIE } /* 127 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WPA), NULL, rsnGenerateWpaNoneIE } /* 221 */ - ,{ (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_PARAM), NULL, mqmGenerateWmmParamIE } /* 221 */ -}; - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Function for requesting scan. There is an option to do ACTIVE or PASSIVE scan. -* -* @param eScanType - Specify the scan type of the scan request. It can be an ACTIVE/PASSIVE -* Scan. -* eChannelSet - Specify the prefered channel set. -* A FULL scan would request a legacy full channel normal scan.(usually ACTIVE). -* A P2P_SOCIAL scan would scan 1+6+11 channels.(usually ACTIVE) -* A SPECIFIC scan would only 1/6/11 channels scan. (Passive Listen/Specific Search) -* ucChannelNum - A specific channel number. (Only when channel is specified) -* eBand - A specific band. (Only when channel is specified) -* -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncRequestScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - - P_MSG_SCN_SCAN_REQ prScanReq = (P_MSG_SCN_SCAN_REQ)NULL; - - DEBUGFUNC("p2pFuncRequestScan()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prScanReqInfo != NULL)); - - if (prScanReqInfo->eChannelSet == SCAN_CHANNEL_SPECIFIED) { - ASSERT_BREAK(prScanReqInfo->ucNumChannelList > 0); - DBGLOG(P2P, LOUD, ("P2P Scan Request Channel:%d\n", prScanReqInfo->arScanChannelList[0].ucChannelNum)); - } - - prScanReq = (P_MSG_SCN_SCAN_REQ)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - if (!prScanReq) { - ASSERT(0); // Can't trigger SCAN FSM - break; - } - - prScanReq->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_REQ; - prScanReq->ucSeqNum = ++prScanReqInfo->ucSeqNumOfScnMsg; - prScanReq->ucNetTypeIndex = (UINT_8)NETWORK_TYPE_P2P_INDEX; - prScanReq->eScanType = prScanReqInfo->eScanType; - prScanReq->eScanChannel = prScanReqInfo->eChannelSet; - prScanReq->u2IELen = 0; - - /* Copy IE for Probe Request. */ - kalMemCopy(prScanReq->aucIE, prScanReqInfo->aucIEBuf, prScanReqInfo->u4BufLength); - prScanReq->u2IELen = (UINT_16)prScanReqInfo->u4BufLength; - - prScanReq->u2ChannelDwellTime = prScanReqInfo->u2PassiveDewellTime; - - switch (prScanReqInfo->eChannelSet) { - case SCAN_CHANNEL_SPECIFIED: - { - UINT_32 u4Idx = 0; - P_RF_CHANNEL_INFO_T prDomainInfo = (P_RF_CHANNEL_INFO_T)prScanReqInfo->arScanChannelList; - - if (prScanReqInfo->ucNumChannelList > MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanReqInfo->ucNumChannelList = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - - for (u4Idx = 0; u4Idx < prScanReqInfo->ucNumChannelList; u4Idx++) { - prScanReq->arChnlInfoList[u4Idx].ucChannelNum = prDomainInfo->ucChannelNum; - prScanReq->arChnlInfoList[u4Idx].eBand = prDomainInfo->eBand; - prDomainInfo++; - } - - prScanReq->ucChannelListNum = prScanReqInfo->ucNumChannelList; - } - case SCAN_CHANNEL_FULL: - case SCAN_CHANNEL_2G4: - case SCAN_CHANNEL_P2P_SOCIAL: - { - UINT_8 aucP2pSsid[] = P2P_WILDCARD_SSID; - - COPY_SSID(prScanReq->aucSSID, - prScanReq->ucSSIDLength, - prScanReqInfo->rSsidStruct.aucSsid, - prScanReqInfo->rSsidStruct.ucSsidLen); - - /* For compatible. */ - if (EQUAL_SSID(aucP2pSsid, P2P_WILDCARD_SSID_LEN, prScanReq->aucSSID, prScanReq->ucSSIDLength)) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_P2P_WILDCARD; - } - else if (prScanReq->ucSSIDLength != 0) { - prScanReq->ucSSIDType = SCAN_REQ_SSID_SPECIFIED; - } - } - break; - default: - /* Currently there is no other scan channel set. */ - ASSERT(FALSE); - break; - } - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanReq, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncRequestScan */ - -VOID -p2pFuncCancelScan ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_SCAN_REQ_INFO_T prScanInfo - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prScanInfo != NULL)); - - if (!prScanInfo->fgIsScanRequest) { - break; - } - - - if (prScanInfo->ucSeqNumOfScnMsg) { - /* There is a channel privilege on hand. */ - DBGLOG(P2P, TRACE, ("P2P Cancel Scan\n")); - - prScanCancelMsg = (P_MSG_SCN_SCAN_CANCEL)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_CANCEL)); - if (!prScanCancelMsg) { - /* Buffer not enough, can not cancel scan request. */ - DBGLOG(P2P, TRACE, ("Buffer not enough, can not cancel scan.\n")); - ASSERT(FALSE); - break; - } - - prScanCancelMsg->rMsgHdr.eMsgId = MID_P2P_SCN_SCAN_CANCEL; - prScanCancelMsg->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prScanCancelMsg->ucSeqNum = prScanInfo->ucSeqNumOfScnMsg++; - prScanCancelMsg->fgIsChannelExt = FALSE; - prScanInfo->fgIsScanRequest = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prScanCancelMsg, - MSG_SEND_METHOD_BUF); - - - } - - - } while (FALSE); - - return; -} /* p2pFuncCancelScan */ - - -VOID -p2pFuncSwitchOPMode ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_OP_MODE_T eOpMode, - IN BOOLEAN fgSyncToFW - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (eOpMode < OP_MODE_NUM)); - - if (prP2pBssInfo->eCurrentOPMode != eOpMode) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to from %d, to %d.\n", prP2pBssInfo->eCurrentOPMode, eOpMode)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - p2pFuncDissolve(prAdapter, prP2pBssInfo, TRUE, REASON_CODE_DEAUTH_LEAVING_BSS); -printk("p2pFuncSwitchOPMode p2pFsmRunEventStopAP"); - p2pFsmRunEventStopAP(prAdapter, NULL); - break; - default: - break; - } - - - - prP2pBssInfo->eIntendOPMode = eOpMode; - prP2pBssInfo->eCurrentOPMode = eOpMode; - switch (eOpMode) { - case OP_MODE_INFRASTRUCTURE: - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to Client.\n")); - case OP_MODE_ACCESS_POINT: -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - /* Change interface address. */ - if (eOpMode == OP_MODE_ACCESS_POINT) { - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch to AP.\n")); - prP2pBssInfo->ucSSIDLen = 0; - } - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucInterfaceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucInterfaceAddress); - - - break; - case OP_MODE_P2P_DEVICE: - { - /* Change device address. */ - DBGLOG(P2P, TRACE, ("p2pFuncSwitchOPMode: Switch back to P2P Device.\n")); - -// if (!IS_BSS_ACTIVE(prP2pBssInfo)) { -// SET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucDeviceAddress); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAdapter->rWifiVar.aucDeviceAddress); - - - } - break; - default: -// if (IS_BSS_ACTIVE(prP2pBssInfo)) { -// UNSET_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX); - -// nicDeactivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); -// } - ASSERT(FALSE); - break; - } - - if (1) { - P2P_DISCONNECT_INFO rP2PDisInfo; - - rP2PDisInfo.ucRole = 2; - wlanSendSetQueryCmd(prAdapter, - CMD_ID_P2P_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(P2P_DISCONNECT_INFO), - (PUINT_8)&rP2PDisInfo, - NULL, - 0); - } - - - DBGLOG(P2P, TRACE, ("The device address is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucOwnMacAddr))); - DBGLOG(P2P, TRACE, ("The BSSID is changed to " MACSTR " \n", MAC2STR(prP2pBssInfo->aucBSSID))); - - /* Update BSS INFO to FW. */ - if ((fgSyncToFW) && (eOpMode != OP_MODE_ACCESS_POINT)) { - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - } - - } while (FALSE); - - return; -} /* p2pFuncSwitchOPMode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will start a P2P Group Owner and send Beacon Frames. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncStartGO ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN PUINT_8 pucSsidBuf, - IN UINT_8 ucSsidLen, - IN UINT_8 ucChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN BOOLEAN fgIsPureAP - ) -{ - do { - ASSERT_BREAK((prAdapter != NULL) && (prBssInfo != NULL)); - - //ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - DBGLOG(P2P, TRACE, ("p2pFuncStartGO:\n")); - - /* AP mode started. */ - p2pFuncSwitchOPMode(prAdapter, prBssInfo, prBssInfo->eIntendOPMode, FALSE); - - prBssInfo->eIntendOPMode = OP_MODE_NUM; - - //4 <1.1> Assign SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - pucSsidBuf, - ucSsidLen); - - DBGLOG(P2P, TRACE, ("GO SSID:%s \n", prBssInfo->aucSSID)); - - //4 <1.2> Clear current AP's STA_RECORD_T and current AID - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - prBssInfo->u2AssocId = 0; - - - //4 <1.3> Setup Channel, Band and Phy Attributes - prBssInfo->ucPrimaryChannel = ucChannelNum; - prBssInfo->eBand = eBand; - prBssInfo->eBssSCO = eSco; - - DBGLOG(P2P, TRACE, ("GO Channel:%d \n", ucChannelNum)); - - - if (prBssInfo->eBand == BAND_5G) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11A; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else if (fgIsPureAP) { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11BGN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - else { - prBssInfo->ucPhyTypeSet = (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11GN); /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_11G_P2P; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - } - - - prBssInfo->ucNonHTBasicPhyType = (UINT_8) - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].ePhyTypeIndex; - prBssInfo->u2BSSBasicRateSet = - rNonHTApModeAttributes[prBssInfo->ucConfigAdHocAPMode].u2BSSBasicRateSet; - prBssInfo->u2OperationalRateSet = - rNonHTPhyAttributes[prBssInfo->ucNonHTBasicPhyType].u2SupportedRateSet; - - if (prBssInfo->ucAllSupportedRatesLen == 0) { - rateGetDataRatesFromRateSet(prBssInfo->u2OperationalRateSet, - prBssInfo->u2BSSBasicRateSet, - prBssInfo->aucAllSupportedRates, - &prBssInfo->ucAllSupportedRatesLen); - } - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2ATIMWindow = 0; - prBssInfo->ucBeaconTimeoutCount = 0; - - //3 <2> Update BSS_INFO_T common part -#if CFG_SUPPORT_AAA - if (!fgIsPureAP) { - prBssInfo->fgIsProtection = TRUE; /* Always enable protection at P2P GO */ - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - } - else { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) - prBssInfo->fgIsProtection = TRUE; - } - - // 20120106 frog: I want separate OP_Mode & Beacon TX Function. - //p2pFuncSwitchOPMode(prAdapter, prBssInfo, OP_MODE_ACCESS_POINT, FALSE); - - bssInitForAP(prAdapter, prBssInfo, FALSE); - - nicQmUpdateWmmParms(prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif /* CFG_SUPPORT_AAA */ - - - //3 <3> Set MAC HW - //4 <3.1> Setup channel and bandwidth - rlmBssInitForAPandIbss(prAdapter, prBssInfo); - - //4 <3.2> Reset HW TSF Update Mode and Beacon Mode - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.3> Update Beacon again for network phy type confirmed. - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <3.4> Setup BSSID - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - - } while (FALSE); -#ifdef CFG_DUAL_ANTENNA - printk("p2pFuncStartGO\n"); -#endif - - - return; -} /* p2pFuncStartGO() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to inform CNM that channel privilege -* has been released -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncReleaseCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_ABORT_T prMsgChRelease = (P_MSG_CH_ABORT_T)NULL; - - DEBUGFUNC("p2pFuncReleaseCh()"); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - if (!prChnlReqInfo->fgIsChannelRequested) { - break; - } - else { - DBGLOG(P2P, TRACE, ("P2P Release Channel\n")); - prChnlReqInfo->fgIsChannelRequested = FALSE; - } - - /* 1. return channel privilege to CNM immediately */ - prMsgChRelease = (P_MSG_CH_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_ABORT_T)); - if (!prMsgChRelease) { - ASSERT(0); // Can't release Channel to CNM - break; - } - - prMsgChRelease->rMsgHdr.eMsgId = MID_MNY_CNM_CH_ABORT; - prMsgChRelease->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChRelease->ucTokenID = prChnlReqInfo->ucSeqNumOfChReq++; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChRelease, - MSG_SEND_METHOD_BUF); - - } while (FALSE); - - return; -} /* p2pFuncReleaseCh */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of CHANNEL_REQ_JOIN Initial. Enter CHANNEL_REQ_JOIN State. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncAcquireCh ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - P_MSG_CH_REQ_T prMsgChReq = (P_MSG_CH_REQ_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL)); - - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - - /* send message to CNM for acquiring channel */ - prMsgChReq = (P_MSG_CH_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_REQ_T)); - - if (!prMsgChReq) { - ASSERT(0); // Can't indicate CNM for channel acquiring - break; - } - - prMsgChReq->rMsgHdr.eMsgId = MID_MNY_CNM_CH_REQ; - prMsgChReq->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - prMsgChReq->ucTokenID = ++prChnlReqInfo->ucSeqNumOfChReq; - prMsgChReq->eReqType = CH_REQ_TYPE_JOIN; - prMsgChReq->u4MaxInterval = prChnlReqInfo->u4MaxInterval; - - prMsgChReq->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prMsgChReq->eRfSco = prChnlReqInfo->eChnlSco; - prMsgChReq->eRfBand = prChnlReqInfo->eBand; - - kalMemZero(prMsgChReq->aucBSSID, MAC_ADDR_LEN); - - /* Channel request join BSSID. */ - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgChReq, - MSG_SEND_METHOD_BUF); - - prChnlReqInfo->fgIsChannelRequested = TRUE; - - } while (FALSE); - - return; -} /* p2pFuncAcquireCh */ - -#if 0 -WLAN_STATUS -p2pFuncBeaconUpdate( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnHdr, - IN UINT_32 u4HdrLen, - IN PUINT_8 pucBcnBody, - IN UINT_32 u4BodyLen, - IN UINT_32 u4DtimPeriod, - IN UINT_32 u4BcnInterval) -{ - WLAN_STATUS rResultStatus = WLAN_STATUS_INVALID_DATA; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucTIMBody = (PUINT_8)NULL; - UINT_16 u2FrameLength = 0, UINT_16 u2OldBodyLen = 0; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prBcnMsduInfo = prP2pBssInfo->prBeacon - - ASSERT_BREAK(prBcnMsduInfo != NULL); - - /* TODO: Find TIM IE pointer. */ - prBcnFrame = prBcnMsduInfo->prPacket; - - ASSERT_BREAK(prBcnFrame != NULL); - - do { - /* Ori header. */ - UINT_16 u2IELength = 0, u2Offset = 0; - PUINT_8 pucIEBuf = prBcnFrame->aucInfoElem; - - u2IELength = prBcnMsduInfo->u2FrameLength - prBcnMsduInfo->ucMacHeaderLength; - - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - if ((IE_ID(pucIEBuf) == ELEM_ID_TIM) || - ((IE_ID(pucIEBuf) > ELEM_ID_IBSS_PARAM_SET)) { - pucTIMBody = pucIEBuf; - break - } - u2FrameLength += IE_SIZE(pucIEBuf); - } - - if (pucTIMBody == NULL) { - pucTIMBody = pucIEBuf; - } - - /* Body not change. */ - u2OldBodyLen = (UINT_16)((UINT_32)pucTIMBody - (UINT_32)prBcnFrame->aucInfoElem); - - // Move body. - kalMemCmp(aucIEBuf, pucTIMBody, u2OldBodyLen); - } while (FALSE); - - - if (pucBcnHdr) { - kalMemCopy(prBcnMsduInfo->prPacket, pucBcnHdr, u4HdrLen); - - pucTIMBody = (PUINT_8)((UINT_32)prBcnMsduInfo->prPacket + u4HdrLen); - - prBcnMsduInfo->ucMacHeaderLength = (WLAN_MAC_MGMT_HEADER_LEN + - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)); - - u2FrameLength = u4HdrLen; /* Header + Partial Body. */ - - } - else { - /* Header not change. */ - u2FrameLength += prBcnMsduInfo->ucMacHeaderLength; - } - - - if (pucBcnBody) { - kalMemCopy(pucTIMBody, pucBcnBody, u4BodyLen); - u2FrameLength += (UINT_16)u4BodyLen; - } - else { - kalMemCopy(pucTIMBody, aucIEBuf, u2OldBodyLen); - u2FrameLength += u2OldBodyLen; - } - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = u2FrameLength; - - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - prP2pBssInfo->u2BeaconInterval = (UINT_16)u4BcnInterval; - prP2pBssInfo->ucDTIMPeriod = (UINT_8)u4DtimPeriod; - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - prBcnMsduInfo->ucPacketType = 3; - - rResultStatus = nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prP2pBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - /* AP is created, Beacon Update. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - nicPmIndicateBssCreated(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } while (FALSE); - - return rResultStatus; -} /* p2pFuncBeaconUpdate */ - -#else -WLAN_STATUS -p2pFuncBeaconUpdate ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_BEACON_UPDATE_INFO_T prBcnUpdateInfo, - IN PUINT_8 pucNewBcnHdr, - IN UINT_32 u4NewHdrLen, - IN PUINT_8 pucNewBcnBody, - IN UINT_32 u4NewBodyLen - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_MSDU_INFO_T prBcnMsduInfo = (P_MSDU_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_8 aucIEBuf[MAX_IE_LENGTH]; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL) && - (prBcnUpdateInfo != NULL)); - - prBcnMsduInfo = prP2pBssInfo->prBeacon; - -#if DBG - if (prBcnUpdateInfo->pucBcnHdr != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnHdr == ((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD)); - } - - if (prBcnUpdateInfo->pucBcnBody != NULL) { - ASSERT((UINT_32)prBcnUpdateInfo->pucBcnBody == ((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen)); - } -#endif - prBcnFrame = (P_WLAN_BEACON_FRAME_T)((UINT_32)prBcnMsduInfo->prPacket + MAC_TX_RESERVED_FIELD); - - if (!pucNewBcnBody) { - /* Old body. */ - pucNewBcnBody = prBcnUpdateInfo->pucBcnBody; - ASSERT(u4NewBodyLen == 0); - u4NewBodyLen = prBcnUpdateInfo->u4BcnBodyLen; - } - else { - prBcnUpdateInfo->u4BcnBodyLen = u4NewBodyLen; - } - - /* Temp buffer body part. */ - kalMemCopy(aucIEBuf, pucNewBcnBody, u4NewBodyLen); - - if (pucNewBcnHdr) { - kalMemCopy(prBcnFrame, pucNewBcnHdr, u4NewHdrLen); - prBcnUpdateInfo->pucBcnHdr = (PUINT_8)prBcnFrame; - prBcnUpdateInfo->u4BcnHdrLen = u4NewHdrLen; - } - - pucIEBuf = (PUINT_8)((UINT_32)prBcnUpdateInfo->pucBcnHdr + (UINT_32)prBcnUpdateInfo->u4BcnHdrLen); - kalMemCopy(pucIEBuf, aucIEBuf, u4NewBodyLen); - prBcnUpdateInfo->pucBcnBody = pucIEBuf; - - /* Frame Length */ - prBcnMsduInfo->u2FrameLength = (UINT_16)(prBcnUpdateInfo->u4BcnHdrLen + prBcnUpdateInfo->u4BcnBodyLen); - - prBcnMsduInfo->ucPacketType = 3; - prBcnMsduInfo->fgIs802_11 = TRUE; - prBcnMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - - /* Update BSS INFO related information. */ - COPY_MAC_ADDR(prP2pBssInfo->aucOwnMacAddr, prBcnFrame->aucSrcAddr); - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prBcnFrame->aucBSSID); - prP2pBssInfo->u2CapInfo = prBcnFrame->u2CapInfo; - - p2pFuncParseBeaconContent(prAdapter, - prP2pBssInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); - -#if 1 - //bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); -#else - nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBcnFrame->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - (prBcnMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem))); -#endif - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncBeaconUpdate */ - -#endif - -// TODO: We do not apply IE in deauth frame set from upper layer now. -WLAN_STATUS -p2pFuncDeauth ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDeauth - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDeauth, u2ReasonCode); - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDeauth */ - -// TODO: We do not apply IE in disassoc frame set from upper layer now. -WLAN_STATUS -p2pFuncDisassoc ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucPeerMacAddr, - IN UINT_16 u2ReasonCode, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2IELen, - IN BOOLEAN fgSendDisassoc - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_FAILURE; - P_STA_RECORD_T prCliStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - BOOLEAN fgIsStaFound = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucPeerMacAddr != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - prCliStaRec = cnmGetStaRecByAddress(prAdapter, - NETWORK_TYPE_P2P_INDEX, - pucPeerMacAddr); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_ACCESS_POINT: - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - prStaRecOfClientList = &(prP2pBssInfo->rStaRecOfClientList); - - LINK_FOR_EACH(prLinkEntry, prStaRecOfClientList) { - if ((UINT_32)prCliStaRec == (UINT_32)prLinkEntry) { - LINK_REMOVE_KNOWN_ENTRY(prStaRecOfClientList, &prCliStaRec->rLinkEntry); - fgIsStaFound = TRUE; - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - break; - } - } - - } - break; - case OP_MODE_INFRASTRUCTURE: - ASSERT(prCliStaRec == prP2pBssInfo->prStaRecOfAP); - if (prCliStaRec != prP2pBssInfo->prStaRecOfAP) { - break; - } - - //p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - prP2pBssInfo->prStaRecOfAP = NULL; - fgIsStaFound = TRUE; - break; - default: - break; - } - - if (fgIsStaFound) { - - p2pFuncDisconnect(prAdapter, prCliStaRec, fgSendDisassoc, u2ReasonCode); - //20120830 moved into p2pFuncDisconnect(). - //cnmStaRecFree(prAdapter, prCliStaRec, TRUE); - - } - - rWlanStatus = WLAN_STATUS_SUCCESS; - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncDisassoc */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDissolve ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - DEBUGFUNC("p2pFuncDissolve()"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pBssInfo != NULL)); - - switch (prP2pBssInfo->eCurrentOPMode) { - case OP_MODE_INFRASTRUCTURE: - /* Reset station record status. */ - if (prP2pBssInfo->prStaRecOfAP) { - kalP2PGCIndicateConnectionStatus(prAdapter->prGlueInfo, - NULL, - NULL, - 0, - REASON_CODE_DEAUTH_LEAVING_BSS); - - // 2012/02/14 frog: After formation before join group, prStaRecOfAP is NULL. - p2pFuncDisconnect(prAdapter, - prP2pBssInfo->prStaRecOfAP, - fgSendDeauth, - u2ReasonCode); - } - - /* Fix possible KE when RX Beacon & call nicPmIndicateBssConnected(). hit prStaRecOfAP == NULL. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - prP2pBssInfo->prStaRecOfAP = NULL; - - break; - case OP_MODE_ACCESS_POINT: - /* Under AP mode, we would net send deauthentication frame to each STA. - * We only stop the Beacon & let all stations timeout. - */ - { - P_LINK_T prStaRecOfClientList = (P_LINK_T)NULL; - - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - NULL, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)NULL); - - prStaRecOfClientList = &prP2pBssInfo->rStaRecOfClientList; - - while (!LINK_IS_EMPTY(prStaRecOfClientList)) { - P_STA_RECORD_T prCurrStaRec; - - LINK_REMOVE_HEAD(prStaRecOfClientList, prCurrStaRec, P_STA_RECORD_T); - - /* Indicate to Host. */ - //kalP2PGOStationUpdate(prAdapter->prGlueInfo, prCurrStaRec, FALSE); - - p2pFuncDisconnect(prAdapter, prCurrStaRec, TRUE, u2ReasonCode); - - } - - } - - break; - default: - return; // 20110420 -- alreay in Device Mode. - } - - /* Make the deauth frame send to FW ASAP. */ - wlanAcquirePowerControl(prAdapter); - wlanProcessCommandQueue(prAdapter, &prAdapter->prGlueInfo->rCmdQueue); - wlanReleasePowerControl(prAdapter); - - kalMdelay(100); - - /* Change Connection Status. */ - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - - } while (FALSE); - - return; -} /* p2pFuncDissolve */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to dissolve from group or one group. (Would not change P2P FSM.) -* 1. GC: Disconnect from AP. (Send Deauth) -* 2. GO: Disconnect all STA -* -* @param[in] prAdapter Pointer to the adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncDisconnect ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN BOOLEAN fgSendDeauth, - IN UINT_16 u2ReasonCode - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - ENUM_PARAM_MEDIA_STATE_T eOriMediaStatus; - - DBGLOG(P2P, TRACE, ("p2pFuncDisconnect()")); - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - eOriMediaStatus = prP2pBssInfo->eConnectionState; - - /* Indicate disconnect. */ - // TODO: -// kalP2PGOStationUpdate -// kalP2PGCIndicateConnectionStatus - //p2pIndicationOfMediaStateToHost(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED, prStaRec->aucMacAddr); - if (prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - kalP2PGOStationUpdate(prAdapter->prGlueInfo, prStaRec, FALSE); - } - - if (fgSendDeauth) { - /* Send deauth. */ - authSendDeauthFrame(prAdapter, - prStaRec, - (P_SW_RFB_T)NULL, - u2ReasonCode, - (PFN_TX_DONE_HANDLER)p2pFsmRunEventDeauthTxDone); - } - else { - /* Change station state. */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - /* Reset Station Record Status. */ - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - cnmStaRecFree(prAdapter, prStaRec, TRUE); - - if ((prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->rStaRecOfClientList.u4NumElem == 0)) { - DBGLOG(P2P, TRACE, ("No More Client, Media Status DISCONNECTED\n")); - p2pChangeMediaState(prAdapter, PARAM_MEDIA_STATE_DISCONNECTED); - } - - if (eOriMediaStatus != prP2pBssInfo->eConnectionState) { - /* Update Disconnected state to FW. */ - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - } - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* GO: It would stop Beacon TX. GC: Stop all BSS related PS function. */ - nicPmIndicateBssAbort(prAdapter, NETWORK_TYPE_P2P_INDEX); - - /* Reset RLM related field of BSSINFO. */ - rlmBssAborted(prAdapter, prP2pBssInfo); - } - - } while (FALSE); - - return; - -} /* p2pFuncDisconnect */ - - - - - - -WLAN_STATUS -p2pFuncTxMgmtFrame ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_MGMT_TX_REQ_INFO_T prMgmtTxReqInfo, - IN P_MSDU_INFO_T prMgmtTxMsdu, - IN UINT_64 u8Cookie - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prTxMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxReqInfo != NULL)); - - if (prMgmtTxReqInfo->fgIsMgmtTxRequested) { - - // 1. prMgmtTxReqInfo->prMgmtTxMsdu != NULL - /* Packet on driver, not done yet, drop it. */ - if ((prTxMsduInfo = prMgmtTxReqInfo->prMgmtTxMsdu) != NULL) { - - kalP2PIndicateMgmtTxStatus(prAdapter->prGlueInfo, - prMgmtTxReqInfo->u8Cookie, - FALSE, - prTxMsduInfo->prPacket, - (UINT_32)prTxMsduInfo->u2FrameLength); - - // Leave it to TX Done handler. - //cnmMgtPktFree(prAdapter, prTxMsduInfo); - prMgmtTxReqInfo->prMgmtTxMsdu = NULL; - } - - // 2. prMgmtTxReqInfo->prMgmtTxMsdu == NULL - /* Packet transmitted, wait tx done. (cookie issue) */ - // 20120105 frog - use another u8cookie to store this value. - - } - - ASSERT(prMgmtTxReqInfo->prMgmtTxMsdu == NULL); - - - - prWlanHdr = (P_WLAN_MAC_HEADER_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - prStaRec = cnmGetStaRecByAddress(prAdapter, NETWORK_TYPE_P2P_INDEX, prWlanHdr->aucAddr1); - prMgmtTxMsdu->ucNetworkType = (UINT_8)NETWORK_TYPE_P2P_INDEX; - - switch (prWlanHdr->u2FrameCtrl & MASK_FRAME_TYPE) { - case MAC_FRAME_PROBE_RSP: - prMgmtTxMsdu = p2pFuncProcessP2pProbeRsp(prAdapter, prMgmtTxMsdu); - break; - default: - break; - } - - - - prMgmtTxReqInfo->u8Cookie = u8Cookie; - prMgmtTxReqInfo->prMgmtTxMsdu = prMgmtTxMsdu; - prMgmtTxReqInfo->fgIsMgmtTxRequested = TRUE; - - prMgmtTxMsdu->eSrc = TX_PACKET_MGMT; - prMgmtTxMsdu->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMgmtTxMsdu->ucStaRecIndex = (prStaRec != NULL)?(prStaRec->ucIndex):(0xFF); - if (prStaRec != NULL) { - DBGLOG(P2P, TRACE, ("Mgmt with station record: "MACSTR" .\n", MAC2STR(prStaRec->aucMacAddr))); - } - - - prMgmtTxMsdu->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; // TODO: undcertain. - prMgmtTxMsdu->fgIs802_1x = FALSE; - prMgmtTxMsdu->fgIs802_11 = TRUE; - prMgmtTxMsdu->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMgmtTxMsdu->pfTxDoneHandler = p2pFsmRunEventMgmtFrameTxDone; - prMgmtTxMsdu->fgIsBasicRate = TRUE; - DBGLOG(P2P, TRACE, ("Mgmt seq NO. %d .\n", prMgmtTxMsdu->ucTxSeqNum)); - - nicTxEnqueueMsdu(prAdapter, prMgmtTxMsdu); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncTxMgmtFrame */ - - - -VOID -p2pFuncSetChannel ( - IN P_ADAPTER_T prAdapter, - IN P_RF_CHANNEL_INFO_T prRfChannelInfo - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prRfChannelInfo != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnSettings->ucOperatingChnl = prRfChannelInfo->ucChannelNum; - prP2pConnSettings->eBand = prRfChannelInfo->eBand; - - - } while (FALSE); - - return; -} -/* p2pFuncSetChannel */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Retry JOIN for AUTH_MODE_AUTO_SWITCH -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @retval TRUE We will retry JOIN -* @retval FALSE We will not retry JOIN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncRetryJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN P_P2P_JOIN_INFO_T prJoinInfo - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - BOOLEAN fgRetValue = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prStaRec != NULL) && - (prJoinInfo != NULL)); - - /* Retry other AuthType if possible */ - if (!prJoinInfo->ucAvailableAuthTypes) { - break; - } - - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, INFO, ("RETRY JOIN INIT: Retry Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else { - DBGLOG(P2P, ERROR, ("RETRY JOIN INIT: Retry Authentication with Unexpected AuthType.\n")); - ASSERT(0); - break; - } - - prJoinInfo->ucAvailableAuthTypes = 0; /* No more available Auth Types */ - - /* Trigger SAA to start JOIN process. */ - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - if (!prJoinReqMsg) { - ASSERT(0); // Can't trigger SAA FSM - break; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - fgRetValue = TRUE; - } while (FALSE); - - return fgRetValue; - - - -}/* end of p2pFuncRetryJOIN() */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will update the contain of BSS_INFO_T for AIS network once -* the association was completed. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prAssocRspSwRfb Pointer to SW RFB of ASSOC RESP FRAME. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncUpdateBssInfoForJOIN ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prAssocRspSwRfb - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - UINT_16 u2IELength; - PUINT_8 pucIE; - - DEBUGFUNC("p2pUpdateBssInfoForJOIN()"); - - ASSERT(prAdapter); - ASSERT(prStaRec); - ASSERT(prAssocRspSwRfb); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T) prAssocRspSwRfb->pvHeader; - - DBGLOG(P2P, INFO, ("Update P2P_BSS_INFO_T and apply settings to MAC\n")); - - //3 <1> Update BSS_INFO_T from AIS_FSM_INFO_T or User Settings - //4 <1.1> Setup Operation Mode - prP2pBssInfo->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; - - //4 <1.2> Setup SSID - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen); - - if (prBssDesc == NULL) { - /* Target BSS NULL. */ - DBGLOG(P2P, TRACE,("Target BSS NULL\n")); - return; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAssocRspFrame->aucBSSID)) { - ASSERT(FALSE); - } - - //4 <1.3> Setup Channel, Band - prP2pBssInfo->ucPrimaryChannel = prBssDesc->ucChannelNum; - prP2pBssInfo->eBand = prBssDesc->eBand; - - - //3 <2> Update BSS_INFO_T from STA_RECORD_T - //4 <2.1> Save current AP's STA_RECORD_T and current AID - prP2pBssInfo->prStaRecOfAP = prStaRec; - prP2pBssInfo->u2AssocId = prStaRec->u2AssocId; - - //4 <2.2> Setup Capability - prP2pBssInfo->u2CapInfo = prStaRec->u2CapInfo; /* Use AP's Cap Info as BSS Cap Info */ - - if (prP2pBssInfo->u2CapInfo & CAP_INFO_SHORT_PREAMBLE) { - prP2pBssInfo->fgIsShortPreambleAllowed = TRUE; - } - else { - prP2pBssInfo->fgIsShortPreambleAllowed = FALSE; - } - - //4 <2.3> Setup PHY Attributes and Basic Rate Set/Operational Rate Set - prP2pBssInfo->ucPhyTypeSet = prStaRec->ucDesiredPhyTypeSet; - - prP2pBssInfo->ucNonHTBasicPhyType = prStaRec->ucNonHTBasicPhyType; - - prP2pBssInfo->u2OperationalRateSet = prStaRec->u2OperationalRateSet; - prP2pBssInfo->u2BSSBasicRateSet = prStaRec->u2BSSBasicRateSet; - - - //3 <3> Update BSS_INFO_T from SW_RFB_T (Association Resp Frame) - //4 <3.1> Setup BSSID - COPY_MAC_ADDR(prP2pBssInfo->aucBSSID, prAssocRspFrame->aucBSSID); - - - u2IELength = (UINT_16) ((prAssocRspSwRfb->u2PacketLen - prAssocRspSwRfb->u2HeaderLen) - - (OFFSET_OF(WLAN_ASSOC_RSP_FRAME_T, aucInfoElem[0]) - WLAN_MAC_MGMT_HEADER_LEN)); - pucIE = prAssocRspFrame->aucInfoElem; - - - //4 <3.2> Parse WMM and setup QBSS flag - /* Parse WMM related IEs and configure HW CRs accordingly */ - mqmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - prP2pBssInfo->fgIsQBSS = prStaRec->fgIsQoS; - - //3 <4> Update BSS_INFO_T from BSS_DESC_T - ASSERT(prBssDesc); - - prBssDesc->fgIsConnecting = FALSE; - prBssDesc->fgIsConnected = TRUE; - - //4 <4.1> Setup MIB for current BSS - prP2pBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - /* NOTE: Defer ucDTIMPeriod updating to when beacon is received after connection */ - prP2pBssInfo->ucDTIMPeriod = 0; - prP2pBssInfo->u2ATIMWindow = 0; - - prP2pBssInfo->ucBeaconTimeoutCount = AIS_BEACON_TIMEOUT_COUNT_INFRA; - - //4 <4.2> Update HT information and set channel - /* Record HT related parameters in rStaRec and rBssInfo - * Note: it shall be called before nicUpdateBss() - */ - rlmProcessAssocRsp(prAdapter, prAssocRspSwRfb, pucIE, u2IELength); - - //4 <4.3> Sync with firmware for BSS-INFO - nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //4 <4.4> *DEFER OPERATION* nicPmIndicateBssConnected() will be invoked - //inside scanProcessBeaconAndProbeResp() after 1st beacon is received - - return; -} /* end of p2pUpdateBssInfoForJOIN() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Auth Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[in] pprStaRec Pointer to pointer of STA_RECORD_T structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Auth -* @retval FALSE Don't reply the Auth -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PP_STA_RECORD_T pprStaRec, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAuth = TRUE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_WLAN_AUTH_FRAME_T prAuthFrame = (P_WLAN_AUTH_FRAME_T)NULL; - - DBGLOG(P2P, TRACE, ("p2pValidate Authentication Frame\n")) - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pprStaRec != NULL) && - (pu2StatusCode != NULL)); - - /* P2P 3.2.8 */ - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; - - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - /* We are not under AP Mode yet. */ - fgReplyAuth = FALSE; - DBGLOG(P2P, WARN, ("Current OP mode is not under AP mode. (%d)\n", prP2pBssInfo->eCurrentOPMode)); - break; - } - - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX, - prAuthFrame->aucSrcAddr); - - if (!prStaRec) { - prStaRec = cnmStaRecAlloc(prAdapter, - (UINT_8) NETWORK_TYPE_P2P_INDEX); - - /* TODO(Kevin): Error handling of allocation of STA_RECORD_T for - * exhausted case and do removal of unused STA_RECORD_T. - */ - /* Sent a message event to clean un-used STA_RECORD_T. */ - ASSERT(prStaRec); - - COPY_MAC_ADDR(prStaRec->aucMacAddr, prAuthFrame->aucSrcAddr); - - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - prStaRec->u2BSSBasicRateSet = prP2pBssInfo->u2BSSBasicRateSet; - - prStaRec->u2DesiredNonHTRateSet = RATE_SET_ERP_P2P; - - prStaRec->u2OperationalRateSet = RATE_SET_ERP_P2P; - prStaRec->ucPhyTypeSet = PHY_TYPE_SET_802_11GN; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - /* NOTE(Kevin): Better to change state here, not at TX Done */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - } - else { - prSwRfb->ucStaRecIdx = prStaRec->ucIndex; - - if ((prStaRec->ucStaState > STA_STATE_1) && (IS_STA_IN_P2P(prStaRec))) { - - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - p2pFuncResetStaRecStatus(prAdapter, prStaRec); - - bssRemoveStaRecFromClientList(prAdapter, prP2pBssInfo, prStaRec); - } - - } - - if (prP2pBssInfo->rStaRecOfClientList.u4NumElem > P2P_MAXIMUM_CLIENT_COUNT || - kalP2PMaxClients(prAdapter->prGlueInfo, prP2pBssInfo->rStaRecOfClientList.u4NumElem)) { - /* GROUP limit full. */ - /* P2P 3.2.8 */ - DBGLOG(P2P, WARN, ("Group Limit Full. (%d)\n", (INT_16)prP2pBssInfo->rStaRecOfClientList.u4NumElem)); - cnmStaRecFree(prAdapter, prStaRec, FALSE); - break; - } - else { - /* Hotspot Blacklist */ - if(prAuthFrame->aucSrcAddr) { - if(kalP2PCmpBlackList(prAdapter->prGlueInfo, prAuthFrame->aucSrcAddr)) { - fgReplyAuth = FALSE; - return fgReplyAuth; - } - } - } - - //prStaRec->eStaType = STA_TYPE_INFRA_CLIENT; - prStaRec->eStaType = STA_TYPE_P2P_GC; - - prStaRec->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX; - - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - prStaRec->ucJoinFailureCount = 0; - - *pprStaRec = prStaRec; - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - - - return fgReplyAuth; - -} /* p2pFuncValidateAuth */ - - - - -VOID -p2pFuncResetStaRecStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - do { - if ((prAdapter == NULL) || (prStaRec == NULL)) { - ASSERT(FALSE); - break; - } - - - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - prStaRec->u2ReasonCode = REASON_CODE_RESERVED; - prStaRec->ucJoinFailureCount = 0; - prStaRec->fgTransmitKeyExist = FALSE; - - prStaRec->fgSetPwrMgtBit = FALSE; - - } while (FALSE); - - return; -} /* p2pFuncResetStaRecStatus */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function is used to initialize the value of the connection settings for -* P2P network -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncInitConnectionSettings ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings - ) -{ - P_DEVICE_TYPE_T prDevType; - UINT_8 aucDefaultDevName[] = P2P_DEFAULT_DEV_NAME; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - ASSERT(prP2PConnSettings); - - /* Setup Default Device Name */ - prP2PConnSettings->ucDevNameLen = P2P_DEFAULT_DEV_NAME_LEN; - kalMemCopy(prP2PConnSettings->aucDevName, aucDefaultDevName, sizeof(aucDefaultDevName)); - - /* Setup Primary Device Type (Big-Endian) */ - prDevType = &prP2PConnSettings->rPrimaryDevTypeBE; - - prDevType->u2CategoryId = HTONS(P2P_DEFAULT_PRIMARY_CATEGORY_ID); - prDevType->u2SubCategoryId = HTONS(P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID); - - prDevType->aucOui[0] = aucWfaOui[0]; - prDevType->aucOui[1] = aucWfaOui[1]; - prDevType->aucOui[2] = aucWfaOui[2]; - prDevType->aucOui[3] = VENDOR_OUI_TYPE_WPS; - - /* Setup Secondary Device Type */ - prP2PConnSettings->ucSecondaryDevTypeCount = 0; - - /* Setup Default Config Method */ - prP2PConnSettings->eConfigMethodSelType = ENUM_CONFIG_METHOD_SEL_AUTO; - prP2PConnSettings->u2ConfigMethodsSupport = P2P_DEFAULT_CONFIG_METHOD; - prP2PConnSettings->u2TargetConfigMethod = 0; - prP2PConnSettings->u2LocalConfigMethod = 0; - prP2PConnSettings->fgIsPasswordIDRdy = FALSE; - - /* For Device Capability */ - prP2PConnSettings->fgSupportServiceDiscovery = FALSE; - prP2PConnSettings->fgSupportClientDiscoverability = TRUE; - prP2PConnSettings->fgSupportConcurrentOperation = TRUE; - prP2PConnSettings->fgSupportInfraManaged = FALSE; - prP2PConnSettings->fgSupportInvitationProcedure = FALSE; - - /* For Group Capability */ -#if CFG_SUPPORT_PERSISTENT_GROUP - prP2PConnSettings->fgSupportPersistentP2PGroup = TRUE; -#else - prP2PConnSettings->fgSupportPersistentP2PGroup = FALSE; -#endif - prP2PConnSettings->fgSupportIntraBSSDistribution = TRUE; - prP2PConnSettings->fgSupportCrossConnection = TRUE; - prP2PConnSettings->fgSupportPersistentReconnect = FALSE; - - prP2PConnSettings->fgSupportOppPS = FALSE; - prP2PConnSettings->u2CTWindow = P2P_CTWINDOW_DEFAULT; - - /* For Connection Settings. */ - prP2PConnSettings->eAuthMode = AUTH_MODE_OPEN; - - prP2PConnSettings->prTargetP2pDesc = NULL; - prP2PConnSettings->ucSSIDLen = 0; - - /* Misc */ - prP2PConnSettings->fgIsScanReqIssued = FALSE; - prP2PConnSettings->fgIsServiceDiscoverIssued = FALSE; - prP2PConnSettings->fgP2pGroupLimit = FALSE; - prP2PConnSettings->ucOperatingChnl = 0; - prP2PConnSettings->ucListenChnl = 0; - prP2PConnSettings->ucTieBreaker = (UINT_8)(kalRandomNumber() & 0x1); - - prP2PConnSettings->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - return; -} /* p2pFuncInitConnectionSettings */ - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Assoc Req Frame and then return -* the status code to AAA to indicate if need to perform following actions -* when the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu2StatusCode The Status Code of Validation Result -* -* @retval TRUE Reply the Assoc Resp -* @retval FALSE Don't reply the Assoc Resp -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_16 pu2StatusCode - ) -{ - BOOLEAN fgReplyAssocResp = TRUE; - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; -#if CFG_SUPPORT_WFD - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_WFD_ATTRIBUTE_T prWfdAttribute = (P_WFD_ATTRIBUTE_T)NULL; - BOOLEAN fgNeedFree = FALSE; -#endif - - - /* TODO(Kevin): Call P2P functions to check .. - 2. Check we can accept connection from thsi peer - a. If we are in PROVISION state, only accept the peer we do the GO formation previously. - b. If we are in OPERATION state, only accept the other peer when P2P_GROUP_LIMIT is 0. - 3. Check Black List here. - */ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prSwRfb != NULL) && - (pu2StatusCode != NULL)); - - *pu2StatusCode = STATUS_CODE_REQ_DECLINED; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T)prSwRfb->pvHeader; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec == NULL) { - /* Station record should be ready while RX AUTH frame. */ - fgReplyAssocResp = FALSE; - ASSERT(FALSE); - break; - } - else { - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - } - - prStaRec->u2DesiredNonHTRateSet &= prP2pBssInfo->u2OperationalRateSet; - prStaRec->ucDesiredPhyTypeSet = prStaRec->ucPhyTypeSet & prP2pBssInfo->ucPhyTypeSet; - - if (prStaRec->ucDesiredPhyTypeSet == 0) { - /* The station only support 11B rate. */ - *pu2StatusCode = STATUS_CODE_ASSOC_DENIED_RATE_NOT_SUPPORTED; - break; - } - -#if CFG_SUPPORT_WFD && 1 - //LOG_FUNC("Skip check WFD IE becasue some API is not ready\n"); /* Eddie */ - if (!prAdapter->rWifiVar.prP2pFsmInfo) { - fgReplyAssocResp = FALSE; - ASSERT(FALSE); - break; - } - - prWfdCfgSettings = &prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings; - DBGLOG(P2P, INFO,("Current WfdCfgSettings wfd_en %u wfd_info 0x%x wfd_policy 0x%x wfd_flag 0x%x\n", - prWfdCfgSettings->ucWfdEnable, prWfdCfgSettings->u2WfdDevInfo, - prWfdCfgSettings->u4WfdPolicy, prWfdCfgSettings->u4WfdFlag)); /* Eddie */ - if (prWfdCfgSettings->ucWfdEnable) { - if (prWfdCfgSettings->u4WfdPolicy & BIT(6)) { - /* Rejected all. */ - break; - } - else { - - //UINT_16 u2AttriListLen = 0; - UINT_16 u2WfdDevInfo = 0; - P_WFD_DEVICE_INFORMATION_IE_T prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)NULL; - - //fgNeedFree = p2pFuncGetAttriList(prAdapter, - // VENDOR_OUI_TYPE_WFD, - // (PUINT_8)prAssocReqFrame->aucInfoElem, - // (prSwRfb->u2PacketLen - OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem)), - // (PPUINT_8)&prWfdAttribute, - // &u2AttriListLen); - - prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T) - p2pFuncGetSpecAttri(prAdapter, - VENDOR_OUI_TYPE_WFD, - (PUINT_8)prAssocReqFrame->aucInfoElem, - (prSwRfb->u2PacketLen - OFFSET_OF(WLAN_ASSOC_REQ_FRAME_T, aucInfoElem)), - WFD_ATTRI_ID_DEV_INFO); - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(5)) && (prAttriWfdDevInfo != NULL)) { - /* Rejected with WFD IE. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(0)) && (prAttriWfdDevInfo == NULL)) { - /* Rejected without WFD IE. */ - break; - } - - if (prAttriWfdDevInfo != NULL) { - - //prAttriWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)p2pFuncGetSpecAttri(prAdapter, - // VENDOR_OUI_TYPE_WFD, - // (PUINT_8)prWfdAttribute, - // u2AttriListLen, - // WFD_ATTRI_ID_DEV_INFO); - //if (prAttriWfdDevInfo == NULL) { - // /* No such attribute. */ - // break; - //} - - WLAN_GET_FIELD_BE16(&prAttriWfdDevInfo->u2WfdDevInfo, &u2WfdDevInfo); - DBGLOG(P2P, INFO,("RX Assoc Req WFD Info:0x%x.\n", u2WfdDevInfo)); - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(1)) && ((u2WfdDevInfo & 0x3) == 0x0)) { - /* Rejected because of SOURCE. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(2)) && ((u2WfdDevInfo & 0x3) == 0x1)) { - /* Rejected because of Primary Sink. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(3)) && ((u2WfdDevInfo & 0x3) == 0x2)) { - /* Rejected because of Secondary Sink. */ - break; - } - - if ((prWfdCfgSettings->u4WfdPolicy & BIT(4)) && ((u2WfdDevInfo & 0x3) == 0x3)) { - /* Rejected because of Source & Primary Sink. */ - break; - } - - /* Check role */ - - if(prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) { - - if((prWfdCfgSettings->u2WfdDevInfo & BITS(0,1)) == 0x3) { - //P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgUpdate = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - UINT_16 u2DevInfo = prWfdCfgSettings->u2WfdDevInfo; - - /* We may change role here if we are dual role */ - - if((u2WfdDevInfo & BITS(0,1)) == 0x00 /* Peer is Source*/) { - DBGLOG(P2P, INFO,("WFD: Switch role to primary sink\n")); - - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - prWfdCfgSettings->u2WfdDevInfo |= 0x1; - - /* event to annonce the role is chanaged to P-Sink */ - - } - else if((u2WfdDevInfo & BITS(0,1)) == 0x01 /* Peer is P-Sink */) { - - DBGLOG(P2P, INFO,("WFD: Switch role to source\n")); - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - /* event to annonce the role is chanaged to Source */ - } - else { - - DBGLOG(P2P, INFO,("WFD: Peer role is wrong type(dev 0x%x)\n", (u2DevInfo))); - DBGLOG(P2P, INFO,("WFD: Switch role to source\n")); - prWfdCfgSettings->u2WfdDevInfo &= ~BITS(0,1); - /* event to annonce the role is chanaged to Source */ - } - - p2pFsmRunEventWfdSettingUpdate (prAdapter,NULL); - - } /* Dual role p2p->wfd_params->WfdDevInfo */ - } /* WFD_FLAG_DEV_INFO_VALID */ - - - } - else { - /* Without WFD IE. - * Do nothing. Accept the connection request. - */ - } - } - - } /* ucWfdEnable */ - -#endif - - *pu2StatusCode = STATUS_CODE_SUCCESSFUL; - - } while (FALSE); - -#if CFG_SUPPORT_WFD - if ((prWfdAttribute) && (fgNeedFree)) { - kalMemFree(prWfdAttribute, VIR_MEM_TYPE, WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE); - } -#endif - - return fgReplyAssocResp; - -} /* p2pFuncValidateAssocReq */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to check the P2P IE -* -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncParseCheckForP2PInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - P_IE_WFA_T prWfaIE = (P_IE_WFA_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pucOuiType != NULL)); - - prWfaIE = (P_IE_WFA_T)pucBuf; - - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - - return TRUE; - } while (FALSE); - - return FALSE; -} /* p2pFuncParseCheckForP2PInfoElem */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pFuncValidateProbeReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT PUINT_32 pu4ControlFlags - ) -{ - BOOLEAN fgIsReplyProbeRsp = FALSE; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_PROBE_REQ) { - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return fgIsReplyProbeRsp; - -} /* end of p2pFuncValidateProbeReq() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will validate the Rx Probe Request Frame and then return -* result to BSS to indicate if need to send the corresponding Probe Response -* Frame if the specified conditions were matched. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to SW RFB data structure. -* @param[out] pu4ControlFlags Control flags for replying the Probe Response -* -* @retval TRUE Reply the Probe Response -* @retval FALSE Don't reply the Probe Response -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncValidateRxActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - DEBUGFUNC("p2pFuncValidateProbeReq"); - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - if (prP2pFsmInfo->u4P2pPacketFilter & PARAM_PACKET_FILTER_ACTION_FRAME) { - /* Leave the probe response to p2p_supplicant. */ - kalP2PIndicateRxMgmtFrame(prAdapter->prGlueInfo, prSwRfb); - } - - } while (FALSE); - - return; - -} /* p2pFuncValidateRxMgmtFrame */ - - - - -BOOLEAN -p2pFuncIsAPMode ( - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - if (prP2pFsmInfo) { - return prP2pFsmInfo->fgIsApMode; - } - else { - return FALSE; - } -} -/* p2pFuncIsAPMode */ - - - -VOID -p2pFuncParseBeaconContent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN PUINT_8 pucIEInfo, - IN UINT_32 u4IELen - ) -{ - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - BOOL ucNewSecMode = FALSE; - BOOL ucOldSecMode = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pBssInfo != NULL)); - - if (u4IELen == 0) { - break; - } - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pSpecificBssInfo->u2AttributeLen = 0; - - ASSERT_BREAK(pucIEInfo != NULL); - - pucIE = pucIEInfo; - - ucOldSecMode = kalP2PGetCipher(prAdapter->prGlueInfo); - - IE_FOR_EACH(pucIE, u4IELen, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: /* 0 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("SSID update\n")); - - /* Update when starting GO. */ - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - COPY_SSID(prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - - } - break; - case ELEM_ID_SUP_RATES: /* 1 */ /* V */ /* Done */ - { - DBGLOG(P2P, TRACE, ("Support Rate IE\n")); - kalMemCopy(prP2pBssInfo->aucAllSupportedRates, - SUP_RATES_IE(pucIE)->aucSupportedRates, - SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen = SUP_RATES_IE(pucIE)->ucLength; - - DBGLOG_MEM8(P2P, TRACE, SUP_RATES_IE(pucIE)->aucSupportedRates, SUP_RATES_IE(pucIE)->ucLength); - } - break; - case ELEM_ID_DS_PARAM_SET: /* 3 */ /* V */ /* Done */ - { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("DS PARAM IE\n")); - - ASSERT(prP2pConnSettings->ucOperatingChnl == DS_PARAM_IE(pucIE)->ucCurrChnl); - - if (prP2pConnSettings->eBand != BAND_2G4) { - ASSERT(FALSE); - break; - } - - //prP2pBssInfo->ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - - //prP2pBssInfo->eBand = BAND_2G4; - } - break; - case ELEM_ID_TIM: /* 5 */ /* V */ - DBGLOG(P2P, TRACE, ("TIM IE\n")); - TIM_IE(pucIE)->ucDTIMPeriod = prP2pBssInfo->ucDTIMPeriod; - break; - case ELEM_ID_ERP_INFO: /* 42 */ /* V */ - { -#if 1 - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE will be over write by driver\n")); - DBGLOG(P2P, TRACE, (" ucERP: %x. \n", ERP_INFO_IE(pucIE)->ucERP)); - -#else - /* This IE would dynamic change due to FW detection change is required. */ - DBGLOG(P2P, TRACE, ("ERP IE.\n")); - - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11GN; - - ASSERT(prP2pBssInfo->eBand == BAND_2G4); - - prP2pBssInfo->fgObssErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & ERP_INFO_USE_PROTECTION)? TRUE : FALSE); - - prP2pBssInfo->fgErpProtectMode = ((ERP_INFO_IE(pucIE)->ucERP & (ERP_INFO_USE_PROTECTION | ERP_INFO_NON_ERP_PRESENT))? TRUE : FALSE); -#endif - - } - break; - case ELEM_ID_HT_CAP: /* 45 */ /* V */ - { -#if 1 - DBGLOG(P2P, TRACE, ("HT CAP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, ("HT Cap Info:%x, AMPDU Param:%x\n", HT_CAP_IE(pucIE)->u2HtCapInfo, HT_CAP_IE(pucIE)->ucAmpduParam)); - - DBGLOG(P2P, TRACE, ("HT Extended Cap Info:%x, TX Beamforming Cap Info:%lx, Ant Selection Cap Info%x \n", - HT_CAP_IE(pucIE)->u2HtExtendedCap, - HT_CAP_IE(pucIE)->u4TxBeamformingCap, - HT_CAP_IE(pucIE)->ucAselCap)); -#else - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - /* u2HtCapInfo */ - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SUP_CHNL_WIDTH | HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M)) == 0) { - prP2pBssInfo->fgAssoc40mBwAllowed = FALSE; - } - else { - prP2pBssInfo->fgAssoc40mBwAllowed = TRUE; - } - - if ((HT_CAP_IE(pucIE)->u2HtCapInfo & - (HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M)) == 0) { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = TRUE; - } - else { - prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled = FALSE; - } - - /* ucAmpduParam */ - DBGLOG(P2P, TRACE, ("AMPDU setting from supplicant:0x%x, & default value:0x%x\n", (UINT_8)HT_CAP_IE(pucIE)->ucAmpduParam, (UINT_8)AMPDU_PARAM_DEFAULT_VAL)); - - /* rSupMcsSet */ - /* Can do nothing. the field is default value from other configuration. */ - //HT_CAP_IE(pucIE)->rSupMcsSet; - - /* u2HtExtendedCap */ - ASSERT(HT_CAP_IE(pucIE)->u2HtExtendedCap == (HT_EXT_CAP_DEFAULT_VAL & ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE))); - - /* u4TxBeamformingCap */ - ASSERT(HT_CAP_IE(pucIE)->u4TxBeamformingCap == TX_BEAMFORMING_CAP_DEFAULT_VAL); - - /* ucAselCap */ - ASSERT(HT_CAP_IE(pucIE)->ucAselCap == ASEL_CAP_DEFAULT_VAL); -#endif - } - break; - case ELEM_ID_RSN: /* 48 */ /* V */ - { - RSN_INFO_T rRsnIe; - - DBGLOG(P2P, TRACE, ("RSN IE\n")); - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_CCMP); - ucNewSecMode = TRUE; - - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &rRsnIe)) { - prP2pBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - prP2pBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prP2pBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; - prP2pBssInfo->u2RsnSelectedCapInfo = rRsnIe.u2RsnCap; - } - } - break; - case ELEM_ID_EXTENDED_SUP_RATES: /* 50 */ /* V */ - /* Be attention, ELEM_ID_SUP_RATES should be placed before ELEM_ID_EXTENDED_SUP_RATES. */ - DBGLOG(P2P, TRACE, ("Ex Support Rate IE\n")); - kalMemCopy(&(prP2pBssInfo->aucAllSupportedRates[prP2pBssInfo->ucAllSupportedRatesLen]), - EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, - EXT_SUP_RATES_IE(pucIE)->ucLength); - - DBGLOG_MEM8(P2P, TRACE, EXT_SUP_RATES_IE(pucIE)->aucExtSupportedRates, EXT_SUP_RATES_IE(pucIE)->ucLength); - - prP2pBssInfo->ucAllSupportedRatesLen += EXT_SUP_RATES_IE(pucIE)->ucLength; - break; - case ELEM_ID_HT_OP: /* 61 */ /* V */ // TODO: - { -#if 1 - DBGLOG(P2P, TRACE, ("HT OP IE would be overwritten by driver\n")); - - DBGLOG(P2P, TRACE, (" Primary Channel: %x, Info1: %x, Info2: %x, Info3: %x\n", - HT_OP_IE(pucIE)->ucPrimaryChannel, - HT_OP_IE(pucIE)->ucInfo1, - HT_OP_IE(pucIE)->u2Info2, - HT_OP_IE(pucIE)->u2Info3)); -#else - UINT_16 u2Info2 = 0; - prP2pBssInfo->ucPhyTypeSet |= PHY_TYPE_SET_802_11N; - - DBGLOG(P2P, TRACE, ("HT OP IE\n")); - - /* ucPrimaryChannel. */ - ASSERT(HT_OP_IE(pucIE)->ucPrimaryChannel == prP2pBssInfo->ucPrimaryChannel); - - /* ucInfo1 */ - prP2pBssInfo->ucHtOpInfo1 = HT_OP_IE(pucIE)->ucInfo1; - - /* u2Info2 */ - u2Info2 = HT_OP_IE(pucIE)->u2Info2; - - if (u2Info2 & HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - ASSERT(prP2pBssInfo->eGfOperationMode != GF_MODE_NORMAL); - u2Info2 &= ~HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (u2Info2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) { - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - u2Info2 &= ~HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - switch (u2Info2 & HT_OP_INFO2_HT_PROTECTION) { - case HT_PROTECT_MODE_NON_HT: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NON_HT; - break; - case HT_PROTECT_MODE_NON_MEMBER: - prP2pBssInfo->eHtProtectMode = HT_PROTECT_MODE_NONE; - prP2pBssInfo->eObssHtProtectMode = HT_PROTECT_MODE_NON_MEMBER; - break; - default: - prP2pBssInfo->eHtProtectMode = HT_OP_IE(pucIE)->u2Info2; - break; - } - - /* u2Info3 */ - prP2pBssInfo->u2HtOpInfo3 = HT_OP_IE(pucIE)->u2Info3; - - /* aucBasicMcsSet */ - DBGLOG_MEM8(P2P, TRACE, HT_OP_IE(pucIE)->aucBasicMcsSet, 16); -#endif - } - break; - case ELEM_ID_OBSS_SCAN_PARAMS: /* 74 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_OBSS_SCAN_PARAMS IE would be replaced by driver\n")); - } - break; - case ELEM_ID_EXTENDED_CAP: /* 127 */ /* V */ - { - DBGLOG(P2P, TRACE, ("ELEM_ID_EXTENDED_CAP IE would be replaced by driver\n")); - } - break; - case ELEM_ID_VENDOR: /* 221 */ /* V */ - DBGLOG(P2P, TRACE, ("Vender Specific IE\n")); - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_TKIP); - ucNewSecMode = TRUE; - kalMemCopy(prP2pSpecificBssInfo->aucWpaIeBuffer,pucIE, - IE_SIZE(pucIE)); - prP2pSpecificBssInfo->u2WpaIeLen=IE_SIZE(pucIE); - } - else if ((ucOuiType == VENDOR_OUI_TYPE_WPS)) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 0, pucIE, IE_SIZE(pucIE)); - } - - - // WMM here. - } - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - // TODO Store the whole P2P IE & generate later. - // Be aware that there may be one or more P2P IE. - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - } - else if(ucOuiType == VENDOR_OUI_TYPE_WFD) { - - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - } - } - else { - - - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[prP2pSpecificBssInfo->u2AttributeLen], - pucIE, - IE_SIZE(pucIE)); - - prP2pSpecificBssInfo->u2AttributeLen += IE_SIZE(pucIE); - DBGLOG(P2P, TRACE, ("Driver unprocessed Vender Specific IE\n")); - ASSERT(FALSE); - } - - // TODO: Store other Vender IE except for WMM Param. - } - break; - default: - DBGLOG(P2P, TRACE, ("Unprocessed element ID:%d \n", IE_ID(pucIE))); - break; - } - } - - if (!ucNewSecMode && ucOldSecMode) - kalP2PSetCipher(prAdapter->prGlueInfo, IW_AUTH_CIPHER_NONE); - - } while (FALSE); - - return; -} /* p2pFuncParseBeaconContent */ - - - - -P_BSS_DESC_T -p2pFuncKeepOnConnection ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, - IN P_P2P_SCAN_REQ_INFO_T prScanReqInfo - ) -{ - P_BSS_DESC_T prTargetBss = (P_BSS_DESC_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prConnReqInfo != NULL) && - (prChnlReqInfo != NULL) && - (prScanReqInfo != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - if (prP2pBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - break; - } - - // Update connection request information. - ASSERT(prConnReqInfo->fgIsConnRequest == TRUE); - - /* Find BSS Descriptor first. */ - prTargetBss = scanP2pSearchDesc(prAdapter, - prP2pBssInfo, - prConnReqInfo); - - if (prTargetBss == NULL) { - /* Update scan parameter... to scan target device. */ - prScanReqInfo->ucNumChannelList = 1; - prScanReqInfo->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_FULL; - prScanReqInfo->u4BufLength = 0; /* Prevent other P2P ID in IE. */ - prScanReqInfo->fgIsAbort = TRUE; - } - else { - prChnlReqInfo->u8Cookie = 0; - prChnlReqInfo->ucReqChnlNum = prTargetBss->ucChannelNum; - prChnlReqInfo->eBand = prTargetBss->eBand; - prChnlReqInfo->eChnlSco = prTargetBss->eSco; - prChnlReqInfo->u4MaxInterval = AIS_JOIN_CH_REQUEST_INTERVAL; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GC_JOIN_REQ; - } - - } while (FALSE); - - return prTargetBss; -} /* p2pFuncKeepOnConnection */ - -/* Currently Only for ASSOC Response Frame. */ -VOID -p2pFuncStoreAssocRspIEBuffer ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_JOIN_INFO_T prJoinInfo = (P_P2P_JOIN_INFO_T)NULL; - P_WLAN_ASSOC_RSP_FRAME_T prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)NULL; - INT_16 i2IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prSwRfb != NULL)); - - prAssocRspFrame = (P_WLAN_ASSOC_RSP_FRAME_T)prSwRfb->pvHeader; - - if (prAssocRspFrame->u2FrameCtrl != MAC_FRAME_ASSOC_RSP) { - break; - } - - i2IELen = prSwRfb->u2PacketLen - (WLAN_MAC_HEADER_LEN + - CAP_INFO_FIELD_LEN + - STATUS_CODE_FIELD_LEN + - AID_FIELD_LEN); - - - if (i2IELen <= 0) { - break; - } - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - prJoinInfo = &(prP2pFsmInfo->rJoinInfo); - prJoinInfo->u4BufLength = (UINT_32)i2IELen; - - kalMemCopy(prJoinInfo->aucIEBuf, prAssocRspFrame->aucInfoElem, prJoinInfo->u4BufLength); - - } while (FALSE); - - - return; -} /* p2pFuncStoreAssocRspIEBuffer */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set Packet Filter. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_SUPPORTED -* \retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_16 u2FrameType, - IN BOOLEAN fgIsRegistered, - OUT PUINT_32 pu4P2pPacketFilter - ) -{ - UINT_32 u4NewPacketFilter = 0; - - DEBUGFUNC("p2pFuncMgmtFrameRegister"); - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (pu4P2pPacketFilter) { - u4NewPacketFilter = *pu4P2pPacketFilter; - } - - switch (u2FrameType) { - case MAC_FRAME_PROBE_REQ: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (fgIsRegistered) { - u4NewPacketFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - u4NewPacketFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, TRACE, ("Ask frog to add code for mgmt:%x\n", u2FrameType)); - break; - } - - if (pu4P2pPacketFilter) { - *pu4P2pPacketFilter = u4NewPacketFilter; - } - -// u4NewPacketFilter |= prAdapter->u4OsPacketFilter; - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - prAdapter->u4OsPacketFilter |= u4NewPacketFilter; - - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4NewPacketFilter, - sizeof(u4NewPacketFilter) - ); - - } while (FALSE); - - return; -} /* p2pFuncMgmtFrameRegister */ - - -VOID -p2pFuncUpdateMgmtFrameRegister ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4OsFilter - ) -{ - - do { - - prAdapter->rWifiVar.prP2pFsmInfo->u4P2pPacketFilter = u4OsFilter; - - if ((prAdapter->u4OsPacketFilter & PARAM_PACKET_FILTER_P2P_MASK) ^ u4OsFilter) { - - prAdapter->u4OsPacketFilter &= ~PARAM_PACKET_FILTER_P2P_MASK; - - prAdapter->u4OsPacketFilter |= (u4OsFilter & PARAM_PACKET_FILTER_P2P_MASK); - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RX_FILTER, - TRUE, - FALSE, - FALSE, - nicCmdEventSetCommon, - nicOidCmdTimeoutCommon, - sizeof(UINT_32), - (PUINT_8)&prAdapter->u4OsPacketFilter, - &u4OsFilter, - sizeof(u4OsFilter) - ); - DBGLOG(P2P, TRACE, ("P2P Set PACKET filter:0x%lx\n", prAdapter->u4OsPacketFilter)); - } - - } while (FALSE); - - - - - return; -} /* p2pFuncUpdateMgmtFrameRegister */ - - -VOID -p2pFuncGetStationInfo ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucMacAddr, - OUT P_P2P_STATION_INFO_T prStaInfo - ) -{ - - do { - ASSERT_BREAK((prAdapter != NULL) && - (pucMacAddr != NULL) && - (prStaInfo != NULL)); - - prStaInfo->u4InactiveTime = 0; - prStaInfo->u4RxBytes = 0; - prStaInfo->u4TxBytes = 0; - prStaInfo->u4RxPackets = 0; - prStaInfo->u4TxPackets = 0; - // TODO: - - } while (FALSE); - - return; -} /* p2pFuncGetStationInfo */ - - -BOOLEAN -p2pFuncGetAttriList ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - OUT PPUINT_8 ppucAttriList, - OUT PUINT_16 pu2AttriListLen - ) -{ - BOOLEAN fgIsAllocMem = FALSE; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_16 u2Offset = 0; - P_IE_P2P_T prIe = (P_IE_P2P_T)NULL; - PUINT_8 pucAttriListStart = (PUINT_8)NULL; - UINT_16 u2AttriListLen = 0, u2BufferSize = 0; - BOOLEAN fgBackupAttributes = FALSE; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (pucIE != NULL) && - (u2IELength != 0) && - (ppucAttriList != NULL) && - (pu2AttriListLen != NULL)); - - if(ppucAttriList) { - *ppucAttriList = NULL; - } - if(pu2AttriListLen) { - *pu2AttriListLen = 0; - } - - if (ucOuiType == VENDOR_OUI_TYPE_WPS){ - aucWfaOui[0] = 0x00; - aucWfaOui[1] = 0x50; - aucWfaOui[2] = 0xF2; - } - else if ((ucOuiType != VENDOR_OUI_TYPE_P2P) -#if CFG_SUPPORT_WFD - && (ucOuiType != VENDOR_OUI_TYPE_WFD) -#endif - ) { - DBGLOG(P2P, INFO, ("Not supported OUI Type to parsing 0x%x\n", ucOuiType)); - break; - } - - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - if (ELEM_ID_VENDOR == IE_ID(pucIE)) { - prIe = (P_IE_P2P_T)pucIE; - - if (prIe->ucLength <= P2P_OUI_TYPE_LEN) { - continue; - - } - - if ((prIe->aucOui[0] == aucWfaOui[0]) && - (prIe->aucOui[1] == aucWfaOui[1]) && - (prIe->aucOui[2] == aucWfaOui[2]) && - (ucOuiType == prIe->ucOuiType)) { - - if (!pucAttriListStart) { - pucAttriListStart = &prIe->aucP2PAttributes[0]; - if (prIe->ucLength > P2P_OUI_TYPE_LEN) { - u2AttriListLen = (UINT_16)(prIe->ucLength - P2P_OUI_TYPE_LEN); - } - else { - ASSERT(FALSE); - } - } - else { -/* More than 2 attributes. */ - UINT_16 u2CopyLen; - - if (FALSE == fgBackupAttributes) { - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo;; - - fgBackupAttributes = TRUE; - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - kalMemCopy(&prP2pSpecificBssInfo->aucAttributesCache[0], - pucAttriListStart, - u2AttriListLen); - - pucAttriListStart = &prP2pSpecificBssInfo->aucAttributesCache[0]; - - u2BufferSize = P2P_MAXIMUM_ATTRIBUTE_LEN; - } - else if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - kalMemCopy(&prP2pSpecificBssInfo->aucWscAttributesCache[0], - pucAttriListStart, - u2AttriListLen); - pucAttriListStart = &prP2pSpecificBssInfo->aucWscAttributesCache[0]; - - u2BufferSize = WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE; - } -#if CFG_SUPPORT_WFD - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - PUINT_8 pucTmpBuf = (PUINT_8)NULL; - pucTmpBuf = (PUINT_8)kalMemAlloc(WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE, VIR_MEM_TYPE); - - if (pucTmpBuf != NULL) { - fgIsAllocMem = TRUE; - } - else { - /* Can't alloca memory for WFD IE relocate. */ - ASSERT(FALSE); - break; - } - - kalMemCopy(pucTmpBuf, - pucAttriListStart, - u2AttriListLen); - - pucAttriListStart = pucTmpBuf; - - u2BufferSize = WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE; - } -#endif - else { - fgBackupAttributes = FALSE; - } - } - - u2CopyLen = (UINT_16)(prIe->ucLength - P2P_OUI_TYPE_LEN); - - if ((u2AttriListLen + u2CopyLen) > u2BufferSize) { - - u2CopyLen = u2BufferSize - u2AttriListLen; - - DBGLOG(P2P, WARN, ("Length of received P2P attributes > maximum cache size.\n")); - - } - - if (u2CopyLen) { - kalMemCopy((PUINT_8)((UINT_32)pucAttriListStart + (UINT_32)u2AttriListLen), - &prIe->aucP2PAttributes[0], - u2CopyLen); - - u2AttriListLen += u2CopyLen; - } - - - } - } /* prIe->aucOui */ - } /* ELEM_ID_VENDOR */ - } /* IE_FOR_EACH */ - - - } while (FALSE); - - if (pucAttriListStart) { - PUINT_8 pucAttribute = pucAttriListStart; - DBGLOG(P2P, LOUD, ("Checking Attribute Length.\n")); - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - P2P_ATTRI_FOR_EACH(pucAttribute, u2AttriListLen, u2Offset); - } - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - } - else if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - /* Big Endian: WSC, WFD. */ - WSC_ATTRI_FOR_EACH(pucAttribute, u2AttriListLen, u2Offset) { - DBGLOG(P2P, LOUD, ("Attribute ID:%d, Length:%d.\n", - WSC_ATTRI_ID(pucAttribute), - WSC_ATTRI_LEN(pucAttribute))); - } - } - else { - } - - ASSERT(u2Offset == u2AttriListLen); - - *ppucAttriList = pucAttriListStart; - *pu2AttriListLen = u2AttriListLen; - - } - else { - *ppucAttriList = (PUINT_8)NULL; - *pu2AttriListLen = 0; - } - - return fgIsAllocMem; -} /* p2pFuncGetAttriList */ - - -P_MSDU_INFO_T -p2pFuncProcessP2pProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMgmtTxMsdu - ) -{ - P_MSDU_INFO_T prRetMsduInfo = prMgmtTxMsdu; - P_WLAN_PROBE_RSP_FRAME_T prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - UINT_16 u2Offset = 0, u2IELength = 0, u2ProbeRspHdrLen = 0; - BOOLEAN fgIsP2PIE = FALSE, fgIsWSCIE = FALSE; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - UINT_16 u2EstimateSize = 0, u2EstimatedExtraIELen = 0; - UINT_32 u4IeArraySize = 0, u4Idx = 0; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMgmtTxMsdu != NULL)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - //3 Make sure this is probe response frame. - prProbeRspFrame = (P_WLAN_PROBE_RSP_FRAME_T)((UINT_32)prMgmtTxMsdu->prPacket + MAC_TX_RESERVED_FIELD); - ASSERT_BREAK((prProbeRspFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_PROBE_RSP); - - //3 Get the importent P2P IE. - u2ProbeRspHdrLen = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - pucIEBuf = prProbeRspFrame->aucInfoElem; - u2IELength = prMgmtTxMsdu->u2FrameLength - u2ProbeRspHdrLen; - -#if CFG_SUPPORT_WFD - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen = 0; -#endif - - IE_FOR_EACH(pucIEBuf, u2IELength, u2Offset) { - switch (IE_ID(pucIEBuf)) { - case ELEM_ID_SSID: - { - - - COPY_SSID(prP2pBssInfo->aucSSID, - prP2pBssInfo->ucSSIDLen, - SSID_IE(pucIEBuf)->aucSSID, - SSID_IE(pucIEBuf)->ucLength); - } - break; - case ELEM_ID_VENDOR: - { - UINT_8 ucOuiType = 0; - UINT_16 u2SubTypeVersion = 0; -#if! CFG_SUPPORT_WFD - - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIEBuf, &ucOuiType, &u2SubTypeVersion)) { - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 2, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsWSCIE = TRUE; - } - - - } - - - else if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIEBuf, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - //2 Note(frog): I use WSC IE buffer for Probe Request to store the P2P IE for Probe Response. - kalP2PUpdateWSC_IE(prAdapter->prGlueInfo, 1, pucIEBuf, IE_SIZE(pucIEBuf)); - fgIsP2PIE = TRUE; - } - - - } - - else { - if((prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen+IE_SIZE(pucIEBuf))<512) { - kalMemCopy(prAdapter->prGlueInfo->prP2PInfo->aucVenderIE, pucIEBuf, IE_SIZE(pucIEBuf)); - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen += IE_SIZE(pucIEBuf); - } - } -#else - /* Eddie May be WFD */ - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIEBuf, &ucOuiType, &u2SubTypeVersion)) { - if(ucOuiType == VENDOR_OUI_TYPE_WMM) { - break; - } - - } - if((prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen+IE_SIZE(pucIEBuf))<1024) { - kalMemCopy(prAdapter->prGlueInfo->prP2PInfo->aucVenderIE + prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen - , pucIEBuf, IE_SIZE(pucIEBuf)); - prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen += IE_SIZE(pucIEBuf); - } -#endif - - - } - break; - default: - break; - } - - - } - - - - //3 Check the total size & current frame. - u2EstimateSize = WLAN_MAC_MGMT_HEADER_LEN + \ - TIMESTAMP_FIELD_LEN + \ - BEACON_INTERVAL_FIELD_LEN + \ - CAP_INFO_FIELD_LEN + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SSID) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_SUP_RATES) + \ - (ELEM_HDR_LEN + ELEM_MAX_LEN_DS_PARAMETER_SET); - - u2EstimatedExtraIELen = 0; - - u4IeArraySize = sizeof(txProbeRspIETable)/sizeof(APPEND_VAR_IE_ENTRY_T); - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].u2EstimatedFixedIELen) { - u2EstimatedExtraIELen += txProbeRspIETable[u4Idx].u2EstimatedFixedIELen; - } - - - else { - ASSERT(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen); - - u2EstimatedExtraIELen += (UINT_16)(txProbeRspIETable[u4Idx].pfnCalculateVariableIELen(prAdapter, - NETWORK_TYPE_P2P_INDEX, - NULL)); - } - - - } - - - - if (fgIsWSCIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - u2EstimatedExtraIELen += kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - - -#if CFG_SUPPORT_WFD - u2EstimatedExtraIELen += prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen; -#endif - - - - - if ((u2EstimateSize += u2EstimatedExtraIELen) > (prRetMsduInfo->u2FrameLength)) { - prRetMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimateSize); - - if (prRetMsduInfo == NULL) { - DBGLOG(P2P, WARN, ("No packet for sending new probe response, use original one\n")); - prRetMsduInfo = prMgmtTxMsdu; - break; - } - - - - prRetMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - - - - //3 Compose / Re-compose probe response frame. - bssComposeBeaconProbeRespFrameHeaderAndFF( - (PUINT_8)((UINT_32)(prRetMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prProbeRspFrame->aucDestAddr, - prProbeRspFrame->aucSrcAddr, - prProbeRspFrame->aucBSSID, - prProbeRspFrame->u2BeaconInterval, - prProbeRspFrame->u2CapInfo); - - prRetMsduInfo->u2FrameLength = (WLAN_MAC_MGMT_HEADER_LEN + TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN); - - bssBuildBeaconProbeRespFrameCommonIEs(prRetMsduInfo, - prP2pBssInfo, - prProbeRspFrame->aucDestAddr); - - - for (u4Idx = 0; u4Idx < u4IeArraySize; u4Idx++) { - if (txProbeRspIETable[u4Idx].pfnAppendIE) { - txProbeRspIETable[u4Idx].pfnAppendIE(prAdapter, prRetMsduInfo); - } - - - } - - - - if (fgIsWSCIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 2, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 2); - } - - if (fgIsP2PIE) { - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 1, - (PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength)); - - prRetMsduInfo->u2FrameLength += (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 1); - } - - -#if CFG_SUPPORT_WFD - if(prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen>0) { - kalMemCopy((PUINT_8)((UINT_32)prRetMsduInfo->prPacket + (UINT_32)prRetMsduInfo->u2FrameLength), - prAdapter->prGlueInfo->prP2PInfo->aucVenderIE, prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen); - prRetMsduInfo->u2FrameLength += (UINT_16) prAdapter->prGlueInfo->prP2PInfo->u2VenderIELen; - } -#endif - - - } while (FALSE); - - if (prRetMsduInfo != prMgmtTxMsdu) { - cnmMgtPktFree(prAdapter, prMgmtTxMsdu); - } - - - - return prRetMsduInfo; -} /* p2pFuncProcessP2pProbeRsp */ - - -#if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -UINT_32 -p2pFuncCalculateExtra_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - -VOID -p2pFuncGenerateExtra_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucBeaconIECache, prP2pSpeBssInfo->u2IELenForBCN); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2IELenForBCN; - - } while (FALSE); - - return; -} /* p2pFuncGenerateExtra_IEForBeacon */ - - -#else -UINT_32 -p2pFuncCalculateP2p_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - UINT_32 u4IELen = 0; - - do { - ASSERT_BREAK((prAdapter != NULL) && (eNetTypeIndex == NETWORK_TYPE_P2P_INDEX)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - break; - } - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4IELen = prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return u4IELen; -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateP2p_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpeBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - if (!prAdapter->fgIsP2PRegistered) { - break; - } - - - prP2pSpeBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) { - - - break; - } - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prP2pSpeBssInfo->aucAttributesCache, prP2pSpeBssInfo->u2AttributeLen); - - prMsduInfo->u2FrameLength += prP2pSpeBssInfo->u2AttributeLen; - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - - - - - -UINT_32 -p2pFuncCalculateWSC_IELenForBeacon ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); -} /* p2pFuncCalculateP2p_IELenForBeacon */ - - -VOID -p2pFuncGenerateWSC_IEForBeacon ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - UINT_16 u2IELen = 0; - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_P2P_INDEX) { - return; - } - - u2IELen = (UINT_16)kalP2PCalWSC_IELen(prAdapter->prGlueInfo, 0); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - // TODO: Check P2P FSM State. - kalP2PGenWSC_IE(prAdapter->prGlueInfo, - 0, - pucBuffer); - - prMsduInfo->u2FrameLength += u2IELen; - - return; -} /* p2pFuncGenerateP2p_IEForBeacon */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate P2P IE length for Beacon frame. -* -* @param[in] eNetTypeIndex Specify which network -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of P2P IE added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -p2pFuncCalculateP2p_IELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - - if (eNetTypeIndex != NETWORK_TYPE_P2P_INDEX) { - return 0; - } - - return p2pFuncCalculateP2P_IELen(prAdapter, - eNetTypeIndex, - prStaRec, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - -} /* p2pFuncCalculateP2p_IELenForAssocRsp */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pFuncGenerateP2p_IEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - DBGLOG(P2P, TRACE, ("Generate NULL P2P IE for Assoc Rsp.\n")); - - p2pFuncGenerateP2P_IE(prAdapter, - TRUE, - &prMsduInfo->u2FrameLength, - prMsduInfo->prPacket, - 1500, - txAssocRspAttributesTable, - sizeof(txAssocRspAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - } - else { - - - DBGLOG(P2P, TRACE, ("Legacy device, no P2P IE.\n")); - } - - } while (FALSE); - - return; - -} /* p2pFuncGenerateP2p_IEForAssocRsp */ - - - - -UINT_32 -p2pFuncCalculateP2P_IELen ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - - - UINT_32 u4OverallAttriLen, u4Dummy; - UINT_16 u2EstimatedFixedAttriLen; - UINT_32 i; - - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - for (i = 0; i < u4AttriTableSize; i++) { - u2EstimatedFixedAttriLen = arAppendAttriTable[i].u2EstimatedFixedAttriLen; - - if (u2EstimatedFixedAttriLen) { - u4OverallAttriLen += u2EstimatedFixedAttriLen; - } - else { - ASSERT(arAppendAttriTable[i].pfnCalculateVariableAttriLen); - - u4OverallAttriLen += - arAppendAttriTable[i].pfnCalculateVariableAttriLen(prAdapter, prStaRec); - } - } - - u4Dummy = u4OverallAttriLen; - u4OverallAttriLen += P2P_IE_OUI_HDR; - - for (;(u4Dummy > P2P_MAXIMUM_ATTRIBUTE_LEN);) { - u4OverallAttriLen += P2P_IE_OUI_HDR; - u4Dummy -= P2P_MAXIMUM_ATTRIBUTE_LEN; - } - - return u4OverallAttriLen; -} /* p2pFuncCalculateP2P_IELen */ - - -VOID -p2pFuncGenerateP2P_IE ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_P2P_T prIeP2P = (P_IE_P2P_T)NULL; - UINT_32 u4OverallAttriLen; - UINT_32 u4AttriLen; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN]; - UINT_32 i; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - /* Check buffer length is still enough. */ - ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= P2P_IE_OUI_HDR); - - prIeP2P = (P_IE_P2P_T)pucBuffer; - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - (*pu2Offset) += P2P_IE_OUI_HDR; - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - - for (i = 0; i < u4AttriTableSize; i++) { - - if (arAppendAttriTable[i].pfnAppendAttri) { - u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize); - - u4OverallAttriLen += u4AttriLen; - - if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) { - u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN; - - prIeP2P->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN); - - pucBuffer = (PUINT_8)((UINT_32)prIeP2P + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - prIeP2P = (P_IE_P2P_T)((UINT_32)prIeP2P + - (ELEM_HDR_LEN + (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN))); - - kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen); - - prIeP2P->ucId = ELEM_ID_P2P; - - prIeP2P->aucOui[0] = aucWfaOui[0]; - prIeP2P->aucOui[1] = aucWfaOui[1]; - prIeP2P->aucOui[2] = aucWfaOui[2]; - prIeP2P->ucOuiType = VENDOR_OUI_TYPE_P2P; - - kalMemCopy(prIeP2P->aucP2PAttributes, aucTempBuffer, u4OverallAttriLen); - (*pu2Offset) += P2P_IE_OUI_HDR; - } - - } - - } - - prIeP2P->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen); - - - } while (FALSE); - - return; -} /* p2pFuncGenerateP2P_IE */ - -UINT_32 -p2pFuncAppendAttriStatusForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - PUINT_8 pucBuffer; - P_P2P_ATTRI_STATUS_T prAttriStatus; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 u4AttriLen = 0; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For assoc request P2P IE check in driver & return status in P2P IE. - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - prAttriStatus = (P_P2P_ATTRI_STATUS_T)pucBuffer; - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - - - - prAttriStatus->ucId = P2P_ATTRI_ID_STATUS; - WLAN_SET_FIELD_16(&prAttriStatus->u2Length, P2P_ATTRI_MAX_LEN_STATUS); - - prAttriStatus->ucStatusCode = P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_STATUS); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriStatusForAssocRsp */ - -UINT_32 -p2pFuncAppendAttriExtListenTiming ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - P_P2P_ATTRI_EXT_LISTEN_TIMING_T prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - PUINT_8 pucBuffer = NULL; - - ASSERT(prAdapter); - ASSERT(pucBuf); - - if (fgIsAssocFrame) { - return u4AttriLen; - } - - // TODO: For extend listen timing. - - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - u4AttriLen = (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - - ASSERT(u2BufSize >= ((*pu2Offset) + (UINT_16)u4AttriLen)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + - (UINT_32)(*pu2Offset)); - - ASSERT(pucBuffer); - - prP2pExtListenTiming = (P_P2P_ATTRI_EXT_LISTEN_TIMING_T)pucBuffer; - - prP2pExtListenTiming->ucId = P2P_ATTRI_ID_EXT_LISTEN_TIMING; - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2Length, P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailInterval, prP2pSpecificBssInfo->u2AvailabilityInterval); - WLAN_SET_FIELD_16(&prP2pExtListenTiming->u2AvailPeriod, prP2pSpecificBssInfo->u2AvailabilityPeriod); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} /* p2pFuncAppendAttriExtListenTiming */ - - -P_IE_HDR_T -p2pFuncGetSpecIE ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_8 ucElemID, - IN PBOOLEAN pfgIsMore - ) -{ - P_IE_HDR_T prTargetIE = (P_IE_HDR_T)NULL; - PUINT_8 pucIE = (PUINT_8)NULL; - UINT_16 u2Offset = 0; - - if (pfgIsMore) { - *pfgIsMore = FALSE; - } - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - pucIE = pucIEBuf; - - IE_FOR_EACH(pucIE, u2BufferLen, u2Offset) { - if (IE_ID(pucIE) == ucElemID) { - if ((prTargetIE) && (pfgIsMore)) { - - - *pfgIsMore = TRUE; - break; - } - else { - prTargetIE = (P_IE_HDR_T)pucIE; - - if (pfgIsMore == NULL) { - break; - } - - - } - - - } - } - - } while (FALSE); - - return prTargetIE; -} /* p2pFuncGetSpecIE */ - - - -P_ATTRIBUTE_HDR_T -p2pFuncGetSpecAttri ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucOuiType, - IN PUINT_8 pucIEBuf, - IN UINT_16 u2BufferLen, - IN UINT_16 u2AttriID - ) -{ - P_IE_P2P_T prP2pIE = (P_IE_P2P_T)NULL; - P_ATTRIBUTE_HDR_T prTargetAttri = (P_ATTRIBUTE_HDR_T)NULL; - BOOLEAN fgIsMore = FALSE; - PUINT_8 pucIE = (PUINT_8)NULL, pucAttri = (PUINT_8)NULL; - UINT_16 u2OffsetAttri = 0; - UINT_16 u2BufferLenLeft = 0; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - - - DBGLOG(P2P, INFO, ("Check AssocReq Oui type %u attri %u for len %u\n",ucOuiType, u2AttriID, u2BufferLen)); - - do { - ASSERT_BREAK((prAdapter != NULL) - && (pucIEBuf != NULL)); - - u2BufferLenLeft = u2BufferLen; - pucIE = pucIEBuf; - do { - fgIsMore = FALSE; - prP2pIE = (P_IE_P2P_T)p2pFuncGetSpecIE(prAdapter, - pucIE, - u2BufferLenLeft, - ELEM_ID_VENDOR, - &fgIsMore); - - if (prP2pIE) { - - ASSERT(prP2pIE>pucIE); - - u2BufferLenLeft = u2BufferLen - (UINT_16)( ((UINT_32)prP2pIE) - ((UINT_32)pucIEBuf)); - - DBGLOG(P2P, INFO, ("Find vendor id %u len %u oui %u more %u LeftLen %u\n", - IE_ID(prP2pIE), IE_LEN(prP2pIE), prP2pIE->ucOuiType, fgIsMore, u2BufferLenLeft)); - - if(IE_LEN(prP2pIE) > P2P_OUI_TYPE_LEN) { - - if (prP2pIE->ucOuiType == ucOuiType) { - switch (ucOuiType) { - case VENDOR_OUI_TYPE_WPS: - aucWfaOui[0] = 0x00; - aucWfaOui[1] = 0x50; - aucWfaOui[2] = 0xF2; - break; - case VENDOR_OUI_TYPE_P2P: - break; - case VENDOR_OUI_TYPE_WPA: - case VENDOR_OUI_TYPE_WMM: - case VENDOR_OUI_TYPE_WFD: - default: - break; - } - - - - if ((prP2pIE->aucOui[0] == aucWfaOui[0]) - && (prP2pIE->aucOui[1] == aucWfaOui[1]) - && (prP2pIE->aucOui[2] == aucWfaOui[2]) - ) { - - u2OffsetAttri = 0; - pucAttri = prP2pIE->aucP2PAttributes; - - if (ucOuiType == VENDOR_OUI_TYPE_WPS) { - WSC_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //LOG_FUNC("WSC: attri id=%u len=%u\n",WSC_ATTRI_ID(pucAttri), WSC_ATTRI_LEN(pucAttri)); - if (WSC_ATTRI_ID(pucAttri) == u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - - } - - - } - - - else if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - P2P_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //LOG_FUNC("P2P: attri id=%u len=%u\n",ATTRI_ID(pucAttri), ATTRI_LEN(pucAttri)); - if (ATTRI_ID(pucAttri) == (UINT_8)u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - - } - - - } - - else if (ucOuiType == VENDOR_OUI_TYPE_WFD) { - WFD_ATTRI_FOR_EACH(pucAttri, (IE_LEN(prP2pIE) - P2P_OUI_TYPE_LEN), u2OffsetAttri) { - //DBGLOG(P2P, INFO, ("WFD: attri id=%u len=%u\n",WFD_ATTRI_ID(pucAttri), WFD_ATTRI_LEN(pucAttri))); - if (ATTRI_ID(pucAttri) == (UINT_8)u2AttriID) { - prTargetAttri = (P_ATTRIBUTE_HDR_T)pucAttri; - break; - } - - } - } - else { - // Possible or else. - } - - } - - } /* ucOuiType */ - - } /* P2P_OUI_TYPE_LEN */ - - pucIE = (PUINT_8)(((UINT_32)prP2pIE) + IE_SIZE(prP2pIE)); - - } /* prP2pIE */ - - } while (prP2pIE && fgIsMore && u2BufferLenLeft); - - } while (FALSE); - - return prTargetAttri; -} -/* p2pFuncGetSpecAttri */ - - -WLAN_STATUS -p2pFuncGenerateBeaconProbeRsp ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prBssInfo, - IN P_MSDU_INFO_T prMsduInfo, - IN BOOLEAN fgIsProbeRsp - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_WLAN_BEACON_FRAME_T prBcnFrame = (P_WLAN_BEACON_FRAME_T)NULL; -// P_APPEND_VAR_IE_ENTRY_T prAppendIeTable = (P_APPEND_VAR_IE_ENTRY_T)NULL; - - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prBssInfo != NULL) && - (prMsduInfo != NULL)); - - -// txBcnIETable - -// txProbeRspIETable - - - - prBcnFrame = (P_WLAN_BEACON_FRAME_T)prMsduInfo->prPacket; - - return nicUpdateBeaconIETemplate(prAdapter, - IE_UPD_METHOD_UPDATE_ALL, - NETWORK_TYPE_P2P_INDEX, - prBssInfo->u2CapInfo, - (PUINT_8)prBcnFrame->aucInfoElem, - prMsduInfo->u2FrameLength - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)); - - } while (FALSE); - - return rWlanStatus; -} /* p2pFuncGenerateBeaconProbeRsp */ - - -WLAN_STATUS -p2pFuncComposeBeaconProbeRspTemplate ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBcnBuffer, - IN UINT_32 u4BcnBufLen, - IN BOOLEAN fgIsProbeRsp, - IN P_P2P_PROBE_RSP_UPDATE_INFO_T prP2pProbeRspInfo, - IN BOOLEAN fgSynToFW - ) -{ - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - P_WLAN_MAC_HEADER_T prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - PUINT_8 pucBuffer = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBcnBuffer != NULL)); - - prWlanBcnFrame = (P_WLAN_MAC_HEADER_T)pucBcnBuffer; - - if ((prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_BEACON) && (!fgIsProbeRsp)) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - - else if (prWlanBcnFrame->u2FrameCtrl != MAC_FRAME_PROBE_RSP) { - rWlanStatus = WLAN_STATUS_INVALID_DATA; - break; - } - - - - - if (fgIsProbeRsp) { - ASSERT_BREAK(prP2pProbeRspInfo != NULL); - - if (!prP2pProbeRspInfo->prProbeRspMsduTemplate) { - cnmMgtPktFree(prAdapter, prP2pProbeRspInfo->prProbeRspMsduTemplate); - } - - prP2pProbeRspInfo->prProbeRspMsduTemplate = cnmMgtPktAlloc(prAdapter, u4BcnBufLen); - - prMsduInfo = prP2pProbeRspInfo->prProbeRspMsduTemplate; - - prMsduInfo->eSrc = TX_PACKET_MGMT; - prMsduInfo->ucStaRecIndex = 0xFF; - prMsduInfo->ucNetworkType = NETWORK_TYPE_P2P_INDEX; - - } - else { - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prMsduInfo = prP2pBssInfo->prBeacon; - - if (prMsduInfo == NULL) { - rWlanStatus = WLAN_STATUS_FAILURE; - break; - } - - if (u4BcnBufLen > (OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH)) { - /* Unexpected error, buffer overflow. */ - ASSERT(FALSE); - break; - } - - - } - - - - pucBuffer = (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucBuffer, pucBcnBuffer, u4BcnBufLen); - - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = (UINT_16)u4BcnBufLen; - - if (fgSynToFW) { - rWlanStatus = p2pFuncGenerateBeaconProbeRsp(prAdapter, prP2pBssInfo, prMsduInfo, fgIsProbeRsp); - } - - - } while (FALSE); - - return rWlanStatus; - -} /* p2pFuncComposeBeaconTemplate */ - -BOOLEAN -p2pFuncIsChannelGrant ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - - if (prAdapter == NULL) - return FALSE; - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - - if (prP2pFsmInfo == NULL) - return FALSE; - - return (prP2pFsmInfo->eCurrentState == P2P_STATE_CHNL_ON_HAND); - -} /* p2pFuncIsChannelGrant */ - - - - - - - - - - - - - - - - - - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_ie.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_ie.c deleted file mode 100755 index 636baf7c71c8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_ie.c +++ /dev/null @@ -1,583 +0,0 @@ -#include "p2p_precomp.h" - -#if CFG_SUPPORT_WFD -#if CFG_SUPPORT_WFD_COMPOSE_IE -#if 0 -APPEND_VAR_ATTRI_ENTRY_T txProbeRspWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_EXT_CAPABILITY), NULL, wfdFuncAppendAttriExtCapability } /* 7 */ - ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */ -}; - -APPEND_VAR_ATTRI_ENTRY_T txBeaconWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ -}; - -APPEND_VAR_ATTRI_ENTRY_T txAssocReqWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ -}; -#endif - -APPEND_VAR_ATTRI_ENTRY_T txAssocRspWFDAttributesTable[] = { - { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */ - ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */ - ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */ - -}; - -#endif - - - - -UINT_32 -p2pCalculate_IEForAssocReq ( - - - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - UINT_32 u4RetValue = 0; - - do { - ASSERT_BREAK((eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) && (prAdapter != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - u4RetValue = prConnReqInfo->u4BufLength; - - // ADD HT Capability - u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP); - - // ADD WMM Information Element - u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO); - - } while (FALSE); - - return u4RetValue; -} /* p2pCalculate_IEForAssocReq */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to generate P2P IE for Beacon frame. -* -* @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pGenerate_IEForAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL; - PUINT_8 pucIEBuf = (PUINT_8)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL)); - - prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo; - - prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo); - - pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength); - - kalMemCopy(pucIEBuf, prConnReqInfo->aucIEBuf, prConnReqInfo->u4BufLength); - - prMsduInfo->u2FrameLength += prConnReqInfo->u4BufLength; - - rlmReqGenerateHtCapIE (prAdapter,prMsduInfo); - mqmGenerateWmmInfoIE (prAdapter,prMsduInfo); - - - } while (FALSE); - - return; - -} /* p2pGenerate_IEForAssocReq */ - - - -UINT_32 -wfdFuncAppendAttriDevInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_DEVICE_INFORMATION_IE_T prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)pucBuffer; - - prWfdDevInfo->ucElemID = WFD_ATTRI_ID_DEV_INFO; - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevInfo, prWfdCfgSettings->u2WfdDevInfo); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2SessionMgmtCtrlPort, prWfdCfgSettings->u2WfdControlPort); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevMaxSpeed, prWfdCfgSettings->u2WfdMaximumTp); - - WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2Length, WFD_ATTRI_MAX_LEN_DEV_INFO); - - u4AttriLen = WFD_ATTRI_MAX_LEN_DEV_INFO + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriDevInfo */ - -UINT_32 -wfdFuncAppendAttriAssocBssid ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_ASSOCIATED_BSSID_IE_T prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_BSS_INFO_T prAisBssInfo = (P_BSS_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - - /* AIS network. */ - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if ((!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) || - (prAisBssInfo->eConnectionState != PARAM_MEDIA_STATE_CONNECTED)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)pucBuffer; - - prWfdAssocBssid->ucElemID = WFD_ATTRI_ID_ASSOC_BSSID; - - WLAN_SET_FIELD_BE16(&prWfdAssocBssid->u2Length, WFD_ATTRI_MAX_LEN_ASSOC_BSSID); - - COPY_MAC_ADDR(prWfdAssocBssid->aucAssocBssid, prAisBssInfo->aucBSSID); - - u4AttriLen = WFD_ATTRI_MAX_LEN_ASSOC_BSSID + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriAssocBssid */ - -UINT_32 -wfdFuncAppendAttriCoupledSinkInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_COUPLE_SINK_INFORMATION_IE_T prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_SINK_INFO_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)pucBuffer; - - prWfdCoupleSinkInfo->ucElemID = WFD_ATTRI_ID_COUPLED_SINK_INFO; - - WLAN_SET_FIELD_BE16(&prWfdCoupleSinkInfo->u2Length, WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO); - - COPY_MAC_ADDR(prWfdCoupleSinkInfo->aucCoupleSinkMac, prWfdCfgSettings->aucWfdCoupleSinkAddress); - - prWfdCoupleSinkInfo->ucCoupleSinkStatusBp = prWfdCfgSettings->ucWfdCoupleSinkStatus; - - u4AttriLen = WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriCoupledSinkInfo */ - -UINT_32 -wfdFuncAppendAttriExtCapability ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_EXTENDED_CAPABILITY_IE_T prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || - ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_EXT_CAPABILITY_VALID) == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)pucBuffer; - - prWfdExtCapability->ucElemID = WFD_ATTRI_ID_EXT_CAPABILITY; - - WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2Length, WFD_ATTRI_MAX_LEN_EXT_CAPABILITY); - - WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2WfdExtCapabilityBp, prWfdCfgSettings->u2WfdExtendCap); - - u4AttriLen = WFD_ATTRI_MAX_LEN_EXT_CAPABILITY + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriExtCapability */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to calculate length of Channel List Attribute -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return The length of Attribute added -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -wfdFuncCalculateAttriLenSessionInfo ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - UINT_16 u2AttriLen = 0; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - - u2AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN; - - } while (FALSE); - - - return (UINT_32)u2AttriLen; - -} /* wfdFuncCalculateAttriLenSessionInfo */ - - -UINT_32 -wfdFuncAppendAttriSessionInfo ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize - ) -{ - UINT_32 u4AttriLen = 0; - PUINT_8 pucBuffer = NULL; - P_WFD_SESSION_INFORMATION_IE_T prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)NULL; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - ASSERT_BREAK((prWfdCfgSettings != NULL)); - - if ((prWfdCfgSettings->ucWfdEnable == 0) || (prWfdCfgSettings->u2WfdSessionInformationIELen == 0)) { - break; - } - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)pucBuffer; - - prWfdSessionInfo->ucElemID = WFD_ATTRI_ID_SESSION_INFO; - - // TODO: Check endian issue? - kalMemCopy(prWfdSessionInfo->pucWfdDevInfoDesc, prWfdCfgSettings->aucWfdSessionInformationIE, prWfdCfgSettings->u2WfdSessionInformationIELen); - - WLAN_SET_FIELD_16(&prWfdSessionInfo->u2Length, prWfdCfgSettings->u2WfdSessionInformationIELen); - - u4AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN; - - } -while (FALSE); - - (*pu2Offset) += (UINT_16)u4AttriLen; - - return u4AttriLen; -} -/* wfdFuncAppendAttriSessionInfo */ - - - -#if CFG_SUPPORT_WFD_COMPOSE_IE -VOID -wfdFuncGenerateWfd_IE ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgIsAssocFrame, - IN PUINT_16 pu2Offset, - IN PUINT_8 pucBuf, - IN UINT_16 u2BufSize, - IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], - IN UINT_32 u4AttriTableSize - ) -{ - - - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_WFD_T prIeWFD = (P_IE_WFD_T)NULL; - UINT_32 u4OverallAttriLen; - UINT_32 u4AttriLen; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC; - UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN]; - UINT_32 i; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL)); - - pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset)); - - ASSERT_BREAK(pucBuffer != NULL); - - /* Check buffer length is still enough. */ - ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= WFD_IE_OUI_HDR); - - prIeWFD = (P_IE_WFD_T)pucBuffer; - - prIeWFD->ucId = ELEM_ID_WFD; - - prIeWFD->aucOui[0] = aucWfaOui[0]; - prIeWFD->aucOui[1] = aucWfaOui[1]; - prIeWFD->aucOui[2] = aucWfaOui[2]; - prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD; - - (*pu2Offset) += WFD_IE_OUI_HDR; - - /* Overall length of all Attributes */ - u4OverallAttriLen = 0; - - for (i = 0; i < u4AttriTableSize; i++) { - - if (arAppendAttriTable[i].pfnAppendAttri) { - u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize); - - u4OverallAttriLen += u4AttriLen; - - if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) { - u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN; - - prIeWFD->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN); - - pucBuffer = (PUINT_8)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - prIeWFD = (P_IE_WFD_T)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN)); - - kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen); - - prIeWFD->ucId = ELEM_ID_WFD; - - prIeWFD->aucOui[0] = aucWfaOui[0]; - prIeWFD->aucOui[1] = aucWfaOui[1]; - prIeWFD->aucOui[2] = aucWfaOui[2]; - prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD; - - kalMemCopy(prIeWFD->aucWFDAttributes, aucTempBuffer, u4OverallAttriLen); - (*pu2Offset) += WFD_IE_OUI_HDR; - } - - } - - } - - prIeWFD->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen); - - - } while (FALSE); - - return; -} /* wfdFuncGenerateWfd_IE */ - -#endif /* CFG_SUPPORT_WFD_COMPOSE_IE */ - - - - -UINT_32 -wfdFuncCalculateWfdIELenForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN P_STA_RECORD_T prStaRec - ) -{ - -#if CFG_SUPPORT_WFD_COMPOSE_IE - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - if ( - !IS_STA_P2P_TYPE(prStaRec) || - (prWfdCfgSettings->ucWfdEnable == 0)) { - return 0; - } - - return p2pFuncCalculateP2P_IELen(prAdapter, - eNetTypeIndex, - prStaRec, - txAssocRspWFDAttributesTable, - sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - -#else - return 0; -#endif -} /* wfdFuncCalculateWfdIELenForAssocRsp */ - - - -VOID -wfdFuncGenerateWfdIEForAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - -#if CFG_SUPPORT_WFD_COMPOSE_IE - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_STA_RECORD_T prStaRec; - - do { - ASSERT_BREAK((prMsduInfo != NULL) && (prAdapter != NULL)); - - prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (IS_STA_P2P_TYPE(prStaRec)) { - - if (prWfdCfgSettings->ucWfdEnable == 0) { - break; - } - if((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0) { - break; - } - - wfdFuncGenerateWfd_IE(prAdapter, - FALSE, - &prMsduInfo->u2FrameLength, - prMsduInfo->prPacket, - 1500, - txAssocRspWFDAttributesTable, - sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T)); - } - } while (FALSE); - - return; -#else - - return; -#endif -} /* wfdFuncGenerateWfdIEForAssocRsp */ - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_rlm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_rlm.c deleted file mode 100755 index c956b8662d9b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_rlm.c +++ /dev/null @@ -1,1059 +0,0 @@ -/* -** $Id: @(#) p2p_rlm.c@@ -*/ - -/*! \file "p2p_rlm.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -extern VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init AP Bss -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAP( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ENUM_BAND_T eBand; - UINT_8 ucChannel; - ENUM_CHNL_EXT_T eSCO; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - /* Operation band, channel shall be ready before invoking this function. - * Bandwidth may be ready if other network is connected - */ - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - prBssInfo->eBssSCO = CHNL_EXT_SCN; - - if (RLM_AP_IS_BW_40_ALLOWED(prAdapter, prBssInfo)) { - /* In this case, the first BSS's SCO is 40MHz and known, so AP can - * apply 40MHz bandwidth, but the first BSS's SCO may be changed - * later if its Beacon lost timeout occurs - */ - if (cnmPreferredChannel(prAdapter, &eBand, &ucChannel, &eSCO) && - eSCO != CHNL_EXT_SCN && ucChannel == prBssInfo->ucPrimaryChannel && - eBand == prBssInfo->eBand) { - prBssInfo->eBssSCO = eSCO; - } - else if (cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex)) { - prBssInfo->eBssSCO = rlmDecideScoForAP(prAdapter, prBssInfo); - } - - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - prBssInfo->fg40mBwAllowed = TRUE; - prBssInfo->fgAssoc40mBwAllowed = TRUE; - - prBssInfo->ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - - rlmUpdateBwByChListForAP(prAdapter, prBssInfo); - } - } - - DBGLOG(RLM, INFO, ("WLAN AP SCO=%d\n", prBssInfo->eBssSCO)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateObssScanIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_IE_OBSS_SCAN_PARAM_T prObssScanIe; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && !RLM_NET_IS_BOW(prBssInfo) && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) && - prBssInfo->eBand == BAND_2G4 && - prBssInfo->eBssSCO != CHNL_EXT_SCN) { - - prObssScanIe = (P_IE_OBSS_SCAN_PARAM_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add 20/40 BSS coexistence IE */ - prObssScanIe->ucId = ELEM_ID_OBSS_SCAN_PARAMS; - prObssScanIe->ucLength = sizeof(IE_OBSS_SCAN_PARAM_T) - ELEM_HDR_LEN; - - prObssScanIe->u2ScanPassiveDwell = - dot11OBSSScanPassiveDwell; - prObssScanIe->u2ScanActiveDwell = - dot11OBSSScanActiveDwell; - prObssScanIe->u2TriggerScanInterval = - dot11BSSWidthTriggerScanInterval; - prObssScanIe->u2ScanPassiveTotalPerChnl = - dot11OBSSScanPassiveTotalPerChannel; - prObssScanIe->u2ScanActiveTotalPerChnl = - dot11OBSSScanActiveTotalPerChannel; - prObssScanIe->u2WidthTransDelayFactor = - dot11BSSWidthChannelTransitionDelayFactor; - prObssScanIe->u2ScanActivityThres = - dot11OBSSScanActivityThreshold; - - ASSERT(IE_SIZE(prObssScanIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_OBSS_SCAN)); - - prMsduInfo->u2FrameLength += IE_SIZE(prObssScanIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P GO. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmUpdateBwByChListForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - UINT_8 ucLevel; - BOOLEAN fgBwChange; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - fgBwChange = FALSE; - - if (prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return fgBwChange; - } - - ucLevel = rlmObssChnlLevel(prBssInfo, prBssInfo->eBand, - prBssInfo->ucPrimaryChannel, prBssInfo->eBssSCO); - - if (ucLevel == CHNL_LEVEL0) { - /* Forced to 20MHz, so extended channel is SCN and STA width is zero */ - prBssInfo->fgObssActionForcedTo20M = TRUE; - - if (prBssInfo->ucHtOpInfo1 != (UINT_8) CHNL_EXT_SCN) { - prBssInfo->ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - fgBwChange = TRUE; - } - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - OBSS_20_40M_TIMEOUT * MSEC_PER_SEC); - } - - /* Clear up all channel lists */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - return fgBwChange; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessPublicAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_20_40_COEXIST_FRAME prRxFrame; - P_IE_20_40_COEXIST_T prCoexist; - P_IE_INTOLERANT_CHNL_REPORT_T prChnlReport; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - PUINT_8 pucIE; - UINT_16 u2IELength, u2Offset; - UINT_8 i, j; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_PUBLIC_20_40_COEXIST || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < (WLAN_MAC_MGMT_HEADER_LEN + 5) || - HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr) != - NETWORK_TYPE_P2P_INDEX) { - return; - } - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT || - prBssInfo->eBssSCO == CHNL_EXT_SCN) { - return; - } - - prCoexist = &prRxFrame->rBssCoexist; - if (prCoexist->ucData & (BSS_COEXIST_40M_INTOLERANT|BSS_COEXIST_20M_REQ)) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == - prBssInfo->ucPrimaryChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = prBssInfo->ucPrimaryChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - - /* Process intolerant channel report IE */ - pucIE = (PUINT_8) &prRxFrame->rChnlReport; - u2IELength = prSwRfb->u2PacketLen - (WLAN_MAC_MGMT_HEADER_LEN + 5); - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_20_40_INTOLERANT_CHNL_REPORT: - prChnlReport = (P_IE_INTOLERANT_CHNL_REPORT_T) pucIE; - - if (prChnlReport->ucLength <= 1) { - break; - } - - /* To do: process regulatory class. Now we assume 2.4G band */ - - for (j = 0; j < prChnlReport->ucLength - 1; j++) { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == - prChnlReport->aucChannelList[j]) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = - prChnlReport->aucChannelList[j]; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - } - break; - - default: - break; - } - } /* end of IE_FOR_EACH */ - - if (rlmUpdateBwByChListForAP(prAdapter, prBssInfo)) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - rlmSyncOperationParams(prAdapter, prBssInfo); - } - - /* Check if OBSS scan exemption response should be sent */ - if (prCoexist->ucData & BSS_COEXIST_OBSS_SCAN_EXEMPTION_REQ) { - rlmObssScanExemptionRsp(prAdapter, prBssInfo, prSwRfb); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessHtAction ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_NOTIFY_CHNL_WIDTH_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_ACTION_NOTIFY_CHNL_WIDTH_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prRxFrame->ucAction != ACTION_HT_NOTIFY_CHANNEL_WIDTH || - !prStaRec || prStaRec->ucStaState != STA_STATE_3 || - prSwRfb->u2PacketLen < sizeof(ACTION_NOTIFY_CHNL_WIDTH_FRAME)) { - return; - } - - /* To do: depending regulation class 13 and 14 based on spec - * Note: (ucChannelWidth==1) shall restored back to original capability, - * not current setting to 40MHz BW here - */ - if (prRxFrame->ucChannelWidth == 0) { - prStaRec->u2HtCapInfo &= ~HT_CAP_INFO_SUP_CHNL_WIDTH; - } - else if (prRxFrame->ucChannelWidth == 1) { - prStaRec->u2HtCapInfo |= HT_CAP_INFO_SUP_CHNL_WIDTH; - } - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_3); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmHandleObssStatusEventPkt ( - P_ADAPTER_T prAdapter, - P_EVENT_AP_OBSS_STATUS_T prObssStatus - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prObssStatus); - ASSERT(prObssStatus->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prObssStatus->ucNetTypeIndex]; - ASSERT(prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT); - - prBssInfo->fgObssErpProtectMode = - (BOOLEAN) prObssStatus->ucObssErpProtectMode; - prBssInfo->eObssHtProtectMode = - (ENUM_HT_PROTECT_MODE_T) prObssStatus->ucObssHtProtectMode; - prBssInfo->eObssGfOperationMode = - (ENUM_GF_MODE_T) prObssStatus->ucObssGfOperationMode; - prBssInfo->fgObssRifsOperationMode = - (BOOLEAN) prObssStatus->ucObssRifsOperationMode; - prBssInfo->fgObssBeaconForcedTo20M = - (BOOLEAN) prObssStatus->ucObssBeaconForcedTo20M; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, TRUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is only for AP mode in NETWORK_TYPE_P2P_INDEX. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmUpdateParamsForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - BOOLEAN fgUpdateBeacon - ) -{ - P_LINK_T prStaList; - P_STA_RECORD_T prStaRec; - BOOLEAN fgErpProtectMode, fgSta40mIntolerant; - BOOLEAN fgUseShortPreamble, fgUseShortSlotTime; - ENUM_HT_PROTECT_MODE_T eHtProtectMode; - ENUM_GF_MODE_T eGfOperationMode; - UINT_8 ucHtOpInfo1; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - if (!IS_BSS_ACTIVE(prBssInfo) || - prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT) { - return; - } - - fgErpProtectMode = FALSE; - eHtProtectMode = HT_PROTECT_MODE_NONE; - eGfOperationMode = GF_MODE_NORMAL; - fgSta40mIntolerant = FALSE; - fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - fgUseShortSlotTime = TRUE; - ucHtOpInfo1 = (UINT_8) CHNL_EXT_SCN; - - prStaList = &prBssInfo->rStaRecOfClientList; - - LINK_FOR_EACH_ENTRY(prStaRec, prStaList, rLinkEntry, STA_RECORD_T) { - //ASSERT(prStaRec); - if(!prStaRec){ - DBGLOG(P2P, TRACE, ("prStaRec is NULL in rlmUpdateParamsForAP() \n")); - break; - } - if (prStaRec->fgIsInUse && prStaRec->ucStaState == STA_STATE_3 && - prStaRec->ucNetTypeIndex == prBssInfo->ucNetTypeIndex) { - if (!(prStaRec->ucPhyTypeSet & - (PHY_TYPE_SET_802_11GN | PHY_TYPE_SET_802_11A))) { - /* B-only mode, so mode 1 (ERP protection) */ - fgErpProtectMode = TRUE; - } - - if (!(prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - /* BG-only or A-only */ - eHtProtectMode = HT_PROTECT_MODE_NON_HT; - } - else if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - /* 20MHz-only */ - if (eHtProtectMode == HT_PROTECT_MODE_NONE && - prBssInfo->fgAssoc40mBwAllowed) { - eHtProtectMode = HT_PROTECT_MODE_20M; - } - } - - if (!(prStaRec->u2HtCapInfo & HT_CAP_INFO_HT_GF)) { - eGfOperationMode = GF_MODE_PROTECT; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)) { - fgUseShortPreamble = FALSE; - } - - if (!(prStaRec->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME)) { - fgUseShortSlotTime = FALSE; - } - - if (prStaRec->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fgSta40mIntolerant = TRUE; - } - } - } /* end of LINK_FOR_EACH_ENTRY */ - - /* Check if HT operation IE about 20/40M bandwidth shall be updated */ - if (prBssInfo->eBssSCO != CHNL_EXT_SCN) { - if (/*!LINK_IS_EMPTY(prStaList) && */ !fgSta40mIntolerant && - !prBssInfo->fgObssActionForcedTo20M && - !prBssInfo->fgObssBeaconForcedTo20M) { - - ucHtOpInfo1 = (UINT_8) - (((UINT_32) prBssInfo->eBssSCO) | HT_OP_INFO1_STA_CHNL_WIDTH); - } - } - - /* Check if any new parameter may be updated */ - if (prBssInfo->fgErpProtectMode != fgErpProtectMode || - prBssInfo->eHtProtectMode != eHtProtectMode || - prBssInfo->eGfOperationMode != eGfOperationMode || - prBssInfo->ucHtOpInfo1 != ucHtOpInfo1 || - prBssInfo->fgUseShortPreamble != fgUseShortPreamble || - prBssInfo->fgUseShortSlotTime != fgUseShortSlotTime) { - - prBssInfo->fgErpProtectMode = fgErpProtectMode; - prBssInfo->eHtProtectMode = eHtProtectMode; - prBssInfo->eGfOperationMode = eGfOperationMode; - prBssInfo->ucHtOpInfo1 = ucHtOpInfo1; - prBssInfo->fgUseShortPreamble = fgUseShortPreamble; - prBssInfo->fgUseShortSlotTime = fgUseShortSlotTime; - - if (fgUseShortSlotTime) { - prBssInfo->u2CapInfo |= CAP_INFO_SHORT_SLOT_TIME; - } - else { - prBssInfo->u2CapInfo &= ~CAP_INFO_SHORT_SLOT_TIME; - } - - rlmSyncOperationParams(prAdapter, prBssInfo); - fgUpdateBeacon = TRUE; - } - - /* Update Beacon content if related IE content is changed */ - if (fgUpdateBeacon) { - bssUpdateBeaconContent(prAdapter, prBssInfo->ucNetTypeIndex); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initial the channel list from the domain information. -* This function is called after P2P initial and Domain information changed. -* Make sure the device is disconnected while changing domain information. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncInitialChannelList ( - IN P_ADAPTER_T prAdapter - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_DOMAIN_INFO_ENTRY prDomainInfoEntry = (P_DOMAIN_INFO_ENTRY)NULL; - P_DOMAIN_SUBBAND_INFO prDomainSubBand = (P_DOMAIN_SUBBAND_INFO)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0, u4IdxII = 0; - UINT_8 ucBufferSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE; -#if 0 - UINT_8 ucSocialChnlSupport = 0, ucAutoChnl = 0; -#endif - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; -#if 0 - ucAutoChnl = prP2pConnSetting->ucOperatingChnl; -#endif - - prDomainInfoEntry = rlmDomainGetDomainInfo(prAdapter); - - ASSERT_BREAK((prDomainInfoEntry != NULL) && (prP2pConnSetting != NULL)); - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - for (u4Idx = 0; u4Idx < MAX_SUBBAND_NUM; u4Idx++) { - prDomainSubBand = &prDomainInfoEntry->rSubBand[u4Idx]; - - - if (((prDomainSubBand->ucBand == BAND_5G) && (!prAdapter->fgEnable5GBand)) || - (prDomainSubBand->ucBand == BAND_NULL)) { - continue; - } - - - if (ucBufferSize < (P2P_ATTRI_LEN_CHANNEL_ENTRY + prDomainSubBand->ucNumChannels)) { - /* Buffer is not enough to include all supported channels. */ - break; // for - } - - prChannelEntryField->ucRegulatoryClass = prDomainSubBand->ucRegClass; - prChannelEntryField->ucNumberOfChannels = prDomainSubBand->ucNumChannels; - - for (u4IdxII = 0; u4IdxII < prDomainSubBand->ucNumChannels; u4IdxII++) { - prChannelEntryField->aucChannelList[u4IdxII] = prDomainSubBand->ucFirstChannelNum + - (u4IdxII * prDomainSubBand->ucChannelSpan); - -#if 0 - switch (prChannelEntryField->aucChannelList[u4IdxII]) { - case 1: - ucSocialChnlSupport = 1; - break; - case 6: - ucSocialChnlSupport = 6; - break; - case 11: - ucSocialChnlSupport = 11; - break; - default: - break; - } - -#endif - } - - if (ucBufferSize >= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels)) { - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - else { - break; - } - - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - } - -#if 0 - if (prP2pConnSetting->ucListenChnl == 0) { - prP2pConnSetting->ucListenChnl = P2P_DEFAULT_LISTEN_CHANNEL; - - if (ucSocialChnlSupport != 0) { - /* 1. User Not Set LISTEN channel. - * 2. Social channel is not empty. - */ - prP2pConnSetting->ucListenChnl = ucSocialChnlSupport; - } - } - -#endif - - // TODO: 20110921 frog - - /* If LISTEN channel is not set, - * a random supported channel would be set. - * If no social channel is supported, DEFAULT channel would be set. - */ - - prP2pConnSetting->ucRfChannelListSize = P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE - ucBufferSize; - -#if 0 - if (prP2pConnSetting->ucOperatingChnl == 0) { /* User not set OPERATE channel. */ - - if (scnQuerySparseChannel(prAdapter, NULL, &ucAutoChnl)) { - break; // while - } - - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - if (prChannelEntryField->ucNumberOfChannels != 0) { - ucAutoChnl = prChannelEntryField->aucChannelList[0]; - break; // while - } - - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - - } - -#endif - /* We assume user would not set a channel not in the channel list. - * If so, the operating channel still depends on target deivce supporting capability. - */ - - // TODO: 20110921 frog - - /* If the Operating channel is not set, a channel from supported channel list is set automatically. - * If there is no supported channel in channel list, a DEFAULT channel is set. - */ - - } while (FALSE); - -#if 0 - prP2pConnSetting->ucOperatingChnl = ucAutoChnl; -#endif - return; -} /* rlmFuncInitialChannelList */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find a common channel list from the local channel list info & target channel list info. -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return boolean value if probe response frame is -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFuncCommonChannelList ( - IN P_ADAPTER_T prAdapter, - IN P_CHANNEL_ENTRY_FIELD_T prChannelEntryII, - IN UINT_8 ucChannelListSize - ) -{ - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)NULL, prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_8 aucCommonChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE]; - UINT_8 ucOriChnlSize = 0, ucNewChnlSize = 0; - - - do { - - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)aucCommonChannelList; - - while (ucChannelListSize > 0) { - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - ucOriChnlSize = prP2pConnSetting->ucRfChannelListSize; - - while (ucOriChnlSize > 0) { - if (prChannelEntryI->ucRegulatoryClass == prChannelEntryII->ucRegulatoryClass) { - prChannelEntryIII->ucRegulatoryClass = prChannelEntryI->ucRegulatoryClass; - // TODO: Currently we assume that the regulatory class the same, the channels are the same. - kalMemCopy(prChannelEntryIII->aucChannelList, prChannelEntryII->aucChannelList, prChannelEntryII->ucNumberOfChannels); - prChannelEntryIII->ucNumberOfChannels = prChannelEntryII->ucNumberOfChannels; - - ucNewChnlSize += P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryIII->ucNumberOfChannels; - - prChannelEntryIII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryIII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryIII->ucNumberOfChannels); - } - - ucOriChnlSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryI->ucNumberOfChannels); - - prChannelEntryI = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryI + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryI->ucNumberOfChannels); - - - } - - - ucChannelListSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryII->ucNumberOfChannels); - - prChannelEntryII = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryII + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryII->ucNumberOfChannels); - - - } - - - kalMemCopy(prP2pConnSetting->aucChannelEntriesField, aucCommonChannelList, ucNewChnlSize); - prP2pConnSetting->ucRfChannelListSize = ucNewChnlSize; - - } while (FALSE); - - return; -} /* rlmFuncCommonChannelList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmFuncFindOperatingClass ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucChannelNum - ) -{ - UINT_8 ucRegulatoryClass = 0, ucBufferSize = 0; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_CHANNEL_ENTRY_FIELD_T prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)NULL; - UINT_32 u4Idx = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while (ucBufferSize != 0) { - - for (u4Idx = 0; u4Idx < prChannelEntryField->ucNumberOfChannels; u4Idx++) { - if (prChannelEntryField->aucChannelList[u4Idx] == ucChannelNum) { - ucRegulatoryClass = prChannelEntryField->ucRegulatoryClass; - break; - } - - } - - - if (ucRegulatoryClass != 0) { - break; //while - } - else { - prChannelEntryField = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntryField + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntryField->ucNumberOfChannels); - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntryField->ucNumberOfChannels); - } - - } - - - } while (FALSE); - - return ucRegulatoryClass; -} /* rlmFuncFindOperatingClass */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmFuncFindAvailableChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucCheckChnl, - IN PUINT_8 pucSuggestChannel, - IN BOOLEAN fgIsSocialChannel, - IN BOOLEAN fgIsDefaultChannel - ) -{ - BOOLEAN fgIsResultAvailable = FALSE; - P_CHANNEL_ENTRY_FIELD_T prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSetting = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_8 ucBufferSize = 0, ucIdx = 0, ucChannelSelected = 0; - - do { - ASSERT_BREAK(prAdapter != NULL); - - if (fgIsDefaultChannel) { - ucChannelSelected = P2P_DEFAULT_LISTEN_CHANNEL; - } - - - prP2pConnSetting = prAdapter->rWifiVar.prP2PConnSettings; - ucBufferSize = prP2pConnSetting->ucRfChannelListSize; - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)prP2pConnSetting->aucChannelEntriesField; - - while ((ucBufferSize != 0) && (!fgIsResultAvailable)) { - - for (ucIdx = 0; ucIdx < prChannelEntry->ucNumberOfChannels; ucIdx++) { - if ((!fgIsSocialChannel) || - (prChannelEntry->aucChannelList[ucIdx] == 1) || - (prChannelEntry->aucChannelList[ucIdx] == 6) || - (prChannelEntry->aucChannelList[ucIdx] == 11)) { - - if (prChannelEntry->aucChannelList[ucIdx] <= 11) { - /* 2.4G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - else if ((prChannelEntry->aucChannelList[ucIdx] < 52) && - (prChannelEntry->aucChannelList[ucIdx] > 14)) { - /* 2.4G + 5G. */ - ucChannelSelected = prChannelEntry->aucChannelList[ucIdx]; - } - - if (ucChannelSelected == ucCheckChnl) { - fgIsResultAvailable = TRUE; - break; - } - } - - } - - - ucBufferSize -= (P2P_ATTRI_LEN_CHANNEL_ENTRY + prChannelEntry->ucNumberOfChannels); - - prChannelEntry = (P_CHANNEL_ENTRY_FIELD_T)((UINT_32)prChannelEntry + - P2P_ATTRI_LEN_CHANNEL_ENTRY + - (UINT_32)prChannelEntry->ucNumberOfChannels); - - } - - - - if ((!fgIsResultAvailable) && (pucSuggestChannel != NULL)) { - DBGLOG(P2P, TRACE, ("The request channel %d is not available, sugguested channel:%d\n", ucCheckChnl, ucChannelSelected)); - // Given a suggested channel. - *pucSuggestChannel = ucChannelSelected; - } - - - } while (FALSE); - - return fgIsResultAvailable; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -ENUM_CHNL_EXT_T -rlmDecideScoForAP ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - UINT_8 ucSecondChannel, i, j; - ENUM_CHNL_EXT_T eSCO; - - eSCO = CHNL_EXT_SCN; - - if (prBssInfo->eBand == BAND_2G4) { - if (prBssInfo->ucPrimaryChannel != 14) { - eSCO = (prBssInfo->ucPrimaryChannel > 7) ? - CHNL_EXT_SCB : CHNL_EXT_SCA; - } - } - else { - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - if (prSubband->ucBand == prBssInfo->eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == prBssInfo->ucPrimaryChannel) { - eSCO = (j & 1) ? CHNL_EXT_SCB : CHNL_EXT_SCA; - break; - } - } - - if (j < prSubband->ucNumChannels) { - break; /* Found */ - } - } - } - } - - /* Check if it is boundary channel and 40MHz BW is permitted */ - if (eSCO != CHNL_EXT_SCN) { - ucSecondChannel = (eSCO == CHNL_EXT_SCA) ? - (prBssInfo->ucPrimaryChannel+ 4) : (prBssInfo->ucPrimaryChannel- 4); - - if (!rlmDomainIsLegalChannel(prAdapter, prBssInfo->eBand, ucSecondChannel)){ - eSCO = CHNL_EXT_SCN; - } - } - - return eSCO; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_rlm_obss.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_rlm_obss.c deleted file mode 100755 index 25ac48b42969..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_rlm_obss.c +++ /dev/null @@ -1,414 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#include "precomp.h" - - -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Different concurrent network has itself channel lists, and -* concurrent networks should have been recorded in channel lists. -* If role of active P2P is GO, assume associated AP of AIS will -* record our Beacon for P2P GO because of same channel. -* -* Note: If we have scenario of different channel in the future, -* the internal FW communication channel shall be established. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rlmObssChnlLevel ( - P_BSS_INFO_T prBssInfo, - ENUM_BAND_T eBand, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 ucChannelLevel; - - ASSERT(prBssInfo); - - if (eBand == BAND_2G4) { - ucChannelLevel = rlmObssChnlLevelIn2G4(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else if (eBand == BAND_5G) { - ucChannelLevel = rlmObssChnlLevelIn5G(prBssInfo, ucPriChannel,eExtend); - - /* (TBD) If concurrent networks permit different channel, extra - * channel judgement should be added. Please refer to - * previous version of this file. - */ - } - else { - ucChannelLevel = CHNL_LEVEL0; - } - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn2G4 ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel, ucCenterChannel; - UINT_8 ucAffectedChnl_L, ucAffectedChnl_H; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucCenterChannel = ucPriChannel + 2; - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucCenterChannel = ucPriChannel - 2; - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucCenterChannel >= 1 && ucCenterChannel <= 14); - - /* Calculated low/upper channels in affected freq range */ - ucAffectedChnl_L = (ucCenterChannel <= AFFECTED_CHNL_OFFSET) ? - 1 : (ucCenterChannel - AFFECTED_CHNL_OFFSET); - - ucAffectedChnl_H = (ucCenterChannel >= (14 - AFFECTED_CHNL_OFFSET)) ? - 14 : (ucCenterChannel + AFFECTED_CHNL_OFFSET); - - - /* Check intolerant (Non-HT) channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_NonHtChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_NonHtChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_NonHtChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 20M BW request channel list */ - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_20mReqChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_20mReqChnlList[i] <= ucAffectedChnl_H)) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G primary channel list */ - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_PriChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_PriChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_PriChnlList[i] != ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - - /* Check 2.4G secondary channel list */ - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if ((prBssInfo->auc2G_SecChnlList[i] >= ucAffectedChnl_L && - prBssInfo->auc2G_SecChnlList[i] <= ucAffectedChnl_H) && - prBssInfo->auc2G_SecChnlList[i] != ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_2G4_level_end; - } - } - -L_2G4_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmObssChnlLevelIn5G ( - P_BSS_INFO_T prBssInfo, - UINT_8 ucPriChannel, - ENUM_CHNL_EXT_T eExtend - ) -{ - UINT_8 i, ucChannelLevel; - UINT_8 ucSecChannel; - - ASSERT(prBssInfo); - - ucChannelLevel = CHNL_LEVEL2; - - /* Calculate center channel for 2.4G band */ - if (eExtend == CHNL_EXT_SCA) { - ucSecChannel = ucPriChannel + 4; - } - else if (eExtend == CHNL_EXT_SCB) { - ucSecChannel = ucPriChannel - 4; - } - else { - return CHNL_LEVEL0; - } - ASSERT(ucSecChannel >= 36); - - /* Check 5G primary channel list */ - ASSERT(prBssInfo->auc5G_PriChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_PriChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_PriChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_PriChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check non-HT channel list */ - ASSERT(prBssInfo->auc5G_NonHtChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_NonHtChnlList[i] == ucSecChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - else if (prBssInfo->auc5G_NonHtChnlList[i] == ucPriChannel) { - ucChannelLevel = CHNL_LEVEL1; - } - } - - /* Check secondary channel list */ - ASSERT(prBssInfo->auc5G_SecChnlList[0] <= CHNL_LIST_SZ_5G); - for (i = 1; i <= prBssInfo->auc5G_SecChnlList[0] && - i <= CHNL_LIST_SZ_5G; i++) { - if (prBssInfo->auc5G_SecChnlList[i] == ucPriChannel) { - - ucChannelLevel = CHNL_LEVEL0; - goto L_5G_level_end; - } - } - -L_5G_level_end: - - return ucChannelLevel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanExemptionRsp ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - - /* To do: need an algorithm to do judgement. Now always reject request */ - - prMsduInfo = (P_MSDU_INFO_T) - cnmMgtPktAlloc(prAdapter, PUBLIC_ACTION_MAX_LEN); - if (prMsduInfo == NULL) { - return; - } - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence rsp frame!\n")); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) prMsduInfo->prPacket; - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, - ((P_ACTION_20_40_COEXIST_FRAME) prSwRfb->pvHeader)->aucSrcAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = 0; - - ASSERT((WLAN_MAC_HEADER_LEN + 5) <= PUBLIC_ACTION_MAX_LEN); - - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; - prMsduInfo->ucStaRecIndex =prSwRfb->ucStaRecIdx; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_HTC_LEN + 5; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - /* Send them to HW queue */ - nicTxEnqueueMsdu(prAdapter, prMsduInfo); -} - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_scan.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_scan.c deleted file mode 100755 index 75b9474b4933..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_scan.c +++ /dev/null @@ -1,871 +0,0 @@ -/* -** $Id: @(#) p2p_scan.c@@ -*/ - -/*! \file "p2p_scan.c" - \brief This file defines the p2p scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -P_P2P_DEVICE_DESC_T -scanSearchTargetP2pDesc ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucDeviceID[], - IN PP_BSS_DESC_T pprBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_SCAN_INFO_T prScanInfo = (P_SCAN_INFO_T)NULL; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucDeviceID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* Loop for each prBssDesc */ - prTargetP2pDesc = scanFindP2pDeviceDesc(prAdapter, - prBssDesc, - aucDeviceID, - TRUE, - FALSE); - - if (prTargetP2pDesc != NULL) { - break; - } - } - - if ((pprBssDesc) && (prTargetP2pDesc != NULL)) { - /* Only valid if prTargetP2pDesc is not NULL. */ - *pprBssDesc = prBssDesc; - } - - return prTargetP2pDesc; -} /* scanSearchTargetP2pDesc */ - - - - -VOID -scanInvalidAllP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (prTargetDesc->fgDevInfoValid) { - prTargetDesc->fgDevInfoValid = FALSE; - } - } - - return; -} /* scanRenewP2pClientDevice */ - -VOID -scanRemoveInvalidP2pClientDevice ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL, prNexEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - LINK_FOR_EACH_SAFE(prLinkEntry, prNexEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (!prTargetDesc->fgDevInfoValid) { - LINK_REMOVE_KNOWN_ENTRY(&prBssDesc->rP2pDeviceList, prLinkEntry); - if ((prP2pConnSettings) && - (prP2pConnSettings->prTargetP2pDesc == prTargetDesc)) { - prP2pConnSettings->prTargetP2pDesc = NULL; - } - kalMemFree(prTargetDesc, VIR_MEM_TYPE, sizeof(P2P_DEVICE_DESC_T)); - } - } - - return; -} /* scanRenewP2pClientDevice */ - - - -P_P2P_DEVICE_DESC_T -scanFindP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN UINT_8 aucMacAddr[], - IN BOOLEAN fgIsDeviceAddr, - IN BOOLEAN fgAddIfNoFound - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prBssDesc != NULL) && - (aucMacAddr != NULL)); - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - if (fgIsDeviceAddr) { - if (EQUAL_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr)) { - break; - } - } - else { - if (EQUAL_MAC_ADDR(prTargetDesc->aucInterfaceAddr, aucMacAddr)) { - break; - } - } - - prTargetDesc = NULL; - } - - if ((fgAddIfNoFound) && (prTargetDesc == NULL)) { - /* Target Not Found. */ - // TODO: Use memory pool in the future. - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, aucMacAddr); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - } - else { - ASSERT(FALSE); - } - } - - } while (FALSE); - - return prTargetDesc; -} /* scanFindP2pDeviceDesc */ - - -P_P2P_DEVICE_DESC_T -scanGetP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - ASSERT(prAdapter); - ASSERT(prBssDesc); - - if (prBssDesc->prP2pDesc == NULL) { - - prTargetDesc = kalMemAlloc(sizeof(P2P_DEVICE_DESC_T), VIR_MEM_TYPE); - - if (prTargetDesc) { - kalMemZero(prTargetDesc, sizeof(P2P_DEVICE_DESC_T)); - LINK_ENTRY_INITIALIZE(&(prTargetDesc->rLinkEntry)); - LINK_INSERT_TAIL(&prBssDesc->rP2pDeviceList, &prTargetDesc->rLinkEntry); - prTargetDesc->fgDevInfoValid = TRUE; - prBssDesc->prP2pDesc = prTargetDesc; - /* We are not sure the SrcAddr is Device Address or Interface Address. */ - COPY_MAC_ADDR(prTargetDesc->aucDeviceAddr, prBssDesc->aucSrcAddr); - COPY_MAC_ADDR(prTargetDesc->aucInterfaceAddr, prBssDesc->aucSrcAddr); - } - else { - - ASSERT(FALSE); - } - } - else { - prTargetDesc = prBssDesc->prP2pDesc; - } - - - return prTargetDesc; - -} /* scanFindP2pDeviceDesc */ - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scanUpdateP2pDeviceDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_P2P_DEVICE_DESC_T prP2pDesc = (P_P2P_DEVICE_DESC_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - BOOLEAN fgUpdateDevInfo = FALSE; - - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - - ASSERT(prAdapter); - - prP2pDesc = scanGetP2pDeviceDesc(prAdapter, prBssDesc); - - if (!prP2pDesc) { - ASSERT(FALSE); - return fgUpdateDevInfo; - } - - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: /* Beacon, Probe Response */ - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - - prP2pDesc->ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - prP2pDesc->ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: /* Beacon */ - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == P2P_ATTRI_MAX_LEN_P2P_DEV_ID); - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: /* Probe Response */ - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - UINT_16 u2NameLen = 0, u2Id = 0; - - fgUpdateDevInfo = TRUE; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - - kalMemCopy(prP2pDesc->aucDeviceAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &prP2pDesc->rPriDevType; - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); // TODO: Fixme if secondary device type is more than 2. - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prP2pAttriDevInfo->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)((PUINT_8)prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &u2NameLen); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Id, &u2Id); - ASSERT(u2Id == WPS_ATTRI_ID_DEVICE_NAME); - if (u2NameLen > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - u2NameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - prP2pDesc->u2NameLength = u2NameLen; - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: /* Probe Response */ - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - case P2P_ATTRI_ID_NOTICE_OF_ABSENCE: - break; - case P2P_ATTRI_ID_EXT_LISTEN_TIMING: - // TODO: Not implement yet. - //ASSERT(FALSE); - break; - default: - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - scanInvalidAllP2pClientDevice(prAdapter, prBssDesc); - - /* GO/Device itself. */ - prP2pDesc->fgDevInfoValid = TRUE; - - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - - while (u2AttributeLen > 0) { - prP2pDesc = scanFindP2pDeviceDesc(prAdapter, prBssDesc, prClientInfoDesc->aucDevAddr, TRUE, TRUE); - - if (!prP2pDesc) { - ASSERT(FALSE); - break; /* while */ - } - - prP2pDesc->fgDevInfoValid = TRUE; - - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - if (u2AttributeLen < 25) { - DBGLOG(P2P, WARN, ("Length incorrect warning.\n")); - break; - } - COPY_MAC_ADDR(prP2pDesc->aucInterfaceAddr, prClientInfoDesc->aucIfAddr); - - prP2pDesc->ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - - WLAN_GET_FIELD_BE16(&prClientInfoDesc->u2ConfigMethodsBE, &prP2pDesc->u2ConfigMethod); - - prP2pDevType = &(prP2pDesc->rPriDevType); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT); - prP2pDesc->ucSecDevTypeNum = 0; - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - if (u4Idx < P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT) { - prP2pDevType = &(prP2pDesc->arSecDevType[u4Idx]); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId, &prP2pDevType->u2CategoryID); - WLAN_GET_FIELD_BE16(&prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId, &prP2pDevType->u2SubCategoryID); - prP2pDesc->ucSecDevTypeNum++; - } - - } - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - WLAN_GET_FIELD_BE16(&prP2pDevName->u2Length, &prP2pDesc->u2NameLength); - if (prP2pDesc->u2NameLength > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prP2pDesc->u2NameLength = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - - kalMemCopy(prP2pDesc->aucName, prP2pDevName->aucName, prP2pDesc->u2NameLength); - - u2AttributeLen -= (prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)((UINT_32)prClientInfoDesc + (UINT_32)prClientInfoDesc->ucLength + P2P_CLIENT_INFO_DESC_HDR_LEN); - } - - scanRemoveInvalidP2pClientDevice(prAdapter, prBssDesc); - } - - return fgUpdateDevInfo; -} /* end of scanAddP2pDeviceInfo() */ - -#endif - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to Event Packet -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanSendDeviceDiscoverEvent ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - EVENT_P2P_DEV_DISCOVER_RESULT_T rEventDevInfo; -#if 1 - P_LINK_ENTRY_T prLinkEntry = (P_LINK_ENTRY_T)NULL; - P_P2P_DEVICE_DESC_T prTargetDesc = (P_P2P_DEVICE_DESC_T)NULL; - - LINK_FOR_EACH(prLinkEntry, &prBssDesc->rP2pDeviceList) { - prTargetDesc = LINK_ENTRY(prLinkEntry, P2P_DEVICE_DESC_T, rLinkEntry); - - COPY_MAC_ADDR(rEventDevInfo.aucDeviceAddr, prTargetDesc->aucDeviceAddr); - COPY_MAC_ADDR(rEventDevInfo.aucInterfaceAddr, prTargetDesc->aucInterfaceAddr); - - rEventDevInfo.ucDeviceCapabilityBitmap = prTargetDesc->ucDeviceCapabilityBitmap; - rEventDevInfo.ucGroupCapabilityBitmap = prTargetDesc->ucGroupCapabilityBitmap; - rEventDevInfo.u2ConfigMethod = prTargetDesc->u2ConfigMethod; - - kalMemCopy(&rEventDevInfo.rPriDevType, - &prTargetDesc->rPriDevType, - sizeof(P2P_DEVICE_TYPE_T)); - - kalMemCopy(rEventDevInfo.arSecDevType, - prTargetDesc->arSecDevType, - (prTargetDesc->ucSecDevTypeNum * sizeof(P2P_DEVICE_TYPE_T))); - - rEventDevInfo.ucSecDevTypeNum = prTargetDesc->ucSecDevTypeNum; - - rEventDevInfo.u2NameLength = prTargetDesc->u2NameLength; - kalMemCopy(rEventDevInfo.aucName, - prTargetDesc->aucName, - prTargetDesc->u2NameLength); - - COPY_MAC_ADDR(rEventDevInfo.aucBSSID, prBssDesc->aucBSSID); - - if (prTargetDesc == prBssDesc->prP2pDesc) { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - prBssDesc->aucIEBuf, - prBssDesc->u2IELength); - } - else { - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo, - NULL, - 0); - } - } - - kalP2PIndicateFound(prAdapter->prGlueInfo); - -#else - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_ATTRIBUTE_T prP2pAttribute = (P_P2P_ATTRIBUTE_T)NULL; - UINT_16 u2AttributeLen = 0; - UINT_32 u4Idx = 0; - P_P2P_ATTRI_GROUP_INFO_T prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)NULL; - P_DEVICE_NAME_TLV_T prP2pDevName = (P_DEVICE_NAME_TLV_T)NULL; - - ASSERT(prAdapter); - - prP2pSpecificBssInfo = &prAdapter->rWifiVar.rP2pSpecificBssInfo; - -#if 1 - p2pGetP2PAttriList(prAdapter, prBssDesc->aucIEBuf, prBssDesc->u2IELength, (PPUINT_8)&prP2pAttribute, &u2AttributeLen); -#else - prP2pAttribute = (P_P2P_ATTRIBUTE_T)&prP2pSpecificBssInfo->aucAttributesCache[0]; - u2AttributeLen = prP2pSpecificBssInfo->u2AttributeLen; -#endif - rEventDevInfo.fgDevInfoValid = FALSE; - - while (u2AttributeLen >= P2P_ATTRI_HDR_LEN) { - switch (prP2pAttribute->ucId) { - case P2P_ATTRI_ID_P2P_CAPABILITY: - { - P_P2P_ATTRI_CAPABILITY_T prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)NULL; - - prP2pAttriCapability = (P_P2P_ATTRI_CAPABILITY_T)prP2pAttribute; - ASSERT(prP2pAttriCapability->u2Length == 2); - rEventDevInfo.ucDeviceCapabilityBitmap = prP2pAttriCapability->ucDeviceCap; - rEventDevInfo.ucGroupCapabilityBitmap = prP2pAttriCapability->ucGroupCap; - } - break; - case P2P_ATTRI_ID_P2P_DEV_ID: - { - P_P2P_ATTRI_DEV_ID_T prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)NULL; - - prP2pAttriDevID = (P_P2P_ATTRI_DEV_ID_T)prP2pAttribute; - ASSERT(prP2pAttriDevID->u2Length == 6); - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevID->aucDevAddr, MAC_ADDR_LEN); - } - break; - case P2P_ATTRI_ID_P2P_DEV_INFO: - { - P_P2P_ATTRI_DEV_INFO_T prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prP2pAttriDevInfo = (P_P2P_ATTRI_DEV_INFO_T)prP2pAttribute; - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prP2pAttriDevInfo->aucDevAddr, MAC_ADDR_LEN); - rEventDevInfo.u2ConfigMethod = prP2pAttriDevInfo->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prP2pAttriDevInfo->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prP2pAttriDevInfo->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prP2pAttriDevInfo->rPrimaryDevTypeBE.u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prP2pAttriDevInfo->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - } - break; - case P2P_ATTRI_ID_P2P_GROUP_INFO: - prP2pAttriGroupInfo = (P_P2P_ATTRI_GROUP_INFO_T)prP2pAttribute; - break; - } - - u2AttributeLen -= (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN); - - prP2pAttribute = (P_P2P_ATTRIBUTE_T)((UINT_32)prP2pAttribute + (prP2pAttribute->u2Length + P2P_ATTRI_HDR_LEN)); - - } - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - if (prP2pAttriGroupInfo != NULL) { - P_P2P_CLIENT_INFO_DESC_T prClientInfoDesc = (P_P2P_CLIENT_INFO_DESC_T)NULL; - P_P2P_DEVICE_TYPE_T prP2pDevType = (P_P2P_DEVICE_TYPE_T)NULL; - - prClientInfoDesc = prP2pAttriGroupInfo->arClientDesc; - u2AttributeLen = prP2pAttriGroupInfo->u2Length; - - while (u2AttributeLen > 0) { - /* Basic size for P2P client info descriptor. */ - ASSERT(u2AttributeLen >= 25); - rEventDevInfo.fgDevInfoValid = TRUE; - kalMemCopy(rEventDevInfo.aucCommunicateAddr, prClientInfoDesc->aucIfAddr, MAC_ADDR_LEN); - rEventDevInfo.ucDeviceCapabilityBitmap = prClientInfoDesc->ucDeviceCap; - rEventDevInfo.u2ConfigMethod = prClientInfoDesc->u2ConfigMethodsBE; - - prP2pDevType = &rEventDevInfo.rPriDevType; - prP2pDevType->u2CategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->rPrimaryDevTypeBE.u2SubCategoryId; - - ASSERT(prClientInfoDesc->ucNumOfSecondaryDevType <= 2); // TODO: Fixme if secondary device type is more than 2. - for (u4Idx = 0; u4Idx < prClientInfoDesc->ucNumOfSecondaryDevType; u4Idx++) { - // TODO: Current sub device type can only support 2. - prP2pDevType = &rEventDevInfo.arSecDevType[u4Idx]; - prP2pDevType->u2CategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2CategoryId; - prP2pDevType->u2SubCategoryID = prClientInfoDesc->arSecondaryDevTypeListBE[u4Idx].u2SubCategoryId; - } - - prP2pDevName = (P_DEVICE_NAME_TLV_T)(prClientInfoDesc->arSecondaryDevTypeListBE + (u4Idx * sizeof(DEVICE_TYPE_T))); - ASSERT(prP2pDevName->u2Id == 0x1011); - ASSERT(prP2pDevName->u2Length <= 32); // TODO: Fixme if device name length is longer than 32 bytes. - kalMemCopy(&rEventDevInfo.aucName, prP2pDevName->aucName, prP2pDevName->u2Length); - - nicRxAddP2pDevice(prAdapter, - &rEventDevInfo); - - u2AttributeLen -= prP2pAttriGroupInfo->u2Length; - prP2pAttriGroupInfo = prP2pAttriGroupInfo + prP2pAttriGroupInfo->u2Length + 1; - } - - } -#endif - return WLAN_STATUS_SUCCESS; -} /* scanSendDeviceDiscoverEvent */ - -VOID -scanP2pProcessBeaconAndProbeResp( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_WLAN_STATUS prStatus, - IN P_BSS_DESC_T prBssDesc, - IN P_WLAN_BEACON_FRAME_T prWlanBeaconFrame - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->fgIsP2PPresent) { - - if ((!prP2pBssInfo->ucDTIMPeriod) && // First time. - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && // P2P GC - (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && // Connected - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON) && // TX Beacon - EQUAL_SSID(prBssDesc->aucSSID, // SSID Match - prBssDesc->ucSSIDLen, - prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen)) { - - - prP2pBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_P2P_INDEX); - } - - do { - RF_CHANNEL_INFO_T rChannelInfo; - - ASSERT_BREAK((prSwRfb != NULL) && (prBssDesc != NULL)); - - if (((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) != MAC_FRAME_PROBE_RSP)) { - // Only report Probe Response frame to supplicant. - /* Probe response collect much more information. */ - break; - } - - rChannelInfo.ucChannelNum = prBssDesc->ucChannelNum; - rChannelInfo.eBand = prBssDesc->eBand; - - kalP2PIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - &rChannelInfo, - RCPI_TO_dBm(prBssDesc->ucRCPI)); - - - } while (FALSE); - } -} - -VOID -scnEventReturnChannel ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucScnSeqNum - ) -{ - - CMD_SCAN_CANCEL rCmdScanCancel; - - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = ucScnSeqNum; - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - return; -} /* scnEventReturnChannel */ - -VOID -scanRemoveAllP2pBssDesc( - IN P_ADAPTER_T prAdapter - ) -{ - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prBSSDescNext; - - ASSERT(prAdapter); - - prBSSDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - scanRemoveP2pBssDesc(prAdapter, prBssDesc); - } -} /* scanRemoveAllP2pBssDesc */ - -VOID -scanRemoveP2pBssDesc( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - - return; -} /* scanRemoveP2pBssDesc */ - - -P_BSS_DESC_T -scanP2pSearchDesc ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo - ) -{ - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL, prBssDesc = (P_BSS_DESC_T)NULL; - P_LINK_T prBssDescList = (P_LINK_T)NULL; - - do { - if ((prAdapter == NULL) || - (prP2pBssInfo == NULL) || - (prConnReqInfo == NULL)) { - break; - } - - - prBssDescList = &(prAdapter->rWifiVar.rScanInfo.rBSSDescList); - - DBGLOG(P2P, LOUD, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, LOUD, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - - LINK_FOR_EACH_ENTRY(prBssDesc, prBssDescList, rLinkEntry, BSS_DESC_T) { - DBGLOG(P2P, LOUD, ("Checking BSS: "MACSTR"\n", MAC2STR(prBssDesc->aucBSSID))); - - if (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSS type.\n")); - continue; - } - - - if (UNEQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnReqInfo->aucBssid)) { - DBGLOG(P2P, LOUD, ("Ignore mismatch BSSID.\n")); - continue; - } - - - /* SSID should be the same? SSID is vary for each connection. so... */ - if (UNEQUAL_SSID(prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)) { - - DBGLOG(P2P, TRACE, ("Connecting to BSSID: "MACSTR"\n", MAC2STR(prConnReqInfo->aucBssid))); - DBGLOG(P2P, TRACE, ("Connecting to SSID:%s, length:%d\n", - prConnReqInfo->rSsidStruct.aucSsid, - prConnReqInfo->rSsidStruct.ucSsidLen)); - DBGLOG(P2P, TRACE, ("Checking SSID:%s, length:%d\n", - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen)); - DBGLOG(P2P, TRACE, ("Ignore mismatch SSID, (But BSSID match).\n")); - ASSERT(FALSE); - continue; - } - - /* Final decision. */ - prCandidateBssDesc = prBssDesc; - break; - } - - - - } while (FALSE); - - return prCandidateBssDesc; -} /* scanP2pSearchDesc */ - - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_state.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_state.c deleted file mode 100755 index da30ecff152b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/p2p_state.c +++ /dev/null @@ -1,575 +0,0 @@ -#include "p2p_precomp.h" - - -BOOLEAN -p2pStateInit_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - OUT P_ENUM_P2P_STATE_T peNextState - ) -{ - BOOLEAN fgIsTransOut = FALSE; -// P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (peNextState != NULL)); - - if ((prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) && IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - fgIsTransOut = TRUE; - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - *peNextState = P2P_STATE_REQING_CHANNEL; - - } - else { -#if 0 - else if (IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) { - - ASSERT((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) || - (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Start a timer for return channel. */ - DBGLOG(P2P, TRACE, ("start a GO channel timer.\n")); - } - - } - -#endif - cnmTimerStartTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer), 5000); - } - - } while (FALSE); - - return fgIsTransOut; -} /* p2pStateInit_IDLE */ - - -VOID -p2pStateAbort_IDLE ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo; - - - if (prChnlReqInfo->fgIsChannelRequested) { - /* Release channel before timeout. */ - p2pFuncReleaseCh(prAdapter, prChnlReqInfo); - } - - - /* Stop timer for leaving this state. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - } while (FALSE); - - return; -} /* p2pStateAbort_IDLE */ - - - -VOID -p2pStateInit_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Store the original channel info. */ - prChnlReqInfo->ucOriChnlNum = prP2pBssInfo->ucPrimaryChannel; - prChnlReqInfo->eOriBand = prP2pBssInfo->eBand; - prChnlReqInfo->eOriChnlSco = prP2pBssInfo->eBssSCO; - - /* RX Probe Request would check primary channel.*/ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eChnlSco; - - - DBGLOG(P2P, TRACE, ("start a channel on hand timer.\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - prChnlReqInfo->u4MaxInterval); - - kalP2PIndicateChannelReady(prAdapter->prGlueInfo, - prChnlReqInfo->u8Cookie, - prChnlReqInfo->ucReqChnlNum, - prChnlReqInfo->eBand, - prChnlReqInfo->eChnlSco, - prChnlReqInfo->u4MaxInterval); - - } while (FALSE); - - return; -} /* p2pStateInit_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_CHNL_ON_HAND ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Restore the original channel info. */ - prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucOriChnlNum; - prP2pBssInfo->eBand = prChnlReqInfo->eOriBand; - prP2pBssInfo->eBssSCO = prChnlReqInfo->eOriChnlSco; - - if (eNextState != P2P_STATE_CHNL_ON_HAND) { - /* Indicate channel return. */ - kalP2PIndicateChannelExpired(prAdapter->prGlueInfo, &prP2pFsmInfo->rChnlReqInfo); - - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } while (FALSE); - return; -} /* p2pStateAbort_CHNL_ON_HAND */ - - -VOID -p2pStateAbort_REQING_CHANNEL ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (eNextState < P2P_STATE_NUM)); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - if (eNextState == P2P_STATE_IDLE) { - if (prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) { - /* Intend to be AP. */ - /* Setup for AP mode. */ - p2pFuncStartGO(prAdapter, - prP2pBssInfo, - prP2pSpecificBssInfo->aucGroupSsid, - prP2pSpecificBssInfo->u2GroupSsidLen, - prP2pSpecificBssInfo->ucPreferredChannel, - prP2pSpecificBssInfo->eRfBand, - prP2pSpecificBssInfo->eRfSco, - prP2pFsmInfo->fgIsApMode); - - } - else { - // Return Channel. - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - } - - } - - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo); - - prScanReqInfo->eScanType = SCAN_TYPE_PASSIVE_SCAN; - prScanReqInfo->eChannelSet = SCAN_CHANNEL_2G4; - prScanReqInfo->u2PassiveDewellTime = 50; // 50ms for passive channel load detection - prScanReqInfo->fgIsAbort = TRUE; - prScanReqInfo->fgIsScanRequest = TRUE; - prScanReqInfo->ucNumChannelList = 0; - prScanReqInfo->u4BufLength = 0; - prScanReqInfo->rSsidStruct.ucSsidLen = 0; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - - return; -} /* p2pStateInit_AP_CHANNEL_DETECT */ - - - -VOID -p2pStateAbort_AP_CHANNEL_DETECT ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - - if (eNextState == P2P_STATE_REQING_CHANNEL) { - UINT_8 ucPreferedChnl = 0; - ENUM_BAND_T eBand = BAND_NULL; - ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN; - - prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - /* Determine the channel for AP. */ - if (cnmPreferredChannel(prAdapter, - &eBand, - &ucPreferedChnl, - &eSco) == FALSE) { - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if ((ucPreferedChnl = prP2pConnSettings->ucOperatingChnl) == 0) { - - if (scnQuerySparseChannel(prAdapter, &eBand, &ucPreferedChnl) == FALSE) { - - // What to do? - ASSERT(FALSE); - // TODO: Pick up a valid channel from channel list. - } - } - } - - - prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS; - prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel = ucPreferedChnl; - prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand = eBand; - prChnlReqInfo->eChnlSco = prP2pSpecificBssInfo->eRfSco = eSco; - } - else { - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - } - - - } while (FALSE); - - return; -} /* p2pStateAbort_AP_CHANNEL_DETECT */ - - -VOID -p2pStateInit_SCAN ( - - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo - ) -{ - P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T)NULL; - - do { - - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL)); - - prScanReqInfo = &prP2pFsmInfo->rScanReqInfo; - - prScanReqInfo->fgIsScanRequest = TRUE; - - p2pFuncRequestScan(prAdapter, prScanReqInfo); - - } while (FALSE); - return; -} /* p2pStateInit_SCAN */ - - -VOID -p2pStateAbort_SCAN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - do { - ASSERT_BREAK(prAdapter != NULL); - - // 1. Scan cancel. (Make sure the scan request is invalid. - p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo)); - - // Scan done indication. - kalP2PIndicateScanDone(prAdapter->prGlueInfo, prP2pFsmInfo->rScanReqInfo.fgIsAbort); - } while (FALSE); - - return; -} /* p2pStateAbort_SCAN */ - - -VOID -p2pStateInit_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_BSS_INFO_T prP2pBssInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T)NULL; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prAdapter != NULL) && - (prP2pFsmInfo != NULL) && - (prP2pBssInfo != NULL) && - (prJoinInfo != NULL) && - (prBssDesc != NULL)); - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - - // Setup a join timer. - DBGLOG(P2P, TRACE, ("Start a join init timer\n")); - cnmTimerStartTimer(prAdapter, - &(prP2pFsmInfo->rP2pFsmTimeoutTimer), - (prP2pFsmInfo->u4GrantInterval - AIS_JOIN_CH_GRANT_THRESHOLD)); - - //2 <1> We are goin to connect to this BSS - prBssDesc->fgIsConnecting = TRUE; - - //2 <2> Setup corresponding STA_RECORD_T - prStaRec = bssCreateStaRecFromBssDesc(prAdapter, - (prBssDesc->fgIsP2PPresent?(STA_TYPE_P2P_GO):(STA_TYPE_LEGACY_AP)), - NETWORK_TYPE_P2P_INDEX, - prBssDesc); - - if (prStaRec == NULL) { - DBGLOG(P2P, TRACE, ("Create station record fail\n")); - break; - } - - - prJoinInfo->prTargetStaRec = prStaRec; - prJoinInfo->fgIsJoinComplete = FALSE; - prJoinInfo->u4BufLength = 0; - - //2 <2.1> Sync. to FW domain - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - - if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - prStaRec->fgIsReAssoc = FALSE; - - prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - switch (prP2pConnSettings->eAuthMode) { - case AUTH_MODE_OPEN: /* Note: Omit break here. */ - case AUTH_MODE_WPA: - case AUTH_MODE_WPA_PSK: - case AUTH_MODE_WPA2: - case AUTH_MODE_WPA2_PSK: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_OPEN_SYSTEM; - break; - case AUTH_MODE_SHARED: - prJoinInfo->ucAvailableAuthTypes = (UINT_8)AUTH_TYPE_SHARED_KEY; - break; - case AUTH_MODE_AUTO_SWITCH: - DBGLOG(P2P, LOUD, ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n")); - prJoinInfo->ucAvailableAuthTypes = (UINT_8)(AUTH_TYPE_OPEN_SYSTEM | - AUTH_TYPE_SHARED_KEY); - break; - default: - ASSERT(!(prP2pConnSettings->eAuthMode == AUTH_MODE_WPA_NONE)); - DBGLOG(P2P, ERROR, ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n", - prP2pConnSettings->eAuthMode)); - /* TODO(Kevin): error handling ? */ - return; - } - prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT; - } - else { - ASSERT(FALSE); - // TODO: Shall we considering ROAMIN case for P2P Device?. - } - - - //2 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes. - if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_OPEN_SYSTEM) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_OPEN_SYSTEM; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_OPEN_SYSTEM; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_SHARED_KEY) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_SHARED_KEY; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY; - } - else if (prJoinInfo->ucAvailableAuthTypes & - (UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION) { - - DBGLOG(P2P, TRACE, ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n")); - - prJoinInfo->ucAvailableAuthTypes &= - ~(UINT_8)AUTH_TYPE_FAST_BSS_TRANSITION; - - prStaRec->ucAuthAlgNum = (UINT_8)AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION; - } - else { - ASSERT(0); - } - - - //4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) - if (prBssDesc->ucSSIDLen) { - COPY_SSID(prJoinInfo->rSsidStruct.aucSsid, - prJoinInfo->rSsidStruct.ucSsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - } - - //2 <5> Backup desired channel. - - //2 <6> Send a Msg to trigger SAA to start JOIN process. - prJoinReqMsg = (P_MSG_JOIN_REQ_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T)); - - if (!prJoinReqMsg) { - DBGLOG(P2P, TRACE, ("Allocation Join Message Fail\n")); - ASSERT(FALSE); - return; - } - - prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START; - prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg; - prJoinReqMsg->prStaRec = prStaRec; - - // TODO: Consider fragmentation info in station record. - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinReqMsg, - MSG_SEND_METHOD_BUF); - - - - - } while (FALSE); - - return; -} /* p2pStateInit_GC_JOIN */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process of JOIN Abort. Leave JOIN State & Abort JOIN. -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pStateAbort_GC_JOIN ( - IN P_ADAPTER_T prAdapter, - IN P_P2P_FSM_INFO_T prP2pFsmInfo, - IN P_P2P_JOIN_INFO_T prJoinInfo, - IN ENUM_P2P_STATE_T eNextState - ) -{ - P_MSG_JOIN_ABORT_T prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)NULL; - - - do { - ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL) && (prJoinInfo != NULL)); - - if (prJoinInfo->fgIsJoinComplete == FALSE) { - - prJoinAbortMsg = (P_MSG_JOIN_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_ABORT_T)); - if (!prJoinAbortMsg) { - DBGLOG(P2P, TRACE, ("Fail to allocate join abort message buffer\n")); - ASSERT(FALSE); - return; - } - - prJoinAbortMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_ABORT; - prJoinAbortMsg->ucSeqNum = prJoinInfo->ucSeqNumOfReqMsg; - prJoinAbortMsg->prStaRec = prJoinInfo->prTargetStaRec; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prJoinAbortMsg, - MSG_SEND_METHOD_BUF); - - } - - /* Stop Join Timer. */ - cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer)); - - /* Release channel requested. */ - p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo)); - - } while (FALSE); - - return; - -} /* p2pStateAbort_GC_JOIN */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/privacy.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/privacy.c deleted file mode 100755 index 5b0f1c29e629..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/privacy.c +++ /dev/null @@ -1,1064 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/privacy.c#1 $ -*/ - -/*! \file "privacy.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from rsn.c and nic_privacy.c - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: privacy.c $ - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2011 terry.wu - * NULL - * Fix Hotspot deauth send failed. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 06 28 2011 tsaiyuan.hsu - * [WCXRP00000819] [MT6620 Wi-Fi][Driver] check if staRec is NULL or not in secCheckClassError - * check if staRec is NULL or not in secCheckClassError. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 20 2010 wh.su - * - * adding the wapi code. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * adding the compiling flag for migration. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 22 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the wpi same key id rx issue and fixed the remove wep key issue. - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Send Deauth for Class 3 Error and Leave Network Support - * - * 04 15 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * remove the assert code for allow ad-hoc pkt. - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 04 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Code refine, and remove non-used code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * change the waning message shown level, and clear the global transmit flag for CMD INFRASTRUCTURE. - * - * 02 25 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * For support the WHQL test, do the remove key code refine. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 25 2009 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Integrated modifications for 1st connection (mainly on FW modules MQM, TXM, and RXM) - * * * * * * * * * MQM: BA handling - * * * * * * * * * TXM: Macros updates - * * * * * * * * * RXM: Macros/Duplicate Removal updates - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * modify the cmd with result return - * - * Dec 11 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * fixed the value not initialize issue - * - * Dec 10 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the cmd return type - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to update the auth mode and encryption status for cmd build connection - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some code for wapi mode - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the call to check the 4th and eapol error report frame - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function name - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for parsing the EAPoL frame, and do some code refine - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the class error check - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the cmd_802_11_pmkid code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * doing some function rename, and adding the code for cmd CMD_ADD_REMOVE_KEY - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the clear pmkid function - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix eStaType check for AIS - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the ap selection related code - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_PRIVACY_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the privacy-related -* parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] ucNetTypeIdx Pointer to netowrk type index -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secInit ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetTypeIdx - ) -{ - UINT_8 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secInit"); - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prBssInfo->u4RsnSelectedGroupCipher = 0; - prBssInfo->u4RsnSelectedPairwiseCipher = 0; - prBssInfo->u4RsnSelectedAKMSuite = 0; - -#if CFG_ENABLE_WIFI_DIRECT - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX]; - - prBssInfo->u4RsnSelectedGroupCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedPairwiseCipher = RSN_CIPHER_SUITE_CCMP; - prBssInfo->u4RsnSelectedAKMSuite = RSN_AKM_SUITE_PSK; -#endif - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[0].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[1].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[2].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[3].dot11RSNAConfigPairwiseCipher = - WPA_CIPHER_SUITE_WEP104; - - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[4].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP40; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[5].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_TKIP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[6].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_CCMP; - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[7].dot11RSNAConfigPairwiseCipher = - RSN_CIPHER_SUITE_WEP104; - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[0].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[1].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[2].dot11RSNAConfigAuthenticationSuite = - WPA_AKM_SUITE_PSK; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[3].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_NONE; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[4].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[5].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK; - -#if CFG_SUPPORT_802_11W - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[6].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_802_1X_SHA256; - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[7].dot11RSNAConfigAuthenticationSuite = - RSN_AKM_SUITE_PSK_SHA256; -#endif - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i ++) { - prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i].dot11RSNAConfigAuthenticationSuiteEnabled = - FALSE; - } - - secClearPmkid(prAdapter); - - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rPreauthenticationTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnIndicatePmkidCand, - (UINT_32)NULL); - -#if CFG_SUPPORT_802_11W - cnmTimerInitTimer(prAdapter, - &prAisSpecBssInfo->rSaQueryTimer, - (PFN_MGMT_TIMEOUT_FUNC)rsnStartSaQueryTimer, - (UINT_32)NULL); -#endif - - prAisSpecBssInfo->fgCounterMeasure = FALSE; - prAisSpecBssInfo->ucWEPDefaultKeyID = 0; - - - #if 0 - for (i=0;iarWtbl[i].fgUsed = FALSE; - g_prWifiVar->arWtbl[i].prSta = NULL; - g_prWifiVar->arWtbl[i].ucNetTypeIdx = NETWORK_TYPE_INDEX_NUM; - - } - nicPrivacyInitialize((UINT_8)NETWORK_TYPE_INDEX_NUM); - #endif -} /* secInit */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Rx Class Error" to SEC_FSM for -* JOIN Module. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSwRfb Pointer to the SW RFB. -* -* \return FALSE Class Error -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secCheckClassError ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prSwRfb); - //ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prSwRfb->ucStaRecIdx]); - - if ((prStaRec) && 1 /* RXM_IS_DATA_FRAME(prSwRfb) */) { - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex = prStaRec->ucNetTypeIndex; - - if (IS_NET_ACTIVE(prAdapter, eNetTypeIndex)) { - P_BSS_INFO_T prBssInfo; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]; - - if ((STA_STATE_3 != prStaRec->ucStaState) && - IS_BSS_ACTIVE(prBssInfo) && - prBssInfo->fgIsNetAbsent == FALSE) { - /*(IS_AP_STA(prStaRec) || IS_CLIENT_STA(prStaRec))) {*/ - - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - prStaRec, - NULL, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - - DBGLOG(RSN, INFO, ("Send Deauth to MAC:["MACSTR"] for Rx Class 3 Error.\n", - MAC2STR(prStaRec->aucMacAddr))); - } - - return FALSE; - } - - return secRxPortControlCheck(prAdapter, prSwRfb); - } - } - - return FALSE; -} /* end of secCheckClassError() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to setting the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[in] fgPortBlock The port status -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetPortBlocked ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgPortBlock - ) -{ - if (prSta == NULL) - return ; - - prSta->fgPortBlock = fgPortBlock; - - DBGLOG(RSN, TRACE, ("The STA "MACSTR" port %s\n", MAC2STR(prSta->aucMacAddr), fgPortBlock == TRUE ? "BLOCK" :" OPEN")); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to report the sta port status. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer to the sta -* \param[out] fgPortBlock The port status -* -* \return TRUE sta exist, FALSE sta not exist -* -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secGetPortStatus ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - OUT PBOOLEAN pfgPortStatus - ) -{ - if (prSta == NULL) - return FALSE; - - *pfgPortStatus = prSta->fgPortBlock; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle Peer device Tx Security process MSDU. -* -* \param[in] prMsduInfo pointer to the packet info pointer -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port blocked -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL /* ENUM_PORT_CONTROL_RESULT */ -secTxPortControlCheck( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - if (prStaRec) { - - /* Todo:: */ - if (prMsduInfo->fgIs802_1x) - return TRUE; - - if (prStaRec->fgPortBlock == TRUE) { - DBGLOG(INIT, TRACE, ("Drop Tx packet due Port Control!\n")); - return FALSE; - } - -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - return TRUE; - } -#endif - if (IS_STA_IN_AIS(prStaRec)) { - if (!prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist && - (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED)){ - DBGLOG(INIT, TRACE, ("Drop Tx packet due the key is removed!!!\n")); - return FALSE; - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The Rx Security process MSDU. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSWRfb SW rfb pinter -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRxPortControlCheck ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSWRfb - ) -{ - ASSERT(prSWRfb); - -#if 0 - /* whsu:Todo: Process MGMT and DATA */ - if (prSWRfb->prStaRec) { - if (prSWRfb->prStaRec->fgPortBlock == TRUE) { - if (1 /* prSWRfb->fgIsDataFrame and not 1x*/ && - (g_prWifiVar->rConnSettings.eAuthMode >= AUTH_MODE_WPA)){ - //DBGLOG(SEC, WARN, ("Drop Rx data due port control !\r\n")); - return TRUE; /* Todo: whsu FALSE; */ - } - //if (!RX_STATUS_IS_PROTECT(prSWRfb->prRxStatus)) { - // DBGLOG(RSN, WARN, ("Drop rcv non-encrypted data frame!\n")); - // return FALSE; - //} - } - } - else { - } -#endif - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine will enable/disable the cipher suite -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4CipherSuitesFlags flag for cipher suite -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secSetCipherSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4CipherSuitesFlags - ) -{ - UINT_32 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - P_IEEE_802_11_MIB_T prMib; - - ASSERT(prAdapter); - - prMib = &prAdapter->rMib; - - ASSERT(prMib); - - if (u4CipherSuitesFlags == CIPHER_FLAG_NONE) { - /* Disable all the pairwise cipher suites. */ - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prMib->dot11RSNAConfigPairwiseCiphersTable[i].dot11RSNAConfigPairwiseCipherEnabled = - FALSE; - } - - /* Update the group cipher suite. */ - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - - return; - } - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prMib->dot11RSNAConfigPairwiseCiphersTable[i]; - - switch (prEntry->dot11RSNAConfigPairwiseCipher) { - case WPA_CIPHER_SUITE_WEP40: - case RSN_CIPHER_SUITE_WEP40: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP40) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (u4CipherSuitesFlags & CIPHER_FLAG_TKIP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (u4CipherSuitesFlags & CIPHER_FLAG_CCMP) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - - case WPA_CIPHER_SUITE_WEP104: - case RSN_CIPHER_SUITE_WEP104: - if (u4CipherSuitesFlags & CIPHER_FLAG_WEP104) { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = TRUE; - } - else { - prEntry->dot11RSNAConfigPairwiseCipherEnabled = FALSE; - } - break; - default: - break; - } - } - - /* Update the group cipher suite. */ - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_WEP40; - } - else { - prMib->dot11RSNAConfigGroupCipher = WPA_CIPHER_SUITE_NONE; - } - -} /* secSetCipherSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle The 2nd Tx EAPoL Frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsduInfo pointer to the packet info pointer -* \param[in] pucPayload pointer to the 1x hdr -* \param[in] u2PayloadLen the 1x payload length -* -* \retval TRUE Accept the packet -* \retval FALSE Refuse the MSDU packet due port control -* -*/ -/*----------------------------------------------------------------------------*/ -BOOL -secProcessEAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN PUINT_8 pucPayload, - IN UINT_16 u2PayloadLen -) -{ - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - P_IEEE_802_1X_HDR pr1xHdr; - UINT_16 u2KeyInfo; - - ASSERT(prMsduInfo); - ASSERT(prStaRec); - - //prStaRec = &(g_arStaRec[prMsduInfo->ucStaRecIndex]); - ASSERT(prStaRec); - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)pucPayload; - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)((PUINT_32)(pucPayload + 4)); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (u2KeyInfo & WPA_KEY_INFO_SECURE) { - /* 4th EAPoL check at secHandleTxDoneCallback() */ - //DBGLOG(RSN, TRACE, ("Tx 4th EAPoL frame\r\n")); - } - else if (u2PayloadLen == 123 /* Not include LLC */) { - DBGLOG(RSN, INFO, ("Tx 2nd EAPoL frame\r\n")); - secFsmEvent2ndEapolTx(prAdapter, prStaRec); - } - } - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will handle the 4th EAPoL Tx done and mic Error Report frame. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secHandleTxDoneCallback( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_STA_RECORD_T prStaRec, - IN WLAN_STATUS rStatus - ) -{ - PUINT_8 pucPayload; - P_IEEE_802_1X_HDR pr1xHdr = (P_IEEE_802_1X_HDR)NULL; - P_EAPOL_KEY prEapol = (P_EAPOL_KEY)NULL; - UINT_16 u2KeyInfo; - UINT_16 u2PayloadLen; - - DEBUGFUNC("secHandleTxDoneCallback"); - - ASSERT(prMsduInfo); - //Todo:: Notice if using the TX free immediate after send to firmware, the payload may not correcttly!!!! - - ASSERT(prStaRec); - - //Todo:: This call back may not need because the order of set key and send 4th 1x can be make sure - //Todo:: Notice the LLC offset - #if 1 - pucPayload = (PUINT_8)prMsduInfo->prPacket; - ASSERT(pucPayload); - - u2PayloadLen = prMsduInfo->u2FrameLength; - - if (0 /* prMsduInfo->fgIs1xFrame */) { - - if (prStaRec && IS_AP_STA(prStaRec)) { - pr1xHdr = (P_IEEE_802_1X_HDR)(PUINT_32)(pucPayload + 8); - if ((pr1xHdr->ucType == 3) /* EAPoL key */ && ((u2PayloadLen - 4) > sizeof(EAPOL_KEY))) { - prEapol = (P_EAPOL_KEY)(PUINT_32)(pucPayload + 12); - WLAN_GET_FIELD_BE16(prEapol->aucKeyInfo, &u2KeyInfo); - if ((prEapol->ucType == 254) && (u2KeyInfo & MASK_2ND_EAPOL)) { - if (prStaRec->rSecInfo.fg2nd1xSend == TRUE && u2PayloadLen == 107 /* include LLC *//* u2KeyInfo & WPA_KEY_INFO_SECURE */) { - DBGLOG(RSN, INFO, ("Tx 4th EAPoL frame\r\n")); - secFsmEvent4ndEapolTxDone(prAdapter, prStaRec); - } - else if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone){ - DBGLOG(RSN, INFO, ("Tx EAPoL Error report frame\r\n")); - //secFsmEventEapolTxDone(prAdapter, (UINT_32)prMsduInfo->prStaRec); - } - } - } - } - - } - #endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to initialize the pmkid parameters. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -secClearPmkid ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("secClearPmkid"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - DBGLOG(RSN, TRACE, ("secClearPmkid\n")); - prAisSpecBssInfo->u4PmkidCandicateCount = 0; - prAisSpecBssInfo->u4PmkidCacheCount = 0; - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCandicate, sizeof(PMKID_CANDICATE_T) * CFG_MAX_PMKID_CACHE); - kalMemZero((PVOID)prAisSpecBssInfo->arPmkidCache, sizeof(PMKID_ENTRY_T) * CFG_MAX_PMKID_CACHE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether WPA, or WPA2 but not WPA-None is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secRsnKeyHandshakeEnabled ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - - ASSERT(prConnSettings); - - ASSERT(prConnSettings->eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - if (prConnSettings->eEncStatus == ENUM_ENCRYPTION_DISABLED) { - return FALSE; - } - - ASSERT(prConnSettings->eAuthMode < AUTH_MODE_NUM); - if ((prConnSettings->eAuthMode >= AUTH_MODE_WPA) && - (prConnSettings->eAuthMode != AUTH_MODE_WPA_NONE)) { - return TRUE; - } - - return FALSE; -} /* secRsnKeyHandshakeEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return whether the transmit key alread installed. -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prSta Pointer the sta record -* -* \retval TRUE Default key or Transmit key installed -* FALSE Default key or Transmit key not installed -* -* \note: -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secTransmitKeyExist ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prSta); - - if (prSta->fgTransmitKeyExist){ - return TRUE; - } - else { - return FALSE; - } -} /* secTransmitKeyExist */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Whether 802.11 privacy is enabled. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \retval BOOLEAN -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secEnabledInAis ( - IN P_ADAPTER_T prAdapter - ) -{ - DEBUGFUNC("secEnabled"); - - ASSERT(prAdapter->rWifiVar.rConnSettings.eEncStatus < ENUM_ENCRYPTION3_KEY_ABSENT); - - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) { - case ENUM_ENCRYPTION_DISABLED: - return FALSE; - case ENUM_ENCRYPTION1_ENABLED: - case ENUM_ENCRYPTION2_ENABLED: - case ENUM_ENCRYPTION3_ENABLED: - return TRUE; - default: - DBGLOG(RSN, TRACE, ("Unknown encryption setting %d\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - break; - } - return FALSE; -} /* secEnabled */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the privacy bit at mac header for TxM -* -* \param[in] prAdapter Pointer to the Adapter structure -* \param[in] prMsdu the msdu for known the sta record -* -* \return TRUE the privacy need to set -* FALSE the privacy no need to set -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secIsProtectedFrame ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsdu, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prAdapter); - - ASSERT(prMsdu); - - ASSERT(prStaRec); - //prStaRec = &(g_arStaRec[prMsdu->ucStaRecIndex]); - - if (prStaRec == NULL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist) - return TRUE; - return FALSE; /* No privacy bit */ - } - - /* Todo:: */ - if (0 /* prMsdu->fgIs1xFrame */){ - if (IS_STA_IN_AIS(prStaRec) && - prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { - DBGLOG(RSN, LOUD, ("For AIS Legacy 1x, always not encryped\n")); - return FALSE; - } - else if (!prStaRec->fgTransmitKeyExist) { - DBGLOG(RSN, LOUD, ("1x Not Protected.\n")); - return FALSE; - } - else if (prStaRec->rSecInfo.fgKeyStored) { - DBGLOG(RSN, LOUD, ("1x not Protected due key stored!\n")); - return FALSE; - } - else { - DBGLOG(RSN, LOUD, ("1x Protected.\n")); - return TRUE; - } - } - else { - if (!prStaRec->fgTransmitKeyExist) { - /* whsu , check for AIS only */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist){ - DBGLOG(RSN, LOUD, ("Protected\n")); - return TRUE; - } - } - else { - DBGLOG(RSN, LOUD, ("Protected.\n")); - return TRUE; - } - } - - /* No sec or key is removed!!! */ - return FALSE; -} -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rate.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rate.c deleted file mode 100755 index be4a7d55a9cb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rate.c +++ /dev/null @@ -1,587 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/rate.c#1 $ -*/ - -/*! \file "rate.c" - \brief This file contains the transmission rate handling routines. - - This file contains the transmission rate handling routines for setting up - ACK/CTS Rate, Highest Tx Rate, Lowest Tx Rate, Initial Tx Rate and do - conversion between Rate Set and Data Rates. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rate.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add rate.c. - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comments - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix DBGLOG - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -** \main\maintrunk.MT5921\12 2008-12-19 17:19:32 GMT mtk01461 -** Fix the problem that do not ASSERT the length of Supported Rate IE == 8 -** \main\maintrunk.MT5921\11 2008-12-01 18:17:42 GMT mtk01088 -** fixed the lint "possible using null pointer" warning -** \main\maintrunk.MT5921\10 2008-08-20 00:16:36 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\9 2008-04-13 21:17:13 GMT mtk01461 -** Revise GEN Link Speed OID -** \main\maintrunk.MT5921\8 2008-03-28 10:40:13 GMT mtk01461 -** Add rateGetRateSetFromDataRates() for set desired rate OID -** \main\maintrunk.MT5921\7 2008-03-26 09:16:20 GMT mtk01461 -** Add adopt operational rate as ACK rate if BasicRateSet was not found -** Add comments -** \main\maintrunk.MT5921\6 2008-02-21 15:01:39 GMT mtk01461 -** Add initial rate according rx signal quality support -** \main\maintrunk.MT5921\5 2008-01-07 15:06:44 GMT mtk01461 -** Fix typo of rate adaptation of CtrlResp Frame -** \main\maintrunk.MT5921\4 2007-10-25 18:05:12 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* The list of valid data rates. */ -const UINT_8 aucDataRate[] = { - RATE_1M, /* RATE_1M_INDEX = 0 */ - RATE_2M, /* RATE_2M_INDEX */ - RATE_5_5M, /* RATE_5_5M_INDEX */ - RATE_11M, /* RATE_11M_INDEX */ - RATE_22M, /* RATE_22M_INDEX */ - RATE_33M, /* RATE_33M_INDEX */ - RATE_6M, /* RATE_6M_INDEX */ - RATE_9M, /* RATE_9M_INDEX */ - RATE_12M, /* RATE_12M_INDEX */ - RATE_18M, /* RATE_18M_INDEX */ - RATE_24M, /* RATE_24M_INDEX */ - RATE_36M, /* RATE_36M_INDEX */ - RATE_48M, /* RATE_48M_INDEX */ - RATE_54M, /* RATE_54M_INDEX */ - RATE_HT_PHY /* RATE_HT_PHY_INDEX */ -}; - -static const UINT_8 aucDefaultAckCtsRateIndex[RATE_NUM] = { - RATE_1M_INDEX, /* RATE_1M_INDEX = 0 */ - RATE_2M_INDEX, /* RATE_2M_INDEX */ - RATE_5_5M_INDEX, /* RATE_5_5M_INDEX */ - RATE_11M_INDEX, /* RATE_11M_INDEX */ - RATE_1M_INDEX, /* RATE_22M_INDEX - Not supported */ - RATE_1M_INDEX, /* RATE_33M_INDEX - Not supported */ - RATE_6M_INDEX, /* RATE_6M_INDEX */ - RATE_6M_INDEX, /* RATE_9M_INDEX */ - RATE_12M_INDEX, /* RATE_12M_INDEX */ - RATE_12M_INDEX, /* RATE_18M_INDEX */ - RATE_24M_INDEX, /* RATE_24M_INDEX */ - RATE_24M_INDEX, /* RATE_36M_INDEX */ - RATE_24M_INDEX, /* RATE_48M_INDEX */ - RATE_24M_INDEX /* RATE_54M_INDEX */ -}; - -const BOOLEAN afgIsOFDMRate[RATE_NUM] = { - FALSE, /* RATE_1M_INDEX = 0 */ - FALSE, /* RATE_2M_INDEX */ - FALSE, /* RATE_5_5M_INDEX */ - FALSE, /* RATE_11M_INDEX */ - FALSE, /* RATE_22M_INDEX - Not supported */ - FALSE, /* RATE_33M_INDEX - Not supported */ - TRUE, /* RATE_6M_INDEX */ - TRUE, /* RATE_9M_INDEX */ - TRUE, /* RATE_12M_INDEX */ - TRUE, /* RATE_18M_INDEX */ - TRUE, /* RATE_24M_INDEX */ - TRUE, /* RATE_36M_INDEX */ - TRUE, /* RATE_48M_INDEX */ - TRUE /* RATE_54M_INDEX */ -}; - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Supported Rate & Extended Supported Rate IE to the -* Operational Rate Set and Basic Rate Set, and also check if any Basic -* Rate Code is unknown by driver. -* -* @param[in] prIeSupportedRate Pointer to the Supported Rate IE -* @param[in] prIeExtSupportedRate Pointer to the Ext Supported Rate IE -* @param[out] pu2OperationalRateSet Pointer to the Operational Rate Set -* @param[out] pu2BSSBasicRateSet Pointer to the Basic Rate Set -* @param[out] pfgIsUnknownBSSBasicRate Pointer to a Flag to indicate that Basic -* Rate Set has unknown Rate Code -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromIEs ( - IN P_IE_SUPPORTED_RATE_T prIeSupportedRate, - IN P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate, - OUT PUINT_16 pu2OperationalRateSet, - OUT PUINT_16 pu2BSSBasicRateSet, - OUT PBOOLEAN pfgIsUnknownBSSBasicRate - ) -{ - UINT_16 u2OperationalRateSet = 0; - UINT_16 u2BSSBasicRateSet = 0; - BOOLEAN fgIsUnknownBSSBasicRate = FALSE; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pu2OperationalRateSet); - ASSERT(pu2BSSBasicRateSet); - ASSERT(pfgIsUnknownBSSBasicRate); - - if (prIeSupportedRate) { - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - //ASSERT(prIeSupportedRate->ucLength <= ELEM_MAX_LEN_SUP_RATES); - ASSERT(prIeSupportedRate->ucLength <= RATE_NUM); - - for (i = 0; i < prIeSupportedRate->ucLength; i++) { - ucRate = prIeSupportedRate->aucSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeSupportedRate->aucSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - - if (prIeExtSupportedRate) { - //ASSERT(prIeExtSupportedRate->ucLength <= ELEM_MAX_LEN_EXTENDED_SUP_RATES); - - for (i = 0; i < prIeExtSupportedRate->ucLength; i++) { - ucRate = prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2OperationalRateSet |= BIT(j); - - if (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT) { - u2BSSBasicRateSet |= BIT(j); - } - - break; - } - } - - if ((j == sizeof(aucDataRate)/sizeof(UINT_8)) && - (prIeExtSupportedRate->aucExtSupportedRates[i] & RATE_BASIC_BIT)) { - fgIsUnknownBSSBasicRate = TRUE; /* A data rate not list in the aucDataRate[] */ - } - } - } - - *pu2OperationalRateSet = u2OperationalRateSet; - *pu2BSSBasicRateSet = u2BSSBasicRateSet; - *pfgIsUnknownBSSBasicRate = fgIsUnknownBSSBasicRate; - - return; - -} /* end of rateGetRateSetFromIEs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the given Operational Rate Set & Basic Rate Set to the Rate Code -* Format for used in (Ext)Supportec Rate IE. -* -* @param[in] u2OperationalRateSet Operational Rate Set -* @param[in] u2BSSBasicRateSet Basic Rate Set -* @param[out] pucDataRates Pointer to the Data Rate Buffer -* @param[out] pucDataRatesLen Pointer to the Data Rate Buffer Length -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - OUT PUINT_8 pucDataRates, - OUT PUINT_8 pucDataRatesLen - ) -{ - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pucDataRatesLen); - - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - for (i = RATE_1M_INDEX, j = 0; i < RATE_NUM; i++) { - if (u2OperationalRateSet & BIT(i)) { - - *(pucDataRates + j) = aucDataRate[i]; - - if (u2BSSBasicRateSet & BIT(i)) { - *(pucDataRates + j) |= RATE_BASIC_BIT; - } - - j++; - } - } - - *pucDataRatesLen = (UINT_8)j; - - return; - -} /* end of rateGetDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the highest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucHighestRateIndex Pointer to buffer of the Highest Rate Index -* -* \retval TRUE Highest Rate Index was found -* \retval FALSE Highest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetHighestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucHighestRateIndex - ) -{ - INT_32 i; - - - ASSERT(pucHighestRateIndex); - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucHighestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetHighestRateIndexFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the lowest rate from given Rate Set. -* -* \param[in] u2RateSet Rate Set -* \param[out] pucLowestRateIndex Pointer to buffer of the Lowest Rate Index -* -* \retval TRUE Lowest Rate Index was found -* \retval FALSE Lowest Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetLowestRateIndexFromRateSet ( - IN UINT_16 u2RateSet, - OUT PUINT_8 pucLowestRateIndex - ) -{ - UINT_32 i; - - ASSERT(pucLowestRateIndex); - - for (i = RATE_1M_INDEX; i <= RATE_54M_INDEX; i++) { - if (u2RateSet & BIT(i)) { - *pucLowestRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetLowestRateIndexFromRateSet() */ - - -#if 0 // NOTE(Kevin): For reference -/*----------------------------------------------------------------------------*/ -/*! -* \brief Convert the given Data Rates to the Rate Set. -* -* \param[in] pucDataRates Pointer to the Data Rates -* \param[in] ucDataRatesLen Length of given Data Rates -* \param[out] pu2RateSet Pointer to the Rate Set -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateGetRateSetFromDataRates ( - IN PUINT_8 pucDataRates, - IN UINT_8 ucDataRatesLen, - OUT PUINT_16 pu2RateSet - ) -{ - UINT_16 u2RateSet = 0; - UINT_8 ucRate; - UINT_32 i, j; - - - ASSERT(pucDataRates); - ASSERT(pu2RateSet); - - if (pucDataRates) { - for (i = 0; i < ucDataRatesLen; i++) { - ucRate = pucDataRates[i] & RATE_MASK; - - /* Search all valid data rates */ - for (j = 0; j < sizeof(aucDataRate)/sizeof(UINT_8); j++) { - if (ucRate == aucDataRate[j]) { - u2RateSet |= BIT(j); - break; - } - } - } - } - - *pu2RateSet = u2RateSet; - - return; - -} /* end of rateGetRateSetFromDataRates() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the Operational Rate Set and Basic Rate Set to get the corresponding -* ACK/CTS(Respnose) TX Rates. -* -* \param[in] u2OperationalRateSet Operational Rate Set -* \param[in] u2BSSBasicRateSet Basic Rate Set -* \param[out] aucAckCtsRateIndex Pointer to the Ack/Cts Data Rate Buffer -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rateSetAckCtsDataRatesFromRateSet ( - IN UINT_16 u2OperationalRateSet, - IN UINT_16 u2BSSBasicRateSet, - IN OUT UINT_8 aucAckCtsRateIndex[] - ) -{ - INT_32 i,j; - - - ASSERT(aucAckCtsRateIndex); - ASSERT(u2BSSBasicRateSet == (u2OperationalRateSet & u2BSSBasicRateSet)); - - /* Setup default ACK/CTS response rate */ - kalMemCopy(aucAckCtsRateIndex, (PVOID)aucDefaultAckCtsRateIndex, sizeof(aucDefaultAckCtsRateIndex)); - - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2OperationalRateSet & BIT(i)) { - for (j = i; j >= RATE_1M_INDEX; j--) { - if (u2BSSBasicRateSet & BIT(j)) { - if ((afgIsOFDMRate[i] && afgIsOFDMRate[j]) || (!afgIsOFDMRate[i] && !afgIsOFDMRate[j])) // Reply ACK Frame at the same Modulation Scheme. - aucAckCtsRateIndex[i] = (UINT_8)j; - break; - } - } - - /* NOTE(Kevin 2008/03/25): Following code is used for those AP which has - * NULL BasicRateSet. - * e.g. If input Operational Rate Set = [18M 12M 9M], Basic Rate Set = NULL. - * Originally we'll get Ack Rate for [18M 12M 9M] is [12M 12M "6M"]. - * Now we'll get Ack Rate for [18M 12M 9M] is [12M 12M 9M], - * The Ack Rate for Tx Rates which are not list in Operational Rate Set is still - * use highest mandatory rate as default. - */ - if (j < RATE_1M_INDEX) { /* The ACK/CTS rate was not found in BasicRateSet */ - if (!(BIT(aucAckCtsRateIndex[i]) & u2OperationalRateSet)) { - aucAckCtsRateIndex[i] = (UINT_8)i; - } - } - } - } - - return; - -} /* end of rateSetAckCtsDataRatesFromRateSet() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the proper initial rate from Rate Set according to given RCPI value -* -* \param[in] u2RateSet Rate Set -* \param[in] rRcpi RCPI value from AP or Peer STA -* \param[out] pucInitialRateIndex Pointer to buffer of the initial Rate Index -* -* \retval TRUE Initial Rate Index was found -* \retval FALSE Initial Rate Index was not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rateGetBestInitialRateIndex ( - IN UINT_16 u2RateSet, - IN RCPI rRcpi, - OUT PUINT_8 pucInitialRateIndex - ) -{ - UINT_16 u2InitRateSet; - INT_32 i; - - - ASSERT(pucInitialRateIndex); - - DBGLOG(MGT, TRACE, ("rRcpi = %d\n", rRcpi)); - - if (rRcpi >= RCPI_100) { /* Best Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_100); - } - else if (rRcpi >= RCPI_80) { /* Better Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_80); - } - else if (rRcpi >= RCPI_60) { /* Good Signal */ - u2InitRateSet = INITIAL_RATE_SET(RCPI_60); - } - else { /* Worse Signal */ - /* NOTE(Kevin): If return FALSE, we should assign the BSS Basic Rate Index - * (prBssInfo->ucBasicRateIndex) to the initial rate. It was determined in - * function - bssUpdateTxRateForControlFrame(). - */ - return FALSE; - } - - u2RateSet &= u2InitRateSet; - - for (i = RATE_54M_INDEX; i >= RATE_1M_INDEX; i--) { - if (u2RateSet & BIT(i)) { - *pucInitialRateIndex = (UINT_8)i; - return TRUE; - } - } - - return FALSE; - -} /* end of rateGetBestInitialRateIndex() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm.c deleted file mode 100755 index 08bc83b2c49e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm.c +++ /dev/null @@ -1,1763 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/rlm.c#1 $ -*/ - -/*! \file "rlm.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Check length HT cap IE about RX associate request frame - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 03 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Fix preamble type of STA mode - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Not send ERP IE if peer STA is 802.11b-only - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 28 2011 cm.chang - * NULL - * Add length check to reduce possibility to adopt wrong IE - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * Handle client mode about preamble type and slot time - * - * 09 01 2011 cm.chang - * [WCXRP00000971] [MT6620 Wi-Fi][Driver][FW] Not set Beacon timeout interval when CPTT - * Final channel number only adopts the field from assoc response - * - * 06 10 2011 cm.chang - * [WCXRP00000773] [MT6620 Wi-Fi][Driver] Workaround some AP fill primary channel field with its secondary channel - * If DS IE exists, ignore the primary channel field in HT OP IE - * - * 05 03 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Fix compiling error - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 10 15 2010 cm.chang - * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash. - * Add exception handle when no mgmt buffer in free build - * - * 10 08 2010 cm.chang - * NULL - * When 20M only setting, ignore OBSS IE - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 23 2010 chinghwa.yu - * NULL - * Temporary add rlmUpdateParamByStaForBow() and rlmBssInitForBow(). - * - * 08 23 2010 chinghwa.yu - * NULL - * Add CFG_ENABLE_BT_OVER_WIFI. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 02 2010 yuche.tsai - * NULL - * P2P Group Negotiation Code Check in. - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 06 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix channel ID definition in RFB status to primary channel instead of center channel - * - * 06 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add TX short GI compiling option - * - * 06 02 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Roll back to remove CFG_SUPPORT_BCM_TEST. - * - * 06 01 2010 chinghwa.yu - * [BORA00000563]Add WiFi CoEx BCM module - * Update BCM Test and RW configuration. - * - * 05 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add some compiling options to control 11n functions - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 05 18 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Ad-hoc Beacon should not carry HT OP and OBSS IEs - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Utilize status of swRfb to know channel number and band - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Different invoking order for WTBL entry of associated AP - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 04 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process Beacon only ready for infra STA now - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 24 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * fixed some WHQL testing error. - * - * 03 15 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide draft measurement and quiet functions - * - * 03 09 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * If bss is not 11n network, zero WTBL HT parameters - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Generate HT IE only depending on own phyTypeSet - * - * 03 02 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not fill HT related IE if BssInfo does not include 11n phySet - * - * 03 01 2010 tehuang.liu - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * To store field AMPDU Parameters in STA_REC - * - * 02 26 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RDG RX, but disable RDG TX for IOT and LongNAV - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 07 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Modify the parameter of rlmRecAssocRspHtInfo function - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix prBssInfo->ucPrimaryChannel handle for assoc resp - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add some function to process HT operation - * - * Nov 28 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Call rlmStatisticsInit() to handle MIB counters - * - * Nov 18 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ); - -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ); - -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventInit ( - P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Note: assume TIMER_T structures are reset to zero or stopped - * before invoking this function. - */ - - /* Initialize OBSS FSM */ - rlmObssInit(prAdapter); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFsmEventUninit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - /* Note: all RLM timers will also be stopped. - * Now only one OBSS scan timer. - */ - rlmBssReset(prAdapter, prBssInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe request, association request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmReqGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateExtCapIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillExtCapIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateHtOpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11N(prBssInfo) && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N))) { - - rlmFillHtOpIE(prAdapter, prBssInfo, prMsduInfo); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief For probe response (GO, IBSS) and association response -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmRspGenerateErpIE ( - P_ADAPTER_T prAdapter, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_IE_ERP_T prErpIe; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - ASSERT(IS_NET_ACTIVE(prAdapter, prMsduInfo->ucNetworkType)); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]; - ASSERT(prBssInfo); - - if (RLM_NET_IS_11GN(prBssInfo) && prBssInfo->eBand == BAND_2G4 && - (!prStaRec || (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11GN))) { - prErpIe = (P_IE_ERP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add ERP IE */ - prErpIe->ucId = ELEM_ID_ERP_INFO; - prErpIe->ucLength = 1; - - prErpIe->ucERP = prBssInfo->fgObssErpProtectMode ? - ERP_INFO_USE_PROTECTION : 0; - - if (prBssInfo->fgErpProtectMode) { - prErpIe->ucERP |= - (ERP_INFO_NON_ERP_PRESENT | ERP_INFO_USE_PROTECTION); - } - - /* Handle barker preamble */ - if (!prBssInfo->fgUseShortPreamble) { - prErpIe->ucERP |= ERP_INFO_BARKER_PREAMBLE_MODE; - } - - ASSERT(IE_SIZE(prErpIe) <= (ELEM_HDR_LEN+ ELEM_MAX_LEN_ERP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prErpIe); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_CAP_T prHtCap; - P_SUP_MCS_SET_FIELD prSupMcsSet; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - prHtCap = (P_IE_HT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT capabilities IE */ - prHtCap->ucId = ELEM_ID_HT_CAP; - prHtCap->ucLength = sizeof(IE_HT_CAP_T) - ELEM_HDR_LEN; - - prHtCap->u2HtCapInfo = HT_CAP_INFO_DEFAULT_VAL; - if (!fg40mAllowed) { - prHtCap->u2HtCapInfo &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH | - HT_CAP_INFO_SHORT_GI_40M | HT_CAP_INFO_DSSS_CCK_IN_40M); - } - if (prAdapter->rWifiVar.rConnSettings.fgRxShortGIDisabled) { - prHtCap->u2HtCapInfo &= - ~(HT_CAP_INFO_SHORT_GI_20M | HT_CAP_INFO_SHORT_GI_40M); - } - - prHtCap->ucAmpduParam = AMPDU_PARAM_DEFAULT_VAL; - - prSupMcsSet = &prHtCap->rSupMcsSet; - kalMemZero((PVOID)&prSupMcsSet->aucRxMcsBitmask[0], - SUP_MCS_RX_BITMASK_OCTET_NUM); - - prSupMcsSet->aucRxMcsBitmask[0] = BITS(0, 7); - - if (fg40mAllowed) { - prSupMcsSet->aucRxMcsBitmask[32/8] = BIT(0); /* MCS32 */ - } - prSupMcsSet->u2RxHighestSupportedRate = SUP_MCS_RX_DEFAULT_HIGHEST_RATE; - prSupMcsSet->u4TxRateInfo = SUP_MCS_TX_DEFAULT_VAL; - - prHtCap->u2HtExtendedCap = HT_EXT_CAP_DEFAULT_VAL; - if (!fg40mAllowed || prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prHtCap->u2HtExtendedCap &= - ~(HT_EXT_CAP_PCO | HT_EXT_CAP_PCO_TRANS_TIME_NONE); - } - - prHtCap->u4TxBeamformingCap = TX_BEAMFORMING_CAP_DEFAULT_VAL; - - prHtCap->ucAselCap = ASEL_CAP_DEFAULT_VAL; - - - ASSERT(IE_SIZE(prHtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillExtCapIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_EXT_CAP_T prExtCap; - BOOLEAN fg40mAllowed; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - fg40mAllowed = prBssInfo->fgAssoc40mBwAllowed; - - /* Add Extended Capabilities IE */ - prExtCap = (P_EXT_CAP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - prExtCap->ucId = ELEM_ID_EXTENDED_CAP; - prExtCap->ucLength = 1; - prExtCap->aucCapabilities[0] = ELEM_EXT_CAP_DEFAULT_VAL; - - if (!fg40mAllowed) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_20_40_COEXIST_SUPPORT; - } - - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_PSMP_CAP; - } - - ASSERT(IE_SIZE(prExtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prExtCap); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmFillHtOpIE ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_HT_OP_T prHtOp; - UINT_16 i; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(prMsduInfo); - - prHtOp = (P_IE_HT_OP_T) - (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); - - /* Add HT operation IE */ - prHtOp->ucId = ELEM_ID_HT_OP; - prHtOp->ucLength = sizeof(IE_HT_OP_T) - ELEM_HDR_LEN; - - /* RIFS and 20/40 bandwidth operations are included */ - prHtOp->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prHtOp->ucInfo1 = prBssInfo->ucHtOpInfo1; - - /* Decide HT protection mode field */ - if (prBssInfo->eHtProtectMode == HT_PROTECT_MODE_NON_HT) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_HT; - } - else if (prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - prHtOp->u2Info2 = (UINT_8) HT_PROTECT_MODE_NON_MEMBER; - } - else { - /* It may be SYS_PROTECT_MODE_NONE or SYS_PROTECT_MODE_20M */ - prHtOp->u2Info2 = (UINT_8) prBssInfo->eHtProtectMode; - } - - if (prBssInfo->eGfOperationMode != GF_MODE_NORMAL) { - /* It may be GF_MODE_PROTECT or GF_MODE_DISALLOWED - * Note: it will also be set in ad-hoc network - */ - prHtOp->u2Info2 |= HT_OP_INFO2_NON_GF_HT_STA_PRESENT; - } - - if (0 /* Regulatory class 16 */ && - prBssInfo->eObssHtProtectMode == HT_PROTECT_MODE_NON_MEMBER) { - /* (TBD) It is HT_PROTECT_MODE_NON_MEMBER, so require protection - * although it is possible to have no protection by spec. - */ - prHtOp->u2Info2 |= HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT; - } - - prHtOp->u2Info3 = prBssInfo->u2HtOpInfo3; /* To do: handle L-SIG TXOP */ - - /* No basic MCSx are needed temporarily */ - for (i = 0; i < 16; i++) { - prHtOp->aucBasicMcsSet[i] = 0; - } - - ASSERT(IE_SIZE(prHtOp) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_OP)); - - prMsduInfo->u2FrameLength += IE_SIZE(prHtOp); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked to update parameters of associated AP. -* (Association response and Beacon) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 -rlmRecIeInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset; - P_STA_RECORD_T prStaRec; - P_IE_HT_CAP_T prHtCap; - P_IE_HT_OP_T prHtOp; - P_IE_OBSS_SCAN_PARAM_T prObssScnParam; - UINT_8 ucERP, ucPrimaryChannel; -#if CFG_SUPPORT_QUIET && 0 - BOOLEAN fgHasQuietIE = FALSE; -#endif - - ASSERT(prAdapter); - ASSERT(prBssInfo); - ASSERT(pucIE); - - prStaRec = prBssInfo->prStaRecOfAP; - ASSERT(prStaRec); - if (!prStaRec) { - return 0; - } - - prBssInfo->fgUseShortPreamble = prBssInfo->fgIsShortPreambleAllowed; - ucPrimaryChannel = 0; - prObssScnParam = NULL; - - /* Note: HT-related members in staRec may not be zero before, so - * if following IE does not exist, they are still not zero. - * These HT-related parameters are vaild only when the corresponding - * BssInfo supports 802.11n, i.e., RLM_NET_IS_11N() - */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - case ELEM_ID_HT_OP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPrimaryChannel == 0) { - ucPrimaryChannel = prHtOp->ucPrimaryChannel; - } - prBssInfo->ucHtOpInfo1 = prHtOp->ucInfo1; - prBssInfo->u2HtOpInfo2 = prHtOp->u2Info2; - prBssInfo->u2HtOpInfo3 = prHtOp->u2Info3; - - if (!prBssInfo->fg40mBwAllowed) { - prBssInfo->ucHtOpInfo1 &= - ~(HT_OP_INFO1_SCO | HT_OP_INFO1_STA_CHNL_WIDTH); - } - - if ((prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssInfo->eBssSCO = (ENUM_CHNL_EXT_T) - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_SCO); - } - - prBssInfo->eHtProtectMode = (ENUM_HT_PROTECT_MODE_T) - (prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_HT_PROTECTION); - - /* To do: process regulatory class 16 */ - if ((prBssInfo->u2HtOpInfo2 & HT_OP_INFO2_OBSS_NON_HT_STA_PRESENT) - && 0 /* && regulatory class is 16 */) { - prBssInfo->eGfOperationMode = GF_MODE_DISALLOWED; - } - else if (prBssInfo->u2HtOpInfo2&HT_OP_INFO2_NON_GF_HT_STA_PRESENT) { - prBssInfo->eGfOperationMode = GF_MODE_PROTECT; - } - else { - prBssInfo->eGfOperationMode = GF_MODE_NORMAL; - } - - prBssInfo->eRifsOperationMode = - (prBssInfo->ucHtOpInfo1 & HT_OP_INFO1_RIFS_MODE) ? - RIFS_MODE_NORMAL : RIFS_MODE_DISALLOWED; - - break; - - case ELEM_ID_20_40_BSS_COEXISTENCE: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store if scanning exemption grant to BssInfo */ - break; - - case ELEM_ID_OBSS_SCAN_PARAMS: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_OBSS_SCAN_PARAM_T) - 2)) { - break; - } - /* Store OBSS parameters to BssInfo */ - prObssScnParam = (P_IE_OBSS_SCAN_PARAM_T) pucIE; - break; - - case ELEM_ID_EXTENDED_CAP: - if (!RLM_NET_IS_11N(prBssInfo)) { - break; - } - /* To do: store extended capability (PSMP, coexist) to BssInfo */ - break; - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) != (sizeof(IE_ERP_T) - 2) || - prBssInfo->eBand != BAND_2G4) { - break; - } - ucERP = ERP_INFO_IE(pucIE)->ucERP; - prBssInfo->fgErpProtectMode = - (ucERP & ERP_INFO_USE_PROTECTION) ? TRUE : FALSE; - - if (ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucPrimaryChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - - #if CFG_SUPPORT_QUIET && 0 - /* Note: RRM code should be moved to independent RRM function by - * component design rule. But we attach it to RLM temporarily - */ - case ELEM_ID_QUIET: - rrmQuietHandleQuietIE(prBssInfo, (P_IE_QUIET_T) pucIE); - fgHasQuietIE = TRUE; - break; - #endif - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ - - /* Some AP will have wrong channel number (255) when running time. - * Check if correct channel number information. 20110501 - */ - if ((prBssInfo->eBand == BAND_2G4 && ucPrimaryChannel > 14) || - (prBssInfo->eBand != BAND_2G4 && (ucPrimaryChannel >= 200 || - ucPrimaryChannel <= 14))) { - ucPrimaryChannel = 0; - } - -#if CFG_SUPPORT_QUIET && 0 - if (!fgHasQuietIE) { - rrmQuietIeNotExist(prAdapter, prBssInfo); - } -#endif - - /* Check if OBSS scan process will launch */ - if (!prAdapter->fgEnOnlineScan || !prObssScnParam || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH) || - prBssInfo->eBand != BAND_2G4 || !prBssInfo->fg40mBwAllowed) { - - /* Note: it is ok not to stop rObssScanTimer() here */ - prBssInfo->u2ObssScanInterval = 0; - } - else { - if (prObssScnParam->u2TriggerScanInterval < OBSS_SCAN_MIN_INTERVAL) { - prObssScnParam->u2TriggerScanInterval = OBSS_SCAN_MIN_INTERVAL; - } - if (prBssInfo->u2ObssScanInterval != - prObssScnParam->u2TriggerScanInterval) { - - prBssInfo->u2ObssScanInterval = - prObssScnParam->u2TriggerScanInterval; - - /* Start timer to trigger OBSS scanning */ - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } - } - - return ucPrimaryChannel; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnFromNeighborForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - UINT_16 u2Offset, i; - UINT_8 ucPriChannel, ucSecChannel; - ENUM_CHNL_EXT_T eSCO; - BOOLEAN fgHtBss, fg20mReq; - - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - - /* Record it to channel list to change 20/40 bandwidth */ - ucPriChannel = 0; - eSCO = CHNL_EXT_SCN; - - fgHtBss = FALSE; - fg20mReq = FALSE; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - { - P_IE_HT_CAP_T prHtCap; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - - prHtCap = (P_IE_HT_CAP_T) pucIE; - if (prHtCap->u2HtCapInfo & HT_CAP_INFO_40M_INTOLERANT) { - fg20mReq = TRUE; - } - fgHtBss = TRUE; - break; - } - case ELEM_ID_HT_OP: - { - P_IE_HT_OP_T prHtOp; - - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - prHtOp = (P_IE_HT_OP_T) pucIE; - /* Workaround that some APs fill primary channel field by its - * secondary channel, but its DS IE is correct 20110610 - */ - if (ucPriChannel == 0) { - ucPriChannel = prHtOp->ucPrimaryChannel; - } - - if ((prHtOp->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - eSCO = (ENUM_CHNL_EXT_T) (prHtOp->ucInfo1 & HT_OP_INFO1_SCO); - } - break; - } - case ELEM_ID_20_40_BSS_COEXISTENCE: - { - P_IE_20_40_COEXIST_T prCoexist; - - if (IE_LEN(pucIE) != (sizeof(IE_20_40_COEXIST_T) - 2)) { - break; - } - - prCoexist = (P_IE_20_40_COEXIST_T) pucIE; - if (prCoexist->ucData & BSS_COEXIST_40M_INTOLERANT) { - fg20mReq = TRUE; - } - break; - } - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) != (sizeof(IE_DS_PARAM_SET_T) - 2)) { - break; - } - ucPriChannel = DS_PARAM_IE(pucIE)->ucCurrChnl; - break; - - default: - break; - } - } - - - /* To do: Update channel list and 5G band. All channel lists have the same - * update procedure. We should give it the entry pointer of desired - * channel list. - */ - if (HIF_RX_HDR_GET_RF_BAND(prSwRfb->prHifRxHdr) != BAND_2G4) { - return FALSE; - } - - if (ucPriChannel == 0 || ucPriChannel > 14) { - ucPriChannel = HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr); - } - - if (fgHtBss) { - ASSERT(prBssInfo->auc2G_PriChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_PriChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_PriChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_PriChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_PriChnlList[i] = ucPriChannel; - prBssInfo->auc2G_PriChnlList[0]++; - } - - /* Update secondary channel */ - if (eSCO != CHNL_EXT_SCN) { - ucSecChannel = (eSCO == CHNL_EXT_SCA) ? - (ucPriChannel + 4) : (ucPriChannel - 4); - - ASSERT(prBssInfo->auc2G_SecChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_SecChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_SecChnlList[i] == ucSecChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_SecChnlList[0])&& (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_SecChnlList[i] = ucSecChannel; - prBssInfo->auc2G_SecChnlList[0]++; - } - } - - /* Update 20M bandwidth request channels */ - if (fg20mReq) { - ASSERT(prBssInfo->auc2G_20mReqChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_20mReqChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_20mReqChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_20mReqChnlList[0]) && - (i <= CHNL_LIST_SZ_2G)){ - prBssInfo->auc2G_20mReqChnlList[i] = ucPriChannel; - prBssInfo->auc2G_20mReqChnlList[0]++; - } - } - } - else { - /* Update non-HT channel list */ - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - for (i = 1; i <= prBssInfo->auc2G_NonHtChnlList[0] && - i <= CHNL_LIST_SZ_2G; i++) { - if (prBssInfo->auc2G_NonHtChnlList[i] == ucPriChannel) { - break; - } - } - if ((i > prBssInfo->auc2G_NonHtChnlList[0]) && (i <= CHNL_LIST_SZ_2G)) { - prBssInfo->auc2G_NonHtChnlList[i] = ucPriChannel; - prBssInfo->auc2G_NonHtChnlList[0]++; - } - - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief AIS or P2P GC. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -rlmRecBcnInfoForClient ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo && prSwRfb); - ASSERT(pucIE); - -#if 0 /* SW migration 2010/8/20 */ - /* Note: we shall not update parameters when scanning, otherwise - * channel and bandwidth will not be correct or asserted failure - * during scanning. - * Note: remove channel checking. All received Beacons should be processed - * if measurement or other actions are executed in adjacent channels - * and Beacon content checking mechanism is not disabled. - */ - if (IS_SCAN_ACTIVE() - /* || prBssInfo->ucPrimaryChannel != CHNL_NUM_BY_SWRFB(prSwRfb) */) { - return FALSE; - } -#endif - - /* Handle change of slot time */ - prBssInfo->u2CapInfo = - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->u2CapInfo; - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength); - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessBcn ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgNewParameter; - UINT_8 ucNetIdx; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - fgNewParameter = FALSE; - - /* When concurrent networks exist, GO shall have the same handle as - * the other BSS, so the Beacon shall be procesed for bandwidth and - * protection mechanism. - * Note1: we do not have 2 AP (GO) cases simultaneously now. - * Note2: If we are GO, concurrent AIS AP should detect it and reflect - * action in its Beacon, so AIS STA just follows Beacon from AP. - */ - RLM_NET_FOR_EACH_NO_BOW(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - if (IS_BSS_ACTIVE(prBssInfo)) { - if (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* P2P client or AIS infra STA */ - if (EQUAL_MAC_ADDR(prBssInfo->aucBSSID, - ((P_WLAN_MAC_MGMT_HEADER_T) - (prSwRfb->pvHeader))->aucBSSID)) { - - fgNewParameter = rlmRecBcnInfoForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - else { - fgNewParameter = rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - } - #if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT || - prBssInfo->eCurrentOPMode == OP_MODE_P2P_DEVICE)) { - /* AP scan to check if 20/40M bandwidth is permitted */ - rlmRecBcnFromNeighborForClient(prAdapter, - prBssInfo, prSwRfb, pucIE, u2IELength); - } - #endif - else if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) { - /* To do: Ad-hoc */ - } - - /* Appy new parameters if necessary */ - if (fgNewParameter) { - rlmSyncOperationParams(prAdapter, prBssInfo); - fgNewParameter = FALSE; - } - } /* end of IS_BSS_ACTIVE() */ - } /* end of RLM_NET_FOR_EACH_NO_BOW */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocRsp ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_8 ucPriChannel; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prStaRec == prBssInfo->prStaRecOfAP); - - /* To do: the invoked function is used to clear all members. It may be - * done by center mechanism in invoker. - */ - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fgUseShortSlotTime = - (prBssInfo->u2CapInfo & CAP_INFO_SHORT_SLOT_TIME) ? TRUE : FALSE; - - if ((ucPriChannel = - rlmRecIeInfoForClient(prAdapter, prBssInfo, pucIE, u2IELength)) > 0) { - prBssInfo->ucPrimaryChannel = ucPriChannel; - } - - if (!RLM_NET_IS_11N(prBssInfo) || - !(prStaRec->u2HtCapInfo & HT_CAP_INFO_SUP_CHNL_WIDTH)) { - prBssInfo->fg40mBwAllowed = FALSE; - } - - /* Note: Update its capabilities to WTBL by cnmStaRecChangeState(), which - * shall be invoked afterwards. - * Update channel, bandwidth and protection mode by nicUpdateBss() - */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmFillSyncCmdParam ( - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prCmdBody && prBssInfo); - if (!prCmdBody || !prBssInfo) { - return; - } - - prCmdBody->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prCmdBody->ucRfBand = (UINT_8) prBssInfo->eBand; - prCmdBody->ucPrimaryChannel = prBssInfo->ucPrimaryChannel; - prCmdBody->ucRfSco = (UINT_8) prBssInfo->eBssSCO; - prCmdBody->ucErpProtectMode = (UINT_8) prBssInfo->fgErpProtectMode; - prCmdBody->ucHtProtectMode = (UINT_8) prBssInfo->eHtProtectMode; - prCmdBody->ucGfOperationMode = (UINT_8) prBssInfo->eGfOperationMode; - prCmdBody->ucTxRifsMode = (UINT_8) prBssInfo->eRifsOperationMode; - prCmdBody->u2HtOpInfo3 = prBssInfo->u2HtOpInfo3; - prCmdBody->u2HtOpInfo2 = prBssInfo->u2HtOpInfo2; - prCmdBody->ucHtOpInfo1 = prBssInfo->ucHtOpInfo1; - prCmdBody->ucUseShortPreamble = prBssInfo->fgUseShortPreamble; - prCmdBody->ucUseShortSlotTime = prBssInfo->fgUseShortSlotTime; - prCmdBody->ucCheckId = 0x72; - - if (RLM_NET_PARAM_VALID(prBssInfo)) { - DBGLOG(RLM, INFO, ("N=%d b=%d c=%d s=%d e=%d h=%d I=0x%02x l=%d p=%d\n", - prCmdBody->ucNetTypeIndex, prCmdBody->ucRfBand, - prCmdBody->ucPrimaryChannel, prCmdBody->ucRfSco, - prCmdBody->ucErpProtectMode, prCmdBody->ucHtProtectMode, - prCmdBody->ucHtOpInfo1, prCmdBody->ucUseShortSlotTime, - prCmdBody->ucUseShortPreamble)); - } - else { - DBGLOG(RLM, INFO, ("N=%d closed\n", prCmdBody->ucNetTypeIndex)); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will operation parameters based on situations of -* concurrent networks. Channel, bandwidth, protection mode, supported -* rate will be modified. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmSyncOperationParams ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_CMD_SET_BSS_RLM_PARAM_T prCmdBody; - WLAN_STATUS rStatus; - - ASSERT(prAdapter); - ASSERT(prBssInfo); - - prCmdBody = (P_CMD_SET_BSS_RLM_PARAM_T) - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_BSS_RLM_PARAM_T)); - ASSERT(prCmdBody); - - /* To do: exception handle */ - if (!prCmdBody) { - DBGLOG(RLM, WARN, ("No buf for sync RLM params (Net=%d)\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmFillSyncCmdParam(prCmdBody, prBssInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_BSS_RLM_PARAM, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_BSS_RLM_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmdBody, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmdBody); -} - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should be invoked after judging successful association. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmProcessAssocReq ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb, - PUINT_8 pucIE, - UINT_16 u2IELength - ) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - P_IE_HT_CAP_T prHtCap; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - if (!prStaRec) { - return; - } - ASSERT(prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_HT_CAP: - if (!RLM_NET_IS_11N(prBssInfo) || - IE_LEN(pucIE) != (sizeof(IE_HT_CAP_T) - 2)) { - break; - } - prHtCap = (P_IE_HT_CAP_T) pucIE; - prStaRec->ucMcsSet = prHtCap->rSupMcsSet.aucRxMcsBitmask[0]; - prStaRec->fgSupMcs32 = - (prHtCap->rSupMcsSet.aucRxMcsBitmask[32/8] & BIT(0)) ? - TRUE : FALSE; - - prStaRec->u2HtCapInfo = prHtCap->u2HtCapInfo; - prStaRec->ucAmpduParam = prHtCap->ucAmpduParam; - prStaRec->u2HtExtendedCap = prHtCap->u2HtExtendedCap; - prStaRec->u4TxBeamformingCap = prHtCap->u4TxBeamformingCap; - prStaRec->ucAselCap = prHtCap->ucAselCap; - break; - - default: - break; - } /* end of switch */ - } /* end of IE_FOR_EACH */ -} -#endif /* CFG_SUPPORT_AAA */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssInitForAPandIbss ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && - prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) { - - rlmBssInitForAP(prAdapter, prBssInfo); - } -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief It is for both STA and AP modes -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmBssAborted ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - rlmBssReset(prAdapter, prBssInfo); - - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - - /* Assume FW state is updated by CMD_ID_SET_BSS_INFO, so - * the sync CMD is not needed here. - */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief All RLM timers will also be stopped. -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmBssReset ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - ASSERT(prAdapter); - ASSERT(prBssInfo); - - /* HT related parameters */ - prBssInfo->ucHtOpInfo1 = 0; /* RIFS disabled. 20MHz */ - prBssInfo->u2HtOpInfo2 = 0; - prBssInfo->u2HtOpInfo3 = 0; - - prBssInfo->eBssSCO = 0; - prBssInfo->fgErpProtectMode = 0; - prBssInfo->eHtProtectMode = 0; - prBssInfo->eGfOperationMode = 0; - prBssInfo->eRifsOperationMode = 0; - - /* OBSS related parameters */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - prBssInfo->auc2G_PriChnlList[0] = 0; - prBssInfo->auc2G_SecChnlList[0] = 0; - prBssInfo->auc5G_20mReqChnlList[0] = 0; - prBssInfo->auc5G_NonHtChnlList[0] = 0; - prBssInfo->auc5G_PriChnlList[0] = 0; - prBssInfo->auc5G_SecChnlList[0] = 0; - - /* All RLM timers will also be stopped */ - cnmTimerStopTimer(prAdapter, &prBssInfo->rObssScanTimer); - prBssInfo->u2ObssScanInterval = 0; - - prBssInfo->fgObssErpProtectMode = 0; /* GO only */ - prBssInfo->eObssHtProtectMode = 0; /* GO only */ - prBssInfo->eObssGfOperationMode = 0; /* GO only */ - prBssInfo->fgObssRifsOperationMode = 0; /* GO only */ - prBssInfo->fgObssActionForcedTo20M = 0; /* GO only */ - prBssInfo->fgObssBeaconForcedTo20M = 0; /* GO only */ -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_domain.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_domain.c deleted file mode 100755 index 34975ddbc3d7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_domain.c +++ /dev/null @@ -1,720 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/rlm_domain.c#1 $ -*/ - -/*! \file "rlm_domain.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm_domain.c $ - * - * 11 10 2011 cm.chang - * NULL - * Modify debug message for XLOG - * - * 09 29 2011 cm.chang - * NULL - * Change the function prototype of rlmDomainGetChnlList() - * - * 09 23 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Let channel number to zero if band is illegal - * - * 09 22 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Exclude channel list with illegal band - * - * 09 15 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use defined country group to have a change to add new group - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 06 01 2011 cm.chang - * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function - * Provide legal channel function based on domain - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 02 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export rlmDomainGetDomainInfo for p2p driver. - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 03 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Filter out not supported RF freq when reporting available chnl list - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Provide query function about full channle list. - * - * Dec 1 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/* The following country or domain shall be set from host driver. - * And host driver should pass specified DOMAIN_INFO_ENTRY to MT6620 as - * the channel list of being a STA to do scanning/searching AP or being an - * AP to choose an adequate channel if auto-channel is set. - */ - -/* Define mapping tables between country code and its channel set - */ -static const UINT_16 g_u2CountryGroup0[] = -{ - COUNTRY_CODE_US, COUNTRY_CODE_BS, COUNTRY_CODE_BB, COUNTRY_CODE_BO, COUNTRY_CODE_DM, - COUNTRY_CODE_DO, COUNTRY_CODE_HT, COUNTRY_CODE_PR, COUNTRY_CODE_TH, COUNTRY_CODE_TW, - COUNTRY_CODE_AI, COUNTRY_CODE_AG, COUNTRY_CODE_AW, COUNTRY_CODE_BM, COUNTRY_CODE_CU, - COUNTRY_CODE_GD, COUNTRY_CODE_GY, COUNTRY_CODE_JM, COUNTRY_CODE_KN, COUNTRY_CODE_LC, - COUNTRY_CODE_VC, COUNTRY_CODE_TT, COUNTRY_CODE_SR -}; -static const UINT_16 g_u2CountryGroup1[] = -{ - COUNTRY_CODE_BR, COUNTRY_CODE_EC, COUNTRY_CODE_HK, COUNTRY_CODE_MX, COUNTRY_CODE_PE, - COUNTRY_CODE_CR, COUNTRY_CODE_MD, COUNTRY_CODE_NI, COUNTRY_CODE_PZ -}; -static const UINT_16 g_u2CountryGroup2[] = {COUNTRY_CODE_CO, COUNTRY_CODE_PY}; -static const UINT_16 g_u2CountryGroup3[] = {COUNTRY_CODE_JP}; -static const UINT_16 g_u2CountryGroup4[] = -{ - COUNTRY_CODE_CN, COUNTRY_CODE_UY, COUNTRY_CODE_MA -}; -static const UINT_16 g_u2CountryGroup5[] = {COUNTRY_CODE_AR}; -static const UINT_16 g_u2CountryGroup6[] = {COUNTRY_CODE_AU, COUNTRY_CODE_NZ}; -static const UINT_16 g_u2CountryGroup7[] = {COUNTRY_CODE_RU}; -static const UINT_16 g_u2CountryGroup8[] = -{ - COUNTRY_CODE_ID, COUNTRY_CODE_HN, COUNTRY_CODE_PG, COUNTRY_CODE_PK -}; -static const UINT_16 g_u2CountryGroup9[] = {COUNTRY_CODE_CA}; -static const UINT_16 g_u2CountryGroup10[] = -{ - COUNTRY_CODE_CL, COUNTRY_CODE_IN, COUNTRY_CODE_SA, COUNTRY_CODE_SG, COUNTRY_CODE_VE, - COUNTRY_CODE_MY, COUNTRY_CODE_VN, COUNTRY_CODE_EG -}; -static const UINT_16 g_u2CountryGroup11[] = {COUNTRY_CODE_IL, COUNTRY_CODE_UA}; -static const UINT_16 g_u2CountryGroup12[] = {COUNTRY_CODE_JO, COUNTRY_CODE_KW}; -static const UINT_16 g_u2CountryGroup13[] = {COUNTRY_CODE_KR, COUNTRY_CODE_OM}; -static const UINT_16 g_u2CountryGroup14[] = -{ - COUNTRY_CODE_EU - /* When country code is not found, this domain info will be used. - * So mark all country codes to reduce search time. 20110908 - */ - /*, COUNTRY_CODE_PH, COUNTRY_CODE_TR, COUNTRY_CODE_IR, COUNTRY_CODE_BY, - COUNTRY_CODE_LK */ -}; - - -DOMAIN_INFO_ENTRY arSupportedRegDomains[] = { - { - (PUINT_16) g_u2CountryGroup0, sizeof(g_u2CountryGroup0) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup1, sizeof(g_u2CountryGroup1) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup2, sizeof(g_u2CountryGroup2) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup3, sizeof(g_u2CountryGroup3) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_14 */ - { 82, BAND_2G4, CHNL_SPAN_5, 14, 1, FALSE }, - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_NULL, 0, 0, 0, FALSE } /* CH_SET_UNII_UPPER_NA */ - } - }, - { - (PUINT_16) g_u2CountryGroup4, sizeof(g_u2CountryGroup4) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup5, sizeof(g_u2CountryGroup5) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup6, sizeof(g_u2CountryGroup6) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup7, sizeof(g_u2CountryGroup7) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup8, sizeof(g_u2CountryGroup8) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_LOW_NA */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE }, /* CH_SET_UNII_UPPER_149_161 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup9, sizeof(g_u2CountryGroup9) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE }, /* CH_SET_2G4_1_11 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 5, FALSE }, /* CH_SET_UNII_WW_100_116_132_140 */ - { 121, BAND_5G, CHNL_SPAN_20, 132, 5, FALSE }, - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - } - }, - { - (PUINT_16) g_u2CountryGroup10, sizeof(g_u2CountryGroup10) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup11, sizeof(g_u2CountryGroup11) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup12, sizeof(g_u2CountryGroup12) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_MID_NA */ - { 121, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_WW_NA */ - { 125, BAND_NULL, 0, 0, 0, FALSE }, /* CH_SET_UNII_UPPER_NA */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - (PUINT_16) g_u2CountryGroup13, sizeof(g_u2CountryGroup13) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 8, FALSE }, /* CH_SET_UNII_WW_100_128 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE }, /* CH_SET_UNII_UPPER_149_165 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - }, - { - /* Note: The final one is for Europe union now. */ - (PUINT_16) g_u2CountryGroup14, sizeof(g_u2CountryGroup14) / 2, - { - { 81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE }, /* CH_SET_2G4_1_13 */ - - { 115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE }, /* CH_SET_UNII_LOW_36_48 */ - { 118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE }, /* CH_SET_UNII_MID_52_64 */ - { 121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE }, /* CH_SET_UNII_WW_100_140 */ - { 125, BAND_5G, CHNL_SPAN_20, 149, 7, FALSE }, /* CH_SET_UNII_UPPER_149_173 */ - { 0, BAND_NULL, 0, 0, 0, FALSE } - } - } -}; - -#if 0 -COUNTRY_CH_SET_T arCountryChSets[] = { - /* idx=0: US, Bahamas, Barbados, Bolivia(Voluntary), Dominica (the Commonwealth of Dominica), - The Dominican Republic, Haiti */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=1: Brazil, Ecuador, Hong Kong, Mexico, Peru */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=2: JP1, Colombia(Voluntary), Paraguay */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=3: JP2 */ - {CH_SET_2G4_1_14, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA}, - /* idx=4: CN, Uruguay, Morocco */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=5: Argentina */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=6: Australia, New Zealand */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=7: Russia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161}, - /* idx=8: Indonesia */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_161}, - /* idx=9: Canada */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_116_132_140, CH_SET_UNII_UPPER_149_165}, - /* idx=10: Chile, India, Saudi Arabia, Singapore */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165}, - /* idx=11: Israel, Ukraine */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=12: Jordan, Kuwait */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_NA, - CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA}, - /* idx=13: South Korea */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_128, CH_SET_UNII_UPPER_149_165}, - /* idx=14: Taiwan */ - {CH_SET_2G4_1_11, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165}, - /* idx=15: EU all countries */ - {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64, - CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_173} -}; -#endif - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -P_DOMAIN_INFO_ENTRY -rlmDomainGetDomainInfo ( - P_ADAPTER_T prAdapter - ) -{ -#define REG_DOMAIN_DEF_IDX 14 /* EU (Europe Union) */ -#define REG_DOMAIN_GROUP_NUM \ - (sizeof(arSupportedRegDomains) / sizeof(DOMAIN_INFO_ENTRY)) - - UINT_16 i, j; - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_REG_INFO_T prRegInfo; - UINT_16 u2TargetCountryCode; - - ASSERT(prAdapter); - - if (prAdapter->prDomainInfo) { - return prAdapter->prDomainInfo; - } - - prRegInfo = &prAdapter->prGlueInfo->rRegInfo; - - DBGLOG(RLM, INFO, ("Domain: map=%d, idx=%d, code=0x%04x\n", - prRegInfo->eRegChannelListMap, prRegInfo->ucRegChannelListIndex, - prAdapter->rWifiVar.rConnSettings.u2CountryCode)); - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_TBL_IDX && - prRegInfo->ucRegChannelListIndex < REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[prRegInfo->ucRegChannelListIndex]; - goto L_set_domain_info; - } - else if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - prDomainInfo = &prRegInfo->rDomainInfo; - goto L_set_domain_info; - } - - u2TargetCountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - - /* If no matched country code, the final one will be used - * The final one is for Europe union now. - */ - for (i = 0; i < REG_DOMAIN_GROUP_NUM; i++) { - prDomainInfo = &arSupportedRegDomains[i]; - - ASSERT((prDomainInfo->u4CountryNum && prDomainInfo->pu2CountryGroup) || - prDomainInfo->u4CountryNum == 0); - - for (j = 0; j < prDomainInfo->u4CountryNum; j++) { - if (prDomainInfo->pu2CountryGroup[j] == u2TargetCountryCode) { - break; - } - } - if (j < prDomainInfo->u4CountryNum) { - break; /* Found */ - } - } - - DATA_STRUC_INSPECTING_ASSERT(REG_DOMAIN_DEF_IDX < REG_DOMAIN_GROUP_NUM); - - if (i >= REG_DOMAIN_GROUP_NUM) { - prDomainInfo = &arSupportedRegDomains[REG_DOMAIN_DEF_IDX]; - } - -L_set_domain_info: - - prAdapter->prDomainInfo = prDomainInfo; - return prDomainInfo; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] The input variable pointed by pucNumOfChannel is the max -* arrary size. The return value indciates meaning list size. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainGetChnlList ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eSpecificBand, - UINT_8 ucMaxChannelNum, - PUINT_8 pucNumOfChannel, - P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - UINT_8 i, j, ucNum; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - ASSERT(prAdapter); - ASSERT(paucChannelList); - ASSERT(pucNumOfChannel); - - /* If no matched country code, the final one will be used */ - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - ucNum = 0; - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_NULL || prSubband->ucBand >= BAND_NUM || - (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand)) { - continue; - } - - if (eSpecificBand == BAND_NULL || prSubband->ucBand == eSpecificBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if (ucNum >= ucMaxChannelNum) { - break; - } - paucChannelList[ucNum].eBand = prSubband->ucBand; - paucChannelList[ucNum].ucChannelNum = - prSubband->ucFirstChannelNum + j * prSubband->ucChannelSpan; - ucNum++; - } - } - } - - *pucNumOfChannel = ucNum; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param[in] -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmDomainSendCmd ( - P_ADAPTER_T prAdapter, - BOOLEAN fgIsOid - ) -{ - P_DOMAIN_INFO_ENTRY prDomainInfo; - P_CMD_SET_DOMAIN_INFO_T prCmd; - WLAN_STATUS rStatus; - UINT_8 i; - P_DOMAIN_SUBBAND_INFO prSubBand; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_DOMAIN_INFO_T)); - ASSERT(prCmd); - - /* To do: exception handle */ - if (!prCmd) { - DBGLOG(RLM, ERROR, ("Domain: no buf to send cmd\n")); - return; - } - kalMemZero(prCmd, sizeof(CMD_SET_DOMAIN_INFO_T)); - - prCmd->u2CountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; - prCmd->u2Reserved = 0; - prCmd->uc2G4Bandwidth = - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode; - prCmd->uc5GBandwidth = - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode; - - for (i = 0; i < 6; i++) { - prSubBand = &prDomainInfo->rSubBand[i]; - - prCmd->rSubBand[i].ucRegClass = prSubBand->ucRegClass; - prCmd->rSubBand[i].ucBand = prSubBand->ucBand; - - if (prSubBand->ucBand != BAND_NULL && prSubBand->ucBand < BAND_NUM) { - prCmd->rSubBand[i].ucChannelSpan = prSubBand->ucChannelSpan; - prCmd->rSubBand[i].ucFirstChannelNum = prSubBand->ucFirstChannelNum; - prCmd->rSubBand[i].ucNumChannels = prSubBand->ucNumChannels; - } - } - - /* Update domain info to chip */ - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SET_DOMAIN_INFO, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - fgIsOid, /* fgIsOid */ - NULL, /* pfCmdDoneHandler*/ - NULL, /* pfCmdTimeoutHandler */ - sizeof(CMD_SET_DOMAIN_INFO_T), /* u4SetQueryInfoLen */ - (PUINT_8) prCmd, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - cnmMemFree(prAdapter, prCmd); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in/out] -* -* \return TRUE Legal channel -* FALSE Illegal channel for current regulatory domain -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmDomainIsLegalChannel ( - P_ADAPTER_T prAdapter, - ENUM_BAND_T eBand, - UINT_8 ucChannel - ) -{ - UINT_8 i, j; - P_DOMAIN_SUBBAND_INFO prSubband; - P_DOMAIN_INFO_ENTRY prDomainInfo; - - prDomainInfo = rlmDomainGetDomainInfo(prAdapter); - ASSERT(prDomainInfo); - - for (i = 0; i < MAX_SUBBAND_NUM; i++) { - prSubband = &prDomainInfo->rSubBand[i]; - - if (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand) { - continue; - } - - if (prSubband->ucBand == eBand) { - for (j = 0; j < prSubband->ucNumChannels; j++) { - if ((prSubband->ucFirstChannelNum + j*prSubband->ucChannelSpan) - == ucChannel) { - return TRUE; - } - } - } - } - - return FALSE; -} diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_obss.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_obss.c deleted file mode 100755 index 3825fa3327dd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_obss.c +++ /dev/null @@ -1,501 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/rlm_obss.c#1 $ -*/ - -/*! \file "rlm_obss.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm_obss.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 11 15 2011 cm.chang - * NULL - * Avoid possible OBSS scan when BSS is switched - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * Regulation class is changed to 81 in 20_40_coexistence action frame - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 29 2011 cm.chang - * [WCXRP00000606] [MT6620 Wi-Fi][Driver][FW] Fix klocwork warning - * As CR title - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 13 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Refine function when rcv a 20/40M public action frame - * - * 01 13 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * Use SCO of BSS_INFO to replace user-defined setting variables - * - * 01 12 2011 cm.chang - * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting - * User-defined bandwidth is for 2.4G and 5G individually - * - * 10 18 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * use definition macro to replace hard-coded constant - * - * 09 16 2010 cm.chang - * NULL - * Change conditional compiling options for BOW - * - * 09 10 2010 cm.chang - * NULL - * Always update Beacon content if FW sync OBSS info - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 26 2010 yuche.tsai - * - * Fix compile error while enabling WiFi Direct function. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Process 20/40 coexistence public action frame in AP mode - * - * 05 05 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft support for 20/40M bandwidth for AP mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add more ASSERT to check exception - * - * 04 07 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add virtual test for OBSS scan - * - * 03 30 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support 2.4G OBSS scan - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 02 05 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssInit ( - P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 ucNetIdx; - - RLM_NET_FOR_EACH(ucNetIdx) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[ucNetIdx]; - ASSERT(prBssInfo); - - cnmTimerInitTimer(prAdapter, &prBssInfo->rObssScanTimer, - rlmObssScanTimeout, (UINT_32) prBssInfo); - } /* end of RLM_NET_FOR_EACH */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rlmObssUpdateChnlLists ( - P_ADAPTER_T prAdapter, - P_SW_RFB_T prSwRfb - ) -{ - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssScanDone ( - P_ADAPTER_T prAdapter, - P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_20_40_COEXIST_FRAME prTxFrame; - UINT_16 i, u2PayloadLen; - - ASSERT(prMsgHdr); - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE) prMsgHdr; - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prScanDoneMsg->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(RLM, INFO, ("OBSS Scan Done (NetIdx=%d, Mode=%d)\n", - prScanDoneMsg->ucNetTypeIndex, prBssInfo->eCurrentOPMode)); - - cnmMemFree(prAdapter, prMsgHdr); - -#if CFG_ENABLE_WIFI_DIRECT - /* AP mode */ - if ((prAdapter->fgIsP2PRegistered) && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex)) && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - return; - } -#endif - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan Done (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - /* To do: check 2.4G channel list to decide if obss mgmt should be - * sent to associated AP. Note: how to handle concurrent network? - * To do: invoke rlmObssChnlLevel() to decide if 20/40 BSS coexistence - * management frame is needed. - */ - if ((prBssInfo->auc2G_20mReqChnlList[0] > 0 || - prBssInfo->auc2G_NonHtChnlList[0] > 0) && - (prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN)) != NULL) { - - DBGLOG(RLM, INFO, ("Send 20/40 coexistence mgmt(20mReq=%d, NonHt=%d)\n", - prBssInfo->auc2G_20mReqChnlList[0], - prBssInfo->auc2G_NonHtChnlList[0])); - - prTxFrame = (P_ACTION_20_40_COEXIST_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_PUBLIC_ACTION; - prTxFrame->ucAction = ACTION_PUBLIC_20_40_COEXIST; - - /* To do: find correct algorithm */ - prTxFrame->rBssCoexist.ucId = ELEM_ID_20_40_BSS_COEXISTENCE; - prTxFrame->rBssCoexist.ucLength = 1; - prTxFrame->rBssCoexist.ucData = - (prBssInfo->auc2G_20mReqChnlList[0] > 0) ? BSS_COEXIST_20M_REQ : 0; - - u2PayloadLen = 2 + 3; - - if (prBssInfo->auc2G_NonHtChnlList[0] > 0) { - ASSERT(prBssInfo->auc2G_NonHtChnlList[0] <= CHNL_LIST_SZ_2G); - - prTxFrame->rChnlReport.ucId = ELEM_ID_20_40_INTOLERANT_CHNL_REPORT; - prTxFrame->rChnlReport.ucLength = - prBssInfo->auc2G_NonHtChnlList[0] + 1; - prTxFrame->rChnlReport.ucRegulatoryClass = 81; /* 2.4GHz, ch1~13 */ - for (i = 0; i < prBssInfo->auc2G_NonHtChnlList[0] && - i < CHNL_LIST_SZ_2G; i++) { - prTxFrame->rChnlReport.aucChannelList[i] = - prBssInfo->auc2G_NonHtChnlList[i+1]; - } - - u2PayloadLen += IE_SIZE(&prTxFrame->rChnlReport); - } - ASSERT((WLAN_MAC_HEADER_LEN + u2PayloadLen) <= PUBLIC_ACTION_MAX_LEN); - - /* Clear up channel lists in 2.4G band */ - prBssInfo->auc2G_20mReqChnlList[0] = 0; - prBssInfo->auc2G_NonHtChnlList[0] = 0; - - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - } /* end of prMsduInfo != NULL */ - - if (prBssInfo->u2ObssScanInterval > 0) { - DBGLOG(RLM, INFO, ("Set OBSS timer (NetIdx=%d, %d sec)\n", - prBssInfo->ucNetTypeIndex, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -static VOID -rlmObssScanTimeout ( - P_ADAPTER_T prAdapter, - UINT_32 u4Data - ) -{ - P_BSS_INFO_T prBssInfo; - - prBssInfo = (P_BSS_INFO_T) u4Data; - ASSERT(prBssInfo); - -#if CFG_ENABLE_WIFI_DIRECT - /* AP mode */ - if (prAdapter->fgIsP2PRegistered && - (IS_NET_ACTIVE(prAdapter, prBssInfo->ucNetTypeIndex)) && - (prBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT)) { - - prBssInfo->fgObssActionForcedTo20M = FALSE; - - /* Check if Beacon content need to be updated */ - rlmUpdateParamsForAP(prAdapter, prBssInfo, FALSE); - - return; - } -#endif /* end of CFG_ENABLE_WIFI_DIRECT */ - - - /* STA mode */ - if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE || - !RLM_NET_PARAM_VALID(prBssInfo) || prBssInfo->u2ObssScanInterval == 0) { - DBGLOG(RLM, WARN, ("OBSS Scan timeout (NetIdx=%d) -- Aborted!!\n", - prBssInfo->ucNetTypeIndex)); - return; - } - - rlmObssTriggerScan(prAdapter, prBssInfo); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rlmObssTriggerScan ( - P_ADAPTER_T prAdapter, - P_BSS_INFO_T prBssInfo - ) -{ - P_MSG_SCN_SCAN_REQ prScanReqMsg; - - ASSERT(prBssInfo); - - prScanReqMsg = (P_MSG_SCN_SCAN_REQ) - cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_REQ)); - ASSERT(prScanReqMsg); - - if (!prScanReqMsg) { - DBGLOG(RLM, WARN, ("No buf for OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); - - cnmTimerStartTimer(prAdapter, &prBssInfo->rObssScanTimer, - prBssInfo->u2ObssScanInterval * MSEC_PER_SEC); - return; - } - - /* It is ok that ucSeqNum is set to fixed value because the same network - * OBSS scan interval is limited to OBSS_SCAN_MIN_INTERVAL (min 10 sec) - * and scan module don't care seqNum of OBSS scanning - */ - prScanReqMsg->rMsgHdr.eMsgId = MID_RLM_SCN_SCAN_REQ; - prScanReqMsg->ucSeqNum = 0x33; - prScanReqMsg->ucNetTypeIndex = prBssInfo->ucNetTypeIndex; - prScanReqMsg->eScanType = SCAN_TYPE_ACTIVE_SCAN; - prScanReqMsg->ucSSIDType = SCAN_REQ_SSID_WILDCARD; - prScanReqMsg->ucSSIDLength = 0; - prScanReqMsg->eScanChannel = SCAN_CHANNEL_2G4; - prScanReqMsg->u2IELen = 0; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanReqMsg, - MSG_SEND_METHOD_BUF); - - DBGLOG(RLM, INFO, ("Timeout to trigger OBSS scan (NetIdx=%d)!!\n", - prBssInfo->ucNetTypeIndex)); -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_protection.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_protection.c deleted file mode 100755 index f1ded2bcc619..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rlm_protection.c +++ /dev/null @@ -1,148 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/rlm_protection.c#1 $ -*/ - -/*! \file "rlm_protection.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rlm_protection.c $ - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Check draft RLM code for HT cap - * - * 05 28 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Set RTS threshold of 2K bytes initially - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * First draft code to support protection in AP mode - * - * 03 31 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Enable RTS threshold temporarily for AMPDU - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 03 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * To support CFG_SUPPORT_BCM_STP - * - * 02 13 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support PCO in STA mode - * - * 02 12 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Use bss info array for concurrent handle - * - * 01 25 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/roaming_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/roaming_fsm.c deleted file mode 100755 index a38858fbfd42..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/roaming_fsm.c +++ /dev/null @@ -1,623 +0,0 @@ -/* -** $Id: -*/ - -/*! \file "roaming_fsm.c" - \brief This file defines the FSM for Roaming MODULE. - - This file defines the FSM for Roaming MODULE. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: roaming_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 03 16 2011 tsaiyuan.hsu - * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming - * remove obsolete definition and unused variables. - * - * 02 26 2011 tsaiyuan.hsu - * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support - * not send disassoc or deauth to leaving AP so as to improve performace of roaming. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_ROAMING -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugRoamingState[ROAMING_STATE_NUM] = { - (PUINT_8)DISP_STRING("ROAMING_STATE_IDLE"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DECISION"), - (PUINT_8)DISP_STRING("ROAMING_STATE_DISCOVERY"), - (PUINT_8)DISP_STRING("ROAMING_STATE_ROAM") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -#define ROAMING_ENABLE_CHECK(_roam) \ - { \ - if (!(_roam->fgIsEnableRoaming)) {return;} \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the value in ROAMING_FSM_INFO_T for ROAMING FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmInit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - //4 <1> Initiate FSM - prRoamingFsmInfo->fgIsEnableRoaming = prConnSettings->fgIsEnableRoaming; - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - prRoamingFsmInfo->rRoamingDiscoveryUpdateTime = 0; - - return; -} /* end of roamingFsmInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the value in AIS_FSM_INFO_T for AIS FSM operation -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmUninit(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE; - - return; -} /* end of roamingFsmUninit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Send commands to firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSendCmd ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - WLAN_STATUS rStatus; - - DBGLOG(ROAMING, LOUD, ("->roamingFsmSendCmd(): Current Time = %ld\n", kalGetTimeTick())); - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_ROAMING_TRANSIT, /* ucCID */ - TRUE, /* fgSetQuery */ - FALSE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - NULL, /* pfCmdDoneHandler */ - NULL, /* pfCmdTimeoutHandler */ - sizeof(ROAMING_PARAM_T), /* u4SetQueryInfoLen */ - (PUINT_8) prParam, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} /* end of roamingFsmSendCmd() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Update the recent time when ScanDone occurred -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmScanResultsUpdate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, LOUD, ("->roamingFsmScanResultsUpdate(): Current Time = %ld\n", kalGetTimeTick())); - - GET_CURRENT_SYSTIME(&prRoamingFsmInfo->rRoamingDiscoveryUpdateTime); - - return; -} /* end of roamingFsmScanResultsUpdate() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of ROAMING for AIS Infra. -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN ENUM_ROAMING_STATE_T] eNextState Enum value of next AIS STATE -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_ROAMING_STATE_T eNextState - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T ePreviousState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - do { - - /* Do entering Next State */ -#if DBG - DBGLOG(ROAMING, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugRoamingState[prRoamingFsmInfo->eCurrentState], - apucDebugRoamingState[eNextState])); -#else - DBGLOG(ROAMING, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_ROAMING_IDX, - prRoamingFsmInfo->eCurrentState, - eNextState)); -#endif - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - ePreviousState = prRoamingFsmInfo->eCurrentState; - prRoamingFsmInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - /* Do tasks of the State that we just entered */ - switch (prRoamingFsmInfo->eCurrentState) { - /* NOTE(Kevin): we don't have to rearrange the sequence of following - * switch case. Instead I would like to use a common lookup table of array - * of function pointer to speed up state search. - */ - case ROAMING_STATE_IDLE: - case ROAMING_STATE_DECISION: - break; - - case ROAMING_STATE_DISCOVERY: - { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prRoamingFsmInfo->rRoamingDiscoveryUpdateTime, - SEC_TO_SYSTIME(ROAMING_DISCOVERY_TIMEOUT_SEC))) { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Timeout")); - aisFsmRunEventRoamingDiscovery(prAdapter, TRUE); - } - else { - DBGLOG(ROAMING, LOUD, ("roamingFsmSteps: DiscoveryUpdateTime Updated")); - aisFsmRunEventRoamingDiscovery(prAdapter, FALSE); - } - } - break; - - case ROAMING_STATE_ROAM: - break; - - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - } - } - while (fgIsTransition); - - return; - -} /* end of roamingFsmSteps() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state after join completion -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventStart ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - P_BSS_INFO_T prAisBssInfo; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - if (prAisBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { - return; - } - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING START: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as DECISION, DISCOVERY -> DECISION */ - if (!(prRoamingFsmInfo->eCurrentState == ROAMING_STATE_IDLE - || prRoamingFsmInfo->eCurrentState == ROAMING_STATE_ROAM)) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_START; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventStart() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Discovery state when deciding to find a candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventDiscovery ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING DISCOVERY: Current Time = %ld\n", kalGetTimeTick())); - - /* DECISION -> DISCOVERY */ - /* Errors as IDLE, DISCOVERY, ROAM -> DISCOVERY */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DECISION) { - return; - } - - eNextState = ROAMING_STATE_DISCOVERY; - /* DECISION -> DISCOVERY */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - P_BSS_INFO_T prAisBssInfo; - P_BSS_DESC_T prBssDesc; - - // sync. rcpi with firmware - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID); - if (prBssDesc) { - prBssDesc->ucRCPI = (UINT_8)(u4Param&0xff); - } - - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventDiscovery() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Roam state after Scan Done -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventRoam ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ROAM: Current Time = %ld\n", kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, ROAM -> ROAM */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DISCOVERY) { - return; - } - - eNextState = ROAMING_STATE_ROAM; - /* DISCOVERY -> ROAM */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ROAM; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventRoam() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Decision state as being failed to find out any candidate -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventFail ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Param - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - /* Check Roaming Conditions */ - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING FAIL: reason %x Current Time = %ld\n", u4Param, kalGetTimeTick())); - - /* IDLE, ROAM -> DECISION */ - /* Errors as IDLE, DECISION, DISCOVERY -> DECISION */ - if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_ROAM) { - return; - } - - eNextState = ROAMING_STATE_DECISION; - /* ROAM -> DECISION */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_FAIL; - rParam.u2Data = (UINT_16)(u4Param&0xffff); - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventFail() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Transit to Idle state as beging aborted by other moduels, AIS -* -* @param [IN P_ADAPTER_T] prAdapter -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -roamingFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ROAMING_INFO_T prRoamingFsmInfo; - ENUM_ROAMING_STATE_T eNextState; - ROAMING_PARAM_T rParam; - - prRoamingFsmInfo = (P_ROAMING_INFO_T)&(prAdapter->rWifiVar.rRoamingInfo); - - ROAMING_ENABLE_CHECK(prRoamingFsmInfo); - - DBGLOG(ROAMING, EVENT, ("EVENT-ROAMING ABORT: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = ROAMING_STATE_IDLE; - /* IDLE, DECISION, DISCOVERY, ROAM -> IDLE */ - if (eNextState != prRoamingFsmInfo->eCurrentState) { - rParam.u2Event = ROAMING_EVENT_ABORT; - roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) &rParam); - - /* Step to next state */ - roamingFsmSteps(prAdapter, eNextState); - } - - return; -} /* end of roamingFsmRunEventAbort() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process events from firmware -* -* @param [IN P_ADAPTER_T] prAdapter -* [IN P_ROAMING_PARAM_T] prParam -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -roamingFsmProcessEvent ( - IN P_ADAPTER_T prAdapter, - IN P_ROAMING_PARAM_T prParam - ) -{ - DBGLOG(ROAMING, LOUD, ("ROAMING Process Events: Current Time = %ld\n", kalGetTimeTick())); - - if (ROAMING_EVENT_DISCOVERY == prParam->u2Event) { - roamingFsmRunEventDiscovery(prAdapter, prParam->u2Data); - } - - return WLAN_STATUS_SUCCESS; -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rsn.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rsn.c deleted file mode 100755 index f148e4916093..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/rsn.c +++ /dev/null @@ -1,2676 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/rsn.c#1 $ -*/ - -/*! \file "rsn.c" - \brief This file including the 802.11i, wpa and wpa2(rsn) related function. - - This file provided the macros and functions library support the wpa/rsn ie parsing, - cipher and AKM check to help the AP seleced deciding, tkip mic error handler and rsn PMKID support. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: rsn.c $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 09 2012 chinglan.wang - * NULL - * Fix the condition error. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 02 09 2011 wh.su - * [WCXRP00000432] [MT6620 Wi-Fi][Driver] Add STA privacy check at hotspot mode - * adding the code for check STA privacy bit at AP mode, . - * - * 12 24 2010 chinglan.wang - * NULL - * [MT6620][Wi-Fi] Modify the key management in the driver for WPS function. - * - * 12 13 2010 cp.wu - * [WCXRP00000260] [MT6620 Wi-Fi][Driver][Firmware] Create V1.1 branch for both firmware and driver - * create branch for Wi-Fi driver v1.1 - * - * 11 05 2010 wh.su - * [WCXRP00000165] [MT6620 Wi-Fi] [Pre-authentication] Assoc req rsn ie use wrong pmkid value - * fixed the.pmkid value mismatch issue - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 29 2010 yuche.tsai - * NULL - * Fix compile error, remove unused pointer in rsnGenerateRSNIE(). - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 30 2010 wh.su - * NULL - * remove non-used code. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * [WPD00003833][MT6620 and MT5931] Driver migration - * enable RX management frame handling. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * [WPD00003840] [MT6620 5931] Security migration - * migration from firmware. - * - * 05 27 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * not indiate pmkid candidate while no new one scaned. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * change the name - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * using the Rx0 port to indicate event - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code for generate the WPA/RSN IE for assoc req - * - * Dec 3 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust code for pmkid event - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the code for event (mic error and pmkid indicate) and do some function rename - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security function - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding some security feature, including pmkid - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -//extern PHY_ATTRIBUTE_T rPhyAttributes[]; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse RSN IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** RSN information from the given RSN IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseRsnIE ( - IN P_ADAPTER_T prAdapter, - IN P_RSN_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prRsnInfo - ) -{ - UINT_32 i; - INT_32 u4RemainRsnIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = RSN_CIPHER_SUITE_CCMP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUINT_8 pucPairSuite = NULL; - PUINT_8 pucAuthSuite = NULL; - PUINT_8 cp; - - DEBUGFUNC("rsnParseRsnIE"); - - ASSERT(prInfoElem); - ASSERT(prRsnInfo); - - /* Verify the length of the RSN IE. */ - if (prInfoElem->ucLength < 2) { - DBGLOG(RSN, TRACE, ("RSN IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check RSN version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE,("Unsupported RSN IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainRsnIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainRsnIeLen < 4) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainRsnIeLen -= 4; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse RSN IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainRsnIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainRsnIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainRsnIeLen -= (INT_32) i; - - if (u4RemainRsnIeLen == 0) { - break; - } - - /* Parse the RSN u2Capabilities field. */ - if (u4RemainRsnIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse RSN IE in RSN capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - } while (FALSE); - - /* Save the RSN information for the BSS. */ - prRsnInfo->ucElemId = ELEM_ID_RSN; - - prRsnInfo->u2Version = u2Version; - - prRsnInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("RSN: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prRsnInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prRsnInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for RSN: CCMP. */ - prRsnInfo->u4PairwiseKeyCipherSuiteCount = 1; - prRsnInfo->au4PairwiseKeyCipherSuite[0] = RSN_CIPHER_SUITE_CCMP; - - DBGLOG(RSN, LOUD, ("RSN: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prRsnInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prRsnInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for RSN. */ - prRsnInfo->u4AuthKeyMgtSuiteCount = 1; - prRsnInfo->au4AuthKeyMgtSuite[0] = RSN_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("RSN: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prRsnInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prRsnInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prRsnInfo->u2RsnCap = u2Cap; -#if CFG_SUPPORT_802_11W - prRsnInfo->fgRsnCapPresent = TRUE; -#endif - DBGLOG(RSN, LOUD, ("RSN cap: 0x%04x\n", prRsnInfo->u2RsnCap)); - - return TRUE; -} /* rsnParseRsnIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WPA IE. -* -* \param[in] prInfoElem Pointer to the WPA IE. -* \param[out] prWpaInfo Pointer to the BSSDescription structure to store the -* WPA information from the given WPA IE. -* -* \retval TRUE Succeeded. -* \retval FALSE Failed. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseWpaIE ( - IN P_ADAPTER_T prAdapter, - IN P_WPA_INFO_ELEM_T prInfoElem, - OUT P_RSN_INFO_T prWpaInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWpaIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WPA_CIPHER_SUITE_TKIP; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - BOOLEAN fgCapPresent = FALSE; - - DEBUGFUNC("rsnParseWpaIE"); - - ASSERT(prInfoElem); - ASSERT(prWpaInfo); - - /* Verify the length of the WPA IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(RSN, TRACE,("WPA IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WPA version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(RSN, TRACE, ("Unsupported WPA IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u4GroupKeyCipherSuite; - u4RemainWpaIeLen = (INT_32) prInfoElem->ucLength - 6; - - do { - if (u4RemainWpaIeLen == 0) { - break; - } - - /* WPA_OUI : 4 - Version : 2 - GroupSuite : 4 - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - Cap : 2 */ - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWpaIeLen < 4) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWpaIeLen -= 4; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE,("Fail to parse WPA IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWpaIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWpaIeLen < (INT_32) i) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWpaIeLen -= (INT_32) i; - - if (u4RemainWpaIeLen == 0) { - break; - } - - /* Parse the WPA u2Capabilities field. */ - if (u4RemainWpaIeLen < 2) { - DBGLOG(RSN, TRACE, ("Fail to parse WPA IE in WPA capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - fgCapPresent = TRUE; - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWpaIeLen -= 2; - } while (FALSE); - - /* Save the WPA information for the BSS. */ - - prWpaInfo->ucElemId = ELEM_ID_WPA; - - prWpaInfo->u2Version = u2Version; - - prWpaInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(RSN, LOUD, ("WPA: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_CIPHER_SUITES; - } - - prWpaInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWpaInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WPA: TKIP. */ - prWpaInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWpaInfo->au4PairwiseKeyCipherSuite[0] = WPA_CIPHER_SUITE_TKIP; - - DBGLOG(RSN, LOUD, ("WPA: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_AKM_SUITES; - } - - prWpaInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWpaInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WPA. */ - prWpaInfo->u4AuthKeyMgtSuiteCount = 1; - prWpaInfo->au4AuthKeyMgtSuite[0] = WPA_AKM_SUITE_802_1X; - - DBGLOG(RSN, LOUD, ("WPA: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWpaInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWpaInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - if (fgCapPresent) { - prWpaInfo->fgRsnCapPresent = TRUE; - prWpaInfo->u2RsnCap = u2Cap; - DBGLOG(RSN, LOUD, ("WPA: RSN cap: 0x%04x\n", prWpaInfo->u2RsnCap)); - } - else { - prWpaInfo->fgRsnCapPresent = FALSE; - prWpaInfo->u2RsnCap = 0; - } - - return TRUE; -} /* rsnParseWpaIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired pairwise -* cipher suite from the MIB Pairwise Cipher Suite -* configuration table. -* -* \param[in] u4Cipher The desired pairwise cipher suite to be searched -* \param[out] pu4Index Pointer to the index of the desired pairwise cipher in -* the table -* -* \retval TRUE - The desired pairwise cipher suite is found in the table. -* \retval FALSE - The desired pairwise cipher suite is not found in the -* table. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchSupportedCipher ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Cipher, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_PAIRWISE_CIPHERS_ENTRY prEntry; - - DEBUGFUNC("rsnSearchSupportedCipher"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_CIPHER_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigPairwiseCiphersTable[i]; - if (prEntry->dot11RSNAConfigPairwiseCipher == u4Cipher && - prEntry->dot11RSNAConfigPairwiseCipherEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchSupportedCipher */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to search the desired -* authentication and key management (AKM) suite from the -* MIB Authentication and Key Management Suites table. -* -* \param[in] u4AkmSuite The desired AKM suite to be searched -* \param[out] pu4Index Pointer to the index of the desired AKM suite in the -* table -* -* \retval TRUE The desired AKM suite is found in the table. -* \retval FALSE The desired AKM suite is not found in the table. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchAKMSuite ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4AkmSuite, - OUT PUINT_32 pu4Index - ) -{ - UINT_8 i; - P_DOT11_RSNA_CONFIG_AUTHENTICATION_SUITES_ENTRY prEntry; - - DEBUGFUNC("rsnSearchAKMSuite"); - - ASSERT(pu4Index); - - for (i = 0; i < MAX_NUM_SUPPORTED_AKM_SUITES; i++) { - prEntry = &prAdapter->rMib.dot11RSNAConfigAuthenticationSuitesTable[i]; - if (prEntry->dot11RSNAConfigAuthenticationSuite == u4AkmSuite && - prEntry->dot11RSNAConfigAuthenticationSuiteEnabled) { - *pu4Index = i; - return TRUE; - } - } - return FALSE; -} /* rsnSearchAKMSuite */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform RSNA or TSN policy -* selection for a given BSS. -* -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The RSNA/TSN policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The RSNA/TSN policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ -#if CFG_SUPPORT_802_11W - INT_32 i; - UINT_32 j; -#else - UINT_32 i, j; -#endif - BOOLEAN fgSuiteSupported; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_RSN_INFO_T prBssRsnInfo; - ENUM_NETWORK_TYPE_INDEX_T eNetwotkType; - BOOLEAN fgIsWpsActive = (BOOLEAN)FALSE; - - DEBUGFUNC("rsnPerformPolicySelection"); - - ASSERT(prBss); - - DBGLOG(RSN, TRACE, ("rsnPerformPolicySelection\n")); - //Todo:: - eNetwotkType = NETWORK_TYPE_AIS_INDEX; - - prBss->u4RsnSelectedPairwiseCipher = 0; - prBss->u4RsnSelectedGroupCipher = 0; - prBss->u4RsnSelectedAKMSuite = 0; - prBss->ucEncLevel = 0; - -#if CFG_SUPPORT_WPS - fgIsWpsActive = kalWSCGetActiveState(prAdapter->prGlueInfo); - - /* CR1640, disable the AP select privacy check */ - if ( fgIsWpsActive && - (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) && - (prAdapter->rWifiVar.rConnSettings.eOPMode == NET_TYPE_INFRA)) { - DBGLOG(RSN, TRACE,("-- Skip the Protected BSS check\n")); - return TRUE; - } -#endif - - /* Protection is not required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) == 0 ) { - - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - /* Protection is required in this BSS. */ - if ((prBss->u2CapInfo & CAP_INFO_PRIVACY) != 0) { - if (secEnabledInAis(prAdapter) == FALSE) { - DBGLOG(RSN, TRACE,("-- Protected BSS\n")); - return FALSE; - } - } - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_NONE) { - - if (prBss->fgIEWPA) { - prBssRsnInfo = &prBss->rWPAInfo; - } - else { - DBGLOG(RSN, TRACE, ("WPA Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2 || - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK) { - - if (prBss->fgIERSN) { - prBssRsnInfo = &prBss->rRSNInfo; - } - else { - DBGLOG(RSN, TRACE, ("RSN Information Element does not exist.\n")); - return FALSE; - } - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus != ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, ignore this BSS. */ - DBGLOG(RSN, TRACE, ("-- Not WEP-only legacy BSS\n")); - return FALSE; - } - else if (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED) { - /* If the driver is configured to use WEP only, use this BSS. */ - DBGLOG(RSN, TRACE, ("-- WEP-only legacy BSS\n")); - return TRUE; - } - - if (prBssRsnInfo->u4PairwiseKeyCipherSuiteCount == 1 && - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[0]) == - CIPHER_SUITE_NONE) { - /* Since the pairwise cipher use the same cipher suite as the group - cipher in the BSS, we check the group cipher suite against the - current encryption status. */ - fgSuiteSupported = FALSE; - - switch (prBssRsnInfo->u4GroupKeyCipherSuite) { - case WPA_CIPHER_SUITE_CCMP: - case RSN_CIPHER_SUITE_CCMP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION3_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_TKIP: - case RSN_CIPHER_SUITE_TKIP: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION2_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - - case WPA_CIPHER_SUITE_WEP40: - case WPA_CIPHER_SUITE_WEP104: - if (prAdapter->rWifiVar.rConnSettings.eEncStatus == - ENUM_ENCRYPTION1_ENABLED) { - fgSuiteSupported = TRUE; - } - break; - } - - if (fgSuiteSupported) { - u4PairwiseCipher = WPA_CIPHER_SUITE_NONE; - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } -#if DBG - else { - DBGLOG(RSN, TRACE, ("Inproper encryption status %d for group-key-only BSS\n", - prAdapter->rWifiVar.rConnSettings.eEncStatus)); - } -#endif - } - else { - fgSuiteSupported = FALSE; - - DBGLOG(RSN, TRACE, ("eEncStatus %d %d 0x%x\n", prAdapter->rWifiVar.rConnSettings.eEncStatus, - prBssRsnInfo->u4PairwiseKeyCipherSuiteCount, - prBssRsnInfo->au4PairwiseKeyCipherSuite[0])); - /* Select pairwise/group ciphers */ - switch (prAdapter->rWifiVar.rConnSettings.eEncStatus) - { - case ENUM_ENCRYPTION3_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_CCMP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - break; - - case ENUM_ENCRYPTION2_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_TKIP) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - case ENUM_ENCRYPTION1_ENABLED: - for (i = 0; i < prBssRsnInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(prBssRsnInfo->au4PairwiseKeyCipherSuite[i]) - == CIPHER_SUITE_WEP104) { - u4PairwiseCipher = prBssRsnInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_CCMP || - GET_SELECTOR_TYPE(prBssRsnInfo->u4GroupKeyCipherSuite) == - CIPHER_SUITE_TKIP) { - DBGLOG(RSN, TRACE, ("Cannot join CCMP/TKIP BSS\n")); - } - else { - u4GroupCipher = prBssRsnInfo->u4GroupKeyCipherSuite; - } - break; - - default: - break; - } - } - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - -#if CFG_ENABLE_WIFI_DIRECT - if ((prAdapter->fgIsP2PRegistered) && - (eNetwotkType == NETWORK_TYPE_P2P_INDEX)) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for P2P network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if (eNetwotkType == NETWORK_TYPE_BOW_INDEX) { - if (u4PairwiseCipher != RSN_CIPHER_SUITE_CCMP || - u4GroupCipher != RSN_CIPHER_SUITE_CCMP || - u4AkmSuite != RSN_AKM_SUITE_PSK) { - } - DBGLOG(RSN, TRACE, ("Failed to select pairwise/group cipher for BT over Wi-Fi network (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } -#endif - - - /* Verify if selected pairwisse cipher is supported */ - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4PairwiseCipher, &i); - - /* Verify if selected group cipher is supported */ - if (fgSuiteSupported) { - fgSuiteSupported = rsnSearchSupportedCipher(prAdapter, u4GroupCipher, &i); - } - - if (!fgSuiteSupported) { - DBGLOG(RSN, TRACE, ("Failed to support selected pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ -#if CFG_SUPPORT_802_11W - if (i != 0) - for (i = (prBssRsnInfo->u4AuthKeyMgtSuiteCount - 1); i >= 0; i--) -#else - for (i = 0; i < prBssRsnInfo->u4AuthKeyMgtSuiteCount; i++) -#endif - { - if (rsnSearchAKMSuite(prAdapter, - prBssRsnInfo->au4AuthKeyMgtSuite[i], - &j)) { - u4AkmSuite = prBssRsnInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(RSN, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(RSN, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(RSN, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - -#if CFG_SUPPORT_802_11W - DBGLOG(RSN, TRACE, ("MFP setting = %d\n ", kalGetMfpSetting(prAdapter->prGlueInfo))); - - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - if (!prBssRsnInfo->fgRsnCapPresent) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability.\n")); - return FALSE; - } - else if (!(prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - if (prBssRsnInfo->u2RsnCap && ((prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR) || - (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPC))) { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = TRUE; - } - else { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - } - else { - if (prBssRsnInfo->fgRsnCapPresent && (prBssRsnInfo->u2RsnCap & ELEM_WPA_CAP_MFPR)) { - DBGLOG(RSN, TRACE, ("Skip RSN IE, No MFP Required Capability\n")); - return FALSE; - } - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection = FALSE; - } - DBGLOG(RSN, TRACE, ("fgMgmtProtection = %d\n ", prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection)); -#endif - - if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_CCMP){ - prBss->ucEncLevel = 3; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_TKIP){ - prBss->ucEncLevel = 2; - } - else if (GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP40 || - GET_SELECTOR_TYPE(u4GroupCipher) == CIPHER_SUITE_WEP104) { - prBss->ucEncLevel = 1; - } - else { - ASSERT(FALSE); - } - prBss->u4RsnSelectedPairwiseCipher = u4PairwiseCipher; - prBss->u4RsnSelectedGroupCipher = u4GroupCipher; - prBss->u4RsnSelectedAKMSuite = u4AkmSuite; - - return TRUE; - -} /* rsnPerformPolicySelection */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate WPA IE for beacon frame. -* -* \param[in] pucIeStartAddr Pointer to put the generated WPA IE. -* -* \return The append WPA-None IE length -* \note -* Called by: JOIN module, compose beacon IE -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWpaNoneIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - P_WPA_INFO_ELEM_T prWpaIE; - UINT_32 u4Suite; - UINT_16 u2SuiteCount; - PUINT_8 cp, cp2; - UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWpaNoneIE"); - - ASSERT(prMsduInfo); - - if (prAdapter->rWifiVar.rConnSettings.eAuthMode != AUTH_MODE_WPA_NONE) { - return; - } - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - prWpaIE = (P_WPA_INFO_ELEM_T)(pucBuffer); - - /* Start to construct a WPA IE. */ - /* Fill the Element ID field. */ - prWpaIE->ucElemId = ELEM_ID_WPA; - - /* Fill the OUI and OUI Type fields. */ - prWpaIE->aucOui[0] = 0x00; - prWpaIE->aucOui[1] = 0x50; - prWpaIE->aucOui[2] = 0xF2; - prWpaIE->ucOuiType = VENDOR_OUI_TYPE_WPA; - - /* Fill the Version field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2Version, 1); /* version 1 */ - ucExpendedLen = 6; - - /* Fill the Pairwise Key Cipher Suite List field. */ - u2SuiteCount = 0; - cp = (PUINT_8)&prWpaIE->aucPairwiseKeyCipherSuite1[0]; - - if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_CCMP, &i)) { - u4Suite = WPA_CIPHER_SUITE_CCMP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_TKIP, &i)) { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP104, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP104; - } - else if (rsnSearchSupportedCipher(prAdapter, WPA_CIPHER_SUITE_WEP40, &i)) { - u4Suite = WPA_CIPHER_SUITE_WEP40; - } - else { - u4Suite = WPA_CIPHER_SUITE_TKIP; - } - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Group Key Cipher Suite field as the same in pair-wise key. */ - WLAN_SET_FIELD_32(&prWpaIE->u4GroupKeyCipherSuite, u4Suite); - ucExpendedLen += 4; - - /* Fill the Pairwise Key Cipher Suite Count field. */ - WLAN_SET_FIELD_16(&prWpaIE->u2PairwiseKeyCipherSuiteCount, u2SuiteCount); - ucExpendedLen += 2; - - cp2 = cp; - - /* Fill the Authentication and Key Management Suite List field. */ - u2SuiteCount = 0; - cp += 2; - - if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_802_1X, &i)) { - u4Suite = WPA_AKM_SUITE_802_1X; - } - else if (rsnSearchAKMSuite(prAdapter, WPA_AKM_SUITE_PSK, &i)) { - u4Suite = WPA_AKM_SUITE_PSK; - } - else { - u4Suite = WPA_AKM_SUITE_NONE; - } - - /* This shall be the only avaiable value for current implementation */ - ASSERT(u4Suite == WPA_AKM_SUITE_NONE); - - WLAN_SET_FIELD_32(cp, u4Suite); - u2SuiteCount++; - ucExpendedLen += 4; - cp += 4; - - /* Fill the Authentication and Key Management Suite Count field. */ - WLAN_SET_FIELD_16(cp2, u2SuiteCount); - ucExpendedLen += 2; - - /* Fill the Length field. */ - prWpaIE->ucLength = (UINT_8)ucExpendedLen; - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - -} /* rsnGenerateWpaNoneIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWPAIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUCHAR cp; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - - DEBUGFUNC("rsnGenerateWPAIE"); - - ASSERT(prMsduInfo); - - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - //if (eNetworkId != NETWORK_TYPE_AIS_INDEX) - // return; - -#if CFG_ENABLE_WIFI_DIRECT - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetTkipCipher(prAdapter->prGlueInfo)))) || - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK))) -#else - if ((1 /* prCurrentBss->fgIEWPA */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA_PSK)))) -#endif - { - if (prP2pSpecificBssInfo->u2WpaIeLen!=0) - { - kalMemCopy(pucBuffer,prP2pSpecificBssInfo->aucWpaIeBuffer, - prP2pSpecificBssInfo->u2WpaIeLen); - prMsduInfo->u2FrameLength += prP2pSpecificBssInfo->u2WpaIeLen; - return; - - } - /* Construct a WPA IE for association request frame. */ - WPA_IE(pucBuffer)->ucElemId = ELEM_ID_WPA; - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - WPA_IE(pucBuffer)->aucOui[0] = 0x00; - WPA_IE(pucBuffer)->aucOui[1] = 0x50; - WPA_IE(pucBuffer)->aucOui[2] = 0xF2; - WPA_IE(pucBuffer)->ucOuiType = VENDOR_OUI_TYPE_WPA; - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2Version, 1); - -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(&WPA_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedGroupCipher); - - cp = (PUCHAR) &WPA_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - - WLAN_SET_FIELD_16(&WPA_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_CIPHER_SUITE_TKIP); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedPairwiseCipher); - cp += 4; - - WLAN_SET_FIELD_16(cp, 1); - cp += 2; -#if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered && eNetworkId == NETWORK_TYPE_P2P_INDEX) - { - WLAN_SET_FIELD_32(cp, WPA_AKM_SUITE_PSK); - } - else -#endif - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].u4RsnSelectedAKMSuite); - cp += 4; - - WPA_IE(pucBuffer)->ucLength = ELEM_ID_WPA_LEN_FIXED; - - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateWPAIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate RSN IE for -* associate request frame. -* -* \param[in] prMsduInfo The Selected BSS description -* -* \retval The append RSN IE length -* -* \note -* Called by: AIS module, P2P module, BOW module Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateRSNIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 u4Entry; - PUCHAR cp; - //UINT_8 ucExpendedLen = 0; - PUINT_8 pucBuffer; - ENUM_NETWORK_TYPE_INDEX_T eNetworkId; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("rsnGenerateRSNIE"); - - ASSERT(prMsduInfo); - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - ASSERT(pucBuffer); - - /* Todo:: network id */ - eNetworkId = (ENUM_NETWORK_TYPE_INDEX_T)prMsduInfo->ucNetworkType; - - if ( -#if CFG_ENABLE_WIFI_DIRECT - ((prAdapter->fgIsP2PRegistered) && - (eNetworkId == NETWORK_TYPE_P2P_INDEX) && - (kalP2PGetCcmpCipher(prAdapter->prGlueInfo))) || -#endif -#if CFG_ENABLE_BT_OVER_WIFI - (eNetworkId == NETWORK_TYPE_BOW_INDEX) || -#endif - (eNetworkId == NETWORK_TYPE_AIS_INDEX /* prCurrentBss->fgIERSN */ && - ((prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) || - (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2_PSK)))) - { - /* Construct a RSN IE for association request frame. */ - RSN_IE(pucBuffer)->ucElemId = ELEM_ID_RSN; - RSN_IE(pucBuffer)->ucLength = ELEM_ID_RSN_LEN_FIXED; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2Version, 1); // Version - WLAN_SET_FIELD_32(&RSN_IE(pucBuffer)->u4GroupKeyCipherSuite, - prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedGroupCipher); // Group key suite - cp = (PUCHAR) &RSN_IE(pucBuffer)->aucPairwiseKeyCipherSuite1[0]; - WLAN_SET_FIELD_16(&RSN_IE(pucBuffer)->u2PairwiseKeyCipherSuiteCount, 1); - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedPairwiseCipher); - cp += 4; - WLAN_SET_FIELD_16(cp, 1); // AKM suite count - cp += 2; - WLAN_SET_FIELD_32(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u4RsnSelectedAKMSuite); // AKM suite - cp += 4; - WLAN_SET_FIELD_16(cp, prAdapter->rWifiVar.arBssInfo[eNetworkId].u2RsnSelectedCapInfo); // Capabilities -#if CFG_SUPPORT_802_11W - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection) { - if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_REQUIRED) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC | ELEM_WPA_CAP_MFPR); // Capabilities - } - else if (kalGetMfpSetting(prAdapter->prGlueInfo) == RSN_AUTH_MFP_OPTIONAL) { - WLAN_SET_FIELD_16(cp, ELEM_WPA_CAP_MFPC); // Capabilities - } - } -#endif - cp += 2; - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX) - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if (eNetworkId == NETWORK_TYPE_AIS_INDEX && - rsnSearchPmkidEntry(prAdapter, prStaRec->aucMacAddr, &u4Entry)) { - //DBGLOG(RSN, TRACE, ("Add Pmk at assoc req\n")); - //DBGLOG(RSN, TRACE, ("addr " MACSTR" PMKID "MACSTR"\n", - // MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arBSSID), MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - if (prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].fgPmkidExist) { - RSN_IE(pucBuffer)->ucLength = 38; - WLAN_SET_FIELD_16(cp, 1); // PMKID count - cp += 2; - DBGLOG(RSN, TRACE, ("BSSID "MACSTR" ind=%d\n", MAC2STR(prStaRec->aucMacAddr), u4Entry)); - DBGLOG(RSN, TRACE, ("use PMKID "MACSTR"\n", MAC2STR(prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID))); - kalMemCopy(cp, (PVOID)prAdapter->rWifiVar.rAisSpecificBssInfo.arPmkidCache[u4Entry].rBssidInfo.arPMKID, - sizeof(PARAM_PMKID_VALUE)); - //ucExpendedLen = 40; - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - } - else { - WLAN_SET_FIELD_16(cp, 0); // PMKID count - //ucExpendedLen = ELEM_ID_RSN_LEN_FIXED + 2; -#if CFG_SUPPORT_802_11W - cp += 2; - RSN_IE(pucBuffer)->ucLength += 2; -#endif - } - -#if CFG_SUPPORT_802_11W - if ((eNetworkId == NETWORK_TYPE_AIS_INDEX) && (kalGetMfpSetting(prAdapter->prGlueInfo) != RSN_AUTH_MFP_DISABLED) /* (mgmt_group_cipher == WPA_CIPHER_AES_128_CMAC) */ ) { - WLAN_SET_FIELD_32(cp, RSN_CIPHER_SUITE_AES_128_CMAC); - cp += 4; - RSN_IE(pucBuffer)->ucLength += 4; - } -#endif - prMsduInfo->u2FrameLength += IE_SIZE(pucBuffer); - } - -} /* rsnGenerateRSNIE */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is WFA IE and return Type and -* SubType for further process. -* -* \param[in] pucBuf Pointer to the buffer of WFA Information Element. -* \param[out] pucOuiType Pointer to the storage of OUI Type. -* \param[out] pu2SubTypeVersion Pointer to the storage of OUI SubType and Version. - -* \retval TRUE Parse IE ok -* \retval FALSE Parse IE fail -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnParseCheckForWFAInfoElem ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuf, - OUT PUINT_8 pucOuiType, - OUT PUINT_16 pu2SubTypeVersion - ) -{ - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WFA_T prWfaIE; - - ASSERT(pucBuf); - ASSERT(pucOuiType); - ASSERT(pu2SubTypeVersion); - prWfaIE = (P_IE_WFA_T)pucBuf; - - do { - if (IE_LEN(pucBuf) <= ELEM_MIN_LEN_WFA_OUI_TYPE_SUBTYPE) { - break; - } - else if (prWfaIE->aucOui[0] != aucWfaOui[0] || - prWfaIE->aucOui[1] != aucWfaOui[1] || - prWfaIE->aucOui[2] != aucWfaOui[2]) { - break; - } - - *pucOuiType = prWfaIE->ucOuiType; - WLAN_GET_FIELD_16(&prWfaIE->aucOuiSubTypeVersion[0], pu2SubTypeVersion); - - return TRUE; - } - while (FALSE); - - return FALSE; - -} /* end of rsnParseCheckForWFAInfoElem() */ - -#if CFG_SUPPORT_AAA -/*----------------------------------------------------------------------------*/ -/*! -* \brief Parse the given IE buffer and check if it is RSN IE with CCMP PSK -* -* \param[in] prAdapter Pointer to Adapter -* \param[in] prSwRfb Pointer to the rx buffer -* \param[in] pIE Pointer rthe buffer of Information Element. -* \param[out] prStatusCode Pointer to the return status code. - -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -rsnParserCheckForRSNCCMPPSK( - P_ADAPTER_T prAdapter, - P_RSN_INFO_ELEM_T prIe, - PUINT_16 pu2StatusCode - ) -{ - - RSN_INFO_T rRsnIe; - - ASSERT(prAdapter); - ASSERT(prIe); - ASSERT(pu2StatusCode); - - *pu2StatusCode = STATUS_CODE_INVALID_INFO_ELEMENT; - - if (rsnParseRsnIE(prAdapter, prIe, &rRsnIe)) { - if ((rRsnIe.u4PairwiseKeyCipherSuiteCount != 1) || (rRsnIe.au4PairwiseKeyCipherSuite[0] != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_PAIRWISE_CIPHER; - return; - } - if ((rRsnIe.u4GroupKeyCipherSuite != RSN_CIPHER_SUITE_CCMP)) { - *pu2StatusCode = STATUS_CODE_INVALID_GROUP_CIPHER; - return; - } - if ((rRsnIe.u4AuthKeyMgtSuiteCount != 1) || (rRsnIe.au4AuthKeyMgtSuite[0] != RSN_AKM_SUITE_PSK)) { - *pu2StatusCode = STATUS_CODE_INVALID_AKMP; - return; - } - - DBGLOG(RSN, TRACE, ("RSN with CCMP-PSK\n" )); - *pu2StatusCode = WLAN_STATUS_SUCCESS; - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an authentication event to NDIS. -* -* \param[in] u4Flags Authentication event: \n -* PARAM_AUTH_REQUEST_REAUTH 0x01 \n -* PARAM_AUTH_REQUEST_KEYUPDATE 0x02 \n -* PARAM_AUTH_REQUEST_PAIRWISE_ERROR 0x06 \n -* PARAM_AUTH_REQUEST_GROUP_ERROR 0x0E \n -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenMicErrorEvent ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgFlags - ) -{ - P_PARAM_AUTH_EVENT_T prAuthEvent; - - DEBUGFUNC("rsnGenMicErrorEvent"); - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, (PVOID)prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucBSSID, MAC_ADDR_LEN); - - if (fgFlags == TRUE) - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - else - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); - -} /* rsnGenMicErrorEvent */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to handle TKIP MIC failures. -* -* \param[in] adapter_p Pointer to the adapter object data area. -* \param[in] prSta Pointer to the STA which occur MIC Error -* \param[in] fgErrorKeyType type of error key -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnTkipHandleMICFailure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN BOOLEAN fgErrorKeyType - ) -{ - //UINT_32 u4RsnaCurrentMICFailTime; - //P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnTkipHandleMICFailure"); - - ASSERT(prAdapter); -#if 1 - rsnGenMicErrorEvent(prAdapter,/* prSta,*/ fgErrorKeyType); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); -#else - ASSERT(prSta); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Record the MIC error occur time. */ - GET_CURRENT_SYSTIME(&u4RsnaCurrentMICFailTime); - - /* Generate authentication request event. */ - DBGLOG(RSN, INFO, ("Generate TKIP MIC error event (type: 0%d)\n", - fgErrorKeyType)); - - /* If less than 60 seconds have passed since a previous TKIP MIC failure, - disassociate from the AP and wait for 60 seconds before (re)associating - with the same AP. */ - if (prAisSpecBssInfo->u4RsnaLastMICFailTime != 0 && - !CHECK_FOR_TIMEOUT(u4RsnaCurrentMICFailTime, - prAisSpecBssInfo->u4RsnaLastMICFailTime, - SEC_TO_SYSTIME(TKIP_COUNTERMEASURE_SEC))) { - /* If less than 60 seconds expired since last MIC error, we have to - block traffic. */ - - DBGLOG(RSN, INFO, ("Start blocking traffic!\n")); - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - - secFsmEventStartCounterMeasure(prAdapter, prSta); - } - else { - rsnGenMicErrorEvent( prAdapter,/* prSta,*/ fgErrorKeyType); - DBGLOG(RSN, INFO, ("First TKIP MIC error!\n")); - } - - COPY_SYSTIME(prAisSpecBssInfo->u4RsnaLastMICFailTime, u4RsnaCurrentMICFailTime); -#endif -} /* rsnTkipHandleMICFailure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS Desc at scan result list -* \param[out] pu4CandidateCount Pointer to the number of selected candidates. -* It is set to zero if no BSSID matches our requirement. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnSelectPmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("rsnSelectPmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - - /* Search a BSS with the same SSID from the given BSS description set. */ - //DBGLOG(RSN, TRACE, ("Check scan result ["MACSTR"]\n", - // MAC2STR(prBssDesc->aucBSSID))); - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - -#if 0 - if ((prBssDesc->u2BSSBasicRateSet & - ~(rPhyAttributes[prAisBssInfo->ePhyType].u2SupportedRateSet)) || - prBssDesc->fgIsUnknownBssBasicRate) { - DBGLOG(RSN, TRACE, ("-- Rate set not matched\n")); - return; - } - - if (/* prBssDesc->u4RsnSelectedPairwiseCipher != prAisBssInfo->u4RsnSelectedPairwiseCipher ||*/ - prBssDesc->u4RsnSelectedGroupCipher != prAisBssInfo->u4RsnSelectedGroupCipher /*|| - prBssDesc->u4RsnSelectedAKMSuite != prAisBssInfo->u4RsnSelectedAKMSuite */) { - DBGLOG(RSN, TRACE, ("-- Encrypt status not matched for PMKID \n")); - return; - } -#endif - - rsnUpdatePmkidCandidateList(prAdapter, prBssDesc); - -} /* rsnSelectPmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to select a list of BSSID from -* the scan results for PMKID candidate list. -* -* \param[in] prBssDesc the BSS DESC at scan result list -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnUpdatePmkidCandidateList ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc - ) -{ - UINT_32 i; - P_CONNECTION_SETTINGS_T prConnSettings; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnUpdatePmkidCandidateList"); - - ASSERT(prBssDesc); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (UNEQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, prConnSettings->ucSSIDLen)) { - DBGLOG(RSN, TRACE, ("-- SSID not matched\n")); - return; - } - - for (i = 0; i < CFG_MAX_PMKID_CACHE; i++) { - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisSpecBssInfo->arPmkidCandicate[i].aucBssid)) - return; - } - - /* If the number of selected BSSID exceed MAX_NUM_PMKID_CACHE(16), - then we only store MAX_NUM_PMKID_CACHE(16) in PMKID cache */ - if ((prAisSpecBssInfo->u4PmkidCandicateCount + 1) > CFG_MAX_PMKID_CACHE) { - prAisSpecBssInfo->u4PmkidCandicateCount --; - } - - i = prAisSpecBssInfo->u4PmkidCandicateCount; - - COPY_MAC_ADDR((PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - (PVOID)prBssDesc->aucBSSID); - - if (prBssDesc->u2RsnCap & MASK_RSNIE_CAP_PREAUTH) { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 1; - DBGLOG(RSN, TRACE, ("Add " MACSTR " with pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - else { - prAisSpecBssInfo->arPmkidCandicate[i].u4PreAuthFlags = 0; - DBGLOG(RSN, TRACE, ("Add " MACSTR " without pre-auth to candidate list\n", - MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - } - - prAisSpecBssInfo->u4PmkidCandicateCount ++; - -} /* rsnUpdatePmkidCandidateList */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search the desired entry in -* PMKID cache according to the BSSID -* -* \param[in] pucBssid Pointer to the BSSID -* \param[out] pu4EntryIndex Pointer to place the found entry index -* -* \retval TRUE, if found one entry for specified BSSID -* \retval FALSE, if not found -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnSearchPmkidEntry ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBssid, - OUT PUINT_32 pu4EntryIndex - ) -{ - UINT_32 i; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - DEBUGFUNC("rsnSearchPmkidEntry"); - - ASSERT(pucBssid); - ASSERT(pu4EntryIndex); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if (prAisSpecBssInfo->u4PmkidCacheCount > CFG_MAX_PMKID_CACHE) { - return FALSE; - } - - ASSERT(prAisSpecBssInfo->u4PmkidCacheCount <= CFG_MAX_PMKID_CACHE); - - /* Search for desired BSSID */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCacheCount; i++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[i].rBssidInfo.arBSSID, pucBssid, - MAC_ADDR_LEN)) { - break; - } - } - - /* If desired BSSID is found, then set the PMKID */ - if (i < prAisSpecBssInfo->u4PmkidCacheCount) { - *pu4EntryIndex = i; - - return TRUE; - } - - return FALSE; -} /* rsnSearchPmkidEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check if there is difference -* between PMKID candicate list and PMKID cache. If there -* is new candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \retval TRUE, if new member in the PMKID candicate list -* \retval FALSe, if no new member in the PMKID candicate list -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckPmkidCandicate ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - UINT_32 i; // Index for PMKID candicate - UINT_32 j; // Indix for PMKID cache - BOOLEAN status = FALSE; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - /* Check for each candicate */ - for (i = 0; i < prAisSpecBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecBssInfo->u4PmkidCacheCount; j++) { - if (!kalMemCmp(prAisSpecBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN)) { - //DBGLOG(RSN, TRACE, (MACSTR" at PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - break; - } - } - - /* No entry found in PMKID cache for the candicate, add new one */ - if (j == prAisSpecBssInfo->u4PmkidCacheCount && prAisSpecBssInfo->u4PmkidCacheCount < CFG_MAX_PMKID_CACHE) { - DBGLOG(RSN, TRACE, ("Add "MACSTR" to PMKID cache!!\n", MAC2STR(prAisSpecBssInfo->arPmkidCandicate[i].aucBssid))); - kalMemCopy((PVOID)prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.arBSSID, - (PVOID)prAisSpecBssInfo->arPmkidCandicate[i].aucBssid, - MAC_ADDR_LEN); - prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].fgPmkidExist = FALSE; - prAisSpecBssInfo->u4PmkidCacheCount++; - - status = TRUE; - } - } - - return status; -} /* rsnCheckPmkidCandicate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to wait a duration to indicate the pre-auth AP candicate -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnIndicatePmkidCand ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - DBGLOG(RSN, EVENT, ("Security - Time to indicate the PMKID cand.\n")); - - /* If the authentication mode is WPA2 and indication PMKID flag - is available, then we indicate the PMKID candidate list to NDIS and - clear the flag, indicatePMKID */ - - if (prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnGeneratePmkidIndication(prAdapter); - } - - return; -} /* end of rsnIndicatePmkidCand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to check the BSS Desc at scan result -* with pre-auth cap at wpa2 mode. If there -* is candicate that no cache entry is available, then -* add a new entry for the new candicate in the PMKID cache -* and set the PMKID indication flag to TRUE. -* -* \param[in] prBss The BSS Desc at scan result -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnCheckPmkidCache ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - P_AIS_BSS_INFO_T prAisBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - - DEBUGFUNC("rsnCheckPmkidCandicate"); - - ASSERT(prBss); - - prConnSettings = &prAdapter->rWifiVar.rConnSettings; - prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - if ((prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) && - (prConnSettings->eAuthMode == AUTH_MODE_WPA2)) { - rsnSelectPmkidCandidateList(prAdapter, prBss); - - /* Set indication flag of PMKID to TRUE, and then connHandleNetworkConnection() - will indicate this later */ - if (rsnCheckPmkidCandicate(prAdapter)) { - DBGLOG(RSN, TRACE, ("Prepare a timer to indicate candidate PMKID Candidate\n")); - cnmTimerStopTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(prAdapter, &prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to generate an PMKID candidate list -* indication to NDIS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] u4Flags PMKID candidate list event: -* PARAM_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGeneratePmkidIndication ( - IN P_ADAPTER_T prAdapter - ) -{ - P_PARAM_STATUS_INDICATION_T prStatusEvent; - P_PARAM_PMKID_CANDIDATE_LIST_T prPmkidEvent; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecificBssInfo; - UINT_8 i, j = 0, count = 0; - UINT_32 u4LenOfUsedBuffer; - - DEBUGFUNC("rsnGeneratePmkidIndication"); - - ASSERT(prAdapter); - - prStatusEvent = - (P_PARAM_STATUS_INDICATION_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: PMKID Candidatelist Event */ - prStatusEvent->eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - ASSERT(prStatusEvent); - - prPmkidEvent = (P_PARAM_PMKID_CANDIDATE_LIST_T)(&prStatusEvent->eStatusType + 1); - ASSERT(prPmkidEvent); - - prAisSpecificBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prAisSpecificBssInfo); - - for (i = 0; i < prAisSpecificBssInfo->u4PmkidCandicateCount; i++) { - for (j = 0; j < prAisSpecificBssInfo->u4PmkidCacheCount; j++) { - if (EQUAL_MAC_ADDR( prAisSpecificBssInfo->arPmkidCache[j].rBssidInfo.arBSSID, - prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid) && - (prAisSpecificBssInfo->arPmkidCache[j].fgPmkidExist == TRUE)){ - break; - } - } - if (count >= CFG_MAX_PMKID_CACHE) { - break; - } - - if (j == prAisSpecificBssInfo->u4PmkidCacheCount) { - kalMemCopy((PVOID)prPmkidEvent->arCandidateList[count].arBSSID, - (PVOID)prAisSpecificBssInfo->arPmkidCandicate[i].aucBssid, - PARAM_MAC_ADDR_LEN); - prPmkidEvent->arCandidateList[count].u4Flags = - prAisSpecificBssInfo->arPmkidCandicate[i].u4PreAuthFlags; - DBGLOG(RSN, TRACE, (MACSTR" %d\n", MAC2STR(prPmkidEvent->arCandidateList[count].arBSSID), - prPmkidEvent->arCandidateList[count].u4Flags)); - count++; - } - } - - /* PMKID Candidate List */ - prPmkidEvent->u4Version = 1; - prPmkidEvent->u4NumCandidates = count; - DBGLOG(RSN, TRACE, ("rsnGeneratePmkidIndication #%d\n", prPmkidEvent->u4NumCandidates)); - u4LenOfUsedBuffer = sizeof(ENUM_STATUS_TYPE_T) + (2 * sizeof(UINT_32)) + - (count * sizeof(PARAM_PMKID_CANDIDATE_T)); - //dumpMemory8((PUINT_8)prAdapter->aucIndicationEventBuffer, u4LenOfUsedBuffer); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) prAdapter->aucIndicationEventBuffer, - u4LenOfUsedBuffer); - -} /* rsnGeneratePmkidIndication */ -#endif - -#if CFG_SUPPORT_WPS2 -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WSC IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WSC IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -rsnGenerateWSCIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 221 :0xDD */ - if (prAdapter->prGlueInfo->u2WSCAssocInfoIELen) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWSCAssocInfoIE, prAdapter->prGlueInfo->u2WSCAssocInfoIELen); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WSCAssocInfoIELen; - } - -} -#endif - - -#if CFG_SUPPORT_802_11W - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the Bip Key installed or not -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -rsnCheckBipKeyInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - if (prStaRec && prStaRec->ucNetTypeIndex == (UINT_8)NETWORK_TYPE_AIS_INDEX) - return prAdapter->rWifiVar.rAisSpecificBssInfo.fgBipKeyInstalled; - else - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to check the Sa query timeout. -* -* -* \note -* Called by: AIS module, Handle by Sa Quert timeout -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -rsnCheckSaQueryTimeout ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - UINT_32 now; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - GET_CURRENT_SYSTIME(&now); - - if (CHECK_FOR_TIMEOUT(now, - prBssSpecInfo->u4SaQueryStart, - TU_TO_MSEC(1000))) { - LOG_FUNC("association SA Query timed out\n"); - - prBssSpecInfo->ucSaQueryTimedOut = 1; - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - /* Re-connect */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - return 1; - } - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query timer. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQueryTimer ( - IN P_ADAPTER_T prAdapter - ) -{ - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prTxFrame; - UINT_16 u2PayloadLen; - PUINT_8 pucTmp = NULL; - UINT_8 ucTransId[ACTION_SA_QUERY_TR_ID_LEN]; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - LOG_FUNC("MFP: Start Sa Query\n"); - - if (prBssSpecInfo->u4SaQueryCount > 0 && - rsnCheckSaQueryTimeout(prAdapter)) { - LOG_FUNC("MFP: u4SaQueryCount count =%d\n", prBssSpecInfo->u4SaQueryCount); - return; - } - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_REQUEST; - - if (prBssSpecInfo->u4SaQueryCount == 0) { - GET_CURRENT_SYSTIME(&prBssSpecInfo->u4SaQueryStart); - } - - if (prBssSpecInfo->u4SaQueryCount) { - pucTmp = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!pucTmp) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc tmp buffer for backup sa query id\n")); - return; - } - kalMemCopy(pucTmp, prBssSpecInfo->pucSaQueryTransId, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - } - - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - - ucTransId[0] = (UINT_8)(kalRandomNumber() & 0xFF); - ucTransId[1] = (UINT_8)(kalRandomNumber() & 0xFF); - - kalMemCopy(prTxFrame->ucTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - - prBssSpecInfo->u4SaQueryCount++; - - prBssSpecInfo->pucSaQueryTransId = kalMemAlloc(prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN, VIR_MEM_TYPE); - if (!prBssSpecInfo->pucSaQueryTransId) { - DBGLOG(RSN, INFO, ("MFP: Fail to alloc buffer for sa query id list\n")); - return; - } - - if (pucTmp) { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, pucTmp, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - kalMemCopy(&prBssSpecInfo->pucSaQueryTransId[(prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN], - ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - kalMemFree(pucTmp, VIR_MEM_TYPE, (prBssSpecInfo->u4SaQueryCount - 1) * ACTION_SA_QUERY_TR_ID_LEN); - } - else { - kalMemCopy(prBssSpecInfo->pucSaQueryTransId, ucTransId, ACTION_SA_QUERY_TR_ID_LEN); - } - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - DBGLOG(RSN, TRACE, ("Set SA Query timer %d (%d sec)\n", prBssSpecInfo->u4SaQueryCount, prBssInfo->u2ObssScanInterval)); - - cnmTimerStartTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer, - TU_TO_MSEC(201)); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to start the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStartSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - rsnStartSaQueryTimer(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to stop the 802.11w sa query. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void rsnStopSaQuery ( - IN P_ADAPTER_T prAdapter - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - cnmTimerStopTimer(prAdapter, &prBssSpecInfo->rSaQueryTimer); - kalMemFree(prBssSpecInfo->pucSaQueryTransId, VIR_MEM_TYPE, prBssSpecInfo->u4SaQueryCount * ACTION_SA_QUERY_TR_ID_LEN); - prBssSpecInfo->pucSaQueryTransId = NULL; - prBssSpecInfo->u4SaQueryCount = 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - P_MSDU_INFO_T prMsduInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame = NULL; - UINT_16 u2PayloadLen; - P_STA_RECORD_T prStaRec; - P_ACTION_SA_QUERY_FRAME prTxFrame; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]; - ASSERT(prBssInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) == PARAM_MEDIA_STATE_DISCONNECTED) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Ignore SA Query Request " - "from unassociated STA " MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - return; - } - DBGLOG(RSN, TRACE, ("IEEE 802.11: Sending SA Query Response to " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_SA_QUERY_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - /* SA Query always with protected */ - prTxFrame->u2FrameCtrl |= MASK_FC_PROTECTED_FRAME; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prBssInfo->aucBSSID); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_SA_QUERT_ACTION; - prTxFrame->ucAction = ACTION_SA_QUERY_RESPONSE; - - kalMemCopy(prTxFrame->ucTransId, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - u2PayloadLen = 2 + ACTION_SA_QUERY_TR_ID_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prBssInfo->prStaRecOfAP->ucIndex; - prMsduInfo->ucNetworkType = prBssInfo->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = FALSE; - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w sa query action frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -void -rsnSaQueryAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_AIS_SPECIFIC_BSS_INFO_T prBssSpecInfo; - P_ACTION_SA_QUERY_FRAME prRxFrame; - P_STA_RECORD_T prStaRec; - UINT_32 i; - - prBssSpecInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - ASSERT(prBssSpecInfo); - - prRxFrame = (P_ACTION_SA_QUERY_FRAME) prSwRfb->pvHeader; - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prSwRfb->u2PacketLen < ACTION_SA_QUERY_TR_ID_LEN) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Too short SA Query Action " - "frame (len=%lu)\n", (unsigned long) prSwRfb->u2PacketLen)); - return; - } - - if (prRxFrame->ucAction == ACTION_SA_QUERY_REQUEST) { - rsnSaQueryRequest(prAdapter, prSwRfb); - return; - } - - if (prRxFrame->ucAction != ACTION_SA_QUERY_RESPONSE) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: Unexpected SA Query " - "Action %d\n", prRxFrame->ucAction)); - return; - } - - DBGLOG(RSN, TRACE, ("IEEE 802.11: Received SA Query Response from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - DBGLOG_MEM8(RSN, TRACE, prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN); - - /* MLME-SAQuery.confirm */ - - for (i = 0; i < prBssSpecInfo->u4SaQueryCount; i++) { - if (kalMemCmp(prBssSpecInfo->pucSaQueryTransId + - i * ACTION_SA_QUERY_TR_ID_LEN, - prRxFrame->ucTransId, - ACTION_SA_QUERY_TR_ID_LEN) == 0) - break; - } - - if (i >= prBssSpecInfo->u4SaQueryCount) { - DBGLOG(RSN, TRACE, ("IEEE 802.11: No matching SA Query " - "transaction identifier found\n")); - return; - } - - DBGLOG(RSN, TRACE, ("Reply to pending SA Query received\n")); - - rsnStopSaQuery(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11w mgmt frame. -* -* -* \note -* Called by: AIS module, Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -rsnCheckRxMgmt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN UINT_8 ucSubtype - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - BOOLEAN fgUnicast = TRUE; - BOOLEAN fgRobustAction = FALSE; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */) { - - P_WLAN_ASSOC_REQ_FRAME_T prAssocReqFrame; - prAssocReqFrame = (P_WLAN_ASSOC_REQ_FRAME_T) prSwRfb->pvHeader; - - if (prAssocReqFrame->aucDestAddr[0] & BIT(0)) - fgUnicast = FALSE; - - LOG_FUNC("QM RX MGT: rsnCheckRxMgmt = %d 0x%x %d ucSubtype=%x\n", fgUnicast, prHifRxHdr->ucReserved, (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC), ucSubtype); - - if (prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC) { - /* "Dropped unprotected Robust Action frame from an MFP STA" */ - /* exclude Public Action */ - if (ucSubtype == 13 /* 0x1011: MAC_FRAME_ACTION */) - { - UINT_8 ucAction = *prSwRfb->pucRecvBuff; - if (ucAction != CATEGORY_PUBLIC_ACTION && ucAction != CATEGORY_HT_ACTION) { -#if DBG && CFG_RX_PKTS_DUMP - LOG_FUNC("QM RX MGT: UnProtected Robust Action frame = %d\n", ucAction); -#endif - fgRobustAction = TRUE; - return TRUE; - } - } - if (fgUnicast && ((ucSubtype == 10 /* 0x1010: MAC_FRAME_DISASSOC */) || (ucSubtype == 12 /* 0x1100: MAC_FRAME_DEAUTH */))) { - LOG_FUNC("QM RX MGT: rsnStartSaQuery\n"); - /* MFP test plan 5.3.3.5 */ - rsnStartSaQuery(prAdapter); - return TRUE; - } - } -#if 0 - else { - if (fgUnicast && ((ucSubtype == MAC_FRAME_DISASSOC) || (ucSubtype == MAC_FRAME_DEAUTH))) { - /* This done by function handler */ - //kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - // WLAN_STATUS_MEDIA_DISCONNECT, - // NULL, - // 0); - } - } -#endif - } - return FALSE; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/saa_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/saa_fsm.c deleted file mode 100755 index 62c927706f2e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/saa_fsm.c +++ /dev/null @@ -1,2062 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/saa_fsm.c#1 $ -*/ - -/*! \file "saa_fsm.c" - \brief This file defines the FSM for SAA MODULE. - - This file defines the FSM for SAA MODULE. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: saa_fsm.c $ - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 04 20 2012 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * correct macro - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 04 2011 cp.wu - * [WCXRP00001086] [MT6620 Wi-Fi][Driver] On Android, indicate an extra DISCONNECT for REASSOCIATED cases as an explicit trigger for Android framework - * 1. for DEAUTH/DISASSOC cases, indicate for DISCONNECTION immediately. - * 2. (Android only) when reassociation-and-non-roaming cases happened, indicate an extra DISCONNECT indication to Android Wi-Fi framework - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 09 30 2011 cm.chang - * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band - * Add debug message about 40MHz bandwidth allowed - * - * 05 12 2011 cp.wu - * [WCXRP00000720] [MT6620 Wi-Fi][Driver] Do not do any further operation in case STA-REC has been invalidated before SAA-FSM starts to roll - * check for valid STA-REC before SAA-FSM starts to roll. - * - * 04 21 2011 terry.wu - * [WCXRP00000674] [MT6620 Wi-Fi][Driver] Refine AAA authSendAuthFrame - * Add network type parameter to authSendAuthFrame. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 03 31 2011 puff.wen - * NULL - * . - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix compile error of after Station Type Macro modification. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 24 2010 chinghwa.yu - * NULL - * Update for MID_SCN_BOW_SCAN_DONE mboxDummy. - * Update saa_fsm for BOW. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 02 2010 yuche.tsai - * NULL - * Add support for P2P join event start. - * - * 07 12 2010 cp.wu - * - * SAA will take a record for tracking request sequence number. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * AIS-FSM integration with CNM channel request messages - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with main branch for reseting to state 1 when associating with another AP - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration the security related function from firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable WiFi Direct function. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * - * * * Add Connection Policy - Any and Rx Burst Deauth Support for WHQL - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support of Driver STA_RECORD_T activation - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 12 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Fix compile warning due to declared but not used - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Refine Debug Label - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update comment - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * rename the function - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugAAState[AA_STATE_NUM] = { - (PUINT_8)DISP_STRING("AA_STATE_IDLE"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH2"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_AUTH3"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_AUTH4"), - (PUINT_8)DISP_STRING("SAA_STATE_SEND_ASSOC1"), - (PUINT_8)DISP_STRING("SAA_STATE_WAIT_ASSOC2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH2"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_AUTH4"), - (PUINT_8)DISP_STRING("AAA_STATE_SEND_ASSOC2"), - (PUINT_8)DISP_STRING("AA_STATE_RESOURCE") -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief The Core FSM engine of SAA Module. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] eNextState The value of Next State -* @param[in] prRetainedSwRfb Pointer to the retained SW_RFB_T for JOIN Success -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_AA_STATE_T eNextState, - IN P_SW_RFB_T prRetainedSwRfb - ) -{ - ENUM_AA_STATE_T ePreviousState; - BOOLEAN fgIsTransition; - - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - do { - -#if DBG - DBGLOG(SAA, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugAAState[prStaRec->eAuthAssocState], - apucDebugAAState[eNextState])); -#else - DBGLOG(SAA, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SAA_IDX, - prStaRec->eAuthAssocState, - eNextState)); -#endif - ePreviousState = prStaRec->eAuthAssocState; - - /* NOTE(Kevin): This is the only place to change the eAuthAssocState(except initial) */ - prStaRec->eAuthAssocState = eNextState; - - - fgIsTransition = (BOOLEAN)FALSE; - switch (prStaRec->eAuthAssocState) { - case AA_STATE_IDLE: - { - if (ePreviousState != prStaRec->eAuthAssocState) { /* Only trigger this event once */ - - if (prRetainedSwRfb) { - - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_SUCCESS, - prStaRec, - prRetainedSwRfb) == WLAN_STATUS_SUCCESS) { - } - else { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - else { - if (saaFsmSendEventJoinComplete(prAdapter, - WLAN_STATUS_FAILURE, - prStaRec, - NULL) == WLAN_STATUS_RESOURCES) { - eNextState = AA_STATE_RESOURCE; - fgIsTransition = TRUE; - } - } - - } - - /* Free allocated TCM memory */ - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - } - break; - - case SAA_STATE_SEND_AUTH1: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - /* Update Station Record - Class 1 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame( - prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_1, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH2: - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - -#if !CFG_SUPPORT_AAA - if (authSendAuthFrame(prAdapter, - prStaRec, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) -#else - if (authSendAuthFrame(prAdapter, - prStaRec, - prStaRec->ucNetTypeIndex, - NULL, - AUTH_TRANSACTION_SEQ_3, - STATUS_CODE_RESERVED) != WLAN_STATUS_SUCCESS) -#endif /* CFG_SUPPORT_AAA */ - { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_AUTHENTICATION_RETRY_TIMEOUT_TU)); - } - } - } - break; - - case SAA_STATE_WAIT_AUTH4: - break; - - case SAA_STATE_SEND_ASSOC1: - /* Do tasks in INIT STATE */ - if (prStaRec->ucTxAuthAssocRetryCount >= - prStaRec->ucTxAuthAssocRetryLimit) { - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - eNextState = AA_STATE_IDLE; - fgIsTransition = TRUE; - } - else { - prStaRec->ucTxAuthAssocRetryCount++; - - if (assocSendReAssocReqFrame(prAdapter, prStaRec) != WLAN_STATUS_SUCCESS) { - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventTxReqTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(TX_ASSOCIATION_RETRY_TIMEOUT_TU)); - } - } - - break; - - case SAA_STATE_WAIT_ASSOC2: - break; - - case AA_STATE_RESOURCE: - /* TODO(Kevin) Can setup a timer and send message later */ - break; - - default: - DBGLOG(SAA, ERROR, ("Unknown AA STATE\n")); - ASSERT(0); - break; - } - - } - while (fgIsTransition); - - return; - -} /* end of saaFsmSteps() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Event to AIS/BOW/P2P -* -* @param[in] rJoinStatus To indicate JOIN success or failure. -* @param[in] prStaRec Pointer to the STA_RECORD_T -* @param[in] prSwRfb Pointer to the SW_RFB_T - -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmSendEventJoinComplete ( - IN P_ADAPTER_T prAdapter, - IN WLAN_STATUS rJoinStatus, - IN P_STA_RECORD_T prStaRec, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_INFO_T prBssInfo; - - ASSERT(prStaRec); - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - /* Store limitation about 40Mhz bandwidth capability during association */ - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if (rJoinStatus == WLAN_STATUS_SUCCESS) { - prBssInfo->fg40mBwAllowed = prBssInfo->fgAssoc40mBwAllowed; - } - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (IS_STA_IN_P2P(prStaRec))) { - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //@TODO: BOW handler - - P_MSG_SAA_FSM_COMP_T prSaaFsmCompMsg; - - prSaaFsmCompMsg = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SAA_FSM_COMP_T)); - if (!prSaaFsmCompMsg) { - return WLAN_STATUS_RESOURCES; - } - - prSaaFsmCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; - prSaaFsmCompMsg->ucSeqNum = prStaRec->ucAuthAssocReqSeqNum; - prSaaFsmCompMsg->rJoinStatus = rJoinStatus; - prSaaFsmCompMsg->prStaRec = prStaRec; - prSaaFsmCompMsg->prSwRfb = prSwRfb; - - /* NOTE(Kevin): Set to UNBUF for immediately JOIN complete */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSaaFsmCompMsg, - MSG_SEND_METHOD_UNBUF); - - return WLAN_STATUS_SUCCESS; - } -#endif - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - -} /* end of saaFsmSendEventJoinComplete() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Start Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Join Request for a particular STA. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_START_T prSaaFsmStartMsg; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(prMsgHdr); - - prSaaFsmStartMsg = (P_MSG_SAA_FSM_START_T)prMsgHdr; - prStaRec = prSaaFsmStartMsg->prStaRec; - - if((!prStaRec) || (prStaRec->fgIsInUse == FALSE)) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-START: Trigger SAA FSM.\n")); - - /* record sequence number of request message */ - prStaRec->ucAuthAssocReqSeqNum = prSaaFsmStartMsg->ucSeqNum; - - cnmMemFree(prAdapter, prMsgHdr); - - //4 <1> Validation of SAA Start Event - if (!IS_AP_STA(prStaRec)) { - - DBGLOG(SAA, ERROR, ("EVENT-START: STA Type - %d was not supported.\n", prStaRec->eStaType)); - - /* Ignore the return value because don't care the prSwRfb */ - saaFsmSendEventJoinComplete(prAdapter, WLAN_STATUS_FAILURE, prStaRec, NULL); - - return; - } - - //4 <2> The previous JOIN process is not completed ? - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { - DBGLOG(SAA, ERROR, ("EVENT-START: Reentry of SAA Module.\n")); - prStaRec->eAuthAssocState = AA_STATE_IDLE; - } - - //4 <3> Reset Status Code and Time - /* Update Station Record - Status/Reason Code */ - prStaRec->u2StatusCode = STATUS_CODE_SUCCESSFUL; - - /* Update the record join time. */ - GET_CURRENT_SYSTIME(&prStaRec->rLastJoinTime); - - prStaRec->ucTxAuthAssocRetryCount = 0; - - if (prStaRec->prChallengeText) { - cnmMemFree(prAdapter, prStaRec->prChallengeText); - prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; - } - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - -#if CFG_PRIVACY_MIGRATION - //4 <4> Init the sec fsm - secFsmInit(prAdapter, prStaRec); -#endif - - //4 <5> Reset the STA STATE - /* Update Station Record - Class 1 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for Reconnect issue - - * We won't deactivate the same STA_RECORD_T and then activate it again for the - * case of reconnection. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_1); - - //4 <6> Decide if this BSS 20/40M bandwidth is allowed - if (prStaRec->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - - if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) - && (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) { - prBssInfo->fgAssoc40mBwAllowed = - cnmBss40mBwPermitted(prAdapter, prBssInfo->ucNetTypeIndex); - } - else { - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - DBGLOG(RLM, INFO, ("STA 40mAllowed=%d\n", prBssInfo->fgAssoc40mBwAllowed)); - } - - //4 <7> Trigger SAA FSM - saaFsmSteps(prAdapter, prStaRec, SAA_STATE_SEND_AUTH1, (P_SW_RFB_T)NULL); - - return; -} /* end of saaFsmRunEventStart() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(Auth1/Auth3/AssocReq) Event of SAA FSM. -* -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Auth1/Auth3/AssocReq frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - - P_STA_RECORD_T prStaRec; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(!prStaRec) { - return WLAN_STATUS_INVALID_PACKET; - } - - ASSERT(prStaRec); - - DBGLOG(SAA, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - { - /* Strictly check the outgoing frame is matched with current AA STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_1) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH2; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - { - /* Strictly check the outgoing frame is matched with current JOIN STATE */ - if (authCheckTxAuthFrame(prAdapter, - prMsduInfo, - AUTH_TRANSACTION_SEQ_3) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_AUTH4; - - cnmTimerStopTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - TU_TO_MSEC(DOT11_AUTHENTICATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_ASSOC1: - { - /* Strictly check the outgoing frame is matched with current SAA STATE */ - if (assocCheckTxReAssocReqFrame(prAdapter, prMsduInfo) != WLAN_STATUS_SUCCESS) { - break; - } - - if (rTxDoneStatus == TX_RESULT_SUCCESS) { - eNextState = SAA_STATE_WAIT_ASSOC2; - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - cnmTimerInitTimer(prAdapter, - &prStaRec->rTxReqDoneOrRxRespTimer, - (PFN_MGMT_TIMEOUT_FUNC)saaFsmRunEventRxRespTimeOut, - (UINT_32)prStaRec); - - cnmTimerStartTimer(prAdapter, - &(prStaRec->rTxReqDoneOrRxRespTimer), - TU_TO_MSEC(DOT11_ASSOCIATION_RESPONSE_TIMEOUT_TU)); - } - - /* if TX was successful, change to next state. - * if TX was failed, do retry if possible. - */ - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventTxDone() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Tx Request Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventTxReqTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: TX REQ TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_SEND_ASSOC1: - saaFsmSteps(prAdapter, prStaRec, prStaRec->eAuthAssocState, (P_SW_RFB_T)NULL); - break; - - default: - return; - } - - return; -} /* end of saaFsmRunEventTxReqTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will send Rx Response Timeout Event to SAA FSM. -* -* @param[in] prStaRec Pointer to the STA_RECORD_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxRespTimeOut ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - ENUM_AA_STATE_T eNextState; - - - DBGLOG(SAA, LOUD, ("EVENT-TIMER: RX RESP TIMEOUT, Current Time = %ld\n", kalGetTimeTick())); - - ASSERT(prStaRec); - if(!prStaRec) { - return; - } - - eNextState = prStaRec->eAuthAssocState; - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_WAIT_AUTH2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH1; - break; - - case SAA_STATE_WAIT_AUTH4: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_AUTH_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_AUTH3; - break; - - case SAA_STATE_WAIT_ASSOC2: - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_ASSOC_TIMEOUT; - - /* Pull back to earlier state to do retry */ - eNextState = SAA_STATE_SEND_ASSOC1; - break; - - default: - break; /* Ignore other cases */ - } - - - if (eNextState != prStaRec->eAuthAssocState) { - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - - return; -} /* end of saaFsmRunEventRxRespTimeOut() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx Auth Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventRxAuth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - ASSERT(0); - return; - } - - if (!IS_AP_STA(prStaRec)) { - return; - } - - switch(prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_AUTH1: - case SAA_STATE_WAIT_AUTH2: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_2, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); - - if (prStaRec->ucAuthAlgNum == - (UINT_8)AUTH_ALGORITHM_NUM_SHARED_KEY) { - - eNextState = SAA_STATE_SEND_AUTH3; - } - else { - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - case SAA_STATE_SEND_AUTH3: - case SAA_STATE_WAIT_AUTH4: - /* Check if the incoming frame is what we are waiting for */ - if (authCheckRxAuthFrameStatus(prAdapter, - prSwRfb, - AUTH_TRANSACTION_SEQ_4, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - authProcessRxAuth2_Auth4Frame(prAdapter, prSwRfb); /* Add for 802.11r handling */ - - /* Update Station Record - Class 2 Flag */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_2); - - eNextState = SAA_STATE_SEND_ASSOC1; - } - else { - DBGLOG(SAA, INFO, ("Auth Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - - eNextState = AA_STATE_IDLE; - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - saaFsmSteps(prAdapter, prStaRec, eNextState, (P_SW_RFB_T)NULL); - } - break; - - default: - break; /* Ignore other cases */ - } - - return; -} /* end of saaFsmRunEventRxAuth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will process the Rx (Re)Association Response Frame and then -* trigger SAA FSM. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if the status code was not success -* @retval WLAN_STATUS_BUFFER_RETAINED if the status code was success -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxAssoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2StatusCode; - ENUM_AA_STATE_T eNextState; - P_SW_RFB_T prRetainedSwRfb = (P_SW_RFB_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - ASSERT(0); - return rStatus; - } - - if (!IS_AP_STA(prStaRec)) { - return rStatus; - } - - switch (prStaRec->eAuthAssocState) { - case SAA_STATE_SEND_ASSOC1: - case SAA_STATE_WAIT_ASSOC2: - /* TRUE if the incoming frame is what we are waiting for */ - if (assocCheckRxReAssocRspFrameStatus(prAdapter, - prSwRfb, - &u2StatusCode) == WLAN_STATUS_SUCCESS) { - - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = u2StatusCode; - - if (u2StatusCode == STATUS_CODE_SUCCESSFUL) { - - /* Update Station Record - Class 3 Flag */ - /* NOTE(Kevin): Moved to AIS FSM for roaming issue - - * We should deactivate the STA_RECORD_T of previous AP before - * activate new one in Driver. - */ - //cnmStaRecChangeState(prStaRec, STA_STATE_3); - - prStaRec->ucJoinFailureCount = 0; // Clear history. - - prRetainedSwRfb = prSwRfb; - rStatus = WLAN_STATUS_PENDING; - } - else { - DBGLOG(SAA, INFO, ("Assoc Req was rejected by ["MACSTR"], Status Code = %d\n", - MAC2STR(prStaRec->aucMacAddr), u2StatusCode)); - } - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* update RCPI */ - prStaRec->ucRCPI = prSwRfb->prHifRxHdr->ucRcpi; - - eNextState = AA_STATE_IDLE; - - saaFsmSteps(prAdapter, prStaRec, eNextState, prRetainedSwRfb); - } - break; - - default: - break; /* Ignore other cases */ - } - - return rStatus; - -} /* end of saaFsmRunEventRxAssoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Deauth Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain deauthentication frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDeauth ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DEAUTH_FRAME_T prDeauthFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDeauthFrame = (P_WLAN_DEAUTH_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Deauth frame from BSSID=["MACSTR"].\n", - MAC2STR(prDeauthFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (authProcessRxDeauthFrame(prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - /* NOTE(Kevin): Change state immediately to avoid starvation of - * MSG buffer because of too many deauth frames before changing - * the STA state. - */ - cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1); - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DEAUTHENTICATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDeauthentication(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - bowRunEventRxDeAuth(prAdapter, prStaRec, prSwRfb); - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDeauth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will check the incoming Disassociation Frame. -* -* @param[in] prSwRfb Pointer to the SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS Always not retain disassociation frames -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -saaFsmRunEventRxDisassoc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_STA_RECORD_T prStaRec; -#if DBG - P_WLAN_DISASSOC_FRAME_T prDisassocFrame; -#endif /* DBG */ - - - ASSERT(prSwRfb); - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - -#if DBG - prDisassocFrame = (P_WLAN_DISASSOC_FRAME_T) prSwRfb->pvHeader; - - DBGLOG(SAA, INFO, ("Rx Disassoc frame from BSSID=["MACSTR"].\n", - MAC2STR(prDisassocFrame->aucBSSID))); -#endif /* DBG */ - - do { - - /* We should have the corresponding Sta Record. */ - if (!prStaRec) { - break; - } - - if (IS_STA_IN_AIS(prStaRec)) { - P_AIS_BSS_INFO_T prAisBssInfo; - - - if (!IS_AP_STA(prStaRec)) { - break; - } - - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - - if (prStaRec->ucStaState > STA_STATE_1) { - - /* Check if this is the AP we are associated or associating with */ - if (assocProcessRxDisassocFrame(prAdapter, - prSwRfb, - prStaRec->aucMacAddr, - &prStaRec->u2ReasonCode) == WLAN_STATUS_SUCCESS) { - - if (STA_STATE_3 == prStaRec->ucStaState) { - P_MSG_AIS_ABORT_T prAisAbortMsg; - - prAisAbortMsg = (P_MSG_AIS_ABORT_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_AIS_ABORT_T)); - if (!prAisAbortMsg) { - break; - } - - prAisAbortMsg->rMsgHdr.eMsgId = MID_SAA_AIS_FSM_ABORT; - prAisAbortMsg->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_DISASSOCIATED; - prAisAbortMsg->fgDelayIndication = FALSE; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prAisAbortMsg, - MSG_SEND_METHOD_BUF); - } - else { - - /* TODO(Kevin): Joining Abort */ - } - - } - - } - - } -#if CFG_ENABLE_WIFI_DIRECT - else if (prAdapter->fgIsP2PRegistered && IS_STA_IN_P2P(prStaRec)) { - /* TODO(Kevin) */ - p2pFsmRunEventRxDisassociation(prAdapter, prStaRec, prSwRfb); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if (IS_STA_IN_BOW(prStaRec)) { - /* TODO(Kevin) */ - } -#endif - else { - ASSERT(0); - } - - } while (FALSE); - - return WLAN_STATUS_SUCCESS; - -} /* end of saaFsmRunEventRxDisassoc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle the Abort Event to SAA FSM. -* -* @param[in] prMsgHdr Message of Abort Request for a particular STA. -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -saaFsmRunEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SAA_FSM_ABORT_T prSaaFsmAbortMsg; - P_STA_RECORD_T prStaRec; - - - ASSERT(prMsgHdr); - - prSaaFsmAbortMsg = (P_MSG_SAA_FSM_ABORT_T)prMsgHdr; - prStaRec = prSaaFsmAbortMsg->prStaRec; - - ASSERT(prStaRec); - if(!prStaRec) { - cnmMemFree(prAdapter, prMsgHdr); - return; - } - - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Stop SAA FSM.\n")); - - cnmMemFree(prAdapter, prMsgHdr); - - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prStaRec->ucTxAuthAssocRetryCount = 0; - - /* Cancel JOIN relative Timer */ - cnmTimerStopTimer(prAdapter, &prStaRec->rTxReqDoneOrRxRespTimer); - - if (prStaRec->eAuthAssocState != AA_STATE_IDLE) { -#if DBG - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %s.\n", - apucDebugAAState[prStaRec->eAuthAssocState])); -#else - DBGLOG(SAA, LOUD, ("EVENT-ABORT: Previous Auth/Assoc State == %d.\n", - prStaRec->eAuthAssocState)); -#endif - } - -#if 0 - /* For the Auth/Assoc State to IDLE */ - prStaRec->eAuthAssocState = AA_STATE_IDLE; -#else - /* Free this StaRec */ - cnmStaRecFree(prAdapter, prStaRec, FALSE); -#endif - - return; -} /* end of saaFsmRunEventAbort() */ - - -/* TODO(Kevin): following code will be modified and move to AIS FSM */ -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will send Join Timeout Event to JOIN FSM. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \retval WLAN_STATUS_FAILURE Fail because of Join Timeout -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -joinFsmRunEventJoinTimeOut ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("joinFsmRunEventJoinTimeOut"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - - DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); - - /* Get a Station Record if possible, TA == BSSID for AP */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prJoinInfo->prBssDesc->aucBSSID); - - /* We have renew this Sta Record when in JOIN_STATE_INIT */ - ASSERT(prStaRec); - - /* Record the Status Code of Authentication Request */ - prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; - - /* Increase Failure Count */ - prStaRec->ucJoinFailureCount++; - - /* Reset Send Auth/(Re)Assoc Frame Count */ - prJoinInfo->ucTxAuthAssocRetryCount = 0; - - /* Cancel other JOIN relative Timer */ - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rTxRequestTimer); - - ARB_CANCEL_TIMER(prAdapter, - prJoinInfo->rRxResponseTimer); - - /* Restore original setting from current BSS_INFO_T */ - if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) { - joinAdoptParametersFromCurrentBss(prAdapter); - } - - /* Pull back to IDLE */ - joinFsmSteps(prAdapter, JOIN_STATE_IDLE); - - return WLAN_STATUS_FAILURE; - -} /* end of joinFsmRunEventJoinTimeOut() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from Peer BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromPeerBss ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - - DEBUGFUNC("joinAdoptParametersFromPeerBss"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - - //4 <1> Adopt Peer BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssDesc->ePhyType; - - DBGLOG(JOIN, INFO, ("Target BSS[%s]'s PhyType = %s\n", - prBssDesc->aucSSID, (prBssDesc->ePhyType == PHY_TYPE_ERP_INDEX) ? "ERP" : "HR_DSSS")); - - - //4 <2> Adopt Peer BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Target BSS's Channel = %d, Band = %d\n", - prBssDesc->ucChannelNum, prBssDesc->eBand)); - - nicSwitchChannel(prAdapter, - prBssDesc->eBand, - prBssDesc->ucChannelNum, - 10); - - prJoinInfo->fgIsParameterAdopted = TRUE; - - return; -} /* end of joinAdoptParametersFromPeerBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will adopt the parameters from current associated BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinAdoptParametersFromCurrentBss ( - IN P_ADAPTER_T prAdapter - ) -{ - //P_JOIN_INFO_T prJoinInfo = &prAdapter->rJoinInfo; - P_BSS_INFO_T prBssInfo; - - - ASSERT(prAdapter); - prBssInfo = &prAdapter->rBssInfo; - - //4 <1> Adopt current BSS' PHY TYPE - prAdapter->eCurrentPhyType = prBssInfo->ePhyType; - - //4 <2> Adopt current BSS' Frequency(Band/Channel) - DBGLOG(JOIN, INFO, ("Current BSS's Channel = %d, Band = %d\n", - prBssInfo->ucChnl, prBssInfo->eBand)); - - nicSwitchChannel(prAdapter, - prBssInfo->eBand, - prBssInfo->ucChnl, - 10); - return; -} /* end of joinAdoptParametersFromCurrentBss() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will update all the SW variables and HW MCR registers after -* the association with target BSS. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -joinComplete ( - IN P_ADAPTER_T prAdapter - ) -{ - P_JOIN_INFO_T prJoinInfo; - P_BSS_DESC_T prBssDesc; - P_PEER_BSS_INFO_T prPeerBssInfo; - P_BSS_INFO_T prBssInfo; - P_CONNECTION_SETTINGS_T prConnSettings; - P_STA_RECORD_T prStaRec; - P_TX_CTRL_T prTxCtrl; -#if CFG_SUPPORT_802_11D - P_IE_COUNTRY_T prIECountry; -#endif - - DEBUGFUNC("joinComplete"); - - - ASSERT(prAdapter); - prJoinInfo = &prAdapter->rJoinInfo; - prBssDesc = prJoinInfo->prBssDesc; - prPeerBssInfo = &prAdapter->rPeerBssInfo; - prBssInfo = &prAdapter->rBssInfo; - prConnSettings = &prAdapter->rConnSettings; - prTxCtrl = &prAdapter->rTxCtrl; - -//4 <1> Update Connecting & Connected Flag of BSS_DESC_T. - /* Remove previous AP's Connection Flags if have */ - scanRemoveConnectionFlagOfBssDescByBssid(prAdapter, prBssInfo->aucBSSID); - - prBssDesc->fgIsConnected = TRUE; /* Mask as Connected */ - - if (prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): This is for the case of Passive Scan and the target BSS didn't - * broadcast SSID on its Beacon Frame. - */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prAdapter->rConnSettings.aucSSID, - prAdapter->rConnSettings.ucSSIDLen); - - if (prBssDesc->ucSSIDLen) { - prBssDesc->fgIsHiddenSSID = FALSE; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - DBGLOG(JOIN, INFO, ("Hidden SSID! - Update SSID : %s\n", prBssDesc->aucSSID)); - } - - -//4 <2> Update BSS_INFO_T from BSS_DESC_T - //4 <2.A> PHY Type - prBssInfo->ePhyType = prBssDesc->ePhyType; - - //4 <2.B> BSS Type - prBssInfo->eBSSType = BSS_TYPE_INFRASTRUCTURE; - - //4 <2.C> BSSID - COPY_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID); - - DBGLOG(JOIN, INFO, ("JOIN to BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID))); - - - //4 <2.D> SSID - COPY_SSID(prBssInfo->aucSSID, - prBssInfo->ucSSIDLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - //4 <2.E> Channel / Band information. - prBssInfo->eBand = prBssDesc->eBand; - prBssInfo->ucChnl = prBssDesc->ucChannelNum; - - //4 <2.F> RSN/WPA information. - secFsmRunEventStart(prAdapter); - prBssInfo->u4RsnSelectedPairwiseCipher = prBssDesc->u4RsnSelectedPairwiseCipher; - prBssInfo->u4RsnSelectedGroupCipher = prBssDesc->u4RsnSelectedGroupCipher; - prBssInfo->u4RsnSelectedAKMSuite = prBssDesc->u4RsnSelectedAKMSuite; - - if (secRsnKeyHandshakeEnabled()) { - prBssInfo->fgIsWPAorWPA2Enabled = TRUE; - } - else { - prBssInfo->fgIsWPAorWPA2Enabled = FALSE; - } - - //4 <2.G> Beacon interval. - prBssInfo->u2BeaconInterval = prBssDesc->u2BeaconInterval; - - //4 <2.H> DTIM period. - prBssInfo->ucDtimPeriod = prBssDesc->ucDTIMPeriod; - - //4 <2.I> ERP Information - if ((prBssInfo->ePhyType == PHY_TYPE_ERP_INDEX) && // Our BSS's PHY_TYPE is ERP now. - (prBssDesc->fgIsERPPresent)) { - - prBssInfo->fgIsERPPresent = TRUE; - prBssInfo->ucERP = prBssDesc->ucERP; /* Save the ERP for later check */ - } - else { /* Some AP, may send ProbeResp without ERP IE. Thus prBssDesc->fgIsERPPresent is FALSE. */ - prBssInfo->fgIsERPPresent = FALSE; - prBssInfo->ucERP = 0; - } - -#if CFG_SUPPORT_802_11D - //4 <2.J> Country inforamtion of the associated AP - if (prConnSettings->fgMultiDomainCapabilityEnabled) { - DOMAIN_INFO_ENTRY rDomainInfo; - if (domainGetDomainInfoByScanResult(prAdapter, &rDomainInfo)) { - if (prBssDesc->prIECountry) { - prIECountry = prBssDesc->prIECountry; - - domainParseCountryInfoElem(prIECountry, &prBssInfo->rDomainInfo); - - /* use the domain get from the BSS info */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, prBssInfo->rDomainInfo.u2CountryCode, FALSE); - } else { - /* use the domain get from the scan result */ - prBssInfo->fgIsCountryInfoPresent = TRUE; - nicSetupOpChnlList(prAdapter, rDomainInfo.u2CountryCode, FALSE); - } - } - } -#endif - - //4 <2.K> Signal Power of the associated AP - prBssInfo->rRcpi = prBssDesc->rRcpi; - prBssInfo->rRssi = RCPI_TO_dBm(prBssInfo->rRcpi); - GET_CURRENT_SYSTIME(&prBssInfo->rRssiLastUpdateTime); - - //4 <2.L> Capability Field of the associated AP - prBssInfo->u2CapInfo = prBssDesc->u2CapInfo; - - DBGLOG(JOIN, INFO, ("prBssInfo-> fgIsERPPresent = %d, ucERP = %02x, rRcpi = %d, rRssi = %ld\n", - prBssInfo->fgIsERPPresent, prBssInfo->ucERP, prBssInfo->rRcpi, prBssInfo->rRssi)); - - -//4 <3> Update BSS_INFO_T from PEER_BSS_INFO_T & NIC RATE FUNC - //4 <3.A> Association ID - prBssInfo->u2AssocId = prPeerBssInfo->u2AssocId; - - //4 <3.B> WMM Infomation - if (prAdapter->fgIsEnableWMM && - (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_SUPPORT_WMM)) { - - prBssInfo->fgIsWmmAssoc = TRUE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC3; - - qosWmmInfoInit(&prBssInfo->rWmmInfo, (prBssInfo->ePhyType == PHY_TYPE_HR_DSSS_INDEX) ? TRUE : FALSE); - - if (prPeerBssInfo->rWmmInfo.ucWmmFlag & WMM_FLAG_AC_PARAM_PRESENT) { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T)); - } - else { - kalMemCopy(&prBssInfo->rWmmInfo, - &prPeerBssInfo->rWmmInfo, - sizeof(WMM_INFO_T) - sizeof(prPeerBssInfo->rWmmInfo.arWmmAcParams)); - } - } - else { - prBssInfo->fgIsWmmAssoc = FALSE; - prTxCtrl->rTxQForVoipAccess = TXQ_AC1; - - kalMemZero(&prBssInfo->rWmmInfo, sizeof(WMM_INFO_T)); - } - - - //4 <3.C> Operational Rate Set & BSS Basic Rate Set - prBssInfo->u2OperationalRateSet = prPeerBssInfo->u2OperationalRateSet; - prBssInfo->u2BSSBasicRateSet = prPeerBssInfo->u2BSSBasicRateSet; - - - //4 <3.D> Short Preamble - if (prBssInfo->fgIsERPPresent) { - - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * TRUE FALSE TRUE FALSE - * FALSE FALSE FALSE FALSE(shouldn't have such case, use the AssocResp) - * FALSE FALSE TRUE FALSE - * TRUE TRUE FALSE TRUE(follow ERP) - * TRUE TRUE TRUE FALSE(follow ERP) - * FALSE TRUE FALSE FALSE(shouldn't have such case, and we should set to FALSE) - * FALSE TRUE TRUE FALSE(we should set to FALSE) - */ - if ((prPeerBssInfo->fgIsShortPreambleAllowed) && - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_SHORT) || /* Short Preamble Option Enable is TRUE */ - ((prConnSettings->ePreambleType == PREAMBLE_TYPE_AUTO) && - (prBssDesc->u2CapInfo & CAP_INFO_SHORT_PREAMBLE)))) { - - prBssInfo->fgIsShortPreambleAllowed = TRUE; - - if (prBssInfo->ucERP & ERP_INFO_BARKER_PREAMBLE_MODE) { - prBssInfo->fgUseShortPreamble = FALSE; - } - else { - prBssInfo->fgUseShortPreamble = TRUE; - } - } - else { - prBssInfo->fgIsShortPreambleAllowed = FALSE; - prBssInfo->fgUseShortPreamble = FALSE; - } - } - else { - /* NOTE(Kevin 2007/12/24): Truth Table. - * Short Preamble Bit in - * Final Driver Setting(Short) - * TRUE FALSE FALSE - * FALSE FALSE FALSE - * TRUE TRUE TRUE - * FALSE TRUE(status success) TRUE - * --> Honor the result of prPeerBssInfo. - */ - - prBssInfo->fgIsShortPreambleAllowed = prBssInfo->fgUseShortPreamble = - prPeerBssInfo->fgIsShortPreambleAllowed; - } - - DBGLOG(JOIN, INFO, ("prBssInfo->fgIsShortPreambleAllowed = %d, prBssInfo->fgUseShortPreamble = %d\n", - prBssInfo->fgIsShortPreambleAllowed, prBssInfo->fgUseShortPreamble)); - - - //4 <3.E> Short Slot Time - prBssInfo->fgUseShortSlotTime = - prPeerBssInfo->fgUseShortSlotTime; /* AP support Short Slot Time */ - - DBGLOG(JOIN, INFO, ("prBssInfo->fgUseShortSlotTime = %d\n", - prBssInfo->fgUseShortSlotTime)); - - nicSetSlotTime(prAdapter, - prBssInfo->ePhyType, - ((prConnSettings->fgIsShortSlotTimeOptionEnable && - prBssInfo->fgUseShortSlotTime) ? TRUE : FALSE)); - - - //4 <3.F> Update Tx Rate for Control Frame - bssUpdateTxRateForControlFrame(prAdapter); - - - //4 <3.G> Save the available Auth Types during Roaming (Design for Fast BSS Transition). - //if (prAdapter->fgIsEnableRoaming) /* NOTE(Kevin): Always prepare info for roaming */ - { - - if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_OPEN_SYSTEM) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_OPEN_SYSTEM; - } - else if (prJoinInfo->ucCurrAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) { - prJoinInfo->ucRoamingAuthTypes |= AUTH_TYPE_SHARED_KEY; - } - - prBssInfo->ucRoamingAuthTypes = prJoinInfo->ucRoamingAuthTypes; - - - /* Set the stable time of the associated BSS. We won't do roaming decision - * during the stable time. - */ - SET_EXPIRATION_TIME(prBssInfo->rRoamingStableExpirationTime, - SEC_TO_SYSTIME(ROAMING_STABLE_TIMEOUT_SEC)); - } - - - //4 <3.H> Update Parameter for TX Fragmentation Threshold -#if CFG_TX_FRAGMENT - txFragInfoUpdate(prAdapter); -#endif /* CFG_TX_FRAGMENT */ - - -//4 <4> Update STA_RECORD_T - /* Get a Station Record if possible */ - prStaRec = staRecGetStaRecordByAddr(prAdapter, - prBssDesc->aucBSSID); - - if (prStaRec) { - UINT_16 u2OperationalRateSet, u2DesiredRateSet; - - //4 <4.A> Desired Rate Set - u2OperationalRateSet = (rPhyAttributes[prBssInfo->ePhyType].u2SupportedRateSet & - prBssInfo->u2OperationalRateSet); - - u2DesiredRateSet = (u2OperationalRateSet & prConnSettings->u2DesiredRateSet); - if (u2DesiredRateSet) { - prStaRec->u2DesiredRateSet = u2DesiredRateSet; - } - else { - /* For Error Handling - The Desired Rate Set is not covered in Operational Rate Set. */ - prStaRec->u2DesiredRateSet = u2OperationalRateSet; - } - - /* Try to set the best initial rate for this entry */ - if (!rateGetBestInitialRateIndex(prStaRec->u2DesiredRateSet, - prStaRec->rRcpi, - &prStaRec->ucCurrRate1Index)) { - - if (!rateGetLowestRateIndexFromRateSet(prStaRec->u2DesiredRateSet, - &prStaRec->ucCurrRate1Index)) { - ASSERT(0); - } - } - - DBGLOG(JOIN, INFO, ("prStaRec->ucCurrRate1Index = %d\n", - prStaRec->ucCurrRate1Index)); - - //4 <4.B> Preamble Mode - prStaRec->fgIsShortPreambleOptionEnable = - prBssInfo->fgUseShortPreamble; - - //4 <4.C> QoS Flag - prStaRec->fgIsQoS = prBssInfo->fgIsWmmAssoc; - } -#if DBG - else { - ASSERT(0); - } -#endif /* DBG */ - - -//4 <5> Update NIC - //4 <5.A> Update BSSID & Operation Mode - nicSetupBSS(prAdapter, prBssInfo); - - //4 <5.B> Update WLAN Table. - if (nicSetHwBySta(prAdapter, prStaRec) == FALSE) { - ASSERT(FALSE); - } - - //4 <5.C> Update Desired Rate Set for BT. -#if CFG_TX_FRAGMENT - if (prConnSettings->fgIsEnableTxAutoFragmentForBT) { - txRateSetInitForBT(prAdapter, prStaRec); - } -#endif /* CFG_TX_FRAGMENT */ - - //4 <5.D> TX AC Parameter and TX/RX Queue Control - if (prBssInfo->fgIsWmmAssoc) { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, FALSE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - qosUpdateWMMParametersAndAssignAllowedACI(prAdapter, &prBssInfo->rWmmInfo); - } - else { - -#if CFG_TX_AGGREGATE_HW_FIFO - nicTxAggregateTXQ(prAdapter, TRUE); -#endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxNonQoSAssignDefaultAdmittedTXQ(prAdapter); - - nicTxNonQoSUpdateTXQParameters(prAdapter, - prBssInfo->ePhyType); - } - -#if CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN - { - prTxCtrl->fgBlockTxDuringJoin = FALSE; - - #if !CFG_TX_AGGREGATE_HW_FIFO /* TX FIFO AGGREGATE already do flush once */ - nicTxFlushStopQueues(prAdapter, (UINT_8)TXQ_DATA_MASK, (UINT_8)NULL); - #endif /* CFG_TX_AGGREGATE_HW_FIFO */ - - nicTxRetransmitOfSendWaitQue(prAdapter); - - if (prTxCtrl->fgIsPacketInOsSendQueue) { - nicTxRetransmitOfOsSendQue(prAdapter); - } - - #if CFG_SDIO_TX_ENHANCE - halTxLeftClusteredMpdu(prAdapter); - #endif /* CFG_SDIO_TX_ENHANCE */ - - } -#endif /* CFG_TX_STOP_WRITE_TX_FIFO_UNTIL_JOIN */ - - -//4 <6> Setup CONNECTION flag. - prAdapter->eConnectionState = MEDIA_STATE_CONNECTED; - prAdapter->eConnectionStateIndicated = MEDIA_STATE_CONNECTED; - - if (prJoinInfo->fgIsReAssoc) { - prAdapter->fgBypassPortCtrlForRoaming = TRUE; - } - else { - prAdapter->fgBypassPortCtrlForRoaming = FALSE; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - (PVOID)NULL, - 0); - - return; -} /* end of joinComplete() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/scan.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/scan.c deleted file mode 100755 index 50e970491865..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/scan.c +++ /dev/null @@ -1,3036 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/scan.c#1 $ -*/ - -/*! \file "scan.c" - \brief This file defines the scan profile and the processing function of - scan result for SCAN Module. - - The SCAN Profile selection is part of SCAN MODULE and responsible for defining - SCAN Parameters - e.g. MIN_CHANNEL_TIME, number of scan channels. - In this file we also define the process of SCAN Result including adding, searching - and removing SCAN record from the list. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: scan.c $ -** -** 12 25 2012 cp.wu -** [WCXRP00001289] [MT6620 Wi-Fi][Driver] backup 2 flags for BSS-DESC to improve AP-IOT compatibility against APs suddenly reset timestamp but keep clients connected -** backup fgIsConnected/fgIsConnecting flags for AP which resets its timestamp without kicking out clients. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 25 2012 cp.wu - * [WCXRP00001258] [MT6620][MT5931][MT6628][Driver] Do not use stale scan result for deciding connection target - * drop off scan result which is older than 5 seconds when choosing which BSS to join - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 16 2012 cp.wu - * [WCXRP00001169] [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * correct typo. - * - * 01 16 2012 cp.wu - * [MT6620 Wi-Fi][Driver] API and behavior modification for preferred band configuration with corresponding network configuration - * add wlanSetPreferBandByNetwork() for glue layer to invoke for setting preferred band configuration corresponding to network type. - * - * 12 05 2011 cp.wu - * [WCXRP00001131] [MT6620 Wi-Fi][Driver][AIS] Implement connect-by-BSSID path - * add CONNECT_BY_BSSID policy - * - * 11 23 2011 cp.wu - * [WCXRP00001123] [MT6620 Wi-Fi][Driver] Add option to disable beacon content change detection - * add compile option to disable beacon content change detection. - * - * 11 04 2011 cp.wu - * [WCXRP00001085] [MT6628 Wi-Fi][Driver] deprecate old BSS-DESC if timestamp is reset with received beacon/probe response frames - * deprecate old BSS-DESC when timestamp in received beacon/probe response frames showed a smaller value than before - * - * 10 11 2011 cm.chang - * [WCXRP00001031] [All Wi-Fi][Driver] Check HT IE length to avoid wrong SCO parameter - * Ignore HT OP IE if its length field is not valid - * - * 09 30 2011 cp.wu - * [WCXRP00001021] [MT5931][Driver] Correct scan result generation for conversion between BSS type and operation mode - * correct type casting issue. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 10 2011 cp.wu - * [WCXRP00000922] [MT6620 Wi-Fi][Driver] traverse whole BSS-DESC list for removing - * traverse whole BSS-DESC list because BSSID is not unique anymore. - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * for multiple BSS descriptior detecting issue: - * 1) check BSSID for infrastructure network - * 2) check SSID for AdHoc network - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * check for BSSID for beacons used to update DTIM - * - * 07 12 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * do not check BSS descriptor for connected flag due to linksys's hidden SSID will use another BSS descriptor and never connected - * - * 07 11 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * just pass beacons with the same BSSID. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 28 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * Do not check for SSID as beacon content change due to the existence of single BSSID with multiple SSID AP configuration - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * remove unused temporal variable reference. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 06 02 2011 cp.wu - * [WCXRP00000757] [MT6620 Wi-Fi][Driver][SCN] take use of RLM API to filter out BSS in disallowed channels - * filter out BSS in disallowed channel by - * 1. do not add to scan result array if BSS is at disallowed channel - * 2. do not allow to search for BSS-DESC in disallowed channels - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Refine range of valid channel number - * - * 05 02 2011 cp.wu - * [MT6620 Wi-Fi][Driver] Take parsed result for channel information instead of hardware channel number passed from firmware domain - * take parsed result for generating scanning result with channel information. - * - * 05 02 2011 cm.chang - * [WCXRP00000691] [MT6620 Wi-Fi][Driver] Workaround about AP's wrong HT capability IE to have wrong channel number - * Check if channel is valided before record ing BSS channel - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 25 2011 yuche.tsai - * NULL - * Always update Bss Type, for Bss Type for P2P Network is changing every time. - * - * 03 23 2011 yuche.tsai - * NULL - * Fix concurrent issue when AIS scan result would overwrite p2p scan result. - * - * 03 14 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * filtering out other BSS coming from adjacent channels - * - * 03 11 2011 chinglan.wang - * [WCXRP00000537] [MT6620 Wi-Fi][Driver] Can not connect to 802.11b/g/n mixed AP with WEP security. - * . - * - * 03 11 2011 cp.wu - * [WCXRP00000535] [MT6620 Wi-Fi][Driver] Fixed channel operation when AIS and Tethering are operating concurrently - * When fixed channel operation is necessary, AIS-FSM would scan and only connect for BSS on the specific channel - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * implement beacon change detection by checking SSID and supported rate. - * - * 02 22 2011 yuche.tsai - * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue - * Fix WSC big endian issue. - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 21 2011 cp.wu - * [WCXRP00000380] [MT6620 Wi-Fi][Driver] SSID information should come from buffered BSS_DESC_T rather than using beacon-carried information - * SSID should come from buffered prBssDesc rather than beacon-carried information - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Fix compile error. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Memfree for P2P Descriptor & P2P Descriptor List. - * - * 01 14 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * Free P2P Descriptor List & Descriptor under BSS Descriptor. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * while being unloaded, clear all pending interrupt then set LP-own to firmware - * - * 12 21 2010 cp.wu - * [WCXRP00000280] [MT6620 Wi-Fi][Driver] Enable BSS selection with best RCPI policy in SCN module - * SCN: enable BEST RSSI selection policy support - * - * 11 29 2010 cp.wu - * [WCXRP00000210] [MT6620 Wi-Fi][Driver][FW] Set RCPI value in STA_REC for initial TX rate selection of auto-rate algorithm - * update ucRcpi of STA_RECORD_T for AIS when - * 1) Beacons for IBSS merge is received - * 2) Associate Response for a connecting peer is received - * - * 11 03 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Refine the HT rate disallow TKIP pairwise cipher . - * - * 10 12 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * trust HT IE if available for 5GHz band - * - * 10 11 2010 cp.wu - * [WCXRP00000091] [MT6620 Wi-Fi][Driver] Add scanning logic to filter out beacons which is received on the folding frequency - * add timing and strenght constraint for filtering out beacons with same SSID/TA but received on different channels - * - * 10 08 2010 wh.su - * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine - * update the frog's new p2p state machine. - * - * 10 01 2010 yuche.tsai - * NULL - * [MT6620 P2P] Fix Big Endian Issue when parse P2P device name TLV. - * - * 09 24 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate unused variables which lead gcc to argue - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * When indicate scan result, append IE buffer information in the scan result. - * - * 09 03 2010 yuche.tsai - * NULL - * 1. Update Beacon RX count when running SLT. - * 2. Ignore Beacon when running SLT, would not update information from Beacon. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 29 2010 yuche.tsai - * NULL - * 1. Fix P2P Descriptor List to be a link list, to avoid link corrupt after Bss Descriptor Free. - * 2.. Fix P2P Device Name Length BE issue. - * - * 08 23 2010 yuche.tsai - * NULL - * Add P2P Device Found Indication to supplicant - * - * 08 20 2010 cp.wu - * NULL - * reset BSS_DESC_T variables before parsing IE due to peer might have been reconfigured. - * - * 08 20 2010 yuche.tsai - * NULL - * Workaround for P2P Descriptor Infinite loop issue. - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 16 2010 yuche.tsai - * NULL - * Modify code of processing Probe Resonse frame for P2P. - * - * 08 12 2010 yuche.tsai - * NULL - * Add function to get P2P descriptor of BSS descriptor directly. - * - * 08 11 2010 yuche.tsai - * NULL - * Modify Scan result processing for P2P module. - * - * 08 05 2010 yuche.tsai - * NULL - * Update P2P Device Discovery result add function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add support for Probe Request & Response parsing. - * - * 07 21 2010 cp.wu - * - * 1) change BG_SCAN to ONLINE_SCAN for consistent term - * 2) only clear scanning result when scan is permitted to do - * - * 07 21 2010 yuche.tsai - * - * Fix compile error for SCAN module while disabling P2P feature. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 wh.su - * - * update for security supporting. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct BSS_DESC_T initialization after allocated. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan uninitialization procedure - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * if beacon/probe-resp is received in 2.4GHz bands and there is ELEM_ID_DS_PARAM_SET IE available, - * trust IE instead of RMAC information - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 28 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * send MMPDU in basic rate. - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * modify Beacon/ProbeResp to complete parsing, - * because host software has looser memory usage restriction - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * integrate . - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Update P2P Function call. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * RSN/PRIVACY compilation flag awareness correction - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * specify correct value for management frames. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 18 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * migration from MT6620 firmware. - * - * 06 17 2010 yuche.tsai - * [WPD00003839][MT6620 5931][P2P] Feature migration - * Fix compile error when enable P2P function. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct when ADHOC support is turned on. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan.c. - * - * 06 04 2010 george.huang - * [BORA00000678][MT6620]WiFi LP integration - * [PM] Support U-APSD for STA mode - * - * 05 28 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * adding the TKIP disallow join a HT AP code. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add more chance of JOIN retry for BG_SCAN - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 04 29 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * adjsut the pre-authentication code. - * - * 04 27 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add Set Slot Time and Beacon Timeout Support for AdHoc Mode - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 19 2010 kevin.huang - * [BORA00000714][WIFISYS][New Feature]Beacon Timeout Support - * Add Beacon Timeout Support and will send Null frame to diagnose connection - * - * 04 13 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add new HW CH macro support - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 29 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * let the rsn wapi IE always parsing. - * - * 03 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Not carry HT cap when being associated with b/g only AP - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Solve the compile warning for 'return non-void' function - * - * 03 16 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Add AdHoc Mode - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * - * * * * * * * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Fix No PKT_INFO_T issue - * - * 02 26 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Update outgoing ProbeRequest Frame's TX data rate - * - * 02 23 2010 wh.su - * [BORA00000592][MT6620 Wi-Fi] Adding the security related code for driver - * refine the scan procedure, reduce the WPA and WAPI IE parsing, and move the parsing to the time for join. - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 02 04 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 22 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Support protection and bandwidth switch - * - * 01 20 2010 kevin.huang - * [BORA00000569][WIFISYS] Phase 2 Integration Test - * Add PHASE_2_INTEGRATION_WORK_AROUND and CFG_SUPPORT_BCM flags - * - * 01 11 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add Deauth and Disassoc Handler - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * - * Refine Beacon processing, add read RF channel from RX Status - * - * 01 04 2010 tehuang.liu - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * For working out the first connection Chariot-verified version - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 12 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Modify u2EstimatedExtraIELen for probe request - * - * Dec 9 2009 mtk01104 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add HT cap IE to probe request - * - * Dec 7 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix lint warning - * - * - * Dec 3 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update the process of SCAN Result by adding more Phy Attributes - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function and code for meet the new define - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Rename u4RSSI to i4RSSI - * - * Nov 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Report event of scan result to host - * - * Nov 26 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix SCAN Record update - * - * Nov 24 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Revise MGMT Handler with Retain Status and Integrate with TXM - * - * Nov 23 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add (Ext)Support Rate Set IE to ProbeReq - * - * Nov 20 2009 mtk02468 - * [BORA00000337] To check in codes for FPGA emulation - * Removed the use of SW_RFB->u2FrameLength - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix uninitial aucMacAddress[] for ProbeReq - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add scanSearchBssDescByPolicy() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Add Send Probe Request Frame - * - * Oct 30 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define REPLICATED_BEACON_TIME_THRESHOLD (3000) -#define REPLICATED_BEACON_FRESH_PERIOD (10000) -#define REPLICATED_BEACON_STRENGTH_THRESHOLD (32) - -#define ROAMING_NO_SWING_RCPI_STEP (10) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to initialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnInit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBSSDesc; - PUINT_8 pucBSSBuff; - UINT_32 i; - - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - pucBSSBuff = &prScanInfo->aucScanBuffer[0]; - - - DBGLOG(SCN, INFO, ("->scnInit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - LINK_INITIALIZE(&prScanInfo->rPendingMsgList); - - - //4 <2> Reset link list of BSS_DESC_T - kalMemZero((PVOID) pucBSSBuff, SCN_MAX_BUFFER_SIZE); - - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - for (i = 0; i < CFG_MAX_NUM_BSS_LIST; i++) { - - prBSSDesc = (P_BSS_DESC_T)pucBSSBuff; - - LINK_INSERT_TAIL(&prScanInfo->rFreeBSSDescList, &prBSSDesc->rLinkEntry); - - pucBSSBuff += ALIGN_4(sizeof(BSS_DESC_T)); - } - /* Check if the memory allocation consist with this initialization function */ - ASSERT(((UINT_32)pucBSSBuff - (UINT_32)&prScanInfo->aucScanBuffer[0]) == SCN_MAX_BUFFER_SIZE); - - /* reset freest channel information */ - prScanInfo->fgIsSparseChannelValid = FALSE; - - return; -} /* end of scnInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used by SCN to uninitialize its variables -* -* @param (none) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnUninit ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - DBGLOG(SCN, INFO, ("->scnUninit()\n")); - - //4 <1> Reset STATE and Message List - prScanInfo->eCurrentState = SCAN_STATE_IDLE; - - prScanInfo->rLastScanCompletedTime = (OS_SYSTIME)0; - - /* NOTE(Kevin): Check rPendingMsgList ? */ - - //4 <2> Reset link list of BSS_DESC_T - LINK_INITIALIZE(&prScanInfo->rFreeBSSDescList); - LINK_INITIALIZE(&prScanInfo->rBSSDescList); - - return; -} /* end of scnUninit() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - return scanSearchBssDescByBssidAndSsid(prAdapter, - aucBSSID, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given BSSID -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByBssidAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - else { - /* 20120206 frog: Equal BSSID but not SSID, SSID not hidden, SSID must be updated. */ - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - return prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTA ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchBssDescByTAAndSsid(prAdapter, - aucSrcAddr, - FALSE, - NULL); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to given Transmitter Address. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucSrcAddr Given Source Address(TA). -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByTAAndSsid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc; - P_BSS_DESC_T prDstBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucSrcAddr, aucSrcAddr)) { - if(fgCheckSsid == FALSE || prSsid == NULL) { - return prBssDesc; - } - else { - if(EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prSsid->aucSsid, - prSsid->u4SsidLen)) { - return prBssDesc; - } - else if(prDstBssDesc == NULL && prBssDesc->fgIsHiddenSSID == TRUE) { - prDstBssDesc = prBssDesc; - } - } - } - } - - return prDstBssDesc; - -} /* end of scanSearchBssDescByTA() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDesc ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[] - ) -{ - return scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - aucBSSID, - aucSrcAddr, - FALSE, - NULL); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Find the corresponding BSS Descriptor according to -* given eBSSType, BSSID and Transmitter Address -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBSSType BSS Type of incoming Beacon/ProbeResp frame. -* @param[in] aucBSSID Given BSSID of Beacon/ProbeResp frame. -* @param[in] aucSrcAddr Given source address (TA) of Beacon/ProbeResp frame. -* @param[in] fgCheckSsid Need to check SSID or not. (for multiple SSID with single BSSID cases) -* @param[in] prSsid Specified SSID -* -* @return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchExistingBssDescWithSsid ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BSS_TYPE_T eBSSType, - IN UINT_8 aucBSSID[], - IN UINT_8 aucSrcAddr[], - IN BOOLEAN fgCheckSsid, - IN P_PARAM_SSID_T prSsid - ) -{ - P_SCAN_INFO_T prScanInfo; - P_BSS_DESC_T prBssDesc, prIBSSBssDesc; - - ASSERT(prAdapter); - ASSERT(aucSrcAddr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - - switch (eBSSType) { - case BSS_TYPE_P2P_DEVICE: - fgCheckSsid = FALSE; - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_BOW_DEVICE: - { - prBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - - /* if (eBSSType == prBssDesc->eBSSType) */ - - return prBssDesc; - } - - case BSS_TYPE_IBSS: - { - prIBSSBssDesc = scanSearchBssDescByBssidAndSsid(prAdapter, aucBSSID, fgCheckSsid, prSsid); - prBssDesc = scanSearchBssDescByTAAndSsid(prAdapter, aucSrcAddr, fgCheckSsid, prSsid); - - /* NOTE(Kevin): - * Rules to maintain the SCAN Result: - * For AdHoc - - * CASE I We have TA1(BSSID1), but it change its BSSID to BSSID2 - * -> Update TA1 entry's BSSID. - * CASE II We have TA1(BSSID1), and get TA1(BSSID1) again - * -> Update TA1 entry's contain. - * CASE III We have a SCAN result TA1(BSSID1), and TA2(BSSID2). Sooner or - * later, TA2 merge into TA1, we get TA2(BSSID1) - * -> Remove TA2 first and then replace TA1 entry's TA with TA2, Still have only one entry of BSSID. - * CASE IV We have a SCAN result TA1(BSSID1), and another TA2 also merge into BSSID1. - * -> Replace TA1 entry's TA with TA2, Still have only one entry. - * CASE V New IBSS - * -> Add this one to SCAN result. - */ - if (prBssDesc) { - if ((!prIBSSBssDesc) || // CASE I - (prBssDesc == prIBSSBssDesc)) { // CASE II - - return prBssDesc; - } - else { // CASE III - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - - - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - return prIBSSBssDesc; - } - } - - if (prIBSSBssDesc) { // CASE IV - - return prIBSSBssDesc; - } - - // CASE V - break; // Return NULL; - } - - default: - break; - } - - - return (P_BSS_DESC_T)NULL; - -} /* end of scanSearchExistingBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given Remove Policy. -* -* @param[in] u4RemovePolicy Remove Policy. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescsByPolicy ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4RemovePolicy - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - //DBGLOG(SCN, TRACE, ("Before Remove - Number Of SCAN Result = %ld\n", - //prBSSDescList->u4NumElem)); - - if (u4RemovePolicy & SCN_RM_POLICY_TIMEOUT) { - P_BSS_DESC_T prBSSDescNext; - OS_SYSTIME rCurrentTime; - - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - //DBGLOG(SCN, TRACE, ("Remove TIMEOUT BSS DESC(%#x): MAC: "MACSTR", Current Time = %08lx, Update Time = %08lx\n", - //prBssDesc, MAC2STR(prBssDesc->aucBSSID), rCurrentTime, prBssDesc->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_OLDEST_HIDDEN) { - P_BSS_DESC_T prBssDescOldest = (P_BSS_DESC_T)NULL; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if (!prBssDesc->fgIsHiddenSSID) { - continue; - } - - if (!prBssDescOldest) { /* 1st element */ - prBssDescOldest = prBssDesc; - continue; - } - - if (TIME_BEFORE(prBssDesc->rUpdateTime, prBssDescOldest->rUpdateTime)) { - prBssDescOldest = prBssDesc; - } - } - - if (prBssDescOldest) { - - //DBGLOG(SCN, TRACE, ("Remove OLDEST HIDDEN BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescOldest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescOldest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_SMART_WEAKEST) { - P_BSS_DESC_T prBssDescWeakest = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBssDescWeakestSameSSID = (P_BSS_DESC_T)NULL; - UINT_32 u4SameSSIDCount = 0; - - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - if ((!prBssDesc->fgIsHiddenSSID) && - (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen))) { - - u4SameSSIDCount++; - - if (!prBssDescWeakestSameSSID) { - prBssDescWeakestSameSSID = prBssDesc; - } - else if (prBssDesc->ucRCPI < prBssDescWeakestSameSSID->ucRCPI) { - prBssDescWeakestSameSSID = prBssDesc; - } - } - - if (!prBssDescWeakest) { /* 1st element */ - prBssDescWeakest = prBssDesc; - continue; - } - - if (prBssDesc->ucRCPI < prBssDescWeakest->ucRCPI) { - prBssDescWeakest = prBssDesc; - } - - } - - if ((u4SameSSIDCount >= SCN_BSS_DESC_SAME_SSID_THRESHOLD) && - (prBssDescWeakestSameSSID)) { - prBssDescWeakest = prBssDescWeakestSameSSID; - } - - if (prBssDescWeakest) { - - //DBGLOG(SCN, TRACE, ("Remove WEAKEST BSS DESC(%#x): MAC: "MACSTR", Update Time = %08lx\n", - //prBssDescOldest, MAC2STR(prBssDescOldest->aucBSSID), prBssDescOldest->rUpdateTime)); - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDescWeakest); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDescWeakest->rLinkEntry); - } - } - else if (u4RemovePolicy & SCN_RM_POLICY_ENTIRE) { - P_BSS_DESC_T prBSSDescNext; - - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if ((u4RemovePolicy & SCN_RM_POLICY_EXCLUDE_CONNECTED) && - (prBssDesc->fgIsConnected || prBssDesc->fgIsConnecting)) { - /* Don't remove the one currently we are connected. */ - continue; - } - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - - } - - return; - -} /* end of scanRemoveBssDescsByPolicy() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given BSSID. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; -} /* end of scanRemoveBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Delete BSS Descriptors from current list according to given band configuration -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] eBand Given band -* @param[in] eNetTypeIndex AIS - Remove IBSS/Infrastructure BSS -* BOW - Remove BOW BSS -* P2P - Remove P2P BSS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveBssDescByBandAndNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_BAND_T eBand, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prBSSDescNext; - BOOLEAN fgToRemove; - - ASSERT(prAdapter); - ASSERT(eBand <= BAND_NUM); - ASSERT(eNetTypeIndex <= NETWORK_TYPE_INDEX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - - if(eBand == BAND_NULL) { - return; /* no need to do anything, keep all scan result */ - } - - /* Check if such BSS Descriptor exists in a valid list */ - LINK_FOR_EACH_ENTRY_SAFE(prBssDesc, prBSSDescNext, prBSSDescList, rLinkEntry, BSS_DESC_T) { - fgToRemove = FALSE; - - if(prBssDesc->eBand == eBand) { - switch (eNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - if((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS)) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_P2P_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - fgToRemove = TRUE; - } - break; - - case NETWORK_TYPE_BOW_INDEX: - if(prBssDesc->eBSSType == BSS_TYPE_BOW_DEVICE) { - fgToRemove = TRUE; - } - break; - - default: - ASSERT(0); - break; - } - } - - if(fgToRemove == TRUE) { - /* Remove this BSS Desc from the BSS Desc list */ - LINK_REMOVE_KNOWN_ENTRY(prBSSDescList, prBssDesc); - - /* Return this BSS Desc to the free BSS Desc list. */ - LINK_INSERT_TAIL(prFreeBSSDescList, &prBssDesc->rLinkEntry); - } - } - - return; -} /* end of scanRemoveBssDescByBand() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear the CONNECTION FLAG of a specified BSS Descriptor. -* -* @param[in] aucBSSID Given BSSID. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -scanRemoveConnFlagOfBssDescByBssid ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 aucBSSID[] - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prBSSDescList; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - - - ASSERT(prAdapter); - ASSERT(aucBSSID); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - /* Search BSS Desc from current SCAN result list. */ - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - if (EQUAL_MAC_ADDR(prBssDesc->aucBSSID, aucBSSID)) { - prBssDesc->fgIsConnected = FALSE; - prBssDesc->fgIsConnecting = FALSE; - - /* BSSID is not unique, so need to traverse whols link-list */ - } - } - - return; - -} /* end of scanRemoveConnectionFlagOfBssDescByBssid() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate new BSS_DESC_T -* -* @param[in] prAdapter Pointer to the Adapter structure. -* -* @return Pointer to BSS Descriptor, if has free space. NULL, if has no space. -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAllocateBssDesc ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_LINK_T prFreeBSSDescList; - P_BSS_DESC_T prBssDesc; - - - ASSERT(prAdapter); - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - prFreeBSSDescList = &prScanInfo->rFreeBSSDescList; - - LINK_REMOVE_HEAD(prFreeBSSDescList, prBssDesc, P_BSS_DESC_T); - - if (prBssDesc) { - P_LINK_T prBSSDescList; - - kalMemZero(prBssDesc, sizeof(BSS_DESC_T)); - -#if CFG_ENABLE_WIFI_DIRECT - LINK_INITIALIZE(&(prBssDesc->rP2pDeviceList)); - prBssDesc->fgIsP2PPresent = FALSE; -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - prBSSDescList = &prScanInfo->rBSSDescList; - - /* NOTE(Kevin): In current design, this new empty BSS_DESC_T will be - * inserted to BSSDescList immediately. - */ - LINK_INSERT_TAIL(prBSSDescList, &prBssDesc->rLinkEntry); - } - - return prBssDesc; - -} /* end of scanAllocateBssDesc() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This API parses Beacon/ProbeResp frame and insert extracted BSS_DESC_T -* with IEs into prAdapter->rWifiVar.rScanInfo.aucScanBuffer -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prSwRfb Pointer to the receiving frame buffer. -* -* @return Pointer to BSS Descriptor -* NULL if the Beacon/ProbeResp frame is invalid -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanAddToBssDesc ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_BSS_DESC_T prBssDesc = NULL; - UINT_16 u2CapInfo; - ENUM_BSS_TYPE_T eBSSType = BSS_TYPE_INFRASTRUCTURE; - - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset = 0; - - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; - P_IE_SSID_T prIeSsid = (P_IE_SSID_T)NULL; - P_IE_SUPPORTED_RATE_T prIeSupportedRate = (P_IE_SUPPORTED_RATE_T)NULL; - P_IE_EXT_SUPPORTED_RATE_T prIeExtSupportedRate = (P_IE_EXT_SUPPORTED_RATE_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_8 ucHwChannelNum = 0; - UINT_8 ucIeDsChannelNum = 0; - UINT_8 ucIeHtChannelNum = 0; - BOOLEAN fgIsValidSsid = FALSE, fgEscape = FALSE; - PARAM_SSID_T rSsid; - UINT_64 u8Timestamp; - - UINT_32 i; - UINT_8 ucSSIDChar; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2CapInfo, &u2CapInfo); - WLAN_GET_FIELD_64(&prWlanBeaconFrame->au4Timestamp[0], &u8Timestamp); - - // decide BSS type - switch (u2CapInfo & CAP_INFO_BSS_TYPE) { - case CAP_INFO_ESS: - /* It can also be Group Owner of P2P Group. */ - eBSSType = BSS_TYPE_INFRASTRUCTURE; - break; - - case CAP_INFO_IBSS: - eBSSType = BSS_TYPE_IBSS; - break; - case 0: - /* The P2P Device shall set the ESS bit of the Capabilities field in the Probe Response fame to 0 and IBSS bit to 0. (3.1.2.1.1) */ - eBSSType = BSS_TYPE_P2P_DEVICE; - break; - -#if CFG_ENABLE_BT_OVER_WIFI - // @TODO: add rule to identify BOW beacons -#endif - - default: - return NULL; - } - - //4 <1.1> Pre-parse SSID IE - pucIE = prWlanBeaconFrame->aucInfoElem; - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - } - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID) { - ucSSIDChar = '\0'; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsValidSsid = FALSE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (ucSSIDChar) { - fgIsValidSsid = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (fgIsValidSsid == TRUE) { - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - } - fgEscape = TRUE; - break; - default: - break; - } - - if(fgEscape == TRUE) { - break; - } - } - - - //4 <1.2> Replace existing BSS_DESC_T or allocate a new one - prBssDesc = scanSearchExistingBssDescWithSsid(prAdapter, - eBSSType, - (PUINT_8)prWlanBeaconFrame->aucBSSID, - (PUINT_8)prWlanBeaconFrame->aucSrcAddr, - fgIsValidSsid, - fgIsValidSsid == TRUE ? &rSsid : NULL); - - if (prBssDesc == (P_BSS_DESC_T)NULL) { - do { - //4 <1.2.1> First trial of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.2> Hidden is useless, remove the oldest hidden ssid. (for passive scan) - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_OLDEST_HIDDEN)); - - //4 <1.2.3> Second tail of allocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.4> Remove the weakest one - /* If there are more than half of BSS which has the same ssid as connection - * setting, remove the weakest one from them. - * Else remove the weakest one. - */ - scanRemoveBssDescsByPolicy(prAdapter, - (SCN_RM_POLICY_EXCLUDE_CONNECTED | SCN_RM_POLICY_SMART_WEAKEST)); - - //4 <1.2.5> reallocation - prBssDesc = scanAllocateBssDesc(prAdapter); - if (prBssDesc) { - break; - } - - //4 <1.2.6> no space, should not happen - //ASSERT(0); // still no space available ? - return NULL; - - } - while(FALSE); - - } - else { - OS_SYSTIME rCurrentTime; - - // WCXRP00000091 - // if the received strength is much weaker than the original one, - // ignore it due to it might be received on the folding frequency - - GET_CURRENT_SYSTIME(&rCurrentTime); - - prBssDesc->eBSSType = eBSSType; - - if(HIF_RX_HDR_GET_CHNL_NUM(prSwRfb->prHifRxHdr) != prBssDesc->ucChannelNum && - prBssDesc->ucRCPI > prSwRfb->prHifRxHdr->ucRcpi) { - - // for signal strength is too much weaker and previous beacon is not stale - if((prBssDesc->ucRCPI - prSwRfb->prHifRxHdr->ucRcpi) >= REPLICATED_BEACON_STRENGTH_THRESHOLD && - rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_FRESH_PERIOD) { - return prBssDesc; - } - // for received beacons too close in time domain - else if(rCurrentTime - prBssDesc->rUpdateTime <= REPLICATED_BEACON_TIME_THRESHOLD) { - return prBssDesc; - } - } - - /* if Timestamp has been reset, re-generate BSS DESC 'cause AP should have reset itself */ - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && u8Timestamp < prBssDesc->u8TimeStamp.QuadPart) { - BOOLEAN fgIsConnected, fgIsConnecting; - - /* backup 2 flags for APs which reset timestamp unexpectedly */ - fgIsConnected = prBssDesc->fgIsConnected; - fgIsConnecting = prBssDesc->fgIsConnecting; - scanRemoveBssDescByBssid(prAdapter, prBssDesc->aucBSSID); - - prBssDesc = scanAllocateBssDesc(prAdapter); - if (!prBssDesc) { - return NULL; - } - - /* restore */ - prBssDesc->fgIsConnected = fgIsConnected; - prBssDesc->fgIsConnecting = fgIsConnecting; - } - } - - /* NOTE: Keep consistency of Scan Record during JOIN process */ - if (prBssDesc->fgIsConnecting) { - return prBssDesc; - } - - //4 <2> Get information from Fixed Fields - prBssDesc->eBSSType = eBSSType; /* Update the latest BSS type information. */ - - COPY_MAC_ADDR(prBssDesc->aucSrcAddr, prWlanBeaconFrame->aucSrcAddr); - - COPY_MAC_ADDR(prBssDesc->aucBSSID, prWlanBeaconFrame->aucBSSID); - - prBssDesc->u8TimeStamp.QuadPart = u8Timestamp; - - WLAN_GET_FIELD_16(&prWlanBeaconFrame->u2BeaconInterval, &prBssDesc->u2BeaconInterval); - - prBssDesc->u2CapInfo = u2CapInfo; - - - //4 <2.1> Retrieve IEs for later parsing - u2IELength = (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]); - - if (u2IELength > CFG_IE_BUFFER_SIZE) { - u2IELength = CFG_IE_BUFFER_SIZE; - prBssDesc->fgIsIEOverflow = TRUE; - } - else { - prBssDesc->fgIsIEOverflow = FALSE; - } - prBssDesc->u2IELength = u2IELength; - - kalMemCopy(prBssDesc->aucIEBuf, prWlanBeaconFrame->aucInfoElem, u2IELength); - - //4 <2.2> reset prBssDesc variables in case that AP has been reconfigured - prBssDesc->fgIsERPPresent = FALSE; - prBssDesc->fgIsHTPresent = FALSE; - prBssDesc->eSco = CHNL_EXT_SCN; - prBssDesc->fgIEWAPI = FALSE; -#if CFG_RSN_MIGRATION - prBssDesc->fgIERSN = FALSE; -#endif -#if CFG_PRIVACY_MIGRATION - prBssDesc->fgIEWPA = FALSE; -#endif - - - //4 <3.1> Full IE parsing on SW_RFB_T - pucIE = prWlanBeaconFrame->aucInfoElem; - - - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - - switch (IE_ID(pucIE)) { - case ELEM_ID_SSID: - if ((!prIeSsid) && /* NOTE(Kevin): for Atheros IOT #1 */ - (IE_LEN(pucIE) <= ELEM_MAX_LEN_SSID)) { - BOOLEAN fgIsHiddenSSID = FALSE; - ucSSIDChar = '\0'; - - - prIeSsid = (P_IE_SSID_T)pucIE; - - /* D-Link DWL-900AP+ */ - if (IE_LEN(pucIE) == 0) { - fgIsHiddenSSID = TRUE; - } - /* Cisco AP1230A - (IE_LEN(pucIE) == 1) && (SSID_IE(pucIE)->aucSSID[0] == '\0') */ - /* Linksys WRK54G/ASUS WL520g - (IE_LEN(pucIE) == n) && (SSID_IE(pucIE)->aucSSID[0~(n-1)] == '\0') */ - else { - for (i = 0; i < IE_LEN(pucIE); i++) { - ucSSIDChar |= SSID_IE(pucIE)->aucSSID[i]; - } - - if (!ucSSIDChar) { - fgIsHiddenSSID = TRUE; - } - } - - /* Update SSID to BSS Descriptor only if SSID is not hidden. */ - if (!fgIsHiddenSSID) { - COPY_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - SSID_IE(pucIE)->aucSSID, - SSID_IE(pucIE)->ucLength); - } - - } - break; - - case ELEM_ID_SUP_RATES: - /* NOTE(Kevin): Buffalo WHR-G54S's supported rate set IE exceed 8. - * IE_LEN(pucIE) == 12, "1(B), 2(B), 5.5(B), 6(B), 9(B), 11(B), - * 12(B), 18(B), 24(B), 36(B), 48(B), 54(B)" - */ - /* TP-LINK will set extra and incorrect ie with ELEM_ID_SUP_RATES */ - if ((!prIeSupportedRate) && (IE_LEN(pucIE) <= RATE_NUM)) { - prIeSupportedRate = SUP_RATES_IE(pucIE); - } - break; - - case ELEM_ID_DS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_DS_PARAMETER_SET) { - ucIeDsChannelNum = DS_PARAM_IE(pucIE)->ucCurrChnl; - } - break; - - case ELEM_ID_TIM: - if (IE_LEN(pucIE) <= ELEM_MAX_LEN_TIM) { - prBssDesc->ucDTIMPeriod = TIM_IE(pucIE)->ucDTIMPeriod; - } - break; - - case ELEM_ID_IBSS_PARAM_SET: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_IBSS_PARAMETER_SET){ - prBssDesc->u2ATIMWindow = IBSS_PARAM_IE(pucIE)->u2ATIMWindow; - } - break; - -#if 0 //CFG_SUPPORT_802_11D - case ELEM_ID_COUNTRY_INFO: - prBssDesc->prIECountry = (P_IE_COUNTRY_T)pucIE; - break; -#endif - - case ELEM_ID_ERP_INFO: - if (IE_LEN(pucIE) == ELEM_MAX_LEN_ERP) { - prBssDesc->fgIsERPPresent = TRUE; - } - break; - - case ELEM_ID_EXTENDED_SUP_RATES: - if (!prIeExtSupportedRate) { - prIeExtSupportedRate = EXT_SUP_RATES_IE(pucIE); - } - break; - -#if CFG_RSN_MIGRATION - case ELEM_ID_RSN: - if (rsnParseRsnIE(prAdapter, RSN_IE(pucIE), &prBssDesc->rRSNInfo)) { - prBssDesc->fgIERSN = TRUE; - prBssDesc->u2RsnCap = prBssDesc->rRSNInfo.u2RsnCap; - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnCheckPmkidCache(prAdapter, prBssDesc); - } - } - break; -#endif - - case ELEM_ID_HT_CAP: - prBssDesc->fgIsHTPresent = TRUE; - break; - - case ELEM_ID_HT_OP: - if (IE_LEN(pucIE) != (sizeof(IE_HT_OP_T) - 2)) { - break; - } - - if ((((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO) != CHNL_EXT_RES) { - prBssDesc->eSco = (ENUM_CHNL_EXT_T) - (((P_IE_HT_OP_T) pucIE)->ucInfo1 & HT_OP_INFO1_SCO); - } - ucIeHtChannelNum = ((P_IE_HT_OP_T) pucIE)->ucPrimaryChannel; - - break; - -#if CFG_SUPPORT_WAPI - case ELEM_ID_WAPI: - if (wapiParseWapiIE(WAPI_IE(pucIE), &prBssDesc->rIEWAPI)) { - prBssDesc->fgIEWAPI = TRUE; - } - break; -#endif - - case ELEM_ID_VENDOR: // ELEM_ID_P2P, ELEM_ID_WMM - { - UINT_8 ucOuiType; - UINT_16 u2SubTypeVersion; -#if CFG_PRIVACY_MIGRATION - if (rsnParseCheckForWFAInfoElem(prAdapter, pucIE, &ucOuiType, &u2SubTypeVersion)) { - if ((ucOuiType == VENDOR_OUI_TYPE_WPA) && - (u2SubTypeVersion == VERSION_WPA)) { - - if (rsnParseWpaIE(prAdapter, WPA_IE(pucIE), &prBssDesc->rWPAInfo)) { - prBssDesc->fgIEWPA = TRUE; - } - } - } -#endif - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (p2pFuncParseCheckForP2PInfoElem(prAdapter, pucIE, &ucOuiType)) { - if (ucOuiType == VENDOR_OUI_TYPE_P2P) { - prBssDesc->fgIsP2PPresent = TRUE; - } - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } - break; - - /* no default */ - } - } - - - //4 <3.2> Save information from IEs - SSID - /* Update Flag of Hidden SSID for used in SEARCH STATE. */ - - /* NOTE(Kevin): in current driver, the ucSSIDLen == 0 represent - * all cases of hidden SSID. - * If the fgIsHiddenSSID == TRUE, it means we didn't get the ProbeResp with - * valid SSID. - */ - if (prBssDesc->ucSSIDLen == 0) { - prBssDesc->fgIsHiddenSSID = TRUE; - } - else { - prBssDesc->fgIsHiddenSSID = FALSE; - } - - - //4 <3.3> Check rate information in related IEs. - if (prIeSupportedRate || prIeExtSupportedRate) { - rateGetRateSetFromIEs(prIeSupportedRate, - prIeExtSupportedRate, - &prBssDesc->u2OperationalRateSet, - &prBssDesc->u2BSSBasicRateSet, - &prBssDesc->fgIsUnknownBssBasicRate); - } - - - //4 <4> Update information from HIF RX Header - { - prHifRxHdr = prSwRfb->prHifRxHdr; - - ASSERT(prHifRxHdr); - - //4 <4.1> Get TSF comparison result - prBssDesc->fgIsLargerTSF = HIF_RX_HDR_GET_TCL_FLAG(prHifRxHdr); - - //4 <4.2> Get Band information - prBssDesc->eBand = HIF_RX_HDR_GET_RF_BAND(prHifRxHdr); - - //4 <4.2> Get channel and RCPI information - ucHwChannelNum = HIF_RX_HDR_GET_CHNL_NUM(prHifRxHdr); - - if (BAND_2G4 == prBssDesc->eBand) { - - /* Update RCPI if in right channel */ - if (ucIeDsChannelNum >= 1 && ucIeDsChannelNum <= 14) { - - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeDsChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeDsChannelNum; - } - else if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum <= 14) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - // 5G Band - else { - if(ucIeHtChannelNum >= 1 && ucIeHtChannelNum < 200) { - // Receive Beacon/ProbeResp frame from adjacent channel. - if ((ucIeHtChannelNum == ucHwChannelNum) || - (prHifRxHdr->ucRcpi > prBssDesc->ucRCPI)) { - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - } - - // trust channel information brought by IE - prBssDesc->ucChannelNum = ucIeHtChannelNum; - } - else { - /* Always update RCPI */ - prBssDesc->ucRCPI = prHifRxHdr->ucRcpi; - - prBssDesc->ucChannelNum = ucHwChannelNum; - } - } - } - - - //4 <5> PHY type setting - prBssDesc->ucPhyTypeSet = 0; - - if (BAND_2G4 == prBssDesc->eBand) { - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* check if support 11g */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) || - prBssDesc->fgIsERPPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_ERP; - } - - /* if not 11g only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_OFDM)) { - /* check if support 11b */ - if ((prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HR_DSSS; - } - } - } - } - else { /* (BAND_5G == prBssDesc->eBande) */ - /* check if support 11n */ - if (prBssDesc->fgIsHTPresent) { - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_HT; - } - - /* if not 11n only */ - if (!(prBssDesc->u2BSSBasicRateSet & RATE_SET_BIT_HT_PHY)) { - /* Support 11a definitely */ - prBssDesc->ucPhyTypeSet |= PHY_TYPE_BIT_OFDM; - - ASSERT(!(prBssDesc->u2OperationalRateSet & RATE_SET_HR_DSSS)); - } - } - - - //4 <6> Update BSS_DESC_T's Last Update TimeStamp. - GET_CURRENT_SYSTIME(&prBssDesc->rUpdateTime); - - return prBssDesc; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Convert the Beacon or ProbeResp Frame in SW_RFB_T to scan result for query -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS It is a valid Scan Result and been sent to the host. -* @retval WLAN_STATUS_FAILURE It is not a valid Scan Result. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBssDesc, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SCAN_INFO_T prScanInfo; - UINT_8 aucRatesEx[PARAM_MAX_LEN_RATES_EX]; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame; - PARAM_MAC_ADDRESS rMacAddr; - PARAM_SSID_T rSsid; - ENUM_PARAM_NETWORK_TYPE_T eNetworkType; - PARAM_802_11_CONFIG_T rConfiguration; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_8 ucRateLen = 0; - #if CFG_SUPPORT_RSSI_SMOOTH - //------------------------------- jbx add 0508------------------------------------------------- - UINT_8 temp = 0; - //------------------------------- jbx add 0508------------------------------------------------- - #endif - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if (prBssDesc->eBand == BAND_2G4) { - if ((prBssDesc->u2OperationalRateSet & RATE_SET_OFDM) - || prBssDesc->fgIsERPPresent) { - eNetworkType = PARAM_NETWORK_TYPE_OFDM24; - } - else { - eNetworkType = PARAM_NETWORK_TYPE_DS; - } - } - else { - ASSERT(prBssDesc->eBand == BAND_5G); - eNetworkType = PARAM_NETWORK_TYPE_OFDM5; - } - - if(prBssDesc->eBSSType == BSS_TYPE_P2P_DEVICE) { - /* NOTE(Kevin): Not supported by WZC(TBD) */ - return WLAN_STATUS_FAILURE; - } - - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - COPY_MAC_ADDR(rMacAddr, prWlanBeaconFrame->aucBSSID); - COPY_SSID(rSsid.aucSsid, - rSsid.u4SsidLen, - prBssDesc->aucSSID, - prBssDesc->ucSSIDLen); - - rConfiguration.u4Length = sizeof(PARAM_802_11_CONFIG_T); - rConfiguration.u4BeaconPeriod = (UINT_32) prWlanBeaconFrame->u2BeaconInterval; - rConfiguration.u4ATIMWindow = prBssDesc->u2ATIMWindow; - rConfiguration.u4DSConfig = nicChannelNum2Freq(prBssDesc->ucChannelNum); - rConfiguration.rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - rateGetDataRatesFromRateSet(prBssDesc->u2OperationalRateSet, - 0, - aucRatesEx, - &ucRateLen); - - /* NOTE(Kevin): Set unused entries, if any, at the end of the array to 0. - * from OID_802_11_BSSID_LIST - */ - for (i = ucRateLen; i < sizeof(aucRatesEx) / sizeof(aucRatesEx[0]) ; i++) { - aucRatesEx[i] = 0; - } - - switch(prBssDesc->eBSSType) { - case BSS_TYPE_IBSS: - eOpMode = NET_TYPE_IBSS; - break; - - case BSS_TYPE_INFRASTRUCTURE: - case BSS_TYPE_P2P_DEVICE: - case BSS_TYPE_BOW_DEVICE: - default: - eOpMode = NET_TYPE_INFRA; - break; - } -#if CFG_SUPPORT_RSSI_SMOOTH - -//------------------------------- jbx add 0508------------------------------------------------- -// printk(KERN_INFO "%s::111----------------deal,prBssDesc->ucRCPI_pre_fake = %d, prBssDesc->ucRCPI_pre_real =%d prBssDesc->ucRCPI = %d-----------------------\n", __func__,prBssDesc->ucRCPI_pre_fake,prBssDesc->ucRCPI_pre_real,prBssDesc->ucRCPI); -// printk("bingxiang__SSID : %s\n", prBssDesc->aucSSID); -// printk("bingxiang__BSSID: ["MACSTR"]\n", MAC2STR(prBssDesc->aucBSSID)); - - if(prBssDesc->ucRCPI_pre_fake==0) - { - - prBssDesc->ucRCPI_pre_real = prBssDesc->ucRCPI; - prBssDesc->ucRCPI_pre_fake =prBssDesc->ucRCPI; - } - else - { - temp = prBssDesc->ucRCPI ; - if((((prBssDesc->ucRCPI - prBssDesc->ucRCPI_pre_real) > 0)&&((prBssDesc->ucRCPI - prBssDesc->ucRCPI_pre_real) < 8)) ||( ((prBssDesc->ucRCPI_pre_real - prBssDesc->ucRCPI) > 0)&&((prBssDesc->ucRCPI_pre_real - prBssDesc->ucRCPI ) < 8))) - { - prBssDesc->ucRCPI = prBssDesc->ucRCPI_pre_fake ; - } - else if(prBssDesc->ucRCPI > prBssDesc->ucRCPI_pre_real) - { - prBssDesc->ucRCPI = prBssDesc->ucRCPI_pre_fake + ((prBssDesc->ucRCPI - prBssDesc->ucRCPI_pre_real)>>3); - } - else - { - prBssDesc->ucRCPI = prBssDesc->ucRCPI_pre_fake - ((prBssDesc->ucRCPI_pre_real - prBssDesc->ucRCPI)>>3); - } - prBssDesc->ucRCPI_pre_fake = prBssDesc->ucRCPI; - prBssDesc->ucRCPI_pre_real = temp; - } -// printk(KERN_INFO "%s::222----------------deal over, prBssDesc->ucRCPI = %d-----------------------\n", __func__,prBssDesc->ucRCPI); -//------------------------------- jbx add 0508------------------------------------------------- -#endif - - kalIndicateBssInfo(prAdapter->prGlueInfo, - (PUINT_8)prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - prBssDesc->ucChannelNum, - RCPI_TO_dBm(prBssDesc->ucRCPI)); - - nicAddScanResult(prAdapter, - rMacAddr, - &rSsid, - prWlanBeaconFrame->u2CapInfo & CAP_INFO_PRIVACY ? 1 : 0, - RCPI_TO_dBm(prBssDesc->ucRCPI), - eNetworkType, - &rConfiguration, - eOpMode, - aucRatesEx, - prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen, - (PUINT_8)((UINT_32)(prSwRfb->pvHeader) + WLAN_MAC_MGMT_HEADER_LEN)); - - return WLAN_STATUS_SUCCESS; - -} /* end of scanAddScanResult() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Parse the content of given Beacon or ProbeResp Frame. -* -* @param[in] prSwRfb Pointer to the receiving SW_RFB_T structure. -* -* @retval WLAN_STATUS_SUCCESS if not report this SW_RFB_T to host -* @retval WLAN_STATUS_PENDING if report this SW_RFB_T to host as scan result -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -scanProcessBeaconAndProbeResp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_BSS_INFO_T prAisBssInfo; - P_WLAN_BEACON_FRAME_T prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)NULL; -#if CFG_SLT_SUPPORT - P_SLT_INFO_T prSltInfo = (P_SLT_INFO_T)NULL; -#endif - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - //4 <0> Ignore invalid Beacon Frame - if ((prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) < - (TIMESTAMP_FIELD_LEN + BEACON_INTERVAL_FIELD_LEN + CAP_INFO_FIELD_LEN)) { -#ifndef _lint - ASSERT(0); -#endif /* _lint */ - return rStatus; - } - -#if CFG_SLT_SUPPORT - prSltInfo = &prAdapter->rWifiVar.rSltInfo; - - if (prSltInfo->fgIsDUT) { - DBGLOG(P2P, INFO, ("\n\rBCN: RX\n")); - prSltInfo->u4BeaconReceiveCnt++; - return WLAN_STATUS_SUCCESS; - } - else { - return WLAN_STATUS_SUCCESS; - } -#endif - - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]); - prWlanBeaconFrame = (P_WLAN_BEACON_FRAME_T)prSwRfb->pvHeader; - - //4 <1> Parse and add into BSS_DESC_T - prBssDesc = scanAddToBssDesc(prAdapter, prSwRfb); - - if (prBssDesc) { - - //4 <1.1> Beacon Change Detection for Connected BSS - if(prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED && - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA)) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - EQUAL_SSID(prBssDesc->aucSSID, prBssDesc->ucSSIDLen, prAisBssInfo->aucSSID, prAisBssInfo->ucSSIDLen)) { - BOOLEAN fgNeedDisconnect = FALSE; - -#if CFG_SUPPORT_BEACON_CHANGE_DETECTION - // <1.1.2> check if supported rate differs - if(prAisBssInfo->u2OperationalRateSet != prBssDesc->u2OperationalRateSet) { - fgNeedDisconnect = TRUE; - } -#endif - - // <1.1.3> beacon content change detected, disconnect immediately - if(fgNeedDisconnect == TRUE) { - aisBssBeaconTimeout(prAdapter); - } - } - - //4 <1.1> Update AIS_BSS_INFO - if(((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE && prConnSettings->eOPMode != NET_TYPE_IBSS) - || (prBssDesc->eBSSType == BSS_TYPE_IBSS && prConnSettings->eOPMode != NET_TYPE_INFRA))) { - if (prAisBssInfo->eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - - /* *not* checking prBssDesc->fgIsConnected anymore, - * due to Linksys AP uses " " as hidden SSID, and would have different BSS descriptor */ - if ((!prAisBssInfo->ucDTIMPeriod) && - EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prAisBssInfo->aucBSSID) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - ((prWlanBeaconFrame->u2FrameCtrl & MASK_FRAME_TYPE) == MAC_FRAME_BEACON)) { - - prAisBssInfo->ucDTIMPeriod = prBssDesc->ucDTIMPeriod; - - /* sync with firmware for beacon information */ - nicPmIndicateBssConnected(prAdapter, NETWORK_TYPE_AIS_INDEX); - } - } - -#if CFG_SUPPORT_ADHOC - if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen) && - (prBssDesc->eBSSType == BSS_TYPE_IBSS) && - (prAisBssInfo->eCurrentOPMode == OP_MODE_IBSS)) { - - ibssProcessMatchedBeacon(prAdapter, prAisBssInfo, prBssDesc, prSwRfb->prHifRxHdr->ucRcpi); - } -#endif /* CFG_SUPPORT_ADHOC */ - } - - rlmProcessBcn(prAdapter, - prSwRfb, - ((P_WLAN_BEACON_FRAME_T)(prSwRfb->pvHeader))->aucInfoElem, - (prSwRfb->u2PacketLen - prSwRfb->u2HeaderLen) - - (UINT_16)(OFFSET_OF(WLAN_BEACON_FRAME_BODY_T, aucInfoElem[0]))); - - //4 <3> Send SW_RFB_T to HIF when we perform SCAN for HOST - if(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE - || prBssDesc->eBSSType == BSS_TYPE_IBSS) { - /* for AIS, send to host */ - if (prConnSettings->fgIsScanReqIssued && - rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == TRUE) { - ENUM_BAND_T eBand; - UINT_8 ucChannel; - BOOLEAN fgAddToScanResult; - - /* check ucChannelNum/eBand for adjacement channel filtering */ - if(cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel) == TRUE && - (eBand != prBssDesc->eBand || ucChannel != prBssDesc->ucChannelNum)) { - fgAddToScanResult = FALSE; - } - else { - fgAddToScanResult = TRUE; - } - - if(fgAddToScanResult == TRUE) { - rStatus = scanAddScanResult(prAdapter, prBssDesc, prSwRfb); - } - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - scanP2pProcessBeaconAndProbeResp( - prAdapter, - prSwRfb, - &rStatus, - prBssDesc, - prWlanBeaconFrame); - } -#endif - } - - return rStatus; - -} /* end of scanProcessBeaconAndProbeResp() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Search the Candidate of BSS Descriptor for JOIN(Infrastructure) or -* MERGE(AdHoc) according to current Connection Policy. -* -* \return Pointer to BSS Descriptor, if found. NULL, if not found -*/ -/*----------------------------------------------------------------------------*/ -P_BSS_DESC_T -scanSearchBssDescByPolicy ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - P_BSS_INFO_T prBssInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - P_SCAN_INFO_T prScanInfo; - - P_LINK_T prBSSDescList; - - P_BSS_DESC_T prBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - P_BSS_DESC_T prCandidateBssDesc = (P_BSS_DESC_T)NULL; - - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - P_STA_RECORD_T prPrimaryStaRec; - P_STA_RECORD_T prCandidateStaRec = (P_STA_RECORD_T)NULL; - - OS_SYSTIME rCurrentTime; - - /* The first one reach the check point will be our candidate */ - BOOLEAN fgIsFindFirst = (BOOLEAN)FALSE; - - BOOLEAN fgIsFindBestRSSI = (BOOLEAN)FALSE; - BOOLEAN fgIsFindBestEncryptionLevel = (BOOLEAN)FALSE; - //BOOLEAN fgIsFindMinChannelLoad = (BOOLEAN)FALSE; - - /* TODO(Kevin): Support Min Channel Load */ - //UINT_8 aucChannelLoad[CHANNEL_NUM] = {0}; - - BOOLEAN fgIsFixedChannel; - ENUM_BAND_T eBand; - UINT_8 ucChannel; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetTypeIndex]); - - prAisSpecBssInfo = &(prAdapter->rWifiVar.rAisSpecificBssInfo); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prBSSDescList = &prScanInfo->rBSSDescList; - - GET_CURRENT_SYSTIME(&rCurrentTime); - - /* check for fixed channel operation */ - if(eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - fgIsFixedChannel = cnmAisInfraChannelFixed(prAdapter, &eBand, &ucChannel); - } - else { - fgIsFixedChannel = FALSE; - } - -#if DBG - if (prConnSettings->ucSSIDLen < ELEM_MAX_LEN_SSID) { - prConnSettings->aucSSID[prConnSettings->ucSSIDLen] = '\0'; - } -#endif - - DBGLOG(SCN, INFO, ("SEARCH: Num Of BSS_DESC_T = %d, Look for SSID: %s\n", - prBSSDescList->u4NumElem, prConnSettings->aucSSID)); - - - //4 <1> The outer loop to search for a candidate. - LINK_FOR_EACH_ENTRY(prBssDesc, prBSSDescList, rLinkEntry, BSS_DESC_T) { - - /* TODO(Kevin): Update Minimum Channel Load Information here */ - - DBGLOG(SCN, INFO, ("SEARCH: ["MACSTR"], SSID:%s\n", - MAC2STR(prBssDesc->aucBSSID), prBssDesc->aucSSID)); - - - //4 <2> Check PHY Type and attributes - //4 <2.1> Check Unsupported BSS PHY Type - if (!(prBssDesc->ucPhyTypeSet & (prAdapter->rWifiVar.ucAvailablePhyTypeSet))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore unsupported ucPhyTypeSet = %x\n", - prBssDesc->ucPhyTypeSet)); - continue; - } - - //4 <2.2> Check if has unknown NonHT BSS Basic Rate Set. - if (prBssDesc->fgIsUnknownBssBasicRate) { - - continue; - } - - //4 <2.3> Check if fixed operation cases should be aware - if (fgIsFixedChannel == TRUE && - (prBssDesc->eBand != eBand || prBssDesc->ucChannelNum != ucChannel)) { - continue; - } - - //4 <2.4> Check if the channel is legal under regulatory domain - if(rlmDomainIsLegalChannel(prAdapter, prBssDesc->eBand, prBssDesc->ucChannelNum) == FALSE) { - continue; - } - - //4 <2.5> Check if this BSS_DESC_T is stale - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_BSS_DESC_REMOVE_TIMEOUT_SEC)) ) { - - continue; - } - - //4 <3> Check if reach the excessive join retry limit - /* NOTE(Kevin): STA_RECORD_T is recorded by TA. */ - prStaRec = cnmGetStaRecByAddress(prAdapter, (UINT_8) eNetTypeIndex, - prBssDesc->aucSrcAddr); - - if (prStaRec) { - /* NOTE(Kevin): - * The Status Code is the result of a Previous Connection Request, we use this as SCORE for choosing a proper - * candidate (Also used for compare see <6>) - * The Reason Code is an indication of the reason why AP reject us, we use this Code for "Reject" - * a SCAN result to become our candidate(Like a blacklist). - */ -#if 0 /* TODO(Kevin): */ - if (prStaRec->u2ReasonCode != REASON_CODE_RESERVED) { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS with previous Reason Code = %d\n", - prStaRec->u2ReasonCode)); - continue; - } - else -#endif - if (prStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - /* NOTE(Kevin): greedy association - after timeout, we'll still - * try to associate to the AP whose STATUS of conection attempt - * was not success. - * We may also use (ucJoinFailureCount x JOIN_RETRY_INTERVAL_SEC) for - * time bound. - */ - if ((prStaRec->ucJoinFailureCount < JOIN_MAX_RETRY_FAILURE_COUNT) || - (CHECK_FOR_TIMEOUT(rCurrentTime, - prStaRec->rLastJoinTime, - SEC_TO_SYSTIME(JOIN_RETRY_INTERVAL_SEC)))) { - - /* NOTE(Kevin): Every JOIN_RETRY_INTERVAL_SEC interval, we can retry - * JOIN_MAX_RETRY_FAILURE_COUNT times. - */ - if (prStaRec->ucJoinFailureCount >= JOIN_MAX_RETRY_FAILURE_COUNT) { - prStaRec->ucJoinFailureCount = 0; - } - DBGLOG(SCN, INFO, ("SEARCH: Try to join BSS again which has Status Code = %d (Curr = %ld/Last Join = %ld)\n", - prStaRec->u2StatusCode, rCurrentTime, prStaRec->rLastJoinTime)); - } - else { - DBGLOG(SCN, INFO, ("SEARCH: Ignore BSS which reach maximum Join Retry Count = %d \n", - JOIN_MAX_RETRY_FAILURE_COUNT)); - continue; - } - - } - } - - - //4 <4> Check for various NETWORK conditions - if (eNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - - //4 <4.1> Check BSS Type for the corresponding Operation Mode in Connection Setting - /* NOTE(Kevin): For NET_TYPE_AUTO_SWITCH, we will always pass following check. */ - if (((prConnSettings->eOPMode == NET_TYPE_INFRA) && - (prBssDesc->eBSSType != BSS_TYPE_INFRASTRUCTURE)) || - ((prConnSettings->eOPMode == NET_TYPE_IBSS || prConnSettings->eOPMode == NET_TYPE_DEDICATED_IBSS) && - (prBssDesc->eBSSType != BSS_TYPE_IBSS))) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore eBSSType = %s\n", - ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) ? - "INFRASTRUCTURE" : "IBSS"))); - continue; - } - - //4 <4.2> Check AP's BSSID if OID_802_11_BSSID has been set. - if ((prConnSettings->fgIsConnByBssidIssued) && - (prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE)) { - - if (UNEQUAL_MAC_ADDR(prConnSettings->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, INFO, ("SEARCH: Ignore due to BSSID was not matched!\n")); - continue; - } - } - -#if CFG_SUPPORT_ADHOC - //4 <4.3> Check for AdHoc Mode - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - //4 <4.3.1> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS - e.g. IPN2220, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(SCN_ADHOC_BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCN, LOUD, ("SEARCH: Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - - //4 <4.3.2> Check Peer's capability - if (ibssCheckCapabilityForAdHocMode(prAdapter, prBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4.3.3> Compare TSF - if (prBssInfo->fgIsBeaconActivated && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prBssDesc->aucBSSID)) { - - DBGLOG(SCN, LOUD, - ("SEARCH: prBssDesc->fgIsLargerTSF = %d\n", - prBssDesc->fgIsLargerTSF)); - - if (!prBssDesc->fgIsLargerTSF) { - DBGLOG(SCN, INFO, - ("SEARCH: Ignore BSS DESC MAC: ["MACSTR"], Smaller TSF\n", MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - } -#endif /* CFG_SUPPORT_ADHOC */ - - } - - - - -#if 0 /* TODO(Kevin): For IBSS */ - //4 <2.c> Check if this SCAN record has been updated recently for IBSS. - /* NOTE(Kevin): Because some STA may change its BSSID frequently after it - * create the IBSS, so we need to make sure we get the new one. - * For BSS, if the old record was matched, however it won't be able to pass - * the Join Process later. - */ - if (prBssDesc->eBSSType == BSS_TYPE_IBSS) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - if ((prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) && - (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED)) { - OS_SYSTIME rCurrentTime; - - GET_CURRENT_SYSTIME(&rCurrentTime); - if (CHECK_FOR_TIMEOUT(rCurrentTime, prBssDesc->rUpdateTime, - SEC_TO_SYSTIME(BSS_DESC_TIMEOUT_SEC))) { - DBGLOG(SCAN, TRACE, ("Skip old record of BSS Descriptor - BSSID:["MACSTR"]\n\n", - MAC2STR(prBssDesc->aucBSSID))); - continue; - } - } - - - //4 <4B> Check for IBSS AdHoc Mode. - /* Skip if one or more BSS Basic Rate are not supported by current AdHocMode */ - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_IBSS) { - //4 <4B.1> Check if match the Capability of current IBSS AdHoc Mode. - if (ibssCheckCapabilityForAdHocMode(prAdapter, prPrimaryBssDesc) == WLAN_STATUS_FAILURE) { - - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: "MACSTR", Capability is not supported for current AdHoc Mode.\n", - MAC2STR(prPrimaryBssDesc->aucBSSID))); - - continue; - } - - - //4 <4B.2> IBSS Merge Decision Flow for SEARCH STATE. - if (prAdapter->fgIsIBSSActive && - UNEQUAL_MAC_ADDR(prBssInfo->aucBSSID, prPrimaryBssDesc->aucBSSID)) { - - if (!fgIsLocalTSFRead) { - NIC_GET_CURRENT_TSF(prAdapter, &rCurrentTsf); - - DBGLOG(SCAN, TRACE, - ("\n\nCurrent TSF : %08lx-%08lx\n\n", - rCurrentTsf.u.HighPart, rCurrentTsf.u.LowPart)); - } - - if (rCurrentTsf.QuadPart > prPrimaryBssDesc->u8TimeStamp.QuadPart) { - DBGLOG(SCAN, TRACE, - ("Ignore BSS DESC MAC: ["MACSTR"], Current BSSID: ["MACSTR"].\n", - MAC2STR(prPrimaryBssDesc->aucBSSID), MAC2STR(prBssInfo->aucBSSID))); - - DBGLOG(SCAN, TRACE, - ("\n\nBSS's TSF : %08lx-%08lx\n\n", - prPrimaryBssDesc->u8TimeStamp.u.HighPart, prPrimaryBssDesc->u8TimeStamp.u.LowPart)); - - prPrimaryBssDesc->fgIsLargerTSF = FALSE; - continue; - } - else { - prPrimaryBssDesc->fgIsLargerTSF = TRUE; - } - - } - } - - //4 <5> Check the Encryption Status. - if (rsnPerformPolicySelection(prPrimaryBssDesc)) { - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - - /* For RSN Pre-authentication, update the PMKID canidate list for - same SSID and encrypt status */ - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAdapter->rWifiVar.rAisBssInfo.u4PmkidCandicateCount) { - prAdapter->rWifiVar.rAisBssInfo.fgIndicatePMKID = rsnCheckPmkidCandicate(); - } - } - -#endif - - - prPrimaryBssDesc = (P_BSS_DESC_T)NULL; - - //4 <6> Check current Connection Policy. - switch (prConnSettings->eConnectionPolicy) { - case CONNECT_BY_SSID_BEST_RSSI: - /* Choose Hidden SSID to join only if the `fgIsEnableJoin...` is TRUE */ - if (prAdapter->rWifiVar.fgEnableJoinToHiddenSSID && prBssDesc->fgIsHiddenSSID) { - /* NOTE(Kevin): following if () statement means that - * If Target is hidden, then we won't connect when user specify SSID_ANY policy. - */ - if (prConnSettings->ucSSIDLen) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - - } - else if (EQUAL_SSID(prBssDesc->aucSSID, - prBssDesc->ucSSIDLen, - prConnSettings->aucSSID, - prConnSettings->ucSSIDLen)) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindBestRSSI = TRUE; - } - break; - - case CONNECT_BY_SSID_ANY: - /* NOTE(Kevin): In this policy, we don't know the desired - * SSID from user, so we should exclude the Hidden SSID from scan list. - * And because we refuse to connect to Hidden SSID node at the beginning, so - * when the JOIN Module deal with a BSS_DESC_T which has fgIsHiddenSSID == TRUE, - * then the Connection Settings must be valid without doubt. - */ - if (!prBssDesc->fgIsHiddenSSID) { - prPrimaryBssDesc = prBssDesc; - - fgIsFindFirst = TRUE; - } - break; - - case CONNECT_BY_BSSID: - if(EQUAL_MAC_ADDR(prBssDesc->aucBSSID, prConnSettings->aucBSSID)) { - prPrimaryBssDesc = prBssDesc; - } - break; - - default: - break; - } - - - /* Primary Candidate was not found */ - if (prPrimaryBssDesc == NULL) { - continue; - } - - //4 <7> Check the Encryption Status. - if (prPrimaryBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE) { -#if CFG_SUPPORT_WAPI - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { - if (wapiPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - fgIsFindFirst = TRUE; - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } - } - else -#endif -#if CFG_RSN_MIGRATION - if (rsnPerformPolicySelection(prAdapter, prPrimaryBssDesc)) { - if (prAisSpecBssInfo->fgCounterMeasure) { - DBGLOG(RSN, INFO, ("Skip while at counter measure period!!!\n")); - continue; - } - - if (prPrimaryBssDesc->ucEncLevel > 0) { - fgIsFindBestEncryptionLevel = TRUE; - - fgIsFindFirst = FALSE; - } - -#if 0 - /* Update PMKID candicate list. */ - if (prAdapter->rWifiVar.rConnSettings.eAuthMode == AUTH_MODE_WPA2) { - rsnUpdatePmkidCandidateList(prPrimaryBssDesc); - if (prAisSpecBssInfo->u4PmkidCandicateCount) { - if (rsnCheckPmkidCandicate()) { - DBGLOG(RSN, WARN, ("Prepare a timer to indicate candidate "MACSTR"\n", - MAC2STR(prAisSpecBssInfo->arPmkidCache[prAisSpecBssInfo->u4PmkidCacheCount].rBssidInfo.aucBssid))); - cnmTimerStopTimer(&prAisSpecBssInfo->rPreauthenticationTimer); - cnmTimerStartTimer(&prAisSpecBssInfo->rPreauthenticationTimer, - SEC_TO_MSEC(WAIT_TIME_IND_PMKID_CANDICATE_SEC)); - } - } - } -#endif - } - else { - /* Can't pass the Encryption Status Check, get next one */ - continue; - } -#endif - } - else { - /* Todo:: P2P and BOW Policy Selection */ - } - - prPrimaryStaRec = prStaRec; - - //4 <8> Compare the Candidate and the Primary Scan Record. - if (!prCandidateBssDesc) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - - //4 <8.1> Condition - Get the first matched one. - if (fgIsFindFirst) { - break; - } - } - else { -#if 0 /* TODO(Kevin): For security(TBD) */ - //4 <6B> Condition - Choose the one with best Encryption Score. - if (fgIsFindBestEncryptionLevel) { - if (prCandidateBssDesc->ucEncLevel < - prPrimaryBssDesc->ucEncLevel) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - - /* If reach here, that means they have the same Encryption Score. - */ - - //4 <6C> Condition - Give opportunity to the one we didn't connect before. - // For roaming, only compare the candidates other than current associated BSSID. - if (!prCandidateBssDesc->fgIsConnected && !prPrimaryBssDesc->fgIsConnected) { - if ((prCandidateStaRec != (P_STA_RECORD_T)NULL) && - (prCandidateStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - - DBGLOG(SCAN, TRACE, ("So far -BSS DESC MAC: "MACSTR" has nonzero Status Code = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateStaRec->u2StatusCode)); - - if (prPrimaryStaRec != (P_STA_RECORD_T)NULL) { - if (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) { - - /* Give opportunity to the one with smaller rLastJoinTime */ - if (TIME_BEFORE(prCandidateStaRec->rLastJoinTime, - prPrimaryStaRec->rLastJoinTime)) { - continue; - } - /* We've connect to CANDIDATE recently, let us try PRIMARY now */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY's u2StatusCode = 0 */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - /* PRIMARY has no StaRec - We didn't connet to PRIMARY before */ - else { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if ((prPrimaryStaRec != (P_STA_RECORD_T)NULL) && - (prPrimaryStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL)) { - continue; - } - } - } -#endif - - - //4 <6D> Condition - Visible SSID win Hidden SSID. - if (prCandidateBssDesc->fgIsHiddenSSID) { - if (!prPrimaryBssDesc->fgIsHiddenSSID) { - prCandidateBssDesc = prPrimaryBssDesc; /* The non Hidden SSID win. */ - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else { - if (prPrimaryBssDesc->fgIsHiddenSSID) { - continue; - } - } - - - //4 <6E> Condition - Choose the one with better RCPI(RSSI). - if (fgIsFindBestRSSI) { - /* TODO(Kevin): We shouldn't compare the actual value, we should - * allow some acceptable tolerance of some RSSI percentage here. - */ - DBGLOG(SCN, TRACE, ("Candidate ["MACSTR"]: RCPI = %d, Primary ["MACSTR"]: RCPI = %d\n", - MAC2STR(prCandidateBssDesc->aucBSSID), prCandidateBssDesc->ucRCPI, - MAC2STR(prPrimaryBssDesc->aucBSSID), prPrimaryBssDesc->ucRCPI)); - - ASSERT(!(prCandidateBssDesc->fgIsConnected && - prPrimaryBssDesc->fgIsConnected)); - - /* NOTE: To prevent SWING, we do roaming only if target AP has at least 5dBm larger than us. */ - if (prCandidateBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP <= prPrimaryBssDesc->ucRCPI) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prPrimaryBssDesc->fgIsConnected) { - if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI + ROAMING_NO_SWING_RCPI_STEP) { - - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - else if (prCandidateBssDesc->ucRCPI < prPrimaryBssDesc->ucRCPI) { - prCandidateBssDesc = prPrimaryBssDesc; - prCandidateStaRec = prPrimaryStaRec; - continue; - } - } - -#if 0 - /* If reach here, that means they have the same Encryption Score, and - * both RSSI value are close too. - */ - //4 <6F> Seek the minimum Channel Load for less interference. - if (fgIsFindMinChannelLoad) { - - /* TODO(Kevin): Check which one has minimum channel load in its channel */ - } -#endif - } - } - - return prCandidateBssDesc; - -} /* end of scanSearchBssDescByPolicy() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/scan_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/scan_fsm.c deleted file mode 100755 index 7586b5cb85b5..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/scan_fsm.c +++ /dev/null @@ -1,1153 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/scan_fsm.c#1 $ -*/ - -/*! \file "scan_fsm.c" - \brief This file defines the state transition function for SCAN FSM. - - The SCAN FSM is part of SCAN MODULE and responsible for performing basic SCAN - behavior as metioned in IEEE 802.11 2007 11.1.3.1 & 11.1.3.2 . -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: scan_fsm.c $ -** -** 08 31 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** do not use fgIsP2PRegistered for checking but use network index - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001095] [Volunteer Patch][Driver] Always Scan before enable Hot-Spot. - * Fix bug when unregister P2P network.. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * free mailbox message afte parsing is completed. - * - * 07 18 2011 cp.wu - * [WCXRP00000858] [MT5931][Driver][Firmware] Add support for scan to search for more than one SSID in a single scanning request - * add framework in driver domain for supporting new SCAN_REQ_V2 for more than 1 SSID support as well as uProbeDelay in NDIS 6.x driver model - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000604] [MT6620 Wi-Fi][Driver] Surpress Klockwork Warning - * surpress klock warning with code path rewritten - * - * 03 18 2011 cm.chang - * [WCXRP00000576] [MT6620 Wi-Fi][Driver][FW] Remove P2P compile option in scan req/cancel command - * As CR title - * - * 02 18 2011 yuche.tsai - * [WCXRP00000478] [Volunteer Patch][MT6620][Driver] Probe request frame during search phase do not contain P2P wildcard SSID. - * Take P2P wildcard SSID into consideration. - * - * 01 27 2011 yuche.tsai - * [WCXRP00000399] [Volunteer Patch][MT6620/MT5931][Driver] Fix scan side effect after P2P module separate. - * Fix scan channel extension issue when p2p module is not registered. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * add interface for RLM to trigger OBSS-SCAN. - * - * 08 16 2010 yuche.tsai - * NULL - * Fix bug for processing queued scan request. - * - * 08 11 2010 yuche.tsai - * NULL - * Add a function for returning channel. - * - * 08 05 2010 yuche.tsai - * NULL - * Update SCAN FSM for support P2P Device discovery scan. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 07 26 2010 yuche.tsai - * - * Add option of channel extension while cancelling scan request. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 20 2010 cp.wu - * - * pass band information for scan in an efficient way by mapping ENUM_BAND_T into UINT_8.. - * - * 07 19 2010 cp.wu - * - * due to FW/DRV won't be sync. precisely, some strict assertions should be eased. - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * SCN module is now able to handle multiple concurrent scanning requests - * - * 07 16 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * bugfix for SCN migration - * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue - * 2) before AIS issues scan request, network(BSS) needs to be activated first - * 3) only invoke COPY_SSID when using specified SSID for scan - * - * 07 15 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * driver no longer generates probe request frames - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * pass band with channel number information as scan parameter - * - * 07 14 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * remove timer in DRV-SCN. - * - * 07 09 2010 cp.wu - * - * 1) separate AIS_FSM state for two kinds of scanning. (OID triggered scan, and scan-for-connection) - * 2) eliminate PRE_BSS_DESC_T, Beacon/PrebResp is now parsed in single pass - * 3) implment DRV-SCN module, currently only accepts single scan request, other request will be directly dropped by returning BUSY - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * take use of RLM module for parsing/generating HT IEs for 11n capability - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * when returning to SCAN_IDLE state, send a correct message to source FSM. - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * comment out RLM APIs by CFG_RLM_MIGRATION. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add scan_fsm into building. - * - * 05 14 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine the order of Stop TX Queue and Switch Channel - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Update pause/resume/flush API to new Bitmap API - * - * 05 12 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Add Power Management - Legacy PS-POLL support. - * - * 03 18 2010 kevin.huang - * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support - * Ignore the PROBE_DELAY state if the value of Probe Delay == 0 - * - * 03 10 2010 kevin.huang - * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support - * Add Channel Manager for arbitration of JOIN and SCAN Req - * - * 02 23 2010 kevin.huang - * [BORA00000603][WIFISYS] [New Feature] AAA Module Support - * Add support scan channel 1~14 and update scan result's frequency infou1rwduu`wvpghlqg|n`slk+mpdkb - * - * 01 08 2010 kevin.huang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * Add set RX Filter to receive BCN from different BSSID during SCAN - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Nov 25 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Remove flag of CFG_TEST_MGMT_FSM - * - * Nov 20 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Change parameter of scanSendProbeReqFrames() - * - * Nov 16 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Update scnFsmSteps() - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * Fix typo - * - * Nov 5 2009 mtk01461 - * [BORA00000018] Integrate WIFI part into BORA for the 1st time - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugScanState[SCAN_STATE_NUM] = { - (PUINT_8)DISP_STRING("SCAN_STATE_IDLE"), - (PUINT_8)DISP_STRING("SCAN_STATE_SCANNING"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN ENUM_SCAN_STATE_T eNextState - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prMsgHdr; - - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - do { - -#if DBG - DBGLOG(SCN, STATE, ("TRANSITION: [%s] -> [%s]\n", - apucDebugScanState[prScanInfo->eCurrentState], - apucDebugScanState[eNextState])); -#else - DBGLOG(SCN, STATE, ("[%d] TRANSITION: [%d] -> [%d]\n", - DBG_SCN_IDX, - prScanInfo->eCurrentState, - eNextState)); -#endif - - /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */ - prScanInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; - - switch (prScanInfo->eCurrentState) { - case SCAN_STATE_IDLE: - /* check for pending scanning requests */ - if(!LINK_IS_EMPTY(&(prScanInfo->rPendingMsgList))) { - // load next message from pending list as scan parameters - LINK_REMOVE_HEAD(&(prScanInfo->rPendingMsgList), prMsgHdr, P_MSG_HDR_T); - - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - - /* switch to next state */ - eNextState = SCAN_STATE_SCANNING; - fgIsTransition = TRUE; - - cnmMemFree(prAdapter, prMsgHdr); - } - break; - - case SCAN_STATE_SCANNING: - if(prScanParam->fgIsScanV2 == FALSE) { - scnSendScanReq(prAdapter); - } - else { - scnSendScanReqV2(prAdapter); - } - break; - - default: - ASSERT(0); - break; - - } - } - while (fgIsTransition); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReq ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - if(prScanParam->ucSSIDNum == 1) { - COPY_SSID(rCmdScanReq.aucSSID, - rCmdScanReq.ucSSIDLength, - prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0]); - } - - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif - - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Generate CMD_ID_SCAN_REQ_V2 command -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnSendScanReqV2 ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_REQ_V2 rCmdScanReq; - UINT_32 i; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // send command packet for scan - kalMemZero(&rCmdScanReq, sizeof(CMD_SCAN_REQ_V2)); - - rCmdScanReq.ucSeqNum = prScanParam->ucSeqNum; - rCmdScanReq.ucNetworkType = (UINT_8)prScanParam->eNetTypeIndex; - rCmdScanReq.ucScanType = (UINT_8)prScanParam->eScanType; - rCmdScanReq.ucSSIDType = prScanParam->ucSSIDType; - - for (i = 0 ; i < prScanParam->ucSSIDNum; i++) { - COPY_SSID(rCmdScanReq.arSSID[i].aucSsid, - rCmdScanReq.arSSID[i].u4SsidLen, - prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i]); - } - - rCmdScanReq.u2ProbeDelayTime = (UINT_8)prScanParam->u2ProbeDelayTime; - rCmdScanReq.ucChannelType = (UINT_8)prScanParam->eScanChannel; - - if (prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - /* P2P would use: - * 1. Specified Listen Channel of passive scan for LISTEN state. - * 2. Specified Listen Channel of Target Device of active scan for SEARCH state. (Target != NULL) - */ - rCmdScanReq.ucChannelListNum = prScanParam->ucChannelListNum; - - for(i = 0 ; i < rCmdScanReq.ucChannelListNum ; i++) { - rCmdScanReq.arChannelList[i].ucBand = - (UINT_8) prScanParam->arChnlInfoList[i].eBand; - - rCmdScanReq.arChannelList[i].ucChannelNum = - (UINT_8)prScanParam->arChnlInfoList[i].ucChannelNum; - } - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanReq.u2ChannelDwellTime = prScanParam->u2PassiveListenInterval; - } -#endif - - if(prScanParam->u2IELen <= MAX_IE_LENGTH) { - rCmdScanReq.u2IELen = prScanParam->u2IELen; - } - else { - rCmdScanReq.u2IELen = MAX_IE_LENGTH; - } - - if (prScanParam->u2IELen) { - kalMemCopy(rCmdScanReq.aucIE, - prScanParam->aucIE, - sizeof(UINT_8) * rCmdScanReq.u2IELen); - } - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_REQ_V2, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - OFFSET_OF(CMD_SCAN_REQ_V2, aucIE) + rCmdScanReq.u2IELen, - (PUINT_8)&rCmdScanReq, - NULL, - 0); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgStart ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - ASSERT(prMsgHdr); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - - if (prScanInfo->eCurrentState == SCAN_STATE_IDLE) { - if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - scnFsmHandleScanMsg(prAdapter, (P_MSG_SCN_SCAN_REQ)prMsgHdr); - } - else if(prMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - scnFsmHandleScanMsgV2(prAdapter, (P_MSG_SCN_SCAN_REQ_V2)prMsgHdr); - } - else { - // should not deliver to this function - ASSERT(0); - } - - cnmMemFree(prAdapter, prMsgHdr); - scnFsmSteps(prAdapter, SCAN_STATE_SCANNING); - } - else { - LINK_INSERT_TAIL(&prScanInfo->rPendingMsgList, &prMsgHdr->rLinkEntry); - } - - return; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmMsgAbort ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_HDR_T prMsgHdr - ) -{ - P_MSG_SCN_SCAN_CANCEL prScanCancel; - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - CMD_SCAN_CANCEL rCmdScanCancel; - - ASSERT(prMsgHdr); - - prScanCancel = (P_MSG_SCN_SCAN_CANCEL)prMsgHdr; - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - if (prScanInfo->eCurrentState != SCAN_STATE_IDLE) { - if(prScanCancel->ucSeqNum == prScanParam->ucSeqNum && - prScanCancel->ucNetTypeIndex == (UINT_8)prScanParam->eNetTypeIndex) { - /* send cancel message to firmware domain */ - rCmdScanCancel.ucSeqNum = prScanParam->ucSeqNum; - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - rCmdScanCancel.ucIsExtChannel = (UINT_8) prScanCancel->fgIsChannelExt; - } - else { - rCmdScanCancel.ucIsExtChannel = (UINT_8) FALSE; - } -#endif - - wlanSendSetQueryCmd(prAdapter, - CMD_ID_SCAN_CANCEL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SCAN_CANCEL), - (PUINT_8)&rCmdScanCancel, - NULL, - 0); - - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - scnFsmRemovePendingMsg(prAdapter, prScanCancel->ucSeqNum, prScanCancel->ucNetTypeIndex); - } - } - - cnmMemFree(prAdapter, prMsgHdr); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing (Legacy) -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsg ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - if (prScanParam->ucSSIDType & (SCAN_REQ_SSID_SPECIFIED | SCAN_REQ_SSID_P2P_WILDCARD)) { - prScanParam->ucSSIDNum = 1; - - COPY_SSID(prScanParam->aucSpecifiedSSID[0], - prScanParam->ucSpecifiedSSIDLen[0], - prScanReqMsg->aucSSID, - prScanReqMsg->ucSSIDLength); - - // reset SSID length to zero for rest array entries - for(i = 1 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - else { - prScanParam->ucSSIDNum = 0; - - for(i = 0 ; i < SCN_SSID_MAX_NUM ; i++) { - prScanParam->ucSpecifiedSSIDLen[i] = 0; - } - } - - prScanParam->u2ProbeDelayTime = 0; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = FALSE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Scan Message Parsing - V2 with multiple SSID support -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmHandleScanMsgV2 ( - IN P_ADAPTER_T prAdapter, - IN P_MSG_SCN_SCAN_REQ_V2 prScanReqMsg - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - UINT_32 i; - - ASSERT(prAdapter); - ASSERT(prScanReqMsg); - ASSERT(prScanReqMsg->ucSSIDNum <= SCN_SSID_MAX_NUM); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanParam->eScanType = prScanReqMsg->eScanType; - prScanParam->eNetTypeIndex = (ENUM_NETWORK_TYPE_INDEX_T)prScanReqMsg->ucNetTypeIndex; - prScanParam->ucSSIDType = prScanReqMsg->ucSSIDType; - prScanParam->ucSSIDNum = prScanReqMsg->ucSSIDNum; - - for(i = 0 ; i < prScanReqMsg->ucSSIDNum ; i++) { - COPY_SSID(prScanParam->aucSpecifiedSSID[i], - prScanParam->ucSpecifiedSSIDLen[i], - prScanReqMsg->prSsid[i].aucSsid, - (UINT_8)prScanReqMsg->prSsid[i].u4SsidLen); - } - - prScanParam->u2ProbeDelayTime = prScanReqMsg->u2ProbeDelay; - prScanParam->eScanChannel = prScanReqMsg->eScanChannel; - if(prScanParam->eScanChannel == SCAN_CHANNEL_SPECIFIED) { - if(prScanReqMsg->ucChannelListNum <= MAXIMUM_OPERATION_CHANNEL_LIST) { - prScanParam->ucChannelListNum = prScanReqMsg->ucChannelListNum; - } - else { - prScanParam->ucChannelListNum = MAXIMUM_OPERATION_CHANNEL_LIST; - } - - kalMemCopy(prScanParam->arChnlInfoList, - prScanReqMsg->arChnlInfoList, - sizeof(RF_CHANNEL_INFO_T) * prScanParam->ucChannelListNum); - } - - if(prScanReqMsg->u2IELen <= MAX_IE_LENGTH) { - prScanParam->u2IELen = prScanReqMsg->u2IELen; - } - else { - prScanParam->u2IELen = MAX_IE_LENGTH; - } - - if(prScanParam->u2IELen) { - kalMemCopy(prScanParam->aucIE, prScanReqMsg->aucIE, prScanParam->u2IELen); - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prScanParam->eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - prScanParam->u2PassiveListenInterval = prScanReqMsg->u2ChannelDwellTime; - } -#endif - prScanParam->ucSeqNum = prScanReqMsg->ucSeqNum; - - if(prScanReqMsg->rMsgHdr.eMsgId == MID_RLM_SCN_SCAN_REQ) { - prScanParam->fgIsObssScan = TRUE; - } - else { - prScanParam->fgIsObssScan = FALSE; - } - - prScanParam->fgIsScanV2 = TRUE; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Remove pending scan request -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmRemovePendingMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_HDR_T prPendingMsgHdr, prPendingMsgHdrNext, prRemoveMsgHdr = NULL; - P_LINK_ENTRY_T prRemoveLinkEntry = NULL; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - /* traverse through rPendingMsgList for removal */ - LINK_FOR_EACH_ENTRY_SAFE(prPendingMsgHdr, - prPendingMsgHdrNext, - &(prScanInfo->rPendingMsgList), - rLinkEntry, - MSG_HDR_T) { - if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ) { - P_MSG_SCN_SCAN_REQ prScanReqMsg = (P_MSG_SCN_SCAN_REQ)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsg->ucSeqNum && - ucNetTypeIndex == prScanReqMsg->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsg->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - else if(prPendingMsgHdr->eMsgId == MID_AIS_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_BOW_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_P2P_SCN_SCAN_REQ_V2 - || prPendingMsgHdr->eMsgId == MID_RLM_SCN_SCAN_REQ_V2) { - P_MSG_SCN_SCAN_REQ_V2 prScanReqMsgV2 = (P_MSG_SCN_SCAN_REQ_V2)prPendingMsgHdr; - - if(ucSeqNum == prScanReqMsgV2->ucSeqNum && - ucNetTypeIndex == prScanReqMsgV2->ucNetTypeIndex) { - prRemoveLinkEntry = &(prScanReqMsgV2->rMsgHdr.rLinkEntry); - prRemoveMsgHdr = prPendingMsgHdr; - } - } - - if(prRemoveLinkEntry) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - ucSeqNum, - ucNetTypeIndex, - SCAN_STATUS_CANCELLED); - - /* remove from pending list */ - LINK_REMOVE_KNOWN_ENTRY(&(prScanInfo->rPendingMsgList), prRemoveLinkEntry); - cnmMemFree(prAdapter, prRemoveMsgHdr); - - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnEventScanDone ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_SCAN_DONE prScanDone - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - // buffer empty channel information - if(prScanParam->eScanChannel == SCAN_CHANNEL_FULL - || prScanParam->eScanChannel == SCAN_CHANNEL_2G4) { - if(prScanDone->ucSparseChannelValid) { - prScanInfo->fgIsSparseChannelValid = TRUE; - prScanInfo->rSparseChannel.eBand = (ENUM_BAND_T)prScanDone->rSparseChannel.ucBand; - prScanInfo->rSparseChannel.ucChannelNum = prScanDone->rSparseChannel.ucChannelNum; - } - else { - prScanInfo->fgIsSparseChannelValid = FALSE; - } - } - - if(prScanInfo->eCurrentState == SCAN_STATE_SCANNING && - prScanDone->ucSeqNum == prScanParam->ucSeqNum) { - /* generate scan-done event for caller */ - scnFsmGenerateScanDoneMsg(prAdapter, - prScanParam->ucSeqNum, - (UINT_8)prScanParam->eNetTypeIndex, - SCAN_STATUS_DONE); - - /* switch to next pending scan */ - scnFsmSteps(prAdapter, SCAN_STATE_IDLE); - } - else { - DBGLOG(SCN, LOUD, ("Unexpected SCAN-DONE event: SeqNum = %d, Current State = %d\n", - prScanDone->ucSeqNum, - prScanInfo->eCurrentState)); - } - - return; -} /* end of scnEventScanDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -scnFsmGenerateScanDoneMsg ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum, - IN UINT_8 ucNetTypeIndex, - IN ENUM_SCAN_STATUS eScanStatus - ) -{ - P_SCAN_INFO_T prScanInfo; - P_SCAN_PARAM_T prScanParam; - P_MSG_SCN_SCAN_DONE prScanDoneMsg; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - prScanParam = &prScanInfo->rScanParam; - - prScanDoneMsg = (P_MSG_SCN_SCAN_DONE)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_SCN_SCAN_DONE)); - if (!prScanDoneMsg) { - ASSERT(0); // Can't indicate SCAN FSM Complete - return; - } - - if(prScanParam->fgIsObssScan == TRUE) { - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_RLM_SCAN_DONE; - } - else { - switch((ENUM_NETWORK_TYPE_INDEX_T)ucNetTypeIndex) { - case NETWORK_TYPE_AIS_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_AIS_SCAN_DONE; - break; - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_P2P_SCAN_DONE; - break; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - prScanDoneMsg->rMsgHdr.eMsgId = MID_SCN_BOW_SCAN_DONE; - break; -#endif - - default: - DBGLOG(SCN, LOUD, ("Unexpected Network Type: %d\n", ucNetTypeIndex)); - ASSERT(0); - break; - } - } - - prScanDoneMsg->ucSeqNum = ucSeqNum; - prScanDoneMsg->ucNetTypeIndex = ucNetTypeIndex; - prScanDoneMsg->eScanStatus = eScanStatus; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prScanDoneMsg, - MSG_SEND_METHOD_BUF); - -} /* end of scnFsmGenerateScanDoneMsg() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Query for most sparse channel -* -* \param[in] -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -scnQuerySparseChannel ( - IN P_ADAPTER_T prAdapter, - P_ENUM_BAND_T prSparseBand, - PUINT_8 pucSparseChannel - ) -{ - P_SCAN_INFO_T prScanInfo; - - ASSERT(prAdapter); - - prScanInfo = &(prAdapter->rWifiVar.rScanInfo); - - if(prScanInfo->fgIsSparseChannelValid == TRUE) { - if(prSparseBand) { - *prSparseBand = prScanInfo->rSparseChannel.eBand; - } - - if(pucSparseChannel) { - *pucSparseChannel = prScanInfo->rSparseChannel.ucChannelNum; - } - - return TRUE; - } - else { - return FALSE; - } -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sec_fsm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sec_fsm.c deleted file mode 100755 index 7d09deb1ea19..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sec_fsm.c +++ /dev/null @@ -1,1295 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/sec_fsm.c#1 $ -*/ - -/*! \file "sec_fsm.c" - \brief This is the file implement security check state machine. - - In security module, do the port control check after success join to an AP, - and the path to NORMAL TR, the state machine handle these state transition. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: sec_fsm.c $ - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Adjust code for DBG and CONFIG_XLOG. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 03 29 2011 wh.su - * [WCXRP00000248] [MT6620 Wi-Fi][FW]Fixed the Klockwork error - * fixed the kclocwork error. - * - * 01 26 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * . - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Fix Compile Error when DBG is disabled. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 24 2010 wh.su - * NULL - * [WCXRP00005002][MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 19 2010 wh.su - * NULL - * adding the tx pkt call back handle for countermeasure. - * - * 07 19 2010 wh.su - * - * fixed the compilng error at debug mode. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * modify some code for concurrent network. - * - * 06 19 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * consdier the concurrent network setting. - * - * 05 28 2010 wh.su - * [BORA00000626][MT6620] Refine the remove key flow for WHQL testing - * fixed the ad-hoc wpa-none send non-encrypted frame issue. - * - * 05 24 2010 kevin.huang - * [BORA00000794][WIFISYS][New Feature]Power Management Support - * Refine authSendAuthFrame() for NULL STA_RECORD_T case and minimum deauth interval. - * - * 04 24 2010 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW - * - * 04 13 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the Klocwork error and refine the class error message. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * Fixed the pre-authentication timer not correctly init issue, and modify the security related callback function prototype. - * - * 03 01 2010 wh.su - * [BORA00000605][WIFISYS] Phase3 Integration - * Refine the variable and parameter for security. - * - * 01 27 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * add and fixed some security function. - * - * 01 13 2010 wh.su - * [BORA00000476][Wi-Fi][firmware] Add the security module initialize code - * fixed the compiling warning - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine some code - * - * Dec 4 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * refine the code - * - * Dec 1 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * code refine - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the function name - * - * Nov 19 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adjust the state machine, to meet the firmware security design v1.1 - * - * Nov 18 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_RSN_MIGRATION - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if DBG -/*lint -save -e64 Type mismatch */ -static PUINT_8 apucDebugSecState[SEC_STATE_NUM] = { - (PUINT_8)DISP_STRING("SEC_STATE_INIT"), - (PUINT_8)DISP_STRING("SEC_STATE_INITIATOR_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_RESPONDER_PORT_BLOCKED"), - (PUINT_8)DISP_STRING("SEC_STATE_CHECK_OK"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_EAPOL"), - (PUINT_8)DISP_STRING("SEC_STATE_SEND_DEAUTH"), - (PUINT_8)DISP_STRING("SEC_STATE_COUNTERMEASURE"), -}; -/*lint -restore */ -#endif /* DBG */ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - #if 1 /* MT6620 */ - //At MT5921, is ok, but at MT6620, firmware base ASIC, the firmware - //will lost these data, thus, driver have to keep the wep material and - //setting to firmware while awake from D3. - #endif - - prSecInfo->eCurrentState = SEC_STATE_INIT; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - if (IS_STA_IN_AIS(prSta)) { - prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - prAisSpecBssInfo->u4RsnaLastMICFailTime = 0; - prAisSpecBssInfo->fgCheckEAPoLTxDone = FALSE; - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEapolTxTimeout, - (UINT_32)prSta); - - cnmTimerInitTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - (PFN_MGMT_TIMEOUT_FUNC)secFsmEventEndOfCounterMeasure, - (UINT_32)prSta); - - } - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do uninitialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the STA record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID /* whsu:Todo: */ -secFsmUnInit ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - - prSecInfo->fg2nd1xSend = FALSE; - prSecInfo->fgKeyStored = FALSE; - - //nicPrivacyRemoveWlanTable(prSta->ucWTEntry); - - if (IS_STA_IN_AIS(prSta)) { - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - cnmTimerStopTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer); - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* STANDBY to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to INITIATOR_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_INITIATOR_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INIT to RESPONDER_PORT_BLOCKED. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INIT_to_RESPONDER_PORT_BLOCKED ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* INITIATOR_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_INITIATOR_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* RESPONDER_PORT_BLOCKED to CHECK_OK. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_RESPONDER_PORT_BLOCKED_to_CHECK_OK ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - secSetPortBlocked(prAdapter, prSta, FALSE); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* CHECK_OK to SEND_EAPOL -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_CHECK_OK_to_SEND_EAPOL ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - ASSERT(prAdapter); - - ASSERT(prSta); - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo->fgCheckEAPoLTxDone = TRUE; - - //cnmTimerStartTimer(prAdapter, - // &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer, - // SEC_TO_MSEC(EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_EAPOL to SEND_DEAUTH. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - none -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_EAPOL_to_SEND_DEAUTH ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - /* Compose deauth frame to AP, a call back function for tx done */ - if (authSendDeauthFrame(prAdapter, - prSta, - (P_SW_RFB_T)NULL, - REASON_CODE_MIC_FAILURE, - (PFN_TX_DONE_HANDLER)secFsmEventDeauthTxDone) != WLAN_STATUS_SUCCESS) { - ASSERT(FALSE); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_SEND_DEAUTH_to_COUNTERMEASURE ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - ASSERT(prAdapter); - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - //Start the 60 sec timer - cnmTimerStartTimer(prAdapter, - &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, - SEC_TO_MSEC(COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do action part while in STATE transition of -* SEND_DEAUTH to COUNTERMEASURE. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -__KAL_INLINE__ VOID -secFsmTrans_COUNTERMEASURE_to_INIT ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - - //Clear the counter measure flag - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The Core FSM engine of security module. -* -* \param[in] prSta Pointer to the Sta record -* \param[in] eNextState Enum value of next sec STATE -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmSteps ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta, - IN ENUM_SEC_STATE_T eNextState - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - ASSERT(prSecInfo); - - DEBUGFUNC("secFsmSteps"); - do { - /* Do entering Next State */ - prSecInfo->ePreviousState = prSecInfo->eCurrentState; - - /* Do entering Next State */ -#if DBG - DBGLOG(RSN, STATE, ("\n"MACSTR" TRANSITION: [%s] -> [%s]\n\n", - MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState], - apucDebugSecState[eNextState])); -#else - DBGLOG(RSN, STATE, ("\n"MACSTR" [%d] TRANSITION: [%d] -> [%d]\n\n", - MAC2STR(prSta->aucMacAddr), - DBG_RSN_IDX, - prSecInfo->eCurrentState, - eNextState)); -#endif - prSecInfo->eCurrentState = eNextState; - - fgIsTransition = (BOOLEAN)FALSE; -#if 0 - /* Do tasks of the State that we just entered */ - switch (prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - break; - case SEC_STATE_INITIATOR_PORT_BLOCKED: - break; - case SEC_STATE_RESPONDER_PORT_BLOCKED: - break; - case SEC_STATE_CHECK_OK: - break; - case SEC_STATE_SEND_EAPOL: - break; - case SEC_STATE_SEND_DEAUTH: - break; - case SEC_STATE_COUNTERMEASURE: - break; - default: - ASSERT(0); /* Make sure we have handle all STATEs */ - break; - } -#endif - } - while (fgIsTransition); - - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will do initialization of Security FSM and all variables in -* SEC_INFO_T. -* -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStart ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - ENUM_SEC_STATE_T eNextState; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart\n")); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - DBGLOG(RSN, TRACE, ("secFsmRunEventStart for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - //prSta->fgTransmitKeyExist = FALSE; - //whsu:: nicPrivacySetStaDefaultWTIdx(prSta); - -#if 1 /* Since the 1x and key can set to firmware in order, always enter the check ok state */ - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); -#else - if (IS_STA_IN_AIS(prSta->eStaType)) { - if (secRsnKeyHandshakeEnabled(prAdapter) == TRUE -#if CFG_SUPPORT_WAPI - || (prAdapter->rWifiVar.rConnSettings.fgWapiMode) -#endif - ) { - prSta->fgTransmitKeyExist = FALSE; - //nicPrivacyInitialize(prSta->ucNetTypeIndex); - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); - } - } -#if CFG_ENABLE_WIFI_DIRECT || CFG_ENABLE_BT_OVER_WIFI - #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_BT_OVER_WIFI - else if ((prSta->eStaType == STA_TYPE_BOW_CLIENT) || - (prSta->eStaType == STA_TYPE_P2P_GC)) - #elif CFG_ENABLE_WIFI_DIRECT - else if (prSta->eStaType == STA_TYPE_P2P_GC) - #elif CFG_ENABLE_BT_OVER_WIFI - else if (prSta->eStaType == STA_TYPE_BOW_CLIENT) - #endif - { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, RESPONDER_PORT_BLOCKED); - } -#endif - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); - } -#endif - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -} /* secFsmRunEventStart */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function called by reset procedure to force the sec fsm enter -* idle state -* -* \param[in] ucNetTypeIdx The Specific Network type index -* \param[in] prSta Pointer to the Sta record -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventAbort ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - - DBGLOG(RSN, TRACE, ("secFsmEventAbort for sta "MACSTR" network %d\n", - MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); - - ASSERT(prSta); - - if (!prSta) - return; - - if (!IS_STA_IN_AIS(prSta)) - return; - - prSecInfo = (P_SEC_INFO_T)&prSta->rSecInfo; - - prSta->fgTransmitKeyExist = FALSE; - - secSetPortBlocked(prAdapter, prSta, TRUE); - - if (prSecInfo == NULL) - return; - - if (IS_STA_IN_AIS(prSta)) { - - prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; - - if (prSecInfo->eCurrentState == SEC_STATE_SEND_EAPOL) { - if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone == FALSE) { - DBGLOG(RSN, TRACE, ("EAPOL STATE not match the flag\n")); - //cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); - } - } - } - prSecInfo->eCurrentState = SEC_STATE_INIT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "2nd EAPoL Tx is sending" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent2ndEapolTx ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - //BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEvent2ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR" Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR" Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = TRUE; - break; - default: -#if DBG - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv 2nd EAPoL at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent2ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "4th EAPoL Tx is Tx done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEvent4ndEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_CMD_802_11_KEY prStoredKey; - - DEBUGFUNC("secFsmRunEvent4ndEapolTx"); - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INITIATOR_PORT_BLOCKED : - case SEC_STATE_CHECK_OK : - prSecInfo->fg2nd1xSend = FALSE; - if (prSecInfo->fgKeyStored) { - prStoredKey = (P_CMD_802_11_KEY)prSecInfo->aucStoredKey; - - //prSta = rxmLookupStaRecIndexFromTA(prStoredKey->aucPeerAddr); - //if (nicPrivacySetKeyEntry(prStoredKey, prSta->ucWTEntry) == FALSE) - // DBGLOG(RSN, WARN, ("nicPrivacySetKeyEntry() fail,..\n")); - - //key update - prSecInfo->fgKeyStored = FALSE; - prSta->fgTransmitKeyExist = TRUE; - } - if (prSecInfo->eCurrentState == SEC_STATE_INITIATOR_PORT_BLOCKED) { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - default: - -#if DBG - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at %s\n", apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, WARN, ("Rcv thh EAPoL Tx done at [%d]\n", prSecInfo->eCurrentState)); -#endif - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -}/* secFsmRunEvent4ndEapolTx */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Pairwise key installed" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \retval TRUE The key can be installed to HW -* \retval FALSE The kay conflict with the current key, abort it -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -secFsmEventPTKInstalled ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgStatus = TRUE; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - ASSERT(prSta); - - prSecInfo = &prSta->rSecInfo; - if (prSecInfo == NULL) - return TRUE; /* Not PTK */ - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - eNextState = prSecInfo->eCurrentState; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_INIT: - /* Legacy wep, wpa-none */ - break; - - case SEC_STATE_INITIATOR_PORT_BLOCKED: - if (prSecInfo->fg2nd1xSend) { - } - else { - SEC_STATE_TRANSITION(prAdapter, prSta, INITIATOR_PORT_BLOCKED, CHECK_OK); - } - break; - - case SEC_STATE_RESPONDER_PORT_BLOCKED: - SEC_STATE_TRANSITION(prAdapter, prSta, RESPONDER_PORT_BLOCKED, CHECK_OK); - break; - - - case SEC_STATE_CHECK_OK: - break; - - default: - fgStatus = FALSE; - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return fgStatus; - -} /* end of secFsmRunEventPTKInstalled() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Counter Measure" to SEC FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventStartCounterMeasure ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prSta - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventStartCounterMeasure"); - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - prAdapter->rWifiVar.rAisSpecificBssInfo.u4RsnaLastMICFailTime = 0; - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_CHECK_OK: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = TRUE; - - // dls port control - SEC_STATE_TRANSITION(prAdapter, prSta, CHECK_OK, SEND_EAPOL); - } - break; - - default: - break; - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; - -} /* secFsmRunEventStartCounterMeasure */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "802.1x EAPoL Tx Done" to Sec FSM. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; - - DEBUGFUNC("secFsmRunEventEapolTxDone"); - - ASSERT(prStaRec); - - if (rTxDoneStatus != TX_RESULT_SUCCESS) { - DBGLOG(RSN, INFO, ("Error EAPoL fram fail to send!!\n")); - //ASSERT(0); - return; - } - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; - - ASSERT(prAisBssInfo); - - prSecInfo = &prStaRec->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_EAPOL: - if (prAisBssInfo->fgCheckEAPoLTxDone == FALSE) { - ASSERT(0); - } - - prAisBssInfo->fgCheckEAPoLTxDone = FALSE; - //cnmTimerStopTimer(prAdapter, &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_EAPOL, SEND_DEAUTH); - break; - default: - break; - } - - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prStaRec, eNextState); - } - - return; - -}/* secFsmRunEventEapolTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will indicate an Event of "Deauth frame Tx Done" to Sec FSM. -* -* \param[in] pMsduInfo Pointer to the Msdu Info -* \param[in] rStatus The Tx done status -* -* \return - -* -* \note after receive deauth frame, callback function call this -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventDeauthTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventDeauthTxDone"); - - ASSERT(prMsduInfo); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - - if (!prStaRec) - return; - - if (!IS_STA_IN_AIS(prStaRec)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = (P_SEC_INFO_T)&prStaRec->rSecInfo; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - - DBGLOG(RSN, TRACE, ("Set timer %d\n", COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); - - SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_DEAUTH, COUNTERMEASURE); - - break; - - default: - ASSERT(0); - break; - } - - return; -}/* secFsmRunEventDeauthTxDone */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will check the eapol error frame fail to send issue. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEapolTxTimeout ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("secFsmRunEventEapolTxTimeout"); - - prStaRec = (P_STA_RECORD_T)u4Parm; - - ASSERT(prStaRec); - - /* Todo:: How to handle the Eapol Error fail to send case? */ - ASSERT(0); - - return; - -}/* secFsmEventEapolTxTimeout */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will stop the counterMeasure duration. -* -* \param[in] prSta Pointer to the Sta record -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -secFsmEventEndOfCounterMeasure ( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Parm - ) -{ - P_STA_RECORD_T prSta; - P_SEC_INFO_T prSecInfo; - ENUM_SEC_STATE_T eNextState; - BOOLEAN fgIsTransition = (BOOLEAN)FALSE; - - DEBUGFUNC("secFsmRunEventEndOfCounterMeasure"); - - prSta = (P_STA_RECORD_T)u4Parm; - - ASSERT(prSta); - - if (!IS_STA_IN_AIS(prSta)) { - DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); - //ASSERT(0); - return; - } - - prSecInfo = &prSta->rSecInfo; - eNextState = prSecInfo->eCurrentState; - -#if DBG - DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), - apucDebugSecState[prSecInfo->eCurrentState])); -#else - DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); -#endif - - switch(prSecInfo->eCurrentState) { - case SEC_STATE_SEND_DEAUTH: - { - prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = FALSE; - - SEC_STATE_TRANSITION(prAdapter, prSta, COUNTERMEASURE, INIT); - } - break; - - default: - ASSERT(0); - } - - /* Call arbFsmSteps() when we are going to change ARB STATE */ - if (prSecInfo->eCurrentState != eNextState) { - secFsmSteps(prAdapter, prSta, eNextState); - } - - return; -}/* end of secFsmRunEventEndOfCounterMeasure */ -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sources.ce b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sources.ce deleted file mode 100755 index 132fd5bd38ed..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sources.ce +++ /dev/null @@ -1,11 +0,0 @@ -TARGETNAME=$(DRIVER_NAME)_mgmt_$(WINCEDEBUG)_51 -TARGETTYPE=LIBRARY - -INCLUDES=$(_INCLUDES_DIRS) - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER - -C_DEFINES=$(C_DEFINES) -DNDIS51_MINIPORT=1 -D_WIN2K_COMPAT_SLIST_USAGE=1 -CDEFINES=$(CDEFINES) -D$(DEVICE_ID) -DNDIS51_MINIPORT=1 $(_BUILD_MODULE_DEF) - -SOURCES= $(_MGMT_FILES) diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sources.ddk b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sources.ddk deleted file mode 100755 index 2548266f9e23..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/sources.ddk +++ /dev/null @@ -1,11 +0,0 @@ -TARGETPATH=$(_LIB_PATH) -TARGETNAME=$(DRIVER_NAME)_mgmt_51 -TARGETTYPE=DRIVER_LIBRARY - -INCLUDES=$(_INCLUDES_DIRS) - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS51_MINIPORT=1 -C_DEFINES=$(C_DEFINES) -D_WIN2K_COMPAT_SLIST_USAGE=1 -C_DEFINES=$(C_DEFINES) -DNDIS_WDM=1 $(_BUILD_MODULE_DEF) - -SOURCES= $(_MGMT_FILES) diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/swcr.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/swcr.c deleted file mode 100755 index 60164121f09e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/swcr.c +++ /dev/null @@ -1,1238 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/swcr.c#1 $ -*/ - -/*! \file "swcr.c" - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: swcr.c $ - * - * 06 04 2012 tsaiyuan.hsu - * [WCXRP00001249] [ALPS.ICS] Daily build warning on "wlan/mgmt/swcr.c#1" - * resolve build waring for "WNM_UNIT_TEST not defined". - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 15 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * fix debug counters of rx in driver. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 08 31 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * remove obsolete code. - * - * 08 15 2011 tsaiyuan.hsu - * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver - * add swcr in driver reg, 0x9fxx0000, to disable roaming . - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add swcr for test. - * -* -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_SWCR - -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wformat" -#endif -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if 0 -extern SWCR_MAP_ENTRY_T g_arRlmArSwCrMap[]; -SWCR_MOD_MAP_ENTRY_T g_arSwCrAllMaps[] = { - { SWCR_MAP_NUM(g_arRlmArSwCrMap), g_arRlmArSwCrMap}, /* 0x00nn */ - {0,NULL} -}; -#endif - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -void testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1); -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data); - -/* Support Debug */ -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl); -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param); -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ); -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo); - -UINT_32 g_au4SwCr[SWCR_CR_NUM]; /*: 0: command other: data */ - -static TIMER_T g_rSwcrDebugTimer; -static BOOLEAN g_fgSwcrDebugTimer = FALSE; -static UINT_32 g_u4SwcrDebugCheckTimeout = 0; -static ENUM_SWCR_DBG_TYPE_T g_ucSwcrDebugCheckType = 0; -static UINT_32 g_u4SwcrDebugFrameDumpType = 0; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#define TEST_PS 1 - -const static PFN_CMD_RW_T g_arSwCtrlCmd[] ={ - swCtrlCmdCategory0, - swCtrlCmdCategory1 -#if TEST_PS - , testPsCmdCategory0 - , testPsCmdCategory1 -#endif -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) - , testWNMCmdCategory0 -#endif -#endif -}; - - -const PFN_SWCR_RW_T g_arSwCrModHandle[] = { - swCtrlSwCr, - NULL -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -enum { - SWCTRL_MAGIC, - SWCTRL_DEBUG, - SWCTRL_WIFI_VAR, - SWCTRL_ENABLE_INT, - SWCTRL_DISABLE_INT, - SWCTRL_TXM_INFO, - SWCTRL_RXM_INFO, - SWCTRL_DUMP_BSS, - SWCTRL_QM_INFO, - SWCTRL_DUMP_ALL_QUEUE_LEN, - SWCTRL_DUMP_MEM, - SWCTRL_TX_CTRL_INFO, - SWCTRL_DUMP_QUEUE, - SWCTRL_DUMP_QM_DBG_CNT, - SWCTRL_QM_DBG_CNT, - SWCTRL_RX_PKTS_DUMP, - SWCTRL_CATA0_INDEX_NUM -}; - -enum { - SWCTRL_STA_INFO, - SWCTRL_DUMP_STA, - SWCTRL_STA_QUE_INFO, - SWCTRL_CATA1_INDEX_NUM -}; - - - -#if TEST_PS -enum { - TEST_PS_MAGIC, - TEST_PS_SETUP_BSS, - TEST_PS_ENABLE_BEACON, - TEST_PS_TRIGGER_BMC, - TEST_PS_SEND_NULL, - TEST_PS_BUFFER_BMC, - TEST_PS_UPDATE_BEACON, - TEST_PS_CATA0_INDEX_NUM -}; - -enum { - TEST_PS_STA_PS, - TEST_PS_STA_ENTER_PS, - TEST_PS_STA_EXIT_PS, - TEST_PS_STA_TRIGGER_PSPOLL, - TEST_PS_STA_TRIGGER_FRAME, - TEST_PS_CATA1_INDEX_NUM -}; -#endif - -#if CFG_SUPPORT_802_11V -#if WNM_UNIT_TEST -enum { - TEST_WNM_TIMING_MEAS, - TEST_WNM_CATA0_INDEX_NUM -}; -#endif -#endif - - -#define _SWCTRL_MAGIC 0x66201642 - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -void dumpQueue(P_ADAPTER_T prAdapter) -{ - - P_TX_CTRL_T prTxCtrl; - P_QUE_MGT_T prQM; - P_GLUE_INFO_T prGlueInfo; - UINT_32 i; - UINT_32 j; - - - DEBUGFUNC("dumpQueue"); - - prTxCtrl = &prAdapter->rTxCtrl; - prQM = &prAdapter->rQM; - prGlueInfo = prAdapter->prGlueInfo; - - for(i = TC0_INDEX; i<=TC5_INDEX; i++) { - DBGLOG(SW4, INFO,( "TC %u\n",i)); - DBGLOG(SW4, INFO,( "Max %u Free %u\n", - prTxCtrl->rTc.aucMaxNumOfBuffer[i], prTxCtrl->rTc.aucFreeBufferCount[i])); - - DBGLOG(SW4, INFO,("Average %u minReserved %u CurrentTcResource %u GuaranteedTcResource %u\n", - QM_GET_TX_QUEUE_LEN(prAdapter, i), - prQM->au4MinReservedTcResource[i], - prQM->au4CurrentTcResource[i], - prQM->au4GuaranteedTcResource[i])); - - } - - - for(i = 0; iau4HeadStaRecIndex[i],prQM->au4ForwardCount[i])); - } - - DBGLOG(SW4, INFO,( "BMC or unknown TxQueue Len %u\n",prQM->arTxQueue[0].u4NumElem)); - DBGLOG(SW4, INFO,( "Pending %d\n",prGlueInfo->i4TxPendingFrameNum)); - DBGLOG(SW4, INFO,( "Pending Security %d\n",prGlueInfo->i4TxPendingSecurityFrameNum)); -#if defined(LINUX) - for(i=0;i<4;i++){ - for(j=0;jai4TxPendingFrameNumPerQueue[i][j])); - } - } -#endif - - DBGLOG(SW4, INFO,( " rFreeSwRfbList %u\n", prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rReceivedRfbList %u\n", prAdapter->rRxCtrl.rReceivedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " rIndicatedRfbList %u\n", prAdapter->rRxCtrl.rIndicatedRfbList.u4NumElem)); - DBGLOG(SW4, INFO,( " ucNumIndPacket %u\n", prAdapter->rRxCtrl.ucNumIndPacket)); - DBGLOG(SW4, INFO,( " ucNumRetainedPacket %u\n", prAdapter->rRxCtrl.ucNumRetainedPacket)); - - -} - - -void dumpSTA(P_ADAPTER_T prAdapter, P_STA_RECORD_T prStaRec) -{ - UINT_8 ucWTEntry; - UINT_32 i; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("dumpSTA"); - - ASSERT(prStaRec); - ucWTEntry = prStaRec->ucWTEntry; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - DBGLOG(SW4, INFO,("Mac address: " MACSTR " Rcpi %u" "\n", MAC2STR(prStaRec->aucMacAddr),prStaRec->ucRCPI)); - - DBGLOG(SW4, INFO,("Idx %u Wtbl %u Used %u State %u Bss Phy 0x%x Sta DesiredPhy 0x%x\n", - prStaRec->ucIndex, ucWTEntry, - prStaRec->fgIsInUse,prStaRec->ucStaState, - prBssInfo->ucPhyTypeSet, - prStaRec->ucDesiredPhyTypeSet)); - - DBGLOG(SW4, INFO,("Sta Operation 0x%x DesiredNontHtRateSet 0x%x Mcs 0x%x u2HtCapInfo 0x%x\n", - prStaRec->u2OperationalRateSet,prStaRec->u2DesiredNonHTRateSet,prStaRec->ucMcsSet, prStaRec->u2HtCapInfo)); - - - for(i = 0; iarTxQueue[i].u4NumElem)); - } - - DBGLOG(SW4, INFO, ("BmpDeliveryAC %x\n",prStaRec->ucBmpDeliveryAC)); - DBGLOG(SW4, INFO, ("BmpTriggerAC %x\n",prStaRec->ucBmpTriggerAC)); - DBGLOG(SW4, INFO, ("UapsdSpSupproted %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("IsQoS %u\n",prStaRec->fgIsQoS)); - DBGLOG(SW4, INFO, ("AssocId %u\n",prStaRec->u2AssocId)); - - DBGLOG(SW4, INFO, ("fgIsInPS %u\n",prStaRec->fgIsInPS)); - DBGLOG(SW4, INFO, ("ucFreeQuota %u\n",prStaRec->ucFreeQuota)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForDelivery %u\n",prStaRec->ucFreeQuotaForDelivery)); - DBGLOG(SW4, INFO, ("ucFreeQuotaForNonDelivery %u\n",prStaRec->ucFreeQuotaForNonDelivery)); - - -#if 0 - DBGLOG(SW4, INFO, ("IsQmmSup %u\n",prStaRec->fgIsWmmSupported)); - DBGLOG(SW4, INFO, ("IsUapsdSup %u\n",prStaRec->fgIsUapsdSupported)); - DBGLOG(SW4, INFO, ("AvailabaleDeliverPkts %u\n",prStaRec->ucAvailableDeliverPkts)); - DBGLOG(SW4, INFO, ("BmpDeliverPktsAC %u\n",prStaRec->u4BmpDeliverPktsAC)); - DBGLOG(SW4, INFO, ("BmpBufferAC %u\n",prStaRec->u4BmpBufferAC)); - DBGLOG(SW4, INFO, ("BmpNonDeliverPktsAC %u\n",prStaRec->u4BmpNonDeliverPktsAC)); -#endif - - for(i=0;iaprRxReorderParamRefTbl[i]){ - DBGLOG(SW4, INFO,("RxReorder fgIsValid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->fgIsValid)); - DBGLOG(SW4, INFO,("RxReorder Tid: %u\n",prStaRec->aprRxReorderParamRefTbl[i]->ucTid)); - DBGLOG(SW4, INFO,("RxReorder rReOrderQue Len: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->rReOrderQue.u4NumElem)); - DBGLOG(SW4, INFO,("RxReorder WinStart: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinStart)); - DBGLOG(SW4, INFO,("RxReorder WinEnd: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinEnd)); - DBGLOG(SW4, INFO,("RxReorder WinSize: %u\n", prStaRec->aprRxReorderParamRefTbl[i]->u2WinSize)); - } - } - -} - - -VOID dumpBss(P_ADAPTER_T prAdapter, P_BSS_INFO_T prBssInfo) -{ - - DBGLOG(SW4, INFO, ("SSID %s\n",prBssInfo->aucSSID)); - DBGLOG(SW4, INFO, ("OWN " MACSTR"\n",MAC2STR(prBssInfo->aucOwnMacAddr))); - DBGLOG(SW4, INFO, ("BSSID " MACSTR"\n",MAC2STR(prBssInfo->aucBSSID))); - DBGLOG(SW4, INFO, ("ucNetTypeIndex %u\n",prBssInfo->ucNetTypeIndex)); - DBGLOG(SW4, INFO, ("eConnectionState %u\n",prBssInfo->eConnectionState)); - DBGLOG(SW4, INFO, ("eCurrentOPMode %u\n",prBssInfo->eCurrentOPMode)); - DBGLOG(SW4, INFO, ("fgIsQBSS %u\n",prBssInfo->fgIsQBSS)); - DBGLOG(SW4, INFO, ("fgIsShortPreambleAllowed %u\n",prBssInfo->fgIsShortPreambleAllowed)); - DBGLOG(SW4, INFO, ("fgUseShortPreamble %u\n",prBssInfo->fgUseShortPreamble)); - DBGLOG(SW4, INFO, ("fgUseShortSlotTime %u\n",prBssInfo->fgUseShortSlotTime)); - DBGLOG(SW4, INFO, ("ucNonHTBasicPhyType %x\n",prBssInfo->ucNonHTBasicPhyType)); - DBGLOG(SW4, INFO, ("u2OperationalRateSet %x\n",prBssInfo->u2OperationalRateSet)); - DBGLOG(SW4, INFO, ("u2BSSBasicRateSet %x\n",prBssInfo->u2BSSBasicRateSet)); - DBGLOG(SW4, INFO, ("ucPhyTypeSet %x\n",prBssInfo->ucPhyTypeSet)); - DBGLOG(SW4, INFO, ("rStaRecOfClientList %d\n",prBssInfo->rStaRecOfClientList.u4NumElem)); - DBGLOG(SW4, INFO, ("u2CapInfo %x\n",prBssInfo->u2CapInfo)); - DBGLOG(SW4, INFO, ("u2ATIMWindow %x\n",prBssInfo->u2ATIMWindow)); - DBGLOG(SW4, INFO, ("u2AssocId %x\n",prBssInfo->u2AssocId)); - DBGLOG(SW4, INFO, ("ucDTIMPeriod %x\n",prBssInfo->ucDTIMPeriod)); - DBGLOG(SW4, INFO, ("ucDTIMCount %x\n",prBssInfo->ucDTIMCount)); - DBGLOG(SW4, INFO, ("fgIsNetAbsent %x\n", prBssInfo->fgIsNetAbsent)); - DBGLOG(SW4, INFO, ("eBand %d\n", prBssInfo->eBand)); - DBGLOG(SW4, INFO, ("ucPrimaryChannel %d\n", prBssInfo->ucPrimaryChannel)); - DBGLOG(SW4, INFO, ("ucHtOpInfo1 %d\n", prBssInfo->ucHtOpInfo1)); - DBGLOG(SW4, INFO, ("ucHtOpInfo2 %d\n", prBssInfo->u2HtOpInfo2)); - DBGLOG(SW4, INFO, ("ucHtOpInfo3 %d\n", prBssInfo->u2HtOpInfo3)); - DBGLOG(SW4, INFO, ("fgErpProtectMode %d\n", prBssInfo->fgErpProtectMode)); - DBGLOG(SW4, INFO, ("eHtProtectMode %d\n", prBssInfo->eHtProtectMode)); - DBGLOG(SW4, INFO, ("eGfOperationMode %d\n", prBssInfo->eGfOperationMode)); - DBGLOG(SW4, INFO, ("eRifsOperationMode %d\n", prBssInfo->eRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgObssErpProtectMode %d\n", prBssInfo->fgObssErpProtectMode)); - DBGLOG(SW4, INFO, ("eObssHtProtectMode %d\n", prBssInfo->eObssHtProtectMode)); - DBGLOG(SW4, INFO, ("eObssGfProtectMode %d\n", prBssInfo->eObssGfOperationMode)); - DBGLOG(SW4, INFO, ("fgObssRifsOperationMode %d\n", prBssInfo->fgObssRifsOperationMode)); - DBGLOG(SW4, INFO, ("fgAssoc40mBwAllowed %d\n", prBssInfo->fgAssoc40mBwAllowed)); - DBGLOG(SW4, INFO, ("fg40mBwAllowed %d\n", prBssInfo->fg40mBwAllowed)); - DBGLOG(SW4, INFO, ("eBssSCO %d\n", prBssInfo->eBssSCO)); - - -} - - - -VOID swCtrlCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_32 i; - - DEBUGFUNC("swCtrlCmdCategory0"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - i=0; - - if(ucIndex>=SWCTRL_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case SWCTRL_DEBUG: -#if DBG - aucDebugModule[ucOpt0] = (UINT_8)g_au4SwCr[1]; -#endif - break; - case SWCTRL_WIFI_VAR: - break; - -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i] = 0; - } - break; - case SWCTRL_QM_DBG_CNT: - prAdapter->rQM.au4QmDebugCounters[ucOpt0] = g_au4SwCr[1]; - - break; -#endif -#if CFG_RX_PKTS_DUMP - case SWCTRL_RX_PKTS_DUMP: - //DBGLOG(SW4, INFO,("SWCTRL_RX_PKTS_DUMP: mask %x\n", g_au4SwCr[1])); - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = g_au4SwCr[1]; - break; -#endif - default: - break; - } - } - else { - switch(ucIndex) { - case SWCTRL_DEBUG: -#if DBG - g_au4SwCr[1] = aucDebugModule[ucOpt0] ; -#endif - break; - case SWCTRL_MAGIC: - g_au4SwCr[1] = _SWCTRL_MAGIC ; - DBGLOG(SW4, INFO,("BUILD TIME: %s %s\n", __DATE__, __TIME__)); - break; - case SWCTRL_QM_INFO: - { - P_QUE_MGT_T prQM = &prAdapter->rQM; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = (QM_GET_TX_QUEUE_LEN(prAdapter, ucOpt1)) ; - g_au4SwCr[2] = prQM->au4MinReservedTcResource[ucOpt1] ; - g_au4SwCr[3] = prQM->au4CurrentTcResource[ucOpt1]; - g_au4SwCr[4] = prQM->au4GuaranteedTcResource[ucOpt1]; - break; - - case 1: - g_au4SwCr[1] = prQM->au4ForwardCount[ucOpt1]; - g_au4SwCr[2] = prQM->au4HeadStaRecIndex[ucOpt1]; - break; - - case 2: - g_au4SwCr[1] = prQM->arTxQueue[ucOpt1].u4NumElem; /* only one */ - - - break; - } - - } - case SWCTRL_TX_CTRL_INFO: - { - P_TX_CTRL_T prTxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - switch(ucOpt0) { - case 0: - g_au4SwCr[1] = prAdapter->rTxCtrl.rTc.aucFreeBufferCount[ucOpt1]; - g_au4SwCr[2] = prAdapter->rTxCtrl.rTc.aucMaxNumOfBuffer[ucOpt1]; - break; - } - - } - break; - case SWCTRL_DUMP_QUEUE: - dumpQueue(prAdapter); - - break; -#if QM_DEBUG_COUNTER - case SWCTRL_DUMP_QM_DBG_CNT: - for(i=0;irQM.au4QmDebugCounters[i])); - } - break; - - case SWCTRL_QM_DBG_CNT: - g_au4SwCr[1] = prAdapter->rQM.au4QmDebugCounters[ucOpt0]; - break; -#endif - case SWCTRL_DUMP_BSS: - { - dumpBss(prAdapter, &(prAdapter->rWifiVar.arBssInfo[ucOpt0])) ; - } - break; - - default: - break; - } - - } -} - - -VOID swCtrlCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("swCtrlCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - //prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - prStaRec = &prAdapter->arStaRec[ucOpt0]; - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - } - else { - /* Read */ - switch(ucIndex) { - case SWCTRL_STA_QUE_INFO: - { - g_au4SwCr[1] = prStaRec->arTxQueue[ucOpt1].u4NumElem; - } - break; - case SWCTRL_STA_INFO: - switch(ucOpt1) { - case 0: - g_au4SwCr[1] = prStaRec->fgIsInPS; - break; - } - - break; - - case SWCTRL_DUMP_STA: - { - dumpSTA(prAdapter, prStaRec); - } - break; - - default: - - break; - } - } - - -} - -#if TEST_PS - -VOID -testPsSendQoSNullFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUP, - IN UINT_8 ucNetTypeIndex, - IN BOOLEAN fgBMC, - IN BOOLEAN fgIsBurstEnd, - IN BOOLEAN ucPacketType, - IN BOOLEAN ucPsSessionID, - IN BOOLEAN fgSetEOSP - ) -{ - P_MSDU_INFO_T prMsduInfo; - UINT_16 u2EstimatedFrameLen; - P_WLAN_MAC_HEADER_QOS_T prQoSNullFrame; - - - DEBUGFUNC("testPsSendQoSNullFrame"); - DBGLOG(SW4, LOUD, ("\n")); - - //4 <1> Allocate a PKT_INFO_T for Null Frame - /* Init with MGMT Header Length */ - u2EstimatedFrameLen = MAC_TX_RESERVED_FIELD + \ - WLAN_MAC_HEADER_QOS_LEN; - - /* Allocate a MSDU_INFO_T */ - if ( (prMsduInfo = cnmMgtPktAlloc(prAdapter, u2EstimatedFrameLen)) == NULL) { - DBGLOG(SW4, WARN, ("No PKT_INFO_T for sending Null Frame.\n")); - return ; - } - - //4 <2> Compose Null frame in MSDU_INfO_T. - bssComposeQoSNullFrame(prAdapter, - (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD), - prStaRec, - ucUP, - fgSetEOSP); - - - prMsduInfo->eSrc = TX_PACKET_MGMT; - //prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_DATA; - prMsduInfo->ucPacketType = ucPacketType; - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_HEADER_QOS_LEN; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = NULL; - prMsduInfo->fgIsBasicRate = TRUE; - prMsduInfo->fgIsBurstEnd = fgIsBurstEnd; - prMsduInfo->ucUserPriority = ucUP; - prMsduInfo->ucPsSessionID = ucPsSessionID /* 0~7 Test 7 means NOACK*/; - - prQoSNullFrame = (P_WLAN_MAC_HEADER_QOS_T)( (PUINT_8)((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD) ); - - if(fgBMC) { - prQoSNullFrame->aucAddr1[0] = 0xfd; - } - else { - prQoSNullFrame->aucAddr1[5] = 0xdd; - } - - //4 <4> Inform TXM to send this Null frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - -} - - - -VOID -testPsSetupBss( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucNetworkTypeIndex - ) -{ - P_BSS_INFO_T prBssInfo; - UINT_8 _aucZeroMacAddr[] = NULL_MAC_ADDR; - - DEBUGFUNC("testPsSetupBss()"); - DBGLOG(SW4, INFO, ("index %d\n", ucNetworkTypeIndex)); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetworkTypeIndex]); - - //4 <1.2> Initiate PWR STATE - //SET_NET_PWR_STATE_IDLE(prAdapter, ucNetworkTypeIndex); - - - //4 <2> Initiate BSS_INFO_T - common part - BSS_INFO_INIT(prAdapter, ucNetworkTypeIndex); - - prBssInfo->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eConnectionStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prBssInfo->eCurrentOPMode = OP_MODE_ACCESS_POINT; - prBssInfo->fgIsNetActive = TRUE; - prBssInfo->ucNetTypeIndex = (ucNetworkTypeIndex); - prBssInfo->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; - - prBssInfo->ucPhyTypeSet = PHY_TYPE_SET_802_11BG; /* Depend on eBand */ - prBssInfo->ucConfigAdHocAPMode = AP_MODE_MIXED_11BG; /* Depend on eCurrentOPMode and ucPhyTypeSet */ - prBssInfo->u2BSSBasicRateSet = RATE_SET_ERP; - prBssInfo->u2OperationalRateSet = RATE_SET_OFDM; - prBssInfo->fgErpProtectMode = FALSE; - prBssInfo->fgIsQBSS = TRUE; - - //4 <1.5> Setup MIB for current BSS - prBssInfo->u2BeaconInterval = 100; - prBssInfo->ucDTIMPeriod = DOT11_DTIM_PERIOD_DEFAULT; - prBssInfo->u2ATIMWindow = 0; - - prBssInfo->ucBeaconTimeoutCount = 0; - - - bssInitForAP (prAdapter,prBssInfo, TRUE); - - COPY_MAC_ADDR(prBssInfo->aucBSSID, _aucZeroMacAddr); - LINK_INITIALIZE(&prBssInfo->rStaRecOfClientList); - prBssInfo->fgIsBeaconActivated = TRUE; - prBssInfo->ucHwDefaultFixedRateCode = RATE_CCK_1M_LONG; - - - COPY_MAC_ADDR(prBssInfo->aucOwnMacAddr, prAdapter->rWifiVar.aucMacAddress); - - //4 <3> Initiate BSS_INFO_T - private part - /* TODO */ - prBssInfo->eBand = BAND_2G4; - prBssInfo->ucPrimaryChannel = 1; - prBssInfo->prStaRecOfAP = (P_STA_RECORD_T)NULL; - - - //prBssInfo->fgErpProtectMode = eErpProectMode; - //prBssInfo->eHtProtectMode = eHtProtectMode; - //prBssInfo->eGfOperationMode = eGfOperationMode; - - - //4 <4> Allocate MSDU_INFO_T for Beacon - prBssInfo->prBeacon = cnmMgtPktAlloc(prAdapter, - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem[0]) + MAX_IE_LENGTH); - - if (prBssInfo->prBeacon) { - prBssInfo->prBeacon->eSrc = TX_PACKET_MGMT; - prBssInfo->prBeacon->ucNetworkType = ucNetworkTypeIndex; - } - else { - DBGLOG(SW4, INFO, ("prBeacon allocation fail\n")); - } - -#if 0 - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC = PM_UAPSD_ALL; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = WMM_MAX_SP_LENGTH_2; -#else - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC = (UINT_8)prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC =(UINT_8) prAdapter->u4UapsdAcBmp; - prBssInfo->rPmProfSetupInfo.ucUapsdSp = (UINT_8)prAdapter->u4MaxSpLen; -#endif - -#if 0 - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prBssInfo->arACQueParms[eAci].fgIsACMSet = FALSE; - prBssInfo->arACQueParms[eAci].u2Aifsn = (UINT_16) eAci; - prBssInfo->arACQueParms[eAci].u2CWmin = 7; - prBssInfo->arACQueParms[eAci].u2CWmax = 31; - prBssInfo->arACQueParms[eAci].u2TxopLimit = eAci+1; - DBGLOG(SW4, INFO, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci,prBssInfo->arACQueParms[eAci].fgIsACMSet , - prBssInfo->arACQueParms[eAci].u2Aifsn, - prBssInfo->arACQueParms[eAci].u2CWmin, - prBssInfo->arACQueParms[eAci].u2CWmax, - prBssInfo->arACQueParms[eAci].u2TxopLimit)); - - } -#endif - - - DBGLOG(SW4, INFO, ("[2] ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x, ucUapsdSp:0x%x", - prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC, - prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC, - prBssInfo->rPmProfSetupInfo.ucUapsdSp)); - - return; -} - - - - -VOID testPsCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, LOUD, ("Read %u Index %u\n",ucRead,ucIndex)); - - prStaRec = cnmGetStaRecByIndex (prAdapter, 0); - - if(ucIndex>=TEST_PS_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_PS_SETUP_BSS: - testPsSetupBss(prAdapter, ucOpt0) ; - break; - - case TEST_PS_ENABLE_BEACON: - break; - - case TEST_PS_TRIGGER_BMC: - //txmForwardQueuedBmcPkts (ucOpt0); - break; - case TEST_PS_SEND_NULL: - { - - testPsSendQoSNullFrame (prAdapter,prStaRec, - (UINT_8)(g_au4SwCr[1] & 0xFF), /* UP */ - ucOpt0, - (BOOLEAN)((g_au4SwCr[1] >>8)& 0xFF), /* BMC*/ - (BOOLEAN)((g_au4SwCr[1] >>16)& 0xFF), /* BurstEnd*/ - (BOOLEAN)((g_au4SwCr[1] >>24)& 0xFF), /* Packet type*/ - (UINT_8)((g_au4SwCr[2] )& 0xFF), /* PS sesson ID 7: NOACK */ - FALSE /* EOSP */ - ); - } - break; - case TEST_PS_BUFFER_BMC: - //g_aprBssInfo[ucOpt0]->fgApToBufferBMC = (g_au4SwCr[1] & 0xFF); - break; - case TEST_PS_UPDATE_BEACON: - bssUpdateBeaconContent(prAdapter, ucOpt0 /*networktype*/ ); - break; - - default: - break; - } - } - else { - switch(ucIndex) { - - case TEST_PS_MAGIC: - g_au4SwCr[1] = 0x88660011 ; - break; - - } - } -} - -#endif //TEST_PS - -#if TEST_PS - -VOID testPsCmdCategory1(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - UINT_8 ucWTEntry; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testPsCmdCategory1"); - - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - if(ucOpt0>=CFG_STA_REC_NUM) return; - - prStaRec = cnmGetStaRecByIndex (prAdapter, ucOpt0); - ucWTEntry = prStaRec->ucWTEntry; - if(ucRead == SWCR_WRITE) { - - switch(ucIndex) { - case TEST_PS_STA_PS: - prStaRec->fgIsInPS = (BOOLEAN) (g_au4SwCr[1] & 0x1); - prStaRec->fgIsQoS = (BOOLEAN) (g_au4SwCr[1] >>8 & 0xFF); - prStaRec->fgIsUapsdSupported = (BOOLEAN) (g_au4SwCr[1] >>16 & 0xFF); - prStaRec->ucBmpDeliveryAC = (BOOLEAN) (g_au4SwCr[1] >>24 & 0xFF); - break; - - } - - } - else { - /* Read */ - switch(ucIndex) { - default: - break; - } - } - - -} - -#endif //TEST_PS - -#if CFG_SUPPORT_802_11V -#if (CFG_SUPPORT_802_11V_TIMING_MEASUREMENT ==1) && (WNM_UNIT_TEST ==1) -VOID testWNMCmdCategory0(P_ADAPTER_T prAdapter, UINT_8 ucCate, UINT_8 ucAction, UINT_8 ucOpt0,UINT_8 ucOpt1) -{ - UINT_8 ucIndex,ucRead; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("testWNMCmdCategory0"); - SWCR_GET_RW_INDEX(ucAction,ucRead,ucIndex); - - DBGLOG(SW4, INFO, ("Read %u Index %u\n",ucRead,ucIndex)); - - if(ucIndex>=TEST_WNM_CATA0_INDEX_NUM) return; - - if(ucRead == SWCR_WRITE) { - switch(ucIndex) { - case TEST_WNM_TIMING_MEAS: - wnmTimingMeasUnitTest1(prAdapter, ucOpt0) ; - break; - - default: - break; - } - } -} -#endif //TEST_WNM -#endif //CFG_SUPPORT_802_11V - -VOID swCtrlSwCr(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - /* According other register STAIDX */ - UINT_8 ucOffset; - ucOffset = (u2Addr>>2) & 0x3F; - - if(ucOffset>= SWCR_CR_NUM) return; - - if(ucRead==SWCR_WRITE) { - g_au4SwCr[ucOffset] = *pu4Data; - if(ucOffset==0x0) { - /* Commmand [31:24]: Category */ - /* Commmand [23:23]: 1(W) 0(R) */ - /* Commmand [22:16]: Index */ - /* Commmand [15:08]: Option0 */ - /* Commmand [07:00]: Option1 */ - UINT_8 ucCate; - UINT_32 u4Cmd; - u4Cmd = g_au4SwCr[0]; - ucCate = (UINT_8)(u4Cmd >> 24) ; - if(ucCate < sizeof(g_arSwCtrlCmd)/sizeof(g_arSwCtrlCmd[0])) { - if(g_arSwCtrlCmd[ucCate]!=NULL) { - g_arSwCtrlCmd[ucCate](prAdapter, ucCate, (UINT_8)(u4Cmd>>16 & 0xFF),(UINT_8)((u4Cmd>>8) & 0xFF), (UINT_8)(u4Cmd&0xFF)); - } - } - } - } - else { - *pu4Data = g_au4SwCr[ucOffset]; - } -} - -VOID swCrReadWriteCmd(P_ADAPTER_T prAdapter, UINT_8 ucRead, UINT_16 u2Addr, UINT_32 *pu4Data) -{ - UINT_8 ucMod; - - ucMod = u2Addr >>8; - /* Address [15:8] MOD ID */ - /* Address [7:0] OFFSET */ - - DEBUGFUNC("swCrReadWriteCmd"); - DBGLOG(SW4, INFO, ("%u addr 0x%x data 0x%x\n",ucRead,u2Addr,*pu4Data)); - - if(ucMod < (sizeof(g_arSwCrModHandle)/sizeof(g_arSwCrModHandle[0])) ) { - - if(g_arSwCrModHandle[ucMod]!=NULL) { - g_arSwCrModHandle[ucMod](prAdapter, ucRead, u2Addr, pu4Data); - } - } /* ucMod */ -} - -/* Debug Support */ -VOID swCrFrameCheckEnable(P_ADAPTER_T prAdapter, UINT_32 u4DumpType) -{ - g_u4SwcrDebugFrameDumpType = u4DumpType; - prAdapter->rRxCtrl.u4RxPktsDumpTypeMask = u4DumpType; -} - -VOID swCrDebugInit(P_ADAPTER_T prAdapter) -{ - // frame dump - if (g_u4SwcrDebugFrameDumpType) { - swCrFrameCheckEnable(prAdapter, g_u4SwcrDebugFrameDumpType); - } - - // debug counter - g_fgSwcrDebugTimer = FALSE; - - cnmTimerInitTimer(prAdapter, - &g_rSwcrDebugTimer, - (PFN_MGMT_TIMEOUT_FUNC)swCrDebugCheckTimeout, - (UINT_32) NULL); - - if (g_u4SwcrDebugCheckTimeout) { - swCrDebugCheckEnable(prAdapter, TRUE, g_ucSwcrDebugCheckType, g_u4SwcrDebugCheckTimeout); - } -} - -VOID swCrDebugUninit(P_ADAPTER_T prAdapter) -{ - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - - g_fgSwcrDebugTimer = FALSE; -} - -VOID swCrDebugCheckEnable(P_ADAPTER_T prAdapter, BOOLEAN fgIsEnable, UINT_8 ucType, UINT_32 u4Timeout) -{ - if (fgIsEnable) { - g_ucSwcrDebugCheckType = ucType; - g_u4SwcrDebugCheckTimeout = u4Timeout; - if (g_fgSwcrDebugTimer == FALSE) { - swCrDebugCheckTimeout(prAdapter, 0); - } - } - else { - cnmTimerStopTimer(prAdapter, &g_rSwcrDebugTimer); - g_u4SwcrDebugCheckTimeout = 0; - } - - g_fgSwcrDebugTimer = fgIsEnable; -} - -VOID swCrDebugCheck(P_ADAPTER_T prAdapter, P_CMD_SW_DBG_CTRL_T prCmdSwCtrl) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - // dump counters - if (prCmdSwCtrl) { - if (prCmdSwCtrl->u4Data == SWCR_DBG_TYPE_ALL) { - - // TX Counter from fw - DBGLOG(SW4, INFO, ("TX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_BCN_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_FAILED_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_RETRY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_AGING_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_PS_OVERFLOW_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_MGNT_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_TX_ERROR_CNT])); -#if 1 - // TX Counter from drv - DBGLOG(SW4, INFO, ("TX1\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_BSS_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_INACTIVE_STA_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_FORWARD_OVERFLOW_DROP), - (UINT_32)TX_GET_CNT(prTxCtrl, TX_AP_BORADCAST_DROP))); -#endif - - // RX Counter - DBGLOG(SW4, INFO, ("RX0\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_DUP_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TYPE_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_CLASS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_AMPDU_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_STATUS_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FORMAT_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_ICV_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_KEY_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_TKIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_MIC_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_BIP_ERROR_DROP_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_FIFOFULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_RX_PFDROP_CNT])); - - DBGLOG(SW4, INFO, ("RX1\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - (UINT_32)RX_GET_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETURNED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT), - (UINT_32)RX_GET_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT))); - - DBGLOG(SW4, INFO, ("PWR\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PS_POLL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_TRIGGER_NULL_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_IND_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_BCN_TIMEOUT_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_PM_STATE1], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF0], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_PWR_CUR_PS_PROF1])); - - DBGLOG(SW4, INFO, ("ARM\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RATE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_BWGI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_AR_STA0_RX_RATE_RCPI], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ENABLE], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_ROAM_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_ROAMING_INT_CNT])); - - DBGLOG(SW4, INFO, ("BB\n" \ - "%08x %08x %08x %08x\n" \ - "%08x %08x %08x %08x\n", - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_MDRDY_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_RX_FCSERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_PD_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SFDERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_CCK_SIGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_TAGERR_CNT], - prCmdSwCtrl->u4DebugCnt[SWCR_DBG_ALL_BB_OFDM_SIGERR_CNT])); - - } - } - - // start the next check - if (g_u4SwcrDebugCheckTimeout) { - cnmTimerStartTimer(prAdapter, &g_rSwcrDebugTimer, g_u4SwcrDebugCheckTimeout * MSEC_PER_SEC); - } -} - -VOID swCrDebugCheckTimeout( - IN P_ADAPTER_T prAdapter, - UINT_32 u4Param) -{ - CMD_SW_DBG_CTRL_T rCmdSwCtrl; - WLAN_STATUS rStatus; - - rCmdSwCtrl.u4Id = (0xb000<<16) + g_ucSwcrDebugCheckType; - rCmdSwCtrl.u4Data = 0; - rStatus = wlanSendSetQueryCmd ( - prAdapter, /* prAdapter */ - CMD_ID_SW_DBG_CTRL, /* ucCID */ - FALSE, /* fgSetQuery */ - TRUE, /* fgNeedResp */ - FALSE, /* fgIsOid */ - swCrDebugQuery, /* pfCmdDoneHandler */ - swCrDebugQueryTimeout, /* pfCmdTimeoutHandler */ - sizeof(CMD_SW_DBG_CTRL_T), /* u4SetQueryInfoLen */ - (PUINT_8)&rCmdSwCtrl, /* pucInfoBuffer */ - NULL, /* pvSetQueryBuffer */ - 0 /* u4SetQueryBufferLen */ - ); - - ASSERT(rStatus == WLAN_STATUS_PENDING); - - return; -} - -VOID swCrDebugQuery( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, (P_CMD_SW_DBG_CTRL_T)(pucEventBuf)); -} - -VOID swCrDebugQueryTimeout( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo) -{ - ASSERT(prAdapter); - - swCrDebugCheck(prAdapter, NULL); -} - -#endif /* CFG_SUPPORT_SWCR */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/wapi.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/wapi.c deleted file mode 100755 index e2a76aba5cfa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/wapi.c +++ /dev/null @@ -1,564 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/wapi.c#1 $ -*/ - -/*! \file "wapi.c" - \brief This file including the WAPI related function. - - This file provided the macros and functions library support the wapi ie parsing, - cipher and AKM check to help the AP seleced deciding. -*/ - -/******************************************************************************* -* Copyright (c) 2009 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER - -* Copyright (c) 2008 MediaTek Inc. ALL RIGHTS RESERVED. - -* BY OPENING OR USING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES -* AND AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS (¡§MEDIATEK -* SOFTWARE¡¨)RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN ¡§AS IS¡¨ BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. NOR DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTIES -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE. -* BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTIES FOR ANY AND ALL -* WARRANTY CLAIMS RELATING THERETO. MEDIATEK SHALL NOT BE RESPONSIBLE FOR -* ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER¡¦S SPECIFICATION OR CONFORMING -* TO A PARTICULAR STANDARD OR OPEN FORUM. - -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER SHALL BE, -* AT MEDIATEK'S SOLE OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE -* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGES PAID BY BUYER TO -* MEDIATEK FOR SUCH MEDIATEK SOFTWARE. - -* THE MEDIATEK SOFTWARE IS PROVIDED FOR AND ONLY FOR USE WITH MEDIATEK CHIPS -* OR PRODUCTS. EXCEPT AS EXPRESSLY PROVIDED, NO LICENSE IS GRANTED BY -* IMPLICATION OR OTHERWISE UNDER ANY INTELLECTUAL PROPERTY RIGHTS, INCLUDING -* PATENT OR COPYRIGHTS, OF MEDIATEK. UNAUTHORIZED USE, REPRODUCTION, OR -* DISCLOSURE OF THE MEDIATEK SOFTWARE IN WHOLE OR IN PART IS STRICTLY PROHIBITED. - -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE WITH -* THE LAWS OF THE REPUBLIC OF SINGAPORE, EXCLUDING ITS CONFLICT OF LAWS -* PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS RELATING HERETO OR ARISING -* HEREFROM SHALL BE EXCLUSIVELY SETTLED VIA ARBITRATION IN SINGAPORE UNDER THE -* THEN CURRENT ARBITRAL RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE. -* THE LANGUAGE OF ARBITRATION SHALL BE ENGLISH. THE AWARDS OF THE ARBITRATION -* SHALL BE FINAL AND BINDING UPON BOTH PARTIES AND SHALL BE ENTERED AND -* ENFORCEABLE IN ANY COURT OF COMPETENT JURISDICTION. -******************************************************************************** -*/ - -/* -** $Log: wapi.c $ - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the debug module level. - * - * 10 20 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * fixed the network type - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 07 20 2010 wh.su - * - * . - * - * 04 06 2010 wh.su - * [BORA00000680][MT6620] Support the statistic for Microsoft os query - * fixed the firmware return the broadcast frame at wrong tc. - * - * 03 03 2010 wh.su - * [BORA00000637][MT6620 Wi-Fi] [Bug] WPA2 pre-authentication timer not correctly initialize - * move the AIS specific variable for security to AIS specific structure. - * - * 12 18 2009 cm.chang - * [BORA00000018]Integrate WIFI part into BORA for the 1st time - * . - * - * Dec 8 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the function to check and update the default wapi tx - * - * Dec 7 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * adding the generate wapi ie function, and replace the tabe by space - * - * Nov 23 2009 mtk01088 - * [BORA00000476] [Wi-Fi][firmware] Add the security module initialize code - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" -#if CFG_SUPPORT_WAPI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to generate WPA IE for -* associate request frame. -* -* \param[in] prCurrentBss The Selected BSS description -* -* \retval The append WPA IE length -* -* \note -* Called by: AIS module, Associate request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wapiGenerateWAPIIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - PUINT_8 pucBuffer; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - if (prMsduInfo->ucNetworkType != NETWORK_TYPE_AIS_INDEX) - return; - - pucBuffer = (PUINT_8)((UINT_32)prMsduInfo->prPacket + - (UINT_32)prMsduInfo->u2FrameLength); - - /* ASSOC INFO IE ID: 68 :0x44 */ - if (/* prWlanInfo->fgWapiMode && */ prAdapter->prGlueInfo->u2WapiAssocInfoIESz) { - kalMemCopy(pucBuffer, &prAdapter->prGlueInfo->aucWapiAssocInfoIEs, prAdapter->prGlueInfo->u2WapiAssocInfoIESz); - prMsduInfo->u2FrameLength += prAdapter->prGlueInfo->u2WapiAssocInfoIESz; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to parse WAPI IE. -* -* \param[in] prInfoElem Pointer to the RSN IE -* \param[out] prRsnInfo Pointer to the BSSDescription structure to store the -** WAPI information from the given WAPI IE -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiParseWapiIE ( - IN P_WAPI_INFO_ELEM_T prInfoElem, - OUT P_WAPI_INFO_T prWapiInfo - ) -{ - UINT_32 i; - INT_32 u4RemainWapiIeLen; - UINT_16 u2Version; - UINT_16 u2Cap = 0; - UINT_32 u4GroupSuite = WAPI_CIPHER_SUITE_WPI; - UINT_16 u2PairSuiteCount = 0; - UINT_16 u2AuthSuiteCount = 0; - PUCHAR pucPairSuite = NULL; - PUCHAR pucAuthSuite = NULL; - PUCHAR cp; - - DEBUGFUNC("wapiParseWapiIE"); - - ASSERT(prInfoElem); - ASSERT(prWapiInfo); - - /* Verify the length of the WAPI IE. */ - if (prInfoElem->ucLength < 6) { - DBGLOG(SEC, TRACE, ("WAPI IE length too short (length=%d)\n", prInfoElem->ucLength)); - return FALSE; - } - - /* Check WAPI version: currently, we only support version 1. */ - WLAN_GET_FIELD_16(&prInfoElem->u2Version, &u2Version); - if (u2Version != 1) { - DBGLOG(SEC, TRACE, ("Unsupported WAPI IE version: %d\n", u2Version)); - return FALSE; - } - - cp = (PUCHAR) &prInfoElem->u2AuthKeyMgtSuiteCount; - u4RemainWapiIeLen = (INT_32) prInfoElem->ucLength - 2; - - do { - if (u4RemainWapiIeLen == 0) { - break; - } - - /* - AuthCount : 2 - AuthSuite : 4 * authSuiteCount - PairwiseCount: 2 - PairwiseSuite: 4 * pairSuiteCount - GroupSuite : 4 - Cap : 2 */ - - /* Parse the Authentication and Key Management Cipher Suite Count - field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2AuthSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Authentication and Key Management Cipher Suite List - field. */ - i = (UINT_32) u2AuthSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in auth & key mgt suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucAuthSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - if (u4RemainWapiIeLen == 0) { - break; - } - - /* Parse the Pairwise Key Cipher Suite Count field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite count (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2PairSuiteCount); - cp += 2; - u4RemainWapiIeLen -= 2; - - /* Parse the Pairwise Key Cipher Suite List field. */ - i = (UINT_32) u2PairSuiteCount * 4; - if (u4RemainWapiIeLen < (INT_32) i) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in pairwise cipher suite list (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - pucPairSuite = cp; - - cp += i; - u4RemainWapiIeLen -= (INT_32) i; - - /* Parse the Group Key Cipher Suite field. */ - if (u4RemainWapiIeLen < 4) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in group cipher suite (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_32(cp, &u4GroupSuite); - cp += 4; - u4RemainWapiIeLen -= 4; - - /* Parse the WAPI u2Capabilities field. */ - if (u4RemainWapiIeLen < 2) { - DBGLOG(SEC, TRACE, ("Fail to parse WAPI IE in WAPI capabilities (IE len: %d)\n", - prInfoElem->ucLength)); - return FALSE; - } - - WLAN_GET_FIELD_16(cp, &u2Cap); - u4RemainWapiIeLen -= 2; - - /* Todo:: BKID support */ - } while (FALSE); - - /* Save the WAPI information for the BSS. */ - - prWapiInfo->ucElemId = ELEM_ID_WAPI; - - prWapiInfo->u2Version = u2Version; - - prWapiInfo->u4GroupKeyCipherSuite = u4GroupSuite; - - DBGLOG(SEC, LOUD, ("WAPI: version %d, group key cipher suite %02x-%02x-%02x-%02x\n", - u2Version, (UCHAR) (u4GroupSuite & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 8) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 16) & 0x000000FF), - (UCHAR) ((u4GroupSuite >> 24) & 0x000000FF))); - - if (pucPairSuite) { - /* The information about the pairwise key cipher suites is present. */ - if (u2PairSuiteCount > MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES) { - u2PairSuiteCount = MAX_NUM_SUPPORTED_WAPI_CIPHER_SUITES; - } - - prWapiInfo->u4PairwiseKeyCipherSuiteCount = (UINT_32) u2PairSuiteCount; - - for (i = 0; i < (UINT_32) u2PairSuiteCount; i++) { - WLAN_GET_FIELD_32(pucPairSuite, - &prWapiInfo->au4PairwiseKeyCipherSuite[i]); - pucPairSuite += 4; - - DBGLOG(SEC, LOUD,("WAPI: pairwise key cipher suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the pairwise key cipher suites is not present. - Use the default chipher suite for WAPI: WPI. */ - prWapiInfo->u4PairwiseKeyCipherSuiteCount = 1; - prWapiInfo->au4PairwiseKeyCipherSuite[0] = WAPI_CIPHER_SUITE_WPI; - - DBGLOG(SEC, LOUD, ("WAPI: pairwise key cipher suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4PairwiseKeyCipherSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4PairwiseKeyCipherSuite[0] >> 24) & 0x000000FF))); - } - - if (pucAuthSuite) { - /* The information about the authentication and key management suites - is present. */ - if (u2AuthSuiteCount > MAX_NUM_SUPPORTED_WAPI_AKM_SUITES) { - u2AuthSuiteCount = MAX_NUM_SUPPORTED_WAPI_AKM_SUITES; - } - - prWapiInfo->u4AuthKeyMgtSuiteCount = (UINT_32) u2AuthSuiteCount; - - for (i = 0; i < (UINT_32) u2AuthSuiteCount; i++) { - WLAN_GET_FIELD_32(pucAuthSuite, &prWapiInfo->au4AuthKeyMgtSuite[i]); - pucAuthSuite += 4; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite [%d]: %02x-%02x-%02x-%02x\n", - (UINT_8)i, (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[i] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[i] >> 24) & 0x000000FF))); - } - } - else { - /* The information about the authentication and key management suites - is not present. Use the default AKM suite for WAPI. */ - prWapiInfo->u4AuthKeyMgtSuiteCount = 1; - prWapiInfo->au4AuthKeyMgtSuite[0] = WAPI_AKM_SUITE_802_1X; - - DBGLOG(SEC, LOUD, ("WAPI: AKM suite: %02x-%02x-%02x-%02x (default)\n", - (UCHAR) (prWapiInfo->au4AuthKeyMgtSuite[0] & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 8) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 16) & 0x000000FF), - (UCHAR) ((prWapiInfo->au4AuthKeyMgtSuite[0] >> 24) & 0x000000FF))); - } - - prWapiInfo->u2WapiCap = u2Cap; - DBGLOG(SEC, LOUD, ("WAPI: cap: 0x%04x\n", prWapiInfo->u2WapiCap)); - - return TRUE; -} /* wapiParseWapiIE */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to perform WAPI policy selection for a given BSS. -* -* \param[in] prAdapter Pointer to the adapter object data area. -* \param[in] prBss Pointer to the BSS description -* -* \retval TRUE - The WAPI policy selection for the given BSS is -* successful. The selected pairwise and group cipher suites -* are returned in the BSS description. -* \retval FALSE - The WAPI policy selection for the given BSS is failed. -* The driver shall not attempt to join the given BSS. -* -* \note The Encrypt status matched score will save to bss for final ap select. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiPerformPolicySelection ( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prBss - ) -{ - UINT_32 i; - UINT_32 u4PairwiseCipher = 0; - UINT_32 u4GroupCipher = 0; - UINT_32 u4AkmSuite = 0; - P_WAPI_INFO_T prBssWapiInfo; - P_WLAN_INFO_T prWlanInfo; - - DEBUGFUNC("wapiPerformPolicySelection"); - - ASSERT(prBss); - - /* Notice!!!! WAPI AP not set the privacy bit for WAI and WAI-PSK at WZC configuration mode */ - prWlanInfo = &prAdapter->rWlanInfo; - - if (prBss->fgIEWAPI) { - prBssWapiInfo = &prBss->rIEWAPI; - } - else { - if (prAdapter->rWifiVar.rConnSettings.fgWapiMode == FALSE) { - DBGLOG(SEC, TRACE,("-- No Protected BSS\n")); - return TRUE; - } - else { - DBGLOG(SEC, TRACE, ("WAPI Information Element does not exist.\n")); - return FALSE; - } - } - - /* Select pairwise/group ciphers */ - for (i = 0; i < prBssWapiInfo->u4PairwiseKeyCipherSuiteCount; i++) { - if (prBssWapiInfo->au4PairwiseKeyCipherSuite[i] == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedPairwiseCipher) { - u4PairwiseCipher = prBssWapiInfo->au4PairwiseKeyCipherSuite[i]; - } - } - if (prBssWapiInfo->u4GroupKeyCipherSuite == - prAdapter->rWifiVar.rConnSettings.u4WapiSelectedGroupCipher) - u4GroupCipher = prBssWapiInfo->u4GroupKeyCipherSuite; - - /* Exception handler */ - /* If we cannot find proper pairwise and group cipher suites to join the - BSS, do not check the supported AKM suites. */ - if (u4PairwiseCipher == 0 || u4GroupCipher == 0) { - DBGLOG(SEC, TRACE, ("Failed to select pairwise/group cipher (0x%08lx/0x%08lx)\n", - u4PairwiseCipher, u4GroupCipher)); - return FALSE; - } - - /* Select AKM */ - /* If the driver cannot support any authentication suites advertised in - the given BSS, we fail to perform RSNA policy selection. */ - /* Attempt to find any overlapping supported AKM suite. */ - for (i = 0; i < prBssWapiInfo->u4AuthKeyMgtSuiteCount; i++) { - if (prBssWapiInfo->au4AuthKeyMgtSuite[i] == prAdapter->rWifiVar.rConnSettings.u4WapiSelectedAKMSuite) { - u4AkmSuite = prBssWapiInfo->au4AuthKeyMgtSuite[i]; - break; - } - } - - if (u4AkmSuite == 0) { - DBGLOG(SEC, TRACE, ("Cannot support any AKM suites\n")); - return FALSE; - } - - DBGLOG(SEC, TRACE, ("Selected pairwise/group cipher: %02x-%02x-%02x-%02x/%02x-%02x-%02x-%02x\n", - (UINT_8) (u4PairwiseCipher & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 8) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 16) & 0x000000FF), - (UINT_8) ((u4PairwiseCipher >> 24) & 0x000000FF), - (UINT_8) (u4GroupCipher & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 8) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 16) & 0x000000FF), - (UINT_8) ((u4GroupCipher >> 24) & 0x000000FF))); - - DBGLOG(SEC, TRACE, ("Selected AKM suite: %02x-%02x-%02x-%02x\n", - (UINT_8) (u4AkmSuite & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 8) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 16) & 0x000000FF), - (UINT_8) ((u4AkmSuite >> 24) & 0x000000FF))); - - return TRUE; -} /* wapiPerformPolicySelection */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is use for wapi mode, to update the current wpi tx idx ? 0 :1 . -* -* \param[in] prStaRec Pointer to the Sta record -* \param[out] ucWlanIdx The Rx status->wlanidx field -* -* \retval TRUE - Succeeded -* \retval FALSE - Failed -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wapiUpdateTxKeyIdx ( - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucWlanIdx - ) -{ - UINT_8 ucKeyId; - - if ((ucWlanIdx & BITS(0, 3)) == CIPHER_SUITE_WPI) { - - ucKeyId = ((ucWlanIdx & BITS(4, 5)) >> 4); - - if (ucKeyId != g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey) { - DBGLOG(RSN, STATE, ("Change wapi key index from %d->%d\n", g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey, ucKeyId)); - g_prWifiVar->rAisSpecificBssInfo.ucWpiActivedPWKey = ucKeyId; - - prStaRec->ucWTEntry = - (ucKeyId == WTBL_AIS_BSSID_WAPI_IDX_0) ? WTBL_AIS_BSSID_WAPI_IDX_0 : WTBL_AIS_BSSID_WAPI_IDX_1; - } - } -} -#endif -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/wnm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/wnm.c deleted file mode 100755 index 154f83cf2c9d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/mgmt/wnm.c +++ /dev/null @@ -1,389 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/mgmt/wnm.c#1 $ -*/ - -/*! \file "wnm.c" - \brief This file includes the 802.11v default vale and functions. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: wnm.c $ - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#if CFG_SUPPORT_802_11V - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define WNM_MAX_TOD_ERROR 0 -#define WNM_MAX_TOA_ERROR 0 -#define MICRO_TO_10NANO(x) ((x)*100) -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -static UINT_8 ucTimingMeasToken = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ); - -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ); - -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ); -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v wnm category action frame. -* -* -* \note -* Called by: Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmWNMAction ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prRxFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - if (prRxFrame->ucAction == ACTION_WNM_TIMING_MEASUREMENT_REQUEST) { - wnmTimingMeasRequest(prAdapter, prSwRfb); - return; - } -#endif - - DBGLOG(WNM, TRACE, ("Unsupport WNM action frame: %d\n", prRxFrame->ucAction)); -} - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to report timing measurement data. -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmReportTimingMeas ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIndex, - IN UINT_32 u4ToD, - IN UINT_32 u4ToA - ) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("wnmReportTimingMeas: u4ToD %x u4ToA %x", u4ToD, u4ToA)); - - if (!prStaRec->rWNMTimingMsmt.ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.u4ToD = MICRO_TO_10NANO(u4ToD); - prStaRec->rWNMTimingMsmt.u4ToA = MICRO_TO_10NANO(u4ToA); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will handle TxDone(TimingMeasurement) Event. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prMsduInfo Pointer to the MSDU_INFO_T. -* @param[in] rTxDoneStatus Return TX status of the Timing Measurement frame. -* -* @retval WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -wnmRunEventTimgingMeasTxDone ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_TX_RESULT_CODE_T rTxDoneStatus - ) -{ - P_STA_RECORD_T prStaRec; - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - DBGLOG(WNM, LOUD, ("EVENT-TX DONE: Current Time = %ld\n", kalGetTimeTick())); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return WLAN_STATUS_SUCCESS; /* For the case of replying ERROR STATUS CODE */ - } - - DBGLOG(WNM, TRACE, ("wnmRunEventTimgingMeasTxDone: ucDialog %d ucFollowUp %d u4ToD %x u4ToA %x", - prStaRec->rWNMTimingMsmt.ucDialogToken, - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken, - prStaRec->rWNMTimingMsmt.u4ToD, - prStaRec->rWNMTimingMsmt.u4ToA)); - - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, NULL); - - return WLAN_STATUS_SUCCESS; - -} /* end of wnmRunEventTimgingMeasTxDone() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will compose the Timing Measurement frame. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] prStaRec Pointer to the STA_RECORD_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmComposeTimingMeasFrame ( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN PFN_TX_DONE_HANDLER pfTxDoneHandler - ) -{ - P_MSDU_INFO_T prMsduInfo; - P_BSS_INFO_T prBssInfo; - P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME prTxFrame; - UINT_16 u2PayloadLen; - - prBssInfo = &prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]; - ASSERT(prBssInfo); - - prMsduInfo = (P_MSDU_INFO_T) cnmMgtPktAlloc(prAdapter, - MAC_TX_RESERVED_FIELD + PUBLIC_ACTION_MAX_LEN); - - if (!prMsduInfo) - return; - - prTxFrame = (P_ACTION_UNPROTECTED_WNM_TIMING_MEAS_FRAME) - ((UINT_32)(prMsduInfo->prPacket) + MAC_TX_RESERVED_FIELD); - - prTxFrame->u2FrameCtrl = MAC_FRAME_ACTION; - - COPY_MAC_ADDR(prTxFrame->aucDestAddr, prStaRec->aucMacAddr); - COPY_MAC_ADDR(prTxFrame->aucSrcAddr, prBssInfo->aucOwnMacAddr); - COPY_MAC_ADDR(prTxFrame->aucBSSID, prBssInfo->aucBSSID); - - prTxFrame->ucCategory = CATEGORY_UNPROTECTED_WNM_ACTION; - prTxFrame->ucAction = ACTION_UNPROTECTED_WNM_TIMING_MEASUREMENT; - - //3 Compose the frame body's frame. - prTxFrame->ucDialogToken = prStaRec->rWNMTimingMsmt.ucDialogToken; - prTxFrame->ucFollowUpDialogToken = prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken; - prTxFrame->u4ToD = prStaRec->rWNMTimingMsmt.u4ToD; - prTxFrame->u4ToA = prStaRec->rWNMTimingMsmt.u4ToA; - prTxFrame->ucMaxToDErr = WNM_MAX_TOD_ERROR; - prTxFrame->ucMaxToAErr = WNM_MAX_TOA_ERROR; - - u2PayloadLen = 2 + ACTION_UNPROTECTED_WNM_TIMING_MEAS_LEN; - - //4 Update information of MSDU_INFO_T - prMsduInfo->ucPacketType = HIF_TX_PACKET_TYPE_MGMT; /* Management frame */ - prMsduInfo->ucStaRecIndex = prStaRec->ucIndex; - prMsduInfo->ucNetworkType = prStaRec->ucNetTypeIndex; - prMsduInfo->ucMacHeaderLength = WLAN_MAC_MGMT_HEADER_LEN; - prMsduInfo->fgIs802_1x = FALSE; - prMsduInfo->fgIs802_11 = TRUE; - prMsduInfo->u2FrameLength = WLAN_MAC_MGMT_HEADER_LEN + u2PayloadLen; - prMsduInfo->ucTxSeqNum = nicIncreaseTxSeqNum(prAdapter); - prMsduInfo->pfTxDoneHandler = pfTxDoneHandler; - prMsduInfo->fgIsBasicRate = FALSE; - - DBGLOG(WNM, TRACE, ("wnmComposeTimingMeasFrame: ucDialogToken %d ucFollowUpDialogToken %d u4ToD %x u4ToA %x\n", - prTxFrame->ucDialogToken, prTxFrame->ucFollowUpDialogToken, - prTxFrame->u4ToD, prTxFrame->u4ToA)); - - //4 Enqueue the frame to send this action frame. - nicTxEnqueueMsdu(prAdapter, prMsduInfo); - - return; - -} /* end of wnmComposeTimingMeasFrame() */ - -/*----------------------------------------------------------------------------*/ -/*! -* -* \brief This routine is called to process the 802.11v timing measurement request. -* -* -* \note -* Handle Rx mgmt request -*/ -/*----------------------------------------------------------------------------*/ -VOID -wnmTimingMeasRequest ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_ACTION_WNM_TIMING_MEAS_REQ_FRAME prRxFrame = NULL; - P_STA_RECORD_T prStaRec; - - prRxFrame = (P_ACTION_WNM_TIMING_MEAS_REQ_FRAME)prSwRfb->pvHeader; - if (!prRxFrame) - return; - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, TRACE, ("IEEE 802.11: Received Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - // reset timing msmt - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = prRxFrame->ucTrigger; - if (!prRxFrame->ucTrigger) - return; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} - -#if WNM_UNIT_TEST -VOID wnmTimingMeasUnitTest1(P_ADAPTER_T prAdapter, UINT_8 ucStaRecIndex) -{ - P_STA_RECORD_T prStaRec; - - prStaRec = cnmGetStaRecByIndex(prAdapter, ucStaRecIndex); - if ((!prStaRec) || (!prStaRec->fgIsInUse)) { - return; - } - - DBGLOG(WNM, INFO, ("IEEE 802.11v: Test Timing Measuremen Request from " - MACSTR"\n", MAC2STR(prStaRec->aucMacAddr))); - - prStaRec->rWNMTimingMsmt.fgInitiator = TRUE; - prStaRec->rWNMTimingMsmt.ucTrigger = 1; - - prStaRec->rWNMTimingMsmt.ucDialogToken = ++ucTimingMeasToken; - prStaRec->rWNMTimingMsmt.ucFollowUpDialogToken = 0; - - wnmComposeTimingMeasFrame(prAdapter, prStaRec, wnmRunEventTimgingMeasTxDone); -} -#endif - -#endif /* CFG_SUPPORT_802_11V_TIMING_MEASUREMENT */ - -#endif /* CFG_SUPPORT_802_11V */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/cmd_buf.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/cmd_buf.c deleted file mode 100755 index ff968a2d3d87..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/cmd_buf.c +++ /dev/null @@ -1,258 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/nic/cmd_buf.c#1 $ -*/ - -/*! \file "cmd_buf.c" - \brief This file contain the management function of internal Command Buffer - for CMD_INFO_T. - - We'll convert the OID into Command Packet and then send to FW. Thus we need - to copy the OID information to Command Buffer for following reasons. - 1. The data structure of OID information may not equal to the data structure of - Command, we cannot use the OID buffer directly. - 2. If the Command was not generated by driver we also need a place to store the - information. - 3. Because the CMD is NOT FIFO when doing memory allocation (CMD will be generated - from OID or interrupt handler), thus we'll use the Block style of Memory Allocation - here. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: cmd_buf.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 02 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. clear prPendingCmdInfo properly - * * 2. while allocating memory for cmdinfo, no need to add extra 4 bytes. -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-10-13 21:59:08 GMT mtk01084 -** remove un-neceasary spaces -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-05-20 12:24:26 GMT mtk01461 -** Increase CMD Buffer - HIF_RX_HW_APPENDED_LEN when doing CMD_INFO_T allocation -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 09:41:08 GMT mtk01461 -** Add init of Driver Domain MCR flag and fix lint MTK WARN -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-17 19:51:45 GMT mtk01461 -** allocation function of CMD_INFO_T -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to initial the MGMT memory pool for CMD Packet. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CMD_INFO_T prCmdInfo; - UINT_32 i; - - ASSERT(prAdapter); - - QUEUE_INITIALIZE(&prAdapter->rFreeCmdList); - - for (i = 0; i < CFG_TX_MAX_CMD_PKT_NUM; i++) { - prCmdInfo = &prAdapter->arHifCmdDesc[i]; - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - } - -} /* end of cmdBufInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Allocate CMD_INFO_T from a free list and MGMT memory pool. -* -* @param[in] prAdapter Pointer to the Adapter structure. -* @param[in] u4Length Length of the frame buffer to allocate. -* -* @retval NULL Pointer to the valid CMD Packet handler -* @retval !NULL Fail to allocat CMD Packet -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -cmdBufAllocateCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Length - ) -{ - P_CMD_INFO_T prCmdInfo; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufAllocateCmdInfo"); - - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - /* Setup initial value in CMD_INFO_T */ - /* Start address of allocated memory */ - prCmdInfo->pucInfoBuffer = - cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4Length); - - if (prCmdInfo->pucInfoBuffer == NULL) { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - prCmdInfo = NULL; - } - else { - prCmdInfo->u2InfoBufLen = 0; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - } - } - - return prCmdInfo; - -} /* end of cmdBufAllocateCmdInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to free the CMD Packet to the MGMT memory pool. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo CMD Packet handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -cmdBufFreeCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("cmdBufFreeCmdInfo"); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo) { - if (prCmdInfo->pucInfoBuffer) { - cnmMemFree(prAdapter, prCmdInfo->pucInfoBuffer); - prCmdInfo->pucInfoBuffer = NULL; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_INSERT_TAIL(&prAdapter->rFreeCmdList, &prCmdInfo->rQueEntry); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - } - - return; - -} /* end of cmdBufFreeCmdPacket() */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/makefile b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/makefile deleted file mode 100755 index 89b63909cac9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source -# file to this component. This file merely indirects to the real make file -# that is shared by all the driver components of the Windows NT DDK -#!INCLUDE $(NTMAKEENV)\makefile.def - -#!INCLUDE $(_MAKEENVROOT)\makefile.def -!INCLUDE $(_WINDOW_MAKE_ROOT)\makefile.def diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic.c deleted file mode 100755 index 8a35188c6d01..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic.c +++ /dev/null @@ -1,4477 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/nic/nic.c#1 $ -*/ - -/*! \file nic.c - \brief Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic.c $ -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync RSSI ignoring when BSS is disconnected -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 05 02 2012 terry.wu - * NULL - * Set the default value of AP StaRec index to "STA_REC_INDEX_NOT_FOUND" in update firmware bss command. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 11 22 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * keep debug counter setting after wake up. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 04 2011 cp.wu - * [WCXRP00001079] [MT5931][Driver] Release pending MMPDU only when BSS is being deactivated - * pre-check for NULL before calling MMPDU free function - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * change the DBGLOG for "\n" and "\r\n". LABEL to LOUD for XLOG - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 11 2011 terry.wu - * NULL - * Rewrite Assert Dump Function for Portability. - * - * 09 20 2011 cm.chang - * [WCXRP00000997] [MT6620 Wi-Fi][Driver][FW] Handle change of BSS preamble type and slot time - * New CMD definition about RLM parameters - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 03 2011 terry.wu - * [WCXRP00000899] [MT6620] [FW] Reply probe rsp in FW for hotspot mode - * Reply Probe Rsp in FW for Hotspot Mode. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 07 11 2011 wh.su - * [WCXRP00000849] [MT6620 Wi-Fi][Driver] Remove some of the WAPI define for make sure the value is initialize, for customer not enable WAPI - * For make sure wapi initial value is set. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * 1. correct logic - * 2. replace only BSS-DESC which doesn't have a valid SSID. - * - * 06 27 2011 cp.wu - * [WCXRP00000815] [MT6620 Wi-Fi][Driver] allow single BSSID with multiple SSID settings to work around some tricky AP which use space character as hidden SSID - * allow to have a single BSSID with multiple SSID to be presented in scanning result - * - * 05 12 2011 puff.wen - * NULL - * FW Assert information dump to driver - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 cp.wu - * [WCXRP00000651] [MT6620 Wi-Fi][Driver] Refine RSSI buffering mechanism - * ROLLBACK due to the special design is to workaround incorrect initial RCPI value coming from firmware domain. - * - * 04 14 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 12 2011 wh.su - * NULL - * enable the p2p check the cipher to set the bssInfo auth mode. - * - * 04 12 2011 wh.su - * NULL - * prepare the code for sync the auth mode and encryption status for P2P and BOW. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 10 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * Fix compiler issue. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * . - * - * 04 07 2011 cp.wu - * [WCXRP00000616] [MT6620 Wi-Fi][Driver] Free memory to pool and kernel in case any unexpected failure happend inside wlanAdapterStart - * implementation of internal error handling of nicAllocateAdapterMemory. - * - * 03 31 2011 chinglan.wang - * [WCXRP00000613] [MT6620 Wi-Fi] [FW] [Driver] BssInfo can get the security mode which is WPA/WPA2/WAPI or not. - * . - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 10 2011 cm.chang - * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module - * Add some functions to let AIS/Tethering or AIS/BOW be the same channel - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 08 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Use kalPrint to print firmware assert info. - * - * 02 01 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * . - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 31 2011 terry.wu - * [WCXRP00000412] [MT6620 Wi-Fi][FW/Driver] Dump firmware assert info at android kernel log - * Print firmware ASSERT info at Android kernel log, driver side - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000372] [MT6620 Wi-Fi][Driver] Check bus access failure inside nicProcessIST() - * check bus error and/or card removal when retrieving interrupt status from HAL - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * 1) correct typo in scan.c - * 2) TX descriptors, RX descriptos and management buffer should use virtually continous buffer instead of physically contineous one - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 12 17 2010 cp.wu - * [WCXRP00000270] [MT6620 Wi-Fi][Driver] Clear issues after concurrent networking support has been merged - * before BSS disconnection is indicated to firmware, all correlated peer should be cleared and freed - * - * 12 07 2010 cm.chang - * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk - * 1. BSSINFO include RLM parameter - * 2. free all sta records when network is disconnected - * - * 12 02 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add more control value but dont use it now. - * - * 11 30 2010 eddie.chen - * [WCXRP00000218] [MT6620 Wi-Fi][Driver] Add auto rate window control in registry - * Add auto rate check window in registry - * - * 11 10 2010 eddie.chen - * [WCXRP00000156] [MT6620][FW] Change Auto rate window to 64 and add throughput swcr - * Use autorate parameter 1 as phy rate mask. - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 10 26 2010 eddie.chen - * [WCXRP00000134] [MT6620 Wi-Fi][Driver] Add a registry to enable auto rate for SQA test by using E1 EVB - * Add auto rate parameter in registry. - * - * 10 18 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * 1. remove redundant variables in STA_REC structure - * 2. add STA-REC uninitialization routine for clearing pending events - * - * 10 18 2010 cp.wu - * [WCXRP00000103] [MT6620 Wi-Fi][Driver] Driver crashed when using WZC to connect to AP#B with connection with AP#A - * reset ptrs when IEs are going to be dropped - * - * 10 12 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * add HT (802.11n) fixed rate support. - * - * 10 08 2010 cp.wu - * [WCXRP00000084] [MT6620 Wi-Fi][Driver][FW] Add fixed rate support for distance test - * adding fixed rate support for distance test. (from registry setting) - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * load manufacture data when CFG_SUPPORT_NVRAM is set to 1 - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 26 2010 yuche.tsai - * NULL - * Fix someones coding error while enable WIFI_DIRECT. - * - * 08 25 2010 george.huang - * NULL - * update OID/ registry control path for PM related settings - * - * 08 24 2010 cm.chang - * NULL - * Support RLM initail channel of Ad-hoc, P2P and BOW - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 08 23 2010 chinghwa.yu - * NULL - * Update for BOW. - * - * 08 20 2010 yuche.tsai - * NULL - * Add state change indication. - * - * 08 16 2010 yuche.tsai - * NULL - * Add support for P2P BSS update info. - * - * 08 12 2010 cp.wu - * NULL - * [removing debugging] not to dump beacon content. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 04 2010 yarco.yang - * NULL - * Add TX_AMPDU and ADDBA_REJECT command - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 28 2010 cp.wu - * NULL - * 1) eliminate redundant variable eOPMode in prAdapter->rWlanInfo - * 2) change nicMediaStateChange() API prototype - * - * 07 28 2010 cp.wu - * NULL - * sync. CMD_BSS_INFO structure change to CMD-EVENT v0.15. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * FIX: structure of CMD_SET_BSS_INFO has been changed but no follow-ups are done. - * - * 07 22 2010 george.huang - * - * . - * - * 07 22 2010 george.huang - * - * Update fgIsQoS information in BSS INFO by CMD - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * update prStaRecOfAP with BSS-INFO. - * - * 07 06 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Update arguments for nicUpdateBeaconIETemplate() - * - * 07 06 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * STA-REC is maintained by CNM only. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) ignore RSN checking when RSN is not turned on. - * 2) set STA-REC deactivation callback as NULL - * 3) add variable initialization API based on PHY configuration - * - * 07 01 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Support sync command of STA_REC - * - * 06 30 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync. with CMD/EVENT document ver0.07. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * correct variable naming for 8-bit variable used in CMD_BEACON_TEMPLATE_UPDATE. - * - * 06 29 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) sync to. CMD/EVENT document v0.03 - * 2) simplify DTIM period parsing in scan.c only, bss.c no longer parses it again. - * 3) send command packet to indicate FW-PM after - * a) 1st beacon is received after AIS has connected to an AP - * b) IBSS-ALONE has been created - * c) IBSS-MERGE has occured - * - * 06 25 2010 george.huang - * [WPD00001556]Basic power managemenet function - * Create beacon update path, with expose bssUpdateBeaconContent() - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill fgIsUapsdConnection when indicating BSS-CREATE with AIS-STA mode. - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00003827][MT6620 Wi-Fi] Chariot fail and following ping fail, no pkt send from driver - * correct nicProcessIST_impl() for interrupt status brought up by RX enhanced response - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always process TX interrupt first then RX interrupt. - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add checksum offloading support. -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-12-16 18:03:43 GMT mtk02752 -** handling enhanced response which fields are fetched at different moments -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-12-15 17:00:29 GMT mtk02752 -** if RX enhanced response is used, D2H interrupt status should be coming from buffered result as well -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-12-15 12:01:55 GMT mtk02752 -** if TX_DONE bit is not set but WTSR0/WTSR1 is non-zero, then set TX_DONE bit due to time latency of interrupt status enhanced response -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-12-10 16:52:52 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-24 20:51:01 GMT mtk02752 -** integrate with SD1 by invoking qmHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-16 17:32:33 GMT mtk02752 -** prepare code for invoking rxHandleMailboxRxMessage() -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:08 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-09 22:56:41 GMT mtk01084 -** modify HW access routines -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:20 GMT mtk01084 -** prevent warning -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:54:57 GMT mtk01084 -** init HIF -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:30 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:12 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-09-09 17:26:15 GMT mtk01084 -** modify for CFG_TEST_WITH_MT5921 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-19 10:55:22 GMT mtk01461 -** Unmask the unused HISR -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-18 15:59:13 GMT mtk01084 -** remove debug purpose code -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 14:05:02 GMT mtk01084 -** update for WIFI ownback part on initial -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-04 21:32:57 GMT mtk01084 -** add temporarily code to set driver own on adapter initialization -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:35:41 GMT mtk01461 -** Add init of TX aggregation and fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-24 21:12:10 GMT mtk01104 -** Add function nicRestoreSpiDefMode() -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-21 09:43:31 GMT mtk01461 -** Revise for MTK coding style - nicInitializeAdapter() -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-17 19:52:47 GMT mtk01461 -** Update allocate Adapter Memory for MGMT Memory pool -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:57:08 GMT mtk01461 -** Refine the order of release memory from pucRxCoalescingBufCached -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-19 18:32:57 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:00:14 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:27 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:25:59 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const UINT_8 aucPhyCfg2PhyTypeSet[PHY_CONFIG_NUM] = -{ - PHY_TYPE_SET_802_11ABG, /* PHY_CONFIG_802_11ABG */ - PHY_TYPE_SET_802_11BG, /* PHY_CONFIG_802_11BG */ - PHY_TYPE_SET_802_11G, /* PHY_CONFIG_802_11G */ - PHY_TYPE_SET_802_11A, /* PHY_CONFIG_802_11A */ - PHY_TYPE_SET_802_11B, /* PHY_CONFIG_802_11B */ - PHY_TYPE_SET_802_11ABGN, /* PHY_CONFIG_802_11ABGN */ - PHY_TYPE_SET_802_11BGN, /* PHY_CONFIG_802_11BGN */ - PHY_TYPE_SET_802_11AN, /* PHY_CONFIG_802_11AN */ - PHY_TYPE_SET_802_11GN /* PHY_CONFIG_802_11GN */ -}; - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - #define REQ_GATING_ENABLE_H2D_INT BIT(31) - #define REQ_GATING_DISABLE_H2D_INT BIT(30) - #define ACK_GATING_ENABLE_D2H_INT BIT(31) - #define ACK_GATING_DISABLE_D2H_INT BIT(30) - - #define GATING_CONTROL_POLL_LIMIT 64 -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -static INT_EVENT_MAP_T arIntEventMapTable[] = { - {WHISR_ABNORMAL_INT, INT_EVENT_ABNORMAL}, - {WHISR_D2H_SW_INT, INT_EVENT_SW_INT}, - {WHISR_TX_DONE_INT, INT_EVENT_TX}, - {(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT), INT_EVENT_RX} -}; - -static const UINT_8 ucIntEventMapSize = (sizeof(arIntEventMapTable) / sizeof(INT_EVENT_MAP_T)); - -static IST_EVENT_FUNCTION apfnEventFuncTable[] = { - nicProcessAbnormalInterrupt, /*!< INT_EVENT_ABNORMAL */ - nicProcessSoftwareInterrupt, /*!< INT_EVENT_SW_INT */ - nicProcessTxInterrupt, /*!< INT_EVENT_TX */ - nicProcessRxInterrupt, /*!< INT_EVENT_RX */ -}; -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*! This macro is used to reduce coding errors inside nicAllocateAdapterMemory() - * and also enhance the readability. - */ -#define LOCAL_NIC_ALLOCATE_MEMORY(pucMem, u4Size, eMemType, pucComment) \ - { \ - DBGLOG(INIT, INFO, ("Allocating %ld bytes for %s.\n", u4Size, pucComment)); \ - if ((pucMem = (PUINT_8)kalMemAlloc(u4Size, eMemType)) == (PUINT_8)NULL) { \ - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for %s.\n", u4Size, pucComment)); \ - break; \ - } \ - ASSERT(((UINT_32)pucMem % 4) == 0); \ - DBGLOG(INIT, INFO, ("Virtual Address = %08lx for %s.\n", (UINT_32)pucMem, pucComment)); \ - } - - - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for the allocation of the data structures -* inside the Adapter structure, include: -* 1. SW_RFB_Ts -* 2. Common coalescing buffer for TX PATH. -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @retval WLAN_STATUS_SUCCESS - Has enough memory. -* @retval WLAN_STATUS_RESOURCES - Memory is not enough. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicAllocateAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS status = WLAN_STATUS_RESOURCES; - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicAllocateAdapterMemory"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - prTxCtrl = &prAdapter->rTxCtrl; - - do { - //4 <0> Reset all Memory Handler - #if CFG_DBG_MGT_BUF - prAdapter->u4MemFreeDynamicCount = 0; - prAdapter->u4MemAllocDynamicCount = 0; - #endif - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - prRxCtrl->pucRxCached = (PUINT_8)NULL; - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - - - //4 <1> Memory for Management Memory Pool and CMD_INFO_T - /* Allocate memory for the CMD_INFO_T and its MGMT memory pool. */ - prAdapter->u4MgtBufCachedSize = MGT_BUFFER_SIZE; - - LOCAL_NIC_ALLOCATE_MEMORY(prAdapter->pucMgtBufCached, - prAdapter->u4MgtBufCachedSize, - VIR_MEM_TYPE, - "COMMON MGMT MEMORY POOL"); - - //4 <2> Memory for RX Descriptor - /* Initialize the number of rx buffers we will have in our queue. */ - /* We may setup ucRxPacketDescriptors by GLUE Layer, and using - * this variable directly. - */ - /* Allocate memory for the SW receive structures. */ - prRxCtrl->u4RxCachedSize = CFG_RX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(SW_RFB_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prRxCtrl->pucRxCached, - prRxCtrl->u4RxCachedSize, - VIR_MEM_TYPE, - "SW_RFB_T"); - - //4 <3> Memory for TX DEscriptor - prTxCtrl->u4TxCachedSize = CFG_TX_MAX_PKT_NUM * \ - ALIGN_4(sizeof(MSDU_INFO_T)); - - LOCAL_NIC_ALLOCATE_MEMORY(prTxCtrl->pucTxCached, - prTxCtrl->u4TxCachedSize, - VIR_MEM_TYPE, - "MSDU_INFO_T"); - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - - /* Allocate memory for the common coalescing buffer. */ - prAdapter->u4CoalescingBufCachedSize = CFG_COALESCING_BUFFER_SIZE > CFG_RX_COALESCING_BUFFER_SIZE ? - CFG_COALESCING_BUFFER_SIZE : CFG_RX_COALESCING_BUFFER_SIZE; - - prAdapter->pucCoalescingBufCached = - kalAllocateIOBuffer(prAdapter->u4CoalescingBufCachedSize); - - if(prAdapter->pucCoalescingBufCached == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for coalescing buffer.\n", prAdapter->u4CoalescingBufCachedSize)); - break; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <5> Memory for enhanced interrupt response - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T) - kalAllocateIOBuffer(sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(prAdapter->prSDIOCtrl == NULL) { - DBGLOG(INIT, ERROR, ("Could not allocate %ld bytes for interrupt response.\n", sizeof(ENHANCE_MODE_DATA_STRUCT_T))); - break; - } - - status = WLAN_STATUS_SUCCESS; - - } - while(FALSE); - - if(status != WLAN_STATUS_SUCCESS) { - nicReleaseAdapterMemory(prAdapter); - } - - return status; - -} /* end of nicAllocateAdapterMemory() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is responsible for releasing the allocated memory by -* nicAllocatedAdapterMemory(). -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicReleaseAdapterMemory ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <5> Memory for enhanced interrupt response - if (prAdapter->prSDIOCtrl) { - kalReleaseIOBuffer((PVOID)prAdapter->prSDIOCtrl, sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - prAdapter->prSDIOCtrl = (P_SDIO_CTRL_T)NULL; - } - - //4 <4> Memory for Common Coalescing Buffer -#if CFG_COALESCING_BUFFER_SIZE || CFG_SDIO_RX_AGG - if (prAdapter->pucCoalescingBufCached) { - kalReleaseIOBuffer((PVOID)prAdapter->pucCoalescingBufCached, prAdapter->u4CoalescingBufCachedSize); - prAdapter->pucCoalescingBufCached = (PUINT_8)NULL; - } -#endif /* CFG_COALESCING_BUFFER_SIZE */ - - //4 <3> Memory for TX Descriptor - if (prTxCtrl->pucTxCached) { - kalMemFree((PVOID)prTxCtrl->pucTxCached, - VIR_MEM_TYPE, - prTxCtrl->u4TxCachedSize); - prTxCtrl->pucTxCached = (PUINT_8)NULL; - } - - //4 <2> Memory for RX Descriptor - if (prRxCtrl->pucRxCached) { - kalMemFree((PVOID)prRxCtrl->pucRxCached, - VIR_MEM_TYPE, - prRxCtrl->u4RxCachedSize); - prRxCtrl->pucRxCached = (PUINT_8)NULL; - } - - //4 <1> Memory for Management Memory Pool - if (prAdapter->pucMgtBufCached) { - kalMemFree((PVOID)prAdapter->pucMgtBufCached, - VIR_MEM_TYPE, - prAdapter->u4MgtBufCachedSize); - prAdapter->pucMgtBufCached = (PUINT_8)NULL; - } - -#if CFG_DBG_MGT_BUF - /* Check if all allocated memories are free */ - ASSERT(prAdapter->u4MemFreeDynamicCount == - prAdapter->u4MemAllocDynamicCount); -#endif - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief disable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicDisableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - prAdapter->fgIsIntEnable = FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief enable global interrupt -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicEnableInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - BOOLEAN fgIsIntEnableCache; - - - ASSERT(prAdapter); - fgIsIntEnableCache = prAdapter->fgIsIntEnable; - - prAdapter->fgIsIntEnable = TRUE; // NOTE(Kevin): It must be placed before MCR GINT write. - - /* If need enable INT and also set LPOwn at the same time. */ - if (prAdapter->fgIsIntEnableWithLPOwnSet) { - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; /* NOTE(Kevin): It's better to place it - * before MCR GINT write. - */ - /* If INT was enabled, only set LPOwn */ - if (fgIsIntEnableCache) { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - prAdapter->fgIsFwOwn = TRUE; - } - /* If INT was not enabled, enable it and also set LPOwn now */ - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET | - WHLPCR_INT_EN_SET); - prAdapter->fgIsFwOwn = TRUE; - } - } - /* If INT was not enabled, enable it now */ - else if (!fgIsIntEnableCache) { - HAL_BYTE_WR(prAdapter, MCR_WHLPCR, WHLPCR_INT_EN_SET); - } - - return; -} /* end of nicEnableInterrupt() */ - - -#if CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief For SDIO enhance mode, set the max rx len and tx status -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOInit ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value = 0; - - ASSERT(prAdapter); - - //4 <1> Check STATUS Buffer is DW alignment. - ASSERT( IS_ALIGN_4( (UINT_32)&prAdapter->prSDIOCtrl->u4WHISR ) ); - - //4 <2> Setup STATUS count. - { - HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value); - - //4 <2.1> Setup the number of maximum RX length to be report - u4Value &= ~(WHCR_MAX_HIF_RX_LEN_NUM); - u4Value |= ((SDIO_MAXIMUM_RX_LEN_NUM << WHCR_OFFSET_MAX_HIF_RX_LEN_NUM)); - - //4 <2.2> Setup RX enhancement mode -#if CFG_SDIO_RX_ENHANCE - u4Value |= WHCR_RX_ENHANCE_MODE_EN; -#else - u4Value &= ~WHCR_RX_ENHANCE_MODE_EN; -#endif /* CFG_SDIO_RX_AGG */ - - HAL_MCR_WR(prAdapter, MCR_WHCR, u4Value); - } - - return; - -} /* end of nicSDIOInit() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read interrupt status from hardware -* -* @param prAdapter pointer to the Adapter handler -* @param the interrupts -* -* @return N/A -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSDIOReadIntStatus ( - IN P_ADAPTER_T prAdapter, - OUT PUINT_32 pu4IntStatus - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - - DEBUGFUNC("nicSDIOReadIntStatus"); - - ASSERT(prAdapter); - ASSERT(pu4IntStatus); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - HAL_PORT_RD(prAdapter, - MCR_WHISR, - sizeof(ENHANCE_MODE_DATA_STRUCT_T), - (PUINT_8)prSDIOCtrl, - sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - *pu4IntStatus = 0; - return; - } - - /* workaround */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - *pu4IntStatus = prSDIOCtrl->u4WHISR; - - return; -} /* end of nicSDIOReadIntStatus() */ -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to read interrupt status and then invoking -* dispatching procedure for the appropriate functions -* corresponding to specific interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4IntStatus = 0; - UINT_32 i; - - DEBUGFUNC("nicProcessIST"); - //DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - - if (prAdapter->rAcpiState == ACPI_STATE_D3) { - DBGLOG(REQ, WARN, ("Fail in set nicProcessIST! (Adapter not ready). ACPI=D%d, Radio=%d\n", - prAdapter->rAcpiState, prAdapter->fgIsRadioOff)); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - nicDisableClockGating(prAdapter); - } -#endif - - for (i = 0; i < CFG_IST_LOOP_COUNT; i++) { - -#if CFG_SDIO_INTR_ENHANCE - nicSDIOReadIntStatus(prAdapter, &u4IntStatus); -#else - HAL_MCR_RD(prAdapter, MCR_WHISR, &u4IntStatus); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - //DBGLOG(INIT, TRACE, ("u4IntStatus: 0x%x\n", u4IntStatus)); - - if (u4IntStatus & ~(WHIER_DEFAULT | WHIER_FW_OWN_BACK_INT_EN)) { - DBGLOG(INTR, WARN, ("Un-handled HISR %#x, HISR = %#x (HIER:0x%x)\n", - (u4IntStatus & ~WHIER_DEFAULT), u4IntStatus, WHIER_DEFAULT)); - u4IntStatus &= WHIER_DEFAULT; - } - - nicProcessIST_impl(prAdapter, u4IntStatus); - - if(u4IntStatus == 0) { - if(i == 0) { - u4Status = WLAN_STATUS_NOT_INDICATING; - } - break; - } - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - nicEnableClockGating(prAdapter); - } -#endif - - return u4Status; -} /* end of nicProcessIST() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief The function used to dispatch the appropriate functions for specific -* interrupt bits -* -* @param prAdapter pointer to the Adapter handler -* u4IntStatus interrupt status bits -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_ADAPTER_NOT_READY -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicProcessIST_impl ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4IntStatus - ) -{ - UINT_32 u4IntCount = 0; - P_INT_EVENT_MAP_T prIntEventMap = NULL; - - ASSERT(prAdapter); - - prAdapter->u4IntStatus = u4IntStatus; - - /* Process each of the interrupt status consequently */ - prIntEventMap = &arIntEventMapTable[0]; - for (u4IntCount = 0; u4IntCount < ucIntEventMapSize; prIntEventMap++, u4IntCount++) { - if (prIntEventMap->u4Int & prAdapter->u4IntStatus) { - if(prIntEventMap->u4Event == INT_EVENT_RX && - prAdapter->fgIsEnterD3ReqIssued == TRUE) { - // ignore - } - else if (apfnEventFuncTable[prIntEventMap->u4Event] != NULL) { - apfnEventFuncTable[prIntEventMap->u4Event](prAdapter); - } - else { - DBGLOG(INTR , WARN, - ("Empty INTR handler! ISAR bit#: %ld, event:%d, func: 0x%x\n", - prIntEventMap->u4Int, prIntEventMap->u4Event, apfnEventFuncTable[prIntEventMap->u4Event])); - - ASSERT(0); // to trap any NULL interrupt handler - } - prAdapter->u4IntStatus &= ~prIntEventMap->u4Int; - } - } - - return WLAN_STATUS_SUCCESS; -} /* end of nicProcessIST_impl() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Verify the CHIP ID -* -* @param prAdapter a pointer to adapter private data structure. -* -* -* @retval TRUE CHIP ID is the same as the setting compiled -* @retval FALSE CHIP ID is different from the setting compiled -*/ -/*----------------------------------------------------------------------------*/ -BOOL -nicVerifyChipID ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4CIR = 0; - - ASSERT(prAdapter); - - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4CIR ); - - DBGLOG(INIT, TRACE,("Chip ID: 0x%x\n", u4CIR & WCIR_CHIP_ID)); - DBGLOG(INIT, TRACE,("Revision ID: 0x%x\n", ((u4CIR & WCIR_REVISION_ID) >> 16))); - - if ((u4CIR & WCIR_CHIP_ID) != MTK_CHIP_REV) { - return FALSE; - } - - prAdapter->ucRevID = (UINT_8)(((u4CIR & WCIR_REVISION_ID) >> 16) & 0xF) ; - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the MCR to the appropriate init value, and verify the init -* value -* -* @param prAdapter a pointer to adapter private data structure. -* -* @return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicMCRInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); - - //4 <0> Initial value -} - -VOID -nicHifInit ( - IN P_ADAPTER_T prAdapter - ) -{ - - ASSERT(prAdapter); -#if 0 - /* reset event */ - nicPutMailbox(prAdapter, 0, 0x52455345); // RESE - nicPutMailbox(prAdapter, 1, 0x545F5746); // T_WF - nicSetSwIntr(prAdapter, BIT(16)); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the Adapter soft variable -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicInitializeAdapter ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - - ASSERT(prAdapter); - - prAdapter->fgIsIntEnableWithLPOwnSet = FALSE; - - do { - if (!nicVerifyChipID(prAdapter)) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - //4 <1> MCR init - nicMCRInit(prAdapter); - - #if CFG_SDIO_INTR_ENHANCE - nicSDIOInit(prAdapter); - #endif /* CFG_SDIO_INTR_ENHANCE */ - - HAL_MCR_WR(prAdapter, MCR_WHIER, WHIER_DEFAULT); - - - //4 <2> init FW HIF - nicHifInit(prAdapter); - } - while (FALSE); - - - return u4Status; -} - - -#if defined(_HIF_SPI) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Restore the SPI Mode Select to default mode, -* this is important while driver is unload, and this must be last mcr -* since the operation will let the hif use 8bit mode access -* -* \param[in] prAdapter a pointer to adapter private data structure. -* \param[in] eGPIO2_Mode GPIO2 operation mode -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -void -nicRestoreSpiDefMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - HAL_MCR_WR(prAdapter, MCR_WCSR, SPICSR_8BIT_MODE_DATA); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessAbnormalInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Value; - - HAL_MCR_RD(prAdapter, MCR_WASR, &u4Value); - DBGLOG(REQ, WARN, ("MCR_WASR: 0x%x \n", u4Value)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessFwOwnBackInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - - return; -} /* end of nicProcessFwOwnBackInterrupt() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief . -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessSoftwareInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4IntrBits; - - ASSERT(prAdapter); - - u4IntrBits = prAdapter->u4IntStatus & BITS(8, 31); - - if((u4IntrBits & WHISR_D2H_SW_ASSERT_INFO_INT) != 0) { - nicPrintFirmwareAssertInfo(prAdapter); -#if CFG_CHIP_RESET_SUPPORT - glSendResetRequest(); -#endif - } - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) - ASSERT((u4IntrBits & (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)) - != (ACK_GATING_ENABLE_D2H_INT | ACK_GATING_DISABLE_D2H_INT)); - - if(u4IntrBits & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - } - - if(u4IntrBits & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - - // Indicate Service Thread for TX - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } -#endif - - DBGLOG(REQ, WARN, ("u4IntrBits: 0x%x \n", u4IntrBits)); - - return; -} /* end of nicProcessSoftwareInterrupt() */ - -VOID -nicPutMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - IN UINT_32 u4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_WR(prAdapter, MCR_H2DSM0R, u4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_WR(prAdapter, MCR_H2DSM1R, u4Data); - } else { - ASSERT(0); - } -} - -VOID -nicGetMailbox ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4MailboxNum, - OUT PUINT_32 pu4Data - ) -{ - if (u4MailboxNum == 0) { - HAL_MCR_RD(prAdapter, MCR_D2HRM0R, pu4Data); - } else if (u4MailboxNum == 1) { - HAL_MCR_RD(prAdapter, MCR_D2HRM1R, pu4Data); - } else { - ASSERT(0); - } -} - -VOID -nicSetSwIntr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4SwIntrBitmap - ) -{ - /* NOTE: - * SW interrup in HW bit 16 is mapping to SW bit 0 (shift 16bit in HW transparancy) - * SW interrupt valid from b0~b15 - */ - ASSERT((u4SwIntrBitmap & BITS(0, 15)) == 0); -// DBGLOG(INIT, TRACE, ("u4SwIntrBitmap: 0x%08x\n", u4SwIntrBitmap)); - - HAL_MCR_WR(prAdapter, MCR_WSICR, u4SwIntrBitmap); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rPendingCmdQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_CMD_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_CMD_INFO_T -nicGetPendingCmdInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - prCmdQue = &prAdapter->rPendingCmdQueue; - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if(prCmdInfo->ucCmdSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - - prCmdInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_PENDING); - - return prCmdInfo; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to dequeue from prAdapter->rTxCtrl.rTxMgmtTxingQueue -* with specified sequential number -* -* @param prAdapter Pointer of ADAPTER_T -* ucSeqNum Sequential Number -* -* @retval - P_MSDU_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -nicGetPendingTxMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucSeqNum - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if(prMsduInfo->ucTxSeqNum == ucSeqNum) - break; - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - return prMsduInfo; -} - -P_MSDU_INFO_T -nicGetPendingStaMMPDU ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx - ) -{ - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_QUE_T prTxingQue = (P_QUE_T)NULL; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - do { - if (prAdapter == NULL) { - - ASSERT(FALSE); - break; - } - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if ((prMsduInfo->ucStaRecIndex == ucStaRecIdx) && (prMsduInfo->pfTxDoneHandler != NULL)) { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfo, - prMsduInfoListHead); - prMsduInfoListHead = prMsduInfo; - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - - } while (FALSE); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - - return prMsduInfoListHead; -} /* nicGetPendingStaMMPDU */ - - -VOID -nicFreePendingTxMsduInfoByNetwork ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - P_QUE_T prTxingQue; - QUE_T rTempQue; - P_QUE_T prTempQue = &rTempQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_MSDU_INFO_T prMsduInfoListHead = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfoListTail = (P_MSDU_INFO_T)NULL; - P_MSDU_INFO_T prMsduInfo = (P_MSDU_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - prTxingQue = &(prAdapter->rTxCtrl.rTxMgmtTxingQueue); - QUEUE_MOVE_ALL(prTempQue, prTxingQue); - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prMsduInfo = (P_MSDU_INFO_T)prQueueEntry; - - if((ENUM_NETWORK_TYPE_INDEX_T)(prMsduInfo->ucNetworkType) == eNetworkType) { - if(prMsduInfoListHead == NULL) { - prMsduInfoListHead = prMsduInfoListTail = prMsduInfo; - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, prMsduInfo); - prMsduInfoListTail = prMsduInfo; - } - } - else { - QUEUE_INSERT_TAIL(prTxingQue, prQueueEntry); - - prMsduInfo = NULL; - } - - QUEUE_REMOVE_HEAD(prTempQue, prQueueEntry, P_QUE_ENTRY_T); - } - QUEUE_CONCATENATE_QUEUES(prTxingQue, prTempQue); - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - /* free */ - if(prMsduInfoListHead) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfoListHead); - } - - return; - -} /* end of nicFreePendingTxMsduInfoByNetwork() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a CMD sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseCmdSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - prAdapter->ucCmdSeqNum++; - ucRetval = prAdapter->ucCmdSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_SEQ_NUM); - - return ucRetval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This procedure is used to retrieve a TX sequence number atomically -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval - UINT_8 -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicIncreaseTxSeqNum ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucRetval; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - prAdapter->ucTxSeqNum++; - ucRetval = prAdapter->ucTxSeqNum; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_SEQ_NUM); - - return ucRetval; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to handle -* media state change event -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicMediaStateChange ( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN P_EVENT_CONNECTION_STATUS prConnectionStatus - ) -{ - P_GLUE_INFO_T prGlueInfo; - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - switch(eNetworkType) { - case NETWORK_TYPE_AIS_INDEX: - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - - /* reset buffered link quality information */ - prAdapter->fgIsLinkQualityValid = FALSE; - prAdapter->fgIsLinkRateValid = FALSE; - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - prAdapter->rWlanInfo.rCurrBssId.eOpMode - = (ENUM_PARAM_OP_MODE_T) prConnectionStatus->ucInfraMode; - - // always indicate to OS according to MSDN (re-association/roaming) - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED) { - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - else { - /* connected -> connected : roaming ? */ - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_ROAM_OUT_FIND_BEST, - NULL, - 0); - } - } - break; - -#if CFG_ENABLE_BT_OVER_WIFI - case NETWORK_TYPE_BOW_INDEX: - break; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - case NETWORK_TYPE_P2P_INDEX: - break; -#endif - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} /* nicMediaStateChange */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4ChannelNum -* -* @retval - Frequency in unit of KHz, 0 for invalid channel number -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicChannelNum2Freq ( - UINT_32 u4ChannelNum - ) -{ - UINT_32 u4ChannelInMHz; - - if(u4ChannelNum >= 1 && u4ChannelNum <= 13) { - u4ChannelInMHz = 2412 + (u4ChannelNum - 1) * 5; - } - else if(u4ChannelNum == 14) { - u4ChannelInMHz = 2484; - } - else if(u4ChannelNum == 133) { - u4ChannelInMHz = 3665; // 802.11y - } - else if(u4ChannelNum == 137) { - u4ChannelInMHz = 3685; // 802.11y - } - else if(u4ChannelNum >= 34 && u4ChannelNum <= 165) { - u4ChannelInMHz = 5000 + u4ChannelNum * 5; - } - else if(u4ChannelNum >= 183 && u4ChannelNum <= 196) { - u4ChannelInMHz = 4000 + u4ChannelNum * 5; - } - else { - u4ChannelInMHz = 0; - } - - return 1000 * u4ChannelInMHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to convert between -* frequency and channel number -* -* @param u4FreqInKHz -* -* @retval - Frequency Number, 0 for invalid freqency -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicFreq2ChannelNum ( - UINT_32 u4FreqInKHz - ) -{ - switch(u4FreqInKHz) { - case 2412000: - return 1; - case 2417000: - return 2; - case 2422000: - return 3; - case 2427000: - return 4; - case 2432000: - return 5; - case 2437000: - return 6; - case 2442000: - return 7; - case 2447000: - return 8; - case 2452000: - return 9; - case 2457000: - return 10; - case 2462000: - return 11; - case 2467000: - return 12; - case 2472000: - return 13; - case 2484000: - return 14; - case 3665000: - return 133; // 802.11y - case 3685000: - return 137; // 802.11y - case 4915000: - return 183; - case 4920000: - return 184; - case 4925000: - return 185; - case 4930000: - return 186; - case 4935000: - return 187; - case 4940000: - return 188; - case 4945000: - return 189; - case 4960000: - return 192; - case 4980000: - return 196; - case 5170000: - return 34; - case 5180000: - return 36; - case 5190000: - return 38; - case 5200000: - return 40; - case 5210000: - return 42; - case 5220000: - return 44; - case 5230000: - return 46; - case 5240000: - return 48; - case 5250000: - return 50; - case 5260000: - return 52; - case 5270000: - return 54; - case 5280000: - return 56; - case 5290000: - return 58; - case 5300000: - return 60; - case 5320000: - return 64; - case 5500000: - return 100; - case 5520000: - return 104; - case 5540000: - return 108; - case 5560000: - return 112; - case 5580000: - return 116; - case 5600000: - return 120; - case 5620000: - return 124; - case 5640000: - return 128; - case 5660000: - return 132; - case 5680000: - return 136; - case 5700000: - return 140; - case 5745000: - return 149; - case 5765000: - return 153; - case 5785000: - return 157; - case 5805000: - return 161; - case 5825000: - return 165; - default: - return 0; - } -} - - -/* firmware command wrapper */ -/* NETWORK (WIFISYS) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to activate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicActivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - P_BSS_INFO_T prBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 1; - - if (((UINT_8) eNetworkTypeIdx) < NETWORK_TYPE_INDEX_NUM) { - prBssInfo = &prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]; - prBssInfo->fg40mBwAllowed = FALSE; - prBssInfo->fgAssoc40mBwAllowed = FALSE; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to deactivate WIFISYS for specified network -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of network type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDeactivateNetwork( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - CMD_BSS_ACTIVATE_CTRL rCmdActivateCtrl; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdActivateCtrl.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdActivateCtrl.ucActive = 0; - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_BSS_ACTIVATE_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_BSS_ACTIVATE_CTRL), - (PUINT_8)&rCmdActivateCtrl, - NULL, - 0); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - nicFreePendingTxMsduInfoByNetwork(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - - return u4Status; -} - - -/* BSS-INFO */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to sync bss info with firmware -* when a new BSS has been connected or disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO type -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBss( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - WLAN_STATUS u4Status; - P_BSS_INFO_T prBssInfo; - CMD_SET_BSS_INFO rCmdSetBssInfo; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - kalMemZero(&rCmdSetBssInfo, sizeof(CMD_SET_BSS_INFO)); - - rCmdSetBssInfo.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdSetBssInfo.ucConnectionState = (UINT_8)prBssInfo->eConnectionState; - rCmdSetBssInfo.ucCurrentOPMode = (UINT_8)prBssInfo->eCurrentOPMode; - rCmdSetBssInfo.ucSSIDLen = (UINT_8)prBssInfo->ucSSIDLen; - kalMemCopy(rCmdSetBssInfo.aucSSID, prBssInfo->aucSSID, prBssInfo->ucSSIDLen); - COPY_MAC_ADDR(rCmdSetBssInfo.aucBSSID, prBssInfo->aucBSSID); - rCmdSetBssInfo.ucIsQBSS = (UINT_8)prBssInfo->fgIsQBSS; - rCmdSetBssInfo.ucNonHTBasicPhyType = prBssInfo->ucNonHTBasicPhyType; - rCmdSetBssInfo.u2OperationalRateSet = prBssInfo->u2OperationalRateSet; - rCmdSetBssInfo.u2BSSBasicRateSet = prBssInfo->u2BSSBasicRateSet; - rCmdSetBssInfo.ucPhyTypeSet = prBssInfo->ucPhyTypeSet; -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(rCmdSetBssInfo.aucOwnMac, prBssInfo->aucOwnMacAddr); - } -#endif - - rlmFillSyncCmdParam(&rCmdSetBssInfo.rBssRlmParam, prBssInfo); - - rCmdSetBssInfo.fgWapiMode = (UINT_8)FALSE; - - if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - rCmdSetBssInfo.ucAuthMode = (UINT_8)prConnSettings->eAuthMode; - rCmdSetBssInfo.ucEncStatus = (UINT_8)prConnSettings->eEncStatus; - rCmdSetBssInfo.fgWapiMode = (UINT_8)prConnSettings->fgWapiMode; - } -#if CFG_ENABLE_BT_OVER_WIFI - else if(rCmdSetBssInfo.ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - //P_CONNECTION_SETTINGS_T prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } -#endif - else { -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - if (kalP2PGetCipher(prAdapter->prGlueInfo)) { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; - } - else { - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_OPEN; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION_DISABLED; - } - rCmdSetBssInfo.fgIsApMode = p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo); - } -#else - rCmdSetBssInfo.ucAuthMode = (UINT_8)AUTH_MODE_WPA2_PSK; - rCmdSetBssInfo.ucEncStatus = (UINT_8)ENUM_ENCRYPTION3_KEY_ABSENT; -#endif - } - - if(eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - - cnmAisInfraConnectNotify(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if ((prAdapter->fgIsP2PRegistered) && - (eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && - (prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) && - (prBssInfo->prStaRecOfAP != NULL)) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - else if (eNetworkTypeIdx == NETWORK_TYPE_BOW_INDEX && - prBssInfo->eCurrentOPMode == OP_MODE_BOW && - prBssInfo->prStaRecOfAP != NULL) { - rCmdSetBssInfo.ucStaRecIdxOfAP = prBssInfo->prStaRecOfAP->ucIndex; - } -#endif - else { - rCmdSetBssInfo.ucStaRecIdxOfAP = STA_REC_INDEX_NOT_FOUND; - } - - u4Status = wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_BSS_INFO, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_SET_BSS_INFO), - (PUINT_8)&rCmdSetBssInfo, - NULL, - 0); - - /* if BSS-INFO is going to be disconnected state, free all correlated station records */ - if(prBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) { - /* clear client list */ - bssClearClientList(prAdapter, prBssInfo); - - /* free all correlated station records */ - cnmStaFreeAllStaByNetType(prAdapter, eNetworkTypeIdx, FALSE); - qmFreeAllByNetType(prAdapter, eNetworkTypeIdx); - kalClearSecurityFramesByNetType(prAdapter->prGlueInfo, eNetworkTypeIdx); - } - - return u4Status; -} - - -/* BSS-INFO Indication (PM) */ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been created. (for AdHoc / P2P-GO) -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssCreated( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CREATED rCmdIndicatePmBssCreated; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssCreated.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssCreated.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssCreated.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssCreated.u2AtimWindow = prBssInfo->u2ATIMWindow; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CREATED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CREATED), - (PUINT_8)&rCmdIndicatePmBssCreated, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been connected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssConnected( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_INDICATE_PM_BSS_CONNECTED rCmdIndicatePmBssConnected; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - - rCmdIndicatePmBssConnected.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - rCmdIndicatePmBssConnected.ucDtimPeriod = prBssInfo->ucDTIMPeriod; - rCmdIndicatePmBssConnected.u2AssocId = prBssInfo->u2AssocId; - rCmdIndicatePmBssConnected.u2BeaconInterval = prBssInfo->u2BeaconInterval; - rCmdIndicatePmBssConnected.u2AtimWindow = prBssInfo->u2ATIMWindow; - - rCmdIndicatePmBssConnected.ucBmpDeliveryAC = prBssInfo->rPmProfSetupInfo.ucBmpDeliveryAC; - rCmdIndicatePmBssConnected.ucBmpTriggerAC = prBssInfo->rPmProfSetupInfo.ucBmpTriggerAC; - - //DBGPRINTF("nicPmIndicateBssConnected: ucBmpDeliveryAC:0x%x, ucBmpTriggerAC:0x%x", - //rCmdIndicatePmBssConnected.ucBmpDeliveryAC, - //rCmdIndicatePmBssConnected.ucBmpTriggerAC); - - if ((eNetworkTypeIdx == NETWORK_TYPE_AIS_INDEX) -#if CFG_ENABLE_WIFI_DIRECT - || ((eNetworkTypeIdx == NETWORK_TYPE_P2P_INDEX) && (prAdapter->fgIsP2PRegistered)) -#endif - ) { - if(prBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE) { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = (UINT_8)prBssInfo->prStaRecOfAP->fgIsUapsdSupported; - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; //@FIXME - } - } - else { - rCmdIndicatePmBssConnected.fgIsUapsdConnection = 0; - } - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_CONNECTED, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_CONNECTED), - (PUINT_8)&rCmdIndicatePmBssConnected, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate PM that -* a BSS has been disconnected -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicPmIndicateBssAbort( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - CMD_INDICATE_PM_BSS_ABORT rCmdIndicatePmBssAbort; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - rCmdIndicatePmBssAbort.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_INDICATE_PM_BSS_ABORT, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_INDICATE_PM_BSS_ABORT), - (PUINT_8)&rCmdIndicatePmBssAbort, - NULL, - 0); -} - -WLAN_STATUS -nicConfigPowerSaveProfile ( - IN P_ADAPTER_T prAdapter, - ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - PARAM_POWER_MODE ePwrMode, - BOOLEAN fgEnCmdEvent - ) -{ - DEBUGFUNC("nicConfigPowerSaveProfile"); - DBGLOG(INIT, TRACE, ("eNetTypeIndex:%d, ePwrMode:%d, fgEnCmdEvent:%d\n", - eNetTypeIndex, ePwrMode, fgEnCmdEvent)); - - ASSERT(prAdapter); - - if (eNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) { - ASSERT(0); - return WLAN_STATUS_NOT_SUPPORTED; - } - -// prAdapter->rWlanInfo.ePowerSaveMode.ucNetTypeIndex = eNetTypeIndex; -// prAdapter->rWlanInfo.ePowerSaveMode.ucPsProfile = (UINT_8)ePwrMode; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucNetTypeIndex = eNetTypeIndex; - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucPsProfile = (UINT_8)ePwrMode; - - printk("Sigma debug: nicConfigPowerSaveProfile ucNetTypeIndex:%d ucPsProfile:%d\n", - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucNetTypeIndex, - prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex].ucPsProfile - ); - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_POWER_SAVE_MODE, - TRUE, - FALSE, - TRUE, - (fgEnCmdEvent ? nicCmdEventSetCommon : NULL), - (fgEnCmdEvent ? nicOidCmdTimeoutCommon : NULL), - sizeof(CMD_PS_PROFILE_T), - (PUINT_8)&(prAdapter->rWlanInfo.arPowerSaveMode[eNetTypeIndex]), - NULL, - sizeof(PARAM_POWER_MODE) - ); - -} /* end of wlanoidSetAcpiDevicePowerStateMode() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to indicate firmware domain -* for beacon generation parameters -* -* @param prAdapter Pointer of ADAPTER_T -* eIeUpdMethod, Update Method -* eNetTypeIndex Index of Network -* u2Capability Capability -* aucIe Pointer to buffer of IEs -* u2IELen Length of IEs -* -* @retval - WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* WLAN_STATUS_PENDING -* WLAN_STATUS_INVALID_DATA -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateBeaconIETemplate ( - IN P_ADAPTER_T prAdapter, - IN ENUM_IE_UPD_METHOD_T eIeUpdMethod, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, - IN UINT_16 u2Capability, - IN PUINT_8 aucIe, - IN UINT_16 u2IELen - ) -{ - P_CMD_BEACON_TEMPLATE_UPDATE prCmdBcnUpdate; - UINT_16 u2CmdBufLen = 0; - P_GLUE_INFO_T prGlueInfo; - P_CMD_INFO_T prCmdInfo; - P_WIFI_CMD_T prWifiCmd; - UINT_8 ucCmdSeqNum; - - DEBUGFUNC("wlanUpdateBeaconIETemplate"); - DBGLOG(INIT, LOUD, ("\n")); - - ASSERT(prAdapter); - prGlueInfo = prAdapter->prGlueInfo; - - if (u2IELen > MAX_IE_LENGTH) { - return WLAN_STATUS_INVALID_DATA; - } - - if (eIeUpdMethod == IE_UPD_METHOD_UPDATE_RANDOM - || eIeUpdMethod == IE_UPD_METHOD_UPDATE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, aucIE) + u2IELen; - } - else if (eIeUpdMethod == IE_UPD_METHOD_DELETE_ALL) { - u2CmdBufLen = OFFSET_OF(CMD_BEACON_TEMPLATE_UPDATE, u2IELen); - } - else { - ASSERT(0); - return WLAN_STATUS_FAILURE; - } - - // prepare command info - prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u2CmdBufLen)); - if (!prCmdInfo) { - DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); - return WLAN_STATUS_FAILURE; - } - - // increase command sequence number - ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); - DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); - - // Setup common CMD Info Packet - prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; - prCmdInfo->eNetworkType = eNetTypeIndex; - prCmdInfo->u2InfoBufLen = (UINT_16)(CMD_HDR_SIZE + u2CmdBufLen); - prCmdInfo->pfCmdDoneHandler = NULL; //@FIXME - prCmdInfo->pfCmdTimeoutHandler = NULL; //@FIXME - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->ucCID = CMD_ID_UPDATE_BEACON_CONTENT; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - prCmdInfo->fgDriverDomainMCR = FALSE; - prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; - prCmdInfo->u4SetInfoLen = u2CmdBufLen; - prCmdInfo->pvInformationBuffer = NULL; - prCmdInfo->u4InformationBufferLength = 0; - - // Setup WIFI_CMD_T (no payload) - prWifiCmd = (P_WIFI_CMD_T)(prCmdInfo->pucInfoBuffer); - prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; - prWifiCmd->ucCID = prCmdInfo->ucCID; - prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; - prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; - - prCmdBcnUpdate = (P_CMD_BEACON_TEMPLATE_UPDATE)(prWifiCmd->aucBuffer); - - // fill beacon updating command - prCmdBcnUpdate->ucUpdateMethod = (UINT_8) eIeUpdMethod; - prCmdBcnUpdate->ucNetTypeIndex = (UINT_8) eNetTypeIndex; - prCmdBcnUpdate->u2Capability = u2Capability; - prCmdBcnUpdate->u2IELen = u2IELen; - if(u2IELen > 0 ) { - kalMemCopy(prCmdBcnUpdate->aucIE, aucIe, u2IELen); - } - - // insert into prCmdQueue - kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - - // wakeup txServiceThread later - GLUE_SET_EVENT(prGlueInfo); - return WLAN_STATUS_PENDING; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to initialization PHY related -* varaibles -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicSetAvailablePhyTypeSet ( - IN P_ADAPTER_T prAdapter - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prAdapter); - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - - if (prConnSettings->eDesiredPhyConfig >= PHY_CONFIG_NUM) { - ASSERT(0); - return; - } - - prAdapter->rWifiVar.ucAvailablePhyTypeSet = - aucPhyCfg2PhyTypeSet[prConnSettings->eDesiredPhyConfig]; - - if (prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_BIT_ERP) { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_ERP_INDEX; - } - /* NOTE(Kevin): Because we don't have N only mode, TBD */ - else /* if (ucNonHTPhyTypeSet & PHY_TYPE_HR_DSSS_INDEX) */ { - prAdapter->rWifiVar.eNonHTBasicPhyType2G4 = PHY_TYPE_HR_DSSS_INDEX; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* eNetworkTypeIdx Index of BSS-INFO -* -* @retval - -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicQmUpdateWmmParms( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_BSS_INFO_T prBssInfo; - CMD_UPDATE_WMM_PARMS_T rCmdUpdateWmmParms; - - ASSERT(prAdapter); - ASSERT(eNetworkTypeIdx < NETWORK_TYPE_INDEX_NUM); - - DBGLOG(QM, EVENT, ("sizeof(AC_QUE_PARMS_T): %d \n", sizeof(AC_QUE_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(CMD_UPDATE_WMM_PARMS): %d \n", sizeof(CMD_UPDATE_WMM_PARMS_T))); - DBGLOG(QM, EVENT, ("sizeof(WIFI_CMD_T): %d \n", sizeof(WIFI_CMD_T))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkTypeIdx]); - rCmdUpdateWmmParms.ucNetTypeIndex = (UINT_8)eNetworkTypeIdx; - kalMemCopy(&rCmdUpdateWmmParms.arACQueParms[0], &prBssInfo->arACQueParms[0], - (sizeof(AC_QUE_PARMS_T)*AC_NUM)); - - rCmdUpdateWmmParms.fgIsQBSS = prBssInfo->fgIsQBSS; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_UPDATE_WMM_PARMS, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_UPDATE_WMM_PARMS_T), - (PUINT_8)&rCmdUpdateWmmParms, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to set auto tx power parameter -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of Auto TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPower( - IN P_ADAPTER_T prAdapter, - IN P_CMD_AUTO_POWER_PARAM_T prAutoPwrParam - ) -{ - DEBUGFUNC("nicSetAutoTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_AUTOPWR_CTRL, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_AUTO_POWER_PARAM_T), - (PUINT_8)prAutoPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update TX power gain corresponding to -* each band/modulation combination -* -* @param prAdapter Pointer of ADAPTER_T -* prTxPwrParam Pointer of TX power parameters -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicSetAutoTxPowerControl( - IN P_ADAPTER_T prAdapter, - IN P_CMD_TX_PWR_T prTxPwrParam - ) -{ - DEBUGFUNC("nicUpdateTxPower"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_TX_PWR, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_TX_PWR_T), - (PUINT_8)prTxPwrParam, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update power offset around 5GHz band -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of 5GHz power offset parameter -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdate5GOffset( - IN P_ADAPTER_T prAdapter, - IN P_CMD_5G_PWR_OFFSET_T pr5GPwrOffset - ) -{ - DEBUGFUNC("nicUpdate5GOffset"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_5G_PWR_OFFSET, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_5G_PWR_OFFSET_T), - (PUINT_8)pr5GPwrOffset, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update DPD calibration result -* -* @param prAdapter Pointer of ADAPTER_T -* pr5GPwrOffset Pointer of parameter for DPD calibration result -* -* @retval WLAN_STATUS_PENDING -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateDPD( - IN P_ADAPTER_T prAdapter, - IN P_CMD_PWR_PARAM_T prDpdCalResult - ) -{ - DEBUGFUNC("nicUpdateDPD"); - - ASSERT(prAdapter); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_PWR_PARAM, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_PWR_PARAM_T), - (PUINT_8)prDpdCalResult, - NULL, - 0); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function starts system service such as timer and -* memory pools -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - // <1> Initialize MGMT Memory pool and STA_REC - cnmMemInit(prAdapter); - cnmStaRecInit(prAdapter); - cmdBufInitialize(prAdapter); - - // <2> Mailbox Initialization - mboxInitialize(prAdapter); - - // <3> Timer Initialization - cnmTimerInitialize(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function reset some specific system service, -* such as STA-REC -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicResetSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitSystemService ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - /* Timer Destruction */ - cnmTimerDestroy(prAdapter); - - /* Mailbox Destruction */ - mboxDestroy(prAdapter); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicInitMGMT ( - IN P_ADAPTER_T prAdapter, - IN P_REG_INFO_T prRegInfo - ) -{ - ASSERT(prAdapter); - - /* CNM Module - initialization */ - cnmInit(prAdapter); - - /* RLM Module - initialization */ - rlmFsmEventInit(prAdapter); - - /* SCN Module - initialization */ - scnInit(prAdapter); - - /* AIS Module - intiailization */ - aisInitializeConnectionSettings(prAdapter, prRegInfo); - aisFsmInit(prAdapter); - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - intiailization */ - roamingFsmInit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - -#if CFG_SUPPORT_SWCR - swCrDebugInit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to update WMM Parms -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUninitMGMT ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SUPPORT_SWCR - swCrDebugUninit(prAdapter); -#endif /* CFG_SUPPORT_SWCR */ - -#if CFG_SUPPORT_ROAMING - /* Roaming Module - unintiailization */ - roamingFsmUninit(prAdapter); -#endif /* CFG_SUPPORT_ROAMING */ - - /* AIS Module - unintiailization */ - aisFsmUninit(prAdapter); - - /* SCN Module - unintiailization */ - scnUninit(prAdapter); - - /* RLM Module - uninitialization */ - rlmFsmEventUninit(prAdapter); - - /* CNM Module - uninitialization */ - cnmUninit(prAdapter); - - return; -} - - -#if (MT6620_E1_ASIC_HIFSYS_WORKAROUND == 1) -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to enable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicEnableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == TRUE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_ENABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_ENABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = TRUE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is to inform firmware to disable MCU clock gating -* -* @param prAdapter Pointer of ADAPTER_T -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicDisableClockGating ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4WHISR = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsClockGatingEnabled == FALSE) { - return WLAN_STATUS_SUCCESS; - } - else { - nicSetSwIntr(prAdapter, REQ_GATING_DISABLE_H2D_INT); - - i = 0; - while(i < GATING_CONTROL_POLL_LIMIT) { - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - return WLAN_STATUS_FAILURE; - } - - HAL_READ_INTR_STATUS(prAdapter, sizeof(UINT_32), (PUINT_8)&u4WHISR); - - if(u4WHISR & ACK_GATING_DISABLE_D2H_INT) { - prAdapter->fgIsClockGatingEnabled = FALSE; - return WLAN_STATUS_SUCCESS; - } - } - - ASSERT(0); - return WLAN_STATUS_PENDING; - } -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param rMacAddr BSSID -* @param prSsid Pointer to SSID -* @param u4Privacy Privacy settings (0: Open / 1: WEP/WPA/WPA2 enabled) -* @param rRssi Received Strength (-10 ~ -200 dBm) -* @param eNetworkType Network Type (a/b/g) -* @param prConfiguration Network Parameter -* @param eOpMode Infra/Ad-Hoc -* @param rSupportedRates Supported basic rates -* @param u2IELength IE Length -* @param pucIEBuf Pointer to Information Elements(IEs) -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicAddScanResult ( - IN P_ADAPTER_T prAdapter, - IN PARAM_MAC_ADDRESS rMacAddr, - IN P_PARAM_SSID_T prSsid, - IN UINT_32 u4Privacy, - IN PARAM_RSSI rRssi, - IN ENUM_PARAM_NETWORK_TYPE_T eNetworkType, - IN P_PARAM_802_11_CONFIG_T prConfiguration, - IN ENUM_PARAM_OP_MODE_T eOpMode, - IN PARAM_RATES_EX rSupportedRates, - IN UINT_16 u2IELength, - IN PUINT_8 pucIEBuf - ) -{ - BOOLEAN bReplace; - UINT_32 i; - UINT_32 u4IdxWeakest = 0; - PARAM_RSSI rWeakestRssi; - UINT_32 u4BufferSize; - - ASSERT(prAdapter); - - rWeakestRssi = (PARAM_RSSI)INT_MAX; - u4BufferSize = sizeof(prAdapter->rWlanInfo.aucScanIEBuf) / sizeof(prAdapter->rWlanInfo.aucScanIEBuf[0]); - - bReplace = FALSE; - - // decide to replace or add - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - // find weakest entry && not connected one - if(UNEQUAL_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, prAdapter->rWlanInfo.rCurrBssId.arMacAddress) - && prAdapter->rWlanInfo.arScanResult[i].rRssi < rWeakestRssi) { - u4IdxWeakest = i; - rWeakestRssi = prAdapter->rWlanInfo.arScanResult[i].rRssi; - } - - if(prAdapter->rWlanInfo.arScanResult[i].eOpMode == eOpMode && - EQUAL_MAC_ADDR(&(prAdapter->rWlanInfo.arScanResult[i].arMacAddress), rMacAddr) && - (EQUAL_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen) - || prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen == 0)) { - // replace entry - bReplace = TRUE; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - break; - } - } - - if (bReplace == FALSE) { - if (prAdapter->rWlanInfo.u4ScanResultNum < (CFG_MAX_NUM_BSS_LIST - 1)) { - i = prAdapter->rWlanInfo.u4ScanResultNum; - - // zero - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - // IE - allocate buffer and update pointer - if(u2IELength > 0) { - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - - prAdapter->rWlanInfo.u4ScanResultNum++; - } - else if(rWeakestRssi != (PARAM_RSSI)INT_MAX) { - // replace weakest one - i = u4IdxWeakest; - - // free IE buffer then zero - nicFreeScanResultIE(prAdapter, i); - kalMemZero(&(prAdapter->rWlanInfo.arScanResult[i]), - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs)); - - // then fill buffer - prAdapter->rWlanInfo.arScanResult[i].u4Length = - OFFSET_OF(PARAM_BSSID_EX_T, aucIEs) + u2IELength; - COPY_MAC_ADDR(prAdapter->rWlanInfo.arScanResult[i].arMacAddress, rMacAddr); - COPY_SSID(prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid, - prAdapter->rWlanInfo.arScanResult[i].rSsid.u4SsidLen, - prSsid->aucSsid, - prSsid->u4SsidLen); - prAdapter->rWlanInfo.arScanResult[i].u4Privacy = u4Privacy; - prAdapter->rWlanInfo.arScanResult[i].rRssi = rRssi; - prAdapter->rWlanInfo.arScanResult[i].eNetworkTypeInUse = eNetworkType; - kalMemCopy(&(prAdapter->rWlanInfo.arScanResult[i].rConfiguration), - prConfiguration, - sizeof(PARAM_802_11_CONFIG_T)); - prAdapter->rWlanInfo.arScanResult[i].eOpMode = eOpMode; - kalMemCopy((prAdapter->rWlanInfo.arScanResult[i].rSupportedRates), - rSupportedRates, - sizeof(PARAM_RATES_EX)); - prAdapter->rWlanInfo.arScanResult[i].u4IELength = (UINT_32)u2IELength; - - if(u2IELength > 0) { - // IE - allocate buffer and update pointer - if(ALIGN_4(u2IELength) + prAdapter->rWlanInfo.u4ScanIEBufferUsage <= u4BufferSize) { - kalMemCopy(&(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]), - pucIEBuf, - u2IELength); - - prAdapter->rWlanInfo.apucScanResultIEs[i] = - &(prAdapter->rWlanInfo.aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage]); - - prAdapter->rWlanInfo.u4ScanIEBufferUsage += ALIGN_4(u2IELength); - } - else { - // buffer is not enough - prAdapter->rWlanInfo.arScanResult[i].u4Length -= u2IELength; - prAdapter->rWlanInfo.arScanResult[i].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - else { - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - } - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is invoked to free IE buffer for dedicated scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4Idx Index of Scan Result -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicFreeScanResultIE ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Idx - ) -{ - UINT_32 i; - PUINT_8 pucPivot, pucMovePivot; - UINT_32 u4MoveSize, u4FreeSize, u4ReserveSize; - - ASSERT(prAdapter); - ASSERT(u4Idx < CFG_MAX_NUM_BSS_LIST); - - if(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength == 0 - || prAdapter->rWlanInfo.apucScanResultIEs[u4Idx] == NULL) { - return; - } - - u4FreeSize = ALIGN_4(prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength); - - pucPivot = prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]; - pucMovePivot = (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[u4Idx]) + u4FreeSize); - - u4ReserveSize = ((UINT_32)pucPivot) - (UINT_32)(&(prAdapter->rWlanInfo.aucScanIEBuf[0])); - u4MoveSize = prAdapter->rWlanInfo.u4ScanIEBufferUsage - u4ReserveSize - u4FreeSize; - - // 1. rest of buffer to move forward - kalMemCopy(pucPivot, pucMovePivot, u4MoveSize); - - // 1.1 modify pointers - for(i = 0 ; i < prAdapter->rWlanInfo.u4ScanResultNum ; i++) { - if(i != u4Idx) { - if(prAdapter->rWlanInfo.apucScanResultIEs[i] >= pucMovePivot) { - prAdapter->rWlanInfo.apucScanResultIEs[i] = - (PUINT_8)((UINT_32)(prAdapter->rWlanInfo.apucScanResultIEs[i]) - u4FreeSize); - } - } - } - - // 1.2 reset the freed one - prAdapter->rWlanInfo.arScanResult[u4Idx].u4IELength = 0; - prAdapter->rWlanInfo.apucScanResultIEs[i] = NULL; - - // 2. reduce IE buffer usage - prAdapter->rWlanInfo.u4ScanIEBufferUsage -= u4FreeSize; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is to hack parameters for WLAN TABLE for -* fixed rate settings -* -* @param prAdapter Pointer to the Adapter structure. -* @param eRateSetting -* @param pu2DesiredNonHTRateSet, -* @param pu2BSSBasicRateSet, -* @param pucMcsSet -* @param pucSupMcs32 -* @param pu2HtCapInfo -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicUpdateRateParams ( - IN P_ADAPTER_T prAdapter, - IN ENUM_REGISTRY_FIXED_RATE_T eRateSetting, - IN PUINT_8 pucDesiredPhyTypeSet, - IN PUINT_16 pu2DesiredNonHTRateSet, - IN PUINT_16 pu2BSSBasicRateSet, - IN PUINT_8 pucMcsSet, - IN PUINT_8 pucSupMcs32, - IN PUINT_16 pu2HtCapInfo - ) -{ - ASSERT(prAdapter); - ASSERT(eRateSetting > FIXED_RATE_NONE && eRateSetting < FIXED_RATE_NUM); - - switch(prAdapter->rWifiVar.eRateSetting) { - case FIXED_RATE_1M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_1M; - *pu2BSSBasicRateSet = RATE_SET_BIT_1M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_2M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_2M; - *pu2BSSBasicRateSet = RATE_SET_BIT_2M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_5_5M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_5_5M; - *pu2BSSBasicRateSet = RATE_SET_BIT_5_5M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_11M: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HR_DSSS; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_11M; - *pu2BSSBasicRateSet = RATE_SET_BIT_11M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_6M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_6M; - *pu2BSSBasicRateSet = RATE_SET_BIT_6M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_9M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_9M; - *pu2BSSBasicRateSet = RATE_SET_BIT_9M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_12M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_12M; - *pu2BSSBasicRateSet = RATE_SET_BIT_12M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_18M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_18M; - *pu2BSSBasicRateSet = RATE_SET_BIT_18M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_24M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_24M; - *pu2BSSBasicRateSet = RATE_SET_BIT_24M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_36M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_36M; - *pu2BSSBasicRateSet = RATE_SET_BIT_36M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_48M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_48M; - *pu2BSSBasicRateSet = RATE_SET_BIT_48M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_54M: - if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_ERP) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_ERP; - } - else if((*pucDesiredPhyTypeSet) | PHY_TYPE_BIT_OFDM) { - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_OFDM; - } - - *pu2DesiredNonHTRateSet = RATE_SET_BIT_54M; - *pu2BSSBasicRateSet = RATE_SET_BIT_54M; - *pucMcsSet = 0; - *pucSupMcs32 = 0; - *pu2HtCapInfo = 0; - break; - - case FIXED_RATE_MCS0_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS1_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS2_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS3_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS4_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS5_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS6_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS7_20M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - break; - - case FIXED_RATE_MCS0_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS1_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS2_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS3_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS4_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS5_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS6_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS7_20M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SHORT_GI_20M; - break; - - case FIXED_RATE_MCS0_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS1_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS2_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS3_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS4_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS5_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS6_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS7_40M_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS32_800NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_SHORT_GI_40M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= HT_CAP_INFO_SUP_CHNL_WIDTH; - break; - - case FIXED_RATE_MCS0_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS0_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS1_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS1_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS2_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS2_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS3_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS3_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS4_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS4_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS5_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS5_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS6_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS6_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS7_40M_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS7_INDEX; - *pucSupMcs32 = 0; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - case FIXED_RATE_MCS32_400NS: - *pucDesiredPhyTypeSet = PHY_TYPE_BIT_HT; - *pu2DesiredNonHTRateSet = RATE_SET_BIT_HT_PHY; - *pu2BSSBasicRateSet = RATE_SET_BIT_HT_PHY; - *pucMcsSet = HT_RATE_MCS32_INDEX; - *pucSupMcs32 = 1; - (*pu2HtCapInfo) &= ~(HT_CAP_INFO_SHORT_GI_20M - | HT_CAP_INFO_HT_GF); - (*pu2HtCapInfo) |= (HT_CAP_INFO_SUP_CHNL_WIDTH - | HT_CAP_INFO_SHORT_GI_40M); - break; - - default: - ASSERT(0); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to write the register -* -* @param u4Address Register address -* u4Value the value to be written -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicWriteMcr ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4Address, - IN UINT_32 u4Value - ) -{ - CMD_ACCESS_REG rCmdAccessReg; - - rCmdAccessReg.u4Address = u4Address; - rCmdAccessReg.u4Data = u4Value; - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_ACCESS_REG, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_ACCESS_REG), - (PUINT_8)&rCmdAccessReg, - NULL, - 0 - ); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to modify the auto rate parameters -* -* @param u4ArSysParam0 see description below -* u4ArSysParam1 -* u4ArSysParam2 -* u4ArSysParam3 -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* ArSysParam0[0:3] -> auto rate version (0:disable 1:version1 2:version2) -* ArSysParam0[4:5]-> auto bw version (0:disable 1:version1 2:version2) -* ArSysParam0[6:7]-> auto gi version (0:disable 1:version1 2:version2) -* ArSysParam0[8:15]-> HT rate clear mask -* ArSysParam0[16:31]-> Legacy rate clear mask -* ArSysParam1[0:7]-> Auto Rate check weighting window -* ArSysParam1[8:15]-> Auto Rate v1 Force Rate down -* ArSysParam1[16:23]-> Auto Rate v1 PerH -* ArSysParam1[24:31]-> Auto Rate v1 PerL -* -* Examples -* ArSysParam0 = 1, -* Enable auto rate version 1 -* -* ArSysParam0 = 983041, -* Enable auto rate version 1 -* Remove CCK 1M, 2M, 5.5M, 11M -* -* ArSysParam0 = 786433 -* Enable auto rate version 1 -* Remove CCK 5.5M 11M -*/ -/*----------------------------------------------------------------------------*/ - - -WLAN_STATUS -nicRlmArUpdateParms( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4ArSysParam0, - IN UINT_32 u4ArSysParam1, - IN UINT_32 u4ArSysParam2, - IN UINT_32 u4ArSysParam3 - ) -{ - UINT_8 ucArVer,ucAbwVer,ucAgiVer; - UINT_16 u2HtClrMask; - UINT_16 u2LegacyClrMask; - UINT_8 ucArCheckWindow; - UINT_8 ucArPerL; - UINT_8 ucArPerH; - UINT_8 ucArPerForceRateDownPer; - - ucArVer = (UINT_8)(u4ArSysParam0 & BITS(0,3)); - ucAbwVer = (UINT_8)((u4ArSysParam0 & BITS(4,5)) >>4); - ucAgiVer = (UINT_8)((u4ArSysParam0 & BITS(6,7)) >>6); - u2HtClrMask = (UINT_16) ((u4ArSysParam0 & BITS(8,15)) >> 8); - u2LegacyClrMask = (UINT_16) ((u4ArSysParam0 & BITS(16,31)) >> 16); - -#if 0 - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) ((u4ArSysParam1 & BITS(8,15)>>8)); - ucArPerH = (UINT_8) ((u4ArSysParam1 & BITS(16,23)) >>16); - ucArPerL = (UINT_8) ((u4ArSysParam1 & BITS(24,31)) >>24); -#endif - - ucArCheckWindow = (UINT_8) (u4ArSysParam1 & BITS(0,7)); - ucArPerForceRateDownPer = (UINT_8) (((u4ArSysParam1>>8) & BITS(0,7))); - ucArPerH = (UINT_8) (((u4ArSysParam1>>16) & BITS(0,7))); - ucArPerL = (UINT_8) (((u4ArSysParam1>>24) & BITS(0,7))); - - - DBGLOG(INIT, INFO, ("ArParam %u %u %u %u\n", u4ArSysParam0, u4ArSysParam1, u4ArSysParam2, u4ArSysParam3)); - DBGLOG(INIT, INFO, ("ArVer %u AbwVer %u AgiVer %u\n", ucArVer, ucAbwVer, ucAgiVer)); - DBGLOG(INIT, INFO, ("HtMask %x LegacyMask %x\n", u2HtClrMask, u2LegacyClrMask)); - DBGLOG(INIT, INFO, ("CheckWin %u RateDownPer %u PerH %u PerL %u\n", ucArCheckWindow, ucArPerForceRateDownPer, ucArPerH, ucArPerL)); - -#define SWCR_DATA_ADDR(MOD,ADDR) (0x90000000+(MOD<<8)+(ADDR)) -#define SWCR_DATA_CMD(CATE,WRITE,INDEX,OPT0,OPT1) ( (CATE<<24) | (WRITE<<23) | (INDEX<<16) | (OPT0 <<8) | OPT1 ) -#define SWCR_DATA0 0x0 -#define SWCR_DATA1 0x4 -#define SWCR_DATA2 0x8 -#define SWCR_DATA3 0xC -#define SWCR_DATA4 0x10 -#define SWCR_WRITE 1 -#define SWCR_READ 0 - - if(ucArVer > 0) { - /* dummy = WiFi.WriteMCR(&h90000104, &h00000001) */ - /* dummy = WiFi.WriteMCR(&h90000100, &h00850000)*/ - - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),1); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)); - } - else { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),0); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,5,0,0)) ; - } - - /* ucArVer 0: none 1:PER 2:Rcpi */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArVer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,7,0,0)); - - /* Candidate rate Ht mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2HtClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1c,0,0)); - - /* Candidate rate legacy mask */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),u2LegacyClrMask); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1d,0,0)); - -#if 0 - if(ucArCheckWindow!=0) { - /* TX DONE MCS INDEX CHECK STA RATE DOWN TH */ - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x14,0,0)); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArCheckWindow); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0xc,0,0)); - } - - if(ucArPerForceRateDownPer !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerForceRateDownPer); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x18,0,0)); - } - if(ucArPerH !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerH); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x1,0,0)); - } - if(ucArPerL !=0) { - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA1),ucArPerL); - nicWriteMcr (prAdapter, SWCR_DATA_ADDR(1/*MOD*/,SWCR_DATA0),SWCR_DATA_CMD(0,SWCR_WRITE,0x2,0,0)); - } -#endif - - - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This utility function is used to enable roaming -* -* @param u4EnableRoaming -* -* -* @retval WLAN_STATUS_SUCCESS -* WLAN_STATUS_FAILURE -* -* @note -* u4EnableRoaming -> Enable Romaing -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRoamingUpdateParams( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4EnableRoaming - ) -{ - P_CONNECTION_SETTINGS_T prConnSettings; - - prConnSettings = &(prAdapter->rWifiVar.rConnSettings); - prConnSettings->fgIsEnableRoaming = ((u4EnableRoaming>0)?(TRUE):(FALSE)); - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief dump firmware Assert message -* -* \param[in] -* prAdapter -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicPrintFirmwareAssertInfo( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4MailBox0, u4MailBox1; - UINT_32 line = 0; - UINT_8 aucAssertFile[7]; - UINT_32 u4ChipId; - -#if CFG_SDIO_INTR_ENHANCE - u4MailBox0 = prAdapter->prSDIOCtrl->u4RcvMailbox0; - u4MailBox1 = prAdapter->prSDIOCtrl->u4RcvMailbox1; -#else - nicGetMailbox(prAdapter, 0, &u4MailBox0); - nicGetMailbox(prAdapter, 1, &u4MailBox1); -#endif - - line = u4MailBox0 & 0x0000FFFF; - - u4MailBox0 = ((u4MailBox0 >> 16) & 0x0000FFFF); - - kalMemCopy(&aucAssertFile[0], &u4MailBox0, 2); - kalMemCopy(&aucAssertFile[2], &u4MailBox1, 4); - - aucAssertFile[6] = '\0'; - -#if defined(MT6620) - u4ChipId = 6620; -#elif defined(MT5931) - u4ChipId = 5931; -#elif defined(MT6628) - u4ChipId = 6628; -#endif - - kalPrint("\n[MT%ld][wifi][Firmware] Assert at \"%s\" #%ld\n\n", - u4ChipId, - aucAssertFile, - line); - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkQuality( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN P_EVENT_LINK_QUALITY prEventLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - ASSERT(prEventLinkQuality); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* check is to prevent RSSI to be updated by incorrect initial RSSI from hardware */ - /* buffer statistics for further query */ - if(prAdapter->fgIsLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateRSSI(prAdapter, eNetTypeIdx, prEventLinkQuality->cRssi, prEventLinkQuality->cLinkQuality); - } - - if(prAdapter->fgIsLinkRateValid == FALSE - || (kalGetTimeTick() - prAdapter->rLinkRateUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - nicUpdateLinkSpeed(prAdapter, eNetTypeIdx, prEventLinkQuality->u2LinkSpeed); - } - } - break; -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - if (prAdapter->fgIsP2pLinkQualityValid == FALSE - || (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) > CFG_LINK_QUALITY_VALID_PERIOD) { - P_EVENT_LINK_QUALITY_EX prEventLQEx = (P_EVENT_LINK_QUALITY_EX)prEventLinkQuality; - - nicUpdateRSSI(prAdapter, NETWORK_TYPE_P2P_INDEX, prEventLQEx->cRssiP2P, prEventLQEx->cLinkQualityP2P); - } - break; -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update RSSI and Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateRSSI( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - prAdapter->fgIsLinkQualityValid = TRUE; - prAdapter->rLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.cRssi = cRssi; - prAdapter->rLinkQuality.cLinkQuality = cLinkQuality; - - /* indicate to glue layer */ - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_AIS_INDEX, - prAdapter->rLinkQuality.cRssi, - prAdapter->rLinkQuality.cLinkQuality); - } - - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case NETWORK_TYPE_P2P_INDEX: - prAdapter->fgIsP2pLinkQualityValid = TRUE; - prAdapter->rP2pLinkQualityUpdateTime = kalGetTimeTick(); - - prAdapter->rP2pLinkQuality.cRssi= cRssi; - prAdapter->rP2pLinkQuality.cLinkQuality= cLinkQuality; - - kalUpdateRSSI(prAdapter->prGlueInfo, - KAL_NETWORK_TYPE_P2P_INDEX, - cRssi, - cLinkQuality); - break; -#endif -#endif - default: - break; - - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called to update Link Quality information -* -* @param prAdapter Pointer of Adapter Data Structure -* eNetTypeIdx -* prEventLinkQuality -* cRssi -* cLinkQuality -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicUpdateLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN UINT_16 u2LinkSpeed - ) -{ - ASSERT(prAdapter); - ASSERT(eNetTypeIdx < NETWORK_TYPE_INDEX_NUM); - - switch(eNetTypeIdx) { - case NETWORK_TYPE_AIS_INDEX: - if(prAdapter->rWifiVar.arBssInfo[eNetTypeIdx].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - /* buffer statistics for further query */ - prAdapter->fgIsLinkRateValid = TRUE; - prAdapter->rLinkRateUpdateTime = kalGetTimeTick(); - - prAdapter->rLinkQuality.u2LinkSpeed = u2LinkSpeed; - } - break; - - default: - break; - - } - - return; -} - -#if CFG_SUPPORT_RDD_TEST_MODE -WLAN_STATUS -nicUpdateRddTestMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_RDD_CH_T prRddChParam - ) -{ - DEBUGFUNC("nicUpdateRddTestMode.\n"); - - ASSERT(prAdapter); - -// aisFsmScanRequest(prAdapter, NULL); - - return wlanSendSetQueryCmd(prAdapter, - CMD_ID_SET_RDD_CH, - TRUE, - FALSE, - FALSE, - NULL, - NULL, - sizeof(CMD_RDD_CH_T), - (PUINT_8)prRddChParam, - NULL, - 0); -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_cmd_event.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_cmd_event.c deleted file mode 100755 index f91fbdccf1ec..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_cmd_event.c +++ /dev/null @@ -1,1749 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/nic/nic_cmd_event.c#1 $ -*/ - -/*! \file nic_cmd_event.c - \brief Callback functions for Command packets. - - Various Event packet handlers which will be setup in the callback function of - a command packet. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_cmd_event.c $ -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync RSSI ignoring when BSS is disconnected -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 04 10 2012 yuche.tsai - * NULL - * Update address for wifi direct connection issue. - * - * 06 15 2011 cm.chang - * [WCXRP00000785] [MT6620 Wi-Fi][Driver][FW] P2P/BOW MAC address is XOR with AIS MAC address - * P2P/BOW mac address XOR with local bit instead of OR - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 24 2011 cp.wu - * [WCXRP00000493] [MT6620 Wi-Fi][Driver] Do not indicate redundant disconnection to host when entering into RF test mode - * only indicate DISCONNECTION to host when entering RF test if necessary (connected -> disconnected cases) - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 01 2010 cp.wu - * [WCXRP00000223] MT6620 Wi-Fi][Driver][FW] Adopt NVRAM parameters when enter/exit RF test mode - * reload NVRAM settings before entering RF test mode and leaving from RF test mode. - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 20 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * use OID_CUSTOM_TEST_MODE as indication for driver reset - * by dropping pending TX packets - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 15 2010 yuche.tsai - * NULL - * Start to test AT GO only when P2P state is not IDLE. - * - * 09 09 2010 yuche.tsai - * NULL - * Add AT GO Test mode after MAC address available. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 16 2010 cp.wu - * NULL - * Replace CFG_SUPPORT_BOW by CFG_ENABLE_BT_OVER_WIFI. - * There is no CFG_SUPPORT_BOW in driver domain source. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 11 2010 yuche.tsai - * NULL - * Add support for P2P Device Address query from FW. - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 08 02 2010 cp.wu - * NULL - * reset FSMs before entering RF test mode. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 05 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) change fake BSS_DESC from channel 6 to channel 1 due to channel switching is not done yet. - * 2) after MAC address is queried from firmware, all related variables in driver domain should be updated as well - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change upon request: indicate as disconnected in driver domain when leaving from RF test mode - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * do not clear scanning list array after disassociation - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) disable NETWORK_LAYER_ADDRESSES handling temporally. - * 2) finish statistics OIDs - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * change OID behavior to meet WHQL requirement. - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 05 17 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct OID_802_11_DISASSOCIATE handling. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * are done in adapter layer. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glude code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sync statistics data structure definition with firmware implementation - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * statistics information OIDs are now handled by querying from firmware domain - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * indicate media stream mode after set is done - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement custom OID: EEPROM read/write access - * - * 03 03 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_3_MULTICAST_LIST oid handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * limit RSSI return value to microsoft defined range. - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * block until firmware finished RF test enter/leave then indicate completion to upper layer - * - * 01 29 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when entering RF test mode and leaving from RF test mode, wait for W_FUNC_RDY bit to be asserted forever until it is set or card is removed. - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * 4. correct some HAL implementation - * - * 01 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Under WinXP with SDIO, use prGlueInfo->rHifInfo.pvInformationBuffer instead of prGlueInfo->pvInformationBuffer - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * OID_802_11_RSSI, - * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * OID_802_11_STATISTICS, - * * * * * OID_802_11_DISASSOCIATE, - * * * * * OID_802_11_POWER_MODE - * - * 01 21 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement OID_802_11_MEDIA_STREAM_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:47:47 GMT mtk02752 -** only handle MCR read when accessing FW domain register -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-08 17:37:28 GMT mtk02752 -** * refine nicCmdEventQueryMcrRead -** + add TxStatus/RxStatus for RF test QueryInformation OIDs -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 22:05:45 GMT mtk02752 -** kalOidComplete() will decrease i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-12-01 23:02:57 GMT mtk02752 -** remove unnecessary spin locks -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-12-01 22:51:18 GMT mtk02752 -** maintein i4OidPendingCount -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-11-30 10:55:03 GMT mtk02752 -** modify for compatibility -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-23 14:46:32 GMT mtk02752 -** add another version of command-done handler upon new event structure -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-04-29 15:42:33 GMT mtk01461 -** Add comment -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-04-21 19:32:42 GMT mtk01461 -** Add nicCmdEventSetCommon() for general set OID -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-04-21 01:40:35 GMT mtk01461 -** Command Done Handler -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -VOID -nicCmdEventQueryMcrRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MCR_RW_STRUC_T prMcrRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_ACCESS_REG prCmdAccessReg; - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdAccessReg = (P_CMD_ACCESS_REG)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T); - - prMcrRdInfo = (P_PARAM_CUSTOM_MCR_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prMcrRdInfo->u4McrOffset = prCmdAccessReg->u4Address; - prMcrRdInfo->u4McrData = prCmdAccessReg->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventQuerySwCtrlRead ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_SW_CTRL_STRUC_T prSwCtrlInfo; - P_GLUE_INFO_T prGlueInfo; - P_CMD_SW_DBG_CTRL_T prCmdSwCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prCmdSwCtrl = (P_CMD_SW_DBG_CTRL_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T); - - prSwCtrlInfo = (P_PARAM_CUSTOM_SW_CTRL_STRUC_T) prCmdInfo->pvInformationBuffer; - prSwCtrlInfo->u4Id = prCmdSwCtrl->u4Id; - prSwCtrlInfo->u4Data = prCmdSwCtrl->u4Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - - -VOID -nicCmdEventSetCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4InformationBufferLength, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventSetDisassociate ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_SUCCESS); - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - -#if !defined(LINUX) - prAdapter->fgIsRadioOff = TRUE; -#endif - - return; -} - -VOID -nicCmdEventSetIpAddress ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4Count; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - u4Count = (prCmdInfo->u4SetInfoLen - OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress)) - / sizeof(IPV4_NETWORK_ADDRESS) ; - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress) + u4Count * - (OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP)), - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryRfTestATInfo( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_TEST_STATUS prTestStatus, prQueryBuffer; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTestStatus = (P_EVENT_TEST_STATUS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prQueryBuffer = (P_EVENT_TEST_STATUS) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prQueryBuffer, prTestStatus, sizeof(EVENT_TEST_STATUS)); - - u4QueryInfoLen = sizeof(EVENT_TEST_STATUS); - - /* Update Query Infomation Length */ - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } - - return; -} - -VOID -nicCmdEventQueryLinkQuality( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_RSSI rRssi, *prRssi; - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - rRssi = (PARAM_RSSI)prLinkQuality->cRssi; // ranged from (-128 ~ 30) in unit of dBm - - if(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].eConnectionState == PARAM_MEDIA_STATE_CONNECTED) { - if(rRssi > PARAM_WHQL_RSSI_MAX_DBM) - rRssi = PARAM_WHQL_RSSI_MAX_DBM; - else if(rRssi < PARAM_WHQL_RSSI_MIN_DBM) - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - else { - rRssi = PARAM_WHQL_RSSI_MIN_DBM; - } - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prRssi = (PARAM_RSSI *) prCmdInfo->pvInformationBuffer; - - kalMemCopy(prRssi, &rRssi, sizeof(PARAM_RSSI)); - u4QueryInfoLen = sizeof(PARAM_RSSI); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is in response of OID_GEN_LINK_SPEED query request -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the pending command info -* @param pucEventBuf -* -* @retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryLinkSpeed( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_LINK_QUALITY prLinkQuality; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4LinkSpeed; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prLinkQuality = (P_EVENT_LINK_QUALITY)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - pu4LinkSpeed = (PUINT_32)(prCmdInfo->pvInformationBuffer); - - if(prLinkQuality->u2LinkSpeed == 0) { - *pu4LinkSpeed = 10000; /* 10K * 100bps = 1Mbps */ - } - else { - *pu4LinkSpeed = prLinkQuality->u2LinkSpeed * 5000; - } - - u4QueryInfoLen = sizeof(UINT_32); - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryStatistics( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_PARAM_802_11_STATISTICS_STRUCT_T prStatistics; - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - u4QueryInfoLen = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics = (P_PARAM_802_11_STATISTICS_STRUCT_T) prCmdInfo->pvInformationBuffer; - - prStatistics->u4Length = sizeof(PARAM_802_11_STATISTICS_STRUCT_T); - prStatistics->rTransmittedFragmentCount - = prEventStatistics->rTransmittedFragmentCount; - prStatistics->rMulticastTransmittedFrameCount - = prEventStatistics->rMulticastTransmittedFrameCount; - prStatistics->rFailedCount - = prEventStatistics->rFailedCount; - prStatistics->rRetryCount - = prEventStatistics->rRetryCount; - prStatistics->rMultipleRetryCount - = prEventStatistics->rMultipleRetryCount; - prStatistics->rRTSSuccessCount - = prEventStatistics->rRTSSuccessCount; - prStatistics->rRTSFailureCount - = prEventStatistics->rRTSFailureCount; - prStatistics->rACKFailureCount - = prEventStatistics->rACKFailureCount; - prStatistics->rFrameDuplicateCount - = prEventStatistics->rFrameDuplicateCount; - prStatistics->rReceivedFragmentCount - = prEventStatistics->rReceivedFragmentCount; - prStatistics->rMulticastReceivedFrameCount - = prEventStatistics->rMulticastReceivedFrameCount; - prStatistics->rFCSErrorCount - = prEventStatistics->rFCSErrorCount; - prStatistics->rTKIPLocalMICFailures.QuadPart - = 0; - prStatistics->rTKIPICVErrors.QuadPart - = 0; - prStatistics->rTKIPCounterMeasuresInvoked.QuadPart - = 0; - prStatistics->rTKIPReplays.QuadPart - = 0; - prStatistics->rCCMPFormatErrors.QuadPart - = 0; - prStatistics->rCCMPReplays.QuadPart - = 0; - prStatistics->rCCMPDecryptErrors.QuadPart - = 0; - prStatistics->rFourWayHandshakeFailures.QuadPart - = 0; - prStatistics->rWEPUndecryptableCount.QuadPart - = 0; - prStatistics->rWEPICVErrorCount.QuadPart - = 0; - prStatistics->rDecryptSuccessCount.QuadPart - = 0; - prStatistics->rDecryptFailureCount.QuadPart - = 0; - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventEnterRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // [driver-land] - prAdapter->fgTestMode = TRUE; - - // 0. always indicate disconnection - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - // 1. Remove pending TX - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. Reset driver-domain FSMs - nicUninitMGMT(prAdapter); - - nicResetSystemService(prAdapter); - nicInitMGMT(prAdapter, NULL); - - // 3. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 4. Block til firmware completed entering into RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else - kalMsleep(10); - } - - // 5. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 6. Reset TX Counter - nicTxResetResource(prAdapter); - - // 7. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 8. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - -#if CFG_SUPPORT_NVRAM - // 9. load manufacture data - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - return; -} - -VOID -nicCmdEventLeaveRfTest( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4WHISR = 0, u4Value = 0; - UINT_8 aucTxCount[8]; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - // 1. Disable Interrupt - HAL_INTR_DISABLE(prAdapter); - - // 2. Block til firmware completed leaving from RF test mode - kalMsleep(500); - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_NOT_SUPPORTED); - - } - return; - } - else { - kalMsleep(10); - } - } - - // 3. Clear Interrupt Status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - // 4. Reset TX Counter - nicTxResetResource(prAdapter); - - // 5. Re-enable Interrupt - HAL_INTR_ENABLE(prAdapter); - - // 6. set driver-land variable - prAdapter->fgTestMode = FALSE; - - // 7. completion indication - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - /* 8. Indicate as disconnected */ - if(kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - -#if CFG_SUPPORT_NVRAM - /* 9. load manufacture data */ - wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); -#endif - - /* 10. Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - return; -} - -VOID -nicCmdEventQueryAddress( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_BASIC_CONFIG prEventBasicConfig; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - prEventBasicConfig = (P_EVENT_BASIC_CONFIG)(pucEventBuf); - - // copy to adapter - kalMemCopy(&(prAdapter->rMyMacAddr), &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - kalMemCopy(prCmdInfo->pvInformationBuffer, &(prEventBasicConfig->rMyMacAddr), MAC_ADDR_LEN); - u4QueryInfoLen = MAC_ADDR_LEN; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - //4 <3> Update new MAC address and all 3 networks - COPY_MAC_ADDR(prAdapter->rWifiVar.aucMacAddress, prAdapter->rMyMacAddr); - COPY_MAC_ADDR(prAdapter->rWifiVar.aucDeviceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucDeviceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.aucInterfaceAddress, prAdapter->rMyMacAddr); - prAdapter->rWifiVar.aucInterfaceAddress[0] ^= MAC_ADDR_LOCAL_ADMIN; - - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].aucOwnMacAddr, - prAdapter->rMyMacAddr); - -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered) { - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); - } -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - COPY_MAC_ADDR(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX].aucOwnMacAddr, - prAdapter->rWifiVar.aucDeviceAddress); -#endif - -#if CFG_TEST_WIFI_DIRECT_GO - if (prAdapter->rWifiVar.prP2pFsmInfo->eCurrentState == P2P_STATE_IDLE) { - wlanEnableP2pFunction(prAdapter); - - wlanEnableATGO(prAdapter); - } -#endif - - kalUpdateMACAddress(prAdapter->prGlueInfo, prAdapter->rWifiVar.aucMacAddress); - - return; -} - -VOID -nicCmdEventQueryMcastAddr( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_MAC_MCAST_ADDR prEventMacMcastAddr; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventMacMcastAddr = (P_EVENT_MAC_MCAST_ADDR)(pucEventBuf); - - u4QueryInfoLen = prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN; - - // buffer length check - if (prCmdInfo->u4InformationBufferLength < u4QueryInfoLen) { - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_BUFFER_TOO_SHORT); - } - else { - kalMemCopy(prCmdInfo->pvInformationBuffer, - prEventMacMcastAddr->arAddress, - prEventMacMcastAddr->u4NumOfGroupAddr * MAC_ADDR_LEN); - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - } -} - -VOID -nicCmdEventQueryEepromRead( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_EEPROM_RW_STRUC_T prEepromRdInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_ACCESS_EEPROM prEventAccessEeprom; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventAccessEeprom = (P_EVENT_ACCESS_EEPROM)(pucEventBuf); - - u4QueryInfoLen = sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T); - - prEepromRdInfo = (P_PARAM_CUSTOM_EEPROM_RW_STRUC_T) prCmdInfo->pvInformationBuffer; - prEepromRdInfo->ucEepromIndex = (UINT_8)(prEventAccessEeprom->u2Offset); - prEepromRdInfo->u2EepromData = prEventAccessEeprom->u2Data; - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; - -} - - -VOID -nicCmdEventSetMediaStreamMode( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - PARAM_MEDIA_STREAMING_INDICATION rParamMediaStreamIndication; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - if (prCmdInfo->fgIsOid) { - /* Update Set Infomation Length */ - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - prCmdInfo->u4SetInfoLen, - WLAN_STATUS_SUCCESS); - } - - rParamMediaStreamIndication.rStatus.eStatusType = - ENUM_STATUS_TYPE_MEDIA_STREAM_MODE; - rParamMediaStreamIndication.eMediaStreamMode = - prAdapter->rWlanInfo.eLinkAttr.ucMediaStreamMode == 0 ? - ENUM_MEDIA_STREAM_OFF : ENUM_MEDIA_STREAM_ON; - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)&rParamMediaStreamIndication, - sizeof(PARAM_MEDIA_STREAMING_INDICATION)); -} - - -/* Statistics responder */ -VOID -nicCmdEventQueryXmitOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rTransmittedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvOk( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rReceivedFragmentCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rReceivedFragmentCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - -VOID -nicCmdEventQueryXmitError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - // @FIXME, RX_ERROR_DROP_COUNT/RX_FIFO_FULL_DROP_COUNT is not calculated - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvNoBuffer( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = 0; // @FIXME? - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME? - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvCrcError( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFCSErrorCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = prEventStatistics->rFCSErrorCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryRecvErrorAlignment( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) 0; //@FIXME - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = 0; //@FIXME - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitOneCollision( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) (prEventStatistics->rMultipleRetryCount.QuadPart - prEventStatistics->rRetryCount.QuadPart); - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMoreCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rMultipleRetryCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rMultipleRetryCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -VOID -nicCmdEventQueryXmitMaxCollisions( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - P_EVENT_STATISTICS prEventStatistics; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4QueryInfoLen; - PUINT_32 pu4Data; - PUINT_64 pu8Data; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prEventStatistics = (P_EVENT_STATISTICS)pucEventBuf; - - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - - if(prCmdInfo->u4InformationBufferLength == sizeof(UINT_32)) { - u4QueryInfoLen = sizeof(UINT_32); - - pu4Data = (PUINT_32) prCmdInfo->pvInformationBuffer; - *pu4Data = (UINT_32) prEventStatistics->rFailedCount.QuadPart; - } - else { - u4QueryInfoLen = sizeof(UINT_64); - - pu8Data = (PUINT_64) prCmdInfo->pvInformationBuffer; - *pu8Data = (UINT_64) prEventStatistics->rFailedCount.QuadPart; - } - - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - u4QueryInfoLen, - WLAN_STATUS_SUCCESS); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command by OID/ioctl has been timeout -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a generic command timeout handler -* -* @param pfnOidHandler Pointer to the OID handler -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdTimeoutCommon ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for entering RF test has -* failed sending due to timeout (highly possibly by firmware crash) -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicOidCmdEnterRFTestTimeout ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo - ) -{ - ASSERT(prAdapter); - - // 1. Remove pending TX frames - nicTxRelease(prAdapter); - - // 1.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 1.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - // 2. indiate for OID failure - kalOidComplete(prAdapter->prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_FAILURE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when command for memory dump has -* replied a event. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* @param pucEventBuf Pointer to event buffer -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventQueryMemDump ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_PARAM_CUSTOM_MEM_DUMP_STRUC_T prMemDumpInfo; - P_GLUE_INFO_T prGlueInfo; - P_EVENT_DUMP_MEM_T prEventDumpMem; - static UINT_8 aucPath[256]; - static UINT_32 u4CurTimeTick; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEventDumpMem = (P_EVENT_DUMP_MEM_T)(pucEventBuf); - - u4QueryInfoLen = sizeof(P_PARAM_CUSTOM_MEM_DUMP_STRUC_T); - - prMemDumpInfo = (P_PARAM_CUSTOM_MEM_DUMP_STRUC_T) prCmdInfo->pvInformationBuffer; - prMemDumpInfo->u4Address = prEventDumpMem->u4Address; - prMemDumpInfo->u4Length = prEventDumpMem->u4Length; - prMemDumpInfo->u4RemainLength = prEventDumpMem->u4RemainLength; - prMemDumpInfo->ucFragNum = prEventDumpMem->ucFragNum; - -#if 0 - do{ - UINT_32 i = 0; - printk("Rx dump address 0x%X, Length %d, FragNum %d, remain %d\n", - prEventDumpMem->u4Address, - prEventDumpMem->u4Length, - prEventDumpMem->ucFragNum, - prEventDumpMem->u4RemainLength); -#if 0 - for(i = 0; i < prEventDumpMem->u4Length; i++) { - printk("%02X ", prEventDumpMem->aucBuffer[i]); - if(i % 32 == 31) { - printk("\n"); - } - } -#endif - }while(FALSE); -#endif - - if(prEventDumpMem->ucFragNum == 1) { - /* Store memory dump into sdcard, - * path /sdcard/dump___.hex - */ - u4CurTimeTick = kalGetTimeTick(); -#if defined(LINUX) - sprintf(aucPath, "/sdcard/dump_%ld_0x%08lX_%ld.hex", - u4CurTimeTick, - prEventDumpMem->u4Address, - prEventDumpMem->u4Length + prEventDumpMem->u4RemainLength); -#else - strcpy(aucPath, "dump.hex"); -#endif - kalWriteToFile(aucPath, FALSE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - else { - /* Append current memory dump to the hex file */ - kalWriteToFile(aucPath, TRUE, &prEventDumpMem->aucBuffer[0], prEventDumpMem->u4Length); - } - - if(prEventDumpMem->u4RemainLength == 0 || - prEventDumpMem->u4Address == 0xFFFFFFFF) { - /* The request is finished or firmware response a error */ - /* Reply time tick to iwpriv */ - *((PUINT_32)prCmdInfo->pvInformationBuffer) = u4CurTimeTick; - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - else { - /* The memory dump request is not finished, Send next command*/ - wlanSendMemDumpCmd( - prAdapter, - prCmdInfo->pvInformationBuffer, - prCmdInfo->u4InformationBufferLength); - } - } - - return; - -} - -#if CFG_SUPPORT_BUILD_DATE_CODE -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is called when event for build date code information -* has been retrieved -* -* @param prAdapter Pointer to the Adapter structure. -* @param prCmdInfo Pointer to the command information -* @param pucEventBuf Pointer to the event buffer -* -* @return none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicCmdEventBuildDateCode ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN PUINT_8 pucEventBuf - ) -{ - UINT_32 u4QueryInfoLen; - P_EVENT_BUILD_DATE_CODE prEvent; - P_GLUE_INFO_T prGlueInfo; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(pucEventBuf); - - //4 <2> Update information of OID - if (prCmdInfo->fgIsOid) { - prGlueInfo = prAdapter->prGlueInfo; - prEvent = (P_EVENT_BUILD_DATE_CODE)pucEventBuf; - - u4QueryInfoLen = sizeof(UINT_8) * 16; - kalMemCopy(prCmdInfo->pvInformationBuffer, prEvent->aucDateCode, sizeof(UINT_8) * 16); - - kalOidComplete(prGlueInfo, prCmdInfo->fgSetQuery, u4QueryInfoLen, WLAN_STATUS_SUCCESS); - } - - return; -} -#endif - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_pwr_mgt.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_pwr_mgt.c deleted file mode 100755 index f0bfcd249268..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_pwr_mgt.c +++ /dev/null @@ -1,843 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/nic/nic_pwr_mgt.c#1 $ -*/ - -/*! \file "nic_pwr_mgt.c" - \brief In this file we define the STATE and EVENT for Power Management FSM. - - The SCAN FSM is responsible for performing SCAN behavior when the Arbiter enter - ARB_STATE_SCAN. The STATE and EVENT for SCAN FSM are defined here with detail - description. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_pwr_mgt.c $ - * - * 11 28 2011 cp.wu - * [WCXRP00001125] [MT6620 Wi-Fi][Firmware] Strengthen Wi-Fi power off sequence to have a clearroom environment when returining to ROM code - * 1. Due to firmware now stops HIF DMA for powering off, do not try to receive any packet from firmware - * 2. Take use of prAdapter->fgIsEnterD3ReqIssued for tracking whether it is powering off or not - * - * 10 03 2011 cp.wu - * [WCXRP00001022] [MT6628 Driver][Firmware Download] Add multi section independent download functionality - * add firmware download path in divided scatters. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * reuse firmware download logic of MT6620 for MT6628. - * - * 05 11 2011 cp.wu - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * ACPI APIs migrate to wlan_lib.c for glue layer to invoke. - * - * 04 29 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * fix for compilation error when applied with FW_DOWNLOAD = 0 - * - * 04 18 2011 cp.wu - * [WCXRP00000636] [WHQL][MT5931 Driver] 2c_PMHibernate (hang on 2h) - * 1) add API for glue layer to query ACPI state - * 2) Windows glue should not access to hardware after switched into D3 state - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * refine for MT5931/MT6620 logic separation. - * - * 04 13 2011 cp.wu - * [WCXRP00000639] [WHQL][MT5931 Driver] 2c_PMStandby test item can not complete - * bugfix: firmware download procedure for ACPI state transition is not complete. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * check success or failure for setting fw-own - * - * 12 30 2010 cp.wu - * [WCXRP00000327] [MT6620 Wi-Fi][Driver] Improve HEC WHQA 6972 workaround coverage in driver side - * host driver not to set FW-own when there is still pending interrupts - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * add firmware download for MT5931. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 30 2010 cp.wu - * NULL - * reset ACPI power state before waking up MT6620 Wi-Fi firmware. - * - * 08 12 2010 cp.wu - * NULL - * [AIS-FSM] honor registry setting for adhoc running mode. (A/B/G) - * - * 08 03 2010 cp.wu - * NULL - * Centralize mgmt/system service procedures into independent calls. - * - * 07 22 2010 cp.wu - * - * 1) refine AIS-FSM indent. - * 2) when entering RF Test mode, flush 802.1X frames as well - * 3) when entering D3 state, flush 802.1X frames as well - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) when acquiring LP-own, write for clr-own with lower frequency compared to read poll - * 2) correct address list parsing - * - * 05 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * sleepy notify is only used for sleepy state, - * while wake-up state is automatically set when host needs to access device - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct hibernation problem. - * - * 04 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) surpress compiler warning - * 2) when acqruing LP-own, keep writing WHLPCR whenever OWN is not acquired yet - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove redundant firmware image unloading - * * 2) use compile-time macros to separate logic related to accquiring own - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * are now handled in glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * ePowerCtrl is not necessary as a glue variable. - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * always send CMD_NIC_POWER_CTRL packet when nic is being halted - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct typo. - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-10-13 21:59:15 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-09-09 17:26:36 GMT mtk01084 -** remove CMD52 access -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-05-18 14:50:29 GMT mtk01084 -** modify lines in nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-23 16:55:37 GMT mtk01084 -** modify nicpmSetDriverOwn() -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-19 18:33:00 GMT mtk01084 -** update for basic power management functions -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-03-19 15:05:32 GMT mtk01084 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern BOOLEAN fgIsResetting; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER ON procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicpmSetFWOwn ( - IN P_ADAPTER_T prAdapter, - IN BOOLEAN fgEnableGlobalInt - ) -{ - UINT_32 u4RegValue; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == TRUE) { - return; - } - else { - if(nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - // pending interrupts - return; - } - } - - if (fgEnableGlobalInt) { - prAdapter->fgIsIntEnableWithLPOwnSet = TRUE; - } - else { - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_SET); - - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - if(u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - // if set firmware own not successful (possibly pending interrupts), - // indicate an own clear event - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - - return; - } - - prAdapter->fgIsFwOwn = TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to process the POWER OFF procedure. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetDriverOwn ( - IN P_ADAPTER_T prAdapter - ) -{ -#define LP_OWN_BACK_TOTAL_DELAY_MS 8192 //exponential of 2 -#define LP_OWN_BACK_LOOP_DELAY_MS 1 //exponential of 2 -#define LP_OWN_BACK_CLR_OWN_ITERATION 256 //exponential of 2 - - BOOLEAN fgStatus = TRUE; - UINT_32 i, u4CurrTick, u4RegValue = 0; - - ASSERT(prAdapter); - - if(prAdapter->fgIsFwOwn == FALSE) - return fgStatus; - - u4CurrTick = kalGetTimeTick(); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WHLPCR, &u4RegValue); - - if (u4RegValue & WHLPCR_FW_OWN_REQ_SET) { - prAdapter->fgIsFwOwn = FALSE; - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (kalGetTimeTick() - u4CurrTick) > LP_OWN_BACK_TOTAL_DELAY_MS - ) { - //ERRORLOG(("LP cannot be own back (for %ld ms)", kalGetTimeTick() - u4CurrTick)); - fgStatus = FALSE; - break; - } - else { - if((i & (LP_OWN_BACK_CLR_OWN_ITERATION - 1)) == 0) { - /* Software get LP ownership - per 256 iterations */ - HAL_MCR_WR(prAdapter, MCR_WHLPCR, WHLPCR_FW_OWN_REQ_CLR); - } - - /* Delay for LP engine to complete its operation. */ - kalMsleep(LP_OWN_BACK_LOOP_DELAY_MS); - i++; - } - } - - return fgStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set ACPI power mode to D0. -* -* \param[in] pvAdapter Pointer to the Adapter structure. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD0 ( - IN P_ADAPTER_T prAdapter - ) -{ - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - UINT_32 u4Value = 0, u4WHISR = 0; - UINT_8 aucTxCount[8]; - UINT_32 i; -#if CFG_ENABLE_FW_DOWNLOAD - UINT_32 u4FwImgLength, u4FwLoadAddr, u4ImgSecSize; - PVOID prFwMappingHandle; - PVOID pvFwImageMapFile = NULL; - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - UINT_32 j; - P_FIRMWARE_DIVIDED_DOWNLOAD_T prFwHead; - BOOLEAN fgValidHead; - const UINT_32 u4CRCOffset = offsetof(FIRMWARE_DIVIDED_DOWNLOAD_T, u4NumOfEntries); - #endif -#endif - - DEBUGFUNC("nicpmSetAcpiPowerD0"); - - ASSERT(prAdapter); - - do { - /* 0. Reset variables in ADAPTER_T */ - prAdapter->fgIsFwOwn = TRUE; - prAdapter->fgWiFiInSleepyState = FALSE; - prAdapter->rAcpiState = ACPI_STATE_D0; - prAdapter->fgIsEnterD3ReqIssued = FALSE; - -#if defined(MT6620) || defined(MT6628) - /* 1. Request Ownership to enter F/W download state */ - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - #if CFG_ENABLE_FW_DOWNLOAD - prFwMappingHandle = kalFirmwareImageMapping(prAdapter->prGlueInfo, &pvFwImageMapFile, &u4FwImgLength); - if(!prFwMappingHandle) { - DBGLOG(INIT, ERROR,("Fail to load FW image from file!\n")); - pvFwImageMapFile = NULL; - } - - #if defined(MT6620) || defined(MT6628) - if (pvFwImageMapFile) { - /* 3.1 disable interrupt, download is done by polling mode only */ - nicDisableInterrupt(prAdapter); - - /* 3.2 Initialize Tx Resource to fw download state */ - nicTxInitResetResource(prAdapter); - - /* 3.3 FW download here */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - - #if CFG_ENABLE_FW_DIVIDED_DOWNLOAD - // 3a. parse file header for decision of divided firmware download or not - prFwHead = (P_FIRMWARE_DIVIDED_DOWNLOAD_T)pvFwImageMapFile; - - if(prFwHead->u4Signature == MTK_WIFI_SIGNATURE && - prFwHead->u4CRC == wlanCRC32((PUINT_8)pvFwImageMapFile + u4CRCOffset, u4FwImgLength - u4CRCOffset)) { - fgValidHead = TRUE; - } - else { - fgValidHead = FALSE; - } - - /* 3b. engage divided firmware downloading */ - if(fgValidHead == TRUE) { - for(i = 0 ; i < prFwHead->u4NumOfEntries ; i++) { - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - prFwHead->arSection[i].u4DestAddr, - prFwHead->arSection[i].u4Length, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for(j = 0 ; j < prFwHead->arSection[i].u4Length ; j += CMD_PKT_SIZE_FOR_IMAGE) { - if(j + CMD_PKT_SIZE_FOR_IMAGE < prFwHead->arSection[i].u4Length) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = prFwHead->arSection[i].u4Length - j; - - if(wlanImageSectionDownload(prAdapter, - prFwHead->arSection[i].u4DestAddr + j, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + prFwHead->arSection[i].u4Offset + j) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - /* escape from loop if any pending error occurs */ - if(u4Status == WLAN_STATUS_FAILURE) { - break; - } - } - } - else - #endif - #if CFG_ENABLE_FW_DOWNLOAD_AGGREGATION - if(wlanImageSectionDownloadAggregated(prAdapter, - u4FwLoadAddr, - u4FwImgLength, - (PUINT_8)pvFwImageMapFile) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - } - #else - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanImageSectionDownload failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - #endif - - if(u4Status != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - break; - } - - #if !CFG_ENABLE_FW_DOWNLOAD_ACK - // Send INIT_CMD_ID_QUERY_PENDING_ERROR command and wait for response - if(wlanImageQueryStatus(prAdapter) != WLAN_STATUS_SUCCESS) { - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - u4Status = WLAN_STATUS_FAILURE; - break; - } - #endif - - kalFirmwareImageUnmapping(prAdapter->prGlueInfo, prFwMappingHandle, pvFwImageMapFile); - } - else { - u4Status = WLAN_STATUS_FAILURE; - break; - } - - /* 4. send Wi-Fi Start command */ - #if CFG_OVERRIDE_FW_START_ADDRESS - wlanConfigWifiFunc(prAdapter, - TRUE, - kalGetFwStartAddress(prAdapter->prGlueInfo)); - #else - wlanConfigWifiFunc(prAdapter, - FALSE, - 0); - #endif - - #elif defined(MT5931) - if (pvFwImageMapFile) { - DBGLOG(INIT, TRACE, ("Download Address: 0x%08X\n", kalGetFwLoadAddress(prAdapter->prGlueInfo))); - DBGLOG(INIT, TRACE, ("Firmware Length: 0x%08X\n", u4FwImgLength)); - - do { - /* 1.0 whole-chip reset except HIFSYS */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_CHIP_RST); - HAL_MCR_WR(prAdapter, MCR_WMCSR, 0); - - /* 1.1 wait for INIT_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_INI_RDY) { - DBGLOG(INIT, TRACE, ("INIT-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Init Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 1.2 set KSEL/FLEN */ - HAL_MCR_WR(prAdapter, MCR_FWCFG, u4FwImgLength >> 6); - - /* 1.3 enable FWDL_EN */ - HAL_MCR_WR(prAdapter, MCR_WMCSR, WMCSR_FWDLEN); - - /* 1.4 wait for PLL_RDY */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_PLLRDY) { - DBGLOG(INIT, TRACE, ("PLL-RDY detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for PLL Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 2.1 turn on HIFSYS firmware download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, FWDLSR_FWDL_MODE); - - /* 2.2 set starting address */ - u4FwLoadAddr = kalGetFwLoadAddress(prAdapter->prGlueInfo); - HAL_MCR_WR(prAdapter, MCR_FWDLDSAR, u4FwLoadAddr); - - /* 3. upload firmware */ - for (i = 0; i < u4FwImgLength ; i += CMD_PKT_SIZE_FOR_IMAGE) { - if(i + CMD_PKT_SIZE_FOR_IMAGE < u4FwImgLength) - u4ImgSecSize = CMD_PKT_SIZE_FOR_IMAGE; - else - u4ImgSecSize = u4FwImgLength - i; - - if(wlanImageSectionDownload(prAdapter, - u4FwLoadAddr + i, - u4ImgSecSize, - (PUINT_8)pvFwImageMapFile + i) != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("Firmware scatter download failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - } - - /* 4.1 poll FWDL_OK & FWDL_FAIL bits */ - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WMCSR, &u4Value); - - if (u4Value & WMCSR_DL_OK) { - DBGLOG(INIT, TRACE, ("DL_OK detected\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE - || (u4Value & WMCSR_DL_FAIL)) { - DBGLOG(INIT, ERROR, ("DL_FAIL detected: 0x%08X\n", u4Value)); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for DL_OK/DL_FAIL bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - - /* 4.2 turn off HIFSYS download mode */ - HAL_MCR_WR(prAdapter, MCR_FWDLSR, 0); - - } while (FALSE); - } - else { - DBGLOG(INIT, ERROR, ("No Firmware found!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - - #endif - #endif - - /* 5. check Wi-Fi FW asserts ready bit */ - DBGLOG(INIT, TRACE, ("wlanAdapterStart(): Waiting for Ready bit..\n")); - i = 0; - while(1) { - HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); - - if (u4Value & WCIR_WLAN_READY) { - DBGLOG(INIT, TRACE, ("Ready bit asserted\n")); - break; - } - else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) { - DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } - else { - i++; - kalMsleep(10); - } - } - -#if defined(MT5931) - // Acquire LP-OWN - ACQUIRE_POWER_CONTROL_FROM_PM(prAdapter); - #if !CFG_ENABLE_FULL_PM - nicpmSetDriverOwn(prAdapter); - #endif - - /* 2. Initialize the Adapter */ - if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) { - DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n")); - u4Status = WLAN_STATUS_FAILURE; - break; - } -#endif - - if(u4Status == WLAN_STATUS_SUCCESS) { - // 6.1 reset interrupt status - HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8)&u4WHISR); - if(HAL_IS_TX_DONE_INTR(u4WHISR)) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); - } - - /* 6.2 reset TX Resource for normal operation */ - nicTxResetResource(prAdapter); - - /* 6.3 Enable interrupt */ - nicEnableInterrupt(prAdapter); - - /* 6.4 Override network address */ - wlanUpdateNetworkAddress(prAdapter); - - /* 6.5 indicate disconnection as default status */ - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - } - - RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE); - - /* MGMT Initialization */ - nicInitMGMT(prAdapter, NULL); - - } while(FALSE); - - if(u4Status != WLAN_STATUS_SUCCESS) { - return FALSE; - } - else { - return TRUE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is used to set ACPI power mode to D3. -* -* @param prAdapter pointer to the Adapter handler -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicpmSetAcpiPowerD3 ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - - ASSERT(prAdapter); - - /* 1. MGMT - unitialization */ - nicUninitMGMT(prAdapter); - - /* 2. Disable Interrupt */ - nicDisableInterrupt(prAdapter); - - /* 3. emit CMD_NIC_POWER_CTRL command packet */ - wlanSendNicPowerCtrlCmd(prAdapter, 1); - - /* 4. Clear Interrupt Status */ - i = 0; - while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { - i++; - }; - - /* 5. Remove pending TX */ - nicTxRelease(prAdapter); - - // 5.1 clear pending Security / Management Frames - kalClearSecurityFrames(prAdapter->prGlueInfo); - kalClearMgmtFrames(prAdapter->prGlueInfo); - - // 5.2 clear pending TX packet queued in glue layer - kalFlushPendingTxPackets(prAdapter->prGlueInfo); - - /* 6. Set Onwership to F/W */ - nicpmSetFWOwn(prAdapter, FALSE); - - /* 7. Set variables */ - prAdapter->rAcpiState = ACPI_STATE_D3; - - return TRUE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_rx.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_rx.c deleted file mode 100755 index b0dae07a0055..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_rx.c +++ /dev/null @@ -1,3575 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/nic/nic_rx.c#1 $ -*/ - -/*! \file nic_rx.c - \brief Functions that provide many rx-related functions - - This file includes the functions used to process RFB and dispatch RFBs to - the appropriate related rx functions for protocols. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_rx.c $ -** -** 08 30 2012 yuche.tsai -** NULL -** Fix disconnect issue possible leads KE. -** -** 08 24 2012 yuche.tsai -** NULL -** Fix bug of invitation request. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 14 2012 cp.wu - * NULL - * remove another assertion by error message dump - * - * 01 05 2012 tsaiyuan.hsu - * [WCXRP00001157] [MT6620 Wi-Fi][FW][DRV] add timing measurement support for 802.11v - * add timing measurement support for 802.11v. - * - * 11 19 2011 yuche.tsai - * NULL - * Update RSSI for P2P. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 10 21 2011 eddie.chen - * [WCXRP00001051] [MT6620 Wi-Fi][Driver/Fw] Adjust the STA aging timeout - * Add switch to ignore the STA aging timeout. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 08 26 2011 cp.wu - * [WCXRP00000958] [MT6620 Wi-Fi][Driver] Extend polling timeout from 25ms to 1sec due to RF calibration might took up to 600ms - * extend polling RX response timeout period from 25ms to 1000ms. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * correct comment. - * - * 07 27 2011 cp.wu - * [WCXRP00000876] [MT5931][Drver] Decide to retain according to currently availble RX counter and QUE_MGT used count - * take use of QUE_MGT exported function to estimate currently RX buffer usage count. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 09 2011 tsaiyuan.hsu - * [WCXRP00000760] [MT5931 Wi-Fi][FW] Refine rxmHandleMacRxDone to reduce code size - * move send_auth at rxmHandleMacRxDone in firmware to driver to reduce code size. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 05 05 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add delay after whole-chip resetting for MT5931 E1 ASIC. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support for GO. - * - * 04 01 2011 tsaiyuan.hsu - * [WCXRP00000615] [MT 6620 Wi-Fi][Driver] Fix klocwork issues - * fix the klocwork issues, 57500, 57501, 57502 and 57503. - * - * 03 19 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Add beacon timeout support for WiFi Direct Network. - * - * 03 18 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * enable the Anti_piracy check at driver . - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000419] [Volunteer Patch][MT6620/MT5931][Driver] Provide function of disconnect to target station for AAA module. - * Remove Station Record after Aging timeout. - * - * 02 10 2011 cp.wu - * [WCXRP00000434] [MT6620 Wi-Fi][Driver] Obsolete unused event packet handlers - * EVENT_ID_CONNECTION_STATUS has been obsoleted and no need to handle. - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add MLME deauthentication support for Hot-Spot mode. - * - * 02 09 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Adjust variable order. - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * . - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 24 2011 cm.chang - * [WCXRP00000384] [MT6620 Wi-Fi][Driver][FW] Handle 20/40 action frame in AP mode and stop ampdu timer when sta_rec is freed - * Process received 20/40 coexistence action frame for AP mode - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update beacon for NoA - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 27 2010 george.huang - * [WCXRP00000127] [MT6620 Wi-Fi][Driver] Add a registry to disable Beacon Timeout function for SQA test by using E1 EVB - * Support registry option for disable beacon lost detection. - * - * 10 20 2010 wh.su - * NULL - * add a cmd to reset the p2p key - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed compilier error. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 23 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * eliminate reference of CFG_RESPONSE_MAX_PKT_SIZE - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * release RX packet to packet pool when in RF test mode - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 08 2010 cp.wu - * NULL - * use static memory pool for storing IEs of scanning result. - * - * 09 07 2010 yuche.tsai - * NULL - * Add a common buffer, store the IE of a P2P device in this common buffer. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 cm.chang - * NULL - * Migrate RLM code to host from FW - * - * 08 20 2010 yuche.tsai - * NULL - * When enable WiFi Direct function, check each packet to tell which interface to indicate. - * - * 08 05 2010 yuche.tsai - * NULL - * Add P2P Device Discovery Function. - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 george.huang - * NULL - * handle event for updating NOA parameters indicated from FW - * - * 08 02 2010 yuche.tsai - * NULL - * Add support API for RX public action frame. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 30 2010 cp.wu - * NULL - * 1) BoW wrapper: use definitions instead of hard-coded constant for error code - * 2) AIS-FSM: eliminate use of desired RF parameters, use prTargetBssDesc instead - * 3) add handling for RX_PKT_DESTINATION_HOST_WITH_FORWARD for GO-broadcast frames - * - * 07 26 2010 yuche.tsai - * - * Update Device Capability Bitmap & Group Capability Bitmap from 16 bits to 8 bits. - * - * 07 24 2010 wh.su - * - * .support the Wi-Fi RSN - * - * 07 23 2010 cp.wu - * - * add AIS-FSM handling for beacon timeout event. - * - * 07 21 2010 yuche.tsai - * - * Add P2P Scan & Scan Result Parsing & Saving. - * - * 07 19 2010 cm.chang - * - * Set RLM parameters and enable CNM channel manager - * - * 07 19 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration. - * Add Ad-Hoc support to AIS-FSM - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 15 2010 cp.wu - * - * sync. bluetooth-over-Wi-Fi interface to driver interface document v0.2.6. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill ucStaRecIdx into SW_RFB_T. - * - * 07 02 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) for event packet, no need to fill RFB. - * 2) when wlanAdapterStart() failed, no need to initialize state machines - * 3) after Beacon/ProbeResp parsing, corresponding BSS_DESC_T should be marked as IE-parsed - * - * 07 01 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implementation of DRV-SCN and related mailbox message handling. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * refine TX-DONE callback. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * implement TX_DONE callback path. - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add TX Done Event handle entry - * - * 06 21 2010 wh.su - * [WPD00003840][MT6620 5931] Security migration - * remove duplicate variable for migration. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * saa_fsm.c is migrated. - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add management dispatching function table. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) eliminate CFG_CMD_EVENT_VERSION_0_9 - * 2) when disconnected, indicate nic directly (no event is needed) - * - * 06 08 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * cnm_timer has been migrated. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * merge wlan_def.h. - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * sync with MT6620 driver for scan result replacement policy - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) integrate OID_GEN_NETWORK_LAYER_ADDRESSES with CMD_ID_SET_IP_ADDRESS - * 2) buffer statistics data for 2 seconds - * 3) use default value for adhoc parameters instead of 0 - * - * 05 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) do not take timeout mechanism for power mode oids - * 2) retrieve network type from connection status - * 3) after disassciation, set radio state to off - * 4) TCP option over IPv6 is supported - * - * 04 29 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * fixing the PMKID candicate indicate code. - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * basic implementation for EVENT_BT_OVER_WIFI - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 16 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * treat BUS access failure as kind of card removal. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * nicRxProcessEvent packet doesn't access spin-lock directly from now on. - * - * 04 14 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * do not need to release the spin lock due to it is done inside nicGetPendingCmdInfo() - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add channel frequency <-> number conversion - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * 2) add KAPI for handling association info - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve Linux supplicant compliance - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * rWlanInfo is modified before data is indicated to OS - * - * 03 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a temporary flag for integration with CMD/EVENT v0.9. - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * the frequency is used for adhoc connection only - * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * . - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * - * - * 03 19 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add ACPI D0/D3 state switching support - * * * * * * * * * 2) use more formal way to handle interrupt when the status is retrieved from enhanced RX response - * - * 03 15 2010 kevin.huang - * [WPD00003820][MT6620 Wi-Fi] Modify the code for meet the WHQL test - * Add event for activate STA_RECORD_T - * - * 03 12 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct fgSetQuery/fgNeedResp check - * - * 03 11 2010 cp.wu - * [WPD00003821][BUG] Host driver stops processing RX packets from HIF RX0 - * add RX starvation warning debug message controlled by CFG_HIF_RX_STARVATION_WARNING - * - * 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) the use of prPendingOid revised, all accessing are now protected by spin lock - * * * * 2) ensure wlanReleasePendingOid will clear all command queues - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * move EVENT_ID_ASSOC_INFO from nic_rx.c to gl_kal_ndis_51.c - * * 'cause it involves OS dependent data structure handling - * - * 02 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * correct behavior to prevent duplicated RX handling for RX0_DONE and RX1_DONE - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Updated API interfaces for qmHandleEventRxAddBa() and qmHandleEventRxDelBa() - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement host-side firmware download logic - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * 4) nicRxWaitResponse() revised - * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 01 27 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * . - * - * 01 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * implement following 802.11 OIDs: - * * * * * * OID_802_11_RSSI, - * * * * * * OID_802_11_RSSI_TRIGGER, - * * * * * * OID_802_11_STATISTICS, - * * * * * * OID_802_11_DISASSOCIATE, - * * * * * * OID_802_11_POWER_MODE - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * 2) add 4 counter for recording aggregation statistics - * - * 12 23 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add a precheck: if free sw rfb is not enough, do not invoke read transactionu1rwduu`wvpghlqg|fu+rp - * - * 12 22 2009 cp.wu - * [WPD00003809][Bug] Host driver will crash when processing reordered MSDUs - * The root cause is pointer accessing by mistake. After dequeued from reordering-buffer, handling logic should access returned pointer instead of pointer which has been passed in before. -** \main\maintrunk.MT6620WiFiDriver_Prj\58 2009-12-17 13:40:33 GMT mtk02752 -** always update prAdapter->rSDIOCtrl when enhanced response is read by RX -** \main\maintrunk.MT6620WiFiDriver_Prj\57 2009-12-16 18:01:38 GMT mtk02752 -** if interrupt enhanced response is fetched by RX enhanced response, RX needs to invoke interrupt handlers too -** \main\maintrunk.MT6620WiFiDriver_Prj\56 2009-12-16 14:16:52 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\55 2009-12-15 20:03:12 GMT mtk02752 -** ASSERT when RX FreeSwRfb is not enough -** \main\maintrunk.MT6620WiFiDriver_Prj\54 2009-12-15 17:01:29 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is enabled, after enhanced response is read, rx procedure should process 1) TX_DONE_INT 2) D2H INT as well -** \main\maintrunk.MT6620WiFiDriver_Prj\53 2009-12-14 20:45:28 GMT mtk02752 -** when CFG_SDIO_RX_ENHANCE is set, TC counter must be updated each time RX enhance response is read -** -** \main\maintrunk.MT6620WiFiDriver_Prj\52 2009-12-14 11:34:16 GMT mtk02752 -** correct a trivial logic issue -** \main\maintrunk.MT6620WiFiDriver_Prj\51 2009-12-14 10:28:25 GMT mtk02752 -** add a protection to avoid out-of-boundary access -** \main\maintrunk.MT6620WiFiDriver_Prj\50 2009-12-10 16:55:18 GMT mtk02752 -** code clean -** \main\maintrunk.MT6620WiFiDriver_Prj\49 2009-12-09 14:06:47 GMT MTK02468 -** Added parsing event packets with EVENT_ID_RX_ADDBA or EVENT_ID_RX_DELBA -** \main\maintrunk.MT6620WiFiDriver_Prj\48 2009-12-08 17:37:51 GMT mtk02752 -** handle EVENT_ID_TEST_STATUS as well -** \main\maintrunk.MT6620WiFiDriver_Prj\47 2009-12-04 17:59:11 GMT mtk02752 -** to pass free-build compilation check -** \main\maintrunk.MT6620WiFiDriver_Prj\46 2009-12-04 12:09:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\45 2009-12-04 11:53:37 GMT mtk02752 -** all API should be compilable under SD1_SD3_DATAPATH_INTEGRATION == 0 -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-03 16:19:48 GMT mtk01461 -** Fix the Connected Event -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-11-30 10:56:18 GMT mtk02752 -** 1st DW of WIFI_EVENT_T is shared with HIF_RX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-11-30 10:11:27 GMT mtk02752 -** implement replacement for bss scan result -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-11-27 11:08:05 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-11-26 09:38:59 GMT mtk02752 -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-11-26 09:29:40 GMT mtk02752 -** enable packet forwarding path (for AP mode) -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-11-25 21:37:00 GMT mtk02752 -** sync. with EVENT_SCAN_RESULT_T change, and add an assert for checking event size -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-25 20:17:41 GMT mtk02752 -** fill HIF_TX_HEADER_T.u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-25 18:18:57 GMT mtk02752 -** buffer scan result to prGlueInfo->rWlanInfo.arScanResult directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-24 22:42:45 GMT mtk02752 -** add nicRxAddScanResult() to prepare to handle SCAN_RESULT event (not implemented yet) -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-24 20:51:41 GMT mtk02752 -** integrate with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-24 19:56:17 GMT mtk02752 -** adopt P_HIF_RX_HEADER_T in new path -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-23 20:31:21 GMT mtk02752 -** payload to send into pfCmdDoneHandler() will not include WIFI_EVENT_T -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-23 17:51:34 GMT mtk02752 -** when event packet corresponding to some pendingOID is received, pendingOID should be cleared -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 14:46:54 GMT mtk02752 -** implement nicRxProcessEventPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-17 22:40:54 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-16 21:48:22 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-16 15:41:18 GMT mtk01084 -** modify the length to be read in emu mode -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-13 17:00:12 GMT mtk02752 -** add blank function for event packet -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-13 13:54:24 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-11 14:41:51 GMT mtk02752 -** fix typo -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-11 14:33:46 GMT mtk02752 -** add protection when there is no packet avilable -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 12:33:36 GMT mtk02752 -** add RX1 read path for aggregated/enhanced/normal packet read procedures -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-11 10:36:18 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-11-04 14:11:08 GMT mtk01084 -** modify lines in RX aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-30 18:17:23 GMT mtk01084 -** modify RX aggregation handling -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-29 19:56:12 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-10-23 16:08:34 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-10-13 21:59:20 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-10-02 13:59:08 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-05-21 23:39:05 GMT mtk01461 -** Fix the paste error of RX STATUS in OOB of HIF Loopback CTRL -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-05-20 12:25:32 GMT mtk01461 -** Fix process of Read Done, and add u4MaxEventBufferLen to nicRxWaitResponse() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-05-18 21:13:18 GMT mtk01426 -** Fixed compiler error -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-05-18 21:05:29 GMT mtk01426 -** Fixed nicRxSDIOAggReceiveRFBs() ASSERT issue -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-28 10:38:43 GMT mtk01461 -** Fix RX STATUS is DW align for SDIO_STATUS_ENHANCE mode and refine nicRxSDIOAggeceiveRFBs() for RX Aggregation -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-22 09:12:17 GMT mtk01461 -** Fix nicRxProcessHIFLoopbackPacket(), the size of HIF CTRL LENTH field is 1 byte -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-14 15:51:26 GMT mtk01426 -** Update RX OOB Setting -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-03 14:58:58 GMT mtk01426 -** Fixed logical error -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-01 10:58:31 GMT mtk01461 -** Rename the HIF_PKT_TYPE_DATA -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 21:51:18 GMT mtk01461 -** Fix u4HeaderOffset in nicRxProcessHIFLoopbackPacket() -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 21:02:58 GMT mtk01426 -** Add CFG_SDIO_RX_ENHANCE and CFG_HIF_LOOPBACK support -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:20:59 GMT mtk01426 -** Add nicRxWaitResponse function -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:01 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -#ifndef LINUX -#include -#else -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define RX_RESPONSE_TIMEOUT (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_MGMT_FRAME_HANDLING -static PROCESS_RX_MGT_FUNCTION apfnProcessRxMgtFrame[MAX_NUM_OF_FC_SUBTYPES] = { - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0000: Association request */ - #else - NULL, /* subtype 0000: Association request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0001: Association response */ - #if CFG_SUPPORT_AAA - aaaFsmRunEventRxAssoc, /* subtype 0010: Reassociation request */ - #else - NULL, /* subtype 0010: Reassociation request */ - #endif /* CFG_SUPPORT_AAA */ - saaFsmRunEventRxAssoc, /* subtype 0011: Reassociation response */ - #if CFG_SUPPORT_ADHOC - bssProcessProbeRequest, /* subtype 0100: Probe request */ - #else - NULL, /* subtype 0100: Probe request */ - #endif /* CFG_SUPPORT_ADHOC */ - scanProcessBeaconAndProbeResp, /* subtype 0101: Probe response */ - NULL, /* subtype 0110: reserved */ - NULL, /* subtype 0111: reserved */ - scanProcessBeaconAndProbeResp, /* subtype 1000: Beacon */ - NULL, /* subtype 1001: ATIM */ - saaFsmRunEventRxDisassoc, /* subtype 1010: Disassociation */ - authCheckRxAuthFrameTransSeq, /* subtype 1011: Authentication */ - saaFsmRunEventRxDeauth, /* subtype 1100: Deauthentication */ - nicRxProcessActionFrame, /* subtype 1101: Action */ - NULL, /* subtype 1110: reserved */ - NULL /* subtype 1111: reserved */ -}; -#endif - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucMemHandle; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i; - - DEBUGFUNC("nicRxInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - - //4 <0> Clear allocated memory. - kalMemZero((PVOID) prRxCtrl->pucRxCached, prRxCtrl->u4RxCachedSize); - - //4 <1> Initialize the RFB lists - QUEUE_INITIALIZE(&prRxCtrl->rFreeSwRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rReceivedRfbList); - QUEUE_INITIALIZE(&prRxCtrl->rIndicatedRfbList); - - pucMemHandle = prRxCtrl->pucRxCached; - for (i = CFG_RX_MAX_PKT_NUM; i != 0; i--) { - prSwRfb = (P_SW_RFB_T)pucMemHandle; - - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - - pucMemHandle += ALIGN_4(sizeof(SW_RFB_T)); - } - - ASSERT(prRxCtrl->rFreeSwRfbList.u4NumElem == CFG_RX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prRxCtrl->pucRxCached) == prRxCtrl->u4RxCachedSize); - - //4 <2> Clear all RX counters - RX_RESET_ALL_CNTS(prRxCtrl); - -#if CFG_SDIO_RX_AGG - prRxCtrl->pucRxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); - #endif -#else - #if !defined(MT5931) - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); - #endif -#endif - -#if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum = 0; - prRxCtrl->u4TotalRxPacketNum = 0; -#endif - -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt = 0; - prRxCtrl->u4DequeuedCnt = 0; -#endif - - return; -} /* end of nicRxInitialize() */ - - -#if defined(MT5931) -/*----------------------------------------------------------------------------*/ -/*! -* @brief Initialize HIF RX control registers explicitly -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxPostInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - DEBUGFUNC("nicRxPostInitialize"); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - -#if CFG_SDIO_RX_AGG - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, CFG_SDIO_MAX_RX_AGG_NUM); -#else - HAL_CFG_MAX_HIF_RX_LEN_NUM(prAdapter, 1); -#endif - -} /* end of nicRxPostInitialize() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Uninitialize the RFBs -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUninitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - nicRxFlush(prAdapter); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - if (prSwRfb){ - if (prSwRfb->pvPacket) { - kalPacketFree(prAdapter->prGlueInfo, prSwRfb->pvPacket); - } - prSwRfb->pvPacket = NULL; - } - else { - break; - } - }while (TRUE); - - return; -} /* end of nicRxUninitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb specify the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillRFB ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4PktLen = 0; - UINT_32 u4MacHeaderLen; - UINT_32 u4HeaderOffset; - - DEBUGFUNC("nicRxFillRFB"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - u4PktLen= prHifRxHdr->u2PacketLen; - - u4HeaderOffset = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_OFFSET_MASK); - u4MacHeaderLen = (UINT_32)(prHifRxHdr->ucHerderLenOffset & HIF_RX_HDR_HEADER_LEN) - >> HIF_RX_HDR_HEADER_LEN_OFFSET; - - //DBGLOG(RX, TRACE, ("u4HeaderOffset = %d, u4MacHeaderLen = %d\n", - // u4HeaderOffset, u4MacHeaderLen)); - - prSwRfb->u2HeaderLen = (UINT_16)u4MacHeaderLen; - prSwRfb->pvHeader = (PUINT_8)prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset; - prSwRfb->u2PacketLen = (UINT_16)(u4PktLen - (HIF_RX_HDR_SIZE + u4HeaderOffset)); - - //DBGLOG(RX, TRACE, ("Dump Rx packet, u2PacketLen = %d\n", prSwRfb->u2PacketLen)); - //DBGLOG_MEM8(RX, TRACE, prSwRfb->pvHeader, prSwRfb->u2PacketLen); - -#if 0 - if (prHifRxHdr->ucReorder & HIF_RX_HDR_80211_HEADER_FORMAT){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_802_11_FORMAT; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_802_11_FORMAT\n")); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_DO_REORDER){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_DO_REORDERING; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_DO_REORDERING\n")); - - /* Get Seq. No and TID, Wlan Index info */ - if (prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_BAR_FRAME){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_BAR_FRAME; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_BAR_FRAME\n")); - } - - prSwRfb->u2SSN = prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_SEQ_NO_MASK; - prSwRfb->ucTid = (UINT_8)((prHifRxHdr->u2SeqNoTid & HIF_RX_HDR_TID_MASK) - >> HIF_RX_HDR_TID_OFFSET); - DBGLOG(RX, TRACE, ("u2SSN = %d, ucTid = %d\n", - prSwRfb->u2SSN, prSwRfb->ucTid)); - } - - if (prHifRxHdr->ucReorder & HIF_RX_HDR_WDS){ - prSwRfb->u4HifRxHdrFlag |= HIF_RX_HDR_FLAG_AMP_WDS; - DBGLOG(RX, TRACE, ("HIF_RX_HDR_FLAG_AMP_WDS\n")); - } -#endif -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 -/*----------------------------------------------------------------------------*/ -/*! -* @brief Fill checksum status in RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* @param u4TcpUdpIpCksStatus specify the Checksum status -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxFillChksumStatus( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb, - IN UINT_32 u4TcpUdpIpCksStatus -) -{ - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prAdapter->u4CSUMFlags != CSUM_NOT_SUPPORTED){ - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv4) { // IPv4 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_IP) { //IP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_SUCCESS; - } - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_IPv6) {//IPv6 packet - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_SUCCESS; - - if (u4TcpUdpIpCksStatus & RX_CS_TYPE_TCP) { //TCP packet - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_TCP) { //TCP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_SUCCESS; - } - } - else if (u4TcpUdpIpCksStatus & RX_CS_TYPE_UDP) { //UDP packet - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - if(u4TcpUdpIpCksStatus & RX_CS_STATUS_UDP) { //UDP packet csum failed - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_FAILED; - } else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_SUCCESS; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_UDP] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_TCP] = CSUM_RES_NONE; - } - } - else { - prSwRfb->aeCSUM[CSUM_TYPE_IPV4] = CSUM_RES_NONE; - prSwRfb->aeCSUM[CSUM_TYPE_IPV6] = CSUM_RES_NONE; - } - } - -} -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process packet doesn't need to do buffer reordering -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessPktWithoutReorder ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_TX_CTRL_T prTxCtrl; - BOOL fgIsRetained = FALSE; - UINT_32 u4CurrentRxBufferCount; - P_STA_RECORD_T prStaRec = (P_STA_RECORD_T)NULL; - - DEBUGFUNC("nicRxProcessPktWithoutReorder"); - //DBGLOG(RX, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - u4CurrentRxBufferCount = prRxCtrl->rFreeSwRfbList.u4NumElem; - /* QM USED = $A, AVAILABLE COUNT = $B, INDICATED TO OS = $C - * TOTAL = $A + $B + $C - * - * Case #1 (Retain) - * ------------------------------------------------------- - * $A + $B < THRESHOLD := $A + $B + $C < THRESHOLD + $C := $TOTAL - THRESHOLD < $C - * => $C used too much, retain - * - * Case #2 (Non-Retain) - * ------------------------------------------------------- - * $A + $B > THRESHOLD := $A + $B + $C > THRESHOLD + $C := $TOTAL - THRESHOLD > $C - * => still availble for $C to use - * - */ - fgIsRetained = (((u4CurrentRxBufferCount + - qmGetRxReorderQueuedBufferCount(prAdapter) + - prTxCtrl->i4PendingFwdFrameCount) < CFG_RX_RETAINED_PKT_THRESHOLD) ? - TRUE : FALSE); - - //DBGLOG(RX, INFO, ("fgIsRetained = %d\n", fgIsRetained)); - - if (kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - fgIsRetained, - prSwRfb->aeCSUM) != WLAN_STATUS_SUCCESS) { - DBGLOG(RX, ERROR, ("kalProcessRxPacket return value != WLAN_STATUS_SUCCESS\n")); - ASSERT(0); - - nicRxReturnRFB(prAdapter, prSwRfb); - return; - } - else { - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - - if (prStaRec) { -#if CFG_ENABLE_WIFI_DIRECT - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX && - prAdapter->fgIsP2PRegistered == TRUE) { - GLUE_SET_PKT_FLAG_P2P(prSwRfb->pvPacket); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - if (prStaRec->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - GLUE_SET_PKT_FLAG_PAL(prSwRfb->pvPacket); - } -#endif - } - prRxCtrl->apvIndPacket[prRxCtrl->ucNumIndPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumIndPacket++; - } - - if (fgIsRetained) { - prRxCtrl->apvRetainedPacket[prRxCtrl->ucNumRetainedPacket] = prSwRfb->pvPacket; - prRxCtrl->ucNumRetainedPacket++; - /* TODO : error handling of nicRxSetupRFB */ - nicRxSetupRFB(prAdapter, prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - } - else{ - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process forwarding data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessForwardPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_MSDU_INFO_T prMsduInfo, prRetMsduInfoList; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessForwardPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rFreeMsduInfoList, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - if(prMsduInfo && kalProcessRxPacket(prAdapter->prGlueInfo, - prSwRfb->pvPacket, - prSwRfb->pvHeader, - (UINT_32)prSwRfb->u2PacketLen, - prRxCtrl->rFreeSwRfbList.u4NumElem < CFG_RX_RETAINED_PKT_THRESHOLD ? TRUE : FALSE, - prSwRfb->aeCSUM) == WLAN_STATUS_SUCCESS) { - - prMsduInfo->eSrc = TX_PACKET_FORWARDING; - // pack into MSDU_INFO_T - nicTxFillMsduInfo(prAdapter, prMsduInfo, (P_NATIVE_PACKET)(prSwRfb->pvPacket)); - // Overwrite the ucNetworkType - prMsduInfo->ucNetworkType = HIF_RX_HDR_GET_NETWORK_IDX(prSwRfb->prHifRxHdr); - - // release RX buffer (to rIndicatedRfbList) - prSwRfb->pvPacket = NULL; - nicRxReturnRFB(prAdapter, prSwRfb); - - // increase forward frame counter - GLUE_INC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - - // send into TX queue - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfoList = qmEnqueueTxPackets(prAdapter, prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prRetMsduInfoList != NULL) { // TX queue refuses queuing the packet - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfoList); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfoList); - } - /* indicate service thread for sending */ - if(prTxCtrl->i4PendingFwdFrameCount > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - } - else { // no TX resource - nicRxReturnRFB(prAdapter, prSwRfb); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process broadcast data packet for both host and forwarding -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessGOBroadcastPkt ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_SW_RFB_T prSwRfbDuplicated; - P_TX_CTRL_T prTxCtrl; - P_RX_CTRL_T prRxCtrl; - P_HIF_RX_HEADER_T prHifRxHdr; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessGOBroadcastPkt"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prTxCtrl = &prAdapter->rTxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - ASSERT(CFG_NUM_OF_QM_RX_PKT_NUM >= 16); - - if( prRxCtrl->rFreeSwRfbList.u4NumElem - >= (CFG_RX_MAX_PKT_NUM - (CFG_NUM_OF_QM_RX_PKT_NUM - 16 /* Reserved for others */) ) ) { - - /* 1. Duplicate SW_RFB_T */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfbDuplicated, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if(prSwRfbDuplicated){ - kalMemCopy(prSwRfbDuplicated->pucRecvBuff, - prSwRfb->pucRecvBuff, - ALIGN_4(prHifRxHdr->u2PacketLen + HIF_RX_HW_APPENDED_LEN)); - - prSwRfbDuplicated->ucPacketType = HIF_RX_PKT_TYPE_DATA; - prSwRfbDuplicated->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - nicRxFillRFB(prAdapter, prSwRfbDuplicated); - - /* 2. Modify eDst */ - prSwRfbDuplicated->eDst = RX_PKT_DESTINATION_FORWARD; - - /* 4. Forward */ - nicRxProcessForwardPkt(prAdapter, prSwRfbDuplicated); - } - } - else { - DBGLOG(RX, WARN, ("Stop to forward BMC packet due to less free Sw Rfb %u\n", prRxCtrl->rFreeSwRfbList.u4NumElem)); - } - - /* 3. Indicate to host */ - prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - nicRxProcessPktWithoutReorder(prAdapter, prSwRfb); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF data packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessDataPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prRetSwRfb, prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("nicRxProcessDataPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prRxCtrl = &prAdapter->rRxCtrl; - - nicRxFillRFB(prAdapter, prSwRfb); - -#if 1 /* Check 1x Pkt */ - if (prSwRfb->u2PacketLen > 14) { - PUINT_8 pc = (PUINT_8)prSwRfb->pvHeader; - UINT_16 u2Etype = 0; - - u2Etype = (pc[ETH_TYPE_LEN_OFFSET] << 8) | (pc[ETH_TYPE_LEN_OFFSET + 1]); - -#if CFG_SUPPORT_WAPI - if (u2Etype == ETH_P_1X || u2Etype == ETH_WPI_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#else - if (u2Etype == ETH_P_1X) { - DBGLOG(RSN, INFO, ("R1X len=%d\n", prSwRfb->u2PacketLen)); - } -#endif - else if (u2Etype == ETH_P_PRE_1X) { - DBGLOG(RSN, INFO, ("Pre R1X len=%d\n", prSwRfb->u2PacketLen)); - } - } -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - { - UINT_32 u4TcpUdpIpCksStatus; - - u4TcpUdpIpCksStatus = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - nicRxFillChksumStatus(prAdapter, prSwRfb, u4TcpUdpIpCksStatus); - - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - prStaRec = cnmGetStaRecByIndex(prAdapter, prHifRxHdr->ucStaRecIdx); - if(secCheckClassError(prAdapter, prSwRfb, prStaRec) == TRUE && - prAdapter->fgTestMode == FALSE) { -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4QueuedCnt++; -#endif - - if((prRetSwRfb = qmHandleRxPackets(prAdapter, prSwRfb)) != NULL) { - do { - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prRetSwRfb); - - switch(prRetSwRfb->eDst) { - case RX_PKT_DESTINATION_HOST: - nicRxProcessPktWithoutReorder(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_FORWARD: - nicRxProcessForwardPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_HOST_WITH_FORWARD: - nicRxProcessGOBroadcastPkt(prAdapter, prRetSwRfb); - break; - - case RX_PKT_DESTINATION_NULL: - nicRxReturnRFB(prAdapter, prRetSwRfb); - RX_INC_CNT(prRxCtrl, RX_DST_NULL_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - break; - - default: - break; - } -#if CFG_HIF_RX_STARVATION_WARNING - prRxCtrl->u4DequeuedCnt++; -#endif - prRetSwRfb = prNextSwRfb; - } while(prRetSwRfb); - } - } - else { - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_CLASS_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process HIF event packet -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessEventPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_CMD_INFO_T prCmdInfo; - P_MSDU_INFO_T prMsduInfo; - P_WIFI_EVENT_T prEvent; - P_GLUE_INFO_T prGlueInfo; - - DEBUGFUNC("nicRxProcessEventPacket"); - //DBGLOG(INIT, TRACE, ("\n")); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prEvent = (P_WIFI_EVENT_T) prSwRfb->pucRecvBuff; - prGlueInfo = prAdapter->prGlueInfo; - - // Event Handling - switch(prEvent->ucEID) { - case EVENT_ID_CMD_RESULT: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - P_EVENT_CMD_RESULT prCmdResult; - prCmdResult = (P_EVENT_CMD_RESULT) ((PUINT_8)prEvent + EVENT_HDR_SIZE); - - /* CMD_RESULT should be only in response to Set commands */ - ASSERT(prCmdInfo->fgSetQuery == FALSE || prCmdInfo->fgNeedResp == TRUE); - - if(prCmdResult->ucStatus == 0) { // success - if(prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid == TRUE) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - } - else if(prCmdResult->ucStatus == 1) { // reject - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_FAILURE); - } - else if(prCmdResult->ucStatus == 2) { // unknown CMD - if(prCmdInfo->fgIsOid == TRUE) - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_NOT_SUPPORTED); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - -#if 0 - case EVENT_ID_CONNECTION_STATUS: - /* OBSELETE */ - { - P_EVENT_CONNECTION_STATUS prConnectionStatus; - prConnectionStatus = (P_EVENT_CONNECTION_STATUS) (prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_CONNECTION_STATUS = %d\n", prConnectionStatus->ucMediaStatus); - if (prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_DISCONNECTED) { // disconnected - if(kalGetMediaStateIndicated(prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_DISCONNECT, - NULL, - 0); - - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - } - } - else if(prConnectionStatus->ucMediaStatus == PARAM_MEDIA_STATE_CONNECTED) { // connected - prAdapter->rWlanInfo.u4SysTime = kalGetTimeTick(); - - // fill information for association result - prAdapter->rWlanInfo.rCurrBssId.rSsid.u4SsidLen - = prConnectionStatus->ucSsidLen; - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.rSsid.aucSsid, - prConnectionStatus->aucSsid, - prConnectionStatus->ucSsidLen); - - kalMemCopy(prAdapter->rWlanInfo.rCurrBssId.arMacAddress, - prConnectionStatus->aucBssid, - MAC_ADDR_LEN); - - prAdapter->rWlanInfo.rCurrBssId.u4Privacy - = prConnectionStatus->ucEncryptStatus; // @FIXME - prAdapter->rWlanInfo.rCurrBssId.rRssi - = 0; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.eNetworkTypeInUse - = PARAM_NETWORK_TYPE_AUTOMODE; //@FIXME - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4BeaconPeriod - = prConnectionStatus->u2BeaconPeriod; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4ATIMWindow - = prConnectionStatus->u2ATIMWindow; - prAdapter->rWlanInfo.rCurrBssId.rConfiguration.u4DSConfig - = prConnectionStatus->u4FreqInKHz; - prAdapter->rWlanInfo.ucNetworkType - = prConnectionStatus->ucNetworkType; - - switch(prConnectionStatus->ucInfraMode) { - case 0: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_IBSS; - break; - case 1: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_INFRA; - break; - case 2: - default: - prAdapter->rWlanInfo.rCurrBssId.eOpMode = NET_TYPE_AUTO_SWITCH; - break; - } - // always indicate to OS according to MSDN (re-association/roaming) - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_CONNECT, - NULL, - 0); - } - } - break; - - case EVENT_ID_SCAN_RESULT: - /* OBSELETE */ - break; -#endif - - case EVENT_ID_RX_ADDBA: - /* The FW indicates that an RX BA agreement will be established */ - qmHandleEventRxAddBa(prAdapter, prEvent); - break; - - case EVENT_ID_RX_DELBA: - /* The FW indicates that an RX BA agreement has been deleted */ - qmHandleEventRxDelBa(prAdapter, prEvent); - break; - - case EVENT_ID_LINK_QUALITY: -#if CFG_ENABLE_WIFI_DIRECT && CFG_SUPPORT_P2P_RSSI_QUERY - if (prEvent->u2PacketLen == EVENT_HDR_SIZE + sizeof(EVENT_LINK_QUALITY_EX)) { - P_EVENT_LINK_QUALITY_EX prLqEx = (P_EVENT_LINK_QUALITY_EX)(prEvent->aucBuffer); - - if (prLqEx->ucIsLQ0Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - if (prLqEx->ucIsLQ1Rdy) { - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_P2P_INDEX, (P_EVENT_LINK_QUALITY)prLqEx); - } - } - else { - /* For old FW, P2P may invoke link quality query, and make driver flag becone TRUE. */ - DBGLOG(P2P, WARN, ("Old FW version, not support P2P RSSI query.\n")); - - /* Must not use NETWORK_TYPE_P2P_INDEX, cause the structure is mismatch. */ - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); - } -#else - nicUpdateLinkQuality(prAdapter, NETWORK_TYPE_AIS_INDEX, (P_EVENT_LINK_QUALITY)(prEvent->aucBuffer)); -#endif - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - #ifndef LINUX - if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_GREATER && - prAdapter->rWlanInfo.rRssiTriggerValue >= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - else if(prAdapter->rWlanInfo.eRssiTriggerType == ENUM_RSSI_TRIGGER_LESS && - prAdapter->rWlanInfo.rRssiTriggerValue <= (PARAM_RSSI)(prAdapter->rLinkQuality.cRssi)) { - prAdapter->rWlanInfo.eRssiTriggerType = ENUM_RSSI_TRIGGER_TRIGGERED; - - kalIndicateStatusAndComplete(prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID) &(prAdapter->rWlanInfo.rRssiTriggerValue), sizeof(PARAM_RSSI)); - } - #endif - - break; - - case EVENT_ID_MIC_ERR_INFO: - { - P_EVENT_MIC_ERR_INFO prMicError; - //P_PARAM_AUTH_EVENT_T prAuthEvent; - P_STA_RECORD_T prStaRec; - - DBGLOG(RSN, EVENT, ("EVENT_ID_MIC_ERR_INFO\n")); - - prMicError = (P_EVENT_MIC_ERR_INFO)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByAddress(prAdapter, - (UINT_8) NETWORK_TYPE_AIS_INDEX, - prAdapter->rWlanInfo.rCurrBssId.arMacAddress); - ASSERT(prStaRec); - - if (prStaRec) { - rsnTkipHandleMICFailure(prAdapter, prStaRec, (BOOLEAN)prMicError->u4Flags); - } - else { - DBGLOG(RSN, INFO, ("No STA rec!!\n")); - } -#if 0 - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - /* Status type: Authentication Event */ - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_AUTHENTICATION; - - /* Authentication request */ - prAuthEvent->arRequest[0].u4Length = sizeof(PARAM_AUTH_REQUEST_T); - kalMemCopy((PVOID)prAuthEvent->arRequest[0].arBssid, - (PVOID)prAdapter->rWlanInfo.rCurrBssId.arMacAddress, /* whsu:Todo? */ - PARAM_MAC_ADDR_LEN); - - if (prMicError->u4Flags != 0) { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_GROUP_ERROR; - } - else { - prAuthEvent->arRequest[0].u4Flags = PARAM_AUTH_REQUEST_PAIRWISE_ERROR; - } - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + sizeof(PARAM_AUTH_REQUEST_T)); -#endif - } - break; - - case EVENT_ID_ASSOC_INFO: - { - P_EVENT_ASSOC_INFO prAssocInfo; - prAssocInfo = (P_EVENT_ASSOC_INFO)(prEvent->aucBuffer); - - kalHandleAssocInfo(prAdapter->prGlueInfo, prAssocInfo); - } - break; - - case EVENT_ID_802_11_PMKID: - { - P_PARAM_AUTH_EVENT_T prAuthEvent; - PUINT_8 cp; - UINT_32 u4LenOfUsedBuffer; - - prAuthEvent = (P_PARAM_AUTH_EVENT_T)prAdapter->aucIndicationEventBuffer; - - prAuthEvent->rStatus.eStatusType = ENUM_STATUS_TYPE_CANDIDATE_LIST; - - u4LenOfUsedBuffer = (UINT_32)(prEvent->u2PacketLen - 8); - - prAuthEvent->arRequest[0].u4Length = u4LenOfUsedBuffer; - - cp = (PUINT_8)&prAuthEvent->arRequest[0]; - - /* Status type: PMKID Candidatelist Event */ - kalMemCopy(cp, (P_EVENT_PMKID_CANDIDATE_LIST_T)(prEvent->aucBuffer), prEvent->u2PacketLen - 8); - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)prAuthEvent, - sizeof(PARAM_STATUS_INDICATION_T) + u4LenOfUsedBuffer); - } - break; - -#if 0 - case EVENT_ID_ACTIVATE_STA_REC_T: - { - P_EVENT_ACTIVATE_STA_REC_T prActivateStaRec; - prActivateStaRec = (P_EVENT_ACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_ACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prActivateStaRec->ucStaRecIdx, - MAC2STR(prActivateStaRec->aucMacAddr)); - - qmActivateStaRec(prAdapter, - (UINT_32)prActivateStaRec->ucStaRecIdx, - ((prActivateStaRec->fgIsQoS) ? TRUE: FALSE), - prActivateStaRec->ucNetworkTypeIndex, - ((prActivateStaRec->fgIsAP) ? TRUE: FALSE), - prActivateStaRec->aucMacAddr); - - } - break; - - case EVENT_ID_DEACTIVATE_STA_REC_T: - { - P_EVENT_DEACTIVATE_STA_REC_T prDeactivateStaRec; - prDeactivateStaRec = (P_EVENT_DEACTIVATE_STA_REC_T)(prEvent->aucBuffer); - - DbgPrint("RX EVENT: EVENT_ID_DEACTIVATE_STA_REC_T Index:%d, MAC:["MACSTR"]\n", - prDeactivateStaRec->ucStaRecIdx); - - qmDeactivateStaRec(prAdapter, - prDeactivateStaRec->ucStaRecIdx); - } - break; -#endif - - case EVENT_ID_SCAN_DONE: - scnEventScanDone(prAdapter, (P_EVENT_SCAN_DONE)(prEvent->aucBuffer)); - break; - - case EVENT_ID_TX_DONE: - { - P_EVENT_TX_DONE_T prTxDone; - prTxDone = (P_EVENT_TX_DONE_T)(prEvent->aucBuffer); - - DBGLOG(INIT, TRACE,("EVENT_ID_TX_DONE PacketSeq:%u ucStatus: %u SN: %u\n", - prTxDone->ucPacketSeq, prTxDone->ucStatus, prTxDone->u2SequenceNumber)); - - /* call related TX Done Handler */ - prMsduInfo = nicGetPendingTxMsduInfo(prAdapter, prTxDone->ucPacketSeq); - -#if CFG_SUPPORT_802_11V_TIMING_MEASUREMENT - DBGLOG(INIT, TRACE, ("EVENT_ID_TX_DONE u4TimeStamp = %x u2AirDelay = %x\n", - prTxDone->au4Reserved1, prTxDone->au4Reserved2)); - - wnmReportTimingMeas(prAdapter, prMsduInfo->ucStaRecIndex, - prTxDone->au4Reserved1, prTxDone->au4Reserved1 + prTxDone->au4Reserved2); -#endif - - if(prMsduInfo) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, (ENUM_TX_RESULT_CODE_T)(prTxDone->ucStatus)); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - } - break; - - case EVENT_ID_SLEEPY_NOTIFY: - { - P_EVENT_SLEEPY_NOTIFY prEventSleepyNotify; - prEventSleepyNotify = (P_EVENT_SLEEPY_NOTIFY)(prEvent->aucBuffer); - - //DBGLOG(RX, INFO, ("ucSleepyState = %d\n", prEventSleepyNotify->ucSleepyState)); - - prAdapter->fgWiFiInSleepyState = (BOOLEAN)(prEventSleepyNotify->ucSleepyState); - } - break; - case EVENT_ID_BT_OVER_WIFI: -#if CFG_ENABLE_BT_OVER_WIFI - { - UINT_8 aucTmp[sizeof(AMPC_EVENT) + sizeof(BOW_LINK_DISCONNECTED)]; - P_EVENT_BT_OVER_WIFI prEventBtOverWifi; - P_AMPC_EVENT prBowEvent; - P_BOW_LINK_CONNECTED prBowLinkConnected; - P_BOW_LINK_DISCONNECTED prBowLinkDisconnected; - - prEventBtOverWifi = (P_EVENT_BT_OVER_WIFI)(prEvent->aucBuffer); - - // construct event header - prBowEvent = (P_AMPC_EVENT)aucTmp; - - if(prEventBtOverWifi->ucLinkStatus == 0) { - // Connection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_CONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_CONNECTED); - - // fill event body - prBowLinkConnected = (P_BOW_LINK_CONNECTED)(prBowEvent->aucPayload); - prBowLinkConnected->rChannel.ucChannelNum = prEventBtOverWifi->ucSelectedChannel; - kalMemZero(prBowLinkConnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - else { - // Disconnection - prBowEvent->rHeader.ucEventId = BOW_EVENT_ID_LINK_DISCONNECTED; - prBowEvent->rHeader.ucSeqNumber = 0; - prBowEvent->rHeader.u2PayloadLength = sizeof(BOW_LINK_DISCONNECTED); - - // fill event body - prBowLinkDisconnected = (P_BOW_LINK_DISCONNECTED)(prBowEvent->aucPayload); - prBowLinkDisconnected->ucReason = 0; //@FIXME - kalMemZero(prBowLinkDisconnected->aucPeerAddress, MAC_ADDR_LEN); //@FIXME - - kalIndicateBOWEvent(prAdapter->prGlueInfo, prBowEvent); - } - } - break; -#endif - case EVENT_ID_STATISTICS: - /* buffer statistics for further query */ - prAdapter->fgIsStatValid = TRUE; - prAdapter->rStatUpdateTime = kalGetTimeTick(); - kalMemCopy(&prAdapter->rStatStruct, prEvent->aucBuffer, sizeof(EVENT_STATISTICS)); - - /* command response handling */ - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - - case EVENT_ID_CH_PRIVILEGE: - cnmChMngrHandleChEvent(prAdapter, prEvent); - break; - - case EVENT_ID_BSS_ABSENCE_PRESENCE: - qmHandleEventBssAbsencePresence(prAdapter, prEvent); - break; - - case EVENT_ID_STA_CHANGE_PS_MODE: - qmHandleEventStaChangePsMode(prAdapter, prEvent); - break; -#if CFG_ENABLE_WIFI_DIRECT - case EVENT_ID_STA_UPDATE_FREE_QUOTA: - qmHandleEventStaUpdateFreeQuota(prAdapter, prEvent); - break; -#endif - case EVENT_ID_BSS_BEACON_TIMEOUT: - DBGLOG(INIT, INFO,("EVENT_ID_BSS_BEACON_TIMEOUT\n")); - - if (prAdapter->fgDisBcnLostDetection == FALSE) { - P_EVENT_BSS_BEACON_TIMEOUT_T prEventBssBeaconTimeout; - prEventBssBeaconTimeout = (P_EVENT_BSS_BEACON_TIMEOUT_T)(prEvent->aucBuffer); - - if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) { - aisBssBeaconTimeout(prAdapter); - } -#if CFG_ENABLE_WIFI_DIRECT - else if((prAdapter->fgIsP2PRegistered) && - (prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) { - - p2pFsmRunEventBeaconTimeout(prAdapter); - } -#endif -#if CFG_ENABLE_BT_OVER_WIFI - else if(prEventBssBeaconTimeout->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) { - } -#endif - else { - DBGLOG(RX, ERROR, ("EVENT_ID_BSS_BEACON_TIMEOUT: (ucNetTypeIdx = %d)\n", - prEventBssBeaconTimeout->ucNetTypeIndex)); - } - } - - break; - case EVENT_ID_UPDATE_NOA_PARAMS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam; - prEventUpdateNoaParam = (P_EVENT_UPDATE_NOA_PARAMS_T)(prEvent->aucBuffer); - - if (prEventUpdateNoaParam->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX) { - p2pProcessEvent_UpdateNOAParam(prAdapter, - prEventUpdateNoaParam->ucNetTypeIndex, - prEventUpdateNoaParam); - } else { - ASSERT(0); - } - } -#else - ASSERT(0); -#endif - break; - - case EVENT_ID_STA_AGING_TIMEOUT: -#if CFG_ENABLE_WIFI_DIRECT - { - if (prAdapter->fgDisStaAgingTimeoutDetection == FALSE) { - P_EVENT_STA_AGING_TIMEOUT_T prEventStaAgingTimeout; - P_STA_RECORD_T prStaRec; - P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T)NULL; - - prEventStaAgingTimeout = (P_EVENT_STA_AGING_TIMEOUT_T)(prEvent->aucBuffer); - prStaRec = cnmGetStaRecByIndex(prAdapter, prEventStaAgingTimeout->ucStaRecIdx); - if (prStaRec == NULL) { - break; - } - - DBGLOG(INIT, INFO,("EVENT_ID_STA_AGING_TIMEOUT %u " MACSTR "\n", - prEventStaAgingTimeout->ucStaRecIdx, MAC2STR(prStaRec->aucMacAddr))); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - bssRemoveStaRecFromClientList(prAdapter, prBssInfo, prStaRec); - - /* Call False Auth */ - if (prAdapter->fgIsP2PRegistered) { - p2pFuncDisconnect(prAdapter, prStaRec, TRUE, REASON_CODE_DISASSOC_INACTIVITY); - } - - - } /* gDisStaAgingTimeoutDetection */ - - } -#endif - break; - - case EVENT_ID_AP_OBSS_STATUS: -#if CFG_ENABLE_WIFI_DIRECT - if(prAdapter->fgIsP2PRegistered){ - rlmHandleObssStatusEventPkt(prAdapter, (P_EVENT_AP_OBSS_STATUS_T) prEvent->aucBuffer); - } -#endif - break; - - case EVENT_ID_ROAMING_STATUS: -#if CFG_SUPPORT_ROAMING - { - P_ROAMING_PARAM_T prParam; - - prParam = (P_ROAMING_PARAM_T)(prEvent->aucBuffer); - roamingFsmProcessEvent(prAdapter, prParam); - } -#endif /* CFG_SUPPORT_ROAMING */ - break; - case EVENT_ID_SEND_DEAUTH: -#if DBG - { - P_WLAN_MAC_HEADER_T prWlanMacHeader; - - prWlanMacHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - DBGLOG(RX, INFO, ("nicRx: aucAddr1: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr1))); - DBGLOG(RX, INFO, ("nicRx: aucAddr2: "MACSTR"\n", MAC2STR(prWlanMacHeader->aucAddr2))); - } -#endif - /* receive packets without StaRec */ - prSwRfb->pvHeader = (P_WLAN_MAC_HEADER_T)&prEvent->aucBuffer[0]; - if (WLAN_STATUS_SUCCESS == authSendDeauthFrame(prAdapter, - NULL, - prSwRfb, - REASON_CODE_CLASS_3_ERR, - (PFN_TX_DONE_HANDLER)NULL)) { - DBGLOG(RX, INFO, ("Send Deauth Error\n")); - } - break; - -#if CFG_SUPPORT_RDD_TEST_MODE - case EVENT_ID_UPDATE_RDD_STATUS: - { - P_EVENT_RDD_STATUS_T prEventRddStatus; - - prEventRddStatus = (P_EVENT_RDD_STATUS_T) (prEvent->aucBuffer); - - prAdapter->ucRddStatus = prEventRddStatus->ucRddStatus; - } - - break; -#endif - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case EVENT_ID_UPDATE_BWCS_STATUS: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM BWCS Event: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM BWCS Event: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - - kalIndicateStatusAndComplete(prAdapter->prGlueInfo, - WLAN_STATUS_BWCS_UPDATE, - (PVOID) prEventBwcsStatus, - sizeof(PTA_IPC_T)); - } - - break; - - case EVENT_ID_UPDATE_BCM_DEBUG: - { - P_PTA_IPC_T prEventBwcsStatus; - - prEventBwcsStatus = (P_PTA_IPC_T) (prEvent->aucBuffer); - -#if CFG_SUPPORT_BCM_BWCS_DEBUG - printk(KERN_INFO DRV_NAME "BCM FW status: %02x%02x%02x%02x\n", prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); - - printk(KERN_INFO DRV_NAME "BCM FW status: aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x\n", - prEventBwcsStatus->u.aucBTPParams[0], - prEventBwcsStatus->u.aucBTPParams[1], - prEventBwcsStatus->u.aucBTPParams[2], - prEventBwcsStatus->u.aucBTPParams[3]); -#endif - } - - break; -#endif - - case EVENT_ID_ACCESS_REG: - case EVENT_ID_NIC_CAPABILITY: - case EVENT_ID_BASIC_CONFIG: - case EVENT_ID_MAC_MCAST_ADDR: - case EVENT_ID_ACCESS_EEPROM: - case EVENT_ID_TEST_STATUS: -#if CFG_SUPPORT_BUILD_DATE_CODE - case EVENT_ID_BUILD_DATE_CODE: -#endif - default: - prCmdInfo = nicGetPendingCmdInfo(prAdapter, prEvent->ucSeqNum); - - if(prCmdInfo != NULL) { - if (prCmdInfo->pfCmdDoneHandler) { - prCmdInfo->pfCmdDoneHandler(prAdapter, prCmdInfo, prEvent->aucBuffer); - } - else if(prCmdInfo->fgIsOid) { - kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_SUCCESS); - } - - // return prCmdInfo - cmdBufFreeCmdInfo(prAdapter, prCmdInfo); - } - - break; - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicRxProcessMgmtPacket is used to dispatch management frames -* to corresponding modules -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSWRfb the RFB to receive rx data -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessMgmtPacket ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - UINT_8 ucSubtype; -#if CFG_SUPPORT_802_11W - BOOL fgMfgDrop = FALSE; -#endif - ASSERT(prAdapter); - ASSERT(prSwRfb); - - nicRxFillRFB(prAdapter, prSwRfb); - - ucSubtype = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FC_SUBTYPE )>> OFFSET_OF_FC_SUBTYPE; - -#if CFG_RX_PKTS_DUMP - { - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_16 u2TxFrameCtrl; - - prHifRxHdr = prSwRfb->prHifRxHdr; - u2TxFrameCtrl = (*(PUINT_8)(prSwRfb->pvHeader) & MASK_FRAME_TYPE); - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_MANAGEMENT)) { - if (u2TxFrameCtrl == MAC_FRAME_BEACON || - u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - - DBGLOG(SW4, INFO, ("QM RX MGT: net %u sta idx %u wlan idx %u ssn %u ptype %u subtype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - prSwRfb->ucPacketType, - ucSubtype, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prSwRfb->pvHeader, prSwRfb->u2PacketLen); - } - } - } -#endif - - if(prAdapter->fgTestMode == FALSE) { -#if CFG_MGMT_FRAME_HANDLING -#if CFG_SUPPORT_802_11W - fgMfgDrop = rsnCheckRxMgmt(prAdapter, prSwRfb, ucSubtype); - if (fgMfgDrop) { - #if DBG - LOG_FUNC("QM RX MGT: Drop Unprotected Mgmt frame!!!\n"); - #endif - nicRxReturnRFB(prAdapter, prSwRfb); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - return; - } - else -#endif - if(apfnProcessRxMgtFrame[ucSubtype]) { - switch(apfnProcessRxMgtFrame[ucSubtype](prAdapter, prSwRfb)){ - case WLAN_STATUS_PENDING: - return; - case WLAN_STATUS_SUCCESS: - case WLAN_STATUS_FAILURE: - break; - - default: - DBGLOG(RX, WARN, ("Unexpected MMPDU(0x%02X) returned with abnormal status\n", ucSubtype)); - break; - } - } -#endif - } - - nicRxReturnRFB(prAdapter, prSwRfb); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief nicProcessRFBs is used to process RFBs in the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxProcessRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxProcessRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - prRxCtrl->ucNumIndPacket = 0; - prRxCtrl->ucNumRetainedPacket = 0; - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rReceivedRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb){ - switch(prSwRfb->ucPacketType){ - case HIF_RX_PKT_TYPE_DATA: - nicRxProcessDataPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_EVENT: - nicRxProcessEventPacket(prAdapter, prSwRfb); - break; - - case HIF_RX_PKT_TYPE_TX_LOOPBACK: - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - - case HIF_RX_PKT_TYPE_MANAGEMENT: - nicRxProcessMgmtPacket(prAdapter, prSwRfb); - break; - - default: - RX_INC_CNT(prRxCtrl, RX_TYPE_ERR_DROP_COUNT); - RX_INC_CNT(prRxCtrl, RX_DROP_TOTAL_COUNT); - DBGLOG(RX, ERROR, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - break; - } - } - else { - break; - } - }while(TRUE); - - if (prRxCtrl->ucNumIndPacket > 0) { - RX_ADD_CNT(prRxCtrl, RX_DATA_INDICATION_COUNT, prRxCtrl->ucNumIndPacket); - RX_ADD_CNT(prRxCtrl, RX_DATA_RETAINED_COUNT, prRxCtrl->ucNumRetainedPacket); - - //DBGLOG(RX, INFO, ("%d packets indicated, Retained cnt = %d\n", - // prRxCtrl->ucNumIndPacket, prRxCtrl->ucNumRetainedPacket)); - #if CFG_NATIVE_802_11 - kalRxIndicatePkts(prAdapter->prGlueInfo, (UINT_32)prRxCtrl->ucNumIndPacket, (UINT_32)prRxCtrl->ucNumRetainedPacket); - #else - kalRxIndicatePkts(prAdapter->prGlueInfo, prRxCtrl->apvIndPacket, (UINT_32)prRxCtrl->ucNumIndPacket); - #endif - } - -} /* end of nicRxProcessRFBs() */ - - -#if !CFG_SDIO_INTR_ENHANCE -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the rx data from data port and setup RFB -* -* @param prAdapter pointer to the Adapter handler -* @param prSWRfb the RFB to receive rx data -* -* @retval WLAN_STATUS_SUCCESS: SUCCESS -* @retval WLAN_STATUS_FAILURE: FAILURE -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0, u4ReadBytes; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4RegValue; - UINT_32 rxNum; - - DEBUGFUNC("nicRxReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(pucBuf); - DBGLOG(RX, TRACE, ("pucBuf= 0x%x, prHifRxHdr= 0x%x\n", pucBuf, prHifRxHdr)); - - do { - /* Read the RFB DW length and packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4RegValue); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - return WLAN_STATUS_FAILURE; - } - - //20091021 move the line to get the HIF RX header (for RX0/1) - if(u4RegValue == 0) { - DBGLOG(RX, ERROR, ("No RX packet\n")); - return WLAN_STATUS_FAILURE; - } - - u4PktLen = u4RegValue & BITS(0, 15); - if(u4PktLen != 0) { - rxNum = 0; - } - else { - rxNum = 1; - u4PktLen = (u4RegValue & BITS(16, 31)) >> 16; - } - - DBGLOG(RX, TRACE, ("RX%d: u4PktLen = %d\n", rxNum, u4PktLen)); - - //4 <4> Read Entire RFB and packet, include HW appended DW (Checksum Status) - u4ReadBytes = ALIGN_4(u4PktLen) + 4; - HAL_READ_RX_PORT(prAdapter, rxNum, u4ReadBytes, pucBuf, CFG_RX_MAX_PKT_SIZE); - - //20091021 move the line to get the HIF RX header - //u4PktLen = (UINT_32)prHifRxHdr->u2PacketLen; - if (u4PktLen != (UINT_32)prHifRxHdr->u2PacketLen) { - DBGLOG(RX, ERROR, ("Read u4PktLen = %d, prHifRxHdr->u2PacketLen: %d\n", - u4PktLen, prHifRxHdr->u2PacketLen)); - #if DBG - dumpMemory8((PUINT_8)prHifRxHdr, (prHifRxHdr->u2PacketLen > 4096) ? 4096 : prHifRxHdr->u2PacketLen); - #endif - ASSERT(0); - } - /* u4PktLen is byte unit, not inlude HW appended DW */ - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - return WLAN_STATUS_FAILURE; - } - - DBGLOG(RX, TRACE, ("Dump RX buffer, length = 0x%x\n", u4ReadBytes)); - DBGLOG_MEM8(RX, TRACE, pucBuf, u4ReadBytes); - }while(FALSE); - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - P_HIF_RX_HEADER_T prHifRxHdr; - - UINT_32 u4HwAppendDW; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxReceiveRFBs"); - - ASSERT(prAdapter); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - - // need to consider - if (nicRxReadBuffer(prAdapter, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("halRxFillRFB failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - prHifRxHdr = prSwRfb->prHifRxHdr; - u4HwAppendDW = *((PUINT_32)((UINT_32)prHifRxHdr + - (UINT_32)(ALIGN_4(prHifRxHdr->u2PacketLen)))); - DBGLOG(RX, TRACE, ("u4HwAppendDW = 0x%x\n", u4HwAppendDW)); - DBGLOG(RX, TRACE, ("u2PacketLen = 0x%x\n", prHifRxHdr->u2PacketLen)); - } -// while (RX_STATUS_TEST_MORE_FLAG(u4HwAppendDW)); - while (FALSE); - - return; - -} /* end of nicReceiveRFBs() */ - -#else -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port, fill RFB -* and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* @param u4DataPort Specify which port to read -* @param u2RxLength Specify to the the rx packet length in Byte. -* @param prSwRfb the RFB to receive rx data. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicRxEnhanceReadBuffer ( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4DataPort, - IN UINT_16 u2RxLength, - IN OUT P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucBuf; - P_HIF_RX_HEADER_T prHifRxHdr; - UINT_32 u4PktLen = 0; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - BOOL fgResult = TRUE; - - DEBUGFUNC("nicRxEnhanceReadBuffer"); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - pucBuf = prSwRfb->pucRecvBuff; - ASSERT(pucBuf); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - //DBGLOG(RX, TRACE, ("u2RxLength = %d\n", u2RxLength)); - - do { - //4 <1> Read RFB frame from MCR_WRDR0, include HW appended DW - HAL_READ_RX_PORT(prAdapter, - u4DataPort, - ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN), - pucBuf, - CFG_RX_MAX_PKT_SIZE); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Packet Lentgh Error\n")); - break; - } - - u4PktLen = (UINT_32)(prHifRxHdr->u2PacketLen); - //DBGLOG(RX, TRACE, ("u4PktLen = %d\n", u4PktLen)); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - //4 <2> if the RFB dw size or packet size is zero - if (u4PktLen == 0) { - DBGLOG(RX, ERROR, ("Packet Length = %d\n", u4PktLen)); - ASSERT(0); - break; - } - - //4 <3> if the packet is too large or too small - if (u4PktLen > CFG_RX_MAX_PKT_SIZE) { - DBGLOG(RX, TRACE, ("Read RX Packet Lentgh Error (%d)\n", u4PktLen)); - ASSERT(0); - break; - } - - u4Status = WLAN_STATUS_SUCCESS; - } - while (FALSE); - - DBGLOG_MEM8(RX, TRACE, pucBuf, ALIGN_4(u2RxLength + HIF_RX_HW_APPENDED_LEN)); - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SDIO_CTRL_T prSDIOCtrl; - P_RX_CTRL_T prRxCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 i, rxNum; - UINT_16 u2RxPktNum, u2RxLength = 0, u2Tmp = 0; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOReceiveRFBs"); - - ASSERT(prAdapter); - - prSDIOCtrl = prAdapter->prSDIOCtrl; - ASSERT(prSDIOCtrl); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - for (rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len : prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len); - - if(u2RxPktNum == 0) { - continue; - } - - for (i = 0; i < u2RxPktNum; i++) { - if(rxNum == 0) { - HAL_READ_RX_LENGTH(prAdapter, &u2RxLength, &u2Tmp); - } - else if(rxNum == 1) { - HAL_READ_RX_LENGTH(prAdapter, &u2Tmp, &u2RxLength); - } - - if (!u2RxLength) { - break; - } - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (!prSwRfb) { - DBGLOG(RX, TRACE, ("No More RFB\n")); - break; - } - ASSERT(prSwRfb); - - if (nicRxEnhanceReadBuffer(prAdapter, rxNum, u2RxLength, prSwRfb) == WLAN_STATUS_FAILURE) { - DBGLOG(RX, TRACE, ("nicRxEnhanceRxReadBuffer failed\n")); - nicRxReturnRFB(prAdapter, prSwRfb); - break; - } - - //prSDIOCtrl->au4RxLength[i] = 0; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - } - } - - prSDIOCtrl->rRxInfo.u.u2NumValidRx0Len = 0; - prSDIOCtrl->rRxInfo.u.u2NumValidRx1Len = 0; - - return; -}/* end of nicRxSDIOReceiveRFBs() */ - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - - -#if CFG_SDIO_RX_AGG -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read frames from the data port for SDIO with Rx aggregation enabled -* I/F, fill RFB and put each frame into the rReceivedRFBList queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxSDIOAggReceiveRFBs ( - IN P_ADAPTER_T prAdapter - ) -{ - P_ENHANCE_MODE_DATA_STRUCT_T prEnhDataStr; - P_RX_CTRL_T prRxCtrl; - P_SDIO_CTRL_T prSDIOCtrl; - P_SW_RFB_T prSwRfb = (P_SW_RFB_T)NULL; - UINT_32 u4RxLength; - UINT_32 i, rxNum; - UINT_32 u4RxAggCount = 0, u4RxAggLength = 0; - UINT_32 u4RxAvailAggLen, u4CurrAvailFreeRfbCnt; - PUINT_8 pucSrcAddr; - P_HIF_RX_HEADER_T prHifRxHdr; - BOOL fgResult = TRUE; - BOOLEAN fgIsRxEnhanceMode; - UINT_16 u2RxPktNum; -#if CFG_SDIO_RX_ENHANCE - UINT_32 u4MaxLoopCount = CFG_MAX_RX_ENHANCE_LOOP_COUNT; -#endif - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicRxSDIOAggReceiveRFBs"); - - ASSERT(prAdapter); - prEnhDataStr = prAdapter->prSDIOCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - prSDIOCtrl = prAdapter->prSDIOCtrl; - -#if CFG_SDIO_RX_ENHANCE - fgIsRxEnhanceMode = TRUE; -#else - fgIsRxEnhanceMode = FALSE; -#endif - - do { -#if CFG_SDIO_RX_ENHANCE - /* to limit maximum loop for RX */ - u4MaxLoopCount--; - if (u4MaxLoopCount == 0) { - break; - } -#endif - - if(prEnhDataStr->rRxInfo.u.u2NumValidRx0Len == 0 && - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len == 0) { - break; - } - - for(rxNum = 0 ; rxNum < 2 ; rxNum++) { - u2RxPktNum = (rxNum == 0 ? prEnhDataStr->rRxInfo.u.u2NumValidRx0Len : prEnhDataStr->rRxInfo.u.u2NumValidRx1Len); - - // if this assertion happened, it is most likely a F/W bug - ASSERT(u2RxPktNum <= 16); - - if (u2RxPktNum > 16) - continue; - - if(u2RxPktNum == 0) - continue; - - #if CFG_HIF_STATISTICS - prRxCtrl->u4TotalRxAccessNum++; - prRxCtrl->u4TotalRxPacketNum += u2RxPktNum; - #endif - - u4CurrAvailFreeRfbCnt = prRxCtrl->rFreeSwRfbList.u4NumElem; - - // if SwRfb is not enough, abort reading this time - if(u4CurrAvailFreeRfbCnt < u2RxPktNum) { - #if CFG_HIF_RX_STARVATION_WARNING - DbgPrint("FreeRfb is not enough: %d available, need %d\n", u4CurrAvailFreeRfbCnt, u2RxPktNum); - DbgPrint("Queued Count: %d / Dequeud Count: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt); - #endif - continue; - } - -#if CFG_SDIO_RX_ENHANCE - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE - (sizeof(ENHANCE_MODE_DATA_STRUCT_T) + 4/* extra HW padding */); -#else - u4RxAvailAggLen = CFG_RX_COALESCING_BUFFER_SIZE; -#endif - u4RxAggCount = 0; - - for (i = 0; i < u2RxPktNum ; i++) { - u4RxLength = (rxNum == 0 ? - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - (UINT_32)prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - if (!u4RxLength) { - ASSERT(0); - break; - } - - if (ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN) < u4RxAvailAggLen) { - if (u4RxAggCount < u4CurrAvailFreeRfbCnt) { - u4RxAvailAggLen -= ALIGN_4(u4RxLength + HIF_RX_HW_APPENDED_LEN); - u4RxAggCount++; - } - else { - // no FreeSwRfb for rx packet - ASSERT(0); - break; - } - } - else { - // CFG_RX_COALESCING_BUFFER_SIZE is not large enough - ASSERT(0); - break; - } - } - - u4RxAggLength = (CFG_RX_COALESCING_BUFFER_SIZE - u4RxAvailAggLen); - //DBGLOG(RX, INFO, ("u4RxAggCount = %d, u4RxAggLength = %d\n", - // u4RxAggCount, u4RxAggLength)); - - HAL_READ_RX_PORT(prAdapter, - rxNum, - u4RxAggLength, - prRxCtrl->pucRxCoalescingBufPtr, - CFG_RX_COALESCING_BUFFER_SIZE); - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read RX Agg Packet Error\n")); - continue; - } - - pucSrcAddr = prRxCtrl->pucRxCoalescingBufPtr; - for (i = 0; i < u4RxAggCount; i++) { - UINT_16 u2PktLength; - - u2PktLength = (rxNum == 0 ? - prEnhDataStr->rRxInfo.u.au2Rx0Len[i] : - prEnhDataStr->rRxInfo.u.au2Rx1Len[i]); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_REMOVE_HEAD(&prRxCtrl->rFreeSwRfbList, prSwRfb, P_SW_RFB_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - ASSERT(prSwRfb); - kalMemCopy(prSwRfb->pucRecvBuff, pucSrcAddr, - ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN)); - - prHifRxHdr = prSwRfb->prHifRxHdr; - ASSERT(prHifRxHdr); - - prSwRfb->ucPacketType = (UINT_8)(prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK); - //DBGLOG(RX, TRACE, ("ucPacketType = %d\n", prSwRfb->ucPacketType)); - - prSwRfb->ucStaRecIdx = (UINT_8)(prHifRxHdr->ucStaRecIdx); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - QUEUE_INSERT_TAIL(&prRxCtrl->rReceivedRfbList, &prSwRfb->rQueEntry); - RX_INC_CNT(prRxCtrl, RX_MPDU_TOTAL_COUNT); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - pucSrcAddr += ALIGN_4(u2PktLength + HIF_RX_HW_APPENDED_LEN); - //prEnhDataStr->au4RxLength[i] = 0; - } - -#if CFG_SDIO_RX_ENHANCE - kalMemCopy(prAdapter->prSDIOCtrl, (pucSrcAddr + 4), sizeof(ENHANCE_MODE_DATA_STRUCT_T)); - - /* do the same thing what nicSDIOReadIntStatus() does */ - if((prSDIOCtrl->u4WHISR & WHISR_TX_DONE_INT) == 0 && - (prSDIOCtrl->rTxInfo.au4WTSR[0] | prSDIOCtrl->rTxInfo.au4WTSR[1])) { - prSDIOCtrl->u4WHISR |= WHISR_TX_DONE_INT; - } - - if((prSDIOCtrl->u4WHISR & BIT(31)) == 0 && - HAL_GET_MAILBOX_READ_CLEAR(prAdapter) == TRUE && - (prSDIOCtrl->u4RcvMailbox0 != 0 || prSDIOCtrl->u4RcvMailbox1 != 0)) { - prSDIOCtrl->u4WHISR |= BIT(31); - } - - /* dispatch to interrupt handler with RX bits masked */ - nicProcessIST_impl(prAdapter, prSDIOCtrl->u4WHISR & (~(WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT))); -#endif - } - -#if !CFG_SDIO_RX_ENHANCE - prEnhDataStr->rRxInfo.u.u2NumValidRx0Len = 0; - prEnhDataStr->rRxInfo.u.u2NumValidRx1Len = 0; -#endif - } - while ((prEnhDataStr->rRxInfo.u.u2NumValidRx0Len - || prEnhDataStr->rRxInfo.u.u2NumValidRx1Len) - && fgIsRxEnhanceMode); - - return; -} -#endif /* CFG_SDIO_RX_AGG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Setup a RFB and allocate the os packet to the RFB -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @retval WLAN_STATUS_SUCCESS -* @retval WLAN_STATUS_RESOURCES -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxSetupRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - PVOID pvPacket; - PUINT_8 pucRecvBuff; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (!prSwRfb->pvPacket) { - kalMemZero(prSwRfb, sizeof(SW_RFB_T)); - pvPacket = kalPacketAlloc(prAdapter->prGlueInfo, CFG_RX_MAX_PKT_SIZE, - &pucRecvBuff); - if (pvPacket == NULL) { - return WLAN_STATUS_RESOURCES; - } - - prSwRfb->pvPacket = pvPacket; - prSwRfb->pucRecvBuff= (PVOID)pucRecvBuff; - } - else { - kalMemZero(((PUINT_8)prSwRfb + OFFSET_OF(SW_RFB_T, prHifRxHdr)), - (sizeof(SW_RFB_T)-OFFSET_OF(SW_RFB_T, prHifRxHdr))); - } - - prSwRfb->prHifRxHdr = (P_HIF_RX_HEADER_T)(prSwRfb->pucRecvBuff); - - return WLAN_STATUS_SUCCESS; - -} /* end of nicRxSetupRFB() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to put a RFB back onto the "RFB with Buffer" list -* or "RFB without buffer" list according to pvPacket. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prSwRfb Pointer to the RFB -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxReturnRFB ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_RX_CTRL_T prRxCtrl; - P_QUE_ENTRY_T prQueEntry; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prSwRfb); - prRxCtrl = &prAdapter->rRxCtrl; - prQueEntry = &prSwRfb->rQueEntry; - - ASSERT(prQueEntry); - - /* The processing on this RFB is done, so put it back on the tail of - our list */ - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - - if (prSwRfb->pvPacket) { - QUEUE_INSERT_TAIL(&prRxCtrl->rFreeSwRfbList, prQueEntry); - } - else { - QUEUE_INSERT_TAIL(&prRxCtrl->rIndicatedRfbList, prQueEntry); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_RX_QUE); - return; -} /* end of nicRxReturnRFB() */ - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process rx interrupt. When the rx -* Interrupt is asserted, it means there are frames in queue. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessRxInterrupt ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - -#if CFG_SDIO_INTR_ENHANCE - #if CFG_SDIO_RX_AGG - nicRxSDIOAggReceiveRFBs(prAdapter); - #else - nicRxSDIOReceiveRFBs(prAdapter); - #endif -#else - nicRxReceiveRFBs(prAdapter); -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicRxProcessRFBs(prAdapter); - - return; - -} /* end of nicProcessRxInterrupt() */ - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* @brief Used to update IP/TCP/UDP checksum statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param aeCSUM The array of checksum result. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxUpdateCSUMStatistics ( - IN P_ADAPTER_T prAdapter, - IN const ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - ASSERT(aeCSUM); - - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_SUCCESS_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) || - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_FAILED)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_IP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L3_PKT_COUNT); - } - else { - ASSERT(0); - } - - if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_TCP_FAILED_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_SUCCESS_COUNT); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - RX_INC_CNT(prRxCtrl, RX_CSUM_UDP_FAILED_COUNT); - } - else if ((aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_NONE) && - (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_NONE)) { - - RX_INC_CNT(prRxCtrl, RX_CSUM_UNKNOWN_L4_PKT_COUNT); - } - else { - ASSERT(0); - } - - return; -} /* end of nicRxUpdateCSUMStatistics() */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current status of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatus ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - - SPRINTF(pucCurrBuf, ("\n\nRX CTRL STATUS:")); - SPRINTF(pucCurrBuf, ("\n===============")); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/i BUF LIST :%9ld", prRxCtrl->rFreeSwRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nFREE RFB w/o BUF LIST :%9ld", prRxCtrl->rIndicatedRfbList.u4NumElem)); - SPRINTF(pucCurrBuf, ("\nRECEIVED RFB LIST :%9ld", prRxCtrl->rReceivedRfbList.u4NumElem)); - - SPRINTF(pucCurrBuf, ("\n\n")); - - //*pu4Count = (UINT_32)((UINT_32)pucCurrBuf - (UINT_32)pucBuffer); - - return; -} /* end of nicRxQueryStatus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Clear RX related counters -* -* @param prAdapter Pointer of Adapter Data Structure -* -* @return - (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxClearStatistics ( - IN P_ADAPTER_T prAdapter - ) -{ - P_RX_CTRL_T prRxCtrl; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - RX_RESET_ALL_CNTS(prRxCtrl); - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to query current statistics of RX Module. -* -* @param prAdapter Pointer to the Adapter structure. -* @param pucBuffer Pointer to the message buffer. -* @param pu4Count Pointer to the buffer of message length count. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxQueryStatistics ( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucBuffer, - OUT PUINT_32 pu4Count - ) -{ - P_RX_CTRL_T prRxCtrl; - PUINT_8 pucCurrBuf = pucBuffer; - - ASSERT(prAdapter); - prRxCtrl = &prAdapter->rRxCtrl; - ASSERT(prRxCtrl); - - //if (pucBuffer) {} /* For Windows, we'll print directly instead of sprintf() */ - ASSERT(pu4Count); - -#define SPRINTF_RX_COUNTER(eCounter) \ - SPRINTF(pucCurrBuf, ("%-30s : %ld\n", #eCounter, (UINT_32)prRxCtrl->au8Statistics[eCounter])) - - SPRINTF_RX_COUNTER(RX_MPDU_TOTAL_COUNT); - SPRINTF_RX_COUNTER(RX_SIZE_ERR_DROP_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_INDICATION_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETURNED_COUNT); - SPRINTF_RX_COUNTER(RX_DATA_RETAINED_COUNT); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD || CFG_TCP_IP_CHKSUM_OFFLOAD_NDIS_60 - SPRINTF_RX_COUNTER(RX_CSUM_TCP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_FAILED_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_TCP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UDP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_IP_SUCCESS_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L4_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_CSUM_UNKNOWN_L3_PKT_COUNT); - SPRINTF_RX_COUNTER(RX_IP_V6_PKT_CCOUNT); -#endif - - //*pu4Count = (UINT_32)(pucCurrBuf - pucBuffer); - - nicRxClearStatistics(prAdapter); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Read the Response data from data port -* -* @param prAdapter pointer to the Adapter handler -* @param pucRspBuffer pointer to the Response buffer -* -* @retval WLAN_STATUS_SUCCESS: Response packet has been read -* @retval WLAN_STATUS_FAILURE: Read Response packet timeout or error occurred -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxWaitResponse ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucPortIdx, - OUT PUINT_8 pucRspBuffer, - IN UINT_32 u4MaxRespBufferLen, - OUT PUINT_32 pu4Length - ) -{ - UINT_32 u4Value = 0, u4PktLen = 0, i = 0; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - BOOL fgResult = TRUE; - UINT_32 u4Time, u4Current; - - DEBUGFUNC("nicRxWaitResponse"); - - ASSERT(prAdapter); - ASSERT(pucRspBuffer); - ASSERT(ucPortIdx < 2); - - u4Time = (UINT_32)kalGetTimeTick(); - - do { - /* Read the packet length */ - HAL_MCR_RD(prAdapter, MCR_WRPLR, &u4Value); - - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - if(ucPortIdx == 0) { - u4PktLen = u4Value & 0xFFFF; - } - else { - u4PktLen = (u4Value >> 16) & 0xFFFF; - } - - DBGLOG(RX, TRACE, ("i = %d, u4PktLen = %d\n", i, u4PktLen)); - - if (u4PktLen == 0) { - /* timeout exceeding check */ - u4Current = (UINT_32)kalGetTimeTick(); - - if((u4Current > u4Time) && ((u4Current - u4Time) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - else if(u4Current < u4Time && ((u4Current + (0xFFFFFFFF - u4Time)) > RX_RESPONSE_TIMEOUT)) { - return WLAN_STATUS_FAILURE; - } - - /* Response packet is not ready */ - kalUdelay(50); - - i++; - } - else if (u4PktLen > u4MaxRespBufferLen) { - DBGLOG(RX, WARN, ("Not enough Event Buffer: required length = 0x%x, available buffer length = %d\n", - u4PktLen, u4MaxRespBufferLen)); - - return WLAN_STATUS_FAILURE; - } - else { - HAL_PORT_RD(prAdapter, - ucPortIdx == 0 ? MCR_WRDR0 : MCR_WRDR1, - u4PktLen, - pucRspBuffer, - u4MaxRespBufferLen); - - /* fgResult will be updated in MACRO */ - if (!fgResult) { - DBGLOG(RX, ERROR, ("Read Response Packet Error\n")); - return WLAN_STATUS_FAILURE; - } - - DBGLOG(RX, TRACE, ("Dump Response buffer, length = 0x%x\n", - u4PktLen)); - DBGLOG_MEM8(RX, TRACE, pucRspBuffer, u4PktLen); - - *pu4Length = u4PktLen; - break; - } - } while(TRUE); - - return u4Status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to enable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxEnablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxEnablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Set filter to disable Promiscuous Mode -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxDisablePromiscuousMode ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return; -} /* end of nicRxDisablePromiscuousMode() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in reordering module -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_SW_RFB_T prSwRfb; - - ASSERT(prAdapter); - - if((prSwRfb = qmFlushRxQueues(prAdapter)) != NULL) { - do { - P_SW_RFB_T prNextSwRfb; - - // save next first - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - - // free - nicRxReturnRFB(prAdapter, prSwRfb); - - prSwRfb = prNextSwRfb; - } while(prSwRfb); - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief -* -* @param -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicRxProcessActionFrame ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb - ) -{ - P_WLAN_ACTION_FRAME prActFrame; - - ASSERT(prAdapter); - ASSERT(prSwRfb); - - if (prSwRfb->u2PacketLen < sizeof(WLAN_ACTION_FRAME) - 1) { - return WLAN_STATUS_INVALID_PACKET; - } - prActFrame = (P_WLAN_ACTION_FRAME) prSwRfb->pvHeader; - - switch (prActFrame->ucCategory) { - case CATEGORY_PUBLIC_ACTION: - - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessPublicAction(prAdapter, prSwRfb); - - p2pFuncValidateRxActionFrame( - prAdapter, prSwRfb); - - } - #endif - break; - - case CATEGORY_HT_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - rlmProcessHtAction(prAdapter, prSwRfb); - } - #endif - break; - case CATEGORY_VENDOR_SPECIFIC_ACTION: - #if CFG_ENABLE_WIFI_DIRECT - if (prAdapter->fgIsP2PRegistered) { - p2pFuncValidateRxActionFrame(prAdapter, prSwRfb); - } - #endif - break; -#if CFG_SUPPORT_802_11W - case CATEGORY_SA_QUERT_ACTION: - { - P_HIF_RX_HEADER_T prHifRxHdr; - - prHifRxHdr = prSwRfb->prHifRxHdr; - - if ((HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr) == NETWORK_TYPE_AIS_INDEX) && - prAdapter->rWifiVar.rAisSpecificBssInfo.fgMgmtProtection /* Use MFP */ - ) { - if (!(prHifRxHdr->ucReserved & CONTROL_FLAG_UC_MGMT_NO_ENC)) { - /* MFP test plan 5.3.3.4 */ - rsnSaQueryAction(prAdapter, prSwRfb); - } - else { - DBGLOG(RSN, TRACE, ("Un-Protected SA Query, do nothing\n")); - } - } - } - break; -#endif -#if CFG_SUPPORT_802_11V - case CATEGORY_WNM_ACTION: - { - wnmWNMAction(prAdapter, prSwRfb); - } - break; -#endif - default: - break; - } /* end of switch case */ - - return WLAN_STATUS_SUCCESS; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_tx.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_tx.c deleted file mode 100755 index f08c307bec7f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/nic_tx.c +++ /dev/null @@ -1,2169 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/nic/nic_tx.c#2 $ -*/ - -/*! \file nic_tx.c - \brief Functions that provide TX operation in NIC Layer. - - This file provides TX functions which are responsible for both Hardware and - Software Resource Management and keep their Synchronization. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: nic_tx.c $ -** -** 12 27 2012 cp.wu -** no need to do TX checksum offloading for forwarding packets -** -** 08 28 2012 cp.wu -** [WCXRP00001270] [MT6620 Wi-Fi][Driver] Fix non-aggregated TX path for experimental purpose -** fix: pucTxCoalescingBufPtr is also used by non-aggregated TX path - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add log counter for tx - * - * 11 09 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for beacon timeout and sta aging timeout. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 05 17 2011 cp.wu - * [WCXRP00000732] [MT6620 Wi-Fi][AIS] No need to switch back to IDLE state when DEAUTH frame is dropped due to bss disconnection - * when TX DONE status is TX_RESULT_DROPPED_IN_DRIVER, no need to switch back to IDLE state. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * remove unused variables. - * - * 04 12 2011 cp.wu - * [WCXRP00000631] [MT6620 Wi-Fi][Driver] Add an API for QM to retrieve current TC counter value and processing frame dropping cases for TC4 path - * 1. add nicTxGetResource() API for QM to make decisions. - * 2. if management frames is decided by QM for dropping, the call back is invoked to indicate such a case. - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 02 16 2011 cp.wu - * [WCXRP00000449] [MT6620 Wi-Fi][Driver] Refine CMD queue handling by adding an extra API for checking availble count and modify behavior - * 1. add new API: nicTxGetFreeCmdCount() - * 2. when there is insufficient command descriptor, nicTxEnqueueMsdu() will drop command packets directly - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 10 18 2010 cp.wu - * [WCXRP00000117] [MT6620 Wi-Fi][Driver] Add logic for suspending driver when MT6620 is not responding anymore - * 1. when wlanAdapterStop() failed to send POWER CTRL command to firmware, do not poll for ready bit dis-assertion - * 2. shorten polling count for shorter response time - * 3. if bad I/O operation is detected during TX resource polling, then further operation is aborted as well - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 09 29 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue. - * - * 09 27 2010 wh.su - * NULL - * since the u2TxByteCount_UserPriority will or another setting, keep the overall buffer for avoid error - * - * 09 24 2010 wh.su - * NULL - * [WCXRP000000058][MT6620 Wi-Fi][Driver] Fail to handshake with WAPI AP due the 802.1x frame send to fw with extra bytes padding. - * - * 09 01 2010 cp.wu - * NULL - * HIFSYS Clock Source Workaround - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 30 2010 cp.wu - * NULL - * eliminate klockwork errors - * - * 08 20 2010 wh.su - * NULL - * adding the eapol callback setting. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 05 2010 yuche.tsai - * NULL - * . - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 13 2010 cp.wu - * - * 1) MMPDUs are now sent to MT6620 by CMD queue for keeping strict order of 1X/MMPDU/CMD packets - * 2) integrate with qmGetFrameAction() for deciding which MMPDU/1X could pass checking for sending - * 2) enhance CMD_INFO_T descriptor number from 10 to 32 to avoid descriptor underflow under concurrent network operation - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 24 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 22 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) add command warpper for STA-REC/BSS-INFO sync. - * 2) enhance command packet sending procedure for non-oid part - * 3) add command packet definitions for STA-REC/BSS-INFO sync. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add checking for TX descriptor poll. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * TX descriptors are now allocated once for reducing allocation overhead - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change zero-padding for TX port access to HAL. - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 15 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * . - * - * 06 14 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * fill extra information for revised HIF_TX_HEADER. - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 10 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change to enqueue TX frame infinitely. - * - * 06 09 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add TX_PACKET_MGMT to indicate the frame is coming from management modules - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove driver-land statistics. - * - * 03 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * - * 03 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * generate information for OID_GEN_RCV_OK & OID_GEN_XMIT_OK - * * * * * - * -* 03 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code clean: removing unused variables and structure definitions - * - * 03 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) add another spin-lock to protect MsduInfoList due to it might be accessed by different thread. - * * * * 2) change own-back acquiring procedure to wait for up to 16.67 seconds - * - * 03 02 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add mutex to avoid multiple access to qmTxQueue simultaneously. - * - * 02 26 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * avoid refering to NDIS-specific data structure directly from non-glue layer. - * - * 02 24 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add Ethernet destination address information in packet info for TX - * - * 02 10 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) remove unused function in nic_rx.c [which has been handled in que_mgt.c] - * * * * * * 2) firmware image length is now retrieved via NdisFileOpen - * * * * * * 3) firmware image is not structured by (P_IMG_SEC_HDR_T) anymore - * * * * * * 4) nicRxWaitResponse() revised - * * * * * * 5) another set of TQ counter default value is added for fw-download state - * * * * * * 6) Wi-Fi load address is now retrieved from registry too - * - * 02 09 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. Permanent and current MAC address are now retrieved by CMD/EVENT packets instead of hard-coded address - * * * * * * * * * 2. follow MSDN defined behavior when associates to another AP - * * * * * * * * * 3. for firmware download, packet size could be up to 2048 bytes - * - * 02 08 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * prepare for implementing fw download logic - * - * 01 27 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. eliminate improper variable in rHifInfo - * * * * * * * * * 2. block TX/ordinary OID when RF test mode is engaged - * * * * * * * * * 3. wait until firmware finish operation when entering into and leaving from RF test mode - * * * * * * * * * 4. correct some HAL implementation - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism - * - * 01 13 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * TX: fill ucWlanHeaderLength/ucPktFormtId_Flags according to info provided by prMsduInfo - * - * 12 30 2009 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) According to CMD/EVENT documentation v0.8, - * * * * * * * * * * OID_CUSTOM_TEST_RX_STATUS & OID_CUSTOM_TEST_TX_STATUS is no longer used, - * * * * * * * * * * and result is retrieved by get ATInfo instead - * * * * * * * * * * 2) add 4 counter for recording aggregation statistics -** \main\maintrunk.MT6620WiFiDriver_Prj\44 2009-12-10 16:52:15 GMT mtk02752 -** remove unused API -** \main\maintrunk.MT6620WiFiDriver_Prj\43 2009-12-07 22:44:24 GMT mtk02752 -** correct assertion criterion -** \main\maintrunk.MT6620WiFiDriver_Prj\42 2009-12-07 21:15:52 GMT mtk02752 -** correct trivial mistake -** \main\maintrunk.MT6620WiFiDriver_Prj\41 2009-12-04 15:47:21 GMT mtk02752 -** + always append a dword of zero on TX path to avoid TX aggregation to triggered on uninitialized data -** + add more assertion for packet size check -** \main\maintrunk.MT6620WiFiDriver_Prj\40 2009-12-04 14:51:55 GMT mtk02752 -** nicTxMsduInfo(): save ptr for next entry before attaching to qDataPort -** \main\maintrunk.MT6620WiFiDriver_Prj\39 2009-12-04 11:54:54 GMT mtk02752 -** add 2 assertion for size check -** \main\maintrunk.MT6620WiFiDriver_Prj\38 2009-12-03 16:20:35 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\37 2009-11-30 10:57:10 GMT mtk02752 -** 1st DW of WIFI_CMD_T is shared with HIF_TX_HEADER_T -** \main\maintrunk.MT6620WiFiDriver_Prj\36 2009-11-30 09:20:43 GMT mtk02752 -** use TC4 instead of TC5 for command packet -** \main\maintrunk.MT6620WiFiDriver_Prj\35 2009-11-27 11:08:11 GMT mtk02752 -** add flush for reset -** \main\maintrunk.MT6620WiFiDriver_Prj\34 2009-11-26 20:31:22 GMT mtk02752 -** fill prMsduInfo->ucUserPriority -** \main\maintrunk.MT6620WiFiDriver_Prj\33 2009-11-25 21:04:33 GMT mtk02752 -** fill u2SeqNo -** \main\maintrunk.MT6620WiFiDriver_Prj\32 2009-11-24 20:52:12 GMT mtk02752 -** integration with SD1's data path API -** \main\maintrunk.MT6620WiFiDriver_Prj\31 2009-11-24 19:54:25 GMT mtk02752 -** nicTxRetransmitOfOsSendQue & nicTxData but changed to use nicTxMsduInfoList -** \main\maintrunk.MT6620WiFiDriver_Prj\30 2009-11-23 17:53:18 GMT mtk02752 -** add nicTxCmd() for SD1_SD3_DATAPATH_INTEGRATION, which will append only HIF_TX_HEADER. seqNum, WIFI_CMD_T will be created inside oid handler -** \main\maintrunk.MT6620WiFiDriver_Prj\29 2009-11-20 15:10:24 GMT mtk02752 -** use TxAccquireResource instead of accessing TCQ directly. -** \main\maintrunk.MT6620WiFiDriver_Prj\28 2009-11-17 22:40:57 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\27 2009-11-17 17:35:40 GMT mtk02752 -** add nicTxMsduInfoList () implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\26 2009-11-17 11:07:10 GMT mtk02752 -** add nicTxAdjustTcq() implementation -** \main\maintrunk.MT6620WiFiDriver_Prj\25 2009-11-16 22:28:38 GMT mtk02752 -** move aucFreeBufferCount/aucMaxNumOfBuffer into another structure -** \main\maintrunk.MT6620WiFiDriver_Prj\24 2009-11-16 21:45:32 GMT mtk02752 -** add SD1_SD3_DATAPATH_INTEGRATION data path handling -** \main\maintrunk.MT6620WiFiDriver_Prj\23 2009-11-13 13:29:56 GMT mtk01084 -** modify TX hdr format, fix tx retransmission issue -** \main\maintrunk.MT6620WiFiDriver_Prj\22 2009-11-11 10:36:21 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\21 2009-11-04 14:11:11 GMT mtk01084 -** modify TX SW data structure -** \main\maintrunk.MT6620WiFiDriver_Prj\20 2009-10-29 19:56:17 GMT mtk01084 -** modify HAL part -** \main\maintrunk.MT6620WiFiDriver_Prj\19 2009-10-13 21:59:23 GMT mtk01084 -** update for new HW design -** \main\maintrunk.MT6620WiFiDriver_Prj\18 2009-10-02 14:00:18 GMT mtk01725 -** \main\maintrunk.MT6620WiFiDriver_Prj\17 2009-05-20 12:26:06 GMT mtk01461 -** Assign SeqNum to CMD Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\16 2009-05-19 10:54:04 GMT mtk01461 -** Add debug message -** \main\maintrunk.MT6620WiFiDriver_Prj\15 2009-05-12 09:41:55 GMT mtk01461 -** Fix Query Command need resp issue -** \main\maintrunk.MT6620WiFiDriver_Prj\14 2009-04-29 15:44:38 GMT mtk01461 -** Move OS dependent code to kalQueryTxOOBData() -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-04-28 10:40:03 GMT mtk01461 -** Add nicTxReleaseResource() for SDIO_STATUS_ENHANCE, and also fix the TX aggregation issue for 1x packet to TX1 port -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-04-21 09:50:47 GMT mtk01461 -** Update nicTxCmd() for moving wait RESP function call to wlanSendCommand() -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-04-17 19:56:32 GMT mtk01461 -** Move the CMD_INFO_T related function to cmd_buf.c -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-04-17 18:14:40 GMT mtk01426 -** Update OOB query for TX packet -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-04-14 15:51:32 GMT mtk01426 -** Support PKGUIO -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-04-02 17:26:40 GMT mtk01461 -** Add virtual OOB for HIF LOOPBACK SW PRETEST -** \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-04-01 10:54:43 GMT mtk01461 -** Add function for SDIO_TX_ENHANCE -** \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-03-23 21:53:47 GMT mtk01461 -** Add code for retransmit of rOsSendQueue, mpSendPacket(), and add code for TX Checksum offload, Loopback Test. -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-03-23 00:33:51 GMT mtk01461 -** Add code for TX Data & Cmd Packet -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-18 20:25:40 GMT mtk01461 -** Fix LINT warning -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-16 09:10:30 GMT mtk01461 -** Update TX PATH API -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:26:04 GMT mtk01426 -** Init for develop -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will initial all variables in regard to SW TX Queues and -* all free lists of MSDU_INFO_T and SW_TFCB_T. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxInitialize ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - PUINT_8 pucMemHandle; - P_MSDU_INFO_T prMsduInfo; - UINT_32 i; - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxInitialize"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - //4 <1> Initialization of Traffic Class Queue Parameters - nicTxResetResource(prAdapter); - -#if CFG_SDIO_TX_AGG - prTxCtrl->pucTxCoalescingBufPtr = prAdapter->pucCoalescingBufCached; -#endif /* CFG_SDIO_TX_AGG */ - - // allocate MSDU_INFO_T and link it into rFreeMsduInfoList - QUEUE_INITIALIZE(&prTxCtrl->rFreeMsduInfoList); - - pucMemHandle = prTxCtrl->pucTxCached; - for (i = 0 ; i < CFG_TX_MAX_PKT_NUM ; i++) { - prMsduInfo = (P_MSDU_INFO_T)pucMemHandle; - kalMemZero(prMsduInfo, sizeof(MSDU_INFO_T)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - - pucMemHandle += ALIGN_4(sizeof(MSDU_INFO_T)); - } - - ASSERT(prTxCtrl->rFreeMsduInfoList.u4NumElem == CFG_TX_MAX_PKT_NUM); - /* Check if the memory allocation consist with this initialization function */ - ASSERT((UINT_32)(pucMemHandle - prTxCtrl->pucTxCached) == prTxCtrl->u4TxCachedSize); - - QUEUE_INITIALIZE(&prTxCtrl->rTxMgmtTxingQueue); - prTxCtrl->i4TxMgmtPendingNum = 0; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum = 0; - prTxCtrl->u4TotalTxPacketNum = 0; -#endif - - prTxCtrl->i4PendingFwdFrameCount = 0; - - qmInit(prAdapter); - - TX_RESET_ALL_CNTS(prTxCtrl); - - return; -} /* end of nicTxInitialize() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will check if has enough TC Buffer for incoming -* packet and then update the value after promise to provide the resources. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] ucTC Specify the resource of TC -* -* \retval WLAN_STATUS_SUCCESS Resource is available and been assigned. -* \retval WLAN_STATUS_RESOURCES Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAcquireResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_RESOURCES; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - -// DbgPrint("nicTxAcquireResource prTxCtrl->rTc.aucFreeBufferCount[%d]=%d\n", ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC]); - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC]) { - - prTxCtrl->rTc.aucFreeBufferCount[ucTC]--; - - DBGLOG(TX, EVENT, ("Acquire: TC = %d aucFreeBufferCount = %d\n", - ucTC, prTxCtrl->rTc.aucFreeBufferCount[ucTC])); - - u4Status = WLAN_STATUS_SUCCESS; - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return u4Status; - -}/* end of nicTxAcquireResourceAndTFCBs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will do polling if FW has return the resource. -* Used when driver start up before enable interrupt. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Resource is available. -* @retval WLAN_STATUS_FAILURE Resource is not available. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxPollingResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - WLAN_STATUS u4Status = WLAN_STATUS_FAILURE; - INT_32 i = NIC_TX_RESOURCE_POLLING_TIMEOUT; - UINT_32 au4WTSR[2]; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - if (ucTC >= TC_NUM) { - return WLAN_STATUS_FAILURE; - } - - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - return WLAN_STATUS_SUCCESS; - } - - while (i-- > 0) { - HAL_READ_TX_RELEASED_COUNT(prAdapter, au4WTSR); - - if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE - || fgIsBusAccessFailed == TRUE) { - u4Status = WLAN_STATUS_FAILURE; - break; - } - else if (nicTxReleaseResource(prAdapter, (PUINT_8)au4WTSR)) { - if (prTxCtrl->rTc.aucFreeBufferCount[ucTC] > 0) { - u4Status = WLAN_STATUS_SUCCESS; - break; - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - else { - kalMsleep(NIC_TX_RESOURCE_POLLING_DELAY_MSEC); - } - } - -#if DBG - { - INT_32 i4Times = NIC_TX_RESOURCE_POLLING_TIMEOUT - (i+1); - - if (i4Times) { - DBGLOG(TX, TRACE, ("Polling MCR_WTSR delay %d times, %d msec\n", - i4Times, (i4Times * NIC_TX_RESOURCE_POLLING_DELAY_MSEC))); - } - } -#endif /* DBG */ - - return u4Status; - -} /* end of nicTxPollingResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will release TC Buffer count according to -* the given TX_STATUS COUNTER after TX Done. -* -* \param[in] prAdapter Pointer to the Adapter structure. -* \param[in] u4TxStatusCnt Value of TX STATUS -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxReleaseResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8* aucTxRlsCnt - ) -{ - PUINT_32 pu4Tmp = (PUINT_32)aucTxRlsCnt; - P_TX_CTRL_T prTxCtrl; - BOOLEAN bStatus = FALSE; - UINT_32 i; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - if (pu4Tmp[0] | pu4Tmp[1]) { - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - for (i = 0; i < TC_NUM; i++) { - prTxCtrl->rTc.aucFreeBufferCount[i] += aucTxRlsCnt[i]; - - if ((i==1) || (i==5)){ - DBGLOG(TX, EVENT, ("Release: i = %d aucFreeBufferCount = %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i])); - } - } - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); -#if 0 - for (i = 0; i < TC_NUM; i++) { - DBGLOG(INIT, TRACE, ("aucFreeBufferCount[%d]: %d, aucMaxNumOfBuffer[%d]: %d\n", - i, prTxCtrl->rTc.aucFreeBufferCount[i], i, prTxCtrl->rTc.aucMaxNumOfBuffer[i])); - } - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[0]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[0]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[1]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[1]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[2]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[2]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[3]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[3]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[4]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[4]); - DbgPrint("prTxCtrl->rTc.aucFreeBufferCount[5]=%d\n", prTxCtrl->rTc.aucFreeBufferCount[5]); -#endif - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX]); - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] <= prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX]); - bStatus = TRUE; - } - - return bStatus; -} /* end of nicTxReleaseResource() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reset TC Buffer Count to initialized value -* -* \param[in] prAdapter Pointer to the Adapter structure. -* -* @return WLAN_STATUS_SUCCESS -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - DEBUGFUNC("nicTxResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Driver maintain a variable that is synchronous with the usage of individual -* TC Buffer Count. This function will return the value for other component -* which needs this information for making decisions -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucTC Specify the resource of TC -* -* @retval UINT_8 The number of corresponding TC number -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -nicTxGetResource ( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucTC - ) -{ - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - ASSERT(prTxCtrl); - - if (ucTC >= TC_NUM) { - return 0; - } - else { - return prTxCtrl->rTc.aucFreeBufferCount[ucTC]; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll aggregate frame(PACKET_INFO_T) -* corresponding to HIF TX port -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoListHead a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduInfoList ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - QUE_T qDataPort0, qDataPort1; - WLAN_STATUS status; - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prMsduInfo = prMsduInfoListHead; - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - // Separate MSDU_INFO_T lists into 2 categories: for Port#0 & Port#1 - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); -#if DBG && 0 - LOG_FUNC("nicTxMsduInfoList Acquire TC %d net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prMsduInfo->ucTC, - prMsduInfo->ucNetworkType, - prMsduInfo->ucMacHeaderLength, - prMsduInfo->u2FrameLength, - prMsduInfo->ucPacketType, - prMsduInfo->fgIs802_1x, - prMsduInfo->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prMsduInfo->aucEthDestAddr)); -#endif - - switch(prMsduInfo->ucTC) { - case TC0_INDEX: - case TC1_INDEX: - case TC2_INDEX: - case TC3_INDEX: - case TC5_INDEX: // Broadcast/multicast data packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - case TC4_INDEX: // Command or 802.1x packets - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - - status = nicTxAcquireResource(prAdapter, prMsduInfo->ucTC); - ASSERT(status == WLAN_STATUS_SUCCESS) - - break; - - default: - ASSERT(0); - break; - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 0, &qDataPort0); - } - - if(qDataPort1.u4NumElem > 0) { - nicTxMsduQueue(prAdapter, 1, &qDataPort1); - } - - return WLAN_STATUS_SUCCESS; -} - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - -PKT_PROFILE_T rPrevRoundLastPkt; - -VOID -nicTxReturnMsduInfoProfiling ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead, prNextMsduInfo; - - P_MSDU_INFO_T prFirstProfileMsduInfo = NULL; - P_MSDU_INFO_T prPrevProfileMsduInfo = NULL; - P_PKT_PROFILE_T prPrevRoundLastPkt = &rPrevRoundLastPkt; - P_PKT_PROFILE_T prPktProfile; - - BOOLEAN fgGotFirst = FALSE; - BOOLEAN fgPrintCurPkt = FALSE; - BOOLEAN fgIsPrevPrinted = FALSE; - - UINT_32 u4MaxDeltaTime = 50; // in ms - - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - prPktProfile = &prMsduInfo->rPktProfile; - fgPrintCurPkt = FALSE; - - if(prPktProfile->fgIsValid) { - prPktProfile->rHifTxDoneTimestamp = kalGetTimeTick(); - - //4 1. check delta between current round first pkt and prevous round last pkt - if(!fgGotFirst) { - prFirstProfileMsduInfo = prMsduInfo; - fgGotFirst = TRUE; - - if(prPrevRoundLastPkt->fgIsValid) { - if(CHK_PROFILES_DELTA(prPktProfile, prPrevRoundLastPkt, u4MaxDeltaTime)) { - PRINT_PKT_PROFILE(prPrevRoundLastPkt, "PR"); - fgPrintCurPkt = TRUE; - } - } - } - - //4 2. check delta between current pkt and previous pkt - if(prPrevProfileMsduInfo) { - if(CHK_PROFILES_DELTA(prPktProfile, &prPrevProfileMsduInfo->rPktProfile, u4MaxDeltaTime)) { - PRINT_PKT_PROFILE(&prPrevProfileMsduInfo->rPktProfile, "P"); - fgPrintCurPkt = TRUE; - } - } - - //4 3. check delta of current pkt lifetime - if(CHK_PROFILE_DELTA(prPktProfile, u4MaxDeltaTime)) { - fgPrintCurPkt = TRUE; - } - - /* Print current pkt profile */ - if(fgPrintCurPkt) { - PRINT_PKT_PROFILE(prPktProfile, "C"); - } - - fgIsPrevPrinted = fgPrintCurPkt; - prPrevProfileMsduInfo = prMsduInfo; - } - - prMsduInfo = prNextMsduInfo; - }; - - //4 4. record the lifetime of current round last pkt - if(prPrevProfileMsduInfo) { - prPktProfile = &prPrevProfileMsduInfo->rPktProfile; - prPrevRoundLastPkt->u2IpSn = prPktProfile->u2IpSn; - prPrevRoundLastPkt->u2RtpSn = prPktProfile->u2RtpSn; - prPrevRoundLastPkt->rHardXmitArrivalTimestamp = prPktProfile->rHardXmitArrivalTimestamp; - prPrevRoundLastPkt->rEnqueueTimestamp = prPktProfile->rEnqueueTimestamp; - prPrevRoundLastPkt->rDequeueTimestamp = prPktProfile->rDequeueTimestamp; - prPrevRoundLastPkt->rHifTxDoneTimestamp = prPktProfile->rHifTxDoneTimestamp; - prPrevRoundLastPkt->fgIsPrinted = prPktProfile->fgIsPrinted; - prPrevRoundLastPkt->fgIsValid = TRUE; - } - - nicTxReturnMsduInfo(prAdapter, prMsduInfoListHead); - - return; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief In this function, we'll write frame(PACKET_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param ucPortIdx Port Number -* @param prQue a link list of P_MSDU_INFO_T -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxMsduQueue ( - IN P_ADAPTER_T prAdapter, - UINT_8 ucPortIdx, - P_QUE_T prQue - ) -{ - P_MSDU_INFO_T prMsduInfo, prNextMsduInfo; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_16 u2OverallBufferLength; - UINT_8 ucEtherTypeOffsetInWord; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 u4TxHdrSize; - UINT_32 u4ValidBufSize; - UINT_32 u4TotalLength; - P_TX_CTRL_T prTxCtrl; - QUE_T rFreeQueue; -#if CFG_TCP_IP_CHKSUM_OFFLOAD - UINT_8 ucChksumFlag; -#endif - - ASSERT(prAdapter); - ASSERT(ucPortIdx < 2); - ASSERT(prQue); - - prTxCtrl = &prAdapter->rTxCtrl; - u4ValidBufSize = prAdapter->u4CoalescingBufCachedSize; - -#if CFG_HIF_STATISTICS - prTxCtrl->u4TotalTxAccessNum++; - prTxCtrl->u4TotalTxPacketNum += prQue->u4NumElem; -#endif - - QUEUE_INITIALIZE(&rFreeQueue); - - if(prQue->u4NumElem > 0) { - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_HEAD(prQue); - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - u4TotalLength = 0; - - while(prMsduInfo) { - - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prMsduInfo->prPacket; - - ASSERT(prNativePacket); - - u4TxHdrSize = TX_HDR_SIZE; - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - if (prMsduInfo->fgIs802_11) { - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - } - else { - ucEtherTypeOffsetInWord = - ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - } - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - if (prMsduInfo->eSrc == TX_PACKET_OS) { - if (prAdapter->u4CSUMFlags & - (CSUM_OFFLOAD_EN_TX_TCP | - CSUM_OFFLOAD_EN_TX_UDP | - CSUM_OFFLOAD_EN_TX_IP)) { - kalQueryTxChksumOffloadParam(prNativePacket, &ucChksumFlag); - - if (ucChksumFlag & TX_CS_IP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_IP_CSUM; - } - - if (ucChksumFlag & TX_CS_TCP_UDP_GEN) { - rHwTxHeader.ucResource_PktType_CSflags |= (UINT_8)HIF_TX_HDR_TCP_CSUM; - } - } - } -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - if(prMsduInfo->rPktProfile.fgIsValid) { - prMsduInfo->rPktProfile.rDequeueTimestamp = kalGetTimeTick(); - } -#endif - -#if CFG_SDIO_TX_AGG - // attach to coalescing buffer - kalMemCopy(pucOutputBuf + u4TotalLength, &rHwTxHeader, u4TxHdrSize); - u4TotalLength += u4TxHdrSize; - - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TotalLength); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TotalLength, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - u4TotalLength += ALIGN_4(prMsduInfo->u2FrameLength); - -#else - kalMemCopy(pucOutputBuf, &rHwTxHeader, u4TxHdrSize); - - /* Copy Frame Body */ - if (prMsduInfo->eSrc == TX_PACKET_OS - || prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + u4TxHdrSize); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - kalMemCopy(pucOutputBuf + u4TxHdrSize, - prNativePacket, - prMsduInfo->u2FrameLength); - } - else { - ASSERT(0); - } - - ASSERT(u2OverallBufferLength <= u4ValidBufSize); - - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); - - // send immediately -#endif - prNextMsduInfo = (P_MSDU_INFO_T) - QUEUE_GET_NEXT_ENTRY(&prMsduInfo->rQueEntry); - - if (prMsduInfo->eSrc == TX_PACKET_MGMT) { - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - KAL_SPIN_LOCK_DECLARATION(); - DBGLOG(INIT, TRACE,("Wait TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - /* only free MSDU when it is not a MGMT frame */ - QUEUE_INSERT_TAIL(&rFreeQueue, (P_QUE_ENTRY_T)prMsduInfo); - - if (prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_SUCCESS); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - } - - prMsduInfo = prNextMsduInfo; - } - -#if CFG_SDIO_TX_AGG - ASSERT(u4TotalLength <= u4ValidBufSize); - - #if CFG_DBG_GPIO_PINS - { - /* Start port write */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_PORT_WRITE, DBG_TIE_HIGH); - } - #endif - - // send coalescing buffer - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - u4TotalLength, - (PUINT_8)pucOutputBuf, - u4ValidBufSize); -#endif - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - nicTxReturnMsduInfoProfiling(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); -#else - // return - nicTxReturnMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rFreeQueue)); -#endif - } - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_WIFI_CMD_T prWifiCmd; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_8 ucPortIdx; - HIF_TX_HEADER_T rHwTxHeader; - P_NATIVE_PACKET prNativePacket; - UINT_8 ucEtherTypeOffsetInWord; - P_MSDU_INFO_T prMsduInfo; - P_TX_CTRL_T prTxCtrl; - - KAL_SPIN_LOCK_DECLARATION(); - - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - - // <1> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { - // Broadcast/multicast data frames, 1x frames, command packets, MMPDU - ucPortIdx = 1; - } - - if(prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - prNativePacket = prCmdInfo->prPacket; - - ASSERT(prNativePacket); - - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = ((prCmdInfo->u2InfoBufLen + TX_HDR_SIZE) - & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - ucEtherTypeOffsetInWord = ((ETHER_HEADER_LEN - ETHER_TYPE_LEN) + TX_HDR_SIZE) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET); - - rHwTxHeader.ucStaRecIdx = prCmdInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = HIF_TX_HDR_BURST_END_MASK; - - rHwTxHeader.ucWlanHeaderLength = (ETH_HLEN & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (((UINT_8)(prCmdInfo->eNetworkType) << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((1 << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK); - - rHwTxHeader.u2SeqNo = 0; - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body Copy - kalCopyFrame(prAdapter->prGlueInfo, - prNativePacket, - pucOutputBuf + TX_HDR_SIZE); - } - else if(prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - prMsduInfo = (P_MSDU_INFO_T)prCmdInfo->prPacket; - - ASSERT(prMsduInfo->fgIs802_11 == TRUE); - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - - // <2> Compose HIF_TX_HEADER - kalMemZero(&rHwTxHeader, sizeof(rHwTxHeader)); - - u2OverallBufferLength = ((prMsduInfo->u2FrameLength + TX_HDR_SIZE) & - (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - rHwTxHeader.u2TxByteCount_UserPriority = u2OverallBufferLength; - rHwTxHeader.u2TxByteCount_UserPriority |= - ((UINT_16)prMsduInfo->ucUserPriority << HIF_TX_HDR_USER_PRIORITY_OFFSET); - - ucEtherTypeOffsetInWord = - (TX_HDR_SIZE + prMsduInfo->ucMacHeaderLength + prMsduInfo->ucLlcLength) >> 1; - - rHwTxHeader.ucEtherTypeOffset = - ucEtherTypeOffsetInWord & HIF_TX_HDR_ETHER_TYPE_OFFSET_MASK; - - rHwTxHeader.ucResource_PktType_CSflags = (prMsduInfo->ucTC) << HIF_TX_HDR_RESOURCE_OFFSET; - rHwTxHeader.ucResource_PktType_CSflags |= - (UINT_8)(((prMsduInfo->ucPacketType) << HIF_TX_HDR_PACKET_TYPE_OFFSET) & - (HIF_TX_HDR_PACKET_TYPE_MASK)); - - rHwTxHeader.u2LLH = prMsduInfo->u2PalLLH; - rHwTxHeader.ucStaRecIdx = prMsduInfo->ucStaRecIndex; - rHwTxHeader.ucForwardingType_SessionID_Reserved = - (prMsduInfo->ucPsForwardingType) | ((prMsduInfo->ucPsSessionID) << HIF_TX_HDR_PS_SESSION_ID_OFFSET) - | ((prMsduInfo->fgIsBurstEnd)? HIF_TX_HDR_BURST_END_MASK : 0); - - rHwTxHeader.ucWlanHeaderLength = (prMsduInfo->ucMacHeaderLength & HIF_TX_HDR_WLAN_HEADER_LEN_MASK); - rHwTxHeader.ucPktFormtId_Flags = - (prMsduInfo->ucFormatID & HIF_TX_HDR_FORMAT_ID_MASK) - | ((prMsduInfo->ucNetworkType << HIF_TX_HDR_NETWORK_TYPE_OFFSET) & HIF_TX_HDR_NETWORK_TYPE_MASK) - | ((prMsduInfo->fgIs802_1x << HIF_TX_HDR_FLAG_1X_FRAME_OFFSET) & HIF_TX_HDR_FLAG_1X_FRAME_MASK) - | ((prMsduInfo->fgIs802_11 << HIF_TX_HDR_FLAG_802_11_FORMAT_OFFSET) & HIF_TX_HDR_FLAG_802_11_FORMAT_MASK); - - rHwTxHeader.u2SeqNo = prMsduInfo->u2AclSN; - - if(prMsduInfo->pfTxDoneHandler) { - rHwTxHeader.ucPacketSeqNo = prMsduInfo->ucTxSeqNum; - rHwTxHeader.ucAck_BIP_BasicRate = HIF_TX_HDR_NEED_ACK; - } - else { - rHwTxHeader.ucPacketSeqNo = 0; - rHwTxHeader.ucAck_BIP_BasicRate = 0; - } - - if(prMsduInfo->fgIsBIP) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BIP; - } - - if(prMsduInfo->fgIsBasicRate) { - rHwTxHeader.ucAck_BIP_BasicRate |= HIF_TX_HDR_BASIC_RATE; - } - - // <2.3> Copy HIF TX HEADER - kalMemCopy((PVOID)&pucOutputBuf[0], (PVOID)&rHwTxHeader, TX_HDR_SIZE); - - // <3> Copy Frame Body - kalMemCopy(pucOutputBuf + TX_HDR_SIZE, - prMsduInfo->prPacket, - prMsduInfo->u2FrameLength); - - // <4> Management Frame Post-Processing - GLUE_DEC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - if (prMsduInfo->pfTxDoneHandler == NULL) { - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - - DBGLOG(INIT, TRACE,("Wait Cmd TxSeqNum:%d\n", prMsduInfo->ucTxSeqNum)); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_INSERT_TAIL(&(prTxCtrl->rTxMgmtTxingQueue), (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - } - } - else { - prWifiCmd = (P_WIFI_CMD_T)prCmdInfo->pucInfoBuffer; - - // <2> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prWifiCmd->u2TxByteCount_UserPriority = u2OverallBufferLength; - prWifiCmd->ucEtherTypeOffset = 0; - prWifiCmd->ucResource_PktType_CSflags = (ucTC << HIF_TX_HDR_RESOURCE_OFFSET) - | (UINT_8)((HIF_TX_PKT_TYPE_CMD << HIF_TX_HDR_PACKET_TYPE_OFFSET) & (HIF_TX_HDR_PACKET_TYPE_MASK)); - - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - } - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} /* end of nicTxCmd() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function will clean up all the pending frames in internal SW Queues -* by return the pending TX packet to the system. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxRelease ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - - nicTxFlush(prAdapter); - - // free MSDU_INFO_T from rTxMgmtMsduInfoList - do { - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - QUEUE_REMOVE_HEAD(&prTxCtrl->rTxMgmtTxingQueue, prMsduInfo, P_MSDU_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TXING_MGMT_LIST); - - if(prMsduInfo) { - // the packet must be mgmt frame with tx done callback - ASSERT(prMsduInfo->eSrc == TX_PACKET_MGMT); - ASSERT(prMsduInfo->pfTxDoneHandler != NULL); - - // invoke done handler - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_LIFE_TIMEOUT); - - cnmMgtPktFree(prAdapter, prMsduInfo); - } - else { - break; - } - } while(TRUE); - - return; -} /* end of nicTxRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Process the TX Done interrupt and pull in more pending frames in SW -* Queues for transmission. -* -* @param prAdapter Pointer to the Adapter structure. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicProcessTxInterrupt( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; -#if CFG_SDIO_INTR_ENHANCE - P_SDIO_CTRL_T prSDIOCtrl; -#else - UINT_32 au4TxCount[2]; -#endif /* CFG_SDIO_INTR_ENHANCE */ - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - /* Get the TX STATUS */ -#if CFG_SDIO_INTR_ENHANCE - - prSDIOCtrl = prAdapter->prSDIOCtrl; - #if DBG - //dumpMemory8((PUINT_8)prSDIOCtrl, sizeof(SDIO_CTRL_T)); - #endif - - nicTxReleaseResource(prAdapter, (PUINT_8)&prSDIOCtrl->rTxInfo); - kalMemZero(&prSDIOCtrl->rTxInfo, sizeof(prSDIOCtrl->rTxInfo)); - -#else - - HAL_MCR_RD(prAdapter, MCR_WTSR0, &au4TxCount[0]); - HAL_MCR_RD(prAdapter, MCR_WTSR1, &au4TxCount[1]); - DBGLOG(EMU, TRACE, ("MCR_WTSR0: 0x%x, MCR_WTSR1: 0x%x\n", au4TxCount[0], au4TxCount[1])); - - nicTxReleaseResource(prAdapter, (PUINT_8)au4TxCount); - -#endif /* CFG_SDIO_INTR_ENHANCE */ - - nicTxAdjustTcq(prAdapter); - - // Indicate Service Thread - if(kalGetTxPendingCmdCount(prAdapter->prGlueInfo) > 0 - || wlanGetTxPendingFrameCount(prAdapter) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return; -} /* end of nicProcessTxInterrupt() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function frees packet of P_MSDU_INFO_T linked-list -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxFreeMsduInfoPacket ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_NATIVE_PACKET prNativePacket; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead; - P_TX_CTRL_T prTxCtrl; - - - ASSERT(prAdapter); - ASSERT(prMsduInfoListHead); - - prTxCtrl = &prAdapter->rTxCtrl; - - while(prMsduInfo) { - prNativePacket = prMsduInfo->prPacket; - - if(prMsduInfo->eSrc == TX_PACKET_OS) { - kalSendComplete(prAdapter->prGlueInfo, - prNativePacket, - WLAN_STATUS_FAILURE); - } - else if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - if (prMsduInfo->pfTxDoneHandler) { - prMsduInfo->pfTxDoneHandler(prAdapter, prMsduInfo, TX_RESULT_DROPPED_IN_DRIVER); - } - cnmMemFree(prAdapter, prNativePacket); - } - else if(prMsduInfo->eSrc == TX_PACKET_FORWARDING) { - GLUE_DEC_REF_CNT(prTxCtrl->i4PendingFwdFrameCount); - } - - prMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function returns P_MSDU_INFO_T of MsduInfoList to TxCtrl->rfreeMsduInfoList -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfoList a link list of P_MSDU_INFO_T -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicTxReturnMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prMsduInfo = prMsduInfoListHead, prNextMsduInfo; - - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - switch(prMsduInfo->eSrc) { - case TX_PACKET_FORWARDING: - wlanReturnPacket(prAdapter, prMsduInfo->prPacket); - break; - case TX_PACKET_OS: - case TX_PACKET_OS_OID: - case TX_PACKET_MGMT: - default: - break; - } - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - QUEUE_INSERT_TAIL(&prTxCtrl->rFreeMsduInfoList, (P_QUE_ENTRY_T)prMsduInfo); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_MSDU_INFO_LIST); - prMsduInfo = prNextMsduInfo; - }; - - return; -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function fills packet information to P_MSDU_INFO_T -* -* @param prAdapter Pointer to the Adapter structure. -* @param prMsduInfo P_MSDU_INFO_T -* @param prPacket P_NATIVE_PACKET -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -nicTxFillMsduInfo ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo, - IN P_NATIVE_PACKET prPacket - ) -{ - P_GLUE_INFO_T prGlueInfo; - UINT_8 ucPriorityParam; - UINT_8 ucMacHeaderLen; - UINT_8 aucEthDestAddr[PARAM_MAC_ADDR_LEN]; - BOOLEAN fgIs1x = FALSE; - BOOLEAN fgIsPAL = FALSE; - UINT_32 u4PacketLen; - ULONG u4SysTime; - UINT_8 ucNetworkType; - - - ASSERT(prAdapter); - - prGlueInfo = prAdapter->prGlueInfo; - ASSERT(prGlueInfo); - - if (kalQoSFrameClassifierAndPacketInfo(prGlueInfo, - prPacket, - &ucPriorityParam, - &u4PacketLen, - aucEthDestAddr, - &fgIs1x, - &fgIsPAL, - &ucNetworkType) == FALSE) { - return FALSE; - } - - #if CFG_ENABLE_PKT_LIFETIME_PROFILE - do { - struct sk_buff *prSkb = (struct sk_buff *) prPacket; - UINT_16 u2EtherTypeLen; - PUINT_8 aucLookAheadBuf = NULL; - P_PKT_PROFILE_T prPktProfile = &prMsduInfo->rPktProfile; - - UINT_8 ucRtpSnOffset = 30; - UINT_32 u4RtpSrcPort = 15550; - - - prPktProfile->fgIsValid = FALSE; - - aucLookAheadBuf = prSkb->data; - - u2EtherTypeLen = (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET] << 8) | (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET + 1]); - - if ((u2EtherTypeLen == ETH_P_IP) && - (u4PacketLen >= LOOK_AHEAD_LEN)) { - PUINT_8 pucIpHdr = &aucLookAheadBuf[ETH_HLEN]; - UINT_8 ucIpVersion; - - ucIpVersion = (pucIpHdr[0] & IPVH_VERSION_MASK) >> IPVH_VERSION_OFFSET; - if (ucIpVersion == IPVERSION) { - if(pucIpHdr[IPV4_HDR_IP_PROTOCOL_OFFSET] == IP_PROTOCOL_UDP) { - - /* Enable packet lifetime profiling */ - prPktProfile->fgIsValid = TRUE; - - prPktProfile->fgIsPrinted = FALSE; - - /* RTP SN */ - prPktProfile->u2RtpSn = pucIpHdr[ucRtpSnOffset] << 8 | pucIpHdr[ucRtpSnOffset + 1]; - - /* IP SN */ - prPktProfile->u2IpSn = pucIpHdr[IPV4_HDR_IP_IDENTIFICATION_OFFSET] << 8 | - pucIpHdr[IPV4_HDR_IP_IDENTIFICATION_OFFSET + 1]; - - /* Packet arrival time at kernel Hard Xmit */ - prPktProfile->rHardXmitArrivalTimestamp = GLUE_GET_PKT_ARRIVAL_TIME(prPacket); - - /* Packet enqueue time */ - prPktProfile->rEnqueueTimestamp = (OS_SYSTIME)kalGetTimeTick(); - } - } - } - }while(FALSE); - #endif - - /* Save the value of Priority Parameter */ - GLUE_SET_PKT_TID(prPacket, ucPriorityParam); - - if (fgIs1x) { - GLUE_SET_PKT_FLAG_1X(prPacket); - } - - if (fgIsPAL) { - GLUE_SET_PKT_FLAG_PAL(prPacket); - } - - ucMacHeaderLen = ETH_HLEN; - - /* Save the value of Header Length */ - GLUE_SET_PKT_HEADER_LEN(prPacket, ucMacHeaderLen); - - /* Save the value of Frame Length */ - GLUE_SET_PKT_FRAME_LEN(prPacket, (UINT_16)u4PacketLen); - - /* Save the value of Arrival Time*/ - u4SysTime = (OS_SYSTIME)kalGetTimeTick(); - GLUE_SET_PKT_ARRIVAL_TIME(prPacket, u4SysTime); - - prMsduInfo->prPacket = prPacket; - prMsduInfo->fgIs802_1x = fgIs1x; - prMsduInfo->fgIs802_11 = FALSE; - prMsduInfo->ucNetworkType = ucNetworkType; - prMsduInfo->ucUserPriority = ucPriorityParam; - prMsduInfo->ucMacHeaderLength = ucMacHeaderLen; - prMsduInfo->u2FrameLength = (UINT_16)u4PacketLen; - COPY_MAC_ADDR(prMsduInfo->aucEthDestAddr, aucEthDestAddr); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function update TCQ values by passing current status to txAdjustTcQuotas -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Updated successfully -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxAdjustTcq ( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4Num; - TX_TCQ_ADJUST_T rTcqAdjust; - P_TX_CTRL_T prTxCtrl; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - qmAdjustTcQuotas(prAdapter, &rTcqAdjust, &prTxCtrl->rTc); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - for (u4Num = 0 ; u4Num < TC_NUM ; u4Num++) { - prTxCtrl->rTc.aucFreeBufferCount[u4Num] += rTcqAdjust.acVariation[u4Num]; - prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] += rTcqAdjust.acVariation[u4Num]; - - ASSERT(prTxCtrl->rTc.aucFreeBufferCount[u4Num] >= 0); - ASSERT(prTxCtrl->rTc.aucMaxNumOfBuffer[u4Num] >= 0); - } - - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_TX_RESOURCE); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief this function flushes all packets queued in STA/AC queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Flushed successfully -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -nicTxFlush ( - IN P_ADAPTER_T prAdapter - ) -{ - P_MSDU_INFO_T prMsduInfo; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - - // ask Per STA/AC queue to be fllushed and return all queued packets - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prMsduInfo = qmFlushTxQueues(prAdapter); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - if(prMsduInfo != NULL) { - nicTxFreeMsduInfoPacket(prAdapter, prMsduInfo); - nicTxReturnMsduInfo(prAdapter, prMsduInfo); - } - - return WLAN_STATUS_SUCCESS; -} - - -#if CFG_ENABLE_FW_DOWNLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll write Command(CMD_INFO_T) into HIF. -* However this function is used for INIT_CMD. -* -* In order to avoid further maintainance issues, these 2 functions are separated -* -* @param prAdapter Pointer to the Adapter structure. -* @param prPacketInfo Pointer of CMD_INFO_T -* @param ucTC Specify the resource of TC -* -* @retval WLAN_STATUS_SUCCESS Bus access ok. -* @retval WLAN_STATUS_FAILURE Bus access fail. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitCmd ( - IN P_ADAPTER_T prAdapter, - IN P_CMD_INFO_T prCmdInfo, - IN UINT_8 ucTC - ) -{ - P_INIT_HIF_TX_HEADER_T prInitTxHeader; - UINT_16 u2OverallBufferLength; - PUINT_8 pucOutputBuf = (PUINT_8)NULL; /* Pointer to Transmit Data Structure Frame */ - UINT_32 ucPortIdx; - P_TX_CTRL_T prTxCtrl; - - ASSERT(prAdapter); - ASSERT(prCmdInfo); - ASSERT(ucTC == TC0_INDEX); - - prTxCtrl = &prAdapter->rTxCtrl; - pucOutputBuf = prTxCtrl->pucTxCoalescingBufPtr; - prInitTxHeader = (P_INIT_HIF_TX_HEADER_T)prCmdInfo->pucInfoBuffer; - - // <1> Compose the Header of Transmit Data Structure for CMD Packet - u2OverallBufferLength = TFCB_FRAME_PAD_TO_DW( - (prCmdInfo->u2InfoBufLen) & (UINT_16)HIF_TX_HDR_TX_BYTE_COUNT_MASK); - - prInitTxHeader->u2TxByteCount = u2OverallBufferLength; - prInitTxHeader->ucEtherTypeOffset = 0; - prInitTxHeader->ucCSflags = 0; - - // <2> Assign Data Port - if (ucTC != TC4_INDEX) { - ucPortIdx = 0; - } - else { // Broadcast/multicast data packets - ucPortIdx = 1; - } - - // <3> Copy CMD Header to command buffer (by using pucCoalescingBufCached) - kalMemCopy((PVOID)&pucOutputBuf[0], - (PVOID)prCmdInfo->pucInfoBuffer, - prCmdInfo->u2InfoBufLen); - - ASSERT(u2OverallBufferLength <= prAdapter->u4CoalescingBufCachedSize); - - // <4> Write frame to data port - HAL_WRITE_TX_PORT(prAdapter, - ucPortIdx, - (UINT_32)u2OverallBufferLength, - (PUINT_8)pucOutputBuf, - (UINT_32)prAdapter->u4CoalescingBufCachedSize); - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief In this function, we'll reset TX resource counter to initial value used -* in F/W download state -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxInitResetResource ( - IN P_ADAPTER_T prAdapter - ) -{ - P_TX_CTRL_T prTxCtrl; - - DEBUGFUNC("nicTxInitResetResource"); - - ASSERT(prAdapter); - prTxCtrl = &prAdapter->rTxCtrl; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - prTxCtrl->rTc.aucFreeBufferCount[TC0_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC0; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - prTxCtrl->rTc.aucFreeBufferCount[TC1_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC1; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - prTxCtrl->rTc.aucFreeBufferCount[TC2_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC2; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - prTxCtrl->rTc.aucFreeBufferCount[TC3_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC3; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - prTxCtrl->rTc.aucFreeBufferCount[TC4_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC4; - - prTxCtrl->rTc.aucMaxNumOfBuffer[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - prTxCtrl->rTc.aucFreeBufferCount[TC5_INDEX] = NIC_TX_INIT_BUFF_COUNT_TC5; - - return WLAN_STATUS_SUCCESS; - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function enqueues MSDU_INFO_T into queue management, -* or command queue -* -* @param prAdapter Pointer to the Adapter structure. -* prMsduInfo Pointer to MSDU -* -* @retval WLAN_STATUS_SUCCESS Reset is done successfully. -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -nicTxEnqueueMsdu ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_TX_CTRL_T prTxCtrl; - P_MSDU_INFO_T prNextMsduInfo, prRetMsduInfo, prMsduInfoHead; - QUE_T qDataPort0, qDataPort1; - P_CMD_INFO_T prCmdInfo; - WLAN_STATUS u4Status = WLAN_STATUS_SUCCESS; - KAL_SPIN_LOCK_DECLARATION(); - - ASSERT(prAdapter); - ASSERT(prMsduInfo); - - prTxCtrl = &prAdapter->rTxCtrl; - ASSERT(prTxCtrl); - - QUEUE_INITIALIZE(&qDataPort0); - QUEUE_INITIALIZE(&qDataPort1); - - /* check how many management frame are being queued */ - while(prMsduInfo) { - prNextMsduInfo = (P_MSDU_INFO_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo); - - QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prMsduInfo) = NULL; - - if(prMsduInfo->eSrc == TX_PACKET_MGMT) { - // MMPDU: force stick to TC4 - prMsduInfo->ucTC = TC4_INDEX; - - QUEUE_INSERT_TAIL(&qDataPort1, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(&qDataPort0, (P_QUE_ENTRY_T)prMsduInfo); - } - - prMsduInfo = prNextMsduInfo; - } - - if(qDataPort0.u4NumElem) { - /* send to QM */ - KAL_SPIN_LOCK_DECLARATION(); - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - prRetMsduInfo = qmEnqueueTxPackets(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort0)); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_QM_TX_QUEUE); - - /* post-process for dropped packets */ - if(prRetMsduInfo != NULL) { // unable to enqueue - nicTxFreeMsduInfoPacket(prAdapter, prRetMsduInfo); - nicTxReturnMsduInfo(prAdapter, prRetMsduInfo); - } - } - - if(qDataPort1.u4NumElem) { - prMsduInfoHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&qDataPort1); - - if(qDataPort1.u4NumElem > nicTxGetFreeCmdCount(prAdapter)) { - // not enough descriptors for sending - u4Status = WLAN_STATUS_FAILURE; - - // free all MSDUs - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - if (prMsduInfoHead->pfTxDoneHandler != NULL) { - prMsduInfoHead->pfTxDoneHandler(prAdapter, prMsduInfoHead, TX_RESULT_DROPPED_IN_DRIVER); - } - - - cnmMgtPktFree(prAdapter, prMsduInfoHead); - - prMsduInfoHead = prNextMsduInfo; - } - } - else { - /* send to command queue */ - while(prMsduInfoHead) { - prNextMsduInfo = (P_MSDU_INFO_T) QUEUE_GET_NEXT_ENTRY(&prMsduInfoHead->rQueEntry); - - KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - QUEUE_REMOVE_HEAD(&prAdapter->rFreeCmdList, prCmdInfo, P_CMD_INFO_T); - KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_CMD_RESOURCE); - - if (prCmdInfo) { - GLUE_INC_REF_CNT(prTxCtrl->i4TxMgmtPendingNum); - - kalMemZero(prCmdInfo, sizeof(CMD_INFO_T)); - - prCmdInfo->eCmdType = COMMAND_TYPE_MANAGEMENT_FRAME; - prCmdInfo->u2InfoBufLen = prMsduInfoHead->u2FrameLength; - prCmdInfo->pucInfoBuffer = NULL; - prCmdInfo->prPacket = (P_NATIVE_PACKET)prMsduInfoHead; - prCmdInfo->ucStaRecIndex = prMsduInfoHead->ucStaRecIndex; - prCmdInfo->eNetworkType = prMsduInfoHead->ucNetworkType; - prCmdInfo->pfCmdDoneHandler = NULL; - prCmdInfo->pfCmdTimeoutHandler = NULL; - prCmdInfo->fgIsOid = FALSE; - prCmdInfo->fgSetQuery = TRUE; - prCmdInfo->fgNeedResp = FALSE; - - kalEnqueueCommand(prAdapter->prGlueInfo, (P_QUE_ENTRY_T)prCmdInfo); - } - else { - /* Cmd free count is larger than expected, but allocation fail. */ - ASSERT(0); - - u4Status = WLAN_STATUS_FAILURE; - cnmMgtPktFree(prAdapter, prMsduInfoHead); - } - - prMsduInfoHead = prNextMsduInfo; - } - } - } - - /* indicate service thread for sending */ - if(prTxCtrl->i4TxMgmtPendingNum > 0 - || kalGetTxPendingFrameCount(prAdapter->prGlueInfo) > 0) { - kalSetEvent(prAdapter->prGlueInfo); - } - - return u4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief this function returns available count in command queue -* -* @param prAdapter Pointer to the Adapter structure. -* -* @retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -nicTxGetFreeCmdCount ( - IN P_ADAPTER_T prAdapter - ) -{ - ASSERT(prAdapter); - - return prAdapter->rFreeCmdList.u4NumElem; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/p2p_nic.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/p2p_nic.c deleted file mode 100755 index 64ee990995fd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/p2p_nic.c +++ /dev/null @@ -1,243 +0,0 @@ -/* -** $Id: @(#) p2p_nic.c@@ -*/ - -/*! \file p2p_nic.c - \brief Wi-Fi Direct Functions that provide operation in NIC's (Network Interface Card) point of view. - - This file includes functions which unite multiple hal(Hardware) operations - and also take the responsibility of Software Resource Management in order - to keep the synchronization with Hardware Manipulation. -*/ - - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief When Probe Rsp & Beacon frame is received and decide a P2P device, -* this function will be invoked to buffer scan result -* -* @param prAdapter Pointer to the Adapter structure. -* @param prEventScanResult Pointer of EVENT_SCAN_RESULT_T. -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -nicRxAddP2pDevice ( - IN P_ADAPTER_T prAdapter, - IN P_EVENT_P2P_DEV_DISCOVER_RESULT_T prP2pResult, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELength - ) -{ - P_P2P_INFO_T prP2pInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - UINT_32 u4Idx = 0; - BOOLEAN bUpdate = FALSE; - - PUINT_8 pucIeBuf = (PUINT_8)NULL; - UINT_16 u2IELength = 0; - UINT_8 zeroMac[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - - ASSERT(prAdapter); - - prP2pInfo = prAdapter->prP2pInfo; - - for (u4Idx = 0; u4Idx < prP2pInfo->u4DeviceNum; u4Idx++) { - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - if (EQUAL_MAC_ADDR(prTargetResult->aucDeviceAddr, prP2pResult->aucDeviceAddr)) { - bUpdate = TRUE; - - /* Backup OLD buffer result. */ - pucIeBuf = prTargetResult->pucIeBuf; - u2IELength = prTargetResult->u2IELength; - - /* Update Device Info. */ - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - /* See if new IE length is longer or not. */ - if ((u2RxIELength > u2IELength) && (u2IELength != 0)) { - /* Buffer is not enough. */ - u2RxIELength = u2IELength; - } - else if ((u2IELength == 0) && (u2RxIELength != 0)) { - /* RX new IE buf. */ - ASSERT(pucIeBuf == NULL); - pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2RxIELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - - /* Step to next buffer address. */ - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength); - } - - /* Restore buffer pointer. */ - prTargetResult->pucIeBuf = pucIeBuf; - - if (pucRxIEBuf) { - /* If new received IE is availabe. - * Replace the old one & update new IE length. - */ - kalMemCopy(pucIeBuf, pucRxIEBuf, u2RxIELength); - prTargetResult->u2IELength = u2RxIELength; - } - else { - /* There is no new IE information, keep the old one. */ - prTargetResult->u2IELength = u2IELength; - } - } - } - - if (!bUpdate) { - /* We would flush the whole scan result after each scan request is issued. - * If P2P device is too many, it may over the scan list. - */ - if ((u4Idx < CFG_MAX_NUM_BSS_LIST) && (UNEQUAL_MAC_ADDR(zeroMac, prP2pResult->aucDeviceAddr))) { /* whsu:XXX */ - prTargetResult = &prP2pInfo->arP2pDiscoverResult[u4Idx]; - - // zero - kalMemZero(prTargetResult, sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - // then buffer - kalMemCopy(prTargetResult, - (PVOID)prP2pResult, - sizeof(EVENT_P2P_DEV_DISCOVER_RESULT_T)); - - //printk("DVC FND %d " MACSTR", " MACSTR "\n", prP2pInfo->u4DeviceNum, MAC2STR(prP2pResult->aucDeviceAddr), MAC2STR(prTargetResult->aucDeviceAddr)); - - if (u2RxIELength) { - prTargetResult->pucIeBuf = prP2pInfo->pucCurrIePtr; - - if (((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2RxIELength) > - (UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN]) { - /* Common Buffer is no enough. */ - u2IELength = (UINT_16)((UINT_32)&prP2pInfo->aucCommIePool[CFG_MAX_COMMON_IE_BUF_LEN] - (UINT_32)prP2pInfo->pucCurrIePtr); - } - else { - u2IELength = u2RxIELength; - } - - prP2pInfo->pucCurrIePtr = (PUINT_8)((UINT_32)prP2pInfo->pucCurrIePtr + (UINT_32)u2IELength); - - kalMemCopy((PVOID)prTargetResult->pucIeBuf, (PVOID)pucRxIEBuf, (UINT_32)u2IELength); - prTargetResult->u2IELength = u2IELength; - } - else { - prTargetResult->pucIeBuf = NULL; - prTargetResult->u2IELength = 0; - } - - prP2pInfo->u4DeviceNum++; - - } - else { - // TODO: Fixme to replace an old one. (?) - ASSERT(FALSE); - } - } -} /* nicRxAddP2pDevice */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/que_mgt.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/que_mgt.c deleted file mode 100755 index 2abff1bb3dd4..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/que_mgt.c +++ /dev/null @@ -1,4848 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/nic/que_mgt.c#1 $ -*/ - -/*! \file "que_mgt.c" - \brief TX/RX queues management - - The main tasks of queue management include TC-based HIF TX flow control, - adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save - forwarding control, RX packet reordering, and RX BA agreement management. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: que_mgt.c $ -** -** 01 04 2013 tsaiyuan.hsu -** [WCXRP00001271] [MT6620] add timeout mechanism for RX BA to avoid unsynced scoreboard with TX - -** fix msec systemtime conversion. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 02 23 2012 eddie.chen - * [WCXRP00001194] [MT6620][DRV/FW] follow admission control bit to change the enqueue rule - * Change the enqueue policy when ACM = 1. - * - * 11 22 2011 yuche.tsai - * NULL - * Code refine, remove one #if 0 code. - * - * 11 19 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog for tx - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 18 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Fix xlog format to hex format - * - * 11 17 2011 tsaiyuan.hsu - * [WCXRP00001115] [MT6620 Wi-Fi][DRV] avoid deactivating staRec when changing state 3 to 3. - * avoid deactivating staRec when changing state from 3 to 3. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug msg for xlog. - * - * 11 11 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters of bb and ar for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Use short name for xlog. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 chinglan.wang - * NULL - * [WiFi WPS]Can't switch to new AP via WPS PBC when there existing a connection to another AP. - * - * 11 09 2011 chinglan.wang - * NULL - * [WiFi direct]Can't make P2P connect via PBC. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 01 2011 chinglan.wang - * NULL - * Modify the Wi-Fi method of the flush TX queue when disconnect the AP. - * If disconnect the AP and flush all the data frame in the TX queue, WPS cannot do the 4-way handshake to connect to the AP.. - * - * 10 25 2011 wh.su - * [WCXRP00001059] [MT6620 Wi-Fi][Driver][P2P] Fixed sometimes data (1x) will not indicate to upper layer due ba check un-expect - * let the Rx BA accept even the sta not valid. - * - * 09 28 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * enlarge window size only by 4. - * - * 09 01 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * set rx window size as twice buffer size. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue. - * - * 08 03 2011 tsaiyuan.hsu - * [WCXRP00000900] [MT5931 Wi-Fi] Improve balance of TX and RX - * force window size at least 16. - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 26 2011 eddie.chen - * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter - * API for query the RX reorder queued packets counter. - * - * 07 07 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Add setEvent when free quota is updated. - * - * 07 05 2011 eddie.chen - * [WCXRP00000834] [MT6620 Wi-Fi][DRV] Send 1x packet when peer STA is in PS. - * Send 1x when peer STA is in PS. - * - * 05 31 2011 eddie.chen - * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931 - * Fix the QM quota in MT5931. - * - * 05 11 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Fix dest type when GO packet copying. - * - * 05 09 2011 yuche.tsai - * [WCXRP00000712] [Volunteer Patch][MT6620][Driver] Sending deauth issue when Hot spot is disabled. (GO is dissolved) - * Deauthentication frame is not bound to network active status. - * - * 05 09 2011 eddie.chen - * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet - * Check free number before copying broadcast packet. - * - * 04 14 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Check the SW RFB free. Fix the compile warning.. - * - * 04 12 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix the sta index in processing security frame - * Simple flow control for TC4 to avoid mgt frames for PS STA to occupy the TC4 - * Add debug message. - * - * 04 11 2011 yuche.tsai - * [WCXRP00000627] [Volunteer Patch][MT6620][Driver] Pending MMPUD of P2P Network may crash system issue. - * Fix kernel panic issue when MMPDU of P2P is pending in driver. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 03 28 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Fix Klockwork warning. - * - * 03 28 2011 eddie.chen - * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW - * Fix wmm parameters in beacon for BOW. - * - * 03 15 2011 eddie.chen - * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter - * Add sw debug counter for QM. - * - * 02 23 2011 eddie.chen - * [WCXRP00000463] [MT6620 Wi-Fi][FW/Driver][Hotspot] Cannot update WMM PS STA's partital bitmap - * Fix parsing WMM INFO and bmp delivery bitmap definition. - * - * 02 17 2011 eddie.chen - * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel - * 1) Chnage GetFrameAction decision when BSS is absent. - * 2) Check channel and resource in processing ProbeRequest - * - * 02 08 2011 eddie.chen - * [WCXRP00000426] [MT6620 Wi-Fi][FW/Driver] Add STA aging timeout and defualtHwRatein AP mode - * Add event STA agint timeout - * - * 01 27 2011 tsaiyuan.hsu - * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support - * add roaming fsm - * 1. not support 11r, only use strength of signal to determine roaming. - * 2. not enable CFG_SUPPORT_ROAMING until completion of full test. - * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw - * 4. assume that change of link quality in smooth way. - * - * 01 25 2011 yuche.tsai - * [WCXRP00000388] [Volunteer Patch][MT6620][Driver/Fw] change Station Type in station record. - * Change Station Type in Station Record, Modify MACRO definition for getting station type & network type index & Role. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Remove comments. - * - * 01 24 2011 eddie.chen - * [WCXRP00000385] [MT6620 Wi-Fi][DRV] Add destination decision for forwarding packets - * Add destination decision in AP mode. - * - * 01 14 2011 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out[WCXRP00000326] [MT6620][Wi-Fi][Driver] check in the binary format gl_sec.o.new instead of use change type!!! - * Allow 802.1x can be send even the net is not active due the drver / fw sync issue. - * - * 01 13 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix typo and compile error. - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * Fix WMM parameter condition for STA - * - * 01 12 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - * 1) Check Bss if support QoS before adding WMMIE - * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control - * - * 01 12 2011 george.huang - * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability - * Update MQM for WMM IE generation method - * - * 01 11 2011 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add per STA flow control when STA is in PS mode - * - * 01 03 2011 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * update prStaRec->fgIsUapsdSupported flag. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * Add WMM parameter for broadcast. - * - * 12 29 2010 eddie.chen - * [WCXRP00000322] Add WMM IE in beacon, -Add per station flow control when STA is in PS - - * 1) PS flow control event - * - * 2) WMM IE in beacon, assoc resp, probe resp - * - * 12 23 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * 1. update WMM IE parsing, with ASSOC REQ handling - * 2. extend U-APSD parameter passing from driver to FW - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * use the #14 and modify the add code for check MMPDU. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * only MMPDU not check the netActive flag. - * - * 10 14 2010 wh.su - * [WCXRP00000099] [MT6620 Wi-Fi] [Driver] workaround to let the de-authentication can be send out - * not check the netActive flag for mgmt . - * - * 10 04 2010 cp.wu - * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only - * remove ENUM_NETWORK_TYPE_T definitions - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 08 30 2010 yarco.yang - * NULL - * Fixed klockwork error message - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 10 2010 yarco.yang - * NULL - * Code refine - * - * 08 06 2010 yarco.yang - * NULL - * Update qmGetFrameAction() to allow P2P MGMT frame w/o STA_Record still can perform TX action - * - * 07 26 2010 cp.wu - * - * AIS-FSM FIX: return channel privilege even when the privilege is not granted yet - * QM: qmGetFrameAction() won't assert when corresponding STA-REC index is not found - * - * 07 20 2010 yarco.yang - * - * Add to SetEvent when BSS is from Absent to Present or STA from PS to Awake - * - * 07 16 2010 yarco.yang - * - * 1. Support BSS Absence/Presence Event - * 2. Support STA change PS mode Event - * 3. Support BMC forwarding for AP mode. - * - * 07 14 2010 yarco.yang - * - * 1. Remove CFG_MQM_MIGRATION - * 2. Add CMD_UPDATE_WMM_PARMS command - * - * 07 13 2010 yarco.yang - * - * [WPD00003849] - * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing - * - * 07 09 2010 yarco.yang - * - * [MT6620 and MT5931] SW Migration: Add ADDBA support - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 07 08 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * . - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Use fgInUse instead of fgIsValid for De-queue judgement - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * For MMPDU, STA_REC will be decided by caller module - * - * 07 06 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Add MGMT Packet type for HIF_TX_HEADER - * - * 06 29 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * replace g_rQM with Adpater->rQM - * - * 06 25 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * add API in que_mgt to retrieve sta-rec index for security frames. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Support CFG_MQM_MIGRATION flag - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined the debug msg - * - * 03 30 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * comment out one assertion which refer to undefined data member. - * - * 03 30 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled adaptive TC resource control - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port - * -* 03 17 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST) - * - * 03 11 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed buffer leak when processing BAR frames - * - * 03 02 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * For TX packets with STA_REC index = STA_REC_INDEX_NOT_FOUND, use TC5 - * - * 03 01 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Fixed STA_REC index determination bug (fgIsValid shall be checked) - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Refined function qmDetermineStaRecIndex() for BMCAST packets - * - * 02 25 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled multi-STA TX path with fairness - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled dynamically activating and deactivating STA_RECs - * - * 02 24 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Added code for dynamic activating and deactivating STA_RECs. - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the 802.1x path - * - * 01 13 2010 tehuang.liu - * [WPD00001943]Create WiFi test driver framework on WinXP - * Enabled the Burst_End Indication mechanism -** \main\maintrunk.MT6620WiFiDriver_Prj\13 2009-12-14 15:01:37 GMT MTK02468 -** Fixed casting for qmAddRxBaEntry() -** \main\maintrunk.MT6620WiFiDriver_Prj\12 2009-12-10 16:51:03 GMT mtk02752 -** remove SD1_SD3.. flag -** \main\maintrunk.MT6620WiFiDriver_Prj\11 2009-12-09 14:07:25 GMT MTK02468 -** Added RX buffer reordering functions -** \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-04 13:34:16 GMT MTK02468 -** Modified Flush Queue function to let queues be reinitialized -** \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-04 13:18:25 GMT MTK02468 -** Added flushing per-Type queues code -** \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-12-02 23:39:49 GMT MTK02468 -** Added Debug msgs and fixed incorrect assert -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-26 23:50:27 GMT MTK02468 -** Bug fixing (qmDequeueTxPackets local variable initialization) -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-26 09:39:25 GMT mtk02752 -** correct and surpress PREfast warning -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-11-23 22:10:55 GMT mtk02468 -** Used SD1_SD3_DATAPATH_INTEGRATION -** \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 22:02:30 GMT mtk02468 -** Initial version -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -OS_SYSTIME g_arMissTimeout[CFG_STA_REC_NUM][CFG_RX_MAX_BA_TID_NUM]; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -__KAL_INLINE__ VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentAvailableQuota, - IN UINT_8 ucTotalQuota - ); - -__KAL_INLINE__ VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for TX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInit( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 u4QueArrayIdx; - UINT_32 i; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmInit()\n"); -#if CFG_SUPPORT_QOS - prAdapter->rWifiVar.fgSupportQoS = TRUE; -#else - prAdapter->rWifiVar.fgSupportQoS = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_RX - prAdapter->rWifiVar.fgSupportAmpduRx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduRx = FALSE; -#endif - -#if CFG_SUPPORT_AMPDU_TX - prAdapter->rWifiVar.fgSupportAmpduTx = TRUE; -#else - prAdapter->rWifiVar.fgSupportAmpduTx = FALSE; -#endif - -#if CFG_SUPPORT_TSPEC - prAdapter->rWifiVar.fgSupportTspec = TRUE; -#else - prAdapter->rWifiVar.fgSupportTspec = FALSE; -#endif - -#if CFG_SUPPORT_UAPSD - prAdapter->rWifiVar.fgSupportUAPSD= TRUE; -#else - prAdapter->rWifiVar.fgSupportUAPSD = FALSE; -#endif - -#if CFG_SUPPORT_UL_PSMP - prAdapter->rWifiVar.fgSupportULPSMP = TRUE; -#else - prAdapter->rWifiVar.fgSupportULPSMP = FALSE; -#endif - - //4 <2> Initialize other TX queues (queues not in STA_RECs) - for(u4QueArrayIdx = 0; u4QueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; u4QueArrayIdx++){ - QUEUE_INITIALIZE(&(prQM->arTxQueue[u4QueArrayIdx])); - } - - //4 <3> Initialize the RX BA table and RX queues - /* Initialize the RX Reordering Parameters and Queues */ - for(u4QueArrayIdx = 0; u4QueArrayIdx < CFG_NUM_OF_RX_BA_AGREEMENTS; u4QueArrayIdx++){ - prQM->arRxBaTable[u4QueArrayIdx].fgIsValid = FALSE; - QUEUE_INITIALIZE(&(prQM->arRxBaTable[u4QueArrayIdx].rReOrderQue)); - prQM->arRxBaTable[u4QueArrayIdx].u2WinStart = 0xFFFF; - prQM->arRxBaTable[u4QueArrayIdx].u2WinEnd = 0xFFFF; - - prQM->arRxBaTable[u4QueArrayIdx].fgIsWaitingForPktWithSsn = FALSE; - - } - prQM->ucRxBaCount = 0; - - kalMemSet(&g_arMissTimeout, 0, sizeof(g_arMissTimeout)); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - //4 <4> Initialize TC resource control variables - for(i = 0; i < TC_NUM; i++){ - prQM->au4AverageQueLen[i] = 0; - } - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - -// ASSERT(prQM->u4TimeToAdjust && prQM->u4TimeToUpdateQueLen); - - prQM->au4CurrentTcResource[TC0_INDEX] = NIC_TX_BUFF_COUNT_TC0; - prQM->au4CurrentTcResource[TC1_INDEX] = NIC_TX_BUFF_COUNT_TC1; - prQM->au4CurrentTcResource[TC2_INDEX] = NIC_TX_BUFF_COUNT_TC2; - prQM->au4CurrentTcResource[TC3_INDEX] = NIC_TX_BUFF_COUNT_TC3; - prQM->au4CurrentTcResource[TC4_INDEX] = NIC_TX_BUFF_COUNT_TC4; /* Not adjustable (TX port 1)*/ - prQM->au4CurrentTcResource[TC5_INDEX] = NIC_TX_BUFF_COUNT_TC5; - - prQM->au4MinReservedTcResource[TC0_INDEX] = QM_MIN_RESERVED_TC0_RESOURCE; - prQM->au4MinReservedTcResource[TC1_INDEX] = QM_MIN_RESERVED_TC1_RESOURCE; - prQM->au4MinReservedTcResource[TC2_INDEX] = QM_MIN_RESERVED_TC2_RESOURCE; - prQM->au4MinReservedTcResource[TC3_INDEX] = QM_MIN_RESERVED_TC3_RESOURCE; - prQM->au4MinReservedTcResource[TC4_INDEX] = QM_MIN_RESERVED_TC4_RESOURCE; /* Not adjustable (TX port 1)*/ - prQM->au4MinReservedTcResource[TC5_INDEX] = QM_MIN_RESERVED_TC5_RESOURCE; - - - prQM->au4GuaranteedTcResource[TC0_INDEX] = QM_GUARANTEED_TC0_RESOURCE; - prQM->au4GuaranteedTcResource[TC1_INDEX] = QM_GUARANTEED_TC1_RESOURCE; - prQM->au4GuaranteedTcResource[TC2_INDEX] = QM_GUARANTEED_TC2_RESOURCE; - prQM->au4GuaranteedTcResource[TC3_INDEX] = QM_GUARANTEED_TC3_RESOURCE; - prQM->au4GuaranteedTcResource[TC4_INDEX] = QM_GUARANTEED_TC4_RESOURCE; - prQM->au4GuaranteedTcResource[TC5_INDEX] = QM_GUARANTEED_TC5_RESOURCE; - - prQM->fgTcResourcePostAnnealing = FALSE; - - ASSERT(QM_INITIAL_RESIDUAL_TC_RESOURCE < 64); -#endif - -#if QM_TEST_MODE - prQM->u4PktCount = 0; - -#if QM_TEST_FAIR_FORWARDING - - prQM->u4CurrentStaRecIndexToEnqueue = 0; - { - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - P_STA_RECORD_T prStaRec; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - prStaRec = &prAdapter->arStaRec[1]; - ASSERT(prStaRec); - - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->ucNetTypeIndex = NETWORK_TYPE_AIS_INDEX; - prStaRec->fgIsAp = TRUE; - COPY_MAC_ADDR((prStaRec)->aucMacAddr,aucMacAddr); - - } - -#endif - -#endif - -#if QM_FORWARDING_FAIRNESS -{ - UINT_32 i; - for (i=0; i < NUM_OF_PER_STA_TX_QUEUES; i++){ - prQM->au4ForwardCount[i] = 0; - prQM->au4HeadStaRecIndex[i] = 0; - } -} -#endif - -} - -#if QM_TEST_MODE -VOID -qmTestCases( - IN P_ADAPTER_T prAdapter - ) -{ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DbgPrint("QM: ** TEST MODE **\n"); - - if(QM_TEST_STA_REC_DETERMINATION){ - if(prAdapter->arStaRec[0].fgIsValid){ - prAdapter->arStaRec[0].fgIsValid = FALSE; - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - } - else{ - prAdapter->arStaRec[0].fgIsValid = TRUE; - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - } - } - - if(QM_TEST_STA_REC_DEACTIVATION){ - /* Note that QM_STA_REC_HARD_CODING shall be set to 1 for this test */ - - if(prAdapter->arStaRec[0].fgIsValid){ - - DbgPrint("QM: (Test) Deactivate STA_REC[0]\n"); - qmDeactivateStaRec(prAdapter,0); - } - else{ - - UINT_8 aucMacAddr[MAC_ADDR_LEN]; - - /* Irrelevant in case this STA is an AIS AP (see qmDetermineStaRecIndex()) */ - aucMacAddr[0] = 0x11; - aucMacAddr[1] = 0x22; - aucMacAddr[2] = 0xAA; - aucMacAddr[3] = 0xBB; - aucMacAddr[4] = 0xCC; - aucMacAddr[5] = 0xDD; - - DbgPrint("QM: (Test) Activate STA_REC[0]\n"); - qmActivateStaRec( - prAdapter, /* Adapter pointer */ - 0, /* STA_REC index from FW */ - TRUE, /* fgIsQoS */ - NETWORK_TYPE_AIS_INDEX, /* Network type */ - TRUE, /* fgIsAp */ - aucMacAddr /* MAC address */ - ); - } - } - - if(QM_TEST_FAIR_FORWARDING){ - if(prAdapter->arStaRec[1].fgIsValid){ - prQM->u4CurrentStaRecIndexToEnqueue ++; - prQM->u4CurrentStaRecIndexToEnqueue %= 2; - DbgPrint("QM: (Test) Switch to STA_REC[%ld]\n", prQM->u4CurrentStaRecIndexToEnqueue); - } - } - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Activate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* \param[in] fgIsQoS Set to TRUE if this is a QoS STA -* \param[in] pucMacAddr The MAC address of the STA -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmActivateStaRec( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec - ) -{ - - //4 <1> Deactivate first - ASSERT(prStaRec); - - if(prStaRec->fgIsValid){ /* The STA_REC has been activated */ - DBGLOG(QM, WARN, ("QM: (WARNING) Activating a STA_REC which has been activated \n")); - DBGLOG(QM, WARN, ("QM: (WARNING) Deactivating a STA_REC before re-activating \n")); - qmDeactivateStaRec(prAdapter, prStaRec->ucIndex); // To flush TX/RX queues and del RX BA agreements - } - - //4 <2> Activate the STA_REC - /* Init the STA_REC */ - prStaRec->fgIsValid = TRUE; - prStaRec->fgIsInPS = FALSE; - prStaRec->ucPsSessionID = 0xFF; - prStaRec->fgIsAp = (IS_AP_STA(prStaRec)) ? TRUE : FALSE;; - - /* Done in qmInit() or qmDeactivateStaRec() */ -#if 0 - /* At the beginning, no RX BA agreements have been established */ - for(i =0; iaprRxReorderParamRefTbl)[i] = NULL; - } -#endif - - DBGLOG(QM, INFO, ("QM: +STA[%ld]\n", prStaRec->ucIndex)); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the STA_REC -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmDeactivateStaRec( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - P_STA_RECORD_T prStaRec; - UINT_32 i; - P_MSDU_INFO_T prFlushedTxPacketList = NULL; - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - //4<1> Flush TX queues - prFlushedTxPacketList = qmFlushStaTxQueues(prAdapter, u4StaRecIdx); - - if(prFlushedTxPacketList){ - wlanProcessQueuedMsduInfo(prAdapter, prFlushedTxPacketList); - } - - //4 <2> Flush RX queues and delete RX BA agreements - for(i =0; i < CFG_RX_MAX_BA_TID_NUM; i++){ - /* Delete the RX BA entry with TID = i */ - qmDelRxBaEntry(prAdapter, (UINT_8)u4StaRecIdx, (UINT_8)i, FALSE); - } - - //4 <3> Deactivate the STA_REC - prStaRec->fgIsValid = FALSE; - prStaRec->fgIsInPS = FALSE; - - DBGLOG(QM, INFO, ("QM: -STA[%ld]\n", u4StaRecIdx)); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Deactivate a STA_REC -* -* \param[in] prAdapter Pointer to the Adapter instance -* \param[in] u4StaRecIdx The index of the network -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -VOID -qmFreeAllByNetType( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - - P_QUE_MGT_T prQM; - P_QUE_T prQue; - QUE_T rNeedToFreeQue; - QUE_T rTempQue; - P_QUE_T prNeedToFreeQue; - P_QUE_T prTempQue; - P_MSDU_INFO_T prMsduInfo; - - - prQM = &prAdapter->rQM; - prQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - - QUEUE_INITIALIZE(&rNeedToFreeQue); - QUEUE_INITIALIZE(&rTempQue); - - prNeedToFreeQue = &rNeedToFreeQue; - prTempQue = &rTempQue; - - QUEUE_MOVE_ALL(prTempQue, prQue); - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - while (prMsduInfo) { - - if(prMsduInfo->ucNetworkType == eNetworkTypeIdx) { - QUEUE_INSERT_TAIL(prNeedToFreeQue, (P_QUE_ENTRY_T)prMsduInfo); - } - else { - QUEUE_INSERT_TAIL(prQue, (P_QUE_ENTRY_T)prMsduInfo); - } - - QUEUE_REMOVE_HEAD(prTempQue, prMsduInfo, P_MSDU_INFO_T); - } - if(QUEUE_IS_NOT_EMPTY(prNeedToFreeQue)) { - wlanProcessQueuedMsduInfo(prAdapter, (P_MSDU_INFO_T)QUEUE_GET_HEAD(prNeedToFreeQue)); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush all TX queues -* -* \param[in] (none) -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushTxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_8 ucStaArrayIdx; - UINT_8 ucQueArrayIdx; - - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - - P_QUE_MGT_T prQM = &prAdapter->rQM; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushTxQueues()\n")); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - /* Concatenate all MSDU_INFOs in per-STA queues */ - for(ucStaArrayIdx = 0; ucStaArrayIdx < CFG_NUM_OF_STA_RECORD; ucStaArrayIdx++){ - - /* Always check each STA_REC when flushing packets no matter it is inactive or active */ - #if 0 - if(!prAdapter->arStaRec[ucStaArrayIdx].fgIsValid){ - continue; /* Continue to check the next STA_REC */ - } - #endif - - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prAdapter->arStaRec[ucStaArrayIdx].arTxQueue[ucQueArrayIdx]); - } - } - - /* Flush per-Type queues */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_TYPE_TX_QUEUES; ucQueArrayIdx++){ - - if(QUEUE_IS_EMPTY(&(prQM->arTxQueue[ucQueArrayIdx]))){ - continue; /* Continue to check the next TX queue of the same STA */ - } - - if(!prMsduInfoListHead){ - - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prQM->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = (P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prQM->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prQM->arTxQueue[ucQueArrayIdx]); - - } - - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, NULL); - } - - return prMsduInfoListHead; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush TX packets for a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* -* \return The flushed packets (in a list of MSDU_INFOs) -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmFlushStaTxQueues( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx - ) -{ - UINT_8 ucQueArrayIdx; - P_MSDU_INFO_T prMsduInfoListHead; - P_MSDU_INFO_T prMsduInfoListTail; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaTxQueues(%ld)\n", u4StaRecIdx)); - - ASSERT(u4StaRecIdx < CFG_NUM_OF_STA_RECORD); - - prMsduInfoListHead = NULL; - prMsduInfoListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Concatenate all MSDU_INFOs in TX queues of this STA_REC */ - for(ucQueArrayIdx = 0; ucQueArrayIdx < NUM_OF_PER_STA_TX_QUEUES; ucQueArrayIdx++){ - if(QUEUE_IS_EMPTY(&(prStaRec->arTxQueue[ucQueArrayIdx]))){ - continue; - } - - if(!prMsduInfoListHead){ - /* The first MSDU_INFO is found */ - prMsduInfoListHead =(P_MSDU_INFO_T) - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx]); - prMsduInfoListTail =(P_MSDU_INFO_T) - QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, - QUEUE_GET_HEAD(&prStaRec->arTxQueue[ucQueArrayIdx])); - - prMsduInfoListTail = - (P_MSDU_INFO_T)QUEUE_GET_TAIL(&prStaRec->arTxQueue[ucQueArrayIdx]); - } - - QUEUE_INITIALIZE(&prStaRec->arTxQueue[ucQueArrayIdx]); - - } - -#if 0 - if(prMsduInfoListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_MSDU_INFO(prMsduInfoListTail, nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx)); - } - else { - prMsduInfoListHead = nicGetPendingStaMMPDU(prAdapter, (UINT_8)u4StaRecIdx); - } -#endif - - return prMsduInfoListHead; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets -* -* \param[in] (none) -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - prSwRfbListHead = prSwRfbListTail = NULL; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushRxQueues()\n")); - - for(i =0; iarRxBaTable[i].rReOrderQue))){ - if(!prSwRfbListHead){ - - /* The first MSDU_INFO is found */ - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - else{ - /* Concatenate the MSDU_INFO list with the existing list */ - QM_TX_SET_NEXT_MSDU_INFO(prSwRfbListTail, - QUEUE_GET_HEAD(&(prQM->arRxBaTable[i].rReOrderQue))); - - prSwRfbListTail = (P_SW_RFB_T) - QUEUE_GET_TAIL(&(prQM->arRxBaTable[i].rReOrderQue)); - } - - QUEUE_INITIALIZE(&(prQM->arRxBaTable[i].rReOrderQue)); - - } - else{ - continue; - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Flush RX packets with respect to a particular STA -* -* \param[in] u4StaRecIdx STA_REC index -* \param[in] u4Tid TID -* -* \return The flushed packets (in a list of SW_RFBs) -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmFlushStaRxQueue( - IN P_ADAPTER_T prAdapter, - IN UINT_32 u4StaRecIdx, - IN UINT_32 u4Tid - ) -{ - //UINT_32 i; - P_SW_RFB_T prSwRfbListHead; - P_SW_RFB_T prSwRfbListTail; - P_RX_BA_ENTRY_T prReorderQueParm; - P_STA_RECORD_T prStaRec; - - DBGLOG(QM, TRACE, ("QM: Enter qmFlushStaRxQueues(%ld)\n", u4StaRecIdx)); - - prSwRfbListHead = prSwRfbListTail = NULL; - - prStaRec = &prAdapter->arStaRec[u4StaRecIdx]; - ASSERT(prStaRec); - - /* No matter whether this is an activated STA_REC, do flush */ -#if 0 - if(!prStaRec->fgIsValid){ - return NULL; - } -#endif - - /* Obtain the RX BA Entry pointer */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[u4Tid]); - - /* Note: For each queued packet, prCurrSwRfb->eDst equals RX_PKT_DESTINATION_HOST */ - if(prReorderQueParm){ - - if(QUEUE_IS_NOT_EMPTY(&(prReorderQueParm->rReOrderQue))){ - - prSwRfbListHead =(P_SW_RFB_T) - QUEUE_GET_HEAD(&(prReorderQueParm->rReOrderQue)); - prSwRfbListTail =(P_SW_RFB_T) - QUEUE_GET_TAIL(&(prReorderQueParm->rReOrderQue)); - - - QUEUE_INITIALIZE(&(prReorderQueParm->rReOrderQue)); - - } - } - - if(prSwRfbListTail){ - /* Terminate the MSDU_INFO list with a NULL pointer */ - QM_TX_SET_NEXT_SW_RFB(prSwRfbListTail, NULL); - } - return prSwRfbListHead; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enqueue TX packets -* -* \param[in] prMsduInfoListHead Pointer to the list of TX packets -* -* \return The freed packets, which are not enqueued -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmEnqueueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfoListHead - ) -{ - P_MSDU_INFO_T prMsduInfoReleaseList; - P_MSDU_INFO_T prCurrentMsduInfo; - P_MSDU_INFO_T prNextMsduInfo; - - P_STA_RECORD_T prStaRec; - P_QUE_T prTxQue; - QUE_T rNotEnqueuedQue; - - - UINT_8 ucPacketType; - UINT_8 ucTC; - P_QUE_MGT_T prQM = &prAdapter->rQM; - UINT_8 aucNextUP[WMM_AC_INDEX_NUM] = { 1 /* BEtoBK*/, 1 /*na*/, 0/*VItoBE*/ , 4 /*VOtoVI*/}; - - DBGLOG(QM, LOUD, ("Enter qmEnqueueTxPackets\n")); - - ASSERT(prMsduInfoListHead); - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - { - //UINT_32 i; - //4 <0> Update TC resource control related variables - /* Keep track of the queue length */ - if (--prQM->u4TimeToUpdateQueLen == 0){ - prQM->u4TimeToUpdateQueLen = QM_INIT_TIME_TO_UPDATE_QUE_LEN; - qmUpdateAverageTxQueLen(prAdapter); - } - } -#endif - - /* Push TX packets into STA_REC (for UNICAST) or prAdapter->rQM (for BMCAST) */ - prStaRec = NULL; - prMsduInfoReleaseList = NULL; - prCurrentMsduInfo = NULL; - QUEUE_INITIALIZE(&rNotEnqueuedQue); - prNextMsduInfo = prMsduInfoListHead; - - do{ - P_BSS_INFO_T prBssInfo; - BOOLEAN fgCheckACMAgain; - ENUM_WMM_ACI_T eAci = WMM_AC_BE_INDEX; - prCurrentMsduInfo = prNextMsduInfo; - prNextMsduInfo = QM_TX_GET_NEXT_MSDU_INFO(prCurrentMsduInfo); - ucTC = TC1_INDEX; - - //4 <1> Lookup the STA_REC index - /* The ucStaRecIndex will be set in this function */ - qmDetermineStaRecIndex(prAdapter, prCurrentMsduInfo); - ucPacketType = HIF_TX_PACKET_TYPE_DATA; - - DBGLOG(QM, LOUD , ("***** ucStaRecIndex = %d *****\n", - prCurrentMsduInfo->ucStaRecIndex)); - - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prCurrentMsduInfo->ucNetworkType]); - - if(IS_NET_ACTIVE(prAdapter, prCurrentMsduInfo->ucNetworkType)) { - - switch (prCurrentMsduInfo->ucStaRecIndex){ - case STA_REC_INDEX_BMCAST: - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucTC = TC5_INDEX; -#if 0 - if(prCurrentMsduInfo->ucNetworkType == NETWORK_TYPE_P2P_INDEX - && prCurrentMsduInfo->eSrc != TX_PACKET_MGMT - ) { - if(LINK_IS_EMPTY(&prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].rStaRecOfClientList)) { - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_AP_BORADCAST_DROP); - } - } -#endif - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_23); - break; - - case STA_REC_INDEX_NOT_FOUND: - ucTC = TC5_INDEX; - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - - /* if the packet is the forward type. the packet should be freed */ - DBGLOG(QM, TRACE, ("Forwarding packet but Sta is STA_REC_INDEX_NOT_FOUND\n")); - //prTxQue = &rNotEnqueuedQue; - } - prTxQue = &prQM->arTxQueue[TX_QUEUE_INDEX_NO_STA_REC]; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_24); - - break; - - default: - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prCurrentMsduInfo->ucStaRecIndex); - - ASSERT(prStaRec); - ASSERT(prStaRec->fgIsValid); - - if(prCurrentMsduInfo->ucUserPriority < 8) { - QM_DBG_CNT_INC(prQM, prCurrentMsduInfo->ucUserPriority + 15); - /* QM_DBG_CNT_15 */ /* QM_DBG_CNT_16 */ /* QM_DBG_CNT_17 */ /* QM_DBG_CNT_18 */ - /* QM_DBG_CNT_19 */ /* QM_DBG_CNT_20 */ /* QM_DBG_CNT_21 */ /* QM_DBG_CNT_22 */ - } - - eAci = WMM_AC_BE_INDEX; - do { - fgCheckACMAgain = FALSE; - if (prStaRec->fgIsQoS){ - switch(prCurrentMsduInfo->ucUserPriority){ - case 1: - case 2: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC0]; - ucTC = TC0_INDEX; - eAci = WMM_AC_BK_INDEX; - break; - case 0: - case 3: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - break; - case 4: - case 5: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC2]; - ucTC = TC2_INDEX; - eAci = WMM_AC_VI_INDEX; - break; - case 6: - case 7: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC3]; - ucTC = TC3_INDEX; - eAci = WMM_AC_VO_INDEX; - break; - default: - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - eAci = WMM_AC_BE_INDEX; - ASSERT(0); - break; - } - if(prBssInfo->arACQueParms[eAci].fgIsACMSet && eAci != WMM_AC_BK_INDEX) { - prCurrentMsduInfo->ucUserPriority = aucNextUP[eAci]; - fgCheckACMAgain = TRUE; - } - } - else{ - prTxQue = &prStaRec->arTxQueue[TX_QUEUE_INDEX_AC1]; - ucTC = TC1_INDEX; - } - } - while(fgCheckACMAgain); - - //LOG_FUNC ("QoS %u UP %u TC %u",prStaRec->fgIsQoS,prCurrentMsduInfo->ucUserPriority, ucTC); - - break; /*default */ - } /* switch (prCurrentMsduInfo->ucStaRecIndex) */ - - if(prCurrentMsduInfo->eSrc == TX_PACKET_FORWARDING) { - if(prTxQue->u4NumElem > 32) { - DBGLOG(QM, INFO, ("Drop the Packet for full Tx queue (forwarding) Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_FORWARD_OVERFLOW_DROP); - } - } - - } - else { - - DBGLOG(QM, INFO, ("Drop the Packet for inactive Bss %u\n", prCurrentMsduInfo->ucNetworkType)); - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_31); - prTxQue = &rNotEnqueuedQue; - TX_INC_CNT(&prAdapter->rTxCtrl,TX_INACTIVE_BSS_DROP); - } - - //4 <3> Fill the MSDU_INFO for constructing HIF TX header - - /* TODO: Fill MSDU_INFO according to the network type, - * EtherType, and STA status (for PS forwarding control). - */ - - /* Note that the Network Type Index and STA_REC index are determined in - * qmDetermineStaRecIndex(prCurrentMsduInfo). - */ - QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET( - prCurrentMsduInfo, /* MSDU_INFO ptr */ - ucTC, /* TC tag */ - ucPacketType, /* Packet Type */ - 0, /* Format ID */ - prCurrentMsduInfo->fgIs802_1x, /* Flag 802.1x */ - prCurrentMsduInfo->fgIs802_11, /* Flag 802.11 */ - 0, /* PAL LLH */ - 0, /* ACL SN */ - PS_FORWARDING_TYPE_NON_PS, /* PS Forwarding Type */ - 0 /* PS Session ID */ - ); - - //4 <4> Enqueue the packet - QUEUE_INSERT_TAIL(prTxQue, (P_QUE_ENTRY_T)prCurrentMsduInfo); - - -#if QM_TEST_MODE - if (++prQM->u4PktCount == QM_TEST_TRIGGER_TX_COUNT){ - prQM->u4PktCount = 0; - qmTestCases(prAdapter); - } - -#endif - - DBGLOG(QM, LOUD, ("Current queue length = %u\n", prTxQue->u4NumElem)); - }while(prNextMsduInfo); - - if( QUEUE_IS_NOT_EMPTY(&rNotEnqueuedQue) ) { - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rNotEnqueuedQue), NULL); - prMsduInfoReleaseList = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rNotEnqueuedQue); - } - - - return prMsduInfoReleaseList; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Determine the STA_REC index for a packet -* -* \param[in] prMsduInfo Pointer to the packet -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDetermineStaRecIndex( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - UINT_32 i; - - P_STA_RECORD_T prTempStaRec; - //P_QUE_MGT_T prQM = &prAdapter->rQM; - - prTempStaRec = NULL; - - ASSERT(prMsduInfo); - - //4 <1> DA = BMCAST - if (IS_BMCAST_MAC_ADDR(prMsduInfo->aucEthDestAddr)){ - /* For intrastructure mode and P2P (playing as a GC), BMCAST frames shall be sent to the AP. - * FW shall take care of this. The host driver is not able to distinguish these cases. */ - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_BMCAST; - DBGLOG(QM, LOUD, ("TX with DA = BMCAST\n")); - return; - } - - - //4 <2> Check if an AP STA is present - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - - if((prTempStaRec->ucNetTypeIndex == prMsduInfo->ucNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - - - - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for (i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if (prTempStaRec->fgIsValid){ - if (EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, prMsduInfo->aucEthDestAddr)){ - prMsduInfo->ucStaRecIndex = prTempStaRec->ucIndex; - return; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - prMsduInfo->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; - DBGLOG(QM, LOUD, ("QM: TX with STA_REC_INDEX_NOT_FOUND\n")); - - -#if (QM_TEST_MODE && QM_TEST_FAIR_FORWARDING) - prMsduInfo->ucStaRecIndex = (UINT_8)prQM->u4CurrentStaRecIndexToEnqueue; -#endif -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a STA_REC for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (TC0_INDEX to TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerStaQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucCurrentQuota, - IN UINT_8 ucTotalQuota - ) -{ - -#if QM_FORWARDING_FAIRNESS - UINT_32 i; /* Loop for */ - - PUINT_32 pu4HeadStaRecIndex; /* The Head STA index */ - PUINT_32 pu4HeadStaRecForwardCount; /* The total forwarded packets for the head STA */ - - P_STA_RECORD_T prStaRec; /* The current focused STA */ - P_BSS_INFO_T prBssInfo; /* The Bss for current focused STA */ - P_QUE_T prCurrQueue; /* The current TX queue to dequeue */ - P_MSDU_INFO_T prDequeuedPkt; /* The dequeued packet */ - - UINT_32 u4ForwardCount; /* To remember the total forwarded packets for a STA */ - UINT_32 u4MaxForwardCount; /* The maximum number of packets a STA can forward */ - UINT_32 u4Resource; /* The TX resource amount */ - - BOOLEAN fgChangeHeadSta; /* Whether a new head STA shall be determined at the end of the function */ - P_QUE_MGT_T prQM = &prAdapter->rQM; - - PUINT_8 pucFreeQuota; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - - if(!ucCurrentQuota){ - DBGLOG(TX, LOUD, ("@@@@@ TC = %u ucCurrentQuota = %u @@@@@\n", - ucTC, ucCurrentQuota)); - return; - } - - u4Resource = ucCurrentQuota; - - //4 <1> Determine the head STA - /* The head STA shall be an active STA */ - - pu4HeadStaRecIndex = &(prQM->au4HeadStaRecIndex[ucTC]); - pu4HeadStaRecForwardCount = &(prQM->au4ForwardCount[ucTC]); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Init Head STA = %u Resource = %u\n", - ucTC, *pu4HeadStaRecIndex, u4Resource)); - - - /* From STA[x] to STA[x+1] to STA[x+2] to ... to STA[x] */ - for (i=0; i < CFG_NUM_OF_STA_RECORD + 1; i++){ - prStaRec = &prAdapter->arStaRec[(*pu4HeadStaRecIndex)]; - ASSERT(prStaRec); - - /* Only Data frame (1x was not included) will be queued in */ - if (prStaRec->fgIsValid){ - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - /* Determine how many packets the head STA is allowed to send in a round */ - - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_25); - u4MaxForwardCount = ucTotalQuota; -#if CFG_ENABLE_WIFI_DIRECT - - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } /* fgIsInPS */ -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - /* Determine whether the head STA can continue to forward packets in this round */ - if((*pu4HeadStaRecForwardCount) < u4MaxForwardCount){ - break; - } - - } /* prStaRec->fgIsValid */ - else{ - /* The current Head STA has been deactivated, so search for a new head STA */ - prStaRec = NULL; - prBssInfo = NULL; - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - - /* Reset the forwarding count before searching (since this is for a new selected STA) */ - (*pu4HeadStaRecForwardCount) = 0; - } - } /* i < CFG_NUM_OF_STA_RECORD + 1 */ - - /* All STA_RECs are inactive, so exit */ - if (!prStaRec){ - /* Under concurrent, it is possible that there is no candidcated STA.*/ - //DBGLOG(TX, EVENT, ("All STA_RECs are inactive\n")); - return; - } - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Round Head STA = %lu\n", - ucTC, *pu4HeadStaRecIndex)); - - //4 <2> Dequeue packets from the head STA - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - prDequeuedPkt = NULL; - fgChangeHeadSta = FALSE; - - while(prCurrQueue){ - - -#if QM_DEBUG_COUNTER - - if(ucTC <= TC4_INDEX) { - if(QUEUE_IS_EMPTY(prCurrQueue)) { - QM_DBG_CNT_INC(prQM, ucTC); - /* QM_DBG_CNT_00 */ /* QM_DBG_CNT_01 */ /* QM_DBG_CNT_02 */ /* QM_DBG_CNT_03 */ /* QM_DBG_CNT_04 */ - } - if(u4Resource == 0) { - QM_DBG_CNT_INC(prQM, ucTC + 5); - /* QM_DBG_CNT_05 */ /* QM_DBG_CNT_06 */ /* QM_DBG_CNT_07 */ /* QM_DBG_CNT_08 */ /* QM_DBG_CNT_09 */ - } - if(((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)) { - QM_DBG_CNT_INC(prQM, ucTC + 10); - /* QM_DBG_CNT_10 */ /* QM_DBG_CNT_11 */ /* QM_DBG_CNT_12 */ /* QM_DBG_CNT_13 */ /* QM_DBG_CNT_14 */ - } - } -#endif - - - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if (QUEUE_IS_EMPTY(prCurrQueue) || ((*pu4HeadStaRecForwardCount) >= u4MaxForwardCount)){ - fgChangeHeadSta = TRUE; - break; - } - else if (u4Resource == 0){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); -#if DBG && 0 - LOG_FUNC("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - /* XXX: check all queues for STA */ - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - (*pu4HeadStaRecForwardCount) ++; - - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - - if (*pu4HeadStaRecForwardCount){ - DBGLOG(QM, LOUD, ("TC = %u Round Head STA = %lu, u4HeadStaRecForwardCount = %lu\n", ucTC, *pu4HeadStaRecIndex, (*pu4HeadStaRecForwardCount))); - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - - - //4 <3> Dequeue from the other STAs if there is residual TX resource - - /* Check all of the STAs to continue forwarding packets (including the head STA) */ - for (i= 0; i< CFG_NUM_OF_STA_RECORD; i++){ - /* Break in case no reasource is available */ - if (u4Resource == 0){ - break; - } - - /* The current head STA will be examined when i = CFG_NUM_OF_STA_RECORD-1 */ - prStaRec = &prAdapter->arStaRec[((*pu4HeadStaRecIndex) + i + 1) % CFG_NUM_OF_STA_RECORD]; - ASSERT(prStaRec); - - if (prStaRec->fgIsValid) { - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Sharing STA = %u Resource = %lu\n", - ucTC, prStaRec->ucIndex, u4Resource)); - - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - u4ForwardCount = 0; - u4MaxForwardCount = ucTotalQuota; - -#if CFG_ENABLE_WIFI_DIRECT - pucFreeQuota = NULL; - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - // TODO: Change the threshold in coorperation with the PS forwarding mechanism - // u4MaxForwardCount = ucTotalQuota; - /* Per STA flow control when STA in PS mode */ - /* The PHASE 1: only update from ucFreeQuota (now) */ - /* XXX The PHASE 2: Decide by ucFreeQuota and ucBmpDeliveryAC (per queue ) aucFreeQuotaPerQueue[] */ - /* NOTE: other method to set u4Resource */ - if(prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - - if( prStaRec->ucBmpTriggerAC & BIT(ucTC)) { - u4MaxForwardCount = prStaRec->ucFreeQuotaForDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForDelivery; - } - else { - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } - else { - ASSERT(prStaRec->ucFreeQuotaForDelivery == 0); - u4MaxForwardCount = prStaRec->ucFreeQuotaForNonDelivery; - pucFreeQuota = &prStaRec->ucFreeQuotaForNonDelivery; - } - - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ -#if CFG_ENABLE_WIFI_DIRECT - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(u4MaxForwardCount > prBssInfo->ucBssFreeQuota) { - u4MaxForwardCount = prBssInfo->ucBssFreeQuota; - } - } - -#endif /* CFG_ENABLE_WIFI_DIRECT */ - } /* prStaRec->fgIsValid */ - else{ - prBssInfo = NULL; - /* Invalid STA, so check the next STA */ - continue; - } - - while(prCurrQueue){ - /* Three cases to break: (1) No resource (2) No packets (3) Fairness */ - if ((u4Resource == 0) || QUEUE_IS_EMPTY(prCurrQueue) || (u4ForwardCount >= u4MaxForwardCount)){ - break; - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - -#if DBG && 0 - DBGLOG(QM, LOUD, ("Deq0 TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 )); - - DBGLOG(QM, LOUD,("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr))); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - - - ASSERT(prDequeuedPkt->ucTC == ucTC); - - if(!QUEUE_IS_EMPTY(prCurrQueue)) { - prDequeuedPkt->ucPsForwardingType = PS_FORWARDING_MORE_DATA_ENABLED; - } - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - u4Resource--; - u4ForwardCount ++; - -#if CFG_ENABLE_WIFI_DIRECT - /* XXX The PHASE 2: decrease from aucFreeQuotaPerQueue[] */ - if(prStaRec->fgIsInPS && (ucTC!=TC4_INDEX)) { - ASSERT(pucFreeQuota); - ASSERT(*pucFreeQuota>0); - if(*pucFreeQuota>0) { - *pucFreeQuota = *pucFreeQuota - 1; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - -#if CFG_ENABLE_WIFI_DIRECT - ASSERT(prBssInfo->ucNetTypeIndex == prStaRec->ucNetTypeIndex); - if(prBssInfo->fgIsNetAbsent && (ucTC!=TC4_INDEX)) { - if(prBssInfo->ucBssFreeQuota>0) { - prBssInfo->ucBssFreeQuota--; - } - } -#endif /* CFG_ENABLE_WIFI_DIRECT */ - - } - } - -#if QM_BURST_END_INFO_ENABLED - /* Let FW know which packet is the last one dequeued from the STA */ - if (u4ForwardCount){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } -#endif - } - - - if (fgChangeHeadSta){ - (*pu4HeadStaRecIndex) ++; - (*pu4HeadStaRecIndex) %= CFG_NUM_OF_STA_RECORD; - (*pu4HeadStaRecForwardCount) = 0; - DBGLOG(QM, LOUD, ("(Fairness) TID = %u Scheduled Head STA = %lu Left Resource = %lu\n", - ucTC, (*pu4HeadStaRecIndex), u4Resource)); - } - - -/***************************************************************************************/ -#else - UINT_8 ucStaRecIndex; - P_STA_RECORD_T prStaRec; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerStaQueues (TC = %u)\n", ucTC)); - - if (ucCurrentQuota == 0){ - return; - } - - //4 <1> Determine the queue index and the head STA - - /* The head STA */ - ucStaRecIndex = 0; /* TODO: Get the current head STA */ - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - /* The queue to pull out packets */ - ASSERT(ucTC == TC0_INDEX || ucTC == TC1_INDEX || - ucTC == TC2_INDEX || ucTC == TC3_INDEX || - ucTC == TC4_INDEX - ); - prCurrQueue = &prStaRec->arTxQueue[ucTC]; - - ucPktCount = ucCurrentQuota; - prDequeuedPkt = NULL; - - //4 <2> Dequeue packets for the head STA - while(TRUE){ - if (!(prStaRec->fgIsValid) || ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - - } - else{ - - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - //DbgPrint("QM: Remove Queue Head, TC= %d\n", prDequeuedPkt->ucTC); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - ucPktCount--; - } - } - - //DbgPrint("QM: Remaining number of queued packets = %d\n", prCurrQueue->u4NumElem); - -#if QM_BURST_END_INFO_ENABLED - if (prDequeuedPkt){ - prDequeuedPkt->fgIsBurstEnd = TRUE; - } - -#endif - - //4 <3> Update scheduling info - /* TODO */ - - //4 <4> Utilize the remainaing TX opportunities for non-head STAs - /* TODO */ -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets from a per-Type-based Queue for a particular TC -* -* \param[out] prQue The queue to put the dequeued packets -* \param[in] ucTC The TC index (Shall always be TC5_INDEX) -* \param[in] ucMaxNum The maximum amount of dequeued packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -qmDequeueTxPacketsFromPerTypeQueues( - IN P_ADAPTER_T prAdapter, - OUT P_QUE_T prQue, - IN UINT_8 ucTC, - IN UINT_8 ucMaxNum - ) -{ - //UINT_8 ucQueIndex; - //UINT_8 ucStaRecIndex; - P_BSS_INFO_T prBssInfo; - P_BSS_INFO_T parBssInfo; - P_QUE_T prCurrQueue; - UINT_8 ucPktCount; - P_MSDU_INFO_T prDequeuedPkt; - P_MSDU_INFO_T prBurstEndPkt; - QUE_T rMergeQue; - P_QUE_T prMergeQue; - P_QUE_MGT_T prQM; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPacketsFromPerTypeQueues (TC = %d, Max = %d)\n", ucTC, ucMaxNum)); - - /* TC5: Broadcast/Multicast data packets */ - ASSERT(ucTC == TC5_INDEX); - - if (ucMaxNum == 0){ - return; - } - - prQM = &prAdapter->rQM; - //4 <1> Determine the queue - - prCurrQueue = &prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST]; - ucPktCount = ucMaxNum; - prDequeuedPkt = NULL; - prBurstEndPkt = NULL; - - parBssInfo = prAdapter->rWifiVar.arBssInfo; - - QUEUE_INITIALIZE(&rMergeQue); - prMergeQue = &rMergeQue; - - //4 <2> Dequeue packets - while(TRUE){ - if(ucPktCount ==0 || QUEUE_IS_EMPTY(prCurrQueue)){ - break; - } - else{ - QUEUE_REMOVE_HEAD(prCurrQueue, prDequeuedPkt, P_MSDU_INFO_T); - ASSERT(prDequeuedPkt->ucTC == ucTC); - - ASSERT(prDequeuedPkt->ucNetworkType < NETWORK_TYPE_INDEX_NUM); - - prBssInfo = &parBssInfo[prDequeuedPkt->ucNetworkType]; - - if(IS_BSS_ACTIVE(prBssInfo)) { - if( !prBssInfo->fgIsNetAbsent){ - QUEUE_INSERT_TAIL(prQue,(P_QUE_ENTRY_T)prDequeuedPkt); - prBurstEndPkt = prDequeuedPkt; - ucPktCount--; - QM_DBG_CNT_INC(prQM, QM_DBG_CNT_26); -#if DBG && 0 - LOG_FUNC("DeqType TC %d queued %u net %u mac len %u len %u Type %u 1x %u 11 %u\n", - prDequeuedPkt->ucTC, - prCurrQueue->u4NumElem, - prDequeuedPkt->ucNetworkType, - prDequeuedPkt->ucMacHeaderLength, - prDequeuedPkt->u2FrameLength, - prDequeuedPkt->ucPacketType, - prDequeuedPkt->fgIs802_1x, - prDequeuedPkt->fgIs802_11 ); - - LOG_FUNC("Dest Mac: " MACSTR "\n", - MAC2STR(prDequeuedPkt->aucEthDestAddr)); - -#if LINUX - { - struct sk_buff *prSkb = (struct sk_buff *) prDequeuedPkt->prPacket; - dumpMemory8((PUINT_8)prSkb->data,prSkb->len); - } -#endif - -#endif - } - else { - QUEUE_INSERT_TAIL(prMergeQue,(P_QUE_ENTRY_T)prDequeuedPkt); - } - } - else { - QM_TX_SET_NEXT_MSDU_INFO(prDequeuedPkt, NULL); - wlanProcessQueuedMsduInfo(prAdapter,prDequeuedPkt); - } - } - } - - if(QUEUE_IS_NOT_EMPTY(prMergeQue)) { - QUEUE_CONCATENATE_QUEUES(prMergeQue, prCurrQueue); - QUEUE_MOVE_ALL(prCurrQueue, prMergeQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(prCurrQueue), NULL); - } - -#if QM_BURST_END_INFO_ENABLED - if (prBurstEndPkt){ - prBurstEndPkt->fgIsBurstEnd = TRUE; - } -#endif -} /* qmDequeueTxPacketsFromPerTypeQueues */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dequeue TX packets to send to HIF TX -* -* \param[in] prTcqStatus Info about the maximum amount of dequeued packets -* -* \return The list of dequeued TX packets -*/ -/*----------------------------------------------------------------------------*/ -P_MSDU_INFO_T -qmDequeueTxPackets( - IN P_ADAPTER_T prAdapter, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ - - INT_32 i; - P_MSDU_INFO_T prReturnedPacketListHead; - QUE_T rReturnedQue; - - DBGLOG(QM, LOUD, ("Enter qmDequeueTxPackets\n")); - - QUEUE_INITIALIZE(&rReturnedQue); - - prReturnedPacketListHead = NULL; - - /* TC0 to TC4: AC0~AC3, 802.1x (commands packets are not handled by QM) */ - for(i = TC4_INDEX; i >= TC0_INDEX; i--){ - DBGLOG(QM, LOUD, ("Dequeue packets from Per-STA queue[%u]\n", i)); - - qmDequeueTxPacketsFromPerStaQueues( - prAdapter, - &rReturnedQue, - (UINT_8)i, - prTcqStatus->aucFreeBufferCount[i], - prTcqStatus->aucMaxNumOfBuffer[i] - ); - - /* The aggregate number of dequeued packets */ - DBGLOG(QM, LOUD, ("DQA)[%u](%lu)\n", i, rReturnedQue.u4NumElem)); - } - - - /* TC5 (BMCAST or STA-NOT-FOUND packets) */ - qmDequeueTxPacketsFromPerTypeQueues( - prAdapter, - &rReturnedQue, - TC5_INDEX, - prTcqStatus->aucFreeBufferCount[TC5_INDEX] - ); - - DBGLOG(QM, LOUD, ("Current total number of dequeued packets = %u\n", rReturnedQue.u4NumElem)); - - if (QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - prReturnedPacketListHead = (P_MSDU_INFO_T)QUEUE_GET_HEAD(&rReturnedQue); - QM_TX_SET_NEXT_MSDU_INFO((P_MSDU_INFO_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return prReturnedPacketListHead; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Adjust the TC quotas according to traffic demands -* -* \param[out] prTcqAdjust The resulting adjustment -* \param[in] prTcqStatus Info about the current TC quotas and counters -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmAdjustTcQuotas ( - IN P_ADAPTER_T prAdapter, - OUT P_TX_TCQ_ADJUST_T prTcqAdjust, - IN P_TX_TCQ_STATUS_T prTcqStatus - ) -{ -#if QM_ADAPTIVE_TC_RESOURCE_CTRL - UINT_32 i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Must initialize */ - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - - //4 <1> If TC resource is not just adjusted, exit directly - if (!prQM->fgTcResourcePostAnnealing){ - return; - } - - //4 <2> Adjust TcqStatus according to the updated prQM->au4CurrentTcResource - else{ - INT_32 i4TotalExtraQuota = 0; - INT_32 ai4ExtraQuota[TC_NUM]; - BOOLEAN fgResourceRedistributed = TRUE; - - /* Obtain the free-to-distribute resource */ - for (i = 0; i < TC_NUM; i++){ - ai4ExtraQuota[i] = (INT_32)prTcqStatus->aucMaxNumOfBuffer[i] - (INT_32)prQM->au4CurrentTcResource[i]; - - if (ai4ExtraQuota[i] > 0){ /* The resource shall be reallocated to other TCs */ - if (ai4ExtraQuota[i] > prTcqStatus->aucFreeBufferCount[i]){ - ai4ExtraQuota[i] = prTcqStatus->aucFreeBufferCount[i]; - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* Distribute quotas to TCs which need extra resource according to prQM->au4CurrentTcResource */ - for (i = 0; i < TC_NUM; i++){ - if (ai4ExtraQuota[i] < 0){ - if ((-ai4ExtraQuota[i]) > i4TotalExtraQuota){ - ai4ExtraQuota[i] = (-i4TotalExtraQuota); - fgResourceRedistributed = FALSE; - } - - i4TotalExtraQuota += ai4ExtraQuota[i]; - prTcqAdjust->acVariation[i] = (INT_8)(-ai4ExtraQuota[i]); - } - } - - /* In case some TC is waiting for TX Done, continue to adjust TC quotas upon TX Done */ - prQM->fgTcResourcePostAnnealing = (!fgResourceRedistributed); - -#if QM_PRINT_TC_RESOURCE_CTRL - DBGLOG(QM, LOUD, ("QM: Curr Quota [0]=%u [1]=%u [2]=%u [3]=%u [4]=%u [5]=%u\n", - prTcqStatus->aucFreeBufferCount[0], - prTcqStatus->aucFreeBufferCount[1], - prTcqStatus->aucFreeBufferCount[2], - prTcqStatus->aucFreeBufferCount[3], - prTcqStatus->aucFreeBufferCount[4], - prTcqStatus->aucFreeBufferCount[5] - )); -#endif - } - -#else - UINT_32 i; - for (i = 0; i < TC_NUM; i++){ - prTcqAdjust->acVariation[i]= 0; - } - -#endif -} - -#if QM_ADAPTIVE_TC_RESOURCE_CTRL -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update the average TX queue length for the TC resource control mechanism -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateAverageTxQueLen( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 u4CurrQueLen, i, k; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //4 <1> Update the queue lengths for TC0 to TC3 (skip TC4) and TC5 */ - for (i = 0; i < NUM_OF_PER_STA_TX_QUEUES - 1; i++){ - u4CurrQueLen = 0; - - for (k = 0; k < CFG_NUM_OF_STA_RECORD; k++){ - prStaRec = &prAdapter->arStaRec[k]; - ASSERT(prStaRec); - - /* If the STA is activated, get the queue length */ - if (prStaRec->fgIsValid && - (!prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex].fgIsNetAbsent) - ) - { - - u4CurrQueLen += (prStaRec->arTxQueue[i].u4NumElem); - } - } - - if (prQM->au4AverageQueLen[i] == 0){ - prQM->au4AverageQueLen[i] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[i] -= (prQM->au4AverageQueLen[i] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[i] += (u4CurrQueLen); - } - - } - - /* Update the queue length for TC5 (BMCAST) */ - u4CurrQueLen = prQM->arTxQueue[TX_QUEUE_INDEX_BMCAST].u4NumElem; - - if (prQM->au4AverageQueLen[TC_NUM-1] == 0){ - prQM->au4AverageQueLen[TC_NUM-1] = (u4CurrQueLen << QM_QUE_LEN_MOVING_AVE_FACTOR); - } - else{ - prQM->au4AverageQueLen[TC_NUM-1] -= (prQM->au4AverageQueLen[TC_NUM-1] >> QM_QUE_LEN_MOVING_AVE_FACTOR); - prQM->au4AverageQueLen[TC_NUM-1] += (u4CurrQueLen); - } - - - //4 <2> Adjust TC resource assignment - /* Check whether it is time to adjust the TC resource assignment */ - if (--prQM->u4TimeToAdjustTcResource == 0){ - /* The last assignment has not been completely applied */ - if (prQM->fgTcResourcePostAnnealing){ - /* Upon the next qmUpdateAverageTxQueLen function call, do this check again */ - prQM->u4TimeToAdjustTcResource = 1; - } - - /* The last assignment has been applied */ - else{ - prQM->u4TimeToAdjustTcResource = QM_INIT_TIME_TO_ADJUST_TC_RSC; - qmReassignTcResource(prAdapter); - } - } - - /* Debug */ -#if QM_PRINT_TC_RESOURCE_CTRL - for (i=0; i= 100){ - DBGLOG(QM, LOUD, ("QM: QueLen [%ld %ld %ld %ld %ld %ld]\n", - QM_GET_TX_QUEUE_LEN(prAdapter, 0), - QM_GET_TX_QUEUE_LEN(prAdapter, 1), - QM_GET_TX_QUEUE_LEN(prAdapter, 2), - QM_GET_TX_QUEUE_LEN(prAdapter, 3), - QM_GET_TX_QUEUE_LEN(prAdapter, 4), - QM_GET_TX_QUEUE_LEN(prAdapter, 5) - )); - break; - } - } -#endif - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Assign TX resource for each TC according to TX queue length and current assignment -* -* \param (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmReassignTcResource( - IN P_ADAPTER_T prAdapter - ) -{ - INT_32 i4TotalResourceDemand = 0; - UINT_32 u4ResidualResource = 0; - UINT_32 i; - INT_32 ai4PerTcResourceDemand[TC_NUM]; - UINT_32 u4ShareCount = 0; - UINT_32 u4Share = 0 ; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - /* Note: After the new assignment is obtained, set prQM->fgTcResourcePostAnnealing to TRUE to - * start the TC-quota adjusting procedure, which will be invoked upon every TX Done - */ - - //4 <1> Determine the demands - /* Determine the amount of extra resource to fulfill all of the demands */ - for (i=0; iau4MinReservedTcResource[i] - prQM->au4CurrentTcResource[i]); - - /* If there are queued packets, allocate extra resource for the TC (for TCP consideration) */ - if (QM_GET_TX_QUEUE_LEN(prAdapter, i)){ - ai4PerTcResourceDemand[i] += QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY; - } - - i4TotalResourceDemand += ai4PerTcResourceDemand[i]; - } - - //4 <2> Case 1: Demand <= Total Resource - if (i4TotalResourceDemand <= 0){ - //4 <2.1> Satisfy every TC - for (i = 0; i < TC_NUM; i++){ - /* Skip TC4 (not adjustable) */ - if (i == TC4_INDEX) { - continue; - } - - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - } - - //4 <2.2> Share the residual resource evenly - u4ShareCount= (TC_NUM - 1); /* excluding TC4 */ - u4ResidualResource = (UINT_32)(-i4TotalResourceDemand); - u4Share = (u4ResidualResource/u4ShareCount); - - for (i=0; iau4CurrentTcResource[i] += u4Share; - - /* Every TC is fully satisfied */ - ai4PerTcResourceDemand[i] = 0; - - /* The left resource will be allocated to TC3 */ - u4ResidualResource -= u4Share; - } - - //4 <2.3> Allocate the left resource to TC3 (VO) - prQM->au4CurrentTcResource[TC3_INDEX] += (u4ResidualResource); - - } - - //4 <3> Case 2: Demand > Total Resource --> Guarantee a minimum amount of resource for each TC - else{ - u4ResidualResource = QM_INITIAL_RESIDUAL_TC_RESOURCE; - - //4 <3.1> Allocated resouce amount = minimum of (guaranteed, total demand) - for (i=0; iau4CurrentTcResource[i] + ai4PerTcResourceDemand[i] < prQM->au4GuaranteedTcResource[i]){ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource += (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - ai4PerTcResourceDemand[i] = 0; - } - - /* The demand can not be fulfilled with the guaranteed resource amount */ - else{ - ai4PerTcResourceDemand[i] -= (prQM->au4GuaranteedTcResource[i] - prQM->au4CurrentTcResource[i]); - prQM->au4CurrentTcResource[i] = prQM->au4GuaranteedTcResource[i]; - u4ShareCount++; - } - } - - //4 <3.2> Allocate the residual resource - do{ - /* If there is no resource left, exit directly */ - if (u4ResidualResource == 0){ - break; - } - - /* This shall not happen */ - if (u4ShareCount == 0){ - prQM->au4CurrentTcResource[TC1_INDEX] += u4ResidualResource; - DBGLOG(QM, ERROR, ("QM: (Error) u4ShareCount = 0\n")); - break; - } - - /* Share the residual resource evenly */ - u4Share = (u4ResidualResource / u4ShareCount); - if(u4Share){ - for (i=0; iau4CurrentTcResource[i] += u4Share; - u4ResidualResource -= u4Share; - ai4PerTcResourceDemand[i] -= u4Share; - } - else{ - prQM->au4CurrentTcResource[i] += ai4PerTcResourceDemand[i]; - u4ResidualResource -= ai4PerTcResourceDemand[i]; - ai4PerTcResourceDemand[i] = 0; - } - } - } - } - - /* By priority, allocate the left resource that is not divisible by u4Share */ - if (u4ResidualResource == 0){ - break; - } - - if (ai4PerTcResourceDemand[TC3_INDEX]){ /* VO */ - prQM->au4CurrentTcResource[TC3_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC2_INDEX]){ /* VI */ - prQM->au4CurrentTcResource[TC2_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC5_INDEX]){ /* BMCAST */ - prQM->au4CurrentTcResource[TC5_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC1_INDEX]){ /* BE */ - prQM->au4CurrentTcResource[TC1_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - if (ai4PerTcResourceDemand[TC0_INDEX]){ /* BK */ - prQM->au4CurrentTcResource[TC0_INDEX]++; - if (--u4ResidualResource == 0) { - break; - } - } - - /* Allocate the left resource */ - prQM->au4CurrentTcResource[TC3_INDEX] += u4ResidualResource; - - }while(FALSE); - } - - prQM->fgTcResourcePostAnnealing = TRUE; - -#if QM_PRINT_TC_RESOURCE_CTRL - /* Debug print */ - DBGLOG(QM, LOUD, ("QM: TC Rsc %ld %ld %ld %ld %ld %ld\n", - prQM->au4CurrentTcResource[0], - prQM->au4CurrentTcResource[1], - prQM->au4CurrentTcResource[2], - prQM->au4CurrentTcResource[3], - prQM->au4CurrentTcResource[4], - prQM->au4CurrentTcResource[5] - )); -#endif - -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/* RX-Related Queue Management */ -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief Init Queue Managment for RX -* -* \param[in] (none) -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmInitRxQueues( - IN P_ADAPTER_T prAdapter - ) -{ - //DbgPrint("QM: Enter qmInitRxQueues()\n"); - /* TODO */ -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle RX packets (buffer reordering) -* -* \param[in] prSwRfbListHead The list of RX packets -* -* \return The list of packets which are not buffered for reordering -*/ -/*----------------------------------------------------------------------------*/ -P_SW_RFB_T -qmHandleRxPackets( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfbListHead - ) -{ - -#if CFG_RX_REORDERING_ENABLED - //UINT_32 i; - P_SW_RFB_T prCurrSwRfb; - P_SW_RFB_T prNextSwRfb; - P_HIF_RX_HEADER_T prHifRxHdr; - QUE_T rReturnedQue; - PUINT_8 pucEthDestAddr; - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - - DEBUGFUNC("qmHandleRxPackets"); - - ASSERT(prSwRfbListHead); - - QUEUE_INITIALIZE(&rReturnedQue); - prNextSwRfb = prSwRfbListHead; - - do{ - prCurrSwRfb = prNextSwRfb; - prNextSwRfb = QM_RX_GET_NEXT_SW_RFB(prCurrSwRfb); - - prHifRxHdr = prCurrSwRfb->prHifRxHdr; // TODO: (Tehuang) Use macro to obtain the pointer - - /* TODO: (Tehuang) Check if relaying */ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Decide the Destination */ -#if CFG_RX_PKTS_DUMP - if (prAdapter->rRxCtrl.u4RxPktsDumpTypeMask & BIT(HIF_RX_PKT_TYPE_DATA)) { - DBGLOG(SW4, INFO, ("QM RX DATA: net %u sta idx %u wlan idx %u ssn %u tid %u ptype %u 11 %u\n", - HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr), - prHifRxHdr->ucStaRecIdx, - prCurrSwRfb->ucWlanIdx, - HIF_RX_HDR_GET_SN(prHifRxHdr), /* The new SN of the frame */ - HIF_RX_HDR_GET_TID(prHifRxHdr), - prCurrSwRfb->ucPacketType, - HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr))); - - DBGLOG_MEM8(SW4, TRACE, (PUINT_8)prCurrSwRfb->pvHeader, prCurrSwRfb->u2PacketLen); - } -#endif - - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - //DBGLOG_MEM8(QM, TRACE,prCurrSwRfb->pvHeader, 16); - // - - if( prAdapter->rRxCtrl.rFreeSwRfbList.u4NumElem - > (CFG_RX_MAX_PKT_NUM - CFG_NUM_OF_QM_RX_PKT_NUM) ) { - - if(IS_BSS_ACTIVE(prBssInfo)) { - if(OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode) { - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - else if(UNEQUAL_MAC_ADDR(prBssInfo->aucOwnMacAddr,pucEthDestAddr)) { - prCurrSwRfb->eDst = RX_PKT_DESTINATION_FORWARD; - /* TODO : need to check the dst mac is valid */ - /* If src mac is invalid, the packet will be freed in fw */ - } - } /* OP_MODE_ACCESS_POINT */ - } - else { - DBGLOG(QM, TRACE, ("Mark NULL the Packet for inactive Bss %u\n",ucNetTypeIdx)); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - else { - /* Dont not occupy other SW RFB */ - DBGLOG(QM, TRACE, ("Mark NULL the Packet for less Free Sw Rfb\n")); - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - continue; - } - - } - - /* BAR frame */ - if(HIF_RX_HDR_GET_BAR_FLAG(prHifRxHdr)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL; - qmProcessBarFrame(prAdapter, prCurrSwRfb, &rReturnedQue); - } - /* Reordering is not required for this packet, return it without buffering */ - else if(!HIF_RX_HDR_GET_REORDER_FLAG(prHifRxHdr)){ -#if 0 - if (!HIF_RX_HDR_GET_80211_FLAG(prHifRxHdr)){ - UINT_8 ucNetTypeIdx; - P_BSS_INFO_T prBssInfo; - - pucEthDestAddr = prCurrSwRfb->pvHeader; - ucNetTypeIdx = HIF_RX_HDR_GET_NETWORK_IDX(prHifRxHdr); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[ucNetTypeIdx]); - - if (IS_BMCAST_MAC_ADDR(pucEthDestAddr) && (OP_MODE_ACCESS_POINT == prBssInfo->eCurrentOPMode)){ - prCurrSwRfb->eDst = RX_PKT_DESTINATION_HOST_WITH_FORWARD; - } - } -#endif - QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T)prCurrSwRfb); - } - /* Reordering is required for this packet */ - else{ - /* If this packet should dropped or indicated to the host immediately, - * it should be enqueued into the rReturnedQue with specific flags. If - * this packet should be buffered for reordering, it should be enqueued - * into the reordering queue in the STA_REC rather than into the - * rReturnedQue. - */ - qmProcessPktWithReordering(prAdapter, prCurrSwRfb, &rReturnedQue); - - } - }while(prNextSwRfb); - - - /* The returned list of SW_RFBs must end with a NULL pointer */ - if(QUEUE_IS_NOT_EMPTY(&rReturnedQue)){ - QM_TX_SET_NEXT_MSDU_INFO((P_SW_RFB_T)QUEUE_GET_TAIL(&rReturnedQue), NULL); - } - - return (P_SW_RFB_T)QUEUE_GET_HEAD(&rReturnedQue); - -#else - - //DbgPrint("QM: Enter qmHandleRxPackets()\n"); - return prSwRfbListHead; - -#endif - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Reorder the received packet -* -* \param[in] prSwRfb The RX packet to process -* \param[out] prReturnedQue The queue for indicating packets -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmProcessPktWithReordering( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SeqNo; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - DEBUGFUNC("qmProcessPktWithReordering"); - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SN of the frame */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - //prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN, ("Reordering for an invalid STA_REC \n")); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - DBGLOG(QM, WARN,("Reordering for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - - /* Start to reorder packets */ - u4SeqNo = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - /* Debug */ - //DbgPrint("QM:(R)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - - /* Case 1: Fall within */ - if /* 0 - start - sn - end - 4095 */ - (((u4WinStart <= u4SeqNo) && (u4SeqNo <= u4WinEnd)) - /* 0 - end - start - sn - 4095 */ - || ((u4WinEnd < u4WinStart) && (u4WinStart <= u4SeqNo)) - /* 0 - sn - end - start - 4095 */ - || ((u4SeqNo <= u4WinEnd) && (u4WinEnd < u4WinStart))){ - - qmInsertFallWithinReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - /* Let the first received packet pass the reorder check */ - DBGLOG(QM, LOUD, ("QM:(A)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd)); - - prReorderQueParm->u2WinStart = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - - qmPopOutDueToFallWithin(prReorderQueParm, prReturnedQue); - } - /* Case 2: Fall ahead */ - else if - /* 0 - start - end - sn - (start+2048) - 4095 */ - (((u4WinStart < u4WinEnd) - && (u4WinEnd < u4SeqNo) - && (u4SeqNo < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - sn - (start+2048) - start - end - 4095 */ - || ((u4SeqNo < u4WinStart) - && (u4WinStart < u4WinEnd) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT))) - /* 0 - end - sn - (start+2048) - start - 4095 */ - || ((u4WinEnd < u4SeqNo) - && (u4SeqNo < u4WinStart) - && ((u4SeqNo + MAX_SEQ_NO_COUNT) < (u4WinStart + HALF_SEQ_NO_COUNT)))){ - - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - prReorderQueParm->fgIsWaitingForPktWithSsn = FALSE; - } -#endif - - qmInsertFallAheadReorderPkt(prSwRfb, prReorderQueParm, prReturnedQue); - - /* Advance the window after inserting a new tail */ - prReorderQueParm->u2WinEnd = (UINT_16)u4SeqNo; - prReorderQueParm->u2WinStart = - (((prReorderQueParm->u2WinEnd) - (prReorderQueParm->u2WinSize) + MAX_SEQ_NO_COUNT + 1) - % MAX_SEQ_NO_COUNT); - - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - - } - /* Case 3: Fall behind */ - else{ - -#if QM_RX_WIN_SSN_AUTO_ADVANCING - #if QM_RX_INIT_FALL_BEHIND_PASS - if(prReorderQueParm->fgIsWaitingForPktWithSsn){ - //?? prSwRfb->eDst = RX_PKT_DESTINATION_HOST; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(P)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - #endif -#endif - - /* An erroneous packet */ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - //DbgPrint("QM:(D)[%d](%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SeqNo, u4WinStart, u4WinEnd); - return; - } - - return; - -} - - -VOID -qmProcessBarFrame( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - OUT P_QUE_T prReturnedQue - ) -{ - - P_STA_RECORD_T prStaRec; - P_HIF_RX_HEADER_T prHifRxHdr; - P_RX_BA_ENTRY_T prReorderQueParm; - - UINT_32 u4SSN; - UINT_32 u4WinStart; - UINT_32 u4WinEnd; - P_QUE_T prReorderQue; - //P_SW_RFB_T prReorderedSwRfb; - - ASSERT(prSwRfb); - ASSERT(prReturnedQue); - ASSERT(prSwRfb->prHifRxHdr); - - prHifRxHdr = prSwRfb->prHifRxHdr; - prSwRfb->ucStaRecIdx = prHifRxHdr->ucStaRecIdx; - prSwRfb->u2SSN = HIF_RX_HDR_GET_SN(prHifRxHdr); /* The new SSN */ - prSwRfb->ucTid = (UINT_8)(HIF_RX_HDR_GET_TID(prHifRxHdr)); - - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - - /* Incorrect STA_REC index */ - if(prSwRfb->ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL STA_REC, ucStaRecIdx = %d\n", - prSwRfb->ucStaRecIdx)); - //ASSERT(0); - return; - } - - /* Check whether the STA_REC is activated */ - prStaRec = &(prAdapter->arStaRec[prSwRfb->ucStaRecIdx]); - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW sync issue. */ - DbgPrint("QM: (Warning) BAR for an invalid STA_REC \n"); - //ASSERT(0); - return; - } -#endif - - /* Check whether the BA agreement exists */ - prReorderQueParm = ((prStaRec->aprRxReorderParamRefTbl)[prSwRfb->ucTid]); - if(!prReorderQueParm){ - /* TODO: (Tehuang) Handle the Host-FW sync issue.*/ - DBGLOG(QM, WARN, ("QM: (Warning) BAR for a NULL ReorderQueParm \n")); - //ASSERT(0); - return; - } - - - u4SSN = (UINT_32)(prSwRfb->u2SSN); - prReorderQue = &(prReorderQueParm->rReOrderQue); - u4WinStart = (UINT_32)(prReorderQueParm->u2WinStart); - u4WinEnd = (UINT_32)(prReorderQueParm->u2WinEnd); - - if(qmCompareSnIsLessThan(u4WinStart,u4SSN)){ - prReorderQueParm->u2WinStart = (UINT_16)u4SSN; - prReorderQueParm->u2WinEnd = - ((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) - 1) % MAX_SEQ_NO_COUNT; - DBGLOG(QM, TRACE, ("QM:(BAR)[%d](%ld){%d,%d}\n", prSwRfb->ucTid, u4SSN, prReorderQueParm->u2WinStart, prReorderQueParm->u2WinEnd)); - qmPopOutDueToFallAhead(prReorderQueParm, prReturnedQue); - } - else{ - DBGLOG(QM, TRACE, ("QM:(BAR)(%d)(%ld){%ld,%ld}\n", prSwRfb->ucTid, u4SSN, u4WinStart, u4WinEnd)); - } -} - - - -VOID -qmInsertFallWithinReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prExaminedQueuedSwRfb; - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - prExaminedQueuedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - - /* There are no packets queued in the Reorder Queue */ - if(prExaminedQueuedSwRfb == NULL){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - } - - /* Determine the insert position */ - else{ - do{ - /* Case 1: Terminate. A duplicate packet */ - if(((prExaminedQueuedSwRfb->u2SSN) == (prSwRfb->u2SSN))){ - prSwRfb->eDst = RX_PKT_DESTINATION_NULL; - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prSwRfb); - return; - } - - /* Case 2: Terminate. The insert point is found */ - else if(qmCompareSnIsLessThan( - (prSwRfb->u2SSN),(prExaminedQueuedSwRfb->u2SSN))){ - break; - } - - /* Case 3: Insert point not found. Check the next SW_RFB in the Reorder Queue */ - else{ - prExaminedQueuedSwRfb = - (P_SW_RFB_T)(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prNext); - } - }while(prExaminedQueuedSwRfb); - - /* Update the Reorder Queue Parameters according to the found insert position */ - if(prExaminedQueuedSwRfb == NULL){ - /* The received packet shall be placed at the tail */ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - prReorderQue->prTail = (P_QUE_ENTRY_T)(prSwRfb); - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = (P_QUE_ENTRY_T)prExaminedQueuedSwRfb; - if(((P_QUE_ENTRY_T)prExaminedQueuedSwRfb) == (prReorderQue->prHead)){ - /* The received packet will become the head */ - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - (((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev)->prNext = (P_QUE_ENTRY_T)prSwRfb; - } - ((P_QUE_ENTRY_T)prExaminedQueuedSwRfb)->prPrev = (P_QUE_ENTRY_T)prSwRfb; - } - - prReorderQue->u4NumElem ++; - - } - -} - - -VOID -qmInsertFallAheadReorderPkt( - IN P_SW_RFB_T prSwRfb, - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_QUE_T prReorderQue; - ASSERT(prSwRfb); - ASSERT(prReorderQueParm); - ASSERT(prReturnedQue); - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* There are no packets queued in the Reorder Queue */ - if(QUEUE_IS_EMPTY(prReorderQue)){ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = NULL; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - prReorderQue->prHead = (P_QUE_ENTRY_T)prSwRfb; - } - else{ - ((P_QUE_ENTRY_T)prSwRfb)->prPrev = prReorderQue->prTail; - ((P_QUE_ENTRY_T)prSwRfb)->prNext = NULL; - (prReorderQue->prTail)->prNext = (P_QUE_ENTRY_T)(prSwRfb); - } - prReorderQue->prTail = (P_QUE_ENTRY_T)prSwRfb; - prReorderQue->u4NumElem ++; - -} - - -VOID -qmPopOutDueToFallWithin( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead, fgMissing; - OS_SYSTIME rCurrentTime, *prMissTimeout; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - fgMissing = FALSE; - rCurrentTime = 0; - prMissTimeout = &(g_arMissTimeout[prReorderQueParm->ucStaRecIdx][prReorderQueParm->ucTid]); - if ((*prMissTimeout)){ - fgMissing = TRUE; - GET_CURRENT_SYSTIME(&rCurrentTime); - } - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - /* SN > WinStart, break to update WinEnd */ - else{ - if ((fgMissing == TRUE) && - CHECK_FOR_TIMEOUT(rCurrentTime, (*prMissTimeout), - MSEC_TO_SYSTIME(QM_RX_BA_ENTRY_MISS_TIMEOUT_MS))) { - DBGLOG(QM, TRACE, ("QM:RX BA Timout Next Tid %d SSN %d\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2SSN)); - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - - fgMissing = FALSE; - } - else break; - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - if (QUEUE_IS_EMPTY(prReorderQue)){ - *prMissTimeout = 0; - } - else { - if (fgMissing == FALSE) { - GET_CURRENT_SYSTIME(prMissTimeout); - } - } - - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1 )% MAX_SEQ_NO_COUNT); - -} - -VOID -qmPopOutDueToFallAhead( - IN P_RX_BA_ENTRY_T prReorderQueParm, - OUT P_QUE_T prReturnedQue - ) -{ - P_SW_RFB_T prReorderedSwRfb; - P_QUE_T prReorderQue; - BOOLEAN fgDequeuHead; - - prReorderQue = &(prReorderQueParm->rReOrderQue); - - /* Check whether any packet can be indicated to the higher layer */ - while(TRUE){ - if(QUEUE_IS_EMPTY(prReorderQue)){ - break; - } - - /* Always examine the head packet */ - prReorderedSwRfb = (P_SW_RFB_T)QUEUE_GET_HEAD(prReorderQue); - fgDequeuHead = FALSE; - - /* SN == WinStart, so the head packet shall be indicated (advance the window) */ - if((prReorderedSwRfb->u2SSN) == (prReorderQueParm->u2WinStart)){ - - fgDequeuHead = TRUE; - prReorderQueParm->u2WinStart = - (((prReorderedSwRfb->u2SSN) + 1)% MAX_SEQ_NO_COUNT); - } - - /* SN < WinStart, so the head packet shall be indicated (do not advance the window) */ - else if(qmCompareSnIsLessThan( - (UINT_32)(prReorderedSwRfb->u2SSN), - (UINT_32)(prReorderQueParm->u2WinStart))){ - - fgDequeuHead = TRUE; - - } - - /* SN > WinStart, break to update WinEnd */ - else{ - break; - } - - - /* Dequeue the head packet */ - if(fgDequeuHead){ - - if(((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext == NULL){ - prReorderQue->prHead = NULL; - prReorderQue->prTail = NULL; - } - else{ - prReorderQue->prHead = ((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext; - (((P_QUE_ENTRY_T)prReorderedSwRfb)->prNext)->prPrev = NULL; - } - prReorderQue->u4NumElem --; - //DbgPrint("QM: [%d] %d (%d)\n", prReorderQueParm->ucTid, prReorderedSwRfb->u2PacketLen, prReorderedSwRfb->u2SSN); - QUEUE_INSERT_TAIL(prReturnedQue,(P_QUE_ENTRY_T)prReorderedSwRfb); - } - } - - /* After WinStart has been determined, update the WinEnd */ - prReorderQueParm->u2WinEnd = - (((prReorderQueParm->u2WinStart) + (prReorderQueParm->u2WinSize) -1)% MAX_SEQ_NO_COUNT); - -} - -BOOLEAN -qmCompareSnIsLessThan( - IN UINT_32 u4SnLess, - IN UINT_32 u4SnGreater - ) -{ - /* 0 <---> SnLess <--(gap>2048)--> SnGreater : SnLess > SnGreater */ - if((u4SnLess + HALF_SEQ_NO_COUNT) <= u4SnGreater){ /* Shall be <= */ - return FALSE; - } - - /* 0 <---> SnGreater <--(gap>2048)--> SnLess : SnLess < SnGreater */ - else if((u4SnGreater + HALF_SEQ_NO_COUNT) < u4SnLess){ - return TRUE; - } - - /* 0 <---> SnGreater <--(gap<2048)--> SnLess : SnLess > SnGreater */ - /* 0 <---> SnLess <--(gap<2048)--> SnGreater : SnLess < SnGreater */ - else{ - return (u4SnLess < u4SnGreater); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle Mailbox RX messages -* -* \param[in] prMailboxRxMsg The received Mailbox message from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleMailboxRxMessage( - IN MAILBOX_MSG_T prMailboxRxMsg - ) -{ - //DbgPrint("QM: Enter qmHandleMailboxRxMessage()\n"); - /* TODO */ -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle ADD RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxAddBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_ADDBA_T prEventRxAddBa; - P_STA_RECORD_T prStaRec; - UINT_32 u4Tid; - UINT_32 u4WinSize; - - DBGLOG(QM, INFO, ("QM:Event +RxBa\n")); - - prEventRxAddBa = (P_EVENT_RX_ADDBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxAddBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - DBGLOG(QM, INFO, ("QM: (Warning) RX ADDBA Event for a NULL STA_REC\n")); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - DBGLOG(QM, WARN, ("QM: (Warning) RX ADDBA Event for an invalid STA_REC\n")); - //ASSERT(0); - //return; - } -#endif - - u4Tid = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_TID_MASK) - >> BA_PARAM_SET_TID_MASK_OFFSET); - - u4WinSize = (((prEventRxAddBa->u2BAParameterSet)& BA_PARAM_SET_BUFFER_SIZE_MASK) - >> BA_PARAM_SET_BUFFER_SIZE_MASK_OFFSET); - - if(!qmAddRxBaEntry( - prAdapter, - prStaRec->ucIndex, - (UINT_8)u4Tid, - (prEventRxAddBa->u2BAStartSeqCtrl >> OFFSET_BAR_SSC_SN), - (UINT_16)u4WinSize)){ - - /* FW shall ensure the availabiilty of the free-to-use BA entry */ - DBGLOG(QM, ERROR, ("QM: (Error) qmAddRxBaEntry() failure\n")); - ASSERT(0); - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle DEL RX BA Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventRxDelBa( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_RX_DELBA_T prEventRxDelBa; - P_STA_RECORD_T prStaRec; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventRxDelBa = (P_EVENT_RX_DELBA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventRxDelBa->ucStaRecIdx); - - if(!prStaRec){ - /* Invalid STA_REC index, discard the event packet */ - //ASSERT(0); - return; - } - -#if 0 - if(!(prStaRec->fgIsValid)){ - /* TODO: (Tehuang) Handle the Host-FW synchronization issue */ - //ASSERT(0); - return; - } -#endif - - qmDelRxBaEntry(prAdapter, prStaRec->ucIndex, prEventRxDelBa->ucTid, TRUE); - -} - -P_RX_BA_ENTRY_T -qmLookupRxBaEntry( - IN P_ADAPTER_T prAdapter, - UINT_8 ucStaRecIdx, - UINT_8 ucTid - ) -{ - int i; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - //DbgPrint("QM: Enter qmLookupRxBaEntry()\n"); - - for(i=0; iarRxBaTable[i].fgIsValid){ - if((prQM->arRxBaTable[i].ucStaRecIdx == ucStaRecIdx) && - (prQM->arRxBaTable[i].ucTid == ucTid)){ - return &prQM->arRxBaTable[i]; - } - } - } - return NULL; -} - -BOOL -qmAddRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN UINT_16 u2WinStart, - IN UINT_16 u2WinSize - ) -{ - int i; - P_RX_BA_ENTRY_T prRxBaEntry = NULL; - P_STA_RECORD_T prStaRec; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - if(ucStaRecIdx >= CFG_NUM_OF_STA_RECORD){ - /* Invalid STA_REC index, discard the event packet */ - DBGLOG(QM, WARN, ("QM: (WARNING) RX ADDBA Event for a invalid ucStaRecIdx = %d\n", ucStaRecIdx)); - return FALSE; - } - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - - //if(!(prStaRec->fgIsValid)){ - // DbgPrint("QM: (WARNING) Invalid STA when adding an RX BA \n"); - // return FALSE; - //} - - //4 <1> Delete before adding - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - if(qmLookupRxBaEntry(prAdapter, ucStaRecIdx,ucTid)){ - qmDelRxBaEntry(prAdapter, ucStaRecIdx, ucTid, TRUE); /* prQM->ucRxBaCount-- */ - } - - //4 <2> Add a new BA entry - /* No available entry to store the BA agreement info. Retrun FALSE. */ - if(prQM->ucRxBaCount >= CFG_NUM_OF_RX_BA_AGREEMENTS){ - DBGLOG(QM, ERROR, ("QM: **failure** (limited resource, ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - else{ - /* Find the free-to-use BA entry */ - for(i=0; iarRxBaTable[i].fgIsValid){ - prRxBaEntry = &(prQM->arRxBaTable[i]); - prQM->ucRxBaCount++; - DBGLOG(QM, LOUD, ("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount)); - break; - } - } - - /* If a free-to-use entry is found, configure it and associate it with the STA_REC */ - u2WinSize += CFG_RX_BA_INC_SIZE; - if(prRxBaEntry){ - prRxBaEntry->ucStaRecIdx = ucStaRecIdx; - prRxBaEntry->ucTid = ucTid; - prRxBaEntry->u2WinStart = u2WinStart; - prRxBaEntry->u2WinSize= u2WinSize; - prRxBaEntry->u2WinEnd = ((u2WinStart + u2WinSize - 1) % MAX_SEQ_NO_COUNT); - prRxBaEntry->fgIsValid = TRUE; - prRxBaEntry->fgIsWaitingForPktWithSsn = TRUE; - - g_arMissTimeout[ucStaRecIdx][ucTid] = 0; - - DBGLOG(QM, INFO, ("QM: +RxBA(STA=%d TID=%d WinStart=%d WinEnd=%d WinSize=%d)\n", - ucStaRecIdx, ucTid, - prRxBaEntry->u2WinStart, prRxBaEntry->u2WinEnd, prRxBaEntry->u2WinSize)); - - /* Update the BA entry reference table for per-packet lookup */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = prRxBaEntry; - } - else{ - /* This shall not happen because FW should keep track of the usage of RX BA entries */ - DBGLOG(QM, ERROR, ("QM: **AddBA Error** (ucRxBaCount=%d)\n", prQM->ucRxBaCount)); - return FALSE; - } - } - - return TRUE; -} -VOID -qmDelRxBaEntry( - IN P_ADAPTER_T prAdapter, - IN UINT_8 ucStaRecIdx, - IN UINT_8 ucTid, - IN BOOLEAN fgFlushToHost - ) -{ - P_RX_BA_ENTRY_T prRxBaEntry; - P_STA_RECORD_T prStaRec; - P_SW_RFB_T prFlushedPacketList = NULL; - P_QUE_MGT_T prQM = &prAdapter->rQM; - - ASSERT(ucStaRecIdx < CFG_NUM_OF_STA_RECORD); - - prStaRec = &prAdapter->arStaRec[ucStaRecIdx]; - ASSERT(prStaRec); - -#if 0 - if(!(prStaRec->fgIsValid)){ - DbgPrint("QM: (WARNING) Invalid STA when deleting an RX BA \n"); - return; - } -#endif - - /* Remove the BA entry for the same (STA, TID) tuple if it exists */ - prRxBaEntry = prStaRec->aprRxReorderParamRefTbl[ucTid]; - - if(prRxBaEntry){ - - prFlushedPacketList = qmFlushStaRxQueue(prAdapter, ucStaRecIdx, ucTid); - - if(prFlushedPacketList){ - - if(fgFlushToHost) { - wlanProcessQueuedSwRfb(prAdapter, prFlushedPacketList); - } - else { - - P_SW_RFB_T prSwRfb; - P_SW_RFB_T prNextSwRfb; - prSwRfb = prFlushedPacketList; - - do { - prNextSwRfb = (P_SW_RFB_T)QUEUE_GET_NEXT_ENTRY((P_QUE_ENTRY_T)prSwRfb); - nicRxReturnRFB(prAdapter, prSwRfb); - prSwRfb = prNextSwRfb; - } while(prSwRfb); - - } - - - } -#if ((QM_TEST_MODE == 0) && (QM_TEST_STA_REC_DEACTIVATION == 0)) - /* Update RX BA entry state. Note that RX queue flush is not done here */ - prRxBaEntry->fgIsValid = FALSE; - prQM->ucRxBaCount--; - - /* Debug */ - #if 0 - DbgPrint("QM: ucRxBaCount=%d\n", prQM->ucRxBaCount); - #endif - - /* Update STA RX BA table */ - prStaRec->aprRxReorderParamRefTbl[ucTid] = NULL; -#endif - - DBGLOG(QM, INFO, ("QM: -RxBA(STA=%d,TID=%d)\n", ucStaRecIdx, ucTid)); - - } - - - /* Debug */ - #if CFG_HIF_RX_STARVATION_WARNING - { - P_RX_CTRL_T prRxCtrl; - prRxCtrl = &prAdapter->rRxCtrl; - DBGLOG(QM, TRACE, ("QM: (RX DEBUG) Enqueued: %d / Dequeued: %d\n", prRxCtrl->u4QueuedCnt, prRxCtrl->u4DequeuedCnt)); - } - #endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocReq ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_IE_WMM_INFO_T prIeWmmInfo; - - DEBUGFUNC("mqmProcessAssocReq"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - pucIEStart = pucIE; - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - if (!prAdapter->rWifiVar.fgSupportQoS) { - return; - } - - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_INFO: - { - - UINT_8 ucQosInfo; - UINT_8 ucQosInfoAC; - UINT_8 ucBmpAC; - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - prStaRec->fgIsWmmSupported = TRUE; - - prIeWmmInfo = (P_IE_WMM_INFO_T)pucIE; - ucQosInfo = prIeWmmInfo->ucQosInfo; - ucQosInfoAC = ucQosInfo & BITS(0, 3); - - prStaRec->fgIsUapsdSupported = ((ucQosInfoAC)? TRUE: FALSE) & - prAdapter->rWifiVar.fgSupportUAPSD; - - ucBmpAC = 0; - - if( ucQosInfoAC & WMM_QOS_INFO_VO_UAPSD) { - ucBmpAC |= BIT(ACI_VO); - } - if( ucQosInfoAC & WMM_QOS_INFO_VI_UAPSD) { - ucBmpAC |= BIT(ACI_VI); - } - if( ucQosInfoAC & WMM_QOS_INFO_BE_UAPSD) { - ucBmpAC |= BIT(ACI_BE); - } - if( ucQosInfoAC & WMM_QOS_INFO_BK_UAPSD) { - ucBmpAC |= BIT(ACI_BK); - } - - prStaRec->ucBmpTriggerAC = prStaRec->ucBmpDeliveryAC = ucBmpAC; - - prStaRec->ucUapsdSp = (ucQosInfo & WMM_QOS_INFO_MAX_SP_LEN_MASK) >> 5; - - } - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - - break; - - case ELEM_ID_HT_CAP: - /* Some client won't put the WMM IE if client is 802.11n */ - if (IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Req Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To process WMM related IEs in ASSOC_RSP -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessAssocRsp ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - PUINT_8 pucIEStart; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessAssocRsp"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - prStaRec->fgIsQoS = FALSE; - - pucIEStart = pucIE; - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgSupportQoS=%d)\n", - prStaRec->fgIsWmmSupported, prAdapter->rWifiVar.fgSupportQoS)); - - /* If the device does not support QoS or if WMM is not supported by the peer, exit.*/ - //if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported)) - if((!prAdapter->rWifiVar.fgSupportQoS)) - { - return; - } - - /* Determine whether QoS is enabled with the association */ - else{ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - prStaRec->fgIsQoS = TRUE; - break; - - default: - /* Other WMM QoS IEs. Ignore any */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS */ - break; - - case ELEM_ID_HT_CAP: - /* Some AP won't put the WMM IE if client is 802.11n */ - if ( IE_LEN(pucIE) == (sizeof(IE_HT_CAP_T) - 2)) { - prStaRec->fgIsQoS = TRUE; - } - break; - default: - break; - } - } - - /* Parse AC parameters and write to HW CRs */ - if((prStaRec->fgIsQoS) && (prStaRec->eStaType == STA_TYPE_LEGACY_AP)){ - mqmParseEdcaParameters(prAdapter, prSwRfb, pucIEStart, u2IELength, TRUE); - } - - DBGLOG(QM, TRACE, ("MQM: Assoc_Rsp Parsing (QoS Enabled=%d)\n", prStaRec->fgIsQoS)); - if(prStaRec->fgIsWmmSupported) { - nicQmUpdateWmmParms(prAdapter, prStaRec->ucNetTypeIndex); - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM Parameter IE (in BCN or Assoc_Rsp) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prSwRfb The received frame -* \param[in] pucIE The pointer to the first IE in the frame -* \param[in] u2IELength The total length of IEs in the frame -* \param[in] fgForceOverride TRUE: If EDCA parameters are found, always set to HW CRs. -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmParseEdcaParameters ( - IN P_ADAPTER_T prAdapter, - IN P_SW_RFB_T prSwRfb, - IN PUINT_8 pucIE, - IN UINT_16 u2IELength, - IN BOOLEAN fgForceOverride - ) -{ - P_STA_RECORD_T prStaRec; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - P_BSS_INFO_T prBssInfo; - - DEBUGFUNC("mqmParseEdcaParameters"); - - ASSERT(prSwRfb); - ASSERT(pucIE); - - prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - DBGLOG(QM, TRACE, ("QM: (fgIsWmmSupported=%d, fgIsQoS=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsQoS)); - - if((!prAdapter->rWifiVar.fgSupportQoS) || (!prStaRec->fgIsWmmSupported) || (!prStaRec->fgIsQoS)){ - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - /* Goal: Obtain the EDCA parameters */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - P_AC_QUE_PARMS_T prAcQueParams; - P_IE_WMM_PARAM_T prIeWmmParam; - ENUM_WMM_ACI_T eAci; - PUINT_8 pucWmmParamSetCount; - //int i; - - pucWmmParamSetCount = &(prBssInfo->ucWmmParamSetCount); - - prIeWmmParam = (P_IE_WMM_PARAM_T)pucIE; - - /* Check the Parameter Set Count to determine whether EDCA parameters have been changed */ - if(!fgForceOverride){ - if(*pucWmmParamSetCount == (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT)){ - break; /* Ignore the IE without updating HW CRs */ - } - } - - /* Update Parameter Set Count */ - *pucWmmParamSetCount = (prIeWmmParam->ucQosInfo & WMM_QOS_INFO_PARAM_SET_CNT); - - /* Update EDCA parameters */ - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - prAcQueParams = &prBssInfo->arACQueParms[eAci]; - mqmFillAcQueParam(prIeWmmParam, eAci, prAcQueParams); - - prAcQueParams->fgIsACMSet = - (prAcQueParams->u2Aifsn & WMM_ACIAIFSN_ACM) ? TRUE : FALSE; - prAcQueParams->u2Aifsn &= WMM_ACIAIFSN_AIFSN; - - DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - eAci, prAcQueParams->fgIsACMSet, - prAcQueParams->u2Aifsn, prAcQueParams->u2CWmin, - prAcQueParams->u2CWmax, prAcQueParams->u2TxopLimit)); - } - } - break; - - default: - /* Other WMM QoS IEs. Ignore */ - break; - } - - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - break; - default: - break; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used for parsing EDCA parameters specified in the WMM Parameter IE -* -* \param[in] prAdapter Adapter pointer -* \param[in] prIeWmmParam The pointer to the WMM Parameter IE -* \param[in] u4AcOffset The offset specifying the AC queue for parsing -* \param[in] prHwAcParams The parameter structure used to configure the HW CRs -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmFillAcQueParam( - IN P_IE_WMM_PARAM_T prIeWmmParam, - IN UINT_32 u4AcOffset, - OUT P_AC_QUE_PARMS_T prAcQueParams - ) -{ - prAcQueParams->u2Aifsn = *((PUINT_8)(&(prIeWmmParam->ucAciAifsn_BE)) + (u4AcOffset * 4)); - - prAcQueParams->u2CWmax = - BIT(((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMAX_MASK) - >> WMM_ECW_WMAX_OFFSET)-1; - - prAcQueParams->u2CWmin = - BIT((*((PUINT_8)(&(prIeWmmParam->ucEcw_BE)) + (u4AcOffset * 4))) & WMM_ECW_WMIN_MASK)-1; - - WLAN_GET_FIELD_16(((PUINT_8)(&(prIeWmmParam->aucTxopLimit_BE)) + (u4AcOffset * 4)),&(prAcQueParams->u2TxopLimit)); - - prAcQueParams->ucGuradTime = TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME; - - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To parse WMM/11n related IEs in scan results (only for AP peers) -* -* \param[in] prAdapter Adapter pointer -* \param[in] prScanResult The scan result which shall be parsed to obtain needed info -* \param[out] prStaRec The obtained info is stored in the STA_REC -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmProcessScanResult( - IN P_ADAPTER_T prAdapter, - IN P_BSS_DESC_T prScanResult, - OUT P_STA_RECORD_T prStaRec - ) -{ - PUINT_8 pucIE; - UINT_16 u2IELength; - UINT_16 u2Offset; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - DEBUGFUNC("mqmProcessScanResult"); - - ASSERT(prScanResult); - ASSERT(prStaRec); - - /* Reset the flag before parsing */ - prStaRec->fgIsWmmSupported = prStaRec->fgIsUapsdSupported = FALSE; - - if (!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - u2IELength = prScanResult->u2IELength; - pucIE = prScanResult->aucIEBuf; - - /* Goal: Determine whether the peer supports WMM/QoS and UAPSDU */ - IE_FOR_EACH(pucIE, u2IELength, u2Offset) { - switch (IE_ID(pucIE)) { - case ELEM_ID_WMM: - if((WMM_IE_OUI_TYPE(pucIE) == VENDOR_OUI_TYPE_WMM) && - (!kalMemCmp(WMM_IE_OUI(pucIE),aucWfaOui,3))){ - - switch(WMM_IE_OUI_SUBTYPE(pucIE)){ - case VENDOR_OUI_SUBTYPE_WMM_PARAM: - if(IE_LEN(pucIE) != 24){ - break; /* WMM Param IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_PARAM_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - case VENDOR_OUI_SUBTYPE_WMM_INFO: - if(IE_LEN(pucIE) != 7){ - break; /* WMM Info IE with a wrong length */ - } - else{ - prStaRec->fgIsWmmSupported = TRUE; - prStaRec->fgIsUapsdSupported = (((((P_IE_WMM_INFO_T)pucIE)->ucQosInfo) & WMM_QOS_INFO_UAPSD)? TRUE: FALSE); - } - break; - - default: - /* A WMM QoS IE that doesn't matter. Ignore it. */ - break; - } - } - /* else: VENDOR_OUI_TYPE_WPA, VENDOR_OUI_TYPE_WPS, ... (not cared) */ - - break; - - default: - /* A WMM IE that doesn't matter. Ignore it. */ - break; - } - } - DBGLOG(QM, LOUD, ("MQM: Scan Result Parsing (WMM=%d, UAPSD=%d)\n", - prStaRec->fgIsWmmSupported, prStaRec->fgIsUapsdSupported)); - -} - -UINT_8 -qmGetStaRecIdx( - IN P_ADAPTER_T prAdapter, - IN PUINT_8 pucEthDestAddr, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType - ) -{ - UINT_32 i; - P_STA_RECORD_T prTempStaRec; - - prTempStaRec = NULL; - - ASSERT(prAdapter); - - //4 <1> DA = BMCAST - if(IS_BMCAST_MAC_ADDR(pucEthDestAddr)){ - return STA_REC_INDEX_BMCAST; - } - - - //4 <2> Check if an AP STA is present - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if((prTempStaRec->ucNetTypeIndex == eNetworkType) - && (prTempStaRec->fgIsAp) - && (prTempStaRec->fgIsValid)){ - return prTempStaRec->ucIndex; - } - } - - //4 <3> Not BMCAST, No AP --> Compare DA (i.e., to see whether this is a unicast frame to a client) - for(i = 0; i < CFG_NUM_OF_STA_RECORD; i++){ - prTempStaRec = &(prAdapter->arStaRec[i]); - if(prTempStaRec->fgIsValid){ - if(EQUAL_MAC_ADDR(prTempStaRec->aucMacAddr, pucEthDestAddr)){ - return prTempStaRec->ucIndex; - } - } - } - - - //4 <4> No STA found, Not BMCAST --> Indicate NOT_FOUND to FW - return STA_REC_INDEX_NOT_FOUND; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Info IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmInfoIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_INFO_T prIeWmmInfo; - UINT_32 ucUapsd[] = { - WMM_QOS_INFO_BE_UAPSD, - WMM_QOS_INFO_BK_UAPSD, - WMM_QOS_INFO_VI_UAPSD, - WMM_QOS_INFO_VO_UAPSD - }; - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo; - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - - DEBUGFUNC("mqmGenerateWmmInfoIE"); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - ASSERT(prStaRec); - - if(prStaRec == NULL) { - return; - } - - if(!prStaRec->fgIsWmmSupported) { - return; - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prStaRec->ucNetTypeIndex]); - - prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo; - - prIeWmmInfo = (P_IE_WMM_INFO_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmInfo->ucId = ELEM_ID_WMM; - prIeWmmInfo->ucLength = ELEM_MAX_LEN_WMM_INFO; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmInfo->aucOui[0] = aucWfaOui[0]; - prIeWmmInfo->aucOui[1] = aucWfaOui[1]; - prIeWmmInfo->aucOui[2] = aucWfaOui[2]; - prIeWmmInfo->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmInfo->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_INFO; - - prIeWmmInfo->ucVersion = VERSION_WMM; - prIeWmmInfo->ucQosInfo = 0; - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ -// if(prAdapter->rWifiVar.fgSupportUAPSD){ - if(prAdapter->rWifiVar.fgSupportUAPSD && prStaRec->fgIsUapsdSupported){ - - UINT_8 ucQosInfo = 0; - UINT_8 i; - - - /* Static U-APSD setting */ - for(i = ACI_BE; i <= ACI_VO; i++){ - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC & BIT(i)){ - ucQosInfo |= (UINT_8)ucUapsd[i]; - } - } - - - if (prPmProfSetupInfo->ucBmpDeliveryAC & prPmProfSetupInfo->ucBmpTriggerAC) { - switch (prPmProfSetupInfo->ucUapsdSp) { - case WMM_MAX_SP_LENGTH_ALL: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_ALL; - break; - - case WMM_MAX_SP_LENGTH_2: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - - case WMM_MAX_SP_LENGTH_4: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_4; - break; - - case WMM_MAX_SP_LENGTH_6: - ucQosInfo |= WMM_QOS_INFO_MAX_SP_6; - break; - - default: - DBGLOG(QM, INFO, ("MQM: Incorrect SP length \n")); - ucQosInfo |= WMM_QOS_INFO_MAX_SP_2; - break; - } - } - prIeWmmInfo->ucQosInfo = ucQosInfo; - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmInfo); - -} - - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* @brief log2 calculation for CW -* -* @param[in] val value -* -* @return log2(val) -*/ -/*----------------------------------------------------------------------------*/ - -UINT_32 cwlog2(UINT_32 val) { - - UINT_32 n; - n=0; - - while (val >= 512) { n+= 9; val = val >> 9; } - while (val >= 16) { n+= 4; val >>= 4; } - while (val >= 2) { n+= 1; val >>= 1; } - return n; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Generate the WMM Param IE -* -* \param[in] prAdapter Adapter pointer -* @param prMsduInfo The TX MMPDU -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -mqmGenerateWmmParamIE ( - IN P_ADAPTER_T prAdapter, - IN P_MSDU_INFO_T prMsduInfo - ) -{ - P_IE_WMM_PARAM_T prIeWmmParam; - - UINT_8 aucWfaOui[] = VENDOR_OUI_WFA; - - UINT_8 aucACI[] = { - WMM_ACI_AC_BE, - WMM_ACI_AC_BK, - WMM_ACI_AC_VI, - WMM_ACI_AC_VO - }; - - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - ENUM_WMM_ACI_T eAci; - - DEBUGFUNC("mqmGenerateWmmParamIE"); - DBGLOG(QM, LOUD,("\n")); - - ASSERT(prMsduInfo); - - /* In case QoS is not turned off, exit directly */ - if(!prAdapter->rWifiVar.fgSupportQoS){ - return; - } - - prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); - - if(prStaRec) { - if(!prStaRec->fgIsQoS) { - return; - } - } - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prMsduInfo->ucNetworkType]); - - if(!prBssInfo->fgIsQBSS) { return; } - -#if 0 // 20120220 frog: update beacon content & change OP mode is a separate event for P2P network. - if( prBssInfo->eCurrentOPMode != OP_MODE_ACCESS_POINT && - prBssInfo->eCurrentOPMode != OP_MODE_BOW) - { - return; - } -#endif - - prIeWmmParam = (P_IE_WMM_PARAM_T) - ((PUINT_8) prMsduInfo->prPacket + prMsduInfo->u2FrameLength); - - prIeWmmParam->ucId = ELEM_ID_WMM; - prIeWmmParam->ucLength = ELEM_MAX_LEN_WMM_PARAM; - - /* WMM-2.2.1 WMM Information Element Field Values */ - prIeWmmParam->aucOui[0] = aucWfaOui[0]; - prIeWmmParam->aucOui[1] = aucWfaOui[1]; - prIeWmmParam->aucOui[2] = aucWfaOui[2]; - prIeWmmParam->ucOuiType = VENDOR_OUI_TYPE_WMM; - prIeWmmParam->ucOuiSubtype = VENDOR_OUI_SUBTYPE_WMM_PARAM; - - prIeWmmParam->ucVersion = VERSION_WMM; - prIeWmmParam->ucQosInfo = (prBssInfo->ucWmmParamSetCount & WMM_QOS_INFO_PARAM_SET_CNT); - - /* UAPSD intial queue configurations (delivery and trigger enabled)*/ - if(prAdapter->rWifiVar.fgSupportUAPSD){ - - prIeWmmParam->ucQosInfo |= WMM_QOS_INFO_UAPSD; - - } - - /* EDCA parameter */ - - for(eAci = 0; eAci < WMM_AC_INDEX_NUM; eAci++){ - - //DBGLOG(QM, LOUD, ("MQM: eAci = %d, ACM = %d, Aifsn = %d, CWmin = %d, CWmax = %d, TxopLimit = %d\n", - // eAci,prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet , - // prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmin, - // prBssInfo->arACQueParmsForBcast[eAci].u2CWmax, - // prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit)); - - *( ((PUINT_8)(&prIeWmmParam->ucAciAifsn_BE)) + (eAci <<2) ) = (UINT_8) (aucACI[eAci] - | (prBssInfo->arACQueParmsForBcast[eAci].fgIsACMSet ? WMM_ACIAIFSN_ACM:0 ) - | (prBssInfo->arACQueParmsForBcast[eAci].u2Aifsn & (WMM_ACIAIFSN_AIFSN))); -#if 1 - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (((prBssInfo->aucCWminLog2ForBcast[eAci] )) & WMM_ECW_WMIN_MASK) - | ((((prBssInfo->aucCWmaxLog2ForBcast[eAci] )) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#else - *( ((PUINT_8)(&prIeWmmParam->ucEcw_BE)) + (eAci <<2) ) = (UINT_8) (0 - | (cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmin + 1)) & WMM_ECW_WMIN_MASK) - | ((cwlog2((prBssInfo->arACQueParmsForBcast[eAci].u2CWmax + 1)) << WMM_ECW_WMAX_OFFSET ) & WMM_ECW_WMAX_MASK) - ); -#endif - - WLAN_SET_FIELD_16( ((PUINT_8)(prIeWmmParam->aucTxopLimit_BE)) + (eAci<<2) - , prBssInfo->arACQueParmsForBcast[eAci].u2TxopLimit); - - } - - /* Increment the total IE length for the Element ID and Length fields. */ - prMsduInfo->u2FrameLength += IE_SIZE(prIeWmmParam); - -} - - - - -ENUM_FRAME_ACTION_T -qmGetFrameAction( - IN P_ADAPTER_T prAdapter, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType, - IN UINT_8 ucStaRecIdx, - IN P_MSDU_INFO_T prMsduInfo, - IN ENUM_FRAME_TYPE_IN_CMD_Q_T eFrameType -) -{ - P_BSS_INFO_T prBssInfo; - P_STA_RECORD_T prStaRec; - P_WLAN_MAC_HEADER_T prWlanFrame; - UINT_16 u2TxFrameCtrl; - - DEBUGFUNC("qmGetFrameAction"); - -#if (NIC_TX_BUFF_COUNT_TC4 > 2) -#define QM_MGMT_QUUEUD_THRESHOLD 2 -#else -#define QM_MGMT_QUUEUD_THRESHOLD 1 -#endif - - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD <= (NIC_TX_BUFF_COUNT_TC4)); - DATA_STRUC_INSPECTING_ASSERT(QM_MGMT_QUUEUD_THRESHOLD > 0); - - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[eNetworkType]); - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, ucStaRecIdx); - - /* XXX Check BOW P2P AIS time ot set active */ - if (!IS_BSS_ACTIVE(prBssInfo)) { - if (eFrameType == FRAME_TYPE_MMPDU) { - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - if ((u2TxFrameCtrl == MAC_FRAME_DEAUTH) && (prMsduInfo->pfTxDoneHandler == NULL)) { - return FRAME_ACTION_TX_PKT; - } - - } - - DBGLOG(QM, INFO, ("Drop packets Action (Inactive %u).\n",prBssInfo->ucNetTypeIndex)); - TX_INC_CNT(&prAdapter->rTxCtrl, TX_INACTIVE_BSS_DROP); - return FRAME_ACTION_DROP_PKT; - } - - /* TODO Handle disconnect issue */ - - /* P2P probe Request frame */ - do { - if(eFrameType == FRAME_TYPE_MMPDU) { - ASSERT(prMsduInfo!=NULL); - prWlanFrame = (P_WLAN_MAC_HEADER_T) prMsduInfo->prPacket; - u2TxFrameCtrl = (prWlanFrame->u2FrameCtrl) & MASK_FRAME_TYPE; // Optimized for ARM - - if (u2TxFrameCtrl == MAC_FRAME_BEACON ) { - if( prBssInfo->fgIsNetAbsent) { - return FRAME_ACTION_DROP_PKT; - } - } - else if (u2TxFrameCtrl == MAC_FRAME_PROBE_RSP) { - if ((prBssInfo->fgIsNetAbsent) && (!p2pFuncIsChannelGrant(prAdapter))) { - break; - } - return FRAME_ACTION_TX_PKT; - } - else if (u2TxFrameCtrl == MAC_FRAME_DEAUTH) { - if( prBssInfo->fgIsNetAbsent) { - break; - } - DBGLOG(P2P, LOUD, ("Sending DEAUTH Frame\n")); - return FRAME_ACTION_TX_PKT; - } - /* MMPDU with prStaRec && fgIsInUse not check fgIsNetActive */ - else if(u2TxFrameCtrl == MAC_FRAME_ASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_AUTH - || u2TxFrameCtrl == MAC_FRAME_REASSOC_REQ - || u2TxFrameCtrl == MAC_FRAME_PROBE_REQ - || u2TxFrameCtrl == MAC_FRAME_ACTION) { - - if(prStaRec){ - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - return FRAME_ACTION_TX_PKT; - } - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - } - - } /* FRAME_TYPE_MMPDU */ - else if ((eFrameType == FRAME_TYPE_802_1X)){ - - if (!prStaRec){ - return FRAME_ACTION_TX_PKT; - } - else { - if (!prStaRec->fgIsInUse) { - return FRAME_ACTION_DROP_PKT; - } - if(prStaRec->fgIsInPS) { - if( nicTxGetResource (prAdapter, TC4_INDEX)>= QM_MGMT_QUUEUD_THRESHOLD) { - return FRAME_ACTION_TX_PKT; - } - else { - return FRAME_ACTION_QUEUE_PKT; - } - } - } - - } /* FRAME_TYPE_802_1X */ - else if ((!IS_BSS_ACTIVE(prBssInfo)) - || (!prStaRec) - || (!prStaRec->fgIsInUse)){ - return FRAME_ACTION_DROP_PKT; - } - }while(0); - - if (prBssInfo->fgIsNetAbsent){ - DBGLOG(QM, LOUD, ("Queue packets (Absent %u).\n",prBssInfo->ucNetTypeIndex)); - return FRAME_ACTION_QUEUE_PKT; - } - - if (prStaRec && prStaRec->fgIsInPS){ - DBGLOG(QM, LOUD, ("Queue packets (PS %u).\n",prStaRec->fgIsInPS)); - return FRAME_ACTION_QUEUE_PKT; - } - else { - switch (eFrameType){ - case FRAME_TYPE_802_1X: - if (!prStaRec->fgIsValid){ - return FRAME_ACTION_QUEUE_PKT; - } - break; - - case FRAME_TYPE_MMPDU: - break; - - default: - ASSERT(0); - } - } - - return FRAME_ACTION_TX_PKT; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle BSS change operation Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventBssAbsencePresence( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_BSS_ABSENCE_PRESENCE_T prEventBssStatus; - P_BSS_INFO_T prBssInfo; - BOOLEAN fgIsNetAbsentOld; - - prEventBssStatus = (P_EVENT_BSS_ABSENCE_PRESENCE_T)prEvent; - prBssInfo = &(prAdapter->rWifiVar.arBssInfo[prEventBssStatus->ucNetTypeIdx]); - fgIsNetAbsentOld = prBssInfo->fgIsNetAbsent; - prBssInfo->fgIsNetAbsent = prEventBssStatus->fgIsAbsent; - prBssInfo->ucBssFreeQuota = prEventBssStatus->ucBssFreeQuota; - - //DBGLOG(QM, TRACE, ("qmHandleEventBssAbsencePresence (ucNetTypeIdx=%d, fgIsAbsent=%d, FreeQuota=%d)\n", - // prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); -#if 0 - DBGLOG(QM, TRACE, ("NAF=%d,%d,%d\n", - prEventBssStatus->ucNetTypeIdx, prBssInfo->fgIsNetAbsent, prBssInfo->ucBssFreeQuota)); -#endif - if(!prBssInfo->fgIsNetAbsent) { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_27); - } - else { - QM_DBG_CNT_INC(&(prAdapter->rQM),QM_DBG_CNT_28); - } - /* From Absent to Present */ - if ((fgIsNetAbsentOld) && (!prBssInfo->fgIsNetAbsent)){ - kalSetEvent(prAdapter->prGlueInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Handle STA change PS mode Event from the FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaChangePsMode( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_CHANGE_PS_MODE_T prEventStaChangePsMode; - P_STA_RECORD_T prStaRec; - BOOLEAN fgIsInPSOld; - - //DbgPrint("QM:Event -RxBa\n"); - - prEventStaChangePsMode = (P_EVENT_STA_CHANGE_PS_MODE_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaChangePsMode->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec) { - - fgIsInPSOld = prStaRec->fgIsInPS; - prStaRec->fgIsInPS = prEventStaChangePsMode->fgIsInPs; - - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaChangePsMode->ucUpdateMode, - prEventStaChangePsMode->ucFreeQuota); - - //DBGLOG(QM, TRACE, ("qmHandleEventStaChangePsMode (ucStaRecIdx=%d, fgIsInPs=%d)\n", - // prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - - DBGLOG(QM, TRACE, ("PS=%d,%d\n", - prEventStaChangePsMode->ucStaRecIdx, prStaRec->fgIsInPS)); - - /* From PS to Awake */ - if ((fgIsInPSOld) && (!prStaRec->fgIsInPS)){ - kalSetEvent(prAdapter->prGlueInfo); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota Event from FW -* -* \param[in] prAdapter Adapter pointer -* \param[in] prEvent The event packet from the FW -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmHandleEventStaUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_WIFI_EVENT_T prEvent - ) -{ - P_EVENT_STA_UPDATE_FREE_QUOTA_T prEventStaUpdateFreeQuota; - P_STA_RECORD_T prStaRec; - - - prEventStaUpdateFreeQuota = (P_EVENT_STA_UPDATE_FREE_QUOTA_T)prEvent; - prStaRec = QM_GET_STA_REC_PTR_FROM_INDEX(prAdapter, prEventStaUpdateFreeQuota->ucStaRecIdx); - ASSERT(prStaRec); - - if(prStaRec) { - if(prStaRec->fgIsInPS) { - qmUpdateFreeQuota( - prAdapter, - prStaRec, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota); - - kalSetEvent(prAdapter->prGlueInfo); - } -#if 0 - DBGLOG(QM, TRACE, ("qmHandleEventStaUpdateFreeQuota (ucStaRecIdx=%d, ucUpdateMode=%d, ucFreeQuota=%d)\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); -#endif - - DBGLOG(QM, TRACE, ("UFQ=%d,%d,%d\n", - prEventStaUpdateFreeQuota->ucStaRecIdx, - prEventStaUpdateFreeQuota->ucUpdateMode, - prEventStaUpdateFreeQuota->ucFreeQuota)); - - - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update STA free quota -* -* \param[in] prStaRec the STA -* \param[in] ucUpdateMode the method to update free quota -* \param[in] ucFreeQuota the value for update -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -qmUpdateFreeQuota( - IN P_ADAPTER_T prAdapter, - IN P_STA_RECORD_T prStaRec, - IN UINT_8 ucUpdateMode, - IN UINT_8 ucFreeQuota - ) -{ - - UINT_8 ucFreeQuotaForNonDelivery; - UINT_8 ucFreeQuotaForDelivery; - - ASSERT(prStaRec); - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota orig ucFreeQuota=%d Mode %u New %u\n", - prStaRec->ucFreeQuota, ucUpdateMode, ucFreeQuota )); - - if(!prStaRec->fgIsInPS)return; - - switch (ucUpdateMode) { - case FREE_QUOTA_UPDATE_MODE_INIT: - case FREE_QUOTA_UPDATE_MODE_OVERWRITE: - prStaRec->ucFreeQuota = ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_INCREASE: - prStaRec->ucFreeQuota += ucFreeQuota; - break; - case FREE_QUOTA_UPDATE_MODE_DECREASE: - prStaRec->ucFreeQuota -= ucFreeQuota; - break; - default: - ASSERT(0); - } - - DBGLOG(QM, LOUD, ("qmUpdateFreeQuota new ucFreeQuota=%d)\n", - prStaRec->ucFreeQuota )); - - ucFreeQuota = prStaRec->ucFreeQuota; - - ucFreeQuotaForNonDelivery = 0; - ucFreeQuotaForDelivery = 0; - - if(ucFreeQuota > 0) { - if( prStaRec->fgIsQoS && prStaRec->fgIsUapsdSupported - /* && prAdapter->rWifiVar.fgSupportQoS - && prAdapter->rWifiVar.fgSupportUAPSD*/) { - /* XXX We should assign quota to aucFreeQuotaPerQueue[NUM_OF_PER_STA_TX_QUEUES] */ - - if(prStaRec->ucFreeQuotaForNonDelivery > 0 && prStaRec->ucFreeQuotaForDelivery > 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery == 0 && prStaRec->ucFreeQuotaForDelivery == 0) { - ucFreeQuotaForNonDelivery = ucFreeQuota>>1; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery; - } - else if(prStaRec->ucFreeQuotaForNonDelivery > 0) { - /* NonDelivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForNonDelivery = 2; - ucFreeQuotaForDelivery = ucFreeQuota - ucFreeQuotaForNonDelivery ; - } - else { - ucFreeQuotaForDelivery = ucFreeQuota; - ucFreeQuotaForNonDelivery = 0; - } - } - else if(prStaRec->ucFreeQuotaForDelivery > 0) { - /* Delivery is not busy */ - if(ucFreeQuota >= 3 ) { - ucFreeQuotaForDelivery = 2; - ucFreeQuotaForNonDelivery = ucFreeQuota - ucFreeQuotaForDelivery; - } - else { - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } - - } - else { - /* !prStaRec->fgIsUapsdSupported */ - ucFreeQuotaForNonDelivery = ucFreeQuota; - ucFreeQuotaForDelivery = 0; - } - } /* ucFreeQuota > 0 */ - - prStaRec->ucFreeQuotaForDelivery = ucFreeQuotaForDelivery; - prStaRec->ucFreeQuotaForNonDelivery = ucFreeQuotaForNonDelivery; - - DBGLOG(QM, LOUD, ("new QuotaForDelivery = %d QuotaForNonDelivery = %d\n", - prStaRec->ucFreeQuotaForDelivery, prStaRec->ucFreeQuotaForNonDelivery )); - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Return the reorder queued RX packets -* -* \param[in] (none) -* -* \return The number of queued RX packets -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -qmGetRxReorderQueuedBufferCount( - IN P_ADAPTER_T prAdapter - ) -{ - UINT_32 i, u4Total; - P_QUE_MGT_T prQM = &prAdapter->rQM; - u4Total = 0; - /* XXX The summation may impact the performance */ - for(i =0; iarRxBaTable[i].rReOrderQue.u4NumElem; -#if DBG && 0 - if(QUEUE_IS_EMPTY(&(prQM->arRxBaTable[i].rReOrderQue))){ - ASSERT(prQM->arRxBaTable[i].rReOrderQue == 0); - } -#endif - } - ASSERT(u4Total <=( CFG_NUM_OF_QM_RX_PKT_NUM*2)); - return u4Total; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/sources.ce b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/sources.ce deleted file mode 100755 index 4627c52191a3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/sources.ce +++ /dev/null @@ -1,11 +0,0 @@ -TARGETNAME=$(DRIVER_NAME)_nic_$(WINCEDEBUG)_51 -TARGETTYPE=LIBRARY - -INCLUDES=$(_INCLUDES_DIRS) - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER - -C_DEFINES=$(C_DEFINES) -DNDIS51_MINIPORT=1 -D_WIN2K_COMPAT_SLIST_USAGE=1 -CDEFINES=$(CDEFINES) -D$(DEVICE_ID) -DNDIS51_MINIPORT=1 $(_BUILD_MODULE_DEF) - -SOURCES= $(_NIC_FILES) diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/sources.ddk b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/sources.ddk deleted file mode 100755 index a233fee2a36f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/nic/sources.ddk +++ /dev/null @@ -1,11 +0,0 @@ -TARGETPATH=$(_LIB_PATH) -TARGETNAME=$(DRIVER_NAME)_nic_51 -TARGETTYPE=DRIVER_LIBRARY - -INCLUDES=$(_INCLUDES_DIRS) - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS51_MINIPORT=1 -C_DEFINES=$(C_DEFINES) -D_WIN2K_COMPAT_SLIST_USAGE=1 -C_DEFINES=$(C_DEFINES) -DNDIS_WDM=1 $(_BUILD_MODULE_DEF) - -SOURCES= $(_NIC_FILES) diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/dirs b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/dirs deleted file mode 100755 index 3dc42d39e648..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/dirs +++ /dev/null @@ -1,3 +0,0 @@ -DIRS= \ - windows - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_bow.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_bow.c deleted file mode 100755 index 4e3d2654bbb9..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_bow.c +++ /dev/null @@ -1,1413 +0,0 @@ -/* -** $Id: @(#) gl_bow.c@@ -*/ - -/*! \file gl_bow.c - \brief Main routines of Linux driver interface for 802.11 PAL (BT 3.0 + HS) - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_bow.c $ -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. - * - * 02 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00235223] [Rose][ICS][Cross Feature][AEE-IPANIC]The device reboot automatically and then the "KE" pops up after you turn on the "Airplane mode".(once) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered or when wlan GLUE_FLAG_HALT is set. - * - * This is a workaround for BOW driver robustness, happens only in ICS. - * - * Root cause should be fixed by CR [ALPS00231570] - * - * 02 03 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * [ALPS00118114] [Rose][ICS][Free Test][Bluetooth]The "KE" pops up after you turn on the airplane mode.(5/5) - * - * [Root Cause] - * PAL operates BOW char dev poll after BOW char dev is registered. - * - * [Solution] - * Rejects PAL char device operation after BOW is unregistered. - * - * Happens only in ICS. - * - * Notified PAL owener to reivew MTKBT/PAL closing BOW char dev procedure. - * - * [Side Effect] - * None. - * - * 01 16 2012 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support BOW for 5GHz band. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 25 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Modify ampc0 char device for major number 151 for all MT6575 projects. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * unlocked_ioctl returns as long instead of int. - * - * 07 28 2011 cp.wu - * [WCXRP00000884] [MT6620 Wi-Fi][Driver] Deprecate ioctl interface by unlocked ioctl - * migrate to unlocked ioctl interface - * - * 04 12 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add WMM IE for BOW initiator data. - * - * 04 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link disconnection event procedure for hotspot and change skb length check to 1514 bytes. - * - * 04 09 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Change Link connection event procedure and change skb length check to 1512 bytes. - * - * 03 27 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Support multiple physical link. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * replace alloc_netdev to alloc_netdev_mq for BoW - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Update net register and BOW for concurrent features. - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 cp.wu - * [WCXRP00000430] [MT6620 Wi-Fi][Firmware][Driver] Create V1.2 branch for MT6620E1 and MT6620E3 - * create V1.2 driver branch based on label MT6620_WIFI_DRIVER_V1_2_110209_1031 - * with BOW and P2P enabled as default - * - * 02 08 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Replace kfifo_get and kfifo_put with kfifo_out and kfifo_in. - * Update BOW get MAC status, remove returning event for AIS network type. - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 11 11 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix BoW timer assert issue. - * - * 09 14 2010 chinghwa.yu - * NULL - * Add bowRunEventAAAComplete. - * - * 09 14 2010 cp.wu - * NULL - * correct typo: POLLOUT instead of POLL_OUT - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 08 24 2010 chinghwa.yu - * NULL - * Update BOW for the 1st time. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * multiple BoW interfaces need to compare with peer address - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * fix kalIndicateBOWEvent. - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include "bss.h" - -#if CFG_ENABLE_BT_OVER_WIFI - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* @FIXME if there is command/event with payload length > 28 */ -#define MAX_BUFFER_SIZE (64) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_BOW_TEST - UINT_32 g_u4PrevSysTime = 0; - UINT_32 g_u4CurrentSysTime = 0; - UINT_32 g_arBowRevPalPacketTime[11]; -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -// forward declarations -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos); - -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg); - -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait); - -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp); - -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp); - - -// character file operations -static const struct file_operations mt6620_ampc_fops = { - //.owner = THIS_MODULE, - .read = mt6620_ampc_read, - .write = mt6620_ampc_write, - .unlocked_ioctl = mt6620_ampc_ioctl, - .poll = mt6620_ampc_poll, - .open = mt6620_ampc_open, - .release = mt6620_ampc_release, -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for character device to communicate with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == TRUE) { - return FALSE; - } - else { -#if 0 - // 1. allocate major number dynamically - - if(alloc_chrdev_region(&(prGlueInfo->rBowInfo.u4DeviceNumber), - 0, // first minor number - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - -#if 1 - -#if defined (CONFIG_AMPC_CDEV_NUM) - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(CONFIG_AMPC_CDEV_NUM, 0); -#else - prGlueInfo->rBowInfo.u4DeviceNumber = MKDEV(226, 0); -#endif - - if(register_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, - 1, // number - GLUE_BOW_DEVICE_NAME) !=0) - - return FALSE; -#endif - - // 2. spin-lock initialization - // spin_lock_init(&(prGlueInfo->rBowInfo.rSpinLock)); - - // 3. initialize kfifo -/* prGlueInfo->rBowInfo.prKfifo = kfifo_alloc(GLUE_BOW_KFIFO_DEPTH, - GFP_KERNEL, - &(prGlueInfo->rBowInfo.rSpinLock));*/ - if ((kfifo_alloc((struct kfifo *) &(prGlueInfo->rBowInfo.rKfifo), GLUE_BOW_KFIFO_DEPTH, GFP_KERNEL))) - goto fail_kfifo_alloc; - -// if(prGlueInfo->rBowInfo.prKfifo == NULL) - if(&(prGlueInfo->rBowInfo.rKfifo) == NULL) - goto fail_kfifo_alloc; - - // 4. initialize cdev - cdev_init(&(prGlueInfo->rBowInfo.cdev), &mt6620_ampc_fops); - // prGlueInfo->rBowInfo.cdev.owner = THIS_MODULE; - prGlueInfo->rBowInfo.cdev.ops = &mt6620_ampc_fops; - - // 5. add character device - if(cdev_add(&(prGlueInfo->rBowInfo.cdev), - prGlueInfo->rBowInfo.u4DeviceNumber, - 1)) - goto fail_cdev_add; - - - // 6. in queue initialization - init_waitqueue_head(&(prGlueInfo->rBowInfo.outq)); - - // 7. finish - prGlueInfo->rBowInfo.fgIsRegistered = TRUE; - return TRUE; - -fail_cdev_add: - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); -fail_kfifo_alloc: - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - return FALSE; - } -} /* end of glRegisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister character device for communicating with 802.11 PAL -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterAmpc ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->rBowInfo.fgIsRegistered == FALSE) { - return FALSE; - } - else { - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - - // 1. free netdev if necessary -#if CFG_BOW_SEPARATE_DATA_PATH - kalUninitBowDevice(prGlueInfo); -#endif - - // 2. removal of character device - cdev_del(&(prGlueInfo->rBowInfo.cdev)); - - // 3. free kfifo -// kfifo_free(prGlueInfo->rBowInfo.prKfifo); - kfifo_free(&(prGlueInfo->rBowInfo.rKfifo)); -// prGlueInfo->rBowInfo.prKfifo = NULL; -// prGlueInfo->rBowInfo.rKfifo = NULL; - - // 4. free device number - unregister_chrdev_region(prGlueInfo->rBowInfo.u4DeviceNumber, 1); - - return TRUE; - } -} /* end of glUnregisterAmpc */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief read handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_read( - IN struct file *filp, - IN char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - ssize_t retval; - - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // size check -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) >= size) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) >= size) - retval = size; - else - retval = kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); -// retval = kfifo_len(prGlueInfo->rBowInfo.prKfifo); - -// kfifo_get(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); -// kfifo_out(prGlueInfo->rBowInfo.prKfifo, aucBuffer, retval); - if (!(kfifo_out(&(prGlueInfo->rBowInfo.rKfifo), aucBuffer, retval))) - retval = -EIO; - - if(copy_to_user(buf, aucBuffer, retval)) - retval = -EIO; - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief write handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static ssize_t -mt6620_ampc_write( - IN struct file *filp, - OUT const char __user *buf, - IN size_t size, - IN OUT loff_t *ppos) -{ -#if CFG_BOW_TEST - UINT_8 i; -#endif - - UINT_8 aucBuffer[MAX_BUFFER_SIZE]; - P_AMPC_COMMAND prCmd; - P_GLUE_INFO_T prGlueInfo; - - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - if(size > MAX_BUFFER_SIZE) - return -EINVAL; - else if(copy_from_user(aucBuffer, buf, size)) - return -EIO; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP driver CMD buffer size : %d.\n", size)); - - for(i = 0; i < MAX_BUFFER_SIZE; i++) - { - DBGLOG(BOW, EVENT, ("AMP write content : 0x%x.\n", aucBuffer[i])); - } - - DBGLOG(BOW, EVENT, ("BoW CMD write.\n")); -#endif - - prCmd = (P_AMPC_COMMAND) aucBuffer; - - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("AMP write content payload length : %d.\n", prCmd->rHeader.u2PayloadLength)); - - DBGLOG(BOW, EVENT, ("AMP write content header length : %d.\n", sizeof(AMPC_COMMAND_HEADER_T))); - #endif - - // size check - if(prCmd->rHeader.u2PayloadLength + sizeof(AMPC_COMMAND_HEADER_T) != size) - { - #if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("Wrong CMD total length.\n")); - #endif - - return -EINVAL; - } - - if(wlanbowHandleCommand(prGlueInfo->prAdapter, prCmd) == WLAN_STATUS_SUCCESS) - return size; - else - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static long -mt6620_ampc_ioctl( - IN struct file *filp, - IN unsigned int cmd, - IN OUT unsigned long arg) -{ - int err = 0; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - // permission check - if(_IOC_DIR(cmd) & _IOC_READ) - err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd)); - else if (_IOC_DIR(cmd) & _IOC_WRITE) - err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd)); - if (err) - return -EFAULT; - - // no ioctl is implemented yet - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static unsigned int -mt6620_ampc_poll( - IN struct file *filp, - IN poll_table *wait) -{ - unsigned int retval; - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return -EFAULT; - } - - poll_wait(filp, &prGlueInfo->rBowInfo.outq, wait); - - retval = (POLLOUT | POLLWRNORM); // always accepts incoming command packets - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLOUT | POLLWRNORM, %x\n", retval)); - -// if(kfifo_len(prGlueInfo->rBowInfo.prKfifo) > 0) - if(kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)) > 0) - { - retval |= (POLLIN | POLLRDNORM); - -// DBGLOG(BOW, EVENT, ("mt6620_ampc_pol, POLLIN | POLLRDNORM, %x\n", retval)); - - } - - return retval; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief open handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_open( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - P_GL_BOW_INFO prBowInfo; - - prBowInfo = container_of(inodep->i_cdev, GL_BOW_INFO, cdev); - ASSERT(prBowInfo); - - prGlueInfo = container_of(prBowInfo, GLUE_INFO_T, rBowInfo); - ASSERT(prGlueInfo); - - // set-up private data - filp->private_data = prGlueInfo; - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief close handler for character device to communicate with 802.11 PAL -* -* \param[in] -* \return -* Follows Linux Character Device Interface -* -*/ -/*----------------------------------------------------------------------------*/ -static int -mt6620_ampc_release( - IN struct inode *inodep, - IN struct file *filp) -{ - P_GLUE_INFO_T prGlueInfo; - prGlueInfo = (P_GLUE_INFO_T)(filp->private_data); - - ASSERT(prGlueInfo); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to indicate event for Bluetooth over Wi-Fi -* -* \param[in] -* prGlueInfo -* prEvent -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ) -{ - size_t u4AvailSize, u4EventSize; - - ASSERT(prGlueInfo); - ASSERT(prEvent); - - // check device - if ((prGlueInfo->rBowInfo.fgIsRegistered == FALSE) || (prGlueInfo->u4Flag & GLUE_FLAG_HALT)) { - return; - } - -/* u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(prGlueInfo->rBowInfo.prKfifo);*/ - - u4AvailSize = - GLUE_BOW_KFIFO_DEPTH - kfifo_len(&(prGlueInfo->rBowInfo.rKfifo)); - - - u4EventSize = - prEvent->rHeader.u2PayloadLength + sizeof(AMPC_EVENT_HEADER_T); - - // check kfifo availability - if(u4AvailSize < u4EventSize) { - DBGLOG(BOW, EVENT, ("[bow] no space for event: %d/%d\n", - u4EventSize, - u4AvailSize)); - return; - } - - // queue into kfifo -// kfifo_put(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); -// kfifo_in(prGlueInfo->rBowInfo.prKfifo, (PUINT_8)prEvent, u4EventSize); - kfifo_in(&(prGlueInfo->rBowInfo.rKfifo), (PUINT_8)prEvent, u4EventSize); - wake_up_interruptible(&(prGlueInfo->rBowInfo.outq)); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState.\n")); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalGetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); - -#endif - - return prGlueInfo->rBowInfo.aeState[i]; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - IN UINT_8 aucPeerAddress[6] - ) -{ - UINT_8 i; - - ASSERT(prGlueInfo); - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState.\n")); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.arPeerAddr, %x:%x:%x:%x:%x:%x.\n", - prGlueInfo->rBowInfo.arPeerAddr[0], - prGlueInfo->rBowInfo.arPeerAddr[1], - prGlueInfo->rBowInfo.arPeerAddr[2], - prGlueInfo->rBowInfo.arPeerAddr[3], - prGlueInfo->rBowInfo.arPeerAddr[4], - prGlueInfo->rBowInfo.arPeerAddr[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress, %x:%x:%x:%x:%x:%x.\n", - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); -#endif - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) - { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr, aucPeerAddress) == 0) - { - prGlueInfo->rBowInfo.aeState[i] = eBowState; - -#if CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalSetBowState, aucPeerAddress %x, %x:%x:%x:%x:%x:%x.\n", i, - aucPeerAddress[0], - aucPeerAddress[1], - aucPeerAddress[2], - aucPeerAddress[3], - aucPeerAddress[4], - aucPeerAddress[5])); - - DBGLOG(BOW, EVENT, ("kalSetBowState, prGlueInfo->rBowInfo.aeState %x, %x.\n", i, prGlueInfo->rBowInfo.aeState[i])); -#endif - - return TRUE; - } - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi global state -* -* \param[in] -* prGlueInfo -* -* \return -* BOW_DEVICE_STATE_DISCONNECTED -* in case there is no BoW connection or -* BoW connection under initialization -* -* BOW_DEVICE_STATE_STARTING -* in case there is no BoW connection but -* some BoW connection under initialization -* -* BOW_DEVICE_STATE_CONNECTED -* in case there is any BoW connection available -*/ -/*----------------------------------------------------------------------------*/ -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - -//Henry, can reduce this logic to indentify state change - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_CONNECTED) { - return BOW_DEVICE_STATE_CONNECTED; - } - } - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_STARTING) { - return BOW_DEVICE_STATE_STARTING; - } - } - - return BOW_DEVICE_STATE_DISCONNECTED; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rBowInfo.u4FreqInKHz; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: Responder -* 1: Initiator -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - return prGlueInfo->rBowInfo.aucRole[i]; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* ucRole -* 0: Responder -* 1: Initiator -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ) -{ - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 1); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(EQUAL_MAC_ADDR(prGlueInfo->rBowInfo.arPeerAddr[i], rPeerAddr) == 0) { - prGlueInfo->rBowInfo.aucRole[i] = ucRole; //Henry, 0 : Responder, 1 : Initiator - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get available Bluetooth-over-Wi-Fi physical link number -* -* \param[in] -* prGlueInfo -* \return -* UINT_32 -* how many physical links are aviailable -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i; - UINT_8 ucLinkCount = 0; - - ASSERT(prGlueInfo); - - for(i = 0 ; i < CFG_BOW_PHYSICAL_LINK_NUM ; i++) { - if(prGlueInfo->rBowInfo.aeState[i] == BOW_DEVICE_STATE_DISCONNECTED) { - ucLinkCount++; - } - } - -#if 0//CFG_BOW_TEST - DBGLOG(BOW, EVENT, ("kalGetBowAvailablePhysicalLinkCount, ucLinkCount, %c.\n", ucLinkCount)); -#endif - - return ucLinkCount; -} - -#if CFG_BOW_SEPARATE_DATA_PATH - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowOpen( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -bowStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); - - /* 2. turn of carrier */ - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -}; - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is TX entry point of NET DEVICE. - * - * \param[in] prSkb Pointer of the sk_buff to be sent - * \param[in] prDev Pointer to struct net_device - * - * \retval NETDEV_TX_OK - on success. - * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - */ -/*----------------------------------------------------------------------------*/ -static int -bowHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - PUINT_8 aucLookAheadBuf = NULL; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - aucLookAheadBuf = prSkb->data; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if (!(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) || (prSkb->len > 1514)) - { - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Invalid BOW packet, skip tx\n")); -#endif - - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(BOW, TRACE, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Tx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Tx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n"); -#endif - -#if CFG_BOW_TEST -// g_u4CurrentSysTime = (OS_SYSTIME)kalGetTimeTick(); - - g_u4CurrentSysTime = (OS_SYSTIME) jiffies_to_usecs(jiffies); - - i = g_u4CurrentSysTime - g_u4PrevSysTime; - - if ( (i >> 10) > 0) - { - i = 10; - } - else - { - i = i >> 7; - } - - g_arBowRevPalPacketTime[i]++; - - g_u4PrevSysTime = g_u4CurrentSysTime; - -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_BOW_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} - - -// callbacks for netdevice -static const struct net_device_ops bow_netdev_ops = { - .ndo_open = bowOpen, - .ndo_stop = bowStop, - .ndo_start_xmit = bowHardStartXmit, -}; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief initialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* prDevName -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ) -{ - P_ADAPTER_T prAdapter; - P_GL_HIF_INFO_T prHif; - PARAM_MAC_ADDRESS rMacAddr; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == FALSE) { - prGlueInfo->rBowInfo.prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - - if (!prGlueInfo->rBowInfo.prDevHandler) { - return FALSE; - } - else { - /* 1. setup netdev */ - /* 1.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->rBowInfo.prDevHandler)) = prGlueInfo; - - /* 1.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] |= 0x2; // change to local administrated address - memcpy(prGlueInfo->rBowInfo.prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->rBowInfo.prDevHandler->perm_addr, prGlueInfo->rBowInfo.prDevHandler->dev_addr, ETH_ALEN); - - /* 1.3 register callback functions */ - prGlueInfo->rBowInfo.prDevHandler->netdev_ops = &bow_netdev_ops; - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->rBowInfo.prDevHandler, &(prHif->func->dev)); -#endif - - register_netdev(prGlueInfo->rBowInfo.prDevHandler); - - /* 2. net device initialize */ - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* 3. finish */ - prGlueInfo->rBowInfo.fgIsNetRegistered = TRUE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief uninitialize net device for Bluetooth-over-Wi-Fi -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - //ASSERT(prGlueInfo->rBowInfo.fgIsRegistered == TRUE); - - if(prGlueInfo->rBowInfo.fgIsNetRegistered == TRUE) { - - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - - if(netif_carrier_ok(prGlueInfo->rBowInfo.prDevHandler)) { - netif_carrier_off(prGlueInfo->rBowInfo.prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->rBowInfo.prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->rBowInfo.prDevHandler); - free_netdev(prGlueInfo->rBowInfo.prDevHandler); - prGlueInfo->rBowInfo.prDevHandler = NULL; - - return TRUE; - - } - else { - return FALSE; - } -} - -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_cfg80211.c deleted file mode 100755 index 8e0c97790366..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_cfg80211.c +++ /dev/null @@ -1,1640 +0,0 @@ -/* -** $Id: @(#) gl_cfg80211.c@@ -*/ - -/*! \file gl_cfg80211.c - \brief Main routines for supporintg MT6620 cfg80211 control interface - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_cfg80211.c $ -** -** 11 15 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** correct sequence. -** -** 08 30 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** check pending scan only by the pointer instead of fgIsRegistered flag. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -#if CFG_SUPPORT_WAPI - extern UINT_8 keyStructBuf[1024]; /* add/remove key shared buffer */ -#else - extern UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for change STA type between - * 1. Infrastructure Client (Non-AP STA) - * 2. Ad-Hoc IBSS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - ENUM_PARAM_OP_MODE_T eOpMode; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(type == NL80211_IFTYPE_STATION) { - eOpMode = NET_TYPE_INFRA; - } - else if(type == NL80211_IFTYPE_ADHOC) { - eOpMode = NET_TYPE_IBSS; - } - else { - return -EINVAL; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set infrastructure mode error:%lx\n", rStatus)); - } - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for adding key - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - PARAM_KEY_T rKey; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - INT_32 i4Rslt = -EINVAL; - UINT_32 u4BufLen = 0; - UINT_8 tmp1[8]; - UINT_8 tmp2[8]; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rKey, sizeof(PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - - if(mac_addr) { - COPY_MAC_ADDR(rKey.arBSSID, mac_addr); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - //rKey.u4KeyIndex |= BIT(31); //Enable BIT 31 will make tx use bc key id, should use pairwise key id 0 - } - - if(params->key) { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - if (params->key_len == 32) { - kalMemCopy(tmp1, ¶ms->key[16], 8); - kalMemCopy(tmp2, ¶ms->key[24], 8); - kalMemCopy(&rKey.aucKeyMaterial[16], tmp2, 8); - kalMemCopy(&rKey.aucKeyMaterial[24], tmp1, 8); - } - } - - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for removing key for specified STA - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - PARAM_REMOVE_KEY_T rRemoveKey; - UINT_32 u4BufLen = 0; - INT_32 i4Rslt = -EINVAL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - COPY_MAC_ADDR(rRemoveKey.arBSSID, mac_addr); - rRemoveKey.u4KeyIndex = key_index; - rRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - &rRemoveKey, - rRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("remove key error:%lx\n", rStatus)); - } - else { - i4Rslt = 0; - } - - return i4Rslt; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for setting default key on an interface - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for getting station information such as RSSI - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - PARAM_MAC_ADDRESS arBssid; - UINT_32 u4BufLen, u4Rate; - INT_32 i4Rssi; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(arBssid, MAC_ADDR_LEN); - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &u4BufLen); - - /* 1. check BSSID */ - if(UNEQUAL_MAC_ADDR(arBssid, mac)) { - /* wrong MAC address */ - DBGLOG(REQ, WARN, ("incorrect BSSID: ["MACSTR"] currently connected BSSID["MACSTR"]\n", - MAC2STR(mac), MAC2STR(arBssid))); - return -ENOENT; - } - - /* 2. fill TX rate */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - sinfo->filled |= STATION_INFO_TX_BITRATE; - sinfo->txrate.legacy = u4Rate / 1000; /* convert from 100bps to 100kbps */ - } - - if(prGlueInfo->eParamMediaStateIndicated != PARAM_MEDIA_STATE_CONNECTED) { - /* not connected */ - DBGLOG(REQ, WARN, ("not yet connected\n")); - } - else { - /* 3. fill RSSI */ - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("unable to retrieve link speed\n")); - } - else { - sinfo->filled |= STATION_INFO_SIGNAL; - //in the cfg80211 layer, the signal is a signed char variable. - if(i4Rssi < -128) - sinfo->signal = -128; - else - sinfo->signal = i4Rssi; /* dBm */ - } - } - - sinfo->rx_packets = prGlueInfo->rNetDevStats.rx_packets; - sinfo->filled |= STATION_INFO_TX_PACKETS; - sinfo->tx_packets = prGlueInfo->rNetDevStats.tx_packets; - sinfo->filled |= STATION_INFO_TX_FAILED; - -#if 1 - { - WLAN_STATUS rStatus; - UINT_32 u4XmitError = 0; -// UINT_32 u4XmitOk = 0; -// UINT_32 u4RecvError = 0; -// UINT_32 u4RecvOk = 0; -// UINT_32 u4BufLen; - - /* @FIX ME: need a more clear way to do this */ - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitError, - &u4XmitError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - - prGlueInfo->rNetDevStats.tx_errors = u4XmitError; - - } -#else - prGlueInfo->rNetDevStats.tx_errors = 0; -#endif - - sinfo->tx_failed = prGlueInfo->rNetDevStats.tx_errors; - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to do a scan - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PARAM_SCAN_REQUEST_EXT_T rScanRequest; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - kalMemZero(&rScanRequest, sizeof(PARAM_SCAN_REQUEST_EXT_T)); - /* check if there is any pending scan not yet finished */ - if(prGlueInfo->prScanRequest != NULL) { - return -EBUSY; - } - - if(request->n_ssids == 0) { - rScanRequest.rSsid.u4SsidLen = 0; - } - else if(request->n_ssids == 1) { - COPY_SSID(rScanRequest.rSsid.aucSsid, rScanRequest.rSsid.u4SsidLen, request->ssids[0].ssid, request->ssids[0].ssid_len); - } - else { - return -EINVAL; - } - - if(request->ie_len > 0) { - rScanRequest.u4IELength = request->ie_len; - rScanRequest.pucIE = (PUINT_8)(request->ie); - } - else { - rScanRequest.u4IELength = 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScanExt, - &rScanRequest, - sizeof(PARAM_SCAN_REQUEST_EXT_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("scan error:%lx\n", rStatus)); - return -EINVAL; - } - - prGlueInfo->prScanRequest = request; - - return 0; -} - -static UINT_8 wepBuf[48]; - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to connect to - * the ESS with the specified parameters - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - UINT_32 cipher; - PARAM_SSID_T rNewSsid; - BOOLEAN fgCarryWPSIE = FALSE; - ENUM_PARAM_OP_MODE_T eOpMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if (prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode > NET_TYPE_AUTO_SWITCH) - eOpMode = NET_TYPE_AUTO_SWITCH; - else - eOpMode = prGlueInfo->prAdapter->rWifiVar.rConnSettings.eOPMode; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetInfrastructureMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_1) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA; - else if (sme->crypto.wpa_versions & NL80211_WPA_VERSION_2) - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_WPA2; - else - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - - switch (sme->auth_type) { - case NL80211_AUTHTYPE_OPEN_SYSTEM: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - break; - case NL80211_AUTHTYPE_SHARED_KEY: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY; - break; - default: - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM | IW_AUTH_ALG_SHARED_KEY; - break; - } - - if (sme->crypto.n_ciphers_pairwise) { - switch (sme->crypto.ciphers_pairwise[0]) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher pairwise (%d)\n", - sme->crypto.ciphers_pairwise[0])); - return -EINVAL; - } - } - - if (sme->crypto.cipher_group) { - switch (sme->crypto.cipher_group) { - case WLAN_CIPHER_SUITE_WEP40: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP40; - break; - case WLAN_CIPHER_SUITE_WEP104: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_WEP104; - break; - case WLAN_CIPHER_SUITE_TKIP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_TKIP; - break; - case WLAN_CIPHER_SUITE_CCMP: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_CCMP; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - - if (sme->crypto.n_akm_suites) { - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } else if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2) { - switch (sme->crypto.akm_suites[0]) { - case WLAN_AKM_SUITE_8021X: - eAuthMode = AUTH_MODE_WPA2; - break; - case WLAN_AKM_SUITE_PSK: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; - default: - DBGLOG(REQ, WARN, ("invalid cipher group (%d)\n", - sme->crypto.cipher_group)); - return -EINVAL; - } - } - } - - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - } - - prGlueInfo->rWpaInfo.fgPrivacyInvoke = sme->privacy; - - //prGlueInfo->prAdapter->rWifiVar.rConnSettings.fgWapiMode = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WapiAssocInfoIESz = 0; - prGlueInfo->fgWpsActive = FALSE; - //prGlueInfo->prAdapter->prGlueInfo->u2WSCAssocInfoIELen = 0; - - if (sme->ie && sme->ie_len > 0) { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PUINT_8 prDesiredIE = NULL; - -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - sme->ie, - sme->ie_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("[wapi] set wapi assoc info error:%lx\n", rStatus)); - } -#endif -#if CFG_SUPPORT_WPS2 - if (wextSrchDesiredWPSIE(sme->ie, - sme->ie_len, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - prGlueInfo->fgWpsActive = TRUE; - fgCarryWPSIE = TRUE; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(SEC, WARN, ("WSC] set WSC assoc info error:%lx\n", rStatus)); - } - } -#endif - } - - /* clear WSC Assoc IE buffer in case WPS IE is not detected */ - if(fgCarryWPSIE == FALSE) { - kalMemZero(&prGlueInfo->aucWSCAssocInfoIE, 200); - prGlueInfo->u2WSCAssocInfoIELen = 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set auth mode error:%lx\n", rStatus)); - } - - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | prGlueInfo->rWpaInfo.u4CipherPairwise; - - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) { - if (cipher & IW_AUTH_CIPHER_CCMP) { - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - } - else { - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set encryption mode error:%lx\n", rStatus)); - } - - if (sme->key_len != 0 && prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - kalMemSet(prWepKey, 0, sizeof(prWepKey)); - prWepKey->u4Length = 12 + sme->key_len; - prWepKey->u4KeyLength = (UINT_32) sme->key_len; - prWepKey->u4KeyIndex = (UINT_32) sme->key_idx; - prWepKey->u4KeyIndex |= BIT(31); - if (prWepKey->u4KeyLength > 32) { - DBGLOG(REQ, WARN, ("Too long key length (%u)\n", prWepKey->u4KeyLength)); - return -EINVAL; - } - kalMemCopy(prWepKey->aucKeyMaterial, sme->key, prWepKey->u4KeyLength); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - } - - if(sme->ssid_len > 0) { - /* connect by SSID */ - COPY_SSID(rNewSsid.aucSsid, rNewSsid.u4SsidLen, sme->ssid, sme->ssid_len); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EINVAL; - } - } - else { - /* connect by BSSID */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssid, - (PVOID) sme->bssid, - sizeof(MAC_ADDR_LEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set BSSID:%lx\n", rStatus)); - return -EINVAL; - } - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to disconnect from - * currently connected ESS - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to join an IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ) -{ - PARAM_SSID_T rNewSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - UINT_32 u4BufLen = 0; - WLAN_STATUS rStatus; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - /* set channel */ - if(params->channel) { - u4ChnlFreq = nicChannelNum2Freq(params->channel->hw_value); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - } - - /* set SSID */ - kalMemCopy(rNewSsid.aucSsid, params->ssid, params->ssid_len); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set SSID:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; - - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to leave from IBSS group - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("disassociate error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to configure - * WLAN power managemenet - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - PARAM_POWER_MODE ePowerMode; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - if(enabled) { - if(timeout == -1) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - ePowerMode = Param_PowerModeMAX_PSP; - } - } - else { - ePowerMode = Param_PowerModeCAM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("set_power_mgmt error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cache - * a PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, pmksa->bssid, 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, pmksa->pmkid, IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to remove - * a cached PMKID for a BSSID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ) -{ - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to flush - * all cached PMKID - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - return -ENOMEM; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to stay on a - * specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel staying - * on a specified channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to send a management frame - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel the wait time - * from transmitting a management frame on another channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - - return -EINVAL; -} - - -#if CONFIG_NL80211_TESTMODE - -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SET_KEY_EXTS prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)NULL; - struct iw_encode_exts *prIWEncExt = (struct iw_encode_exts *)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4BufLen = 0; - - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) { - prParams = (P_NL80211_DRIVER_SET_KEY_EXTS)data; - } - - if(prParams) { - prIWEncExt = (struct iw_encode_exts *) &prParams->ext; - } - - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - /* KeyID */ - prWpiKey->ucKeyID = prParams->key_index; - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - -//#if CFG_SUPPORT_WAPI - //handle_sec_msg_final(prIWEncExt->key, 32, prIWEncExt->key, NULL); -//#endif - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rstatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rstatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - fgIsValid = -EFAULT; - } - - } - return fgIsValid; -} -#endif - - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_SW_CMD_PARAMS prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)NULL; - WLAN_STATUS rstatus = WLAN_STATUS_SUCCESS; - int fgIsValid = 0; - UINT_32 u4SetInfoLen = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) - prParams = (P_NL80211_DRIVER_SW_CMD_PARAMS)data; - - if(prParams) { - if(prParams->set == 1){ - rstatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)wlanoidSetSwCtrlWrite, - &prParams->adr, - (UINT_32)8, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - } - - if (WLAN_STATUS_SUCCESS != rstatus) { - fgIsValid = -EFAULT; - } - - return fgIsValid; -} - -int mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_MODE_PARAMS prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)NULL; - BOOLEAN fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_MODE_PARAMS)data; - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* SW cmd */ - if(mtk_cfg80211_testmode_sw_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - case 2: /* WAPI */ -#if CFG_SUPPORT_WAPI - if(mtk_cfg80211_testmode_set_key_ext(wiphy, data, len)) - fgIsValid = TRUE; -#endif - break; - default: - fgIsValid = TRUE; - break; - } - } - - - return fgIsValid; -} -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_init.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_init.c deleted file mode 100755 index 60885b36f5bc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_init.c +++ /dev/null @@ -1,3253 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/gl_init.c#3 $ -*/ - -/*! \file gl_init.c - \brief Main routines of Linux driver - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_init.c $ -** -** 11 14 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** enable checksum offloading configuration as default -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync for NVRAM warning scan result generation for CFG80211. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 25 2012 yuche.tsai - * NULL - * Fix reset KE issue. - * - * 05 11 2012 cp.wu - * [WCXRP00001237] [MT6620 Wi-Fi][Driver] Show MAC address and MAC address source for ACS's convenience - * show MAC address & source while initiliazation - * - * 03 02 2012 terry.wu - * NULL - * EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem);. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 03 02 2012 terry.wu - * NULL - * Sync CFG80211 modification from branch 2,2. - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 12 22 2011 george.huang - * [WCXRP00000905] [MT6628 Wi-Fi][FW] Code refinement for ROM/ RAM module dependency - * using global variable instead of stack for setting wlanoidSetNetworkAddress(), due to buffer may be released before TX thread handling - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 14 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Fix large network type index assert in FW issue. - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 06 2011 eddie.chen - * [WCXRP00001027] [MT6628 Wi-Fi][Firmware/Driver] Tx fragmentation - * Add rlmDomainGetChnlList symbol. - * - * 09 22 2011 cm.chang - * NULL - * Safer writng stype to avoid unitialized regitry structure - * - * 09 21 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Avoid possible structure alignment problem - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 08 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM - * - * 08 31 2011 cm.chang - * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code - * . - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * expose scnQuerySparseChannel() for P2P-FSM. - * - * 08 11 2011 cp.wu - * [WCXRP00000830] [MT6620 Wi-Fi][Firmware] Use MDRDY counter to detect empty channel for shortening scan time - * sparse channel detection: - * driver: collect sparse channel information with scan-done event - * - * 08 02 2011 yuche.tsai - * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue. - * Fix GO send deauth frame issue. - * - * 07 07 2011 wh.su - * [WCXRP00000839] [MT6620 Wi-Fi][Driver] Add the dumpMemory8 and dumpMemory32 EXPORT_SYMBOL - * Add the dumpMemory8 symbol export for debug mode. - * - * 07 06 2011 terry.wu - * [WCXRP00000735] [MT6620 Wi-Fi][BoW][FW/Driver] Protect BoW connection establishment - * Improve BoW connection establishment speed. - * - * 07 05 2011 yuche.tsai - * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue - * Export one symbol for enhancement. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 05 27 2011 cp.wu - * [WCXRP00000749] [MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM - * invoke CMD_ID_SET_EDGE_TXPWR_LIMIT when there is valid data exist in NVRAM content. - * - * 05 18 2011 cp.wu - * [WCXRP00000734] [MT6620 Wi-Fi][Driver] Pass PHY_PARAM in NVRAM to firmware domain - * pass PHY_PARAM in NVRAM from driver to firmware. - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 05 03 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Use kalMemAlloc to allocate event buffer for kalIndicateBOWEvent. - * - * 04 27 2011 george.huang - * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter - * Support P2P ARP filter setting on early suspend/ late resume - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Modify some driver connection flow or behavior to pass Sigma test more easier.. - * - * 04 12 2011 cm.chang - * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency - * . - * - * 04 11 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * export wlan functions to p2p - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * glBusFreeIrq() should use the same pvCookie as glBusSetIrq() or request_irq()/free_irq() won't work as a pair. - * - * 04 08 2011 eddie.chen - * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma - * Fix for sigma - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * fix typo. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * reverse order to prevent probing racing. - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine the queue_select function - * - * 03 10 2011 cp.wu - * [WCXRP00000532] [MT6620 Wi-Fi][Driver] Migrate NVRAM configuration procedures from MT6620 E2 to MT6620 E3 - * deprecate configuration used by MT6620 E2 - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Export nicQmUpdateWmmParms. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 02 24 2011 george.huang - * [WCXRP00000495] [MT6620 Wi-Fi][FW] Support pattern filter for unwanted ARP frames - * Support ARP filter during suspended - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 17 2011 terry.wu - * [WCXRP00000459] [MT6620 Wi-Fi][Driver] Fix deference null pointer problem in wlanRemove - * Fix deference a null pointer problem in wlanRemove. - * - * 02 16 2011 jeffrey.chang - * NULL - * fix compilig error - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 11 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add one more export symbol. - * - * 02 10 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add RX deauthentication & disassociation process under Hot-Spot mode. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 02 08 2011 yuche.tsai - * [WCXRP00000421] [Volunteer Patch][MT6620][Driver] Fix incorrect SSID length Issue - * Export Deactivation Network. - * - * 02 01 2011 jeffrey.chang - * [WCXRP00000414] KAL Timer is not unregistered when driver not loaded - * Unregister the KAL timer during driver unloading - * - * 01 26 2011 cm.chang - * [WCXRP00000395] [MT6620 Wi-Fi][Driver][FW] Search STA_REC with additional net type index argument - * Allocate system RAM if fixed message or mgmt buffer is not available - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 15 2010 cp.wu - * [WCXRP00000265] [MT6620 Wi-Fi][Driver] Remove set_mac_address routine from legacy Wi-Fi Android driver - * remove set MAC address. MAC address is always loaded from NVRAM instead. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add GPIO debug function - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 21 2010 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * . - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000106] [MT6620 Wi-Fi][Driver] Enable setting multicast callback in Android - * . - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 27 2010 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000065] Update BoW design and settings - * Update BCM/BoW design and settings. - * - * 09 23 2010 cp.wu - * [WCXRP00000051] [MT6620 Wi-Fi][Driver] WHQL test fail in MAC address changed item - * use firmware reported mac address right after wlanAdapterStart() as permanent address - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 yarco.yang - * NULL - * Support Linux x86 - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 jeffrey.chang - * NULL - * fix memory leak for module unloading - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Query statistics from firmware - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify tcp/ip checksum offload flags - * - * 04 16 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix tcp/ip checksum offload bug - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * are done in adapter layer. - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)improve none-glue code portability - * * (2) disable set Multicast address during atomic context - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding debug module - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix f/w download start and load address by using config.h - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download support - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\52 2009-10-27 22:49:59 GMT mtk01090 -** Fix compile error for Linux EHPI driver -** \main\maintrunk.MT5921\51 2009-10-20 17:38:22 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\50 2009-10-08 10:33:11 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\49 2009-09-28 20:19:05 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\48 2009-09-03 13:58:46 GMT mtk01088 -** remove non-used code -** \main\maintrunk.MT5921\47 2009-09-03 11:40:25 GMT mtk01088 -** adding the module parameter for wapi -** \main\maintrunk.MT5921\46 2009-08-18 22:56:41 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\45 2009-07-06 20:53:00 GMT mtk01088 -** adding the code to check the wapi 1x frame -** \main\maintrunk.MT5921\44 2009-06-23 23:18:55 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\43 2009-02-16 23:46:51 GMT mtk01461 -** Revise the order of increasing u4TxPendingFrameNum because of CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\42 2009-01-22 13:11:59 GMT mtk01088 -** set the tid and 1x value at same packet reserved field -** \main\maintrunk.MT5921\41 2008-10-20 22:43:53 GMT mtk01104 -** Fix wrong variable name "prDev" in wlanStop() -** \main\maintrunk.MT5921\40 2008-10-16 15:37:10 GMT mtk01461 -** add handle WLAN_STATUS_SUCCESS in wlanHardStartXmit() for CFG_TX_RET_TX_CTRL_EARLY -** \main\maintrunk.MT5921\39 2008-09-25 15:56:21 GMT mtk01461 -** Update driver for Code review -** \main\maintrunk.MT5921\38 2008-09-05 17:25:07 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\37 2008-09-02 10:57:06 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\36 2008-08-05 01:53:28 GMT mtk01461 -** Add support for linux statistics -** \main\maintrunk.MT5921\35 2008-08-04 16:52:58 GMT mtk01461 -** Fix ASSERT if removing module in BG_SSID_SCAN state -** \main\maintrunk.MT5921\34 2008-06-13 22:52:24 GMT mtk01461 -** Revise status code handling in wlanHardStartXmit() for WLAN_STATUS_SUCCESS -** \main\maintrunk.MT5921\33 2008-05-30 18:56:53 GMT mtk01461 -** Not use wlanoidSetCurrentAddrForLinux() -** \main\maintrunk.MT5921\32 2008-05-30 14:39:40 GMT mtk01461 -** Remove WMM Assoc Flag -** \main\maintrunk.MT5921\31 2008-05-23 10:26:40 GMT mtk01084 -** modify wlanISR interface -** \main\maintrunk.MT5921\30 2008-05-03 18:52:36 GMT mtk01461 -** Fix Unset Broadcast filter when setMulticast -** \main\maintrunk.MT5921\29 2008-05-03 15:17:26 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\28 2008-04-24 22:48:21 GMT mtk01461 -** Revise set multicast function by using windows oid style for LP own back -** \main\maintrunk.MT5921\27 2008-04-24 12:00:08 GMT mtk01461 -** Fix multicast setting in Linux and add comment -** \main\maintrunk.MT5921\26 2008-03-28 10:40:22 GMT mtk01461 -** Fix set mac address func in Linux -** \main\maintrunk.MT5921\25 2008-03-26 15:37:26 GMT mtk01461 -** Add set MAC Address -** \main\maintrunk.MT5921\24 2008-03-26 14:24:53 GMT mtk01461 -** For Linux, set net_device has feature with checksum offload by default -** \main\maintrunk.MT5921\23 2008-03-11 14:50:52 GMT mtk01461 -** Fix typo -** \main\maintrunk.MT5921\22 2008-02-29 15:35:20 GMT mtk01088 -** add 1x decide code for sw port control -** \main\maintrunk.MT5921\21 2008-02-21 15:01:54 GMT mtk01461 -** Rearrange the set off place of GLUE spin lock in HardStartXmit -** \main\maintrunk.MT5921\20 2008-02-12 23:26:50 GMT mtk01461 -** Add debug option - Packet Order for Linux and add debug level - Event -** \main\maintrunk.MT5921\19 2007-12-11 00:11:12 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\18 2007-11-30 17:02:25 GMT mtk01425 -** 1. Set Rx multicast packets mode before setting the address list -** \main\maintrunk.MT5921\17 2007-11-26 19:44:24 GMT mtk01461 -** Add OS_TIMESTAMP to packet -** \main\maintrunk.MT5921\16 2007-11-21 15:47:20 GMT mtk01088 -** fixed the unload module issue -** \main\maintrunk.MT5921\15 2007-11-07 18:37:38 GMT mtk01461 -** Fix compile warnning -** \main\maintrunk.MT5921\14 2007-11-02 01:03:19 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\13 2007-10-30 10:42:33 GMT mtk01425 -** 1. Refine for multicast list -** \main\maintrunk.MT5921\12 2007-10-25 18:08:13 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "gl_cfg80211.h" -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define MAX_IOREQ_NUM 10 - -BOOLEAN fgIsUnderEarlierSuspend = false; - -struct semaphore g_halt_sem; -int g_u4HaltFlag = 0; - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Tasklet mechanism is like buttom-half in Linux. We just want to - * send a signal to OS for interrupt defer processing. All resources - * are NOT allowed reentry, so txPacket, ISR-DPC and ioctl must avoid preempty. - */ -typedef struct _WLANDEV_INFO_T { - struct net_device *prDev; -} WLANDEV_INFO_T, *P_WLANDEV_INFO_T; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -MODULE_AUTHOR(NIC_AUTHOR); -MODULE_DESCRIPTION(NIC_DESC); -MODULE_SUPPORTED_DEVICE(NIC_NAME); -extern void wlanRegisterNotifier(void); -extern void wlanUnregisterNotifier(void); -extern int mt5931_power_off(void); - -#if 0 - MODULE_LICENSE("MTK Propietary"); -#else - MODULE_LICENSE("GPL"); -#endif - -#define NIC_INF_NAME "wlan%d" /* interface name */ -#define LEGACY_IN_AP_MODE "legacy_wlan%d" /*interface name in AP mode*/ -extern volatile int PowerOnIFname; - - -#if DBG - UINT_8 aucDebugModule[DBG_MODULE_NUM]; - UINT_32 u4DebugModule = 0; -#endif /* DBG */ - -//4 2007/06/26, mikewu, now we don't use this, we just fix the number of wlan device to 1 -static WLANDEV_INFO_T arWlanDevInfo[CFG_MAX_WLAN_DEVICES] = {{0}}; -static UINT_32 u4WlanDevNum = 0; /* How many NICs coexist now */ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -#if CFG_ENABLE_WIFI_DIRECT -static SUB_MODULE_HANDLER rSubModHandler[SUB_MODULE_NUM] = {{NULL}}; -#endif - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } -static struct ieee80211_channel mtk_5ghz_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -/* public for both Legacy Wi-Fi / P2P access */ -struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 mtk_cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_wlan_ops = { - .change_virtual_intf = mtk_cfg80211_change_iface, - .add_key = mtk_cfg80211_add_key, - .get_key = mtk_cfg80211_get_key, - .del_key = mtk_cfg80211_del_key, - .set_default_key = mtk_cfg80211_set_default_key, - .get_station = mtk_cfg80211_get_station, - .scan = mtk_cfg80211_scan, - .connect = mtk_cfg80211_connect, - .disconnect = mtk_cfg80211_disconnect, - .join_ibss = mtk_cfg80211_join_ibss, - .leave_ibss = mtk_cfg80211_leave_ibss, - .set_power_mgmt = mtk_cfg80211_set_power_mgmt, - .set_pmksa = mtk_cfg80211_set_pmksa, - .del_pmksa = mtk_cfg80211_del_pmksa, - .flush_pmksa = mtk_cfg80211_flush_pmksa, - - /* Action Frame TX/RX */ - .remain_on_channel = mtk_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_cfg80211_mgmt_tx, - .mgmt_tx_cancel_wait = mtk_cfg80211_mgmt_tx_cancel_wait, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_cfg80211_testmode_cmd, - #endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -unsigned int _cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -wlanSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Load NVRAM data and translate it into REG_INFO_T -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* \param[out] prRegInfo Pointer to struct REG_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -glLoadNvram ( - IN P_GLUE_INFO_T prGlueInfo, - OUT P_REG_INFO_T prRegInfo - ) -{ - UINT_32 i, j; - UINT_8 aucTmp[2]; - PUINT_8 pucDest; - - ASSERT(prGlueInfo); - ASSERT(prRegInfo); - - if((!prGlueInfo) || (!prRegInfo)) { - return; - } - - if(kalCfgDataRead16(prGlueInfo, - sizeof(WIFI_CFG_PARAM_STRUCT) - sizeof(UINT_16), - (PUINT_16)aucTmp) == TRUE) { - prGlueInfo->fgNvramAvailable = TRUE; - - // load MAC Address - for (i = 0 ; i < sizeof(PARAM_MAC_ADDR_LEN) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prRegInfo->aucMacAddr) + i)); - } - - // load country code - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucCountryCode[0]), - (PUINT_16)aucTmp); - - // cast to wide characters - prRegInfo->au2CountryCode[0] = (UINT_16) aucTmp[0]; - prRegInfo->au2CountryCode[1] = (UINT_16) aucTmp[1]; - - // load default normal TX power - for (i = 0 ; i < sizeof(TX_PWR_PARAM_T) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, rTxPwr) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->rTxPwr)) + i)); - } - - // load feature flags - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucTxPwrValid), - (PUINT_16)aucTmp); - prRegInfo->ucTxPwrValid = aucTmp[0]; - prRegInfo->ucSupport5GBand = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, uc2G4BwFixed20M), - (PUINT_16)aucTmp); - prRegInfo->uc2G4BwFixed20M = aucTmp[0]; - prRegInfo->uc5GBwFixed20M = aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucEnable5GBand), - (PUINT_16)aucTmp); - prRegInfo->ucEnable5GBand = aucTmp[0]; - - /* load EFUSE overriding part */ - for (i = 0 ; i < sizeof(prRegInfo->aucEFUSE) ; i += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucEFUSE) + i, - (PUINT_16) (((PUINT_8)&(prRegInfo->aucEFUSE)) + i)); - } - - /* load band edge tx power control */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, fg2G4BandEdgePwrUsed), - (PUINT_16)aucTmp); - prRegInfo->fg2G4BandEdgePwrUsed = (BOOLEAN)aucTmp[0]; - if (aucTmp[0]) { - prRegInfo->cBandEdgeMaxPwrCCK = (INT_8)aucTmp[1]; - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, cBandEdgeMaxPwrOFDM20), - (PUINT_16)aucTmp); - prRegInfo->cBandEdgeMaxPwrOFDM20 = (INT_8)aucTmp[0]; - prRegInfo->cBandEdgeMaxPwrOFDM40 = (INT_8)aucTmp[1]; - } - - /* load regulation subbands */ - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, ucRegChannelListMap), - (PUINT_16)aucTmp); - prRegInfo->eRegChannelListMap = (ENUM_REG_CH_MAP_T) aucTmp[0]; - prRegInfo->ucRegChannelListIndex = aucTmp[1]; - - if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { - for (i = 0 ; i < MAX_SUBBAND_NUM; i++) { - pucDest = (PUINT_8) &prRegInfo->rDomainInfo.rSubBand[i]; - for (j = 0; j < 6; j += sizeof(UINT_16)) { - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucRegSubbandInfo) - + (i * 6 + j), - (PUINT_16)aucTmp); - - *pucDest++ = aucTmp[0]; - *pucDest++ = aucTmp[1]; - } - } - } - } - else { - prGlueInfo->fgNvramAvailable = FALSE; - } - - return; -} - - -#if CFG_ENABLE_WIFI_DIRECT -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module init function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == FALSE) { - rSubModHandler[P2P_MODULE].subModInit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = TRUE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief called by txthread, run sub module exit function -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ) -{ - /*now, we only have p2p module*/ - if(rSubModHandler[P2P_MODULE].fgIsInited == TRUE) { - rSubModHandler[P2P_MODULE].subModExit(prGlueInfo); - rSubModHandler[P2P_MODULE].fgIsInited = FALSE; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module init flag, force TxThread to run sub modle init -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ) -{ - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_INIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module INIT*/ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetRegister(prGlueInfo); - } -#endif - - return TRUE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set sub module exit flag, force TxThread to run sub modle exit -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ) -{ -#if 0 - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo); - } -#endif - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_EXIT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread finish sub module EXIT */ - wait_for_completion_interruptible(&prGlueInfo->rSubModComp); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set by sub module, indicate sub module is already inserted -* -* \param[in] rSubModInit, function pointer point to sub module init function -* \param[in] rSubModExit, function pointer point to sub module exit function -* \param[in] eSubModIdx, sub module index -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ) -{ - rSubModHandler[eSubModIdx].subModInit = rSubModInit; - rSubModHandler[eSubModIdx].subModExit = rSubModExit; - rSubModHandler[eSubModIdx].fgIsInited = FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief check wlan is launched or not -* -* \param[in] (none) -* -* \return TRUE, wlan is already started -* FALSE, wlan is not started yet -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wlanIsLaunched( - VOID - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - - ASSERT(prDev); - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - return FALSE; - } - - return prGlueInfo->prAdapter->fgIsWlanLaunched; -} - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Export wlan GLUE_INFO_T pointer to p2p module -* -* \param[in] prGlueInfo Pointer to struct GLUE_INFO_T -* -* \return TRUE: get GlueInfo pointer successfully -* FALSE: wlan is not started yet -*/ -/*---------------------------------------------------------------------------*/ -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (0 == u4WlanDevNum) { - return FALSE; - } - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - if (NULL == prDev) { - return FALSE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (NULL == prGlueInfo) { - return FALSE; - } - - if(FALSE == prGlueInfo->prAdapter->fgIsWlanLaunched) { - return FALSE; - } - - *prGlueInfoExpAddr = prGlueInfo; - return TRUE; -} - -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release prDev from wlandev_array and free tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanClearDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == prDev) { - arWlanDevInfo[i].prDev = NULL; - u4WlanDevNum--; - } - } - - return; -} /* end of wlanClearDevIdx() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate an unique interface index, net_device::ifindex member for this -* wlan device. Store the net_device in wlandev_array, and initialize -* tasklet object related to it. -* -* \param[in] prDev Pointer to struct net_device -* -* \retval >= 0 The device number. -* \retval -1 Fail to get index. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanGetDevIdx ( - struct net_device *prDev - ) -{ - int i; - - ASSERT(prDev); - - for (i = 0; i < CFG_MAX_WLAN_DEVICES; i++) { - if (arWlanDevInfo[i].prDev == (struct net_device *) NULL) { - /* Reserve 2 bytes space to store one digit of - * device number and NULL terminator. - */ - arWlanDevInfo[i].prDev = prDev; - u4WlanDevNum++; - return i; - } - } - - return -1; -} /* end of wlanGetDevIdx() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, a primary SOCKET interface to configure -* the interface lively. Handle an ioctl call on one of our devices. -* Everything Linux ioctl specific is done here. Then we pass the contents -* of the ifr->data to the request message handler. -* -* \param[in] prDev Linux kernel netdevice -* -* \param[in] prIFReq Our private ioctl request structure, typed for the generic -* struct ifreq so we can use ptr to function -* -* \param[in] cmd Command ID -* -* \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. -* \retval OTHER The execution of IOCTL command is failed. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - - /* Verify input parameters for the following functions */ - ASSERT(prDev && prIFReq); - if (!prDev || !prIFReq) { - DBGLOG(INIT, WARN, ("%s Invalid input data\n", __FUNCTION__)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("%s No glue info\n", __FUNCTION__)); - return -EFAULT; - } - - if (prGlueInfo->u4ReadyFlag == 0) { - return -EINVAL; - } - - //printk ("ioctl %x\n", i4Cmd); - - if (i4Cmd == SIOCGIWPRIV) { - /* 0x8B0D, get private ioctl table */ - ret = wext_get_priv(prDev, prIFReq); - } - else if ((i4Cmd >= SIOCIWFIRST) && (i4Cmd < SIOCIWFIRSTPRIV)) { - /* 0x8B00 ~ 0x8BDF, wireless extension region */ - ret = wext_support_ioctl(prDev, prIFReq, i4Cmd); - } - else if ((i4Cmd >= SIOCIWFIRSTPRIV) && (i4Cmd < SIOCIWLASTPRIV)) { - /* 0x8BE0 ~ 0x8BFF, private ioctl region */ - ret = priv_support_ioctl(prDev, prIFReq, i4Cmd); - } - else { - DBGLOG(INIT, WARN, ("Unexpected ioctl command: 0x%04x\n", i4Cmd)); - /* return 0 for safe? */ - } - - return ret; -} /* end of wlanDoIOCTL() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is to set multicast list and set rx mode. -* -* \param[in] prDev Pointer to struct net_device -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -static struct delayed_work workq; -static struct net_device *gPrDev; - -static void -wlanSetMulticastList (struct net_device *prDev) -{ - gPrDev = prDev; - schedule_delayed_work(&workq, 0); -} - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -static void -wlanSetMulticastListWorkQueue (struct work_struct *work) { - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4PacketFilter = 0; - UINT_32 u4SetInfoLen; - struct net_device *prDev = gPrDev; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", - prDev, prGlueInfo)); - up(&g_halt_sem); - return; - } - - if (prDev->flags & IFF_PROMISC) { - u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - - u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - up(&g_halt_sem); - - if (kalIoctl(prGlueInfo, - wlanoidSetCurrentPacketFilter, - &u4PacketFilter, - sizeof(u4PacketFilter), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen) != WLAN_STATUS_SUCCESS) { - return; - } - - - if (u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - PUINT_8 prMCAddrList = NULL; - UINT_32 i = 0; - - down(&g_halt_sem); - if (g_u4HaltFlag) { - up(&g_halt_sem); - return; - } - - prMCAddrList = kalMemAlloc(MAX_NUM_GROUP_ADDR * ETH_ALEN, VIR_MEM_TYPE); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - memcpy((prMCAddrList + i * ETH_ALEN), ha->addr, ETH_ALEN); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - memcpy((prMCAddrList + i * ETH_ALEN), prMcList->dmi_addr, ETH_ALEN); - } -#endif - - up(&g_halt_sem); - - kalIoctl(prGlueInfo, - wlanoidSetMulticastList, - prMCAddrList, - (i * ETH_ALEN), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - kalMemFree(prMCAddrList, VIR_MEM_TYPE, MAX_NUM_GROUP_ADDR * ETH_ALEN); - } - - return; -} /* end of wlanSetMulticastList() */ - - -/* FIXME: Since we cannot sleep in the wlanSetMulticastList, we arrange - * another workqueue for sleeping. We don't want to block - * tx_thread, so we can't let tx_thread to do this */ - -void -p2pSetMulticastListWorkQueueWrapper (P_GLUE_INFO_T prGlueInfo) { - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("abnormal dev or skb: prGlueInfo(0x%p)\n", - prGlueInfo)); - return; - } - -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - mtk_p2p_wext_set_Multicastlist(prGlueInfo); - } -#endif - - return; -} /* end of p2pSetMulticastListWorkQueueWrapper() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is TX entry point of NET DEVICE. -* -* \param[in] prSkb Pointer of the sk_buff to be sent -* \param[in] prDev Pointer to struct net_device -* -* \retval NETDEV_TX_OK - on success. -* \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. -*/ -/*----------------------------------------------------------------------------*/ -int -wlanHardStartXmit( - struct sk_buff *prSkb, - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - UINT_16 u2QueueIdx = 0; - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - ASSERT(prGlueInfo); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("GLUE_FLAG_HALT skip tx\n")); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n")); -#endif - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - #if CFG_DBG_GPIO_PINS - { - /* TX request from OS */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_LOW); - kalUdelay(1); - mtk_wcn_stp_debug_gpio_assert(IDX_TX_REQ, DBG_TIE_HIGH); - } - #endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); -#endif - -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - GLUE_SET_PKT_ARRIVAL_TIME(prSkb, kalGetTimeTick()); -#endif - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx]); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_AIS_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum >= CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_stop_queue(prDev); - } -#endif - } else { - //printk("is security frame\n"); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - DBGLOG(TX, EVENT, ("\n+++++ pending frame %d len = %d +++++\n", prGlueInfo->i4TxPendingFrameNum, prSkb->len)); - prGlueInfo->rNetDevStats.tx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.tx_packets++; - - //pr->u4Flag |= GLUE_FLAG_TXREQ; - //wake_up_interruptible(&prGlueInfo->waitq); - kalSetEvent(prGlueInfo); - - - /* For Linux, we'll always return OK FLAG, because we'll free this skb by ourself */ - return NETDEV_TX_OK; -} /* end of wlanHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] prDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -*/ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -wlanGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - #if 0 - WLAN_STATUS rStatus; - UINT_32 u4XmitError = 0; - UINT_32 u4XmitOk = 0; - UINT_32 u4RecvError = 0; - UINT_32 u4RecvOk = 0; - UINT_32 u4BufLen; - - ASSERT(prDev); - - /* @FIX ME: need a more clear way to do this */ - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitError, - &u4XmitError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryXmitOk, - &u4XmitOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvOk, - &u4RecvOk, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRcvError, - &u4RecvError, - sizeof(UINT_32), - TRUE, - TRUE, - TRUE, - &u4BufLen); - prGlueInfo->rNetDevStats.rx_packets = u4RecvOk; - prGlueInfo->rNetDevStats.tx_packets = u4XmitOk; - prGlueInfo->rNetDevStats.tx_errors = u4XmitError; - prGlueInfo->rNetDevStats.rx_errors = u4RecvError; - //prGlueInfo->rNetDevStats.rx_bytes = rCustomNetDevStats.u4RxBytes; - //prGlueInfo->rNetDevStats.tx_bytes = rCustomNetDevStats.u4TxBytes; - //prGlueInfo->rNetDevStats.rx_errors = rCustomNetDevStats.u4RxErrors; - //prGlueInfo->rNetDevStats.multicast = rCustomNetDevStats.u4Multicast; - #endif - //prGlueInfo->rNetDevStats.rx_packets = 0; - //prGlueInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - //prGlueInfo->rNetDevStats.rx_bytes = 0; - //prGlueInfo->rNetDevStats.tx_bytes = 0; - prGlueInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->rNetDevStats; - -} /* end of wlanGetStats() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanInit( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - if (!prDev) { - return -ENXIO; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue); -#else - INIT_DELAYED_WORK(&workq, wlanSetMulticastListWorkQueue, NULL); -#endif - - return 0; /* success */ -} /* end of wlanInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -wlanUninit( - struct net_device *prDev - ) -{ - return; -} /* end of wlanUninit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->open -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanOpen succeeds. -* \retval < 0 The execution of wlanOpen failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanOpen( - struct net_device *prDev - ) -{ - ASSERT(prDev); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_start_all_queues(prDev); -#else - netif_start_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->stop -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanStop succeeds. -* \retval < 0 The execution of wlanStop failed. -*/ -/*----------------------------------------------------------------------------*/ -static int -wlanStop( - struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* CFG80211 down */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(prScanRequest) { - cfg80211_scan_done(prScanRequest, TRUE); - } - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - netif_tx_stop_all_queues(prDev); -#else - netif_stop_queue(prDev); -#endif - - return 0; /* success */ -} /* end of wlanStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code - * - * \param[in] prGlueInfo Pointer to glue info - * - * \return none - */ -/*----------------------------------------------------------------------------*/ -VOID -wlanUpdateChannelTable( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, j; - UINT_8 ucNumOfChannel; - RF_CHANNEL_INFO_T aucChannelList[ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels)]; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_channels); i++) { - mtk_5ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, - BAND_NULL, - ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_channels), - &ucNumOfChannel, - aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - for(j = 0 ; j < ARRAY_SIZE(mtk_2ghz_channels) ; j++) { - if(mtk_2ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_2ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - case BAND_5G: - for(j = 0 ; j < ARRAY_SIZE(mtk_5ghz_channels) ; j++) { - if(mtk_5ghz_channels[j].hw_value == aucChannelList[i].ucChannelNum) { - mtk_5ghz_channels[j].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - } - break; - - default: - break; - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register the device to the kernel and return the index. -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanNetRegister succeeds. -* \retval < 0 The execution of wlanNetRegister failed. -*/ -/*----------------------------------------------------------------------------*/ -static INT_32 -wlanNetRegister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - INT_32 i4DevIdx = -1; - - ASSERT(prWdev); - - - do { - if (!prWdev) { - break; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - if ((i4DevIdx = wlanGetDevIdx(prWdev->netdev)) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device number exceeds.\n")); - break; - } - - /* adjust channel support status */ - wlanUpdateChannelTable((P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy)); - - if (wiphy_register(prWdev->wiphy) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: wiphy context is not registered.\n")); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(register_netdev(prWdev->netdev) < 0) { - DBGLOG(INIT, ERROR, ("wlanNetRegister: net_device context is not registered.\n")); - - wiphy_unregister(prWdev->wiphy); - wlanClearDevIdx(prWdev->netdev); - i4DevIdx = -1; - } - - if(i4DevIdx != -1) { - prGlueInfo->fgIsRegistered = TRUE; - } - } - while(FALSE); - - return i4DevIdx; /* success */ -} /* end of wlanNetRegister() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister the device from the kernel -* -* \param[in] prWdev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetUnregister( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo; - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetUnregister: The device context is NULL\n")); - return; - } - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - - wlanClearDevIdx(prWdev->netdev); - unregister_netdev(prWdev->netdev); - wiphy_unregister(prWdev->wiphy); - - prGlueInfo->fgIsRegistered = FALSE; - - DBGLOG(INIT, INFO, ("unregister wireless_dev(0x%p)\n", prWdev)); - - return; -} /* end of wlanNetUnregister() */ - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops wlan_netdev_ops = { - .ndo_open = wlanOpen, - .ndo_stop = wlanStop, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = wlanSetMulticastList, -#else - .ndo_set_multicast_list = wlanSetMulticastList, -#endif - .ndo_get_stats = wlanGetStats, - .ndo_do_ioctl = wlanDoIOCTL, - .ndo_start_xmit = wlanHardStartXmit, - .ndo_init = wlanInit, - .ndo_uninit = wlanUninit, - .ndo_select_queue = wlanSelectQueue, -}; -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method for creating Linux NET4 struct net_device object and the -* private data(prGlueInfo and prAdapter). Setup the IO address to the HIF. -* Assign the function pointer to the net_device object -* -* \param[in] pvData Memory address for the device -* -* \retval Not null The wireless_dev object. -* \retval NULL Fail to create wireless_dev object -*/ -/*----------------------------------------------------------------------------*/ -static struct lock_class_key rSpinKey[SPIN_LOCK_NUM]; -static struct wireless_dev * -wlanNetCreate( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - UINT_32 i; - struct device *prDev; - - //4 <1.1> Create wireless_dev - prWdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL); - DBGLOG(INIT, INFO, ("wireless_dev prWdev(0x%p) allocated\n", prWdev)); - if (!prWdev) { - DBGLOG(INIT, ERROR, ("Allocating memory to wireless_dev context failed\n")); - return NULL; - } - - //4 <1.2> Create wiphy - prWdev->wiphy = wiphy_new(&mtk_wlan_ops, sizeof(GLUE_INFO_T)); - DBGLOG(INIT, INFO, ("wiphy (0x%p) allocated\n", prWdev->wiphy)); - if (!prWdev->wiphy) { - DBGLOG(INIT, ERROR, ("Allocating memory to wiphy device failed\n")); - kfree(prWdev); - return NULL; - } - - //4 <1.3> co-relate wiphy & prDev -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(*((MTK_WCN_HIF_SDIO_CLTCTX *)pvData), &prDev); -#else - prDev = &((struct sdio_func *) pvData)->dev; -#endif - if (!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for wlan\n"); - } - set_wiphy_dev(prWdev->wiphy, prDev); - - //4 <1.4> configure wireless_dev & wiphy - prWdev->iftype = NL80211_IFTYPE_STATION; - prWdev->wiphy->max_scan_ssids = 1; /* FIXME: for combo scan */ - prWdev->wiphy->max_scan_ie_len = 512; - prWdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); - prWdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - //for the WPS probe request suband issue - //prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = NULL; - prWdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; - prWdev->wiphy->cipher_suites = (const u32 *)mtk_cipher_suites; - prWdev->wiphy->n_cipher_suites = ARRAY_SIZE(mtk_cipher_suites); -#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 2, 0) - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_SUPPORTS_FW_ROAM; -#else - prWdev->wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY; - printk(KERN_ALERT DRV_NAME "Not support WIPHY_FLAG_SUPPORTS_FW_ROAM\n"); -#endif - - //4 <2> Create Glue structure - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - if (!prGlueInfo) { - DBGLOG(INIT, ERROR, ("Allocating memory to glue layer failed\n")); - goto netcreate_err; - } - - //4 <3> Initial Glue structure - //4 <3.1> create net device - if (PowerOnIFname==0){ - prGlueInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), NIC_INF_NAME, ether_setup, CFG_MAX_TXQ_NUM); - } - else { - prGlueInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), LEGACY_IN_AP_MODE, ether_setup, CFG_MAX_TXQ_NUM); - } - DBGLOG(INIT, INFO, ("net_device prDev(0x%p) allocated\n", prGlueInfo->prDevHandler)); - if (!prGlueInfo->prDevHandler) { - DBGLOG(INIT, ERROR, ("Allocating memory to net_device context failed\n")); - goto netcreate_err; - } - - //4 <3.1.1> initialize net device varaiables - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prDevHandler)) = prGlueInfo; - - prGlueInfo->prDevHandler->netdev_ops = &wlan_netdev_ops; -#ifdef CONFIG_WIRELESS_EXT - prGlueInfo->prDevHandler->wireless_handlers = &wext_handler_def; -#endif - netif_carrier_off(prGlueInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prDevHandler); - - //4 <3.1.2> co-relate with wiphy bi-directionally - prGlueInfo->prDevHandler->ieee80211_ptr = prWdev; -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prGlueInfo->prDevHandler->features = NETIF_F_HW_CSUM; -#endif - prWdev->netdev = prGlueInfo->prDevHandler; - - //4 <3.1.3> co-relate net device & prDev - SET_NETDEV_DEV(prGlueInfo->prDevHandler, wiphy_dev(prWdev->wiphy)); - - //4 <3.2> initiali glue variables - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - prGlueInfo->ePowerState = ParamDeviceStateD0; - prGlueInfo->fgIsMacAddrOverride = FALSE; - prGlueInfo->fgIsRegistered = FALSE; - prGlueInfo->prScanRequest = NULL; - - init_completion(&prGlueInfo->rScanComp); - init_completion(&prGlueInfo->rHaltComp); - init_completion(&prGlueInfo->rPendComp); -#if 0//LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) - init_completion(&prGlueInfo->rMgmtTxComp); - atomic_set(&prGlueInfo->rMgmtTxAto, 0); -#endif -#if CFG_ENABLE_WIFI_DIRECT - init_completion(&prGlueInfo->rSubModComp); -#endif - - /* initialize timer for OID timeout checker */ - kalOsTimerInitialize(prGlueInfo, kalTimeoutHandler); - - for (i = 0; i < SPIN_LOCK_NUM; i++) { - spin_lock_init(&prGlueInfo->rSpinLock[i]); - lockdep_set_class(&prGlueInfo->rSpinLock[i], &rSpinKey[i]); - } - - /* initialize semaphore for ioctl */ - sema_init(&prGlueInfo->ioctl_sem, 1); - - /* initialize semaphore for ioctl */ - sema_init(&g_halt_sem, 1); - g_u4HaltFlag = 0; - - //4 <4> Create Adapter structure - prAdapter = (P_ADAPTER_T) wlanAdapterCreate(prGlueInfo); - - if (!prAdapter) { - DBGLOG(INIT, ERROR, ("Allocating memory to adapter failed\n")); - goto netcreate_err; - } - - prGlueInfo->prAdapter = prAdapter; - -#ifdef CONFIG_CFG80211_WEXT - //4 <5> Use wireless extension to replace IOCTL - prWdev->wiphy->wext = &wext_handler_def; -#endif - - goto netcreate_done; - -netcreate_err: - if (NULL != prAdapter) { - wlanAdapterDestroy(prAdapter); - prAdapter = NULL; - } - - if (NULL != prGlueInfo->prDevHandler) { - free_netdev(prGlueInfo->prDevHandler); - prGlueInfo->prDevHandler = NULL; - } - - if (NULL != prWdev->wiphy) { - wiphy_free(prWdev->wiphy); - prWdev->wiphy = NULL; - } - - if (NULL != prWdev) { - /* Free net_device and private data, which are allocated by - * alloc_netdev(). - */ - kfree(prWdev); - prWdev = NULL; - } - -netcreate_done: - - return prWdev; -} /* end of wlanNetCreate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Destroying the struct net_device object and the private data. -* -* \param[in] prWdev Pointer to struct wireless_dev. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanNetDestroy( - struct wireless_dev *prWdev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prWdev); - - if (!prWdev) { - DBGLOG(INIT, ERROR, ("wlanNetDestroy: The device context is NULL\n")); - return; - } - - /* prGlueInfo is allocated with net_device */ - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - ASSERT(prGlueInfo); - - /* destroy kal OS timer */ - kalCancelTimer(prGlueInfo); - - glClearHifInfo(prGlueInfo); - - wlanAdapterDestroy(prGlueInfo->prAdapter); - prGlueInfo->prAdapter = NULL; - - /* Free net_device and private data, which are allocated by alloc_netdev(). - */ - free_netdev(prWdev->netdev); - wiphy_free(prWdev->wiphy); - - kfree(prWdev); - - return; -} /* end of wlanNetDestroy() */ - -#ifndef CONFIG_X86 -UINT_8 g_aucBufIpAddr[32] = {0}; - -static void wlanEarlySuspend(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - - DBGLOG(INIT, INFO, ("*********wlanEarlySuspend************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - ASSERT(prDev); - -fgIsUnderEarlierSuspend = true; - - // <2> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - - // <3> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(INIT, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - DBGLOG(INIT, INFO, ("ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - )); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - //u4NumIPv6++; - } - -#endif - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -#ifdef CONFIG_IPV6 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -static void wlanLateResume(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - - DBGLOG(INIT, INFO, ("*********wlanLateResume************\n")); - - // <1> Sanity check and acquire the net_device - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - ASSERT(prDev); - -fgIsUnderEarlierSuspend = false; - - // <2> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ip is not avaliable.\n")); - return; - } - - // <3> acquire the prGlueInfo - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(INIT, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - DBGLOG(INIT, INFO, ("ipv6 is not avaliable.\n")); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - DBGLOG(INIT, INFO, ("ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - )); -#endif - // <7> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void wlan_early_suspend(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_early_suspend************\n")); - wlanEarlySuspend(); -} - -static void wlan_late_resume(struct early_suspend *h) -{ - DBGLOG(INIT, INFO, ("*********wlan_late_resume************\n")); - wlanLateResume(); -} -#endif //defined(CONFIG_HAS_EARLYSUSPEND) -#endif //! CONFIG_X86 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Wlan probe function. This function probes and initializes the device. -* -* \param[in] pvData data passed by bus driver init function -* _HIF_EHPI: NULL -* _HIF_SDIO: sdio bus driver handle -* -* \retval 0 Success -* \retval negative value Failed -*/ -/*----------------------------------------------------------------------------*/ -/*mtk80707 rollback to aosp hal*/ -typedef int (*set_p2p_mode)(struct net_device *netdev, PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode); -extern void register_set_p2p_mode_handler(set_p2p_mode handler); - -int set_p2p_mode_handler(struct net_device *netdev, PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode) { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(netdev)); - PARAM_CUSTOM_P2P_SET_STRUC_T rSetP2P; - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - rSetP2P.u4Enable = p2pmode.u4Enable; - rSetP2P.u4Mode = p2pmode.u4Mode; - - if(!rSetP2P.u4Enable) { - p2pNetUnregister(prGlueInfo, FALSE); - } - - rWlanStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pMode, - (PVOID)&rSetP2P, - sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - printk("set_p2p_mode_handler ret = %d\n", rWlanStatus); - if(rSetP2P.u4Enable) { - p2pNetRegister(prGlueInfo, TRUE); - } - //return ((rWlanStatus == WLAN_STATUS_SUCCESS) ? 0 : -1); - return 0; -} -/*endof mtk80707*/ - -static INT_32 -wlanProbe( - PVOID pvData - ) -{ - struct wireless_dev *prWdev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - INT_32 i4DevIdx = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - INT_32 i4Status = 0; - BOOL bRet = FALSE; - - - do { -#if DBG - int i; - /* Initialize DEBUG CLASS of each module */ - for (i = 0; i < DBG_MODULE_NUM; i++) { - aucDebugModule[i] = DBG_CLASS_ERROR | \ - DBG_CLASS_WARN | \ - DBG_CLASS_STATE | \ - DBG_CLASS_TRACE | \ - DBG_CLASS_EVENT; - //aucDebugModule[i] = 0; - } -#if 0 - aucDebugModule[DBG_INIT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_ARB_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_JOIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_RX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_TX_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_NIC_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_HAL_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_KEVIN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO | DBG_CLASS_TEMP; - aucDebugModule[DBG_SCAN_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_REQ_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - //aucDebugModule[DBG_MGT_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; - aucDebugModule[DBG_RSN_IDX] |= DBG_CLASS_TRACE; - aucDebugModule[DBG_ROAMING_IDX] |= DBG_CLASS_TRACE | DBG_CLASS_INFO; -#endif -#endif /* DBG */ - - //4 <1> Initialize the IO port of the interface - /* GeorgeKuo: pData has different meaning for _HIF_XXX: - * _HIF_EHPI: pointer to memory base variable, which will be - * initialized by glBusInit(). - * _HIF_SDIO: bus driver handle - */ - - bRet = glBusInit(pvData); - - /* Cannot get IO address from interface */ - if (FALSE == bRet) { - DBGLOG(INIT, ERROR, (KERN_ALERT "wlanProbe: glBusInit() fail\n")); - i4Status = -EIO; - break; - } - - //4 <2> Create network device, Adapter, KalInfo, prDevHandler(netdev) - if ((prWdev = wlanNetCreate(pvData)) == NULL) { - DBGLOG(INIT, ERROR, ("wlanProbe: No memory for dev and its private\n")); - i4Status = -ENOMEM; - break; - } - - //4 <2.5> Set the ioaddr to HIF Info - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(prWdev->wiphy); - gPrDev = prGlueInfo->prDevHandler; - glSetHifInfo(prGlueInfo, (UINT_32) pvData); - - - /* main thread is created in this function */ - init_waitqueue_head(&prGlueInfo->waitq); - // - - QUEUE_INITIALIZE(&prGlueInfo->rCmdQueue); - QUEUE_INITIALIZE(&prGlueInfo->rTxQueue); - - - - //prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - //4 <4> Setup IRQ - prWlandevInfo = &arWlanDevInfo[i4DevIdx]; - - i4Status = glBusSetIrq(prWdev->netdev, NULL, *((P_GLUE_INFO_T *) netdev_priv(prWdev->netdev))); - - if (i4Status != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, ERROR, ("wlanProbe: Set IRQ error\n")); - break; - } - - prGlueInfo->i4DevIdx = i4DevIdx; - - prAdapter = prGlueInfo->prAdapter; - - prGlueInfo->u4ReadyFlag = 0; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prAdapter->u4CSUMFlags = (CSUM_OFFLOAD_EN_TX_TCP | CSUM_OFFLOAD_EN_TX_UDP | CSUM_OFFLOAD_EN_TX_IP); -#endif - - //4 <5> Start Device - // -#if CFG_ENABLE_FW_DOWNLOAD - /* before start adapter, we need to open and load firmware */ - { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(prRegInfo, 0, sizeof(REG_INFO_T)); - prRegInfo->u4StartAddress = CFG_FW_START_ADDRESS; - prRegInfo->u4LoadAddress = CFG_FW_LOAD_ADDRESS; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - //kalMemCopy(&prGlueInfo->rRegInfo, prRegInfo, sizeof(REG_INFO_T)); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - prRegInfo->fgEnArpFilter = TRUE; - - if (kalFirmwareImageMapping(prGlueInfo, &prFwBuffer, &u4FwSize) == NULL) { - i4Status = -EIO; - goto bailout; - } else { - if (wlanAdapterStart(prAdapter, prRegInfo, prFwBuffer, u4FwSize) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - } - } - - kalFirmwareImageUnmapping(prGlueInfo, NULL, prFwBuffer); - -bailout: - //kfree(prRegInfo); - - if (i4Status < 0) { - break; - } - } -#else - //P_REG_INFO_T prRegInfo = (P_REG_INFO_T) kmalloc(sizeof(REG_INFO_T), GFP_KERNEL); - kalMemSet(&prGlueInfo->rRegInfo, 0, sizeof(REG_INFO_T)); - P_REG_INFO_T prRegInfo = &prGlueInfo->rRegInfo; - - // Load NVRAM content to REG_INFO_T - glLoadNvram(prGlueInfo, prRegInfo); - - prRegInfo->u4PowerMode = CFG_INIT_POWER_SAVE_PROF; - - if (wlanAdapterStart(prAdapter, prRegInfo, NULL, 0) != WLAN_STATUS_SUCCESS) { - i4Status = -EIO; - break; - } -#endif - if(TRUE == prAdapter->fgEnable5GBand) - prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - prGlueInfo->main_thread = kthread_run(tx_thread, prGlueInfo->prDevHandler, "tx_thread"); - - /* set MAC address */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - struct sockaddr MacAddr; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryCurrentAddr, - &MacAddr.sa_data, - PARAM_MAC_ADDR_LEN, - TRUE, - TRUE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set MAC addr fail 0x%lx\n", rStatus)); - prGlueInfo->u4ReadyFlag = 0; - } else { - memcpy(prGlueInfo->prDevHandler->dev_addr, &MacAddr.sa_data, ETH_ALEN); - memcpy(prGlueInfo->prDevHandler->perm_addr, prGlueInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* card is ready */ - prGlueInfo->u4ReadyFlag = 1; -#if CFG_SHOW_MACADDR_SOURCE - DBGLOG(INIT, INFO, ("MAC address: "MACSTR, MAC2STR(&MacAddr.sa_data))); -#endif - } - } - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - /* set HW checksum offload */ - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - UINT_32 u4SetInfoLen = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, WARN, ("set HW checksum offload fail 0x%lx\n", rStatus)); - } - } -#endif -#if CFG_ENABLE_WIFI_DIRECT - register_set_p2p_mode_handler(set_p2p_mode_handler); -#endif - - //4 <3> Register the card - if ((i4DevIdx = wlanNetRegister(prWdev)) < 0){ - i4Status = -ENXIO; - DBGLOG(INIT, ERROR, ("wlanProbe: Cannot register the net_device context to the kernel\n")); - break; - } - - //4 <6> Initialize /proc filesystem -#ifdef WLAN_INCLUDE_PROC - if ( (i4Status = procInitProcfs(prDev, NIC_DEVICE_ID_LOW)) < 0) { - DBGLOG(INIT, ERROR, ("wlanProbe: init procfs failed\n")); - break; - } -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI - prGlueInfo->rBowInfo.fgIsNetRegistered = FALSE; - prGlueInfo->rBowInfo.fgIsRegistered = FALSE; - glRegisterAmpc(prGlueInfo); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - /*wlan is launched*/ - prGlueInfo->prAdapter->fgIsWlanLaunched = TRUE; - /*if p2p module is inserted, notify tx_thread to init p2p network*/ - if(rSubModHandler[P2P_MODULE].subModInit) { - wlanSubModInit(prGlueInfo); - } - - -#endif - } - while (FALSE); - - return i4Status; -} /* end of wlanProbe() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method to stop driver operation and release all resources. Following -* this call, no frame should go up or down through this interface. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static VOID -wlanRemove( - VOID - ) -{ - struct net_device *prDev = NULL; - P_WLANDEV_INFO_T prWlandevInfo = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - - DBGLOG(INIT, INFO, ("Remove wlan!\n")); - - - //4 <0> Sanity check - ASSERT(u4WlanDevNum <= CFG_MAX_WLAN_DEVICES); - if (0 == u4WlanDevNum) { - DBGLOG(INIT, INFO, ("0 == u4WlanDevNum\n")); - return; - } - - /*mtk80707 rollback aosp hal*/ - register_set_p2p_mode_handler(NULL); - - prDev = arWlanDevInfo[u4WlanDevNum-1].prDev; - prWlandevInfo = &arWlanDevInfo[u4WlanDevNum-1]; - - ASSERT(prDev); - if (NULL == prDev) { - DBGLOG(INIT, INFO, ("NULL == prDev\n")); - return; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (NULL == prGlueInfo) { - DBGLOG(INIT, INFO, ("NULL == prGlueInfo\n")); - free_netdev(prDev); - return; - } - - -#if CFG_ENABLE_WIFI_DIRECT - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - p2pNetUnregister(prGlueInfo, TRUE); - p2pRemove(prGlueInfo); - } - -#if 0 - prGlueInfo->prAdapter->fgIsWlanLaunched = FALSE; - //if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - if (prGlueInfo->prP2PInfo) { - //p2pRemove(prGlueInfo); - if (prGlueInfo->prP2PInfo->prDevHandler) { - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - - } - - - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return; - } - } -#endif -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsNetRegistered) { - bowNotifyAllLinkDisconnected(prGlueInfo->prAdapter); - /*wait 300ms for BoW module to send deauth*/ - kalMsleep(300); - } -#endif - - //4 <1> Stopping handling interrupt and free IRQ - glBusFreeIrq(prDev, *((P_GLUE_INFO_T *) netdev_priv(prDev))); - - kalMemSet(&(prGlueInfo->prAdapter->rWlanInfo), 0, sizeof(WLAN_INFO_T)); - - flush_delayed_work_sync(&workq); - - down(&g_halt_sem); - g_u4HaltFlag = 1; - - //4 <2> Mark HALT, notify main thread to stop, and clean up queued requests - prGlueInfo->u4Flag |= GLUE_FLAG_HALT; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - /* wait main thread stops */ - wait_for_completion_interruptible(&prGlueInfo->rHaltComp); - - DBGLOG(INIT, INFO, ("mtk_sdiod stopped\n")); - - //prGlueInfo->rHifInfo.main_thread = NULL; - prGlueInfo->main_thread = NULL; - -#if CFG_ENABLE_BT_OVER_WIFI - if(prGlueInfo->rBowInfo.fgIsRegistered) { - glUnregisterAmpc(prGlueInfo); - } -#endif - - - //4 <3> Remove /proc filesystem. -#ifdef WLAN_INCLUDE_PROC - procRemoveProcfs(prDev, NIC_DEVICE_ID_LOW); -#endif /* WLAN_INCLUDE_PROC */ - - //4 <4> wlanAdapterStop - prAdapter = prGlueInfo->prAdapter; - - wlanAdapterStop(prAdapter); - DBGLOG(INIT, INFO, ("Number of Stalled Packets = %ld\n", prGlueInfo->i4TxPendingFrameNum)); - - //4 <5> Release the Bus - glBusRelease(prDev); - - up(&g_halt_sem); - - //4 <6> Unregister the card - wlanNetUnregister(prDev->ieee80211_ptr); - - //4 <7> Destroy the device - wlanNetDestroy(prDev->ieee80211_ptr); - prDev = NULL; - mt5931_power_off(); - - return; -} /* end of wlanRemove() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Entry Point -static int __init initWlan(void) -{ - int ret = 0; - - DBGLOG(INIT, INFO, ("initWlan\n")); - - //mt5931_power_on(); - //omap_mmc_update_mtk_card_status(1); - - /* memory pre-allocation */ - kalInitIOBuffer(); - - - //return ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - ret = ((glRegisterBus(wlanProbe, wlanRemove) == WLAN_STATUS_SUCCESS) ? 0: -EIO); - - if (ret == -EIO) { - kalUninitIOBuffer(); - return ret; - } - - -#if defined(CONFIG_HAS_EARLYSUSPEND) - - glRegisterEarlySuspend(&mt6620_early_suspend_desc, wlan_early_suspend, wlan_late_resume); - wlanRegisterNotifier(); -#endif - -#if (CFG_CHIP_RESET_SUPPORT) - glResetInit(); -#endif - - return ret; -} /* end of initWlan() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -static VOID __exit exitWlan(void) -{ - //printk("remove %p\n", wlanRemove); -#if defined(CONFIG_HAS_EARLYSUSPEND) - glUnregisterEarlySuspend(&mt6620_early_suspend_desc); -#endif - wlanUnregisterNotifier(); - -#if CFG_CHIP_RESET_SUPPORT - glResetUninit(); -#endif - - glUnregisterBus(wlanRemove); - - /* free pre-allocated memory */ - kalUninitIOBuffer(); - - //mt5931_power_off(); - //omap_mmc_update_mtk_card_status(0); - - DBGLOG(INIT, INFO, ("exitWlan\n")); - - return; -} /* end of exitWlan() */ - -module_init(initWlan); -module_exit(exitWlan); -#if 0 -/* export necessary symbol for p2p driver using */ -#if CFG_ENABLE_WIFI_DIRECT -EXPORT_SYMBOL(wlanSubModRegisterInitExit); -EXPORT_SYMBOL(wlanSubModExit); -EXPORT_SYMBOL(wlanSubModInit); - -EXPORT_SYMBOL(nicPmIndicateBssCreated); -EXPORT_SYMBOL(rlmProcessAssocRsp); -EXPORT_SYMBOL(kalSetEvent); -EXPORT_SYMBOL(rlmBssInitForAPandIbss); -EXPORT_SYMBOL(kalEnqueueCommand); -EXPORT_SYMBOL(nicIncreaseTxSeqNum); -EXPORT_SYMBOL(nicCmdEventQueryAddress); -EXPORT_SYMBOL(bssCreateStaRecFromBssDesc); -EXPORT_SYMBOL(rlmBssAborted); -EXPORT_SYMBOL(cnmStaRecResetStatus); -EXPORT_SYMBOL(mqmProcessAssocRsp); -EXPORT_SYMBOL(nicTxReturnMsduInfo); -EXPORT_SYMBOL(nicTxEnqueueMsdu); -EXPORT_SYMBOL(wlanProcessSecurityFrame); -EXPORT_SYMBOL(nicChannelNum2Freq); -EXPORT_SYMBOL(nicUpdateBss); -EXPORT_SYMBOL(wlanSendSetQueryCmd); -EXPORT_SYMBOL(cnmStaRecAlloc); -EXPORT_SYMBOL(cnmTimerInitTimer); -EXPORT_SYMBOL(rateGetRateSetFromIEs); -EXPORT_SYMBOL(nicOidCmdTimeoutCommon); -EXPORT_SYMBOL(cnmStaRecChangeState); -EXPORT_SYMBOL(rateGetDataRatesFromRateSet); -EXPORT_SYMBOL(cnmMgtPktAlloc); -EXPORT_SYMBOL(cnmMgtPktFree); -EXPORT_SYMBOL(wextSrchDesiredWPAIE); -EXPORT_SYMBOL(nicRxReturnRFB); -EXPORT_SYMBOL(cnmTimerStartTimer); -EXPORT_SYMBOL(cmdBufAllocateCmdInfo); -EXPORT_SYMBOL(cnmGetStaRecByAddress); -EXPORT_SYMBOL(nicMediaStateChange); -EXPORT_SYMBOL(bssUpdateBeaconContent); -EXPORT_SYMBOL(kalIoctl); -EXPORT_SYMBOL(nicActivateNetwork); -EXPORT_SYMBOL(nicDeactivateNetwork); -EXPORT_SYMBOL(kalRandomNumber); -EXPORT_SYMBOL(nicCmdEventSetCommon); -EXPORT_SYMBOL(cnmTimerStopTimer); -EXPORT_SYMBOL(nicIncreaseCmdSeqNum); -EXPORT_SYMBOL(authSendDeauthFrame); -EXPORT_SYMBOL(cnmMemAlloc); -EXPORT_SYMBOL(nicPmIndicateBssAbort); -EXPORT_SYMBOL(nicCmdEventSetIpAddress); -EXPORT_SYMBOL(mboxSendMsg); -EXPORT_SYMBOL(scanSearchBssDescByBssid); -EXPORT_SYMBOL(bssRemoveStaRecFromClientList); -EXPORT_SYMBOL(assocProcessRxDisassocFrame); -EXPORT_SYMBOL(authProcessRxDeauthFrame); -EXPORT_SYMBOL(cnmStaRecFree); -EXPORT_SYMBOL(rNonHTPhyAttributes); -EXPORT_SYMBOL(rNonHTApModeAttributes); -EXPORT_SYMBOL(cnmMemFree); -EXPORT_SYMBOL(wlanExportGlueInfo); -EXPORT_SYMBOL(bssInitForAP); -EXPORT_SYMBOL(nicPmIndicateBssConnected); -EXPORT_SYMBOL(rlmRspGenerateHtOpIE); -EXPORT_SYMBOL(bssGenerateExtSuppRate_IE); -EXPORT_SYMBOL(rlmRspGenerateErpIE); -EXPORT_SYMBOL(rlmRspGenerateHtCapIE); -EXPORT_SYMBOL(cnmGetStaRecByIndex); -EXPORT_SYMBOL(rsnGenerateWpaNoneIE); -EXPORT_SYMBOL(rlmRspGenerateExtCapIE); -EXPORT_SYMBOL(rsnGenerateRSNIE); -EXPORT_SYMBOL(rsnParseRsnIE); -#if CFG_SUPPORT_WPS -EXPORT_SYMBOL(wextSrchDesiredWPSIE); -#endif -EXPORT_SYMBOL(mboxDummy); -EXPORT_SYMBOL(saaFsmRunEventStart); -EXPORT_SYMBOL(saaFsmRunEventAbort); -EXPORT_SYMBOL(cnmP2PIsPermitted); -EXPORT_SYMBOL(cnmBss40mBwPermitted); -EXPORT_SYMBOL(mqmGenerateWmmParamIE); -EXPORT_SYMBOL(cnmPreferredChannel); -EXPORT_SYMBOL(bssAddStaRecToClientList); -EXPORT_SYMBOL(nicQmUpdateWmmParms); -EXPORT_SYMBOL(qmFreeAllByNetType); -EXPORT_SYMBOL(wlanQueryInformation); -EXPORT_SYMBOL(nicConfigPowerSaveProfile); -EXPORT_SYMBOL(scanSearchExistingBssDesc); -EXPORT_SYMBOL(scanAllocateBssDesc); -EXPORT_SYMBOL(wlanProcessCommandQueue); -EXPORT_SYMBOL(wlanAcquirePowerControl); -EXPORT_SYMBOL(wlanReleasePowerControl); -EXPORT_SYMBOL(wlanReleasePendingCMDbyNetwork); -#if DBG -EXPORT_SYMBOL(aucDebugModule); -EXPORT_SYMBOL(fgIsBusAccessFailed); -EXPORT_SYMBOL(allocatedMemSize); -EXPORT_SYMBOL(dumpMemory8); -EXPORT_SYMBOL(dumpMemory32); -#endif -EXPORT_SYMBOL(rlmDomainIsLegalChannel); -EXPORT_SYMBOL(scnQuerySparseChannel); -EXPORT_SYMBOL(rlmDomainGetChnlList); -EXPORT_SYMBOL(p2pSetMulticastListWorkQueueWrapper); -EXPORT_SYMBOL(nicUpdateRSSI); -EXPORT_SYMBOL(nicCmdEventQueryLinkQuality); -EXPORT_SYMBOL(kalGetMediaStateIndicated); -EXPORT_SYMBOL(nicFreq2ChannelNum); -EXPORT_SYMBOL(assocSendDisAssocFrame); -EXPORT_SYMBOL(nicUpdateBeaconIETemplate); -EXPORT_SYMBOL(rsnParseCheckForWFAInfoElem); -EXPORT_SYMBOL(kalClearMgmtFramesByNetType); -EXPORT_SYMBOL(kalClearSecurityFramesByNetType); -EXPORT_SYMBOL(nicFreePendingTxMsduInfoByNetwork); -EXPORT_SYMBOL(bssComposeBeaconProbeRespFrameHeaderAndFF); -EXPORT_SYMBOL(bssBuildBeaconProbeRespFrameCommonIEs); -EXPORT_SYMBOL(wlanoidSetWapiAssocInfo); -EXPORT_SYMBOL(wlanoidSetWSCAssocInfo); -#endif -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_kal.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_kal.c deleted file mode 100755 index 306f8a687403..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_kal.c +++ /dev/null @@ -1,4056 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/gl_kal.c#1 $ -*/ - -/*! \file gl_kal.c - \brief GLUE Layer will export the required procedures here for internal driver stack. - - This file contains all routines which are exported from GLUE Layer to internal - driver stack. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_kal.c $ -** -** 09 14 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync changes on roaming to an unindicated BSS under cfg80211. -** -** 09 04 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** sync for NVRAM warning scan result generation for CFG80211. -** -** 08 30 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** check pending scan only by the pointer instead of fgIsRegistered flag. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 08 24 2012 yuche.tsai -** NULL -** Fix bug of invitation request. -** -** 08 20 2012 yuche.tsai -** NULL -** Try to fix frame register KE issue. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 05 31 2012 terry.wu - * NULL - * . - * - * 03 26 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * invoke put_cred() after get_current_cred() calls. - * - * 03 07 2012 yuche.tsai - * NULL - * Fix compile error when WiFi Direct is off. - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 20 2012 cp.wu - * [WCXRP00001187] [MT6620 Wi-Fi][Driver][Android] Add error handling while firmware image doesn't exist - * do not need to invoke free() while firmware image file doesn't exist - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 21 2011 cp.wu - * [WCXRP00001118] [MT6620 Wi-Fi][Driver] Corner case protections to pass Monkey testing - * 1. wlanoidQueryBssIdList might be passed with a non-zero length but a NULL pointer of buffer - * add more checking for such cases - * - * 2. kalSendComplete() might be invoked with a packet belongs to P2P network right after P2P is unregistered. - * add some tweaking to protect such cases because that net device has become invalid. - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 yuche.tsai - * [WCXRP00000998] [Volunteer Patch][WiFi Direct][FW] P2P Social Channel & country domain issue - * Regulation domain feature check in. - * - * 08 12 2011 cp.wu - * [WCXRP00000913] [MT6620 Wi-Fi] create repository of source code dedicated for MT6620 E6 ASIC - * load WIFI_RAM_CODE_E6 for MT6620 E6 ASIC. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 06 13 2011 eddie.chen - * [WCXRP00000779] [MT6620 Wi-Fi][DRV] Add tx rx statistics in linux and use netif_rx_ni - * Add tx rx statistics and netif_rx_ni. - * - * 04 15 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW short range mode. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * correct i4TxPendingFrameNum decreasing. - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability for compatible with linux 2.6.12. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * refix ... - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * correct compiling warning/error. - * - * 03 18 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * add more robust fault tolerance design when pre-allocation failed. (rarely happen) - * - * 03 17 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * use pre-allocated buffer for storing enhanced interrupt response as well - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 14 2011 jeffrey.chang - * [WCXRP00000546] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] fix kernel build warning message - * fix kernel build warning message - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 01 24 2011 cp.wu - * [WCXRP00000382] [MT6620 Wi-Fi][Driver] Track forwarding packet number with notifying tx thread for serving - * 1. add an extra counter for tracking pending forward frames. - * 2. notify TX service thread as well when there is pending forward frame - * 3. correct build errors leaded by introduction of Wi-Fi direct separation module - * - * 01 19 2011 cp.wu - * [WCXRP00000371] [MT6620 Wi-Fi][Driver] make linux glue layer portable for Android 2.3.1 with Linux 2.6.35.7 - * add compile option to check linux version 2.6.35 for different usage of system API to improve portability - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 11 02 2010 jeffrey.chang - * [WCXRP00000145] [MT6620 Wi-Fi][Driver] fix issue of byte endian in packet classifier which discards BoW packets - * . - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 26 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000137] [MT6620 Wi-Fi] [FW] Support NIC capability query command - * 1) update NVRAM content template to ver 1.02 - * 2) add compile option for querying NIC capability (default: off) - * 3) modify AIS 5GHz support to run-time option, which could be turned on by registry or NVRAM setting - * 4) correct auto-rate compiler error under linux (treat warning as error) - * 5) simplify usage of NVRAM and REG_INFO_T - * 6) add version checking between driver and firmware - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant code which cause mismatch of power control release - * - * 10 25 2010 jeffrey.chang - * [WCXRP00000129] [MT6620] [Driver] Kernel panic when rmmod module on Andriod platform - * Remove redundant GLUE_HALT condfition to avoid unmatched release of power control - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 06 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * if there is NVRAM, then use MAC address on NVRAM as default MAC address. - * - * 10 06 2010 cp.wu - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * code reorganization to improve isolation between GLUE and CORE layers. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 30 2010 cp.wu - * NULL - * API added: nicTxPendingPackets(), for simplifying porting layer - * - * 08 20 2010 yuche.tsai - * NULL - * Support second interface indicate when enabling P2P. - * - * 08 18 2010 yarco.yang - * NULL - * 1. Fixed HW checksum offload function not work under Linux issue. - * 2. Add debug message. - * - * 08 16 2010 jeffrey.chang - * NULL - * remove redundant code which cause kernel panic - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 23 2010 jeffrey.chang - * - * bug fix: allocate regInfo when disabling firmware download - * - * 07 23 2010 jeffrey.chang - * - * use glue layer api to decrease or increase counter atomically - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add spinlock for pending security frame count - * - * 07 19 2010 jeffrey.chang - * - * adjust the timer unit to microsecond - * - * 07 19 2010 jeffrey.chang - * - * timer should return value greater than zero - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 yarco.yang - * [WPD00003837][MT6620]Data Path Refine - * Merge g_arStaRec[] into adapter->arStaRec[] - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * remove unused files. - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * workaround for fixing request_firmware() failure on android 2.1 - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix kernel panic when debug mode enabled - * - * 05 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) Modify set mac address code - * 2) remove power managment macro - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Disable network interface after disassociation - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 15 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * change firmware name - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * flush pending TX packets while unloading driver - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set driver own before handling cmd queue - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * 2) fix ioctl - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add spinlock for i4TxPendingFrameNum access - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix spinlock usage - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Set MAC address from firmware - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1. free cmdinfo after command is emiited. - * 2. for BoW frames, user priority is extracted from sk_buff directly. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * (2) fix spin lock - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * 2) add 2 kal API for later integration - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * raising the priority of processing interrupt - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Bug fix: the tx thread will cause starvation of MMC thread, and the interrupt will never come in - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding secondary command queue for improving non-glue code portability - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download kal api - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\50 2009-09-28 20:19:08 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\49 2009-08-18 22:56:44 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\48 2009-06-23 23:18:58 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\47 2008-11-19 11:55:43 GMT mtk01088 -** fixed some lint warning, and rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\46 2008-09-02 21:07:42 GMT mtk01461 -** Remove ASSERT(pvBuf) in kalIndicateStatusAndComplete(), this parameter can be NULL -** \main\maintrunk.MT5921\45 2008-08-29 16:03:21 GMT mtk01088 -** remove non-used code for code review, add assert check -** \main\maintrunk.MT5921\44 2008-08-21 00:32:49 GMT mtk01461 -** \main\maintrunk.MT5921\43 2008-05-30 20:27:02 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\42 2008-05-30 15:47:29 GMT mtk01461 -** \main\maintrunk.MT5921\41 2008-05-30 15:13:04 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\40 2008-05-29 14:15:14 GMT mtk01084 -** remove un-used KAL function -** \main\maintrunk.MT5921\39 2008-05-03 15:17:30 GMT mtk01461 -** Move Query Media Status to GLUE -** \main\maintrunk.MT5921\38 2008-04-24 11:59:44 GMT mtk01461 -** change awake queue threshold and remove code which mark #if 0 -** \main\maintrunk.MT5921\37 2008-04-17 23:06:35 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\36 2008-04-08 15:38:56 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\35 2008-04-01 23:53:13 GMT mtk01461 -** Add comment -** \main\maintrunk.MT5921\34 2008-03-26 15:36:48 GMT mtk01461 -** Add update MAC Address for Linux -** \main\maintrunk.MT5921\33 2008-03-18 11:49:34 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\32 2008-03-18 10:25:22 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\31 2008-03-06 23:43:08 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\30 2008-02-26 09:47:57 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\29 2008-02-12 23:26:53 GMT mtk01461 -** Add debug option - Packet Order for Linux -** \main\maintrunk.MT5921\28 2008-01-09 17:54:43 GMT mtk01084 -** modify the argument of kalQueryPacketInfo() -** \main\maintrunk.MT5921\27 2007-12-24 16:02:03 GMT mtk01425 -** 1. Revise csum offload -** \main\maintrunk.MT5921\26 2007-11-30 17:03:36 GMT mtk01425 -** 1. Fix bugs -** -** \main\maintrunk.MT5921\25 2007-11-29 01:57:17 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\24 2007-11-20 11:24:07 GMT mtk01088 -** CR90, not doing the netif_carrier_off to let supplicant 1x pkt can be rcv at hardstattXmit -** \main\maintrunk.MT5921\23 2007-11-09 16:36:44 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\22 2007-11-07 18:37:39 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\21 2007-11-06 19:34:06 GMT mtk01088 -** add the WPS code, indicate the mgmt frame to upper layer -** \main\maintrunk.MT5921\20 2007-11-02 01:03:21 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\19 2007-10-30 11:59:38 GMT MTK01425 -** 1. Update wlanQueryInformation -** \main\maintrunk.MT5921\18 2007-10-30 10:44:57 GMT mtk01425 -** 1. Refine multicast list code -** 2. Refine TCP/IP csum offload code -** -** Revision 1.5 2007/07/17 13:01:18 MTK01088 -** add associate req and rsp function -** -** Revision 1.4 2007/07/13 05:19:19 MTK01084 -** provide timer set functions -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext.h" -#include "precomp.h" -#ifdef CFG_DUAL_ANTENNA -#include "mtk_porting.h" -#include "dual_ant_bwcs.h" -#endif - - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -#if DBG -int allocatedMemSize = 0; -#endif - -extern struct semaphore g_halt_sem; -extern int g_u4HaltFlag; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static PVOID pvIoBuffer = NULL; -static UINT_32 pvIoBufferSize = 0; -static UINT_32 pvIoBufferUsage = 0; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(MT6620) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_WMTHWVER_TYPE_T{ - WMTHWVER_MT6620_E1 = 0x0, - WMTHWVER_MT6620_E2 = 0x1, - WMTHWVER_MT6620_E3 = 0x2, - WMTHWVER_MT6620_E4 = 0x3, - WMTHWVER_MT6620_E5 = 0x4, - WMTHWVER_MT6620_E6 = 0x5, - WMTHWVER_MT6620_MAX, - WMTHWVER_INVALID = 0xff -} ENUM_WMTHWVER_TYPE_T, *P_ENUM_WMTHWVER_TYPE_T; - -extern ENUM_WMTHWVER_TYPE_T -mtk_wcn_wmt_hwver_get( - VOID - ); -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT -typedef enum _ENUM_HWVER_TYPE_T{ - HWVER_MT5931_E1 = 0x1, - HWVER_MT5931_E2 = 0x2, - HWVER_MT5931_E3 = 0x3, - HWVER_MT5931_MAX, - HWVER_INVALID = 0xff -} ENUM_HWVER_TYPE_T, *P_ENUM_HWVER_TYPE_T; -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_ENABLE_FW_DOWNLOAD - -static struct file *filp = NULL; -static uid_t orgfsuid; -static gid_t orgfsgid; -static mm_segment_t orgfs; - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* open firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareOpen ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - /* FIX ME: since we don't have hotplug script in the filesystem - * , so the request_firmware() KAPI can not work properly - */ - - /* save uid and gid used for filesystem access. - * set user and group to 0(root) */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - orgfsuid = current->fsuid; - orgfsgid = current->fsgid; - current->fsuid = current->fsgid = 0; -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#else - struct cred *cred = get_task_cred(current); - orgfsuid = cred->fsuid; - orgfsgid = cred->fsgid; - cred->fsuid = cred->fsgid = 0; -#endif - - ASSERT(prGlueInfo); - - - orgfs = get_fs(); - set_fs(get_ds()); - - - /* open the fw file */ -#if defined(MT6620) & CFG_MULTI_ECOVER_SUPPORT - switch(mtk_wcn_wmt_hwver_get()) { - case WMTHWVER_MT6620_E1: - case WMTHWVER_MT6620_E2: - case WMTHWVER_MT6620_E3: - case WMTHWVER_MT6620_E4: - case WMTHWVER_MT6620_E5: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - - case WMTHWVER_MT6620_E6: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E6", O_RDONLY, 0); - break; - } -#elif defined(MT5931) && CFG_MULTI_ECOVER_SUPPORT - switch (wlanGetEcoVersion(prGlueInfo->prAdapter)) { - case HWVER_MT5931_E1: - case HWVER_MT5931_E2: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_E2", O_RDONLY, 0); - break; - case HWVER_MT5931_E3: - default: - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); - break; - } -#elif defined(MT6628) - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME"_MT6628", O_RDONLY, 0); -#else - filp = filp_open("/etc/firmware/"CFG_FW_FILENAME, O_RDONLY, 0); -#endif - if (IS_ERR(filp)) { - DBGLOG(INIT, INFO, ("Open FW image: %s failed\n", CFG_FW_FILENAME)); - goto error_open; - } - DBGLOG(INIT, INFO, ("Open FW image: %s done\n", CFG_FW_FILENAME)); - return WLAN_STATUS_SUCCESS; - -error_open: - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif -#endif - return WLAN_STATUS_FAILURE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* release firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareClose ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - if ((filp != NULL) && !IS_ERR(filp)) { - /* close firmware file */ - filp_close(filp, NULL); - - /* restore */ - set_fs(orgfs); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - current->fsuid = orgfsuid; - current->fsgid = orgfsgid; -#else - { -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - struct cred *cred = (struct cred *) get_current_cred(); -#else - struct cred *cred = get_task_cred(current); -#endif - cred->fsuid = orgfsuid; - cred->fsgid = orgfsgid; - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) - put_cred(cred); - #endif - } -#endif - filp = NULL; - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* load firmware image in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalFirmwareLoad ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID prBuf, - IN UINT_32 u4Offset, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - ASSERT(prBuf); - - //l = filp->f_path.dentry->d_inode->i_size; - - /* the object must have a read method */ - if ((filp == NULL) || IS_ERR(filp) || (filp->f_op == NULL) || (filp->f_op->read == NULL)) { - goto error_read; - } else { - filp->f_pos = u4Offset; - *pu4Size = filp->f_op->read(filp, prBuf, *pu4Size, &filp->f_pos); - } - - return WLAN_STATUS_SUCCESS; - -error_read: - return WLAN_STATUS_FAILURE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to -* query firmware image size in kernel space -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ - -WLAN_STATUS -kalFirmwareSize ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_32 pu4Size - ) -{ - ASSERT(prGlueInfo); - ASSERT(pu4Size); - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - *pu4Size = filp->f_path.dentry->d_inode->i_size; -#else - *pu4Size = filp->f_dentry->d_inode->i_size; -#endif - - return WLAN_STATUS_SUCCESS; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - /* <1> Open firmware */ - if (kalFirmwareOpen(prGlueInfo) != WLAN_STATUS_SUCCESS) { - break; - } else { - UINT_32 u4FwSize = 0; - PVOID prFwBuffer = NULL; - /* <2> Query firmare size */ - kalFirmwareSize(prGlueInfo, &u4FwSize); - /* <3> Use vmalloc for allocating large memory trunk */ - prFwBuffer = vmalloc(ALIGN_4(u4FwSize)); - /* <4> Load image binary into buffer */ - if (kalFirmwareLoad(prGlueInfo, prFwBuffer, 0, &u4FwSize) != WLAN_STATUS_SUCCESS) { - vfree(prFwBuffer); - kalFirmwareClose(prGlueInfo); - break; - } - /* <5> write back info */ - *pu4FileLength = u4FwSize; - *ppvMapFileBuf = prFwBuffer; - - return prFwBuffer; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - - /* pvMapFileBuf might be NULL when file doesn't exist */ - if(pvMapFileBuf) { - vfree(pvMapFileBuf); - } - - kalFirmwareClose(prGlueInfo); -} - -#endif - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to load firmware image -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param ppvMapFileBuf Pointer of pointer to memory-mapped firmware image -* \param pu4FileLength File length and memory mapped length as well - -* \retval Map File Handle, used for unammping -*/ -/*----------------------------------------------------------------------------*/ - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ) -{ - INT_32 i4Ret = 0; - - DEBUGFUNC("kalFirmwareImageMapping"); - - ASSERT(prGlueInfo); - ASSERT(ppvMapFileBuf); - ASSERT(pu4FileLength); - - do { - GL_HIF_INFO_T *prHifInfo = &prGlueInfo->rHifInfo; - prGlueInfo->prFw = NULL; - - /* <1> Open firmware */ - i4Ret = request_firmware(&prGlueInfo->prFw, CFG_FW_FILENAME, &prHifInfo->func->dev); - - if (i4Ret) { - printk (KERN_INFO DRV_NAME"fw %s:request failed %d\n", CFG_FW_FILENAME, i4Ret); - break; - } else { - *pu4FileLength = prGlueInfo->prFw->size; - *ppvMapFileBuf = prGlueInfo->prFw->data; - return prGlueInfo->prFw->data; - } - - } while (FALSE); - - return NULL; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to unload firmware image mapped memory -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* \param pvFwHandle Pointer to mapping handle -* \param pvMapFileBuf Pointer to memory-mapped firmware image -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ) -{ - DEBUGFUNC("kalFirmwareImageUnmapping"); - - ASSERT(prGlueInfo); - ASSERT(pvMapFileBuf); - - release_firmware(prGlueInfo->prFw); - -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to acquire -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[out] pu4Flags Pointer of a variable for saving IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ) -{ - UINT_32 u4Flags = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Flags); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_lock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_lock_irqsave(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - *pu4Flags = u4Flags; - } - - return; -} /* end of kalAcquireSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to release -* OS SPIN_LOCK. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] rLockCategory Specify which SPIN_LOCK -* \param[in] u4Flags Saved IRQ flags -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseSpinLock ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ) -{ - ASSERT(prGlueInfo); - - if (rLockCategory < SPIN_LOCK_NUM) { - -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - spin_unlock_bh(&prGlueInfo->rSpinLock[rLockCategory]); -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - spin_unlock_irqrestore(&prGlueInfo->rSpinLock[rLockCategory], u4Flags); -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - } - - return; -} /* end of kalReleaseSpinLock() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is provided by GLUE Layer for internal driver stack to update -* current MAC address. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pucMacAddr Pointer of current MAC address -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateMACAddress ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ) -{ - ASSERT(prGlueInfo); - ASSERT(pucMacAddr); - - if(UNEQUAL_MAC_ADDR(prGlueInfo->prDevHandler->dev_addr, pucMacAddr)) { - memcpy(prGlueInfo->prDevHandler->dev_addr, pucMacAddr, PARAM_MAC_ADDR_LEN); - } - - return; -} - - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -/*----------------------------------------------------------------------------*/ -/*! -* \brief To query the packet information for offload related parameters. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryTxChksumOffloadParam ( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag - ) -{ - struct sk_buff *skb = (struct sk_buff *) pvPacket; - UINT_8 ucFlag = 0; - - ASSERT(pvPacket); - ASSERT(pucFlag); - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) - if (skb->ip_summed == CHECKSUM_HW) -#else - if (skb->ip_summed == CHECKSUM_PARTIAL) -#endif - { - -#if DBG - /* Kevin: do double check, we can remove this part in Normal Driver. - * Because we register NIC feature with NETIF_F_IP_CSUM for MT5912B MAC, so - * we'll process IP packet only. - */ - if (skb->protocol != __constant_htons(ETH_P_IP)) { - //printk("Wrong skb->protocol( = %08x) for TX Checksum Offload.\n", skb->protocol); - } - else -#endif - ucFlag |= (TX_CS_IP_GEN | TX_CS_TCP_UDP_GEN); - } - - *pucFlag = ucFlag; - - return; -} /* kalQueryChksumOffloadParam */ - - -//4 2007/10/8, mikewu, this is rewritten by Mike -/*----------------------------------------------------------------------------*/ -/*! -* \brief To update the checksum offload status to the packet to be indicated to OS. -* -* \param[in] pvPacket Pointer to the packet descriptor. -* \param[in] pucFlag Points to the offload related parameter. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRxCSUMOffloadParam ( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ) -{ - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - ASSERT(pvPacket); - - if ( (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_SUCCESS || aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_SUCCESS)&& - ( (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_SUCCESS) || (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_SUCCESS)) ) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - } - else { - skb->ip_summed = CHECKSUM_NONE; -#if DBG - if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_NONE && aeCSUM[CSUM_TYPE_IPV6] == CSUM_RES_NONE) { - DBGLOG(RX, TRACE, ("RX: \"non-IPv4/IPv6\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_IPV4] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad IP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_TCP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad TCP Checksum\" Packet\n")); - } - else if (aeCSUM[CSUM_TYPE_UDP] == CSUM_RES_FAILED) { - DBGLOG(RX, TRACE, ("RX: \"bad UDP Checksum\" Packet\n")); - } - else { - - } -#endif - } - -} /* kalUpdateRxCSUMOffloadParam */ -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is called to free packet allocated from kalPacketAlloc. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of the packet descriptor -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - dev_kfree_skb((struct sk_buff *) pvPacket); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Only handles driver own creating packet (coalescing buffer). -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param u4Size Pointer of Packet Handle -* \param ppucData Status Code for OS upper layer -* -* \return NULL: Failed to allocate skb, Not NULL get skb -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalPacketAlloc ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ) -{ - struct sk_buff *prSkb = dev_alloc_skb(u4Size); - - if (prSkb) { - *ppucData = (PUINT_8) (prSkb->data); - } -#if DBG -{ - PUINT_32 pu4Head = (PUINT_32)&prSkb->cb[0]; - *pu4Head = (UINT_32)prSkb->head; - DBGLOG(RX, TRACE, ("prSkb->head = %#lx, prSkb->cb = %#lx\n", (UINT_32)prSkb->head, *pu4Head)); -} -#endif - return (PVOID) prSkb; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Process the received packet for indicating to OS. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] pvPacket Pointer of the packet descriptor -* \param[in] pucPacketStart The starting address of the buffer of Rx packet. -* \param[in] u4PacketLen The packet length. -* \param[in] pfgIsRetain Is the packet to be retained. -* \param[in] aerCSUM The result of TCP/ IP checksum offload. -* -* \retval WLAN_STATUS_SUCCESS. -* \retval WLAN_STATUS_FAILURE. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalProcessRxPacket ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aerCSUM[] - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - struct sk_buff *skb = (struct sk_buff *)pvPacket; - - - skb->data = (unsigned char *)pucPacketStart; - skb->tail = (unsigned char *) ((UINT_32) (pucPacketStart + u4PacketLen)); - skb->len = (unsigned int)u4PacketLen; - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - kalUpdateRxCSUMOffloadParam(skb, aerCSUM); -#endif - - return rStatus; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate an array of received packets is available for higher -* level protocol uses. -* -* \param[in] prGlueInfo Pointer to the Adapter structure. -* \param[in] apvPkts The packet array to be indicated -* \param[in] ucPktNum The number of packets to be indicated -* -* \retval TRUE Success. -* -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -kalRxIndicatePkts ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ) -{ - UINT_8 ucIdx = 0; - struct net_device *prNetDev = prGlueInfo->prDevHandler; - struct sk_buff *prSkb = NULL; - - ASSERT(prGlueInfo); - ASSERT(apvPkts); - -#if CFG_BOW_TEST - UINT_32 i; -#endif - - for(ucIdx = 0; ucIdx < ucPktNum; ucIdx++) { - prSkb = apvPkts[ucIdx]; -#if DBG - do { - PUINT_8 pu4Head = (PUINT_8)&prSkb->cb[0]; - UINT_32 u4HeadValue = 0; - kalMemCopy(&u4HeadValue, pu4Head, sizeof(u4HeadValue)); - DBGLOG(RX, TRACE, ("prSkb->head = 0x%p, prSkb->cb = 0x%lx\n", pu4Head, u4HeadValue)); - } while (0); -#endif - - if (GLUE_GET_PKT_IS_P2P(prSkb)) { - /* P2P */ -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered) { - prNetDev = kalP2PGetDevHdlr(prGlueInfo); - } - - prNetDev->stats.rx_bytes += prSkb->len; - prNetDev->stats.rx_packets++; - -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else if (GLUE_GET_PKT_IS_PAL(prSkb)) { - /* BOW */ -#if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_SEPARATE_DATA_PATH - if (prGlueInfo->rBowInfo.fgIsNetRegistered) { - prNetDev = prGlueInfo->rBowInfo.prDevHandler; - } -#else - prNetDev = prGlueInfo->prDevHandler; -#endif - } - else { - /* AIS */ - prNetDev = prGlueInfo->prDevHandler; - prGlueInfo->rNetDevStats.rx_bytes += prSkb->len; - prGlueInfo->rNetDevStats.rx_packets++; - - } - - prNetDev->last_rx = jiffies; - prSkb->protocol = eth_type_trans(prSkb, prNetDev); - prSkb->dev = prNetDev; - //DBGLOG_MEM32(RX, TRACE, (PUINT_32)prSkb->data, prSkb->len); - DBGLOG(RX, EVENT, ("kalRxIndicatePkts len = %d\n", prSkb->len)); - -#if CFG_BOW_TEST - DBGLOG(BOW, TRACE, ("Rx sk_buff->len: %d\n", prSkb->len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data_len: %d\n", prSkb->data_len)); - DBGLOG(BOW, TRACE, ("Rx sk_buff->data:\n")); - - for(i = 0; i < prSkb->len; i++) - { - DBGLOG(BOW, TRACE, ("%4x", prSkb->data[i])); - - if((i+1)%16 ==0) - { - DBGLOG(BOW, TRACE, ("\n")); - } - } - - DBGLOG(BOW, TRACE, ("\n")); -#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) - if(!in_interrupt()){ - netif_rx_ni(prSkb); /* only in non-interrupt context */ - } - else { - netif_rx(prSkb); - } -#else - netif_rx(prSkb); -#endif - - wlanReturnPacket(prGlueInfo->prAdapter, NULL); - } - - return WLAN_STATUS_SUCCESS; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Called by driver to indicate event to upper layer, for example, the wpa -* supplicant or wireless tools. -* -* \param[in] pvAdapter Pointer to the adapter descriptor. -* \param[in] eStatus Indicated status. -* \param[in] pvBuf Indicated message buffer. -* \param[in] u4BufLen Indicated message buffer size. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateStatusAndComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ) -{ - UINT_32 bufLen; - P_PARAM_STATUS_INDICATION_T pStatus = (P_PARAM_STATUS_INDICATION_T) pvBuf; - P_PARAM_AUTH_EVENT_T pAuth = (P_PARAM_AUTH_EVENT_T) pStatus; - P_PARAM_PMKID_CANDIDATE_LIST_T pPmkid = - (P_PARAM_PMKID_CANDIDATE_LIST_T) (pStatus + 1); - PARAM_MAC_ADDRESS arBssid; - struct cfg80211_scan_request *prScanRequest = NULL; - PARAM_SSID_T ssid; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_bss *bss; - UINT_8 ucChannelNum; - P_BSS_DESC_T prBssDesc = NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - kalMemZero(arBssid, MAC_ADDR_LEN); - - ASSERT(prGlueInfo); - - switch (eStatus) { - case WLAN_STATUS_ROAM_OUT_FIND_BEST: - case WLAN_STATUS_MEDIA_CONNECT: - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_CONNECTED; - - /* indicate assoc event */ - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBssid, - &arBssid[0], - sizeof(arBssid), - &bufLen); - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, arBssid, bufLen); - - /* switch netif on */ - netif_carrier_on(prGlueInfo->prDevHandler); - - - do { - /* print message on console */ - wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuerySsid, - &ssid, - sizeof(ssid), - &bufLen); - - ssid.aucSsid[(ssid.u4SsidLen >= PARAM_MAX_LEN_SSID) ? - (PARAM_MAX_LEN_SSID - 1) : ssid.u4SsidLen ] = '\0'; - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_on [ssid:%s " MACSTR "]\n", - prGlueInfo->prDevHandler->name, - ssid.aucSsid, - MAC2STR(arBssid))); - } while(0); - - if(prGlueInfo->fgIsRegistered == TRUE) { - /* retrieve channel */ - ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - /* ensure BSS exists */ - bss = cfg80211_get_bss(priv_to_wiphy(prGlueInfo), prChannel, arBssid, - ssid.aucSsid, ssid.u4SsidLen, - WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); - - if(bss == NULL) { - /* create BSS on-the-fly */ - prBssDesc = wlanGetTargetBssDescByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - - if(prBssDesc != NULL) { - bss = cfg80211_inform_bss(priv_to_wiphy(prGlueInfo), - prChannel, - arBssid, - 0, /* TSF */ - WLAN_CAPABILITY_ESS, - prBssDesc->u2BeaconInterval, /* beacon interval */ - prBssDesc->aucIEBuf, /* IE */ - prBssDesc->u2IELength, /* IE Length */ - RCPI_TO_dBm(prBssDesc->ucRCPI) * 100, /* MBM */ - GFP_KERNEL); - } - } - - /* CFG80211 Indication */ - if(eStatus == WLAN_STATUS_MEDIA_CONNECT - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTING) { - cfg80211_connect_result(prGlueInfo->prDevHandler, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - WLAN_STATUS_SUCCESS, - GFP_KERNEL); - } - else if(eStatus == WLAN_STATUS_ROAM_OUT_FIND_BEST - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 3, 0) - cfg80211_roamed_bss(prGlueInfo->prDevHandler, - bss, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - GFP_KERNEL); -#else - struct ieee80211_channel *prChannel = NULL; - UINT_8 ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX); - - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo), ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - cfg80211_roamed(prGlueInfo->prDevHandler, - prChannel, - arBssid, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - GFP_KERNEL); -#endif - } - } - -#ifdef CFG_DUAL_ANTENNA -printk("WLAN_STATUS_MEDIA_CONNECT, %d",wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_AIS_INDEX)); - wifi2bwcs_connection_event_ind_handler(prGlueInfo, WIFI_EVENT_STA_CONN_NEW); -#endif - - break; - - case WLAN_STATUS_MEDIA_DISCONNECT: - /* indicate disassoc event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWAP, NULL, 0); - /* For CR 90 and CR99, While supplicant do reassociate, driver will do netif_carrier_off first, - after associated success, at joinComplete(), do netif_carier_on, - but for unknown reason, the supplicant 1x pkt will not called the driver - hardStartXmit, for template workaround these bugs, add this compiling flag - */ - /* switch netif off */ - -#if 1 /* CONSOLE_MESSAGE */ - DBGLOG(INIT, INFO, ("[wifi] %s netif_carrier_off\n", prGlueInfo->prDevHandler->name)); -#endif - - netif_carrier_off(prGlueInfo->prDevHandler); - - if(prGlueInfo->fgIsRegistered == TRUE - && prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTED) { - /* CFG80211 Indication */ - cfg80211_disconnected(prGlueInfo->prDevHandler, 0, NULL, 0, GFP_KERNEL); - } - - prGlueInfo->eParamMediaStateIndicated = PARAM_MEDIA_STATE_DISCONNECTED; - -#ifdef CFG_DUAL_ANTENNA - if(prGlueInfo->prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX].ucPrimaryChannel != 0) - wifi2bwcs_connection_event_ind_handler(prGlueInfo, WIFI_EVENT_STA_CONN_DEL); -#endif - - break; - - case WLAN_STATUS_SCAN_COMPLETE: - /* indicate scan complete event */ - wext_indicate_wext_event(prGlueInfo, SIOCGIWSCAN, NULL, 0); - - /* 1. reset first for newly incoming request */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prScanRequest != NULL) { - prScanRequest = prGlueInfo->prScanRequest; - prGlueInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - /* 2. then CFG80211 Indication */ - if(prScanRequest != NULL) { - cfg80211_scan_done(prScanRequest, FALSE); - } - break; - case WLAN_STATUS_CONNECT_INDICATION: - /* indicate AIS Jion fail event */ - if(prGlueInfo->prDevHandler->ieee80211_ptr->sme_state == CFG80211_SME_CONNECTING) { - cfg80211_connect_result(prGlueInfo->prDevHandler, - prGlueInfo->prAdapter->rWifiVar.rAisFsmInfo.prTargetBssDesc->aucBSSID, - prGlueInfo->aucReqIe, - prGlueInfo->u4ReqIeLength, - prGlueInfo->aucRspIe, - prGlueInfo->u4RspIeLength, - REASON_CODE_UNSPECIFIED, - GFP_KERNEL); - } - break; - - #if 0 - case WLAN_STATUS_MSDU_OK: - if (netif_running(prGlueInfo->prDevHandler)) { - netif_wake_queue(prGlueInfo->prDevHandler); - } - break; - #endif - - case WLAN_STATUS_MEDIA_SPECIFIC_INDICATION: - if (pStatus) { - switch (pStatus->eStatusType) { - case ENUM_STATUS_TYPE_AUTHENTICATION: - /* - printk(KERN_NOTICE "ENUM_STATUS_TYPE_AUTHENTICATION: L(%ld) [" MACSTR "] F:%lx\n", - pAuth->Request[0].Length, - MAC2STR(pAuth->Request[0].Bssid), - pAuth->Request[0].Flags); - */ - /* indicate (UC/GC) MIC ERROR event only */ - if ((pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_PAIRWISE_ERROR) || - (pAuth->arRequest[0].u4Flags == - PARAM_AUTH_REQUEST_GROUP_ERROR)) { - cfg80211_michael_mic_failure(prGlueInfo->prDevHandler, NULL, - (pAuth->arRequest[0].u4Flags == PARAM_AUTH_REQUEST_PAIRWISE_ERROR) ? NL80211_KEYTYPE_PAIRWISE : NL80211_KEYTYPE_GROUP, - 0, NULL, GFP_KERNEL); - wext_indicate_wext_event(prGlueInfo, - IWEVMICHAELMICFAILURE, - (unsigned char *)&pAuth->arRequest[0], - pAuth->arRequest[0].u4Length); - } - break; - - case ENUM_STATUS_TYPE_CANDIDATE_LIST: - /* - printk(KERN_NOTICE "Param_StatusType_PMKID_CandidateList: Ver(%ld) Num(%ld)\n", - pPmkid->u2Version, - pPmkid->u4NumCandidates); - if (pPmkid->u4NumCandidates > 0) { - printk(KERN_NOTICE "candidate[" MACSTR "] preAuth Flag:%lx\n", - MAC2STR(pPmkid->arCandidateList[0].rBSSID), - pPmkid->arCandidateList[0].fgFlags); - } - */ - { - UINT_32 i = 0; - - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)&pPmkid->arCandidateList[0]; - - for (i=0; iu4NumCandidates; i++) { - wext_indicate_wext_event(prGlueInfo, - IWEVPMKIDCAND, - (unsigned char *)&pPmkid->arCandidateList[i], - pPmkid->u4NumCandidates); - prPmkidCand += sizeof(PARAM_PMKID_CANDIDATE_T); - } - } - break; - - default: - /* case ENUM_STATUS_TYPE_MEDIA_STREAM_MODE */ - /* - printk(KERN_NOTICE "unknown media specific indication type:%x\n", - pStatus->StatusType); - */ - break; - } - } - else { - /* - printk(KERN_WARNING "media specific indication buffer NULL\n"); - */ - } - break; - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - case WLAN_STATUS_BWCS_UPDATE: - { - wext_indicate_wext_event(prGlueInfo, IWEVCUSTOM, pvBuf, sizeof(PTA_IPC_T)); - } - - break; - -#endif - - default: - /* - printk(KERN_WARNING "unknown indication:%lx\n", eStatus); - */ - break; - } -} /* kalIndicateStatusAndComplete */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to update the (re)association request -* information to the structure used to query and set -* OID_802_11_ASSOCIATION_INFORMATION. -* -* \param[in] prGlueInfo Pointer to the Glue structure. -* \param[in] pucFrameBody Pointer to the frame body of the last (Re)Association -* Request frame from the AP. -* \param[in] u4FrameBodyLen The length of the frame body of the last -* (Re)Association Request frame. -* \param[in] fgReassocRequest TRUE, if it is a Reassociation Request frame. -* -* \return (none) -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocReqInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - PUINT_8 cp; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4ReqIeLength = 0; - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - wext_indicate_wext_event(prGlueInfo, IWEVASSOCREQIE, cp, u4FrameBodyLen); - - if(u4FrameBodyLen <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4ReqIeLength = u4FrameBodyLen; - kalMemCopy(prGlueInfo->aucReqIe, cp, u4FrameBodyLen); - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This routine is called to update the (re)association -* response information to the structure used to reply with -* cfg80211_connect_result -* -* @param prGlueInfo Pointer to adapter descriptor -* @param pucFrameBody Pointer to the frame body of the last (Re)Association -* Response frame from the AP -* @param u4FrameBodyLen The length of the frame body of the last -* (Re)Association Response frame -* -* @return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ) -{ - UINT_32 u4IEOffset = 6; /* cap_info, status_code & assoc_id */ - UINT_32 u4IELength = u4FrameBodyLen - u4IEOffset; - - ASSERT(prGlueInfo); - - /* reset */ - prGlueInfo->u4RspIeLength = 0; - - if(u4IELength <= CFG_CFG80211_IE_BUF_LEN) { - prGlueInfo->u4RspIeLength = u4IELength; - kalMemCopy(prGlueInfo->aucRspIe, pucFrameBody + u4IEOffset, u4IELength); - } - -} /* kalUpdateReAssocRspInfo */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSendCompleteAndAwakeQueue ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ) -{ - - struct net_device *prDev = NULL; - struct sk_buff *prSkb = NULL; - UINT_16 u2QueueIdx = 0; - UINT_8 ucNetworkType = 0; - BOOLEAN fgIsValidDevice = TRUE; - - - ASSERT(pvPacket); - ASSERT(prGlueInfo->i4TxPendingFrameNum); - - prSkb = (struct sk_buff *) pvPacket; -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - u2QueueIdx = skb_get_queue_mapping(prSkb); -#endif - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (GLUE_GET_PKT_IS_PAL(prSkb)) { - ucNetworkType = NETWORK_TYPE_BOW_INDEX; - } else if (GLUE_GET_PKT_IS_P2P(prSkb)) { - ucNetworkType = NETWORK_TYPE_P2P_INDEX; - -#if CFG_ENABLE_WIFI_DIRECT - /* in case packet was sent after P2P device is unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - fgIsValidDevice = FALSE; - } -#endif - } else { - ucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_DEC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx]); - prDev = prSkb->dev; - - ASSERT(prDev); - - if(fgIsValidDevice == TRUE) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 26) - if (netif_subqueue_stopped(prDev, prSkb) && - prGlueInfo->ai4TxPendingFrameNumPerQueue[ucNetworkType][u2QueueIdx] <= CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD) { - netif_wake_subqueue(prDev, u2QueueIdx); - } -#else - if (prGlueInfo->i4TxPendingFrameNum < CFG_TX_STOP_NETIF_QUEUE_THRESHOLD) { - netif_wake_queue(prGlueInfo->prDevHandler); - } -#endif - } - - - dev_kfree_skb((struct sk_buff *) pvPacket); - - DBGLOG(TX, EVENT, ("----- pending frame %d -----\n", prGlueInfo->i4TxPendingFrameNum)); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Copy Mac Address setting from registry. It's All Zeros in Linux. -* -* \param[in] prAdapter Pointer to the Adapter structure -* -* \param[out] paucMacAddr Pointer to the Mac Address buffer -* -* \retval WLAN_STATUS_SUCCESS -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalQueryRegistryMacAddr ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_8 paucMacAddr - ) -{ - UINT_8 aucZeroMac[MAC_ADDR_LEN] = {0,0,0,0,0,0} - DEBUGFUNC("kalQueryRegistryMacAddr"); - - ASSERT(prGlueInfo); - ASSERT(paucMacAddr); - - kalMemCopy((PVOID) paucMacAddr, (PVOID)aucZeroMac, MAC_ADDR_LEN); - - return; -} /* end of kalQueryRegistryMacAddr() */ - -#if CFG_SUPPORT_EXT_CONFIG -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read external configuration, ex. NVRAM or file -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - /* External data is given from user space by ioctl or /proc, not read by - driver. - */ - if (0 != prGlueInfo->u4ExtCfgLength) { - DBGLOG(INIT, TRACE, ("Read external configuration data -- OK\n")); - } - else { - DBGLOG(INIT, TRACE, ("Read external configuration data -- fail\n")); - } - - return prGlueInfo->u4ExtCfgLength; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This inline function is to extract some packet information, including -* user priority, packet length, destination address, 802.1x and BT over Wi-Fi -* or not. -* -* @param prGlueInfo Pointer to the glue structure -* @param prNdisPacket Packet descriptor -* @param pucPriorityParam User priority -* @param pu4PacketLen Packet length -* @param pucEthDestAddr Destination address -* @param pfgIs1X 802.1x packet or not -* @param pfgIsPAL BT over Wi-Fi packet or not -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType - ) -{ - - UINT_32 u4PacketLen; - - - UINT_8 ucUserPriority = USER_PRIORITY_DEFAULT; /* Default */ - UINT_16 u2EtherTypeLen; - struct sk_buff *prSkb = (struct sk_buff *) prPacket; - PUINT_8 aucLookAheadBuf = NULL; - - DEBUGFUNC("kalQoSFrameClassifierAndPacketInfo"); - - u4PacketLen = prSkb->len; - - if (u4PacketLen < ETH_HLEN) { - DBGLOG(INIT, WARN, ("Invalid Ether packet length: %d\n", u4PacketLen)); - return FALSE; - } - - aucLookAheadBuf = prSkb->data; - - *pfgIs1X = FALSE; - *pfgIsPAL = FALSE; - //4 <3> Obtain the User Priority for WMM - u2EtherTypeLen = (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET] << 8) | (aucLookAheadBuf[ETH_TYPE_LEN_OFFSET + 1]); - - if ((u2EtherTypeLen == ETH_P_IP) && - (u4PacketLen >= LOOK_AHEAD_LEN)) { - PUINT_8 pucIpHdr = &aucLookAheadBuf[ETH_HLEN]; - UINT_8 ucIpVersion; - - ucIpVersion = (pucIpHdr[0] & IPVH_VERSION_MASK) >> IPVH_VERSION_OFFSET; - //printk ("ip version %x\n", ucIpVersion); - if (ucIpVersion == IPVERSION) { - UINT_8 ucIpTos; - /* Get the DSCP value from the header of IP packet. */ - ucIpTos = pucIpHdr[1]; - ucUserPriority = ((ucIpTos & IPTOS_PREC_MASK) >> IPTOS_PREC_OFFSET); - } - - /* TODO(Kevin): Add TSPEC classifier here */ - } - else if (u2EtherTypeLen == ETH_P_1X) { /* For Port Control */ - //DBGLOG(REQ, TRACE, ("Tx 1x\n")); - *pfgIs1X = TRUE; - } - else if (u2EtherTypeLen == ETH_P_PRE_1X) { /* For Pre 1x pkt */ - //DBGLOG(REQ, TRACE, ("Tx Pre-1x\n")); - *pfgIs1X = TRUE; - } -#if CFG_SUPPORT_WAPI - else if (u2EtherTypeLen == ETH_WPI_1X) { - *pfgIs1X = TRUE; - } -#endif - else if (u2EtherTypeLen <= 1500) { /* 802.3 Frame */ - UINT_8 ucDSAP, ucSSAP, ucControl; - UINT_8 aucOUI[3]; - - ucDSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET]; - ucSSAP = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 1]; - ucControl = *(PUINT_8) &aucLookAheadBuf[ETH_LLC_OFFSET + 2]; - - aucOUI[0] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET]; - aucOUI[1] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 1]; - aucOUI[2] = *(PUINT_8) &aucLookAheadBuf[ETH_SNAP_OFFSET + 2]; - - if(ucDSAP == ETH_LLC_DSAP_SNAP && - ucSSAP == ETH_LLC_SSAP_SNAP && - ucControl == ETH_LLC_CONTROL_UNNUMBERED_INFORMATION && - aucOUI[0] == ETH_SNAP_BT_SIG_OUI_0 && - aucOUI[1] == ETH_SNAP_BT_SIG_OUI_1 && - aucOUI[2] == ETH_SNAP_BT_SIG_OUI_2) { - - UINT_16 tmp = ((aucLookAheadBuf[ETH_SNAP_OFFSET + 3] << 8) | aucLookAheadBuf[ETH_SNAP_OFFSET + 4]); - - *pfgIsPAL = TRUE; - ucUserPriority = (UINT_8)prSkb->priority; - - if (tmp == BOW_PROTOCOL_ID_SECURITY_FRAME) { - *pfgIs1X = TRUE; - } - } - } - - //4 <4> Return the value of Priority Parameter. - *pucPriorityParam = ucUserPriority; - - //4 <5> Retrieve Packet Information - DA - /* Packet Length/ Destination Address */ - *pu4PacketLen = u4PacketLen; - - kalMemCopy(pucEthDestAddr, aucLookAheadBuf, PARAM_MAC_ADDR_LEN); - - - //<6> Network type -#if CFG_ENABLE_BT_OVER_WIFI - if(*pfgIsPAL == TRUE) { - *pucNetworkType = NETWORK_TYPE_BOW_INDEX; - } - else -#endif - { -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered && GLUE_GET_PKT_IS_P2P(prPacket)) { - *pucNetworkType = NETWORK_TYPE_P2P_INDEX; - } - else -#endif - { - *pucNetworkType = NETWORK_TYPE_AIS_INDEX; - } - } - return TRUE; -} /* end of kalQoSFrameClassifier() */ - -VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ) -{ - - ASSERT(prGlueInfo); - /* remove timeout check timer */ - wlanoidClearTimeoutCheck(prGlueInfo->prAdapter); - - //if (prGlueInfo->u4TimeoutFlag != 1) { - prGlueInfo->rPendStatus = rOidStatus; - complete(&prGlueInfo->rPendComp); - prGlueInfo->u4OidCompleteFlag = 1; - //} - /* else let it timeout on kalIoctl entry */ -} - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - //if (prGlueInfo->u4TimeoutFlag != 1) { - //clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - if (prGlueInfo->u4OidCompleteFlag != 1) { - complete(&prGlueInfo->rPendComp); - } - //} -} - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is used to transfer linux ioctl to OID, and we -* need to specify the behavior of the OID by ourself -* -* @param prGlueInfo Pointer to the glue structure -* @param pvInfoBuf Data buffer -* @param u4InfoBufLen Data buffer length -* @param fgRead Is this a read OID -* @param fgWaitResp does this OID need to wait for values -* @param fgCmd does this OID compose command packet -* @param pu4QryInfoLen The data length of the return values -* -* @retval TRUE Success to extract information -* @retval FALSE Fail to extract correct information -*/ -/*----------------------------------------------------------------------------*/ - -// todo: enqueue the i/o requests for multiple processes access -// -// currently, return -1 -// - -//static GL_IO_REQ_T OidEntry; - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ) -{ - P_GL_IO_REQ_T prIoReq = NULL; - WLAN_STATUS ret = WLAN_STATUS_SUCCESS; - - //GLUE_SPIN_LOCK_DECLARATION(); - ASSERT(prGlueInfo); - - /* <1> Check if driver is halt */ - - //if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - // return WLAN_STATUS_ADAPTER_NOT_READY; - //} - - if (down_interruptible(&g_halt_sem)) { - return WLAN_STATUS_FAILURE; - } - - - if (g_u4HaltFlag) { - up(&g_halt_sem); - return WLAN_STATUS_ADAPTER_NOT_READY; - } - - if(down_interruptible(&prGlueInfo->ioctl_sem)) { - up(&g_halt_sem); - return WLAN_STATUS_FAILURE; - } - - /* <2> TODO: thread-safe */ - - /* <3> point to the OidEntry of Glue layer */ - - prIoReq = &(prGlueInfo->OidEntry); - - ASSERT(prIoReq); - - /* <4> Compose the I/O request */ - prIoReq->prAdapter = prGlueInfo->prAdapter; - prIoReq->pfnOidHandler = pfnOidHandler; - prIoReq->pvInfoBuf = pvInfoBuf; - prIoReq->u4InfoBufLen = u4InfoBufLen; - prIoReq->pu4QryInfoLen = pu4QryInfoLen; - prIoReq->fgRead = fgRead; - prIoReq->fgWaitResp= fgWaitResp; - prIoReq->rStatus = WLAN_STATUS_FAILURE; -#if CFG_ENABLE_WIFI_DIRECT - prIoReq->fgIsP2pOid = fgIsP2pOid; -#endif - - /* <5> Reset the status of pending OID */ - prGlueInfo->rPendStatus = WLAN_STATUS_FAILURE; - //prGlueInfo->u4TimeoutFlag = 0; - prGlueInfo->u4OidCompleteFlag = 0; - - /* <6> Check if we use the command queue */ - prIoReq->u4Flag = fgCmd; - - /* <7> schedule the OID bit */ - set_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag); - - /* <8> Wake up tx thread to handle kick start the I/O request */ - wake_up_interruptible(&prGlueInfo->waitq); - - /* <9> Block and wait for event or timeout, current the timeout is 5 secs */ - //if (wait_for_completion_interruptible_timeout(&prGlueInfo->rPendComp, 5 * KAL_HZ)) { - //if (!wait_for_completion_interruptible(&prGlueInfo->rPendComp)) { - wait_for_completion(&prGlueInfo->rPendComp); { - /* Case 1: No timeout. */ - /* if return WLAN_STATUS_PENDING, the status of cmd is stored in prGlueInfo */ - if (prIoReq->rStatus == WLAN_STATUS_PENDING) { - ret = prGlueInfo->rPendStatus; - } else { - ret = prIoReq->rStatus; - } - } - #if 0 - else { - /* Case 2: timeout */ - /* clear pending OID's cmd in CMD queue */ - if (fgCmd) { - prGlueInfo->u4TimeoutFlag = 1; - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - } - ret = WLAN_STATUS_FAILURE; - } - #endif - - up(&prGlueInfo->ioctl_sem); - up(&g_halt_sem); - - return ret; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending security frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending security frames -* belongs to dedicated network type -* -* \param prGlueInfo Pointer of GLUE Data Structure -* \param eNetworkTypeIdx Network Type Index -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(prGlueInfo); - - // Clear pending security frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_SECURITY_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear all pending management frames -* belongs to dedicated network type -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFramesByNetType ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - // Clear pending management frames in prGlueInfo->rCmdQueue - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - - if (prCmdInfo->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME && - prCmdInfo->eNetworkType == eNetworkTypeIdx) { - wlanReleaseCommand(prGlueInfo->prAdapter, prCmdInfo); - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} /* kalClearMgmtFramesByNetType */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* @brief This function is a kernel thread function for handling command packets -* Tx requests and interrupt events -* -* @param data data pointer to private data of tx_thread -* -* @retval If the function succeeds, the return value is 0. -* Otherwise, an error code is returned. -* -*/ -/*----------------------------------------------------------------------------*/ - -int tx_thread(void *data) -{ - struct net_device *dev = data; - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(dev)); - - P_QUE_ENTRY_T prQueueEntry = NULL; - P_GL_IO_REQ_T prIoReq = NULL; - P_QUE_T prTxQueue = NULL; - P_QUE_T prCmdQue = NULL; - - int ret = 0; - - BOOLEAN fgNeedHwAccess = FALSE; - - struct sk_buff *prSkb = NULL; - - /* for spin lock acquire and release */ - GLUE_SPIN_LOCK_DECLARATION(); - - prTxQueue = &prGlueInfo->rTxQueue; - prCmdQue = &prGlueInfo->rCmdQueue; - - current->flags |= PF_NOFREEZE; - - DBGLOG(INIT, INFO, ("tx_thread starts running... \n")); - - while (TRUE) { - -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } -#endif - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("tx_thread should stop now...\n")); - break; - } - - /* - * sleep on waitqueue if no events occurred. Event contain (1) GLUE_FLAG_INT - * (2) GLUE_FLAG_OID (3) GLUE_FLAG_TXREQ (4) GLUE_FLAG_HALT - * - */ - - ret = wait_event_interruptible(prGlueInfo->waitq, - (prGlueInfo->u4Flag != 0)); - -#if CFG_DBG_GPIO_PINS - /* TX thread Wake up */ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_LOW); -#endif -#if CFG_ENABLE_WIFI_DIRECT - /*run p2p multicast list work. */ - if (test_and_clear_bit(GLUE_FLAG_SUB_MOD_MULTICAST_BIT, &prGlueInfo->u4Flag)) { - p2pSetMulticastListWorkQueueWrapper(prGlueInfo); - } - - if (test_and_clear_bit(GLUE_FLAG_FRAME_FILTER_BIT, &prGlueInfo->u4Flag)) { - p2pFuncUpdateMgmtFrameRegister(prGlueInfo->prAdapter, prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter); - } - - -#endif - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - DBGLOG(INIT, INFO, ("<1>tx_thread should stop now...\n")); - break; - } - - fgNeedHwAccess = FALSE; - - /* Handle Interrupt */ - if (test_and_clear_bit(GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag)) { - - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - - /* the Wi-Fi interrupt is already disabled in mmc thread, - so we set the flag only to enable the interrupt later */ - prGlueInfo->prAdapter->fgIsIntEnable = FALSE; - //wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - DBGLOG(INIT, INFO, ("ignore pending interrupt\n")); - } - else { - - wlanIST(prGlueInfo->prAdapter); - } - } - - /* transfer ioctl to OID request */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<2>tx_thread should stop now...\n"); - break; - } - #endif - - do { - if (test_and_clear_bit(GLUE_FLAG_OID_BIT, &prGlueInfo->u4Flag)) { - /* get current prIoReq */ - prIoReq = &(prGlueInfo->OidEntry); -#if CFG_ENABLE_WIFI_DIRECT - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE - && prIoReq->fgIsP2pOid == TRUE) { - /* if this Oid belongs to p2p and p2p module is removed - * do nothing, - */ - } - else -#endif - { - if (FALSE == prIoReq->fgRead) { - prIoReq->rStatus = wlanSetInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } else { - prIoReq->rStatus = wlanQueryInformation( - prIoReq->prAdapter, - prIoReq->pfnOidHandler, - prIoReq->pvInfoBuf, - prIoReq->u4InfoBufLen, - prIoReq->pu4QryInfoLen); - } - - if (prIoReq->rStatus != WLAN_STATUS_PENDING) { - complete(&prGlueInfo->rPendComp); - } - else { - wlanoidTimeoutCheck(prGlueInfo->prAdapter, prIoReq->pfnOidHandler); - } - } - } - - } while (FALSE); - - - /* - * - * if TX request, clear the TXREQ flag. TXREQ set by kalSetEvent/GlueSetEvent - * indicates the following requests occur - * - */ - #if 0 - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"<3>tx_thread should stop now...\n"); - break; - } - #endif - - if (test_and_clear_bit(GLUE_FLAG_TXREQ_BIT, &prGlueInfo->u4Flag)) - { - - /* Process Mailbox Messages */ - wlanProcessMboxMessage(prGlueInfo->prAdapter); - - /* Process CMD request */ - do { - if (prCmdQue->u4NumElem > 0) { - if (fgNeedHwAccess == FALSE) { - fgNeedHwAccess = TRUE; - - wlanAcquirePowerControl(prGlueInfo->prAdapter); - } - wlanProcessCommandQueue(prGlueInfo->prAdapter, prCmdQue); - } - } while (FALSE); - - /* Handle Packet Tx */ - { - while (QUEUE_IS_NOT_EMPTY(prTxQueue)) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQueue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - ASSERT(prQueueEntry); - if (NULL == prQueueEntry) { - break; - } - - prSkb = (struct sk_buff *) GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - ASSERT(prSkb); - if (NULL == prSkb) { - DBGLOG(INIT, WARN, ("prSkb == NULL in tx\n")); - continue; - } - - if(wlanEnqueueTxPacket(prGlueInfo->prAdapter, - (P_NATIVE_PACKET)prSkb) == WLAN_STATUS_RESOURCES) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_HEAD(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - break; - } - } - - if (wlanGetTxPendingFrameCount(prGlueInfo->prAdapter) > 0) { - wlanTxPendingPackets(prGlueInfo->prAdapter, &fgNeedHwAccess); - } - } - - } - - /* Process RX, In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't need to free sk_buff by ourself */ - - /* In linux, we don't do reset */ - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - - /* handle cnmTimer time out */ - if (test_and_clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag)) { - wlanTimerTimeoutCheck(prGlueInfo->prAdapter); - } - - #if CFG_DBG_GPIO_PINS - /* TX thread go to sleep */ - if (!prGlueInfo->u4Flag){ - mtk_wcn_stp_debug_gpio_assert(IDX_TX_THREAD, DBG_TIE_HIGH); - } - #endif - } - - #if 0 - if (fgNeedHwAccess == TRUE) { - wlanReleasePowerControl(prGlueInfo->prAdapter); - } - #endif - - /* flush the pending TX packets */ - if (prGlueInfo->i4TxPendingFrameNum > 0) { - kalFlushPendingTxPackets(prGlueInfo); - } - - /* flush pending security frames */ - if (prGlueInfo->i4TxPendingSecurityFrameNum > 0) { - kalClearSecurityFrames(prGlueInfo); - } - - /* remove pending oid */ - wlanReleasePendingOid(prGlueInfo->prAdapter, 0); - - - /* In linux, we don't need to free sk_buff by ourself */ - - DBGLOG(INIT, INFO, ("mtk_sdiod stops\n")); - complete(&prGlueInfo->rHaltComp); - - return 0; - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to check if card is removed -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval TRUE: card is removed -* FALSE: card is still attached -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return FALSE; - // Linux MMC doesn't have removal notification yet -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This routine is used to send command to firmware for overriding netweork address - * - * \param pvGlueInfo Pointer of GLUE Data Structure - - * \retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ) -{ - ASSERT(prGlueInfo); - - if(prGlueInfo->fgIsMacAddrOverride == FALSE) { - #if !defined(CONFIG_X86) - UINT_32 i; - BOOLEAN fgIsReadError = FALSE; - - for(i = 0 ; i < MAC_ADDR_LEN ; i+=2) { - if(kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, aucMacAddress) + i, - (PUINT_16) (((PUINT_8)prMacAddr) + i)) == FALSE) { - fgIsReadError = TRUE; - break; - } - } - - if(fgIsReadError == TRUE) { - return FALSE; - } - else { - return TRUE; - } - #else - /* x86 Linux doesn't need to override network address so far */ - return FALSE; - #endif - } - else { - COPY_MAC_ADDR(prMacAddr, prGlueInfo->rMacAddrOverride); - - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to flush pending TX packets in glue layer -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prTxQue; - P_QUE_ENTRY_T prQueueEntry; - PVOID prPacket; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prTxQue = &(prGlueInfo->rTxQueue); - - if (prGlueInfo->i4TxPendingFrameNum) { - while (TRUE) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_REMOVE_HEAD(prTxQue, prQueueEntry, P_QUE_ENTRY_T); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - if (prQueueEntry == NULL) { - break; - } - - prPacket = GLUE_GET_PKT_DESCRIPTOR(prQueueEntry); - - kalSendComplete(prGlueInfo, - prPacket, - WLAN_STATUS_NOT_ACCEPTED); - } - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is get indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->eParamMediaStateIndicated; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to set indicated media state -* -* \param pvGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ) -{ - ASSERT(prGlueInfo); - - prGlueInfo->eParamMediaStateIndicated = eParamMediaStateIndicate; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to clear pending OID staying in command queue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - QUE_T rTempCmdQue; - P_QUE_T prTempCmdQue = &rTempCmdQue; - P_QUE_ENTRY_T prQueueEntry = (P_QUE_ENTRY_T)NULL; - P_CMD_INFO_T prCmdInfo = (P_CMD_INFO_T)NULL; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_MOVE_ALL(prTempCmdQue, prCmdQue); - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - while (prQueueEntry) { - - if (((P_CMD_INFO_T)prQueueEntry)->fgIsOid) { - prCmdInfo = (P_CMD_INFO_T)prQueueEntry; - break; - } - else { - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - } - - QUEUE_REMOVE_HEAD(prTempCmdQue, prQueueEntry, P_QUE_ENTRY_T); - } - - QUEUE_CONCATENATE_QUEUES(prCmdQue, prTempCmdQue); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - - if (prCmdInfo) { - if (prCmdInfo->pfCmdTimeoutHandler) { - prCmdInfo->pfCmdTimeoutHandler(prGlueInfo->prAdapter, prCmdInfo); - } - else { - kalOidComplete(prGlueInfo, - prCmdInfo->fgSetQuery, - 0, - WLAN_STATUS_NOT_ACCEPTED); - } - - prGlueInfo->u4OidCompleteFlag = 1; - cmdBufFreeCmdInfo(prGlueInfo->prAdapter, prCmdInfo); - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to insert command into prCmdQueue -* -* \param prGlueInfo Pointer of GLUE Data Structure -* prQueueEntry Pointer of queue entry to be inserted -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ) -{ - P_QUE_T prCmdQue; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prQueueEntry); - - prCmdQue = &prGlueInfo->rCmdQueue; - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); - QUEUE_INSERT_TAIL(prCmdQue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_CMD_QUE); -} - -/*----------------------------------------------------------------------------*/ -/*! -* @brief Handle EVENT_ID_ASSOC_INFO event packet by indicating to OS with -* proper information -* -* @param pvGlueInfo Pointer of GLUE Data Structure -* @param prAssocInfo Pointer of EVENT_ID_ASSOC_INFO Packet -* -* @return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ) -{ - // to do -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware load address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4LoadAddress; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to get firmware start address from registry -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->rRegInfo.u4StartAddress; -} - -/*----------------------------------------------------------------------------*/ -/*! - * * @brief Notify OS with SendComplete event of the specific packet. Linux should - * * free packets here. - * * - * * @param pvGlueInfo Pointer of GLUE Data Structure - * * @param pvPacket Pointer of Packet Handle - * * @param status Status Code for OS upper layer - * * - * * @return none - * */ -/*----------------------------------------------------------------------------*/ - -/// Todo -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ) -{ - ASSERT(pvPacket); - - dev_kfree_skb((struct sk_buff *) pvPacket); - GLUE_DEC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); -} - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (UINT_32)(prGlueInfo->i4TxPendingFrameNum); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to retrieve the number of pending commands -* (including MMPDU, 802.1X and command packets) -* -* \param prGlueInfo Pointer of GLUE Data Structure -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_QUE_T prCmdQue; - - ASSERT(prGlueInfo); - prCmdQue = &prGlueInfo->rCmdQueue; - - return prCmdQue->u4NumElem; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Timer Initialization Procedure -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] prTimerHandler Pointer to timer handling function, whose only -* argument is "prAdapter" -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ - -//static struct timer_list tickfn; - -VOID -kalOsTimerInitialize ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ) -{ - - ASSERT(prGlueInfo); - - init_timer(&(prGlueInfo->tickfn)); - prGlueInfo->tickfn.function = prTimerHandler; - prGlueInfo->tickfn.data = (unsigned long) prGlueInfo; -} - -// Todo -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the time to do the time out check. -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* \param[in] rInterval Time out interval from current time. -* -* \retval TRUE Success. -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ) -{ - ASSERT(prGlueInfo); - del_timer_sync(&(prGlueInfo->tickfn)); - - prGlueInfo->tickfn.expires = jiffies + u4Interval * HZ / MSEC_PER_SEC; - add_timer(&(prGlueInfo->tickfn)); - - return TRUE; /* success */ -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to cancel -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval TRUE : Timer has been canceled -* FALAE : Timer doens't exist -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - clear_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - - if (del_timer_sync(&(prGlueInfo->tickfn)) >=0) { - return TRUE; - } else { - return FALSE; - } -} -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is a callback function for scanning done -* -* \param[in] prGlueInfo Pointer to GLUE Data Structure -* -* \retval none -* -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ) -{ - ASSERT(prGlueInfo); - - /* check for system configuration for generating error message on scan list */ - wlanCheckSystemConfiguration(prGlueInfo->prAdapter); - - kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to generate a random number -* -* \param none -* -* \retval UINT_32 -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalRandomNumber( - VOID - ) -{ - UINT_32 number = 0; - - get_random_bytes(&number, 4); - - return number; -} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief command timeout call-back function - * - * \param[in] prGlueInfo Pointer to the GLUE data structure. - * - * \retval (none) - */ -/*----------------------------------------------------------------------------*/ -VOID -kalTimeoutHandler (unsigned long arg) -{ - - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T) arg; - - ASSERT(prGlueInfo); - - /* Notify tx thread for timeout event */ - set_bit(GLUE_FLAG_TIMEOUT_BIT, &prGlueInfo->u4Flag); - wake_up_interruptible(&prGlueInfo->waitq); - - return; -} - - -VOID -kalSetEvent (P_GLUE_INFO_T pr) { - set_bit(GLUE_FLAG_TXREQ_BIT, &pr->u4Flag); - wake_up_interruptible(&pr->waitq); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if configuration file (NVRAM/Registry) exists -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if !defined(CONFIG_X86) - ASSERT(prGlueInfo); - - return prGlueInfo->fgNvramAvailable; -#else - /* there is no configuration data for x86-linux */ - return FALSE; -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Registry information -* -* \param[in] -* prGlueInfo -* -* \return -* Pointer of REG_INFO_T -*/ -/*----------------------------------------------------------------------------*/ -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return &(prGlueInfo->rRegInfo); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve version information of corresponding configuration file -* -* \param[in] -* prGlueInfo -* -* \param[out] -* pu2Part1CfgOwnVersion -* pu2Part1CfgPeerVersion -* pu2Part2CfgOwnVersion -* pu2Part2CfgPeerVersion -* -* \return -* NONE -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ) -{ - ASSERT(prGlueInfo); - - ASSERT(pu2Part1CfgOwnVersion); - ASSERT(pu2Part1CfgPeerVersion); - ASSERT(pu2Part2CfgOwnVersion); - ASSERT(pu2Part2CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1OwnVersion), - pu2Part1CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part1PeerVersion), - pu2Part1CfgPeerVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2OwnVersion), - pu2Part2CfgOwnVersion); - - kalCfgDataRead16(prGlueInfo, - OFFSET_OF(WIFI_CFG_PARAM_STRUCT, u2Part2PeerVersion), - pu2Part2CfgPeerVersion); - - return; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the WPS is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->fgWpsActive); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief update RSSI and LinkQuality to GLUE layer -* -* \param[in] -* prGlueInfo -* eNetTypeIdx -* cRssi -* cLinkQuality -* -* \return -* None -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ) -{ - struct iw_statistics *pStats = (struct iw_statistics *)NULL; - - ASSERT(prGlueInfo); - - switch(eNetTypeIdx) { - case KAL_NETWORK_TYPE_AIS_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - break; -#if CFG_ENABLE_WIFI_DIRECT -#if CFG_SUPPORT_P2P_RSSI_QUERY - case KAL_NETWORK_TYPE_P2P_INDEX: - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - break; -#endif -#endif - default: - break; - - } - - if (pStats) { - pStats->qual.qual = cLinkQuality; - pStats->qual.noise = 0; - pStats->qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_NOISE_UPDATED; - pStats->qual.level = 0x100 + cRssi; - pStats->qual.updated |= IW_QUAL_LEVEL_UPDATED; - } - - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Pre-allocate I/O buffer -* -* \param[in] -* none -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ) -{ - UINT_32 u4Size; - - if(CFG_COALESCING_BUFFER_SIZE >= CFG_RX_COALESCING_BUFFER_SIZE) { - u4Size = CFG_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - else { - u4Size = CFG_RX_COALESCING_BUFFER_SIZE + sizeof(ENHANCE_MODE_DATA_STRUCT_T); - } - - pvIoBuffer = kmalloc(u4Size, GFP_KERNEL); - if(pvIoBuffer) { - pvIoBufferSize = u4Size; - pvIoBufferUsage = 0; - - return TRUE; - } - - return FALSE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free pre-allocated I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalUninitIOBuffer( - VOID - ) -{ - if(pvIoBuffer) { - kfree(pvIoBuffer); - - pvIoBuffer = (PVOID) NULL; - pvIoBufferSize = 0; - pvIoBufferUsage = 0; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatch pre-allocated I/O buffer -* -* \param[in] -* u4AllocSize -* -* \return -* PVOID for pointer of pre-allocated I/O buffer -*/ -/*----------------------------------------------------------------------------*/ -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ) -{ - PVOID ret = (PVOID)NULL; - - if(pvIoBuffer) { - if(u4AllocSize <= (pvIoBufferSize - pvIoBufferUsage)) { - ret = (PVOID)&(((PUINT_8)(pvIoBuffer))[pvIoBufferUsage]); - pvIoBufferUsage += u4AllocSize; - } - } - else { - /* fault tolerance */ - ret = (PVOID) kalMemAlloc(u4AllocSize, PHY_MEM_TYPE); - } - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Release all dispatched I/O buffer -* -* \param[in] -* none -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ) -{ - if(pvIoBuffer) { - pvIoBufferUsage -= u4Size; - } - else { - /* fault tolerance */ - kalMemFree(pvAddr, PHY_MEM_TYPE, u4Size); - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ) -{ -#if CFG_ENABLE_WIFI_DIRECT - if (IS_NET_ACTIVE(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX) && - p2pFuncIsAPMode(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo)) - return TRUE; -#endif - - return FALSE; -} - - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/*! -* \brief to check if the MFP is active or not -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return (prGlueInfo->rWpaInfo.u4Mfp); -} -#endif - -struct file* -kalFileOpen( - const char* path, - int flags, - int rights) -{ - struct file* filp = NULL; - mm_segment_t oldfs; - int err = 0; - - oldfs = get_fs(); - set_fs(get_ds()); - filp = filp_open(path, flags, rights); - set_fs(oldfs); - if(IS_ERR(filp)) { - err = PTR_ERR(filp); - return NULL; - } - return filp; -} - -VOID -kalFileClose( - struct file* file) -{ - filp_close(file, NULL); -} - -UINT_32 -kalFileRead( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_read(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalFileWrite( - struct file* file, - unsigned long long offset, - unsigned char* data, - unsigned int size) -{ - mm_segment_t oldfs; - int ret; - - oldfs = get_fs(); - set_fs(get_ds()); - - ret = vfs_write(file, data, size, &offset); - - set_fs(oldfs); - return ret; -} - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size) -{ - struct file* file = NULL; - UINT_32 ret; - UINT_32 u4Flags = 0; - - if(fgDoAppend) { - u4Flags = O_APPEND; - } - - file = kalFileOpen(pucPath, O_WRONLY | O_CREAT | u4Flags, S_IRWXU); - ret = kalFileWrite(file, 0, pucData, u4Size); - kalFileClose(file); - - return ret; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To indicate BSS-INFO to NL80211 as scanning result -* -* \param[in] -* prGlueInfo -* pucBeaconProbeResp -* u4FrameLen -* -* -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucBeaconProbeResp, - IN UINT_32 u4FrameLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ) -{ - struct wiphy *wiphy; - struct ieee80211_channel *prChannel = NULL; - - ASSERT(prGlueInfo); - wiphy = priv_to_wiphy(prGlueInfo); - - /* search through channel entries */ - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - if(prChannel != NULL && prGlueInfo->prScanRequest != NULL) { - struct cfg80211_bss *bss; - - /* indicate to NL80211 subsystem */ - bss = cfg80211_inform_bss_frame(wiphy, - prChannel, - (struct ieee80211_mgmt *)pucBeaconProbeResp, - u4FrameLen, - i4SignalStrength * 100, - GFP_KERNEL); - - if(!bss) { - DBGLOG(REQ, WARN, ("cfg80211_inform_bss_frame() returned with NULL\n")); - } - else { - cfg80211_put_bss(bss); - } - } - - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p.c deleted file mode 100755 index 085284718a78..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p.c +++ /dev/null @@ -1,5542 +0,0 @@ -/* -** $Id: @(#) gl_p2p.c@@ -*/ - -/*! \file gl_p2p.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_p2p.c $ -** -** 08 24 2012 yuche.tsai -** NULL -** Fix bug of invitation request. -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 15 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 07 31 2012 yuche.tsai -** NULL -** Update Active/Deactive network policy for P2P network. -** Highly related to power saving. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. -** -** 07 20 2012 yuche.tsai -** [WCXRP00001119] [Volunteer Patch][WiFi Direct][Driver] Connection Policy Set for WFD SIGMA test -** Support remain on channel. -** -** 07 19 2012 yuche.tsai -** NULL -** Update code for net device register. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 01 09 2012 terry.wu - * [WCXRP00001166] [Wi-Fi] [Driver] cfg80211 integration for p2p newtork - * cfg80211 integration for p2p network. - * - * 12 19 2011 terry.wu - * [WCXRP00001142] [Wi-Fi] [P2P Driver] XOR local admin bit to generate p2p net device MAC - * XOR local administrated bit to generate net device MAC of p2p network. - * - * 12 02 2011 yuche.tsai - * NULL - * Fix possible KE when unload p2p. - * - * 11 24 2011 yuche.tsai - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 16 2011 yuche.tsai - * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue. - * Avoid using work thread in set p2p multicast address callback. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix default device name issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 11 07 2011 yuche.tsai - * NULL - * [ALPS 00087243] KE in worker thread. - * The multicast address list is scheduled in worker thread. - * Before the worker thread is excuted, if P2P is unloaded, a KE may occur. - * - * 10 26 2011 terry.wu - * [WCXRP00001066] [MT6620 Wi-Fi] [P2P Driver] Fix P2P Oid Issue - * Fix some P2P OID functions didn't raise its flag "fgIsP2pOid" issue. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * Support Channle Query. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 26 2011 yuche.tsai - * NULL - * Fix bug of parsing secondary device list type issue. - * - * 08 24 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Abort. - * - * 08 23 2011 yuche.tsai - * NULL - * Fix multicast address list issue of P2P. - * - * 08 22 2011 chinglan.wang - * NULL - * Fix invitation indication bug.. - * - * 08 16 2011 cp.wu - * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence - * auto channel decision for 2.4GHz hot spot mode - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 08 05 2011 yuche.tsai - * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution. - * Add Password ID check for quick connection. - * Also modify some connection policy. - * - * 07 18 2011 chinglan.wang - * NULL - * Add IOC_P2P_GO_WSC_IE (p2p capability). - * - * 06 14 2011 yuche.tsai - * NULL - * Add compile flag to disable persistent group support. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 05 02 2011 yuche.tsai - * [WCXRP00000693] [Volunteer Patch][MT6620][Driver] Clear Formation Flag after TX lifetime timeout. - * Clear formation flag after formation timeout. - * - * 04 22 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * . - * - * 04 21 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * 1. Revise P2P power mode setting. - * 2. Revise fast-PS for concurrent - * - * 04 19 2011 wh.su - * NULL - * Adding length check before doing WPA RSN IE parsing for scan results indicate. - * - * 04 14 2011 yuche.tsai - * [WCXRP00000646] [Volunteer Patch][MT6620][FW/Driver] Sigma Test Modification for some test case. - * Connection flow refine for Sigma test. - * - * 04 08 2011 yuche.tsai - * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO. - * Add device discoverability support. - * - * 04 08 2011 george.huang - * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode - * separate settings of P2P and AIS - * - * 04 07 2011 terry.wu - * [WCXRP00000619] [MT6620 Wi-Fi][Driver] fix kernel panic may occur when removing wlan - * Fix kernel panic may occur when removing wlan driver. - * - * 03 31 2011 wh.su - * [WCXRP00000614] [MT6620 Wi-Fi][Driver] P2P: Update beacon content while setting WSC IE - * Update the wsc ie to beacon content. - * - * 03 25 2011 wh.su - * NULL - * add the sample code for set power mode and get power mode. - * - * 03 25 2011 yuche.tsai - * NULL - * Improve some error handleing. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 22 2011 yuche.tsai - * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct. - * Modify formation policy. - * - * 03 22 2011 yuche.tsai - * NULL - * Modify formation policy setting. - * - * 03 18 2011 yuche.tsai - * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow - * Modify connection flow after Group Formation Complete, or device connect to a GO. - * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN. - * - * 03 15 2011 wh.su - * [WCXRP00000563] [MT6620 Wi-Fi] [P2P] Set local config method while set password Id ready - * set lccal config method method while set password Id ready. - * - * 03 15 2011 yuche.tsai - * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue - * Fix some configure method issue. - * - * 03 15 2011 jeffrey.chang - * [WCXRP00000558] [MT6620 Wi-Fi][MT6620 Wi-Fi][Driver] refine the queue selection algorithm for WMM - * refine queue_select function - * - * 03 13 2011 wh.su - * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done - * add code for avoid compiling warning. - * - * 03 10 2011 yuche.tsai - * NULL - * Add P2P API. - * - * 03 10 2011 terry.wu - * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration - * Remove unnecessary assert and message. - * - * 03 08 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * support the power save related p2p setting. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify P2P's netdevice functions to support multiple H/W queues - * - * 03 03 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * for get request, the buffer length to be copied is header + payload. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add code to let the beacon and probe response for Auto GO WSC . - * - * 03 02 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * add a missed break. - * - * 03 01 2011 yuche.tsai - * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation - * Update channel issue when doing GO formation.. - * - * 02 25 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * add the Operation channel setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the set int ioctl set index and value map to driver issue. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 21 2011 terry.wu - * [WCXRP00000476] [MT6620 Wi-Fi][Driver] Clean P2P scan list while removing P2P - * Clean P2P scan list while removing P2P. - * - * 02 18 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * fixed the ioctl setting that index not map to spec defined config method. - * - * 02 17 2011 wh.su - * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE - * append the WSC IE config method attribute at provision discovery request. - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * modify the structure pointer for set WSC IE. - * - * 02 16 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * fixed the probe request send out without WSC IE issue (at P2P). - * - * 02 09 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * fix typo - * - * 02 09 2011 yuche.tsai - * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode. - * Add Support for MLME deauthentication for Hot-Spot. - * - * 01 25 2011 terry.wu - * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter - * Add a new module parameter to indicate current runnig mode, P2P or AP. - * - * 01 12 2011 yuche.tsai - * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue - * 1. Modify Channel Acquire Time of AP mode from 5s to 1s. - * 2. Call cnmP2pIsPermit() before active P2P network. - * 3. Add channel selection support for AP mode. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 08 2010 yuche.tsai - * [WCXRP00000245] [MT6620][Driver] Invitation & Provision Discovery Feature Check-in - * [WCXRP000000245][MT6620][Driver] Invitation Request Feature Add - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 17 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation - * fixed some ASSERT check. - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 20 2010 cp.wu - * NULL - * correct typo. - * - * 08 20 2010 yuche.tsai - * NULL - * Invert Connection request provision status parameter. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 18 2010 cp.wu - * NULL - * modify pwp ioctls attribution by removing FIXED_SIZE. - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 17 2010 cp.wu - * NULL - * correct p2p net device registration with NULL pointer access issue. - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * add subroutines for P2P to set multicast list. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * add basic support for ioctl of getting scan result. (only address and SSID are reporterd though) - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * surpress compilation warning. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 23 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * p2p interface revised to be sync. with HAL - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement private io controls for Wi-Fi Direct - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * 1) add timeout handler mechanism for pending command packets - * 2) add p2p add/removal key - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include - -#include -//#include -#include "gl_p2p_ioctl.h" - -#include "precomp.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define ARGV_MAX_NUM (4) - -/*For CFG80211 - wiphy parameters*/ -#define MAX_SCAN_LIST_NUM (1) -#define MAX_SCAN_IE_LEN (512) -#define LEGACY_IN_AP_MODE "legacy_wlan%d" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -/* for cfg80211 - frequency table */ -static struct ieee80211_channel mtk_2ghz_channels[] = { - CHAN2G(1, 2412, 0), - CHAN2G(2, 2417, 0), - CHAN2G(3, 2422, 0), - CHAN2G(4, 2427, 0), - CHAN2G(5, 2432, 0), - CHAN2G(6, 2437, 0), - CHAN2G(7, 2442, 0), - CHAN2G(8, 2447, 0), - CHAN2G(9, 2452, 0), - CHAN2G(10, 2457, 0), - CHAN2G(11, 2462, 0), - CHAN2G(12, 2467, 0), - CHAN2G(13, 2472, 0), - CHAN2G(14, 2484, 0), -}; - -static struct ieee80211_channel mtk_5ghz_a_channels[] = { - CHAN5G(34, 0), CHAN5G(36, 0), - CHAN5G(38, 0), CHAN5G(40, 0), - CHAN5G(42, 0), CHAN5G(44, 0), - CHAN5G(46, 0), CHAN5G(48, 0), - CHAN5G(52, 0), CHAN5G(56, 0), - CHAN5G(60, 0), CHAN5G(64, 0), - CHAN5G(100, 0), CHAN5G(104, 0), - CHAN5G(108, 0), CHAN5G(112, 0), - CHAN5G(116, 0), CHAN5G(120, 0), - CHAN5G(124, 0), CHAN5G(128, 0), - CHAN5G(132, 0), CHAN5G(136, 0), - CHAN5G(140, 0), CHAN5G(149, 0), - CHAN5G(153, 0), CHAN5G(157, 0), - CHAN5G(161, 0), CHAN5G(165, 0), - CHAN5G(169, 0), CHAN5G(173, 0), - CHAN5G(184, 0), CHAN5G(188, 0), - CHAN5G(192, 0), CHAN5G(196, 0), - CHAN5G(200, 0), CHAN5G(204, 0), - CHAN5G(208, 0), CHAN5G(212, 0), - CHAN5G(216, 0), -}; - -/* for cfg80211 - rate table */ -static struct ieee80211_rate mtk_rates[] = { - RATETAB_ENT(10, 0x1000, 0), - RATETAB_ENT(20, 0x1001, 0), - RATETAB_ENT(55, 0x1002, 0), - RATETAB_ENT(110, 0x1003, 0), /* 802.11b */ - RATETAB_ENT(60, 0x2000, 0), - RATETAB_ENT(90, 0x2001, 0), - RATETAB_ENT(120, 0x2002, 0), - RATETAB_ENT(180, 0x2003, 0), - RATETAB_ENT(240, 0x2004, 0), - RATETAB_ENT(360, 0x2005, 0), - RATETAB_ENT(480, 0x2006, 0), - RATETAB_ENT(540, 0x2007, 0), /* 802.11a/g */ -}; - -#define mtk_a_rates (mtk_rates + 4) -#define mtk_a_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 4) -#define mtk_g_rates (mtk_rates + 0) -#define mtk_g_rates_size (sizeof(mtk_rates) / sizeof(mtk_rates[0]) - 0) - -#define MT6620_MCS_INFO \ -{ \ - /* MCS1~7*/ \ - .rx_mask = {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0},\ - .rx_highest = 0, \ - .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \ -} - -#if 0 -/*Bandwidth 20Mhz Only*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#else -/*Bandwidth 20/40Mhz*/ -#define MT6620_HT_CAP \ -{ \ - .ht_supported = true, \ - .cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 \ - | IEEE80211_HT_CAP_SM_PS \ - | IEEE80211_HT_CAP_GRN_FLD \ - | IEEE80211_HT_CAP_SGI_20 \ - | IEEE80211_HT_CAP_SGI_40, \ - .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \ - .ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE, \ - .mcs = MT6620_MCS_INFO, \ -} -#endif - -static struct ieee80211_supported_band mtk_band_2ghz = { - .band = IEEE80211_BAND_2GHZ, - .channels = mtk_2ghz_channels, - .n_channels = ARRAY_SIZE(mtk_2ghz_channels), - .bitrates = mtk_g_rates, - .n_bitrates = mtk_g_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static struct ieee80211_supported_band mtk_band_5ghz = { - .band = IEEE80211_BAND_5GHZ, - .channels = mtk_5ghz_a_channels, - .n_channels = ARRAY_SIZE(mtk_5ghz_a_channels), - .bitrates = mtk_a_rates, - .n_bitrates = mtk_a_rates_size, - .ht_cap = MT6620_HT_CAP, -}; - -static const UINT_32 cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC -}; - -static struct cfg80211_ops mtk_p2p_config_ops = { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) - /* Froyo */ - .change_virtual_intf = mtk_p2p_cfg80211_change_iface, // 1 st - .change_bss = mtk_p2p_cfg80211_change_bss, - .scan = mtk_p2p_cfg80211_scan, - .remain_on_channel = mtk_p2p_cfg80211_remain_on_channel, - .cancel_remain_on_channel = mtk_p2p_cfg80211_cancel_remain_on_channel, - .mgmt_tx = mtk_p2p_cfg80211_mgmt_tx, - //[AOSP] - .mgmt_tx_cancel_wait = mtk_p2p_cfg80211_mgmt_tx_cancel_wait, - .connect = mtk_p2p_cfg80211_connect, - .disconnect = mtk_p2p_cfg80211_disconnect, - .deauth = mtk_p2p_cfg80211_deauth, - .disassoc = mtk_p2p_cfg80211_disassoc, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) - .start_ap = mtk_p2p_cfg80211_start_ap, - .change_beacon = mtk_p2p_cfg80211_change_beacon, - .stop_ap = mtk_p2p_cfg80211_stop_ap, -#else - .add_beacon = mtk_p2p_cfg80211_add_set_beacon, - .set_beacon = mtk_p2p_cfg80211_add_set_beacon_1, - .del_beacon = mtk_p2p_cfg80211_stop_ap, -#endif - .set_wiphy_params = mtk_p2p_cfg80211_set_wiphy_params, - .del_station = mtk_p2p_cfg80211_del_station, - .set_channel = mtk_p2p_cfg80211_set_channel, - .set_bitrate_mask = mtk_p2p_cfg80211_set_bitrate_mask, - .mgmt_frame_register = mtk_p2p_cfg80211_mgmt_frame_register, - .get_station = mtk_p2p_cfg80211_get_station, - // ================ - .add_key = mtk_p2p_cfg80211_add_key, - .get_key = mtk_p2p_cfg80211_get_key, - .del_key = mtk_p2p_cfg80211_del_key, - .set_default_key = mtk_p2p_cfg80211_set_default_key, - .join_ibss = mtk_p2p_cfg80211_join_ibss, - .leave_ibss = mtk_p2p_cfg80211_leave_ibss, - .set_tx_power = mtk_p2p_cfg80211_set_txpower, - .get_tx_power = mtk_p2p_cfg80211_get_txpower, - .set_power_mgmt = mtk_p2p_cfg80211_set_power_mgmt, - #ifdef CONFIG_NL80211_TESTMODE - .testmode_cmd = mtk_p2p_cfg80211_testmode_cmd, - #endif -#endif -}; - - - -/* There isn't a lot of sense in it, but you can transmit anything you like */ -static const struct ieee80211_txrx_stypes -mtk_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = { - [NL80211_IFTYPE_ADHOC] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_STATION] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_AP] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_AP_VLAN] = { - /* copy AP */ - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_DISASSOC >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - }, - [NL80211_IFTYPE_P2P_CLIENT] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) - }, - [NL80211_IFTYPE_P2P_GO] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4) - } -}; - - - -#endif - -/* the legacy wireless extension stuff */ -static const iw_handler rP2PIwStandardHandler[] = { - [SIOCGIWPRIV - SIOCIWFIRST] = mtk_p2p_wext_get_priv, - [SIOCGIWSCAN - SIOCIWFIRST] = mtk_p2p_wext_discovery_results, - [SIOCSIWESSID - SIOCIWFIRST] = mtk_p2p_wext_reconnect, - [SIOCSIWAUTH - SIOCIWFIRST] = mtk_p2p_wext_set_auth, - [SIOCSIWENCODEEXT - SIOCIWFIRST] = mtk_p2p_wext_set_key, - [SIOCSIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_set_powermode, - [SIOCGIWPOWER - SIOCIWFIRST] = mtk_p2p_wext_get_powermode, - [SIOCSIWTXPOW - SIOCIWFIRST] = mtk_p2p_wext_set_txpow, -#if CFG_SUPPORT_P2P_RSSI_QUERY - [SIOCGIWSTATS - SIOCIWFIRST] = mtk_p2p_wext_get_rssi, -#endif - [SIOCSIWMLME - SIOCIWFIRST] = mtk_p2p_wext_mlme_handler, -}; - -static const iw_handler rP2PIwPrivHandler[] = { - [IOC_P2P_CFG_DEVICE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_local_dev_info, - [IOC_P2P_PROVISION_COMPLETE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_provision_complete, - [IOC_P2P_START_STOP_DISCOVERY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_start_stop_discovery, - [IOC_P2P_DISCOVERY_RESULTS - SIOCIWFIRSTPRIV] = mtk_p2p_wext_discovery_results, - [IOC_P2P_WSC_BEACON_PROBE_RSP_IE - SIOCIWFIRSTPRIV] = mtk_p2p_wext_wsc_ie, - [IOC_P2P_CONNECT_DISCONNECT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_connect_disconnect, - [IOC_P2P_PASSWORD_READY - SIOCIWFIRSTPRIV] = mtk_p2p_wext_password_ready, -// [IOC_P2P_SET_PWR_MGMT_PARAM - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_pm_param, - [IOC_P2P_SET_INT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_int, - [IOC_P2P_GET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_get_struct, - [IOC_P2P_SET_STRUCT - SIOCIWFIRSTPRIV] = mtk_p2p_wext_set_struct, - [IOC_P2P_GET_REQ_DEVICE_INFO - SIOCIWFIRSTPRIV] = mtk_p2p_wext_request_dev_info, -}; - - -static const struct iw_priv_args rP2PIwPrivTable[] = { - { - .cmd = IOC_P2P_CFG_DEVICE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CFG_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CFG_DEVICE" - }, - { - .cmd = IOC_P2P_START_STOP_DISCOVERY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_REQ_DEVICE_TYPE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_DISCOVERY" - }, - { - .cmd = IOC_P2P_DISCOVERY_RESULTS, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_RESULT" - }, - { - .cmd = IOC_P2P_WSC_BEACON_PROBE_RSP_IE, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_HOSTAPD_PARAM), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_WSC_IE" - }, - { - .cmd = IOC_P2P_CONNECT_DISCONNECT, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_CONNECT_DEVICE), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_CONNECT" - }, - { - .cmd = IOC_P2P_PASSWORD_READY, - .set_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_PASSWORD_READY), - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_PASSWD_RDY" - }, - { - .cmd = IOC_P2P_GET_STRUCT, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "P2P_GET_STRUCT" - }, - { - .cmd = IOC_P2P_SET_STRUCT, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "P2P_SET_STRUCT" - }, - { - .cmd = IOC_P2P_GET_REQ_DEVICE_INFO, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = IW_PRIV_TYPE_BYTE | (__u16)sizeof(IW_P2P_DEVICE_REQ), - .name = "P2P_GET_REQDEV" - }, - { - /* SET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = 256, - .get_args = IW_PRIV_TYPE_NONE, - .name = "set_oid" - }, - { - /* GET STRUCT sub-ioctls commands */ - .cmd = PRIV_CMD_OID, - .set_args = IW_PRIV_TYPE_NONE, - .get_args = 256, - .name = "get_oid" - } -}; - -const struct iw_handler_def mtk_p2p_wext_handler_def = { - .num_standard = (__u16)sizeof(rP2PIwStandardHandler)/sizeof(iw_handler), - .num_private = (__u16)sizeof(rP2PIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args), - .standard = rP2PIwStandardHandler, - .private = rP2PIwPrivHandler, - .private_args = rP2PIwPrivTable, -#if CFG_SUPPORT_P2P_RSSI_QUERY - .get_wireless_stats = mtk_p2p_wext_get_wireless_stats, -#else - .get_wireless_stats = NULL, -#endif -}; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* for IE Searching */ -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/* Net Device Hooks */ -static int -p2pOpen( - IN struct net_device *prDev - ); - -static int -p2pStop( - IN struct net_device *prDev - ); - -static struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ); - -static void -p2pSetMulticastList( - IN struct net_device *prDev - ); - -static int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ); - -static int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ); - -static int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ); - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Override the implementation of select queue -* -* \param[in] dev Pointer to struct net_device -* \param[in] skb Pointer to struct skb_buff -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ - -unsigned int _p2p_cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp = 0; - - /* skb->priority values from 256->263 are magic values - * directly indicate a specific 802.1d priority. This is - * to allow 802.1d priority to be passed directly in from - * tags - */ - - if (skb->priority >= 256 && skb->priority <= 263) { - return skb->priority - 256; - } - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ip_hdr(skb)->tos & 0xfc; - break; - } - return dscp >> 5; -} - - -static const UINT_16 au16Wlan1dToQueueIdx[8] = { 1, 0, 0, 1, 2, 2, 3, 3 }; - -static UINT_16 -p2pSelectQueue( - struct net_device *dev, - struct sk_buff *skb) -{ - skb->priority = _p2p_cfg80211_classify8021d(skb); - - return au16Wlan1dToQueueIdx[skb->priority]; -} - -static struct net_device *g_P2pPrDev; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->init -* -* \param[in] prDev Pointer to struct net_device. -* -* \retval 0 The execution of wlanInit succeeds. -* \retval -ENXIO No such device. -*/ -/*----------------------------------------------------------------------------*/ -static int -p2pInit( - struct net_device *prDev - ) -{ - if (!prDev) { - return -ENXIO; - } - - return 0; /* success */ -} /* end of p2pInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A function for prDev->uninit -* -* \param[in] prDev Pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -static void -p2pUninit ( - IN struct net_device *prDev - ) -{ - - - return; -} /* end of p2pUninit() */ - - - - - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) -static const struct net_device_ops p2p_netdev_ops = { - .ndo_open = p2pOpen, - .ndo_stop = p2pStop, - .ndo_set_mac_address = p2pSetMACAddress, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - .ndo_set_rx_mode = p2pSetMulticastList, -#else - .ndo_set_multicast_list = p2pSetMulticastList, -#endif - .ndo_get_stats = p2pGetStats, - .ndo_do_ioctl = p2pDoIOCTL, - .ndo_start_xmit = p2pHardStartXmit, - .ndo_select_queue = p2pSelectQueue, - .ndo_init = p2pInit, - .ndo_uninit = p2pUninit, -}; - - -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Allocate memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PAllocInfo ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_WIFI_VAR_T prWifiVar = NULL; - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - prWifiVar = &(prAdapter->rWifiVar); - - ASSERT(prAdapter); - ASSERT(prWifiVar); - - do { - if (prGlueInfo == NULL) { - break; - } - - if (prGlueInfo->prP2PInfo == NULL) { - /*alloc memory for p2p info */ - prGlueInfo->prP2PInfo = - kalMemAlloc(sizeof(GL_P2P_INFO_T), VIR_MEM_TYPE); - prAdapter->prP2pInfo = - kalMemAlloc(sizeof(P2P_INFO_T), VIR_MEM_TYPE); - prWifiVar->prP2PConnSettings = - kalMemAlloc(sizeof(P2P_CONNECTION_SETTINGS_T),VIR_MEM_TYPE); - prWifiVar->prP2pFsmInfo = - kalMemAlloc(sizeof(P2P_FSM_INFO_T),VIR_MEM_TYPE); - prWifiVar->prP2pSpecificBssInfo = - kalMemAlloc(sizeof(P2P_SPECIFIC_BSS_INFO_T),VIR_MEM_TYPE); - } - else { - ASSERT(prAdapter->prP2pInfo != NULL); - ASSERT(prWifiVar->prP2PConnSettings != NULL); - ASSERT(prWifiVar->prP2pFsmInfo != NULL); - ASSERT(prWifiVar->prP2pSpecificBssInfo != NULL); - } - /*MUST set memory to 0 */ - kalMemZero(prGlueInfo->prP2PInfo, sizeof(GL_P2P_INFO_T)); - kalMemZero(prAdapter->prP2pInfo, sizeof(P2P_INFO_T)); - kalMemZero(prWifiVar->prP2PConnSettings, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemZero(prWifiVar->prP2pFsmInfo, sizeof(P2P_FSM_INFO_T)); - kalMemZero(prWifiVar->prP2pSpecificBssInfo, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - } while (FALSE); - - - /* chk if alloc successful or not*/ - if (prGlueInfo->prP2PInfo && - prAdapter->prP2pInfo && - prWifiVar->prP2PConnSettings && - prWifiVar->prP2pFsmInfo && - prWifiVar->prP2pSpecificBssInfo) { - return TRUE; - } - else { - - if (prWifiVar->prP2pSpecificBssInfo) { - kalMemFree(prWifiVar->prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - prWifiVar->prP2pSpecificBssInfo = NULL; - } - if (prWifiVar->prP2pFsmInfo) { - kalMemFree(prWifiVar->prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - - prWifiVar->prP2pFsmInfo = NULL; - } - if (prWifiVar->prP2PConnSettings) { - kalMemFree(prWifiVar->prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - - prWifiVar->prP2PConnSettings = NULL; - } - if (prGlueInfo->prP2PInfo) { - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - - prGlueInfo->prP2PInfo = NULL; - } - if (prAdapter->prP2pInfo) { - kalMemFree(prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - - prAdapter->prP2pInfo = NULL; - } - return FALSE; - } - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free memory for P2P_INFO, GL_P2P_INFO, P2P_CONNECTION_SETTINGS -* P2P_SPECIFIC_BSS_INFO, P2P_FSM_INFO -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ) -{ - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - /* free memory after p2p module is ALREADY unregistered */ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - - kalMemFree(prGlueInfo->prAdapter->prP2pInfo, VIR_MEM_TYPE, sizeof(P2P_INFO_T)); - kalMemFree(prGlueInfo->prP2PInfo, VIR_MEM_TYPE, sizeof(GL_P2P_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings, VIR_MEM_TYPE, sizeof(P2P_CONNECTION_SETTINGS_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo, VIR_MEM_TYPE, sizeof(P2P_FSM_INFO_T)); - kalMemFree(prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo, VIR_MEM_TYPE, sizeof(P2P_SPECIFIC_BSS_INFO_T)); - - /*Reomve p2p bss scan list*/ - scanRemoveAllP2pBssDesc(prGlueInfo->prAdapter); - - /*reset all pointer to NULL */ - prGlueInfo->prP2PInfo = NULL; - prGlueInfo->prAdapter->prP2pInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo = NULL; - prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo = NULL; - - return TRUE; - } - else { - return FALSE; - } - -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Enable Channel for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pEnableChannel( - PUINT_8 pucChIdx, - UINT_8 ucChannelNum, - struct ieee80211_channel *mtk_channels, - UINT_8 mtk_channel_sz -) -{ - UINT_8 ucCurChIdx = *pucChIdx; - - while(TRUE) { - (*pucChIdx)++; - (*pucChIdx) %= mtk_channel_sz; - - if(ucChannelNum == mtk_channels[*pucChIdx].hw_value) { - mtk_channels[*pucChIdx].flags &= ~IEEE80211_CHAN_DISABLED; - break; - } - - if(*pucChIdx == ucCurChIdx) { - printk(KERN_ALERT DRV_NAME "Orphan channel [%d]\n", ucChannelNum); - break; - } - } -} - - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoRegister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - BOOLEAN ret; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_UNREGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERING; - fgDoRegister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoRegister) { - return TRUE; - } - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - - /* Here are functions which need rtnl_lock */ - wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy); - - /* net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - ret = FALSE; - } - else { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERED; - ret = TRUE; - } - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - return ret; -} - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ) -{ - BOOLEAN fgDoUnregister = FALSE; - BOOLEAN fgRollbackRtnlLock = FALSE; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prAdapter); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueInfo->prAdapter->rP2PNetRegState == ENUM_NET_REG_STATE_REGISTERED) { - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERING; - fgDoUnregister = TRUE; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(!fgDoUnregister) { - return TRUE; - } - - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - if(fgIsRtnlLockAcquired && rtnl_is_locked()) { - fgRollbackRtnlLock = TRUE; - rtnl_unlock(); - } - /* Here are functions which need rtnl_lock */ - - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); - - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - - if(fgRollbackRtnlLock) { - rtnl_lock(); - } - - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Update Channel table for cfg80211 for Wi-Fi Direct based on current country code -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pUpdateChannelTableByDomain( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_8 i, uc2gChIdx, uc5gChIdx; - UINT_8 ucMaxChannelNum = ARRAY_SIZE(mtk_2ghz_channels) + ARRAY_SIZE(mtk_5ghz_a_channels); - UINT_8 ucNumOfChannel = ucMaxChannelNum; - RF_CHANNEL_INFO_T aucChannelList[ucMaxChannelNum]; - - uc2gChIdx = uc5gChIdx = 0; - - // 1. Disable all channel - for(i = 0; i < ARRAY_SIZE(mtk_2ghz_channels); i++) { - mtk_2ghz_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - for(i = 0; i < ARRAY_SIZE(mtk_5ghz_a_channels); i++) { - mtk_5ghz_a_channels[i].flags |= IEEE80211_CHAN_DISABLED; - } - - // 2. Get current domain channel list - rlmDomainGetChnlList(prGlueInfo->prAdapter, BAND_NULL, ucMaxChannelNum, &ucNumOfChannel, aucChannelList); - - // 3. Enable specific channel based on domain channel list - for(i = 0; i < ucNumOfChannel; i++) { - switch(aucChannelList[i].eBand) { - case BAND_2G4: - p2pEnableChannel(&uc2gChIdx, aucChannelList[i].ucChannelNum, mtk_2ghz_channels, ARRAY_SIZE(mtk_2ghz_channels)); - break; - - case BAND_5G: - p2pEnableChannel(&uc5gChIdx, aucChannelList[i].ucChannelNum, mtk_5ghz_a_channels, ARRAY_SIZE(mtk_5ghz_a_channels)); - break; - - default: - printk(KERN_ALERT DRV_NAME "Unknow band.\n"); - break; - - } - } - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Register for cfg80211 for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GL_HIF_INFO_T prHif = NULL; - PARAM_MAC_ADDRESS rMacAddr; -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - struct device *prDev; -#endif - - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prHif = &prGlueInfo->rHifInfo; - ASSERT(prHif); - - printk("glRegisterP2P\n"); - - /*0. allocate p2pinfo */ - if(!p2PAllocInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Allocate memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* 1. allocate WIPHY */ - prGlueInfo->prP2PInfo->wdev.wiphy = wiphy_new(&mtk_p2p_config_ops, sizeof(P_GLUE_INFO_T)); - if (!prGlueInfo->prP2PInfo->wdev.wiphy) { - printk(KERN_ALERT DRV_NAME "unable to allocate wiphy for p2p\n"); - - goto err_alloc_wiphy; - } - - /* 1.1 fill wiphy parameters */ -#if MTK_WCN_HIF_SDIO - mtk_wcn_hif_sdio_get_dev(prHif->cltCtx, &prDev); - if(!prDev) { - printk(KERN_ALERT DRV_NAME "unable to get struct dev for p2p\n"); - } -#else - prDev = &(prHif->func->dev); -#endif - set_wiphy_dev(prGlueInfo->prP2PInfo->wdev.wiphy, prDev); - - prGlueInfo->prP2PInfo->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_AP) - | BIT(NL80211_IFTYPE_P2P_CLIENT) - | BIT(NL80211_IFTYPE_P2P_GO) - | BIT(NL80211_IFTYPE_STATION); - - p2pUpdateChannelTableByDomain(prGlueInfo); - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz; - if(prAdapter->fgEnable5GBand) { - prGlueInfo->prP2PInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz; - } - - prGlueInfo->prP2PInfo->wdev.wiphy->mgmt_stypes = mtk_cfg80211_default_mgmt_stypes; - prGlueInfo->prP2PInfo->wdev.wiphy->max_remain_on_channel_duration = 5000; - prGlueInfo->prP2PInfo->wdev.wiphy->n_cipher_suites = 5; - prGlueInfo->prP2PInfo->wdev.wiphy->cipher_suites = (const u32*)cipher_suites; -#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 2, 0) - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL | WIPHY_FLAG_HAVE_AP_SME | WIPHY_FLAG_OFFCHAN_TX; -#else - prGlueInfo->prP2PInfo->wdev.wiphy->flags = WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_HAVE_AP_SME; -// printk(KERN_ALERT DRV_NAME "Not support WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL | WIPHY_FLAG_HAVE_AP_SME | WIPHY_FLAG_OFFCHAN_TX\n"); -#endif - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ssids = MAX_SCAN_LIST_NUM; - prGlueInfo->prP2PInfo->wdev.wiphy->max_scan_ie_len = MAX_SCAN_IE_LEN; - prGlueInfo->prP2PInfo->wdev.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; -#endif - -#if 0 - /* 2. Register WIPHY */ - if(wiphy_register(prGlueInfo->prP2PInfo->wdev.wiphy) < 0) { - printk(KERN_ALERT DRV_NAME "Couldn't register wiphy device for p2p\n"); - - goto err_reg_wiphy; - } -#endif - - /* 2.1 set priv as pointer to glue structure */ - *((P_GLUE_INFO_T *) wiphy_priv(prGlueInfo->prP2PInfo->wdev.wiphy)) = prGlueInfo; - - /* 2.2 wdev initialization */ - if(fgIsApMode) { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_AP; - } else { - prGlueInfo->prP2PInfo->wdev.iftype = NL80211_IFTYPE_P2P_CLIENT; - } - -#endif /* CFG_ENABLE_WIFI_DIRECT_CFG_80211 */ - - /* 3. allocate netdev */ - prGlueInfo->prP2PInfo->prDevHandler = alloc_netdev_mq(sizeof(P_GLUE_INFO_T), prDevName, ether_setup, CFG_MAX_TXQ_NUM); - if (!prGlueInfo->prP2PInfo->prDevHandler) { - printk(KERN_ALERT DRV_NAME "unable to allocate netdevice for p2p\n"); - - printk("unable to allocate netdevice for p2p\n"); - - goto err_alloc_netdev; - } - - /* 4. setup netdev */ - /* 4.1 Point to shared glue structure */ - *((P_GLUE_INFO_T *) netdev_priv(prGlueInfo->prP2PInfo->prDevHandler)) = prGlueInfo; - - /* 4.2 fill hardware address */ - COPY_MAC_ADDR(rMacAddr, prAdapter->rMyMacAddr); - rMacAddr[0] ^= 0x2; // change to local administrated address - memcpy(prGlueInfo->prP2PInfo->prDevHandler->dev_addr, rMacAddr, ETH_ALEN); - memcpy(prGlueInfo->prP2PInfo->prDevHandler->perm_addr, prGlueInfo->prP2PInfo->prDevHandler->dev_addr, ETH_ALEN); - - /* 4.3 register callback functions */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) - prGlueInfo->prP2PInfo->prDevHandler->netdev_ops = &p2p_netdev_ops; -#else - prGlueInfo->prP2PInfo->prDevHandler->open = p2pOpen; - prGlueInfo->prP2PInfo->prDevHandler->stop = p2pStop; - prGlueInfo->prP2PInfo->prDevHandler->get_stats = p2pGetStats; - prGlueInfo->prP2PInfo->prDevHandler->set_multicast_list = p2pSetMulticastList; - prGlueInfo->prP2PInfo->prDevHandler->hard_start_xmit = p2pHardStartXmit; - prGlueInfo->prP2PInfo->prDevHandler->do_ioctl = p2pDoIOCTL; - prGlueInfo->prP2PInfo->prDevHandler->set_mac_address = p2pSetMACAddress; -#endif -// prGlueInfo->prP2PInfo->prDevHandler->wireless_handlers = &mtk_p2p_wext_handler_def; - - -#if (MTK_WCN_HIF_SDIO == 0) - SET_NETDEV_DEV(prGlueInfo->prP2PInfo->prDevHandler, &(prHif->func->dev)); -#endif - - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - prGlueInfo->prP2PInfo->prDevHandler->ieee80211_ptr = &(prGlueInfo->prP2PInfo->wdev); - prGlueInfo->prP2PInfo->wdev.netdev = prGlueInfo->prP2PInfo->prDevHandler; -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - prGlueInfo->prP2PInfo->prDevHandler->features = NETIF_F_IP_CSUM; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#if 0 - /* 7. net device initialize */ - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* 8. register for net device */ - if (register_netdev(prGlueInfo->prP2PInfo->prDevHandler) < 0) { - printk(KERN_ALERT DRV_NAME "unable to register netdevice for p2p\n"); - - goto err_reg_netdev; - } -#endif - - /* 8. set p2p net device register state */ - prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_UNREGISTERED; - - /* 9. setup running mode*/ - prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo->fgIsApMode = fgIsApMode; - - /* 10. finish */ - p2pFsmInit(prAdapter); - - p2pFuncInitConnectionSettings(prAdapter, prAdapter->rWifiVar.prP2PConnSettings); - - /* Active network too early would cause HW not able to sleep. - * Defer the network active time. - */ -// nicActivateNetwork(prAdapter, NETWORK_TYPE_P2P_INDEX); - - return TRUE; -#if 0 -err_reg_netdev: - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif -err_alloc_netdev: -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -// wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); - -//err_reg_wiphy: - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; - -err_alloc_wiphy: -#endif - - return FALSE; -} /* end of glRegisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Unregister Net Device for Wi-Fi Direct -* -* \param[in] prGlueInfo Pointer to glue info -* -* \return TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - p2pFsmUninit(prGlueInfo->prAdapter); - - nicDeactivateNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - -#if 0 - /* Release command, mgmt and security frame belong to P2P network in - * prGlueInfo->prCmdQue - * prAdapter->rPendingCmdQueue - * prAdapter->rTxCtrl.rTxMgmtTxingQueue - * To ensure there is no pending CmdDone/TxDone handler to be executed after p2p module is removed. - */ - - /* Clear CmdQue*/ - kalClearMgmtFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - kalClearSecurityFramesByNetType(prGlueInfo, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingCmdQue*/ - wlanReleasePendingCMDbyNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - /* Clear PendingTxMsdu */ - nicFreePendingTxMsduInfoByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); -#endif - -#if 0 - /* prepare for removal */ - if(netif_carrier_ok(prGlueInfo->prP2PInfo->prDevHandler)) { - netif_carrier_off(prGlueInfo->prP2PInfo->prDevHandler); - } - - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - /* netdevice unregistration & free */ - unregister_netdev(prGlueInfo->prP2PInfo->prDevHandler); -#endif - free_netdev(prGlueInfo->prP2PInfo->prDevHandler); - prGlueInfo->prP2PInfo->prDevHandler = NULL; - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#if 0 - wiphy_unregister(prGlueInfo->prP2PInfo->wdev.wiphy); -#endif - wiphy_free(prGlueInfo->prP2PInfo->wdev.wiphy); - prGlueInfo->prP2PInfo->wdev.wiphy = NULL; -#endif - - /* Free p2p memory */ -#if 1 - if(!p2PFreeInfo(prGlueInfo)) { - printk(KERN_ALERT DRV_NAME "Free memory for p2p FAILED\n"); - ASSERT(0); - return FALSE; - } -#endif - return TRUE; - -} /* end of glUnregisterP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for stop p2p fsm immediate - * - * \param[in] prGlueInfo Pointer to struct P_GLUE_INFO_T. - * - * \retval TRUE The execution succeeds. - * \retval FALSE The execution failed. - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ) -{ -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prGlueInfo); - -// prAdapter = prGlueInfo->prAdapter; -// ASSERT(prAdapter); - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prGlueInfo->prP2PInfo->prDevHandler); - - -#if 0 - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc( - prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - printk(KERN_ALERT DRV_NAME "Allocate for p2p mesasage FAILED\n"); - //return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_UNBUF); - -#endif - - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - return TRUE; -} /* end of p2pStop() */ - - -/* Net Device Hooks */ -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device open (ifup) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pOpen( - IN struct net_device *prDev - ) -{ -// P_GLUE_INFO_T prGlueInfo = NULL; -// P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - - ASSERT(prDev); - -#if 0 // Move after device name set. (mtk_p2p_set_local_dev_info) - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - /* 2. carrier on & start TX queue */ - netif_carrier_on(prDev); - netif_tx_start_all_queues(prDev); - - return 0; /* success */ -} /* end of p2pOpen() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A function for net_device stop (ifdown) - * - * \param[in] prDev Pointer to struct net_device. - * - * \retval 0 The execution succeeds. - * \retval < 0 The execution failed. - */ -/*----------------------------------------------------------------------------*/ -static int -p2pStop( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - // P_ADAPTER_T prAdapter = NULL; -// P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - struct cfg80211_scan_request *prScanRequest = NULL; - GLUE_SPIN_LOCK_DECLARATION(); - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - ASSERT(prGlueP2pInfo); - - /* CFG80211 down */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - if(prGlueP2pInfo->prScanRequest != NULL) { - prScanRequest = prGlueP2pInfo->prScanRequest; - prGlueP2pInfo->prScanRequest = NULL; - } - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV); - - if(prScanRequest) { - cfg80211_scan_done(prScanRequest, TRUE); - } - -#if 0 - - /* 1. stop TX queue */ - netif_tx_stop_all_queues(prDev); - - /* 2. switch P2P-FSM off */ - /* 2.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 2.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = FALSE; - - /* 2.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - /* 3. stop queue and turn off carrier */ - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_DISCONNECTED; - - netif_tx_stop_all_queues(prDev); - if(netif_carrier_ok(prDev)) { - netif_carrier_off(prDev); - } - - return 0; -} /* end of p2pStop() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, to get the network interface statistical - * information. - * - * Whenever an application needs to get statistics for the interface, this method - * is called. This happens, for example, when ifconfig or netstat -i is run. - * - * \param[in] prDev Pointer to struct net_device. - * - * \return net_device_stats buffer pointer. - */ -/*----------------------------------------------------------------------------*/ -struct net_device_stats * -p2pGetStats ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - -#if 1 // frog temp fix - //@FIXME - //prDev->stats.rx_packets = 0; - //prDev->stats.tx_packets = 0; - prDev->stats.tx_errors = 0; - prDev->stats.rx_errors = 0; - //prDev->stats.rx_bytes = 0; - //prDev->stats.tx_bytes = 0; - prDev->stats.multicast = 0; - - return &prDev->stats; - -#else - prGlueInfo->prP2PInfo->rNetDevStats.rx_packets = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_packets = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_bytes = 0; - prGlueInfo->prP2PInfo->rNetDevStats.tx_bytes = 0; - prGlueInfo->prP2PInfo->rNetDevStats.rx_errors = 0; - prGlueInfo->prP2PInfo->rNetDevStats.multicast = 0; - - return &prGlueInfo->prP2PInfo->rNetDevStats; -#endif -} /* end of p2pGetStats() */ - - - - -static void -p2pSetMulticastList ( - IN struct net_device *prDev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - g_P2pPrDev = prDev; - - //4 Mark HALT, notify main thread to finish current job - prGlueInfo->u4Flag |= GLUE_FLAG_SUB_MOD_MULTICAST; - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - -} /* p2pSetMulticastList */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief This function is to set multicast list and set rx mode. - * - * \param[in] prDev Pointer to struct net_device - * - * \return (none) - */ -/*----------------------------------------------------------------------------*/ -void -mtk_p2p_wext_set_Multicastlist ( - P_GLUE_INFO_T prGlueInfo - ) -{ - UINT_32 u4SetInfoLen = 0; - struct net_device *prDev = g_P2pPrDev; - - prGlueInfo = (NULL != prDev) ? *((P_GLUE_INFO_T *) netdev_priv(prDev)) : NULL; - - ASSERT(prDev); - ASSERT(prGlueInfo); - if (!prDev || !prGlueInfo) { - printk(KERN_WARNING DRV_NAME" abnormal dev or skb: prDev(0x%p), prGlueInfo(0x%p)\n", prDev, prGlueInfo); - return; - } - - - if (prDev->flags & IFF_PROMISC) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_PROMISCUOUS; - } - - if (prDev->flags & IFF_BROADCAST) { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_BROADCAST; - } - - if (prDev->flags & IFF_MULTICAST) { - if ((prDev->flags & IFF_ALLMULTI) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - (netdev_mc_count(prDev) > MAX_NUM_GROUP_ADDR)) { -#else - (prDev->mc_count > MAX_NUM_GROUP_ADDR)) { -#endif - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_ALL_MULTICAST; - } - else { - prGlueInfo->prP2PInfo->u4PacketFilter |= PARAM_PACKET_FILTER_MULTICAST; - } - } - - if (prGlueInfo->prP2PInfo->u4PacketFilter & PARAM_PACKET_FILTER_MULTICAST) { - /* Prepare multicast address list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - struct netdev_hw_addr *ha; -#else - struct dev_mc_list *prMcList; -#endif - UINT_32 i = 0; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) - netdev_for_each_mc_addr(ha, prDev) { - if(i < MAX_NUM_GROUP_ADDR) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), ha->addr); - i++; - } - } -#else - for (i = 0, prMcList = prDev->mc_list; - (prMcList) && (i < prDev->mc_count) && (i < MAX_NUM_GROUP_ADDR); - i++, prMcList = prMcList->next) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucMCAddrList[i]), prMcList->dmi_addr); - } -#endif - - DBGLOG(P2P, TRACE, ("SEt Multicast Address List\n")); - - if (i >= MAX_NUM_GROUP_ADDR) { - return; - } - wlanoidSetP2PMulticastList(prGlueInfo->prAdapter, - &(prGlueInfo->prP2PInfo->aucMCAddrList[0]), - (i * ETH_ALEN), - &u4SetInfoLen); - - } - - return; -} /* end of p2pSetMulticastList() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * * \brief This function is TX entry point of NET DEVICE. - * * - * * \param[in] prSkb Pointer of the sk_buff to be sent - * * \param[in] prDev Pointer to struct net_device - * * - * * \retval NETDEV_TX_OK - on success. - * * \retval NETDEV_TX_BUSY - on failure, packet will be discarded by upper layer. - * */ -/*----------------------------------------------------------------------------*/ -int -p2pHardStartXmit( - IN struct sk_buff *prSkb, - IN struct net_device *prDev - ) -{ - P_QUE_ENTRY_T prQueueEntry = NULL; - P_QUE_T prTxQueue = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_16 u2QueueIdx = 0; - - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prSkb); - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip tx\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - - // mark as P2P packets - GLUE_SET_PKT_FLAG_P2P(prSkb); -#if CFG_ENABLE_PKT_LIFETIME_PROFILE - GLUE_SET_PKT_ARRIVAL_TIME(prSkb, kalGetTimeTick()); -#endif - - prQueueEntry = (P_QUE_ENTRY_T) GLUE_GET_PKT_QUEUE_ENTRY(prSkb); - prTxQueue = &prGlueInfo->rTxQueue; - - if (wlanProcessSecurityFrame(prGlueInfo->prAdapter, (P_NATIVE_PACKET) prSkb) == FALSE) { - - u2QueueIdx = skb_get_queue_mapping(prSkb); - ASSERT(u2QueueIdx < CFG_MAX_TXQ_NUM); - - if (u2QueueIdx >= CFG_MAX_TXQ_NUM) { - printk(KERN_INFO DRV_NAME"Incorrect queue index, skip this frame\n"); - dev_kfree_skb(prSkb); - return NETDEV_TX_OK; - } - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - QUEUE_INSERT_TAIL(prTxQueue, prQueueEntry); - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_TX_QUE); - - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingFrameNum); - GLUE_INC_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx]); - - if (prGlueInfo->ai4TxPendingFrameNumPerQueue[NETWORK_TYPE_P2P_INDEX][u2QueueIdx] >= CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD) { - netif_stop_subqueue(prDev, u2QueueIdx); - } - } - else { - GLUE_INC_REF_CNT(prGlueInfo->i4TxPendingSecurityFrameNum); - } - - kalSetEvent(prGlueInfo); - - /* Statistic usage. */ - prDev->stats.tx_bytes += prSkb->len; - prDev->stats.tx_packets++; - - return NETDEV_TX_OK; -} /* end of p2pHardStartXmit() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief A method of struct net_device, a primary SOCKET interface to configure - * the interface lively. Handle an ioctl call on one of our devices. - * Everything Linux ioctl specific is done here. Then we pass the contents - * of the ifr->data to the request message handler. - * - * \param[in] prDev Linux kernel netdevice - * - * \param[in] prIFReq Our private ioctl request structure, typed for the generic - * struct ifreq so we can use ptr to function - * - * \param[in] cmd Command ID - * - * \retval WLAN_STATUS_SUCCESS The IOCTL command is executed successfully. - * \retval OTHER The execution of IOCTL command is failed. - */ -/*----------------------------------------------------------------------------*/ -int -p2pDoIOCTL( - struct net_device *prDev, - struct ifreq *prIFReq, - int i4Cmd - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - struct iwreq *prIwReq = (struct iwreq *)prIFReq; - struct iw_request_info rIwReqInfo; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo->u4ReadyFlag == 0) { - // adapter not ready yet - return -EINVAL; - } - - // fill rIwReqInfo - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch(i4Cmd) { - case SIOCSIWENCODEEXT: - /* Set Encryption Material after 4-way handshaking is done */ - if (prIwReq->u.encoding.pointer) { - u4ExtraSize = prIwReq->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - prIwReq->u.encoding.pointer, - prIwReq->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (prIwReq->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if(ret == 0) { - ret = mtk_p2p_wext_set_key(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - break; - - case SIOCSIWMLME: - /* IW_MLME_DISASSOC used for disconnection*/ - if (prIwReq->u.data.length != sizeof(struct iw_mlme)) { - printk(KERN_INFO "MLME buffer strange:%d\n", prIwReq->u.data.length); - ret = -EINVAL; - break; - } - - if (!prIwReq->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, prIwReq->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = mtk_p2p_wext_mlme_handler(prDev, &rIwReqInfo, &(prIwReq->u), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - case SIOCGIWPRIV: - /* This ioctl is used to list all IW privilege ioctls */ - ret = mtk_p2p_wext_get_priv(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCGIWSCAN: - ret = mtk_p2p_wext_discovery_results(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case SIOCSIWAUTH: - ret = mtk_p2p_wext_set_auth(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; - - case IOC_P2P_CFG_DEVICE: - case IOC_P2P_PROVISION_COMPLETE: - case IOC_P2P_START_STOP_DISCOVERY: - case IOC_P2P_DISCOVERY_RESULTS: - case IOC_P2P_WSC_BEACON_PROBE_RSP_IE: - case IOC_P2P_CONNECT_DISCONNECT: - case IOC_P2P_PASSWORD_READY: - case IOC_P2P_GET_STRUCT: - case IOC_P2P_SET_STRUCT: - case IOC_P2P_GET_REQ_DEVICE_INFO: - ret = rP2PIwPrivHandler[i4Cmd - SIOCIWFIRSTPRIV](prDev, &rIwReqInfo, &(prIwReq->u), (char *)&(prIwReq->u)); - break; -#if CFG_SUPPORT_P2P_RSSI_QUERY - case SIOCGIWSTATS: - ret = mtk_p2p_wext_get_rssi(prDev, &rIwReqInfo, &(prIwReq->u), NULL); - break; -#endif - default: - ret = -ENOTTY; - } - - return ret; -} /* end of p2pDoIOCTL() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To report the private supported IOCTLs table to user space. - * - * \param[in] prDev Net device requested. - * \param[out] prIfReq Pointer to ifreq structure, content is copied back to - * user space buffer in gl_iwpriv_table. - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - - ASSERT(prDev); - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rP2PIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rP2PIwPrivTable, sizeof(rP2PIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* end of mtk_p2p_wext_get_priv() */ - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To indicate P2P-FSM for re-associate to the connecting device - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 For success. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_reconnect: P2P Reconnect\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_reconnect() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief MLME command handler -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_mlme *mlme = (struct iw_mlme *)extra; - P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_mlme_handler:\n")); - - switch (mlme->cmd) { - case IW_MLME_DISASSOC: - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, mlme->addr.sa_data); - - prMsgP2PConnAbt->u2ReasonCode = mlme->reason_code; - - - if (EQUAL_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prP2pBssInfo->aucOwnMacAddr)) { - DBGLOG(P2P, TRACE, ("P2P Connection Abort:\n")); - - /* 1.2 fill message */ - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - } - else { - DBGLOG(P2P, TRACE, ("P2P Connection Pause:\n")); - - /* 1.2 fill message */ - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); - - break; - - default: - return -EOPNOTSUPP; - } -#endif - return 0; -} /* end of mtk_p2p_wext_mlme_handler() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PROVISION_COMPLETE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_MSG_HDR_T prMsgHdr; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - switch(prData->flags) { - case P2P_PROVISIONING_SUCCESS: - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_HDR_T)); - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - - prGlueInfo->prP2PInfo->u4CipherPairwise = IW_AUTH_CIPHER_CCMP; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - - break; - - case P2P_PROVISIONING_FAIL: - - break; - - default: - return -EOPNOTSUPP; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_set_provision_complete() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_START_STOP_DISCOVERY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ -#if 0 - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - P_IW_P2P_REQ_DEVICE_TYPE prReqDeviceType = (P_IW_P2P_REQ_DEVICE_TYPE) extra; - UINT_8 au4IeBuf[MAX_IE_LENGTH]; - P_MSG_HDR_T prMsgHdr; - P_MSG_P2P_DEVICE_DISCOVER_T prDiscoverMsg; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - if(prData->flags == P2P_STOP_DISCOVERY) { - prMsgHdr = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_HDR_T)); - - if (!prMsgHdr) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgHdr, - MSG_SEND_METHOD_BUF); - } - else if(prData->flags == P2P_START_DISCOVERY) { - - /* retrieve IE for Probe Response */ - if(prReqDeviceType->probe_rsp_len > 0) { - if(prReqDeviceType->probe_rsp_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prReqDeviceType->probe_rsp_ie, prReqDeviceType->probe_rsp_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prReqDeviceType->probe_rsp_len; - } - else { - return -E2BIG; - } - } - - /* retrieve IE for Probe Request */ - if(prReqDeviceType->probe_req_len > 0) { - if(prReqDeviceType->probe_req_len <= MAX_IE_LENGTH) { - if(copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prReqDeviceType->probe_req_ie, prReqDeviceType->probe_req_len)) { - return -EFAULT; - } - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prReqDeviceType->probe_req_len; - } - else { - return -E2BIG; - } - } - /* update IE for Probe Request */ - - if(prReqDeviceType->scan_type == P2P_LISTEN) { - /* update listening parameter */ - - /* @TODO: update prConnSettings for Probe Response IE */ - } - else { - // indicate P2P-FSM with MID_MNY_P2P_DEVICE_DISCOVERY - prDiscoverMsg = (P_MSG_P2P_DEVICE_DISCOVER_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_DEVICE_DISCOVER_T)); - - if (!prDiscoverMsg) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - prDiscoverMsg->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - prDiscoverMsg->u4DevDiscoverTime = 0; // unlimited - prDiscoverMsg->fgIsSpecificType = TRUE; - prDiscoverMsg->rTargetDeviceType.u2CategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[0])); - prDiscoverMsg->rTargetDeviceType.u2SubCategoryID = *(PUINT_16)(&(prReqDeviceType->pri_device_type[6]));; - COPY_MAC_ADDR(prDiscoverMsg->aucTargetDeviceID, aucNullAddr); - - /* @FIXME: parameter to be refined, where to pass IE buffer ? */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prDiscoverMsg, - MSG_SEND_METHOD_BUF); - } - } - else { - return -EINVAL; - } -#endif - - return 0; -} /* end of mtk_p2p_wext_start_stop_discovery() */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_INVITATION_STRUCT prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitation = (P_IW_P2P_IOCTL_INVITATION_STRUCT)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - if (prIoctlInvitation->ucReinvoke == 1) { - // TODO: Set Group ID - p2pFuncSetGroupID(prAdapter, prIoctlInvitation->aucGroupID, prIoctlInvitation->aucSsid, prIoctlInvitation->u4SsidLen); - } - - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - // TODO: Do Invitation. - prMsgP2PInvitationReq = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - if (!prMsgP2PInvitationReq) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationReq->aucDeviceID, prIoctlInvitation->aucDeviceID, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationReq, - MSG_SEND_METHOD_BUF); - - } - - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_request */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_abort ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; -#if 0 - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_ABORT_INVITATION prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)NULL; - - UINT_8 bssid[MAC_ADDR_LEN]; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlInvitationAbort = (P_IW_P2P_IOCTL_ABORT_INVITATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - else { - P_MSG_P2P_INVITATION_REQUEST_T prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T)NULL; - - prMsgP2PInvitationAbort = (P_MSG_P2P_INVITATION_REQUEST_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_INVITATION_REQUEST_T)); - - if (!prMsgP2PInvitationAbort) { - ASSERT(0); // Can't trigger P2P FSM - i4Status = -ENOMEM; - break; - } - - - /* 1.2 fill message */ - kalMemCopy(prMsgP2PInvitationAbort->aucDeviceID, prIoctlInvitationAbort->dev_addr, MAC_ADDR_LEN); - - DBGLOG(P2P, TRACE, ("mtk_p2p_wext_invitation_request: P2P Invitation Req\n")); - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgP2PInvitationAbort, - MSG_SEND_METHOD_BUF); - - } - - - } while (FALSE); -#endif - - return i4Status; - -} -/* mtk_p2p_wext_invitation_abort */ - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief To override p2p interface address - * - * \param[in] prDev Net device requested. - * \param[in] addr Pointer to address - * - * \retval 0 For success. - * \retval -E2BIG For user's buffer size is too small. - * \retval -EFAULT For fail. - * - */ -/*----------------------------------------------------------------------------*/ -int -p2pSetMACAddress( - IN struct net_device *prDev, - void *addr - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@FIXME - return eth_mac_addr(prDev, addr); -} - - - - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher suite -* -* \param[in] prDev Net device requested. -* \param[out] -* -* \retval 0 Success. -* \retval -EINVAL Invalid parameter -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_param *prAuth = (struct iw_param *)wrqu; - - ASSERT(prDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prDev, prAuth)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: - break; - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->prP2PInfo->u4CipherPairwise = prAuth->value; - break; - case IW_AUTH_CIPHER_GROUP: - case IW_AUTH_KEY_MGMT: - case IW_AUTH_TKIP_COUNTERMEASURES: - case IW_AUTH_DROP_UNENCRYPTED: - case IW_AUTH_80211_AUTH_ALG: - case IW_AUTH_WPA_ENABLED: - case IW_AUTH_RX_UNENCRYPTED_EAPOL: - case IW_AUTH_ROAMING_CONTROL: - case IW_AUTH_PRIVACY_INVOKED: - default: - //@TODO - break; - } - - return 0; -} /* end of mtk_p2p_wext_set_auth() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_key( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int ret = 0; - struct iw_encode_ext *prIWEncExt; - struct iw_point *prEnc; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - UINT_8 keyStructBuf[100]; - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - do { - if (wrqu->encoding.pointer) { - u4ExtraSize = wrqu->encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - wrqu->encoding.pointer, - wrqu->encoding.length)) { - ret = -EFAULT; - break; - } - } - else if (wrqu->encoding.length != 0) { - ret = -EINVAL; - break; - } - - prEnc = &wrqu->encoding; - prIWEncExt = (struct iw_encode_ext *) prExtraBuf; - - if (GLUE_CHK_PR3(prDev, prEnc, prExtraBuf) == TRUE) { - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - - if ((prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { // Key Removal - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if(rStatus != WLAN_STATUS_SUCCESS) - ret = -EFAULT; - } - else { - if(prIWEncExt->alg == IW_ENCODE_ALG_CCMP) { - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - ((prEnc->flags & IW_ENCODE_INDEX) - 1) : 0; - if (prKey->u4KeyIndex <= 3) { - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - ret = -EFAULT; - } - } - else { - ret = -EINVAL; - } - } - else { - ret = -EINVAL; - } - } - } - else - ret = -EINVAL; - - } while(FALSE); - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - - return ret; -} /* end of mtk_p2p_wext_set_key() */ - - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief set the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("set_powermode = %d, value = %d\n", wrqu->power.disabled, wrqu->power.value); - struct iw_param *prPower = (struct iw_param*)&wrqu->power; -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - printk(KERN_DEBUG "%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief get the p2p gc power mode -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prNetDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - //printk("mtk_p2p_wext_get_powermode\n"); - //wrqu->power.disabled = 0; - //wrqu->power.value = 1; - - struct iw_param *prPower = (struct iw_param*)&wrqu->power; - PARAM_POWER_MODE ePowerMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - - -#if 1 - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CFG_DEVICE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_CFG_DEVICE_TYPE prDeviceCfg = (P_IW_P2P_CFG_DEVICE_TYPE) extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - //P_MSG_P2P_FUNCTION_SWITCH_T prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo; - - // update connection settings for P2P-FSM - // 1. update SSID - if(prDeviceCfg->ssid_len > ELEM_MAX_LEN_SSID) { - prConnSettings->ucSSIDLen = ELEM_MAX_LEN_SSID; - } - else { - prConnSettings->ucSSIDLen = prDeviceCfg->ssid_len; - } - - if(copy_from_user(prConnSettings->aucSSID, prDeviceCfg->ssid, prConnSettings->ucSSIDLen)) { - return -EFAULT; - } - - // 2. update device type (WPS IE) - kalMemCopy(&(prConnSettings->rPrimaryDevTypeBE), &(prDeviceCfg->pri_device_type), sizeof(DEVICE_TYPE_T)); -#if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT - kalMemCopy(&(prConnSettings->arSecondaryDevTypeBE[0]), &(prDeviceCfg->snd_device_type), sizeof(DEVICE_TYPE_T)); -#endif - - // 3. update device name - if(prDeviceCfg->device_name_len > WPS_ATTRI_MAX_LEN_DEVICE_NAME) { - prConnSettings->ucDevNameLen = WPS_ATTRI_MAX_LEN_DEVICE_NAME; - } - else { - prConnSettings->ucDevNameLen = prDeviceCfg->device_name_len; - } - if(copy_from_user(prConnSettings->aucDevName, prDeviceCfg->device_name, prConnSettings->ucDevNameLen)) { - return -EFAULT; - } - - // 4. update GO intent - prConnSettings->ucGoIntent = prDeviceCfg->intend; - - - /* Preferred channel bandwidth */ - prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode = - prDeviceCfg->ch_width ? CONFIG_BW_20_40M : CONFIG_BW_20M; - -#if 0 - /* 1. switch P2P-FSM on */ - /* 1.1 allocate for message */ - prFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - - if (!prFuncSwitch) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - /* 1.2 fill message */ - prFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - prFuncSwitch->fgIsFuncOn = TRUE; - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - return 0; -} /* end of mtk_p2p_wext_set_local_dev_info() */ - - - - - - -/*----------------------------------------------------------------------------*/ -/*! - * \brief I/O Control handler for both - * IOC_P2P_START_STOP_DISCOVERY & SIOCGIWSCAN - * - * \param[in] prDev Net device requested. - * \param[inout] wrqu Pointer to iwreq_data - * - * \retval 0 Success. - * \retval -EFAULT Setting parameters to driver fail. - * \retval -EOPNOTSUPP Key size not supported. - * - * \note - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - struct iw_event iwe; - char *current_ev = extra; - UINT_32 i; - P_GLUE_INFO_T prGlueInfo = NULL; - P_ADAPTER_T prAdapter = NULL; - P_P2P_INFO_T prP2PInfo = (P_P2P_INFO_T)NULL; - P_EVENT_P2P_DEV_DISCOVER_RESULT_T prTargetResult = (P_EVENT_P2P_DEV_DISCOVER_RESULT_T)NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prP2PInfo = prAdapter->prP2pInfo; - - for(i = 0 ; i < prP2PInfo->u4DeviceNum ; i++) { - prTargetResult = &prP2PInfo->arP2pDiscoverResult[i]; - - /* SIOCGIWAP */ - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, - prTargetResult->aucInterfaceAddr, - 6); - - current_ev = iwe_stream_add_event(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, IW_EV_ADDR_LEN); - - - /* SIOCGIWESSID */ - iwe.cmd = SIOCGIWESSID; - iwe.u.data.flags = 1; - iwe.u.data.length = prTargetResult->u2NameLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, prTargetResult->aucName); - - /* IWEVGENIE for WPA IE */ - if(prTargetResult->u2IELength <= 600 && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#if CFG_SUPPORT_WPS - - /* IWEVGENIE for WPS IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPSIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - -#endif - - /* IWEVGENIE for RSN IE */ - if((prTargetResult->u2IELength <= 600) && wextSrchDesiredWPAIE(prTargetResult->pucIeBuf, - prTargetResult->u2IELength, - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwe.cmd = IWEVGENIE; - iwe.u.data.flags = 1; - iwe.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)prDesiredIE); - } - - /* IOC_P2P_GO_WSC_IE */ -#if 1 - /* device capability */ - if (1) { - UINT_8 data[40]; - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 8 + sizeof("p2p_cap="); - - snprintf(data, iwe.u.data.length, "p2p_cap=%02x%02x%02x%02x%c", - prTargetResult->ucDeviceCapabilityBitmap, prTargetResult->ucGroupCapabilityBitmap, - (UINT_8)prTargetResult->u2ConfigMethod, (UINT_8)(prTargetResult->u2ConfigMethod >> 8), '\0' ); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - - //printk("%s\n", data); - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 12 + sizeof("p2p_dev_type="); - - snprintf(data, iwe.u.data.length, "p2p_dev_type=%02x%02x%02x%02x%02x%02x%c", - (UINT_8)prTargetResult->rPriDevType.u2CategoryID,(UINT_8)prTargetResult->rPriDevType.u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[0].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[0].u2SubCategoryID, - (UINT_8)prTargetResult->arSecDevType[1].u2CategoryID,(UINT_8)prTargetResult->arSecDevType[1].u2SubCategoryID, - '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - kalMemZero(data, 40); - - iwe.cmd = IWEVCUSTOM; - iwe.u.data.flags = 0; - iwe.u.data.length = 17 + sizeof("p2p_grp_bssid="); - - snprintf(data, iwe.u.data.length, "p2p_grp_bssid="MACSTR"%c", - MAC2STR(prTargetResult->aucBSSID), '\0'); - current_ev = iwe_stream_add_point(info, current_ev, - extra + IW_SCAN_MAX_DATA, - &iwe, (char *)data); - //printk("%s\n", data); - - } -#endif - } - - /* Length of data */ - wrqu->data.length = (current_ev - extra); - wrqu->data.flags = 0; - - return 0; -} /* end of mtk_p2p_wext_discovery_results() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_WSC_BEACON_PROBE_RSP_IE) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_HOSTAPD_PARAM prHostapdParam = (P_IW_P2P_HOSTAPD_PARAM)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (prHostapdParam->len > 0) { - if (prHostapdParam->len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[0], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prHostapdParam->data, prHostapdParam->len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[0] = prHostapdParam->len; - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prHostapdParam->len; - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - bssUpdateBeaconContent(prAdapter, NETWORK_TYPE_P2P_INDEX); - - //@TODO: send message to P2P-FSM - - return 0; -} /* end of mtk_p2p_wext_wsc_ie() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_CONNECT_DISCONNECT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_point *prData= (struct iw_point *)&wrqu->data; -// P_IW_P2P_CONNECT_DEVICE prConnectDevice = (P_IW_P2P_CONNECT_DEVICE)extra; -// P_MSG_HDR_T prMsgHdr; -// P_MSG_P2P_CONNECTION_REQUEST_T prMsgP2PConnReq; -// P_MSG_P2P_CONNECTION_ABORT_T prMsgP2PConnAbt; -// UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - if (prData->flags == P2P_CONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_REQ - prMsgP2PConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (!prMsgP2PConnReq) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnReq, - MSG_SEND_METHOD_BUF); -#endif - } - else if(prData->flags == P2P_DISCONNECT) { -#if 0 - // indicate P2P-FSM with MID_MNY_P2P_CONNECTION_ABORT - prMsgP2PConnAbt = (P_MSG_HDR_T) cnmMemAlloc(prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (!prMsgP2PConnAbt) { - ASSERT(0); // Can't trigger P2P FSM - return -ENOMEM; - } - - COPY_MAC_ADDR(prMsgP2PConnAbt->aucTargetID, prConnectDevice->sta_addr); - - prMsgP2PConnAbt->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgP2PConnAbt, - MSG_SEND_METHOD_BUF); -#endif - } - else { - return -EINVAL; - } - - return 0; -} /* end of mtk_p2p_wext_connect_disconnect() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_PASSWORD_READY) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_PASSWORD_READY prPasswordReady = (P_IW_P2P_PASSWORD_READY)extra; - P_P2P_CONNECTION_SETTINGS_T prConnSettings; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - prConnSettings = prAdapter->rWifiVar.prP2PConnSettings; - - /* retrieve IE for Probe Request */ - if (prPasswordReady->probe_req_len > 0) { - if (prPasswordReady->probe_req_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[1], prPasswordReady->probe_req_ie, prPasswordReady->probe_req_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[1] = prPasswordReady->probe_req_len; - - /* retrieve IE for Probe Response */ - if (prPasswordReady->probe_rsp_len > 0) { - if (prPasswordReady->probe_rsp_len <= MAX_WSC_IE_LENGTH) { - if (copy_from_user(prGlueInfo->prP2PInfo->aucWSCIE[2], prPasswordReady->probe_rsp_ie, prPasswordReady->probe_rsp_len)) { - return -EFAULT; - } - } - else { - return -E2BIG; - } - } - - prGlueInfo->prP2PInfo->u2WSCIELen[2] = prPasswordReady->probe_rsp_len; - - switch (prPasswordReady->active_config_method) { - case 1: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_PUSH_BUTTON; - break; - case 2: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_KEYPAD; - break; - case 3: - prConnSettings->u2LocalConfigMethod = WPS_ATTRI_CFG_METHOD_DISPLAY; - break; - default: - break; - } - - prConnSettings->fgIsPasswordIDRdy = TRUE; - return 0; -} /* end of mtk_p2p_wext_password_ready() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_REQ_DEVICE_INFO) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_DEVICE_REQ prDeviceReq = (P_IW_P2P_DEVICE_REQ)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_DEVICE_REQ); - - // copy to upper-layer supplied buffer - kalMemCopy(prDeviceReq->name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - prDeviceReq->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prDeviceReq->name[prDeviceReq->name_len]='\0'; - COPY_MAC_ADDR(prDeviceReq->device_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prDeviceReq->device_type = prGlueInfo->prP2PInfo->ucConnReqDevType; - prDeviceReq->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prDeviceReq->active_config_method = prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod; - - return 0; -} /* end of mtk_p2p_wext_request_dev_info() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_INDICATE prInvIndicate = (P_IW_P2P_IOCTL_INVITATION_INDICATE)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_INDICATE); - - // copy to upper-layer supplied buffer - kalMemCopy(prInvIndicate->dev_name, prGlueInfo->prP2PInfo->aucConnReqDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); - kalMemCopy(prInvIndicate->group_bssid, prGlueInfo->prP2PInfo->rConnReqGroupAddr, MAC_ADDR_LEN); - prInvIndicate->name_len = prGlueInfo->prP2PInfo->u4ConnReqNameLength; - prInvIndicate->dev_name[prInvIndicate->name_len]='\0'; - COPY_MAC_ADDR(prInvIndicate->dev_addr, prGlueInfo->prP2PInfo->rConnReqPeerAddr); - prInvIndicate->config_method = prGlueInfo->prP2PInfo->i4ConnReqConfigMethod; - prInvIndicate->operating_channel = prGlueInfo->prP2PInfo->ucOperatingChnl; - prInvIndicate->invitation_type = prGlueInfo->prP2PInfo->ucInvitationType; - - return 0; -} /* end of mtk_p2p_wext_invitation_indicate() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_IOCTL_INVITATION_STATUS prInvStatus = (P_IW_P2P_IOCTL_INVITATION_STATUS)extra; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - // specify data length - wrqu->data.length = sizeof(IW_P2P_IOCTL_INVITATION_STATUS); - - // copy to upper-layer supplied buffer - prInvStatus->status_code = prGlueInfo->prP2PInfo->u4InvStatus; - - return 0; -} /* end of mtk_p2p_wext_invitation_status() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device found -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval TRUE Success. -* \retval FALSE Failure -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_FND"); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PDVCFND event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return FALSE; -} /* end of kalP2PIndicateFound() */ - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pNetworkAddress, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - P_ADAPTER_T prAdapter = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prAdapter = prGlueInfo->prAdapter; - ASSERT(prAdapter); - - //@TODO: invoke wlan_p2p functions -#if 0 - rStatus = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetP2pPowerSaveProfile, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - &u4BufLen); -#endif - - return 0; - -} - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_start_formation ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int i4Status = 0; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; -// struct iw_point *prData = (struct iw_point*)&wrqu->data; - P_IW_P2P_IOCTL_START_FORMATION prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)NULL; - - do { - if ((prDev == NULL) || (extra == NULL)) { - ASSERT(FALSE); - i4Status = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - prIoctlStartFormation = (P_IW_P2P_IOCTL_START_FORMATION)extra; - - if (prGlueInfo == NULL) { - i4Status = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; - - if (prAdapter == NULL) { - i4Status = -EINVAL; - break; - } - - - } while (FALSE); - - return i4Status; - -} -/* mtk_p2p_wext_start_formation */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_INT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Setting parameters not support. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 index; - INT_32 value; - PUINT_32 pu4IntBuf; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - UINT_32 u4Leng; - - ASSERT(prDev); - ASSERT(wrqu); - - //printk("mtk_p2p_wext_set_int\n"); - pu4IntBuf = (PUINT_32) extra; - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - - u4SubCmd = (UINT_32) wrqu->mode; - index = pu4IntBuf[1]; - value = pu4IntBuf[2]; - - printk("set parameter, u4SubCmd=%d idx=%d value=%lu\n", (INT_16)u4SubCmd, (INT_16)index, value); - - switch (u4SubCmd) { - case PRIV_CMD_INT_P2P_SET: - switch (index) { - case 0: /* Listen CH */ - { - UINT_8 ucSuggestChnl = 0; - - prP2pConnSettings->ucListenChnl = value; - - // 20110920 - frog: User configurations are placed in ConnSettings. - if (rlmFuncFindAvailableChannel(prGlueInfo->prAdapter, value, &ucSuggestChnl, TRUE, TRUE)) { - prP2pSpecificBssInfo->ucListenChannel = value; - } - else { - prP2pSpecificBssInfo->ucListenChannel = ucSuggestChnl; - } - - - break; - } - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - //prP2pConnSettings->u2LocalConfigMethod; - break; - case 102: /* Sigma P2p reset */ - kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - - default: - break; - } - break; - default: - break; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_SET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (FALSE == GLUE_CHK_PR2(prDev, wrqu)) { - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&prGlueInfo->prP2PInfo->aucOidBuf[0], - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEND_SD_RESPONSE: - status = mtk_p2p_wext_send_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_SEND_SD_REQUEST: - status = mtk_p2p_wext_send_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_TERMINATE_SD_PHASE: - status = mtk_p2p_wext_terminate_service_discovery_phase(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_INVITATION_STRUCT)) { -// status = mtk_p2p_wext_invitation_request(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_INVITATION_ABORT: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_ABORT_INVITATION)) { -// status = mtk_p2p_wext_invitation_abort(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - - case P2P_CMD_ID_START_FORMATION: - if (prP2PReq->inBufferLength == sizeof(IW_P2P_IOCTL_START_FORMATION)) { - status = mtk_p2p_wext_start_formation(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - } - break; - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_set_sec_check_request(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - wrqu->data.length)) { - status = -EFAULT; - break; - } - - if (!kalMemCmp(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), extra, wrqu->data.length)) { - printk(KERN_INFO DRV_NAME"extra buffer is valid\n"); - } - else { - printk(KERN_INFO DRV_NAME"extra 0x%p\n", extra); - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_set_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - break; - default: - status = -EOPNOTSUPP; - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler (IOC_P2P_GET_STRUCT) -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - int status = 0; - UINT_32 u4SubCmd = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = NULL; - - ASSERT(prDev); - ASSERT(wrqu); - - if (!prDev || !wrqu) { - printk(KERN_INFO DRV_NAME "%s(): invalid param(0x%p, 0x%p)\n", - __func__, - prDev, - wrqu); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - u4SubCmd = (UINT_32) wrqu->data.flags; - - kalMemZero(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - sizeof(prGlueInfo->prP2PInfo->aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_GET_SD_REQUEST: - status = mtk_p2p_wext_get_service_discovery_request(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_GET_SD_RESPONSE: - status = mtk_p2p_wext_get_service_discovery_response(prDev, info, wrqu, (char *)prP2PReq); - break; - - case P2P_CMD_ID_INVITATION_INDICATE: - { - status = mtk_p2p_wext_invitation_indicate(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_INVITATION_STATUS: - { - status = mtk_p2p_wext_invitation_status(prDev, info, wrqu, (char *)(prP2PReq->aucBuffer)); - prP2PReq->outBufferLength = wrqu->data.length; - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.length + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - case P2P_CMD_ID_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - UINT_8 ucMaxChannelNum = 50; - PUINT_8 pucChnlList = (PUINT_8)prP2PReq->aucBuffer; - - kalGetChnlList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - prP2PReq->outBufferLength = NumOfChannel; - - for (i=0; iaucBuffer[i] = aucChannelList[i].ucChannelNum; -#else - *pucChnlList = aucChannelList[i].ucChannelNum; - pucChnlList++; -#endif - } - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - NumOfChannel + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - break; - } - - case P2P_CMD_ID_GET_OP_CH: - { - prP2PReq->inBufferLength = 4; - - status = wlanoidQueryP2pOpChannel(prGlueInfo->prAdapter, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - &prP2PReq->outBufferLength); - - if (status == 0) { // WLAN_STATUS_SUCCESS - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - else { - if (copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - break; - } - - default: - status = -EOPNOTSUPP; - } - - break; -#if CFG_SUPPORT_ANTI_PIRACY - case PRIV_SEC_CHECK_OID: - if (wrqu->data.length > 256) { - status = -EOPNOTSUPP; - break; - } - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucSecCheck[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucSecCheck[0])); - - switch(prP2PReq->u4CmdId) { - case P2P_CMD_ID_SEC_CHECK: - status = mtk_p2p_wext_get_sec_check_response(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - } - break; -#endif - case PRIV_CMD_P2P_VERSION: - if (copy_from_user(&(prGlueInfo->prP2PInfo->aucOidBuf[0]), - wrqu->data.pointer, - sizeof(IW_P2P_TRANSPORT_STRUCT))) { - printk(KERN_NOTICE "%s() copy_from_user oidBuf fail\n", __func__); - return -EFAULT; - } - - prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT) (&(prGlueInfo->prP2PInfo->aucOidBuf[0])); - - switch (prP2PReq->u4CmdId) { - case P2P_CMD_ID_P2P_VERSION: - status = mtk_p2p_wext_get_p2p_version(prDev, info, wrqu, (char *)prP2PReq); - break; - default: - status = -EOPNOTSUPP; - break; - } - - - /* Copy queried data to user. */ - if (status == 0) { // WLAN_STATUS_SUCCESS - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - prP2PReq->outBufferLength + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - else { - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - } - - break; - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery request frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* getting service discovery response frame from driver -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidGetP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - &(prGlueInfo->prP2PInfo->aucOidBuf[0]), - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery request frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* sending service discovery response frame -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSendP2PSDResponse, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetSecCheckRequest, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_get_sec_check_response\n"); - rStatus = kalIoctl(prGlueInfo, - wlanoidGetSecCheckResponse, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - prP2PReq->outBufferLength = u4QueryInfoLen; - - if(copy_to_user(wrqu->data.pointer, - prP2PReq->aucBuffer, - u4QueryInfoLen + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer))) { - printk(KERN_NOTICE "%s() copy_to_user() fail\n", __func__); - return -EIO; - } - else { - return 0; - } - } -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* terminating service discovery phase -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2PTerminateSDPhase, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; - //P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_NOA_PARAM_STRUC_T prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_set_noa_param\n"); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNoaParam, - prNoaParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_NOA_PARAM_STRUC_T),//prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief P2P Private I/O Control handler for -* -* \param[in] prDev Net device requested. -* \param[inout] wrqu Pointer to iwreq_data -* -* \retval 0 Success. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4SetInfoLen; -// P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUC_T)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - printk("mtk_p2p_wext_set_oppps_param\n"); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetOppPsParam, - prOppPsParam, //prP2PReq->aucBuffer, - sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUC_T), //prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return 0; - } -} - - -int -mtk_p2p_wext_set_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - UINT_32 u4SetInfoLen; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSupplicantVersion, - prP2PReq->aucBuffer, - prP2PReq->inBufferLength, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} -/* mtk_p2p_wext_set_p2p_version */ - -int -mtk_p2p_wext_get_p2p_version ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - P_IW_P2P_TRANSPORT_STRUCT prP2PReq = (P_IW_P2P_TRANSPORT_STRUCT)extra; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pVersion, - prP2PReq->aucBuffer, - prP2PReq->outBufferLength, - TRUE, - FALSE, - TRUE, - TRUE, - &u4QueryInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - - -} /* mtk_p2p_wext_get_p2p_version */ - -#if CFG_SUPPORT_P2P_RSSI_QUERY - -int -mtk_p2p_wext_get_rssi ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen; - struct iw_point *prData= (struct iw_point *)&wrqu->data; - UINT_16 u2BufferSize = 0; - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rssi; - struct iw_statistics *pStats = NULL; - - ASSERT(prDev); - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - rStatus = WLAN_STATUS_FAILURE; - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &u4QueryInfoLen); - - u2BufferSize = prData->length; - - if (u2BufferSize < sizeof(struct iw_statistics)) { - return -E2BIG; - } - - - if (copy_to_user(prData->pointer, pStats, sizeof(struct iw_statistics))) { - rStatus = WLAN_STATUS_FAILURE; - } - - -stat_out: - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - else { - return rStatus; - } - -} /* mtk_p2p_wext_get_rssi */ - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rP2pIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryP2pRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - TRUE, - &bufLen); - -stat_out: - return pStats; -} /* mtk_p2p_wext_get_wireless_stats */ - - -#endif /* CFG_SUPPORT_P2P_RSSI_QUERY */ - - -int -mtk_p2p_wext_set_txpow ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_ADAPTER_T prAdapter = (P_ADAPTER_T)NULL; -#if 0 - P_MSG_P2P_FUNCTION_SWITCH_T prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)NULL; -#endif - int i4Ret = 0; - - ASSERT(prDev); - ASSERT(prTxPow); - - do { - if ((!prDev) || (!prTxPow)) { - i4Ret = -EINVAL; - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *)netdev_priv(prDev)); - - if (!prGlueInfo) { - i4Ret = -EINVAL; - break; - } - - - prAdapter = prGlueInfo->prAdapter; -#if 0 - prMsgFuncSwitch = (P_MSG_P2P_FUNCTION_SWITCH_T)cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_FUNCTION_SWITCH_T)); - if (!prMsgFuncSwitch) { - ASSERT(0); - return -ENOMEM; - } - - prMsgFuncSwitch->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - if (prTxPow->disabled) { - /* Dissolve. */ - prMsgFuncSwitch->fgIsFuncOn = FALSE; - } - else { - - /* Re-enable function. */ - prMsgFuncSwitch->fgIsFuncOn = TRUE; - } - - /* 1.3 send message */ - mboxSendMsg(prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T) prMsgFuncSwitch, - MSG_SEND_METHOD_BUF); -#endif - - } while (FALSE); - - return i4Ret; -} /* mtk_p2p_wext_set_txpow */ - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_cfg80211.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_cfg80211.c deleted file mode 100755 index b365d92c0266..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_cfg80211.c +++ /dev/null @@ -1,2795 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_cfg80211.c - \brief Main routines of Linux driver interface for Wi-Fi Direct - using cfg80211 interface - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_p2p_cfg80211.c $ -** -** 08 30 2012 yuche.tsai -** NULL -** Fix disconnect issue possible leads KE. -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. -** -** 08 24 2012 yuche.tsai -** NULL -** Fix bug of invitation request. -** -** 08 20 2012 yuche.tsai -** NULL -** Try to fix frame register KE issue. -** -** 08 17 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 16 2012 yuche.tsai -** NULL -** Fix compile warning. -** -** 08 08 2012 yuche.tsai -** NULL -** Fix bug of hard scan p2p device sometimes -** -** 08 08 2012 wh.su -** [WCXRP00001246] [MT6620 Wi-Fi][Driver][P2P] Do more filed check for avoid not copy the STA mac address for add key[WCXRP00001262] [MT6620 Wi-Fi][Driver] Fixed the update assoc info pkt length issue -** . -** -** 08 06 2012 yuche.tsai -** [WCXRP00001119] [Volunteer Patch][WiFi Direct][Driver] Connection Policy Set for WFD SIGMA test -** Fix P2P reset would not reset QoS BSS info issue. -** -** 07 31 2012 yuche.tsai -** NULL -** Update Active/Deactive network policy for P2P network. -** Highly related to power saving. -** -** 07 25 2012 yuche.tsai -** NULL -** Add support for null mac address del station. -** -** 07 25 2012 yuche.tsai -** NULL -** Bug fix. -** -** 07 25 2012 yuche.tsai -** NULL -** Bug fix for TX mgmt frame. -** -** 07 24 2012 yuche.tsai -** NULL -** Bug fix for JB. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Fix compile error for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#include -#include -#include - -#include "precomp.h" -#ifdef CFG_DUAL_ANTENNA -#include "mtk_porting.h" -#include "dual_ant_bwcs.h" -#endif - - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - P2P_PARAM_KEY_T rKey; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rKey, sizeof(P2P_PARAM_KEY_T)); - - rKey.u4KeyIndex = key_index; - if(mac_addr) { - memcpy(rKey.arBSSID, mac_addr, ETH_ALEN); - if ((rKey.arBSSID[0] == 0x00) && (rKey.arBSSID[1] == 0x00) && (rKey.arBSSID[2] == 0x00) && - (rKey.arBSSID[3] == 0x00) && (rKey.arBSSID[4] == 0x00) && (rKey.arBSSID[5] == 0x00)) { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - } - if (rKey.arBSSID[0] != 0xFF) { - rKey.u4KeyIndex |= BIT(31); - if ((rKey.arBSSID[0] != 0x00) || (rKey.arBSSID[1] != 0x00) || (rKey.arBSSID[2] != 0x00) || - (rKey.arBSSID[3] != 0x00) || (rKey.arBSSID[4] != 0x00) || (rKey.arBSSID[5] != 0x00)) - rKey.u4KeyIndex |= BIT(30); - } - else { - rKey.u4KeyIndex |= BIT(31); - } - } - else { - rKey.arBSSID[0] = 0xff; - rKey.arBSSID[1] = 0xff; - rKey.arBSSID[2] = 0xff; - rKey.arBSSID[3] = 0xff; - rKey.arBSSID[4] = 0xff; - rKey.arBSSID[5] = 0xff; - rKey.u4KeyIndex |= BIT(31); //???? - } - if(params->key) - { - //rKey.aucKeyMaterial[0] = kalMemAlloc(params->key_len, VIR_MEM_TYPE); - kalMemCopy(rKey.aucKeyMaterial, params->key, params->key_len); - } - rKey.u4KeyLength = params->key_len; - rKey.u4Length = ((UINT_32)&(((P_P2P_PARAM_KEY_T)0)->aucKeyMaterial)) + rKey.u4KeyLength; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddP2PKey, - &rKey, - rKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - PARAM_REMOVE_KEY_T prRemoveKey; - INT_32 i4Rslt = -EINVAL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&prRemoveKey, sizeof(PARAM_REMOVE_KEY_T)); - if(mac_addr) - memcpy(prRemoveKey.arBSSID, mac_addr, PARAM_MAC_ADDR_LEN); - prRemoveKey.u4KeyIndex = key_index; - prRemoveKey.u4Length = sizeof(PARAM_REMOVE_KEY_T); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveP2PKey, - &prRemoveKey, - prRemoveKey.u4Length, - FALSE, - FALSE, - TRUE, - TRUE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_SUCCESS) - i4Rslt = 0; - - return i4Rslt; -} - - -int -mtk_p2p_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return 0; -} - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ) -{ - INT_32 i4RetRslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P2P_STATION_INFO_T rP2pStaInfo; - - ASSERT(wiphy); - - do { - if ((wiphy == NULL) || - (ndev == NULL) || - (sinfo == NULL) || - (mac == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_get_station\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - sinfo->filled = 0; - - /* Get station information. */ - /* 1. Inactive time? */ - p2pFuncGetStationInfo(prGlueInfo->prAdapter, - mac, - &rP2pStaInfo); - - /* Inactive time. */ - sinfo->filled |= STATION_INFO_INACTIVE_TIME; - sinfo->inactive_time = rP2pStaInfo.u4InactiveTime; - sinfo->generation = prP2pGlueInfo->i4Generation; - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} - -int -mtk_p2p_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_SCAN_REQUEST_T prMsgScanRequest = (P_MSG_P2P_SCAN_REQUEST_T)NULL; - UINT_32 u4MsgSize = 0, u4Idx = 0; - INT_32 i4RetRslt = -EINVAL; - P_RF_CHANNEL_INFO_T prRfChannelInfo = (P_RF_CHANNEL_INFO_T)NULL; - P_P2P_SSID_STRUCT_T prSsidStruct = (P_P2P_SSID_STRUCT_T)NULL; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_ssid *prSsid = NULL; - - /* [---------Channel---------] [---------SSID---------][---------IE---------] */ - - - do { - if ((wiphy == NULL) || (request == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (prP2pGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_scan.\n")); - - - if (prP2pGlueInfo->prScanRequest != NULL) { - /* There have been a scan request on-going processing. */ - DBGLOG(P2P, TRACE, ("There have been a scan request on-going processing.\n")); - break; - } - - prP2pGlueInfo->prScanRequest = request; - - /* Should find out why the n_channels so many? */ - if (request->n_channels > MAXIMUM_OPERATION_CHANNEL_LIST) { - request->n_channels = MAXIMUM_OPERATION_CHANNEL_LIST; - DBGLOG(P2P, TRACE, ("Channel list exceed the maximun support.\n")); - } - - u4MsgSize = sizeof(MSG_P2P_SCAN_REQUEST_T) + - (request->n_channels * sizeof(RF_CHANNEL_INFO_T)) + - (request->n_ssids * sizeof(PARAM_SSID_T)) + - request->ie_len; - - prMsgScanRequest = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, u4MsgSize); - - if (prMsgScanRequest == NULL) { - ASSERT(FALSE); - i4RetRslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("Generating scan request message.\n")); - - prMsgScanRequest->rMsgHdr.eMsgId = MID_MNY_P2P_DEVICE_DISCOVERY; - - - - DBGLOG(P2P, TRACE, ("Requesting channel number:%d.\n", request->n_channels)); - - for (u4Idx = 0; u4Idx < request->n_channels; u4Idx++) { - /* Translate Freq from MHz to channel number. */ - prRfChannelInfo = &(prMsgScanRequest->arChannelListInfo[u4Idx]); - prChannel = request->channels[u4Idx]; - - prRfChannelInfo->ucChannelNum = nicFreq2ChannelNum(prChannel->center_freq * 1000); - DBGLOG(P2P, TRACE, ("Scanning Channel:%d, freq: %d\n", - prRfChannelInfo->ucChannelNum, - prChannel->center_freq)); - switch (prChannel->band) { - case IEEE80211_BAND_2GHZ: - prRfChannelInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChannelInfo->eBand = BAND_5G; - break; - default: - DBGLOG(P2P, TRACE, ("UNKNOWN Band info from supplicant\n")); - prRfChannelInfo->eBand = BAND_NULL; - break; - } - - /* Iteration. */ - prRfChannelInfo++; - } - prMsgScanRequest->u4NumChannel = request->n_channels; - - DBGLOG(P2P, TRACE, ("Finish channel list.\n")); - - /* SSID */ - prSsid = request->ssids; - prSsidStruct = (P_P2P_SSID_STRUCT_T)prRfChannelInfo; - if (request->n_ssids) { - ASSERT(prSsidStruct == &(prMsgScanRequest->arChannelListInfo[u4Idx])); - prMsgScanRequest->prSSID = prSsidStruct; - } - - for (u4Idx = 0; u4Idx < request->n_ssids; u4Idx++) { - COPY_SSID(prSsidStruct->aucSsid, - prSsidStruct->ucSsidLen, - request->ssids->ssid, - request->ssids->ssid_len); - - prSsidStruct++; - prSsid++; - } - - prMsgScanRequest->i4SsidNum = request->n_ssids; - - DBGLOG(P2P, TRACE, ("Finish SSID list:%d.\n", request->n_ssids)); - - /* IE BUFFERS */ - prMsgScanRequest->pucIEBuf = (PUINT_8)prSsidStruct; - if (request->ie_len) { - kalMemCopy(prMsgScanRequest->pucIEBuf, request->ie, request->ie_len); - prMsgScanRequest->u4IELen = request->ie_len; - } - - DBGLOG(P2P, TRACE, ("Finish IE Buffer.\n")); - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgScanRequest, - MSG_SEND_METHOD_BUF); - - i4RetRslt = 0; - } while (FALSE); - - return i4RetRslt; -} /* mtk_p2p_cfg80211_scan */ - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - - - do { - if (wiphy == NULL) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_wiphy_params\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if (changed & WIPHY_PARAM_RETRY_SHORT) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY short param is changed.\n")); - } - - if (changed & WIPHY_PARAM_RETRY_LONG) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY long param is changed.\n")); - } - - - if (changed & WIPHY_PARAM_FRAG_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY fragmentation threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_RTS_THRESHOLD) { - // TODO: - DBGLOG(P2P, TRACE, ("The RETRY RTS threshold is changed.\n")); - } - - if (changed & WIPHY_PARAM_COVERAGE_CLASS) { - // TODO: - DBGLOG(P2P, TRACE, ("The coverage class is changed???\n")); - } - - i4Rslt = 0; - } while (FALSE); - - - - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_wiphy_params */ - - - -int -mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - - return -EINVAL; -} - -int -mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - PARAM_POWER_MODE ePowerMode; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - INT_32 value = enabled; - UINT_32 u4Leng; - WLAN_STATUS rStatus; - if(enabled) { - if(timeout == -1) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - ePowerMode = Param_PowerModeMAX_PSP; - } - } - else { - ePowerMode = Param_PowerModeCAM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, WARN, ("p2p set_power_mgmt error:%lx\n", rStatus)); - return -EFAULT; - } - - return 0; -} - -bool start_beacon; - -//&&&&&&&&&&&&&&&&&&&&&&&&&& Add for ICS Wi-Fi Direct Support. &&&&&&&&&&&&&&&&&&&&&&& -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) -int -mtk_p2p_cfg80211_start_ap ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; -// P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - start_beacon = true; - - do { - if ((wiphy == NULL) || (settings == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_start_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + settings->beacon.head_len + settings->beacon.tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (settings->beacon.head_len != 0) { - kalMemCopy(pucBuffer, settings->beacon.head, settings->beacon.head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = settings->beacon.head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)settings->beacon.head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (settings->beacon.tail_len != 0) { - UINT_8 ucLen = settings->beacon.tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, settings->beacon.tail, settings->beacon.tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - - prP2pStartAPMsg->fgIsPrivacy = settings->privacy; - - prP2pStartAPMsg->u4BcnInterval = settings->beacon_interval; - - prP2pStartAPMsg->u4DtimPeriod = settings->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = settings->hidden_ssid; - - COPY_SSID(prP2pStartAPMsg->aucSsid, - prP2pStartAPMsg->u2SsidLen, - settings->ssid, - settings->ssid_len); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - - return i4Rslt; - - -///////////////////////// - /** - * struct cfg80211_ap_settings - AP configuration - * - * Used to configure an AP interface. - * - * @beacon: beacon data - * @beacon_interval: beacon interval - * @dtim_period: DTIM period - * @ssid: SSID to be used in the BSS (note: may be %NULL if not provided from - * user space) - * @ssid_len: length of @ssid - * @hidden_ssid: whether to hide the SSID in Beacon/Probe Response frames - * @crypto: crypto settings - * @privacy: the BSS uses privacy - * @auth_type: Authentication type (algorithm) - * @inactivity_timeout: time in seconds to determine station's inactivity. - */ -// struct cfg80211_ap_settings { -// struct cfg80211_beacon_data beacon; -// -// int beacon_interval, dtim_period; -// const u8 *ssid; -// size_t ssid_len; -// enum nl80211_hidden_ssid hidden_ssid; -// struct cfg80211_crypto_settings crypto; -// bool privacy; -// enum nl80211_auth_type auth_type; -// int inactivity_timeout; -// }; -//////////////////// - - return i4Rslt; -} /* mtk_p2p_cfg80211_start_ap */ - - -int -mtk_p2p_cfg80211_change_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - start_beacon = false; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_change_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - -//////////////////////////// -/** - * struct cfg80211_beacon_data - beacon data - * @head: head portion of beacon (before TIM IE) - * or %NULL if not changed - * @tail: tail portion of beacon (after TIM IE) - * or %NULL if not changed - * @head_len: length of @head - * @tail_len: length of @tail - * @beacon_ies: extra information element(s) to add into Beacon frames or %NULL - * @beacon_ies_len: length of beacon_ies in octets - * @proberesp_ies: extra information element(s) to add into Probe Response - * frames or %NULL - * @proberesp_ies_len: length of proberesp_ies in octets - * @assocresp_ies: extra information element(s) to add into (Re)Association - * Response frames or %NULL - * @assocresp_ies_len: length of assocresp_ies in octets - * @probe_resp_len: length of probe response template (@probe_resp) - * @probe_resp: probe response template (AP mode only) - */ -//struct cfg80211_beacon_data { -// const u8 *head, *tail; -// const u8 *beacon_ies; -// const u8 *proberesp_ies; -// const u8 *assocresp_ies; -// const u8 *probe_resp; - -// size_t head_len, tail_len; -// size_t beacon_ies_len; -// size_t proberesp_ies_len; -// size_t assocresp_ies_len; -// size_t probe_resp_len; -//}; - -//////////////////////////// - - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_beacon */ - -#else -int -mtk_p2p_cfg80211_add_set_beacon ( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - start_beacon = true; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_add_set_beacon.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - kalMemZero(prP2pBcnUpdateMsg, (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - kalMemZero(prP2pStartAPMsg, sizeof(MSG_P2P_START_AP_T)); - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - printk("mtk_p2p_cfg80211_add_set_beacon MID_MNY_P2P_START_AP"); - - prP2pStartAPMsg->fgIsPrivacy = FALSE; - - prP2pStartAPMsg->u4BcnInterval = info->interval; - - prP2pStartAPMsg->u4DtimPeriod = info->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = ENUM_HIDDEN_SSID_NONE; - -#if 0 - if (info->head_len > OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)) { - P_WLAN_BEACON_FRAME_T prWlanBcnFrame = info->head; - - prSsidIE = (P_IE_HDR_T)p2pFuncGetSpecIE(prGlueInfo->prAdapter, - (PUINT_8)prWlanBcnFrame->aucInfoElem, - (info->head_len - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)), - ELEM_ID_SSID, - NULL); - - kalMemCopy(prP2pStartAPMsg->aucSsid, SSID_IE(prSsidIE)->aucSSID, IE_LEN(prSsidIE)); - - } -#endif - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; -} -/* mtk_p2p_cfg80211_add_set_beacon */ -int -mtk_p2p_cfg80211_add_set_beacon_1 ( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_BEACON_UPDATE_T prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)NULL; - P_MSG_P2P_START_AP_T prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)NULL; - PUINT_8 pucBuffer = (PUINT_8)NULL; - P_IE_SSID_T prSsidIE = (P_IE_SSID_T)NULL; - start_beacon = false; - - do { - if ((wiphy == NULL) || (info == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_add_set_beacon_1.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pBcnUpdateMsg = (P_MSG_P2P_BEACON_UPDATE_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - if (prP2pBcnUpdateMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - kalMemZero(prP2pBcnUpdateMsg, (sizeof(MSG_P2P_BEACON_UPDATE_T) + info->head_len + info->tail_len)); - - prP2pBcnUpdateMsg->rMsgHdr.eMsgId = MID_MNY_P2P_BEACON_UPDATE; - pucBuffer = prP2pBcnUpdateMsg->aucBuffer; - - if (info->head_len != 0) { - kalMemCopy(pucBuffer, info->head, info->head_len); - - prP2pBcnUpdateMsg->u4BcnHdrLen = info->head_len; - - prP2pBcnUpdateMsg->pucBcnHdr = pucBuffer; - - pucBuffer = (PUINT_8)((UINT_32)pucBuffer + (UINT_32)info->head_len); - } - else { - prP2pBcnUpdateMsg->u4BcnHdrLen = 0; - - prP2pBcnUpdateMsg->pucBcnHdr = NULL; - } - - if (info->tail_len != 0) { - UINT_8 ucLen = info->tail_len; - - prP2pBcnUpdateMsg->pucBcnBody = pucBuffer; - - /*Add TIM IE*/ - // IEEE 802.11 2007 - 7.3.2.6 - TIM_IE(pucBuffer)->ucId = ELEM_ID_TIM; - TIM_IE(pucBuffer)->ucLength = (3 + MAX_LEN_TIM_PARTIAL_BMP)/*((u4N2 - u4N1) + 4)*/; // NOTE: fixed PVB length (AID is allocated from 8 ~ 15 only) - TIM_IE(pucBuffer)->ucDTIMCount = 0/*prBssInfo->ucDTIMCount*/; // will be overwrite by FW - TIM_IE(pucBuffer)->ucDTIMPeriod = 1; - TIM_IE(pucBuffer)->ucBitmapControl = 0/*ucBitmapControl | (UINT_8)u4N1*/; // will be overwrite by FW - ucLen += IE_SIZE(pucBuffer); - pucBuffer += IE_SIZE(pucBuffer); - - kalMemCopy(pucBuffer, info->tail, info->tail_len); - - prP2pBcnUpdateMsg->u4BcnBodyLen = ucLen; - } - else { - prP2pBcnUpdateMsg->u4BcnBodyLen = 0; - - prP2pBcnUpdateMsg->pucBcnBody = NULL; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pBcnUpdateMsg, - MSG_SEND_METHOD_BUF); - - - prP2pStartAPMsg = (P_MSG_P2P_START_AP_T)cnmMemAlloc( - prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_START_AP_T)); - - if (prP2pStartAPMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - kalMemZero(prP2pStartAPMsg, sizeof(MSG_P2P_START_AP_T)); - - prP2pStartAPMsg->rMsgHdr.eMsgId = MID_MNY_P2P_START_AP; - printk("mtk_p2p_cfg80211_add_set_beacon_1 MID_MNY_P2P_START_AP"); - - prP2pStartAPMsg->fgIsPrivacy = FALSE; - - prP2pStartAPMsg->u4BcnInterval = info->interval; - - prP2pStartAPMsg->u4DtimPeriod = info->dtim_period; - - /* Copy NO SSID. */ - prP2pStartAPMsg->ucHiddenSsidType = ENUM_HIDDEN_SSID_NONE; - -#if 0 - if (info->head_len > OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)) { - P_WLAN_BEACON_FRAME_T prWlanBcnFrame = info->head; - - prSsidIE = (P_IE_HDR_T)p2pFuncGetSpecIE(prGlueInfo->prAdapter, - (PUINT_8)prWlanBcnFrame->aucInfoElem, - (info->head_len - OFFSET_OF(WLAN_BEACON_FRAME_T, aucInfoElem)), - ELEM_ID_SSID, - NULL); - - kalMemCopy(prP2pStartAPMsg->aucSsid, SSID_IE(prSsidIE)->aucSSID, IE_LEN(prSsidIE)); - - } -#endif - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pStartAPMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; -} -/* mtk_p2p_cfg80211_add_set_beacon */ - -#endif - -int -mtk_p2p_cfg80211_stop_ap ( - struct wiphy *wiphy, - struct net_device *dev - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prP2pSwitchMode = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if (wiphy == NULL) { - break; - } - - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_stop_ap.\n")); - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // Switch OP MOde. - prP2pSwitchMode = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prP2pSwitchMode == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prP2pSwitchMode->rMsgHdr.eMsgId = MID_MNY_P2P_STOP_AP; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pSwitchMode, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - -#ifdef CFG_DUAL_ANTENNA - if(p2pFuncIsAPMode(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo)) - wifi2bwcs_connection_event_ind_handler(prGlueInfo->prAdapter->prGlueInfo, WIFI_EVENT_SOFTAP_CONN_DEL); - else - wifi2bwcs_connection_event_ind_handler(prGlueInfo->prAdapter->prGlueInfo, WIFI_EVENT_P2P_GO_CONN_DEL); -#endif - - - return i4Rslt; -} /* mtk_p2p_cfg80211_stop_ap */ - -// TODO: -int -mtk_p2p_cfg80211_deauth ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_deauth_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // not implemented yet - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_deauth.\n")); - - return -EINVAL; -} /* mtk_p2p_cfg80211_deauth */ - - -// TODO: -int -mtk_p2p_cfg80211_disassoc ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_disassoc_request *req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_disassoc.\n")); - - // not implemented yet - - return -EINVAL; -} /* mtk_p2p_cfg80211_disassoc */ - - -#if 0//LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) -int -mtk_p2p_cfg80211_remain_on_channel2 ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie, - bool fgNeedIndSupp - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prMsgChnlReq = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL) || - (cookie == NULL)) { - break; - } - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - //*cookie = prGlueP2pInfo->u8Cookie++; - - prMsgChnlReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_REQUEST_T)); - - if (prMsgChnlReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - //DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_remain_on_channel\n")); - - prMsgChnlReq->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_REQ; - prMsgChnlReq->u8Cookie = *cookie; - prMsgChnlReq->u4Duration = duration; - prMsgChnlReq->fgNeedIndSupp = fgNeedIndSupp; - - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &prMsgChnlReq->rChannelInfo, - &prMsgChnlReq->eChnlSco); - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} -/* mtk_p2p_cfg80211_remain_on_channel */ - -int -mtk_p2p_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - int ret = -1, atom; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - *cookie = prGlueP2pInfo->u8Cookie++; - - if(atomic_read(&prGlueInfo->rMgmtTxAto) == 1) { - ret = wait_for_completion_timeout(&prGlueInfo->rMgmtTxComp, 500*HZ/1000); - } - - ret = mtk_p2p_cfg80211_remain_on_channel2(wiphy, dev, chan, channel_type, duration, cookie, true); - - return ret; -} -#else -int -mtk_p2p_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - P_MSG_P2P_CHNL_REQUEST_T prMsgChnlReq = (P_MSG_P2P_CHNL_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL) || - (cookie == NULL)) { - break; - } - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - prMsgChnlReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_REQUEST_T)); - - if (prMsgChnlReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_remain_on_channel\n")); - - prMsgChnlReq->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_REQ; - prMsgChnlReq->u8Cookie = *cookie; - prMsgChnlReq->u4Duration = duration; - - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &prMsgChnlReq->rChannelInfo, - &prMsgChnlReq->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - i4Rslt = 0; - } while (FALSE); - - - return i4Rslt; -} -/* mtk_p2p_cfg80211_remain_on_channel */ -#endif - - - -int -mtk_p2p_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *dev, - u64 cookie - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_MSG_P2P_CHNL_ABORT_T prMsgChnlAbort = (P_MSG_P2P_CHNL_ABORT_T)NULL; - - do { - if ((wiphy == NULL) || (dev == NULL)) { - break; - } - - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prMsgChnlAbort = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CHNL_ABORT_T)); - - if (prMsgChnlAbort == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_cancel_remain_on_channel\n")); - - prMsgChnlAbort->rMsgHdr.eMsgId = MID_MNY_P2P_CHNL_ABORT; - prMsgChnlAbort->u8Cookie = cookie; - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgChnlAbort, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_cancel_remain_on_channel */ - -#if 0 //LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) -int -mtk_p2p_cfg80211_mgmt_tx ( - struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, - size_t len, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - bool no_cck, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) - bool dont_wait_for_ack, -#endif -#endif - u64 *cookie - - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - INT_32 channel_time= 0; - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - P_MSDU_INFO_T prMgmtFrame = (P_MSDU_INFO_T)NULL; - PUINT_8 pucFrameBuf = (PUINT_8)NULL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - RF_CHANNEL_INFO_T ChnlInfo; - ENUM_CHNL_EXT_T ChnlSco; - do { - if ((wiphy == NULL) || - (buf == NULL) || - (len == 0) || - (dev == NULL) || - (cookie == NULL)) { - break; - } - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &ChnlInfo, - &ChnlSco); - if (prChnlReqInfo->prMsgTxReq!=NULL){ - i4Rslt = -ENOMEM; - break; - } - channel_time=wait; - //buffer mgmt frame into driver - *cookie = prGlueP2pInfo->u8Cookie++; - - /* Channel & Channel Type & Wait time are ignored. */ - prMsgTxReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_MGMT_TX_REQUEST_T)); - - if (prMsgTxReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->fgNoneCckRate = FALSE; - prMsgTxReq->fgIsWaitRsp = TRUE; - - prMgmtFrame = cnmMgtPktAlloc(prGlueInfo->prAdapter, (UINT_32)(len + MAC_TX_RESERVED_FIELD)); - - if ((prMsgTxReq->prMgmtMsduInfo = prMgmtFrame) == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->u8Cookie = *cookie; - prMsgTxReq->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_TX; - - pucFrameBuf = (PUINT_8)((UINT_32)prMgmtFrame->prPacket + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucFrameBuf, buf, len); - - prMgmtFrame->u2FrameLength = len; - - if (wait==0&&prChnlReqInfo->ucReqChnlNum==ChnlInfo.ucChannelNum&& - prChnlReqInfo->eBand==ChnlInfo.eBand&& - prChnlReqInfo->eChnlSco==ChnlSco){ - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_BUF); - i4Rslt=0; - break; - } - - prChnlReqInfo->prMsgTxReq=prMsgTxReq; - - atomic_set(&prGlueInfo->rMgmtTxAto, 1); - i4Rslt=mtk_p2p_cfg80211_remain_on_channel2(wiphy,dev,chan,channel_type,channel_time, cookie, false); - } while (FALSE); - channel_time=0; - return i4Rslt; -} /* mtk_p2p_cfg80211_mgmt_tx */ -#else -int -mtk_p2p_cfg80211_mgmt_tx ( - struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, - size_t len, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - bool no_cck, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) - bool dont_wait_for_ack, -#endif -#endif - u64 *cookie - - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - P_MSDU_INFO_T prMgmtFrame = (P_MSDU_INFO_T)NULL; - PUINT_8 pucFrameBuf = (PUINT_8)NULL; - - do { - if ((wiphy == NULL) || - (buf == NULL) || - (len == 0) || - (dev == NULL) || - (cookie == NULL)) { - break; - } - - //DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_mgmt_tx\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - *cookie = prGlueP2pInfo->u8Cookie++; - - /* Channel & Channel Type & Wait time are ignored. */ - prMsgTxReq = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_MGMT_TX_REQUEST_T)); - - if (prMsgTxReq == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->fgNoneCckRate = FALSE; - prMsgTxReq->fgIsWaitRsp = TRUE; - - prMgmtFrame = cnmMgtPktAlloc(prGlueInfo->prAdapter, (UINT_32)(len + MAC_TX_RESERVED_FIELD)); - - if ((prMsgTxReq->prMgmtMsduInfo = prMgmtFrame) == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prMsgTxReq->u8Cookie = *cookie; - prMsgTxReq->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_TX; - - pucFrameBuf = (PUINT_8)((UINT_32)prMgmtFrame->prPacket + MAC_TX_RESERVED_FIELD); - - kalMemCopy(pucFrameBuf, buf, len); - - prMgmtFrame->u2FrameLength = len; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - if ((i4Rslt != 0) && (prMsgTxReq != NULL)) { - if (prMsgTxReq->prMgmtMsduInfo != NULL) { - cnmMgtPktFree(prGlueInfo->prAdapter, prMsgTxReq->prMgmtMsduInfo); - } - - cnmMemFree(prGlueInfo->prAdapter, prMsgTxReq); - } - - return i4Rslt; -} /* mtk_p2p_cfg80211_mgmt_tx */ -#endif - - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for requesting to cancel the wait time - * from transmitting a management frame on another channel - * - * @param - * - * @retval 0: successful - * others: failure - */ -/*----------------------------------------------------------------------------*/ -int -mtk_p2p_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - prGlueInfo = (P_GLUE_INFO_T) wiphy_priv(wiphy); - ASSERT(prGlueInfo); - -#if 1 - printk("--> %s()\n", __func__); -#endif - - /* not implemented */ - return 0; -// return -EINVAL; -} - - -int -mtk_p2p_cfg80211_change_bss ( - struct wiphy *wiphy, - struct net_device *dev, - struct bss_parameters *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - switch (params->use_cts_prot) { - case -1: - DBGLOG(P2P, TRACE, ("CTS protection no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("CTS protection disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("CTS protection enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("CTS protection unknown\n")); - break; - } - - - - switch (params->use_short_preamble) { - case -1: - DBGLOG(P2P, TRACE, ("Short prreamble no change\n")); - break; - case 0: - DBGLOG(P2P, TRACE, ("Short prreamble disable.\n")); - break; - case 1: - DBGLOG(P2P, TRACE, ("Short prreamble enable\n")); - break; - default: - DBGLOG(P2P, TRACE, ("Short prreamble unknown\n")); - break; - } - - - -#if 0 - // not implemented yet - p2pFuncChangeBssParam(prGlueInfo->prAdapter, - prBssInfo->fgIsProtection, - prBssInfo->fgIsShortPreambleAllowed, - prBssInfo->fgUseShortSlotTime, - // Basic rates - // basic rates len - // ap isolate - // ht opmode. - ); -#else - i4Rslt = 0; -#endif - - return i4Rslt; -} /* mtk_p2p_cfg80211_change_bss */ - - - -int -mtk_p2p_cfg80211_del_station ( - struct wiphy *wiphy, - struct net_device *dev, - u8 *mac - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBcMac[] = BC_MAC_ADDR; - - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - if (mac == NULL) { - mac = aucBcMac; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_del_station.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - //prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnectMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnectMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnectMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - COPY_MAC_ADDR(prDisconnectMsg->aucTargetID, mac); - prDisconnectMsg->u2ReasonCode = REASON_CODE_UNSPECIFIED; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnectMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_del_station */ - - -int -mtk_p2p_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_REQUEST_T prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (sme == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_connect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prConnReqMsg = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, (sizeof(MSG_P2P_CONNECTION_REQUEST_T) + sme->ie_len)); - - if (prConnReqMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prConnReqMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - COPY_SSID(prConnReqMsg->rSsid.aucSsid, - prConnReqMsg->rSsid.ucSsidLen, - sme->ssid, - sme->ssid_len); - - COPY_MAC_ADDR(prConnReqMsg->aucBssid, sme->bssid); - - DBGLOG(P2P, TRACE, ("Assoc Req IE Buffer Length:%d\n", sme->ie_len)); - kalMemCopy(prConnReqMsg->aucIEBuf, sme->ie, sme->ie_len); - prConnReqMsg->u4IELen = sme->ie_len; - - mtk_p2p_cfg80211func_channel_format_switch(sme->channel, - NL80211_CHAN_NO_HT, - &prConnReqMsg->rChannelInfo, - &prConnReqMsg->eChnlSco); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prConnReqMsg, - MSG_SEND_METHOD_BUF); - - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_connect */ - -int -mtk_p2p_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_MSG_P2P_CONNECTION_ABORT_T prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)NULL; - UINT_8 aucBCAddr[] = BC_MAC_ADDR; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_disconnect.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - -// prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)kalMemAlloc(sizeof(P_MSG_P2P_CONNECTION_ABORT_T), VIR_MEM_TYPE); - prDisconnMsg = (P_MSG_P2P_CONNECTION_ABORT_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_CONNECTION_ABORT_T)); - - if (prDisconnMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prDisconnMsg->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_ABORT; - prDisconnMsg->u2ReasonCode = reason_code; - prDisconnMsg->fgSendDeauth = TRUE; - COPY_MAC_ADDR(prDisconnMsg->aucTargetID, aucBCAddr); - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prDisconnMsg, - MSG_SEND_METHOD_UNBUF); - - i4Rslt = 0; - } while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_disconnect */ - - -int -mtk_p2p_cfg80211_change_iface ( - IN struct wiphy *wiphy, - IN struct net_device *ndev, - IN enum nl80211_iftype type, - IN u32 *flags, - IN struct vif_params *params - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_MSG_P2P_SWITCH_OP_MODE_T prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)NULL; - - do { - if ((wiphy == NULL) || - (ndev == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_change_iface.\n")); - - if (ndev->ieee80211_ptr) { - ndev->ieee80211_ptr->iftype = type; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - - // Switch OP MOde. - prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T)cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_P2P_SWITCH_OP_MODE_T)); - - if (prSwitchModeMsg == NULL) { - ASSERT(FALSE); - i4Rslt = -ENOMEM; - break; - } - - prSwitchModeMsg->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH; - - switch (type) { - case NL80211_IFTYPE_P2P_CLIENT: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_CLIENT.\n")); - case NL80211_IFTYPE_STATION: - if (type == NL80211_IFTYPE_STATION) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_STATION.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_INFRASTRUCTURE; - break; - case NL80211_IFTYPE_AP: - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_AP.\n")); - case NL80211_IFTYPE_P2P_GO: - if (type == NL80211_IFTYPE_P2P_GO) { - DBGLOG(P2P, TRACE, ("NL80211_IFTYPE_P2P_GO not AP.\n")); - } - prSwitchModeMsg->eOpMode = OP_MODE_ACCESS_POINT; - break; - default: - DBGLOG(P2P, TRACE, ("Other type :%d .\n", type)); - prSwitchModeMsg->eOpMode = OP_MODE_P2P_DEVICE; - break; - } - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prSwitchModeMsg, - MSG_SEND_METHOD_BUF); - - i4Rslt = 0; - - } while (FALSE); - - return i4Rslt; - -} /* mtk_p2p_cfg80211_change_iface */ - - -int -mtk_p2p_cfg80211_set_channel ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN struct ieee80211_channel *chan, - IN enum nl80211_channel_type channel_type) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - RF_CHANNEL_INFO_T rRfChnlInfo; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (chan == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_channel.\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - mtk_p2p_cfg80211func_channel_format_switch(chan, - channel_type, - &rRfChnlInfo, - NULL); - - p2pFuncSetChannel(prGlueInfo->prAdapter, &rRfChnlInfo); - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; - -} -/* mtk_p2p_cfg80211_set_channel */ - -int -mtk_p2p_cfg80211_set_bitrate_mask ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ) -{ - INT_32 i4Rslt = -EINVAL; - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL) || - (mask == NULL)) { - break; - } - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_set_bitrate_mask\n")); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - // TODO: Set bitrate mask of the peer? - - i4Rslt = 0; - } -while (FALSE); - - return i4Rslt; -} /* mtk_p2p_cfg80211_set_bitrate_mask */ - - -void -mtk_p2p_cfg80211_mgmt_frame_register ( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ) -{ -#if 1 - P_MSG_P2P_MGMT_FRAME_REGISTER_T prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)NULL; -#endif - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T)NULL; - - do { - if ((wiphy == NULL) || - (dev == NULL)) { - break; - } - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prMgmtFrameRegister = kmalloc(sizeof(MSG_P2P_MGMT_FRAME_REGISTER_T),GFP_ATOMIC); -/* this function is used to set HW filter to RX package, but if we use oringnal method, we may face wrong -cmd sequence to firmware (supplicant request 1. set probe request fiter 2. remain on channel but for driver 1. send channel request -first 2. then set RX filter). This wrong schedule sequence will cause other device can not find this DUT -Solution: -1. use mail box to handle set RX filter request -2. use kmalloc to avoid sleep in atomic contex, if alloc mem fail, use oringal method -*/ - - - if(prMgmtFrameRegister == NULL){ - - printk("p2p set fitler error,can not alloc mem from kernel, use tx thread to set rx filter\n"); - switch (frame_type) { - case MAC_FRAME_PROBE_REQ: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Open packet filer probe request\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_PROBE_REQ; - DBGLOG(P2P, TRACE, ("Close packet filer probe request\n")); - } - break; - case MAC_FRAME_ACTION: - if (reg) { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter |= PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Open packet filer action frame.\n")); - } - else { - prGlueInfo->prP2PInfo->u4OsMgmtFrameFilter &= ~PARAM_PACKET_FILTER_ACTION_FRAME; - DBGLOG(P2P, TRACE, ("Close packet filer action frame.\n")); - } - break; - default: - DBGLOG(P2P, ERROR, ("Ask frog to add code for mgmt:%x\n", frame_type)); - break; - } - - - - if((prGlueInfo->prAdapter != NULL) && (prGlueInfo->prAdapter->fgIsP2PRegistered == TRUE)){ - - //prGlueInfo->u4Flag |= GLUE_FLAG_FRAME_FILTER; - set_bit(GLUE_FLAG_FRAME_FILTER_BIT, &prGlueInfo->u4Flag); - - /* wake up main thread */ - wake_up_interruptible(&prGlueInfo->waitq); - - if (in_interrupt()) { - DBGLOG(P2P, TRACE, ("It is in interrupt level\n")); - } - } - }else{ - -#if 1 -#if 0 - prMgmtFrameRegister = (P_MSG_P2P_MGMT_FRAME_REGISTER_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_MGMT_FRAME_REGISTER_T)); - - if (prMgmtFrameRegister == NULL) { - ASSERT(FALSE); - break; - } - #endif - prMgmtFrameRegister->rMsgHdr.eMsgId = MID_MNY_P2P_MGMT_FRAME_REGISTER; - - prMgmtFrameRegister->u2FrameType = frame_type; - prMgmtFrameRegister->fgIsRegister = reg; - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMgmtFrameRegister, - MSG_SEND_METHOD_BUF); - -#endif - } - } while (FALSE); - - return; -} /* mtk_p2p_cfg80211_mgmt_frame_register */ - - -BOOLEAN -mtk_p2p_cfg80211func_channel_format_switch ( - IN struct ieee80211_channel *channel, - IN enum nl80211_channel_type channel_type, - IN P_RF_CHANNEL_INFO_T prRfChnlInfo, - IN P_ENUM_CHNL_EXT_T prChnlSco - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel == NULL) { - break; - } - - if (prRfChnlInfo) { - prRfChnlInfo->ucChannelNum = nicFreq2ChannelNum(channel->center_freq * 1000); - - switch (channel->band) { - case IEEE80211_BAND_2GHZ: - prRfChnlInfo->eBand = BAND_2G4; - break; - case IEEE80211_BAND_5GHZ: - prRfChnlInfo->eBand = BAND_5G; - break; - default: - prRfChnlInfo->eBand = BAND_2G4; - break; - } - - } - - - if (prChnlSco) { - - switch (channel_type) { - case NL80211_CHAN_NO_HT: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT20: - *prChnlSco = CHNL_EXT_SCN; - break; - case NL80211_CHAN_HT40MINUS: - *prChnlSco = CHNL_EXT_SCA; - break; - case NL80211_CHAN_HT40PLUS: - *prChnlSco = CHNL_EXT_SCB; - break; - default: - ASSERT(FALSE); - *prChnlSco = CHNL_EXT_SCN; - break; - } - } - - fgIsValid = TRUE; - } -while (FALSE); - - return fgIsValid; -} -/* mtk_p2p_cfg80211func_channel_format_switch */ - - -#if CONFIG_NL80211_TESTMODE -int mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_TEST_PARAMS prParams = (P_NL80211_DRIVER_TEST_PARAMS)NULL; - BOOLEAN fgIsValid = FALSE; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_cmd\n")); - - if(data && len) - prParams = (P_NL80211_DRIVER_TEST_PARAMS)data; - - if(prParams->index >> 24 == 0x01) { - /* New version */ - prParams->index = prParams->index & ~ BITS(24,31); - } - else { - /* Old version*/ - mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd(wiphy, data, len); - fgIsValid = TRUE; - return fgIsValid; - } - - /* Clear the version byte */ - prParams->index = prParams->index & ~ BITS(24,31); - - if(prParams){ - switch(prParams->index){ - case 1: /* P2P Simga */ - if(mtk_p2p_cfg80211_testmode_p2p_sigma_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; -#if CFG_SUPPORT_WFD - case 2: /* WFD */ - if(mtk_p2p_cfg80211_testmode_wfd_update_cmd(wiphy, data, len)) - fgIsValid= TRUE; - break; -#endif - case 3: /* Hotspot Client Management */ - if(mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd(wiphy, data, len)) - fgIsValid = TRUE; - break; - default: - fgIsValid = TRUE; - break; - } - } - - return fgIsValid; - -} - - -int mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - NL80211_DRIVER_TEST_PRE_PARAMS rParams; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index_mode; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - kalMemZero(&rParams, sizeof(NL80211_DRIVER_TEST_PRE_PARAMS)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd\n")); - - if(data && len) - memcpy(&rParams, data, len); - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA,idx_mode=%d idx=%d value=%lu\n", - (INT_16)rParams.idx_mode, (INT_16)rParams.idx, rParams.value)); - - index_mode = rParams.idx_mode; - index = rParams.idx; - value = rParams.value; - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - p2pFsmUninit(prGlueInfo->prAdapter); - p2pFsmInit(prGlueInfo->prAdapter); - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - default: - break; - } - - return status; - -} - - -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_P2P_SIGMA_PARAMS prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - UINT_32 index; - INT_32 value; - int status = 0; - UINT_32 u4Leng; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_p2p_sigma_cmd\n")); - - if(data && len) - prParams = (P_NL80211_DRIVER_P2P_SIGMA_PARAMS)data; - - index = (INT_32)prParams->idx; - value = (INT_32)prParams->value; - - DBGLOG(P2P, TRACE, ("NL80211_ATTR_TESTDATA, idx=%lu value=%lu\n", - (INT_32)prParams->idx, (INT_32)prParams->value)); - - switch (index) { - case 0: /* Listen CH */ - break; - case 1: /* P2p mode */ - break; - case 4: /* Noa duration */ - prP2pSpecificBssInfo->rNoaParam.u4NoaDurationMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 5: /* Noa interval */ - prP2pSpecificBssInfo->rNoaParam.u4NoaIntervalMs = value; - // only to apply setting when setting NOA count - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 6: /* Noa count */ - prP2pSpecificBssInfo->rNoaParam.u4NoaCount = value; - //status = mtk_p2p_wext_set_noa_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rNoaParam); - break; - case 100: /* Oper CH */ - // 20110920 - frog: User configurations are placed in ConnSettings. - // prP2pConnSettings->ucOperatingChnl = value; - break; - case 101: /* Local config Method, for P2P SDK */ - prP2pConnSettings->u2LocalConfigMethod = value; - break; - case 102: /* Sigma P2p reset */ - //kalMemZero(prP2pConnSettings->aucTargetDevAddr, MAC_ADDR_LEN); - //prP2pConnSettings->eConnectionPolicy = ENUM_P2P_CONNECTION_POLICY_AUTO; - break; - case 103: /* WPS MODE */ - kalP2PSetWscMode(prGlueInfo, value); - break; - case 104: /* P2p send persence, duration */ - break; - case 105: /* P2p send persence, interval */ - break; - case 106: /* P2P set sleep */ - value = 1; - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - break; - case 107: /* P2P set opps, CTWindowl */ - prP2pSpecificBssInfo->rOppPsParam.u4CTwindowMs = value; - //status = mtk_p2p_wext_set_oppps_param(prDev, info, wrqu, (char *)&prP2pSpecificBssInfo->rOppPsParam); - break; - case 108: /* p2p_set_power_save */ - kalIoctl(prGlueInfo, - wlanoidSetP2pPowerSaveProfile, - &value, - sizeof(value), - FALSE, - FALSE, - TRUE, - TRUE, - &u4Leng); - - break; - case 109: /* Max Clients*/ - kalP2PSetMaxClients(prGlueInfo, value); - break; - default: - break; - } - - return status; - -} - -#if CFG_SUPPORT_WFD -int -mtk_p2p_cfg80211_testmode_wfd_update_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_WFD_PARAMS prParams = (P_NL80211_DRIVER_WFD_PARAMS)NULL; - int status = 0; - P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL; - P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T prMsgWfdCfgUpdate = (P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T)NULL; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - prParams = (P_NL80211_DRIVER_WFD_PARAMS)data; - - - DBGLOG(P2P, INFO, ("mtk_p2p_cfg80211_testmode_wfd_update_cmd\n")); - -#if 1 - - DBGLOG(P2P, INFO,("WFD Enable:%x\n", prParams->WfdEnable)); - DBGLOG(P2P, INFO,("WFD Session Available:%x\n", prParams->WfdSessionAvailable)); - DBGLOG(P2P, INFO,("WFD Couple Sink Status:%x\n", prParams->WfdCoupleSinkStatus)); - //aucReserved0[2] - DBGLOG(P2P, INFO,("WFD Device Info:%x\n", prParams->WfdDevInfo)); - DBGLOG(P2P, INFO,("WFD Control Port:%x\n", prParams->WfdControlPort)); - DBGLOG(P2P, INFO,("WFD Maximum Throughput:%x\n", prParams->WfdMaximumTp)); - DBGLOG(P2P, INFO,("WFD Extend Capability:%x\n", prParams->WfdExtendCap)); - DBGLOG(P2P, INFO,("WFD Couple Sink Addr "MACSTR" \n", MAC2STR(prParams->WfdCoupleSinkAddress))); - DBGLOG(P2P, INFO,("WFD Associated BSSID "MACSTR" \n", MAC2STR(prParams->WfdAssociatedBssid))); - //UINT_8 aucVideolp[4]; - //UINT_8 aucAudiolp[4]; - DBGLOG(P2P, INFO,("WFD Video Port:%x\n", prParams->WfdVideoPort)); - DBGLOG(P2P, INFO,("WFD Audio Port:%x\n", prParams->WfdAudioPort)); - DBGLOG(P2P, INFO,("WFD Flag:%x\n", prParams->WfdFlag)); - DBGLOG(P2P, INFO,("WFD Policy:%x\n", prParams->WfdPolicy)); - DBGLOG(P2P, INFO,("WFD State:%x\n", prParams->WfdState)); - //UINT_8 aucWfdSessionInformationIE[24*8]; - DBGLOG(P2P, INFO,("WFD Session Info Length:%x\n", prParams->WfdSessionInformationIELen)); - //UINT_8 aucReserved1[2]; - DBGLOG(P2P, INFO,("WFD Primary Sink Addr "MACSTR" \n", MAC2STR(prParams->aucWfdPrimarySinkMac))); - DBGLOG(P2P, INFO,("WFD Secondary Sink Addr "MACSTR" \n", MAC2STR(prParams->aucWfdSecondarySinkMac))); - DBGLOG(P2P, INFO,("WFD Advanced Flag:%x\n", prParams->WfdAdvanceFlag)); - DBGLOG(P2P, INFO,("WFD Sigma mode:%x\n", prParams->WfdSigmaMode)); - //UINT_8 aucReserved2[64]; - //UINT_8 aucReserved3[64]; - //UINT_8 aucReserved4[64]; - -#endif - - prWfdCfgSettings = &(prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings); - - kalMemCopy(&prWfdCfgSettings->u4WfdCmdType, &prParams->WfdCmdType, sizeof(WFD_CFG_SETTINGS_T)); - - prMsgWfdCfgUpdate = cnmMemAlloc(prGlueInfo->prAdapter, RAM_TYPE_MSG, sizeof(MSG_WFD_CONFIG_SETTINGS_CHANGED_T)); - - if (prMsgWfdCfgUpdate == NULL) { - ASSERT(FALSE); - return status; - } - - prMsgWfdCfgUpdate->rMsgHdr.eMsgId = MID_MNY_P2P_WFD_CFG_UPDATE; - prMsgWfdCfgUpdate->prWfdCfgSettings = prWfdCfgSettings; - - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgWfdCfgUpdate, - MSG_SEND_METHOD_BUF); -#if 0 // Test Only -// prWfdCfgSettings->ucWfdEnable = 1; -// prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_DEV_INFO_VALID; - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_DEV_INFO_VALID; - prWfdCfgSettings->u2WfdDevInfo = 123; - prWfdCfgSettings->u2WfdControlPort = 456; - prWfdCfgSettings->u2WfdMaximumTp = 789; - - - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_SINK_INFO_VALID; - prWfdCfgSettings->ucWfdCoupleSinkStatus = 0xAB; - { - UINT_8 aucTestAddr[MAC_ADDR_LEN] = {0x77, 0x66, 0x55, 0x44, 0x33, 0x22}; - COPY_MAC_ADDR(prWfdCfgSettings->aucWfdCoupleSinkAddress, aucTestAddr); - } - - prWfdCfgSettings->u4WfdFlag |= WFD_FLAGS_EXT_CAPABILITY_VALID; - prWfdCfgSettings->u2WfdExtendCap = 0xCDE; - -#endif - - return status; - -} -#endif /* CFG_SUPPORT_WFD */ - - - -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - P_NL80211_DRIVER_hotspot_block_PARAMS prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)NULL; - int fgIsValid = 0; - - ASSERT(wiphy); - - prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy)); - - if(data && len) - prParams = (P_NL80211_DRIVER_hotspot_block_PARAMS)data; - - DBGLOG(P2P, TRACE, ("mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd\n")); - - fgIsValid = kalP2PSetBlackList(prGlueInfo, prParams->aucBssid, prParams->ucblocked); - - return fgIsValid; - -} - -#endif - - -#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - -#endif // CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_WIFI_DIRECT_CFG_80211 diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_init.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_init.c deleted file mode 100755 index f40716c2d645..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_init.c +++ /dev/null @@ -1,559 +0,0 @@ -/* -** $Id: @(#) gl_p2p_init.c@@ -*/ - -/*! \file gl_p2p_init.c - \brief init and exit routines of Linux driver interface for Wi-Fi Direct - - This file contains the main routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2011 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "precomp.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define P2P_MODE_INF_NAME "p2p%d"; -#define AP_MODE_INF_NAME "wlan%d"; - -//#define MAX_INF_NAME_LEN 15 -//#define MIN_INF_NAME_LEN 1 - -#define RUNNING_P2P_MODE 0 -#define RUNNING_AP_MODE 1 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - - - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/* Get interface name and running mode from module insertion parameter -* Usage: insmod p2p.ko mode=1 -* default: interface name is p2p%d -* running mode is P2P -*/ -static PUCHAR ifname = P2P_MODE_INF_NAME; -static UINT_16 mode = RUNNING_P2P_MODE; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#if defined(CONFIG_HAS_EARLYSUSPEND) -extern int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume); - -extern int glUnregisterEarlySuspend(struct early_suspend *prDesc); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief check interface name parameter is valid or not -* if invalid, set ifname to P2P_MODE_INF_NAME -* -* -* \retval -*/ -/*----------------------------------------------------------------------------*/ -VOID -p2pCheckInterfaceName( - VOID - ) -{ - - if(mode) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } -#if 0 - UINT_32 ifLen = 0; - - if(ifname) { - ifLen = strlen(ifname); - - if(ifLen > MAX_INF_NAME_LEN) { - ifname[MAX_INF_NAME_LEN] = '\0'; - } - else if( ifLen < MIN_INF_NAME_LEN ) { - ifname = P2P_MODE_INF_NAME; - } - } else { - ifname = P2P_MODE_INF_NAME; - } -#endif -} - - -extern UINT_8 g_aucBufIpAddr[32]; - -static void wlanP2PEarlySuspend(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - - printk(KERN_INFO "*********p2pEarlySuspend************\n"); - - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pEarlySuspend ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ip is not avaliable.\n"); - return; - } - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - // todo: traverse between list to find whole sets of IPv6 addresses - - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - } - -#endif - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); // TODO: frog. The pointer is not right. - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS_IP); -#endif - } -#ifdef CONFIG_IPV6 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); -// prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS) ((UINT_32) prParamNetAddr + - (UINT_32) (prParamNetAddr->u2AddressLength + OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress))); - - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - - -static void wlanP2PLateResume(void) -{ - struct net_device *prDev = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_8 ip[4] = { 0 }; -#ifdef CONFIG_IPV6 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack -#endif - - printk(KERN_INFO "*********wlanP2PLateResume************\n"); - if(!wlanExportGlueInfo(&prGlueInfo)) { - printk(KERN_INFO "*********p2pLateResume ignored************\n"); - return; - } - - ASSERT(prGlueInfo); - // <1> Sanity check and acquire the net_device - prDev = prGlueInfo->prP2PInfo->prDevHandler; - ASSERT(prDev); - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ip is not avaliable.\n"); - return; - } - - // <4> copy the IPv4 address - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - printk(KERN_INFO"ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3]); - -#ifdef CONFIG_IPV6 - // <5> get the IPv6 address - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return; - } - // <6> copy the IPv6 address - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); -#endif - // <7> clear the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; -// UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = sizeof(PARAM_NETWORK_ADDRESS_LIST); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)g_aucBufIpAddr;//aucBuf; - - kalMemZero(g_aucBufIpAddr, sizeof(g_aucBufIpAddr)); - - prParamNetAddrList->u4AddressCount = 0; - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - - ASSERT(u4Len <= sizeof(g_aucBufIpAddr/*aucBuf*/)); - rStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - TRUE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - printk(KERN_INFO DRV_NAME"set HW pattern filter fail 0x%lx\n", rStatus); - } - } -} - -#if defined(CONFIG_HAS_EARLYSUSPEND) -static struct early_suspend mt6620_p2p_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN, -}; - -static void p2p_early_suspend(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_early_suspend************\n"); - wlanP2PEarlySuspend(); -} - -static void p2p_late_resume(struct early_suspend *h) -{ - printk(KERN_INFO "*********wlanP2P_late_resume************\n"); - wlanP2PLateResume(); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p init procedure, include register pointer to wlan -* glue register p2p -* set p2p registered flag -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ) -{ - - printk("p2p Launch\n"); - - if(prGlueInfo->prAdapter->fgIsP2PRegistered == TRUE) { - printk("p2p already registered\n"); - return FALSE; - } - else if(glRegisterP2P(prGlueInfo, ifname, (BOOLEAN)mode)) { - prGlueInfo->prAdapter->fgIsP2PRegistered = TRUE; - - printk("Launch success, fgIsP2PRegistered TRUE.\n"); - -#if defined(CONFIG_HAS_EARLYSUSPEND) - /* Here, we register the early suspend and resume callback */ - glRegisterEarlySuspend(&mt6620_p2p_early_suspend_desc, p2p_early_suspend, p2p_late_resume); -#endif - - return TRUE; - } - else { - printk("Launch Fail\n"); - } - - return FALSE; -} - - -VOID -p2pSetMode ( - IN BOOLEAN fgIsAPMOde - ) -{ - if (fgIsAPMOde) { - mode = RUNNING_AP_MODE; - ifname = AP_MODE_INF_NAME; - } - else { - mode = RUNNING_P2P_MODE; - ifname = P2P_MODE_INF_NAME; - } - - return; -} /* p2pSetMode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* run p2p exit procedure, include unregister pointer to wlan -* glue unregister p2p -* set p2p registered flag - -* \retval 1 Success -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ) -{ - if(prGlueInfo->prAdapter->fgIsP2PRegistered == FALSE) { - printk("p2p is not Registered.\n"); - return FALSE; - } - else { - -#if defined(CONFIG_HAS_EARLYSUSPEND) - glUnregisterEarlySuspend(&mt6620_p2p_early_suspend_desc); -#endif - /*Check p2p fsm is stop or not. If not then stop now*/ - if(IS_P2P_ACTIVE(prGlueInfo->prAdapter)) { - p2pStopImmediate(prGlueInfo); - } - prGlueInfo->prAdapter->fgIsP2PRegistered = FALSE; - glUnregisterP2P(prGlueInfo); - /*p2p is removed successfully*/ - return TRUE; - } - return FALSE; -} - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver entry point when the driver is configured as a Linux Module, and -* is called once at module load time, by the user-level modutils -* application: insmod or modprobe. -* -* \retval 0 Success -*/ -/*----------------------------------------------------------------------------*/ -static int initP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - /*check interface name validation*/ - p2pCheckInterfaceName(); - - printk( KERN_INFO DRV_NAME "InitP2P, Ifname: %s, Mode: %s\n", ifname, mode ? "AP":"P2P"); - - /*register p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(p2pLaunch, p2pRemove, P2P_MODULE); - - /*if wlan is not start yet, do nothing - * p2pLaunch will be called by txthread while wlan start - */ - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModInit(prGlueInfo); - return ( prGlueInfo->prAdapter->fgIsP2PRegistered? 0: -EIO); - } - - return 0; -} /* end of initP2P() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Driver exit point when the driver as a Linux Module is removed. Called -* at module unload time, by the user level modutils application: rmmod. -* This is our last chance to clean up after ourselves. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -//1 Module Leave Point -static VOID __exit exitP2P(void) -{ - P_GLUE_INFO_T prGlueInfo; - - printk( KERN_INFO DRV_NAME "ExitP2P\n"); - - /*if wlan is not started yet, return FALSE*/ - if(wlanExportGlueInfo(&prGlueInfo)) { - wlanSubModExit(prGlueInfo); - } - /*UNregister p2p init & exit function to wlan sub module handler*/ - wlanSubModRegisterInitExit(NULL, NULL, P2P_MODULE); -} /* end of exitP2P() */ -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_kal.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_kal.c deleted file mode 100755 index 8273640c2551..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_p2p_kal.c +++ /dev/null @@ -1,1747 +0,0 @@ -/* -** $Id: @(#) gl_p2p_cfg80211.c@@ -*/ - -/*! \file gl_p2p_kal.c - \brief - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "net/cfg80211.h" -#include "precomp.h" -#ifdef CFG_DUAL_ANTENNA -#include "mtk_porting.h" -#include "dual_ant_bwcs.h" -#endif - - -extern BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -extern BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ); - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct state from glue layer -* -* \param[in] -* prGlueInfo -* rPeerAddr -* \return -* ENUM_BOW_DEVICE_STATE -*/ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->eState; -} /* end of kalP2PGetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to update the assoc req to p2p -* -* \param[in] -* prGlueInfo -* pucFrameBody -* u4FrameBodyLen -* fgReassocRequest -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PUpdateAssocInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; - unsigned char *pucDesiredIE = NULL; -// unsigned char aucExtraInfoBuf[200]; - PUINT_8 cp; - - memset(&wrqu, 0, sizeof(wrqu)); - - if (fgReassocRequest) { - if (u4FrameBodyLen < 15) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - else { - if (u4FrameBodyLen < 9) { - /* - printk(KERN_WARNING "frameBodyLen too short:%ld\n", frameBodyLen); - */ - return; - } - } - - cp = pucFrameBody; - - if (fgReassocRequest) { - /* Capability information field 2 */ - /* Listen interval field 2*/ - /* Current AP address 6 */ - cp += 10; - u4FrameBodyLen -= 10; - } - else { - /* Capability information field 2 */ - /* Listen interval field 2*/ - cp += 4; - u4FrameBodyLen -= 4; - } - - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPSIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPSIE!!\n"); - /* WPS IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0x30, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* RSN IE found */ - } - else if (wextSrchDesiredWPAIE(cp, u4FrameBodyLen, 0xDD, &pucDesiredIE)) { - //printk("wextSrchDesiredWPAIE!!\n"); - /* WPA IE found */ - } - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVASSOCREQIE, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct state in glue layer -* -* \param[in] -* prGlueInfo -* eBowState -* rPeerAddr -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - if(eState == PARAM_MEDIA_STATE_CONNECTED) { - prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_CONNECTED; - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_CONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - } - else if(eState == PARAM_MEDIA_STATE_DISCONNECTED) { - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_STA_DISCONNECT="MACSTR, MAC2STR(rPeerAddr)); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - } - else { - ASSERT(0); - } - - return; -} /* end of kalP2PSetState() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Wi-Fi Direct operating frequency -* -* \param[in] -* prGlueInfo -* -* \return -* in unit of KHz -*/ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->u4FreqInKHz; -} /* end of kalP2PGetFreqInKHz() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to retrieve Bluetooth-over-Wi-Fi role -* -* \param[in] -* prGlueInfo -* -* \return -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - - return prGlueInfo->prP2PInfo->ucRole; -} /* end of kalP2PGetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set Wi-Fi Direct role -* -* \param[in] -* prGlueInfo -* ucResult -* 0: successful -* 1: error -* ucRole -* 0: P2P Device -* 1: Group Client -* 2: Group Owner -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - ASSERT(ucRole <= 2); - - memset(&evt, 0, sizeof(evt)); - - if(ucResult == 0) { - prGlueInfo->prP2PInfo->ucRole = ucRole; - } - - if (pucSSID) - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, pucSSID[7], pucSSID[8]); - else - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, '0', '0'); - - evt.data.length = strlen(aucBuffer); - - //if (pucSSID) - // printk("P2P GO SSID DIRECT-%c%c\n", pucSSID[7], pucSSID[8]); - - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PSetRole() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the cipher for p2p -* -* \param[in] -* prGlueInfo -* u4Cipher -* -* \return -* none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->u4CipherPairwise = u4Cipher; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the cipher, return for cipher is ccmp -* -* \param[in] -* prGlueInfo -* -* \return -* TRUE: cipher is ccmp -* FALSE: cipher is none -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PGetCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -BOOLEAN -kalP2PGetCcmpCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return TRUE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return FALSE; - - return FALSE; -} - - -BOOLEAN -kalP2PGetTkipCipher ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_CCMP) - return FALSE; - - if (prGlueInfo->prP2PInfo->u4CipherPairwise == IW_AUTH_CIPHER_TKIP) - return TRUE; - - return FALSE; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - prGlueInfo->prP2PInfo->ucWSCRunning = ucWscMode; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the status of WSC -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -UINT_8 -kalP2PGetWscMode ( - IN P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - return (prGlueInfo->prP2PInfo->ucWSCRunning); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to get the wsc ie length -* -* \param[in] -* prGlueInfo -* ucType : 0 for beacon, 1 for probe req, 2 for probe resp -* -* \return -* The WSC IE length -*/ -/*----------------------------------------------------------------------------*/ -UINT_16 -kalP2PCalWSC_IELen ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ) -{ - ASSERT(prGlueInfo); - - ASSERT(ucType < 3); - - return prGlueInfo->prP2PInfo->u2WSCIELen[ucType]; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to copy the wsc ie setting from p2p supplicant -* -* \param[in] -* prGlueInfo -* -* \return -* The WPS IE length -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PGenWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - (pucBuffer == NULL)) { - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(pucBuffer, prGlP2pInfo->aucWSCIE[ucType], prGlP2pInfo->u2WSCIELen[ucType]); - - } while (FALSE); - - return; -} - - -VOID -kalP2PUpdateWSC_IE ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ) -{ - P_GL_P2P_INFO_T prGlP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (ucType >= 3) || - ((u2BufferLength > 0) && (pucBuffer == NULL))) { - break; - } - - - if (u2BufferLength > 400) { - DBGLOG(P2P, ERROR, ("Buffer length is not enough, GLUE only 400 bytes but %d received\n", u2BufferLength)); - ASSERT(FALSE); - break; - } - - - prGlP2pInfo = prGlueInfo->prP2PInfo; - - kalMemCopy(prGlP2pInfo->aucWSCIE[ucType], pucBuffer, u2BufferLength); - - prGlP2pInfo->u2WSCIELen[ucType] = u2BufferLength; - - - } while (FALSE); - - return; -} /* kalP2PUpdateWSC_IE */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief indicate an event to supplicant for device connection request -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_REQ_DEVICE_INFO access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = u4NameLength > 32 ? 32 : u4NameLength; - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - pucDevName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, rPeerAddr); - prGlueInfo->prP2PInfo->ucConnReqDevType = ucDevType; - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = i4ConfigMethod; - prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod = i4ActiveConfigMethod; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_REQ"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateConnReq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for device connection request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] pucGroupBssid Only valid when invitation Type equals to 0. -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationIndication ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ) -{ -#if 1 - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4ConnReqNameLength = (UINT_32)((prP2pDevDesc->u2NameLength > 32)? 32 : prP2pDevDesc->u2NameLength); - kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, - prP2pDevDesc->aucName, - prGlueInfo->prP2PInfo->u4ConnReqNameLength); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, prP2pDevDesc->aucDeviceAddr); - COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqGroupAddr, pucGroupBssid); - prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = (INT_32)(prP2pDevDesc->u2ConfigMethod); - prGlueInfo->prP2PInfo->ucOperatingChnl = ucOperatingChnl; - prGlueInfo->prP2PInfo->ucInvitationType = ucInvitationType; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_INDICATE"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; - -#else - P_MSG_P2P_CONNECTION_REQUEST_T prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)NULL; - P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T)NULL; - P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T)NULL; - - do { - ASSERT_BREAK((prGlueInfo != NULL) && (prP2pDevDesc != NULL)); - - - // Not a real solution - - prP2pSpecificBssInfo = prGlueInfo->prAdapter->rWifiVar.prP2pSpecificBssInfo; - prP2pConnSettings = prGlueInfo->prAdapter->rWifiVar.prP2PConnSettings; - - prP2pConnReq = (P_MSG_P2P_CONNECTION_REQUEST_T)cnmMemAlloc(prGlueInfo->prAdapter, - RAM_TYPE_MSG, - sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - if (prP2pConnReq == NULL) { - break; - } - - - kalMemZero(prP2pConnReq, sizeof(MSG_P2P_CONNECTION_REQUEST_T)); - - prP2pConnReq->rMsgHdr.eMsgId = MID_MNY_P2P_CONNECTION_REQ; - - prP2pConnReq->eFormationPolicy = ENUM_P2P_FORMATION_POLICY_AUTO; - - COPY_MAC_ADDR(prP2pConnReq->aucDeviceID, prP2pDevDesc->aucDeviceAddr); - - prP2pConnReq->u2ConfigMethod = prP2pDevDesc->u2ConfigMethod; - - if (ucInvitationType == P2P_INVITATION_TYPE_INVITATION) { - prP2pConnReq->fgIsPersistentGroup = FALSE; - prP2pConnReq->fgIsTobeGO = FALSE; - - } - - else if (ucInvitationType == P2P_INVITATION_TYPE_REINVOKE) { - DBGLOG(P2P, TRACE, ("Re-invoke Persistent Group\n")); - prP2pConnReq->fgIsPersistentGroup = TRUE; - prP2pConnReq->fgIsTobeGO = (prGlueInfo->prP2PInfo->ucRole == 2)?TRUE:FALSE; - - } - - - p2pFsmRunEventDeviceDiscoveryAbort(prGlueInfo->prAdapter, NULL); - - if (ucOperatingChnl != 0) { - prP2pSpecificBssInfo->ucPreferredChannel = ucOperatingChnl; - } - - if ((ucSsidLen < 32) && (pucSsid != NULL)) { - COPY_SSID(prP2pConnSettings->aucSSID, - prP2pConnSettings->ucSSIDLen, - pucSsid, - ucSsidLen); - } - - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prP2pConnReq, - MSG_SEND_METHOD_BUF); - - - - } while (FALSE); - - // frog add. - // TODO: Invitation Indication - - return; -#endif - -} /* kalP2PInvitationIndication */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an status to supplicant for device invitation status. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - /* buffer peer information for later IOC_P2P_GET_STRUCT access */ - prGlueInfo->prP2PInfo->u4InvStatus = u4InvStatus; - - // prepare event structure - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_INV_STATUS"); - evt.data.length = strlen(aucBuffer); - - /* indicate in IWEVCUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* kalP2PInvitationStatus */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery request from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_REQ %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDRequest() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery response -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_RESP %d", ucSeqNum); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Indicate an event to supplicant for Service Discovery TX Done -* from other device. -* -* \param[in] prGlueInfo Pointer of GLUE_INFO_T -* \param[in] ucSeqNum Sequence number of the frame -* \param[in] ucStatus Status code for TX -* -* \retval none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SD_XMITTED: %d %d", ucSeqNum, ucStatus); - evt.data.length = strlen(aucBuffer); - - /* indicate IWEVP2PSDREQ event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - - return; -} /* end of kalP2PIndicateSDResponse() */ - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - return prGlueInfo->prP2PInfo->prDevHandler; -} - -#if CFG_SUPPORT_ANTI_PIRACY -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PIndicateSecCheckRsp ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ) -{ - union iwreq_data evt; - UINT_8 aucBuffer[IW_CUSTOM_MAX]; - - ASSERT(prGlueInfo); - - memset(&evt, 0, sizeof(evt)); - snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_SEC_CHECK_RSP="); - - kalMemCopy(prGlueInfo->prP2PInfo->aucSecCheckRsp, pucRsp, u2RspLen); - evt.data.length = strlen(aucBuffer); - -#if DBG - DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u2RspLen); -#endif - /* indicate in IWECUSTOM event */ - wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, - IWEVCUSTOM, - &evt, - aucBuffer); - return; -} /* p2pFsmRunEventRxDisassociation */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief -* -* \param[in] prAdapter Pointer of ADAPTER_T -* -* \return none -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ) -{ - rlmDomainGetChnlList(prGlueInfo->prAdapter, - eSpecificBand, - ucMaxChannelNum, - pucNumOfChannel, - paucChannelList); -} /* kalGetChnlList */ - -//////////////////////////////////////ICS SUPPORT////////////////////////////////////// - -VOID -kalP2PIndicateChannelReady ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ) -{ - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - RF_CHANNEL_INFO_T rChannelInfo; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; - #if 0 - P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq = (P_MSG_P2P_MGMT_TX_REQUEST_T)NULL; - INT_32 i4Rslt = -EINVAL; - P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL; - prP2pFsmInfo = prGlueInfo->prAdapter->rWifiVar.prP2pFsmInfo; - P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo); - - #endif - do { - if (prGlueInfo == NULL) { - break; - } - - //if (prChnlReqInfo->fgNeedIndSupp) { - kalMemZero(&rChannelInfo, sizeof(RF_CHANNEL_INFO_T)); - - rChannelInfo.ucChannelNum = u4ChannelNum; - rChannelInfo.eBand = eBand; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueInfo->prP2PInfo, &rChannelInfo); - - kalP2pFuncGetChannelType(eSco, &eChnlType); - - cfg80211_ready_on_channel(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - u8SeqNum, //u64 cookie, - prIEEE80211ChnlStruct, //struct ieee80211_channel * chan, - eChnlType, //enum nl80211_channel_type channel_type, - u4Duration, //unsigned int duration, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - } while (FALSE); - //} -#if 0 - if (prChnlReqInfo->prMsgTxReq!=NULL) { - prMsgTxReq = prChnlReqInfo->prMsgTxReq; - mboxSendMsg(prGlueInfo->prAdapter, - MBOX_ID_0, - (P_MSG_HDR_T)prMsgTxReq, - MSG_SEND_METHOD_UNBUF); - i4Rslt = 0; - prChnlReqInfo->prMsgTxReq=NULL; - atomic_set(&prGlueInfo->rMgmtTxAto, 0); - complete(&prGlueInfo->rMgmtTxComp); - init_completion(&prGlueInfo->rMgmtTxComp); - } - - return i4Rslt; -#endif -} /* kalP2PIndicateChannelReady */ - - - -VOID -kalP2PIndicateChannelExpired ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ) -{ - - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prIEEE80211ChnlStruct = (struct ieee80211_channel *)NULL; - enum nl80211_channel_type eChnlType = NL80211_CHAN_NO_HT; - RF_CHANNEL_INFO_T rRfChannelInfo; - - do { - if ((prGlueInfo == NULL) || (prChnlReqInfo == NULL)) { - - ASSERT(FALSE); - break; - } - #if 0 //LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) - if(prChnlReqInfo->fgNeedIndSupp==0){ - printk("ch expired, no need ind os\n"); - break; - } - #endif - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - DBGLOG(P2P, TRACE, ("kalP2PIndicateChannelExpired\n")); - - rRfChannelInfo.eBand = prChnlReqInfo->eBand; - rRfChannelInfo.ucChannelNum = prChnlReqInfo->ucReqChnlNum; - - prIEEE80211ChnlStruct = kalP2pFuncGetChannelEntry(prGlueP2pInfo, &rRfChannelInfo); - - - kalP2pFuncGetChannelType(prChnlReqInfo->eChnlSco, - &eChnlType); - - - cfg80211_remain_on_channel_expired(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prChnlReqInfo->u8Cookie, - prIEEE80211ChnlStruct, - eChnlType, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateChannelExpired */ - -VOID -kalP2PIndicateScanDone ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if (prGlueInfo == NULL) { - - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - if (prGlueP2pInfo->prScanRequest) { - cfg80211_scan_done(prGlueP2pInfo->prScanRequest, - fgIsAbort); - - prGlueP2pInfo->prScanRequest = NULL; - } - - } while (FALSE); - - -} /* kalP2PIndicateScanDone */ - -VOID -kalP2PIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - struct ieee80211_channel *prChannelEntry = (struct ieee80211_channel *)NULL; - struct ieee80211_mgmt *prBcnProbeRspFrame = (struct ieee80211_mgmt *)pucFrameBuf; - struct cfg80211_bss *prCfg80211Bss = (struct cfg80211_bss *)NULL; - - do { - if ((prGlueInfo == NULL) || (pucFrameBuf == NULL) || (prChannelInfo == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prGlueP2pInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prChannelEntry = kalP2pFuncGetChannelEntry(prGlueP2pInfo, prChannelInfo); - - if (prChannelEntry == NULL) { - DBGLOG(P2P, TRACE, ("Unknown channel info\n")); - break; - } - - - //rChannelInfo.center_freq = nicChannelNum2Freq((UINT_32)prChannelInfo->ucChannelNum) / 1000; - - prCfg80211Bss = cfg80211_inform_bss_frame(prGlueP2pInfo->wdev.wiphy, //struct wiphy * wiphy, - prChannelEntry, - prBcnProbeRspFrame, - u4BufLen, - i4SignalStrength, - GFP_KERNEL); - - - /* Return this structure. */ - cfg80211_put_bss(prCfg80211Bss); - - } while (FALSE); - - return; - -} /* kalP2PIndicateBssInfo */ - -VOID -kalP2PIndicateMgmtTxStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - - do { - if ((prGlueInfo == NULL) || - (pucFrameBuf == NULL) || - (u4FrameLen == 0)) { - DBGLOG(P2P, TRACE, ("Unexpected pointer PARAM. 0x%lx, 0x%lx, %ld.", prGlueInfo, pucFrameBuf, u4FrameLen)); - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - cfg80211_mgmt_tx_status(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u8Cookie, - pucFrameBuf, - u4FrameLen, - fgIsAck, - GFP_KERNEL); - - } while (FALSE); - -} /* kalP2PIndicateMgmtTxStatus */ - -VOID -kalP2PIndicateRxMgmtFrame ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ) -{ -#define DBG_P2P_MGMT_FRAME_INDICATION 0 - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - INT_32 i4Freq = 0; - UINT_8 ucChnlNum = 0; -#if DBG_P2P_MGMT_FRAME_INDICATION - P_WLAN_MAC_HEADER_T prWlanHeader = (P_WLAN_MAC_HEADER_T)NULL; -#endif - - - do { - if ((prGlueInfo == NULL) || (prSwRfb == NULL)) { - ASSERT(FALSE); - break; - } - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - ucChnlNum = prSwRfb->prHifRxHdr->ucHwChannelNum; - -#if DBG_P2P_MGMT_FRAME_INDICATION - - prWlanHeader = (P_WLAN_MAC_HEADER_T)prSwRfb->pvHeader; - - switch (prWlanHeader->u2FrameCtrl) { - case MAC_FRAME_PROBE_REQ: - DBGLOG(P2P, TRACE, ("RX Probe Req at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_PROBE_RSP: - DBGLOG(P2P, TRACE, ("RX Probe Rsp at channel %d ", ucChnlNum)); - break; - case MAC_FRAME_ACTION: - DBGLOG(P2P, TRACE, ("RX Action frame at channel %d ", ucChnlNum)); - break; - default: - DBGLOG(P2P, TRACE, ("RX Packet:%d at channel %d ", prWlanHeader->u2FrameCtrl, ucChnlNum)); - break; - } - - DBGLOG(P2P, TRACE, ("from: "MACSTR"\n", MAC2STR(prWlanHeader->aucAddr2))); -#endif - i4Freq = nicChannelNum2Freq(ucChnlNum) / 1000; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - RCPI_TO_dBm(prSwRfb->prHifRxHdr->ucRcpi), - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_KERNEL); -#else - cfg80211_rx_mgmt(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - i4Freq, - prSwRfb->pvHeader, - prSwRfb->u2PacketLen, - GFP_KERNEL); -#endif - - } while (FALSE); - -} /* kalP2PIndicateRxMgmtFrame */ - -VOID -kalP2PGCIndicateConnectionStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ) -{ - P_GL_P2P_INFO_T prGlueP2pInfo = (P_GL_P2P_INFO_T)NULL; - UINT_8 ucChannelNum; - struct ieee80211_channel *prChannel = NULL; - struct cfg80211_bss *bss; - - P_BSS_DESC_T prBssDesc = NULL; - - do { - if (prGlueInfo == NULL) { - ASSERT(FALSE); - break; - } - - - prGlueP2pInfo = prGlueInfo->prP2PInfo; - - if (prP2pConnInfo) { - /* retrieve channel */ - ucChannelNum = wlanGetChannelNumberByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - - if(ucChannelNum <= 14) { - prChannel = ieee80211_get_channel(prGlueInfo->prP2PInfo->wdev.wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ)); - } - else { - prChannel = ieee80211_get_channel(prGlueInfo->prP2PInfo->wdev.wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ)); - } - - /* ensure BSS exists */ - bss = cfg80211_get_bss(prGlueInfo->prP2PInfo->wdev.wiphy, prChannel, prP2pConnInfo->aucBssid, - prP2pConnInfo->rSsidStruct.aucSsid, prP2pConnInfo->rSsidStruct.ucSsidLen, - WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); - - if(bss == NULL) { - /* create BSS on-the-fly */ - - prBssDesc = wlanGetTargetBssDescByNetwork(prGlueInfo->prAdapter, NETWORK_TYPE_P2P_INDEX); - - if(prBssDesc != NULL) { - bss = cfg80211_inform_bss(prGlueInfo->prP2PInfo->wdev.wiphy, - prChannel, - prP2pConnInfo->aucBssid, - 0, /* TSF */ - WLAN_CAPABILITY_ESS, - prBssDesc->u2BeaconInterval, /* beacon interval */ - prBssDesc->aucIEBuf, /* IE */ - prBssDesc->u2IELength, /* IE Length */ - RCPI_TO_dBm(prBssDesc->ucRCPI) * 100, /* MBM */ - GFP_KERNEL); - } - - } - cfg80211_connect_result(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - prP2pConnInfo->aucBssid, - prP2pConnInfo->aucIEBuf, - prP2pConnInfo->u4BufLength, - pucRxIEBuf, - u2RxIELen, - u2StatusReason, - GFP_KERNEL); //gfp_t gfp /* allocation flags */ - prP2pConnInfo->fgIsConnRequest = FALSE; -#ifdef CFG_DUAL_ANTENNA - wifi2bwcs_connection_event_ind_handler(prGlueInfo, WIFI_EVENT_P2P_GC_CONN_NEW); -#endif - } - else { - /* Disconnect, what if u2StatusReason == 0? */ - cfg80211_disconnected(prGlueP2pInfo->prDevHandler, //struct net_device * dev, - u2StatusReason, - pucRxIEBuf, - u2RxIELen, - GFP_KERNEL); -#ifdef CFG_DUAL_ANTENNA - wifi2bwcs_connection_event_ind_handler(prGlueInfo, WIFI_EVENT_P2P_GC_CONN_DEL); -#endif - } - - - - } while (FALSE); - - -} /* kalP2PGCIndicateConnectionStatus */ - - -VOID -kalP2PGOStationUpdate ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ) -{ - P_GL_P2P_INFO_T prP2pGlueInfo = (P_GL_P2P_INFO_T)NULL; - struct station_info rStationInfo; - - do { - if ((prGlueInfo == NULL) || (prCliStaRec == NULL)) { - break; - } - - - prP2pGlueInfo = prGlueInfo->prP2PInfo; - - if (fgIsNew) { - rStationInfo.filled = STATION_INFO_ASSOC_REQ_IES; - rStationInfo.generation = ++prP2pGlueInfo->i4Generation; - - rStationInfo.assoc_req_ies = prCliStaRec->pucAssocReqIe; - rStationInfo.assoc_req_ies_len = prCliStaRec->u2AssocReqIeLen; -// rStationInfo.filled |= STATION_INFO_ASSOC_REQ_IES; - - cfg80211_new_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - &rStationInfo, - GFP_KERNEL); - } - else { - ++prP2pGlueInfo->i4Generation; - - cfg80211_del_sta(prGlueInfo->prP2PInfo->prDevHandler, //struct net_device * dev, - prCliStaRec->aucMacAddr, - GFP_KERNEL); - } - - - } while (FALSE); - - return; - -} /* kalP2PGOStationUpdate */ - - - - -BOOLEAN -kalP2pFuncGetChannelType( - IN ENUM_CHNL_EXT_T rChnlSco, - OUT enum nl80211_channel_type *channel_type - ) -{ - BOOLEAN fgIsValid = FALSE; - - do { - if (channel_type) { - - switch (rChnlSco) { - case CHNL_EXT_SCN: - *channel_type = NL80211_CHAN_NO_HT; - break; - case CHNL_EXT_SCA: - *channel_type = NL80211_CHAN_HT40MINUS; - break; - case CHNL_EXT_SCB: - *channel_type = NL80211_CHAN_HT40PLUS; - break; - default: - ASSERT(FALSE); - *channel_type = NL80211_CHAN_NO_HT; - break; - } - - } - - fgIsValid = TRUE; - } while (FALSE); - - return fgIsValid; -} /* kalP2pFuncGetChannelType */ - - - - -struct ieee80211_channel * -kalP2pFuncGetChannelEntry ( - IN P_GL_P2P_INFO_T prP2pInfo, - IN P_RF_CHANNEL_INFO_T prChannelInfo - ) -{ - struct ieee80211_channel *prTargetChannelEntry = (struct ieee80211_channel *)NULL; - UINT_32 u4TblSize = 0, u4Idx = 0; - - do { - if ((prP2pInfo == NULL) || (prChannelInfo == NULL)) { - break; - } - - - switch (prChannelInfo->eBand) { - case BAND_2G4: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_2GHZ]->n_channels; - break; - case BAND_5G: - prTargetChannelEntry = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->channels; - u4TblSize = prP2pInfo->wdev.wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels; - break; - default: - break; - } - - - if (prTargetChannelEntry == NULL) { - break; - } - - - - for (u4Idx = 0; u4Idx < u4TblSize; u4Idx++, prTargetChannelEntry++) { - if (prTargetChannelEntry->hw_value == prChannelInfo->ucChannelNum) { - break; - } - - } - - - if (u4Idx == u4TblSize) { - prTargetChannelEntry = NULL; - break; - } - - - } while (FALSE); - - return prTargetChannelEntry; -} /* kalP2pFuncGetChannelEntry */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to set the block list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsValid = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(fgIsblock) { - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)) { - if(UNEQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - if(EQUAL_MAC_ADDR (&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - } - } - else { - for(i = 0; i < 8; i++) { - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - COPY_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), aucNullAddr); - fgIsValid = FALSE; - return fgIsValid; - } - } - } - - return fgIsValid; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to compare the black list of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ) -{ - UINT_8 aucNullAddr[] = NULL_MAC_ADDR; - BOOLEAN fgIsExsit = FALSE; - UINT_32 i; - - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - for(i = 0; i < 8; i++) { - if(UNEQUAL_MAC_ADDR(rbssid, aucNullAddr)){ - if(EQUAL_MAC_ADDR(&(prGlueInfo->prP2PInfo->aucblackMACList[i]), rbssid)) { - fgIsExsit = TRUE; - return fgIsExsit; - } - } - } - - return fgIsExsit; - -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(u4MaxClient == 0 || prGlueInfo->prP2PInfo->ucMaxClients >= P2P_MAXIMUM_CLIENT_COUNT) - prGlueInfo->prP2PInfo->ucMaxClients = P2P_MAXIMUM_CLIENT_COUNT; - else - prGlueInfo->prP2PInfo->ucMaxClients = u4MaxClient; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief to return the max clients of Hotspot -* -* \param[in] -* prGlueInfo -* -* \return -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ) -{ - ASSERT(prGlueInfo); - ASSERT(prGlueInfo->prP2PInfo); - - if(prGlueInfo->prP2PInfo->ucMaxClients) { - if((UINT_8)u4NumClient > prGlueInfo->prP2PInfo->ucMaxClients) - return TRUE; - else - return FALSE; - } - - return FALSE; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_proc.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_proc.c deleted file mode 100755 index 73968e27e224..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_proc.c +++ /dev/null @@ -1,859 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/gl_proc.c#1 $ -*/ - -/*! \file "gl_proc.c" - \brief This file defines the interface which can interact with users in /proc fs. - - Detail description. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_proc.c $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support -** \main\maintrunk.MT5921\19 2008-09-02 21:08:37 GMT mtk01461 -** Fix the compile error of SPRINTF() -** \main\maintrunk.MT5921\18 2008-08-10 18:48:28 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\17 2008-08-04 16:52:01 GMT mtk01461 -** Add proc dbg print message of DOMAIN_INDEX level -** \main\maintrunk.MT5921\16 2008-07-10 00:45:16 GMT mtk01461 -** Remove the check of MCR offset, we may use the MCR address which is not align to DW boundary or proprietary usage. -** \main\maintrunk.MT5921\15 2008-06-03 20:49:44 GMT mtk01461 -** \main\maintrunk.MT5921\14 2008-06-02 22:56:00 GMT mtk01461 -** Rename some functions for linux proc -** \main\maintrunk.MT5921\13 2008-06-02 20:23:18 GMT mtk01461 -** Revise PROC mcr read / write for supporting TELNET -** \main\maintrunk.MT5921\12 2008-03-28 10:40:25 GMT mtk01461 -** Remove temporary set desired rate in linux proc -** \main\maintrunk.MT5921\11 2008-01-07 15:07:29 GMT mtk01461 -** Add User Update Desired Rate Set for QA in Linux -** \main\maintrunk.MT5921\10 2007-12-11 00:11:14 GMT mtk01461 -** Fix SPIN_LOCK protection -** \main\maintrunk.MT5921\9 2007-12-04 18:07:57 GMT mtk01461 -** Add additional debug category to proc -** \main\maintrunk.MT5921\8 2007-11-02 01:03:23 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** \main\maintrunk.MT5921\7 2007-10-25 18:08:14 GMT mtk01461 -** Add VOIP SCAN Support & Refine Roaming -** Revision 1.3 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.2 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_kal.h" - -#include "wlan_lib.h" -#include "debug.h" - - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define PROC_MCR_ACCESS "mcr" -#define PROC_DRV_STATUS "status" -#define PROC_RX_STATISTICS "rx_statistics" -#define PROC_TX_STATISTICS "tx_statistics" -#define PROC_DBG_LEVEL "dbg_level" - -#define PROC_MCR_ACCESS_MAX_USER_INPUT_LEN 20 -#define PROC_RX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_TX_STATISTICS_MAX_USER_INPUT_LEN 10 -#define PROC_DBG_LEVEL_MAX_USER_INPUT_LEN 20 -#define PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN 30 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 u4McrOffset = 0; - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading MCR register to User Space, the offset of -* the MCR is specified in u4McrOffset. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - char *p = page; - UINT_32 u4Count; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - rMcrInfo.u4McrOffset = u4McrOffset; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryMcrRead, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - - - SPRINTF(p, ("MCR (0x%08lxh): 0x%08lx\n", - rMcrInfo.u4McrOffset, rMcrInfo.u4McrData)); - - u4Count = (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procMCRRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for writing MCR register to HW or update u4McrOffset -* for reading MCR later. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procMCRWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo; - char acBuf[PROC_MCR_ACCESS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - int i4CopySize; - PARAM_CUSTOM_MCR_RW_STRUC_T rMcrInfo; - UINT_32 u4BufLen; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - - ASSERT(data); - - i4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - if (copy_from_user(acBuf, buffer, i4CopySize)) { - return 0; - } - acBuf[i4CopySize] = '\0'; - - switch (sscanf(acBuf, "0x%lx 0x%lx", - &rMcrInfo.u4McrOffset, &rMcrInfo.u4McrData)) { - case 2: - /* NOTE: Sometimes we want to test if bus will still be ok, after accessing - * the MCR which is not align to DW boundary. - */ - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv((struct net_device *)data)); - - u4McrOffset = rMcrInfo.u4McrOffset; - - //printk("Write 0x%lx to MCR 0x%04lx\n", - //rMcrInfo.u4McrOffset, rMcrInfo.u4McrData); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetMcrWrite, - (PVOID)&rMcrInfo, - sizeof(rMcrInfo), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - } - break; - - case 1: - //if (IS_ALIGN_4(rMcrInfo.u4McrOffset)) - { - u4McrOffset = rMcrInfo.u4McrOffset; - } - break; - - default: - break; - } - - return count; - -} /* end of procMCRWrite() */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver Status to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDrvStatusRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("GLUE LAYER STATUS:")); - SPRINTF(p, ("\n==================")); - - SPRINTF(p, ("\n* Number of Pending Frames: %ld\n", - prGlueInfo->u4TxPendingFrameNum)); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryDrvStatusForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procDrvStatusRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver RX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("RX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryRxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procRxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver RX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procRxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetRxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procRxStatisticsWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reading Driver TX Statistic Counters to User Space. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char *p = page; - UINT_32 u4Count; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - - SPRINTF(p, ("TX STATISTICS (Write 1 to clear):")); - SPRINTF(p, ("\n=================================\n")); - - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidQueryTxStatisticsForLinuxProc(prGlueInfo->prAdapter, p, &u4Count); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - u4Count += (UINT_32)(p - page); - - *eof = 1; - - return (int)u4Count; - -} /* end of procTxStatisticsRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for reset Driver TX Statistic Counters. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procTxStatisticsWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - P_GLUE_INFO_T prGlueInfo = ((struct net_device *)data)->priv; - char acBuf[PROC_RX_STATISTICS_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4ClearCounter; - - GLUE_SPIN_LOCK_DECLARATION(); - - - ASSERT(data); - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "%ld", &u4ClearCounter) == 1) { - if (u4ClearCounter == 1) { - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - - wlanoidSetTxStatisticsForLinuxProc(prGlueInfo->prAdapter); - - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_FSM); - } - } - - return count; - -} /* end of procTxStatisticsWrite() */ -#endif - - -#if DBG -static UINT_8 aucDbModuleName[][PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN] = { - "DBG_INIT_IDX", - "DBG_HAL_IDX", - "DBG_INTR_IDX", - "DBG_REQ_IDX", - "DBG_TX_IDX", - "DBG_RX_IDX", - "DBG_RFTEST_IDX", - "DBG_EMU_IDX", - "DBG_SW1_IDX", - "DBG_SW2_IDX", - "DBG_SW3_IDX", - "DBG_SW4_IDX", - "DBG_HEM_IDX", - "DBG_AIS_IDX", - "DBG_RLM_IDX", - "DBG_MEM_IDX", - "DBG_CNM_IDX", - "DBG_RSN_IDX", - "DBG_BSS_IDX", - "DBG_SCN_IDX", - "DBG_SAA_IDX", - "DBG_AAA_IDX", - "DBG_P2P_IDX", - "DBG_QM_IDX", - "DBG_SEC_IDX", - "DBG_BOW_IDX" - }; - -extern UINT_8 aucDebugModule[]; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for displaying current Debug Level. -* -* \param[in] page Buffer provided by kernel. -* \param[in out] start Start Address to read(3 methods). -* \param[in] off Offset. -* \param[in] count Allowable number to read. -* \param[out] eof End of File indication. -* \param[in] data Pointer to the private data structure. -* -* \return number of characters print to the buffer from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelRead ( - char *page, - char **start, - off_t off, - int count, - int *eof, - void *data - ) -{ - char *p = page; - int i; - - - - // Kevin: Apply PROC read method 1. - if (off != 0) { - return 0; // To indicate end of file. - } - - for (i = 0; i < (sizeof(aucDbModuleName)/PROC_DBG_LEVEL_MAX_DISPLAY_STR_LEN); i++) { - SPRINTF(p, ("%c %-15s(0x%02x): %02x\n", - ((i == u4DebugModule) ? '*' : ' '), - &aucDbModuleName[i][0], - i, - aucDebugModule[i])); - } - - *eof = 1; - return (int)(p - page); -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The PROC function for adjusting Debug Level to turn on/off debugging message. -* -* \param[in] file pointer to file. -* \param[in] buffer Buffer from user space. -* \param[in] count Number of characters to write -* \param[in] data Pointer to the private data structure. -* -* \return number of characters write from User Space. -*/ -/*----------------------------------------------------------------------------*/ -static int -procDbgLevelWrite ( - struct file *file, - const char *buffer, - unsigned long count, - void *data - ) -{ - char acBuf[PROC_DBG_LEVEL_MAX_USER_INPUT_LEN + 1]; // + 1 for "\0" - UINT_32 u4CopySize; - UINT_32 u4NewDbgModule, u4NewDbgLevel; - - - u4CopySize = (count < (sizeof(acBuf) - 1)) ? count : (sizeof(acBuf) - 1); - copy_from_user(acBuf, buffer, u4CopySize); - acBuf[u4CopySize] = '\0'; - - if (sscanf(acBuf, "0x%lx 0x%lx", &u4NewDbgModule, &u4NewDbgLevel) == 2) { - if (u4NewDbgModule < DBG_MODULE_NUM) { - u4DebugModule = u4NewDbgModule; - u4NewDbgLevel &= DBG_CLASS_MASK; - aucDebugModule[u4DebugModule] = (UINT_8)u4NewDbgLevel; - } - } - - return count; -} -#endif /* DBG */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function create a PROC fs in linux /proc/net subdirectory. -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo; - struct proc_dir_entry *prEntry; - - - ASSERT(prDev); - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, INFO, ("init proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (!prGlueInfo) { - DBGLOG(INIT, WARN, ("The OS context is NULL\n")); - return -ENOENT; - } - - - /* - /proc/net/wlan0 - |-- mcr (PROC_MCR_ACCESS) - |-- status (PROC_DRV_STATUS) - |-- rx_statistics (PROC_RX_STATISTICS) - |-- tx_statistics (PROC_TX_STATISTICS) - |-- dbg_level (PROC_DBG_LEVEL) - |-- (end) - */ - - /* - * Directory: Root (/proc/net/wlan0) - */ - - prGlueInfo->pProcRoot = proc_mkdir(pucDevName, init_net.proc_net); - if (prGlueInfo->pProcRoot == NULL) { - return -ENOENT; - } - - /* File Root/mcr (RW) */ - prEntry = create_proc_entry(PROC_MCR_ACCESS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procMCRRead; - prEntry->write_proc = procMCRWrite; - prEntry->data = (void *)prDev; - } - -#if 0 - /* File Root/status (RW) */ - prEntry = create_proc_read_entry(PROC_DRV_STATUS, 0, prGlueInfo->pProcRoot, - procDrvStatusRead, prDev); - - /* File Root/rx_statistics (RW) */ - prEntry = create_proc_entry(PROC_RX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procRxStatisticsRead; - prEntry->write_proc = procRxStatisticsWrite; - prEntry->data = (void *)prDev; - } - - /* File Root/tx_statistics (RW) */ - prEntry = create_proc_entry(PROC_TX_STATISTICS, 0, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procTxStatisticsRead; - prEntry->write_proc = procTxStatisticsWrite; - prEntry->data = (void *)prDev; - } - -#if DBG - /* File Root/dbg_level (RW) */ - prEntry = create_proc_entry(PROC_DBG_LEVEL, 0644, prGlueInfo->pProcRoot); - if (prEntry) { - prEntry->read_proc = procDbgLevelRead; - prEntry->write_proc = procDbgLevelWrite; - } -#endif /* DBG */ -#endif - return 0; - -} /* end of procInitProcfs() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clean up a PROC fs created by procInitProcfs(). -* -* \param[in] prDev Pointer to the struct net_device. -* \param[in] pucDevName Pointer to the name of net_device. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - - ASSERT(prDev); - - if (!prDev) { - return -ENOENT; - } - - if (init_net.proc_net == (struct proc_dir_entry *)NULL) { - DBGLOG(INIT, WARN, ("remove proc fs fail: proc_net == NULL\n")); - return -ENOENT; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (!prGlueInfo->pProcRoot) { - DBGLOG(INIT, WARN, ("The procfs root is NULL\n")); - return -ENOENT; - } -#if 0 -#if DBG - remove_proc_entry(PROC_DBG_LEVEL, prGlueInfo->pProcRoot); -#endif /* DBG */ - remove_proc_entry(PROC_TX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_RX_STATISTICS, prGlueInfo->pProcRoot); - remove_proc_entry(PROC_DRV_STATUS, prGlueInfo->pProcRoot); -#endif - remove_proc_entry(PROC_MCR_ACCESS, prGlueInfo->pProcRoot); - - /* remove root directory (proc/net/wlan0) */ - remove_proc_entry(pucDevName, init_net.proc_net); - - return 0; - -} /* end of procRemoveProcfs() */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_rst.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_rst.c deleted file mode 100755 index 40a57480bc34..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_rst.c +++ /dev/null @@ -1,514 +0,0 @@ -/* -** $Id: @(#) gl_rst.c@@ -*/ - -/*! \file gl_rst.c - \brief Main routines for supporintg MT6620 whole-chip reset mechanism - - This file contains the support routines of Linux driver for MediaTek Inc. 802.11 - Wireless LAN Adapters. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_rst.c $ - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 04 22 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * skip power-off handshaking when RESET indication is received. - * - * 04 14 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * 1. add code to put whole-chip resetting trigger when abnormal firmware assertion is detected - * 2. add dummy function for both Win32 and Linux part. - * - * 03 30 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * use netlink unicast instead of broadcast - * -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "debug.h" -#include "wlan_lib.h" -#include "gl_wext.h" -#include "precomp.h" -#include -#include -#include - -#if CFG_CHIP_RESET_SUPPORT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define MAX_BIND_PROCESS (4) - -#define MTK_WIFI_FAMILY_NAME "MTK_WIFI" -#define MTK_WIFI_RESET_START_NAME "RESET_START" -#define MTK_WIFI_RESET_END_NAME "RESET_END" -#define MTK_WIFI_RESET_TEST_NAME "GENETLINK_START" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -enum { - __MTK_WIFI_ATTR_INVALID, - MTK_WIFI_ATTR_MSG, - __MTK_WIFI_ATTR_MAX, -}; -#define MTK_WIFI_ATTR_MAX (__MTK_WIFI_ATTR_MAX - 1) - - -enum { - __MTK_WIFI_COMMAND_INVALID, - MTK_WIFI_COMMAND_BIND, - MTK_WIFI_COMMAND_RESET, - __MTK_WIFI_COMMAND_MAX, -}; -#define MTK_WIFI_COMMAND_MAX (__MTK_WIFI_COMMAND_MAX - 1) - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -BOOLEAN fgIsResetting = FALSE; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_32 mtk_wifi_seqnum = 0; -static int num_bind_process = 0; -static pid_t bind_pid[MAX_BIND_PROCESS]; - - -/* attribute policy */ -static struct nla_policy mtk_wifi_genl_policy[MTK_WIFI_ATTR_MAX + 1] = { - [MTK_WIFI_ATTR_MSG] = { .type = NLA_NUL_STRING }, -}; - -/* family definition */ -static struct genl_family mtk_wifi_gnl_family = { - .id = GENL_ID_GENERATE, - .hdrsize = 0, - .name = MTK_WIFI_FAMILY_NAME, - .version = 1, - .maxattr = MTK_WIFI_ATTR_MAX, -}; - -/* forward declaration */ -static int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ); - -static int mtk_wifi_reset( - struct sk_buff *skb, - struct genl_info *info - ); - -/* operation definition */ -static struct genl_ops mtk_wifi_gnl_ops_bind = { - .cmd = MTK_WIFI_COMMAND_BIND, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_bind, - .dumpit = NULL, -}; - -static struct genl_ops mtk_wifi_gnl_ops_reset = { - .cmd = MTK_WIFI_COMMAND_RESET, - .flags = 0, - .policy = mtk_wifi_genl_policy, - .doit = mtk_wifi_reset, - .dumpit = NULL, -}; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -extern int -mtk_wcn_wmt_msgcb_reg( - ENUM_WMTDRV_TYPE_T eType, - PF_WMT_CB pCb); - -extern int -mtk_wcn_wmt_msgcb_unreg( - ENUM_WMTDRV_TYPE_T eType - ); - -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ); - -static BOOLEAN -glResetSendMessage ( - char *aucMsg, - u8 cmd - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. registering for reset callbacks - * 2. initialize netlink socket - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ) -{ - /* 1. register for reset callback */ - mtk_wcn_wmt_msgcb_reg(WMTDRV_TYPE_WIFI, (PF_WMT_CB)glResetCallback); - - /* 2.1 registration for NETLINK_GENERIC family */ - if(genl_register_family(&mtk_wifi_gnl_family) != 0) { - DBGLOG(INIT, WARN, ("%s(): GE_NELINK family registration fail\n", __func__)); - } - else { - /* 2.2 operation registration */ - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_bind) != 0) { - DBGLOG(INIT, WARN, ("%s(): BIND operation registration fail\n", __func__)); - } - - if(genl_register_ops(&mtk_wifi_gnl_family, &mtk_wifi_gnl_ops_reset) != 0) { - DBGLOG(INIT, WARN, ("%s(): RESET operation registration fail\n", __func__)); - } - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is responsible for - * 1. uninitialize netlink socket - * 2. deregistering for reset callbacks - * - * @param none - * - * @retval none - */ -/*----------------------------------------------------------------------------*/ -VOID -glResetUninit( - VOID - ) -{ - /* 1. release NETLINK_GENERIC family */ - genl_unregister_family(&mtk_wifi_gnl_family); - - /* 2. deregister for reset callback */ - mtk_wcn_wmt_msgcb_unreg(WMTDRV_TYPE_WIFI); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is invoked when there is reset messages indicated - * - * @param eSrcType - * eDstType - * eMsgType - * prMsgBody - * u4MsgLength - * - * @retval - */ -/*----------------------------------------------------------------------------*/ -static void * -glResetCallback ( - ENUM_WMTDRV_TYPE_T eSrcType, - ENUM_WMTDRV_TYPE_T eDstType, - ENUM_WMTMSG_TYPE_T eMsgType, - void * prMsgBody, - unsigned int u4MsgLength - ) -{ - switch(eMsgType) { - case WMTMSG_TYPE_RESET: - if(u4MsgLength == sizeof(ENUM_WMTRSTMSG_TYPE_T)) { - P_ENUM_WMTRSTMSG_TYPE_T prRstMsg = (P_ENUM_WMTRSTMSG_TYPE_T) prMsgBody; - - switch(*prRstMsg) { - case WMTRSTMSG_RESET_START: - fgIsResetting = TRUE; - glResetSendMessage(MTK_WIFI_RESET_START_NAME, MTK_WIFI_COMMAND_RESET); - break; - - case WMTRSTMSG_RESET_END: - glResetSendMessage(MTK_WIFI_RESET_END_NAME, MTK_WIFI_COMMAND_RESET); - fgIsResetting = FALSE; - break; - - default: - break; - } - } - - break; - - default: - break; - } - - return NULL; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine send out message via netlink socket - * - * @param aucMsg - * u4MsgLength - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -glResetSendMessage( - char * aucMsg, - u8 cmd - ) -{ - struct sk_buff *skb = NULL; - void *msg_head = NULL; - int rc = -1; - int i; - - if(num_bind_process == 0) { - /* no listening process */ - return FALSE; - } - - for(i = 0 ; i < num_bind_process ; i++) { - skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); - - if(skb) { - msg_head = genlmsg_put(skb, 0, mtk_wifi_seqnum++, &mtk_wifi_gnl_family, 0, cmd); - - if(msg_head == NULL) { - nlmsg_free(skb); - return FALSE; - } - - rc = nla_put_string(skb, MTK_WIFI_ATTR_MSG, aucMsg); - if(rc != 0) { - nlmsg_free(skb); - return FALSE; - } - - /* finalize the message */ - genlmsg_end(skb, msg_head); - - /* sending message */ - rc = genlmsg_unicast(&init_net, skb, bind_pid[i]); - if(rc != 0) { - return FALSE; - } - } - else { - return FALSE; - } - } - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called to identify PID for process binding - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_bind( - struct sk_buff *skb, - struct genl_info *info - ) -{ - struct nlattr *na; - char * mydata; - - if (info == NULL) { - goto out; - } - - /*for each attribute there is an index in info->attrs which points to a nlattr structure - *in this structure the data is given - */ - - na = info->attrs[MTK_WIFI_ATTR_MSG]; - if (na) { - mydata = (char *)nla_data(na); - - /* no need to parse mydata */ - } - - /* collect PID */ - if(num_bind_process < MAX_BIND_PROCESS) { - bind_pid[num_bind_process] = info->snd_pid; - num_bind_process++; - } - else { - DBGLOG(INIT, WARN, ("%s(): exceeding binding limit %d\n", __func__, MAX_BIND_PROCESS)); - } - -out: - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for reset, shout not happen - * - * @param skb - * info - * - * @retval 0 - * nonzero - */ -/*----------------------------------------------------------------------------*/ -int mtk_wifi_reset( - struct sk_buff *skb, - struct genl_info *info - ) -{ - DBGLOG(INIT, WARN, ("%s(): should not be invoked\n", __func__)); - - return 0; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for generating reset request to WMT - * - * @param None - * - * @retval None - */ -/*----------------------------------------------------------------------------*/ -VOID -glSendResetRequest( - VOID - ) -{ - // WMT thread would trigger whole chip resetting itself - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! - * @brief This routine is called for checking if MT6620 is resetting - * - * @param None - * - * @retval TRUE - * FALSE - */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsResetting( - VOID - ) -{ - return fgIsResetting; -} - - -#endif // CFG_CHIP_RESET_SUPPORT diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_wext.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_wext.c deleted file mode 100755 index 90e28393d5e4..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_wext.c +++ /dev/null @@ -1,4579 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/gl_wext.c#1 $ -*/ - -/*! \file gl_wext.c - \brief ioctl() (mostly Linux Wireless Extensions) routines for STA driver. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_wext.c $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 23 2011 tsaiyuan.hsu - * [WCXRP00000979] [MT6620 Wi-Fi][DRV]] stop attempting to connect to config AP after D3 state - * avoid entering D3 state after deep sleep. - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 27 2011 wh.su - * [WCXRP00000877] [MT6620 Wi-Fi][Driver] Remove the netif_carry_ok check for avoid the wpa_supplicant fail to query the ap address - * Remove the netif check while query bssid and ssid - * - * 07 26 2011 chinglan.wang - * NULL - * [MT6620][WiFi Driver] Do not include the WSC IE in the association info packet when not do the wps connection.. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 05 17 2011 eddie.chen - * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning - * Initilize the vairlabes. - * - * 05 11 2011 jeffrey.chang - * [WCXRP00000718] [MT6620 Wi-Fi] modify the behavior of setting tx power - * modify set_tx_pow ioctl - * - * 03 29 2011 terry.wu - * [WCXRP00000610] [MT 6620 Wi-Fi][Driver] Fix klocwork waring - * [MT6620 Wi-Fi][Driver] Fix klocwork warning. Add Null pointer check on wext_get_essid. Limit the upper bound of essid storage array. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 02 21 2011 wh.su - * [WCXRP00000483] [MT6620 Wi-Fi][Driver] Check the kalIoctl return value before doing the memory copy at linux get essid - * fixed the potential error to do a larget memory copy while wlanoid get essid not actually running. - * - * 02 08 2011 george.huang - * [WCXRP00000422] [MT6620 Wi-Fi][Driver] support query power mode OID handler - * Support querying power mode OID. - * - * 01 29 2011 wh.su - * [WCXRP00000408] [MT6620 Wi-Fi][Driver] Not doing memory alloc while ioctl set ie with length 0 - * not doing mem alloc. while set ie length already 0 - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Remove debug text. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous types - * to ease slab system pressure - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Allow change PS profile function (throught wext_set_power()). - * - * 12 14 2010 jeffrey.chang - * [WCXRP00000262] [MT6620 Wi-Fi][Driver] modify the scan request ioctl to handle hidden SSID - * handle hidden SSID - * - * 12 13 2010 chinglan.wang - * NULL - * Add WPS 1.0 feature flag to enable the WPS 1.0 function. - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * Fix compiling error - * - * 12 07 2010 cm.chang - * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant - * 1. Country code is from NVRAM or supplicant - * 2. Change band definition in CMD/EVENT. - * - * 11 30 2010 cp.wu - * [WCXRP00000213] [MT6620 Wi-Fi][Driver] Implement scanning with specified SSID for wpa_supplicant with ap_scan=1 - * . - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000121] [MT6620 Wi-Fi][Driver] Temporarily disable set power mode ioctl which may cause 6620 to enter power saving - * Temporarily disable set power mode ioctl which may cause MT6620 to enter power saving - * - * 10 18 2010 jeffrey.chang - * [WCXRP00000116] [MT6620 Wi-Fi][Driver] Refine the set_scan ioctl to resolve the Android UI hanging issue - * refine the scan ioctl to prevent hanging of Android UI - * - * 10 01 2010 wh.su - * [WCXRP00000067] [MT6620 Wi-Fi][Driver] Support the android+ WAPI function - * add the scan result with wapi ie. - * - * 09 30 2010 wh.su - * [WCXRP00000072] [MT6620 Wi-Fi][Driver] Fix TKIP Counter Measure EAPoL callback register issue - * fixed the wapi ie assigned issue. - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 09 2010 cp.wu - * NULL - * add WPS/WPA/RSN IE for Wi-Fi Direct scanning result. - * - * 09 06 2010 cp.wu - * NULL - * Androi/Linux: return current operating channel information - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 02 2010 jeffrey.chang - * NULL - * enable remove key ioctl - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) enable encyption ioctls - * 2) temporarily disable remove keys ioctl to prevent TX1 busy - * - * 07 28 2010 jeffrey.chang - * NULL - * 1) remove unused spinlocks - * 2) enable encyption ioctls - * 3) fix scan ioctl which may cause supplicant to hang - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * for linux driver migration - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove unused macro and debug messages - * - * 05 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add dissassoication support for wpa supplicant - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Add ioctl of power management - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) prGlueInfo->pvInformationBuffer and prGlueInfo->u4InformationBufferLength are no longer used - * * 2) fix ioctl - * - * 04 12 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug messages for pre-release - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * are done in adapter layer. - * - * 04 02 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl type - * - * 04 01 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * enable pmksa cache operation - * - * 03 31 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix ioctl which may cause cmdinfo memory leak - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\38 2009-10-08 10:33:22 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\37 2009-09-29 16:49:48 GMT mtk01090 -** Remove unused variables -** \main\maintrunk.MT5921\36 2009-09-28 20:19:11 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\35 2009-09-03 11:42:30 GMT mtk01088 -** adding the wapi ioctl support -** \main\maintrunk.MT5921\34 2009-08-18 22:56:50 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\33 2009-05-14 22:43:47 GMT mtk01089 -** fix compiling warning -** \main\maintrunk.MT5921\32 2009-05-07 22:26:18 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\31 2009-02-07 15:11:14 GMT mtk01088 -** fixed the compiling error -** \main\maintrunk.MT5921\30 2009-02-07 14:46:51 GMT mtk01088 -** add the privacy setting from linux supplicant ap selection -** \main\maintrunk.MT5921\29 2008-11-19 15:18:50 GMT mtk01088 -** fixed the compling error -** \main\maintrunk.MT5921\28 2008-11-19 11:56:18 GMT mtk01088 -** rename some variable with pre-fix to avoid the misunderstanding -** \main\maintrunk.MT5921\27 2008-08-29 16:59:43 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\26 2008-08-29 14:55:53 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\25 2008-06-02 11:15:19 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\24 2008-05-30 15:13:12 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\23 2008-03-28 10:40:28 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\22 2008-03-18 10:31:24 GMT mtk01088 -** add pmkid ioctl and indicate -** \main\maintrunk.MT5921\21 2008-03-11 15:21:24 GMT mtk01461 -** \main\maintrunk.MT5921\20 2008-03-11 14:50:55 GMT mtk01461 -** Refine WPS related priv ioctl for unified interface -** -** \main\maintrunk.MT5921\19 2008-03-06 16:30:41 GMT mtk01088 -** move the configuration code from set essid function, -** remove the non-used code -** \main\maintrunk.MT5921\18 2008-02-21 15:47:09 GMT mtk01461 -** Fix CR[489] -** \main\maintrunk.MT5921\17 2008-02-12 23:38:31 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\16 2008-01-24 12:07:34 GMT mtk01461 -** \main\maintrunk.MT5921\15 2008-01-24 12:00:10 GMT mtk01461 -** Modify the wext_essid for set up correct information for IBSS, and fix the wrong input ptr for prAdapter -** \main\maintrunk.MT5921\14 2007-12-06 09:30:12 GMT mtk01425 -** 1. Branch Test -** \main\maintrunk.MT5921\13 2007-12-04 18:07:59 GMT mtk01461 -** fix typo -** \main\maintrunk.MT5921\12 2007-11-30 17:10:21 GMT mtk01425 -** 1. Fix compiling erros -** -** \main\maintrunk.MT5921\11 2007-11-27 10:43:22 GMT mtk01425 -** 1. Add WMM-PS setting -** \main\maintrunk.MT5921\10 2007-11-06 20:33:32 GMT mtk01088 -** fixed the compiler error -** \main\maintrunk.MT5921\9 2007-11-06 19:33:15 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\8 2007-10-30 12:00:44 GMT MTK01425 -** 1. Update wlanQueryInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#include "config.h" -#include "wlan_oid.h" - -#include "gl_wext.h" -#include "gl_wext_priv.h" - -#include "precomp.h" - -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif - -/* compatibility to wireless extensions */ -#ifdef WIRELESS_EXT - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -const long channel_freq[] = { - 2412, 2417, 2422, 2427, 2432, 2437, 2442, - 2447, 2452, 2457, 2462, 2467, 2472, 2484 -}; - -#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \ - switch (ch) \ - { \ - case 1: khz = 2412000; break; \ - case 2: khz = 2417000; break; \ - case 3: khz = 2422000; break; \ - case 4: khz = 2427000; break; \ - case 5: khz = 2432000; break; \ - case 6: khz = 2437000; break; \ - case 7: khz = 2442000; break; \ - case 8: khz = 2447000; break; \ - case 9: khz = 2452000; break; \ - case 10: khz = 2457000; break; \ - case 11: khz = 2462000; break; \ - case 12: khz = 2467000; break; \ - case 13: khz = 2472000; break; \ - case 14: khz = 2484000; break; \ - case 36: /* UNII */ khz = 5180000; break; \ - case 40: /* UNII */ khz = 5200000; break; \ - case 44: /* UNII */ khz = 5220000; break; \ - case 48: /* UNII */ khz = 5240000; break; \ - case 52: /* UNII */ khz = 5260000; break; \ - case 56: /* UNII */ khz = 5280000; break; \ - case 60: /* UNII */ khz = 5300000; break; \ - case 64: /* UNII */ khz = 5320000; break; \ - case 149: /* UNII */ khz = 5745000; break; \ - case 153: /* UNII */ khz = 5765000; break; \ - case 157: /* UNII */ khz = 5785000; break; \ - case 161: /* UNII */ khz = 5805000; break; \ - case 165: /* UNII */ khz = 5825000; break; \ - case 100: /* HiperLAN2 */ khz = 5500000; break; \ - case 104: /* HiperLAN2 */ khz = 5520000; break; \ - case 108: /* HiperLAN2 */ khz = 5540000; break; \ - case 112: /* HiperLAN2 */ khz = 5560000; break; \ - case 116: /* HiperLAN2 */ khz = 5580000; break; \ - case 120: /* HiperLAN2 */ khz = 5600000; break; \ - case 124: /* HiperLAN2 */ khz = 5620000; break; \ - case 128: /* HiperLAN2 */ khz = 5640000; break; \ - case 132: /* HiperLAN2 */ khz = 5660000; break; \ - case 136: /* HiperLAN2 */ khz = 5680000; break; \ - case 140: /* HiperLAN2 */ khz = 5700000; break; \ - case 34: /* Japan MMAC */ khz = 5170000; break; \ - case 38: /* Japan MMAC */ khz = 5190000; break; \ - case 42: /* Japan MMAC */ khz = 5210000; break; \ - case 46: /* Japan MMAC */ khz = 5230000; break; \ - case 184: /* Japan */ khz = 4920000; break; \ - case 188: /* Japan */ khz = 4940000; break; \ - case 192: /* Japan */ khz = 4960000; break; \ - case 196: /* Japan */ khz = 4980000; break; \ - case 208: /* Japan, means J08 */ khz = 5040000; break; \ - case 212: /* Japan, means J12 */ khz = 5060000; break; \ - case 216: /* Japan, means J16 */ khz = 5080000; break; \ - default: khz = 2412000; break; \ - } \ - } - - -#define NUM_CHANNELS (sizeof(channel_freq) / sizeof(channel_freq[0])) - -#define MAX_SSID_LEN 32 - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -/* NOTE: name in iwpriv_args only have 16 bytes */ -static const struct iw_priv_args rIwPrivTable[] = { - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, ""}, - {IOCTL_SET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, ""}, - - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - {IOCTL_GET_INT, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ""}, - - {IOCTL_SET_INTS, IW_PRIV_TYPE_INT | 4, 0, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_INT | 50, ""}, - {IOCTL_GET_INT, 0, IW_PRIV_TYPE_CHAR | 16, ""}, - - /* added for set_oid and get_oid */ - {IOCTL_SET_STRUCT, 256, 0, ""}, - {IOCTL_GET_STRUCT, 0, 256, ""}, - - /* sub-ioctl definitions */ -#if 0 - {PRIV_CMD_REG_DOMAIN, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_reg_domain" }, - {PRIV_CMD_REG_DOMAIN, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_reg_domain" }, -#endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - {PRIV_CMD_CSUM_OFFLOAD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_tcp_csum" }, -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - {PRIV_CMD_POWER_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_power_mode" }, - {PRIV_CMD_POWER_MODE, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_power_mode" }, - - {PRIV_CMD_WMM_PS, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "set_wmm_ps" }, - - {PRIV_CMD_TEST_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_test_mode" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_test_cmd" }, - {PRIV_CMD_TEST_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_test_result" }, -#if CFG_SUPPORT_PRIV_MCR_RW - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_mcr" }, - {PRIV_CMD_ACCESS_MCR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mcr" }, -#endif - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_sw_ctrl" }, - {PRIV_CMD_SW_CTRL, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_sw_ctrl" }, - -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_bwcs"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CUSTOM_BWCS_CMD, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_bwcs"}, -#endif - - /* SET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 256, 0, "set_oid"}, - /* GET STRUCT sub-ioctls commands */ - {PRIV_CMD_OID, 0, 256, "get_oid"}, - - {PRIV_CMD_BAND_CONFIG, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_band" }, - {PRIV_CMD_BAND_CONFIG, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_band" }, - - {PRIV_CMD_SET_TX_POWER, IW_PRIV_TYPE_INT | 4, 0, "set_txpower" }, - {PRIV_CMD_GET_CH_LIST, 0, IW_PRIV_TYPE_INT | 50, "get_ch_list" }, - {PRIV_CMD_DUMP_MEM, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_mem" }, - -#if CFG_ENABLE_WIFI_DIRECT - {PRIV_CMD_P2P_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_p2p_mode" }, -#endif -#if CFG_SUPPORT_BUILD_DATE_CODE - {PRIV_CMD_GET_BUILD_DATE_CODE, 0, IW_PRIV_TYPE_CHAR | 16, "get_date_code" }, -#endif -}; - -static const iw_handler rIwPrivHandler[] = { - [IOCTL_SET_INT - SIOCIWFIRSTPRIV] = priv_set_int, - [IOCTL_GET_INT - SIOCIWFIRSTPRIV] = priv_get_int, - [IOCTL_SET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_ADDRESS - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_STR - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_GET_KEY - SIOCIWFIRSTPRIV] = NULL, - [IOCTL_SET_STRUCT - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_GET_STRUCT - SIOCIWFIRSTPRIV] = priv_get_struct, - [IOCTL_SET_STRUCT_FOR_EM - SIOCIWFIRSTPRIV] = priv_set_struct, - [IOCTL_SET_INTS - SIOCIWFIRSTPRIV] = priv_set_ints, - [IOCTL_GET_INTS - SIOCIWFIRSTPRIV] = priv_get_ints, -}; - -const struct iw_handler_def wext_handler_def = { - .num_standard = 0, - .num_private = (__u16)sizeof(rIwPrivHandler)/sizeof(iw_handler), - .num_private_args = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args), - .standard = (iw_handler *) NULL, - .private = rIwPrivHandler, - .private_args = rIwPrivTable, - .get_wireless_stats = wext_get_wireless_stats, -}; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPA/RSN Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPA IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x01", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPA IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPAIE */ - - -#if CFG_SUPPORT_WAPI -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WAPI Information Element . -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWAPIIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - OUT PUINT_8 *ppucDesiredIE - ) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ELEM_ID_WAPI && i4InfoElemLen <= i4TotalIeLen) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* wextSrchDesiredWAPIIE */ -#endif - - -#if CFG_SUPPORT_WPS -/*----------------------------------------------------------------------------*/ -/*! -* \brief Find the desired WPS Information Element according to desiredElemID. -* -* \param[in] pucIEStart IE starting address. -* \param[in] i4TotalIeLen Total length of all the IE. -* \param[in] ucDesiredElemId Desired element ID. -* \param[out] ppucDesiredIE Pointer to the desired IE. -* -* \retval TRUE Find the desired IE. -* \retval FALSE Desired IE not found. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE) -{ - INT_32 i4InfoElemLen; - - ASSERT(pucIEStart); - ASSERT(ppucDesiredIE); - - while (i4TotalIeLen >= 2) { - i4InfoElemLen = (INT_32) pucIEStart[1] + 2; - - if (pucIEStart[0] == ucDesiredElemId && i4InfoElemLen <= i4TotalIeLen) { - if (ucDesiredElemId != 0xDD) { - /* Non 0xDD, OK! */ - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - else { - /* EID == 0xDD, check WPS IE */ - if (pucIEStart[1] >= 4) { - if (memcmp(&pucIEStart[2], "\x00\x50\xf2\x04", 4) == 0) { - *ppucDesiredIE = &pucIEStart[0]; - return TRUE; - } - } /* check WPS IE length */ - } /* check EID == 0xDD */ - } /* check desired EID */ - - /* Select next information element. */ - i4TotalIeLen -= i4InfoElemLen; - pucIEStart += i4InfoElemLen; - } - - return FALSE; -} /* parseSearchDesiredWPSIE */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Get the name of the protocol used on the air. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] pcName Buffer to store protocol name string -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note If netif_carrier_ok, protocol name is returned; -* otherwise, "disconnected" is returned. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_name ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT char *pcName, - IN char *pcExtra - ) -{ - ENUM_PARAM_NETWORK_TYPE_T eNetWorkType; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcName); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcName)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (netif_carrier_ok(prNetDev)) { - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryNetworkTypeInUse, - &eNetWorkType, - sizeof(eNetWorkType), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - switch(eNetWorkType) { - case PARAM_NETWORK_TYPE_DS: - strcpy(pcName, "IEEE 802.11b"); - break; - case PARAM_NETWORK_TYPE_OFDM24: - strcpy(pcName, "IEEE 802.11bgn"); - break; - case PARAM_NETWORK_TYPE_AUTOMODE: - case PARAM_NETWORK_TYPE_OFDM5: - strcpy(pcName, "IEEE 802.11abgn"); - break; - case PARAM_NETWORK_TYPE_FH: - default: - strcpy(pcName, "IEEE 802.11"); - break; - } - } - else { - strcpy(pcName, "Disconnected"); - } - - return 0; -} /* wext_get_name */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL -* \param[in] prFreq Buffer to store frequency information -* \param[in] pcExtra NULL -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If infrastructure mode is not NET NET_TYPE_IBSS. -* \retval -EINVAL Invalid channel frequency. -* -* \note If infrastructure mode is IBSS, new channel frequency is set to device. -* The range of channel number depends on different regulatory domain. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - -#if 0 - UINT_32 u4ChnlFreq; /* Store channel or frequency information */ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("set m:%d, e:%d, i:%d, flags:%d\n", - prIwFreq->m, prIwFreq->e, prIwFreq->i, prIwFreq->flags); - */ - - /* If setting by frequency, convert to a channel */ - if ((prIwFreq->e == 1) && - (prIwFreq->m >= (int) 2.412e8) && - (prIwFreq->m <= (int) 2.484e8)) { - - /* Change to KHz format */ - u4ChnlFreq = (UINT_32)(prIwFreq->m / (KILO / 10)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetFrequency, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - /* Setting by channel number */ - else if ((prIwFreq->m > KILO) || (prIwFreq->e > 0)) { - return -EOPNOTSUPP; - } - else { - /* Change to channel number format */ - u4ChnlFreq = (UINT_32)prIwFreq->m; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetChannel, - &u4ChnlFreq, - sizeof(u4ChnlFreq), - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - - if (WLAN_STATUS_SUCCESS != rStatus) { - return -EINVAL; - } - } - -#endif - - return 0; - -} /* wext_set_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the operating channel in the wireless device. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFreq Buffer to store frequency information. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise -* -* \note If netif_carrier_ok, channel frequency information is stored in pFreq. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_freq ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_freq *prIwFreq, - IN char *pcExtra - ) -{ - UINT_32 u4Channel = 0; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prIwFreq); - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwFreq)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: TODO skip checking in IBSS mode */ - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryFrequency, - &u4Channel, - sizeof(u4Channel), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - prIwFreq->m = (int) u4Channel; /* freq in KHz */ - prIwFreq->e = 3; - - return 0; - -} /* wext_get_freq */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set operating mode. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - switch (*pu4Mode) { - case IW_MODE_AUTO: - eOpMode = NET_TYPE_AUTO_SWITCH; - break; - - case IW_MODE_ADHOC: - eOpMode = NET_TYPE_IBSS; - break; - - case IW_MODE_INFRA: - eOpMode = NET_TYPE_INFRA; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Set UNSUPPORTED Mode = %d.\n", __FUNCTION__, *pu4Mode)); - return -EOPNOTSUPP; - } - - //printk("%s(): Set Mode = %d\n", __FUNCTION__, *pu4Mode); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - /* after set operation mode, key table are cleared */ - - /* reset wpa info */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - return 0; -} /* wext_set_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get operating mode. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo NULL. -* \param[out] pu4Mode Buffer to store operating mode information. -* \param[in] pcExtra NULL. -* -* \retval 0 If data is valid. -* \retval -EINVAL Otherwise. -* -* \note If netif_carrier_ok, operating mode information is stored in pu4Mode. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_mode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - OUT unsigned int *pu4Mode, - IN char *pcExtra - ) -{ - ENUM_PARAM_OP_MODE_T eOpMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pu4Mode); - if (FALSE == GLUE_CHK_PR2(prNetDev, pu4Mode)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryInfrastructureMode, - &eOpMode, - sizeof(eOpMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch (eOpMode){ - case NET_TYPE_IBSS: - *pu4Mode = IW_MODE_ADHOC; - break; - - case NET_TYPE_INFRA: - *pu4Mode = IW_MODE_INFRA; - break; - - case NET_TYPE_AUTO_SWITCH: - *pu4Mode = IW_MODE_AUTO; - break; - - default: - DBGLOG(INIT, INFO, ("%s(): Get UNKNOWN Mode.\n", __FUNCTION__)); - return -EINVAL; - } - - return 0; -} /* wext_get_mode */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get the valid range for each configurable STA setting value. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer to iw_point structure, not used. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 If data is valid. -* -* \note The extra buffer (pcExtra) is filled with information from driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_range ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - OUT char *pcExtra - ) -{ - struct iw_range *prRange = NULL; - PARAM_RATES_EX aucSuppRate = {0}; /* data buffers */ - int i = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prRange = (struct iw_range *) pcExtra; - - memset(prRange, 0, sizeof(*prRange)); - prRange->throughput = 20000000; /* 20Mbps */ - prRange->min_nwid = 0; /* not used */ - prRange->max_nwid = 0; /* not used */ - - /* scan_capa not implemented */ - - /* event_capa[6]: kernel + driver capabilities */ - prRange->event_capa[0] = (IW_EVENT_CAPA_K_0 - | IW_EVENT_CAPA_MASK(SIOCGIWAP) - | IW_EVENT_CAPA_MASK(SIOCGIWSCAN) - /* can't display meaningful string in iwlist - | IW_EVENT_CAPA_MASK(SIOCGIWTXPOW) - | IW_EVENT_CAPA_MASK(IWEVMICHAELMICFAILURE) - | IW_EVENT_CAPA_MASK(IWEVASSOCREQIE) - | IW_EVENT_CAPA_MASK(IWEVPMKIDCAND) - */ - ); - prRange->event_capa[1] = IW_EVENT_CAPA_K_1; - - /* report 2.4G channel and frequency only */ - prRange->num_channels = (__u16) NUM_CHANNELS; - prRange->num_frequency = (__u8) NUM_CHANNELS; - for (i = 0; i < NUM_CHANNELS; i++) { - /* iwlib takes this number as channel number */ - prRange->freq[i].i = i + 1; - prRange->freq[i].m = channel_freq[i]; - prRange->freq[i].e = 6; /* Values in table in MHz */ - } - - rStatus = kalIoctl( - prGlueInfo, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - for (i = 0; i < IW_MAX_BITRATES && i < PARAM_MAX_LEN_RATES_EX ; i++) { - if (aucSuppRate[i] == 0) { - break; - } - prRange->bitrate[i] = (aucSuppRate[i] & 0x7F) * 500000; /* 0.5Mbps */ - } - prRange->num_bitrates = i; - - prRange->min_rts = 0; - prRange->max_rts = 2347; - prRange->min_frag = 256; - prRange->max_frag = 2346; - - prRange->min_pmp = 0; /* power management by driver */ - prRange->max_pmp = 0; /* power management by driver */ - prRange->min_pmt = 0; /* power management by driver */ - prRange->max_pmt = 0; /* power management by driver */ - prRange->pmp_flags = IW_POWER_RELATIVE; /* pm default flag */ - prRange->pmt_flags = IW_POWER_ON; /* pm timeout flag */ - prRange->pm_capa = IW_POWER_ON; /* power management by driver */ - - prRange->encoding_size[0] = 5; /* wep40 */ - prRange->encoding_size[1] = 16; /* tkip */ - prRange->encoding_size[2] = 16; /* ckip */ - prRange->encoding_size[3] = 16; /* ccmp */ - prRange->encoding_size[4] = 13; /* wep104 */ - prRange->encoding_size[5] = 16; /* wep128 */ - prRange->num_encoding_sizes = 6; - prRange->max_encoding_tokens = 6; /* token? */ - -#if WIRELESS_EXT < 17 - prRange->txpower_capa = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prRange->txpower_capa = IW_TXPOW_RELATIVE; -#endif - prRange->num_txpower = 5; - prRange->txpower[0] = 0; /* minimum */ - prRange->txpower[1] = 25; /* 25% */ - prRange->txpower[2] = 50; /* 50% */ - prRange->txpower[3] = 100; /* 100% */ - - prRange->we_version_compiled = WIRELESS_EXT; - prRange->we_version_source = WIRELESS_EXT; - - prRange->retry_capa = IW_RETRY_LIMIT; - prRange->retry_flags = IW_RETRY_LIMIT; - prRange->min_retry = 7; - prRange->max_retry = 7; - prRange->r_time_flags = IW_RETRY_ON; - prRange->min_r_time = 0; - prRange->max_r_time = 0; - - /* signal strength and link quality */ - /* Just define range here, reporting value moved to wext_get_stats() */ - prRange->sensitivity = -83; /* fixed value */ - prRange->max_qual.qual = 100; /* max 100% */ - prRange->max_qual.level = (__u8)(0x100 - 0); /* max 0 dbm */ - prRange->max_qual.noise = (__u8)(0x100 - 0); /* max 0 dbm */ - - /* enc_capa */ -#if WIRELESS_EXT > 17 - prRange->enc_capa = IW_ENC_CAPA_WPA | - IW_ENC_CAPA_WPA2 | - IW_ENC_CAPA_CIPHER_TKIP | - IW_ENC_CAPA_CIPHER_CCMP; -#endif - - /* min_pms; Minimal PM saving */ - /* max_pms; Maximal PM saving */ - /* pms_flags; How to decode max/min PM saving */ - - /* modul_capa; IW_MODUL_* bit field */ - /* bitrate_capa; Types of bitrates supported */ - - return 0; -} /* wext_get_range */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set BSSID of AP to connect. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prAddr Pointer to struct sockaddr structure containing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* -* \note Desired AP's BSSID is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_ap ( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - return 0; -} /* wext_set_ap */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get AP MAC address. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prAddr Pointer to struct sockaddr structure storing AP's BSSID. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, AP's mac address is stored in pAddr->sa_data. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_ap ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct sockaddr *prAddr, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prAddr); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAddr)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - if(prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_DISCONNECTED){ - memset(prAddr, 0, 6); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssid, - prAddr->sa_data, - ETH_ALEN, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; -} /* wext_get_ap */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set mlme operation request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData Pointer of iw_point header. -* \param[in] pcExtra Pointer to iw_mlme structure mlme request information. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP unsupported IW_MLME_ command. -* \retval -EINVAL Set MLME Fail, different bssid. -* -* \note Driver will start mlme operation if valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_mlme ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prData, - IN char *pcExtra - ) -{ - struct iw_mlme *prMlme = NULL; - - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR2(prNetDev, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - prMlme = (struct iw_mlme *)pcExtra; - if (prMlme->cmd == IW_MLME_DEAUTH || prMlme->cmd == IW_MLME_DISASSOC) { - if (!netif_carrier_ok(prNetDev)) { - DBGLOG(INIT, INFO, ("[wifi] Set MLME Deauth/Disassoc, but netif_carrier_off\n")); - return 0; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - return 0; - } - else { - DBGLOG(INIT, INFO, ("[wifi] unsupported IW_MLME_ command :%d\n", prMlme->cmd)); - return -EOPNOTSUPP; - } -} /* wext_set_mlme */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To issue scan request. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prData NULL. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EFAULT Tx power is off. -* -* \note Device will start scanning. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN union iwreq_data *prData, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - int essid_len = 0; - - ASSERT(prNetDev); - if (FALSE == GLUE_CHK_DEV(prNetDev)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if WIRELESS_EXT > 17 - /* retrieve SSID */ - if(prData) { - essid_len = ((struct iw_scan_req *)(((struct iw_point*)prData)->pointer))->essid_len; - } -#endif - - init_completion(&prGlueInfo->rScanComp); - - // TODO: parse flags and issue different scan requests? - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetBssidListScan, - pcExtra, - essid_len, - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 2 * KAL_HZ); - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - - - return 0; -} /* wext_set_scan */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To write the ie to buffer -* -*/ -/*----------------------------------------------------------------------------*/ -static inline int snprintf_hex(char *buf, size_t buf_size, const u8 *data, - size_t len) -{ - size_t i; - char *pos = buf, *end = buf + buf_size; - int ret; - - if (buf_size == 0) - return 0; - - for (i = 0; i < len; i++) { - ret = snprintf(pos, end - pos, "%02x", - data[i]); - if (ret < 0 || ret >= end - pos) { - end[-1] = '\0'; - return pos - buf; - } - pos += ret; - } - end[-1] = '\0'; - return pos - buf; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get scan results, transform results from driver's format to WE's. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prData Pointer to iw_point structure, pData->length is the size of -* pcExtra buffer before used, and is updated after filling scan -* results. -* \param[out] pcExtra Pointer to buffer which is allocated by caller of this -* function, wext_support_ioctl() or ioctl_standard_call() in -* wireless.c. -* -* \retval 0 For success. -* \retval -ENOMEM If dynamic memory allocation fail. -* \retval -E2BIG Invalid length. -* -* \note Scan results is filled into pcExtra buffer, data size is updated in -* pData->length. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_scan ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN OUT struct iw_point *prData, - IN char *pcExtra - ) -{ - UINT_32 i = 0; - UINT_32 j = 0; - P_PARAM_BSSID_LIST_EX_T prList = NULL; - P_PARAM_BSSID_EX_T prBss = NULL; - P_PARAM_VARIABLE_IE_T prDesiredIE = NULL; - struct iw_event iwEvent; /* local iw_event buffer */ - - /* write pointer of extra buffer */ - char *pcCur = NULL; - /* pointer to the end of last full entry in extra buffer */ - char *pcValidEntryEnd = NULL; - char *pcEnd = NULL; /* end of extra buffer */ - - UINT_32 u4AllocBufLen = 0; - - /* arrange rate information */ - UINT_32 u4HighestRate = 0; - char aucRatesBuf[64]; - UINT_32 u4BufIndex; - - /* return value */ - int ret = 0; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Initialize local variables */ - pcCur = pcExtra; - pcValidEntryEnd = pcExtra; - pcEnd = pcExtra + prData->length; /* end of extra buffer */ - - /* Allocate another query buffer with the same size of extra buffer */ - u4AllocBufLen = prData->length; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for scan list:%d\n", prData->length)); - ret = -ENOMEM; - goto error; - } - prList->u4NumberOfItems = 0; - - /* wait scan done */ - //printk ("wait for scan results\n"); - //wait_for_completion_interruptible_timeout(&prGlueInfo->rScanComp, 4 * KAL_HZ); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - /* Buffer length is not large enough. */ - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - -#if WIRELESS_EXT >= 17 - /* This feature is supported in WE-17 or above, limited by iwlist. - ** Return -E2BIG and iwlist will request again with a larger buffer. - */ - ret = -E2BIG; - /* Update length to give application a hint on result length */ - prData->length = (__u16)u4BufLen; - goto error; -#else - /* Realloc a larger query buffer here, but don't write too much to extra - ** buffer when filling it later. - */ - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - - u4AllocBufLen = u4BufLen; - prList = kalMemAlloc(u4AllocBufLen, VIR_MEM_TYPE); - if (prList == NULL) { - DBGLOG(INIT, INFO, ("[wifi] no memory for larger scan list :%ld\n", u4BufLen)); - ret = -ENOMEM; - goto error; - } - prList->NumberOfItems = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryBssidList, - prList, - u4AllocBufLen, - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus == WLAN_STATUS_INVALID_LENGTH) { - DBGLOG(INIT, INFO, ("[wifi] larger buf:%d result:%ld\n", u4AllocBufLen, u4BufLen)); - ret = -E2BIG; - prData->length = (__u16)u4BufLen; - goto error; - } -#endif /* WIRELESS_EXT >= 17 */ - - } - - - if (prList->u4NumberOfItems > CFG_MAX_NUM_BSS_LIST) { - DBGLOG(INIT, INFO, ("[wifi] strange scan result count:%ld\n", - prList->u4NumberOfItems)); - goto error; - } - - /* Copy required data from pList to pcExtra */ - prBss = &prList->arBssid[0]; /* set to the first entry */ - for (i = 0; i < prList->u4NumberOfItems; ++i) { - /* BSSID */ - iwEvent.cmd = SIOCGIWAP; - iwEvent.len = IW_EV_ADDR_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwEvent.u.ap_addr.sa_data, prBss->arMacAddress, ETH_ALEN); - memcpy(pcCur, &iwEvent, IW_EV_ADDR_LEN); - pcCur += IW_EV_ADDR_LEN; - - /* SSID */ - iwEvent.cmd = SIOCGIWESSID; - /* Modification to user space pointer(essid.pointer) is not needed. */ - iwEvent.u.essid.length = (__u16)prBss->rSsid.u4SsidLen; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.essid.length; - - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.essid.flags = 1; - iwEvent.u.essid.pointer = NULL; - -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, iwEvent.len); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prBss->rSsid.aucSsid, iwEvent.u.essid.length); - pcCur += iwEvent.len; - /* Frequency */ - iwEvent.cmd = SIOCGIWFREQ; - iwEvent.len = IW_EV_FREQ_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.freq.m = prBss->rConfiguration.u4DSConfig; - iwEvent.u.freq.e = 3; /* (in KHz) */ - iwEvent.u.freq.i = 0; - memcpy(pcCur, &iwEvent, IW_EV_FREQ_LEN); - pcCur += IW_EV_FREQ_LEN; - - /* Operation Mode */ - iwEvent.cmd = SIOCGIWMODE; - iwEvent.len = IW_EV_UINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - if (prBss->eOpMode == NET_TYPE_IBSS) { - iwEvent.u.mode = IW_MODE_ADHOC; - } - else if (prBss->eOpMode == NET_TYPE_INFRA) { - iwEvent.u.mode = IW_MODE_INFRA; - } - else { - iwEvent.u.mode = IW_MODE_AUTO; - } - memcpy(pcCur, &iwEvent, IW_EV_UINT_LEN); - pcCur += IW_EV_UINT_LEN; - - /* Quality */ - iwEvent.cmd = IWEVQUAL; - iwEvent.len = IW_EV_QUAL_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.qual.qual = 0; /* Quality not available now */ - /* -100 < Rssi < -10, normalized by adding 0x100 */ - iwEvent.u.qual.level = 0x100 + prBss->rRssi; - iwEvent.u.qual.noise = 0; /* Noise not available now */ - iwEvent.u.qual.updated = IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_UPDATED \ - | IW_QUAL_NOISE_INVALID; - memcpy(pcCur, &iwEvent, IW_EV_QUAL_LEN); - pcCur += IW_EV_QUAL_LEN; - - /* Security Mode*/ - iwEvent.cmd = SIOCGIWENCODE; - iwEvent.len = IW_EV_POINT_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.pointer = NULL; - iwEvent.u.data.flags = 0; - iwEvent.u.data.length = 0; - if(!prBss->u4Privacy) { - iwEvent.u.data.flags |= IW_ENCODE_DISABLED; - } -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - pcCur += IW_EV_POINT_LEN; - - /* rearrange rate information */ - u4BufIndex = sprintf(aucRatesBuf, "Rates (Mb/s):"); - u4HighestRate = 0; - for (j = 0; j < PARAM_MAX_LEN_RATES_EX; ++j) { - UINT_8 curRate = prBss->rSupportedRates[j] & 0x7F; - if (curRate == 0) { - break; - } - - if (curRate > u4HighestRate) { - u4HighestRate = curRate; - } - - if (curRate == RATE_5_5M) { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " 5.5"); - } - else { - u4BufIndex += sprintf(aucRatesBuf + u4BufIndex, " %d", curRate / 2); - } - #if DBG - if (u4BufIndex > sizeof(aucRatesBuf)) { - //printk("rate info too long\n"); - break; - } - #endif - } - /* Report Highest Rates */ - iwEvent.cmd = SIOCGIWRATE; - iwEvent.len = IW_EV_PARAM_LEN; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.bitrate.value = u4HighestRate * 500000; - iwEvent.u.bitrate.fixed = 0; - iwEvent.u.bitrate.disabled = 0; - iwEvent.u.bitrate.flags = 0; - memcpy(pcCur, &iwEvent, iwEvent.len); - pcCur += iwEvent.len; - - #if WIRELESS_EXT >= 15 /* IWEVCUSTOM is available in WE-15 or above */ - /* Report Residual Rates */ - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = u4BufIndex; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 0; - #if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); - #else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - #endif - memcpy(pcCur + IW_EV_POINT_LEN, aucRatesBuf, u4BufIndex); - pcCur += iwEvent.len; - #endif /* WIRELESS_EXT >= 15 */ - - - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WPS /* search WPS IE (0xDD, 221, OUI: 0x0050f204 ) */ - if (wextSrchDesiredWPSIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength - sizeof(PARAM_FIXED_IEs), - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } -#endif - - - /* Search RSN IE (0x30, 48). pBss->IEs starts from timestamp. */ - /* pBss->IEs starts from timestamp */ - if (wextSrchDesiredWPAIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - 0x30, - (PUINT_8 *)&prDesiredIE)) { - - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; - } - -#if CFG_SUPPORT_WAPI /* Android+ */ - if (wextSrchDesiredWAPIIE(&prBss->aucIEs[sizeof(PARAM_FIXED_IEs)], - prBss->u4IELength -sizeof(PARAM_FIXED_IEs), - (PUINT_8 *)&prDesiredIE)) { - -#if 0 - iwEvent.cmd = IWEVGENIE; - iwEvent.u.data.flags = 1; - iwEvent.u.data.length = 2 + (__u16)prDesiredIE->ucLength; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; -#if WIRELESS_EXT <= 18 - memcpy(pcCur, &iwEvent, IW_EV_POINT_LEN); -#else - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); -#endif - memcpy(pcCur + IW_EV_POINT_LEN, prDesiredIE, 2 + prDesiredIE->ucLength); - pcCur += iwEvent.len; -#else - iwEvent.cmd = IWEVCUSTOM; - iwEvent.u.data.length = (2 + prDesiredIE->ucLength) * 2 + 8 /* wapi_ie= */; - iwEvent.len = IW_EV_POINT_LEN + iwEvent.u.data.length; - if ((pcCur + iwEvent.len) > pcEnd) - break; - iwEvent.u.data.flags = 1; - - memcpy(pcCur, &iwEvent, IW_EV_LCP_LEN); - memcpy(pcCur + IW_EV_LCP_LEN, - &iwEvent.u.data.length, - sizeof(struct iw_point) - IW_EV_POINT_OFF); - - pcCur += (IW_EV_POINT_LEN); - - pcCur += sprintf(pcCur, "wapi_ie="); - - snprintf_hex(pcCur, pcEnd - pcCur, (UINT_8 *)prDesiredIE, prDesiredIE->ucLength + 2); - - pcCur += (2 + prDesiredIE->ucLength) * 2 /* iwEvent.len */; -#endif - } -#endif - /* Complete an entry. Update end of valid entry */ - pcValidEntryEnd = pcCur; - /* Extract next bss */ - prBss = (P_PARAM_BSSID_EX_T)((char *)prBss + prBss->u4Length); - } - - /* Update valid data length for caller function and upper layer - * applications. - */ - prData->length = (pcValidEntryEnd - pcExtra); - //printk(KERN_INFO "[wifi] buf:%d result:%ld\n", pData->length, u4BufLen); - - //kalIndicateStatusAndComplete(prGlueInfo, WLAN_STATUS_SCAN_COMPLETE, NULL, 0); - -error: - /* free local query buffer */ - if (prList) { - kalMemFree(prList, VIR_MEM_TYPE, u4AllocBufLen); - } - - return ret; -} /* wext_get_scan */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set desired network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer of iw_point header. -* \param[in] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -E2BIG Essid string length is too big. -* \retval -EINVAL pcExtra is null pointer. -* \retval -EFAULT Driver fail to set new essid. -* -* \note If string lengh is ok, device will try connecting to the new network. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - IN char *pcExtra - ) -{ - PARAM_SSID_T rNewSsid; - UINT_32 cipher; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prEssid->length > IW_ESSID_MAX_SIZE) { - return -E2BIG; - } - - - /* set auth mode */ - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_DISABLED) { - eAuthMode = (prGlueInfo->rWpaInfo.u4AuthAlg == IW_AUTH_ALG_OPEN_SYSTEM) ? - AUTH_MODE_OPEN : AUTH_MODE_AUTO_SWITCH; - //printk(KERN_INFO "IW_AUTH_WPA_VERSION_DISABLED->Param_AuthMode%s\n", - // (eAuthMode == AUTH_MODE_OPEN) ? "Open" : "Shared"); - } - else { - /* set auth mode */ - switch(prGlueInfo->rWpaInfo.u4KeyMgmt) { - case IW_AUTH_KEY_MGMT_802_1X: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA : AUTH_MODE_WPA2; - //printk("IW_AUTH_KEY_MGMT_802_1X->AUTH_MODE_WPA%s\n", - // (eAuthMode == AUTH_MODE_WPA) ? "" : "2"); - break; - case IW_AUTH_KEY_MGMT_PSK: - eAuthMode = - (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA) ? - AUTH_MODE_WPA_PSK: AUTH_MODE_WPA2_PSK; - //printk("IW_AUTH_KEY_MGMT_PSK->AUTH_MODE_WPA%sPSK\n", - // (eAuthMode == AUTH_MODE_WPA_PSK) ? "" : "2"); - break; -#if CFG_SUPPORT_WAPI /* Android+ */ - case IW_AUTH_KEY_MGMT_WAPI_PSK: - break; - case IW_AUTH_KEY_MGMT_WAPI_CERT: - break; -#endif - -//#if defined (IW_AUTH_KEY_MGMT_WPA_NONE) -// case IW_AUTH_KEY_MGMT_WPA_NONE: -// eAuthMode = AUTH_MODE_WPA_NONE; -// //printk("IW_AUTH_KEY_MGMT_WPA_NONE->AUTH_MODE_WPA_NONE\n"); -// break; -//#endif -#if CFG_SUPPORT_802_11W - case IW_AUTH_KEY_MGMT_802_1X_SHA256: - eAuthMode = AUTH_MODE_WPA2; - break; - case IW_AUTH_KEY_MGMT_PSK_SHA256: - eAuthMode = AUTH_MODE_WPA2_PSK; - break; -#endif - default: - //printk(KERN_INFO DRV_NAME"strange IW_AUTH_KEY_MGMT : %ld set auto switch\n", - // prGlueInfo->rWpaInfo.u4KeyMgmt); - eAuthMode = AUTH_MODE_AUTO_SWITCH; - break; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - /* set encryption status */ - cipher = prGlueInfo->rWpaInfo.u4CipherGroup | - prGlueInfo->rWpaInfo.u4CipherPairwise; - if (cipher & IW_AUTH_CIPHER_CCMP) { - //printk("IW_AUTH_CIPHER_CCMP->ENUM_ENCRYPTION3_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION3_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_TKIP) { - //printk("IW_AUTH_CIPHER_TKIP->ENUM_ENCRYPTION2_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION2_ENABLED; - } - else if (cipher & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) { - //printk("IW_AUTH_CIPHER_WEPx->ENUM_ENCRYPTION1_ENABLED\n"); - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - } - else if (cipher & IW_AUTH_CIPHER_NONE){ - //printk("IW_AUTH_CIPHER_NONE->ENUM_ENCRYPTION_DISABLED\n"); - if (prGlueInfo->rWpaInfo.fgPrivacyInvoke) - eEncStatus = ENUM_ENCRYPTION1_ENABLED; - else - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - else { - //printk("unknown IW_AUTH_CIPHER->Param_EncryptionDisabled\n"); - eEncStatus = ENUM_ENCRYPTION_DISABLED; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - -#if WIRELESS_EXT < 21 - /* GeorgeKuo: a length error bug exists in (WE < 21) cases, kernel before - ** 2.6.19. Cut the trailing '\0'. - */ - rNewSsid.u4SsidLen = (prEssid->length) ? prEssid->length - 1 : 0; -#else - rNewSsid.u4SsidLen = prEssid->length; -#endif - kalMemCopy(rNewSsid.aucSsid, pcExtra, rNewSsid.u4SsidLen); - - /* - rNewSsid.aucSsid[rNewSsid.u4SsidLen] = '\0'; - printk("set ssid(%lu): %s\n", rNewSsid.u4SsidLen, rNewSsid.aucSsid); - */ - - if (kalIoctl(prGlueInfo, - wlanoidSetSsid, - (PVOID) &rNewSsid, - sizeof(PARAM_SSID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING "Fail to set ssid\n"); - return -EFAULT; - } - - - return 0; -} /* wext_set_essid */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current network name ESSID. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEssid Pointer to iw_point structure containing essid information. -* \param[out] pcExtra Pointer to buffer srtoring essid string. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, network essid is stored in pcExtra. -*/ -/*----------------------------------------------------------------------------*/ -//static PARAM_SSID_T ssid; -static int -wext_get_essid ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEssid, - OUT char *pcExtra - ) -{ - //PARAM_SSID_T ssid; - - P_PARAM_SSID_T prSsid; - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEssid); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prEssid, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //if (!netif_carrier_ok(prNetDev)) { - // return -ENOTCONN; - //} - - prSsid = kalMemAlloc(sizeof(PARAM_SSID_T), VIR_MEM_TYPE); - - if(!prSsid) { - return -ENOMEM; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQuerySsid, - prSsid, - sizeof(PARAM_SSID_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if ((rStatus == WLAN_STATUS_SUCCESS) && (prSsid->u4SsidLen <= MAX_SSID_LEN)) { - kalMemCopy(pcExtra, prSsid->aucSsid, prSsid->u4SsidLen); - prEssid->length = prSsid->u4SsidLen; - prEssid->flags = 1; - } - - kalMemFree(prSsid, VIR_MEM_TYPE, sizeof(PARAM_SSID_T)); - - return 0; -} /* wext_get_essid */ - - -#if 0 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set tx desired bit rate. Three cases here -* iwconfig wlan0 auto -> Set to origianl supported rate set. -* iwconfig wlan0 18M -> Imply "fixed" case, set to 18Mbps as desired rate. -* iwconfig wlan0 18M auto -> Set to auto rate lower and equal to 18Mbps -* -* \param[in] prNetDev Pointer to the net_device handler. -* \param[in] prIwReqInfo Pointer to the Request Info. -* \param[in] prRate Pointer to the Rate Parameter. -* \param[in] pcExtra Pointer to the extra buffer. -* -* \retval 0 Update desired rate. -* \retval -EINVAL Wrong parameter -*/ -/*----------------------------------------------------------------------------*/ -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ) -{ - PARAM_RATES_EX aucSuppRate = {0}; - PARAM_RATES_EX aucNewRate = {0}; - UINT_32 u4NewRateLen = 0; - UINT_32 i; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* - printk("value = %d, fixed = %d, disable = %d, flags = %d\n", - prRate->value, prRate->fixed, prRate->disabled, prRate->flags); - */ - - rStatus = wlanQueryInformation( - prGlueInfo->prAdapter, - wlanoidQuerySupportedRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - - /* Case: AUTO */ - if (prRate->value < 0) { - if (prRate->fixed == 0) { - /* iwconfig wlan0 rate auto */ - - /* set full supported rate to device */ - /* printk("wlanoidQuerySupportedRates():u4BufLen = %ld\n", u4BufLen); */ - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucSuppRate, - sizeof(aucSuppRate), - &u4BufLen); - return 0; - } - else { - /* iwconfig wlan0 rate fixed */ - - /* fix rate to what? DO NOTHING */ - return -EINVAL; - } - } - - - aucNewRate[0] = prRate->value / 500000; /* In unit of 500k */ - - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; i++) { - /* check the given value is supported */ - if (aucSuppRate[i] == 0) { - break; - } - - if (aucNewRate[0] == aucSuppRate[i]) { - u4NewRateLen = 1; - break; - } - } - - if (u4NewRateLen == 0) { - /* the given value is not supported */ - /* return error or use given rate as upper bound? */ - return -EINVAL; - } - - if (prRate->fixed == 0) { - /* add all rates lower than desired rate */ - for (i = 0; i < PARAM_MAX_LEN_RATES_EX; ++i) { - if (aucSuppRate[i] == 0) { - break; - } - - if (aucSuppRate[i] < aucNewRate[0]) { - aucNewRate[u4NewRateLen++] = aucSuppRate[i]; - } - } - } - - rStatus = wlanSetInformation( - prGlueInfo->prAdapter, - wlanoidSetDesiredRates, - &aucNewRate, - sizeof(aucNewRate), - &u4BufLen); - return 0; -} /* wext_set_rate */ - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get current tx bit rate. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRate Pointer to iw_param structure to store current tx rate. -* \param[in] pcExtra NULL. -* -* \retval 0 If netif_carrier_ok. -* \retval -ENOTCONN Otherwise. -* -* \note If netif_carrier_ok, current tx rate is stored in pRate. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRate, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - UINT_32 u4Rate = 0; - - ASSERT(prNetDev); - ASSERT(prRate); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRate)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (!netif_carrier_ok(prNetDev)) { - return -ENOTCONN; - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryLinkSpeed, - &u4Rate, - sizeof(u4Rate), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prRate->value = u4Rate * 100; /* u4Rate is in unit of 100bps */ - prRate->fixed = 0; - - return 0; -} /* wext_get_rate */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EINVAL Given value is out of range. -* -* \note If given value is valid, device will follow the new setting. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if (prRts->disabled == 1) { - u4RtsThresh = 2347; - } - else if (prRts->value < 0 || prRts->value > 2347) { - return -EINVAL; - } - else { - u4RtsThresh = (PARAM_RTS_THRESHOLD)prRts->value; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_set_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get RTS/CTS theshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prRts Pointer to iw_param structure containing rts threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pRts. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_rts ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prRts, - IN char *pcExtra - ) -{ - PARAM_RTS_THRESHOLD u4RtsThresh; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prRts); - if (FALSE == GLUE_CHK_PR2(prNetDev, prRts)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRtsThreshold, - &u4RtsThresh, - sizeof(u4RtsThresh), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - prRts->value = (typeof(prRts->value ))u4RtsThresh; - prRts->disabled = (prRts->value > 2347 || prRts->value < 0) ? 1 : 0; - prRts->fixed = 1; - - return 0; -} /* wext_get_rts */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get fragmentation threshold. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prFrag Pointer to iw_param structure containing frag threshold. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note RTS threshold is stored in pFrag. Fragmentation is disabled. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_frag ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prFrag, - IN char *pcExtra - ) -{ - ASSERT(prFrag); - - prFrag->value = 2346; - prFrag->fixed = 1; - prFrag->disabled = 1; - return 0; -} /* wext_get_frag */ - -#if 1 -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set TX power, or enable/disable the radio. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. iwconfig wlan0 txpow on/off are used -* to enable/disable the radio. -*/ -/*----------------------------------------------------------------------------*/ - -static int -wext_set_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - int ret = 0; - //PARAM_DEVICE_POWER_STATE ePowerState; - ENUM_ACPI_STATE_T ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - if(prTxPow->disabled){ - /* <1> disconnect */ - rStatus = kalIoctl(prGlueInfo, - wlanoidSetDisassociate, - NULL, - 0, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("######set disassoc failed\n")); - } else { - DBGLOG(INIT, INFO, ("######set assoc ok\n")); - } - - /* <2> mark to power state flag*/ - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d3(0)\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - - } - else { - ePowerState = ACPI_STATE_D0; - DBGLOG(INIT, INFO, ("set to acpi d0\n")); - wlanSetAcpiState(prGlueInfo->prAdapter, ePowerState); - } - - prGlueInfo->ePowerState = ePowerState; - - return ret; -} /* wext_set_txpow */ - - -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get TX power. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prTxPow Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Tx power is stored in pTxPow. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_txpow ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prTxPow, - IN char *pcExtra - ) -{ - //PARAM_DEVICE_POWER_STATE ePowerState; - - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prTxPow); - if (FALSE == GLUE_CHK_PR2(prNetDev, prTxPow)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* GeorgeKuo: wlanoidQueryAcpiDevicePowerState() reports capability, not - * current state. Use GLUE_INFO_T to store state. - */ - //ePowerState = prGlueInfo->ePowerState; - - /* TxPow parameters: Fixed at relative 100% */ -#if WIRELESS_EXT < 17 - prTxPow->flags = 0x0002; /* IW_TXPOW_RELATIVE */ -#else - prTxPow->flags = IW_TXPOW_RELATIVE; -#endif - prTxPow->value = 100; - prTxPow->fixed = 1; - //prTxPow->disabled = (ePowerState != ParamDeviceStateD3) ? FALSE : TRUE; - prTxPow->disabled = TRUE; - - return 0; -} /* wext_get_txpow */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Buffer to store key content. -* -* \retval 0 Success. -* -* \note Securiry information is stored in pEnc except key content. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - //ENUM_ENCRYPTION_STATUS_T eEncMode; - ENUM_PARAM_ENCRYPTION_STATUS_T eEncMode; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR2(prNetDev, prEnc)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryEncryptionStatus, - &eEncMode, - sizeof(eEncMode), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - - - switch(eEncMode) { - case ENUM_WEP_DISABLED: - prEnc->flags = IW_ENCODE_DISABLED; - break; - case ENUM_WEP_ENABLED: - prEnc->flags = IW_ENCODE_ENABLED; - break; - case ENUM_WEP_KEY_ABSENT: - prEnc->flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - break; - default: - prEnc->flags = IW_ENCODE_ENABLED; - break; - } - - /* Cipher, Key Content, Key ID can't be queried */ - prEnc->flags |= IW_ENCODE_NOKEY; -#endif - return 0; -} /* wext_get_encode */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static UINT_8 wepBuf[48]; - -static int -wext_set_encode ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ -#if 1 - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //UINT_8 wepBuf[48]; - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* reset to default mode */ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4KeyMgmt = 0; - prGlueInfo->rWpaInfo.u4CipherPairwise = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4CipherGroup = IW_AUTH_CIPHER_NONE; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; -#if CFG_SUPPORT_802_11W - prGlueInfo->rWpaInfo.u4Mfp = IW_AUTH_MFP_DISABLED; -#endif - - /* iwconfig wlan0 key off */ - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED ) { - eAuthMode = AUTH_MODE_OPEN; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - eEncStatus = ENUM_ENCRYPTION_DISABLED; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(eEncStatus), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - return 0; - } - - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prEnc->length == 5 || prEnc->length == 13 || prEnc->length == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prEnc->length; - prWepKey->u4KeyLength = prEnc->length; - kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prEnc->length); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetAuthMode fail 0x%lx\n", rStatus); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus); - return -EFAULT; - } - - return 0; - } -#endif - return -EOPNOTSUPP; -} /* wext_set_encode */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note New Power Management Mode is set to driver. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prPower, - IN char *pcExtra - ) -{ -#if 1 - PARAM_POWER_MODE ePowerMode; - INT_32 i4PowerValue; - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - //printk(KERN_INFO "wext_set_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - if(prPower->disabled){ - ePowerMode = Param_PowerModeCAM; - } - else { - i4PowerValue = prPower->value; -#if WIRELESS_EXT < 21 - i4PowerValue /= 1000000; -#endif - if (i4PowerValue == 0) { - ePowerMode = Param_PowerModeCAM; - } else if (i4PowerValue == 1) { - ePowerMode = Param_PowerModeMAX_PSP; - } else if (i4PowerValue == 2) { - ePowerMode = Param_PowerModeFast_PSP; - } - else { - DBGLOG(INIT, INFO, ("%s(): unsupported power management mode value = %d.\n", - __FUNCTION__, - prPower->value)); - - return -EINVAL; - } - } - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO DRV_NAME"wlanoidSet802dot11PowerSaveProfile fail 0x%lx\n", rStatus); - return -EFAULT; - } - -#endif - return 0; -} /* wext_set_power */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To get power management. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[out] prPower Pointer to iw_param structure containing tx power setting. -* \param[in] pcExtra NULL. -* -* \retval 0 Success. -* -* \note Power management mode is stored in pTxPow->value. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_get_power ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - OUT struct iw_param *prPower, - IN char *pcExtra - ) -{ - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - PARAM_POWER_MODE ePowerMode = Param_PowerModeCAM; - - ASSERT(prNetDev); - ASSERT(prPower); - if (FALSE == GLUE_CHK_PR2(prNetDev, prPower)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - -#if 0 -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - TRUE, - TRUE, - &u4BufLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - &ePowerMode, - sizeof(ePowerMode), - &u4BufLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return -EFAULT; - } - - prPower->value = 0; - prPower->disabled = 1; - - if (Param_PowerModeCAM == ePowerMode) { - prPower->value = 0; - prPower->disabled = 1; - } - else if (Param_PowerModeMAX_PSP == ePowerMode ) { - prPower->value = 1; - prPower->disabled = 0; - } - else if (Param_PowerModeFast_PSP == ePowerMode ) { - prPower->value = 2; - prPower->disabled = 0; - } - - prPower->flags = IW_POWER_PERIOD | IW_POWER_RELATIVE; -#if WIRELESS_EXT < 21 - prPower->value *= 1000000; -#endif - - //printk(KERN_INFO "wext_get_power value(%d) disabled(%d) flag(0x%x)\n", - // prPower->value, prPower->disabled, prPower->flags); - - return 0; -} /* wext_get_power */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set authentication parameters. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] rpAuth Pointer to iw_param structure containing authentication information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_auth ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_param *prAuth, - IN char *pcExtra - ) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prAuth); - if (FALSE == GLUE_CHK_PR2(prNetDev, prAuth)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - /* Save information to glue info and process later when ssid is set. */ - switch(prAuth->flags & IW_AUTH_INDEX) { - case IW_AUTH_WPA_VERSION: -#if CFG_SUPPORT_WAPI - if (wlanQueryWapiMode(prGlueInfo->prAdapter)){ - prGlueInfo->rWpaInfo.u4WpaVersion = IW_AUTH_WPA_VERSION_DISABLED; - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_OPEN_SYSTEM; - } - else { - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; - } -#else - prGlueInfo->rWpaInfo.u4WpaVersion = prAuth->value; -#endif - break; - - case IW_AUTH_CIPHER_PAIRWISE: - prGlueInfo->rWpaInfo.u4CipherPairwise = prAuth->value; - break; - - case IW_AUTH_CIPHER_GROUP: - prGlueInfo->rWpaInfo.u4CipherGroup = prAuth->value; - break; - - case IW_AUTH_KEY_MGMT: - prGlueInfo->rWpaInfo.u4KeyMgmt = prAuth->value; -#if CFG_SUPPORT_WAPI - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_PSK || - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WAPI_CERT) { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - } -#endif - if (prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_WPS) - prGlueInfo->fgWpsActive = TRUE; - else - prGlueInfo->fgWpsActive = FALSE; - break; - - case IW_AUTH_80211_AUTH_ALG: - prGlueInfo->rWpaInfo.u4AuthAlg = prAuth->value; - break; - - case IW_AUTH_PRIVACY_INVOKED: - prGlueInfo->rWpaInfo.fgPrivacyInvoke = prAuth->value; - break; -#if CFG_SUPPORT_802_11W - case IW_AUTH_MFP: - //printk("wext_set_auth IW_AUTH_MFP=%d\n", prAuth->value); - prGlueInfo->rWpaInfo.u4Mfp = prAuth->value; - break; -#endif -#if CFG_SUPPORT_WAPI - case IW_AUTH_WAPI_ENABLED: - { - UINT_32 u4BufLen; - WLAN_STATUS rStatus; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiMode, - &prAuth->value, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - DBGLOG(INIT, INFO, ("IW_AUTH_WAPI_ENABLED :%d\n", prAuth->value)); - break; -#endif - default: - /* - printk(KERN_INFO "[wifi] unsupported IW_AUTH_INDEX :%d\n", prAuth->flags); - */ - break; - } - return 0; -} /* wext_set_auth */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To set encryption cipher and key. -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] prEnc Pointer to iw_point structure containing securiry information. -* \param[in] pcExtra Pointer to key string buffer. -* -* \retval 0 Success. -* \retval -EINVAL Key ID error for WEP. -* \retval -EFAULT Setting parameters to driver fail. -* \retval -EOPNOTSUPP Key size not supported. -* -* \note Securiry information is stored in pEnc. -*/ -/*----------------------------------------------------------------------------*/ -#if CFG_SUPPORT_WAPI - UINT_8 keyStructBuf[320]; /* add/remove key shared buffer */ -#else - UINT_8 keyStructBuf[100]; /* add/remove key shared buffer */ -#endif - -static int -wext_set_encode_ext ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwrInfo, - IN struct iw_point *prEnc, - IN char *pcExtra - ) -{ - P_PARAM_REMOVE_KEY_T prRemoveKey = (P_PARAM_REMOVE_KEY_T) keyStructBuf; - P_PARAM_KEY_T prKey = (P_PARAM_KEY_T) keyStructBuf; - - - P_PARAM_WEP_T prWepKey = (P_PARAM_WEP_T) wepBuf; - - struct iw_encode_ext *prIWEncExt = (struct iw_encode_ext *) pcExtra; - - ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus; - ENUM_PARAM_AUTH_MODE_T eAuthMode; - //ENUM_PARAM_OP_MODE_T eOpMode = NET_TYPE_AUTO_SWITCH; - -#if CFG_SUPPORT_WAPI - P_PARAM_WPI_KEY_T prWpiKey = (P_PARAM_WPI_KEY_T) keyStructBuf; -#endif - - P_GLUE_INFO_T prGlueInfo = NULL; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - ASSERT(prEnc); - if (FALSE == GLUE_CHK_PR3(prNetDev, prEnc, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - memset(keyStructBuf, 0, sizeof(keyStructBuf)); - -#if CFG_SUPPORT_WAPI - if (prIWEncExt->alg == IW_ENCODE_ALG_SMS4) { - if (prEnc->flags & IW_ENCODE_DISABLED) { - //printk(KERN_INFO "[wapi] IW_ENCODE_DISABLED\n"); - return 0; - } - /* KeyID */ - prWpiKey->ucKeyID = (prEnc->flags & IW_ENCODE_INDEX); - prWpiKey->ucKeyID --; - if (prWpiKey->ucKeyID > 1) { - /* key id is out of range */ - //printk(KERN_INFO "[wapi] add key error: key_id invalid %d\n", prWpiKey->ucKeyID); - return -EINVAL; - } - - if (prIWEncExt->key_len != 32) { - /* key length not valid */ - //printk(KERN_INFO "[wapi] add key error: key_len invalid %d\n", prIWEncExt->key_len); - return -EINVAL; - } - - //printk(KERN_INFO "[wapi] %d ext_flags %d\n", prEnc->flags, prIWEncExt->ext_flags); - - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - prWpiKey->eKeyType = ENUM_WPI_GROUP_KEY; - prWpiKey->eDirection = ENUM_WPI_RX; - } - else if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prWpiKey->eKeyType = ENUM_WPI_PAIRWISE_KEY; - prWpiKey->eDirection = ENUM_WPI_RX_TX; - } - - /* PN */ - memcpy(prWpiKey->aucPN, prIWEncExt->tx_seq, IW_ENCODE_SEQ_MAX_SIZE * 2); - - /* BSSID */ - memcpy(prWpiKey->aucAddrIndex, prIWEncExt->addr.sa_data, 6); - - memcpy(prWpiKey->aucWPIEK, prIWEncExt->key, 16); - prWpiKey->u4LenWPIEK = 16; - - memcpy(prWpiKey->aucWPICK, &prIWEncExt->key[16], 16); - prWpiKey->u4LenWPICK = 16; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiKey, - prWpiKey, - sizeof(PARAM_WPI_KEY_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] add key error:%lx\n", rStatus); - } - - } - else -#endif - { - - if ( (prEnc->flags & IW_ENCODE_MODE) == IW_ENCODE_DISABLED) { - prRemoveKey->u4Length = sizeof(*prRemoveKey); - memcpy(prRemoveKey->arBSSID, prIWEncExt->addr.sa_data, 6); - /* - printk("IW_ENCODE_DISABLED: ID:%d, Addr:[" MACSTR "]\n", - prRemoveKey->KeyIndex, MAC2STR(prRemoveKey->BSSID)); - */ - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetRemoveKey, - prRemoveKey, - prRemoveKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("remove key error:%lx\n", rStatus)); - } - return 0; - } - - //return 0; - //printk ("alg %x\n", prIWEncExt->alg); - - switch (prIWEncExt->alg) { - case IW_ENCODE_ALG_NONE: - break; - case IW_ENCODE_ALG_WEP: - /* iwconfig wlan0 key 0123456789 */ - /* iwconfig wlan0 key s:abcde */ - /* iwconfig wlan0 key 0123456789 [1] */ - /* iwconfig wlan0 key 01234567890123456789012345 [1] */ - /* check key size for WEP */ - if (prIWEncExt->key_len == 5 || prIWEncExt->key_len == 13 || prIWEncExt->key_len == 16) { - /* prepare PARAM_WEP key structure */ - prWepKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1 : 0; - if (prWepKey->u4KeyIndex > 3) { - /* key id is out of range */ - return -EINVAL; - } - prWepKey->u4KeyIndex |= 0x80000000; - prWepKey->u4Length = 12 + prIWEncExt->key_len; - prWepKey->u4KeyLength = prIWEncExt->key_len; - //kalMemCopy(prWepKey->aucKeyMaterial, pcExtra, prIWEncExt->key_len); - kalMemCopy(prWepKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddWep, - prWepKey, - prWepKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAddWep fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - /* change to auto switch */ - prGlueInfo->rWpaInfo.u4AuthAlg = IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_OPEN_SYSTEM; - eAuthMode = AUTH_MODE_AUTO_SWITCH; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAuthMode, - &eAuthMode, - sizeof(eAuthMode), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetAuthMode fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - prGlueInfo->rWpaInfo.u4CipherPairwise = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - prGlueInfo->rWpaInfo.u4CipherGroup = - IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40; - - eEncStatus = ENUM_WEP_ENABLED; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetEncryptionStatus, - &eEncStatus, - sizeof(ENUM_PARAM_ENCRYPTION_STATUS_T), - FALSE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("wlanoidSetEncryptionStatus fail 0x%lx\n", rStatus)); - return -EFAULT; - } - - } else { - DBGLOG(INIT, INFO, ("key length %x\n", prIWEncExt->key_len)); - DBGLOG(INIT, INFO, ("key error\n")); - } - - break; - case IW_ENCODE_ALG_TKIP: - case IW_ENCODE_ALG_CCMP: -#if CFG_SUPPORT_802_11W - case IW_ENCODE_ALG_AES_CMAC: -#endif - { - - /* KeyID */ - prKey->u4KeyIndex = (prEnc->flags & IW_ENCODE_INDEX) ? - (prEnc->flags & IW_ENCODE_INDEX) -1: 0; -#if CFG_SUPPORT_802_11W - if (prKey->u4KeyIndex > 5) -#else - if (prKey->u4KeyIndex > 3) -#endif - { - DBGLOG(INIT, INFO, ("key index error:0x%lx\n", prKey->u4KeyIndex)); - /* key id is out of range */ - return -EINVAL; - } - - /* bit(31) and bit(30) are shared by pKey and pRemoveKey */ - /* Tx Key Bit(31)*/ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { - prKey->u4KeyIndex |= 0x1UL << 31; - } - - /* Pairwise Key Bit(30) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* group key */ - } - else { - /* pairwise key */ - prKey->u4KeyIndex |= 0x1UL << 30; - } - - } - /* Rx SC Bit(29) */ - if (prIWEncExt->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - prKey->u4KeyIndex |= 0x1UL << 29; - memcpy(&prKey->rKeyRSC, prIWEncExt->rx_seq, IW_ENCODE_SEQ_MAX_SIZE); - } - - /* BSSID */ - memcpy(prKey->arBSSID, prIWEncExt->addr.sa_data, 6); - - /* switch tx/rx MIC key for sta */ - if (prIWEncExt->alg == IW_ENCODE_ALG_TKIP && prIWEncExt->key_len == 32) { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, 16); - memcpy(((PUINT_8)prKey->aucKeyMaterial) + 16, prIWEncExt->key + 24, 8); - memcpy((prKey->aucKeyMaterial) + 24, prIWEncExt->key + 16, 8); - } - else { - memcpy(prKey->aucKeyMaterial, prIWEncExt->key, prIWEncExt->key_len); - } - - prKey->u4KeyLength = prIWEncExt->key_len; - prKey->u4Length = ((UINT_32)&(((P_PARAM_KEY_T)0)->aucKeyMaterial)) + prKey->u4KeyLength; - - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetAddKey, - prKey, - prKey->u4Length, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add key error:%lx\n", rStatus)); - return -EFAULT; - } - break; - } - } - - return 0; -} /* wext_set_encode_ext */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set country code -* -* \param[in] prDev Net device requested. -* \param[in] prIwrInfo NULL. -* \param[in] pu4Mode Pointer to new operation mode. -* \param[in] pcExtra NULL. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If new mode is not supported. -* -* \note Device will run in new operation mode if it is valid. -*/ -/*----------------------------------------------------------------------------*/ -static int -wext_set_country ( - IN struct net_device *prNetDev, - IN struct iwreq *iwr - ) -{ - P_GLUE_INFO_T prGlueInfo; - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - UINT_8 aucCountry[2]; - - ASSERT(prNetDev); - - /* iwr->u.data.pointer should be like "COUNTRY US", "COUNTRY EU" - * and "COUNTRY JP" - */ - if (FALSE == GLUE_CHK_PR2(prNetDev, iwr) || - !iwr->u.data.pointer || iwr->u.data.length < 10) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - aucCountry[0] = *((PUINT_8)iwr->u.data.pointer + 8); - aucCountry[1] = *((PUINT_8)iwr->u.data.pointer + 9); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetCountryCode, - &aucCountry[0], - 2, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - return 0; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief ioctl() (Linux Wireless Extensions) routines -* -* \param[in] prDev Net device requested. -* \param[in] ifr The ifreq structure for seeting the wireless extension. -* \param[in] i4Cmd The wireless extension ioctl command. -* -* \retval zero On success. -* \retval -EOPNOTSUPP If the cmd is not supported. -* \retval -EFAULT If copy_to_user goes wrong. -* \retval -EINVAL If any value's out of range. -* -* \note -*/ -/*----------------------------------------------------------------------------*/ -int -wext_support_ioctl ( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *iwr = (struct iwreq*)prIfReq; - struct iw_request_info rIwReqInfo; - int ret = 0; - char *prExtraBuf = NULL; - UINT_32 u4ExtraSize = 0; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - //printk("%d CMD:0x%x\n", jiffies_to_msecs(jiffies), i4Cmd); - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case SIOCGIWNAME: /* 0x8B01, get wireless protocol name */ - ret = wext_get_name(prDev, &rIwReqInfo, (char *)&iwr->u.name, NULL); - break; - - /* case SIOCSIWNWID: 0x8B02, deprecated */ - /* case SIOCGIWNWID: 0x8B03, deprecated */ - - case SIOCSIWFREQ: /* 0x8B04, set channel */ - ret = wext_set_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCGIWFREQ: /* 0x8B05, get channel */ - ret = wext_get_freq(prDev, NULL, &iwr->u.freq, NULL); - break; - - case SIOCSIWMODE: /* 0x8B06, set operation mode */ - ret = wext_set_mode(prDev, NULL, &iwr->u.mode, NULL); - //ret = 0; - break; - - case SIOCGIWMODE: /* 0x8B07, get operation mode */ - ret = wext_get_mode(prDev, NULL, &iwr->u.mode, NULL); - break; - - /* case SIOCSIWSENS: 0x8B08, unsupported */ - /* case SIOCGIWSENS: 0x8B09, unsupported */ - - /* case SIOCSIWRANGE: 0x8B0A, unused */ - case SIOCGIWRANGE: /* 0x8B0B, get range of parameters */ - if (iwr->u.data.pointer != NULL) { - /* Buffer size shoule be large enough */ - if (iwr->u.data.length < sizeof(struct iw_range)) { - ret = -E2BIG; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_range), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* reset all fields */ - memset(prExtraBuf, 0, sizeof(struct iw_range)); - iwr->u.data.length = sizeof(struct iw_range); - - ret = wext_get_range(prDev, NULL, &iwr->u.data, prExtraBuf); - /* Push up to the caller */ - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_range)); - prExtraBuf = NULL; - } - else { - ret = -EINVAL; - } - break; - - case SIOCSIWPRIV: /* 0x8B0C, Country */ - ret = wext_set_country(prDev, iwr); - break; - - /* case SIOCGIWPRIV: 0x8B0D, handled in wlan_do_ioctl() */ - /* caes SIOCSIWSTATS: 0x8B0E, unused */ - /* case SIOCGIWSTATS: - get statistics, intercepted by wireless_process_ioctl() in wireless.c, - redirected to dev_iwstats(), dev->get_wireless_stats(). - */ - /* case SIOCSIWSPY: 0x8B10, unsupported */ - /* case SIOCGIWSPY: 0x8B11, unsupported*/ - /* case SIOCSIWTHRSPY: 0x8B12, unsupported */ - /* case SIOCGIWTHRSPY: 0x8B13, unsupported*/ - - case SIOCSIWAP: /* 0x8B14, set access point MAC addresses (BSSID) */ - if (iwr->u.ap_addr.sa_data[0] == 0 && - iwr->u.ap_addr.sa_data[1] == 0 && - iwr->u.ap_addr.sa_data[2] == 0 && - iwr->u.ap_addr.sa_data[3] == 0 && - iwr->u.ap_addr.sa_data[4] == 0 && - iwr->u.ap_addr.sa_data[5] == 0) { - /* WPA Supplicant will set 000000000000 in - ** wpa_driver_wext_deinit(), do nothing here or disassoc again? - */ - ret = 0; - break; - } - else { - ret = wext_set_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - } - break; - - case SIOCGIWAP: /* 0x8B15, get access point MAC addresses (BSSID) */ - ret = wext_get_ap(prDev, NULL, &iwr->u.ap_addr, NULL); - break; - - case SIOCSIWMLME: /* 0x8B16, request MLME operation */ - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_mlme)) { - DBGLOG(INIT, INFO, ("MLME buffer strange:%d\n", iwr->u.data.length)); - ret = -EINVAL; - break; - } - - if (!iwr->u.data.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(sizeof(struct iw_mlme), VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, iwr->u.data.pointer, sizeof(struct iw_mlme))) { - ret = -EFAULT; - } - else { - ret = wext_set_mlme(prDev, NULL, &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, sizeof(struct iw_mlme)); - prExtraBuf = NULL; - break; - - /* case SIOCGIWAPLIST: 0x8B17, deprecated */ - case SIOCSIWSCAN: /* 0x8B18, scan request */ - if (iwr->u.data.pointer == NULL) { - ret = wext_set_scan(prDev, NULL, NULL, NULL); - } -#if WIRELESS_EXT > 17 - else if (iwr->u.data.length == sizeof(struct iw_scan_req)) { - prExtraBuf = kalMemAlloc(MAX_SSID_LEN, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, ((struct iw_scan_req *) (iwr->u.data.pointer))->essid, - ((struct iw_scan_req *) (iwr->u.data.pointer))->essid_len)) { - ret = -EFAULT; - } else { - ret = wext_set_scan(prDev, NULL, (union iwreq_data *) &(iwr->u.data), prExtraBuf); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, MAX_SSID_LEN); - prExtraBuf = NULL; - } -#endif - else { - ret = -EINVAL; - } - break; -#if 1 - case SIOCGIWSCAN: /* 0x8B19, get scan results */ - if (!iwr->u.data.pointer|| !iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - u4ExtraSize = iwr->u.data.length; - /* allocate the same size of kernel buffer to store scan results. */ - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - /* iwr->u.data.length may be updated by wext_get_scan() */ - ret = wext_get_scan(prDev, NULL, &iwr->u.data, prExtraBuf); - if (ret != 0) { - if (ret == -E2BIG) { - DBGLOG(INIT, INFO, ("[wifi] wext_get_scan -E2BIG\n")); - } - } - else { - /* check updated length is valid */ - ASSERT(iwr->u.data.length <= u4ExtraSize); - if (iwr->u.data.length > u4ExtraSize) { - DBGLOG(INIT, INFO, ("Updated result length is larger than allocated (%d > %ld)\n", - iwr->u.data.length, u4ExtraSize)); - iwr->u.data.length = u4ExtraSize; - } - - if (copy_to_user(iwr->u.data.pointer, - prExtraBuf, - iwr->u.data.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - - break; - -#endif - -#if 1 - case SIOCSIWESSID: /* 0x8B1A, set SSID (network name) */ - if (iwr->u.essid.length > IW_ESSID_MAX_SIZE) { - ret = -E2BIG; - break; - } - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE + 4, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = - ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.essid.pointer, - iwr->u.essid.length)) { - ret = -EFAULT; - } - else { - /* Add trailing '\0' for printk */ - //prExtraBuf[iwr->u.essid.length] = 0; - //printk(KERN_INFO "wext_set_essid: %s (%d)\n", prExtraBuf, iwr->u.essid.length); - ret = wext_set_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - //printk ("set essid %d\n", ret); - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE + 4); - prExtraBuf = NULL; - break; - -#endif - - case SIOCGIWESSID: /* 0x8B1B, get SSID */ - if (!iwr->u.essid.pointer) { - ret = -EINVAL; - break; - } - - if (iwr->u.essid.length < IW_ESSID_MAX_SIZE) { - DBGLOG(INIT, INFO, ("[wifi] iwr->u.essid.length:%d too small\n", - iwr->u.essid.length)); - ret = -E2BIG; /* let caller try larger buffer */ - break; - } - - prExtraBuf = kalMemAlloc(IW_ESSID_MAX_SIZE, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - /* iwr->u.essid.length is updated by wext_get_essid() */ - - ret = wext_get_essid(prDev, NULL, &iwr->u.essid, prExtraBuf); - if (ret == 0) { - if (copy_to_user(iwr->u.essid.pointer, prExtraBuf, iwr->u.essid.length)) { - ret = -EFAULT; - } - } - - kalMemFree(prExtraBuf, VIR_MEM_TYPE, IW_ESSID_MAX_SIZE); - prExtraBuf = NULL; - - break; - - /* case SIOCSIWNICKN: 0x8B1C, not supported */ - /* case SIOCGIWNICKN: 0x8B1D, not supported */ - - case SIOCSIWRATE: /* 0x8B20, set default bit rate (bps) */ - //ret = wext_set_rate(prDev, &rIwReqInfo, &iwr->u.bitrate, NULL); - break; - - case SIOCGIWRATE: /* 0x8B21, get current bit rate (bps) */ - ret = wext_get_rate(prDev, NULL, &iwr->u.bitrate, NULL); - break; - - case SIOCSIWRTS: /* 0x8B22, set rts/cts threshold */ - ret = wext_set_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - case SIOCGIWRTS: /* 0x8B23, get rts/cts threshold */ - ret = wext_get_rts(prDev, NULL, &iwr->u.rts, NULL); - break; - - /* case SIOCSIWFRAG: 0x8B24, unsupported */ - case SIOCGIWFRAG: /* 0x8B25, get frag threshold */ - ret = wext_get_frag(prDev, NULL, &iwr->u.frag, NULL); - break; - - case SIOCSIWTXPOW: /* 0x8B26, set relative tx power (in %) */ - ret = wext_set_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - case SIOCGIWTXPOW: /* 0x8B27, get relative tx power (in %) */ - ret = wext_get_txpow(prDev, NULL, &iwr->u.txpower, NULL); - break; - - /* case SIOCSIWRETRY: 0x8B28, unsupported */ - /* case SIOCGIWRETRY: 0x8B29, unsupported */ - -#if 1 - case SIOCSIWENCODE: /* 0x8B2A, set encoding token & mode */ - /* Only DISABLED case has NULL pointer and length == 0 */ - if (iwr->u.encoding.pointer) { - if (iwr->u.encoding.length > 16) { - ret = -E2BIG; - break; - } - - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - case SIOCGIWENCODE: /* 0x8B2B, get encoding token & mode */ - /* check pointer */ - ret = wext_get_encode(prDev, NULL, &iwr->u.encoding, NULL); - break; - - case SIOCSIWPOWER: /* 0x8B2C, set power management */ - ret = wext_set_power(prDev, NULL, &iwr->u.power, NULL); - break; - - case SIOCGIWPOWER: /* 0x8B2D, get power management */ - ret = wext_get_power(prDev, NULL, &iwr->u.power, NULL); - break; - -#if WIRELESS_EXT > 17 - case SIOCSIWGENIE: /* 0x8B30, set gen ie */ - if (iwr->u.data.pointer) { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - if (1 /* wlanQueryWapiMode(prGlueInfo->prAdapter) */) { - /* Fixed length structure */ -#if CFG_SUPPORT_WAPI - if (iwr->u.data.length > 42 /* The max wapi ie buffer */) { - ret = -EINVAL; - break; - } -#endif - u4ExtraSize = iwr->u.data.length; - if (u4ExtraSize) { - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - iwr->u.data.length)) { - ret = -EFAULT; - } - else { - WLAN_STATUS rStatus; - UINT_32 u4BufLen; -#if CFG_SUPPORT_WAPI - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWapiAssocInfo, - prExtraBuf, - u4ExtraSize, - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[wapi] set wapi assoc info error:%lx\n", rStatus); -#endif -#if CFG_SUPPORT_WPS2 - PUINT_8 prDesiredIE = NULL; - if (wextSrchDesiredWPSIE(prExtraBuf, - u4ExtraSize, - 0xDD, - (PUINT_8 *)&prDesiredIE)) { - rStatus = kalIoctl(prGlueInfo, - wlanoidSetWSCAssocInfo, - prDesiredIE, - IE_SIZE(prDesiredIE), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - if (rStatus != WLAN_STATUS_SUCCESS) { - //printk(KERN_INFO "[WSC] set WSC assoc info error:%lx\n", rStatus); - } - } -#endif -#if CFG_SUPPORT_WAPI - } -#endif - } - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - } - break; - - case SIOCGIWGENIE: /* 0x8B31, get gen ie, unused */ - break; - -#endif - - case SIOCSIWAUTH: /* 0x8B32, set auth mode params */ - ret = wext_set_auth(prDev, NULL, &iwr->u.param, NULL); - break; - - /* case SIOCGIWAUTH: 0x8B33, unused? */ - case SIOCSIWENCODEEXT: /* 0x8B34, set extended encoding token & mode */ - if (iwr->u.encoding.pointer) { - u4ExtraSize = iwr->u.encoding.length; - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.encoding.pointer, - iwr->u.encoding.length)) { - ret = -EFAULT; - } - } - else if (iwr->u.encoding.length != 0) { - ret = -EINVAL; - break; - } - - if (ret == 0) { - ret = wext_set_encode_ext(prDev, NULL, &iwr->u.encoding, prExtraBuf); - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - break; - - /* case SIOCGIWENCODEEXT: 0x8B35, unused? */ - - case SIOCSIWPMKSA: /* 0x8B36, pmksa cache operation */ - #if 1 - if (iwr->u.data.pointer) { - /* Fixed length structure */ - if (iwr->u.data.length != sizeof(struct iw_pmksa)) { - ret = -EINVAL; - break; - } - - u4ExtraSize = sizeof(struct iw_pmksa); - prExtraBuf = kalMemAlloc(u4ExtraSize, VIR_MEM_TYPE); - if (!prExtraBuf) { - ret = -ENOMEM; - break; - } - - if (copy_from_user(prExtraBuf, - iwr->u.data.pointer, - sizeof(struct iw_pmksa))) { - ret = -EFAULT; - } - else { - switch(((struct iw_pmksa *)prExtraBuf)->cmd) { - case IW_PMKSA_ADD: - /* - printk(KERN_INFO "IW_PMKSA_ADD [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)pExtraBuf)->bssid.sa_data)); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8 + sizeof(PARAM_BSSID_INFO_T), VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_ADD\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8 + sizeof(PARAM_BSSID_INFO_T); - prPmkid->u4BSSIDInfoCount = 1; - kalMemCopy(prPmkid->arBSSIDInfo->arBSSID, - ((struct iw_pmksa *)prExtraBuf)->bssid.sa_data, - 6); - kalMemCopy(prPmkid->arBSSIDInfo->arPMKID, - ((struct iw_pmksa *)prExtraBuf)->pmkid, - IW_PMKID_LEN); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("add pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8 + sizeof(PARAM_BSSID_INFO_T)); - } - break; - case IW_PMKSA_REMOVE: - /* - printk(KERN_INFO "IW_PMKSA_REMOVE [" MACSTR "]\n", - MAC2STR(((struct iw_pmksa *)buf)->bssid.sa_data)); - */ - break; - case IW_PMKSA_FLUSH: - /* - printk(KERN_INFO "IW_PMKSA_FLUSH\n"); - */ - { - P_GLUE_INFO_T prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - WLAN_STATUS rStatus; - UINT_32 u4BufLen; - P_PARAM_PMKID_T prPmkid; - - prPmkid =(P_PARAM_PMKID_T)kalMemAlloc(8, VIR_MEM_TYPE); - if (!prPmkid) { - DBGLOG(INIT, INFO, ("Can not alloc memory for IW_PMKSA_FLUSH\n")); - ret = -ENOMEM; - break; - } - - prPmkid->u4Length = 8; - prPmkid->u4BSSIDInfoCount = 0; - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetPmkid, - prPmkid, - sizeof(PARAM_PMKID_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(INIT, INFO, ("flush pmkid error:%lx\n", rStatus)); - } - kalMemFree(prPmkid, VIR_MEM_TYPE, 8); - } - break; - default: - DBGLOG(INIT, INFO, ("UNKNOWN iw_pmksa command:%d\n", - ((struct iw_pmksa *)prExtraBuf)->cmd)); - ret = -EFAULT; - break; - } - } - - if (prExtraBuf) { - kalMemFree(prExtraBuf, VIR_MEM_TYPE, u4ExtraSize); - prExtraBuf = NULL; - } - } - else if (iwr->u.data.length != 0) { - ret = -EINVAL; - break; - } - #endif - break; - -#endif - - default: - /* printk(KERN_NOTICE "unsupported IOCTL: 0x%x\n", i4Cmd); */ - ret = -EOPNOTSUPP; - break; - } - - //printk("%ld CMD:0x%x ret:%d\n", jiffies_to_msecs(jiffies), i4Cmd, ret); - - return ret; -} /* wext_support_ioctl */ - - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To send an event (RAW socket pacekt) to user process actively. -* -* \param[in] prGlueInfo Glue layer info. -* \param[in] u4cmd Whcih event command we want to indicate to user process. -* \param[in] pData Data buffer to be indicated. -* \param[in] dataLen Available data size in pData. -* -* \return (none) -* -* \note Event is indicated to upper layer if cmd is supported and data is valid. -* Using of kernel symbol wireless_send_event(), which is defined in -* after WE-14 (2.4.20). -*/ -/*----------------------------------------------------------------------------*/ -void -wext_indicate_wext_event ( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4dataLen - ) -{ - union iwreq_data wrqu; - unsigned char *pucExtraInfo = NULL; -#if WIRELESS_EXT >= 15 - unsigned char *pucDesiredIE = NULL; - unsigned char aucExtraInfoBuf[200]; -#endif -#if WIRELESS_EXT < 18 - int i; -#endif - - memset(&wrqu, 0, sizeof(wrqu)); - - switch (u4Cmd) { - case SIOCGIWTXPOW: - memcpy(&wrqu.power, pucData, u4dataLen); - break; - case SIOCGIWSCAN: - complete_all(&prGlueInfo->rScanComp); - break; - - case SIOCGIWAP: - if (pucData) { - memcpy(&wrqu.ap_addr.sa_data, pucData, ETH_ALEN); - } - else { - memset(&wrqu.ap_addr.sa_data, 0, ETH_ALEN); - } - break; - - case IWEVASSOCREQIE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - /* do supplicant a favor, parse to the start of WPA/RSN IE */ - if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0x30, &pucDesiredIE)) { - /* RSN IE found */ - } -#if 0 - else if (wextSrchDesiredWPSIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPS IE found */ - } -#endif - else if (wextSrchDesiredWPAIE(pucData, u4dataLen, 0xDD, &pucDesiredIE)) { - /* WPA IE found */ - } -#if CFG_SUPPORT_WAPI /* Android+ */ - else if (wextSrchDesiredWAPIIE(pucData, u4dataLen, &pucDesiredIE)) { - //printk("wextSrchDesiredWAPIIE!!\n"); - /* WAPI IE found */ - } -#endif - else { - /* no WPA/RSN IE found, skip this event */ - goto skip_indicate_event; - } - - #if WIRELESS_EXT < 18 - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, "ASSOCINFO(ReqIEs="); - /* printk(KERN_DEBUG "assoc info buffer size needed:%d\n", infoElemLen * 2 + 17); */ - /* translate binary string to hex string, requirement of IWEVCUSTOM */ - for (i = 0; i < pucDesiredIE[1] + 2 ; ++i) { - pucExtraInfo += sprintf(pucExtraInfo, "%02x", pucDesiredIE[i]); - } - pucExtraInfo = aucExtraInfoBuf; - wrqu.data.length = 17 + (pucDesiredIE[1] + 2) * 2; - #else - /* IWEVASSOCREQIE, indicate binary string */ - pucExtraInfo = pucDesiredIE; - wrqu.data.length = pucDesiredIE[1] + 2; - #endif -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVMICHAELMICFAILURE: -#if WIRELESS_EXT < 15 - /* under WE-15, no suitable Event can be used */ - goto skip_indicate_event; -#else - if (pucData) { - P_PARAM_AUTH_REQUEST_T pAuthReq = (P_PARAM_AUTH_REQUEST_T)pucData; - /* under WE-18, only IWEVCUSTOM can be used */ - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - pucExtraInfo += sprintf(pucExtraInfo, - "MLME-MICHAELMICFAILURE.indication "); - pucExtraInfo += sprintf(pucExtraInfo, - "%s", - (pAuthReq->u4Flags == PARAM_AUTH_REQUEST_GROUP_ERROR) ? - "groupcast " : "unicast "); - - wrqu.data.length = pucExtraInfo - aucExtraInfoBuf; - pucExtraInfo = aucExtraInfoBuf; - } -#endif /* WIRELESS_EXT < 15 */ - break; - - case IWEVPMKIDCAND: - if (prGlueInfo->rWpaInfo.u4WpaVersion == IW_AUTH_WPA_VERSION_WPA2 && - prGlueInfo->rWpaInfo.u4KeyMgmt == IW_AUTH_KEY_MGMT_802_1X) { - - /* only used in WPA2 */ -#if WIRELESS_EXT >= 18 - P_PARAM_PMKID_CANDIDATE_T prPmkidCand = (P_PARAM_PMKID_CANDIDATE_T)pucData; - - struct iw_pmkid_cand rPmkidCand; - pucExtraInfo = aucExtraInfoBuf; - - rPmkidCand.flags = prPmkidCand->u4Flags; - rPmkidCand.index = 0; - kalMemCopy(rPmkidCand.bssid.sa_data, prPmkidCand->arBSSID, 6); - - kalMemCopy(pucExtraInfo, (PUINT_8)&rPmkidCand, sizeof(struct iw_pmkid_cand)); - wrqu.data.length = sizeof(struct iw_pmkid_cand); - - /* pmkid canadidate list is supported after WE-18 */ - /* indicate struct iw_pmkid_cand */ -#else - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, WE < 18\n"); */ - goto skip_indicate_event; -#endif - } - else { - /* printk(KERN_INFO "IWEVPMKIDCAND event skipped, NOT WPA2\n"); */ - goto skip_indicate_event; - } - break; - - case IWEVCUSTOM: - u4Cmd = IWEVCUSTOM; - pucExtraInfo = aucExtraInfoBuf; - kalMemCopy(pucExtraInfo, pucData, sizeof(PTA_IPC_T)); - wrqu.data.length = sizeof(PTA_IPC_T); - break; - - default: - /* printk(KERN_INFO "Unsupported wext event:%x\n", cmd); */ - goto skip_indicate_event; - } - - /* Send event to user space */ - wireless_send_event(prGlueInfo->prDevHandler, u4Cmd, &wrqu, pucExtraInfo); - -skip_indicate_event: - return; -} /* wext_indicate_wext_event */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief A method of struct net_device, to get the network interface statistical -* information. -* -* Whenever an application needs to get statistics for the interface, this method -* is called. This happens, for example, when ifconfig or netstat -i is run. -* -* \param[in] pDev Pointer to struct net_device. -* -* \return net_device_stats buffer pointer. -* -*/ -/*----------------------------------------------------------------------------*/ -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ) -{ - - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - P_GLUE_INFO_T prGlueInfo = NULL; - struct iw_statistics *pStats = NULL; - INT_32 i4Rssi; - UINT_32 bufLen = 0; - - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - goto stat_out; - } - - pStats = (struct iw_statistics *) (&(prGlueInfo->rIwStats)); - - if (!prDev || !netif_carrier_ok(prDev)) { - /* network not connected */ - goto stat_out; - } - - rStatus = kalIoctl(prGlueInfo, - wlanoidQueryRssi, - &i4Rssi, - sizeof(i4Rssi), - TRUE, - TRUE, - TRUE, - FALSE, - &bufLen); - -stat_out: - return pStats; -} /* wlan_get_wireless_stats */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief To report the private supported IOCTLs table to user space. -* -* \param[in] prNetDev Net device requested. -* \param[out] prIfReq Pointer to ifreq structure, content is copied back to -* user space buffer in gl_iwpriv_table. -* -* \retval 0 For success. -* \retval -E2BIG For user's buffer size is too small. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_point *prData= (struct iw_point *)&prIwReq->u.data; - UINT_16 u2BufferSize = 0; - - u2BufferSize = prData->length; - - /* update our private table size */ - prData->length = (__u16)sizeof(rIwPrivTable)/sizeof(struct iw_priv_args); - - if (u2BufferSize < prData->length) { - return -E2BIG; - } - - if (prData->length) { - if (copy_to_user(prData->pointer, rIwPrivTable, sizeof(rIwPrivTable))) { - return -EFAULT; - } - } - - return 0; -} /* wext_get_priv */ - -#endif /* WIRELESS_EXT */ - - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_wext_priv.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_wext_priv.c deleted file mode 100755 index bab24b36ef43..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/gl_wext_priv.c +++ /dev/null @@ -1,2313 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/gl_wext_priv.c#1 $ -*/ - -/*! \file gl_wext_priv.c - \brief This file includes private ioctl support. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_wext_priv.c $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 07 17 2012 yuche.tsai - * NULL - * Let netdev bring up. - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 03 20 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function[WCXRP00001202] [MT6628 Wi-Fi][FW] Adding the New PN init code - * use return to avoid the ioctl return not supported - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 02 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Fixed typo. - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 07 28 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings - * Add BWCS cmd and event. - * - * 07 18 2011 chinghwa.yu - * [WCXRP00000063] Update BCM CoEx design and settings[WCXRP00000612] [MT6620 Wi-Fi] [FW] CSD update SWRDD algorithm - * Add CMD/Event for RDD and BWCS. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 26 2011 wh.su - * [WCXRP00000396] [MT6620 Wi-Fi][Driver] Support Sw Ctrl ioctl at linux - * adding the SW cmd ioctl support, use set/get structure ioctl. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Adjust OID order. - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 12 15 2010 george.huang - * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function - * Support set PS profile and set WMM-PS related iwpriv. - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 24 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * correct typo for NVRAM access. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * enable OID_CUSTOM_MTK_WIFI_TEST for RFTest & META tool - * - * 05 29 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * fix private ioctl for rftest - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support -** \main\maintrunk.MT5921\32 2009-10-08 10:33:25 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\31 2009-09-29 16:46:21 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\30 2009-09-29 14:46:47 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\29 2009-09-29 14:28:48 GMT mtk01090 -** Fix compile warning -** \main\maintrunk.MT5921\28 2009-09-28 22:21:38 GMT mtk01090 -** Refine lines to supress compile warning -** \main\maintrunk.MT5921\27 2009-09-28 20:19:14 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\26 2009-08-18 22:56:53 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\25 2009-05-07 22:26:15 GMT mtk01089 -** Add mandatory and private IO control for Linux BWCS -** \main\maintrunk.MT5921\24 2009-04-29 10:07:05 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\23 2009-04-24 09:09:45 GMT mtk01088 -** mark the code not used at linux supplicant v0.6.7 -** \main\maintrunk.MT5921\22 2008-11-24 21:03:51 GMT mtk01425 -** 1. Add PTA_ENABLED flag -** \main\maintrunk.MT5921\21 2008-08-29 14:55:59 GMT mtk01088 -** adjust the code for meet the coding style, and add assert check -** \main\maintrunk.MT5921\20 2008-07-16 15:23:20 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\19 2008-07-15 17:43:11 GMT mtk01084 -** modify variable name -** \main\maintrunk.MT5921\18 2008-07-14 14:37:58 GMT mtk01104 -** Add exception handle about length in function priv_set_struct() -** \main\maintrunk.MT5921\17 2008-07-14 13:55:32 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\16 2008-07-09 00:20:15 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\15 2008-06-02 11:15:22 GMT mtk01461 -** Update after wlanoidSetPowerMode changed -** \main\maintrunk.MT5921\14 2008-05-30 19:31:07 GMT mtk01461 -** Add IOCTL for Power Mode -** \main\maintrunk.MT5921\13 2008-05-30 18:57:15 GMT mtk01461 -** Not use wlanoidSetCSUMOffloadForLinux() -** \main\maintrunk.MT5921\12 2008-05-30 15:13:18 GMT mtk01084 -** rename wlanoid -** \main\maintrunk.MT5921\11 2008-05-29 14:16:31 GMT mtk01084 -** rename for wlanoidSetBeaconIntervalForLinux -** \main\maintrunk.MT5921\10 2008-04-17 23:06:37 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\9 2008-03-31 21:00:55 GMT mtk01461 -** Add priv IOCTL for VOIP setting -** \main\maintrunk.MT5921\8 2008-03-31 13:49:43 GMT mtk01461 -** Add priv ioctl to turn on / off roaming -** \main\maintrunk.MT5921\7 2008-03-26 15:35:14 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\6 2008-03-11 14:50:59 GMT mtk01461 -** Unify priv ioctl -** \main\maintrunk.MT5921\5 2007-11-06 19:32:30 GMT mtk01088 -** add WPS code -** \main\maintrunk.MT5921\4 2007-10-30 12:01:39 GMT MTK01425 -** 1. Update wlanQueryInformation and wlanSetInformation -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "gl_wext_priv.h" -#if CFG_SUPPORT_WAPI -#include "gl_sec.h" -#endif -#if CFG_ENABLE_WIFI_DIRECT -#include "gl_p2p_os.h" -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define NUM_SUPPORTED_OIDS (sizeof(arWlanOidReqTable) / sizeof(WLAN_REQ_ENTRY)) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ); - -#if 0 /* CFG_SUPPORT_WPS */ -static int -priv_set_appie ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); - -static int -priv_set_filter ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - OUT char *pcExtra - ); -#endif /* CFG_SUPPORT_WPS */ - -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ); - -#if 0 -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ); - -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); -#endif - -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ); - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static UINT_8 aucOidBuf[4096] = {0}; - -/* OID processing table */ -/* Order is important here because the OIDs should be in order of - increasing value for binary searching. */ -static WLAN_REQ_ENTRY arWlanOidReqTable[] = { - /* - {(NDIS_OID)rOid, - (PUINT_8)pucOidName, - fgQryBufLenChecking, fgSetBufLenChecking, fgIsHandleInGlueLayerOnly, u4InfoBufLen, - pfOidQueryHandler, - pfOidSetHandler} - */ - /* General Operational Characteristics */ - - /* Ethernet Operational Characteristics */ - {OID_802_3_CURRENT_ADDRESS, - DISP_STRING("OID_802_3_CURRENT_ADDRESS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 6, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentAddr, - NULL}, - - /* OID_802_3_MULTICAST_LIST */ - /* OID_802_3_MAXIMUM_LIST_SIZE */ - /* Ethernet Statistics */ - - /* NDIS 802.11 Wireless LAN OIDs */ - {OID_802_11_SUPPORTED_RATES, - DISP_STRING("OID_802_11_SUPPORTED_RATES"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_RATES_EX), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySupportedRates, - NULL}, - /* - {OID_802_11_CONFIGURATION, - DISP_STRING("OID_802_11_CONFIGURATION"), - TRUE, TRUE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_802_11_CONFIG_T), - (PFN_OID_HANDLER_FUNC_REQ)reqExtQueryConfiguration, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetConfiguration}, - */ - {OID_PNP_SET_POWER, - DISP_STRING("OID_PNP_SET_POWER"), - TRUE, FALSE, ENUM_OID_GLUE_EXTENSION, sizeof(PARAM_DEVICE_POWER_STATE), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)reqExtSetAcpiDevicePowerState}, - - /* Custom OIDs */ - {OID_CUSTOM_OID_INTERFACE_VERSION, - DISP_STRING("OID_CUSTOM_OID_INTERFACE_VERSION"), - TRUE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryOidInterfaceVersion, - NULL}, - - /* -#if PTA_ENABLED - {OID_CUSTOM_BT_COEXIST_CTRL, - DISP_STRING("OID_CUSTOM_BT_COEXIST_CTRL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_BT_COEXIST_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtCoexistCtrl}, -#endif - */ - - /* - {OID_CUSTOM_POWER_MANAGEMENT_PROFILE, - DISP_STRING("OID_CUSTOM_POWER_MANAGEMENT_PROFILE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPwrMgmtProfParam, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPwrMgmtProfParam}, - {OID_CUSTOM_PATTERN_CONFIG, - DISP_STRING("OID_CUSTOM_PATTERN_CONFIG"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_PATTERN_SEARCH_CONFIG_STRUC_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPatternConfig}, - {OID_CUSTOM_BG_SSID_SEARCH_CONFIG, - DISP_STRING("OID_CUSTOM_BG_SSID_SEARCH_CONFIG"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBgSsidParam}, - {OID_CUSTOM_VOIP_SETUP, - DISP_STRING("OID_CUSTOM_VOIP_SETUP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryVoipConnectionStatus, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetVoipConnectionStatus}, - {OID_CUSTOM_ADD_TS, - DISP_STRING("OID_CUSTOM_ADD_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidAddTS}, - {OID_CUSTOM_DEL_TS, - DISP_STRING("OID_CUSTOM_DEL_TS"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidDelTS}, - */ - - /* -#if CFG_LP_PATTERN_SEARCH_SLT - {OID_CUSTOM_SLT, - DISP_STRING("OID_CUSTOM_SLT"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySltResult, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSltMode}, -#endif - - {OID_CUSTOM_ROAMING_EN, - DISP_STRING("OID_CUSTOM_ROAMING_EN"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRoamingFunction, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetRoamingFunction}, - {OID_CUSTOM_WMM_PS_TEST, - DISP_STRING("OID_CUSTOM_WMM_PS_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWiFiWmmPsTest}, - {OID_CUSTOM_COUNTRY_STRING, - DISP_STRING("OID_CUSTOM_COUNTRY_STRING"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCurrentCountry, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetCurrentCountry}, - -#if CFG_SUPPORT_802_11D - {OID_CUSTOM_MULTI_DOMAIN_CAPABILITY, - DISP_STRING("OID_CUSTOM_MULTI_DOMAIN_CAPABILITY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMultiDomainCap, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMultiDomainCap}, -#endif - - {OID_CUSTOM_GPIO2_MODE, - DISP_STRING("OID_CUSTOM_GPIO2_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_PARAM_GPIO2_MODE_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetGPIO2Mode}, - {OID_CUSTOM_CONTINUOUS_POLL, - DISP_STRING("OID_CUSTOM_CONTINUOUS_POLL"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CONTINUOUS_POLL_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryContinuousPollInterval, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetContinuousPollProfile}, - {OID_CUSTOM_DISABLE_BEACON_DETECTION, - DISP_STRING("OID_CUSTOM_DISABLE_BEACON_DETECTION"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryDisableBeaconDetectionFunc, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisableBeaconDetectionFunc}, - */ - - /* WPS */ - /* - {OID_CUSTOM_DISABLE_PRIVACY_CHECK, - DISP_STRING("OID_CUSTOM_DISABLE_PRIVACY_CHECK"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetDisablePriavcyCheck}, - */ - - {OID_CUSTOM_MCR_RW, - DISP_STRING("OID_CUSTOM_MCR_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MCR_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMcrRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetMcrWrite}, - - {OID_CUSTOM_EEPROM_RW, - DISP_STRING("OID_CUSTOM_EEPROM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_EEPROM_RW_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetEepromWrite}, - - {OID_CUSTOM_SW_CTRL, - DISP_STRING("OID_CUSTOM_SW_CTRL"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_SW_CTRL_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQuerySwCtrlRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetSwCtrlWrite}, - - {OID_CUSTOM_MEM_DUMP, - DISP_STRING("OID_CUSTOM_MEM_DUMP"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_MEM_DUMP_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryMemDump, - NULL}, - - {OID_CUSTOM_TEST_MODE, - DISP_STRING("OID_CUSTOM_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetTestMode}, - - /* - {OID_CUSTOM_TEST_RX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_RX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_RX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestRxStatus, - NULL}, - {OID_CUSTOM_TEST_TX_STATUS, - DISP_STRING("OID_CUSTOM_TEST_TX_STATUS"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_RFTEST_TX_STATUS_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryRfTestTxStatus, - NULL}, - */ - {OID_CUSTOM_ABORT_TEST_MODE, - DISP_STRING("OID_CUSTOM_ABORT_TEST_MODE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAbortTestMode}, - {OID_CUSTOM_MTK_WIFI_TEST, - DISP_STRING("OID_CUSTOM_MTK_WIFI_TEST"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_MTK_WIFI_TEST_STRUC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestQueryAutoTest, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidRftestSetAutoTest}, - - /* OID_CUSTOM_EMULATION_VERSION_CONTROL */ - - /* BWCS */ -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS - {OID_CUSTOM_BWCS_CMD, - DISP_STRING("OID_CUSTOM_BWCS_CMD"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PTA_IPC_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBT, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBT}, -#endif - -/* {OID_CUSTOM_SINGLE_ANTENNA, - DISP_STRING("OID_CUSTOM_SINGLE_ANTENNA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryBtSingleAntenna, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetBtSingleAntenna}, - {OID_CUSTOM_SET_PTA, - DISP_STRING("OID_CUSTOM_SET_PTA"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 4, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryPta, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetPta}, - */ - - { OID_CUSTOM_MTK_NVRAM_RW, - DISP_STRING("OID_CUSTOM_MTK_NVRAM_RW"), - TRUE, TRUE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_CUSTOM_NVRAM_RW_STRUCT_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryNvramRead, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetNvramWrite }, - - { OID_CUSTOM_CFG_SRC_TYPE, - DISP_STRING("OID_CUSTOM_CFG_SRC_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_CFG_SRC_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryCfgSrcType, - NULL }, - - { OID_CUSTOM_EEPROM_TYPE, - DISP_STRING("OID_CUSTOM_EEPROM_TYPE"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(ENUM_EEPROM_TYPE_T), - (PFN_OID_HANDLER_FUNC_REQ)wlanoidQueryEepromType, - NULL }, - -#if CFG_SUPPORT_WAPI - {OID_802_11_WAPI_MODE, - DISP_STRING("OID_802_11_WAPI_MODE"), - FALSE, TRUE, ENUM_OID_DRIVER_CORE, 4, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiMode}, - {OID_802_11_WAPI_ASSOC_INFO, - DISP_STRING("OID_802_11_WAPI_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiAssocInfo}, - {OID_802_11_SET_WAPI_KEY, - DISP_STRING("OID_802_11_SET_WAPI_KEY"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, sizeof(PARAM_WPI_KEY_T), - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWapiKey}, -#endif - -#if CFG_SUPPORT_WPS2 - {OID_802_11_WSC_ASSOC_INFO, - DISP_STRING("OID_802_11_WSC_ASSOC_INFO"), - FALSE, FALSE, ENUM_OID_DRIVER_CORE, 0, - NULL, - (PFN_OID_HANDLER_FUNC_REQ)wlanoidSetWSCAssocInfo}, -#endif -}; - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Dispatching function for private ioctl region (SIOCIWFIRSTPRIV ~ -* SIOCIWLASTPRIV). -* -* \param[in] prNetDev Net device requested. -* \param[in] prIfReq Pointer to ifreq structure. -* \param[in] i4Cmd Command ID between SIOCIWFIRSTPRIV and SIOCIWLASTPRIV. -* -* \retval 0 for success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_support_ioctl ( - IN struct net_device *prNetDev, - IN OUT struct ifreq *prIfReq, - IN int i4Cmd - ) -{ - /* prIfReq is verified in the caller function wlanDoIOCTL() */ - struct iwreq *prIwReq = (struct iwreq *)prIfReq; - struct iw_request_info rIwReqInfo; - - /* prDev is verified in the caller function wlanDoIOCTL() */ - - /* Prepare the call */ - rIwReqInfo.cmd = (__u16)i4Cmd; - rIwReqInfo.flags = 0; - - switch (i4Cmd) { - case IOCTL_SET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_set_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_GET_INT: - /* NOTE(Kevin): 1/3 INT Type <= IFNAMSIZ, so we don't need copy_from/to_user() */ - return priv_get_int(prNetDev, &rIwReqInfo, &(prIwReq->u), (char *) &(prIwReq->u)); - - case IOCTL_SET_STRUCT: - case IOCTL_SET_STRUCT_FOR_EM: - return priv_set_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - case IOCTL_GET_STRUCT: - return priv_get_struct(prNetDev, &rIwReqInfo, &prIwReq->u, (char *) &(prIwReq->u)); - - default: - return -EOPNOTSUPP; - - } /* end of switch */ - -}/* priv_support_ioctl */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_PTA_IPC_T prPtaIpc; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_MODE: - //printk("TestMode=%ld\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY) { - prNdisReq->ndisOidCmd = OID_CUSTOM_TEST_MODE; - } - else if (pu4IntBuf[1] == 0) { - prNdisReq->ndisOidCmd = OID_CUSTOM_ABORT_TEST_MODE; - } - else { - status = 0; - break; - } - prNdisReq->inNdisOidlength = 0; - prNdisReq->outNdisOidLength = 0; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - if (pu4IntBuf[1] == PRIV_CMD_TEST_MAGIC_KEY && - pu4IntBuf[2] == PRIV_CMD_TEST_MAGIC_KEY) { - prGlueInfo->fgMcrAccessAllowed = TRUE; - } - status = 0; - break; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; -#endif - - case PRIV_CMD_SW_CTRL: - //printk("addr=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - case PRIV_CMD_CSUM_OFFLOAD: - { - UINT_32 u4CSUMFlags; - - - if (pu4IntBuf[1] == 1) { - u4CSUMFlags = CSUM_OFFLOAD_EN_ALL; - } - else if (pu4IntBuf[1] == 0) { - u4CSUMFlags = 0; - } - else { - return -EINVAL; - } - - if (kalIoctl(prGlueInfo, - wlanoidSetCSUMOffload, - (PVOID)&u4CSUMFlags, - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen - ) == WLAN_STATUS_SUCCESS) { - if (pu4IntBuf[1] == 1) { - prNetDev->features |= NETIF_F_HW_CSUM; - } else if (pu4IntBuf[1] == 0) { - prNetDev->features &= ~NETIF_F_HW_CSUM; - } - } - } - break; -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - case PRIV_CMD_POWER_MODE: - kalIoctl(prGlueInfo, - wlanoidSet802dot11PowerSaveProfile, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - break; - - case PRIV_CMD_WMM_PS: - { - PARAM_CUSTOM_WMM_PS_TEST_STRUC_T rWmmPsTest; - - rWmmPsTest.bmfgApsdEnAc = (UINT_8)pu4IntBuf[1]; - rWmmPsTest.ucIsEnterPsAtOnce = (UINT_8)pu4IntBuf[2]; - rWmmPsTest.ucIsDisableUcTrigger = (UINT_8)pu4IntBuf[3]; - rWmmPsTest.reserved = 0; - - kalIoctl(prGlueInfo, - wlanoidSetWiFiWmmPsTest, - (PVOID)&rWmmPsTest, - sizeof(PARAM_CUSTOM_WMM_PS_TEST_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - } - break; - - #if 0 - case PRIV_CMD_ADHOC_MODE: - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAdHocMode, - (PVOID)&pu4IntBuf[1], /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(UINT_32), - &u4BufLen); - break; - #endif - - case PRIV_CUSTOM_BWCS_CMD: - - DBGLOG(REQ, INFO, ("pu4IntBuf[1] = %x, size of PTA_IPC_T = %d.\n", pu4IntBuf[1], sizeof(PARAM_PTA_IPC_T))); - - prPtaIpc = (P_PTA_IPC_T) aucOidBuf; - prPtaIpc->u.aucBTPParams[0] = (UINT_8) (pu4IntBuf[1] >> 24); - prPtaIpc->u.aucBTPParams[1] = (UINT_8) (pu4IntBuf[1] >> 16); - prPtaIpc->u.aucBTPParams[2] = (UINT_8) (pu4IntBuf[1] >> 8); - prPtaIpc->u.aucBTPParams[3] = (UINT_8) (pu4IntBuf[1]); - - DBGLOG(REQ, INFO, ("BCM BWCS CMD : PRIV_CUSTOM_BWCS_CMD : aucBTPParams[0] = %02x, aucBTPParams[1] = %02x, aucBTPParams[2] = %02x, aucBTPParams[3] = %02x.\n", - prPtaIpc->u.aucBTPParams[0], - prPtaIpc->u.aucBTPParams[1], - prPtaIpc->u.aucBTPParams[2], - prPtaIpc->u.aucBTPParams[3])); - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - sizeof(PARAM_PTA_IPC_T), - &u4BufLen); - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - - case PRIV_CMD_BAND_CONFIG: - { - DBGLOG(INIT, INFO, ("CMD set_band=%u\n", pu4IntBuf[1])); - } - break; - -#if CFG_ENABLE_WIFI_DIRECT - case PRIV_CMD_P2P_MODE: - { - PARAM_CUSTOM_P2P_SET_STRUC_T rSetP2P; - WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS; - - rSetP2P.u4Enable = pu4IntBuf[1]; - rSetP2P.u4Mode = pu4IntBuf[2]; - - if(!rSetP2P.u4Enable) { - p2pNetUnregister(prGlueInfo, TRUE); - } - - rWlanStatus = kalIoctl(prGlueInfo, - wlanoidSetP2pMode, - (PVOID)&rSetP2P, /* pu4IntBuf[0] is used as input SubCmd */ - sizeof(PARAM_CUSTOM_P2P_SET_STRUC_T), - FALSE, - FALSE, - TRUE, - FALSE, - &u4BufLen); - - if(rSetP2P.u4Enable) { - p2pNetRegister(prGlueInfo, TRUE); - } - - - } - break; -#endif - - default: - return -EOPNOTSUPP; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_int ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - PUINT_32 pu4IntBuf; - P_GLUE_INFO_T prGlueInfo; - UINT_32 u4BufLen = 0; - int status = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->mode; - pu4IntBuf = (PUINT_32) pcExtra; - - switch (u4SubCmd) { - case PRIV_CMD_TEST_CMD: - //printk("CMD=0x%08lx, data=0x%08lx\n", pu4IntBuf[1], pu4IntBuf[2]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MTK_WIFI_TEST; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - /* - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], 4)) { - printk(KERN_NOTICE "priv_get_int() copy_to_user oidBuf fail(3)\n"); - return -EFAULT; - } - */ - } - return status; - -#if CFG_SUPPORT_PRIV_MCR_RW - case PRIV_CMD_ACCESS_MCR: - //printk("addr=0x%08lx\n", pu4IntBuf[1]); - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MCR_RW; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; -#endif - - case PRIV_CMD_DUMP_MEM: - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - -#if 1 - if (!prGlueInfo->fgMcrAccessAllowed) { - status = 0; - return status; - } -#endif - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_MEM_DUMP; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[0]; - } - return status; - - case PRIV_CMD_SW_CTRL: - //printk(" addr=0x%08lx\n", pu4IntBuf[1]); - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - kalMemCopy(&prNdisReq->ndisOidContent[0], &pu4IntBuf[1], 8); - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - //printk("Result=%ld\n", *(PUINT_32)&prNdisReq->ndisOidContent[4]); - prIwReqData->mode = *(PUINT_32)&prNdisReq->ndisOidContent[4]; - } - return status; - - #if 0 - case PRIV_CMD_BEACON_PERIOD: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_POWER_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQuery802dot11PowerSaveProfile, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - - case PRIV_CMD_ADHOC_MODE: - status = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAdHocMode, - (PVOID)pu4IntBuf, - sizeof(UINT_32), - &u4BufLen); - return status; - #endif - - case PRIV_CMD_BAND_CONFIG: - DBGLOG(INIT, INFO, ("CMD get_band=\n")); - prIwReqData->mode = 0; - return status; - - default: - break; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i, j = 0; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - if (kalIsAPmode(prGlueInfo)) { - for (i = 0; i < NumOfChannel; i++) { - if ((aucChannelList[i].ucChannelNum <= 13) || - (aucChannelList[i].ucChannelNum == 36 || aucChannelList[i].ucChannelNum == 40 || - aucChannelList[i].ucChannelNum == 44 || aucChannelList[i].ucChannelNum == 48)) { - ch[j] = (INT_32)aucChannelList[i].ucChannelNum; - j++; - } - } - } - else { - for (j = 0; j < NumOfChannel; j++) { - ch[j] = (INT_32)aucChannelList[j].ucChannelNum; - } - } - - prIwReqData->data.length = j; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } -#if CFG_SUPPORT_BUILD_DATE_CODE - case PRIV_CMD_GET_BUILD_DATE_CODE: - { - UINT_8 aucBuffer[16]; - - if(kalIoctl(prGlueInfo, - wlanoidQueryBuildDateCode, - (PVOID)aucBuffer, - sizeof(UINT_8) * 16, - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen) == WLAN_STATUS_SUCCESS) { - prIwReqData->data.length = sizeof(UINT_8) * 16; - - if (copy_to_user(prIwReqData->data.pointer, aucBuffer, prIwReqData->data.length)) { - return -EFAULT; - } - else - return status; - } - else { - return -EFAULT; - } - } -#endif - default: - return -EOPNOTSUPP; - } - - return status; -} /* priv_get_int */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set int array handler. -* -* \param[in] prNetDev Net device requested. -* \param[in] prIwReqInfo Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl data structure, use the field of sub-command. -* \param[in] pcExtra The buffer with input value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd, u4BufLen; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_SET_TXPWR_CTRL_T prTxpwr; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_SET_TX_POWER: - { - INT_32 *setting = prIwReqData->data.pointer; - UINT_16 i; - -#if 0 - printk("Tx power num = %d\n", prIwReqData->data.length); - - printk("Tx power setting = %d %d %d %d\n", - setting[0], setting[1], setting[2], setting[3]); -#endif - prTxpwr = &prGlueInfo->rTxPwr; - if (setting[0] == 0 && prIwReqData->data.length == 4 /* argc num */) { - /* 0 (All networks), 1 (legacy STA), 2 (Hotspot AP), 3 (P2P), 4 (BT over Wi-Fi) */ - if (setting[1] == 1 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GLegacyStaPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GLegacyStaPwrOffset = setting[3]; - } - if (setting[1] == 2 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GHotspotPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GHotspotPwrOffset = setting[3]; - } - if (setting[1] == 3 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GP2pPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GP2pPwrOffset = setting[3]; - } - if (setting[1] == 4 || setting[1] == 0) { - if (setting[2] == 0 || setting[2] == 1) - prTxpwr->c2GBowPwrOffset = setting[3]; - if (setting[2] == 0 || setting[2] == 2) - prTxpwr->c5GBowPwrOffset = setting[3]; - } - } - else if (setting[0] == 1 && prIwReqData->data.length == 2) { - prTxpwr->ucConcurrencePolicy = setting[1]; - } - else if (setting[0] == 2 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<14; i++) - prTxpwr->acTxPwrLimit2G[i] = setting[2]; - } - else if (setting[1] <= 14) - prTxpwr->acTxPwrLimit2G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 3 && prIwReqData->data.length == 3) { - if (setting[1] == 0) { - for (i=0; i<4; i++) - prTxpwr->acTxPwrLimit5G[i] = setting[2]; - } - else if (setting[1] <= 4) - prTxpwr->acTxPwrLimit5G[setting[1] - 1] = setting[2]; - } - else if (setting[0] == 4 && prIwReqData->data.length == 2) { - if (setting[1] == 0) { - wlanDefTxPowerCfg(prGlueInfo->prAdapter); - } - rStatus = kalIoctl(prGlueInfo, - wlanoidSetTxPower, - prTxpwr, - sizeof(SET_TXPWR_CTRL_T), - TRUE, - FALSE, - FALSE, - FALSE, - &u4BufLen); - } - else - return -EFAULT; - } - return status; - default: - break; - } - - return status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get int array handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] prIwReqData The ioctl req structure, use the field of sub-command. -* \param[out] pcExtra The buffer with put the return value -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EFAULT For fail. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_ints ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd; - P_GLUE_INFO_T prGlueInfo; - int status = 0; - INT_32 ch[50]; - - ASSERT(prNetDev); - ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - ASSERT(pcExtra); - if (FALSE == GLUE_CHK_PR3(prNetDev, prIwReqData, pcExtra)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - - switch (u4SubCmd) { - case PRIV_CMD_GET_CH_LIST: - { - UINT_16 i; - UINT_8 NumOfChannel = 50; - UINT_8 ucMaxChannelNum = 50; - RF_CHANNEL_INFO_T aucChannelList[50]; - - kalGetChannelList(prGlueInfo, BAND_NULL, ucMaxChannelNum, &NumOfChannel, aucChannelList); - if (NumOfChannel > 50) - NumOfChannel = 50; - - for (i = 0; i < NumOfChannel; i++) { - ch[i] = (INT_32)aucChannelList[i].ucChannelNum; - } - - prIwReqData->data.length = NumOfChannel; - if (copy_to_user(prIwReqData->data.pointer, ch, NumOfChannel*sizeof(INT_32))) { - return -EFAULT; - } - else - return status; - } - default: - break; - } - - return status; -} /* priv_get_int */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl set structure handler. -* -* \param[in] pDev Net device requested. -* \param[in] prIwReqData Pointer to iwreq_data structure. -* -* \retval 0 For success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL If a value is out of range. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_set_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - int status = 0; - //WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4CmdLen = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq; - PUINT_32 pu4IntBuf = NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - - ASSERT(prNetDev); - //ASSERT(prIwReqInfo); - ASSERT(prIwReqData); - //ASSERT(pcExtra); - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - if (FALSE == GLUE_CHK_PR2(prNetDev, prIwReqData)) { - return -EINVAL; - } - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - - switch (u4SubCmd) { -#if 0 //PTA_ENABLED - case PRIV_CMD_BT_COEXIST: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_CUSTOM_BT_COEXIST_T) >= u4CmdLen); - if (sizeof(PARAM_CUSTOM_BT_COEXIST_T) < u4CmdLen) { - return -EFAULT; - } - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } - - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBtCoexistCtrl, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); - if (WLAN_STATUS_SUCCESS != rStatus) { - status = -EFAULT; - } - break; -#endif - - case PRIV_CUSTOM_BWCS_CMD: - u4CmdLen = prIwReqData->data.length * sizeof(UINT_32); - ASSERT(sizeof(PARAM_PTA_IPC_T) >= u4CmdLen); - if (sizeof(PARAM_PTA_IPC_T) < u4CmdLen) { - return -EFAULT; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("ucCmdLen = %d, size of PTA_IPC_T = %d, prIwReqData->data = 0x%x.\n", u4CmdLen, sizeof(PARAM_PTA_IPC_T), prIwReqData->data)); - - DBGLOG(REQ, INFO, ("priv_set_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - )); - - DBGLOG(REQ, INFO, ("*pcExtra = 0x%x\n", *pcExtra)); - #endif - - if (copy_from_user(&aucOidBuf[0], prIwReqData->data.pointer, u4CmdLen)) { - status = -EFAULT; //return -EFAULT; - break; - } -#if CFG_SUPPORT_BCM && CFG_SUPPORT_BCM_BWCS && CFG_SUPPORT_BCM_BWCS_DEBUG - DBGLOG(REQ, INFO, ("priv_set_struct(): BWCS CMD = %02x%02x%02x%02x\n", - aucOidBuf[2], aucOidBuf[3], aucOidBuf[4], aucOidBuf[5])); -#endif - -#if 0 - status = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBT, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - -#if 1 - status = wlanoidSetBT(prGlueInfo->prAdapter, - (PVOID)&aucOidBuf[0], - u4CmdLen, - &u4BufLen); -#endif - - if (WLAN_STATUS_SUCCESS != status) { - status = -EFAULT; - } - - break; - -#if CFG_SUPPORT_WPS2 - case PRIV_CMD_WSC_PROBE_REQ: - { - /* retrieve IE for Probe Request */ - if (prIwReqData->data.length > 0) { - if (copy_from_user(prGlueInfo->aucWSCIE, prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prGlueInfo->u2WSCIELen = prIwReqData->data.length; - } - else { - prGlueInfo->u2WSCIELen = 0; - } - } - break; -#endif - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - if (!kalMemCmp(&aucOidBuf[0], pcExtra, prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("pcExtra buffer is valid\n")); - } - else - DBGLOG(REQ, INFO, ("pcExtra 0x%p\n", pcExtra)); - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0], &u4BufLen); - /* Copy result to user space */ - ((P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0])->outNdisOidLength = u4BufLen; - - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("copy_to_user oidBuf fail\n")); - status = -EFAULT; - } - - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - //kalMemCopy(&prNdisReq->ndisOidContent[0], prIwReqData->data.pointer, 8); - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - status = -EFAULT; - break; - } - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - /* Execute this OID */ - status = priv_set_ndis(prNetDev, prNdisReq, &u4BufLen); - break; - - default: - return -EOPNOTSUPP; - } - - return status; -} - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Private ioctl get struct handler. -* -* \param[in] pDev Net device requested. -* \param[out] pIwReq Pointer to iwreq structure. -* \param[in] cmd Private sub-command. -* -* \retval 0 For success. -* \retval -EFAULT If copy from user space buffer fail. -* \retval -EOPNOTSUPP Parameter "cmd" not recognized. -* -*/ -/*----------------------------------------------------------------------------*/ -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ) -{ - UINT_32 u4SubCmd = 0; - P_NDIS_TRANSPORT_STRUCT prNdisReq= NULL; - - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4BufLen = 0; - PUINT_32 pu4IntBuf = NULL; - int status = 0; - - kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf)); - - ASSERT(prNetDev); - ASSERT(prIwReqData); - if (!prNetDev || !prIwReqData) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid param(0x%p, 0x%p)\n", - prNetDev, prIwReqData)); - return -EINVAL; - } - - u4SubCmd = (UINT_32) prIwReqData->data.flags; - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_struct(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_struct(): prIwReqInfo->cmd(0x%X), u4SubCmd(%ld)\n", - prIwReqInfo->cmd, - u4SubCmd - ); -#endif - memset(aucOidBuf, 0, sizeof(aucOidBuf)); - - switch (u4SubCmd) { - case PRIV_CMD_OID: - if (copy_from_user(&aucOidBuf[0], - prIwReqData->data.pointer, - sizeof(NDIS_TRANSPORT_STRUCT))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq = (P_NDIS_TRANSPORT_STRUCT)&aucOidBuf[0]; -#if 0 - printk(KERN_NOTICE "\n priv_get_struct cmd 0x%02x len:%d OID:0x%08x OID Len:%d\n", - cmd, - pIwReq->u.data.length, - ndisReq->ndisOidCmd, - ndisReq->inNdisOidlength); -#endif - if (priv_get_ndis(prNetDev, prNdisReq, &u4BufLen) == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - u4BufLen + sizeof(NDIS_TRANSPORT_STRUCT) - sizeof(prNdisReq->ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(1)\n")); - return -EFAULT; - } - return 0; - } - else { - prNdisReq->outNdisOidLength = u4BufLen; - if (copy_to_user(prIwReqData->data.pointer, - &aucOidBuf[0], - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent))) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - return -EFAULT; - } - break; - - case PRIV_CMD_SW_CTRL: - pu4IntBuf = (PUINT_32)prIwReqData->data.pointer; - prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0]; - - if (copy_from_user(&prNdisReq->ndisOidContent[0], - prIwReqData->data.pointer, - prIwReqData->data.length)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n")); - return -EFAULT; - } - - prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL; - prNdisReq->inNdisOidlength = 8; - prNdisReq->outNdisOidLength = 8; - - status = priv_get_ndis(prNetDev, prNdisReq, &u4BufLen); - if (status == 0) { - prNdisReq->outNdisOidLength = u4BufLen; - //printk("len=%d Result=%08lx\n", u4BufLen, *(PUINT_32)&prNdisReq->ndisOidContent[4]); - - if (copy_to_user(prIwReqData->data.pointer, - &prNdisReq->ndisOidContent[4], - 4 /* OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent)*/)) { - DBGLOG(REQ, INFO, ("priv_get_struct() copy_to_user oidBuf fail(2)\n")); - } - } - return 0; - break; - default: - DBGLOG(REQ, WARN, ("get struct cmd:0x%lx\n", u4SubCmd)); - return -EOPNOTSUPP; - } -} /* priv_get_struct */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a set operation for a single OID. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_set_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - UINT_32 u4SetInfoLen = 0; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_set_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Set OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - if (NULL == prWlanReqEntry->pfOidSetHandler) { - //WARNLOG(("Set %s: Null set handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_set_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgSetBufLenChecking) { - if (prNdisReq->inNdisOidlength != prWlanReqEntry->u4InfoBufLen) { - DBGLOG(REQ, WARN, ("Set %s: Invalid length (current=%ld, needed=%ld)\n", - prWlanReqEntry->pucOidName, - prNdisReq->inNdisOidlength, - prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - return -EINVAL; - } - } - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidSetHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4SetInfoLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidSetHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4SetInfoLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4SetInfoLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EFAULT; - } - - return 0; -} /* priv_set_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief The routine handles a query operation for a single OID. Basically we -* return information about the current state of the OID in question. -* -* \param[in] pDev Net device requested. -* \param[in] ndisReq Ndis request OID information copy from user. -* \param[out] outputLen_p If the call is successful, returns the number of -* bytes written into the query buffer. If the -* call failed due to invalid length of the query -* buffer, returns the amount of storage needed.. -* -* \retval 0 On success. -* \retval -EOPNOTSUPP If cmd is not supported. -* \retval -EINVAL invalid input parameters -* -*/ -/*----------------------------------------------------------------------------*/ -static int -priv_get_ndis ( - IN struct net_device *prNetDev, - IN NDIS_TRANSPORT_STRUCT* prNdisReq, - OUT PUINT_32 pu4OutputLen - ) -{ - P_WLAN_REQ_ENTRY prWlanReqEntry = NULL; - UINT_32 u4BufLen = 0; - WLAN_STATUS status = WLAN_STATUS_SUCCESS; - P_GLUE_INFO_T prGlueInfo = NULL; - - ASSERT(prNetDev); - ASSERT(prNdisReq); - ASSERT(pu4OutputLen); - - if (!prNetDev || !prNdisReq || !pu4OutputLen) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid param(0x%p, 0x%p, 0x%p)\n", - prNetDev, prNdisReq, pu4OutputLen)); - return -EINVAL; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev)); - ASSERT(prGlueInfo); - if (!prGlueInfo) { - DBGLOG(REQ, INFO, ("priv_get_ndis(): invalid prGlueInfo(0x%p, 0x%p)\n", - prNetDev, *((P_GLUE_INFO_T *) netdev_priv(prNetDev)))); - return -EINVAL; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): prNdisReq->ndisOidCmd(0x%lX)\n", - prNdisReq->ndisOidCmd - ); -#endif - - if (FALSE == reqSearchSupportedOidEntry(prNdisReq->ndisOidCmd, - &prWlanReqEntry)) { - //WARNLOG(("Query OID: 0x%08lx (unknown)\n", prNdisReq->ndisOidCmd)); - return -EOPNOTSUPP; - } - - - if (NULL == prWlanReqEntry->pfOidQueryHandler) { - //WARNLOG(("Query %s: Null query handler\n", prWlanReqEntry->pucOidName)); - return -EOPNOTSUPP; - } - -#if 0 - printk(KERN_INFO DRV_NAME"priv_get_ndis(): %s\n", - prWlanReqEntry->pucOidName - ); -#endif - - if (prWlanReqEntry->fgQryBufLenChecking) { - if (prNdisReq->inNdisOidlength < prWlanReqEntry->u4InfoBufLen) { - /* Not enough room in InformationBuffer. Punt */ - //WARNLOG(("Query %s: Buffer too short (current=%ld, needed=%ld)\n", - //prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //prWlanReqEntry->u4InfoBufLen)); - - *pu4OutputLen = prWlanReqEntry->u4InfoBufLen; - - status = WLAN_STATUS_INVALID_LENGTH; - return -EINVAL; - } - } - - - if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_ONLY) { - /* GLUE sw info only */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_GLUE_EXTENSION) { - /* multiple sw operations */ - status = prWlanReqEntry->pfOidQueryHandler(prGlueInfo, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - &u4BufLen); - } - else if (prWlanReqEntry->eOidMethod == ENUM_OID_DRIVER_CORE) { - /* driver core*/ - - status = kalIoctl(prGlueInfo, - (PFN_OID_HANDLER_FUNC)prWlanReqEntry->pfOidQueryHandler, - prNdisReq->ndisOidContent, - prNdisReq->inNdisOidlength, - TRUE, - TRUE, - TRUE, - FALSE, - &u4BufLen); - } - else { - DBGLOG(REQ, INFO, ("priv_set_ndis(): unsupported OID method:0x%x\n", - prWlanReqEntry->eOidMethod)); - return -EOPNOTSUPP; - } - - *pu4OutputLen = u4BufLen; - - switch (status) { - case WLAN_STATUS_SUCCESS: - break; - - case WLAN_STATUS_INVALID_LENGTH: - //WARNLOG(("Set %s: Invalid length (current=%ld, needed=%ld)\n", - // prWlanReqEntry->pucOidName, - //prNdisReq->inNdisOidlength, - //u4BufLen)); - break; - } - - if (WLAN_STATUS_SUCCESS != status) { - return -EOPNOTSUPP; - } - - return 0; -} /* priv_get_ndis */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to search desired OID. -* -* \param rOid[in] Desired NDIS_OID -* \param ppWlanReqEntry[out] Found registered OID entry -* -* \retval TRUE: Matched OID is found -* \retval FALSE: No matched OID is found -*/ -/*----------------------------------------------------------------------------*/ -static BOOLEAN -reqSearchSupportedOidEntry ( - IN UINT_32 rOid, - OUT P_WLAN_REQ_ENTRY *ppWlanReqEntry - ) -{ - INT_32 i, j, k; - - i = 0; - j = NUM_SUPPORTED_OIDS - 1; - - while (i <= j) { - k = (i + j) / 2; - - if (rOid == arWlanOidReqTable[k].rOid) { - *ppWlanReqEntry = &arWlanOidReqTable[k]; - return TRUE; - } else if (rOid < arWlanOidReqTable[k].rOid) { - j = k - 1; - } else { - i = k + 1; - } - } - - return FALSE; -} /* reqSearchSupportedOidEntry */ - -#if 0 -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to query the radio configuration used in IBSS -* mode and RF test mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[out] pvQueryBuffer Pointer to the buffer that holds the result of the query. -* \param[in] u4QueryBufferLen The length of the query buffer. -* \param[out] pu4QueryInfoLen If the call is successful, returns the number of -* bytes written into the query buffer. If the call -* failed due to invalid length of the query buffer, -* returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtQueryConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PVOID pvQueryBuffer, - IN UINT_32 u4QueryBufferLen, - OUT PUINT_32 pu4QueryInfoLen - ) -{ - P_PARAM_802_11_CONFIG_T prQueryConfig = (P_PARAM_802_11_CONFIG_T)pvQueryBuffer; - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - UINT_32 u4QueryInfoLen = 0; - - DEBUGFUNC("wlanoidQueryConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4QueryInfoLen); - - *pu4QueryInfoLen = sizeof(PARAM_802_11_CONFIG_T); - if (u4QueryBufferLen < sizeof(PARAM_802_11_CONFIG_T)) { - return WLAN_STATUS_INVALID_LENGTH; - } - - ASSERT(pvQueryBuffer); - - kalMemZero(prQueryConfig, sizeof(PARAM_802_11_CONFIG_T)); - - /* Update the current radio configuration. */ - prQueryConfig->u4Length = sizeof(PARAM_802_11_CONFIG_T); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryBeaconInterval, - &prQueryConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryAtimWindow, - &prQueryConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - TRUE, - TRUE, - &u4QueryInfoLen); -#else - rStatus = wlanQueryInformation(prGlueInfo->prAdapter, - wlanoidQueryFrequency, - &prQueryConfig->u4DSConfig, - sizeof(UINT_32), - &u4QueryInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - prQueryConfig->rFHConfig.u4Length = sizeof(PARAM_802_11_CONFIG_FH_T); - - return rStatus; - -} /* end of reqExtQueryConfiguration() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set the radio configuration used in IBSS -* mode. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set. -* \param[in] u4SetBufferLen The length of the set buffer. -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed -* due to invalid length of the set buffer, returns -* the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_LENGTH -* \retval WLAN_STATUS_NOT_ACCEPTED -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetConfiguration ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - P_PARAM_802_11_CONFIG_T prNewConfig = (P_PARAM_802_11_CONFIG_T)pvSetBuffer; - UINT_32 u4SetInfoLen = 0; - - DEBUGFUNC("wlanoidSetConfiguration"); - - - ASSERT(prGlueInfo); - ASSERT(pu4SetInfoLen); - - *pu4SetInfoLen = sizeof(PARAM_802_11_CONFIG_T); - - if (u4SetBufferLen < *pu4SetInfoLen) { - return WLAN_STATUS_INVALID_LENGTH; - } - - /* OID_802_11_CONFIGURATION. If associated, NOT_ACCEPTED shall be returned. */ - if (prGlueInfo->eParamMediaStateIndicated == PARAM_MEDIA_STATE_CONNECTED) { - return WLAN_STATUS_NOT_ACCEPTED; - } - - ASSERT(pvSetBuffer); - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetBeaconInterval, - &prNewConfig->u4BeaconPeriod, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetAtimWindow, - &prNewConfig->u4ATIMWindow, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - -#if defined(_HIF_SDIO) - rStatus = sdio_io_ctrl(prGlueInfo, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - FALSE, - TRUE, - &u4SetInfoLen); -#else - rStatus = wlanSetInformation(prGlueInfo->prAdapter, - wlanoidSetFrequency, - &prNewConfig->u4DSConfig, - sizeof(UINT_32), - &u4SetInfoLen); -#endif - - if (rStatus != WLAN_STATUS_SUCCESS) { - return rStatus; - } - - return rStatus; - -} /* end of reqExtSetConfiguration() */ - -#endif -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is called to set beacon detection function enable/disable state -* This is mainly designed for usage under BT inquiry state (disable function). -* -* \param[in] pvAdapter Pointer to the Adapter structure -* \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set -* \param[in] u4SetBufferLen The length of the set buffer -* \param[out] pu4SetInfoLen If the call is successful, returns the number of -* bytes read from the set buffer. If the call failed due to invalid length of -* the set buffer, returns the amount of storage needed. -* -* \retval WLAN_STATUS_SUCCESS -* \retval WLAN_STATUS_INVALID_DATA If new setting value is wrong. -* \retval WLAN_STATUS_INVALID_LENGTH -* -*/ -/*----------------------------------------------------------------------------*/ -static WLAN_STATUS -reqExtSetAcpiDevicePowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvSetBuffer, - IN UINT_32 u4SetBufferLen, - OUT PUINT_32 pu4SetInfoLen - ) -{ - WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; - - ASSERT(prGlueInfo); - ASSERT(pvSetBuffer); - ASSERT(pu4SetInfoLen); - - /* WIFI is enabled, when ACPI is D0 (ParamDeviceStateD0 = 1). And vice versa */ - - //rStatus = wlanSetInformation(prGlueInfo->prAdapter, - // wlanoidSetAcpiDevicePowerState, - // pvSetBuffer, - // u4SetBufferLen, - // pu4SetInfoLen); - return rStatus; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/arm.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/arm.c deleted file mode 100755 index d780af5e2760..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/arm.c +++ /dev/null @@ -1,697 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/hif/ehpi/arm.c#1 $ -*/ - -/*! \file "colibri.c" - \brief Brief description. - - Detail description. -*/ - -/****************************************************************************** -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************* -*/ - -/****************************************************************************** -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************* -*/ - -/* -** $Log: colibri.c $ - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. correction: RX aggregation is not limited to SDIO but for all host interface options - * 2. add forward declarations for DBG-only symbols - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * correcting ISR behaviour for EHPI - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 31 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. always reset GPIO mode to INPUT mode - * 2. SA_SHIRQ has been deprecated in later linux kernel - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * duplicate colibri.c to arm.c for Colibri BSP 5.0. - * - * 03 14 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * remove unused variables. - * - * 03 11 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * add porting layer for eHPI. -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ -#if !defined(MCR_EHTCR) -#define MCR_EHTCR 0x0054 -#endif - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "colibri.h" -#include "wlan_lib.h" - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static void __iomem *mt5931_mcr_base; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#if CFG_EHPI_FASTER_BUS_TIMING - #define EHPI_CONFIG MSC_CS(4, MSC_RBUFF_SLOW | \ - MSC_RRR(4) | \ - MSC_RDN(8) | \ - MSC_RDF(7) | \ - MSC_RBW_16 | \ - MSC_RT_VLIO) -#else - #define EHPI_CONFIG MSC_CS(4, MSC_RBUFF_SLOW | \ - MSC_RRR(7) | \ - MSC_RDN(13) | \ - MSC_RDF(12) | \ - MSC_RBW_16 | \ - MSC_RT_VLIO) -#endif /* CFG_EHPI_FASTER_BUS_TIMING */ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -collibri_ehpi_reg_init( - VOID - ); - -static VOID -collibri_ehpi_reg_uninit( - VOID - ); - -static VOID -mt5931_ehpi_reg_init( - VOID - ); - -static VOID -mt5931_ehpi_reg_uninit( - VOID - ); - -static void -busSetIrq( - void - ); - -static void -busFreeIrq( - void - ); - -static irqreturn_t -glEhpiInterruptHandler( - int irq, - void *dev_id - ); - -#if DBG -static void -initTrig( - void - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register sdio bus to the os -* -* \param[in] pfProbe Function pointer to detect card -* \param[in] pfRemove Function pointer to remove card -* -* \return The result of registering sdio bus -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -glRegisterBus ( - probe_card pfProbe, - remove_card pfRemove - ) -{ - - ASSERT(pfProbe); - ASSERT(pfRemove); - - printk(KERN_INFO "mtk_sdio: MediaTek eHPI WLAN driver\n"); - printk(KERN_INFO "mtk_sdio: Copyright MediaTek Inc.\n"); - - if(pfProbe(NULL) != WLAN_STATUS_SUCCESS){ - pfRemove(); - return WLAN_STATUS_FAILURE; - } - - return WLAN_STATUS_SUCCESS; -} /* end of glRegisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will unregister sdio bus to the os -* -* \param[in] pfRemove Function pointer to remove card -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glUnregisterBus( - remove_card pfRemove - ) -{ - ASSERT(pfRemove); - pfRemove(); - - /* TODO: eHPI uninitialization */ - - return; -} /* end of glUnregisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function stores hif related info, which is initialized before. -* -* \param[in] prGlueInfo Pointer to glue info structure -* \param[in] u4Cookie Pointer to UINT_32 memory base variable for _HIF_HPI -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - ASSERT(prGlueInfo); - - prHif = &prGlueInfo->rHifInfo; - - /* fill some buffered information into prHif */ - prHif->mcr_addr_base = mt5931_mcr_base + EHPI_OFFSET_ADDR; - prHif->mcr_data_base = mt5931_mcr_base + EHPI_OFFSET_DATA; - - return; -} /* end of glSetHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clears hif related info. -* -* \param[in] prGlueInfo Pointer to glue info structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - ASSERT(prGlueInfo); - - prHif = &prGlueInfo->rHifInfo; - - /* do something */ - prHif->mcr_addr_base = 0; - prHif->mcr_data_base = 0; - - return; -} /* end of glClearHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize bus operation and hif related information, request resources. -* -* \param[out] pvData A pointer to HIF-specific data type buffer. -* For eHPI, pvData is a pointer to UINT_32 type and stores a -* mapped base address. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOL -glBusInit ( - PVOID pvData - ) -{ -#if DBG - initTrig(); -#endif - - /* 1. initialize eHPI control registers */ - collibri_ehpi_reg_init(); - - /* 2. memory remapping for MT5931 */ - mt5931_ehpi_reg_init(); - - return TRUE; -}; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus operation and release resources. -* -* \param[in] pvData A pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusRelease ( - PVOID pvData - ) -{ - /* 1. memory unmapping for MT5931 */ - mt5931_ehpi_reg_uninit(); - - /* 2. uninitialize eHPI control registers */ - collibri_ehpi_reg_uninit(); - - return; -} /* end of glBusRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup bus interrupt operation and interrupt handler for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pfnIsr A pointer to interrupt handler function. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \retval WLAN_STATUS_SUCCESS if success -* NEGATIVE_VALUE if fail -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ) -{ - struct net_device *pDev = (struct net_device *)pvData; - int i4Status = 0; - - /* 1. enable GPIO pin as IRQ */ - busSetIrq(); - - /* 2. Specify IRQ number into net_device */ - pDev->irq = WLAN_STA_IRQ; - - /* 3. register ISR callback */ -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 12) - i4Status = request_irq(pDev->irq, - glEhpiInterruptHandler, - SA_SHIRQ, - pDev->name, - pvCookie); -#else - i4Status = request_irq(pDev->irq, - glEhpiInterruptHandler, - IRQF_DISABLED | IRQF_SHARED | IRQF_TRIGGER_FALLING, - pDev->name, - pvCookie); -#endif - - if(i4Status < 0) { - printk("request_irq(%d) failed\n", pDev->irq); - } - else { - printk(KERN_INFO "request_irq(%d) success with dev_id(%x)\n", pDev->irq, (unsigned int)pvCookie); - } - - return i4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus interrupt operation and disable interrupt handling for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ) -{ - struct net_device *prDev = (struct net_device *)pvData; - - if(!prDev) { - printk( KERN_INFO "Invalid net_device context.\n"); - return; - } - - if (prDev->irq) { - disable_irq(prDev->irq); - free_irq(prDev->irq, pvCookie); - prDev->irq = 0; - } - - busFreeIrq(); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set power state -* -* \param[in] pvGlueInfo A pointer to GLUE_INFO_T -* \param[in] ePowerMode Power Mode Setting -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ) -{ - return; -} - - -#if DBG -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup the GPIO pin. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -setTrig (void) -{ - GPSR1 = (0x1UL << 8); -} /* end of setTrig() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Clear the GPIO pin. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -clearTrig (void) -{ - GPCR1 = (0x1UL << 8); -} /* end of clearTrig() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set a specified GPIO pin to H or L. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static void -initTrig (void) -{ - set_GPIO_mode(GPIO40_FFDTR | GPIO_OUT); - clearTrig(); -}/* end of initTrig() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function congifure platform-dependent interupt triger type. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -busSetIrq(void) -{ -#if defined(WLAN_STA_IRQ_GPIO) - pxa_gpio_mode(WLAN_STA_IRQ_GPIO | GPIO_IN); - set_irq_type(WLAN_STA_IRQ, IRQT_FALLING); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should restore settings changed by busSetIrq(). -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -busFreeIrq(void) -{ -#if defined(WLAN_STA_IRQ_GPIO) - pxa_gpio_mode(WLAN_STA_IRQ_GPIO | GPIO_OUT); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function configures colibri memory controller registers -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -collibri_ehpi_reg_init( - VOID - ) -{ - UINT_32 u4RegValue; - - /* 1. enable nCS as memory controller */ - pxa_gpio_mode(GPIO80_nCS_4_MD); - - /* 2. nCS<4> configuration */ - u4RegValue = MSC2; - u4RegValue &= ~MSC_CS(4, 0xFFFF); - u4RegValue |= EHPI_CONFIG; - MSC2 = u4RegValue; - - printk(KERN_INFO "EHPI new MSC2:0x%08x\n", MSC2); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function restores colibri memory controller registers -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -collibri_ehpi_reg_uninit( - VOID - ) -{ - UINT_32 u4RegValue; - - /* 1. restore nCS<4> configuration */ - u4RegValue = MSC2; - u4RegValue &= ~MSC_CS(4, 0xFFFF); - MSC2 = u4RegValue; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function configures MT5931 mapped registers on colibri -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -mt5931_ehpi_reg_init( - VOID - ) -{ - struct resource *reso = NULL; - - /* 1. request memory regioin */ - reso = request_mem_region((unsigned long)MEM_MAPPED_ADDR, (unsigned long)MEM_MAPPED_LEN, (char *)MODULE_PREFIX); - if(!reso) { - printk(KERN_ERR "request_mem_region(0x%08X) failed.\n", MEM_MAPPED_ADDR); - return; - } - - /* 2. memory regioin remapping */ - mt5931_mcr_base = ioremap_nocache(MEM_MAPPED_ADDR, MEM_MAPPED_LEN); - if(!(mt5931_mcr_base)) { - release_mem_region(MEM_MAPPED_ADDR, MEM_MAPPED_LEN); - printk(KERN_ERR "ioremap_nocache(0x%08X) failed.\n", MEM_MAPPED_ADDR); - return; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function releases MT5931 mapped registers on colibri -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -mt5931_ehpi_reg_uninit( - VOID - ) -{ - iounmap(mt5931_mcr_base); - mt5931_mcr_base = NULL; - - release_mem_region(MEM_MAPPED_ADDR, MEM_MAPPED_LEN); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Callback for interrupt coming from device -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static irqreturn_t -glEhpiInterruptHandler( - int irq, - void *dev_id - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T) dev_id; - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - return IRQ_HANDLED; - } - - /* 1. Running for ISR */ - wlanISR(prGlueInfo->prAdapter, TRUE); - - /* 1.1 Halt flag Checking */ - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - return IRQ_HANDLED; - } - - /* 2. Flag marking for interrupt */ - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* 3. wake up tx service thread */ - wake_up_interruptible(&prGlueInfo->waitq); - - return IRQ_HANDLED; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/colibri.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/colibri.c deleted file mode 100755 index d043ce3a29eb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/colibri.c +++ /dev/null @@ -1,693 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/hif/ehpi/colibri.c#1 $ -*/ - -/*! \file "colibri.c" - \brief Brief description. - - Detail description. -*/ - -/****************************************************************************** -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************* -*/ - -/****************************************************************************** -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************* -*/ - -/* -** $Log: colibri.c $ - * - * 04 08 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. correction: RX aggregation is not limited to SDIO but for all host interface options - * 2. add forward declarations for DBG-only symbols - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * correcting ISR behaviour for EHPI - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 31 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. always reset GPIO mode to INPUT mode - * 2. SA_SHIRQ has been deprecated in later linux kernel - * - * 03 14 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * remove unused variables. - * - * 03 11 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * add porting layer for eHPI. -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ -#if !defined(MCR_EHTCR) -#define MCR_EHTCR 0x0054 -#endif - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "colibri.h" -#include "wlan_lib.h" - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static void __iomem *mt5931_mcr_base; - - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#if CFG_EHPI_FASTER_BUS_TIMING - #define EHPI_CONFIG MSC_CS(4, MSC_RBUFF_SLOW | \ - MSC_RRR(4) | \ - MSC_RDN(8) | \ - MSC_RDF(7) | \ - MSC_RBW_16 | \ - MSC_RT_VLIO) -#else - #define EHPI_CONFIG MSC_CS(4, MSC_RBUFF_SLOW | \ - MSC_RRR(7) | \ - MSC_RDN(13) | \ - MSC_RDF(12) | \ - MSC_RBW_16 | \ - MSC_RT_VLIO) -#endif /* CFG_EHPI_FASTER_BUS_TIMING */ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static VOID -collibri_ehpi_reg_init( - VOID - ); - -static VOID -collibri_ehpi_reg_uninit( - VOID - ); - -static VOID -mt5931_ehpi_reg_init( - VOID - ); - -static VOID -mt5931_ehpi_reg_uninit( - VOID - ); - -static void -busSetIrq( - void - ); - -static void -busFreeIrq( - void - ); - -static irqreturn_t -glEhpiInterruptHandler( - int irq, - void *dev_id - ); - -#if DBG -static void -initTrig( - void - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register sdio bus to the os -* -* \param[in] pfProbe Function pointer to detect card -* \param[in] pfRemove Function pointer to remove card -* -* \return The result of registering sdio bus -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -glRegisterBus ( - probe_card pfProbe, - remove_card pfRemove - ) -{ - - ASSERT(pfProbe); - ASSERT(pfRemove); - - printk(KERN_INFO "mtk_sdio: MediaTek eHPI WLAN driver\n"); - printk(KERN_INFO "mtk_sdio: Copyright MediaTek Inc.\n"); - - if(pfProbe(NULL) != WLAN_STATUS_SUCCESS){ - pfRemove(); - return WLAN_STATUS_FAILURE; - } - - return WLAN_STATUS_SUCCESS; -} /* end of glRegisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will unregister sdio bus to the os -* -* \param[in] pfRemove Function pointer to remove card -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glUnregisterBus( - remove_card pfRemove - ) -{ - ASSERT(pfRemove); - pfRemove(); - - /* TODO: eHPI uninitialization */ - - return; -} /* end of glUnregisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function stores hif related info, which is initialized before. -* -* \param[in] prGlueInfo Pointer to glue info structure -* \param[in] u4Cookie Pointer to UINT_32 memory base variable for _HIF_HPI -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - ASSERT(prGlueInfo); - - prHif = &prGlueInfo->rHifInfo; - - /* fill some buffered information into prHif */ - prHif->mcr_addr_base = mt5931_mcr_base + EHPI_OFFSET_ADDR; - prHif->mcr_data_base = mt5931_mcr_base + EHPI_OFFSET_DATA; - - return; -} /* end of glSetHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clears hif related info. -* -* \param[in] prGlueInfo Pointer to glue info structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - ASSERT(prGlueInfo); - - prHif = &prGlueInfo->rHifInfo; - - /* do something */ - prHif->mcr_addr_base = 0; - prHif->mcr_data_base = 0; - - return; -} /* end of glClearHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize bus operation and hif related information, request resources. -* -* \param[out] pvData A pointer to HIF-specific data type buffer. -* For eHPI, pvData is a pointer to UINT_32 type and stores a -* mapped base address. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOL -glBusInit ( - PVOID pvData - ) -{ -#if DBG - initTrig(); -#endif - - /* 1. initialize eHPI control registers */ - collibri_ehpi_reg_init(); - - /* 2. memory remapping for MT5931 */ - mt5931_ehpi_reg_init(); - - return TRUE; -}; - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus operation and release resources. -* -* \param[in] pvData A pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusRelease ( - PVOID pvData - ) -{ - /* 1. memory unmapping for MT5931 */ - mt5931_ehpi_reg_uninit(); - - /* 2. uninitialize eHPI control registers */ - collibri_ehpi_reg_uninit(); - - return; -} /* end of glBusRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup bus interrupt operation and interrupt handler for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pfnIsr A pointer to interrupt handler function. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \retval WLAN_STATUS_SUCCESS if success -* NEGATIVE_VALUE if fail -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ) -{ - struct net_device *pDev = (struct net_device *)pvData; - int i4Status = 0; - - /* 1. enable GPIO pin as IRQ */ - busSetIrq(); - - /* 2. Specify IRQ number into net_device */ - pDev->irq = WLAN_STA_IRQ; - - /* 3. register ISR callback */ -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 12) - i4Status = request_irq(pDev->irq, - glEhpiInterruptHandler, - SA_SHIRQ, - pDev->name, - pvCookie); -#else - i4Status = request_irq(pDev->irq, - glEhpiInterruptHandler, - IRQF_DISABLED | IRQF_SHARED | IRQF_TRIGGER_FALLING, - pDev->name, - pvCookie); -#endif - - if(i4Status < 0) { - printk("request_irq(%d) failed\n", pDev->irq); - } - else { - printk(KERN_INFO "request_irq(%d) success with dev_id(%x)\n", pDev->irq, (unsigned int)pvCookie); - } - - return i4Status; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus interrupt operation and disable interrupt handling for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ) -{ - struct net_device *prDev = (struct net_device *)pvData; - - if(!prDev) { - printk( KERN_INFO "Invalid net_device context.\n"); - return; - } - - if (prDev->irq) { - disable_irq(prDev->irq); - free_irq(prDev->irq, pvCookie); - prDev->irq = 0; - } - - busFreeIrq(); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set power state -* -* \param[in] pvGlueInfo A pointer to GLUE_INFO_T -* \param[in] ePowerMode Power Mode Setting -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ) -{ - return; -} - - -#if DBG -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup the GPIO pin. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -setTrig (void) -{ - GPSR1 = (0x1UL << 8); -} /* end of setTrig() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Clear the GPIO pin. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -clearTrig (void) -{ - GPCR1 = (0x1UL << 8); -} /* end of clearTrig() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Set a specified GPIO pin to H or L. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static void -initTrig (void) -{ - set_GPIO_mode(GPIO40_FFDTR | GPIO_OUT); - clearTrig(); -}/* end of initTrig() */ -#endif - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function congifure platform-dependent interupt triger type. -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -busSetIrq(void) -{ -#if defined(WLAN_STA_IRQ_GPIO) - pxa_gpio_mode(WLAN_STA_IRQ_GPIO | GPIO_IN); - set_irq_type(WLAN_STA_IRQ, IRQT_FALLING); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function should restore settings changed by busSetIrq(). -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -void -busFreeIrq(void) -{ -#if defined(WLAN_STA_IRQ_GPIO) - pxa_gpio_mode(WLAN_STA_IRQ_GPIO | GPIO_OUT); -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function configures colibri memory controller registers -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -collibri_ehpi_reg_init( - VOID - ) -{ - UINT_32 u4RegValue; - - /* 1. enable nCS as memory controller */ - pxa_gpio_mode(GPIO80_nCS_4_MD); - - /* 2. nCS<4> configuration */ - u4RegValue = MSC2; - u4RegValue &= ~MSC_CS(4, 0xFFFF); - u4RegValue |= EHPI_CONFIG; - MSC2 = u4RegValue; - - printk(KERN_INFO "EHPI new MSC2:0x%08x\n", MSC2); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function restores colibri memory controller registers -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -collibri_ehpi_reg_uninit( - VOID - ) -{ - UINT_32 u4RegValue; - - /* 1. restore nCS<4> configuration */ - u4RegValue = MSC2; - u4RegValue &= ~MSC_CS(4, 0xFFFF); - MSC2 = u4RegValue; - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function configures MT5931 mapped registers on colibri -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -mt5931_ehpi_reg_init( - VOID - ) -{ - struct resource *reso = NULL; - - /* 1. request memory regioin */ - reso = request_mem_region((unsigned long)MEM_MAPPED_ADDR, (unsigned long)MEM_MAPPED_LEN, (char *)MODULE_PREFIX); - if(!reso) { - printk(KERN_ERR "request_mem_region(0x%08X) failed.\n", MEM_MAPPED_ADDR); - return; - } - - /* 2. memory regioin remapping */ - mt5931_mcr_base = ioremap_nocache(MEM_MAPPED_ADDR, MEM_MAPPED_LEN); - if(!(mt5931_mcr_base)) { - release_mem_region(MEM_MAPPED_ADDR, MEM_MAPPED_LEN); - printk(KERN_ERR "ioremap_nocache(0x%08X) failed.\n", MEM_MAPPED_ADDR); - return; - } - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function releases MT5931 mapped registers on colibri -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static VOID -mt5931_ehpi_reg_uninit( - VOID - ) -{ - iounmap(mt5931_mcr_base); - mt5931_mcr_base = NULL; - - release_mem_region(MEM_MAPPED_ADDR, MEM_MAPPED_LEN); - - return; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Callback for interrupt coming from device -* -* \return N/A -*/ -/*----------------------------------------------------------------------------*/ -static irqreturn_t -glEhpiInterruptHandler( - int irq, - void *dev_id - ) -{ - P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T) dev_id; - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - return IRQ_HANDLED; - } - - /* 1. Running for ISR */ - wlanISR(prGlueInfo->prAdapter, TRUE); - - /* 1.1 Halt flag Checking */ - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - return IRQ_HANDLED; - } - - /* 2. Flag marking for interrupt */ - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* 3. wake up tx service thread */ - wake_up_interruptible(&prGlueInfo->waitq); - - return IRQ_HANDLED; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/ehpi.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/ehpi.c deleted file mode 100755 index ed8434b3536e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/ehpi.c +++ /dev/null @@ -1,478 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/hif/ehpi/ehpi.c#1 $ -*/ - -/*! \file "ehpi.c" - \brief Brief description. - - Detail description. -*/ - -/****************************************************************************** -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************* -*/ - -/****************************************************************************** -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************* -*/ - -/* -** $Log: ehpi.c $ - * - * 04 25 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * change eHPI-8/eHPI-16 selection to config.mk. - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 11 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * add porting layer for eHPI. -*/ - -/****************************************************************************** -* C O M P I L E R F L A G S -******************************************************************************* -*/ -#if !defined(MCR_EHTCR) -#define MCR_EHTCR 0x0054 -#endif - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_os.h" -#include "colibri.h" -#include "wlan_lib.h" - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -static BOOL -kalDevRegRead_impl( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ); - -static BOOL -kalDevRegWrite_impl( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to read a 32 bit register value from device. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register The register offset. -* \param[out] pu4Value Pointer to the 32-bit value of the register been read. -* -* \retval TRUE -* \retval FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ) -{ - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - ASSERT(pu4Value); - - /* 0. acquire spinlock */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - /* 1. I/O stuff */ - kalDevRegRead_impl(prGlueInfo, u4Register, pu4Value); - - /* 2. release spin lock */ - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to write a 32 bit register value to device. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register The register offset. -* \param[out] u4Value The 32-bit value of the register to be written. -* -* \retval TRUE -* \retval FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ) -{ - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - /* 0. acquire spinlock */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - /* 1. I/O stuff */ - kalDevRegWrite_impl(prGlueInfo, u4Register, u4Value); - - /* 2. release spin lock */ - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to read port data from device in unit of byte. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port The register offset. -* \param[in] u2Len The number of byte to be read. -* \param[out] pucBuf Pointer to data buffer for read -* \param[in] u2ValidOutBufSize Length of the buffer valid to be accessed -* -* \retval TRUE -* \retval FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ) -{ - UINT_32 i; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - /* 0. acquire spinlock */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - /* 1. indicate correct length to HIFSYS if larger than 4-bytes */ - if(u2Len > 4) { - kalDevRegWrite_impl(prGlueInfo, MCR_EHTCR, ALIGN_4(u2Len)); - } - - /* 2. address cycle */ -#if EHPI16 - writew(u2Port, prGlueInfo->rHifInfo.mcr_addr_base); -#elif EHPI8 - writew((u2Port & 0xFF), prGlueInfo->rHifInfo.mcr_addr_base); - writew(((u2Port & 0xFF00) >> 8), prGlueInfo->rHifInfo.mcr_addr_base); -#endif - - /* 3. data cycle */ - for(i = 0 ; i < ALIGN_4(u2Len) ; i += 4) { -#if EHPI16 - *((PUINT_16)&(pucBuf[i])) = (UINT_16) (readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFFFF); - *((PUINT_16)&(pucBuf[i+2])) = (UINT_16) (readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFFFF); -#elif EHPI8 - *((PUINT_8)&(pucBuf[i])) = (UINT_8) (readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF); - *((PUINT_8)&(pucBuf[i+1])) = (UINT_8) (readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF); - *((PUINT_8)&(pucBuf[i+2])) = (UINT_8) (readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF); - *((PUINT_8)&(pucBuf[i+3])) = (UINT_8) (readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF); -#endif - } - - /* 4. restore length to 4 if necessary */ - if(u2Len > 4) { - kalDevRegWrite_impl(prGlueInfo, MCR_EHTCR, 4); - } - - /* 5. release spin lock */ - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to write port data to device in unit of byte. -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port The register offset. -* \param[in] u2Len The number of byte to be write. -* \param[out] pucBuf Pointer to data buffer for write -* \param[in] u2ValidOutBufSize Length of the buffer valid to be accessed -* -* \retval TRUE -* \retval FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ) -{ - UINT_32 i; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - /* 0. acquire spinlock */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - /* 1. indicate correct length to HIFSYS if larger than 4-bytes */ - if(u2Len > 4) { - kalDevRegWrite_impl(prGlueInfo, MCR_EHTCR, ALIGN_4(u2Len)); - } - - /* 2. address cycle */ -#if EHPI16 - writew(u2Port, prGlueInfo->rHifInfo.mcr_addr_base); -#elif EHPI8 - writew((u2Port & 0xFF), prGlueInfo->rHifInfo.mcr_addr_base); - writew(((u2Port & 0xFF00) >> 8), prGlueInfo->rHifInfo.mcr_addr_base); -#endif - - /* 3. data cycle */ - for(i = 0 ; i < ALIGN_4(u2Len) ; i += 4) { -#if EHPI16 - writew((UINT_32)(*((PUINT_16) &(pucBuf[i]))), prGlueInfo->rHifInfo.mcr_data_base); - writew((UINT_32)(*((PUINT_16) &(pucBuf[i+2]))), prGlueInfo->rHifInfo.mcr_data_base); -#elif EHPI8 - writew((UINT_32)(*((PUINT_8) &(pucBuf[i]))), prGlueInfo->rHifInfo.mcr_data_base); - writew((UINT_32)(*((PUINT_8) &(pucBuf[i+1]))), prGlueInfo->rHifInfo.mcr_data_base); - writew((UINT_32)(*((PUINT_8) &(pucBuf[i+2]))), prGlueInfo->rHifInfo.mcr_data_base); - writew((UINT_32)(*((PUINT_8) &(pucBuf[i+3]))), prGlueInfo->rHifInfo.mcr_data_base); -#endif - } - - /* 4. restore length to 4 if necessary */ - if(u2Len > 4) { - kalDevRegWrite_impl(prGlueInfo, MCR_EHTCR, 4); - } - - /* 5. release spin lock */ - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port with single byte (for SDIO compatibility) -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Addr I/O port offset -* \param[in] ucData single byte of data to be written -* \param[in] u4ValidInBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ) -{ - UINT_32 u4RegValue; - BOOLEAN bRet; - GLUE_SPIN_LOCK_DECLARATION(); - - ASSERT(prGlueInfo); - - /* 0. acquire spinlock */ - GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - /* 1. there is no single byte access support for eHPI, use 4-bytes write-after-read approach instead */ - if(kalDevRegRead_impl(prGlueInfo, u4Addr, &u4RegValue) == TRUE) { - u4RegValue &= 0x00; - u4RegValue |= ucData; - - bRet = kalDevRegWrite_impl(prGlueInfo, u4Addr, u4RegValue); - } - else { - bRet = FALSE; - } - - /* 2. release spin lock */ - GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS); - - return bRet; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to read a 32 bit register value from device -* without spin lock protection and dedicated for internal use -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register The register offset. -* \param[out] pu4Value Pointer to the 32-bit value of the register been read. -* -* \retval TRUE -* \retval FALSE -*/ -/*----------------------------------------------------------------------------*/ -static BOOL -kalDevRegRead_impl( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ) -{ - ASSERT(prGlueInfo); - - /* 1. address cycle */ -#if EHPI16 - writew(u4Register, prGlueInfo->rHifInfo.mcr_addr_base); -#elif EHPI8 - writew((u4Register & 0xFF), prGlueInfo->rHifInfo.mcr_addr_base); - writew(((u4Register & 0xFF00) >> 8), prGlueInfo->rHifInfo.mcr_addr_base); -#endif - - /* 2. data cycle */ -#if EHPI16 - *pu4Value = (readw(prGlueInfo->rHifInfo.mcr_data_base)& 0xFFFF); - *pu4Value |= ((readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFFFF) << 16); -#elif EHPI8 - *pu4Value = (readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF); - *pu4Value |= ((readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF) << 8); - *pu4Value |= ((readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF) << 16); - *pu4Value |= ((readw(prGlueInfo->rHifInfo.mcr_data_base) & 0xFF) << 24); -#endif - - return TRUE; -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This routine is used to write a 32 bit register value to device. -* without spin lock protection and dedicated for internal use -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register The register offset. -* \param[out] u4Value The 32-bit value of the register to be written. -* -* \retval TRUE -* \retval FALSE -*/ -/*----------------------------------------------------------------------------*/ -static BOOL -kalDevRegWrite_impl( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ) -{ - ASSERT(prGlueInfo); - - /* 1. address cycle */ -#if EHPI16 - writew(u4Register, prGlueInfo->rHifInfo.mcr_addr_base); -#elif EHPI8 - writew((u4Register & 0xFF), prGlueInfo->rHifInfo.mcr_addr_base); - writew(((u4Register & 0xFF00) >> 8), prGlueInfo->rHifInfo.mcr_addr_base); -#endif - - /* 2. data cycle */ -#if EHPI16 - writew(u4Value, prGlueInfo->rHifInfo.mcr_data_base); - writew((u4Value & 0xFFFF0000) >> 16, prGlueInfo->rHifInfo.mcr_data_base); -#elif EHPI8 - writew((u4Value & 0x000000FF), prGlueInfo->rHifInfo.mcr_data_base); - writew((u4Value & 0x0000FF00) >> 8, prGlueInfo->rHifInfo.mcr_data_base); - writew((u4Value & 0x00FF0000) >> 16, prGlueInfo->rHifInfo.mcr_data_base); - writew((u4Value & 0xFF000000) >> 24, prGlueInfo->rHifInfo.mcr_data_base); -#endif - - return TRUE; -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/include/colibri.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/include/colibri.h deleted file mode 100755 index 50b09bd8907c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/ehpi/include/colibri.h +++ /dev/null @@ -1,212 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/hif/ehpi/include/colibri.h#1 $ -*/ - -/*! \file "colibri.h" - \brief This file contains colibri BSP configuration based on eHPI interface - - N/A -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: colibri.h $ - * - * 04 06 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. do not check for pvData inside wlanNetCreate() due to it is NULL for eHPI port - * 2. update perm_addr as well for MAC address - * 3. not calling check_mem_region() anymore for eHPI - * 4. correct MSC_CS macro for 0-based notation - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 23 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * apply multi-queue operation only for linux kernel > 2.6.26 - * - * 03 11 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * add porting layer for eHPI. -** -*/ -#ifndef _COLIBRI_H -#define _COLIBRI_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include -#include -#include -#include -#include - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - - -#define WLAN_STA_IRQ_GPIO 23 /* use SSP_EXTCLK as interrupt source */ -#define WLAN_STA_IRQ IRQ_GPIO(WLAN_STA_IRQ_GPIO) - -#define MSC_CS(cs,val) ((val)<<(((cs)&1)<<4)) - -#define MSC_RBUFF_SHIFT 15 -#define MSC_RBUFF(x) ((x)< /* include stddef.h for NULL */ - -/* Type definition for signed integers */ -typedef signed char INT8, *PINT8; -typedef signed short INT16, *PINT16; -typedef signed int INT32, *PINT32; - -/* Type definition for unsigned integers */ -typedef unsigned char UINT8, *PUINT8; -typedef unsigned short UINT16, *PUINT16; -typedef unsigned int UINT32, *PUINT32; - -//typedef void VOID, *PVOID; - -typedef int MTK_WCN_BOOL; -#ifndef MTK_WCN_BOOL_TRUE -#define MTK_WCN_BOOL_FALSE ((MTK_WCN_BOOL) 0) -#define MTK_WCN_BOOL_TRUE ((MTK_WCN_BOOL) 1) -#endif - -typedef int MTK_WCN_MUTEX; - -typedef int MTK_WCN_TIMER; - -/* system APIs */ -/* mutex */ -typedef MTK_WCN_MUTEX (*MUTEX_CREATE)(const char * const name); -typedef INT32 (*MUTEX_DESTROY)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_LOCK)(MTK_WCN_MUTEX mtx); -typedef INT32 (*MUTEX_UNLOCK)(MTK_WCN_MUTEX mtx, unsigned long flags); -/* debug */ -typedef INT32 (*DBG_PRINT)(const char *str, ...); -typedef INT32 (*DBG_ASSERT)(INT32 expr, const char *file, INT32 line); -/* timer */ -typedef void (*MTK_WCN_TIMER_CB)(void); -typedef MTK_WCN_TIMER (*TIMER_CREATE)(const char * const name); -typedef INT32 (*TIMER_DESTROY)(MTK_WCN_TIMER tmr); -typedef INT32 (*TIMER_START)(MTK_WCN_TIMER tmr, UINT32 timeout, MTK_WCN_TIMER_CB tmr_cb, void *param); -typedef INT32 (*TIMER_STOP)(MTK_WCN_TIMER tmr); -/* kernel lib */ -typedef void* (*SYS_MEMCPY)(void *dest, const void *src, UINT32 n); -typedef void* (*SYS_MEMSET)(void *s, INT32 c, UINT32 n); -typedef INT32 (*SYS_SPRINTF)(char *str, const char *format, ...); - -#endif /* _MTK_PORTING_H_ */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/sdio/sdio.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/sdio/sdio.c deleted file mode 100755 index 09bad38202e3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/sdio/sdio.c +++ /dev/null @@ -1,1328 +0,0 @@ -/****************************************************************************** -*[File] sdio.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* The program provides SDIO HIF driver -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: sdio.c $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** cfg80211 support merge back from ALPS.JB to DaVinci - MT6620 Driver v2.3 branch. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 02 14 2012 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * include correct header file upon setting. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 20 2011 cp.wu - * [WCXRP00000994] [MT6620 Wi-Fi][Driver] dump message for bus error and reset bus error flag while re-initialized - * 1. always show error message for SDIO bus errors. - * 2. reset bus error flag when re-initialization - * - * 08 17 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * add MT6628 related definitions for Linux/Android driver. - * - * 05 18 2011 cp.wu - * [WCXRP00000702] [MT5931][Driver] Modify initialization sequence for E1 ASIC - * add device ID for MT5931. - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 18 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK. - * - * 03 15 2011 cp.wu - * [WCXRP00000559] [MT6620 Wi-Fi][Driver] Combine TX/RX DMA buffers into a single one to reduce physically continuous memory consumption - * 1. deprecate CFG_HANDLE_IST_IN_SDIO_CALLBACK - * 2. Use common coalescing buffer for both TX/RX directions - * - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 11 15 2010 jeffrey.chang - * [WCXRP00000181] [MT6620 Wi-Fi][Driver] fix the driver message "GLUE_FLAG_HALT skip INT" during unloading - * Fix GLUE_FALG_HALT message which cause driver to hang - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * correct typo - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 yarco.yang - * [WCXRP00000149] [MT6620 WI-Fi][Driver]Fine tune performance on MT6516 platform - * Add code to run WlanIST in SDIO callback. - * - * 10 19 2010 cp.wu - * [WCXRP00000122] [MT6620 Wi-Fi][Driver] Preparation for YuSu source tree integration - * remove HIF_SDIO_ONE flags because the settings could be merged for runtime detection instead of compile-time. - * - * 10 19 2010 jeffrey.chang - * [WCXRP00000120] [MT6620 Wi-Fi][Driver] Refine linux kernel module to the license of MTK propietary and enable MTK HIF by default - * Refine linux kernel module to the license of MTK and enable MTK HIF - * - * 08 21 2010 jeffrey.chang - * NULL - * 1) add sdio two setting - * 2) bug fix of sdio glue - * - * 08 18 2010 jeffrey.chang - * NULL - * support multi-function sdio - * - * 08 18 2010 cp.wu - * NULL - * #if defined(__X86__) is not working, change to use #ifdef CONFIG_X86. - * - * 08 17 2010 cp.wu - * NULL - * add ENE SDIO host workaround for x86 linux platform. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Fix hotplug bug - * - * 03 28 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * clear sdio interrupt - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -#include "gl_os.h" - -#if MTK_WCN_HIF_SDIO -#include "hif_sdio.h" -#else -#include -#include -#include -#include /* sdio_readl(), etc */ -#include -#endif - -#include -#ifndef CONFIG_X86 -#include -#endif - -#if defined(MT6620) - #include "mt6620_reg.h" -#elif defined(MT5931) - #include "mt5931_reg.h" -#elif defined(MT6628) - #include "mt6628_reg.h" -#endif - -#if CFG_DBG_GPIO_PINS/* FIXME: move to platform or custom header */ -#include -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#define HIF_SDIO_ERR_TITLE_STR "["CHIP_NAME"] SDIO Access Error!" -#define HIF_SDIO_ERR_DESC_STR "**SDIO Access Error**\n" - -#if MTK_WCN_HIF_SDIO - - -/* - * function prototypes - * - */ - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *); - -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX); -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX); - -/* - * sdio function info table - */ - -static MTK_WCN_HIF_SDIO_FUNCINFO funcInfo[] = { -#if defined(MT6620) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x020c, 0x2, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018a, 0x1, 512) }, - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x018c, 0x2, 512) }, -#elif defined(MT5931) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x5931, 0x1, 512) }, -#elif defined(MT6628) - { MTK_WCN_HIF_SDIO_FUNC(0x037a, 0x6628, 0x1, 512) }, -#endif -}; - - -static MTK_WCN_HIF_SDIO_CLTINFO cltInfo = { - .func_tbl = funcInfo, - .func_tbl_size = sizeof(funcInfo)/sizeof(MTK_WCN_HIF_SDIO_FUNCINFO), - .hif_clt_probe = mtk_sdio_probe, - .hif_clt_remove = mtk_sdio_remove, - .hif_clt_irq = mtk_sdio_interrupt, -}; - -#else - -static const struct sdio_device_id mtk_sdio_ids[] = { -#if defined(MT6620) - { SDIO_DEVICE(0x037a, 0x020a) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020b) }, /* Not an SDIO standard class device */ - { SDIO_DEVICE(0x037a, 0x020c) }, /* Not an SDIO standard class device */ -#elif defined(MT5931) - { SDIO_DEVICE(0x037a, 0x5931) }, /* Not an SDIO standard class device */ -#elif defined(MT6628) - { SDIO_DEVICE(0x037a, 0x6628) }, /* Not an SDIO standard class device */ -#endif - { /* end: all zeroes */ }, -}; - -MODULE_DEVICE_TABLE(sdio, mtk_sdio_ids); - -#endif - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ -static probe_card pfWlanProbe = NULL; -static remove_card pfWlanRemove = NULL; - - -#if (MTK_WCN_HIF_SDIO == 0) -static struct sdio_driver mtk_sdio_driver = { - .name = "wlan", /* "MTK SDIO WLAN Driver" */ - .id_table = mtk_sdio_ids, - .probe = NULL, - .remove = NULL, -}; -#endif - - -#if CFG_DBG_GPIO_PINS - -/* debug pins */ -UINT_32 dbgPinSTP[] = { - GPIO_PLATFORM(33)/* CMFLASH, IDX_ERR J613 */ - , GPIO_PLATFORM(62)/* EINT3, IDX_TX_THREAD */ - , GPIO_PLATFORM(80)/* SPI_CS_N, IDX_TX_REQ J613 */ - , GPIO_PLATFORM(81)/* SPI_SCK, IDX_TX_PORT_WRITE J613 */ - , GPIO_PLATFORM(17) /* CMRST, IDX_STP_MTX_BT J618 */ - , GPIO_PLATFORM(18) /* CMPDN, IDX_STP_MTX_FM J613 */ - , GPIO_PLATFORM(19) /* CMVREF,IDX_STP_MTX_GPS J613 */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WIFI */ - , GPIO_INVALID /* REMOVED, IDX_STP_MTX_WMT */ - , GPIO_PLATFORM(135) /* SCL2, IDX_LOOP_CNT J616 */ - , GPIO_PLATFORM(136) /* SDA2, IDX_NO_BUF J616 */ - , GPIO_PLATFORM(30) /* CAM_MECHSH0, IDX_BT_TX, J613 low-active */ - , GPIO_PLATFORM(31) /* CAM_MECHSH1, IDX_BT_RX, J613 low-active */ - , GPIO_PLATFORM(124) /* GPS_PWR_EN, ThreadDSPIn [GPS] */ - , GPIO_PLATFORM(125) /* GPS_SYNC, mtk_sys_msg_recv [GPS] */ - , GPIO_PLATFORM(21) /* GPS_EINT8, dump_nmea_data [GPS] */ - , GPIO_PLATFORM(29) /* CAM_STROBE, IDX_GPS_TX, J613 low-active */ - , GPIO_PLATFORM(20) /*CMHREF, J613 UNUSED */ -// , GPIO_6516(64) /* EINT5, REMOVED!!! for MT6620-Wi-Fi Int */ -// , GPIO_6516(122) /* BT_PWR_EN, REMOVED!!! for MT6620-PMU_EN */ -// , GPIO_6516(123) /* BT_RESET, REMOVED!!! for MT6620-RST */ -}; -#endif -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ -#if CFG_DBG_GPIO_PINS -void debug_gpio_init(void) -{ - int i; - - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_pull_enable(dbgPinSTP[i], 0); /* disable pull */ - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_OUT); /* set output */ - mt_set_gpio_mode(dbgPinSTP[i], GPIO_MODE_00); /* set gpio mode */ - - /* toggle twice to check if ok: */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ZERO); /* tie low */ - mt_set_gpio_out(dbgPinSTP[i], GPIO_OUT_ONE); /* tie high*/ - } - //printk(KERN_INFO "[%s] initialization ok \n", __FUNCTION__); -} - -void debug_gpio_deinit(void) -{ - int i; - for (i = 0; i < sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]); ++i) { - if (GPIO_INVALID == dbgPinSTP[i]) { - continue; - } - //printk(KERN_INFO "[%s] %ld \n", __FUNCTION__, dbgPinSTP[i]); - mt_set_gpio_dir(dbgPinSTP[i], GPIO_DIR_IN); - } - - //printk(KERN_INFO "[%s] k\n", __FUNCTION__); -} - -void mtk_wcn_stp_debug_gpio_assert(UINT_32 dwIndex, UINT_32 dwMethod) -{ - unsigned int i; - - if (dwIndex >= (sizeof(dbgPinSTP)/sizeof(dbgPinSTP[0]))) { - //printk(KERN_INFO "[%s] invalid dwIndex(%ld) \n", __FUNCTION__, dwIndex); - return; - } - - if (dwIndex > IDX_STP_MAX) { - //printk(KERN_INFO "[%s] dwIndex(%ld) > IDX_STP_MAX(%d) \n", __FUNCTION__, dwIndex, IDX_STP_MAX); - } - - if (GPIO_INVALID == dbgPinSTP[dwIndex]) { - return; - } - - if (dwMethod & DBG_TIE_DIR) { - if (dwMethod & DBG_HIGH) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - else { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - } - return; - } - - if (dwMethod & DBG_TOGGLE(0)) { - for (i = 0; i < DBG_TOGGLE_NUM(dwMethod); ++i) { - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ZERO); - mt_set_gpio_out(dbgPinSTP[dwIndex], GPIO_OUT_ONE); - } - return; - } - - return; -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO interrupt callback function -* -* \param[in] func pointer to SDIO handle -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - INT32 ret = 0; - - prGlueInfo = mtk_wcn_hif_sdio_get_drvdata(cltCtx); - - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return (-HIF_SDIO_ERR_FAIL); - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - return ret; - } - - ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); - - return ret; -} - -#else - -static unsigned int in_interrupt = 0; - -static void mtk_sdio_interrupt(struct sdio_func *func) -{ - P_GLUE_INFO_T prGlueInfo = NULL; - - int ret = 0; - - prGlueInfo = sdio_get_drvdata(func); - ASSERT(prGlueInfo); - - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); - return; - } - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); - return; - } - - sdio_writel(prGlueInfo->rHifInfo.func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, &ret); - - #if 0 - wlanISR(prGlueInfo->prAdapter, TRUE); - - if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { - /* Should stop now... skip pending interrupt */ - //printk(KERN_INFO DRV_NAME"ignore pending interrupt\n"); - } - else { - wlanIST(prGlueInfo->prAdapter); - } - #endif - - set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); - - /* when we got sdio interrupt, we wake up the tx servie thread*/ - wake_up_interruptible(&prGlueInfo->waitq); -} -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is a SDIO probe function -* -* \param[in] func pointer to SDIO handle -* \param[in] id pointer to SDIO device id table -* -* \return void -*/ -/*----------------------------------------------------------------------------*/ - -#if MTK_WCN_HIF_SDIO - -// FIXME: global variable -static const MTK_WCN_HIF_SDIO_FUNCINFO *prFunc; - - -static INT32 -mtk_sdio_probe(MTK_WCN_HIF_SDIO_CLTCTX cltCtx, const MTK_WCN_HIF_SDIO_FUNCINFO *prFuncInfo) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - - prFunc = prFuncInfo; - - if (pfWlanProbe((PVOID) &cltCtx) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -(HIF_SDIO_ERR_FAIL); - } else { - //printk(KERN_INFO DRV_NAME"mtk_wifi_sdio_probe() done(%d)\n", ret); - } - return ret; -} -#else -static int mtk_sdio_probe ( - struct sdio_func *func, - const struct sdio_device_id *id - ) -{ - int ret = 0; - int i = 0; - - //printk(KERN_INFO DRV_NAME "mtk_sdio_probe()\n"); - - ASSERT(func); - ASSERT(id); - - //printk(KERN_INFO DRV_NAME "Basic struct size checking...\n"); - //printk(KERN_INFO DRV_NAME "sizeof(struct device) = %d\n", sizeof(struct device)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_host) = %d\n", sizeof(struct mmc_host)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_card) = %d\n", sizeof(struct mmc_card)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_driver) = %d\n", sizeof(struct mmc_driver)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_data) = %d\n", sizeof(struct mmc_data)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_command) = %d\n", sizeof(struct mmc_command)); - //printk(KERN_INFO DRV_NAME "sizeof(struct mmc_request) = %d\n", sizeof(struct mmc_request)); - //printk(KERN_INFO DRV_NAME "sizeof(struct sdio_func) = %d\n", sizeof(struct sdio_func)); - - //printk(KERN_INFO DRV_NAME "Card information checking...\n"); - //printk(KERN_INFO DRV_NAME "func = 0x%p\n", func); - //printk(KERN_INFO DRV_NAME "Number of info = %d:\n", func->card->num_info); - - for (i = 0; i < func->card->num_info; i++) { - //printk(KERN_INFO DRV_NAME "info[%d]: %s\n", i, func->card->info[i]); - } - - sdio_claim_host(func); - ret = sdio_enable_func(func); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_enable_func failed!\n"); - goto out; - } - //printk(KERN_INFO DRV_NAME"sdio_enable_func done!\n"); - - if (pfWlanProbe((PVOID)func) != WLAN_STATUS_SUCCESS) { - //printk(KERN_WARNING DRV_NAME"pfWlanProbe fail!call pfWlanRemove()\n"); - pfWlanRemove(); - ret = -1; - } - else { -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] init debug gpio, 20100815 \n", __FUNCTION__); - /* Debug pins initialization */ - debug_gpio_init(); -#endif - } - -out: - //printk(KERN_INFO DRV_NAME"mtk_sdio_probe() done(%d)\n", ret); - return ret; -} -#endif - - -#if MTK_WCN_HIF_SDIO -static INT32 -mtk_sdio_remove(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) -{ - INT32 ret = HIF_SDIO_ERR_SUCCESS; - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - return ret; -} -#else -static void -mtk_sdio_remove ( - struct sdio_func *func - ) -{ - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove()\n"); - -#if CFG_DBG_GPIO_PINS - //printk(KERN_INFO "[%s] deinit debug gpio \n", __FUNCTION__); - debug_gpio_deinit(); -#endif - - ASSERT(func); - //printk(KERN_INFO DRV_NAME"pfWlanRemove done\n"); - pfWlanRemove(); - - sdio_claim_host(func); - sdio_disable_func(func); - //printk(KERN_INFO DRV_NAME"sdio_disable_func() done\n"); - sdio_release_host(func); - - //printk(KERN_INFO DRV_NAME"mtk_sdio_remove() done\n"); -} -#endif - -#if (MTK_WCN_HIF_SDIO == 0) -static int -mtk_sdio_suspend ( - struct device * pDev, - pm_message_t state - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_suspend dev(0x%p)\n", pDev); - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - - return 0; -} - -int mtk_sdio_resume ( - struct device * pDev - ) -{ - //printk(KERN_INFO "mtk_sdio: mtk_sdio_resume dev(0x%p)\n", pDev); - - return 0; -} -#endif - -static const struct dev_pm_ops mtk_sdio_pmops = { - .suspend = mtk_sdio_suspend, - .resume = mtk_sdio_resume, -}; -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register sdio bus to the os -* -* \param[in] pfProbe Function pointer to detect card -* \param[in] pfRemove Function pointer to remove card -* -* \return The result of registering sdio bus -*/ -/*----------------------------------------------------------------------------*/ -WLAN_STATUS -glRegisterBus ( - probe_card pfProbe, - remove_card pfRemove - ) -{ - int ret = 0; - - ASSERT(pfProbe); - ASSERT(pfRemove); - - //printk(KERN_INFO "mtk_sdio: MediaTek SDIO WLAN driver\n"); - //printk(KERN_INFO "mtk_sdio: Copyright MediaTek Inc.\n"); - - pfWlanProbe = pfProbe; - pfWlanRemove = pfRemove; - -#if MTK_WCN_HIF_SDIO - /* register MTK sdio client */ - ret = ((mtk_wcn_hif_sdio_client_reg(&cltInfo) == HIF_SDIO_ERR_SUCCESS) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE); -#else - mtk_sdio_driver.probe = mtk_sdio_probe; - mtk_sdio_driver.remove = mtk_sdio_remove; - - //mtk_sdio_driver.drv.suspend = mtk_sdio_suspend; - //mtk_sdio_driver.drv.resume = mtk_sdio_resume; - mtk_sdio_driver.drv.pm = &mtk_sdio_pmops; - ret = (sdio_register_driver(&mtk_sdio_driver) == 0) ? WLAN_STATUS_SUCCESS : WLAN_STATUS_FAILURE; -#endif - - - return ret; -} /* end of glRegisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will unregister sdio bus to the os -* -* \param[in] pfRemove Function pointer to remove card -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glUnregisterBus( - remove_card pfRemove - ) -{ - ASSERT(pfRemove); - pfRemove(); - -#if MTK_WCN_HIF_SDIO - /* unregister MTK sdio client */ - mtk_wcn_hif_sdio_client_unreg(&cltInfo); -#else - sdio_unregister_driver(&mtk_sdio_driver); -#endif - - return; -} /* end of glUnregisterBus() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function stores hif related info, which is initialized before. -* -* \param[in] prGlueInfo Pointer to glue info structure -* \param[in] u4Cookie Pointer to UINT_32 memory base variable for _HIF_HPI -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glSetHifInfo ( - P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Cookie - ) -{ - P_GL_HIF_INFO_T prHif = NULL; - - prHif = &prGlueInfo->rHifInfo; - -#if MTK_WCN_HIF_SDIO - //prHif->prFuncInfo = ((MTK_WCN_HIF_SDIO_FUNCINFO *) u4Cookie); - prHif->prFuncInfo = prFunc; - prHif->cltCtx = *((MTK_WCN_HIF_SDIO_CLTCTX *) u4Cookie); - mtk_wcn_hif_sdio_set_drvdata(prHif->cltCtx, prGlueInfo); - -#else - prHif->func = (struct sdio_func *) u4Cookie; - - //printk(KERN_INFO DRV_NAME"prHif->func->dev = 0x%p\n", &prHif->func->dev); - //printk(KERN_INFO DRV_NAME"prHif->func->vendor = 0x%04X\n", prHif->func->vendor); - //printk(KERN_INFO DRV_NAME"prHif->func->device = 0x%04X\n", prHif->func->device); - //printk(KERN_INFO DRV_NAME"prHif->func->func = 0x%04X\n", prHif->func->num); - - sdio_set_drvdata(prHif->func, prGlueInfo); - - SET_NETDEV_DEV(prGlueInfo->prDevHandler, &prHif->func->dev); -#endif - - return; -} /* end of glSetHifInfo() */ - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function clears hif related info. -* -* \param[in] prGlueInfo Pointer to glue info structure -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glClearHifInfo ( - P_GLUE_INFO_T prGlueInfo - ) -{ - //P_GL_HIF_INFO_T prHif = NULL; - //ASSERT(prGlueInfo); - //prHif = &prGlueInfo->rHifInfo; - - return; -} /* end of glClearHifInfo() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Initialize bus operation and hif related information, request resources. -* -* \param[out] pvData A pointer to HIF-specific data type buffer. -* For eHPI, pvData is a pointer to UINT_32 type and stores a -* mapped base address. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -BOOL -glBusInit ( - PVOID pvData - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - int ret = 0; - struct sdio_func *func = NULL; - - ASSERT(pvData); - - func = (struct sdio_func *) pvData; - - sdio_claim_host(func); - ret = sdio_set_block_size(func, 512); - sdio_release_host(func); - - if (ret) { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 failed!\n"); - } - else { - //printk(KERN_INFO DRV_NAME"sdio_set_block_size 512 done!\n"); - } - - //printk(KERN_INFO DRV_NAME"param: func->cur_blksize(%d)\n", func->cur_blksize); - //printk(KERN_INFO DRV_NAME"param: func->max_blksize(%d)\n", func->max_blksize); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_size(%d)\n", func->card->host->max_blk_size); - //printk(KERN_INFO DRV_NAME"param: func->card->host->max_blk_count(%d)\n", func->card->host->max_blk_count); -#endif - return TRUE; -} /* end of glBusInit() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus operation and release resources. -* -* \param[in] pvData A pointer to struct net_device. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusRelease ( - PVOID pvData - ) -{ - - return; -} /* end of glBusRelease() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Setup bus interrupt operation and interrupt handler for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pfnIsr A pointer to interrupt handler function. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \retval WLAN_STATUS_SUCCESS if success -* NEGATIVE_VALUE if fail -*/ -/*----------------------------------------------------------------------------*/ -INT_32 -glBusSetIrq ( - PVOID pvData, - PVOID pfnIsr, - PVOID pvCookie - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - - ASSERT(pvData); - if (!pvData) { - return -1; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - return -1; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_claim_irq(prHifInfo->func, mtk_sdio_interrupt); - sdio_release_host(prHifInfo->func); -#endif - return ret; -} /* end of glBusSetIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Stop bus interrupt operation and disable interrupt handling for os. -* -* \param[in] pvData A pointer to struct net_device. -* \param[in] pvCookie Private data for pfnIsr function. -* -* \return (none) -*/ -/*----------------------------------------------------------------------------*/ -VOID -glBusFreeIrq ( - PVOID pvData, - PVOID pvCookie - ) -{ -#if (MTK_WCN_HIF_SDIO == 0) - struct net_device *prNetDevice = NULL; - P_GLUE_INFO_T prGlueInfo = NULL; - P_GL_HIF_INFO_T prHifInfo = NULL; - int ret = 0; - - ASSERT(pvData); - if (!pvData) { - //printk(KERN_INFO DRV_NAME"%s null pvData\n", __FUNCTION__); - return; - } - prNetDevice = (struct net_device *) pvData; - prGlueInfo = (P_GLUE_INFO_T) pvCookie; - ASSERT(prGlueInfo); - if (!prGlueInfo) { - //printk(KERN_INFO DRV_NAME"%s no glue info\n", __FUNCTION__); - return; - } - - prHifInfo = &prGlueInfo->rHifInfo; - - sdio_claim_host(prHifInfo->func); - ret = sdio_release_irq(prHifInfo->func); - sdio_release_host(prHifInfo->func); -#endif - - return; -} /* end of glBusreeIrq() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] pu4Value Pointer to variable used to store read value -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ) -{ - int ret = 0; - - ASSERT(prGlueInfo); - ASSERT(pu4Value); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_readl(prGlueInfo->rHifInfo.cltCtx, u4Register, (PUINT32) pu4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - *pu4Value = sdio_readl(prGlueInfo->rHifInfo.func, u4Register, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readl() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readl() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write a 32-bit device register -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Register Register offset -* \param[in] u4Value Value to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ) -{ - int ret = 0; - - ASSERT(prGlueInfo); - -#if MTK_WCN_HIF_SDIO - ret = mtk_wcn_hif_sdio_writel(prGlueInfo->rHifInfo.cltCtx, u4Register, u4Value); -#else - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - sdio_writel(prGlueInfo->rHifInfo.func, u4Value, u4Register, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writel() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writel() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevRegWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Read device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be read -* \param[out] pucBuf Pointer to read buffer -* \param[in] u2ValidOutBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortRead ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucDst = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortRead++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucDst = pucBuf; - - ASSERT(u2Len <= u2ValidOutBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { - ret = sdio_readsb(prSdioFunc, pucDst, u2Port, count); - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= (prGlueInfo->rHifInfo).prFuncInfo->blk_sz) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { - ret = mtk_wcn_hif_sdio_read_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucDst, count); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_readsb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_readsb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortRead() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u2Port I/O port offset -* \param[in] u2Len Length to be write -* \param[in] pucBuf Pointer to write buffer -* \param[in] u2ValidInBufSize Length of the buffer valid to be accessed -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevPortWrite ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ) -{ - P_GL_HIF_INFO_T prHifInfo = NULL; - PUINT_8 pucSrc = NULL; - int count = u2Len; - int ret = 0; - int bNum = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - struct sdio_func *prSdioFunc = NULL; -#endif - - #if DBG - //printk(KERN_INFO DRV_NAME"++kalDevPortWrite++ buf:0x%p, port:0x%x, length:%d\n", pucBuf, u2Port, u2Len); - #endif - - ASSERT(prGlueInfo); - prHifInfo = &prGlueInfo->rHifInfo; - - ASSERT(pucBuf); - pucSrc = pucBuf; - - ASSERT(u2Len <= u2ValidInBufSize); - -#if (MTK_WCN_HIF_SDIO == 0) - prSdioFunc = prHifInfo->func; - ASSERT(prSdioFunc->cur_blksize > 0); - - if (!in_interrupt) { - sdio_claim_host(prSdioFunc); - } - - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= prSdioFunc->cur_blksize) { - count -= prSdioFunc->cur_blksize; - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - count = (count+3)/4*4; - if (bNum > 0) { // block mode - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, prSdioFunc->cur_blksize * bNum); - -#ifdef CONFIG_X86 - /* ENE workaround */ - { - int tmp; - sdio_writel(prSdioFunc, 0x0, SDIO_X86_WORKAROUND_WRITE_MCR, &tmp); - } -#endif - - } - else { // byte mode - - ret = sdio_writesb(prSdioFunc, u2Port, pucSrc, count); - } - - if (!in_interrupt) { - sdio_release_host(prSdioFunc); - } -#else - /* Split buffer into multiple single block to workaround hifsys */ - while (count >= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz)) { - count -= ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz); - bNum++; - } - if (count > 0 && bNum > 0) { - bNum++; - } - - if (bNum > 0) { // block mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, - ((prGlueInfo->rHifInfo).prFuncInfo->blk_sz) * bNum); - } - else { // byte mode - ret = mtk_wcn_hif_sdio_write_buf(prGlueInfo->rHifInfo.cltCtx, u2Port, (PUINT32) pucSrc, count); - } -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writesb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writesb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; -} /* end of kalDevPortWrite() */ - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Write device I/O port in byte with CMD52 -* -* \param[in] prGlueInfo Pointer to the GLUE_INFO_T structure. -* \param[in] u4Addr I/O port offset -* \param[in] ucData Single byte of data to be written -* -* \retval TRUE operation success -* \retval FALSE operation fail -*/ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ) -{ - int ret = 0; - -#if (MTK_WCN_HIF_SDIO == 0) - if (!in_interrupt) { - sdio_claim_host(prGlueInfo->rHifInfo.func); - } - - sdio_writeb(prGlueInfo->rHifInfo.func, ucData, u4Addr, &ret); - - if (!in_interrupt) { - sdio_release_host(prGlueInfo->rHifInfo.func); - } -#else - ret = mtk_wcn_hif_sdio_writeb(prGlueInfo->rHifInfo.cltCtx, u4Addr, ucData); -#endif - - if (ret) { - kalSendAeeWarning(HIF_SDIO_ERR_TITLE_STR, HIF_SDIO_ERR_DESC_STR "sdio_writeb() reports error: %x", ret); - DBGLOG(HAL, ERROR, ("sdio_writeb() reports error: %x", ret)); - } - - return (ret) ? FALSE : TRUE; - -} /* end of kalDevWriteWithSdioCmd52() */ - - -VOID -glSetPowerState ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 ePowerMode - ) -{ - return; -} - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/sdio/x86.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/sdio/x86.c deleted file mode 100755 index 599fcaf3c81d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/hif/sdio/x86.c +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** -*[File] mt6516-evb.c -*[Version] v1.0 -*[Revision Date] 2010-03-01 -*[Author] -*[Description] -* dummy file for build system -*[Copyright] -* Copyright (C) 2010 MediaTek Incorporation. All Rights Reserved. -******************************************************************************/ - - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: mt6516-evb.c $ - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * remove debug message - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** -*/ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_cfg80211.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_cfg80211.h deleted file mode 100755 index 7d023b89ae98..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_cfg80211.h +++ /dev/null @@ -1,319 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/include/gl_cfg80211.h#1 $ -*/ - -/*! \file gl_cfg80211.h - \brief This file is for Portable Driver linux cfg80211 support. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_cfg80211.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . - * -*/ - -#ifndef _GL_CFG80211_H -#define _GL_CFG80211_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#include "gl_os.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* cfg80211 hooks */ -int -mtk_cfg80211_change_iface ( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params - ); - - -int -mtk_cfg80211_add_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - - -int -mtk_cfg80211_get_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - - -int -mtk_cfg80211_del_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - - -int -mtk_cfg80211_set_default_key ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int -mtk_cfg80211_get_station ( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - - -int -mtk_cfg80211_scan ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - - -int -mtk_cfg80211_connect ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_connect_params *sme - ); - - -int -mtk_cfg80211_disconnect ( - struct wiphy *wiphy, - struct net_device *ndev, - u16 reason_code - ); - - -int -mtk_cfg80211_join_ibss ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_ibss_params *params - ); - - -int -mtk_cfg80211_leave_ibss ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_set_power_mgmt ( - struct wiphy *wiphy, - struct net_device *ndev, - bool enabled, - int timeout - ); - - -int -mtk_cfg80211_set_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_del_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_pmksa *pmksa - ); - - -int -mtk_cfg80211_flush_pmksa ( - struct wiphy *wiphy, - struct net_device *ndev - ); - - -int -mtk_cfg80211_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie - ); - - -int -mtk_cfg80211_cancel_remain_on_channel ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - - -int -mtk_cfg80211_mgmt_tx ( - struct wiphy *wiphy, - struct net_device *ndev, - struct ieee80211_channel *channel, - bool offscan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, - unsigned int wait, - const u8 *buf, - size_t len, - bool no_cck, - bool dont_wait_for_ack, - u64 *cookie - ); - - -int -mtk_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); - -int -mtk_cfg80211_testmode_sw_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#if CFG_SUPPORT_WAPI -int -mtk_cfg80211_testmode_set_key_ext( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#endif -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_CFG80211_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_kal.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_kal.h deleted file mode 100755 index 4d069d181d3b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_kal.h +++ /dev/null @@ -1,2294 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/include/gl_kal.h#1 $ -*/ - -/*! \file gl_kal.h - \brief Declaration of KAL functions - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_kal.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . - * - * 06 13 2012 yuche.tsai - * NULL - * Update maintrunk driver. - * Add support for driver compose assoc request frame. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Snc CFG80211 modification for ICS migration from branch 2.2. - * - * 02 06 2012 wh.su - * [WCXRP00001177] [MT6620 Wi-Fi][Driver][2.2] Adding the query channel filter for AP mode - * adding the channel query filter for AP mode. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 24 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adjust the code for Non-DBG and no XLOG. - * - * 11 22 2011 cp.wu - * [WCXRP00001120] [MT6620 Wi-Fi][Driver] Modify roaming to AIS state transition from synchronous to asynchronous approach to avoid incomplete state termination - * 1. change RDD related compile option brace position. - * 2. when roaming is triggered, ask AIS to transit immediately only when AIS is in Normal TR state without join timeout timer ticking - * 3. otherwise, insert AIS_REQUEST into pending request queue - * - * 11 11 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * modify the xlog related code. - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 11 10 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Modify the QM xlog level and remove LOG_FUNC. - * - * 11 10 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Using the new XLOG define for dum Memory. - * - * 11 08 2011 eddie.chen - * [WCXRP00001096] [MT6620 Wi-Fi][Driver/FW] Enhance the log function (xlog) - * Add xlog function. - * - * 11 08 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters, eCurPsProf, for PS. - * - * 11 08 2011 cm.chang - * NULL - * Add RLM and CNM debug message for XLOG - * - * 11 07 2011 tsaiyuan.hsu - * [WCXRP00001083] [MT6620 Wi-Fi][DRV]] dump debug counter or frames when debugging is triggered - * add debug counters and periodically dump counters for debugging. - * - * 11 03 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * Add dumpMemory8 at XLOG support. - * - * 11 02 2011 wh.su - * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG - * adding the code for XLOG. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * include link.h for linux's port. - * - * 04 12 2011 cp.wu - * [WCXRP00000635] [MT6620 Wi-Fi][Driver] Clear pending security frames when QM clear pending data frames for dedicated network type - * clear pending security frames for dedicated network type when BSS is being deactivated/disconnected - * - * 04 01 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * 1. simplify config.h due to aggregation options could be also applied for eHPI/SPI interface - * 2. use spin-lock instead of semaphore for protecting eHPI access because of possible access from ISR - * 3. request_irq() API has some changes between linux kernel 2.6.12 and 2.6.26 - * - * 03 16 2011 cp.wu - * [WCXRP00000562] [MT6620 Wi-Fi][Driver] I/O buffer pre-allocation to avoid physically continuous memory shortage after system running for a long period - * 1. pre-allocate physical continuous buffer while module is being loaded - * 2. use pre-allocated physical continuous buffer for TX/RX DMA transfer - * - * The windows part remained the same as before, but added similiar APIs to hide the difference. - * - * 03 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Add BOW table. - * - * 03 07 2011 terry.wu - * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message - * Toggle non-standard debug messages to comments. - * - * 03 06 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Sync BOW Driver to latest person development branch version.. - * - * 03 02 2011 cp.wu - * [WCXRP00000503] [MT6620 Wi-Fi][Driver] Take RCPI brought by association response as initial RSSI right after connection is built. - * use RCPI brought by ASSOC-RESP after connection is built as initial RCPI to avoid using a uninitialized MAC-RX RCPI. - * - * 02 24 2011 cp.wu - * [WCXRP00000490] [MT6620 Wi-Fi][Driver][Win32] modify kalMsleep() implementation because NdisMSleep() won't sleep long enough for specified interval such as 500ms - * modify cnm_timer and hem_mbox APIs to be thread safe to ease invoking restrictions - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 04 2011 cp.wu - * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to ease physically continous memory demands - * separate kalMemAlloc() into virtually-continous and physically-continous type to ease slab system pressure - * - * 12 31 2010 cp.wu - * [WCXRP00000335] [MT6620 Wi-Fi][Driver] change to use milliseconds sleep instead of delay to avoid blocking to system scheduling - * change to use msleep() and shorten waiting interval to reduce blocking to other task while Wi-Fi driver is being loaded - * - * 12 31 2010 jeffrey.chang - * [WCXRP00000332] [MT6620 Wi-Fi][Driver] add kal sleep function for delay which use blocking call - * modify the implementation of kalDelay to msleep - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 11 30 2010 yuche.tsai - * NULL - * Invitation & Provision Discovery Indication. - * - * 11 26 2010 cp.wu - * [WCXRP00000209] [MT6620 Wi-Fi][Driver] Modify NVRAM checking mechanism to warning only with necessary data field checking - * 1. NVRAM error is now treated as warning only, thus normal operation is still available but extra scan result used to indicate user is attached - * 2. DPD and TX-PWR are needed fields from now on, if these 2 fields are not availble then warning message is shown - * - * 11 08 2010 cp.wu - * [WCXRP00000166] [MT6620 Wi-Fi][Driver] use SDIO CMD52 for enabling/disabling interrupt to reduce transaction period - * change to use CMD52 for enabling/disabling interrupt to reduce SDIO transaction time - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * add a kal function for set cipher. - * - * 10 04 2010 wh.su - * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P - * fixed compiling error while enable p2p. - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 21 2010 cp.wu - * [WCXRP00000053] [MT6620 Wi-Fi][Driver] Reset incomplete and might leads to BSOD when entering RF test with AIS associated - * Do a complete reset with STA-REC null checking for RF test re-entry - * - * 09 21 2010 kevin.huang - * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning - * Eliminate Linux Compile Warning - * - * 09 10 2010 wh.su - * NULL - * fixed the compiling error at win XP. - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct Driver Hook] change event indication API to be consistent with supplicant - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * modify kalSetEvent declaration - * - * 07 29 2010 cp.wu - * NULL - * simplify post-handling after TX_DONE interrupt is handled. - * - * 07 23 2010 cp.wu - * - * 1) re-enable AIS-FSM beacon timeout handling. - * 2) scan done API revised - * - * 07 23 2010 jeffrey.chang - * - * fix kal header file - * - * 07 22 2010 jeffrey.chang - * - * use different spin lock for security frame - * - * 07 22 2010 jeffrey.chang - * - * add new spinlock - * - * 07 19 2010 jeffrey.chang - * - * add kal api for scanning done - * - * 07 19 2010 jeffrey.chang - * - * modify cmd/data path for new design - * - * 07 19 2010 jeffrey.chang - * - * add new kal api - * - * 07 19 2010 jeffrey.chang - * - * Linux port modification - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 21 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * change MAC address updating logic. - * - * 06 18 2010 cm.chang - * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver - * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf - * - * 06 11 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * 1) migrate assoc.c. - * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness - * 3) add configuration options for CNM_MEM and RSN modules - * 4) add data path for management frames - * 5) eliminate rPacketInfo of MSDU_INFO_T - * - * 06 07 2010 cp.wu - * [WPD00003833][MT6620 and MT5931] Driver migration - * gl_kal merged - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic handling framework for wireless extension ioctls. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * fill network type field while doing frame identification. - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * modify kalMemAlloc method - * - * 04 28 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change prefix for data structure used to communicate with 802.11 PAL - * to avoid ambiguous naming with firmware interface - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 22 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * when acquiring driver-own, wait for up to 8 seconds. - * - * 04 22 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * - * 1) modify rx path code for supporting Wi-Fi direct - * 2) modify config.h since Linux dont need to consider retaining packet - * - * 04 21 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add for private ioctl support - * - * 04 20 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * don't need SPIN_LOCK_PWR_CTRL anymore, it will raise IRQL - * * and cause SdBusSubmitRequest running at DISPATCH_LEVEL as well. - * - * 04 14 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * information buffer for query oid/ioctl is now buffered in prCmdInfo - * * * * * * * * instead of glue-layer variable to improve multiple oid/ioctl capability - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) add spinlock - * * * 2) add KAPI for handling association info - * - * 04 09 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * adding firmware download KAPI - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * finish non-glue layer access to glue variables - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * accessing to firmware load/start address, and access to OID handling information - * * * * are now handled in glue layer - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * are done in adapter layer. - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->eParamMediaStateIndicated from non-glue layer - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * add KAL API: kalFlushPendingTxPackets(), and take use of the API - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access to prGlueInfo->rWlanInfo.eLinkAttr.ucMediaStreamMode from non-glue layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) for some OID, never do timeout expiration - * * * * 2) add 2 kal API for later integration - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download KAPI - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\41 2009-09-28 20:19:23 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\40 2009-08-18 22:57:09 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\39 2009-06-23 23:19:15 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\38 2009-02-09 14:03:17 GMT mtk01090 -** Add KAL function kalDevSetPowerState(). It is not implemented yet. Only add an empty macro. -** -** \main\maintrunk.MT5921\37 2009-01-22 13:05:59 GMT mtk01088 -** new defeine to got 1x value at packet reserved field -** \main\maintrunk.MT5921\36 2008-12-08 16:15:02 GMT mtk01461 -** Add kalQueryValidBufferLength() macro -** \main\maintrunk.MT5921\35 2008-11-13 20:33:15 GMT mtk01104 -** Remove lint warning -** \main\maintrunk.MT5921\34 2008-10-22 11:05:52 GMT mtk01461 -** Remove unused macro -** \main\maintrunk.MT5921\33 2008-10-16 15:48:17 GMT mtk01461 -** Update driver to fix lint warning -** \main\maintrunk.MT5921\32 2008-09-02 11:50:51 GMT mtk01461 -** SPIN_LOCK_SDIO_DDK_TX_QUE -** \main\maintrunk.MT5921\31 2008-08-29 15:58:30 GMT mtk01088 -** remove non-used function for code refine -** \main\maintrunk.MT5921\30 2008-08-21 00:33:29 GMT mtk01461 -** Update for Driver Review -** \main\maintrunk.MT5921\29 2008-06-19 13:29:14 GMT mtk01425 -** 1. Add declaration of SPIN_LOCK_SDIO_DDK_TX_QUE and SPIN_LOCK_SDIO_DDK_RX_QUE -** \main\maintrunk.MT5921\28 2008-05-30 20:27:34 GMT mtk01461 -** Rename KAL function -** \main\maintrunk.MT5921\27 2008-05-30 14:42:05 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\26 2008-05-29 14:15:18 GMT mtk01084 -** remove un-used function -** \main\maintrunk.MT5921\25 2008-04-23 14:02:20 GMT mtk01084 -** modify KAL port access function prototype -** \main\maintrunk.MT5921\24 2008-04-17 23:06:41 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\23 2008-04-08 15:38:50 GMT mtk01084 -** add KAL function to setting pattern search function enable/ disable -** \main\maintrunk.MT5921\22 2008-03-26 15:34:48 GMT mtk01461 -** Add update MAC address func -** \main\maintrunk.MT5921\21 2008-03-18 15:56:15 GMT mtk01084 -** update ENUM_NIC_INITIAL_PARAM_E -** \main\maintrunk.MT5921\20 2008-03-18 11:49:28 GMT mtk01084 -** update function for initial value access -** \main\maintrunk.MT5921\19 2008-03-18 10:21:31 GMT mtk01088 -** use kal update associate request at linux -** \main\maintrunk.MT5921\18 2008-03-14 18:03:41 GMT mtk01084 -** refine register and port access function -** \main\maintrunk.MT5921\17 2008-03-11 14:51:02 GMT mtk01461 -** Add copy_to(from)_user macro -** \main\maintrunk.MT5921\16 2008-03-06 23:42:21 GMT mtk01385 -** 1. add Query Registry Mac address function. -** \main\maintrunk.MT5921\15 2008-02-26 09:48:04 GMT mtk01084 -** modify KAL set network address/ checksum offload part -** \main\maintrunk.MT5921\14 2008-01-09 17:54:58 GMT mtk01084 -** Modify the argument of kalQueryPacketInfo -** \main\maintrunk.MT5921\13 2007-11-29 02:05:20 GMT mtk01461 -** Fix Windows RX multiple packet retain problem -** \main\maintrunk.MT5921\12 2007-11-26 19:43:45 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\11 2007-11-09 16:36:15 GMT mtk01425 -** 1. Modify for CSUM offloading with Tx Fragment -** \main\maintrunk.MT5921\10 2007-11-07 18:38:37 GMT mtk01461 -** Add Tx Fragmentation Support -** \main\maintrunk.MT5921\9 2007-11-06 19:36:50 GMT mtk01088 -** add the WPS related code -** \main\maintrunk.MT5921\8 2007-11-02 01:03:57 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.4 2007/07/05 07:25:33 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:50 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:23 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - - -#ifndef _GL_KAL_H -#define _GL_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "link.h" -#include "nic/mac.h" -#include "nic/wlan_def.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "gl_wext_priv.h" - - -#if CFG_ENABLE_BT_OVER_WIFI - #include "nic/bow.h" -#endif - -#if DBG -extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -//#define USEC_PER_MSEC (1000) - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef enum _ENUM_SPIN_LOCK_CATEGORY_E { - SPIN_LOCK_FSM = 0, - - /* FIX ME */ - SPIN_LOCK_RX_QUE, - SPIN_LOCK_TX_QUE, - SPIN_LOCK_CMD_QUE, - SPIN_LOCK_TX_RESOURCE, - SPIN_LOCK_CMD_RESOURCE, - SPIN_LOCK_QM_TX_QUEUE, - SPIN_LOCK_CMD_PENDING, - SPIN_LOCK_CMD_SEQ_NUM, - SPIN_LOCK_TX_MSDU_INFO_LIST, - SPIN_LOCK_TXING_MGMT_LIST, - SPIN_LOCK_TX_SEQ_NUM, - SPIN_LOCK_TX_COUNT, - SPIN_LOCK_TXS_COUNT, - /* end */ - SPIN_LOCK_TX, - SPIN_LOCK_IO_REQ, - SPIN_LOCK_INT, - - SPIN_LOCK_MGT_BUF, - SPIN_LOCK_MSG_BUF, - SPIN_LOCK_STA_REC, - - SPIN_LOCK_MAILBOX, - SPIN_LOCK_TIMER, - - SPIN_LOCK_BOW_TABLE, - - SPIN_LOCK_EHPI_BUS, /* only for EHPI */ - SPIN_LOCK_NET_DEV, - SPIN_LOCK_NUM -} ENUM_SPIN_LOCK_CATEGORY_E; - -/* event for assoc infomation update */ -typedef struct _EVENT_ASSOC_INFO { - UINT_8 ucAssocReq; /* 1 for assoc req, 0 for assoc rsp */ - UINT_8 ucReassoc; /* 0 for assoc, 1 for reassoc */ - UINT_16 u2Length; - PUINT_8 pucIe; -} EVENT_ASSOC_INFO, *P_EVENT_ASSOC_INFO; - -typedef enum _ENUM_KAL_NETWORK_TYPE_INDEX_T { - KAL_NETWORK_TYPE_AIS_INDEX = 0, -#if CFG_ENABLE_WIFI_DIRECT - KAL_NETWORK_TYPE_P2P_INDEX, -#endif -#if CFG_ENABLE_BT_OVER_WIFI - KAL_NETWORK_TYPE_BOW_INDEX, -#endif - KAL_NETWORK_TYPE_INDEX_NUM -} ENUM_KAL_NETWORK_TYPE_INDEX_T; - -typedef enum _ENUM_KAL_MEM_ALLOCATION_TYPE_E { - PHY_MEM_TYPE, /* physically continuous */ - VIR_MEM_TYPE, /* virtually continous */ - MEM_TYPE_NUM -} ENUM_KAL_MEM_ALLOCATION_TYPE; - -#if CONFIG_ANDROID /* Defined in Android kernel source */ -typedef struct wake_lock KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#else -typedef UINT_32 KAL_WAKE_LOCK_T, *P_KAL_WAKE_LOCK_T; -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#define KAL_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags - -#define KAL_ACQUIRE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalAcquireSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, &__u4Flags) - -#define KAL_RELEASE_SPIN_LOCK(_prAdapter, _rLockCategory) \ - kalReleaseSpinLock(((P_ADAPTER_T)_prAdapter)->prGlueInfo, _rLockCategory, __u4Flags) - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define KAL_GET_PKT_QUEUE_ENTRY(_p) GLUE_GET_PKT_QUEUE_ENTRY(_p) -#define KAL_GET_PKT_DESCRIPTOR(_prQueueEntry) GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) -#define KAL_GET_PKT_TID(_p) GLUE_GET_PKT_TID(_p) -#define KAL_GET_PKT_IS1X(_p) GLUE_GET_PKT_IS1X(_p) -#define KAL_GET_PKT_HEADER_LEN(_p) GLUE_GET_PKT_HEADER_LEN(_p) -#define KAL_GET_PKT_PAYLOAD_LEN(_p) GLUE_GET_PKT_PAYLOAD_LEN(_p) -#define KAL_GET_PKT_ARRIVAL_TIME(_p) GLUE_GET_PKT_ARRIVAL_TIME(_p) - -/*----------------------------------------------------------------------------*/ -/* Macros of wake_lock operations for using in Driver Layer */ -/*----------------------------------------------------------------------------*/ -#if CONFIG_ANDROID /* Defined in Android kernel source */ -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) \ - wake_lock_init(_prWakeLock, WAKE_LOCK_SUSPEND, _pcName) - -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) \ - wake_lock_destroy(_prWakeLock) - -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) \ - wake_lock(_prWakeLock) - -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) \ - wake_lock_timeout(_prWakeLock, _u4Timeout) - -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) \ - wake_unlock(_prWakeLock) - -#else -#define KAL_WAKE_LOCK_INIT(_prAdapter, _prWakeLock, _pcName) -#define KAL_WAKE_LOCK_DESTROY(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK(_prAdapter, _prWakeLock) -#define KAL_WAKE_LOCK_TIMEOUT(_prAdapter, _prWakeLock, _u4Timeout) -#define KAL_WAKE_UNLOCK(_prAdapter, _prWakeLock) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Cache memory allocation -* -* \param[in] u4Size Required memory size. -* \param[in] eMemType Memory allocation type -* -* \return Pointer to allocated memory -* or NULL -*/ -/*----------------------------------------------------------------------------*/ -#if DBG -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - if (pvAddr) { \ - allocatedMemSize += u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) allocated (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - pvAddr; \ - }) -#else -#define kalMemAlloc(u4Size, eMemType) ({ \ - void *pvAddr; \ - if(eMemType == PHY_MEM_TYPE) { \ - pvAddr = kmalloc(u4Size, GFP_KERNEL); \ - } \ - else { \ - pvAddr = vmalloc(u4Size); \ - } \ - pvAddr; \ - }) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Free allocated cache memory -* -* \param[in] pvAddr Required memory size. -* \param[in] eMemType Memory allocation type -* \param[in] u4Size Allocated memory size. -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#if DBG -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if (pvAddr) { \ - allocatedMemSize -= u4Size; \ - printk(KERN_INFO DRV_NAME "0x%p(%ld) freed (%s:%s)\n", \ - pvAddr, (UINT_32)u4Size, __FILE__, __FUNCTION__); \ - } \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -#else -#define kalMemFree(pvAddr, eMemType, u4Size) \ - { \ - if(eMemType == PHY_MEM_TYPE) { \ - kfree(pvAddr); \ - } \ - else { \ - vfree(pvAddr); \ - } \ - } -#endif - -#define kalUdelay(u4USec) udelay(u4USec) - -#define kalMdelay(u4MSec) mdelay(u4MSec) -#define kalMsleep(u4MSec) msleep(u4MSec) - -/* Copy memory from user space to kernel space */ -#define kalMemCopyFromUser(_pvTo, _pvFrom, _u4N) copy_from_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory from kernel space to user space */ -#define kalMemCopyToUser(_pvTo, _pvFrom, _u4N) copy_to_user(_pvTo, _pvFrom, _u4N) - -/* Copy memory block with specific size */ -#define kalMemCopy(pvDst, pvSrc, u4Size) memcpy(pvDst, pvSrc, u4Size) - -/* Set memory block with specific pattern */ -#define kalMemSet(pvAddr, ucPattern, u4Size) memset(pvAddr, ucPattern, u4Size) - -/* Compare two memory block with specific length. - * Return zero if they are the same. - */ -#define kalMemCmp(pvAddr1, pvAddr2, u4Size) memcmp(pvAddr1, pvAddr2, u4Size) - -/* Zero specific memory block */ -#define kalMemZero(pvAddr, u4Size) memset(pvAddr, 0, u4Size) - -/* defined for wince sdio driver only */ -#if defined(_HIF_SDIO) -#define kalDevSetPowerState(prGlueInfo, ePowerMode) glSetPowerState(prGlueInfo, ePowerMode) -#else -#define kalDevSetPowerState(prGlueInfo, ePowerMode) -#endif - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Notify OS with SendComplete event of the specific packet. Linux should -* free packets here. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] status Status Code for OS upper layer -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalSendComplete(prGlueInfo, pvPacket, status) \ - kalSendCompleteAndAwakeQueue(prGlueInfo, pvPacket) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to locate the starting address of incoming ethernet -* frame for skb. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryBufferPointer(prGlueInfo, pvPacket) \ - ((PUINT_8)((struct sk_buff *)pvPacket)->data) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to query the length of valid buffer which is accessible during -* port read/write. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* -* \return starting address of ethernet frame buffer. -*/ -/*----------------------------------------------------------------------------*/ -#define kalQueryValidBufferLength(prGlueInfo, pvPacket) \ - ((UINT_32)((struct sk_buff *)pvPacket)->end - \ - (UINT_32)((struct sk_buff *)pvPacket)->data) - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function is used to copy the entire frame from skb to the destination -* address in the input parameter. -* -* \param[in] prGlueInfo Pointer of GLUE Data Structure -* \param[in] pvPacket Pointer of Packet Handle -* \param[in] pucDestBuffer Destination Address -* -* \return - -*/ -/*----------------------------------------------------------------------------*/ -#define kalCopyFrame(prGlueInfo, pvPacket, pucDestBuffer) \ - {struct sk_buff *skb = (struct sk_buff *)pvPacket; \ - memcpy(pucDestBuffer, skb->data, skb->len);} - -#define kalGetTimeTick() jiffies_to_msecs(jiffies) - -#define kalPrint printk - -#if !DBG -#if CFG_SUPPORT_XLOG -#define XLOG_TAG "wlan" - -#define XLOG_FUNC(__LEVEL, __FMT...)\ - if (__LEVEL == ANDROID_LOG_ERROR) {\ - xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_WARN) {\ - xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_INFO) {\ - xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_DEBUG) {\ - xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, ##__FMT);\ - } \ - else if (__LEVEL == ANDROID_LOG_VERBOSE) {\ - xlog_printk(ANDROID_LOG_VERBOSE, XLOG_TAG, ##__FMT);\ - } - -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define AIS_ERROR_LOGDUMP8(x, y) -#define AIS_WARN_LOGDUMP8(x, y) -#define AIS_INFO_LOGDUMP8(x, y) -#define AIS_STATE_LOGDUMP8(x, y) -#define AIS_EVENT_LOGDUMP8(x, y) -#define AIS_TRACE_LOGDUMP8(x, y) -#define AIS_LOUD_LOGDUMP8(x, y) -#define AIS_TEMP_LOGDUMP8(x, y) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGDUMP8(x, y) -#define INTR_WARN_LOGDUMP8(x, y) -#define INTR_INFO_LOGDUMP8(x, y) -#define INTR_STATE_LOGDUMP8(x, y) -#define INTR_EVENT_LOGDUMP8(x, y) -#define INTR_TRACE_LOGDUMP8(x, y) -#define INTR_LOUD_LOGDUMP8(x, y) -#define INTR_TEMP_LOGDUMP8(x, y) - -#define INIT_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGDUMP8(x, y) -#define INIT_WARN_LOGDUMP8(x, y) -#define INIT_INFO_LOGDUMP8(x, y) -#define INIT_STATE_LOGDUMP8(x, y) -#define INIT_EVENT_LOGDUMP8(x, y) -#define INIT_TRACE_LOGDUMP8(x, y) -#define INIT_LOUD_LOGDUMP8(x, y) -#define INIT_TEMP_LOGDUMP8(x, y) - -#define AAA_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGDUMP8(x, y) -#define AAA_WARN_LOGDUMP8(x, y) -#define AAA_INFO_LOGDUMP8(x, y) -#define AAA_STATE_LOGDUMP8(x, y) -#define AAA_EVENT_LOGDUMP8(x, y) -#define AAA_TRACE_LOGDUMP8(x, y) -#define AAA_LOUD_LOGDUMP8(x, y) -#define AAA_TEMP_LOGDUMP8(x, y) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define ROAMING_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define ROAMING_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGDUMP8(x, y) -#define ROAMING_WARN_LOGDUMP8(x, y) -#define ROAMING_INFO_LOGDUMP8(x, y) -#define ROAMING_STATE_LOGDUMP8(x, y) -#define ROAMING_EVENT_LOGDUMP8(x, y) -#define ROAMING_TRACE_LOGDUMP8(x, y) -#define ROAMING_LOUD_LOGDUMP8(x, y) -#define ROAMING_TEMP_LOGDUMP8(x, y) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGDUMP8(x, y) -#define REQ_WARN_LOGDUMP8(x, y) -#define REQ_INFO_LOGDUMP8(x, y) -#define REQ_STATE_LOGDUMP8(x, y) -#define REQ_EVENT_LOGDUMP8(x, y) -#define REQ_TRACE_LOGDUMP8(x, y) -#define REQ_LOUD_LOGDUMP8(x, y) -#define REQ_TEMP_LOGDUMP8(x, y) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGDUMP8(x, y) -#define TX_WARN_LOGDUMP8(x, y) -#define TX_INFO_LOGDUMP8(x, y) -#define TX_STATE_LOGDUMP8(x, y) -#define TX_EVENT_LOGDUMP8(x, y) -#define TX_TRACE_LOGDUMP8(x, y) -#define TX_LOUD_LOGDUMP8(x, y) -#define TX_TEMP_LOGDUMP8(x, y) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGDUMP8(x, y) -#define RX_WARN_LOGDUMP8(x, y) -#define RX_INFO_LOGDUMP8(x, y) -#define RX_STATE_LOGDUMP8(x, y) -#define RX_EVENT_LOGDUMP8(x, y) -#define RX_TRACE_LOGDUMP8(x, y) -#define RX_LOUD_LOGDUMP8(x, y) -#define RX_TEMP_LOGDUMP8(x, y) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGDUMP8(x, y) -#define RFTEST_WARN_LOGDUMP8(x, y) -#define RFTEST_INFO_LOGDUMP8(x, y) -#define RFTEST_STATE_LOGDUMP8(x, y) -#define RFTEST_EVENT_LOGDUMP8(x, y) -#define RFTEST_TRACE_LOGDUMP8(x, y) -#define RFTEST_LOUD_LOGDUMP8(x, y) -#define RFTEST_TEMP_LOGDUMP8(x, y) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGDUMP8(x, y) -#define EMU_WARN_LOGDUMP8(x, y) -#define EMU_INFO_LOGDUMP8(x, y) -#define EMU_STATE_LOGDUMP8(x, y) -#define EMU_EVENT_LOGDUMP8(x, y) -#define EMU_TRACE_LOGDUMP8(x, y) -#define EMU_LOUD_LOGDUMP8(x, y) -#define EMU_TEMP_LOGDUMP8(x, y) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGDUMP8(x, y) -#define HEM_WARN_LOGDUMP8(x, y) -#define HEM_INFO_LOGDUMP8(x, y) -#define HEM_STATE_LOGDUMP8(x, y) -#define HEM_EVENT_LOGDUMP8(x, y) -#define HEM_TRACE_LOGDUMP8(x, y) -#define HEM_LOUD_LOGDUMP8(x, y) -#define HEM_TEMP_LOGDUMP8(x, y) - -#define RLM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RLM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RLM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGDUMP8(x, y) -#define RLM_WARN_LOGDUMP8(x, y) -#define RLM_INFO_LOGDUMP8(x, y) -#define RLM_STATE_LOGDUMP8(x, y) -#define RLM_EVENT_LOGDUMP8(x, y) -#define RLM_TRACE_LOGDUMP8(x, y) -#define RLM_LOUD_LOGDUMP8(x, y) -#define RLM_TEMP_LOGDUMP8(x, y) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGDUMP8(x, y) -#define MEM_WARN_LOGDUMP8(x, y) -#define MEM_INFO_LOGDUMP8(x, y) -#define MEM_STATE_LOGDUMP8(x, y) -#define MEM_EVENT_LOGDUMP8(x, y) -#define MEM_TRACE_LOGDUMP8(x, y) -#define MEM_LOUD_LOGDUMP8(x, y) -#define MEM_TEMP_LOGDUMP8(x, y) - -#define CNM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGDUMP8(x, y) -#define CNM_WARN_LOGDUMP8(x, y) -#define CNM_INFO_LOGDUMP8(x, y) -#define CNM_STATE_LOGDUMP8(x, y) -#define CNM_EVENT_LOGDUMP8(x, y) -#define CNM_TRACE_LOGDUMP8(x, y) -#define CNM_LOUD_LOGDUMP8(x, y) -#define CNM_TEMP_LOGDUMP8(x, y) - -#define RSN_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define RSN_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define RSN_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_STATE_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_EVENT_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGDUMP8(x, y) -#define RSN_WARN_LOGDUMP8(x, y) -#define RSN_INFO_LOGDUMP8(x, y) -#define RSN_STATE_LOGDUMP8(x, y) -#define RSN_EVENT_LOGDUMP8(x, y) -#define RSN_TRACE_LOGDUMP8(x, y) -#define RSN_LOUD_LOGDUMP8(x, y) -#define RSN_TEMP_LOGDUMP8(x, y) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGDUMP8(x, y) -#define BSS_WARN_LOGDUMP8(x, y) -#define BSS_INFO_LOGDUMP8(x, y) -#define BSS_STATE_LOGDUMP8(x, y) -#define BSS_EVENT_LOGDUMP8(x, y) -#define BSS_TRACE_LOGDUMP8(x, y) -#define BSS_LOUD_LOGDUMP8(x, y) -#define BSS_TEMP_LOGDUMP8(x, y) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGDUMP8(x, y) -#define SCN_WARN_LOGDUMP8(x, y) -#define SCN_INFO_LOGDUMP8(x, y) -#define SCN_STATE_LOGDUMP8(x, y) -#define SCN_EVENT_LOGDUMP8(x, y) -#define SCN_TRACE_LOGDUMP8(x, y) -#define SCN_LOUD_LOGDUMP8(x, y) -#define SCN_TEMP_LOGDUMP8(x, y) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGDUMP8(x, y) -#define SAA_WARN_LOGDUMP8(x, y) -#define SAA_INFO_LOGDUMP8(x, y) -#define SAA_STATE_LOGDUMP8(x, y) -#define SAA_EVENT_LOGDUMP8(x, y) -#define SAA_TRACE_LOGDUMP8(x, y) -#define SAA_LOUD_LOGDUMP8(x, y) -#define SAA_TEMP_LOGDUMP8(x, y) - -#define P2P_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define P2P_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define P2P_INFO_LOGFUNC(_Fmt...) //xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGDUMP8(x, y) -#define P2P_WARN_LOGDUMP8(x, y) -#define P2P_INFO_LOGDUMP8(x, y) -#define P2P_STATE_LOGDUMP8(x, y) -#define P2P_EVENT_LOGDUMP8(x, y) -#define P2P_TRACE_LOGDUMP8(x, y) -#define P2P_LOUD_LOGDUMP8(x, y) -#define P2P_TEMP_LOGDUMP8(x, y) - -#define QM_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_WARN, XLOG_TAG, _Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) //xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) //xlog_printk(ANDROID_LOG_DEBUG, XLOG_TAG, _Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGDUMP8(x, y) -#define QM_WARN_LOGDUMP8(x, y) -#define QM_INFO_LOGDUMP8(x, y) -#define QM_STATE_LOGDUMP8(x, y) -#define QM_EVENT_LOGDUMP8(x, y) -#define QM_TRACE_LOGDUMP8(x, y) -#define QM_LOUD_LOGDUMP8(x, y) -#define QM_TEMP_LOGDUMP8(x, y) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGDUMP8(x, y) -#define SEC_WARN_LOGDUMP8(x, y) -#define SEC_INFO_LOGDUMP8(x, y) -#define SEC_STATE_LOGDUMP8(x, y) -#define SEC_EVENT_LOGDUMP8(x, y) -#define SEC_TRACE_LOGDUMP8(x, y) -#define SEC_LOUD_LOGDUMP8(x, y) -#define SEC_TEMP_LOGDUMP8(x, y) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGDUMP8(x, y) -#define BOW_WARN_LOGDUMP8(x, y) -#define BOW_INFO_LOGDUMP8(x, y) -#define BOW_STATE_LOGDUMP8(x, y) -#define BOW_EVENT_LOGDUMP8(x, y) -#define BOW_TRACE_LOGDUMP8(x, y) -#define BOW_LOUD_LOGDUMP8(x, y) -#define BOW_TEMP_LOGDUMP8(x, y) - -#define HAL_ERROR_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_ERROR, XLOG_TAG, _Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGDUMP8(x, y) -#define HAL_WARN_LOGDUMP8(x, y) -#define HAL_INFO_LOGDUMP8(x, y) -#define HAL_STATE_LOGDUMP8(x, y) -#define HAL_EVENT_LOGDUMP8(x, y) -#define HAL_TRACE_LOGDUMP8(x, y) -#define HAL_LOUD_LOGDUMP8(x, y) -#define HAL_TEMP_LOGDUMP8(x, y) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGDUMP8(x, y) -#define WAPI_WARN_LOGDUMP8(x, y) -#define WAPI_INFO_LOGDUMP8(x, y) -#define WAPI_STATE_LOGDUMP8(x, y) -#define WAPI_EVENT_LOGDUMP8(x, y) -#define WAPI_TRACE_LOGDUMP8(x, y) -#define WAPI_LOUD_LOGDUMP8(x, y) -#define WAPI_TEMP_LOGDUMP8(x, y) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGDUMP8(x, y) -#define SW1_WARN_LOGDUMP8(x, y) -#define SW1_INFO_LOGDUMP8(x, y) -#define SW1_STATE_LOGDUMP8(x, y) -#define SW1_EVENT_LOGDUMP8(x, y) -#define SW1_TRACE_LOGDUMP8(x, y) -#define SW1_LOUD_LOGDUMP8(x, y) -#define SW1_TEMP_LOGDUMP8(x, y) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGDUMP8(x, y) -#define SW2_WARN_LOGDUMP8(x, y) -#define SW2_INFO_LOGDUMP8(x, y) -#define SW2_STATE_LOGDUMP8(x, y) -#define SW2_EVENT_LOGDUMP8(x, y) -#define SW2_TRACE_LOGDUMP8(x, y) -#define SW2_LOUD_LOGDUMP8(x, y) -#define SW2_TEMP_LOGDUMP8(x, y) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGDUMP8(x, y) -#define SW3_WARN_LOGDUMP8(x, y) -#define SW3_INFO_LOGDUMP8(x, y) -#define SW3_STATE_LOGDUMP8(x, y) -#define SW3_EVENT_LOGDUMP8(x, y) -#define SW3_TRACE_LOGDUMP8(x, y) -#define SW3_LOUD_LOGDUMP8(x, y) -#define SW3_TEMP_LOGDUMP8(x, y) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) xlog_printk(ANDROID_LOG_INFO, XLOG_TAG, _Fmt) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGDUMP8(x, y) -#define SW4_WARN_LOGDUMP8(x, y) -#define SW4_INFO_LOGDUMP8(x, y) -#define SW4_STATE_LOGDUMP8(x, y) -#define SW4_EVENT_LOGDUMP8(x, y) -#define SW4_TRACE_LOGDUMP8(x, y) dumpMemory8(ANDROID_LOG_DEBUG, x, y) -#define SW4_LOUD_LOGDUMP8(x, y) -#define SW4_TEMP_LOGDUMP8(x, y) -#else -#define AIS_ERROR_LOGFUNC(_Fmt...) -#define AIS_WARN_LOGFUNC(_Fmt...) -#define AIS_INFO_LOGFUNC(_Fmt...) -#define AIS_STATE_LOGFUNC(_Fmt...) -#define AIS_EVENT_LOGFUNC(_Fmt...) -#define AIS_TRACE_LOGFUNC(_Fmt...) -#define AIS_LOUD_LOGFUNC(_Fmt...) -#define AIS_TEMP_LOGFUNC(_Fmt...) - -#define INTR_ERROR_LOGFUNC(_Fmt...) -#define INTR_WARN_LOGFUNC(_Fmt...) -#define INTR_INFO_LOGFUNC(_Fmt...) -#define INTR_STATE_LOGFUNC(_Fmt...) -#define INTR_EVENT_LOGFUNC(_Fmt...) -#define INTR_TRACE_LOGFUNC(_Fmt...) -#define INTR_LOUD_LOGFUNC(_Fmt...) -#define INTR_TEMP_LOGFUNC(_Fmt...) - -#define INIT_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_INFO_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define INIT_STATE_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define INIT_EVENT_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define INIT_TRACE_LOGFUNC(_Fmt...) -#define INIT_LOUD_LOGFUNC(_Fmt...) -#define INIT_TEMP_LOGFUNC(_Fmt...) - -#define AAA_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define AAA_INFO_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define AAA_STATE_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define AAA_EVENT_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define AAA_TRACE_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define AAA_LOUD_LOGFUNC(_Fmt...) -#define AAA_TEMP_LOGFUNC(_Fmt...) - -#define ROAMING_ERROR_LOGFUNC(_Fmt...) -#define ROAMING_WARN_LOGFUNC(_Fmt...) -#define ROAMING_INFO_LOGFUNC(_Fmt...) -#define ROAMING_STATE_LOGFUNC(_Fmt...) -#define ROAMING_EVENT_LOGFUNC(_Fmt...) -#define ROAMING_TRACE_LOGFUNC(_Fmt...) -#define ROAMING_LOUD_LOGFUNC(_Fmt...) -#define ROAMING_TEMP_LOGFUNC(_Fmt...) - -#define REQ_ERROR_LOGFUNC(_Fmt...) -#define REQ_WARN_LOGFUNC(_Fmt...) -#define REQ_INFO_LOGFUNC(_Fmt...) -#define REQ_STATE_LOGFUNC(_Fmt...) -#define REQ_EVENT_LOGFUNC(_Fmt...) -#define REQ_TRACE_LOGFUNC(_Fmt...) -#define REQ_LOUD_LOGFUNC(_Fmt...) -#define REQ_TEMP_LOGFUNC(_Fmt...) - -#define TX_ERROR_LOGFUNC(_Fmt...) -#define TX_WARN_LOGFUNC(_Fmt...) -#define TX_INFO_LOGFUNC(_Fmt...) -#define TX_STATE_LOGFUNC(_Fmt...) -#define TX_EVENT_LOGFUNC(_Fmt...) -#define TX_TRACE_LOGFUNC(_Fmt...) -#define TX_LOUD_LOGFUNC(_Fmt...) -#define TX_TEMP_LOGFUNC(_Fmt...) - -#define RX_ERROR_LOGFUNC(_Fmt...) -#define RX_WARN_LOGFUNC(_Fmt...) -#define RX_INFO_LOGFUNC(_Fmt...) -#define RX_STATE_LOGFUNC(_Fmt...) -#define RX_EVENT_LOGFUNC(_Fmt...) -#define RX_TRACE_LOGFUNC(_Fmt...) -#define RX_LOUD_LOGFUNC(_Fmt...) -#define RX_TEMP_LOGFUNC(_Fmt...) - -#define RFTEST_ERROR_LOGFUNC(_Fmt...) -#define RFTEST_WARN_LOGFUNC(_Fmt...) -#define RFTEST_INFO_LOGFUNC(_Fmt...) -#define RFTEST_STATE_LOGFUNC(_Fmt...) -#define RFTEST_EVENT_LOGFUNC(_Fmt...) -#define RFTEST_TRACE_LOGFUNC(_Fmt...) -#define RFTEST_LOUD_LOGFUNC(_Fmt...) -#define RFTEST_TEMP_LOGFUNC(_Fmt...) - -#define EMU_ERROR_LOGFUNC(_Fmt...) -#define EMU_WARN_LOGFUNC(_Fmt...) -#define EMU_INFO_LOGFUNC(_Fmt...) -#define EMU_STATE_LOGFUNC(_Fmt...) -#define EMU_EVENT_LOGFUNC(_Fmt...) -#define EMU_TRACE_LOGFUNC(_Fmt...) -#define EMU_LOUD_LOGFUNC(_Fmt...) -#define EMU_TEMP_LOGFUNC(_Fmt...) - -#define HEM_ERROR_LOGFUNC(_Fmt...) -#define HEM_WARN_LOGFUNC(_Fmt...) -#define HEM_INFO_LOGFUNC(_Fmt...) -#define HEM_STATE_LOGFUNC(_Fmt...) -#define HEM_EVENT_LOGFUNC(_Fmt...) -#define HEM_TRACE_LOGFUNC(_Fmt...) -#define HEM_LOUD_LOGFUNC(_Fmt...) -#define HEM_TEMP_LOGFUNC(_Fmt...) - -#define RLM_ERROR_LOGFUNC(_Fmt...) -#define RLM_WARN_LOGFUNC(_Fmt...) -#define RLM_INFO_LOGFUNC(_Fmt...) -#define RLM_STATE_LOGFUNC(_Fmt...) -#define RLM_EVENT_LOGFUNC(_Fmt...) -#define RLM_TRACE_LOGFUNC(_Fmt...) -#define RLM_LOUD_LOGFUNC(_Fmt...) -#define RLM_TEMP_LOGFUNC(_Fmt...) - -#define MEM_ERROR_LOGFUNC(_Fmt...) -#define MEM_WARN_LOGFUNC(_Fmt...) -#define MEM_INFO_LOGFUNC(_Fmt...) -#define MEM_STATE_LOGFUNC(_Fmt...) -#define MEM_EVENT_LOGFUNC(_Fmt...) -#define MEM_TRACE_LOGFUNC(_Fmt...) -#define MEM_LOUD_LOGFUNC(_Fmt...) -#define MEM_TEMP_LOGFUNC(_Fmt...) - -#define CNM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define CNM_INFO_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define CNM_STATE_LOGFUNC(_Fmt...) -#define CNM_EVENT_LOGFUNC(_Fmt...) -#define CNM_TRACE_LOGFUNC(_Fmt...) -#define CNM_LOUD_LOGFUNC(_Fmt...) -#define CNM_TEMP_LOGFUNC(_Fmt...) - -#define RSN_ERROR_LOGFUNC(_Fmt...) -#define RSN_WARN_LOGFUNC(_Fmt...) -#define RSN_INFO_LOGFUNC(_Fmt...) -#define RSN_STATE_LOGFUNC(_Fmt...) -#define RSN_EVENT_LOGFUNC(_Fmt...) -#define RSN_TRACE_LOGFUNC(_Fmt...) -#define RSN_LOUD_LOGFUNC(_Fmt...) -#define RSN_TEMP_LOGFUNC(_Fmt...) - -#define BSS_ERROR_LOGFUNC(_Fmt...) -#define BSS_WARN_LOGFUNC(_Fmt...) -#define BSS_INFO_LOGFUNC(_Fmt...) -#define BSS_STATE_LOGFUNC(_Fmt...) -#define BSS_EVENT_LOGFUNC(_Fmt...) -#define BSS_TRACE_LOGFUNC(_Fmt...) -#define BSS_LOUD_LOGFUNC(_Fmt...) -#define BSS_TEMP_LOGFUNC(_Fmt...) - -#define SCN_ERROR_LOGFUNC(_Fmt...) -#define SCN_WARN_LOGFUNC(_Fmt...) -#define SCN_INFO_LOGFUNC(_Fmt...) -#define SCN_STATE_LOGFUNC(_Fmt...) -#define SCN_EVENT_LOGFUNC(_Fmt...) -#define SCN_TRACE_LOGFUNC(_Fmt...) -#define SCN_LOUD_LOGFUNC(_Fmt...) -#define SCN_TEMP_LOGFUNC(_Fmt...) - -#define SAA_ERROR_LOGFUNC(_Fmt...) -#define SAA_WARN_LOGFUNC(_Fmt...) -#define SAA_INFO_LOGFUNC(_Fmt...) -#define SAA_STATE_LOGFUNC(_Fmt...) -#define SAA_EVENT_LOGFUNC(_Fmt...) -#define SAA_TRACE_LOGFUNC(_Fmt...) -#define SAA_LOUD_LOGFUNC(_Fmt...) -#define SAA_TEMP_LOGFUNC(_Fmt...) - -#define P2P_ERROR_LOGFUNC(_Fmt...) -#define P2P_WARN_LOGFUNC(_Fmt...) -#define P2P_INFO_LOGFUNC(_Fmt...) -#define P2P_STATE_LOGFUNC(_Fmt...) -#define P2P_EVENT_LOGFUNC(_Fmt...) -#define P2P_TRACE_LOGFUNC(_Fmt...) -#define P2P_LOUD_LOGFUNC(_Fmt...) -#define P2P_TEMP_LOGFUNC(_Fmt...) - -#define QM_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_WARN_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define QM_INFO_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define QM_STATE_LOGFUNC(_Fmt...) -#define QM_EVENT_LOGFUNC(_Fmt...) -#define QM_TRACE_LOGFUNC(_Fmt...) //kalPrint(_Fmt) -#define QM_LOUD_LOGFUNC(_Fmt...) -#define QM_TEMP_LOGFUNC(_Fmt...) - -#define SEC_ERROR_LOGFUNC(_Fmt...) -#define SEC_WARN_LOGFUNC(_Fmt...) -#define SEC_INFO_LOGFUNC(_Fmt...) -#define SEC_STATE_LOGFUNC(_Fmt...) -#define SEC_EVENT_LOGFUNC(_Fmt...) -#define SEC_TRACE_LOGFUNC(_Fmt...) -#define SEC_LOUD_LOGFUNC(_Fmt...) -#define SEC_TEMP_LOGFUNC(_Fmt...) - -#define BOW_ERROR_LOGFUNC(_Fmt...) -#define BOW_WARN_LOGFUNC(_Fmt...) -#define BOW_INFO_LOGFUNC(_Fmt...) -#define BOW_STATE_LOGFUNC(_Fmt...) -#define BOW_EVENT_LOGFUNC(_Fmt...) -#define BOW_TRACE_LOGFUNC(_Fmt...) -#define BOW_LOUD_LOGFUNC(_Fmt...) -#define BOW_TEMP_LOGFUNC(_Fmt...) - -#define HAL_ERROR_LOGFUNC(_Fmt...) kalPrint(_Fmt) -#define HAL_WARN_LOGFUNC(_Fmt...) -#define HAL_INFO_LOGFUNC(_Fmt...) -#define HAL_STATE_LOGFUNC(_Fmt...) -#define HAL_EVENT_LOGFUNC(_Fmt...) -#define HAL_TRACE_LOGFUNC(_Fmt...) -#define HAL_LOUD_LOGFUNC(_Fmt...) -#define HAL_TEMP_LOGFUNC(_Fmt...) - -#define WAPI_ERROR_LOGFUNC(_Fmt...) -#define WAPI_WARN_LOGFUNC(_Fmt...) -#define WAPI_INFO_LOGFUNC(_Fmt...) -#define WAPI_STATE_LOGFUNC(_Fmt...) -#define WAPI_EVENT_LOGFUNC(_Fmt...) -#define WAPI_TRACE_LOGFUNC(_Fmt...) -#define WAPI_LOUD_LOGFUNC(_Fmt...) -#define WAPI_TEMP_LOGFUNC(_Fmt...) - -#define SW1_ERROR_LOGFUNC(_Fmt...) -#define SW1_WARN_LOGFUNC(_Fmt...) -#define SW1_INFO_LOGFUNC(_Fmt...) -#define SW1_STATE_LOGFUNC(_Fmt...) -#define SW1_EVENT_LOGFUNC(_Fmt...) -#define SW1_TRACE_LOGFUNC(_Fmt...) -#define SW1_LOUD_LOGFUNC(_Fmt...) -#define SW1_TEMP_LOGFUNC(_Fmt...) - -#define SW2_ERROR_LOGFUNC(_Fmt...) -#define SW2_WARN_LOGFUNC(_Fmt...) -#define SW2_INFO_LOGFUNC(_Fmt...) -#define SW2_STATE_LOGFUNC(_Fmt...) -#define SW2_EVENT_LOGFUNC(_Fmt...) -#define SW2_TRACE_LOGFUNC(_Fmt...) -#define SW2_LOUD_LOGFUNC(_Fmt...) -#define SW2_TEMP_LOGFUNC(_Fmt...) - -#define SW3_ERROR_LOGFUNC(_Fmt...) -#define SW3_WARN_LOGFUNC(_Fmt...) -#define SW3_INFO_LOGFUNC(_Fmt...) -#define SW3_STATE_LOGFUNC(_Fmt...) -#define SW3_EVENT_LOGFUNC(_Fmt...) -#define SW3_TRACE_LOGFUNC(_Fmt...) -#define SW3_LOUD_LOGFUNC(_Fmt...) -#define SW3_TEMP_LOGFUNC(_Fmt...) - -#define SW4_ERROR_LOGFUNC(_Fmt...) -#define SW4_WARN_LOGFUNC(_Fmt...) -#define SW4_INFO_LOGFUNC(_Fmt...) -#define SW4_STATE_LOGFUNC(_Fmt...) -#define SW4_EVENT_LOGFUNC(_Fmt...) -#define SW4_TRACE_LOGFUNC(_Fmt...) -#define SW4_LOUD_LOGFUNC(_Fmt...) -#define SW4_TEMP_LOGFUNC(_Fmt...) -#endif -#endif - -#define kalBreakPoint() \ - do { \ - BUG(); \ - panic("Oops"); \ - } while(0) - -#if CFG_ENABLE_AEE_MSG -#define kalSendAeeException aee_kernel_exception -#define kalSendAeeWarning aee_kernel_warning -#define kalSendAeeReminding aee_kernel_reminding -#else -#define kalSendAeeException(_module, _desc, ...) -#define kalSendAeeWarning(_module, _desc, ...) -#define kalSendAeeReminding(_module, _desc, ...) -#endif - -#define PRINTF_ARG(...) __VA_ARGS__ -#define SPRINTF(buf, arg) {buf += sprintf((char *)(buf), PRINTF_ARG arg);} - -#define USEC_TO_SYSTIME(_usec) ((_usec) / USEC_PER_MSEC) -#define MSEC_TO_SYSTIME(_msec) (_msec) - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Routines in gl_kal.c */ -/*----------------------------------------------------------------------------*/ -VOID -kalAcquireSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - OUT PUINT_32 pu4Flags - ); - -VOID -kalReleaseSpinLock( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_SPIN_LOCK_CATEGORY_E rLockCategory, - IN UINT_32 u4Flags - ); - -VOID -kalUpdateMACAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucMacAddr - ); - -VOID -kalPacketFree( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -PVOID -kalPacketAlloc( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Size, - OUT PUINT_8 *ppucData - ); - -VOID -kalOsTimerInitialize( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prTimerHandler - ); - -BOOL -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN OS_SYSTIME rInterval - ); - -WLAN_STATUS -kalProcessRxPacket( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN PUINT_8 pucPacketStart, - IN UINT_32 u4PacketLen, - //IN PBOOLEAN pfgIsRetain, - IN BOOLEAN fgIsRetain, - IN ENUM_CSUM_RESULT_T aeCSUM[] - ); - -WLAN_STATUS -kalRxIndicatePkts( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID apvPkts[], - IN UINT_8 ucPktNum - ); - -VOID -kalIndicateStatusAndComplete( - IN P_GLUE_INFO_T prGlueInfo, - IN WLAN_STATUS eStatus, - IN PVOID pvBuf, - IN UINT_32 u4BufLen - ); - -VOID -kalUpdateReAssocReqInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -VOID -kalUpdateReAssocRspInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen - ); - -#if CFG_TX_FRAGMENT -BOOLEAN -kalQueryTxPacketHeader( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - OUT PUINT_16 pu2EtherTypeLen, - OUT PUINT_8 pucEthDestAddr - ); -#endif /* CFG_TX_FRAGMENT */ - -VOID -kalSendCompleteAndAwakeQueue( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket - ); - -#if CFG_TCP_IP_CHKSUM_OFFLOAD -VOID -kalQueryTxChksumOffloadParam( - IN PVOID pvPacket, - OUT PUINT_8 pucFlag); - -VOID -kalUpdateRxCSUMOffloadParam( - IN PVOID pvPacket, - IN ENUM_CSUM_RESULT_T eCSUM[] - ); -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - - -BOOLEAN -kalRetrieveNetworkAddress( - IN P_GLUE_INFO_T prGlueInfo, - IN OUT PARAM_MAC_ADDRESS * prMacAddr - ); - - -/*----------------------------------------------------------------------------*/ -/* Routines in interface - ehpi/sdio.c */ -/*----------------------------------------------------------------------------*/ -BOOL -kalDevRegRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - OUT PUINT_32 pu4Value - ); - -BOOL -kalDevRegWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Register, - IN UINT_32 u4Value - ); - -BOOL -kalDevPortRead( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - OUT PUINT_8 pucBuf, - IN UINT_16 u2ValidOutBufSize - ); - -BOOL -kalDevPortWrite( - P_GLUE_INFO_T prGlueInfo, - IN UINT_16 u2Port, - IN UINT_16 u2Len, - IN PUINT_8 pucBuf, - IN UINT_16 u2ValidInBufSize - ); - -BOOL -kalDevWriteWithSdioCmd52 ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Addr, - IN UINT_8 ucData - ); - - - #if CFG_SUPPORT_EXT_CONFIG -UINT_32 -kalReadExtCfg ( - IN P_GLUE_INFO_T prGlueInfo - ); - #endif - -BOOL -kalQoSFrameClassifierAndPacketInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN P_NATIVE_PACKET prPacket, - OUT PUINT_8 pucPriorityParam, - OUT PUINT_32 pu4PacketLen, - OUT PUINT_8 pucEthDestAddr, - OUT PBOOLEAN pfgIs1X, - OUT PBOOLEAN pfgIsPAL, - OUT PUINT_8 pucNetworkType -); - -inline VOID -kalOidComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgSetQuery, - IN UINT_32 u4SetQueryInfoLen, - IN WLAN_STATUS rOidStatus - ); - - -WLAN_STATUS -kalIoctl (IN P_GLUE_INFO_T prGlueInfo, - IN PFN_OID_HANDLER_FUNC pfnOidHandler, - IN PVOID pvInfoBuf, - IN UINT_32 u4InfoBufLen, - IN BOOL fgRead, - IN BOOL fgWaitResp, - IN BOOL fgCmd, - IN BOOL fgIsP2pOid, - OUT PUINT_32 pu4QryInfoLen - ); - -VOID -kalHandleAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN P_EVENT_ASSOC_INFO prAssocInfo - ); - -#if CFG_ENABLE_FW_DOWNLOAD - -PVOID -kalFirmwareImageMapping ( - IN P_GLUE_INFO_T prGlueInfo, - OUT PPVOID ppvMapFileBuf, - OUT PUINT_32 pu4FileLength - ); - -VOID -kalFirmwareImageUnmapping ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID prFwHandle, - IN PVOID pvMapFileBuf - ); -#endif - - -/*----------------------------------------------------------------------------*/ -/* Card Removal Check */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsCardRemoved( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* TX */ -/*----------------------------------------------------------------------------*/ -VOID -kalFlushPendingTxPackets( - IN P_GLUE_INFO_T prGlueInfo - ); - - -/*----------------------------------------------------------------------------*/ -/* Media State Indication */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalGetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalSetMediaStateIndicated( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicate - ); - - -/*----------------------------------------------------------------------------*/ -/* OID handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalOidCmdClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalOidClearance( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalEnqueueCommand( - IN P_GLUE_INFO_T prGlueInfo, - IN P_QUE_ENTRY_T prQueueEntry - ); - -#if CFG_ENABLE_BT_OVER_WIFI -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi handling */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBOWEvent( - IN P_GLUE_INFO_T prGlueInfo, - IN P_AMPC_EVENT prEvent - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -BOOLEAN -kalSetBowState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BOW_DEVICE_STATE eBowState, - PARAM_MAC_ADDRESS rPeerAddr - ); - -ENUM_BOW_DEVICE_STATE -kalGetBowGlobalState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetBowFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalGetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -VOID -kalSetBowRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucRole, - IN PARAM_MAC_ADDRESS rPeerAddr - ); - -UINT_8 -kalGetBowAvailablePhysicalLinkCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_BOW_SEPARATE_DATA_PATH -/*----------------------------------------------------------------------------*/ -/* Bluetooth over Wi-Fi Net Device Init/Uninit */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitBowDevice( - IN P_GLUE_INFO_T prGlueInfo, - IN const char *prDevName - ); - -BOOLEAN -kalUninitBowDevice( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif // CFG_BOW_SEPARATE_DATA_PATH -#endif // CFG_ENABLE_BT_OVER_WIFI - - -/*----------------------------------------------------------------------------*/ -/* Firmware Download Handling */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetFwStartAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetFwLoadAddress( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* Security Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearSecurityFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearSecurityFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -VOID -kalSecurityFrameSendComplete ( - IN P_GLUE_INFO_T prGlueInfo, - IN PVOID pvPacket, - IN WLAN_STATUS rStatus - ); - - -/*----------------------------------------------------------------------------*/ -/* Management Frame Clearance */ -/*----------------------------------------------------------------------------*/ -VOID -kalClearMgmtFrames( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalClearMgmtFramesByNetType( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx - ); - -UINT_32 -kalGetTxPendingFrameCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_32 -kalGetTxPendingCmdCount( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalSetTimer( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Interval - ); - -BOOLEAN -kalCancelTimer( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN WLAN_STATUS status - ); - -UINT_32 -kalRandomNumber( - VOID - ); - -VOID -kalTimeoutHandler (unsigned long arg); - -VOID -kalSetEvent (P_GLUE_INFO_T pr); - - -/*----------------------------------------------------------------------------*/ -/* NVRAM/Registry Service */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalIsConfigurationExist( - IN P_GLUE_INFO_T prGlueInfo - ); - -P_REG_INFO_T -kalGetConfiguration( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetConfigurationVersion( - IN P_GLUE_INFO_T prGlueInfo, - OUT PUINT_16 pu2Part1CfgOwnVersion, - OUT PUINT_16 pu2Part1CfgPeerVersion, - OUT PUINT_16 pu2Part2CfgOwnVersion, - OUT PUINT_16 pu2Part2CfgPeerVersion - ); - -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ); - -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - IN UINT_16 u2Data - ); - -/*----------------------------------------------------------------------------*/ -/* WSC Connection */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalWSCGetActiveState( - IN P_GLUE_INFO_T prGlueInfo - ); - -/*----------------------------------------------------------------------------*/ -/* RSSI Updating */ -/*----------------------------------------------------------------------------*/ -VOID -kalUpdateRSSI( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_KAL_NETWORK_TYPE_INDEX_T eNetTypeIdx, - IN INT_8 cRssi, - IN INT_8 cLinkQuality - ); - - -/*----------------------------------------------------------------------------*/ -/* I/O Buffer Pre-allocation */ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalInitIOBuffer( - VOID - ); - -VOID -kalUninitIOBuffer( - VOID - ); - -PVOID -kalAllocateIOBuffer( - IN UINT_32 u4AllocSize - ); - -VOID -kalReleaseIOBuffer( - IN PVOID pvAddr, - IN UINT_32 u4Size - ); - -VOID -kalGetChannelList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -BOOL -kalIsAPmode( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_802_11W -/*----------------------------------------------------------------------------*/ -/* 802.11W */ -/*----------------------------------------------------------------------------*/ -UINT_32 -kalGetMfpSetting( - IN P_GLUE_INFO_T prGlueInfo - ); -#endif - -UINT_32 -kalWriteToFile( - const PUINT_8 pucPath, - BOOLEAN fgDoAppend, - PUINT_8 pucData, - UINT_32 u4Size - ); - - -/*----------------------------------------------------------------------------*/ -/* NL80211 */ -/*----------------------------------------------------------------------------*/ -VOID -kalIndicateBssInfo ( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN UINT_8 ucChannelNum, - IN INT_32 i4SignalStrength - ); - - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -int tx_thread(void *data); - -#endif /* _GL_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_os.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_os.h deleted file mode 100755 index 9179948ccbfc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_os.h +++ /dev/null @@ -1,1185 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/include/gl_os.h#1 $ -*/ - -/*! \file gl_os.h - \brief List the external reference to OS for GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_os.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 08 20 2012 yuche.tsai -** NULL -** Try to fix frame register KE issue. - * - * 04 12 2012 terry.wu - * NULL - * Add AEE message support - * 1) Show AEE warning(red screen) if SDIO access error occurs - - * - * 03 02 2012 terry.wu - * NULL - * Enable CFG80211 Support. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 12 13 2011 cm.chang - * [WCXRP00001136] [All Wi-Fi][Driver] Add wake lock for pending timer - * Add wake lock if timer timeout value is smaller than 5 seconds - * - * 11 18 2011 yuche.tsai - * NULL - * CONFIG P2P support RSSI query, default turned off. - * - * 11 16 2011 yuche.tsai - * NULL - * Avoid using work thread. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 29 2011 terry.wu - * NULL - * Show DRV_NAME by chip id. - * - * 04 18 2011 terry.wu - * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED - * Remove flag CFG_WIFI_DIRECT_MOVED. - * - * 03 29 2011 cp.wu - * [WCXRP00000598] [MT6620 Wi-Fi][Driver] Implementation of interface for communicating with user space process for RESET_START and RESET_END events - * implement kernel-to-userspace communication via generic netlink socket for whole-chip resetting mechanism - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * support concurrent network - * - * 03 03 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * modify net device relative functions to support multiple H/W queues - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 02 21 2011 cp.wu - * [WCXRP00000482] [MT6620 Wi-Fi][Driver] Simplify logic for checking NVRAM existence in driver domain - * simplify logic for checking NVRAM existence only once. - * - * 02 16 2011 jeffrey.chang - * NULL - * Add query ipv4 and ipv6 address during early suspend and late resume - * - * 02 10 2011 chinghwa.yu - * [WCXRP00000065] Update BoW design and settings - * Fix kernel API change issue. - * Before ALPS 2.2 (2.2 included), kfifo_alloc() is - * struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, spinlock_t *lock); - * After ALPS 2.3, kfifo_alloc() is changed to - * int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask); - * - * 02 09 2011 wh.su - * [WCXRP00000433] [MT6620 Wi-Fi][Driver] Remove WAPI structure define for avoid P2P module with structure miss-align pointer issue - * always pre-allio WAPI related structure for align p2p module. - * - * 02 09 2011 terry.wu - * [WCXRP00000383] [MT6620 Wi-Fi][Driver] Separate WiFi and P2P driver into two modules - * Halt p2p module init and exit until TxThread finished p2p register and unregister. - * - * 02 01 2011 cm.chang - * [WCXRP00000415] [MT6620 Wi-Fi][Driver] Check if any memory leakage happens when uninitializing in DGB mode - * . - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 12 2011 cp.wu - * [WCXRP00000357] [MT6620 Wi-Fi][Driver][Bluetooth over Wi-Fi] add another net device interface for BT AMP - * implementation of separate BT_OVER_WIFI data path. - * - * 01 12 2011 cp.wu - * [WCXRP00000356] [MT6620 Wi-Fi][Driver] fill mac header length for security frames 'cause hardware header translation needs such information - * fill mac header length information for 802.1x frames. - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. - * - * 01 10 2011 cp.wu - * [WCXRP00000349] [MT6620 Wi-Fi][Driver] make kalIoctl() of linux port as a thread safe API to avoid potential issues due to multiple access - * use mutex to protect kalIoctl() for thread safe. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 28 2010 wh.su - * NULL - * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo. - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 09 13 2010 cp.wu - * NULL - * add waitq for poll() and read(). - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 09 06 2010 wh.su - * NULL - * let the p2p can set the privacy bit at beacon and rsn ie at assoc req at key handshake state. - * - * 09 03 2010 kevin.huang - * NULL - * Refine #include sequence and solve recursive/nested #include issue - * - * 09 01 2010 wh.su - * NULL - * adding the wapi support for integration test. - * - * 08 31 2010 kevin.huang - * NULL - * Use LINK LIST operation to process SCAN result - * - * 08 23 2010 cp.wu - * NULL - * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated) - * - * 08 16 2010 cp.wu - * NULL - * P2P packets are now marked when being queued into driver, and identified later without checking MAC address - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 11 2010 cp.wu - * NULL - * 1) do not use in-stack variable for beacon updating. (for MAUI porting) - * 2) extending scanning result to 64 instead of 48 - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 08 02 2010 jeffrey.chang - * NULL - * 1) modify tx service thread to avoid busy looping - * 2) add spin lock declartion for linux build - * - * 07 23 2010 jeffrey.chang - * - * add new KAL api - * - * 07 22 2010 jeffrey.chang - * - * modify tx thread and remove some spinlock - * - * 07 19 2010 jeffrey.chang - * - * add security frame pending count - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * - * 05 10 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement basic wi-fi direct framework - * - * 05 07 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * prevent supplicant accessing driver during resume - * - * 05 07 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add basic framework for implementating P2P driver hook. - * - * 05 05 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * change variable names for multiple physical link to match with coding convention - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * identify BT Over Wi-Fi Security frame and mark it as 802.1X frame - * - * 04 27 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add multiple physical link support - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * 1) fix firmware download bug - * 2) remove query statistics for acelerating firmware download - * - * 04 27 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * follow Linux's firmware framework, and remove unused kal API - * - * 04 23 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * surpress compiler warning - * - * 04 19 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * supporting power management - * - * 04 14 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * pvInformationBuffer and u4InformationBufferLength are no longer in glue - * - * 04 13 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add framework for BT-over-Wi-Fi support. - * * * * * * * * * * * * * * * * * * * * 1) prPendingCmdInfo is replaced by queue for multiple handler capability - * * * * * * * * * * * * * * * * * * * * 2) command sequence number is now increased atomically - * * * * * * * * * * * * * * * * * * * * 3) private data could be hold and taken use for other purpose - * - * 04 07 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * rWlanInfo should be placed at adapter rather than glue due to most operations - * * * * * * * * * * are done in adapter layer. - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * Tag the packet for QoS on Tx path - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * (1)deliver the kalOidComplete status to upper layer - * * (2) fix spin lock - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * add timeout check in the kalOidComplete - * - * 04 06 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * improve none-glue code portability - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * code refine: fgTestMode should be at adapter rather than glue due to the device/fw is also involved - * - * 04 06 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * eliminate direct access for prGlueInfo->fgIsCardRemoved in non-glue layer - * - * 03 30 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * emulate NDIS Pending OID facility - * - * 03 26 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * [WPD00003826] Initial import for Linux port - * adding firmware download related data type - * - * 03 25 2010 cp.wu - * [WPD00001943]Create WiFi test driver framework on WinXP - * 1) correct OID_802_11_CONFIGURATION with frequency setting behavior. - * * * * the frequency is used for adhoc connection only - * * * * 2) update with SD1 v0.9 CMD/EVENT documentation - * - * 03 25 2010 cp.wu - * [WPD00003823][MT6620 Wi-Fi] Add Bluetooth-over-Wi-Fi support - * add Bluetooth-over-Wifi frame header check - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\30 2009-10-20 17:38:31 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\29 2009-10-08 10:33:33 GMT mtk01090 -** Avoid accessing private data of net_device directly. Replace with netdev_priv(). Add more checking for input parameters and pointers. -** \main\maintrunk.MT5921\28 2009-09-28 20:19:26 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\27 2009-08-18 22:57:12 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\26 2009-07-06 21:42:25 GMT mtk01088 -** fixed the compiling error at linux -** \main\maintrunk.MT5921\25 2009-07-06 20:51:46 GMT mtk01088 -** adding the wapi 1x ether type define -** \main\maintrunk.MT5921\24 2009-06-23 23:19:18 GMT mtk01090 -** Add build option BUILD_USE_EEPROM and compile option CFG_SUPPORT_EXT_CONFIG for NVRAM support -** \main\maintrunk.MT5921\23 2009-02-07 15:05:06 GMT mtk01088 -** add the privacy flag to ingo driver the supplicant selected ap's security -** \main\maintrunk.MT5921\22 2009-02-05 15:34:09 GMT mtk01088 -** fixed the compiling error for using bits marco for only one parameter -** \main\maintrunk.MT5921\21 2009-01-22 13:02:13 GMT mtk01088 -** data frame is or not 802.1x value share with tid, using the same reserved byte, provide the function to set and get -** \main\maintrunk.MT5921\20 2008-10-24 12:04:16 GMT mtk01088 -** move the config.h from precomp.h to here for lint check -** \main\maintrunk.MT5921\19 2008-09-22 23:19:02 GMT mtk01461 -** Update driver for code review -** \main\maintrunk.MT5921\18 2008-09-05 17:25:13 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\17 2008-08-01 13:32:47 GMT mtk01084 -** Prevent redundent driver assertion in driver logic when BUS is detached -** \main\maintrunk.MT5921\16 2008-05-30 14:41:43 GMT mtk01461 -** Remove WMM Assoc Flag in KAL -** \main\maintrunk.MT5921\15 2008-05-29 14:16:25 GMT mtk01084 -** remoev un-used variable -** \main\maintrunk.MT5921\14 2008-05-03 15:17:14 GMT mtk01461 -** Add Media Status variable in Glue Layer -** \main\maintrunk.MT5921\13 2008-04-24 11:58:41 GMT mtk01461 -** change threshold to 256 -** \main\maintrunk.MT5921\12 2008-03-11 14:51:05 GMT mtk01461 -** Remove redundant GL_CONN_INFO_T -** \main\maintrunk.MT5921\11 2008-01-07 15:07:41 GMT mtk01461 -** Adjust the netif stop threshold to 150 -** \main\maintrunk.MT5921\10 2007-11-26 19:43:46 GMT mtk01461 -** Add OS_TIMESTAMP macro -** -** \main\maintrunk.MT5921\9 2007-11-07 18:38:38 GMT mtk01461 -** Move definition -** \main\maintrunk.MT5921\8 2007-11-02 01:04:00 GMT mtk01461 -** Unify TX Path for Normal and IBSS Power Save + IBSS neighbor learning -** Revision 1.5 2007/07/12 11:04:28 MTK01084 -** update macro to delay for ms order -** -** Revision 1.4 2007/07/05 07:25:34 MTK01461 -** Add Linux initial code, modify doc, add 11BB, RF init code -** -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_OS_H -#define _GL_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/*------------------------------------------------------------------------------ - * Flags for LINUX(OS) dependent - *------------------------------------------------------------------------------ - */ -#define CFG_MAX_WLAN_DEVICES 1 /* number of wlan card will coexist*/ - -#define CFG_MAX_TXQ_NUM 4 /* number of tx queue for support multi-queue h/w */ - - -#define CFG_USE_SPIN_LOCK_BOTTOM_HALF 0 /* 1: Enable use of SPIN LOCK Bottom Half for LINUX - 0: Disable - use SPIN LOCK IRQ SAVE instead */ - -#define CFG_TX_PADDING_SMALL_ETH_PACKET 0 /* 1: Enable - Drop ethernet packet if it < 14 bytes. - And pad ethernet packet with dummy 0 if it < 60 bytes. - 0: Disable */ - -#define CFG_TX_STOP_NETIF_QUEUE_THRESHOLD 256 /* packets */ - -#define CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD 256 /* packets */ -#define CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD 128 /* packets */ - - -#define ETH_P_1X 0x888E -#define IPTOS_PREC_OFFSET 5 -#define USER_PRIORITY_DEFAULT 0 - -#define ETH_WPI_1X 0x88B4 - -#define ETH_HLEN 14 -#define ETH_TYPE_LEN_OFFSET 12 -#define ETH_P_IP 0x0800 -#define ETH_P_1X 0x888E -#define ETH_P_PRE_1X 0x88C7 - -#define IPVERSION 4 -#define IP_HEADER_LEN 20 - -#define IPVH_VERSION_OFFSET 4 // For Little-Endian -#define IPVH_VERSION_MASK 0xF0 -#define IPTOS_PREC_OFFSET 5 -#define IPTOS_PREC_MASK 0xE0 - -#define SOURCE_PORT_LEN 2 -/* NOTE(Kevin): Without IP Option Length */ -#define LOOK_AHEAD_LEN (ETH_HLEN + IP_HEADER_LEN + SOURCE_PORT_LEN) - -/* 802.2 LLC/SNAP */ -#define ETH_LLC_OFFSET (ETH_HLEN) -#define ETH_LLC_LEN 3 -#define ETH_LLC_DSAP_SNAP 0xAA -#define ETH_LLC_SSAP_SNAP 0xAA -#define ETH_LLC_CONTROL_UNNUMBERED_INFORMATION 0x03 - -/* Bluetooth SNAP */ -#define ETH_SNAP_OFFSET (ETH_HLEN + ETH_LLC_LEN) -#define ETH_SNAP_LEN 5 -#define ETH_SNAP_BT_SIG_OUI_0 0x00 -#define ETH_SNAP_BT_SIG_OUI_1 0x19 -#define ETH_SNAP_BT_SIG_OUI_2 0x58 - -#define BOW_PROTOCOL_ID_SECURITY_FRAME 0x0003 - - -#if defined(MT6620) - #define CHIP_NAME "MT6620" -#elif defined(MT5931) - #define CHIP_NAME "MT5931" -#elif defined(MT6628) - #define CHIP_NAME "MT6628" -#endif - -#define DRV_NAME "["CHIP_NAME"]: " - -/* Define if target platform is Android. - * It should already be defined in Android kernel source - */ -#ifndef CONFIG_ANDROID -#define CONFIG_ANDROID 0 -#endif - -/* for CFG80211 IE buffering mechanism */ -#define CFG_CFG80211_IE_BUF_LEN (512) - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include /* constant of kernel version */ - -#include /* bitops.h */ - -#include /* struct timer_list */ -#include /* jiffies */ -#include /* udelay and mdelay macro */ - -#if CONFIG_ANDROID -#include -#endif - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) -#include /* IRQT_FALLING */ -#endif - -#include /* struct net_device, struct net_device_stats */ -#include /* for eth_type_trans() function */ -#include /* struct iw_statistics */ -#include -#include /* struct in_device */ - -#include /* struct iphdr */ - -#include /* for memcpy()/memset() function */ -#include /* for offsetof() macro */ - -#include /* The proc filesystem constants/structures */ - -#include /* for rtnl_lock() and rtnl_unlock() */ -#include /* kthread_should_stop(), kthread_run() */ -#include /* for copy_from_user() */ -#include /* for firmware download */ -#include - -#include /* for kfifo interface */ -#include /* for cdev interface */ - -#include /* for firmware download */ - -#if defined(_HIF_SDIO) -#include -#include -#endif - -#include - -#include - -#include /* readw and writew */ - -#if WIRELESS_EXT > 12 -#include -#endif - -#include "version.h" -#include "config.h" - -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 -#include -#include -#endif - -#include - -#include "gl_typedef.h" -#include "typedef.h" -#include "queue.h" -#include "gl_kal.h" -#if CFG_CHIP_RESET_SUPPORT - #include "gl_rst.h" -#endif -#include "hif.h" - - -#include "debug.h" - -#include "wlan_lib.h" -#include "wlan_oid.h" - -#if CFG_ENABLE_AEE_MSG -#include -#endif - -extern BOOLEAN fgIsBusAccessFailed; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define GLUE_FLAG_HALT BIT(0) -#define GLUE_FLAG_INT BIT(1) -#define GLUE_FLAG_OID BIT(2) -#define GLUE_FLAG_TIMEOUT BIT(3) -#define GLUE_FLAG_TXREQ BIT(4) -#define GLUE_FLAG_SUB_MOD_INIT BIT(5) -#define GLUE_FLAG_SUB_MOD_EXIT BIT(6) -#define GLUE_FLAG_SUB_MOD_MULTICAST BIT(7) -#define GLUE_FLAG_FRAME_FILTER BIT(8) -#define GLUE_FLAG_HALT_BIT (0) -#define GLUE_FLAG_INT_BIT (1) -#define GLUE_FLAG_OID_BIT (2) -#define GLUE_FLAG_TIMEOUT_BIT (3) -#define GLUE_FLAG_TXREQ_BIT (4) -#define GLUE_FLAG_SUB_MOD_INIT_BIT (5) -#define GLUE_FLAG_SUB_MOD_EXIT_BIT (6) -#define GLUE_FLAG_SUB_MOD_MULTICAST_BIT (7) -#define GLUE_FLAG_FRAME_FILTER_BIT (8) - - - -#define GLUE_BOW_KFIFO_DEPTH (1024) -//#define GLUE_BOW_DEVICE_NAME "MT6620 802.11 AMP" -#define GLUE_BOW_DEVICE_NAME "ampc0" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _GL_WPA_INFO_T { - UINT_32 u4WpaVersion; - UINT_32 u4KeyMgmt; - UINT_32 u4CipherGroup; - UINT_32 u4CipherPairwise; - UINT_32 u4AuthAlg; - BOOLEAN fgPrivacyInvoke; -#if CFG_SUPPORT_802_11W - UINT_32 u4Mfp; -#endif -} GL_WPA_INFO_T, *P_GL_WPA_INFO_T; - -typedef enum _ENUM_RSSI_TRIGGER_TYPE { - ENUM_RSSI_TRIGGER_NONE, - ENUM_RSSI_TRIGGER_GREATER, - ENUM_RSSI_TRIGGER_LESS, - ENUM_RSSI_TRIGGER_TRIGGERED, - ENUM_RSSI_TRIGGER_NUM -} ENUM_RSSI_TRIGGER_TYPE; - -#if CFG_ENABLE_WIFI_DIRECT -typedef enum _ENUM_SUB_MODULE_IDX_T { - P2P_MODULE = 0, - SUB_MODULE_NUM -} ENUM_SUB_MODULE_IDX_T; - -typedef enum _ENUM_NET_REG_STATE_T { - ENUM_NET_REG_STATE_UNREGISTERED, - ENUM_NET_REG_STATE_REGISTERING, - ENUM_NET_REG_STATE_REGISTERED, - ENUM_NET_REG_STATE_UNREGISTERING, - ENUM_NET_REG_STATE_NUM -} ENUM_NET_REG_STATE_T; - -#endif - -typedef struct _GL_IO_REQ_T { - QUE_ENTRY_T rQueEntry; - //wait_queue_head_t cmdwait_q; - BOOL fgRead; - BOOL fgWaitResp; -#if CFG_ENABLE_WIFI_DIRECT - BOOL fgIsP2pOid; -#endif - P_ADAPTER_T prAdapter; - PFN_OID_HANDLER_FUNC pfnOidHandler; - PVOID pvInfoBuf; - UINT_32 u4InfoBufLen; - PUINT_32 pu4QryInfoLen; - WLAN_STATUS rStatus; - UINT_32 u4Flag; -} GL_IO_REQ_T, *P_GL_IO_REQ_T; - -#if CFG_ENABLE_BT_OVER_WIFI -typedef struct _GL_BOW_INFO { - BOOLEAN fgIsRegistered; - dev_t u4DeviceNumber; /* dynamic device number */ -// struct kfifo *prKfifo; /* for buffering indicated events */ - struct kfifo rKfifo; /* for buffering indicated events */ - spinlock_t rSpinLock; /* spin lock for kfifo */ - struct cdev cdev; - UINT_32 u4FreqInKHz; /* frequency */ - - UINT_8 aucRole[CFG_BOW_PHYSICAL_LINK_NUM]; /* 0: Responder, 1: Initiator */ - ENUM_BOW_DEVICE_STATE aeState[CFG_BOW_PHYSICAL_LINK_NUM]; - PARAM_MAC_ADDRESS arPeerAddr[CFG_BOW_PHYSICAL_LINK_NUM]; - - wait_queue_head_t outq; - - #if CFG_BOW_SEPARATE_DATA_PATH - /* Device handle */ - struct net_device *prDevHandler; - BOOLEAN fgIsNetRegistered; - #endif - -} GL_BOW_INFO, *P_GL_BOW_INFO; -#endif - -/* -* type definition of pointer to p2p structure -*/ -typedef struct _GL_P2P_INFO_T GL_P2P_INFO_T, *P_GL_P2P_INFO_T; - -struct _GLUE_INFO_T { - /* Device handle */ - struct net_device *prDevHandler; - - /* Device Index(index of arWlanDevInfo[]) */ - INT_32 i4DevIdx; - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* Wireless statistics struct net_device */ - struct iw_statistics rIwStats; - - /* spinlock to sync power save mechanism */ - spinlock_t rSpinLock[SPIN_LOCK_NUM]; - - /* semaphore for ioctl */ - struct semaphore ioctl_sem; - - UINT_32 u4Flag; /* GLUE_FLAG_XXX */ - UINT_32 u4PendFlag; - //UINT_32 u4TimeoutFlag; - UINT_32 u4OidCompleteFlag; - UINT_32 u4ReadyFlag; /* check if card is ready */ - - /* Number of pending frames, also used for debuging if any frame is - * missing during the process of unloading Driver. - * - * NOTE(Kevin): In Linux, we also use this variable as the threshold - * for manipulating the netif_stop(wake)_queue() func. - */ - INT_32 ai4TxPendingFrameNumPerQueue[4][CFG_MAX_TXQ_NUM]; - INT_32 i4TxPendingFrameNum; - INT_32 i4TxPendingSecurityFrameNum; - - /* current IO request for kalIoctl */ - GL_IO_REQ_T OidEntry; - - /* registry info*/ - REG_INFO_T rRegInfo; - - /* firmware */ - struct firmware *prFw; - - /* Host interface related information */ - /* defined in related hif header file */ - GL_HIF_INFO_T rHifInfo; - - /*! \brief wext wpa related information */ - GL_WPA_INFO_T rWpaInfo; - - - /* Pointer to ADAPTER_T - main data structure of internal protocol stack */ - P_ADAPTER_T prAdapter; - -#ifdef WLAN_INCLUDE_PROC - struct proc_dir_entry *pProcRoot; -#endif /* WLAN_INCLUDE_PROC */ - - /* Indicated media state */ - ENUM_PARAM_MEDIA_STATE_T eParamMediaStateIndicated; - - /* Device power state D0~D3 */ - PARAM_DEVICE_POWER_STATE ePowerState; - - struct completion rScanComp; /* indicate scan complete */ - struct completion rHaltComp; /* indicate main thread halt complete */ - struct completion rPendComp; /* indicate main thread halt complete */ - -#if 0// LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) - struct completion rMgmtTxComp; /* indicate supp mgmt TX done, supp can request channel again. */ - atomic_t rMgmtTxAto; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - struct completion rSubModComp; /*indicate sub module init or exit complete*/ -#endif - WLAN_STATUS rPendStatus; - - QUE_T rTxQueue; - - - /* OID related */ - QUE_T rCmdQueue; - //PVOID pvInformationBuffer; - //UINT_32 u4InformationBufferLength; - //PVOID pvOidEntry; - //PUINT_8 pucIOReqBuff; - //QUE_T rIOReqQueue; - //QUE_T rFreeIOReqQueue; - - wait_queue_head_t waitq; - struct task_struct *main_thread; - - struct timer_list tickfn; - - -#if CFG_SUPPORT_EXT_CONFIG - UINT_16 au2ExtCfg[256]; /* NVRAM data buffer */ - UINT_32 u4ExtCfgLength; /* 0 means data is NOT valid */ -#endif - -#if 1//CFG_SUPPORT_WAPI - /* Should be large than the PARAM_WAPI_ASSOC_INFO_T */ - UINT_8 aucWapiAssocInfoIEs[42]; - UINT_16 u2WapiAssocInfoIESz; -#endif - -#if CFG_ENABLE_BT_OVER_WIFI - GL_BOW_INFO rBowInfo; -#endif - -#if CFG_ENABLE_WIFI_DIRECT - P_GL_P2P_INFO_T prP2PInfo; -#if CFG_SUPPORT_P2P_RSSI_QUERY - /* Wireless statistics struct net_device */ - struct iw_statistics rP2pIwStats; -#endif -#endif - BOOLEAN fgWpsActive; - UINT_8 aucWSCIE[500]; /*for probe req*/ - UINT_16 u2WSCIELen; - UINT_8 aucWSCAssocInfoIE[200]; /*for Assoc req*/ - UINT_16 u2WSCAssocInfoIELen; - - /* NVRAM availability */ - BOOLEAN fgNvramAvailable; - - BOOLEAN fgMcrAccessAllowed; - - /* MAC Address Overriden by IOCTL */ - BOOLEAN fgIsMacAddrOverride; - PARAM_MAC_ADDRESS rMacAddrOverride; - - SET_TXPWR_CTRL_T rTxPwr; - - /* for cfg80211 scan done indication */ - struct cfg80211_scan_request *prScanRequest; - - /* to indicate registered or not */ - BOOLEAN fgIsRegistered; - - /* for cfg80211 connected indication */ - UINT_32 u4RspIeLength; - UINT_8 aucRspIe[CFG_CFG80211_IE_BUF_LEN]; - - UINT_32 u4ReqIeLength; - UINT_8 aucReqIe[CFG_CFG80211_IE_BUF_LEN]; -}; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) - /* linux 2.4 */ - typedef void (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#else - typedef irqreturn_t (*PFN_WLANISR)(int irq, void *dev_id, struct pt_regs *regs); -#endif - -typedef void (*PFN_LINUX_TIMER_FUNC)(unsigned long); - - -/* generic sub module init/exit handler -* now, we only have one sub module, p2p -*/ -#if CFG_ENABLE_WIFI_DIRECT -typedef BOOLEAN (*SUB_MODULE_INIT)(P_GLUE_INFO_T prGlueInfo); -typedef BOOLEAN (*SUB_MODULE_EXIT)(P_GLUE_INFO_T prGlueInfo); - -typedef struct _SUB_MODULE_HANDLER { - SUB_MODULE_INIT subModInit; - SUB_MODULE_EXIT subModExit; - BOOLEAN fgIsInited; -} SUB_MODULE_HANDLER, *P_SUB_MODULE_HANDLER; - -#endif - -#if CONFIG_NL80211_TESTMODE - -typedef struct _NL80211_DRIVER_TEST_MODE_PARAMS { - UINT_32 index; - UINT_32 buflen; -} NL80211_DRIVER_TEST_MODE_PARAMS, *P_NL80211_DRIVER_TEST_MODE_PARAMS; - -/*SW CMD */ -typedef struct _NL80211_DRIVER_SW_CMD_PARAMS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 set; - unsigned long adr; - unsigned long data; -}NL80211_DRIVER_SW_CMD_PARAMS, *P_NL80211_DRIVER_SW_CMD_PARAMS; - -struct iw_encode_exts { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 addr[MAC_ADDR_LEN]; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[32]; -}; - -/*SET KEY EXT */ -typedef struct _NL80211_DRIVER_SET_KEY_EXTS { - NL80211_DRIVER_TEST_MODE_PARAMS hdr; - UINT_8 key_index; - UINT_8 key_len; - struct iw_encode_exts ext; -}NL80211_DRIVER_SET_KEY_EXTS, *P_NL80211_DRIVER_SET_KEY_EXTS; - - -#endif - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Macros of SPIN LOCK operations for using in Glue Layer */ -/*----------------------------------------------------------------------------*/ -#if CFG_USE_SPIN_LOCK_BOTTOM_HALF - #define GLUE_SPIN_LOCK_DECLARATION() - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_bh(&(prGlueInfo->rSpinLock[rLockCategory])); \ - } -#else /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - #define GLUE_SPIN_LOCK_DECLARATION() UINT_32 __u4Flags = 0 - #define GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_lock_irqsave(&(prGlueInfo)->rSpinLock[rLockCategory], __u4Flags); \ - } - #define GLUE_RELEASE_SPIN_LOCK(prGlueInfo, rLockCategory) \ - { \ - if (rLockCategory < SPIN_LOCK_NUM) \ - spin_unlock_irqrestore(&(prGlueInfo->rSpinLock[rLockCategory]), __u4Flags); \ - } -#endif /* !CFG_USE_SPIN_LOCK_BOTTOM_HALF */ - - -/*----------------------------------------------------------------------------*/ -/* Macros for accessing Reserved Fields of native packet */ -/*----------------------------------------------------------------------------*/ -#define GLUE_GET_PKT_QUEUE_ENTRY(_p) \ - (&( ((struct sk_buff *)(_p))->cb[0] )) - -#define GLUE_GET_PKT_DESCRIPTOR(_prQueueEntry) \ - ((P_NATIVE_PACKET) ((UINT_32)_prQueueEntry - offsetof(struct sk_buff, cb[0])) ) - -#define GLUE_SET_PKT_FLAG_802_11(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(7)) - -#define GLUE_SET_PKT_FLAG_1X(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(6)) - -#define GLUE_SET_PKT_FLAG_PAL(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(5)) - -#define GLUE_SET_PKT_FLAG_P2P(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= BIT(4)) - - - -#define GLUE_SET_PKT_TID(_p, _tid) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) |= (((UINT_8)((_tid) & (BITS(0,3)))))) - - -#define GLUE_SET_PKT_FRAME_LEN(_p, _u2PayloadLen) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) = (UINT_16)(_u2PayloadLen)) - -#define GLUE_GET_PKT_FRAME_LEN(_p) \ - (*((PUINT_16) &( ((struct sk_buff *)(_p))->cb[6] )) ) - - -#define GLUE_GET_PKT_IS_802_11(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(7))) - -#define GLUE_GET_PKT_IS_1X(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(6))) - -#define GLUE_GET_PKT_TID(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BITS(0,3))) - - -#define GLUE_GET_PKT_IS_PAL(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(5))) - -#define GLUE_GET_PKT_IS_P2P(_p) \ - ((*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[4] )) ) & (BIT(4))) - - -#define GLUE_SET_PKT_HEADER_LEN(_p, _ucMacHeaderLen) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) = (UINT_8)(_ucMacHeaderLen)) - -#define GLUE_GET_PKT_HEADER_LEN(_p) \ - (*((PUINT_8) &( ((struct sk_buff *)(_p))->cb[5] )) ) - -#define GLUE_SET_PKT_ARRIVAL_TIME(_p, _rSysTime) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) = (OS_SYSTIME)(_rSysTime)) - -#define GLUE_GET_PKT_ARRIVAL_TIME(_p) \ - (*((POS_SYSTIME) &( ((struct sk_buff *)(_p))->cb[8] )) ) - -/* Check validity of prDev, private data, and pointers */ -#define GLUE_CHK_DEV(prDev) \ - ((prDev && *((P_GLUE_INFO_T *) netdev_priv(prDev))) ? TRUE : FALSE) - -#define GLUE_CHK_PR2(prDev, pr2) \ - ((GLUE_CHK_DEV(prDev) && pr2) ? TRUE : FALSE) - -#define GLUE_CHK_PR3(prDev, pr2, pr3) \ - ((GLUE_CHK_PR2(prDev, pr2) && pr3) ? TRUE : FALSE) - -#define GLUE_CHK_PR4(prDev, pr2, pr3, pr4) \ - ((GLUE_CHK_PR3(prDev, pr2, pr3) && pr4) ? TRUE : FALSE) - -#define GLUE_SET_EVENT(pr) \ - kalSetEvent(pr) - -#define GLUE_INC_REF_CNT(_refCount) atomic_inc((atomic_t *)&(_refCount)) -#define GLUE_DEC_REF_CNT(_refCount) atomic_dec((atomic_t *)&(_refCount)) - - -#define DbgPrint(...) -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -#ifdef WLAN_INCLUDE_PROC -INT_32 -procRemoveProcfs ( - struct net_device *prDev, - char *pucDevName - ); - -INT_32 -procInitProcfs ( - struct net_device *prDev, - char *pucDevName - ); -#endif /* WLAN_INCLUDE_PROC */ - -#if CFG_ENABLE_BT_OVER_WIFI -BOOLEAN -glRegisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -glUnregisterAmpc ( - P_GLUE_INFO_T prGlueInfo - ); -#endif - -#if CFG_ENABLE_WIFI_DIRECT - -VOID -wlanSubModRunInit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRunExit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModInit( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -wlanSubModExit( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -wlanSubModRegisterInitExit( - SUB_MODULE_INIT rSubModInit, - SUB_MODULE_EXIT rSubModExit, - ENUM_SUB_MODULE_IDX_T eSubModIdx - ); - -BOOLEAN -wlanExportGlueInfo( - P_GLUE_INFO_T *prGlueInfoExpAddr - ); - -BOOLEAN -wlanIsLaunched( - VOID - ); - -void -p2pSetMulticastListWorkQueueWrapper( - P_GLUE_INFO_T prGlueInfo - ); - - - -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_OS_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_ioctl.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_ioctl.h deleted file mode 100755 index 359648bceb08..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_ioctl.h +++ /dev/null @@ -1,1147 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_ioctl.h#9 $ -*/ - -/*! \file gl_p2p_ioctl.h - \brief This file is for custom ioctls for Wi-Fi Direct only -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_p2p_ioctl.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . -** -** 07 25 2012 yuche.tsai -** NULL -** Bug fix. -** -** 07 25 2012 yuche.tsai -** NULL -** Bug fix for TX mgmt frame. -** -** 07 19 2012 yuche.tsai -** NULL -** Code update for JB. - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 06 07 2011 yuche.tsai - * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue - * Fix RX SD request under AP mode issue. - * - * 03 25 2011 wh.su - * NULL - * Fix P2P IOCTL of multicast address bug, add low power driver stop control. - * - * 11 22 2011 yuche.tsai - * NULL - * Update RSSI link quality of P2P Network query method. (Bug fix) - * - * 11 19 2011 yuche.tsai - * NULL - * Add RSSI support for P2P network. - * - * 11 11 2011 yuche.tsai - * NULL - * Fix work thread cancel issue. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add support for driver version query & p2p supplicant verseion set. - * For new service discovery mechanism sync. - * - * 10 25 2011 cm.chang - * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode - * . - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 16 2011 chinglan.wang - * NULL - * Add the group id information in the invitation indication. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 05 04 2011 chinglan.wang - * [WCXRP00000698] [MT6620 Wi-Fi][P2P][Driver] Add p2p invitation command for the p2p driver - * . - * - * 03 29 2011 wh.su - * [WCXRP00000095] [MT6620 Wi-Fi] [FW] Refine the P2P GO send broadcast protected code - * add the set power and get power function sample. - * - * 03 22 2011 george.huang - * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command - * link with supplicant commands - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 03 01 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * fixed the ioctl sumcmd to meet the p2p_supplicant setting. - * - * 02 23 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int define for p2p parameter. - * - * 02 22 2011 wh.su - * [WCXRP00000488] [MT6620 Wi-Fi][Driver] Support the SIGMA set p2p parameter to driver - * adding the ioctl set int from supplicant, and can used to set the p2p paramters - * - * 02 17 2011 wh.su - * [WCXRP00000448] [MT6620 Wi-Fi][Driver] Fixed WSC IE not send out at probe request - * adjust the set wsc ie structure. - * - * 01 05 2011 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * ioctl implementations for P2P Service Discovery - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * - * 12 15 2010 cp.wu - * NULL - * invoke nicEnableInterrupt() before leaving from wlanAdapterStart() - * - * 12 07 2010 cp.wu - * [WCXRP00000237] [MT6620 Wi-Fi][Wi-Fi Direct][Driver] Add interface for supporting service discovery - * define a pair of i/o control for multiplexing layer - * - * 11 04 2010 wh.su - * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID - * adding the p2p random ssid support. - * - * 10 20 2010 wh.su - * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group - * Add the code to support disconnect p2p group - * - * 09 21 2010 kevin.huang - * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface - * Isolate P2P related function for Hardware Software Bundle - * - * 09 10 2010 george.huang - * NULL - * update iwpriv LP related - * - * 09 07 2010 wh.su - * NULL - * adding the code for beacon/probe req/ probe rsp wsc ie at p2p. - * - * 08 25 2010 cp.wu - * NULL - * add netdev_ops(NDO) for linux kernel 2.6.31 or greater - * - * 08 20 2010 yuche.tsai - * NULL - * Refine a function parameter name. - * - * 08 19 2010 cp.wu - * NULL - * add set mac address interface for further possibilities of wpa_supplicant overriding interface address. - * - * 08 16 2010 george.huang - * NULL - * add wext handlers to link P2P set PS profile/ network address function (TBD) - * - * 08 16 2010 cp.wu - * NULL - * revised implementation of Wi-Fi Direct io controls. - * - * 08 12 2010 cp.wu - * NULL - * follow-up with ioctl interface update for Wi-Fi Direct application - * - * 08 06 2010 cp.wu - * NULL - * driver hook modifications corresponding to ioctl interface change. - * - * 08 03 2010 cp.wu - * NULL - * [Wi-Fi Direct] add framework for driver hooks - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 06 01 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl to configure scan mode for p2p connection - * - * 05 31 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add cfg80211 interface, which is to replace WE, for further extension - * - * 05 17 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement get scan result. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * implement wireless extension ioctls in iw_handler form. - * - * 05 14 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl framework for Wi-Fi Direct by reusing wireless extension ioctls as well - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * p2p ioctls revised. - * - * 05 11 2010 cp.wu - * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support - * add ioctl for controlling p2p scan phase parameters - * -*/ - -#ifndef _GL_P2P_IOCTL_H -#define _GL_P2P_IOCTL_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - #include - #include -#endif - -#include "wlan_oid.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -// (WirelessExtension) Private I/O Controls -#define IOC_P2P_CFG_DEVICE (SIOCIWFIRSTPRIV+0) -#define IOC_P2P_PROVISION_COMPLETE (SIOCIWFIRSTPRIV+2) -#define IOC_P2P_START_STOP_DISCOVERY (SIOCIWFIRSTPRIV+4) -#define IOC_P2P_DISCOVERY_RESULTS (SIOCIWFIRSTPRIV+5) -#define IOC_P2P_WSC_BEACON_PROBE_RSP_IE (SIOCIWFIRSTPRIV+6) -#define IOC_P2P_GO_WSC_IE IOC_P2P_WSC_BEACON_PROBE_RSP_IE -#define IOC_P2P_CONNECT_DISCONNECT (SIOCIWFIRSTPRIV+8) -#define IOC_P2P_PASSWORD_READY (SIOCIWFIRSTPRIV+10) -//#define IOC_P2P_SET_PWR_MGMT_PARAM (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_SET_INT (SIOCIWFIRSTPRIV+12) -#define IOC_P2P_GET_STRUCT (SIOCIWFIRSTPRIV+13) -#define IOC_P2P_SET_STRUCT (SIOCIWFIRSTPRIV+14) -#define IOC_P2P_GET_REQ_DEVICE_INFO (SIOCIWFIRSTPRIV+15) - -#define PRIV_CMD_INT_P2P_SET 0 - -// IOC_P2P_PROVISION_COMPLETE (iw_point . flags) -#define P2P_PROVISIONING_SUCCESS 0 -#define P2P_PROVISIONING_FAIL 1 - -// IOC_P2P_START_STOP_DISCOVERY (iw_point . flags) -#define P2P_STOP_DISCOVERY 0 -#define P2P_START_DISCOVERY 1 - -// IOC_P2P_CONNECT_DISCONNECT (iw_point . flags) -#define P2P_CONNECT 0 -#define P2P_DISCONNECT 1 - -// IOC_P2P_START_STOP_DISCOVERY (scan_type) -#define P2P_SCAN_FULL_AND_FIND 0 -#define P2P_SCAN_FULL 1 -#define P2P_SCAN_SEARCH_AND_LISTEN 2 -#define P2P_LISTEN 3 - -// IOC_P2P_GET_STRUCT/IOC_P2P_SET_STRUCT -#define P2P_SEND_SD_RESPONSE 0 -#define P2P_GET_SD_REQUEST 1 -#define P2P_SEND_SD_REQUEST 2 -#define P2P_GET_SD_RESPONSE 3 -#define P2P_TERMINATE_SD_PHASE 4 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/*----------------------------------------------------------------------------*/ -/* Wireless Extension: Private I/O Control */ -/*----------------------------------------------------------------------------*/ -typedef struct iw_p2p_cfg_device_type { - void __user *ssid; - UINT_8 ssid_len; - UINT_8 pri_device_type[8]; - UINT_8 snd_device_type[8]; - void __user *device_name; - UINT_8 device_name_len; - UINT_8 intend; - UINT_8 persistence; - UINT_8 sec_mode; - UINT_8 ch; - UINT_8 ch_width; /* 0: 20 Mhz 1:20/40 Mhz auto */ - UINT_8 max_scb; -} IW_P2P_CFG_DEVICE_TYPE, *P_IW_P2P_CFG_DEVICE_TYPE; - -typedef struct iw_p2p_hostapd_param { - UINT_8 cmd; - UINT_8 rsv[3]; - UINT_8 sta_addr[6]; - void __user *data; - UINT_16 len; -} IW_P2P_HOSTAPD_PARAM, *P_IW_P2P_HOSTAPD_PARAM; - -typedef struct iw_p2p_req_device_type { - UINT_8 scan_type; /* 0: Full scan + Find - * 1: Full scan - * 2: Scan (Search +Listen) - * 3: Listen - * other : reserved - */ - UINT_8 pri_device_type[8]; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_REQ_DEVICE_TYPE, *P_IW_P2P_REQ_DEVICE_TYPE; - -typedef struct iw_p2p_connect_device { - UINT_8 sta_addr[6]; - UINT_8 p2pRole; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 authPeer; /* 1: auth peer invitation request */ - UINT_8 intend_config_method; /* Request Peer Device used config method */ -} IW_P2P_CONNECT_DEVICE, *P_IW_P2P_CONNECT_DEVICE; - -typedef struct iw_p2p_password_ready { - UINT_8 active_config_method; - void __user *probe_req_ie; - UINT_16 probe_req_len; - void __user *probe_rsp_ie; - UINT_16 probe_rsp_len; -} IW_P2P_PASSWORD_READY, *P_IW_P2P_PASSWORD_READY; - -typedef struct iw_p2p_device_req { - UINT_8 name[33]; - UINT_32 name_len; - UINT_8 device_addr[6]; - UINT_8 device_type; - INT_32 config_method; - INT_32 active_config_method; -} IW_P2P_DEVICE_REQ, *P_IW_P2P_DEVICE_REQ; - -typedef struct iw_p2p_transport_struct { - UINT_32 u4CmdId; - UINT_32 inBufferLength; - UINT_32 outBufferLength; - UINT_8 aucBuffer[16]; -} IW_P2P_TRANSPORT_STRUCT, *P_IW_P2P_TRANSPORT_STRUCT; - -// For Invitation -typedef struct iw_p2p_ioctl_invitation_struct { - UINT_8 aucDeviceID[6]; - UINT_8 aucGroupID[6]; // BSSID - UINT_8 aucSsid[32]; - UINT_32 u4SsidLen; - UINT_8 ucReinvoke; -} IW_P2P_IOCTL_INVITATION_STRUCT, *P_IW_P2P_IOCTL_INVITATION_STRUCT; - -typedef struct iw_p2p_ioctl_abort_invitation { - UINT_8 dev_addr[6]; -} IW_P2P_IOCTL_ABORT_INVITATION, *P_IW_P2P_IOCTL_ABORT_INVITATION; - -typedef struct iw_p2p_ioctl_invitation_indicate { - UINT_8 dev_addr[6]; - UINT_8 group_bssid[6]; - INT_32 config_method; /* peer device supported config method */ - UINT_8 dev_name[32]; /* for reinvoke */ - UINT_32 name_len; - UINT_8 operating_channel; /* for re-invoke, target operating channel */ - UINT_8 invitation_type; /* invitation or re-invoke */ -} IW_P2P_IOCTL_INVITATION_INDICATE, *P_IW_P2P_IOCTL_INVITATION_INDICATE; - -typedef struct iw_p2p_ioctl_invitation_status { - UINT_32 status_code; -} IW_P2P_IOCTL_INVITATION_STATUS, *P_IW_P2P_IOCTL_INVITATION_STATUS; - -//For Formation -typedef struct iw_p2p_ioctl_start_formation { - UINT_8 dev_addr[6]; /* bssid */ - UINT_8 role; /* 0: P2P Device, 1:GC, 2: GO */ - UINT_8 needProvision; /* 0: Don't needed provision, 1: doing the wsc provision first */ - UINT_8 auth; /* 1: auth peer invitation request */ - UINT_8 config_method; /* Request Peer Device used config method */ -}IW_P2P_IOCTL_START_FORMATION, *P_IW_P2P_IOCTL_START_FORMATION; - -/* SET_STRUCT / GET_STRUCT */ -typedef enum _ENUM_P2P_CMD_ID_T { - P2P_CMD_ID_SEND_SD_RESPONSE = 0, /* 0x00 (Set) */ - P2P_CMD_ID_GET_SD_REQUEST, /* 0x01 (Get) */ - P2P_CMD_ID_SEND_SD_REQUEST, /* 0x02 (Set) */ - P2P_CMD_ID_GET_SD_RESPONSE, /* 0x03 (Get) */ - P2P_CMD_ID_TERMINATE_SD_PHASE, /* 0x04 (Set) */ -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - P2P_CMD_ID_SEC_CHECK, /* 0x05(Set) */ -#endif - P2P_CMD_ID_INVITATION, /* 0x06 (Set) */ - P2P_CMD_ID_INVITATION_INDICATE, /* 0x07 (Get) */ - P2P_CMD_ID_INVITATION_STATUS, /* 0x08 (Get) */ - P2P_CMD_ID_INVITATION_ABORT, /* 0x09 (Set) */ - P2P_CMD_ID_START_FORMATION, /* 0x0A (Set) */ - P2P_CMD_ID_P2P_VERSION, /* 0x0B (Set/Get) */ - P2P_CMD_ID_GET_CH_LIST = 12, /* 0x0C (Get) */ - P2P_CMD_ID_GET_OP_CH = 14 /* 0x0E (Get) */ -} ENUM_P2P_CMD_ID_T, *P_ENUM_P2P_CMD_ID_T; - -/* Service Discovery */ -typedef struct iw_p2p_cmd_send_sd_response { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_RESPONSE, *P_IW_P2P_CMD_SEND_SD_RESPONSE; - -typedef struct iw_p2p_cmd_get_sd_request { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_REQUEST, *P_IW_P2P_CMD_GET_SD_REQUEST; - -typedef struct iw_p2p_cmd_send_service_discovery_request { - PARAM_MAC_ADDRESS rReceiverAddr; - UINT_8 fgNeedTxDoneIndication; - UINT_8 ucSeqNum; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_SEND_SD_REQUEST, *P_IW_P2P_CMD_SEND_SD_REQUEST; - -typedef struct iw_p2p_cmd_get_sd_response { - PARAM_MAC_ADDRESS rTransmitterAddr; - UINT_16 u2PacketLength; - UINT_8 aucPacketContent[0]; /*native 802.11*/ -} IW_P2P_CMD_GET_SD_RESPONSE, *P_IW_P2P_CMD_GET_SD_RESPONSE; - -typedef struct iw_p2p_cmd_terminate_sd_phase { - PARAM_MAC_ADDRESS rPeerAddr; -} IW_P2P_CMD_TERMINATE_SD_PHASE, *P_IW_P2P_CMD_TERMINATE_SD_PHASE; - -typedef struct iw_p2p_version { - UINT_32 u4Version; -} IW_P2P_VERSION, *P_IW_P2P_VERSION; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -/* Macros used for cfg80211 */ -#define RATETAB_ENT(_rate, _rateid, _flags) \ - { \ - .bitrate = (_rate), \ - .hw_value = (_rateid), \ - .flags = (_flags), \ - } - -#define CHAN2G(_channel, _freq, _flags) \ - { \ - .band = IEEE80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -#define CHAN5G(_channel, _flags) \ - { \ - .band = IEEE80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ - .max_antenna_gain = 0, \ - .max_power = 30, \ - } - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) && (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0) -int mtk_p2p_cfg80211_change_iface( - struct wiphy *wiphy, - struct net_device *ndev, - enum nl80211_iftype type, u32 *flags, - struct vif_params *params - ); - -int mtk_p2p_cfg80211_add_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - struct key_params *params - ); - -int mtk_p2p_cfg80211_get_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*) - ); - -int mtk_p2p_cfg80211_del_key( - struct wiphy *wiphy, - struct net_device *ndev, - u8 key_index, - bool pairwise, - const u8 *mac_addr - ); - -int -mtk_p2p_cfg80211_set_default_key( - struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, - bool unicast, - bool multicast - ); - - -int mtk_p2p_cfg80211_get_station( - struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, - struct station_info *sinfo - ); - -int mtk_p2p_cfg80211_scan( - struct wiphy *wiphy, - struct net_device *ndev, - struct cfg80211_scan_request *request - ); - -int mtk_p2p_cfg80211_set_wiphy_params( - struct wiphy *wiphy, - u32 changed - ); - -int mtk_p2p_cfg80211_connect( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_connect_params *sme - ); - -int mtk_p2p_cfg80211_disconnect( - struct wiphy *wiphy, - struct net_device *dev, - u16 reason_code - ); - -int mtk_p2p_cfg80211_join_ibss( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ibss_params *params - ); - -int mtk_p2p_cfg80211_leave_ibss( - struct wiphy *wiphy, - struct net_device *dev - ); - -int mtk_p2p_cfg80211_set_txpower( - struct wiphy *wiphy, - enum nl80211_tx_power_setting type, - int mbm - ); - -int mtk_p2p_cfg80211_get_txpower( - struct wiphy *wiphy, - int *dbm - ); - -int mtk_p2p_cfg80211_set_power_mgmt( - struct wiphy *wiphy, - struct net_device *dev, - bool enabled, - int timeout - ); - -int -mtk_p2p_cfg80211_change_bss( - struct wiphy * wiphy, - struct net_device * dev, - struct bss_parameters * params - ); - -int -mtk_p2p_cfg80211_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - struct ieee80211_channel * chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 * cookie - ); - -int -mtk_p2p_cfg80211_cancel_remain_on_channel( - struct wiphy * wiphy, - struct net_device * dev, - u64 cookie - ); - -int -mtk_p2p_cfg80211_deauth( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_deauth_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); - - -int -mtk_p2p_cfg80211_disassoc( - struct wiphy * wiphy, - struct net_device * dev, - struct cfg80211_disassoc_request * req -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) - , void *cookie -#endif - ); - -int -mtk_p2p_cfg80211_mgmt_tx ( - struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, - size_t len, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - bool no_cck, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) - bool dont_wait_for_ack, -#endif -#endif - u64 *cookie - ); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) -int -mtk_p2p_cfg80211_start_ap( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_ap_settings *settings - ); - - -int -mtk_p2p_cfg80211_change_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_beacon_data *info - ); -#else -int -mtk_p2p_cfg80211_add_set_beacon( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ); -int -mtk_p2p_cfg80211_add_set_beacon_1( - struct wiphy *wiphy, - struct net_device *dev, - struct beacon_parameters *info - ); -int -mtk_p2p_cfg80211_mgmt_tx_cancel_wait ( - struct wiphy *wiphy, - struct net_device *ndev, - u64 cookie - ); - - - -#endif - - -int -mtk_p2p_cfg80211_stop_ap( - struct wiphy * wiphy, - struct net_device * dev - ); - - - -int -mtk_p2p_cfg80211_del_station( - struct wiphy * wiphy, - struct net_device * dev, - u8 * mac - ); - -int -mtk_p2p_cfg80211_set_channel( - IN struct wiphy * wiphy, - IN struct net_device * dev, - IN struct ieee80211_channel * chan, - IN enum nl80211_channel_type channel_type - ); - -int -mtk_p2p_cfg80211_set_bitrate_mask( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN const u8 *peer, - IN const struct cfg80211_bitrate_mask *mask - ); - - -void -mtk_p2p_cfg80211_mgmt_frame_register( - IN struct wiphy *wiphy, - IN struct net_device *dev, - IN u16 frame_type, - IN bool reg - ); - -#if CONFIG_NL80211_TESTMODE -int -mtk_p2p_cfg80211_testmode_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_pre_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -int -mtk_p2p_cfg80211_testmode_p2p_sigma_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); - -#if CFG_SUPPORT_WFD -int -mtk_p2p_cfg80211_testmode_wfd_update_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#endif - -int -mtk_p2p_cfg80211_testmode_hotspot_block_list_cmd( - IN struct wiphy *wiphy, - IN void *data, - IN int len - ); -#else - #error "Please ENABLE kernel config (CONFIG_NL80211_TESTMODE) to support Wi-Fi Direct" -#endif - -#endif - -/* I/O control handlers */ - -int -mtk_p2p_wext_get_priv ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_reconnect ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_auth ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_key ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_mlme_handler( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_powermode( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls takes use of iw_handler */ -int -mtk_p2p_wext_set_local_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_provision_complete( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_start_stop_discovery( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_discovery_results( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_wsc_ie( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_connect_disconnect( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_password_ready( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_request_dev_info( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_indicate( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_invitation_status( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_pm_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_ps_profile ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_network_address ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_int ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* Private Wireless I/O Controls for IOC_SET_STRUCT/IOC_GET_STRUCT */ -int -mtk_p2p_wext_set_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_struct ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -/* IOC_SET_STRUCT/IOC_GET_STRUCT: Service Discovery */ -int -mtk_p2p_wext_get_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_send_service_discovery_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_terminate_service_discovery_phase ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -#if CFG_SUPPORT_ANTI_PIRACY -int -mtk_p2p_wext_set_sec_check_request ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_sec_check_response ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); -#endif - -int -mtk_p2p_wext_set_noa_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_oppps_param ( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_set_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -int -mtk_p2p_wext_get_p2p_version( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - - -void -mtk_p2p_wext_set_Multicastlist( - IN P_GLUE_INFO_T prGlueInfo - ); - -#if CFG_SUPPORT_P2P_RSSI_QUERY -int -mtk_p2p_wext_get_rssi( - IN struct net_device *prDev, - IN struct iw_request_info *info, - IN OUT union iwreq_data *wrqu, - IN OUT char *extra - ); - -struct iw_statistics * -mtk_p2p_wext_get_wireless_stats( - struct net_device *prDev - ); - -#endif - -int -mtk_p2p_wext_set_txpow( - IN struct net_device *prDev, - IN struct iw_request_info *prIwrInfo, - IN OUT union iwreq_data *prTxPow, - IN char *pcExtra - ); - - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_P2P_IOCTL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_kal.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_kal.h deleted file mode 100755 index 2b3c98952379..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_kal.h +++ /dev/null @@ -1,435 +0,0 @@ -/* -** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/os/linux/include/gl_p2p_kal.h#2 $ -*/ - -/*! \file gl_p2p_kal.h - \brief Declaration of KAL functions for Wi-Fi Direct support - - kal*() which is provided by GLUE Layer. - - Any definitions in this file will be shared among GLUE Layer and internal Driver Stack. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_p2p_kal.h $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . - * - * 07 17 2012 yuche.tsai - * NULL - * Compile no error before trial run. - * - * 10 18 2011 yuche.tsai - * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch. - * New 2.1 branch - - * - * 08 15 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Add group BSSID in invitation request indication. - * The BSSID is used for APP to decide the configure method. - * - * 08 09 2011 yuche.tsai - * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature. - * Invitation Feature add on. - * - * 03 19 2011 terry.wu - * [WCXRP00000577] [MT6620 Wi-Fi][Driver][FW] Create V2.0 branch for firmware and driver - * create V2.0 p2p driver release based on label "MT6620_WIFI_P2P_DRIVER_V2_0_2100_0319_2011" from main trunk. - * - * 03 07 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * rename the define to anti_pviracy. - * - * 03 05 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * add the code to get the check rsponse and indicate to app. - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add Security check related code. - * - * 12 22 2010 cp.wu - * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface for supporting Wi-Fi Direct Service Discovery - * 1. header file restructure for more clear module isolation - * 2. add function interface definition for implementing Service Discovery callbacks - * -*/ - -#ifndef _GL_P2P_KAL_H -#define _GL_P2P_KAL_H - - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "config.h" -#include "gl_typedef.h" -#include "gl_os.h" -#include "wlan_lib.h" -#include "wlan_oid.h" -#include "wlan_p2p.h" -#include "gl_kal.h" -#include "gl_wext_priv.h" -#include "gl_p2p_ioctl.h" -#include "nic/p2p.h" - - -#if DBG - extern int allocatedMemSize; -#endif - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/* Service Discovery */ -VOID -kalP2PIndicateSDRequest( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -void -kalP2PIndicateSDResponse( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucSeqNum - ); - -VOID -kalP2PIndicateTXDone( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucSeqNum, - IN UINT_8 ucStatus - ); - -/*----------------------------------------------------------------------------*/ -/* Wi-Fi Direct handling */ -/*----------------------------------------------------------------------------*/ -ENUM_PARAM_MEDIA_STATE_T -kalP2PGetState ( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetState ( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_PARAM_MEDIA_STATE_T eState, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucRole - ); - -VOID -kalP2PUpdateAssocInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBody, - IN UINT_32 u4FrameBodyLen, - IN BOOLEAN fgReassocRequest - ); - -UINT_32 -kalP2PGetFreqInKHz( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_8 -kalP2PGetRole( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PSetRole( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucResult, - IN PUINT_8 pucSSID, - IN UINT_8 ucSSIDLen, - IN UINT_8 ucRole - ); - -VOID -kalP2PSetCipher( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Cipher - ); - -BOOLEAN -kalP2PGetCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -kalP2PGetTkipCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -BOOLEAN -kalP2PGetCcmpCipher( - IN P_GLUE_INFO_T prGlueInfo - ); - - -VOID -kalP2PSetWscMode ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucWscMode - ); - -UINT_8 -kalP2PGetWscMode( - IN P_GLUE_INFO_T prGlueInfo - ); - -UINT_16 -kalP2PCalWSC_IELen( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType - ); - -VOID -kalP2PGenWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer - ); - - -VOID -kalP2PUpdateWSC_IE( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_8 ucType, - IN PUINT_8 pucBuffer, - IN UINT_16 u2BufferLength - ); - - - -BOOLEAN -kalP2PIndicateFound( - IN P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalP2PIndicateConnReq( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucDevName, - IN INT_32 u4NameLength, - IN PARAM_MAC_ADDRESS rPeerAddr, - IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ - IN INT_32 i4ConfigMethod, - IN INT_32 i4ActiveConfigMethod - ); - -VOID -kalP2PInvitationStatus ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4InvStatus - ); - -VOID -kalP2PInvitationIndication( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_DEVICE_DESC_T prP2pDevDesc, - IN PUINT_8 pucSsid, - IN UINT_8 ucSsidLen, - IN UINT_8 ucOperatingChnl, - IN UINT_8 ucInvitationType, - IN PUINT_8 pucGroupBssid - ); - - -struct net_device* -kalP2PGetDevHdlr( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -kalGetChnlList( - IN P_GLUE_INFO_T prGlueInfo, - IN ENUM_BAND_T eSpecificBand, - IN UINT_8 ucMaxChannelNum, - IN PUINT_8 pucNumOfChannel, - IN P_RF_CHANNEL_INFO_T paucChannelList - ); - -#if CFG_SUPPORT_ANTI_PIRACY -VOID -kalP2PIndicateSecCheckRsp( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucRsp, - IN UINT_16 u2RspLen - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -VOID -kalP2PIndicateChannelReady( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8SeqNum, - IN UINT_32 u4ChannelNum, - IN ENUM_BAND_T eBand, - IN ENUM_CHNL_EXT_T eSco, - IN UINT_32 u4Duration - ); - -VOID -kalP2PIndicateScanDone( - IN P_GLUE_INFO_T prGlueInfo, - IN BOOLEAN fgIsAbort - ); - -VOID -kalP2PIndicateBssInfo( - IN P_GLUE_INFO_T prGlueInfo, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4BufLen, - IN P_RF_CHANNEL_INFO_T prChannelInfo, - IN INT_32 i4SignalStrength - ); - -VOID -kalP2PIndicateRxMgmtFrame( - IN P_GLUE_INFO_T prGlueInfo, - IN P_SW_RFB_T prSwRfb - ); - -VOID -kalP2PIndicateMgmtTxStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_64 u8Cookie, - IN BOOLEAN fgIsAck, - IN PUINT_8 pucFrameBuf, - IN UINT_32 u4FrameLen - ); - -VOID -kalP2PIndicateChannelExpired( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo - ); - -VOID -kalP2PGCIndicateConnectionStatus( - IN P_GLUE_INFO_T prGlueInfo, - IN P_P2P_CONNECTION_REQ_INFO_T prP2pConnInfo, - IN PUINT_8 pucRxIEBuf, - IN UINT_16 u2RxIELen, - IN UINT_16 u2StatusReason - ); - - -VOID -kalP2PGOStationUpdate( - IN P_GLUE_INFO_T prGlueInfo, - IN P_STA_RECORD_T prCliStaRec, - IN BOOLEAN fgIsNew - ); - -BOOLEAN -kalP2PSetBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid, - IN BOOLEAN fgIsblock - ); - -BOOLEAN -kalP2PCmpBlackList ( - IN P_GLUE_INFO_T prGlueInfo, - IN PARAM_MAC_ADDRESS rbssid - ); - -VOID -kalP2PSetMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4MaxClient - ); - -BOOLEAN -kalP2PMaxClients ( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4NumClient - ); - -#endif /* _GL_P2P_KAL_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_os.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_os.h deleted file mode 100755 index 091be0e32716..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_p2p_os.h +++ /dev/null @@ -1,239 +0,0 @@ -/* -** $Id: -//Department/DaVinci/TRUNK/MT6620_5931_WiFi_Driver/os/linux/include/gl_p2p_os.h#28 $ -*/ - -/*! \file gl_p2p_os.h - \brief List the external reference to OS for p2p GLUE Layer. - - In this file we define the data structure - GLUE_INFO_T to store those objects - we acquired from OS - e.g. TIMER, SPINLOCK, NET DEVICE ... . And all the - external reference (header file, extern func() ..) to OS for GLUE Layer should - also list down here. -*/ - - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _GL_P2P_OS_H -#define _GL_P2P_OS_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - - -struct _GL_P2P_INFO_T { - - /* Device handle */ - struct net_device *prDevHandler; - - #if CFG_ENABLE_WIFI_DIRECT_CFG_80211 - /* cfg80211 */ - struct wireless_dev wdev; - - struct cfg80211_scan_request *prScanRequest; - - UINT_64 u8Cookie; - - /* Generation for station list update. */ - INT_32 i4Generation; - - UINT_32 u4OsMgmtFrameFilter; - - #endif - - /* Device statistics */ - struct net_device_stats rNetDevStats; - - /* glue layer variables */ - /*move to glueinfo->adapter*/ - // BOOLEAN fgIsRegistered; - UINT_32 u4FreqInKHz; /* frequency */ - UINT_8 ucRole; /* 0: P2P Device, 1: Group Client, 2: Group Owner */ - UINT_8 ucIntent; /* range: 0-15 */ - UINT_8 ucScanMode; /* 0: Search & Listen, 1: Scan without probe response */ - - ENUM_PARAM_MEDIA_STATE_T eState; - UINT_32 u4PacketFilter; - PARAM_MAC_ADDRESS aucMCAddrList[MAX_NUM_GROUP_ADDR]; - - /* connection-requested peer information */ - UINT_8 aucConnReqDevName[32]; - INT_32 u4ConnReqNameLength; - PARAM_MAC_ADDRESS rConnReqPeerAddr; - PARAM_MAC_ADDRESS rConnReqGroupAddr; /* For invitation group. */ - UINT_8 ucConnReqDevType; - INT_32 i4ConnReqConfigMethod; - INT_32 i4ConnReqActiveConfigMethod; - - UINT_32 u4CipherPairwise; - UINT_8 ucWSCRunning; - - UINT_8 aucWSCIE[3][400]; /* 0 for beacon, 1 for probe req, 2 for probe response */ - UINT_16 u2WSCIELen[3]; - -#if CFG_SUPPORT_WFD - UINT_8 aucVenderIE[1024]; /* Save the other IE for prove resp */ - UINT_16 u2VenderIELen; -#endif - - UINT_8 ucOperatingChnl; - UINT_8 ucInvitationType; - - UINT_32 u4InvStatus; - - /* For SET_STRUCT/GET_STRUCT */ - UINT_8 aucOidBuf[4096]; - -#if 1 /* CFG_SUPPORT_ANTI_PIRACY */ - UINT_8 aucSecCheck[256]; - UINT_8 aucSecCheckRsp[256]; -#endif - - /* Hotspot Client Management */ - PARAM_MAC_ADDRESS aucblackMACList[8]; - UINT_8 ucMaxClients; - -}; - - -BOOLEAN -p2pRegisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pUnregisterToWlan( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pLaunch( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pRemove( - P_GLUE_INFO_T prGlueInfo - ); - -VOID -p2pSetMode( - IN BOOLEAN fgIsAPMOde - ); - - -BOOLEAN -glRegisterP2P( - P_GLUE_INFO_T prGlueInfo, - const char *prDevName, - BOOLEAN fgIsApMode - ); - -BOOLEAN -glUnregisterP2P( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2pNetRegister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pNetUnregister( - P_GLUE_INFO_T prGlueInfo, - BOOLEAN fgIsRtnlLockAcquired - ); - -BOOLEAN -p2pStopImmediate( - P_GLUE_INFO_T prGlueInfo - ); - -BOOLEAN -p2PFreeInfo( - P_GLUE_INFO_T prGlueInfo - ); - - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_rst.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_rst.h deleted file mode 100755 index 6182c0e3e0d2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_rst.h +++ /dev/null @@ -1,173 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/include/gl_rst.h#1 $ -*/ - -/*! \file gl_rst.h - \brief Declaration of functions and finite state machine for - MT6620 Whole-Chip Reset Mechanism -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _GL_RST_H -#define _GL_RST_H - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include "gl_typedef.h" - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* duplicated from wmt_exp.h for better driver isolation */ -typedef enum _ENUM_WMTDRV_TYPE_T { - WMTDRV_TYPE_BT = 0, - WMTDRV_TYPE_FM = 1, - WMTDRV_TYPE_GPS = 2, - WMTDRV_TYPE_WIFI = 3, - WMTDRV_TYPE_WMT = 4, - WMTDRV_TYPE_STP = 5, - WMTDRV_TYPE_SDIO1 = 6, - WMTDRV_TYPE_SDIO2 = 7, - WMTDRV_TYPE_LPBK = 8, - WMTDRV_TYPE_MAX -} ENUM_WMTDRV_TYPE_T, *P_ENUM_WMTDRV_TYPE_T; - -typedef enum _ENUM_WMTMSG_TYPE_T { - WMTMSG_TYPE_POWER_ON = 0, - WMTMSG_TYPE_POWER_OFF = 1, - WMTMSG_TYPE_RESET = 2, - WMTMSG_TYPE_STP_RDY= 3, - WMTMSG_TYPE_HW_FUNC_ON= 4, - WMTMSG_TYPE_MAX -} ENUM_WMTMSG_TYPE_T, *P_ENUM_WMTMSG_TYPE_T; - -typedef enum _ENUM_WMTRSTMSG_TYPE_T{ - WMTRSTMSG_RESET_START = 0x0, - WMTRSTMSG_RESET_END = 0x1, - WMTRSTMSG_RESET_MAX, - WMTRSTMSG_RESET_INVALID = 0xff -} ENUM_WMTRSTMSG_TYPE_T, *P_ENUM_WMTRSTMSG_TYPE_T; - -typedef void (*PF_WMT_CB)( - ENUM_WMTDRV_TYPE_T, /* Source driver type */ - ENUM_WMTDRV_TYPE_T, /* Destination driver type */ - ENUM_WMTMSG_TYPE_T, /* Message type */ - void *, /* READ-ONLY buffer. Buffer is allocated and freed by WMT_drv. Client - can't touch this buffer after this function return. */ - unsigned int /* Buffer size in unit of byte */ - ); - - -typedef enum _ENUM_WIFI_NETLINK_GRP_T{ - WIFI_NETLINK_GRP_RESET, - WIFI_NETLINK_GRP_MAX -} ENUM_WIFI_NETLINK_GRP_T, *P_ENUM_WIFI_NETLINK_GRP_T; - -typedef int (*set_p2p_mode)(struct net_device * netdev, PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode); - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -/*----------------------------------------------------------------------------*/ -/* Reset Initialization/Uninitialization */ -/*----------------------------------------------------------------------------*/ -VOID -glResetInit( - VOID - ); - -VOID -glResetUninit( - VOID - ); - -VOID -glSendResetRequest( - VOID - ); - -BOOLEAN -kalIsResetting( - VOID - ); - - -#endif /* _GL_RST_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_sec.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_sec.h deleted file mode 100755 index 9eba16416ed6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_sec.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/include/gl_sec.h#1 $ -*/ - -/*! \file p2p_fsm.h - \brief Declaration of functions and finite state machine for P2P Module. - - Declaration of functions and finite state machine for P2P Module. -*/ - -/******************************************************************************* -* Copyright (c) 2010 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - - -#ifndef _GL_SEC_H -#define _GL_SEC_H - -extern void handle_sec_msg_1(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_2(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_3(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_4(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_5(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); -extern void handle_sec_msg_final(unsigned char *msg_in, int msg_in_len, unsigned char *msg_out, int *msg_out_len); - -#endif /* _GL_SEC_H */ diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_typedef.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_typedef.h deleted file mode 100755 index 34e62cba9b07..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_typedef.h +++ /dev/null @@ -1,319 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/include/gl_typedef.h#1 $ -*/ - -/*! \file gl_typedef.h - \brief Definition of basic data type(os dependent). - - In this file we define the basic data type. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_typedef.h $ - * - * 06 22 2012 cp.wu - * [WCXRP00001257] [MT6620][MT5931][MT6628][Driver][Linux] Modify KAL_HZ to align ms accuracy - * modify KAL_HZ to (1000) for correct definition. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * portability improvement - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\6 2009-08-18 22:57:14 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\5 2008-09-22 23:19:30 GMT mtk01461 -** Update comment for code review -** \main\maintrunk.MT5921\4 2008-09-05 17:25:16 GMT mtk01461 -** Update Driver for Code Review -** \main\maintrunk.MT5921\3 2007-11-09 11:00:50 GMT mtk01425 -** 1. Use macro to unify network-to-host and host-to-network related functions -** Revision 1.3 2007/06/27 02:18:51 MTK01461 -** Update SCAN_FSM, Initial(Can Load Module), Proc(Can do Reg R/W), TX API -** -** Revision 1.2 2007/06/25 06:16:24 MTK01461 -** Update illustrations, gl_init.c, gl_kal.c, gl_kal.h, gl_os.h and RX API -** -*/ - -#ifndef _GL_TYPEDEF_H -#define _GL_TYPEDEF_H - -#if defined(CONFIG_HAS_EARLYSUSPEND) -#include -#endif - -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* Define HZ of timer tick for function kalGetTimeTick() */ -#define KAL_HZ (1000) - -/* Miscellaneous Equates */ -#ifndef FALSE - #define FALSE ((BOOL) 0) - #define TRUE ((BOOL) 1) -#endif /* FALSE */ - -#ifndef NULL - #if defined(__cplusplus) - #define NULL 0 - #else - #define NULL ((void *) 0) - #endif -#endif - -#if defined(CONFIG_HAS_EARLYSUSPEND) -typedef void (*early_suspend_callback)(struct early_suspend *h); -typedef void (*late_resume_callback) (struct early_suspend *h); -#endif - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* Type definition for void */ -typedef void VOID, *PVOID, **PPVOID; - -/* Type definition for Boolean */ -typedef unsigned char BOOL, *PBOOL, BOOLEAN, *PBOOLEAN; - -/* Type definition for signed integers */ -typedef signed char CHAR, *PCHAR, **PPCHAR; -typedef signed char INT_8, *PINT_8, **PPINT_8; -typedef signed short INT_16, *PINT_16, **PPINT_16; -typedef signed long INT_32, *PINT_32, **PPINT_32; -typedef signed long long INT_64, *PINT_64, **PPINT_64; - -/* Type definition for unsigned integers */ -typedef unsigned char UCHAR, *PUCHAR, **PPUCHAR; -typedef unsigned char UINT_8, *PUINT_8, **PPUINT_8, *P_UINT_8; -typedef unsigned short UINT_16, *PUINT_16, **PPUINT_16; -typedef unsigned long ULONG, UINT_32, *PUINT_32, **PPUINT_32; -typedef unsigned long long UINT_64, *PUINT_64, **PPUINT_64; - -typedef unsigned long OS_SYSTIME, *POS_SYSTIME, **PPOS_SYSTIME; - - -/* Type definition of large integer (64bits) union to be comptaible with - * Windows definition, so we won't apply our own coding style to these data types. - * NOTE: LARGE_INTEGER must NOT be floating variable. - * : Check for big-endian compatibility. - */ -typedef union _LARGE_INTEGER { - struct { - UINT_32 LowPart; - INT_32 HighPart; - } u; - INT_64 QuadPart; -} LARGE_INTEGER, *PLARGE_INTEGER; - -typedef union _ULARGE_INTEGER { - struct { - UINT_32 LowPart; - UINT_32 HighPart; - } u; - UINT_64 QuadPart; -} ULARGE_INTEGER, *PULARGE_INTEGER; - - -typedef INT_32 (*probe_card)(PVOID pvData); -typedef VOID (*remove_card)(VOID); - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ -#define IN //volatile -#define OUT //volatile - -#define __KAL_INLINE__ static __inline__ -#define __KAL_ATTRIB_PACKED__ __attribute__((__packed__)) -#define __KAL_ATTRIB_ALIGN_4__ __attribute__ ((aligned (4))) - - -#ifndef BIT -#define BIT(n) ((UINT_32) 1UL << (n)) -#endif /* BIT */ - -#ifndef BITS -/* bits range: for example BITS(16,23) = 0xFF0000 - * ==> (BIT(m)-1) = 0x0000FFFF ~(BIT(m)-1) => 0xFFFF0000 - * ==> (BIT(n+1)-1) = 0x00FFFFFF - */ -#define BITS(m,n) (~(BIT(m)-1) & ((BIT(n) - 1) | BIT(n))) -#endif /* BIT */ - - -/* This macro returns the byte offset of a named field in a known structure - type. - _type - structure name, - _field - field name of the structure */ -#ifndef OFFSET_OF - #define OFFSET_OF(_type, _field) ((UINT_32)&(((_type *)0)->_field)) -#endif /* OFFSET_OF */ - - -/* This macro returns the base address of an instance of a structure - * given the type of the structure and the address of a field within the - * containing structure. - * _addrOfField - address of current field of the structure, - * _type - structure name, - * _field - field name of the structure - */ -#ifndef ENTRY_OF - #define ENTRY_OF(_addrOfField, _type, _field) \ - ((_type *)((PINT_8)(_addrOfField) - (PINT_8)OFFSET_OF(_type, _field))) -#endif /* ENTRY_OF */ - - -/* This macro align the input value to the DW boundary. - * _value - value need to check - */ -#ifndef ALIGN_4 - #define ALIGN_4(_value) (((_value) + 3) & ~3u) -#endif /* ALIGN_4 */ - -/* This macro check the DW alignment of the input value. - * _value - value of address need to check - */ -#ifndef IS_ALIGN_4 - #define IS_ALIGN_4(_value) (((_value) & 0x3) ? FALSE : TRUE) -#endif /* IS_ALIGN_4 */ - -#ifndef IS_NOT_ALIGN_4 - #define IS_NOT_ALIGN_4(_value) (((_value) & 0x3) ? TRUE : FALSE) -#endif /* IS_NOT_ALIGN_4 */ - - -/* This macro evaluate the input length in unit of Double Word(4 Bytes). - * _value - value in unit of Byte, output will round up to DW boundary. - */ -#ifndef BYTE_TO_DWORD - #define BYTE_TO_DWORD(_value) ((_value + 3) >> 2) -#endif /* BYTE_TO_DWORD */ - -/* This macro evaluate the input length in unit of Byte. - * _value - value in unit of DW, output is in unit of Byte. - */ -#ifndef DWORD_TO_BYTE - #define DWORD_TO_BYTE(_value) ((_value) << 2) -#endif /* DWORD_TO_BYTE */ - -#if 1 // Little-Endian - #define CONST_NTOHS(_x) __constant_ntohs(_x) - - #define CONST_HTONS(_x) __constant_htons(_x) - - #define NTOHS(_x) ntohs(_x) - - #define HTONS(_x) htons(_x) - - #define NTOHL(_x) ntohl(_x) - - #define HTONL(_x) htonl(_x) - -#else // Big-Endian - - #define CONST_NTOHS(_x) - - #define CONST_HTONS(_x) - - #define NTOHS(_x) - - #define HTONS(_x) - -#endif - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_TYPEDEF_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_wext.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_wext.h deleted file mode 100755 index f9fb8c6be0ee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_wext.h +++ /dev/null @@ -1,416 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/include/gl_wext.h#1 $ -*/ - -/*! \file gl_wext.h - \brief This file is for Portable Driver linux wireless extension support. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_wext.h $ - * - * 10 12 2011 wh.su - * [WCXRP00001036] [MT6620 Wi-Fi][Driver][FW] Adding the 802.11w code for MFP - * adding the 802.11w related function and define . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 09 20 2011 chinglan.wang - * [WCXRP00000989] [WiFi Direct] [Driver] Add a new io control API to start the formation for the sigma test. - * . - * - * 01 11 2011 chinglan.wang - * NULL - * Modify to reslove the CR :[ALPS00028994] Use WEP security to connect Marvell 11N AP. Connection establish successfully. - * Use the WPS function to connect AP, the privacy bit always is set to 1. . - * - * 09 27 2010 wh.su - * NULL - * [WCXRP00000067][MT6620 Wi-Fi][Driver] Support the android+ WAPI function. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\12 2009-10-20 17:38:33 GMT mtk01090 -** Refine driver unloading and clean up procedure. Block requests, stop main thread and clean up queued requests, and then stop hw. -** \main\maintrunk.MT5921\11 2009-09-28 20:19:28 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\10 2009-09-03 12:12:35 GMT mtk01088 -** adding the function declaration -** \main\maintrunk.MT5921\9 2009-08-18 22:57:17 GMT mtk01090 -** Add Linux SDIO (with mmc core) support. -** Add Linux 2.6.21, 2.6.25, 2.6.26. -** Fix compile warning in Linux. -** \main\maintrunk.MT5921\8 2008-08-29 16:59:07 GMT mtk01088 -** fixed compiling error -** \main\maintrunk.MT5921\7 2008-08-29 14:13:28 GMT mtk01088 -** adjust the header file for code refine -** \main\maintrunk.MT5921\6 2008-03-28 10:40:31 GMT mtk01461 -** Add set desired rate in Linux STD IOCTL -** \main\maintrunk.MT5921\5 2008-03-11 14:51:08 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\4 2008-02-12 23:45:45 GMT mtk01461 -** Add Set Frequency & Channel oid support for Linux -** \main\maintrunk.MT5921\3 2007-11-06 19:36:19 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_H -#define _GL_WEXT_H - -#ifdef WIRELESS_EXT -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define KILO 1000 -#define RATE_5_5M 11 /* 5.5M */ - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -typedef struct _PARAM_FIXED_IEs { - UINT_8 aucTimestamp[8]; - UINT_16 u2BeaconInterval; - UINT_16 u2Capabilities; -} PARAM_FIXED_IEs; - -typedef struct _PARAM_VARIABLE_IE_T { - UINT_8 ucElementID; - UINT_8 ucLength; - UINT_8 aucData[1]; -} PARAM_VARIABLE_IE_T, *P_PARAM_VARIABLE_IE_T; - - -#if WIRELESS_EXT < 18 - -#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses struct iw_mlme */ -/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ -#define IW_MLME_DEAUTH 0 -#define IW_MLME_DISASSOC 1 - -/*! \brief SIOCSIWMLME data */ -struct iw_mlme { - __u16 cmd; /*!< IW_MLME_* */ - __u16 reason_code; - struct sockaddr addr; -}; - -#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */ -#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */ -/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ -#define IW_AUTH_INDEX 0x0FFF -#define IW_AUTH_FLAGS 0xF000 -/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) - * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the - * parameter that is being set/get to; value will be read/written to - * struct iw_param value field) */ -#define IW_AUTH_WPA_VERSION 0 -#define IW_AUTH_CIPHER_PAIRWISE 1 -#define IW_AUTH_CIPHER_GROUP 2 -#define IW_AUTH_KEY_MGMT 3 -#define IW_AUTH_TKIP_COUNTERMEASURES 4 -#define IW_AUTH_DROP_UNENCRYPTED 5 -#define IW_AUTH_80211_AUTH_ALG 6 -#define IW_AUTH_WPA_ENABLED 7 -#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 -#define IW_AUTH_ROAMING_CONTROL 9 -#define IW_AUTH_PRIVACY_INVOKED 10 -#if CFG_SUPPORT_802_11W -#define IW_AUTH_MFP 12 - -#define IW_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define IW_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define IW_AUTH_MFP_REQUIRED 2 /* MFP required */ -#endif - -/* IW_AUTH_WPA_VERSION values (bit field) */ -#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 -#define IW_AUTH_WPA_VERSION_WPA 0x00000002 -#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 - -/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ -#define IW_AUTH_CIPHER_NONE 0x00000001 -#define IW_AUTH_CIPHER_WEP40 0x00000002 -#define IW_AUTH_CIPHER_TKIP 0x00000004 -#define IW_AUTH_CIPHER_CCMP 0x00000008 -#define IW_AUTH_CIPHER_WEP104 0x00000010 - -/* IW_AUTH_KEY_MGMT values (bit field) */ -#define IW_AUTH_KEY_MGMT_802_1X 1 -#define IW_AUTH_KEY_MGMT_PSK 2 -#define IW_AUTH_KEY_MGMT_WPA_NONE 4 - -/* IW_AUTH_80211_AUTH_ALG values (bit field) */ -#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 -#define IW_AUTH_ALG_SHARED_KEY 0x00000002 -#define IW_AUTH_ALG_LEAP 0x00000004 - -/* IW_AUTH_ROAMING_CONTROL values */ -#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ -#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming - * control */ - -#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */ -#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */ -/* SIOCSIWENCODEEXT definitions */ -#define IW_ENCODE_SEQ_MAX_SIZE 8 -/* struct iw_encode_ext ->alg */ -#define IW_ENCODE_ALG_NONE 0 -#define IW_ENCODE_ALG_WEP 1 -#define IW_ENCODE_ALG_TKIP 2 -#define IW_ENCODE_ALG_CCMP 3 -#if CFG_SUPPORT_802_11W -#define IW_ENCODE_ALG_AES_CMAC 5 -#endif - -/* struct iw_encode_ext ->ext_flags */ -#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 -#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 -#define IW_ENCODE_EXT_GROUP_KEY 0x00000004 -#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008 - -struct iw_encode_ext { - __u32 ext_flags; /*!< IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /*!< LSB first */ - struct sockaddr addr; /*!< ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /*!< IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[0]; -}; - -#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */ -#define IW_PMKSA_ADD 1 -#define IW_PMKSA_REMOVE 2 -#define IW_PMKSA_FLUSH 3 - -#define IW_PMKID_LEN 16 - -struct iw_pmksa { - __u32 cmd; /*!< IW_PMKSA_* */ - struct sockaddr bssid; - __u8 pmkid[IW_PMKID_LEN]; -}; - -#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..) - * (scan results); This includes id and - * length fields. One IWEVGENIE may - * contain more than one IE. Scan - * results may contain one or more - * IWEVGENIE events. */ -#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure - * (struct iw_michaelmicfailure) - */ -#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request. - * The data includes id and length - * fields and may contain more than one - * IE. This event is required in - * Managed mode if the driver - * generates its own WPA/RSN IE. This - * should be sent just before - * IWEVREGISTERED event for the - * association. */ -#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association - * Response. The data includes id and - * length fields and may contain more - * than one IE. This may be sent - * between IWEVASSOCREQIE and - * IWEVREGISTERED events for the - * association. */ -#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN - * pre-authentication - * (struct iw_pmkid_cand) */ - -#endif /* WIRELESS_EXT < 18 */ - -#if WIRELESS_EXT < 17 -/* Statistics flags (bitmask in updated) */ -#define IW_QUAL_QUAL_UPDATED 0x1 /* Value was updated since last read */ -#define IW_QUAL_LEVEL_UPDATED 0x2 -#define IW_QUAL_NOISE_UPDATED 0x4 -#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ -#define IW_QUAL_LEVEL_INVALID 0x20 -#define IW_QUAL_NOISE_INVALID 0x40 -#endif - -enum { - IEEE80211_FILTER_TYPE_BEACON = 1<<0, - IEEE80211_FILTER_TYPE_PROBE_REQ = 1<<1, - IEEE80211_FILTER_TYPE_PROBE_RESP = 1<<2, - IEEE80211_FILTER_TYPE_ASSOC_REQ = 1<<3, - IEEE80211_FILTER_TYPE_ASSOC_RESP = 1<<4, - IEEE80211_FILTER_TYPE_AUTH = 1<<5, - IEEE80211_FILTER_TYPE_DEAUTH = 1<<6, - IEEE80211_FILTER_TYPE_DISASSOC = 1<<7, - IEEE80211_FILTER_TYPE_ALL = 0xFF /* used to check the valid filter bits */ -}; - -#if CFG_SUPPORT_WAPI -#define IW_AUTH_WAPI_ENABLED 0x20 -#define IW_ENCODE_ALG_SMS4 0x20 -#endif - -#if CFG_SUPPORT_WAPI /* Android+ */ -#define IW_AUTH_KEY_MGMT_WAPI_PSK 3 -#define IW_AUTH_KEY_MGMT_WAPI_CERT 4 -#endif -#define IW_AUTH_KEY_MGMT_WPS 5 - -#if CFG_SUPPORT_802_11W -#define IW_AUTH_KEY_MGMT_802_1X_SHA256 7 -#define IW_AUTH_KEY_MGMT_PSK_SHA256 8 -#endif - - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ -extern const struct iw_handler_def wext_handler_def; - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ -/* wireless extensions' ioctls */ -int -wext_support_ioctl( - IN struct net_device *prDev, - IN struct ifreq *prIfReq, - IN int i4Cmd - ); - -int -wext_set_rate ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN struct iw_param *prRate, - IN char *pcExtra - ); - -void -wext_indicate_wext_event( - IN P_GLUE_INFO_T prGlueInfo, - IN unsigned int u4Cmd, - IN unsigned char *pucData, - IN unsigned int u4DataLen - ); - -struct iw_statistics * -wext_get_wireless_stats ( - struct net_device *prDev - ); - -int -wext_get_priv ( - IN struct net_device *prNetDev, - IN struct ifreq *prIfReq - ); - -BOOLEAN -wextSrchDesiredWPAIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); - -#if CFG_SUPPORT_WPS -BOOLEAN -wextSrchDesiredWPSIE ( - IN PUINT_8 pucIEStart, - IN INT_32 i4TotalIeLen, - IN UINT_8 ucDesiredElemId, - OUT PUINT_8 *ppucDesiredIE - ); -#endif - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* WIRELESS_EXT */ - -#endif /* _GL_WEXT_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_wext_priv.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_wext_priv.h deleted file mode 100755 index 8521e1f572aa..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/include/gl_wext_priv.h +++ /dev/null @@ -1,438 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/include/gl_wext_priv.h#1 $ -*/ - -/*! \file gl_wext_priv.h - \brief This file includes private ioctl support. -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: gl_wext_priv.h $ - * - * 01 16 2012 wh.su - * [WCXRP00001170] [MT6620 Wi-Fi][Driver] Adding the related code for set/get band ioctl - * Adding the template code for set / get band IOCTL (with ICS supplicant_6).. - * - * 01 05 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the related ioctl / wlan oid function to set the Tx power cfg. - * - * 01 02 2012 wh.su - * [WCXRP00001153] [MT6620 Wi-Fi][Driver] Adding the get_ch_list and set_tx_power proto type function - * Adding the proto type function for set_int set_tx_power and get int get_ch_list. - * - * 11 08 2011 yuche.tsai - * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check. - * Add a CMD ID for P2P driver version query. - * - * 03 17 2011 chinglan.wang - * [WCXRP00000570] [MT6620 Wi-Fi][Driver] Add Wi-Fi Protected Setup v2.0 feature - * . - * - * 03 02 2011 wh.su - * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code - * Add security check code. - * - * 01 27 2011 cm.chang - * [WCXRP00000402] [MT6620 Wi-Fi][Driver] Enable MCR read/write by iwpriv by default - * . - * - * 01 20 2011 eddie.chen - * [WCXRP00000374] [MT6620 Wi-Fi][DRV] SW debug control - * Add Oid for sw control debug command - * - * 01 07 2011 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add a new compiling option to control if MCR read/write is permitted - * - * 12 31 2010 cm.chang - * [WCXRP00000336] [MT6620 Wi-Fi][Driver] Add test mode commands in normal phone operation - * Add some iwpriv commands to support test mode operation - * - * 11 08 2010 wh.su - * [WCXRP00000171] [MT6620 Wi-Fi][Driver] Add message check code same behavior as mt5921 - * add the message check code from mt5921. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 09 23 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * add skeleton for NVRAM integration - * - * 08 04 2010 cp.wu - * NULL - * revert changelist #15371, efuse read/write access will be done by RF test approach - * - * 08 04 2010 cp.wu - * NULL - * add OID definitions for EFUSE read/write access. - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base - * - * 03 31 2010 wh.su - * [WPD00003816][MT6620 Wi-Fi] Adding the security support - * modify the wapi related code for new driver's design. - * - * 03 24 2010 jeffrey.chang - * [WPD00003826]Initial import for Linux port - * initial import for Linux port -** \main\maintrunk.MT5921\16 2009-09-29 16:47:23 GMT mtk01090 -** Remove unused functions -** \main\maintrunk.MT5921\15 2009-09-28 20:19:31 GMT mtk01090 -** Add private ioctl to carry OID structures. Restructure public/private ioctl interfaces to Linux kernel. -** \main\maintrunk.MT5921\14 2009-05-07 22:26:06 GMT mtk01089 -** add private IO control for Linux BWCS -** \main\maintrunk.MT5921\13 2008-08-29 14:55:20 GMT mtk01088 -** adjust the code to meet coding style -** \main\maintrunk.MT5921\12 2008-07-16 15:23:45 GMT mtk01104 -** Support GPIO2 mode -** \main\maintrunk.MT5921\11 2008-07-14 13:55:58 GMT mtk01104 -** Support PRIV_CMD_BT_COEXIST -** \main\maintrunk.MT5921\10 2008-07-09 00:20:24 GMT mtk01461 -** Add priv oid to support WMM_PS_TEST -** \main\maintrunk.MT5921\9 2008-05-30 20:27:24 GMT mtk01461 -** Add POWER_MODE Private IOCTL cmd -** \main\maintrunk.MT5921\8 2008-04-17 23:06:44 GMT mtk01461 -** Add iwpriv support for AdHocMode setting -** \main\maintrunk.MT5921\7 2008-03-31 21:01:24 GMT mtk01461 -** Add priv IOCTL for VOIP settings -** \main\maintrunk.MT5921\6 2008-03-31 13:49:47 GMT mtk01461 -** add priv ioctl arg definition for turning on / off roaming -** \main\maintrunk.MT5921\5 2008-03-26 15:35:09 GMT mtk01461 -** Add CSUM offload priv ioctl for Linux -** \main\maintrunk.MT5921\4 2008-03-11 14:51:11 GMT mtk01461 -** Refine private IOCTL functions -** \main\maintrunk.MT5921\3 2007-11-06 19:36:25 GMT mtk01088 -** add the WPS related code -*/ - -#ifndef _GL_WEXT_PRIV_H -#define _GL_WEXT_PRIV_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ -/* If it is set to 1, iwpriv will support register read/write */ -#define CFG_SUPPORT_PRIV_MCR_RW 1 - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -/* New wireless extensions API - SET/GET convention (even ioctl numbers are - * root only) - */ -#define IOCTL_SET_INT (SIOCIWFIRSTPRIV + 0) -#define IOCTL_GET_INT (SIOCIWFIRSTPRIV + 1) - -#define IOCTL_SET_ADDRESS (SIOCIWFIRSTPRIV + 2) -#define IOCTL_GET_ADDRESS (SIOCIWFIRSTPRIV + 3) -#define IOCTL_SET_STR (SIOCIWFIRSTPRIV + 4) -#define IOCTL_GET_STR (SIOCIWFIRSTPRIV + 5) -#define IOCTL_SET_KEY (SIOCIWFIRSTPRIV + 6) -#define IOCTL_GET_KEY (SIOCIWFIRSTPRIV + 7) -#define IOCTL_SET_STRUCT (SIOCIWFIRSTPRIV + 8) -#define IOCTL_GET_STRUCT (SIOCIWFIRSTPRIV + 9) -#define IOCTL_SET_STRUCT_FOR_EM (SIOCIWFIRSTPRIV + 11) -#define IOCTL_SET_INTS (SIOCIWFIRSTPRIV + 12) -#define IOCTL_GET_INTS (SIOCIWFIRSTPRIV + 13) - -#define PRIV_CMD_REG_DOMAIN 0 -#define PRIV_CMD_BEACON_PERIOD 1 -#define PRIV_CMD_ADHOC_MODE 2 - -#if CFG_TCP_IP_CHKSUM_OFFLOAD - #define PRIV_CMD_CSUM_OFFLOAD 3 -#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */ - -#define PRIV_CMD_ROAMING 4 -#define PRIV_CMD_VOIP_DELAY 5 -#define PRIV_CMD_POWER_MODE 6 - -#define PRIV_CMD_WMM_PS 7 -#define PRIV_CMD_BT_COEXIST 8 -#define PRIV_GPIO2_MODE 9 - -#define PRIV_CUSTOM_SET_PTA 10 -#define PRIV_CUSTOM_CONTINUOUS_POLL 11 -#define PRIV_CUSTOM_SINGLE_ANTENNA 12 -#define PRIV_CUSTOM_BWCS_CMD 13 -#define PRIV_CUSTOM_DISABLE_BEACON_DETECTION 14//later -#define PRIV_CMD_OID 15 -#define PRIV_SEC_MSG_OID 16 - -#define PRIV_CMD_TEST_MODE 17 -#define PRIV_CMD_TEST_CMD 18 -#define PRIV_CMD_ACCESS_MCR 19 -#define PRIV_CMD_SW_CTRL 20 - -#if 1 /* ANTI_PRIVCY */ -#define PRIV_SEC_CHECK_OID 21 -#endif - -#define PRIV_CMD_WSC_PROBE_REQ 22 - -#define PRIV_CMD_P2P_VERSION 23 - -#define PRIV_CMD_GET_CH_LIST 24 - -#define PRIV_CMD_SET_TX_POWER 25 - -#define PRIV_CMD_BAND_CONFIG 26 - -#define PRIV_CMD_DUMP_MEM 27 - -#define PRIV_CMD_P2P_MODE 28 - -#define PRIV_CMD_GET_BUILD_DATE_CODE 29 - -/* 802.3 Objects (Ethernet) */ -#define OID_802_3_CURRENT_ADDRESS 0x01010102 - -/* IEEE 802.11 OIDs */ -#define OID_802_11_SUPPORTED_RATES 0x0D01020E -#define OID_802_11_CONFIGURATION 0x0D010211 - -/* PnP and PM OIDs, NDIS default OIDS */ -#define OID_PNP_SET_POWER 0xFD010101 - -#define OID_CUSTOM_OID_INTERFACE_VERSION 0xFFA0C000 - -/* MT5921 specific OIDs */ -#define OID_CUSTOM_BT_COEXIST_CTRL 0xFFA0C580 -#define OID_CUSTOM_POWER_MANAGEMENT_PROFILE 0xFFA0C581 -#define OID_CUSTOM_PATTERN_CONFIG 0xFFA0C582 -#define OID_CUSTOM_BG_SSID_SEARCH_CONFIG 0xFFA0C583 -#define OID_CUSTOM_VOIP_SETUP 0xFFA0C584 -#define OID_CUSTOM_ADD_TS 0xFFA0C585 -#define OID_CUSTOM_DEL_TS 0xFFA0C586 -#define OID_CUSTOM_SLT 0xFFA0C587 -#define OID_CUSTOM_ROAMING_EN 0xFFA0C588 -#define OID_CUSTOM_WMM_PS_TEST 0xFFA0C589 -#define OID_CUSTOM_COUNTRY_STRING 0xFFA0C58A -#define OID_CUSTOM_MULTI_DOMAIN_CAPABILITY 0xFFA0C58B -#define OID_CUSTOM_GPIO2_MODE 0xFFA0C58C -#define OID_CUSTOM_CONTINUOUS_POLL 0xFFA0C58D -#define OID_CUSTOM_DISABLE_BEACON_DETECTION 0xFFA0C58E - -/* CR1460, WPS privacy bit check disable */ -#define OID_CUSTOM_DISABLE_PRIVACY_CHECK 0xFFA0C600 - -/* Precedent OIDs */ -#define OID_CUSTOM_MCR_RW 0xFFA0C801 -#define OID_CUSTOM_EEPROM_RW 0xFFA0C803 -#define OID_CUSTOM_SW_CTRL 0xFFA0C805 -#define OID_CUSTOM_MEM_DUMP 0xFFA0C807 - - -/* RF Test specific OIDs */ -#define OID_CUSTOM_TEST_MODE 0xFFA0C901 -#define OID_CUSTOM_TEST_RX_STATUS 0xFFA0C903 -#define OID_CUSTOM_TEST_TX_STATUS 0xFFA0C905 -#define OID_CUSTOM_ABORT_TEST_MODE 0xFFA0C906 -#define OID_CUSTOM_MTK_WIFI_TEST 0xFFA0C911 - -/* BWCS */ -#define OID_CUSTOM_BWCS_CMD 0xFFA0C931 -#define OID_CUSTOM_SINGLE_ANTENNA 0xFFA0C932 -#define OID_CUSTOM_SET_PTA 0xFFA0C933 - -/* NVRAM */ -#define OID_CUSTOM_MTK_NVRAM_RW 0xFFA0C941 -#define OID_CUSTOM_CFG_SRC_TYPE 0xFFA0C942 -#define OID_CUSTOM_EEPROM_TYPE 0xFFA0C943 - - -#if CFG_SUPPORT_WAPI -#define OID_802_11_WAPI_MODE 0xFFA0CA00 -#define OID_802_11_WAPI_ASSOC_INFO 0xFFA0CA01 -#define OID_802_11_SET_WAPI_KEY 0xFFA0CA02 -#endif - -#if CFG_SUPPORT_WPS2 -#define OID_802_11_WSC_ASSOC_INFO 0xFFA0CB00 -#endif - - -/* Define magic key of test mode (Don't change it for future compatibity) */ -#define PRIV_CMD_TEST_MAGIC_KEY 2011 - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ -/* NIC BBCR configuration entry structure */ -typedef struct _PRIV_CONFIG_ENTRY { - UINT_8 ucOffset; - UINT_8 ucValue; -} PRIV_CONFIG_ENTRY, *PPRIV_CONFIG_ENTRY; - -typedef WLAN_STATUS (*PFN_OID_HANDLER_FUNC_REQ) ( - IN PVOID prAdapter, - IN OUT PVOID pvBuf, - IN UINT_32 u4BufLen, - OUT PUINT_32 pu4OutInfoLen - ); - -typedef enum _ENUM_OID_METHOD_T { - ENUM_OID_GLUE_ONLY, - ENUM_OID_GLUE_EXTENSION, - ENUM_OID_DRIVER_CORE -} ENUM_OID_METHOD_T, *P_ENUM_OID_METHOD_T; - -/* OID set/query processing entry */ -typedef struct _WLAN_REQ_ENTRY { - UINT_32 rOid; /* OID */ - PUINT_8 pucOidName; /* OID name text */ - BOOLEAN fgQryBufLenChecking; - BOOLEAN fgSetBufLenChecking; - ENUM_OID_METHOD_T eOidMethod; - UINT_32 u4InfoBufLen; - PFN_OID_HANDLER_FUNC_REQ pfOidQueryHandler; /* PFN_OID_HANDLER_FUNC*/ - PFN_OID_HANDLER_FUNC_REQ pfOidSetHandler; /* PFN_OID_HANDLER_FUNC */ -} WLAN_REQ_ENTRY, *P_WLAN_REQ_ENTRY; - -typedef struct _NDIS_TRANSPORT_STRUCT { - UINT_32 ndisOidCmd; - UINT_32 inNdisOidlength; - UINT_32 outNdisOidLength; - UINT_8 ndisOidContent[16]; -} NDIS_TRANSPORT_STRUCT, *P_NDIS_TRANSPORT_STRUCT; - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -int -priv_set_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_int( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_ints( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_set_struct( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN char *pcExtra - ); - -int -priv_get_struct ( - IN struct net_device *prNetDev, - IN struct iw_request_info *prIwReqInfo, - IN union iwreq_data *prIwReqData, - IN OUT char *pcExtra - ); - -int -priv_support_ioctl ( - IN struct net_device *prDev, - IN OUT struct ifreq *prReq, - IN int i4Cmd - ); - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - -#endif /* _GL_WEXT_PRIV_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/platform.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/platform.c deleted file mode 100755 index ad2f6aca1938..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/linux/platform.c +++ /dev/null @@ -1,699 +0,0 @@ -/* Copyright Statement: - * - * This software/firmware and related documentation ("MediaTek Software") are - * protected under relevant copyright laws. The information contained herein - * is confidential and proprietary to MediaTek Inc. and/or its licensors. - * Without the prior written permission of MediaTek inc. and/or its licensors, - * any reproduction, modification, use or disclosure of MediaTek Software, - * and information contained herein, in whole or in part, shall be strictly prohibited. - */ -/* MediaTek Inc. (C) 2010. All rights reserved. - * - * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES - * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") - * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON - * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. - * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE - * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR - * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH - * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES - * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES - * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK - * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR - * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND - * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, - * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, - * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO - * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. - * - * The following software/firmware and/or related documentation ("MediaTek Software") - * have been modified by MediaTek Inc. All revisions are subject to any receiver's - * applicable license agreements with MediaTek Inc. - */ - -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/linux/platform.c#1 $ -*/ - -/*! \file "platform.c" - \brief This file including the protocol layer privacy function. - - This file provided the macros and functions library support for the - protocol layer security setting from wlan_oid.c and for parse.c and - rsn.c and nic_privacy.c - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: platform.c $ -** -** 08 24 2012 cp.wu -** [WCXRP00001269] [MT6620 Wi-Fi][Driver] cfg80211 porting merge back to DaVinci -** . - * - * 11 14 2011 cm.chang - * NULL - * Fix compiling warning - * - * 11 10 2011 cp.wu - * [WCXRP00001098] [MT6620 Wi-Fi][Driver] Replace printk by DBG LOG macros in linux porting layer - * 1. eliminaite direct calls to printk in porting layer. - * 2. replaced by DBGLOG, which would be XLOG on ALPS platforms. - * - * 09 13 2011 jeffrey.chang - * [WCXRP00000983] [MT6620][Wi-Fi Driver] invalid pointer casting causes kernel panic during p2p connection - * fix the pointer casting - * - * 06 29 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * . - * - * 06 28 2011 george.huang - * [WCXRP00000818] [MT6620 Wi-Fi][Driver] Remove unused code segment regarding CONFIG_IPV6 - * remove un-used code - * - * 05 11 2011 jeffrey.chang - * NULL - * fix build error - * - * 05 09 2011 jeffrey.chang - * [WCXRP00000710] [MT6620 Wi-Fi] Support pattern filter update function on IP address change - * support ARP filter through kernel notifier - * - * 04 08 2011 pat.lu - * [WCXRP00000623] [MT6620 Wi-Fi][Driver] use ARCH define to distinguish PC Linux driver - * Use CONFIG_X86 instead of PC_LINUX_DRIVER_USE option to have proper compile settting for PC Linux driver - * - * 03 22 2011 pat.lu - * [WCXRP00000592] [MT6620 Wi-Fi][Driver] Support PC Linux Environment Driver Build - * Add a compiler option "PC_LINUX_DRIVER_USE" for building driver in PC Linux environment. - * - * 03 21 2011 cp.wu - * [WCXRP00000540] [MT5931][Driver] Add eHPI8/eHPI16 support to Linux Glue Layer - * improve portability for awareness of early version of linux kernel and wireless extension. - * - * 03 18 2011 jeffrey.chang - * [WCXRP00000512] [MT6620 Wi-Fi][Driver] modify the net device relative functions to support the H/W multiple queue - * remove early suspend functions - * - * 03 03 2011 jeffrey.chang - * NULL - * add the ARP filter callback - * - * 02 15 2011 jeffrey.chang - * NULL - * to support early suspend in android - * - * 02 01 2011 cp.wu - * [WCXRP00000413] [MT6620 Wi-Fi][Driver] Merge 1103 changes on NVRAM file path change to DaVinci main trunk and V1.1 branch - * upon Jason Zhang(NVRAM owner)'s change, ALPS has modified its NVRAM storage from /nvram/... to /data/nvram/... - * - * 11 01 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000150] [MT6620 Wi-Fi][Driver] Add implementation for querying current TX rate from firmware auto rate module - * 1) Query link speed (TX rate) from firmware directly with buffering mechanism to reduce overhead - * 2) Remove CNM CH-RECOVER event handling - * 3) cfg read/write API renamed with kal prefix for unified naming rules. - * - * 10 18 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check[WCXRP00000086] [MT6620 Wi-Fi][Driver] The mac address is all zero at android - * complete implementation of Android NVRAM access - * - * 10 05 2010 cp.wu - * [WCXRP00000056] [MT6620 Wi-Fi][Driver] NVRAM implementation with Version Check - * 1) add NVRAM access API - * 2) fake scanning result when NVRAM doesn't exist and/or version mismatch. (off by compiler option) - * 3) add OID implementation for NVRAM read/write service - * -** -*/ -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ -#include -#include -#include -#include -#include - -#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 12) - #include -#endif - -#include "gl_os.h" - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLY_SUSPEND) - #include -#endif -#endif - - -extern BOOLEAN fgIsUnderEarlierSuspend; - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ -#define WIFI_NVRAM_FILE_NAME "/system/etc/firmware/WIFI_MT5931" -#define WIFI_NVRAM_CUSTOM_NAME "/data/nvram/APCFG/APRDEB/WIFI_CUSTOM" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - - -static int netdev_event(struct notifier_block *nb, unsigned long notification, void *ptr) -{ - UINT_8 ip[4] = { 0 }; - UINT_32 u4NumIPv4 = 0; -//#ifdef CONFIG_IPV6 -#if 0 - UINT_8 ip6[16] = { 0 }; // FIX ME: avoid to allocate large memory in stack - UINT_32 u4NumIPv6 = 0; -#endif - struct in_ifaddr *ifa = (struct in_ifaddr *) ptr; - struct net_device *prDev = ifa->ifa_dev->dev; - UINT_32 i; - P_PARAM_NETWORK_ADDRESS_IP prParamIpAddr; - P_GLUE_INFO_T prGlueInfo = NULL; - - if (prDev == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: device is empty.\n")); - return NOTIFY_DONE; - } - - if ((strncmp(prDev->name, "p2p", 3) != 0) && (strncmp(prDev->name, "wlan", 4) != 0)) { - DBGLOG(REQ, INFO, ("netdev_event: xxx\n")); - return NOTIFY_DONE; - } - - prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prDev)); - - if (prGlueInfo == NULL) { - DBGLOG(REQ, INFO, ("netdev_event: prGlueInfo is empty.\n")); - return NOTIFY_DONE; - } - ASSERT(prGlueInfo); - - if (fgIsUnderEarlierSuspend == false) { - DBGLOG(REQ, INFO, ("netdev_event: PARAM_MEDIA_STATE_DISCONNECTED. (%d)\n", prGlueInfo->eParamMediaStateIndicated)); - return NOTIFY_DONE; - } - - - - // <3> get the IPv4 address - if(!prDev || !(prDev->ip_ptr)||\ - !((struct in_device *)(prDev->ip_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local))){ - DBGLOG(REQ, INFO, ("ip is not avaliable.\n")); - return NOTIFY_DONE; - } - - kalMemCopy(ip, &(((struct in_device *)(prDev->ip_ptr))->ifa_list->ifa_local), sizeof(ip)); - DBGLOG(REQ, INFO, ("ip is %d.%d.%d.%d\n", - ip[0],ip[1],ip[2],ip[3])); - - // todo: traverse between list to find whole sets of IPv4 addresses - if (!((ip[0] == 0) && - (ip[1] == 0) && - (ip[2] == 0) && - (ip[3] == 0))) { - u4NumIPv4++; - } - -//#ifdef CONFIG_IPV6 -#if 0 - if(!prDev || !(prDev->ip6_ptr)||\ - !((struct in_device *)(prDev->ip6_ptr))->ifa_list||\ - !(&(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local))){ - printk(KERN_INFO "ipv6 is not avaliable.\n"); - return NOTIFY_DONE; - } - - kalMemCopy(ip6, &(((struct in_device *)(prDev->ip6_ptr))->ifa_list->ifa_local), sizeof(ip6)); - printk(KERN_INFO"ipv6 is %d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d.%d\n", - ip6[0],ip6[1],ip6[2],ip6[3], - ip6[4],ip6[5],ip6[6],ip6[7], - ip6[8],ip6[9],ip6[10],ip6[11], - ip6[12],ip6[13],ip6[14],ip6[15] - ); - - // todo: traverse between list to find whole sets of IPv6 addresses - if (!((ip6[0] == 0) && - (ip6[1] == 0) && - (ip6[2] == 0) && - (ip6[3] == 0) && - (ip6[4] == 0) && - (ip6[5] == 0))) { - //u4NumIPv6++; - } -#endif - - // here we can compare the dev with other network's netdev to - // set the proper arp filter - // - // IMPORTANT: please make sure if the context can sleep, if the context can't sleep - // we should schedule a kernel thread to do this for us - - // <7> set up the ARP filter - { - WLAN_STATUS rStatus = WLAN_STATUS_FAILURE; - UINT_32 u4SetInfoLen = 0; - UINT_8 aucBuf[32] = {0}; - UINT_32 u4Len = OFFSET_OF(PARAM_NETWORK_ADDRESS_LIST, arAddress); - P_PARAM_NETWORK_ADDRESS_LIST prParamNetAddrList = (P_PARAM_NETWORK_ADDRESS_LIST)aucBuf; - P_PARAM_NETWORK_ADDRESS prParamNetAddr = prParamNetAddrList->arAddress; - -//#ifdef CONFIG_IPV6 -#if 0 - prParamNetAddrList->u4AddressCount = u4NumIPv4 + u4NumIPv6; -#else - prParamNetAddrList->u4AddressCount = u4NumIPv4; -#endif - prParamNetAddrList->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP; - for (i = 0; i < u4NumIPv4; i++) { - prParamNetAddr->u2AddressLength = sizeof(PARAM_NETWORK_ADDRESS_IP);//4;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; -#if 0 - kalMemCopy(prParamNetAddr->aucAddress, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip); -#else - prParamIpAddr = (P_PARAM_NETWORK_ADDRESS_IP)prParamNetAddr->aucAddress; - kalMemCopy(&prParamIpAddr->in_addr, ip, sizeof(ip)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(PARAM_NETWORK_ADDRESS)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(PARAM_NETWORK_ADDRESS); -#endif - } -//#ifdef CONFIG_IPV6 -#if 0 - for (i = 0; i < u4NumIPv6; i++) { - prParamNetAddr->u2AddressLength = 6;; - prParamNetAddr->u2AddressType = PARAM_PROTOCOL_ID_TCP_IP;; - kalMemCopy(prParamNetAddr->aucAddress, ip6, sizeof(ip6)); - prParamNetAddr = (P_PARAM_NETWORK_ADDRESS)((UINT_32)prParamNetAddr + sizeof(ip6)); - u4Len += OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress) + sizeof(ip6); - } -#endif - ASSERT(u4Len <= sizeof(aucBuf)); - - DBGLOG(REQ, INFO, ("kalIoctl (0x%x, 0x%x)\n", prGlueInfo, prParamNetAddrList)); - - rStatus = kalIoctl(prGlueInfo, - wlanoidSetNetworkAddress, - (PVOID)prParamNetAddrList, - u4Len, - FALSE, - FALSE, - TRUE, - FALSE, - &u4SetInfoLen); - - if (rStatus != WLAN_STATUS_SUCCESS) { - DBGLOG(REQ, INFO, ("set HW pattern filter fail 0x%lx\n", rStatus)); - } - } - - return NOTIFY_DONE; - -} - -static struct notifier_block inetaddr_notifier = { - .notifier_call = netdev_event, -}; - -void wlanRegisterNotifier(void) -{ - register_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanRegisterNotifier); - -void wlanUnregisterNotifier(void) -{ - unregister_inetaddr_notifier(&inetaddr_notifier); -} - -//EXPORT_SYMBOL(wlanUnregisterNotifier); - -#ifndef CONFIG_X86 -#if defined(CONFIG_HAS_EARLYSUSPEND) - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will register platform driver to os -* -* \param[in] wlanSuspend Function pointer to platform suspend function -* \param[in] wlanResume Function pointer to platform resume function -* -* \return The result of registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glRegisterEarlySuspend( - struct early_suspend *prDesc, - early_suspend_callback wlanSuspend, - late_resume_callback wlanResume) -{ - int ret = 0; - - if(NULL != wlanSuspend) - prDesc->suspend = wlanSuspend; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanSuspend ERROR.\n")); - ret = -1; - } - - if(NULL != wlanResume) - prDesc->resume = wlanResume; - else{ - DBGLOG(REQ, INFO, ("glRegisterEarlySuspend wlanResume ERROR.\n")); - ret = -1; - } - - register_early_suspend(prDesc); - return ret; -} - -//EXPORT_SYMBOL(glRegisterEarlySuspend); - -/*----------------------------------------------------------------------------*/ -/*! -* \brief This function will un-register platform driver to os -* -* \return The result of un-registering earlysuspend -*/ -/*----------------------------------------------------------------------------*/ - -int glUnregisterEarlySuspend(struct early_suspend *prDesc) -{ - int ret = 0; - - unregister_early_suspend(prDesc); - - prDesc->suspend = NULL; - prDesc->resume = NULL; - - return ret; -} - -//EXPORT_SYMBOL(glUnregisterEarlySuspend); -#endif -#endif // !CONFIG_X86 - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for reading data from files on NVRAM-FS -* -* \param[in] -* filename -* len -* offset -* \param[out] -* buf -* \return -* actual length of data being read -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_read( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_RDONLY, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to open!!\n")); - return -1; - } - - do { - if ((fd->f_op == NULL) || (fd->f_op->read == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : file can not be read!!\n")); - break; - } - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_read] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->read(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAM - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief Utility function for writing data to files on NVRAM-FS -* -* \param[in] -* filename -* buf -* len -* offset -* \return -* actual length of data being written -*/ -/*----------------------------------------------------------------------------*/ -static int -nvram_write ( - char *filename, - char *buf, - ssize_t len, - int offset) -{ -#if CFG_SUPPORT_NVRAM - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_WRONLY|O_CREAT, 0644); - - if(IS_ERR(fd)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to open!!\n")); - return -1; - } - - do{ - if ((fd->f_op == NULL) || (fd->f_op->write == NULL)) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : file can not be write!!\n")); - break; - } /* End of if */ - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - DBGLOG(INIT, INFO, ("[MT6620][nvram_write] : failed to seek!!\n")); - break; - } - } - else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->write(fd, - buf, - len, - &fd->f_pos); - - } while(FALSE); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; - -#else // !CFG_SUPPORT_NVRAMS - - return -EIO; - -#endif -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for reading data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* \param[out] -* pu2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataRead16( - IN P_GLUE_INFO_T prGlueInfo, - IN UINT_32 u4Offset, - OUT PUINT_16 pu2Data - ) -{ - if(pu2Data == NULL) { - return FALSE; - } - - if(nvram_read(WIFI_NVRAM_FILE_NAME, - (char *)pu2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - -/*----------------------------------------------------------------------------*/ -/*! -* \brief API for writing data on NVRAM -* -* \param[in] -* prGlueInfo -* u4Offset -* u2Data -* \return -* TRUE -* FALSE -*/ -/*----------------------------------------------------------------------------*/ -BOOLEAN -kalCfgDataWrite16( - IN P_GLUE_INFO_T prGlueInfo, - UINT_32 u4Offset, - UINT_16 u2Data - ) -{ - if(nvram_write(WIFI_NVRAM_FILE_NAME, - (char *)&u2Data, - sizeof(unsigned short), - u4Offset) != sizeof(unsigned short)) { - return FALSE; - } - else { - return TRUE; - } -} - - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/version.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/version.h deleted file mode 100755 index b7b053210d33..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/version.h +++ /dev/null @@ -1,240 +0,0 @@ -/* -** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/os/version.h#1 $ -*/ - -/*! \file "version.h" - \brief Driver's version definition - -*/ - -/******************************************************************************* -* Copyright (c) 2007 MediaTek Inc. -* -* All rights reserved. Copying, compilation, modification, distribution -* or any other use whatsoever of this material is strictly prohibited -* except in accordance with a Software License Agreement with -* MediaTek Inc. -******************************************************************************** -*/ - -/******************************************************************************* -* LEGAL DISCLAIMER -* -* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND -* AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK -* SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE -* PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY -* DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE -* ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY -* WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK -* SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY -* WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE -* FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO -* CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. -* -* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE -* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL -* BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT -* ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY -* BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -* -* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE -* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT -* OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING -* THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN -* FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE -* (ICC). -******************************************************************************** -*/ - -/* -** $Log: version.h $ - * - * 11 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.1.1. - * - * 08 26 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.9.. - * - * 08 23 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.8. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * correct typo. - * - * 08 15 2011 cp.wu - * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree - * for building MT6628 Win32 driver environment - * - * 08 03 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.7. - * - * 07 24 2011 puff.wen - * NULL - * [MT5931][Beta 5]Change the version number to v0.2.2.0 - * - * 06 01 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.6.. - * - * 05 09 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.5.. - * - * 04 19 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.4. - * - * 04 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.3. - * - * 03 25 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.2. - * - * 03 21 2011 chinglan.wang - * NULL - * Change the version number to 2.0.0.1. - * - * 03 18 2011 chinglan.wang - * NULL - * Change the version number to v2.0.0.0. - * - * 02 11 2011 chinglan.wang - * NULL - * Change to the version 1.2.0.2. - * - * 02 10 2011 chinglan.wang - * NULL - * Change the version to 1.2.0.1. - * - * 02 08 2011 cp.wu - * [WCXRP00000427] [MT6620 Wi-Fi][Driver] Modify veresion information to match with release revision number - * change version number to v1.2.0.0 for preparing v1.2 software package release. - * - * 12 10 2010 kevin.huang - * [WCXRP00000128] [MT6620 Wi-Fi][Driver] Add proc support to Android Driver for debug and driver status check - * Add Linux Proc Support - * - * 10 07 2010 cp.wu - * [WCXRP00000083] [MT5931][Driver][FW] Add necessary logic for MT5931 first connection - * [WINDDK] build system changes for MT5931 - * - * 07 08 2010 cp.wu - * - * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. - * - * 06 06 2010 kevin.huang - * [WPD00003832][MT6620 5931] Create driver base - * [MT6620 5931] Create driver base -** \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-12-14 14:10:55 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-11-17 22:41:00 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-11-13 16:20:33 GMT mtk01084 -** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:27:13 GMT mtk01426 -** Init for develop -** -*/ - -#ifndef _VERSION_H -#define _VERSION_H -/******************************************************************************* -* C O M P I L E R F L A G S -******************************************************************************** -*/ - -/******************************************************************************* -* E X T E R N A L R E F E R E N C E S -******************************************************************************** -*/ - -/******************************************************************************* -* C O N S T A N T S -******************************************************************************** -*/ - -#ifndef NIC_AUTHOR -#define NIC_AUTHOR "NIC_AUTHOR" -#endif -#ifndef NIC_DESC -#define NIC_DESC "NIC_DESC" -#endif - -#ifndef NIC_NAME - #if defined(MT6620) - #define NIC_NAME "MT6620" - #define NIC_DEVICE_ID "MT6620" - #define NIC_DEVICE_ID_LOW "mt6620" - #elif defined(MT5931) - #define NIC_NAME "MT5931" - #define NIC_DEVICE_ID "MT5931" - #define NIC_DEVICE_ID_LOW "mt5931" - #elif defined(MT6628) - #define NIC_NAME "MT6628" - #define NIC_DEVICE_ID "MT6628" - #define NIC_DEVICE_ID_LOW "mt6628" - #endif -#endif - -/* NIC driver information */ -#define NIC_VENDOR "MediaTek Inc." -#define NIC_VENDOR_OUI {0x00, 0x0C, 0xE7} - -#if defined(MT6620) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6620 Wireless LAN Adapter Driver" -#elif defined(MT5931) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT5931 Wireless LAN Adapter Driver" -#elif defined(MT6628) - #define NIC_PRODUCT_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter" - #define NIC_DRIVER_NAME "MediaTek Inc. MT6628 Wireless LAN Adapter Driver" -#endif - -/* Define our driver version */ -#define NIC_DRIVER_MAJOR_VERSION 2 -#define NIC_DRIVER_MINOR_VERSION 0 -#define NIC_DRIVER_VERSION 2,0,1,1 -#define NIC_DRIVER_VERSION_STRING "2.0.1.1" - - -/******************************************************************************* -* D A T A T Y P E S -******************************************************************************** -*/ - -/******************************************************************************* -* P U B L I C D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* P R I V A T E D A T A -******************************************************************************** -*/ - -/******************************************************************************* -* M A C R O S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N D E C L A R A T I O N S -******************************************************************************** -*/ - -/******************************************************************************* -* F U N C T I O N S -******************************************************************************** -*/ - - -#endif /* _VERSION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/wifi_version.h b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/wifi_version.h deleted file mode 100755 index 992892cc284c..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/os/wifi_version.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Yongle Lai @ Rockchip - */ -#ifndef WIFI_VERSION_H -#define WIFI_VERSION_H - -/* - * Marvell MV8686 driver version. - */ -#define MT5931_DRV_VERSION "4.02" - -#endif /* WIFI_VERSION_H */ - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/rules.make b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/rules.make deleted file mode 100755 index 44b98711998f..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/rules.make +++ /dev/null @@ -1,104 +0,0 @@ -# -------------------------------------------------------------------- -# Copyright (c) 2007 MediaTek Inc. -# -# All rights reserved. Copying, compilation, modification, distribution -# or any other use whatsoever of this material is strictly prohibited -# except in accordance with a Software License Agreement with -# MediaTek Inc. -# -------------------------------------------------------------------- - -# -------------------------------------------------------------------- -# This file contains rules which are shared between multiple Makefiles. -# -------------------------------------------------------------------- - -# -# False targets. -# -.PHONY: dummy - -# -# Special variables which should not be exported -# -unexport O_TARGET -unexport obj-y -unexport subdir-y - -comma := , - - -# -# Get things started. -# -first_rule: sub_dirs - @$(MAKE) all_targets - -SUB_DIRS := $(subdir-y) - -# -# Common rules -# -%.o: %.c - @echo " [CC] $@" - @$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - -all_targets: $(O_TARGET) - -# -# Rule to compile a set of .o files into one .o file -# -ifdef O_TARGET -$(O_TARGET): $(obj-y) - @rm -f $@ - ifneq "$(strip $(obj-y))" "" - @$(LD) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(obj-y), $^) - else - @$(AR) rcs $@ - endif - @ ( \ - echo 'ifeq ($(strip $(subst $(comma),:,$(EXTRA_LDFLAGS) $(obj-y))),$$(strip $$(subst $$(comma),:,$$(EXTRA_LDFLAGS) $$(obj-y))))' ; \ - echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \ - echo 'endif' \ - ) > $(dir $@)/.$(notdir $@).flags -endif # O_TARGET - -# -# A rule to make subdirectories -# -subdir-list = $(sort $(patsubst %,_subdir_%,$(SUB_DIRS))) -sub_dirs: dummy $(subdir-list) - -ifdef SUB_DIRS -$(subdir-list) : dummy - @$(MAKE) -C $(patsubst _subdir_%,%,$@) -endif - - -# -# A rule to do nothing -# -dummy: - -# -# Find files whose flags have changed and force recompilation. -# For safety, this works in the converse direction: -# every file is forced, except those whose flags are positively up-to-date. -# -FILES_FLAGS_UP_TO_DATE := - -# For use in expunging commas from flags, which mung our checking. -comma = , - -FILES_FLAGS_EXIST := $(wildcard .*.flags) -ifneq ($(FILES_FLAGS_EXIST),) -include $(FILES_FLAGS_EXIST) -endif - -FILES_FLAGS_CHANGED := $(strip \ - $(filter-out $(FILES_FLAGS_UP_TO_DATE), \ - $(O_TARGET) \ - )) - -ifneq ($(FILES_FLAGS_CHANGED),) -$(FILES_FLAGS_CHANGED): dummy -endif - diff --git a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/wmt_chrdev_wifi.c b/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/wmt_chrdev_wifi.c deleted file mode 100755 index 08835cf3d343..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt5931_kk/drv_wlan/wmt_chrdev_wifi.c +++ /dev/null @@ -1,490 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include "wifi_version.h" - - - -MODULE_LICENSE("Dual BSD/GPL"); - -#define WIFI_DRIVER_NAME "mtk_wmt_WIFI_chrdev" -#if WMT_PLAT_APEX -#define WIFI_DEV_MAJOR 194 // never used number -#else -#define WIFI_DEV_MAJOR 153 // never used number -#endif -#define REMOVE_MK_NODE 1 -#define PFX "[MTK-WIFI] " -#define WIFI_LOG_DBG 3 -#define WIFI_LOG_INFO 2 -#define WIFI_LOG_WARN 1 -#define WIFI_LOG_ERR 0 - - -unsigned int gWIFIDbgLevel = WIFI_LOG_INFO; - -#define WIFI_DBG_FUNC(fmt, arg...) if(gWIFIDbgLevel >= WIFI_LOG_DBG){ printk(PFX "%s: " fmt, __FUNCTION__ ,##arg);} -#define WIFI_INFO_FUNC(fmt, arg...) if(gWIFIDbgLevel >= WIFI_LOG_INFO){ printk(PFX "%s: " fmt, __FUNCTION__ ,##arg);} -#define WIFI_WARN_FUNC(fmt, arg...) if(gWIFIDbgLevel >= WIFI_LOG_WARN){ printk(PFX "%s: " fmt, __FUNCTION__ ,##arg);} -#define WIFI_ERR_FUNC(fmt, arg...) if(gWIFIDbgLevel >= WIFI_LOG_ERR){ printk(PFX "%s: " fmt, __FUNCTION__ ,##arg);} -#define WIFI_TRC_FUNC(f) if(gWIFIDbgLevel >= WIFI_LOG_DBG){printk(PFX "<%s> <%d>\n", __FUNCTION__, __LINE__);} - -#define VERSION "1.0" -/*mtk80707 rollback aosp hal*/ -/* - * enable = 1, mode = 0 => init P2P network - * enable = 1, mode = 1 => init Soft AP network - * enable = 0 => uninit P2P/AP network -*/ -typedef struct _PARAM_CUSTOM_P2P_SET_STRUC_T { - unsigned int u4Enable; - unsigned int u4Mode; -} PARAM_CUSTOM_P2P_SET_STRUC_T, *P_PARAM_CUSTOM_P2P_SET_STRUC_T; -/*handler of set wlan p2p mode*/ -typedef int (*set_p2p_mode)(struct net_device * netdev, PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode); - -enum { - WLAN_MODE_HALT, - WLAN_MODE_AP, - WLAN_MODE_STA_P2P, - WLAN_MODE_MAX -}; -#define WLAN_IFACE_NAME "wlan0" -#define WLAN_LEG_IFACE_NAME "legacy_wlan0" -volatile int wlan_mode = WLAN_MODE_HALT; -volatile set_p2p_mode pf_set_p2p_mode; -volatile int power_state = 0; /*0 power off, 1 power on*/ -volatile int PowerOnIFname = 0;/*0 wlan0, 1 legacy_wlan0*/ -EXPORT_SYMBOL(power_state); -EXPORT_SYMBOL(wlan_mode); -EXPORT_SYMBOL(pf_set_p2p_mode); -EXPORT_SYMBOL(PowerOnIFname); - - -void register_set_p2p_mode_handler(set_p2p_mode handler) { - WIFI_INFO_FUNC("(pid %d) register set p2p mode handler %p\n", current->pid, handler); - pf_set_p2p_mode = handler; -} - - - -/*endof mtk80707*/ - -static int WIFI_devs = 1; /* device count */ -static int WIFI_major = WIFI_DEV_MAJOR; /* dynamic allocation */ -module_param(WIFI_major, uint, 0); -static struct cdev WIFI_cdev; -volatile int retflag_wifi = 0; -static struct semaphore wr_mtx; -static int flagIsIFchanged =0; - - -#include -//#include -static int _mt5931_powered_on = 0; -static int _mt5931_32k_on = 0; -#define MT5931_OFF_TIME 10 -#define MT5931_PMU_EN_TIME 3 -#define MT5931_RST_TIME 12 -#define GPIO_MT5931_PMU_EN 43 -#define GPIO_MT5931_RST 133 - -//static signed int gpio_bt_dis = -1; - -extern int omap_mmc_update_mtk_card_status(int state); - -extern int rk29sdk_wifi_power(int on); -extern int rk29sdk_wifi_set_carddetect(int val); - -static int mt5931_power_on(void) -{ - - int ret = 0; - if(_mt5931_powered_on == 0) - { - _mt5931_powered_on = 1; - printk(KERN_INFO "[mt5931_power_on] config EINT_PIN\n"); - rk29sdk_wifi_power(1); - msleep(MT5931_RST_TIME); - }else{ - printk("mt5931 unmatched power on\n"); - } - return 0; -} -int mt5931_power_off(void) -{ - printk(KERN_INFO "[mt5931_power_off] ++\n"); - if(_mt5931_powered_on == 1) { - _mt5931_powered_on = 0; - rk29sdk_wifi_power(0); - msleep(MT5931_RST_TIME); - }else{ - printk("mt5931 unmatched power off\n"); - } - - printk(KERN_INFO "[mt5931_power_off] --\n"); - return 0; -} - -bool mtk_wcn_wifi_func_on() -{ - printk("=======================================================\n"); - printk("==== Launching Wi-Fi driver! (Powered by Rockchip) ====\n"); - printk("=======================================================\n"); - printk("MT5931 SDIO WiFi driver (Powered by Rockchip,Ver %s) init.\n", MT5931_DRV_VERSION); - -mt5931_power_on(); -rk29sdk_wifi_set_carddetect(1); -return true; -} -bool mtk_wcn_wifi_func_off() -{ -rk29sdk_wifi_set_carddetect(0); -/* remove to wlan_remove to safely close the wifi , avoid sdio access error*/ -//mt5931_power_off(); -return true; -} - - - -static int WIFI_open(struct inode *inode, struct file *file) -{ - WIFI_INFO_FUNC("%s: major %d minor %d (pid %d)\n", __func__, - imajor(inode), - iminor(inode), - current->pid - ); - - return 0; -} - -static int WIFI_close(struct inode *inode, struct file *file) -{ - WIFI_INFO_FUNC("%s: major %d minor %d (pid %d)\n", __func__, - imajor(inode), - iminor(inode), - current->pid - ); - retflag_wifi = 0; - - return 0; -} - -ssize_t WIFI_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos) -{ - int retval = -EIO; - char local[12] = {0}; - static int opened = 0; - int ret = -1; - struct net_device *netdev = NULL; - PARAM_CUSTOM_P2P_SET_STRUC_T p2pmode; - int wait_cnt = 0; - printk("WIFI_write: count: %d\n", count); - down(&wr_mtx); - if (count <= 0) { - WIFI_INFO_FUNC("WIFI_write invalid param \n"); - goto done; - } - if (0 == copy_from_user(local, buf, (count > sizeof(local)) ? sizeof(local) : count)) { - /*mtk80707 rollback aosp hal*/ - local[11] = 0; - WIFI_INFO_FUNC("WIFI_write %s\n", local); - - if (local[0] == '0' && opened == 1) { - //TODO - //Configure the EINT pin to GPIO mode. - p2pmode.u4Enable = 0; - p2pmode.u4Mode = 0; - - /*IF power off already*/ - if (power_state == 0) { - WIFI_INFO_FUNC("WMT turn off WIFI OK!\n"); - opened = 0; - retval = count; - wlan_mode = WLAN_MODE_HALT; - goto done; - } - if (flagIsIFchanged==1) - { - netdev = dev_get_by_name(&init_net, WLAN_LEG_IFACE_NAME);} - else - {netdev = dev_get_by_name(&init_net, WLAN_IFACE_NAME);} - while (netdev == NULL && wait_cnt < 10) { - WIFI_WARN_FUNC("WMT fail to get wlan0 net device, sleep 300ms\n"); - msleep(300); - wait_cnt ++; - if (flagIsIFchanged==1) - { netdev = dev_get_by_name(&init_net, WLAN_LEG_IFACE_NAME);} - else - { netdev = dev_get_by_name(&init_net, WLAN_IFACE_NAME);} - } - if (wait_cnt >= 10) { - WIFI_WARN_FUNC("WMT get wlan0 net device time out\n"); - goto done; - } - if (pf_set_p2p_mode) { - ret = pf_set_p2p_mode(netdev, p2pmode); - if (ret != 0) { - WIFI_WARN_FUNC("WMT trun off p2p & ap mode ret = %d", ret); - goto done; - } - //msleep(300); - } - dev_put(netdev); - netdev = NULL; - - if (false == mtk_wcn_wifi_func_off()) { - WIFI_INFO_FUNC("WMT turn off WIFI fail!\n"); - } - else { - msleep(500); //wait for sdio core remove the wifi card, may need use completition to sync the status - WIFI_INFO_FUNC("WMT turn off WIFI OK!\n"); - opened = 0; - retval = count; - wlan_mode = WLAN_MODE_HALT; - power_state = 0; - flagIsIFchanged=0; - PowerOnIFname = 0; - } - } - else if (local[0] == '1') { - //TODO - //Disable EINT(external interrupt), and set the GPIO to EINT mode. - if (power_state == 1){ - WIFI_INFO_FUNC("WIFI is already on!\n"); - retval = count; - } - else { - pf_set_p2p_mode = NULL; - if (false == mtk_wcn_wifi_func_on()) { - WIFI_WARN_FUNC("WMT turn on WIFI fail!\n"); - } - else { - opened = 1; - retval = count; - WIFI_INFO_FUNC("WMT turn on WIFI success!\n"); - wlan_mode = WLAN_MODE_HALT; - power_state = 1; - //msleep(300); - } - } - } - else if (local[0] == 'S' || local[0] == 'P' || local[0] == 'A') { - p2pmode.u4Enable = 1; - p2pmode.u4Mode = 0; - ret = -1; - - if (power_state ==0) { - WIFI_INFO_FUNC("Turn on WIFI first if WIFI is off\n"); - if(local[0] == 'A') - { - PowerOnIFname = 1; //legacy_wlan0 - printk("change PoweronIFname\n"); - } - pf_set_p2p_mode = NULL; - if (false == mtk_wcn_wifi_func_on()) { - WIFI_WARN_FUNC("WMT turn on WIFI fail!\n"); - } - else { - opened = 1; - retval = count; - WIFI_INFO_FUNC("WMT turn on WIFI success!\n"); - wlan_mode = WLAN_MODE_HALT; - power_state = 1; - if (local[0] == 'A'){ - flagIsIFchanged=1;} - } - - } - if (flagIsIFchanged==1) - {netdev = dev_get_by_name(&init_net, WLAN_LEG_IFACE_NAME); - } - else { - netdev = dev_get_by_name(&init_net, WLAN_IFACE_NAME); - if (local[0] == 'A'&&netdev!=NULL) - { - rtnl_lock(); - ret = dev_change_name(netdev,WLAN_LEG_IFACE_NAME); - rtnl_unlock(); - flagIsIFchanged=1; - printk("change_leagcy_name, ret = %d",ret); - } - } - while (netdev == NULL && wait_cnt < 10) { - WIFI_WARN_FUNC("WMT fail to get wlan0 net device, sleep 300ms\n"); - msleep(300); - wait_cnt ++; - if (flagIsIFchanged==1) - {netdev = dev_get_by_name(&init_net, WLAN_LEG_IFACE_NAME);} - else { - netdev = dev_get_by_name(&init_net, WLAN_IFACE_NAME); - if (local[0] == 'A'&&netdev!=NULL) - { - rtnl_lock(); - ret = dev_change_name(netdev,WLAN_LEG_IFACE_NAME); - rtnl_unlock(); - flagIsIFchanged=1; - printk("change_leagcy_name, ret = %d",ret); - } - } - } - if (wait_cnt >= 10) { - WIFI_WARN_FUNC("WMT get wlan0 net device time out\n"); - goto done; - } - if (pf_set_p2p_mode == NULL) { - WIFI_INFO_FUNC("set p2p handler is NULL\n"); - goto done; - } - if (wlan_mode == WLAN_MODE_AP&&(local[0] == 'S' || local[0] == 'P') ) - { - p2pmode.u4Enable = 0; - p2pmode.u4Mode = 0; - ret = pf_set_p2p_mode(netdev, p2pmode); - // msleep(300); - WIFI_INFO_FUNC("success to turn off p2p/AP mode\n"); - } - p2pmode.u4Enable = 1; - p2pmode.u4Mode = 0; - ret = -1; - if (local[0] == 'A') { - p2pmode.u4Mode = 1; - } - ret = pf_set_p2p_mode(netdev, p2pmode); - //msleep(300); - dev_put(netdev); - netdev = NULL; - WIFI_INFO_FUNC("WMT WIFI set p2p mode ret=%d\n", ret); - - if (ret == 0 && (local[0] == 'S' || local[0] == 'P')) { - WIFI_INFO_FUNC("wlan mode %d --> %d\n", wlan_mode, WLAN_MODE_STA_P2P); - wlan_mode = WLAN_MODE_STA_P2P; - retval = count; - } else if (ret == 0 && local[0] == 'A') { - WIFI_INFO_FUNC("wlan mode %d --> %d\n", wlan_mode, WLAN_MODE_AP); - wlan_mode = WLAN_MODE_AP; - retval = count; - } else { - WIFI_INFO_FUNC("fail to set wlan mode\n"); - } - } - } -done: - up(&wr_mtx); - if (netdev != NULL) { - dev_put(netdev); - } - printk("WIFI_write: retval: %d\n", retval); - if(retval!=count) - printk("WIFI_write error\n"); - return (retval); -} - - -struct file_operations WIFI_fops = { - .open = WIFI_open, - .release = WIFI_close, - .write = WIFI_write, -}; -#if REMOVE_MK_NODE - struct class * wmtWifi_class = NULL; -#endif - -static int __init WIFI_init(void) -{ - dev_t dev = MKDEV(WIFI_major, 0); - int alloc_ret = 0; - int cdev_err = 0; -#if REMOVE_MK_NODE - struct device * wmtWifi_dev = NULL; -#endif - - /*static allocate chrdev*/ - alloc_ret = register_chrdev_region(dev, 1, WIFI_DRIVER_NAME); - if (alloc_ret) { - WIFI_ERR_FUNC("fail to register chrdev\n"); - return alloc_ret; - } - - cdev_init(&WIFI_cdev, &WIFI_fops); - WIFI_cdev.owner = THIS_MODULE; - - cdev_err = cdev_add(&WIFI_cdev, dev, WIFI_devs); - if (cdev_err) { - goto error; - } -#if REMOVE_MK_NODE //mknod replace - - wmtWifi_class = class_create(THIS_MODULE,"wmtWifi"); - if(IS_ERR(wmtWifi_class)) - goto error; - wmtWifi_dev = device_create(wmtWifi_class,NULL,dev,NULL,"wmtWifi"); - if(IS_ERR(wmtWifi_dev)) - goto error; -#endif - - sema_init(&wr_mtx, 1); - - WIFI_INFO_FUNC("%s driver(major %d) installed.\n", WIFI_DRIVER_NAME, WIFI_major); - retflag_wifi = 0; - wlan_mode = WLAN_MODE_HALT; - pf_set_p2p_mode = NULL; - return 0; - -error: -#if REMOVE_MK_NODE - if(!IS_ERR(wmtWifi_dev)) - device_destroy(wmtWifi_class,dev); - if(!IS_ERR(wmtWifi_class)){ - class_destroy(wmtWifi_class); - wmtWifi_class = NULL; - } -#endif - if (cdev_err == 0) { - cdev_del(&WIFI_cdev); - } - - if (alloc_ret == 0) { - unregister_chrdev_region(dev, WIFI_devs); - } - - return -1; -} - -static void __exit WIFI_exit(void) -{ - dev_t dev = MKDEV(WIFI_major, 0); - retflag_wifi = 0; - -#if REMOVE_MK_NODE - device_destroy(wmtWifi_class,dev); - class_destroy(wmtWifi_class); - wmtWifi_class = NULL; -#endif - - cdev_del(&WIFI_cdev); - unregister_chrdev_region(dev, WIFI_devs); - - WIFI_INFO_FUNC("%s driver removed.\n", WIFI_DRIVER_NAME); -} -EXPORT_SYMBOL(register_set_p2p_mode_handler); -EXPORT_SYMBOL(mt5931_power_off); - -module_init(WIFI_init); -module_exit(WIFI_exit); - diff --git a/drivers/net/wireless/rockchip_wlan/mt7601/Kconfig b/drivers/net/wireless/rockchip_wlan/mt7601/Kconfig deleted file mode 100755 index 40f154af96a1..000000000000 --- a/drivers/net/wireless/rockchip_wlan/mt7601/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ -config MT7601 - tristate "Mediatek MT7601 USB WiFi Support" - select WIRELESS_EXT - select WEXT_PRIV - select IEEE80211 - select CFG80211 - select NL80211_TESTMODE - ---help--- - Help message of MT7601 - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/Makefile b/drivers/net/wireless/rockchip_wlan/rda5990/Makefile deleted file mode 100755 index 0b0494d04ae2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -#obj-y += rda_gpio_i2c/ # 模拟I2C开此功能 -#obj-y += drv_fm_rda/ - -obj-y += rda_wlan/ -obj-y += rda_5990_power_ctrl/ diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/Makefile b/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/Makefile deleted file mode 100755 index 4eaffa464f77..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright Statement: -# -# This software/firmware and related documentation ("MediaTek Software") are -# protected under relevant copyright laws. The information contained herein -# is confidential and proprietary to MediaTek Inc. and/or its licensors. -# Without the prior written permission of MediaTek inc. and/or its licensors, -# any reproduction, modification, use or disclosure of MediaTek Software, -# and information contained herein, in whole or in part, shall be strictly prohibited. -# -# MediaTek Inc. (C) 2010. All rights reserved. -# -# BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES -# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") -# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON -# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. -# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE -# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR -# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH -# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES -# THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES -# CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK -# SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR -# STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND -# CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, -# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, -# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO -# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -# -# The following software/firmware and/or related documentation ("MediaTek Software") -# have been modified by MediaTek Inc. All revisions are subject to any receiver's -# applicable license agreements with MediaTek Inc. - - -# Makefile generated by Mediatek -# rda fm support - -ifeq ($(MTK_FM_SUPPORT), yes) -ifeq ($(CUSTOM_KERNEL_FM), mt6620) - -#obj-$(CONFIG_MTK_COMBO_FM) += RDA5990_FM_drv.o -# for 模拟I2C -obj-$(CONFIG_MTK_COMBO_FM) += RDA5990_FM_drv_gpio.o - -endif -endif - - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/RDA5990_FM_drv.c b/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/RDA5990_FM_drv.c deleted file mode 100755 index cfd9f1b7846b..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/RDA5990_FM_drv.c +++ /dev/null @@ -1,2142 +0,0 @@ -#include -#include -#include -#include // udelay() -#include // device_create() -#include -#include -#include -#include -#include /* constant of kernel version */ -#include // get_user() - -#include -#include -#include -#include -#include -#include - -// if need debug, define FMDEBUG -//#define FMDEBUG - -// if your platform is MT6515/6575, define MTK_MT6515 -#define MTK_MT6515 - -// if your platform is MT6515/6575 and MTK FM is MT6626, define MT6626 -//#define MT6626 - -#define FM_ALERT(f, s...) \ - do { \ - printk(KERN_ALERT "RDAFM " f, ## s); \ - } while(0) - -#ifdef FMDEBUG -#define FM_DEBUG(f, s...) \ - do { \ - printk("RDAFM " f, ## s); \ - } while(0) -#else -#define FM_DEBUG(f, s...) -#endif - -#define RDA599X_SCANTBL_SIZE 16 //16*uinit16_t -#define RDA599X_FM_SCAN_UP 0x0 -#define RDA599X_FM_SCAN_DOWN 0x01 - -extern int rda_fm_power_off(); -extern int rda_fm_power_on(); - -/****************************************************************************** - * CONSTANT DEFINITIONS - *****************************************************************************/ -#define RDAFM_SLAVE_ADDR (0x11 << 1) //RDA FM Chip address - -#define RDAFM_MASK_RSSI 0X7F // RSSI -#define RDAFM_DEV "RDA599x" - -//customer need customize the I2C port -#define RDAFM_I2C_PORT 0 - - -#define ID_RDA5802E 0x5804 -#define ID_RDA5802H 0x5801 -#define ID_RDA5802N 0x5808 -#define ID_RDA5820 0x5805 -#define ID_RDA5820NS 0x5820 - - -static struct proc_dir_entry *g_fm_proc = NULL; -static struct fm *g_fm_struct = NULL; -static atomic_t scan_complete_flag; - -#define FM_PROC_FILE "fm" - -/****************************************************************************** - * STRUCTURE DEFINITIONS - *****************************************************************************/ - -enum RDAFM_CHIP_TYPE { - CHIP_TYPE_RDA5802E = 0, - CHIP_TYPE_RDA5802H, - CHIP_TYPE_RDA5802N, - CHIP_TYPE_RDA5820, - CHIP_TYPE_RDA5820NS, -}; - - -typedef struct -{ - uint8_t address; - uint16_t value; -}RDA_FM_REG_T; - -typedef struct -{ - bool byPowerUp; - struct fm_tune_parm parm -}FM_TUNE_T; -static FM_TUNE_T fm_tune_data = {false, {}}; - -typedef enum -{ - FM_RECEIVER, //5800,5802,5804 - FM_TRANSMITTER, //5820 -}RDA_RADIO_WORK_E; - -typedef enum -{ - OFF, - ON, -}RDA_FM_POWER_STATE_T; - -struct fm { - uint32_t ref; - bool powerup; - uint16_t chip_id; - uint16_t device_id; - dev_t dev_t; - uint16_t min_freq; // KHz - uint16_t max_freq; // KHz - uint8_t band; // TODO - struct class *cls; - struct device *dev; - struct cdev cdev; - struct i2c_client *i2c_client; -}; - - - - -/****************************************************************************** - * FUNCTION PROTOTYPES - *****************************************************************************/ - -static int RDAFM_clear_hmute(struct i2c_client *client); -static int RDAFM_enable_hmute(struct i2c_client *client); -static int RDAFM_clear_tune(struct i2c_client *client); -static int RDAFM_enable_tune(struct i2c_client *client); -static int RDAFM_clear_seek(struct i2c_client *client); -static int RDAFM_enable_seek(struct i2c_client *client); -static int RDAFM_SetStereo(struct i2c_client *client,uint8_t b); -static int RDAFM_SetRSSI_Threshold(struct i2c_client *client,uint8_t RssiThreshold); -static int RDAFM_SetDe_Emphasis(struct i2c_client *client,uint8_t index); -static bool RDAFM_Scan(struct i2c_client *client, - uint16_t min_freq, uint16_t max_freq, - uint16_t *pFreq, //get the valid freq after scan - uint16_t *pScanTBL, - uint16_t *ScanTBLsize, - uint16_t scandir, - uint16_t space); - - -static int RDAFM_read(struct i2c_client *client, uint8_t addr, uint16_t *val); -static int RDAFM_write(struct i2c_client *client, uint8_t addr, uint16_t val); -static void RDAFM_em_test(struct i2c_client *client, uint16_t group_idx, uint16_t item_idx, uint32_t item_value); -static int fm_setup_cdev(struct fm *fm); -static int fm_ops_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); -static loff_t fm_ops_lseek(struct file *filp, loff_t off, int whence); -static int fm_ops_open(struct inode *inode, struct file *filp); -static int fm_ops_release(struct inode *inode, struct file *filp); - -static int fm_init(struct i2c_client *client); -static int fm_destroy(struct fm *fm); -static int fm_powerup(struct fm *fm, struct fm_tune_parm *parm); -static int fm_powerdown(struct fm *fm); - -static int fm_tune(struct fm *fm, struct fm_tune_parm *parm); -static int fm_seek(struct fm *fm, struct fm_seek_parm *parm); -static int fm_scan(struct fm *fm, struct fm_scan_parm *parm); -static int fm_setvol(struct fm *fm, uint32_t vol); -static int fm_getvol(struct fm *fm, uint32_t *vol); -static int fm_getrssi(struct fm *fm, uint32_t *rssi); -static int fm_proc_read(char *page, char **start, off_t off, int count, int *eof, void *data); - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) -static int fm_i2c_attach_adapter(struct i2c_adapter *adapter); -static int fm_i2c_detect(struct i2c_adapter *adapter, int addr, int kind); -static int fm_i2c_detach_client(struct i2c_client *client); -#else -static int fm_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id); -static int fm_i2c_detect(struct i2c_client *client, int kind, struct i2c_board_info *info); -static int fm_i2c_remove(struct i2c_client *client); -#endif - -/****************************************************************************** - * GLOBAL DATA - *****************************************************************************/ -/* Addresses to scan */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) -static unsigned short normal_i2c[] = {RDAFM_SLAVE_ADDR, I2C_CLIENT_END}; -static unsigned short ignore = I2C_CLIENT_END; - -static struct i2c_client_address_data RDAFM_addr_data = { - .normal_i2c = normal_i2c, - .probe = &ignore, - .ignore = &ignore, -}; -#else -static const struct i2c_device_id fm_i2c_id = {RDAFM_DEV, 0}; -static unsigned short force[] = {RDAFM_I2C_PORT, RDAFM_SLAVE_ADDR, I2C_CLIENT_END, I2C_CLIENT_END}; -static const unsigned short * const forces[] = {force, NULL}; -//static struct i2c_client_address_data addr_data = {.forces = forces}; -static struct i2c_board_info __initdata i2c_rdafm={ I2C_BOARD_INFO(RDAFM_DEV, (RDAFM_SLAVE_ADDR>>1))}; -#endif - - static struct i2c_driver RDAFM_driver = { -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) - .driver = { - .owner = THIS_MODULE, - .name = RDAFM_DEV, - }, - .attach_adapter = fm_i2c_attach_adapter, - .detach_client = fm_i2c_detach_client, -#else - .probe = fm_i2c_probe, - .remove = fm_i2c_remove, - .detect = fm_i2c_detect, - .driver.name = RDAFM_DEV, - .id_table = &fm_i2c_id, - // .address_data = &addr_data, - .address_list = (const unsigned short*) forces, -#endif - }; - -static uint16_t RDAFM_CHIP_ID = 0x5808; -static RDA_RADIO_WORK_E RDA_RADIO_WorkType = FM_RECEIVER; - - - -#if 1 -static uint16_t RDA5802N_initialization_reg[]={ - 0xC005, //02h - 0x0000, - 0x0400, - 0xC6ED, //0x86AD, //05h - 0x6000, - 0x721A, //0x42C6 - 0x0000, - 0x0000, - 0x0000, //0x0ah - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, //0x10h - 0x0019, - 0x2A11, - 0xB042, - 0x2A11, - 0xB831, //0x15h - 0xC000, - 0x2A91, - 0x9400, - 0x00A8, - 0xc400, //0x1ah - 0xF7CF, //Ìá¸ßÔ¶¶ËÔëÉùÒÖÖÆ - 0x2414, //0x2ADC, //0x1ch ÌáÉýVIO VDDÖ®¼äѹ²îÒýÆðµÄ²»Á¼ - 0x806F, - 0x4608, - 0x0086, - 0x0661, //0x20H - 0x0000, - 0x109E, - 0x23C8, - 0x0406, - 0x0E1C, //0x25H -}; -#else -static uint16_t RDA5802N_initialization_reg[]={ - 0xc401, //02h - 0x0000, - 0x0400, - 0x86ad, //05h// - 0x0000, - 0x42c6, - 0x0000, - 0x0000, - 0x0000, //0x0ah - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, //0x10h - 0x0019, - 0x2a11, - 0xa053,//0x80,0x53, - 0x3e11,//0x22,0x11, - 0xfc7d, //0x15h - 0xc000, - 0x2a91, - 0x9400, - 0x00a8, - 0xc400, //0x1ah - 0xe000, - 0x2b1d, //0x23,0x14 - 0x816a, - 0x4608, - 0x0086, - 0x0661, //0x20h - 0x0000, - 0x109e, - 0x2244, - 0x0408, //0x24 - 0x0408, //0x25 -}; -#endif - -static RDA_FM_REG_T RDA5820NS_TX_initialization_reg[]={ - {0x02, 0xE003}, - {0xFF, 100}, // if address is 0xFF, sleep value ms - {0x02, 0xE001}, - {0x19, 0x88A8}, - {0x1A, 0x4290}, - {0x68, 0x0AF0}, - {0x40, 0x0001}, - {0x41, 0x41FF}, - {0xFF, 500}, - {0x03, 0x1B90}, -}; - -static RDA_FM_REG_T RDA5820NS_RX_initialization_reg[]={ - {0x02, 0x0002}, //Soft reset - {0xFF, 100}, // wait - {0x02, 0xC001}, //Power Up - {0x05, 0x888F}, //LNAP 0x884F --LNAN - {0x06, 0x6000}, - {0x13, 0x80E1}, - {0x14, 0x2A11}, - {0x1C, 0x22DE}, - {0x21, 0x0020}, - {0x03, 0x1B90}, -}; - - - -static struct file_operations fm_ops = { - .owner = THIS_MODULE, - .unlocked_ioctl = fm_ops_ioctl, - .llseek = fm_ops_lseek, - .open = fm_ops_open, - .release = fm_ops_release, -}; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) -static DECLARE_MUTEX(fm_ops_mutex); -#else -DEFINE_SEMAPHORE(fm_ops_mutex); -#endif - -/****************************************************************************** - *****************************************************************************/ - -/****************************************************************************** - *****************************************************************************/ - - - -static int RDAFM_GetChipID(struct i2c_client *client, uint16_t *pChipID) -{ - int err; - int ret = -1; - uint16_t val = 0x0002; - - //Reset RDA FM - err = RDAFM_write(client, 0x02, val); - if(err < 0){ -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: reset FM chip failed!\n"); -#endif - ret = -1; - return ret; - } - msleep(80); - - val = 0; - err = RDAFM_read(client, 0x0C, &val); - if (err == 0) - { - if ((0x5802 == val) || (0x5803 == val)) - { - err = RDAFM_read(client, 0x0E, &val); - - if (err == 0) - *pChipID = val; - else - *pChipID = 0x5802; - -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: Chip ID = %04X\n", val); -#endif - - ret = 0; - - } - else if ((0x5805 == val) || (0x5820 == val)) - { - *pChipID = val; - ret = 0; - } - else - { -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: get chip ID failed! get value = %04X\n", val); -#endif - ret = -1; - } - - } - else - { -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: get chip ID failed!\n"); -#endif - ret = -1; - } - - return ret; -} - - -/* - * RDAFM_read - */ -static int RDAFM_read(struct i2c_client *client, uint8_t addr, uint16_t *val) -{ - int n; - char b[2] = {0}; - - // first, send addr to RDAFM - n = i2c_master_send(client, (char*)&addr, 1); - if (n < 0) - { - FM_ALERT("RDAFM_read send:0x%X err:%d\n", addr, n); - return -1; - } - - // second, receive two byte from RDAFM - n = i2c_master_recv(client, b, 2); - if (n < 0) - { - FM_ALERT("RDAFM_read recv:0x%X err:%d\n", addr, n); - return -1; - } - - *val = (uint16_t)(b[0] << 8 | b[1]); - - return 0; -} - -/* - * RDAFM_write - */ -static int RDAFM_write(struct i2c_client *client, uint8_t addr, uint16_t val) -{ - int n; - char b[3]; - - b[0] = addr; - b[1] = (char)(val >> 8); - b[2] = (char)(val & 0xFF); - - n = i2c_master_send(client, b, 3); - if (n < 0) - { - FM_ALERT("RDAFM_write send:0x%X err:%d\n", addr, n); - return -1; - } - - return 0; -} - - -static int RDAFM_clear_hmute(struct i2c_client *client) -{ - int ret = 0; - uint16_t tRegValue = 0; - - FM_DEBUG("RDAFM_clear_hmute\n"); - - ret = RDAFM_read(client, 0x02, &tRegValue); - if (ret < 0) - { - FM_ALERT("RDAFM_clear_hmute read register failed!\n"); - return -1; - } - - tRegValue |= (1 << 14); - - ret = RDAFM_write(client, 0x02, tRegValue); - - if (ret < 0) - { - FM_ALERT("RDAFM_clear_hmute write register failed!\n"); - return -1; - } - - if(fm_tune_data.byPowerUp){ - if (fm_tune(g_fm_struct, &(fm_tune_data.parm)) < 0) - { - fm_tune_data.byPowerUp = false; - memset(&fm_tune_data.parm, 0, sizeof(fm_tune_data.parm)); - return -EPERM; - } - fm_tune_data.byPowerUp = false; - memset(&fm_tune_data.parm, 0, sizeof(fm_tune_data.parm)); - } - - return 0; -} - - - -static int RDAFM_enable_hmute(struct i2c_client *client) -{ - int ret = 0; - uint16_t tRegValue = 0; - - FM_DEBUG("RDAFM_enable_hmute\n"); - - ret = RDAFM_read(client, 0x02, &tRegValue); - if (ret < 0) - { - FM_ALERT("RDAFM_enable_hmute read register failed!\n"); - return -1; - } - - tRegValue &= (~(1 << 14)); - - ret = RDAFM_write(client, 0x02, tRegValue); - - if (ret < 0) - { - FM_ALERT("RDAFM_enable_hmute write register failed!\n"); - return -1; - } - - return 0; -} - - - -static int RDAFM_clear_tune(struct i2c_client *client) -{ - //Don't need it - return 0; -} - - - -static int RDAFM_enable_tune(struct i2c_client *client) -{ - //Don't need it - return 0; -} - - - -static int RDAFM_clear_seek(struct i2c_client *client) -{ - //Don't need it - return 0; -} - - - -static int RDAFM_enable_seek(struct i2c_client *client) -{ - //Don't need it - return 0; -} - - -//b=true set stereo else set mono -static int RDAFM_SetStereo(struct i2c_client *client, uint8_t b) -{ - int ret = 0; - uint16_t tRegValue = 0; - - FM_DEBUG("RDAFM_SetStereo\n"); - - ret = RDAFM_read(client, 0x02, &tRegValue); - if (ret < 0) - { - FM_ALERT("RDAFM_SetStereo read register failed!\n"); - return -1; - } - if (b) - tRegValue &= (~(1 << 13));//set stereo - else - tRegValue |= (1 << 13); //set mono - - ret = RDAFM_write(client, 0x02, tRegValue); - - if (ret < 0) - { - FM_ALERT("RDAFM_SetStereo write register failed!\n"); - return -1; - } - - - return 0; - -} - - -static int RDAFM_SetRSSI_Threshold(struct i2c_client *client, uint8_t RssiThreshold) -{ - int ret = 0; - uint16_t tRegValue = 0; - - FM_DEBUG("RDAFM_SetRSSI_Threshold\n"); - - ret = RDAFM_read(client, 0x05, &tRegValue); - if (ret < 0) - { - FM_ALERT("RDAFM_SetRSSI_Threshold read register failed!\n"); - return -1; - } - - tRegValue &= 0x80FF;//clear valume - tRegValue |= ((RssiThreshold & 0x7f) << 8); //set valume - - ret = RDAFM_write(client, 0x05, tRegValue); - - if (ret < 0) - { - FM_ALERT("RDAFM_SetRSSI_Threshold write register failed!\n"); - return -1; - } - - - return 0; - -} - - - -static int RDAFM_SetDe_Emphasis(struct i2c_client *client, uint8_t index) -{ - int ret = 0; - uint16_t tRegValue = 0; - - FM_DEBUG("RDAFM_SetRSSI_Threshold\n"); - - ret = RDAFM_read(client, 0x04, &tRegValue); - if (ret < 0) - { - FM_ALERT("RDAFM_SetRSSI_Threshold read register failed!\n"); - return -1; - } - - if (0 == index) - { - tRegValue &= (~(1 << 11));//De_Emphasis=75us - } - else if (1 == index) - { - tRegValue |= (1 << 11);//De_Emphasis=50us - } - - - ret = RDAFM_write(client, 0x04, tRegValue); - - if (ret < 0) - { - FM_ALERT("RDAFM_SetRSSI_Threshold write register failed!\n"); - return -1; - } - - - return 0; - - -} - - -static void RDAFM_em_test(struct i2c_client *client, uint16_t group_idx, uint16_t item_idx, uint32_t item_value) -{ - FM_ALERT("RDAFM_em_test %d:%d:%d\n", group_idx, item_idx, item_value); - switch (group_idx) - { - case mono: - if(item_value == 1) - { - RDAFM_SetStereo(client, 0); //force mono - } - else - { - RDAFM_SetStereo(client, 1); //stereo - - } - - break; - case stereo: - if(item_value == 0) - { - RDAFM_SetStereo(client, 1); //stereo - } - else - { - RDAFM_SetStereo(client, 0); //force mono - } - break; - case RSSI_threshold: - item_value &= 0x7F; - RDAFM_SetRSSI_Threshold(client, item_value); - break; - case Softmute_Enable: - if (item_idx) - { - RDAFM_enable_hmute(client); - } - else - { - RDAFM_clear_hmute(client); - } - break; - case De_emphasis: - if(item_idx >= 2) //0us - { - FM_ALERT("RDAFM not support De_emphasis 0\n"); - } - else - { - RDAFM_SetDe_Emphasis(client,item_idx);//0=75us,1=50us - } - break; - - case HL_Side: - - break; - default: - FM_ALERT("RDAFM not support this setting\n"); - break; - } -} - -static bool RDAFM_Scan(struct i2c_client *client, - uint16_t min_freq, uint16_t max_freq, - uint16_t *pFreq, - uint16_t *pScanTBL, - uint16_t *ScanTBLsize, - uint16_t scandir, - uint16_t space) -{ - uint16_t tFreq, tRegValue = 0; - uint16_t tmp_scanTBLsize = *ScanTBLsize; - int ret = -1; - bool isTrueStation = false; - uint16_t oldValue = 0; - int channel = 0; - - if((!pScanTBL) || (tmp_scanTBLsize == 0)) { - return false; - } - - //clear the old value of pScanTBL - memset(pScanTBL, 0, sizeof(uint16_t)*RDA599X_SCANTBL_SIZE); - - if(tmp_scanTBLsize > RDA599X_SCANTBL_SIZE) - { - tmp_scanTBLsize = RDA599X_SCANTBL_SIZE; - } - - //scan up - if(scandir == RDA599X_FM_SCAN_UP){ // now, only support scan up - tFreq = min_freq; - }else{ //scan down - tFreq = max_freq;//max_freq compare need or not - } - - //mute FM - RDAFM_enable_hmute(client); - - //set seekth - tRegValue = 0; - RDAFM_read(client, 0x05, &tRegValue); - tRegValue &= (~(0x7f<<8)); - tRegValue |= ((0x8 & 0x7f) << 8); - RDAFM_write(client, 0x05, tRegValue); - msleep(50); - - atomic_set(&scan_complete_flag, 1); - do { - if(atomic_read(&scan_complete_flag) == 0) - break; - isTrueStation = false; - - //set channel and enable TUNE - tRegValue = 0; - RDAFM_read(client, 0x03, &tRegValue); - tRegValue &= (~(0x03ff<<6)); //clear bit[15:6] - channel = tFreq - min_freq; - tRegValue |= ((channel << 6) | (1 << 4)); //set bit[15:6] and bit[4] - ret = RDAFM_write(client, 0x03, tRegValue); - msleep(40); - - //read 0x0B and check FM_TRUE(bit[8]) - tRegValue = 0; - ret = RDAFM_read(client, 0x0B, &tRegValue); - if(!ret){ - if((tRegValue & 0x0100) == 0x0100){ - isTrueStation = true; - } - } - - //if this freq is a true station, read the channel - if(isTrueStation){ - //tRegValue = 0; - //RDAFM_read(client, 0x03, &tRegValue); - //channel = ((tRegValue>>6) & 0x03ff) - 5; - channel = channel - 5; - if((channel >= 0) && (channel != 85)){ - oldValue = *(pScanTBL+(channel/16)); - oldValue |= (1<<(channel%16)); - *(pScanTBL+(channel/16)) = oldValue; - } - } - - //increase freq - tFreq += space; - }while( tFreq <= max_freq ); - -#if defined(MTK_MT6515) && defined(MT6626) - *(pScanTBL+13) = 0xb2d4; - *(pScanTBL+14) = 0xb2d4; - *(pScanTBL+15) = 0xb2d4; -#endif - - *ScanTBLsize = tmp_scanTBLsize; - *pFreq = 0; - - //clear FM mute - RDAFM_clear_hmute(client); - - return true; -} - - -static int fm_setup_cdev(struct fm *fm) -{ - int err; - - err = alloc_chrdev_region(&fm->dev_t, 0, 1, FM_NAME); - if (err) { - FM_ALERT("alloc dev_t failed\n"); - return -1; - } - - FM_ALERT("alloc %s:%d:%d\n", FM_NAME, - MAJOR(fm->dev_t), MINOR(fm->dev_t)); - - cdev_init(&fm->cdev, &fm_ops); - - fm->cdev.owner = THIS_MODULE; - fm->cdev.ops = &fm_ops; - - err = cdev_add(&fm->cdev, fm->dev_t, 1); - if (err) { - FM_ALERT("alloc dev_t failed\n"); - return -1; - } - - fm->cls = class_create(THIS_MODULE, FM_NAME); - if (IS_ERR(fm->cls)) { - err = PTR_ERR(fm->cls); - FM_ALERT("class_create err:%d\n", err); - return err; - } - fm->dev = device_create(fm->cls, NULL, fm->dev_t, NULL, FM_NAME); - - return 0; -} - - - -static int fm_ops_ioctl(struct file *filp, - unsigned int cmd, unsigned long arg) -{ - int ret = 0; - struct fm *fm = container_of(filp->f_dentry->d_inode->i_cdev, struct fm, cdev); - - FM_DEBUG("%s cmd(%x)\n", __func__, cmd); - - switch(cmd) - { - case FM_IOCTL_POWERUP: - { - struct fm_tune_parm parm; - FM_DEBUG("FM_IOCTL_POWERUP\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if (copy_from_user(&parm, (void*)arg, sizeof(struct fm_tune_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_powerup(fm, &parm); - up(&fm_ops_mutex); - if (copy_to_user((void*)arg, &parm, sizeof(struct fm_tune_parm))) - return -EFAULT; - // fm_low_power_wa(1); - break; - } - - case FM_IOCTL_POWERDOWN: - { - FM_DEBUG("FM_IOCTL_POWERDOWN\n"); - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_powerdown(fm); - up(&fm_ops_mutex); - // fm_low_power_wa(0); - break; - } - - // tune (frequency, auto Hi/Lo ON/OFF ) - case FM_IOCTL_TUNE: - { - struct fm_tune_parm parm; - FM_DEBUG("FM_IOCTL_TUNE\n"); - // FIXME! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if (copy_from_user(&parm, (void*)arg, sizeof(struct fm_tune_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_tune(fm, &parm); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &parm, sizeof(struct fm_tune_parm))) - return -EFAULT; - - break; - } - - case FM_IOCTL_SEEK: - { - struct fm_seek_parm parm; - FM_DEBUG("FM_IOCTL_SEEK\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if (copy_from_user(&parm, (void*)arg, sizeof(struct fm_seek_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_seek(fm, &parm); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &parm, sizeof(struct fm_seek_parm))) - return -EFAULT; - - break; - } - - case FM_IOCTL_SETVOL: - { - uint32_t vol; - FM_DEBUG("FM_IOCTL_SETVOL\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if(copy_from_user(&vol, (void*)arg, sizeof(uint32_t))) { - FM_ALERT("copy_from_user failed\n"); - return -EFAULT; - } - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_setvol(fm, vol); - up(&fm_ops_mutex); - - break; - } - - case FM_IOCTL_GETVOL: - { - uint32_t vol; - FM_DEBUG("FM_IOCTL_GETVOL\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_getvol(fm, &vol); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &vol, sizeof(uint32_t))) - return -EFAULT; - - break; - } - - case FM_IOCTL_MUTE: - { - uint32_t bmute; - FM_DEBUG("FM_IOCTL_MUTE\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - if (copy_from_user(&bmute, (void*)arg, sizeof(uint32_t))) - { - FM_DEBUG("copy_from_user mute failed!\n"); - return -EFAULT; - } - - FM_DEBUG("FM_IOCTL_MUTE:%d\n", bmute); - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - if (bmute){ - ret = RDAFM_enable_hmute(fm->i2c_client); - }else{ - ret = RDAFM_clear_hmute(fm->i2c_client); - } - - up(&fm_ops_mutex); - - break; - } - - case FM_IOCTL_GETRSSI: - { - uint32_t rssi; - FM_DEBUG("FM_IOCTL_GETRSSI\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - ret = fm_getrssi(fm, &rssi); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &rssi, sizeof(uint32_t))) - return -EFAULT; - - break; - } - - case FM_IOCTL_RW_REG: - { - struct fm_ctl_parm parm_ctl; - FM_DEBUG("FM_IOCTL_RW_REG\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if (copy_from_user(&parm_ctl, (void*)arg, sizeof(struct fm_ctl_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - if(parm_ctl.rw_flag == 0) //write - { - ret = RDAFM_write(fm->i2c_client, parm_ctl.addr, parm_ctl.val); - } - else - { - ret = RDAFM_read(fm->i2c_client, parm_ctl.addr, &parm_ctl.val); - } - - up(&fm_ops_mutex); - if ((parm_ctl.rw_flag == 0x01) && (!ret)) // Read success. - { - if (copy_to_user((void*)arg, &parm_ctl, sizeof(struct fm_ctl_parm))) - return -EFAULT; - } - break; - } - - case FM_IOCTL_GETCHIPID: - { - uint16_t chipid; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - RDAFM_GetChipID(fm->i2c_client, &chipid); - //chipid = fm->chip_id; - chipid = 0x6620; - FM_DEBUG("FM_IOCTL_GETCHIPID:%04x\n", chipid); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &chipid, sizeof(uint16_t))) - return -EFAULT; - - break; - } - - case FM_IOCTL_EM_TEST: - { - struct fm_em_parm parm_em; - FM_DEBUG("FM_IOCTL_EM_TEST\n"); - - // FIXME!! - // if (!capable(CAP_SYS_ADMIN)) - // return -EPERM; - - if (copy_from_user(&parm_em, (void*)arg, sizeof(struct fm_em_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - RDAFM_em_test(fm->i2c_client, parm_em.group_idx, parm_em.item_idx, parm_em.item_value); - - up(&fm_ops_mutex); - - break; - } - case FM_IOCTL_IS_FM_POWERED_UP: - { - uint32_t powerup; - FM_DEBUG("FM_IOCTL_IS_FM_POWERED_UP"); - if (fm->powerup) { - powerup = 1; - } else { - powerup = 0; - } - if (copy_to_user((void*)arg, &powerup, sizeof(uint32_t))) - return -EFAULT; - break; - } - -#ifdef FMDEBUG - case FM_IOCTL_DUMP_REG: - { - uint16_t chipid = 0; - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - RDAFM_GetChipID(fm->i2c_client, &chipid); - up(&fm_ops_mutex); - - break; - } -#endif - - case FM_IOCTL_SCAN: - { - struct fm_scan_parm parm; - FM_DEBUG("FM_IOCTL_SCAN\n"); - if (false == fm->powerup){ - return -EFAULT; - } - if(copy_from_user(&parm, (void*)arg, sizeof(struct fm_scan_parm))){ - return -EFAULT; - } - if (down_interruptible(&fm_ops_mutex)){ - return -EFAULT; - } - fm_scan(fm, &parm); - up(&fm_ops_mutex); - - if(copy_to_user((void*)arg, &parm, sizeof(struct fm_scan_parm))){ - return -EFAULT; - } - - break; - } - - case FM_IOCTL_STOP_SCAN: - { - FM_DEBUG("FM_IOCTL_STOP_SCAN\n"); - break; - } - - default: - { - FM_DEBUG("default\n"); - break; - } - } - - return ret; -} -static loff_t fm_ops_lseek(struct file *filp, loff_t off, int whence) -{ -// struct fm *fm = filp->private_data; - - if(whence == SEEK_END){ - //fm_hwscan_stop(fm); - atomic_set(&scan_complete_flag, 0); - }else if(whence == SEEK_SET){ - //FM_EVENT_SEND(fm->rds_event, FM_RDS_DATA_READY); - } - return off; -} - -static int fm_ops_open(struct inode *inode, struct file *filp) -{ - struct fm *fm = container_of(inode->i_cdev, struct fm, cdev); - - FM_DEBUG("%s\n", __func__); - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - // TODO: only have to set in the first time? - // YES!!!! - - fm->ref++; - - up(&fm_ops_mutex); - - filp->private_data = fm; - - // TODO: check open flags - - return 0; -} - -static int fm_ops_release(struct inode *inode, struct file *filp) -{ - int err = 0; - struct fm *fm = container_of(inode->i_cdev, struct fm, cdev); - - FM_DEBUG("%s\n", __func__); - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - fm->ref--; - if(fm->ref < 1) { - if(fm->powerup == true) { - fm_powerdown(fm); - } - } - - up(&fm_ops_mutex); - - return err; -} - -static int fm_init(struct i2c_client *client) -{ - int err; - struct fm *fm = NULL; - int ret = -1; - - - FM_DEBUG("%s()\n", __func__); - if (!(fm = kzalloc(sizeof(struct fm), GFP_KERNEL))) - { - FM_ALERT("-ENOMEM\n"); - err = -ENOMEM; - goto ERR_EXIT; - } - - fm->ref = 0; - fm->powerup = false; - atomic_set(&scan_complete_flag, 0); - - // First, read 5802NM chip ID - FM_DEBUG("%s()First, read 5802NM chip ID\n", __func__); - ret = RDAFM_GetChipID(client, &RDAFM_CHIP_ID); - FM_DEBUG("%s() 5802NM chip ID = 0x%04x\n", __func__, RDAFM_CHIP_ID); - // if failed, means use FM in 5990P_E - if(ret < 0){ - // enable the FM chip in combo - FM_DEBUG("%s() enable the FM chip in combo\n", __func__); - ret = rda_fm_power_on(); - if(ret < 0){ - err = -ENOMEM; - goto ERR_EXIT; - } - msleep(100); - ret = RDAFM_GetChipID(client, &RDAFM_CHIP_ID); - FM_DEBUG("%s() the FM in combo chip ID = 0x%04x\n", __func__, RDAFM_CHIP_ID); - if(ret < 0){ - err = -ENOMEM; - goto ERR_EXIT; - }else{ - fm->chip_id = RDAFM_CHIP_ID; - } - - // disable the FM chip for power saving - ret = rda_fm_power_off(); - if(ret < 0){ - err = -ENOMEM; - goto ERR_EXIT; - } - }else{ - fm->chip_id = RDAFM_CHIP_ID; - } - - - - if ((err = fm_setup_cdev(fm))) - { - goto ERR_EXIT; - } - - g_fm_struct = fm; - fm->i2c_client = client; - i2c_set_clientdata(client, fm); - - - /***********Add porc file system*************/ - - g_fm_proc = create_proc_entry(FM_PROC_FILE, 0444, NULL); - if (g_fm_proc == NULL) { - FM_ALERT("create_proc_entry failed\n"); - err = -ENOMEM; - goto ERR_EXIT; - } else { - g_fm_proc->read_proc = fm_proc_read; - g_fm_proc->write_proc = NULL; - //g_fm_proc->owner = THIS_MODULE; - FM_ALERT("create_proc_entry success\n"); - } - - /********************************************/ - - FM_DEBUG("fm_init is ok!\n"); - - return 0; - -ERR_EXIT: - kfree(fm); - - return err; -} - -static int fm_proc_read(char *page, char **start, off_t off, int count, int *eof, void *data) -{ - int cnt= 0; - struct fm *fm = g_fm_struct; - FM_ALERT("Enter fm_proc_read.\n"); - if(off != 0) - return 0; - if (fm != NULL && fm->powerup) { - cnt = sprintf(page, "1\n"); - } else { - cnt = sprintf(page, "0\n"); - } - *eof = 1; - FM_ALERT("Leave fm_proc_read. cnt = %d\n", cnt); - return cnt; -} - - -static int fm_destroy(struct fm *fm) -{ - int err = 0; - - FM_DEBUG("%s\n", __func__); - - device_destroy(fm->cls, fm->dev_t); - class_destroy(fm->cls); - - cdev_del(&fm->cdev); - unregister_chrdev_region(fm->dev_t, 1); - - fm_powerdown(fm); - - /***********************************/ - remove_proc_entry(FM_PROC_FILE, NULL); - - /**********************************/ - - // FIXME: any other hardware configuration ? - - // free all memory - kfree(fm); - - return err; -} - -/* - * fm_powerup - */ -static int fm_powerup(struct fm *fm, struct fm_tune_parm *parm) -{ - int i; - uint16_t tRegValue = 0x0002; - int ret = -1; - - struct i2c_client *client = fm->i2c_client; - - if (fm->powerup) - { - parm->err = FM_BADSTATUS; - return -EPERM; - } - - // if chip_id is ID_RDA5820NS, enable the FM chip in combo - if(fm->chip_id == ID_RDA5820NS){ - ret = rda_fm_power_on(); - if(ret < 0){ - return -EPERM; - } - msleep(100); - } - - - //Reset RDA FM - tRegValue = 0x0002; - RDAFM_write(client, 0x02, tRegValue); - msleep(100); - - - if (ID_RDA5802N == RDAFM_CHIP_ID){ - for (i=0; i<((sizeof(RDA5802N_initialization_reg)) / (sizeof(uint16_t))); i++) - { - ret = RDAFM_write(client, i+2, RDA5802N_initialization_reg[i]); - - if (ret < 0) - { - FM_DEBUG("fm_powerup init failed!\n"); - - parm->err = FM_FAILED; - - return -EPERM; - } - } - - }else if (ID_RDA5820NS == RDAFM_CHIP_ID){ - if(RDA_RADIO_WorkType == FM_RECEIVER){ - for (i = 0; i < ((sizeof(RDA5820NS_RX_initialization_reg)) / (sizeof(RDA_FM_REG_T))); i++) - { - if(RDA5820NS_RX_initialization_reg[i].address == 0xFF){ - msleep(RDA5820NS_RX_initialization_reg[i].value); - }else{ - ret = RDAFM_write(client, RDA5820NS_RX_initialization_reg[i].address, RDA5820NS_RX_initialization_reg[i].value); - if (ret < 0) - { - FM_DEBUG("fm_powerup init failed!\n"); - parm->err = FM_FAILED; - return -EPERM; - } - } - } - }else{ - for (i = 0; i < ((sizeof(RDA5820NS_TX_initialization_reg)) / (sizeof(RDA_FM_REG_T))); i++) - { - if(RDA5820NS_TX_initialization_reg[i].address == 0xFF){ - msleep(RDA5820NS_TX_initialization_reg[i].value); - }else{ - ret = RDAFM_write(client, RDA5820NS_TX_initialization_reg[i].address, RDA5820NS_TX_initialization_reg[i].value); - if (ret < 0) - { - FM_DEBUG("fm_powerup init failed!\n"); - parm->err = FM_FAILED; - return -EPERM; - } - } - } - } - - } - - - FM_DEBUG("pwron ok\n"); - fm->powerup = true; - - if (fm_tune(fm, parm) < 0) - { - return -EPERM; - } - fm_tune_data.byPowerUp = true; - memcpy(&fm_tune_data.parm, parm, sizeof(fm_tune_data.parm)); - - parm->err = FM_SUCCESS; - - return 0; - -} - -/* - * fm_powerdown - */ -static int fm_powerdown(struct fm *fm) -{ - uint16_t tRegValue = 0; - int ret = -1; - struct i2c_client *client = fm->i2c_client; - - RDAFM_read(client, 0x02, &tRegValue); - tRegValue &= (~(1 << 0)); - RDAFM_write(client, 0x02, tRegValue); - - if(fm->chip_id == ID_RDA5820NS){ - ret = rda_fm_power_off(); - if(ret < 0){ - return -EPERM; - } - } - - fm->powerup = false; - FM_ALERT("pwrdown ok\n"); - - return 0; -} - -/* - * fm_seek - */ -static int fm_seek(struct fm *fm, struct fm_seek_parm *parm) -{ - int ret = 0; - uint16_t val = 0; - uint8_t spaec = 1; - uint16_t tFreq = 875; - uint16_t tRegValue = 0; - uint16_t bottomOfBand = 875; - int falseStation = -1; - - - struct i2c_client *client = fm->i2c_client; - - if (!fm->powerup) - { - parm->err = FM_BADSTATUS; - return -EPERM; - } - - if (parm->space == FM_SPACE_100K) - { - spaec = 1; - val &= (~((1<<0) | (1<<1))); - } - else if (parm->space == FM_SPACE_200K) - { - spaec = 2; - val &= (~(1<<1)); - val |= (1<<0); - } - else - { - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->band == FM_BAND_UE) - { - val &= (~((1<<2) | (1<<3))); - bottomOfBand = 875; - fm->min_freq = 875; - fm->max_freq = 1080; - } - else if (parm->band == FM_BAND_JAPAN) - { - val &= (~(1<<3)); - val |= (1 << 2); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 910; - } - else if (parm->band == FM_BAND_JAPANW) { - val &= (~(1<<2)); - val |= (1 << 3); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 1080; - } - else - { - FM_ALERT("band:%d out of range\n", parm->band); - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->freq < fm->min_freq || parm->freq > fm->max_freq) { - FM_ALERT("freq:%d out of range\n", parm->freq); - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->seekth > 0x0B) { - FM_ALERT("seekth:%d out of range\n", parm->seekth); - parm->err = FM_EPARM; - return -EPERM; - } - - RDAFM_read(client, 0x05, &tRegValue); - tRegValue &= (~(0x7f<<8)); - //tRegValue |= ((parm->seekth & 0x7f) << 8); - tRegValue |= ((0x8 & 0x7f) << 8); - RDAFM_write(client, 0x05, tRegValue); - - -#ifdef FMDEBUG - if (parm->seekdir == FM_SEEK_UP) - FM_DEBUG("seek %d up\n", parm->freq); - else - FM_DEBUG("seek %d down\n", parm->freq); -#endif - - // (1) set hmute bit - RDAFM_enable_hmute(client); - - tFreq = parm->freq; - - do { - if (parm->seekdir == FM_SEEK_UP) - tFreq += spaec; - else - tFreq -= spaec; - - if (tFreq > fm->max_freq) - tFreq = fm->min_freq; - if (tFreq < fm->min_freq) - tFreq = fm->max_freq; - - val = (((tFreq - bottomOfBand+5) << 6) | (1 << 4) | (val & 0x0f)); - RDAFM_write(client, 0x03, val); - msleep(40); - ret = RDAFM_read(client, 0x0B, &tRegValue); - if (ret < 0) - { - FM_DEBUG("fm_seek: read register failed tunning freq = %4X\n", tFreq); - falseStation = -1; - } - else - { - if ((tRegValue & 0x0100) == 0x0100) - falseStation = 0; - else - falseStation = -1; - } - - if(falseStation == 0) - break; - }while(tFreq != parm->freq); - - - //clear hmute - RDAFM_clear_hmute(client); - - if (falseStation == 0) // seek successfully - { - parm->freq = tFreq; - FM_ALERT("fm_seek success, freq:%d\n", parm->freq); - parm->err = FM_SUCCESS; - - - } - else - { - FM_ALERT("fm_seek failed, invalid freq\n"); - parm->err = FM_SEEK_FAILED; - ret = -1; - } - - return ret; -} - -/* - * fm_scan - */ -static int fm_scan(struct fm *fm, struct fm_scan_parm *parm) -{ - int ret = 0; - uint16_t tRegValue = 0; - uint16_t scandir = RDA599X_FM_SCAN_UP; //scandir ËÑË÷·½Ïò - uint8_t space = 1; - struct i2c_client *client = fm->i2c_client; - - if (!fm->powerup){ - parm->err = FM_BADSTATUS; - return -EPERM; - } - - RDAFM_read(client, 0x03, &tRegValue); - - if (parm->space == FM_SPACE_100K){ - space = 1; - tRegValue &= (~((1<<0) | (1<<1))); //set 03H's bit[1:0] to 00 - }else if (parm->space == FM_SPACE_200K) { - space = 2; - tRegValue &= (~(1<<1)); //clear bit[1] - tRegValue |= (1<<0); //set bit[0] - }else{ - //default - space = 1; - tRegValue &= (~((1<<0) | (1<<1))); //set 03H's bit[1:0] to 00 - } - - if(parm->band == FM_BAND_UE){ - tRegValue &= (~((1<<2) | (1<<3))); - fm->min_freq = 875; - fm->max_freq = 1080; - }else if(parm->band == FM_BAND_JAPAN){ - tRegValue &= (~(1<<3)); - tRegValue |= (1 << 2); - fm->min_freq = 760; - fm->max_freq = 900; - }else if(parm->band == FM_BAND_JAPANW){ - tRegValue &= (~(1<<2)); - tRegValue |= (1 << 3); - fm->min_freq = 760; - fm->max_freq = 1080; - }else{ - parm->err = FM_EPARM; - return -EPERM; - } - - //set space and band - RDAFM_write(client, 0x03, tRegValue); - msleep(40); - - - if(RDAFM_Scan(client, fm->min_freq, fm->max_freq, &(parm->freq), parm->ScanTBL, &(parm->ScanTBLSize), scandir, space)){ - parm->err = FM_SUCCESS; - }else{ - parm->err = FM_SEEK_FAILED; - } - - return ret; -} - - -static int fm_setvol(struct fm *fm, uint32_t vol) -{ - int ret = 0; - uint16_t tRegValue = 0; - struct i2c_client *client = fm->i2c_client; - - if (vol > 15) - vol = 15; - - FM_DEBUG("fm_setvol:%d\n", vol); - - ret = RDAFM_read(client, 0x05, &tRegValue); - if (ret) - return -EPERM; - tRegValue &= ~(0x000f); - tRegValue |= vol; - - ret = RDAFM_write(client, 0x05, tRegValue); - if (ret) - return -EPERM; - - return 0; -} - -static int fm_getvol(struct fm *fm, uint32_t *vol) -{ - int ret = 0; - uint16_t tRegValue; - struct i2c_client *client = fm->i2c_client; - - ret = RDAFM_read(client, 0x05, &tRegValue); - if (ret) - return -EPERM; - - if (ret) - return -EPERM; - - *vol = (tRegValue & 0x000F); - - return 0; -} - -static int fm_getrssi(struct fm *fm, uint32_t *rssi) -{ - int ret = 0; - uint16_t tRegValue; - struct i2c_client *client = fm->i2c_client; - - ret = RDAFM_read(client, 0x0B, &tRegValue); - if (ret) - return -EPERM; - - - *rssi = (uint32_t)((tRegValue >> 9) & RDAFM_MASK_RSSI); - - FM_DEBUG("rssi value:%d\n", *rssi); - - return 0; -} - -/* - * fm_tune - */ -static int fm_tune(struct fm *fm, struct fm_tune_parm *parm) -{ - int ret; - uint16_t val = 0; - uint8_t space = 1; - uint16_t bottomOfBand = 875; - - struct i2c_client *client = fm->i2c_client; - - FM_DEBUG("%s\n", __func__); - - if (!fm->powerup) - { - parm->err = FM_BADSTATUS; - return -EPERM; - } - - if (parm->space == FM_SPACE_100K) - { - space = 1; - val &= (~((1<<0) | (1<<1))); - } - else if (parm->space == FM_SPACE_200K) - { - space = 2; - val |= (1<<0); - val &= (~(1<<1)); - } - else - { - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->band == FM_BAND_UE) - { - val &= (~((1<<2) | (1<<3))); - bottomOfBand = 875; - fm->min_freq = 875; - fm->max_freq = 1080; - } - else if (parm->band == FM_BAND_JAPAN) - { - val &= (~(1<<3)); - val |= (1 << 2); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 910; - } - else if (parm->band == FM_BAND_JAPANW) { - val &= (~(1<<2)); - val |= (1 << 3); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 1080; - } - else - { - FM_ALERT("band:%d out of range\n", parm->band); - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->freq < fm->min_freq || parm->freq > fm->max_freq) { - FM_ALERT("freq:%d out of range\n", parm->freq); - parm->err = FM_EPARM; - return -EPERM; - } - - FM_DEBUG("fm_tune, freq:%d\n", parm->freq); - - //RDAFM_enable_hmute(client); - - val = (((parm->freq - bottomOfBand + 5) << 6) | (1 << 4) | (val & 0x0f)); - - ret = RDAFM_write(client, 0x03, val); - if (ret < 0) - { - FM_ALERT("fm_tune write freq failed\n"); - parm->err = FM_SEEK_FAILED; - return ret; - } - msleep(40); - - return ret; -} - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) -/* - * fm_i2c_attach_adapter - */ -static int fm_i2c_attach_adapter(struct i2c_adapter *adapter) -{ - int err = 0; - - if (adapter->id == RDAFM_I2C_PORT) - { - return i2c_probe(adapter, &RDAFM_addr_data, fm_i2c_detect); - } - - return err; -} - -/* - * fm_i2c_detect - * This function is called by i2c_detect - */ -static int fm_i2c_detect(struct i2c_adapter *adapter, int addr, int kind) -{ - int err; - struct i2c_client *client = NULL; - - /* skip this since MT6516 shall support all the needed functionalities - if (!i2c_check_functionality(adapter, xxx)) - { - FM_DEBUG("i2c_check_functionality failed\n"); - return -ENOTSUPP; - } - */ - - /* initial i2c client */ - if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) - { - FM_ALERT("kzalloc failed\n"); - err = -ENOMEM; - goto ERR_EXIT; - } - - client->addr = addr; - client->adapter = adapter; - client->driver = &RDAFM_driver; - client->flags = 0; - strncpy(client->name, "RDA FM RADIO", I2C_NAME_SIZE); - - if ((err = fm_init(client))) - { - FM_ALERT("fm_init ERR:%d\n", err); - goto ERR_EXIT; - } - - if (err = i2c_attach_client(client)) - { - FM_ALERT("i2c_attach_client ERR:%d\n", err); - goto ERR_EXIT; - } - - return 0; - -ERR_EXIT: - kfree(client); - - return err; -} -static int fm_i2c_detach_client(struct i2c_client *client) -{ - int err = 0; - struct fm *fm = i2c_get_clientdata(client); - - FM_DEBUG("fm_i2c_detach_client\n"); - - err = i2c_detach_client(client); - if (err) - { - dev_err(&client->dev, "fm_i2c_detach_client failed\n"); - return err; - } - - fm_destroy(fm); - kfree(client); - - return err; -} -#else -static int fm_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) -{ - int err = -1; - FM_DEBUG("fm_i2c_probe\n"); - //client->timing = 50; - //client->timing = 200; - if ((err = fm_init(client))) - { - FM_ALERT("fm_init ERR:%d\n", err); - goto ERR_EXIT; - } - - return 0; - -ERR_EXIT: - return err; -} - -static int fm_i2c_detect(struct i2c_client *client, int kind, struct i2c_board_info *info) -{ - FM_DEBUG("fm_i2c_detect\n"); - strcpy(info->type, RDAFM_DEV); - return 0; -} - -static int fm_i2c_remove(struct i2c_client *client) -{ - int err = 0; - struct fm *fm = i2c_get_clientdata(client); - - FM_DEBUG("fm_i2c_remove\n"); - if(fm) - { - fm_destroy(fm); - fm = NULL; - } - - return err; -} -#endif - -int i2c_static_add_device(struct i2c_board_info *info) -{ - struct i2c_adapter *adapter; - struct i2c_client *client; - int ret; - - adapter = i2c_get_adapter(RDAFM_I2C_PORT); - if (!adapter) { - FM_DEBUG("%s: can't get i2c adapter\n", __func__); - ret = -ENODEV; - goto i2c_err; - } - - client = i2c_new_device(adapter, info); - if (!client) { - FM_DEBUG("%s: can't add i2c device at 0x%x\n", - __FUNCTION__, (unsigned int)info->addr); - ret = -ENODEV; - goto i2c_err; - } - - i2c_put_adapter(adapter); - - return 0; - -i2c_err: - return ret; -} - -static int mt_fm_probe(struct platform_device *pdev) -{ - int err = -1; - FM_ALERT("mt_fm_probe\n"); - err = i2c_static_add_device(&i2c_rdafm); - if (err < 0){ - FM_DEBUG("%s(): add i2c device error, err = %d\n", __func__, err); - return err; - } - - // Open I2C driver - err = i2c_add_driver(&RDAFM_driver); - if (err) - { - FM_ALERT("i2c err\n"); - } - - return err; -} - -static int mt_fm_remove(struct platform_device *pdev) -{ - FM_ALERT("mt_fm_remove\n"); - i2c_unregister_device(g_fm_struct->i2c_client); - i2c_del_driver(&RDAFM_driver); - - return 0; -} - - -static struct platform_driver mt_fm_dev_drv = -{ - .probe = mt_fm_probe, - .remove = mt_fm_remove, -#if 0//def CONFIG_PM //Not need now - .suspend = mt_fm_suspend, - .resume = mt_fm_resume, -#endif - .driver = { - .name = FM_NAME, - .owner = THIS_MODULE, - } -}; - -#if defined(MTK_MT6515) -static struct platform_device mt_fm_device = { - .name = FM_NAME, - .id = -1, -}; -#endif - - -/* - * mt_fm_init - */ -static int __init mt_fm_init(void) -{ - int err = 0; - - FM_DEBUG("mt_fm_init\n"); -#if defined(MTK_MT6515) - err = platform_device_register(&mt_fm_device); - if(err){ - FM_DEBUG("platform_device_register fail\n"); - return err; - }else{ - FM_DEBUG("platform_device_register success\n"); - } -#endif - err = platform_driver_register(&mt_fm_dev_drv); - if (err) - { - FM_DEBUG("platform_driver_register failed\n"); - }else{ - FM_DEBUG("platform_driver_register success\n"); - } - - return err; -} - -/* - * mt_fm_exit - */ -static void __exit mt_fm_exit(void) -{ - FM_DEBUG("mt_fm_exit\n"); - platform_driver_unregister(&mt_fm_dev_drv); -#if defined(MTK_MT6515) - platform_device_unregister(&mt_fm_device); -#endif -} - -module_init(mt_fm_init); -module_exit(mt_fm_exit); - -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("MediaTek FM Driver"); -MODULE_AUTHOR("William Chung "); - - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/RDA5990_FM_drv_gpio.c b/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/RDA5990_FM_drv_gpio.c deleted file mode 100755 index b154fbcaa5cd..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/drv_fm_rda/RDA5990_FM_drv_gpio.c +++ /dev/null @@ -1,1784 +0,0 @@ -#include -#include -#include -#include // udelay() -#include // device_create() -#include -#include -#include -#include -#include /* constant of kernel version */ -#include // get_user() - -#include -#include -#include -#include -#include -#include - -// if need debug, define FMDEBUG -//#define FMDEBUG - -// if your platform is MT6515/6575, define MTK_MT6515 -#define MTK_MT6515 - -// if your platform is MT6515/6575 and MTK FM is MT6626, define MT6626 -//#define MT6626 - -#define FM_ALERT(f, s...) \ - do { \ - printk(KERN_ALERT "RDAFM " f, ## s); \ - } while(0) - -#ifdef FMDEBUG -#define FM_DEBUG(f, s...) \ - do { \ - printk("RDAFM " f, ## s); \ - } while(0) -#else -#define FM_DEBUG(f, s...) -#endif - -#define RDA599X_SCANTBL_SIZE 16 //16*uinit16_t -#define RDA599X_FM_SCAN_UP 0x0 -#define RDA599X_FM_SCAN_DOWN 0x01 - -extern int rda_gpio_i2c_read_1_addr_2_data(uint8_t chipAddr, uint8_t regAddr, unsigned short *buffer); -extern int rda_gpio_i2c_write_1_addr_2_data(uint8_t chipAddr, uint8_t regAddr, unsigned short data); -extern int rda_fm_power_off(void); -extern int rda_fm_power_on(void); - -/****************************************************************************** - * CONSTANT DEFINITIONS - *****************************************************************************/ -#define RDAFM_SLAVE_ADDR 0x11 //RDA FM Chip address - -#define RDAFM_MASK_RSSI 0X7F // RSSI - - - -#define ID_RDA5802E 0x5804 -#define ID_RDA5802H 0x5801 -#define ID_RDA5802N 0x5808 -#define ID_RDA5820 0x5805 -#define ID_RDA5820NS 0x5820 - - - -static struct proc_dir_entry *g_fm_proc = NULL; -static struct fm *g_fm_struct = NULL; -static atomic_t scan_complete_flag; - -#define FM_PROC_FILE "fm" - -/****************************************************************************** - * STRUCTURE DEFINITIONS - *****************************************************************************/ - -enum RDAFM_CHIP_TYPE { - CHIP_TYPE_RDA5802E = 0, - CHIP_TYPE_RDA5802H, - CHIP_TYPE_RDA5802N, - CHIP_TYPE_RDA5820, - CHIP_TYPE_RDA5820NS, -}; - - -typedef struct -{ - uint8_t address; - uint16_t value; -}RDA_FM_REG_T; - -typedef struct -{ - bool byPowerUp; - struct fm_tune_parm parm -}FM_TUNE_T; -static FM_TUNE_T fm_tune_data = {false, {}}; - -typedef enum -{ - FM_RECEIVER, //5800,5802,5804 - FM_TRANSMITTER, //5820 -}RDA_RADIO_WORK_E; - -typedef enum -{ - OFF, - ON, -}RDA_FM_POWER_STATE_T; - -struct fm { - uint32_t ref; - bool powerup; - uint16_t chip_id; - // uint16_t device_id; - uint8_t chipAddr; - dev_t dev_t; - uint16_t min_freq; // KHz - uint16_t max_freq; // KHz - uint8_t band; // TODO - struct class *cls; - struct device *dev; - struct cdev cdev; - // struct i2c_client *i2c_client; -}; - - - - -/****************************************************************************** - * FUNCTION PROTOTYPES - *****************************************************************************/ - - -static int RDAFM_clear_hmute(uint8_t chipAddr); -static int RDAFM_enable_hmute(uint8_t chipAddr); -static bool RDAFM_Scan(uint8_t chipAddr, - uint16_t min_freq, uint16_t max_freq, - uint16_t *pFreq, //get the valid freq after scan - uint16_t *pScanTBL, - uint16_t *ScanTBLsize, - uint16_t scandir, - uint16_t space); - - -static int RDAFM_read(uint8_t chipAddr, uint8_t addr, uint16_t *val); -static int RDAFM_write(uint8_t chipAddr, uint8_t addr, uint16_t val); -static int fm_setup_cdev(struct fm *fm); -static int fm_ops_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); -static loff_t fm_ops_lseek(struct file *filp, loff_t off, int whence); -static int fm_ops_open(struct inode *inode, struct file *filp); -static int fm_ops_release(struct inode *inode, struct file *filp); - -static int fm_init(void); -static int fm_destroy(struct fm *fm); -static int fm_powerup(struct fm *fm, struct fm_tune_parm *parm); -static int fm_powerdown(struct fm *fm); - -static int fm_tune(struct fm *fm, struct fm_tune_parm *parm); -static int fm_seek(struct fm *fm, struct fm_seek_parm *parm); -static int fm_scan(struct fm *fm, struct fm_scan_parm *parm); -static int fm_setvol(struct fm *fm, uint32_t vol); -static int fm_getvol(struct fm *fm, uint32_t *vol); -static int fm_getrssi(struct fm *fm, uint32_t *rssi); -static int fm_proc_read(char *page, char **start, off_t off, int count, int *eof, void *data); - - - - - - -static uint16_t RDAFM_CHIP_ID = 0x5808; -static RDA_RADIO_WORK_E RDA_RADIO_WorkType = FM_RECEIVER; - - - -#if 1 -static uint16_t RDA5802N_initialization_reg[]={ - 0xC005, //02h - 0x0000, - 0x0400, - 0xC6ED, //0x86AD, //05h - 0x6000, - 0x721A, //0x42C6 - 0x0000, - 0x0000, - 0x0000, //0x0ah - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, //0x10h - 0x0019, - 0x2A11, - 0xB042, - 0x2A11, - 0xB831, //0x15h - 0xC000, - 0x2A91, - 0x9400, - 0x00A8, - 0xc400, //0x1ah - 0xF7CF, //Ìá¸ßÔ¶¶ËÔëÉùÒÖÖÆ - 0x2414, //0x2ADC, //0x1ch ÌáÉýVIO VDDÖ®¼äѹ²îÒýÆðµÄ²»Á¼ - 0x806F, - 0x4608, - 0x0086, - 0x0661, //0x20H - 0x0000, - 0x109E, - 0x23C8, - 0x0406, - 0x0E1C, //0x25H -}; -#else -static uint16_t RDA5802N_initialization_reg[]={ - 0xc401, //02h - 0x0000, - 0x0400, - 0x86ad, //05h// - 0x0000, - 0x42c6, - 0x0000, - 0x0000, - 0x0000, //0x0ah - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, //0x10h - 0x0019, - 0x2a11, - 0xa053,//0x80,0x53, - 0x3e11,//0x22,0x11, - 0xfc7d, //0x15h - 0xc000, - 0x2a91, - 0x9400, - 0x00a8, - 0xc400, //0x1ah - 0xe000, - 0x2b1d, //0x23,0x14 - 0x816a, - 0x4608, - 0x0086, - 0x0661, //0x20h - 0x0000, - 0x109e, - 0x2244, - 0x0408, //0x24 - 0x0408, //0x25 -}; -#endif - -static RDA_FM_REG_T RDA5820NS_TX_initialization_reg[]={ - {0x02, 0xE003}, - {0xFF, 100}, // if address is 0xFF, sleep value ms - {0x02, 0xE001}, - {0x19, 0x88A8}, - {0x1A, 0x4290}, - {0x68, 0x0AF0}, - {0x40, 0x0001}, - {0x41, 0x41FF}, - {0xFF, 500}, - {0x03, 0x1B90}, -}; - -static RDA_FM_REG_T RDA5820NS_RX_initialization_reg[]={ - {0x02, 0x0002}, //Soft reset - {0xFF, 100}, // wait - {0x02, 0xC001}, //Power Up - {0x05, 0x888F}, //LNAP 0x884F --LNAN - {0x06, 0x6000}, - {0x13, 0x80E1}, - {0x14, 0x2A11}, - {0x1C, 0x22DE}, - {0x21, 0x0020}, - {0x03, 0x1B90}, -}; - - - -static struct file_operations fm_ops = { - .owner = THIS_MODULE, - .unlocked_ioctl = fm_ops_ioctl, - .llseek = fm_ops_lseek, - .open = fm_ops_open, - .release = fm_ops_release, -}; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) -static DECLARE_MUTEX(fm_ops_mutex); -#else -DEFINE_SEMAPHORE(fm_ops_mutex); -#endif - -static int RDAFM_GetChipID(uint8_t chipAddr, uint16_t *pChipID) -{ - int err; - int ret = -1; - uint16_t val = 0x0002; - - //Reset RDA FM - err = RDAFM_write(chipAddr, 0x02, val); - if(err < 0){ -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: reset FM chip failed!\n"); -#endif - ret = -1; - return ret; - } - msleep(80); - - val = 0; - err = RDAFM_read(chipAddr, 0x0C, &val); - if (err == 0) - { - if ((0x5802 == val) || (0x5803 == val)) - { - err = RDAFM_read(chipAddr, 0x0E, &val); - - if (err == 0) - *pChipID = val; - else - *pChipID = 0x5802; - -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: Chip ID = %04X\n", val); -#endif - - ret = 0; - - } - else if ((0x5805 == val) || (0x5820 == val)) - { - *pChipID = val; - ret = 0; - } - else - { -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: get chip ID failed! get value = %04X\n", val); -#endif - ret = -1; - } - - } - else - { -#ifdef FMDEBUG - FM_DEBUG("RDAFM_GetChipID: get chip ID failed!\n"); -#endif - ret = -1; - } - - return ret; -} - - -/* - * RDAFM_read - */ -static int RDAFM_read(uint8_t chipAddr, uint8_t regAddr, uint16_t *val) -{ - int ret = -1; - ret = rda_gpio_i2c_read_1_addr_2_data(chipAddr, regAddr, val); - - return ret; -} - -/* - * RDAFM_write - */ -static int RDAFM_write(uint8_t chipAddr, uint8_t regAddr, uint16_t val) -{ - int n; - - n = rda_gpio_i2c_write_1_addr_2_data(chipAddr, regAddr, val); - if (n < 0) - { - FM_ALERT("RDAFM_write send:0x%X err:%d\n", regAddr, n); - return -1; - } - - return 0; -} - - -static int RDAFM_clear_hmute(uint8_t chipAddr) -{ - int ret = 0; - uint16_t tRegValue = 0; - - FM_DEBUG("RDAFM_clear_hmute\n"); - - ret = RDAFM_read(chipAddr, 0x02, &tRegValue); - if (ret < 0) - { - FM_ALERT("RDAFM_clear_hmute read register failed!\n"); - return -1; - } - - tRegValue |= (1 << 14); - - ret = RDAFM_write(chipAddr, 0x02, tRegValue); - - if (ret < 0) - { - FM_ALERT("RDAFM_clear_hmute write register failed!\n"); - return -1; - } - - if(fm_tune_data.byPowerUp){ - if (fm_tune(g_fm_struct, &(fm_tune_data.parm)) < 0) - { - fm_tune_data.byPowerUp = false; - memset(&fm_tune_data.parm, 0, sizeof(fm_tune_data.parm)); - return -EPERM; - } - fm_tune_data.byPowerUp = false; - memset(&fm_tune_data.parm, 0, sizeof(fm_tune_data.parm)); - } - - return 0; -} - - - -static int RDAFM_enable_hmute(uint8_t chipAddr) -{ - int ret = 0; - uint16_t tRegValue = 0; - - FM_DEBUG("RDAFM_enable_hmute\n"); - - ret = RDAFM_read(chipAddr, 0x02, &tRegValue); - if (ret < 0) - { - FM_ALERT("RDAFM_enable_hmute read register failed!\n"); - return -1; - } - - tRegValue &= (~(1 << 14)); - - ret = RDAFM_write(chipAddr, 0x02, tRegValue); - - if (ret < 0) - { - FM_ALERT("RDAFM_enable_hmute write register failed!\n"); - return -1; - } - - return 0; -} - - -static bool RDAFM_Scan(uint8_t chipAddr, - uint16_t min_freq, uint16_t max_freq, - uint16_t *pFreq, - uint16_t *pScanTBL, - uint16_t *ScanTBLsize, - uint16_t scandir, - uint16_t space) -{ - uint16_t tFreq, tRegValue = 0; - uint16_t tmp_scanTBLsize = *ScanTBLsize; - int ret = -1; - bool isTrueStation = false; - uint16_t oldValue = 0; - int channel = 0; - - if((!pScanTBL) || (tmp_scanTBLsize == 0)) { - return false; - } - - //clear the old value of pScanTBL - memset(pScanTBL, 0, sizeof(uint16_t)*RDA599X_SCANTBL_SIZE); - - if(tmp_scanTBLsize > RDA599X_SCANTBL_SIZE) - { - tmp_scanTBLsize = RDA599X_SCANTBL_SIZE; - } - - //scan up - if(scandir == RDA599X_FM_SCAN_UP){ // now, only support scan up - tFreq = min_freq; - }else{ //scan down - tFreq = max_freq;//max_freq compare need or not - } - - //mute FM - RDAFM_enable_hmute(chipAddr); - - //set seekth - tRegValue = 0; - RDAFM_read(chipAddr, 0x05, &tRegValue); - tRegValue &= (~(0x7f<<8)); - tRegValue |= ((0x8 & 0x7f) << 8); - RDAFM_write(chipAddr, 0x05, tRegValue); - msleep(50); - - atomic_set(&scan_complete_flag, 1); - - do { - if(atomic_read(&scan_complete_flag) == 0) - break; - isTrueStation = false; - - //set channel and enable TUNE - tRegValue = 0; - RDAFM_read(chipAddr, 0x03, &tRegValue); - tRegValue &= (~(0x03ff<<6)); //clear bit[15:6] - channel = tFreq - min_freq; - tRegValue |= ((channel << 6) | (1 << 4)); //set bit[15:6] and bit[4] - ret = RDAFM_write(chipAddr, 0x03, tRegValue); - msleep(40); - - //read 0x0B and check FM_TRUE(bit[8]) - tRegValue = 0; - ret = RDAFM_read(chipAddr, 0x0B, &tRegValue); - if(!ret){ - if((tRegValue & 0x0100) == 0x0100){ - isTrueStation = true; - } - } - - //if this freq is a true station, read the channel - if(isTrueStation){ - //tRegValue = 0; - //RDAFM_read(chipAddr, 0x0A, &tRegValue); - //channel = ((tRegValue) & 0x03ff) - 5; - channel = channel - 5; - if((channel >= 0) && (channel != 85)){ - oldValue = *(pScanTBL+(channel/16)); - oldValue |= (1<<(channel%16)); - *(pScanTBL+(channel/16)) = oldValue; - } - } - - //increase freq - tFreq += space; - }while( tFreq <= max_freq ); - -#if defined(MTK_MT6515) && defined(MT6626) - *(pScanTBL+13) = 0xb2d4; - *(pScanTBL+14) = 0xb2d4; - *(pScanTBL+15) = 0xb2d4; -#endif - - *ScanTBLsize = tmp_scanTBLsize; - *pFreq = 0; - - //clear FM mute - RDAFM_clear_hmute(chipAddr); - - return true; -} - - -static int fm_setup_cdev(struct fm *fm) -{ - int err; - - err = alloc_chrdev_region(&fm->dev_t, 0, 1, FM_NAME); - if (err) { - FM_ALERT("alloc dev_t failed\n"); - return -1; - } - - FM_ALERT("alloc %s:%d:%d\n", FM_NAME, - MAJOR(fm->dev_t), MINOR(fm->dev_t)); - - cdev_init(&fm->cdev, &fm_ops); - - fm->cdev.owner = THIS_MODULE; - fm->cdev.ops = &fm_ops; - - err = cdev_add(&fm->cdev, fm->dev_t, 1); - if (err) { - FM_ALERT("alloc dev_t failed\n"); - return -1; - } - - fm->cls = class_create(THIS_MODULE, FM_NAME); - if (IS_ERR(fm->cls)) { - err = PTR_ERR(fm->cls); - FM_ALERT("class_create err:%d\n", err); - return err; - } - fm->dev = device_create(fm->cls, NULL, fm->dev_t, NULL, FM_NAME); - - return 0; -} - - - -static int fm_ops_ioctl(struct file *filp, - unsigned int cmd, unsigned long arg) -{ - int ret = 0; - struct fm *fm = container_of(filp->f_dentry->d_inode->i_cdev, struct fm, cdev); - - FM_DEBUG("%s cmd(%x)\n", __func__, cmd); - - switch(cmd) - { - case FM_IOCTL_POWERUP: - { - struct fm_tune_parm parm; - FM_DEBUG("FM_IOCTL_POWERUP\n"); - - if (copy_from_user(&parm, (void*)arg, sizeof(struct fm_tune_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_powerup(fm, &parm); - up(&fm_ops_mutex); - if (copy_to_user((void*)arg, &parm, sizeof(struct fm_tune_parm))) - return -EFAULT; - break; - } - - case FM_IOCTL_POWERDOWN: - { - FM_DEBUG("FM_IOCTL_POWERDOWN\n"); - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_powerdown(fm); - up(&fm_ops_mutex); - break; - } - - // tune (frequency, auto Hi/Lo ON/OFF ) - case FM_IOCTL_TUNE: - { - struct fm_tune_parm parm; - FM_DEBUG("FM_IOCTL_TUNE\n"); - - if (copy_from_user(&parm, (void*)arg, sizeof(struct fm_tune_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_tune(fm, &parm); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &parm, sizeof(struct fm_tune_parm))) - return -EFAULT; - - break; - } - - case FM_IOCTL_SEEK: - { - struct fm_seek_parm parm; - FM_DEBUG("FM_IOCTL_SEEK\n"); - - if (copy_from_user(&parm, (void*)arg, sizeof(struct fm_seek_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_seek(fm, &parm); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &parm, sizeof(struct fm_seek_parm))) - return -EFAULT; - - break; - } - - case FM_IOCTL_SETVOL: - { - uint32_t vol; - FM_DEBUG("FM_IOCTL_SETVOL\n"); - - if(copy_from_user(&vol, (void*)arg, sizeof(uint32_t))) { - FM_ALERT("copy_from_user failed\n"); - return -EFAULT; - } - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_setvol(fm, vol); - up(&fm_ops_mutex); - - break; - } - - case FM_IOCTL_GETVOL: - { - uint32_t vol; - FM_DEBUG("FM_IOCTL_GETVOL\n"); - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - ret = fm_getvol(fm, &vol); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &vol, sizeof(uint32_t))) - return -EFAULT; - - break; - } - - case FM_IOCTL_MUTE: - { - uint32_t bmute; - FM_DEBUG("FM_IOCTL_MUTE\n"); - - if (copy_from_user(&bmute, (void*)arg, sizeof(uint32_t))) - { - FM_DEBUG("copy_from_user mute failed!\n"); - return -EFAULT; - } - - FM_DEBUG("FM_IOCTL_MUTE:%d\n", bmute); - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - if (bmute){ - ret = RDAFM_enable_hmute(fm->chipAddr); - }else{ - ret = RDAFM_clear_hmute(fm->chipAddr); - } - - up(&fm_ops_mutex); - - break; - } - - case FM_IOCTL_GETRSSI: - { - uint32_t rssi; - FM_DEBUG("FM_IOCTL_GETRSSI\n"); - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - ret = fm_getrssi(fm, &rssi); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &rssi, sizeof(uint32_t))) - return -EFAULT; - - break; - } - - case FM_IOCTL_RW_REG: - { - struct fm_ctl_parm parm_ctl; - FM_DEBUG("FM_IOCTL_RW_REG\n"); - - if (copy_from_user(&parm_ctl, (void*)arg, sizeof(struct fm_ctl_parm))) - return -EFAULT; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - if(parm_ctl.rw_flag == 0) //write - { - ret = RDAFM_write(fm->chipAddr, parm_ctl.addr, parm_ctl.val); - } - else - { - ret = RDAFM_read(fm->chipAddr, parm_ctl.addr, &parm_ctl.val); - } - - up(&fm_ops_mutex); - if ((parm_ctl.rw_flag == 0x01) && (!ret)) // Read success. - { - if (copy_to_user((void*)arg, &parm_ctl, sizeof(struct fm_ctl_parm))) - return -EFAULT; - } - break; - } - - case FM_IOCTL_GETCHIPID: - { - uint16_t chipid; - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - RDAFM_GetChipID(fm->chipAddr, &chipid); - //chipid = fm->chip_id; - chipid = 0x6620; - FM_DEBUG("FM_IOCTL_GETCHIPID:%04x\n", chipid); - up(&fm_ops_mutex); - - if (copy_to_user((void*)arg, &chipid, sizeof(uint16_t))) - return -EFAULT; - - break; - } - - case FM_IOCTL_IS_FM_POWERED_UP: - { - uint32_t powerup; - FM_DEBUG("FM_IOCTL_IS_FM_POWERED_UP"); - if (fm->powerup) { - powerup = 1; - } else { - powerup = 0; - } - if (copy_to_user((void*)arg, &powerup, sizeof(uint32_t))) - return -EFAULT; - break; - } - -#ifdef FMDEBUG - case FM_IOCTL_DUMP_REG: - { - uint16_t chipid = 0; - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - RDAFM_GetChipID(fm->chipAddr, &chipid); - up(&fm_ops_mutex); - - break; - } -#endif - - case FM_IOCTL_SCAN: - { - struct fm_scan_parm parm; - FM_DEBUG("FM_IOCTL_SCAN\n"); - if (false == fm->powerup){ - return -EFAULT; - } - if(copy_from_user(&parm, (void*)arg, sizeof(struct fm_scan_parm))){ - return -EFAULT; - } - if (down_interruptible(&fm_ops_mutex)){ - return -EFAULT; - } - fm_scan(fm, &parm); - up(&fm_ops_mutex); - - if(copy_to_user((void*)arg, &parm, sizeof(struct fm_scan_parm))){ - return -EFAULT; - } - - break; - } - - case FM_IOCTL_STOP_SCAN: - { - FM_DEBUG("FM_IOCTL_STOP_SCAN\n"); - break; - } - - case FM_IOCTL_SCAN_GETRSSI: - { - FM_DEBUG("FM_IOCTL_SCAN_GETRSSI\n"); - break; - } - - case FM_IOCTL_GETMONOSTERO: - { - FM_DEBUG("FM_IOCTL_GETMONOSTERO\n"); - break; - } - - case FM_IOCTL_SETMONOSTERO: - { - FM_DEBUG("FM_IOCTL_SETMONOSTERO\n"); - break; - } - - case FM_IOCTL_GETCURPAMD: - { - FM_DEBUG("FM_IOCTL_GETCURPAMD\n"); - break; - } - - case FM_IOCTL_EM_TEST: - { - FM_DEBUG("FM_IOCTL_EM_TEST\n"); - break; - } - - case FM_IOCTL_RDS_SUPPORT: - { - FM_DEBUG("FM_IOCTL_RDS_SUPPORT\n"); - break; - } - - case FM_IOCTL_RDS_ONOFF: - { - FM_DEBUG("FM_IOCTL_RDS_ONOFF\n"); - break; - } - - case FM_IOCTL_GETGOODBCNT: - { - FM_DEBUG("FM_IOCTL_GETGOODBCNT\n"); - break; - } - - case FM_IOCTL_GETBADBNT: - { - FM_DEBUG("FM_IOCTL_GETBADBNT\n"); - break; - } - - case FM_IOCTL_GETBLERRATIO: - { - FM_DEBUG("FM_IOCTL_GETBLERRATIO\n"); - break; - } - - case FM_IOCTL_POWERUP_TX: - { - FM_DEBUG("FM_IOCTL_POWERUP_TX\n"); - break; - } - - case FM_IOCTL_TUNE_TX: - { - FM_DEBUG("FM_IOCTL_TUNE_TX\n"); - break; - } - - case FM_IOCTL_TX_SUPPORT: - { - FM_DEBUG("FM_IOCTL_TX_SUPPORT\n"); - break; - } - - case FM_IOCTL_RDSTX_ENABLE: - { - FM_DEBUG("FM_IOCTL_RDSTX_ENABLE\n"); - break; - } - - case FM_IOCTL_RDSTX_SUPPORT: - { - FM_DEBUG("FM_IOCTL_RDSTX_SUPPORT\n"); - break; - } - - case FM_IOCTL_TX_SCAN: - { - FM_DEBUG("FM_IOCTL_TX_SCAN\n"); - break; - } - - case FM_IOCTL_RDS_TX: - { - FM_DEBUG("FM_IOCTL_RDS_TX\n"); - break; - } - - case FM_IOCTL_OVER_BT_ENABLE: - { - FM_DEBUG("FM_IOCTL_OVER_BT_ENABLE\n"); - break; - } - - case FM_IOCTL_ANA_SWITCH: - { - FM_DEBUG("FM_IOCTL_ANA_SWITCH\n"); - break; - } - - case FM_IOCTL_GETCAPARRAY: - { - FM_DEBUG("FM_IOCTL_GETCAPARRAY\n"); - break; - } - - case FM_IOCTL_GPS_RTC_DRIFT: - { - FM_DEBUG("FM_IOCTL_GPS_RTC_DRIFT\n"); - break; - } - - case FM_IOCTL_I2S_SETTING: - { - FM_DEBUG("FM_IOCTL_I2S_SETTING\n"); - break; - } - - case FM_IOCTL_RDS_GROUPCNT: - { - FM_DEBUG("FM_IOCTL_RDS_GROUPCNT\n"); - break; - } - - case FM_IOCTL_RDS_GET_LOG: - { - FM_DEBUG("FM_IOCTL_RDS_GET_LOG\n"); - break; - } - - case FM_IOCTL_GET_HW_INFO: - { - FM_DEBUG("FM_IOCTL_GET_HW_INFO\n"); - break; - } - default: - { - FM_DEBUG("default\n"); - break; - } - } - - return ret; -} -static loff_t fm_ops_lseek(struct file *filp, loff_t off, int whence) -{ -// struct fm *fm = filp->private_data; - - if(whence == SEEK_END){ - //fm_hwscan_stop(fm); - atomic_set(&scan_complete_flag, 0); - }else if(whence == SEEK_SET){ - //FM_EVENT_SEND(fm->rds_event, FM_RDS_DATA_READY); - } - return off; -} - -static int fm_ops_open(struct inode *inode, struct file *filp) -{ - struct fm *fm = container_of(inode->i_cdev, struct fm, cdev); - - FM_DEBUG("%s\n", __func__); - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - - // TODO: only have to set in the first time? - // YES!!!! - - fm->ref++; - - up(&fm_ops_mutex); - - filp->private_data = fm; - - // TODO: check open flags - - return 0; -} - -static int fm_ops_release(struct inode *inode, struct file *filp) -{ - int err = 0; - struct fm *fm = container_of(inode->i_cdev, struct fm, cdev); - - FM_DEBUG("%s\n", __func__); - - if (down_interruptible(&fm_ops_mutex)) - return -EFAULT; - fm->ref--; - if(fm->ref < 1) { - if(fm->powerup == true) { - fm_powerdown(fm); - } - } - - up(&fm_ops_mutex); - - return err; -} - -static int fm_init(void) -{ - int err; - struct fm *fm = NULL; - int ret = -1; - - - FM_DEBUG("%s()\n", __func__); - if (!(fm = kzalloc(sizeof(struct fm), GFP_KERNEL))) - { - FM_ALERT("-ENOMEM\n"); - err = -ENOMEM; - goto ERR_EXIT; - } - - fm->ref = 0; - fm->powerup = false; - fm->chipAddr = RDAFM_SLAVE_ADDR; - atomic_set(&scan_complete_flag, 0); - - // First, read 5802NM chip ID - FM_DEBUG("%s()First, read 5802NM chip ID\n", __func__); - ret = RDAFM_GetChipID(fm->chipAddr, &RDAFM_CHIP_ID); - FM_DEBUG("%s() 5802NM chip ID = 0x%04x\n", __func__, RDAFM_CHIP_ID); - // if failed, means use FM in 5990P_E - if(ret < 0){ - // enable the FM chip in combo - FM_DEBUG("%s() enable the FM chip in combo\n", __func__); - ret = rda_fm_power_on(); - if(ret < 0){ - err = -ENOMEM; - goto ERR_EXIT; - } - msleep(100); - ret = RDAFM_GetChipID(fm->chipAddr, &RDAFM_CHIP_ID); - FM_DEBUG("%s() the FM in combo chip ID = 0x%04x\n", __func__, RDAFM_CHIP_ID); - if(ret < 0){ - err = -ENOMEM; - goto ERR_EXIT; - }else{ - fm->chip_id = RDAFM_CHIP_ID; - } - - // disable the FM chip for power saving - ret = rda_fm_power_off(); - if(ret < 0){ - err = -ENOMEM; - goto ERR_EXIT; - } - }else{ - fm->chip_id = RDAFM_CHIP_ID; - } - - - - if ((err = fm_setup_cdev(fm))) - { - goto ERR_EXIT; - } - - g_fm_struct = fm; - - /***********Add porc file system*************/ - - g_fm_proc = create_proc_entry(FM_PROC_FILE, 0444, NULL); - if (g_fm_proc == NULL) { - FM_ALERT("create_proc_entry failed\n"); - err = -ENOMEM; - goto ERR_EXIT; - } else { - g_fm_proc->read_proc = fm_proc_read; - g_fm_proc->write_proc = NULL; - //g_fm_proc->owner = THIS_MODULE; - FM_ALERT("create_proc_entry success\n"); - } - - /********************************************/ - - FM_DEBUG("fm_init is ok!\n"); - - return 0; - -ERR_EXIT: - kfree(fm); - - return err; -} - -static int fm_proc_read(char *page, char **start, off_t off, int count, int *eof, void *data) -{ - int cnt= 0; - struct fm *fm = g_fm_struct; - FM_ALERT("Enter fm_proc_read.\n"); - if(off != 0) - return 0; - if (fm != NULL && fm->powerup) { - cnt = sprintf(page, "1\n"); - } else { - cnt = sprintf(page, "0\n"); - } - *eof = 1; - FM_ALERT("Leave fm_proc_read. cnt = %d\n", cnt); - return cnt; -} - - -static int fm_destroy(struct fm *fm) -{ - int err = 0; - - FM_DEBUG("%s\n", __func__); - - device_destroy(fm->cls, fm->dev_t); - class_destroy(fm->cls); - - cdev_del(&fm->cdev); - unregister_chrdev_region(fm->dev_t, 1); - - fm_powerdown(fm); - - /***********************************/ - remove_proc_entry(FM_PROC_FILE, NULL); - - /**********************************/ - - // FIXME: any other hardware configuration ? - - // free all memory - kfree(fm); - - return err; -} - -/* - * fm_powerup - */ -static int fm_powerup(struct fm *fm, struct fm_tune_parm *parm) -{ - int i; - uint16_t tRegValue = 0x0002; - int ret = -1; - - - if (fm->powerup) - { - parm->err = FM_BADSTATUS; - return -EPERM; - } - - // if chip_id is ID_RDA5820NS, enable the FM chip in combo - if(fm->chip_id == ID_RDA5820NS){ - ret = rda_fm_power_on(); - if(ret < 0){ - return -EPERM; - } - msleep(100); - } - - - //Reset RDA FM - tRegValue = 0x0002; - RDAFM_write(fm->chipAddr, 0x02, tRegValue); - msleep(100); - - - - if (ID_RDA5802N == RDAFM_CHIP_ID){ - for (i=0; i<((sizeof(RDA5802N_initialization_reg)) / (sizeof(uint16_t))); i++) - { - ret = RDAFM_write(fm->chipAddr, i+2, RDA5802N_initialization_reg[i]); - - if (ret < 0) - { - FM_DEBUG("fm_powerup init failed!\n"); - - parm->err = FM_FAILED; - - return -EPERM; - } - } - - }else if (ID_RDA5820NS == RDAFM_CHIP_ID){ - if(RDA_RADIO_WorkType == FM_RECEIVER){ - for (i = 0; i < ((sizeof(RDA5820NS_RX_initialization_reg)) / (sizeof(RDA_FM_REG_T))); i++) - { - if(RDA5820NS_RX_initialization_reg[i].address == 0xFF){ - msleep(RDA5820NS_RX_initialization_reg[i].value); - }else{ - ret = RDAFM_write(fm->chipAddr, RDA5820NS_RX_initialization_reg[i].address, RDA5820NS_RX_initialization_reg[i].value); - if (ret < 0) - { - FM_DEBUG("fm_powerup init failed!\n"); - parm->err = FM_FAILED; - return -EPERM; - } - } - } - }else{ - for (i = 0; i < ((sizeof(RDA5820NS_TX_initialization_reg)) / (sizeof(RDA_FM_REG_T))); i++) - { - if(RDA5820NS_TX_initialization_reg[i].address == 0xFF){ - msleep(RDA5820NS_TX_initialization_reg[i].value); - }else{ - ret = RDAFM_write(fm->chipAddr, RDA5820NS_TX_initialization_reg[i].address, RDA5820NS_TX_initialization_reg[i].value); - if (ret < 0) - { - FM_DEBUG("fm_powerup init failed!\n"); - parm->err = FM_FAILED; - return -EPERM; - } - } - } - } - - } - - - FM_DEBUG("pwron ok\n"); - fm->powerup = true; - - if (fm_tune(fm, parm) < 0) - { - return -EPERM; - } - fm_tune_data.byPowerUp = true; - memcpy(&fm_tune_data.parm, parm, sizeof(fm_tune_data.parm)); - - parm->err = FM_SUCCESS; - - return 0; - -} - -/* - * fm_powerdown - */ -static int fm_powerdown(struct fm *fm) -{ - uint16_t tRegValue = 0; - int ret = -1; - - RDAFM_read(fm->chipAddr, 0x02, &tRegValue); - tRegValue &= (~(1 << 0)); - RDAFM_write(fm->chipAddr, 0x02, tRegValue); - - if(fm->chip_id == ID_RDA5820NS){ - ret = rda_fm_power_off(); - if(ret < 0){ - return -EPERM; - } - } - - fm->powerup = false; - FM_ALERT("pwrdown ok\n"); - - return 0; -} - -/* - * fm_seek - */ -static int fm_seek(struct fm *fm, struct fm_seek_parm *parm) -{ - int ret = 0; - uint16_t val = 0; - uint8_t spaec = 1; - uint16_t tFreq = 875; - uint16_t tRegValue = 0; - uint16_t bottomOfBand = 875; - int falseStation = -1; - - - if (!fm->powerup) - { - parm->err = FM_BADSTATUS; - return -EPERM; - } - - if (parm->space == FM_SPACE_100K) - { - spaec = 1; - val &= (~((1<<0) | (1<<1))); - } - else if (parm->space == FM_SPACE_200K) - { - spaec = 2; - val &= (~(1<<1)); - val |= (1<<0); - } - else - { - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->band == FM_BAND_UE) - { - val &= (~((1<<2) | (1<<3))); - bottomOfBand = 875; - fm->min_freq = 875; - fm->max_freq = 1080; - } - else if (parm->band == FM_BAND_JAPAN) - { - val &= (~(1<<3)); - val |= (1 << 2); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 910; - } - else if (parm->band == FM_BAND_JAPANW) { - val &= (~(1<<2)); - val |= (1 << 3); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 1080; - } - else - { - FM_ALERT("band:%d out of range\n", parm->band); - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->freq < fm->min_freq || parm->freq > fm->max_freq) { - FM_ALERT("freq:%d out of range\n", parm->freq); - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->seekth > 0x0B) { - FM_ALERT("seekth:%d out of range\n", parm->seekth); - parm->err = FM_EPARM; - return -EPERM; - } - - RDAFM_read(fm->chipAddr, 0x05, &tRegValue); - tRegValue &= (~(0x7f<<8)); - //tRegValue |= ((parm->seekth & 0x7f) << 8); - tRegValue |= ((0x8 & 0x7f) << 8); - RDAFM_write(fm->chipAddr, 0x05, tRegValue); - - -#ifdef FMDEBUG - if (parm->seekdir == FM_SEEK_UP) - FM_DEBUG("seek %d up\n", parm->freq); - else - FM_DEBUG("seek %d down\n", parm->freq); -#endif - - // (1) set hmute bit - RDAFM_enable_hmute(fm->chipAddr); - - tFreq = parm->freq; - - do { - - if (parm->seekdir == FM_SEEK_UP) - tFreq += spaec; - else - tFreq -= spaec; - - if (tFreq > fm->max_freq) - tFreq = fm->min_freq; - if (tFreq < fm->min_freq) - tFreq = fm->max_freq; - - val = (((tFreq - bottomOfBand+5) << 6) | (1 << 4) | (val & 0x0f)); - RDAFM_write(fm->chipAddr, 0x03, val); - msleep(40); - ret = RDAFM_read(fm->chipAddr, 0x0B, &tRegValue); - if (ret < 0) - { - FM_DEBUG("fm_seek: read register failed tunning freq = %4X\n", tFreq); - falseStation = -1; - } - else - { - if ((tRegValue & 0x0100) == 0x0100) - falseStation = 0; - else - falseStation = -1; - } - - if(falseStation == 0) - break; - - }while(tFreq != parm->freq); - - - //clear hmute - RDAFM_clear_hmute(fm->chipAddr); - - if (falseStation == 0) // seek successfully - { - parm->freq = tFreq; - FM_ALERT("fm_seek success, freq:%d\n", parm->freq); - parm->err = FM_SUCCESS; - - } - else - { - FM_ALERT("fm_seek failed, invalid freq\n"); - parm->err = FM_SEEK_FAILED; - ret = -1; - } - - return ret; -} - -/* - * fm_scan - */ -static int fm_scan(struct fm *fm, struct fm_scan_parm *parm) -{ - int ret = 0; - uint16_t tRegValue = 0; - uint16_t scandir = RDA599X_FM_SCAN_UP; //scandir ËÑË÷·½Ïò - uint8_t space = 1; - - if (!fm->powerup){ - parm->err = FM_BADSTATUS; - return -EPERM; - } - - RDAFM_read(fm->chipAddr, 0x03, &tRegValue); - - if (parm->space == FM_SPACE_100K){ - space = 1; - tRegValue &= (~((1<<0) | (1<<1))); //set 03H's bit[1:0] to 00 - }else if (parm->space == FM_SPACE_200K) { - space = 2; - tRegValue &= (~(1<<1)); //clear bit[1] - tRegValue |= (1<<0); //set bit[0] - }else{ - //default - space = 1; - tRegValue &= (~((1<<0) | (1<<1))); //set 03H's bit[1:0] to 00 - } - - if(parm->band == FM_BAND_UE){ - tRegValue &= (~((1<<2) | (1<<3))); - fm->min_freq = 875; - fm->max_freq = 1080; - }else if(parm->band == FM_BAND_JAPAN){ - tRegValue &= (~(1<<3)); - tRegValue |= (1 << 2); - fm->min_freq = 760; - fm->max_freq = 900; - }else if(parm->band == FM_BAND_JAPANW){ - tRegValue &= (~(1<<2)); - tRegValue |= (1 << 3); - fm->min_freq = 760; - fm->max_freq = 1080; - }else{ - parm->err = FM_EPARM; - return -EPERM; - } - - //set space and band - RDAFM_write(fm->chipAddr, 0x03, tRegValue); - msleep(40); - - - if(RDAFM_Scan(fm->chipAddr, fm->min_freq, fm->max_freq, &(parm->freq), parm->ScanTBL, &(parm->ScanTBLSize), scandir, space)){ - parm->err = FM_SUCCESS; - }else{ - parm->err = FM_SEEK_FAILED; - } - - return ret; -} - - -static int fm_setvol(struct fm *fm, uint32_t vol) -{ - int ret = 0; - uint16_t tRegValue = 0; - - if (vol > 15) - vol = 15; - - FM_DEBUG("fm_setvol:%d\n", vol); - - ret = RDAFM_read(fm->chipAddr, 0x05, &tRegValue); - if (ret) - return -EPERM; - tRegValue &= ~(0x000f); - tRegValue |= vol; - - ret = RDAFM_write(fm->chipAddr, 0x05, tRegValue); - if (ret) - return -EPERM; - - return 0; -} - -static int fm_getvol(struct fm *fm, uint32_t *vol) -{ - int ret = 0; - uint16_t tRegValue; - - ret = RDAFM_read(fm->chipAddr, 0x05, &tRegValue); - if (ret) - return -EPERM; - - if (ret) - return -EPERM; - - *vol = (tRegValue & 0x000F); - - return 0; -} - -static int fm_getrssi(struct fm *fm, uint32_t *rssi) -{ - int ret = 0; - uint16_t tRegValue; - - ret = RDAFM_read(fm->chipAddr, 0x0B, &tRegValue); - if (ret) - return -EPERM; - - - *rssi = (uint32_t)((tRegValue >> 9) & RDAFM_MASK_RSSI); - - FM_DEBUG("rssi value:%d\n", *rssi); - - return 0; -} - -/* - * fm_tune - */ -static int fm_tune(struct fm *fm, struct fm_tune_parm *parm) -{ - int ret; - uint16_t val = 0; - uint8_t space = 1; - uint16_t bottomOfBand = 875; - - - FM_DEBUG("%s\n", __func__); - - if (!fm->powerup) - { - parm->err = FM_BADSTATUS; - return -EPERM; - } - - if (parm->space == FM_SPACE_100K) - { - space = 1; - val &= (~((1<<0) | (1<<1))); - } - else if (parm->space == FM_SPACE_200K) - { - space = 2; - val |= (1<<0); - val &= (~(1<<1)); - } - else - { - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->band == FM_BAND_UE) - { - val &= (~((1<<2) | (1<<3))); - bottomOfBand = 875; - fm->min_freq = 875; - fm->max_freq = 1080; - } - else if (parm->band == FM_BAND_JAPAN) - { - val &= (~(1<<3)); - val |= (1 << 2); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 910; - } - else if (parm->band == FM_BAND_JAPANW) { - val &= (~(1<<2)); - val |= (1 << 3); - bottomOfBand = 760; - fm->min_freq = 760; - fm->max_freq = 1080; - } - else - { - FM_ALERT("band:%d out of range\n", parm->band); - parm->err = FM_EPARM; - return -EPERM; - } - - if (parm->freq < fm->min_freq || parm->freq > fm->max_freq) { - FM_ALERT("freq:%d out of range\n", parm->freq); - parm->err = FM_EPARM; - return -EPERM; - } - - FM_DEBUG("fm_tune, freq:%d\n", parm->freq); - - - val = (((parm->freq - bottomOfBand + 5) << 6) | (1 << 4) | (val & 0x0f)); - - ret = RDAFM_write(fm->chipAddr, 0x03, val); - if (ret < 0) - { - FM_ALERT("fm_tune write freq failed\n"); - parm->err = FM_SEEK_FAILED; - return ret; - } - msleep(40); - - return ret; -} - - -static int mt_fm_probe(struct platform_device *pdev) -{ - int err = -1; - FM_DEBUG("mt_fm_probe\n"); - - if ((err = fm_init())) - { - FM_ALERT("fm_init ERR:%d\n", err); - } - - return err; -} - -static int mt_fm_remove(struct platform_device *pdev) -{ - FM_DEBUG("mt_fm_remove\n"); - - struct fm *fm = g_fm_struct; - if(fm) - { - fm_destroy(fm); - fm = NULL; - } - - return 0; -} - - -static struct platform_driver mt_fm_dev_drv = -{ - .probe = mt_fm_probe, - .remove = mt_fm_remove, - .driver = { - .name = FM_NAME, - .owner = THIS_MODULE, - } -}; - -#if defined(MTK_MT6515) -static struct platform_device mt_fm_device = { - .name = FM_NAME, - .id = -1, -}; -#endif - - -/* - * mt_fm_init - */ -static int __init mt_fm_init(void) -{ - int err = 0; - - FM_DEBUG("mt_fm_init\n"); -#if defined(MTK_MT6515) - err = platform_device_register(&mt_fm_device); - if(err){ - FM_DEBUG("platform_device_register fail\n"); - return err; - }else{ - FM_DEBUG("platform_device_register success\n"); - } -#endif - err = platform_driver_register(&mt_fm_dev_drv); - if (err) - { - FM_DEBUG("platform_driver_register failed\n"); - }else{ - FM_DEBUG("platform_driver_register success\n"); - } - - return err; -} - -/* - * mt_fm_exit - */ -static void __exit mt_fm_exit(void) -{ - FM_DEBUG("mt_fm_exit\n"); - platform_driver_unregister(&mt_fm_dev_drv); -#if defined(MTK_MT6515) - platform_device_unregister(&mt_fm_device); -#endif -} - -module_init(mt_fm_init); -module_exit(mt_fm_exit); - -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("MediaTek FM Driver"); -MODULE_AUTHOR("William Chung "); diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/Makefile b/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/Makefile deleted file mode 100755 index ab2ac900edd6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -obj-y := rda_5990_power_ctrl.o -#for 模拟I2C -#obj-y := rda_5990_power_ctrl_by_gpio.o diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/rda_5990_power_ctrl.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/rda_5990_power_ctrl.c deleted file mode 100755 index 82e0c018e7ee..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/rda_5990_power_ctrl.c +++ /dev/null @@ -1,1897 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - This file created by albert RDA Inc - */ - -#include -#include -#include -#include -#include -#include /* get the user-level API */ -#include -#include -#include - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define RDA5890_USE_CRYSTAL // if use share crystal should close this -#define RDA5990_USE_DCDC - -#define u32 unsigned int -#define u8 unsigned char -#define u16 unsigned short - -#define RDA_I2C_CHANNEL (0) -#define RDA_WIFI_CORE_ADDR (0x13 << 1) -#define RDA_WIFI_RF_ADDR (0x14 << 1) //correct add is 0x14 -#define RDA_BT_CORE_ADDR (0x15 << 1) -#define RDA_BT_RF_ADDR (0x16 << 1) - -#define I2C_MASTER_ACK (1<<0) -#define I2C_MASTER_RD (1<<4) -#define I2C_MASTER_STO (1<<8) -#define I2C_MASTER_WR (1<<12) -#define I2C_MASTER_STA (1<<16) - -#define RDA_WIFI_RF_I2C_DEVNAME "rda_wifi_rf_i2c" -#define RDA_WIFI_CORE_I2C_DEVNAME "rda_wifi_core_i2c" -#define RDA_BT_RF_I2C_DEVNAME "rda_bt_rf_i2c" -#define RDA_BT_CORE_I2C_DEVNAME "rda_bt_core_i2c" - -static struct mutex i2c_rw_lock; -//extern int -//i2c_register_board_info(int busnum, struct i2c_board_info const *info, -// unsigned n); - - -static unsigned short wlan_version = 0; -static struct wake_lock rda_5990_wake_lock; -static struct delayed_work rda_5990_sleep_worker; -static struct i2c_client * rda_wifi_core_client = NULL; -static struct i2c_client * rda_wifi_rf_client = NULL; -static struct i2c_client * rda_bt_core_client = NULL; -static struct i2c_client * rda_bt_rf_client = NULL; - -static const struct i2c_device_id wifi_rf_i2c_id[] = {{RDA_WIFI_RF_I2C_DEVNAME, 0}, {}}; -MODULE_DEVICE_TABLE(i2c, wifi_rf_i2c_id); - -static unsigned short wifi_rf_force[] = { RDA_I2C_CHANNEL, RDA_WIFI_RF_ADDR, I2C_CLIENT_END, I2C_CLIENT_END }; - -static struct i2c_board_info __initdata i2c_rda_wifi_rf={ I2C_BOARD_INFO(RDA_WIFI_RF_I2C_DEVNAME, (RDA_WIFI_RF_ADDR>>1))}; -static struct i2c_driver rda_wifi_rf_driver; - - - -static const struct i2c_device_id wifi_core_i2c_id[] = {{RDA_WIFI_CORE_I2C_DEVNAME, 0}, {}}; -MODULE_DEVICE_TABLE(i2c, wifi_core_i2c_id); - -static unsigned short wifi_core_force[] = { RDA_I2C_CHANNEL, RDA_WIFI_CORE_ADDR, I2C_CLIENT_END, I2C_CLIENT_END }; -static struct i2c_board_info __initdata i2c_rda_wifi_core={ I2C_BOARD_INFO(RDA_WIFI_CORE_I2C_DEVNAME, (RDA_WIFI_CORE_ADDR>>1))}; -static struct i2c_driver rda_wifi_core_driver; - - - -static const struct i2c_device_id bt_rf_i2c_id[] = {{RDA_BT_RF_I2C_DEVNAME, 0}, {}}; - -MODULE_DEVICE_TABLE(i2c, bt_rf_i2c_id); - -static unsigned short bt_rf_force[] = { RDA_I2C_CHANNEL, RDA_BT_RF_ADDR, I2C_CLIENT_END, I2C_CLIENT_END }; -static struct i2c_board_info __initdata i2c_rda_bt_rf={ I2C_BOARD_INFO(RDA_BT_RF_I2C_DEVNAME, (RDA_BT_RF_ADDR>>1))}; -static struct i2c_driver rda_bt_rf_driver; - -static const struct i2c_device_id bt_core_i2c_id[] = {{RDA_BT_CORE_I2C_DEVNAME, 0}, {}}; -MODULE_DEVICE_TABLE(i2c, bt_core_i2c_id); - -static unsigned short bt_core_force[] = { RDA_I2C_CHANNEL, RDA_BT_CORE_ADDR, I2C_CLIENT_END, I2C_CLIENT_END }; -static struct i2c_board_info __initdata i2c_rda_bt_core={ I2C_BOARD_INFO(RDA_BT_CORE_I2C_DEVNAME, (RDA_BT_CORE_ADDR>>1))}; -static struct i2c_driver rda_bt_core_driver; - - -static u8 isBigEnded = 0; -static u8 wifi_in_test_mode = 0; - -static int i2c_write_data_4_addr_4_data(struct i2c_client* client, const u32 addr, const u32 data) -{ - unsigned char ADDR[4], DATA[4]; - int ret = 0; - - if(!isBigEnded) - { - ADDR[0] = addr >> 24; - ADDR[1] = addr >> 16; - ADDR[2] = addr >> 8; - ADDR[3] = addr >> 0; - - DATA[0] = data >> 24; - DATA[1] = data >> 16; - DATA[2] = data >> 8; - DATA[3] = data >> 0; - } - else - { - memcpy(ADDR, &addr, sizeof(u32)); - memcpy(DATA, &data, sizeof(u32)); - } - - ret = i2c_master_send(client, (char*)ADDR, 4); - if (ret < 0) - { - printk(KERN_INFO "***i2c_write_data_4_addr_4_data send:0x%X err:%d\n", addr,ret); - return -1; - } - - ret = i2c_master_send(client, (char*)DATA, 4); - if (ret < 0) - { - printk(KERN_INFO "***i2c_write_data_4_addr_4_data send:0x%X err:%d\n", data,ret); - return -1; - } - - return 0; -} - - -static int i2c_read_4_addr_4_data(struct i2c_client* client, const u32 addr, u32* data) -{ - unsigned char ADDR[4], DATA[4]; - int ret = 0; - - if(!isBigEnded) - { - ADDR[0] = addr >> 24; - ADDR[1] = addr >> 16; - ADDR[2] = addr >> 8; - ADDR[3] = addr >> 0; - } - else - { - memcpy(ADDR, &addr, sizeof(u32)); - } - - ret = i2c_master_send(client, (char*)ADDR, 4); - if (ret < 0) - { - printk(KERN_INFO "***i2c_read_4_addr_4_data send:0x%X err:%d\n", addr,ret); - return -1; - } - - ret = i2c_master_recv(client, (char*)DATA, 4); - if (ret < 0) - { - printk(KERN_INFO "***i2c_read_4_addr_4_data send:0x%X err:%d\n", addr,ret); - return -1; - } - - if(!isBigEnded) - { - data[3] = DATA[0]; - data[2] = DATA[1]; - data[1] = DATA[2]; - data[0] = DATA[3]; - } - else - memcpy(data, DATA, sizeof(u32)); - - return 0; -} - - -static int i2c_write_1_addr_2_data(struct i2c_client* client, const u8 addr, const u16 data) -{ - unsigned char DATA[3]; - int ret = 0; - - if(!isBigEnded) - { - DATA[0] = addr; - DATA[1] = data >> 8; - DATA[2] = data >> 0; - } - else - { - DATA[0] = addr; - DATA[1] = data >> 0; - DATA[2] = data >> 8; - } - - ret = i2c_master_send(client, (char*)DATA, 3); - if (ret < 0) - { - printk(KERN_INFO "***i2c_write_1_addr_2_data send:0x%X err:%d bigendia: %d \n", addr,ret, isBigEnded); - return -1; - } - - return 0; -} - - -static int i2c_read_1_addr_2_data(struct i2c_client* client, const u8 addr, u16* data) -{ - unsigned char DATA[2]; - int ret = 0; - - ret = i2c_master_send(client, (char*)&addr, 1); - if (ret < 0) - { - printk(KERN_INFO "***i2c_read_1_addr_2_data send:0x%X err:%d\n", addr,ret); - return -1; - } - - ret = i2c_master_recv(client, DATA, 2); - if (ret < 0) - { - printk(KERN_INFO "***i2c_read_1_addr_2_data send:0x%X err:%d\n", addr,ret); - return -1; - } - - if(!isBigEnded) - { - *data = (DATA[0] << 8) | DATA[1]; - } - else - { - *data = (DATA[1] << 8) | DATA[0]; - } - return 0; -} - - -static int rda_wifi_rf_probe(struct i2c_client *client, const struct i2c_device_id *id) -{ - int result = 0; - - rda_wifi_rf_client = client; - return result; -} - -static int rda_wifi_rf_remove(struct i2c_client *client) -{ - return 0; -} - -static int rda_wifi_rf_detect(struct i2c_client *client, int kind, struct i2c_board_info *info) -{ - strcpy(info->type, RDA_WIFI_RF_I2C_DEVNAME); - return 0; -} - -static struct i2c_driver rda_wifi_rf_driver = { - .probe = rda_wifi_rf_probe, - .remove = rda_wifi_rf_remove, - .detect = rda_wifi_rf_detect, - .driver.name = RDA_WIFI_RF_I2C_DEVNAME, - .id_table = wifi_rf_i2c_id, -// .address_data = &rda_wifi_rf_addr_data, - //.address_list = (const unsigned short*) wifi_rf_force, -}; - -static int rda_wifi_core_detect(struct i2c_client *client, int kind, struct i2c_board_info *info) -{ - strcpy(info->type, RDA_WIFI_CORE_I2C_DEVNAME); - return 0; -} - -static int rda_wifi_core_probe(struct i2c_client *client, const struct i2c_device_id *id) -{ - int result = 0; - - rda_wifi_core_client = client; - return result; -} - -static int rda_wifi_core_remove(struct i2c_client *client) -{ - return 0; -} - -int rda_wifi_power_off(void); -static void rda_wifi_shutdown(struct i2c_client * client) -{ - printk("rda_wifi_shutdown \n"); - rda_wifi_power_off(); -} - -static struct i2c_driver rda_wifi_core_driver = -{ - .probe = rda_wifi_core_probe, - .remove = rda_wifi_core_remove, - .detect = rda_wifi_core_detect, - .shutdown = rda_wifi_shutdown, - .driver.name = RDA_WIFI_CORE_I2C_DEVNAME, - .id_table = wifi_core_i2c_id, - //.address_data = &rda_wifi_core_addr_data, - //.address_list = (const unsigned short*)wifi_core_force, -}; - -const u32 wifi_core_init_data[][2] = -{ - -}; - -u16 wifi_off_data[][2] = -{ - { 0x3F, 0x0001 }, //page up - { 0x31, 0x0B40 }, //power off wifi - { 0x3F, 0x0000 }, //page down -}; - -u16 wifi_en_data[][2] = -{ - //item:VerD_wf_on_2012_02_08 - {0x3f, 0x0001}, -#ifdef RDA5990_USE_DCDC /*houzhen update Mar 15 2012 */ - {0x23, 0x8FA1},//20111001 higher AVDD voltage to improve EVM to 0x8f21 download current -1db 0x8fA1>>0x8bA1 -#else - {0x23, 0x0FA1}, -#endif - {0x31, 0x0B40 }, //power off wifi -// {0x22, 0xD3C7},//for ver.c 20111109, txswitch - {0x24, 0x80C8},//freq_osc_in[1:0]00 0x80C8 >> 0x80CB - {0x27, 0x4925},//for ver.c20111109, txswitch - // {0x28, 0x80A1}, //BT_enable - {0x31, 0x8140},//enable wifi - {0x32, 0x0113},//set_ rdenout_ldooff_wf=0; rden4in_ldoon_wf=1 - // {0x39, 0x0004}, //uart switch to wf - {0x3F, 0x0000}, //page down -}; - - -u16 wifi_dc_cal_data[][2]= -{ - {0x3f, 0x0000}, - {0x30, 0x0248}, - {0x30, 0x0249}, - //{wait 200ms; } here -}; - -u16 wifi_dig_reset_data[][2]= -{ - {0x3F, 0x0001}, - {0x31, 0x8D40}, - {0x31, 0x8F40}, - {0x31, 0x8b40}, - {0x3F, 0x0000}, -}; - -u16 wifi_rf_init_data_verE[][2] = -{ - {0x3f, 0x0000}, - //{;;set_rf_swi},ch - {0x06, 0x0101}, - {0x07, 0x0101}, - {0x08, 0x0101}, - {0x09, 0x0101}, - {0x0A, 0x002C},//aain_0 - {0x0D, 0x0507}, - {0x0E, 0x2300}, - {0x0F, 0x5689},// - //{;;//set_RF }, - {0x10, 0x0f78},//20110824 - {0x11, 0x0602}, - {0x13, 0x0652},//adc_tuning_bit[011] - {0x14, 0x8886}, - {0x15, 0x0990}, - {0x16, 0x049f}, - {0x17, 0x0990}, - {0x18, 0x049F}, - {0x19, 0x3C01}, - {0x1C, 0x0934}, - {0x1D, 0xFF00},//for ver.D20120119for temperature 70 degree - //{0x1F, 0x01F8},//for ver.c20111109 - //{0x1F, 0x0300},//for burst tx 不锁 - {0x20, 0x06E4}, - {0x21, 0x0ACF},//for ver.c20111109,dr dac reset,dr txflt reset - {0x22, 0x24DC}, - {0x23, 0x23FF}, - {0x24, 0x00FC}, - {0x26, 0x004F},//004F >> 005f premote pa - {0x27, 0x171D},///mdll*7 - {0x28, 0x031D},///mdll*7 - {0x2A, 0x2860},//et0x2849-8.5p :yd 0x2861-7pf C1,C2=6.8p - {0x2B, 0x0800},//bbpll,or ver.c20111116 - {0x32, 0x8a08}, - {0x33, 0x1D02},//liuyanan - //{;;//agc_gain}, - {0x36, 0x02f4}, //00F8;//gain_7 - {0x37, 0x01f4}, //0074;//aain_6 - {0x38, 0x21d4}, //0014;//gain_5 - {0x39, 0x25d4}, //0414;//aain_4 - {0x3A, 0x2584}, //1804;//gain_3 - {0x3B, 0x2dc4}, //1C04;//aain_2 - {0x3C, 0x2d04}, //1C02;//gain_1 - {0x3D, 0x2c02}, //3C01;//gain_0 - {0x33, 0x1502},//liuyanan - //{;;SET_channe},_to_11 - {0x1B, 0x0001},//set_channel - {0x30, 0x024D}, - {0x29, 0xD468}, - {0x29, 0x1468}, - {0x30, 0x0249}, - {0x3f, 0x0000}, -}; - -u16 wifi_rf_init_data[][2] = -{ - {0x3f, 0x0000}, - //{;;set_rf_swi},ch - {0x06, 0x0101}, - {0x07, 0x0101}, - {0x08, 0x0101}, - {0x09, 0x0101}, - {0x0A, 0x002C},//aain_0 - {0x0D, 0x0507}, - {0x0E, 0x2300},//2012_02_20 - {0x0F, 0x5689},// - //{;;//set_RF }, - {0x10, 0x0f78},//20110824 - {0x11, 0x0602}, - {0x13, 0x0652},//adc_tuning_bit[011] - {0x14, 0x8886}, - {0x15, 0x0990}, - {0x16, 0x049f}, - {0x17, 0x0990}, - {0x18, 0x049F}, - {0x19, 0x3C01},//sdm_vbit[3:0]=1111 - {0x1C, 0x0934}, - {0x1D, 0xFF00},//for ver.D20120119for temperature 70 degree 0xCE00 >> 0xFF00 - {0x1F, 0x0300},//div2_band_48g_dr=1;div2_band_48g_reg[8:0] - {0x20, 0x06E4}, - {0x21, 0x0ACF},//for ver.c20111109,dr dac reset,dr txflt reset - {0x22, 0x24DC}, - {0x23, 0x23FF}, - {0x24, 0x00FC}, - {0x26, 0x004F},//004F >> 005f premote pa - {0x27, 0x171D},///mdll*7 - {0x28, 0x031D},///mdll*7 - {0x2A, 0x2860},//et0x2849-8.5p :yd 0x2861-7pf - {0x2B, 0x0800},//bbpll,or ver.c20111116 - {0x32, 0x8a08}, - {0x33, 0x1D02},//liuyanan - //{;;//agc_gain}, - {0x36, 0x02f4}, //00F8;//gain_7 - {0x37, 0x01f4}, //0074;//aain_6 - {0x38, 0x21d4}, //0014;//gain_5 - {0x39, 0x25d4}, //0414;//aain_4 - {0x3A, 0x2584}, //1804;//gain_3 - {0x3B, 0x2dc4}, //1C04;//aain_2 - {0x3C, 0x2d04}, //1C02;//gain_1 - {0x3D, 0x2c02}, //3C01;//gain_0 - {0x33, 0x1502},//liuyanan - //{;;SET_channe},_to_11 - {0x1B, 0x0001},//set_channel - {0x30, 0x024D}, - {0x29, 0xD468}, - {0x29, 0x1468}, - {0x30, 0x0249}, - {0x3f, 0x0000}, -}; -u16 wifi_uart_debug_data[][2] = -{ - {0x3F,0x0001}, - {0x28,0x80A1}, //BT_enable - {0x39,0x0004}, //uart switch to wf - {0x3f,0x0000}, -}; - -u16 wifi_tm_en_data[][2] = -{ - {0x3F,0x0001}, -#ifdef RDA5990_USE_DCDC /*houzhen update Mar 15 2012 */ - {0x23, 0x8FA1},//20111001 higher AVDD voltage to improve EVM to 0x8f21 download current -1db 0x8fA1>>0x8bA1 -#else - {0x23, 0x0FA1}, -#endif - {0x22,0xD3C7},//for ver.c 20111109, tx - {0x24, 0x80C8},//freq_osc_in[1:0]00 0x80C8 >> 0x80CB - {0x27,0x4925},//for ver.c20111109, txs - {0x28,0x80A1}, //BT_enable - {0x29,0x111F}, - {0x31,0x8140}, - {0x32,0x0113},//set_ rdenout_ldooff_wf - {0x39,0x0004},//uart switch to wf - {0x3f,0x0000}, -}; - -u16 wifi_tm_rf_init_data[][2] = -{ - {0x3f, 0x0000}, - //set_rf_switch - {0x06,0x0101}, - {0x07,0x0101}, - {0x08,0x0101}, - {0x09,0x0101}, - {0x0A,0x002C},//aain_0 - {0x0D, 0x0507}, - {0x0E,0x2300},//2012_02_20 - {0x0F,0x5689},// - //set_RF - {0x10,0x0f78},//20110824 - {0x11,0x0602}, - {0x13,0x0652},//adc_tuning_bit[011] - {0x14,0x8886}, - {0x15,0x0990}, - {0x16,0x049f}, - {0x17,0x0990}, - {0x18,0x049F}, - {0x19,0x3C01},//sdm_vbit[3:0]=1111 - {0x1C,0x0934}, - {0x1D,0xFF00},//for ver.D20120119for temperature 70 degree - {0x1F,0x0300},//div2_band_48g_dr=1;div2_band_48g_reg[8:0]1000000000 - {0x20,0x06E4}, - {0x21,0x0ACF},//for ver.c20111109,dr dac reset,dr txflt reset - {0x22,0x24DC}, - {0x23,0x23FF}, - {0x24,0x00FC}, - {0x26,0x004F}, - {0x27,0x171D},///mdll*7 - {0x28,0x031D},///mdll*7 - {0x2A,0x2860}, - {0x2B,0x0800},//bbpll,or ver.c20111116 - {0x32,0x8a08}, - {0x33,0x1D02},//liuyanan - //agc_gain - {0x36,0x02f4}, //00F8;//gain_7 - {0x37,0x01f4}, //0074;//aain_6 - {0x38,0x21d4}, //0014;//gain_5 - {0x39,0x25d4}, //0414;//aain_4 - {0x3A,0x2584}, //1804;//gain_3 - {0x3B,0x2dc4}, //1C04;//aain_2 - {0x3C,0x2d04}, //1C02;//gain_1 - {0x3D,0x2c02}, //3C01;//gain_0 - //DC_CAL - {0x30,0x0248}, - {0x30,0x0249}, - //wait 200ms; - {0x33,0x1502},//liuyanan - //SET_channel_to_11 - {0x1B,0x0001},//set_channel - {0x3f,0x0000}, -}; - -/*houzhen update Mar 15 2012 - should be called when power up/down bt - */ -static int rda5990_wf_setup_A2_power(int enable) -{ - int ret; - u16 temp_data=0; - printk(KERN_INFO "***rda5990_wf_setup_A2_power start! \n"); - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0001); - if(ret) - goto err; - - if(enable) - { - ret=i2c_read_1_addr_2_data(rda_wifi_rf_client,0x22,&temp_data); - if(ret) - goto err; - printk(KERN_INFO "***0xA2 readback value:0x%X \n", temp_data); - - temp_data |=0x0200; /*en reg4_pa bit*/ -#ifdef RDA5890_USE_CRYSTAL - temp_data &= ~(1 << 14); //disable xen_out -#endif - ret=i2c_write_1_addr_2_data(rda_wifi_rf_client,0x22,temp_data); - if(ret) - goto err; - //read wlan version - ret = i2c_read_1_addr_2_data(rda_wifi_rf_client,0x21,&temp_data); - if(ret) - goto err; - else - wlan_version = temp_data; - } - else - { - ret=i2c_read_1_addr_2_data(rda_wifi_rf_client,0x28,&temp_data); - if(ret) - goto err; - if(temp_data&0x8000) // bt is on - { - goto out; - } - else - { - ret=i2c_read_1_addr_2_data(rda_wifi_rf_client,0x22,&temp_data); - if(ret) - goto err; - temp_data&=0xfdff; - - ret=i2c_write_1_addr_2_data(rda_wifi_rf_client,0x22,temp_data); - if(ret) - goto err; - } - wlan_version = 0; - } - -out: - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0000); - if(ret) - goto err; - printk(KERN_INFO "***rda5990_wf_setup_A2_power succeed! \n"); - return 0; - -err: - printk(KERN_INFO "***rda5990_wf_setup_A2_power failed! \n"); - return -1; -} - - -int rda_wifi_rf_init(void) -{ - unsigned int count = 0; - int ret = 0; - - mutex_lock(&i2c_rw_lock); - if( (wlan_version&0x1f) == 7) - { - for(count = 0; count < sizeof(wifi_rf_init_data)/sizeof(wifi_rf_init_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_rf_init_data[count][0], wifi_rf_init_data[count][1]); - if(ret) - goto err; - } - } - else if((wlan_version&0x1f) == 4 || (wlan_version&0x1f)==5) - { - for(count = 0; count < sizeof(wifi_rf_init_data_verE)/sizeof(wifi_rf_init_data_verE[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_rf_init_data_verE[count][0], wifi_rf_init_data_verE[count][1]); - if(ret) - goto err; - } - } - else - { - printk("unknown version of this 5990 chip\n"); - goto err; - } - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_init_succceed \n"); - msleep(5); //5ms delay - return 0; -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_init failed! \n"); - return -1; -} - -int rda_wifi_dc_cal(void) -{ - unsigned int count = 0; - int ret = 0; - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(wifi_dc_cal_data)/sizeof(wifi_dc_cal_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client ,wifi_dc_cal_data[count][0], wifi_dc_cal_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_dc_calsuccceed \n"); - msleep(50); //50ms delay - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_dc_calf_failed! \n"); - return -1; -} - -int rda_wifi_en(void) -{ - unsigned int count = 0; - int ret = 0; - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(wifi_en_data)/sizeof(wifi_en_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_en_data[count][0], wifi_en_data[count][1]); - if(ret) - goto err; - if(wifi_en_data[count][0] == 0x31) - msleep(10); //10ms delay - } - - ret=rda5990_wf_setup_A2_power(1); //en pa_reg for wf - if(ret) - goto err; - - mutex_unlock(&i2c_rw_lock); - msleep(8); //8ms delay - - printk(KERN_INFO "***rda_wifi_en_succceed \n"); - return 0; -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_power_on failed! \n"); - return -1; -} - -int rda_wifi_debug_en(void) -{ - unsigned int count = 0; - int ret = 0; - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(wifi_uart_debug_data)/sizeof(wifi_uart_debug_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_uart_debug_data[count][0], wifi_uart_debug_data[count][1]); - if(ret) - goto err; - } - -err: - mutex_unlock(&i2c_rw_lock); - return ret; -} - -int rda_tm_wifi_en(void) -{ - unsigned int count = 0; - int ret = 0; - unsigned short temp_data; - - for(count = 0; count < sizeof(wifi_tm_en_data)/sizeof(wifi_tm_en_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_tm_en_data[count][0], wifi_tm_en_data[count][1]); - if(ret) - goto err; - } - - msleep(8); //8ms delay - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0001); //PAGE UP - if(ret) - goto err; - - ret = i2c_read_1_addr_2_data(rda_wifi_rf_client,0x21,&temp_data); - if(ret) - goto err; - else - wlan_version = temp_data; - - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0000); //PAGE DOWN - if(ret) - goto err; - - - printk(KERN_INFO "***rda_wifi_en_succceed \n"); - return 0; -err: - printk(KERN_INFO "***rda_wifi_power_on failed! \n"); - return -1; -} - -int rda_tm_wifi_rf_init(void) -{ - unsigned int count = 0; - int ret = 0; - - for(count = 0; count < sizeof(wifi_tm_rf_init_data)/sizeof(wifi_tm_rf_init_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_tm_rf_init_data[count][0], wifi_tm_rf_init_data[count][1]); - if(ret) - goto err; - } - - printk(KERN_INFO "***rda_wifi_rf_init_succceed \n"); - msleep(5); //5ms delay - return 0; - -err: - printk(KERN_INFO "***rda_wifi_rf_init failed! \n"); - return -1; -} -/*houzhen add 2012 04 09 - add to ensure wf dig powerup - */ - -int rda_wifi_dig_reset(void) -{ - unsigned int count = 0; - int ret = 0; - msleep(8); //8ms delay - mutex_lock(&i2c_rw_lock); - - for(count = 0; count < sizeof(wifi_dig_reset_data)/sizeof(wifi_dig_reset_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_dig_reset_data[count][0], wifi_dig_reset_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - msleep(8); //8ms delay - printk(KERN_INFO "***rda_wifi_dig_reset \n"); - return 0; -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_dig_reset failed! \n"); - return -1; -} - -int rda_wlan_version(void) -{ - printk("******version %x \n", wlan_version); - return wlan_version; -} - -int rda_wifi_power_off(void) -{ - unsigned int count = 0; - int ret = 0; - u16 temp=0x0000; - printk(KERN_INFO "rda_wifi_power_off \n"); - - if(!rda_wifi_rf_client) - { - printk(KERN_INFO "rda_wifi_power_off failed on:i2c client \n"); - return -1; - } - - mutex_lock(&i2c_rw_lock); - ret=rda5990_wf_setup_A2_power(0); //disable pa_reg for wf - if(ret) - goto err; - - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0001); //page up - if(ret) - goto err; - - ret=i2c_read_1_addr_2_data(rda_wifi_rf_client,0x28,&temp); //poll bt status - if(ret) - goto err; - - if(temp&0x8000) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0000); //page down - if(ret) - goto err; - - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x0f, 0x2223); // set antenna for bt - if(ret) - goto err; - - } - - for(count = 0; count < sizeof(wifi_off_data)/sizeof(wifi_off_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, wifi_off_data[count][0], wifi_off_data[count][1]); - if(ret) - goto err; - } - printk(KERN_INFO "***rda_wifi_power_off success!!! \n"); - - - - mutex_unlock(&i2c_rw_lock); - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_power_off failed! \n"); - return -1; - -} - -int rda_wifi_power_on(void) -{ - int ret; - char retry = 3; - - printk("------------------rda_wifi_power_on\n"); - if(!rda_wifi_rf_client) - { - printk(KERN_INFO "rda_wifi_power_on failed on:i2c client \n"); - return -1; - } - -_retry: - - - if(!wifi_in_test_mode) - { - ret = rda_wifi_en(); - if(ret < 0) - goto err; - - ret = rda_wifi_rf_init(); - if(ret < 0) - goto err; - - ret = rda_wifi_dc_cal(); - if(ret < 0) - goto err; - - msleep(20); //20ms delay - ret=rda_wifi_dig_reset(); //houzhen add to ensure wf power up safely - - if(ret < 0) - goto err; - msleep(20); //20ms delay - } - else - { - ret = rda_tm_wifi_en(); - if(ret < 0) - goto err; - - ret = rda_tm_wifi_rf_init(); - if(ret < 0) - goto err; - } - printk(KERN_INFO "rda_wifi_power_on_succeed!! \n"); - - return 0; - -err: - printk(KERN_INFO "rda_wifi_power_on_failed retry:%d \n", retry); - if(retry -- > 0) - { - rda_wifi_power_off(); - goto _retry; - } - - return -1; -} - -extern int rda_wifi_power_on(void); - -int rda_fm_power_on(void) -{ - int ret = 0; - u16 temp = 0; - - if(!rda_wifi_rf_client) - { - printk(KERN_INFO "rda_wifi_rf_client is NULL, rda_fm_power_on failed!\n"); - return -1; - } - - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0001); // page down - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = i2c_read_1_addr_2_data(rda_wifi_rf_client, 0x22, &temp); //read 0xA2 - if(ret < 0){ - printk(KERN_INFO "%s() read from address(0x%02x) failed! \n", __func__, 0x22); - return -1; - } - temp = temp & (~(1 << 15)); //clear bit[15] - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x22, temp); //write back - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0000); // page up - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - - return 0; -} - -int rda_fm_power_off(void) -{ - int ret = 0; - u16 temp = 0; - - if(!rda_wifi_rf_client) - { - printk(KERN_INFO "rda_wifi_rf_client is NULL, rda_fm_power_off failed!\n"); - return -1; - } - - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0001); // page down - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = i2c_read_1_addr_2_data(rda_wifi_rf_client, 0x22, &temp); //read 0xA2 - if(ret < 0){ - printk(KERN_INFO "%s() read from address(0x%02x) failed! \n", __func__, 0x22); - return -1; - } - temp = temp | (1 << 15); //set bit[15] - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x22, temp); //write back - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, 0x3f, 0x0000); // page up - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - - return 0; -} - -static int rda_bt_rf_probe(struct i2c_client *client, const struct i2c_device_id *id) -{ - int result = 0; - - rda_bt_rf_client = client; - return result; -} - -static int rda_bt_rf_remove(struct i2c_client *client) -{ - rda_bt_rf_client = NULL; - return 0; -} - -static int rda_bt_rf_detect(struct i2c_client *client, int kind, struct i2c_board_info *info) -{ - strcpy(info->type, RDA_BT_RF_I2C_DEVNAME); - return 0; -} - -static struct i2c_driver rda_bt_rf_driver = { - .probe = rda_bt_rf_probe, - .remove = rda_bt_rf_remove, - .detect = rda_bt_rf_detect, - .driver.name = RDA_BT_RF_I2C_DEVNAME, - .id_table = bt_rf_i2c_id, - //.address_data = &rda_bt_rf_addr_data, - //.address_list = (const unsigned short*)bt_rf_force, -}; - - -static int rda_bt_core_detect(struct i2c_client *client, int kind, struct i2c_board_info *info) -{ - strcpy(info->type, RDA_BT_CORE_I2C_DEVNAME); - return 0; -} - -static int rda_bt_core_probe(struct i2c_client *client, const struct i2c_device_id *id) -{ - int result = 0; - - rda_bt_core_client = client; - return result; -} - -static int rda_bt_core_remove(struct i2c_client *client) -{ - return 0; -} - -static struct i2c_driver rda_bt_core_driver = { - .probe = rda_bt_core_probe, - .remove = rda_bt_core_remove, - .detect = rda_bt_core_detect, - .driver.name = RDA_BT_CORE_I2C_DEVNAME, - .id_table = bt_core_i2c_id, - //.address_data = &rda_bt_core_addr_data, - //.address_list = (const unsigned short*)bt_core_force, -}; - -u16 rda_5990_bt_off_data[][2] = -{ - {0x3f, 0x0001 }, //pageup - {0x28, 0x00A1 }, //power off bt - {0x3f, 0x0000 }, //pagedown -}; - -/*houzhen update 2012 03 06*/ -u16 rda_5990_bt_en_data[][2] = -{ - {0x3f, 0x0001 }, //pageup -#ifdef RDA5990_USE_DCDC - {0x23, 0x8FA1}, // //20111001 higher AVDD voltage to improve EVM -#else - {0x23, 0x0FA1}, -#endif - {0x24, 0x80C8}, // ;//freq_osc_in[1:0]00 - {0x26, 0x47A5}, // reg_vbit_normal_bt[2:0] =111 - {0x27, 0x4925}, // //for ver.c20111109, txswitch - {0x29, 0x111F}, // // rden4in_ldoon_bt=1 - {0x32, 0x0111}, // set_ rdenout_ldooff_wf=0; - {0x39, 0x0000}, // //uart switch to bt - - {0x28, 0x80A1}, // bt en - {0x3f, 0x0000}, //pagedown -}; - - -u16 rda_5990_bt_dc_cal[][2] = -{ - {0x3f, 0x0000 }, - {0x30, 0x0129 }, - {0x30, 0x012B }, - {0x3f, 0x0000 }, -}; - - -u16 rda_5990_bt_set_rf_switch_data[][2] = -{ - {0x3f, 0x0000 }, - {0x0F, 0x2223 }, - {0x3f, 0x0000 }, -}; - - -u16 RDA5990_bt_enable_clk_data[][2] = -{ - {0x3f, 0x0000 }, - {0x30, 0x0040 }, - {0x2a, 0x285d }, - {0x3f, 0x0000 }, -}; - -u16 RDA5990_bt_dig_reset_data[][2] = -{ - {0x3f, 0x0001 }, //pageup - {0x28, 0x86A1 }, - {0x28, 0x87A1 }, - {0x28, 0x85A1 }, - {0x3f, 0x0000 }, //pagedown -}; - -/*houzhen update 2012 03 06*/ -u16 rda_5990_bt_rf_data[][2] = -{ - {0x3f, 0x0000}, //pagedown - {0x01, 0x1FFF}, - {0x06, 0x07F7}, - {0x08, 0x29E7}, - {0x09, 0x0520}, - {0x0B, 0x03DF}, - {0x0C, 0x85E8}, - {0x0F, 0x0DBC}, - {0x12, 0x07F7}, - {0x13, 0x0327}, - {0x14, 0x0CCC}, - {0x15, 0x0526}, - {0x16, 0x8918}, - {0x18, 0x8800}, - {0x19, 0x10C8}, - {0x1A, 0x9078}, - {0x1B, 0x80E2}, - {0x1C, 0x361F}, - {0x1D, 0x4363}, - {0x1E, 0x303F}, - {0x23, 0x2222}, - {0x24, 0x359D}, - {0x27, 0x0011}, - {0x28, 0x124F}, - {0x39, 0xA5FC}, - {0x3f, 0x0001}, //page 1 - {0x00, 0x043F}, - {0x01, 0x467F}, - {0x02, 0x28FF}, - {0x03, 0x67FF}, - {0x04, 0x57FF}, - {0x05, 0x7BFF}, - {0x06, 0x3FFF}, - {0x07, 0x7FFF}, - {0x18, 0xF3F5}, - {0x19, 0xF3F5}, - {0x1A, 0xE7F3}, - {0x1B, 0xF1FF}, - {0x1C, 0xFFFF}, - {0x1D, 0xFFFF}, - {0x1E, 0xFFFF}, - {0x1F, 0xFFFF}, - // {0x22, 0xD3C7}, - // {0x23, 0x8fa1}, - // {0x24, 0x80c8}, - // {0x26, 0x47A5}, - // {0x27, 0x4925}, - // {0x28, 0x85a1}, - // {0x29, 0x111f}, - // {0x32, 0x0111}, - // {0x39, 0x0000}, - {0x3f, 0x0000}, //pagedown -}; - -/*houzhen update Mar 15 2012 - should be called when power up/down bt - */ -static int rda5990_bt_setup_A2_power(int enable) -{ - int ret; - u16 temp_data=0; - - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, 0x3f, 0x0001); - if(ret) - goto err; - - if(enable) - { - ret=i2c_read_1_addr_2_data(rda_bt_rf_client,0x22,&temp_data); - if(ret) - goto err; - printk(KERN_INFO "***0xA2 readback value:0x%X \n", temp_data); - - temp_data |=0x0200; /*en reg4_pa bit*/ - - ret=i2c_write_1_addr_2_data(rda_bt_rf_client,0x22,temp_data); - if(ret) - goto err; - } - else - { - ret=i2c_read_1_addr_2_data(rda_bt_rf_client,0x31,&temp_data); - if(ret) - goto err; - - if(temp_data&0x8000) // wf is on - { - goto out; - } - else - { - ret=i2c_read_1_addr_2_data(rda_bt_rf_client,0x22,&temp_data); - if(ret) - goto err; - temp_data&=0xfdff; - - ret=i2c_write_1_addr_2_data(rda_bt_rf_client,0x22,temp_data); - if(ret) - goto err; - } - - } - -out: - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, 0x3f, 0x0000); - if(ret) - goto err; - return 0; - -err: - printk(KERN_INFO "***rda5990_bt_setup_A2_power failed! \n"); - return -1; -} - -int rda_bt_power_off(void); - -int rda_bt_power_on(void) -{ - unsigned int count = 0; - int ret = 0; - - printk(KERN_INFO "rda_bt_power_on \n"); - - if(!rda_bt_rf_client || !rda_bt_rf_client) - { - printk(KERN_INFO "rda_bt_power_on failed on:i2c client \n"); - return -1; - } - - mutex_lock(&i2c_rw_lock); - - for(count = 0; count < sizeof(rda_5990_bt_en_data)/sizeof(rda_5990_bt_en_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, rda_5990_bt_en_data[count][0], rda_5990_bt_en_data[count][1]); - if(ret) - goto err; - } - - ret=rda5990_bt_setup_A2_power(1); - if(ret) - { - printk(KERN_INFO "***rda5990_bt_setup_A2_power fail!!! \n"); - goto err; - } - - printk(KERN_INFO "***rda_bt_power_on success!!! \n"); - - mutex_unlock(&i2c_rw_lock); - /*houzhen update 2012 03 06*/ - msleep(10); //delay 10 ms after power on - - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_power_on failed! \n"); - return -1; - -} - -int rda_bt_power_off(void) -{ - unsigned int count = 0; - int ret = 0; - printk(KERN_INFO "rda_bt_power_off \n"); - - if(!rda_bt_rf_client) - { - printk(KERN_INFO "rda_bt_power_off failed on:i2c client \n"); - return -1; - } - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(rda_5990_bt_off_data)/sizeof(rda_5990_bt_off_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_bt_rf_client ,rda_5990_bt_off_data[count][0], rda_5990_bt_off_data[count][1]); - if(ret) - goto err; - } - msleep(10); //10ms - printk(KERN_INFO "***rda_bt_power_off success!!! \n"); - - ret=rda5990_bt_setup_A2_power(0);//disable ldo_pa reg - if(ret) - goto err; - - - - mutex_unlock(&i2c_rw_lock); - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_power_off failed! \n"); - return -1; - -} - - -int RDA5990_bt_rf_init(void) -{ - unsigned int count = 0; - int ret = 0; - printk(KERN_INFO "RDA5990_bt_rf_init \n"); - - if(!rda_bt_rf_client) - { - printk(KERN_INFO "RDA5990_bt_rf_init on:i2c client \n"); - return -1; - } - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(rda_5990_bt_rf_data)/sizeof(rda_5990_bt_rf_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, rda_5990_bt_rf_data[count][0], rda_5990_bt_rf_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_rf_init success!!! \n"); - msleep(5); //5ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_rf_init failed! \n"); - return -1; - -} - -/*houzhen add 2012 04 09 - add to ensure bt dig powerup - */ - -int RDA5990_bt_dig_reset(void) -{ - unsigned int count = 0; - int ret = 0; - - printk(KERN_INFO "RDA5990_bt_dig_reset \n"); - if(!rda_bt_rf_client) - { - printk(KERN_INFO "RDA5990_bt_dig_reset on:i2c client \n"); - return -1; - } - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(RDA5990_bt_dig_reset_data)/sizeof(RDA5990_bt_dig_reset_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, RDA5990_bt_dig_reset_data[count][0], RDA5990_bt_dig_reset_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_rf_init success!!! \n"); - msleep(5); //5ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_rf_init failed! \n"); - return -1; - -} - - -int RDA5990_bt_dc_cal(void) -{ - unsigned int count = 0; - int ret = 0; - printk(KERN_INFO "rda_bt_dc_cal \n"); - - if(!rda_bt_rf_client) - { - printk(KERN_INFO "rda_bt_rf_client \n"); - return -1; - } - mutex_lock(&i2c_rw_lock); - - for(count = 0; count < sizeof(rda_5990_bt_dc_cal)/sizeof(rda_5990_bt_dc_cal[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, rda_5990_bt_dc_cal[count][0], rda_5990_bt_dc_cal[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_dc_cal success!!! \n"); - msleep(200); //200ms - - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_dc_cal failed! \n"); - return -1; - -} - - - -/*houzhen update Mar 15 2012 - bypass RDA5990_bt_set_rf_switch when wf is already on - */ - -int RDA5990_bt_set_rf_switch(void) -{ - unsigned int count = 0; - int ret = 0; - u16 temp_data=0; - printk(KERN_INFO "RDA5990_bt_set_rf_switch \n"); - - if(!rda_bt_rf_client || !rda_wifi_rf_client) - { - printk(KERN_INFO "RDA5990_bt_set_rf_switch failed on:i2c client \n"); - return -1; - } - - mutex_lock(&i2c_rw_lock); - - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, 0x3f, 0x0001); - if(ret) - goto err; - - ret=i2c_read_1_addr_2_data(rda_bt_rf_client,0x31,&temp_data); - - if(ret) - goto err; - - if(temp_data&0x8000) // if wf is already on - { - printk(KERN_INFO "wf already en, bypass RDA5990_bt_set_rf_switch function \n"); - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, 0x3f, 0x0000); - if(ret) - goto err; - mutex_unlock(&i2c_rw_lock); - return 0; - } - - for(count = 0; count < sizeof(rda_5990_bt_set_rf_switch_data)/sizeof(rda_5990_bt_set_rf_switch_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, rda_5990_bt_set_rf_switch_data[count][0], rda_5990_bt_set_rf_switch_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_set_rf_switch success!!! \n"); - msleep(50); //50ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_set_rf_switch failed! \n"); - return -1; - -} - - -/*houzhen update Mar 15 2012 - bypass RDA5990_bt_enable_clk when wf is already on - */ - -int RDA5990_bt_enable_clk(void) -{ - unsigned int count = 0; - int ret = 0; - u16 temp_data=0; - printk(KERN_INFO "RDA5990_bt_enable_clk \n"); - - if(!rda_bt_rf_client) - { - printk(KERN_INFO "RDA5990_bt_enable_clk failed on:i2c client \n"); - return -1; - } - - mutex_lock(&i2c_rw_lock); - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, 0x3f, 0x0001); - if(ret) - goto err; - - ret=i2c_read_1_addr_2_data(rda_bt_rf_client,0x31,&temp_data); - - if(ret) - goto err; - - if(temp_data&0x8000) // if wf is already on - { - printk(KERN_INFO "wf already en, bypass RDA5990_bt_enable_clk function \n"); - ret = i2c_write_1_addr_2_data(rda_bt_rf_client, 0x3f, 0x0000); - if(ret) - goto err; - mutex_unlock(&i2c_rw_lock); - return 0; - } - - - for(count = 0; count < sizeof(RDA5990_bt_enable_clk_data)/sizeof(RDA5990_bt_enable_clk_data[0]); count ++) - { - ret = i2c_write_1_addr_2_data(rda_wifi_rf_client, RDA5990_bt_enable_clk_data[count][0], RDA5990_bt_enable_clk_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_enable_clk success!!! \n"); - msleep(50); //50ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_enable_clk failed! \n"); - return -1; - -} - -//extern void mt_combo_bgf_enable_irq(void); -//extern void mt_combo_bgf_disable_irq(void); - -#define RDA_BT_IOCTL_MAGIC 'u' -#define RDA_BT_POWER_ON_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x01) -#define RD_BT_RF_INIT_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x02) -#define RD_BT_DC_CAL_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x03) -#define RD_BT_SET_RF_SWITCH_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x04) -#define RDA_BT_POWER_OFF_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x05) -#define RDA_BT_EN_CLK _IO(RDA_BT_IOCTL_MAGIC ,0x06) -#define RD_BT_DC_DIG_RESET_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x07) - -#define RDA_WIFI_POWER_ON_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x10) -#define RDA_WIFI_POWER_OFF_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x11) -#define RDA_WIFI_POWER_SET_TEST_MODE_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x12) -#define RDA_WIFI_POWER_CANCEL_TEST_MODE_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x13) -#define RDA_WIFI_DEBUG_MODE_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x14) - -extern int rk29sdk_wifi_set_carddetect(int val); -static int rda_5990_pw_ioctl(struct file *file, unsigned int cmd, unsigned long arg) -{ - int ret = 0; - - switch(cmd) - { - case RDA_WIFI_POWER_ON_IOCTL: - //rda_wifi_power_on(); - //rk29sdk_wifi_set_carddetect(1); - break; - - case RDA_WIFI_POWER_OFF_IOCTL: - //rk29sdk_wifi_set_carddetect(0); - //rda_wifi_power_off(); - break; - - case RDA_WIFI_POWER_SET_TEST_MODE_IOCTL: - wifi_in_test_mode = 1; - printk("****set rda wifi in test mode"); - break; - - case RDA_WIFI_POWER_CANCEL_TEST_MODE_IOCTL: - wifi_in_test_mode = 0; - printk("****set rda wifi in normal mode"); - break; - - case RDA_WIFI_DEBUG_MODE_IOCTL: - ret = rda_wifi_debug_en(); - break; - - case RDA_BT_POWER_ON_IOCTL: - { - ret = rda_bt_power_on(); - //mt_combo_bgf_enable_irq(); - } - break; - - /* should call thif function after bt_power_on*/ - case RDA_BT_EN_CLK: - ret = RDA5990_bt_enable_clk(); - break; - - case RD_BT_RF_INIT_IOCTL: - ret = RDA5990_bt_rf_init(); - break; - - case RD_BT_DC_CAL_IOCTL: - ret = RDA5990_bt_dc_cal(); - break; - - case RD_BT_DC_DIG_RESET_IOCTL: - ret = RDA5990_bt_dig_reset(); - break; - - case RD_BT_SET_RF_SWITCH_IOCTL: - ret = RDA5990_bt_set_rf_switch(); - break; - - case RDA_BT_POWER_OFF_IOCTL: - { - //mt_combo_bgf_disable_irq(); - ret = rda_bt_power_off(); - } - break; - - default: - break; - } - - printk(KERN_INFO "rda_bt_pw_ioctl cmd=0x%02x \n", cmd); - - return ret; -} -extern int rk29sdk_wifi_power(int on); -void mmc_rescan_slot(int id) -{ - rk29sdk_wifi_power(1); - rda_wifi_power_on(); - rk29sdk_wifi_set_carddetect(1); -} -EXPORT_SYMBOL(mmc_rescan_slot); - -void mmc_remove(int id) -{ - rk29sdk_wifi_set_carddetect(0); - rda_wifi_power_off(); - rk29sdk_wifi_power(0); -} -EXPORT_SYMBOL(mmc_remove); - -static int rda_5990_major; -static struct class *rda_5990_class = NULL; -static const struct file_operations rda_5990_operations = { - .owner = THIS_MODULE, - .unlocked_ioctl = rda_5990_pw_ioctl, - .release = NULL -}; - -void rda_5990_sleep_worker_task(struct work_struct *work) -{ - printk("---rda_5990_sleep_worker_task end"); - wake_unlock(&rda_5990_wake_lock); -} - -void rda_5990_set_wake_lock(void) -{ - wake_lock(&rda_5990_wake_lock); - cancel_delayed_work(&rda_5990_sleep_worker); - schedule_delayed_work(&rda_5990_sleep_worker, 6*HZ); -} - -int rda_5990_power_ctrl_init(void) -{ - int ret = 0; - printk("rda_5990_power_ctrl_init begin\n"); - - /*i2c_register_board_info(0, &i2c_rda_wifi_core, 1); - if (i2c_add_driver(&rda_wifi_core_driver)) - { - printk("rda_wifi_core_driver failed!\n"); - ret = -ENODEV; - return ret; - } - */ - - //i2c_register_board_info(0, &i2c_rda_wifi_rf, 1); - if (i2c_add_driver(&rda_wifi_rf_driver)) - { - printk("rda_wifi_rf_driver failed!\n"); - ret = -ENODEV; - return ret; - } - - /* - i2c_register_board_info(0, &i2c_rda_bt_core, 1); - if (i2c_add_driver(&rda_bt_core_driver)) - { - printk("rda_bt_core_driver failed!\n"); - ret = -ENODEV; - return ret; - } - */ - - //i2c_register_board_info(0, &i2c_rda_bt_rf, 1); - if (i2c_add_driver(&rda_bt_rf_driver)) - { - printk("rda_bt_rf_driver failed!\n"); - ret = -ENODEV; - return ret; - } - - rda_5990_major = register_chrdev(0, "rda5990_power_ctrl", &rda_5990_operations); - if(rda_5990_major < 0) - { - printk(KERN_INFO "register rdabt_power_ctrl failed!!! \n"); - return rda_5990_major; - } - - rda_5990_class = class_create(THIS_MODULE, "rda_combo"); - if(IS_ERR(rda_5990_class)) - { - unregister_chrdev(rda_5990_major, "rdabt_power_ctrl"); - return PTR_ERR(rda_5990_class); - } - - device_create(rda_5990_class, NULL, MKDEV(rda_5990_major, 0), NULL, "rdacombo"); - - { - unsigned char* temp = NULL; - unsigned short testData = 0xffee; - temp = (unsigned char *)&testData; - if(*temp == 0xee) - isBigEnded = 0; - else - isBigEnded = 1; - } - - INIT_DELAYED_WORK(&rda_5990_sleep_worker, rda_5990_sleep_worker_task); - wake_lock_init(&rda_5990_wake_lock, WAKE_LOCK_SUSPEND, "RDA_sleep_worker_wake_lock"); - - mutex_init(&i2c_rw_lock); - printk("rda_5990_power_ctrl_init end\n"); - return 0; -} - -void rda_5990_power_ctrl_exit(void) -{ - i2c_del_driver(&rda_wifi_core_driver); - i2c_del_driver(&rda_wifi_rf_driver); - i2c_del_driver(&rda_bt_core_driver); - i2c_del_driver(&rda_bt_rf_driver); - - unregister_chrdev(rda_5990_major, "rdabt_power_ctrl"); - if(rda_5990_class) - class_destroy(rda_5990_class); - - cancel_delayed_work_sync(&rda_5990_sleep_worker); - wake_lock_destroy(&rda_5990_wake_lock); -} - -unsigned char rda_5990_wifi_in_test_mode(void) -{ - return wifi_in_test_mode; -} - - -static __inline__ void cfmakeraw(struct termios *s) -{ - s->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); - s->c_oflag &= ~OPOST; - s->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); - s->c_cflag &= ~(CSIZE|PARENB); - s->c_cflag |= CS8; -} - -static __inline__ int cfsetospeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ int cfsetispeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static int rda_wifi_init_uart(char *dev) -{ - int errno; - struct termios ti; - struct serial_struct ss; - int fd; - - fd = sys_open(dev, O_RDWR | O_NOCTTY, 0); - if (fd < 0) { - printk("Can't open serial port"); - return -1; - } - - sys_ioctl(fd, TCFLSH, TCIOFLUSH); - - /* Clear the cust flag */ - if((errno = sys_ioctl(fd, TIOCGSERIAL, &ss))<0){ - printk("BAUD: error to get the serial_struct info:%s\n", errno); - goto err; - } - - if (ss.flags & ASYNC_SPD_CUST) { - printk("clear ASYNC_SPD_CUST\r\n"); - ss.flags &= ~ASYNC_SPD_CUST; - } - if((errno = sys_ioctl(fd, TIOCSSERIAL, &ss))<0){ - printk("BAUD: error to set serial_struct:%s\n", errno); - goto err; - } - - if ((errno = sys_ioctl(fd, TCGETS, (long)&ti)) < 0) { - printk("unable to get UART port setting"); - printk("Can't get port settings"); - goto err; - } - - cfmakeraw(&ti); - - ti.c_cflag |= CLOCAL; - ti.c_cflag &= ~CRTSCTS; - ti.c_lflag = 0; - ti.c_cc[VTIME] = 5; /* 0.5 sec */ - ti.c_cc[VMIN] = 0; - - /* Set initial baudrate */ - cfsetospeed(&ti, B115200); - cfsetispeed(&ti, B115200); - - if ((errno = sys_ioctl(fd, TCSETS, (long)&ti)) < 0) { - printk("unable to set UART port setting"); - printk("Can't set port settings"); - goto err; - } - - errno = sys_ioctl(fd, TCFLSH, TCIOFLUSH); - if(errno < 0) - goto err; - - return fd; - -err: - if(fd > 0) - sys_close(fd); - - return -1; -} - -EXPORT_SYMBOL(rda_wlan_version); - -EXPORT_SYMBOL(rda_wifi_init_uart); -EXPORT_SYMBOL(rda_5990_wifi_in_test_mode); - -EXPORT_SYMBOL(rda_5990_set_wake_lock); -EXPORT_SYMBOL(rda_wifi_power_off); -EXPORT_SYMBOL(rda_wifi_power_on); -EXPORT_SYMBOL(rda_fm_power_on); -EXPORT_SYMBOL(rda_fm_power_off); - -module_init(rda_5990_power_ctrl_init); -module_exit(rda_5990_power_ctrl_exit); - -MODULE_LICENSE("GPL"); - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/rda_5990_power_ctrl_by_gpio.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/rda_5990_power_ctrl_by_gpio.c deleted file mode 100755 index 8f508c12de07..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_5990_power_ctrl/rda_5990_power_ctrl_by_gpio.c +++ /dev/null @@ -1,1462 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - This file created by albert RDA Inc - */ - -#include -#include -#include -#include -#include -#include /* get the user-level API */ -#include -#include -#include - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include -#include -#include - -#define RDA5890_USE_CRYSTAL //if use share crystal should close this -#define RDA5990_USE_DCDC - -#define u32 unsigned int -#define u8 unsigned char -#define u16 unsigned short - -extern int rda_gpio_i2c_read_1_addr_2_data(uint8_t chipAddr, uint8_t regAddr, uint16_t *buffer); -extern int rda_gpio_i2c_write_1_addr_2_data(uint8_t chipAddr, uint8_t regAddr, uint16_t data); -extern int rda_gpio_i2c_read_4_addr_4_data(uint8_t chipAddr, uint32_t regAddr, uint32_t *buffer); -extern int rda_gpio_i2c_write_4_addr_4_data(uint8_t chipAddr, uint32_t regAddr, uint32_t data); - - -//#define RDA_I2C_CHANNEL (0) -#define RDA_WIFI_CORE_ADDR (0x13) -#define RDA_WIFI_RF_ADDR (0x14) //correct add is 0x14 -#define RDA_BT_CORE_ADDR (0x15) -#define RDA_BT_RF_ADDR (0x16) - -static struct mutex i2c_rw_lock; -static unsigned short wlan_version = 0; -static struct wake_lock rda_5990_wake_lock; -static struct delayed_work rda_5990_sleep_worker; - -static u8 isBigEnded = 0; - -static u8 wifi_in_test_mode = 0; - -const u32 wifi_core_init_data[][2] = -{ - -}; - -u16 wifi_off_data[][2] = -{ - { 0x3F, 0x0001 }, //page up - { 0x31, 0x0B40 }, //power off wifi - { 0x3F, 0x0000 }, //page down -}; - -u16 wifi_en_data[][2] = -{ - //item:VerD_wf_on_2012_02_08 - {0x3f, 0x0001}, -#ifdef RDA5990_USE_DCDC /*houzhen update Mar 15 2012 */ - {0x23, 0x8FA1},//20111001 higher AVDD voltage to improve EVM to 0x8f21 download current -1db 0x8fA1>>0x8bA1 -#else - {0x23, 0x0FA1}, -#endif - {0x31, 0x0B40 }, //power off wifi -// {0x22, 0xD3C7},//for ver.c 20111109, txswitch - {0x24, 0x80C8},//freq_osc_in[1:0]00 0x80C8 >> 0x80CB - {0x27, 0x4925},//for ver.c20111109, txswitch - // {0x28, 0x80A1}, //BT_enable - {0x31, 0x8140},//enable wifi - {0x32, 0x0113},//set_ rdenout_ldooff_wf=0; rden4in_ldoon_wf=1 - // {0x39, 0x0004}, //uart switch to wf - {0x3F, 0x0000}, //page down -}; - - -u16 wifi_dc_cal_data[][2]= -{ - {0x3f, 0x0000}, - {0x30, 0x0248}, - {0x30, 0x0249}, - //{wait 200ms; } here -}; - -u16 wifi_dig_reset_data[][2]= -{ - {0x3F, 0x0001}, - {0x31, 0x8D40}, - {0x31, 0x8F40}, - {0x31, 0x8b40}, - {0x3F, 0x0000}, -}; - -u16 wifi_rf_init_data_verE[][2] = -{ - {0x3f, 0x0000}, - //{;;set_rf_swi},ch - {0x06, 0x0101}, - {0x07, 0x0101}, - {0x08, 0x0101}, - {0x09, 0x0101}, - {0x0A, 0x002C},//aain_0 - {0x0D, 0x0507}, - {0x0E, 0x2300}, - {0x0F, 0x5689},// - //{;;//set_RF }, - {0x10, 0x0f78},//20110824 - {0x11, 0x0602}, - {0x13, 0x0652},//adc_tuning_bit[011] - {0x14, 0x8886}, - {0x15, 0x0990}, - {0x16, 0x049f}, - {0x17, 0x0990}, - {0x18, 0x049F}, - {0x19, 0x3C01}, - {0x1C, 0x0934}, - {0x1D, 0xFF00},//for ver.D20120119for temperature 70 degree - //{0x1F, 0x01F8},//for ver.E should not set - //{0x1F, 0x0300},//for ver.E should not set - {0x20, 0x06E4}, - {0x21, 0x0ACF},//for ver.c20111109,dr dac reset,dr txflt reset - {0x22, 0x24DC}, - {0x23, 0x23FF}, - {0x24, 0x00FC}, - {0x26, 0x004F},//004F >> 005f premote pa - {0x27, 0x171D},///mdll*7 - {0x28, 0x031D},///mdll*7 - {0x2A, 0x2860},//et0x2849-8.5p :yd 0x2861-7pf C1,C2=6.8p - {0x2B, 0x0800},//bbpll,or ver.c20111116 - {0x32, 0x8a08}, - {0x33, 0x1D02},//liuyanan - //{;;//agc_gain}, - {0x36, 0x02f4}, //00F8;//gain_7 - {0x37, 0x01f4}, //0074;//aain_6 - {0x38, 0x21d4}, //0014;//gain_5 - {0x39, 0x25d4}, //0414;//aain_4 - {0x3A, 0x2584}, //1804;//gain_3 - {0x3B, 0x2dc4}, //1C04;//aain_2 - {0x3C, 0x2d04}, //1C02;//gain_1 - {0x3D, 0x2c02}, //3C01;//gain_0 - {0x33, 0x1502},//liuyanan - //{;;SET_channe},_to_11 - {0x1B, 0x0001},//set_channel - {0x30, 0x024D}, - {0x29, 0xD468}, - {0x29, 0x1468}, - {0x30, 0x0249}, - {0x3f, 0x0000}, -}; - -u16 wifi_rf_init_data[][2] = -{ - {0x3f, 0x0000}, - //{;;set_rf_swi},ch - {0x06, 0x0101}, - {0x07, 0x0101}, - {0x08, 0x0101}, - {0x09, 0x0101}, - {0x0A, 0x002C},//aain_0 - {0x0D, 0x0507}, - {0x0E, 0x2300}, - {0x0F, 0x5689},// - //{;;//set_RF }, - {0x10, 0x0f78},//20110824 - {0x11, 0x0602}, - {0x13, 0x0652},//adc_tuning_bit[011] - {0x14, 0x8886}, - {0x15, 0x0990}, - {0x16, 0x049f}, - {0x17, 0x0990}, - {0x18, 0x049F}, - {0x19, 0x3C01}, - {0x1C, 0x0934}, - {0x1D, 0xFF00},//for ver.D20120119for temperature 70 degree - //{0x1F, 0x01F8},//for ver.c20111109 - {0x1F, 0x0300},//for burst tx 不锁 - {0x20, 0x06E4}, - {0x21, 0x0ACF},//for ver.c20111109,dr dac reset,dr txflt reset - {0x22, 0x24DC}, - {0x23, 0x23FF}, - {0x24, 0x00FC}, - {0x26, 0x004F},//004F >> 005f premote pa - {0x27, 0x171D},///mdll*7 - {0x28, 0x031D},///mdll*7 - {0x2A, 0x2860},//et0x2849-8.5p :yd 0x2861-7pf C1,C2=6.8p - {0x2B, 0x0800},//bbpll,or ver.c20111116 - {0x32, 0x8a08}, - {0x33, 0x1D02},//liuyanan - //{;;//agc_gain}, - {0x36, 0x02f4}, //00F8;//gain_7 - {0x37, 0x01f4}, //0074;//aain_6 - {0x38, 0x21d4}, //0014;//gain_5 - {0x39, 0x25d4}, //0414;//aain_4 - {0x3A, 0x2584}, //1804;//gain_3 - {0x3B, 0x2dc4}, //1C04;//aain_2 - {0x3C, 0x2d04}, //1C02;//gain_1 - {0x3D, 0x2c02}, //3C01;//gain_0 - {0x33, 0x1502},//liuyanan - //{;;SET_channe},_to_11 - {0x1B, 0x0001},//set_channel - {0x30, 0x024D}, - {0x29, 0xD468}, - {0x29, 0x1468}, - {0x30, 0x0249}, - {0x3f, 0x0000}, -}; - -u16 wifi_uart_debug_data[][2] = -{ - {0x3F,0x0001}, - {0x28,0x80A1}, //BT_enable - {0x39,0x0004}, //uart switch to wf - {0x3f,0x0000}, -}; - -u16 wifi_tm_en_data[][2] = -{ - {0x3F,0x0001}, -#ifdef RDA5990_USE_DCDC /*houzhen update Mar 15 2012 */ - {0x23, 0x8FA1},//20111001 higher AVDD voltage to improve EVM to 0x8f21 download current -1db 0x8fA1>>0x8bA1 -#else - {0x23, 0x0FA1}, -#endif - {0x22,0xD3C7},//for ver.c 20111109, tx - {0x24, 0x80C8},//freq_osc_in[1:0]00 0x80C8 >> 0x80CB - {0x27,0x4925},//for ver.c20111109, txs - {0x28,0x80A1}, //BT_enable - {0x29,0x111F}, - {0x31,0x8140}, - {0x32,0x0113},//set_ rdenout_ldooff_wf - {0x39,0x0004},//uart switch to wf - {0x3f,0x0000}, -}; - -u16 wifi_tm_rf_init_data[][2] = -{ - {0x3f, 0x0000}, - //set_rf_switch - {0x06,0x0101}, - {0x07,0x0101}, - {0x08,0x0101}, - {0x09,0x0101}, - {0x0A,0x002C},//aain_0 - {0x0D,0x0507}, - {0x0E,0x2300},//2012_02_20 - {0x0F,0x5689},// - //set_RF - {0x10,0x0f78},//20110824 - {0x11,0x0602}, - {0x13,0x0652},//adc_tuning_bit[011] - {0x14,0x8886}, - {0x15,0x0990}, - {0x16,0x049f}, - {0x17,0x0990}, - {0x18,0x049F}, - {0x19,0x3C01},//sdm_vbit[3:0]=1111 - {0x1C,0x0934}, - {0x1D,0xCE00},//for ver.D20120119for temperature 70 degree - {0x1F,0x0300},//div2_band_48g_dr=1;div2_band_48g_reg[8:0]1000000000 - {0x20,0x06E4}, - {0x21,0x0ACF},//for ver.c20111109,dr dac reset,dr txflt reset - {0x22,0x24DC}, - {0x23,0x23FF}, - {0x24,0x00FC}, - {0x26,0x004F}, - {0x27,0x171D},///mdll*7 - {0x28,0x031D},///mdll*7 - {0x2A,0x2860}, - {0x2B,0x0800},//bbpll,or ver.c20111116 - {0x32,0x8a08}, - {0x33,0x1D02},//liuyanan - //agc_gain - {0x36,0x02f4}, //00F8;//gain_7 - {0x37,0x01f4}, //0074;//aain_6 - {0x38,0x21d4}, //0014;//gain_5 - {0x39,0x25d4}, //0414;//aain_4 - {0x3A,0x2584}, //1804;//gain_3 - {0x3B,0x2dc4}, //1C04;//aain_2 - {0x3C,0x2d04}, //1C02;//gain_1 - {0x3D,0x2c02}, //3C01;//gain_0 - //DC_CAL - {0x30,0x0248}, - {0x30,0x0249}, - //wait 200ms; - {0x33,0x1502},//liuyanan - //SET_channel_to_11 - {0x1B,0x0001},//set_channel - {0x3f,0x0000}, -}; - -/*houzhen update Mar 15 2012 - should be called when power up/down bt - */ -static int rda5990_wf_setup_A2_power(int enable) -{ - int ret; - u16 temp_data=0; - printk("***rda5990_wf_setup_A2_power start! \n"); - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0001); - if(ret) - goto err; - - if(enable) - { - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, &temp_data); - if(ret) - goto err; - printk("***0xA2 readback value:0x%X \n", temp_data); - - temp_data |=0x0200; /*en reg4_pa bit*/ -#ifdef RDA5890_USE_CRYSTAL - temp_data &= ~(1 << 14); //disable xen_out -#endif - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, temp_data); - if(ret) - goto err; - //read wlan version - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x21, &temp_data); - if(ret) - goto err; - else - wlan_version = temp_data; - } - else - { - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x28, &temp_data); - if(ret) - goto err; - if(temp_data&0x8000) // bt is on - { - goto out; - } - else - { - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, &temp_data); - if(ret) - goto err; - temp_data&=0xfdff; - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, temp_data); - if(ret) - goto err; - } - wlan_version = 0; - } - printk("rda5990_wf_setup_A2_power, version:%d", wlan_version); - -out: - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0000); - if(ret) - goto err; - printk("***rda5990_wf_setup_A2_power succeed! \n"); - return 0; - -err: - printk("***rda5990_wf_setup_A2_power failed! \n"); - return -1; -} - - -int rda_wifi_rf_init(void) -{ - unsigned int count = 0; - int ret = 0; - mutex_lock(&i2c_rw_lock); - if( (wlan_version&0x1f) == 7) - { - for(count = 0; count < sizeof(wifi_rf_init_data)/sizeof(wifi_rf_init_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_rf_init_data[count][0], wifi_rf_init_data[count][1]); - if(ret) - goto err; - } - } - else if((wlan_version&0x1f) == 4 || (wlan_version&0x1f)==5) - { - for(count = 0; count < sizeof(wifi_rf_init_data_verE)/sizeof(wifi_rf_init_data_verE[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_rf_init_data_verE[count][0], wifi_rf_init_data_verE[count][1]); - if(ret) - goto err; - } - } - else - { - printk("unknown version of this 5990 chip\n"); - goto err; - } - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_init_succceed \n"); - msleep(5); //5ms delay - return 0; -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_init failed! \n"); - return -1; -} - -int rda_wifi_dc_cal(void) -{ - unsigned int count = 0; - int ret = 0; - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(wifi_dc_cal_data)/sizeof(wifi_dc_cal_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_dc_cal_data[count][0], wifi_dc_cal_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_dc_calsuccceed \n"); - msleep(50); //50ms delay - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_rf_dc_calf_failed! \n"); - return -1; -} - -int rda_wifi_en(void) -{ - unsigned int count = 0; - int ret = 0; - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(wifi_en_data)/sizeof(wifi_en_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_en_data[count][0], wifi_en_data[count][1]); - if(ret) - goto err; - - if(wifi_en_data[count][0] == 0x31) - msleep(12); - } - - ret=rda5990_wf_setup_A2_power(1); //en pa_reg for wf - if(ret) - goto err; - - mutex_unlock(&i2c_rw_lock); - msleep(8); //8ms delay - - printk(KERN_INFO "***rda_wifi_en_succceed \n"); - return 0; -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_power_on failed! \n"); - return -1; -} - -int rda_wifi_debug_en(void) -{ - unsigned int count = 0; - int ret = 0; - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(wifi_uart_debug_data)/sizeof(wifi_uart_debug_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_uart_debug_data[count][0], wifi_uart_debug_data[count][1]); - if(ret) - goto err; - } - -err: - mutex_unlock(&i2c_rw_lock); - return ret; -} - -int rda_tm_wifi_en(void) -{ - unsigned int count = 0; - int ret = 0; - unsigned short temp_data; - - for(count = 0; count < sizeof(wifi_tm_en_data)/sizeof(wifi_tm_en_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_tm_en_data[count][0], wifi_tm_en_data[count][1]); - if(ret) - goto err; - } - - msleep(8); //8ms delay - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0001); //PAGE UP - if(ret) - goto err; - - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR,0x21,&temp_data); - if(ret) - goto err; - else - wlan_version = temp_data; - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0000); //PAGE DOWN - if(ret) - goto err; - - printk(KERN_INFO "***rda_wifi_en_succceed \n"); - return 0; -err: - printk(KERN_INFO "***rda_wifi_power_on failed! \n"); - return -1; -} - -int rda_tm_wifi_rf_init(void) -{ - unsigned int count = 0; - int ret = 0; - - for(count = 0; count < sizeof(wifi_tm_rf_init_data)/sizeof(wifi_tm_rf_init_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_tm_rf_init_data[count][0], wifi_tm_rf_init_data[count][1]); - if(ret) - goto err; - } - - printk(KERN_INFO "***rda_wifi_rf_init_succceed \n"); - msleep(5); //5ms delay - return 0; - -err: - printk(KERN_INFO "***rda_wifi_rf_init failed! \n"); - return -1; -} -/*houzhen add 2012 04 09 - add to ensure wf dig powerup - */ - -int rda_wifi_dig_reset(void) -{ - unsigned int count = 0; - int ret = 0; - msleep(8); //8ms delay - mutex_lock(&i2c_rw_lock); - - for(count = 0; count < sizeof(wifi_dig_reset_data)/sizeof(wifi_dig_reset_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_dig_reset_data[count][0], wifi_dig_reset_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - msleep(8); //8ms delay - printk(KERN_INFO "***rda_wifi_dig_reset \n"); - return 0; -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_dig_reset failed! \n"); - return -1; -} - -int rda_wlan_version(void) -{ - printk("******version %x \n", wlan_version); - return wlan_version; -} - -int rda_wifi_power_off(void) -{ - unsigned int count = 0; - int ret = 0; - u16 temp=0x0000; - printk(KERN_INFO "rda_wifi_power_off \n"); - - - mutex_lock(&i2c_rw_lock); - ret=rda5990_wf_setup_A2_power(0); //disable pa_reg for wf - if(ret) - goto err; - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0001); //page up - if(ret) - goto err; - - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x28, &temp); //poll bt status - if(ret) - goto err; - - if(temp&0x8000) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0000); //page down - if(ret) - goto err; - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x0f, 0x2223); // set antenna for bt - if(ret) - goto err; - - } - - - for(count = 0; count < sizeof(wifi_off_data)/sizeof(wifi_off_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, wifi_off_data[count][0], wifi_off_data[count][1]); - if(ret) - goto err; - } - printk(KERN_INFO "***rda_wifi_power_off success!!! \n"); - - - - mutex_unlock(&i2c_rw_lock); - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_wifi_power_off failed! \n"); - return -1; - -} - -int rda_wifi_power_on(void) -{ - int ret; - char retry = 3; - - -_retry: - - if(!wifi_in_test_mode) - { - ret = rda_wifi_en(); - if(ret < 0) - goto err; - - ret = rda_wifi_rf_init(); - if(ret < 0) - goto err; - - ret = rda_wifi_dc_cal(); - if(ret < 0) - goto err; - - msleep(20); //20ms delay - ret=rda_wifi_dig_reset(); //houzhen add to ensure wf power up safely - - if(ret < 0) - goto err; - msleep(20); //20ms delay - } - else - { - ret = rda_tm_wifi_en(); - if(ret < 0) - goto err; - - ret = rda_tm_wifi_rf_init(); - if(ret < 0) - goto err; - } - printk(KERN_INFO "rda_wifi_power_on_succeed!! \n"); - - return 0; - -err: - printk(KERN_INFO "rda_wifi_power_on_failed retry:%d \n", retry); - if(retry -- > 0) - { - rda_wifi_power_off(); - goto _retry; - } - - return -1; -} - -int rda_fm_power_on(void) -{ - int ret = 0; - u16 temp = 0; - - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0001); // page down - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, &temp); //read 0xA2 - if(ret < 0){ - printk(KERN_INFO "%s() read from address(0x%02x) failed! \n", __func__, 0x22); - return -1; - } - temp = temp & (~(1 << 15)); //clear bit[15] - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, temp); //write back - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0000); // page up - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - - return 0; -} - -int rda_fm_power_off(void) -{ - int ret = 0; - u16 temp = 0; - - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0001); // page down - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, &temp); //read 0xA2 - if(ret < 0){ - printk(KERN_INFO "%s() read from address(0x%02x) failed! \n", __func__, 0x22); - return -1; - } - temp = temp | (1 << 15); //set bit[15] - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x22, temp); //write back - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, 0x3f, 0x0000); // page up - if(ret < 0){ - printk(KERN_INFO "%s() write address(0x%02x) with value(0x%04x) failed! \n", __func__, 0x3f, 0x0001); - return -1; - } - - return 0; -} - - -u16 rda_5990_bt_off_data[][2] = -{ - {0x3f, 0x0001 }, //pageup - {0x28, 0x00A1 }, //power off bt - {0x3f, 0x0000 }, //pagedown -}; - -/*houzhen update 2012 03 06*/ -u16 rda_5990_bt_en_data[][2] = -{ - {0x3f, 0x0001 }, //pageup -#ifdef RDA5990_USE_DCDC - {0x23, 0x8FA1}, // //20111001 higher AVDD voltage to improve EVM -#else - {0x23, 0x0FA1}, -#endif - {0x24, 0x80C8}, // ;//freq_osc_in[1:0]00 - {0x26, 0x47A5}, // reg_vbit_normal_bt[2:0] =111 - {0x27, 0x4925}, // //for ver.c20111109, txswitch - {0x29, 0x111F}, // // rden4in_ldoon_bt=1 - {0x32, 0x0111}, // set_ rdenout_ldooff_wf=0; - {0x39, 0x0000}, // //uart switch to bt - - {0x28, 0x80A1}, // bt en - {0x3f, 0x0000}, //pagedown -}; - - -u16 rda_5990_bt_dc_cal[][2] = -{ - {0x3f, 0x0000 }, - {0x30, 0x0129 }, - {0x30, 0x012B }, - {0x3f, 0x0000 }, -}; - - -u16 rda_5990_bt_set_rf_switch_data[][2] = -{ - {0x3f, 0x0000 }, - {0x0F, 0x2223 }, - {0x3f, 0x0000 }, -}; - - -u16 RDA5990_bt_enable_clk_data[][2] = -{ - {0x3f, 0x0000 }, - {0x30, 0x0040 }, - {0x2a, 0x285d }, - {0x3f, 0x0000 }, -}; - -u16 RDA5990_bt_dig_reset_data[][2] = -{ - {0x3f, 0x0001 }, //pageup - {0x28, 0x86A1 }, - {0x28, 0x87A1 }, - {0x28, 0x85A1 }, - {0x3f, 0x0000 }, //pagedown -}; - -/*houzhen update 2012 03 06*/ -u16 rda_5990_bt_rf_data[][2] = -{ - {0x3f, 0x0000}, //pagedown - {0x01, 0x1FFF}, - {0x06, 0x07F7}, - {0x08, 0x29E7}, - {0x09, 0x0520}, - {0x0B, 0x03DF}, - {0x0C, 0x85E8}, - {0x0F, 0x0DBC}, - {0x12, 0x07F7}, - {0x13, 0x0327}, - {0x14, 0x0CCC}, - {0x15, 0x0526}, - {0x16, 0x8918}, - {0x18, 0x8800}, - {0x19, 0x10C8}, - {0x1A, 0x9078}, - {0x1B, 0x80E2}, - {0x1C, 0x361F}, - {0x1D, 0x4363}, - {0x1E, 0x303F}, - {0x23, 0x2222}, - {0x24, 0x359D}, - {0x27, 0x0011}, - {0x28, 0x124F}, - {0x39, 0xA5FC}, - {0x3f, 0x0001}, //page 1 - {0x00, 0x043F}, - {0x01, 0x467F}, - {0x02, 0x28FF}, - {0x03, 0x67FF}, - {0x04, 0x57FF}, - {0x05, 0x7BFF}, - {0x06, 0x3FFF}, - {0x07, 0x7FFF}, - {0x18, 0xF3F5}, - {0x19, 0xF3F5}, - {0x1A, 0xE7F3}, - {0x1B, 0xF1FF}, - {0x1C, 0xFFFF}, - {0x1D, 0xFFFF}, - {0x1E, 0xFFFF}, - {0x1F, 0xFFFF}, - // {0x22, 0xD3C7}, - // {0x23, 0x8fa1}, - // {0x24, 0x80c8}, - // {0x26, 0x47A5}, - // {0x27, 0x4925}, - // {0x28, 0x85a1}, - // {0x29, 0x111f}, - // {0x32, 0x0111}, - // {0x39, 0x0000}, - {0x3f, 0x0000}, //pagedown -}; - -/*houzhen update Mar 15 2012 - should be called when power up/down bt - */ -static int rda5990_bt_setup_A2_power(int enable) -{ - int ret; - u16 temp_data=0; - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x3f, 0x0001); - if(ret) - goto err; - - if(enable) - { - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_BT_RF_ADDR, 0x22, &temp_data); - if(ret) - goto err; - printk(KERN_INFO "***0xA2 readback value:0x%X \n", temp_data); - - temp_data |=0x0200; /*en reg4_pa bit*/ - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x22, temp_data); - if(ret) - goto err; - } - else - { - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_BT_RF_ADDR, 0x31, &temp_data); - if(ret) - goto err; - if(temp_data&0x8000) // wf is on - { - goto out; - } - else - { - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_BT_RF_ADDR, 0x22, &temp_data); - if(ret) - goto err; - temp_data&=0xfdff; - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x22, temp_data); - if(ret) - goto err; - } - - } - - -out: - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x3f, 0x0000); - if(ret) - goto err; - return 0; - -err: - printk(KERN_INFO "***rda5990_bt_setup_A2_power failed! \n"); - return -1; -} - -int rda_bt_power_off(void); - -int rda_bt_power_on(void) -{ - unsigned int count = 0; - int ret = 0; - - printk(KERN_INFO "rda_bt_power_on \n"); - - - mutex_lock(&i2c_rw_lock); - - for(count = 0; count < sizeof(rda_5990_bt_en_data)/sizeof(rda_5990_bt_en_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, rda_5990_bt_en_data[count][0], rda_5990_bt_en_data[count][1]); - - if(ret) - goto err; - } - - ret=rda5990_bt_setup_A2_power(1); - if(ret) - { - printk(KERN_INFO "***rda5990_bt_setup_A2_power fail!!! \n"); - goto err; - } - - printk(KERN_INFO "***rda_bt_power_on success!!! \n"); - - mutex_unlock(&i2c_rw_lock); - /*houzhen update 2012 03 06*/ - msleep(10); //delay 10 ms after power on - - - return 0; -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_power_on failed! \n"); - return -1; - -} - -int rda_bt_power_off(void) -{ - unsigned int count = 0; - int ret = 0; - printk(KERN_INFO "rda_bt_power_off \n"); - - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(rda_5990_bt_off_data)/sizeof(rda_5990_bt_off_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, rda_5990_bt_off_data[count][0], rda_5990_bt_off_data[count][1]); - if(ret) - goto err; - } - msleep(10); //10ms - printk(KERN_INFO "***rda_bt_power_off success!!! \n"); - - ret=rda5990_bt_setup_A2_power(0);//disable ldo_pa reg - if(ret) - goto err; - - - - mutex_unlock(&i2c_rw_lock); - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_power_off failed! \n"); - return -1; - -} - - -int RDA5990_bt_rf_init(void) -{ - unsigned int count = 0; - int ret = 0; - printk(KERN_INFO "RDA5990_bt_rf_init \n"); - - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(rda_5990_bt_rf_data)/sizeof(rda_5990_bt_rf_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, rda_5990_bt_rf_data[count][0], rda_5990_bt_rf_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_rf_init success!!! \n"); - msleep(5); //5ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_rf_init failed! \n"); - return -1; - -} - - - -/*houzhen add 2012 04 09 - add to ensure bt dig powerup - */ - -int RDA5990_bt_dig_reset(void) -{ - unsigned int count = 0; - int ret = 0; - - printk(KERN_INFO "RDA5990_bt_dig_reset \n"); - - mutex_lock(&i2c_rw_lock); - for(count = 0; count < sizeof(RDA5990_bt_dig_reset_data)/sizeof(RDA5990_bt_dig_reset_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, RDA5990_bt_dig_reset_data[count][0], RDA5990_bt_dig_reset_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_dig_reset success!!! \n"); - msleep(5); //5ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_dig_reset failed! \n"); - return -1; - -} - - -int RDA5990_bt_dc_cal(void) -{ - unsigned int count = 0; - int ret = 0; - printk(KERN_INFO "rda_bt_dc_cal \n"); - - mutex_lock(&i2c_rw_lock); - - for(count = 0; count < sizeof(rda_5990_bt_dc_cal)/sizeof(rda_5990_bt_dc_cal[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, rda_5990_bt_dc_cal[count][0], rda_5990_bt_dc_cal[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_dc_cal success!!! \n"); - msleep(200); //200ms - - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***rda_bt_dc_cal failed! \n"); - return -1; - -} - - - -/*houzhen update Mar 15 2012 - bypass RDA5990_bt_set_rf_switch when wf is already on - */ - -int RDA5990_bt_set_rf_switch(void) -{ - unsigned int count = 0; - int ret = 0; - u16 temp_data=0; - printk(KERN_INFO "RDA5990_bt_set_rf_switch \n"); - - - mutex_lock(&i2c_rw_lock); - - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x3f, 0x0001); - if(ret) - goto err; - - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_BT_RF_ADDR, 0x31, &temp_data); - - if(ret) - goto err; - - if(temp_data&0x8000) // if wf is already on - { - - printk(KERN_INFO "wf already en, bypass RDA5990_bt_set_rf_switch function \n"); - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x3f, 0x0000); - if(ret) - goto err; - mutex_unlock(&i2c_rw_lock); - return 0; - } - - for(count = 0; count < sizeof(rda_5990_bt_set_rf_switch_data)/sizeof(rda_5990_bt_set_rf_switch_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, rda_5990_bt_set_rf_switch_data[count][0], rda_5990_bt_set_rf_switch_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_set_rf_switch success!!! \n"); - msleep(50); //50ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_set_rf_switch failed! \n"); - return -1; - -} - - -/*houzhen update Mar 15 2012 - bypass RDA5990_bt_enable_clk when wf is already on - */ - -int RDA5990_bt_enable_clk(void) -{ - unsigned int count = 0; - int ret = 0; - u16 temp_data=0; - printk(KERN_INFO "RDA5990_bt_enable_clk \n"); - - mutex_lock(&i2c_rw_lock); - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x3f, 0x0001); - if(ret) - goto err; - - ret = rda_gpio_i2c_read_1_addr_2_data(RDA_BT_RF_ADDR, 0x31, &temp_data); - - if(ret) - goto err; - - if(temp_data&0x8000) // if wf is already on - { - - printk(KERN_INFO "wf already en, bypass RDA5990_bt_enable_clk function \n"); - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_BT_RF_ADDR, 0x3f, 0x0000); - if(ret) - goto err; - mutex_unlock(&i2c_rw_lock); - return 0; - } - - - for(count = 0; count < sizeof(RDA5990_bt_enable_clk_data)/sizeof(RDA5990_bt_enable_clk_data[0]); count ++) - { - ret = rda_gpio_i2c_write_1_addr_2_data(RDA_WIFI_RF_ADDR, RDA5990_bt_enable_clk_data[count][0], RDA5990_bt_enable_clk_data[count][1]); - if(ret) - goto err; - } - - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_enable_clk success!!! \n"); - msleep(50); //50ms - return 0; - -err: - mutex_unlock(&i2c_rw_lock); - printk(KERN_INFO "***RDA5990_bt_enable_clk failed! \n"); - return -1; - -} - -extern void mt_combo_bgf_enable_irq(void); -extern void mt_combo_bgf_disable_irq(void); - - -#define RDA_BT_IOCTL_MAGIC 'u' -#define RDA_BT_POWER_ON_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x01) -#define RD_BT_RF_INIT_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x02) -#define RD_BT_DC_CAL_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x03) -#define RD_BT_SET_RF_SWITCH_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x04) -#define RDA_BT_POWER_OFF_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x05) -#define RDA_BT_EN_CLK _IO(RDA_BT_IOCTL_MAGIC ,0x06) -#define RD_BT_DC_DIG_RESET_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x07) - -#define RDA_WIFI_POWER_ON_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x10) -#define RDA_WIFI_POWER_OFF_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x11) -#define RDA_WIFI_POWER_SET_TEST_MODE_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x12) -#define RDA_WIFI_POWER_CANCEL_TEST_MODE_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x13) -#define RDA_WIFI_DEBUG_MODE_IOCTL _IO(RDA_BT_IOCTL_MAGIC ,0x14) - -static int rda_5990_pw_ioctl(struct file *file, unsigned int cmd, unsigned long arg) -{ - int ret = 0; - - switch(cmd) - { - case RDA_WIFI_POWER_ON_IOCTL: - ret = rda_wifi_power_on(); - break; - - case RDA_WIFI_POWER_OFF_IOCTL: - ret = rda_wifi_power_off(); - break; - - case RDA_WIFI_POWER_SET_TEST_MODE_IOCTL: - wifi_in_test_mode = 1; - printk("****set rda wifi in test mode"); - break; - - case RDA_WIFI_POWER_CANCEL_TEST_MODE_IOCTL: - wifi_in_test_mode = 0; - printk("****set rda wifi in normal mode"); - break; - - case RDA_WIFI_DEBUG_MODE_IOCTL: - ret = rda_wifi_debug_en(); - break; - case RDA_BT_POWER_ON_IOCTL: - { - ret = rda_bt_power_on(); - mt_combo_bgf_enable_irq(); - } - break; - - /* should call thif function after bt_power_on*/ - case RDA_BT_EN_CLK: - ret = RDA5990_bt_enable_clk(); - break; - - case RD_BT_RF_INIT_IOCTL: - ret = RDA5990_bt_rf_init(); - break; - - case RD_BT_DC_CAL_IOCTL: - ret = RDA5990_bt_dc_cal(); - break; - - case RD_BT_DC_DIG_RESET_IOCTL: - ret = RDA5990_bt_dig_reset(); - break; - - case RD_BT_SET_RF_SWITCH_IOCTL: - ret = RDA5990_bt_set_rf_switch(); - break; - - case RDA_BT_POWER_OFF_IOCTL: - { - mt_combo_bgf_disable_irq(); - ret = rda_bt_power_off(); - } - break; - - default: - break; - } - - printk(KERN_INFO "rda_bt_pw_ioctl cmd=0x%02x \n", cmd); - - return ret; -} - -static int rda_5990_major; -static struct class *rda_5990_class = NULL; -static const struct file_operations rda_5990_operations = { - .owner = THIS_MODULE, - .unlocked_ioctl = rda_5990_pw_ioctl, - .release = NULL -}; - -void rda_5990_sleep_worker_task(struct work_struct *work) -{ - printk("---rda_5990_sleep_worker_task end"); - wake_unlock(&rda_5990_wake_lock); -} - -void rda_5990_set_wake_lock(void) -{ - wake_lock(&rda_5990_wake_lock); - cancel_delayed_work(&rda_5990_sleep_worker); - schedule_delayed_work(&rda_5990_sleep_worker, 6*HZ); -} - -int rda_5990_power_ctrl_init(void) -{ - int ret = 0; - - printk("rda_5990_power_ctrl_init begin\n"); - - rda_5990_major = register_chrdev(0, "rda5990_power_ctrl", &rda_5990_operations); - if(rda_5990_major < 0) - { - printk(KERN_INFO "register rdabt_power_ctrl failed!!! \n"); - return rda_5990_major; - } - - rda_5990_class = class_create(THIS_MODULE, "rda_combo"); - if(IS_ERR(rda_5990_class)) - { - unregister_chrdev(rda_5990_major, "rdabt_power_ctrl"); - return PTR_ERR(rda_5990_class); - } - - device_create(rda_5990_class, NULL, MKDEV(rda_5990_major, 0), NULL, "rdacombo"); - - - INIT_DELAYED_WORK(&rda_5990_sleep_worker, rda_5990_sleep_worker_task); - wake_lock_init(&rda_5990_wake_lock, WAKE_LOCK_SUSPEND, "RDA_sleep_worker_wake_lock"); - - mutex_init(&i2c_rw_lock); - printk("rda_5990_power_ctrl_init end\n"); - return 0; -} - -void rda_5990_power_ctrl_exit(void) -{ - - unregister_chrdev(rda_5990_major, "rdabt_power_ctrl"); - if(rda_5990_class) - class_destroy(rda_5990_class); - - cancel_delayed_work_sync(&rda_5990_sleep_worker); - wake_lock_destroy(&rda_5990_wake_lock); -} - -unsigned char rda_5990_wifi_in_test_mode(void) -{ - return wifi_in_test_mode; -} - - -static __inline__ void cfmakeraw(struct termios *s) -{ - s->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); - s->c_oflag &= ~OPOST; - s->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); - s->c_cflag &= ~(CSIZE|PARENB); - s->c_cflag |= CS8; -} - -static __inline__ int cfsetospeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ int cfsetispeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static int rda_wifi_init_uart(char *dev) -{ - int errno; - struct termios ti; - struct serial_struct ss; - int fd; - - fd = sys_open(dev, O_RDWR | O_NOCTTY, 0); - if (fd < 0) { - printk("Can't open serial port"); - return -1; - } - - sys_ioctl(fd, TCFLSH, TCIOFLUSH); - - /* Clear the cust flag */ - if((errno = sys_ioctl(fd, TIOCGSERIAL, &ss))<0){ - printk("BAUD: error to get the serial_struct info:%s\n", errno); - goto err; - } - - if (ss.flags & ASYNC_SPD_CUST) { - printk("clear ASYNC_SPD_CUST\r\n"); - ss.flags &= ~ASYNC_SPD_CUST; - } - if((errno = sys_ioctl(fd, TIOCSSERIAL, &ss))<0){ - printk("BAUD: error to set serial_struct:%s\n", errno); - goto err; - } - - if ((errno = sys_ioctl(fd, TCGETS, (long)&ti)) < 0) { - printk("unable to get UART port setting"); - printk("Can't get port settings"); - goto err; - } - - cfmakeraw(&ti); - - ti.c_cflag |= CLOCAL; - ti.c_cflag &= ~CRTSCTS; - ti.c_lflag = 0; - ti.c_cc[VTIME] = 5; /* 0.5 sec */ - ti.c_cc[VMIN] = 0; - - /* Set initial baudrate */ - cfsetospeed(&ti, B115200); - cfsetispeed(&ti, B115200); - - if ((errno = sys_ioctl(fd, TCSETS, (long)&ti)) < 0) { - printk("unable to set UART port setting"); - printk("Can't set port settings"); - goto err; - } - - errno = sys_ioctl(fd, TCFLSH, TCIOFLUSH); - if(errno < 0) - goto err; - - return fd; - -err: - if(fd > 0) - sys_close(fd); - - return -1; -} - -EXPORT_SYMBOL(rda_wlan_version); -EXPORT_SYMBOL(rda_wifi_init_uart); -EXPORT_SYMBOL(rda_5990_wifi_in_test_mode); - -EXPORT_SYMBOL(rda_5990_set_wake_lock); -EXPORT_SYMBOL(rda_wifi_power_off); -EXPORT_SYMBOL(rda_wifi_power_on); -EXPORT_SYMBOL(rda_fm_power_on); -EXPORT_SYMBOL(rda_fm_power_off); - -module_init(rda_5990_power_ctrl_init); -module_exit(rda_5990_power_ctrl_exit); - -MODULE_LICENSE("GPL"); - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_gpio_i2c/Makefile b/drivers/net/wireless/rockchip_wlan/rda5990/rda_gpio_i2c/Makefile deleted file mode 100755 index 9a192865bdbf..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_gpio_i2c/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright Statement: -# -# This software/firmware and related documentation ("MediaTek Software") are -# protected under relevant copyright laws. The information contained herein -# is confidential and proprietary to MediaTek Inc. and/or its licensors. -# Without the prior written permission of MediaTek inc. and/or its licensors, -# any reproduction, modification, use or disclosure of MediaTek Software, -# and information contained herein, in whole or in part, shall be strictly prohibited. -# -# MediaTek Inc. (C) 2010. All rights reserved. -# -# BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES -# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") -# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON -# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. -# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE -# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR -# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH -# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES -# THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES -# CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK -# SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR -# STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND -# CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, -# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, -# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO -# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. -# -# The following software/firmware and/or related documentation ("MediaTek Software") -# have been modified by MediaTek Inc. All revisions are subject to any receiver's -# applicable license agreements with MediaTek Inc. - - -# Makefile generated by Mediatek - -obj-y += rda_gpio_i2c.o - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_gpio_i2c/rda_gpio_i2c.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_gpio_i2c/rda_gpio_i2c.c deleted file mode 100755 index 01a4277b0290..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_gpio_i2c/rda_gpio_i2c.c +++ /dev/null @@ -1,460 +0,0 @@ -/* - * ===================================================================================== - * - * Filename: rda_gpio_i2c.c - * - * Description: - * - * Version: 1.0 - * Created: 04/19/2012 11:24:48 PM - * Revision: none - * Compiler: gcc - * - * Author: Allen_Hu - * Organization: RDA Inc. - * - * ===================================================================================== - */ -#include -#include -#include - -#include -#include - -#define RDA5990_WIFI_32K_FLAG 0x00000001 -#define RDA5990_BT_32K_FLAG 0x00000002 -#define RDA5990_FM_32K_FLAG 0x00000004 - -//#define DELAY 10 -#define DELAY 2 -// FM -#define SCL GPIO149 -#define SDA GPIO150 -// -/* WIFI -#define SCL GPIO104 -#define SDA GPIO102 -*/ - -#define u8 unsigned char - -//Data storage mode -static u8 isBigEnded = 0; - -//The global variable -static unsigned int gpioInitialized = 0; -static unsigned int rda5990_32k_state = 0; - -#define GPIO_MODE_00 0 -#define GPIO_DIR_OUT 1 -#define GPIO_DIR_IN 0 -#define GPIO_OUT_ONE 1 -#define GPIO_OUT_ZERO 0 - -void set_SDA_output(void) -{ - mt_set_gpio_mode(SDA, GPIO_MODE_00); - mt_set_gpio_dir(SDA, GPIO_DIR_OUT); -} - -void set_SDA_input(void) -{ - mt_set_gpio_mode(SDA, GPIO_MODE_00); - mt_set_gpio_dir(SDA, GPIO_DIR_IN); -} - -void set_SCL_output(void) -{ - mt_set_gpio_mode(SCL, GPIO_MODE_00); - mt_set_gpio_dir(SCL, GPIO_DIR_OUT); -} - -void set_SDA_high(void) -{ - mt_set_gpio_out(SDA, GPIO_OUT_ONE); -} - -void set_SDA_low(void) -{ - mt_set_gpio_out(SDA, GPIO_OUT_ZERO); -} - -void set_SCL_high(void) -{ - mt_set_gpio_out(SCL, GPIO_OUT_ONE); -} - -void set_SCL_low(void) -{ - mt_set_gpio_out(SCL, GPIO_OUT_ZERO); -} - -u8 get_SDA_bit(void) -{ - return mt_get_gpio_in(SDA); -} - -void i2c_delay(unsigned short cnt) -{ - udelay(cnt); -} - -//如果32k不能出来,请修改以下配置使能。 -void enable_32k_rtc(void) -{ - printk("enable 32k rtc called\n"); - rtc_gpio_enable_32k(RTC_GPIO_USER_GPS); - //rtc_gpio_enable_32k(RTC_GPIO_USER_WIFI); - //rtc_gpio_enable_32k(RTC_GPIO_USER_BT); - //rtc_gpio_enable_32k(RTC_GPIO_USER_WIFI); - rtc_gpio_enable_32k(RTC_GPIO_USER_FM); - msleep(100); -} - -void disable_32k_rtc(void) -{ - //rtc_gpio_disable_32k(RTC_GPIO_USER_WIFI); - rtc_gpio_enable_32k(RTC_GPIO_USER_GPS); - rtc_gpio_disable_32k(RTC_GPIO_USER_FM); - msleep(50); -} - -void i2c_start(void) -{ - set_SDA_output(); - set_SCL_output(); - - set_SDA_high(); - i2c_delay(DELAY); - set_SCL_high(); - i2c_delay(DELAY); - - set_SDA_low(); - i2c_delay(DELAY); - set_SCL_low(); - i2c_delay(DELAY); -} - -void i2c_stop(void) -{ - set_SDA_output(); - set_SCL_output(); - set_SDA_low(); - i2c_delay(DELAY); - set_SCL_high(); - i2c_delay(4*DELAY); - set_SDA_high(); - i2c_delay(4*DELAY); -} - - -/* - * return value: - * 0 --- 收到ACK - * 1 --- 没收到ACK - */ -u8 i2c_send_byte(u8 send_byte) -{ - u8 rc = 0; - u8 out_mask = 0x80; - u8 value; - u8 count = 8; - - set_SDA_output(); - set_SCL_output(); - - while(count > 0) { - set_SCL_low(); - i2c_delay(DELAY); - value = ((send_byte & out_mask) ? 1 : 0); - if (value == 1) { - set_SDA_high(); - } - else { - set_SDA_low(); - } - send_byte <<= 1; - i2c_delay(DELAY); - - set_SCL_high(); - i2c_delay(DELAY); - - count--; - } - set_SCL_low(); - set_SDA_input(); - i2c_delay(4*DELAY); - set_SCL_high(); - i2c_delay(DELAY); - rc = get_SDA_bit(); - i2c_delay(DELAY); - set_SCL_low(); - - return rc; -} - -/* - * ack = 0 发送ACK - * ack = 1 不发送ACK - */ -void i2c_read_byte(u8 *buffer, u8 ack) -{ - u8 count = 0x08; - u8 data = 0x00; - u8 temp = 0; - - set_SCL_output(); - while(count > 0) { - set_SCL_low(); - i2c_delay(2*DELAY); - if(count == 8) - set_SDA_input(); - i2c_delay(DELAY); - set_SCL_high(); - i2c_delay(2*DELAY); - temp = get_SDA_bit(); - data <<= 1; - if (temp) - data |= 0x01; - - i2c_delay(DELAY); - count--; - } - - set_SCL_low(); - i2c_delay(2*DELAY); - set_SDA_output(); - i2c_delay(DELAY); - if(ack){ - set_SDA_high(); - }else{ - set_SDA_low(); - } - i2c_delay(DELAY); - set_SCL_high(); - i2c_delay(2*DELAY); - - *buffer = data; - set_SCL_low(); -} - -/* -* write data to the I2C bus by GPIO simulated of a digital device rountine. -* -* @param -* chipAddr: address of the device -* regAddr: address of register within device -* data: the data to be written -* len: the data length -* -*/ -int rda_gpio_i2c_write_1_addr_2_data(u8 chipAddr, u8 regAddr, unsigned short data) -{ - u8 acknowledge; - int ret = 0; - i2c_start(); - - acknowledge = i2c_send_byte((chipAddr << 1) | 0x00); - if(acknowledge == 1){ - // return -1; - ret = -1; - goto out; - } - - acknowledge = i2c_send_byte(regAddr); - if(acknowledge == 1){ - ret = -1; - goto out; - } - - acknowledge = i2c_send_byte(data>>8); - if(acknowledge == 1){ - ret = -1; - goto out; - } - acknowledge = i2c_send_byte(data); - ret = acknowledge; - -out: - i2c_stop(); - - //return acknowledge; - return ret; -} -/* -* read data from the I2C bus by GPIO simulated of a digital device rountine. -* -* @param -* chipAddr: address of the device -* regAddr: address of register within device -* buffer: the data to be stored -* len: the data length -* -*/ -int rda_gpio_i2c_read_1_addr_2_data(u8 chipAddr, u8 regAddr, unsigned short *buffer) -{ - u8 tempdata, acknowledge; - int ret = 0; - - i2c_start(); - acknowledge = i2c_send_byte( (chipAddr << 1) | 0x00 ); - if(acknowledge == 1){ - ret = -1; - goto out; - } - acknowledge = i2c_send_byte(regAddr); - if(acknowledge == 1){ - ret = -1; - goto out; - } - - i2c_start();//restart - acknowledge = i2c_send_byte( (chipAddr << 1) | 0x01 ); - if(acknowledge == 1){ - ret = -1; - goto out; - } - - i2c_read_byte(&tempdata, 0); - *buffer = (tempdata<<8); - i2c_read_byte(&tempdata, 1); - *buffer |= tempdata; - -out: - i2c_stop(); -// return acknowledge; - return ret; -} - -u8 rda_gpio_i2c_write_4_addr_4_data(u8 chipAddr, unsigned int regAddr, unsigned int data) -{ - u8 acknowledge; - i2c_start(); - - acknowledge = i2c_send_byte((chipAddr << 1) | 0x00); - acknowledge = i2c_send_byte(regAddr>>24); - acknowledge = i2c_send_byte(regAddr>>16); - acknowledge = i2c_send_byte(regAddr>>8); - acknowledge = i2c_send_byte(regAddr); - - acknowledge = i2c_send_byte((chipAddr << 1) | 0x00); - - acknowledge = i2c_send_byte(data>>24); - acknowledge = i2c_send_byte(data>>16); - acknowledge = i2c_send_byte(data>>8); - acknowledge = i2c_send_byte(data); - - i2c_stop(); - return acknowledge; -} - -u8 rda_gpio_i2c_read_4_addr_4_data(u8 chipAddr, unsigned int regAddr, unsigned int *buffer) -{ - u8 tempdata, acknowledge; - u8 i = 0; - - i2c_start(); - acknowledge = i2c_send_byte( (chipAddr << 1) | 0x00 ); - acknowledge = i2c_send_byte(regAddr>>24); - acknowledge = i2c_send_byte(regAddr>>16); - acknowledge = i2c_send_byte(regAddr>>8); - acknowledge = i2c_send_byte(regAddr); - - i2c_start();//restart - acknowledge = i2c_send_byte( (chipAddr << 1) | 0x01 ); - - i2c_read_byte(&tempdata, 0); - *buffer = (tempdata<<24); - i2c_read_byte(&tempdata, 0); - *buffer |= (tempdata<<16); - i2c_read_byte(&tempdata, 0); - *buffer |= (tempdata<<8); - i2c_read_byte(&tempdata, 1); - *buffer |= tempdata; - - i2c_stop(); - return acknowledge; -} - -void rda_gpio_i2c_enable_32k(unsigned int flag) -{ - if(rda5990_32k_state == 0 ) - { - enable_32k_rtc(); - } - rda5990_32k_state |= (flag&0x07); -} - -void rda_gpio_i2c_disable_32k(unsigned int flag) -{ - rda5990_32k_state &= (~flag); - if(rda5990_32k_state == 0) - disable_32k_rtc(); -} - -/* -* initializes I2C interface routine. -* -* @return value: -* 0--success; -* 1--error. -* -*/ -static int __init rda_gpio_i2c_init(void) -{ - if(gpioInitialized == 0){ - printk(KERN_INFO "RDA GPIO control for I2C Driver \n"); - - unsigned char *temp = NULL; - unsigned short testData = 0xaa55; - temp = (unsigned char *)&testData; - if(*temp == 0x55){ - isBigEnded = 0; - }else{ - isBigEnded = 1; - } - - - gpioInitialized = 1; - rda_gpio_i2c_enable_32k(RDA5990_FM_32K_FLAG); - - /* FM - unsigned short regValue = 0; - rda_gpio_i2c_read_1_addr_2_data(0x11, 0x0C, ®Value); - printk(KERN_ALERT "####[%s, %d], Addr=%02X, value=%04X\n", __func__, __LINE__, 0x0C, regValue); - */ - /*WIFI - unsigned short regValue = 0x0001; - rda_gpio_i2c_write_1_addr_2_data(0x14, 0x3f, regValue); - regValue = 0; - rda_gpio_i2c_read_1_addr_2_data(0x14, 0x3f, ®Value); - printk(KERN_ALERT "####[%s, %d], Addr=%02X, value=%04X\n", __func__, __LINE__, 0x3f, regValue); - regValue = 0; - rda_gpio_i2c_read_1_addr_2_data(0x14, 0x20, ®Value); - printk(KERN_ALERT "####[%s, %d], Addr=%02X, value=%04X\n", __func__, __LINE__, 0x20, regValue); - */ - - return 0; - }else{ - printk("RDA GPIO control for I2C has been initialized.\n"); - return 0; - } -} - -static void __exit rda_gpio_i2c_exit(void) -{ - gpioInitialized = 0; - rda_gpio_i2c_disable_32k(RDA5990_FM_32K_FLAG); -} - -EXPORT_SYMBOL(rda_gpio_i2c_read_1_addr_2_data); -EXPORT_SYMBOL(rda_gpio_i2c_write_1_addr_2_data); -EXPORT_SYMBOL(rda_gpio_i2c_enable_32k); -EXPORT_SYMBOL(rda_gpio_i2c_disable_32k); - -EXPORT_SYMBOL(rda_gpio_i2c_read_4_addr_4_data); -EXPORT_SYMBOL(rda_gpio_i2c_write_4_addr_4_data); - -module_init(rda_gpio_i2c_init); /* load the module */ -module_exit(rda_gpio_i2c_exit); /* unload the module */ diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/Makefile b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/Makefile deleted file mode 100755 index e8c121fbc5bc..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -obj-m := rda5890.o -rda5890-objs := \ - rda5890_if_sdio.o \ - rda5890_dev.o \ - rda5890_txrx.o \ - rda5890_wid.o \ - rda5890_wext.o \ - rda5890_debugfs.o\ - rda5890_sdio_patch.o\ - rda5890_nvram.o\ - rda5890_scan.o - -KERNEL_DIR = /home/dxj/share/rk2928/kernel - -all: - make -C $(KERNEL_DIR) M=`pwd` modules - -clean: - rm -f Module.symvers *.o modules.order *.ko wifi_launcher.mod.c - rm -rf .wifi* .tmp* wlan.mod.c \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/Makefile_gwl b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/Makefile_gwl deleted file mode 100755 index 92c6886421e2..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/Makefile_gwl +++ /dev/null @@ -1,23 +0,0 @@ -MODULE_NAME = rda5890 -CONFIG_RDA5890 = m -$(MODULE_NAME)-y += \ - rda5890_if_sdio.o \ - rda5890_dev.o \ - rda5890_txrx.o \ - rda5890_wid.o \ - rda5890_wext.o \ - rda5890_debugfs.o\ - rda5890_sdio_patch.o\ - rda5890_nvram.o\ - rda5890_scan.o - -obj-$(CONFIG_RDA5890) += $(MODULE_NAME).o - -KERNEL_DIR = /home/dxj/share/rk2928/kernel - -all: - make -C $(KERNEL_DIR) M=`pwd` modules - -clean: - rm -f Module.symvers *.o modules.order *.ko wifi_launcher.mod.c - rm -rf .wifi* .tmp* wlan.mod.c \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_debugfs.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_debugfs.c deleted file mode 100755 index 2ab7b1f0297e..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_debugfs.c +++ /dev/null @@ -1,593 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "rda5890_defs.h" -#include "rda5890_dev.h" - -static struct dentry *rda5890_dir = NULL; - -void dump_buf(char *data, size_t len) -{ - char temp_buf[64]; - size_t i, off = 0; - - memset(temp_buf, 0, 64); - for (i=0;iprivate_data = inode->i_private; - return 0; -} - -#if 0 -static ssize_t rda5890_write_file_dummy(struct file *file, const char __user *buf, - size_t count, loff_t *ppos) -{ - return -EINVAL; -} -#endif - -static ssize_t rda5890_debug_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - //struct rda5890_private *priv = file->private_data; - size_t pos = 0; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - ssize_t res; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - pos += snprintf(buf+pos, PAGE_SIZE - pos, "state = %s\n", - "LWANG_TESTING"); - - res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); - - free_page(addr); - return res; -} - -static ssize_t rda5890_debug_write(struct file *file, - const char __user *user_buf, size_t count, - loff_t *ppos) -{ - //struct rda5890_private *priv = file->private_data; - ssize_t ret; - int p1, p2, p3, p4; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - if (copy_from_user(buf, user_buf, count)) { - ret = -EFAULT; - goto out_unlock; - } - ret = sscanf(buf, "%d %d %d %d", &p1, &p2, &p3, &p4); - if (ret != 4) { - ret = -EINVAL; - goto out_unlock; - } - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "input p1 = %d, p2 = %d, p3 = %d, p4 = %d\n", - p1, p2, p3, p4); - - ret = count; -out_unlock: - free_page(addr); - return ret; -} - -static ssize_t rda5890_debugarea_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - //struct rda5890_private *priv = file->private_data; - size_t pos = 0; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - ssize_t res; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "get debug_area = 0x%x\n",rda5890_dbg_area); - - pos += snprintf(buf+pos, PAGE_SIZE - pos, "%x\n", - rda5890_dbg_area); - - res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); - - free_page(addr); - return res; -} - -static ssize_t rda5890_debugarea_write(struct file *file, - const char __user *user_buf, size_t count, - loff_t *ppos) -{ - //struct rda5890_private *priv = file->private_data; - ssize_t ret; - int debug_area; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - if (copy_from_user(buf, user_buf, count)) { - ret = -EFAULT; - goto out_unlock; - } - ret = sscanf(buf, "%x", &debug_area); - if (ret != 1) { - ret = -EINVAL; - goto out_unlock; - } - - rda5890_dbg_area = debug_area; - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "set debug_area = 0x%x\n",rda5890_dbg_area); - - ret = count; -out_unlock: - free_page(addr); - return ret; -} - -static ssize_t rda5890_debuglevel_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - //struct rda5890_private *priv = file->private_data; - size_t pos = 0; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - ssize_t res; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "get debug_level = 0x%x\n",rda5890_dbg_level); - - pos += snprintf(buf+pos, PAGE_SIZE - pos, "%x\n", - rda5890_dbg_level); - - res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); - - free_page(addr); - return res; -} - -static ssize_t rda5890_debuglevel_write(struct file *file, - const char __user *user_buf, size_t count, - loff_t *ppos) -{ - //struct rda5890_private *priv = file->private_data; - ssize_t ret; - int debug_level; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - if (copy_from_user(buf, user_buf, count)) { - ret = -EFAULT; - goto out_unlock; - } - ret = sscanf(buf, "%x", &debug_level); - if (ret != 1) { - ret = -EINVAL; - goto out_unlock; - } - - rda5890_dbg_level = debug_level; - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "set debug_level = 0x%x\n",rda5890_dbg_level); - - ret = count; -out_unlock: - free_page(addr); - return ret; -} - -static int debug_read_flag = 0; - -static ssize_t rda5890_sdio_read(struct file *file, - const char __user *user_buf, size_t count, - loff_t *ppos) -{ - //struct rda5890_private *priv = file->private_data; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - int ret; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - if (copy_from_user(buf, user_buf, count)) { - ret = -EFAULT; - goto out_unlock; - } - ret = sscanf(buf, "%d", &debug_read_flag); - if (ret != 1) { - ret = -EINVAL; - goto out_unlock; - } - -out_unlock: - free_page(addr); - return count; -} - -static ssize_t rda5890_sdio_write(struct file *file, - const char __user *user_buf, size_t count, - loff_t *ppos) -{ - struct rda5890_private *priv = file->private_data; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - int iter, len, i; - int ret; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - if (copy_from_user(buf, user_buf, count)) { - ret = -EFAULT; - goto out_unlock; - } - ret = sscanf(buf, "%d %d", &iter, &len); - if (ret != 2) { - ret = -EINVAL; - goto out_unlock; - } - - if (len > 1660) { - ret = -EINVAL; - goto out_unlock; - } - - for (i=0; ihw_host_to_card(priv, buf, len, DATA_REQUEST_PACKET); - - //RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - // "Host to Card done, ret = %d\n", ret); - } - -out_unlock: - free_page(addr); - return count; -} - -#define SDIO_TEST_CMD_MAGIC 0x55664433 -#define SDIO_TEST_CMD_LEN 16 - -#define SDIO_TEST_CMD_TYPE_H2C_START 1 -#define SDIO_TEST_CMD_TYPE_H2C_STOP 2 -#define SDIO_TEST_CMD_TYPE_H2C_STATUS 3 -#define SDIO_TEST_CMD_TYPE_C2H_START 4 -#define SDIO_TEST_CMD_TYPE_C2H_PILOT 5 -#define SDIO_TEST_CMD_TYPE_C2H_END 6 - -static int recv_time_start, recv_time_end; -static int send_time_start, send_time_end; - -void rda5890_sdio_test_card_to_host(char *buf, unsigned short len) -{ - int i; - int cmd, cmd_iter, cmd_len; - int time_ms; - static int recv_pattern = 0; - static int recv_tput_flag = 0; - static int recv_pkts = 0; - static int recv_bytes = 0; - - //RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - // "SDIO TEST Card to Host, len = %d\n", len); - - if (debug_read_flag) { - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "DEBUG RX, len = %d\n", len); - dump_buf(buf, len); - } - - if ((*(volatile unsigned long *)buf == SDIO_TEST_CMD_MAGIC) - && len == SDIO_TEST_CMD_LEN) { - cmd = (int)(*(volatile unsigned long *)(buf + 4)); - cmd_iter = (int)(*(volatile unsigned long *)(buf + 8)); - cmd_len = (int)(*(volatile unsigned long *)(buf + 12)); - //RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - // "SDIO TEST CMD: cmd = %d, iter = %d, len = %d\n", - // cmd, cmd_iter, cmd_len); - switch (cmd) { - case SDIO_TEST_CMD_TYPE_H2C_STATUS: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "H2C STATUS CMD \n"); - time_ms = jiffies_to_msecs(send_time_end - send_time_start); - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "SDIO H2C STATUS: pkts = %d, bytes = %d, time = %d ms\n", - cmd_iter, cmd_len, time_ms); - break; - case SDIO_TEST_CMD_TYPE_C2H_PILOT: - //RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - // "C2H PILOT CMD \n"); - recv_pattern = 0; - recv_tput_flag = 1; - recv_pkts = 0; - recv_bytes = 0; - recv_time_start = jiffies; - break; - case SDIO_TEST_CMD_TYPE_C2H_END: - //RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - // "C2H END CMD \n"); - recv_time_end = jiffies; - recv_tput_flag = 0; - time_ms = jiffies_to_msecs(recv_time_end - recv_time_start); - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "SDIO C2H STATUS: pkts = %d, bytes = %d, time = %d ms\n", - recv_pkts, recv_bytes, time_ms); - break; - case SDIO_TEST_CMD_TYPE_H2C_START: - case SDIO_TEST_CMD_TYPE_H2C_STOP: - case SDIO_TEST_CMD_TYPE_C2H_START: - default: - RDA5890_ERRP("SDIO TEST CMD: Invalid cmd %d\n", cmd); - break; - } - return; - } - - for (i=0;ihw_host_to_card(priv, cmd, len ,SDIO_TEST_CMD_LEN); - if (ret) { - RDA5890_ERRP("START cmd send fail, ret = %d\n", ret); - } -} - -static void sdio_tput_test_write(struct rda5890_private *priv, int iter, int len) -{ - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf_1 = (char *)addr; - char *buf_2 = (char *)addr + PAGE_SIZE/2; - char cmd[SDIO_TEST_CMD_LEN]; - int i; - int ret; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s, iter = %d, len = %d\n", __func__, iter, len); - - for (i=0; ihw_host_to_card(priv, cmd, len,SDIO_TEST_CMD_LEN); - if (ret) { - RDA5890_ERRP("START cmd send fail, ret = %d\n", ret); - goto out; - } - - send_time_start = jiffies; - for (i=0;ihw_host_to_card(priv, buf_1, len, DATA_REQUEST_PACKET); - else - ret = priv->hw_host_to_card(priv, buf_2, len, DATA_REQUEST_PACKET); - if (ret) { - RDA5890_ERRP("packet %d send fail, ret = %d\n", i, ret); - goto out; - } - } - send_time_end = jiffies; - - (*(volatile unsigned long *)(cmd + 0)) = SDIO_TEST_CMD_MAGIC; - (*(volatile unsigned long *)(cmd + 4)) = SDIO_TEST_CMD_TYPE_H2C_STOP; - (*(volatile unsigned long *)(cmd + 8)) = iter; - (*(volatile unsigned long *)(cmd + 12)) = len; - ret = priv->hw_host_to_card(priv, cmd, len, SDIO_TEST_CMD_LEN); - if (ret) { - RDA5890_ERRP("START cmd send fail, ret = %d\n", ret); - goto out; - } - -out: - free_page(addr); -} - -static ssize_t rda5890_sdio_tput(struct file *file, - const char __user *user_buf, size_t count, - loff_t *ppos) -{ - struct rda5890_private *priv = file->private_data; - int ret; - unsigned long addr = get_zeroed_page(GFP_KERNEL); - char *buf = (char *)addr; - int wr, iter, len; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s\n", __func__); - - if (copy_from_user(buf, user_buf, count)) { - ret = -EFAULT; - goto out_unlock; - } - ret = sscanf(buf, "%d %d %d", &wr, &iter, &len); - if (ret != 3) { - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "Error Input, format shall be [wr iter len]\n"); - ret = -EINVAL; - goto out_unlock; - } - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "input wr = %d, iter = %d, len = %d\n", - wr, iter, len); - - if (wr) - sdio_tput_test_write(priv, iter, len); - else - sdio_tput_test_read(priv, iter, len); - - ret = count; -out_unlock: - free_page(addr); - return ret; -} - -#define FOPS(fread, fwrite) { \ - .owner = THIS_MODULE, \ - .open = open_file_generic, \ - .read = (fread), \ - .write = (fwrite), \ -} - -struct rda5890_debugfs_files { - char *name; - int perm; - struct file_operations fops; -}; - -static struct rda5890_debugfs_files debugfs_files[] = { - { "debug", 0444, FOPS(rda5890_debug_read, rda5890_debug_write), }, - { "debugarea", 0444, FOPS(rda5890_debugarea_read, rda5890_debugarea_write), }, - { "debuglevel", 0444, FOPS(rda5890_debuglevel_read, rda5890_debuglevel_write), }, - { "sdioread", 0444, FOPS(NULL, rda5890_sdio_read), }, - { "sdiowrite", 0444, FOPS(NULL, rda5890_sdio_write), }, - { "sdiotput", 0444, FOPS(NULL, rda5890_sdio_tput), }, -}; - -void rda5890_debugfs_init(void) -{ - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s\n", __func__); - - if (!rda5890_dir) - rda5890_dir = debugfs_create_dir("rda5890", NULL); - - return; -} - -void rda5890_debugfs_remove(void) -{ - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s\n", __func__); - - if (rda5890_dir) - debugfs_remove(rda5890_dir); - - return; -} - -void rda5890_debugfs_init_one(struct rda5890_private *priv) -{ - int i; - struct rda5890_debugfs_files *files; - if (!rda5890_dir) - goto exit; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s\n", __func__); - - priv->debugfs_dir = debugfs_create_dir("rda5890_dev", rda5890_dir); - if (!priv->debugfs_dir) - goto exit; - - for (i=0; idebugfs_files[i] = debugfs_create_file(files->name, - files->perm, - priv->debugfs_dir, - priv, - &files->fops); - } - -exit: - return; -} - -void rda5890_debugfs_remove_one(struct rda5890_private *priv) -{ - int i; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s\n", __func__); - - for(i=0; idebugfs_files[i]); - debugfs_remove(priv->debugfs_dir); -} - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_debugfs.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_debugfs.h deleted file mode 100755 index b42bc4e410c6..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_debugfs.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _RDA5890_DEBUGFS_H_ -#define _RDA5890_DEBUGFS_H_ - -void rda5890_debugfs_init(void); -void rda5890_debugfs_remove(void); - -void rda5890_debugfs_init_one(struct rda5890_private *priv); -void rda5890_debugfs_remove_one(struct rda5890_private *priv); - -/* This is for SDIO testing */ -void rda5890_sdio_test_card_to_host(char *buf, unsigned short len); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_defs.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_defs.h deleted file mode 100755 index ef8e114b006a..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_defs.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef _RDA5890_DEFS_H_ -#define _RDA5890_DEFS_H_ - -#include - -#define RDA5890_SDIOWIFI_VER_MAJ 0 -#define RDA5890_SDIOWIFI_VER_MIN 3 -#define RDA5890_SDIOWIFI_VER_BLD 1 - -#define WIFI_POWER_MANAGER //if need wifi sleep for power save should open this - - -#define WIFI_UNLOCK_SYSTEM -#define GET_SCAN_FROM_NETWORK_INFO - -#define USE_MAC_DYNAMIC_ONCE -//#define WIFI_TEST_MODE - -#define DEBUG - -extern int rda5890_dbg_level; -extern int rda5890_dbg_area; - -typedef enum { - RDA5890_DL_ALL = 0, - RDA5890_DL_CRIT = 1, - RDA5890_DL_TRACE = 2, - RDA5890_DL_NORM = 3, - RDA5890_DL_DEBUG = 4, - RDA5890_DL_VERB = 5, -} RDA5890_DBG_LEVEL; - -#define RDA5890_DA_MAIN (1 << 0) -#define RDA5890_DA_SDIO (1 << 1) -#define RDA5890_DA_ETHER (1 << 2) -#define RDA5890_DA_WID (1 << 3) -#define RDA5890_DA_WEXT (1 << 4) -#define RDA5890_DA_TXRX (1 << 5) -#define RDA5890_DA_PM (1 << 6) -#define RDA5890_DA_ALL 0x0000007f - -#define RDA5890_LOG "RDA5890: " -#ifndef DEBUG -#define DEBUG -#endif - -#ifdef DEBUG -#define RDA5890_DBGLA(area, lvl) \ - (((lvl)<=rda5890_dbg_level) && ((area)&rda5890_dbg_area)) -#define RDA5890_DBGLAP(area,lvl, x...) \ - do{ \ - if (((lvl)<=rda5890_dbg_level) && ((area)&rda5890_dbg_area)) \ - printk(KERN_INFO RDA5890_LOG x ); \ - }while(0) -#define RDA5890_DBGP(x...) \ - do{ \ - printk(KERN_INFO RDA5890_LOG x ); \ - }while(0) -#else -#define RDA5890_DBGLA(area, lvl) 0 -#define RDA5890_DBGLAP(area,lvl, x...) do {} while (0) -#define RDA5890_DBGP(x...) do {} while (0) -#endif - -#define RDA5890_ERRP(fmt, args...) \ - do{ \ - printk(KERN_ERR RDA5890_LOG "%s: "fmt, __func__, ## args ); \ - }while(0) - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_dev.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_dev.c deleted file mode 100755 index 8bea49c2a084..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_dev.c +++ /dev/null @@ -1,633 +0,0 @@ -/** - * This file contains the major functions in WLAN - * driver. It includes init, exit, open, close and main - * thread etc.. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include -#include - - -#include "rda5890_defs.h" -#include "rda5890_dev.h" -#include "rda5890_ioctl.h" -#include "rda5890_wid.h" -#include "rda5890_wext.h" -#include "rda5890_txrx.h" -#include "rda5890_if_sdio.h" - -int rda5890_sleep_flags = RDA_SLEEP_ENABLE | RDA_SLEEP_PREASSO; - -#ifdef WIFI_UNLOCK_SYSTEM -atomic_t wake_lock_counter; -struct wake_lock sleep_worker_wake_lock; -#endif - - -int rda5890_init_pm(struct rda5890_private *priv) -{ -#ifdef WIFI_POWER_MANAGER - int ret = 0; - struct if_sdio_card *card = (struct if_sdio_card *)priv->card; - -#ifdef WIFI_TEST_MODE - if(rda_5990_wifi_in_test_mode()) - return 0; -#endif - if (rda5890_sleep_flags & RDA_SLEEP_ENABLE) - { - ret = rda5890_set_pm_mode(priv, 2); - if(ret < 0) - goto err; - } - if (rda5890_sleep_flags & RDA_SLEEP_PREASSO) - { - ret = rda5890_set_preasso_sleep(priv, 0x00800080); - if(ret < 0) - goto err; - } - - sdio_claim_host(card->func); - sdio_writeb(card->func, 1, IF_SDIO_FUN1_INT_TO_DEV, &ret); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("write FUN1_INT_TO_DEV reg fail\n"); - } - - atomic_inc(&priv->sleep_flag); - -err: - return ret; -#else - return 0; -#endif -} - - -int rda5890_disable_self_cts(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set rda5890_disable_self_cts 0x%02x\n", 0); - - ret = rda5890_generic_set_uchar(priv, WID_PTA_MODE, 0); - if(ret < 0) - goto err; - return 0; - -err: - return ret; -} - -int rda5890_disable_block_bt(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set rda5890_disable_block_bt 0x%02x\n", 0); - - ret = rda5890_generic_set_uchar(priv, WID_PTA_BLOCK_BT, 0); - if(ret < 0) - goto err; - - return 0; - -err: - return ret; -} - -//rda5890_set_scan_timeout has defined WID_ACTIVE_SCAN_TIME so if you call that func, not need call this -int rda5890_set_active_scan_time(struct rda5890_private *priv) -{ - int ret = 0; - ret= rda5890_generic_set_ushort(priv, WID_ACTIVE_SCAN_TIME, 200); - if(ret < 0) - goto err; - return 0; - err: - return ret; -} - -/** - * @brief This function opens the ethX or mshX interface - * - * @param dev A pointer to net_device structure - * @return 0 or -EBUSY if monitor mode active - */ -static int rda5890_dev_open(struct net_device *dev) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - if (priv->connect_status == MAC_CONNECTED) - netif_carrier_on(dev); - else - netif_carrier_off(dev); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - return ret; -} - -/** - * @brief This function closes the ethX interface - * - * @param dev A pointer to net_device structure - * @return 0 - */ -static int rda5890_eth_stop(struct net_device *dev) -{ - //struct rda5890_private *priv = (struct rda5890_private *) dev->priv; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - netif_stop_queue(dev); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - return 0; -} - -static void rda5890_tx_timeout(struct net_device *dev) -{ - //struct rda5890_private *priv = (struct rda5890_private *) dev->priv; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); -} - -/** - * @brief This function returns the network statistics - * - * @param dev A pointer to struct lbs_private structure - * @return A pointer to net_device_stats structure - */ -static struct net_device_stats *rda5890_get_stats(struct net_device *dev) -{ - struct rda5890_private *priv = (struct rda5890_private *) netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - return &priv->stats; -} - -static int rda5890_set_mac_address(struct net_device *dev, void *addr) -{ - int ret = 0; - struct rda5890_private *priv = (struct rda5890_private *) netdev_priv(dev); - struct sockaddr *phwaddr = addr; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - ret = rda5890_set_mac_addr(priv, phwaddr->sa_data); - if (ret) { - goto done; - } - memcpy(priv->dev->dev_addr, phwaddr->sa_data, ETH_ALEN); - -done: - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - return ret; -} - -static void rda5890_set_multicast_list(struct net_device *dev) -{ - //struct rda5890_private *priv = dev->priv; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - //schedule_work(&priv->mcast_work); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); -} - -/** - * @brief This function checks the conditions and sends packet to IF - * layer if everything is ok. - * - * @param priv A pointer to struct lbs_private structure - * @param skb A pointer to skb which includes TX packet - * @return 0 or -1 - */ -int rda5890_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct rda5890_private *priv = (struct rda5890_private*)netdev_priv(dev); -#ifdef WIFI_TEST_MODE - if(rda_5990_wifi_in_test_mode()) - return 0; -#endif //end WIFI_TEST_MODE - return rda5890_data_tx(priv, skb, dev); -} - -static int rda5890_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) -{ - int ret = 0; - struct rda5890_private *priv = netdev_priv(dev); - unsigned long value; - char in_buf[MAX_CMD_LEN + 4], out_buf[MAX_CMD_LEN + 4]; - unsigned short in_len, out_len, out_len_ret; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>, cmd = %x\n", __func__, cmd); - - switch (cmd) { - case IOCTL_RDA5890_GET_MAGIC: - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "IOCTL_RDA5890_GET_MAGIC\n"); - value = RDA5890_MAGIC; - if (copy_to_user(rq->ifr_data, &value, sizeof(value))) - ret = -EFAULT; - break; - case IOCTL_RDA5890_GET_DRIVER_VER: - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "IOCTL_RDA5890_GET_DRIVER_VER\n"); - value = RDA5890_SDIOWIFI_VER_MAJ << 16 | - RDA5890_SDIOWIFI_VER_MIN << 8 | - RDA5890_SDIOWIFI_VER_BLD; - if (copy_to_user(rq->ifr_data, &value, sizeof(value))) - ret = -EFAULT; - break; - case IOCTL_RDA5890_MAC_GET_FW_VER: - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "IOCTL_RDA5890_MAC_GET_FW_VER\n"); - ret = rda5890_get_fw_ver(priv, &value); - if (ret) - break; - if (copy_to_user(rq->ifr_data, &value, sizeof(value))) - ret = -EFAULT; - break; - case IOCTL_RDA5890_MAC_WID: - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "IOCTL_RDA5890_MAC_WID\n"); - if (copy_from_user(in_buf, rq->ifr_data, 4)) { - ret = -EFAULT; - break; - } - in_len = (unsigned short)(in_buf[0] + (in_buf[1] << 8)); - out_len = (unsigned short)(in_buf[2] + (in_buf[3] << 8)); - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - " in_len = %d, out_len = %d\n", in_len, out_len); - if (copy_from_user(in_buf, rq->ifr_data, 4 + in_len)) { - ret = -EFAULT; - break; - } - out_len_ret = MAX_CMD_LEN; - ret = rda5890_wid_request(priv, in_buf + 4, in_len, out_buf + 4, &out_len_ret); - if (ret) { - RDA5890_ERRP("rda5890_wid_request, ret = %d\n", ret); - break; - } - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - " out_len_ret = %d\n", out_len_ret); - if (out_len_ret > out_len) { - RDA5890_ERRP("No enough buf for wid response\n"); - ret = -ENOMEM; - break; - } - out_buf[2] = (char)(out_len_ret&0x00FF); - out_buf[3] = (char)((out_len_ret&0xFF00) >> 8); - if (copy_to_user(rq->ifr_data, out_buf, 4 + out_len_ret)) - ret = -EFAULT; - break; - case IOCTL_RDA5890_SET_WAPI_ASSOC_IE: - if(copy_from_user(in_buf, rq->ifr_data, 100)) { - ret = -EFAULT; - break; - } - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "IOCTL_RDA5890_SET_WAPI_ASSOC_IE is %x %x %x %x \n", - in_buf[0], in_buf[1],in_buf[2],in_buf[3]); - rda5890_generic_set_str(priv, WID_WAPI_ASSOC_IE, in_buf ,100); - break; - case IOCTL_RDA5890_GET_WAPI_ASSOC_IE: - rda5890_generic_get_str(priv, WID_WAPI_ASSOC_IE, out_buf, 100); - if (copy_to_user(rq->ifr_data, out_buf, 100)) - ret = -EFAULT; - break; - default: - RDA5890_ERRP("unknown cmd 0x%x\n", cmd); - ret = -EFAULT; - break; - } - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - return ret; -} - -static int rda5890_init_adapter(struct rda5890_private *priv) -{ - int ret = 0; - size_t bufsize; - int i; - - mutex_init(&priv->wid_lock); -#ifdef WIFI_POWER_MANAGER - atomic_set(&priv->sleep_flag, 0); -#endif - priv->wid_pending = 0; - priv->wid_msg_id = 0; - - /* Allocate buffer to store the BSSID list */ - bufsize = RDA5890_MAX_NETWORK_NUM * sizeof(struct bss_descriptor); - priv->networks = kzalloc(bufsize, GFP_KERNEL); - if (!priv->networks) { - RDA5890_ERRP("Out of memory allocating beacons\n"); - ret = -1; - goto out; - } - - /* Initialize scan result lists */ - INIT_LIST_HEAD(&priv->network_free_list); - INIT_LIST_HEAD(&priv->network_list); - for (i = 0; i < RDA5890_MAX_NETWORK_NUM; i++) { - list_add_tail(&priv->networks[i].list, - &priv->network_free_list); - } - priv->scan_running = 0; - - /* Initialize delayed work workers and thread */ - priv->work_thread = create_singlethread_workqueue("rda5890_worker"); - INIT_DELAYED_WORK(&priv->scan_work, rda5890_scan_worker); - INIT_DELAYED_WORK(&priv->assoc_work, rda5890_assoc_worker); - INIT_DELAYED_WORK(&priv->assoc_done_work, rda5890_assoc_done_worker); - INIT_DELAYED_WORK(&priv->wlan_connect_work, rda5890_wlan_connect_worker); - - /* Initialize status */ - priv->connect_status = MAC_DISCONNECTED; - memset(&priv->curbssparams, 0, sizeof(priv->curbssparams)); - memset(&priv->wstats, 0, sizeof(priv->wstats)); - - /* Initialize sec related status */ - priv->assoc_flags = 0; - priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - memset(&priv->wep_keys, 0, sizeof(priv->wep_keys)); - memset(&priv->wpa_ie[0], 0, sizeof(priv->wpa_ie)); - priv->wpa_ie_len = 0; - priv->first_init = 1; - -out: - return ret; -} - -static void rda5890_free_adapter(struct rda5890_private *priv) -{ - cancel_delayed_work_sync(&priv->assoc_done_work); - cancel_delayed_work_sync(&priv->assoc_work); - cancel_delayed_work_sync(&priv->scan_work); - cancel_delayed_work_sync(&priv->wlan_connect_work); - destroy_workqueue(priv->work_thread); - - if(priv->networks) - kfree(priv->networks); - priv->networks = NULL; -} - -static const struct net_device_ops rda_netdev_ops = { - .ndo_open = rda5890_dev_open, - .ndo_stop = rda5890_eth_stop, - .ndo_start_xmit = rda5890_hard_start_xmit, - .ndo_set_mac_address = rda5890_set_mac_address, - .ndo_tx_timeout = rda5890_tx_timeout, - .ndo_get_stats = rda5890_get_stats, - .ndo_do_ioctl = rda5890_ioctl -}; - -/** - * @brief This function adds the card. it will probe the - * card, allocate the lbs_priv and initialize the device. - * - * @param card A pointer to card - * @return A pointer to struct lbs_private structure - */ -struct rda5890_private *rda5890_add_card(void *card) -{ - struct net_device *dev = NULL; - struct rda5890_private *priv = NULL; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - /* Allocate an Ethernet device and register it */ - dev = alloc_netdev_mq(sizeof(struct rda5890_private), "wlan%d", ether_setup, 1); - if (!dev) { - RDA5890_ERRP("alloc_etherdev failed\n"); - goto done; - } - priv = netdev_priv(dev); - - if(rda5890_init_adapter(priv)){ - RDA5890_ERRP("rda5890_init_adapter failed\n"); - goto err_init_adapter; - } - - priv->dev = dev; - priv->card = card; - - /* Setup the OS Interface to our functions */ - dev->netdev_ops = &rda_netdev_ops; - dev->watchdog_timeo = msecs_to_jiffies(450); //450ms - - //dev->ethtool_ops = &lbs_ethtool_ops; -#ifdef WIRELESS_EXT - dev->wireless_handlers = (struct iw_handler_def *)&rda5890_wext_handler_def; -#endif - dev->flags |= IFF_BROADCAST | IFF_MULTICAST; - - goto done; - -err_init_adapter: - if(priv) - rda5890_free_adapter(priv); - if(dev) - free_netdev(dev); - priv = NULL; - -done: - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - return priv; -} - -void rda5890_remove_card(struct rda5890_private *priv) -{ - struct net_device *dev = priv->dev; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - dev = priv->dev; - - rda5890_free_adapter(priv); - - priv->dev = NULL; - if(dev) - free_netdev(dev); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); -} - -int rda5890_start_card(struct rda5890_private *priv) -{ - struct net_device *dev = priv->dev; - int ret = 0; - unsigned char mac_addr[ETH_ALEN]; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - -#ifdef WIFI_TEST_MODE - if(!rda_5990_wifi_in_test_mode()) - { -#endif - -#ifdef USE_MAC_DYNAMIC_ONCE - if(rda5890_read_mac(mac_addr) != ETH_ALEN) - { - random_ether_addr(mac_addr); - rda5890_write_mac(mac_addr); - } - -#else - mac_addr[0] = 0x00; - mac_addr[1] = 0xc0; - mac_addr[2] = 0x52; - - mac_addr[3] = 0x00; - mac_addr[4] = 0xc0; - mac_addr[5] = 0x53; -#endif - ret = rda5890_set_mac_addr(priv, mac_addr); - if (ret) - { - goto done; - } - - ret = rda5890_get_mac_addr(priv, mac_addr); - if (ret) { - goto done; - } - memcpy(priv->dev->dev_addr, mac_addr, ETH_ALEN); - -#ifdef WIFI_TEST_MODE - } -#endif - - if (register_netdev(dev)) { - RDA5890_ERRP("register_netdev failed\n"); - goto done; - } - -#ifdef WIFI_TEST_MODE - if(!rda_5990_wifi_in_test_mode()) - { -#endif - - rda5890_set_preamble(priv, G_AUTO_PREAMBLE); - - rda5890_indicate_disconnected(priv); -#ifdef WIFI_TEST_MODE - } -#endif - - -done: - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - return ret; -} - -void rda5890_stop_card(struct rda5890_private *priv) -{ - struct net_device *dev = priv->dev; - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - rda5890_indicate_disconnected(priv); - unregister_netdev(dev); - - RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); -} - -void rda5890_shedule_timeout(int msecs) -{ - int timeout = 0, expires = 0; - expires = jiffies + msecs_to_jiffies(msecs); - timeout = msecs; - - while(timeout) - { - timeout = schedule_timeout(timeout); - - if(time_after(jiffies, expires)) - break; - } -} - -#ifdef WIFI_UNLOCK_SYSTEM - -void rda5990_wakeLock(void) -{ - if(atomic_read(&wake_lock_counter) == 0) - wake_lock(&sleep_worker_wake_lock); - atomic_inc(&wake_lock_counter); -} - -void rda5990_wakeUnlock(void) -{ - - if(atomic_read(&wake_lock_counter) == 1) - { - atomic_set(&wake_lock_counter, 0); - wake_unlock(&sleep_worker_wake_lock); - } - else if(atomic_read(&wake_lock_counter) > 0) - { - atomic_dec(&wake_lock_counter); - } - -} - -void rda5990_wakeLock_destroy(void) -{ - if(atomic_read(&wake_lock_counter) > 0) - { - atomic_set(&wake_lock_counter, 0); - wake_unlock(&sleep_worker_wake_lock); - } - - wake_lock_destroy(&sleep_worker_wake_lock); - -} - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_dev.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_dev.h deleted file mode 100755 index 1f3656733be8..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_dev.h +++ /dev/null @@ -1,272 +0,0 @@ -/** - * This file contains definitions and data structures specific - * to Marvell 802.11 NIC. It contains the Device Information - * structure struct lbs_private.. - */ -#ifndef _RDA5890_DEV_H_ -#define _RDA5890_DEV_H_ -#include -#include -#include -#include -#include -#include -#include "rda5890_defs.h" -//#include "hif_sdio.h" - - -#ifndef MAX_WPA_IE_LEN -#define MAX_WPA_IE_LEN 100 -#endif - -#ifndef MAX_RATES -#define MAX_RATES 14 -#endif - -#define DEV_NAME_LEN 32 - -#define RDA5890_MAX_NETWORK_NUM 32 - -/** RSSI related MACRO DEFINITIONS */ -#define RDA5890_NF_DEFAULT_SCAN_VALUE (-96) -#define PERFECT_RSSI ((u8)50) -#define WORST_RSSI ((u8)0) -#define RSSI_DIFF ((u8)(PERFECT_RSSI - WORST_RSSI)) - -/** RTS/FRAG related defines */ -#define RDA5890_RTS_MIN_VALUE 0 -#define RDA5890_RTS_MAX_VALUE 2347 -#define RDA5890_FRAG_MIN_VALUE 256 -#define RDA5890_FRAG_MAX_VALUE 2346 - -#define KEY_LEN_WPA_AES 16 -#define KEY_LEN_WPA_TKIP 32 -#define KEY_LEN_WEP_104 13 -#define KEY_LEN_WEP_40 5 - -#define BIT7 (1 << 7) -#define BIT6 (1 << 6) -#define BIT5 (1 << 5) -#define BIT4 (1 << 4) -#define BIT3 (1 << 3) -#define BIT2 (1 << 2) -#define BIT1 (1 << 1) -#define BIT0 (1 << 0) - -#define RDA_SLEEP_ENABLE BIT0 -#define RDA_SLEEP_PREASSO BIT1 - -//#define WIFI_UNIT_TEST - -/** KEY_TYPE_ID */ -enum KEY_TYPE_ID { - KEY_TYPE_ID_WEP = 0, - KEY_TYPE_ID_TKIP, - KEY_TYPE_ID_AES -}; - -enum PACKET_TYPE{ - WID_REQUEST_PACKET, - WID_REQUEST_POLLING_PACKET, - DATA_REQUEST_PACKET -}; - -/** KEY_INFO_WPA (applies to both TKIP and AES/CCMP) */ -enum KEY_INFO_WPA { - KEY_INFO_WPA_MCAST = 0x01, - KEY_INFO_WPA_UNICAST = 0x02, - KEY_INFO_WPA_ENABLED = 0x04 -}; - -/* RDA5890 defined bss descriptor, 44 bytes for each bss */ -struct rda5890_bss_descriptor { - u8 ssid[IW_ESSID_MAX_SIZE + 1]; - u8 bss_type; - u8 channel; - u8 dot11i_info; - u8 bssid[ETH_ALEN]; - u8 rssi; - u8 auth_info; - u8 rsn_cap[2]; -} __attribute__ ((packed)); - -/** - * @brief Structure used to store information for each beacon/probe response - */ -struct bss_descriptor { - struct rda5890_bss_descriptor data; - - u8 bssid[ETH_ALEN]; - - u8 ssid[IW_ESSID_MAX_SIZE + 1]; - u8 ssid_len; - - u16 capability; - u32 rssi; - u32 channel; - u16 beaconperiod; - - /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */ - u8 mode; - - /* zero-terminated array of supported data rates */ - u8 rates[MAX_RATES + 1]; - u8 wpa_ie[MAX_WPA_IE_LEN]; - size_t wpa_ie_len; - u8 rsn_ie[MAX_WPA_IE_LEN]; - size_t rsn_ie_len; - - u8 wapi_ie[100]; - size_t wapi_ie_len; //wapi valid payload length - - unsigned long last_scanned; - - - struct list_head list; -}; - -/* Generic structure to hold all key types. */ -struct enc_key { - u16 len; - u16 flags; /* KEY_INFO_* from defs.h */ - u16 type; /* KEY_TYPE_* from defs.h */ - u8 key[32]; -}; - -struct rda5890_802_11_security { - u8 WPAenabled; - u8 WPA2enabled; - u8 wep_enabled; - u8 auth_mode; - u32 key_mgmt; - u32 cipther_type; -}; - -/** Private structure for the rda5890 device */ -struct rda5890_private { - char name[DEV_NAME_LEN]; - - void *card; - struct net_device *dev; - - struct net_device_stats stats; - - /** current ssid/bssid related parameters and status */ - int connect_status; - struct rda5890_bss_descriptor curbssparams; - struct iw_statistics wstats; - - /** association flags */ - unsigned char assoc_ssid[IW_ESSID_MAX_SIZE + 1]; - unsigned char assoc_bssid[6]; - unsigned char assoc_ssid_len; -#define ASSOC_FLAG_SSID 1 -#define ASSOC_FLAG_CHANNEL 2 -#define ASSOC_FLAG_BAND 3 -#define ASSOC_FLAG_MODE 4 -#define ASSOC_FLAG_BSSID 5 -#define ASSOC_FLAG_WEP_KEYS 6 -#define ASSOC_FLAG_WEP_TX_KEYIDX 7 -#define ASSOC_FLAG_WPA_MCAST_KEY 8 -#define ASSOC_FLAG_WPA_UCAST_KEY 9 -#define ASSOC_FLAG_SECINFO 10 -#define ASSOC_FLAG_WPA_IE 11 -#define ASSOC_FLAG_ASSOC_RETRY 12 -#define ASSOC_FLAG_ASSOC_START 13 -#define ASSOC_FLAG_WLAN_CONNECTING 14 - - unsigned long assoc_flags; - unsigned char imode; - unsigned char authtype; - - /** debugfs */ - struct dentry *debugfs_dir; - struct dentry *debugfs_files[6]; - - /** for wid request and response */ - struct mutex wid_lock; - struct completion wid_done; - int wid_pending; - char *wid_rsp; - unsigned short wid_rsp_len; - char wid_msg_id; - - /** delayed worker */ - struct workqueue_struct *work_thread; - struct delayed_work scan_work; - struct delayed_work assoc_work; - struct delayed_work assoc_done_work; - struct delayed_work wlan_connect_work; - - /** Hardware access */ - int (*hw_host_to_card) (struct rda5890_private *priv, u8 *payload, u16 nb, - unsigned char packet_type); - - /** Scan results list */ - int scan_running; - struct list_head network_list; - struct list_head network_free_list; - struct bss_descriptor *networks; - - /** Encryption parameter */ - struct rda5890_802_11_security secinfo; - - /** WEP keys */ - struct enc_key wep_keys[4]; - u16 wep_tx_keyidx; - - /** WPA keys */ - struct enc_key wpa_mcast_key; - struct enc_key wpa_unicast_key; - - /** WPA Information Elements*/ - u8 wpa_ie[MAX_WPA_IE_LEN]; - u8 wpa_ie_len; - - u8 is_wapi; - /** sleep/awake flag */ -#ifdef WIFI_POWER_MANAGER - atomic_t sleep_flag; -#endif - u8 first_init; - u16 version; -}; - -extern int rda5890_sleep_flags; - -#ifdef WIFI_TEST_MODE -extern unsigned char rda_5990_wifi_in_test_mode(void); -#endif - -#ifdef WIFI_UNLOCK_SYSTEM -extern atomic_t wake_lock_counter; -extern struct wake_lock sleep_worker_wake_lock; -extern void rda5990_wakeLock(void); -extern void rda5990_wakeUnlock(void); -extern void rda5990_wakeLock_destroy(void); -#endif - -struct rda5890_private *rda5890_add_card(void *card); -void rda5890_remove_card(struct rda5890_private *priv); -int rda5890_start_card(struct rda5890_private *priv); -void rda5890_stop_card(struct rda5890_private *priv); -int rda5890_sdio_core_wake_mode(struct rda5890_private *priv); -int rda5890_sdio_core_sleep_mode(struct rda5890_private *priv); -int rda5890_sdio_core_wake_mode_polling(struct rda5890_private *priv); - -void rda5890_sdio_set_notch_by_channel(struct rda5890_private *priv, unsigned int channel); -void rda5890_rssi_up_to_200(struct rda5890_private *priv); -void rda5990_assoc_power_save(struct rda5890_private *priv); -unsigned char is_sdio_init_complete(void); -unsigned char is_sdio_patch_complete(void); -int rda5890_sdio_init(struct rda5890_private *priv); -int rda5890_init_pm(struct rda5890_private *priv); -void rda5890_shedule_timeout(int msecs); -int rda5890_read_mac(char* buf); -int rda5890_write_mac(char * buf); -int rda5890_disable_block_bt(struct rda5890_private *priv); -int rda5890_disable_self_cts(struct rda5890_private *priv); -int rda5890_set_active_scan_time(struct rda5890_private *priv); -int rda5890_set_test_mode(struct rda5890_private *priv); -int rda5890_get_fw_version_polling(struct rda5890_private *priv, unsigned int* version); -#endif diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_if_sdio.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_if_sdio.c deleted file mode 100755 index 44c780412897..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_if_sdio.c +++ /dev/null @@ -1,795 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "rda5890_defs.h" -#include "rda5890_dev.h" -#include "rda5890_if_sdio.h" -#include "rda5890_wid.h" -#include "rda5890_debugfs.h" - -int rda5890_dbg_level = RDA5890_DL_CRIT; -int rda5890_dbg_area = RDA5890_DA_MAIN - | RDA5890_DA_SDIO - //| RDA5890_DA_ETHER - | RDA5890_DA_WID - | RDA5890_DA_WEXT - //| RDA5890_DA_TXRX - //| RDA5890_DA_PM - ; - -void export_msdc_clk_always_on(void) -{ - // todo... -} - -void export_msdc_clk_always_on_off(void) -{ - // todo... -} - -extern void rk29_sdio_irq_enable(int enable); -void export_wifi_eirq_enable(void) -{ - // todo... - //rk29_sdio_irq_enable(1); -} - -void export_wifi_eirq_disable(void) -{ - // todo... - //rk29_sdio_irq_enable(0); -} - -/* Module parameters */ -module_param_named(debug_level, rda5890_dbg_level, int, 0644); -module_param_named(debug_area, rda5890_dbg_area, int, 0644); -int sdio_test_flag = 0; -module_param_named(sdio_test, sdio_test_flag, int, 0644); - -#define SDIO_VENDOR_ID_RDA5890 0x5449 -#define SDIO_DEVICE_ID_RDA5890 0x0145 - -static const struct sdio_device_id if_sdio_ids[] = { - { SDIO_DEVICE(SDIO_VENDOR_ID_RDA5890, SDIO_DEVICE_ID_RDA5890) }, - { /* end: all zeroes */ }, -}; - -MODULE_DEVICE_TABLE(sdio, if_sdio_ids); - -struct if_sdio_packet { - struct if_sdio_packet *next; - unsigned char packet_type; - u16 nb; - u8 buffer[0] __attribute__((aligned(4))); -}; - -int if_sdio_card_to_host(struct if_sdio_card *card) -{ - int ret = 0; - struct rda5890_private *priv = card->priv; - u8 size_l = 0, size_h = 0; - u16 size, chunk; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - size_l = sdio_readb(card->func, IF_SDIO_AHB2SDIO_PKTLEN_L, &ret); - if (ret) { - RDA5890_ERRP("read PKTLEN_L reg fail\n"); - goto out; - } - else - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_NORM,"read PKTLEN_L reg size_l:%d \n", size_l); - - size_h = sdio_readb(card->func, IF_SDIO_AHB2SDIO_PKTLEN_H, &ret); - if (ret) { - RDA5890_ERRP("read PKTLEN_H reg fail\n"); - goto out; - } - else - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_NORM,"read PKTLEN_H reg size_h:%d\n",size_h); - - size = (size_l | ((size_h & 0x7f) << 8)) * 4; - if (size < 4) { - RDA5890_ERRP("invalid packet size (%d bytes) from firmware\n", size); - ret = -EINVAL; - goto out; - } - - /* alignment is handled on firmside */ - //chunk = sdio_align_size(card->func, size); - chunk = size; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_NORM, - "if_sdio_card_to_host, size = %d, aligned size = %d\n", size, chunk); - - /* TODO: handle multiple packets here */ - ret = sdio_readsb(card->func, card->buffer, IF_SDIO_FUN1_FIFO_RD, chunk); - if (ret) { - RDA5890_ERRP("sdio_readsb fail, ret = %d\n", ret); - goto out; - } - -#if 1 - if(priv->version == 7) - { - sdio_writeb(card->func, 0x20 ,IF_SDIO_FUN1_INT_PEND, &ret); - if(ret) { - RDA5890_ERRP("clear SDIO Tx Complete flag failed\n"); - goto out; - } - } -#endif - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_VERB, - "if_sdio_card_to_host, read done\n"); - - if (sdio_test_flag) { - rda5890_sdio_test_card_to_host(card->buffer, chunk); - goto out; - } - - /* TODO: this chunk size need to be handled here */ - rda5890_card_to_host(priv, card->buffer, chunk); - -out: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "if_sdio_card_to_host >>>\n"); - return ret; -} - -#ifdef WIFI_POWER_MANAGER -void if_sdio_sleep_worker(struct work_struct *work) -{ - struct if_sdio_card *card = NULL; - int ret = 0; - struct rda5890_private *priv = NULL; - - card = container_of(work, struct if_sdio_card, - sleep_work.work); - - if(card) - priv = card->priv; - else - goto out; - - if(!priv) - goto out; - - RDA5890_DBGLAP(RDA5890_DA_PM, RDA5890_DL_CRIT, "Sleep\n"); - - /* clear IF_SDIO_FUN1_INT_PEND, this allow device to sleep */ - sdio_claim_host(card->func); - sdio_writeb(card->func, IF_SDIO_HOST_TX_FLAG ,IF_SDIO_FUN1_INT_PEND, &ret); - sdio_release_host(card->func); - if (ret) - { - RDA5890_ERRP("clear IF_SDIO_HOST_TX_FLAG failed\n"); - } - atomic_inc(&card->priv->sleep_flag); - -out: - - atomic_set(&card->sleep_work_is_active, 0); -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeUnlock(); -#endif - return; -} - -static int if_sdio_wakeup_card(struct if_sdio_card *card) -{ - struct rda5890_private *priv = card->priv; - int ret = 0; - -#ifdef WIFI_TEST_MODE - if(rda_5990_wifi_in_test_mode()) - return 0; -#endif - sdio_claim_host(card->func); - sdio_writeb(card->func, 1, IF_SDIO_FUN1_INT_TO_DEV, &ret); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("write FUN1_INT_TO_DEV reg fail\n"); - goto out; - } - atomic_set(&priv->sleep_flag, 0); - - RDA5890_DBGLAP(RDA5890_DA_PM, RDA5890_DL_CRIT, "wake up \n"); - // wait 15ms, hardware need 13ms to wakeup - rda5890_shedule_timeout(8); -out: - return ret; -} - -#endif //WIFI_POWER_MANAGER - -static void if_sdio_host_to_card_worker(struct work_struct *work) -{ - struct if_sdio_card *card = NULL; - struct rda5890_private *priv = NULL; - struct if_sdio_packet *packet = NULL; - int ret; - unsigned long flags; - u16 size; - u32 retries = 500; - u8 size_l, size_h, write_status = 0; -#define SDIO_HOST_WRITE_BATCH_SIZE 512 - u16 bytes_left, offset, batch; - - card = container_of(work, struct if_sdio_card, packet_worker); - priv = card->priv; - - -#ifdef WIFI_POWER_MANAGER - if(is_sdio_init_complete()) - { - if(atomic_read(&card->sleep_work_is_active)) - { - cancel_delayed_work(&card->sleep_work); -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeUnlock(); -#endif - atomic_set(&card->sleep_work_is_active, 0); - } - } -#endif - - while (1) - { - retries = 500; - - spin_lock_irqsave(&card->lock, flags); - packet = card->packets; - if (packet) - card->packets = packet->next; - spin_unlock_irqrestore(&card->lock, flags); - - if (!packet) - break; - -#ifdef WIFI_POWER_MANAGER - if (atomic_read(&priv->sleep_flag)) - { - /* Deivce maybe sleep, wakeup it. */ - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_NORM, "Wakeup\n"); - ret = if_sdio_wakeup_card(card); - if (ret) - { - RDA5890_ERRP("wakeup card fail\n"); - goto out; - } - } -#endif - while(retries && is_sdio_patch_complete()) //check write flow ctrl - { - sdio_claim_host(card->func); - write_status = sdio_readb(card->func, IF_SDIO_FUN1_INT_PEND, &ret); - sdio_release_host(card->func); - if(ret) - { - RDA5890_ERRP("read IF_SDIO_FUN1_INT_PEND failed\n"); - goto release; - } - if((write_status & IF_SDIO_INT_RXCMPL) == 0) - { - //RDA5890_ERRP("**** sdio is busy retry next time \n "); - retries --; - schedule(); - } - else - { - sdio_claim_host(card->func); - sdio_writeb(card->func, IF_SDIO_INT_RXCMPL, IF_SDIO_FUN1_INT_PEND, &ret); - sdio_release_host(card->func); - if(ret) - { - RDA5890_ERRP("write IF_SDIO_FUN1_INT_PEND failed\n"); - goto release; - } - break; - } - } - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "if_sdio_host_to_card_worker, send one packet, size = %d\n", packet->nb); - /* write length */ - size = packet->nb/4; - size_l = (u8)(size & 0xff); - size_h = (u8)((size >> 8) & 0x7f); - size_h |= 0x80; - - sdio_claim_host(card->func); - sdio_writeb(card->func, size_l, IF_SDIO_SDIO2AHB_PKTLEN_L, &ret); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("write PKTLEN_L reg fail\n"); - goto release; - } - sdio_claim_host(card->func); - sdio_writeb(card->func, size_h, IF_SDIO_SDIO2AHB_PKTLEN_H, &ret); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("write PKTLEN_H reg fail\n"); - goto release; - } - - /* write data */ - bytes_left = packet->nb; - offset = 0; - while(bytes_left) - { - batch = (bytes_left < SDIO_HOST_WRITE_BATCH_SIZE)? - bytes_left:SDIO_HOST_WRITE_BATCH_SIZE; - - sdio_claim_host(card->func); - ret = sdio_writesb(card->func, IF_SDIO_FUN1_FIFO_WR, - packet->buffer + offset, batch); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("sdio_writesb fail, ret = %d\n", ret); - goto release; - } - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "write batch %d, offset = %d\n", batch, offset); - - offset += batch; - bytes_left -= batch; - } - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "if_sdio_host_to_card_worker, send one packet done\n"); - -release: - - kfree(packet); - packet = NULL; - } - -out: - - if(is_sdio_init_complete()) //init complete should start sleep_work - { -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeLock(); -#endif - -#ifdef WIFI_POWER_MANAGER -#ifdef WIFI_TEST_MODE - if(rda_5990_wifi_in_test_mode()) - return; -#endif //end WIFI_TEST_MODE - atomic_set(&card->sleep_work_is_active, 1); - queue_delayed_work(priv->work_thread, &card->sleep_work, HZ/5); // 100ms -#endif //end WIFI_POWER_MANAGER - } -} - -/*******************************************************************/ -/* RDA5890 callbacks */ -/*******************************************************************/ - -static int if_sdio_host_to_card(struct rda5890_private *priv, - u8 *buf, u16 nb, unsigned char packet_type) -{ - int ret = 0; - struct if_sdio_card *card; - struct if_sdio_packet *packet, *cur; - u16 size; - unsigned long flags; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - card = priv->card; - - if (nb > (65536 - sizeof(struct if_sdio_packet))) { - ret = -EINVAL; - goto out; - } - - //size = sdio_align_size(card->func, nb); - size = nb; - if(size%4) - { - size += (4-size%4); - } - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_NORM, - "if_sdio_host_to_card, size = %d, aligned size = %d\n", nb, size); - - packet = kzalloc(sizeof(struct if_sdio_packet) + size, - GFP_ATOMIC); - if (!packet) { - ret = -ENOMEM; - goto out; - } - - packet->next = NULL; - packet->nb = size; - packet->packet_type = packet_type; - - memcpy(packet->buffer, buf, nb); - - spin_lock_irqsave(&card->lock, flags); - - if (!card->packets) - card->packets = packet; - else { - cur = card->packets; - while (cur->next) - cur = cur->next; - cur->next = packet; - } - - spin_unlock_irqrestore(&card->lock, flags); - - queue_work(card->work_thread, &card->packet_worker); - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - - ret = 0; - -out: - return ret; -} - -static void if_sdio_interrupt(struct sdio_func *func) -{ - int ret = 0; - struct if_sdio_card *card; - struct rda5890_private *priv; - u8 status; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - card = sdio_get_drvdata(func); - if(!card) - return; - - priv = card->priv; - - status = sdio_readb(card->func, IF_SDIO_FUN1_INT_STAT, &ret); - if (ret) - goto out; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_VERB, - "if_sdio_interrupt, status = 0x%02x\n", status); - - if (status & IF_SDIO_INT_AHB2SDIO) - if_sdio_card_to_host(card); - - if (status & IF_SDIO_INT_ERROR) - { - sdio_writeb(card->func, IF_SDIO_INT_ERROR, IF_SDIO_FUN1_INT_PEND, &ret); - if (ret) - { - RDA5890_ERRP("write FUN1_INT_STAT reg fail\n"); - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "%s, INT_ERROR\n", __func__); - } - -out: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< ret=%d \n", __func__, ret); - return ret; -} - - -static int if_sdio_probe(struct sdio_func *func, - const struct sdio_device_id *id) -{ - struct if_sdio_card *card = NULL; - struct rda5890_private *priv = NULL; - struct if_sdio_packet *packet = NULL; - int ret = -1; - unsigned long flags; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - //SMC_MSG("[rda_debug] sunximmc_probe, set clk.\n"); - - //mmc_set_clock(mmc, 4000000); - - - if(id->vendor != 0x5449) - { - RDA5890_ERRP("rda5890 sdio not corrent vendor:%x \n", id->vendor); - goto out; - } - - card = kzalloc(sizeof(struct if_sdio_card), GFP_KERNEL); - if (!card) { - RDA5890_ERRP("kzalloc fail\n"); - return -ENOMEM; - } - - card->func = func; - spin_lock_init(&card->lock); - atomic_set(&card->wid_complete_flag, 0); - INIT_WORK(&card->packet_worker, if_sdio_host_to_card_worker); - card->work_thread = create_singlethread_workqueue("rda5890_if_sdio_worker"); - -#ifdef WIFI_POWER_MANAGER - atomic_set(&card->sleep_work_is_active, 0); - INIT_DELAYED_WORK(&card->sleep_work, if_sdio_sleep_worker); -#endif - -#ifdef WIFI_UNLOCK_SYSTEM - atomic_set(&wake_lock_counter, 0); - wake_lock_init(&sleep_worker_wake_lock, WAKE_LOCK_SUSPEND, "RDA_sleep_worker_wake_lock"); -#endif - - sdio_claim_host(func); - ret = sdio_enable_func(func); - if (ret) { - RDA5890_ERRP("sdio_enable_func fail, ret = %d\n", ret); - goto release; - } - - ret = sdio_claim_irq(func, if_sdio_interrupt); - if (ret) { - RDA5890_ERRP("sdio_claim_irq fail, ret = %d\n", ret); - goto disable; - } - - sdio_release_host(func); - sdio_set_drvdata(func, card); - - priv = rda5890_add_card(card); - if (!priv) { - RDA5890_ERRP("rda5890_add_card fail\n"); - ret = -ENOMEM; - goto release_int; - } - rda5890_debugfs_init_one(priv); - - card->priv = priv; - priv->card = card; - priv->hw_host_to_card = if_sdio_host_to_card; - - /* - * Enable interrupts now that everything is set up - */ - sdio_claim_host(func); - sdio_writeb(func, 0x7, IF_SDIO_FUN1_INT_MASK, &ret); - sdio_release_host(func); - if (ret) { - RDA5890_ERRP("enable func interrupt fail\n"); - goto remove_card; - } -#ifdef WIFI_TEST_MODE - if(!rda_5990_wifi_in_test_mode()) - { -#endif - ret = rda5890_sdio_init(priv); - if(ret < 0) - goto remove_card; - - ret=rda5890_disable_self_cts(priv); - if(ret < 0) - goto remove_card; - - ret=rda5890_disable_block_bt(priv); - if(ret < 0) - goto remove_card; - - ret = rda5890_set_scan_timeout(priv); - if (ret) { - RDA5890_ERRP("rda5890_set_scan_timeout fail, ret = %d\n", ret); - goto remove_card; - } - - ret= rda5890_set_listen_interval(priv, 0x06); - if(ret < 0) - goto remove_card; - - ret = rda5890_set_link_loss_threshold(priv, 0x06); - if(ret < 0) - goto remove_card; - - ret = rda5890_init_pm(priv); - if(ret < 0) - goto remove_card; - -#ifdef WIFI_TEST_MODE - } - else - { - ret = rda5890_set_test_mode(priv); - if(ret < 0) - goto remove_card; - } -#endif - - if (sdio_test_flag) { - unsigned char mac_addr[6]; - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_TRACE, - "SDIO TESTING MODE\n"); - - - ret = rda5890_get_mac_addr(priv, mac_addr); - printk(KERN_INFO "Test rda5890_get_mac_addr %x:%x:%x:%x:%x:%x", mac_addr[0],mac_addr[1],mac_addr[2],mac_addr[3],mac_addr[4],mac_addr[5]); - goto done; - } - - ret = rda5890_start_card(priv); - if (ret) { - RDA5890_ERRP("rda5890_start_card fail, ret = %d\n", ret); - goto remove_card; - } - -done: - printk(KERN_INFO "RDA5890: SDIO card started\n"); - -out: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s ret:%d <<<\n", __func__, ret); - return ret; - -release_int: - sdio_claim_host(func); - sdio_release_irq(func); -disable: - sdio_disable_func(func); -release: - sdio_release_host(func); - -remove_card: - - if (atomic_read(&card->wid_complete_flag) && priv) - { - complete(&priv->wid_done); - printk(KERN_INFO "*****RDA5890: probe send wid complete\n"); - } - flush_work(&card->packet_worker); - cancel_work_sync(&card->packet_worker); - -#ifdef WIFI_POWER_MANAGER - cancel_delayed_work(&card->sleep_work); -#endif - destroy_workqueue(card->work_thread); - - if(priv) - rda5890_remove_card(priv); - - while (card->packets) { - packet = card->packets; - card->packets = card->packets->next; - kfree(packet); - } - - kfree(card); - goto out; -} - -static void if_sdio_remove(struct sdio_func *func) -{ - struct if_sdio_card *card; - struct if_sdio_packet *packet; - unsigned char count = 20; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - printk(KERN_INFO "RDA5890: SDIO card detached\n"); - - card = sdio_get_drvdata(func); - if(!card) - return; - while(card->priv->scan_running && count--) - { - rda5890_shedule_timeout(100); - printk("remove card wait scan complete \n"); - } - -#ifdef WIFI_POWER_MANAGER - cancel_delayed_work_sync(&card->sleep_work); -#endif - cancel_work_sync(&card->packet_worker); - - if (atomic_read(&card->wid_complete_flag) && card->priv) - { - complete(&card->priv->wid_done); - printk(KERN_INFO "*****RDA5890: send wid complete\n"); - } - - netif_stop_queue(card->priv->dev); - netif_carrier_off(card->priv->dev); - rda5890_stop_card(card->priv); - rda5890_debugfs_remove_one(card->priv); - destroy_workqueue(card->work_thread); - rda5890_remove_card(card->priv); - - while (card->packets) { - packet = card->packets; - card->packets = card->packets->next; - kfree(packet); - } - - kfree(card); - -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeLock_destroy(); -#endif - - printk(KERN_INFO "RDA5890: SDIO card removed\n"); - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - return; -} - -static struct sdio_driver if_sdio_driver = { - .name = "rda5890_sdio", - .id_table = if_sdio_ids, - .probe = if_sdio_probe, - .remove = if_sdio_remove, -}; - -/*******************************************************************/ -/* Module functions */ -/*******************************************************************/ -extern void mmc_rescan_slot(int id); - -static int __init if_sdio_init_module(void) -{ - int ret = 0; - - printk(KERN_INFO "\nRDA5890 SDIO WIFI Driver for st_linux \n"); - printk(KERN_INFO "Ver: %d.%d.%d\n\n", - RDA5890_SDIOWIFI_VER_MAJ, - RDA5890_SDIOWIFI_VER_MIN, - RDA5890_SDIOWIFI_VER_BLD); - - printk("@@@@@@@@@@@@@@@22222 rda5990 start\n"); - - msleep(1000); - - printk("@@@@@@@@@@@@@@ mmc_rescan_slot\n"); - mmc_rescan_slot(0); - msleep(1000); - - rda5890_debugfs_init(); - ret = sdio_register_driver(&if_sdio_driver); - - if (ret) - { - printk(KERN_INFO "\nif_sdio_init_module: register fail. \n"); - //sunximmc_rescan_card(SDIOID,0); - } - - printk(KERN_INFO "\n if_sdio_init_module: register successful. \n"); - - return ret; -} - -extern void mmc_remove(int id); -static void __exit if_sdio_exit_module(void) -{ - printk(KERN_INFO "\n if_sdio_exit_module. \n"); - mmc_remove(0); - rda5890_debugfs_remove(); - sdio_unregister_driver(&if_sdio_driver); -} - - -module_init(if_sdio_init_module); -module_exit(if_sdio_exit_module); - -MODULE_DESCRIPTION("RDA5890 SDIO WLAN Driver"); -MODULE_AUTHOR("lwang"); -MODULE_LICENSE("GPL"); diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_if_sdio.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_if_sdio.h deleted file mode 100755 index 6c5a7583c4da..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_if_sdio.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _RDA5890_IF_SDIO_H -#define _RDA5890_IF_SDIO_H - -#define IF_SDIO_SDIO2AHB_PKTLEN_L 0x00 -#define IF_SDIO_SDIO2AHB_PKTLEN_H 0x01 - -#define IF_SDIO_AHB2SDIO_PKTLEN_L 0x02 -#define IF_SDIO_AHB2SDIO_PKTLEN_H 0x03 - -#define IF_SDIO_FUN1_INT_MASK 0x04 -#define IF_SDIO_FUN1_INT_PEND 0x05 -#define IF_SDIO_FUN1_INT_STAT 0x06 - -#define IF_SDIO_INT_AHB2SDIO 0x01 -#define IF_SDIO_INT_ERROR 0x04 -#define IF_SDIO_INT_SLEEP 0x10 -#define IF_SDIO_INT_AWAKE 0x20 -#define IF_SDIO_INT_RXCMPL 0x40 -#define IF_SDIO_HOST_TX_FLAG 0x80 - -#define IF_SDIO_FUN1_FIFO_WR 0x07 -#define IF_SDIO_FUN1_FIFO_RD 0x08 - -#define IF_SDIO_FUN1_INT_TO_DEV 0x09 - -struct if_sdio_card { - struct sdio_func *func; - struct rda5890_private *priv; - - u8 buffer[2048]; - - spinlock_t lock; - struct if_sdio_packet *packets; - struct work_struct packet_worker; - - struct workqueue_struct *work_thread; - atomic_t wid_complete_flag; -#ifdef WIFI_POWER_MANAGER - atomic_t sleep_work_is_active; - struct delayed_work sleep_work; -#endif -}; - -void export_msdc_clk_always_on(void); -void export_msdc_clk_always_on_off(void); -void export_wifi_eirq_enable(void); -void export_wifi_eirq_disable(void); - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_ioctl.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_ioctl.h deleted file mode 100755 index 0dc1d4e22799..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_ioctl.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _RDA5890_IOCTL_H_ -#define _RDA5890_IOCTL_H_ - -#include "linux/sockios.h" - -#define IOCTL_RDA5890_BASE SIOCDEVPRIVATE -#define IOCTL_RDA5890_GET_MAGIC IOCTL_RDA5890_BASE -#define IOCTL_RDA5890_GET_DRIVER_VER (IOCTL_RDA5890_BASE + 1) -#define IOCTL_RDA5890_MAC_GET_FW_VER (IOCTL_RDA5890_BASE + 2) -#define IOCTL_RDA5890_MAC_WID (IOCTL_RDA5890_BASE + 3) -#define IOCTL_RDA5890_SET_WAPI_ASSOC_IE (IOCTL_RDA5890_BASE + 4) -#define IOCTL_RDA5890_GET_WAPI_ASSOC_IE (IOCTL_RDA5890_BASE + 5) - -#define RDA5890_MAGIC 0x5890face - -#endif /* _RDA5890_IOCTL_H_ */ - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_nvram.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_nvram.c deleted file mode 100755 index fb93a2e74b75..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_nvram.c +++ /dev/null @@ -1,108 +0,0 @@ -#include -#include - -#define WIFI_NVRAM_FILE_NAME "/data/nvram/APCFG/APRDEB/RDAWIFI" - -static int nvram_read(char *filename, char *buf, ssize_t len, int offset) -{ - struct file *fd; - //ssize_t ret; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_WRONLY|O_CREAT, 0644); - - if(IS_ERR(fd)) { - printk("[rda5890][nvram_read] : failed to open!!\n"); - return -1; - } - do{ - if ((fd->f_op == NULL) || (fd->f_op->read == NULL)) - { - printk("[rda5890][nvram_read] : file can not be read!!\n"); - break; - } - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - printk("[rda5890][nvram_read] : failed to seek!!\n"); - break; - } - } else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->read(fd, - buf, - len, - &fd->f_pos); - - }while(false); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; -} - -static int nvram_write(char *filename, char *buf, ssize_t len, int offset) -{ - struct file *fd; - int retLen = -1; - - mm_segment_t old_fs = get_fs(); - set_fs(KERNEL_DS); - - fd = filp_open(filename, O_WRONLY|O_CREAT, 0644); - - if(IS_ERR(fd)) { - printk("[rda5890][nvram_write] : failed to open!!\n"); - return -1; - } - do{ - if ((fd->f_op == NULL) || (fd->f_op->write == NULL)) - { - printk("[rda5890][nvram_write] : file can not be write!!\n"); - break; - } /* End of if */ - - if (fd->f_pos != offset) { - if (fd->f_op->llseek) { - if(fd->f_op->llseek(fd, offset, 0) != offset) { - printk("[rda5890][nvram_write] : failed to seek!!\n"); - break; - } - } else { - fd->f_pos = offset; - } - } - - retLen = fd->f_op->write(fd, - buf, - len, - &fd->f_pos); - - }while(false); - - filp_close(fd, NULL); - - set_fs(old_fs); - - return retLen; -} - -int rda5890_read_mac(char* buf) -{ - return nvram_read(WIFI_NVRAM_FILE_NAME, buf, 6, 0); -} - -int rda5890_write_mac(char * buf) -{ - return nvram_write(WIFI_NVRAM_FILE_NAME, buf, 6, 0); -} - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_scan.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_scan.c deleted file mode 100755 index 207595cf5a96..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_scan.c +++ /dev/null @@ -1,369 +0,0 @@ -#include -#include -#include -#include -#include - - -#include "rda5890_dev.h" -#include "rda5890_defs.h" - -//#define SCAN_RESULT_DEBUG - -//added by xiongzhi for wapi -#ifndef FCS_LEN -#define FCS_LEN 4 -#endif - -/* Element ID of various Information Elements */ -typedef enum {ISSID = 0, /* Service Set Identifier */ - ISUPRATES = 1, /* Supported Rates */ - IFHPARMS = 2, /* FH parameter set */ - IDSPARMS = 3, /* DS parameter set */ - ICFPARMS = 4, /* CF parameter set */ - ITIM = 5, /* Traffic Information Map */ - IIBPARMS = 6, /* IBSS parameter set */ - ICTEXT = 16, /* Challenge Text */ - IERPINFO = 42, /* ERP Information */ - IEXSUPRATES = 50, /* Extended Supported Rates */ - IWAPI =68 -} ELEMENTID_T; - -/* Capability Information field bit assignments */ -typedef enum {ESS = 0x01, /* ESS capability */ - IBSS = 0x02, /* IBSS mode */ - POLLABLE = 0x04, /* CF Pollable */ - POLLREQ = 0x08, /* Request to be polled */ - PRIVACY = 0x10, /* WEP encryption supported */ - SHORTPREAMBLE = 0x20, /* Short Preamble is supported */ - SHORTSLOT = 0x400, /* Short Slot is supported */ - PBCC = 0x40, /* PBCC */ - CHANNELAGILITY = 0x80, /* Channel Agility */ - SPECTRUM_MGMT = 0x100, /* Spectrum Management */ - DSSS_OFDM = 0x2000 /* DSSS-OFDM */ -} CAPABILITY_T; - -/* BSS type */ -typedef enum {INFRASTRUCTURE = 1, - INDEPENDENT = 2, - ANY_BSS = 3 -} BSSTYPE_T; - -unsigned char* get_ie_elem(unsigned char* msa, ELEMENTID_T elm_id, - unsigned short rx_len,unsigned short tag_param_offset) -{ - unsigned short index = 0; - - /*************************************************************************/ - /* Beacon Frame - Frame Body */ - /* --------------------------------------------------------------------- */ - /* |Timestamp |BeaconInt |CapInfo |SSID |SupRates |DSParSet |TIM elm | */ - /* --------------------------------------------------------------------- */ - /* |8 |2 |2 |2-34 |3-10 |3 |4-256 | */ - /* --------------------------------------------------------------------- */ - /* */ - /*************************************************************************/ - - index = tag_param_offset; - - /* Search for the TIM Element Field and return if the element is found */ - while(index < (rx_len - FCS_LEN)) - { - if(msa[index] == elm_id) - { - return(&msa[index]); - } - else - { - index += (2 + msa[index + 1]); - } - } - - return(0); -} - -/* This function extracts the 'from ds' bit from the MAC header of the input */ -/* frame. */ -/* Returns the value in the LSB of the returned value. */ -unsigned char get_from_ds(unsigned char* header) -{ - return ((header[1] & 0x02) >> 1); -} - -/* This function extracts the 'to ds' bit from the MAC header of the input */ -/* frame. */ -/* Returns the value in the LSB of the returned value. */ -unsigned char get_to_ds(unsigned char* header) -{ - return (header[1] & 0x01); -} - -/* This function extracts the MAC Address in 'address1' field of the MAC */ -/* header and updates the MAC Address in the allocated 'addr' variable. */ -void get_address1(unsigned char* msa, unsigned char* addr) -{ - memcpy(addr, msa + 4, 6); -} - -/* This function extracts the MAC Address in 'address2' field of the MAC */ -/* header and updates the MAC Address in the allocated 'addr' variable. */ -void get_address2(unsigned char* msa, unsigned char* addr) -{ - memcpy(addr, msa + 10, 6); -} - -/* This function extracts the MAC Address in 'address3' field of the MAC */ -/* header and updates the MAC Address in the allocated 'addr' variable. */ -void get_address3(unsigned char* msa, unsigned char* addr) -{ - memcpy(addr, msa + 16, 6); -} - -/* This function extracts the BSSID from the incoming WLAN packet based on */ -/* the 'from ds' bit, and updates the MAC Address in the allocated 'addr' */ -/* variable. */ -void get_BSSID(unsigned char* data, unsigned char* bssid) -{ - if(get_from_ds(data) == 1) - get_address2(data, bssid); - else if(get_to_ds(data) == 1) - get_address1(data, bssid); - else - get_address3(data, bssid); -} - -extern int is_same_network(struct bss_descriptor *src, - struct bss_descriptor *dst); -extern void clear_bss_descriptor(struct bss_descriptor *bss); -void rda5890_network_information(struct rda5890_private *priv, - char *info, unsigned short info_len) -{ - union iwreq_data wrqu; - struct bss_descriptor *iter_bss; - struct bss_descriptor *safe; - struct bss_descriptor bss_desc; - struct bss_descriptor * bss = &bss_desc; - - unsigned char *pos, *end, *p; - unsigned char n_ex_rates = 0, got_basic_rates = 0, n_basic_rates = 0; - struct ieee_ie_country_info_set *pcountryinfo; - int ret; - unsigned char* msa = &info[9]; - unsigned short msa_len = info[6] | (info[7] << 8); - - if(!priv->scan_running) - goto done; - - if((msa_len - 1 + 9 ) != info_len) - { - RDA5890_ERRP("rda5890_network_information verify lengh feild failed \n"); - } - - memset(bss, 0, sizeof (struct bss_descriptor)); - bss->rssi = info[8]; - msa_len -= 1; // has rssi - - get_BSSID(msa, bss->bssid); - - end = msa + msa_len; - - //mac head - pos = msa + 24; - //time stamp - pos += 8; - //beacon - bss->beaconperiod = *(pos) | (*(pos + 1) << 8); - pos += 2 ; - //capability - bss->capability = *(pos) | (*(pos + 1) << 8); - pos += 2; - - if (bss->capability & WLAN_CAPABILITY_IBSS) - bss->mode = IW_MODE_ADHOC; - else - bss->mode = IW_MODE_INFRA; - - /* process variable IE */ - while (pos + 2 <= end) { - if (pos + pos[1] > end) { -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("process_bss: error in processing IE, " - "bytes left < IE length\n"); -#endif - break; - } - - switch (pos[0]) { - case WLAN_EID_SSID: - bss->ssid_len = min_t(int, IEEE80211_MAX_SSID_LEN, pos[1]); - memcpy(bss->ssid, pos + 2, bss->ssid_len); -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got SSID IE: '%s', len %u %d\n", - bss->ssid, - bss->ssid_len, pos[1]); -#endif - break; - - case WLAN_EID_SUPP_RATES: - n_basic_rates = min_t(uint8_t, MAX_RATES, pos[1]); - memcpy(bss->rates, pos + 2, n_basic_rates); - got_basic_rates = 1; -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got RATES IE\n"); -#endif - break; - - case WLAN_EID_FH_PARAMS: -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got FH IE\n"); -#endif - break; - - case WLAN_EID_DS_PARAMS: -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got DS IE\n"); -#endif - break; - - case WLAN_EID_CF_PARAMS: -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got CF IE\n"); -#endif - break; - - case WLAN_EID_IBSS_PARAMS: -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got IBSS IE\n"); -#endif - break; - - case WLAN_EID_COUNTRY: - pcountryinfo = (struct ieee_ie_country_info_set *) pos; -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got COUNTRY IE\n"); -#endif - break; - - case WLAN_EID_EXT_SUPP_RATES: - /* only process extended supported rate if data rate is - * already found. Data rate IE should come before - * extended supported rate IE - */ -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got RATESEX IE\n"); -#endif - if (!got_basic_rates) { -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("... but ignoring it\n"); -#endif - break; - } - - n_ex_rates = pos[1]; - if (n_basic_rates + n_ex_rates > MAX_RATES) - n_ex_rates = MAX_RATES - n_basic_rates; - - p = bss->rates + n_basic_rates; - memcpy(p, pos + 2, n_ex_rates); - break; - - case WLAN_EID_GENERIC: - if (pos[1] >= 4 && - pos[2] == 0x00 && pos[3] == 0x50 && - pos[4] == 0xf2 && pos[5] == 0x01) { - bss->wpa_ie_len = min(pos[1] + 2, MAX_WPA_IE_LEN); - memcpy(bss->wpa_ie, pos, bss->wpa_ie_len); -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got WPA IE \n"); -#endif - } - else { -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got generic IE: %02x:%02x:%02x:%02x, len %d\n", - pos[2], pos[3], - pos[4], pos[5], - pos[1]); -#endif - } - break; - - case WLAN_EID_RSN: -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got RSN IE\n"); -#endif - bss->rsn_ie_len = min(pos[1] + 2, MAX_WPA_IE_LEN); - memcpy(bss->rsn_ie, pos, bss->rsn_ie_len); - break; - - case IWAPI: -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("got WAPI IE\n"); -#endif - bss->wapi_ie_len = min(pos[1] + 2, 100); - memcpy(bss->wapi_ie, pos, bss->wapi_ie_len); - break; - - default: - break; - } - - pos += pos[1] + 2; - } - - bss->last_scanned = jiffies; - - /* add scaned bss into list */ - if (1) { - struct bss_descriptor *found = NULL; - struct bss_descriptor *oldest = NULL; - - /* Try to find this bss in the scan table */ - list_for_each_entry (iter_bss, &priv->network_list, list) { - if (is_same_network(iter_bss, bss)) { - found = iter_bss; - break; - } - - if ((oldest == NULL) || - (iter_bss->last_scanned < oldest->last_scanned)) - oldest = iter_bss; - } - - if (found) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND SAME %s, update\n", found->ssid); - /* found, clear it */ - clear_bss_descriptor(found); - } else if (!list_empty(&priv->network_free_list)) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND NEW %s, add\n", bss->ssid); - /* Pull one from the free list */ - found = list_entry(priv->network_free_list.next, - struct bss_descriptor, list); - list_move_tail(&found->list, &priv->network_list); - } else if (oldest) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND NEW %s, no space, replace oldest %s\n", - bss->ssid, oldest->ssid); - /* If there are no more slots, expire the oldest */ - found = oldest; - clear_bss_descriptor(found); - list_move_tail(&found->list, &priv->network_list); - } else { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND NEW but no space to store\n"); - } - - /* Copy the locally created newbssentry to the scan table */ - memcpy(found, bss, offsetof(struct bss_descriptor, list)); - } - -done: -#ifdef SCAN_RESULT_DEBUG - RDA5890_DBGP("rda5890_network_information ret %d \n", ret); -#endif - return; -} - - - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_sdio_patch.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_sdio_patch.c deleted file mode 100755 index f72d44fc69c7..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_sdio_patch.c +++ /dev/null @@ -1,1406 +0,0 @@ -#include "rda5890_dev.h" -#include "rda5890_wid.h" -#include "rda5890_defs.h" - -#ifdef WIFI_TEST_MODE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif - -static u8 sdio_patch_complete = 0; -static u8 sdio_init_complete = 0; - -//#define dig_access_pmu_cancel -const u32 wifi_core_patch_data_32[][2] = -{ - {0x00108000, 0xEA03DF9C}, - {0x00108004, 0xE59F101C}, - {0x00108008, 0xE3A00040}, - {0x0010800C, 0xE5C10038}, - {0x00108010, 0xE1A0F00E}, - {0x00108014, 0xEA03DF95}, - {0x00108018, 0xE59F1008}, - {0x0010801C, 0xE3A00040}, - {0x00108020, 0xE5C10038}, - {0x00108024, 0xE1A0F00E}, - {0x00108028, 0x50300000}, - {0x0010802C, 0xEB03D6F2}, - {0x00108030, 0xE1A00B84}, - {0x00108034, 0xE1B00BA0}, - {0x00108038, 0x11A00B84}, - {0x0010803C, 0x11A00BA0}, - {0x00108040, 0x12600F80}, - {0x00108044, 0x10804004}, - {0x00108048, 0xE1A00124}, - {0x0010804C, 0xE92D0011}, - {0x00108050, 0xE51F4030}, - {0x00108054, 0xE3A00020}, - {0x00108058, 0xE5C40038}, - {0x0010805C, 0xE8BD0011}, - {0x00108060, 0xE1A0F00E}, - {0x00108064, 0xEA03D3D2}, - {0x00108068, 0xE3A00001}, - {0x0010806C, 0xE1A0F00E}, - {0x00108070, 0xEA03D6CD}, - {0x00108074, 0xE3A00001}, - {0x00108078, 0xE1A0F00E}, - {0x0010807C, 0xEB03C786}, - {0x00108080, 0xE51F0060}, - {0x00108084, 0xE5D00038}, - {0x00108088, 0xE3100080}, - {0x0010808C, 0x1A000001}, - {0x00108090, 0xE3A00001}, - {0x00108094, 0xE1A0F00E}, - {0x00108098, 0xE3A00000}, - {0x0010809C, 0xE1A0F00E}, - {0x001080A0, 0xEB03EADE}, - {0x001080A4, 0xE51F0084}, - {0x001080A8, 0xE5D00038}, - {0x001080AC, 0xE3100080}, - {0x001080B0, 0x1A000001}, - {0x001080B4, 0xE3A00001}, - {0x001080B8, 0xE1A0F00E}, - {0x001080BC, 0xE3A00000}, - {0x001080C0, 0xE1A0F00E}, - {0x001080C4, 0xEB03D89D}, - {0x001080C8, 0xE51F00A8}, - {0x001080CC, 0xE3A01080}, - {0x001080D0, 0xE5C01038}, - {0x001080D4, 0xE1A0F00E}, - {0x001080D8, 0xEB03D714}, - {0x001080DC, 0xE51F10BC}, - {0x001080E0, 0xE5D10038}, - {0x001080E4, 0xE3100080}, - {0x001080E8, 0x159F001C}, - {0x001080EC, 0x059F0014}, - {0x001080F0, 0xE59F100C}, - {0x001080F4, 0xE581003C}, - {0x001080F8, 0xE51F10D8}, - {0x001080FC, 0xE1D101B4}, - {0x00108100, 0xE1A0F00E}, - {0x00108104, 0x30010000}, - {0x00108108, 0x2E00A100}, - {0x0010810C, 0x2E00A000}, - {0x00108110, 0xEB03B485}, - {0x00108114, 0x13100010}, - {0x00108118, 0x13A00002}, - {0x0010811C, 0x15C50067}, - {0x00108120, 0xE1A0F00E}, - {0x00108124, 0xEA03D804}, - {0x00108128, 0xE51F1108}, - {0x0010812C, 0xE5D10038}, - {0x00108130, 0xE2000020}, - {0x00108134, 0xE3500000}, - {0x00108138, 0x1AFFFFFB}, - {0x0010813C, 0xE3A01004}, - {0x00108140, 0xE3A00B48}, - {0x00108144, 0xE280FF45}, - {0x00108148, 0xEA0402C5}, - {0x0010814C, 0xE59F600C}, - {0x00108150, 0xE3A04000}, - {0x00108154, 0xE5C64000}, - {0x00108158, 0xE59F6004}, - {0x0010815C, 0xE59FF004}, - {0x00108160, 0x0010200B}, - {0x00108164, 0x0010121D}, - {0x00108168, 0x00007634}, - {0x0010816C, 0xEAFFFFEC}, - {0x00108170, 0xEA03E0FF}, - {0x00108174, 0x13A00000}, - {0x00108178, 0x1B000001}, - {0x0010817C, 0x15C57005}, - {0x00108180, 0xE59FF004}, - {0x00108184, 0xE51FF004}, - {0x00108188, 0x000024DC}, - {0x0010818C, 0x0000FD74}, - {0x001087B0, 0xEA0403A4}, - {0x001087B4, 0x08BD4010}, - {0x001087B8, 0x0A000002}, - {0x001087BC, 0x13A00001}, - {0x001087C0, 0x18BD4010}, - {0x001087C4, 0x1A000001}, - {0x001087C8, 0xE51FF004}, - {0x001087CC, 0x0000D470}, - {0x001087D0, 0xE51FF004}, - {0x001087D4, 0x0000D2C0}, - {0x20040004, 0x0001018C}, - {0x20040024, 0x00108000}, - {0x20040008, 0x000101BC}, - {0x20040028, 0x00108014}, - {0x2004000C, 0x00012460}, - {0x2004002C, 0x0010802C}, - {0x20040010, 0x00013118}, - {0x20040030, 0x00108064}, - {0x20040014, 0x00012538}, - {0x20040034, 0x00108070}, - {0x20040018, 0x00016260}, - {0x20040038, 0x0010807C}, - {0x2004001C, 0x0000D524}, - {0x2004003C, 0x001080A0}, - {0x20040020, 0x00011E4C}, - {0x20040040, 0x001080C4}, - {0x20040100, 0x00012484}, - {0x20040120, 0x001080D8}, - {0x20040104, 0x0001AEF8}, - {0x20040124, 0x00108110}, - {0x20040108, 0x00012110}, - {0x20040128, 0x00108124}, - {0x2004010C, 0x00007630}, - {0x2004012C, 0x00108148}, - {0x20040110, 0x00017158}, - {0x20040130, 0x0010816C}, - {0x20040114, 0x0000FD70}, - {0x20040134, 0x00108170}, - {0x20040118, 0x0000791C}, - {0x20040138, 0x001087B0}, - {0x20040000, 0x00007FFF}, - -}; - -const u32 wifi_core_patch_data_32_E[][2] = -{ - {0x00108000, 0xEA04012F}, - {0x00108004, 0x1A000001}, - {0x00108008, 0xE8BD4010}, - {0x0010800C, 0xEA000001}, - {0x00108010, 0xE51FF004}, - {0x00108014, 0x0000D4AC}, - {0x00108018, 0xE51FF004}, - {0x0010801C, 0x0000D654}, - {0x00108020, 0xEA0401F4}, - {0x00108024, 0xE59F600C}, - {0x00108028, 0xE3A04000}, - {0x0010802C, 0xE5C64000}, - {0x00108030, 0xE59F6004}, - {0x00108034, 0xE59FF004}, - {0x00108038, 0x00101CE7}, - {0x0010803C, 0x00101039}, - {0x00108040, 0x00007850}, - {0x00108044, 0xEAFFFFEC}, - {0x00108048, 0xEA03E034}, - {0x0010804C, 0x13A00000}, - {0x00108050, 0x1B000001}, - {0x00108054, 0x15C57005}, - {0x00108058, 0xE59FF004}, - {0x0010805C, 0xE51FF004}, - {0x00108060, 0x000024E0}, - {0x00108064, 0x0000FF78}, - {0x20040004, 0x00007B40}, - {0x20040024, 0x00108000}, - {0x20040008, 0x0000784C}, - {0x20040028, 0x00108020}, - {0x2004000C, 0x00017518}, - {0x2004002C, 0x00108044}, - {0x20040010, 0x0000FF74}, - {0x20040030, 0x00108048}, - {0x20040000, 0x0000000D}, - -}; - -const u8 wifi_core_patch_data_8[][2] = -{ - { 0x28, 0x1a} , - { 0x29, 0x0d}, - { 0x35, 0x1e}, - { 0x4c, 0x90}, - { 0x4d, 0x38}, - { 0x39, 0x07}, - { 0xe4, 0xf5}, - { 0x21, 0x00}, //default 0 - { 0x23, 0x10}, - { 0x48, 0x0e}, - { 0x25, 0x00}, - { 0x20, 0xa8}, - { 0x3f, 0x05}, - { 0x41, 0x37}, - { 0x42, 0x40}, - { 0x5b, 0xa9}, -}; - -//#define WF_PAT_CFG_2012_04_15 - - -/*if define FORCE_WF, wf is not allow of any activity, antenna switch is also forced to bt*/ -//#define FORCE_WF - -/*if define FORCE_WF_TX ,wf is not allow to do tx and pa is also disabled, but antenna is not forced*/ -//#define FORCE_WF_TX - -/*if define FORCE_WF_RX ,wf is not allow to do rx but antenna is not forced*/ -//#define FORCE_WF_RX - - -/*if define FORCE_WF_RX_TX wf is not allow to do any tx and rx , pa disabled , but antenna is not forced*/ -//#define FORCE_WF_RX_TX - -#define WF_PAT_CFG_2012_05_19 - -const u32 wifi_core_init_data_32[][2] = -{ -#ifdef FORCE_WF_RX_TX - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0x00000000}, // not grant to rx and tx - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0x00000000}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - - - -#ifdef FORCE_WF_RX - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0xFF000F00}, //wf not grant to rx - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0xFF000F00}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - - -#ifdef FORCE_WF_TX - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0x00FF0033}, //wf not grant to tx - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0x00000000}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - - -#ifdef WF_PAT_CFG_2012_05_19 - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0xFFFF0F03}, //0xFFFF0F33 - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0xFF000F00}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - - -#ifdef FORCE_WF - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000838,0xF8003f2A}, - {0x5000083c,0x00000003}, - {0x50000808,0xfe00001b}, - {0x50000810,0x00000000}, - {0x50000814,0x00000000}, - {0x50000818,0x00000000}, - {0x5000081C,0x00000000}, - {0x50000820,0x00000000}, - {0x50000824,0xffffffff}, - {0x50000828,0x00100F10}, -#endif - -#ifdef WF_PAT_CFG_2012_04_15 /*pta config*/ - {0x50000800,0xFC003E05}, //tx_pri hi bits ctrl&mgmt package - {0x50000804,0x00000000}, //tx_pri hi bits as hi pri - {0x50000808,0xA500001B}, //sig_mode and protect time - {0x5000080c,0x000001C0}, //sigWire mode - {0x50000810,0xFFCC0F01}, //Lut bt - {0x50000814,0xFFFF0F33}, //Lut wf - {0x50000818,0x00FF0001}, //antSel0 for wl_rx - {0x5000081C,0xFF000F00}, //antSel1 for wl_tx - {0x50000820,0xFF000F00}, //antSel2 for wl_pa - //{0x50000838,0xFFFFFFFF}, //rx_pri low bits as high pri - //{0x5000083C,0xFFFFFFFF}, //rx_pri high bits as high pri -#endif - -/*end pta config*/ - { 0x00106b6c, 0x00000002 }, // scan channel 13 - { 0x30010004, 0x0000f77c }, //intn config - { 0x30010010, 0x00007dff }, //intn config - //item111:ver_b_wf_dig_2011_10_09 - { 0x30010000, 0x780369AF }, //disable tports wait 100ms; - { 0x30000010, 0x7000FFFF },//wait 500ms; - { 0x50090054, 0x00000001 },//enable update - { 0x50090200, 0x00000000 }, - { 0x50090204, 0x00000000 }, - { 0x50090208, 0x00000002 }, - { 0x5009020c, 0x00000004 }, - { 0x50090210, 0x00000006 }, - { 0x50090214, 0x00000008 }, - { 0x50090218, 0x0000000a }, - { 0x5009021c, 0x00000040 }, - { 0x50090220, 0x00000042 }, - { 0x50090224, 0x00000044 }, - { 0x50090228, 0x00000046 }, - { 0x5009022c, 0x00000048 }, - { 0x50090230, 0x0000004a }, - { 0x50090234, 0x00000080 }, - { 0x50090238, 0x00000082 }, - { 0x5009023c, 0x00000084 }, - { 0x50090240, 0x00000086 }, - { 0x50090244, 0x00000088 }, - { 0x50090248, 0x0000008a }, - { 0x5009024c, 0x000000c0 }, - { 0x50090250, 0x000000c2 }, - { 0x50090254, 0x000000c4 }, - { 0x50090258, 0x000000c6 }, - { 0x5009025c, 0x000000c8 }, - { 0x5009025c, 0x000000c8 }, - { 0x50090260, 0x000000ca }, - { 0x50090264, 0x00000100 }, - { 0x50090268, 0x00000102 }, - { 0x5009026c, 0x00000104 }, - { 0x50090270, 0x00000106 }, - { 0x50090274, 0x00000108 }, - { 0x50090278, 0x00000140 }, - { 0x5009027c, 0x00000142 },//lna =0 end - { 0x50090280, 0x00000080 }, - { 0x50090284, 0x00000082 }, - { 0x50090288, 0x00000084 }, - { 0x5009028c, 0x00000086 }, - { 0x50090290, 0x00000088 }, - { 0x50090294, 0x0000008a }, - { 0x50090298, 0x000000c0 }, - { 0x5009029c, 0x000000c2 }, - { 0x500902a0, 0x000000c4 }, - { 0x500902a4, 0x000000c6 }, - { 0x500902a8, 0x000000c8 }, - { 0x500902ac, 0x000000ca }, - { 0x500902b0, 0x00000100 }, - { 0x500902b4, 0x00000102 }, - { 0x500902b8, 0x00000104 }, - { 0x500902bc, 0x00000106 }, - { 0x500902c0, 0x00000108 }, - { 0x500902c4, 0x00000140 }, - { 0x500902c8, 0x00000142 }, - { 0x500902cc, 0x00000144 }, - { 0x500902d0, 0x00000146 }, - { 0x500902d4, 0x00000148 }, - { 0x500902d8, 0x00000180 }, - { 0x500902dc, 0x00000182 }, - { 0x500902e0, 0x00000184 }, - { 0x500902e4, 0x000001c0 }, - { 0x500902e8, 0x000001c2 }, - { 0x500902ec, 0x000001c4 }, - { 0x500902f0, 0x000001c6 }, - { 0x500902f4, 0x000001c8 }, - { 0x500902f8, 0x000001ca }, - { 0x500902fc, 0x000001cc },// lna = 01 end - { 0x50090300, 0x00000102 }, - { 0x50090304, 0x00000104 }, - { 0x50090308, 0x00000106 }, - { 0x5009030c, 0x00000108 }, - { 0x50090310, 0x00000140 }, - { 0x50090314, 0x00000142 }, - { 0x50090318, 0x00000144 }, - { 0x5009031c, 0x00000146 }, - { 0x50090320, 0x00000148 }, - { 0x50090324, 0x00000180 }, - { 0x50090328, 0x00000182 }, - { 0x5009032c, 0x00000184 }, - { 0x50090330, 0x000001c0 }, - { 0x50090334, 0x000001c2 }, - { 0x50090338, 0x000001c4 }, - { 0x5009033c, 0x000001c6 }, - { 0x50090340, 0x000001c8 }, - { 0x50090344, 0x000001c9 }, - { 0x50090348, 0x000001c9 }, - { 0x5009034c, 0x000001c9 }, - { 0x50090350, 0x000001c9 }, - { 0x50090354, 0x000001c9 }, - { 0x50090358, 0x000001c9 }, - { 0x5009035c, 0x000001c9 }, - { 0x50090360, 0x000001c9 }, - { 0x50090364, 0x000001c9 }, - { 0x50090368, 0x000001c9 }, - { 0x5009036c, 0x000001c9 }, - { 0x50090370, 0x000001c9 }, - { 0x50090374, 0x000001c9 }, - { 0x50090378, 0x000001c9 }, - { 0x5009037c, 0x000001c9 }, - { 0x50090054, 0x00000000 },//disable update - - { 0x5000050c, 0x00008000 },// for association power save - - //{ 0x50000808, 0x65000013 }, // disable prerx_priority;pta config - //{ 0x50000810, 0xFFCD0F01 }, //rx beacon priority - -}; - -const u32 wifi_core_init_data_32_E[][2] = -{ -#ifdef FORCE_WF_RX_TX - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0x00000000}, // not grant to rx and tx - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0x00000000}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - -#ifdef FORCE_WF_RX - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0xFF000F00}, //wf not grant to rx - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0xFF000F00}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - -#ifdef FORCE_WF_TX - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0x00FF0033}, //wf not grant to tx - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0x00000000}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - -#ifdef WF_PAT_CFG_2012_05_19 - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000808,0xA5000013}, //no pre_active protect - {0x5000080c,0x000001C0}, - {0x50000810,0xFFCC0F01}, - {0x50000814,0xFFFF0F03}, //0xFFFF0F33 - {0x50000818,0x00FF0001}, - {0x5000081C,0xFF000F00}, - {0x50000820,0xFF000F00}, - {0x50000824,0x0000F0FE}, - {0x50000828,0x00100F10}, - {0x50000838,0xFFFFFFFF}, - {0x5000083C,0xFFFFFFFF}, -#endif - -#ifdef FORCE_WF - {0x50000800,0xFC003E05}, - {0x50000804,0x00000000}, - {0x50000838,0xF8003f2A}, - {0x5000083c,0x00000003}, - {0x50000808,0xfe00001b}, - {0x50000810,0x00000000}, - {0x50000814,0x00000000}, - {0x50000818,0x00000000}, - {0x5000081C,0x00000000}, - {0x50000820,0x00000000}, - {0x50000824,0xffffffff}, - {0x50000828,0x00100F10}, -#endif - -#ifdef WF_PAT_CFG_2012_04_15 /*pta config*/ - {0x50000800,0xFC003E05}, //tx_pri hi bits ctrl&mgmt package - {0x50000804,0x00000000}, //tx_pri hi bits as hi pri - {0x50000808,0xA500001B}, //sig_mode and protect time - {0x5000080c,0x000001C0}, //sigWire mode - {0x50000810,0xFFCC0F01}, //Lut bt - {0x50000814,0xFFFF0F33}, //Lut wf - {0x50000818,0x00FF0001}, //antSel0 for wl_rx - {0x5000081C,0xFF000F00}, //antSel1 for wl_tx - {0x50000820,0xFF000F00}, //antSel2 for wl_pa - //{0x50000838,0xFFFFFFFF}, //rx_pri low bits as high pri - //{0x5000083C,0xFFFFFFFF}, //rx_pri high bits as high pri -#endif - - { 0x30010004, 0x0000f77c }, //intn config - { 0x30010010, 0x00007dff }, //intn config - //item111:ver_b_wf_dig_2011_10_09 - { 0x30010000, 0x780369AF }, //disable tports wait 100ms; - { 0x30000010, 0x7000FFFF },//wait 500ms; - { 0x5000050c, 0x00008000 },// for association power save -}; - -u32 wifi_notch_data[][2] = -{ - //ch 1 - {0x001008d0, 0x50090040}, - {0x001008d4, 0x057213a2}, - {0x001008d8, 0x50090044}, - {0x001008dc, 0x10000000}, - //ch 2 - {0x00100910, 0x50090040}, - {0x00100914, 0x10000000}, - {0x00100918, 0x50090044}, - {0x0010091c, 0x10000000}, - //ch 3 - {0x00100950, 0x50090040}, - {0x00100954, 0x10000000}, - {0x00100958, 0x50090044}, - {0x0010095c, 0x10000000}, - //ch 4 - {0x00100990, 0x50090040}, - {0x00100994, 0x10000000}, - {0x00100998, 0x50090044}, - {0x0010099c, 0x10000000}, - //ch 5 - {0x001009d0, 0x50090040}, - {0x001009d4, 0x076794b4}, - {0x001009d8, 0x50090044}, - {0x001009dc, 0x10000000}, - //ch 6 - {0x00100a10, 0x50090040}, - {0x00100a14, 0x077c71de}, - {0x00100a18, 0x50090044}, - {0x00100a1c, 0x046d242e}, - //ch 7 - {0x00100a50, 0x50090040}, - {0x00100a54, 0x10000000}, - {0x00100a58, 0x50090044}, - {0x00100a5c, 0x057e7ec0}, - //ch 8 - {0x00100a90, 0x50090040}, - {0x00100a94, 0x077c7e22}, - {0x00100a98, 0x50090044}, - {0x00100a9c, 0x046d2bd2}, - //ch 9 - {0x00100ad0, 0x50090040}, - {0x00100ad4, 0x10000000}, - {0x00100ad8, 0x50090044}, - {0x00100adc, 0x10000000}, - //ch 10 - {0x00100b10, 0x50090040}, - {0x00100b14, 0x10000000}, - {0x00100b18, 0x50090044}, - {0x00100b1c, 0x10000000}, - //ch 11 - {0x00100b50, 0x50090040}, - {0x00100b54, 0x10000000}, - {0x00100b58, 0x50090044}, - {0x00100b5c, 0x10000000}, - //ch 12 - {0x00100b90, 0x50090040}, - {0x00100b94, 0x07764310}, - {0x00100b98, 0x50090044}, - {0x00100b9c, 0x10000000}, - //ch 13 - {0x00100bd0, 0x50090040}, - {0x00100bd4, 0x056794b4}, - {0x00100bd8, 0x50090044}, - {0x00100bdc, 0x10000000}, - //ch 14 - {0x00100c10, 0x50090040}, - {0x00100c14, 0x0779c279}, - {0x00100c18, 0x50090044}, - {0x00100c1c, 0x0779cd87}, -}; - -u32 wifi_notch_data_E[][2] = -{ - // For Verion E - //ch 1 - {0x001007CC, 0x50090040}, - {0x001007D0, 0x057213a2}, - {0x001007D4, 0x50090044}, - {0x001007D8, 0x10000000}, - //ch 2 - {0x001007FC, 0x50090040}, - {0x00100800, 0x10000000}, - {0x00100804, 0x50090044}, - {0x00100808, 0x10000000}, - //ch 3 - {0x0010082C, 0x50090040}, - {0x00100830, 0x10000000}, - {0x00100834, 0x50090044}, - {0x00100838, 0x10000000}, - //ch 4 - {0x0010085C, 0x50090040}, - {0x00100860, 0x10000000}, - {0x00100864, 0x50090044}, - {0x00100868, 0x10000000}, - //ch 5 - {0x0010088C, 0x50090040}, - {0x00100890, 0x076794b4}, - {0x00100894, 0x50090044}, - {0x00100898, 0x10000000}, - //ch 6 - {0x001008BC, 0x50090040}, - {0x001008C0, 0x077c71de}, - {0x001008C4, 0x50090044}, - {0x001008C8, 0x046d242e}, - //ch 7 - {0x001008EC, 0x50090040}, - {0x001008F0, 0x10000000}, - {0x001008F4, 0x50090044}, - {0x001008F8, 0x057e7140}, - //ch 8 - {0x0010091C, 0x50090040}, - {0x00100920, 0x077c7e22}, - {0x00100924, 0x50090044}, - {0x00100928, 0x046d2bd2}, - //ch 9 - {0x0010094C, 0x50090040}, - {0x00100950, 0x10000000}, - {0x00100954, 0x50090044}, - {0x00100958, 0x10000000}, - //ch 10 - {0x0010097C, 0x50090040}, - {0x00100980, 0x10000000}, - {0x00100984, 0x50090044}, - {0x00100988, 0x10000000}, - //ch 11 - {0x001009AC, 0x50090040}, - {0x001009B0, 0x10000000}, - {0x001009B4, 0x50090044}, - {0x001009B8, 0x10000000}, - //ch 12 - {0x001009DC, 0x50090040}, - {0x001009E0, 0x07764310}, - {0x001009E4, 0x50090044}, - {0x001009E8, 0x10000000}, - //ch 13 - {0x00100A0C, 0x50090040}, - {0x00100A10, 0x056794b4}, - {0x00100A14, 0x50090044}, - {0x00100A18, 0x10000000}, - //ch 14 - {0x00100A3C, 0x50090040}, - {0x00100A40, 0x0779c279}, - {0x00100A44, 0x50090044}, - {0x00100A4c, 0x0779cd87}, -}; - -//common sdio clock open -const u32 wifi_core_data_wake[][2] = -{ - {0x3001003c, 0x2e00a000}, -}; -//sleep sdio switch -const u32 wifi_core_data_sleep[][2] = -{ - {0x3001003c, 0x2e00a100}, -}; - -int rda5890_get_fw_version_polling(struct rda5890_private *priv, unsigned int* version) -{ - int ret = -1; - char wid_req[255]; - unsigned short wid_req_len = 6; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = priv->wid_msg_id++; - unsigned char *ptr_payload; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - wid_req[0] = 'Q'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid = WID_SYS_FW_VER; - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "__func__ <<<\n" ); - - ret = rda5890_wid_request_polling(priv, wid_req, wid_req_len, - wid_rsp, &wid_rsp_len); - if (ret) { - goto out; - } - - ret = rda5890_check_wid_response(priv->wid_rsp, priv->wid_rsp_len, wid, wid_msg_id, - 4, &ptr_payload); - - if(!ret) - { - memcpy((unsigned char *)version, ptr_payload, 4); - } - else - *version = 0; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "__func__ version: %x >>> \n" , *version); - -out: - return ret; -} - - -int rda5890_write_sdio32_polling(struct rda5890_private *priv,const unsigned int (*data)[2], unsigned int size) -{ - int count = size, index = 0; - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - for(index = 0; index < count/8; index ++) //each time write five init data - { - ret = rda5890_set_core_init_polling(priv, data[8*index], 8); - if(ret < 0) - goto err; - } - - if(count%8 > 0) - { - ret = rda5890_set_core_init_polling(priv, data[8*index], count%8); - if(ret < 0) - goto err; - } -err: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s :ret=%d <<< \n", __func__, ret); - return ret; -} - -int rda5890_write_sdio32(struct rda5890_private *priv, const unsigned int (*data)[2], unsigned int size) -{ - int count = size, index = 0; - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - for(index = 0; index < count/8; index ++) //each time write five init data - { - ret = rda5890_set_core_init(priv, data[8*index], 8); - if(ret < 0) - goto err; - } - - if(count%8 > 0) - { - ret = rda5890_set_core_init(priv, data[8*index], count%8); - if(ret < 0) - goto err; - } -err: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s :ret=%d <<< \n", __func__, ret); - return ret; -} - -int rda5890_write_sdio8_polling(struct rda5890_private *priv, const unsigned char (*data)[2], unsigned int size) -{ - int count = size, index = 0; - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - for(index = 0; index < count/8; index ++) //each time write five init data - { - ret = rda5890_set_core_patch_polling(priv, data[8*index], 8); - if(ret < 0) - goto err; - } - - if(count%8 > 0) - { - ret = rda5890_set_core_patch_polling(priv, data[8*index], count%8); - if(ret < 0) - goto err; - } -err: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s :ret=%d <<< \n", __func__, ret); - return ret; -} - - -int rda5890_write_sdio8(struct rda5890_private *priv ,const unsigned char (*data)[2], unsigned int size) -{ - int count = size, index = 0; - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - for(index = 0; index < count/8; index ++) //each time write five init data - { - ret = rda5890_set_core_patch(priv, data[8*index], 8); - if(ret < 0) - goto err; - } - - if(count%8 > 0) - { - ret = rda5890_set_core_patch(priv, data[8*index], count%8); - if(ret < 0) - goto err; - } -err: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s :ret=%d <<< \n", __func__, ret); - return ret; -} - -int rda5890_sdio_patch_core_32(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - if(priv->version == 7) - ret = rda5890_write_sdio32_polling(priv,wifi_core_patch_data_32, - sizeof(wifi_core_patch_data_32)/sizeof(wifi_core_patch_data_32[0])); - else if(priv->version == 4 || priv->version == 5) - ret = rda5890_write_sdio32_polling(priv,wifi_core_patch_data_32_E, - sizeof(wifi_core_patch_data_32_E)/sizeof(wifi_core_patch_data_32_E[0])); - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - return ret; -} - - -int rda5890_sdio_init_core(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - if(priv->version == 7) - ret = rda5890_write_sdio32(priv, wifi_core_init_data_32, - sizeof(wifi_core_init_data_32)/sizeof(wifi_core_init_data_32[0])); - else if(priv->version == 4 || priv->version == 5) - ret = rda5890_write_sdio32(priv, wifi_core_init_data_32_E, - sizeof(wifi_core_init_data_32_E)/sizeof(wifi_core_init_data_32_E[0])); - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - return ret; -} - -int rda5890_sdio_init_core_polling(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - if(priv->version == 7) - ret = rda5890_write_sdio32_polling(priv, wifi_core_init_data_32, - sizeof(wifi_core_init_data_32)/sizeof(wifi_core_init_data_32[0])); - else if(priv->version == 4 || priv->version == 5) - ret = rda5890_write_sdio32_polling(priv, wifi_core_init_data_32_E, - sizeof(wifi_core_init_data_32_E)/sizeof(wifi_core_init_data_32_E[0])); - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - return ret; -} - - -int rda5890_sdio_patch_core_8(struct rda5890_private *priv) -{ - int ret = 0; - //for patch in byte mode - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - ret = rda5890_write_sdio8(priv, wifi_core_patch_data_8, - sizeof(wifi_core_patch_data_8)/sizeof(wifi_core_patch_data_8[0])); - - //for patch in wake continue clock mode - ret = rda5890_sdio_core_wake_mode(priv); - if(ret < 0) - goto err; - -err: - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - return ret; -} - -int rda5890_sdio_patch_core_8_polling(struct rda5890_private *priv) -{ - int ret = 0; - //for patch in byte mode - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - ret = rda5890_write_sdio8_polling(priv, wifi_core_patch_data_8, - sizeof(wifi_core_patch_data_8)/sizeof(wifi_core_patch_data_8[0])); - if(ret < 0) - goto err; - - //for patch in wake continue clock mode - ret = rda5890_sdio_core_wake_mode_polling(priv); - if(ret < 0) - goto err; - -err: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - return ret; -} - -int rda5890_sdio_set_default_notch(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - if(priv->version == 7) - ret = rda5890_write_sdio32(priv, wifi_notch_data, - sizeof(wifi_notch_data)/sizeof(wifi_notch_data[0])); - else if(priv->version == 4 || priv->version == 5) - ret = rda5890_write_sdio32(priv, wifi_notch_data_E, - sizeof(wifi_notch_data_E)/sizeof(wifi_notch_data_E[0])); - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - return ret; -} - -int rda5890_sdio_set_default_notch_polling(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - if(priv->version == 7) - ret = rda5890_write_sdio32_polling(priv, wifi_notch_data, - sizeof(wifi_notch_data)/sizeof(wifi_notch_data[0])); - else if(priv->version == 4 || priv->version == 5) - ret = rda5890_write_sdio32_polling(priv, wifi_notch_data_E, - sizeof(wifi_notch_data_E)/sizeof(wifi_notch_data_E[0])); - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - return ret; -} - - -// -unsigned char rssi_switch_default_data_u8[][2] = -{ - {0x25, 0x00} -}; - -void rda5890_sdio_set_notch_by_channel(struct rda5890_private *priv, unsigned int channel) -{ -#if 0 - int count = 0, index = 0; - - if(priv->version == 7) - count = sizeof(wifi_notch_data)/(sizeof(wifi_notch_data[0]) * 4); - else if(priv->version == 4 || priv->version == 5) - count = sizeof(wifi_notch_data_E)/(sizeof(wifi_notch_data_E[0]) * 4); - channel = channel % count; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - if(channel > 1) - channel -= 1; - - if(priv->version == 7) - { - rda5890_set_core_init(priv, wifi_notch_data[4*channel], 4); - rda5890_set_core_patch(priv, rssi_switch_default_data_u8, 1); - } - else if(priv->version == 4 || priv->version == 5) - { - rda5890_set_core_init(priv, wifi_notch_data_E[4*channel], 4); - rda5890_set_core_patch(priv, rssi_switch_default_data_u8, 1); - } - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< ch = %d \n", __func__, channel + 1); -#endif -} - -int rda5890_sdio_core_wake_mode(struct rda5890_private *priv) -{ - int ret = 0; - - ret = rda5890_write_sdio32(priv, wifi_core_data_wake, - sizeof(wifi_core_data_wake)/sizeof(wifi_core_data_wake[0])); - - return ret; -} - -int rda5890_sdio_core_wake_mode_polling(struct rda5890_private *priv) -{ - int ret = 0; - - ret = rda5890_write_sdio32_polling(priv, wifi_core_data_wake, - sizeof(wifi_core_data_wake)/sizeof(wifi_core_data_wake[0])); - return ret; -} - -int rda5890_sdio_core_sleep_mode(struct rda5890_private *priv) -{ - int ret = 0; - - ret = rda5890_write_sdio32(priv,wifi_core_data_sleep, - sizeof(wifi_core_data_sleep)/sizeof(wifi_core_data_sleep[0])); - return ret; -} - -extern void export_wifi_eirq_enable(); -int rda5890_sdio_init(struct rda5890_private *priv) -{ - int ret = 0; - unsigned long para = 0; - - sdio_init_complete = 0; - sdio_patch_complete = 0; - - printk(KERN_INFO " rda5890_sdio_init <<< \n"); - - ret = rda5890_sdio_patch_core_32(priv); - if(ret < 0) - goto err; - - printk(KERN_INFO "sdio_patch_complete wid_msg = %d \n", priv->wid_msg_id); - rda5890_shedule_timeout(10); //10ms delay - sdio_patch_complete = 1; - -#if 0 - ret = rda5890_sdio_init_core(priv); - if(ret < 0) - goto err; - - ret = rda5890_sdio_patch_core_8(priv); - if(ret < 0) - goto err; - - ret = rda5890_sdio_set_default_notch(priv); - if(ret < 0) - goto err; -#else - - ret = rda5890_sdio_init_core_polling(priv); - if(ret < 0) - goto err; - - ret = rda5890_sdio_patch_core_8_polling(priv); - if(ret < 0) - goto err; - - ret = rda5890_sdio_set_default_notch_polling(priv); - if(ret < 0) - goto err; - -#endif - export_wifi_eirq_enable(); - -#if 0 - rda5890_generic_set_ulong(priv, WID_MEMORY_ADDRESS, 0x30010008); - rda5890_generic_get_ulong(priv, WID_MEMORY_ACCESS_32BIT, ¶); - printk(KERN_INFO "rda5890_sdio_init para = %x \n", para); - para |= 0x200; - rda5890_generic_set_ulong(priv, WID_MEMORY_ACCESS_32BIT, para); - - rda5890_generic_set_ulong(priv, WID_MEMORY_ADDRESS, 0x30010010); - rda5890_generic_get_ulong(priv, WID_MEMORY_ACCESS_32BIT, ¶); - printk(KERN_INFO "rda5890_sdio_init para1 = %x \n", para); - para &= ~0x200; - rda5890_generic_set_ulong(priv, WID_MEMORY_ACCESS_32BIT, para); -#endif - - sdio_init_complete = 1; - -err: - return ret; -} - -//rssi > 200 -u32 rssi_switch_data_u32[][2] = -{ - {0x50090040, 0x10000000}, - {0x50090044, 0x10000000}, -}; - -u8 rssi_switch_data_u8[][2] = -{ - {0x25, 0x18} -}; - -void rda5890_rssi_up_to_200(struct rda5890_private *priv) -{ -#if 0 - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - rda5890_set_core_init(priv, rssi_switch_data_u32, 2); - rda5890_set_core_patch(priv, rssi_switch_data_u8, 1); - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); -#endif -} - -u32 rda5990_assoc_power_save_data32[][2] = -{ - { 0x5000050c, 0x00008000 }// for association power save -}; - -void rda5990_assoc_power_save(struct rda5890_private *priv) -{ - rda5890_set_core_init(priv, rda5990_assoc_power_save_data32, 1); -} - -unsigned char is_sdio_init_complete(void) -{ - return sdio_init_complete; -} -unsigned char is_sdio_patch_complete(void) //after patch complete need check write flow -{ - return sdio_patch_complete; -} - -#ifdef WIFI_TEST_MODE - -static unsigned int wifi_test_mode_rx_notch_32[][2] = -{ - //item:notch_filter_5 - {0x50090040,0x076794b4},//8m - {0x50090044,0x10000000}, - //item:notch_filter_6 - {0x50090040,0x077c71de},//3m - {0x50090044,0x046d242e},//7m - //item:notch_filter_7 - {0x50090040,0x077e7ec0},//2m - {0x50090044,0x077e7140},//-2m - //item:notch_filter_8 - {0x50090040,0x077c7e22},//3m - {0x50090044,0x046d2bd2},//7m - //item:notch_filter_c - {0x50090040,0x07764310},//5m - {0x50090044,0x10000000}, - //item:notch_filter_e - {0x50090040,0x0779c279},//4m - {0x50090044,0x0779cd87},//-4m - //item:disable_notch - {0x50090040,0x10000000}, - {0x50090044,0x10000000}, -}; - -static unsigned int wifi_test_mode_agc_patch32[][2] = -{ - {0x50000600,0x0000501a},//write 1a(52) to 28h hightolow - {0x50000600,0x0000520d},//write 0d(26) to 29h hightomid - {0x50000600,0x00006a1e},//35h reg coarse2 upper window from 0d to 1a for l - //;50000600H,32'h00009890;//4ch reg unlock upper threshold from 70 to 90 - {0x50000600,0x00009a38},//4dh reg unlock lower threshold from 78 to 38 - {0x50000600,0x00007207},//39h reg change vga gain ,9 -> 7 for big signal - {0x50000600,0x0001c8f5},//e4h reg change hpf coeff to f5 - {0x50000600,0x00004200},//21h reg add fine gain 0db - {0x50000600,0x00004610},//23h reg change maxgain index as agc table - {0x50000600,0x0000900e},//48h reg unlock lower threshold change from 0a to - {0x50000600,0x00004a00},//25h reg pecket dection threshold - {0x50000600,0x000040a8},//20h reg add fine itr2 98->a8 - {0x50000600,0x00007e05},//3f reg rssi window for fine itr2 0->5 - {0x50000600,0x00008237},//41 reg fine itr1 nextstate 4->3 - {0x50000600,0x00008440},//42 reg fine itr2 nextstate 0->4 settle time 0->d - {0x50000600,0x0000b6a9},//5b reg change GreatN rssi avg count from 1 to 8 -} ; - -static unsigned int rda5990_test_mode_digital32[][2] = -{ - //item111:ver_D_wf_dig_20120208 - {0x30010000,0x780369AF}, //disable tports - //wait 100ms; - {0x30000010,0x7000FFFF}, - //item:agc_table_20110921 - {0x50090054,0x00000001},//enable update - {0x50090200,0x00000000}, - {0x50090204,0x00000000}, - {0x50090208,0x00000002}, - {0x5009020c,0x00000004}, - {0x50090210,0x00000006}, - {0x50090214,0x00000008}, - {0x50090218,0x0000000a}, - {0x5009021c,0x00000040}, - {0x50090220,0x00000042}, - {0x50090224,0x00000044}, - {0x50090228,0x00000046}, - {0x5009022c,0x00000048}, - {0x50090230,0x0000004a}, - {0x50090234,0x00000080}, - {0x50090238,0x00000082}, - {0x5009023c,0x00000084}, - {0x50090240,0x00000086}, - {0x50090244,0x00000088}, - {0x50090248,0x0000008a}, - {0x5009024c,0x000000c0}, - {0x50090250,0x000000c2}, - {0x50090254,0x000000c4}, - {0x50090258,0x000000c6}, - {0x5009025c,0x000000c8}, - {0x50090260,0x000000ca}, - {0x50090264,0x00000100}, - {0x50090268,0x00000102}, - {0x5009026c,0x00000104}, - {0x50090270,0x00000106}, - {0x50090274,0x00000108}, - {0x50090278,0x00000140}, - {0x5009027c,0x00000142},//lna =0 end - {0x50090280,0x00000080}, - {0x50090284,0x00000082}, - {0x50090288,0x00000084}, - {0x5009028c,0x00000086}, - {0x50090290,0x00000088}, - {0x50090294,0x0000008a}, - {0x50090298,0x000000c0}, - {0x5009029c,0x000000c2}, - {0x500902a0,0x000000c4}, - {0x500902a4,0x000000c6}, - {0x500902a8,0x000000c8}, - {0x500902ac,0x000000ca}, - {0x500902b0,0x00000100}, - {0x500902b4,0x00000102}, - {0x500902b8,0x00000104}, - {0x500902bc,0x00000106}, - {0x500902c0,0x00000108}, - {0x500902c4,0x00000140}, - {0x500902c8,0x00000142}, - {0x500902cc,0x00000144}, - {0x500902d0,0x00000146}, - {0x500902d4,0x00000148}, - {0x500902d8,0x00000180}, - {0x500902dc,0x00000182}, - {0x500902e0,0x00000184}, - {0x500902e4,0x000001c0}, - {0x500902e8,0x000001c2}, - {0x500902ec,0x000001c4}, - {0x500902f0,0x000001c6}, - {0x500902f4,0x000001c8}, - {0x500902f8,0x000001ca}, - {0x500902fc,0x000001cc},// lna = 01 end - {0x50090300,0x00000102}, - {0x50090304,0x00000104}, - {0x50090308,0x00000106}, - {0x5009030c,0x00000108}, - {0x50090310,0x00000140}, - {0x50090314,0x00000142}, - {0x50090318,0x00000144}, - {0x5009031c,0x00000146}, - {0x50090320,0x00000148}, - {0x50090324,0x00000180}, - {0x50090328,0x00000182}, - {0x5009032c,0x00000184}, - {0x50090330,0x000001c0}, - {0x50090334,0x000001c2}, - {0x50090338,0x000001c4}, - {0x5009033c,0x000001c6}, - {0x50090340,0x000001c8}, - {0x50090344,0x000001c9}, - {0x50090348,0x000001c9}, - {0x5009034c,0x000001c9}, - {0x50090350,0x000001c9}, - {0x50090354,0x000001c9}, - {0x50090358,0x000001c9}, - {0x5009035c,0x000001c9}, - {0x50090360,0x000001c9}, - {0x50090364,0x000001c9}, - {0x50090368,0x000001c9}, - {0x5009036c,0x000001c9}, - {0x50090370,0x000001c9}, - {0x50090374,0x000001c9}, - {0x50090378,0x000001c9}, - {0x5009037c,0x000001c9}, - {0x50090054,0x00000000},//disable update - {0x50000808,0x65000013}, // disable prerx_prio - //pta config - {0x50000810,0xFFCD0F01}, //rx beacon priority -}; - -int rda5890_set_test_mode(struct rda5890_private *priv) -{ - int ret = 0; - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_CRIT, - "%s >>> \n", __func__); - - sdio_init_complete = 0; - sdio_patch_complete = 0; - ret = rda5890_sdio_patch_core_32(priv); - if(ret < 0) - goto err; - sdio_patch_complete = 1; - - ret = rda5890_write_sdio8_polling(priv, wifi_core_patch_data_8, - sizeof(wifi_core_patch_data_8)/sizeof(wifi_core_patch_data_8[0])); - if(ret < 0) - goto err; - - ret = rda5890_write_sdio32_polling(priv, rda5990_test_mode_digital32, - sizeof(rda5990_test_mode_digital32)/sizeof(rda5990_test_mode_digital32[0])); - if(ret < 0) - goto err; - - ret = rda5890_write_sdio32_polling(priv, wifi_test_mode_agc_patch32, - sizeof(wifi_test_mode_agc_patch32)/sizeof(wifi_test_mode_agc_patch32[0])); - if(ret < 0) - goto err; - - ret = rda5890_write_sdio32_polling(priv, wifi_test_mode_rx_notch_32, - sizeof(wifi_test_mode_rx_notch_32)/sizeof(wifi_test_mode_rx_notch_32[0])); - if(ret < 0) - goto err; - - - ret = rda5890_sdio_set_default_notch_polling(priv); - if(ret < 0) - goto err; - - export_wifi_eirq_enable(); - sdio_init_complete = 1; - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_CRIT, - "%s <<< \n", __func__); - return ret; - -err: - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_CRIT, "rda5890_set_test_mode err!! \n" ); - return ret; -} -#endif - - \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_txrx.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_txrx.c deleted file mode 100755 index ad01fea20b1d..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_txrx.c +++ /dev/null @@ -1,139 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "rda5890_defs.h" -#include "rda5890_dev.h" -#include "rda5890_wid.h" -#include "rda5890_wext.h" - -void rda5890_data_rx(struct rda5890_private *priv, - char *data, unsigned short data_len) -{ - struct sk_buff *skb; - char *pkt_data; - - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - skb = dev_alloc_skb(data_len + NET_IP_ALIGN); - if (!skb) { - priv->stats.rx_dropped++; - return; - } - skb_reserve(skb, NET_IP_ALIGN); - pkt_data = skb_put(skb, data_len); - memcpy(pkt_data, data, data_len); - skb->dev = priv->dev; - skb->protocol = eth_type_trans(skb, priv->dev); - skb->ip_summed = CHECKSUM_NONE; - - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_TRACE, - "netif rx, len %d\n", skb->len); - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_TRACE, - "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - skb->data[0], skb->data[1], skb->data[2], skb->data[3], - skb->data[skb->len - 4], skb->data[skb->len - 3], - skb->data[skb->len - 2], skb->data[skb->len - 1]); - - priv->stats.rx_packets++; - priv->stats.rx_bytes += data_len; - - if (in_interrupt()) - netif_rx(skb); - else - netif_rx_ni(skb); - - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); -} - - -int rda5890_host_to_card(struct rda5890_private *priv, - char *packet, unsigned short packet_len, unsigned char packet_type) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - ret = priv->hw_host_to_card(priv, packet, packet_len, packet_type); - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - - return ret; -} - - -int rda5890_data_tx(struct rda5890_private *priv, - struct sk_buff *skb, struct net_device *dev) -{ - int ret; - char *pkt_data; - uint16_t pkt_len; - char buf[ETH_FRAME_LEN + 2]; - uint16_t data_len; - - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - ret = NETDEV_TX_OK; - - if (!skb->len || (skb->len > ETH_FRAME_LEN)) { - priv->stats.tx_dropped++; - priv->stats.tx_errors++; - goto free; - } - - pkt_data = skb->data; - pkt_len = skb->len; - - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_TRACE, - "netif tx len %d\n", pkt_len); - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_TRACE, - "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - skb->data[0], skb->data[1], skb->data[2], skb->data[3], - skb->data[skb->len - 4], skb->data[skb->len - 3], - skb->data[skb->len - 2], skb->data[skb->len - 1]); - - /* FIXME: we can save this memcpy by adding header inside the sdio driver */ - memcpy(buf + 2, pkt_data, pkt_len); - data_len = pkt_len + 2; - buf[0] = (char)(data_len&0xFF); - buf[1] = (char)((data_len>>8)&0x0F); - buf[1] |= 0x10; // for DataOut 0x1 - - //RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_NORM, - // "sdio tx len %d\n", data_len); - //RDA5890_DBGLAP(RDA5890_DA_ETHER, RDA5890_DL_NORM, - // "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - // buf[0], buf[1], buf[2], buf[3], - // buf[data_len - 4], buf[data_len - 3], - // buf[data_len - 2], buf[data_len - 1]); - - ret = rda5890_host_to_card(priv, buf, data_len, DATA_REQUEST_PACKET); - if (ret) { - RDA5890_ERRP("host_to_card send failed, ret = %d\n", ret); - goto free; - } - - priv->stats.tx_packets++; - priv->stats.tx_bytes += skb->len; - - dev->trans_start = jiffies; - - free: - /* free right away, since we do copy */ - dev_kfree_skb_any(skb); - - RDA5890_DBGLAP(RDA5890_DA_TXRX, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - return ret; -} - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_txrx.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_txrx.h deleted file mode 100755 index 6f161b90e384..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_txrx.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _RDA5890_TXRX_H_ -#define _RDA5890_TXRX_H_ - -int rda5890_host_to_card(struct rda5890_private *priv, - char *packet, unsigned short packet_len, unsigned char packet_type); - -void rda5890_data_rx(struct rda5890_private *priv, - char *data, unsigned short data_len); -int rda5890_data_tx(struct rda5890_private *priv, - struct sk_buff *skb, struct net_device *dev); - -#endif - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wext.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wext.c deleted file mode 100755 index ae06196773c3..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wext.c +++ /dev/null @@ -1,2562 +0,0 @@ -/** - * This file contains ioctl functions - */ -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "rda5890_defs.h" -#include "rda5890_dev.h" -#include "rda5890_ioctl.h" -#include "rda5890_wid.h" -#include "rda5890_wext.h" - -#define WLAN_AUTH_OPEN 0 -#define WLAN_AUTH_SHARED_KEY 1 -#define WLAN_AUTH_FT 2 -#define WLAN_AUTH_LEAP 128 - -#define WLAN_AUTH_CHALLENGE_LEN 128 - -#define WLAN_CAPABILITY_ESS (1<<0) -#define WLAN_CAPABILITY_IBSS (1<<1) -#define WLAN_CAPABILITY_CF_POLLABLE (1<<2) -#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) -#define WLAN_CAPABILITY_PRIVACY (1<<4) -#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) -#define WLAN_CAPABILITY_PBCC (1<<6) -#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) -#define IW_AUTH_ALG_WAPI 0x08 -#define IW_ENCODE_ALG_WAPI 0x80 - -static int rda5890_get_name(struct net_device *dev, struct iw_request_info *info, - char *cwrq, char *extra) -{ - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - /* We could add support for 802.11n here as needed. Jean II */ - snprintf(cwrq, IFNAMSIZ, "IEEE 802.11b/g"); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_freq(struct net_device *dev, struct iw_request_info *info, - struct iw_freq *fwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - fwrq->m = (long)2437 * 100000; - fwrq->e = 1; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_wap(struct net_device *dev, struct iw_request_info *info, - struct sockaddr *awrq, char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *) netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - if (priv->connect_status == MAC_CONNECTED) { - memcpy(awrq->sa_data, priv->curbssparams.bssid, ETH_ALEN); - } else { - memset(awrq->sa_data, 0, ETH_ALEN); - } - awrq->sa_family = ARPHRD_ETHER; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_set_nick(struct net_device *dev, struct iw_request_info *info, - struct iw_point *dwrq, char *extra) -{ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_nick(struct net_device *dev, struct iw_request_info *info, - struct iw_point *dwrq, char *extra) -{ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_set_rts(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_rts(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - int ret = 0; - u16 val = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - val = 600; - - vwrq->value = val; - vwrq->disabled = val > RDA5890_RTS_MAX_VALUE; /* min rts value is 0 */ - vwrq->fixed = 1; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -static int rda5890_set_frag(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_frag(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - int ret = 0; - u16 val = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - val = 1460; - - vwrq->value = val; - vwrq->disabled = ((val < RDA5890_FRAG_MIN_VALUE) - || (val > RDA5890_FRAG_MAX_VALUE)); - vwrq->fixed = 1; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -static int rda5890_get_mode(struct net_device *dev, - struct iw_request_info *info, u32 * uwrq, char *extra) -{ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - *uwrq = IW_MODE_INFRA; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_txpow(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - vwrq->value = 20; // in dbm - vwrq->fixed = 1; - vwrq->disabled = 0; - vwrq->flags = IW_TXPOW_DBM; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_set_retry(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_retry(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - int ret = 0; - u16 val = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - vwrq->disabled = 0; - - if (vwrq->flags & IW_RETRY_LONG) { - val = 7; - - /* Subtract 1 to convert try count to retry count */ - vwrq->value = val - 1; - vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_LONG; - } else { - val = 6; - - /* Subtract 1 to convert try count to retry count */ - vwrq->value = val - 1; - vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_SHORT; - } - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -/** - * 802.11b/g supported bitrates (in 500Kb/s units) - */ -u8 rda5890_bg_rates[MAX_RATES] = - { 0x02, 0x04, 0x0b, 0x16, 0x0c, 0x12, 0x18, - 0x24, 0x30, 0x48, 0x60, 0x6c,0x00, 0x00 }; - -u16 rda5890_nr_chan = 11; - -/** - * @brief Get Range Info - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param vwrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * @return 0 --success, otherwise fail - */ -static int rda5890_get_range(struct net_device *dev, struct iw_request_info *info, - struct iw_point *dwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - struct iw_range *range = (struct iw_range *)extra; - int i; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - dwrq->length = sizeof(struct iw_range); - memset(range, 0, sizeof(struct iw_range)); - - range->min_nwid = 0; - range->max_nwid = 0; - - range->num_bitrates = sizeof(rda5890_bg_rates); - for (i = 0; i < range->num_bitrates; i++) - range->bitrate[i] = rda5890_bg_rates[i] * 500000; - range->num_bitrates = i; - - range->num_frequency = 0; - - range->scan_capa = IW_SCAN_CAPA_ESSID; - - for (i = 0; (range->num_frequency < IW_MAX_FREQUENCIES) - && (i < rda5890_nr_chan); i++) { - range->freq[range->num_frequency].i = (long)(i + 1); - range->freq[range->num_frequency].m = - (long)((2412 + 5 * i) * 100000); - range->freq[range->num_frequency].e = 1; - range->num_frequency++; - } - - range->num_channels = range->num_frequency; - - /* - * Set an indication of the max TCP throughput in bit/s that we can - * expect using this interface - */ - range->throughput = 5000 * 1000; - - range->min_rts = RDA5890_RTS_MIN_VALUE; - range->max_rts = RDA5890_RTS_MAX_VALUE; - range->min_frag = RDA5890_FRAG_MIN_VALUE; - range->max_frag = RDA5890_FRAG_MAX_VALUE; - - range->encoding_size[0] = 5; - range->encoding_size[1] = 13; - range->num_encoding_sizes = 2; - range->max_encoding_tokens = 4; - - /* - * Right now we support only "iwconfig ethX power on|off" - */ - range->pm_capa = IW_POWER_ON; - - /* - * Minimum version we recommend - */ - range->we_version_source = 15; - - /* - * Version we are compiled with - */ - range->we_version_compiled = WIRELESS_EXT; - - range->retry_capa = IW_RETRY_LIMIT; - range->retry_flags = IW_RETRY_LIMIT | IW_RETRY_MAX; - - range->min_retry = 0; - range->max_retry = 14; - - /* - * Set the qual, level and noise range values - */ - range->max_qual.qual = 100; - range->max_qual.level = 0; - range->max_qual.noise = 0; - range->max_qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM; - - range->avg_qual.qual = 70; - /* TODO: Find real 'good' to 'bad' threshold value for RSSI */ - range->avg_qual.level = 0; - range->avg_qual.noise = 0; - range->avg_qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM; - - range->sensitivity = 0; - - /* Setup the supported power level ranges */ - memset(range->txpower, 0, sizeof(range->txpower)); - range->txpower_capa = IW_TXPOW_DBM | IW_TXPOW_RANGE; - range->txpower[0] = 0; - range->txpower[1] = 20; - range->num_txpower = 2; - - range->event_capa[0] = (IW_EVENT_CAPA_K_0 | - IW_EVENT_CAPA_MASK(SIOCGIWAP) | - IW_EVENT_CAPA_MASK(SIOCGIWSCAN)); - range->event_capa[1] = IW_EVENT_CAPA_K_1; - - range->enc_capa = IW_ENC_CAPA_WPA - | IW_ENC_CAPA_WPA2 - | IW_ENC_CAPA_CIPHER_TKIP - | IW_ENC_CAPA_CIPHER_CCMP; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_set_power(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_power(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - vwrq->value = 0; - vwrq->flags = 0; - vwrq->disabled = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_update_bss_stats(struct rda5890_private *priv) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - memcpy(priv->curbssparams.ssid, - priv->assoc_ssid, sizeof(priv->curbssparams.ssid)); - - if(priv->scan_running == 1) - return ret; - - ret = rda5890_get_bssid(priv, priv->curbssparams.bssid); - if (ret) { - RDA5890_ERRP("rda5890_get_bssid, ret = %d\n", ret); - goto out; - } - -#if 0 - ret = rda5890_get_channel(priv, &priv->curbssparams.channel); - if (ret) { - RDA5890_ERRP("rda5890_get_channel, ret = %d\n", ret); - goto out; - } -#endif - - ret = rda5890_get_rssi(priv, &priv->curbssparams.rssi); - if (ret) { - RDA5890_ERRP("rda5890_get_rssi, ret = %d\n", ret); - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<< ch = %d rssi = %d\n", __func__, priv->curbssparams.channel, priv->curbssparams.rssi); - -out: - return ret; -} - -static struct iw_statistics *rda5890_get_wireless_stats(struct net_device *dev) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int stats_valid = 0; - u8 snr; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - if (priv->connect_status != MAC_CONNECTED) - goto out; - - rda5890_update_bss_stats(priv); - - priv->wstats.miss.beacon = 0; - priv->wstats.discard.retries = 0; - priv->wstats.qual.level = priv->curbssparams.rssi > 127? priv->curbssparams.rssi - 271 - :priv->curbssparams.rssi - 15; - - snr = priv->wstats.qual.level - RDA5890_NF_DEFAULT_SCAN_VALUE; - priv->wstats.qual.qual = - (100 * RSSI_DIFF * RSSI_DIFF - (PERFECT_RSSI - snr) * - (15 * (RSSI_DIFF) + 62 * (PERFECT_RSSI - snr))) / - (RSSI_DIFF * RSSI_DIFF); - if (priv->wstats.qual.qual > 100) - priv->wstats.qual.qual = 100; - priv->wstats.qual.noise = RDA5890_NF_DEFAULT_SCAN_VALUE; - priv->wstats.qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM; - - stats_valid = 1; - -out: - if (!stats_valid) { - priv->wstats.miss.beacon = 0; - priv->wstats.discard.retries = 0; - priv->wstats.qual.qual = 0; - priv->wstats.qual.level = 0; - priv->wstats.qual.noise = 0; - priv->wstats.qual.updated = IW_QUAL_ALL_UPDATED; - priv->wstats.qual.updated |= IW_QUAL_NOISE_INVALID | - IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_INVALID; - } - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return &priv->wstats; -} - -static int rda5890_set_freq(struct net_device *dev, struct iw_request_info *info, - struct iw_freq *fwrq, char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_set_rate(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_get_rate(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - vwrq->fixed = 0; - vwrq->value = 108*500000; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_set_mode(struct net_device *dev, - struct iw_request_info *info, u32 * uwrq, char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - - -/** - * @brief Get Encryption key - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param vwrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * @return 0 --success, otherwise fail - */ -static int rda5890_get_encode(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *dwrq, u8 * extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -/** - * @brief Set Encryption key - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param vwrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * @return 0 --success, otherwise fail - */ -static int rda5890_set_encode(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *dwrq, char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -/** - * @brief Set Encryption key (internal) - * - * @param priv A pointer to private card structure - * @param key_material A pointer to key material - * @param key_length length of key material - * @param index key index to set - * @param set_tx_key Force set TX key (1 = yes, 0 = no) - * @return 0 --success, otherwise fail - */ -static int copy_wep_key(struct rda5890_private *priv, - const char *key_material, - u16 key_length, - u16 index, - int set_tx_key) -{ - int ret = 0; - struct enc_key *pkey; - - /* Paranoid validation of key index */ - if (index > 3) { - ret = -EINVAL; - goto out; - } - - /* validate max key length */ - if (key_length > KEY_LEN_WEP_104) { - ret = -EINVAL; - goto out; - } - - if (key_length == KEY_LEN_WEP_40) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WEP40 : %02x%02x%02x%02x%02x\n", - key_material[0], key_material[1], key_material[2], - key_material[3], key_material[4]); - } - else if (key_length == KEY_LEN_WEP_104) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WEP104 : %02x%02x%02x%02x%02x" - " %02x%02x%02x%02x%02x" - " %02x%02x%02x\n", - key_material[0], key_material[1], key_material[2], - key_material[3], key_material[4], key_material[5], - key_material[6], key_material[7], key_material[8], - key_material[9], key_material[10], key_material[11], - key_material[12]); - } - else { - RDA5890_ERRP("Error in WEP Key length %d\n", key_length); - } - - pkey = &priv->wep_keys[index]; - - if (key_length > 0) { - memset(pkey, 0, sizeof(struct enc_key)); - pkey->type = KEY_TYPE_ID_WEP; - - /* Standardize the key length */ - pkey->len = (key_length > KEY_LEN_WEP_40) ? - KEY_LEN_WEP_104 : KEY_LEN_WEP_40; - memcpy(pkey->key, key_material, key_length); - } - - if (set_tx_key) { - /* Ensure the chosen key is valid */ - if (!pkey->len) { - RDA5890_ERRP("key not set, so cannot enable it\n"); - ret = -EINVAL; - goto out; - } - priv->wep_tx_keyidx = index; - } - - priv->secinfo.wep_enabled = 1; - -out: - return ret; -} - -static int validate_key_index(u16 def_index, u16 raw_index, - u16 *out_index, u16 *is_default) -{ - if (!out_index || !is_default) - return -EINVAL; - - /* Verify index if present, otherwise use default TX key index */ - if (raw_index > 0) { - if (raw_index > 4) - return -EINVAL; - *out_index = raw_index - 1; - } else { - *out_index = def_index; - *is_default = 1; - } - return 0; -} - -static void disable_wep(struct rda5890_private *priv) -{ - int i; - - /* Set Open System auth mode */ - priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - - /* Clear WEP keys and mark WEP as disabled */ - priv->secinfo.wep_enabled = 0; - for (i = 0; i < 4; i++) - priv->wep_keys[i].len = 0; - - set_bit(ASSOC_FLAG_SECINFO, &priv->assoc_flags); - set_bit(ASSOC_FLAG_WEP_KEYS, &priv->assoc_flags); -} - -static void disable_wpa(struct rda5890_private *priv) -{ - memset(&priv->wpa_mcast_key, 0, sizeof (struct enc_key)); - priv->wpa_mcast_key.flags = KEY_INFO_WPA_MCAST; - set_bit(ASSOC_FLAG_WPA_MCAST_KEY, &priv->assoc_flags); - - memset(&priv->wpa_unicast_key, 0, sizeof (struct enc_key)); - priv->wpa_unicast_key.flags = KEY_INFO_WPA_UNICAST; - set_bit(ASSOC_FLAG_WPA_UCAST_KEY, &priv->assoc_flags); - - priv->secinfo.WPAenabled = 0; - priv->secinfo.WPA2enabled = 0; - priv->secinfo.cipther_type = 0; - priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - set_bit(ASSOC_FLAG_SECINFO, &priv->assoc_flags); -} - -/** - * @brief Get Extended Encryption key (WPA/802.1x and WEP) - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param vwrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * @return 0 on success, otherwise failure - */ -static int rda5890_get_encodeext(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *dwrq, - char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = -EINVAL; - struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; - int index, max_key_len; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - max_key_len = dwrq->length - sizeof(*ext); - if (max_key_len < 0) - goto out; - - index = dwrq->flags & IW_ENCODE_INDEX; - if (index) { - if (index < 1 || index > 4) - goto out; - index--; - } else { - index = priv->wep_tx_keyidx; - } - - if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) && - ext->alg != IW_ENCODE_ALG_WEP) { - if (index != 0) - goto out; - } - - dwrq->flags = index + 1; - memset(ext, 0, sizeof(*ext)); - - if ( !priv->secinfo.wep_enabled - && !priv->secinfo.WPAenabled - && !priv->secinfo.WPA2enabled) { - ext->alg = IW_ENCODE_ALG_NONE; - ext->key_len = 0; - dwrq->flags |= IW_ENCODE_DISABLED; - } else { - u8 *key = NULL; - - if ( priv->secinfo.wep_enabled - && !priv->secinfo.WPAenabled - && !priv->secinfo.WPA2enabled) { - /* WEP */ - ext->alg = IW_ENCODE_ALG_WEP; - ext->key_len = priv->wep_keys[index].len; - key = &priv->wep_keys[index].key[0]; - } else if ( !priv->secinfo.wep_enabled - && (priv->secinfo.WPAenabled || - priv->secinfo.WPA2enabled)) { - /* WPA */ - struct enc_key * pkey = NULL; - - if ( priv->wpa_mcast_key.len - && (priv->wpa_mcast_key.flags & KEY_INFO_WPA_ENABLED)) - pkey = &priv->wpa_mcast_key; - else if ( priv->wpa_unicast_key.len - && (priv->wpa_unicast_key.flags & KEY_INFO_WPA_ENABLED)) - pkey = &priv->wpa_unicast_key; - - if (pkey) { - if (pkey->type == KEY_TYPE_ID_AES) { - ext->alg = IW_ENCODE_ALG_CCMP; - } else { - ext->alg = IW_ENCODE_ALG_TKIP; - } - ext->key_len = pkey->len; - key = &pkey->key[0]; - } else { - ext->alg = IW_ENCODE_ALG_TKIP; - ext->key_len = 0; - } - } else { - goto out; - } - - if (ext->key_len > max_key_len) { - ret = -E2BIG; - goto out; - } - - if (ext->key_len) - memcpy(ext->key, key, ext->key_len); - else - dwrq->flags |= IW_ENCODE_NOKEY; - dwrq->flags |= IW_ENCODE_ENABLED; - } - ret = 0; - -out: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -/** - * @brief Set Encryption key Extended (WPA/802.1x and WEP) - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param vwrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * @return 0 --success, otherwise fail - */ -static int rda5890_set_encodeext(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *dwrq, - char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; - int alg = ext->alg; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - if ((alg == IW_ENCODE_ALG_NONE) || (dwrq->flags & IW_ENCODE_DISABLED)) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "NO SEC\n"); - if(test_bit(ASSOC_FLAG_ASSOC_START ,&priv->assoc_flags)) - { - if(priv->imode != 3 && priv->imode != 5) - disable_wep (priv); - } - disable_wpa (priv); - } else if (alg == IW_ENCODE_ALG_WEP) { - u16 is_default = 0, index, set_tx_key = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WEP, flags = 0x%04x\n", dwrq->flags); - - ret = validate_key_index(priv->wep_tx_keyidx, - (dwrq->flags & IW_ENCODE_INDEX), - &index, &is_default); - if (ret) - goto out; - - /* If WEP isn't enabled, or if there is no key data but a valid - * index, or if the set-TX-key flag was passed, set the TX key. - */ - if ( !priv->secinfo.wep_enabled - || (dwrq->length == 0 && !is_default) - || (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)) - set_tx_key = 1; - - /* Copy key to driver */ - ret = copy_wep_key(priv, ext->key, ext->key_len, index, set_tx_key); - if (ret) - goto out; - - /* Set Key to Mac */ - /* Move to assoc_helper_secinfo(), wep_key need to be set after imode */ - //ret = rda5890_set_wepkey(priv, index, ext->key, ext->key_len); - //if (ret) - // goto out; - - if (dwrq->flags & IW_ENCODE_RESTRICTED) { - priv->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY; - } else if (dwrq->flags & IW_ENCODE_OPEN) { - priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - } - - /* Mark the various WEP bits as modified */ - set_bit(ASSOC_FLAG_SECINFO, &priv->assoc_flags); - if (dwrq->length) - set_bit(ASSOC_FLAG_WEP_KEYS, &priv->assoc_flags); - if (set_tx_key) - set_bit(ASSOC_FLAG_WEP_TX_KEYIDX, &priv->assoc_flags); - } else if ((alg == IW_ENCODE_ALG_TKIP) || (alg == IW_ENCODE_ALG_CCMP)) { - struct enc_key * pkey; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "TKIP or CCMP, flags = 0x%04x, alg = %d\n", dwrq->flags, alg); - - /* validate key length */ - if (((alg == IW_ENCODE_ALG_TKIP) - && (ext->key_len != KEY_LEN_WPA_TKIP)) - || ((alg == IW_ENCODE_ALG_CCMP) - && (ext->key_len != KEY_LEN_WPA_AES))) { - RDA5890_ERRP("invalid size %d for key of alg, type %d\n", - ext->key_len, alg); - ret = -EINVAL; - goto out; - } - - /* Copy key to driver */ - if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - pkey = &priv->wpa_mcast_key; - set_bit(ASSOC_FLAG_WPA_MCAST_KEY, &priv->assoc_flags); - } else { - pkey = &priv->wpa_unicast_key; - set_bit(ASSOC_FLAG_WPA_UCAST_KEY, &priv->assoc_flags); - } - - memset(pkey, 0, sizeof (struct enc_key)); - memcpy(pkey->key, ext->key, ext->key_len); - pkey->len = ext->key_len; - if (pkey->len) - pkey->flags |= KEY_INFO_WPA_ENABLED; - - /* Do this after zeroing key structure */ - if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - pkey->flags |= KEY_INFO_WPA_MCAST; - } else { - pkey->flags |= KEY_INFO_WPA_UNICAST; - } - - if (alg == IW_ENCODE_ALG_TKIP) { - pkey->type = KEY_TYPE_ID_TKIP; - if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) - && !(priv->imode & (BIT6))) { - RDA5890_ERRP("imode [0x%x] not match with cipher alg TKIP\n", - priv->imode); - } - } else if (alg == IW_ENCODE_ALG_CCMP) { - pkey->type = KEY_TYPE_ID_AES; - if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) - && !(priv->imode & (BIT5))) { - RDA5890_ERRP("imode [0x%x] not match with cipher alg CCMP\n", - priv->imode); - } - } - - /* If WPA isn't enabled yet, do that now */ - if ( priv->secinfo.WPAenabled == 0 - && priv->secinfo.WPA2enabled == 0) { - priv->secinfo.WPAenabled = 1; - priv->secinfo.WPA2enabled = 1; - set_bit(ASSOC_FLAG_SECINFO, &priv->assoc_flags); - } - - /* Set Keys to MAC*/ - if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - /* Set GTK */ - /* - *Always use key_id = 1 for now - * need to toggle among 1, 2, 3 - */ - ret = rda5890_set_gtk(priv, 1, ext->tx_seq, IW_ENCODE_SEQ_MAX_SIZE, - pkey->key, pkey->len); - if (ret) - goto out; - } else { - pkey->flags |= KEY_INFO_WPA_UNICAST; - /* Set PTK */ - ret = rda5890_set_ptk(priv, pkey->key, pkey->len); - if (ret) - goto out; - } - - /* Only disable wep if necessary: can't waste time here. */ - disable_wep(priv); - } else if (alg == IW_ENCODE_ALG_WAPI) { //wapi - if(ext->key_len != 32) - goto out; - - priv->is_wapi = 1; - - /* Set Keys to MAC*/ - if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { - unsigned char tmp[8]; - /* Set GTK */ - /* - * Always use key_id = 1 for now - * need to toggle among 1, 2, 3 - */ - ret = rda5890_set_gtk(priv, 1, tmp, IW_ENCODE_SEQ_MAX_SIZE, - ext->key, ext->key_len); - if (ret) - goto out; - } else { - /* Set PTK */ - ret = rda5890_set_ptk(priv, ext->key, ext->key_len); - if (ret) - goto out; - } - } - -out: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -/** - * @brief PMKSA cache operation (WPA/802.1x and WEP) - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param vwrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * @return 0 on success, otherwise failure - */ -static int rda5890_set_pmksa(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *dwrq, - char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -static int rda5890_set_genie(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *dwrq, - char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - if(extra[0] == 0x44) //wapi ie - { - unsigned char ie_len = extra[1] + 2; - rda5890_generic_set_str(priv, WID_WAPI_ASSOC_IE, extra ,ie_len); - goto out; - } - - if (dwrq->length > MAX_WPA_IE_LEN || - (dwrq->length && extra == NULL)) { - ret = -EINVAL; - goto out; - } - - if (dwrq->length) { - memcpy(&priv->wpa_ie[0], extra, dwrq->length); - priv->wpa_ie_len = dwrq->length; - } else { - memset(&priv->wpa_ie[0], 0, sizeof(priv->wpa_ie)); - priv->wpa_ie_len = 0; - } - -out: - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -static int rda5890_get_genie(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *dwrq, - char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - if (priv->wpa_ie_len == 0) { - dwrq->length = 0; - goto out; - } - - if (dwrq->length < priv->wpa_ie_len) { - ret = -E2BIG; - goto out; - } - - dwrq->length = priv->wpa_ie_len; - memcpy(extra, &priv->wpa_ie[0], priv->wpa_ie_len); - -out: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -static int rda5890_set_auth(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *dwrq, - char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - int updated = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "flags = 0x%04x, value = 0x%x\n", dwrq->flags, dwrq->value); - - switch (dwrq->flags & IW_AUTH_INDEX) { - case IW_AUTH_CIPHER_PAIRWISE: -#ifdef GET_SCAN_FROM_NETWORK_INFO - if (dwrq->value & (IW_AUTH_CIPHER_WEP104 | IW_AUTH_CIPHER_WEP40)) - { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WEP Selected \n"); - priv->secinfo.wep_enabled = 1; - if(dwrq->value & IW_AUTH_CIPHER_WEP104) - priv->secinfo.cipther_type |= IW_AUTH_CIPHER_WEP104; - else if(dwrq->value & IW_AUTH_CIPHER_WEP40) - priv->secinfo.cipther_type |= IW_AUTH_CIPHER_WEP40; - } - if (dwrq->value & IW_AUTH_CIPHER_TKIP) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "IW_AUTH_CIPHER_TKIP \n"); - priv->secinfo.cipther_type |= IW_AUTH_CIPHER_TKIP; - } - if (dwrq->value & IW_AUTH_CIPHER_CCMP) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "IW_AUTH_CIPHER_CCMP \n"); - priv->secinfo.cipther_type |= IW_AUTH_CIPHER_CCMP; - } - if (dwrq->value & IW_AUTH_CIPHER_NONE) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "OPEN System \n"); - priv->secinfo.cipther_type = IW_AUTH_CIPHER_NONE; - } - break; -#endif - case IW_AUTH_TKIP_COUNTERMEASURES: - case IW_AUTH_CIPHER_GROUP: - case IW_AUTH_DROP_UNENCRYPTED: - /* - * rda5890 does not use these parameters - */ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "DO NOT USE\n"); - break; - - case IW_AUTH_KEY_MGMT: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "KEY_MGMT, val = %d\n", dwrq->value); - priv->secinfo.key_mgmt = dwrq->value; - updated = 1; - break; - - case IW_AUTH_WPA_VERSION: - if (dwrq->value & IW_AUTH_WPA_VERSION_DISABLED) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WPA_VERSION, DISABLED\n"); - priv->secinfo.WPAenabled = 0; - priv->secinfo.WPA2enabled = 0; - disable_wpa (priv); - } - if (dwrq->value & IW_AUTH_WPA_VERSION_WPA) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WPA_VERSION, WPA\n"); - priv->secinfo.WPAenabled = 1; - priv->secinfo.wep_enabled = 0; - priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - } - if (dwrq->value & IW_AUTH_WPA_VERSION_WPA2) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WPA_VERSION, WPA2\n"); - priv->secinfo.WPA2enabled = 1; - priv->secinfo.wep_enabled = 0; - priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - } - updated = 1; - break; - - case IW_AUTH_80211_AUTH_ALG: - if (dwrq->value & IW_AUTH_ALG_SHARED_KEY || - dwrq->value & IW_AUTH_ALG_OPEN_SYSTEM) - { - if(dwrq->value & IW_AUTH_ALG_SHARED_KEY ) - { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "80211_AUTH_ALG, SHARED_KEY\n"); - priv->secinfo.auth_mode |= IW_AUTH_ALG_SHARED_KEY; - } - if(dwrq->value & IW_AUTH_ALG_OPEN_SYSTEM) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "80211_AUTH_ALG, OPEN\n"); - priv->secinfo.auth_mode |= IW_AUTH_ALG_OPEN_SYSTEM; - } - } - else if(dwrq->value & IW_AUTH_ALG_LEAP) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "80211_AUTH_ALG, LEAP\n"); - priv->secinfo.auth_mode = IW_AUTH_ALG_LEAP; - } - else if(dwrq->value & IW_AUTH_ALG_WAPI) { - priv->secinfo.auth_mode = IW_AUTH_ALG_WAPI; - } - else{ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "80211_AUTH_ALG, unknown\n"); - ret = -EINVAL; - } - updated = 1; - break; - - case IW_AUTH_WPA_ENABLED: - if (dwrq->value) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WPA_ENABLED, value = 0x%x\n", dwrq->value); - if (!priv->secinfo.WPAenabled && - !priv->secinfo.WPA2enabled) { - priv->secinfo.WPAenabled = 1; - priv->secinfo.WPA2enabled = 1; - priv->secinfo.wep_enabled = 0; - priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM; - } - } else { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "WPA_ENABLED, value = ZERO\n"); - priv->secinfo.WPAenabled = 0; - priv->secinfo.WPA2enabled = 0; - disable_wpa (priv); - } - updated = 1; - break; - - default: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "NOT SUPPORT\n"); - ret = -EOPNOTSUPP; - break; - } - - if (ret == 0) { - if (updated) { - set_bit(ASSOC_FLAG_SECINFO, &priv->assoc_flags); - } - } - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -static int rda5890_get_auth(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *dwrq, - char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - - switch (dwrq->flags & IW_AUTH_INDEX) { - case IW_AUTH_KEY_MGMT: - dwrq->value = priv->secinfo.key_mgmt; - break; - - case IW_AUTH_WPA_VERSION: - dwrq->value = 0; - if (priv->secinfo.WPAenabled) - dwrq->value |= IW_AUTH_WPA_VERSION_WPA; - if (priv->secinfo.WPA2enabled) - dwrq->value |= IW_AUTH_WPA_VERSION_WPA2; - if (!dwrq->value) - dwrq->value |= IW_AUTH_WPA_VERSION_DISABLED; - break; - - case IW_AUTH_80211_AUTH_ALG: - dwrq->value = priv->secinfo.auth_mode; - break; - - case IW_AUTH_WPA_ENABLED: - if (priv->secinfo.WPAenabled && priv->secinfo.WPA2enabled) - dwrq->value = 1; - break; - - default: - ret = -EOPNOTSUPP; - } - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - return ret; -} - -static int rda5890_set_txpow(struct net_device *dev, struct iw_request_info *info, - struct iw_param *vwrq, char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - return 0; -} - -static int rda5890_get_essid(struct net_device *dev, struct iw_request_info *info, - struct iw_point *dwrq, char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - - - memcpy(extra, priv->curbssparams.ssid, - strlen(priv->curbssparams.ssid)); - dwrq->length = strlen(priv->curbssparams.ssid); - extra[dwrq->length] = '\0'; - - /* - * If none, we may want to get the one that was set - */ - - dwrq->flags = 1; /* active */ - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>> \n", __func__); - return 0; -} - -void rda5890_indicate_disconnected(struct rda5890_private *priv) -{ - union iwreq_data wrqu; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_NORM, "%s <<<\n", __func__); - - memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); - - /*report disconnect to upper layer*/ - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_NORM, "%s >>>\n", __func__); -} - -void rda5890_indicate_connected(struct rda5890_private *priv) -{ - union iwreq_data wrqu; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_NORM, "%s <<<\n", __func__); - - memcpy(wrqu.ap_addr.sa_data, priv->curbssparams.bssid, ETH_ALEN); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_NORM, "%s >>>\n", __func__); -} - -void rda5890_assoc_done_worker(struct work_struct *work) -{ - u8 bssid[6], zero_bssid[6]; - struct rda5890_private *priv = container_of(work, struct rda5890_private, - assoc_done_work.work); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<< \n", __func__); - - memset(bssid, 0, sizeof(bssid)); - memset(zero_bssid, 0, sizeof(zero_bssid)); - rda5890_get_bssid(priv, bssid); - - if(memcmp(bssid, zero_bssid, sizeof(zero_bssid))) - { - memcpy(priv->curbssparams.bssid, bssid, sizeof(bssid)); - } - - rda5890_get_rssi(priv, &priv->curbssparams.rssi); - priv->curbssparams.rssi = priv->curbssparams.rssi > 127? - priv->curbssparams.rssi - 271: priv->curbssparams.rssi - 15; - - rda5990_assoc_power_save(priv); - clear_bit(ASSOC_FLAG_ASSOC_START, &priv->assoc_flags); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); -} - -void rda5890_wlan_connect_worker(struct work_struct *work) -{ - struct rda5890_private *priv = container_of(work, struct rda5890_private, - wlan_connect_work.work); - - rda5890_set_txrate(priv, 0); - - if(priv) - clear_bit(ASSOC_FLAG_WLAN_CONNECTING ,&priv->assoc_flags); -} - -//imode -/* BIT0: 1 -> Security ON 0 -> OFF */ -/* BIT1: 1 -> WEP40 cypher supported 0 -> Not supported */ -/* BIT2: 1 -> WEP104 cypher supported 0 -> Not supported */ -/* BIT3: 1 -> WPA mode supported 0 -> Not supported */ -/* BIT4: 1 -> WPA2 (RSN) supported 0 -> Not supported */ -/* BIT5: 1 -> AES-CCMP cphr supported 0 -> Not supported */ -/* BIT6: 1 -> TKIP cypher supported 0 -> Not supported */ -/* BIT7: 1 -> TSN supported 0 -> Not supported */ - -//authtype -/* BIT0: 1 -> OPEN SYSTEM */ -/* BIT1: 1 -> SHARED KEY */ -/* BIT3: 1 -> WPA RSN 802.1x*/ -/* BIT7: 1 -> WAPI */ -static int assoc_helper_secinfo(struct rda5890_private *priv, - struct bss_descriptor *assoc_bss) -{ - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - - /* set imode and key */ - if ( !priv->secinfo.wep_enabled - && !priv->secinfo.WPAenabled - && !priv->secinfo.WPA2enabled) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, NO SEC\n", __func__); - priv->imode = 0; - } else { - u16 key_len = 0; - u16 i; - if ( priv->secinfo.wep_enabled - && !priv->secinfo.WPAenabled - && !priv->secinfo.WPA2enabled) { - /* WEP */ - key_len = priv->wep_keys[0].len; - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, WEP, len = %d\n", __func__, key_len * 8); - if (key_len == KEY_LEN_WEP_40) { - priv->imode = BIT0 | BIT1; - } - else if (key_len == KEY_LEN_WEP_104) { - priv->imode = BIT0 | BIT2; - } - else { - RDA5890_ERRP("Invalide WEP Key length %d\n", key_len); - ret = -EINVAL; - goto out; - } - } else if ( !priv->secinfo.wep_enabled - && (priv->secinfo.WPAenabled || - priv->secinfo.WPA2enabled)) { - /* WPA */ - struct enc_key * pkey = NULL; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, WPA cp:%x \n", __func__, priv->secinfo.cipther_type); - - if ( priv->wpa_mcast_key.len - && (priv->wpa_mcast_key.flags & KEY_INFO_WPA_ENABLED)) - pkey = &priv->wpa_mcast_key; - else if ( priv->wpa_unicast_key.len - && (priv->wpa_unicast_key.flags & KEY_INFO_WPA_ENABLED)) - pkey = &priv->wpa_unicast_key; - - //priv->imode = assoc_bss->data.dot11i_info; - priv->imode = 0; - /* turn on security */ - priv->imode |= (BIT0); - priv->imode &= ~(BIT3 | BIT4); - if (priv->secinfo.WPA2enabled) - priv->imode |= (BIT4); - else if (priv->secinfo.WPAenabled) - priv->imode |= (BIT3); - /* - * we don't know the cipher type by now - * use dot11i_info to decide - * and use CCMP if possible - */ - priv->imode &= ~(BIT5 | BIT6); -#ifdef GET_SCAN_FROM_NETWORK_INFO - if (priv->secinfo.cipther_type & IW_AUTH_CIPHER_CCMP) - priv->imode |= BIT5; - else if (priv->secinfo.cipther_type & IW_AUTH_CIPHER_TKIP) - priv->imode |= BIT6; -#else - if (assoc_bss->data.dot11i_info & (BIT5)) - priv->imode |= BIT5; - else if (assoc_bss->data.dot11i_info & (BIT6)) - priv->imode |= BIT6; -#endif - } else { - RDA5890_ERRP("WEP and WPA/WPA2 enabled simutanously\n"); - ret = -EINVAL; - goto out; - } - } - - /* set authtype */ - if (priv->secinfo.auth_mode & IW_AUTH_ALG_OPEN_SYSTEM - || priv->secinfo.auth_mode & IW_AUTH_ALG_SHARED_KEY) - { - - if (priv->secinfo.auth_mode & IW_AUTH_ALG_OPEN_SYSTEM) - { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, Open Auth, KEY_MGMT = %d, AUTH_ALG mode:%x\n", __func__, priv->secinfo.key_mgmt, priv->secinfo.auth_mode); - if (priv->secinfo.key_mgmt == 0x01) { - /* for 802.1x, set auth type to 0x04 */ - priv->authtype = BIT3; - } - else - { - priv->authtype = BIT0; - } - } - else if(priv->secinfo.auth_mode & IW_AUTH_ALG_SHARED_KEY) - { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, Shared-Key Auth AUTH_ALG mode:%x \n", __func__, priv->secinfo.auth_mode); - priv->authtype = BIT1; - } - } - else if (priv->secinfo.auth_mode == IW_AUTH_ALG_WAPI) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, Shared-Key Auth\n", __func__); - priv->authtype = IW_AUTH_ALG_WAPI; - } - else if (priv->secinfo.auth_mode == IW_AUTH_ALG_LEAP) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, LEAP Auth, not supported\n", __func__); - ret = -EINVAL; - goto out; - } - else { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%s, Unknown Auth\n", __func__); - ret = -EINVAL; - goto out; - } - -out: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>> \n", __func__); - return ret; -} - -static struct bss_descriptor *get_bss_desc_from_scanlist( - struct rda5890_private *priv, unsigned char *ssid) -{ - struct bss_descriptor *iter_bss; - struct bss_descriptor *ret_bss = NULL; - /* report all bss to upper layer */ - list_for_each_entry (iter_bss, &priv->network_list, list) { -#ifdef GET_SCAN_FROM_NETWORK_INFO - if (strcmp(iter_bss->ssid, ssid) == 0) { -#else - if (strcmp(iter_bss->data.ssid, ssid) == 0) { -#endif - ret_bss = iter_bss; - break; - } - } - return ret_bss; -} - -void rda5890_assoc_worker(struct work_struct *work) -{ - static char old_imode = 0xff, old_bssid[6], assoc_count = 0; - struct rda5890_private *priv = container_of(work, struct rda5890_private, - assoc_work.work); - int ret = 0; - struct bss_descriptor *assoc_bss; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - assoc_bss = get_bss_desc_from_scanlist(priv, priv->assoc_ssid); - if (assoc_bss == NULL) { - RDA5890_ERRP("****fail to find bss in the scan list\n"); - ret = -EINVAL; - goto out; - } - -#ifdef GET_SCAN_FROM_NETWORK_INFO - if(assoc_bss->rssi > 200) - { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "assoc_bss rssi =%d > 200\n", assoc_bss->rssi); - rda5890_rssi_up_to_200(priv); - } -#else - if(assoc_bss->data.rssi > 200) - { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "assoc_bss rssi =%d > 200\n", assoc_bss->data.rssi); - rda5890_rssi_up_to_200(priv); - } -#endif -#ifdef GET_SCAN_FROM_NETWORK_INFO - priv->curbssparams.channel = assoc_bss->channel; - memcpy(priv->curbssparams.bssid, assoc_bss->bssid, ETH_ALEN); - memcpy(priv->curbssparams.ssid, assoc_bss->ssid,IW_ESSID_MAX_SIZE + 1); -#else - priv->curbssparams.channel = assoc_bss->data.channel; - memcpy(priv->curbssparams.bssid, assoc_bss->data.bssid, ETH_ALEN); - memcpy(priv->curbssparams.ssid, assoc_bss->data.ssid,IW_ESSID_MAX_SIZE + 1); -#endif - ret = assoc_helper_secinfo(priv, assoc_bss); - if (ret) { - RDA5890_ERRP("assoc_helper_secinfo fail, ret = %d\n", ret); - goto out; - } - - //if the bssid is same and the association is start then break out - if((old_imode == priv->imode) && !memcmp(old_bssid, priv->assoc_bssid,6)) - { - //WEP THE Second retry should change to shared key - if((old_imode == 3 || old_imode == 5) && assoc_count%2) - { - priv->authtype = BIT1; - } - assoc_count ++; - } - else - { - //save old bssid para - old_imode = priv->imode; - memcpy(old_bssid, priv->assoc_bssid, 6); - assoc_count = 0; - } - - set_bit(ASSOC_FLAG_ASSOC_START ,&priv->assoc_flags); - set_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags); - - if((priv->imode == 3) || (priv->imode ==5)) - { - if(assoc_count > 5) - { - clear_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags); - clear_bit(ASSOC_FLAG_ASSOC_START ,&priv->assoc_flags); - old_imode = 0xff; - } - } - else - { - if(assoc_count) - { - clear_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags); - clear_bit(ASSOC_FLAG_ASSOC_START ,&priv->assoc_flags); - old_imode = 0xff; - } - } - - ret = rda5890_start_join(priv); - if (ret) { - RDA5890_ERRP("rda5890_set_ssid fail, ret = %d\n", ret); - goto out; - } - - if(test_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags)) - { - queue_delayed_work(priv->work_thread, &priv->assoc_work, 3*HZ); - } - -out: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<< \n", __func__); -} - -static int rda5890_set_essid(struct net_device *dev, struct iw_request_info *info, - struct iw_point *dwrq, char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - u8 ssid[IW_ESSID_MAX_SIZE + 1]; - u8 ssid_len = 0; - int in_ssid_len = dwrq->length; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - /* Check the size of the string */ - if (in_ssid_len > IW_ESSID_MAX_SIZE) { - ret = -E2BIG; - goto out; - } - - memset(&ssid, 0, sizeof(ssid)); - - if (!dwrq->flags || !in_ssid_len) { - /* "any" SSID requested; leave SSID blank */ - } else { - /* Specific SSID requested */ - memcpy(&ssid, extra, in_ssid_len); - ssid[in_ssid_len] = '\0'; - ssid_len = in_ssid_len; - } - - if (!ssid_len) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "requested any SSID\n"); - } else { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "requested SSID len = %d ssid:%s\n", - ssid_len, ssid); - } - - if(ssid_len) - { - memcpy(&priv->assoc_ssid[0], ssid, sizeof(ssid)); - priv->assoc_ssid_len = ssid_len; - } - - if(!test_bit(ASSOC_FLAG_SSID, &priv->assoc_flags)) - goto out; - - if(!test_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags)) - { - if(ssid_len) - { - cancel_delayed_work(&priv->assoc_work); - queue_delayed_work(priv->work_thread, &priv->assoc_work, HZ/2); - } - } - -out: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -/** - * @brief Connect to the AP or Ad-hoc Network with specific bssid - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param awrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * @return 0 --success, otherwise fail - */ -static int rda5890_set_wap(struct net_device *dev, struct iw_request_info *info, - struct sockaddr *awrq, char *extra) -{ - unsigned char * ap_addr = NULL; - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - ap_addr = awrq->sa_data; - if(!test_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags) - && !is_zero_eth_addr(ap_addr)) - { - cancel_delayed_work(&priv->assoc_work); - queue_delayed_work(priv->work_thread, &priv->assoc_work, HZ/2); - set_bit(ASSOC_FLAG_SSID, &priv->assoc_flags); - memcpy(priv->assoc_bssid, ap_addr, 6); - printk("rda5890_set_wap addr is not null \n"); - } - - if(is_zero_eth_addr(ap_addr)) - { - clear_bit(ASSOC_FLAG_SSID, &priv->assoc_flags); - disable_wep( priv); - disable_wpa(priv); - } - - - RDA5890_ERRP("%s <<< \n connect mac: %2x:%2x:%2x:%2x:%2x:%2x \n", __func__, - ap_addr[0],ap_addr[1],ap_addr[2],ap_addr[3],ap_addr[4],ap_addr[5]); - - return 0; -} - -static inline char *translate_scan(struct rda5890_private *priv, - struct iw_request_info *info, - char *start, char *stop, - struct bss_descriptor *bss_desc) -{ -#ifndef GET_SCAN_FROM_NETWORK_INFO - struct iw_event iwe; /* Temporary buffer */ - u8 snr; - struct rda5890_bss_descriptor *bss = &bss_desc->data; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "translate_scan, ssid = %s\n", bss->ssid); - - /* First entry *MUST* be the BSSID */ - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, &bss->bssid, ETH_ALEN); - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_ADDR_LEN); - - /* SSID */ - iwe.cmd = SIOCGIWESSID; - iwe.u.data.flags = 1; - iwe.u.data.length = strlen(bss->ssid); - start = iwe_stream_add_point(info, start, stop, &iwe, bss->ssid); - - /* Mode */ - iwe.cmd = SIOCGIWMODE; - //iwe.u.mode = bss->mode; - iwe.u.mode = IW_MODE_INFRA; - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_UINT_LEN); - - /* Frequency */ - iwe.cmd = SIOCGIWFREQ; - iwe.u.freq.m = (2412 + 5 * (bss->channel - 1)) * 100000; - iwe.u.freq.e = 1; - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_FREQ_LEN); - - /* Add quality statistics */ - iwe.cmd = IWEVQUAL; - iwe.u.qual.updated = IW_QUAL_ALL_UPDATED; - iwe.u.qual.level = bss->rssi > 127? bss->rssi - 271: bss->rssi - 15; - - snr = iwe.u.qual.level - RDA5890_NF_DEFAULT_SCAN_VALUE; - iwe.u.qual.qual = - (100 * RSSI_DIFF * RSSI_DIFF - (PERFECT_RSSI - snr) * - (15 * (RSSI_DIFF) + 62 * (PERFECT_RSSI - snr))) / - (RSSI_DIFF * RSSI_DIFF); - if (iwe.u.qual.qual > 100) - iwe.u.qual.qual = 100; - iwe.u.qual.noise = RDA5890_NF_DEFAULT_SCAN_VALUE; - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_QUAL_LEN); - - /* Add encryption capability */ - iwe.cmd = SIOCGIWENCODE; - if (bss->dot11i_info & BIT0) { - iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - } else { - iwe.u.data.flags = IW_ENCODE_DISABLED; - } - iwe.u.data.length = 0; - start = iwe_stream_add_point(info, start, stop, &iwe, bss->ssid); - -#if 0 - current_val = start + iwe_stream_lcp_len(info); - - iwe.cmd = SIOCGIWRATE; - iwe.u.bitrate.fixed = 0; - iwe.u.bitrate.disabled = 0; - iwe.u.bitrate.value = 0; - - for (j = 0; bss->rates[j] && (j < sizeof(bss->rates)); j++) { - /* Bit rate given in 500 kb/s units */ - iwe.u.bitrate.value = bss->rates[j] * 500000; - current_val = iwe_stream_add_value(info, start, current_val, - stop, &iwe, IW_EV_PARAM_LEN); - } - if ((bss->mode == IW_MODE_ADHOC) && priv->adhoccreate - && !lbs_ssid_cmp(priv->curbssparams.ssid, - priv->curbssparams.ssid_len, - bss->ssid, bss->ssid_len)) { - iwe.u.bitrate.value = 22 * 500000; - current_val = iwe_stream_add_value(info, start, current_val, - stop, &iwe, IW_EV_PARAM_LEN); - } - /* Check if we added any event */ - if ((current_val - start) > iwe_stream_lcp_len(info)) - start = current_val; -#endif - - memset(&iwe, 0, sizeof(iwe)); - if (bss_desc->wpa_ie_len) { - char buf[MAX_WPA_IE_LEN]; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "translate_scan, wpa_ie, len %d\n", bss_desc->wpa_ie_len); - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - bss_desc->wpa_ie[0], bss_desc->wpa_ie[1], - bss_desc->wpa_ie[2], bss_desc->wpa_ie[3], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 4], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 3], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 2], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 1]); - - memcpy(buf, bss_desc->wpa_ie, bss_desc->wpa_ie_len); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = bss_desc->wpa_ie_len; - start = iwe_stream_add_point(info, start, stop, &iwe, buf); - } - - memset(&iwe, 0, sizeof(iwe)); - if (bss_desc->rsn_ie_len) { - char buf[MAX_WPA_IE_LEN]; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "translate_scan, rsn_ie, len %d\n", bss_desc->rsn_ie_len); - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - bss_desc->rsn_ie[0], bss_desc->rsn_ie[1], - bss_desc->rsn_ie[2], bss_desc->rsn_ie[3], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 4], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 3], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 2], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 1]); - - memcpy(buf, bss_desc->rsn_ie, bss_desc->rsn_ie_len); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = bss_desc->rsn_ie_len; - start = iwe_stream_add_point(info, start, stop, &iwe, buf); - } - - return start; -#else - struct iw_event iwe; /* Temporary buffer */ - u8 snr; - struct bss_descriptor *bss = bss_desc; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "translate_scan, ssid = %s ssi=%d ssid_len=%d \n", bss->ssid, bss->rssi, bss->ssid_len); - - /* First entry *MUST* be the BSSID */ - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, bss->bssid, ETH_ALEN); - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_ADDR_LEN); - - /* SSID */ - iwe.cmd = SIOCGIWESSID; - iwe.u.data.flags = 1; - iwe.u.data.length = bss->ssid_len; - start = iwe_stream_add_point(info, start, stop, &iwe, bss->ssid); - - /* Mode */ - iwe.cmd = SIOCGIWMODE; - iwe.u.mode = bss->mode; - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_UINT_LEN); - - /* Frequency */ - iwe.cmd = SIOCGIWFREQ; - iwe.u.freq.m = (2412 + 5 * (bss->channel - 1)) * 100000; - iwe.u.freq.e = 1; - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_FREQ_LEN); - - /* Add quality statistics */ - iwe.cmd = IWEVQUAL; - iwe.u.qual.updated = IW_QUAL_ALL_UPDATED; - iwe.u.qual.level = bss->rssi > 127? bss->rssi - 271: bss->rssi - 15; - - snr = iwe.u.qual.level - RDA5890_NF_DEFAULT_SCAN_VALUE; - iwe.u.qual.qual = - (100 * RSSI_DIFF * RSSI_DIFF - (PERFECT_RSSI - snr) * - (15 * (RSSI_DIFF) + 62 * (PERFECT_RSSI - snr))) / - (RSSI_DIFF * RSSI_DIFF); - if (iwe.u.qual.qual > 100) - iwe.u.qual.qual = 100; - iwe.u.qual.noise = RDA5890_NF_DEFAULT_SCAN_VALUE; - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_QUAL_LEN); - - /* Add encryption capability */ - iwe.cmd = SIOCGIWENCODE; - if (bss->capability & WLAN_CAPABILITY_PRIVACY) { - iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - } else { - iwe.u.data.flags = IW_ENCODE_DISABLED; - } - iwe.u.data.length = 0; - start = iwe_stream_add_point(info, start, stop, &iwe, bss->ssid); - - memset(&iwe, 0, sizeof(iwe)); - if (bss_desc->wpa_ie_len && !bss_desc->wapi_ie_len) { - char buf[MAX_WPA_IE_LEN]; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "translate_scan, wpa_ie, len %d\n", bss_desc->wpa_ie_len); - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - bss_desc->wpa_ie[0], bss_desc->wpa_ie[1], - bss_desc->wpa_ie[2], bss_desc->wpa_ie[3], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 4], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 3], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 2], - bss_desc->wpa_ie[bss_desc->wpa_ie_len - 1]); - - memcpy(buf, bss->wpa_ie, bss->wpa_ie_len); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = bss_desc->wpa_ie_len; - start = iwe_stream_add_point(info, start, stop, &iwe, buf); - } - - memset(&iwe, 0, sizeof(iwe)); - if (bss_desc->rsn_ie_len && !bss_desc->wapi_ie_len) { - char buf[MAX_WPA_IE_LEN]; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "translate_scan, rsn_ie, len %d\n", bss_desc->rsn_ie_len); - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - bss_desc->rsn_ie[0], bss_desc->rsn_ie[1], - bss_desc->rsn_ie[2], bss_desc->rsn_ie[3], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 4], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 3], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 2], - bss_desc->rsn_ie[bss_desc->rsn_ie_len - 1]); - - memcpy(buf, bss->rsn_ie, bss->rsn_ie_len); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = bss_desc->rsn_ie_len; - start = iwe_stream_add_point(info, start, stop, &iwe, buf); - } - - memset(&iwe, 0, sizeof(iwe)); - if (bss_desc->wapi_ie_len) { - char buf[100]; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "translate_scan, wapi_len %d\n", bss_desc->wapi_ie_len); - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "%02x %02x %02x %02x ... ... %02x %02x %02x %02x\n", - bss_desc->wapi_ie[0], bss_desc->wapi_ie[1], - bss_desc->wapi_ie[2], bss_desc->wapi_ie[3], - bss_desc->wapi_ie[bss_desc->wapi_ie_len - 4], - bss_desc->wapi_ie[bss_desc->wapi_ie_len - 3], - bss_desc->wapi_ie[bss_desc->wapi_ie_len - 2], - bss_desc->wapi_ie[bss_desc->wapi_ie_len - 1]); - - memcpy(buf, bss->wapi_ie, bss->wapi_ie_len); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = bss_desc->wapi_ie_len; - start = iwe_stream_add_point(info, start, stop, &iwe, buf); - } - - return start; -#endif -} - -int is_same_network(struct bss_descriptor *src, - struct bss_descriptor *dst) -{ - /* A network is only a duplicate if the channel, BSSID, and ESSID - * all match. We treat all with the same BSSID and channel - * as one network */ -#ifndef GET_SCAN_FROM_NETWORK_INFO - return ((src->data.channel == dst->data.channel) && - !compare_ether_addr(src->data.bssid, dst->data.bssid) && - !memcmp(src->data.ssid, dst->data.ssid, IW_ESSID_MAX_SIZE)); -#else - return ((src->channel == dst->channel) && - !compare_ether_addr(src->bssid, dst->bssid) && - !memcmp(src->ssid, dst->ssid, IW_ESSID_MAX_SIZE)); -#endif -} - -void clear_bss_descriptor(struct bss_descriptor *bss) -{ - /* Don't blow away ->list, just BSS data */ - memset(bss, 0, offsetof(struct bss_descriptor, list)); -} - -static void dump_bss_desc(struct rda5890_bss_descriptor *bss_desc) -{ - RDA5890_DBGP("########## dump bss ##########\n"); - RDA5890_DBGP("ssid = %s\n", bss_desc->ssid); - RDA5890_DBGP("bss_type = %d\n", bss_desc->bss_type); - RDA5890_DBGP("channel = %d\n", bss_desc->channel); - RDA5890_DBGP("dot11i_info = 0x%02x\n", bss_desc->dot11i_info); - RDA5890_DBGP("bssid = %02x:%02x:%02x:%02x:%02x:%02x\n", - bss_desc->bssid[0], bss_desc->bssid[1], bss_desc->bssid[2], - bss_desc->bssid[3], bss_desc->bssid[4], bss_desc->bssid[5]); - RDA5890_DBGP("rssi = %d\n", (char)bss_desc->rssi); - RDA5890_DBGP("auth_info = 0x%02x\n", bss_desc->auth_info); - RDA5890_DBGP("rsn_cap = 0x%04x\n", - (bss_desc->rsn_cap[1] << 8) | bss_desc->rsn_cap[0]); - RDA5890_DBGP("########## dump bss ##########\n"); -} - -/* Element Ids used in Management frames in 802.11i mode */ -typedef enum{ IRSNELEMENT = 48, /* RSN Information Element */ - IWPAELEMENT = 221 /* WPA Information Element */ -}ELEMENTID_11I_T; - -/* CIPHER set for RSN or WPA element */ -typedef enum { CIPHER_TYPE_USE_GROUP_SET = 0, - CIPHER_TYPE_WEP40 = 1, - CIPHER_TYPE_TKIP = 2, - CIPHER_TYPE_CCMP = 4, - CIPHER_TYPE_WEP104 = 5 -} CIPHER_TYPE_T; - -unsigned char oui_rsn[3] = {0x00, 0x0F, 0xAC}; -unsigned char oui_wpa[3] = {0x00, 0x50, 0xf2}; - -static void fill_rsn_wpa_ie(unsigned char *data, unsigned char ie_type, - struct rda5890_bss_descriptor *bss, size_t *len) -{ - unsigned char index = 0; - unsigned char *oui; - - if (ie_type == IRSNELEMENT) { - oui = &oui_rsn[0]; - - /* Set RSN Information Element element ID */ - data[index] = IRSNELEMENT; - index += 2; - } - else { - oui = &oui_wpa[0]; - - /* Set WPA Information Element element ID */ - data[index] = IWPAELEMENT; - index += 2; - - /* Copy OUI */ - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = 0x01; - } - - /* Set the version of RSN Element to 1 */ - data[index++] = 1; - data[index++] = 0; - - /* Set Group Cipher Suite */ - memcpy(&data[index], oui, 3); - index += 3; - if ((bss->dot11i_info & BIT5) && !(bss->dot11i_info & BIT6)) { - /* only CCMP and !TKIP, use CCMP, otherwise, always TKIP */ - data[index++] = CIPHER_TYPE_CCMP; - } - else { - data[index++] = CIPHER_TYPE_TKIP; - } - - /* Set Pairwise cipher Suite */ - if ((bss->dot11i_info & BIT5) && (bss->dot11i_info & BIT6)) { - /* both CCMP and TKIP */ - data[index++] = 2; - data[index++] = 0; - - /* Check BIT7 to determine who goes first */ - if (bss->dot11i_info & BIT7) { - /* BIT7 is 1 => CCMP goes first */ - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = CIPHER_TYPE_CCMP; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = CIPHER_TYPE_TKIP; - } - else { - /* BIT7 is 0 => TKIP goes first */ - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = CIPHER_TYPE_TKIP; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = CIPHER_TYPE_CCMP; - } - } - else if ((bss->dot11i_info & BIT5) && !(bss->dot11i_info & BIT6)) { - /* CCMP and !TKIP */ - data[index++] = 1; - data[index++] = 0; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = CIPHER_TYPE_CCMP; - } - else if (!(bss->dot11i_info & BIT5) && (bss->dot11i_info & BIT6)) { - /* !CCMP and TKIP */ - data[index++] = 1; - data[index++] = 0; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = CIPHER_TYPE_TKIP; - } - else { - /* neither CCMP nor TKIP, use TKIP for WPA, and CCMP for RSN */ - data[index++] = 1; - data[index++] = 0; - - memcpy(&data[index], oui, 3); - index += 3; - if (ie_type == IRSNELEMENT) { - data[index++] = CIPHER_TYPE_CCMP; - } - else { - data[index++] = CIPHER_TYPE_TKIP; - } - } - - /* Set Authentication Suite */ - if ((bss->auth_info & 0x01) && (bss->auth_info & 0x02)) { - /* both 802.1X and PSK */ - data[index++] = 2; - data[index++] = 0; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = 0x01; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = 0x02; - } - else if ((bss->auth_info & 0x01) && !(bss->auth_info & 0x02)) { - /* 802.1X and !PSK */ - data[index++] = 1; - data[index++] = 0; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = 0x01; - } - else if (!(bss->auth_info & 0x01) && (bss->auth_info & 0x02)) { - /* !802.1X and PSK */ - data[index++] = 1; - data[index++] = 0; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = 0x02; - } - else { - /* neither 802.1X nor PSK, use 802.1X */ - data[index++] = 1; - data[index++] = 0; - - memcpy(&data[index], oui, 3); - index += 3; - data[index++] = 0x01; - } - - /* The RSN Capabilities, for RSN IE only */ - if (ie_type == IRSNELEMENT) { - data[index++] = bss->rsn_cap[0]; - data[index++] = bss->rsn_cap[1]; - } - - /* Set the length of the RSN Information Element */ - data[1] = (index - 2); - - /* Return the Extended Supported Rates element length */ - *len = (size_t)index; -} - -/* reconstruct wpa/rsn ie from the dot11i_info and auth_info fields */ -/* TODO: - * assuming RSN and WPA are using same cipher suite, no space to store each - * assuming grp and unicast are using same cipher suite - */ -static void reconstruct_rsn_wpa_ie(struct bss_descriptor *bss_desc) -{ - bss_desc->wpa_ie_len = 0; - bss_desc->rsn_ie_len = 0; - - if (bss_desc->data.dot11i_info & BIT0) { - if (bss_desc->data.dot11i_info & BIT3) { - /* WPA IE present */ - fill_rsn_wpa_ie(&bss_desc->wpa_ie[0], IWPAELEMENT, - &bss_desc->data, &bss_desc->wpa_ie_len); - } - - if (bss_desc->data.dot11i_info & BIT4) { - /* RSN IE present */ - fill_rsn_wpa_ie(&bss_desc->rsn_ie[0], IRSNELEMENT, - &bss_desc->data, &bss_desc->rsn_ie_len); - } - } - else { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "form_rsn_ie, NO SEC\n"); - } -} - -void rda5890_scan_worker(struct work_struct *work) -{ - struct rda5890_private *priv = container_of(work, struct rda5890_private, - scan_work.work); - int ret = 0; - struct rda5890_bss_descriptor bss_desc[RDA5890_MAX_NETWORK_NUM]; - int bss_index, bss_count; - struct bss_descriptor *iter_bss; - union iwreq_data wrqu; - unsigned char fist_send = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - if(test_bit(ASSOC_FLAG_ASSOC_START, &priv->assoc_flags) - || test_bit(ASSOC_FLAG_WLAN_CONNECTING, &priv->assoc_flags)) - { - cancel_delayed_work(&priv->scan_work); - queue_delayed_work(priv->work_thread, &priv->scan_work, HZ/2); - return; - } - - priv->scan_running = 1; - -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeLock(); -#endif - -#ifdef GET_SCAN_FROM_NETWORK_INFO - ret = rda5890_start_scan_enable_network_info(priv); -#else - ret = rda5890_start_scan(priv); -#endif - if (ret) { - RDA5890_ERRP("rda5890_start_scan fail, ret = %d\n", ret); - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "SCANNING ...\n"); - /* TODO: delay 2 sec for now, need to be put into a worker */ - rda5890_shedule_timeout(1500); - -#ifndef GET_SCAN_FROM_NETWORK_INFO -retry: - bss_count = rda5890_get_scan_results(priv, bss_desc); - - fist_send = (bss_count >> 8) & 0xff; - bss_count &= 0xff; - if (bss_count < 0 || bss_count >= RDA5890_MAX_NETWORK_NUM) { - RDA5890_ERRP("rda5890_get_scan_results fail, ret = %d\n", bss_count); - goto out; - } - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get Scan Result, count = %d, fist_send= %d \n", bss_count, fist_send); - - /* add scaned bss into list */ - for(bss_index = 0; bss_index < bss_count; bss_index++) { - struct bss_descriptor new; - struct bss_descriptor *found = NULL; - struct bss_descriptor *oldest = NULL; - - if (RDA5890_DBGLA(RDA5890_DA_WEXT, RDA5890_DL_TRACE)) - dump_bss_desc(&bss_desc[bss_index]); - - memcpy(&new.data, &bss_desc[bss_index], sizeof(struct rda5890_bss_descriptor)); - reconstruct_rsn_wpa_ie(&new); - new.last_scanned = jiffies; - - /* Try to find this bss in the scan table */ - list_for_each_entry (iter_bss, &priv->network_list, list) { - if (is_same_network(iter_bss, &new)) { - found = iter_bss; - break; - } - - if ((oldest == NULL) || - (iter_bss->last_scanned < oldest->last_scanned)) - oldest = iter_bss; - } - - if (found) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND SAME %s, update\n", found->data.ssid); - /* found, clear it */ - clear_bss_descriptor(found); - } else if (!list_empty(&priv->network_free_list)) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND NEW %s, add\n", new.data.ssid); - /* Pull one from the free list */ - found = list_entry(priv->network_free_list.next, - struct bss_descriptor, list); - list_move_tail(&found->list, &priv->network_list); - } else if (oldest) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND NEW %s, no space, replace oldest %s\n", - new.data.ssid, oldest->data.ssid); - /* If there are no more slots, expire the oldest */ - found = oldest; - clear_bss_descriptor(found); - list_move_tail(&found->list, &priv->network_list); - } else { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "FOUND NEW but no space to store\n"); - } - - /* Copy the locally created newbssentry to the scan table */ - memcpy(found, &new, offsetof(struct bss_descriptor, list)); - } - - if(bss_count >= 5 && !fist_send) - goto retry; - -#else - //do noting in get network info modle - -#endif - -out: - priv->scan_running = 0; - memset(&wrqu, 0, sizeof(union iwreq_data)); - wireless_send_event(priv->dev, SIOCGIWSCAN, &wrqu, NULL); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeUnlock(); -#endif -} - -/** - * @brief Handle Scan Network ioctl - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param vwrq A pointer to iw_param structure - * @param extra A pointer to extra data buf - * - * @return 0 --success, otherwise fail - */ -int rda5890_set_scan(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - if (priv->scan_running) - goto out; - - - cancel_delayed_work(&priv->scan_work); - queue_delayed_work(priv->work_thread, &priv->scan_work, HZ/50); - -out: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return 0; -} - -/** - * @brief Handle Retrieve scan table ioctl - * - * @param dev A pointer to net_device structure - * @param info A pointer to iw_request_info structure - * @param dwrq A pointer to iw_point structure - * @param extra A pointer to extra data buf - * - * @return 0 --success, otherwise fail - */ -int rda5890_get_scan(struct net_device *dev, struct iw_request_info *info, - struct iw_point *dwrq, char *extra) -{ -#define SCAN_ITEM_SIZE 128 - struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - int ret = 0; - struct bss_descriptor *iter_bss; - struct bss_descriptor *safe; - char *ev = extra; - char *stop = ev + dwrq->length; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - /* iwlist should wait until the current scan is finished */ - if (priv->scan_running) { - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "Scan is Running, return AGAIN\n"); - return -EAGAIN; - } - - /* report all bss to upper layer */ - list_for_each_entry_safe (iter_bss, safe, &priv->network_list, list) { - char *next_ev; - unsigned long stale_time; - - if (stop - ev < SCAN_ITEM_SIZE) { - ret = -E2BIG; - break; - } - - /* Prune old an old scan result */ - stale_time = iter_bss->last_scanned + DEFAULT_MAX_SCAN_AGE; - if (time_after(jiffies, stale_time)) { - list_move_tail(&iter_bss->list, &priv->network_free_list); -#ifdef GET_SCAN_FROM_NETWORK_INFO - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "Prune Old Bss %s\n", iter_bss->ssid); -#else - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "Prune Old Bss %s\n", iter_bss->ssid); -#endif - clear_bss_descriptor(iter_bss); - continue; - } - - /* Translate to WE format this entry */ - next_ev = translate_scan(priv, info, ev, stop, iter_bss); -#ifdef GET_SCAN_FROM_NETWORK_INFO - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "Report BSS %s\n", iter_bss->ssid); -#else - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "Report BSS %s\n", iter_bss->data.ssid); -#endif - if (next_ev == NULL) - continue; - ev = next_ev; - } - dwrq->length = (ev - extra); - dwrq->flags = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -int rda5890_set_mlme(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - //struct rda5890_private *priv = (struct rda5890_private *)netdev_priv(dev); - struct iw_mlme *mlme = (struct iw_mlme *)extra; - int ret = 0; - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s >>>\n", __func__); - - switch (mlme->cmd) { - case IW_MLME_DEAUTH: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "DEAUTH\n"); - /* silently ignore */ - break; - - case IW_MLME_DISASSOC: - { - unsigned char ssid[6]; - memset(ssid, 0, 6); - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "DISASSOC\n"); - /* silently ignore */ - rda5890_set_ssid((struct rda5890_private *)netdev_priv(dev) , ssid, 6); - } - break; - default: - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, - "Not supported cmd %d\n", mlme->cmd); - ret = -EOPNOTSUPP; - } - - RDA5890_DBGLAP(RDA5890_DA_WEXT, RDA5890_DL_TRACE, "%s <<<\n", __func__); - return ret; -} - -/* - * iwconfig settable callbacks - */ -static const iw_handler rda5890_wext_handler[] = { - (iw_handler) NULL, /* SIOCSIWCOMMIT */ - (iw_handler) rda5890_get_name, /* SIOCGIWNAME */ - (iw_handler) NULL, /* SIOCSIWNWID */ - (iw_handler) NULL, /* SIOCGIWNWID */ - (iw_handler) rda5890_set_freq, /* SIOCSIWFREQ */ - (iw_handler) rda5890_get_freq, /* SIOCGIWFREQ */ - (iw_handler) rda5890_set_mode, /* SIOCSIWMODE */ - (iw_handler) rda5890_get_mode, /* SIOCGIWMODE */ - (iw_handler) NULL, /* SIOCSIWSENS */ - (iw_handler) NULL, /* SIOCGIWSENS */ - (iw_handler) NULL, /* SIOCSIWRANGE */ - (iw_handler) rda5890_get_range, /* SIOCGIWRANGE */ - (iw_handler) NULL, /* SIOCSIWPRIV */ - (iw_handler) NULL, /* SIOCGIWPRIV */ - (iw_handler) NULL, /* SIOCSIWSTATS */ - (iw_handler) NULL, /* SIOCGIWSTATS */ - (iw_handler) NULL, /* SIOCSIWSPY */ - (iw_handler) NULL, /* SIOCGIWSPY */ - (iw_handler) NULL, /* SIOCSIWTHRSPY */ - (iw_handler) NULL, /* SIOCGIWTHRSPY */ - (iw_handler) rda5890_set_wap, /* SIOCSIWAP */ - (iw_handler) rda5890_get_wap, /* SIOCGIWAP */ - (iw_handler) rda5890_set_mlme, /* SIOCSIWMLME */ - (iw_handler) NULL, /* SIOCGIWAPLIST - deprecated */ - (iw_handler) rda5890_set_scan, /* SIOCSIWSCAN */ - (iw_handler) rda5890_get_scan, /* SIOCGIWSCAN */ - (iw_handler) rda5890_set_essid, /* SIOCSIWESSID */ - (iw_handler) rda5890_get_essid, /* SIOCGIWESSID */ - (iw_handler) rda5890_set_nick, /* SIOCSIWNICKN */ - (iw_handler) rda5890_get_nick, /* SIOCGIWNICKN */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) rda5890_set_rate, /* SIOCSIWRATE */ - (iw_handler) rda5890_get_rate, /* SIOCGIWRATE */ - (iw_handler) rda5890_set_rts, /* SIOCSIWRTS */ - (iw_handler) rda5890_get_rts, /* SIOCGIWRTS */ - (iw_handler) rda5890_set_frag, /* SIOCSIWFRAG */ - (iw_handler) rda5890_get_frag, /* SIOCGIWFRAG */ - (iw_handler) rda5890_set_txpow, /* SIOCSIWTXPOW */ - (iw_handler) rda5890_get_txpow, /* SIOCGIWTXPOW */ - (iw_handler) rda5890_set_retry, /* SIOCSIWRETRY */ - (iw_handler) rda5890_get_retry, /* SIOCGIWRETRY */ - (iw_handler) rda5890_set_encode, /* SIOCSIWENCODE */ - (iw_handler) rda5890_get_encode, /* SIOCGIWENCODE */ - (iw_handler) rda5890_set_power, /* SIOCSIWPOWER */ - (iw_handler) rda5890_get_power, /* SIOCGIWPOWER */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) rda5890_set_genie, /* SIOCSIWGENIE */ - (iw_handler) rda5890_get_genie, /* SIOCGIWGENIE */ - (iw_handler) rda5890_set_auth, /* SIOCSIWAUTH */ - (iw_handler) rda5890_get_auth, /* SIOCGIWAUTH */ - (iw_handler) rda5890_set_encodeext,/* SIOCSIWENCODEEXT */ - (iw_handler) rda5890_get_encodeext,/* SIOCGIWENCODEEXT */ - (iw_handler) rda5890_set_pmksa, /* SIOCSIWPMKSA */ -}; - -struct iw_handler_def rda5890_wext_handler_def = { - .num_standard = ARRAY_SIZE(rda5890_wext_handler), - .standard = (iw_handler *) rda5890_wext_handler, - .get_wireless_stats = rda5890_get_wireless_stats, -}; - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wext.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wext.h deleted file mode 100755 index 35ff2f7c8780..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wext.h +++ /dev/null @@ -1,37 +0,0 @@ -/** - * This file contains definition for IOCTL call. - */ -#include "rda5890_defs.h" -#ifndef _RDA5890_WEXT_H_ -#define _RDA5890_WEXT_H_ - -#ifndef DEFAULT_MAX_SCAN_AGE -#define DEFAULT_MAX_SCAN_AGE (15*HZ) -#ifdef GET_SCAN_FROM_NETWORK_INFO -#else -#define DEFAULT_MAX_SCAN_AGE (15*HZ) -#endif -#else -#undef DEFAULT_MAX_SCAN_AGE -#ifdef GET_SCAN_FROM_NETWORK_INFO -#define DEFAULT_MAX_SCAN_AGE (15*HZ) -#else -#define DEFAULT_MAX_SCAN_AGE (15*HZ) -#endif -#endif - -extern struct iw_handler_def rda5890_wext_handler_def; - -void rda5890_indicate_disconnected(struct rda5890_private *priv); -void rda5890_indicate_connected(struct rda5890_private *priv); -void rda5890_assoc_done_worker(struct work_struct *work); -void rda5890_assoc_worker(struct work_struct *work); -void rda5890_scan_worker(struct work_struct *work); -void rda5890_wlan_connect_worker(struct work_struct *work); - -static inline unsigned char is_zero_eth_addr(unsigned char * addr) -{ - return !(addr[0] | addr[1] |addr[2] |addr[3] |addr[4] |addr[5]); -} - -#endif diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wid.c b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wid.c deleted file mode 100755 index 1a1fc1d6de83..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wid.c +++ /dev/null @@ -1,1957 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "rda5890_defs.h" -#include "rda5890_dev.h" -#include "rda5890_wid.h" -#include "rda5890_wext.h" -#include "rda5890_txrx.h" -#include "rda5890_if_sdio.h" - -static unsigned char is_need_set_notch = 0; - -/* for both Query and Write */ -int rda5890_wid_request(struct rda5890_private *priv, - char *wid_req, unsigned short wid_req_len, - char *wid_rsp, unsigned short *wid_rsp_len) -{ - int ret = 0; - int timeleft = 0; - char data_buf[RDA5890_MAX_WID_LEN + 2]; - unsigned short data_len; - struct if_sdio_card * card = (struct if_sdio_card *)priv->card; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - -#ifdef WIFI_TEST_MODE - if(rda_5990_wifi_in_test_mode()) - return 0; -#endif //end WIFI_TEST_MODE - - mutex_lock(&priv->wid_lock); - priv->wid_rsp = wid_rsp; - priv->wid_rsp_len = *wid_rsp_len; - priv->wid_pending = 1; - - data_len = wid_req_len + 2; - data_buf[0] = (char)(data_len&0xFF); - data_buf[1] = (char)((data_len>>8)&0x0F); - data_buf[1] |= 0x40; // for Request(Q/W) 0x4 - memcpy(data_buf + 2, wid_req, wid_req_len); - - init_completion(&priv->wid_done); -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeLock(); -#endif - ret = rda5890_host_to_card(priv, data_buf, data_len, WID_REQUEST_PACKET); - if (ret) { - RDA5890_ERRP("host_to_card send failed, ret = %d\n", ret); - priv->wid_pending = 0; - goto out; - } - - atomic_inc(&card->wid_complete_flag); - timeleft = wait_for_completion_timeout(&priv->wid_done, msecs_to_jiffies(450)); - if (timeleft == 0) { - RDA5890_ERRP("respose timeout wid :%x %x \n", wid_req[4], wid_req[5]); - priv->wid_pending = 0; - ret = -EFAULT; - goto out; - } - - *wid_rsp_len = priv->wid_rsp_len; - -out: - mutex_unlock(&priv->wid_lock); - atomic_set(&card->wid_complete_flag, 0); - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>> wid: %x %x \n", __func__, wid_req[4],wid_req[5]); -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeUnlock(); -#endif - return ret; -} - -int rda5890_wid_request_polling(struct rda5890_private *priv, - char *wid_req, unsigned short wid_req_len, - char *wid_rsp, unsigned short *wid_rsp_len) -{ - int ret = -1; - int timeleft = 0; - char data_buf[RDA5890_MAX_WID_LEN + 2]; - unsigned short data_len; - unsigned char status; - unsigned int retry = 0, count = 0; - struct if_sdio_card * card = (struct if_sdio_card*)priv->card; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - priv->wid_rsp = wid_rsp; - priv->wid_rsp_len = *wid_rsp_len; - - data_len = wid_req_len + 2; - data_buf[0] = (char)(data_len&0xFF); - data_buf[1] = (char)((data_len>>8)&0x0F); - data_buf[1] |= 0x40; // for Request(Q/W) 0x4 - memcpy(data_buf + 2, wid_req, wid_req_len); - -re_send: - - count += 1; - ret = rda5890_host_to_card(priv, data_buf, data_len, WID_REQUEST_POLLING_PACKET); - if (ret) { - RDA5890_ERRP("host_to_card send failed, ret = %d\n", ret); - goto out; - } - - rda5890_shedule_timeout(3); //3ms delay - while(retry < 20) - { - sdio_claim_host(card->func); - status = sdio_readb(card->func, IF_SDIO_FUN1_INT_STAT, &ret); - sdio_release_host(card->func); - if (ret) - goto out; - - if (status & IF_SDIO_INT_AHB2SDIO) - { - int ret = 0; - u8 size_l = 0, size_h = 0; - u16 size, chunk; - - sdio_claim_host(card->func); - size_l = sdio_readb(card->func, IF_SDIO_AHB2SDIO_PKTLEN_L, &ret); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("read PKTLEN_L reg fail\n"); - goto out; - } - else - RDA5890_ERRP("read PKTLEN_L reg size_l:%d \n", size_l); - - sdio_claim_host(card->func); - size_h = sdio_readb(card->func, IF_SDIO_AHB2SDIO_PKTLEN_H, &ret); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("read PKTLEN_H reg fail\n"); - goto out; - } - else - RDA5890_ERRP("read PKTLEN_H reg size_h:%d\n",size_h); - - size = (size_l | ((size_h & 0x7f) << 8)) * 4; - if (size < 4) { - RDA5890_ERRP("invalid packet size (%d bytes) from firmware\n", size); - ret = -EINVAL; - goto out; - } - - /* alignment is handled on firmside */ - //chunk = sdio_align_size(card->func, size); - chunk = size; - - RDA5890_DBGLAP(RDA5890_DA_SDIO, RDA5890_DL_NORM, - "if_sdio_card_to_host, size = %d, aligned size = %d\n", size, chunk); - - /* TODO: handle multiple packets here */ - sdio_claim_host(card->func); - ret = sdio_readsb(card->func, card->buffer, IF_SDIO_FUN1_FIFO_RD, chunk); - sdio_release_host(card->func); - if (ret) { - RDA5890_ERRP("sdio_readsb fail, ret = %d\n", ret); - goto out; - } -#if 1 - if(priv->version == 7) - sdio_writeb(card->func, 0x20 ,IF_SDIO_FUN1_INT_PEND, &ret); -#endif - - /* TODO: this chunk size need to be handled here */ - { - unsigned char rx_type; - unsigned short rx_length; - unsigned char msg_type; - unsigned char *packet = (unsigned char *)card->buffer; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - rx_type = (unsigned char)packet[1]&0xF0; - rx_length = (unsigned short)(packet[0] + ((packet[1]&0x0f) << 8)); - - if (rx_length > chunk) { - RDA5890_ERRP("packet_len %d less than header specified length %d\n", - chunk, rx_length); - goto out; - } - - if( rx_type == 0x30 ) - { - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_NORM, - "Message Packet type =%x \n", msg_type); - msg_type = packet[2]; - - if (msg_type == 'R') - { - packet += 2; - if(priv->wid_msg_id - 1 == packet[1]) - { - ret = 0; - if(priv->wid_rsp_len > rx_length - 2) - { - priv->wid_rsp_len = rx_length - 2; - memcpy(priv->wid_rsp, packet, rx_length -2); - } - break; - } - else - RDA5890_ERRP("rda5890_wid_request_polling wid_msg_id is wrong %d %d wid=%x \n", priv->wid_msg_id -1, packet[1], (packet[4] | (packet[5] << 8))); - } - } - } - } - - rda5890_shedule_timeout(3); //3ms delay - ret = -1; - retry ++; - } - - if(ret < 0 && count <= 3) - goto re_send; -out: - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<< wid: %x %x retry: %d count = %d \n", __func__, wid_req[4],wid_req[5], retry, count); - - return ret; -} -void rda5890_wid_response(struct rda5890_private *priv, - char *wid_rsp, unsigned short wid_rsp_len) -{ - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - if (!priv->wid_pending) { - RDA5890_ERRP("no wid pending\n"); - return; - } - - if (wid_rsp_len > priv->wid_rsp_len) { - RDA5890_ERRP("not enough space for wid response, size = %d, buf = %d\n", - wid_rsp_len, priv->wid_rsp_len); - complete(&priv->wid_done); - return; - } - - memcpy(priv->wid_rsp, wid_rsp, wid_rsp_len); - priv->wid_rsp_len = wid_rsp_len; - priv->wid_pending = 0; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - - complete(&priv->wid_done); -} - -void rda5890_wid_status(struct rda5890_private *priv, - char *wid_status, unsigned short wid_status_len) -{ - char mac_status; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeLock(); -#endif - - mac_status = wid_status[7]; - if (mac_status == MAC_CONNECTED) { - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_CRIT, - "MAC CONNECTED\n"); - - priv->connect_status = MAC_CONNECTED; - netif_carrier_on(priv->dev); - netif_wake_queue(priv->dev); - rda5890_indicate_connected(priv); - - priv->first_init = 0; - cancel_delayed_work(&priv->assoc_done_work); - queue_delayed_work(priv->work_thread, &priv->assoc_done_work, 0); - - if(test_and_clear_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags)) - { - cancel_delayed_work_sync(&priv->assoc_work); - } - - if(test_bit(ASSOC_FLAG_WLAN_CONNECTING, &priv->assoc_flags)) - cancel_delayed_work(&priv->wlan_connect_work); - - set_bit(ASSOC_FLAG_WLAN_CONNECTING, &priv->assoc_flags); - queue_delayed_work(priv->work_thread, &priv->wlan_connect_work, HZ*20); - - } - else if (mac_status == MAC_DISCONNECTED) { - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_CRIT, - "MAC DISCONNECTED\n"); - - if(priv->connect_status == MAC_CONNECTED) - is_need_set_notch = 1; - else - is_need_set_notch = 0; - - if(!test_bit(ASSOC_FLAG_ASSOC_RETRY, &priv->assoc_flags)) - { - priv->connect_status = MAC_DISCONNECTED; - netif_stop_queue(priv->dev); - netif_carrier_off(priv->dev); - if(!priv->first_init) // the first disconnect should not send to upper - rda5890_indicate_disconnected(priv); - else - priv->first_init = 0; - - if(test_bit(ASSOC_FLAG_ASSOC_START, &priv->assoc_flags)) - { - cancel_delayed_work(&priv->wlan_connect_work); - queue_delayed_work(priv->work_thread, &priv->wlan_connect_work, HZ*4); - } - - clear_bit(ASSOC_FLAG_ASSOC_START, &priv->assoc_flags); - clear_bit(ASSOC_FLAG_WLAN_CONNECTING, &priv->assoc_flags); - } - else - { - RDA5890_ERRP("********wep assoc will be retry ---------- 0x%02x\n", mac_status); - } - } - else { - RDA5890_ERRP("Invalid MAC Status 0x%02x\n", mac_status); - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); - -#ifdef WIFI_UNLOCK_SYSTEM - rda5990_wakeUnlock(); -#endif -} - -void rda5890_card_to_host(struct rda5890_private *priv, - char *packet, unsigned short packet_len) -{ - unsigned char rx_type; - unsigned short rx_length; - unsigned char msg_type; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>>\n", __func__); - - rx_type = (unsigned char)packet[1]&0xF0; - rx_length = (unsigned short)(packet[0] + ((packet[1]&0x0f) << 8)); - - if (rx_length > packet_len) { - RDA5890_ERRP("packet_len %d less than header specified length %d\n", - packet_len, rx_length); - goto out; - } - - if( rx_type == 0x30 ) - { - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_NORM, - "Message Packet\n"); - msg_type = packet[2]; - if(msg_type == 'I') - { - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_NORM, - "Indication Message\n"); - rda5890_wid_status(priv, packet + 2, rx_length - 2); - } - else if (msg_type == 'R') - { - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_NORM, - "WID Message\n"); - rda5890_wid_response(priv, packet + 2, rx_length - 2); - } -#ifdef GET_SCAN_FROM_NETWORK_INFO - else if(msg_type == 'N') - { - extern void rda5890_network_information(struct rda5890_private *priv, - char *info, unsigned short info_len); - rda5890_network_information(priv, packet + 2, rx_length - 2); - } -#endif - else { - //RDA5890_ERRP("Invalid Message Type '%c'\n", msg_type); - } - } - else if(rx_type == 0x20) - { - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_NORM, - "Data Packet\n"); - rda5890_data_rx(priv, packet + 2, rx_length - 2); - } - else { - RDA5890_ERRP("Invalid Packet Type 0x%02x\n", rx_type); - } - -out: - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<<\n", __func__); -} - -/* - * check wid response header - * if no error, return the pointer to the payload - * support only 1 wid per packet - */ -int rda5890_check_wid_response(char *wid_rsp, unsigned short wid_rsp_len, - unsigned short wid, char wid_msg_id, - char payload_len, char **ptr_payload) -{ - unsigned short rsp_len; - unsigned short rsp_wid; - unsigned char msg_len; - - if (wid_rsp[0] != 'R') { - RDA5890_ERRP("wid_rsp[0] != 'R'\n"); - goto err; - } - - if (wid_rsp[1] != wid_msg_id) { - RDA5890_ERRP("wid_msg_id not match msg_id: %d \n", wid_rsp[1]); - goto err; - } - - if (wid_rsp_len < 4) { - RDA5890_ERRP("wid_rsp_len < 4\n"); - goto err; - } - - rsp_len = wid_rsp[2] | (wid_rsp[3] << 8); - if (wid_rsp_len != rsp_len) { - RDA5890_ERRP("wid_rsp_len not match, %d != %d\n", wid_rsp_len, rsp_len); - goto err; - } - - if (wid_rsp_len < 7) { - RDA5890_ERRP("wid_rsp_len < 7\n"); - goto err; - } -#if 0 - rsp_wid = wid_rsp[4] | (wid_rsp[5] << 8); - if (wid != rsp_wid) { - RDA5890_ERRP("wid not match, 0x%04x != 0x%04x\n", wid, rsp_wid); - goto err; - } -#endif - msg_len = wid_rsp[6]; - if (wid_rsp_len != msg_len + 7) { - RDA5890_ERRP("msg_len not match, %d + 7 != %d\n", msg_len, wid_rsp_len); - goto err; - } - - if (payload_len != msg_len) { - RDA5890_ERRP("payload_len not match, %d != %d\n", msg_len, payload_len); - goto err; - } - - *ptr_payload = wid_rsp + 7; - - return 0; - -err: - RDA5890_ERRP("rda5890_check_wid_response failed wid=0x%04x wid_msg_id:%d \n" ,wid_rsp[4] | (wid_rsp[5] << 8), wid_msg_id); - return -EINVAL; -} - -/* - * check wid status response - */ -int rda5890_check_wid_status(char *wid_rsp, unsigned short wid_rsp_len, - char wid_msg_id) -{ - int ret; - unsigned short wid = WID_STATUS; - char *ptr_payload; - char status_val; - - ret = rda5890_check_wid_response(wid_rsp, wid_rsp_len, wid, wid_msg_id, - 1, &ptr_payload); - if (ret) { - RDA5890_ERRP("rda5890_check_wid_status, check_wid_response fail\n"); - return ret; - } - - status_val = ptr_payload[0]; - if (status_val != WID_STATUS_SUCCESS) { - RDA5890_ERRP("check_wid_status NOT success, status = %d\n", status_val); - return -EINVAL; - } - - return 0; -} - -int rda5890_generic_get_uchar(struct rda5890_private *priv, - unsigned short wid, unsigned char *val) -{ - int ret; - char wid_req[6]; - unsigned short wid_req_len = 6; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - char wid_msg_id = priv->wid_msg_id++; - char *ptr_payload; - - wid_req[0] = 'Q'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_response(wid_rsp, wid_rsp_len, wid, wid_msg_id, - sizeof(unsigned char), &ptr_payload); - if (ret) { - RDA5890_ERRP("check_wid_response fail, ret = %d\n", ret); - goto out; - } - - *val = *ptr_payload; -out: - return ret; -} - -int rda5890_generic_set_uchar(struct rda5890_private *priv, - unsigned short wid, unsigned char val) -{ - int ret; - char wid_req[7 + sizeof(unsigned char)]; - unsigned short wid_req_len = 7 + 1; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - char wid_msg_id = priv->wid_msg_id++; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - wid_req[6] = 1; - wid_req[7] = val; - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_status(wid_rsp, wid_rsp_len, wid_msg_id); - if (ret) { - RDA5890_ERRP("check_wid_status fail, ret = %d\n", ret); - goto out; - } - -out: - return ret; -} - -#if 1 -int rda5890_generic_get_ushort(struct rda5890_private *priv, - unsigned short wid, unsigned short *val) -{ - int ret; - char wid_req[6]; - unsigned short wid_req_len = 6; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - char wid_msg_id = priv->wid_msg_id++; - char *ptr_payload; - - wid_req[0] = 'Q'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_response(wid_rsp, wid_rsp_len, wid, wid_msg_id, - sizeof(unsigned short), &ptr_payload); - if (ret) { - RDA5890_ERRP("check_wid_response fail, ret = %d\n", ret); - goto out; - } - - memcpy(val, ptr_payload, sizeof(unsigned short)); - -out: - return ret; -} - -int rda5890_generic_set_ushort(struct rda5890_private *priv, - unsigned short wid, unsigned short val) -{ - int ret; - char wid_req[7 + sizeof(unsigned short)]; - unsigned short wid_req_len = 7 + sizeof(unsigned short); - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - char wid_msg_id = priv->wid_msg_id++; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - wid_req[6] = (char)(sizeof(unsigned short)); - memcpy(wid_req + 7, &val, sizeof(unsigned short)); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_status(wid_rsp, wid_rsp_len, wid_msg_id); - if (ret) { - RDA5890_ERRP("check_wid_status fail, ret = %d\n", ret); - goto out; - } - -out: - return ret; -} -#endif - -int rda5890_generic_get_ulong(struct rda5890_private *priv, - unsigned short wid, unsigned long *val) -{ - int ret; - char wid_req[6]; - unsigned short wid_req_len = 6; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - char wid_msg_id = priv->wid_msg_id++; - char *ptr_payload; - - wid_req[0] = 'Q'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_response(wid_rsp, wid_rsp_len, wid, wid_msg_id, - sizeof(unsigned long), &ptr_payload); - if (ret) { - RDA5890_ERRP("check_wid_response fail, ret = %d\n", ret); - goto out; - } - - memcpy(val, ptr_payload, sizeof(unsigned long)); - -out: - return ret; -} - -int rda5890_generic_set_ulong(struct rda5890_private *priv, - unsigned short wid, unsigned long val) -{ - int ret; - char wid_req[7 + sizeof(unsigned long)]; - unsigned short wid_req_len = 7 + sizeof(unsigned long); - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - char wid_msg_id = priv->wid_msg_id++; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - wid_req[6] = (char)(sizeof(unsigned long)); - memcpy(wid_req + 7, &val, sizeof(unsigned long)); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_status(wid_rsp, wid_rsp_len, wid_msg_id); - if (ret) { - RDA5890_ERRP("check_wid_status fail, ret = %d\n", ret); - goto out; - } - -out: - return ret; -} - -int rda5890_generic_get_str(struct rda5890_private *priv, - unsigned short wid, unsigned char *val, unsigned char len) -{ - int ret; - char wid_req[6]; - unsigned short wid_req_len = 6; - char wid_rsp[RDA5890_MAX_WID_LEN]; - unsigned short wid_rsp_len = RDA5890_MAX_WID_LEN; - char wid_msg_id = priv->wid_msg_id++; - char *ptr_payload; - - wid_req[0] = 'Q'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_response(wid_rsp, wid_rsp_len, wid, wid_msg_id, - (char)len, &ptr_payload); - if (ret) { - RDA5890_ERRP("check_wid_response fail, ret = %d\n", ret); - goto out; - } - - memcpy(val, ptr_payload, len); - -out: - return ret; -} - -int rda5890_generic_set_str(struct rda5890_private *priv, - unsigned short wid, unsigned char *val, unsigned char len) -{ - int ret; - char wid_req[RDA5890_MAX_WID_LEN]; - unsigned short wid_req_len = 7 + len; - char wid_rsp[RDA5890_MAX_WID_LEN]; - unsigned short wid_rsp_len = RDA5890_MAX_WID_LEN; - char wid_msg_id = priv->wid_msg_id++; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - wid_req[6] = (char)(len); - memcpy(wid_req + 7, val, len); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_status(wid_rsp, wid_rsp_len, wid_msg_id); - if (ret) { - RDA5890_ERRP("check_wid_status fail, ret = %d\n", ret); - goto out; - } - -out: - return ret; -} - -int rda5890_check_wid_response_unknown_len( - char *wid_rsp, unsigned short wid_rsp_len, - unsigned short wid, char wid_msg_id, - char *payload_len, char **ptr_payload) -{ - unsigned short rsp_len; - unsigned short rsp_wid; - unsigned char msg_len; - - if (wid_rsp[0] != 'R') { - RDA5890_ERRP("wid_rsp[0] != 'R'\n"); - return -EINVAL; - } - - if (wid_rsp[1] != wid_msg_id) { - RDA5890_ERRP("wid_msg_id not match\n"); - return -EINVAL; - } - - if (wid_rsp_len < 4) { - RDA5890_ERRP("wid_rsp_len < 4\n"); - return -EINVAL; - } - - rsp_len = wid_rsp[2] | (wid_rsp[3] << 8); - if (wid_rsp_len != rsp_len) { - RDA5890_ERRP("wid_rsp_len not match, %d != %d\n", wid_rsp_len, rsp_len); - return -EINVAL; - } - - if (wid_rsp_len < 7) { - RDA5890_ERRP("wid_rsp_len < 7\n"); - return -EINVAL; - } -#if 0 - rsp_wid = wid_rsp[4] | (wid_rsp[5] << 8); - if (wid != rsp_wid) { - RDA5890_ERRP("wid not match, 0x%04x != 0x%04x\n", wid, rsp_wid); - return -EINVAL; - } -#endif - msg_len = wid_rsp[6]; - if (wid_rsp_len != msg_len + 7) { - RDA5890_ERRP("msg_len not match, %d + 7 != %d\n", msg_len, wid_rsp_len); - return -EINVAL; - } - - *payload_len = msg_len; - - *ptr_payload = wid_rsp + 7; - - return 0; -err: - - RDA5890_ERRP("wid is %x wid_msg %d \n", wid_rsp[4] | (wid_rsp[5] << 8), wid_rsp[1]); - return -EINVAL; -} - -int rda5890_get_str_unknown_len(struct rda5890_private *priv, - unsigned short wid, unsigned char *val, unsigned char *len) -{ - int ret; - char wid_req[6]; - unsigned short wid_req_len = 6; - char wid_rsp[RDA5890_MAX_WID_LEN]; - unsigned short wid_rsp_len = RDA5890_MAX_WID_LEN; - char wid_msg_id = priv->wid_msg_id++; - char *ptr_payload; - - wid_req[0] = 'Q'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_response_unknown_len( - wid_rsp, wid_rsp_len, wid, wid_msg_id, (char*)len, &ptr_payload); - if (ret) { - RDA5890_ERRP("check_wid_response fail, ret = %d\n", ret); - goto out; - } - - memcpy(val, ptr_payload, *len); - -out: - return ret; -} - -extern int rda5890_sdio_set_default_notch(struct rda5890_private *priv); -int rda5890_start_scan(struct rda5890_private *priv) -{ - int ret; - char wid_req[12]; - unsigned short wid_req_len = 12; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = 0; - - if(priv->connect_status != MAC_CONNECTED) - { - rda5890_sdio_set_default_notch(priv); - } - - wid_msg_id = priv->wid_msg_id++; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid = WID_SITE_SURVEY; - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - wid_req[6] = (char)(0x01); - wid_req[7] = (char)(0x01); - - wid = WID_START_SCAN_REQ; - wid_req[8] = (char)(wid&0x00FF); - wid_req[9] = (char)((wid&0xFF00) >> 8); - - wid_req[10] = (char)(0x01); - wid_req[11] = (char)(0x01); - - - wid_req_len = 12; - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_status(wid_rsp, wid_rsp_len, wid_msg_id); - if (ret) { - RDA5890_ERRP("check_wid_status fail, ret = %d\n", ret); - goto out; - } - -out: - return ret; -} - - -int rda5890_start_scan_enable_network_info(struct rda5890_private *priv) -{ - int ret; - char wid_req[12]; - unsigned short wid_req_len = 12; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = 0; - - if(priv->connect_status != MAC_CONNECTED) - { - rda5890_sdio_set_default_notch(priv); - } - - wid_msg_id = priv->wid_msg_id++; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid = WID_SITE_SURVEY; - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - wid_req[6] = (char)(0x01); - wid_req[7] = (char)(0x01); - - wid = WID_START_SCAN_REQ; - wid_req[8] = (char)(wid&0x00FF); - wid_req[9] = (char)((wid&0xFF00) >> 8); - - wid_req[10] = (char)(0x01); - wid_req[11] = (char)(0x01); - - wid = WID_NETWORK_INFO_EN; - wid_req[12] = (char)(wid&0x00FF); - wid_req[13] = (char)((wid&0xFF00) >> 8); - - wid_req[14] = (char)(0x01); - wid_req[15] = (char)(0x01); // 0x01 scan network info - - wid_req_len = 16; - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_wid_request fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_status(wid_rsp, wid_rsp_len, wid_msg_id); - if (ret) { - RDA5890_ERRP("check_wid_status fail, ret = %d\n", ret); - goto out; - } - -out: - return ret; -} - -int rda5890_start_join(struct rda5890_private *priv) -{ - int ret; - char wid_req[255]; - unsigned short wid_req_len = 0; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = priv->wid_msg_id++; - unsigned short i = 0; - unsigned char * wep_key = 0, key_str_len = 0; - unsigned char key_str[26 + 1] , * key, *pWid_req; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<< mode:%d authtype:%d ssid:%s\n", __func__, priv->imode, priv->authtype, - priv->assoc_ssid); - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - - wid = WID_802_11I_MODE; - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - - wid_req[6] = 1; - wid_req[7] = priv->imode; - - wid = WID_AUTH_TYPE; - wid_req[8] = (char)(wid&0x00FF); - wid_req[9] = (char)((wid&0xFF00) >> 8); - - wid_req[10] = 1; - wid_req[11] = priv->authtype; - -#ifdef GET_SCAN_FROM_NETWORK_INFO - wid = WID_NETWORK_INFO_EN; - wid_req[12] = (char)(wid&0x00FF); - wid_req[13] = (char)((wid&0xFF00) >> 8); - - wid_req[14] = 1; - wid_req[15] = 0; - - wid = WID_CURRENT_TX_RATE; - wid_req[16] = (char)(wid&0x00FF); - wid_req[17] = (char)((wid&0xFF00) >> 8); - - wid_req[18] = 1; - wid_req[19] = 1; - - wid_req_len = 20; - pWid_req = wid_req + 20; -#else - wid_req_len = 12; - pWid_req = wid_req + 12; -#endif - wid = WID_WEP_KEY_VALUE0; - if(priv->imode == 3 || priv->imode == 7) //write wep key - { - for(i = 0 ; i < 4; i ++) - { - key = priv->wep_keys[i].key; - - if(priv->wep_keys[i].len == 0) - continue; - - if (priv->wep_keys[i].len == KEY_LEN_WEP_40) { - sprintf(key_str, "%02x%02x%02x%02x%02x\n", - key[0], key[1], key[2], key[3], key[4]); - key_str_len = 10; - key_str[key_str_len] = '\0'; - } - else if (priv->wep_keys[i].len == KEY_LEN_WEP_104) { - sprintf(key_str, "%02x%02x%02x%02x%02x" - "%02x%02x%02x%02x%02x" - "%02x%02x%02x\n", - key[0], key[1], key[2], key[3], key[4], - key[5], key[6], key[7], key[8], key[9], - key[10], key[11], key[12]); - key_str_len = 26; - key_str[key_str_len] = '\0'; - } - else - continue; - - pWid_req[0] = (char)((wid + i)&0x00FF); - pWid_req[1] = (char)(((wid + i)&0xFF00) >> 8); - - pWid_req[2] = key_str_len; - memcpy(pWid_req + 3, key_str, key_str_len); - - pWid_req += 3 + key_str_len; - wid_req_len += 3 + key_str_len; - } - } - -// ssid - wid = WID_SSID; - pWid_req[0] = (char)(wid&0x00FF); - pWid_req[1] = (char)((wid&0xFF00) >> 8); - - pWid_req[2] = priv->assoc_ssid_len; - memcpy(pWid_req + 3, priv->assoc_ssid, priv->assoc_ssid_len); - - wid_req_len += 3 + priv->assoc_ssid_len; - - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_start_join fail, ret = %d\n", ret); - goto out; - } - - ret = rda5890_check_wid_status(wid_rsp, wid_rsp_len, wid_msg_id); - if (ret) { - RDA5890_ERRP("rda5890_start_join check status fail, ret = %d\n", ret); - goto out; - } - -out: - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>> ret = %d req len %d mod:0x%x auth_type:0x%x \n", __func__, ret, wid_req_len, priv->imode - , priv->authtype); - return ret; -} - -int rda5890_set_txrate(struct rda5890_private *priv, unsigned char mbps) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "rda5890_set_txrate <<< \n"); - - ret = rda5890_generic_set_uchar(priv, WID_CURRENT_TX_RATE, mbps); //O FOR AUTO 1FOR 1MBPS - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "rda5890_set_txrate success >>> \n"); - -out: - return ret; -} - -int rda5890_set_core_init_polling(struct rda5890_private *priv, const unsigned int (*data)[2], unsigned char num) -{ - int ret = -1; - char wid_req[255]; - unsigned short wid_req_len = 4 + 14*num; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = priv->wid_msg_id++; - char count = 0, *p_wid_req = NULL; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - p_wid_req = wid_req + 4; - for(count = 0; count < num; count ++) - { - wid = WID_MEMORY_ADDRESS; - p_wid_req[0] = (char)(wid&0x00FF); - p_wid_req[1] = (char)((wid&0xFF00) >> 8); - - p_wid_req[2] = (char)4; - memcpy(p_wid_req + 3, (char*)&data[count][0], 4); - - wid = WID_MEMORY_ACCESS_32BIT; - p_wid_req[7] = (char)(wid&0x00FF); - p_wid_req[8] = (char)((wid&0xFF00) >> 8); - - p_wid_req[9] = (char)4; - memcpy(p_wid_req + 10, (char*)&data[count][1], 4); - p_wid_req += 14; - } - ret = rda5890_wid_request_polling(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_set_sdio_core_init fail, ret = %d\n", ret); - goto out; - } - -out: - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - return ret; -} - -int rda5890_set_core_init(struct rda5890_private *priv, const unsigned int (*data)[2], unsigned char num) -{ - int ret = -1; - char wid_req[255]; - unsigned short wid_req_len = 4 + 14*num; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = priv->wid_msg_id++; - char count = 0, *p_wid_req = NULL; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - p_wid_req = wid_req + 4; - for(count = 0; count < num; count ++) - { - wid = WID_MEMORY_ADDRESS; - p_wid_req[0] = (char)(wid&0x00FF); - p_wid_req[1] = (char)((wid&0xFF00) >> 8); - - p_wid_req[2] = (char)4; - memcpy(p_wid_req + 3, (char*)&data[count][0], 4); - - wid = WID_MEMORY_ACCESS_32BIT; - p_wid_req[7] = (char)(wid&0x00FF); - p_wid_req[8] = (char)((wid&0xFF00) >> 8); - - p_wid_req[9] = (char)4; - memcpy(p_wid_req + 10, (char*)&data[count][1], 4); - p_wid_req += 14; - } - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_set_sdio_core_init fail, ret = %d\n", ret); - goto out; - } - -out: - return ret; -} - -int rda5890_set_core_patch_polling(struct rda5890_private *priv, const unsigned char (*patch)[2], unsigned char num) -{ - int ret; - char wid_req[255]; - unsigned short wid_req_len = 4 + 8*num; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = priv->wid_msg_id++; - char count = 0 , *p_wid_req = NULL; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s <<< \n", __func__); - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - p_wid_req = wid_req + 4; - for(count = 0; count < num; count ++) - { - wid = WID_PHY_ACTIVE_REG; - p_wid_req[0] = (char)(wid&0x00FF); - p_wid_req[1] = (char)((wid&0xFF00) >> 8); - - p_wid_req[2] = (char)(0x01); - p_wid_req[3] = patch[count][0]; - - wid = WID_PHY_ACTIVE_REG_VAL; - p_wid_req[4] = (char)(wid&0x00FF); - p_wid_req[5] = (char)((wid&0xFF00) >> 8); - - p_wid_req[6] = (char)(0x01); - p_wid_req[7] = patch[count][1]; - p_wid_req += 8; - } - ret = rda5890_wid_request_polling(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_set_core_patch fail, ret = %d \n", ret); - goto out; - } - -out: - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_DEBUG, - "%s >>> \n", __func__); - return ret; -} - -int rda5890_set_core_patch(struct rda5890_private *priv, const unsigned char (*patch)[2], unsigned char num) -{ - int ret; - char wid_req[255]; - unsigned short wid_req_len = 4 + 8*num; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - unsigned short wid; - char wid_msg_id = priv->wid_msg_id++; - char count = 0 , *p_wid_req = NULL; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - p_wid_req = wid_req + 4; - for(count = 0; count < num; count ++) - { - wid = WID_PHY_ACTIVE_REG; - p_wid_req[0] = (char)(wid&0x00FF); - p_wid_req[1] = (char)((wid&0xFF00) >> 8); - - p_wid_req[2] = (char)(0x01); - p_wid_req[3] = patch[count][0]; - - wid = WID_PHY_ACTIVE_REG_VAL; - p_wid_req[4] = (char)(wid&0x00FF); - p_wid_req[5] = (char)((wid&0xFF00) >> 8); - - p_wid_req[6] = (char)(0x01); - p_wid_req[7] = patch[count][1]; - p_wid_req += 8; - } - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_set_core_patch fail, ret = %d \n", ret); - goto out; - } - -out: - return ret; -} - - -int rda5890_get_fw_ver(struct rda5890_private *priv, unsigned long *fw_ver) -{ - int ret; - - ret = rda5890_generic_get_ulong(priv, WID_SYS_FW_VER, fw_ver); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get FW_VER 0x%08lx\n", *fw_ver); - -out: - return ret; -} - -int rda5890_get_mac_addr(struct rda5890_private *priv, unsigned char *mac_addr) -{ - int ret; - - ret = rda5890_generic_get_str(priv, WID_MAC_ADDR, mac_addr, ETH_ALEN); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "STA MAC Address [%02x:%02x:%02x:%02x:%02x:%02x]\n", - mac_addr[0], mac_addr[1], mac_addr[2], - mac_addr[3], mac_addr[4], mac_addr[5]); -out: - return ret; -} - -/* support only one bss per packet for now */ -int rda5890_get_scan_results(struct rda5890_private *priv, - struct rda5890_bss_descriptor *bss_desc) -{ - int ret; - int count = 0; - unsigned char len; - unsigned char buf[sizeof(struct rda5890_bss_descriptor)*RDA5890_MAX_NETWORK_NUM + 2]; - unsigned char first_send = 0; - - ret = rda5890_get_str_unknown_len(priv, WID_SITE_SURVEY_RESULTS, - buf, &len); - if (ret) { - return ret; - } - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get Scan Result, len = %d\n", len); - - if ((len - 2) % sizeof(struct rda5890_bss_descriptor)) { - RDA5890_ERRP("Scan Result len not correct, %d\n", len); - return -EINVAL; - } - - count = (len - 2) / sizeof(struct rda5890_bss_descriptor); - - first_send = *(buf + 1); - memcpy(bss_desc, buf + 2, (len - 2)); - - return (count | first_send << 8); -} - -int rda5890_get_bssid(struct rda5890_private *priv, unsigned char *bssid) -{ - int ret; - - ret = rda5890_generic_get_str(priv, WID_BSSID, bssid, ETH_ALEN); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get BSSID [%02x:%02x:%02x:%02x:%02x:%02x]\n", - bssid[0], bssid[1], bssid[2], - bssid[3], bssid[4], bssid[5]); -out: - return ret; -} - -int rda5890_get_channel(struct rda5890_private *priv, unsigned char *channel) -{ - int ret; - - ret = rda5890_generic_get_uchar(priv, WID_CURRENT_CHANNEL, channel); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get Channel %d\n", *channel); - -out: - return ret; -} - -int rda5890_get_rssi(struct rda5890_private *priv, unsigned char *rssi) -{ - int ret; - - *rssi = 0; - ret = rda5890_generic_get_uchar(priv, WID_RSSI, rssi); - if (ret) { - goto out; - } - - - if(priv->connect_status == MAC_CONNECTED) - { - if(*rssi > 215) - { - rda5890_rssi_up_to_200(priv); - } - else - { - rda5890_sdio_set_notch_by_channel(priv, priv->curbssparams.channel); - } - } - else - *rssi = 0; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get RSSI <<< %d\n", *(char*)rssi); - -out: - return ret; -} - -int rda5890_set_mac_addr(struct rda5890_private *priv, unsigned char *mac_addr) -{ - int ret; - - ret = rda5890_generic_set_str(priv, WID_MAC_ADDR, mac_addr, ETH_ALEN); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set STA MAC Address [%02x:%02x:%02x:%02x:%02x:%02x]\n", - mac_addr[0], mac_addr[1], mac_addr[2], - mac_addr[3], mac_addr[4], mac_addr[5]); -out: - return ret; -} - -int rda5890_set_preamble(struct rda5890_private *priv, unsigned char preamble) -{ - int ret; - - ret = rda5890_generic_set_uchar(priv, WID_PREAMBLE, preamble); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, "rda5890_set_preamble \n"); -out: - return ret; -} - -#ifdef GET_SCAN_FROM_NETWORK_INFO - -int rda5890_set_scan_complete(struct rda5890_private *priv) -{ - int ret; - - ret = rda5890_generic_set_uchar(priv, WID_NETWORK_INFO_EN, 0); - if (ret) { - goto out; - } - -out: - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, "rda5890_set_scan_complete ret=%d \n", ret); - return ret; -} -#endif - -int rda5890_set_ssid(struct rda5890_private *priv, - unsigned char *ssid, unsigned char ssid_len) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set SSID: %s, len = %d\n", ssid, ssid_len); - - ret = rda5890_generic_set_str(priv, WID_SSID, ssid, ssid_len); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set SSID Done\n"); - -out: - return ret; -} - -int rda5890_get_ssid(struct rda5890_private *priv, - unsigned char *ssid, unsigned char *ssid_len) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get SSID \n"); - - ret = rda5890_get_str_unknown_len(priv, WID_SSID, ssid, ssid_len); - if(*ssid_len > 0) - ssid[*ssid_len] = '\0'; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Get SSID Done len:%d %s\n", *ssid_len, *ssid_len > 0? ssid:"NULL"); -out: - return ret; -} -int rda5890_set_bssid(struct rda5890_private *priv, unsigned char *bssid) -{ - int ret; - - ret = rda5890_generic_set_str(priv, WID_BSSID, bssid, ETH_ALEN); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set BSSID [%02x:%02x:%02x:%02x:%02x:%02x]\n", - bssid[0], bssid[1], bssid[2], - bssid[3], bssid[4], bssid[5]); -out: - return ret; -} - - -int rda5890_set_imode(struct rda5890_private *priv, unsigned char imode) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set IMode 0x%02x\n", imode); - - ret = rda5890_generic_set_uchar(priv, WID_802_11I_MODE, imode); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set IMode Done\n"); - -out: - return ret; -} - -int rda5890_set_authtype(struct rda5890_private *priv, unsigned char authtype) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set AuthType 0x%02x\n", authtype); - - ret = rda5890_generic_set_uchar(priv, WID_AUTH_TYPE, authtype); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set AuthType Done\n"); - -out: - return ret; -} - -int rda5890_set_listen_interval(struct rda5890_private *priv, unsigned char interval) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set rda5890_set_listen_interval 0x%02x\n", interval); - - ret = rda5890_generic_set_uchar(priv, WID_LISTEN_INTERVAL, interval); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set rda5890_set_listen_interval Done\n"); - -out: - return ret; -} - -int rda5890_set_link_loss_threshold(struct rda5890_private *priv, unsigned char threshold) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set rda5890_set_link_loss_threshold 0x%02x\n", threshold); - - ret = rda5890_generic_set_uchar(priv, WID_LINK_LOSS_THRESHOLD, threshold); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set rda5890_set_link_loss_threshold Done\n"); - -out: - return ret; -} - - -int rda5890_set_wepkey(struct rda5890_private *priv, - unsigned short index, unsigned char *key, unsigned char key_len) -{ - int ret; - unsigned char key_str[26 + 1]; // plus 1 for debug print - unsigned char key_str_len; - - if (key_len == KEY_LEN_WEP_40) { - sprintf(key_str, "%02x%02x%02x%02x%02x\n", - key[0], key[1], key[2], key[3], key[4]); - key_str_len = 10; - key_str[key_str_len] = '\0'; - } - else if (key_len == KEY_LEN_WEP_104) { - sprintf(key_str, "%02x%02x%02x%02x%02x" - "%02x%02x%02x%02x%02x" - "%02x%02x%02x\n", - key[0], key[1], key[2], key[3], key[4], - key[5], key[6], key[7], key[8], key[9], - key[10], key[11], key[12]); - key_str_len = 26; - key_str[key_str_len] = '\0'; - } - else { - RDA5890_ERRP("Error in WEP Key length %d\n", key_len); - ret = -EINVAL; - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set WEP KEY[%d]: %s\n", index, key_str); - - ret = rda5890_generic_set_str(priv, - (WID_WEP_KEY_VALUE0 + index), key_str, key_str_len); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set WEP KEY[%d] Done\n", index); - -out: - return ret; -} - -static void dump_key(unsigned char *key, unsigned char key_len) -{ - RDA5890_DBGP("%02x %02x %02x %02x %02x %02x %02x %02x\n", - key[0], key[1], key[2], key[3], key[4], key[5], key[6], key[7]); - RDA5890_DBGP("%02x %02x %02x %02x %02x %02x %02x %02x\n", - key[8], key[9], key[10], key[11], key[12], key[13], key[14], key[15]); - if (key_len > 16) - RDA5890_DBGP("%02x %02x %02x %02x %02x %02x %02x %02x\n", - key[16], key[17], key[18], key[19], key[20], key[21], key[22], key[23]); - if (key_len > 24) - RDA5890_DBGP("%02x %02x %02x %02x %02x %02x %02x %02x\n", - key[24], key[25], key[26], key[27], key[28], key[29], key[30], key[31]); -} - -int rda5890_set_ptk(struct rda5890_private *priv, - unsigned char *key, unsigned char key_len) -{ - int ret; - unsigned char key_str[32 + ETH_ALEN + 1]; - unsigned char key_str_len = key_len + ETH_ALEN + 1; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set PTK: len = %d\n", key_len); - if (RDA5890_DBGLA(RDA5890_DA_WID, RDA5890_DL_VERB)) - dump_key(key, key_len); - - if (priv->connect_status != MAC_CONNECTED) { - RDA5890_ERRP("Adding PTK while not connected\n"); - ret = -EINVAL; - goto out; - } - - /*----------------------------------------*/ - /* STA Addr | KeyLength | Key */ - /*----------------------------------------*/ - /* 6 | 1 | KeyLength */ - /*----------------------------------------*/ - - /*---------------------------------------------------------*/ - /* key */ - /*---------------------------------------------------------*/ - /* Temporal Key | Rx Micheal Key | Tx Micheal Key */ - /*---------------------------------------------------------*/ - /* 16 bytes | 8 bytes | 8 bytes */ - /*---------------------------------------------------------*/ - - memcpy(key_str, priv->curbssparams.bssid, ETH_ALEN); - key_str[6] = key_len; - memcpy(key_str + 7, key, 16); - - /* swap TX MIC and RX MIC, rda5890 need RX MIC to be ahead */ - if(key_len > 16) { - memcpy(key_str + 7 + 16, key + 24, 8); - memcpy(key_str + 7 + 24, key + 16, 8); - } - - if(priv->is_wapi) - ret = rda5890_generic_set_str(priv, - WID_ADD_WAPI_PTK, key_str, key_str_len); - else - ret = rda5890_generic_set_str(priv, - WID_ADD_PTK, key_str, key_str_len); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set PTK Done\n"); - -out: - return ret; -} - -int rda5890_set_gtk(struct rda5890_private *priv, unsigned char key_id, - unsigned char *key_rsc, unsigned char key_rsc_len, - unsigned char *key, unsigned char key_len) -{ - int ret; - unsigned char key_str[32 + ETH_ALEN + 8 + 2]; - unsigned char key_str_len = key_len + ETH_ALEN + 8 + 2; - - /*---------------------------------------------------------*/ - /* STA Addr | KeyRSC | KeyID | KeyLength | Key */ - /*---------------------------------------------------------*/ - /* 6 | 8 | 1 | 1 | KeyLength */ - /*---------------------------------------------------------*/ - - /*-------------------------------------*/ - /* key */ - /*-------------------------------------*/ - /* Temporal Key | Rx Micheal Key */ - /*-------------------------------------*/ - /* 16 bytes | 8 bytes */ - /*-------------------------------------*/ - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set GTK: len = %d\n", key_len); - if (RDA5890_DBGLA(RDA5890_DA_WID, RDA5890_DL_VERB)) - dump_key(key, key_len); - - if (priv->connect_status != MAC_CONNECTED) { - RDA5890_ERRP("Adding PTK while not connected\n"); - ret = -EINVAL; - goto out; - } - - memcpy(key_str, priv->curbssparams.bssid, ETH_ALEN); - memcpy(key_str + 6, key_rsc, key_rsc_len); - key_str[14] = key_id; - key_str[15] = key_len; - memcpy(key_str + 16, key, 16); - - /* swap TX MIC and RX MIC, rda5890 need RX MIC to be ahead */ - if(key_len > 16) { - //memcpy(key_str + 16 + 16, key + 16, key_len - 16); - memcpy(key_str + 16 + 16, key + 24, 8); - memcpy(key_str + 16 + 24, key + 16, 8); - } - - if(priv->is_wapi) - ret = rda5890_generic_set_str(priv, - WID_ADD_WAPI_RX_GTK, key_str, key_str_len); - else - ret = rda5890_generic_set_str(priv, - WID_ADD_RX_GTK, key_str, key_str_len); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set GTK Done\n"); - -out: - return ret; -} - -int rda5890_set_scan_timeout(struct rda5890_private *priv) -{ - int ret; - char wid_req[14]; - unsigned short wid_req_len = 19; - char wid_rsp[32]; - unsigned short wid_rsp_len = 32; - char wid_msg_id = priv->wid_msg_id++; - char *ptr_payload; - unsigned short wid = 0; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "rda5890_set_scan_timeout <<< \n"); - - wid = WID_SITE_SURVEY_SCAN_TIME; - - wid_req[0] = 'W'; - wid_req[1] = wid_msg_id; - - wid_req[2] = (char)(wid_req_len&0x00FF); - wid_req[3] = (char)((wid_req_len&0xFF00) >> 8); - - wid_req[4] = (char)(wid&0x00FF); - wid_req[5] = (char)((wid&0xFF00) >> 8); - wid_req[6] = 2; - wid_req[7] = 50; //50 ms one channel - wid_req[8] = 0; - - wid = WID_ACTIVE_SCAN_TIME; - wid_req[9] = (char)(wid&0x00FF); - wid_req[10] = (char)((wid&0xFF00) >> 8); - wid_req[11] = 2; - wid_req[12] = 50; //50 ms one channel - wid_req[13] = 0; - - wid = WID_PASSIVE_SCAN_TIME; - wid_req[14] = (char)(wid&0x00FF); - wid_req[15] = (char)((wid&0xFF00) >> 8); - wid_req[16] = 2; - wid_req[17] = 50; //50 ms one channel - wid_req[18] = 0; - - ret = rda5890_wid_request(priv, wid_req, wid_req_len, wid_rsp, &wid_rsp_len); - if (ret) { - RDA5890_ERRP("rda5890_set_scan_timeout fail, ret = %d\n", ret); - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "rda5890_set_scan_timeout >>> \n"); - -out: - return ret; -} - - -int rda5890_set_pm_mode(struct rda5890_private *priv, unsigned char pm_mode) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set PM Mode 0x%02x\n", pm_mode); - - ret = rda5890_generic_set_uchar(priv, WID_POWER_MANAGEMENT, pm_mode); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set PM Mode Done\n"); - -out: - return ret; -} - -int rda5890_set_preasso_sleep(struct rda5890_private *priv, unsigned int preasso_sleep) -{ - int ret; - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set Preasso Sleep 0x%08x\n", preasso_sleep); - - ret = rda5890_generic_set_ulong(priv, WID_PREASSO_SLEEP, preasso_sleep); - if (ret) { - goto out; - } - - RDA5890_DBGLAP(RDA5890_DA_WID, RDA5890_DL_TRACE, - "Set Preasso Sleep Done\n"); - -out: - return ret; -} - diff --git a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wid.h b/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wid.h deleted file mode 100755 index 7cf712f4c4cb..000000000000 --- a/drivers/net/wireless/rockchip_wlan/rda5990/rda_wlan/rda5890_wid.h +++ /dev/null @@ -1,288 +0,0 @@ -#ifndef _RDA5890_WID_H_ -#define _RDA5890_WID_H_ - -#define MAX_STRING_LEN 256 -#define MAX_CMD_LEN MAX_STRING_LEN -#define RDA5890_MAX_WID_LEN MAX_CMD_LEN - 2 - -#define MAC_CONNECTED 1 -#define MAC_DISCONNECTED 0 - -#define WID_STATUS_SUCCESS 1 - -typedef enum -{ - G_SHORT_PREAMBLE = 0, - G_LONG_PREAMBLE = 1, - G_AUTO_PREAMBLE = 2 -}G_PREAMBLE_T; - -/* WLAN Identifiers */ -typedef enum { - WID_NIL = -1, - WID_BSS_TYPE = 0x0000, - WID_CURRENT_TX_RATE = 0x0001, - WID_CURRENT_CHANNEL = 0x0002, - WID_PREAMBLE = 0x0003, - WID_11G_OPERATING_MODE = 0x0004, - WID_STATUS = 0x0005, - WID_11G_PROT_MECH = 0x0006, - -#ifdef MAC_HW_UNIT_TEST_MODE - WID_GOTO_SLEEP = 0x0007, -#else /* MAC_HW_UNIT_TEST_MODE */ - WID_SCAN_TYPE = 0x0007, -#endif /* MAC_HW_UNIT_TEST_MODE */ - WID_PRIVACY_INVOKED = 0x0008, - WID_KEY_ID = 0x0009, - WID_QOS_ENABLE = 0x000A, - WID_POWER_MANAGEMENT = 0x000B, - WID_802_11I_MODE = 0x000C, - WID_AUTH_TYPE = 0x000D, - WID_SITE_SURVEY = 0x000E, - WID_LISTEN_INTERVAL = 0x000F, - WID_DTIM_PERIOD = 0x0010, - WID_ACK_POLICY = 0x0011, - WID_RESET = 0x0012, - WID_PCF_MODE = 0x0013, - WID_CFP_PERIOD = 0x0014, - WID_BCAST_SSID = 0x0015, - -#ifdef MAC_HW_UNIT_TEST_MODE - WID_PHY_TEST_PATTERN = 0x0016, -#else /* MAC_HW_UNIT_TEST_MODE */ - WID_DISCONNECT = 0x0016, -#endif /* MAC_HW_UNIT_TEST_MODE */ - - WID_READ_ADDR_SDRAM = 0x0017, - WID_TX_POWER_LEVEL_11A = 0x0018, - WID_REKEY_POLICY = 0x0019, - WID_SHORT_SLOT_ALLOWED = 0x001A, - WID_PHY_ACTIVE_REG = 0x001B, - WID_PHY_ACTIVE_REG_VAL = 0x001C, - WID_TX_POWER_LEVEL_11B = 0x001D, - WID_START_SCAN_REQ = 0x001E, - WID_RSSI = 0x001F, - WID_JOIN_REQ = 0x0020, - WID_ANTENNA_SELECTION = 0x0021, - WID_USER_CONTROL_ON_TX_POWER = 0x0027, - WID_MEMORY_ACCESS_8BIT = 0x0029, - WID_UAPSD_SUPPORT_AP = 0x002A, - - WID_CURRENT_MAC_STATUS = 0x0031, - WID_AUTO_RX_SENSITIVITY = 0x0032, - WID_DATAFLOW_CONTROL = 0x0033, - WID_SCAN_FILTER = 0x0036, - WID_LINK_LOSS_THRESHOLD = 0x0037, - WID_AUTORATE_TYPE = 0x0038, - WID_CCA_THRESHOLD = 0x0039, - - WID_802_11H_DFS_MODE = 0x003B, - WID_802_11H_TPC_MODE = 0x003C, - - WID_PHY_REG_ADDR = 0x0040, - WID_PHY_REG_VAL = 0x0041, - WID_PTA_MODE = 0x0042, - WID_TRAP_TEST = 0x0043, - WID_PTA_BLOCK_BT = 0x0044, - WID_NETWORK_INFO_EN = 0x0045, - - WID_RTS_THRESHOLD = 0x1000, - WID_FRAG_THRESHOLD = 0x1001, - WID_SHORT_RETRY_LIMIT = 0x1002, - WID_LONG_RETRY_LIMIT = 0x1003, - WID_CFP_MAX_DUR = 0x1004, - WID_PHY_TEST_FRAME_LEN = 0x1005, - WID_BEACON_INTERVAL = 0x1006, - WID_MEMORY_ACCESS_16BIT = 0x1008, - - WID_RX_SENSE = 0x100B, - WID_ACTIVE_SCAN_TIME = 0x100C, - WID_PASSIVE_SCAN_TIME = 0x100D, - WID_SITE_SURVEY_SCAN_TIME = 0x100E, - WID_JOIN_TIMEOUT = 0x100F, - WID_AUTH_TIMEOUT = 0x1010, - WID_ASOC_TIMEOUT = 0x1011, - WID_11I_PROTOCOL_TIMEOUT = 0x1012, - WID_EAPOL_RESPONSE_TIMEOUT = 0x1013, - WID_CCA_BUSY_STATUS = 0x1014, - - WID_FAILED_COUNT = 0x2000, - WID_RETRY_COUNT = 0x2001, - WID_MULTIPLE_RETRY_COUNT = 0x2002, - WID_FRAME_DUPLICATE_COUNT = 0x2003, - WID_ACK_FAILURE_COUNT = 0x2004, - WID_RECEIVED_FRAGMENT_COUNT = 0x2005, - WID_MULTICAST_RECEIVED_FRAME_COUNT = 0x2006, - WID_FCS_ERROR_COUNT = 0x2007, - WID_SUCCESS_FRAME_COUNT = 0x2008, - WID_PHY_TEST_PKT_CNT = 0x2009, - WID_PHY_TEST_TXD_PKT_CNT = 0x200A, - WID_TX_FRAGMENT_COUNT = 0x200B, - WID_TX_MULTICAST_FRAME_COUNT = 0x200C, - WID_RTS_SUCCESS_COUNT = 0x200D, - WID_RTS_FAILURE_COUNT = 0x200E, - WID_WEP_UNDECRYPTABLE_COUNT = 0x200F, - WID_REKEY_PERIOD = 0x2010, - WID_REKEY_PACKET_COUNT = 0x2011, -#ifdef MAC_HW_UNIT_TEST_MODE - WID_Q_ENABLE_INFO = 0x2012, -#else /* MAC_HW_UNIT_TEST_MODE */ - WID_802_1X_SERV_ADDR = 0x2012, -#endif /* MAC_HW_UNIT_TEST_MODE */ - WID_STACK_IP_ADDR = 0x2013, - WID_STACK_NETMASK_ADDR = 0x2014, - WID_HW_RX_COUNT = 0x2015, - WID_MEMORY_ADDRESS = 0x201E, - WID_MEMORY_ACCESS_32BIT = 0x201F, - WID_RF_REG_VAL = 0x2021, - WID_FIRMWARE_INFO = 0x2023, - - WID_SYS_FW_VER = 0x2801, - WID_SYS_DBG_LVL = 0x2802, - WID_SYS_DBG_AREA = 0x2803, - WID_UT_MODE = 0x2804, - WID_UT_TX_LEN = 0x2805, - WID_PTA_CTS_FRAME_LEN = 0x2806, - WID_PREASSO_SLEEP = 0x2807, - - WID_SSID = 0x3000, - WID_FIRMWARE_VERSION = 0x3001, - WID_OPERATIONAL_RATE_SET = 0x3002, - WID_BSSID = 0x3003, - WID_WEP_KEY_VALUE0 = 0x3004, - WID_WEP_KEY_VALUE1 = 0x3005, - WID_WEP_KEY_VALUE2 = 0x3006, - WID_WEP_KEY_VALUE3 = 0x3007, - WID_802_11I_PSK = 0x3008, - WID_HCCA_ACTION_REQ = 0x3009, - WID_802_1X_KEY = 0x300A, - WID_HARDWARE_VERSION = 0x300B, - WID_MAC_ADDR = 0x300C, - WID_PHY_TEST_DEST_ADDR = 0x300D, - WID_PHY_TEST_STATS = 0x300E, - WID_PHY_VERSION = 0x300F, - WID_SUPP_USERNAME = 0x3010, - WID_SUPP_PASSWORD = 0x3011, - WID_SITE_SURVEY_RESULTS = 0x3012, - WID_RX_POWER_LEVEL = 0x3013, - - WID_ADD_WEP_KEY = 0x3019, - WID_REMOVE_WEP_KEY = 0x301A, - WID_ADD_PTK = 0x301B, - WID_ADD_RX_GTK = 0x301C, - WID_ADD_TX_GTK = 0x301D, - WID_REMOVE_KEY = 0x301E, - WID_ASSOC_REQ_INFO = 0x301F, - WID_ASSOC_RES_INFO = 0x3020, - WID_UPDATE_RF_SUPPORTED_INFO = 0x3021, - WID_COUNTRY_IE = 0x3022, - - WID_WAPI_ASSOC_IE = 0x3023, - WID_ADD_WAPI_PTK = 0x3024, - WID_ADD_WAPI_RX_GTK = 0x3025, - WID_ADD_WAPI_TX_GTK = 0x3026, - - WID_CONFIG_HCCA_ACTION_REQ = 0x4000, - WID_UAPSD_CONFIG = 0x4001, - WID_UAPSD_STATUS = 0x4002, - WID_WMM_AP_AC_PARAMS = 0x4003, - WID_WMM_STA_AC_PARAMS = 0x4004, - WID_NEWORK_INFO = 0x4005, - WID_STA_JOIN_INFO = 0x4006, - WID_CONNECTED_STA_LIST = 0x4007, - WID_HUT_STATS = 0x4082, - WID_STATISTICS = 0x4008, - WID_MEMORY_DUMP = 0x4009, - WID_LOAD_TRAP_MAP = 0x400a, - WID_AGC_DGC_TBL = 0x400b, - WID_ALL = 0x7FFE, - WID_MAX = 0xFFFF -} WID_T; - -int rda5890_wid_request(struct rda5890_private *priv, - char *wid_req, unsigned short wid_req_len, - char *wid_rsp, unsigned short *wid_rsp_len); - -void rda5890_wid_response(struct rda5890_private *priv, - char *wid_rsp, unsigned short wid_rsp_len); - -void rda5890_wid_status(struct rda5890_private *priv, - char *wid_status, unsigned short wid_status_len); - - -void rda5890_card_to_host(struct rda5890_private *priv, - char *packet, unsigned short packet_len); - -int rda5890_start_scan(struct rda5890_private *priv); -int rda5890_start_scan_enable_network_info(struct rda5890_private *priv); -int rda5890_start_join(struct rda5890_private *priv); - -int rda5890_get_fw_ver(struct rda5890_private *priv, unsigned long *fw_ver); -int rda5890_get_mac_addr(struct rda5890_private *priv, unsigned char *mac_addr); -int rda5890_get_scan_results(struct rda5890_private *priv, - struct rda5890_bss_descriptor *bss_desc); -int rda5890_get_bssid(struct rda5890_private *priv, unsigned char *bssid); -int rda5890_set_bssid(struct rda5890_private *priv, unsigned char *bssid); - -int rda5890_get_channel(struct rda5890_private *priv, unsigned char *channel); -int rda5890_get_rssi(struct rda5890_private *priv, unsigned char *rssi); - -int rda5890_set_mac_addr(struct rda5890_private *priv, unsigned char *mac_addr); -int rda5890_set_preamble(struct rda5890_private *priv, unsigned char preamble); - -int rda5890_set_ssid(struct rda5890_private *priv, - unsigned char *ssid, unsigned char ssid_len); -int rda5890_get_ssid(struct rda5890_private *priv, - unsigned char *ssid, unsigned char *ssid_len); -int rda5890_set_imode(struct rda5890_private *priv, unsigned char imode); -int rda5890_set_authtype(struct rda5890_private *priv, unsigned char authtype); -int rda5890_set_listen_interval(struct rda5890_private *priv, unsigned char interval); -int rda5890_set_link_loss_threshold(struct rda5890_private *priv, unsigned char threshold); -int rda5890_set_wepkey(struct rda5890_private *priv, - unsigned short index, unsigned char *key, unsigned char key_len); -int rda5890_set_ptk(struct rda5890_private *priv, - unsigned char *key, unsigned char key_len); -int rda5890_set_gtk(struct rda5890_private *priv, unsigned char key_id, - unsigned char *key_rsc, unsigned char key_rsc_len, - unsigned char *key, unsigned char key_len); - -int rda5890_set_pm_mode(struct rda5890_private *priv, unsigned char pm_mode); -int rda5890_set_preasso_sleep(struct rda5890_private *priv, unsigned int preasso_sleep); - -int rda5890_generic_get_str(struct rda5890_private *priv, - unsigned short wid, unsigned char *val, unsigned char len); -int rda5890_generic_set_str(struct rda5890_private *priv, - unsigned short wid, unsigned char *val, unsigned char len); - -int rda5890_generic_set_uchar(struct rda5890_private *priv, - unsigned short wid, unsigned char val); -int rda5890_generic_get_ushort(struct rda5890_private *priv, - unsigned short wid, unsigned short *val); -int rda5890_generic_set_ushort(struct rda5890_private *priv, - unsigned short wid, unsigned short val); - -int rda5890_generic_set_ulong(struct rda5890_private *priv, - unsigned short wid, unsigned long val); -int rda5890_generic_get_ulong(struct rda5890_private *priv, - unsigned short wid, unsigned long *val); - -int rda5890_set_core_init(struct rda5890_private *priv, const unsigned int (*data)[2], unsigned char num); -int rda5890_set_core_patch(struct rda5890_private *priv, const unsigned char (*patch)[2], unsigned char num); -int rda5890_set_core_init_polling(struct rda5890_private *priv, const unsigned int (*data)[2], unsigned char num); -int rda5890_set_core_patch_polling(struct rda5890_private *priv, const unsigned char (*patch)[2], unsigned char num); -int rda5890_set_scan_timeout(struct rda5890_private *priv); - -int rda5890_set_txrate(struct rda5890_private *priv, unsigned char mbps); -#ifdef GET_SCAN_FROM_NETWORK_INFO - -int rda5890_set_scan_complete(struct rda5890_private *priv); -#endif -int rda5890_wid_request_polling(struct rda5890_private *priv, - char *wid_req, unsigned short wid_req_len, - char *wid_rsp, unsigned short *wid_rsp_len); -int rda5890_check_wid_response(char *wid_rsp, unsigned short wid_rsp_len, - unsigned short wid, char wid_msg_id, - char payload_len, char **ptr_payload); -#endif -